+
    ¢THiÔm  ã                  óè  € R t ^ RIHt ^ RIHt ^ RIHt ^ RIH	t
 ^ RIHtHt ^ RIHtHt ^ RIHt ^ RIHtHtHt ^ R	IHt ]'       d   ^ R
IHt . R,OtRtRtRtRt]R,           tRt Rt!Rt"]#! ]$! R4      4      t%Rt&Rt'Rt(])! ]! ]%4      4      t*R-R R llt+R t,R t-Rt.Rt/Rt0R  t1R! t2R" t]+! R#R$R%R&/4      t3](^,          t4R' t ! R( R4      t5 ! R) R]54      t6]6! ]4      t7]6! ]R*R+7      t8]6! ]R*R+7      t9R# ).zC
passlib.utils.binary - binary data encoding/decoding/manipulation
)Úannotations)Ú	b32decode)Ú	b32encode)ÚError)Ú
a2b_base64Ú
b2a_base64)ÚTYPE_CHECKINGÚAnyStr)Úexc)Úbascii_to_strÚiter_byte_charsÚunicode_or_bytes)Úmemoized_property)ÚMappingÚBase64EngineÚLazyBase64Enginez@ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/z@ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789./z@./0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyzz@./ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789Ú=Ú0123456789abcdefABCDEFÚ0123456789ABCDEFÚ0123456789abcdefé   ó    ó    ó   =Nc               ó    € V ^8„  d   QhRRRR/# )é   Úmappingz#Mapping[int | AnyStr, int | AnyStr]ÚreturnÚbytes© )Úformats   "Ú6/usr/lib/python3/dist-packages/passlib/utils/binary.pyÚ__annotate__r"   j   s   € ÷ $ ñ $ Ø0ð$ ð ñ$ r   c                óB  € Vf   \         R,          pM>\        V\        4      '       g   Q h\        V4      ^ÿ8X  g   Q h\	        \        V4      4      pV P                  4        F§  w  r4\        V\        4      '       d   \        V4      p\        V\        4      '       g   Q h^ Tu;8:  d	   R8  g   Q h Q h\        V\        4      '       d   VP                  R4      p\        V\        4      '       g   Q h\        V4      ^8X  g   Q hWBV&   K©  	  \        P                  V4      # )a®  
return a 256-byte string for translating bytes using specified mapping.
bytes not specified by mapping will be left alone.

:param mapping:
    dict mapping input byte (str or int) -> output byte (str or int).

:param source:
    optional existing byte translation string to use as base.
    (must be 255-length byte string).  defaults to identity mapping.

:returns:
    255-length byte string for passing to bytes().translate.
:NNNr   Úascii)Ú_TRANSLATE_SOURCEÚ
isinstancer   ÚlenÚlistr   Úitemsr   ÚordÚintÚstrÚencodeÚB_EMPTYÚjoin)r   ÚsourceÚtargetÚkÚvs   &&   r!   Úcompile_byte_translationr4   j   sð   € ð$ ‚~Ü" 1Õ%‰ä˜&¤%×(Ò(Ð(Ð(Ü�6‹{˜cÔ!Ð!Ð!Ü”o fÓ-Ó.ˆð —‘–‰ˆÜ�aÔ)×*Ò*Ü�A“ˆAÜ˜!œS×!Ò!Ð!Ð!Ø�AŽ|˜Œ|Ð‰|Ðˆ|Ü�aœ×ÒØ—‘˜Ó!ˆAÜ˜!œU×#Ò#Ð#Ð#Ü�1‹v˜Œ{Ðˆ{Øˆq‹	ñ  ô �<‰<˜ÓÐr   c                ó>   € \        V 4      P                  \        4      # )zf
encode using shortened base64 format which omits padding & whitespace.
uses default ``+/`` altchars.
)r   ÚrstripÚ_BASE64_STRIP©Údatas   &r!   Úb64s_encoder:   ‘   s   € ô
 �dÓ×"Ñ"¤=Ó1Ð1r   c                ó|  € \        V \        4      '       d    V P                  R4      p \        V 4      ^,          pV^ 8X  d   M5V^8X  d   V \        ,          p M V^8X  d   V \        ,          p M\	        R4      h \        V 4      #   \         d    \	        R4      Rhi ; i  \         d   p\        T4      RhRp?ii ; i)ze
decode from shortened base64 format which omits padding & whitespace.
uses default ``+/`` altchars.
r$   ú4string argument should contain only ASCII charactersNzinvalid base64 input)r&   r,   r-   ÚUnicodeEncodeErrorÚ
ValueErrorr'   Ú_BASE64_PAD2Ú_BASE64_PAD1r   Ú_BinAsciiErrorÚ	TypeError)r9   ÚoffÚerrs   &  r!   Úb64s_decoderE   ™   s¼   € ô
 �$œ×Òð	Ø—;‘;˜wÓ'ˆDô
 ˆd‹)�a�-€CØ
ˆa„xØØ	�ŒØ”Õ‰Ø	�ŒØ”Õ‰äÐ/Ó0Ð0ð'Ü˜$ÓÐøô "ô 	ÜØFóàðð	ûô ô 'Ü˜‹n $Ð&ûð'ús#   ˜B Á9
B ÂBÂB;Â*B6Â6B;s   =
s   ==c                ó8   € \        V 4      P                  RR4      # )zž
encode using shortened base64 format which omits padding & whitespace.
uses custom ``./`` altchars.

it is primarily used by Passlib's custom pbkdf2 hashes.
ó   +ó   .)r:   Úreplacer8   s   &r!   Úab64_encoderJ   ½   s   € ô �tÓ×$Ñ$ T¨4Ó0Ð0r   c                ó¾   € \        V \        4      '       d    V P                  R4      p \        V P                  RR4      4      #   \         d    \	        R4      Rhi ; i)zÓ
decode from shortened base64 format which omits padding & whitespace.
uses custom ``./`` altchars, but supports decoding normal ``+/`` altchars as well.

it is primarily used by Passlib's custom pbkdf2 hashes.
r$   r<   NrH   rG   )r&   r,   r-   r=   r>   rE   rI   r8   s   &r!   Úab64_decoderL   Ç   s`   € ô �$œ×Òð	Ø—;‘;˜wÓ'ˆDô
 �t—|‘| D¨$Ó/Ó0Ð0øô	 "ô 	ÜØFóàðð	ús   ˜A ÁAc                óP   € \        \        V 4      P                  \        4      4      # )z\
wrapper around :func:`base64.b32encode` which strips padding,
and returns a native string.
)r   Ú
_b32encoder6   ÚB_EQUAL)r0   s   &r!   r   r   Ù   s   € ô œ FÓ+×2Ñ2´7Ó;Ó<Ð<r   Ú8ÚBÚ0ÚOc                óè   € \        V \        4      '       d   V P                  R4      p V P                  \        4      p \        V 4      ^,          pV'       d   V \        RV)  ,          p \        V R4      # )zt
wrapper around :func:`base64.b32decode`
which handles common mistyped chars.
padding optional, ignored if present.
r$   NT)r&   r,   r-   Ú	translateÚ_b32_translater'   Ú_b32_decode_padÚ
_b32decode)r0   Ú	remainders   & r!   r   r   ë   sd   € ô �&œ#×ÒØ—‘˜wÓ'ˆØ×ÑœnÓ-€Fô �F“˜cÕ!€IßØ”/ + I :Ð.Õ.ˆô �f˜dÓ#Ð#r   c                  óö   € ] tR tRtRtRtRtRtRtRt	Rt
R R lt]R 4       tR tR tR tR	 tR
 tR tR t]R 4       t]R 4       tR tR tR tR tR tR tR tR tR t R t!R t"R t#R t$R t%R t&R t'Rt(R# )!r   r   a¯  Provides routines for encoding/decoding base64 data using
arbitrary character mappings, selectable endianness, etc.

:arg charmap:
    A string of 64 unique characters,
    which will be used to encode successive 6-bit chunks of data.
    A character's position within the string should correspond
    to its 6-bit value.

:param big:
    Whether the encoding should be big-endian (default False).

.. note::
    This class does not currently handle base64's padding characters
    in any way what so ever.

Raw Bytes <-> Encoded Bytes
===========================
The following methods convert between raw bytes,
and strings encoded using the engine's specific base64 variant:

.. automethod:: encode_bytes
.. automethod:: decode_bytes
.. automethod:: encode_transposed_bytes
.. automethod:: decode_transposed_bytes

..
    .. automethod:: check_repair_unused
    .. automethod:: repair_unused

Integers <-> Encoded Bytes
==========================
The following methods allow encoding and decoding
unsigned integers to and from the engine's specific base64 variant.
Endianess is determined by the engine's ``big`` constructor keyword.

.. automethod:: encode_int6
.. automethod:: decode_int6

.. automethod:: encode_int12
.. automethod:: decode_int12

.. automethod:: encode_int24
.. automethod:: decode_int24

.. automethod:: encode_int64
.. automethod:: decode_int64

Informational Attributes
========================
.. attribute:: charmap

    unicode string containing list of characters used in encoding;
    position in string matches 6bit value of character.

.. attribute:: bytemap

    bytes version of :attr:`charmap`

.. attribute:: big

    boolean flag indicating this using big-endian encoding.
Nc                	ó\  € \        V\        4      '       d   VP                  R 4      pM-\        V\        4      '       g   \        P
                  ! VR4      h\        V4      ^@8w  d   \        R4      h\        \        V4      4      ^@8w  d   \        R4      hWn	        VP                  V n        \        R \        V4       4       4      pVP                  V n        W n        V'       d%   V P                   V n        V P$                  V n        R# V P(                  V n        V P*                  V n        R# )úlatin-1Úcharmapz'charmap must be 64 characters in lengthz-charmap must not contain duplicate charactersc              3  ó,   "  € T F
  w  rW!3x € K  	  R # 5i©Nr   )Ú.0ÚidxÚvalues   &  r!   Ú	<genexpr>Ú(Base64Engine.__init__.<locals>.<genexpr>Z  s   é € ÐHÑ5G¡z s�u•lÓ5Gùs   ‚N)r&   r,   r-   r   r
   ÚExpectedStringErrorr'   r>   ÚsetÚbytemapÚ__getitem__Ú	_encode64ÚdictÚ	enumerateÚ	_decode64ÚbigÚ_encode_bytes_bigÚ_encode_bytesÚ_decode_bytes_bigÚ_decode_bytesÚ_encode_bytes_littleÚ_decode_bytes_little)Úselfr]   rm   Úlookups   &&& r!   Ú__init__ÚBase64Engine.__init__N  sè   € ä�gœs×#Ò#Ø—n‘n YÓ/‰GÜ˜G¤U×+Ò+Ü×)Ò)¨'°9Ó=Ð=Üˆw‹<˜2ÔÜÐFÓGÐGÜŒs�7‹|Ó Ô"ÜÐLÓMÐMØŒØ ×,Ñ,ˆŒÜÑH´Y¸wÔ5GÓHÓHˆØ×+Ñ+ˆŒð ŒßØ!%×!7Ñ!7ˆDÔØ!%×!7Ñ!7ˆDÖà!%×!:Ñ!:ˆDÔØ!%×!:Ñ!:ˆDÖr   c                ó8   € V P                   P                  R4      # )zcharmap as unicoder\   )rg   Údecode)rt   s   &r!   r]   ÚBase64Engine.charmapp  s   € ð �|‰|×"Ñ" 9Ó-Ð-r   c                ó  € \        V\        4      '       g   \        R\        V4       24      h\	        \        V4      ^4      w  r#\        V4      P                  pV P                  WBV4      p\        \        V P                  V4      4      # )zsencode bytes to base64 string.

:arg source: byte string to encode.
:returns: byte string containing encoded data.
úsource must be bytes, not )r&   r   rB   ÚtypeÚdivmodr'   ÚiterÚ__next__ro   Úmapri   )rt   r0   ÚchunksÚtailÚ
next_valueÚgens   &&    r!   Úencode_bytesÚBase64Engine.encode_bytesu  sq   € ô ˜&¤%×(Ò(ÜÐ8¼¸f»¸ÐGÓHÐHÜœc &›k¨1Ó-‰ˆÜ˜&“\×*Ñ*ˆ
Ø× Ñ  °TÓ:ˆÜ”S˜Ÿ™¨Ó-Ó.Ð.r   c              #  óö  "  € ^ pWB8  dw   V! 4       pV! 4       pV! 4       pV^?,          x € V^,          ^,          V^,	          ,          x € V^,          ^,          V^,	          ,          x € V^,	          x € V^,          pK|  V'       do   V! 4       pV^8X  d   V^?,          x € V^,	          x € R# V^8X  g   Q hV! 4       pV^?,          x € V^,          ^,          V^,	          ,          x € V^,	          x € R# R# 5i)z>helper used by encode_bytes() to handle little-endian encodingNr   ©rt   r„   r‚   rƒ   ra   Úv1Úv2Úv3s   &&&&    r!   rr   Ú!Base64Engine._encode_bytes_little†  sÖ   é € ð ˆØŒlÙ“ˆBÙ“ˆBÙ“ˆBØ�t•)ŠOØ˜•I !Õ#¨¨a­Õ0Ò0Ø˜•I !Õ#¨¨a­Õ0Ò0Ø˜•'ŠMØ�1�HŠCßÙ“ˆBØ�qŒyà˜4•i’Ø˜A•g”à˜q”yÐ �yá“\�Ø˜4•i’Ø˜T�	 aÕ'¨B°!­GÕ4Ò4Ø˜A•g”ñ ùs   ‚BC9Â	A0C9c              #  ó  "  € ^ pWB8  dw   V! 4       pV! 4       pV! 4       pV^,	          x € V^,          ^,          V^,	          ,          x € V^,          ^,          V^,	          ,          x € V^?,          x € V^,          pK|  V'       d}   V! 4       pV^8X  d    V^,	          x € V^,          ^,          x € R# V^8X  g   Q hV! 4       pV^,	          x € V^,          ^,          V^,	          ,          x € V^,          ^,          x € R# R# 5i)z;helper used by encode_bytes() to handle big-endian encodingNr   r‰   s   &&&&    r!   rn   ÚBase64Engine._encode_bytes_big­  sâ   é € ð ˆØŒlÙ“ˆBÙ“ˆBÙ“ˆBØ˜•'ŠMØ˜•I !Õ#¨¨a­Õ0Ò0Ø˜•I !Õ#¨¨a­Õ0Ò0Ø�t•)ŠOØ�1�HŠCßÙ“ˆBØ�qŒyà˜A•g’Ø˜D•y QÕ&Ô&à˜q”yÐ �yá“\�Ø˜A•g’Ø˜T�	 aÕ'¨B°!­GÕ4Ò4Ø˜T�	 aÕ'Ô(ñ ùs   ‚BDÂ	A>Dc                óŒ  € \        V\        4      '       g   \        R\        V4       24      h\	        \        V4      ^4      w  r#V^8X  d   \        R4      h\        V P                  V4      P                  p \        V P                  WBV4      4      #   \         d&   p\        RTP                  ^ ,          : 24      hRp?ii ; i)zudecode bytes from base64 string.

:arg source: byte string to decode.
:returns: byte string containing decoded data.
r|   z(input string length cannot be == 1 mod 4zinvalid character: N)r&   r   rB   r}   r~   r'   r>   r�   rl   r€   rq   ÚKeyErrorÚargs)rt   r0   r‚   rƒ   r„   rD   s   &&    r!   Údecode_bytesÚBase64Engine.decode_bytesÔ  s°   € ô ˜&¤%×(Ò(ÜÐ8¼¸f»¸ÐGÓHÐHô
 œc &›k¨1Ó-‰ˆØ�1Œ9äÐGÓHÐHÜ˜Ÿ™¨Ó0×9Ñ9ˆ
ð	DÜ˜×+Ñ+¨JÀÓEÓFÐFøÜô 	DÜÐ2°3·8±8¸Aµ;±/ÐBÓCÐCûð	Dús   Á8B ÂCÂ B>Â>Cc              #  óÎ  "  € ^ pWB8  dy   V! 4       pV! 4       pV! 4       pV! 4       pWV^,          ^,          ,          x € V^,	          V^,          ^,          ,          x € V^,	          V^,          ,          x € V^,          pK~  V'       dY   V! 4       pV! 4       pWV^,          ^,          ,          x € V^8X  d*   V! 4       pV^,	          V^,          ^,          ,          x € R# R# R# 5i)z>helper used by decode_bytes() to handle little-endian encodingNr   ©	rt   r„   r‚   rƒ   ra   rŠ   r‹   rŒ   Úv4s	   &&&&     r!   rs   Ú!Base64Engine._decode_bytes_littleê  sÂ   é € ð ˆØŒlÙ“ˆBÙ“ˆBÙ“ˆBÙ“ˆBØ˜c� a�Õ(Ò(Ø˜•7  S¥¨Q�Õ/Ò/Ø˜•7˜r Q�wÕ'Ò'Ø�1�HŠCßá“ˆBÙ“ˆBØ˜c� a�Õ(Ò(à�qŒyá“\�Ø˜Q•w B¨¥H°¥?Õ3Ô3ñ ñ ùs   ‚BC%ÂAC%c              #  óÒ  "  € ^ pWB8  dz   V! 4       pV! 4       pV! 4       pV! 4       pV^,          V^,	          ,          x € V^,          ^,          V^,	          ,          x € V^,          ^,          V,          x € V^,          pK  V'       dZ   V! 4       pV! 4       pV^,          V^,	          ,          x € V^8X  d*   V! 4       pV^,          ^,          V^,	          ,          x € R# R# R# 5i)z;helper used by decode_bytes() to handle big-endian encodingNr   r–   s	   &&&&     r!   rp   ÚBase64Engine._decode_bytes_big  sÆ   é € ð ˆØŒlÙ“ˆBÙ“ˆBÙ“ˆBÙ“ˆBØ˜•7˜r Q�wÕ'Ò'Ø˜•H •? r¨Q¥wÕ/Ò/Ø˜•H •? bÕ(Ò(Ø�1�HŠCßá“ˆBÙ“ˆBØ˜•7˜r Q�wÕ'Ò'à�qŒyá“\�Ø˜S� Q•¨2°­7Õ3Ô3ñ ñ ùs   ‚B	C'ÂAC'c                óÆ   a€ \        V3R l\        V P                  4       4       4      pVP                  V3R l\        V P                  4       4       4       \        V4      # )z2helper to generate set of valid last chars & bytesc              3  óN   <"  € T F  w  rVS,          '       d   K  Vx € K  	  R # 5ir_   r   ©r`   ÚiÚcÚbitss   &  €r!   rc   Ú-Base64Engine.__make_padset.<locals>.<genexpr>5  s   øé € ÐIÑ!8™˜ÀÀDÇÁ—1’1Ó!8ùó   ƒ%›
%c              3  óN   <"  € T F  w  rVS,          '       d   K  Vx € K  	  R # 5ir_   r   r�   s   &  €r!   rc   r¡   6  s   øé € ÐJÑ"9™$˜!ÀÀTÇÁ—A’AÓ"9ùr¢   )rf   rk   rg   Úupdater]   Ú	frozenset)rt   r    Úpsets   &f r!   Ú__make_padsetÚBase64Engine.__make_padset3  sA   ø€ äÔI¤¨4¯<©<Ô!8ÓIÓIˆØ�‰ÔJ¤)¨D¯L©LÔ"9ÓJÔJÜ˜‹Ðr   c                óV   € V P                   '       d   ^M^<pV( V P                  V4      3# )zDmask to clear padding bits, and valid last bytes (for strings 2 % 4)©rm   Ú_Base64Engine__make_padset©rt   r    s   & r!   Ú	_padinfo2ÚBase64Engine._padinfo29  s+   € ð —X—X�X‰r GˆØˆu�d×(Ñ(¨Ó.Ð.Ð.r   c                óV   € V P                   '       d   ^M^0pV( V P                  V4      3# )zDmask to clear padding bits, and valid last bytes (for strings 3 % 4)rª   r¬   s   & r!   Ú	_padinfo3ÚBase64Engine._padinfo3@  s+   € ð —H—H�H‰q 6ˆØˆu�d×(Ñ(¨Ó.Ð.Ð.r   c                ó
  € \        V4      ^,          pV^8X  d   V P                  w  r4M-V^8X  d   V P                  w  r4MV'       g   RV3# \        R4      hVR,          pWT9   d   RV3# \	        V\
        4      '       d9   V P                  pWfP                  V4      V,          ,          pWT9   g   Q R4       hM@V P                  V P                  V4      V,          4      pWT9   g   Q R4       h\        V.4      pRVRR V,           3# )zêhelper to detect & clear invalid unused bits in last character.

:arg source:
    encoded data (as ascii bytes or unicode).

:returns:
    `(True, result)` if the string was repaired,
    `(False, source)` if the string was ok as-is.
Fzsource length must != 1 mod 4z%failed to generate valid padding charTNéÿÿÿÿ)r'   r­   r°   r>   r&   r,   r]   Úindexri   rl   r   )rt   r0   rƒ   ÚmaskÚpadsetÚlastÚcms   &&     r!   Úcheck_repair_unusedÚ Base64Engine.check_repair_unusedG  sø   € ô �6‹{˜Q�ˆØ�1Œ9ØŸ>™>‰LˆD�&Ø�QŒYØŸ>™>‰LˆD�&ßØ˜&�=Ð äÐ<Ó=Ð=ð �b�zˆØŒ>Ø˜&�=Ð ô �fœc×"Ò"Ø—‘ˆBØ—h‘h˜t“n tÕ+Õ,ˆDØ”>ÐJÐ#JÓJ‘>ð —>‘> $§.¡.°Ó"6¸Õ"=Ó>ˆDØ”>ÐJÐ#JÓJ�>Ü˜$˜“=ˆDØ�V˜C˜R�[ 4Õ'Ð'Ð'r   c                	ó2   € V P                  V4      ^,          # )é   )r¹   ©rt   r0   s   &&r!   Úrepair_unusedÚBase64Engine.repair_unusedo  s   € Ø×'Ñ'¨Ó/°Õ2Ð2r   c                óª   a€ \        S\        4      '       g   \        R\        S4       24      h\        V3R lV 4       4      pV P	                  V4      # )z>encode byte string, first transposing source using offset listr|   c              3  ó6   <"  € T F  pSV,          x € K  	  R # 5ir_   r   )r`   rC   r0   s   & €r!   rc   Ú7Base64Engine.encode_transposed_bytes.<locals>.<genexpr>‚  s   øé € Ð3©7 C�F˜3—K’K«7ùs   ƒ)r&   r   rB   r}   r†   )rt   r0   ÚoffsetsÚtmps   &f& r!   Úencode_transposed_bytesÚ$Base64Engine.encode_transposed_bytes~  sH   ø€ ä˜&¤%×(Ò(ÜÐ8¼¸f»¸ÐGÓHÐHÜÔ3©7Ó3Ó3ˆØ× Ñ  Ó%Ð%r   c                ó�   € V P                  V4      pR.\        V4      ,          p\        W#4       F	  w  rVWdV&   K  	  \        V4      # )zGdecode byte string, then reverse transposition described by offset listN)r“   r'   Úzipr   )rt   r0   rÃ   rÄ   ÚbufrC   Úchars   &&&    r!   Údecode_transposed_bytesÚ$Base64Engine.decode_transposed_bytes…  sF   € ð
 ×Ñ Ó'ˆØˆf”s˜7“|Õ#ˆÜ˜WÖ*‰IˆCØ�‹Hñ +ä�S‹zÐr   c                ó  € \        V\        4      '       g   \        R\        V4       24      hV P                  pV) ^,          pW$,           ^,          p\        V4      V8w  d   \        RV3,          4      hV P                  p^ p V'       d   TM
\        V4       F  pV^,          V! V4      ,           pK  	  T'       d*   T'       d   Yt,          pT# T^T,          ^,
          ,          pT#   \         d    \        RX: 24      hi ; i)ac  decode base64 string -> integer

:arg source: base64 string to decode.
:arg bits: number of bits in resulting integer.

:raises ValueError:
    * if the string contains invalid base64 characters.
    * if the string is not long enough - it must be at least
      ``int(ceil(bits/6))`` in length.

:returns:
    a integer in the range ``0 <= n < 2**bits``
r|   zsource must be %d charszinvalid character in string: )
r&   r   rB   r}   rm   r'   r>   rl   Úreversedr‘   )	rt   r0   r    rm   ÚpadÚcharsry   ÚoutrŸ   s	   &&&      r!   Ú_decode_intÚBase64Engine._decode_int�  sø   € ô ˜&¤%×(Ò(ÜÐ8¼¸f»¸ÐGÓHÐHØ�h‰hˆØˆe�a�iˆØ•˜qÕ ˆÜˆv‹;˜%ÔÜÐ6¸%¸ÕAÓBÐBØ—‘ˆØˆð	Dß"‘V¬°Ó(8Ò8�Ø˜a•x¡6¨!£9Õ,’ñ 9÷ çØ•�ð ˆ
ð ˜˜T�	 Q•Õ&�Øˆ
øô ô 	DÜÐ<¸Q¹EÐBÓCÐCð	Dús   ÂC* Â*C* Ã*Dc                óü   € \        V\        4      '       g   \        R\        V4       24      h\	        V4      ^8w  d   \        R4      hV^ ,          p V P                  V4      #   \         d    \        R4      hi ; i)z(decode single character -> 6 bit integerr|   zsource must be exactly 1 byteúinvalid character)r&   r   rB   r}   r'   r>   rl   r‘   r½   s   &&r!   Údecode_int6ÚBase64Engine.decode_int6¸  sv   € ä˜&¤%×(Ò(ÜÐ8¼¸f»¸ÐGÓHÐHÜˆv‹;˜!ÔÜÐ<Ó=Ð=à˜•ˆð	2Ø—>‘> &Ó)Ð)øÜô 	2ÜÐ0Ó1Ð1ð	2ús   ÁA$ Á$A;c                ó¬  € \        V\        4      '       g   \        R\        V4       24      h\	        V4      ^8w  d   \        R4      hV P                  p V P                  '       d+   V! V^,          4      V! V^ ,          4      ^,          ,           # V! V^ ,          4      V! V^,          4      ^,          ,           #   \         d    \        R4      hi ; i)z'decodes 2 char string -> 12-bit integerr|   zsource must be exactly 2 bytesrÕ   ©	r&   r   rB   r}   r'   r>   rl   rm   r‘   ©rt   r0   ry   s   && r!   Údecode_int12ÚBase64Engine.decode_int12Å  s´   € ä˜&¤%×(Ò(ÜÐ8¼¸f»¸ÐGÓHÐHÜˆv‹;˜!ÔÜÐ=Ó>Ð>Ø—‘ˆð	2Ø�x�xˆxÙ˜f Q�iÓ(©F°6¸!µ9Ó,=ÀÕ,BÕCÐCÙ˜& �)Ó$©¨v°a­yÓ(9¸QÕ(>Õ?Ð?øÜô 	2ÜÐ0Ó1Ð1ð	2ús   ÁB< Á()B< Â)B< Â<Cc                ó„  € \        V\        4      '       g   \        R\        V4       24      h\	        V4      ^8w  d   \        R4      hV P                  p V P                  '       da   V! V^,          4      V! V^,          4      ^,          ,           V! V^,          4      ^,          ,           V! V^ ,          4      ^,          ,           # V! V^ ,          4      V! V^,          4      ^,          ,           V! V^,          4      ^,          ,           V! V^,          4      ^,          ,           #   \         d    \        R4      hi ; i)z'decodes 4 char string -> 24-bit integerr|   zsource must be exactly 4 bytesrÕ   rÙ   rÚ   s   && r!   Údecode_int24ÚBase64Engine.decode_int24Ó  s  € ä˜&¤%×(Ò(ÜÐ8¼¸f»¸ÐGÓHÐHÜˆv‹;˜!ÔÜÐ=Ó>Ð>Ø—‘ˆð	2Ø�x�xˆxá˜6 !�9Ó%Ù˜f Q�iÓ(¨AÕ-õ/á˜f Q�iÓ(¨BÕ.õ0ñ ˜f Q�iÓ(¨BÕ.õ0ðñ �v˜a•yÓ!Ù˜& �)Ó$¨Õ)õ+á˜& �)Ó$¨Õ*õ,ñ ˜& �)Ó$¨Õ*õ,ðøô ô 	2ÜÐ0Ó1Ð1ð	2ús   ÁD( Á(AD( ÃAD( Ä(D?c                ó&   € V P                  V^4      # )ú&decode 5 char string -> 30 bit integer©rÒ   r½   s   &&r!   Údecode_int30ÚBase64Engine.decode_int30ë  s   € à×Ñ ¨Ó+Ð+r   c                ó&   € V P                  V^@4      # )z™decode 11 char base64 string -> 64-bit integer

this format is used primarily by des-crypt & variants to encode
the DES output value used as a checksum.
râ   r½   s   &&r!   Údecode_int64ÚBase64Engine.decode_int64ï  s   € ð ×Ñ ¨Ó+Ð+r   c                ó  a€ S^ 8¼  g   Q R4       hV) ^,          pW#,          pV P                   '       d   \        V^,
          RR4      pSV,          oM\        ^ V^4      p\        \        V P                  V3R lV 4       4      4      # )z­encode integer into base64 format

:arg value: non-negative integer to encode
:arg bits: number of bits to encode

:returns:
    a string of length ``int(ceil(bits/6.0))``.
zcaller did not sanitize inputc              3  óD   <"  € T F  pSV,	          ^?,          x € K  	  R# 5i)é?   Nr   )r`   rC   rb   s   & €r!   rc   Ú+Base64Engine._encode_int.<locals>.<genexpr>
  s   øé € Ð)OÉ3ÀC¨5°C­<¸4×*?Ò*?Ë3ùs   ƒ iúÿÿÿ)rm   Úranger   r�   ri   )rt   rb   r    rÏ   Úitrs   &f&  r!   Ú_encode_intÚBase64Engine._encode_int÷  sw   ø€ ð ˜ŒzÐ:Ð:Ó:ˆzØˆe�a�iˆØ�ˆØ�8�8ˆ8Ü˜˜q� " bÓ)ˆCà�c�M‰Eä˜˜4 Ó#ˆCä”S˜Ÿ™Ô)OÉ3Ó)OÓPÓQÐQr   c                ó^   € V^ 8  g   V^?8”  d   \        R4      hV P                  W^,            # )z0encodes 6-bit integer -> single hash64 characterúvalue out of range)r>   rg   ©rt   rb   s   &&r!   Úencode_int6ÚBase64Engine.encode_int6  s.   € à�1Œ9˜ œ
ÜÐ1Ó2Ð2Ø�|‰|˜E¨A¥IÐ.Ð.r   c                óè   € V^ 8  g   VR8”  d   \        R4      hV^?,          V^,	          ^?,          .pV P                  '       d   VP                  4        \        \	        V P
                  V4      4      # )z'encodes 12-bit integer -> 2 char stringiÿ  rñ   ©r>   rm   Úreverser   r�   ri   ©rt   rb   Úraws   && r!   Úencode_int12ÚBase64Engine.encode_int12  sZ   € à�1Œ9˜ œÜÐ1Ó2Ð2Ø�t�|˜e q�j¨DÕ0Ð1ˆØ�8�8ˆ8Ø�K‰KŒMÜ”S˜Ÿ™¨Ó-Ó.Ð.r   c                ó$  € V^ 8  g   VR8”  d   \        R4      hV^?,          V^,	          ^?,          V^,	          ^?,          V^,	          ^?,          .pV P                  '       d   VP                  4        \        \	        V P
                  V4      4      # )z'encodes 24-bit integer -> 4 char stringiÿÿÿ rñ   rö   rø   s   && r!   Úencode_int24ÚBase64Engine.encode_int24  sx   € à�1Œ9˜ Ô(ÜÐ1Ó2Ð2à�D�LØ�a�Z˜4ÕØ�b�[˜DÕ Ø�b�[˜DÕ ð	
ˆð �8�8ˆ8Ø�K‰KŒMÜ”S˜Ÿ™¨Ó-Ó.Ð.r   c                óX   € V^ 8  g   VR8”  d   \        R4      hV P                  V^4      # )rá   iÿÿÿ?rñ   ©r>   rî   rò   s   &&r!   Úencode_int30ÚBase64Engine.encode_int30-  s/   € à�1Œ9˜ 
Ô*ÜÐ1Ó2Ð2Ø×Ñ  rÓ*Ð*r   c                óX   € V^ 8  g   VR8”  d   \        R4      hV P                  V^@4      # )z™encode 64-bit integer -> 11 char hash64 string

this format is used primarily by des-crypt & variants to encode
the DES output value used as a checksum.
l   ÿÿÿÿ rñ   r   rò   s   &&r!   Úencode_int64ÚBase64Engine.encode_int643  s2   € ð �1Œ9˜Ð 2Ô2ÜÐ1Ó2Ð2Ø×Ñ  rÓ*Ð*r   )rl   rq   ri   ro   rm   rg   )F))Ú__name__Ú
__module__Ú__qualname__Ú__firstlineno__Ú__doc__rg   rm   ri   rl   ro   rq   rv   Úpropertyr]   r†   rr   rn   r“   rs   rp   r«   r   r­   r°   r¹   r¾   rÅ   rË   rÒ   rÖ   rÛ   rÞ   rã   ræ   rî   ró   rú   rý   r  r  Ú__static_attributes__r   r   r!   r   r      sé   † ñ>ðB €GØ
€Cð €IØ€Ið €MØ€Mô;ðD ñ.ó ð.ò/ò"%òN%)òNDò,!4òF!4òLð ñ/ó ð/ð ñ/ó ð/ò&(òP3ò&ò	ò"òP2ò2ò2ò0,ò,òRò2/ò/ò/ò+ö+r   c                  ó<   a € ] tR tRtRtRtR tV 3R ltR tRt	V ;t
# )r   i>  z<Base64Engine which delays initialization until it's accessedNc                	ó   € W3V n         R # r_   )Ú
_lazy_opts)rt   r’   Úkwdss   &*,r!   rv   ÚLazyBase64Engine.__init__C  s   € Ø˜,ˆŽr   c                	ó^   <€ V P                   w  r\        SV `  ! V/ VB  V = \        V n        R # r_   )r  Úsuperrv   r   Ú	__class__)rt   r’   r  r  s   &  €r!   Ú
_lazy_initÚLazyBase64Engine._lazy_initF  s,   ø€ Ø—_‘_‰
ˆÜ‰Ò˜$Ð' $Ò'ØˆOÜ%ˆŽr   c                	óz   € VP                  R 4      '       g   V P                  4        \        P                  W4      # )Ú_)Ú
startswithr  ÚobjectÚ__getattribute__)rt   Úattrs   &&r!   r  Ú!LazyBase64Engine.__getattribute__L  s,   € Ø�‰˜s×#Ò#Ø�O‰OÔÜ×&Ñ& tÓ2Ð2r   )r  r  )r  r  r  r	  r
  r  rv   r  r  r  Ú__classcell__)r  s   @r!   r   r   >  s   ø† ÙFà€Jò'õ&÷3ð 3r   T)rm   )ÚBASE64_CHARSÚPADDED_BASE64_CHARSÚ
AB64_CHARSÚHASH64_CHARSÚBCRYPT_CHARSÚ	HEX_CHARSÚLOWER_HEX_CHARSÚUPPER_HEX_CHARSÚALL_BYTE_VALUESr4   rJ   rL   r:   rE   r   r   r   r   Úh64Úh64bigÚbcrypt64r_   ):r
  Ú
__future__r   Úbase64r   rX   r   rN   Úbinasciir   rA   r   r   Útypingr   r	   Úpasslibr
   Úpasslib.utils.compatr   r   r   Úpasslib.utils.decorr   Úcollections.abcr   Ú__all__r  r!  r"  r#  r   r$  r&  r%  r   rì   r'  r.   ÚB_NULLrO   r(   r%   r4   r:   rE   r7   r@   r?   rJ   rL   rV   rW   r   r   r(  r)  r*  r   r   r!   Ú<module>r5     sK  ðñõ #õõõ -ß +ß (å ÷ñ õ
 2çÝ'ò€ðF R€ð P€
ð R€ð R€ð # SÕ(Ð ð %€	ð %€ð %€ñ ™˜c›
Ó#€ð €Ø	€Ø
€ñ ™¨Ó9Ó:Ð ÷$ òN2ò'ð8 €Ø€Ø€ò1ò1ò$=ñ *¨3°°S¸#Ð*>Ó?€ð ˜A•+€ò$÷*{+ñ {+ô|3�|ô 3ñ( �|Ó$€Ù	˜,¨DÔ	1€Ù˜L¨dÔ3‚r   