ó
    3u×j-  ã                   ó¨  • S r SSKrSSKrSSKrSSKrSSKJr  SSKJr  SSK	J
r
  SSKJrJrJr  \" \5      R                   r\" \R$                  R'                  S\S-  5      5      r\S	-  rS
u  rrSSS.rSSS.r\" \R7                  5       5      \" \R7                  5       5      -   V s0 s H  o \
" U 5      R9                  5       _M     sn r0 rS rS r SFS jr!SGS jr"S r#S r$SHS jr%S r&S r'0 SS_SS_SS_SS_S S!_S"S#_S$S%_S&S'_S(S)_S*S+_S,S-_S.S/_S0S1_S2S3_S4S5_S6S7_S8S9_S:S;S<S<S=.Er(S> r)S? r*S@ r+SA r,SB r-SC r.SD r/\0SE:X  a  \/" 5         ggs  sn f )Ia÷  Render 400x300 dashboard cards for the RLCD-4.2 Muse Gadget.

Cards: weather (Sadao), btc, node (public chain state), camera (C200C
snapshot dithered). Output JPEGs land in ./out/. Data comes from keyless
public APIs; the last good data is cached in ./cache.json so a network
failure still renders a card (marked with its age).

Text is drawn with two fonts: this VM's NotoSansThai is a Thai-only
subset (no Latin/digits), so non-Thai runs use DejaVu Sans, chosen per
character by actual cmap coverage.
é    N)Údatetime)ÚPath)ÚTTFont)ÚImageÚ	ImageDrawÚ	ImageFontÚRLCD_OUTÚoutz
cache.json)i�  i,  z7/usr/share/fonts/truetype/noto/NotoSansThai-Regular.ttfz4/usr/share/fonts/truetype/noto/NotoSansThai-Bold.ttf)FTz//usr/share/fonts/truetype/dejavu/DejaVuSans.ttfz4/usr/share/fonts/truetype/dejavu/DejaVuSans-Bold.ttfc                 óh   • X4nU[         ;  a  [        R                  " X5      [         U'   [         U   $ ©N)Ú_FONTSr   Útruetype)ÚpathÚsizeÚkeys      Ú*/home/wangpring/rlcd-cards/render_cards.pyÚ_fontr   $   s/   € Øˆ,€CØ
”&ÓÜ×(Ò(¨Ó4Œˆs‰Ü�#‰;Ðó    c                 óŠ   • [         U   n[        U 5      [        U   ;   a  U$ [        U   n[        U 5      [        U   ;   a  U$ U$ )zCFont path for one character: Thai font if it covers it, else Latin.)ÚTHAI_TTFÚordÚ_CMAPSÚ	LATIN_TTF)ÚchÚboldÚthaiÚlatins       r   Ú_pickr   +   sC   € ä�D‰>€DÜ
ˆ2ƒw”&˜‘,ÓØˆÜ�d‰O€EÜ
ˆ2ƒw”&˜‘-ÓØˆØ€Kr   c                 ó  • / nU HE  n[        X…5      n	U(       a  US   S   U	:X  a  US   S==   U-  ss'   M3  UR                  X˜/5        MG     U H3  u  p«[        X¤5      nU R                  X4X¼US9  XR	                  X¼S9-  nM5     U$ )z4Draw mixed Thai/Latin text, switching fonts per run.éÿÿÿÿr   é   )ÚfontÚfill)r"   )r   Úappendr   ÚtextÚ
textlength)ÚdÚxÚyr%   r   r   r#   Úrunsr   Úpr   ÚrunÚfs                r   ÚTr.   6   s’   € à€DÛˆÜ�"‹OˆÞ�D˜‘H˜Q‘K 1Ó$Ø�‰H�Q‹K˜2Ñ�Kà�K‰K˜˜Ö ñ ó ‰	ˆÜ�$ÓˆØ	�‰�ˆv�s¨ˆÑ.Ø	�\‰\˜#ˆ\Ð&Ñ&Šñ ð €Hr   c                 ó  • [         R                  R                  U SS0S9n[         R                  R                  X!S9 n[        R
                  " UR                  5       R                  S5      5      sS S S 5        $ ! , (       d  f       g = f)Nú
User-Agentúsunny-cards/1.0©Úheaders©Útimeoutúutf-8)ÚurllibÚrequestÚRequestÚurlopenÚjsonÚloadsÚreadÚdecode)Úurlr5   ÚreqÚrs       r   Ú
fetch_jsonrB   F   s_   € Ü
�.‰.×
 Ñ
  ¨|Ð=NÐ.OÐ
 Ð
P€CÜ	�‰×	Ñ	 Ð	Ñ	5¸Ü�zŠz˜!Ÿ&™&›(Ÿ/™/¨'Ó2Ó3÷ 
6×	5×	5ús   ¾3A;Á;
B	c                  óx   •  [         R                  " [        R                  5       5      $ ! [         a    0 s $ f = fr   )r;   r<   ÚCACHEÚ	read_textÚ	Exception© r   r   Ú
load_cacherH   L   s1   € ðÜ�zŠzœ%Ÿ/™/Ó+Ó,Ð,øÜó ØŠ	ðús   ‚'* ª9¸9c                 óT   • [         R                  [        R                  " U SS95        g )NF)Úensure_ascii)rD   Ú
write_textr;   Údumps)Úcs    r   Ú
save_cacherN   S   s   € Ü	×Ñ”T—Z’Z °Ñ6Õ7r   c           	      ón  • [         R                  " S[        [        4S5      n[        R
                  " U5      nUR                  SS[        S/SS9  [        USSU SS	S5        [        R                  " 5       R                  S
5      nSU 3U(       a	  SUS-   S3OS-   n[        US[        S-
  US5        X#4$ )NÚLéÿ   r   é,   ©r#   é   é   é   Tz%H:%Mu   à¸­à¸±à¸›à¹€à¸”à¸• u!    (à¸‚à¹‰à¸­à¸¡à¸¹à¸¥à¹€à¸�à¹ˆà¸² é<   u    à¸™à¸²à¸—à¸µ)Ú é   é   )r   ÚnewÚWÚHr   ÚDrawÚ	rectangler.   r   ÚnowÚstrftime)ÚtitleÚstale_sÚimgr'   r`   Úlabels         r   Ú	base_cardrf   W   s­   € Ü
�)Š)�Cœ!œQ˜ Ó
%€CÜ�Š�sÓ€AØ‡K�K��A”q˜"� A€KÑ&Ü€aˆˆQ��r˜4 Ô%Ü
�,Š,‹.×
!Ñ
! 'Ó
*€CØ! # Ð'ÖpwÐ-NÈwÐZ\É}ÈoÐ]kÑ+lÐ}ñ  A€EÜ€aˆŒQ�‰V�U˜BÔØˆ6€Mr   c                 ó|   • [         R                  SS9  U R                  S5      R                  [         U S3-  SS9  g )NT)Úexist_okÚRGBz.jpgéX   )Úquality)ÚOUTÚmkdirÚconvertÚsave)rd   Únames     r   ro   ro   b   s9   € Ü‡I�I�t€IÑð ‡K�K�Ó×ÑœC T F¨$ -Ñ/¸ÐÒ<r   c                 ó@   • [        U 5      u  p[        USSSSS5        U$ )NrT   éx   u-   à¸”à¸¶à¸‡à¸‚à¹‰à¸­à¸¡à¸¹à¸¥à¹„à¸¡à¹ˆà¹„à¸”à¹‰rY   T)rf   r.   )rb   rd   r'   s      r   Ú
error_cardrs   i   s&   € Ü�uÓ�F€CÜ€aˆˆSÐAÀ2ÀtÔLØ€Jr   u'   à¸—à¹‰à¸­à¸‡à¸Ÿà¹‰à¸²à¹�à¸ˆà¹ˆà¸¡à¹ƒà¸ªr!   u*   à¸ªà¹ˆà¸§à¸™à¹ƒà¸«à¸�à¹ˆà¹�à¸ˆà¹ˆà¸¡à¹ƒà¸ªé   u   à¹€à¸¡à¸†à¸šà¸²à¸‡à¸ªà¹ˆà¸§à¸™é   u   à¹€à¸¡à¸†à¸¡à¸²à¸�é-   u   à¸¡à¸µà¸«à¸¡à¸­à¸�é0   u-   à¸«à¸¡à¸­à¸�à¸™à¹‰à¸³à¸„à¹‰à¸²à¸‡à¹�à¸‚à¹‡à¸‡é3   u   à¸�à¸™à¸›à¸£à¸­à¸¢à¹€à¸šà¸²é5   u   à¸�à¸™à¸›à¸£à¸­à¸¢é7   u   à¸�à¸™à¸›à¸£à¸­à¸¢à¸«à¸™à¸±à¸�é=   u   à¸�à¸™à¹€à¸šà¸²é?   u   à¸�à¸™à¸›à¸²à¸™à¸�à¸¥à¸²à¸‡éA   u   à¸�à¸™à¸«à¸™à¸±à¸�éG   u   à¸«à¸´à¸¡à¸°à¹€à¸šà¸²éI   u   à¸«à¸´à¸¡à¸°éK   u   à¸«à¸´à¸¡à¸°à¸«à¸™à¸±à¸�éP   u   à¸�à¸™à¸‹à¸¹à¹ˆà¹€à¸šà¸²éQ   u   à¸�à¸™à¸‹à¸¹à¹ˆu   à¸�à¸™à¸‹à¸¹à¹ˆà¸«à¸™à¸±à¸�u   à¸�à¸™à¸Ÿà¹‰à¸²à¸„à¸°à¸™à¸­à¸‡u4   à¸�à¸™à¸Ÿà¹‰à¸²à¸„à¸°à¸™à¸­à¸‡+à¸¥à¸¹à¸�à¹€à¸«à¹‡à¸š)éR   é_   é`   éc   c           
      óº  • SnSu  p# [        U5      n[        R                  " 5       R                  5       US.U S'   [	        U 5        U(       d  [        S5      $ US   nUS	   n[        SU5      u  px[        US
SUS   S S3SS5      n	[        X‰S
-   S[        R                  US   S5      S5        [        US
SSUS   S   S SUS   S   S S3S5        US   S   n
[        US
SSU
b  U
OS SUS    S S!3S5        U$ ! [
         aS    U R                  S5      nU(       a7  US   n[        [        R                  " 5       R                  5       US   -
  5      n GNf = f)"Nzâhttps://api.open-meteo.com/v1/forecast?latitude=6.637&longitude=100.420&current=temperature_2m,relative_humidity_2m,weather_code&daily=temperature_2m_max,temperature_2m_min,precipitation_probability_max&timezone=Asia%2FBangkok©NN©ÚtÚdataÚweatherr‹   rŠ   u#   à¸­à¸²à¸�à¸²à¸¨ â€” à¸ªà¸°à¹€à¸”à¸²ÚcurrentÚdailyrT   éB   Útemperature_2mú.0fõ   Â°Cé8   Trj   Úweather_coderX   rV   é–   u   à¸§à¸±à¸™à¸™à¸µà¹‰ Útemperature_2m_minr   u   â€“Útemperature_2m_maxÚprecipitation_probability_maxéÀ   u   à¹‚à¸­à¸�à¸²à¸ªà¸�à¸™ Ú-u   %  à¸Šà¸·à¹‰à¸™ Úrelative_humidity_2mÚ%)rB   r   r`   Ú	timestamprN   rF   ÚgetÚintrs   rf   r.   ÚWMO_TH)Úcacher?   r‹   ÚstaleÚoldÚcurÚdayrd   r'   ÚendxÚprobs              r   Úcard_weatherr¨   y   s¢  € ðC€Cð �K€Dð?Ü˜#‹ˆÜ!)§¢£×!9Ñ!9Ó!;ÀTÑJˆˆiÑÜ�5Ôö ÜÐ?Ó@Ð@Ø
ˆy‰/€CØ
ˆw‰-€CÜÐ<¸eÓD�F€CÜˆQ��B˜3Ð/Ñ0°Ð5°SÐ9¸2¸tÓD€DÜ€a�‰�BœŸ
™
 3 ~Ñ#6¸Ó;¸RÔ@Ü€aˆˆSÐ'¨Ð,@Ñ(AÀ!Ñ(DÀSÐ'IÈÈSÐQeÑMfÐghÑMiÐjmÐLnÐnqÐrÐtvÔwØÐ.Ñ/°Ñ2€DÜ€aˆˆSÐ*°4Ñ3C©4ÈÐ*MÐM]Ð^aÐbxÑ^yÐz}Ð]~Ð~ð  Að  CEô  FØ€Jøô ó ?Ø�i‰i˜	Ó"ˆÞØ�v‘;ˆDÜœŸš›×0Ñ0Ó2°S¸±XÑ=Ó>ˆEúð	?ús   ˆ?C= Ã=AEÅEc                 ó2  • Su  p [        S5      n[        S5      nS nU R                  S5      =(       d    0 nUR                  S5      (       a@  [        R                  " 5       R	                  5       UR                  SS5      -
  S:  a  US   nO; [        S	5      S
   S   n[        R                  " 5       R	                  5       US.U S'   US   UU(       a  [        US   U-  5      OS S.n[        R                  " 5       R	                  5       US.U S'   [        U 5        U(       d  [        S5      $ [        SU5      u  p‰[        U	SSSUS   S 3SS5        UR                  S5      (       a  [        U	SSSUS   S 3S5        [        U	SSSUS    S 3S!5        U$ ! [
         a    UR                  S5      n Níf = f! [
         aR    U R                  S5      nU(       a7  US   n[        [        R                  " 5       R	                  5       US   -
  5      n N÷f = f)"Nrˆ   z#https://mempool.space/api/v1/pricesú+https://mempool.space/api/blocks/tip/heightÚfxÚraterŠ   r   i`T  z%https://open.er-api.com/v6/latest/USDÚratesÚTHB)rŠ   r¬   ÚUSD)ÚusdÚheightÚthbr‰   Úbtcr‹   ÚBitcoinrT   r�   Ú$r°   Ú,é2   Tr²   éŒ   u   à¸¿é$   éÆ   u   à¸šà¸¥à¹‡à¸­à¸� #r±   rV   )rB   rž   r   r`   r�   rF   ÚroundrN   rŸ   rs   rf   r.   )
r¡   r‹   r¢   Úpricesr±   r¬   r«   r£   rd   r'   s
             r   Úcard_btcr½   •   sñ  € Ø�K€Dð?ÜÐAÓBˆÜÐIÓJˆØˆØ�Y‰Y�t‹_×" ˆØ�6‰6�&�>‰>œhŸlšl›n×6Ñ6Ó8¸2¿6¹6À#Àq»>ÑIÈHÓTØ�f‘:‰Dð&Ü!Ð"IÓJÈ7ÑSÐTYÑZ�Ü$,§L¢L£N×$<Ñ$<Ó$>ÈÑM��d‘ð ˜e‘}°Þ6:”u˜V E™]¨TÑ1Ô2ÀñFˆä%Ÿ\š\›^×5Ñ5Ó7ÀÑFˆˆe‰Ü�5Ôö Ü˜)Ó$Ð$Ü�y %Ó(�F€CÜ€aˆˆR�1�T˜%‘[ �OÐ$ b¨$Ô/Ø‡x�x�‡�Ü	ˆ!ˆR�˜˜D ™K¨˜?Ð+¨RÔ0Ü€aˆˆSÐ% d¨8¡n°QÐ%7Ð8¸"Ô=Ø€Jøô% ó &Ø—v‘v˜f“~’ð&ûô ó ?Ø�i‰i˜ÓˆÞØ�v‘;ˆDÜœŸš›×0Ñ0Ó2°S¸±XÑ=Ó>ˆEùð	?ús8   †BF: Â:F Ã	AF: ÆF7Æ4F: Æ6F7Æ7F: Æ:AHÈHc                 ó’  • Su  p [        S5      n[        S5      n[        S5      nX4S   US   US   US   S	.n[        R                  " 5       R                  5       US
.U S'   [	        U 5        U(       d  [        S5      $ [        SU5      u  px[        USSSUS   S 3SS5        [        USSSUS   S S3S5        [        USSSUS    S3S5        [        USSSUS     S3S5        U$ ! [
         aR    U R                  S5      nU(       a7  US   n[        [        R                  " 5       R                  5       US   -
  5      n N×f = f)!Nrˆ   rª   z!https://mempool.space/api/mempoolz-https://mempool.space/api/v1/fees/recommendedÚcountÚvsizeÚ
fastestFeeÚhalfHourFee)r±   r¿   rÀ   ÚfastÚhalfr‰   Únoder‹   rŠ   u#   à¹€à¸„à¸£à¸·à¸­à¸‚à¹ˆà¸²à¸¢ BitcoinrT   é>   u#   à¸šà¸¥à¹‡à¸­à¸�à¸¥à¹ˆà¸²à¸ªà¸¸à¸” #r±   r¶   é    Tév   u   à¸£à¸­à¹ƒà¸™ mempool u    à¸£à¸²à¸¢à¸�à¸²à¸£rV   é    u1   à¸„à¹ˆà¸²à¸˜à¸£à¸£à¸¡à¹€à¸™à¸µà¸¢à¸¡à¸”à¹ˆà¸§à¸™ rÃ   z sat/vBéÊ   u$   à¸˜à¸£à¸£à¸¡à¸”à¸² ~30 à¸™à¸²à¸—à¸µ rÄ   )rB   r   r`   r�   rN   rF   rž   rŸ   rs   rf   r.   )	r¡   r‹   r¢   r±   ÚmempoolÚfeesr£   rd   r'   s	            r   Ú	card_noderÍ   ·   sr  € Ø�K€Dð?ÜÐIÓJˆÜÐ@ÓAˆÜÐIÓJˆØ °7Ñ+;Ø  Ñ)°4¸Ñ3EØ˜]Ñ+ñ-ˆô 'Ÿlšl›n×6Ñ6Ó8À$ÑGˆˆf‰Ü�5Ôö ÜÐ?Ó@Ð@ÜÐ<¸eÓD�F€CÜ€aˆˆRÐ6°t¸H±~ÀaÐ6HÐIÈ2ÈtÔTÜ€aˆˆSÐ)¨$¨w©-¸Ð):Ð:MÐNÐPRÔSÜ€aˆˆSÐEÀdÈ6ÁlÀ^ÐSZÐ[Ð]_Ô`Ü€aˆˆSÐ8¸¸f¹¸ÀgÐNÐPRÔSØ€Jøô ó ?Ø�i‰i˜ÓˆÞØ�v‘;ˆDÜœŸš›×0Ñ0Ó2°S¸±XÑ=Ó>ˆEùð	?ús   †A(C* Ã*AEÅEc                 ó<   • U S::  a  gU S::  a  gU S::  a  gU S::  a  gg	)
u5   Thai PCD AQI band label for a PM2.5 value in Âµg/mÂ³.é   u   à¸”à¸µà¸¡à¸²à¸�é%   u   à¸”à¸µr·   u   à¸›à¸²à¸™à¸�à¸¥à¸²à¸‡éZ   u6   à¹€à¸£à¸´à¹ˆà¸¡à¸¡à¸µà¸œà¸¥à¸•à¹ˆà¸­à¸ªà¸¸à¸‚à¸ à¸²à¸žu'   à¸¡à¸µà¸œà¸¥à¸•à¹ˆà¸­à¸ªà¸¸à¸‚à¸ à¸²à¸žrG   )Úvs    r   Ú	pm25_bandrÓ   Ñ   s-   € àˆBƒwØ ØˆBƒwØØˆBƒwØ&ØˆBƒwØGØ4r   c           
      ó  • Su  p[         R                  R                  S5      n[         R                  R                  S5      nU(       Ga  U(       Ga   [        R                  R                  US-   SSU 3S.S9n[        R                  R                  US	S
9 n[        R                  " UR                  5       R                  S5      5       Vs0 s H  nUS   US   _M     nnS S S 5        [        WS   5      [        US   5      [        US   5      [        US   5      [        US   5      S.n[        R                  " 5       R                  5       US.U S'   [        U 5        UcO  U R                  S5      n	U	(       a7  U	S   n[#        [        R                  " 5       R                  5       U	S   -
  5      nU(       d  [%        S5      $ ['        SU5      u  p«[)        USSUS   S SS5      n[)        X¼S-   S S!S"5        [)        USS#S$[+        US   5       3S%S5        [)        USS&S'US(   S S)US*   S S+3S"5        [)        USS,S-US.   S/ S0US1   S S23S"5        U
$ s  snf ! , (       d  f       GN�= f! [          a    S n GNf = f)3Nrˆ   ÚHA_URLÚHA_TOKENz/api/statesr1   zBearer )r0   ÚAuthorizationr2   é   r4   r6   Ú	entity_idÚstatezsensor.o_1pst_pm2_5zsensor.o_1pst_pm1zsensor.o_1pst_pm10zsensor.o_1pst_carbon_dioxidezsensor.o_1pst_temperature)Úpm25Úpm1Úpm10Úco2Útempr‰   rÛ   r‹   rŠ   u   à¸�à¸¸à¹ˆà¸™ PM2.5u"   à¸�à¸¸à¹ˆà¸™ PM2.5 â€” AirGradientrT   rÆ   z.1frW   Té
   r…   u   Âµg/mÂ³é   éŽ   u#   à¸„à¸¸à¸“à¸ à¸²à¸žà¸­à¸²à¸�à¸²à¸¨: é   éº   zPM1 rÜ   z  PM10 rÝ   u    Âµg/mÂ³éÞ   zCO2 rÞ   r‘   u    ppm  à¸­à¸¸à¸“à¸«à¸ à¸¹à¸¡à¸´ rß   r’   )ÚosÚenvironrž   r7   r8   r9   r:   r;   r<   r=   r>   Úfloatr   r`   r�   rN   rF   rŸ   rs   rf   r.   rÓ   )r¡   r‹   r¢   r?   Útokenr@   rA   ÚsÚstatesr£   rd   r'   r¦   s                r   Ú	card_pm25rì   Þ   s„  € Ø�K€DÜ
�*‰*�.‰.˜Ó
"€CÜ�J‰J�N‰N˜:Ó&€Eß
�uð	Ü—.‘.×(Ñ(Ø�mÑ#Ø'8Ø,3°E°7Ð*;ñ=ð )ð >ˆCô —‘×'Ñ'¨°RÐ'Ñ8¸Aä#'§:¢:¨a¯f©f«h¯o©o¸gÓ.FÔ#GóIÚ#G˜að ˜K™.¨!¨G©*Ò4Ù#Gð ð I÷ 9ô ˜fÐ%:Ñ;Ó<Ü˜VÐ$7Ñ8Ó9Ü˜fÐ%9Ñ:Ó;Ü˜VÐ$BÑCÓDÜ˜fÐ%@ÑAÓBñˆDô #+§,¢,£.×":Ñ":Ó"<ÀdÑKˆE�&‰MÜ�uÔð �|Ø�i‰i˜ÓˆÞØ�v‘;ˆDÜœŸš›×0Ñ0Ó2°S¸±XÑ=Ó>ˆEÞÜÐ.Ó/Ð/ÜÐ;¸UÓC�F€CÜˆQ��B˜4 ™<¨Ð,¨r°4Ó8€DÜ€a�‰�B˜	 2Ô&Ü€aˆˆSÐ7¼	À$ÀvÁ,Ó8OÐ7PÐQÐSUÐW[Ô\Ü€aˆˆS�D˜˜e™ SÐ)¨°°f±¸cÐ0BÀ(ÐKÈRÔPÜ€aˆˆS�D˜˜e™ SÐ)Ð)HÈÈfÉÐVYÐHZÐZ]Ð^Ð`bÔcØ€Jùò5I÷ 9Ö8ûô ó 	Ø‹Dð	ús>   ÁAI0 Â6IÃIÃ"IÃ$B I0 ÉIÉ
I-É(I0 É0J É?J c           	      ó|  • [         R                  " S[        [        4S5      n[        R
                  " U5      nUR                  SS[        S/SS9  [        USSSS	S
S5        U (       GaB  [        U 5      R                  5       (       Ga#  [         R                  " U 5      R                  S5      n[        [        S-
  pT[        XCR                  -  XSR                  -  5      nUR                  [!        UR                  U-  5      S-   [!        UR                  U-  5      S-   45      nUR                  U-
  S-  nUR                  U-
  S-  nUR#                  XxXt-   X…-   45      nUR                  S[         R$                  R&                  S9R                  S5      nUR)                  US5        U$ [        USSSSS
5        U$ )NrP   rQ   r   rR   rS   rT   rU   u&   à¸�à¸¥à¹‰à¸­à¸‡ C200C â€” à¸šà¹‰à¸²à¸™rV   Tr!   rt   Ú1)Údither)r   rR   r¸   u!   à¸¢à¸±à¸‡à¹„à¸¡à¹ˆà¸¡à¸µà¸ à¸²à¸žrY   )r   r[   r\   r]   r   r^   r_   r.   r   ÚexistsÚopenrn   ÚmaxÚwidthr±   ÚresizerŸ   ÚcropÚDitherÚFLOYDSTEINBERGÚpaste)	Ú	snap_pathrd   r'   ÚsnapÚarea_wÚarea_hÚscaler(   r)   s	            r   Úcard_camerarþ     sw  € Ü
�)Š)�Cœ!œQ˜ Ó
%€CÜ�Š�sÓ€AØ‡K�K��A”q˜"� A€KÑ&Ü€aˆˆQÐ8¸"¸dÀCÔHß”T˜)“_×+Ñ+×-Ò-Ü�zŠz˜)Ó$×,Ñ,¨SÓ1ˆô œA ™F�Ü�FŸZ™ZÑ'¨·+±+Ñ)=Ó>ˆØ�{‰{œC §
¡
¨UÑ 2Ó3°aÑ7¼¸T¿[¹[È5Ñ=PÓ9QÐTUÑ9UÐVÓWˆØ�Z‰Z˜&Ñ  QÑ&ˆØ�[‰[˜6Ñ! aÑ'ˆØ�y‰y˜! ¡
¨A©JÐ7Ó8ˆØ�|‰|˜C¬¯©×(CÑ(Cˆ|ÐD×LÑLÈSÓQˆØ�	‰	�$˜Ô ð €Jô 	
ˆ!ˆR�Ð9¸2¸tÔDØ€Jr   c                  ó4  ^• [        [        R                  5      S:”  a  [        R                  S   OSn [        5       mU4S jU4S jU4S jU4S jS S.nUR	                  5        H.  u  p#U SU4;   d  M  [        U" 5       U5        [        U S	35        M0     g )
Nr!   Úallc                  ó   >• [        T 5      $ r   )r¨   ©r¡   s   €r   Ú<lambda>Úmain.<locals>.<lambda>  s
   ø€ œ|¨EÔ2r   c                  ó   >• [        T 5      $ r   )r½   r  s   €r   r  r     s	   ø€ œ8 Eœ?r   c                  ó   >• [        T 5      $ r   )rÍ   r  s   €r   r  r  !  ó
   ø€ œI eÔ,r   c                  ó   >• [        T 5      $ r   )rì   r  s   €r   r  r  "  r  r   c                  ó&   • [        [        S-  5      $ )Nzsnap.jpg)rþ   ÚHERErG   r   r   r  r  #  s   € œk¬$°Ñ*;Ô<r   )rŒ   r³   rÅ   rÛ   Úcameraz: ok)ÚlenÚsysÚargvrH   Úitemsro   Úprint)ÚwhichÚjobsrp   Úfnr¡   s       @r   Úmainr    sx   ø€ ÜœsŸx™x›=¨1Ó,ŒC�H‰H�QŠK°%€EÜ‹L€EÜ2Ü*Ü,Ü,Ù<ñ	>€Dð
 —J‘J–L‰ˆØ�U˜D�MÕ!Ü‘“�tÔÜ�T�F˜$�-Ö ò !r   Ú__main__)Fr   )rØ   r   )1Ú__doc__r;   ræ   r  Úurllib.requestr7   r   Úpathlibr   ÚfontTools.ttLibr   ÚPILr   r   r   Ú__file__Úparentr
  rç   rž   rl   rD   r\   r]   r   r   ÚsetÚvaluesÚgetBestCmapr   r   r   r   r.   rB   rH   rN   rf   ro   rs   r    r¨   r½   rÍ   rÓ   rì   rþ   r  Ú__name__)r+   s   0r   Ú<module>r!     s9  ðñ
ó Û 	Û 
Û Ý Ý å "ß +Ñ +áˆHƒ~×Ñ€Ù
ˆ2�:‰:�>‰>˜* d¨U¡lÓ3Ó4€Øˆ|Ñ€Ø�€€1àLØHñJ€àEØIñK€	á.1°(·/±/Ó2CÓ.DÁsÈ9×K[ÑK[ÓK]ÓG^Ò.^Ó	_Ò.^¨‰V�A‹Y×"Ñ"Ó$Ò
$Ñ.^Ñ	_€Ø	€òòôô 4òò8ôò=òð
ØÐ0ð
Ø23Ð5að
Øcdð  gGð
ð IJð  L`ð
àÐð
à Ð"Qð
àSUÐWtð
àvxð  {Oð
ð Ð(ð
ð +-Ð.?ð
ð BDÐEbð
ð egÐh|ð
ð Ðð	
ð "$ ^ð	
ð 68Ð9Sð	
ð VXÐYsð	
ð
 Ðð
ð
  =ÐBbð  i_Ø>ò
€òò8òDò4
5ò%òPò,!ð ˆzÓÙ…Fð ùòU 
`s   Â) E