+
    üg©jDj  ã                  óî  € ^ RI Ht ^ RIt^ RIt^ RIt^ RIHt ^RIHtH	t	H
t
HtHtHt ^RIHt ^RIHtHtHtHtHtHtHtHtHtHt ^RIHtHt ^RIHt ^R	I H!t!H"t"H#t#H$t$ . ROt%]],          ],          t&  ! R R]PN                  4      t(](PR                  t)](PT                  t* ! R R]PN                  4      t+]+PX                  t,]+PZ                  t-]+P\                  t.]+P^                  t/Rt0  ! R R
4      t1R# )é    )ÚannotationsN)Ú	Generator)ÚConnectionClosedÚConnectionClosedErrorÚConnectionClosedOKÚInvalidStateÚPayloadTooBigÚProtocolError)Ú	Extension)
ÚBINARYÚCLOSEÚCONTÚOK_CLOSE_CODESÚPINGÚPONGÚTEXTÚCloseÚ	CloseCodeÚFrame)ÚRequestÚResponse)ÚStreamReader)Ú	BytesLikeÚ
LoggerLikeÚOriginÚSubprotocolÚProtocolÚSideÚStatec                  ó0   € ] tR t^-tRt]! ^4      w  ttRtR# )r   z6A WebSocket connection is either a server or a client.© N)	Ú__name__Ú
__module__Ú__qualname__Ú__firstlineno__Ú__doc__ÚrangeÚSERVERÚCLIENTÚ__static_attributes__r!   ó    ÚN/var/www/html/bestweb/venv/lib/python3.14/site-packages/websockets/protocol.pyr   r   -   s   † Ù@á˜1“X�N€FŒFr+   c                  ó4   € ] tR t^7tRt]! ^4      w  tttt	Rt
R# )r   z6A WebSocket connection is in one of these four states.r!   N)r"   r#   r$   r%   r&   r'   Ú
CONNECTINGÚOPENÚCLOSINGÚCLOSEDr*   r!   r+   r,   r   r   7   s   † Ù@á(-¨a«Ñ%€J��gœvr+   r+   c                  ó”  € ] tR t^GtRtR]RR5RR/R R llt]R R	 l4       t]P                  R
 R l4       t]R R l4       t
]R R l4       t]R R l4       tR R ltR R ltR R ltR6R R lltR6R R lltR7R R lltR R ltR  R! ltR8R" R# lltR$ R% ltR& R' ltR( R) ltR* R+ ltR, R- ltR. R/ ltR0 R1 ltR2 R3 ltR4tR# )9r   aÃ  
Sans-I/O implementation of a WebSocket connection.

Args:
    side: :attr:`~Side.CLIENT` or :attr:`~Side.SERVER`.
    state: Initial state of the WebSocket connection.
    max_size: Maximum size of incoming messages in bytes.
        :obj:`None` disables the limit. You may pass a ``(max_message_size,
        max_fragment_size)`` tuple to set different limits for messages and
        fragments when you expect long messages sent in short fragments.
    logger: Logger for this connection; depending on ``side``,
        defaults to ``logging.getLogger("websockets.client")``
        or ``logging.getLogger("websockets.server")``;
        see the :doc:`logging guide <../../topics/logging>` for details.

ÚstateÚmax_sizeÚloggerNc          
     ó,   € V ^8„  d   QhRRRRRRRRR	R
/# )é   Úsider   r3   r   r4   z*tuple[int | None, int | None] | int | Noner5   zLoggerLike | NoneÚreturnÚNoner!   )Úformats   "r,   Ú__annotate__ÚProtocol.__annotate__Y   sC   € ÷ E1ñ E1àðE1ð ð	E1ð
 =ðE1ð "ðE1ð 
ñE1r+   c               	ó°  € \         P                  ! 4       V n         Vf2   \        P                  ! RVP
                  P                  4        24      pW@n         VP                  \        P                  4      V n
        Wn        W n        \        V\        4      '       g   Vf   VR uV n        V n        MVw  V n        V n        R V n        RV n        R V n        . V n        R V n        R V n        R V n        R V n        R V n         RV n        \7        4       V n        . V n        . V n        V P?                  4       V n         \C        V P@                  4       R V n"        R # )Nzwebsockets.F)#ÚuuidÚuuid4ÚidÚloggingÚ	getLoggerÚnameÚlowerr5   ÚisEnabledForÚDEBUGÚdebugr8   r3   Ú
isinstanceÚintÚmax_message_sizeÚmax_fragment_sizeÚcurrent_sizeÚexpect_continuation_frameÚoriginÚ
extensionsÚsubprotocolÚ
close_rcvdÚ
close_sentÚclose_rcvd_then_sentÚhandshake_excÚeof_sentr   ÚreaderÚeventsÚwritesÚparseÚparserÚnextÚ
parser_exc)Úselfr8   r3   r4   r5   s   &&$$$r,   Ú__init__ÚProtocol.__init__Y   s7  € ô "ŸZšZ›\ˆŒØBð Š>Ü×&Ò&¨°T·Y±Y·_±_Ó5FÐ4GÐ'HÓIˆFØ"(ŒØ)ð ×(Ñ(¬¯©Ó7ˆŒ
ð Œ	ð Œ
ô �h¤×$Ò$¨Ò(8Ø<DÀdÐ9ˆDÔ! 4Õ#9à<DÑ9ˆDÔ! 4Ô#9ð )-ˆÔð */ˆÔ&ð &*ˆŒØ+-ˆŒØ/3ˆÔð )-ˆŒØ(,ˆŒØ15ˆÔ!ð 04ˆÔð	ð ˆŒô #“nˆŒØ#%ˆŒØ#%ˆŒØ—j‘j“lˆŒÜˆT�[‰[ÔØ,0ˆŽr+   c               ó   € V ^8„  d   QhRR/# )r7   r9   r   r!   )r;   s   "r,   r<   r=   ¡   s   € ÷ ñ �uñ r+   c                ó   € V P                   # )au  
State of the WebSocket connection.

Defined in 4.1_, 4.2_, 7.1.3_, and 7.1.4_ of :rfc:`6455`.

.. _4.1: https://datatracker.ietf.org/doc/html/rfc6455#section-4.1
.. _4.2: https://datatracker.ietf.org/doc/html/rfc6455#section-4.2
.. _7.1.3: https://datatracker.ietf.org/doc/html/rfc6455#section-7.1.3
.. _7.1.4: https://datatracker.ietf.org/doc/html/rfc6455#section-7.1.4

)Ú_state©r^   s   &r,   r3   ÚProtocol.state    s   € ð �{‰{Ðr+   c               ó    € V ^8„  d   QhRRRR/# )r7   r3   r   r9   r:   r!   )r;   s   "r,   r<   r=   °   s   € ÷ ñ ˜5ð  Tñ r+   c                	ó‚   € V P                   '       d'   V P                  P                  R VP                  4       Wn        R# )z= connection is %sN)rH   r5   rD   rc   )r^   r3   s   &&r,   r3   re   ¯   s)   € à�:�:ˆ:Ø�K‰K×ÑÐ2°E·J±JÔ?ØŽr+   c               ó   € V ^8„  d   QhRR/# )r7   r9   z
int | Noner!   )r;   s   "r,   r<   r=   ¶   s   € ÷ (ñ (˜Jñ (r+   c                ó–   € V P                   \        Jd   R# V P                  f   \        P                  # V P                  P
                  # )zÖ
WebSocket close code received from the remote endpoint.

Defined in 7.1.5_ of :rfc:`6455`.

.. _7.1.5: https://datatracker.ietf.org/doc/html/rfc6455#section-7.1.5

:obj:`None` if the connection isn't closed yet.

N)r3   r1   rR   r   ÚABNORMAL_CLOSUREÚcoderd   s   &r,   Ú
close_codeÚProtocol.close_codeµ   s9   € ð �:‰:œVÓ#ÙØ�_‰_Ò$Ü×-Ñ-Ð-à—?‘?×'Ñ'Ð'r+   c               ó   € V ^8„  d   QhRR/# )r7   r9   z
str | Noner!   )r;   s   "r,   r<   r=   É   s   € ÷ *ñ *˜jñ *r+   c                óz   € V P                   \        Jd   R# V P                  f   R# V P                  P                  # )zÙ
WebSocket close reason  received from the remote endpoint.

Defined in 7.1.6_ of :rfc:`6455`.

.. _7.1.6: https://datatracker.ietf.org/doc/html/rfc6455#section-7.1.6

:obj:`None` if the connection isn't closed yet.

NÚ )r3   r1   rR   Úreasonrd   s   &r,   Úclose_reasonÚProtocol.close_reasonÈ   s0   € ð �:‰:œVÓ#ÙØ�_‰_Ò$Ùà—?‘?×)Ñ)Ð)r+   c               ó   € V ^8„  d   QhRR/# )r7   r9   r   r!   )r;   s   "r,   r<   r=   Ü   s   € ÷ !ñ !Ð+ñ !r+   c                ó|  € V P                   \        J g   Q R4       hV P                  eT   V P                  eF   V P                  P                  \
        9   d'   V P                  P                  \
        9   d   \        pM\        pV! V P                  V P                  V P                  4      pV P                  Vn
        V# )a   
Exception to raise when trying to interact with a closed connection.

Don't raise this exception while the connection :attr:`state`
is :attr:`~websockets.protocol.State.CLOSING`; wait until
it's :attr:`~websockets.protocol.State.CLOSED`.

Indeed, the exception includes the close code and reason, which are
known only once the connection is closed.

Raises:
    AssertionError: If the connection isn't closed yet.

zconnection isn't closed yet)r3   r1   rR   rS   rk   r   r   r   rT   r]   Ú	__cause__)r^   Úexc_typeÚexcs   &  r,   Ú	close_excÚProtocol.close_excÛ   s“   € ð  �z‰zœVÓ#ÐBÐ%BÓBÐ#ð �O‰OÒ'Ø—‘Ò+Ø—‘×$Ñ$¬Ô6Ø—‘×$Ñ$¬Ô6ä)‰Hä,ˆHÙ (Ø�O‰OØ�O‰OØ×%Ñ%ó!
ˆð Ÿ™ˆŒØˆ
r+   c               ó    € V ^8„  d   QhRRRR/# )r7   Údatazbytes | bytearrayr9   r:   r!   )r;   s   "r,   r<   r=     s   € ÷ ñ Ð!2ð °tñ r+   c                óf   € V P                   P                  V4       \        V P                  4       R# )a  
Receive data from the network.

After calling this method:

- You must call :meth:`data_to_send` and send this data to the network.
- You should call :meth:`events_received` and process resulting events.

Raises:
    EOFError: If :meth:`receive_eof` was called earlier.

N)rW   Ú	feed_datar\   r[   ©r^   r|   s   &&r,   Úreceive_dataÚProtocol.receive_data  s"   € ð 	�‰×Ñ˜dÔ#ÜˆT�[‰[Ör+   c               ó   € V ^8„  d   QhRR/# ©r7   r9   r:   r!   )r;   s   "r,   r<   r=     s   € ÷ ñ ˜Tñ r+   c                ó    € V P                   P                  '       d   R# V P                   P                  4        \        V P                  4       R# )aa  
Receive the end of the data stream from the network.

After calling this method:

- You must call :meth:`data_to_send` and send this data to the network;
  it will return ``[b""]``, signaling the end of the stream, or ``[]``.
- You aren't expected to call :meth:`events_received`; it won't return
  any new events.

:meth:`receive_eof` is idempotent.

N)rW   ÚeofÚfeed_eofr\   r[   rd   s   &r,   Úreceive_eofÚProtocol.receive_eof  s0   € ð �;‰;�?�?ˆ?ÙØ�‰×ÑÔÜˆT�[‰[Ör+   c               ó$   € V ^8„  d   QhRRRRRR/# ©r7   r|   r   ÚfinÚboolr9   r:   r!   )r;   s   "r,   r<   r=   &  s!   € ÷ 0ñ 0 ið 0°dð 0¸tñ 0r+   c                ó  € V P                   '       g   \        R4      hV P                  \        Jd1   \	        RV P
                  P                  P                  4        24      hV'       * V n         V P                  \        \        W4      4       R# )a�  
Send a `Continuation frame`_.

.. _Continuation frame:
    https://datatracker.ietf.org/doc/html/rfc6455#section-5.6

Parameters:
    data: payload containing the same kind of data
        as the initial frame.
    fin: FIN bit; set it to :obj:`True` if this is the last frame
        of a fragmented message and to :obj:`False` otherwise.

Raises:
    ProtocolError: If a fragmented message isn't in progress.

úunexpected continuation frameúconnection is N)rN   r
   rc   r/   r   r3   rD   rE   Ú
send_framer   r   ©r^   r|   r‹   s   &&&r,   Úsend_continuationÚProtocol.send_continuation&  si   € ð" ×-×-Ð-ÜÐ ?Ó@Ð@Ø�;‰;œdÓ"Ü °·
±
·±×0EÑ0EÓ0GÐ/HÐIÓJÐJØ-0¬ˆÔ&Ø�‰œœd DÓ.Ö/r+   c               ó$   € V ^8„  d   QhRRRRRR/# rŠ   r!   )r;   s   "r,   r<   r=   >  s!   € ÷ 0ñ 0˜ið 0¨dð 0¸dñ 0r+   c                ó  € V P                   '       d   \        R4      hV P                  \        Jd1   \	        RV P
                  P                  P                  4        24      hV'       * V n         V P                  \        \        W4      4       R# )aS  
Send a `Text frame`_.

.. _Text frame:
    https://datatracker.ietf.org/doc/html/rfc6455#section-5.6

Parameters:
    data: payload containing text encoded with UTF-8.
    fin: FIN bit; set it to :obj:`False` if this is the first frame of
        a fragmented message.

Raises:
    ProtocolError: If a fragmented message is in progress.

úexpected a continuation framer�   N)rN   r
   rc   r/   r   r3   rD   rE   r�   r   r   r‘   s   &&&r,   Ú	send_textÚProtocol.send_text>  si   € ð  ×)×)Ð)ÜÐ ?Ó@Ð@Ø�;‰;œdÓ"Ü °·
±
·±×0EÑ0EÓ0GÐ/HÐIÓJÐJØ-0¬ˆÔ&Ø�‰œœd DÓ.Ö/r+   c               ó$   € V ^8„  d   QhRRRRRR/# rŠ   r!   )r;   s   "r,   r<   r=   U  s!   € ÷ 2ñ 2 	ð 2°ð 2Àñ 2r+   c                ó  € V P                   '       d   \        R4      hV P                  \        Jd1   \	        RV P
                  P                  P                  4        24      hV'       * V n         V P                  \        \        W4      4       R# )aU  
Send a `Binary frame`_.

.. _Binary frame:
    https://datatracker.ietf.org/doc/html/rfc6455#section-5.6

Parameters:
    data: payload containing arbitrary binary data.
    fin: FIN bit; set it to :obj:`False` if this is the first frame of
        a fragmented message.

Raises:
    ProtocolError: If a fragmented message is in progress.

r–   r�   N)rN   r
   rc   r/   r   r3   rD   rE   r�   r   r   r‘   s   &&&r,   Úsend_binaryÚProtocol.send_binaryU  si   € ð  ×)×)Ð)ÜÐ ?Ó@Ð@Ø�;‰;œdÓ"Ü °·
±
·±×0EÑ0EÓ0GÐ/HÐIÓJÐJØ-0¬ˆÔ&Ø�‰œœf dÓ0Ö1r+   c               ó$   € V ^8„  d   QhRRRRRR/# )r7   rk   zCloseCode | int | Nonerq   Ústrr9   r:   r!   )r;   s   "r,   r<   r=   l  s#   € ÷ "ñ "Ð5ð "Àcð "ÐSWñ "r+   c                óª  € V P                   \        Jd1   \        RV P                  P                  P                  4        24      hVf0   VR8w  d   \        R4      h\        \        P                  R4      pRpM\        W4      pVP                  4       pV P                  \        \        V4      4       V P                  e   Q hW0n        \         V n        R# )a  
Send a `Close frame`_.

.. _Close frame:
    https://datatracker.ietf.org/doc/html/rfc6455#section-5.5.1

Parameters:
    code: close code.
    reason: close reason.

Raises:
    ProtocolError: If the code isn't valid or if a reason is provided
        without a code.

r�   Nrp   z#cannot send a reason without a coder+   )rc   r/   r   r3   rD   rE   r
   r   r   ÚNO_STATUS_RCVDÚ	serializer�   r   r   rR   rS   r0   ©r^   rk   rq   Úcloser|   s   &&&  r,   Ú
send_closeÚProtocol.send_closel  sª   € ð$ �;‰;œdÓ"Ü °·
±
·±×0EÑ0EÓ0GÐ/HÐIÓJÐJØŠ<Ø˜Œ|Ü#Ð$IÓJÐJÜœ)×2Ñ2°BÓ7ˆEØ‰Dä˜$Ó'ˆEØ—?‘?Ó$ˆDà�‰œœe TÓ*Ô+ð �‰Ò&Ð&Ð&ØŒÜˆŽ
r+   c               ó    € V ^8„  d   QhRRRR/# ©r7   r|   r   r9   r:   r!   )r;   s   "r,   r<   r=   �  ó   € ÷ +ñ +˜ið +¨Dñ +r+   c                óô   € V P                   \        JdE   V P                   \        Jd1   \        RV P                  P
                  P                  4        24      hV P                  \        \        V4      4       R# )zª
Send a `Ping frame`_.

.. _Ping frame:
    https://datatracker.ietf.org/doc/html/rfc6455#section-5.5.2

Parameters:
    data: payload containing arbitrary binary data.

r�   N)
rc   r/   r0   r   r3   rD   rE   r�   r   r   r   s   &&r,   Ú	send_pingÚProtocol.send_ping�  óR   € ð �;‰;œdÓ" t§{¡{¼'Ó'AÜ °·
±
·±×0EÑ0EÓ0GÐ/HÐIÓJÐJØ�‰œœd DÓ)Ö*r+   c               ó    € V ^8„  d   QhRRRR/# r§   r!   )r;   s   "r,   r<   r=      r¨   r+   c                óô   € V P                   \        JdE   V P                   \        Jd1   \        RV P                  P
                  P                  4        24      hV P                  \        \        V4      4       R# )zª
Send a `Pong frame`_.

.. _Pong frame:
    https://datatracker.ietf.org/doc/html/rfc6455#section-5.5.3

Parameters:
    data: payload containing arbitrary binary data.

r�   N)
rc   r/   r0   r   r3   rD   rE   r�   r   r   r   s   &&r,   Ú	send_pongÚProtocol.send_pong   r¬   r+   c               ó$   € V ^8„  d   QhRRRRRR/# )r7   rk   zCloseCode | intrq   rž   r9   r:   r!   )r;   s   "r,   r<   r=   °  s!   € ÷ -ñ -˜ð -°#ð -¸tñ -r+   c                óØ  € V P                   \        J dv   V\        P                  8w  da   \	        W4      pVP                  4       pV P                  \        \        V4      4       W0n	        V P                  e   RV n        \        V n         V P                  \        J d#   V P                  '       g   V P!                  4        V P#                  4       V n        \'        V P$                  4       R# )z÷
`Fail the WebSocket connection`_.

.. _Fail the WebSocket connection:
    https://datatracker.ietf.org/doc/html/rfc6455#section-7.1.7

Parameters:
    code: close code
    reason: close reason

Raises:
    ProtocolError: If the code isn't valid.
NT)r3   r/   r   rj   r   r¡   r�   r   r   rS   rR   rT   r0   r8   r(   rV   Úsend_eofÚdiscardr[   r\   r¢   s   &&&  r,   ÚfailÚProtocol.fail°  s¡   € ð& �:‰:œÓØ”y×1Ñ1Ô1Ü˜dÓ+�Ø—‘Ó(�Ø—‘¤¤e¨TÓ 2Ô3Ø"'”ð
 —?‘?Ò.Ø04�DÔ-Ü$�”
ð �9‰9œÓ t§}§} }Ø�M‰MŒOð —l‘l“nˆŒÜˆT�[‰[Ör+   c               ó   € V ^8„  d   QhRR/# )r7   r9   zlist[Event]r!   )r;   s   "r,   r<   r=   á  s   € ÷ ñ  ñ r+   c                ó,   € V P                   . uqn         V# )zú
Fetch events generated from data received from the network.

Call this method immediately after any of the ``receive_*()`` methods.

Process resulting events, likely by passing them to the application.

Returns:
    Events read from the connection.
)rX   )r^   rX   s   & r,   Úevents_receivedÚProtocol.events_receivedá  s   € ð #Ÿk™k¨2Ðˆ”Øˆr+   c               ó   € V ^8„  d   QhRR/# )r7   r9   zlist[bytes]r!   )r;   s   "r,   r<   r=   ñ  s   € ÷ ñ ˜kñ r+   c                ó,   € V P                   . uqn         V# )ay  
Obtain data to send to the network.

Call this method immediately after any of the ``receive_*()``,
``send_*()``, or :meth:`fail` methods.

Write resulting data to the connection.

The empty bytestring :data:`~websockets.protocol.SEND_EOF` signals
the end of the data stream. When you receive it, half-close the TCP
connection.

Returns:
    Data to write to the connection.

)rY   )r^   rY   s   & r,   Údata_to_sendÚProtocol.data_to_sendñ  s   € ð" #Ÿk™k¨2Ðˆ”Øˆr+   c               ó   € V ^8„  d   QhRR/# )r7   r9   rŒ   r!   )r;   s   "r,   r<   r=     s   € ÷ )ñ ) ñ )r+   c                óÊ   € V P                   \        J d   R# V P                   \        J d   R# V P                   \        J d   R# V P                   \        J g   Q hV P
                  # )ai  
Tell if the TCP connection is expected to close soon.

Call this method immediately after any of the ``receive_*()``,
``send_close()``, or :meth:`fail` methods.

If it returns :obj:`True`, schedule closing the TCP connection after a
short timeout if the other side hasn't already closed it.

Returns:
    Whether the TCP connection is expected to close soon.

FT)r3   r/   r0   r1   r.   rV   rd   s   &r,   Úclose_expectedÚProtocol.close_expected  sN   € ðD �:‰:œÓÙØ�:‰:œÓ ÙØ�:‰:œÓÙØ�z‰zœZÓ'Ð'Ð'Ø�}‰}Ðr+   c               ó   € V ^8„  d   QhRR/# ©r7   r9   zGenerator[None]r!   )r;   s   "r,   r<   r=   2  s   € ÷ MCñ MC�ñ MCr+   c              #  ó0  "  €   V P                   P                  4        Rj  x€L
 '       d9   V P                  '       d   V P                  P                  R4       \	        R4      hRpV P
                  e9   V P                  f   V P
                  pMV P
                  V P                  ,
          pV P                  e'   Vf   V P                  pM\        WP                  4      p\        P                  ! V P                   P                  V P                  \        J VV P                  R7       Rj  x€L
 pV P                  '       d   V P                  P                  RV4       V P                  V4       EKo   ELQ LI  \          d;   pT P#                  \$        P&                  \)        T4      4       Y0n         Rp?EMORp?i\         d;   pT P#                  \$        P,                  \)        T4      4       Y0n         Rp?EMRp?i\.         dJ   pT P#                  \$        P0                  TP2                   RTP4                   24       Y0n         Rp?MºRp?i\6         dU   pTP9                  T P                  4       T P#                  \$        P:                  \)        T4      4       Y0n         Rp?M]Rp?i\<         dM   pT P                  P?                  RRR	7       T P#                  \$        P@                  4       Y0n         Rp?MRp?ii ; iRx € \C        R
4      h5i)zý
Parse incoming data into frames.

:meth:`receive_data` and :meth:`receive_eof` run this generator
coroutine until it needs more data or reaches EOF.

:meth:`parse` never raises an exception. Instead, it sets the
:attr:`parser_exc` and yields control.

TNz< EOFzunexpected end of stream)Úmaskr4   rP   z< %sz at position zparser failed)Úexc_infoz"parse() shouldn't step after error)"rW   Úat_eofrH   r5   ÚEOFErrorrK   rM   rL   Úminr   rZ   Ú
read_exactr8   r(   rP   Ú
recv_framer
   rµ   r   ÚPROTOCOL_ERRORrž   r]   rj   ÚUnicodeDecodeErrorÚINVALID_DATArq   Ústartr	   Úset_current_sizeÚMESSAGE_TOO_BIGÚ	ExceptionÚerrorÚINTERNAL_ERRORÚAssertionError)r^   r4   Úframerx   s   &   r,   rZ   ÚProtocol.parse2  s;  é € ð=	"ØØ#Ÿ{™{×1Ñ1Ó3×3Ö3Ø—z—z�zØŸ™×)Ñ)¨'Ô2ô
 #Ð#=Ó>Ð>à�à×(Ñ(Ò4Ø×(Ñ(Ò0Ø#'×#8Ñ#8™à#'×#8Ñ#8¸4×;LÑ;LÕ#L˜à×)Ñ)Ò5ØÒ'Ø#'×#9Ñ#9™ä#& x×1GÑ1GÓ#H˜ô
 $)§;¢;Ø—K‘K×*Ñ*ØŸ™¤fÐ,Ø%Ø#Ÿ™ô	$÷ �ð —:—:�:Ø—K‘K×%Ñ% f¨eÔ4à—‘ ×&òI 4ñ4øô ô 	"Ø�I‰I”i×.Ñ.´°C³Ô9Ø!�OŠOûäô 	"Ø�I‰I”i×0Ñ0´#°c³(Ô;Ø!�OŠOûä!ô 	"Ø�I‰I”i×,Ñ,°·±°¸MÈ#Ï)É)ÈÐ.UÔVØ!�O‰Oûäô 	"Ø× Ñ  ×!2Ñ!2Ô3Ø�I‰I”i×/Ñ/´°S³Ô:Ø!�O‰Oûäô 	"Ø�K‰K×Ñ˜o¸ÐÔ=à�I‰I”i×.Ñ.Ô/Ø!�O‰Oûð		"úó 	ÜÐAÓBÐBùs·   ‚L„E8 ¢E3£	E8 ­E8 ¿C-E8 Ä,E6Ä-E8 Å1E8 Å6E8 Å8LÆ/F8Æ2LÆ8LÇLÇ/G;Ç5LÇ;LÈLÈ	?IÉLÉLÉLÉA
J*Ê%LÊ*LÊ7LÊ8AK?Ë:LË?LÌLc               ó   € V ^8„  d   QhRR/# rÄ   r!   )r;   s   "r,   r<   r=   �  s   € ÷ Cñ C˜ñ Cr+   c              #  ó  "  € V P                   \        J ;'       g    V P                  \        J V P                  8X  g   Q hV P
                  P                  4        Rj  x€L
 '       g   V P
                  P                  4        KD  V P                   \        J d%   V P                  \        Jd   V P                  4        \        V n        V P                   \        J d   V P                  P                  R4       Rx € \        R4      h L§5i)zÅ
Discard incoming data.

This coroutine replaces :meth:`parse`:

- after receiving a close frame, during a normal closure (1.4);
- after sending a close frame, during an abnormal closure (7.1.7).

Nzconnection closedz"discard() shouldn't step after EOF)r8   r(   r3   r.   rV   rW   rÈ   r´   r)   r³   r1   r5   ÚinforÖ   rd   s   &r,   r´   ÚProtocol.discard�  s·   é € ð —	‘	œVÐ#×?Ð? t§z¡z´ZÐ'?ÀTÇ]Á]ÔSÐSÐSØ"Ÿk™k×0Ñ0Ó2×2Ö2Ø�K‰K×ÑÖ!ð �9‰9œÓ 4§:¡:´ZÓ#?Ø�M‰MŒOÜˆŒ
Ø�9‰9œÓØ�K‰K×ÑÐ0Ô1ãô ÐAÓBÐBñ 3ùs   ‚ADÁDÁ	DÁ(BDc               ó    € V ^8„  d   QhRRRR/# ©r7   r×   r   r9   r:   r!   )r;   s   "r,   r<   r=   Ÿ  s   € ÷ N"ñ N" ð N"¨$ñ N"r+   c                ó@  € VP                   \        J g   VP                   \        J dH   V P                  e   \	        R4      hVP
                  '       g   \        VP                  4      V n        EMVP                   \        J dc   V P                  f   \	        R4      hVP
                  '       d
   RV n        EMËV ;P                  \        VP                  4      ,          un        EM�VP                   \        J d.   \        \        VP                  4      pV P                  V4       EM\VP                   \        J d   EMFVP                   \        J Ed   \        P                  ! VP                  4      V n        V P"                  \$        J d   V P&                  f   Q hRV n        V P                  e   \	        R4      hV P"                  \*        J dM   V P                  \        \        VP                  4      4       V P                   V n        RV n        \$        V n        V P,                  \.        J d   V P1                  4        V P3                  4       V n        \7        V P4                  4       M\9        RVP                   R 24      hV P:                  P=                  V4       R# )	z
Process an incoming frame.

Nr–   rŽ   Fzincomplete fragmented messageTzunexpected opcode: Ú02x)Úopcoder   r   rM   r
   r‹   Úlenr|   r   r   r   r   r�   r   r   rZ   rR   r3   r0   rS   rT   r/   r8   r(   r³   r´   r[   r\   rÖ   rX   Úappend)r^   r×   Ú
pong_frames   && r,   rÌ   ÚProtocol.recv_frameŸ  sÕ  € ð
 �<‰<œ4Ó 5§<¡<´6Ó#9Ø× Ñ Ò,Ü#Ð$CÓDÐDØ—9—9�9Ü$'¨¯
©
£O�Ô!ùà�\‰\œTÓ!Ø× Ñ Ò(Ü#Ð$CÓDÐDØ�y�yˆyØ$(�Ö!à×!Ò!¤S¨¯©£_Õ4×!à�\‰\œTÓ!ô œt U§Z¡ZÓ0ˆJØ�O‰O˜JÖ'à�\‰\œTÓ!ñ à�\‰\œUÔ"ô $Ÿkšk¨%¯*©*Ó5ˆDŒOØ�z‰zœWÓ$Ø—‘Ò2Ð2Ð2Ø,1�Ô)à× Ñ Ò,Ü#Ð$CÓDÐDð �z‰zœTÓ!ð
 —‘¤¤e¨U¯Z©ZÓ 8Ô9Ø"&§/¡/�”Ø,0�Ô)Ü$�”
ð �y‰yœFÓ"Ø—‘”ð Ÿ,™,›.ˆDŒKÜ�—‘Õô !Ð#6°u·|±|ÀCÐ6HÐ!IÓJÐJà�‰×Ñ˜5Ö!r+   c               ó    € V ^8„  d   QhRRRR/# rÞ   r!   )r;   s   "r,   r<   r=   ñ  s   € ÷ 
ñ 
 ð 
¨$ñ 
r+   c                	óî   € V P                   '       d   V P                  P                  R V4       V P                  P                  VP	                  V P
                  \        J V P                  R7      4       R# )z> %s)rÆ   rP   N)rH   r5   rY   rã   r¡   r8   r)   rP   )r^   r×   s   &&r,   r�   ÚProtocol.send_frameñ  sU   € Ø�:�:ˆ:Ø�K‰K×Ñ˜f eÔ,Ø�‰×ÑØ�O‰OØ—Y‘Y¤&Ð(ØŸ?™?ð ó ö	
r+   c               ó   € V ^8„  d   QhRR/# rƒ   r!   )r;   s   "r,   r<   r=   û  s   € ÷ %ñ %˜$ñ %r+   c                	óÔ   € V P                   '       d   Q hR V n         V P                  '       d   V P                  P                  R4       V P                  P	                  \
        4       R# )Tz> EOFN)rV   rH   r5   rY   rã   ÚSEND_EOFrd   s   &r,   r³   ÚProtocol.send_eofû  sE   € Ø—=—=�=Ð Ð ØˆŒØ�:�:ˆ:Ø�K‰K×Ñ˜gÔ&Ø�‰×Ñœ8Ö$r+   )rc   rR   rT   rS   rM   rH   rV   rX   rN   rP   rU   rA   r5   rL   rK   rO   r[   r]   rW   r8   r3   rQ   rY   i   )T)Nrp   )rp   )r"   r#   r$   r%   r&   r/   r_   Úpropertyr3   Úsetterrl   rr   ry   r€   r‡   r’   r—   r›   r¤   rª   r¯   rµ   r¹   r½   rÁ   rZ   r´   rÌ   r�   r³   r*   r!   r+   r,   r   r   G   sý   † ñð"E1ð ð	E1ð
 @EðE1ð %)÷E1ðN ôó ðð ‡\�\ôó ðð
 ô(ó ð(ð$ ô*ó ð*ð$ ô!ó ð!õJõ õ*0÷00÷.2÷."õH+õ +÷ -õbõ õ()õZMCõ^Cõ<N"õd
÷%ñ %r+   )r   r   r   rë   )2Ú
__future__r   ÚenumrB   r?   Úcollections.abcr   Ú
exceptionsr   r   r   r   r	   r
   rP   r   Úframesr   r   r   r   r   r   r   r   r   r   Úhttp11r   r   Ústreamsr   Útypingr   r   r   r   Ú__all__ÚEventÚIntEnumr   r(   r)   r   r.   r/   r0   r1   rë   r   r!   r+   r,   Ú<module>rú      sÍ   ðÝ "ã Û Û Ý %÷÷ õ "÷÷ ÷ ÷ &Ý !ß >Ó >ò€ð 	�(Õ˜UÕ"€Ø ?ôˆ4�<‰<ô ð 
�‰€Ø	�‰€ô1ˆD�L‰Lô 1ð ×Ñ€
Ø‡z�z€Ø
�-‰-€Ø	�‰€ð €Ø E÷y
%ó y
%r+   