Ë
    ·�©jEA  ã                  ó  — U 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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 	 ddlmZ g d	¢Z G d
„ dej.                  «      Zej2                  Zej4                  Zej6                  Zej8                  Zej:                  Zej<                  ZeeefZeeefZ  G d„ dej.                  «      Z!e!jD                  de!jF                  de!jH                  de!jJ                  de!jL                  de!jN                  de!jP                  de!jR                  de!jT                  de!jV                  de!jX                  de!jZ                  de!j\                  de!j^                  de!j`                  diZ1de2d<   e!jD                  e!jF                  e!jH                  e!jJ                  e!jP                  e!jR                  e!jT                  e!jV                  e!jX                  e!jZ                  e!j\                  e!j^                  hZ3e!jD                  e!jF                  e!jL                  hZ4ejj                   G d„ d «      «       Z6ejj                   G d!„ d"«      «       Z7	 	 d%	 	 	 	 	 	 	 d&d#„Z8dd$l9m:Z: y# e$ r
 ddlmZ Y �Œ9w xY w)'é    )ÚannotationsN)Ú	GeneratorÚSequence)ÚCallableÚSelfé   )ÚPayloadTooBigÚProtocolError)Ú	BytesLike)Ú
apply_mask)ÚOpcodeÚ	CloseCodeÚFrameÚClosec                  ó(   — e Zd ZdZd\  ZZZd\  ZZZ	y)r   z#Opcode values for WebSocket frames.)r   r   é   )é   é	   é
   N)
Ú__name__Ú
__module__Ú__qualname__Ú__doc__ÚCONTÚTEXTÚBINARYÚCLOSEÚPINGÚPONG© ó    úX/var/www/html/streamforge-license/venv/lib/python3.12/site-packages/websockets/frames.pyr   r      s   „ Ù-à)Ñ€Dˆ$�Ø(Ñ€Eˆ4‘r!   r   c                  óL   — e Zd ZdZdZdZdZdZdZdZ	dZ
d	Zd
ZdZdZdZdZdZdZy)r   z-Close code values for WebSocket close frames.iè  ié  iê  ië  ií  iî  iï  ið  iñ  iò  ió  iô  iõ  iö  i÷  N)r   r   r   r   ÚNORMAL_CLOSUREÚ
GOING_AWAYÚPROTOCOL_ERRORÚUNSUPPORTED_DATAÚNO_STATUS_RCVDÚABNORMAL_CLOSUREÚINVALID_DATAÚPOLICY_VIOLATIONÚMESSAGE_TOO_BIGÚMANDATORY_EXTENSIONÚINTERNAL_ERRORÚSERVICE_RESTARTÚTRY_AGAIN_LATERÚBAD_GATEWAYÚTLS_HANDSHAKEr    r!   r"   r   r   0   sT   „ Ù7à€NØ€JØ€NØÐà€NØÐØ€LØÐØ€OØÐØ€NØ€OØ€OØ€KØ�Mr!   r   ÚOKz
going awayzprotocol errorzunsupported datazno status received [internal]zabnormal closure [internal]zinvalid frame payload datazpolicy violationzmessage too bigzmandatory extensionzinternal errorzservice restartztry again laterzbad gatewayz TLS handshake failure [internal]zdict[int, str]ÚCLOSE_CODE_EXPLANATIONSc                  ó  — e Zd ZU dZded<   ded<   dZded<   d	Zded
<   d	Zded<   d	Zded<    e	e
j                  j                  dd«      «      Zeded	ediZdd„Zdd„Zedddœ	 	 	 	 	 	 	 	 	 dd„«       Zddœ	 	 	 	 	 dd„Zdd„Zy)r   aN  
    WebSocket frame.

    Attributes:
        opcode: Opcode.
        data: Payload data.
        fin: FIN bit.
        rsv1: RSV1 bit.
        rsv2: RSV2 bit.
        rsv3: RSV3 bit.

    Only these fields are needed. The MASK bit, payload length and masking-key
    are handled on the fly when parsing and serializing frames.

    r   Úopcoder   ÚdataTÚboolÚfinFÚrsv1Úrsv2Úrsv3ÚWEBSOCKETS_MAX_LOG_SIZEÚ75c                óŽ  — | j                   j                  | j                  «      }| j                  «       \  }}||k(  rdn|rdnd}t	        | j
                  «      › dt	        | j
                  «      dk(  rdnd› �}| j                  rdnd}dj                  t        d	|||g«      «      }| j                  j                  › d
|› d|› d�S )ax  
        Return a human-readable representation of a frame.

        This function is intended for logging and debugging. It doesn't aim to
        support round-tripping because payloads can be too long for displaying
        conveniently. Instead, it shows the beginning and the end. It's robust
        to incorrect data.

        It attempts to decode UTF-8 payloads whenever possible, even for binary
        frames and control frames, because those frequently contain UTF-8 data.
        It applies the same logic to continuation frames, because we don't know
        if they continue a text frame or a binary frame.

        Ú ÚtextÚbinaryz byter   ÚsÚ	continuedz, Nú z [ú])
ÚDEFAULT_IS_TEXTÚgetr6   Ú
_data_reprÚlenr7   r9   ÚjoinÚfilterÚname)ÚselfÚexpect_textÚ	data_reprÚis_textÚ	data_typeÚlengthÚ	non_finalÚmetadatas           r"   Ú__str__zFrame.__str__�   s¹   € ð ×*Ñ*×.Ñ.¨t¯{©{Ó;ˆØ!Ÿ_™_Ó.Ñˆ	�7à%¨Ò0‘BÁ±vÈhˆ	Ü˜Ÿ	™	“NÐ# 5¬s°4·9±9«~ÀÒ/B©ÈÐ(LÐMˆØŸ(š(‘B¨ˆ	Ø—9‘9œV D¨9°f¸iÐ*HÓIÓJˆà—+‘+×"Ñ"Ð# 1 Y K¨r°(°¸1Ð=Ð=r!   c                óÆ  — | j                   s'd| j                  j                  | j                  «      fS | j                  t        u r+	 t        t        j                  | j                   «      «      dfS t        | j                   «      d| j                  z  kD  r¨t        | j                   dd| j                  z  dz   «      }t        | j                   d| j                  z  dz  d «      }t        || j                  t        k7  ¬«      xr t        || j                  ¬	«      }|rzt!        ||z   j#                  d
¬«      «      }n[t        | j                   «      }t        || j                  t        k7  | j                  ¬«      }|rt!        |j#                  d
¬«      «      }|sr| j                   }t        |«      | j                  dz  kD  r3| j                  dz  dz
  dz  }dj%                  |dd|z   d|| d g«      }dj%                  d„ |D «       «      }t        «      | j                  kD  r$| j                  dz  dz
  }|dd|z   dz   || d z   }||fS # t        t        f$ r Y �Œîw xY w)zí
        Return a human-readable representation of the payload.

        Also returns whether the payload is text.

        The representation is elided to fit ``MAX_LOG_SIZE``.

        This is a helper for the __str__ method.

        z''Té   Nr   é   éüÿÿÿ)Úmust_start_clean)Úmust_end_cleanÚreplace)Úerrors)r[   r\   r   r!   r   s     rE   c              3  ó$   K  — | ]  }|d ›–— Œ
 y­w)Ú02xNr    )Ú.0Úbytes     r"   ú	<genexpr>z#Frame._data_repr.<locals>.<genexpr>ç   s   è ø€ Ò B°4 D¨ :£Ñ Bùs   ‚z...)r7   rG   rH   r6   r   Ústrr   Úparser
   ÚUnicodeDecodeErrorrJ   ÚMAX_LOG_SIZEÚbytesÚis_utf8_fragmentr   r9   ÚreprÚdecoderK   )rN   Ú
data_startÚdata_endrQ   rP   r7   rB   Úcuts           r"   rI   zFrame._data_repr©   sT  € ð �yŠyØ˜×-Ñ-×1Ñ1°$·+±+Ó>Ð>Ð>ð
 �;‰;œ%ÑðÜœ5Ÿ;™; t§y¡yÓ1Ó2°DÐ8Ð8ô ˆt�y‰y‹>˜A × 1Ñ 1Ñ1Ò1ô ˜tŸy™yÐ)E¨1¨t×/@Ñ/@Ñ+@ÀAÑ+EÐFÓGˆJÜ˜TŸY™Y r¨D×,=Ñ,=Ñ'=ÀÑ'BÐ'DÐEÓFˆHÜ&ØØ!%§¡´Ñ!4ôò ô #ØØ#Ÿx™xôð ñ Ü  *¨xÑ"7×!?Ñ!?ÀyÐ!?Ó!QÓR‘	ô ˜Ÿ™Ó#ˆDÜ&ØØ!%§¡´Ñ!4Ø#Ÿx™xôˆGñ
 Ü  §¡°I Ó!>Ó?�	ñ
 Ø—Y‘YˆFÜ�6‹{˜T×.Ñ.°!Ñ3Ò3Ø×(Ñ(¨AÑ-°Ñ1°aÑ7�àŸ™ 6¨)¨A°©GÐ#4°kÀ6È3È$È%À=Ð"QÓR�ØŸ™Ñ B¸6Ô BÓBˆIô ˆy‹>˜D×-Ñ-Ò-Ø×#Ñ# qÑ(¨1Ñ,ˆCØ! ) A¨¡GÐ,¨uÑ4°yÀ#ÀÀÐ7GÑGˆIà˜'Ð!Ð!øôe "Ô#5Ð6ò Úðús   Á)I ÉI ÉI N)Úmax_sizeÚ
extensionsc             #  ó  K  —  |d«      E d{  –—† }t        j                  d|«      \  }}|dz  rdnd}|dz  rdnd}	|dz  rdnd}
|d	z  rdnd}	 t        |d
z  «      }|dz  rdnd|k7  rt	        d«      ‚|dz  }|dk(  r) |d«      E d{  –—† }t        j                  d|«      \  }n-|dk(  r( |d«      E d{  –—† }t        j                  d|«      \  }|�||kD  rt        ||«      ‚|r |d«      E d{  –—† } ||«      E d{  –—† }|rt        |«      } | ||||	|
|«      }|€g }t        |«      D ]  }|j                  ||¬«      }Œ |j                  «        |S 7 �ŒQ# t        $ r}t	        d«      |‚d}~ww xY w7 Œó7 ŒÇ7 ŒŒ7 Œ~­w)aá  
        Parse a WebSocket frame.

        This is a generator-based coroutine.

        Args:
            read_exact: Generator-based coroutine that reads the requested
                bytes or raises an exception if there isn't enough data.
            mask: Whether the frame should be masked i.e. whether the read
                happens on the server side.
            max_size: Maximum payload size in bytes.
            extensions: List of extensions, applied in reverse order.

        Raises:
            EOFError: If the connection is closed without a full WebSocket frame.
            PayloadTooBig: If the frame's payload size exceeds ``max_size``.
            ProtocolError: If the frame contains incorrect values.

        r   Nú!BBé€   TFé@   é    é   é   zinvalid opcodezincorrect maskingé   é~   ú!Hr   z!QrX   )ro   )
ÚstructÚunpackr   Ú
ValueErrorr
   r	   r   Úreversedrk   Úcheck)ÚclsÚ
read_exactÚmaskro   rp   r7   Úhead1Úhead2r9   r:   r;   r<   r6   ÚexcrS   Ú
mask_bytesÚframeÚ	extensions                     r"   re   zFrame.parseñ   sÅ  è ø€ ñ: % Q›-×'ˆÜ—}‘} U¨DÓ1‰ˆˆuð ˜jÒ(‰d¨eˆØ˜zÒ)‰t¨uˆØ˜zÒ)‰t¨uˆØ˜zÒ)‰t¨uˆð	;Ü˜E JÑ.Ó/ˆFð ˜JÒ&‰D¨E°dÒ:ÜÐ 3Ó4Ð4à˜Ñ#ˆØ�SŠ=Ù(¨›m×+ˆDÜŸ™ d¨DÓ1‰I‰VØ�sŠ]Ù(¨›m×+ˆDÜŸ™ d¨DÓ1‰IˆVØÐ F¨XÒ$5Ü ¨Ó1Ð1ÙÙ$.¨q£M×1ˆJñ % VÓ,×,ˆÙÜ˜d JÓ/ˆDá�F˜D # t¨T°4Ó8ˆàÐØˆJÜ! *Ó-ò 	?ˆIØ×$Ñ$ U°XÐ$Ó>‰Eð	?ð 	�‰ŒàˆðW (úô ò 	;ÜÐ 0Ó1°sÐ:ûð	;úð ,øð ,øð
 2øð -úsw   ‚FŽE�AFÁE" Á,FÂE?Â-FÂ9FÂ:<FÃ6FÃ7FÄFÄAFÅ"	E<Å+E7Å7E<Å<FÆFÆFÆF©rp   c               óF  — | j                  «        |€g }|D ]  }|j                  | «      } Œ t        j                  «       }| j                  rdnd| j
                  rdndz  | j                  rdndz  | j                  rdndz  | j                  z  }|rdnd}t        | j                  «      }|dk  r*|j                  t        j                  d|||z  «      «       nZ|dk  r+|j                  t        j                  d	||dz  |«      «       n*|j                  t        j                  d
||dz  |«      «       |r&t        j                  d«      }|j                  |«       |rt!        | j                  «      }	n| j                  }	|j                  |	«       |j#                  «       S )aH  
        Serialize a WebSocket frame.

        Args:
            mask: Whether the frame should be masked i.e. whether the write
                happens on the client side.
            extensions: List of extensions, applied in order.

        Raises:
            ProtocolError: If the frame contains incorrect values.

        rs   r   rt   ru   rv   ry   rr   i   z!BBHz!BBQrx   rX   )r   ÚencodeÚioÚBytesIOr9   r:   r;   r<   r6   rJ   r7   Úwriter{   ÚpackÚsecretsÚtoken_bytesr   Úgetvalue)
rN   r‚   rp   rˆ   Úoutputrƒ   r„   rS   r†   r7   s
             r"   Ú	serializezFrame.serialize;  sm  € ð$ 	�
‰
ŒàÐØˆJØ#ò 	*ˆIØ×#Ñ# DÓ)‰Dð	*ô —‘“ˆð  Ÿ8š8‰Z¨Ø!ŸYšY‰z¨Añ/à!ŸYšY‰z¨Añ/ð "ŸYšY‰z¨Añ/ð �k‰kñ	ð 	ñ #‘
¨ˆä�T—Y‘Y“ˆØ�CŠ<Ø�L‰LœŸ™ U¨E°5¸6±>ÓBÕCØ�eŠ^Ø�L‰LœŸ™ V¨U°E¸C±KÀÓHÕIà�L‰LœŸ™ V¨U°E¸C±KÀÓHÔIáÜ ×,Ñ,¨QÓ/ˆJØ�L‰L˜Ô$ñ Ü˜dŸi™i¨Ó4‰Dà—9‘9ˆDØ�‰�TÔà�‰Ó Ð r!   c                óü   — | j                   s| j                  s| j                  rt        d«      ‚| j                  t
        v r;t        | j                  «      dkD  rt        d«      ‚| j                  st        d«      ‚yy)z¦
        Check that reserved bits and opcode have acceptable values.

        Raises:
            ProtocolError: If a reserved bit or the opcode is invalid.

        zreserved bits must be 0é}   zcontrol frame too longzfragmented control frameN)	r:   r;   r<   r
   r6   ÚCTRL_OPCODESrJ   r7   r9   ©rN   s    r"   r   zFrame.checkw  sh   € ð �9Š9˜Ÿ	š	 T§Y¢YÜÐ 9Ó:Ð:à�;‰;œ,Ñ&Ü�4—9‘9‹~ Ò#Ü#Ð$<Ó=Ð=Ø—8’8Ü#Ð$>Ó?Ð?ð ð 'r!   ©Úreturnrd   )rš   ztuple[str, bool | None])
r�   z9Callable[[int], Generator[None, None, bytes | bytearray]]r‚   r8   ro   z
int | Nonerp   ú%Sequence[extensions.Extension] | Nonerš   zGenerator[None, None, Frame])r‚   r8   rp   r›   rš   rh   ©rš   ÚNone)r   r   r   r   Ú__annotations__r9   r:   r;   r<   ÚintÚosÚenvironrH   rg   r   r   r   rG   rV   rI   Úclassmethodre   r”   r   r    r!   r"   r   r   r   sù   … ñð  ƒNØ
ƒOØ€CˆÓØ€Dˆ$ÓØ€Dˆ$ÓØ€Dˆ$Óñ �r—z‘z—~‘~Ð&?ÀÓFÓG€Là˜T 6¨5°%¸Ð>€Oó>ó2F"ðP ð  $Ø<@ñGàMðGð ð	Gð
 ðGð :ðGð 
&òGó ðGðZ =Añ	:!ð ð:!ð :ð	:!ð
 
ó:!ôx@r!   r   c                  óP   — e Zd ZU dZded<   ded<   dd„Zedd„«       Zdd„Zdd	„Z	y
)r   z
    Code and reason for WebSocket close frames.

    Attributes:
        code: Close code.
        reason: Close reason.

    zCloseCode | intÚcoderd   Úreasonc                ó  — d| j                   cxk  rdk  rn nd}n;d| j                   cxk  rdk  rn nd}n t        j                  | j                   d«      }| j                   › d|› d�}| j                  r|› d	| j                  › �}|S )
zU
        Return a human-readable representation of a close code and reason.

        é¸  i   Ú
registeredéˆ  zprivate useÚunknownz (ú)rE   )r¤   r4   rH   r¥   )rN   ÚexplanationÚresults      r"   rV   zClose.__str__—  s|   € ð
 �4—9‘9Ô#˜tÕ#Ø&‰KØ�T—Y‘YÔ% Õ%Ø'‰Kä1×5Ñ5°d·i±iÀÓKˆKØ—I‘I�;˜b  ¨QÐ/ˆà�;Š;Ø�x˜q §¡ Ð.ˆFàˆr!   c                óF  — t        |t        «      rt        d«      ‚t        |«      dk\  rIt	        j
                  d|dd «      \  }|dd j                  «       } | ||«      }|j                  «        |S t        |«      dk(  r | t        j                  d«      S t        d«      ‚)z÷
        Parse the payload of a close frame.

        Args:
            data: Payload of the close frame.

        Raises:
            ProtocolError: If data is ill-formed.
            UnicodeDecodeError: If the reason isn't valid UTF-8.

        z.only compressed outgoing frames use memoryviewr   rz   Nr   r@   zclose frame too short)Ú
isinstanceÚ
memoryviewÚAssertionErrorrJ   r{   r|   rk   r   r   r(   r
   )r€   r7   r¤   r¥   Úcloses        r"   re   zClose.parse©  s“   € ô �dœJÔ'Ü Ð!QÓRÐRÜˆt‹9˜Š>Ü—m‘m D¨$¨r°¨(Ó3‰GˆTØ˜!˜"�X—_‘_Ó&ˆFÙ˜˜fÓ%ˆEØ�K‰KŒMØˆLÜ�‹Y˜!Š^Ù”y×/Ñ/°Ó4Ð4äÐ 7Ó8Ð8r!   c                ó˜   — | j                  «        t        j                  d| j                  «      | j                  j                  «       z   S )z:
        Serialize the payload of a close frame.

        rz   )r   r{   r�   r¤   r¥   r‹   r˜   s    r"   r”   zClose.serializeÃ  s4   € ð
 	�
‰
ŒÜ�{‰{˜4 §¡Ó+¨d¯k©k×.@Ñ.@Ó.BÑBÐBr!   c                ó‚   — | j                   t        v s-d| j                   cxk  rdk  st        d«      ‚ t        d«      ‚yy)z›
        Check that the close code has a valid value for a close frame.

        Raises:
            ProtocolError: If the close code is invalid.

        r§   r©   zinvalid status codeN)r¤   ÚEXTERNAL_CLOSE_CODESr
   r˜   s    r"   r   zClose.checkË  sH   € ð —	‘	Ô1Ñ1°T¸T¿Y¹YÔ5MÈÒ5MÜÐ 5Ó6Ð6ð 6NÜÐ 5Ó6Ð6ð 6NÐ1r!   Nr™   )r7   r   rš   r   )rš   rh   rœ   )
r   r   r   r   rž   rV   r¢   re   r”   r   r    r!   r"   r   r   ‰  s8   … ñð ÓØƒKóð$ ò9ó ð9ó2Cô	7r!   r   c                óà  — dt        | «      }}|s.t        dt        | «      «      }||k  r| |   }|dz  dk(  r|dz  }Œ	 |s€|dz  }t        t        | «      dz
  |«      }||k\  r^| |   }|dz  dk(  r|dz  }Œ|dz  dk(  rd}n#|dz  dk(  rd}n|d	z  dk(  rd}n|d
z  d	k(  rd}nd}|t        | «      |z
  k  rt        | «      }	 	 | || j                  «       }	dt	        |	«      vS # t
        $ r Y yw xY w)z*Guess if data is a fragment of UTF-8 text.r   rY   éÀ   rs   r   rX   éà   r   éð   éø   z\xF)rJ   ÚminÚmaxrk   rj   rf   )
r7   r[   r\   ÚstartÚendÚ	max_startrb   Úmin_endÚseq_lenrA   s
             r"   ri   ri   ×  sI  € ð ”C˜“Iˆ3€Eáä˜œ3˜t›9Ó%ˆ	Ø�iÒØ˜‘;ˆDð �jÑ  JÒ.Ø˜‘
�Øàáàˆq‰ˆÜ”c˜$“i !‘m UÓ+ˆØ�WŠnØ˜‘9ˆDà�jÑ  JÒ.Ø�q‘�Øð �jÑ  JÒ.Ø‘à˜
Ñ" jÒ0Ø‘à˜
Ñ" jÒ0Ø‘à˜
Ñ" jÒ0Ø‘ð �ð œ#˜d›) c™/Ò)Ü˜$“i�àð'Ø�E˜#ˆ×%Ñ%Ó'ˆð
 œD ›JÐ&Ð&øô	 ò Ùðús   ÃC! Ã!	C-Ã,C-r‰   )FF)r7   rh   r[   r8   r\   r8   rš   r8   );Ú
__future__r   ÚdataclassesÚenumrŒ   r    r�   r{   Úcollections.abcr   r   Útypingr   r   Ú
exceptionsr	   r
   r   Úspeedupsr   ÚImportErrorÚutilsÚ__all__ÚIntEnumr   r   r   r   r   r   r   ÚDATA_OPCODESr—   r   r$   r%   r&   r'   r(   r)   r*   r+   r,   r-   r.   r/   r0   r1   r2   r4   rž   rµ   ÚOK_CLOSE_CODESÚ	dataclassr   r   ri   r@   rp   r    r!   r"   ú<module>rÐ      sž  ðÞ "ã Û Û 	Û 	Û Û ß /ß !ç 4Ý ð"Ý$ò
€ô)ˆT�\‰\ô )ð ‡{�{€Ø‡{�{€Ø	�‰€Ø�‰€Ø‡{�{€Ø‡{�{€à�T˜6Ð!€Ø�d˜DÐ €ô�—‘ô ð. ×Ñ˜dØ×Ñ˜,Ø×ÑÐ.Ø×ÑÐ 2Ø×ÑÐ=Ø×ÑÐ =Ø×ÑÐ8Ø×ÑÐ 2Ø×ÑÐ0Ø×!Ñ!Ð#8Ø×ÑÐ.Ø×ÑÐ0Ø×ÑÐ0Ø×Ñ˜=Ø×ÑÐ?ð+Ð ˜ó ð, ×ÑØ×ÑØ×ÑØ×ÑØ×ÑØ×ÑØ×ÑØ×!Ñ!Ø×ÑØ×ÑØ×ÑØ×ÑðÐ ð" ×ÑØ×ÑØ×Ñð€ð ×Ñ÷S@ð S@ó ðS@ðl ×Ñ÷J7ð J7ó ðJ7ð^ #Ø ðE'Ø
ðE'àðE'ð ðE'ð 
ó	E'öR øð] ò "ß!Ð!ð"ús   ¿I0 É0I?É>I?