§
    Ètºfñ6  ã                   óÊ   — d Z ddlmZ ddlmZ ddlmZ ddlmZm	Z	 ddl
mZ ddlmZ dd	lmZ  G d
„ de	¦  «        Z G d„ dej        ¦  «        Z G d„ dej        ¦  «        ZdS )z>
Test cases for L{twisted.protocols.haproxy.HAProxyProtocol}.
é    )ÚOptional)Úmock)Úaddress)ÚFactoryÚProtocol)Ú StringTransportWithDisconnection)Úunittesté   )ÚHAProxyWrappingFactoryc                   ó*   — e Zd ZdZdd„Zdeddfd„ZdS )ÚStaticProtocolz6
    Protocol stand-in that maintains test state.
    ÚreturnNc                 ó>   — d | _         d | _        d| _        d| _        d S )Nó    F)ÚsourceÚdestinationÚdataÚdisconnected)Úselfs    új/var/www/surfInsights/venv3-11/lib/python3.11/site-packages/twisted/protocols/haproxy/test/test_wrapper.pyÚ__init__zStaticProtocol.__init__   s&   € Ø26ˆŒØ7;ˆÔØˆŒ	Ø!ˆÔÐÐr   r   c                 ó°   — | j         sJ ‚| j                              ¦   «         | _        | j                              ¦   «         | _        | xj        |z  c_        d S )N)Ú	transportÚgetPeerr   ÚgetHostr   r   )r   r   s     r   ÚdataReceivedzStaticProtocol.dataReceived   sO   € ØŒ~ÐÐÐØ”n×,Ò,Ñ.Ô.ˆŒØœ>×1Ò1Ñ3Ô3ˆÔØˆ	Œ	�TÑˆ	Œ	ˆ	ˆ	r   ©r   N)Ú__name__Ú
__module__Ú__qualname__Ú__doc__r   Úbytesr   © r   r   r   r      sT   € € € € € ðð ð"ð "ð "ð "ð ð ¨4ð ð ð ð ð ð r   r   c                   óR   — e Zd ZdZdd„Zdd„Zdd„Zdd„Zdd„Zdd	„Z	dd
„Z
dd„ZdS )ÚHAProxyWrappingFactoryV1Testsz]
    Test L{twisted.protocols.haproxy.HAProxyWrappingFactory} with v1 PROXY
    headers.
    r   Nc                 óV  — t          t          j        t          ¦  «        ¦  «        }|                     t          j        ddd¦  «        ¦  «        }t          ¦   «         }||_        | 	                    |¦  «         | 
                    d¦  «         |                      |j        ¦  «         dS )úJ
        Test if invalid headers result in connectionLost events.
        ÚTCPú	127.1.1.1é�  s   NOTPROXY anything can go here
N©r   r   ÚforProtocolr   ÚbuildProtocolr   ÚIPv4Addressr   ÚprotocolÚmakeConnectionr   ÚassertFalseÚ	connected©r   ÚfactoryÚprotor   s       r   Útest_invalidHeaderDisconnectsz;HAProxyWrappingFactoryV1Tests.test_invalidHeaderDisconnects)   sž   € õ )­Ô)<½^Ñ)LÔ)LÑMÔMˆØ×%Ò%ÝÔ  {°DÑ9Ô9ñ
ô 
ˆõ 5Ñ6Ô6ˆ	Ø"ˆ	ÔØ×Ò˜YÑ'Ô'Ð'Ø×ÒÐ?Ñ@Ô@Ð@Ø×Ò˜Ô,Ñ-Ô-Ð-Ð-Ð-r   c                 ó€  — t          t          j        t          ¦  «        ¦  «        }|                     t          j        ddd¦  «        ¦  «        }t          ¦   «         }||_        | 	                    |¦  «         | 
                    d¦  «         | 
                    d¦  «         |                      |j        ¦  «         dS )r'   r(   r)   r*   s   PROXY TCP4 1.1.1.1
s   2.2.2.2 8080
Nr+   r3   s       r   Ú$test_invalidPartialHeaderDisconnectszBHAProxyWrappingFactoryV1Tests.test_invalidPartialHeaderDisconnects7   s³   € õ )­Ô)<½^Ñ)LÔ)LÑMÔMˆØ×%Ò%ÝÔ  {°DÑ9Ô9ñ
ô 
ˆõ 5Ñ6Ô6ˆ	Ø"ˆ	ÔØ×Ò˜YÑ'Ô'Ð'Ø×ÒÐ4Ñ5Ô5Ð5Ø×ÒÐ.Ñ/Ô/Ð/Ø×Ò˜Ô,Ñ-Ô-Ð-Ð-Ð-r   c                 ó  — t          t          j        t          ¦  «        ¦  «        }|                     t          j        ddd¦  «        ¦  «        }t          t          j	        j
        t          j	        j        ¬¦  «        }|                     |¦  «         |                      |                     ¦   «         t          j	        j
        ¦  «         |                      |                     ¦   «         t          j	        j        ¦  «         dS )zƒ
        Before any data is received the HAProxy protocol will return the same peer
        and host as the IP connection.
        r(   ú	127.0.0.1r*   )ÚhostAddressÚpeerAddressN)r   r   r,   r   r-   r   r.   r   r   ÚsentinelÚhost_addressÚpeer_addressr0   ÚassertEqualr   r   r3   s       r   Ú test_preDataReceived_getPeerHostz>HAProxyWrappingFactoryV1Tests.test_preDataReceived_getPeerHostF   sË   € õ
 )­Ô)<½^Ñ)LÔ)LÑMÔMˆØ×%Ò%ÝÔ  {°DÑ9Ô9ñ
ô 
ˆõ 5ÝœÔ2ÝœÔ2ð
ñ 
ô 
ˆ	ð 	×Ò˜YÑ'Ô'Ð'Ø×Ò˜Ÿš™œ­$¬-Ô*DÑEÔEÐEØ×Ò˜Ÿš™œ­$¬-Ô*DÑEÔEÐEÐEÐEr   c                 ó4  — t          t          j        t          ¦  «        ¦  «        }|                     t          j        ddd¦  «        ¦  «        }t          ¦   «         }|                     |¦  «         | 	                    d¦  «         |  
                    |                     ¦   «         j        d¦  «         |  
                    |                     ¦   «         j        d¦  «         |  
                    |j        j                             ¦   «         j        d¦  «         |  
                    |j        j                             ¦   «         j        d¦  «         |  
                    |                     ¦   «         j        d¦  «         |  
                    |                     ¦   «         j        d¦  «         |  
                    |j        j                             ¦   «         j        d¦  «         |  
                    |j        j                             ¦   «         j        d¦  «         dS )	úP
        Test if IPv4 headers result in the correct host and peer data.
        r(   r:   r*   s&   PROXY TCP4 1.1.1.1 2.2.2.2 8080 8888
z1.1.1.1z2.2.2.2é¸"  N)r   r   r,   r   r-   r   r.   r   r0   r   r@   r   ÚhostÚportÚwrappedProtocolr   r   r3   s       r   Ú(test_validIPv4HeaderResolves_getPeerHostzFHAProxyWrappingFactoryV1Tests.test_validIPv4HeaderResolves_getPeerHostW   sÙ  € õ )­Ô)<½^Ñ)LÔ)LÑMÔMˆØ×%Ò%ÝÔ  {°DÑ9Ô9ñ
ô 
ˆõ 5Ñ6Ô6ˆ	Ø×Ò˜YÑ'Ô'Ð'Ø×ÒÐFÑGÔGÐGØ×Ò˜Ÿš™œÔ-¨yÑ9Ô9Ð9Ø×Ò˜Ÿš™œÔ-¨tÑ4Ô4Ð4Ø×ÒØÔ!Ô+×3Ò3Ñ5Ô5Ô:Øñ	
ô 	
ð 	
ð 	×ÒØÔ!Ô+×3Ò3Ñ5Ô5Ô:Øñ	
ô 	
ð 	
ð 	×Ò˜Ÿš™œÔ-¨yÑ9Ô9Ð9Ø×Ò˜Ÿš™œÔ-¨tÑ4Ô4Ð4Ø×ÒØÔ!Ô+×3Ò3Ñ5Ô5Ô:Øñ	
ô 	
ð 	
ð 	×ÒØÔ!Ô+×3Ò3Ñ5Ô5Ô:Øñ	
ô 	
ð 	
ð 	
ð 	
r   c                 ó4  — t          t          j        t          ¦  «        ¦  «        }|                     t          j        ddd¦  «        ¦  «        }t          ¦   «         }|                     |¦  «         | 	                    d¦  «         |  
                    |                     ¦   «         j        d¦  «         |  
                    |                     ¦   «         j        d¦  «         |  
                    |j        j                             ¦   «         j        d¦  «         |  
                    |j        j                             ¦   «         j        d¦  «         |  
                    |                     ¦   «         j        d¦  «         |  
                    |                     ¦   «         j        d¦  «         |  
                    |j        j                             ¦   «         j        d¦  «         |  
                    |j        j                             ¦   «         j        d¦  «         dS )úP
        Test if IPv6 headers result in the correct host and peer data.
        r(   ú::1r*   s   PROXY TCP6 ::1 ::2 8080 8888
z::2rD   N)r   r   r,   r   r-   r   ÚIPv6Addressr   r0   r   r@   r   rE   rF   rG   r   r   r3   s       r   Ú(test_validIPv6HeaderResolves_getPeerHostzFHAProxyWrappingFactoryV1Tests.test_validIPv6HeaderResolves_getPeerHostw   sÙ  € õ )­Ô)<½^Ñ)LÔ)LÑMÔMˆØ×%Ò%ÝÔ  u¨dÑ3Ô3ñ
ô 
ˆõ 5Ñ6Ô6ˆ	Ø×Ò˜YÑ'Ô'Ð'Ø×ÒÐ>Ñ?Ô?Ð?Ø×Ò˜Ÿš™œÔ-¨uÑ5Ô5Ð5Ø×Ò˜Ÿš™œÔ-¨tÑ4Ô4Ð4Ø×ÒØÔ!Ô+×3Ò3Ñ5Ô5Ô:Øñ	
ô 	
ð 	
ð 	×ÒØÔ!Ô+×3Ò3Ñ5Ô5Ô:Øñ	
ô 	
ð 	
ð 	×Ò˜Ÿš™œÔ-¨uÑ5Ô5Ð5Ø×Ò˜Ÿš™œÔ-¨tÑ4Ô4Ð4Ø×ÒØÔ!Ô+×3Ò3Ñ5Ô5Ô:Øñ	
ô 	
ð 	
ð 	×ÒØÔ!Ô+×3Ò3Ñ5Ô5Ô:Øñ	
ô 	
ð 	
ð 	
ð 	
r   c                 óT  — t          t          j        t          ¦  «        ¦  «        }|                     t          j        ddd¦  «        ¦  «        }t          ¦   «         }|                     |¦  «         | 	                    d¦  «         |  
                    |j        j        d¦  «         dS )úN
        Test if non-header bytes are passed to the wrapped protocol.
        r(   rK   r*   s,   PROXY TCP6 ::1 ::2 8080 8888
HTTP/1.1 / GETó   HTTP/1.1 / GETN©r   r   r,   r   r-   r   rL   r   r0   r   r@   rG   r   r3   s       r   Ú'test_overflowBytesSentToWrappedProtocolzEHAProxyWrappingFactoryV1Tests.test_overflowBytesSentToWrappedProtocol—   sœ   € õ )­Ô)<½^Ñ)LÔ)LÑMÔMˆØ×%Ò%ÝÔ  u¨dÑ3Ô3ñ
ô 
ˆõ 5Ñ6Ô6ˆ	Ø×Ò˜YÑ'Ô'Ð'Ø×ÒÐLÑMÔMÐMØ×Ò˜Ô.Ô3Ð5FÑGÔGÐGÐGÐGr   c                 ó~  — t          t          j        t          ¦  «        ¦  «        }|                     t          j        ddd¦  «        ¦  «        }t          ¦   «         }|                     |¦  «         | 	                    d¦  «         | 	                    d¦  «         |  
                    |j        j        d¦  «         dS )úK
        Test if header streaming passes extra data appropriately.
        r(   rK   r*   ó   PROXY TCP6 ::1 ::2 ó   8080 8888
HTTP/1.1 / GETrP   NrQ   r3   s       r   Ú-test_overflowBytesSentToWrappedProtocolChunkszKHAProxyWrappingFactoryV1Tests.test_overflowBytesSentToWrappedProtocolChunks¤   s±   € õ )­Ô)<½^Ñ)LÔ)LÑMÔMˆØ×%Ò%ÝÔ  u¨dÑ3Ô3ñ
ô 
ˆõ 5Ñ6Ô6ˆ	Ø×Ò˜YÑ'Ô'Ð'Ø×ÒÐ1Ñ2Ô2Ð2Ø×ÒÐ9Ñ:Ô:Ð:Ø×Ò˜Ô.Ô3Ð5FÑGÔGÐGÐGÐGr   c                 ó¨  — t          t          j        t          ¦  «        ¦  «        }|                     t          j        ddd¦  «        ¦  «        }t          ¦   «         }|                     |¦  «         | 	                    d¦  «         | 	                    d¦  «         | 	                    d¦  «         |  
                    |j        j        d¦  «         dS )	zT
        Test if wrapper writes all data to wrapped protocol after parsing.
        r(   rK   r*   rU   rV   s   

s   HTTP/1.1 / GET

NrQ   r3   s       r   Ú,test_overflowBytesSentToWrappedProtocolAfterzJHAProxyWrappingFactoryV1Tests.test_overflowBytesSentToWrappedProtocolAfter²   sÅ   € õ )­Ô)<½^Ñ)LÔ)LÑMÔMˆØ×%Ò%ÝÔ  u¨dÑ3Ô3ñ
ô 
ˆõ 5Ñ6Ô6ˆ	Ø×Ò˜YÑ'Ô'Ð'Ø×ÒÐ1Ñ2Ô2Ð2Ø×ÒÐ9Ñ:Ô:Ð:Ø×Ò˜;Ñ'Ô'Ð'Ø×Ò˜Ô.Ô3Ð5NÑOÔOÐOÐOÐOr   r   )r   r   r    r!   r6   r8   rA   rH   rM   rR   rW   rY   r#   r   r   r%   r%   #   sÒ   € € € € € ðð ð
.ð .ð .ð .ð.ð .ð .ð .ðFð Fð Fð Fð"
ð 
ð 
ð 
ð@
ð 
ð 
ð 
ð@Hð Hð Hð HðHð Hð Hð HðPð Pð Pð Pð Pð Pr   r%   c                   ó^   — e Zd ZdZdZdZdZdez   ez   Zdd„Zdd	„Z	dd
„Z
dd„Zdd„Zdd„ZdS )ÚHAProxyWrappingFactoryV2Testsz]
    Test L{twisted.protocols.haproxy.HAProxyWrappingFactory} with v2 PROXY
    headers.
    s   

 
QUIT
!     �"¸s4   

 
QUIT
!! $                              �"¸sl   /home/tests/mysockets/sock                                                                                  s   

 
QUIT
!1 Ør   Nc                 óv  — t          t          j        t          ¦  «        ¦  «        }|                     t          j        ddd¦  «        ¦  «        }t          ¦   «         }||_        | 	                    |¦  «         | 
                    d| j        dd…         z   ¦  «         |                      |j        ¦  «         dS )r'   r(   rK   r*   ó    é   N)r   r   r,   r   r-   r   rL   r   r/   r0   r   Ú
IPV4HEADERr1   r2   r3   s       r   r6   z;HAProxyWrappingFactoryV2Tests.test_invalidHeaderDisconnectsú   s­   € õ )­Ô)<½^Ñ)LÔ)LÑMÔMˆØ×%Ò%ÝÔ  u¨dÑ3Ô3ñ
ô 
ˆõ 5Ñ6Ô6ˆ	Ø"ˆ	ÔØ×Ò˜YÑ'Ô'Ð'Ø×Ò˜7 T¤_°Q°R°RÔ%8Ñ8Ñ9Ô9Ð9Ø×Ò˜Ô,Ñ-Ô-Ð-Ð-Ð-r   c                 ó>  — t          t          j        t          ¦  «        ¦  «        }|                     t          j        ddd¦  «        ¦  «        }t          ¦   «         }|                     |¦  «         | 	                    | j
        ¦  «         |                      |                     ¦   «         j        d¦  «         |                      |                     ¦   «         j        d¦  «         |                      |j        j                             ¦   «         j        d¦  «         |                      |j        j                             ¦   «         j        d¦  «         |                      |                     ¦   «         j        d¦  «         |                      |                     ¦   «         j        d¦  «         |                      |j        j                             ¦   «         j        d¦  «         |                      |j        j                             ¦   «         j        d¦  «         dS )rC   r(   r:   r*   rD   N)r   r   r,   r   r-   r   r.   r   r0   r   r_   r@   r   rE   rF   rG   r   r   r3   s       r   rH   zFHAProxyWrappingFactoryV2Tests.test_validIPv4HeaderResolves_getPeerHost  sÚ  € õ )­Ô)<½^Ñ)LÔ)LÑMÔMˆØ×%Ò%ÝÔ  {°DÑ9Ô9ñ
ô 
ˆõ 5Ñ6Ô6ˆ	Ø×Ò˜YÑ'Ô'Ð'Ø×Ò˜4œ?Ñ+Ô+Ð+Ø×Ò˜Ÿš™œÔ-¨{Ñ;Ô;Ð;Ø×Ò˜Ÿš™œÔ-¨tÑ4Ô4Ð4Ø×ÒØÔ!Ô+×3Ò3Ñ5Ô5Ô:Øñ	
ô 	
ð 	
ð 	×ÒØÔ!Ô+×3Ò3Ñ5Ô5Ô:Øñ	
ô 	
ð 	
ð 	×Ò˜Ÿš™œÔ-¨{Ñ;Ô;Ð;Ø×Ò˜Ÿš™œÔ-¨tÑ4Ô4Ð4Ø×ÒØÔ!Ô+×3Ò3Ñ5Ô5Ô:Øñ	
ô 	
ð 	
ð 	×ÒØÔ!Ô+×3Ò3Ñ5Ô5Ô:Øñ	
ô 	
ð 	
ð 	
ð 	
r   c                 ó>  — t          t          j        t          ¦  «        ¦  «        }|                     t          j        ddd¦  «        ¦  «        }t          ¦   «         }|                     |¦  «         | 	                    | j
        ¦  «         |                      |                     ¦   «         j        d¦  «         |                      |                     ¦   «         j        d¦  «         |                      |j        j                             ¦   «         j        d¦  «         |                      |j        j                             ¦   «         j        d¦  «         |                      |                     ¦   «         j        d¦  «         |                      |                     ¦   «         j        d¦  «         |                      |j        j                             ¦   «         j        d¦  «         |                      |j        j                             ¦   «         j        d¦  «         dS )rJ   r(   rK   r*   z0:0:0:0:0:0:0:1rD   N)r   r   r,   r   r-   r   r.   r   r0   r   Ú
IPV6HEADERr@   r   rE   rF   rG   r   r   r3   s       r   rM   zFHAProxyWrappingFactoryV2Tests.test_validIPv6HeaderResolves_getPeerHost(  sÜ  € õ )­Ô)<½^Ñ)LÔ)LÑMÔMˆØ×%Ò%ÝÔ  u¨dÑ3Ô3ñ
ô 
ˆõ 5Ñ6Ô6ˆ	Ø×Ò˜YÑ'Ô'Ð'Ø×Ò˜4œ?Ñ+Ô+Ð+Ø×Ò˜Ÿš™œÔ-Ð/@ÑAÔAÐAØ×Ò˜Ÿš™œÔ-¨tÑ4Ô4Ð4Ø×ÒØÔ!Ô+×3Ò3Ñ5Ô5Ô:Øñ	
ô 	
ð 	
ð 	×ÒØÔ!Ô+×3Ò3Ñ5Ô5Ô:Øñ	
ô 	
ð 	
ð 	×Ò˜Ÿš™œÔ-Ð/@ÑAÔAÐAØ×Ò˜Ÿš™œÔ-¨tÑ4Ô4Ð4Ø×ÒØÔ!Ô+×3Ò3Ñ5Ô5Ô:Øñ	
ô 	
ð 	
ð 	×ÒØÔ!Ô+×3Ò3Ñ5Ô5Ô:Øñ	
ô 	
ð 	
ð 	
ð 	
r   c                 óª  — t          t          j        t          ¦  «        ¦  «        }|                     t          j        d¦  «        ¦  «        }t          ¦   «         }|                     |¦  «         | 	                    | j
        ¦  «         |                      |                     ¦   «         j        d¦  «         |                      |j        j                             ¦   «         j        d¦  «         |                      |                     ¦   «         j        d¦  «         |                      |j        j                             ¦   «         j        d¦  «         dS )zP
        Test if UNIX headers result in the correct host and peer data.
        s   /home/test/sockets/server.socks   /home/tests/mysockets/sockN)r   r   r,   r   r-   r   ÚUNIXAddressr   r0   r   Ú
UNIXHEADERr@   r   ÚnamerG   r   r   r3   s       r   Ú(test_validUNIXHeaderResolves_getPeerHostzFHAProxyWrappingFactoryV2Tests.test_validUNIXHeaderResolves_getPeerHostH  s-  € õ )­Ô)<½^Ñ)LÔ)LÑMÔMˆØ×%Ò%ÝÔÐ AÑBÔBñ
ô 
ˆõ 5Ñ6Ô6ˆ	Ø×Ò˜YÑ'Ô'Ð'Ø×Ò˜4œ?Ñ+Ô+Ð+Ø×Ò˜Ÿš™œÔ-Ð/LÑMÔMÐMØ×ÒØÔ!Ô+×3Ò3Ñ5Ô5Ô:Ø)ñ	
ô 	
ð 	
ð 	×Ò˜Ÿš™œÔ-Ð/LÑMÔMÐMØ×ÒØÔ!Ô+×3Ò3Ñ5Ô5Ô:Ø)ñ	
ô 	
ð 	
ð 	
ð 	
r   c                 ód  — t          t          j        t          ¦  «        ¦  «        }|                     t          j        ddd¦  «        ¦  «        }t          ¦   «         }|                     |¦  «         | 	                    | j
        dz   ¦  «         |                      |j        j        d¦  «         dS )rO   r(   rK   r*   rP   N©r   r   r,   r   r-   r   rL   r   r0   r   rb   r@   rG   r   r3   s       r   rR   zEHAProxyWrappingFactoryV2Tests.test_overflowBytesSentToWrappedProtocol^  s£   € õ )­Ô)<½^Ñ)LÔ)LÑMÔMˆØ×%Ò%ÝÔ  u¨dÑ3Ô3ñ
ô 
ˆõ 5Ñ6Ô6ˆ	Ø×Ò˜YÑ'Ô'Ð'Ø×Ò˜4œ?Ð->Ñ>Ñ?Ô?Ð?Ø×Ò˜Ô.Ô3Ð5FÑGÔGÐGÐGÐGr   c                 ó¸  — t          t          j        t          ¦  «        ¦  «        }|                     t          j        ddd¦  «        ¦  «        }t          ¦   «         }|                     |¦  «         | 	                    | j
        dd…         ¦  «         | 	                    | j
        dd…         dz   ¦  «         |                      |j        j        d¦  «         dS )rT   r(   rK   r*   Né   rP   ri   r3   s       r   rW   zKHAProxyWrappingFactoryV2Tests.test_overflowBytesSentToWrappedProtocolChunksk  sË   € õ )­Ô)<½^Ñ)LÔ)LÑMÔMˆØ×%Ò%ÝÔ  u¨dÑ3Ô3ñ
ô 
ˆõ 5Ñ6Ô6ˆ	Ø×Ò˜YÑ'Ô'Ð'Ø×Ò˜4œ?¨3¨B¨3Ô/Ñ0Ô0Ð0Ø×Ò˜4œ?¨2¨3¨3Ô/Ð2CÑCÑDÔDÐDØ×Ò˜Ô.Ô3Ð5FÑGÔGÐGÐGÐGr   r   )r   r   r    r!   r_   rb   Ú
_SOCK_PATHre   r6   rH   rM   rg   rR   rW   r#   r   r   r[   r[   Â   sß   € € € € € ðð ð
	ð ð 	ð ð"	Eð ðð ñ	ð ñ	ð ð .ð .ð .ð .ð
ð 
ð 
ð 
ð@
ð 
ð 
ð 
ð@
ð 
ð 
ð 
ð,Hð Hð Hð HðHð Hð Hð Hð Hð Hr   r[   N)r!   Útypingr   r	   r   Útwisted.internetr   Útwisted.internet.protocolr   r   Útwisted.internet.testingr   Útwisted.trialÚ_wrapperr   r   ÚTestCaser%   r[   r#   r   r   ú<module>rt      sH  ððð ð Ð Ð Ð Ð Ð Ø Ð Ð Ð Ð Ð à $Ð $Ð $Ð $Ð $Ð $Ø 7Ð 7Ð 7Ð 7Ð 7Ð 7Ð 7Ð 7Ø EÐ EÐ EÐ EÐ EÐ EØ "Ð "Ð "Ð "Ð "Ð "Ø -Ð -Ð -Ð -Ð -Ð -ðð ð ð ð �Xñ ô ð ð$\Pð \Pð \Pð \Pð \P HÔ$5ñ \Pô \Pð \Pð~uHð uHð uHð uHð uH HÔ$5ñ uHô uHð uHð uHð uHr   