+
    ‰üÏj’  ã            	       ór  € R t ^ RIt^ RIt^ RIt^ RIt^ RIt^ RIHu Ht	 ]P                  P                  ]P                  P                  ]P                  P                  ]P                  P                  ]4      4      RR4      4      t]P                  P                  ]RR4      t]P                  P                  ]RR4      t]P                  P                  ]R4      ]P                  P                  ]R4      3t]P                  P                  ]RRR	4      tR
 tR tR tR tR t]R8X  d
   ]! 4        R# R# )u  /deploy guard: the skin trees may only change together with a version bump (040 Â§3).

skin.milionar and its modern look skin.milionar.modern (an overlay composed over it, 240) share one version: a change
of either tree bumps both manifests.

  deploy_check.py check    exit 1 if resources/skin.milionar or resources/skin.milionar.modern changed since the last
                           recorded deploy but the version did not
  deploy_check.py record   store the current tree hash + version (run after a successful upload)
Nz..Ú	resourceszskin.milionarzskin.milionar.modernú	addon.xmlz.agentsÚstatezskin_deploy.jsonc                 óÚ  € \         P                  ! 4       p \        \        3 EF!  p\        P
                  ! V4       EF  w  r#pVP                  4        \        V4       FÜ  pVR8X  d   K  \        P                  P                  W%4      p\        P                  P                  Ya\        8X  d   \        M\        4      pV P                  VP                  4       4       \        VR4      ;_uu_ 4       pV P                  \         P                  ! VP                  4       4      P!                  4       4       RRR4       KÞ  	  EK  	  EK$  	  V P#                  4       #   + '       g   i     EK  ; i)z]One hash of both skin trees (the classic one alone hashes as before the modern skin existed).z	.DS_StoreÚrbN)ÚhashlibÚsha256ÚTREEÚMODERNÚosÚwalkÚsortÚsortedÚpathÚjoinÚrelpathÚROOTÚupdateÚencodeÚopenÚreadÚdigestÚ	hexdigest)	r   ÚtreeÚbaseÚdirsÚfilesÚnamer   ÚrelativeÚhandles	            Úo/Users/chudy/Library/Application Support/Kodi/addons/plugin.video.milionar/scripts/skin_harness/deploy_check.pyÚ	tree_hashr!      sì   € ä�^Š^Ó€FÜ”v”ˆÜ!#§¢¨§ÑˆD˜Ø�I‰IŒKÜ˜už�Ø˜;Ô&ÙÜ—w‘w—|‘| DÓ/�ÜŸ7™7Ÿ?™?¨4Ä¼µÌ4ÓP�Ø—‘˜hŸo™oÓ/Ô0Ü˜$ ×%Ô%¨Ø—M‘M¤'§.¢.°·±³Ó"?×"FÑ"FÓ"HÔI÷ &Ñ%ô &ô "/ñ ð ×ÑÓÐ÷ &×%Ñ%ús   Ã0AEÅE*c                  ó¬   € \         P                  ! \        P                  P	                  \
        R 4      4      P                  4       P                  R4      # )r   Úversion)ÚETÚparser   r   r   r	   ÚgetrootÚget© ó    r    r#   r#   *   s4   € Ü�8Š8”B—G‘G—L‘L¤ {Ó3Ó4×<Ñ<Ó>×BÑBÀ9ÓMÐMr)   c                óØ  a a€ \          F¶  p\        VRR7      ;_uu_ 4       pVP                  4       pRRR4       \        P                  ! RV 3R lX4      w  rEV^8w  d   \        RV,           4      h\        P                  ! RV3R lV^R	7      p\        VR
RR7      ;_uu_ 4       pVP                  V4       RRR4       K¸  	  R#   + '       g   i     L›; i  + '       g   i     Kà  ; i)zBThe plugin dependency and the one skin version, in both manifests.úutf-8©ÚencodingNz@(<import\b[^>]*addon="plugin.video.milionar"[^>]*version=")[^"]+c                 ó4   <€ V P                  ^4      S,           # ©é   ©Úgroup)ÚmatchÚplugin_versions   &€r    Ú<lambda>Ú"_write_manifests.<locals>.<lambda>4   s   ø€ ¨5¯;©;°q«>¸NÖ+Jr)   z1expected one plugin.video.milionar dependency in z(<addon\b[^>]*version=")[^"]+c                 ó4   <€ V P                  ^4      S,           # r/   r1   )r3   Úskin_versions   &€r    r5   r6   7   s   ø€ ÀeÇkÁkÐRSÃnÐWcÖFcr)   )ÚcountÚw)Ú	MANIFESTSr   r   ÚreÚsubnÚ
SystemExitÚsubÚwrite)r4   r8   r   r   Útextr9   s   ff    r    Ú_write_manifestsrB   .   s®   ù€ çˆÜ�$ ×)Õ)¨VØ—;‘;“=ˆD÷ *ä—g’gÐaÜJÈDóR‰ˆà�AŒ:ÜÐPÐSWÕWÓXÐXÜ�vŠvÐ6Ô8cÐeiÐqrÔsˆÜ�$˜ g×.Õ.°&Ø�L‰L˜Ô÷ /Ñ.ó ß)×)ú÷ /×.Ð.ús   ¡CÂ%CÃCÃC)c                ó  € \        4       p\        W4       \        P                  P	                  \
        4      '       d×   \        \
        4      ;_uu_ 4       p\        P                  ! V4      pRRR4       R pXR,          \        4       8w  dˆ   V! V4      V! VR,          4      8:  dn   V! VR,          4      pRP                  R VRR VR,          ^,           3,            4       4      p\        RP                  VR,          V4      4       \        W4       \        P                  P                  \        R4      p\        VR	R
7      ;_uu_ 4       pVP                  4       pRRR4       RP                  V4      X9  dI   \        VRR	R
7      ;_uu_ 4       pVP                  RP                  W4      V,           4       RRR4       V# V#   + '       g   i     ELc; i  + '       g   i     L„; i  + '       g   i     T# ; i)zQSynchronize the dependency and bump changed skins before the existing guard runs.Nc                 ó–   € \         ;QJ d#    . R  V P                  R4       4       F  NK  	  5# ! R  V P                  R4       4       4      # )c              3   ó8   "  € T F  p\        V4      x € K  	  R # 5i©N)Úint©Ú.0Úparts   & r    Ú	<genexpr>Ú,prepare.<locals>.<lambda>.<locals>.<genexpr>C   s   é € Ð#KÑ:J°$¤C¨§I IÓ:Jùó   ‚Ú.)ÚtupleÚsplit)Úvalues   &r    r5   Úprepare.<locals>.<lambda>C   s2   € ŸeœeÑ#K¸%¿+¹+ÀcÔ:JÓ#KŸeÐK˜eÑ#K¸%¿+¹+ÀcÔ:JÓ#KÔKr)   Úhashr#   rN   c              3   ó8   "  € T F  p\        V4      x € K  	  R # 5irF   )ÚstrrH   s   & r    rK   Úprepare.<locals>.<genexpr>F   s   é € ÐOÑ5N¨Tœs 4Ÿy˜yÓ5NùrM   zskin version {} -> {}zchangelog.txtr+   r,   z	[B]{}[/B]r:   uS   [B]{}[/B]
â€¢ Release with MilionÃ¡Å™ {}; skin files and addon dependency updated

éÿÿÿÿ)r#   rB   r   r   ÚexistsÚSTATEr   ÚjsonÚloadr!   r   ÚprintÚformatr	   r   r@   )r4   Úcurrentr   ÚlastÚpartsÚoldr   Únotess   &       r    Úpreparerc   <   sq  € ä‹i€GÜ�^Ô-Ü	‡w�w‡~�~”e×ÒÜ”%�[Œ[˜FÜ—9’9˜VÓ$ˆD÷ áKˆØ��<œ9›;Ô&©5°«>¹UÀ4È	Å?Ó=SÔ+SÙ˜˜Y�Ó(ˆCØ—h‘hÑO°S¸¸"°XÀÀRÅÈ1ÅÀÖ5NÓOÓOˆGÜÐ)×0Ñ0°°iµÀ'ÓJÔKÜ˜^Ô5Ü�7‰7�<‰<œ˜oÓ.€DÜ	ˆd˜W×	%Õ	%¨Ø—‘“ˆ÷ 
&à×Ñ˜'Ó"¨%Ô/Ü�$˜ g×.Õ.°&Ø�L‰LÐq×xÑxØó)Ø+0õ1ô 2÷ /ð €Nˆ7€N÷ �[ˆ[ú÷ 
&×	%ú÷ /Ö.ð €Nús$   ÁGÅGÆ(G.ÇG	ÇG+	Ç.G?	c            	      ó|  € \        \        P                  4      ^8”  d   \        P                  ^,          MRp R\        4       R\	        4       /pV R8X  d¥   \
        P                  ! \
        P                  P                  \        4      RR7       \        \        R4      ;_uu_ 4       p\        P                  ! W^R7       R	R	R	4       \        R
P                  VR,          VR,          R,          4      4       R	# \
        P                  P                  \        4      '       g$   \        RP                  VR,          4      4       R	# \        P                   ! \        \        4      4      pVR,          VR,          8w  dƒ   \#        \%        \&        VR,          P)                  R4      4      4      \#        \%        \&        VR,          P)                  R4      4      4      8:  d"   \+        RP                  VR,          4      4      h\        RP                  VR,          VR,          4      4       R	#   + '       g   i     ELt; i)r0   Úcheckr#   rS   ÚrecordT)Úexist_okr:   )ÚindentNzrecorded skin {} {}:Né   Nz)no previous deploy recorded: ok (skin {})rN   zŒskin tree changed since the last deploy but the version is still {}: bump the version in resources/skin.milionar/addon.xml (+ changelog.txt)zskin ok: {} (last deployed {}))ÚlenÚsysÚargvr#   r!   r   Úmakedirsr   ÚdirnamerY   r   rZ   Údumpr\   r]   rX   r[   rO   ÚmaprG   rP   r>   )ÚmodeÚnowr   r_   s       r    Úmainrs   S   s‰  € ÜœcŸh™h›-¨!Ô+Œ3�8‰8�AŽ;°€DØ”g“i ¬«Ð
5€CØˆxÔÜ
�Š”B—G‘G—O‘O¤EÓ*°TÕ:Ü”%˜×Ô Ü�IŠI�c¨!Õ,÷ äÐ#×*Ñ*¨3¨y­>¸3¸v½;ÀsÕ;KÓLÔMÙÜ�7‰7�>‰>œ%× Ò ÜÐ9×@Ñ@ÀÀYÅÓPÔQÙÜ�9Š9”Tœ%“[Ó!€DØˆF…|�s˜6•{Ô"¤u¬S´°c¸)µn×6JÑ6JÈ3Ó6OÓ-PÓ'QÔUZÔ[^Ô_bÐdhÐirÕds×dyÑdyÐz}Ód~Ó[ó  VAô  (AÜð cßciÑciÐjmÐnwÕjxÓcyó{ð 	{ä	Ð
*×
1Ñ
1°#°iµ.À$ÀyÅ/Ó
RÖS÷ ×Ðús   Â&H*È*H;	Ú__main__)Ú__doc__r   rZ   r   r<   rk   Úxml.etree.ElementTreeÚetreeÚElementTreer$   r   Úabspathr   rn   Ú__file__r   r	   r
   r;   rY   r!   r#   rB   rc   rs   Ú__name__r(   r)   r    Ú<module>r|      sý   ðñó Û Û 	Û 	Û 
ß "Ð "à	‡w�w‡��r—w‘w—|‘| B§G¡G§O¡O°B·G±G·O±OÀHÓ4MÓ$NÐPTÐVZÓ[Ó\€Ø	‡w�w‡|�|�D˜+ Ó7€Ø	�‰�‰�d˜KÐ)?Ó	@€Ø�W‰W�\‰\˜$ Ó,¨b¯g©g¯l©l¸6À;Ó.OÐP€	Ø
�‰�‰�T˜9 gÐ/AÓB€òò"Nòòò.Tð& ˆzÔÙ†Fñ r)   