Why Gemfury? Push, build, and install  RubyGems npm packages Python packages Maven artifacts PHP packages Go Modules Debian packages RPM packages NuGet packages

Repository URL to install this package:

Details    
ray / purelib / ray / thirdparty_files / psutil / __pycache__ / _common.cpython-310.pyc
Size: Mime:
o

‚‚õb$nã
@s2dZddlmZddlmZddlZddlZddlZddlZddlZddl	Z	ddl
Z
ddlZddlZddl
Z
ddlmZddl	mZddl	mZddl	mZzdd	l	mZWneyadZYnwzdd
l	mZWneyudZYnwejdkr€ddlZndZejddkZee d
d¡ƒZeƒZgd¢ZejdkZejdkZ ej! "d¡Z#ej! "d¡Z$e$Z%ej! "d¡Z&ej! "d¡Z'ej! "d¡Z(e&pÇe'pÇe(Z)ej! "d¡Z*ej! "d¡Z+dZ,dZ-dZ.dZ/dZ0dZ1dZ2dZ3d Z4d!Z5d"Z6d#Z7d$Z8d%Z9d&Z:d'Z;d(Z<d)Z=d*Z>d+Z?d,Z@d-ZAd.ZBd/ZCd0ZDd1ZEedurd2ZFd3ZGdZHnGd4d5„d5ejIƒZJeKƒ LeJjM¡edur.d6ZNd7ZOnGd8d9„d9ejIƒZPeKƒ LePjM¡e Q¡ZResHd:ZSnze T¡ZSWneUy_er[d;nd:ZSYnwed<gd=¢ƒZVed>gd?¢ƒZWed@gdA¢ƒZXedBgdC¢ƒZYedDgdE¢ƒZZedFgdG¢ƒZ[edHgdI¢ƒZ\edJgdK¢ƒZ]edLgdM¢ƒZ^edNgdO¢ƒZ_edPgdQ¢ƒZ`edRgdS¢ƒZaedTgdU¢ƒZbedVdWdXgƒZcedYgdZ¢ƒZded[d\d]gƒZeed^gd_¢ƒZfed`gda¢ƒZgedbgda¢ƒZhedcgdd¢ƒZiededfdggƒZjedhdidjgƒZkedkgdl¢ƒZledmdndogƒZmeeegeegfeegegfegegfeegegfegegfeegeegfegeegfegeegfdpœZnedurQen Legegfegegfdqœ¡edurben Ldregeegfi¡Gdsdt„dteoƒZpGdudv„dvepƒZqGdwdx„dxeqƒZrGdydz„dzepƒZsGd{d|„d|epƒZtd±d}d~„Zudd€„Zvdd‚„Zwdƒd„„Zxd…d†„Zyevd‡dˆ„ƒZzd‰dŠ„Z{d‹dŒ„Z|ddŽ„Z}d±dd„Z~d‘d’„ZGd“d”„d”ƒZ€d•d–„Ze€ƒZ‚e‚jƒe_ƒe‚j„e_„d—Z…d˜d™„Z†dšd›„Z‡ee‡fdœd„ZˆefdždŸ„Z‰d²d¡d¢„ZŠd£d¤„Z‹erød¥d¦„ZŒnd§d¦„ZŒevejfd¨d©„ƒZŽd³d«d¬„Zddªejfd­d®„Zd¯d°„Z‘dS)´z9Common objects shared by __init__.py and _ps*.py modules.é)Údivision)Úprint_functionN)Ú
namedtuple)ÚAF_INET)Ú
SOCK_DGRAM)ÚSOCK_STREAM)ÚAF_INET6)ÚAF_UNIX)éér
ÚPSUTIL_DEBUG)RÚFREEBSDÚBSDÚLINUXÚNETBSDÚOPENBSDÚMACOSÚOSXÚPOSIXÚSUNOSÚWINDOWSÚ
CONN_CLOSEÚCONN_CLOSE_WAITÚCONN_CLOSINGÚCONN_ESTABLISHEDÚCONN_FIN_WAIT1ÚCONN_FIN_WAIT2Ú
CONN_LAST_ACKÚCONN_LISTENÚ	CONN_NONEÚ
CONN_SYN_RECVÚ
CONN_SYN_SENTÚCONN_TIME_WAITÚNIC_DUPLEX_FULLÚNIC_DUPLEX_HALFÚNIC_DUPLEX_UNKNOWNÚSTATUS_DEADÚSTATUS_DISK_SLEEPÚSTATUS_IDLEÚ
STATUS_LOCKEDÚSTATUS_RUNNINGÚSTATUS_SLEEPINGÚSTATUS_STOPPEDÚSTATUS_SUSPENDEDÚSTATUS_TRACING_STOPÚSTATUS_WAITINGÚSTATUS_WAKE_KILLÚ
STATUS_WAKINGÚ
STATUS_ZOMBIEÚ
STATUS_PARKEDÚENCODINGÚ
ENCODING_ERRSrÚpconnÚ	pcputimesÚpctxswÚpgidsÚpioÚpioniceÚ	popenfileÚpthreadÚpuidsÚsconnÚ	scpustatsÚsdiskioÚ	sdiskpartÚ
sdiskusageÚsnetioÚsnicaddrÚ	snicstatsÚsswapÚsuserÚ	conn_tmapÚdeprecated_methodÚ
isfile_strictÚmemoizeÚparse_environ_blockÚpath_exists_strictÚ
usage_percentÚ
supports_ipv6Úsockfam_to_enumÚsocktype_to_enumÚwrap_numbersÚ	open_textÚopen_binaryÚcatÚbcatÚbytes2humanÚconn_to_ntupleÚdebugÚhiliteÚterm_supports_colorsÚprint_colorÚposixÚntÚlinuxÚdarwin)ZfreebsdZmidnightbsdZopenbsdZnetbsd)ÚsunosÚsolarisÚaixÚrunningZsleepingz
disk-sleepÚstoppedztracing-stopZzombieZdeadz	wake-killZwakingÚidleÚlockedZwaitingZ	suspendedZparkedZESTABLISHEDZSYN_SENTZSYN_RECVZ	FIN_WAIT1Z	FIN_WAIT2Z	TIME_WAITZCLOSEZ
CLOSE_WAITZLAST_ACKZLISTENZCLOSINGÚNONEééc@seZdZdZdZdZdS)Ú	NicDuplexrjrkrN)Ú__name__Ú
__module__Ú__qualname__r#r$r%©rprpú5/tmp/pip-target-wec6zj2z/lib/python/psutil/_common.pyrlŒsrléÿÿÿÿéþÿÿÿc@seZdZdZdZdS)ÚBatteryTimerrrsN)rmrnroÚPOWER_TIME_UNKNOWNÚPOWER_TIME_UNLIMITEDrprprprqrt˜srtÚreplaceÚsurrogateescaperG)ÚtotalÚusedÚfreeÚpercentÚsinZsoutrC)ryrzr{r|rA)Ú
read_countÚwrite_countÚ
read_bytesÚwrite_bytesZ	read_timeZ
write_timerB)ZdeviceZ
mountpointZfstypeÚoptsZmaxfileZmaxpathrD)Z
bytes_sentZ
bytes_recvZpackets_sentZpackets_recvZerrinZerroutZdropinZdropoutrH)ÚnameZterminalÚhostÚstartedÚpidr?)ÚfdÚfamilyÚtypeÚladdrÚraddrÚstatusr†rE)rˆÚaddressÚnetmaskÚ	broadcastZptprF)ZisupZduplexÚspeedZmtur@)Zctx_switchesZ
interruptsZsoft_interruptsZsyscallsÚscpufreq)ÚcurrentÚminÚmaxÚshwtemp)Úlabelr’ÚhighÚcriticalÚsbattery)r|ZsecsleftZ
power_pluggedÚsfanr–r’r7)ÚuserÚsystemÚ
children_userÚchildren_systemr<Úpathr‡r=)ÚidZ	user_timeZsystem_timer>)ÚrealZ	effectiveÚsavedr9r:)r~rr€rr;ZioclassÚvaluer8Z	voluntaryZinvoluntaryr6)r‡rˆr‰rŠr‹rŒÚaddrÚipÚport)ÚallZtcpZtcp4ZudpZudp4ZinetZinet4Zinet6)Ztcp6Zudp6Úunixc@s,eZdZdZdZdd„Zdd„Zdd„Zd	S)
ÚErrorzQBase exception class. All other psutil exceptions inherit
    from this one.
    ÚpsutilcCsHt ¡}|D]}t||dƒ}|r|||<q|dkr!|dkr!|||<q|S)Nr†r)ÚcollectionsÚOrderedDictÚgetattr)ÚselfÚattrsÚinforƒr£rprprqÚ	_infodicts
€zError._infodictcCsP| d¡}|rdd dd„| ¡Dƒ¡}nd}d dd„t|dd	ƒ|fDƒ¡S)
N)r†Úppidrƒz(%s)ú, cSóg|]
\}}d||f‘qS©z%s=%rrp©Ú.0ÚkÚvrprprqÚ
<listcomp>*óz!Error.__str__.<locals>.<listcomp>ú cSsg|]}|r|‘qSrprp)r·Úxrprprqrº-sÚmsgÚ)r±ÚjoinÚitemsr­©r®r°ÚdetailsrprprqÚ__str__%s
ÿ z
Error.__str__cCs2| d¡}d dd„| ¡Dƒ¡}d|jj|fS)N)r†r²rƒÚsecondsr¾r³cSr´rµrpr¶rprprqrº2r»z"Error.__repr__.<locals>.<listcomp>z
psutil.%s(%s))r±rÀrÁÚ	__class__rmrÂrprprqÚ__repr__/s
zError.__repr__N)rmrnroÚ__doc__r±rÄrÇrprprprqr©s

r©c@óeZdZdZdZddd„ZdS)Ú
NoSuchProcesszXException raised when a process with a certain PID doesn't
    or no longer exists.
    rªNcCó$t |¡||_||_|pd|_dS)Nzprocess no longer exists©r©Ú__init__r†rƒr¾©r®r†rƒr¾rprprqrÍ<ó
zNoSuchProcess.__init__©NN©rmrnrorÈrÍrprprprqrÊ6órÊc@rÉ)Ú
ZombieProcessa1Exception raised when querying a zombie process. This is
    raised on macOS, BSD and Solaris only, and not always: depending
    on the query the OS may be able to succeed anyway.
    On Linux all zombie processes are querable (hence this is never
    raised). Windows doesn't have zombie processes.
    rªNcCs$t ||||¡||_|pd|_dS)Nz"PID still exists but it's a zombie)rÊrÍr²r¾)r®r†rƒr²r¾rprprqrÍLszZombieProcess.__init__©NNNrÑrprprprqrÓCsrÓc@rÉ)ÚAccessDeniedz@Exception raised when permission to perform an action is denied.rªNcCrË)Nr¿rÌrÎrprprqrÍVrÏzAccessDenied.__init__rÔrÑrprprprqrÕRsrÕc@rÉ)ÚTimeoutExpiredzWRaised on Process.wait(timeout) if timeout expires and process
    is still alive.
    rªNcCs*t |¡||_||_||_d||_dS)Nztimeout after %s seconds)r©rÍrÅr†rƒr¾)r®rÅr†rƒrprprqrÍcs

zTimeoutExpired.__init__rÐrÑrprprprqrÖ]rÒrÖcCs@z
t|ƒ|d}Wn
tyYdSw|durt||ƒ}|S)z5Calculate percentage usage of 'used' against 'total'.édgN)ÚfloatÚZeroDivisionErrorÚround)rzryZround_ÚretrprprqrOpsÿ
rOcs2t ˆ¡‡‡fdd„ƒ}‡fdd„}i‰||_|S)aA simple memoize decorator for functions supporting (hashable)
    positional arguments.
    It also provides a cache_clear() function for clearing the cache:

    >>> @memoize
    ... def foo()
    ...     return 1
        ...
    >>> foo()
    1
    >>> foo.cache_clear()
    >>>
    csL|tt| ¡ƒƒf}zˆ|WSty%ˆ|i|¤Ž}ˆ|<|YSw©N)Ú	frozensetÚsortedrÁÚKeyError)ÚargsÚkwargsÚkeyrÛ©ÚcacheÚfunrprqÚwrapperŠs
þzmemoize.<locals>.wrappercsˆ ¡dS)zClear cache.N)Úclearrp)rärprqÚcache_clear“ózmemoize.<locals>.cache_clearN)Ú	functoolsÚwrapsrè)rårærèrprãrqrL|srLcs6t ˆ¡‡fdd„ƒ}dd„}dd„}||_||_|S)aúA memoize decorator which is disabled by default. It can be
    activated and deactivated on request.
    For efficiency reasons it can be used only against class methods
    accepting no arguments.

    >>> class Foo:
    ...     @memoize
    ...     def foo()
    ...         print(1)
    ...
    >>> f = Foo()
    >>> # deactivated (default)
    >>> foo()
    1
    >>> foo()
    1
    >>>
    >>> # activated
    >>> foo.cache_activate(self)
    >>> foo()
    1
    >>> foo()
    >>> foo()
    >>>
    csjz|jˆ}W|Styˆ|ƒYSty4ˆ|ƒ}z	||jˆ<WY|Sty3YY|SwwrÜ)Ú_cacheÚAttributeErrorrß)r®rÛ©rårprqræ¶sóüüúz'memoize_when_activated.<locals>.wrappercSs
i|_dS)zjActivate cache. Expects a Process instance. Cache will be
        stored as a "_cache" instance attribute.N)rì©ÚprocrprprqÚcache_activateÊs
z.memoize_when_activated.<locals>.cache_activatecSs z|`WdStyYdSw)zDeactivate and clear cache.N)rìrírïrprprqÚcache_deactivateÏs

ÿz0memoize_when_activated.<locals>.cache_deactivateN)rêrërñrò)rårærñròrprîrqÚmemoize_when_activatedœsróc
CsVzt |¡}Wnty$}z|jtjtjfvr‚WYd}~dSd}~wwt |j¡S)zœSame as os.path.isfile() but does not swallow EACCES / EPERM
    exceptions, see:
    http://mail.python.org/pipermail/python-dev/2012-June/120787.html
    NF)ÚosÚstatÚOSErrorÚerrnoÚEPERMÚEACCESÚS_ISREGÚst_mode)rŸÚstÚerrrprprqrKÛs€ýrKc
CsLzt |¡WdSty%}z|jtjtjfvr‚WYd}~dSd}~ww)zœSame as os.path.exists() but does not swallow EACCES / EPERM
    exceptions, see:
    http://mail.python.org/pipermail/python-dev/2012-June/120787.html
    NFT)rôrõrör÷rørù)rŸrýrprprqrNêsû€ýrNcCsvtjrtdur	dSz&t ttj¡}t |¡| d¡WdƒWdS1s(wYWdStjy:YdSw)z2Return True if IPv6 is supported on this platform.NF)z::1rT)ÚsocketÚhas_ipv6rrÚ
contextlibÚclosingÚbindÚerror)ÚsockrprprqrPùs
ÿþÿrPcCsxi}d}t}	| d|¡}||kr	|S| d||¡}||kr7|||…}||d|…}|r3| ¡}|||<|d}q)zCParse a C environ block of environment variables into a dictionary.rTúú=rkN)rÚfindÚupper)ÚdatarÛÚposZWINDOWS_Znext_posZ	equal_posrâr£rprprqrMs"öòrMcCó0tdur|Szt |¡WSty|YSw)zConvert a numeric socket family value to an IntEnum member.
    If it's not a known member, return the numeric value itself.
    N)ÚenumrþÚ
AddressFamilyÚ
ValueError©ÚnumrprprqrQ#óÿrQcCr)zConvert a numeric socket type value to an IntEnum member.
    If it's not a known member, return the numeric value itself.
    N)rrþÚ
SocketKindrrrprprqrR0rrRcCsŒ|tjtfvr|r
t|Ž}|rt|Ž}|tjkr%|ttfvr%| |t¡}nt}t|ƒ}t|ƒ}|dur<t	||||||ƒSt
|||||||ƒS)z2Convert a raw connection tuple to a proper ntuple.N)rþrrr¤rÚgetrrQrRr6r?)r‡ÚfamÚtype_rŠr‹rŒZ
status_mapr†rprprqrY=srYcs‡fdd„}|S)zƒA decorator which can be used to mark a method as deprecated
    'replcement' is the method name which will be called instead.
    cs:d|jˆf‰|jdurˆ|_t |¡‡‡fdd„ƒ}|S)Nz8%s() is deprecated and will be removed; use %s() insteadcs$tjˆtddt|ˆƒ|i|¤ŽS)Nrj)ÚcategoryÚ
stacklevel)ÚwarningsÚwarnÚDeprecationWarningr­)r®ràrá)r¾ÚreplacementrprqÚinnerZsz/deprecated_method.<locals>.outer.<locals>.inner)rmrÈrêrë)rår©r)r¾rqÚouterTsÿ
z deprecated_method.<locals>.outerNrp)rrrprrqrJPsrJc@sBeZdZdZdd„Zdd„Zdd„Zdd	„Zddd„Zd
d„Z	d
S)Ú_WrapNumberszNWatches numbers so that they don't overflow and wrap
    (reset to zero).
    cCs t ¡|_i|_i|_i|_dSrÜ)Ú	threadingÚLockÚlockräÚ	remindersÚ
reminder_keys©r®rprprqrÍgs

z_WrapNumbers.__init__cCsX||jvsJ‚||jvsJ‚||jvsJ‚||j|<t t¡|j|<t t¡|j|<dSrÜ)rär#r$r«ÚdefaultdictÚintÚset)r®Ú
input_dictrƒrprprqÚ	_add_dictms
z_WrapNumbers._add_dictcCs\|j|}t| ¡ƒt| ¡ƒ}|D]}|j||D]}|j||=q|j||=qdS)z†In case the number of keys changed between calls (e.g. a
        disk disappears) this removes the entry from self.reminders.
        N)rär(Úkeysr$r#)r®r)rƒÚold_dictZ	gone_keysZgone_keyÚremkeyrprprqÚ_remove_dead_remindersus
ýz#_WrapNumbers._remove_dead_remindersc
	Cs||jvr
| ||¡|S| ||¡|j|}i}| ¡D]\}||}z||}Wn
ty7|||<Yqwg}tt|ƒƒD]3}	||	}
||	}||	f}|
|krg|j|||7<|j|| 	|¡| 
|
|j||¡q@t|ƒ||<q||j|<|S)zkCache dict and sum numbers which overflow and wrap.
        Return an updated copy of `input_dict`
        N)rär*r.r+rßÚrangeÚlenr#r$ÚaddÚappendÚtuple)
r®r)rƒr,Znew_dictrâZinput_tupleZ	old_tupleÚbitsÚiZinput_valueÚ	old_valuer-rprprqÚrun€s4

ü
z_WrapNumbers.runNcCsŽ|j:|dur|j ¡|j ¡|j ¡n|j |d¡|j |d¡|j |d¡WdƒdSWdƒdS1s@wYdS)z>Clear the internal cache, optionally only for function 'name'.N)r"rärçr#r$Úpop)r®rƒrprprqrè§s

ø"üz_WrapNumbers.cache_clearcCs:|j|j|j|jfWdƒS1swYdS)z5Return internal cache dicts as a tuple of 3 elements.N)r"rär#r$r%rprprqÚ
cache_info³s$ÿz_WrapNumbers.cache_inforÜ)
rmrnrorÈrÍr*r.r7rèr9rprprprqrbs
'rcCs6tjt ||¡WdƒS1swYdS)zÅGiven an `input_dict` and a function `name`, adjust the numbers
    which "wrap" (restart from zero) across different calls by adding
    "old value" to "new value" and return an updated dict.
    N)Ú_wnr"r7)r)rƒrprprqrS¹s
$ÿrSi€cCst|dtdS)NÚrb©Ú	buffering)ÚopenÚFILE_READ_BUFFER_SIZE)ÚfnamerprprqrUÖórUcCs\ts	t|dtdSt|dtttd}zt|_W|Sty"Y|Sty-| ¡‚w)z¨On Python 3 opens a file in text mode by using fs encoding and
    a proper en/decoding errors handler.
    On Python 2 this is just an alias for open(name, 'rt').
    Úrtr<)r=ÚencodingÚerrorsN)	ÚPY3r>r?r4r5Ú_CHUNK_SIZEríÚ	ExceptionÚclose)r@ZfobjrprprqrTÚsÿúüþrTc	Cs|tur||ƒ}| ¡WdƒS1swYdSz||ƒ
}| ¡WdƒWS1s3wYWdSttfyG|YSw)zÛRead entire file content and return it as a string. File is
    opened in text mode. If specified, `fallback` is the value
    returned in case of error, either if the file does not exist or
    it can't be read().
    N)Ú_DEFAULTÚreadÚIOErrorrö)r@ÚfallbackÚ_openÚfrprprqrVôs
$ÿ
(ÿÿrVcCst||tdS)z,Same as above but opens file in binary mode.)rLrMN)rVrU)r@rLrprprqrWsrWú%(value).1f%(symbol)scCsŠd}i}t|dd…ƒD]\}}d|dd>||<qt|dd…ƒD]}|||kr:t|ƒ||}|tƒSq#|t|d|dS)zŒUsed by various scripts. See:
    http://goo.gl/zeJZl

    >>> bytes2human(10000)
    '9.8K'
    >>> bytes2human(100001221)
    '95.4M'
    )	ÚBÚKÚMÚGÚTÚPÚEÚZÚYrkNé
r)Úsymbolr£)Ú	enumerateÚreversedrØÚlocalsÚdict)ÚnÚformatÚsymbolsÚprefixr5ÚsrZr£rprprqrX
s	þrXcCstjdjS)z+Return updated psutil.PROCFS_PATH constant.rªN)ÚsysÚmodulesZPROCFS_PATHrprprprqÚget_procfs_pathrérfcCs|jttdS)N)rCrD)Údecoder4r5©rcrprprqrg$rArgcCs|SrÜrprhrprprqrg'scCsXtjdkrdSzddl}| ¡sJ‚| ¡| d¡dksJ‚WdSty+YdSw)Nr_TrÚcolorsF)rôrƒÚcursesÚisattyZ	setuptermZtigetnumrG)Úfilerjrprprqr\0s
ýÿr\FcCsŠtƒs|Sg}tddddddddd	d
	}d|d<z||}Wnty/td
t| ¡ƒƒ‚w| |¡|r<| d¡dd |¡|fS)z*Return an highlighted version of 'string'.Z32Z91Z33Z93Z34Z35Z36Z37Z30)	ÚgreenÚredÚbrownÚyellowÚblueZvioletZ	lightblueZgreyZdarkgreyZ29Nz#invalid color %r; choose between %sÚ1z[%sm%sú;)r\r^rßrÚlistr+r2rÀ)rcÚcolorÚboldÚattrrirprprqr[?s$ÿ
ÿÿ

r[c	Cstƒst||ddStrtt|||ƒ|ddSddl}d}|jjj}|jjj}t	ddddd}||d<z||}Wnt
yNtd	|t| 
¡ƒfƒ‚w|rY|dkrY|d
7}|tjur`dnd}	|j|_||	ƒ}
||
|ƒzt||dW||
|ƒdS||
|ƒw)
z$Print a colorized version of string.©rlrNérjré)rmrnrorpz#invalid color %r; choose between %réiôÿÿÿiõÿÿÿ)r\Úprintrr[ÚctypesÚwindllZKernel32ÚGetStdHandleÚSetConsoleTextAttributer^rßrrtr+rdÚstderrÚc_ulongÚrestype)rcrurvrlr}Z
DEFAULT_COLORrr€riZ	handle_idÚhandlerprprqr]Rs6
ÿÿÿ
r]cCsrtr7ddl}| | ¡j¡\}}}}}t|tƒr)t|ttt	fƒr%d|}nd|}t
d|||ftjddSdS)z@If PSUTIL_DEBUG env var is set, print a debug message to stderr.rNzignoring %szignoring %rzpsutil-debug [%s:%s]> %srx)
rÚinspectÚgetframeinfoÚcurrentframeÚf_backÚ
isinstancerGrörKÚEnvironmentErrorr|rdr)r¾r…r@ÚlinenoÚ	func_nameÚlinesÚindexrprprqrZusÿ


ÿörZrÜ)rO)NF)’rÈÚ
__future__rrr«rr÷rêrôrþrõrdr rrrrrrÚImportErrorr	Úversion_inforrEÚboolÚgetenvrÚobjectrIÚ__all__rƒrrÚplatformÚ
startswithrrrr
rrrrZAIXr*r+r'r,r.r2r&r0r1r(r)r/r-r3rr!r rrr"rrrrrrr#r$r%ÚIntEnumrlÚglobalsÚupdateÚ__members__rurvrtÚgetfilesystemencodingr4r5ÚgetfilesystemencodeerrorsrírGrCrArBrDrHr?rErFr@r‘r•r™ršr7r<r=r>r9r:r;r8r6r¤rIrGr©rÊrÓrÕrÖrOrLrórKrNrPrMrQrRrYrJrrSr:rèr9r?rUrTrVrWrXrfrgÚstdoutr\r[r]rZrprprprqÚ<module>sdÿÿ


%
	

ÿÿÿÿÿ	

ø


þ
ÿ
!

 ?



W	

	

ÿ#