§
    ïŽ’j³]  ã                  ó^  — d dl mZ d dlZd dlZd dlZd dlZd dlZd dlmZ d dl	Z
d dlZ
d dlZ
d dlZ
d dlZ
ddlmZ ddlmZmZmZ ddlmZmZ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"  ej#        d¦  «        Z$dd„Z% G d„ dej&        ¦  «        Z' G d„ de"¦  «        Z( G d„ d¦  «        Z)dS )é    )ÚannotationsN)Ú	Generatoré   )ÚNetworkStream)ÚConnectionNotAvailableÚLocalProtocolErrorÚRemoteProtocolError)ÚOriginÚRequestÚResponse)ÚLockÚ	SemaphoreÚShieldCancellation)ÚTrace)Úsafe_iterateé   )ÚConnectionInterfacezhttpcore2.http2Úrequestr   ÚreturnÚboolc                ó>   — t          d„ | j        D ¦   «         ¦  «        S )Nc              3  ó|   K  — | ]7\  }}|                      ¦   «         d k    p|                      ¦   «         dk    V — Œ8dS )s   content-lengthó   transfer-encodingN©Úlower)Ú.0ÚkÚ_vs      úCC:\Projects\DSCons\.venv\Lib\site-packages\httpcore2\_sync\http2.pyú	<genexpr>z#has_body_headers.<locals>.<genexpr>   sJ   è è € ÐpÐpÑW\ÐWXÐZ\ˆq�wŠw‰yŒyÐ-Ò-ÐR°·²±´Ð>RÒ1RÐpÐpÐpÐpÐpÐpó    )ÚanyÚheaders)r   s    r   Úhas_body_headersr$      s#   € ÝÐpÐpÐ`gÔ`oÐpÑpÔpÑpÔpÐpr!   c                  ó   — e Zd ZdZdZdZdS )ÚHTTPConnectionStater   r   é   N)Ú__name__Ú
__module__Ú__qualname__ÚACTIVEÚIDLEÚCLOSED© r!   r   r&   r&      s   € € € € € Ø€FØ€DØ€F€F€Fr!   r&   c                  ó6  — e Zd ZdZej                             d¬¦  «        Z	 d?d@d„ZdAd„Z	dBd„Z
dCd„ZdCd„ZdDd„ZdCd„ZdEd„ZdFd„ZdGd „Zd?dHd"„ZdId%„ZdJd&„ZdKd'„ZdLd)„ZdBd*„ZdMd+„ZdNd-„ZdOd.„ZdOd/„ZdOd0„ZdOd1„ZdOd2„ZdOd3„ZdPd5„Z dPd6„Z!dQd7„Z"	 	 	 dRdSd>„Z#dS )TÚHTTP2Connectioné   F)Úvalidate_inbound_headersNÚoriginr
   Ústreamr   Úkeepalive_expiryúfloat | Nonec                ó¼  — || _         || _        || _        t          j                             | j        ¬¦  «        | _        t          j	        | _
        d | _        d| _        t          ¦   «         | _        t          ¦   «         | _        t          ¦   «         | _        t          ¦   «         | _        d| _        d| _        d| _        i | _        d | _        d | _        d | _        d S )N)Úconfigr   F)Ú_originÚ_network_streamÚ_keepalive_expiryÚh2Ú
connectionÚH2ConnectionÚCONFIGÚ	_h2_stater&   r,   Ú_stateÚ
_expire_atÚ_request_countr   Ú
_init_lockÚ_state_lockÚ
_read_lockÚ_write_lockÚ_sent_connection_initÚ_used_all_stream_idsÚ_connection_errorÚ_eventsÚ_connection_terminatedÚ_read_exceptionÚ_write_exception)Úselfr3   r4   r5   s       r   Ú__init__zHTTP2Connection.__init__)   sÄ   € ð ˆŒØ%ˆÔØ/?ˆÔÝœ×3Ò3¸4¼;Ð3ÑGÔGˆŒÝ)Ô.ˆŒØ(,ˆŒØˆÔÝ™&œ&ˆŒÝ™6œ6ˆÔÝ™&œ&ˆŒÝ™6œ6ˆÔØ%*ˆÔ"Ø$)ˆÔ!Ø!&ˆÔð ð 	Œð NRˆÔ#à15ˆÔØ26ˆÔÐÐr!   r   r   r   r   c           	     óŒ  — |                       |j        j        ¦  «        s$t          d|j        j        › d| j        › �¦  «        ‚| j        5  | j        t          j        t          j	        fv r)| xj
        dz  c_
        d | _        t          j        | _        nt          ¦   «         ‚	 d d d ¦  «         n# 1 swxY w Y   | j        5  | j        sö	 d|i}t          dt           ||¦  «        5   | j        di |¤Ž d d d ¦  «         n# 1 swxY w Y   nN# t$          $ rA}t'          ¦   «         5  |                      ¦   «          d d d ¦  «         n# 1 swxY w Y   |‚d }~ww xY wd| _        d| _        | j        j        j        }t3          |¦  «        | _        t7          || j        z
  ¦  «        D ]}| j                             ¦   «          Œd d d ¦  «         n# 1 swxY w Y   | j                             ¦   «          	 | j                             ¦   «         }g | j        |<   nV# t>          j         j!        $ r? d| _"        | xj
        dz  c_
        | j         #                    ¦   «          t          ¦   «         ‚w xY w	 ||dœ}t          dt           ||¦  «        5  |  $                    ||¬¦  «         d d d ¦  «         n# 1 swxY w Y   t          d	t           ||¦  «        5  |  %                    ||¬¦  «         d d d ¦  «         n# 1 swxY w Y   t          d
t           ||¦  «        5 }|  &                    ||¬¦  «        \  }	}
|	|
f|_'        d d d ¦  «         n# 1 swxY w Y   tQ          |	|
tS          | ||¬¦  «        d| j*        |dœ¬¦  «        S # t$          $ r¿}t'          ¦   «         5  d|i}t          dt           ||¦  «        5  |  +                    |¬¦  «         d d d ¦  «         n# 1 swxY w Y   d d d ¦  «         n# 1 swxY w Y   tY          |t>          j         j-        ¦  «        r*| j.        rt_          | j.        ¦  «        ‚ta          |¦  «        ‚|‚d }~ww xY w)NzAttempted to send request to z on connection to r   r   Úsend_connection_initT©r   Ú	stream_idÚsend_request_headersÚsend_request_bodyÚreceive_response_headers©rT   s   HTTP/2)Úhttp_versionÚnetwork_streamrT   )Ústatusr#   ÚcontentÚ
extensionsrT   Úresponse_closedr.   )1Úcan_handle_requestÚurlr3   ÚRuntimeErrorr9   rE   rA   r&   r+   r,   rC   rB   r   rD   rH   r   ÚloggerÚ_send_connection_initÚBaseExceptionr   ÚcloseÚ_max_streamsr@   Úlocal_settingsÚmax_concurrent_streamsr   Ú_max_streams_semaphoreÚrangeÚacquireÚget_next_available_stream_idrK   r<   Ú
exceptionsÚNoAvailableStreamIDErrorrI   ÚreleaseÚ_send_request_headersÚ_send_request_bodyÚ_receive_responseÚreturn_valuer   ÚHTTP2ConnectionByteStreamr:   Ú_response_closedÚ
isinstanceÚProtocolErrorrL   r	   r   )rO   r   Ú
sci_kwargsÚexcÚlocal_settings_max_streamsÚ_rT   ÚkwargsÚtracer[   r#   s              r   Úhandle_requestzHTTP2Connection.handle_requestK   s
  € Ø×&Ò& w¤{Ô'9Ñ:Ô:ð 	uõ
 Ðs¸w¼{Ô?QÐsÐsÐeiÔeqÐsÐsÑtÔtÐtàÔð 	/ð 	/ØŒ{Õ2Ô9Õ;NÔ;SÐTÐTÐTØÐ#Ô# qÑ(Ð#Ô#Ø"&�”Ý1Ô8�”�å,Ñ.Ô.Ð.ð ð		/ð 	/ð 	/ñ 	/ô 	/ð 	/ð 	/ð 	/ð 	/ð 	/ð 	/øøøð 	/ð 	/ð 	/ð 	/ð Œ_ð 	:ð 	:ØÔ-ð :ðØ"+¨WÐ!5�JÝÐ5µv¸wÈ
ÑSÔSð Að AØ2˜Ô2Ð@Ð@°ZÐ@Ð@Ð@ðAð Að Añ Aô Að Að Að Að Að Að Aøøøð Að Að Að Aøøå$ð ð ð Ý+Ñ-Ô-ð %ð %ØŸ
š
™œ˜ð%ð %ð %ñ %ô %ð %ð %ð %ð %ð %ð %øøøð %ð %ð %ð %à�Iøøøøðøøøð
 .2�Ô*ð %&�Ô!à-1¬^Ô-JÔ-aÐ*Ý.7Ð8RÑ.SÔ.S�Ô+åÐ9¸DÔ<MÑMÑNÔNð :ð :�AØÔ/×7Ò7Ñ9Ô9Ð9Ð9ð+	:ð 	:ð 	:ñ 	:ô 	:ð 	:ð 	:ð 	:ð 	:ð 	:ð 	:øøøð 	:ð 	:ð 	:ð 	:ð. 	Ô#×+Ò+Ñ-Ô-Ð-ð	+Øœ×CÒCÑEÔEˆIØ&(ˆDŒL˜Ñ#Ð#øÝŒ}Ô5ð 	+ð 	+ð 	+Ø(,ˆDÔ%ØÐÔ 1Ñ$ÐÔØÔ'×/Ò/Ñ1Ô1Ð1Ý(Ñ*Ô*Ð*ð		+øøøð*	Ø!(°yÐAÐAˆFÝÐ-­v°wÀÑGÔGð Qð QØ×*Ò*°7ÀiÐ*ÑPÔPÐPðQð Qð Qñ Qô Qð Qð Qð Qð Qð Qð Qøøøð Qð Qð Qð QåÐ*­F°G¸VÑDÔDð Nð NØ×'Ò'°À9Ð'ÑMÔMÐMðNð Nð Nñ Nô Nð Nð Nð Nð Nð Nð Nøøøð Nð Nð Nð NåÐ1µ6¸7ÀFÑKÔKð 7ÈuØ"&×"8Ò"8ÀÐT]Ð"8Ñ"^Ô"^‘�˜Ø&,¨gÐ%6�Ô"ð7ð 7ð 7ñ 7ô 7ð 7ð 7ð 7ð 7ð 7ð 7øøøð 7ð 7ð 7ð 7õ ØØÝ1°$¸È9ÐUÑUÔUà$-Ø&*Ô&:Ø!*ðð ð		ñ 	ô 	ð 	øõ ð 	ð 	ð 	Ý#Ñ%Ô%ð ?ð ?Ø% yÐ1�ÝÐ,­f°g¸vÑFÔFð ?ð ?Ø×)Ò)°IÐ)Ñ>Ô>Ð>ð?ð ?ð ?ñ ?ô ?ð ?ð ?ð ?ð ?ð ?ð ?øøøð ?ð ?ð ?ð ?ð?ð ?ð ?ñ ?ô ?ð ?ð ?ð ?ð ?ð ?ð ?øøøð ?ð ?ð ?ð ?õ
 ˜#�rœ}Ô:Ñ;Ô;ð .ð Ô.ð KÝ-¨dÔ.IÑJÔJÐJõ )¨Ñ-Ô-Ð-àˆIøøøøð-	øøøsl  ÁAB/Â/B3Â6B3ÃGÃ
DÃ%C?Ã3DÃ?D	ÄDÄD	ÄDÄ
GÄ
EÄEÄ#EÄ8EÅEÅEÅEÅEÅEÅA)GÇGÇGÇ0#H ÈAI'É+M: ÊJ+ÊM: Ê+J/Ê/M: Ê2J/Ê3M: ËK1Ë%M: Ë1K5Ë5M: Ë8K5Ë9M: Ì$MÌ7M: ÍMÍM: Í
MÍ.M: Í:
QÎP>ÎO(Î.OÏO(ÏOÏO(ÏOÏO(ÏP>Ï(O,	Ï,P>Ï/O,	Ï0AP>Ð>QÚNonec           	     ó²  — t           j                             dt           j        j        j        dt           j        j        j        dt           j        j        j        di¬¦  «        | j        _        | j        j        t           j        j        j	        = | j         
                    ¦   «          | j                             d¦  «         |                      |¦  «         dS )z�
        The HTTP/2 connection requires some initial setup before we can start
        using individual request/response streams on it.
        Tr   éd   r1   )ÚclientÚinitial_valuesé   N)r<   ÚsettingsÚSettingsÚSettingCodesÚENABLE_PUSHÚMAX_CONCURRENT_STREAMSÚMAX_HEADER_LIST_SIZEr@   rg   ÚENABLE_CONNECT_PROTOCOLÚinitiate_connectionÚincrement_flow_control_windowÚ_write_outgoing_data)rO   r   s     r   rc   z%HTTP2Connection._send_connection_init©   s±   € õ )+¬×(<Ò(<Øõ ”Ô(Ô4°aå”Ô(Ô?ÀÝ”Ô(Ô=¸uðð )=ñ 
)
ô 
)
ˆŒÔ%ð ŒNÔ)­"¬+Ô*BÔ*ZÐ[àŒ×*Ò*Ñ,Ô,Ð,ØŒ×4Ò4°UÑ;Ô;Ð;Ø×!Ò! 'Ñ*Ô*Ð*Ð*Ð*r!   rT   Úintc                ób  — t          |¦  «         }d„ |j        D ¦   «         d         }d|j        fd|fd|j        j        fd|j        j        fgd„ |j        D ¦   «         z   }| j                             |||¬¦  «         | j                             d	|¬
¦  «         |  	                    |¦  «         dS )z@
        Send the request headers to a given stream ID.
        c                óH   — g | ]\  }}|                      ¦   «         d k    ¯|‘Œ S )ó   hostr   ©r   r   Úvs      r   ú
<listcomp>z9HTTP2Connection._send_request_headers.<locals>.<listcomp>Ò   s.   € ÐKÐKÐK™4˜1˜a°a·g²g±i´iÀ7Ò6JÐ6J�QÐ6JÐ6JÐ6Jr!   r   s   :methods
   :authoritys   :schemes   :pathc                ól   — g | ]1\  }}|                      ¦   «         d v¯|                      ¦   «         |f‘Œ2S ))r’   r   r   r“   s      r   r•   z9HTTP2Connection._send_request_headers.<locals>.<listcomp>Ù   sR   € ð 
ð 
ð 
á��1Ø�wŠw‰yŒyððð ð �WŠW‰YŒY˜ˆNðð ð r!   )Ú
end_streamr„   rX   N)
r$   r#   Úmethodr`   ÚschemeÚtargetr@   Úsend_headersr�   rŽ   )rO   r   rT   r—   Ú	authorityr#   s         r   rp   z%HTTP2Connection._send_request_headersÈ   sÝ   € õ *¨'Ñ2Ô2Ð2ˆ
ð LÐK 7¤?ÐKÑKÔKÈAÔNˆ	ð ˜œÐ(Ø˜IÐ&Ø˜œÔ+Ð,Ø�w”{Ô)Ð*ð	
ð

ð 
àœð
ñ 
ô 
ñ
ˆð 	Œ×#Ò# I¨wÀ:Ð#ÑNÔNÐNØŒ×4Ò4°UÀiÐ4ÑPÔPÐPØ×!Ò! 'Ñ*Ô*Ð*Ð*Ð*r!   c                ó(  — t          |¦  «        sdS t          |j        t          j        ¦  «        sJ ‚t          |j        ¦  «        5 }|D ]}|                      |||¦  «         Œ	 ddd¦  «         n# 1 swxY w Y   |                      ||¦  «         dS )zP
        Iterate over the request body sending it to a given stream ID.
        N)r$   rv   r4   ÚtypingÚIterabler   Ú_send_stream_dataÚ_send_end_stream)rO   r   rT   ÚiteratorÚchunks        r   rq   z"HTTP2Connection._send_request_bodyç   sõ   € õ   Ñ(Ô(ð 	ØˆFå˜'œ.­&¬/Ñ:Ô:Ð:Ð:Ð:Ý˜'œ.Ñ)Ô)ð 	B¨XØ!ð Bð B�Ø×&Ò& w°	¸5ÑAÔAÐAÐAðBð	Bð 	Bð 	Bñ 	Bô 	Bð 	Bð 	Bð 	Bð 	Bð 	Bð 	Bøøøð 	Bð 	Bð 	Bð 	Bð 	×Ò˜g yÑ1Ô1Ð1Ð1Ð1s   ÁA1Á1A5Á8A5ÚdataÚbytesc                ó$  — d}|t          |¦  «        k     rz|                      ||¦  «        }||||z   …         }|t          |¦  «        z  }| j                             ||¦  «         |                      |¦  «         |t          |¦  «        k     °xdS dS )zI
        Send a single chunk of data in one or more data frames.
        r   N)ÚlenÚ_wait_for_outgoing_flowr@   Ú	send_datarŽ   )rO   r   rT   r¤   ÚpositionÚmax_flowr£   s          r   r    z!HTTP2Connection._send_stream_dataõ   sž   € ð ˆØ�˜T™œÒ"Ð"Ø×3Ò3°G¸YÑGÔGˆHØ˜ H¨xÑ$7Ð7Ô8ˆEØ�˜E™
œ
Ñ"ˆHØŒN×$Ò$ Y°Ñ6Ô6Ð6Ø×%Ò% gÑ.Ô.Ð.ð �˜T™œÒ"Ð"Ð"Ð"Ð"Ð"r!   c                ód   — | j                              |¦  «         |                      |¦  «         dS )z`
        Send an empty data frame on on a given stream ID with the END_STREAM flag set.
        N)r@   r—   rŽ   )rO   r   rT   s      r   r¡   z HTTP2Connection._send_end_stream  s4   € ð 	Œ×!Ò! )Ñ,Ô,Ð,Ø×!Ò! 'Ñ*Ô*Ð*Ð*Ð*r!   ú%tuple[int, list[tuple[bytes, bytes]]]c                ó\  — 	 |                       ||¦  «        }t          |t          j        j        ¦  «        rnŒ7d}g }|j        €J ‚|j        D ]\\  }}|dk    r%t          |                     dd¬¦  «        ¦  «        }Œ0|                     d¦  «        s| 	                    ||f¦  «         Œ]||fS )	zT
        Return the response status code and headers for a given stream ID.
        TéÈ   Ns   :statusÚasciiÚignore)Úerrorsó   :)
Ú_receive_stream_eventrv   r<   ÚeventsÚResponseReceivedr#   r�   ÚdecodeÚ
startswithÚappend)rO   r   rT   ÚeventÚstatus_coder#   r   r”   s           r   rr   z!HTTP2Connection._receive_response
  sÈ   € ð	Ø×.Ò.¨w¸	ÑBÔBˆEÝ˜%¥¤Ô!;Ñ<Ô<ð Øð	ð
 ˆØ-/ˆØŒ}Ð(Ð(Ð(Ø”Mð 	'ð 	'‰DˆAˆqØ�JŠˆÝ! !§(¢(¨7¸8 (Ñ"DÔ"DÑEÔE��Ø—\’\ $Ñ'Ô'ð 'Ø—’  1˜vÑ&Ô&Ð&øà˜WÐ%Ð%r!   úGenerator[bytes]c              #  ó\  K  — 	 |                       ||¦  «        }t          |t          j        j        ¦  «        rS|j        €J ‚|j        €J ‚|j        }| j                             ||¦  «         |  	                    |¦  «         |j        V — n!t          |t          j        j
        ¦  «        rdS Œª)z]
        Iterator that returns the bytes of the response body for a given stream ID.
        TN)r´   rv   r<   rµ   ÚDataReceivedÚflow_controlled_lengthr¤   r@   Úacknowledge_received_datarŽ   ÚStreamEnded)rO   r   rT   rº   Úamounts        r   Ú_receive_response_bodyz&HTTP2Connection._receive_response_body  sº   è è € ð
	Ø×.Ò.¨w¸	ÑBÔBˆEÝ˜%¥¤Ô!7Ñ8Ô8ð ØÔ3Ð?Ð?Ð?Ø”zÐ-Ð-Ð-ØÔ5�Ø”×8Ò8¸ÀÑKÔKÐKØ×)Ò)¨'Ñ2Ô2Ð2Ø”jÐ Ð Ð Ð Ý˜E¥2¤9Ô#8Ñ9Ô9ð Ø�ð
	r!   úKh2.events.ResponseReceived | h2.events.DataReceived | h2.events.StreamEndedc                ó6  — | j                              |¦  «        s0|                      ||¦  «         | j                              |¦  «        ¯0| j         |                              d¦  «        }t	          |t
          j        j        ¦  «        rt          |¦  «        ‚|S )zƒ
        Return the next available event for a given stream ID.

        Will read more data from the network if required.
        r   )	rK   ÚgetÚ_receive_eventsÚpoprv   r<   rµ   ÚStreamResetr	   )rO   r   rT   rº   s       r   r´   z%HTTP2Connection._receive_stream_event.  s�   € ð ”,×"Ò" 9Ñ-Ô-ð 	5Ø× Ò  ¨)Ñ4Ô4Ð4ð ”,×"Ò" 9Ñ-Ô-ð 	5à”˜YÔ'×+Ò+¨AÑ.Ô.ˆÝ�e�RœYÔ2Ñ3Ô3ð 	-Ý% eÑ,Ô,Ð,Øˆr!   ú
int | Nonec           	     ó¦  — | j         5  | j        �H| j        j        }|r&|r$||k    r| xj        dz  c_        t	          ¦   «         ‚t          | j        ¦  «        ‚|�| j                             |¦  «        �s0|                      |¦  «        }|D �]}t          |t          j        j        ¦  «        rKt          dt          |¦  «        5 }|                      |¦  «         ||_        ddd¦  «         n# 1 swxY w Y   Œmt          |t          j        j        t          j        j        t          j        j        t          j        j        f¦  «        r4|j        | j        v r%| j        |j                                      |¦  «         Œñt          |t          j        j        ¦  «        r|| _        �Œddd¦  «         n# 1 swxY w Y   |                      |¦  «         dS )zp
        Read some data from the network until we see one or more events
        for a given stream ID.
        Nr   Úreceive_remote_settings)rF   rL   Úlast_stream_idrC   r   r	   rK   rÆ   Ú_read_incoming_datarv   r<   rµ   ÚRemoteSettingsChangedr   rb   Ú_receive_remote_settings_changers   r¶   r¾   rÁ   rÉ   rT   r¹   ÚConnectionTerminatedrŽ   )rO   r   rT   rÍ   rµ   rº   r}   s          r   rÇ   zHTTP2Connection._receive_events=  sA  € ð
 Œ_ð #	<ð #	<ØÔ*Ð6Ø!%Ô!<Ô!K�Øð 3 ð 3°IÀÒ4NÐ4NØÐ'Ô'¨1Ñ,Ð'Ô'Ý0Ñ2Ô2Ð2Ý)¨$Ô*EÑFÔFÐFð Ð ¨¬×(8Ò(8¸Ñ(CÔ(CÑ Ø×1Ò1°'Ñ:Ô:�Ø#ð <ñ <�EÝ! %­¬Ô)HÑIÔIð <Ý"Ð#<½fÀgÑNÔNð 7ÐRWØ ×@Ò@ÀÑGÔGÐGØ16˜EÔ.ð7ð 7ð 7ñ 7ô 7ð 7ð 7ð 7ð 7ð 7ð 7øøøð 7ð 7ð 7ð 7øõ $ØåœIÔ6ÝœIÔ2ÝœIÔ1ÝœIÔ1ð	ñô ð <ð !œ?¨d¬lÐ:Ð:Ø œL¨¬Ô9×@Ò@ÀÑGÔGÐGøå# E­2¬9Ô+IÑJÔJð <Ø6;˜Ô3ùðG#	<ð #	<ð #	<ñ #	<ô #	<ð #	<ð #	<ð #	<ð #	<ð #	<ð #	<øøøð #	<ð #	<ð #	<ð #	<ðJ 	×!Ò! 'Ñ*Ô*Ð*Ð*Ð*s7   ˆB<F1ÃC-Ã!F1Ã-C1Ã1F1Ã4C1Ã5B0F1Æ1F5Æ8F5rº   úh2.events.RemoteSettingsChangedc                óÔ  — |j                              t          j        j        j        ¦  «        }|r±t          |j        | j        j	        j
        ¦  «        }|r�|| j        k    r„|| j        k    r4| j                             ¦   «          | xj        dz  c_        || j        k    °4|| j        k     r<| j                             ¦   «          | xj        dz  c_        || j        k     °4d S d S d S d S d S )Nr   )Úchanged_settingsrÆ   r<   r…   r‡   r‰   ÚminÚ	new_valuer@   rg   rh   rf   ri   ro   rk   )rO   rº   rh   Únew_max_streamss       r   rÐ   z/HTTP2Connection._receive_remote_settings_changei  s  € Ø!&Ô!7×!;Ò!;½B¼KÔ<TÔ<kÑ!lÔ!lÐØ!ð 	+Ý!Ø&Ô0Ø”Ô-ÔDñô ˆOð ð + ?°dÔ6GÒ#GÐ#GØ%¨Ô(9Ò9Ð9ØÔ/×7Ò7Ñ9Ô9Ð9ØÐ%Ô%¨Ñ*Ð%Ô%ð &¨Ô(9Ò9Ð9ð &¨Ô(9Ò9Ð9ØÔ/×7Ò7Ñ9Ô9Ð9ØÐ%Ô%¨Ñ*Ð%Ô%ð &¨Ô(9Ò9Ð9Ð9Ð9ð	+ð 	+ð
+ð +Ð#GÐ#Gð :Ð9r!   c                óÂ  — | j         5  || j        v r!| j                             ¦   «          | j        |= | j        r| j        s|                      ¦   «          nq| j        t          j        k    r\| j        sUt          j	        | _        | j
        �"t          j        ¦   «         }|| j
        z   | _        | j        r|                      ¦   «          d d d ¦  «         d S # 1 swxY w Y   d S ©N)rE   rK   ri   ro   rL   re   rA   r&   r+   r,   r;   ÚtimeÚ	monotonicrB   rI   )rO   rT   Únows      r   ru   z HTTP2Connection._response_closedx  s  € ØÔð 	!ð 	!Ø˜DœLÐ(Ð(ØÔ+×3Ò3Ñ5Ô5Ð5Ø”L Ð+ØÔ*ð 	!°4´<ð 	!Ø—
’
‘”��à”Õ 3Ô :Ò:Ð:À4Ä<Ð:Ý1Ô6�”ØÔ)Ð5Ýœ.Ñ*Ô*�CØ&)¨DÔ,BÑ&B�D”OØÔ,ð !Ø—J’J‘L”L�Lð	!ð 	!ð 	!ñ 	!ô 	!ð 	!ð 	!ð 	!ð 	!ð 	!ð 	!ð 	!øøøð 	!ð 	!ð 	!ð 	!ð 	!ð 	!s   ˆB?CÃCÃCc                óŒ   — | j                              ¦   «          t          j        | _        | j                             ¦   «          d S rÙ   )r@   Úclose_connectionr&   r-   rA   r:   re   ©rO   s    r   re   zHTTP2Connection.closeˆ  s=   € ð 	Œ×'Ò'Ñ)Ô)Ð)Ý)Ô0ˆŒØÔ×"Ò"Ñ$Ô$Ð$Ð$Ð$r!   úlist[h2.events.Event]c                ój  — |j                              di ¦  «        }|                     dd ¦  «        }| j        �| j        ‚	 | j                             | j        |¦  «        }|dk    rt          d¦  «        ‚n"# t          $ r}|| _        d| _        |‚d }~ww xY w| j	         
                    |¦  «        }|S )NÚtimeoutÚreadr!   zServer disconnectedT)r]   rÆ   rM   r:   rã   ÚREAD_NUM_BYTESr	   Ú	ExceptionrJ   r@   Úreceive_data)rO   r   Útimeoutsrâ   r¤   ry   rµ   s          r   rÎ   z#HTTP2Connection._read_incoming_data‘  sÎ   € ØÔ%×)Ò)¨)°RÑ8Ô8ˆØ—,’,˜v tÑ,Ô,ˆàÔÐ+ØÔ&Ð&ð	ØÔ'×,Ò,¨TÔ-@À'ÑJÔJˆDØ�sŠ{ˆ{Ý)Ð*?Ñ@Ô@Ð@ð øåð 	ð 	ð 	ð $'ˆDÔ Ø%)ˆDÔ"ØˆIøøøøð	øøøð )-¬×(CÒ(CÀDÑ(IÔ(Iˆàˆs   Á5A7 Á7
BÂBÂBc                óv  — |j                              di ¦  «        }|                     dd ¦  «        }| j        5  | j                             ¦   «         }| j        �| j        ‚	 | j                             ||¦  «         n"# t          $ r}|| _        d| _	        |‚d }~ww xY w	 d d d ¦  «         d S # 1 swxY w Y   d S )Nrâ   ÚwriteT)
r]   rÆ   rG   r@   Údata_to_sendrN   r:   ré   rå   rJ   )rO   r   rç   râ   rê   ry   s         r   rŽ   z$HTTP2Connection._write_outgoing_data­  s  € ØÔ%×)Ò)¨)°RÑ8Ô8ˆØ—,’,˜w¨Ñ-Ô-ˆàÔð 	ð 	Øœ>×6Ò6Ñ8Ô8ˆLàÔ$Ð0ØÔ+Ð+ðØÔ$×*Ò*¨<¸ÑAÔAÐAÐAøÝð ð ð ð ),�Ô%Ø)-�Ô&Ø�	øøøøðøøøð Bð	ð 	ð 	ñ 	ô 	ð 	ð 	ð 	ð 	ð 	ð 	ð 	øøøð 	ð 	ð 	ð 	ð 	ð 	s5   ¹(B.Á"A>Á=B.Á>
BÂBÂBÂB.Â.B2Â5B2c                ó   — | j                              |¦  «        }| j         j        }t          ||¦  «        }|dk    rQ|                      |¦  «         | j                              |¦  «        }| j         j        }t          ||¦  «        }|dk    °Q|S )a  
        Returns the maximum allowable outgoing flow for a given stream.

        If the allowable flow is zero, then waits on the network until
        WindowUpdated frames have increased the flow rate.
        https://tools.ietf.org/html/rfc7540#section-6.9
        r   )r@   Úlocal_flow_control_windowÚmax_outbound_frame_sizerÕ   rÇ   )rO   r   rT   Ú
local_flowÚmax_frame_sizeÚflows         r   r¨   z'HTTP2Connection._wait_for_outgoing_flowÈ  s�   € ð œ.×BÒBÀ9ÑMÔMˆ
Ø"œnÔDˆÝ�:˜~Ñ.Ô.ˆØ�aŠiˆiØ× Ò  Ñ)Ô)Ð)Øœ×AÒAÀ)ÑLÔLˆJØ!œ^ÔCˆNÝ�z >Ñ2Ô2ˆDð	 �aŠiˆið
 ˆr!   r   c                ó   — || j         k    S rÙ   )r9   ©rO   r3   s     r   r_   z"HTTP2Connection.can_handle_requestÜ  s   € Ø˜œÒ%Ð%r!   c                ó,   — |                       ¦   «          S rÙ   )Ú	is_closedrß   s    r   Úis_connectedzHTTP2Connection.is_connectedß  s   € Ø—>’>Ñ#Ô#Ð#Ð#r!   c                ó    — | j         t          j        k    o9| j         o1| j         o)| j        j        j        t          j	        j
        j        k     S rÙ   )rA   r&   r-   rJ   rI   r@   Ústate_machineÚstater<   r=   ÚConnectionStaterß   s    r   Úis_availablezHTTP2Connection.is_availableâ  sV   € àŒKÕ.Ô5Ò5ð aØÔ*Ð*ðaàÔ-Ð-ðað ”^Ô1Ô7½2¼=Ô;XÔ;_Ò_Ð`ð		
r!   c                óJ   — t          j        ¦   «         }| j        }|d uo||k    S rÙ   )rÚ   rÛ   rB   )rO   rÜ   Ú	expire_ats      r   Úhas_expiredzHTTP2Connection.has_expiredê  s,   € ÝŒnÑÔˆð ”Oˆ	Ø Ð$Ð8¨¨yªÐ8r!   c                ó,   — | j         t          j        k    S rÙ   )rA   r&   r,   rß   s    r   Úis_idlezHTTP2Connection.is_idleñ  s   € ØŒ{Õ1Ô6Ò6Ð6r!   c                ó   — dS )NTr.   rß   s    r   Úcan_multiplexzHTTP2Connection.can_multiplexô  s   € Øˆtr!   c                ó,   — | j         t          j        k    S rÙ   )rA   r&   r-   rß   s    r   rô   zHTTP2Connection.is_closed÷  s   € ØŒ{Õ1Ô8Ò8Ð8r!   Ústrc                ó\   — t          | j        ¦  «        }|›d| j        j        › d| j        › �S )Nz
, HTTP/2, ú, Request Count: )r  r9   rA   ÚnamerC   rò   s     r   ÚinfozHTTP2Connection.infoú  s5   € Ý�T”\Ñ"Ô"ˆØÐ^Ð^ d¤kÔ&6Ð^Ð^ÈÔI\Ð^Ð^Ð^r!   c           	     ó~   — | j         j        }t          | j        ¦  «        }d|› d|›d| j        j        › d| j        › d�	S )Nú<z [z, r  z]>)Ú	__class__r(   r  r9   rA   r  rC   )rO   Ú
class_namer3   s      r   Ú__repr__zHTTP2Connection.__repr__þ  sM   € Ø”^Ô,ˆ
Ý�T”\Ñ"Ô"ˆØg�:ÐgÐg ÐgÐg¨T¬[Ô-=ÐgÐgÐPTÔPcÐgÐgÐgÐgr!   c                ó   — | S rÙ   r.   rß   s    r   Ú	__enter__zHTTP2Connection.__enter__  s   € Øˆr!   Úexc_typeútype[BaseException] | NoneÚ	exc_valueúBaseException | NoneÚ	tracebackútypes.TracebackType | Nonec                ó.   — |                       ¦   «          d S rÙ   )re   )rO   r  r  r  s       r   Ú__exit__zHTTP2Connection.__exit__	  s   € ð 	�
Š
‰Œˆˆˆr!   rÙ   )r3   r
   r4   r   r5   r6   )r   r   r   r   )r   r   r   r   )r   r   rT   r�   r   r   )r   r   rT   r�   r¤   r¥   r   r   )r   r   rT   r�   r   r­   )r   r   rT   r�   r   r¼   )r   r   rT   r�   r   rÄ   )r   r   rT   rÊ   r   r   )rº   rÒ   r   r   )rT   r�   r   r   ©r   r   )r   r   r   rà   )r   r   rT   r�   r   r�   )r3   r
   r   r   )r   r   )r   r  )r   r0   )NNN)r  r  r  r  r  r  r   r   )$r(   r)   r*   rä   r<   r8   ÚH2Configurationr?   rP   r~   rc   rp   rq   r    r¡   rr   rÃ   r´   rÇ   rÐ   ru   re   rÎ   rŽ   r¨   r_   rõ   rú   rý   rÿ   r  rô   r  r  r  r  r.   r!   r   r0   r0   %   s�  € € € € € Ø€NØŒY×&Ò&ÀÐ&ÑFÔF€Fð *.ð	 7ð  7ð  7ð  7ð  7ðD\ð \ð \ð \ð|+ð +ð +ð +ð>+ð +ð +ð +ð>2ð 2ð 2ð 2ð
/ð 
/ð 
/ð 
/ð+ð +ð +ð +ð&ð &ð &ð &ð(ð ð ð ð ð ð ð ð*+ð *+ð *+ð *+ð *+ðX+ð +ð +ð +ð!ð !ð !ð !ð %ð %ð %ð %ðð ð ð ð8ð ð ð ð6ð ð ð ð(&ð &ð &ð &ð$ð $ð $ð $ð
ð 
ð 
ð 
ð9ð 9ð 9ð 9ð7ð 7ð 7ð 7ðð ð ð ð9ð 9ð 9ð 9ð_ð _ð _ð _ðhð hð hð hðð ð ð ð
 04Ø*.Ø04ð	ð ð ð ð ð ð r!   r0   c                  ó&   — e Zd Zdd	„Zdd„Zdd„ZdS )rt   r=   r0   r   r   rT   r�   r   r   c                ó>   — || _         || _        || _        d| _        d S )NF)Ú_connectionÚ_requestÚ
_stream_idÚ_closed)rO   r=   r   rT   s       r   rP   z"HTTP2ConnectionByteStream.__init__  s#   € Ø%ˆÔØˆŒØ#ˆŒØˆŒˆˆr!   r¼   c              #  óÚ  K  — | j         | j        dœ}	 t          dt          | j         |¦  «        5  t	          | j                             | j         | j        ¬¦  «        ¦  «        5 }|D ]}|V — Œ	 d d d ¦  «         n# 1 swxY w Y   d d d ¦  «         d S # 1 swxY w Y   d S # t          $ rA}t          ¦   «         5  |  	                    ¦   «          d d d ¦  «         n# 1 swxY w Y   |‚d }~ww xY w)NrS   Úreceive_response_body)
r  r  r   rb   r   r  rÃ   rd   r   re   )rO   r|   r¢   r£   ry   s        r   Ú__iter__z"HTTP2ConnectionByteStream.__iter__  sÎ  è è € Ø!œ]¸¼ÐIÐIˆð	ÝÐ.µ¸¼ÀvÑNÔNð $ð $Ý!ØÔ$×;Ò;ÀDÄMÐ]aÔ]lÐ;ÑmÔmñô ð $àØ!)ð $ð $˜Ø#˜˜˜˜ð$ð$ð $ð $ñ $ô $ð $ð $ð $ð $ð $ð $øøøð $ð $ð $ð $ð$ð $ð $ñ $ô $ð $ð $ð $ð $ð $ð $ð $øøøð $ð $ð $ð $ð $ð $øõ ð 	ð 	ð 	õ $Ñ%Ô%ð ð Ø—
’
‘”�ðð ð ñ ô ð ð ð ð ð ð øøøð ð ð ð àˆIøøøøð	øøøs‚   “B ¯4BÁ#
A:Á.BÁ:A>	Á>BÂA>	ÂBÂB ÂBÂB ÂBÂB Â
C*Â)C%Â7CÃC%ÃC	ÃC%ÃC	Ã C%Ã%C*c                óâ   — | j         sgd| _         d| j        i}t          dt          | j        |¦  «        5  | j                             | j        ¬¦  «         d d d ¦  «         d S # 1 swxY w Y   d S d S )NTrT   r^   rX   )r  r  r   rb   r  r  ru   )rO   r|   s     r   re   zHTTP2ConnectionByteStream.close*  s×   € ØŒ|ð 	MØˆDŒLØ! 4¤?Ð3ˆFÝÐ(­&°$´-ÀÑHÔHð Mð MØÔ ×1Ò1¸D¼OÐ1ÑLÔLÐLðMð Mð Mñ Mô Mð Mð Mð Mð Mð Mð Mð Møøøð Mð Mð Mð Mð Mð Mð	Mð 	Ms   ´!A"Á"A&Á)A&N)r=   r0   r   r   rT   r�   r   r   )r   r¼   r  )r(   r)   r*   rP   r!  re   r.   r!   r   rt   rt     sV   € € € € € ðð ð ð ðð ð ð ð"Mð Mð Mð Mð Mð Mr!   rt   )r   r   r   r   )*Ú
__future__r   ÚenumÚloggingrÚ   Útypesrž   Úcollections.abcr   Ú	h2.configr<   Úh2.connectionÚ	h2.eventsÚh2.exceptionsÚh2.settingsÚ_backends.baser   Ú_exceptionsr   r   r	   Ú_modelsr
   r   r   Ú_synchronizationr   r   r   Ú_tracer   Ú_utilsr   Ú
interfacesr   Ú	getLoggerrb   r$   ÚIntEnumr&   r0   rt   r.   r!   r   ú<module>r6     sû  ðØ "Ð "Ð "Ð "Ð "Ð "à €€€Ø €€€Ø €€€Ø €€€Ø €€€Ø %Ð %Ð %Ð %Ð %Ð %à Ð Ð Ð Ø Ð Ð Ð Ø Ð Ð Ð Ø Ð Ð Ð Ø Ð Ð Ð à *Ð *Ð *Ð *Ð *Ð *Ø YÐ YÐ YÐ YÐ YÐ YÐ YÐ YÐ YÐ YØ /Ð /Ð /Ð /Ð /Ð /Ð /Ð /Ð /Ð /Ø BÐ BÐ BÐ BÐ BÐ BÐ BÐ BÐ BÐ BØ Ð Ð Ð Ð Ð Ø !Ð !Ð !Ð !Ð !Ð !Ø +Ð +Ð +Ð +Ð +Ð +à	ˆÔ	Ð,Ñ	-Ô	-€ðqð qð qð qðð ð ð ð ˜$œ,ñ ô ð ðjð jð jð jð jÐ)ñ jô jð jðZMð Mð Mð Mð Mñ Mô Mð Mð Mð Mr!   