§
    ãü¿j—,  ã                   ó@  — 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mZ  e	ej
        d¦  «        rej
                             d¬¦  «          ee¦  «                             ¦   «         j        j        dz  dz  ZddlZddlZddlZ ee¦  «                             ¦   «         j        j        Z ee¦  «        ej        vr$ej                             d ee¦  «        ¦  «         	 dd	lmZmZ n# e$ r dZdZY nw xY w	 dd
lmZ ddlmZ n# e$ r dZdZY nw xY wdefd„Zdefd„Z  G d„ dej!        j"        ¦  «        Z#dde$fd„Z%e&dk    rØdZ' e(ej)        ¦  «        dk    rµej)        d         dk    r+ e(ej)        ¦  «        dk    r e$ej)        d         ¦  «        Z'nydej)        v rKej)         *                    d¦  «        Z+e+dz    e(ej)        ¦  «        k     r e$ej)        e+dz            ¦  «        Z'n%	  e$ej)        d         ¦  «        Z'n# e,$ r dZ'Y nw xY w e%e'¦  «         dS dS )zÌ
FreeExile Mobile WebApp Local Testing Server.
Allows testing the 2.5D Mobile MMORPG on local smartphones (iPhone/Android)
over Wi-Fi without requiring a Mac hardware setup or an Apple Developer account.
é    N)ÚPathÚreconfigureúutf-8)ÚencodingÚclientÚwebapp)ÚFeedbackServiceÚSystemDiagnosticsDTO)ÚWildernessMapGenerator)Úserialize_map_gridÚreturnc                  ó:  — t          j         t           j        t           j        ¦  «        } 	 |                      d¦  «         |                      ¦   «         d         }n# t
          $ r d}Y nw xY w|                      ¦   «          n# |                      ¦   «          w xY w|S )zGDetects local LAN IPv4 address for mobile device connection over Wi-Fi.)z8.8.8.8éP   r   z	127.0.0.1)ÚsocketÚAF_INETÚ
SOCK_DGRAMÚconnectÚgetsocknameÚ	ExceptionÚclose)ÚsÚips     ú+C:\Projects\FreeExile\tools\serve_webapp.pyÚget_local_ipr   *   s�   € åŒ•f”n¥fÔ&7Ñ8Ô8€AðØ	�	Š	�/Ñ"Ô"Ð"Ø�]Š]‰_Œ_˜QÔˆˆøÝð ð ð Øˆˆˆðøøøð 	
�Š‰	Œ	ˆ	ˆ	øˆ�Š‰	Œ	ˆ	ˆ	øøøØ€Is)   «/A ÁB ÁA*Á'B Á)A*Á*B ÂBc                  ó:  — t          j        d¦  «        } | sdS 	 t          j        | ddgddd¬¦  «        }|j        dk    rJ|j                             ¦   «         r1|j                             ¦   «                              ¦   «         d         S n# t          $ r Y nw xY wdS )	zEDetects Tailscale IPv4 address if Tailscale is installed and running.Ú	tailscaleÚ r   z-4Té   )Úcapture_outputÚtextÚtimeoutr   )	ÚshutilÚwhichÚ
subprocessÚrunÚ
returncodeÚstdoutÚstripÚ
splitlinesr   )Útailscale_binÚress     r   Úget_tailscale_ipr,   7   s¯   € å”L Ñ-Ô-€MØð ØˆrðÝŒn˜m¨T°4Ð8ÈÐTXÐbcÐdÑdÔdˆØŒ>˜QÒÐ 3¤:×#3Ò#3Ñ#5Ô#5ÐØ”:×#Ò#Ñ%Ô%×0Ò0Ñ2Ô2°1Ô5Ð5øøÝð ð ð Øˆðøøøàˆ2s   šA/B Â
BÂBc                   ó>   ‡ — e Zd Zˆ fd„Zˆ fd„Zd„ Zd„ Zˆ fd„Zˆ xZS )ÚFreeExileHTTPRequestHandlerc                 ób   •—  t          ¦   «         j        |dt          t          ¦  «        i|¤Ž d S )NÚ	directory)ÚsuperÚ__init__ÚstrÚ
WEBAPP_DIR)ÚselfÚargsÚkwargsÚ	__class__s      €r   r2   z$FreeExileHTTPRequestHandler.__init__F   s0   ø€ Ø�‰ŒÔ˜$ÐD­#­j©/¬/ÐD¸VÐDÐDÐDÐDÐDó    c                 óø   •— |                       dd¦  «         |                       dd¦  «         |                       dd¦  «         |                       dd¦  «         t          ¦   «                              ¦   «          d S )	NúAccess-Control-Allow-OriginÚ*zAccess-Control-Allow-MethodszGET, POST, OPTIONSzAccess-Control-Allow-HeadersúContent-TypeúCache-Controlz#no-cache, no-store, must-revalidate)Úsend_headerr1   Úend_headers)r5   r8   s    €r   r@   z'FreeExileHTTPRequestHandler.end_headersI   s|   ø€ à×ÒÐ6¸Ñ<Ô<Ð<Ø×ÒÐ7Ð9MÑNÔNÐNØ×ÒÐ7¸ÑHÔHÐHØ×Ò˜Ð*OÑPÔPÐPÝ‰Œ×ÒÑÔÐÐÐr9   c                 óX   — |                       d¦  «         |                      ¦   «          d S )NéÈ   )Úsend_responser@   )r5   s    r   Ú
do_OPTIONSz&FreeExileHTTPRequestHandler.do_OPTIONSQ   s.   € Ø×Ò˜3ÑÔÐØ×ÒÑÔÐÐÐr9   c                 óŽ  — | j         dk    �r"	 t          | j                             dd¦  «        ¦  «        }| j                             |¦  «        }t          j        |                     d¦  «        ¦  «        }|                     di ¦  «        }d }t          �r"t          |                     dd¦  «        |                     dd	¦  «        |                     d
d¦  «        t          |                     dd¦  «        ¦  «        t          |                     dd¦  «        ¦  «        |                     dd¦  «        t          |                     dd¦  «        ¦  «        t          |                     dd¦  «        ¦  «        t          |                     dd¦  «        ¦  «        |                     dd¦  «        ¬¦
  «
        }t          rÓt          ¦   «         }|                     t          |                     dd¦  «        ¦  «        t          |                     dd¦  «        ¦  «        t          |                     dd¦  «        ¦  «        t          |                     dd ¦  «        ¦  «        t          |                     d!d ¦  «        ¦  «        |¬"¦  «        \  }}}	nd#\  }}}	|||	d$œ}
t          j        |
d%¬&¦  «                             d¦  «        }|                      |rd'nd(¦  «         |                      d)d*¦  «         |                      dt          t%          |¦  «        ¦  «        ¦  «         |                      ¦   «          | j                             |¦  «         d S # t,          $ rË}t          j        d%t          |¦  «        d+œ¦  «                             d¦  «        }|                      d,¦  «         |                      d)d*¦  «         |                      dt          t%          |¦  «        ¦  «        ¦  «         |                      ¦   «          | j                             |¦  «         Y d }~d S d }~ww xY w|                      d-d.¦  «         d S )/Nú/api/feedbackúContent-Lengthr   r   ÚdiagnosticsÚclient_platformÚiOSÚ
os_versionziOS 18.2Údevice_modelziPhone 16 Pro MaxÚcurrent_fpsg      ^@Úcurrent_ping_msé   Úcurrent_zone_nameu   Cá»• Tráº¥n Huyáº¿t LÃ¢nÚplayer_xg        Úplayer_yÚplayer_zÚgame_build_versionzv2.0-Authoritative)
rI   rK   rL   rM   rN   rP   rQ   rR   rS   rT   Ú	player_idi'  Úplayer_nameu   VÃ´ Danh LÃ£ng KhÃ¡chÚcategoryÚGAMEPLAY_SUGGESTIONÚtitler   Úcontent)rU   rV   rW   rY   rZ   rH   )Fr   z(Feedback service not available on server)ÚsuccessÚfeedback_idÚmessageF©Úensure_asciirB   i�  r=   úapplication/json; charset=utf-8)r[   Úerroréô  i”  zEndpoint not found)ÚpathÚintÚheadersÚgetÚrfileÚreadÚjsonÚloadsÚdecoder
   Úfloatr	   Úsubmit_feedbackr3   ÚdumpsÚencoderC   r?   Úlenr@   ÚwfileÚwriter   Ú
send_error)r5   Úcontent_lengthÚbodyÚdataÚ	diag_dataÚdiagÚfeedback_servicer[   Úfb_idÚmsgÚres_dataÚ	res_bytesÚeÚ	err_bytess                 r   Údo_POSTz#FreeExileHTTPRequestHandler.do_POSTU   sï  € ØŒ9˜Ò'Ñ'ð3,Ý!$ T¤\×%5Ò%5Ð6FÈÑ%JÔ%JÑ!KÔ!K�Ø”z—’ ~Ñ6Ô6�Ý”z $§+¢+¨gÑ"6Ô"6Ñ7Ô7�à ŸHšH ]°BÑ7Ô7�	Ø�Ý'ñ Ý/Ø(1¯ªÐ6GÈÑ(OÔ(OØ#,§=¢=°¸zÑ#JÔ#JØ%.§]¢]°>ÐCVÑ%WÔ%WÝ$)¨)¯-ª-¸ÀuÑ*MÔ*MÑ$NÔ$NÝ(+¨I¯MªMÐ:KÈRÑ,PÔ,PÑ(QÔ(QØ*3¯-ª-Ð8KÐMgÑ*hÔ*hÝ!& y§}¢}°ZÀÑ'EÔ'EÑ!FÔ!FÝ!& y§}¢}°ZÀÑ'EÔ'EÑ!FÔ!FÝ!& y§}¢}°ZÀÑ'EÔ'EÑ!FÔ!FØ+4¯=ª=Ð9MÐOcÑ+dÔ+dðñ ô �Dõ #ð `Ý'6Ñ'8Ô'8Ð$Ø*:×*JÒ*JÝ"% d§h¢h¨{¸EÑ&BÔ&BÑ"CÔ"CÝ$'¨¯ª°Ð@WÑ(XÔ(XÑ$YÔ$YÝ!$ T§X¢X¨jÐ:OÑ%PÔ%PÑ!QÔ!QÝ! $§(¢(¨7°BÑ"7Ô"7Ñ8Ô8Ý # D§H¢H¨Y¸Ñ$;Ô$;Ñ <Ô <Ø$(ð +Kñ +ô +Ñ'�G˜U C Cð +`Ñ'�G˜U Cð  'Ø#(Ø"ðð �õ
 !œJ x¸eÐDÑDÔD×KÒKÈGÑTÔT�	Ø×"Ò"¨'Ð#: 3 3°sÑ;Ô;Ð;Ø× Ò  Ð1RÑSÔSÐSØ× Ò Ð!1µ3µs¸9±~´~Ñ3FÔ3FÑGÔGÐGØ× Ò Ñ"Ô"Ð"Ø”
× Ò  Ñ+Ô+Ð+Ð+Ð+øÝð ,ð ,ð ,Ý œJ°5Å3ÀqÁ6Ä6Ð'JÐ'JÑKÔK×RÒRÐSZÑ[Ô[�	Ø×"Ò" 3Ñ'Ô'Ð'Ø× Ò  Ð1RÑSÔSÐSØ× Ò Ð!1µ3µs¸9±~´~Ñ3FÔ3FÑGÔGÐGØ× Ò Ñ"Ô"Ð"Ø”
× Ò  Ñ+Ô+Ð+Ð+Ð+Ð+Ð+Ð+Ð+øøøøð,øøøð �OŠO˜CÐ!5Ñ6Ô6Ð6Ð6Ð6s   ŽMM Í
P,Í!C P'Ð'P,c           	      ót	  •— | j                              d¦  «        �rÈ	 t          r1t          ¦   «         }|                     d¬¦  «        }d„ |D ¦   «         }ng }t	          j        d|id¬¦  «                             d¦  «        }|                      d	¦  «         |                      d
d¦  «         |                      dt          t          |¦  «        ¦  «        ¦  «         |                      ¦   «          | j                             |¦  «         d S # t          $ rÊ}t	          j        dt          |¦  «        i¦  «                             d¦  «        }|                      d¦  «         |                      d
d¦  «         |                      dt          t          |¦  «        ¦  «        ¦  «         |                      ¦   «          | j                             |¦  «         Y d }~d S d }~ww xY w| j                              d¦  «        �r˜	 dd l}|j                             | j         ¦  «        }|j                             |j        ¦  «        }	|	                     ddg¦  «        d         }
t+          |	                     ddg¦  «        d         ¦  «        }|	                     dd g¦  «        d         }t,          rùt.          ròt-          j        |
|¬¦  «        }|                     ||
¬¦  «        }t/          |¦  «        }|                      d	¦  «         |                      d
d¦  «         |                      dt          t          |¦  «        ¦  «        ¦  «         |                      dd¦  «         |                      dd¦  «         |                      ¦   «          | j                             |¦  «         n|                      dd¦  «         d S d S # t          $ rÊ}t	          j        dt          |¦  «        i¦  «                             d¦  «        }|                      d¦  «         |                      d
d¦  «         |                      dt          t          |¦  «        ¦  «        ¦  «         |                      ¦   «          | j                             |¦  «         Y d }~d S d }~ww xY wt7          ¦   «                              ¦   «          d S )NrF   é   )Úlimitc                 ó€   — g | ];}|j         |j        |j        |j        |j        |j        |j        |j        |j        d œ	‘Œ<S )©	r\   rU   rV   rW   rY   rZ   ÚstatusÚadmin_responseÚcreated_at_msr…   )Ú.0Úfs     r   ú
<listcomp>z6FreeExileHTTPRequestHandler.do_GET.<locals>.<listcomp>”   s_   € ð ð ð ð ð ,-¬=Ø)*¬Ø+,¬=Ø()¬
Ø%&¤WØ'(¤yØ&'¤hØ./Ô.>Ø-.¬_ð
ð 
ðð ð r9   Ú	feedbacksFr^   r   rB   r=   r`   rG   ra   rb   z/api/mapr   Úzone_idÚzone_tang_kiem_nhaiÚseedé*   Úbiome)Úbiome_id)r�   r�   zapplication/octet-streamr;   r<   r>   zno-cachez$WildernessMapGenerator not available)rc   Ú
startswithr	   Úlist_feedbacksri   rn   ro   rC   r?   r3   rp   r@   rq   rr   r   Úurllib.parseÚparseÚurlparseÚparse_qsÚqueryrf   rd   r   r   Úfor_zoneÚgeneraters   r1   Údo_GET)r5   ry   rŒ   Úrecordsr}   r~   r   ÚurllibÚparsedÚparamsr�   r�   Úbiome_paramÚgenÚ	grid_dataÚbinary_payloadr8   s                   €r   rœ   z"FreeExileHTTPRequestHandler.do_GETŽ   s¡  ø€ ØŒ9×Ò Ñ0Ô0ñ @	ð!,Ý"ð !Ý'6Ñ'8Ô'8Ð$Ø 0× ?Ò ?ÀbÐ ?Ñ IÔ I�Iðð ð "+ðñ ô �G�Gð !�Gå œJ¨°WÐ'=ÈEÐRÑRÔR×YÒYÐZaÑbÔb�	Ø×"Ò" 3Ñ'Ô'Ð'Ø× Ò  Ð1RÑSÔSÐSØ× Ò Ð!1µ3µs¸9±~´~Ñ3FÔ3FÑGÔGÐGØ× Ò Ñ"Ô"Ð"Ø”
× Ò  Ñ+Ô+Ð+Ð+Ð+øÝð ,ð ,ð ,Ý œJ¨µ°Q±´Ð'8Ñ9Ô9×@Ò@ÀÑIÔI�	Ø×"Ò" 3Ñ'Ô'Ð'Ø× Ò  Ð1RÑSÔSÐSØ× Ò Ð!1µ3µs¸9±~´~Ñ3FÔ3FÑGÔGÐGØ× Ò Ñ"Ô"Ð"Ø”
× Ò  Ñ+Ô+Ð+Ð+Ð+Ð+Ð+Ð+Ð+øøøøð,øøøð ŒY×!Ò! *Ñ-Ô-ñ 	ð,Ø#Ð#Ð#Ð#Øœ×.Ò.¨t¬yÑ9Ô9�Øœ×.Ò.¨v¬|Ñ<Ô<�Ø Ÿ*š* YÐ1FÐ0GÑHÔHÈÔK�Ý˜6Ÿ:š: f¨r¨dÑ3Ô3°AÔ6Ñ7Ô7�Ø$Ÿjšj¨°4°&Ñ9Ô9¸!Ô<�Ý)ð QÕ.@ð QÝ0Ô9¸'ÈKÐXÑXÔX�CØ #§¢°$À Ñ HÔ H�IÝ%7¸	Ñ%BÔ%B�NØ×&Ò& sÑ+Ô+Ð+Ø×$Ò$ ^Ð5OÑPÔPÐPØ×$Ò$Ð%5µs½3¸~Ñ;NÔ;NÑ7OÔ7OÑPÔPÐPØ×$Ò$Ð%BÀCÑHÔHÐHØ×$Ò$ _°jÑAÔAÐAØ×$Ò$Ñ&Ô&Ð&Ø”J×$Ò$ ^Ñ4Ô4Ð4Ð4à—O’O CÐ)OÑPÔPÐPÐPÐPð 5Ð4øõ ð ,ð ,ð ,Ý œJ¨µ°Q±´Ð'8Ñ9Ô9×@Ò@ÀÑIÔI�	Ø×"Ò" 3Ñ'Ô'Ð'Ø× Ò  Ð1RÑSÔSÐSØ× Ò Ð!1µ3µs¸9±~´~Ñ3FÔ3FÑGÔGÐGØ× Ò Ñ"Ô"Ð"Ø”
× Ò  Ñ+Ô+Ð+Ð+Ð+Ð+Ð+Ð+Ð+øøøøð,øøøõ ‰GŒG�NŠNÑÔÐÐÐs3   žC.D Ä
G"ÄB?GÇG"ÈF<O Ï
RÏB?RÒR)	Ú__name__Ú
__module__Ú__qualname__r2   r@   rD   r€   rœ   Ú__classcell__)r8   s   @r   r.   r.   E   s—   ø€ € € € € ðEð Eð Eð Eð Eðð ð ð ð ðð ð ð77ð 77ð 77ðrAð Að Að Að Að Að Að Að Ar9   r.   é˜  Úportc           	      ó>  — t          ¦   «         }t          ¦   «         }t          d¦  «         t          d¦  «         t          d¦  «         t          d¦  «         t          d| › d�¦  «         t          d|› d| › d�¦  «         |rt          d|› d| › d	| › d
�¦  «         t          d¦  «         t          d¦  «         |rt          d|› d| › d�¦  «         nt          d|› d| › d�¦  «         t          d¦  «         	 ddlm}  |dd¬¦  «        }|                     ¦   «          t          d¦  «         n)# t          $ r}t          d|› �¦  «         Y d }~nd }~ww xY wt          d¦  «          G d„ dt          j        t          j	        ¦  «        } |d| ft          ¦  «        5 }	 |                     ¦   «          nO# t          $ r t          d¦  «         Y n4t          $ r(}t          d|› �t          j        ¬¦  «         Y d }~nd }~ww xY wd d d ¦  «         d S # 1 swxY w Y   d S )NzA=================================================================z1   FREEEXILE: MOBILE NATIVE WEBAPP TESTING SERVERz4   (Test on iPhone / Android via Wi-Fi or Tailscale)z,
[+] Local Browser URL   : http://localhost:z/index.htmlz![+] Phone Local Wi-Fi   : http://ú:z![+] Phone via Tailscale : http://u   /index.html (hoáº·c http://ds1:z/index.html)z*
Instructions for iOS (iPhone 12 Pro Max):z6  1. Ensure Tailscale VPN is CONNECTED on your iPhone.z1  2. Open Safari on iPhone and browse to: http://u\     3. Tap 'Share' (icon vuÃ´ng cÃ³ mÅ©i tÃªn) -> 'ThÃªm vÃ o MH chÃ­nh' (Add to Home Screen).r   )Úget_bridge_instancez0.0.0.0i�  )Úhostrª   z=[+] WebSocket Gateway   : ws://localhost:8080 (Bridge active)z"[!] WebSocket Bridge not started: z Press Ctrl+C to stop the server.c                   ó   — e Zd ZdZdZdZdS )ú)start_server.<locals>.ThreadingHTTPServerTé@   N)r¥   r¦   r§   Údaemon_threadsÚallow_reuse_addressÚrequest_queue_size© r9   r   ÚThreadingHTTPServerr°   î   s!   € € € € € ØˆØ"ÐØÐÐÐr9   r¶   z
[!] Server stopped cleanly.z
[!] Server error: )Úfile)r   r,   ÚprintÚ server.gateway.ws_gateway_bridger­   Ústart_backgroundr   ÚsocketserverÚThreadingMixInÚ	TCPServerr.   Úserve_foreverÚKeyboardInterruptÚsysÚstderr)rª   Úlocal_ipÚts_ipr­   Ú	ws_bridger~   r¶   Úhttpds           r   Ústart_serverrÆ   Ò   s  € Ý‰~Œ~€HÝÑÔ€EÝ	ˆ(�O„O€OÝ	Ð
=Ñ>Ô>Ð>Ý	Ð
@ÑAÔAÐAÝ	ˆ(�O„O€OÝ	Ð
K¸$Ð
KÐ
KÐ
KÑLÔLÐLÝ	Ð
J¨hÐ
JÐ
J¸Ð
JÐ
JÐ
JÑKÔKÐKØð sÝÐq°%ÐqÐq¸$ÐqÐqÐ_cÐqÐqÐqÑrÔrÐrÝ	Ð
7Ñ8Ô8Ð8Ý	Ð
BÑCÔCÐCØð `ÝÐ[À%Ð[Ð[È$Ð[Ð[Ð[Ñ\Ô\Ð\Ð\åÐ^À(Ð^Ð^ÈTÐ^Ð^Ð^Ñ_Ô_Ð_Ý	Ð
hÑiÔiÐið8ØHÐHÐHÐHÐHÐHØ'Ð'¨Y¸TÐBÑBÔBˆ	Ø×"Ò"Ñ$Ô$Ð$ÝÐNÑOÔOÐOÐOøÝð 8ð 8ð 8ÝÐ6°1Ð6Ð6Ñ7Ô7Ð7Ð7Ð7Ð7Ð7Ð7øøøøð8øøøõ 
Ð
,Ñ-Ô-Ð-ð ð  ð  ð  ð  �lÔ9½<Ô;Qñ  ô  ð  ð
 
Ð	˜i¨Ð.Õ0KÑ	LÔ	Lð ?ÐPUð	?Ø×ÒÑ!Ô!Ð!Ð!øÝ ð 	3ð 	3ð 	3ÝÐ1Ñ2Ô2Ð2Ð2Ð2Ýð 	?ð 	?ð 	?ÝÐ,¨Ð,Ð,µ3´:Ð>Ñ>Ô>Ð>Ð>Ð>Ð>Ð>Ð>øøøøð	?øøøð?ð ?ð ?ñ ?ô ?ð ?ð ?ð ?ð ?ð ?ð ?ð ?øøøð ?ð ?ð ?ð ?ð ?ð ?s`   Ã:6D1 Ä1
EÄ;EÅEÆHÆ!F6Æ5HÆ6HÇHÇ	HÇG=Ç8HÇ=HÈHÈHÈHÚ__main__é   z--portr   )r©   )-Ú__doc__Úhttp.serverÚhttpr   r»   rÀ   ÚosÚpathlibr   Úhasattrr'   r   Ú__file__ÚresolveÚparentr4   ri   r$   r"   ÚPROJECT_ROOTr3   rc   ÚinsertÚ server.feedback.feedback_servicer	   r
   ÚImportErrorÚ%server.world.wilderness_map_generatorr   Ú"server.world.map_binary_serializerr   r   r,   ÚserverÚSimpleHTTPRequestHandlerr.   rd   rÆ   r¥   rª   rp   ÚargvÚindexÚidxÚ
ValueErrorrµ   r9   r   ú<module>rÞ      sm  ððð ð Ð Ð Ð Ø €€€Ø Ð Ð Ð Ø 
€
€
€
Ø 	€	€	€	Ø Ð Ð Ð Ð Ð à
€7ˆ3Œ:�}Ñ%Ô%ð -Ø„J×Ò GÐÑ,Ô,Ð,àˆT�(‰^Œ^×#Ò#Ñ%Ô%Ô,Ô3°hÑ>ÀÑI€
ð €€€Ø Ð Ð Ð Ø €€€àˆt�H‰~Œ~×%Ò%Ñ'Ô'Ô.Ô5€Ø€3€|ÑÔ˜CœHÐ$Ð$Ø„H‡O‚O�A�s�s˜<Ñ(Ô(Ñ)Ô)Ð)ð ØVÐVÐVÐVÐVÐVÐVÐVÐVøØð  ð  ð  Ø€OØÐÐÐð øøøðØLÐLÐLÐLÐLÐLØEÐEÐEÐEÐEÐEÐEøØð ð ð Ø!ÐØÐÐÐðøøøð

�cð 
ð 
ð 
ð 
ð˜#ð ð ð ð ðJð Jð Jð Jð J $¤+Ô"Fñ Jô Jð JðZ'?ð '?�sð '?ð '?ð '?ð '?ðT ˆzÒÐØ€DØ
€sˆ3Œ8�}„}�qÒÐØŒ8�AŒ;˜(Ò"Ð" s s¨3¬8¡}¤}°qÒ'8Ð'8Ø�3�s”x ”{Ñ#Ô#ˆDˆDØ˜œÐ!Ð!Ø”(—.’. Ñ*Ô*ˆCØ�Q‰w˜˜˜SœX™œÒ&Ð&Ø�s˜3œ8 C¨!¡GÔ,Ñ-Ô-�øðØ�s˜3œ8 Aœ;Ñ'Ô'��øØð ð ð Ø���ðøøøà€L�ÑÔÐÐÐð Ðs6   Ã C) Ã)	C5Ã4C5Ã9D Ä	DÄDÇ-H ÈHÈH