ó
    ‚3Åj“.  ã                   ó>  • S r SSKrSSKrSSKrSSKrSSKJrJrJr  SSKJ	r	J
r
Jr  SSKJrJr  SSKJr  SSKrSSKJr  SrS	rS
r\R.                  " S\-   S-   \" \5      -   S-   5      rSrSrS\4S jrS\
\   4S jrS\S\4S jrS\S\4S jrS\S\ S\ S\4S jr!S\S\ S\	\RD                     4S jr#S\S\ S\ S\$4S jr%S\S\ S\$4S jr&S\S\ S\ S\\$\
\   \
S    4   4S! jr'S\S"\ S#\ S\$4S$ jr(S\S\ S\	\)   4S% jr*S\S\ S\	S    4S& jr+S\S\ S'\ S\ S\$4
S( jr,g))u£	  Partner-cÃ©gek kÃ³dos Ã¶sszekapcsolÃ¡sa (2026-10-06).

MI EZ?
    A bÃ©rbeadÃ¡s/kihelyezÃ©s bÃ©rlÅ‘-vÃ¡lasztÃ³ja korÃ¡bban AZ Ã–SSZES rendszerben lÃ©vÅ‘ aktÃ­v cÃ©get nÃ©v
    szerint felsorolta - ez Ã¶nmagÃ¡ban adatszivÃ¡rgÃ¡s volt (egy cÃ©g megtudhatta, kik mÃ¡sok
    hasznÃ¡ljÃ¡k a rendszert), nem csak UX-problÃ©ma. A user kÃ©rÃ©se szerint ehelyett kÃ©t cÃ©g csak
    akkor kapcsolÃ³dhat Ã¶ssze, ha mindketten, A RENDSZEREN KÃ�VÃœL (telefon, e-mail, szemÃ©lyesen)
    megosztanak egymÃ¡ssal egy meghÃ­vÃ³kÃ³dot.

HOGYAN MÅ°KÃ–DIK?
    1. CÃ©g A egy Admin/EmelÅ‘gÃ©p Ã¼gyintÃ©zÅ‘ jogÃº felhasznÃ¡lÃ³ja meghÃ­vÃ³kÃ³dot generÃ¡l
       (`kod_general`) - ez EGYSZER jelenik meg a kÃ©pernyÅ‘n, a cÃ©gnek magÃ¡nak kell Ã¡tadnia CÃ©g
       B-nek, a rendszer sosem kÃ¼ldi el automatikusan.
    2. CÃ©g B egy Admin/EmelÅ‘gÃ©p Ã¼gyintÃ©zÅ‘ jogÃº felhasznÃ¡lÃ³ja beÃ­rja a kÃ³dot
       (`kod_beiranyitasa`) - ha Ã©rvÃ©nyes (nem lejÃ¡rt, nem hasznÃ¡lt, nem a sajÃ¡t cÃ©ge kÃ³dja),
       azonnal lÃ©trejÃ¶n egy AktÃ­v CegPartnerseg mindkÃ©t cÃ©g kÃ¶zÃ¶tt.
    3. InnentÅ‘l CÃ©g A Ã©s CÃ©g B egymÃ¡st lÃ¡tjÃ¡k a bÃ©rbeadÃ¡s/kihelyezÃ©s bÃ©rlÅ‘-vÃ¡lasztÃ³jÃ¡ban
       (routers/machines.py, berlo_cegek_valaszthato) - de senki mÃ¡st.
    A konkrÃ©t gÃ©p-kihelyezÃ©st a bÃ©rlÅ‘nek tovÃ¡bbra is EGYEDILEG kell jÃ³vÃ¡hagynia
    (BerletiIdoszak.jovahagyva) - a partnersÃ©g csak a vÃ¡lasztÃ¡si kÃ¶rt szÅ±kÃ­ti.

FORMÃ�TUM
    10 karakter, 32 betÅ±s Ã¡bÃ©cÃ©bÅ‘l (nincs Ã¶sszetÃ©veszthetÅ‘ I, O, 0, 1 - ugyanaz az Ã¡bÃ©cÃ©, mint a
    2FA mentÅ‘kÃ³doknÃ¡l), kijelzÃ©skor "ABCDE-FGHJK". BeÃ­rÃ¡skor a kis/nagybetÅ±, a szÃ³kÃ¶z Ã©s a
    kÃ¶tÅ‘jel nem szÃ¡mÃ­t.

TÃ�ROLÃ�S (biztonsÃ¡g)
    Az adatbÃ¡zisban SOHA nincs nyers kÃ³d: csak HMAC-SHA256 lenyomat (kulcs: SECRET_KEY) - egy
    adatbÃ¡zis-kiszivÃ¡rgÃ¡s Ã¶nmagÃ¡ban nem ad hasznÃ¡lhatÃ³ kÃ³dot. A kÃ³d 72 Ã³rÃ¡ig Ã©rvÃ©nyes Ã©s csak
    EGYSZER hasznÃ¡lhatÃ³ fel (atomi: `UPDATE ... WHERE felhasznalva_at IS NULL`).

TALÃ�LGATÃ�S ELLEN
    A bevÃ¡ltÃ¡s (redeem) mÃ¡r bejelentkezett Admin/EÃœI usert igÃ©nyel (nem anonim), a kÃ³d 50 bites
    (32^10), Ã‰S a `tul_sok_sikertelen_probalkozas_e` egy Ã³rÃ¡nkÃ©nti, felhasznÃ¡lÃ³nkÃ©nti korlÃ¡tot ad
    (AuditLog-alapÃº, nem folyamat-memÃ³riÃ¡ban Ã©l, Ã­gy workerek kÃ¶zÃ¶tt konzisztens - l.
    docs/LOGIN_VEDELEM.md hasonlÃ³ indoklÃ¡sÃ¡t a memÃ³ria-alapÃº szÃ¡mlÃ¡lÃ³k hibÃ¡jÃ¡rÃ³l).

Egyik fÃ¼ggvÃ©ny sem commitol (a hÃ­vÃ³ commitol, a naplÃ³bejegyzÃ©ssel egy tranzakciÃ³ban).é    N)ÚdatetimeÚ	timedeltaÚtimezone)ÚListÚOptionalÚTuple)ÚselectÚupdate)ÚSession)Ú
SECRET_KEYé
   éH   Ú ABCDEFGHJKLMNPQRSTUVWXYZ23456789Ú[z]{Ú}é   é<   Úreturnc                  ód   • [         R                  " [        R                  5      R	                  S S9$ )N)Útzinfo)r   Únowr   ÚutcÚreplace© ó    Ú%/var/www/website/partner_ceg_utils.pyÚ_mostr   =   s#   € Ü�<Š<œŸ™Ó%×-Ñ-°TÐ-Ð:Ð:r   c                 ó¶   • [        U [        5      (       d  g[        R                  " SSU 5      R	                  5       n[
        R                  U5      (       a  U$ S$ )uÅ   A beÃ­rt kÃ³d normalizÃ¡lt alakja (nagybetÅ±, szÃ³kÃ¶z Ã©s kÃ¶tÅ‘jel nÃ©lkÃ¼l), vagy None, ha nem
lehet Ã©rvÃ©nyes kÃ³d (rossz hossz / nem megengedett karakter) - ilyenkor DB-lekÃ©rdezÃ©s sem kell.Nz[\s\-_]Ú )Ú
isinstanceÚstrÚreÚsubÚupperÚ_MINTAÚ	fullmatch)ÚkodÚtisztas     r   Ú
normalizalr)   A   sJ   € ô �cœ3×ÑØÜ�VŠV�J  CÓ(×.Ñ.Ó0€FÜ×%Ñ% f×-Ñ-ˆ6Ð7°4Ð7r   Únormalizaltc                 ó:   • U S[         S-   S-   U [         S-  S -   $ )u   KijelzÃ©sre: "ABCDE-FGHJK".Né   Ú-)Ú	KOD_HOSSZ©r*   s    r   Úformazr0   J   s(   € à�œ	 Q™Ð'¨#Ñ-°¼IÈ¹N¸OÐ0LÑLÐLr   c                 ó¶   • [         R                  " [        R                  " S5      SU  3R                  S5      [        R
                  5      R                  5       $ )uÄ   A kÃ³d HMAC-SHA256 lenyomata (hex, kulcs: SECRET_KEY) - globÃ¡lisan kereshetÅ‘ (a bevÃ¡ltÃ³ nem
tudja elÅ‘re, melyik cÃ©g kÃ³djÃ¡t vÃ¡ltja be, ezÃ©rt a lenyomat nem kÃ¶thetÅ‘ cÃ©g-azonosÃ­tÃ³hoz).zutf-8zpartner_kod:)ÚhmacÚnewr   ÚencodeÚhashlibÚsha256Ú	hexdigestr/   s    r   Ú	_lenyomatr8   O   sE   € ô �8Š8”J×%Ò% gÓ.°,¸{¸mÐ0L×0SÑ0SÐT[Ó0\Ô^e×^lÑ^lÓm×wÑwÓyÐyr   ÚdbÚceg_idÚuser_idc                 óò   • SR                  S [        [        5       5       5      n[        5       nU R	                  [
        R                  " U[        U5      UUU[        [        S9-   S95        [        U5      $ )u  Ãšj meghÃ­vÃ³kÃ³dot kÃ©szÃ­t a megadott cÃ©ghez. Visszaadja a NYERS kÃ³dot kijelzÃ©sre alkalmas
alakban - EZ AZ EGYETLEN ALKALOM, amikor a nyers kÃ³d lÃ©tezik. Nem commitol. Egy cÃ©gnek
egyszerre tÃ¶bb, mÃ©g fel nem hasznÃ¡lt kÃ³dja is lehet (pÃ¡rhuzamosan tÃ¶bb partnert is hÃ­vhat).r   c              3   óV   #   • U  H  n[         R                  " [        5      v •  M!     g 7f)N)ÚsecretsÚchoiceÚABECE)Ú.0Ú_s     r   Ú	<genexpr>Úkod_general.<locals>.<genexpr>Y   s   é € ÐDÒ3C¨a”G—N’N¤5×)Ð)Ò3Cùs   ‚'))Úhours)r:   Úkod_hashÚletrehozo_user_idÚletrehozva_atÚlejar_at)ÚjoinÚranger.   r   ÚaddÚmodelsÚCegMeghivoKodr8   r   ÚKOD_ERVENYESSEG_ORAr0   )r9   r:   r;   ÚnyersÚmosts        r   Úkod_generalrR   U   sh   € ð �G‰GÑD´5¼Ô3CÓDÓD€EÜ‹7€DØ‡F�FŒ6×ÒØÜ˜5Ó!Ø!ØØœ	Ô(;Ñ<Ñ<ñô ô �%‹=Ðr   c                 ó²  • U R                  [        R                  5      R                  [        R                  R                  U:H  [        R                  R
                  R                  S5      [        R                  R                  [        5       :„  5      R                  [        R                  R                  R                  5       5      R                  5       $ )uÈ  A cÃ©g mÃ©g fel nem hasznÃ¡lt, le nem jÃ¡rt meghÃ­vÃ³kÃ³djai (a nyers kÃ³d ezekben SOHA nincs
benne - csak a metaadatok, pl. mikor jÃ¡r le, ki generÃ¡lta). GET-kezelÅ‘ is hÃ­vja - szÃ¡ndÃ©kosan
a rÃ©gi stÃ­lusÃº ORM-lekÃ©rdezÃ©ssel (nem az Ãºjabb, "select(...)"-es szintaxissal), mert az
utÃ³bbit a tests/t_get_audit.py "GET nem Ã­r" statikus elemzÃ©se nÃ©valapÃº, nem szemantikai
jellel szÅ±ri, Ã©s tisztÃ¡n olvasÃ³ lekÃ©rdezÃ©snÃ©l is Ã¡lpozitÃ­vat adna.N)ÚqueryrM   rN   Úfilterr:   Úfelhasznalva_atÚis_rI   r   Úorder_byrH   ÚdescÚall)r9   r:   s     r   Úsajat_aktiv_kodokr[   e   s’   € ð �8‰8”F×(Ñ(Ó)×0Ñ0Ü×Ñ×#Ñ# vÑ-Ü×Ñ×,Ñ,×0Ñ0°Ó6Ü×Ñ×%Ñ%¬«Ñ/ó÷ �hŒv×#Ñ#×1Ñ1×6Ñ6Ó8Ó9¿#¹#»%ð	@r   Úkod_idc           	      ó�  • U R                  [        [        R                  5      R	                  [        R                  R
                  U:H  [        R                  R                  U:H  [        R                  R                  R                  S5      5      R                  [        5       S9R                  SS95      nUR                  S:H  $ )u­   Egy sajÃ¡t, mÃ©g fel nem hasznÃ¡lt kÃ³d Ã©rvÃ©nytelenÃ­tÃ©se (a lejÃ¡rati idÅ‘ "mÃ¡ra" Ã¡llÃ­tÃ¡sÃ¡val -
nem tÃ¶rÃ¶ljÃ¼k, hogy a tÃ¶rtÃ©netben nyoma maradjon). Nem commitol.N)rI   F©Úsynchronize_sessioné   )Úexecuter
   rM   rN   ÚwhereÚidr:   rV   rW   Úvaluesr   Úexecution_optionsÚrowcount)r9   r:   r\   Úeredmenys       r   Úkod_visszavonasarh   r   s�   € ð �z‰zÜŒv×#Ñ#Ó$ß	‰Ü× Ñ ×#Ñ# vÑ-Ü× Ñ ×'Ñ'¨6Ñ1Ü× Ñ ×0Ñ0×4Ñ4°TÓ:ó

÷
 
‰œ›ˆÐ	!ß	Ñ	¨uÐ	Ð	5ó	€Hð ×Ñ Ñ!Ð!r   c                 óÜ  • [        5       [        [        S9-
  nU R                  [	        [
        R                  R                  5      R                  [
        R                  R                  U:H  [
        R                  R                  S:H  [
        R                  R                  U:¬  5      R                  [        5      5      R                  5       R                  5       n[!        U5      [        :¬  $ )uþ   Igaz, ha a felhasznÃ¡lÃ³ az utÃ³bbi Ã³rÃ¡ban tÃºl sok sikertelen kÃ³d-bevÃ¡ltÃ¡st prÃ³bÃ¡lt - a
folyamat-memÃ³riÃ¡ban Ã©lÅ‘ szÃ¡mlÃ¡lÃ³k (l. docs/LOGIN_VEDELEM.md) helyett AuditLog-alapÃº, Ã­gy
workerek kÃ¶zÃ¶tt (gunicorn, tÃ¶bb folyamat) is konzisztens.)Úminutesu"   Partner-kÃ³d bevÃ¡ltÃ¡s sikertelen)r   r   Ú!SIKERTELEN_PROBALKOZAS_ABLAK_PERCra   r	   rM   ÚAuditLogrc   rb   r;   Ú
field_nameÚ	timestampÚlimitÚSIKERTELEN_PROBALKOZAS_KORLATÚscalarsrZ   Úlen)r9   r;   ÚhatarÚdarabs       r   Ú tul_sok_sikertelen_probalkozas_eru   ‚   s¨   € ô ‹G”iÔ(IÑJÑJ€EØ�J‰JÜŒv�‰×!Ñ!Ó"ß	‰Ü�O‰O×#Ñ# wÑ.Ü�O‰O×&Ñ&Ð*NÑNÜ�O‰O×%Ñ%¨Ñ.ó

÷
 
‰Ô,Ó	-ó÷ �gƒi—‘“ð 
ô ˆu‹:Ô6Ñ6Ð6r   Úbeiranyito_ceg_idÚbeiranyito_user_idzmodels.Companyc           	      ó"  • [        U5      nUc  gU R                  [        [        R                  5      R                  [        R                  R                  [        U5      :H  [        R                  R                  R                  S5      [        R                  R                  [        5       :„  5      5      R                  5       nUc  gUR                  U:X  a  g[        5       nU R                  [        [        R                  5      R                  [        R                  R                  UR                  :H  [        R                  R                  R                  S5      5      R!                  XbUS9R#                  SS95      nUR$                  S:w  a  g[        R&                  " UR                  US	UUR(                  US
9nU R+                  U5        U R-                  5         U R/                  [        R0                  UR                  5      n	SSU	4$ )u  A beÃ­rt kÃ³d bevÃ¡ltÃ¡sa - ha Ã©rvÃ©nyes, ATOMIAN felhasznÃ¡ltnak jelÃ¶li Ã©s lÃ©trehozza az AktÃ­v
CegPartnerseg-et. Visszaad egy (siker, hibaÃ¼zenet, partner_ceg) hÃ¡rmast. Nem commitol - a
hÃ­vÃ³nak siker/hiba utÃ¡n is azonnal commitolnia kell (a hiba-naplÃ³zÃ¡s miatt is).N)Fu   Ã‰rvÃ©nytelen formÃ¡tumÃº kÃ³d!N)Fu8   A kÃ³d Ã©rvÃ©nytelen, lejÃ¡rt vagy mÃ¡r felhasznÃ¡ltÃ¡k!N)FuR   Ez a kÃ³d a sajÃ¡t cÃ©gedhez tartozik, nem lehet Ã¶nmagaddal partnersÃ©get kÃ¶tni!N)rV   Úfelhasznalo_ceg_idÚfelhasznalo_user_idFr^   r`   õ   AktÃ­v)Úceg_a_idÚceg_b_idÚallapotrH   rG   Úelfogado_user_idT)r)   ra   r	   rM   rN   rb   rF   r8   rV   rW   rI   r   Úscalar_one_or_noner:   r
   rc   rd   re   rf   ÚCegPartnersegrG   rL   ÚflushÚgetÚCompany)
r9   r'   rv   rw   r*   ÚsorrQ   rg   Ú
partnersegÚgeneralo_cegs
             r   Úkod_beiranyitasarˆ   “   s¡  € ô ˜S“/€KØÑØ=à
�*‰*ÜŒv×#Ñ#Ó$ß	‰Ü× Ñ ×)Ñ)¬Y°{Ó-CÑCÜ× Ñ ×0Ñ0×4Ñ4°TÓ:Ü× Ñ ×)Ñ)¬E«GÑ3ó

ó÷ ÑÓð ð �{ØVà
‡z�zÐ&Ó&Øpä‹7€DØ�z‰zÜŒv×#Ñ#Ó$ß	‰Œv×#Ñ#×&Ñ&¨#¯&©&Ñ0´&×2FÑ2F×2VÑ2V×2ZÑ2ZÐ[_Ó2`Ó	aß	‰ Ð`rˆÐ	sß	Ñ	¨uÐ	Ð	5ó	€Hð ×Ñ˜AÓàVä×%Ò%Ø—‘Ø"ØØØ×/Ñ/Ø+ñ€Jð ‡F�Fˆ:ÔØ‡H�H„Jà—6‘6œ&Ÿ.™.¨#¯*©*Ó5€LØ��|Ð#Ð#r   Úceg_id_1Úceg_id_2c           	      óÆ  • U R                  [        [        R                  R                  5      R                  [        R                  R                  S:H  [        R                  R                  U:H  [        R                  R                  U:H  -  [        R                  R                  U:H  [        R                  R                  U:H  -  -  5      5      R                  5       SL$ )uL   Igaz, ha a kÃ©t cÃ©g kÃ¶zÃ¶tt van AktÃ­v partnersÃ©g (bÃ¡rmelyik irÃ¡nyban).r{   N)
ra   r	   rM   r�   rc   rb   r~   r|   r}   Úscalar)r9   r‰   rŠ   s      r   Úpartnerek_er�   Ã   s²   € à�:‰:ÜŒv×#Ñ#×&Ñ&Ó'×-Ñ-Ü× Ñ ×(Ñ(¨HÑ4ä×&Ñ&×/Ñ/°8Ñ;Ä×@TÑ@T×@]Ñ@]ÐaiÑ@iÑjÜ×(Ñ(×1Ñ1°XÑ=Ä&×BVÑBV×B_ÑB_ÐckÑBkÑlñnó	
ó÷ �fƒh�dðð r   c                 óH  • U R                  [        R                  5      R                  [        R                  R                  S:H  [        R                  R
                  U:H  [        R                  R                  U:H  -  5      R                  [        R                  R                  R                  5       5      R                  5       n/ nU HS  nUR
                  U:X  a  UR                  OUR                  nUR                  UR                  XTR                  S.5        MU     U$ )u  A cÃ©g Ã¶sszes AktÃ­v partnersÃ©ge, a MÃ�SIK fÃ©l cÃ©g-objektumÃ¡val Ã©s a partnersÃ©g-sor id-jÃ©vel
(a "VisszavonÃ¡s" gombhoz) - kijelzÃ©sre kÃ©sz lista. GET-kezelÅ‘ is hÃ­vja - l. a sajat_aktiv_kodok
megjegyzÃ©sÃ©t a rÃ©gi stÃ­lusÃº ORM-lekÃ©rdezÃ©s indokÃ¡rÃ³l.r{   )Úpartnerseg_idÚcegrH   )rT   rM   r�   rU   r~   r|   r}   rX   rH   rY   rZ   Úceg_bÚceg_aÚappendrc   )r9   r:   Úsorokrg   r…   Ú	masik_cegs         r   Úpartnersegek_listajar–   Ð   sÙ   € ð �H‰H”V×)Ñ)Ó*×1Ñ1Ü×Ñ×$Ñ$¨Ñ0Ü	×	Ñ	×	&Ñ	&¨&Ñ	0´V×5IÑ5I×5RÑ5RÐV\Ñ5\Ñ]ó÷ �hŒv×#Ñ#×1Ñ1×6Ñ6Ó8Ó9¿#¹#»%ð 
ð
 €HÛˆØ!$§¡°Ó!7�C—I’I¸S¿Y¹Yˆ	Ø�‰¨#¯&©&¸×UfÑUfÑgÖhñ ð €Or   c                 ó`   • [        X5       Vs/ s H  o"S   (       d  M  US   PM     sn$ s  snf )u]   A cÃ©g aktÃ­v partner-cÃ©gei, Company-objektumkÃ©nt (a kihelyezÃ©s bÃ©rlÅ‘-vÃ¡lasztÃ³jÃ¡hoz).r�   )r–   )r9   r:   Úps      r   Úpartner_cegek_listajar™   à   s+   € ä2°2Ô>ÓKÒ>˜ÀEÅ(‹HˆAˆeŒHÑ>ÑKÐKùÒKs   Ž+Ÿ	+r�   c           	      ó¸  • U R                  [        [        R                  5      R	                  [        R                  R
                  U:H  [        R                  R                  S:H  [        R                  R                  U:H  [        R                  R                  U:H  -  5      R                  S[        5       US9R                  SS95      nUR                  S:H  $ )uÔ   A partnersÃ©g visszavonÃ¡sa - bÃ¡rmelyik fÃ©l megteheti. Nem tÃ¶rli az esetleg mÃ¡r futÃ³ aktÃ­v
BerletiIdoszak-ot (az a kÃ¼lÃ¶n "BÃ©rlet lezÃ¡rÃ¡sa" Ãºt), csak Ãºj kihelyezÃ©st blokkol a jÃ¶vÅ‘ben.
Nem commitol.r{   ÚVisszavonva)r~   Úvisszavonva_atÚvisszavono_user_idFr^   r`   )ra   r
   rM   r�   rb   rc   r~   r|   r}   rd   r   re   rf   )r9   r:   r�   r;   rg   s        r   Úpartnerseg_visszavonasarž   å   s³   € ð �z‰zÜŒv×#Ñ#Ó$ß	‰Ü× Ñ ×#Ñ# }Ñ4Ü× Ñ ×(Ñ(¨HÑ4Ü×!Ñ!×*Ñ*¨fÑ4¼×9MÑ9M×9VÑ9VÐZ`Ñ9`Ñaó

÷
 
‰˜´e³gÐRYˆÐ	Zß	Ñ	¨uÐ	Ð	5ó	€Hð ×Ñ Ñ!Ð!r   )-Ú__doc__r5   r2   r"   r>   r   r   r   Útypingr   r   r   Ú
sqlalchemyr	   r
   Úsqlalchemy.ormr   rM   Úconfigr   r.   rO   r@   Úcompiler!   r%   rp   rk   r   r)   r0   r8   ÚintrR   rN   r[   Úboolrh   ru   rˆ   r�   Údictr–   r™   rž   r   r   r   Ú<module>r¨      s  ðñ%`óL Û Û 	Û ß 2Ñ 2ß (Ñ (ç %Ý "ã Ý à€	ØÐ Ø*€Ø	�Š�D˜5‘L 5Ñ(©3¨y«>Ñ9¸DÑ@Ó	A€à "Ð Ø$&Ð !ð;ˆxô ;ð8�x ‘}ô 8ðM˜ð M ô Mð
z˜3ð z 3ô zð�Gð  Sð °3ð ¸3ô ð 
@˜'ð 
@¨3ð 
@°4¸×8LÑ8LÑ3Mô 
@ð"˜ð "¨#ð "°sð "¸tô "ð 7¨ð 7¸3ð 7À4ô 7ð"-$˜ð -$¸#ð -$ÐSVð -$Ð[`ÐaeÐgoÐpsÑgtÐv~ð  @Pñ  wQð  bQñ  \Rô -$ð`
�Gð 
 sð 
°cð 
¸dô 
ð˜Wð ¨cð °d¸4±jô ð L˜gð L¨sð L°tÐ<LÑ7Mô Lð
" ð "°ð "ÀSð "ÐSVð "Ð[_õ "r   