+
    BiH                     2   ^ RI t ^ RIt^ RIt^ RIt^ RIt^ RIt^ RIt^ RIt^ RIt^ RI	t	^ RI
t
^ RIt^ RIt^ RIHt ^ RIHt ^ RIHt Rt] P&                  R 4       t]P*                  ! ]! ]R4      R4       ! R	 R
]P.                  4      4       t]P*                  ! ]! ]R4      R4       ! R R]4      4       t]P*                  ! ]! ]R4      R4       ! R R]4      4       t]P*                  ! ]! ]R4      R4       ! R R]4      4       t]P*                  ! ]! ]R4      R4      ]P*                  ! ]! ]R4      R4       ! R R]4      4       4       t]P*                  ! ]! ]R4      R4       ! R R]4      4       t ! R R]4      t]R8X  d   ]P@                  ! 4        R# R# )    N)support)	os_helper)socket_helperg{Gz?c              #      "   T ;_uu_ 4         V x   R R R 4       R #    T P                  4        h ; i  + '       g   i     R # ; i5iN)kill)procs   &'/usr/lib/python3.14/test/_test_eintr.pykill_on_errorr   #   s9      
	J 
	IIK 
s$   A4
A14A		A	setitimerzrequires setitimer()c                   Z   a  ] tR t^.t o RtRtRtR tR t]	R 4       t
R tR tR tR	tV tR
# )EINTRBaseTestg?g?c                8    V ;P                   ^,          un         R# )   N)signals)selfsignumframes   &&&r
   
sighandlerEINTRBaseTest.sighandler:   s        c                >   ^ V n         \        P                  ! \        P                  V P                  4      V n        \        P
                  ! \        P                  V P                  V P                  4       \        P                  ! RR\        P                  R7       R# )r   T)exitfileNiX  )r   signalSIGALRMr   orig_handlerr   ITIMER_REALsignal_delaysignal_periodfaulthandlerdump_traceback_latersys
__stderr__r   s   &r
   setUpEINTRBaseTest.setUp=   sf    "MM&..$//J++T->->++	-
 	))'/2~~	?r   c                 R    \         P                  ! \         P                  ^ ^ 4       R# )r   N)r   r   r    r   r
   
stop_alarmEINTRBaseTest.stop_alarmH   s    ++Q2r   c                    V P                  4        \        P                  ! \        P                  V P                  4       \        P
                  ! 4        R # r   )r*   r   r   r   r!   cancel_dump_traceback_laterr%   s   &r
   tearDownEINTRBaseTest.tearDownL   s0    fnnd&7&78002r   c                b    \         P                  R 3V,           p\        P                  ! V3/ VB # )z-c)r#   
executable
subprocessPopen)r   argskwcmd_argss   &*, r
   r2   EINTRBaseTest.subprocessQ   s+    NND)D0/B//r   c                R    V P                  WP                  \        ,
          4       R # r   )assertGreaterEqual
sleep_time	CLOCK_RES)r   elapseds   &&r
   check_elapsed_time EINTRBaseTest.check_elapsed_timeU   s    9)DEr   )r   r   N)__name__
__module____qualname____firstlineno__r   r    r:   r   r&   staticmethodr*   r.   r2   r=   __static_attributes____classdictcell____classdict__s   @r
   r   r   .   sL     
 LM J	? 3 33
0F Fr   r   c                      a  ] tR t^Yt o R tR tR t]P                  ! ]	! ]
R4      R4      R 4       tR tR t]P                  ! ]	! ]
R	4      R
4      R 4       tR tR tR tR tRtV tR# )OSEINTRTestc                F    R V P                   : R2pV P                  V4      # )zimport time; time.sleep())r:   r2   )r   codes   & r
   new_sleep_processOSEINTRTest.new_sleep_process]   s$    )$//)<A>t$$r   c                    ^p\        V4       Uu. uF  q0P                  4       NK  	  pp\        V4       F
  pV! 4        K  	  V F  pVP                  4        K  	  R# u upi )   N)rangerM   wait)r   	wait_funcnum_	processesr	   s   &&    r
   _test_wait_multipleOSEINTRTest._test_wait_multiplea   sT    7<SzBz!++-z	BsAK  DIIK 	 Cs   Ac                D    V P                  \        P                  4       R # r   )rW   osrR   r%   s   &r
   	test_waitOSEINTRTest.test_waitj   s      )r   wait3zrequires wait3()c                *    V P                  R  4       R# )c                  .    \         P                  ! ^ 4      # r   )rZ   r]   r)   r   r
   <lambda>(OSEINTRTest.test_wait3.<locals>.<lambda>o   s    !r   N)rW   r%   s   &r
   
test_wait3OSEINTRTest.test_wait3m   s      !45r   c                j    V P                  4       pV! VP                  4       VP                  4        R # r   )rM   pidrR   )r   rS   r	   s   && r
   _test_wait_singleOSEINTRTest._test_wait_singleq   s%    %%'$((		r   c                *    V P                  R  4       R# )c                 0    \         P                  ! V ^ 4      # r`   )rZ   waitpidrf   s   &r
   ra   *OSEINTRTest.test_waitpid.<locals>.<lambda>x   s    2::c1+=r   Nrg   r%   s   &r
   test_waitpidOSEINTRTest.test_waitpidw   s    =>r   wait4zrequires wait4()c                *    V P                  R  4       R# )c                 0    \         P                  ! V ^ 4      # r`   )rZ   rq   rl   s   &r
   ra   (OSEINTRTest.test_wait4.<locals>.<lambda>|   s    288C+;r   Nrn   r%   s   &r
   
test_wait4OSEINTRTest.test_wait4z   s    ;<r   c              #    "   \         P                  ! 4       w  rV P                  \         P                  V4       . ROpRP	                  RRRRV: 2RV P
                  : 2RRRR	R
3
4      pV P                  V\        V4      V.R7      p\        V4      ;_uu_ 4        \         P                  ! V4       V F  pW3x  K
  	  V P                  VP                  4       ^ 4       RRR4       R#   + '       g   i     R# ; i5i)   hello
zimport os, sys, time zwr = int(sys.argv[1])data = sleep_time = zfor item in data:z$    # let the parent block on read()    time.sleep(sleep_time)z    os.write(wr, item)pass_fdsN)rx   s   worlds   spam)rZ   pipe
addCleanupclosejoinr:   r2   strr   assertEqualrR   )r   rdwrdatarL   r	   datums   &      r
   _interrupted_readsOSEINTRTest._interrupted_reads~   s     "%
 -yy"#dXDOO./2($
  tSWt<4  HHRLi TYY[!,	 !   s   BC?AC+!
C?+C<	6	C?c           
         V P                  4        F5  w  rV P                  V\        P                  ! V\	        V4      4      4       K7  	  R # r   )r   r   rZ   readlen)r   fdexpecteds   &  r
   	test_readOSEINTRTest.test_read   s6     335LBXrwwr3x='AB 6r   c                    V P                  4        FY  w  r\        \        V4      4      pV P                  \        P
                  ! W4      \        V4      4       V P                  W24       K[  	  R # r   )r   	bytearrayr   r   rZ   readinto)r   r   r   buffers   &   r
   test_readintoOSEINTRTest.test_readinto   sP     335LBs8}-FR[[4c(mDV. 6r   c                   \         P                  ! 4       w  rV P                  \         P                  V4       R \        P
                  ,          pRP                  RRRRV P                  : 2R\        P
                   2RRRR	RR
RRRRRRR34      pV P                  V\        V4      V.R7      p\        V4      ;_uu_ 4        \         P                  ! V4       ^ pV\        V4      8  d-   V\         P                  ! V\        V4      VR 4      ,          pK<  V P                  VP                  4       ^ 4       RRR4       R#   + '       g   i     R# ; i)   xry   zimport io, os, sys, timerz   zrd = int(sys.argv[1])r|   zdata = b"x" * data_len = len(data)z!# let the parent block on write()time.sleep(sleep_time)zread_data = io.BytesIO()z+while len(read_data.getvalue()) < data_len:z%    chunk = os.read(rd, 2 * data_len)z    read_data.write(chunk)zvalue = read_data.getvalue()zif value != data:zD    raise Exception(f"read error: {len(value)} vs {data_len} bytes")r~   N)rZ   r   r   r   r   PIPE_MAX_SIZEr   r:   r2   r   r   r   write
memoryviewr   rR   )r   r   r   r   rL   r	   writtens   &      r
   
test_writeOSEINTRTest.test_write   s!   "% g+++yy&#DOO./W2234"/$&93(*;%
 , tSWt<4  HHRLGCI%288B
4(8(BCCTYY[!, !   s   A5EE	r)   N)r?   r@   rA   rB   rM   rW   r[   unittest
skipUnlesshasattrrZ   rc   rg   ro   ru   r   r   r   r   rD   rE   rF   s   @r
   rI   rI   Y   s     %* W-/AB6 C6? W-/AB= C=-<C/$- $-r   rI   c                     a  ] tR t^t o ]P
                  ! ]! ]R4      R4      R 4       tR t	]P
                  ! ]! ]P                  R4      R4      R 4       t
R tR	 tR
 t]P
                  ! ]! ]P                  R4      R4      R 4       tR t]P"                  ! ^
^4      ]P
                  ! ]! ]R4      R4      R 4       4       tR t]P*                  ! ]P.                  R8H  R4      R 4       tR t]P*                  ! ]P.                  R8H  R4      ]P*                  ! ]P.                  P5                  R4      R4      R 4       4       tRtV tR# )SocketEINTRTest
socketpairzneeds socketpair()c                   \         P                  ! 4       w  r#V P                  VP                  4       . ROpRP	                  RRRR\        VP                  4       2R\        VP                  4       2RV: 2RV P                  : 2RR	R
RRRRRR34      pVP                  4       pV P                  V\        V4      V.R7      p\        V4      ;_uu_ 4        VP                  4        V F$  pV P                  W! V\        V4      4      4       K&  	  V P                  VP                  4       ^ 4       RRR4       R#   + '       g   i     R# ; i)r   ry   import os, socket, sys, timerz   fd = int(sys.argv[1])	family = sock_type = r{   r|   z)wr = socket.fromfd(fd, family, sock_type)os.close(fd)zwith wr:z    for item in data:z(        # let the parent block on recv()z        time.sleep(sleep_time)z        wr.sendall(item)r~   N)r      y   z)socketr   r   r   r   intfamilytyper:   filenor2   r   r   r   r   rR   )	r   	recv_funcr   r   r   rL   r   r	   items	   &&       r
   
_test_recvSocketEINTRTest._test_recv   s#   ""$! "yy*#BII'(3rww<.)dXDOO./7#6,&!
 & YY[tSWt<4  HHJ  ySY'?@ TYY[!,	 !   s   AD<<E	c                X    V P                  \        P                  P                  4       R # r   )r   r   recvr%   s   &r
   	test_recvSocketEINTRTest.test_recv       **+r   recvmsgzneeds recvmsg()c                *    V P                  R  4       R# )c                 2    V P                  V4      ^ ,          # r`   )r   sockr   s   &&r
   ra   .SocketEINTRTest.test_recvmsg.<locals>.<lambda>   s    4<<+=a+@r   N)r   r%   s   &r
   test_recvmsgSocketEINTRTest.test_recvmsg   s    @Ar   c                6   \         P                  ! 4       w  r#V P                  VP                  4       R \        P
                  ^,          ,          pRP                  RRRR\        VP                  4       2R\        VP                  4       2RV P                  : 2R\        P
                  ^,           2R	RR
RRRRRRRRRRRRR34      pVP                  4       pV P                  V\        V4      V.R7      p\        V4      ;_uu_ 4        VP                  4        ^ pV\        V4      8  d/   V! V\!        V4      VR 4      p	Yf   \        V4      MT	,          pK>  V P#                  VP%                  4       ^ 4       RRR4       R#   + '       g   i     R# ; i)s   xyzry   r   rz   r   r   r   r|   zdata = b"xyz" * r   z)rd = socket.fromfd(fd, family, sock_type)r   zwith rd:z$    # let the parent block on send()r}   z'    received_data = bytearray(data_len)z	    n = 0z    while n < data_len:z8        n += rd.recv_into(memoryview(received_data)[n:])zif received_data != data:zL    raise Exception(f"recv error: {len(received_data)} vs {data_len} bytes")r~   N)r   r   r   r   r   SOCK_MAX_SIZEr   r   r   r   r:   r   r2   r   r   r   r   r   rR   )
r   	send_funcr   r   r   rL   r   r	   r   sents
   &&        r
   
_test_sendSocketEINTRTest._test_send   sl   ""$! ..!34yy*#BII'(3rww<.)DOO./w449:;"72(5%F';/
 6 YY[tSWt<4  HHJGCI% Z%5gh%?@3t9$>TYY[!, !   s   A1FF	c                X    V P                  \        P                  P                  4       R # r   )r   r   sendr%   s   &r
   	test_sendSocketEINTRTest.test_send*  r   r   c                X    V P                  \        P                  P                  4       R # r   )r   r   sendallr%   s   &r
   test_sendallSocketEINTRTest.test_sendall-  s    --.r   sendmsgzneeds sendmsg()c                *    V P                  R  4       R# )c                 &    V P                  V.4      # r   )r   r   s   &&r
   ra   .SocketEINTRTest.test_sendmsg.<locals>.<lambda>2  s    4<<+?r   N)r   r%   s   &r
   test_sendmsgSocketEINTRTest.test_sendmsg0  s    ?@r   c                8   \         P                  ! \        P                  ^ 34      pV P	                  VP
                  4       VP                  4       ^,          pRP                  RRR\        P                  : 2RV 2RV P                  : 2RRRR	R
3
4      pV P                  V4      p\        V4      ;_uu_ 4        VP                  4       w  rVVP                  4        V P                  VP                  4       ^ 4       RRR4       R#   + '       g   i     R# ; i)r   ry   zimport socket, timerz   zhost = zport = r|   z# let parent block on accept()r   z,with socket.create_connection((host, port)):r}   N)r   create_serverr   HOSTr   r   getsocknamer   r:   r2   r   acceptr   rR   )r   r   portrL   r	   client_sockrU   s   &      r
   test_acceptSocketEINTRTest.test_accept4  s    ##]%7%7$;<

#!!$yy!m((+,dVDOO./,$:(
  t$4  ![[]NKTYY[!, !   s   ;ADD	mkfifozneeds mkfifo()c                D   \         P                  p\         P                  ! V4        \        P                  ! V4       V P                  \         P                  V4       RP                  RRRV: 2RV P                  : 2RRRRV3	4      pV P                  V4      p\        V4      ;_uu_ 4        V! V4       V P                  VP                  4       ^ 4       RRR4       R#   \
         d    pT P                  R T: 24        Rp?LRp?ii ; i  + '       g   i     R# ; i)	zos.mkfifo(): Nry   import os, timerz   zpath = r|   z# let the parent blockr   )r   TESTFNunlinkrZ   r   PermissionErrorskipTestr   r   r:   r2   r   r   rR   )r   do_open_close_readerdo_open_close_writerfilenameexcrL   r	   s   &&&    r
   
_test_openSocketEINTRTest._test_openP  s     ## 	"	3IIh 		(((3yyh\"DOO./$$ 

 
 t$4   *TYY[!, ! #  	3MMM#122	3" !  s#   C! .)D!D,DDD	c                >    \        VR 4      pVP                  4        R# )wN)openr   )r   pathfps   && r
   python_openSocketEINTRTest.python_openo  s    $_

r   darwinz+hangs under macOS; see bpo-25234, bpo-35363c                >    V P                  R V P                  4       R# )zfp = open(path, 'r')
fp.close()N)r   r   r%   s   &r
   	test_openSocketEINTRTest.test_opens  s     	:((	*r   c                |    \         P                  ! V\         P                  4      p\         P                  ! V4       R # r   )rZ   r   O_WRONLYr   )r   r   r   s   && r
   os_openSocketEINTRTest.os_openy  s!    WWT2;;'
r   netbsdzhangs on NetBSD; see gh-137397c                >    V P                  R V P                  4       R# )z,fd = os.open(path, os.O_RDONLY)
os.close(fd)N)r   r   r%   s   &r
   test_os_openSocketEINTRTest.test_os_open}  s    
 	G	&r   r)   N)r?   r@   rA   rB   r   r   r   r   r   r   r   r   r   r   r   r   r   requires_freebsd_versionrZ   r   r   skipIfr#   platformr   r   
startswithr  rD   rE   rF   s   @r
   r   r      sr     68LM!- N!-F, 	:<MNB OB,-\,/ 	:<MNA OA-8 %%b!,X.0@A- B --: __S\\X-BD*D* __S\\X-BD__S\\,,X657&7D&r   r   c                   &   a  ] tR tRt o R tRtV tR# )TimeEINTRTesti  c                    \         P                  ! 4       p\         P                  ! V P                  4       V P	                  4        \         P                  ! 4       V,
          pV P                  V4       R # r   )time	monotonicsleepr:   r*   r=   r   t0dts   &  r
   
test_sleepTimeEINTRTest.test_sleep  sG    ^^

4??#^^"#r   r)   N)r?   r@   rA   rB   r  rD   rE   rF   s   @r
   r	  r	    s     $ $r   r	  pthread_sigmaskzneed signal.pthread_sigmask()c                      a  ] tR tRt o R t]P                  ! ]! ]R4      R4      R 4       t	]P                  ! ]! ]R4      R4      R 4       t
RtV tR	# )
SignalEINTRTesti  c                   \         P                  p\         P                   ! VR  4      pV P                  \         P                   W#4       RP                  RR\        P
                  ! 4        2R\        V4       2RV P                  : 2RR34      p\         P                  ! \         P                  V.4       V P                  \         P                  \         P                  V.4       V P                  V4      p\        V4      ;_uu_ 4        V! V4       RRR4       V P                  VP                  4       ^ 4       R#   + '       g   i     L2; i)	c                      R # r   r)   )r4   s   *r
   ra   /SignalEINTRTest.check_sigwait.<locals>.<lambda>  s    $r   ry   r   zpid = z	signum = r|   r   zos.kill(pid, signum)N)r   SIGUSR1r   r   rZ   getpidr   r:   r  	SIG_BLOCKSIG_UNBLOCKr2   r   r   rR   )r   rS   r   old_handlerrL   r	   s   &&    r
   check_sigwaitSignalEINTRTest.check_sigwait  s    mmF,>?v;yyRYY[M"F}%DOO./$"
  	v//&:..0B0BVHMt$4  f ! 	a( ! s   
	D==E	sigwaitinfozneed signal.sigwaitinfo()c                .    R  pV P                  V4       R# )c                 4    \         P                  ! V .4       R # r   )r   r   r   s   &r
   rS   3SignalEINTRTest.test_sigwaitinfo.<locals>.wait_func  s    x(r   Nr  r   rS   s   & r
   test_sigwaitinfo SignalEINTRTest.test_sigwaitinfo  s    	) 	9%r   sigtimedwaitc                .    R  pV P                  V4       R# )c                 6    \         P                  ! V .R 4       R# )g      ^@N)r   r)  r#  s   &r
   rS   4SignalEINTRTest.test_sigtimedwait.<locals>.wait_func  s    %0r   Nr%  r&  s   & r
   test_sigtimedwait!SignalEINTRTest.test_sigtimedwait  s    	1 	9%r   r)   N)r?   r@   rA   rB   r  r   r   r   r   r'  r-  rD   rE   rF   s   @r
   r  r    s`     )0 746&6& 846&6&r   r  c                   l  a  ] tR tRt o R t]P                  ! ]P                  R8H  R4      ]P                  ! ]
! ]R4      R4      R 4       4       t]P                  ! ]
! ]R4      R	4      R
 4       t]P                  ! ]
! ]R4      R4      R 4       t]P                  ! ]
! ]R4      R4      R 4       tRtV tR# )SelectEINTRTesti  c                    \         P                  ! 4       p\        P                  ! . . . V P                  4       \         P                  ! 4       V,
          pV P	                  4        V P                  V4       R # r   )r  r  selectr:   r*   r=   r  s   &  r
   test_selectSelectEINTRTest.test_select  sM    ^^b"b$//2^^"#r   r   z(poll may fail on macOS; see issue #28087pollzneed select.pollc                   \         P                  ! 4       p\        P                  ! 4       pVP                  V P                  R ,          4       \        P                  ! 4       V,
          pV P                  4        V P                  V4       R# g     @@N)r2  r5  r  r  r:   r*   r=   r   pollerr  r  s   &   r
   	test_pollSelectEINTRTest.test_poll  sY     ^^DOOc)*^^"#r   epollzneed select.epollc                @   \         P                  ! 4       pV P                  VP                  4       \        P
                  ! 4       pVP                  V P                  4       \        P
                  ! 4       V,
          pV P                  4        V P                  V4       R # r   )
r2  r<  r   r   r  r  r5  r:   r*   r=   r8  s   &   r
   
test_epollSelectEINTRTest.test_epoll  sb    %^^DOO$^^"#r   kqueuezneed select.kqueuec                D   \         P                  ! 4       pV P                  VP                  4       \        P
                  ! 4       pVP                  R ^V P                  4       \        P
                  ! 4       V,
          pV P                  4        V P                  V4       R # r   )
r2  r@  r   r   r  r  controlr:   r*   r=   )r   r@  r  r  s   &   r
   test_kqueueSelectEINTRTest.test_kqueue  sf    %^^tQ0^^"#r   devpollzneed select.devpollc                N   \         P                  ! 4       pV P                  VP                  4       \        P
                  ! 4       pVP                  V P                  R ,          4       \        P
                  ! 4       V,
          pV P                  4        V P                  V4       R# r7  )
r2  rE  r   r   r  r  r5  r:   r*   r=   r8  s   &   r
   test_devpollSelectEINTRTest.test_devpoll  sh    !%^^DOOc)*^^"#r   r)   N)r?   r@   rA   rB   r3  r   r  r#   r  r   r   r2  r:  r>  rC  rG  rD   rE   rF   s   @r
   r0  r0    s     $ __S\\X-?A02DE$ FA$ 13FG$ H$ 24HI$ J$ 35JK$ L$r   r0  c                      a  ] tR tRt o R t]P                  ! ]P                  ! 4       R8H  R4      R 4       t	R t
RtV tR# )	FCNTLEINTRTesti  c                   V P                  \        P                  \        P                  4       \        P
                  ! 4       w  r4\        P
                  ! 4       w  rVW4WV3 F#  pV P                  \        P                  V4       K%  	  \        P                  ! R \        P                   RV RV RV RV P                   R24      pV P                  WV.R7      p	\        V	4      ;_uu_ 4        \        \        P                  R4      ;_uu_ 4       p
\        P                  ! V^4      pV P                  VR4       \        P                   ! 4       p\        P"                  ! VR	4       V! V
\$        P&                  4       \        P                   ! 4       V,
          pV P)                  4        V P+                  V4       R
R
R
4       V	P-                  4        R
R
R
4       R
#   + '       g   i     L*; i  + '       g   i     R
# ; i)z;
            import fcntl, os, time
            with open('z%', 'wb') as f:
                fcntl.z,(f, fcntl.LOCK_EX)
                os.write(z%, b"ok")
                _ = os.read(z;, 2)  # wait for parent process
                time.sleep(z
)
        r~   wbs   oks   goN)r   r   r   r   rZ   r   r   textwrapdedentr:   r2   r   r   r   r   r  r  r   fcntlLOCK_EXr*   r=   rR   )r   	lock_func	lock_namerd1wr1rd2wr2r   rL   r	   fok
start_timer  s   &&&           r
   _lockFCNTLEINTRTest._lock  s   	(()*:*:;779779S&BOOBHHb) ' $!(() * k "  E " OO, -	   tCj94  i&&--WWS!_  U+ "^^-
e$
 !U]]+^^%
2!''+ .  IIK# ! -- !  s%   -#G/B*G	:G/G,'G//H 	AIXzAIX returns PermissionErrorc                F    V P                  \        P                  R 4       R# )lockfN)rZ  rO  r^  r%   s   &r
   
test_lockfFCNTLEINTRTest.test_lockf!  s    

5;;(r   c                F    V P                  \        P                  R 4       R# )flockN)rZ  rO  rb  r%   s   &r
   
test_flockFCNTLEINTRTest.test_flock%  s    

5;;(r   r)   N)r?   r@   rA   rB   rZ  r   r  r  systemr_  rc  rD   rE   rF   s   @r
   rJ  rJ    sB      H __X__&%/1NO) P)) )r   rJ  __main__)!
contextlibr!   rO  rZ   r  r2  r   r   r2   r#   rM  r  r   testr   test.supportr   r   r;   contextmanagerr   r   r   TestCaser   rI   r   r	  r  r0  rJ  r?   mainr)   r   r
   <module>rm     s      	      
     " &
 	   
WV[13IJ'FH%% 'F K'FT 
WV[13IJp-- p- Kp-f 
WV[13IJu&m u& Ku&p 
WV[13IJ$M $ K$ 
WV[13IJ 
WV%6746)&m )&6 K
)&X 
WV[13IJ5$m 5$ K5$p*)] *)Z zMMO r   