4V=jUddlmZddlZddlZddlZddlZddlZdZdZe dej ej fDZ de d<dd d d hd d Ddd DddZd&dZd'dZ d(d)dZd*d!Zd+d%ZdS),) annotationsN>abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789i@Bc#*K|]}||dk |VdS)N/).0seps ?C:\PYTHON\_runtimes\venv\Lib\site-packages\werkzeug/security.py r s3 #/cSjjCjjjjz list[str] _os_alt_sepsAUXCONzCONIN$zCONOUT$c# K|] }d|V dS)COMNrrcs r r r (++AiAii++++++r u123456789¹²³c# K|] }d|V dS)LPTNrrs r r r rr NULPRNlengthintreturnstrc|dkrtdddt|DS)zAGenerate a random string of SALT_CHARS with specified ``length``.rzSalt length must be at least 1.c3HK|]}tjtVdSN)secretschoice SALT_CHARS)r_s r r zgen_salt..!s,EE!7>*--EEEEEEr ) ValueErrorjoinrange)rs r gen_saltr(sA {{:;;; 77EEuV}}EEE E EEr methodsaltpasswordtuple[str, str]c|d^}}|}|}|dkr|sd}d}d}n9 tt|\}}}n#t$rt ddwxYwd|z|z|z} t j|||||| d |d|d|fS|d krt|} | d kr d } t} nI| dkr|d } t} n3| d kr|d } t|d} nt dt j | ||| d| d| fSt d|d)N:scryptiz'scrypt' takes 3 arguments.)r*nrpmaxmemzscrypt:pbkdf2rsha256z'pbkdf2' takes 2 arguments.zpbkdf2:zInvalid hash method 'z'.) splitencodemaprr%hashlibr/hexlenDEFAULT_PBKDF2_ITERATIONS pbkdf2_hmac) r)r*r+args salt_bytespassword_bytesr3r4r5r6len_args hash_name iterationss r _hash_internalrH$sLL%%MFTJ__&&N  JAAAA Jc4..1aa J J J !>??TI Jq1q NZ1Qv   cee !a ! !! ! !a ! !   8  t99 q== I2JJ ]]QI2JJ ]]QIT!WJJ:;; ;  >:z  cee .i . .* . .   ;;;;<<.s'7733$;777777r ntc3K|]J}|ddtvVKdS)r[rN) partitionstripupper_windows_device_files)rr5s r r zsafe_join..seKK$$Q'--//5577;PPr N) posixpathnormpathospathisabs startswithanyr namer:appendr&)rWrXpartsr]s @r safe_joinrns'0  KE  !$'' GMM$   s## t||u%%7777,777774!ZZ__ 44 T >5 !!r )rrrr)r)rr*rr+rrr,)r/rI)r+rr)rrJrrr)rPrr+rrrQ)rWrrXrrrY) __future__rr=rSrfrdr!r#r@listr altsepr __annotations__rcr(rHrOrVrnrr r rss~"""""""  M %$FBI&       ,+*+++  ,+*+++     FFFF-=-=-=-=b?A$)$)$)$)$)NSSSS,8"8"8"8"8"8"r