
    5\hЫ                        d dl mZ d dlmZ d dlmZ 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Zd dlmZmZ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Zd d	lmZ d d
lmZmZmZ 	 d dlZn# e$ r dZY nw xY w ej        d           ej                            ej                             e!          pej"        dd          Z#ej                            ej                             e!          pej"        dd          Z$ G d dej%                  Z&er G d de	j'                  Z(ej)        Z)n G d d          Z(dZ) G d de	j*                  Z+ G d d          Z, G d de,ej%                  Z- ej.        ed           G d de,ej%                              Z/ G d dej%                  Z0 ej.        ed           G d  d!e0                      Z1 ej.         ej2        d"          d#           ej3        d$           G d% d&ej%                                          Z4 ej.        ed           ej.         ej2        d"          d#           ej3        d$           G d' d(e4                                              Z5 ej.        ed           ej3        d$           G d) d*e4                                  Z6e7d+k    r ej8                     dS dS ),    )support)socket_helper)contextmanagerN)verboserun_with_tzrun_with_localecpython_onlyrequires_resourcerequires_working_socket)hashlib_helper)threading_helper)warnings_helper)mock)datetimetimezone	timedeltaT)modulecertdatazkeycert3.pemzpycacert.pemc                       e Zd Zd Z ed          d             Zd Z eddd           ed          d	                         Zd
 Z	e
j        d             ZdS )TestImaplibc                    t          j        d          }t          j        d          }|                     t          j        |          |           t          j        d          }|                     t          j        |          |           t          j        d          }|                     t          j        |          |           d S )N)	i     r   r   r   r   r   r   s.   25 (INTERNALDATE "01-Jan-2000 00:00:00 +0000")s.   25 (INTERNALDATE "01-Jan-2000 11:30:00 +1130")s.   25 (INTERNALDATE "31-Dec-1999 12:30:00 -1130"))calendartimegmimaplibInternaldate2tupleassertEqualtimemktime)selft0tts      ;/opt/python-3.11.14/usr/lib/python3.11/test/test_imaplib.pytest_Internaldate2tuplez#TestImaplib.test_Internaldate2tuple#   s    _>??'=? ?R"---'=? ?R"---'=? ?R"-----    zMST+07MDT,M4.1.0,M10.5.0c                 z    |                      t          j        d          t          j        d                     d S )Ns.   25 (INTERNALDATE "02-Apr-2000 02:30:00 +0000")s.   25 (INTERNALDATE "02-Apr-2000 03:30:00 +0000"))assertNotEqualr   r   r!   s    r$   "test_Internaldate2tuple_issue10941z.TestImaplib.test_Internaldate2tuple_issue10941/   sP    G6=? ?&AC C	D 	D 	D 	D 	Dr&   c                     ddt          j        d          ddt          j        dt	          t          dd                              dgS )Ni 5wg    eA)	        r-   !      r   r   r   )	r,   r-   r.   r-   r/   r0   r   r   r   r   i   "18-May-2033 05:33:20 +0200")r   	localtimer   fromtimestampr   r   r)   s    r$   
timevalueszTestImaplib.timevalues6   sO    L$.*D*D43&z'/	![0I0I'J'JL L.0 	0r&   LC_ALLde_DEfr_FRzSTD-1DST,M3.2.0,M11.1.0c                     d}|                                  D ],}t          j        |          }|                     ||           -d S )Nr1   )r4   r   Time2Internaldater   )r!   expectedtinternals       r$   test_Time2Internaldatez"TestImaplib.test_Time2Internaldate>   sU    
 2"" 	1 	1A033HXx0000	1 	1r&   c                 \    |                                  D ]}t          j        |           d S N)r4   r   r9   )r!   r;   s     r$   ,test_that_Time2Internaldate_returns_a_resultz8TestImaplib.test_that_Time2Internaldate_returns_a_resultI   s;     "" 	) 	)A%a((((	) 	)r&   c                    t          j                     5 }	 |                    dt          j        f           |                     d           n# t           j        $ r Y nw xY wd d d            n# 1 swxY w Y   t          j                    }|                     t                    5 }t          j
                     d d d            n# 1 swxY w Y   |                     |j        j        |           d S )N z3Cannot run the test with local IMAP server running.)socketconnectr   
IMAP4_PORTskipTesterrorr   get_socket_conn_refused_errsassertRaisesOSErrorIMAP4assertIn	exceptionerrno)r!   sexpected_errnoscms       r$   test_imap4_host_default_valuez)TestImaplib.test_imap4_host_default_valueP   se    ]__ 			2w12333IK K K K<   	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 (DFFw'' 	2MOOO	 	 	 	 	 	 	 	 	 	 	 	 	 	 	bl(/:::::sF   A.6AA.AA.AA..A25A2&CC
C
N)__name__
__module____qualname__r%   r   r*   r4   r   r=   r@   r   skip_if_tcp_blackholerR    r&   r$   r   r   !   s        
. 
. 
. [+,,D D -,D0 0 0 _Xw00 [*++1 1 ,+ 101) ) ) (; ; )(; ; ;r&   r   c                       e Zd Zd ZdS )SecureTCPServerc                     | j                                         \  }}t          j        t          j                  }|                    t                     |                    |d          }||fS )NT)server_side)rC   acceptssl
SSLContextPROTOCOL_TLS_SERVERload_cert_chainCERTFILEwrap_socket)r!   	newsocketfromaddrcontext
connstreams        r$   get_requestzSecureTCPServer.get_requeste   sc    "&+"4"4"6"6IxnS%<==G##H--- ,,YD,IIJx''r&   N)rS   rT   rU   rg   rW   r&   r$   rY   rY   c   s#        	( 	( 	( 	( 	(r&   rY   c                       e Zd ZdS )rY   NrS   rT   rU   rW   r&   r$   rY   rY   p   s        r&   c                   p     e Zd Zej        ZdZdZ fdZd Z	d Z
d Zd Zd Zd	 Zd
 Zd Zd Zd Z xZS )SimpleIMAPHandlerNrB   c                 x    t                                                       d| j        _        d | j        _        d S NF)supersetupserveris_selectedloggedr!   	__class__s    r$   ro   zSimpleIMAPHandler.setup{   s.    "'!r&   c                     t           r$t          d|                                z             | j                            |           d S )NzSENT: %r)r   printstripwfilewriter!   messages     r$   _sendzSimpleIMAPHandler._send   sA     	0*w}}.///
!!!!!r&   c                 6    |                      |dz              d S )N   
)r|   rz   s     r$   
_send_linezSimpleIMAPHandler._send_line   s    

7W$%%%%%r&   c                 V    |                      |                    d                     d S )NASCII)r   encoderz   s     r$   _send_textlinez SimpleIMAPHandler._send_textline   s&    w//00000r&   c                 \    |                      d                    |||f                     d S )N )r   join)r!   tagcoder{   s       r$   _send_taggedzSimpleIMAPHandler._send_tagged   s/    CHHc4%9::;;;;;r&   c                    |                      d           	 d}	 	 | j                            d          }|dk    rd S ||z  }n# t          $ r Y d S w xY w|                    d          rnQt
          r$t          d|                                z             | j        r4	 | j        	                    |           n# t          $ r
 d | _        Y nw xY w|                    d                                          }|d         }|d         }|dd          }t          | d	|z             r6 t          | d	|z             ||          }|r|| _        t          |           n|                     |d
|dz              `)Nz* OK IMAP4rev1r   r&   r~   zGOT: %rr   r      cmd_BADz unknown)r   rfilereadrJ   endswithr   rv   rw   continuationsendStopIterationdecodesplithasattrgetattrnextr   )r!   linepart	splitliner   cmdargsr   s           r$   handlezSimpleIMAPHandler.handle   s   ,---%	@ D:??1--Ds{{DLDD   FF ==))   0i$**,,.///  -%**40000$ - - -(,D%%%-G,,2244IA,CA,CQRR=DtVc\** @:wtVc\::3EE '(4D%&&&!!#ucJ.>???K%	@s(    A A 
AAB9 9CCc                     | j         r
d| j         z   nd}|                     d|z              |                     |dd           d S )Nz
IMAP4rev1 	IMAP4rev1z* CAPABILITY OKCAPABILITY completed)capabilitiesr   r   )r!   r   r   capss       r$   cmd_CAPABILITYz SimpleIMAPHandler.cmd_CAPABILITY   s\    $!t000  	 	Od2333#t%;<<<<<r&   c                 v    d | j         _        |                     d           |                     |dd           d S )Nz"* BYE IMAP4ref1 Server logging outr   zLOGOUT completed)rp   rr   r   r   r!   r   r   s      r$   
cmd_LOGOUTzSimpleIMAPHandler.cmd_LOGOUT   s@    !@AAA#t%788888r&   c                 X    |d         | j         _        |                     |dd           d S )Nr   r   zLOGIN completed)rp   rr   r   r   s      r$   	cmd_LOGINzSimpleIMAPHandler.cmd_LOGIN   s/    !!W#t%677777r&   c                 v    d| j         _        |                     d           |                     |dd           d S )NT
   * 2 EXISTSr   [READ-WRITE] SELECT completed.)rp   rq   r   r   r   s      r$   
cmd_SELECTzSimpleIMAPHandler.cmd_SELECT   s=    "&&&&#t%EFFFFFr&   c                     | j         j        r%d| j         _        |                     |dd           d S |                     |dd           d S )NFr   z*Returned to authenticated state. (Success)r   zNo mailbox selected)rp   rq   r   r   s      r$   cmd_UNSELECTzSimpleIMAPHandler.cmd_UNSELECT   sX    ;" 	A&+DK#c4)UVVVVVc5*?@@@@@r&   )rS   rT   rU   r   LOOPBACK_TIMEOUTtimeoutr   r   ro   r|   r   r   r   r   r   r   r   r   r   __classcell__rt   s   @r$   rk   rk   v   s        &GLL" " " " "
" " "
& & &1 1 1< < <(@ (@ (@T= = =9 9 9
8 8 8G G G
A A A A A A Ar&   rk   c                   `   e Zd ZdZd"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 ej        dd          d             Zd Z ed          d             Zd Zd Zd Zd Zd Z d  Z!d! Z"dS )#NewIMAPTestsMixinNTc                    	  G d d| j                   }|                     | j                   |                      t          j        df|          | _        t          j        | j        dz   | j        j	        ddi          | _
        d| j
        _        | j
                                         |r | j        | j        j         | _        | j        | j        fS )	Nc                       e Zd Zd ZdS )/NewIMAPTestsMixin._setup.<locals>.TestTCPServerc                 X    	 |                      |           |                                   r?   close_requestserver_closer!   requestclient_addresss      r$   handle_errorz<NewIMAPTestsMixin._setup.<locals>.TestTCPServer.handle_error   s2     ""7+++!!###r&   NrS   rT   rU   r   rW   r&   r$   TestTCPServerr      s#            r&   r   r   z-serverpoll_interval{Gz?nametargetkwargsT)server_class
addCleanup_cleanupr   HOSTrp   	threadingThread_testMethodNameserve_foreverthreaddaemonstart
imap_classserver_addressclient)r!   imap_handlerrD   r   s       r$   _setupzNewIMAPTestsMixin._setup   s    		 	 	 	 	D- 	 	 	 	&&&'');Q(?NN&%i/;, $T*, , , " 	G)$/4;+EFDK{DK''r&   c                    	 | j         )| j         j        dk    r| j                                          | j                                         | j                                         t          j        | j                   d | _        d S )NLOGOUT)r   stateshutdownrp   r   r   join_threadr   r)   s    r$   r   zNewIMAPTestsMixin._cleanup   sz    	 ;"t{'8H'D'DK  """  """$T[111r&   c                      G d dt           j                  }|                     |d          \  }} | j        t          j        j        | j        g|j        R   d S )Nc                       e Zd Zd ZdS )ONewIMAPTestsMixin.test_EOF_without_complete_welcome_message.<locals>.EOFHandlerc                 :    | j                             d           d S Ns   * OKrx   ry   r)   s    r$   r   zVNewIMAPTestsMixin.test_EOF_without_complete_welcome_message.<locals>.EOFHandler.handle  s    
  )))))r&   NrS   rT   rU   r   rW   r&   r$   
EOFHandlerr     s#        * * * * *r&   r   FrD   )	socketserverStreamRequestHandlerr   rI   r   rK   abortr   r   )r!   r   _rp   s       r$   )test_EOF_without_complete_welcome_messagez;NewIMAPTestsMixin.test_EOF_without_complete_welcome_message	  s    	* 	* 	* 	* 	*: 	* 	* 	* KK
EK::	6'--t 	2!0	2 	2 	2 	2 	2 	2r&   c                      G d dt                     }|                     |d          \  }} | j        t          j        j        | j        g|j        R   d S )Nc                       e Zd Zd ZdS )BNewIMAPTestsMixin.test_line_termination.<locals>.BadNewlineHandlerc                 ^    |                      d           |                     |dd           d S Ns   * CAPABILITY IMAP4rev1 AUTH
r   r   r|   r   r   s      r$   r   zQNewIMAPTestsMixin.test_line_termination.<locals>.BadNewlineHandler.cmd_CAPABILITY  4    

;<<<!!#t-CDDDDDr&   NrS   rT   rU   r   rW   r&   r$   BadNewlineHandlerr     s(        E E E E Er&   r   Fr   )rk   r   rI   r   rK   r   r   r   )r!   r   r   rp   s       r$   test_line_terminationz'NewIMAPTestsMixin.test_line_termination  s    	E 	E 	E 	E 	E 1 	E 	E 	E KK 15KAA	6'--t 	2!0	2 	2 	2 	2 	2 	2r&   c                 h    G d dt                     }|                     |          \  }}|                     |j                   |                     t
          j        j        d          5  |                    d           d d d            n# 1 swxY w Y   |                     |j                   d S )Nc                       e Zd ZdZdS )MNewIMAPTestsMixin.test_enable_raises_error_if_not_AUTH.<locals>.EnableHandlerAUTH ENABLE UTF8=ACCEPTNrS   rT   rU   r   rW   r&   r$   EnableHandlerr     s        4LLLr&   r   zENABLE.*NONAUTHfoo)	rk   r   assertFalseutf8_enabledassertRaisesRegexr   rK   rG   enable)r!   r   r   r   s       r$   $test_enable_raises_error_if_not_AUTHz6NewIMAPTestsMixin.test_enable_raises_error_if_not_AUTH  s    	5 	5 	5 	5 	5- 	5 	5 	5KK..	,---##GM$79JKK 	! 	!MM%   	! 	! 	! 	! 	! 	! 	! 	! 	! 	! 	! 	! 	! 	! 	!,-----s   +BBBc                     |                      t                    \  }}|                     t          j        j        d          5  |                    d           d d d            d S # 1 swxY w Y   d S )Ndoes not support ENABLEr   )r   rk   r   r   rK   rG   r  )r!   r   r   s      r$   )test_enable_raises_error_if_no_capabilityz;NewIMAPTestsMixin.test_enable_raises_error_if_no_capability$  s    KK 122	##GM$7)+ + 	! 	!MM%   	! 	! 	! 	! 	! 	! 	! 	! 	! 	! 	! 	! 	! 	! 	! 	! 	! 	!s   A&&A*-A*c                 D   |                      t                    \  }}|                    dd          \  }}|                     |d           |                     t
          j        j        d          5  |                    d           d d d            d S # 1 swxY w Y   d S )Nuserpassr   r  UTF8=ACCEPT)	r   rk   loginr   r   r   rK   rG   r  r!   r   r   typdatas        r$   .test_enable_UTF8_raises_error_if_not_supportedz@NewIMAPTestsMixin.test_enable_UTF8_raises_error_if_not_supported*  s    KK 122	LL00	Td#####GM$7)+ + 	) 	)MM-(((	) 	) 	) 	) 	) 	) 	) 	) 	) 	) 	) 	) 	) 	) 	) 	) 	) 	)s   2BBBc                     G d dt                     }|                     |          \  }}|                     |j        d           |                    dd           \  }}|                     |d           |                     |j        d           |                    d          \  }}|                     |d           |                     |j        d	           d
}|                    d d d |                    d	                    \  }}|                     |d           |                     |j        d|z                      d	                     d S )Nc                   $    e Zd ZdZd Zd Zd ZdS )HNewIMAPTestsMixin.test_enable_UTF8_True_append.<locals>.UTF8AppendServerzENABLE UTF8=ACCEPTc                 4    |                      |dd           d S Nr   zENABLE successfulr   r   s      r$   
cmd_ENABLEzSNewIMAPTestsMixin.test_enable_UTF8_True_append.<locals>.UTF8AppendServer.cmd_ENABLE5  !    !!#t-@AAAAAr&   c              3   ~   K   |                      d           d V | j        _        |                     |dd           d S N+r   zFAKEAUTH successfulr   rp   responser   r   s      r$   cmd_AUTHENTICATEzYNewIMAPTestsMixin.test_enable_UTF8_True_append.<locals>.UTF8AppendServer.cmd_AUTHENTICATE7  G      ##C(((',uu$!!#t-BCCCCCr&   c              3   ~   K   |                      d           d V | j        _        |                     |dd           d S Nr  r   okayr  r   s      r$   
cmd_APPENDzSNewIMAPTestsMixin.test_enable_UTF8_True_append.<locals>.UTF8AppendServer.cmd_APPEND;  F      ##C(((',uu$!!#tV44444r&   N)rS   rT   rU   r   r  r  r!  rW   r&   r$   UTF8AppendServerr  3  sL        /LB B BD D D5 5 5 5 5r&   r#  asciiMYAUTHc                     dS Ns   fakerW   xs    r$   <lambda>z@NewIMAPTestsMixin.test_enable_UTF8_True_append.<locals>.<lambda>A      ' r&   r   
   ZmFrZQ==
r	  utf-8   Subject: üñí©öðéUTF8 (%s)
)	rk   r   r   	_encodingauthenticater  r  appendr   )	r!   r#  r   rp   r   r   
msg_stringr  r  s	            r$   test_enable_UTF8_True_appendz.NewIMAPTestsMixin.test_enable_UTF8_True_append2  sm   	5 	5 	5 	5 	50 	5 	5 	5 %566)7333%%h0A0ABBat$$$/:::--..at$$$)7333.
MM$dJ4E4Eg4N4NOO	Td###z)11'::	< 	< 	< 	< 	<r&   c                     G d dt                     }|                     |          \  }}|                    dd           \  }}|                     |d           |                    d          \  }}|                     |d           |                     |j                   |                     t          j	        j
        d          5  |                    dd	           d d d            d S # 1 swxY w Y   d S )
Nc                       e Zd ZdZd Zd ZdS )PNewIMAPTestsMixin.test_search_disallows_charset_in_utf8_mode.<locals>.UTF8Serverr   c                 4    |                      |dd           d S r  r  r   s      r$   r  z[NewIMAPTestsMixin.test_search_disallows_charset_in_utf8_mode.<locals>.UTF8Server.cmd_ENABLEP  r  r&   c              3   ~   K   |                      d           d V | j        _        |                     |dd           d S r  r  r   s      r$   r  zaNewIMAPTestsMixin.test_search_disallows_charset_in_utf8_mode.<locals>.UTF8Server.cmd_AUTHENTICATER  r  r&   NrS   rT   rU   r   r  r  rW   r&   r$   
UTF8Serverr7  N  s?        4LB B BD D D D Dr&   r;  r%  c                     dS r'  rW   r(  s    r$   r*  zNNewIMAPTestsMixin.test_search_disallows_charset_in_utf8_mode.<locals>.<lambda>W  s     r&   r   r	  zcharset.*UTF8r   bar)rk   r   r1  r   r  
assertTruer   r   r   rK   rG   search)r!   r;  r   r   r  s        r$   *test_search_disallows_charset_in_utf8_modez<NewIMAPTestsMixin.test_search_disallows_charset_in_utf8_modeM  sR   	D 	D 	D 	D 	D* 	D 	D 	D KK
++	$$X/@/@AAQd###}--Qd###+,,,##GM$7II 	( 	(MM%'''	( 	( 	( 	( 	( 	( 	( 	( 	( 	( 	( 	( 	( 	( 	( 	( 	( 	(s   	C--C14C1c                     G d dt                     }|                     |          \  }}|                     t          j        j        d          5  |                    dd            d d d            d S # 1 swxY w Y   d S )Nc                       e Zd Zd ZdS )6NewIMAPTestsMixin.test_bad_auth_name.<locals>.MyServerc                 f    |                      |dd                    |d                              d S NNOz#unrecognized authentication type {}r   r   formatr   s      r$   r  zGNewIMAPTestsMixin.test_bad_auth_name.<locals>.MyServer.cmd_AUTHENTICATEa  sB    !!#t9@@aIIK K K K Kr&   NrS   rT   rU   r  rW   r&   r$   MyServerrC  `  s(        K K K K Kr&   rJ  z'unrecognized authentication type METHODMETHODc                      dS Nr   rW   rW   r&   r$   r*  z6NewIMAPTestsMixin.test_bad_auth_name.<locals>.<lambda>g  s    ! r&   rk   r   r   r   rK   rG   r1  r!   rJ  r   r   s       r$   test_bad_auth_namez$NewIMAPTestsMixin.test_bad_auth_name_  s    	K 	K 	K 	K 	K( 	K 	K 	K KK))	##GM$79; ; 	5 	5))444	5 	5 	5 	5 	5 	5 	5 	5 	5 	5 	5 	5 	5 	5 	5 	5 	5 	5   A66A:=A:c                     G d dt                     }|                     |          \  }}|                     t          j        j        d          5  |                    dd            d d d            d S # 1 swxY w Y   d S )Nc                       e Zd Zd ZdS )?NewIMAPTestsMixin.test_invalid_authentication.<locals>.MyServerc              3   t   K   |                      d           d V | _        |                     |dd           d S Nr  rF  z[AUTHENTICATIONFAILED] invalidr   r  r   r   s      r$   r  zPNewIMAPTestsMixin.test_invalid_authentication.<locals>.MyServer.cmd_AUTHENTICATEk  D      ##C((( %!!#t-MNNNNNr&   NrI  rW   r&   r$   rJ  rT  j  s(        O O O O Or&   rJ  z \[AUTHENTICATIONFAILED\] invalidr%  c                     dS r'  rW   r(  s    r$   r*  z?NewIMAPTestsMixin.test_invalid_authentication.<locals>.<lambda>r  s    G r&   rN  rO  s       r$   test_invalid_authenticationz-NewIMAPTestsMixin.test_invalid_authenticationi  s    	O 	O 	O 	O 	O( 	O 	O 	O
 KK))	##GM$735 5 	= 	=*;*;<<<	= 	= 	= 	= 	= 	= 	= 	= 	= 	= 	= 	= 	= 	= 	= 	= 	= 	=rQ  c                      G d dt                     }|                     |          \  }}|                    dd           \  }}|                     |d           |                     |j        d           d S )Nc                       e Zd Zd ZdS )CNewIMAPTestsMixin.test_valid_authentication_bytes.<locals>.MyServerc              3   ~   K   |                      d           d V | j        _        |                     |dd           d S r  r  r   s      r$   r  zTNewIMAPTestsMixin.test_valid_authentication_bytes.<locals>.MyServer.cmd_AUTHENTICATEv  r  r&   NrI  rW   r&   r$   rJ  r]  u  (        D D D D Dr&   rJ  r%  c                     dS r'  rW   r(  s    r$   r*  zCNewIMAPTestsMixin.test_valid_authentication_bytes.<locals>.<lambda>{  r+  r&   r   r,  rk   r   r1  r   r  r!   rJ  r   rp   r   r   s         r$   test_valid_authentication_bytesz1NewIMAPTestsMixin.test_valid_authentication_bytest  s    	D 	D 	D 	D 	D( 	D 	D 	D
 X..%%h0A0ABBat$$$/:::::r&   c                      G d dt                     }|                     |          \  }}|                    dd           \  }}|                     |d           |                     |j        d           d S )Nc                       e Zd Zd ZdS )HNewIMAPTestsMixin.test_valid_authentication_plain_text.<locals>.MyServerc              3   ~   K   |                      d           d V | j        _        |                     |dd           d S r  r  r   s      r$   r  zYNewIMAPTestsMixin.test_valid_authentication_plain_text.<locals>.MyServer.cmd_AUTHENTICATE  r  r&   NrI  rW   r&   r$   rJ  rf    r_  r&   rJ  r%  c                     dS NfakerW   r(  s    r$   r*  zHNewIMAPTestsMixin.test_valid_authentication_plain_text.<locals>.<lambda>  s    & r&   r   r,  ra  rb  s         r$   $test_valid_authentication_plain_textz6NewIMAPTestsMixin.test_valid_authentication_plain_text  s    	D 	D 	D 	D 	D( 	D 	D 	D
 X..%%h0@0@AAat$$$/:::::r&   md5opensslc                      G d dt                     }|                     |          \  }}|                     d|j        v            |                    dd          \  }}|                     |d           d S )Nc                       e Zd ZdZd ZdS )@NewIMAPTestsMixin.test_login_cram_md5_bytes.<locals>.AuthHandlerLOGINDISABLED AUTH=CRAM-MD5c              3      K   |                      d           d V }|dk    r|                     |dd           d S |                     |dd           d S Nz:+ PDE4OTYuNjk3MTcwOTUyQHBvc3RvZmZpY2UucmVzdG9uLm1jaS5uZXQ=s2   dGltIGYxY2E2YmU0NjRiOWVmYTFjY2E2ZmZkNmNmMmQ5ZjMy
r   zCRAM-MD5 successfulrF  z	No accessr   r   r!   r   r   rs       r$   r  zQNewIMAPTestsMixin.test_login_cram_md5_bytes.<locals>.AuthHandler.cmd_AUTHENTICATE  {      ## %9 : : :EE 7 7 7%%c41FGGGGG%%c4=====r&   NrS   rT   rU   r   r  rW   r&   r$   AuthHandlerrq    (        8L> > > > >r&   rz  AUTH=CRAM-MD5tim   tanstaaftanstaafr   rk   r   r>  r   login_cram_md5r   r!   rz  r   r   rets        r$   test_login_cram_md5_bytesz+NewIMAPTestsMixin.test_login_cram_md5_bytes  s    
	> 
	> 
	> 
	> 
	>+ 
	> 
	> 
	> KK,,	6+>>???&&u.ABBQd#####r&   c                      G d dt                     }|                     |          \  }}|                     d|j        v            |                    dd          \  }}|                     |d           d S )Nc                       e Zd ZdZd ZdS )ENewIMAPTestsMixin.test_login_cram_md5_plain_text.<locals>.AuthHandlerrr  c              3      K   |                      d           d V }|dk    r|                     |dd           d S |                     |dd           d S rt  ru  rv  s       r$   r  zVNewIMAPTestsMixin.test_login_cram_md5_plain_text.<locals>.AuthHandler.cmd_AUTHENTICATE  rx  r&   Nry  rW   r&   r$   rz  r    r{  r&   rz  r|  r}  tanstaaftanstaafr   r  r  s        r$   test_login_cram_md5_plain_textz0NewIMAPTestsMixin.test_login_cram_md5_plain_text  s    
	> 
	> 
	> 
	> 
	>+ 
	> 
	> 
	> KK,,	6+>>???&&u.@AAQd#####r&   c                     G d dt                     }|                     |          \  }}|                     t          j        j        d          5  |                    dd            d d d            d S # 1 swxY w Y   d S )Nc                       e Zd Zd ZdS )?NewIMAPTestsMixin.test_aborted_authentication.<locals>.MyServerc              3      K   |                      d           d V | _        | j        dk    r|                     |dd           d S |                     |dd           d S Nr  s   *
rF  z[AUTHENTICATIONFAILED] abortedr   zMYAUTH successfulrW  r   s      r$   r  zPNewIMAPTestsMixin.test_aborted_authentication.<locals>.MyServer.cmd_AUTHENTICATE  s~      ##C((( %=H,,%%8: : : : :
 %%c41DEEEEEr&   NrI  rW   r&   r$   rJ  r    s(        	F 	F 	F 	F 	Fr&   rJ  z \[AUTHENTICATIONFAILED\] abortedr%  c                     d S r?   rW   r(  s    r$   r*  z?NewIMAPTestsMixin.test_aborted_authentication.<locals>.<lambda>  s    D r&   rN  rO  s       r$   test_aborted_authenticationz-NewIMAPTestsMixin.test_aborted_authentication  s    
	F 
	F 
	F 
	F 
	F( 
	F 
	F 
	F KK))	##GM$735 5 	: 	:..999	: 	: 	: 	: 	: 	: 	: 	: 	: 	: 	: 	: 	: 	: 	: 	: 	: 	:rQ  zimaplib._MAXLINE
   c                      G d dt                     }|                     |d          \  }}|                     t          j        j        d          5   | j        |j          d d d            d S # 1 swxY w Y   d S )Nc                       e Zd Zd ZdS ):NewIMAPTestsMixin.test_linetoolong.<locals>.TooLongHandlerc                 :    | j                             d           d S )Ns   * OK xxxxxxxxxxx
r   r)   s    r$   r   zANewIMAPTestsMixin.test_linetoolong.<locals>.TooLongHandler.handle  s    
  !?@@@@@r&   Nr   rW   r&   r$   TooLongHandlerr    s(        A A A A Ar&   r  Fr   zgot more than 10 bytes)rk   r   r   r   rK   rG   r   r   )r!   r  r   rp   s       r$   test_linetoolongz"NewIMAPTestsMixin.test_linetoolong  s    	A 	A 	A 	A 	A. 	A 	A 	A KKK>>	6##GM$7(* * 	4 	4DOV233	4 	4 	4 	4 	4 	4 	4 	4 	4 	4 	4 	4 	4 	4 	4 	4 	4 	4s   A00A47A4c                     |                      t          d          \  }} | j        |j         5  	 d d d            d S # 1 swxY w Y   d S )NFr   )r   rk   r   r   )r!   r   rp   s      r$   test_simple_with_statementz,NewIMAPTestsMixin.test_simple_with_statement  s    KK 15KAA	6T_f34 	 		 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	s   >AAwalltimec                 H   |                      t                    \  }}|j        d         }|                     d|d           }|                     |j        j        d            |                                 |                     d|t          j	                  }|                     |j        j        t          j	                   |                                 | 
                    t                    5  |                     d|d          }d d d            d S # 1 swxY w Y   d S )Nr   	localhostr   r   )r   rk   r   r   r   sockr   r   r   r   rI   
ValueError)r!   r   rp   addrr   s        r$   test_imaplib_timeout_testz+NewIMAPTestsMixin.test_imaplib_timeout_test  sR   KK 122	6$Q'dDAA,d333dG<TUU,g.FGGGz** 	C 	C__[$_BBF	C 	C 	C 	C 	C 	C 	C 	C 	C 	C 	C 	C 	C 	C 	C 	C 	C 	Cs   1DDDc                     G d dt                     }|                     |          \  }}|j        d         }|                     t                    5  |                     d|d          }d d d            d S # 1 swxY w Y   d S )Nc                       e Zd Zd ZdS )QNewIMAPTestsMixin.test_imaplib_timeout_functionality_test.<locals>.TimeoutHandlerc                 b    t          j        d           t                              |            d S rM  )r   sleeprk   r   r)   s    r$   r   zXNewIMAPTestsMixin.test_imaplib_timeout_functionality_test.<locals>.TimeoutHandler.handle  s)    
1!((.....r&   Nr   rW   r&   r$   TimeoutHandlerr    s#        / / / / /r&   r  r   r  gMbP?r  )rk   r   r   rI   TimeoutErrorr   )r!   r  r   rp   r  r   s         r$   'test_imaplib_timeout_functionality_testz9NewIMAPTestsMixin.test_imaplib_timeout_functionality_test  s    	/ 	/ 	/ 	/ 	/. 	/ 	/ 	/
 KK//	6$Q'|,, 	G 	G__[$_FFF	G 	G 	G 	G 	G 	G 	G 	G 	G 	G 	G 	G 	G 	G 	G 	G 	G 	Gs   A99A= A=c                 (   |                      t          d          \  }} | j        |j         5 }|                    dd           |                     |j        d           d d d            n# 1 swxY w Y   |                     |j                   d S NFr   r  r  )r   rk   r   r   r
  r   rr   assertIsNoner!   r   rp   imaps       r$   test_with_statementz%NewIMAPTestsMixin.test_with_statement  s    KK 15KAA	6T_f34 	4JJvv&&&V]F333	4 	4 	4 	4 	4 	4 	4 	4 	4 	4 	4 	4 	4 	4 	4 	&-(((((s   2A--A14A1c                    |                      t          d          \  }} | j        |j         5 }|                    dd           |                     |j        d           |                                 |                     |j                   d d d            n# 1 swxY w Y   |                     |j                   d S r  )	r   rk   r   r   r
  r   rr   logoutr  r  s       r$   test_with_statement_logoutz,NewIMAPTestsMixin.test_with_statement_logout  s    KK 15KAA	6T_f34 	-JJvv&&&V]F333KKMMMfm,,,		- 	- 	- 	- 	- 	- 	- 	- 	- 	- 	- 	- 	- 	- 	-
 	&-(((((s   A BB"Bc                    |                      t                    \  }}|                    dd          \  }}|                     |d           |                     |d         d           |                     |j        d           d S )Nr  r  r   r      LOGIN completedAUTH)r   rk   r
  r   r   r  s        r$   
test_loginzNewIMAPTestsMixin.test_login  s~    KK 122	LL00	Td###a"4555v.....r&   c                    |                      t                    \  }}|                    dd          \  }}|                     |d           |                     |d         d           |                                \  }}|                     |d||f           |                     |d         d||f           |                     |j        d           d S )	Nr  r  r   r   r  BYEs   IMAP4ref1 Server logging outr   )r   rk   r
  r   r  r   r  s        r$   test_logoutzNewIMAPTestsMixin.test_logout  s    KK 122	LL00	Td###a"4555MMOO	Tec4[111a"AC;OOOx00000r&   c                     G d dt                     }|                     |          \  }}|                    dd           |                                \  }}|                     |d           |                     |d         d           d S )Nc                       e Zd Zd ZdS ),NewIMAPTestsMixin.test_lsub.<locals>.LsubCmdc                 Z    |                      d           |                     |dd          S )Nz* LSUB () "." directoryAr   zLSUB completedru  r   s      r$   cmd_LSUBz5NewIMAPTestsMixin.test_lsub.<locals>.LsubCmd.cmd_LSUB  s0    ##$>???((d4DEEEr&   N)rS   rT   rU   r  rW   r&   r$   LsubCmdr    s(        F F F F Fr&   r  r  r  r   r   s   () "." directoryA)rk   r   r
  lsubr   )r!   r  r   r   r  r  s         r$   	test_lsubzNewIMAPTestsMixin.test_lsub  s    	F 	F 	F 	F 	F' 	F 	F 	F KK((	VV$$$KKMM	Td###a"677777r&   c                    |                      t                    \  }}|                    dd           |                                \  }}|                     |d           |                     |d         d           |                                \  }}|                     |d           |                     |d         d           |                     |j        d           d S )Nr  r  r   r      2s*   Returned to authenticated state. (Success)r  )r   rk   r
  selectr   unselectr   r  s        r$   test_unselectzNewIMAPTestsMixin.test_unselect  s    KK 122	VV$$$MMOO	Td###a$'''OO%%	Td###a"OPPPv.....r&   )T)#rS   rT   rU   r   r   r   r   r   r  r  r  r4  r@  rP  rZ  rc  rk  r   requires_hashdigestr  r  r  r   patchr  r  r
   r  r  r  r  r  r  r  r  rW   r&   r$   r   r      s       F( ( ( (B   2 2 22 2 2. . .! ! !) ) )< < <6( ( ($5 5 5	= 	= 	=	; 	; 	;	; 	; 	; (^'t<<<$ $ =<$" (^'t<<<$ $ =<$": : :" TZ"B''4 4 ('4  
 z""
C 
C #"
C	G 	G 	G) ) )) ) )/ / /1 1 1	8 	8 	8
/ 
/ 
/ 
/ 
/r&   r   c                   *    e Zd Zej        Zej        ZdS )NewIMAPTestsN)	rS   rT   rU   r   rK   r   r   	TCPServerr   rW   r&   r$   r  r  #  s        J)LLLr&   r  zSSL not availablec                   |    e Zd ZeZeZ ed          d             Z ed          d             Z	e
d             ZdS )NewIMAPSSLTestsr  c                    t          j        t           j                  }|                     |j        t           j                   |                     |j        d           |                    t                     | 	                    t           j
        d          5  |                     t                    \  }} | j        |j        d|i}|                                 d d d            d S # 1 swxY w Y   d S )NT=IP address mismatch, certificate is not valid for '127.0.0.1'ssl_context)r]   r^   PROTOCOL_TLS_CLIENTr   verify_modeCERT_REQUIREDcheck_hostnameload_verify_locationsCAFILEr   CertificateErrorr   rk   r   r   r   r!   r  r   rp   r   s        r$   test_ssl_raiseszNewIMAPSSLTests.test_ssl_raises-  s)   nS%<==0#2CDDD3T:::))&111##C$8  	 	 $566IAv$T_f&; >1<> >FOO	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	s   AC**C.1C.c                    t          j        t           j                  }|                    t                     |                     t                    \  }}|                     d|j        d         |          }|	                                 d S )Nr  r   r  )
r]   r^   r  r  r  r   rk   r   r   r   r  s        r$   test_ssl_verifiedz!NewIMAPSSLTests.test_ssl_verified<  s{    nS%<==))&111KK 122	6f.CA.F-8 ! : :r&   c                    t          j        dt          f          5  t          j                            | j        d          5  t          j                            | j        d          5  |                     ddt                     d d d            n# 1 swxY w Y   d d d            n# 1 swxY w Y   d d d            d S # 1 swxY w Y   d S )NrB   open_connectr     )certfile)r   check_warningsDeprecationWarningr   r  objectr   ra   r)   s    r$   test_certfile_arg_warnz&NewIMAPSSLTests.test_certfile_arg_warnH  s   +R1C,DEE 	I 	I""4?F;; I IZ&&t
CC I IOOKxOHHHI I I I I I I I I I I I I I II I I I I I I I I I I I I I I	I 	I 	I 	I 	I 	I 	I 	I 	I 	I 	I 	I 	I 	I 	I 	I 	I 	IsY   &C&B)(BB)BB)BB)C)B-	-C0B-	1CCCN)rS   rT   rU   	IMAP4_SSLr   rY   r   r
   r  r  r	   r  rW   r&   r$   r  r  (  s        J"Lz""  #" z""  #" I I \I I Ir&   r  c                   8   e Zd Zej        Zej        Zd Z	d Z
ed             Zed             Zej        d             Zej        d             Zej        d             Zej        d             Z G d	 d
e          Zej        d             Zej        d             Zej        d             Zej        d             Zej        d             Zej        d             Zej        d             Zej        d             Zej         ej        dd          d                         Z ej        d             Z!d Z"d Z#ej        d             Z$ej        d             Z%ej        d             Z&ej        e' e(j)        dd          d                                     Z*d S )!ThreadedNetworkedTestsc                 &    G d d| j                   }t          rt          d            |||          }|                     |j        |j                                                   t          rIt          d           t          d|           t          d| j                    t          d|j                   t          j	        d| j         z  |j
        d	d
i          }d|_        |                                 t          rt          d           ||fS )Nc                       e Zd Zd ZdS )4ThreadedNetworkedTests.make_server.<locals>.MyServerc                 V    |                      |           |                                   r?   r   r   s      r$   r   zAThreadedNetworkedTests.make_server.<locals>.MyServer.handle_errorV  s+    ""7+++!!###r&   Nr   rW   r&   r$   rJ  r  U  s#            r&   rJ  zcreating serverzserver createdzADDR =zCLASS =zHDLR =z
%s servingr   r   r   Tzserver running)r   r   rv   r   r   rC   getsocknameRequestHandlerClassr   r   r   r   r   )r!   r  hdlrrJ  rp   r;   s         r$   make_serverz"ThreadedNetworkedTests.make_serverS  s6   	 	 	 	 	t( 	 	 	  	%#$$$$%%.0I0I0K0KLLL 	8"###(D!!!)T.///(F6777 11' $T*, , , 				 	$"###qyr&   c                     t           rt          d           |                                 |                                 |                                 t           rt          d           d S d S )Nzwaiting for serverdone)r   rv   r   r   r   )r!   rp   r   s      r$   reap_serverz"ThreadedNetworkedTests.reap_servers  si     	(&''' 	&MMMMM	 	r&   c              #      K   |                      t          j        df|          \  }}	 |V  |                     ||           d S # |                     ||           w xY w)Nr   )r  r   r   r  )r!   r  rp   r   s       r$   reaped_serverz$ThreadedNetworkedTests.reaped_server|  sm      ))=+=q*A4HH	-LLLVV,,,,,DVV,,,,s   A Ac              #      K   |                      |          5 } | j        |j         }	 ||fV  |                                 n# |                                 w xY w	 d d d            d S # 1 swxY w Y   d S r?   )r  r   r   r  )r!   r  rp   r   s       r$   reaped_pairz"ThreadedNetworkedTests.reaped_pair  s      %% 	 $T_f&;<F fn$$$	  	  	  	  	  	  	  	  	  	  	  	  	  	  	  	  	  	 s'   A+AA+AA++A/2A/c                     |                      t                    5 } | j        |j         }|                                 d d d            d S # 1 swxY w Y   d S r?   )r  rk   r   r   r   r!   rp   r   s      r$   test_connectz#ThreadedNetworkedTests.test_connect  s     122 	f$T_f&;<FOO	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	s   $AAAc                 <    G d dt                     }|                     |          5 \  }}|                    dd           \  }}|                     |d           |                     |j        d           |                    d           |                    dd	d
          \  }\  }|                     d|           |                    d           |                    d          \  }\  }|                     d|           d d d            d S # 1 swxY w Y   d S )Nc                   0     e Zd Z fdZd Zd Zd Z xZS )EThreadedNetworkedTests.test_bracket_flags.<locals>.BracketFlagHandlerc                 Z    g d| _         t                                                       d S )N)AnsweredFlaggedDeletedSeenDraft)flagsrn   r   rs   s    r$   r   zLThreadedNetworkedTests.test_bracket_flags.<locals>.BracketFlagHandler.handle  s*    PPP
     r&   c              3   ~   K   |                      d           d V | j        _        |                     |dd           d S r  r  r   s      r$   r  zVThreadedNetworkedTests.test_bracket_flags.<locals>.BracketFlagHandler.cmd_AUTHENTICATE  r  r&   c                 l   d                     | j                  }|                     d|z                      d                     |                     d           |                     d           d|z  }|                     |                    d                     |                     |dd           d S )	N \z* FLAGS (%s)r$  r   s
   * 0 RECENTz-* OK [PERMANENTFLAGS %s \*)] Flags permitted.r   r   )r   r  r   r   r   )r!   r   r   flag_msgmsgs        r$   r   zPThreadedNetworkedTests.test_bracket_flags.<locals>.BracketFlagHandler.cmd_SELECT  s     ::dj11(!: B B7 K KLLL......G"#

7 3 3444!!#t-MNNNNNr&   c                    |d                              d                               d                                          }| j                            |           dd                    | j                  z  }d|d         d|}|                     |                    d	                     |                     |d
d           d S )Nr   ()z(FLAGS (%s))r  z* r   z FETCH r$  r   zSTORE completed.)rw   r   r  extendr   r   r   r   )r!   r   r   	new_flags	flags_msgr	  s         r$   	cmd_STOREzOThreadedNetworkedTests.test_bracket_flags.<locals>.BracketFlagHandler.cmd_STORE  s     GMM#..44S99??AA	
!!),,,*UZZ
-C-CC		)-a))<

7 3 3444!!#t-?@@@@@r&   )rS   rT   rU   r   r  r   r  r   r   s   @r$   BracketFlagHandlerr    sr        ! ! ! ! !D D D
O O OA A A A A A Ar&   r  r%  c                     dS r'  rW   r(  s    r$   r*  z;ThreadedNetworkedTests.test_bracket_flags.<locals>.<lambda>       r&   r   r,  test   1z+FLAGSz[test]s   [test]PERMANENTFLAGS)rk   r  r1  r   r  r  storerL   )r!   r  rp   r   r   r  r  s          r$   test_bracket_flagsz)ThreadedNetworkedTests.test_bracket_flags  s|   	A 	A 	A 	A 	A!2 	A 	A 	A: 011 		+5Eff,,X7H7HIIJD$T4(((V_o>>>MM&!!! ,,tXx@@KC$MM)T***MM&!!! //*:;;KC$MM)T***		+ 		+ 		+ 		+ 		+ 		+ 		+ 		+ 		+ 		+ 		+ 		+ 		+ 		+ 		+ 		+ 		+ 		+s   CDDDc                      G d dt           j                  }|                     |          5 } | j        t          j        j        | j        g|j        R   d d d            d S # 1 swxY w Y   d S )Nc                       e Zd Zd ZdS )9ThreadedNetworkedTests.test_issue5949.<locals>.EOFHandlerc                 :    | j                             d           d S r   r   r)   s    r$   r   z@ThreadedNetworkedTests.test_issue5949.<locals>.EOFHandler.handle  s    
  )))))r&   Nr   rW   r&   r$   r   r    s#        * * * * *r&   r   )	r   r   r  rI   r   rK   r   r   r   )r!   r   rp   s      r$   test_issue5949z%ThreadedNetworkedTests.test_issue5949  s    	* 	* 	* 	* 	*: 	* 	* 	*
 
++ 	GvDgm1"oG060EG G G G	G 	G 	G 	G 	G 	G 	G 	G 	G 	G 	G 	G 	G 	G 	G 	G 	G 	Gs   )A$$A(+A(c                      G d dt                     }|                     |          5 } | j        t          j        j        | j        g|j        R   d d d            d S # 1 swxY w Y   d S )Nc                       e Zd Zd ZdS )GThreadedNetworkedTests.test_line_termination.<locals>.BadNewlineHandlerc                 ^    |                      d           |                     |dd           d S r   r   r   s      r$   r   zVThreadedNetworkedTests.test_line_termination.<locals>.BadNewlineHandler.cmd_CAPABILITY  r   r&   Nr   rW   r&   r$   r   r     s(        E E E E Er&   r   )rk   r  rI   r   rK   r   r   r   )r!   r   rp   s      r$   r   z,ThreadedNetworkedTests.test_line_termination  s    	E 	E 	E 	E 	E 1 	E 	E 	E  122 	GfDgm1"oG060EG G G G	G 	G 	G 	G 	G 	G 	G 	G 	G 	G 	G 	G 	G 	G 	G 	G 	G 	G   )AA#&A#c                       e Zd ZdZd Zd ZdS )!ThreadedNetworkedTests.UTF8Serverr   c                 4    |                      |dd           d S r  r  r   s      r$   r  z,ThreadedNetworkedTests.UTF8Server.cmd_ENABLE  s!    c4)<=====r&   c              #   ~   K   |                      d           d V | j        _        |                     |dd           d S r  r  r   s      r$   r  z2ThreadedNetworkedTests.UTF8Server.cmd_AUTHENTICATE  sG      $$$#(55DK c4)>?????r&   Nr:  rW   r&   r$   r;  r$    s<        0	> 	> 	>	@ 	@ 	@ 	@ 	@r&   r;  c                 0   |                      | j                  5 \  }}|                     |j                   |                     t
          j        j        |j        d           |                     |j                   d d d            d S # 1 swxY w Y   d S )Nr   )	r  r;  r   r   rI   r   rK   rG   r  r  s      r$   r  z;ThreadedNetworkedTests.test_enable_raises_error_if_not_AUTH  s    do.. 	22B66V0111gm16=%HHHV0111	2 	2 	2 	2 	2 	2 	2 	2 	2 	2 	2 	2 	2 	2 	2 	2 	2 	2s   A#BBBc                      G d d| j                   }|                     |          5 \  }}|                     t          j        j        |j        d           d d d            d S # 1 swxY w Y   d S )Nc                       e Zd ZdZdS )XThreadedNetworkedTests.test_enable_raises_error_if_no_capability.<locals>.NoEnableServerr  Nr   rW   r&   r$   NoEnableServerr*    s        !LLLr&   r+  r   )r;  r  rI   r   rK   rG   r  )r!   r+  rp   r   s       r$   r  z@ThreadedNetworkedTests.test_enable_raises_error_if_no_capability  s    	" 	" 	" 	" 	"T_ 	" 	" 	"n-- 	I1A&&gm16=%HHH	I 	I 	I 	I 	I 	I 	I 	I 	I 	I 	I 	I 	I 	I 	I 	I 	I 	Is   /A%%A),A)c                     G d dt                     }|                     t          j        j                  5  |                     |          5 \  }}|                    dd          \  }}|                     |d           |                    d           	 d d d            n# 1 swxY w Y   d d d            d S # 1 swxY w Y   d S )Nc                       e Zd ZdS )\ThreadedNetworkedTests.test_enable_UTF8_raises_error_if_not_supported.<locals>.NonUTF8ServerNri   rW   r&   r$   NonUTF8Serverr.    s        Dr&   r/  r  r  r   r	  )	rk   rI   r   rK   rG   r  r
  r   r  )r!   r/  rp   r   r  r  s         r$   r  zEThreadedNetworkedTests.test_enable_UTF8_raises_error_if_not_supported  sW   	 	 	 	 	- 	 	 	w}233 	 	!!-00 4DVV"LL88	T  d+++m,,,	              	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	s6   B;AB#B;#B'	'B;*B'	+B;;B?B?c           	          G d d| j                   }|                     |          5 \  }}|                     |j        d           |                    dd           \  }}|                     |d           |                     |j        d           |                    d          \  }}|                     |d           |                     |j        d	           d
}|                    d d d |                    d	                    \  }}|                     |d           |                     |j        d|z                      d	                     d d d            d S # 1 swxY w Y   d S )Nc                       e Zd Zd ZdS )MThreadedNetworkedTests.test_enable_UTF8_True_append.<locals>.UTF8AppendServerc              3   ~   K   |                      d           d V | j        _        |                     |dd           d S r  r  r   s      r$   r!  zXThreadedNetworkedTests.test_enable_UTF8_True_append.<locals>.UTF8AppendServer.cmd_APPEND  r"  r&   N)rS   rT   rU   r!  rW   r&   r$   r#  r2    s#        5 5 5 5 5r&   r#  r$  r%  c                     dS r'  rW   r(  s    r$   r*  zEThreadedNetworkedTests.test_enable_UTF8_True_append.<locals>.<lambda>  s    g r&   r   r,  r	  r-  r.  r/  )	r;  r  r   r0  r1  r  r  r2  r   )	r!   r#  rp   r   r   r   r3  r  r  s	            r$   r4  z3ThreadedNetworkedTests.test_enable_UTF8_True_append  s   	5 	5 	5 	5 	5t 	5 	5 	5 .// 	3CFFV-w777))(4E4EFFGD!T4(((V_,. . .mmM22GD!T4(((V-w7772JdD*"3"3G"<"<> >ICS$''' :-55g>>  	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	s   D*E  E$'E$c                    |                      | j                  5 \  }}|                    dd           \  }}|                     |d           |                    d          \  }}|                     |d           |                     |j                   |                     t          j	        j
        |j        dd           d d d            d S # 1 swxY w Y   d S )Nr%  c                     dS r'  rW   r(  s    r$   r*  zSThreadedNetworkedTests.test_search_disallows_charset_in_utf8_mode.<locals>.<lambda>$  s    W r&   r   r	  r   r=  )r  r;  r1  r   r  r>  r   rI   r   rK   rG   r?  )r!   rp   r   r  r   s        r$   r@  zAThreadedNetworkedTests.test_search_disallows_charset_in_utf8_mode!  s%   do.. 	P2B66((3D3DEEFCS$''']]=11FCS$'''OOF/000gm16=%OOO	P 	P 	P 	P 	P 	P 	P 	P 	P 	P 	P 	P 	P 	P 	P 	P 	P 	Ps   B(CCCc                 4    G d dt                     }|                     |          5 \  }}|                     t          j        j                  5  |                    dd            d d d            n# 1 swxY w Y   d d d            d S # 1 swxY w Y   d S )Nc                       e Zd Zd ZdS );ThreadedNetworkedTests.test_bad_auth_name.<locals>.MyServerc                 f    |                      |dd                    |d                              d S rE  rG  r   s      r$   r  zLThreadedNetworkedTests.test_bad_auth_name.<locals>.MyServer.cmd_AUTHENTICATE0  s<    !!#t .,,2F47OO= = = = =r&   NrI  rW   r&   r$   rJ  r9  .  s#        = = = = =r&   rJ  rK  c                      dS rM  rW   rW   r&   r$   r*  z;ThreadedNetworkedTests.test_bad_auth_name.<locals>.<lambda>6  s    a r&   rk   r  rI   r   rK   rG   r1  )r!   rJ  rp   r   s       r$   rP  z)ThreadedNetworkedTests.test_bad_auth_name+  s/   	= 	= 	= 	= 	=( 	= 	= 	= h'' 	9+;FF""7=#677 9 9##Hii8889 9 9 9 9 9 9 9 9 9 9 9 9 9 9	9 	9 	9 	9 	9 	9 	9 	9 	9 	9 	9 	9 	9 	9 	9 	9 	9 	9s5   (BA5)B5A9	9B<A9	=BBBc                 :    G d dt                     }|                     |          5 \  }}|                     t          j        j                  5  |                    dd           \  }}d d d            n# 1 swxY w Y   d d d            d S # 1 swxY w Y   d S )Nc                       e Zd Zd ZdS )DThreadedNetworkedTests.test_invalid_authentication.<locals>.MyServerc              3   t   K   |                      d           d V | _        |                     |dd           d S rV  rW  r   s      r$   r  zUThreadedNetworkedTests.test_invalid_authentication.<locals>.MyServer.cmd_AUTHENTICATE=  rX  r&   NrI  rW   r&   r$   rJ  r?  ;  s(        O O O O Or&   rJ  r%  c                     dS r'  rW   r(  s    r$   r*  zDThreadedNetworkedTests.test_invalid_authentication.<locals>.<lambda>D  s    W r&   r<  r!   rJ  rp   r   r   r  s         r$   rZ  z2ThreadedNetworkedTests.test_invalid_authentication8  s`   	O 	O 	O 	O 	O( 	O 	O 	O h'' 	N+;FF""7=#677 N N#00;L;LMM
dN N N N N N N N N N N N N N N	N 	N 	N 	N 	N 	N 	N 	N 	N 	N 	N 	N 	N 	N 	N 	N 	N 	N5   (BA8,B8A<	<B?A<	 BBBc                     G d dt                     }|                     |          5 \  }}|                    dd           \  }}|                     |d           |                     |j        d           d d d            n# 1 swxY w Y   |                     |          5 \  }}|                    dd           \  }}|                     |d           |                     |j        d           d d d            d S # 1 swxY w Y   d S )Nc                       e Zd Zd ZdS )BThreadedNetworkedTests.test_valid_authentication.<locals>.MyServerc              3   ~   K   |                      d           d V | j        _        |                     |dd           d S r  r  r   s      r$   r  zSThreadedNetworkedTests.test_valid_authentication.<locals>.MyServer.cmd_AUTHENTICATEK  r  r&   NrI  rW   r&   r$   rJ  rF  I  s(        D D D D Dr&   rJ  r%  c                     dS r'  rW   r(  s    r$   r*  zBThreadedNetworkedTests.test_valid_authentication.<locals>.<lambda>Q  r  r&   r   r,  c                     dS ri  rW   r(  s    r$   r*  zBThreadedNetworkedTests.test_valid_authentication.<locals>.<lambda>W  s     r&   )rk   r  r1  r   r  rB  s         r$   test_valid_authenticationz0ThreadedNetworkedTests.test_valid_authenticationF  s   	D 	D 	D 	D 	D( 	D 	D 	D h'' 	.+;FF,,X7H7HIIJD$T4(((V_,. . .	. 	. 	. 	. 	. 	. 	. 	. 	. 	. 	. 	. 	. 	. 	. h'' 	.+;FF,,X7G7GHHJD$T4(((V_,. . .	. 	. 	. 	. 	. 	. 	. 	. 	. 	. 	. 	. 	. 	. 	. 	. 	. 	.%   ABBB$AD  DDrl  Trm  c                     G d dt                     }|                     |          5 \  }}|                     d|j        v            |                    dd          \  }}|                     |d           d d d            n# 1 swxY w Y   |                     |          5 \  }}|                     d|j        v            |                    dd          \  }}|                     |d           d d d            d S # 1 swxY w Y   d S )Nc                       e Zd ZdZd ZdS )?ThreadedNetworkedTests.test_login_cram_md5.<locals>.AuthHandlerrr  c              3      K   |                      d           d V }|dk    r|                     |dd           d S |                     |dd           d S rt  ru  rv  s       r$   r  zPThreadedNetworkedTests.test_login_cram_md5.<locals>.AuthHandler.cmd_AUTHENTICATEd  rx  r&   Nry  rW   r&   r$   rz  rN  `  s(        8L> > > > >r&   rz  r|  r}  r  r   r~  )rk   r  r>  r   r  r   )r!   rz  rp   r   r  r  s         r$   test_login_cram_md5z*ThreadedNetworkedTests.test_login_cram_md5\  s   	> 	> 	> 	> 	>+ 	> 	> 	> k** 	(.>vvOOOv/BBCCC--e5GHHICS$'''	( 	( 	( 	( 	( 	( 	( 	( 	( 	( 	( 	( 	( 	( 	(
 k** 	(.>vvOOOv/BBCCC--e5HIIICS$'''	( 	( 	( 	( 	( 	( 	( 	( 	( 	( 	( 	( 	( 	( 	( 	( 	( 	(rK  c                 :    G d dt                     }|                     |          5 \  }}|                     t          j        j                  5  |                    dd           \  }}d d d            n# 1 swxY w Y   d d d            d S # 1 swxY w Y   d S )Nc                       e Zd Zd ZdS )DThreadedNetworkedTests.test_aborted_authentication.<locals>.MyServerc              3      K   |                      d           d V | _        | j        dk    r|                     |dd           d S |                     |dd           d S r  rW  r   s      r$   r  zUThreadedNetworkedTests.test_aborted_authentication.<locals>.MyServer.cmd_AUTHENTICATE~  sp      ##C((( %=H,,%%c41QRRRRR%%c41DEEEEEr&   NrI  rW   r&   r$   rJ  rS  |  s(        F F F F Fr&   rJ  r%  c                     d S r?   rW   r(  s    r$   r*  zDThreadedNetworkedTests.test_aborted_authentication.<locals>.<lambda>  s    T r&   r<  rB  s         r$   r  z2ThreadedNetworkedTests.test_aborted_authenticationy  s^   		F 		F 		F 		F 		F( 		F 		F 		F h'' 	K+;FF""7=#677 K K#00>>JJ
dK K K K K K K K K K K K K K K	K 	K 	K 	K 	K 	K 	K 	K 	K 	K 	K 	K 	K 	K 	K 	K 	K 	KrC  c                      G d dt                     }|                     |          5 } | j        t          j        j        | j        g|j        R   d d d            d S # 1 swxY w Y   d S )Nc                       e Zd Zd ZdS )?ThreadedNetworkedTests.test_linetoolong.<locals>.TooLongHandlerc                 `    | j                             dt          j        dz  z   dz              d S )Ns   * OK    xr~   )rx   ry   r   _MAXLINEr)   s    r$   r   zFThreadedNetworkedTests.test_linetoolong.<locals>.TooLongHandler.handle  s0    
  G,<t,C!Cg!MNNNNNr&   Nr   rW   r&   r$   r  rX    s(        O O O O Or&   r  )rk   r  rI   r   rK   rG   r   r   )r!   r  rp   s      r$   r  z'ThreadedNetworkedTests.test_linetoolong  s    	O 	O 	O 	O 	O. 	O 	O 	O
 // 	G6Dgm1"oG060EG G G G	G 	G 	G 	G 	G 	G 	G 	G 	G 	G 	G 	G 	G 	G 	G 	G 	G 	Gr"  c           	         d G fddt                     }t          dd          D ]}d|z  |                     d           5  |                     |          5 }|                     t
          j        j                  5   | j        |j	          d d d            n# 1 swxY w Y   d d d            n# 1 swxY w Y   d d d            n# 1 swxY w Y   d S )Nr   c                       e Zd Z fdZdS )GThreadedNetworkedTests.test_truncated_large_literal.<locals>.BadHandlerc                 b    |                      dz             |                      d           d S )Nz	* OK {%d}r   )r   )r!   sizes    r$   r   zNThreadedNetworkedTests.test_truncated_large_literal.<locals>.BadHandler.handle  s6    ##K$$6777##K00000r&   Nr   )r`  s   r$   
BadHandlerr^    s.        1 1 1 1 1 1 1r&   ra     @   r   zsize=2e)
rk   rangesubTestr  rI   r   rK   r   r   r   )r!   ra  exponentrp   r`  s       @r$   test_truncated_large_literalz3ThreadedNetworkedTests.test_truncated_large_literal  s   	1 	1 	1 	1 	1 	1 	1* 	1 	1 	1
 b" 	@ 	@H=D...// @ @''
33 @v**7=+>?? @ @')>??@ @ @ @ @ @ @ @ @ @ @ @ @ @ @@ @ @ @ @ @ @ @ @ @ @ @ @ @ @@ @ @ @ @ @ @ @ @ @ @ @ @ @ @	@ 	@sZ   C%B6B	B6B##B6&B#'B6*C6B::C=B:>CC	C	c                     |                      t                    5 } | j        |j         5  	 d d d            n# 1 swxY w Y   d d d            d S # 1 swxY w Y   d S r?   )r  rk   r   r   )r!   rp   s     r$   r  z1ThreadedNetworkedTests.test_simple_with_statement  s      122 	f &"78                	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	s.   A9A=	A =	AAAc                 P   |                      t                    5 } | j        |j         5 }|                    dd           |                     |j        d           d d d            n# 1 swxY w Y   |                     |j                   d d d            d S # 1 swxY w Y   d S Nr  r  )r  rk   r   r   r
  r   rr   r  r!   rp   r  s      r$   r  z*ThreadedNetworkedTests.test_with_statement  s     122 	-f &"78 8D

66***  7778 8 8 8 8 8 8 8 8 8 8 8 8 8 8 fm,,,		- 	- 	- 	- 	- 	- 	- 	- 	- 	- 	- 	- 	- 	- 	- 	- 	- 	-s4   B2A)B)A-	-B0A-	1BB"Bc                    |                      t                    5 } | j        |j         5 }|                    dd           |                     |j        d           |                                 |                     |j                   d d d            n# 1 swxY w Y   |                     |j                   d d d            d S # 1 swxY w Y   d S rj  )	r  rk   r   r   r
  r   rr   r  r  rk  s      r$   r  z1ThreadedNetworkedTests.test_with_statement_logout  sE     122 	-f &"78 1D

66***  777!!&-000	1 1 1 1 1 1 1 1 1 1 1 1 1 1 1
 fm,,,	- 	- 	- 	- 	- 	- 	- 	- 	- 	- 	- 	- 	- 	- 	- 	- 	- 	-s5   C	A BC	B	C	B	C		CCFz Won't work if __debug__ is Falsec                    ddgi}|                      t                    5 } | j        |j         5 }t          j                            |d          5 }|                    |           |                    d           d d d            n# 1 swxY w Y   d d d            n# 1 swxY w Y   d d d            d S # 1 swxY w Y   d S )Nz
READ-WRITEr&   _mesgz)untagged responses dump:READ-WRITE: [b''])	r  rk   r   r   r   r  r  _dump_urassert_called_with)r!   untagged_resp_dictrp   r  	mock_mesgs        r$   test_dump_urz#ThreadedNetworkedTests.test_dump_ur  s   
 +SE2 122 	f &"78 DZ&&tW55 MM"455500C                              	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	sX   B7!B+B<BBBBBB7B#	#B7&B#	'B77B;>B;N)+rS   rT   rU   r   r  r   r   rK   r   r  r  r   r  r  r   reap_threadsr  r  r  r   rk   r;  r  r  r  r4  r@  rP  rZ  rJ  r   r  rP  r  r  rg  r  r  r  r	   unittest
skipUnlessrs  rW   r&   r$   r  r  O  sS       )LJ  @   - - ^-     ^  "  #"
 ".+ .+ #".+` "	G 	G #"	G "
G 
G #"
G	@ 	@ 	@ 	@ 	@& 	@ 	@ 	@ "2 2 #"2 "I I #"I "  #" "  #": "P P #"P "
9 
9 #"
9 "N N #"N ". . #".* "'^'t<<<( ( =< #"(6 "K K #"K$G G G@ @ @ "  #" "- - #"- "- - #"- "X$FGG
 
 HG \ #"
 
 
r&   r  c                   6    e Zd ZeZeZej        d             Z	dS )ThreadedNetworkedTestsSSLc                 j   t          j        t           j                  }|                    t                     |                     t           j        d          5  |                     t                    5 } | j	        |j
        d|i}|                                 d d d            n# 1 swxY w Y   d d d            n# 1 swxY w Y   |                     t                    5 }| 	                    d|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  rk   r   r   r   )r!   r  rp   r   s       r$   r  z+ThreadedNetworkedTestsSSL.test_ssl_verified  s   nS%<==))&111##$  	" 	" ##$566 "&(&*? B5@B B!!!" " " " " " " " " " " " " " "		" 	" 	" 	" 	" 	" 	" 	" 	" 	" 	" 	" 	" 	" 	"  122 	f__[&2G2J1< % > >FOO	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	sH   B>4'B'B>'B+	+B>.B+	/B>>CC#8D((D,/D,N)
rS   rT   rU   rY   r   r  r   r   rt  r  rW   r&   r$   rx  rx    s;        "LJ"  #"  r&   rx  networkznetwork resource disabledz'cyrus.andrew.cmu.edu blocks connectionsc                   D    e Zd ZdZdZdZdZej        Z	d Z
d Zd Zd Zd	S )
RemoteIMAPTestzcyrus.andrew.cmu.edur  	anonymousr  c                     t          j        | j                  5  |                     | j        | j                  | _        d d d            d S # 1 swxY w Y   d S r?   )r   transient_internethostr   portrp   r)   s    r$   setUpzRemoteIMAPTest.setUp  s    -di88 	@ 	@//$)TY??DK	@ 	@ 	@ 	@ 	@ 	@ 	@ 	@ 	@ 	@ 	@ 	@ 	@ 	@ 	@ 	@ 	@ 	@s   &AAAc                     | j         Mt          j        | j                  5  | j                                          d d d            d S # 1 swxY w Y   d S d S r?   )rp   r   r  r  r  r)   s    r$   tearDownzRemoteIMAPTest.tearDown  s    ;"1$)<< % %""$$$% % % % % % % % % % % % % % % % % % #"s   AAAc                    t          j        | j                  5  | j        j        D ]}|                     |t                     |                     d| j        j                   |                     d| j        j                   | j                            | j	        | j
                  }|                     |d         d           d d d            d S # 1 swxY w Y   d S )NLOGINDISABLEDzAUTH=ANONYMOUSr   r   )r   r  r  rp   r   assertIsInstancestrrL   r
  usernamepasswordr   )r!   caprss      r$   test_logincapazRemoteIMAPTest.test_logincapa  s   -di88 	* 	*{/ 0 0%%c3////MM/4;+CDDDMM*DK,DEEE""4=$-@@BRUD)))	* 	* 	* 	* 	* 	* 	* 	* 	* 	* 	* 	* 	* 	* 	* 	* 	* 	*s   B,CCCc                     t          j        | j                  5  | j                                        }d | _        |                     |d         d|           d d d            d S # 1 swxY w Y   d S Nr   r  )r   r  r  rp   r  r   )r!   r  s     r$   r  zRemoteIMAPTest.test_logout  s    -di88 	/ 	/##%%BDKRUE2...	/ 	/ 	/ 	/ 	/ 	/ 	/ 	/ 	/ 	/ 	/ 	/ 	/ 	/ 	/ 	/ 	/ 	/s   >A%%A),A)N)rS   rT   rU   r  r  r  r  r   rK   r   r  r  r  r  rW   r&   r$   r|  r|    sp         "DDHHJ@ @ @% % %
* * */ / / / /r&   r|  c                   $     e Zd Z fdZd Z xZS )RemoteIMAP_STARTTLSTestc                    t                                                       t          j        | j                  5  | j                                        }|                     |d         d           d d d            d S # 1 swxY w Y   d S )Nr   r   )rn   r  r   r  r  rp   starttlsr   )r!   r  rt   s     r$   r  zRemoteIMAP_STARTTLSTest.setUp  s    -di88 	* 	*%%''BRUD)))	* 	* 	* 	* 	* 	* 	* 	* 	* 	* 	* 	* 	* 	* 	* 	* 	* 	*s   6A>>BBc                     | j         j        D ]}|                     |t                     |                     d| j         j                   d S )Nr  )rp   r   r  r  assertNotIn)r!   r  s     r$   r  z&RemoteIMAP_STARTTLSTest.test_logincapa  sP    ;+ 	, 	,C!!#s++++$+*BCCCCCr&   )rS   rT   rU   r  r  r   r   s   @r$   r  r  
  sN        * * * * *D D D D D D Dr&   r  c                   F    e Zd ZdZeZd Zd Zd Zd Z	d Z
d Zd Zd	 Zd
S )RemoteIMAP_SSLTesti  c                     d S r?   rW   r)   s    r$   r  zRemoteIMAP_SSLTest.setUp"      r&   c                     d S r?   rW   r)   s    r$   r  zRemoteIMAP_SSLTest.tearDown%  r  r&   c                     t          j        t           j                  }d|_        t           j        |_        |                    t                     |S rm   )r]   r^   r  r  	CERT_NONEr  r`   ra   )r!   r  s     r$   create_ssl_contextz%RemoteIMAP_SSLTest.create_ssl_context(  s@    nS%<==%*""%-##H---r&   c                    	 |j         D ]}|                     |t                     |                     d|j                    |                     d|j                    |                    | j        | j                  }|                     |d         d           |	                                 d S # |	                                 w xY w)Nr  z
AUTH=PLAINr   r   )
r   r  r  r  rL   r
  r  r  r   r  )r!   rp   r  r  s       r$   check_logincapaz"RemoteIMAP_SSLTest.check_logincapa/  s    	* 0 0%%c3////_f.ABBBMM,(;<<<dmT];;BRUD)))MMOOOOOFMMOOOOs   BB/ /Cc                     t          j        | j                  5  |                     | j        | j                  }|                     |           d d d            d S # 1 swxY w Y   d S r?   )r   r  r  r   r  r  )r!   _servers     r$   r  z!RemoteIMAP_SSLTest.test_logincapa:  s    -di88 	* 	*oodi;;G  )))	* 	* 	* 	* 	* 	* 	* 	* 	* 	* 	* 	* 	* 	* 	* 	* 	* 	*s   6AA!$A!c                    t          j        | j                  5  |                     | j        | j                  }|                                }|                     |d         d|           d d d            d S # 1 swxY w Y   d S r  )r   r  r  r   r  r  r   )r!   r  r  s      r$   r  zRemoteIMAP_SSLTest.test_logout?  s    -di88 	/ 	/oodi;;G!!BRUE2...	/ 	/ 	/ 	/ 	/ 	/ 	/ 	/ 	/ 	/ 	/ 	/ 	/ 	/ 	/ 	/ 	/ 	/s   AA99A= A=c           
          t          j        | j                  5  |                     t          | j        | j        | j        t          |                                            d d d            d S # 1 swxY w Y   d S )N)r  r  	r   r  r  rI   r  r   r  ra   r  r)   s    r$   #test_ssl_context_certfile_exclusivez6RemoteIMAP_SSLTest.test_ssl_context_certfile_exclusiveE  s    -di88 	J 	JDOTY	!t/F/F/H/H  J J J	J 	J 	J 	J 	J 	J 	J 	J 	J 	J 	J 	J 	J 	J 	J 	J 	J 	J   AA..A25A2c           
          t          j        | j                  5  |                     t          | j        | j        | j        t          |                                            d d d            d S # 1 swxY w Y   d S )N)keyfiler  r  r)   s    r$   "test_ssl_context_keyfile_exclusivez5RemoteIMAP_SSLTest.test_ssl_context_keyfile_exclusiveK  s    -di88 	I 	IDOTY	 d.E.E.G.G  I I I	I 	I 	I 	I 	I 	I 	I 	I 	I 	I 	I 	I 	I 	I 	I 	I 	I 	Ir  N)rS   rT   rU   r  r  r   r  r  r  r  r  r  r  r  rW   r&   r$   r  r    s         DJ      	 	 	* * *
/ / /J J JI I I I Ir&   r  __main__)9r  r   test.supportr   
contextlibr   r   os.pathosr   r   r   r   rC   r   r   r   r	   r
   r   r   r   r   ru  r   r   r   r   r]   ImportErrorpathr   dirname__file__curdirra   r  TestCaser   r  rY   r  r   rk   r   r  rv  r  r  rx  is_resource_enabledskipr|  r  r  rS   mainrW   r&   r$   <module>r     s         & & & & & & % % % % % %             3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 ( ' ' ' ' ' ) ) ) ) ) ) ( ( ( ( ( (        2 2 2 2 2 2 2 2 2 2JJJJ   
CCC   t , , , ,7<<11>RY
N[[	bgooh//<29j.	Y	Y>; >; >; >; >;(# >; >; >;B  ( ( ( ( (,0 ( ( ( !II        I\A \A \A \A \A9 \A \A \A~K/ K/ K/ K/ K/ K/ K/ K/\
* * * * *$h&7 * * *
 S-..$I $I $I $I $I'): $I $I /.$IL| | | | |X. | | |~ S-..     6   /.0 G	**,GI I899/ / / / /X& / / :9I I/@ S-..G	**,GI I899D D D D Dn D D :9I I /.D S-..8991I 1I 1I 1I 1I 1I 1I :9 /.1Ih zHMOOOOO s   &A+ +A54A5