+
    +Ki                      z    R t ^ RIt^ RIHt RtRtRt^t^	t^t	^t
^t^tR tR tR tR	 tR
 tR tRR ltRR ltR# )z,Python extensions for the cracklib binding.
N)FascistCheckz2.8.19ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyzc                x    \        \        V 4      4       F!  pW,          W) ^,
          ,          8w  g   K    ^ # 	  ^# )z5Checks whether the given string is a palindrome.
    )rangelen)sampleis   & -/usr/lib/python3.14/site-packages/cracklib.py
palindromer   +   s1     3v;9rAv&       c                    V^ 8X  g   \        V 4      V8  d   ^ pMW^,
          ,          pV^ 8X  g   \        V4      V8  d   ^ pWE8g  # W^,
          ,          pWE8g  # )zCalculate how different two strings are in terms of the number
of character removals, additions, and changes needed to go from one
to the other.)r   )oldnewr	   jcvaldvals   &&&&  r
   distdifferentr   4   sZ     	AvSAq5zAvSA < q5z<r   c                :   ^ pW,          V,          R8w  d   W,          V,          # \        WW#^,
          V^,
          4      p\        V\        WW#V^,
          4      4      p\        V\        WW#^,
          V4      4      pV\        WW44      ,           pWPV,          V&   V# )z1Calculates the distance between two strings.
    )distcalculateminr   )	distancesr   r   r	   r   tmps   &&&&& r
   r   r   E   s     C|A"|A !eQUCC
c=QUC
DC
c=!eQC
DC
c-
-CaLOJr   c                R   \        V 4      p\        V4      p\        V^,           4       Uu. uF  p. NK  	  pp\        V^,           4       F'  p\        V^,           4       Uu. uF  pRNK  	  upWT&   K)  	  \        V^,           4       F  pWEV,          ^ &   K  	  \        V^,           4       F  pWe^ ,          V&   K  	  ^ V^ ,          ^ &   \        WPWV4      p\        \        V4      4       F/  p\        \        WT,          4      4       F  p^ WT,          V&   K  	  K1  	  V# u upi u upi )z,Gets the distance of two given strings.
    r   )r   r   r   )r   r   	oldlength	newlengthr	   r   r   retvals   &&      r
   distancer   W   s    CICI#IM242"2I49q=!%*9q=%9;%9%9;	 " 9q=!!Q "9q=!!Q "IaLO939EF3y>"s9<()AILO * # M! 5;s   D!D$c                v    \        W4      \        8  d   ^ # \        V4      \        V 4      ^,          8  d   ^ # ^# )z6Calculates whether the given strings are similar.
    )r   DIFF_OKr   )r   r   s   &&r
   similarr!   p   s0     W$
3xCHqL! r   c                "   ^ p^ p^ p^ pV  FX  pV\         P                  9   d   V^,           pK#  V\        9   d   V^,           pK9  V\        9   d   V^,           pKO  V^,           pKZ  	  \        ^ 8  d   V\        8  d   \        p\
        ^ 8  d   V\
        8  d   \
        p\        ^ 8  d   V\        8  d   \        p\        ^ 8  d   V\        8  d   \        p\        p\        ^ 8  d
   Wa,
          pMV\        R,          8  d   ^# \
        ^ 8  d
   Wb,
          pMV\
        R,          8  d   ^# \        ^ 8  d
   Wc,
          pMV\        R,          8  d   ^# \        ^ 8  d
   Wd,
          pMV\        R,          8  d   ^# \        V 4      V8  d   ^# ^ # )z6Checks whether the given string is simple or not.
    r   )
stringdigitsASCII_UPPERCASEASCII_LOWERCASE
DIG_CREDIT	UP_CREDIT
LOW_CREDIT
OTH_CREDIT
MIN_LENGTHr   )r   r$   upperslowersothers	charactersizes   &      r
   simpler1   }   s:    FFFF	%aZF/)aZF/)aZFaZF   Q6J.A~&9,Q6J.Q6J.DQ}	:?	#A~}	9r>	"Q}	:?	#Q}	:?	#
3x$r   c                   VR8w  d   W8X  d   \        R4      hVP                  4       pV P                  4       pW,           pWC8X  d   \        R4      hVP                  V 4      R8w  d   \        R4      h\        W44      '       d   \        R4      hVR8X  d   \	        V 4       M\	        W4       \        V 4      '       d   \        R4      h\        V 4      '       d   \        R4      hV # )	zPExtends the FascistCheck function with other checks implemented
in this module.
Nzis the same as the old onezcase changes onlyz
is rotatedzis too similar to the old onezis a palindromezis too simpler   )
ValueErrorlowerfindr!   r   r   r1   )r   r   dictpatholdmononewmonowrappeds   &&&   r
   VeryFascistCheckr:      s     d{:9::))+))+)011<<"\**7$$<==4SS##*++c{{))Jr   c                    ^ RI p^ RIpVP                  WVR7      pVP                  4       '       d   VP	                  ^ 4       VP	                  ^4       R# )zTest cracklib methods.N)	verbosityrepeatuse_dictpath)test_cracklibsysrunwasSuccessfulexit)r<   r=   r6   r?   r@   results   &&&   r
   testrE      sC    PXYFHHQKr   )NN)   rF   N)__doc__r#   	_cracklibr   __version__r%   r&   r    r+   r'   r(   r)   r*   r   r   r   r   r!   r1   r:   rE    r   r
   <module>rK      si   0  "..


	

"$2
=@@r   