§
    Ètºf3„  ã                   óJ  — d Z ddlZddlmZ ddlmZmZmZ ddlm	Z	m
Z
mZmZ ddlmZ ddlmZ ddlmZ dd	lmZmZmZ dd
lmZ ddlmZmZ ddlmZ ddlmZ  ed¦  «        Z e rddl!m"Z"m#Z# ddl$m%Z%m&Z&m'Z'm(Z( n G d„ d¦  «        Z" G d„ d¦  «        Z) G d„ de"j*        ¦  «        Z+ G d„ d¦  «        Z,ddlm-Z- e r e-j.        e,e+e(j/        ¦  «          G d„ dej0        ¦  «        Z1 G d„ d¦  «        Z2 G d„ d¦  «        Z3 G d „ d!¦  «        Z4 G d"„ d#¦  «        Z5e �ºdd$l!m6Z6 dd%l$m7Z7m8Z8m9Z9m:Z:m;Z;m<Z<  G d&„ d'¦  «        Z= G d(„ d)e6j>        ¦  «        Z? G d*„ d+e9j@        ¦  «        ZA G d,„ d-¦  «        ZB G d.„ d/eBe;jC        ¦  «        ZD G d0„ d1eBe;jE        ¦  «        ZF G d2„ d3e<jG        ¦  «        ZH G d4„ d5e8jI        ¦  «        ZJ G d6„ d7e7jK        ¦  «        ZLd8„ ZM G d9„ d:ejN        ¦  «        ZO G d;„ d<ejN        ¦  «        ZP G d=„ d>ejN        ¦  «        ZQ G d?„ d@ejN        ¦  «        ZRdS )Az!
Tests for L{twisted.conch.ssh}.
é    N)Úchain)ÚDictÚListÚTuple)ÚprivateDSA_opensshÚprivateRSA_opensshÚpublicDSA_opensshÚpublicRSA_openssh)ÚLoopbackRelay)Úportal)ÚUnauthorizedLogin)ÚdeferÚprotocolÚreactor)ÚProcessTerminated)ÚfailureÚlog)ÚrequireModule)ÚunittestÚcryptography)ÚavatarÚerror)Ú_kexÚcommonÚ
forwardingÚsessionc                   ó(   — e Zd Z G d„ d¦  «        ZdS )r   c                   ó   — e Zd ZdS )úavatar.ConchUserN)Ú__name__Ú
__module__Ú__qualname__© ó    úZ/var/www/surfInsights/venv3-11/lib/python3.11/site-packages/twisted/conch/test/test_ssh.pyÚ	ConchUserr   $   s   € € € € € ØˆDr$   r&   N)r    r!   r"   r&   r#   r$   r%   r   r   #   s<   € € € € € ð	ð 	ð 	ð 	ð 	ñ 	ô 	ð 	ð 	ð 	r$   r   c                   ó"   — e Zd ZdZdZd„ Zd„ ZdS )ÚConchTestRealma"  
    A realm which expects a particular avatarId to log in once and creates a
    L{ConchTestAvatar} for that request.

    @ivar expectedAvatarID: The only avatarID that this realm will produce an
        avatar for.

    @ivar avatar: A reference to the avatar after it is requested.
    Nc                 ó   — || _         d S ©N)ÚexpectedAvatarID)Úselfr+   s     r%   Ú__init__zConchTestRealm.__init__5   s   € Ø 0ˆÔÐÐr$   c                 óÒ   — || j         k    rC| j        �t          d¦  «        ‚t          ¦   «         | _        |d         | j        | j        j        fS t          d| j         ›d|›�¦  «        ‚)zˆ
        Return a new L{ConchTestAvatar} if the avatarID matches the expected one
        and this is the first avatar request.
        NzOnly one login allowedr   zOnly z may log in, not )r+   r   r   ÚConchTestAvatarÚlogout)r,   ÚavatarIDÚmindÚ
interfacess       r%   ÚrequestAvatarzConchTestRealm.requestAvatar8   sv   € ð
 �tÔ,Ò,Ð,ØŒ{Ð&Ý'Ð(@ÑAÔAÐAÝ)Ñ+Ô+ˆDŒKØ˜a”= $¤+¨t¬{Ô/AÐAÐAÝØJ�DÔ)ÐJÐJ¸hÐJÐJñ
ô 
ð 	
r$   )r    r!   r"   Ú__doc__r   r-   r4   r#   r$   r%   r(   r(   (   sC   € € € € € ðð ð €Fð1ð 1ð 1ð
ð 
ð 
ð 
ð 
r$   r(   c                   óB   — e Zd ZdZesdZdZd„ Zd„ Zd„ Z	d„ Z
d„ Zd	„ Zd
S )r/   z§
    An avatar against which various SSH features can be tested.

    @ivar loggedOut: A flag indicating whether the avatar logout method has been
        called.
    úcannot run without cryptographyFc                 ó  — t           j                             | ¦  «         i | _        i | _        | j                             t          j        t          j
        dœ¦  «         | j                             dt          i¦  «         d S )N)ó   sessions   direct-tcpipó   crazy)r   r&   r-   Ú	listenersÚglobalRequestsÚchannelLookupÚupdater   Ú
SSHSessionr   ÚopenConnectForwardingClientÚsubsystemLookupÚCrazySubsystem©r,   s    r%   r-   zConchTestAvatar.__init__T   s}   € ÝÔ×!Ò! $Ñ'Ô'Ð'ØˆŒØ ˆÔØÔ×!Ò!å#Ô.Ý!+Ô!Gðð ñ	
ô 	
ð 	
ð 	Ô×#Ò# X­~Ð$>Ñ?Ô?Ð?Ð?Ð?r$   c                 ó   — || j         d<   dS )NÚfooé   ©r<   ©r,   Údatas     r%   Ú
global_foozConchTestAvatar.global_foo`   s   € Ø%)ˆÔ˜EÑ"Øˆqr$   c                 ó   — || j         d<   dS )NÚfoo_2)rF   ó   datarG   rH   s     r%   Úglobal_foo_2zConchTestAvatar.global_foo_2d   s   € Ø'+ˆÔ˜GÑ$Øˆzr$   c                 ó  — t          j        |¦  «        \  }}	 t          j        |t          j        | j        ||ft           j        ¦  «        |¬¦  «        }|| j        ||f<   dS # t          $ r t          j
        d d¦  «         Y dS w xY w)N)Ú	interfacerF   z2something went wrong with remote->local forwardingr   )r   ÚunpackGlobal_tcpip_forwardr   Ú	listenTCPÚSSHListenForwardingFactoryÚconnÚ SSHListenServerForwardingChannelr;   ÚBaseExceptionr   Úerr©r,   rI   ÚhostÚportÚlisteners        r%   Úglobal_tcpip_forwardz$ConchTestAvatar.global_tcpip_forwardh   s¨   € ÝÔ:¸4Ñ@Ô@‰
ˆˆdð	ÝÔ(ØÝÔ5Ø”I  d˜|­ZÔ-Xñô ð ðñ ô ˆHð ,4ˆDŒN˜D $˜<Ñ(Ø�1øõ ð 	ð 	ð 	ÝŒG�DÐNÑOÔOÐOØ�1�1ð	øøøs   ™<A# Á#BÂBc                 ó²   — t          j        |¦  «        \  }}| j                             ||fd ¦  «        }|sdS | j        ||f= |                     ¦   «          dS )Nr   rF   )r   rQ   r;   ÚgetÚstopListeningrX   s        r%   Úglobal_cancel_tcpip_forwardz+ConchTestAvatar.global_cancel_tcpip_forwardy   sc   € ÝÔ:¸4Ñ@Ô@‰
ˆˆdØ”>×%Ò% t¨T l°DÑ9Ô9ˆØð 	Ø�1ØŒN˜D $˜<Ð(Ø×ÒÑ Ô Ð Øˆqr$   c                 ó¢   — d| _         | j                             ¦   «         D ]-}t          j        d|z  ¦  «         |                     ¦   «          Œ.d S )NTzstopListening %s)Ú	loggedOutr;   Úvaluesr   Úmsgr_   )r,   r[   s     r%   r0   zConchTestAvatar.logout‚   s[   € ØˆŒØœ×-Ò-Ñ/Ô/ð 	%ð 	%ˆHÝŒGÐ&¨Ñ1Ñ2Ô2Ð2Ø×"Ò"Ñ$Ô$Ð$Ð$ð	%ð 	%r$   N)r    r!   r"   r5   r   Úskiprb   r-   rJ   rN   r\   r`   r0   r#   r$   r%   r/   r/   G   s�   € € € € € ðð ð ð 1Ø0ˆà€Ið
@ð 
@ð 
@ðð ð ðð ð ðð ð ð"ð ð ð%ð %ð %ð %ð %r$   r/   c                   ó6   — e Zd ZdZd„ Zd„ Zd„ Zd„ Zd„ Zd„ Z	dS )	ÚConchSessionForTestAvatarz2
    An ISession adapter for ConchTestAvatar.
    c                 ó”   — || _         | | j         _        d| _        d| _        d| _        d| _        t          j        ¦   «         | _        dS )zq
        Initialize the session and create a reference to it on the avatar for
        later inspection.
        NFr   )	r   Ú_testSessionÚcmdÚprotoÚptyReqÚeofr   ÚDeferredÚonClose)r,   r   s     r%   r-   z"ConchSessionForTestAvatar.__init__Ž   sD   € ð
 ˆŒØ#'ˆŒÔ ØˆŒØˆŒ
ØˆŒØˆŒÝ”~Ñ'Ô'ˆŒˆˆr$   c                 óX   — t          j        d¦  «         || _        || _        d| _        d S )Nzpty reqT)r   rd   Ú_terminalTypeÚ_windowSizerl   )r,   ÚtermÚ
windowSizeÚattrss       r%   ÚgetPtyz ConchSessionForTestAvatar.getPty›   s-   € ÝŒ�	ÑÔÐØ!ˆÔØ%ˆÔØˆŒˆˆr$   c                 óh   — t          j        d¦  «         || _        t          |¦  «         d| _        d S )Nzopening shelló   shell)r   rd   rk   ÚEchoTransportrj   )r,   rk   s     r%   Ú	openShellz#ConchSessionForTestAvatar.openShell¡   s2   € ÝŒ�Ñ Ô Ð ØˆŒ
Ý�eÑÔÐØˆŒˆˆr$   c                 ó´  — || _         || _        |                     ¦   «         d         }|dk    r*t          |¦  «        }t	          j        d|j        ¦  «         né|dk    rAt          |¦  «        }|                     |dd …         ¦  «         |                     ¦   «          n¢|dk    rAt          |¦  «        }|                     |dd …         ¦  «         |                     ¦   «          n[|dk    rAt          |¦  «        }|                     |dd …         ¦  «         |                     ¦   «          nt          j        d¦  «        ‚d	| j        j        j        _        d S )
Nr   ó   falses   echoé   s   sechoé   s   eechoúbad execrF   )rj   rk   ÚsplitÚFalseTransportr   Ú	callLaterÚloseConnectionry   ÚwriteÚSuperEchoTransportÚErrEchoTransportr   Ú
ConchErrorr   rT   Ú	transportÚexpectedLoseConnection)r,   rk   rj   ÚfÚts        r%   ÚexecCommandz%ConchSessionForTestAvatar.execCommand§   sH  € ØˆŒØˆŒ
Ø�IŠI‰KŒK˜ŒNˆØ�Š=ˆ=Ý˜uÑ%Ô%ˆAõ Ô˜a Ô!1Ñ2Ô2Ð2Ð2Ø�'Š\ˆ\Ý˜eÑ$Ô$ˆAØ�GŠG�C˜˜˜”GÑÔÐØ×ÒÑÔÐÐØ�(Š]ˆ]Ý" 5Ñ)Ô)ˆAØ�GŠG�C˜˜˜”GÑÔÐØ×ÒÑÔÐÐØ�(Š]ˆ]Ý  Ñ'Ô'ˆAØ�GŠG�C˜˜˜”GÑÔÐØ×ÒÑÔÐÐåÔ" :Ñ.Ô.Ð.Ø<=ˆŒÔÔ"Ô9Ð9Ð9r$   c                 ó   — d| _         d S ©NrF   )rm   rC   s    r%   ÚeofReceivedz%ConchSessionForTestAvatar.eofReceivedÀ   s   € ØˆŒˆˆr$   c                 óž   — t          j        d| j        z  ¦  «         | j        j        j        | _        | j                             d ¦  «         d S )Nzclosed cmd "%s")	r   rd   rj   rk   r   ÚremoteWindowLeftÚremoteWindowLeftAtClosero   ÚcallbackrC   s    r%   Úclosedz ConchSessionForTestAvatar.closedÃ   sF   € ÝŒÐ! D¤HÑ,Ñ-Ô-Ð-Ø'+¤zÔ'9Ô'JˆÔ$ØŒ×Ò˜dÑ#Ô#Ð#Ð#Ð#r$   N)
r    r!   r"   r5   r-   rv   rz   rŒ   r�   r”   r#   r$   r%   rg   rg   ‰   sx   € € € € € ðð ð(ð (ð (ðð ð ðð ð ð>ð >ð >ð2ð ð ð$ð $ð $ð $ð $r$   rg   )Ú
componentsc                   ó   — e Zd Zd„ Zd„ ZdS )rB   c                 ó   — d S r*   r#   )r,   ÚargsÚkws      r%   r-   zCrazySubsystem.__init__Ò   s   € Øˆr$   c                 ó   — dS )z
        good ... good
        Nr#   rC   s    r%   ÚconnectionMadezCrazySubsystem.connectionMadeÕ   s   € € € r$   N)r    r!   r"   r-   r›   r#   r$   r%   rB   rB   Ñ   s2   € € € € € ðð ð ðð ð ð ð r$   rB   c                   ó   — e Zd ZdZd„ Zd„ ZdS )r�   a  
    False transport should act like a /bin/false execution, i.e. just exit with
    nonzero status, writing nothing to the terminal.

    @ivar proto: The protocol associated with this transport.
    @ivar closed: A flag tracking whether C{loseConnection} has been called yet.
    c                 óL   — || _         |                     | ¦  «         d| _        dS )zY
        @type p L{twisted.conch.ssh.session.SSHSessionProcessProtocol} instance
        r   N©rk   ÚmakeConnectionr”   ©r,   Úps     r%   r-   zFalseTransport.__init__ä   s*   € ð ˆŒ
Ø	×Ò˜ÑÔÐØˆŒˆˆr$   c           	      ó2  — | j         rdS d| _         | j                             ¦   «          | j                             ¦   «          | j                             ¦   «          | j                             t          j        t          ddd¦  «        ¦  «        ¦  «         dS )zI
        Disconnect the protocol associated with this transport.
        NrF   éÿ   ©	r”   rk   ÚinConnectionLostÚoutConnectionLostÚerrConnectionLostÚprocessEndedr   ÚFailurer   rC   s    r%   rƒ   zFalseTransport.loseConnectionì   s‰   € ð Œ;ð 	ØˆFØˆŒØŒ
×#Ò#Ñ%Ô%Ð%ØŒ
×$Ò$Ñ&Ô&Ð&ØŒ
×$Ò$Ñ&Ô&Ð&ØŒ
×Ò¥¤Õ0AÀ#ÀtÈTÑ0RÔ0RÑ SÔ SÑTÔTÐTÐTÐTr$   N)r    r!   r"   r5   r-   rƒ   r#   r$   r%   r�   r�   Û   sA   € € € € € ðð ðð ð ð
Uð 
Uð 
Uð 
Uð 
Ur$   r�   c                   ó    — e Zd Zd„ Zd„ Zd„ ZdS )ry   c                 óL   — || _         |                     | ¦  «         d| _        d S ©Nr   rž   r    s     r%   r-   zEchoTransport.__init__ú   ó(   € ØˆŒ
Ø	×Ò˜ÑÔÐØˆŒˆˆr$   c                 óä   — t          j        t          |¦  «        ¦  «         | j                             |¦  «         | j                             d¦  «         d|v r|                      ¦   «          d S d S )Nó   
ó    )r   rd   Úreprrk   ÚoutReceivedrƒ   rH   s     r%   r„   zEchoTransport.writeÿ   sl   € ÝŒ•�T‘
”
ÑÔÐØŒ
×Ò˜tÑ$Ô$Ð$ØŒ
×Ò˜wÑ'Ô'Ð'Ø�dˆ?ˆ?Ø×ÒÑ!Ô!Ð!Ð!Ð!ð ˆ?r$   c           	      ó2  — | j         rd S d| _         | j                             ¦   «          | j                             ¦   «          | j                             ¦   «          | j                             t          j        t          dd d ¦  «        ¦  «        ¦  «         d S ©NrF   r   r¤   rC   s    r%   rƒ   zEchoTransport.loseConnection  ó‡   € ØŒ;ð 	ØˆFØˆŒØŒ
×#Ò#Ñ%Ô%Ð%ØŒ
×$Ò$Ñ&Ô&Ð&ØŒ
×$Ò$Ñ&Ô&Ð&ØŒ
×Ò¥¤Õ0AÀ!ÀTÈ4Ñ0PÔ0PÑ QÔ QÑRÔRÐRÐRÐRr$   N©r    r!   r"   r-   r„   rƒ   r#   r$   r%   ry   ry   ù   sF   € € € € € ðð ð ð
"ð "ð "ðSð Sð Sð Sð Sr$   ry   c                   ó    — e Zd Zd„ Zd„ Zd„ ZdS )r†   c                 óL   — || _         |                     | ¦  «         d| _        d S r¬   rž   r    s     r%   r-   zErrEchoTransport.__init__  r­   r$   c                 ón   — | j                              |¦  «         | j                              d¦  «         d S ©Nr¯   )rk   ÚerrReceivedrH   s     r%   r„   zErrEchoTransport.write  s4   € ØŒ
×Ò˜tÑ$Ô$Ð$ØŒ
×Ò˜wÑ'Ô'Ð'Ð'Ð'r$   c           	      ó2  — | j         rd S d| _         | j                             ¦   «          | j                             ¦   «          | j                             ¦   «          | j                             t          j        t          dd d ¦  «        ¦  «        ¦  «         d S r´   r¤   rC   s    r%   rƒ   zErrEchoTransport.loseConnection  rµ   r$   Nr¶   r#   r$   r%   r†   r†     sF   € € € € € ðð ð ð
(ð (ð (ðSð Sð Sð Sð Sr$   r†   c                   ó    — e Zd Zd„ Zd„ Zd„ ZdS )r…   c                 óL   — || _         |                     | ¦  «         d| _        d S r¬   rž   r    s     r%   r-   zSuperEchoTransport.__init__%  r­   r$   c                 óÖ   — | j                              |¦  «         | j                              d¦  «         | j                              |¦  «         | j                              d¦  «         d S rº   )rk   r²   r»   rH   s     r%   r„   zSuperEchoTransport.write*  s`   € ØŒ
×Ò˜tÑ$Ô$Ð$ØŒ
×Ò˜wÑ'Ô'Ð'ØŒ
×Ò˜tÑ$Ô$Ð$ØŒ
×Ò˜wÑ'Ô'Ð'Ð'Ð'r$   c           	      ó2  — | j         rd S d| _         | j                             ¦   «          | j                             ¦   «          | j                             ¦   «          | j                             t          j        t          dd d ¦  «        ¦  «        ¦  «         d S r´   r¤   rC   s    r%   rƒ   z!SuperEchoTransport.loseConnection0  rµ   r$   Nr¶   r#   r$   r%   r…   r…   $  sF   € € € € € ðð ð ð
(ð (ð (ðSð Sð Sð Sð Sr$   r…   )Úcheckers)ÚchannelÚ
connectionÚfactoryÚkeysrˆ   Úuserauthc                   ó$   — e Zd Zej        fZd„ ZdS )ÚConchTestPasswordCheckerc                 ó¢   — |j         dk    r$|j        dk    rt          j        |j         ¦  «        S t          j        t          d¦  «        ¦  «        S )Nó   testuseró   testpasszBad credentials)ÚusernameÚpasswordr   ÚsucceedÚfailÚ	Exception)r,   Úcredentialss     r%   ÚrequestAvatarIdz(ConchTestPasswordChecker.requestAvatarIdH  sJ   € àÔ$¨Ò3Ð3ØÔ(¨KÒ7Ð7å”} [Ô%9Ñ:Ô:Ð:Ý”:�iÐ(9Ñ:Ô:Ñ;Ô;Ð;r$   N)r    r!   r"   rÁ   ÚIUsernamePasswordÚcredentialInterfacesrÒ   r#   r$   r%   rÈ   rÈ   E  s/   € € € € € Ø (Ô :Ð<Ðð	<ð 	<ð 	<ð 	<ð 	<r$   rÈ   c                   ó   — e Zd Zd„ ZdS )ÚConchTestSSHCheckerc                 óR   — |dk    st          | j        |         ¦  «        dk     rdS dS )NrÊ   é   FT)ÚlenÚsuccessfulCredentials)r,   ÚavatarIds     r%   ÚareDonezConchTestSSHChecker.areDoneQ  s2   € Ø˜;Ò&Ð&­#¨dÔ.HÈÔ.RÑ*SÔ*SÐVWÒ*WÐ*WØ�uØ�4r$   N)r    r!   r"   rÜ   r#   r$   r%   rÖ   rÖ   P  s#   € € € € € ð	ð 	ð 	ð 	ð 	r$   rÖ   c                   ó€   — e Zd ZdZej        ej        dœZd„ Z	d„ Z
d„ Zdeeeeeef                  f         fd„Zd„ Zd	S )
ÚConchTestServerFactoryF)s   ssh-userauthó   ssh-connectionc                 ó  — t          ¦   «         }t          t          j        d„ | j                             ¦   «         D ¦   «         ¦  «        ¦  «        |_        | |_        t          | d¦  «        r| j	        |_	        || _
        |S )Nc              3   ó>   K  — | ]}|                      ¦   «         V — Œd S r*   )ÚsupportedSignatureAlgorithms)Ú.0Úkeys     r%   ú	<genexpr>z7ConchTestServerFactory.buildProtocol.<locals>.<genexpr>a  sB   è è € ð $ð $àð ×4Ò4Ñ6Ô6ð$ð $ð $ð $ð $ð $r$   r‰   )ÚConchTestServerÚlistr   Úfrom_iterableÚprivateKeysrc   ÚsupportedPublicKeysrÄ   Úhasattrr‰   rk   )r,   Úaddrrk   s      r%   ÚbuildProtocolz$ConchTestServerFactory.buildProtocol^  sŽ   € Ý#Ñ%Ô%ˆEÝ(,ÝÔ#ð $ð $à#Ô/×6Ò6Ñ8Ô8ð$ñ $ô $ñ ô ñ)ô )ˆEÔ%ð !ˆEŒMå�tÐ5Ñ6Ô6ð KØ/3Ô/J�Ô,àˆDŒJØˆLr$   c                 ó”   — t           j                             t          ¦  «        t           j                             t          ¦  «        dœS ©N)ó   ssh-rsaó   ssh-dss©rÅ   ÚKeyÚ
fromStringr
   r	   rC   s    r%   ÚgetPublicKeysz$ConchTestServerFactory.getPublicKeysn  s9   € å œH×/Ò/Õ0AÑBÔBÝ œH×/Ò/Õ0AÑBÔBðð ð r$   c                 ó”   — t           j                             t          ¦  «        t           j                             t          ¦  «        dœS rï   ©rÅ   ró   rô   r   r   rC   s    r%   ÚgetPrivateKeysz%ConchTestServerFactory.getPrivateKeyst  s9   € å œH×/Ò/Õ0BÑCÔCÝ œH×/Ò/Õ0BÑCÔCðð ð r$   Úreturnc                 ó0   — dt          j        d¦  «        giS )a%  
            Diffie-Hellman primes that can be used for the
            diffie-hellman-group-exchange-sha1 key exchange.

            @return: The primes and generators.
            @rtype: L{dict} mapping the key size to a C{list} of
                C{(generator, prime)} tupple.
            i   s   diffie-hellman-group14-sha1)r   ÚgetDHGeneratorAndPrimerC   s    r%   Ú	getPrimesz ConchTestServerFactory.getPrimesz  s   € ð �4Ô6Ð7UÑVÔVÐWÐXÐXr$   c                 óD   — t           j                             | ||¦  «        S r*   )rÄ   Ú
SSHFactoryÚ
getService)r,   ÚtransÚnames      r%   rÿ   z!ConchTestServerFactory.getService‰  s   € ÝÔ%×0Ò0°°u¸dÑCÔCÐCr$   N)r    r!   r"   ÚnoisyrÆ   ÚSSHUserAuthServerrÃ   ÚSSHConnectionÚservicesrí   rõ   rø   r   Úintr   r   rü   rÿ   r#   r$   r%   rÞ   rÞ   V  s«   € € € € € Øˆð &Ô7Ø)Ô7ð
ð 
ˆð
	ð 	ð 	ð 	ð 	ð 	ð	ð 	ð 	ð	Y˜t C¨¨e°C¸°H¬oÔ)>Ð$>Ô?ð 	Yð 	Yð 	Yð 	Yð	Dð 	Dð 	Dð 	Dð 	Dr$   rÞ   c                   ó$   — e Zd ZdZd„ Zd„ Zd„ ZdS )ÚConchTestBaser   c                 óz   — | j         rd S t          | d¦  «        st          j        d| › d|› �¦  «        ‚d| _         d S )Nr‰   zunexpectedly lost connection ú
rF   )Údonerë   r   ÚFailTest©r,   Úreasons     r%   ÚconnectionLostzConchTestBase.connectionLost�  sY   € ØŒyð Ø�Ý˜4Ð!9Ñ:Ô:ð ÝÔ'ØD°DÐDÐD¸FÐDÐDñô ð ð ˆDŒIˆIˆIr$   c           
      ó°   — d| _         |t          j        k    r*t          j        t          d| ›d|›d|›�¦  «        ¦  «         |                      ¦   «          d S )NrF   zgot disconnect for z	: reason z, desc: )r‰   rˆ   ÚDISCONNECT_BY_APPLICATIONr   rW   rÐ   rƒ   )r,   Ú
reasonCodeÚdescs      r%   ÚreceiveErrorzConchTestBase.receiveError˜  sm   € Ø*+ˆDÔ'ð �YÔ@Ò@Ð@Ý”Ý�Ià˜4˜4   ¨T¨Tð3ñô ñô ð ð ×ÒÑ!Ô!Ð!Ð!Ð!r$   c                 ó0   — t          j        d|› �¦  «        ‚)Nzgot unimplemented: seqid )r   r  )r,   ÚseqIDs     r%   ÚreceiveUnimplementedz"ConchTestBase.receiveUnimplemented¨  s   € ÝÔ#Ð$GÀÐ$GÐ$GÑHÔHÐHr$   N)r    r!   r"   r  r  r  r  r#   r$   r%   r  r  Œ  sK   € € € € € Øˆð	ð 	ð 	ð	"ð 	"ð 	"ð 	Ið 	Ið 	Ið 	Ið 	Ir$   r  c                   ó   — e Zd Zd„ ZdS )ræ   c                 ó|   — t                                | |¦  «         t          j                             | |¦  «         d S r*   )r  r  rˆ   ÚSSHServerTransportr  s     r%   r  zConchTestServer.connectionLost¬  ó7   € Ý×(Ò(¨¨vÑ6Ô6Ð6ÝÔ(×7Ò7¸¸fÑEÔEÐEÐEÐEr$   N)r    r!   r"   r  r#   r$   r%   ræ   ræ   «  s(   € € € € € ð	Fð 	Fð 	Fð 	Fð 	Fr$   ræ   c                   ó*   — e Zd ZdZd„ Zd„ Zd„ Zd„ ZdS )ÚConchTestClientz½
        @ivar _channelFactory: A callable which accepts an SSH connection and
            returns a channel which will be attached to a new channel on that
            connection.
        c                 ó   — || _         d S r*   )Ú_channelFactory©r,   ÚchannelFactorys     r%   r-   zConchTestClient.__init__·  s   € Ø#1ˆDÔ Ð Ð r$   c                 ó|   — t                                | |¦  «         t          j                             | |¦  «         d S r*   )r  r  rˆ   ÚSSHClientTransportr  s     r%   r  zConchTestClient.connectionLostº  r  r$   c                 óô   — |t           j                             t          ¦  «                             ¦   «         k    }|dk    }|r|rt          j        d¦  «        S t          j        t          d¦  «        ¦  «        S )Ns/   85:25:04:32:58:55:96:9f:57:ee:fb:a8:1a:ea:69:darF   zKey or fingerprint mismatch)	rÅ   ró   rô   r
   Úblobr   rÎ   rÏ   rÐ   )r,   rä   ÚfpÚkeyMatchÚfingerprintMatchs        r%   ÚverifyHostKeyzConchTestClient.verifyHostKey¾  sn   € Ø�dœh×1Ò1Õ2CÑDÔD×IÒIÑKÔKÒKˆHØ!Ð%WÒWÐØð (Ð,ð (Ý”} QÑ'Ô'Ð'Ý”:�iÐ(EÑFÔFÑGÔGÐGr$   c                 óp   — |                       t          dt          | j        ¦  «        ¦  «        ¦  «         d S )NrÊ   )ÚrequestServiceÚConchTestClientAuthÚConchTestClientConnectionr  rC   s    r%   ÚconnectionSecurez ConchTestClient.connectionSecureÅ  sB   € Ø×ÒÝ#ØÕ!:¸4Ô;OÑ!PÔ!Pñô ñô ð ð ð r$   N)r    r!   r"   r5   r-   r  r)  r.  r#   r$   r%   r  r  °  s`   € € € € € ð	ð 	ð	2ð 	2ð 	2ð	Fð 	Fð 	Fð	Hð 	Hð 	Hð	ð 	ð 	ð 	ð 	r$   r  c                   ó2   — e Zd ZdZdZdZd„ Zd„ Zd„ Zd„ Z	dS )r,  r   c                 óŠ   — | j         s| j        rt          j        d¦  «        ‚t          j                             | |¦  «         d S )Nz2got USERAUTH_SUCCESS before password and publickey)ÚcanSucceedPasswordÚcanSucceedPublicKeyr   r  rÆ   ÚSSHUserAuthClientÚssh_USERAUTH_SUCCESS)r,   Úpackets     r%   r4  z(ConchTestClientAuth.ssh_USERAUTH_SUCCESSÑ  sP   € ØÔ*ð ¨tÔ/Gð ÝÔ'ØHñô ð õ Ô&×;Ò;¸DÀ&ÑIÔIÐIÐIÐIr$   c                 ó8   — d| _         t          j        d¦  «        S )NrF   rË   )r1  r   rÎ   rC   s    r%   ÚgetPasswordzConchTestClientAuth.getPasswordØ  s   € Ø&'ˆDÔ#Ý”= Ñ-Ô-Ð-r$   c                 ó|   — d| _         t          j        t          j                             t          ¦  «        ¦  «        S rŽ   )r2  r   rÎ   rÅ   ró   rô   r   rC   s    r%   ÚgetPrivateKeyz!ConchTestClientAuth.getPrivateKeyÜ  s+   € Ø'(ˆDÔ$Ý”=¥¤×!4Ò!4Õ5GÑ!HÔ!HÑIÔIÐIr$   c                 óJ   — t           j                             t          ¦  «        S r*   )rÅ   ró   rô   r	   rC   s    r%   ÚgetPublicKeyz ConchTestClientAuth.getPublicKeyà  s   € Ý”8×&Ò&Õ'8Ñ9Ô9Ð9r$   N)
r    r!   r"   ÚhasTriedNoner2  r1  r4  r7  r9  r;  r#   r$   r%   r,  r,  Ì  sg   € € € € € ØˆØÐØÐð	Jð 	Jð 	Jð	.ð 	.ð 	.ð	Jð 	Jð 	Jð	:ð 	:ð 	:ð 	:ð 	:r$   r,  c                   ó*   — e Zd ZdZdZdZdZd„ Zd„ ZdS )r-  z�
        @ivar _completed: A L{Deferred} which will be fired when the number of
            results collected reaches C{totalResults}.
        rß   r   é   c                 óR   — t           j                             | ¦  «         || _        d S r*   )rÃ   r  r-   r  r   s     r%   r-   z"ConchTestClientConnection.__init__í  s'   € ÝÔ$×-Ò-¨dÑ3Ô3Ð3Ø#1ˆDÔ Ð Ð r$   c                 óX   — |                       |                      | ¬¦  «        ¦  «         d S )N)rT   )ÚopenChannelr  rC   s    r%   ÚserviceStartedz(ConchTestClientConnection.serviceStartedñ  s-   € Ø×Ò˜T×1Ò1°tÐ1Ñ<Ô<Ñ=Ô=Ð=Ð=Ð=r$   N)	r    r!   r"   r5   r  ÚresultsÚtotalResultsr-   rB  r#   r$   r%   r-  r-  ã  sM   € € € € € ð	ð 	ð
 !ˆØˆØˆð	2ð 	2ð 	2ð	>ð 	>ð 	>ð 	>ð 	>r$   r-  c                   ó>   — e Zd Zd„ Zd„ Zd„ Zd„ Zd„ Zd„ Zd„ Z	d„ Z
d	S )
ÚSSHTestChannelc                 ó¢   — || _         || _        g | _        g | _        t	          j        ¦   «         | _        t          j        j	        | g|¢R i |¤Ž d S r*   )
r  Ú_openedÚreceivedÚreceivedExtr   rn   ro   rÂ   Ú
SSHChannelr-   )r,   r  Úopenedr˜   Úkwargss        r%   r-   zSSHTestChannel.__init__õ  sX   € ØˆDŒIØ!ˆDŒLØˆDŒMØ!ˆDÔÝ œ>Ñ+Ô+ˆDŒLÝÔÔ'¨Ð>¨tÐ>Ð>Ð>°vÐ>Ð>Ð>Ð>Ð>r$   c                 ó:   — | j                              |¦  «         d S r*   )rH  Úerrbackr  s     r%   Ú
openFailedzSSHTestChannel.openFailedý  s   € ØŒL× Ò  Ñ(Ô(Ð(Ð(Ð(r$   c                 ó:   — | j                              | ¦  «         d S r*   )rH  r“   )r,   Úignores     r%   ÚchannelOpenzSSHTestChannel.channelOpen   ó   € ØŒL×!Ò! $Ñ'Ô'Ð'Ð'Ð'r$   c                 ó:   — | j                              |¦  «         d S r*   )rI  ÚappendrH   s     r%   ÚdataReceivedzSSHTestChannel.dataReceived  s   € ØŒM× Ò  Ñ&Ô&Ð&Ð&Ð&r$   c                 óŒ   — |t           j        k    r| j                             |¦  «         d S t	          j        d|›�¦  «         d S )NzUnrecognized extended data: )rÃ   ÚEXTENDED_DATA_STDERRrJ  rV  r   rd   )r,   ÚdataTyperI   s      r%   ÚextReceivedzSSHTestChannel.extReceived  sL   € Ø�:Ô:Ò:Ð:ØÔ ×'Ò'¨Ñ-Ô-Ð-Ð-Ð-å”ÐC°xÐCÐCÑDÔDÐDÐDÐDr$   c                 ó>   — t          j        d|¦  «        \  | _        d S )Nz>L)ÚstructÚunpackÚstatus)r,   r_  s     r%   Úrequest_exit_statusz"SSHTestChannel.request_exit_status  s   € Ý"œM¨$°Ñ7Ô7‰MˆTŒ[ˆ[ˆ[r$   c                 ó   — d| _         d S )NT)Ú	eofCalledrC   s    r%   r�   zSSHTestChannel.eofReceived  s   € Ø!ˆDŒNˆNˆNr$   c                 ó:   — | j                              d ¦  «         d S r*   )ro   r“   rC   s    r%   r”   zSSHTestChannel.closed  rT  r$   N)r    r!   r"   r-   rP  rS  rW  r[  r`  r�   r”   r#   r$   r%   rF  rF  ô  s�   € € € € € ð	?ð 	?ð 	?ð	)ð 	)ð 	)ð	(ð 	(ð 	(ð	'ð 	'ð 	'ð	Eð 	Eð 	Eð	8ð 	8ð 	8ð	"ð 	"ð 	"ð	(ð 	(ð 	(ð 	(ð 	(r$   rF  c                  óœ   — t          j        dt          j                             t
          ¦  «        gi¦  «        } t          j        | ¦  «        S )z´
        Produces a SSHPublicKeyChecker with an in-memory key mapping with
        a single use: 'testuser'

        @return: L{twisted.conch.checkers.SSHPublicKeyChecker}
        rÊ   )rÁ   ÚInMemorySSHKeyDBrÅ   ró   rô   r	   ÚSSHPublicKeyChecker)ÚconchTestPublicKeyDBs    r%   ÚconchTestPublicKeyCheckerrh    sG   € õ  (Ô8Ø�4œ8×.Ò.Õ/@ÑAÔAÐBÐCñ 
ô  
Ðõ Ô+Ð,@ÑAÔAÐAr$   c                   óR   — e Zd ZdZesdZdd„Zd„ Zd„ Zd„ Z	d„ Z
d	„ Zd
„ Zd„ Zd„ ZdS )ÚSSHProtocolTestsz^
    Tests for communication between L{SSHServerTransport} and
    L{SSHClientTransport}.
    úcan't run without cryptographyr9   c                 óî  ‡‡‡— t          j        ¦   «         Št          d¦  «        | _        t	          j        | j        ¦  «        }t          ¦   «         }|                     t          ¦   «         ¦  «         |                     t          ¦   «         ¦  «         |                     |¦  «         t          ¦   «         }||_        |                     ¦   «          |                     d¦  «        | _        t          | j        ¦  «        | _        t!          ˆˆˆfd„¦  «        | _        t          | j        ¦  «        | _        | j                             | j        ¦  «         | j                             | j        ¦  «         ‰S )zÏ
        Create a connected SSH client and server protocol pair and return a
        L{Deferred} which fires with an L{SSHTestChannel} instance connected to
        a channel on that SSH connection.
        rÊ   Nc                 ó$   •— t          ‰‰fd| i‰¤ŽS )NrT   )rF  )rT   rM  r  Úresults    €€€r%   ú<lambda>z:SSHProtocolTests._ourServerOurClientTest.<locals>.<lambda>>  s   ø€ �¨¨fÐJÐJ¸4ÐJÀ6ÐJÐJ€ r$   )r   rn   r(   Úrealmr   ÚPortalrÖ   ÚregisterCheckerrÈ   rh  rÞ   ÚstartFactoryrí   Úserverr   ÚclientTransportr  ÚclientÚserverTransportrŸ   )r,   r  rM  r¡   ÚsshpcÚfacrn  s    ``   @r%   Ú_ourServerOurClientTestz(SSHProtocolTests._ourServerOurClientTest+  sB  øøø€ õ ”Ñ!Ô!ˆÝ# KÑ0Ô0ˆŒ
ÝŒM˜$œ*Ñ%Ô%ˆÝ#Ñ%Ô%ˆØ×ÒÕ6Ñ8Ô8Ñ9Ô9Ð9Ø×ÒÕ7Ñ9Ô9Ñ:Ô:Ð:Ø	×Ò˜%Ñ Ô Ð Ý$Ñ&Ô&ˆØˆŒ
Ø×ÒÑÔÐØ×'Ò'¨Ñ-Ô-ˆŒÝ,¨T¬[Ñ9Ô9ˆÔÝ%ØJÐJÐJÐJÐJÐJñ
ô 
ˆŒõ  -¨T¬[Ñ9Ô9ˆÔàŒ×"Ò" 4Ô#7Ñ8Ô8Ð8ØŒ×"Ò" 4Ô#7Ñ8Ô8Ð8Øˆr$   c                 óØ   ‡ — ‰                       ¦   «         }ˆ fd„} |j        |¦  «         ˆ fd„} |j        |¦  «         ˆ fd„} |j        |¦  «         ˆ fd„} |j        |¦  «         |S )zå
        Run the Conch server against the Conch client.  Set up several different
        channels which exercise different behaviors and wait for them to
        complete.  Verify that the channels with errors log them.
        c           	      ó¢   •— | ‰_         ‰                     | j                             | dt	          j        d¦  «        d¦  «        t          ¦  «        S )Nó	   subsystems	   not-crazyrF   ©rÂ   ÚassertFailurerT   ÚsendRequestr   ÚNSrÐ   ©rÂ   r,   s    €r%   ÚcbSubsystemzFSSHProtocolTests.test_subsystemsAndGlobalRequests.<locals>.cbSubsystemO  sO   ø€ Ø"ˆDŒLØ×%Ò%Ø”×(Ò(Ø˜\­6¬9°\Ñ+BÔ+BÀAñô õ ñ	ô ð r$   c                 óp   •— ‰j         }|j                             |dt          j        d¦  «        d¦  «        S )Nr}  r:   rF   ©rÂ   rT   r€  r   r�  ©ÚignoredrÂ   r,   s     €r%   ÚcbNotCrazyFailedzKSSHProtocolTests.test_subsystemsAndGlobalRequests.<locals>.cbNotCrazyFailedZ  s7   ø€ Ø”lˆGØ”<×+Ò+Ø˜¥v¤y°Ñ':Ô':¸Añô ð r$   c                 óP  •— ‰j         }|j                             ddd¦  «        }|j                             ddd¦  «        }|                     ‰j        d¦  «         ‰                     |j                             ddd¦  «        t          ¦  «        }t          j        |||g¦  «        S )Nó   fooó   barrF   s   foo-2ó   bar2rM   )	rÂ   rT   ÚsendGlobalRequestÚaddCallbackÚassertEqualr  rÐ   r   ÚgatherResults)r‡  rÂ   Úd1Úd2Úd3r,   s        €r%   ÚcbGlobalRequestszKSSHProtocolTests.test_subsystemsAndGlobalRequests.<locals>.cbGlobalRequestsb  sš   ø€ Ø”lˆGØ”×/Ò/°¸ÀÑBÔBˆBà”×/Ò/°¸'À1ÑEÔEˆBØ�NŠN˜4Ô+¨WÑ5Ô5Ð5à×#Ò#Ø”×.Ò.¨v°v¸qÑAÔAÅ9ñô ˆBõ Ô&¨¨B° |Ñ4Ô4Ð4r$   c                 óØ   •— ‰                      ‰j        j        j        dddœ¦  «         ‰j        }d|j        j        _        |j                             ¦   «           |j	        ¦   «          d S )Nr‹  rŒ  )rE   rL   T)
r�  rp  r   r<   rÂ   rT   rˆ   r‰   ÚserviceStoppedrƒ   r†  s     €r%   Ú
disconnectzESSHProtocolTests.test_subsystemsAndGlobalRequests.<locals>.disconnectq  sq   ø€ Ø×ÒØ”
Ô!Ô0¸&È7Ð2SÐ2Sñô ð ð ”lˆGØ<@ˆGŒLÔ"Ô9ØŒL×'Ò'Ñ)Ô)Ð)Ø"ˆGÔ"Ñ$Ô$Ð$Ð$Ð$r$   ©rz  rŽ  )r,   rÂ   rƒ  rˆ  r”  r—  s   `     r%   Ú test_subsystemsAndGlobalRequestsz1SSHProtocolTests.test_subsystemsAndGlobalRequestsG  sÕ   ø€ ð ×.Ò.Ñ0Ô0ˆð	ð 	ð 	ð 	ð 	ð 	ˆÔ˜KÑ(Ô(Ð(ð	ð 	ð 	ð 	ð 	ð 	ˆÔÐ,Ñ-Ô-Ð-ð	5ð 	5ð 	5ð 	5ð 	5ð 	ˆÔÐ,Ñ-Ô-Ð-ð	%ð 	%ð 	%ð 	%ð 	%ð 	ˆÔ˜JÑ'Ô'Ð'àˆr$   c                 ó  ‡ ‡— ‰                       ¦   «         }t          j        ddd¦  «        Šˆˆ fd„} |j        |¦  «         ˆ fd„} |j        |¦  «         ˆ fd„} |j        |¦  «         ˆ fd„} |j        |¦  «         |S )z‹
        L{SSHChannel.sendRequest} can open a shell with a I{pty-req} request,
        specifying a terminal type and window size.
        ó   conch-test-term©é   éP   r   r   r$   c                 óL   •— | ‰_         | j                             | d‰d¦  «        S )Ns   pty-reqrF   )rÂ   rT   r€  )rÂ   rI   r,   s    €€r%   Ú	cbChannelz.SSHProtocolTests.test_shell.<locals>.cbChannel‡  s&   ø€ Ø"ˆDŒLØ”<×+Ò+¨G°ZÀÀqÑIÔIÐIr$   c                 óx  •— ‰j         j        j        j        d         j        }‰                     |j        ‰j         j        ¦  «         ‰                     |j        d¦  «         ‰                     |j        d¦  «         ‰ 	                    |j
        ¦  «         ‰j        }|j                             |ddd¦  «        S )Nr   r›  rœ  rx   r$   rF   )rp  r   rT   Úchannelsr   ÚassertIsr�  rq   rr   Ú
assertTruerl   rÂ   r€  )r‡  r   rÂ   r,   s      €r%   ÚcbPtyz*SSHProtocolTests.test_shell.<locals>.cbPty�  s    ø€ à”jÔ'Ô,Ô5°aÔ8Ô@ˆGØ�MŠM˜'œ.¨$¬*Ô*;Ñ<Ô<Ð<Ø×Ò˜WÔ2Ð4FÑGÔGÐGØ×Ò˜WÔ0°.ÑAÔAÐAØ�OŠO˜GœNÑ+Ô+Ð+Ø”lˆGØ”<×+Ò+¨G°X¸sÀAÑFÔFÐFr$   c                 óè   •— ‰j                              d¦  «         ‰j         j                             ‰j         ¦  «         t	          j        ‰j         j        ‰j        j        j	        j        g¦  «        S )Ns   testing the shell! )
rÂ   r„   rT   ÚsendEOFr   r�  ro   rp  r   ri   ©r‡  r,   s    €r%   ÚcbShellz,SSHProtocolTests.test_shell.<locals>.cbShell™  sb   ø€ ØŒL×ÒÐ8Ñ9Ô9Ð9ØŒLÔ×%Ò% d¤lÑ3Ô3Ð3ÝÔ&Ø”Ô% t¤zÔ'8Ô'EÔ'MÐNñô ð r$   c                 ób  •— ‰j         j        dk    r"t          j        d‰j         j        fz  ¦  «         ‰                     d                     ‰j         j        ¦  «        d¦  «         ‰                     ‰j         j        ¦  «         ‰                     ‰j	        j
        j        j        ¦  «         d S )Nr   zshell exit status was not 0: %ir$   s   testing the shell! 
)rÂ   r_  r   rd   r�  ÚjoinrI  r¤  rb  rp  r   ri   rm   r¨  s    €r%   ÚcbExitedz-SSHProtocolTests.test_shell.<locals>.cbExited¢  sœ   ø€ ØŒ|Ô" aÒ'Ð'Ý”Ð9¸T¼\Ô=PÐ<RÑRÑSÔSÐSØ×ÒØ—’˜œÔ.Ñ/Ô/Ð1Nñô ð ð �OŠO˜DœLÔ2Ñ3Ô3Ð3Ø�OŠO˜DœJÔ-Ô:Ô>Ñ?Ô?Ð?Ð?Ð?r$   )rz  r   ÚpackRequest_pty_reqrŽ  )r,   rÂ   r   r¥  r©  r¬  rI   s   `     @r%   Ú
test_shellzSSHProtocolTests.test_shell~  sþ   øø€ ð
 ×.Ò.Ñ0Ô0ˆåÔ*Ð+=¸~ÈsÑSÔSˆð	Jð 	Jð 	Jð 	Jð 	Jð 	Jð 	ˆÔ˜IÑ&Ô&Ð&ð	Gð 	Gð 	Gð 	Gð 	Gð 	ˆÔ˜EÑ"Ô"Ð"ð	ð 	ð 	ð 	ð 	ð 	ˆÔ˜GÑ$Ô$Ð$ð	@ð 	@ð 	@ð 	@ð 	@ð 	ˆÔ˜HÑ%Ô%Ð%Øˆr$   c                 ó„   ‡ — ‰                       ¦   «         }ˆ fd„} |j        |¦  «         ˆ fd„} |j        |¦  «         |S )zŸ
        If L{SSHChannel.sendRequest} issues an exec which the server responds to
        with an error, the L{Deferred} it returns fires its errback.
        c           	      ó¢   •— | ‰_         ‰                     | j                             | dt	          j        d¦  «        d¦  «        t          ¦  «        S )Nó   execs	   jumboliahrF   r~  r‚  s    €r%   r   z3SSHProtocolTests.test_failedExec.<locals>.cbChannelµ  sI   ø€ Ø"ˆDŒLØ×%Ò%Ø”×(Ò(¨°'½6¼9À\Ñ;RÔ;RÐTUÑVÔVÝñô ð r$   c                 ó’   •— ‰                      t          j        ¦  «        }‰                     |d         j        j        d¦  «         d S )Nr   )r   N)ÚflushLoggedErrorsr   r‡   r�  Úvaluer˜   ©r‡  Úerrorsr,   s     €r%   ÚcbFailedz2SSHProtocolTests.test_failedExec.<locals>.cbFailed¾  sA   ø€ ð ×+Ò+­EÔ,<Ñ=Ô=ˆFØ×Ò˜V AœYœ_Ô1Ð3EÑFÔFÐFÐFÐFr$   r˜  )r,   rÂ   r   r·  s   `   r%   Útest_failedExecz SSHProtocolTests.test_failedExec®  s|   ø€ ð
 ×.Ò.Ñ0Ô0ˆð	ð 	ð 	ð 	ð 	ð 	ˆÔ˜IÑ&Ô&Ð&ð	Gð 	Gð 	Gð 	Gð 	Gð 	ˆÔ˜HÑ%Ô%Ð%Øˆr$   c                 ó®   ‡ — ‰                       ¦   «         }ˆ fd„} |j        |¦  «         ˆ fd„} |j        |¦  «         ˆ fd„} |j        |¦  «         |S )z‘
        When the process started by a L{SSHChannel.sendRequest} exec request
        exits, the exit status is reported to the channel.
        c                 óp   •— | ‰_         | j                             | dt          j        d¦  «        d¦  «        S )Nr±  r|   rF   r…  r‚  s    €r%   r   z5SSHProtocolTests.test_falseChannel.<locals>.cbChannelÎ  s1   ø€ Ø"ˆDŒLØ”<×+Ò+¨G°W½f¼iÈÑ>QÔ>QÐSTÑUÔUÐUr$   c                 ó   •— ‰j         j        S r*   ©rÂ   ro   r¨  s    €r%   ÚcbExecz2SSHProtocolTests.test_falseChannel.<locals>.cbExecÔ  ó   ø€ Ø”<Ô'Ð'r$   c                 óˆ   •— ‰                      ‰j        j        g ¦  «         ‰                     ‰j        j        d¦  «         d S r¬   )r�  rÂ   rI  ÚassertNotEqualr_  r¨  s    €r%   ÚcbClosedz4SSHProtocolTests.test_falseChannel.<locals>.cbClosedÙ  s?   ø€ à×Ò˜Tœ\Ô2°BÑ7Ô7Ð7Ø×Ò ¤Ô 3°QÑ7Ô7Ð7Ð7Ð7r$   r˜  ©r,   rÂ   r   r½  rÁ  s   `    r%   Útest_falseChannelz"SSHProtocolTests.test_falseChannelÇ  sª   ø€ ð
 ×.Ò.Ñ0Ô0ˆð	Vð 	Vð 	Vð 	Vð 	Vð 	ˆÔ˜IÑ&Ô&Ð&ð	(ð 	(ð 	(ð 	(ð 	(ð 	ˆÔ˜FÑ#Ô#Ð#ð	8ð 	8ð 	8ð 	8ð 	8ð
 	ˆÔ˜HÑ%Ô%Ð%Øˆr$   c                 ó´   ‡ — ‰                       dd¬¦  «        }ˆ fd„} |j        |¦  «         ˆ fd„} |j        |¦  «         ˆ fd„} |j        |¦  «         |S )z„
        Bytes sent over the extended channel for stderr data are delivered to
        the channel's C{extReceived} method.
        é   r}   ©ÚlocalWindowÚlocalMaxPacketc                 óp   •— | ‰_         | j                             | dt          j        d¦  «        d¦  «        S )Nr±  s   eecho hellorF   r…  r‚  s    €r%   r   z5SSHProtocolTests.test_errorChannel.<locals>.cbChannelè  ó7   ø€ Ø"ˆDŒLØ”<×+Ò+Ø˜¥&¤)¨NÑ";Ô";¸Qñô ð r$   c                 ól   •— t          j        ‰j        j        ‰j        j        j        j        g¦  «        S r*   ©r   r�  rÂ   ro   rp  r   ri   r¨  s    €r%   r½  z2SSHProtocolTests.test_errorChannel.<locals>.cbExecð  ó0   ø€ ÝÔ&Ø”Ô% t¤zÔ'8Ô'EÔ'MÐNñô ð r$   c                 óÔ  •— ‰                      ‰j        j        g ¦  «         ‰                      d                     ‰j        j        ¦  «        d¦  «         ‰                      ‰j        j        d¦  «         ‰                     ‰j        j        ¦  «         ‰                      ‰j        j        d¦  «         ‰                      ‰j        j        ‰j	        j
        j        j        ¦  «         d S )Nr$   ó   hello
r   rÅ  )r�  rÂ   rI  r«  rJ  r_  r¤  rb  ÚlocalWindowLeftrp  r   ri   r’   r¨  s    €r%   rÁ  z4SSHProtocolTests.test_errorChannel.<locals>.cbClosed÷  sÊ   ø€ Ø×Ò˜Tœ\Ô2°BÑ7Ô7Ð7Ø×Ò˜SŸXšX d¤lÔ&>Ñ?Ô?ÀÑNÔNÐNØ×Ò˜Tœ\Ô0°!Ñ4Ô4Ð4Ø�OŠO˜DœLÔ2Ñ3Ô3Ð3Ø×Ò˜Tœ\Ô9¸1Ñ=Ô=Ð=Ø×ÒØ”Ô,Ø”
Ô!Ô.ÔFñô ð ð ð r$   r˜  rÂ  s   `    r%   Útest_errorChannelz"SSHProtocolTests.test_errorChannelá  s¬   ø€ ð
 ×.Ò.¸1ÈQÐ.ÑOÔOˆð	ð 	ð 	ð 	ð 	ð 	ˆÔ˜IÑ&Ô&Ð&ð	ð 	ð 	ð 	ð 	ð
 	ˆÔ˜FÑ#Ô#Ð#ð		ð 		ð 		ð 		ð 		ð 	ˆÔ˜HÑ%Ô%Ð%Øˆr$   c                 ó˜   ‡ — ‰                       ‰                      d¦  «        t          ¦  «        }ˆ fd„}|                     |¦  «         |S )z›
        When an attempt is made to open an unknown channel type, the L{Deferred}
        returned by L{SSHChannel.sendRequest} fires its errback.
        s   crazy-unknown-channelc                 óØ   •— ‰                      t          j        ¦  «        }‰                     |d         j        j        d¦  «         ‰                     t          |¦  «        d¦  «         d S )Nr   )é   zunknown channelrF   )r³  r   r‡   r�  r´  r˜   rÙ   rµ  s     €r%   r·  z6SSHProtocolTests.test_unknownChannel.<locals>.cbFailed  s[   ø€ Ø×+Ò+­EÔ,<Ñ=Ô=ˆFØ×Ò˜V AœYœ_Ô1Ð3IÑJÔJÐJØ×Ò�S ™[œ[¨!Ñ,Ô,Ð,Ð,Ð,r$   )r  rz  rÐ   rŽ  )r,   Údr·  s   `  r%   Útest_unknownChannelz$SSHProtocolTests.test_unknownChannel  s`   ø€ ð
 ×ÒØ×(Ò(Ð)AÑBÔBÅIñ
ô 
ˆð	-ð 	-ð 	-ð 	-ð 	-ð
 	
�Š�hÑÔÐØˆr$   c                 ó´   ‡ — ‰                       dd¬¦  «        }ˆ fd„} |j        |¦  «         ˆ fd„} |j        |¦  «         ˆ fd„} |j        |¦  «         |S )zc
        An L{SSHChannel} can be configured with a maximum packet size to
        receive.
        é   rF   rÆ  c                 óp   •— | ‰_         | j                             | dt          j        d¦  «        d¦  «        S )Nr±  s   secho hellorF   r…  r‚  s    €r%   r   z2SSHProtocolTests.test_maxPacket.<locals>.cbChannel  rÊ  r$   c                 ó   •— ‰j         j        S r*   r¼  r¨  s    €r%   r½  z/SSHProtocolTests.test_maxPacket.<locals>.cbExec'  r¾  r$   c                 ó’  •— ‰                      ‰j        j        d¦  «         ‰                      d                     ‰j        j        ¦  «        d¦  «         ‰                      d                     ‰j        j        ¦  «        d¦  «         ‰                      ‰j        j        d¦  «         ‰                     ‰j        j        ¦  «         d S )Nr   r$   rÏ  rØ  )	r�  rÂ   r_  r«  rI  rJ  rÐ  r¤  rb  r¨  s    €r%   rÁ  z1SSHProtocolTests.test_maxPacket.<locals>.cbClosed,  s¤   ø€ Ø×Ò˜Tœ\Ô0°!Ñ4Ô4Ð4Ø×Ò˜SŸXšX d¤lÔ&;Ñ<Ô<¸lÑKÔKÐKØ×Ò˜SŸXšX d¤lÔ&>Ñ?Ô?ÀÑNÔNÐNØ×Ò˜Tœ\Ô9¸2Ñ>Ô>Ð>Ø�OŠO˜DœLÔ2Ñ3Ô3Ð3Ð3Ð3r$   r˜  rÂ  s   `    r%   Útest_maxPacketzSSHProtocolTests.test_maxPacket  s¬   ø€ ð ×.Ò.¸2ÈaÐ.ÑPÔPˆð	ð 	ð 	ð 	ð 	ð 	ˆÔ˜IÑ&Ô&Ð&ð	(ð 	(ð 	(ð 	(ð 	(ð 	ˆÔ˜FÑ#Ô#Ð#ð	4ð 	4ð 	4ð 	4ð 	4ð 	ˆÔ˜HÑ%Ô%Ð%Øˆr$   c                 ó´   ‡ — ‰                       dd¬¦  «        }ˆ fd„} |j        |¦  «         ˆ fd„} |j        |¦  «         ˆ fd„} |j        |¦  «         |S )ze
        Normal standard out bytes are sent to the channel's C{dataReceived}
        method.
        rÅ  r}   rÆ  c                 óp   •— | ‰_         | j                             | dt          j        d¦  «        d¦  «        S )Nr±  s
   echo hellorF   r…  r‚  s    €r%   r   z-SSHProtocolTests.test_echo.<locals>.cbChannel=  s7   ø€ Ø"ˆDŒLØ”<×+Ò+Ø˜¥&¤)¨MÑ":Ô":¸Añô ð r$   c                 ól   •— t          j        ‰j        j        ‰j        j        j        j        g¦  «        S r*   rÌ  r¨  s    €r%   ÚcbEchoz*SSHProtocolTests.test_echo.<locals>.cbEchoE  rÍ  r$   c                 ó”  •— ‰                      ‰j        j        d¦  «         ‰                      d                     ‰j        j        ¦  «        d¦  «         ‰                      ‰j        j        d¦  «         ‰                     ‰j        j        ¦  «         ‰                      ‰j        j        ‰j        j	        j
        j        ¦  «         d S )Nr   r$   rÏ  rÅ  )r�  rÂ   r_  r«  rI  rÐ  r¤  rb  rp  r   ri   r’   r¨  s    €r%   rÁ  z,SSHProtocolTests.test_echo.<locals>.cbClosedL  s¯   ø€ Ø×Ò˜Tœ\Ô0°!Ñ4Ô4Ð4Ø×Ò˜SŸXšX d¤lÔ&;Ñ<Ô<¸lÑKÔKÐKØ×Ò˜Tœ\Ô9¸1Ñ=Ô=Ð=Ø�OŠO˜DœLÔ2Ñ3Ô3Ð3Ø×ÒØ”Ô,Ø”
Ô!Ô.ÔFñô ð ð ð r$   r˜  )r,   rÂ   r   rà  rÁ  s   `    r%   Ú	test_echozSSHProtocolTests.test_echo6  s¬   ø€ ð
 ×.Ò.¸1ÈQÐ.ÑOÔOˆð	ð 	ð 	ð 	ð 	ð 	ˆÔ˜IÑ&Ô&Ð&ð	ð 	ð 	ð 	ð 	ð
 	ˆÔ˜FÑ#Ô#Ð#ð	ð 	ð 	ð 	ð 	ð 	ˆÔ˜HÑ%Ô%Ð%Øˆr$   N)r9   )r    r!   r"   r5   r   re   rz  r™  r®  r¸  rÃ  rÑ  rÖ  rÜ  râ  r#   r$   r%   rj  rj  "  s½   € € € € € ðð ð
 ð 0Ø/ˆðð ð ð ð85ð 5ð 5ðn.ð .ð .ð`ð ð ð2ð ð ð4"ð "ð "ðHð ð ð"ð ð ð@!ð !ð !ð !ð !r$   rj  c                   óB   — e Zd ZesdZd
d„Zd„ Zd„ Zd„ Zd„ Z	d„ Z
d	„ ZdS )ÚSSHFactoryTestsrk  Nc                 óŠ   ‡— t          j        ¦   «         }ˆfd„|_        d„ |_        d„ |_        |                     ¦   «          |S )Nc                  ó   •— ‰ S r*   r#   ©Úprimess   €r%   ro  z0SSHFactoryTests.makeSSHFactory.<locals>.<lambda>`  s   ø€  v€ r$   c                  óN   — dt           j                             t          ¦  «        iS ©Nrð   )rÅ   ró   rô   r
   r#   r$   r%   ro  z0SSHFactoryTests.makeSSHFactory.<locals>.<lambda>a  s   € Ø�œ×+Ò+Õ,=Ñ>Ô>ð,
€ r$   c                  óN   — dt           j                             t          ¦  «        iS rê  )rÅ   ró   rô   r   r#   r$   r%   ro  z0SSHFactoryTests.makeSSHFactory.<locals>.<lambda>d  s   € Ø�œ×+Ò+Õ,>Ñ?Ô?ð-
€ r$   )rÄ   rþ   rü   rõ   rø   rs  )r,   rè  Ú
sshFactorys    ` r%   ÚmakeSSHFactoryzSSHFactoryTests.makeSSHFactory^  sW   ø€ ÝÔ'Ñ)Ô)ˆ
Ø-˜~˜~˜~ˆ
Ôð$
ð $
ˆ
Ô ð%
ð %
ˆ
Ô!ð 	×ÒÑ!Ô!Ð!ØÐr$   c                 óŽ   — |                       ¦   «         } |j        d¦  «        }|                      |t          j        ¦  «         dS )zc
        By default, buildProtocol() constructs an instance of
        SSHServerTransport.
        N)rí  rí   ÚassertIsInstancerˆ   r  )r,   rÄ   r   s      r%   Útest_buildProtocolz"SSHFactoryTests.test_buildProtocolj  sF   € ð
 ×%Ò%Ñ'Ô'ˆØ(�7Ô(¨Ñ.Ô.ˆØ×Ò˜h­	Ô(DÑEÔEÐEÐEÐEr$   c                 óš   ‡— g Šˆfd„}|                       ¦   «         }||_         |j        d¦  «         |                      dg‰¦  «         dS )zc
        buildProtocol() calls 'self.protocol()' to construct a protocol
        instance.
        c                  óT   •— ‰                      | ¦  «         t          j        ¦   «         S r*   )rV  rˆ   r  )r˜   Úcallss    €r%   ÚmakeProtocolzHSSHFactoryTests.test_buildProtocolRespectsProtocol.<locals>.makeProtocolz  s$   ø€ Ø�LŠL˜ÑÔÐÝÔ/Ñ1Ô1Ð1r$   Nr#   )rí  r   rí   r�  )r,   rô  rÄ   ró  s      @r%   Ú"test_buildProtocolRespectsProtocolz2SSHFactoryTests.test_buildProtocolRespectsProtocols  so   ø€ ð
 ˆð	2ð 	2ð 	2ð 	2ð 	2ð ×%Ò%Ñ'Ô'ˆØ'ˆÔØˆÔ˜dÑ#Ô#Ð#Ø×Ò˜"˜˜uÑ%Ô%Ð%Ð%Ð%r$   c                 óØ   — t          j        ¦   «         }d„ |_        d„ |_        |                     ¦   «          |                     d¦  «        }|                      g d¢|j        ¦  «         dS )zq
        buildProtocol() sets supportedPublicKeys to the list of supported
        signature algorithms.
        c                  ó”   — t           j                             t          ¦  «        t           j                             t          ¦  «        dœS rï   rò   r#   r$   r%   ro  zGSSHFactoryTests.test_buildProtocolSignatureAlgorithms.<locals>.<lambda>‰  s6   € Ýœ×+Ò+Õ,=Ñ>Ô>Ýœ×+Ò+Õ,=Ñ>Ô>ð#
ð #
€ r$   c                  ó”   — t           j                             t          ¦  «        t           j                             t          ¦  «        dœS rï   r÷   r#   r$   r%   ro  zGSSHFactoryTests.test_buildProtocolSignatureAlgorithms.<locals>.<lambda>�  s6   € Ýœ×+Ò+Õ,>Ñ?Ô?Ýœ×+Ò+Õ,>Ñ?Ô?ð$
ð $
€ r$   N)s   rsa-sha2-512s   rsa-sha2-256rð   rñ   )rÄ   rþ   rõ   rø   rs  rí   r�  rê   )r,   rŠ   r¡   s      r%   Ú%test_buildProtocolSignatureAlgorithmsz5SSHFactoryTests.test_buildProtocolSignatureAlgorithmsƒ  sƒ   € õ
 ÔÑ Ô ˆð
ð 
ˆŒð
ð 
ˆÔð 	
�ŠÑÔÐØ�OŠO˜DÑ!Ô!ˆØ×ÒØFÐFÐFØÔ!ñ	
ô 	
ð 	
ð 	
ð 	
r$   c                 óÈ   — |                       d¬¦  «        }|                     d¦  «        }|                      d|j        ¦  «         |                      d|j        ¦  «         dS )zg
        Group key exchanges are not supported when we don't have the primes
        database.
        Nrç  ó"   diffie-hellman-group-exchange-sha1ó$   diffie-hellman-group-exchange-sha256)rí  rí   ÚassertNotInÚsupportedKeyExchanges)r,   Úf1Úp1s      r%   Útest_buildProtocolNoPrimesz*SSHFactoryTests.test_buildProtocolNoPrimes˜  sy   € ð
 × Ò ¨Ð Ñ-Ô-ˆà×Ò˜dÑ#Ô#ˆà×ÒØ1°2Ô3Kñ	
ô 	
ð 	
ð 	×ÒØ3°RÔ5Mñ	
ô 	
ð 	
ð 	
ð 	
r$   c                 óÌ   — |                       ddi¬¦  «        }|                     d¦  «        }|                      d|j        ¦  «         |                      d|j        ¦  «         dS )zU
        Group key exchanges are supported when we have the primes database.
        rF   )rØ   rÔ  rç  Nrû  rü  )rí  rí   ÚassertInrþ  ©r,   Úf2Úp2s      r%   Útest_buildProtocolWithPrimesz,SSHFactoryTests.test_buildProtocolWithPrimes¨  sg   € ð × Ò ¨¨F¨Ð Ñ4Ô4ˆà×Ò˜dÑ#Ô#ˆà�ŠÐ;¸RÔ=UÑVÔVÐVØ�ŠÐ=¸rÔ?WÑXÔXÐXÐXÐXr$   c                 ó´   — |                       ¦   «         }|                     d¦  «        }|                      dd                     |j        ¦  «        ¦  «         dS )z_
        ECDSA key exchanges are listed with 256 having a higher priority among ECDSA.
        Ns8   ecdh-sha2-nistp256,ecdh-sha2-nistp384,ecdh-sha2-nistp521ó   ,)rí  rí   r  r«  rþ  r  s      r%   Útest_buildProtocolKexECDSAz*SSHFactoryTests.test_buildProtocolKexECDSA³  s_   € ð × Ò Ñ"Ô"ˆà×Ò˜dÑ#Ô#ˆð 	�ŠØGØ�IŠI�bÔ.Ñ/Ô/ñ	
ô 	
ð 	
ð 	
ð 	
r$   r*   )r    r!   r"   r   re   rí  rð  rõ  rù  r  r  r
  r#   r$   r%   rä  rä  Z  s•   € € € € € Øð 0Ø/ˆð
ð 
ð 
ð 
ðFð Fð Fð&ð &ð &ð 
ð 
ð 
ð*
ð 
ð 
ð 	Yð 	Yð 	Yð
ð 
ð 
ð 
ð 
r$   rä  c                   ó\   — e Zd ZdZesdZer eej        ¦  «        Zd„ Z	d„ Z
d„ Zd„ Zd„ ZdS )	ÚMPTestszs
    Tests for L{common.getMP}.

    @cvar getMP: a method providing a MP parser.
    @type getMP: C{callable}
    rk  c                 óX   — |                       |                      d¦  «        d¦  «         dS )zŸ
        L{common.getMP} should parse the a multiple precision integer from a
        string: a 4-byte length followed by length bytes of the integer.
        s         )rF   r$   N©r�  ÚgetMPrC   s    r%   Ú
test_getMPzMPTests.test_getMPÑ  s-   € ð
 	×Ò˜ŸšÐ$GÑHÔHÈ(ÑSÔSÐSÐSÐSr$   c                 óX   — |                       |                      d¦  «        d¦  «         dS )zv
        L{common.getMP} should be able to parse a big enough integer
        (that doesn't fit on one byte).
        s      )ir$   Nr  rC   s    r%   Útest_getMPBigIntegerzMPTests.test_getMPBigIntegerØ  s8   € ð
 	×ÒØ�JŠJÐ:Ñ;Ô;¸_ñ	
ô 	
ð 	
ð 	
ð 	
r$   c                 óZ   — |                       |                      dd¦  «        d¦  «         dS )zg
        L{common.getMP} has the ability to parse multiple integer in the same
        string.
        s               rØ   )rF   rØ   r$   Nr  rC   s    r%   Útest_multipleGetMPzMPTests.test_multipleGetMPá  sB   € ð
 	×ÒØ�JŠJØWØñô ð ñ	
ô 	
ð 	
ð 	
ð 	
r$   c                 óX   — |                       |                      d¦  «        d¦  «         dS )zu
        When more data than needed is sent to L{common.getMP}, it should return
        the remaining data.
        s         foo)rF   rŠ  Nr  rC   s    r%   Útest_getMPRemainingDatazMPTests.test_getMPRemainingDataî  s8   € ð
 	×ÒØ�JŠJÐ=Ñ>Ô>Àñ	
ô 	
ð 	
ð 	
ð 	
r$   c                 óR   — |                       t          j        | j        d¦  «         dS )z�
        When the string passed to L{common.getMP} doesn't even make 5 bytes,
        it should raise a L{struct.error}.
        s    N)ÚassertRaisesr]  r   r  rC   s    r%   Útest_notEnoughDatazMPTests.test_notEnoughData÷  s&   € ð
 	×Ò�&œ,¨¬
°KÑ@Ô@Ð@Ð@Ð@r$   N)r    r!   r"   r5   r   re   Ústaticmethodr   r  r  r  r  r  r  r#   r$   r%   r  r  Ã  s™   € € € € € ðð ð ð 0Ø/ˆàð +Ø�˜Vœ\Ñ*Ô*ˆðTð Tð Tð
ð 
ð 
ð
ð 
ð 
ð
ð 
ð 
ðAð Að Að Að Ar$   r  c                   ó    — e Zd ZdZesdZd„ ZdS )ÚGMPYInstallDeprecationTestszI
    Tests for the deprecation of former GMPY accidental public API.
    r7   c                 óì   — t          j        ¦   «          |                      | j        g¦  «        }|                      t          |¦  «        d¦  «         |                      |d         d         d¦  «         dS )zD
        L{twisted.conch.ssh.common.install} is deprecated.
        rF   r   ÚmessagezAtwisted.conch.ssh.common.install was deprecated in Twisted 16.5.0N)r   ÚinstallÚflushWarningsÚtest_deprecatedr�  rÙ   )r,   Úwarningss     r%   r!  z+GMPYInstallDeprecationTests.test_deprecated  sx   € õ 	ŒÑÔÐØ×%Ò% tÔ';Ð&<Ñ=Ô=ˆØ×Ò�˜X™œ¨Ñ*Ô*Ð*Ø×ÒØ�QŒK˜	Ô"ØOñ	
ô 	
ð 	
ð 	
ð 	
r$   N)r    r!   r"   r5   r   re   r!  r#   r$   r%   r  r  ÿ  s<   € € € € € ðð ð ð 1Ø0ˆð

ð 

ð 

ð 

ð 

r$   r  )Sr5   r]  Ú	itertoolsr   Útypingr   r   r   Útwisted.conch.test.keydatar   r   r	   r
   Útwisted.conch.test.loopbackr   Útwisted.credr   Útwisted.cred.errorr   Útwisted.internetr   r   r   Útwisted.internet.errorr   Útwisted.pythonr   r   Útwisted.python.reflectr   Útwisted.trialr   r   Útwisted.conchr   r   Útwisted.conch.sshr   r   r   r   r(   r&   r/   rg   r•   ÚregisterAdapterÚISessionÚProtocolrB   r�   ry   r†   r…   rÁ   rÂ   rÃ   rÄ   rÅ   rˆ   rÆ   rÈ   ÚSSHProtocolCheckerrÖ   rþ   rÞ   r  r  ræ   r#  r  r3  r,  r  r-  rK  rF  rh  ÚTestCaserj  rä  r  r  r#   r$   r%   ú<module>r5     sO  ððð ð
 €€€Ø Ð Ð Ð Ð Ð Ø $Ð $Ð $Ð $Ð $Ð $Ð $Ð $Ð $Ð $ðð ð ð ð ð ð ð ð ð ð ð ð 6Ð 5Ð 5Ð 5Ð 5Ð 5Ø Ð Ð Ð Ð Ð Ø 0Ð 0Ð 0Ð 0Ð 0Ð 0Ø 5Ð 5Ð 5Ð 5Ð 5Ð 5Ð 5Ð 5Ð 5Ð 5Ø 4Ð 4Ð 4Ð 4Ð 4Ð 4Ø 'Ð 'Ð 'Ð 'Ð 'Ð 'Ð 'Ð 'Ø 0Ð 0Ð 0Ð 0Ð 0Ð 0Ø "Ð "Ð "Ð "Ð "Ð "àˆ}˜^Ñ,Ô,€àð Ø+Ð+Ð+Ð+Ð+Ð+Ð+Ð+ØCÐCÐCÐCÐCÐCÐCÐCÐCÐCÐCÐCÐCðð ð ð ð ñ ô ð ð

ð 
ð 
ð 
ð 
ñ 
ô 
ð 
ð>?%ð ?%ð ?%ð ?%ð ?%�fÔ&ñ ?%ô ?%ð ?%ðD=$ð =$ð =$ð =$ð =$ñ =$ô =$ð =$ð@ &Ð %Ð %Ð %Ð %Ð %àð Ø€JÔØ! ?°GÔ4Dñô ð ð
ð ð ð ð �XÔ&ñ ô ð ðUð Uð Uð Uð Uñ Uô Uð Uð<Sð Sð Sð Sð Sñ Sô Sð Sð.Sð Sð Sð Sð Sñ Sô Sð Sð(Sð Sð Sð Sð Sñ Sô Sð Sð, ÐØ&Ð&Ð&Ð&Ð&Ð&ðð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð	<ð 	<ð 	<ð 	<ð 	<ñ 	<ô 	<ð 	<ðð ð ð ð ˜hÔ9ñ ô ð ð4Dð 4Dð 4Dð 4Dð 4D Ô!3ñ 4Dô 4Dð 4DðlIð Ið Ið Ið Iñ Iô Ið Ið>Fð Fð Fð Fð F˜-¨Ô)Eñ Fô Fð Fð
ð ð ð ð ˜-¨Ô)Eñ ô ð ð8:ð :ð :ð :ð :˜hÔ8ñ :ô :ð :ð.>ð >ð >ð >ð > JÔ$<ñ >ô >ð >ð"(ð (ð (ð (ð (˜Ô+ñ (ô (ð (ðB
Bð 
Bð 
Bðuð uð uð uð u�xÔ(ñ uô uð uðp	f
ð f
ð f
ð f
ð f
�hÔ'ñ f
ô f
ð f
ðR9Að 9Að 9Að 9Að 9AˆhÔñ 9Aô 9Að 9Aðx
ð 
ð 
ð 
ð 
 (Ô"3ñ 
ô 
ð 
ð 
ð 
r$   