+
    kHàjv3  ã                   óh  € R t ^ RIt^ RIt^ RIt^ RIt^ RIHt ^ RIHt ^ RI	H
t
 ^ RIHt ^ RIHtHtHtHt ^ RIHt ^ RIHt ^ R	IHt ]P0                  ! ]4      t]! 4       t^ tR
tRtR t R R lt!R R lt"R R lt#] ! R R4      4       t$ ! R R4      t% ! R R]4      t&R R lt' ! R R]4      t(R# )a1  Telegram admission before every PTB handler group, including native plugins.

Claims belong to the receiving adapter across Application rebuilds. Completed
history is bounded and has no TTL in memory; dispatch and its PTB tasks pin active
claims. Completed IDs are also written to a per-bot receipt file under the adapter's
Hermes home, so a replacement adapter or a restarted gateway still drops updates that
Telegram redelivers because their getUpdates/webhook acknowledgement never landed.
No cross-process coordination or exactly-once effects are promised.
N)Ú
ContextVar)Ú	dataclass)Úwraps)ÚUpdate)ÚApplicationÚApplicationHandlerStopÚConversationHandlerÚSimpleUpdateProcessor)Úcoerce_port)Úbounded_put)Úatomic_json_writei   c                 ó0   € V P                   R V R2,          # )Útelegram_update_receipts_z.json)Ú_update_receipt_dir)ÚadapterÚbot_ids   &&ÚP/home/ubuntu/.hermes/hermes-agent/plugins/platforms/telegram/update_admission.pyÚ_receipt_pathr   &   s   € Ø×&Ñ&Ð+DÀVÀHÈEÐ)RÕRÐRó    c                ó   € V ^8„  d   QhRR/# ©é   ÚreturnN© )Úformats   "r   Ú__annotate__r   *   s   € ÷ 2ñ 2 tñ 2r   c                ó¶  a
€ WP                   9   d   R# V P                   P                  V4       \        W4      p \        P                  ! VP                  RR7      4      p\        T\        4      '       d   TP                  R4      MRp\        T\        4      '       g   R# \        P                  ! 4       \        ,
          o
\!        T
3R lTP#                  4        4       4      pT P$                  pT F%  w  rxT R	T 2p	Y–9  g   K  \'        YiT\(        4       K'  	  R#   \         d     R# \        \        3 d    \        P                  RTRR7        R# i ; i)
zPSeed completed history from disk once per bot, before its first admission check.Nz	utf-8-sig)Úencodingz4[Telegram] Ignoring unreadable update receipts at %sT©Úexc_infoÚ
update_idsc              3   óð   <"  € T Fk  w  r\        V\        \        34      '       g   K#  VS8”  g   K,  \        V4      P	                  R 4      P                  4       '       g   K\  \        V4      V3x € Km  	  R# 5i)Ú-N)Ú
isinstanceÚintÚfloatÚstrÚlstripÚisdigit)Ú.0ÚuidÚtsÚcutoffs   &  €r   Ú	<genexpr>Ú!_load_receipts.<locals>.<genexpr>;   s]   øé € ð g±;©¨Ü  ¤c¬5 \×2ô $Ø79¸F±{ô $ÜGJÈ3ÃxÇÁÐWZÓG[×GcÑGc×Geô $”E˜"“I˜sÕ#³;ùs   ƒ A6¨A6±+A6Á!A6Ú:)Ú_update_receipts_loadedÚaddr   ÚjsonÚloadsÚ	read_textÚFileNotFoundErrorÚOSErrorÚ
ValueErrorÚloggerÚwarningr#   ÚdictÚgetÚtimeÚRECEIPT_TTL_SECONDSÚsortedÚitemsÚ_seen_update_idsr   Ú	_SEEN_CAP)r   r   ÚpathÚpayloadÚidsÚfreshÚseenr+   r*   Úkeyr,   s   &&        @r   Ú_load_receiptsrH   *   s  ø€ à×0Ñ0Ô0ÙØ×#Ñ#×'Ñ'¨Ô/Ü˜Ó)€DðÜ—*’*˜TŸ^™^°[˜^ÓAÓBˆô (2°'¼4×'@Ò'@ˆ'�+‰+�lÔ
#Àd€CÜ�cœ4× Ò ÙÜ�YŠY‹[Ô.Õ.€FÜô g°3·9±9´;ó gó g€Eà×#Ñ#€DÛ‰ˆØ�˜˜#˜ÐˆØŽ?Ü˜ 2¤yÖ1ó øô ô ÚÜ”ZÐ ô Ü�‰ÐMÈtÐ^bˆÔcÚðús   »&D ÄEÄ,EÄ;EÅEc                ó(   € V ^8„  d   QhR\         RR/# )r   rG   r   N)r&   )r   s   "r   r   r   D   s   € ÷ Gñ G¤#ð G¨$ñ Gr   c                 ó€  € \        V P                  V\        P                  ! 4       \        4       V P                  P                  VP                  R ^4      ^ ,          4       V P                  pVe   VP                  4       '       d7   \        P                  ! 4       P                  \        V 4      RR7      V n        R# R# )r/   Nztelegram-update-receipts)Úname)r   r@   r<   rA   Ú_update_receipts_dirtyr1   ÚsplitÚ_update_receipt_flushÚdoneÚasyncioÚget_running_loopÚcreate_taskÚ_flush_receipts)r   rG   Útasks   && r   Ú_record_receiptrU   D   s�   € Ü�×(Ñ(¨#¬t¯yªy«{¼IÔFØ×"Ñ"×&Ñ& s§y¡y°°aÓ'8¸Õ';Ô<Ø×(Ñ(€DØ‚|�t—y‘y—{’{ä(/×(@Ò(@Ó(B×(NÑ(NÜ˜GÓ$Ð+Eð )Oó )GˆÖ%ñ #r   c                ó   € V ^8„  d   QhRR/# r   r   )r   s   "r   r   r   N   s   € ÷ fñ f dñ fr   c              ƒ   ó˜  "  € ^ RI Hp V P                  '       dû   V P                  P                  4       pV R2\        P                  ! 4       \
        ,
          rCV P                  P                  4        UUu/ uFM  w  rVVP                  V4      '       g   K  \        V\        4      '       g   K6  Wd8”  g   K>  V\        V4      R VbKO  	  ppp\        W4      p V! VP                  4       \        P                  ! \         VRV/RR7      G Rj  x€L
  EK  R# u uppi  L  \"         d    \$        P'                  RTRR7        EK=  i ; i5i)	é    )Úmkdir_under_hermes_homer/   Nr    )Úindentz2[Telegram] Failed to persist update receipts to %sTr   )Úhermes_constantsrY   rL   Úpopr<   r=   r@   r?   Ú
startswithr#   r%   Úlenr   ÚparentrP   Ú	to_threadr   Ú	Exceptionr8   r9   )	r   rY   r   Úprefixr,   rG   r+   rD   rB   s	   &        r   rS   rS   N   s  é € Ý8à
×
(×
(Ð
(Ø×/Ñ/×3Ñ3Ó5ˆØ"˜8 1˜¤t§y¢y£{Ô5HÕ'H�à4;×4LÑ4L×4RÑ4RÔ4Tô TÑ4T©¨Ø—.‘. ×(ô %Ü-7¸¼E×-Bô %ØGIÁ{ô %ˆs”3�v“;�<Ð  "Ò$Ñ4Tˆñ Tä˜WÓ-ˆð	fÙ# D§K¡KÔ0Ü×#Ò#Ô$5°t¸lÈCÐ=PÐY]Ô^×^Ó^ñ )ùóTñ
 _øÜô 	fÜ�N‰NÐOÐQUÐ`dˆN×eÐeð	füs_   ‚E
›AE
Á6DÂDÂ.DÂ6DÃ	E
Ã5D ÄDÄD ÄE
ÄD Ä#EÅE
ÅEÅE
c                   ó<   a € ] tR t^_t o RtRtRt^tV 3R ltRt	V t
R# )Ú_ClaimFc                ó„   <€ V ^8„  d   Qh/ S[ ;R&   S[P                  R,          ;R&   S[;R&   S[;R&   S[;R&   S[;R&   # )r   rG   NÚdispatch_taskÚacceptedÚ	completedÚfailedÚowners)r&   rP   ÚTaskÚboolr$   )r   Ú__classdict__s   "€r   r   Ú_Claim.__annotate___   sX   ø‡ ‚ á	�Hñ ñ —<‘< $Õ&Ñ&ñ ñ Ññ	 ñ
 Ññ ñ Ññ ñ �Oò r   r   N)Ú__name__Ú
__module__Ú__qualname__Ú__firstlineno__rg   rh   ri   rj   Ú__annotate_func__Ú__static_attributes__Ú__classdictcell__©rm   s   @r   rd   rd   _   s"   ø‡ € ð €HØ€IØ€FØ€F÷ ƒ r   rd   c                   ó<   a € ] tR t^it o RtR tR tR tR tRt	V t
R# )Ú_ErrorCallbackzKAdmit callback entry while keeping PTB's original registration/removal key.c                ó   € Wn         R # ©N©Ú__wrapped__)ÚselfÚcallbacks   &&r   Ú__init__Ú_ErrorCallback.__init__l   s   € Ø#Ör   c                ó,   € \        V P                  4      # rz   )Úhashr|   )r}   s   &r   Ú__hash__Ú_ErrorCallback.__hash__o   s   € Ü�D×$Ñ$Ó%Ð%r   c                ód   € \        V\        4      '       d   VP                  pV P                  V8H  # rz   )r#   rx   r|   )r}   Úothers   &&r   Ú__eq__Ú_ErrorCallback.__eq__r   s+   € Ü�eœ^×,Ò,Ø×%Ñ%ˆEØ×Ñ 5Ñ(Ð(r   c              ƒ  óÔ   "  € \        VP                  R R4      pVe   VP                  4       MRpVe   VP                  '       d   RVn        V P                  W4      G Rj  x€L
 #  L5i)Ú_current_claimNT)ÚgetattrÚapplicationr;   rj   rg   r|   )r}   ÚupdateÚcontextÚ	admissionÚclaims   &&&  r   Ú__call__Ú_ErrorCallback.__call__w   sZ   é € ô ˜G×/Ñ/Ð1AÀ4ÓHˆ	Ø#,Ò#8�	—‘”¸dˆØÒ §§ Ø!ˆEŒNØ×%Ñ% fÓ6×6Ð6Ñ6ùs   ‚AA(ÁA(Á!A&Á"A(r{   N)ro   rp   rq   rr   Ú__doc__r   rƒ   r‡   r‘   rt   ru   rv   s   @r   rx   rx   i   s!   ø‡ € ÙUò$ò&ò)÷
7ð 7r   rx   c                   óX   a a€ ] tR t^�t oRtRtV3R lV 3R lltV3R lR ltRtVt	V ;t
# )ÚPerChatUpdateProcessorat  Concurrent across chats, FIFO within one chat.

PTB's default processor (max_concurrent_updates=1) awaits every update inline, so one slow
handler deafens all chats; plain concurrency fixes that but lets a chat's second update finish
before its first. Each update here waits for the previous update of the same chat; updates
without a chat (inline queries) run unchained.
c                ó    <€ V ^8„  d   QhRS[ /# )r   Úmax_concurrent_updates)r$   )r   rm   s   "€r   r   Ú#PerChatUpdateProcessor.__annotate__Œ   s   ø€ ÷ 4ñ 4©sñ 4r   c                ó4   <€ \         SV `  V4       / V n        R # rz   )Úsuperr   Ú_tails)r}   r—   Ú	__class__s   &&€r   r   ÚPerChatUpdateProcessor.__init__Œ   s   ø€ Ü‰ÑÐ/Ô0Ø13ˆŽr   c                ó   <€ V ^8„  d   QhRR/# r   r   )r   rm   s   "€r   r   r˜   �   s   ø€ ÷ 0ñ 0¸Dñ 0r   c              ƒ  óv  a aa"  € \        VR R4      oSf   VG Rj  x€L
  R# S P                  P                  SP                  4      p\        P
                  ! 4       P                  4       oSS P                  SP                  &    Ve   \        P                  ! V4      G Rj  x€L
  VG Rj  x€L
  RVVV 3R llpVe   VP                  4       '       d
   V! 4        R# VP                  V4       R#  LÔ LP LH  RTTT 3R llpTe   TP                  4       '       d	   T! 4        i TP                  T4       i ; i5i)Úeffective_chatNc                 ó®   <€ SP                  R 4       SP                  P                  SP                  4      SJ d   SP                  SP                   R # R # rz   )Ú
set_resultr›   r;   Úid)Ú_prevÚchatrO   r}   s   &€€€r   ÚreleaseÚ9PerChatUpdateProcessor.do_process_update.<locals>.releasež   s=   ø€ Ø—‘ Ô%Ø—;‘;—?‘? 4§7¡7Ó+¨tÓ3ØŸ™ D§G¡GÒ,ñ 4r   rz   )
r‹   r›   r;   r£   rP   rQ   Úcreate_futureÚshieldrO   Úadd_done_callback)r}   r�   Ú	coroutineÚprevr¦   r¥   rO   s   f&&  @@r   Údo_process_updateÚ(PerChatUpdateProcessor.do_process_update�   sñ   úé € Ü�vÐ/°Ó6ˆØŠ<Ø�OˆOÙØ�{‰{�‰˜tŸw™wÓ'ˆÜ×'Ò'Ó)×7Ñ7Ó9ˆØ#ˆ�‰�D—G‘GÑð	0ØÒä—n’n TÓ*×*Ð*Ø�OˆO÷-ñ -ð Š|˜tŸy™yŸ{š{Ù–	à×&Ñ& wÖ/ñ) ñ +Ùø÷-ñ -ð Š|˜tŸy™yŸ{š{Ù•	à×&Ñ& wÕ/üsX   …D9œC1�A'D9ÂC7 Â"C3Â#	C7 Â,C5Â-C7 Â1#D9ÃD9Ã3C7 Ã5C7 Ã7$D6ÄD6Ä6D9)r›   )ro   rp   rq   rr   r“   Ú	__slots__r   r­   rt   ru   Ú__classcell__©rœ   rm   s   @@r   r•   r•   �   s*   ù‡ € ñð €I÷4ó 4÷0÷ 0ð 0r   r•   c                ó0   € V ^8„  d   QhR\         R\        /# )r   rK   r   )r&   r•   )r   s   "r   r   r   ª   s   € ÷ )ñ )¬ð )Ô0Fñ )r   c                ó¬   € V P                  R\        4      p\        V^ 4      pV^8  d"   \        P	                  RW\        4       \        p\        V4      # )z```platforms.telegram.extra.max_concurrent_updates`` (default 32); bad values warn and fall back.r—   z0[%s] Invalid max_concurrent_updates=%r; using %d)r;   ÚDEFAULT_MAX_CONCURRENT_UPDATESr
   r8   r9   r•   )ÚextrarK   ÚrawÚlimits   &&  r   Úbuild_update_processorr¸   ª   sM   € à
�)‰)Ð,Ô.LÓ
M€CÜ˜˜QÓ€EØˆq„yÜ�‰ÐIØÔ"@ô	Bä.ˆÜ! %Ó(Ð(r   c                   ó”   a a€ ] tR t^µt oR	tV 3R ltR
V 3R lltR t]3V 3R llt	RV 3R llt
RR ltRV 3R lltV 3R ltR	tVtV ;t# )ÚTelegramApplicationc               ó¼   <€ \         SV `  ! R/ VB  Wn        VP                  f&   \        \
        R ,          ,          ! RR R7      Vn        VP                  V n        R # )NÚtelegram_update_claim)Údefaultr   )rš   r   r   Ú_update_admissionr   rd   rŠ   )r}   r   Úkwargsrœ   s   &$,€r   r   ÚTelegramApplication.__init__¸   sL   ø€ Ü‰ÒÑ"˜6Ò"ØŒØ×$Ñ$Ò,Ü(2´6¸Dµ=Ö(AÐBYÐcgÔ(hˆGÔ%Ø9@×9RÑ9RˆÖr   c                óH   <€ \         SV `  W4       V P                  V4       R # rz   )rš   Úadd_handlerÚ_admit_callbacks)r}   ÚhandlerÚgrouprœ   s   &&&€r   rÂ   ÚTelegramApplication.add_handler¿   s   ø€ Ü‰Ñ˜GÔ+Ø×Ñ˜gÖ&r   c                ól  a€ \        V\        4      '       dV   . VP                  OVP                  OR  VP                  P                  4        4       O F  pV P                  V4       K  	  R# \        VRR4      oSe   \        SRR4      '       d   R# \        S4      V3R l4       pRVn	        W1n
        R# )c              3   ó4   "  € T F  q F  q"x € K  	  K  	  R # 5irz   r   )r)   ÚhandlersÚchilds   &  r   r-   Ú7TelegramApplication._admit_callbacks.<locals>.<genexpr>È   s   é € Ð`Ñ2I hÒW_ÈeœEÑW_™EÓ2Iùs   ‚Nr~   Ú_telegram_admittedFc              “   ó”  <"  € VP                   p\        VR R4      pVe   VP                  4       MRpVe#   \        SRR4      VP                  Jd   RVn        S! W4      G Rj  x€L
 pVeX   VP
                  '       d?   VP                  '       g-   \        P                  ! 4       VP                  J d   \        h V# RVn
        V#  La5i)rŠ   NÚ__self__T)rŒ   r‹   r;   r   rg   ri   rP   Úcurrent_taskrf   r   rh   )r�   rŽ   rŒ   r�   r�   Úresultr~   s   &&    €r   Úadmitted_callbackÚ?TelegramApplication._admit_callbacks.<locals>.admitted_callbackÏ   s»   øé € ð "×-Ñ-ˆKÜ Ð-=¸tÓDˆIØ'0Ò'<�I—M‘M”OÀ$ˆEØÒ ¤W¨X°zÀ4Ó%HÐP[×PcÑPcÓ%cØ!%�”Ù# FÓ4×4ˆFØÒ Ø—<—<�<¨¯¯¨ô ×+Ò+Ó-°×1DÑ1DÓDÜ4Ð4ð Eð ˆMð '+�E”OØˆMñ 5ùs   ƒA!CÁ$CÁ%CÁ?CÂ6CT)r#   r   Úentry_pointsÚ	fallbacksÚstatesÚvaluesrÃ   r‹   r   rÌ   r~   )r}   rÄ   rÊ   rÑ   r~   s   &&  @r   rÃ   Ú$TelegramApplication._admit_callbacksÃ   s¸   ø€ ô �gÔ2×3Ò3ðb˜7×/Ñ/ð b°'×2CÑ2Cð bÙ`°'·.±.×2GÑ2GÔ2IÓ`ób�à×%Ñ% eÖ,ñbñ Ü˜7 J°Ó5ˆØÒœw xÐ1EÀu×MÒMÙä	ˆx‹ô	ó 
ð	ð* 04ÐÔ,Ø,Ör   c                ó    <€ \        V\        4      '       g   \        V4      pV\        J d   \        SV `  V4       R# \        SV `  WR 7       R# ))ÚblockN)r#   rx   Ú_DEFAULT_BLOCKrš   Úadd_error_handler)r}   r~   rÙ   rœ   s   &&&€r   rÛ   Ú%TelegramApplication.add_error_handlerè   s?   ø€ Ü˜(¤N×3Ò3Ü% hÓ/ˆHà”NÓ"Ü‰GÑ% hÖ/ä‰GÑ% hÐ%Ö<r   c                óö   <a aa€ \         SS `  SW#VR 7      pS P                  P                  4       oSeE   SP                  '       d3   S;P                  ^,          un        VVV 3R lpVP                  V4       V# ))r�   Úis_error_handlerrK   c                 ó°   <€ V P                  4       '       d-   \        P                  ! S4      '       d   SP                  4        SP	                  SV 4       R # rz   )Ú	cancelledrP   ÚiscoroutineÚcloseÚ_release_claim)rO   r�   r«   r}   s   &€€€r   ÚfinishedÚ?TelegramApplication._Application__create_task.<locals>.finishedû   s:   ø€ à—>‘>×#Ò#¬×(;Ò(;¸I×(FÒ(FØ—O‘OÔ%Ø×#Ñ# E¨4Ö0r   )rš   Ú_Application__create_taskrŠ   r;   rj   rª   )	r}   r«   r�   rÞ   rK   rT   rä   r�   rœ   s	   ff&&&  @€r   ræ   Ú-TelegramApplication._Application__create_taskñ   sk   û€ ô ‰wÑ0Ø˜fÈdð 1ó Tˆà×#Ñ#×'Ñ'Ó)ˆØÒ §§ à�LŠL˜AÕ�L÷1ð ×"Ñ" 8Ô,Øˆr   c                ó˜  € Ve   VP                  4       '       d   RVn        V;P                  ^,          un        VP                  '       d   R # V P                  P                  VP
                   VP                  '       g%   VP                  '       d7   VP                  '       g#   \        V P                  VP
                  4       R # R # R # ©NT)	rà   ri   rj   r   Ú_inflight_update_idsrG   rg   rh   rU   )r}   r�   rT   s   &&&r   rã   Ú"TelegramApplication._release_claim  s~   € ØÒ §¡× 0Ò 0ØˆEŒLØ�Š˜Õ�Ø�<�<ˆ<ÙØ�L‰L×-Ñ-¨e¯i©iÐ8Ø�>�>ˆ>˜eŸoŸo˜o°e·l·l°lÜ˜DŸL™L¨%¯)©)Ö4ñ 7C™or   c              ƒ  óØ   <"  € V P                   P                  4       pVe   RVn        \        SV `  WW44      G R j  x€L
 pT;'       g    VR J;'       d    VP
                  '       * #  L+5iré   )rŠ   r;   ri   rš   Úprocess_errorrg   )r}   r�   ÚerrorÚjobr«   r�   Ústoppedrœ   s   &&&&&  €r   rí   Ú!TelegramApplication.process_error  sc   øé € Ø×#Ñ#×'Ñ'Ó)ˆØÒØˆEŒLÜ™Ñ-¨f¸SÓL×Lˆà×DÐD˜5¨Ð,×CÐC°U·^±^Ô1CÐDñ Mùs   ƒ9A*¼A(½A*Á
A*ÁA*c              ƒ  ó>  <"  € \        V\        4      '       g   \        SV `  V4      G R j  x€L
 # V P                  P
                  pV RVP                   2p\        V P                  V4       V P                  ;P                  ^,          un	        V P                  P                  pV P                  P                  pW49   g   W59   d   R # \        V\        P                  ! 4       4      pWeV&   V P                  P!                  V4      p \        SV `  V4      G R j  x€L
   T P                  P'                  T4       T P)                  T4       R #  EL$ L6  \"         d
    RTn        h i ; i  T P                  P'                  T4       T P)                  T4       i ; i5i)Nr/   T)r#   r   rš   Úprocess_updateÚbotr£   Ú	update_idrH   r   Ú_updates_dispatched_totalr@   rê   rd   rP   rÏ   rŠ   ÚsetÚBaseExceptionri   Úresetrã   )	r}   r�   r   rG   rF   Úpendingr�   Útokenrœ   s	   &&      €r   ró   Ú"TelegramApplication.process_update  sN  øé € Ü˜&¤&×)Ò)Ü™Ñ/°Ó7×7Ð7Ø—‘—‘ˆØ�˜˜&×*Ñ*Ð+Ð,ˆÜ�t—|‘| VÔ,à�‰×.Ò.°!Õ3Õ.Ø�|‰|×,Ñ,ˆØ—,‘,×3Ñ3ˆØŒ;˜#œ.ÙÜ�sœG×0Ò0Ó2Ó3ˆð �‰Ø×#Ñ#×'Ñ'¨Ó.ˆð	'Ü‘'Ñ(¨Ó0×0Ñ0ð
 ×Ñ×%Ñ% eÔ,Ø×Ñ Ö&ò- 8ñ  1øÜô 	ØˆEŒLØð	ûð ×Ñ×%Ñ% eÔ,Ø×Ñ Õ&üsF   ƒ)F¬E­CFÄ
E ÄEÄE Ä"/FÅE ÅE)Å)E, Å,.FÆF)rŠ   r   )rX   )NFNrz   )NN)ro   rp   rq   rr   r¯   r   rÂ   rÃ   rÚ   rÛ   ræ   rã   rí   ró   rt   ru   r°   r±   s   @@r   rº   rº   µ   s?   ù‡ € Ø-€IõS÷'ò#-ðJ 1?÷ =÷ô&5÷E÷'õ 'r   rº   i€Q ))r“   rP   r2   Úloggingr<   Úcontextvarsr   Údataclassesr   Ú	functoolsr   Útelegramr   Útelegram.extr   r   r   r	   Úgateway.platforms._sharedr
   Úgateway.platforms.helpersr   Úutilsr   Ú	getLoggerro   r8   ÚobjectrÚ   r´   rA   r=   r   rH   rU   rS   rd   rx   r•   r¸   rº   r   r   r   Ú<module>r     s¸   ðñó Û Û Û Ý "Ý !Ý å ß hÓ hå 1Ý 1Ý #à	×	Ò	˜8Ó	$€á“€Ø!#Ð Ø€	ð
 #Ð òSõ2õ4Gõfð" ÷ð ó ð÷7ñ 7ô0&0Ð2ô &0õR)ôy'˜+ö y'r   