/usr/lib/fixperms/venv/lib/python3.13/site-packages/packaging/__pycache__
NameSizeModeActions
dependency_groups.cpython-313.pyc110960644editdlrm
direct_url.cpython-313.pyc147120644editdlrm
errors.cpython-313.pyc43960644editdlrm
markers.cpython-313.pyc177010644editdlrm
metadata.cpython-313.pyc314670644editdlrm
pylock.cpython-313.pyc380670644editdlrm
requirements.cpython-313.pyc63030644editdlrm
specifiers.cpython-313.pyc744510644editdlrm
tags.cpython-313.pyc372250644editdlrm
utils.cpython-313.pyc108460644editdlrm
version.cpython-313.pyc412820644editdlrm
_elffile.cpython-313.pyc51160644editdlrm
_manylinux.cpython-313.pyc101310644editdlrm
_musllinux.cpython-313.pyc46120644editdlrm
_parser.cpython-313.pyc158190644editdlrm
_structures.cpython-313.pyc16560644editdlrm
_tokenizer.cpython-313.pyc85430644editdlrm
__init__.cpython-313.pyc5350644editdlrm
Edit: /usr/lib/fixperms/venv/lib/python3.13/site-packages/packaging/__pycache__/version.cpython-313.pyc (41282B)
giSrSSKJr SSKrSSKrSSKrSSKJrJrJrJ r J r J r J r J r \R(aSSKJrJr \R$S:aSSKJr O%\R(aSSKJr O SSKrSSKrSSjr#S?Sjr$"SS\%5r&"SS5r'Sr(\(RSSS5RSSS 5r*\RVRXS!:Xa\R$S":d:\RVRXS#:Xa\R$S$:d\R$S%:a\*O\(r-\R\"S&\R^\R`-5r1\2"S'5r3S@S(jr4SAS)jr5SBS*jr6SCS+jr7SDS,jr8SES-jr9"S.S/\ 5r:"S0S\'5r;"S1S2\;5r<SFS3jr=\R\"S45r>SGS5jr?SS6S7S8.r@S9rAS:rBS9rC\BSSSS6S4rDSHS;jrEg)IzZ .. testsetup:: from packaging.version import parse, normalize_pre, Version, _cmpkey ) annotationsN)AnyCallableLiteral NamedTuple SupportsIntTuple TypedDictUnion)SelfUnpack) ) deprecatedc^SU4SjjnU$)NcN>^[R"T5SUU4Sjj5nU$)NcH>[R"T[SS9 T"U0UD6$)N)category stacklevel)warningswarnDeprecationWarning)argskwargsfuncmessages H/usr/lib/fixperms/venv/lib/python3.13/site-packages/packaging/version.pywrapper/_deprecated..decorator..wrapper's* /  T,V,,)robjectrr"returnr") functoolswraps)rrrs` r decorator_deprecated..decorator&s% __T " -# -Nr!)rzCallable[[...], object]r#r")rr&s` r _deprecatedr)%s r!abrcpost)alphabetacprepreviewrevr)VERSION_PATTERNInvalidVersionVersion normalize_preparsec[$N)__all__r(r!r__dir__r=Bs Nr!.cR\rSrSr%S\S'S\S'S\S'S\S'S\S 'S \S 'S rg )_VersionReplaceQ int | Noneepochztuple[int, ...] | Nonereleasetuple[str, int] | Noner1r-dev str | Nonelocalr(N__name__ __module__ __qualname____firstlineno____annotations____static_attributes__r(r!rr?r?Qs%  ##   O r!r?F)totalcLUR5n[RX5$)a Normalize the pre-release segment of a version string. Returns a lowercase version of the string if not a known pre-release identifier. >>> normalize_pre('alpha') 'a' >>> normalize_pre('BETA') 'b' >>> normalize_pre('rc') 'rc' :param letter: .. versionadded:: 26.1 )lower_LETTER_NORMALIZATIONget)letters rr8r8Zs "\\^F $ $V 44r!r7c[U5$)zParse the given version string. This is identical to the :class:`Version` constructor. >>> parse('1.0.dev1') :param version: The version string to parse. :raises InvalidVersion: When the version string is not a valid version. )r7)versions rr9r9os 7 r!c\rSrSrSrSrg)r6}zRaised when a version string is not a valid version. >>> Version("invalid") Traceback (most recent call last): ... packaging.version.InvalidVersion: Invalid version: 'invalid' r(N)rIrJrKrL__doc__rNr(r!rr6r6}sr!r6c\rSrSrSr\R (a \S Sj5rS Sjr SSjr SSjr SSjr SSjr SS jrSS jrSrg ) _BaseVersionr(cgr;r(selfs r_key_BaseVersion._keys+.r!c,[UR5$r;)hashr`r^s r__hash___BaseVersion.__hash__sDIIr!cj[U[5(d[$URUR:$r; isinstancer[NotImplementedr`r_others r__lt___BaseVersion.__lt__(%..! !yy5::%%r!cj[U[5(d[$URUR:*$r;rgrjs r__le___BaseVersion.__le__(%..! !yyEJJ&&r!cj[U[5(d[$URUR:H$r;rgrjs r__eq___BaseVersion.__eq__rrr!cj[U[5(d[$URUR:$r;rgrjs r__ge___BaseVersion.__ge__rrr!cj[U[5(d[$URUR:$r;rgrjs r__gt___BaseVersion.__gt__rnr!cj[U[5(d[$URUR:g$r;rgrjs r__ne___BaseVersion.__ne__rrr!N)r#ztuple[Any, ...]r#intrkr[r#boolrkr"r#r)rIrJrKrL __slots__typing TYPE_CHECKINGpropertyr`rdrlrprtrwrzr}rNr(r!rr[r[sCI  . . & ' ' ' & 'r!r[a3 v?+ # optional leading v (?a: (?:(?P[0-9]+)!)?+ # epoch (?P[0-9]+(?:\.[0-9]+)*+) # release segment (?P
                                          # pre-release
            [._-]?+
            (?Palpha|a|beta|b|preview|pre|c|rc)
            [._-]?+
            (?P[0-9]+)?
        )?+
        (?P                                         # post release
            (?:-(?P[0-9]+))
            |
            (?:
                [._-]?
                (?Ppost|rev|r)
                [._-]?
                (?P[0-9]+)?
            )
        )?+
        (?P                                          # dev release
            [._-]?+
            (?Pdev)
            [._-]?+
            (?P[0-9]+)?
        )?+
    )
    (?a:\+
        (?P                                        # local version
            [a-z0-9]+
            (?:[._-][a-z0-9]+)*+
        )
    )?+
z*+*z?+?cpython)rpypy)rrr)rrz[a-z0-9]+(?:[._-][a-z0-9]+)*z.0123456789crU=(d Sn[U[5(aUS:aU$SU3n[U5e)Nrz(epoch must be non-negative integer, got rhrr6)valuerBmsgs   r_validate_epochr
s:JQE%%1*4UG
$_validate_release..s#?w!
1c"-qAv-ws)+z@release must be a non-empty tuple of non-negative integers, got )rhtuplelenallr6)rrCrs   r_validate_releasersSmdG7E""L1?w???LWI
VC

r!cUcU$[U[5(aB[U5S:Xa3Uup[U5nUS;a[U[5(a	US:aX4$SU3n[U5e)Nr>r*r+r,rz=pre must be a tuple of ('a'|'b'|'rc', non-negative int), got )rhrrr8rr6)rrTnumberrs    r
_validate_prersp}%CJ!Ov&%%*VS*A*AfPQk##I%
QC

r!cjUcU$[U[5(a
US:aSU4$SU3n[U5e)Nrr-z'post must be non-negative integer, got rrrs  r_validate_postr+s@}%%1*3E7
;C

r!cjUcU$[U[5(a
US:aSU4$SU3n[U5e)NrrEz&dev must be non-negative integer, got rrs  r
_validate_devr4s@}%%1*u~25'
:C

r!cUcU$[U[5(a%[RU5(a[	U5$SU<3n[U5e)Nz*local must be a valid version string, got )rhstr_LOCAL_PATTERN	fullmatch_parse_local_versionr6rs  r_validate_localr=sK}%.":":5"A"A#E**6ui
@C

r!cR\rSrSr%S\S'S\S'S\S'S\S	'S
\S'S\S
'Srg)_VersioniGrrBtuple[int, ...]rC!tuple[Literal['dev'], int] | NonerE*tuple[Literal['a', 'b', 'rc'], int] | Noner1"tuple[Literal['post'], int] | Noner-LocalType | NonerGr(NrHr(r!rrrGs%J
	**	33
,,r!rcl^\rSrSr%SrSrSr\R"S\	-S-\R\R-5rS\
S'S\
S	'S
\
S'S\
S
'S\
S'S\
S'S\
S'S\
S'S:Sjr\SSSSSS.S;Sjj5rSSjrS?U4SjjrS?U4SjjrS@U4S jjrS?U4S!jjrS?U4S"jjrS@U4S#jjrSAS$jrSBS%jr\\"S&5SCS'j55r\R>\"S&5SDS(j55rSES)jr SES*jr!\SES+j5r"\S>S,j5r#\SFS-j5r$\SGS.j5r%\SHS/j5r&\SHS0j5r'\SIS1j5r(\SES2j5r)\SES3j5r*\SJS4j5r+\SJS5j5r,\SJS6j5r-\S>S7j5r.\S>S8j5r/\S>S9j5r0Sr1U=r2$)Kr7iPaTThis class abstracts handling of a project's versions.

A :class:`Version` instance is comparison aware and can be compared and
sorted using the standard Python interfaces.

>>> v1 = Version("1.0a5")
>>> v2 = Version("1.0")
>>> v1

>>> v2

>>> v1 < v2
True
>>> v1 == v2
False
>>> v1 > v2
False
>>> v1 >= v2
False
>>> v1 <= v2
True

:class:`Version` is immutable; use :meth:`__replace__` to change
part of a version.

Instances are safe to serialize with :mod:`pickle`. They use a stable
format so the same pickle can be loaded in future packaging releases.

.. versionchanged:: 26.2

    Added a stable pickle format. Pickles created with packaging 26.2+ can
    be unpickled with future releases.  Backward compatibility with pickles
    from packaging < 26.2 is supported but may be removed in a future
    release.
)_dev_epoch_hash_cache
_key_cache_local_post_pre_release)_strz\s*rrrrrrrrrrrrrArz
CmpKey | NonercL[RU5(a`[[[URS555UlSUl	SUl
SUlSUlSUl
SUlSUlgUR R#U5nU(d[SU<35eUR%S5(a[	UR%S55OSUl	[[[UR%S5RS555Ul['UR%S5UR%S	55Ul
['UR%S
5UR%S5=(d UR%S55Ul['UR%S
5UR%S55Ul[)UR%S55Ul
SUlSUlg![a' SURS5;a[SU<35Seef=f)aInitialize a Version object.

:param version:
    The string representation of a version which will be parsed and normalized
    before use.
:raises InvalidVersion:
    If the ``version`` does not conform to PEP 440 in any way then this
    exception will be raised.
.zInvalid version: NrrBrCpre_lpre_npost_lpost_n1post_n2dev_ldev_nrG)_SIMPLE_VERSION_INDICATORS
issupersetrmaprsplitr
ValueErrorr6rrrrrrr_regexrgroup_parse_letter_versionr)r_rVmatchs   r__init__Version.__init__s&0099	
 %c#w}}S/A&B C
DKDIDJDIDK"DO#D%%g. #4WK!@AA38;;w3G3Gc%++g./Qc#u{{9'='C'CC'HIJ
*%++g*>G@TU	*KK!5;;y#9#SU[[=S

*%++g*>G@TU	*5;;w+?@G
s++(+>> Version.from_parts(release=(1,2,3))

>>> Version.from_parts(release=(0,1,0), pre=("b", 1))


:param epoch:
:param release: This version tuple is required

.. versionadded:: 26.1
N)rrrrrr__new__rrrrrrrr)clsrBrCr1r-rErGrrrrrrnew_versions              r
from_partsVersion.from_partss8!'$W-%(_}S!$(,(8t$d%(_}S!$+0+<'$kk#&!%"&#'!#r!cSU;a[US5OURnSU;a[US5OURnSU;a[	US5OUR
nSU;a[
US5OURnSU;a[US5OURnSU;a[US5OURnX R:XaMX0R:Xa>X@R
:Xa/XPR:Xa X`R:XaXpR:XaU$URRUR5nSUlSUlX(lX8lXHlXXlXhl	XxlU$)aW
__replace__(*, epoch=..., release=..., pre=..., post=..., dev=..., local=...)

Return a new version with parts replaced.

This returns a new version (unless no parts were changed). The
pre-release is normalized. Setting a value to ``None`` clears it.

>>> v = Version("1.2.3")
>>> v.__replace__(pre=("a", 1))


:param int | None epoch:
:param tuple[int, ...] | None release:
:param tuple[str, int] | None pre:
:param int | None post:
:param int | None dev:
:param str | None local:

.. versionadded:: 26.0
.. versionchanged:: 26.1

   The pre-release portion is now normalized.
rBrCr1r-rErGN)rrrrrrrrrrrr	__class__rrr)	r_rrBrCr1r-rErGrs	         r__replace__Version.__replace__sE25s~+++K8??"C+$+

		

		
%
DOc*.c2;r!c,>[U[5(aURcQ[URUR
URURURUR5UlURcQ[URUR
URURURUR5UlURUR:$[U[5(d[$[TU]5U5$r;)rhr7rrrrrrrrr[risuperrlr_rkrs  rrlVersion.__lt__PeW%%&")KKMMIIJJIIKK
#'#*LLNNJJKKJJLL
$ ??U%5%555%..!!w~e$$r!c,>[U[5(aURcQ[URUR
URURURUR5UlURcQ[URUR
URURURUR5UlURUR:*$[U[5(d[$[TU]5U5$r;)rhr7rrrrrrrrr[rirrprs  rrpVersion.__le__keW%%&")KKMMIIJJIIKK
#'#*LLNNJJKKJJLL
$ ??e&6&666%..!!w~e$$r!c,>[U[5(aURcQ[URUR
URURURUR5UlURcQ[URUR
URURURUR5UlURUR:H$[U[5(d[$[TU]5U5$r;)rhr7rrrrrrrrr[rirrtrs  rrtVersion.__eq__rr!c,>[U[5(aURcQ[URUR
URURURUR5UlURcQ[URUR
URURURUR5UlURUR:$[U[5(d[$[TU]5U5$r;)rhr7rrrrrrrrr[rirrwrs  rrwVersion.__ge__rr!c,>[U[5(aURcQ[URUR
URURURUR5UlURcQ[URUR
URURURUR5UlURUR:$[U[5(d[$[TU]5U5$r;)rhr7rrrrrrrrr[rirrzrs  rrzVersion.__gt__rr!c,>[U[5(aURcQ[URUR
URURURUR5UlURcQ[URUR
URURURUR5UlURUR:g$[U[5(d[$[TU]5U5$r;)rhr7rrrrrrrrr[rirr}rs  rr}Version.__ne__rr!cURURURURURUR
4$r;)rrrrrrr^s r__getstate__Version.__getstate__s8
KKMMIIJJIIKK

	
r!cSUlSUl[U[5(a[	U5S:Xa(UuUlUlUlUlUl	Ul
g[	U5S:XaUup#[U[5(amUSUlUSUlURS5UlURS5UlURS5Ul	URS5Ul
g[U[5(a{URS	5nUbgURUlURUlURUlUR UlUR"Ul	UR$Ul
g['S
U<35e)Nrrrrrrr_versionzCannot restore Version from )rrrhrrrrrrrrdictrSrBrCr1r-rErG	TypeError)r_state_	slot_dict
version_nts     r__setstate__Version.__setstate__sQeU##5zQKMIJIK5zQ$i.."+H"5DK$-j$9DM )

f 5DI!*w!7DJ )

f 5DI"+--"9DKeT"":.J%(.. * 2 2
&NN	'__
&NN	(..6ui@AAr!z4Version._version is private and will be removed soonc[URURURURUR
UR5$r;)rrrrrrrr^s rrVersion._version5s6KK		499djj$++
	
r!cURUlURUlURUlURUlURUl	URUlSUlSUl
gr;)rBrrCrrErr1rr-rrGrrr)r_rs  rrr<sUkk


II	II	ZZ
kkr!cPSURRS[U5<S3$)zhA representation of the Version that shows all internal state.

>>> Version('1.0.0')

<(z)>)rrIrr^s r__repr__Version.__repr__Hs(4>>**+1SYM<>> str(Version("1.0a5"))
'1.0a5'
r!rz.postz.dev+)	joinrrrCrBr1r-rErG)r_rVs  r__str__Version.__str__Ps((3sDLL12::AgY/G88rwws3122G99 tyyk**G88dhhZ((G::!4::,''Gr!c[U5$)z Internal property for match_argsrr^s rrVersion._stros4yr!cUR$)zWThe epoch of the version.

>>> Version("2.0.0").epoch
0
>>> Version("1!2.0.0").epoch
1
)rr^s rrB
Version.epochts{{r!cUR$)aThe components of the "release" segment of the version.

>>> Version("1.2.3").release
(1, 2, 3)
>>> Version("2.0.0").release
(2, 0, 0)
>>> Version("1!2.0.0.post0").release
(2, 0, 0)

Includes trailing zeroes but not the epoch or any pre-release / development /
post-release suffixes.
)rr^s rrCVersion.releases}}r!cUR$)zThe pre-release segment of the version.

>>> print(Version("1.2.3").pre)
None
>>> Version("1.2.3a1").pre
('a', 1)
>>> Version("1.2.3b1").pre
('b', 1)
>>> Version("1.2.3rc1").pre
('rc', 1)
)rr^s rr1Version.presyyr!cFUR(aURS$S$)zqThe post-release number of the version.

>>> print(Version("1.2.3").post)
None
>>> Version("1.2.3.post1").post
1
N)rr^s rr-Version.posts!%

tzz!}44r!cFUR(aURS$S$)zmThe development number of the version.

>>> print(Version("1.2.3").dev)
None
>>> Version("1.2.3.dev1").dev
1
rN)rr^s rrEVersion.devs $yytyy|2d2r!cjUR(a"SRSUR55$g)zwThe local version segment of the version.

>>> print(Version("1.2.3").local)
None
>>> Version("1.2.3+abc").local
'abc'
rc38# UHn[U5v M g7fr;r)rxs  rr Version.local..s8KqCFFKsN)rrr^s rrG
Version.locals';;888DKK888r!c>[U5RSS5S$)a)The public portion of the version.

This returns a string. If you want a :class:`Version` again and care
about performance, use ``v.__replace__(local=None)`` instead.

>>> Version("1.2.3").public
'1.2.3'
>>> Version("1.2.3+abc").public
'1.2.3'
>>> Version("1!1.2.3dev1+abc").public
'1!1.2.3.dev1'
r
rr)rrr^s rpublicVersion.publics4ysA&q))r!cSR[[UR55nUR(aURSU3$U$)aThe "base version" of the version.

This returns a string. If you want a :class:`Version` again and care
about performance, use
``v.__replace__(pre=None, post=None, dev=None, local=None)`` instead.

>>> Version("1.2.3").base_version
'1.2.3'
>>> Version("1.2.3+abc").base_version
'1.2.3'
>>> Version("1!1.2.3dev1+abc").base_version
'1!1.2.3'

The "base version" is the public version of the project without any pre or post
release markers.
rr	)rrrrCrB)r_release_segments  rbase_versionVersion.base_versions>$((3sDLL#9:48JJ$**Q/0SOSr!cHURSL=(d URSL$)zWhether this version is a pre-release.

>>> Version("1.2.3").is_prerelease
False
>>> Version("1.2.3a1").is_prerelease
True
>>> Version("1.2.3b1").is_prerelease
True
>>> Version("1.2.3rc1").is_prerelease
True
>>> Version("1.2.3dev1").is_prerelease
True
N)rEr1r^s r
is_prereleaseVersion.is_prereleases!xxt#;txxt';;r!cURSL$)zWhether this version is a post-release.

>>> Version("1.2.3").is_postrelease
False
>>> Version("1.2.3.post1").is_postrelease
True
N)r-r^s ris_postreleaseVersion.is_postreleasesyy$$r!cURSL$)zWhether this version is a development release.

>>> Version("1.2.3").is_devrelease
False
>>> Version("1.2.3.dev1").is_devrelease
True
N)rEr^s r
is_devreleaseVersion.is_devreleasesxxt##r!cV[UR5S:aURS$S$)zYThe first item of :attr:`release` or ``0`` if unavailable.

>>> Version("1.2.3").major
1
rrrrCr^s rmajor
Version.majors'#&dll"3q"8t||A?a?r!cV[UR5S:aURS$S$)zsThe second item of :attr:`release` or ``0`` if unavailable.

>>> Version("1.2.3").minor
2
>>> Version("1").minor
0
rrrr2r^s rminor
Version.minor'#&dll"3q"8t||A?a?r!cV[UR5S:aURS$S$)zrThe third item of :attr:`release` or ``0`` if unavailable.

>>> Version("1.2.3").micro
3
>>> Version("1").micro
0
rrrr2r^s rmicro
Version.micro"r8r!)rVrr#None)rBrrCrr1rDr-rArErArGrFr#r)rzUnpack[_VersionReplace]r#r)r#CmpKeyrrr)r#zutuple[int, tuple[int, ...], tuple[str, int] | None, tuple[str, int] | None, tuple[str, int] | None, LocalType | None])rr"r#r<)r#r)rrr#r<)r#rr#r)r#r)r#rA)r#rF)r#r)3rIrJrKrLrYr__match_args__recompiler5VERBOSE
IGNORECASErrMrclassmethodrrrr`rdrlrprtrwrzr}rrr)rsetterrrrrBrCr1r-rErGr"r&r)r,r/r3r6r:rN
__classcell__rs@rr7r7Ps"H	INZZ0692::

;U
VFK
++
44--0 d&* ,,!	,
$,
,,,
,,\8t

$%6%6%6%6%6%6


,+BZGH
I

__GH I =>

5533
*
*TT(<< %%$$@@@@@@r!cJ^\rSrSrSrSU4Sjjr\SU4Sjj5rSrU=r	$)_TrimmedReleasei.r(c>>[U[5(axURUlURUlURUlUR
UlURUlURUlURUlg[TU])U5 gr;)rhr7rrrrrrrrr)r_rVrs  rr_TrimmedRelease.__init__1sqgw''!..DK#,,DMDIDI DJ!..DK%00DO
!r!c>[TU]n[U5nUnUS:a#XS-
S:XaUS-nUS:a
XS-
S:XaMX2:XaU$USU$)z
Release segment without any trailing zeros.

>>> _TrimmedRelease('1.0.0').release
(1,)
>>> _TrimmedRelease('0.0').release
(0,)
rrN)rrCr)r_rellen_releaserrs    rrC_TrimmedRelease.release=scgo#h!eE
a
FA!eE
a&s3CG3r!)rrrrrrr)rVz
str | Versionr#r<r>)
rIrJrKrLrrrrCrNrFrGs@rrIrI.s!I
"44r!rIcU(a;UR5n[RX5nU[U=(d S54$U(a
S[U54$g)Nrr-)rQrRrSr)rTrs  rrrPsQ
'**6:s6;Q'''
s6{""r!z[\._-]cTUb%[S[RU555$g)zT
Takes a string like ``"abc.1.twelve"`` and turns it into
``("abc", 1, "twelve")``.
Nc3# UH5nUR5(dUR5O
[U5v M7 g7fr;)isdigitrQr)rparts  rr'_parse_local_version..qs0
>!%DJJLCI=>s=?)r_local_version_separatorsr)rGs rrrks4


177>

	
r!rr)r*r+r,rc[U5nUnU(a$XS-
S:XaUS-nU(a
XS-
S:XaMXv:XaUOUSUnUcUcUcUcX[4$UcUcUb[SpOUc[SpO[USUSpUcSOSnUcSOUSnUcSOSn
UcSOUSnXXX4nUcXU4$[SU55nXUU4$)aABuild a comparison key for PEP 440 ordering.

Returns ``(epoch, release, suffix)`` or
``(epoch, release, suffix, local)`` so that plain tuple
comparison gives the correct order.

Trailing zeros are stripped from the release so that ``1.0.0 == 1``.

The suffix is a flat 6-int tuple that encodes pre/post/dev:
``(pre_rank, pre_n, post_rank, post_n, dev_rank, dev_n)``

pre_rank: dev-only=-1, a=0, b=1, rc=2, no-pre=3
    Dev-only releases (no pre or post) get -1 so they sort before
    any alpha/beta/rc.  Releases without a pre-release tag get 3
    so they sort after rc.
post_rank: no-post=0, post=1
    Releases without a post segment sort before those with one.
dev_rank: dev=0, no-dev=1
    Releases without a dev segment sort after those with one.

Local segments use ``(n, "")`` for ints and ``(-1, s)`` for strings,
following PEP 440: strings sort before ints, strings compare
lexicographically, ints compare numerically, and shorter segments
sort before longer when prefixes match.  Versions without a local
segment sort before those with one (3-tuple < 4-tuple).

>>> _cmpkey(0, (1, 0, 0), None, None, None, None)
(0, (1,), (3, 0, 0, 0, 1, 0))
>>> _cmpkey(0, (1,), ("a", 1), None, None, None)
(0, (1,), (0, 1, 0, 0, 1, 0))
>>> _cmpkey(0, (1,), None, None, None, ("ubuntu", 1))
(0, (1,), (3, 0, 0, 0, 1, 0), ((-1, 'ubuntu'), (1, '')))
rrNc3d# UH&n[U[5(aUS4O[U4v M( g7f)rN)rhr_LOCAL_STR_RANK)rsegs  rr_cmpkey..s.$QV#ZS))b	/EEQVs.0)r_STABLE_SUFFIX_PRE_RANK_DEV_ONLY_PRE_RANK_STABLE	_PRE_RANKr)rBrCr1r-rErGrNrtrimmedpre_rankr	post_rankpost_ndev_rankrsuffix	cmp_locals                 rrrsTg,KA
A!#	QA!#)gwr{G{t|
~--
{t|,a%	*A%#CF+SV%\qI,QDGFKqQHA#a&Ey(
BF}v%%#$QV$I69,,r!)rrr#r")r#z	list[str])rTrr#r)rVrr#r7)rr"r#r)rr"r#r)rr"r#r)rr"r#r)rr"r#r)rr"r#r)rTrFrz str | bytes | SupportsInt | Noner#rD)rGrFr#r)rBrrCrr1rDr-rDrErDrGrr#r=)FrY
__future__rr@sysrrrrrrr	r
rrtyping_extensionsrr
version_inforrr)r$rRr<r=rr	LocalTypeCmpLocalType	CmpSuffixr=rVersionComparisonMethodr?r8r9rr6r[_VERSION_PATTERNreplace_VERSION_PATTERN_OLDimplementationnamer5rArCASCIIr	frozensetrrrrrrrrr7rIrrVrr`r^r_rZr]rr(r!rrws#	

			
.w2;
"	
	U
%S/3&'	U38_c)*#sCc3./			#uS#X	
)*	#uS#X	<
78:
#FF#3T#9:iu5*Z3'3't"H(//c:BB4M	9,1A1AJ1N6)c.>.>.L
'!
$;R]]RXX=UV'}5	
z[@l[@|4g4D @0JJy1
!1%	#Aq!Q2J-J-
J-
 J-!	J-

 J-
J-J-r!