hyb
2025-11-07 cadac0a99d87c53805a07f3b4ca7fd11e524fe4a
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
Ë
ñúhN[ãóL—ddlmZddlZddlZddlZddlZddlZddlZddlZddl    Z    ddl
Z
ddl Z ddl Z ddlmZmZmZmZmZddlmZddlmZddlmZddlmZmZmZddlmZdd    l m!Z!m"Z"dd
l#m$Z$m%Z%m&Z&m'Z'm(Z(m)Z)m*Z*dd l+m,Z,dd l-m.Z.dd l/m0Z0ddl1m2Z2m3Z3ddl4m5Z5ddl6m7Z7ddl8m9Z9ddl:m;Z;gd¢Z<ejze>«Z?e)d«Z@eAeBeCeCe"fZDeAeEeEeEfZFeAeGeAe'eGe'eGffZHe&e!eeCge$fZIe&e!eeDge$fZJdZKdQd„ZLdRd„ZMdSd„ZNdQd„ZOe9dd¬«dTdUd„«ZPdVd„ZQdVd„ZReRd œ                                    dWd!„ZSdXd"„ZTdYdZd#„ZUd[d$„ZVd\d%„ZWd[d&„ZXd]d'„ZYd]d(„ZZd^d)„Z[d_d*„Z\d`d+„Z]dad,„Z^eKf                    dbd-„Z_dcddd/„Z`ded0„Zadfd1„Zbdad2„Zcdgd3„ZdGd4„d5e«Zedhd6„Zfdid7„Zgdjdkd8„Zhdld9„Zidmd:„Zjdnd;„Zk                        dod<„Zldmd=„Zmdpd>„Zn                dqd?„Zodrd@„ZpdrdA„ZqdsdB„Zred.¬C«GdD„dE««ZsdtdF„ZtdudG„ZudvdH„ZvdwdI„ZwdxdJ„ZxdydzdK„Zyd{dL„Zz                        d|dM„Z{GdN„dOe.«Z|dwdP„Z}y)}é)Ú annotationsN)Ú    GeneratorÚIterableÚIteratorÚMappingÚSequence)Ú    dataclass)Úpartial)ÚStringIO)Ú filterfalseÚteeÚ zip_longest)ÚPath)Ú FunctionTypeÚ TracebackType)ÚAnyÚBinaryIOÚCallableÚOptionalÚTextIOÚTypeVarÚcast)Ú Requirement)ÚBuildBackendHookCaller)Ú __version__)Ú CommandErrorÚExternallyManagedEnvironment)Úget_major_minor_version)ÚWINDOWS)Úretry)Úrunning_under_virtualenv)ÚrmtreeÚ display_pathÚ
backup_dirÚaskÚsplitextÚ format_sizeÚis_installable_dirÚnormalize_pathÚrenamesÚget_progÚ
ensure_dirÚremove_auth_from_urlÚcheck_externally_managedÚ ConfiguredBuildBackendHookCallerÚTécóô—tjjtjjt«dd«}tjj |«}dt ›d|›dt«›dS)Nz..zpip z from z     (python ú))ÚosÚpathÚjoinÚdirnameÚ__file__Úabspathrr)Ú pip_pkg_dirs úKH:\Change_password\venv_build\Lib\site-packages\pip/_internal/utils/misc.pyÚget_pip_versionr<FsX€Ü—'‘'—,‘,œrŸw™wŸ™¬xÓ8¸$ÀÓE€KÜ—'‘'—/‘/ +Ó.€Kà ”+˜f [ M°Ô;RÓ;TÐ:UÐUVÐ WÐWócó†—t|«dkr|dt|«z
dzz }nt|«dkDr|dd}td|«S)ax
    Convert a tuple of ints representing a Python version to one of length
    three.
 
    :param py_version_info: a tuple of ints representing a Python version,
        or None to specify no version. The tuple can have any length.
 
    :return: a tuple of length three if `py_version_info` is non-None.
        Otherwise, return `py_version_info` unchanged (i.e. None).
    é)rNÚ VersionInfo)Úlenr)Úpy_version_infos r;Únormalize_version_inforCMsP€ô ˆ?Ó˜aÒØ˜A¤ OÓ 4Ñ4¸Ñ<Ñ<‰Ü     ˆ_Ó     Ò    !Ø)¨"¨1Ð-ˆä  ˜Ó /Ð/r=cóܗ    tj|«y#t$rJ}|jtjk7r#|jtj
k7r‚Yd}~yYd}~yd}~wwxYw)z os.path.makedirs without EEXIST.N)r4ÚmakedirsÚOSErrorÚerrnoÚEEXISTÚ    ENOTEMPTY)r5Úes  r;r,r,`sN€ðÜ
 ‰ DÕøÜ òà 7‰7”e—l‘lÒ " q§w¡w´%·/±/Ò'AØ ô(BÔ "ûðús‚˜    A+¡;A&Á&A+cóʗ    tjjtjd«}|dvrtj
›dS|S#t ttf$rYywxYw)Nr)z __main__.pyz-cz -m pipÚpip)    r4r5ÚbasenameÚsysÚargvÚ
executableÚAttributeErrorÚ    TypeErrorÚ
IndexError)Úprogs r;r+r+js_€ð ܏w‰w×Ѥ§¡¨¡ Ó,ˆØ Ð(Ñ (Ü—n‘nÐ% WÐ-Ð -àˆKøÜ œI¤zÐ 2ò Ø Ø ð ús‚AA Á    A Á A"Á!A"r?gà?)Ústop_after_delayÚwaitcóʗ|rt}|€t}tt|¬«}tj
dk\rt j||¬«yt j||¬«y)N©Úonexc)r?é )Úonerror)Ú_onerror_ignoreÚ_onerror_reraiser
Úrmtree_errorhandlerrNÚ version_infoÚshutilr")ÚdirÚ ignore_errorsrYÚhandlers    r;r"r"wsK€áÜˆØ €}Ü ˆÜÔ0¸Ô>€GÜ
×ј7Ò"ä ‰ c Ö)ä ‰ c 7Ö+r=có—y©N©©Ú_argss r;r\r\…s€Ør=có—‚rerfrgs r;r]r]‰s€Ø    r=rXcóh—    tj|«j}|tjzs2    tj
||tjz«    ||«yt |t«s|\}}}||||«y#t$rYywxYw#t$rYŒ;wxYw#t$rYŒJwxYw)a1
    `rmtree` error handler to 'force' a file remove (i.e. like `rm -f`).
 
    * If a file is readonly then it's write flag is set and operation is
      retried.
 
    * `onerror` is the original callback from `rmtree(... onerror=onerror)`
      that is chained at the end if the "rm -f" still fails.
    N)r4ÚstatÚst_moderFÚS_IWRITEÚchmodÚ
isinstanceÚ BaseException)Úfuncr5Úexc_inforYrlÚ_s      r;r^r^s°€ð Ü—'‘'˜$“-×'Ñ'ˆð
”T—]‘]Ò "ð
    Ü H‰HT˜7¤T§]¡]Ñ2Ô 3ð
 ِT”
Øô h¤ Ô .Ø!‰ˆˆ8QÙ    ˆ$hÕøô) òáðûôò Ùð ûôò    Ù ð    ús4‚Bµ'B%ÁB    BÂB    B"Â!B"Â%    B1Â0B1có@—tjjtjj|««}|j    tj
«tjj z«r#d|ttj
««dz}|S)zTGives the display value for a given path, making it relative to cwd
    if possible.ú.N)r4r5Únormcaser9Ú
startswithÚgetcwdÚseprA©r5s r;r#r#¶sf€ô 7‰7× Ñ œBŸG™GŸO™O¨DÓ1Ó 2€DØ ‡”r—y‘y“{¤R§W¡W§[¡[Ñ0Ô1ؐTœ#œbŸi™i›kÓ*Ð,Ð-Ñ-ˆØ €Kr=cóėd}|}tjj||z«r6|dz }|t|«z}tjj||z«rŒ6||zS)z\Figure out the name of a directory to back up the given dir to
    (adding .bak, .bak2, etc)é)r4r5ÚexistsÚstr)raÚextÚnÚ    extensions    r;r$r$¿sZ€ð    
€AØ€IÜ
'‰'.‰.˜˜y™Ô
)Ø    ˆQ‰ˆØœ#˜a›&‘Lˆ    ô '‰'.‰.˜˜y™Õ
)𠐉?Ðr=có—tjjdd«j«D]
}||vsŒ|cSt    ||«S)NÚPIP_EXISTS_ACTIONÚ)r4ÚenvironÚgetÚsplitr%)ÚmessageÚoptionsÚactions   r;Úask_path_existsr‹ÊsF€Ü—*‘*—.‘.Ð!4°bÓ9×?Ñ?ÓAòˆØ WÒ ØŠMðô ˆw˜Ó  Ð r=có^—tjjd«rtd|›«‚y)z&Raise an error if no input is allowed.Ú PIP_NO_INPUTz5No input was expected ($PIP_NO_INPUT set); question: N)r4r…r†Ú    Exception©rˆs r;Ú_check_no_inputrÑs.€ä    ‡zz‡~~nÔ%ÜØCÀGÀ9Ð Mó
ð    
ð&r=cóЗ    t|«t|«}|j«j«}||vr+t    dj |dj |«««n|SŒf)z@Ask the message interactively, with the given possible responsesz>Your response ({!r}) was not one of the expected responses: {}z, )rÚinputÚstripÚlowerÚprintÚformatr6)rˆr‰Úresponses   r;r%r%Ùsa€à
ܘԠܘ“>ˆØ—>‘>Ó#×)Ñ)Ó+ˆØ ˜7Ñ "Ü ðß‘V˜H d§i¡i°Ó&8Ó9õ ð
ˆOð r=có.—t|«t|«S)zAsk for input interactively.)rr’rs r;Ú    ask_inputr™ès€äGÔÜ ‹>Ðr=cóB—t|«tj|«S)z!Ask for a password interactively.)rÚgetpassrs r;Ú ask_passwordrœîs€äGÔÜ ?‰?˜7Ó #Ð#r=cóR—|j«}|dvry|dvrytd|›«‚)zôConvert a string representation of truth to true (1) or false (0).
 
    True values are 'y', 'yes', 't', 'true', 'on', and '1'; false values
    are 'n', 'no', 'f', 'false', 'off', and '0'.  Raises ValueError if
    'val' is anything else.
    )ÚyÚyesÚtÚtrueÚonÚ1r|)r€ÚnoÚfÚfalseÚoffÚ0rzinvalid truth value )r”Ú
ValueError)Úvals r;Ú    strtoboolr«ôs:€ð )‰)‹+€CØ
Ð2Ñ2ØØ     Ð5Ñ    5ØäÐ/°¨wÐ7Ó8Ð8r=cóˆ—|dkDr |dz dz d›dS|dkDrt|dz «›dS|dkDr    |dz d›dSt|«›dS)    Ni@Bg@@ièz.1fz MBi'z kBz bytes)Úint)Úbytess r;r'r'sn€Ø ˆ{ÒØ˜&‘. 4Ñ'¨Ð,¨CÐ0Ð0Ø    Ò    Üe˜d‘lÓ#Ð$ CÐ(Ð(Ø    ŠØ˜&‘. Ð% SÐ)Ð)äe“*˜VÐ$Ð$r=c
ó\—|Dcgc]}ttt|««‘Œ}}t|ddiŽDcgc]}t    tt
|««‘Œ}}|Dcgc]:}dj ttj||««j«‘Œ<}}||fScc}wcc}wcc}w)z¸Return a list of formatted rows and a list of column sizes.
 
    For example::
 
    >>> tabulate([['foobar', 2000], [0xdeadbeef]])
    (['foobar     2000', '3735928559'], [10, 4])
    Ú    fillvaluer„ú )    ÚtupleÚmapr~rÚmaxrAr6ÚljustÚrstrip)ÚrowsÚrowÚcolÚsizesÚtables     r;Útabulater¼s‘€ð-1Ö 1 SŒE”#”c˜3“-Õ  Ð 1€DÐ 1Ü+6¸Ð+KÈÑ+KÖ L CŒS””S˜#“Õ Ð L€EÐ LØFJÖ K¸sˆSX‰X”cœ#Ÿ)™) S¨%Ó0Ó 1× 8Ñ 8Õ :Ð K€EÐ KØ %ˆ<Ðùò 2ùÚ LùÚ Ks… B´ B$Á?B)có<—tjj|«sytjjtjj    |d««rytjjtjj    |d««ryy)atIs path is a directory containing pyproject.toml or setup.py?
 
    If pyproject.toml exists, this is a PEP 517 project. Otherwise we look for
    a legacy setuptools layout by identifying setup.py. We don't check for the
    setup.cfg because using it without setup.py is only available for PEP 517
    projects, which are already covered by the pyproject.toml check.
    Fzpyproject.tomlTzsetup.py)r4r5ÚisdirÚisfiler6rzs r;r(r(s_€ô 7‰7=‰=˜Ô ØÜ    ‡ww‡~~”b—g‘g—l‘l 4Ð)9Ó:Ô;ØÜ    ‡ww‡~~”b—g‘g—l‘l 4¨Ó4Ô5ØØ r=c#ó>K—    |j|«}|sy|–—Œ­w)z7Yield pieces of data from a file-like object until EOF.N)Úread)ÚfileÚsizeÚchunks   r;Ú read_chunksrÅ.s(èø€ð Ø—    ‘    ˜$“ˆÙØ ØŠ ð     ùs‚Tcó—tjj|«}|r tjj|«}ntjj    |«}tjj |«S)zN
    Convert a path to its canonical, case-normalized, absolute version.
 
    )r4r5Ú
expanduserÚrealpathr9rv)r5Úresolve_symlinkss  r;r)r)9sV€ô
7‰7× Ñ ˜dÓ #€DÙ܏w‰w×Ñ Ó%‰äw‰w‰˜tÓ$ˆÜ 7‰7× Ñ ˜DÓ !Ð!r=có’—tj|«\}}|j«jd«r |dd|z}|dd}||fS)z,Like os.path.splitext, but take off .tar tooz.taréüÿÿÿN)Ú    posixpathr&r”Úendswith)r5Úbasers   r;r&r&FsN€ä×"Ñ" 4Ó(I€Dˆ#Ø ‡zzƒ|×јVÔ$ؐ23ˆi˜#‰oˆØCRˆyˆØ ˆ9Ðr=có~—tjj|«\}}|r6|r4tjj|«stj|«t j ||«tjj|«\}}|r|r    tj|«yyy#t$rYywxYw)z7Like os.renames(), but handles renaming across devices.N)    r4r5r‡r}rEr`ÚmoveÚ
removedirsrF)ÚoldÚnewÚheadÚtails    r;r*r*Os€ô—‘—‘˜sÓ#J€Dˆ$Ù ‘œRŸW™WŸ^™^¨DÔ1Ü
 ‰ DÔä
‡KKSÔä—‘—‘˜sÓ#J€Dˆ$Ù ‘ð    Ü M‰M˜$Õ ð€tøôò    Ù ð    úsÂB0Â0    B<Â;B<cóh—t«sy|jttj««S)zü
    Return True if path is within sys.prefix, if we're running in a virtualenv.
 
    If we're not in a virtualenv, all paths are considered "local."
 
    Caution: this function assumes the head of path has been normalized
    with normalize_path.
    T)r!rwr)rNÚprefixrzs r;Úis_localrØ`s%€ô $Ô %ØØ ?‰?œ>¬#¯*©*Ó5Ó 6Ð6r=có0—tj|g|¢­Žyre)ÚloggerÚinfo)ÚmsgÚargss  r;Ú write_outputrÞns€Ü
‡KKÐdÔr=có<—eZdZUded<edd„«Zedd„«Zy)Ú StreamWrapperrÚ orig_streamcó"—|«}||_|Sre)rá)ÚclsráÚrets   r;Ú from_streamzStreamWrapper.from_streamus€á‹eˆØ%ˆŒØˆ
r=có.—|jjSre)ráÚencoding©Úselfs r;rçzStreamWrapper.encoding}s€à×Ñ×(Ñ(Ð(r=N)rárÚreturnrà©rêr~)Ú__name__Ú
__module__Ú __qualname__Ú__annotations__Ú classmethodråÚpropertyrçrfr=r;ràràrs.…ØÓàòóððò)óñ)r=ràc
óȗtt|tt|«««fi|¤Ž}|j    «Dcic]\}}||“Œ
}}}||d<t dd|«Scc}}w)NÚreverse_mappingÚEnumrf)ÚdictÚzipÚrangerAÚitemsÚtype)Ú
sequentialÚnamedÚenumsÚkeyÚvalueÚreverses      r;Úenumrƒsa€Ü ”Z¤¤s¨:£Ó!7Ó8Ñ B¸EÑ B€EØ,1¯K©K«M×:™j˜c 5ˆuc‰zÐ:€GÑ:Ø&€EÐ
ÑÜ ˜˜EÓ "Ð"ùó;s¼ Acó,—|€|Sd|vrd|›d}|›d|›S)z.
    Build a netloc from a host-port pair
    ú:ú[ú]rf)ÚhostÚports  r;Ú build_netlocrŠs3€ð €|؈ Ø
ˆd{à4&˜ˆ{ˆØˆV1TFÐ Ðr=cóT—|jd«dk\rd|vr
d|vrd|›d}|›d|›S)z)
    Build a full URL from a netloc.
    réú@rrz://)Úcount)ÚnetlocÚschemes  r;Úbuild_url_from_netlocr–sA€ð‡||CÓ˜AÒ #¨VÑ"3¸À6Ñ8IàVH˜AˆØˆXS˜˜Ð !Ð!r=có†—t|«}tjj|«}|j|j
fS)z2
    Return the host-port pair from a netloc.
    )rÚurllibÚparseÚurlparseÚhostnamer)r ÚurlÚparseds   r;Ú parse_netlocr s5€ô   Ó
'€CÜ \‰\× "Ñ " 3Ó '€FØ ?‰?˜FŸK™KÐ 'Ð'r=có—d|vr|dfS|jdd«\}}d}d|vr|jdd«\}}n|d}}tjj    |«}|tjj    |«}|||ffS)zp
    Parse out and remove the auth information from a netloc.
 
    Returns: (netloc, (username, password)).
    r
©NNr|Nr)Úrsplitr‡rrÚunquote)r ÚauthÚpwÚusers    r;Úsplit_auth_from_netlocr©s”€ð  &ÑØ|Ð#Ð#ð
—=‘=  aÓ(L€Dˆ&Ø€BØ
ˆd{ð—:‘:˜c 1Ó%‰ˆ‰bà˜ˆbˆä <‰<× Ñ  Ó %€DØ    €~Ü \‰\× !Ñ ! "Ó %ˆà D˜":Ð Ðr=cóŽ—t|«\}\}}|€|S|€d}d}n!tjj|«}d}|›|›d|›S)zÞ
    Replace the sensitive data in a netloc with "****", if it exists.
 
    For example:
        - "user:pass@example.com" returns "user:****@example.com"
        - "accesstoken@example.com" returns "****@example.com"
    ú****r„z:****r
)rrrÚquote)r rÚpasswords   r;Ú redact_netlocr#Æs`€ô 6°fÓ=Ñ€FÑ ˆT8Ø €|؈ ØÐ؈؉ä|‰|×!Ñ! $Ó'ˆØˆØˆVH:˜Q˜v˜hÐ 'Ð'r=có"—tjj|«}||j«}|j|d|j
|j |jf}tjj|«}|td|«fS)aRTransform and replace netloc in a url.
 
    transform_netloc is a function taking the netloc and returning a
    tuple. The first element of this tuple is the new netloc. The
    entire tuple is returned.
 
    Returns a tuple containing the transformed url as item 0 and the
    original tuple returned by transform_netloc as item 1.
    rÚ NetlocTuple)
rrÚurlsplitr r r5ÚqueryÚfragmentÚ
urlunsplitr)rÚtransform_netlocÚpurlÚ netloc_tupleÚ
url_piecesÚsurls      r;Ú_transform_urlr/Úsp€ô <‰<×  Ñ   Ó %€DÙ# D§K¡KÓ0€Là—+‘+˜|¨A™°·    ±    ¸4¿:¹:ÀtÇ}Á}ÐU€JÜ <‰<× "Ñ " :Ó .€DØ ”m \Ó2Ð 2Ð2r=có—t|«Sre)r©r s r;Ú _get_netlocr2îs €Ü ! &Ó )Ð)r=có—t|«fSre)r#r1s r;Ú_redact_netlocr4òs€Ü ˜&Ó !Ð #Ð#r=có8—t|t«\}\}}|||fS)z†
    Parse a url into separate netloc, auth, and url with no auth.
 
    Returns: (url_without_auth, netloc, (username, password))
    ©r/r2)rÚurl_without_authr rs    r;Úsplit_auth_netloc_from_urlr8ös'€ô(6°c¼;Ó'GÑ$Бnv˜tØ ˜V TÐ )Ð)r=có(—t|t«dS)z7Return a copy of url with 'username:password@' removed.rr6©rs r;r-r-s€ô ˜#œ{Ó +¨AÑ .Ð.r=có(—t|t«dS)z.Replace the password in a given url with ****.r)r/r4r:s r;Úredact_auth_from_urlr<    s€ä ˜#œ~Ó .¨qÑ 1Ð1r=có —|js t|«St|«j|jt|j««S)z:Replace the password in a given requirement url with ****.)rr~Úreplacer<)Úreqs r;Úredact_auth_from_requirementr@s7€à 7Š7ܐ3‹xˆÜ ˆs‹8× Ñ ˜CŸG™GÔ%9¸#¿'¹'Ó%BÓ CÐCr=)Úfrozencó:—eZdZUded<ded<dd„Zdd„Zd    d„Zy)
Ú
HiddenTextr~ÚsecretÚredactedcó —dt|«›dS)Nz <HiddenText ú>)r~rès r;Ú__repr__zHiddenText.__repr__s€Øœc $›i˜]¨!Ð,Ð,r=có—|jSre©rErès r;Ú__str__zHiddenText.__str__s €Ø}‰}Ðr=cób—t|«t|«ury|j|jk(S)NF)rùrD)réÚothers  r;Ú__eq__zHiddenText.__eq__!s*€Ü ‹:œT %›[Ñ (Øð{‰{˜eŸl™lÑ*Ð*r=Nrë)rMrrêÚbool)rìrírîrïrHrKrNrfr=r;rCrCs…à ƒK؃Mó-óô+r=rCcó—t|d¬«S)Nr rJ)rC)rþs r;Ú
hide_valuerQ*s€Ü e fÔ -Ð-r=có2—t|«}t||¬«S)NrJ)r<rC)rrEs  r;Úhide_urlrS.s€Ü# CÓ(€HÜ c HÔ -Ð-r=cóЗddtjj›dtjj›dtjj›g}|xr:txr2t
j jtjd«|v}|rPtjddgtjddz}tdjdj|«««‚y)    zProtection of pip.exe from modification on Windows
 
    On Windows, any operation modifying pip should be run as:
        python -m pip ...
    rLrurz-mr|Nz3To modify pip, please run the following command:
{}r±) rNr_ÚmajorÚminorrr4r5rMrOrPrr–r6)Ú modifying_pipÚ    pip_namesÚshould_show_use_python_msgÚ new_commands    r;Ú(protect_pip_from_modification_on_windowsr[3sπð    Ø
Œc×Ñ×$Ñ$Ð %Ð&Ø
Œc×Ñ×$Ñ$Ð % Q¤s×'7Ñ'7×'=Ñ'=Ð&>Ð?ð€Ið    ÒPœ'ÒP¤b§g¡g×&6Ñ&6´s·x±xÀ±{Ó&CÀyÐ&Pðñ"Ü—~‘~ t¨UÐ3´c·h±h¸q¸r°lÑBˆ ÜØ B× IÑ IØ—‘˜Ó%ó ó
ð    
ð"r=cóè—t«rytjjt    j
d«d«}tjj |«sytj|«‚)zëCheck whether the current environment is externally managed.
 
    If the ``EXTERNALLY-MANAGED`` config file is found, the current environment
    is considered externally managed, and an ExternallyManagedEnvironment is
    raised.
    NÚstdlibzEXTERNALLY-MANAGED)    r!r4r5r6Ú    sysconfigÚget_pathr¿rÚ from_config)Úmarkers r;r.r.MsQ€ô Ô!ØÜ W‰W\‰\œ)×,Ñ,¨XÓ6Ð8LÓ M€FÜ 7‰7>‰>˜&Ô !ØÜ
2°6Ó
:Ð:r=cóf—tjduxrtjj«S)zIs this console interactive?N)rNÚstdinÚisattyrfr=r;Úis_console_interactivere\s#€ä 9‰9˜DÐ  Ò 7¤S§Y¡Y×%5Ñ%5Ó%7Ð7r=cóâ—tj«}d}t|d«5}t||¬«D]!}|t    |«z }|j |«Œ#    ddd«||fS#1swY||fSxYw)z5Return (hash, length) for path using hashlib.sha256()rÚrb)rÃN)ÚhashlibÚsha256ÚopenrÅrAÚupdate)r5Ú    blocksizeÚhÚlengthr¥Úblocks      r;Ú    hash_filerpasx€ô    ‰Ó€AØ €FÜ     ˆdDÓ    ð˜QÜ  ¨Ô3ò    ˆEØ ”c˜%“jÑ  ˆFØ H‰HUOñ    ÷ð ˆfˆ9Ð÷    ð ˆfˆ9Ðús £2A"Á"A.có0—t|«}t||«S)zb
    Return paired elements.
 
    For example:
        s -> (s0, s1), (s2, s3), (s4, s5), ...
    )Úiterr)Úiterables r;Úpairwisertms€ôH‹~€HÜ x Ó *Ð*r=cóN—t|«\}}t||«t||«fS)z¡
    Use a predicate to partition entries into false entries and true entries,
    like
 
        partition(is_odd, range(10)) --> 0 2 4 6 8   and  1 3 5 7 9
    )r r Úfilter)ÚpredrsÚt1Út2s    r;Ú    partitionrzxs*€ô‹]F€BˆÜ t˜RÓ  ¤&¨¨rÓ"2Ð 2Ð2r=có‡—eZdZ            d
                                            d ˆfd„ Z        d                             d ˆfd„ Z    d                    dˆfd„ Z        d                             d ˆfd„ Z    d            dˆfd„ Z    d            dˆfd„ Z    d            dˆfd„ Z            d                            dˆfd„ Z
        d                            dˆfd    „ Z ˆxZ S)r/có:•—t‰||||||«||_yre)ÚsuperÚ__init__Ú config_holder)rérÚ
source_dirÚ build_backendÚ backend_pathÚrunnerÚpython_executableÚ    __class__s       €r;r~z)ConfiguredBuildBackendHookCaller.__init__†s(ø€ô    ‰ÑØ ˜  |°VÐ=Nô    
ð+ˆÕr=cóT•—|jj}t‰| |||¬«S©N)Úconfig_settingsÚmetadata_directory)rrˆr}Ú build_wheel©réÚwheel_directoryrˆr‰Úcsr…s     €r;rŠz,ConfiguredBuildBackendHookCaller.build_wheel”s5ø€ð × Ñ × /Ñ /ˆÜ‰wÑ"Ø ¨RÐDVð#ó
ð    
r=cóR•—|jj}t‰| ||¬«S©N)rˆ)rrˆr}Ú build_sdist)réÚsdist_directoryrˆrr…s    €r;rz,ConfiguredBuildBackendHookCaller.build_sdistŸs+ø€ð
× Ñ × /Ñ /ˆÜ‰wÑ" ?ÀBÐ"ÓGÐGr=cóT•—|jj}t‰| |||¬«Sr‡)rrˆr}Úbuild_editabler‹s     €r;r“z/ConfiguredBuildBackendHookCaller.build_editable§s5ø€ð × Ñ × /Ñ /ˆÜ‰wÑ%Ø ¨RÐDVð&ó
ð    
r=cóP•—|jj}t‰| |¬«Sr)rrˆr}Úget_requires_for_build_wheel©rérˆrr…s   €r;r•z=ConfiguredBuildBackendHookCaller.get_requires_for_build_wheel²ó)ø€ð× Ñ × /Ñ /ˆÜ‰wÑ3ÀBÐ3ÓGÐGr=cóP•—|jj}t‰| |¬«Sr)rrˆr}Úget_requires_for_build_sdistr–s   €r;r™z=ConfiguredBuildBackendHookCaller.get_requires_for_build_sdist¸r—r=cóP•—|jj}t‰| |¬«Sr)rrˆr}Úget_requires_for_build_editabler–s   €r;r›z@ConfiguredBuildBackendHookCaller.get_requires_for_build_editable¾s)ø€ð× Ñ × /Ñ /ˆÜ‰wÑ6ÀrÐ6ÓJÐJr=cóT•—|jj}t‰| |||¬«S©N)r‰rˆÚ_allow_fallback)rrˆr}Ú prepare_metadata_for_build_wheel©rér‰rˆržrr…s     €r;rŸzAConfiguredBuildBackendHookCaller.prepare_metadata_for_build_wheelÄs6ø€ð × Ñ × /Ñ /ˆÜ‰wÑ7Ø1ØØ+ð8ó
ð    
r=cóT•—|jj}t‰| |||¬«Sr)rrˆr}Ú#prepare_metadata_for_build_editabler s     €r;r¢zDConfiguredBuildBackendHookCaller.prepare_metadata_for_build_editableÑs6ø€ð × Ñ × /Ñ /ˆÜ‰wÑ:Ø1ØØ+ð;ó
ð    
r=)NNN) rrr€r~rr~r‚ú
str | NonerƒzCallable[..., None] | Noner„r£r)rŒr~rˆúMapping[str, Any] | Noner‰r£rêr~re)r‘r~rˆr¤rêr~)rˆr¤rêz Sequence[str])NT)r‰r~rˆr¤ržrOrêr~)r‰r~rˆr¤ržrOrêr£) rìrírîr~rŠrr“r•r™r›rŸr¢Ú __classcell__)r…s@r;r/r/…sŸø„ð $(Ø-1Ø(,ð +àð +ðð +ðð     +ð
!ð +ð +ð +ð&õ +ð"59Ø)-ð        
àð    
ð2ð    
ð'ð        
ð
 
õ     
ð59ðHàðHð2ðHð
õ    Hð59Ø)-ð        
àð    
ð2ð    
ð'ð        
ð
 
õ     
ð;?ðHØ7ðHà    õHð;?ðHØ7ðHà    õHð;?ðKØ7ðKà    õKð59Ø $ð     
àð 
ð2ð 
ðð     
ð
 
õ 
ð 59Ø $ð     
àð 
ð2ð 
ðð     
ð
 
÷ 
ñ 
r=r/cóä—t«ryttd«sytjdk(stjdk(rytj
«dk7ryt jd«y)züOutput a warning for sudo users on Unix.
 
    In a virtual environment, sudo pip still writes to virtualenv.
    On Windows, users may run pip as Administrator without issues.
    This warning only applies to Unix root users outside of virtualenv.
    NÚgetuidÚwin32ÚcygwinrabRunning pip as the 'root' user can result in broken permissions and conflicting behaviour with the system package manager, possibly rendering your system unusable. It is recommended to use a virtual environment instead: https://pip.pypa.io/warnings/venv. Use the --root-user-action option if you know what you are doing and want to suppress this warning.)r!Úhasattrr4rNÚplatformr§rÚÚwarningrfr=r;Úwarn_if_run_as_rootr­ßsX€ô Ô!ØÜ ”2xÔ  Øô  ‡||wÒ¤#§,¡,°(Ò":Øä    ‡yyƒ{aÒØä
‡NNð    )õr=rë)rBztuple[int, ...]rêztuple[int, int, int])r5r~rêÚNone)FN)rar~rbrOrYz OnExc | Nonerêr®)rhrrêr®)
rqrr5rrrzExcInfo | BaseExceptionrYÚOnExcrêr®)r5r~rêr~)z.bak)rar~rr~rêr~)rˆr~r‰z Iterable[str]rêr~)rˆr~rêr®)rˆr~rêr~)rªr~rêr­)r®Úfloatrêr~)r·zIterable[Iterable[Any]]rêztuple[list[str], list[int]])r5r~rêrO)rÂrrÃr­rêzGenerator[bytes, None, None])T)r5r~rÉrOrêr~)r5r~rêztuple[str, str])rÒr~rÓr~rêr®)rÜrrÝrrêr®)rúrrûrrêz    type[Any])rr~rz
int | Nonerêr~)Úhttps)r r~r r~rêr~)r r~rêztuple[str | None, int | None])r r~rêr%)r r~rêr~)rr~r*z Callable[[str], tuple[Any, ...]]rêztuple[str, NetlocTuple])r r~rêz
tuple[str])rr~rêz.tuple[str, str, tuple[str | None, str | None]])rr~rêr~)r?rrêr~)rþr~rêrC)rr~rêrC)rWrOrêr®)rêr®)rêrO)r1)r5r~rlr­rêztuple[Any, int])rsz Iterable[Any]rêzIterator[tuple[Any, Any]])rwzCallable[[T], bool]rsz Iterable[T]rêztuple[Iterable[T], Iterable[T]])~Ú
__future__rrGr›rhÚloggingr4rÌr`rkrNr^Ú urllib.parserÚcollections.abcrrrrrÚ dataclassesr    Ú    functoolsr
Úior Ú    itertoolsr r rÚpathlibrÚtypesrrÚtypingrrrrrrrÚ"pip._vendor.packaging.requirementsrÚpip._vendor.pyproject_hooksrrLrÚpip._internal.exceptionsrrÚpip._internal.locationsrÚpip._internal.utils.compatrÚpip._internal.utils.retryr Úpip._internal.utils.virtualenvr!Ú__all__Ú    getLoggerrìrÚr0r²rùrpÚExcInfor­r@r~r%r¯ÚOnErrÚFILE_CHUNK_SIZEr<rCr,r+r"r\r]r^r#r$r‹rr%r™rœr«r'r¼r(rÅr)r&r*rØrÞràrrrrrr#r/r2r4r8r-r<r@rCrQrSr[r.rerprtrzr/r­rfr=r;ú<module>rÉs×ðÝ"ã ÛÛÛÛ    ÛÛ Û Û
ÛÛßLÕLÝ!ÝÝß3Ñ3Ýß-÷÷ñõ;Ý>åßOÝ;Ý.Ý+ÝCò €ð"
ˆ×    Ñ    ˜8Ó    $€á ˆCƒL€Ø
]Ñ# ]°MÐAÑ
B€ØC˜˜cMÑ"€ ؐC˜˜x¨™}¨h°s©mÐ;Ñ<Ð<Ñ=€ ؐ,  mÐ4°cÐ9Ñ:€Ø,  gÐ.°Ð3Ñ4€à€óXó0ó&ó    ñ˜ Ô$ó
,ó%ð
,ó    ó
ð$ñ & Ø
ð& à
ð& ð&ð& ð
ð & ð 
ó & óRôó!ó
ó óó $ó 9ó %ó óð$!0ðØ
ðØðà!óô
"óóó" 7óô )Hô )ó"#ó    ô"ó(óó:(ð(3Ø     ð3Ø @ð3àó3ó(*ó$ð    *Ø     ð    *à3ó    *ó/ó2ó
Dñ $Ô÷+ð+óð+ó(.ó.ó
 
ó4 ;ó8ô
    ó+ð
3Ø
ð
3Ø)4ð
3à$ó
3ôW
Ð'=ôW
ôtr=