+
    ˜qgj˜-  ã            
       ó¸  a € R$ t+0 t ^ RIt^ RIHtHt ^ RIHt ^ RIHtH	t	H
t
HtHtHt ^ RIHtHt ^ RIHtHtHtHt ^ RIHt ^ RIHt ]P4                  ! ]4      t ! R	 R
]4      tR%R R lltR%R R llt  ! R R]4      t! ! R R]!4      t" ! R R]!4      t# ! R R]!4      t$ ! R R]!4      t% ! R R]!4      t&. R&Ot'R]"R]%R]$R]&R]#/t(] ^ k R  R! lt)R'R" R# llt*R# )(é    N)ÚABCÚabstractmethod)Úpartial)ÚCallableÚDictÚIterableÚListÚOptionalÚType)ÚsubpÚutil)ÚeniÚnetplanÚnetwork_managerÚnetworkd)ÚIproute2)ÚNetworkStatec                   ó   € ] tR t^tRtR# )ÚNoActivatorException© N)Ú__name__Ú
__module__Ú__qualname__Ú__firstlineno__Ú__static_attributes__r   ó    Ú:/usr/lib/python3/dist-packages/cloudinit/net/activators.pyr   r      s   † Ûr   r   c                óH   € V ^8„  d   QhR\         R\        R\        R\        /# )é   ÚcmdÚdevice_nameÚwarn_on_stderrÚreturn)ÚlistÚstrÚbool)Úformats   "r   Ú__annotate__r(      s2   € ÷ Nñ NÜ	ðNÜðNÜ15ðNä	ñNr   c                óJ   € \        \        \        P                  V 4      V4      # )z2Attempt to alter an interface using a command list)Ú_alter_interface_callabler   r   )r    r!   r"   s   &&&r   Ú_alter_interfacer+      s   € ô %¤W¬T¯Y©Y¸Ó%<¸nÓMÐMr   c                ó<   € V ^8„  d   QhR\         R\        R\        /# )r   Úcallabler"   r#   )r   r&   )r'   s   "r   r(   r(      s$   € ÷ ñ ÜðÜ(,ðä	ñr   c                ó0  €  V ! 4       w  r#\        V4      '       d2   V'       d   \        P                  M\        P                  pV! RV4       R#   \        P
                   d2   p\        P                  ! \        RTP                  4        Rp?R# Rp?ii ; i)z‚Attempt to alter an interface using a callable

this function standardizes logging and response to failure for
various activators
zReceived stderr output: %sTz#Running interface command %s failedNF)	ÚlenÚLOGÚwarningÚdebugr   ÚProcessExecutionErrorr   Úlogexcr    )r-   r"   Ú_outÚerrÚ
log_stderrÚes   &&    r   r*   r*      sf   € ðÙ“J‰	ˆÜˆs�8Š8ß(6œŸš¼C¿I¹IˆJÙÐ3°SÔ9ÙøÜ×%Ñ%ô Ü�Š”CÐ>ÀÇÁÔFÝûðús   ‚!A ¤)A ÁBÁ$&BÂBc                   óæ   a € ] tR t^-t o ]]V 3R lR l4       4       t]]V 3R lR l4       4       t]]V 3R lR l4       4       t]	V 3R lR l4       t
]	V 3R	 lR
 l4       t]V 3R lR l4       tRtV tR# )ÚNetworkActivatorc                ó    <€ V ^8„  d   QhRS[ /# ©r   r#   ©r&   )r'   Ú__classdict__s   "€r   r(   ÚNetworkActivator.__annotate__0   ó   ø€ ÷ $ñ $‘tñ $r   c                 ó   € \        4       h)z>Return True if activator is available, otherwise return False.©ÚNotImplementedErrorr   r   r   Ú	availableÚNetworkActivator.available.   s   € ô "Ó#Ð#r   c                ó&   <€ V ^8„  d   QhRS[ RS[/# ©r   r!   r#   ©r%   r&   )r'   r>   s   "€r   r(   r?   6   s   ø€ ÷ $ñ $©ð $±ñ $r   c                ó   € \        4       h)zGBring up interface.

Return True is successful, otherwise return False
rB   ©r!   s   &r   Úbring_up_interfaceÚ#NetworkActivator.bring_up_interface4   ó   € ô "Ó#Ð#r   c                ó&   <€ V ^8„  d   QhRS[ RS[/# rG   rH   )r'   r>   s   "€r   r(   r?   ?   s   ø€ ÷ $ñ $©#ð $±$ñ $r   c                ó   € \        4       h)zIBring down interface.

Return True is successful, otherwise return False
rB   rJ   s   &r   Úbring_down_interfaceÚ%NetworkActivator.bring_down_interface=   rM   r   c                ó6   <€ V ^8„  d   QhRS[ S[,          RS[/# ©r   Údevice_namesr#   ©r   r%   r&   )r'   r>   s   "€r   r(   r?   G   s#   ø€ ÷ Nñ N©x¹­}ð NÁñ Nr   c                óx   a € \         ;QJ d    V 3R lV 4       F  '       d   K   R# 	  R# ! V 3R lV 4       4      # )zZBring up specified list of interfaces.

Return True is successful, otherwise return False
c              3   óF   <"  € T F  pSP                  V4      x € K  	  R # 5i©N©rK   ©Ú.0ÚdeviceÚclss   & €r   Ú	<genexpr>Ú7NetworkActivator.bring_up_interfaces.<locals>.<genexpr>L   s   øé € ÐMÁ°f�3×)Ñ)¨&×1Ð1Ãùó   ƒ!FT)Úall)r]   rT   s   f&r   Úbring_up_interfacesÚ$NetworkActivator.bring_up_interfacesF   s.   ø€ ÷ ‹sÔMÁÓM�sŒsÐMŠsÐMˆsÔMÁÓMÓMÐMr   c                ó&   <€ V ^8„  d   QhRS[ RS[/# ©r   Únetwork_stater#   ©r   r&   )r'   r>   s   "€r   r(   r?   O   s   ø€ ÷ 
ñ 
±Lð 
ÁTñ 
r   c                óv   € T P                  VP                  4        Uu. uF  q"R,          NK  	  up4      # u upi )zLBring up all interfaces.

Return True is successful, otherwise return False
Úname)rb   Úiter_interfaces)r]   rf   Úis   && r   Úbring_up_all_interfacesÚ(NetworkActivator.bring_up_all_interfacesN   s;   € ð ×&Ñ&Ø -× =Ñ =Ô ?Ó@Ñ ?˜1ˆv�YˆYÑ ?Ñ@ó
ð 	
ùÚ@s   ž6c                ó   <€ V ^8„  d   QhRR/# ©r   r#   Nr   )r'   r>   s   "€r   r(   r?   Y   s   ø€ ÷ $ñ $˜dñ $r   c                 ó   € \        4       h)zWait for network to come up.rB   r   r   r   Úwait_for_networkÚ!NetworkActivator.wait_for_networkX   s   € ô "Ó#Ð#r   r   N)r   r   r   r   Ústaticmethodr   rD   rK   rP   Úclassmethodrb   rl   rq   r   Ú__classdictcell__©r>   s   @r   r:   r:   -   s•   ø‡ € ØØ÷$ó ó ð$ð Ø÷$ó ó ð$ð Ø÷$ó ó ð$ð ÷Nó ðNð ÷
ó ð
ð ÷$ó ö$r   r:   c                   ót   a € ] tR t^^t o ]V 3R lR l4       t]V 3R lR l4       t]V 3R lR l4       tRtV t	R# )	ÚIfUpDownActivatorc                ó    <€ V ^8„  d   QhRS[ /# r<   r=   )r'   r>   s   "€r   r(   ÚIfUpDownActivator.__annotate__d   s   ø€ ÷ ñ ‘tñ r   c                 ó,   € \         P                  ! 4       # ©z3Return true if ifupdown can be used on this system.)r   rD   r   r   r   rD   ÚIfUpDownActivator.availablec   s   € ô �}Š}‹Ðr   c                ó&   <€ V ^8„  d   QhRS[ RS[/# rG   rH   )r'   r>   s   "€r   r(   rz   i   ó   ø€ ÷ 2ñ 2©ð 2±ñ 2r   c                ó    € RV .p\        W4      # )úRBring up interface using ifup.

Return True is successful, otherwise return False
Úifup©r+   ©r!   r    s   & r   rK   Ú$IfUpDownActivator.bring_up_interfaceh   s   € ð �{Ð#ˆÜ Ó1Ð1r   c                ó&   <€ V ^8„  d   QhRS[ RS[/# rG   rH   )r'   r>   s   "€r   r(   rz   r   ó   ø€ ÷ 2ñ 2©#ð 2±$ñ 2r   c                ó    € RV .p\        W4      # )r�   Úifdownrƒ   r„   s   & r   rP   Ú&IfUpDownActivator.bring_down_interfaceq   s   € ð ˜Ð%ˆÜ Ó1Ð1r   r   N©
r   r   r   r   rs   rD   rK   rP   r   ru   rv   s   @r   rx   rx   ^   sA   ø‡ € ð
 ÷ó ðð ÷2ó ð2ð ÷2ó ö2r   rx   c                   ót   a € ] tR t^{t o ]V 3R lR l4       t]V 3R lR l4       t]V 3R lR l4       tRtV t	R# )	ÚIfConfigActivatorc                ó    <€ V ^8„  d   QhRS[ /# r<   r=   )r'   r>   s   "€r   r(   ÚIfConfigActivator.__annotate__}   s   ø€ ÷ 9ñ 9‘tñ 9r   c                 óL   € Rp R.p\        \        P                  ! WR7      4      # )z3Return true if ifconfig can be used on this system.Úifconfigz/sbin)Úsearch)r&   r   Úwhich)Úexpectedr’   s     r   rD   ÚIfConfigActivator.available|   s$   € ð ˆØ�ˆÜ”D—J’J˜xÔ7Ó8Ð8r   c                ó&   <€ V ^8„  d   QhRS[ RS[/# rG   rH   )r'   r>   s   "€r   r(   r�   „   r   r   c                ó"   € RV R.p\        W4      # )z_Bring up interface using ifconfig <dev> up.

Return True is successful, otherwise return False
r‘   Úuprƒ   r„   s   & r   rK   Ú$IfConfigActivator.bring_up_interfaceƒ   s   € ð ˜;¨Ð-ˆÜ Ó1Ð1r   c                ó&   <€ V ^8„  d   QhRS[ RS[/# rG   rH   )r'   r>   s   "€r   r(   r�   �   r‡   r   c                ó"   € RV R.p\        W4      # )zaBring up interface using ifconfig <dev> down.

Return True is successful, otherwise return False
r‘   Údownrƒ   r„   s   & r   rP   Ú&IfConfigActivator.bring_down_interfaceŒ   s   € ð ˜;¨Ð/ˆÜ Ó1Ð1r   r   Nr‹   rv   s   @r   r�   r�   {   s?   ø‡ € Ø÷9ó ð9ð ÷2ó ð2ð ÷2ó ö2r   r�   c                   ó�   a € ] tR t^–t o ]V 3R lR l4       t]V 3R lR l4       t]V 3R lR l4       t]V 3R lR l4       t	R	t
V tR
# )ÚNetworkManagerActivatorc                ó    <€ V ^8„  d   QhRS[ /# r<   r=   )r'   r>   s   "€r   r(   Ú$NetworkManagerActivator.__annotate__˜   s   ø€ ÷ +ñ +‘tñ +r   c                 ó,   € \         P                  ! 4       # )z9Return true if NetworkManager can be used on this system.)r   rD   r   r   r   rD   Ú!NetworkManagerActivator.available—   s   € ô ×(Ò(Ó*Ð*r   c                ó&   <€ V ^8„  d   QhRS[ RS[/# rG   rH   )r'   r>   s   "€r   r(   r¡   �   s   ø€ ÷ 2ñ 2©ð 2±ñ 2r   c                óÒ   € ^ RI Hp V! V 4      pVf   \        P                  R4       R# RRRV.p\	        W04      '       d	   RRRRV.pM\	        . R
OV 4       RRRR	V .p\	        W04      # )zTBring up connection using nmcli.

Return True is successful, otherwise return False
)Úconn_filenamezFUnable to find an interface config file. Unable to bring up interface.FÚnmcliÚ
connectionÚloadr˜   ÚfilenameÚifname)r§   r¨   Úreload)Úcloudinit.net.network_managerr¦   r0   r1   r+   )r!   r¦   rª   r    s   &   r   rK   Ú*NetworkManagerActivator.bring_up_interfaceœ   s}   € õ 	@á  Ó-ˆØÒÜ�K‰Kð0ôñ à˜ f¨hÐ7ˆÜ˜C×-Ò-Ø˜L¨$°
¸HÐE‰CäÒ>ÀÔLØ˜L¨$°¸+ÐFˆCÜ Ó1Ð1r   c                ó&   <€ V ^8„  d   QhRS[ RS[/# rG   rH   )r'   r>   s   "€r   r(   r¡   µ   r‡   r   c                ó$   € RRRV .p\        W4      # )zUBring down interface using nmcli.

Return True is successful, otherwise return False
r§   r\   Ú
disconnectrƒ   r„   s   & r   rP   Ú,NetworkManagerActivator.bring_down_interface´   s   € ð ˜ ,°Ð<ˆÜ Ó1Ð1r   c                ó6   <€ V ^8„  d   QhRS[ S[,          RS[/# rS   rU   )r'   r>   s   "€r   r(   r¡   ¾   s#   ø€ ÷ Mñ M©x¹­}ð MÁñ Mr   c                ó>  a € \         P                   ! . RO4      P                  P                  4       pRV8w  d   \        P	                  RV4       \        . ROR4      ;'       d;    \        ;QJ d    V 3R lV 4       F  '       d   K   R# 	  R# ! V 3R lV 4       4      # )	z)Activate network

Return True on success
zSubState=runningz:Expected NetworkManager SubState=running, but detected: %sra   c              3   óF   <"  € T F  pSP                  V4      x € K  	  R # 5irX   rY   rZ   s   & €r   r^   Ú>NetworkManagerActivator.bring_up_interfaces.<locals>.<genexpr>Ó   s   øé € ÐL¹|°V�#×(Ñ(¨×0Ð0»|ùr`   FT)Ú	systemctlÚshowz--property=SubStateúNetworkManager.service)r·   ztry-reload-or-restartr¹   )r   ÚstdoutÚrstripr0   r1   r+   ra   )r]   rT   Ústates   f& r   rb   Ú+NetworkManagerActivator.bring_up_interfaces½   sš   ø€ ô —	’	òó
÷ ‰&—‘“ð 	ð  Ô&Ü�K‰KØLØôô  ÚLØó
÷ Mð M÷ ‹cÔL¹|ÓL�cŒcð	Mò ð	Mð ÔL¹|ÓLÓLð	Mr   r   N)r   r   r   r   rs   rD   rK   rP   rt   rb   r   ru   rv   s   @r   rŸ   rŸ   –   sU   ø‡ € Ø÷+ó ð+ð ÷2ó ð2ð. ÷2ó ð2ð ÷Mó öMr   rŸ   c                   óÐ   a € ] tR t^Öt o RR.t]V 3R lR l4       t]V 3R lR l4       t]V 3R lR l4       t]V 3R	 lR
 l4       t	]V 3R lR l4       t
]V 3R lR l4       tRtV tR# )ÚNetplanActivatorr   Úapplyc                ó    <€ V ^8„  d   QhRS[ /# r<   r=   )r'   r>   s   "€r   r(   ÚNetplanActivator.__annotate__Ú   s   ø€ ÷ #ñ #‘tñ #r   c                 ó,   € \         P                  ! 4       # )z2Return true if netplan can be used on this system.)r   rD   r   r   r   rD   ÚNetplanActivator.availableÙ   s   € ô × Ò Ó"Ð"r   c                ó&   <€ V ^8„  d   QhRS[ RS[/# rG   rH   )r'   r>   s   "€r   r(   rÂ   ß   s   ø€ ÷ 
ñ 
©ð 
±ñ 
r   c                ód   € \         P                  R4       \        \        P                  RRR7      # ©úIApply netplan config.

Return True is successful, otherwise return False
zBCalling 'netplan apply' rather than altering individual interfacesra   F©r"   ©r0   r2   r+   r¿   ÚNETPLAN_CMDrJ   s   &r   rK   Ú#NetplanActivator.bring_up_interfaceÞ   ó1   € ô 	�	‰	ð-ô	
ô  Ü×(Ñ(¨%Àô
ð 	
r   c                ó6   <€ V ^8„  d   QhRS[ S[,          RS[/# rS   rU   )r'   r>   s   "€r   r(   rÂ   í   s   ø€ ÷ 
ñ 
©(±3­-ð 
¹Dñ 
r   c                ód   € \         P                  R4       \        \        P                  RRR7      # rÇ   rÊ   )rT   s   &r   rb   Ú$NetplanActivator.bring_up_interfacesì   rÍ   r   c                ó&   <€ V ^8„  d   QhRS[ RS[/# re   rg   )r'   r>   s   "€r   r(   rÂ   û   s   ø€ ÷ 
ñ 
©|ð 
Áñ 
r   c                ó:   € \        \        P                  RRR7      # )rÈ   ra   FrÉ   )r+   r¿   rË   )rf   s   &r   rl   Ú(NetplanActivator.bring_up_all_interfacesú   s   € ô  Ü×(Ñ(¨%Àô
ð 	
r   c                ó&   <€ V ^8„  d   QhRS[ RS[/# rG   rH   )r'   r>   s   "€r   r(   rÂ     s   ø€ ÷ 
ñ 
©#ð 
±$ñ 
r   c                ód   € \         P                  R4       \        \        P                  RRR7      # rÇ   rÊ   rJ   s   &r   rP   Ú%NetplanActivator.bring_down_interface  rÍ   r   c                ó   <€ V ^8„  d   QhRR/# ro   r   )r'   r>   s   "€r   r(   rÂ     s   ø€ ÷ -ñ -˜dñ -r   c                 ó’   € \         P                  ! 4       '       d   \        P                  R4       R# \        P                  4        R# )z:On networkd systems, wait for systemd-networkd-wait-onlinez1NetworkManager is enabled, skipping networkd waitN)r   rD   r0   r2   ÚNetworkdActivatorrq   r   r   r   rq   Ú!NetplanActivator.wait_for_network  s/   € ô ×$Ò$×&Ò&Ü�I‰IÐIÔJÙÜ×*Ñ*Ö,r   r   N)r   r   r   r   rË   rs   rD   rK   rb   rl   rP   rq   r   ru   rv   s   @r   r¿   r¿   Ö   s…   ø‡ € Ø˜gÐ&€Kà÷#ó ð#ð ÷
ó ð
ð ÷
ó ð
ð ÷
ó ð
ð ÷
ó ð
ð ÷-ó ö-r   r¿   c                   ó¬   a € ] tR tRt o ]V 3R lR l4       t]V 3R lR l4       t]V 3R lR l4       t]V 3R lR	 l4       t]V 3R
 lR l4       t	Rt
V tR# )rÙ   i  c                ó    <€ V ^8„  d   QhRS[ /# r<   r=   )r'   r>   s   "€r   r(   ÚNetworkdActivator.__annotate__  r@   r   c                 ó,   € \         P                  ! 4       # r|   )r   rD   r   r   r   rD   ÚNetworkdActivator.available  s   € ô ×!Ò!Ó#Ð#r   c                ó&   <€ V ^8„  d   QhRS[ RS[/# rG   rH   )r'   r>   s   "€r   r(   rÝ   #  s   ø€ ÷ 
ñ 
©ð 
±ñ 
r   c                óH   € \        \        \        P                  V 4      4      # ©ú1Return True is successful, otherwise return False)r*   r   r   Úlink_uprJ   s   &r   rK   Ú$NetworkdActivator.bring_up_interface"  s!   € ô )Ü”H×$Ñ$ kÓ2ó
ð 	
r   c                ó&   <€ V ^8„  d   QhRS[ RS[/# re   rg   )r'   r>   s   "€r   r(   rÝ   *  s   ø€ ÷ ,ñ ,©|ð ,Áñ ,r   c                ó"   € . ROp\        VR4      # )rã   ra   )r·   Úrestartzsystemd-networkdzsystemd-resolvedrƒ   )rf   r    s   & r   rl   Ú)NetworkdActivator.bring_up_all_interfaces)  s   € ò OˆÜ  UÓ+Ð+r   c                ó&   <€ V ^8„  d   QhRS[ RS[/# rG   rH   )r'   r>   s   "€r   r(   rÝ   0  s   ø€ ÷ 
ñ 
©#ð 
±$ñ 
r   c                óH   € \        \        \        P                  V 4      4      # râ   )r*   r   r   Ú	link_downrJ   s   &r   rP   Ú&NetworkdActivator.bring_down_interface/  s!   € ô )Ü”H×&Ñ&¨Ó4ó
ð 	
r   c                ó   <€ V ^8„  d   QhRR/# ro   r   )r'   r>   s   "€r   r(   rÝ   7  s   ø€ ÷ 
ñ 
˜dñ 
r   c                 ó6   € \         P                   ! . RO4       R# )z&Wait for systemd-networkd-wait-online.N)r·   Ústartz$systemd-networkd-wait-online.service)r   r   r   r   rq   Ú"NetworkdActivator.wait_for_network6  s   € ô 	�	Š	ÚJö	
r   r   N)r   r   r   r   rs   rD   rK   rl   rP   rq   r   ru   rv   s   @r   rÙ   rÙ     sg   ø‡ € Ø÷$ó ð$ð ÷
ó ð
ð ÷,ó ð,ð
 ÷
ó ð
ð ÷
ó ö
r   rÙ   r   r   únetwork-managerr   r‘   c                ór   € V ^8„  d   QhR\         \        ,          R\        \        \        ,          ,          /# ©r   Úpriorityr#   )r	   r%   r
   r   r:   )r'   s   "r   r(   r(   Q  s)   € ÷ ñ œt¤C�yð ¬X´dÔ;KÕ6LÕ-Mñ r   c                óÚ   € V  Uu. uF  q\         9  g   K  VNK  	  ppV'       d   \        RV 24      hV  Uu. uF  p\        V,          NK  	  pp\        R V 4       R4      # u upi u upi )zEReturns the first available activator from the priority list or None.z.Unknown activators provided in priority list: c              3   óV   "  € T F  pVP                  4       '       g   K  Vx € K!  	  R # 5irX   )rD   )r[   Úactivator_clss   & r   r^   Ú#search_activator.<locals>.<genexpr>Z  s%   é € ð 	
á!2�Ø×&Ñ&×(÷ ŠMÛ!2ùs   ‚)Ÿ
)N)ÚDEFAULT_PRIORITYÚ
ValueErrorÚNAME_TO_ACTIVATORÚnext)rõ   rk   Úunknownri   Úactivator_classess   &    r   Úsearch_activatorr   Q  s„   € á"Ó@™(�QÔ/?Ñ&?�qˆq™(€GÐ@ßÜØ<¸W¸IÐFó
ð 	
ñ >FÓF¹X°TÔ*¨4×0Ð0¹XÐÐFÜñ	
á!2ó	
ð
 	óð ùò Aùò
 Gs   …A#–A#¸A(c                ór   € V ^8„  d   QhR\         \        \        ,          ,          R\        \        ,          /# rô   )r
   r	   r%   r   r:   )r'   s   "r   r(   r(   c  s+   € ÷ ñ Ü”tœC•yÕ!ðä	Ô
Õñr   c                 óˆ   € V f   \         p \        V 4      pV'       g   \        RV  24      h\        P	                  RW4       V# )Nz>No available network activators found. Searched through list: z.Using selected activator: %s from priority: %s)rú   r   r   r0   r2   )rõ   Úselecteds   & r   Úselect_activatorr  c  sR   € ð ÒÜ#ˆÜ Ó)€HßÜ"ð&Ø&. Zð1ó
ð 	
ô ‡I�IØ8¸(ôð €Or   c                óx   € V ^8„  d   Qh/ ^ \         9   d&   \        \        \        \        ,          3,          ;R&   # )r   rü   )Ú__conditional_annotations__r   r%   r   r:   )r'   s   "r   r(   r(      s.   € ‡�÷L
ò ”4œœTÔ"2Õ3Ð3Õ4ñ òM
 r   )T)r   r   rò   r   r‘   rX   ),r  ÚloggingÚabcr   r   Ú	functoolsr   Útypingr   r   r   r	   r
   r   Ú	cloudinitr   r   Úcloudinit.netr   r   r   r   Úcloudinit.net.netops.iproute2r   Úcloudinit.net.network_stater   Ú	getLoggerr   r0   Ú	Exceptionr   r+   r*   r:   rx   r�   rŸ   r¿   rÙ   rú   rü   r   r  r(   )r  s   @r   Ú<module>r     sæ   øðç €ß #Ý ß A× Aç  ß AÓ AÝ 2Ý 4à×Ò˜Ó!€ô	˜9ô 	÷N÷ô&.$�sô .$ôb2Ð(ô 2ô:2Ð(ô 2ô6=MÐ.ô =Mô@C-Ð'ô C-ôL
Ð(ô 
òHÐ ð 
ÐØÐØÐ.ØÐ!ØÐ!ð8Ð ó õ÷$ñ r   