
    /g6h                        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  S SKJr  S SK	J
r  S SKJr  S SKJr  S SKJrJrJrJrJrJrJrJrJrJrJ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%J&r&J'r'J(r(J)r)  SSK*J+r+  SSK,J-r-J.r.  SSK/J0r0J1r1  SSK2J3r3  SSK4J5r5J6r6  SSK7J8r8  SSK9J:r:  SSK;J<r<J=r=  Sr>\(       a  SSK?J@r@  \\(\1S\ S/\:4   rA\\:/\\=   4   rB\(" SS\'0 0 SSSS\R                  " S5      5
      rD " S S\E5      rF " S S \E5      rG\G" 5       rH\R                  " SSSS!9 " S" S#5      5       rJ\\\(\J4   \14   rK " S$ S\"5      rLg)%    N)deque)suppress)escape)
HTTPStatus)Logger)TYPE_CHECKINGAny	AwaitableCallableDequeOptionalSequenceTupleTypeUnioncast   )AbstractAccessLoggerAbstractStreamWriter)BaseProtocol)ceil_timeout)HttpProcessingErrorHttpRequestParserHttpVersion10RawRequestMessageStreamWriter)BadHttpMethod)access_loggerserver_logger)EMPTY_PAYLOADStreamReader)tcp_keepalive)HTTPExceptionHTTPInternalServerError)AccessLogger)BaseRequest)ResponseStreamResponse)RequestHandlerRequestPayloadErrorPayloadAccessError)Serverr)   zasyncio.Task[None]UNKNOWN/TFc                       \ rS rSrSrSrg)r*   P   zPayload parsing error. N__name__
__module____qualname____firstlineno____doc____static_attributes__r1       YC:\Suresh\moveshuttle\MDcreated\moveengine\venv\Lib\site-packages\aiohttp/web_protocol.pyr*   r*   P   s     r9   r*   c                       \ rS rSrSrSrg)r+   T   z-Payload was accessed after response was sent.r1   Nr2   r1   r9   r:   r+   r+   T   s    7r9   r+   )auto_attribsfrozenslotsc                   4    \ rS rSr% \\S'   \\S'   \\S'   Srg)_ErrInfo[   statusexcmessager1   N)	r3   r4   r5   r6   int__annotations__BaseExceptionstrr8   r1   r9   r:   rA   rA   [   s    K	Lr9   rA   c            !         ^  \ rS rSrSrSrSS\\\\R                  SSSSS	S
SSS.SSS\
R                  S\S\S\S\\   S\S\S\S\S\S\S\S\S\S\4 U 4S jjjrS\4S  jr\S\4S! j5       rSGS"\\   SS#4S$ jjrS%\
R2                  SS#4U 4S& jjrS'\\   SS#4U 4S( jjrS)\SS#4S* jrSHS+ jrS,\ SS#4S- jr!S.\SS#4S/ jr"SHS0 jr#SHS1 jr$S2\%S3\&S4\SS#4S5 jr'S6\S7\SS#4S8 jr(S6\S7\SS#4S9 jr)SHS: jr*S2\%S;\S<\+\%/\,\&   4   S\-\&\4   4S= jr.SHS> jr/S2\%S?\&S;\S\-\&\4   4S@ jr0   SIS2\%SA\S'\\   SB\\   S\&4
SC jjr1SD\2S\+\%/\,\&   4   4SE jr3SFr4U =r5$ )Jr)   e   a  HTTP protocol implementation.

RequestHandler handles incoming HTTP request. It reads request line,
request headers and request payload and calls handle_request() method.
By default it always returns with 404 response.

RequestHandler handles errors in incoming request, like bad
status line, bad headers or incomplete payload. If any error occurs,
connection gets closed.

keepalive_timeout -- number of seconds before closing
                     keep-alive connection

tcp_keepalive -- TCP keep-alive is on, default is on

debug -- enable debug mode

logger -- custom logger object

access_log_class -- custom class for access_logger

access_log -- custom logging object

access_log_format -- access log format string

loop -- Optional event loop

max_line_size -- Optional maximum header line size

max_field_size -- Optional maximum header field size

max_headers -- Optional maximum header size

timeout_ceil_threshold -- Optional value to specify
                          threshold to ceil() timeout
                          values

)_request_count
_keepalive_manager_request_handler_request_factory_tcp_keepalive_next_keepalive_close_time_keepalive_handle_keepalive_timeout_lingering_time	_messages_message_tail_handler_waiter_waiter_task_handler_upgrade_payload_parser_request_parser_reading_pausedloggerdebug
access_logr   _close_force_close_current_request_timeout_ceil_threshold_request_in_progressi.  TFi  i   g      $@i      )keepalive_timeoutr"   r_   access_log_classra   access_log_formatr`   max_line_sizemax_headersmax_field_sizelingering_timeread_bufsizeauto_decompresstimeout_ceil_thresholdmanagerr,   looprh   r"   r_   ri   ra   rj   r`   rk   rl   rm   rn   ro   rp   rq   c                x  > [         TU ]  U5        SU l        SU l        S U l        Xl        UR                  U l        UR                  U l	        X@l
        SU l        S U l        X0l        [        U5      U l        [!        5       U l        SU l        S U l        S U l        S U l        SU l        S U l        [1        U UUU
UU[2        US9U l        SU l         [        U5      U l        XPl        Xl        Xpl         U(       a  U" Xx5      U l!        OS U l!        SU l"        SU l#        SU l$        g ! [8        [:        4 a     NVf = f)Nr   Fg        r9   )rk   rm   rl   payload_exceptionrp   rg   )%super__init__rL   rM   rd   rN   request_handlerrO   request_factoryrP   rQ   rR   rS   rT   floatrU   r   rV   rW   rY   rX   rZ   r[   r\   r   r*   r]   re   	TypeError
ValueErrorr_   r`   ra   r   rb   rc   rf   )selfrr   rs   rh   r"   r_   ri   ra   rj   r`   rk   rl   rm   rn   ro   rp   rq   	__class__s                    r:   rw   RequestHandler.__init__   sM   * 	  7;*1;B;R;R;B;R;R+*-';?"3$^4*/' 7;?C;?$(<M')#1+	=
 /0$	+01G+HD( 
$AQBD "&D!$)! :& 		s   D& &D98D9returnc                 t    SR                  U R                  R                  U R                  b  S5      $ S5      $ )Nz<{} {}>	connecteddisconnected)formatr~   r3   	transportr}   s    r:   __repr__RequestHandler.__repr__   s;    NN##>>5K
 	
;I
 	
r9   c                     U R                   $ N)rT   r   s    r:   rh    RequestHandler.keepalive_timeout   s    &&&r9   timeoutNc                 j  #    SU l         U R                  b  U R                  R                  5         U R                  (       aX  U R                  R                  5       U l         [        U5       ISh  vN   U R                  I Sh  vN   SSS5      ISh  vN    [        U5       ISh  vN   U R                  b.  U R                  R!                  [        R                  " 5       5        U R"                  bG  U R"                  R%                  5       (       d(  [        R&                  " U R"                  5      I Sh  vN   SSS5      ISh  vN   U R"                  b  U R"                  R                  5         U R)                  5         g GN GN N! , ISh  vN  (       d  f       GN= f! [        R                  [        R                  4 aQ    SU l        [        R                  S:  a2  [        R                  " 5       =n(       a  UR                  5       (       a  e  GNf = f GNw N N! , ISh  vN  (       d  f       N= f! [        R                  [        R                  4 aJ    [        R                  S:  a2  [        R                  " 5       =n(       a  UR                  5       (       a  e  GNaf = f7f)zDo worker process exit preparations.

We need to clean up everything and stop accepting requests.
It is especially important for keep-alive connections.
TN      )rc   rS   cancelrf   _loopcreate_futurerX   r   asyncioCancelledErrorTimeoutErrorsysversion_infocurrent_task
cancellingrd   _cancelrZ   doneshieldforce_close)r}   r   tasks      r:   shutdownRequestHandler.shutdown  s     !!!-""))+ $$ $(::#;#;#=D 
'00.... 10	#G,,((4))11'2H2H2JK%%1$:L:L:Q:Q:S:S!..););<<< -, )%%'= 1. 1000**G,@,@A '+$$$/!(!5!5!777)) -
 = -,,, &&(<(<= 	  G+$1133T3OO%%	s  AJ3"F) 1F2F) 5FF	F
F) FF) I *H!+I .BH(9H$:H(>I 	H&
I 8J3F) 	FF) F&FF&!F) $J3&F) )A1HJ3HJ3!I $H(&I (H?.H1/H?;I >J3?I A*J0,J3/J00J3r   c                   > [         TU ]  U5        [        [        R                  U5      nU R
                  (       a  [        U5        U R                  c   eU R                  R                  X5        U R                  n[        R                  S:  a%  [        R                  " U R                  5       USS9nOUR                  U R                  5       5      nX@l        g )Nr      Trs   eager_start)rv   connection_mader   r   	TransportrQ   r"   rN   r   r   r   Taskstartcreate_taskrZ   )r}   r   real_transportrs   r   r~   s        r:   r   RequestHandler.connection_made6  s    	*g//;.)}}(((%%d;zzw&<<

4TJD##DJJL1D!r9   rD   c                 |  > U R                   c  g U R                   R                  X5        U R                   R                  nU R                  5         [        TU ]  U5        S U l         S U l        S U l        S U l        U R                  b  U R                  R                  5         U R                  b)  Uc  [        S5      nU R                  R                  U5        U(       a'  U R                  b  U R                  R                  5         S U l        U R                  b"  U R                  R                  5         S U l        g g )NzConnection lost)rN   connection_losthandler_cancellationr   rv   rP   rO   r]   rS   r   rd   ConnectionResetErrorr   rZ   r\   feed_eof)r}   rD   r   r~   s      r:   r   RequestHandler.connection_lostG  s   == %%d0  $}}AA$ $ $#!!-""))+  ,{*+<=!!))#.D$6$6$B%%'!+  ))+#'D  ,r9   parserc                     U R                   b   eXl         U R                  (       a-  U R                   R                  U R                  5        SU l        g g )Nr9   )r\   rW   	feed_data)r}   r   s     r:   
set_parserRequestHandler.set_parserg  sJ    ##+++%  **4+=+=>!$D r9   c                     g r   r1   r   s    r:   eof_receivedRequestHandler.eof_receivedq  s    r9   datac                 |   U R                   (       d  U R                  (       a  g U R                  c  U R                  (       d  U R                  c   e U R                  R                  U5      u  p#nU=(       d    S H6  u  pgU =R                  S-  sl
        U R                  R                  Xg45        M8     U R                  nU(       a)  Ub&  UR                  5       (       d  UR                  S 5        X0l        U(       a  U(       a  X@l        g g g U R                  c.  U R                  (       a  U(       a  U =R                   U-  sl        g U(       a6  U R                  R                  U5      u  pU	(       a  U R#                  5         g g g ! [         a*  n[        SXUR                  S9[        4/nSnSn S nAGNFS nAff = f)Ni  )rC   rD   rE   Fr9   r1   r   )rc   rb   r\   r[   r]   r   r   rA   rE   r    rL   rV   appendrY   r   
set_resultrW   close)
r}   r   messagesupgradedtailrD   msgpayloadwaitereofs
             r:   data_receivedRequestHandler.data_receivedt  sg    '''333+/+?+?+I+I$+O(D !)B##q(#%%sn5 !/ \\FF.v{{}}!!$'$MD%)" !x !!)dmm$& ,,66t<IC

  3 ' Sc;;GW !s   F 
F;F66F;valc                 v    Xl         U R                  (       a"  U R                  R                  5         SU l        gg)z=Set keep-alive connection mode.

:param bool val: new state.
N)rM   rS   r   )r}   r   s     r:   
keep_aliveRequestHandler.keep_alive  s1    
 !!""))+%)D" "r9   c                 j    SU l         U R                  (       a  U R                  R                  5         gg)zwClose connection.

Stop accepting new pipelining messages and close
connection when handlers done processing messages.
TN)rb   rY   r   r   s    r:   r   RequestHandler.close  s'     <<LL! r9   c                     SU l         U R                  (       a  U R                  R                  5         U R                  b"  U R                  R	                  5         SU l        gg)zForcefully close connection.TN)rc   rY   r   r   r   r   s    r:   r   RequestHandler.force_close  sG     <<LL!>>%NN  "!DN &r9   requestresponsetimec                     U R                   bT  U R                   R                  (       a8  U R                   R                  XU R                  R	                  5       U-
  5        g g g r   )r   enabledlogr   r   )r}   r   r   r   s       r:   
log_accessRequestHandler.log_access  sM     )d.@.@.H.H""7djjoo6G$6NO /I)r9   argskwc                 `    U R                   (       a  U R                  R                   " U0 UD6  g g r   )r`   r_   r}   r   r   s      r:   	log_debugRequestHandler.log_debug  s%    ::KKt*r* r9   c                 <    U R                   R                  " U0 UD6  g r   )r_   	exceptionr   s      r:   log_exceptionRequestHandler.log_exception  s    t*r*r9   c                 x   S U l         U R                  (       d  U R                  (       d  g U R                  nUR	                  5       nU R
                  nX#:  a!  UR                  X0R                  5      U l         g U R                  (       a1  U R                  R                  5       (       d  U R                  5         g g g r   )rS   rc   rM   r   r   rR   call_at_process_keepaliverY   r   r   )r}   rs   now
close_times       r:   r   !RequestHandler._process_keepalive  s    !%DOOzziik44
%)\\*>U>U%VD" << 1 1 3 3 !4<r9   
start_timerx   c                   #    SU l           Xl        U" U5      I S h  vN nS U l         [        USS5      (       a  [        R                  " S[
        5        U R                  XU5      I S h  vN u  pESU l         U R                  b  U R                  R                  S 5        XE4$  N! S U l        f = f NF! [         a)  nUnU R                  XU5      I S h  vN  u  pE S nANpS nAf[        R                   a    e [        R                   aI  nU R                  SUS9  U R                  US5      nU R                  XU5      I S h  vN  u  pE S nANS nAf[         a;  nU R                  USU5      nU R                  XU5      I S h  vN  u  pE S nAGN"S nAff = f! SU l         U R                  b  U R                  R                  S 5        f f = f7f)	NT__http_exception__Fzlreturning HTTPException object is deprecated (#2415) and will be removed, please raise the exception insteadzRequest handler timed out.exc_infoi    )rf   rd   getattrwarningswarnDeprecationWarningfinish_responser#   r   r   r   r   handle_error	ExceptionrX   r   )r}   r   r   rx   respresetrD   s          r:   _handle_requestRequestHandler._handle_request  s     %)! 	6-(/%,W55(,% t15999 '	 !% 4 4WJ OOKD(-D%##/$$//5{? 6(,%. P-  	PD $ 4 4WJ OOOKD%%% 	## 	PNN7#NF$$Wc2D $ 4 4WJ OOOKD% 	P$$Wc37D $ 4 4WJ OOOKD%	P ).D%##/$$//5 0s   GB' B%B' B5 AF ,B3-F 32G%B' '	B00B5 3F 5
F?C#CC#F #+F7EEEF F(FF
FF FF 2GGc           	        #    U R                   nU R                  nUc   eU R                  nSnU R                  c   eU R                  c   eU R
                  (       Gd  U R                  (       d1   UR                  5       U l        U R                  I Sh  vN   SU l        U R                  R                  5       u  pVUR                  5       nU=R                  S-  sl        [        X5      n[        U[        5      (       a  U R                  U5      n	[         nOU R                  n	U R                  UUU UU R"                  =(       d    [$        R&                  " U5      5      n
 U R)                  XU	5      n[*        R,                  S:  a  [$        R.                  " XSS9nOUR1                  U5      n UI Sh  vN u  pMAU(       a>  U R5                  S5         SU
l        U R8                  Gc.  UGb*  U R5                  S5        GO[;        UR<                  5      U l        URA                  5       (       Gd  U RB                  nU R
                  (       d  U(       a  U R5                  S	U5        UR                  5       nX-   n URA                  5       (       dr  UU:  al  [E        UU-
  5       ISh  vN   URG                  5       I Sh  vN   SSS5      ISh  vN   UR                  5       nURA                  5       (       d  UU:  a  Ml  URA                  5       (       d2  U R
                  (       d!  U R5                  S5        U RO                  5         URQ                  [R        5        SU
l        U R8                  c  Ub  U R5                  S5        U R>                  (       ak  U R\                  (       dZ  U R
                  (       dI  UR                  5       U-   nUU l/        U R`                  c!  URc                  UU Rd                  5      U l0        OOU R
                  (       d  GM  U R
                  (       d0  SU l        U R8                  b  U R8                  RO                  5         ggg GN! SU l        f = f GN! [2         aA    U R5                  S5         SU
l        U R8                  b  M  Uc  M  U R5                  S5        M  f = f GN GN GN! , ISh  vN  (       d  f       GN= f! [$        RH                  [$        RJ                  4 aJ    [*        R,                  S
:  a2  [$        R&                  " 5       =n(       a  URM                  5       (       a  e  GNHf = f! [$        RH                   a#    U R5                  S5        U RU                  5         e [V         a+  nU RY                  SUS9  U RU                  5          SnAGNUSnAf[Z         a    U RU                  5         e f = f! SU
l        U R8                  c  Ub  U R5                  S5        f f f = f7f)a/  Process incoming request.

It reads request line, request headers and request payload, then
calls handle_request() method. Subclass has to override
handle_request(). start() handles various exceptions in request
or response handling. Connection is being closed always unless
keep_alive(True) specified.
Nr   r   Tr   z&Ignored premature client disconnectionz'Ignored premature client disconnection.z(Ignored premature client disconnection 2z'Start lingering close timer for %s sec.r   zUncompleted request.zUnhandled exceptionr   )3r   rN   rT   rP   rO   rc   rV   r   rY   popleftr   requests_countr   
isinstancerA   _make_error_handlerERRORrZ   r   r   r   r   r   r   r   ConnectionErrorr   _taskr   boolr   rM   is_eofrU   r   readanyr   r   r   r   set_exception_PAYLOAD_ACCESS_ERRORr   r   r   rH   rb   rR   rS   r   r   )r}   rs   rr   rh   r   rE   r   r   writerrx   r   coror   r   rn   r   end_ttrD   r   s                       r:   r   RequestHandler.start  s     zz--""" 33$$000$$000###>>(#'#5#5#7DL,,&&#'DL#~~557GIIKE""a'"!$-F'8,,"&":":7"C"&"7"7
 ++""@g&:&:4&@GCN++GOL##w."<<TJD++D1D(,*KD NN#MN` !%>>)d.>NN#LM_ #'t"7 ~~''%)%9%9N,,E~ #iik # 4&&-nn&6&63;+7+D+D*1//*;$;$; ,E+D '+iik	 '.nn&6&63; #>>++D4E4E'=>

%%&;< !%>>)d.>NN#LMt{{4;L;L!YY[+<<
2</))1-1\\"D$;$;.D* ] ###b   !%D~~)$$& * !Y '#'DLB #-& NN#KLl !%>>)d.>NN#LMu4 ,E$; ,E+D+D+D !( 6 68L8LM & # 0 0G ;*1*>*>*@%@Q%@$%LLNN %& )) GH  " #""#83"G  ""    " !%>>)d.>NN#LM /?)sQ  A-X0$Q QQ CX"AU 0Q- 5Q*6Q- <U X+X/XA:U =-S *R;+S .SR>SS S/S AU  B6XAXQ 	Q''X*Q- -R8U 	XX$X7R88U ;S >SS S
SSS A*U	U UU ?W V5/W 5WW ,XXr   c                   #    UR                  5         U R                  b_  U R                  R                  S5        SU l        U R                  (       a,  U R                  R                  U R                  5        SU l         UR                  n U" U5      I Sh  vN   UR!                  5       I Sh  vN   U R%                  XU5        US4$ ! [         a    Uc  U R                  S5        O U R                  SR                  U5      5        [        5       n[        UR                  UR                  UR                  UR                  S9nUR                  n Nf = f N N! ["         a    U R%                  XU5        US4s $ f = f7f)zPrepare the response and write_eof, then log access.

This has to
be called within the context of any exception so the access logger
can get exception information. Returns True if the client disconnects
prematurely.
NFr9   z+Missing return statement on request handlerz7Web-handler should return a response instance, got {!r})rC   reasontextheadersT)_finishr]   set_upgradedr[   rW   r   prepareAttributeErrorr   r   r$   r'   rC   r  r  r  	write_eofr  r   )r}   r   r   r   prepare_methrD   s         r:   r   RequestHandler.finish_response  sU     	+  --e4!DM!!$$..t/A/AB%("	(<<L	w'''.."""
 	z2U{+  	(|""#PQ""%vd| *+Czz#**388S[[D  <<L	( (" 	OOG:6:	sm   A=F C E EE 0E1E 5FB	EFEFE E  F>F FFrC   rE   c                 F   U R                   S:X  a;  [        U[        5      (       a&  U R                  R	                  SUR
                  US9  OU R                  SUR
                  US9  UR                  R                  S:  a  [        S5      eSnU[        R                  :X  a  SR                  [        R                  5      n[        R                  R                  nSnU R                  (       a-  [        [        5         [         R"                  " 5       nSSS5        S	UR$                  R'                  S
S5      ;   a*  U(       a  [)        U5      nSU S3nSR                  XgS9nS	nOU(       a  UnUS-   U-   n[+        X$US9n	U	R-                  5         U	$ ! , (       d  f       N= f)zHandle errors.

Returns HTTP response with specific status code. Logs additional
information. It always closes current connection.
r   zError handling request from %sr   r   zMResponse is sent already, cannot send another response with the error messagez
text/plainz{0.value} {0.phrase}Nz	text/htmlAccept z<h2>Traceback:</h2>
<pre>z</pre>zV<html><head><title>{title}</title></head><body>
<h1>{title}</h1>
{msg}
</body></html>
)titler   z

)rC   r  content_type)rL   r   r   r_   r`   remoter   r  output_sizer  r   INTERNAL_SERVER_ERRORr   descriptionr   r   	traceback
format_excr  gethtml_escaper'   r   )
r}   r   rC   rD   rE   ctr  r   tbr   s
             r:   r   RequestHandler.handle_error  s{    !#
3(F(F
 KK0'..3   0'..3  
 >>%%)!) 
 Z555*11*2R2RSE22>>CBzzi("--/B ) goo11(B??$RB6rd&AC0 &u&.  !C&.3.v"E- )(s   =F
F err_infoc                 4   ^ ^ S[         S[        4UU 4S jjnU$ )Nr   r   c                 p   >#    TR                  U TR                  TR                  TR                  5      $ 7fr   )r   rC   rD   rE   )r   r(  r}   s    r:   handler3RequestHandler._make_error_handler.<locals>.handler  s0     $$(,,8H8H s   36)r&   r(   )r}   r(  r+  s   `` r:   r   "RequestHandler._make_error_handler  s"    	; 	> 	 	
 r9   )rb   rd   rc   rX   rM   rS   rT   rU   rN   rW   rV   rR   r\   rL   rP   rO   rf   r]   rZ   rQ   re   r[   rY   ra   r   r`   r_   r   )g      .@)r   N)r   NN)6r3   r4   r5   r6   r7   	__slots__r   r%   r   
LOG_FORMATr   AbstractEventLooprz   r  r   r   r   rI   rF   rw   r   propertyrh   r   r   BaseTransportr   rH   r   r	   r   r   bytesr   r   r   r   r&   r(   r   r   r   r   r   r
   r   r   r   r   r   rA   r   r8   __classcell__)r~   s   @r:   r)   r)   e   s   %NIJ $("&7C*!-!8!8! " $! $()'L*L* ''	L* !L* L* L* 34L* L* L* L* L* L* L*  !L*" #L*$ %L*& !&'L* L*\
# 
 '5 ' '0huo 0 0d")>)> "4 ""(8M#: (t (@% % %%% %D %N*d *t *""P"P.<PDIP	P+s +# +$ ++3 +c +d +")) ) ";->1J"JK	)
 
~t#	$)VE'N("(*8(FK(	~t#	$(Z '+!%<< < m$	<
 #< 
<| 	;->!::	; r9   )Mr   asyncio.streamsr   r!  r   collectionsr   
contextlibr   htmlr   r$  httpr   loggingr   typingr   r	   r
   r   r   r   r   r   r   r   r   attryarlabcr   r   base_protocolr   helpersr   r   r   r   r   r   http_exceptionsr   r   r   r   streamsr    r!   tcp_helpersr"   web_exceptionsr#   r$   web_logr%   web_requestr&   web_responser'   r(   __all__
web_serverr,   _RequestFactory_RequestHandlerURLr   r   r*   r+   r  srA   _MsgTyper)   r1   r9   r:   <module>rO     s\     
     &        ; ' !  + - 0 & B ! $ 2
I"  	 K=)N*CCD		HHSM	!) !8 8 +,  T$d3  4 ((23\ABS
\ S
r9   