
    0hhE                        S SK r S SKrS SKrS SKrS SKrS SKrS SKrS SKrS SKrS SK	r
S SK	JrJr  S SK	Jr  S SK	Jr  S SK	Jr  \
R                   R#                  S5        \
R                   R%                  SS9  S	r\R(                  r\" \S
5      r\R.                  " \S5      r\
R                   R2                  r\R.                  " \S5      r\R                  r\
R                   R:                  4S jr\
R                   R?                  5       \ R@                  S 5       5       r! " S S\RD                  5      r# " S S\RD                  5      r$ " S S\RJ                  5      r& " S S\RN                  5      r( " S S\RR                  \&5      r*\(       a   " S S\RV                  \&5      r, " S S\RD                  5      r- " S S\RD                  5      r.\/S:X  a  \R`                  " 5         gg)     N)reap_childrenverbose)	os_helper)socket_helper)threading_helpernetworkT)modules   hello world
AF_UNIXzrequires Unix socketszrequires forkingc                 p    [        U // / U5      u  p4nX;   a  U R                  U5      $ [        SU < 35      e)Nztimed out on )_real_selectrecvRuntimeError)sockntimeoutrwxs         ?/opt/python-3.13.8/usr/lib/python3.13/test/test_socketserver.pyreceiver   &   s9    D62r73GA!yyy|677    c              #     #    [         R                  " 5       nUS:X  a  [         R                  " S5         S v    [        R                  R                  USS9  g !   e = f! [        R                  R                  USS9  f = f7f)Nr   H   )exitcode)osfork_exittestsupportwait_process)testcasepids     r   simple_subprocessr#   .   sh      '')C
ax
4
 	!!#!3!!#!3s'   2BA BAA  A??Bc                   >   \ rS rSrS rS rS rS r\R                  S 5       r
S rS rS	 rS
 r\S 5       r\S 5       r\S 5       r\\S 5       5       rS rS r\S 5       r\S 5       r\S 5       r\\S 5       5       r\R                  S 5       rS rS rS rSrg)SocketServerTest>   c                      SU l         / U l        g Nr   	port_seed
test_filesselfs    r   setUpSocketServerTest.setUpA   s    r   c                     [        5         U R                   H  n [        R                  " U5        M     / U R                  S S & g ! [         a     M;  f = fN)r   r+   r   removeOSError)r-   fns     r   tearDownSocketServerTest.tearDownE   sI    //B		" "
    s   A
AAc                     U[         R                  :X  a  [        S4$ [        R                  " 5       nU R
                  R                  U5        U$ r(   )socketAF_INETHOSTr   create_unix_domain_namer+   append)r-   protor4   s      r   pickaddrSocketServerTest.pickaddrO   s?    FNN"!9 668BOO""2&Ir   c           	      @    " S SU5      n " S SU5      n[         (       a  [        S5         U" X5      nU R	                  WR
                  UR                  R                  5       5        U$ ! [         a'  nU R                  SU< SU< SU< 35         S nANbS nAff = f)	Nc                       \ rS rSrS rSrg).SocketServerTest.make_server.<locals>.MyServerZ   c                 &    U R                  U5        e r1   )close_requestr-   requestclient_addresss      r   handle_error;SocketServerTest.make_server.<locals>.MyServer.handle_error[   s    ""7+r    N)__name__
__module____qualname____firstlineno__rI   __static_attributes__rK   r   r   MyServerrB   Z   s    r   rQ   c                       \ rS rSrS rSrg)/SocketServerTest.make_server.<locals>.MyHandler_   c                 n    U R                   R                  5       nU R                  R                  U5        g r1   )rfilereadlinewfilewrite)r-   lines     r   handle6SocketServerTest.make_server.<locals>.MyHandler.handle`   s&    zz**,

  &r   rK   NrL   rM   rN   rO   r[   rP   rK   r   r   	MyHandlerrS   _   s    'r   r^   zcreating serverzCannot create server (z, z): )r   printPermissionErrorskipTestassertEqualserver_addressr8   getsockname)r-   addrsvrclshdlrbaserQ   r^   serveres           r   make_serverSocketServerTest.make_serverY   s    	v 	
	' 	'
 7E+,	-d.F
 	..0I0I0KL  	-MM!4, - -	-s   A, ,
B6BBc                 l   U R                  U R                  UR                  5      X5      nUR                  n[        (       a  [        SU5        [        SU5        [        R                  " SU-  UR                  SS0S9nSUl	        UR                  5         [        (       a  [        S5        [        S	5       H-  n[        (       a  [        S
U5        U" UR                  U5        M/     [        (       a  [        S5        UR                  5         UR                  5         UR                  5         U R                  SUR                   R#                  5       5        [$        (       a:  ['        U[(        R*                  5      (       a  U R-                  UR.                  5        [        (       a  [        S5        g g )NzADDR =zCLASS =z
%s servingpoll_interval{Gz?nametargetkwargsTzserver running   ztest clientzwaiting for serverdone)rj   r>   address_familyrc   r   r_   	threadingThreadserve_foreverdaemonstartrangeshutdownjoinserver_closerb   r8   filenoHAVE_FORKING
isinstancesocketserverForkingMixInassertFalseactive_children)r-   rf   rg   testfuncrh   re   tis           r   
run_serverSocketServerTest.run_servern   sG   !!$--0E0E"F"(4 $$7(D!)V$&'' $D)+ 		7E*+qAwmQ/V**D1  7E./	V]]1134<Jv|/H/HII V3347E&M7r   c                 l   [         R                   " U[         R                  5       nUR                  U5        UR                  [        5        [        US5      =pEU(       a%  SU;  a  [        US5      nXE-  nU(       a  SU;  a  M  U R                  U[        5        S S S 5        g ! , (       d  f       g = fNd      
)r8   SOCK_STREAMconnectsendallTEST_STRr   rb   r-   r=   re   sbufdatas         r   stream_examineSocketServerTest.stream_examine   s    ]]5&"4"45IIdOIIh C(C5+q# 5+ S(+ 655s   AB%B%%
B3c                    [         R                   " U[         R                  5       n[        (       a4  U[         R                  :X  a   UR	                  U R                  U5      5        UR                  [        U5        [        US5      =pEU(       a%  SU;  a  [        US5      nXE-  nU(       a  SU;  a  M  U R                  U[        5        S S S 5        g ! , (       d  f       g = fr   )
r8   
SOCK_DGRAMHAVE_UNIX_SOCKETSr
   bindr>   sendtor   r   rb   r   s         r   dgram_examineSocketServerTest.dgram_examine   s    ]]5&"3"34  Ufnn%<t}}U+,HHXt$ C(C5+q# 5+ S(+ 544s   BC5C
C"c                 v    U R                  [        R                  [        R                  U R                  5        g r1   )r   r   	TCPServerStreamRequestHandlerr   r,   s    r   test_TCPServerSocketServerTest.test_TCPServer   s(    ..$99++	-r   c                 v    U R                  [        R                  [        R                  U R                  5        g r1   )r   r   ThreadingTCPServerr   r   r,   s    r   test_ThreadingTCPServer(SocketServerTest.test_ThreadingTCPServer   s(    77$99++	-r   c                     [        U 5         U R                  [        R                  [        R                  U R
                  5        S S S 5        g ! , (       d  f       g = fr1   )r#   r   r   ForkingTCPServerr   r   r,   s    r   test_ForkingTCPServer&SocketServerTest.test_ForkingTCPServer   s<    t$OOL99(== //1 %$$   :A
Ac                 v    U R                  [        R                  [        R                  U R                  5        g r1   )r   r   UnixStreamServerr   r   r,   s    r   test_UnixStreamServer&SocketServerTest.test_UnixStreamServer   s(    55$99++	-r   c                 v    U R                  [        R                  [        R                  U R                  5        g r1   )r   r   ThreadingUnixStreamServerr   r   r,   s    r   test_ThreadingUnixStreamServer/SocketServerTest.test_ThreadingUnixStreamServer   s(    >>$99++	-r   c                     [        U 5         U R                  [        R                  [        R                  U R
                  5        S S S 5        g ! , (       d  f       g = fr1   )r#   r   r   ForkingUnixStreamServerr   r   r,   s    r   test_ForkingUnixStreamServer-SocketServerTest.test_ForkingUnixStreamServer   s>     t$OOL@@(== //1 %$$r   c                 v    U R                  [        R                  [        R                  U R                  5        g r1   )r   r   	UDPServerDatagramRequestHandlerr   r,   s    r   test_UDPServerSocketServerTest.test_UDPServer   s(    ..$;;**	,r   c                 v    U R                  [        R                  [        R                  U R                  5        g r1   )r   r   ThreadingUDPServerr   r   r,   s    r   test_ThreadingUDPServer(SocketServerTest.test_ThreadingUDPServer   s(    77$;;**	,r   c                     [        U 5         U R                  [        R                  [        R                  U R
                  5        S S S 5        g ! , (       d  f       g = fr1   )r#   r   r   ForkingUDPServerr   r   r,   s    r   test_ForkingUDPServer&SocketServerTest.test_ForkingUDPServer   s<    t$OOL99(?? ..0 %$$r   c                 v    U R                  [        R                  [        R                  U R                  5        g r1   )r   r   UnixDatagramServerr   r   r,   s    r   test_UnixDatagramServer(SocketServerTest.test_UnixDatagramServer   s(    77$;;**	,r   c                 v    U R                  [        R                  [        R                  U R                  5        g r1   )r   r   ThreadingUnixDatagramServerr   r   r,   s    r    test_ThreadingUnixDatagramServer1SocketServerTest.test_ThreadingUnixDatagramServer   s(    @@$;;**	,r   c                 v    U R                  [        R                  [        R                  U R                  5        g r1   )r   r   ForkingUnixDatagramServerr   r   r,   s    r   test_ForkingUnixDatagramServer/SocketServerTest.test_ForkingUnixDatagramServer   s*     	>>$;;**	,r   c                     " S S[         R                  5      n " S S[         R                  5      n/ n[        S5       HM  nU" [        S4U5      n[
        R                  " SUR                  SS	0S
9nSUl        UR                  Xe45        MO     U H%  u  peUR                  5         UR                  5         M'     U H%  u  peUR                  5         UR                  5         M'     g )Nc                       \ rS rSrSrg)0SocketServerTest.test_shutdown.<locals>.MyServer   rK   NrL   rM   rN   rO   rP   rK   r   r   rQ   r          r   rQ   c                       \ rS rSrSrg)1SocketServerTest.test_shutdown.<locals>.MyHandler   rK   Nr   rK   r   r   r^   r      r   r   r^      r   zMyServer servingrm   rn   ro   T)r   r   r   r|   r:   rw   rx   ry   rz   r<   r{   r}   r~   r   )r-   rQ   r^   threadsr   r   r   s          r   test_shutdownSocketServerTest.test_shutdown   s    	|-- 		99 	 rA$I.A  ''-/A AHNNA6"  DAGGIJJL  DAFFHNN r   c                      " S S[         R                  [         R                  5      nU" [        S4S 5      nUR	                  5         g )Nc                       \ rS rSrSrg)9SocketServerTest.test_close_immediately.<locals>.MyServeri
  rK   Nr   rK   r   r   rQ   r   
  r   r   rQ   r   c                      g r1   rK   rK   r   r   <lambda>9SocketServerTest.test_close_immediately.<locals>.<lambda>  s    Tr   )r   ThreadingMixInr   r:   r   )r-   rQ   rh   s      r   test_close_immediately'SocketServerTest.test_close_immediately	  s:    	|22L4J4J 	 4)\2r   c                     [        S5       HL  nU R                  [        5         [        R                  " [
        S4[        R                  5        S S S 5        MN     g ! , (       d  f       M`  = f)Ni   rt   )r|   assertRaisesOverflowErrorr   r   r:   r   )r-   r   s     r   test_tcpserver_bind_leak)SocketServerTest.test_tcpserver_bind_leak  sM    
 tA""=1&&bz'3'H'HJ 21 11s   ,A
A,	c                     [         R                  " [        S4[         R                  5       n S S S 5        U R	                  SWR
                  R                  5       5        g ! , (       d  f       N9= f)Nr   rt   )r   r   r:   r   rb   r8   r   )r-   rh   s     r   test_context_manager%SocketServerTest.test_context_manager  sX    ##T1I$0$E$EGJPG 	V]]1134G Gs   A!!
A/r)   N) rL   rM   rN   rO   r.   r5   r>   rj   r   reap_threadsr   r   r   r   r   requires_forkingr   requires_unix_socketsr   r   r   r   r   r   r   r   r   r   r   r   r   rP   rK   r   r   r%   r%   >   s)    * "" " # "D,	,-
-
 1 1 - -
 - -
 1  1,
,
 0 0 , ,
 , ,
 ,  ,
 "" #2J5r   r%   c                   X    \ rS rSrS rS rS rS rS r\	S 5       r
\	S 5       rS	 rS
rg)ErrorHandlerTesti!  c                 L    [         R                  " [         R                  5        g r1   )r   unlinkTESTFNr,   s    r   r5   ErrorHandlerTest.tearDown&  s    ))*r   c                 @    [        [        5        U R                  SS9  g NThandled)BaseErrorTestServer
ValueErrorcheck_resultr,   s    r   test_sync_handled"ErrorHandlerTest.test_sync_handled)  s    J'$'r   c                     U R                  [        5         [        [        5        S S S 5        U R                  SS9  g ! , (       d  f       N= fNFr   )r   
SystemExitr   r  r,   s    r   test_sync_not_handled&ErrorHandlerTest.test_sync_not_handled-  s7    z*
+ +%( +*s	   >
Ac                 @    [        [        5        U R                  SS9  g r   )ThreadingErrorTestServerr   r  r,   s    r   test_threading_handled'ErrorHandlerTest.test_threading_handled2  s     ,$'r   c                     [         R                  " 5        n[        [        5        U R	                  SS9  U R                  UR                  [        5        S S S 5        g ! , (       d  f       g = fr  )r   catch_threading_exceptionr
  r  r  assertIsexc_type)r-   cms     r   test_threading_not_handled+ErrorHandlerTest.test_threading_not_handled6  sG    779R$Z0e,MM"++z2	 :99s   ?A
A,c                 @    [        [        5        U R                  SS9  g r   )ForkingErrorTestServerr   r  r,   s    r   test_forking_handled%ErrorHandlerTest.test_forking_handled=  s    z*$'r   c                 @    [        [        5        U R                  SS9  g r  )r  r  r  r,   s    r   test_forking_not_handled)ErrorHandlerTest.test_forking_not_handledB  s    z*%(r   c                     [        [        R                  5       nSSU-  -   nU R                  UR	                  5       U5        S S S 5        g ! , (       d  f       g = f)NHandler called
Error handled
)openr   r   rb   read)r-   r   logexpecteds       r   r  ErrorHandlerTest.check_resultG  sD    )""#s),=,GGHSXXZ2 $##s   )A
ArK   N)rL   rM   rN   rO   r5   r  r  r  r  r   r  r  r  rP   rK   r   r   r   r   !  sH    
+()
(3 ( ( ) )3r   r   c                   4   ^  \ rS rSrU 4S jrS rS rSrU =r$ )r   iM  c                 H  > Xl         [        TU ]	  [        S4[        5        [
        R                  " U R                  5          S S S 5         U R                  5         U R                  5         U R                  5         g ! , (       d  f       N@= f! U R                  5         f = fr(   )	exceptionsuper__init__r:   
BadHandlerr8   create_connectionrc   handle_requestr   	wait_done)r-   r%  	__class__s     r   r'  BaseErrorTestServer.__init__N  sv    "$J/%%d&9&9: ;	 ! ;:
 s   A>B >
BB!c                     [        [        R                  S5       nUR                  S5        S S S 5        g ! , (       d  f       g = f)Nar  )r  r   r   rY   )r-   rG   rH   r   s       r   rI    BaseErrorTestServer.handle_errorY  s-    )""C(CII'( )((s	   6
Ac                     g r1   rK   r,   s    r   r+  BaseErrorTestServer.wait_done]  s    r   )r%  )	rL   rM   rN   rO   r'  rI   r+  rP   __classcell__r,  s   @r   r   r   M  s    	) r   r   c                       \ rS rSrS rSrg)r(  ia  c                     [        [        R                  S5       nUR                  S5        S S S 5        U R                  R                  S5      e! , (       d  f       N)= f)Nr/  r  z
Test error)r  r   r   rY   rh   r%  )r-   r   s     r   r[   BadHandler.handleb  sD    )""C(CII() )kk##L11 )(s   A
ArK   Nr]   rK   r   r   r(  r(  a  s    2r   r(  c                   :   ^  \ rS rSrU 4S jrU 4S jrS rSrU =r$ )r
  ih  c                 Z   > [         R                  " 5       U l        [        TU ]  " U0 UD6  g r1   )rw   Eventru   r&  r'  r-   poskwr,  s      r   r'  !ThreadingErrorTestServer.__init__j  s#    OO%	#$$r   c                 Z   > [         TU ]  " U0 UD6  U R                  R                  5         g r1   )r&  shutdown_requestru   setr;  s      r   r@  )ThreadingErrorTestServer.shutdown_requestn  s"     #,,		r   c                 8    U R                   R                  5         g r1   )ru   waitr,   s    r   r+  "ThreadingErrorTestServer.wait_doner  s    		r   )ru   )	rL   rM   rN   rO   r'  r@  r+  rP   r3  r4  s   @r   r
  r
  h  s    % r   r
  c                       \ rS rSrSrg)r  iw  rK   Nr   rK   r   r   r  r  w  s    r   r  c                        \ rS rSrS rS rSrg)SocketWriterTesti{  c                 P    " S S[         R                  5      n[         R                  " [        S4U5      nU R	                  UR
                  5        [        R                  " UR                  [        R                  [        R                  5      nU   UR                  UR                  5        S S S 5        UR                  5         U R                  UR                  [        R                   5        U R#                  UR$                  UR&                  5        g ! , (       d  f       No= f)Nc                       \ rS rSrS rSrg)-SocketWriterTest.test_basics.<locals>.Handleri}  c                     U R                   U R                  l         U R                   R                  5       U R                  l        U R                  R                  5       U R                  l        g r1   )rX   rh   r   wfile_filenorG   request_filenor,   s    r   r[   4SocketWriterTest.test_basics.<locals>.Handler.handle~  sD    $(JJ!+/::+<+<+>(-1\\-@-@-B*r   rK   Nr]   rK   r   r   HandlerrK  }  s    Cr   rP  r   )r   r   r   r:   
addCleanupr   r8   rv   r   IPPROTO_TCPr   rc   r*  assertIsInstancerX   ioBufferedIOBaserb   rM  rN  )r-   rP  rh   r   s       r   test_basicsSocketWriterTest.test_basics|  s    	Cl77 	C ''q	7;++,MM!!6#5#5v7I7IKIIf++, fllB,=,=>,,f.C.CD	 Qs   D
D%c                   ^^^^	^
^ [         R                  R                  [        S5      m " S S[        R
                  5      n[        R                  " [        S4U5      mU R                  TR                  5        [        R                  " 5       mU4S jn[        R                  " [        R                  U5      nU R                  [        R                  [        R                  U5        S m
S m	[        R                  " 5       mUUUU	U
U4S jn[        R                  " US9nUR                  5         TR!                  5         UR#                  5         U R%                  TR&                  [)        T
5      5        U R%                  T
S5        U R%                  TR*                  S	5        U R%                  TR,                  [         R                  R.                  5        U R%                  T	[         R                  R.                  S
-
  5        g )Npthread_killc                       \ rS rSrS rSrg),SocketWriterTest.test_write.<locals>.Handleri  c                 8   U R                   R                  S5      U R                  l        U R                  R                  5       U R                  l        S[        R                  R                  -  nU R                   R                  U5      U R                  l
        g )N   write data
    )rX   rY   rh   sent1rV   rW   receivedr   r   SOCK_MAX_SIZEsent2)r-   	big_chunks     r   r[   3SocketWriterTest.test_write.<locals>.Handler.handle  se    $(JJ$4$4_$E!'+zz':':'<$!DLL$>$>>	$(JJ$4$4Y$?!r   rK   Nr]   rK   r   r   rP  r[    s    @r   rP  r   c                 &   > TR                  5         g r1   )rA  )signumframeinterrupteds     r   signal_handler3SocketWriterTest.test_write.<locals>.signal_handler  s    OOr   c                  L  > [         R                   " TR                  [         R                  [         R                  5      n U    U R	                  S5       nU R                  TR                  5        UR                  5       mU R                  S5        UR                  S5         T" T[        R                  5        TR                  [        S5      S9(       a  OM7  [        UR                  5       5      mS S S 5        S S S 5        g ! , (       d  f       N= f! , (       d  f       g = f)Nrb   client response
r      )r   )r8   rv   r   rR  makefiler   rc   rW   r   r  signalSIGUSR1rD  floatlen)r   readerrh  main_threadrY  	received2	response1rh   s     r   
run_client/SocketWriterTest.test_write.<locals>.run_client  s    f33V5G5G""$AAJJt$		&//0"OO-			./C   fnn="''a'9 
  .	# %$$s%   DBD3D
D	D
D#)rq   r]  rm  r   )r   r   get_attributerp  r   r   r   r:   rQ  r   rw   r:  rq  	get_identrx   r{   r*  r~   rb   r_  rs  r`  rb  ra  )r-   rP  ri  originalrx  
backgroundrh  ru  rY  rv  rw  rh   s         @@@@@@r   
test_writeSocketWriterTest.test_write  sh    ||11&.I	@l77 	@ ''q	7;++,oo'	 ==@v~~x@		))+	/ 	/, %%Z8
s9~6O4*>?t||'A'ABDLL$>$>$DEr   rK   N)rL   rM   rN   rO   rV  r~  rP   rK   r   r   rH  rH  {  s    E"8Fr   rH  c                   &    \ rS rSrS rS rS rSrg)MiscTestCasei  c                    / n[        [        5       HO  nUR                  S5      (       a  M  [        [        U5      n[        USS 5      S:X  d  M>  UR	                  U5        MQ     U R                  [        R                  U5        g )N_rM   r   )dirr   
startswithgetattrr<   assertCountEqual__all__)r-   r!  rp   
mod_objects       r   test_allMiscTestCase.test_all  sf    %D??3''$\48
:|T:nLOOD)	 &
 	l22H=r   c                     " S S[         R                  5      nU" [        S4[         R                  5      n[        R                  " UR
                  [        R                  5      nUR                  UR                  5        UR                  5         UR                  5         U R                  UR                  S5        UR                  5         g )Nc                   $    \ rS rSrS rSrS rSrg)SMiscTestCase.test_shutdown_request_called_if_verify_request_false.<locals>.MyServeri  c                     g)NFrK   rF   s      r   verify_requestbMiscTestCase.test_shutdown_request_called_if_verify_request_false.<locals>.MyServer.verify_request  s    r   r   c                 l    U =R                   S-  sl         [        R                  R                  X5        g )Nrn  )shutdown_calledr   r   r@  )r-   rG   s     r   r@  dMiscTestCase.test_shutdown_request_called_if_verify_request_false.<locals>.MyServer.shutdown_request  s'    $$)$&&77Fr   rK   N)rL   rM   rN   rO   r  r  r@  rP   rK   r   r   rQ   r    s      OGr   rQ   r   rn  )r   r   r:   r   r8   rv   r   r   rc   closer*  rb   r  r   )r-   rQ   rh   r   s       r   4test_shutdown_request_called_if_verify_request_falseAMiscTestCase.test_shutdown_request_called_if_verify_request_false  s    	G|-- 	G 4)\%F%FGMM&//1C1CD			&''(		//3r   c                     " S S[         R                  [         R                  5      nU" [        S4[         R                  5      n[        S5       H<  n[        R                  " UR                  5         UR                  5         S S S 5        M>     U R                  [        UR                  5      S5        UR                  5         g ! , (       d  f       M  = f)Nc                       \ rS rSrSrg)2MiscTestCase.test_threads_reaped.<locals>.MyServeri  rK   Nr   rK   r   r   rQ   r    r   r   rQ   r   
   )r   r   r   r:   r   r|   r8   r)  rc   r*  
assertLessrs  _threadsr   )r-   rQ   rh   r   s       r   test_threads_reaped MiscTestCase.test_threads_reaped  s    	|22L4J4J 	 4)\%F%FGrA))&*?*?@%%' A@  	FOO,b1 A@s   4C
C	rK   N)rL   rM   rN   rO   r  r  r  rP   rK   r   r   r  r    s    >*r   r  __main__)1
contextlibrT  r   selectrp  r8   rw   unittestr   test.supportr   r   r   r   r   r   r   requiresrequires_working_socketr   r:   hasattrr   
skipUnlessr   has_fork_supportr   r   r   SHORT_TIMEOUTr   requires_forkcontextmanagerr#   TestCaser%   r   r   r   BaseRequestHandlerr(  r   r
  r   r  rH  r  rL   mainrK   r   r   <module>r     s  
  	 	        / " & )   i    $ $D $ 1 FI.  ++,=,CE ||,,&&|5GH  }}!\\77 8 4  4`5x(( `5F)3x(( )3X,00 (200 2|:: !:!:<O JFx(( JFZ/8$$ /d zMMO r   