
    5\h|F                     v   	 d dl Z d dlZd dlZd dlZd dlZd dlZd dlmZmZ d dlm	Z
 d dlmZ d dlmZ d dlmZ d dlmZ  ej        d          Z ej        d	          Z e
j        d
           ej        Zd ZdZ ee d          r|d dlZd
Zej                            ej                            e          pej        dd          Zej                            ej                            e          pej        dd          Z eed          Z dZ!dZ" G d dej#                  Z$ G d dej%        ej&                  Z' G d de          Z(erd dl)m*Z*  G d de*e$          Z+e  G d de(                      Z,e  G d d e(                      Z- G d! d"e          Z.d# Z/e0d$k    r ej1                     dS dS )%    N)TestCase
skipUnless)support)hashlib_helper)socket_helper)threading_helper)warnings_helperasynchatasyncoreT)moduleFPOP3_SSLcertdatazkeycert3.pemzpycacert.pemzSSL not supporteds   1 1
2 2
3 3
4 4
5 5
.
st   From: postmaster@python.org
Content-Type: text/plain
MIME-Version: 1.0
Subject: Dummy

line1
line2
line3
.
c                       e Zd Zg dgdZdZd Zd Zd Zd Zd Z	d	 Z
d
 Zd Zd Zd ZeZd ZeZd Zd Zd Zd Zd Zd Zd Zd Zerd Zd Zd ZdS dS )DummyPOP3Handlerzpython-testlib-pop-server)UIDLIMPLEMENTATIONFc                     t           j                            | |           |                     d           g | _        |                     d           d| _        d| _        d S )N   
(+OK dummy pop3 server ready. <timestamp>F)r
   
async_chat__init__set_terminator	in_bufferpush
tls_activetls_startingselfconns     :/opt/python-3.11.14/usr/lib/python3.11/test/test_poplib.pyr   zDummyPOP3Handler.__init__:   s^    $$T4000G$$$		<===!    c                 :    | j                             |           d S N)r   appendr   datas     r    collect_incoming_dataz&DummyPOP3Handler.collect_incoming_dataB   s    d#####r!   c                    d                     | j                  }t          |d          }g | _        |                    d          d                                         }|                    d          }|dk    r||dz   d          }nd}t          | d|z             r t          | d|z             } ||           d S |                     d	|z             d S )
Nr!   
ISO-8859-1 r       cmd_z$-ERR unrecognized POP3 command "%s".)	joinr   strsplitlowerfindhasattrgetattrr   )r   linecmdspaceargmethods         r    found_terminatorz!DummyPOP3Handler.found_terminatorE   s    xx''4&&jjooa &&((		#B;;uqyzz"CCC4#&& 	CT6C<00FF3KKKKKII<cABBBBBr!   c                       r#    r   s    r    handle_errorzDummyPOP3Handler.handle_errorU       r!   c                 r    t           j                            | |                    d          dz              d S )Nr)   r   )r
   r   r   encoder%   s     r    r   zDummyPOP3Handler.pushX   s2      t{{<'@'@7'JKKKKKr!   c                 0    |                      |           d S r#   r   r   r9   s     r    cmd_echozDummyPOP3Handler.cmd_echo[   s    		#r!   c                 f    |dk    r|                      d           |                      d           d S )Nguidoz-ERR no such userz+OK password requiredrD   rE   s     r    cmd_userzDummyPOP3Handler.cmd_user_   s7    '>>II)***		)*****r!   c                 f    |dk    r|                      d           |                      d           d S )Npythonz-ERR wrong passwordz+OK 10 messagesrD   rE   s     r    cmd_passzDummyPOP3Handler.cmd_passd   s7    (??II+,,,		#$$$$$r!   c                 0    |                      d           d S )Nz
+OK 10 100rD   rE   s     r    cmd_statzDummyPOP3Handler.cmd_stati   s    		,r!   c                     |r|                      d|d|           d S |                      d           t          j                             | t                     d S )Nz+OK r*   z+OK)r   r
   r   	LIST_RESPrE   s     r    cmd_listzDummyPOP3Handler.cmd_listl   s`     	6IIISSS##./////IIe$$T955555r!   c                     |                      dt          t                    z             t          j                             | t                     d S )Nz+OK %s bytes)r   len	RETR_RESPr
   r   rE   s     r    cmd_retrzDummyPOP3Handler.cmd_retru   s>    		.#i..0111  y11111r!   c                 0    |                      d           d S )Nz +OK message marked for deletion.rD   rE   s     r    cmd_delezDummyPOP3Handler.cmd_dele{   s    		455555r!   c                 0    |                      d           d S Nz+OK done nothing.rD   rE   s     r    cmd_noopzDummyPOP3Handler.cmd_noop~       		%&&&&&r!   c                 0    |                      d           d S rY   rD   rE   s     r    cmd_rpopzDummyPOP3Handler.cmd_rpop   r[   r!   c                 0    |                      d           d S rY   rD   rE   s     r    cmd_apopzDummyPOP3Handler.cmd_apop   r[   r!   c                 X    |                      d           |                                  d S )Nz+OK closing.)r   close_when_donerE   s     r    cmd_quitzDummyPOP3Handler.cmd_quit   s,    		.!!!r!   c                 T    t          | j                  }| j        st          rg |d<   |S NSTLS)dictCAPASr   SUPPORTS_SSL)r   _capass     r    
_get_capaszDummyPOP3Handler._get_capas   s0    dj!! 	 < 	 F6Nr!   c                 ^   |                      d           |                                 rn|                                                                 D ]G\  }}|g}|r|                    |           |                      d                    |                     H|                      d           d S )Nz+OK Capability list followsr*   .)r   rj   itemsextendr/   )r   r9   capparams_lns        r    cmd_capazDummyPOP3Handler.cmd_capa   s    		/000?? 	)#006688 ) )Ve 'JJv&&&		#((3--((((		#r!   c                 B    |                      | j        rdnd           d S )Nz+OK I know RFC6856z-ERR What is UTF8?!)r   enable_UTF8rE   s     r    cmd_utf8zDummyPOP3Handler.cmd_utf8   s6    		%-&&,	. 	. 	. 	. 	.r!   c                    | j         du r|                     d           t          j        t          j                  }|                    t                     |                    | j        ddd          }| 	                                 | 
                    |           d| _         d| _        g | _        |                                  d S |                     d           d S )NFz+OK Begin TLS negotiationT)server_sidedo_handshake_on_connectsuppress_ragged_eofsz*-ERR Command not permitted when TLS active)r   r   ssl
SSLContextPROTOCOL_TLS_SERVERload_cert_chainCERTFILEwrap_socketsocketdel_channel
set_socketr   r   _do_tls_handshake)r   r9   contexttls_socks       r    cmd_stlszDummyPOP3Handler.cmd_stls   s    %''		5666.)@AA''111"..t{;?GLDI / K K   """)))"&$(!!#&&(((((		FGGGGGr!   c                 @   	 | j                                          d| _        d| _        d S # t          j        $ r}|j        d         t          j        t          j        fv rY d }~d S |j        d         t          j	        k    r| 
                                cY d }~S d|j        d         v sd|j        d         v r| 
                                cY d }~S  d }~wt          $ r?}|j        d         t          j        k    r| 
                                cY d }~S Y d }~d S d }~ww xY w)NTFr   SSLV3_ALERT_BAD_CERTIFICATEr,   SSLV3_ALERT_CERTIFICATE_UNKNOWN)r   do_handshaker   r   rz   SSLErrorargsSSL_ERROR_WANT_READSSL_ERROR_WANT_WRITESSL_ERROR_EOFhandle_closeOSErrorerrnoECONNABORTED)r   errs     r    r   z"DummyPOP3Handler._do_tls_handshake   s_   *((***  #'$)!!!! < 
 
 
8A;3#:#&#;#= = =FFFFFXa[C$555,,........3sx{BB738A;FF,,........ / / /8A;%"444,,........ 544444/sD   + D%C%.CD1C
DCD.DDDc                     | j         r|                                  d S 	 t          j                            |            d S # t
          j        $ r |                                  Y d S w xY wr#   )r   r   r
   r   handle_readrz   SSLEOFErrorr   r>   s    r    r   zDummyPOP3Handler.handle_read   s      (&&(((((('33D99999 ( ( (%%''''''(s   A   #A'&A'N)__name__
__module____qualname__rg   rt   r   r'   r;   r?   r   rF   rI   rL   rN   rQ   cmd_uidlrU   cmd_toprW   rZ   r]   r_   rb   rj   rr   ru   rh   r   r   r   r=   r!   r    r   r   5   s       ,G+HIIEK" " "$ $ $C C C   L L L  + + +
% % %
     6 6 6 H2 2 2 G6 6 6' ' '' ' '' ' '      . . .
  0(	H 	H 	H$	* 	* 	**	( 	( 	( 	( 	(S0( 0(r!   r   c                   T    e Zd ZeZej        fdZd Zd Z	d Z
d Zd ZeZd Zd Zd	S )
DummyPOP3Serverc                    t           j                            |            t          j                            |            d| _        |                     |t          j                   | 	                    |           | 
                    d           d| _        t          j                    | _        | j                                        d d         \  | _        | _        d | _        d S )NT   F   )	threadingThreadr   r   
dispatcherdaemoncreate_socketr   SOCK_STREAMbindlistenactiveLockactive_lockgetsocknamehostporthandler_instance)r   addressafs      r    r   zDummyPOP3Server.__init__   s    !!$'''$$T***2v1222		'A$>++#{6688!<	49 $r!   c                     t          j                    | _        t           j                            |            | j                                         d S r#   )r   Event_DummyPOP3Server__flagr   startwaitr>   s    r    r   zDummyPOP3Server.start   sB    o''t$$$r!   c                    d| _         | j                                         	 | j         rZt          j        rN| j        5  t                              dd           d d d            n# 1 swxY w Y   | j         rt          j        Nt                              d           d S # t                              d           w xY w)NTg?r,   )timeoutcount)
ignore_all)r   r   setr   
socket_mapr   loop	close_allr>   s    r    runzDummyPOP3Server.run   s    	0+ 8("5 8% 8 8MM#QM7778 8 8 8 8 8 8 8 8 8 8 8 8 8 8 + 8("5 8 $/////H$////s.   B  A%B  %A))B  ,A)-B   B=c                 <    d| _         |                                  d S NF)r   r/   r>   s    r    stopzDummyPOP3Server.stop   s    		r!   c                 :    |                      |          | _        d S r#   )handlerr   )r   r   addrs      r    handle_acceptedzDummyPOP3Server.handle_accepted   s     $T 2 2r!   c                 .    |                                   d S r#   )closer>   s    r    handle_connectzDummyPOP3Server.handle_connect   s    

r!   c                     dS )Nr   r=   r>   s    r    writablezDummyPOP3Server.writable   s    qr!   c                       r#   r=   r>   s    r    r?   zDummyPOP3Server.handle_error  r@   r!   N)r   r   r   r   r   r   AF_INETr   r   r   r   r   r   r   r   r?   r=   r!   r    r   r      s        G#)> 
% 
% 
% 
%  0 0 0  
3 3 3   K      r!   r   c                   4   e Zd Zd Zd Zd Zd Zd Zd Zd Z	d Z
d	 Zd
 Zd Zd Zd Zd Z ej        dd          d             Z ej        dd          d             Zd Zd Zd Zd Zd Zd Zed             Zed             Zed             ZdS )TestPOP3Classc                 V    |                      |                    d                     d S )N   +OK)
assertTrue
startswithr   resps     r    assertOKzTestPOP3Class.assertOK  s&    //00000r!   c                     t          t          t          f          | _        | j                                         t          j        | j        j        | j        j        t          j
                  | _        d S Nr   )r   HOSTPORTserverr   poplibPOP3r   r   test_supportLOOPBACK_TIMEOUTclientr>   s    r    setUpzTestPOP3Class.setUp	  s\    %tTl33k$+"2DK4D*6*GI I Ir!   c                 x    | j                                          | j                                         d | _        d S r#   )r   r   r   r   r>   s    r    tearDownzTestPOP3Class.tearDown  s5    r!   c                 `    |                      | j                                        d           d S )Ns(   +OK dummy pop3 server ready. <timestamp>)assertEqualr   
getwelcomer>   s    r    test_getwelcomezTestPOP3Class.test_getwelcome  s<    //11D	F 	F 	F 	F 	Fr!   c                 \    |                      t          j        | j        j        d           d S )Nz	echo -err)assertRaisesr   error_protor   	_shortcmdr>   s    r    test_exceptionszTestPOP3Class.test_exceptions  s(    &,dk.C[QQQQQr!   c                     |                      | j                            d                     |                     t          j        | j        j        d           d S )NrH   invalid)r   r   userr   r   r   r>   s    r    	test_userzTestPOP3Class.test_user  sJ    dk&&w//000&,dk.>	JJJJJr!   c                     |                      | j                            d                     |                     t          j        | j        j        d           d S )NrK   r   )r   r   pass_r   r   r   r   r>   s    r    
test_pass_zTestPOP3Class.test_pass_   sJ    dk''11222&,dk.>	JJJJJr!   c                 `    |                      | j                                        d           d S )N)
   d   )r   r   statr>   s    r    	test_statzTestPOP3Class.test_stat$  s,    ))++Y77777r!   c                     |                      | j                                        dd          g ddf           |                     | j                            d                              d                     d S )Nr,   )s   1 1s   2 2s   3 3s   4 4s   5 5   1s   OK 1 1)r   r   listr   endswithr>   s    r    	test_listzTestPOP3Class.test_list'  s|    ))++ABB/BBB	 	 	 	((--66yAABBBBBr!   c                 t    dg ddf}| j                             d          }|                     ||           d S )N   +OK 116 bytess   From: postmaster@python.orgs   Content-Type: text/plains   MIME-Version: 1.0s   Subject: Dummyr!   s   line1s   line2s   line3q   foo)r   retrr   )r   expectedr  s      r    	test_retrzTestPOP3Class.test_retr-  sS    $8 8 8 	
 ku%%h'''''r!   c                     |                      t          j        | j        j        dt          j        dz   dz  z             d S )Nzecho +%sr   a)r   r   r   r   r   _MAXLINEr>   s    r    test_too_long_linesz!TestPOP3Class.test_too_long_lines6  sI    &,dk.C$2)=(DE	G 	G 	G 	G 	Gr!   c                 `    |                      | j                            d                     d S Nr  )r   r   deler>   s    r    	test_delezTestPOP3Class.test_dele:  *    dk&&u--.....r!   c                 ^    |                      | j                                                   d S r#   )r   r   noopr>   s    r    	test_noopzTestPOP3Class.test_noop=  s(    dk&&(()))))r!   c                 `    |                      | j                            d                     d S r  )r   r   rpopr>   s    r    	test_rpopzTestPOP3Class.test_rpop@  r  r!   md5T)opensslc                 b    |                      | j                            dd                     d S )Nr  dummypassword)r   r   apopr>   s    r    test_apop_normalzTestPOP3Class.test_apop_normalC  s,    dk&&uo>>?????r!   c                     dddz  z   }t          j        | j        d|          5  |                     t          j        | j        j        dd           d d d            d S # 1 swxY w Y   d S )Nr      <i@B welcomer
  kb)r   	swap_attrr   r   r   r   r  )r   evil_welcomes     r    test_apop_REDOSzTestPOP3Class.test_apop_REDOSG  s     0#DKLII 	O 	Of0$+2BCNNN	O 	O 	O 	O 	O 	O 	O 	O 	O 	O 	O 	O 	O 	O 	O 	O 	O 	Os   -AA"%A"c                 r    dg ddf}|                      | j                            dd          |           d S )Nr  r  r  r,   )r   r   top)r   r  s     r    test_topzTestPOP3Class.test_topR  sN    %4 4 4 	
 	A..99999r!   c                 l    | j                                          | j                             d           d S r  )r   uidlr>   s    r    	test_uidlzTestPOP3Class.test_uidlZ  s2    r!   c                 |    d| j         j        _        |                     t          j        | j        j                   d S r   )r   r   rt   r   r   r   r   utf8r>   s    r    test_utf8_raises_if_unsupportedz-TestPOP3Class.test_utf8_raises_if_unsupported^  s3    */'&,dk.>?????r!   c                     d| j         j        _        d}| j                                        }|                     ||           d S )NTs   +OK I know RFC6856)r   r   rt   r   r,  r   )r   r  results      r    	test_utf8zTestPOP3Class.test_utf8b  sC    *.'(!!##*****r!   c                     | j                                         }|                     d|                                v            d S )Nr   r   capar   keysr   r3  s     r    	test_capazTestPOP3Class.test_capah  s;    {!!(DIIKK788888r!   c                     | j                                         }|                     |           |                     | j         j                   |                     | j         j                   d S r#   )r   quitr   assertIsNonesockfiler   s     r    	test_quitzTestPOP3Class.test_quitl  s_    {!!$+*+++$+*+++++r!   c                     | j                                         }|                     d|                                v            d S rd   r2  r5  s     r    test_stls_capazTestPOP3Class.test_stls_capar  s:    {!!$))++-.....r!   c                 h    d}| j                                         }|                     ||           d S )N   +OK Begin TLS negotiation)r   stlsr   )r   r  r   s      r    	test_stlszTestPOP3Class.test_stlsw  s6    /{!!x(((((r!   c                 `   d}t          j        t           j                  }|                    t                     |                     |j        t           j                   |                     |j        d           | 	                    t           j
                  5  | j                            |          }d d d            n# 1 swxY w Y   t          j        d| j        j        t"          j                  | _        | j                            |          }|                     ||           d S )Nr@  Tr   	localhostr   )rz   r{   PROTOCOL_TLS_CLIENTload_verify_locationsCAFILEr   verify_modeCERT_REQUIREDcheck_hostnamer   CertificateErrorr   rA  r   r   r   r   r   r   )r   r  ctxr   s       r    test_stls_contextzTestPOP3Class.test_stls_context}  sC   /nS455!!&)))#*;<<<+T222s344 	1 	1;##C#00D	1 	1 	1 	1 	1 	1 	1 	1 	1 	1 	1 	1 	1 	1 	1k+t{/?*6*GI I I{,,x(((((s   CC	CN)r   r   r   r   r   r   r   r   r   r   r   r   r  r  r  r  r  r   requires_hashdigestr  r$  r'  r*  r-  r0  r6  r<  requires_sslr>  rB  rN  r=   r!   r    r   r     s       1 1 1I I I  F F FR R RK K KK K K8 8 8C C C( ( (G G G/ / /* * */ / / (^'t<<<@ @ =<@ (^'t<<<O O =<O: : :     @ @ @+ + +9 9 9, , , / / \/ ) ) \)
 ) ) \) ) )r!   r   )SSLConnectionc                       e Zd Zd ZdS )DummyPOP3_SSLHandlerc                     t           j                            | |           |                                  |                     d           g | _        |                     d           d| _        d| _        d S )Nr   r   TF)	r
   r   r   secure_connectionr   r   r   r   r   r   s     r    r   zDummyPOP3_SSLHandler.__init__  sp    ((t444""$$$(((DNII@AAA"DO %Dr!   N)r   r   r   r   r=   r!   r    rS  rS    s#        	& 	& 	& 	& 	&r!   rS  c                   0    e Zd Zd Zd Zd Zd ZeZd ZdS )TestPOP3_SSLClassc                     t          t          t          f          | _        t          | j        _        | j                                         t          j        | j        j	        | j        j
                  | _        d S r#   )r   r   r   r   rS  r   r   r   r   r   r   r   r>   s    r    r   zTestPOP3_SSLClass.setUp  sT    %tTl332odk&68HIIr!   c                 F    |                      dt          j                   d S )Nr   )assertInr   __all__r>   s    r    test__all__zTestPOP3_SSLClass.test__all__  s    j&.11111r!   c           	         t          j        t           j                  }d|_        t           j        |_        |                     t          t          j	        | j
        j        | j
        j        t          |           |                     t          t          j	        | j
        j        | j
        j        t          |           |                     t          t          j	        | j
        j        | j
        j        t          t          |           | j                                         t          j	        | j
        j        | j
        j        |          | _        |                     | j        j        t           j                   |                     | j        j        j        |           |                     | j                                                            d                     d S )NF)keyfiler   )certfiler   )r^  r_  r   rD  r   )rz   r{   rF  rK  	CERT_NONErI  r   
ValueErrorr   r   r   r   r   r~   r   r8  assertIsInstancer:  	SSLSocketassertIsr   r   r  r   )r   rM  s     r    test_contextzTestPOP3_SSLClass.test_context  s|   nS455"-*fot{7G K,h 	 	M 	M 	M*fot{7G K,x 	 	N 	N 	N*fot{7G K,h%-s 	 	< 	< 	< 	odk&68H035 5 5dk.>>>dk&.444((**55f==>>>>>r!   c                 Z    |                      t          j        | j        j                   d S r#   r   r   r   r   rA  r>   s    r    rB  zTestPOP3_SSLClass.test_stls  &    &,dk.>?????r!   c                     | j                                         }|                     d|                                v            d S rd   r   r3  assertFalser4  r5  s     r    r>  z TestPOP3_SSLClass.test_stls_capa  s<    {!!499;;./////r!   N)	r   r   r   r   r\  re  rB  rN  r>  r=   r!   r    rW  rW    sm        J J J2 2 2? ? ?&@ @ @ "0 0 0 0 0r!   rW  c                   *    e Zd Zd Zd Zd ZeZd ZdS )TestPOP3_TLSClassc                    t          t          t          f          | _        | j                                         t          j        | j        j        | j        j        t          j
                  | _        | j                                         d S r   )r   r   r   r   r   r   r   r   r   r   r   r   rA  r>   s    r    r   zTestPOP3_TLSClass.setUp  sr    %tTl33k$+"2DK4D*6*GI I Ir!   c                    | j         j        U| j         j        I	 | j                                          n.# t          j        $ r | j                                          Y nw xY w| j                                         d | _        d S r#   )	r   r;  r:  r8  r   r   r   r   r   r>   s    r    r   zTestPOP3_TLSClass.tearDown  s    ;'DK,<,H$  """"% $ $ $ !!#####	$
 	s   4 (AAc                 Z    |                      t          j        | j        j                   d S r#   rg  r>   s    r    rB  zTestPOP3_TLSClass.test_stls  rh  r!   c                     | j                                         }|                     d|                                v            d S )Ns   STLSrj  r5  s     r    r>  z TestPOP3_TLSClass.test_stls_capa  s<    {!!DIIKK/00000r!   N)r   r   r   r   r   rB  rN  r>  r=   r!   r    rm  rm    s[            @ @ @ "1 1 1 1 1r!   rm  c                   2    e Zd Zd Zd Zd Zd Zd Zd ZdS )TestTimeoutsc                    t          j                    | _        t          j        t          j        t          j                  | _        | j                            d           t          j	        | j                  | _
        t          j        | j        | j        | j        f          | _        d| j        _        | j                                         | j                                         d S )N<   )targetr   T)r   r   evtr   r   r   r:  
settimeoutr   	bind_portr   r   r   threadr   r   r   r>   s    r    r   zTestTimeouts.setUp  s    ?$$M&.&2DEE		R   !+DI66	&dk49@UVVV!r!   c                 F    | j                                          d | _         d S r#   )rz  r/   r>   s    r    r   zTestTimeouts.tearDown  s!    r!   c                 T   |                                  |                                 	 |                                \  }}|                    d           |                                 n# t
          $ r Y nw xY w|                                 d S # |                                 w xY w)Ns   + Hola mundo
)r   r   acceptsendr   TimeoutError)r   rw  servr   r   s        r    r   zTestTimeouts.server  s    				JD$II'(((JJLLLL 	 	 	D	 JJLLLLLDJJLLLLs*   A A+ *B +
A85B 7A88B B'c                    |                      t          j                               t          j        t          j                   	 t          j        t          | j	                  }t          j        d            n# t          j        d            w xY w| 
                    |j                                        t          j                   |                                 d S r#   )r9  r   getdefaulttimeoutsetdefaulttimeoutr   r   r   r   r   r   r   r:  
gettimeoutr   r   pops     r    testTimeoutDefaultzTestTimeouts.testTimeoutDefault  s    &244555 !>???	++dDI..C$T****F$T****,,..0MNNN		s   A: :Bc                    |                      t          j                               t          j        d           	 t	          j        t          | j        d           }t          j        d            n# t          j        d            w xY w|                      |j        	                                           |
                                 d S )N   r   )r9  r   r  r  r   r   r   r   r:  r  r   r  s     r    testTimeoutNonezTestTimeouts.testTimeoutNone  s    &244555 $$$	++dDIt<<<C$T****F$T****#(--//000		s   !A2 2Bc                    t          j        t          | j        t          j                  }|                     |j                                        t          j                   |	                                 | 
                    t                    5  t          j        t          | j        d           d d d            d S # 1 swxY w Y   d S )Nr   r   )r   r   r   r   r   r   r   r:  r  r   r   ra  r  s     r    testTimeoutValuezTestTimeouts.testTimeoutValue  s    k$	<3PQQQ,,..0MNNN		z** 	4 	4Kdi3333	4 	4 	4 	4 	4 	4 	4 	4 	4 	4 	4 	4 	4 	4 	4 	4 	4 	4s   "C  CCN)	r   r   r   r   r   r   r  r  r  r=   r!   r    rs  rs    sn            

 
 
    4 4 4 4 4r!   rs  c                  d    t          j                    } t          j        t           j        g| R   d S r#   )r   threading_setupunittestaddModuleCleanupthreading_cleanup)thread_infos    r    setUpModuler     s3    "244K.@O;OOOOOOr!   __main__)2r   r   osr   r   r  r   r   testr   r   test.supportr   r   r   r	   import_deprecatedr
   r   requires_working_socketr   r   rh   r4   rz   pathr/   dirname__file__curdirr~   rH  rP  rP   rT   r   r   r   r   r   r   test.test_ftplibrQ  rS  rW  rm  rs  r  r   mainr=   r!   r    <module>r     sW   $
   				       ) ) ) ) ) ) ) ) ( ( ( ( ( ( ' ' ' ' ' ' & & & & & & ) ) ) ) ) ) ( ( ( ( ( ( -?,Z88,?,Z88 % $D 1 1 1 1
76: ^JJJLw||BGOOH55BJP^__HW\\"'//(33@ry*n]]Fz,(;<< 8			[( [( [( [( [(x* [( [( [(z0 0 0 0 0h)9+; 0 0 0fD) D) D) D) D)H D) D) D)N  &......	& 	& 	& 	& 	&}.> 	& 	& 	& &0 &0 &0 &0 &0 &0 &0 &0R 1 1 1 1 1 1 1 1B64 64 64 64 648 64 64 64rP P P
 zHMOOOOO r!   