
    F/jty                        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 d dlmZm	Z	m
Z
 d dlmZ d dlmZ d dlmZ d dlmZ d dlmZmZmZmZ d dlZd dlZd d	lmZ d
dlmZmZ d
dl m!Z!m"Z" d
dl#m$Z$m%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/m0Z0 d
dl1m2Z2m3Z3 d
dl4m5Z5 d
dl6m7Z7m8Z8 d
dl9m:Z: d
dl;m<Z< d
dl=m>Z>m?Z? dZ@dZAer
d dlBZBd
dlCmDZD e	e)e3dedge<f   ZEe	e<gee?   f   ZF e)dde(i i dddd ej                  d      
      ZH G d  d!eI      ZJ G d" d#eI      ZK eK       ZL ej                  ddd$       G d% d&             ZNeOe)eNz  e3f   ZP G d' de"      ZQy)(    N)deque)	AwaitableCallableSequence)suppress)escape)
HTTPStatus)Logger)TYPE_CHECKINGAnyOptionalcast)under_cached_property   )AbstractAccessLoggerAbstractStreamWriter)PAUSE_RESUME_READING_ERRORSBaseProtocol)DEFAULT_CHUNK_SIZEceil_timeout)HttpProcessingErrorHttpRequestParserHttpVersion10RawRequestMessageStreamWriterWebSocketReader)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                       e Zd ZdZy)r*   zPayload parsing error.N__name__
__module____qualname____doc__     R/var/www/html/maxservice/venv/lib/python3.12/site-packages/aiohttp/web_protocol.pyr*   r*   N   s     r7   r*   c                       e Zd ZdZy)r+   z-Payload was accessed after response was sent.Nr1   r6   r7   r8   r+   r+   R   s    7r7   r+   )auto_attribsfrozenslotsc                   ,    e Zd ZU eed<   eed<   eed<   y)_ErrInfostatusexcmessageN)r2   r3   r4   int__annotations__BaseExceptionstrr6   r7   r8   r>   r>   Y   s    K	Lr7   r>   c            !       T    e Zd ZdZdZddeeeej                  ddddde	dd	d
ddde
j                  dedededee   dedededededededededef  fdZdefdZeded   fd        Zedeeeeeef   z  eeef   z  d!z  fd"       Zedeeeeeef   z  eeef   z  d!z  fd#       Zedefd$       ZdLd%ed!z  dd!fd&Zd'e
j<                  dd!f fd(Zd)e d!z  dd!f fd*Z!	 dMd+e"d,e#g d!f   d!z  dd!fd-Z$dNd.Z%d/e&dd!fd0Z'defd1Z(dNd2Z)dNd3Z*d4edd!fd5Z+dNd6Z,dNd7Z-d8e.d9e/d:ed!z  dd!fd;Z0d<e1d=e1dd!fd>Z2d<e1d=e1dd!fd?Z3dNd@Z4d8e.dAed!z  dBe#e.ge5e/   f   dee/ef   fdCZ6dNdDZ7d8e.dEe/dAed!z  dee/ef   fdFZ8	 	 	 dOd8e.dGed)e d!z  dHed!z  de/f
dIZ9dJe:de#e.ge5e/   f   fdKZ; xZ<S )Pr)   aj  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

    )"max_field_sizemax_headersmax_line_size_request_count
_keepalive_manager_request_handler_request_factory_tcp_keepalive_next_keepalive_close_time_keepalive_handle_keepalive_timeout_lingering_time	_messages_max_msg_queue_size_msg_queue_resume_size_msg_queue_paused_message_tail_handler_waiter_waiter_task_handler_payload_parser_data_received_cbloggerdebug
access_logr   _close_force_close_current_request_timeout_ceil_threshold_request_in_progress_logging_enabled_cachei.  TFi     g      $@   )keepalive_timeoutr"   r^   access_log_classr`   access_log_formatr_   rI   rH   rG   lingering_timeread_bufsizeauto_decompresstimeout_ceil_thresholdmanagerr-   looprj   r"   r^   rk   r`   rl   r_   rI   rH   rG   rm   rn   ro   rp   c                >   t         | _        t         dz  | _        d| _        t	        | |||
||t
        |t         	      }t        |   ||       d| _        d| _	        d | _
        || _        |j                  | _        |j                  | _        |
| _        || _        || _        || _        d| _        d | _        || _        t/        |      | _        t3               | _        d| _        d | _        d | _        d | _        d | _        d | _         d| _!        	 t/        |      | _!        || _$        |	| _%        || _&        |r* |||      | _'        | jN                  jP                  | _)        nd | _'        d| _)        d| _*        d| _+        d| _,        i | _-        y # tD        tF        f$ r Y }w xY w)N   F)rI   rG   rH   payload_exceptionro   max_msg_queue_sizer   g        r7   ri   ).MAX_MSG_QUEUE_SIZErU   rV   rW   r   r*   super__init__rJ   rK   rc   rL   request_handlerrM   request_factoryrN   rI   rH   rG   rO   rP   rQ   rR   floatrS   r   rT   rX   r]   rZ   rY   r[   r\   rd   	TypeError
ValueErrorr^   r_   r`   r   enabledrf   ra   rb   re   rg   )selfrq   rr   rj   r"   r^   rk   r`   rl   r_   rI   rH   rG   rm   rn   ro   rp   parser	__class__s                     r8   ry   zRequestHandler.__init__   s   * $6  '9A&=# "'"')#1+1

 	v&  48'.8?8O8O8?8O8O*&,+*-'8<"3$^4*/' <@48<@8<$(./$	+01G+HD( 
$>N-?D %)$6$6$>$>D!!%D$)D!!$)!&(% :& 		s   F
 
FFreturnc                 r    dj                  | j                  j                  | j                  d      S d      S )Nz<{} {}>	connecteddisconnected)formatr   r2   	transportr   s    r8   __repr__zRequestHandler.__repr__  s;    NN##>>5K
 	
;I
 	
r7   zssl.SSLContextc                 T    | j                   dS | j                   j                  d      S )zReturn SSLContext if available.N
sslcontextr   get_extra_infor   s    r8   ssl_contextzRequestHandler.ssl_context  s1    
 ~~% 	
 ..|<	
r7   Nc                 T    | j                   dS | j                   j                  d      S )zReturn peername if available.Npeernamer   r   s    r8   r   zRequestHandler.peername  1     ~~% 	
 ..z:	
r7   c                 T    | j                   dS | j                   j                  d      S )zReturn sockname if available.Nsocknamer   r   s    r8   r   zRequestHandler.sockname&  r   r7   c                     | j                   S N)rR   r   s    r8   rj   z RequestHandler.keepalive_timeout1  s    &&&r7   timeoutc                   K   d| _         | j                  | j                  j                          | j                  rX| j                  j                         | _        	 t        |      4 d{    | j                   d{    ddd      d{    	 t        |      4 d{    | j                  -| j                  j!                  t        j                                | j"                  A| j"                  j%                         s't        j&                  | j"                         d{    ddd      d{    | j"                  | j"                  j                          | j)                          y7 7 7 # 1 d{  7  sw Y   xY w# t        j                  t        j                  f$ rE d| _        t        j                  dk\  r't        j                         x}r|j                         r Y ew xY w7 Y7 7 # 1 d{  7  sw Y   xY w# t        j                  t        j                  f$ r> t        j                  dk\  r't        j                         x}r|j                         r Y :w xY ww)zDo worker process exit preparations.

        We need to clean up everything and stop accepting requests.
        It is especially important for keep-alive connections.
        TN      )rb   rQ   cancelre   _loopcreate_futurerY   r   asyncioCancelledErrorTimeoutErrorsysversion_infocurrent_task
cancellingrc   _cancelr[   doneshieldforce_close)r   r   tasks      r8   shutdownzRequestHandler.shutdown5  s     !!!-""))+ $$ $(::#;#;#=D 
'0 / /..../ /	#G, = =((4))11'2H2H2JK%%1$:L:L:Q:Q:S!..););<<<= = )%%'=/./ / / /**G,@,@A '+$$$/!(!5!5!777)=
 == = = = &&(<(<= 	  G+$1133T3OO%	s   AI=F +E6,F /E=?E9 E=F E;F H $G=%H (BH*H +H/H :H;H ?7I=6F 9E=;F =FFFF A$G:6I=9G::I==H  HH H
HHH AI:6I=9I::I=r   c                    t         |   |       t        t        j                  |      }| j
                  rt        |       | j                  J | j                  j                  | |       | j                  }t        j                  dk\  r.t        j                  | j                         |d      }|| _        y |j                  | j                               }|| _        y )Nr      Trr   eager_start)rx   connection_mader   r   	TransportrO   r"   rL   r   r   r   Taskstartcreate_taskr[   )r   r   real_transportrr   r   r   s        r8   r   zRequestHandler.connection_madeg  s    	*g//;.)}}(((%%dN;zzw&<<

4TJD " ##DJJL1D!r7   r@   c                 h   | j                   y | j                   j                  | |       | j                   j                  }| j                          t        |   |       d | _         d | _        d | _        d | _        | j                  | j                  j                          | j                  (|t        d      }| j                  j                  |       |r&| j                  | j                  j                          d | _        | j                  "| j                  j                          d | _        y y )NzConnection lost)rL   connection_losthandler_cancellationr   rx   rN   rM   _parserrQ   r   rc   ConnectionResetErrorr   r[   r\   feed_eof)r   r@   r   r   s      r8   r   zRequestHandler.connection_lostx  s   == %%dC0  $}}AA$ $ $!!-""))+  ,{*+<=!!))#.D$6$6$B%%'!+  ))+#'D  ,r7   r   data_received_cbc                     | j                   J || _         || _        | j                  r-| j                   j                  | j                         d| _        y y )Nr7   )r\   r]   rX   	feed_data)r   r   r   s      r8   
set_parserzRequestHandler.set_parser  sV    
 ##+++%!1  **4+=+=>!$D r7   c                      y r   r6   r   s    r8   eof_receivedzRequestHandler.eof_received  s    r7   datac                    | j                   s| j                  ry | j                  | j                  s| j                  J 	 | j                  j                  |      \  }}}|D ]7  \  }}| xj                  dz  c_
        | j                  j                  ||f       9 | j                  }|r#|!|j                         s|j                  d        | j                   s2t#        | j                        | j$                  k\  r| j'                          || _        |r|r|| _        y y y | j                  $| j                  r|r| xj(                  |z  c_        y |rN| j*                  | j+                          | j                  j                  |      \  }	}|	r| j-                          y y y # t        $ r.}t        d||j                        t        fg}d}d}Y d }~sd }~ww xY w)Ni  )r?   r@   rA   Fr7   r   )rb   ra   r\   	_upgradedr   r   r   r>   rA   r    rJ   rT   appendrZ   r   
set_resultrW   lenrU   _pause_msg_queue_readingrX   r]   close)
r   r   messagesupgradedtailr@   msgpayloadwaitereofs
             r8   data_receivedzRequestHandler.data_received  s    '<<++++/<<+A+A$+G((D !) 6W##q(#%%sGn56 \\FF.v{{}!!$'
 **'4+C+CC--/%DND%)" !x !!)dnn$& %%1&&(,,66t<IC

 	 C ' Sc3;;GW !s   F! !	G*#GGc                     | j                   S r   )rW   r   s    r8   _reading_paused_for_msg_queuez,RequestHandler._reading_paused_for_msg_queue  s    %%%r7   c                     d| _         | j                  	 | j                  j                          y y # t        $ r Y y w xY w)NT)rW   r   pause_readingr   r   s    r8   r   z'RequestHandler._pause_msg_queue_reading  sD    !%>>%,,. & /  s   1 	==c                    | j                   s4| j                  d       t        | j                        | j                  k\  ry d| _        | j                  s)| j                  	 | j                  j                          y y y # t        $ r Y y w xY w)Nr7   F)
r   r   r   rT   rU   rW   _reading_pausedr   resume_readingr   r   s    r8   _resume_msg_queue_readingz(RequestHandler._resume_msg_queue_reading  s    ~~ s#4>>"d&>&>>!&##(B--/ )C# /  s   !A> >	B
	B
valc                 n    || _         | j                  r"| j                  j                          d| _        yy)zMSet keep-alive connection mode.

        :param bool val: new state.
        N)rK   rQ   r   )r   r   s     r8   
keep_alivezRequestHandler.keep_alive  s3    
 !!""))+%)D" "r7   c                 `    d| _         | j                  r| j                  j                          yy)zClose connection.

        Stop accepting new pipelining messages and close
        connection when handlers done processing messages.
        TN)ra   rZ   r   r   s    r8   r   zRequestHandler.close  s'     <<LL! r7   c                     d| _         | j                  r| j                  j                          | j                  "| j                  j	                          d| _        yy)zForcefully close connection.TN)rb   rZ   r   r   r   r   s    r8   r   zRequestHandler.force_close  sG     <<LL!>>%NN  "!DN &r7   requestresponsetimec                     | j                   rP| j                  Ct        r|J | j                  j                  ||| j                  j                         |z
         y y y r   )rf   r   r   logr   r   )r   r   r   r   s       r8   
log_accesszRequestHandler.log_access  sX       T%7%7%C'''""7Hdjjoo6G$6NO &D r7   argskwc                 V    | j                   r | j                  j                   |i | y y r   )r_   r^   r   r   r   s      r8   	log_debugzRequestHandler.log_debug  s'    ::DKKt*r* r7   c                 <     | j                   j                  |i | y r   )r^   	exceptionr   s      r8   log_exceptionzRequestHandler.log_exception!  s    t*r*r7   c                 R   d | _         | j                  s| j                  sy | j                  }|j	                         }| j
                  }||k  r"|j                  || j                        | _         y | j                  r,| j                  j                         s| j                          y y y r   )rQ   rb   rK   r   r   rP   call_at_process_keepaliverZ   r   r   )r   rr   now
close_times       r8   r   z!RequestHandler._process_keepalive$  s    !%DOOzziik44
%)\\*d>U>U%VD" << 1 1 3 !4<r7   
start_timerz   c                   K   d| _         	 	 || _         ||       d {   }d | _        	 t        |dd      rt        j                  dt
               | j                  |||       d {   \  }}d| _         | j                  | j                  j                  d        ||fS 7 # d | _        w xY w7 G# t        $ r+}|}| j                  |||       d {  7  \  }}Y d }~qd }~wt        j                  $ r  t        j                  $ rN}| j                  d|       | j                  |d      }| j                  |||       d {  7  \  }}Y d }~d }~wt        $ r=}| j                  |d|      }| j                  |||       d {  7  \  }}Y d }~'d }~ww xY w# d| _         | j                  | j                  j                  d        w w xY ww)	NT__http_exception__Fzlreturning HTTPException object is deprecated (#2415) and will be removed, please raise the exception insteadzRequest handler timed out.exc_infoi    )re   rc   getattrwarningswarnDeprecationWarningfinish_responser#   r   r   r   r   handle_error	ExceptionrY   r   )r   r   r   rz   respresetr@   s          r8   _handle_requestzRequestHandler._handle_request5  s     %)! 	6-(/%,W55(,% t1599 '	 !% 4 4WdJ OOKD%(-D%##/$$//5U{? 6(,%. P-  	PD $ 4 4WdJ OOOKD%%% 	## 	PNN7#NF$$Wc2D $ 4 4WdJ OOOKD% 	P$$Wc37D $ 4 4WdJ OOOKD%	P ).D%##/$$//5 0s   GB$ B"B$ B2 =F (B0)F 02G"B$ $	B--B2 0F 2	F;C!CC!F !)F
;EEEF F)FF	FF FF 1GGc           	        K   | j                   }| j                  }|J | j                  }d}| j                  J | j                  J | j
                  s| j                  s1	 |j                         | _        | j                   d{    d| _        | j                  j                         \  }}| j                  | j                  j                          | j                  r2t        | j                        | j                  k  r| j                          | j                   r|j#                         nd}|xj$                  dz  c_        t'        | |      }t)        |t*              r| j-                  |      }	t.        }n| j                  }	| j                  ||| || j0                  xs t3        j4                  |            }
	 | j7                  |
||	      }t8        j:                  dk\  rt3        j<                  ||d      }n|j?                  |      }	 | d{   \  }}~|r<| jC                  d       	 d|
_"        | jF                  || jC                  d       ntI        |jJ                        | _&        |jO                         s| jP                  }| j
                  s|r| jC                  d	|       |j#                         }||z   }	 |jO                         sj||k  retS        ||z
        4 d{    |jU                          d{    ddd      d{    |j#                         }|jO                         s||k  re|jO                         s-| j
                  s!| jC                  d       | j]                          |j_                  t`               d|
_"        | jF                  || jC                  d       	 | jL                  r`| jj                  sT| j
                  sH|j#                         |z   }|| _6        | jn                  #|jq                  || jr                        | _7        nn| j
                  s| j
                  s/d| _        | jF                  | jF                  j]                          yyy7 # d| _        w xY w7 l# t@        $ r< | jC                  d       Y d|
_"        | jF                  }|| jC                  d       w xY w7 7 7 # 1 d{  7  sw Y   xY w# t2        jV                  t2        jX                  f$ r> t8        j:                  d
k\  r't3        j4                         x}r|j[                         r Y 	w xY w# t2        jV                  $ r# | jC                  d       | jc                           td        $ r.}| jg                  d|       | jc                          Y d}~!d}~wth        $ r | jc                           w xY w# d|
_"        | jF                  || jC                  d       w w w xY ww)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   ):r   rL   rR   rN   rM   rb   rT   r   rZ   popleftr   message_consumedrW   r   rV   r   rf   r   requests_countr   
isinstancer>   _make_error_handlerERRORr[   r   r   r  r   r   r   r   ConnectionErrorr   _taskr   boolr   rK   is_eofrS   r   readanyr   r   r   r   set_exception_PAYLOAD_ACCESS_ERRORr   r   r   rD   ra   rP   rQ   r   r   )r   rr   rq   rj   r   rA   r   r   writerrz   r   coror   r  rm   r   end_ttr@   r   s                       r8   r   zRequestHandler.start`  sL     zz--""" 33$$000$$000##>>(#'#5#5#7DL,,&&#'DL#~~557GW ||'--/&&'4+F+FF..0 $(#8#8DIIKdE""a'"!$-F'8,"&":":7"C"&"7"7
 ++""@g&:&:4&@GCN++GUOL##w."<<4TJD++D1D(,*KD% NN#MN` !%>>)d.>NN#LM_ #'t"7 ~~'%)%9%9N,,E~ #iik #n 4&&-nn&63;+7+D !< !<*1//*;$;$;!< !< '+iik	 '.nn&63; #>>+D4E4E'=>

%%&;< !%>>)d.>NN#LMt{{4;L;L!YY[+<<
2</))1-1\\"D$;$;.D* y ##~   !%D~~)$$& * !u '#'DL^ #-& NN#KLl !%>>)d.>NN#LMu4!<$;!< !< !< !< !( 6 68L8LM & # 0 0G ;*1*>*>*@%@Q%@$%LLN %& )) GH  " #""#83"G  ""    " !%>>)d.>NN#LM /?)sD  A X#$Q4 Q1Q4 D1X>AU R R R U 1*XA+U 'S* .S/S* 2SSSS* S)S* AU B X5<X1Q4 4	Q==X R SU X2X5XSU S* SS* S'SS'"S* *AUU 
UU =W#V4.W 4WW *W??Xr   c                   K   |j                          | j                  | j                  j                  d       d| _        | j                  rz| j                  j                  | j                        \  }}}|| _        |D ]7  \  }}| xj                  dz  c_        | j                  j                  ||f       9 | j                  J 	 |j                  }		  |	|       d{    |j'                          d{    | j+                  |||       |dfS # t        $ rx || j                  d       n| j                  d|       t               }
t        |
j                  |
j                   |
j"                  |
j$                        }|j                  }	Y w xY w7 7 # t(        $ r | j+                  |||       |dfcY S w xY ww)a   Prepare 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.
        NFr   z+Missing return statement on request handlerz3Web-handler should return a response instance, got )r?   reasontextheadersT)_finishr   set_upgradedr   rX   r   rJ   rT   r   rZ   prepareAttributeErrorr   r$   r'   r?   r  r  r  	write_eofr
  r   )r   r   r   r   r   r   r   r   r   prepare_methr@   s              r8   r   zRequestHandler.finish_response  s     	<<#LL%%e,"DN!!,0LL,B,B4CUCU,V))T%)"$, :LC''1,'NN))3.9:
 ||+++	(<<L	w'''.."""
 	z2U{)  	(|""#PQ""I$R *+Czz#**388S[[D  <<L	( (" 	OOGT:6:	sm   CGD F  F!F 8F9F =GA>FGFGF F  F?<G>F??Gr?   rA   c                 F   | j                   dk(  r9t        |t              r)| j                  j	                  d|j
                  |       n| j                  d|j
                  |       |j                  j                  dkD  rt        d      d}|t        j                  k(  rt        j                  j                   dt        j                  j                   }t        j                  j                  }d}| j                  r,t        t               5  t#        j$                         }ddd       d	|j&                  j)                  d
d      v r"|rt+        |      }d| d}d| d| d| d}d	}n|r|}|dz   |z   }t-        |||      }	|	j/                          |	S # 1 sw Y   uxY w)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/plain Nz	text/htmlAccept z<h2>Traceback:</h2>
<pre>z</pre>z<html><head><title>z</title></head><body>
<h1>z</h1>
z
</body></html>
z

)r?   r  content_type)rJ   r  r   r^   r_   remoter   r  output_sizer
  r	   INTERNAL_SERVER_ERRORvaluephrasedescriptionr   r   	traceback
format_excr  gethtml_escaper'   r   )
r   r   r?   r@   rA   cttitler   tbr   s
             r8   r   zRequestHandler.handle_error$  s    !#
3(F
 KK0'..3   0'..3  
 >>%%)!) 
 Z555!77==>a
@`@`@g@g?hiE22>>CBzzi( 0"--/B0 goo11(B??$RB6rd&AC#W %**/ 1/1  !C&.3.vG"E-0 0s   FF err_infoc                 0     dt         dt        f fd}|S )Nr   r   c                 p   K   j                  | j                  j                  j                        S wr   )r   r?   r@   rA   )r   r1  r   s    r8   handlerz3RequestHandler._make_error_handler.<locals>.handlere  s1     $$(,,8H8H s   36)r&   r(   )r   r1  r4  s   `` r8   r  z"RequestHandler._make_error_handlerb  s    	; 	> 	
 r7   )g      .@r   )r   N)r   NN)=r2   r3   r4   r5   	__slots__r   r%   r   
LOG_FORMATr   r   AbstractEventLoopr|   r  r
   typer   rE   rB   ry   r   r   r   r   tupler   r   propertyrj   r   BaseTransportr   rD   r   r   r   r   r   bytesr   r   r   r   r   r   r   r&   r(   r   r   r   r   r   r   r  r   r   r   r>   r  __classcell__)r   s   @r8   r)   r)   c   s   %N#IV $("&7C*!-!8!8!" $. $()'Z)Z) ''	Z) !Z) Z) Z) 34Z) Z) Z) Z) Z) Z) Z)  !Z)" #Z)$ %Z)& !&'Z)x
# 
 
X&67 
 
 
	uS#sC'(	(5c?	:T	A
 
 
	uS#sC'(	(5c?	:T	A
 
 '5 ' '0edl 0d 0d")>)> "4 ""(=4#7 (D (F 7;%% #2t8,t3% 
	%/% /D /b&t &"*d *t *""P"P.<PDIDLP	P+s +# +$ ++3 +c +d +")) DL) ";->1J"JK	)
 
~t#	$)VS'j-"-*8-FKdl-	~t#	$-d $("<< < T!	<
 t< 
<| 	;->!::	;r7   )Rr   asyncio.streamsr   r*  r   collectionsr   collections.abcr   r   r   
contextlibr   htmlr   r-  httpr	   loggingr
   typingr   r   r   r   attryarl	propcacher   abcr   r   base_protocolr   r   helpersr   r   r   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__rw   ssl
web_serverr-   _RequestFactory_RequestHandlerURLr	  r   r*   r+   r  sr>   r9  _MsgTyper)   r6   r7   r8   <module>r[     s_     
    9 9  &   5 5   + ; D 5  + - 0 & B ! $ 2
I
  "  	 K=)N*CCD		DHHSM	!) !8 8 +,  T$d3  4 "X-|;<G\ Gr7   