Ë
    ¬iËjÉ¦ ã                   ó¦  — U d Z ddlZddlZddlZddlZddlZddlZddlZddlZddl	Z	ddl
mc mZ ddlmZmZmZ ddlmZmZmZmZmZ ddlmZmZmZmZ ddlZddlZddlZddlZ	 ddl m!Z" dZ#ddl!Z!dd	l%m&Z&m'Z'm(Z( ejR                  d
k(  r;	 ejT                  jW                  dd¬«       ejX                  jW                  dd¬«       dZ.dZ/dZ0dZ1dZ2dZ3dZ4dZ5dZ6ejn                  jq                  ejn                  js                  e:«      «      Z;ejn                  jy                  e;d«      Z=ejn                  jy                  e;d«      Z>ejn                  jy                  e;d«      Z?ejn                  jy                  e;d«      Z@ejn                  jy                  e;d«      ZAejn                  jy                  e;d«      ZBejn                  jy                  e;d«      ZCejn                  jy                  e;d«      ZDejn                  jy                  e;d«      ZEejn                  jy                  e;d «      ZF eG«       ZHeGeId!<   d"ZJd#ZKd$ZLd%ZMd&d'd(d)d*d+œZNd,ZOd-ZPd'd.d/d0d1œZQd2ZRdaSd�d3eTd4eUd5eVfd6„ZWd�d3eTd5dfd7„ZXd‘d8„ZY ej´                  eY«       d9Z[d:Z\e]j½                  d;«      Z_i a`eeUef   eId<<   e6fd=eUd>eUd5dfd?„Zad‘d@„Zb G dA„ dB«      Zc eceA«      Zdd5eeUef   fdC„ZedDeeUef   d5dfdE„Zfd‘dF„Zgd‘dG„ZhdHeUd5eeUef   fdI„ZidHeUd5eeVeTeeUef   f   fdJ„ZjddlkZkddllZld’dKeUdLeUdMeeeUeUf      d5eeUeeU   f   fdN„Zmd“dHeUdOeeU   dPeeU   dMeeeUeUf      d5eeU   f
dQ„Znd’dReeUef   dSeeU   d5eUfdT„ZodUZpd’dMeeeUeUf      d5efdV„Zqd’dMeeeUeUf      d5efdW„ZrdaseeU   eIdX<   dateeV   eIdY<   daud5eeU   fdZ„Zvd5eVfd[„Zwd’d\eUd]eUd^eeUeUf   d_ee]   d5eeTe]f   f
d`„ZxdaeUd5eVfdb„ZydceUd5eeeU   eeU   f   fdd„ZzdeeeUef   dReeUef   dfeUd5eUfdg„Z{dheUdHeUdReeUef   dMeeeUeUf      d5eeeeUef      eeU   f   f
di„Z|d“daeUdjeUdkeUdReeUef   dleeUef   dmeeU   dMeeeUeUf      dHeeU   d5eeeU   eeU   eeU   f   fdn„Z}deeeUef   d5eVfdo„Z~d5eeeU   eeeUef      eeU   f   fdp„ZdeeeUef   d5eeUef   fdq„Z€dreeU   d5eUfds„Z�dreeU   d5eVfdt„Z‚d”deeeUef   dReeUef   dHeUdleeUef   dueTd5eeUef   fdv„Zƒd•dSeeU   dweeeeUef         dxeVd5eeUef   fdy„Z„da…da†i Z‡eeUef   eIdz<   i ZˆeeUe‰f   eId{<   d|ed5ee   fd}„ZŠd~ed5eUfd„Z‹d€eeUef   d5eUfd�„ZŒd€eeUef   d5eVfd‚„Z�d€eeUef   d5eeeUef      fdƒ„ZŽd„ed5eeeUef      fd…„Z�d]eUd†eUd5eeeUef      fd‡„Z�d5eeeeUef         fdˆ„Z‘d5eeeUef      fd‰„Z’d5eeeUef      fdŠ„Z“d–d‹eTdSeeU   dxeVd5dfdŒ„Z”d�„ Z•e–dŽk(  r e•«        yy# e$$ r
 ddl!Z"dZ#Y �ŒUw xY w# e-$ r Y �Œ	w xY w)—a&  
====================================================================
 DAZN - Manager & DRM Extractor (Widevine WVD)
 Auto-Extractor: Live & Linear Streams (DAZN 1, Plus, ecc.)
 Output: dazn_channels.json & dazn_playlist.m3u
====================================================================
é    N)ÚdatetimeÚ	timedeltaÚtimezone)ÚDictÚListÚOptionalÚTupleÚAny)ÚurlparseÚparse_qsÚ	urlencodeÚ
urlunparse)ÚrequestsTF)ÚPSSHÚCdmÚDeviceÚwin32úutf-8Úreplace©ÚencodingÚerrorsz[32mz[33mz[31mz[36mz[34mz[35mz[1mz[2mz[0mzdazn_config.jsonzdazn_tokens.jsonzpssh_cache.jsonzWVD.wvdz	proxy.txtzdazn_channels.jsonzdazn_proxy_data.jsonzdazn_playlist.m3uzdazn_playlist_proxy.m3uzdazn_proxy.pyÚ_eligibility_blocked_idsÚ1daica1elq2701s7zajjchy47sz$661803d9-7d20-4569-9870-b0add6708f1ezbhttps://legaseriea-live-prd.cdn.netrw.it/out/v1/s-prd/ch-01-prd-s-v2/dash-ch-01-prd-s-hd/index.mpdzShttps://product-services-cdn.deltatre.digital/seriea/entitlement/api/v2/main/videosúapplication/jsonz!application/json, text/plain, */*zhttps://www.legaseriea.itzhttps://www.legaseriea.it/zoMozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/146.0.0.0 Safari/537.36)úContent-TypeÚAcceptÚOriginÚRefererú
User-Agentz¡https://rail-router.discovery.indazn.com/eu/v11/Rail?platform=web&id=LiveAndNextNew&country=it&brand=dazn&languageCode=it&params=PageType:Home%3BContentType:Nonezyhttps://rail-router.discovery.indazn.com/eu/v11/Rail?platform=web&id=Livetvschedule&country=it&brand=dazn&languageCode=itúhttps://www.dazn.comúhttps://www.dazn.com/úoMozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/143.0.0.0 Safari/537.36)ÚacceptÚoriginÚrefererú
user-agentz6https://image.discovery.indazn.com/eu/v2/eu/image/?id=ÚportÚhostÚreturnc                 ó   — 	 t        j                   t         j                  t         j                  «      5 }|j                  d«       |j	                  || f«      dk(  cd d d «       S # 1 sw Y   y xY w# t
        $ r Y yw xY w)Ng      à?r   F)ÚsocketÚAF_INETÚSOCK_STREAMÚ
settimeoutÚ
connect_exÚ	Exception)r(   r)   Úss      ú6/var/www/addictedbytheproject.nl/esdrongo/dazn/dazn.pyÚis_port_openr4   t   sj   € ðÜ�]‰]œ6Ÿ>™>¬6×+=Ñ+=Ó>ð 	3À!Ø�L‰L˜ÔØ—<‘<  t Ó-°Ñ2÷	3÷ 	3ò 	3ûô ò Ùðús.   ‚2A1 ´'A%Á	A1 Á%A.Á*A1 Á.A1 Á1	A=Á<A=c                 óØ  — t        | «      rt        d| › d�t        «       y t        j                  j                  t        «      st        dt        › �t        «       y t        d| › d�t        «       	 t        j                  t        j                  t        gt        ¬«      at        dt        j                  › d�t        «       y # t         $ r}t        d	|› �t"        «       Y d }~y d }~ww xY w)
Nu5   ðŸ“¡ DAZN Proxy giÃ  attivo e in ascolto sulla porta ú.u#   âš ï¸� Script proxy non trovato in u3   ðŸš€ Avvio automatico DAZN HTTPS Proxy sulla porta ú...)Úcwdu+   âœ… DAZN Proxy avviato in background (PID: ú)u'   â�Œ Impossibile avviare dazn_proxy.py: )r4   ÚlogÚGREENÚosÚpathÚexistsÚPROXY_SCRIPT_FILEÚYELLOWÚCYANÚ
subprocessÚPopenÚsysÚ
executableÚ
SCRIPT_DIRÚ_PROXY_PROCESSÚpidr1   ÚRED)r(   Úes     r3   Úensure_proxy_runningrK   |   sÈ   € ä�DÔÜÐCÀDÀ6ÈÐKÌUÔSØä�7‰7�>‰>Ô+Ô,ÜÐ1Ô2CÐ1DÐEÄvÔNØäÐ
=¸d¸VÀ3ÐGÌÔNð@Ü#×)Ñ)Ü�^‰^Ô.Ð/Üô
ˆô 	Ð9¼.×:LÑ:LÐ9MÈQÐOÔQVÕWøÜò @ÜÐ5°a°SÐ9¼3×?Ñ?ûð@ús   Á1AC Ã	C)ÃC$Ã$C)c                  ó  — t         rQt         j                  «       €<t        dt        «       	 t         j	                  «        t         j                  d¬«       y y y # t        $ r( 	 t         j                  «        Y y # t        $ r Y Y y w xY ww xY w)Nu   ðŸ›‘ Arresto DAZN Proxy...é   )Útimeout)rG   Úpollr:   r@   Ú	terminateÚwaitr1   Úkill© ó    r3   Ú
stop_proxyrU   �   s{   € åœ.×-Ñ-Ó/Ð7ÜÐ(¬&Ô1ð	Ü×$Ñ$Ô&Ü×Ñ¨ÐÕ*ð	 8€~øô
 ò 	ðÜ×#Ñ#Ö%øÜò Úðúð	ús)   ¬*A Á	B
Á#A9Á9	BÂB
ÂBÂB
i0*  z$edef8ba9-79d6-4ace-a3c8-27dcd51d21edÚ edef8ba979d64acea3c827dcd51d21edÚ
pssh_cacheÚmsgÚcolorc                 ó|   — t        |› dt        j                  «       j                  d«      › d| › t        › �d¬«       y )Nú[z%H:%M:%Sú] T)Úflush)Úprintr   ÚnowÚstrftimeÚRESET)rX   rY   s     r3   r:   r:   ©   s4   € Ü	ˆUˆG�1”X—\‘\“^×,Ñ,¨ZÓ8Ð9¸¸C¸5ÄÀÐ
HÐPTÖUrT   c                  ó‚   — t         › dt        › d› t        › dt        › dt        › dt        › d› t        › �} t	        | «       y )Nzž
  ____     _     ______  _   _ 
 |  _ \   / \   |__  / \| \ | |
 | | | | / _ \    / /|  \|  \| |
 | |_| |/ ___ \  / /_| |\ \  |
 |____//_/   \_\/____|_| \_|
õÒ   â•�â•�â•�â•�â•�â•�â•�â•�â•�â•�â•�â•�â•�â•�â•�â•�â•�â•�â•�â•�â•�â•�â•�â•�â•�â•�â•�â•�â•�â•�â•�â•�â•�â•�â•�â•�â•�â•�â•�â•�â•�â•�â•�â•�â•�â•�â•�â•�â•�â•�â•�â•�â•�â•�â•�â•�â•�â•�â•�â•�â•�â•�â•�â•�â•�â•�â•�â•�â•�â•�ú
u=     â—† DAZN Auto-Manager Â· Widevine Extractor & Decryptor â—†)r@   ÚBLUEra   rA   r^   )Úbanners    r3   Úprint_bannerrg   ¬   sO   € Ü�ð ô €€z€l”5�'ð Ü€ÐCÄEÀ7ð KÜ€€z€l”5�'ð€Fô 
ˆ&…MrT   c                   ó¼   — e Zd ZdZefdefd„Zdedee   fd„Zde	ddfd	„Z
dd
e	ddfd„Zdeeeef      fd„Zdeeeef      fd„Zdefd„Zdeeeeeef      fd„Zy)ÚProxyManagerzKCarica, analizza, valida e ruota i proxy da proxy.txt o da dazn_config.jsonÚfilepathc                 ó\   — || _         g | _        d | _        d| _        | j	                  «        y )Nr   )rj   ÚproxiesÚconfig_proxyÚcurrent_idxÚload)Úselfrj   s     r3   Ú__init__zProxyManager.__init__»   s)   € Ø ˆŒØ"$ˆŒØ6:ˆÔØˆÔØ�	‰	�rT   Úliner*   c                 ó$  — |j                  «       }|r|j                  d«      ry |j                  d«      r|S |j                  d«      }t        |«      dk(  r|\  }}}}d|› d|› d|› d|› �S t        |«      dk(  rd|d   › d|d	   › �S d|v rd|› �S y )
Nú#)úhttp://zhttps://z	socks5://z
socks5h://ú:é   ru   ú@rM   r   é   )ÚstripÚ
startswithÚsplitÚlen)rp   rr   Úpartsr)   r(   ÚuserÚpwds          r3   Úparse_proxy_linezProxyManager.parse_proxy_lineÂ   s²   € Ø�z‰z‹|ˆÙ�t—‘ sÔ+Øà�?‰?ÐMÔNØˆKà—
‘
˜3“ˆÜˆu‹:˜Š?Ø$)Ñ!ˆD�$˜˜cØ˜T˜F ! C 5¨¨$¨¨q°°Ð7Ð7Ü�‹Z˜1Š_Ø˜U 1™X˜J a¨¨a© zÐ2Ð2Ø�D‰[Ø˜T˜FÐ#Ð#àrT   Ú
proxy_confNc                 ó’  — t        |t        «      rZ|j                  d«      xs |j                  d«      }|j                  d«      xs |j                  d«      }|r||xs |dœ| _        y y t        |t        «      rM|j                  «       r<| j                  |j                  «       «      xs |j                  «       }||dœ| _        y y y )NÚhttpÚhttps©r„   r…   )Ú
isinstanceÚdictÚgetrm   Ústrrz   r�   )rp   r‚   Úhttp_pÚhttps_pÚparseds        r3   Úset_config_proxyzProxyManager.set_config_proxyÕ   s°   € Ü�j¤$Ô'Ø—^‘^ FÓ+ÒF¨z¯~©~¸gÓ/FˆFØ —n‘n WÓ-ÒG°·±ÀÓ1GˆGÙØ-3¸gÒ>OÈÑ$P�Õ!ð ä˜
¤CÔ(¨Z×-=Ñ-=Ô-?Ø×*Ñ*¨:×+;Ñ+;Ó+=Ó>ÒTÀ*×BRÑBRÓBTˆFØ)/¸&Ñ AˆDÕð .@Ð(rT   rm   c                 ó¾  — g | _         |�| j                  |«       t        j                  j	                  | j
                  «      rq	 t        | j
                  ddd¬«      5 }|D ]@  }| j                  |«      }|sŒ|| j                   vsŒ&| j                   j                  |«       ŒB 	 d d d «       d| _
        y d| _
        y # 1 sw Y   ŒxY w# t        $ r
 Y d| _
        y w xY w)NÚrr   Úignorer   r   )rl   rŽ   r<   r=   r>   rj   Úopenr�   Úappendr1   rn   )rp   rm   Úfrr   r�   s        r3   ro   zProxyManager.loadß   sË   € ØˆŒØÐ#Ø×!Ñ! ,Ô/ä�7‰7�>‰>˜$Ÿ-™-Ô(ðÜ˜$Ÿ-™-¨°wÀxÔPð 8ÐTUØ !ò 8˜Ø!%×!6Ñ!6°tÓ!<˜Ú! f°D·L±LÒ&@Ø ŸL™L×/Ñ/°Õ7ñ8÷8ð ˆÕ˜1ˆÕ÷8ð 8ûô
 ò ØàˆÕðús6   ÁC	 ÁB=Á8B=ÂB=Â%C	 Â=CÃC	 Ã		CÃCc                 ó´   — | j                   r4| j                   | j                  t        | j                   «      z     }||dœS | j                  r| j                  S y )Nr†   )rl   rn   r}   rm   )rp   Ú	proxy_urls     r3   Úget_dictzProxyManager.get_dictð   sN   € Ø�<Š<ØŸ™ T×%5Ñ%5¼¸D¿L¹LÓ8IÑ%IÑJˆIØ%°	Ñ:Ð:Ø×ÒØ×$Ñ$Ð$ØrT   c                 óŽ   — | j                   r*| j                  dz   t        | j                   «      z  | _        | j                  «       S )Nry   )rl   rn   r}   r—   ©rp   s    r3   ÚrotatezProxyManager.rotateø   s6   € Ø�<Š<Ø $× 0Ñ 0°1Ñ 4¼¸D¿L¹LÓ8IÑIˆDÔØ�}‰}‹ÐrT   c                 ód   — | j                   rt        | j                   «      S | j                  rdS dS )Nry   r   )rl   r}   rm   r™   s    r3   ÚcountzProxyManager.countý   s*   € Ø$(§L¢LŒs�4—<‘<Ó ÐU¸D×<MÒ<M°qÐUÐSTÐUrT   c           	      óÆ  — g }t        | j                  «      }|s*| j                  r|j                  | j                  d   «       |D ]¼  }||dœ}t	        j                  «       }	 t        j                  d|d¬«      }t        t	        j                  «       |z
  dz  d«      }|j                  r6|j                  «       j                  dd	«      }|j                  |d
||f«       n"|j                  |dd|j                  › �|f«       Œ¾ |S # t        $ rP}	t        t	        j                  «       |z
  dz  d«      }|j                  |dt        |	«      d d |f«       Y d }	~	�Œd }	~	ww xY w)Nr„   r†   z!https://api.ipify.org?format=jsoné
   )rl   rN   éè  ry   ÚipÚOKTFúHTTP é   )Úlistrl   rm   r“   Útimer   r‰   ÚroundÚokÚjsonÚstatus_coder1   rŠ   )
rp   ÚresultsÚlist_to_testÚpÚproxies_dictÚt0r�   Údurr    rJ   s
             r3   Útest_allzProxyManager.test_all   s<  € ØˆÜ˜DŸL™LÓ)ˆÙ × 1Ò 1Ø×Ñ × 1Ñ 1°&Ñ 9Ô:àò 	=ˆAØ$%°Ñ2ˆLÜ—‘“ˆBð
=Ü—L‘LÐ!DÈlÐdfÔg�ÜœTŸY™Y›[¨2Ñ-°Ñ5°qÓ9�Ø—4’4ØŸ™›Ÿ™ d¨DÓ1�BØ—N‘N A t¨R°Ð#5Õ6à—N‘N A u°°a·m±m°_Ð.EÀsÐ#KÔLøð	=ð ˆøô ò =ÜœTŸY™Y›[¨2Ñ-°Ñ5°qÓ9�Ø—‘  5¬#¨a«&°°"¨+°sÐ;×<Ò<ûð=ús   Á#B DÄ	E ÄAEÅE ©N)Ú__name__Ú
__module__Ú__qualname__Ú__doc__Ú
PROXY_FILErŠ   rq   r   r�   r
   rŽ   ro   r   r—   rš   Úintrœ   r   r	   ÚboolÚfloatr°   rS   rT   r3   ri   ri   ¹   s³   „ ÙUØ'1ñ  ó ð Sð ¨X°c©]ó ð&B¨3ð B°4ó Bñ ð °ó ð"˜( 4¨¨S¨¡>Ñ2ó ð˜  c¨3 h¡Ñ0ó ð
V�só Vð˜$˜u S¨$°°UÐ%:Ñ;Ñ<ô rT   ri   c                  ó(  — dddddddddddœdd	d
ddddœddd	d
ddddœddddœgdœddidœ} t         j                  j                  t        «      s7t	        t        dd¬«      5 }t        j                  | |dd¬«       d d d «       | }n=	 t	        t        dd¬«      5 }t        j                  |«      }d d d «       dvr| d   |d<   d|v r"d |d   v rt        j                  |d   d    «       |S # 1 sw Y   ŒqxY w# 1 sw Y   ŒIxY w# t        $ r | }Y ŒMw xY w)!NÚ z$57b6a530-70a4-4d65-b412-46a1a5c22b38z$66125bf7-0b92-47fc-b618-93cfea67f55cú0.150.1-hotfix.f8b078689z@dazn/peng-html5-core/web/webÚitr†   r"   úB"Chromium";v="154", "Microsoft Edge";v="154", "Not A(Brand";v="99"ú?0ú	"Windows"ú}Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/154.0.0.0 Safari/537.36 Edg/154.0.0.0ÚDAZN)r&   ú	sec-ch-uaúsec-ch-ua-mobileúsec-ch-ua-platformr'   úx-brandúapplication/octet-stream)úcontent-typer&   rÃ   rÄ   rÅ   r'   rÆ   Ú4hqcjx5zv91f1bdx71io4bnrlzDAZN 1©ÚidÚnameÚplayback_url)ÚtokenÚemailÚpasswordÚ	device_idÚdaznidÚapp_versionÚ	player_idÚlanguageÚproxyÚheadersÚlicense_headersÚchannelsÚrefresh_interval_hoursé   )ÚdaznÚloopÚwr   ©r   rM   F©ÚindentÚensure_asciir�   rÜ   rÖ   )r<   r=   r>   ÚCONFIG_FILEr’   r¨   Údumpro   r1   Úproxy_managerrŽ   )Údefault_configr”   Úcfgs      r3   Úload_configrè     sr  € ð ØØØ?Ø<Ø5Ø8ØàØñð
 3ØaØ$(Ø&1ð ^Ø!ñð !;Ø2ØaØ$(Ø&1ð ^Ø!ñ ð 6Ø$Ø$&ñðñ=%
ðN % að
ñO*€NôX �7‰7�>‰>œ+Ô&Ü”+˜s¨WÔ5ð 	G¸Ü�I‰I�n a°ÀÕF÷	Gà‰ð	!Ü”k 3°Ô9ð #¸QÜ—i‘i “l�÷#à˜SÑ Ø,¨VÑ4��F‘ð ��}˜ C¨¡KÑ/Ü×&Ñ& s¨6¡{°7Ñ';Ô<à€J÷	Gð 	Gú÷
#ð #ûô ò 	!Ø ŠCð	!ús6   Á!C+ÂD ÂC7Â/D Ã+C4Ã7D Ã<D ÄDÄDrç   c                 ó¼  — 	 i }t         j                  j                  t        «      r0t	        t        dd¬«      5 }t        j                  |«      }d d d «       |j                  | «       t	        t        dd¬«      5 }t        j                  ||dd¬«       d d d «       y # 1 sw Y   ŒOxY w# 1 sw Y   y xY w# t        $ r}t        d|› �t        «       Y d }~y d }~ww xY w)	Nr�   r   rß   rÞ   rM   Frà   zErrore salvataggio config: )r<   r=   r>   rã   r’   r¨   ro   Úupdaterä   r1   r:   rI   )rç   Úcurrentr”   rJ   s       r3   Úsave_configrì   X  s»   € ð	4ØˆÜ�7‰7�>‰>œ+Ô&Ü”k 3°Ô9ð '¸QÜŸ)™) A›,�÷'à�‰�sÔÜ”+˜s¨WÔ5ð 	@¸Ü�I‰I�g˜q¨¸Õ?÷	@ð 	@÷'ð 'ú÷	@ð 	@ûäò 4ÜÐ)¨!¨Ð-¬s×3Ñ3ûð4úsL   ‚7B5 ¹BÁ+B5 Á:B)ÂB5 ÂB&Â"B5 Â)B2Â.B5 Â2B5 Â5	CÂ>CÃCc                  óè   — t         j                  j                  t        «      r2	 t	        t        dd¬«      5 } t        j                  | «      ad d d «       y y # 1 sw Y   y xY w# t        $ r i aY y w xY w)Nr�   r   rß   )	r<   r=   r>   Ú
CACHE_FILEr’   r¨   ro   rW   r1   ©r”   s    r3   Ú
load_cacherð   d  sd   € ä	‡w�w‡~�~”jÔ!ð	Ü”j #°Ô8ð *¸AÜ!ŸY™Y q›\�
÷*ð *ð "÷*ð *ûäò 	ØŠJð	ús.   ¥A# ·AÁA# ÁA ÁA# Á A# Á#A1Á0A1c                  óŒ   — t        t        dd¬«      5 } t        j                  t        | dd¬«       d d d «       y # 1 sw Y   y xY w)NrÞ   r   rß   rM   Frà   )r’   rî   r¨   rä   rW   rï   s    r3   Ú
save_cacherò   m  s7   € Ü	Œj˜#¨Ô	0ð ?°AÜ�	‰	”*˜a¨¸Õ>÷?÷ ?ñ ?ús	   “:ºArÎ   c                 ó<  — 	 | j                  «       j                  d«      }t        |«      dk7  ri S |d   }t        |«      dz  }|dkD  r|dd|z
  z  z  }t        j                  |«      }t        j                  |j                  d«      «      S # t        $ r i cY S w xY w)zFDecodifica il payload di un JWT DAZN senza richiedere librerie esterner6   rÛ   ry   rw   r   ú=r   )	rz   r|   r}   Úbase64Úurlsafe_b64decoder¨   ÚloadsÚdecoder1   )rÎ   r~   Úpayload_b64ÚremÚdecodeds        r3   Údecode_jwt_payloadrü   r  sš   € ðØ—‘“×#Ñ# CÓ(ˆÜˆu‹:˜Š?ØˆIØ˜A‘hˆÜ�+Ó Ñ"ˆØ�Š7Ø˜3 ! c¡'™?Ñ*ˆKÜ×*Ñ*¨;Ó7ˆÜ�z‰z˜'Ÿ.™.¨Ó1Ó2Ð2øÜò ØŠ	ðús   ‚.B ±AB ÂBÂBc                 ó¢   — t        | «      }|sddi fS |j                  dd«      }t        t        j                  «       «      }||z
  }|dkD  }|||fS )u*   Verifica validitÃ  e scadenza del JWT DAZNFr   Úexpé<   )rü   r‰   r·   r¥   )rÎ   Úpayloadrþ   r_   Ú	remainingÚis_valids         r3   Úcheck_token_statusr  �  sZ   € ä  Ó'€GÙØ�a˜ˆ|ÐØ
�+‰+�e˜QÓ
€CÜ
Œd�i‰i‹kÓ
€CØ�c‘	€IØ˜2‰~€HØ�Y Ð'Ð'rT   rÏ   rÐ   Ú
proxy_dictc                 ó<  — d}ddl } |j                  | j                  «       «      j                  «       }|dd }|dd }| |dd|› d�d	|› d
�dœ}dddddddddddddddœ}	t	        d| › d�t
        «       	 t        |«      }
|
j                  |||	d¬«      }|j                  }t	        d| › d |j                  › d!|dd" › �t        «       d#|v sd$|v s|j                  d%k(  rt	        d&t        «       y'd(|v sd)|v ry*d+|v sd,|v ry*d-|v sd.|v rX	 |j                  «       j                  d.«      xs/ |j                  «       j                  d/i «      j                  d.«      }|rd0|fS 	 |j                  d1k(  ry'|j                  rY	 |j                  «       j                  d.«      xs/ |j                  «       j                  d/i «      j                  d.«      }|rd0|fS 	 y*y*# t        $ r Y Œ�w xY w# t        $ r Y y*w xY w# t        $ r}t	        d2|› �t         «       Y d}~y'd}~ww xY w)3zSEffettua il login su DAZN e restituisce lo stato (SUCCESS, RETRY, FAIL) e il token.z3https://authentication-prod.ar.indazn.com/v5/SignInr   Nrw   é   ÚwebÚ0Úe5edÚ2bdz6s9kÚydg5ujkhink9)ÚEmailÚPasswordÚPlatformÚDeviceIdÚProfilingSessionIdz*/*zen-GB,en;q=0.9,it;q=0.8zno-cacher   r!   r"   zA"Google Chrome";v="143", "Chromium";v="143", "Not A(Brand";v="24"r¿   rÀ   ÚemptyÚcorsz
cross-siter#   z£Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/143.0.0.0 Safari/537.36 signin/undefined hyper/0.14.0 (web; production; it))r$   zaccept-languagezcache-controlrÈ   r%   r&   rÃ   rÄ   rÅ   zsec-fetch-destzsec-fetch-modezsec-fetch-siter'   z	x-dazn-uau%   ðŸ”‘ Tentativo di Login in corso per r7   é   ©r¨   r×   rN   u   ðŸ”� DEBUG Risposta Login per z: HTTP z - é,  úRequest blockedÚ
CloudFronti“  u8   ðŸ›‘ CloudFront WAF ha bloccato la richiesta! Riprovo...)ÚRETRYNÚInvalidPasswordÚAccountBlocked)ÚFAILNz)Request limiting policy has been breachedz!Security policy has been breachedÚSignedInÚTokenÚ	AuthTokenÚSUCCESSéÊ   u    â�Œ Eccezione durante il Login: )ÚhashlibÚmd5ÚencodeÚ	hexdigestr:   rA   Úcreate_sessionÚpostÚtextr©   ÚDIMr@   r¨   r‰   r1   r§   rI   )rÏ   rÐ   r  Úurlr!  ÚhÚs_valÚk_valr   r×   r2   r�   r'  rÎ   rJ   s                  r3   Ú
dazn_loginr-  �  su  € à
?€CãØˆ�‰�E—L‘L“NÓ#×-Ñ-Ó/€AØˆbˆqˆE€EØˆa�ˆF€Eð ØØØ˜�w˜d�OØ (¨¨¨|Ð<ñ€Gð Ø4Ø#Ø*Ø(Ø*ØXØ Ø)Ø!Ø Ø&ð Hð {ñ€Gô" Ð
/°¨w°cÐ:¼DÔAð'ä˜:Ó&ˆØ�F‰F�3˜W¨g¸rˆFÓBˆØ�v‰vˆäÐ,¨U¨G°7¸1¿=¹=¸/ÈÈTÐRVÐSVÈZÈLÐYÔ[^Ô_ð  Ñ$¨¸Ñ(<ÀÇÁÐQTÒ@TÜÐJÌFÔSØ à Ñ$Ð(8¸DÑ(@ØØ6¸$Ñ>ÐBeÐimÑBmØØ˜Ñ ¨D¡ðØŸ™›Ÿ™ WÓ-Ò[°·±³·±¸kÈ2Ó1N×1RÑ1RÐSZÓ1[�ÙØ$ eÐ+Ð+ð ð �=‰=˜CÒØ à�4Š4ðØŸ™›Ÿ™ WÓ-Ò[°·±³·±¸kÈ2Ó1N×1RÑ1RÐSZÓ1[�Ù ¨EÐ!1Ð1�5ñ øô ò Ùðûô ò Øàðûô ò ÜÐ.¨q¨cÐ2´CÔ8Üûðúsu   Á5A9G5 Ã/G5 Ã8G5 ÄG5 Ä
AG Å G5 Å1G5 Å>AG& Ç	G#Ç G5 Ç"G#Ç#G5 Ç&	G2Ç/G5 Ç1G2Ç2G5 Ç5	HÇ>HÈHÚuser_idrÑ   c                 ó>  — t        | «      }|xs |r|j                  d«      nd}|xs |r|j                  d«      nd}d|v r$|j                  d«      d   j                  dd«      nd}d}d	| › �d
dddd|t	        t        j                  «       «      dœ}		 t        |«      }
|
j                  |d|i|	d¬«      }|j                  r3|j                  «       j                  di «      j                  d«      }|r|S y# t        $ r}t        d|› �t        «       Y d}~yd}~ww xY w)z`Registra il dispositivo ed ottiene un token autorizzato al playback chiamando RefreshAccessTokenr   r»   ÚdeviceIdú-éÿÿÿÿz|daznÚ
000711a5aaz>https://ott-authz-bff-prod.ar.indazn.com/v5/RefreshAccessTokenúBearer r   r!   r"   rÁ   rÜ   )ÚAuthorizationr   r   r   r    rÆ   úx-daznidzx-session-idr  r  r  r  r  u"   âš ï¸� Errore RefreshAccessToken: N)rü   r‰   r|   r   rŠ   ÚuuidÚuuid4r%  r&  r§   r¨   r1   r:   r@   )rÎ   r.  rÑ   r  r   ÚuidÚdev_strÚ	short_devr)  r×   r2   r�   Únew_tokrJ   s                 r3   Údazn_refresh_tokenr=  Û  s%  € ä  Ó'€GØ
Ò
=©W�g—k‘k &Ô)¸"€CØÒG±w˜GŸK™K¨
Ô3ÀB€GØ?BÀg¹~�—‘˜cÓ" 2Ñ&×.Ñ.¨w¸Ô;ÐS_€Ià
J€Cà" 5 'Ð*Ø*Ø(Ø*ð VØØÜœDŸJ™J›LÓ)ñ	€Gð>Ü˜:Ó&ˆØ�F‰F�3˜j¨)Ð4¸gÈrˆFÓRˆØ�4Š4Ø—f‘f“h—l‘l ;°Ó3×7Ñ7¸Ó@ˆGÙØ�ð øô ò >ÜÐ0°°Ð4´f×=Ð=Øûð>ús   ÂA C6 Ã6	DÃ?DÄDÚconfigÚ	cli_tokenc                 óD
  — |}|s�t         j                  j                  t        «      rj	 t	        j
                  t        t        dd¬«      «      }|j                  dd«      }|r0t        |«      \  }}}|r|}nt        dt        › d| › d�t        «       |s"| j                  d	i «      j                  dd«      }|rt        |«      \  }}}|sd}|�s‘t         j                  j                  t         j                  j                  t        «      d
«      }	t         j                  j                  |	«      �rŠt        d|	› d�t        «       	 t        |	dd¬«      5 }
|
D �cg c])  }d|v sŒ|j                  d«      rŒ|j!                  «       ‘Œ+ }}ddd«       D �]  }|j#                  dd«      \  }}d}|dkD  rît$        j'                  «       }t)        |||«      \  }}|dk(  r\|rZt+        ||¬«      xs |}|}t        dt,        «       	 t        t        dd¬«      5 }
t	        j.                  d|i|
d¬«       ddd«       ni|dk(  rIt        d|› d|dz
  › d�t        «       t$        j1                  «        |dz  }t3        j4                  d«       nt        d|› d�t6        «       n|dkD  rŒî|s�Œ n |s·t        dt6        «       n¦| j                  d	i «      j                  d d«      }| j                  d	i «      j                  d!d«      }|r`|r^t$        j'                  «       }t)        |||«      \  }}|r8|}	 t        t        dd¬«      5 }
t	        j.                  d|i|
d¬«       ddd«       |�rCt        |«      \  }}}|�r	|d"z  }|d"z  }t        d#|› d$|d"z  › d%|j                  d&d'«      › d(�t,        «       ||j                  d&d«      |j                  d)d«      |j                  d*d«      |j                  d+d,«      |j                  d-d«      |j                  d.d«      |j                  d/d«      t9        j:                  «       j=                  «       d0œ	}t        t        dd¬«      5 }
t	        j.                  ||
dd1¬2«       ddd«       |S t        d3t6        «       t        d4t>        › d5�t        «       |S # t        $ r Y �Œ!w xY wc c}w # 1 sw Y   �Œ7xY w# t        $ r g }Y �ŒHw xY w# 1 sw Y   �Œ°xY w# t        $ r Y �Œ¿w xY w# 1 sw Y   �Œ£xY w# t        $ r Y �Œ²w xY w# 1 sw Y   |S xY w)6z]Recupera il token attivo dal file tokens, dalla config, oppure esegue il login se configurator�   r   rß   rÎ   r»   u   âš ï¸� Token salvato in u    Ã¨ scaduto (scaduto da zs)rÜ   úaccounts.txtu;   â�³ Nessun token valido trovato, avvio Login automatico da r7   rv   rt   Nry   rÛ   r   r  ©r  uE   âœ… Login completato e dispositivo registrato! Nuovo token acquisito.rÞ   rM   )rá   r  u   âš ï¸� Rate limit o errore per z, cambio proxy e riprovo... (z tentativi rimasti)u   â�Œ Account z4 fallito (Invalid o Blocked), passo al successivo...uE   â�Œ Nessun account in accounts.txt Ã¨ risultato valido o funzionante.rÏ   rÐ   rÿ   u'   ðŸ”‘ Token DAZN valido Â· Scadenza tra zh zm (ViewerID: ÚviewerIdúN/Ar9   r   r0  Úcountryr½   Ú
userstatusÚissuedrþ   )	rÎ   Ú	viewer_idrÒ   rÑ   rE  Úuser_statusrG  rþ   Ú
updated_atFrà   u<   âš ï¸� ATTENZIONE: Il token fornito Ã¨ SCADUTO o NON VALIDO!zAggiorna il token in z o usa --token <nuovo_token>) r<   r=   r>   Ú
TOKEN_FILEr¨   ro   r’   r‰   r  r:   r@   r1   ÚjoinÚdirnameÚ__file__r{   rz   r|   rå   r—   r-  r=  r;   rä   rš   r¥   ÚsleeprI   r   r_   Ú	isoformatrã   )r>  r?  rÎ   Út_dataÚt_candÚvalrú   Ú_r   Úaccounts_filer”   ÚlÚlinesrr   rÏ   rÐ   Úretriesr  ÚstatusÚ	new_tokenÚ	reg_tokenÚstÚtkÚminsÚhrsÚt_infos                             r3   Ú	get_tokenra  ø  s  € à€EÙ”R—W‘W—^‘^¤JÔ/ð
	Ü—Y‘Yœt¤J°¸gÔFÓGˆFØ—Z‘Z ¨Ó,ˆFÙÜ0°Ó8‘��S˜!ÙØ"‘EäÐ2´:°,Ð>VÐX[ÐW[ÐV\Ð\^Ð_ÔagÔhñ Ø—
‘
˜6 2Ó&×*Ñ*¨7°BÓ7ˆáÜ.¨uÓ5ÑˆˆS�'ÙØˆEò ÜŸ™Ÿ™¤R§W¡W§_¡_´XÓ%>ÀÓOˆÜ�7‰7�>‰>˜-Õ(ÜÐMÈmÈ_Ð\_Ð`ÔbhÔiðÜ˜-¨°wÔ?ð YÀ1Ø01ÖX¨1°S¸A²XÀaÇlÁlÐSVÕFW˜QŸW™W�YÐX�EÐX÷Yð
 ó �Ø"&§*¡*¨S°!Ó"4‘��xà�Ø ’kÜ!.×!7Ñ!7Ó!9�JÜ(2°5¸(ÀJÓ(OÑ%�F˜Ià Ò*©yÜ$6°yÈZÔ$XÒ$eÐ\e˜	Ø )˜ÜÐcÔejÔkð!Ü!%¤j°#ÀÔ!Hð IÈAÜ $§	¡	¨7°EÐ*:¸AÀaÕ H÷Ið Ø 7Ò*ÜÐ=¸e¸WÐDaÐbiÐjkÑbkÐalÐlð  Aô  CIô  JÜ%×,Ñ,Ô.Ø 1™˜ÜŸ
™
 1�ä˜l¨5¨'Ð1eÐfÔhkÔlØð+  “kó. Ùð9ñ< ÜÐ[Ô]`Õað —J‘J˜v rÓ*×.Ñ.¨w¸Ó;ˆEØ—z‘z &¨"Ó-×1Ñ1°*¸bÓAˆHÙ™Ü*×3Ñ3Ó5�
Ü# E¨8°ZÓ@‘��BÙØ�EðÜ!¤*¨c¸GÔDð EÈÜ ŸI™I w°Ð&6¸À!ÕD÷Eò
 Ü.¨uÓ5ÑˆˆS�'ÚØ˜"‘9ˆDØ˜"‘*ˆCÜÐ9¸#¸¸bÀÈÁÀÈ=ÐY`×YdÑYdÐeoÐqvÓYwÐXxÐxyÐzô  }Bô  Cð Ø$Ÿ[™[¨°RÓ8Ø!Ÿ+™+ f¨bÓ1Ø$Ÿ[™[¨°RÓ8Ø"Ÿ;™; y°$Ó7Ø&Ÿ{™{¨<¸Ó<Ø!Ÿ+™+ h°Ó2Ø—{‘{ 5¨!Ó,Ü&Ÿl™l›n×6Ñ6Ó8ñ
ˆFô ”j #°Ô8ð C¸AÜ—	‘	˜& !¨A¸EÕB÷Cð €Lô ÐNÔQTÔUÜÐ'¬ }Ð4PÐQÔSYÔZà€Løô{ ò 	Úð	üò$ Y÷Yñ Yûäò Ø“ðú÷ Iñ Iûä(ò !Ú ð!ú÷6Eñ Eûä$ò Úðú÷*Cð €Lúsº   ©A)R' ÅS	 ÅR<Å	R7Å!R7Å3R7ÆR<ÆS	 È S(ÈSÈ-S(Ì*T Ì<S8ÍT ÑTÒ'	R4Ò3R4Ò7R<Ò<SÓS	 Ó	SÓSÓS%	Ó S(Ó(	S5Ó4S5Ó8TÓ=T Ô	TÔTÔT)Úchrome99_androidÚchrome131_androidc                 óz   — t         rt        j                  d¬«      }nt        j                  «       }| r| |_        |S )z.Sessione Chrome desktop: login, EPG, manifest.Ú	chrome120©Úimpersonate)ÚHAS_CURL_CFFIÚcffi_requestsÚSessionr   rl   )r  r2   s     r3   r%  r%  j  s2   € åÜ×!Ñ!¨kÔ:‰ä×ÑÓˆÙØˆŒ	Ø€HrT   c                 óà   — t         rFd}t        D ]%  }	 t        j                  |¬«      }| r| |_        |c S  |rt        d|› d�t        «       t        | «      S # t
        $ r}|}Y d}~ŒYd}~ww xY w)zBSessione TLS Android: playback + license. Non serve la Fire Stick.Nrf  u,   âš ï¸� Impersonate Android non disponibile (z), fallback Chrome)	rh  Ú_ANDROID_IMPERSONATEri  rj  rl   r1   r:   r@   r%  )r  Úlast_errÚimpr2   rJ   s        r3   Úcreate_android_sessionro  u  s}   € åØˆÜ'ò 	ˆCðÜ!×)Ñ)°cÔ:�ÙØ *�A”IØ’ð	ñ ÜÐ>¸x¸jÐHZÐ[Ô]cÔdÜ˜*Ó%Ð%øô ò Ø�Üûðús   “ AÁ	A-Á!A(Á(A-Ú_ADB_BINÚ_STICK_READYc                  ó  — t         j                  j                  d«      t         j                  j                  t        d«      g} | D ](  }|sŒt         j                  j                  |«      sŒ&|c S  t        j                  d«      S )Nz1%LOCALAPPDATA%\Android\Sdk\platform-tools\adb.exezadb.exeÚadb)r<   r=   Ú
expandvarsrL  rF   ÚisfileÚshutilÚwhich)Ú
candidatesr¬   s     r3   Ú	_find_adbry  Œ  sg   € ä
�‰×ÑÐOÓPÜ
�‰�‰”Z Ó+ð€Jð ò ˆÚ”—‘—‘ Õ"ØŠHðô �<‰<˜ÓÐrT   c                  ó  — t         j                  j                  dd«      j                  «       j	                  «       dv rdayt
        �t
        S t        «       at        sday	 t        j                  t        dgdd¬	«      } | j                  xs d
j                  dd«      j                  «       }t        d„ |dd D «       «      at
        rt        st!        dt"        «       dat%        t
        «      S # t        $ r daY Œ:w xY w)u6   True se c'Ã¨ una Fire Stick/Android collegata via adb.ÚDAZN_NO_STICKr»   )Ú1ÚtrueÚyesFNÚdevicesTé   ©Úcapture_outputrN   rT   r   r   c              3   óf   K  — | ])  }d |v xs |j                  «       j                  d«      –— Œ+ y­w)z	devicez deviceN)rz   Úendswith)Ú.0Úlns     r3   ú	<genexpr>z"stick_available.<locals>.<genexpr>¦  s6   è ø€ ò 
àð ˜2ÐÒ@ "§(¡(£*×"5Ñ"5°iÓ"@Ó@ñ
ùs   ‚/1ry   uN   ðŸ“¡ Fire Stick collegata: playback e licenza passano dal device (TLS Android))r<   Úenvironr‰   rz   Úlowerrq  ry  rp  rB   ÚrunÚstdoutrø   Ú
splitlinesÚanyr1   Ú_STICK_LOGGEDr:   r;   r¸   )r�   rW  s     r3   Ústick_availabler�  —  sé   € ô 
‡z�z‡~�~�o rÓ*×0Ñ0Ó2×8Ñ8Ó:Ð>RÑRØˆØÜÐÜÐÜ‹{€HÝØˆØðÜ�N‰NœH iÐ0ÀÈqÔQˆØ—‘’˜S×(Ñ(¨°)Ó<×GÑGÓIˆÜñ 
à˜A˜B�iô
ó 
ˆõ �MÜÐ\Ô^cÔdØˆÜ”ÓÐøô ò ØŠðús   Á"A!C0 Ã0C>Ã=C>Úmethodr)  r×   Úbodyc                 ó>  — t         syt        j                  j                  t        d«      }t        j                  j                  t        d«      }t        j                  j                  t        d«      }d}d}d}	d|› d	�d
| › d	�ddddd|	› d	�dg}
|j                  «       D ]H  \  }}t        |«      j                  dd«      j                  d	d«      }|
j                  d|› d|› d	�«       ŒJ |�;t        |d«      5 }|j                  |«       ddd«       |
j                  d|› d	�«       t        |ddd¬«      5 }|j                  dj                  |
«      dz   «       ddd«       	 t        j                  t         d||gdd¬ «       |� t        j                  t         d||gdd¬ «       t        j                  t         d!d"d#d$d%d&d'd(|g
dd)¬ «      }|j                  xs d*j                  dd+«      j                  «       }t        j                  t         d,|	|gdd¬ «       t        j                  j!                  |«      rt        |d-«      j#                  «       nd*}	 t%        |«      }||fS # 1 sw Y   �Œ\xY w# 1 sw Y   �ŒxY w# t&        $ r d.}Y Œ+w xY w# t(        $ r Y yw xY w)/zIGET/POST eseguiti da curl sulla stick (niente proxy mitm, cert insecure).)r   rT   z	_curl.cfgz
_curl.bodyz	_curl.outz/sdcard/dazn_curl.cfgz/sdcard/dazn_body.binz/sdcard/dazn_out.binzurl = "ú"zrequest = "ÚinsecureÚsilentz
show-errorznoproxy = "*"z
output = "zwrite-out = "%{http_code}"ú\z\\z\"z
header = "ú: NÚwbzdata-binary = "@rÞ   r   rd   )r   ÚnewlineÚpushTé   r�  ÚshellÚenvzhttp_proxy=zhttps_proxy=zHTTP_PROXY=zHTTPS_PROXY=Úcurlz-Ké-   rT   r   ÚpullÚrbr   )rp  r<   r=   rL  rF   ÚitemsrŠ   r   r“   r’   ÚwriterB   rŠ  r‹  rø   rz   r>   Úreadr·   Ú
ValueErrorr1   )r�  r)  r×   r‘  Ú	local_cfgÚ
local_bodyÚ	local_outÚ
remote_cfgÚremote_bodyÚ
remote_outrW  ÚkÚvÚvvÚfhr�   Úcode_sÚrawÚcodes                      r3   Ú
stick_httpr³  ²  s‡  € åØÜ—‘—‘œZ¨Ó5€IÜ—‘—‘œj¨,Ó7€JÜ—‘—‘œZ¨Ó5€IØ(€JØ)€KØ'€Jà
�#��aÐØ
�f�X˜QÐØØØØØ
�Z�L Ð"Ø$ð	€Eð —‘“ò .‰ˆˆ1Ü�‹V�^‰^˜D &Ó)×1Ñ1°#°uÓ=ˆØ�‰�z !  B r d¨!Ð,Õ-ð.ð ÐÜ�*˜dÓ#ð 	 rØ�H‰H�TŒN÷	à�‰Ð'¨ }°AÐ6Ô7Ü	ˆi˜ w¸Ô	=ð *ÀØ
�‰�—‘˜5Ó! DÑ(Ô)÷*ðÜ�‰œ &¨)°ZÐ@ÐQUÐ_aÕbØÐÜ�N‰NœH f¨j¸+ÐFÐW[ÐegÕhÜ�N‰Nä˜'Ø�} n°mÀ^Ø˜˜jðð
  ¨ô
ˆð —(‘(’/˜c×)Ñ)¨'°9Ó=×CÑCÓEˆÜ�‰œ &¨*°iÐ@ÐQUÐ_aÕbÜ.0¯g©g¯n©n¸YÔ.GŒd�9˜dÓ#×(Ñ(Ô*ÈSˆð	Ü�v“;ˆDð �SˆyÐ÷1	ñ 	ú÷*ñ *ûô& ò 	ØŠDð	ûô ò ÙðúsO   Ã9I%Ä7$I2Å$C1J ÉI? É!J É%I/É2I<É?JÊ
J ÊJÊJ Ê	JÊJÚpssh_b64c                 óì   — 	 t        j                  | «      }t        |«      dk\  r|dd t        k(  ryt	        | «      }t        |j                  «      j                  «       t        k(  S # t        $ r Y yw xY w)z9Verifica se una stringa PSSH Base64 appartiene a Widevineé   é   TF)
rõ   Ú	b64decoder}   ÚWIDEVINE_SYSTEM_ID_BYTESr   rŠ   Ú	system_idr‰  ÚWIDEVINE_SYSTEM_IDr1   )r´  r±  r¬   s      r3   Úis_widevine_psshr¼  ç  sl   € ðÜ×Ñ˜xÓ(ˆÜˆs‹8�rŠ>˜c " R˜jÔ,DÒDØÜ�‹NˆÜ�1—;‘;Ó×%Ñ%Ó'Ô+=Ñ=Ð=øÜò Ùðús   ‚/A' ²4A' Á'	A3Á2A3Úmpd_contentc           	      óî  — 	 t        j                  | «      }g }|j                  «       D �cg c]   }|j                  j                  d«      sŒ|‘Œ" }}|s|g}|D �]M  }|j                  j                  d«      xs |j                  j                  d«      xs dj                  «       }d|v xs d	|v }|j                  «       D �cg c]   }|j                  j                  d
«      sŒ|‘Œ" }	}|	D ]¸  }
|
j                  j                  dd«      j                  «       }t        |v }|
j                  «       D �cg c]   }|j                  j                  d«      sŒ|‘Œ" }}|D ]F  }|j                  xs dj                  «       }|sŒ$|st        |«      sŒ2|j                  |||dœ«       ŒH Œº �ŒP |s”|j                  «       D ]�  }|j                  j                  d«      sŒ|j                  sŒ,|j                  j                  «       sŒG|j                  j                  «       }t        |«      sŒm|j                  |dddœ«       Œƒ |sy|j!                  d„ d¬«       |d   d   }d}	 t#        |«      }|j$                  r°|j$                  d   }t'        |d«      r&t)        t+        |d«      «      r|j-                  «       }not'        |d«      r't/        |j,                  t0        «      r|j,                  }n<t/        |t2        «      r|j-                  «       }nt1        |«      j5                  dd«      }||fS # t        $ r}t        d|› �t        «       Y d}~yd}~ww xY wc c}w c c}w c c}w # t        $ r Y ||fS w xY w)zGEstrae il blocco PSSH Widevine e il relativo KID dal manifesto DASH MPDz'Errore parsing XML del manifesto DASH: N©NNÚAdaptationSetÚmimeTypeÚcontentTyper»   ÚvideoÚmp4ÚContentProtectionÚschemeIdUriÚpssh)rÇ  Úis_videoÚis_wv_schemeTc                 ó   — | d   | d   fS )NrÈ  rÉ  rS   )Úcs    r3   ú<lambda>z'extract_widevine_pssh.<locals>.<lambda>"  s   €  1 Z¡=°!°NÑ2CÐ"D€ rT   )ÚkeyÚreverser   Úhexr1  )ÚETÚ
fromstringr1   r:   rI   ÚiterÚtagr„  Úattribr‰   r‰  r»  r'  rz   r¼  r“   Úsortr   Úkey_idsÚhasattrÚcallableÚgetattrrÏ  r‡   rŠ   Úbytesr   )r½  ÚrootrJ   rx  ÚelemÚadaptation_setsÚasetÚmimerÈ  ÚcpsÚcpÚ	scheme_idrÉ  Ú
pssh_nodesÚnoder'  Ú	best_psshÚexpected_kidr¬   Ú	first_kids                       r3   Úextract_widevine_psshrè  ò  s  € ðÜ�}‰}˜[Ó)ˆð
 €JØ(,¯	©	«ÖZ °t·x±x×7HÑ7HÈÕ7Y’tÐZ€OÐZÙØ˜&ˆàó ˆØ—‘—‘ 
Ó+ÒS¨t¯{©{¯©¸}Ó/MÒSÐQS×ZÑZÓ\ˆØ˜d�?Ò3 e¨t mˆà $§	¡	£ÖV˜¨t¯x©x×/@Ñ/@ÐATÕ/UŠtÐVˆÐVØò 	ˆBØŸ	™	Ÿ™ m°RÓ8×>Ñ>Ó@ˆIÜ-°Ð:ˆLà+-¯7©7«9ÖR 4¸¿¹×8IÑ8IÈ&Õ8Qš$ÐRˆJÐRØ"ò 	�ØŸ	™	š R×.Ñ.Ó0�ÙØÙÔ#3°DÕ#9Ø×%Ñ%Ø $Ø$,Ø(4ñ'õ ñ	ò	ðñ* Ø—I‘I“Kò 	ˆDØ�x‰x× Ñ  Õ(¨T¯Y«Y¸4¿9¹9¿?¹?Õ;LØ—y‘y—‘Ó(�Ü# DÕ)Ø×%Ñ%Ø $Ø$(Ø(,ñ'õ ð		ñ Øà‡O�OÑDÈd€OÔSØ˜1‘˜fÑ%€Ià€LðÜ�‹OˆØ�9Š9ØŸ	™	 !™ˆIÜ�y %Ô(¬X´g¸iÈÓ6OÔ-PØ(Ÿ}™}›‘Ü˜ EÔ*¬z¸)¿-¹-ÌÔ/MØ(Ÿ}™}‘Ü˜I¤uÔ-Ø(Ÿ}™}›‘ä" 9›~×5Ñ5°c¸2Ó>�ð �lÐ"Ð"øô ò ÜÐ5°a°SÐ9¼3Ô?Üûðüò
 [ùò Wùò
 SøôT ò Øà�lÐ"Ð"ðúsM   ‚L- « MÁMÃ MÃ$MÄ3 M ÅM É"CM% Ì-	MÌ6MÍMÍ%	M4Í3M4ÚchannelrH  c                 ó�  — |j                  di «      }| j                  dd«      }|j                  dd«      }|j                  dd«      }|j                  dd	«      }|j                  d
d«      }|j                  dd«      }	|j                  dd«      }
|j                  dd«      }|j                  dd«      }|j                  dd«      }|xs d}t        t        j                  «       dz  «      }t        j                  «       j
                  dd j                  «       }|› d|› d|› d|› �}|dd|||	|
||||d||dœ}dt        |«      › �S ) z@Costruisce l'endpoint Playback con SessionId e timestamp freschirÜ   rË   rÉ   rÓ   r¼   rÔ   z3@dazn/peng-html5-core/tv-legacy/exoplayer-androidtvrÕ   r½   ÚplatformÚ	androidtvÚmodelzFire TV StickÚsecurer}  ÚmanufacturerÚamznÚplayready_initiatorÚfalseÚcapabilitieszhevc,mtaÚunknownrŸ   Né   r1  ÚWIDEVINEz	MPEG-DASHr»   )Ú
AppVersionÚDrmTypeÚFormatÚPlayerIdr  ÚModelÚSecureÚManufacturerÚPlayReadyInitiatorÚCapabilitiesÚAssetIdÚMtaLanguageCodeÚLanguageCodeÚ	SessionIdz,https://api.playback.indazn.com/v5/Playback?)r‰   r·   r¥   r7  r8  rÏ  Úupperr   )ré  r>  rH  Údazn_cfgÚasset_idrÓ   rÔ   Úlangrë  rí  rî  rï  Úplayready_initró  Úv_idÚtsÚrnd_hexÚ
session_idÚparamss                      r3   Úbuild_playback_urlr  7  s\  € à�z‰z˜& "Ó%€HØ�{‰{˜4Ð!<Ó=€HØ—,‘,˜}Ð.HÓI€KØ—‘˜[Ð*_Ó`€IØ�<‰<˜
 DÓ)€Dð  �|‰|˜J¨Ó4€HØ�L‰L˜ /Ó2€EØ�\‰\˜( FÓ+€FØ—<‘< °Ó7€LØ—\‘\Ð"7¸ÓA€NØ—<‘< °
Ó;€LØÒ!˜	€DÜ	ŒT�Y‰Y‹[˜4ÑÓ	 €BÜ�j‰j‹l×Ñ˜r Ð"×(Ñ(Ó*€GØ�4�q˜˜˜a ˜z¨¨7¨)Ð4€Jð "ØØØØØØØ$Ø,Ø$ØØØØñ€Fð  :¼)ÀFÓ:KÐ9LÐMÐMrT   rÍ   c           	      óð  — |j                  di «      }t        |«      }|r|j                  d«      ndxs |j                  dd«      }|r|j                  d«      ndxs0 |j                  d«      xs t        t        j                  «       «      }|j                  di «      }d	|› �|j                  d
d«      |j                  dd«      |j                  dd«      dt        t        j                  «       «      ||dœ}	|j                  d«      r|d   |	d<   t        |«      }
	 |
j                  | |	d¬«      }|j                  sç|j                  j                  dd«      }	 |j                  «       }t        |t        «      r|j                  di «      ni }|j                  di «      xs i j                  d«      xs |j                  dd }|j                  dd«      }|rd|› d|› �}d|j                  «       v sd|j                  v sd |j                  v rd!}dd"|j                  › d#|› �fS |j                  «       dfS # t        $ r |j                  dd }Y Œpw xY w# t        $ r}dt        |«      fcY d}~S d}~ww xY w)$zWEffettua la chiamata all'endpoint Playback DAZN con headers personalizzati e bypass WAFrÜ   r   NrÒ   ú$790f7b77-25f4-4cd8-bc68-15c600c9eb89r0  rÑ   r×   r4  r%   zhttps://tv.dazn.comr&   zhttps://tv.dazn.com/r'   ú¹Mozilla/5.0 (Linux; Android 11; Fire TV Stick Build/RQ3A.211001.001; wv) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Chrome/105.0.5195.79 Mobile Safari/537.36 DAZN_HTML_ANDROIDTVrÂ   )r5  r   r   r'   rÆ   zx-correlation-idzx-dazn-devicer6  zx-requested-withé   ©r×   rN   r   r»   zodata.errorÚmessageÚvalueéÈ   r²  r[   r\   Úhtmlr  r  zQRequest blocked dall'edge CloudFront (probabile throttle IP: fai pausa 15-30 min)r¢   r—  )r‰   rü   rŠ   r7  r8  ro  r§   r×   r¨   r‡   rˆ   r'  r1   r‰  r©   )rÍ   rÎ   r>  r  r  r   r.  rÑ   Úhdr_cfgr×   r2   r�   ÚctypeÚerr_jsonÚoerrrX   r²  rJ   s                     r3   Úrequest_playback_infor  j  sX  € à�z‰z˜& "Ó%€HÜ  Ó'€GÙ&-ˆw�{‰{˜6Ô"°4Òz¸H¿L¹LÈÐSyÓ<z€GÙ,3�—‘˜ZÔ(¸ÒpÀ(Ç,Á,È{ÓB[ÒpÔ_bÔcg×cmÑcmÓcoÓ_p€Ià�l‰l˜9 bÓ)€Gà" 5 'Ð*Ø—+‘+˜hÐ(=Ó>Ø—;‘;˜yÐ*@ÓAØ—k‘kØð7ó
ð Ü¤§
¡
£Ó-Ø"Øñ€Gð ‡{�{Ð%Ô&Ø&-Ð.@Ñ&AˆÐ"Ñ#ä˜zÓ*€AðØ�E‰E�,¨¸ˆEÓ<ˆØ�tŠtØ—I‘I—M‘M .°"Ó5ˆEð#ØŸ6™6›8�Ü:DÀXÌtÔ:T�x—|‘| M°2Ô6ÐZ\�Ø—x‘x 	¨2Ó.Ò4°"×9Ñ9¸'ÓBÒRÀaÇfÁfÈTÈcÀl�Ø—x‘x ¨Ó+�ÙØ˜d˜V 2 c UÐ+�Cð ˜Ÿ™›Ñ&Ð*;¸q¿v¹vÑ*EÈÐYZ×Y_ÑY_ÑI_Øi�Ø˜5 §¡ ¨r°#°Ð7Ð7Ð7à�v‰v‹x˜ˆ~Ðøô ò #Ø—f‘f˜T˜c�l’ð#ûô ò Ø”S˜“Vˆ|ÕûðúsJ   Ä<I ÅBH7 Ç!AI È%I È7IÉI ÉIÉI É	I5ÉI0É*I5É0I5r  Úla_urlÚtokens_payloadræ  c           
      ó(  ‡,— |r|› d|j                  «       › �}n9|› dt        j                  | j                  «       «      j	                  «       dd › �}|t
        v r,t
        |   }	|	j                  d«      |	j                  d«      dfS t        j                  j                  t        d«      }
d}g }t        j                  j                  |
«      rƒt        j                  j                  |
«      rdt        t        j                  |
«      «      D ]C  }|j                  d«      sŒ|j!                  t        j                  j                  |
|«      «       ŒE t        j                  j                  t"        «      r|j!                  t"        «       t%        «       }g }|D ]¦  }	 t'        |d	«      5 }t        j(                  |j+                  «       «      j	                  «       }ddd«       |v r7t/        d
t        j                  j1                  |t        «      › d�t2        «       Œ…|j5                  |«       |j!                  |«       Œ¨ |d| }|st/        d|
› dt"        › d�t6        «       y|j                  di «      }|j                  d«      xs |j                  dd«      }d}d|j                  di «      j                  d|«      ddœ}|rd|› �|d<   d}|D �]  }d}d}	 t9        j:                  |«      }	 t=        |j>                  dd«      }t=        |dd«      }t/        d t        j                  j1                  |t        «      › d!|› d"|› d#�t2        «       tA        jB                  |«      }|j'                  «       }tE        |«      }t/        d$|› �t2        «       |jG                  |tI        | «      d%¬&«      }t/        d'tK        |«      › d(d)|v › d#�t2        «       |jM                  |||d*¬+«      } | jN                  sÁd,| jP                  › d-| jR                  dd. › �Š,t/        d/‰,› d0t        j                  j1                  |t        «      › d1�t6        «       ‰,}tU        «       rDtW        ˆ,fd2„d3D «       «      r0tY        d4|||¬5«      \  }!}"|!d.k7  r>	 	 |�|�|j[                  |«       �ŒÊ	 	 |�|�|j[                  |«       �Œã| j\                  }"|j_                  ||"«       g }#|ja                  |«      D �]K  }$|$jb                  d6k7  sŒte        |$jf                  d7«      r:ti        |$jf                  jj                  tl        «      r|$jf                  jj                  nTte        |$jf                  d7«      r|$jf                  jk                  «       n$tm        |$jf                  «      jo                  d8d9«      }%tq        t=        |$jr                  d7d«      «      r|$jr                  jk                  «       n)t=        |$jr                  d7tm        |$jr                  «      «      }&|#j!                  |%j                  «       |&j                  «       f«       �ŒN |#s+t/        d:t6        «       d;}	 	 |�|�|j[                  |«       �Œ�d<\  }'}(|r#|#D ]  \  })}*|)|j                  «       k(  sŒ|)|*}(}' n |'s
|#r|#d=   \  }'}(|'r.|(r,|'|(d>œt
        |<   tu        «        t/        d?|'› d|(› �tv        «       |'|(df	 |�|�|j[                  |«       c S c S c S  dd|xs dBfS # 1 sw Y   �ŒxY w# t,        $ r |}Y �Œ-w xY w# t,        $ r	 d\  }}Y �Œw xY w# t,        $ r Y �Œcw xY w# t,        $ r Y �Œsw xY w# t,        $ r Y �Œƒw xY w# t,        $ r Y c S w xY w# t,        $ rt}+t/        d@t        j                  j1                  |t        «      › dA|+› �t6        «       tm        |+«      }Y d}+~+	 |�|�|j[                  |«       �Œ # t,        $ r Y �Œw xY wd}+~+ww xY w# 	 |�|�|j[                  |«       w w w # t,        $ r Y w w xY wxY w)CzSDecifra la chiave di contenuto Widevine usando WVD.wvd e l'endpoint di Licenza DAZNrv   Né   ÚkidrÍ  Úwvdé   z.wvdr¡  u   â�­ï¸� CDM duplicato saltato: u    (identico a uno giÃ  in lista)z#ERRORE: Nessun file CDM trovato in z o ú!)NNzCDM missingrÜ   r   rÒ   r  r  rÇ   rØ   r'   Úgzip)r   r    zAccept-Encodingr4  r5  Útypeú?Úsecurity_level)r'  r'  u   ðŸ”‘ CDM in uso: z (type=z, level=r9   u   ðŸ”� DEBUG License URL: F)Úprivacy_modeu   ðŸ”� DEBUG Challenge size: z bytes (plaintext=s   amznr£   )r×   ÚdatarN   r¢   r—  r  zChiamata License fallita (z) [ú]c              3   óB   •K  — | ]  }|‰j                  «       v –— Œ y ­wr±   ©r‰  )r…  r¬  Ú
error_texts     €r3   r‡  zget_keys_wvd.<locals>.<genexpr>  s   øè ø€ Ò,rÈ¨Q°*×2BÑ2BÓ2DÔ-DÑ,rùs   ƒ)Ú10802znot allowed to receiveÚPOST)r‘  ÚSIGNINGrÏ  r1  r»   z5Nessuna chiave di contenuto trovata nella licenza DRMzNo keysr¿  r   )r!  rÍ  z"Chiave DRM estratta con successo: zErrore licenza DRM Widevine [z]: zLicense denied da tutti i CDM)<r‰  r!  Úsha256r#  r$  rW   r‰   r<   r=   rL  rF   r>   ÚisdirÚsortedÚlistdirr„  r“   ÚWVD_FILEÚsetr’   r"  r¤  r1   r:   Úrelpathr(  ÚaddrI   r   ro   rÙ  Ú	client_idr   Úfrom_devicero  Úget_license_challenger   r}   r&  r§   r©   r'  r�  r�  r³  ÚcloseÚcontentÚparse_licenseÚget_keysr&  r×  r!  r‡   rÏ  rŠ   r   rØ  rÍ  rò   r;   )-r´  r  r  r>  r  ræ  r  rÎ   Ú	cache_keyÚcachedÚ
wvd_folderÚ_MAX_CDM_ATTEMPTSrx  r”   Úseen_hashesÚdedupedrË  r¯  r*  r  r.  Ústick_uaÚlic_headersrm  Ú
target_wvdÚcdmÚsessionÚdeviceÚdev_typeÚ	dev_levelr2   Ú	challenger�   r²  Ú	lic_bytesÚcontent_keysr¬  Úk_kidÚk_keyr!  rÍ  Úc_kidÚc_keyrJ   r.  s-                                               @r3   Úget_keys_wvdrV  ›  sÜ  ø€ ñ Ø�j  ,×"4Ñ"4Ó"6Ð!7Ð8‰	à�j ¤'§.¡.°·±Ó1BÓ"C×"MÑ"MÓ"OÐPSÐQSÐ"TÐ!UÐVˆ	à”JÑÜ˜IÑ&ˆØ�z‰z˜%Ó  &§*¡*¨UÓ"3°TÐ9Ð9ä—‘—‘œj¨%Ó0€Jð ÐØ€JÜ	‡w�w‡~�~�jÔ!¤b§g¡g§m¡m°JÔ&?ÜœŸ
™
 :Ó.Ó/ò 	?ˆAØ�z‰z˜&Õ!Ø×!Ñ!¤"§'¡'§,¡,¨z¸1Ó"=Õ>ð	?ô 
‡w�w‡~�~”hÔØ×Ñœ(Ô#ô “u€KØ€GØò 
ˆð	Ü�a˜“ð 7 "Ü—K‘K §¡£	Ó*×4Ñ4Ó6�÷7ð �ÑÜÐ0´·±·±ÀÄJÓ1OÐ0PÐPoÐpÔruÔvØØ�‰˜ÔØ�‰�qÕð
ð Ð+Ð+Ð,€JáÜÐ1°*°¸SÄÀ
È!ÐLÌcÔRØ(à�z‰z˜& "Ó%€HØ× Ñ  Ó(Òj¨H¯L©L¸ÐCiÓ,j€Gð	3ð ð 3Ø—l‘lÐ#4°bÓ9×=Ñ=¸lÈHÓUØ!ñ€Kñ
 Ø)0°°Ð'8ˆ�OÑ$à"€HØ ó Qˆ
ØˆØˆðN	Ü—[‘[ Ó,ˆFð/Ü" 6×#3Ñ#3°V¸SÓA�Ü# FÐ,<¸cÓB�	ô Ð#¤B§G¡G§O¡O°JÄ
Ó$KÐ#LÈGÐT\ÐS]Ð]eÐfoÐepÐpqÐrÔtwÔxÜ—/‘/ &Ó)ˆCØ—h‘h“jˆGô ' zÓ2ˆAäÐ*¨6¨(Ð3´SÔ9Ø×1Ñ1°'¼4À»>ÐX]Ð1Ó^ˆIÜÐ-¬c°)«nÐ-=Ð=OÐPWÐ[dÐPdÐOeÐefÐgÔilÔmà—‘�v {¸ÈB�ÓOˆAØ—4’4Ø$ Q§]¡] O°2°a·f±f¸T¸c°l°^ÐD�
ÜÐ0°°¸CÄÇÁÇÁÐPZÔ\fÓ@gÐ?hÐhiÐjÔloÔpØ%�Ü"Ô$¬Ó,rÐNqÔ,rÔ)rÜ&0°¸ÀÐS\Ô&]‘O�D˜)Ø˜s’{Ø ðPØ�? wÐ':Ø—I‘I˜gÔ&ùðQ ðLØ�? wÐ':Ø—I‘I˜gÔ&ùðM ŸI™I�	à×Ñ˜g yÔ1à24ˆLØ—\‘\ 'Ó*ó H�Ø—6‘6˜YÓ&Ü)0°·±¸Ô)>Ä:ÈaÏeÉeÏiÉiÔY\ÔC]˜AŸE™EŸIšIÔszÐ{|÷  |Añ  |Að  CHô  tIÐde×diÑdi×dmÑdmÔdoô  ORð  ST÷  SXñ  SXó  OY÷  Oañ  Oað  beð  gió  Oj�EÜ+3´G¸A¿E¹EÀ5È$Ó4OÔ+P˜AŸE™EŸI™IœKÔV]Ð^_×^cÑ^cÐejÔloÐpq×puÑpuÓlvÓVw�EØ ×'Ñ'¨¯©«¸¿¹»Ð(FÖGð	Hñ  ÜÐKÌSÔQØ$�Øð,Ø�? wÐ':Ø—I‘I˜gÔ&ùð- "‰HˆC�ÙØ$0ò ‘L�E˜5Ø × 2Ñ 2Ó 4Ó4Ø#(¨%˜S˜Ùðñ
 ™<Ø'¨™?‘��Sá‘sØ03¸CÑ(@”
˜9Ñ%Ü”ÜÐ8¸¸¸Q¸s¸eÐDÄeÔLØ˜˜T�>ðØ�? wÐ':Ø—I‘I˜g×&ò (;’?ð]Qðf ��xÒBÐ#BÐBÐB÷o7ñ 7ûäò 	Ø‹Að	ûôb ò /Ø&.Ñ#�›)ð/ûôB ò Úðû”9ò Úðû”9ò Úðû”9ò Ûðûô ò 	ÜÐ/´·±·±À
ÌJÓ0WÐ/XÐX[Ð\]Ð[^Ð_ÔadÔeÜ˜1“vˆHÛðØ�? wÐ':Ø—I‘I˜gÔ&úÜò Úðþð	ûð
Ø�? wÐ':Ø—I‘I˜gÕ&ð (;�?øäò Ùðýs  Æ\ Æ'2[3Ç\ Ë](Ë/$\ÌE.](Ò\'Ò\7Ò3A](Ó8E](Ù	]Ù "](ÚA](Û]Û3[=	Û8\ Ü \Ü\Ü\$Ü ](Ü#\$Ü$](Ü'	\4Ü3\4Ü7	]Ý]Ý	]Ý]Ý	]%Ý$]%Ý(	_%Ý1A_ Þ4_(Þ9_ß	_ß_ß _%ß%_(ß(`ß*`ß?`à	`	à`à`	à`c                 ó¾   ‡ — ‰ sy‰ j                  d«      dk(  ry‰ j                  d«      t        k(  rydj                  ˆ fd„dD «       «      j                  «       }d	|v S )
uJ   True se l'item EPG/canale Ã¨ Radio TV Serie A (lineare Lega, no DRM DAZN).FÚsourceÚseriea_radioTrË   ú c              3   óZ   •K  — | ]"  }t        ‰j                  |«      xs d «      –— Œ$ y­w©r»   N)rŠ   r‰   )r…  r¬  ré  s     €r3   r‡  z&is_radio_tv_serie_a.<locals>.<genexpr>=  s+   øè ø€ ò àô 	ˆG�K‰K˜‹NÒ ˜b×!ñùs   ƒ(+)ÚlabelÚcompetitionrÌ   Úlinear_channelÚnow_programúradio tv serie a)r‰   ÚSERIEA_RADIO_ASSET_IDrL  r‰  )ré  Úblobs   ` r3   Úis_radio_tv_serie_ard  5  sf   ø€ áØØ‡{�{�8Ó Ò.ØØ‡{�{�4ÓÔ1Ò1ØØ�8‰8ó àRôó ÷ �eƒgð 	ð  Ð%Ð%rT   c                  ó†  — t        t        j                  «       «      } t        t        j                  «       «      j                  «       }dt        t
        dddddddd| || › d	�dd
œ}	 t        j                  t        |t        d¬«      }|j                  s"ddd|j                  › d|j                  dd › �fS |j                  «       }|j                  d«      xs d}|j                  d«      dk7  s|s*dd|j                  d«      xs d|j                  d«      › �fS |}	 t        j                  |t        dd¬«      }|j                  r|j                  j!                  dd«      }d|vrddd|dd › d�fS t%        |«      }dddd œ}	||||	dd!œdfS # t"        $ r |}Y Œ8w xY w# t"        $ r}
ddt        |
«      fcY d}
~
S d}
~
ww xY w)"zLPOST Deltatre Open Auth. SessionId/PlaybackSessionId random a ogni chiamata.ry   ÚliveÚ2ÚHTML5ÚDASHzDesktop-DASHr»   ÚOpenz|web_browser)ÚTypeÚVideoIdÚVideoSourceÚ	VideoKindÚ
AssetStateÚ
PlayerTypeÚVideoSourceFormatÚVideoSourceNameÚDRMTypeÚAuthTypeÚContentKeyDatar  ÚPlaybackSessionIdÚOtherÚUserr  r  Nr¢   r—  é´   Ú
ContentUrlÚResponser¡   ÚMessagezEntitlement T)r×   rN   Úallow_redirectsz:443/ú/z@syna-token=z"Redirect syna-token mancante (got é    r9   z
syna-tokené(   )ÚNameÚValueÚExpirySeconds)Úcontent_urlÚbase_manifest_urlÚ	cdn_tokenÚ
base_query)rŠ   r7  r8  r  ÚSERIEA_RADIO_VIDEO_IDÚSERIEA_RADIO_VIDEO_SOURCEr   r&  ÚSERIEA_ENTITLEMENT_URLÚSERIEA_HEADERSr§   r©   r'  r¨   r‰   r)  r   r1   r   )ÚsidÚpsidr   r�   r*  r„  ÚresolvedÚhopr�   rÎ   rJ   s              r3   Úrequest_seriea_entitlementr�  D  sæ  € ä
Œd�j‰j‹lÓ
€CÜŒt�z‰z‹|Ó×"Ñ"Ó$€DàÜ(Ü0ØØØØ#Ø)ØØØØØ!Ø�5˜Ð%Øñ€Gð""Ü�M‰MÔ0°wÌÐ`bÔcˆØ�tŠtØ˜  q§}¡} o°R¸¿¹¸tÀ¸°~ÐFÐFÐFØ�v‰v‹xˆØ—h‘h˜|Ó,Ò2°ˆØ�8‰8�JÓ 4Ò'©{Ø˜˜tŸx™x¨	Ó2Ò[¸ÀTÇXÁXÈjÓEYÐDZÐ6[Ð[Ð[àˆð	#Ü—,‘,Ø¤^¸RÐQUôˆCð �wŠwØŸ7™7Ÿ?™?¨7°CÓ8�ð  Ñ)Ø˜Ð!CÀHÈTÈcÀNÐCSÐSTÐUÐUÐUÜ˜(Ó#ˆØ%°ÀRÑHˆØØ#Ø!)ØØñ	
ð
 ðð 	øô ò 	#Ø"ŠHð	#ûô ò "Ø�Tœ3˜q›6Ð!Õ!ûð"úsW   Á'AF Â6A$F ÄF ÄAF Å#F Å3F ÆFÆF ÆFÆF Æ	G Æ(F;Æ5G Æ;G c                 óÌ  — | j                  d«      xs d}t        d|› d�t        «       t        «       \  }}}|s|sbt        d|› d|› �t        «       | j                  d«      |d|xs d	| j                  d
d«      | j                  dd«      | j                  d«      dœS |d   }|d   }|d   }t        |«      }|j                  r|j                  j                  dd«      d   nd}	|j                  r|j                  › d|j                  › |	› d�nd}
| j                  d«      xs t        }t        d|› d�t        «       | j                  d
d«      | j                  dd«      ||d| j                  d«      i d|“dd“dd“d|“d|“d|
“dd “d|“d!d"“d#d"“d$d“d%d“d&d“d'd“d(t        j                  «       j                  «       “d)d*|› d+t        d,   › d-�“d.d/t        d,   › d0|› d1�“d2œS )3zBFlusso Radio TV Serie A da Deltatre (Clear, niente Widevine/DAZN).rÌ   úRadio TV Serie Au   ðŸ“» [z+] Flusso Lega Serie A (Deltatre, no DRM)...õ   â�Œ [z] Entitlement Lega fallito: rË   ÚERRORzEntitlement Lega fallitoÚlogor»   Úevent_idÚepg)rË   rÌ   rY  Úerrorr•  r–  r—  r„  r…  r†  r~  ry   r   z://õ   âœ… [z ] Manifest Lega OK (@syna-token)NrY  r¡   rX  rY  Úmanifest_urlÚbase_cdn_urlÚcdn_namezlegaseriea-netrwÚ
resolutionÚhdÚactual_resolutionr!  rÍ  Ú
key_stringÚlicense_urlÚextracted_atÚmpv_commandúmpv "ú" --user-agent="r    z)" --referrer="https://www.legaseriea.it/"Úffplay_commandúffplay -user_agent "z2" -headers "Referer: https://www.legaseriea.it/" "r“  )r•  r–  Úproxy_manifestrÌ   Ú	clear_keyr—  Ú	_internal)r‰   r:   rA   r�  rI   r   r=   ÚrsplitÚnetlocÚschemerb  r;   r   r_   rP  r‹  )ré  Úchannel_namer„  ÚpackÚerrÚmanifestÚbaserÎ   r�   Ú	base_pathÚbase_cdnÚcids               r3   Úextract_seriea_radior¶  y  s¢  € à—;‘;˜vÓ&Ò<Ð*<€LÜˆ&��ÐIÐJÌDÔQÜ7Ó9Ñ€K��sÙ
‘$Üˆe�L�>Ð!=¸c¸UÐCÄSÔIà—+‘+˜dÓ#Ø ØØÒ6Ð6Ø—K‘K ¨Ó+ØŸ™ J°Ó3Ø—;‘;˜uÓ%ñ
ð 	
ð �MÑ"€HØÐ#Ñ$€DØ�Ñ€EÜ�d‹^€FØ17·²�—‘×"Ñ" 3¨Ó*¨1Ò-À"€IØCIÇ=Â=�&—-‘-�  F§M¡M ?°9°+¸QÑ?ÐVX€HØ
�+‰+�dÓ
Ò
4Ô4€CÜˆ%�ˆ~Ð=Ð>ÄÔFà—‘˜F BÓ'Ø—K‘K 
¨BÓ/Ø"ØØØ�{‰{˜5Ó!ð
Ø�#ð
à�dð
ð �nð
ð ˜Hð	
ð
   ð
ð ˜Hð
ð Ð*ð
ð ˜ð
ð ˜$ð
ð   ð
ð �4ð
ð �4ð
ð ˜$ð
ð ˜2ð
ð œHŸL™L›N×4Ñ4Ó6ð
ð  ˜U 8 *Ð,<¼^ÈLÑ=YÐ<Zð  [Dð  Eð!
ð" Ð 4´^ÀLÑ5QÐ4Rð  SEð  FNð  EOð  OPð  Qð#
ñð rT   r°  c                 ó‚   ‡— | xs dj                  «       Št        ˆfd„dD «       «      ryt        ˆfd„dD «       «      ryy)	aÎ  Classifica un errore Playback in 3 categorie:
    - 'throttle': blocco edge/IP (429, CloudFront, 10405...). Insistere peggiora
      il blocco: la run va fermata, non ritentata.
    - 'account': diniego legato a QUESTO account (Pin, geo/country, entitlement,
      concorrenza...). Inutile riprovare con lo stesso token, ma ha senso far
      provare la rotazione con un altro account.
    - 'transient': tutto il resto (errori rete, 5xx...). Ha senso riprovare.r»   c              3   ó&   •K  — | ]  }|‰v –— Œ
 y ­wr±   rS   ©r…  r¬  rJ   s     €r3   r‡  z*classify_playback_error.<locals>.<genexpr>·  s   øè ø€ ò G�aˆ1�Œ6ñ Gùó   ƒ)	Ú429útoo many requestsú
rate limitú
rate-limitz!security policy has been breachedzrequest limitingzrequest blockedÚ
cloudfrontÚ10405Úthrottlec              3   ó&   •K  — | ]  }|‰v –— Œ
 y ­wr±   rS   r¹  s     €r3   r‡  z*classify_playback_error.<locals>.<genexpr>»  s   øè ø€ ò -�aˆ1�Œ6ñ -ùrº  )Úpinz	not validzno articlesz	not foundÚ404ÚeligibilityÚentitlementÚgeoÚconcurrencyznot allowedÚ	forbiddenÚdeniedÚinactiveÚsignedinactiveÚ401Ú403Ú10400ú	trust 2faú2fa requiredÚaccountÚ	transient)r‰  r�  ©r°  rJ   s    @r3   Úclassify_playback_errorrÕ  ®  sV   ø€ ð 
Š�×ÑÓ€AÜ
ó Gð Fô Gô Gð Ü
ó -ð ,ô -ô -ð
 ØrT   c                 óJ   — | xs dj                  «       }d|v xs
 d|v xs d|v S )uK   True se DAZN ha rifiutato il playback perchÃ© l'account richiede Trust 2FA.r»   rÏ  rÐ  rÑ  r-  rÔ  s     r3   Úis_trust_2fa_errorr×  Ä  s2   € à	Š�×ÑÓ€AØ�aˆ<ÒB˜;¨!Ð+ÒB¨~ÀÐ/BÐBrT   Úmax_retriesc                 óª  ‡S‡T‡U— t         j                  «       }|j                  dd«      }| j                  dd«      }d}d}	d}
d}d}i }d}d}d}d}i }d\  }}d}t        d	|d	z   «      D �	]Ê  }t	        | ||«      }|d	k(  rt        d
|› d�t        «       nt        d|› d|› d|› d�t        «       t        ||||«      \  }ŠT‰Ts|�s‰Tr«t        ˆTfd„dD «       «      r—t        d|› d�t        «       |j                  dd«      }|j                  dd«      }t        ||||¬«      }|rN|}t        |«      \  }}}|j                  d|«      }t        d|› d�t        «       t        j                  d«       �Œ‰Tr]dt        ‰T«      v rPt        d|› d�t        «       t         j#                  | j                  d«      «       | j                  d«      |d‰Tdœc S t%        ‰T«      }|dk(  r.t        d|› d ‰T› �t&        «       | j                  d«      |d!‰Tdœc S |d"k(  rYt)        ‰T«      rd#nd$}|d#k(  rt        d%|› d&‰T› �t        «       nt        d'|› d(‰T› �t        «       | j                  d«      ||‰Tdœc S ‰Trt        d)|› d*‰T› d+�t        «       ||k  rt        j                  d,«       �Œ8t        d-‰T› �t&        «       | j                  d«      |d$‰Tdœc S |j                  d.i «      }|j                  d/«      r|j                  d/«      }|j                  d0g «      } |}| sD||k  rt        j                  d,«       �ŒÉt        d1t&        «       | j                  d«      |d2d3dœc S g d4¢ŠUˆUfd5„}!t+        | |!¬6«      }"|d	k(  rÙt        d7t-        |"«      › d8�t.        «       t1        |"«      D ]®  \  }#}$|$j                  d9d:«      }%|$j                  d;d«      }&|$j                  d<i «      }'t3        |'t4        «      r|'j                  d=d«      d>d? nt        |'«      d>d? }(d@|&v })t7        |$j9                  «       «      }*t        dA|#› dB|%› dC|)rdDndE› dF|(› dG|*› �
t.        «       Œ° t;        |«      }+|j                  dHi «      j                  dIi «      },|,j                  dJdK«      }-|j                  dL«      xs i j                  dM«      }.|.�r\|�sY|"dN   }/|/j                  d;d«      }0|/j                  d<i «      }1t3        |1t4        «      r|1j                  dOdP«      ndP}2t3        |1t4        «      r|1j                  d=d«      nt3        |1t        «      r|1nd}3|0r|3r|0› d:|0v rdQnd:› |2› dR|3› �}0|0r¿t=        |.| j                  d|j                  dSd«      «      |0||d>||¬T«      \  }}ŠS|sB‰Sr@t        ˆSfdU„dVD «       «      r,t        dW|› dX�t        «       | j                  d«      |d$‰Sdœc S |sB‰Sr@t        ˆSfdY„dZD «       «      r,t        d|› d[�t        «       | j                  d«      |d$‰Sdœc S |"D �]ß  }4|4j                  d\d«      }5|4j                  d;d«      }6|4j                  d<i «      }7|4j                  d]d«      }8|4j                  d9d«      }9|7j                  dOdP«      }:|7j                  d=d«      };|:r+|;r)d:|5v rdQnd:}<|5› |<› |:› dR|;› �}=|6rd:|6v rdQnd:}>|6› |>› |:› dR|;› �}6n|5}=d^d_|-|,j                  d`da«      |,j                  dbdc«      |,j                  ddde«      dfœ}?|:r|;r
|:› dR|;› �|?dg<   	 |+j                  |=|?dh¬i«      }@|@j>                  r@j@                  nd}Ad}BdN}CA�rï	 tE        jF                  A«      }D|DjI                  dj«      D ]î  }E|Ej                  dk«      dlk(  sŒdN}Fdm}GEjI                  dn«      D ]«  }H|Hj                  do«      }I|Hj                  dp«      }J|Hj                  dq«      }K|IrFIjK                  «       r6tM        I«      Fk\  r(tM        I«      }FJrJjK                  «       rtM        J«      }GKsŒ�KjK                  «       sŒ’tM        K«      CkD  sŒ¡tM        K«      }CŒ­ FdNkD  rF› drGdmkD  rGnd› �}B n tO        A«      \  }L}M|LrÇ|6rÅ|sÃt=        L| j                  d|j                  dSd«      «      |6||M||¬T«      \  }}ŠS|sD‰SrBt        ˆSfds„dVD «       «      r.t        dW|› dX�t        «       | j                  d«      |d$‰Sdœc c S |sD‰SrBt        ˆSfdt„dZD «       «      r.t        d|› d[�t        «       | j                  d«      |d$‰Sdœc c S |=}|5}	|9}
|8}B}|7}|6}|:r	|;r|:› dR|;› �nd}N|N}du|=› dv|-› dw�}O|Nr	OdxN› dw�z  }O|r,|r*Ody|› dz|› dw�z  }Od{|-› dw�}PNr	Pd|N› dw�z  }PPd}|› d~|=› dw�z  }Pnd{|-› dw�}PNr	Pd|N› dw�z  }PPd~|=› dw�z  }PO}P}|s�Œž|s�Œ¢Cr	dCd€z  › d��nd}Qt        d‚B› |Q› dƒ|8jQ                  «       › d„�d…|Bv rt        nt        «        n |r|r n<||k  s�	Œ™t        d)|› d†|d	z   › d|› d‡�t        «       t        j                  dˆ«       �	ŒÍ |r|rd‰n|rdŠnd$}| j                  d‹d«      |j                  dŒd«      d�| j                  d|j                  dS«      «      › dŽ�||r	|r|› dz|› �nd>| j                  d�«      d�œ}Ri d| j                  d|j                  dS«      «      “d‘|“d’|“d“|	“d”|
“d•|“d–|“d—|“d˜|“d™|“dš|“d›|r	|r|› dz|› �nd>“dœ|rd�|› �nd>“dž|“dŸ|“d |“d¡tS        jT                  «       jW                  «       “Rd¢<   |RS # tB        $ r d}AY �Œ	w xY w# tB        $ r Y �Œúw xY w)£u:  
    Esegue l'estrazione completa per un singolo canale DAZN con retry intelligente:
    se un flusso restituisce 'Solo Manifest' (nessuna chiave DRM al primo colpo),
    riprova automaticamente esplorando tutti i CDN disponibili e ripetendo la richiesta
    finchÃ© la chiave non viene estratta con successo.
    rC  r»   rÌ   zDAZN ChannelÚfhdrô  r¿  Fry   zRichiesta Playback per 'ú'...õ   ðŸ”� [z] Tentativo r~  z&: riprovo estrazione Playback & DRM...c              3   óT   •K  — | ]  }|t        ‰«      j                  «       v –— Œ! y ­wr±   ©rŠ   r‰  )r…  r¬  r°  s     €r3   r‡  z"extract_channel.<locals>.<genexpr>ì  s!   øè ø€ Ò}°Q˜1¤ C£§¡Ó 0Ô0Ñ}ùó   ƒ%()Ú
registeredzdevice is notÚregisterznot allowed to playu.   ðŸ“± Registrazione dispositivo richiesta per 'z', chiamo RefreshAccessToken...r   r0  )r.  rÑ   r  u2   âœ… Dispositivo registrato! Riprovo Playback per 'g      ð?ÚEligibilityu   â›” [u6   ] Eligibility not allowed â€” evento escluso dal JSON.rË   ÚELIGIBILITY_BLOCKED)rË   rÌ   rY  r˜  rÁ  z"] Throttle edge/IP, niente retry: Ú	THROTTLEDrÒ  ÚACCOUNT_2FAr”  õ   ðŸ”’ [z/] Trust 2FA su questo account, provo un altro: u   ðŸš« [z7] Diniego per questo account, passo oltre senza retry: õ   âš ï¸� [z] Errore temporaneo: u    â€” riprovo...g      ø?zErrore Playback: ÚAssetÚTitleÚPlaybackDetailsz1Nessun PlaybackDetails disponibile nella rispostaÚ
NO_STREAMSzNessun PlaybackDetails trovato)zdca-de-livezdcb-de-liveÚdezdca-fs-livezdcb-fs-livezdcs-fs-livezdct-fs-liveÚfszdcs-ac-livezdct-ac-livezdca-ac-liveÚaczdct-ak-livezdcs-ak-liveÚakc                 ó|   •— | j                  dd«      j                  «       }t        ‰«      D ]  \  }}||v sŒ|c S  y)NÚCdnNamer»   iç  )r‰   r‰  Ú	enumerate)ÚdÚc_nameÚidxÚprefÚ
pref_orders       €r3   Ú	cdn_scorez"extract_channel.<locals>.cdn_score>  sE   ø€ Ø—U‘U˜9 bÓ)×/Ñ/Ó1ˆFÜ& zÓ2ò ‘	��TØ˜6’>Ø’Jðð rT   )rÍ  u   ðŸ”� DEBUG PlaybackDetails: z CDN disponibilirñ  r'  ÚLaUrlÚCdnTokenr‚  Nrÿ   ÚeyJú  [z] CDN=z | LaUrl_has_jwt=ÚYESÚNOz	 | Token=z... | Keys=rÜ   r×   r'   rÁ   ÚLicenseÚPsshr   r�  ú
dazn-tokenú&rô   ÚId)r´  r  r  r>  r  ræ  r  rÎ   c              3   óT   •K  — | ]  }|t        ‰«      j                  «       v –— Œ! y ­wr±   rÞ  ©r…  r¬  Údrm_errs     €r3   r‡  z"extract_channel.<locals>.<genexpr>k  s)   øè ø€ ò  /LÈQ¨q´C¸³L×4FÑ4FÓ4HÔ/Hñ  /Lùrß  )r¼  r»  r½  r¾  õ   â�³ [zZ] Rate limit server licenze (429): mi fermo su questo canale per non peggiorare il blocco.c              3   óT   •K  — | ]  }|t        ‰«      j                  «       v –— Œ! y ­wr±   rÞ  r  s     €r3   r‡  z"extract_channel.<locals>.<genexpr>n  s)   øè ø€ ò  /SÈQ¨q´C¸³L×4FÑ4FÓ4HÔ/Hñ  /Sùrß  )z not allowed to receive a licenser/  zlicense deniedz/] 10802 su questo CDM: inutile altri CDN/retry.ÚManifestUrlÚ
Resolutionr!   r"   rÃ   r¾   rÄ   r¿   rÅ   rÀ   )r   r   r    rÃ   rÄ   rÅ   ÚCookier  r  z/.//{urn:mpeg:dash:schema:mpd:2011}AdaptationSetrÂ  rÃ  r  z-{urn:mpeg:dash:schema:mpd:2011}RepresentationÚheightÚ	frameRateÚ	bandwidthr¬   c              3   óT   •K  — | ]  }|t        ‰«      j                  «       v –— Œ! y ­wr±   rÞ  r  s     €r3   r‡  z"extract_channel.<locals>.<genexpr>½  s*   øè ø€ ò  3PÐQR°1¼¸G»×8JÑ8JÓ8LÔ3Lñ  3Pùrß  c              3   óT   •K  — | ]  }|t        ‰«      j                  «       v –— Œ! y ­wr±   rÞ  r  s     €r3   r‡  z"extract_channel.<locals>.<genexpr>Å  s*   øè ø€ ò  3WÐQR°1¼¸G»×8JÑ8JÓ8LÔ3Lñ  3Wùrß  r¤  r¥  r“  z --http-header-fields="Cookie: z" --demuxer-lavf-o="decryption_key=rv   r§  z -headers "Cookie: z -cenc_decryption_key z "z @ rŸ   z kbpszRisoluzione stream: z (Profilo API: r9   Ú1080z@] Solo Manifest (chiavi DRM non ancora pronte). Nuovo tentativo z
 tra 2s...rM   r¡   ÚMANIFEST_ONLYr•  ÚEventIdz*https://addictedbytheproject.nl:8443/play/z/stream.mpdr—  ©r•  r–  r¨  rÌ   r©  r—  rY  rš  r…  rœ  r�  rŸ  r†  r¡  r!  rÍ  r   Úcookie_headerzCookie: Úmpv_cmdr£  r¦  r¢  rª  ),rå   r—   r‰   Úranger  r:   rA   r@   r  r�  r=  r  r;   r¥   rO  rŠ   r   r9  rÕ  rI   r×  r4  r}   r(  rò  r‡   rˆ   r¤   Úkeysr%  rV  r§   r'  r1   rÐ  rÑ  ÚfindallÚisdigitr·   rè  r  r   r_   rP  )Vré  r>  rÎ   r  rØ  r  rH  r®  Úlast_composed_manifest_urlÚlast_raw_manifest_urlÚlast_cdn_nameÚlast_resolutionÚlast_actual_resolutionÚlast_cdn_tokenÚlast_la_urlÚlast_cookie_hdrÚlast_mpv_cmdÚlast_ffplay_cmdÚ
last_assetr!  rÍ  Úlicense_refreshedÚattemptrÍ   Úplayback_datar.  rÑ   Úref_tokrT  Úerr_kindrY  ÚassetÚdetails_listrø  Úsorted_detailsrõ  ÚdetÚcdn_nÚlaÚctÚct_valÚhas_jwtr  r2   Údazn_headersÚuaÚ	json_psshÚd0Úla0Úct0Útn0Útv0ró  Úraw_manifest_urlr  r†  r�  rœ  Ú
token_nameÚ	token_valÚsepÚcomposed_manifest_urlÚla_sepÚmpd_headersÚr_mpdÚmpd_textrŸ  Úmax_bandwidthrÛ  rÞ  Úmax_hÚmax_fpsÚrepr*  ÚfpsÚbwr´  ræ  Ú
cookie_hdrr  Ú
ffplay_cmdÚbw_strÚresult_entryr  r°  r÷  sV                                                                                      @@@r3   Úextract_channelrO  É  sí  ú€ ô ×'Ñ'Ó)€JØ×"Ñ" :¨rÓ2€IØ—;‘;˜v ~Ó6€Là!#ÐØÐØ€MØ€OØ&ÐØ€NØ€KØ€OØ€LØ€OØ€JØ�H€CˆØÐä˜˜K¨!™OÓ,ó RˆÜ)¨'°6¸9ÓEˆØ�aŠ<ÜÐ*¨<¨.¸Ð=¼tÕDä�&˜˜ l°7°)¸1¸[¸MÐIoÐpÔrxÔyä2°<ÀÈÐPZÓ[Ñˆ�sÙ’má”sÓ}Ð:|Ô}Ô}ÜÐDÀ\ÀNÐRqÐrÔtxÔyØ(×,Ñ,¨V°RÓ8�Ø*×.Ñ.¨z¸2Ó>�	Ü,¨U¸GÈyÐeoÔp�ÙØ#�EÜ+=¸gÓ+FÑ(�A�q˜.Ø .× 2Ñ 2°:¸yÓ I�IÜÐLÈ\ÈNÐZ^Ð_ÔafÔgÜ—J‘J˜s”OÙñ �}¬¨C«Ñ0Ü�e˜L˜>Ð)_Ð`ÔbhÔiÜ(×,Ñ,¨W¯[©[¸Ó->Ô?à!Ÿ+™+ dÓ+Ø(Ø3Ø ñ	ò ô /¨sÓ3ˆHØ˜:Ò%Ü�e˜L˜>Ð)KÈCÈ5ÐQÔSVÔWà!Ÿ+™+ dÓ+Ø(Ø)Ø ñ	ò ð ˜9Ò$Ü*<¸SÔ*A™Àw�Ø˜]Ò*Ü˜&  Ð.]Ð^aÐ]bÐcÔekÕlä˜&  Ð.eÐfiÐejÐkÔmsÔtà!Ÿ+™+ dÓ+Ø(Ø$Ø ñ	ò ñ Ü�h˜|˜nÐ,AÀ#ÀÀoÐVÔX^Ô_Ø˜Ò$Ü—
‘
˜3”ÙÜÐ# C 5Ð)¬3Ô/à—k‘k $Ó'Ø$Ø!Øñ	ò ð ×!Ñ! '¨2Ó.ˆØ�9‰9�WÔØ Ÿ9™9 WÓ-ˆLØ$×(Ñ(Ð):¸BÓ?ˆØˆ
áØ˜Ò$Ü—
‘
˜3”ÙÜÐCÄcÔJà—k‘k $Ó'Ø$Ø&Ø9ñ	ò ò Sˆ
ô	ô   °)Ô<ˆð �aŠ<ÜÐ.¬s°>Ó/BÐ.CÐCSÐTÔVYÔZÜ% nÓ5ò B‘��SØŸ™ 	¨3Ó/�Ø—W‘W˜W bÓ)�Ø—W‘W˜Z¨Ó,�Ü5?ÀÄDÔ5I˜Ÿ™ ¨Ó,¨S¨bÑ1ÌsÐSUËwÐWZÐXZÈ|�Ø 2˜+�Ü˜CŸH™H›JÓ'�Ü�c˜#˜˜f U GÐ+<Ág¹UÐSWÐ<XÐXaÐbhÐaiÐitÐuyÐtzÐ{ô  ~Aõ  BðBô ˜:Ó&ˆØ—z‘z &¨"Ó-×1Ñ1°)¸RÓ@ˆØ×Ñ˜lð  -ló  mˆà"×&Ñ& yÓ1Ò7°R×<Ñ<¸VÓDˆ	ÚšSØ Ñ"ˆBØ—&‘&˜ "Ó%ˆCØ—&‘&˜ RÓ(ˆCÜ3=¸cÄ4Ô3H�#—'‘'˜& ,Ô/ÈlˆCÜ*4°S¼$Ô*?�#—'‘'˜' 2Ô&ÌZÐX[Ô]`ÔMaÁcÐgiˆCÙ‘sØ˜ S¨C¡Z™c°SÐ9¸#¸¸aÀ¸uÐE�ÙÜ$0Ø&Ø$Ÿ[™[¨¨u¯y©y¸¸rÓ/BÓCØØ!Ø#1Ø!%Ø)Øô	%Ñ!��S˜'ñ ™w¬3ó  /Lð  SKô  /Lô  ,LÜ˜% ˜~ð  .Hð  Iô  KQô  RØ")§+¡+¨dÓ"3¸\ÐU\ÐgnÑoÒoÙ™w¬3ó  /Sð  SRô  /Sô  ,SÜ˜% ˜~Ð-\Ð]Ô_eÔfØ")§+¡+¨dÓ"3¸\ÐU\ÐgnÑoÒoàó {	ˆAØ Ÿu™u ]°BÓ7ÐØ—U‘U˜7 BÓ'ˆFØŸ™˜j¨"Ó-ˆIØŸ™˜|¨UÓ3ˆJØ—u‘u˜Y¨Ó+ˆHà"Ÿ™ v¨|Ó<ˆJØ!Ÿ™ g¨rÓ2ˆIÙ™iØ Ð$4Ñ4‘c¸#�Ø+;Ð*<¸S¸EÀ*ÀÈQÈyÈkÐ(ZÐ%áØ$'¨6¡M™S°s�FØ &˜x¨ x°
¨|¸1¸Y¸KÐH‘Fà(8Ð%ð 1Ø2Ø Ø)×-Ñ-¨kÐ;ó  AØ$0×$4Ñ$4Ð5GÈÓ$NØ&2×&6Ñ&6Ð7KÈ[Ó&YñˆKñ ™iØ+5¨,°a¸	°{Ð(C�˜HÑ%ðØŸ™Ð3¸[ÐRT˜ÓU�Ø).¯ª˜5Ÿ:š:°r�ð !*ÐØˆMÚðÜŸ=™=¨Ó2�DØ $§¡Ð-^Ó _ò "˜ØŸ8™8 MÓ2°gÓ=Ø$%˜EØ&(˜GØ'+§|¡|Ð4cÓ'dò 
< Ø$'§G¡G¨HÓ$5 Ø&)§g¡g¨kÓ&: Ø%(§W¡W¨[Ó%9 Ù#$¨¯©¬Ü'*¨1£v°¢Ü03°A³¨Ù+.°3·;±;´=Ü69¸#³h¨GÚ#%¨"¯*©*­,¼3¸r»7À]Ó;RÜ47¸³G¡Mð
<ð  % qšyØ7<°g¸QÈ'ÐTVÊ,¹wÐ\^Ð>_Ð4`Ð 1Ù!ð#"ô* *?¸xÓ)HÑ&�˜,Ù¡©sÜ(4Ø!)Ø!(§¡¨T°5·9±9¸TÀ2Ó3FÓ!GØ%Ø%Ø'5Ø%1Ø#-Ø#ô	)Ñ%�C˜˜gñ ¡7¬só  3Pð  WOô  3Pô  0PÜ˜e L >ð  2Lð  Mô  OUô  Và")§+¡+¨dÓ"3Ø$0Ø&-Ø%,ñ	 ô ñ ¡7¬só  3Wð  WVô  3Wô  0WÜ˜e L >Ð1`ÐaÔciÔjà")§+¡+¨dÓ"3Ø$0Ø&-Ø%,ñ	 ô ð *?Ð&Ø$4Ð!Ø$ˆMØ(ˆOØ%6Ð"Ø&ˆNØ ˆKá9CÉ	˜J˜< q¨¨Ñ4ÐXZˆJØ(ˆOØÐ3Ð4Ð4DÀRÀDÈÐJˆGÙØÐ<¸Z¸LÈÐJÑJ�Ù‘sØÐ?À¸uÀAÀcÀUÈ!ÐLÑL�Ø3°B°4°qÐ9�
ÙØÐ$7¸
°|À1Ð"EÑE�JØÐ 6°s°e¸2Ð>SÐ=TÐTUÐVÑV‘
à3°B°4°qÐ9�
ÙØÐ$7¸
°|À1Ð"EÑE�JØ Ð#8Ð"9¸Ð;Ñ;�
Ø"ˆLØ(ˆOã“sÙ?L˜3˜}°Ñ4Ð5°UÑ;ÐRT�ÜÐ*Ð+<Ð*=¸f¸XÀ_ÐU_×UeÑUeÓUgÐThÐhiÐjÐu{ð  @Qñ  vQÕlqô  W]ô  ^Ùðw{	ñz ‘3Ùà�[Ô Ü�(˜<˜.Ð(hÐipÐstÑitÐhuÐuvð  xCð  wDð  DNð  Oô  QWô  XÜ�J‰J�qŽMðeRñh ™c‰TÑ<V©Ð\c€Fà—‘˜F BÓ'Ø—N‘N 9¨bÓ1ØFÀwÇ{Á{ÐSWÐYc×YgÑYgÐhlÓYmÓGnÐFoÐozÐ{ØÙ(+±˜�u˜A˜c˜U‘^¸$Ø�{‰{˜5Ó!ñ€Lð!Øˆg�k‰k˜$ 
§¡¨tÓ 4Ó5ð!à�&ð!ð 	Ð2ð!ð 	Ð2ð	!ð
 	�Mð!ð 	�oð!ð 	Ð3ð!ð 	�^ð!ð 	�{ð!ð 	ˆsð!ð 	ˆsð!ð 	©±˜˜˜Q˜s˜e‘n¸4ð!ð 	¹˜8 OÐ#4Ñ5Èdð!ð 	�<ð!ð 	�|ð!ð  	˜/ð!!ð" 	œŸ™›×0Ñ0Ó2ð#!€L�Ñð& ÐøôA ò Ø“ðûô4 !ò Úðús=   Ü
.l3Ý =mÝ>Bmàmà%mà4#mì3mímí	mímrÙ   Úinclude_eventsc                 óŠ(  ‡[— t        «       }t        «        t        j                  |j	                  di «      j	                  d«      ¬«       t        || «      }|st        dt        «       i S t        |«      \  }}}|€||j	                  di «      j	                  dg «      j                  «       }|rHt        «       }|D �	ch c]  }	|	j	                  d«      ’Œ }
}	|D ]  }|d   |
vsŒ|j                  |«       Œ |}|st        dt        «       i S |D �	cg c]  }	|	j	                  d«      t        vsŒ|	‘Œ }}	t        d	t        |«      › d
�t        «       g }dg}d}d}d}d„ Š[d·d„}t         j"                  j%                  t         j"                  j'                  t(        «      d«      }g }t         j"                  j+                  |«      rL	 t-        |dd¬«      5 }|D �cg c])  }d|v sŒ|j/                  d«      rŒ|j1                  «       ‘Œ+ }}ddd«       d}i }t5        «       }d}d}t7        |d«      D �]q  \  }}	|	j	                  d|	j	                  dd|› �«      «      }t9        d|d›dt        |«      › d|d›�dd ¬!«       d}t;        |	«      r�t=        |	«      }|j	                  d"«      xs! |j	                  d#i «      j	                  d"«      }|d$k(  rt9        d%«       nt9        d&|j	                  d'd(«      › d)�«       |j                  |«       ŒÜ|rt        |«      nd}t5        «       } d}!t?        |«      D �]ô  }"|}#|}$d}!|�r:d}%t?        t        |«      «      D ];  }&||t        |«      z     }'|dz  }|'jA                  dd«      \  }(})|(|v s|(| v rŒ7|'}%|(}! n |%s �n’| jC                  |!«       |!|v r-||!   \  }#}$t9        d*|!jA                  d+«      d   › d)�dd ¬!«       nŸt9        d,|!jA                  d+«      d   › d-�dd ¬!«       t        jE                  «       }*tG        |!)|*«      \  }+},|+d.k(  r,|,r*tI        |,|*¬/«      xs |,}-|-}#t        |#«      \  }}}$|#|$f||!<   n&t9        d0dd ¬!«       |+d1k(  r|jC                  |!«       �ŒGtK        |	||#|$«      } ‰[|«      }.|.d2k(  rZ|!r|!jA                  d+«      d   nd3}/|!r#|jC                  |!«       |jM                  |!d«       t        d4|› d5|/› d6�t        «       |r�Œº n<|.d7v r n6|r1|!r|!jA                  d+«      d   nd8}/t        d9|› d:|/› d;�t        «       �Œõ n |r ‰[|«      nd}0|0d<v xs
 |0d2k(  xr | }1|1s*t        d9|› d=�t        «       tK        |	|||«      } ‰[|«      }.|s�ŒF|j                  |«        ‰[|«      }.|.d>k7  rd}|.d>k(  r;|dz  }t9        t        › d?|› d@tN        › �«       |dAk\  s�Œ’t        dBt        «       d } nÏ|.dCk(  rt9        t        › dDtN        › �«       �ŒÅ|.d2k(  rt9        t        › dEtN        › �«       �Œä|.d$k(  r? ||dFd«      }2 ||dGd«      }3t9        tP        › dH|2ddI › dJ|3ddI › dKtN        › �«       |dz  }�Œ(|.dLk(  rt9        t        › dMtN        › �«       �ŒGt9        t        › d&|j	                  d'dN«      › d)tN        › �«       �Œt t7        |«      D �4�5cg c]  \  }4}5 ‰[|5«      dLk(  sŒ|4‘Œ }6}4}5|rt        dOt        «       |6r©|s§t        dPt        |6«      › dQ�t        «       tS        jT                  dA«       |6D ]p  }4||4   }7|7j	                  ddR«      }8t        dS|8› dT�t        «       tK        |7|||dU¬V«      }9 ‰[|9«      d$k(  sŒJ|9||4<   |dz  }t        dW|8› dX ||9dY«      › �tP        «       Œr t7        |«      D �4�5cg c]5  \  }4}5|5j	                  d'«      rdZtW        |5j	                  d'd«      «      v r|4‘Œ7 }:}4}5|:�r |�s�t         j"                  j%                  t         j"                  j'                  t(        «      d«      }g };t         j"                  j+                  |«      rL	 t-        |dd¬«      5 }|D �cg c])  }d|v sŒ|j/                  d«      rŒ|j1                  «       ‘Œ+ };}ddd«       |;st        d[t        |:«      › d\�t        «       �nÎt        d]t        |:«      › d^�t        «       i }t5        |«      }<d}=|:D �]œ  }4||4   }7|7j	                  ddR«      }8d}>tY        d_t        |;«      «      }?t?        |?«      D �]D  }|;|=t        |;«      z     }%|=dz  }=|%jA                  dd«      \  }(})|(|<v rŒ4|(|v r	||(   \  }@}An˜t        d`|8› da|(› db�t        «       t        jE                  «       }*tG        |(|)|*«      \  }+}@|+d.k7  s@s-t        dc|(› dd�t        «       di f||(<   |<jC                  |(«       Œ°t        @«      \  }}}A|@|Af||(<   t        de|(› �tP        «       @sŒÜt        df|8› dg|(› db�t        «       tK        |7|@Ad_¬V«      }9 ‰[|9«      }.|.d$k(  r/|9||4<   |dz  }t        dh|8› di|(› dj ||9dY«      › �tP        «       d }> �n	|.dLk(  r |9||4<   t        dk|8› dl|(› dm�t        «       d }> nä|.d2k(  st[        |9j	                  d'«      «      rMt        dn|8› d5|(› do�t        «       |<jC                  |(«       |jM                  |(d«       |jC                  |(«       �ŒÐ|9j	                  d'«      r6dZtW        |9j	                  d'd«      «      v rt        dp|8› dq|(› dr�t\        «       �Œ|9||4<   t        ds|8› dt|(› dj|9j	                  d'dN«      › �t        «        n |>r�Œ‰t        dk|8› du�t        «       �ŒŸ t_        dv„ |D «       «      }B|Brt        d[B› dw�t        «       dg}dg}C|j	                  di «      j	                  dxi «      j	                  dyd«      }Dta        ||«      D �]Ñ  \  }	} ‰[|«      }.|.dzv sŒ ||dFd«      }2 ||dGd«      }3 ||d{d«      }E|j	                  d|d«      }F|j	                  d}«      xs |	j	                  d}d«      }G|Grd~G› d�nd}Htc        |	j	                  d€«      «      }It;        |	«      xs  ||d�«      d‚k(  }J|Jrdƒ}KnIrd„}Knd…}K|s|.d$k(  r ||d†«      } ||d‡«      }te         ||dˆi «      tf        «      r ||dˆi «      j	                  d‰d«      nd}Lte         ||dˆi «      tf        «      r ||dˆi «      j	                  dŠd‹«      nd‹}M|Mr
LrdŒM› d�L› �nd}N ||dd«      }O|j                  dŽ|O› d�|j	                  d«      › dH› d�K› d‘|j	                  d«      › �
«       |j                  d’«       |j                  d“«       |j                  d”«       |j                  d•«       |j                  d–«       |2r*|3r(|j                  d—«       |j                  d˜|2› d|3› �«       JrI|j                  d™th        dš   › d›�«       |j                  dœth        dš   › �«       |j                  d�«       n>Dr<|j                  d™D› džN› �«       |j                  dœ|D› �«       |j                  dŸ«       |j                  E«       Jr�Cj                  dŽO› d�|j	                  d«      › dH› d�K› d‘|j	                  d«      › �
«       |Cj                  d’«       |Cj                  d“«       |Cj                  d™th        dš   › d›�«       |Cj                  E«       �Œ5Cj                  dŽO› d�|j	                  d«      › dH› d�K› d‘|j	                  d«      › �
«       |Cj                  d’«       |Cj                  d“«       |2r*|3r(Cj                  d «       |Cj                  d˜|2› d|3› �«       Cj                  F«       �ŒÔ g }Pg }Q|D �]7  }5 ‰[|5«      }.|.dzv sŒ|5j	                  d#i «      }RPj                  |5j	                  d}d«      |5j	                  d¡d«      |5j	                  d|d«      |5j	                  dd«      |5j	                  d¢«      |5j	                  d€«      d£œ«       |5j	                  d}d«      |5j	                  d¡d«      |5j	                  d|d«      |5j	                  dd«      |5j	                  d¢«      |5j	                  d€«      d£œ}S|Sjk                  |R«       |Rj	                  d�«      d‚k(  r�Œ'Qj                  S«       �Œ: |D �5cg c]  }5 ‰[|5«      d¤vsŒ|5‘Œ }T}5t_        ˆ[fd¥„|D «       «      }U|Urt        d¦U› d§�t        «       tm        jn                  «       jq                  «       }V|Vt        |«      |Pd¨œ}Wt-        tr        d©d¬«      5 }tu        jv                  W|dAd¬ª«       ddd«       Vt        |«      |t        jE                  «       QTd«œ}Xt-        tx        d©d¬«      5 }tu        jv                  X|dAd¬ª«       ddd«       t-        tz        d©d¬«      5 }|j}                  d¬j%                  |«      d¬z   «       ddd«       t-        t~        d©d¬«      5 }|j}                  d¬j%                  C«      d¬z   «       ddd«       |rPt         j"                  j%                  t€        d­«      }Yt-        |Yd©d¬«      5 }|j}                  d®|› d¯�«       ddd«       |rPt         j"                  j%                  t€        d°«      }Zt-        |Zd©d¬«      5 }|j}                  d®|› d¯�«       ddd«       t        d±t‚        › tr        › tN        › d²|› dt        |«      › d³�	tP        «       t        d´t‚        › tz        › tN        › �tP        «       |r#t        dµt        «       t        d¶|› �t        «       WS c c}	w c c}	w c c}w # 1 sw Y   �Œ¡xY w# t2        $ r Y �Œ°w xY wc c}5}4w c c}5}4w c c}w # 1 sw Y   �ŒWxY w# t2        $ r Y �Œfw xY wc c}5w # 1 sw Y   �Œ^xY w# 1 sw Y   �ŒxY w# 1 sw Y   �ŒâxY w# 1 sw Y   �Œ±xY w# 1 sw Y   �ŒlxY w# 1 sw Y   �Œ'xY w)¸zUEstrae tutti i canali/eventi configurati, risolve le chiavi DRM e aggiorna JSON & M3UrÜ   rÖ   ©rm   zNERRORE CRITICO: Nessun token DAZN disponibile! Configuralo in dazn_config.jsonNrÙ   rË   z"Nessun canale o evento da estrarreu   ðŸš€ Avvio estrazione di z canali/eventi DAZN...z#EXTM3U x-tvg-url=""r   c                 ój   — | j                  d«      xs! | j                  di «      j                  d«      S )NrY  rª  ©r‰   )r�   s    r3   Ú_get_statusz)extract_and_save_all.<locals>._get_status>  s+   € Ø�u‰u�X‹ÒF !§%¡%¨°RÓ"8×"<Ñ"<¸XÓ"FÐFrT   r»   c                 óF   — | j                  di «      j                  ||«      S )Nrª  rT  )r�   rÍ  Údefaults      r3   Ú_get_internalz+extract_and_save_all.<locals>._get_internal@  s    € Ø�u‰u�[ "Ó%×)Ñ)¨#¨wÓ7Ð7rT   rA  r�   r   rß   rv   rt   Fry   rÌ   zCanale rü  Ú2dr~  r\   z<25rZ  T)Úendr]   rY  rª  r¡   u   âœ… OK (Lega/Deltatre, no DRM)u   â�Œ Errore (r˜  rÆ  r9   ú(rx   z(login z)...r  rB  z[fail]r  rå  ztoken principaleu   
ðŸ”’ [z] Trust 2FA su z(: account scartato, provo il prossimo...)r¡   rã  rÒ  u
   
âš ï¸�  [z] Non riuscito con z., provo account alternativo da accounts.txt...)r¡   rã  rä  z[] Tutti gli account hanno fallito (o fallito login). Tento fallback col token principale...rä  u   â›” Throttle edge/IP (z/2)rM   ui   ðŸ›‘ Throttle IP confermato: fermo la run per non peggiorare il blocco. Fai pausa 15-30 minuti e riprova.rã  u%   â›” Eligibility not allowed (escluso)u"   ðŸ”’ Trust 2FA (tutti gli account)r!  rÍ  u   âœ… OK (r€  z...:z...)r  u2   âš ï¸�  Solo Manifest (in coda per sweep di retry)rD  uD   â�­ï¸� Sweep di retry saltati (throttle IP: niente altre richieste).u   ðŸ”„ Rilevati z= canali con 'Solo Manifest'. Avvio sweep di retry dedicato...ÚEventou1   ðŸ”� Secondo tentativo di estrazione chiavi per 'rÛ  rõ  )rØ  u(   âœ… Chiave recuperata con successo per 'z': r   ÚConcurrencyu   âš ï¸� zO canali bloccati per Concurrency ma nessun account alternativo in accounts.txt.u   ðŸ”„ Sweep Concurrency: zB canali bloccati. Provo con account alternativi da accounts.txt...rÛ   u   ðŸ”‘ [z ] Login con account alternativo r7   u   â�Œ Login fallito per z, provo il prossimo account...u   âœ… Login riuscito con rÜ  z] Retry con account r™  z] Recuperato con successo via r—  rç  z] Solo Manifest via z (senza chiavi DRM)ræ  z(, account scartato, provo il prossimo...r  z] Ancora Concurrency con z, provo un altro account...r“  z] Errore con z2] Non recuperabile con nessun account alternativo.c              3   ó€   K  — | ]6  }|j                  d «      sŒdt        |j                  d d«      «      v sŒ3d–— Œ8 y­w)r˜  r]  r»   ry   N)r‰   rŠ   )r…  r�   s     r3   r‡  z'extract_and_save_all.<locals>.<genexpr>4  s7   è ø€ Òn !°!·%±%¸µ.À]ÔVYÐZ[×Z_ÑZ_Ð`gÐikÓZlÓVmÒEmœAÑnùs   ‚>™>·>zL canali ancora bloccati per Concurrency dopo aver provato tutti gli account.r×   r'   )r¡   r  rš  r¨  r•  z tvg-logo="r“  r—  rX  rY  r’  zDAZN Eventi LivezDAZN Canalir¦  r£  r†  r‚  r�  r  z&Cookie=rô   z#EXTINF:-1 tvg-id="z" tvg-name="z group-title="z",z*#KODIPROP:inputstream=inputstream.adaptivez0#KODIPROP:inputstream.adaptive.manifest_type=mpdz=#KODIPROP:inputstream.adaptive.manifest_update_parameter=fullz+#KODIPROP:inputstream.adaptive.live_delay=8z4#KODIPROP:inputstream.adaptive.live_delay_type=fixedz>#KODIPROP:inputstream.adaptive.license_type=com.widevine.alphaz+#KODIPROP:inputstream.adaptive.license_key=z9#KODIPROP:inputstream.adaptive.stream_headers=User-Agent=r    z#&Referer=https://www.legaseriea.it/z#EXTVLCOPT:http-user-agent=z3#EXTVLCOPT:http-referrer=https://www.legaseriea.it/z&Referer=https://www.dazn.com/z.#EXTVLCOPT:http-referrer=https://www.dazn.com/z4#KODIPROP:inputstream.adaptive.license_type=clearkeyr–  r©  r  )r¡   r  rã  c              3   ó:   •K  — | ]  } ‰|«      d k(  sŒd–— Œ y­w)rã  ry   NrS   )r…  r�   rU  s     €r3   r‡  z'extract_and_save_all.<locals>.<genexpr>�  s   øè ø€ ÒZ !±+¸a³.ÐDYÓ2YœAÑZùs   ƒ”u   â›” zD eventi esclusi per Eligibility not allowed (non saranno ritentati).)rJ  Útotal_channelsÚ
keys_foundrÙ   rÞ   rà   )rJ  r`  ra  Ú
proxy_usedrÙ   Úfailed_channelsrd   zplay_ffplay.batz
@echo off
z
pause
zplay_mpv.batu   ðŸ’¾ Salvato con successo in: ú (z canali attivi)u!   ðŸ“‹ Playlist M3U aggiornata in: u6   ðŸŽ¬ Launcher generati: play_ffplay.bat e play_mpv.batu   â–¶ï¸�  Comando FFplay:
)r»   )Brè   rð   rå   ro   r‰   ra  r:   rI   r  ÚcopyÚfetch_live_eventsr“   r@   r   r}   rA   r<   r=   rL  rM  rN  r>   r’   r{   rz   r1   r7  rò  r^   rd  r¶  r  r|   r9  r—   r-  r=  rO  Úpopra   r;   r¥   rO  rŠ   Úminr×  r(  ÚsumÚzipr¸   r‡   rˆ   r‹  rê   r   r_   rP  ÚOUTPUT_JSON_FILEr¨   rä   ÚPROXY_DATA_FILEÚPLAYLIST_FILEr£  ÚPLAYLIST_PROXY_FILErF   ÚBOLD)\r?  rÙ   rP  r>  rÎ   rT  r  Úbase_channelsÚlive_eventsÚchÚbase_idsÚevrª   Ú	m3u_linesÚfoundÚfirst_ffplay_cmdÚfirst_mpv_cmdrX  rU  Úrotation_accountsr”   rV  Úrotation_idxÚalt_token_cacheÚfailed_accountsÚthrottle_streakÚthrottled_abortÚirÌ   ÚresÚst0Úattempts_allowedÚtried_emailsÚcurrent_emailÚ_acc_tryÚcurrent_tokenÚcurrent_payloadÚ	acct_lineÚ_skipÚcandrÏ   rÐ   r  rY  Úlogin_tokenr[  r\  ÚwhoÚst_nowÚskip_fallbackr!  rÍ  rõ  r�   Úmanifest_only_indicesÚ	target_chÚch_titleÚ	retry_resÚconcurrency_indicesÚalt_accountsÚskip_accountsÚaccount_idxrŽ  Úattempts_per_channelÚ	alt_tokenÚalt_payloadÚstill_concurrencyÚproxy_m3u_linesr5  r±  r¨  r•  Ú	logo_attrÚis_live_eventÚis_radioÚ
group_namer>  r=  rK  Úch_idÚclean_channelsÚproxy_channelsÚinternalÚproxy_entryrc  Úeligibility_countÚnow_tsÚoutput_dataÚproxy_outputÚ
ffplay_batÚmpv_batrU  s\                                                                                              @r3   Úextract_and_save_allr«    sC  ø€ ä‹]€FÜ„LÜ×Ñ F§J¡J¨v°rÓ$:×$>Ñ$>¸wÓ$GÐÔHä�f˜iÓ(€EÙÜÐ\Ô^aÔbØˆ	ä-¨eÓ4Ñ€A€qˆ.ð ÐØŸ
™
 6¨2Ó.×2Ñ2°:¸rÓB×GÑGÓIˆÙÜ+Ó-ˆKØ/<Ö=¨˜Ÿ™˜t�Ð=ˆHÐ=Ø!ò -�Ø�d‘8 8Ò+Ø!×(Ñ(¨Õ,ð-ð !ˆáÜÐ0´&Ô9Øˆ	ð &ÖV�r¨¯©°«Ô=UÒ)U’ÐV€HÐVäÐ
#¤C¨£M ?Ð2HÐIÌ4ÔPØ€GØ)Ð*€IØ€EàÐØ€MòGó8ô —G‘G—L‘L¤§¡§¡´Ó!:¸NÓK€MØÐÜ	‡w�w‡~�~�mÔ$ð	Ü�m S°7Ô;ð a¸qØ89Ö$`°1¸SÀAºXÈaÏlÉlÐ[^ÕN_ Q§W¡W¥YÐ$`Ð!Ð$`÷að
 €LØ€OÜ“e€OØ€OØ€Oä˜8 QÓ'ó sM‰ˆˆ2Ø�v‰v�f˜bŸf™f T¨W°Q°C¨=Ó9Ó:ˆÜ��A�b�6˜œ3˜x›=˜/¨¨D°¨:Ð6¸CÀtÕLàˆÜ˜rÔ"Ü& rÓ*ˆCØ—'‘'˜(Ó#ÒM s§w¡w¨{¸BÓ'?×'CÑ'CÀHÓ'MˆCØ�dŠ{ÜÐ6Õ8ä˜ S§W¡W¨W°mÓ%DÐ$EÀQÐGÔHØ�N‰N˜3ÔØá5Fœ3Ð0Ô1ÈAÐÜ“uˆØˆäÐ.Ó/ó ;	ˆHØ!ˆMØ,ˆOØˆMâ Ø �	Ü"¤3Ð'8Ó#9Ó:ò �EØ,¨\¼CÐ@QÓ<RÑ-RÑS�DØ  AÑ%�LØ&*§j¡j°°aÓ&8‘O�E˜8Ø Ñ/°5¸LÑ3HØ Ø $�IØ$)�MÙðñ !Úà× Ñ  Ô/Ø  OÑ3Ø5DÀ]Ñ5SÑ2�M ?Ü˜A˜m×1Ñ1°#Ó6°qÑ9Ð:¸!Ð<À#ÈTÖRä˜G M×$7Ñ$7¸Ó$<¸QÑ$?Ð#@ÀÐEÈ3ÐVZÕ[Ü!.×!7Ñ!7Ó!9�JÜ*4°]ÀHÈjÓ*YÑ'�F˜KØ Ò*©{Ü$6°{ÈzÔ$ZÒ$iÐ^i˜	Ø(1˜Ü0BÀ=Ó0QÑ-˜˜1˜oØ:GÈÐ9Y˜¨Ò6ä ¨S¸Õ=Ø! VÒ+Ø+×/Ñ/°Ô>Ù ä! " f¨m¸_ÓMˆCÙ˜SÓ!ˆBà�]Ò"Ù5B�m×)Ñ)¨#Ó.¨qÒ1ÐHZ�Ù Ø#×'Ñ'¨Ô6Ø#×'Ñ'¨°tÔ<Ü�h˜t˜f O°C°5Ð8`ÐaÔciÔjÙ$ÙÙàÐ2Ñ2Ùñ !Ù5B�m×)Ñ)¨#Ó.¨qÒ1È	�Ü�k $ Ð':¸3¸%Ð?mÐnÔpvÔwÙÙðw;	ñ~ &)‘˜SÔ!¨dˆØÐ"LÐLò 
Ø�mÑ#Ò=Ð,=Ð(=ð 	ñ Ü�+˜d˜VÐ#~Ðô  BHô  IÜ! " f¨e°^ÓDˆCÙ˜SÓ!ˆBãØ�N‰N˜3ÔÙ˜SÓ!ˆBØ�[Ò Ø"#�Ø�[Ò Ø 1Ñ$�Üœ˜Ð3°OÐ3DÀCÌÀwÐOÔPØ" aÔ'Üð  Dô  FIô  JØ&*�OÙØÐ,Ò,Üœ˜Ð EÄeÀWÐMÖNØ�}Ò$Üœ˜Ð BÄ5À'ÐJÖKØ�t’Ù# C¨°Ó3�Ù# C¨°Ó3�Üœ˜˜x¨¨B¨Q¨ y°°S¸¸!°W°I¸TÄ%ÀÐIÔJØ˜‘
’Ø�Ò&Üœ˜Ð RÔSXÐRYÐZÖ[äœ˜˜\¨#¯'©'°'¸5Ó*AÐ)BÀ!ÄEÀ7ÐKÖLðgsMôl 09¸Ó/A×g¡V S¨!Á[ÐQRÃ^ÐWfÓEfšSÐgÐÑgÙÜÐRÔTZÔ[Ù¡_ÜˆnœSÐ!6Ó7Ð8Ð8uÐvÔx|Ô}Ü�
‰
�1ŒØ(ò 	}ˆCØ  ™ˆIØ —}‘} V¨XÓ6ˆHÜÐCÀHÀ:ÈTÐRÔTZÔ[Ü'¨	°6¸5À.Ð^_Ô`ˆIÙ˜9Ó%¨Ó-Ø(�˜‘Ø˜‘
�ÜÐ>¸x¸jÈÉMÐZcÐeqÓLrÐKsÐtÔv{Õ|ð	}ô $ GÓ,÷Ù��QØ�5‰5�Œ>˜m¬s°1·5±5¸À"Ó3EÓ/FÑFò 	ðÐñ ò ¢?äŸ™Ÿ™¤R§W¡W§_¡_´XÓ%>ÀÓOˆØˆÜ�7‰7�>‰>˜-Ô(ðÜ˜-¨°wÔ?ð `À1Ø78Ö#_°!¸CÀ1ºHÈQÏ\É\ÐZ]ÕM^ A§G¡G¥IÐ#_�LÐ#_÷`ñ
 Ü�'œ#Ð1Ó2Ð3ð  4Cð  Dô  FLö  MäÐ*¬3Ð/BÓ+CÐ*Dð  EGð  Hô  JNô  Oð !ˆOÜ Ó0ˆMØˆKà*ó ?i�Ø$ S™M�	Ø$Ÿ=™=¨°Ó:�ð !�Ü'*¨1¬c°,Ó.?Ó'@Ð$äÐ3Ó4ó 4�AØ ,¨[¼3¸|Ó;LÑ-LÑ M�IØ 1Ñ$�KØ&/§o¡o°c¸1Ó&=‘O�E˜8Ø Ñ-Ø ð  Ñ/Ø1@ÀÑ1GÑ.˜	¡;ä˜f X JÐ.NÈuÈgÐUXÐYÔ[_Ô`Ü%2×%;Ñ%;Ó%=˜
Ü,6°u¸hÈ
Ó,SÑ)˜ 	Ø! YÒ.±iÜÐ"8¸¸Ð?]Ð ^Ô`cÔdØ6:¸B°Z˜O¨EÑ2Ø)×-Ñ-¨eÔ4Ø$Ü,>¸yÓ,IÑ)˜˜1˜kØ2;¸[Ð1I˜¨Ñ.ÜÐ5°e°WÐ=¼uÔEá$Ø ô ˜&  
Ð*>¸u¸gÀSÐIÌ6ÔRÜ /°	¸6À9ÈkÐghÔ i�IÙ$ YÓ/�Bà˜T’zØ'0˜ ™Ø ™
˜Ü˜e H :Ð-KÈEÈ7ÐRTÑUbÐclÐnzÓU{ÐT|Ð}ô  @Eô  FØ#'˜ÚØ˜Ò.Ø'0˜ ™Ü˜h x jÐ0DÀUÀGÐK^Ð_ÔagÔhØ#'˜ÙØ˜}Ò,Ô0BÀ9Ç=Á=ÐQXÓCYÔ0ZÜ˜f X J¨o¸e¸WÐDlÐmÔouÔvØ%×)Ñ)¨%Ô0Ø'×+Ñ+¨E°4Ô8Ø'×+Ñ+¨EÖ2Ø"Ÿ™ wÔ/°MÄSÈÏÉÐW^Ð`bÓIcÓEdÑ4dÜ˜e H :Ð-FÀuÀgÐMhÐiÔknÖoà'0˜ ™Ü˜e H :¨]¸5¸'ÀÀIÇMÁMÐRYÐ[`ÓDaÐCbÐcÔehÔiÙði4ól  Ü˜( 8 *Ð,^Ð_ÔagÖhð?iôD Ñn wÔnÓnÐÙÜˆgÐ'Ð(Ð(tÐuÔw}Ô~ð *Ð*€IØ/Ð0€OØ	�‰�F˜BÓ	×	#Ñ	# I¨rÓ	2×	6Ñ	6°|ÀRÓ	H€Bä�x Ó)ó =7‰ˆˆCÙ˜ÓˆØÐ(Ò(Ù  U¨BÓ/ˆCÙ  U¨BÓ/ˆCÙ$ S¨.¸"Ó=ˆHØ ŸW™WÐ%5°rÓ:ˆNØ—7‘7˜6“?Ò8 b§f¡f¨V°RÓ&8ˆDÙ15˜+ d V¨1Ñ-¸2ˆIÜ  §¡¨£Ó/ˆMÜ*¨2Ó.Ò`±-ÀÀXÓ2NÐR`Ñ2`ˆHÙØ/‘
ÙØ/‘
à*�
á#¨¨dª
Ù#0°Ð6FÓ#GÐ Ù -¨c°=Ó A�ô Q[Ñ[hÐilÐnyÐ{}Ó[~ô  AEô  QF™ c¨;¸Ó;×?Ñ?ÀÈÔLð  LNˆIÜZdÑerÐsvð  yDð  FHó  fIô  KOô  [P™ s¨K¸Ó<×@Ñ@ÀÈÔVð  VbˆJÙAKÑPY˜8 J <¨q°°Ñ<Ð`bˆJÙ! # t¨RÓ0ˆEà×ÑÐ2°5°'¸ÀcÇgÁgÈfÃoÐEVÐVWÐXaÐWbÐbpÐq{Ðp|Ð|~ð  @C÷  @Gñ  @Gð  HNó  @Oð  Pð  Qô  RØ×ÑÐIÔJØ×ÑÐOÔPØ×ÑÐ\Ô]Ø×ÑÐJÔKØ×ÑÐSÔTÙ‘sØ× Ñ Ð!aÔbØ× Ñ Ð#NÈsÈeÐSTÐUXÐTYÐ!ZÔ[ÙØ× Ñ Ð#\Ô]kÐlxÑ]yÐ\zð  {^ð  "_ô  `Ø× Ñ Ð#>¼~ÈlÑ?[Ð>\Ð!]Ô^Ø× Ñ Ð!VÕWÙØ× Ñ Ð#\Ð]_Ð\`Ð`~ð  @Jð  Kð  "Lô  MØ× Ñ Ð#>¸r¸dÐ!CÔDØ× Ñ Ð!QÔRØ×Ñ˜XÔ&ñ Ø×&Ñ&Ð)<¸U¸GÀ<ÐPS×PWÑPWÐX^ÓP_ÐO`Ð`aÐbkÐalÐlzð  |Fð  {Gð  GIð  JM÷  JQñ  JQð  RXó  JYð  IZð  ([ô  \Ø×&Ñ&Ð'SÔTØ×&Ñ&Ð'YÔZØ×&Ñ&Ð)bÔcqÐr~Ñcð  cAð  Adð  (eô  fØ×&Ñ& xÖ0à×&Ñ&Ð)<¸U¸GÀ<ÐPS×PWÑPWÐX^ÓP_ÐO`Ð`aÐbkÐalÐlzð  |Fð  {Gð  GIð  JM÷  JQñ  JQð  RXó  JYð  IZð  ([ô  \Ø×&Ñ&Ð'SÔTØ×&Ñ&Ð'YÔZÙ™3Ø#×*Ñ*Ð+aÔbØ#×*Ñ*Ð-XÐY\ÐX]Ð]^Ð_bÐ^cÐ+dÔeØ×&Ñ& ~Ö6ð{=7ð@ €NØ€NØó /ˆÙ˜‹^ˆØÐ(Ò(Ø—u‘u˜[¨"Ó-ˆHà×!Ñ!ØŸ™˜f bÓ)ØŸE™E *¨bÓ1Ø"#§%¡%Ð(8¸"Ó"=ØŸ™˜f bÓ)ØŸU™U ;Ó/Ø—u‘u˜U“|ñ#ô ð Ÿ™˜f bÓ)ØŸE™E *¨bÓ1Ø"#§%¡%Ð(8¸"Ó"=ØŸ™˜f bÓ)ØŸU™U ;Ó/Ø—u‘u˜U“|ñˆKð ×Ñ˜xÔ(Ø�|‰|˜HÓ%¨Ò7ÙØ×!Ñ! +Ö.ð3/ð8 #*Ör˜Q©[¸«^ÐCqÒ-q’qÐr€OÐräÓZ wÔZÓZÐÙÜˆdÐ$Ð%Ð%iÐjÔlrÔsä�\‰\‹^×%Ñ%Ó'€Fð Ü˜h›-ØØ"ñ	€Kô 
Ô ¨gÔ	6ð @¸!Ü�	‰	�+˜q¨¸Õ?÷@ð
 Ü˜h›-ØÜ#×,Ñ,Ó.Ø"Ø*ñ€Lô 
Œo˜s¨WÔ	5ð A¸Ü�	‰	�, ¨!¸%Õ@÷Aô 
Œm˜S¨7Ô	3ð -°qØ	�‰�—	‘	˜)Ó$ tÑ+Ô,÷-ô 
Ô! 3°Ô	9ð 3¸QØ	�‰�—	‘	˜/Ó*¨TÑ1Ô2÷3ñ Ü—W‘W—\‘\¤*Ð.?Ó@ˆ
Ü�*˜c¨GÔ4ð 	?¸Ø�G‰G�kÐ"2Ð!3°9Ð=Ô>÷	?ñ Ü—'‘'—,‘,œz¨>Ó:ˆÜ�'˜3¨Ô1ð 	<°QØ�G‰G�k - °	Ð:Ô;÷	<ô Ð
(¬¨Ô/?Ð.@ÄÀÀrÈ%ÈÐPQÔRUÐV^ÓR_ÐQ`Ð`oÐpÔrwÔxÜÐ
+¬D¨6´-°ÄÀÐHÌ%ÔPÙÜÐDÄtÔLÜÐ'Ð(8Ð'9Ð:¼FÔCØÐùòS >ùò Wùò* %a÷añ aûäò 	Úð	üó~ hùó"ùò $`÷`ñ `ûäò Úðüòl s÷@ñ @ú÷Añ Aú÷-ñ -ú÷3ñ 3ú÷	?ñ 	?ú÷
	<ñ 	<úsL  Â<ANÄANÄ-ANÇAN4 ÇAN'Ç	AN"Ç"AN"Ç4AN"ÈAN'ÈAN4 Ú1AOÛAOÞ:AO
à=AO" áAOá	AOáAOá,AOá>AOâ AO" ÁC=AO2ÁDAO2ÁFAO7ÁGAPÁH$APÁI$APÁJ+AP+ÁK=AP8ÁN"AN'ÁN'AN1ÁN,AN4 ÁN4	AOÁO AOÁOAOÁOAOÁOAO" ÁO"	AO/ÁO.AO/ÁO7APÁPAPÁPAPÁPAP(ÁP+AP5ÁP8AQÚ_rail_cache_dataÚ_rail_cache_timer  c                 ó¸   — | rt        | t        «      sy 	 t        j                  | j	                  dd«      j                  d«      d   d«      S # t        $ r Y y w xY w)NÚZr»   r6   r   z%Y-%m-%dT%H:%M:%S)r‡   rŠ   r   Ústrptimer   r|   r1   )r  s    r3   Ú_parse_dazn_dtr±  Ú  sW   € Ùœ
 5¬#Ô.ØðÜ× Ñ  §¡¨s°BÓ!7×!=Ñ!=¸cÓ!BÀ1Ñ!EÐGZÓ[Ð[øÜò Ùðús   •7A Á	AÁAÚobjc                 ó�   — t        | t        «      r(| j                  d«      xs | j                  d«      xs dS t        | xs d«      S )Nré  r�  r»   )r‡   rˆ   r‰   rŠ   )r²  s    r3   Ú_nested_titler´  ã  s;   € Ü�#”tÔØ�w‰w�wÓÒ8 3§7¡7¨6£?Ò8°bÐ8ÜˆsŠy�b‹>ÐrT   Útilec                 óÄ   — dD ][  }| j                  |«      }t        |t        «      r!|j                  d«      rt        |d   «      c S t        |t        «      sŒV|sŒY|c S  y)N)ÚImageÚ	LogoImageÚ	HeroImageÚBackgroundImager  r»   )r‰   r‡   rˆ   rŠ   )rµ  rÍ  Úimgs      r3   Ú_tile_image_idr¼  é  sV   € ØEò ˆØ�h‰h�s‹mˆÜ�cœ4Ô  S§W¡W¨T¤]Ü�s˜4‘y“>Ò!Ü�cœ3Õ¢CØŠJðð rT   c                 ó&  — | j                  d«      t        k(  ry| j                  d«      | j                  d«      t        | j                  d«      «      g}t        | j                  d«      t        «      r| j                  d«      ni }t        |t        «      r|j                  d«      nd }t        |t        «      r1|j                  |j                  d«      |j                  d«      g«       d	d
j                  d„ |D «       «      j                  «       v S )Nr   Tré  ÚLabelÚCompetitionÚLinearScheduleÚNowÚEpisodeTitlera  rZ  c              3   ó:   K  — | ]  }t        |xs d «      –— Œ y­wr\  )rŠ   )r…  r¬   s     r3   r‡  z$_is_radio_tv_tile.<locals>.<genexpr>û  s   è ø€ Ò)F¸1¬#¨aªg°2¯,Ñ)Fùs   ‚)r‰   rb  r´  r‡   rˆ   ÚextendrL  r‰  )rµ  r~   ÚlsÚnowps       r3   Ú_is_radio_tv_tilerÇ  ó  sÐ   € Ø‡x�x�	ÓÔ3Ò3ØØ�X‰X�gÓ §¡¨Ó 1´=ÀÇÁÈ-ÓAXÓ3YÐZ€EÜ'1°$·(±(Ð;KÓ2LÌdÔ'Sˆ�‰Ð"Ô	#ÐY[€BÜ& r¬4Ô0ˆ2�6‰6�%Œ=°d€DÜ�$œÔØ�‰�d—h‘h˜wÓ'¨¯©°.Ó)AÐBÔCØ §¡Ñ)FÀÔ)FÓ!F×!LÑ!LÓ!NÐNÐNrT   c                 óþ  — t        | t        «      sy| j                  d«      xs d}| j                  d«      xs d}|dv s|dv ry|dk7  r|dk7  ry| j                  d«      }|syt        | j                  d	«      xs$ | j                  d
«      xs | j                  d«      «      }t        | j                  d«      «      }|r|s|t	        d¬«      z   }|r|syt        | «      }|j                  dk\  r|syt        j                  t        j                  «      j                  d¬«      }|t	        d¬«      z
  |cxk  r|t	        d¬«      z   k  sy yt        | j                  d«      «      }| j                  d«      xs d}	| j                  d«      xs d|› �}
t        | «      }d}t        | j                  d«      t        «      r| j                  d«      ni }t        |t        «      r|j                  d«      nd}t        |t        «      r|j                  d«      xs d}||
|r
t        › |› �ndd||	|rdnd| j                  d«      xs d| j                  d«      r|
nd||j                  «       |j                  «       dœdœS )uP   Converte un tile Rail/EPG in canale estraibile, o None se non Ã¨ un live attivo.Nrk  r»   ÚDisplayType)ÚCatchUpÚ
HighlightsÚ
Navigation)rÊ  rË  ÚLiver   ÚStartÚEventStartTimeÚMediaStartTimeÚEndrÛ   )Úhoursi4  ©Útzinfor  )Úminutesr¿  r¾  ré  zEvent rÀ  rÁ  rY  r  ÚIsLinear)ÚstartrZ  )rË   rÌ   r•  rÍ   r^  r]  rX  r–  r_  r`  r—  )r‡   rˆ   r‰   r±  r   rÇ  Úyearr   r_   r   Úutcr   r´  r¼  ÚDAZN_IMAGE_URLrP  )rµ  ÚtypÚdisplayr  Ústart_dtÚend_dtrž  Únow_utcr^  r]  ÚtitleÚimg_idr`  rÅ  rÆ  s                  r3   Ú_tile_to_channelrâ  þ  sV  € ä�dœDÔ!ØØ
�(‰(�6Ó
Ò
 ˜b€CØ�h‰h�}Ó%Ò+¨€GØ
Ð5Ñ5¸ÐD]Ñ9]ØØ
ˆf‚}˜ FÒ*Øà�x‰x˜	Ó"€HÙØä˜dŸh™h wÓ/Òk°4·8±8Ð<LÓ3MÒkÐQU×QYÑQYÐZjÓQkÓl€HÜ˜DŸH™H U›OÓ,€FÙ™ØœI¨AÔ.Ñ.ˆÙ™6Øä  Ó&€Hà‡{�{�dÒ¡8Øä�l‰lœ8Ÿ<™<Ó(×0Ñ0¸Ð0Ó=€GØœ	¨"Ô-Ñ-°'Ô]¸fÄyÐY[ÔG\Ñ>\Ò]Øð ^Øä §¡¨Ó 7Ó8€KØ�H‰H�WÓÒ# €EØ�H‰H�WÓÒ4 6¨(¨Ð!4€EÜ˜DÓ!€FØ€KÜ'1°$·(±(Ð;KÓ2LÌdÔ'Sˆ�‰Ð"Ô	#ÐY[€BÜ& r¬4Ô0ˆ2�6‰6�%Œ=°d€DÜ�$œÔØ—h‘h˜wÓ'Ò-¨2ˆð ØÙ/5”>Ð" 6 (Ñ+¸2ØØ"ØÙ$,‘.°"Ø—H‘H˜YÓ'Ò-¨2Ø#'§8¡8¨JÔ#7™%¸RØ"à×'Ñ'Ó)Ø×#Ñ#Ó%ñ
ñð rT   Útilesc                 óÄ   — g }t        «       }t        | t        «      s|S | D ]<  }t        |«      }|r|d   |v rŒ|j	                  |d   «       |j                  |«       Œ> |S )NrË   )r7  r‡   r¤   râ  r9  r“   )rã  ÚoutÚseenrµ  rr  s        r3   Ú_tiles_to_channelsrç  9  si   € Ø "€CÜ‹5€DÜ�eœTÔ"Øˆ
Øò ˆÜ˜dÓ#ˆÙ�R˜‘X Ñ%ØØ�‰��D‘ÔØ�
‰
�2�ðð €JrT   rA  c                 ó  — t         j                  |«      }t        j                  |d«      }|rt        j                  «       |z
  dk  r|S t        j                  «       }	 t        j                  | t        |d¬«      }|j                  s!t        d|› d|j                  › �t        «       y |j                  «       }|t         |<   t        j                  «       t        |<   |S # t        $ r }t        d|› d|› �t        «       Y d }~y d }~ww xY w)Nr   r  r  )r×   rl   rN   zErrore Rail Router (z): HTTP z): )r¬  r‰   r­  r¥   rå   r—   r   ÚRAIL_HEADERSr§   r:   r©   rI   r¨   r1   )r)  rA  rB  Ú	cached_atr  r�   r*  rJ   s           r3   Ú_fetch_rail_jsonrë  G  sã   € Ü×!Ñ! )Ó,€FÜ ×$Ñ$ Y°Ó2€IÙ”4—9‘9“; Ñ*¨cÒ1ØˆÜ×'Ñ'Ó)€JðÜ�L‰L˜¤l¸JÐPRÔSˆØ�tŠtÜÐ& y k°¸!¿-¹-¸ÐIÌ3ÔOØØ�v‰v‹xˆØ&*Ô˜Ñ#Ü&*§i¡i£kÔ˜Ñ#ØˆøÜò ÜÐ" 9 +¨S°°Ð4´cÔ:Üûðús   ÁA	C Â)5C Ã	DÃ(DÄDc            
      ó   — t        t        d«      } t        t        d«      }| €|€y| xs i j                  d«      xs g }|xs i j                  d«      xs g }t	        |«      }|D �ch c]  }|d   ’Œ	 }}d}t	        |«      D ]4  }|d   |v rŒ|j                  |d   «       |j                  |«       |dz  }Œ6 t        dt        |«      › d	t        |«      › d
t        |«      › d�|rd|› d�ndz   t        «       |S c c}w )zdDiscovery primaria: LiveAndNextNew (eventi) + Livetvschedule (lineari). None se entrambe falliscono.ÚLiveAndNextNewÚLivetvscheduleNÚTilesrË   r   ry   u    ðŸ”Ž Rail Check: LiveAndNextNew z tile, Livetvschedule z tile. Trovati z eventi/canali LIVE attiviz (+z da palinsesto lineare).r6   )
rë  ÚRAIL_LIVE_URLÚRAIL_LINEAR_URLr‰   rç  r9  r“   r:   r}   r(  )Ú	live_dataÚlinear_dataÚ
live_tilesÚlinear_tilesrÙ   rr  ræ  Úextras           r3   Úfetch_live_events_from_railsr÷  [  s1  € ä ¤Ð0@ÓA€IÜ"¤?Ð4DÓE€KØÐ˜[Ð0Øà’/˜r×&Ñ& wÓ/Ò5°2€JØÒ% 2×*Ñ*¨7Ó3Ò9°r€LÜ! *Ó-€HØ'Ö(˜ˆBˆt‹HÐ(€DÐ(Ø€EÜ  Ó.ò ˆØˆd‰8�tÑØØ�‰��D‘ÔØ�‰˜ÔØ�‰
‰ðô Ø
*¬3¨z«?Ð*;ð <Ü˜lÓ+Ð,ð -Ü�x“=�/Ð!;ð	=ñ 5:ˆS��Ð/Ñ0¸sñ	Dô 	ôð €Oùò! )s   Á'C;c                  ó"  — d} t        j                  t        j                  «      j	                  d¬«      }|t        d¬«      z
  j                  d«      }|t        d¬«      z   j                  d«      }	 t        j                  «       j                  «       j                  «       j                  «       }t        t        |dz  «      «      }d	d	d
|d||dœ}t        r%t        j                  «       t        z
  dk  rt        }n�t         j#                  «       }	 t%        j&                  | ||d¬«      }	|	j(                  st+        d|	j,                  › �t.        «       g S |	j1                  «       }|at        j                  «       at+        dt2        «       |j'                  dg «      }t5        |«      }t+        dt7        |«      › dt7        |«      › d�t8        «       |S # t        $ r d}Y �Œw xY w# t        $ r}
t+        d|
› �t.        «       g cY d}
~
S d}
~
ww xY w)z1Fallback: EPG ufficiale DAZN (epgWithDatesRange).z8https://epg.discovery.indazn.com/eu/v5/epgWithDatesRangeNrÓ  ry   )Údaysz%Y-%m-%drÿ   Ú120r½   r}  rÜ   )rE  ÚlanguageCodeÚ
openBrowseÚtimeZoneOffsetÚbrandÚ	startDateÚendDater  r  )r  rl   rN   zErrore download EPG DAZN: HTTP uH   ðŸ“¥ EPG scaricato con successo dal server DAZN (aggiornato ogni 5 min).zErrore eccezione EPG: rï  u   ðŸ”Ž EPG Check: z" programmi in palinsesto. Trovati z eventi speciali LIVE attivi.)r   r_   r   rÙ  r   r   r`   Ú
astimezoneÚ	utcoffsetÚtotal_secondsrŠ   r·   r1   Ú_epg_cache_datar¥   Ú_epg_cache_timerå   r—   r   r‰   r§   r:   r©   rI   r¨   r;   rç  r}   r(  )r)  rß  Ústart_date_strÚend_date_strÚ
offset_secÚ	tz_offsetr  r*  r  r�   rJ   rã  Úlive_channelss                r3   Úfetch_live_events_from_epgr  x  sÒ  € ð E€CÜ�l‰lœ8Ÿ<™<Ó(×0Ñ0¸Ð0Ó=€Gà¤	¨qÔ 1Ñ1×;Ñ;¸JÓG€NØœi¨QÔ/Ñ/×9Ñ9¸*ÓE€LðÜ—\‘\“^×.Ñ.Ó0×:Ñ:Ó<×JÑJÓLˆ
Üœ˜J¨"Ñ,Ó-Ó.ˆ	ð
 ØØØ#ØØ#Øñ€Fõ œDŸI™I›K¬/Ñ9¸SÒ@Ü‰ä"×+Ñ+Ó-ˆ
ð	Ü—‘˜S¨¸ÈRÔPˆAØ—4’4ÜÐ5°a·m±m°_ÐEÄsÔKØ�	Ø—6‘6“8ˆDØ"ˆOÜ"Ÿi™i›kˆOÜÐZÔ\aÔbð
 �H‰H�W˜bÓ!€EÜ& uÓ-€MÜÐ
œ3˜u›:˜,Ð&HÌÈ]ÓI[ÐH\Ð\yÐzÔ|ô  AØÐøôC ò Ø‹	ðûô4 ò 	ÜÐ(¨¨Ð,¬cÔ2Ø�Iûð	ús8   Á3AG ÄAG& Å6G& ÇG#Ç"G#Ç&	HÇ/H	ÈHÈ	Hc                  óR   — t        «       } | �| S t        dt        «       t        «       S )zREventi/canali live attivi: Rail Router principale, EPG solo se le rail falliscono.uF   âš ï¸� Rail Router non disponibile, fallback su EPG epgWithDatesRange.)r÷  r:   r@   r  )Úrail_eventss    r3   rf  rf  ¨  s+   € ä.Ó0€KØÐØÐÜÐPÔRXÔYÜ%Ó'Ð'rT   Úinterval_hoursc                 ó~  — t        «        t        «       }t        j                  |j	                  di «      j	                  d«      ¬«       |j	                  di «      j	                  d| «      }|dz  }d}|j	                  di «      j	                  dg «      j                  «       }t        «       }d	}	d
}
t        d¬«       	 	 t        j                  «       }|rt        «       }|D �ch c]  }|d   ’Œ	 }}ng }t        «       }||k7  rÛt        |«      t        |«      kD  r*t        dt        |«      t        |«      z
  › d�t        «       n@t        |«      t        |«      k  r)t        dt        |«      t        |«      z
  › d�t        «       |j                  «       }|D �ch c]  }|j	                  d«      ’Œ }}|D ]  }|d   |vsŒ|j                  |«       Œ ||d   d<   |}d
}
||	z
  |k\  r|	dkD  rt        d|› d�t        «       d
}
|
r„t!        dt"        › d› t$        › �«       t        dt        «       t!        t"        › d› t$        › �«       |d   d   }t'        ||d¬«      }t        j                  «       }	d}
t        d|› d�t(        «       nt        d|› d�t        «       t+        d«      st        d¬«       t        j,                  |«       �Œc c}w c c}w # t.        $ r' t!        dt0        › dt$        › d�«       t3        «        Y y"t4        $ r2}t        d |› �t6        «       t        j,                  d!«       Y d"}~Œpd"}~ww xY w)#zSEsegue l'estrazione all'avvio e ripete periodicamente monitorando Rail/EPG e canalirÜ   rÖ   rR  rÝ   rÚ   i  rÿ   rÙ   g        Téû   )r(   rË   u   ðŸš¨ Trovati z# NUOVI EVENTI LIVE nella discovery!u   â„¹ï¸�  z eventi live sono terminati.r   u   â�° Intervallo programmato (z(h) trascorso. Rinnovo generale canali...rd   rc   u;   ðŸ”„ CICLO DI ESTRAZIONE CHIAVI & MANIFEST (Live + Lineari)F)r?  rÙ   rP  uP   âœ¨ Estrazione completata! Monitoraggio Rail/EPG attivo (prossimo controllo tra zs).uQ   ðŸ’¤ Nessun nuovo evento live nella discovery. In attesa (prossimo controllo tra zs)...z

u   ðŸ›‘ Bot arrestato dall'utente.zErrore durante il ciclo: r£   N)rg   rè   rå   ro   r‰   re  r7  rK   r¥   rf  r}   r:   ÚMAGENTAr(  r“   rA   r^   re   ra   r«  r;   r4   rO  ÚKeyboardInterruptr@   rU   r1   rI   )r  r?  rP  r>  Úrefresh_hoursÚrefresh_secondsÚcheck_intervalrp  Úlast_known_live_idsÚlast_full_extraction_timeÚforce_extractionr_   rq  rt  Úcurrent_live_idsÚnew_channel_listrr  rs  Útarget_channelsr§  rJ   s                        r3   Úrun_auto_loopr  ±  sV  € ä„NÜ‹]€FÜ×Ñ F§J¡J¨v°rÓ$:×$>Ñ$>¸wÓ$GÐÔHð —J‘J˜v rÓ*×.Ñ.Ð/GÈÓX€MØ# dÑ*€Oð €Nð —J‘J˜v rÓ*×.Ñ.¨z¸2Ó>×CÑCÓE€MÜ›%ÐØ #ÐØÐô ˜dÕ#à
ðC	Ü—)‘)“+ˆCñ Ü/Ó1�Ø7BÖ#C° B t£HÐ#CÐ Ñ#Cà �Ü#&£5Ð ð  Ð#6Ò6ÜÐ'Ó(¬3Ð/BÓ+CÒCÜ˜-¬Ð,<Ó(=ÄÐDWÓ@XÑ(XÐ'YÐY|Ð}ô  @Gõ  HÜÐ)Ó*¬SÐ1DÓ-EÒEÜ˜(¤3Ð':Ó#;¼cÐBRÓ>SÑ#SÐ"TÐTpÐqÔsvÔwð $1×#5Ñ#5Ó#7Ð Ø3@ÖA¨R˜BŸF™F 4�LÐA�ÐAØ%ò 4�BØ˜$‘x xÒ/Ø(×/Ñ/°Õ3ð4ð .>��v‘˜zÑ*Ø&6Ð#Ø#'Ð ð Ð/Ñ/°OÒCØ,¨qÒ0ÜÐ6°}°oÐEmÐnÔptÔuØ#'Ð ñ  Ü˜œ4˜&  ¬U¨GÐ4Ô5ÜÐQÔSWÔXÜœ˜˜z˜l¬5¨'Ð2Ô3à"(¨¡.°Ñ"<�Ü2¸YÐQ`ÐqvÔw�Ü,0¯I©I«KÐ)Ø#(Ð ÜÐfÐguÐfvÐvyÐzô  }Bõ  CäÐgÐhvÐgwÐw|Ð}ô  @Cô  Dô   Ô%Ü$¨$Õ/ô �J‰J�~Ô&ñy ùò $Dùò BøôR !ò 	Ü�Dœ˜Ð ?Ä¸wÀbÐIÔJÜŒLÙÜò 	ÜÐ+¨A¨3Ð/´Ô5Ü�J‰J�r�N‰Nûð	úsD   Â?$K Ã#K	Ã/B)K ÆKÆ0K Æ?DK Ë	
K Ë-L<ÌL<Ì
(L7Ì7L<c                  óº  — t        j                  d¬«      } | j                  dddddd¬	«       | j                  d
dd¬«       | j                  dt        d d¬«       | j                  dt        d d¬«       | j                  dt        d d¬«       | j                  ddd¬«       | j                  ddd¬«       | j                  ddd¬«       | j	                  «       }|j
                  rMt        j                  j                  t        «      r)t        j                  t        «       t        dt        «       y |j                  r±t        «       }t        j!                  |j#                  di «      j#                  d«      ¬«       t        dt        j%                  «       › d�t&        «       t        j)                  «       }|D ]2  \  }}}}|rt        nt*        }t        d |› d!|› |› t,        › d"|› d#�	«       Œ4 y |j.                  s|j0                  �rt3        «        t        «       }t5        ||j6                  «      }	t9        |	«      \  }
}
}|j.                  xs d$d%|j.                  xs d&› �|j0                  xs d'd(œ}|j.                  r@t;        «       D ]3  }|j#                  d)«      |j.                  k(  sŒ"|j=                  |«        n t?        |«      rtA        |«      }ntC        |||	|«      }tE        d*tG        jH                  |d+d,¬-«      z   «       y |jJ                   }|jL                  r"t3        «        tO        |j6                  |¬.«       y tQ        |j6                  |¬.«       y )/Nz*DAZN - DRM Widevine Stream & Key Extractor)Údescriptionz-cz--oncez
--channelsÚonceÚ
store_truezEsegui una sola volta ed esci)ÚdestÚactionÚhelpz--loopz2Esegui in loop continuo con intervallo programmato)r"  r#  z--tokenz(Specifica o aggiorna il JWT Bearer Token)r&  rW  r#  z--assetz!Estrai solo uno specifico AssetIdz--urlz-Usa uno specifico URL Playback personalizzatoz--test-proxyz'Testa tutti i proxy configurati ed esciz--clear-cachez.Cancella la cache delle chiavi pssh_cache.jsonz--no-eventszHNon includere eventi live dalla discovery Rail/EPG (solo canali statici)z-Cache pssh_cache.json eliminata con successo!rÜ   rÖ   rR  zTest di z proxy in corso...z  z -> rd  zms)Úcustom_assetzAsset ÚCustomr»   rÊ   rË   rd   rM   Frà   )r?  rP  ))ÚargparseÚArgumentParserÚadd_argumentrŠ   Ú
parse_argsÚclear_cacher<   r=   r>   rî   Úremover:   r;   Ú
test_proxyrè   rå   ro   r‰   rœ   rA   r°   rI   ra   r+  r)  rg   ra  rÎ   r  rf  rê   rd  r¶  rO  r^   r¨   ÚdumpsÚ	no_eventsr  r«  r  )ÚparserÚargsrç   rª   r¬   r§   Úip_msgr¯   ÚcolrÎ   rT  r  r�  rt  r€  rP  s                   r3   Úmainr3  	  sé  € Ü×$Ñ$Ð1]Ô^€FØ
×Ñ˜˜h¨¸6È,Ð]|ÐÔ}Ø
×Ñ˜¨Ð<pÐÔqØ
×Ñ˜	¬°TÐ@jÐÔkØ
×Ñ˜	¬°TÐ@cÐÔdØ
×Ñ˜¤c°4Ð>mÐÔnØ
×Ñ˜¨|ÐBkÐÔlØ
×Ñ˜°ÐCsÐÔtØ
×Ñ˜¨lð  BLÐô  MØ×ÑÓ€Dà×ÒÜ�7‰7�>‰>œ*Ô%Ü�I‰I”jÔ!ÜÐ?ÄÔGØà‡‚Ü‹mˆÜ×Ñ¨¯©°¸Ó(;×(?Ñ(?ÀÓ(HÐÔIÜˆh”}×*Ñ*Ó,Ð-Ð-?Ð@Ä$ÔGÜ×(Ñ(Ó*ˆØ")ò 	<ÑˆAˆr�6˜3Ù•%¤3ˆCÜ�"�Q�C�t˜C˜5  ¬¨¨r°#°°cÐ:Õ;ð	<ð 	à‡z‚z�T—X“XÜŒÜ‹mˆÜ˜#˜tŸz™zÓ*ˆÜ1°%Ó8Ñˆˆ1ˆnà—*‘*Ò. Ø˜TŸZ™ZÒ3¨8Ð4Ð5Ø ŸH™HšN¨ñ
ˆ	ð
 �:Š:Ü'Ó)ò �Ø—6‘6˜$“< 4§:¡:Ó-Ø×$Ñ$ RÔ(Ùðô ˜yÔ)Ü& yÓ1‰Cä! )¨S°%¸ÓHˆCÜˆd”T—Z‘Z ¨A¸EÔBÑBÔCØàŸ™Ð'€Nà‡y‚yÜŒÜ t§z¡zÀ.ÕQØô ˜DŸJ™J°~ÖFrT   Ú__main__)z	127.0.0.1)r  )r*   Nr±   )NNN)r€  )NNT)rÛ   NT)—rµ   r<   rD   Úrer¨   r¥   rõ   r7  r!  r&  Úxml.etree.ElementTreeÚetreeÚElementTreerÐ  r   r   r   Útypingr   r   r   r	   r
   Úurllib.parser   r   r   r   r,   rB   rv  ÚatexitÚ	curl_cffir   ri  rh  ÚImportErrorÚ
pywideviner   r   r   rë  r‹  ÚreconfigureÚstderrr1   r;   r@   rI   rA   re   r  ro  r(  ra   r=   rM  ÚabspathrN  rF   rL  rã   rK  rî   r6  r¶   rk  rl  rm  rn  r?   r7  r   Ú__annotations__rb  rˆ  r‰  rŠ  r‹  rð  rñ  ré  rÚ  rG   r·   rŠ   r¸   r4   rK   rU   rá  ÚDEFAULT_REFRESH_SECONDSr»  rÚ  Úfromhexr¹  rW   r:   rg   ri   rå   rè   rì   rð   rò   rü   r  ÚrandomÚstringr-  r=  ra  rl  r%  ro  rp  rq  rŽ  ry  r�  r³  r¼  rè  r  r  rV  rd  r�  r¶  rÕ  r×  rO  r«  r  r  r¬  r­  r¹   r±  r´  r¼  rÇ  râ  rç  rë  r÷  r  rf  r  r3  r²   rS   rT   r3   ú<module>rG     sœ
  ðòó 
Û 
Û 	Û Û Û Û Û Û ß "Ð "ß 2Ñ 2ß 3Õ 3ß BÓ BÛ Û Û Û ðÝ3Ø€Mó
 ß (Ñ (ð ‡<�<�7ÒðØ�
‰
×Ñ¨¸	ÐÔBØ�
‰
×Ñ¨¸	ÐÔBð
 €Ø
€Ø
€Ø
€Ø
€Ø
€Ø
€Ø
€Ø
€ð —7‘7—?‘? 2§7¡7§?¡?°8Ó#<Ó=€
Ø—7‘7—<‘< 
Ð,>Ó?€Ø—7‘7—<‘< 
Ð,>Ó?€
Ø—7‘7—<‘< 
Ð,=Ó>€
Ø—7‘7—<‘< 
¨IÓ6€Ø—7‘7—<‘< 
¨KÓ8€
Ø—7‘7—<‘< 
Ð,@ÓAÐ Ø—7‘7—<‘< 
Ð,BÓC€Ø—7‘7—<‘< 
Ð,?Ó@€Ø—g‘g—l‘l :Ð/HÓIÐ Ø—7‘7—<‘< 
¨OÓ<Ð ñ !$£Ð ˜#Ó %ð 5Ð Ø>Ð ð$ð ð oÐ à&Ø1Ø)Ø+ð	=ñ	€ð/ð ðLð ð
 2Ø$Ø&ð	=ñ€ð J€ð €ñ�sð  #ð ¸ó ñ@˜sð @¨dó @ó(ð €‡��
Ô ð #Ð ð <Ð Ø Ÿ=™=Ð)KÓLÐ à€
ˆD��c�‰NÓ ð  %ñ VˆSð V˜ð V¨ó Vó
÷[ñ [ñz ˜ZÓ(€ð=�T˜#˜s˜(‘^ó =ð~
4�T˜#˜s˜(‘^ð 
4¨ó 
4óó?ð
˜cð  d¨3°¨8¡nó ð	(˜cð 	( e¨D°#°t¸CÀ¸H±~Ð,EÑ&Fó 	(ó Û ñJ�cð J Sð J°h¸tÀCÈÀH¹~Ñ6Nð JÐZ_Ð`cÐemÐnqÑerÐ`rÑZsó JñX˜cð ¨H°S©Mð ÈXÐVYÉ]ð ÐowÐx|ð  ~Að  CFð  ~Fñ  yGñ  pHð ð  T\ð  ]`ñ  Taó ñ:j�d˜3 ˜8‘nð j°¸#±ð jÈ#ó jð^ AÐ ñ˜x¨¨S°#¨X©Ñ7ð À3ó ñ& x°°S¸#°X±Ñ'?ð &È3ó &ð$ €ˆ(�3‰-Ó Ø#€ˆh�t‰nÓ #Ø€ð�8˜C‘=ó ð˜ó ñ62�sð 2 ð 2¨t°C¸°H©~ð 2ÀXÈeÁ_ð 2Ð`eÐfiÐkpÐfpÑ`qó 2ðj	˜sð 	 tó 	ðC# sð C#¨u°X¸c±]ÀHÈSÁMÐ5QÑ/Ró C#ðJ1N  S¨# X¡ð 1N¸¸SÀ#¸X¹ð 1NÐSVð 1NÐ[^ó 1Nðf/¨ð /°Cð /ÀÀcÈ3ÀhÁð /Ð]eÐfjÐknÐpsÐksÑftÑ]uð /Ðzð  AIð  JNð  ORð  TWð  OWñ  JXñ  AYð  [cð  dgñ  [hð  Ahñ  {ió /ñbWC˜3ð WC¨#ð WC°sð WCÀDÈÈcÈÁNð WCÐdhÐilÐnqÐiqÑdrð WCð  CKð  LOñ  CPð WCð  emð  nrð  svð  x{ð  s{ñ  n|ñ  e}ð WCð  MUð  VYñ  MZð WCð  fkð  ltð  uxñ  lyð  {Cð  DGñ  {Hð  JRð  SVñ  JWð  lWñ  fXó WCðt&  c¨3 h¡ð &°Dó &ð2" E¨(°3©-¸À$ÀsÈCÀxÁ.Ñ9QÐS[Ð\_ÑS`Ð*`Ñ$aó 2"ðj2 $ s¨C x¡.ð 2°T¸#¸s¸(±^ó 2ðj ¨#¡ð °3ó ð,C˜H S™Mð C¨dó Cñ
J˜T # s (™^ð J°T¸#¸s¸(±^ð JÈCð JÐaeÐfiÐknÐfnÑaoð Jð  Bð Jð  KOð  PSð  UXð  PXñ  KYó JñZ
{ H¨S¡Mð {ÀHÈTÐRVÐWZÐ\_ÐW_ÑR`ÑMaÑDbð {Ð{ð {ð  LPð  QTð  VYð  QYñ  LZó {ð| €Ø€Ø#%Ð �$�s˜C�x‘.Ó %Ø%'Ð �$�s˜E�zÑ"Ó 'ð˜#ð  (¨8Ñ"4ó ð�sð ˜só ð˜˜c 3˜h™ð ¨Có ðO˜D  c ™Nð O¨tó Oð8˜4  S ™>ð 8¨h°t¸CÀ¸H±~Ñ.Fó 8ðv˜cð  d¨4°°S°©>Ñ&:ó ð˜#ð ¨#ð °(¸4ÀÀSÀ¹>Ñ2Jó ð( h¨t°D¸¸c¸±NÑ/CÑ&Dó ð:- D¨¨c°3¨h©Ñ$8ó -ð`(˜4  S¨# X¡Ñ/ó (ñZ #ð Z°h¸s±mð ZÐ\`ð ZÐlpó Zòz:Gðx ˆzÒÙ…Fð øðWI ò Û$ØƒMðûð ò Úðús$   Á&V5 Â:W Ö5W×W×W×W