zmc
2023-08-08 e792e9a60d958b93aef96050644f369feb25d61b
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
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
U
H=®dÀ¡ã @sBddlmZddlZddlZddlZz ddlZWnek
rHdZYnXejddkr~ddlmZe    fZ
e Z ddl mZddlZddlZddlmZddlmZmZmZmZmZdd    lmZmZmZm Z m!Z!m"Z"m#Z#d
d „Zddl$Z$dd l$m%Z%m&Z&m'Z'm(Z(m)Z)m*Z*m+Z+m,Z,m-Z-er&dd l$m.Z.ddl/Z/ddl0Z0ddl1Z2ddl3m3Z3ddl4Z4e5Z5ddl6m7Z8ddl6m9Z:da;dd„Z<nddl=mZe>fZ
e>Z ddl=m?ZddlZddlZddlZddl@mZmZmZm<Z<mZmZmZmZm#Z#ddlAm&Z&mZm%Z%m Z m!Z!m)Z)m*Z*m+Z+m,Z,m-Z-er&dd lAm.Z.ddlBm(Z(m'Z'm"Z"ddlCmDZ/ddlAmEZ$ddlFmDZ0ddl2Z2ddlGm3Z3ddlHmIZ4eJZ5ddl6m:Z:e8Z8zddlmKZKmLZLWn8ek
rÞGdd„deMƒZLdddd„ZNdd„ZKYnXzddl mOZPWn&ek
rGd d!„d!eQƒZPYnXzdd"lmRZRWn,ek
rTejSejTBdfd#d$„ZRYnXdd%lUmVZWeXeWd&ƒrteWZVn,dd'lUmYZZGd(d)„d)eZƒZYGd*d+„d+eWƒZVzdd,l[m\Z\Wnek
rÎd-d.„Z\YnXz ddl]Z]Wn"ek
rþdd/lm]Z]YnXze^Z^Wn*e_k
r2dd0l`maZad1d2„Z^YnXzejbZbejcZcWnHedk
rŒe e¡pbd3Zfefd4krtd5Zgnd6Zgd7d8„Zbd9d:„ZcYnXzdd;lhmiZiWnHek
rædd<ljmkZkmlZlddlZe md=¡Znd>d?„Zod@dA„ZiYnXzddBlpmqZqWn"ek
rddBlrmqZqYnXejddC…dDkr:e3ƒjsZsn ddElpmsZszddFltmuZuWndek
rºddGltmvZvzddHlwmxZyWn ek
r¤dedJdK„ZyYnXGdLdM„dMevƒZuYnXzddNlzm{Z{WnHek
rzddNl|m{Z{Wn ek
rdfdOdP„Z{YnXYnXzddQltm}Z}WnŠek
r°zddRl~mZ€Wn"ek
rjddRlmZ€YnXzddSl‚mƒZƒm„Z„m…Z…Wnek
ršYnXGdTdU„dUe†ƒZ}YnXzddVl‡mˆZˆm‰Z‰Wnvek
r<e mdWejŠ¡Z‹dXdY„Z‰GdZd[„d[e†ƒZŒdgd\d]„ZGd^d_„d_eŽƒZGd`da„daeƒZ‘Gdbdc„dceQƒZˆYnXdS)hé)Úabsolute_importNé)ÚStringIO)ÚFileTypeé)Úshutil)ÚurlparseÚ
urlunparseÚurljoinÚurlsplitÚ
urlunsplit)Ú urlretrieveÚquoteÚunquoteÚ url2pathnameÚ pathname2urlÚContentTooShortErrorÚ    splittypecCst|tƒr| d¡}t|ƒS)Núutf-8)Ú
isinstanceÚunicodeÚencodeÚ_quote)Ús©rúQD:\z\workplace\VsCode\pyvenv\venv\Lib\site-packages\pip/_vendor/distlib/compat.pyrs
 
r)    ÚRequestÚurlopenÚURLErrorÚ    HTTPErrorÚHTTPBasicAuthHandlerÚHTTPPasswordMgrÚ HTTPHandlerÚHTTPRedirectHandlerÚ build_opener)Ú HTTPSHandler)Ú
HTMLParser)Úifilter)Ú ifilterfalsecCs<tdkrddl}| d¡at |¡}|r4| dd¡Sd|fS)zJsplituser('user[:passwd]@host[:port]') --> 'user[:passwd]', 'host[:port]'.Nrz ^(.*)@(.*)$ré)Ú    _userprogÚreÚcompileÚmatchÚgroup)Úhostr+r-rrrÚ    splituser4s
 
 r0)Ú TextIOWrapper)    rr    r
r0rrr r r)
rr rrrr r!r"r#r$)rrr)Ú filterfalse)Úmatch_hostnameÚCertificateErrorc@s eZdZdS)r4N)Ú__name__Ú
__module__Ú __qualname__rrrrr4^sr4c
Csôg}|s dS| d¡}|d|dd…}}| d¡}||krNtdt|ƒƒ‚|sb| ¡| ¡kS|dkrv| d¡n>| d    ¡sŠ| d    ¡rœ| t |¡¡n| t |¡     d
d ¡¡|D]}| t |¡¡q¸t 
d d   |¡dtj ¡}    |      |¡S)zpMatching according to RFC 6125, section 6.4.3
 
        http://tools.ietf.org/html/rfc6125#section-6.4.3
        FÚ.rrNÚ*z,too many wildcards in certificate DNS name: z[^.]+zxn--z\*z[^.]*z\Az\.z\Z)ÚsplitÚcountr4ÚreprÚlowerÚappendÚ
startswithr+ÚescapeÚreplacer,ÚjoinÚ
IGNORECASEr-)
ÚdnÚhostnameZ max_wildcardsZpatsÚpartsZleftmostÚ    remainderÚ    wildcardsÚfragÚpatrrrÚ_dnsname_matchbs*
 
 
ÿ rKcCsì|s tdƒ‚g}| dd¡}|D]*\}}|dkr t||ƒr@dS| |¡q |s”| dd¡D]6}|D],\}}|dkrdt||ƒr†dS| |¡qdq\t|ƒdkr¾td    |d
 tt|ƒ¡fƒ‚n*t|ƒdkràtd ||d fƒ‚ntd ƒ‚dS)a=Verify that *cert* (in decoded format as returned by
        SSLSocket.getpeercert()) matches the *hostname*.  RFC 2818 and RFC 6125
        rules are followed, but IP addresses are not accepted for *hostname*.
 
        CertificateError is raised on failure. On success, the function
        returns nothing.
        ztempty or no certificate, match_hostname needs a SSL socket or SSL context with either CERT_OPTIONAL or CERT_REQUIREDÚsubjectAltNamerÚDNSNÚsubjectÚ
commonNamerz&hostname %r doesn't match either of %sú, zhostname %r doesn't match %rrz=no appropriate commonName or subjectAltName fields were found)    Ú
ValueErrorÚgetrKr>Úlenr4rBÚmapr<)ÚcertrEÚdnsnamesÚsanÚkeyÚvalueÚsubrrrr3”s2  
 
 þ 
þr3)ÚSimpleNamespacec@seZdZdZdd„ZdS)Ú    ContainerzR
        A generic container for when multiple values need to be returned
        cKs|j |¡dS©N©Ú__dict__Úupdate)ÚselfÚkwargsrrrÚ__init__ÆszContainer.__init__N)r5r6r7Ú__doc__rcrrrrr\Âsr\)Úwhichc s"dd„}tj ˆ¡r&|ˆ|ƒr"ˆSdS|dkr>tj dtj¡}|sFdS| tj¡}tj    dkr¼tj
|krt|  dtj
¡tj dd¡ tj¡}t ‡fd    d
„|Dƒƒr¨ˆg}q‡fd d „|Dƒ}nˆg}t ƒ}|D]P}tj |¡}||krÌ| |¡|D](}    tj ||    ¡}
||
|ƒrò|
SqòqÌdS) aKGiven a command, mode, and a PATH string, return the path which
        conforms to the given mode on the PATH, or None if there is no such
        file.
 
        `mode` defaults to os.F_OK | os.X_OK. `path` defaults to the result
        of os.environ.get("PATH"), or can be overridden with a custom search
        path.
 
        cSs&tj |¡o$t ||¡o$tj |¡ Sr])ÚosÚpathÚexistsÚaccessÚisdir)ÚfnÚmoderrrÚ _access_checkÛs ÿzwhich.<locals>._access_checkNÚPATHÚwin32rÚPATHEXTÚc3s |]}ˆ ¡ | ¡¡VqdSr])r=Úendswith©Ú.0Úext©ÚcmdrrÚ    <genexpr>øszwhich.<locals>.<genexpr>csg|] }ˆ|‘qSrrrsrvrrÚ
<listcomp>ûszwhich.<locals>.<listcomp>)rfrgÚdirnameÚenvironrRÚdefpathr:ÚpathsepÚsysÚplatformÚcurdirÚinsertÚanyÚsetÚnormcaseÚaddrB) rwrlrgrmÚpathextÚfilesÚseenÚdirÚnormdirÚthefileÚnamerrvrreÎs8  
 
 
 
 
re)ÚZipFileÚ    __enter__)Ú
ZipExtFilec@s$eZdZdd„Zdd„Zdd„ZdS)rcCs|j |j¡dSr]r^)raÚbaserrrrcszZipExtFile.__init__cCs|Sr]r©rarrrrŽszZipExtFile.__enter__cGs | ¡dSr]©Úclose©raÚexc_inforrrÚ__exit__szZipExtFile.__exit__N)r5r6r7rcrŽr–rrrrrsrc@s$eZdZdd„Zdd„Zdd„ZdS)rcCs|Sr]rr‘rrrrŽ"szZipFile.__enter__cGs | ¡dSr]r’r”rrrr–%szZipFile.__exit__cOstj|f|ž|Ž}t|ƒSr])Ú BaseZipFileÚopenr)raÚargsrbrrrrr˜)sz ZipFile.openN)r5r6r7rŽr–r˜rrrrr!sr)Úpython_implementationcCs0dtjkrdStjdkrdStj d¡r,dSdS)z6Return a string identifying the Python implementation.ÚPyPyÚjavaÚJythonÚ
IronPythonÚCPython)r~ÚversionrfrŒr?rrrrrš0s
 
 rš)Ú    sysconfig)ÚCallablecCs
t|tƒSr])rr¢)ÚobjrrrÚcallableDsr¤rÚmbcsÚstrictÚsurrogateescapecCs:t|tƒr|St|tƒr$| tt¡Stdt|ƒjƒ‚dS©Nzexpect bytes or str, not %s)    rÚbytesÚ    text_typerÚ _fsencodingÚ    _fserrorsÚ    TypeErrorÚtyper5©ÚfilenamerrrÚfsencodeXs
 
 ÿr±cCs:t|tƒr|St|tƒr$| tt¡Stdt|ƒjƒ‚dSr¨)    rrªr©Údecoder«r¬r­r®r5r¯rrrÚfsdecodeas
 
 ÿr³)Údetect_encoding)ÚBOM_UTF8Úlookupzcoding[:=]\s*([-\w.]+)cCsH|dd… ¡ dd¡}|dks*| d¡r.dS|dks@| d¡rDd    S|S)
z(Imitates get_normal_name in tokenizer.c.Né Ú_ú-rzutf-8-)zlatin-1ú
iso-8859-1z iso-latin-1)zlatin-1-z iso-8859-1-z iso-latin-1-rº)r=rAr?)Úorig_encÚencrrrÚ_get_normal_namersÿr½csÊz ˆjj‰Wntk
r$d‰YnXd‰d}d}‡fdd„}‡‡fdd„}|ƒ}| t¡rpd‰|d    d…}d
}|s||gfS||ƒ}|r’||gfS|ƒ}|s¦||gfS||ƒ}|r¾|||gfS|||gfS) a?
        The detect_encoding() function is used to detect the encoding that should
        be used to decode a Python source file.  It requires one argument, readline,
        in the same way as the tokenize() generator.
 
        It will call readline a maximum of twice, and return the encoding used
        (as a string) and a list of any lines (left as bytes) it has read in.
 
        It detects the encoding from the presence of a utf-8 bom or an encoding
        cookie as specified in pep-0263.  If both a bom and a cookie are present,
        but disagree, a SyntaxError will be raised.  If the encoding cookie is an
        invalid charset, raise a SyntaxError.  Note that if a utf-8 bom is found,
        'utf-8-sig' is returned.
 
        If no encoding is specified, then the default of 'utf-8' will be returned.
        NFrcs$zˆƒWStk
rYdSXdS)Nó)Ú StopIterationr)ÚreadlinerrÚ read_or_stop•sz%detect_encoding.<locals>.read_or_stopcsäz| d¡}Wn4tk
rBd}ˆdk    r6d |ˆ¡}t|ƒ‚YnXt |¡}|sVdSt|dƒ}z t|ƒ}Wn:tk
r¨ˆdkrd|}n d ˆ|¡}t|ƒ‚YnXˆrà|j    dkr؈dkrÆd}n
d ˆ¡}t|ƒ‚|d    7}|S)
Nrz'invalid or missing encoding declarationz {} for {!r}rzunknown encoding: zunknown encoding for {!r}: {}zencoding problem: utf-8z encoding problem for {!r}: utf-8z-sig)
r²ÚUnicodeDecodeErrorÚformatÚ SyntaxErrorÚ    cookie_reÚfindallr½r¶Ú LookupErrorrŒ)ÚlineÚ line_stringÚmsgÚmatchesÚencodingÚcodec)Ú    bom_foundr°rrÚ find_cookie›s8 
 
ÿ
 
z$detect_encoding.<locals>.find_cookieTrz    utf-8-sig)Ú__self__rŒÚAttributeErrorr?rµ)rÀrÌÚdefaultrÁrÏÚfirstÚsecondr)rÎr°rÀrr´}s4 
 &
 
 
 r´)r@r))ré)Úunescape)ÚChainMap)ÚMutableMapping)Úrecursive_reprú...cs‡fdd„}|S)zm
            Decorator to make a repr function return fillvalue for a recursive
            call
            csLtƒ‰‡‡‡fdd„}tˆdƒ|_tˆdƒ|_tˆdƒ|_tˆdiƒ|_|S)Nc    sBt|ƒtƒf}|ˆkrˆSˆ |¡z ˆ|ƒ}W5ˆ |¡X|Sr])ÚidÚ    get_identr…Údiscard)rarXÚresult)Ú    fillvalueÚ repr_runningÚ user_functionrrÚwrapperòs
  z=_recursive_repr.<locals>.decorating_function.<locals>.wrapperr6rdr5Ú__annotations__)rƒÚgetattrr6rdr5rã)rárâ©rß)ràrárÚdecorating_functionïs   z,_recursive_repr.<locals>.decorating_functionr)rßrærrårÚ_recursive_représ rçc@s´eZdZdZdd„Zdd„Zdd„Zd'd    d
„Zd d „Zd d„Z    dd„Z
dd„Z e ƒdd„ƒZ edd„ƒZdd„ZeZdd„Zedd„ƒZdd„Zdd „Zd!d"„Zd#d$„Zd%d&„ZdS)(r×aÍ A ChainMap groups multiple dicts (or other mappings) together
        to create a single, updateable view.
 
        The underlying mappings are stored in a list.  That list is public and can
        accessed or updated using the *maps* attribute.  There is no other state.
 
        Lookups search the underlying mappings successively until a key is found.
        In contrast, writes, updates, and deletions only operate on the first
        mapping.
 
        cGst|ƒp ig|_dS)z˜Initialize a ChainMap by setting *maps* to the given mappings.
            If no mappings are provided, a single empty dictionary is used.
 
            N)ÚlistÚmaps)rarérrrrcszChainMap.__init__cCs t|ƒ‚dSr])ÚKeyError©rarXrrrÚ __missing__szChainMap.__missing__c    Cs:|jD](}z||WStk
r,YqXq| |¡Sr])rérêrì)rarXÚmappingrrrÚ __getitem__s 
zChainMap.__getitem__NcCs||kr||S|Sr]r©rarXrÒrrrrR%sz ChainMap.getcCsttƒj|jŽƒSr])rSrƒÚunionrér‘rrrÚ__len__(szChainMap.__len__cCsttƒj|jŽƒSr])Úiterrƒrðrér‘rrrÚ__iter__+szChainMap.__iter__cst‡fdd„|jDƒƒS)Nc3s|]}ˆ|kVqdSr]r)rtÚm©rXrrrx/sz(ChainMap.__contains__.<locals>.<genexpr>©r‚rérërrõrÚ __contains__.szChainMap.__contains__cCs
t|jƒSr]rör‘rrrÚ__bool__1szChainMap.__bool__cCsd |d tt|jƒ¡¡S)Nz{0.__class__.__name__}({1})rP)rÃrBrTr<rér‘rrrÚ__repr__4sÿzChainMap.__repr__cGs|tj|f|žŽƒS)z?Create a ChainMap with a single dict created from the iterable.)ÚdictÚfromkeys)ÚclsÚiterabler™rrrrû9szChainMap.fromkeyscCs$|j|jd ¡f|jdd…žŽS)zHNew ChainMap or subclass with a new copy of maps[0] and refs to maps[1:]rrN)Ú    __class__réÚcopyr‘rrrrÿ>sz ChainMap.copycCs|jif|jžŽS)z;New ChainMap with a new dict followed by all previous maps.©rþrér‘rrrÚ    new_childDszChainMap.new_childcCs|j|jdd…ŽS)zNew ChainMap from maps[1:].rNrr‘rrrÚparentsHszChainMap.parentscCs||jd|<dS)Nr)ré)rarXrYrrrÚ __setitem__MszChainMap.__setitem__cCs8z|jd|=Wn"tk
r2td |¡ƒ‚YnXdS)Nrú(Key not found in the first mapping: {!r})rérêrÃrërrrÚ __delitem__PszChainMap.__delitem__cCs2z|jd ¡WStk
r,tdƒ‚YnXdS)zPRemove and return an item pair from maps[0]. Raise KeyError is maps[0] is empty.rz#No keys found in the first mapping.N)réÚpopitemrêr‘rrrrVszChainMap.popitemcGs@z|jdj|f|žŽWStk
r:td |¡ƒ‚YnXdS)zWRemove *key* from maps[0] and return its value. Raise KeyError if *key* not in maps[0].rrN)réÚpoprêrÃ)rarXr™rrrr]sz ChainMap.popcCs|jd ¡dS)z'Clear maps[0], leaving maps[1:] intact.rN)réÚclearr‘rrrrdszChainMap.clear)N)r5r6r7rdrcrìrîrRrñrór÷rørçrùÚ classmethodrûrÿÚ__copy__rÚpropertyrrrrrrrrrrr×s. 
 
 
 
r×)Úcache_from_sourcecCs0| d¡st‚|dkrd}|r$d}nd}||S)Nz.pyTÚcÚo)rrÚAssertionError)rgÚdebug_overrideÚsuffixrrrr nsr )Ú OrderedDict)rÜ)ÚKeysViewÚ
ValuesViewÚ    ItemsViewc@sþeZdZdZdd„Zejfdd„Zejfdd„Zdd    „Zd
d „Z    d d „Z
d6dd„Z dd„Z dd„Z dd„Zdd„Zdd„Zdd„Zdd„ZeZeƒZefdd „Zd7d"d#„Zd8d$d%„Zd&d'„Zd(d)„Zed9d*d+„ƒZd,d-„Zd.d/„Zd0d1„Zd2d3„Z d4d5„Z!d!S):rz)Dictionary that remembers insertion ordercOsnt|ƒdkrtdt|ƒƒ‚z
|jWn6tk
r\g|_}||dg|dd…<i|_YnX|j||ŽdS)zÑInitialize an ordered dictionary.  Signature is the same as for
            regular dictionaries, but keyword arguments are not recommended
            because their insertion order is arbitrary.
 
            rz$expected at most 1 arguments, got %dN)rSr­Ú_OrderedDict__rootrÑÚ_OrderedDict__mapÚ_OrderedDict__update)rar™ÚkwdsÚrootrrrrc•s 
 
 zOrderedDict.__init__cCsF||kr6|j}|d}|||g|d<|d<|j|<||||ƒdS)z!od.__setitem__(i, y) <==> od[i]=yrrN)rr)rarXrYZ dict_setitemrÚlastrrrr¥s
 zOrderedDict.__setitem__cCs0|||ƒ|j |¡\}}}||d<||d<dS)z od.__delitem__(y) <==> del od[y]rrN)rr)rarXZ dict_delitemÚ    link_prevÚ    link_nextrrrr¯s
zOrderedDict.__delitem__ccs.|j}|d}||k    r*|dV|d}qdS)zod.__iter__() <==> iter(od)rr)N©r©rarÚcurrrrrró¸s
 
zOrderedDict.__iter__ccs.|j}|d}||k    r*|dV|d}qdS)z#od.__reversed__() <==> reversed(od)rr)NrrrrrÚ __reversed__Às
 
zOrderedDict.__reversed__cCsdz@|j ¡D]}|dd…=q |j}||dg|dd…<|j ¡Wntk
rTYnXt |¡dS)z.od.clear() -> None.  Remove all items from od.N)rÚ
itervaluesrrrÑrú)raÚnoderrrrrÈs zOrderedDict.clearTcCs||s tdƒ‚|j}|r8|d}|d}||d<||d<n |d}|d}||d<||d<|d}|j|=t ||¡}||fS)z¡od.popitem() -> (k, v), return and remove a (key, value) pair.
            Pairs are returned in LIFO order if last is true or FIFO order if false.
 
            zdictionary is emptyrrr))rêrrrúr)rarrÚlinkrrrXrYrrrrÔs 
 zOrderedDict.popitemcCst|ƒS)zod.keys() -> list of keys in od)rèr‘rrrÚkeysíszOrderedDict.keyscs‡fdd„ˆDƒS)z#od.values() -> list of values in odcsg|] }ˆ|‘qSrr©rtrXr‘rrryósz&OrderedDict.values.<locals>.<listcomp>rr‘rr‘rÚvaluesñszOrderedDict.valuescs‡fdd„ˆDƒS)z.od.items() -> list of (key, value) pairs in odcsg|]}|ˆ|f‘qSrrr&r‘rrry÷sz%OrderedDict.items.<locals>.<listcomp>rr‘rr‘rÚitemsõszOrderedDict.itemscCst|ƒS)z0od.iterkeys() -> an iterator over the keys in od)ròr‘rrrÚiterkeysùszOrderedDict.iterkeysccs|D]}||VqdS)z2od.itervalues -> an iterator over the values in odNr©raÚkrrrr"ýszOrderedDict.itervaluesccs|D]}|||fVqdS)z=od.iteritems -> an iterator over the (key, value) items in odNrr*rrrÚ    iteritemsszOrderedDict.iteritemscOsÈt|ƒdkr tdt|ƒfƒ‚n |s,tdƒ‚|d}d}t|ƒdkrL|d}t|tƒrn|D]}||||<qZn<t|dƒr”| ¡D]}||||<q€n|D]\}}|||<q˜| ¡D]\}}|||<q²dS)    a—od.update(E, **F) -> None.  Update od from dict/iterable E and F.
 
            If E is a dict instance, does:           for k in E: od[k] = E[k]
            If E has a .keys() method, does:         for k in E.keys(): od[k] = E[k]
            Or if E is an iterable of items, does:   for k, v in E: od[k] = v
            In either case, this is followed by:     for k, v in F.items(): od[k] = v
 
            r)z8update() takes at most 2 positional arguments (%d given)z,update() takes at least 1 argument (0 given)rrrr%N)rSr­rrúÚhasattrr%r()r™rraÚotherrXrYrrrr`s(     ÿ 
 
 
zOrderedDict.updatecCs0||kr||}||=|S||jkr,t|ƒ‚|S)z±od.pop(k[,d]) -> v, remove specified key and return the corresponding value.
            If key is not found, d is returned if given, otherwise KeyError is raised.
 
            )Ú_OrderedDict__markerrê)rarXrÒrÞrrrr*s
zOrderedDict.popNcCs||kr||S|||<|S)zDod.setdefault(k[,d]) -> od.get(k,d), also set od[k]=d if k not in odrrïrrrÚ
setdefault7szOrderedDict.setdefaultcCsf|si}t|ƒtƒf}||kr"dSd||<z.|sBd|jjfW¢Sd|jj| ¡fW¢S||=XdS)zod.__repr__() <==> repr(od)rÚrz%s()z%s(%r)N)rÛÚ
_get_identrþr5r()raZ _repr_runningZcall_keyrrrrù>szOrderedDict.__repr__csX‡fdd„ˆDƒ}tˆƒ ¡}ttƒƒD]}| |d¡q(|rLˆj|f|fSˆj|ffS)z%Return state information for picklingcsg|]}|ˆ|g‘qSrr©rtr+r‘rrryNsz*OrderedDict.__reduce__.<locals>.<listcomp>N)Úvarsrÿrrrþ)rar(Ú    inst_dictr+rr‘rÚ
__reduce__Ls zOrderedDict.__reduce__cCs
| |¡S)z!od.copy() -> a shallow copy of od)rþr‘rrrrÿVszOrderedDict.copycCs|ƒ}|D] }|||<q
|S)zˆOD.fromkeys(S[, v]) -> New ordered dictionary with keys from S
            and values equal to v (which defaults to None).
 
            r)rürýrYÚdrXrrrrûZs
zOrderedDict.fromkeyscCs6t|tƒr*t|ƒt|ƒko(| ¡| ¡kSt ||¡S)z›od.__eq__(y) <==> od==y.  Comparison to another OD is order-sensitive
            while comparison to a regular mapping is order-insensitive.
 
            )rrrSr(rúÚ__eq__©rar.rrrr7es
 zOrderedDict.__eq__cCs
||k Sr]rr8rrrÚ__ne__nszOrderedDict.__ne__cCst|ƒS)z@od.viewkeys() -> a set-like object providing a view on od's keys)rr‘rrrÚviewkeyssszOrderedDict.viewkeyscCst|ƒS)z<od.viewvalues() -> an object providing a view on od's values)rr‘rrrÚ
viewvalueswszOrderedDict.viewvaluescCst|ƒS)zBod.viewitems() -> a set-like object providing a view on od's items)rr‘rrrÚ    viewitems{szOrderedDict.viewitems)T)N)N)N)"r5r6r7rdrcrúrrrór!rrr%r'r(r)r"r,r`rÚobjectr/rr0rùr5rÿr    rûr7r9r:r;r<rrrrr‰s: 
    
 
 
 
 
    r)ÚBaseConfiguratorÚ valid_identz^[a-z_][a-z0-9_]*$cCst |¡}|std|ƒ‚dS)Nz!Not a valid Python identifier: %rT)Ú
IDENTIFIERr-rQ)rrôrrrr?…s
 r?c@s"eZdZdZdd„Zddd„ZdS)ÚConvertingDictz A converting dictionary wrapper.cCsJt ||¡}|j |¡}||k    rF|||<t|ƒtttfkrF||_||_    |Sr])
rúrîÚ configuratorÚconvertr®rAÚConvertingListÚConvertingTupleÚparentrX©rarXrYrÞrrrrî˜s  
ÿzConvertingDict.__getitem__NcCsLt |||¡}|j |¡}||k    rH|||<t|ƒtttfkrH||_||_    |Sr])
rúrRrBrCr®rArDrErFrX©rarXrÒrYrÞrrrrR¤s 
ÿzConvertingDict.get)N)r5r6r7rdrîrRrrrrrA•s rAcCsDt |||¡}|j |¡}||k    r@t|ƒtttfkr@||_||_    |Sr])
rúrrBrCr®rArDrErFrXrHrrrr°s 
ÿrc@s"eZdZdZdd„Zddd„ZdS)    rDzA converting list wrapper.cCsJt ||¡}|j |¡}||k    rF|||<t|ƒtttfkrF||_||_    |Sr])
rèrîrBrCr®rArDrErFrXrGrrrrî¼s  
ÿzConvertingList.__getitem__éÿÿÿÿcCs<t ||¡}|j |¡}||k    r8t|ƒtttfkr8||_|Sr])    rèrrBrCr®rArDrErF)raÚidxrYrÞrrrrÈs  
ÿzConvertingList.popN)rI)r5r6r7rdrîrrrrrrDºs rDc@seZdZdZdd„ZdS)rEzA converting tuple wrapper.cCsBt ||¡}|j |¡}||k    r>t|ƒtttfkr>||_||_    |Sr])
ÚtuplerîrBrCr®rArDrErFrXrGrrrrîÓs  
ÿzConvertingTuple.__getitem__N)r5r6r7rdrîrrrrrEÑsrEc@sŒeZdZdZe d¡Ze d¡Ze d¡Ze d¡Z    e d¡Z
ddd    œZ e e ƒZd
d „Zd d „Zdd„Zdd„Zdd„Zdd„Zdd„ZdS)r>zQ
        The configurator base class which defines some useful defaults.
        z%^(?P<prefix>[a-z]+)://(?P<suffix>.*)$z ^\s*(\w+)\s*z^\.\s*(\w+)\s*z^\[\s*(\w+)\s*\]\s*z^\d+$Ú ext_convertÚ cfg_convert)ruÚcfgcCst|ƒ|_||j_dSr])rAÚconfigrB)rarOrrrrcñs
zBaseConfigurator.__init__c        CsÂ| d¡}| d¡}z^| |¡}|D]H}|d|7}zt||ƒ}Wq$tk
rj| |¡t||ƒ}Yq$Xq$|WStk
r¼t ¡dd…\}}td||fƒ}|||_    |_
|‚YnXdS)zl
            Resolve strings to objects using standard import and attribute
            syntax.
            r8rrNzCannot resolve %r: %s) r:rÚimporterrärÑÚ ImportErrorr~r•rQÚ    __cause__Ú __traceback__)    rarrŒÚusedÚfoundrIÚeÚtbÚvrrrÚresolveõs"
 
 
 
zBaseConfigurator.resolvecCs
| |¡S)z*Default converter for the ext:// protocol.)rY©rarYrrrrL szBaseConfigurator.ext_convertcCsþ|}|j |¡}|dkr&td|ƒ‚nÔ|| ¡d…}|j| ¡d}|rú|j |¡}|rn|| ¡d}nd|j |¡}|rÒ| ¡d}|j |¡s ||}n2zt    |ƒ}||}Wnt
k
rÐ||}YnX|rè|| ¡d…}qHtd||fƒ‚qH|S)z*Default converter for the cfg:// protocol.NzUnable to convert %rrzUnable to convert %r at %r) Ú WORD_PATTERNr-rQÚendrOÚgroupsÚ DOT_PATTERNÚ INDEX_PATTERNÚ DIGIT_PATTERNÚintr­)rarYÚrestrôr6rJÚnrrrrMs4     
 ÿzBaseConfigurator.cfg_convertcCsÆt|tƒs$t|tƒr$t|ƒ}||_nžt|tƒsHt|tƒrHt|ƒ}||_nzt|tƒslt|tƒrlt|ƒ}||_nVt|tƒrÂ|j     
|¡}|rÂ|  ¡}|d}|j   |d¡}|rÂ|d}t||ƒ}||ƒ}|S)zù
            Convert values to an appropriate type. dicts, lists and tuples are
            replaced by their converting alternatives. Strings are checked to
            see if they have a conversion format and are converted if they do.
            ÚprefixNr)rrArúrBrDrèrErKÚ string_typesÚCONVERT_PATTERNr-Ú    groupdictÚvalue_convertersrRrä)rarYrôr6rdÚ    converterrrrrrC2s,
ÿ
 
zBaseConfigurator.convertcsnˆ d¡}t|ƒs| |¡}ˆ dd¡}t‡fdd„ˆDƒƒ}|f|Ž}|rj| ¡D]\}}t|||ƒqT|S)z1Configure an object with a user-supplied factory.z()r8Ncs g|]}t|ƒr|ˆ|f‘qSr)r?r2©rOrrryUsz5BaseConfigurator.configure_custom.<locals>.<listcomp>)rr¤rYrúr(Úsetattr)rarOr ÚpropsrbrÞrŒrYrrjrÚconfigure_customNs
 
 
z!BaseConfigurator.configure_customcCst|tƒrt|ƒ}|S)z0Utility function which converts lists to tuples.)rrèrKrZrrrÚas_tuple\s
zBaseConfigurator.as_tupleN)r5r6r7rdr+r,rfr[r^r_r`rhÚ staticmethodÚ
__import__rPrcrYrLrMrCrmrnrrrrr>Ýs"
 
 
 
 
þ"r>)r)rÚ)N)N)’Ú
__future__rrfr+r~ÚsslrQÚ version_inforÚ
basestringrerrªÚtypesrÚ    file_typeÚ __builtin__ÚbuiltinsÚ ConfigParserÚ configparserZ    _backportrrr    r
r r Úurllibr rrrrrrrÚurllib2rrrrr r!r"r#r$r%ÚhttplibÚ    xmlrpclibÚQueueÚqueuer&ÚhtmlentitydefsÚ    raw_inputÚ    itertoolsr'Úfilterr(r2r*r0ÚioÚstrr1Ú urllib.parseÚurllib.requestÚ urllib.errorÚ http.clientÚclientÚrequestÚ xmlrpc.clientÚ html.parserÚ html.entitiesÚentitiesÚinputr3r4rQrKr[r\r=reÚF_OKÚX_OKÚzipfilerr—r-rZBaseZipExtFilerršr¡r¤Ú    NameErrorÚcollections.abcr¢r±r³rÑÚgetfilesystemencodingr«r¬Útokenizer´Úcodecsrµr¶r,rÅr½Úhtmlr@ÚcgirÖÚ collectionsr×rØÚreprlibrÙrçÚimportlib.utilr ÚimprÚthreadrÜr1Ú dummy_threadÚ_abcollrrrrúÚlogging.configr>r?ÚIr@rArrèrDrKrErrrrÚ<module>s,  
   $,      ,0       
2+A     
 
 
        
 [
  b
w