
    jh                     p    S SK r S SKrS SKrS SKrS SKrS SKrS SKrS SKr\R                  r	 " S S5      r
g)    Nc                       \ rS rSrS rS rS rSS jrS rS r	SS	 jr
S
 rS r  SS jrS rS rS rS rS rS rS rS rS rSS jrSS jrSS jrS rS rS rSrg) parser   c                 D    / SS0S.U l         0 S0 0SS.U l        SU l        g )NcurrentPager   items
paginationartvideo)paramsmetadatatypengplayer_2_4)resulttemplateplayerIdselfs    Q/var/www/repoKodi/addons/script.module.libzdf.bastelpingu/lib/libzdfjsonparser.py__init__parser.__init__   s,    -):;$+E":gF$- $-    c                    U R                   nU(       a  SU;   a  UR                  SS5      n[        R                  " USS9nUR	                  5         UR                  5       nUR                  S5      nU(       d  [        S5      e[        R                  " [        R                  " S5      5        [        R                  " [        R                  " S5      U5        U$ )	Nzzdf-cdn.live.cellular.dez https://zdf-cdn.live.cellular.dezhttps://zdf-prod-futura.zdf.de   )timeouttokenz*ZDF token response did not contain a token )tokenUrlreplacerequestsgetraise_for_statusjsonRuntimeErrorlm4utilsf_mkdirpathUserdataf_write)r   r   rdatar   s        r   _getTokenFromUrlparser._getTokenFromUrl.   s     ]](,8&$8 ll8R(!	
$
((7
%		B	CC
8((,-
8((159	,r   c                 b   U R                   U R                  R                  S5      S   S.n[        R                  " U R                   S3US9nUR
                  S   n[        R                  " S[        R                  5      R                  U5      S   n[        R                  " S	[        R                  5      R                  U5      S   n[        R                  " S
[        R                  5      R                  U5      S   nU R                   S3nSnSR                  S [        S5       5       5      n	[        R                  " U R                   SU SU R                   3R!                  S5      5      R#                  5       n
[        R                  " SU 3R!                  S5      5      R#                  5       n[        R                  " U
 SU SU SU	 SU SU 3R!                  S5      5      R#                  5       nSU R                   SU SU SU SU SU SU SU	 S3US'   [        R                  " U R                   S3US9R%                  5       nUS   n[&        R(                  " [&        R*                  " S5      5        [&        R,                  " [&        R*                  " S5      U5        U$ )N/   )z
user-agentHostz/oauth/getApiTokenheaderszWWW-AuthenticatezDigest realm="(.+?)"r   zqop="(.+?)"znonce="(.+?)"00000002r   c              3      #    U  H:  n[         R                  " [        R                  [        R                  -   5      v   M<     g 7fN)randomchoicestringascii_lowercasedigits).0_s     r   	<genexpr>*parser._getTokenFromAPI.<locals>.<genexpr>K   s.     `V_QRv}}V%;%;fmm%KLLV_s   AA   :zutf-8zGET:zDigest username="z
", realm="z
", nonce="z", uri="z", response="z", opaque="null", qop=z, nc=z
, cnonce=""authorizationapiTokenr   )	userAgentbaseApisplitr!   r"   r3   recompileDOTALLfindalljoinrangehashlibmd5API_CLIENT_IDAPI_CLIENT_KEYencode	hexdigestr$   r&   r'   r(   r)   )r   r3   r*   wwwAuthrealmqopnonceuri
nonceCountcnonceHA1HA2responsejr   s                  r   _getTokenFromAPIparser._getTokenFromAPIA   s   >>1C1CC1H1KL'lldll^#56wG!II()'zz0"))<DDWMaP%zz-3;;GDQG#zz/2995==gFqI%,,12#*ww`V[\^V_``&{{d0015'4;N;N:OPWWX_`akkm#{{T#<..w78BBD#{{cU!E7!J<q#auMTTU\]^hhj(01C1C0DJugU_`e_ffnorns  tA  BJ  AK  Ka  be  af  fk  lv  kw  wA  BH  AI  IJ  K'/lldll^#56wGLLN!
J-%
8((,-
8((159	,r   c                 j   [         R                  " [         R                  " S5      5      nUS:X  a  U R                  5       nSU 3SS.n[        R
                  " XS9nUR                  S;   d  UR                  S:X  a,  U R                  5       nSU 3SS.n[        R
                  " XS9nUR                  $ )Nr   r   Bearer zgzip, deflate)Api-AuthzAccept-Encodingr2   i  i  )r&   f_openr(   	_getTokenr!   r"   status_codetext)r   urlMenur   headerr]   s         r   _getUparser._getUZ   s    
//(//8
9%
b[>>5!%)oN&\\#-( Z'8==B+>>>5"5'*O6ll3.8	r   c                 d    U R                   (       a  U R                  5       $ U R                  5       $ r6   )r   r,   r_   r   s    r   rf   parser._getTokeni   s'    	]]



!!



!!r   c                 
   U R                  US5      n[        R                  " U5      nUS   S:X  a  U R                  U5      $ US   S:X  a  U R	                  U5      $ US   S;   a  U R                  U5      $ US   S;   a  U R                  U5      $ US   S:X  a  U R                  U5      $ US   S:X  a  U R                  U5      $ UR                  SS	5      n[        S
[        U5      -   5        [        S[        U5      -   5      e)NTprofilez http://zdf.de/rels/search/resultz%http://zdf.de/rels/search/result-page)z%http://zdf.de/rels/content/page-indexz/http://zdf.de/rels/content/page-index-video-app)z)http://zdf.de/rels/content/content-filterz@http://zdf.de/rels/content/content-filter-page-video_episode_vodz9http://zdf.de/rels/content/special-page-live-tv-video-appz-http://zdf.de/rels/cmdm/resultpage-broadcastsz	<missing>zUnknown profile: zUnknown ZDF profile: )rl   r$   loads_parseSearch_parseSearchPage_parsePageIndex2_parseContentFilter_parseTV_parseBroadcastr"   logstrr%   )r   ri   r]   r^   rq   s        r   	parsePageparser.parsePageo   s   ZZD!(
jj!|99


A
|>>



""|rr



""|  H  H

"
"1
%% 	|RR
--
|FF


q
!!UU9k*7S\)*	c'l*
 r   Nc                 T    U R                   S-   S-   S-   S-   nU R                  U5      $ )Nz/search/documentsz?q=%2Az&contentTypes=brand
&limit=100)rF   r{   )r   rX   ri   s      r   getAZparser.getAZ   sC    	

 !
! 	
 	 NN3r   c                    [        U[        5      (       a/  UR                  S5      (       d  UR                  S5      (       a  U$ g [        U[        5      (       ae  / SQnU H(  nX1;   d  M
  U R	                  X   5      nU(       d  M&  Us  $    UR                  5        H  nU R	                  U5      nU(       d  M  Us  $    [        U[        5      (       a%  U H  nU R	                  U5      nU(       d  M  Us  $    g )Nzhttp://zhttps://)	1920x10801280x720768x432384x216ri   src)
isinstancerz   
startswithdict_firstImageUrlvalueslist)r   obj	preferredkeyr   values         r   r   parser._firstImageUrl   s    3NN9%%
)C)CZ3 S
--ch7F"]	  jjlU))%0V #
 	3U))%0V 
 r   c                    UR                  S5      =(       d    0 nUR                  S5      =(       d    0 nUR                  S5      =(       d    0 nUR                  S5      =(       db    UR                  S5      =(       dJ    UR                  S5      =(       d2    UR                  S5      =(       d    UR                  S5      =(       d    SUS	   S
'   UR                  S5      =(       dJ    UR                  S5      =(       d2    UR                  S5      =(       d    UR                  S5      =(       d    SUS	   S'   S nS H&  nXr;   d  M
  U R                  X'   5      nU(       d  M&    O   U(       a
  XaS	   S   S'   UR                  S5      n[        U[        5      (       a7  UR                  S5      =(       d    UR                  S5      n	U	(       a  XS	   S'   [        U[        5      (       a7  UR                  S5      =(       d    UR                  S5      n
U
(       a  XS	   S'   UR                  S5      nU(       a
  SU0US	   S'   UR                  S5      b  UR                  S5      US	   S'   UR                  S5      b  UR                  S5      US	   S'   UR                  S 5      =(       d    UR                  S!5      nU(       a  XS	   S!'   g g )"NteaserstructuralMetadatacontentOwnertiteltitleteaserHeadlineheadlineZDFr   namebeschreibung
teasertext	shortTextdescriptionr   plot)
teaserBildr   imagelogor   thumbgenreMetaCollectiontransformedValuegenredetailsstudioeditorialDateISO8601airedseasonNumberseasonepisodeNumberepisodelengthduration)r"   r   r   r   )r   dtargetr   
structuralownerr   r   r   
genre_namer   editorial_dater   s                r   _setFuturaMetadataparser._setFuturaMetadata   s   ::h%2&zz./52*
**^
$
*% 
::g jjjj jj!" jj	
  J- 
::n 	jj	jj	 jj	 	 J- %c 
m[E u
 #(Z=  ...
/%t	II ! yy 
 'jM' t	IIi yy 

 $jM( ::o..~1Z=
 ZZ+#ZZ1Z= ZZ ,$jj1Z= 
::h jj 	
 %Z= r   c                 T   [         R                  " U R                  5      nU R                  UU5        UR	                  S5      n[        U5      nU(       d   UR	                  S5      S:H  =(       d    US;   nU(       a]  U=(       d)    UR	                  S5      =(       d    UR	                  S5      nU(       d  g SUS   S	'   XtS   S'   US
:X  a  S
US'   U$ SUS'   U$ U=(       d)    UR	                  S5      =(       d    UR	                  S5      nU(       d  g SUS   S	'   XtS   S'   SUS'   U$ )NcontentTyper   r   r   clipr   id	canonicallibZdfPlayByIdr   moder   libZdfListFuturaDocumentdir)copydeepcopyr   r   r"   bool)r   r   playIddirectoryIdr   r   isVideoidents           r   _futuraItemparser._futuraItem  sV    
t}}	%Q		
	
 ::	[ F|WZZ7*     
 	 (

4 (

;' 
   
8V	 #8T	9$"QvY  !QvY 
 
JJ{#
JJt   
$ x[ x[QvYXr   c                    SnSnSSS0 SS0SS	S
.S.S.nSSS.SUS.S.n[         R                  " [         R                  " S5      5      nU(       d  U R                  5       nSU-   SUSSS.nU[        R
                  " USS9[        R
                  " USS9S.n[        R                  " SUUSS9nUR                  S;   a/  U R                  5       nSU-   US '   [        R                  " SUUSS9nUR                  5         UR	                  5       n	U	R                  S!0 5      R                  S"0 5      R                  S#/ 5      n
/ S$S%0S&.n[        5       nU
 H  nUR                  S'/ 5       H  nUR                  S(5      nUR                  S)5      =(       d    0 nS n[        U[        5      (       a)  UR                  S(5      =(       d    UR                  S*5      nU=(       d    U=(       d    UR                  S*5      nU(       a  UU;   a  M  UR                  U5        U R                  UUUS+9nU(       d  M  US'   R                  U5        M     M     U$ ),NGetClusterList@ad69192ddc2fdd9a33048137e944fb471011cab80eabd4e9f9a64f255246be97z$b82972dd-2688-49d0-84a3-70d7083611b7dkdizzdf-web-5be2cdcefirstr   zgruppe-a	segment_0)abGroupuserSegment)appIdfiltersr
   user)collectionIdconfigurationinputz@apollo/clientz4.1.6)r   version   )r   
sha256Hash)clientLibrarypersistedQueryr   rb   zapplication/jsonzffw-mt-web-2c770629zhttps://www.zdf.de/)rc   Acceptzx-apollo-operation-namez
User-AgentReferer),rA   )
separators)operationName	variables
extensionszhttps://api.zdf.de/graphqlr   )r3   r   r   rd   rc   r+   clusterlistclustersr   r   r   r	   r   r   r   )r   r   )r&   re   r(   rf   r$   dumpsr!   r"   rg   r#   setr   r   addr   append)r   	operationsha256r   r   r   r3   r   r]   r+   r   r   seenclusterr   r   r   r   r   items                       r   getTrendingparser.getTrending^  s   !Y
,  4 (" ' +
	Y& &
 !	Z __			w	'U ! &%""	W $jj" zz"
V 	%	X 	 ! 	 !  
	 LL)	  MMOT 

#fb/
#mR
 
#j"
	  AV ET{{V  Y ZZ   V5$''YY{+ (		$   %%JJt$  3$;XXc]$$& % T ''M V ]r   c                    SU-   nU R                  US5      n[        R                  " U5      nUR                  S0 5      n/ SS0S.nUR                  S5      =(       d    UR                  S5      =(       d    S	US
'   UR                  S5      S:X  d  UR                  S5      S;   aE  U R	                  UUR                  S5      =(       d    US9nU(       a  US   R                  U5        U$ [        5       nUR                  S/ 5       H  n	U	R                  S/ 5       H  n
U
R                  S5      =(       d    U
R                  S5      nU(       a  X;   a  M:  UR                  U5        U
R                  S5      nU
R                  S5      S:H  =(       d    US;   nU(       a  U R	                  U
US9nOU R	                  U
US9nU(       d  M  US   R                  U5        M     M     U$ )N4https://zdf-prod-futura.zdf.de/mediathekV2/document/Tdocumentr   r   r   r   r   r   r   r   r   r   r   r   )r   r	   r   r   r   )r   )rl   r$   rr   r"   r   r   r   r   )r   r   ri   r]   r+   r   r   r   r   r   r   targetIdr   r   s                 r   getFuturaDocumentparser.getFuturaDocument  s"   
"
 	 

		X
 JJx T		X AV 
g	 
LL!
 F^ 
f		(LL' ,    d# 	 !  G_## ETHH		 {{V
 D! ,JJ{+  $XXh!::[
 F#w.  $   (($ ) 
 ((!) ) 
 ''U	d ]r   c                     US    H@  nUS   S   S    H.  nUS   nUS   U R                   S   S'   U R                  U5        M0     MB     U R                  $ )	Nmodule	filterRefresultsWithVideo!http://zdf.de/rels/search/resultshttp://zdf.de/rels/target	viewCountr   viewsr   	_grepItemr   )r   r^   r   r   r   s        r   rs   parser._parseSearchq  sg    (f$%789\]v/0F)/)<DMM*g&NN6 ^ 
 
r   c                 t    US    H$  nUS   nUS   S:X  a  M  U R                  U5        M&     U R                  $ )Nr   r   rq   z(http://zdf.de/rels/cmdm/broadcast-teaserr  r   r   r^   r   r   s       r   rt   parser._parseSearchPagey  sC    56f./6

I
INN6 7 
r   c                     US    H+  nSU;   d  M  US    H  nU R                  US   5        M     M-     U R                  $ )Nr   r   r   r  )r   r^   r   r   s       r   _parsePageIndexparser._parsePageIndex  sE    (f&"	^^F678 #  
r   c                     US   S   S   S   S    H.  nUS   nUS   U R                   S   S	'   U R                  U5        M0     U R                  $ )
Nr   r   r   r   r   r   r  r   r  r  r  s       r   ru   parser._parsePageIndex2  sa    (A{+,>?@cdf./6(.{(;4==W%>>& e 
r   c                     US   S    H.  nUS   nUS   U R                   S   S'   U R                  U5        M0     U R                  $ )Nr   r   r   r  r   r  r  r  s       r   rv   parser._parseContentFilter  sT    $%&IJf./6(.{(;4==W%>>& K 
r   c                     US    HA  nSU;   d  M  US   nUS   c  M  SUS   0U R                   S   S'   U R                  US5        MC     U R                  $ )N"http://zdf.de/rels/cmdm/broadcasts,http://zdf.de/rels/content/video-page-teasereffectiveAirtimeBeginr   r   r   dater  r   r^   	broadcastr   s       r   rx   parser._parseBroadcast  si    9:i4	AEFF()5+4Y?V5W*XT]]:w'	^^F6" ; 
r   c                     US   S   S   S    HA  nSU;   d  M  US   nUS   c  M  SUS   0U R                   S   S	'   U R                  US
5        MC     U R                  $ )N	tvServicer   z"http://zdf.de/rels/broadcasts-pager  r  r  r   r   r   r  r  r  s       r   rw   parser._parseTV  sy    [>!$%IJKopi4	AEFF()5+4Y?V5W*XT]]:w'	^^F6" q 
r   c                 :    US   S;   a  gU R                  X5        g )Nrq   )zhttp://zdf.de/rels/not-foundzhttp://zdf.de/rels/goneF)_grepItemDefault)r   r   
forcedTypes      r   r  parser._grepItem  s!    ITT
+r   c                 F   [         R                  " U R                  5      U l        US   U R                  S   S'   US   U R                  S   S'   U R	                  U5        U R                  U5        US   S:X  a^  UR                  S5      S	:X  a  g	U R                  US
   -   S-   U R                  S   S'   SU R                  S   S'   SU R                  S'   GOUS   S;   an  UR                  S5      S	:X  a  g	U R                  US   S
   R                  SS5      -   U R                  S   S'   SU R                  S   S'   SU R                  S'   GOuUS   S:X  a   U R                  US   S   S   R                  SU R                  5      -   U R                  S   S'   SUS   S   ;   a  US   S   S   U R                  S   S'   SU R                  S   S'   SU R                  S'   OUS   S:X  a  UR                  S5      (       d   SU;   a	  US   S   nOSU;   a  US   S   S    S   S   nOg	SU;   a  US   U R                  S   S'   SU;  a  g	U R                  US   R                  SU R                  5      -   U R                  S   S'   SU R                  S   S'   SU R                  S'   O[        S!US   -   5        S	U l        U R                  (       a>  U(       a  X R                  S'   U R                  S"   R                  U R                  5        g#g	!   S	U l         N[= f)$Nr   r   r   r   r   r   topichasVideoFr   r~   r   ri   libZdfListPager   r   r   )brandcategoryr!  z7http://zdf.de/rels/search/page-video-counter-with-videoz&limit=0r   mainVideoContentr   z(http://zdf.de/rels/streams/ptmd-templatez
{playerId}r   
libZdfPlayr   r   mainContentr   videoContentzUnknown target type: r	   T)r   r   r   r   _grepArt_grepActorsr"   rF   r    r   ry   r   r   )r   r   r  contents       r   r  parser._grepItemDefault  sv   =='$&%&67$&&V%l3$&&V--6Mg%jj%e!\\F6N:<G466(E.466(F466&>m <<jj%e!\\F3l,mnt,u,},}  I  JV  -W  W466(E.466(F466&>m&"llV4F-GHc-d  fP  .Q  .Y  .Y  Zf  gk  gt  gt  .u  uDFF8UV./0KLL&,-?&@A\&]^h&iTVVJ
#+DFF8VDFF6N m	)
**Z
 
  F"'()DEG]#A&~6q9:UVGG%,Z%8DFF:z" 5
?!\\G4^,_,g,ghtuy  vC  vC  -D  D466(E*466(F466&> !66746 
VVFF6N;;wtvv&

M E46s   B
L 	L c                     0 nU(       da  SUS   ;   aW  SUS   S   ;   a  US   S   S   U R                   S   S   S'   g SUS   S   ;   a  US   S   S   U R                   S   S   S'   g g g g )NlayoutsteaserImageRef384xautor   r   r   r   )r   )r   r   r   r   s       r   r*  parser._grepArt  s    
#	6*++V,-i88*01A*B9*Mj*YTVVJw'	/0;	;*01A*B9*Mk*ZTVVJw' 
< , 
r   c                 (   SU;   Ga  US    GH   nUS   S:X  d  M  SUS   ;   aN  US   S   (       aA  / nUS   S   S    H  nUS   S:w  d  M  UR                  U5        M!     X0R                  S	   S
'   SUS   ;   Ga   US   S   S :w  a  / n/ n/ nUS   S   S    H  nUS   S:X  a  UR                  US   5        M"  US   S:X  a  UR                  US   5        MA  US   S:X  a  UR                  US   5        M`  US   S:X  d  Mk  UR                  US   5        M     [        U5      S:w  a  XPR                  S	   S'   [        U5      S:w  a  X`R                  S	   S'   [        U5      S:w  a  XpR                  S	   S'   SUS   ;   aT  US   S   S :w  aH  US   S   R                  SS5      R                  SS5      R                  SS5      U R                  S	   S'   SUS   ;   d  GM  US   S   S :w  d  GM  US   S   U R                  S	   S'   GM     g g ) NprogrammeItemrq   z3http://zdf.de/rels/content-reference/programme-itemactorDetailsr   actorDetailr   r   r   actorscrewDetails
crewDetailfunctionautorkameramusikregier   writers	directorsartistsrh   z<br/>
z<b>z[B]z</b>z[/B]r   originalTitletvshowtitle)r   r   lenr    )	r   r   r   r7  actorr?  r@  rA  crews	            r   r+  parser._grepActors  sd   o&tIOO$:;;E`@abp@qf34^D]S%
-2
e T &,ffZ"9::tD_?`an?osw?wgig23MB<P$
z
g
%tF|$(f&'tF|$'f& Q 
W	GFF:.y9	Y1		ffZ0=	W	GFF:.y9$233=X8YZ`8aei8i#'(C#DV#L#T#TU\]a#b#j#jkpqv#w##  AG  HN  $OdffZ 4 ;<<FaAbcrAsw{A{*./J*KO*\dffZ'7 ' r   c                    SU-   nU R                  US5      n[        R                  " U5      nUR                  SU5      nUR                  S5      =(       d)    UR                  S5      =(       d    UR                  S5      nU(       dK  UR                  S/ 5       H5  nUR                  S5      =(       d    UR                  S5      nU(       d  M5    O   U(       d  [	        SU-   5      eU R                  U5      n0 US	'   UR                  S
5      =(       d    UR                  S5      =(       d    UUS	   S'   UR                  S5      =(       d    SUS	   S'   UR                  S5      (       a  UR                  S5      US	   S'   U R                  UR                  SUR                  S5      5      5      n	U	(       a
  SU	0US	   S'   U$ )Nr   Tr   streamApiUrlIOSstreamApiUrlAndroidstreamApiUrlVoicestreamsu/   ZDF Futura: keine Stream-API-URL gefunden für r   r   r   r   r   r   r   r   r   r   r   r   r   )rl   r$   rr   r"   r%   getVideoUrlr   )
r   r   ri   r]   r+   r   	streamUrlstreamr   r   s
             r   getVideoUrlByIdparser.getVideoUrlById  s   
"
 	 

		X
 JJx T		X 

 
 LL"
 LL   ||V
 &  JJ*	  	   
 
			
Q Qz] 
g	 
LL!
 z]6 
n	% 
 z]6
 	X\\(# 
:z	"   	\\'"
U 	e!:u	 Xr   c                   ^^^^ / / S.mU R                  US5      n[        R                  " U5      nUR                  S/ 5       HM  nUR                  S5      S:X  d  M  UR                  S5      nU(       d  M4  TS   R	                  USS	S
S.5        MO     [        5       mUU4S jmUR                  S/ 5       H  nUR                  S/ 5       Hq  nUR                  S/ 5       HX  nUR                  S0 5      n	U	R                  S/ 5       H-  n
U
R                  S5      nU(       d  M  SU;   d  M%  T" U5        M/     MZ     Ms     M     TS   (       d  UU4S jmT" U5        TS   (       d  [        S5      eT$ )N)mediasubtitleFcaptionsformatzebu-tt-d-basic-derX   rU  ttmldeT)ri   r   langcolourc                 t   > U (       a  U T;   a  g TR                  U 5        TS   R                  U SSS.5        g )NrT  r   HLS)ri   r   rP  )r   r   )rX   r   r   s    r   addMedia$parser.getVideoUrl.<locals>.addMedia  s;    t	#	
7		 
r   priorityListformitaeten	qualitiesaudiotracks.m3u8rT  c                   > [        U [        5      (       a   U R                  5        H  nT" U5        M     g [        U [        5      (       a  U  H  nT" U5        M     g [        U [        5      (       a  SU ;   a	  T" U 5        g g g )Nre  )r   r   r   r   rz   )r   r   r^  walks     r   rg   parser.getVideoUrl.<locals>.walk  sn    3%%!jjlU%[ + S$''!U%[ " S#&&sNc] # 'r   z$ZDF PTMD: keinen HLS-Stream gefunden)rl   r$   rr   r"   r   r   r%   )r   ri   r]   r^   captionrX   priority
formatItemqualityrc  trackr^  r   r   rg  s              @@@@r   rN  parser.getVideoUrlv  s   
Q
 

		X
 
H	QEE		 KK!  ;;u%S:%%#!#	' " ET UU		 $<<Z 'NN !
 $iiU !99U+S $^!#		> gJ
# 
agJ* 

 Xr   )r   r   r   r   )Fr6   )NN)__name__
__module____qualname____firstlineno__r   r,   r_   rl   rf   r{   r   r   r   r   r   r   rs   rt   r  ru   rv   rx   rw   r  r  r*  r+  rQ  rN  __static_attributes__ r   r   r   r      s    !*&2"2 !H]&H 	DNYxln,DL[]>Yvdr   r   )r$   r!   rN   rH   r7   r9   r   libmediathek4utilsr&   ry   r   rt  r   r   <module>rv     s4       	    % llB Br   