§
    Ÿj¼(  ã                   óh   — d Z ddlZddlm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 G d„ d¦  «        ZdS )a  
TLV (Type-Length-Value) Binary Encoder/Decoder

Provides efficient binary serialization for dirty worker protocol messages.
Inspired by OpenBSD msgctl/msgsnd message format.

Type Codes:
    0x00: None (no value bytes)
    0x01: bool (1 byte: 0x00 or 0x01)
    0x05: int64 (8 bytes big-endian signed)
    0x06: float64 (8 bytes IEEE 754)
    0x10: bytes (4-byte length + raw bytes)
    0x11: string (4-byte length + UTF-8 encoded)
    0x20: list (4-byte count + encoded elements)
    0x21: dict (4-byte count + encoded key-value pairs)
é    Né   )ÚDirtyProtocolErroré   é   é   é   é    é!   i   i   c                   óp   — e Zd ZdZedefd„¦   «         Zed
dededefd„¦   «         Z	edefd„¦   «         Z
d	S )Ú
TLVEncoderz¥
    TLV binary encoder/decoder.

    Encodes Python values to binary TLV format and decodes back.
    Supports: None, bool, int, float, bytes, str, list, dict.
    Úreturnc                 óh  — | €t          t          g¦  «        S t          | t          ¦  «        rt          t          | rdndg¦  «        S t          | t
          ¦  «        r+t          t          g¦  «        t          j        d| ¦  «        z   S t          | t          ¦  «        r+t          t          g¦  «        t          j        d| ¦  «        z   S t          | t           ¦  «        r{t          | ¦  «        t          k    r(t          dt          | ¦  «        › dt          › d�¦  «        ‚t          t          g¦  «        t          j        d	t          | ¦  «        ¦  «        z   | z   S t          | t          ¦  «        r�|                      d
¦  «        }t          |¦  «        t"          k    r(t          dt          |¦  «        › dt"          › d�¦  «        ‚t          t$          g¦  «        t          j        d	t          |¦  «        ¦  «        z   |z   S t          | t&          t(          f¦  «        r¾t          | ¦  «        t*          k    r(t          dt          | ¦  «        › dt*          › d�¦  «        ‚t          t,          g¦  «        t          j        d	t          | ¦  «        ¦  «        g}| D ]/}|                     t0                               |¦  «        ¦  «         Œ0d                     |¦  «        S t          | t4          ¦  «        �r$t          | ¦  «        t6          k    r(t          dt          | ¦  «        › dt6          › d�¦  «        ‚t          t8          g¦  «        t          j        d	t          | ¦  «        ¦  «        g}|                      ¦   «         D ]ƒ\  }}t          |t          ¦  «        st          |¦  «        }|                     t0                               |¦  «        ¦  «         |                     t0                               |¦  «        ¦  «         Œ„d                     |¦  «        S t          dt=          | ¦  «        j        › �¦  «        ‚)aJ  
        Encode a Python value to TLV binary format.

        Args:
            value: Python value to encode (None, bool, int, float,
                   bytes, str, list, or dict)

        Returns:
            bytes: TLV-encoded binary data

        Raises:
            DirtyProtocolError: If value type is not supported
        Nr   r   ú>qú>dúBytes too large: ú bytes (max: ú)ú>Iúutf-8úString too large: úList too large: ú items (max: ó    úDict too large: z#Unsupported type for TLV encoding: ) ÚbytesÚ	TYPE_NONEÚ
isinstanceÚboolÚ	TYPE_BOOLÚintÚ
TYPE_INT64ÚstructÚpackÚfloatÚTYPE_FLOAT64ÚlenÚMAX_BYTES_SIZEr   Ú
TYPE_BYTESÚstrÚencodeÚMAX_STRING_SIZEÚTYPE_STRINGÚlistÚtupleÚMAX_LIST_SIZEÚ	TYPE_LISTÚappendr   ÚjoinÚdictÚMAX_DICT_SIZEÚ	TYPE_DICTÚitemsÚtypeÚ__name__)ÚvalueÚencodedÚpartsÚitemÚkÚvs         ú_/var/www/finuniver-perm.ru/html/student/venv/lib/python3.11/site-packages/gunicorn/dirty/tlv.pyr*   zTLVEncoder.encode4   sÝ  € ð ˆ=Ý�)˜Ñ%Ô%Ð%å�e�TÑ"Ô"ð 	?å�)¨UÐ%< T T¸Ð=Ñ>Ô>Ð>å�e�SÑ!Ô!ð 	BÝ�*˜Ñ&Ô&­¬°T¸5Ñ)AÔ)AÑAÐAå�e�UÑ#Ô#ð 	DÝ�,˜Ñ(Ô(­6¬;°t¸UÑ+CÔ+CÑCÐCå�e�UÑ#Ô#ð 	OÝ�5‰zŒz�NÒ*Ð*Ý(ð/­¨E©
¬
ð /ð /Ý+ð/ð /ð /ñô ð õ �*˜Ñ&Ô&­¬°T½3¸u¹:¼:Ñ)FÔ)FÑFÈÑNÐNå�e�SÑ!Ô!ð 	TØ—l’l 7Ñ+Ô+ˆGÝ�7‰|Œ|�oÒ-Ð-Ý(ð0­¨W©¬ð 0ð 0Ý,ð0ð 0ð 0ñô ð õ �+˜Ñ'Ô'­&¬+°d½CÀ¹L¼LÑ*IÔ*IÑIÈGÑSÐSå�e�d¥E˜]Ñ+Ô+ð 		#Ý�5‰zŒz�MÒ)Ð)Ý(ð.¥s¨5¡z¤zð .ð .Ý*ð.ð .ð .ñô ð õ �I˜;Ñ'Ô'­¬°T½3¸u¹:¼:Ñ)FÔ)FÐGˆEØð 6ð 6�Ø—’�Z×.Ò.¨tÑ4Ô4Ñ5Ô5Ð5Ð5Ø—8’8˜E‘?”?Ð"å�e�TÑ"Ô"ñ 	#Ý�5‰zŒz�MÒ)Ð)Ý(ð.¥s¨5¡z¤zð .ð .Ý*ð.ð .ð .ñô ð õ �I˜;Ñ'Ô'­¬°T½3¸u¹:¼:Ñ)FÔ)FÐGˆEØŸš™œð 3ð 3‘��1å! !¥SÑ)Ô)ð Ý˜A™œ�AØ—’�Z×.Ò.¨qÑ1Ô1Ñ2Ô2Ð2Ø—’�Z×.Ò.¨qÑ1Ô1Ñ2Ô2Ð2Ð2Ø—8’8˜E‘?”?Ð"å ØHµ$°u±+´+Ô2FÐHÐHñ
ô 
ð 	
r   r   ÚdataÚoffsetc                 óœ  — |t          | ¦  «        k    rt          d| ||dz   …         ¬¦  «        ‚| |         }|dz  }|t          k    rd|fS |t          k    rE|t          | ¦  «        k    rt          d| |dz
  |dz   …         ¬¦  «        ‚| |         dk    }||dz   fS |t          k    rb|dz   t          | ¦  «        k    rt          d	| |dz
  |dz   …         ¬¦  «        ‚t          j        d
| ||dz   …         ¦  «        d         }||dz   fS |t          k    rb|dz   t          | ¦  «        k    rt          d| |dz
  |dz   …         ¬¦  «        ‚t          j        d| ||dz   …         ¦  «        d         }||dz   fS |t          k    rå|dz   t          | ¦  «        k    rt          d| |dz
  |dz   …         ¬¦  «        ‚t          j        d| ||dz   …         ¦  «        d         }|dz  }|t          k    rt          d|› dt          › d�¦  «        ‚||z   t          | ¦  «        k    r5t          d|› dt          | ¦  «        |z
  › �| |dz
  |dz   …         ¬¦  «        ‚| |||z   …         }|||z   fS |t          k    �r9|dz   t          | ¦  «        k    rt          d| |dz
  |dz   …         ¬¦  «        ‚t          j        d| ||dz   …         ¦  «        d         }|dz  }|t          k    rt          d|› dt          › d�¦  «        ‚||z   t          | ¦  «        k    r5t          d|› dt          | ¦  «        |z
  › �| |dz
  |dz   …         ¬¦  «        ‚	 | |||z   …                              d¦  «        }n?# t          $ r2}t          d|› �| ||t          |d¦  «        z   …         ¬¦  «        ‚d}~ww xY w|||z   fS |t          k    rÑ|dz   t          | ¦  «        k    rt          d| |dz
  |dz   …         ¬¦  «        ‚t          j        d| ||dz   …         ¦  «        d         }|dz  }|t           k    rt          d|› dt           › d�¦  «        ‚g }t#          |¦  «        D ]5}t$                               | |¦  «        \  }	}|                     |	¦  «         Œ6||fS |t(          k    �r|dz   t          | ¦  «        k    rt          d| |dz
  |dz   …         ¬¦  «        ‚t          j        d| ||dz   …         ¦  «        d         }|dz  }|t*          k    rt          d|› dt*          › d�¦  «        ‚i }
t#          |¦  «        D ]|}t$                               | |¦  «        \  }}t-          |t.          ¦  «        s$t          d t1          |¦  «        j        › �¦  «        ‚t$                               | |¦  «        \  }}||
|<   Œ}|
|fS t          d!|d"›�| |dz
  |dz   …         ¬¦  «        ‚)#a9  
        Decode a TLV-encoded value from binary data.

        Args:
            data: Binary data to decode
            offset: Starting offset in the data

        Returns:
            tuple: (decoded_value, new_offset)

        Raises:
            DirtyProtocolError: If data is malformed or truncated
        z Truncated TLV data: no type byteé   ©Úraw_datar   Nz&Truncated TLV data: missing bool valuer   é   z$Truncated TLV data: incomplete int64r   z&Truncated TLV data: incomplete float64r   é   z+Truncated TLV data: incomplete bytes lengthr   r   r   r   zTruncated TLV data: expected z bytes, got r   z,Truncated TLV data: incomplete string lengthr   z bytes for string, got r   zInvalid UTF-8 in string: z)Truncated TLV data: incomplete list countr   r   z)Truncated TLV data: incomplete dict countr   zDict key must be string, got zUnknown TLV type code: 0xÚ02x)r&   r   r   r   r!   r"   Úunpackr%   r(   r'   r,   r+   ÚdecodeÚUnicodeDecodeErrorÚminr0   r/   Úranger   r1   r5   r4   r   r)   r7   r8   )r@   rA   Ú	type_coder9   ÚlengthÚeÚcountr6   Ú_r<   ÚresultÚkeys               r?   rJ   zTLVEncoder.decode   sZ  € ð •S˜‘Y”YÒÐÝ$Ø2Ø˜f V¨b¡[Ð0Ô1ðñ ô ð ð
 ˜”Lˆ	Ø�!‰ˆà�	Ò!Ð!Ø˜�<Ðà�	Ò!Ð!Ø�˜T™œÒ"Ð"Ý(Ø<Ø! &¨1¡*¨V°b©[Ð"8Ô9ðñ ô ð ð ˜”L DÒ(ˆEØ˜& 1™*Ð$Ð$à�
Ò"Ð"Ø˜‰z�C ™IœIÒ%Ð%Ý(Ø:Ø! &¨1¡*¨V°b©[Ð"8Ô9ðñ ô ð õ ”M $¨¨V°F¸Q±JÐ->Ô(?Ñ@Ô@ÀÔCˆEØ˜& 1™*Ð$Ð$à�Ò$Ð$Ø˜‰z�C ™IœIÒ%Ð%Ý(Ø<Ø! &¨1¡*¨V°b©[Ð"8Ô9ðñ ô ð õ ”M $¨¨V°F¸Q±JÐ->Ô(?Ñ@Ô@ÀÔCˆEØ˜& 1™*Ð$Ð$à�
Ò"Ð"Ø˜‰z�C ™IœIÒ%Ð%Ý(ØAØ! &¨1¡*¨V°b©[Ð"8Ô9ðñ ô ð õ ”] 4¨¨f°V¸a±ZÐ.?Ô)@ÑAÔAÀ!ÔDˆFØ�a‰KˆFà�Ò&Ð&Ý(ØN¨ÐNÐN½^ÐNÐNÐNñô ð ð ˜‰¥ T¡¤Ò*Ð*Ý(ð0°Fð 0ð 0Ý˜t™9œ9 vÑ-ð0ð 0à! &¨1¡*¨V°b©[Ð"8Ô9ðñ ô ð ð
 ˜ ¨¡Ð/Ô0ˆEØ˜& 6™/Ð)Ð)à�Ò#Ñ#Ø˜‰z�C ™IœIÒ%Ð%Ý(ØBØ! &¨1¡*¨V°b©[Ð"8Ô9ðñ ô ð õ ”] 4¨¨f°V¸a±ZÐ.?Ô)@ÑAÔAÀ!ÔDˆFØ�a‰KˆFà�Ò'Ð'Ý(ØP¨ÐPÐP½oÐPÐPÐPñô ð ð ˜‰¥ T¡¤Ò*Ð*Ý(ð0°Fð 0ð 0Ý˜t™9œ9 vÑ-ð0ð 0à! &¨1¡*¨V°b©[Ð"8Ô9ðñ ô ð ð
Ø˜V F¨V¡OÐ3Ô4×;Ò;¸GÑDÔD��øÝ%ð ð ð Ý(Ø3°Ð3Ð3Ø! &¨µ#°f¸b±/´/Ñ)AÐ"AÔBðñ ô ð øøøøðøøøð
 ˜& 6™/Ð)Ð)à�	Ò!Ð!Ø˜‰z�C ™IœIÒ%Ð%Ý(Ø?Ø! &¨1¡*¨V°b©[Ð"8Ô9ðñ ô ð õ ”M $¨¨V°F¸Q±JÐ->Ô(?Ñ@Ô@ÀÔCˆEØ�a‰KˆFà•}Ò$Ð$Ý(ØK uÐKÐK½=ÐKÐKÐKñô ð ð ˆEÝ˜5‘\”\ð #ð #�Ý)×0Ò0°°vÑ>Ô>‘��fØ—’˜TÑ"Ô"Ð"Ð"Ø˜&�=Ð à�	Ò!Ñ!Ø˜‰z�C ™IœIÒ%Ð%Ý(Ø?Ø! &¨1¡*¨V°b©[Ð"8Ô9ðñ ô ð õ ”M $¨¨V°F¸Q±JÐ->Ô(?Ñ@Ô@ÀÔCˆEØ�a‰KˆFà•}Ò$Ð$Ý(ØK uÐKÐK½=ÐKÐKÐKñô ð ð ˆFÝ˜5‘\”\ð $ð $�Ý(×/Ò/°°fÑ=Ô=‘��VÝ! #¥sÑ+Ô+ð Ý,ØL½¸S¹	¼	Ô8JÐLÐLñô ð õ !+× 1Ò 1°$¸Ñ ?Ô ?‘��vØ#��s‘�Ø˜6�>Ð!å Ø7¨	Ð7Ð7Ð7Ø˜& 1™* V¨b¡[Ð0Ô1ð
ñ 
ô 
ð 	
s   Í M% Í%
N!Í/-NÎN!c                 óÈ   — t                                | d¦  «        \  }}|t          | ¦  «        k    r0t          dt          | ¦  «        |z
  › d�| ||dz   …         ¬¦  «        ‚|S )a  
        Decode a complete TLV-encoded value, ensuring all data is consumed.

        Args:
            data: Binary data to decode

        Returns:
            Decoded Python value

        Raises:
            DirtyProtocolError: If data is malformed or has trailing bytes
        r   zTrailing data after TLV: z bytesrC   rD   )r   rJ   r&   r   )r@   r9   rA   s      r?   Údecode_fullzTLVEncoder.decode_full  sv   € õ #×)Ò)¨$°Ñ2Ô2‰ˆˆvØ•S˜‘Y”YÒÐÝ$ØF­C°©I¬I¸Ñ,>ÐFÐFÐFØ˜f V¨b¡[Ð0Ô1ðñ ô ð ð ˆr   N)r   )r8   Ú
__module__Ú__qualname__Ú__doc__Ústaticmethodr   r*   r    r.   rJ   rV   © r   r?   r   r   ,   sµ   € € € € € ðð ð ðH
˜ð H
ð H
ð H
ñ „\ðH
ðT ðY
ð Y
�Uð Y
 Cð Y
°ð Y
ð Y
ð Y
ñ „\ðY
ðv ð˜%ð ð ð ñ „\ðð ð r   r   )rY   r"   Úerrorsr   r   r   r!   r%   r(   r,   r0   r5   r+   r'   r/   r4   r   r[   r   r?   ú<module>r]      s¨   ðð
ð ð" €€€à &Ð &Ð &Ð &Ð &Ð &ð €	Ø€	Ø€
Ø€Ø€
Ø€Ø€	Ø€	ð #€Ø!€Ø€Ø€ðCð Cð Cð Cð Cñ Cô Cð Cð Cð Cr   