+
    AžÀj  ã                  ó  a € 0 t $ ^ RIHt ^ RIt^ RIt^ RIt^ RIt^ RItRtRt	]
! R ]P                  ]P                  3 4       4      tR]R&   0 RmR R	 4       mR
 R	 4       mRkRktR R ltR R ltRR R lltR R ltR R ltR# )é    )ÚannotationsNÚ>abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789i@B c              #  óB   "  € T F  qf   K  VR8w  g   K  Vx € K  	  R # 5i)NÚ/© )Ú.0Úseps   & Úe/var/www/html/mycamper/aliexpress-site/backend/venv/lib/python3.14/site-packages/werkzeug/security.pyÚ	<genexpr>r      s   é € ð Ù&ˆC„C¸cÀS¹j‡C‚CÓ&ùs   ‚Œ•
z	list[str]Ú_os_alt_sepsc              #  ó,   "  € T F
  pR V 2x € K  	  R# 5i)ÚCOMNr   ©r   Úcs   & r
   r   r      ó   é € Ð+Ñ*�AˆˆAˆ3…iÓ*ùó   ‚u   123456789Â¹Â²Â³c              #  ó,   "  € T F
  pR V 2x € K  	  R# 5i)ÚLPTNr   r   s   & r
   r   r      r   r   ÚNULÚPRNc               ó    € V ^8„  d   QhRRRR/# )é   ÚlengthÚintÚreturnÚstrr   )Úformats   "r
   Ú__annotate__r      s   € ÷ Fñ F�Sð F˜Sñ Fó    c                óh   € V ^ 8:  d   \        R4      hRP                  R \        V 4       4       4      # )zAGenerate a random string of SALT_CHARS with specified ``length``.zSalt length must be at least 1.Ú c              3  óV   "  € T F  p\         P                  ! \        4      x € K!  	  R # 5i©N)ÚsecretsÚchoiceÚ
SALT_CHARS)r   Ú_s   & r
   r   Úgen_salt.<locals>.<genexpr>!   s   é € ÐE±}°!”7—>’>¤*×-Ð-³}ùs   ‚'))Ú
ValueErrorÚjoinÚrange)r   s   &r
   Úgen_saltr,      s.   € à�„{ÜÐ:Ó;Ð;à�7‰7ÑE´u¸V´}ÓEÓEÐEr   c               ó(   € V ^8„  d   QhRRRRRRRR/# )r   Úmethodr   ÚsaltÚpasswordr   ztuple[str, str]r   )r   s   "r
   r   r   $   s(   € ÷ 1=ñ 1=˜3ð 1= cð 1=°Sð 1=¸_ñ 1=r   c           	     óÈ  € V P                  R 4      vrVP                  4       pVP                  4       pV R8X  dm   V'       g   Rp^p^pM \        \        V4      w  rgp^„V,          V,          V,          p	\
        P                  ! WTWgW‰R7      P                  4       RV R V R V 23# V R8X  dŽ   \        V4      p
V
^ 8X  d
   Rp\        pMEV
^8X  d   V^ ,          p\        pM.V
^8X  d   V^ ,          p\        V^,          4      pM\	        R4      h\
        P                  ! WµWL4      P                  4       R	V R V 23# \	        R
V  R24      h  \         d    \	        R4      Rhi ; i)Ú:Úscryptz'scrypt' takes 3 arguments.N)r/   ÚnÚrÚpÚmaxmemzscrypt:Úpbkdf2Úsha256z'pbkdf2' takes 2 arguments.zpbkdf2:zInvalid hash method 'z'.i €  )ÚsplitÚencodeÚmapr   r)   Úhashlibr3   ÚhexÚlenÚDEFAULT_PBKDF2_ITERATIONSÚpbkdf2_hmac)r.   r/   r0   ÚargsÚ
salt_bytesÚpassword_bytesr4   r5   r6   r7   Úlen_argsÚ	hash_nameÚ
iterationss   &&&          r
   Ú_hash_internalrH   $   sx  € Ø—L‘L Ó%€M€FØ—‘“€JØ—_‘_Ó&€Nð �ÔßØˆAØˆAØ‰AðJÜœc 4›.‘��að �q•˜1•˜q•ˆä�NŠNØ°1¸Qôç‰c‹eØ�a�S˜˜!˜˜A˜a˜SÐ!ð	
ð 	
ð 
�8Ô	Ü�t“9ˆà�qŒ=Ø ˆIÜ2‰JØ˜Œ]Ø˜Q�ˆIÜ2‰JØ˜Œ]Ø˜Q�ˆIÜ˜T !�W›‰JäÐ:Ó;Ð;ô ×ÒØ¨:óç‰c‹eØ�i�[  * Ð.ð	
ð 	
ô Ð0°°¸Ð;Ó<Ð<øôA ô JÜ Ð!>Ó?ÀTÐIðJús   Á
E	 Å	E!c               ó(   € V ^8„  d   QhRRRRRRRR/# )r   r0   r   r.   Úsalt_lengthr   r   r   )r   s   "r
   r   r   X   s,   € ÷ $)ñ $)Øð$)Øð$)Ø8;ð$)àñ$)r   c                óH   € \        V4      p\        WV 4      w  rEV RV RV 2# )aì  Securely hash a password for storage. A password can be compared to a stored hash
using :func:`check_password_hash`.

The following methods are supported:

-   ``scrypt``, the default. The parameters are ``n``, ``r``, and ``p``, the default
    is ``scrypt:32768:8:1``. See :func:`hashlib.scrypt`.
-   ``pbkdf2``, less secure. The parameters are ``hash_method`` and ``iterations``,
    the default is ``pbkdf2:sha256:600000``. See :func:`hashlib.pbkdf2_hmac`.

Default parameters may be updated to reflect current guidelines, and methods may be
deprecated and removed if they are no longer considered secure. To migrate old
hashes, you may generate a new hash when checking an old hash, or you may contact
users with a link to reset their password.

:param password: The plaintext password.
:param method: The key derivation function and parameters.
:param salt_length: The number of characters to generate for the salt.

.. versionchanged:: 3.1
    The default iterations for pbkdf2 was increased to 1,000,000.

.. versionchanged:: 2.3
    Scrypt support was added.

.. versionchanged:: 2.3
    The default iterations for pbkdf2 was increased to 600,000.

.. versionchanged:: 2.3
    All plain hashes are deprecated and will not be supported in Werkzeug 3.0.
Ú$)r,   rH   )r0   r.   rJ   r/   ÚhÚactual_methods   &&&   r
   Úgenerate_password_hashrO   X   s5   € ôD �KÓ €DÜ% f°HÓ=Ñ€AØˆ_˜A˜d˜V 1 Q CÐ(Ð(r   c               ó$   € V ^8„  d   QhRRRRRR/# )r   Úpwhashr   r0   r   Úboolr   )r   s   "r
   r   r      s&   € ÷ Sñ S ð S¨sð S°tñ Sr   c                ó¢   €  V P                  R^4      w  r#p\        P                  ! \	        Y#T4      ^ ,          T4      #   \         d     R# i ; i)a  Securely check that the given stored password hash, previously generated using
:func:`generate_password_hash`, matches the given password.

Methods may be deprecated and removed if they are no longer considered secure. To
migrate old hashes, you may generate a new hash when checking an old hash, or you
may contact users with a link to reset their password.

:param pwhash: The hashed password.
:param password: The plaintext password.

.. versionchanged:: 2.3
    All plain hashes are deprecated and will not be supported in Werkzeug 3.0.
rL   F)r:   r)   ÚhmacÚcompare_digestrH   )rQ   r0   r.   r/   Úhashvals   &&   r
   Úcheck_password_hashrW      sQ   € ðØ &§¡¨S°!Ó 4Ñˆ�gô ×Òœ~¨f¸HÓEÀaÕHÈ'ÓRÐRøô ô Úðús   ‚? ¿AÁAc               ó$   € V ^8„  d   QhRRRRRR/# )r   Ú	directoryr   Ú	untrustedr   z
str | Noner   )r   s   "r
   r   r   •   s&   € ÷ J"ñ J"˜ð J"¨#ð J"°*ñ J"r   c                óâ  a€ V '       g   Rp V .pV EFG  oS'       g   K  \         P                  ! S4      o\        P                  P	                  S4      '       gë   SP                  R4      '       gÔ   SR8X  gÍ   SP                  R4      '       g¶   \        ;QJ d#    V3R l\         4       F  '       g   K   RM	  RM! V3R l\         4       4      '       gn   \        P                  R8X  d\   \        ;QJ d+    R	 SP                  R4       4       F  '       g   K   RM 	  RM! R	 SP                  R4       4       4      '       d    R
# VP                  S4       EKJ  	  \         P                  ! V!  # )a"  Safely join zero or more untrusted path components to a trusted base
directory to avoid escaping the base directory. Return ``None`` if the path
is not safe.

The untrusted path is assumed to be from/for a URL, such as for serving
files. Therefore, it should only use the forward slash ``/`` path separator,
and will be joined using that separator. On Windows, the backslash ``\``
separator is not allowed.

This only considers the path name, it does not validate if it does or does
not exist, if it is a symlink, or other properties of the file or
filesystem. It's up to the application to ensure that the contents of
``directory`` can be trusted.

On Windows, special device names such as ``CON`` and ``NUL`` are not
allowed, as this is used for serving files with :func:`.send_from_directory`
and those files will hang when read.

NTFS alternate data streams (ADS) like ``filename:stream`` are
allowed. :func:`.secure_filename` will remove the ``:`` when saving.

:param directory: The trusted base directory.
:param untrusted: The untrusted path components relative to the
    base directory.
:return: A safe path, otherwise ``None``.

.. versionchanged:: 3.1.9
    Special device names with empty ADS stream markers are not allowed on
    Windows.

.. versionchanged:: 3.1.6
    Special device names in multi-segment paths are not allowed on Windows.

.. versionchanged:: 3.1.5
    More special device names, regardless of extension or trailing spaces,
    are not allowed on Windows.

.. versionchanged:: 3.1.4
    Special device names are not allowed on Windows.
Ú.r   z..z../c              3  ó,   <"  € T F	  qS9   x € K  	  R # 5ir#   r   )r   r	   Úparts   & €r
   r   Úsafe_join.<locals>.<genexpr>Ñ   s   øé € Ð7©, 3˜$–;«,ùs   ƒTFÚntc              3  óÄ   "  € T FV  pVP                  R 4      ^ ,          P                  R4      ^ ,          P                  4       P                  4       \        9   x € KX  	  R# 5i)r2   r\   N)Ú	partitionÚstripÚupperÚ_windows_device_files)r   r6   s   & r
   r   r_   Ô   sQ   é € ð ñ -˜ð —K‘K Ó$ QÕ'×1Ñ1°#Ó6°qÕ9×?Ñ?ÓA×GÑGÓIÜ,ö-ã,ùs   ‚AA N)Ú	posixpathÚnormpathÚosÚpathÚisabsÚ
startswithÚanyr   Únamer:   Úappendr*   )rY   rZ   Úpartsr^   s   &* @r
   Ú	safe_joinrp   •   s  ø€ ÷R ð ˆ	àˆK€EäˆßÙä×!Ò! $Ó'ˆô �G‰G�M‰M˜$×Òà�‰˜s×#Ò#Ø�tŒ|Ø�‰˜u×%Ò%ß‹sÔ7­,Ó7�s�sŠsÔ7­,Ó7×7Ò7ä—‘˜4”ß“Cñ ð "ŸZ™Z¨œ_ó—C—C’Cñ ð "ŸZ™Z¨œ_ó÷ ò ò à�‰�T×ñ1 ô4 �>Š>˜5Ñ!Ð!r   >   ÚAUXÚCONúCONIN$úCONOUT$)r3   é   )Ú__conditional_annotations__Ú
__future__r   r=   rT   rh   rf   r$   r&   r@   Úlistr	   Úaltsepr   Ú__annotations__re   r,   rH   rO   rW   rp   )rv   s   @r
   Ú<module>r{      s«   øðß "Ð "ã Û Û 	Û Û àM€
Ø%Ð áñ Ø—F‘F˜BŸI™IÑ&óó €ˆió ò	ñ
 ,Ñ*Ó+ð	ñ ,Ñ*Ó+ð	ð 
ð	ð 
ð	Ð õFõ1=÷h$)õNS÷,J"r   