§
    ±Ûghú  ã                   óF  — d Z ddlZddlZddlZddlZddlZddlZddlZddlZddl	Z	ddl
Z
ddlZddlZddlZddlZddlZddlZddlZddlZddlZddlZddlZddlZddlZddlZddlZddlZddlZddlmZ ddlmZ ddlmZ 	 ddlZn# e $ r dZY nw xY wddl!Z!ddl!m"Z" ddl!m#Z# ddl!m$Z$ dd	l!m%Z% dd
l!m&Z& ddl!m'Z' ddl!m(Z( ddl!m)Z) ddl*m+Z+ ddl*m,Z, ddl*m-Z- ddl*m.Z. ddl*m/Z/ e'rddl0m1Z1 g d¢Z2dej3        v Z4de
j5        v pde
j5        v Z6e6Z7de
j5        v Z8de
j5        v Z9ej:        dk    Z; ej<        ¦   «         dk    Z=e-d„ ¦   «         Z>e$r e>¦   «         dk    Z? e>¦   «         dk    Z@ndZ?dZ@d ZAd!ZBd"ZCd#ZDe7reAd$z  ZAeDd$z  ZDeBd%z  ZBeCd$z  ZCe
jE        d&k    rd' e
jF        ¦   «         › d(�ZGnd) e
jF        ¦   «         › d(�ZGd*ZHd+ I                    d,d-¦  «        ZJ ejK        ¦   «          L                    ¦   «         d.v ZMe
jN         O                    e
jN         P                    e
jN         Q                    eR¦  «        d/d/¦  «        ¦  «        ZSe
j5         T                    d0e
jN         P                    eSd1¦  «        ¦  «        ZUe
jN         O                    e
jN         Q                    eR¦  «        ¦  «        ZV eWe!jX        d2¦  «        ZY eWe!d3¦  «        ZZ eWe!jX        d4¦  «        Z[ eWe!d5¦  «        Z\ eWe!jX        d6¦  «        Z] eWe!jX        d7¦  «        Z^e'oe( Z_ eWe!d8¦  «        Z` eWe!jX        d9¦  «        Za eWe!jX        d:¦  «        Zb eWe!jX        d;¦  «        Zc eWe!d<¦  «        Zd	 edo ee e!jf        ¦   «         ¦  «        Zgn# eh$ r dZgY nw xY w eWe!d=¦  «        Zi eWe!d>¦  «        Zj eWe!jX        d?¦  «        Zke$se"o e
jl        ¦   «         dk    Zmd@„ Zn en¦   «         \  ZoZp eqe
jr        dA¦  «        Zs ejt        esju        ¦  «         dB„  eve!¦  «        D ¦   «         Zw exedC ey¦   «         ¦  «        Zz e{¦   «         Z| e{¦   «         Z} G dD„ dEej~        ¦  «        ZdF„ Z€e€d„dG„¦   «         Z�e€dH„ ¦   «         Z‚dI„ Zƒe€dJ„ ¦   «         Z„e€dK„ ¦   «         Z…ej†        eDfdL„Z‡d…dM„ZˆdN„ Z‰dO„ ZŠ G dP„ dQ¦  «        Z‹ e‹e!jŒ        deDdR¬S¦  «        dT„ ¦   «         Z� e‹eŽe�fdeDdR¬S¦  «        d†dV„¦   «         Z� e‹e�deDdR¬S¦  «        dW„ ¦   «         Z‘dX„ Z’dY„ Z“ej”        dZ„ ¦   «         Z•d[„ Z–d„d\„Z—d‡d^„Z˜ G d_„ d`¦  «        Z™e€e™Z G da„ dbejš        ¦  «        Z›ejœ         �                    e4dc¬d¦  «         G de„ dfe›¦  «        ¦   «         Zždg„ ZŸdh„ Z di„ Z¡ G dj„ dk¦  «        Z¢ G dl„ dm¦  «        Z£eAfdn„Z¤d„do„Z¥d„dp„Z¦dˆdr„Z§eedfds„Z¨ej        fdt„Z©d‰dv„Zªdw„ Z«ej”        dx„ ¦   «         Z¬dy„ Z­dz„ Z®d{„ Z¯d|„ Z°d}„ Z±d~„ Z²d„ Z³e'rej”        dŠd€„¦   «         Z´nej”        dŠd�„¦   «         Z´ejt        d‚„ ¦   «         Zµe'r ej        ej†        dƒ„ ¦  «         dS dS )‹zTest utilities.é    N)ÚAF_INET)ÚAF_INET6)ÚSOCK_STREAM)ÚAIX)ÚLINUX)ÚMACOS)ÚNETBSD)ÚOPENBSD)ÚPOSIX)ÚSUNOS)ÚWINDOWS)Úbytes2human)Údebug)Úmemoize)Úprint_color)Úsupports_ipv6)Úwait_pid)KÚDEVNULLÚGLOBAL_TIMEOUTÚTOLERANCE_SYS_MEMÚ
NO_RETRIESÚPYPYÚ
PYTHON_EXEÚPYTHON_EXE_ENVÚROOT_DIRÚSCRIPTS_DIRÚTESTFN_PREFIXÚUNICODE_SUFFIXÚINVALID_UNICODE_SUFFIXÚ
CI_TESTINGÚVALID_PROC_STATUSESÚTOLERANCE_DISK_USAGEÚIS_64BITÚHAS_CPU_AFFINITYÚHAS_CPU_FREQÚHAS_ENVIRONÚHAS_PROC_IO_COUNTERSÚ
HAS_IONICEÚHAS_MEMORY_MAPSÚHAS_PROC_CPU_NUMÚ
HAS_RLIMITÚHAS_SENSORS_BATTERYÚHAS_BATTERYÚHAS_SENSORS_FANSÚHAS_SENSORS_TEMPERATURESÚHAS_NET_CONNECTIONS_UNIXÚMACOS_11PLUSÚMACOS_12PLUSÚCOVERAGEÚAARCH64ÚPYTEST_PARALLELÚpyrunÚ	terminateÚreap_childrenÚspawn_testprocÚspawn_zombieÚspawn_children_pairÚ
ThreadTaskÚunittestÚskip_on_access_deniedÚskip_on_not_implementedÚretry_on_failureÚTestMemoryLeakÚPsutilTestCaseÚprocess_namespaceÚsystem_namespaceÚprint_sysinfoÚis_win_secure_system_procÚfake_pytestÚchdirÚsafe_rmpathÚcreate_py_exeÚcreate_c_exeÚ
get_testfnÚ
get_winverÚkernel_versionÚ
call_untilÚwait_for_pidÚwait_for_fileÚcheck_net_addressÚfilter_proc_net_connectionsÚget_free_portÚbind_socketÚbind_unix_socketÚtcp_socketpairÚunix_socketpairÚcreate_socketsÚreload_moduleÚimport_module_by_pathÚwarnÚcopyload_shared_libÚis_namedtupleÚ__pypy__ÚGITHUB_ACTIONSÚCIBUILDWHEELÚCOVERAGE_RUNÚPYTEST_XDIST_WORKERl        Úaarch64c                  ó†  — t          j        ¦   «         d         } t          t          t          |                      d¦  «        d d…         ¦  «        ¦  «        }|dk    rdt          j        t          j	        dddgdd	id
¬¦  «        } t          t          t          |                      d¦  «        d d…         ¦  «        ¦  «        }|S )Nr   ú.é   )é
   é   z-sSú-cz-import platform; print(platform.mac_ver()[0])ÚSYSTEM_VERSION_COMPATÚ0T)ÚenvÚuniversal_newlines)
ÚplatformÚmac_verÚtupleÚmapÚintÚsplitÚ
subprocessÚcheck_outputÚsysÚ
executable)Úversion_strÚversions     úK/granary/edev/quantum/lib/python3.11/site-packages/psutil/tests/__init__.pyÚmacos_versionr|   z   s¼   € åÔ"Ñ$Ô$ QÔ'€KÝ•C�˜[×.Ò.¨sÑ3Ô3°B°Q°BÔ7Ñ8Ô8Ñ9Ô9€GØ�(ÒÐõ !Ô-å”ØØØ?ð	ð )¨#Ð.Ø#ð	
ñ 	
ô 	
ˆõ ��C ×!2Ò!2°3Ñ!7Ô!7¸¸¸Ô!;Ñ<Ô<Ñ=Ô=ˆØ€Nó    )rh   é   )é   r   Frh   i  P i    é   é   é   Újavaz$psutil-ú-z@psutil-u   -Æ’Å‘Å‘s   fÀ€Úutf8Úsurrogateescape>   úus-asciiÚasciiz..ÚPSUTIL_SCRIPTS_DIRÚscriptsÚcpu_affinityÚcpu_freqÚenvironÚ
getloadavgÚioniceÚmemory_mapsÚnet_io_countersÚcpu_numÚio_countersÚrlimitÚsensors_batteryÚsensors_fansÚsensors_temperaturesÚthreadsc            	      ó.  — d„ } t           j                             ¦   «         }t          t          dd ¦  «        }t
          r%t          j        dk    r|�t          j        |d<   ||fS t          rt          j        |fS t          rÁ | t          j        ¦  «        p– | t           j
                             t          j        ¦  «        ¦  «        pd | t          j         dj        t          j        d d…         Ž ¦  «        ¦  «        p- | t          j        ¦   «                              ¦   «         ¦  «        }|st%          d¦  «        ‚||fS t           j
                             t          j        ¦  «        }t           j
                             |¦  «        s
J |¦   «         ‚||fS )Nc                 óŽ   — 	 t          j        | dgt           j        t           j        ¬¦  «         | S # t           j        $ r Y d S w xY w)Nz-V)ÚstdoutÚstderr)ru   Ú
check_callÚPIPEÚCalledProcessError)Úexes    r{   Úattemptz_get_py_exe.<locals>.attemptÙ   s^   € ð	ÝÔ!Ø�d�¥J¤O½J¼Oðñ ô ð ð ˆJøõ Ô,ð 	ð 	ð 	Ø�4�4ð	øøøs   ‚-1 ±AÁAÚ_base_executable)r�   é   Ú__PYVENV_LAUNCHER__zpython{}.{}rg   z"can't find python exe real abspath)Úosr�   ÚcopyÚgetattrrw   r   Úversion_inforx   r`   r   ÚpathÚrealpathÚshutilÚwhichÚformatÚpsutilÚProcessr    Ú
ValueErrorÚexists)r¡   rm   Úbaser    s       r{   Ú_get_py_exer³   Ø   s…  € ðð ð õ Œ*�/Š/Ñ
Ô
€Cõ •3Ð*¨DÑ1Ô1€DÝð •3Ô# vÒ-Ð-°$Ð2Bõ &)¤^ˆÐ!Ñ"Ø�SˆyÐÝ	ð ÝŒ~˜sÐ"Ð"Ý	ð àˆG•C”NÑ#Ô#ð /Øˆw•r”w×'Ò'­¬Ñ7Ô7Ñ8Ô8ð/àˆwÝ”Ð1˜]Ô1µ3Ô3CÀBÀQÀBÔ3GÐHÑIÔIñô ð/ð
 ˆw•v”~Ñ'Ô'×+Ò+Ñ-Ô-Ñ.Ô.ð 	ð ð 	CÝÐAÑBÔBÐBØ�CˆxˆåŒg×Ò�sœ~Ñ.Ô.ˆÝŒw�~Š~˜cÑ"Ô"Ð'Ð' CÑ'Ô'Ð'Ø�Cˆxˆr}   zr+c                 ób   — g | ],}|                      d ¦  «        ¯t          t          |¦  «        ‘Œ-S )ÚSTATUS_©Ú
startswithr§   r®   ©Ú.0Úxs     r{   ú
<listcomp>r»     sC   € ð ð ð Ø¨q¯|ª|¸IÑ/FÔ/FðÝ�F�AÑÔðð ð r}   ÚAF_UNIXc                   óF   ‡ — e Zd ZdZˆ fd„Zd„ Zd„ Zd„ Zd„ Zd„ Z	d„ Z
ˆ xZS )	r<   z6A thread task which does nothing expect staying alive.c                 ó”   •— t          ¦   «                              ¦   «          d| _        d| _        t	          j        ¦   «         | _        d S )NFçü©ñÒMbP?)ÚsuperÚ__init__Ú_runningÚ	_intervalÚ	threadingÚEventÚ_flag)ÚselfÚ	__class__s    €r{   rÁ   zThreadTask.__init__  s:   ø€ Ý‰Œ×ÒÑÔÐØˆŒØˆŒÝ”_Ñ&Ô&ˆŒ
ˆ
ˆ
r}   c                 óX   — | j         j        }d|› d| j        › dt          | ¦  «        d›d�S )Nú<z	 running=z at z#xú>)rÈ   Ú__name__rÂ   Úid©rÇ   Únames     r{   Ú__repr__zThreadTask.__repr__  s8   € ØŒ~Ô&ˆØC�4ÐCÐC $¤-ÐCÐCµR¸±X´XÐCÐCÐCÐCÐCr}   c                 ó.   — |                       ¦   «          | S ©N)Ústart©rÇ   s    r{   Ú	__enter__zThreadTask.__enter__#  s   € Ø�
Š
‰ŒˆØˆr}   c                 ó.   — |                       ¦   «          d S rÒ   )Ústop)rÇ   ÚargsÚkwargss      r{   Ú__exit__zThreadTask.__exit__'  s   € Ø�	Š	‰Œˆˆˆr}   c                 ó¢   — | j         rt          d¦  «        ‚t          j                             | ¦  «         | j                             ¦   «          dS )zStart thread and keep it running until an explicit
        stop() request. Polls for shutdown every 'timeout' seconds.
        zalready startedN)rÂ   r°   rÄ   ÚThreadrÓ   rÆ   ÚwaitrÔ   s    r{   rÓ   zThreadTask.start*  sL   € ð Œ=ð 	0ÝÐ.Ñ/Ô/Ð/ÝÔ×Ò˜tÑ$Ô$Ð$ØŒ
�ŠÑÔÐÐÐr}   c                 ó˜   — d| _         | j                             ¦   «          | j         r"t          j        | j        ¦  «         | j         ° d S d S )NT)rÂ   rÆ   ÚsetÚtimeÚsleeprÃ   rÔ   s    r{   ÚrunzThreadTask.run3  sW   € ØˆŒØŒ
�ŠÑÔÐØŒmð 	'ÝŒJ�t”~Ñ&Ô&Ð&ð Œmð 	'ð 	'ð 	'ð 	'ð 	'r}   c                 óh   — | j         st          d¦  «        ‚d| _         |                      ¦   «          dS )z8Stop thread execution and and waits until it is stopped.zalready stoppedFN)rÂ   r°   ÚjoinrÔ   s    r{   r×   zThreadTask.stop9  s3   € àŒ}ð 	0ÝÐ.Ñ/Ô/Ð/ØˆŒØ�	Š	‰Œˆˆˆr}   )rÌ   Ú
__module__Ú__qualname__Ú__doc__rÁ   rÐ   rÕ   rÚ   rÓ   râ   r×   Ú__classcell__)rÈ   s   @r{   r<   r<     s›   ø€ € € € € Ø@Ð@ð'ð 'ð 'ð 'ð 'ðDð Dð Dðð ð ðð ð ðð ð ð'ð 'ð 'ðð ð ð ð ð ð r}   r<   c                 óF   ‡ — t          j        ‰ ¦  «        ˆ fd„¦   «         }|S )Nc                  óP   •— 	  ‰| i |¤ŽS # t           $ r t          ¦   «          ‚ w xY wrÒ   )Ú	Exceptionr8   )rØ   rÙ   Úfuns     €r{   Úwrapperz&_reap_children_on_err.<locals>.wrapperG  sD   ø€ ð	Ø�3˜Ð' Ð'Ð'Ð'øÝð 	ð 	ð 	Ý‰OŒOˆOØð	øøøs   ƒ ‹%©Ú	functoolsÚwraps)rì   rí   s   ` r{   Ú_reap_children_on_errrñ   F  s8   ø€ Ý„_�SÑÔðð ð ð ñ Ôðð €Nr}   c                 óþ  — |                      dt          ¦  «         |                      dt          ¦  «         |                      dt          j        ¦   «         ¦  «         |                      dt          ¦  «         t
          rd}|                      d|¦  «         | €£t          t          j        ¦   «         ¬¦  «        }	 t          |¦  «         d	|› d
�}t          d|g} t          j
        | fi |¤Ž}t                               |¦  «         t          |dd¬¦  «         t          |¦  «         nT# t          |¦  «         w xY wt          j
        | fi |¤Ž}t                               |¦  «         t          |j        ¦  «         |S )a  Create a python subprocess which does nothing for some secs and
    return it as a subprocess.Popen instance.
    If "cmd" is specified that is used instead of python.
    By default stdin and stdout are redirected to /dev/null.
    It also attempts to make sure the process is in a reasonably
    initialized state.
    The process is registered for cleanup on reap_children().
    Ústdinr›   Úcwdrm   é   ÚcreationflagsN©Údirzimport time;open(r'z6', 'w').close();[time.sleep(0.1) for x in range(100)];rj   T©ÚdeleteÚempty)Ú
setdefaultr   r¥   Úgetcwdr   r   rL   rI   r   ru   ÚPopenÚ_subprocesses_startedÚaddrQ   rP   Úpid)ÚcmdÚkwdsÚCREATE_NO_WINDOWÚtestfnÚpylineÚsprocs         r{   r9   r9   R  s~  € ð 	‡O‚O�G�WÑ%Ô%Ð%Ø‡O‚O�H�gÑ&Ô&Ð&Ø‡O‚O�E�2œ9™;œ;Ñ'Ô'Ð'Ø‡O‚O�E�>Ñ*Ô*Ð*Ýð ;ð %ÐØ�Š˜Ð)9Ñ:Ô:Ð:Ø
€{Ý¥¤	¡¤Ð,Ñ,Ô,ˆð	 Ý˜ÑÔÐð9Ø ð9ð 9ð 9ð õ
 ˜t VÐ,ˆCÝÔ$ SÐ1Ð1¨DÐ1Ð1ˆEÝ!×%Ò% eÑ,Ô,Ð,Ý˜&¨°TÐ:Ñ:Ô:Ð:å˜ÑÔÐÐø�K˜ÑÔÐÐøøøåÔ  Ð-Ð-¨Ð-Ð-ˆÝ×!Ò! %Ñ(Ô(Ð(Ý�U”YÑÔÐØ€Ls   Â<AD) Ä)D:c                  ó‚  — d} t          t          j        ¦   «         ¬¦  «        }	 t          j        dt          j                             |¦  «        › dt          › d�¦  «        }t          rt          |d¬¦  «        \  }} nt          |¦  «        \  }} t          j        |j        ¦  «        }t          t          |dd	¬
¦  «        ¦  «        }t                               |¦  «         t          j        |¦  «        }||ft#          |¦  «         | �t#          | ¦  «         S S # t#          |¦  «         | �t#          | ¦  «         w w xY w)a  Create a subprocess which creates another one as in:
    A (us) -> B (child) -> C (grandchild).
    Return a (child, grandchild) tuple.
    The 2 processes are fully initialized and will live for 60 secs
    and are registered for cleanup on reap_children().
    Nr÷   zl            import subprocess, os, sys, time
            s = "import os, time;"
            s += "f = open('z¸', 'w');"
            s += "f.write(str(os.getpid()));"
            s += "f.close();"
            s += "[time.sleep(0.1) for x in range(100 * 6)];"
            p = subprocess.Popen([r'z.', '-c', s])
            p.wait()
            r   )rö   TFrù   )rL   r¥   rý   ÚtextwrapÚdedentr©   Úbasenamer   r   r6   r®   r¯   r  rs   rQ   Ú_pids_startedr   rI   )Útfiler  ÚsÚsubpÚchildÚgrandchild_pidÚ
grandchilds          r{   r;   r;   |  sP  € ð €EÝ�BœI™KœKÐ(Ñ(Ô(€FðÝŒOð 	õ  œW×-Ò-¨fÑ5Ô5ð	ð 	õ &0ð	ð 	ð 	ñ 	ô 	ˆõ ð 	#Ý °Ð3Ñ3Ô3‰KˆD�%�%å ™(œ(‰KˆD�%Ý”˜tœxÑ(Ô(ˆÝ�]¨6¸$ÀeÐLÑLÔLÑMÔMˆÝ×Ò˜.Ñ)Ô)Ð)Ý”^ NÑ3Ô3ˆ
Ø�zÐ"å�FÑÔÐØÐÝ˜ÑÔÐÐð øõ 	�FÑÔÐØÐÝ˜ÑÔÐÐð øøøs   ¥CD Ä#D>c                  óz  ‡— t           j        sJ ‚t          ¦   «         } t          j        d| › d�¦  «        }d}t          | ¦  «        }	 |                     t          ¦  «         t          |¦  «        \  }}| 	                    ¦   «         \  }}	 t          j
        |                     ¦   «         gg g t          ¦  «         t          |                     d¦  «        ¦  «        }t                               |¦  «         t          j        |¦  «        Št#          ˆfd„¦  «         |‰f|                     ¦   «          |                     ¦   «          t'          | ¦  «         |�t'          |¦  «         S S # |                     ¦   «          w xY w# |                     ¦   «          t'          | ¦  «         |�t'          |¦  «         w w xY w)z±Create a zombie process and return a (parent, zombie) process tuple.
    In order to kill the zombie parent must be terminate()d first, then
    zombie must be wait()ed on.
    a          import os, sys, time, socket, contextlib
        child_pid = os.fork()
        if child_pid > 0:
            time.sleep(3000)
        else:
            # this is the zombie process
            with socket.socket(socket.AF_UNIX) as s:
                s.connect('za')
                pid = bytes(str(os.getpid()), 'ascii')
                s.sendall(pid)
        Né   c                  óH   •— ‰                       ¦   «         t          j        k    S rÒ   )Ústatusr®   ÚSTATUS_ZOMBIE)Úzombies   €r{   ú<lambda>zspawn_zombie.<locals>.<lambda>Á  s   ø€ ˜vŸ}š}™œµ&Ô2FÒF€ r}   )r®   r   rL   r	  r
  rV   Ú
settimeoutr   r6   ÚacceptÚselectÚfilenors   Úrecvr  r   r¯   rO   ÚcloserI   )	Ú	unix_fileÚsrcr  ÚsockÚparentÚconnÚ_Úzpidr  s	           @r{   r:   r:   £  s¤  ø€ õ
 Œ<ÐÐÐÝ‘”€IÝ
Œ/ð ð &ðð ð ñ ô €Cð €EÝ˜IÑ&Ô&€DðØ�Š�Ñ'Ô'Ð'Ý˜c™
œ
‰ˆ�Ø—+’+‘-”-‰ˆˆað	ÝŒM˜4Ÿ;š;™=œ=˜/¨2¨rµ>ÑBÔBÐBÝ�t—y’y ‘”Ñ'Ô'ˆDÝ×Ò˜dÑ#Ô#Ð#Ý”^ DÑ)Ô)ˆFÝÐFÐFÐFÐFÑGÔGÐGØ˜FÐ#à�JŠJ‰LŒLˆLà�
Š
‰ŒˆÝ�IÑÔÐØÐÝ˜ÑÔÐÐð øð	 �JŠJ‰LŒLˆLˆLøøøøà�
Š
‰ŒˆÝ�IÑÔÐØÐÝ˜ÑÔÐÐð øøøs&   ÁAF ÂBE* Ä F Å*F Æ F Æ7F:c                 ó�  — |                      dd¦  «         |                      dd¦  «         t          ¦   «         }	 t          |d¦  «        5 }|                     | ¦  «         ddd¦  «         n# 1 swxY w Y   t	          t
          |j        gfi |¤Ž}t          |j        ¦  «         ||fS # t          $ r t          |¦  «         ‚ w xY w)z�Run python 'src' code string in a separate interpreter.
    Returns a subprocess.Popen instance and the test file where the source
    code was written.
    r›   Nrœ   Úw)rü   rL   ÚopenÚwriter9   r   rÏ   rP   r  rë   rI   )r!  r  ÚsrcfileÚfr  s        r{   r6   r6   Ì  s  € ð 	‡O‚O�H˜dÑ#Ô#Ð#Ø‡O‚O�H˜dÑ#Ô#Ð#Ý‰lŒl€GðÝ�'˜3ÑÔð 	 1Ø�GŠG�C‰LŒLˆLð	ð 	ð 	ñ 	ô 	ð 	ð 	ð 	ð 	ð 	ð 	øøøð 	ð 	ð 	ð 	å�z¨1¬6Ð2Ð;Ð;°dÐ;Ð;ˆÝ�T”XÑÔÐØ�gˆÐøÝð ð ð Ý�GÑÔÐØðøøøs/   ¼B* ÁA.Á"B* Á.A2Á2B* Á5A2Á63B* Â*Cc                 ót  — t           rdnd}|                     dt          j        ¦  «         |                     dt          j        ¦  «         |                     dd¦  «         |                     d|¦  «         t	          | t
          ¦  «        rt          j        | ¦  «        } t          j        | fi |¤Ž}t           
                    |¦  «         |                     t          ¬¦  «        \  }}|j        dk    rt          ||z   ¦  «        ‚|rt          |¦  «         |                     d	¦  «        r
|d
d…         }|S )zURun cmd in a subprocess and return its output.
    raises RuntimeError on error.
    rõ   r   r›   rœ   rn   Trö   ©Útimeoutú
Néÿÿÿÿ)r   rü   ru   rž   Ú
isinstanceÚstrÚshlexrt   rþ   rÿ   r   Úcommunicater   Ú
returncodeÚRuntimeErrorr\   Úendswith)r  r  ÚflagsÚpr›   rœ   s         r{   Úshr;  à  s#  € õ !Ð'ˆIˆI a€EØ‡O‚O�H�jœoÑ.Ô.Ð.Ø‡O‚O�H�jœoÑ.Ô.Ð.Ø‡O‚OÐ(¨$Ñ/Ô/Ð/Ø‡O‚O�O UÑ+Ô+Ð+Ý�#•sÑÔð ÝŒk˜#ÑÔˆÝÔ˜Ð%Ð% Ð%Ð%€AÝ×Ò˜aÑ Ô Ð Ø—]’]­>�]Ñ:Ô:�N€FˆFØ„|�qÒÐÝ˜6 F™?Ñ+Ô+Ð+Øð ÝˆV‰ŒˆØ‡‚�tÑÔð Ø˜˜˜”ˆØ€Mr}   c                 óÐ  ‡‡‡	‡
— d„ Š
d„ Šˆˆˆ
fd„}ˆˆˆ
fd„Š	ˆ	fd„}d„ }| }	 t          |t          ¦  «        ry |||¦  «        t          |t          j        t          j        f¦  «        r ||¦  «         t          |t          ¦  «        r|n|j        }t	          j        |¦  «        r
J |¦   «         ‚S t          |t          j        t          j        f¦  «        ry ‰	||¦  «        t          |t          j        t          j        f¦  «        r ||¦  «         t          |t          ¦  «        r|n|j        }t	          j        |¦  «        r
J |¦   «         ‚S t          |t          j        ¦  «        ry |||¦  «        t          |t          j        t          j        f¦  «        r ||¦  «         t          |t          ¦  «        r|n|j        }t	          j        |¦  «        r
J |¦   «         ‚S t          d|›�¦  «        ‚# t          |t          j        t          j        f¦  «        r ||¦  «         t          |t          ¦  «        r|n|j        }t	          j        |¦  «        r
J |¦   «         ‚w xY w)a˜  Terminate a process and wait() for it.
    Process can be a PID or an instance of psutil.Process(),
    subprocess.Popen() or psutil.Popen().
    If it's a subprocess.Popen() or psutil.Popen() instance also closes
    its stdin / stdout / stderr fds.
    PID is wait()ed even if the process is already gone (kills zombies).
    Does nothing if the process does not exist.
    Return process exit status.
    c                 óü   — |                       |¦  «         t          r]t          | t          j        ¦  «        rE	 t          j        | j        ¦  «                              |¦  «        S # t
          j        $ r Y d S w xY wd S d S rÒ   )	rÝ   r   r2  ru   rþ   r®   r¯   r  ÚNoSuchProcess)Úprocr/  s     r{   rÝ   zterminate.<locals>.wait  sŽ   € Ø�	Š	�'ÑÔÐÝð 	•z $­
Ô(8Ñ9Ô9ð 	ðÝ”~ d¤hÑ/Ô/×4Ò4°WÑ=Ô=Ð=øÝÔ'ð ð ð Ø��ðøøøð		ð 	ð 	ð 	s   ¸+A$ Á$A7Á6A7c                 óÐ   — t           rt          rt          j        }t          r/|t          j        k    r|                      t          j        ¦  «         |                      |¦  «         d S rÒ   )r   r`   ÚsignalÚSIGKILLr   Úsend_signalÚSIGCONT)r?  Úsigs     r{   Úsendsigzterminate.<locals>.sendsig  s^   € åð 	!•^ð 	!Ý”.ˆCõ ð 	-�S�FœNÒ*Ð*Ø×Ò�Vœ^Ñ,Ô,Ð,Ø×Ò˜ÑÔÐÐÐr}   c                 óš   •— 	  ‰| ‰¦  «         n1# t           $ r Y n%t          $ r}t          r|j        dk    r	 ‚ d }~ww xY w ‰| |¦  «        S )Né   )ÚProcessLookupErrorÚOSErrorr   Úwinerror)r?  r/  ÚerrrF  rE  rÝ   s      €€€r{   Úterm_subprocess_procz'terminate.<locals>.term_subprocess_proc  s�   ø€ ð	ØˆG�D˜#ÑÔÐÐøÝ!ð 	ð 	ð 	ØˆDÝð 	ð 	ð 	Ýð ˜3œ<¨1Ò,Ð,ØØøøøøð	øøøð ˆt�D˜'Ñ"Ô"Ð"s   ƒ �
>œ	>¥9¹>c                 ób   •— 	  ‰| ‰¦  «         n# t           j        $ r Y nw xY w ‰| |¦  «        S rÒ   )r®   r>  )r?  r/  rF  rE  rÝ   s     €€€r{   Úterm_psutil_procz#terminate.<locals>.term_psutil_proc"  sR   ø€ ð	ØˆG�D˜#ÑÔÐÐøÝÔ#ð 	ð 	ð 	ØˆDð	øøøàˆt�D˜'Ñ"Ô"Ð"s   ƒ �"¡"c                 ó¤   •— 	 t          j        | ¦  «        } ‰||¦  «        S # t           j        $ r t          rt	          | |¦  «        cY S Y d S w xY wrÒ   )r®   r¯   r>  r   r   )r  r/  r?  rO  s      €r{   Úterm_pidzterminate.<locals>.term_pid)  sy   ø€ ð	3Ý”> #Ñ&Ô&ˆDð $Ð# D¨'Ñ2Ô2Ð2øõ Ô#ð 	.ð 	.ð 	.åð .Ý  WÑ-Ô-Ð-Ð-Ð-ð.ð .ð .ð	.øøøs   ƒ# £&AÁAc                 óÊ   — | j         r| j                              ¦   «          | j        r| j                             ¦   «          | j        r| j                             ¦   «          d S d S rÒ   )r›   r  rœ   ró   )r?  s    r{   Úflush_popenzterminate.<locals>.flush_popen3  sl   € ØŒ;ð 	 ØŒK×ÒÑÔÐØŒ;ð 	 ØŒK×ÒÑÔÐàŒ:ð 	ØŒJ×ÒÑÔÐÐÐð	ð 	r}   zwrong type )	r2  rs   ru   rþ   r®   r  Ú
pid_existsr¯   Ú	TypeError)Úproc_or_pidrE  Úwait_timeoutrM  rQ  rS  r:  r  rF  rO  rÝ   s    `      @@@r{   r7   r7   ù  sÐ  øøøø€ ðð ð ðð ð ð	#ð 	#ð 	#ð 	#ð 	#ð 	#ð 	#ð#ð #ð #ð #ð #ð #ð #ð3ð 3ð 3ð 3ð 3ðð ð ð 	€Að/Ý�a�ÑÔð 	1Ø�8˜A˜|Ñ,Ô,õ �a�*Ô*­F¬LÐ9Ñ:Ô:ð 	ØˆK˜‰NŒNˆNÝ˜a¥Ñ%Ô%Ð0ˆaˆa¨1¬5ˆÝÔ$ SÑ)Ô)Ð.Ð.¨3Ñ.Ô.Ð.Ð.õ ˜�FœN­F¬LÐ9Ñ:Ô:ð 	1Ø#Ð# A |Ñ4Ô4õ �a�*Ô*­F¬LÐ9Ñ:Ô:ð 	ØˆK˜‰NŒNˆNÝ˜a¥Ñ%Ô%Ð0ˆaˆa¨1¬5ˆÝÔ$ SÑ)Ô)Ð.Ð.¨3Ñ.Ô.Ð.Ð.õ ˜�:Ô+Ñ,Ô,ð 	1Ø'Ð'¨¨<Ñ8Ô8õ �a�*Ô*­F¬LÐ9Ñ:Ô:ð 	ØˆK˜‰NŒNˆNÝ˜a¥Ñ%Ô%Ð0ˆaˆa¨1¬5ˆÝÔ$ SÑ)Ô)Ð.Ð.¨3Ñ.Ô.Ð.Ð.õ Ð/¨!Ð/Ð/Ñ0Ô0Ð0øå�a�*Ô*­F¬LÐ9Ñ:Ô:ð 	ØˆK˜‰NŒNˆNÝ˜a¥Ñ%Ô%Ð0ˆaˆa¨1¬5ˆÝÔ$ SÑ)Ô)Ð.Ð.¨3Ñ.Ô.Ð.Ð.Ð.Ð.Ð.s   ¤ G6 Â21G6 Å%G6 Ç$G6 Ç6A/I%c                 ó  — t          j        ¦   «                              | ¬¦  «        }t          r/t                               ¦   «         }t          |¦  «         t          °/t          r/t                               ¦   «         }t          |¦  «         t          °/|rg|D ]}t          |d¬¦  «         Œt          j        |t          ¬¦  «        \  }}|D ]2}t          d|›d�¦  «         t          |t          j        ¬¦  «         Œ1dS dS )a  Terminate and wait() any subprocess started by this test suite
    and any children currently running, ensuring that no processes stick
    around to hog resources.
    If recursive is True it also tries to terminate and wait()
    all grandchildren started by this process.
    ©Ú	recursiveN)rW  r.  zcouldn't terminate process z; attempting kill())rE  )r®   r¯   Úchildrenrÿ   Úpopr7   r  Ú
wait_procsr   r\   rA  rB  )rZ  r[  r  r  r:  r%  Úalives          r{   r8   r8   M  s  € õ Œ~ÑÔ×(Ò(°9Ð(Ñ=Ô=€Hõ  ð Ý$×(Ò(Ñ*Ô*ˆÝ�$‰Œˆõ  ð õ
 ð Ý×ÒÑ!Ô!ˆÝ�#‰Œˆõ ð ð
 ð -Øð 	,ð 	,ˆAÝ�a dÐ+Ñ+Ô+Ð+Ð+ÝÔ$ Xµ~ÐFÑFÔF‰ˆˆ5Øð 	-ð 	-ˆAÝÐG¨qÐGÐGÐGÑHÔHÐHÝ�a�Vœ^Ð,Ñ,Ô,Ð,Ð,ð-ð -ð	-ð 	-r}   c                  óÜ  — t           st          d¦  «        ‚d} t          j        ¦   «         d         }|D ]"}|                     ¦   «         s|dk    r| |z  } Œ" | st          d|›�¦  «        ‚d}d}|                      d¦  «        }t          |d         ¦  «        }t          |¦  «        dk    rt          |d         ¦  «        }t          |¦  «        dk    rt          |d         ¦  «        }|||fS )	z"Return a tuple such as (2, 6, 36).z	not POSIXÚ rg   rf   zcan't parse r   é   r�   )	r   ÚNotImplementedErrorr¥   ÚunameÚisdigitr°   rt   rs   Úlen)r  rc  ÚcÚminorÚmicroÚnumsÚmajors          r{   rN   rN   r  sñ   € åð /Ý! +Ñ.Ô.Ð.Ø
€AÝŒH‰JŒJ�qŒM€EØð ð ˆØ�9Š9‰;Œ;ð 	˜!˜sš(˜(Ø�‰FˆAˆAàØð 3ÝÐ1¨Ð1Ð1Ñ2Ô2Ð2Ø€EØ€EØ�7Š7�3‰<Œ<€DÝ��Q”‰LŒL€EÝ
ˆ4�y„y�A‚~€~Ý�D˜”G‘”ˆÝ
ˆ4�y„y�A‚~€~Ý�D˜”G‘”ˆØ�5˜%Ð Ð r}   c                  óˆ   — t           st          d¦  «        ‚t          j        ¦   «         } | j        pd}| d         | d         |fS )Nznot WINDOWSr   ra  )r   rb  rw   ÚgetwindowsversionÚservice_pack_major)ÚwvÚsps     r{   rM   rM   Š  sH   € Ýð 1Ý! -Ñ0Ô0Ð0Ý	Ô	Ñ	 Ô	 €BØ	Ô	Ð	# !€BØˆqŒE�2�a”5˜"ÐÐr}   c                   ó6   — e Zd ZdZeddddfd„Zd„ Zd„ Zd„ ZdS )ÚretryzA retry decorator.Nr¿   c                 ór   — |r|rt          d¦  «        ‚|| _        || _        || _        || _        || _        d S )Nz/timeout and retries args are mutually exclusive)r°   Ú	exceptionr/  ÚretriesÚintervalÚlogfun)rÇ   rs  r/  rt  ru  rv  s         r{   rÁ   zretry.__init__š  sK   € ð ð 	P�wð 	PÝÐNÑOÔOÐOØ"ˆŒØˆŒØˆŒØ ˆŒØˆŒˆˆr}   c              #   ó
  K  — | j         rQt          j        ¦   «         | j         z   }t          j        ¦   «         |k     rd V — t          j        ¦   «         |k     °d S d S | j        rt          | j        ¦  «        D ]}d V — Œd S 	 d V — ŒrÒ   )r/  rà   rt  Úrange)rÇ   Ústop_atr%  s      r{   Ú__iter__zretry.__iter__ª  s¦   è è € ØŒ<ð 		Ý”i‘k”k D¤LÑ0ˆGÝ”)‘+”+ Ò'Ð'Ø���õ ”)‘+”+ Ò'Ð'Ð'Ð'Ð'Ð'àŒ\ð 	Ý˜4œ<Ñ(Ô(ð ð �Ø����ðð ðØ���ðr}   c                 óJ   — | j         �t          j        | j         ¦  «         d S d S rÒ   )ru  rà   rá   rÔ   s    r{   rá   zretry.sleep¶  s*   € ØŒ=Ð$ÝŒJ�t”}Ñ%Ô%Ð%Ð%Ð%ð %Ð$r}   c                 óX   ‡ ‡— t          j        ‰¦  «        ˆˆ fd„¦   «         }‰ |_        |S )Nc                  ó¼   •— d }‰D ]U}	  ‰| i |¤Žc S # ‰j         $ r<}|}‰j        �‰                     |¦  «         ‰                     ¦   «          Y d }~ŒNd }~ww xY w|‚rÒ   )rs  rv  rá   )rØ   rÙ   Úexcr%  rì   rÇ   s       €€r{   rí   zretry.__call__.<locals>.wrapper»  s–   ø€ àˆCØð ð �ðØ˜3 Ð/¨Ð/Ð/Ð/Ð/Ð/øØ”~ð ð ð Ø�CØ”{Ð.ØŸš CÑ(Ô(Ð(Ø—J’J‘L”L�LØ�H�H�H�Høøøøðøøøð ˆIs   ‰“
A�2AÁA)rï   rð   Ú	decorator)rÇ   rì   rí   s   `` r{   Ú__call__zretry.__call__º  sF   øø€ Ý	Œ˜Ñ	Ô	ð	ð 	ð 	ð 	ð 	ñ 
Ô	ð	ð  !ˆÔØˆr}   )	rÌ   rå   ræ   rç   rë   rÁ   rz  rá   r€  © r}   r{   rq  rq  —  sl   € € € € € ØÐð ØØØØðð ð ð ð 
ð 
ð 
ð&ð &ð &ðð ð ð ð r}   rq  r¿   )rs  rv  r/  ru  c                 ó€   — | t          j        ¦   «         vrt          j        | ¦  «        ‚t          j        | ¦  «         dS )z„Wait for pid to show up in the process list then return.
    Used in the test suite to give time the sub process to initialize.
    N)r®   Úpidsr>  r¯   ©r  s    r{   rP   rP   Ð  s<   € ð •&”+‘-”-ÐÐÝÔ" 3Ñ'Ô'Ð'Ý
„N�3ÑÔÐÐÐr}   Tc                 ó¬   — t          | d¦  «        5 }|                     ¦   «         }ddd¦  «         n# 1 swxY w Y   |s|sJ ‚|rt          | ¦  «         |S )z8Wait for a file to be written on disk with some content.ÚrbN)r)  ÚreadrI   )Úfnamerú   rû   r,  Údatas        r{   rQ   rQ   ß  sŸ   € õ 
ˆe�TÑ	Ô	ð ˜aØ�vŠv‰xŒxˆðð ð ñ ô ð ð ð ð ð ð øøøð ð ð ð àð ØˆˆˆØð Ý�EÑÔÐØ€Ks   ‘2²6¹6c                 ó"   —  | ¦   «         }|sJ ‚|S )z1Keep calling function until it evaluates to True.r�  )rì   Úrets     r{   rO   rO   ð  s   € ð ˆ#‰%Œ%€CØ€J€J€JØ€Jr}   c                 óD  — d„ }	 t          j        | ¦  «        }t          j        |j        ¦  «        r t	          j        t          j        | ¦  «        }nt	          j        t           j        | ¦  «        }t          r |¦   «          dS  ||¦  «         dS # t          $ r Y dS w xY w)z?Convenience function for removing temporary test files or dirs.c                 óB  — t          j         ¦   «         t          z   }t          j         ¦   «         |k     rl	  | ¦   «         S # t          $ r Y n*t          $ r}|}t	          d|› �¦  «         Y d }~nd }~ww xY wt          j        d¦  «         t          j         ¦   «         |k     °l|‚)Nz	ignoring g{®Gáz„?)rà   r   ÚFileNotFoundErrorrJ  r\   rá   )rì   ry  r%  rL  s       r{   Ú	retry_funzsafe_rmpath.<locals>.retry_fun  sÂ   € õ
 ”)‘+”+¥Ñ.ˆÝŒi‰kŒk˜GÒ#Ð#ð(Ø�s‘u”u�øÝ$ð ð ð Ø�Ýð (ð (ð (Ø�ÝÐ& Ð&Ð&Ñ'Ô'Ð'Ð'Ð'Ð'Ð'Ð'øøøøð(øøøõ ŒJ�tÑÔÐõ Œi‰kŒk˜GÒ#Ð#ð ˆ	s   ´	> ¾
A1Á
	A1ÁA,Á,A1N)r¥   ÚstatÚS_ISDIRÚst_moderï   Úpartialr«   ÚrmtreeÚremover   rŽ  )r©   r�  Ústrì   s       r{   rI   rI     s«   € ðð ð ð"ÝŒW�T‰]Œ]ˆÝŒ<˜œ
Ñ#Ô#ð 	5ÝÔ#¥F¤M°4Ñ8Ô8ˆCˆCåÔ#¥B¤I¨tÑ4Ô4ˆCÝð 	ØˆC‰EŒEˆEˆEˆEàˆI�c‰NŒNˆNˆNˆNøÝð ð ð Øˆˆðøøøs   …A=B ÂB Â
BÂBc                 óR   — 	 t          j        | ¦  «         dS # t          $ r Y dS w xY w)z.Convenience function for creating a directory.N)r¥   ÚmkdirÚFileExistsErrorr÷   s    r{   Ú
safe_mkdirrš  $  s:   € ðÝ
Œ�‰ŒˆˆˆøÝð ð ð Øˆˆðøøøs   ‚ ˜
&¥&c              #   ó¼   K  — t          j        ¦   «         }	 t          j        | ¦  «         dV — t          j        |¦  «         dS # t          j        |¦  «         w xY w)z@Context manager which temporarily changes the current directory.N)r¥   rý   rH   )ÚdirnameÚcurdirs     r{   rH   rH   ,  s]   è è € õ ŒY‰[Œ[€FðÝ
Œ�ÑÔÐØˆˆˆå
Œ�ÑÔÐÐÐø�Œ�ÑÔÐÐøøøs   —A ÁAc                 óD  — t           j                             | ¦  «        r
J | ¦   «         ‚t          j        t
          | ¦  «         t          j        t          | ¦  «         t          r;t          j
        | ¦  «        }t          j        | |j        t          j        z  ¦  «         | S )z6Create a Python executable file in the given location.)r¥   r©   r±   ÚatexitÚregisterrI   r«   Úcopyfiler   r   r�  Úchmodr’  ÚS_IEXEC)r©   r–  s     r{   rJ   rJ   7  s}   € åŒw�~Š~˜dÑ#Ô#Ð)Ð) TÑ)Ô)Ð)Ý
„O•K Ñ&Ô&Ð&Ý
„O•J Ñ%Ô%Ð%Ýð 2ÝŒW�T‰]Œ]ˆÝ
Œ��r”z¥D¤LÑ0Ñ1Ô1Ð1Ø€Kr}   c                 óv  — t           j                             | ¦  «        r
J | ¦   «         ‚t          j        d¦  «        st          j        d¦  «        ‚|€t          j        d¦  «        }nt          |t          ¦  «        s
J |¦   «         ‚t          j        t          | ¦  «         t          t          d¬¦  «        d¦  «        5 }|                     |¦  «         ddd¦  «         n# 1 swxY w Y   	 t#          j        d|j        d| g¦  «         t          |j        ¦  «         n# t          |j        ¦  «         w xY w| S )	z5Create a compiled C executable in the given location.Úgcczgcc is not installedNz‡
            #include <unistd.h>
            int main() {
                pause();
                return 1;
            }
            z.c©Úsuffixr(  z-o)r¥   r©   r±   r«   r¬   ÚpytestÚskipr	  r
  r2  r3  rŸ  r   rI   r)  rL   r*  ru   r�   rÏ   )r©   Úc_coder,  s      r{   rK   rK   B  sa  € åŒw�~Š~˜dÑ#Ô#Ð)Ð) TÑ)Ô)Ð)ÝŒ<˜ÑÔð 2ÝŒkÐ0Ñ1Ô1Ð1Ø€~Ý”ð "ñ ô ˆˆõ ˜&¥#Ñ&Ô&Ð.Ð.¨Ñ.Ô.Ð.å
„O•K Ñ&Ô&Ð&Ý	�j Ð%Ñ%Ô% sÑ	+Ô	+ð ¨qØ	�Š�‰Œˆðð ð ñ ô ð ð ð ð ð ð øøøð ð ð ð ðÝÔ˜u a¤f¨d°DÐ9Ñ:Ô:Ð:å�A”FÑÔÐÐø��A”FÑÔÐÐøøøØ€Ks   Ã C"Ã"C&Ã)C&Ã.D  Ä D6r`  c                 óò   — 	 t          j        t          | |¬¦  «        }t          j                             |¦  «        s;t          j                             |¦  «        }t          j        t          |¦  «         |S Œw)zîReturn an absolute pathname of a file or dir that did not
    exist at the time this call is made. Also schedule it for safe
    deletion at interpreter exit. It's technically racy but probably
    not really due to the time variant.
    T)Úprefixr§  rø   )
ÚtempfileÚmktempr   r¥   r©   r±   rª   rŸ  r   rI   )r§  rø   rÏ   r©   s       r{   rL   rL   \  sd   € ðÝŒ¥m¸FÈÐLÑLÔLˆÝŒw�~Š~˜dÑ#Ô#ð 	Ý”7×#Ò# DÑ)Ô)ˆDÝŒO�K¨Ñ.Ô.Ð.ØˆKðr}   c                   óŠ   — e Zd ZdZed„ ¦   «         Zed
d„¦   «         Zed
d„¦   «         Zedd„¦   «         Z G d„ d	¦  «        Z	dS )rG   zéA class that mimics some basic pytest APIs. This is meant for
    when unit tests are run in production, where pytest may not be
    installed. Still, the user can test psutil installation via:

        $ python3 -m psutil.tests
    c                  óä   — t          j        ¦   «                              t          ¦  «        }t          j        d¬¦  «                             |¦  «         t          j        dt          d¬¦  «         |S )z‚Mimics pytest.main(). It has the same effect as running
        `python3 -m unittest -v` from the project root directory.
        rg   )Ú	verbosityz<Fake pytest module was used. Test results may be inaccurate.ra  ©Ú
stacklevel)	r=   Ú
TestLoaderÚdiscoverÚHEREÚTextTestRunnerrâ   Úwarningsr\   ÚUserWarning)rØ   ÚkwÚsuites      r{   Úmainzfake_pytest.mainw  sk   € õ
 Ô#Ñ%Ô%×.Ò.­tÑ4Ô4ˆÝÔ¨!Ð,Ñ,Ô,×0Ò0°Ñ7Ô7Ð7ÝŒØJÝØð	
ñ 	
ô 	
ð 	
ð
 ˆr}   Nc                 óh   ‡—  G d„ d¦  «        Št           j        dˆfd„	¦   «         } || |¬¦  «        S )zMimics `pytest.raises`.c                   ó(   — e Zd ZdZed„ ¦   «         ZdS )ú)fake_pytest.raises.<locals>.ExceptionInfoNc                 ó   — | j         S rÒ   )Ú_excrÔ   s    r{   Úvaluez/fake_pytest.raises.<locals>.ExceptionInfo.valueŒ  s
   € à”yÐ r}   )rÌ   rå   ræ   rÁ  ÚpropertyrÂ  r�  r}   r{   ÚExceptionInfor¿  ‰  s2   € € € € € ØˆDàð!ð !ñ ŒXð!ð !ð !r}   rÄ  Nc              3   óö   •K  —  ‰¦   «         }	 |V — t          | ›d�¦  «        ‚# | $ rN}|r:t          j        |t          |¦  «        ¦  «        sd|› d|› d�}t          |¦  «        ‚||_        Y d }~d S d }~ww xY w)Nz not raisedú"z" does not match ")ÚAssertionErrorÚreÚsearchr3  rÁ  )r~  ÚmatchÚeinforL  ÚmsgrÄ  s        €r{   Úcontextz#fake_pytest.raises.<locals>.context�  s´   øè è € à!�M‘O”OˆEð<Ø���õ %¨Ð%:Ð%:Ð%:Ñ;Ô;Ð;øð ð !ð !ð !Øð .¥¤¨5µ#°c±(´(Ñ!;Ô!;ð .Ø=˜eÐ=Ð=°sÐ=Ð=Ð=�CÝ(¨Ñ-Ô-Ð-Ø �”
�
�
�
�
�
�
øøøøð	!øøøs   �% ¥A8ªAA3Á3A8)rÊ  rÒ   )Ú
contextlibÚcontextmanager)r~  rÊ  rÍ  rÄ  s      @r{   Úraiseszfake_pytest.raises…  sp   ø€ ð	!ð 	!ð 	!ð 	!ð 	!ñ 	!ô 	!ð 	!õ 
Ô	"ð
	<ð 
	<ð 
	<ð 
	<ð 
	<ñ 
#Ô	"ð
	<ð ˆw�s %Ð(Ñ(Ô(Ð(r}   c                 ó    — |r't          j        ¦   «                              | |¦  «        S t          j        ¦   «                              | ¦  «        S )zMimics `pytest.warns`.)r=   ÚTestCaseÚassertWarnsRegexÚassertWarns)ÚwarningrÊ  s     r{   Úwarnszfake_pytest.warnsŸ  sI   € ð ð 	HÝÔ$Ñ&Ô&×7Ò7¸ÀÑGÔGÐGÝÔ Ñ"Ô"×.Ò.¨wÑ7Ô7Ð7r}   r`  c                 ó*   — t          j        | ¦  «        ‚)zMimics `unittest.SkipTest`.)r=   ÚSkipTest©Úreasons    r{   r©  zfake_pytest.skip¦  s   € õ Ô Ñ'Ô'Ð'r}   c                   ó@   — e Zd Zedd„¦   «         Z G d„ d¦  «        ZdS )úfake_pytest.markr`  c                 ó,   — t          j        | |¦  «        S )z'Mimics `@pytest.mark.skipif` decorator.)r=   ÚskipIf)Ú	conditionrÚ  s     r{   Úskipifzfake_pytest.mark.skipif­  s   € õ ”? 9¨fÑ5Ô5Ð5r}   c                   ó    — e Zd ZdZdd„Zd„ ZdS )úfake_pytest.mark.xdist_groupz4Mimics `@pytest.mark.xdist_group` decorator (no-op).Nc                 ó   — d S rÒ   r�  rÎ   s     r{   rÁ   z%fake_pytest.mark.xdist_group.__init__µ  s   € Ø�r}   c                 ó   — |S rÒ   r�  )rÇ   Úcls_or_meths     r{   r€  z%fake_pytest.mark.xdist_group.__call__¸  s   € Ø"Ð"r}   rÒ   )rÌ   rå   ræ   rç   rÁ   r€  r�  r}   r{   Úxdist_grouprâ  ²  s=   € € € € € ØFÐFðð ð ð ð#ð #ð #ð #ð #r}   ræ  N©r`  )rÌ   rå   ræ   Ústaticmethodrà  ræ  r�  r}   r{   ÚmarkrÜ  «  sZ   € € € € € à	ð	6ð 	6ð 	6ñ 
Œð	6ð	#ð 	#ð 	#ð 	#ð 	#ñ 	#ô 	#ð 	#ð 	#ð 	#r}   ré  rÒ   rç  )
rÌ   rå   ræ   rç   rè  r¼  rÐ  rÖ  r©  ré  r�  r}   r{   rG   rG   o  sÁ   € € € € € ðð ð ðð ñ „\ðð ð)ð )ð )ñ „\ð)ð2 ð8ð 8ð 8ñ „\ð8ð ð(ð (ð (ñ „\ð(ð#ð #ð #ð #ð #ñ #ô #ð #ð #ð #r}   rG   c                   óJ   — e Zd ZdZdd„Zd„ Zd„ Zd„ Zd„ Zd	„ Z	d
„ Z
d„ Zd„ ZdS )rB   zžTest class providing auto-cleanup wrappers on top of process
    test utilities. All test classes should derive from this one, even
    if we use pytest.
    r`  Nc                 ó^   — t          ||¬¦  «        }|                      t          |¦  «         |S )N)r§  rø   )rL   Ú
addCleanuprI   )rÇ   r§  rø   rˆ  s       r{   rL   zPsutilTestCase.get_testfnÆ  s-   € Ý &¨cÐ2Ñ2Ô2ˆØ�Š� UÑ+Ô+Ð+Øˆr}   c                 óT   — t          |i |¤Ž}|                      t          |¦  «         |S rÒ   )r9   rì  r7   )rÇ   rØ   r  r  s       r{   r9   zPsutilTestCase.spawn_testprocË  s-   € Ý Ð-¨Ð-Ð-ˆØ�Š�	 5Ñ)Ô)Ð)Øˆr}   c                 ó˜   — t          ¦   «         \  }}|                      t          |¦  «         |                      t          |¦  «         ||fS rÒ   )r;   rì  r7   )rÇ   Úchild1Úchild2s      r{   r;   z"PsutilTestCase.spawn_children_pairÐ  sD   € Ý,Ñ.Ô.‰ˆ�Ø�Š�	 6Ñ*Ô*Ð*Ø�Š�	 6Ñ*Ô*Ð*Ø˜ÐÐr}   c                 ó˜   — t          ¦   «         \  }}|                      t          |¦  «         |                      t          |¦  «         ||fS rÒ   )r:   rì  r7   )rÇ   r#  r  s      r{   r:   zPsutilTestCase.spawn_zombieÖ  sB   € Ý%™œ‰ˆ�Ø�Š�	 6Ñ*Ô*Ð*Ø�Š�	 6Ñ*Ô*Ð*Ø˜ÐÐr}   c                 ó�   — t          |i |¤Ž\  }}|                      t          |¦  «         |                      t          |¦  «         |S rÒ   )r6   rì  rI   r7   )rÇ   rØ   r  r  r+  s        r{   r6   zPsutilTestCase.pyrunÜ  sE   € Ý Ð-¨Ð-Ð-‰ˆˆwØ�Š� WÑ-Ô-Ð-Ø�Š�	 5Ñ)Ô)Ð)Øˆr}   c                 ób  — t          |t          j        ¦  «        sJ ‚|j        |j        k    sJ ‚|j        |j        k    sJ ‚|j        r	|j        sJ ‚t          |t          j        ¦  «        r&|j        |j        k    sJ ‚|j        �|j        dk    sJ ‚t          |¦  «         t          |¦  «         d S ©Nr   )r2  r®   ÚErrorr  rÏ   Ú_nameÚZombieProcessÚppidÚ_ppidr3  Úrepr)rÇ   r?  r~  s      r{   Ú_check_proc_exczPsutilTestCase._check_proc_excâ  s´   € Ý˜#�vœ|Ñ,Ô,Ð,Ð,Ð,ØŒw˜$œ(Ò"Ð"Ð"Ð"ØŒx˜4œ:Ò%Ð%Ð%Ð%ØŒ8ð 	Ø”8ˆOˆOˆOÝ�c�6Ô/Ñ0Ô0ð 	%Ø”8˜tœzÒ)Ð)Ð)Ð)ØŒxÐ#Ø”x 1’}�}�}�}ÝˆC‰ŒˆÝˆS‰	Œ	ˆ	ˆ	ˆ	r}   c                 óÐ  — t          j        t          j        ¦  «        5 }	 t          j        |¦  «         n"# t          j        $ r t          d¦  «        ‚w xY w	 d d d ¦  «         n# 1 swxY w Y   |j        j        |k    sJ ‚|j        j	        �J ‚t          j
        |¦  «        r
J |¦   «         ‚|t          j        ¦   «         vsJ ‚|d„ t          j        ¦   «         D ¦   «         vsJ ‚d S )Nz&wasn't supposed to raise ZombieProcessc                 ó   — g | ]	}|j         ‘Œ
S r�  r„  r¸   s     r{   r»   z0PsutilTestCase.assertPidGone.<locals>.<listcomp>ù  s   € Ð@Ð@Ð@ Q˜1œ5Ð@Ð@Ð@r}   )r¨  rÐ  r®   r>  r¯   r÷  rÇ  rÂ  r  rÏ   rT  rƒ  Úprocess_iter)rÇ   r  Úcms      r{   ÚassertPidGonezPsutilTestCase.assertPidGoneï  sR  € ÝŒ]�6Ô/Ñ0Ô0ð 	O°BðOÝ”˜sÑ#Ô#Ð#Ð#øÝÔ'ð Oð Oð OÝ$Ð%MÑNÔNÐNðOøøøð $ð	Oð 	Oð 	Oñ 	Oô 	Oð 	Oð 	Oð 	Oð 	Oð 	Oð 	Oøøøð 	Oð 	Oð 	Oð 	Oð
 ŒxŒ|˜sÒ"Ð"Ð"Ð"ØŒxŒ}Ð$Ð$Ð$ÝÔ$ SÑ)Ô)Ð.Ð.¨3Ñ.Ô.Ð.Ø�&œ+™-œ-Ð'Ð'Ð'Ð'ØÐ@Ð@­&Ô*=Ñ*?Ô*?Ð@Ñ@Ô@Ð@Ð@Ð@Ð@Ð@Ð@s%   ŸA%¡6µA%¶AÁA%Á%A)Á,A)c                 óî  — |                       |j        ¦  «         t          |¦  «        }|                     |j        d¬¦  «        D ]˜\  }}|                      ||¬¦  «        5  	  |¦   «         }d|› d|›�}t          |¦  «        ‚# t          j        $ r ‚ t          j	        $ r }|  
                    ||¦  «         Y d }~nd }~ww xY w	 d d d ¦  «         n# 1 swxY w Y   Œ™|                     d¬¦  «         d S )NT©Úclear_cache©r?  rÏ   zProcess.z!() didn't raise NSP and returned r   r.  )r   r  rC   ÚiterÚallÚsubTestrÇ  r®   r÷  r>  rû  rÝ   )rÇ   r?  Únsrì   rÏ   r‹  rÌ  r~  s           r{   ÚassertProcessGonez PsutilTestCase.assertProcessGoneû  sy  € Ø×Ò˜4œ8Ñ$Ô$Ð$Ý˜tÑ$Ô$ˆØŸš ¤°T˜Ñ:Ô:ð 	.ð 	.‰IˆC�Ø—’ 4¨d�Ñ3Ô3ð .ð .ð.Ø˜#™%œ%�Cð$ 4ð $ð $Øð$ð $ð õ )¨Ñ-Ô-Ð-øõ Ô+ð ð ð ØÝÔ+ð 4ð 4ð 4Ø×(Ò(¨¨sÑ3Ô3Ð3Ð3Ð3Ð3Ð3Ð3øøøøð4øøøØ3ð.ð .ð .ñ .ô .ð .ð .ð .ð .ð .ð .øøøð .ð .ð .ð .øð 	�	Š	˜!ˆ	ÑÔÐÐÐs<   Á"CÁ$
BÁ.CÂCÂ#B>Â9CÂ>CÃCÃC	ÃC	c                 ó  — t          j        |j        ¦  «        }||k    sJ ‚t          s)t          s"t          |¦  «        t          |¦  «        k    sJ ‚|                     ¦   «         t           j        k    sJ ‚|                     ¦   «         sJ ‚t          j	        |j        ¦  «        sJ ‚| 
                    ¦   «          |j        t          j        ¦   «         v sJ ‚|j        d„ t          j        ¦   «         D ¦   «         v sJ ‚i t           _        |j        d„ t          j        ¦   «         D ¦   «         v sJ ‚t          |¦  «        }|                     |j        d¬¦  «        D ]~\  }}|                      ||¬¦  «        5  	  |¦   «          n># t           j        t           j        f$ r }|                      ||¦  «         Y d }~nd }~ww xY wd d d ¦  «         n# 1 swxY w Y   Œt*          �r/t-          j        t           j        ¦  «        5 }|                     ¦   «          d d d ¦  «         n# 1 swxY w Y   |                      ||j        ¦  «         t-          j        t           j        ¦  «        5 }|                     ¦   «          d d d ¦  «         n# 1 swxY w Y   |                      ||j        ¦  «         t-          j        t           j        ¦  «        5 }|                     ¦   «          d d d ¦  «         n# 1 swxY w Y   |                      ||j        ¦  «         |                     ¦   «          |                     ¦   «          |                     ¦   «          |                     ¦   «          |                     ¦   «         sJ ‚t          j	        |j        ¦  «        sJ ‚|j        t          j        ¦   «         v sJ ‚|j        d„ t          j        ¦   «         D ¦   «         v sJ ‚i t           _        |j        d„ t          j        ¦   «         D ¦   «         v sJ ‚d S )Nc                 ó   — g | ]	}|j         ‘Œ
S r�  r„  r¸   s     r{   r»   z6PsutilTestCase.assertProcessZombie.<locals>.<listcomp>  ó   € ÐAÐAÐA a˜AœEÐAÐAÐAr}   c                 ó   — g | ]	}|j         ‘Œ
S r�  r„  r¸   s     r{   r»   z6PsutilTestCase.assertProcessZombie.<locals>.<listcomp>!  r  r}   Tr  r  c                 ó   — g | ]	}|j         ‘Œ
S r�  r„  r¸   s     r{   r»   z6PsutilTestCase.assertProcessZombie.<locals>.<listcomp>=  r  r}   c                 ó   — g | ]	}|j         ‘Œ
S r�  r„  r¸   s     r{   r»   z6PsutilTestCase.assertProcessZombie.<locals>.<listcomp>?  r  r}   ) r®   r¯   r  r
   r	   Úhashr  r  Ú
is_runningrT  Úas_dictrƒ  rþ  Ú_pmaprC   r  r  r  r÷  ÚAccessDeniedrû  r   r¨  rÐ  ÚcmdlinerÂ  r    r�   ÚsuspendÚresumer7   Úkill)rÇ   r?  Úcloner  rì   rÏ   r~  rÿ  s           r{   ÚassertProcessZombiez"PsutilTestCase.assertProcessZombie  sª  € å”˜tœxÑ(Ô(ˆð �uŠ}ˆ}ˆ}ˆ}Ýð 	-�6ð 	-Ý˜‘:”:¥ e¡¤Ò,Ð,Ð,Ð,à�{Š{‰}Œ}¥Ô 4Ò4Ð4Ð4Ð4à�ŠÑ Ô Ð Ð Ð ÝÔ  ¤Ñ*Ô*Ð*Ð*Ð*à�Š‰ŒˆàŒx�6œ;™=œ=Ð(Ð(Ð(Ð(ØŒxÐAÐA­6Ô+>Ñ+@Ô+@ÐAÑAÔAÐAÐAÐAÐAØ�ŒØŒxÐAÐA­6Ô+>Ñ+@Ô+@ÐAÑAÔAÐAÐAÐAÐAå˜tÑ$Ô$ˆØŸš ¤°T˜Ñ:Ô:ð 	4ð 	4‰IˆC�Ø—’ 4¨d�Ñ3Ô3ð 4ð 4ð4Ø�C‘E”E�E�EøÝÔ,­fÔ.AÐBð 4ð 4ð 4Ø×(Ò(¨¨sÑ3Ô3Ð3Ð3Ð3Ð3Ð3Ð3øøøøð4øøøð4ð 4ð 4ñ 4ô 4ð 4ð 4ð 4ð 4ð 4ð 4øøøð 4ð 4ð 4ð 4øõ
 ñ 
	1å”�vÔ3Ñ4Ô4ð ¸Ø—’‘”�ðð ð ñ ô ð ð ð ð ð ð øøøð ð ð ð à× Ò   r¤xÑ0Ô0Ð0Ý”�vÔ3Ñ4Ô4ð ¸Ø—’‘
”
�
ðð ð ñ ô ð ð ð ð ð ð øøøð ð ð ð à× Ò   r¤xÑ0Ô0Ð0Ý”�vÔ3Ñ4Ô4ð #¸Ø× Ò Ñ"Ô"Ð"ð#ð #ð #ñ #ô #ð #ð #ð #ð #ð #ð #øøøð #ð #ð #ð #à× Ò   r¤xÑ0Ô0Ð0à�Š‰ŒˆØ�Š‰ŒˆØ�ŠÑÔÐØ�	Š	‰ŒˆØ�ŠÑ Ô Ð Ð Ð ÝÔ  ¤Ñ*Ô*Ð*Ð*Ð*ØŒx�6œ;™=œ=Ð(Ð(Ð(Ð(ØŒxÐAÐA­6Ô+>Ñ+@Ô+@ÐAÑAÔAÐAÐAÐAÐAØ�ŒØŒxÐAÐA­6Ô+>Ñ+@Ô+@ÐAÑAÔAÐAÐAÐAÐAÐAÐAsr   Å6GÅ8
FÆGÆF>ÆF9Æ4GÆ9F>Æ>GÇG	ÇG	Ç?H È H$È'H$É$JÊJ	ÊJ	Ë	K*Ë*K.Ë1K.©r`  N)rÌ   rå   ræ   rç   rL   r9   r;   r:   r6   rû  r   r	  r  r�  r}   r{   rB   rB   À  s²   € € € € € ðð ð
ð ð ð ð
ð ð ð
 ð  ð  ð ð  ð  ðð ð ðð ð ð
Að 
Að 
Aðð ð ð&1Bð 1Bð 1Bð 1Bð 1Br}   rB   zunreliable on PYPYrÙ  c                   óä   — e Zd ZdZdZdZdZerdndZdZ	 e
j        ¦   «         Z e ej        d¦  «        ¦  «        Zed„ ¦   «         Zed	„ ¦   «         Zd
„ Zd„ Zd„ Zd„ Zd„ Zd„ Zd„ Z	 dd„Zd„ ZdS )rA   aç  Test framework class for detecting function memory leaks,
    typically functions implemented in C which forgot to free() memory
    from the heap. It does so by checking whether the process memory
    usage increased before and after calling the function many times.

    Note that this is hard (probably impossible) to do reliably, due
    to how the OS handles memory, the GC and so on (memory can even
    decrease!). In order to avoid false positives, in case of failure
    (mem > 0) we retry the test for up to 5 times, increasing call
    repetitions each time. If the memory keeps increasing then it's a
    failure.

    If available (Linux, OSX, Windows), USS memory is used for comparison,
    since it's supposed to be more precise, see:
    https://gmpy.dev/blog/2016/real-process-memory-and-environ-in-python
    If not, RSS memory is used. mallinfo() on Linux and _heapwalk() on
    Windows may give even more precision, but at the moment are not
    implemented.

    PyPy appears to be completely unstable for this framework, probably
    because of its JIT, so tests on PYPY are skipped.

    Usage:

        class TestLeaks(psutil.tests.TestMemoryLeak):

            def test_fun(self):
                self.execute(some_function)
    éÈ   rh   r   r€   TÚPSUTIL_DEBUGc                 ó.   — t          j        d¦  «         d S )NF)r®   Ú
_set_debug©Úclss    r{   Ú
setUpClasszTestMemoryLeak.setUpClassy  s   € åÔ˜%Ñ Ô Ð Ð Ð r}   c                 ó8   — t          j        | j        ¦  «         d S rÒ   )r®   r   Ú_psutil_debug_origr!  s    r{   ÚtearDownClasszTestMemoryLeak.tearDownClass}  s   € åÔ˜#Ô0Ñ1Ô1Ð1Ð1Ð1r}   c                 ó`   — | j                              ¦   «         }t          |d|j        ¦  «        S )NÚuss)Ú	_thisprocÚmemory_full_infor§   Úrss)rÇ   Úmems     r{   Ú_get_memzTestMemoryLeak._get_mem�  s+   € ð Œn×-Ò-Ñ/Ô/ˆÝ�s˜E 3¤7Ñ+Ô+Ð+r}   c                 ót   — t           r| j                             ¦   «         S | j                             ¦   «         S rÒ   )r   r)  Únum_fdsÚnum_handlesrÔ   s    r{   Ú_get_num_fdszTestMemoryLeak._get_num_fds‡  s2   € Ýð 	0Ø”>×)Ò)Ñ+Ô+Ð+à”>×-Ò-Ñ/Ô/Ð/r}   c                 óP   — | j         rt          |dt          j        ¬¦  «         d S d S )NÚyellow)ÚcolorÚfile)Úverboser   rw   rœ   )rÇ   rÌ  s     r{   Ú_logzTestMemoryLeak._log�  s3   € ØŒ<ð 	>Ý˜ 8µ#´*Ð=Ñ=Ô=Ð=Ð=Ð=ð	>ð 	>r}   c                 óB  — |                       ¦   «         }|                      |¦  «         |                       ¦   «         }||z
  }|dk     rd|›d�}|                      |¦  «        ‚|dk    r5t          rdnd}|dk    r|dz  }|› d|› d	|›�}|                      |¦  «        ‚d
S )z»Makes sure num_fds() (POSIX) or num_handles() (Windows) does
        not increase after calling a function.  Used to discover forgotten
        close(2) and CloseHandle syscalls.
        r   znegative diff z8 (gc probably collected a resource from a previous test)ÚfdÚhandlera  r  z
 unclosed z after calling N)r1  ÚcallÚfailr   )rÇ   rì   ÚbeforeÚafterÚdiffrÌ  Útype_s          r{   Ú
_check_fdszTestMemoryLeak._check_fds‘  sÏ   € ð
 ×"Ò"Ñ$Ô$ˆØ�	Š	�#‰ŒˆØ×!Ò!Ñ#Ô#ˆØ�v‰~ˆØ�!Š8ˆ8ð2 ð 2ð 2ð 2ð ð —)’)˜C‘.”.Ð Ø�!Š8ˆ8Ý!Ð/�D�D xˆEØ�aŠxˆxØ˜‘�ØÐBÐB UÐBÐB¸3ÐBÐBˆCØ—)’)˜C‘.”.Ð ð ˆ8r}   c                 ó*  — t          j        d¬¦  «         |                      ¦   «         }t          |¦  «        D ]}|                      |¦  «        }~~Œt          j        d¬¦  «         |                      ¦   «         }t           j        g k    sJ ‚||z
  }|S )z€Get 2 distinct memory samples, before and after having
        called fun repeatedly, and return the memory difference.
        ra  )Ú
generation)ÚgcÚcollectr-  rx  r;  Úgarbage)rÇ   rì   ÚtimesÚmem1rº   r‹  Úmem2r?  s           r{   Ú_call_ntimeszTestMemoryLeak._call_ntimes§  s�   € õ 	Œ
˜aÐ Ñ Ô Ð Ø�}Š}‰ŒˆÝ�u‘”ð 	ð 	ˆAØ—)’)˜C‘.”.ˆCØ�3�3Ý
Œ
˜aÐ Ñ Ô Ð Ø�}Š}‰ŒˆÝŒz˜RÒÐÐÐØ�d‰{ˆØˆr}   c           	      ó  — g }d}|}t          d|dz   ¦  «        D ]¾}|                      ||¦  «        }	d                     |t          |	¦  «        t          |	|z  ¦  «        |¦  «        }
|                     |
¦  «         |	|k    p|	|k    }|r|dk    r|                      |
¦  «          d S |dk    rt          ¦   «          |                      |
¦  «         ||z  }|	}Œ¿|                      d                     |¦  «        ¦  «        ‚)Nr   ra  z,Run #{}: extra-mem={}, per-call={}, calls={}z. )	rx  rJ  r­   r   Úappendr7  Úprintr<  rä   )rÇ   rì   rG  rt  Ú	toleranceÚmessagesÚprev_memÚincreaseÚidxr,  rÌ  Úsuccesss               r{   Ú
_check_memzTestMemoryLeak._check_mem¶  s  € ØˆØˆØˆÝ˜˜G a™KÑ(Ô(ð 	ð 	ˆCØ×#Ò# C¨Ñ/Ô/ˆCØ@×GÒGØÝ˜CÑ Ô Ý˜C %™KÑ(Ô(Øñ	ô ˆCð �OŠO˜CÑ Ô Ð Ø˜YÒ&Ð9¨#°ª/ˆGØð 	Ø˜’7�7Ø—I’I˜c‘N”N�NØ��à˜!’8�8Ý‘G”G�GØ—	’	˜#‘”�Ø˜Ñ!�Ø��Ø�iŠi˜Ÿ	š	 (Ñ+Ô+Ñ,Ô,Ð,r}   c                 ó   —  |¦   «         S rÒ   r�  )rÇ   rì   s     r{   r;  zTestMemoryLeak.callÒ  s   € Øˆs‰uŒuˆr}   Nc                 óÆ  — |�|n| j         }|�|n| j        }|�|n| j        }|�|n| j        }	 |dk    s
J d¦   «         ‚|dk    s
J d¦   «         ‚|dk    s
J d¦   «         ‚|dk    s
J d¦   «         ‚n.# t          $ r!}t          t          |¦  «        ¦  «        ‚d}~ww xY w|                      ||¦  «         |                      |¦  «         |  	                    ||||¬¦  «         dS )	zTest a callable.Nra  ztimes must be >= 1r   zwarmup_times must be >= 0zretries must be >= 0ztolerance must be >= 0)rG  rt  rN  )
rG  Úwarmup_timesrt  rN  rÇ  r°   r3  rJ  rA  rT  )rÇ   rì   rG  rW  rt  rN  rL  s          r{   ÚexecutezTestMemoryLeak.executeÕ  s$  € ð Ð*��°´
ˆà(Ð4ˆLˆL¸$Ô:Kð 	ð %Ð0�'�'°d´lˆØ!*Ð!6�I�I¸D¼Nˆ	ð	'Ø˜A’:�:�:Ð3‘:”:�:Ø 1Ò$Ð$Ð$Ð&AÑ$Ô$Ð$Ø˜a’<�<�<Ð!7‘<”<�<Ø ’>�>�>Ð#;‘>”>�>�>øÝð 	'ð 	'ð 	'Ý�S ™XœXÑ&Ô&Ð&øøøøð	'øøøð 	×Ò˜#˜|Ñ,Ô,Ð,Ø�Š˜ÑÔÐØ�Š˜ 5°'ÀYˆÑOÔOÐOÐOÐOs   ®A A/ Á/
BÁ9BÂBc                 ó6   ‡ ‡‡— ˆˆˆ fd„} ‰ j         |fi |¤Ž dS )znConvenience method to test a callable while making sure it
        raises an exception on every call.
        c                  ó4   •— ‰                      ‰ ‰¦  «         d S rÒ   )ÚassertRaises)r~  rì   rÇ   s   €€€r{   r;  z*TestMemoryLeak.execute_w_exc.<locals>.callð  s   ø€ Ø×Ò˜c 3Ñ'Ô'Ð'Ð'Ð'r}   N)rX  )rÇ   r~  rì   rÙ   r;  s   ```  r{   Úexecute_w_exczTestMemoryLeak.execute_w_excë  sJ   øøø€ ð
	(ð 	(ð 	(ð 	(ð 	(ð 	(ð 	(ð 	ˆŒ�TÐ$Ð$˜VÐ$Ð$Ð$Ð$Ð$r}   )NNNN)rÌ   rå   ræ   rç   rG  rW  rN  r    rt  r6  r®   r¯   r)  Úboolr¥   Úgetenvr%  Úclassmethodr#  r&  r-  r1  r7  rA  rJ  rT  r;  rX  r\  r�  r}   r{   rA   rA   P  s8  € € € € € ðð ð> €EØ€LØ€IØÐ%ˆbˆb A€GØ€GØ�”Ñ Ô €IØ˜˜i˜bœi¨Ñ7Ô7Ñ8Ô8Ðàð!ð !ñ „[ð!ð ð2ð 2ñ „[ð2ð,ð ,ð ,ð0ð 0ð 0ð>ð >ð >ð!ð !ð !ð,ð ð ð-ð -ð -ð8ð ð ð KOðPð Pð Pð Pð,%ð %ð %ð %ð %r}   rA   c                  ó®  — dd l } dd l}dd l}dd l}dd l}	 dd l}n# t          $ r d }Y nw xY w	 dd l}n# t          $ r d }Y nw xY w|                      ¦   «         }t          j
        r't          j        d¦  «        rt          d¦  «        |d<   nÝt          j        r dt          j        ¦   «         d         › �|d<   n±t          j        rydd                     t'          t(          t          j        ¦   «         ¦  «        ¦  «        z   |d<   t-          t          d¦  «        r$|dxx         d	t          j        ¦   «         z   z  cc<   n,t          j        ¦   «         › dt          j        ¦   «         › �|d<   d	                     t5          t          j        ¦   «         ¦  «        t          j        ¦   «         gz   ¦  «        |d
<   t          j        rt          j        ¦   «         d         |d<   d	                     t          j        ¦   «         t          j         ¦   «         t          j!        ¦   «         g¦  «        |d<   tE          |dd¦  «        |d<   |�|dxx         d|j#        › d�z  cc<   t          j        rvt          j        d¦  «        r=t          ddg¦  «        }t)          |¦  «         $                    d¦  «        d         |d<   nd|d<   t          j%        ¦   «         d         }	|	r|	|d<   tM          j'        ¦   «         |d<   | (                    ¦   «         }
|
d         › d	|
d         › �|d<   |j         )                    t          j*        ¦   «         ¦  «         +                    d¦  «        |d<   |j         ,                    ¦   «          +                    d¦  «        |d<   | -                    ¦   «         |d<   t\          j/         0                    d¦  «        |d<   t]          j1        ¦   «         |d <   td          |d!<   t          j3        ¦   «         |d"<   t]          j4        ¦   «         |d#<   t          j5        ¦   «         |d$<    d%j6        to          d&„ t          j8        ¦   «         D ¦   «         ¦  «        Ž |d'<   t          j9        ¦   «         }d( 6                    tu          |j;        ¦  «        ty          |j=        ¦  «        ty          |j>        ¦  «        ¦  «        |d)<   t          j?        ¦   «         }d( 6                    tu          |j;        ¦  «        ty          |j=        ¦  «        ty          |j>        ¦  «        ¦  «        |d*<   t�          t          jA        ¦   «         ¦  «        |d+<   t          jB        ¦   «          C                    ¦   «         }| D                    d,d ¦  «         | E                    |¦  «        |d-<   t�          d.tL          jG        ¬/¦  «         | H                    ¦   «         D ]7\  }}t�          d0 6                    |d1z   |¦  «        tL          jG        ¬/¦  «         Œ8t�          d.tL          jG        ¬/¦  «         tL          jI         J                    ¦   «          tL          jI         J                    ¦   «          d S )2Nr   Úlsb_releasezlsb_release -d -sÚOSzDarwin zWindows ú Úwin32_editionz, Úarchrg   ÚkernelÚpythonÚ__version__znot installedÚpipz (wheel=ú)r¥  z	--versionr0  ra  Úglibczfs-encodingÚlangz%Y-%m-%d %H:%M:%Sz	boot-timerà   Úuserú~Úhomerô   ÚpyexeÚhostnameÚPIDÚcpusz{:.1f}%, {:.1f}%, {:.1f}%c              3   óH   K  — | ]}|t          j        ¦   «         z  d z  V — ŒdS )éd   N)r®   Ú	cpu_countr¸   s     r{   ú	<genexpr>z print_sysinfo.<locals>.<genexpr>@  s5   è è € ÐIÐI°ˆq•6Ô#Ñ%Ô%Ñ%¨Ñ+ÐIÐIÐIÐIÐIÐIr}   Úloadavgz{}%%, used={}, total={}ÚmemoryÚswaprƒ  r�   r?  zF======================================================================©r5  z	{:<17} {}ú:)KÚcollectionsÚdatetimeÚgetpassÚlocaleÚpprintri  ÚImportErrorÚwheelÚOrderedDictr®   r   r«   r¬   r;  ÚOSXro   rp   r   rä   rr   r3  Ú	win32_verÚhasattrrd  Úsystemrz   ÚlistÚarchitectureÚmachiner   rc  Úpython_implementationÚpython_versionÚpython_compilerr§   rh  rt   Úlibc_verrw   ÚgetfilesystemencodingÚ	getlocaleÚfromtimestampÚ	boot_timeÚstrftimeÚnowÚgetuserr¥   r©   Ú
expanduserrý   r   ÚnodeÚgetpidrv  r­   rq   rŽ   Úvirtual_memoryrs   Úpercentr   ÚusedÚtotalÚswap_memoryre  rƒ  r¯   r  r\  ÚpformatrM  rœ   Úitemsr›   Úflush)r}  r~  r  r€  r�  ri  rƒ  ÚinfoÚoutr  rl  r,  rz  ÚpinfoÚkÚvs                   r{   rE   rE   ö  sö  € ØÐÐÐØ€O€O€OØ€N€N€NØ€M€M€MØ€M€M€MðØˆ
ˆ
ˆ
ˆ
øÝð ð ð ØˆˆˆðøøøðØˆˆˆˆøÝð ð ð Øˆˆˆðøøøð ×"Ò"Ñ$Ô$€Dõ „|ð 	A�œ ]Ñ3Ô3ð 	AÝÐ+Ñ,Ô,ˆˆT‰
ˆ
Ý	Œð AØ6�xÔ/Ñ1Ô1°!Ô4Ð6Ð6ˆˆT‰
ˆ
Ý	Œð AØ #§(¢(­3­sµHÔ4FÑ4HÔ4HÑ+IÔ+IÑ"JÔ"JÑJˆˆT‰
Ý•8˜_Ñ-Ô-ð 	:Ø�ˆJˆJŒJ˜$¥Ô!7Ñ!9Ô!9Ñ9Ñ9ˆJˆJ‰Jøå œÑ)Ô)Ð@Ð@­HÔ,<Ñ,>Ô,>Ð@Ð@ˆˆT‰
Ø—9’9Ý�XÔ"Ñ$Ô$Ñ%Ô%­Ô)9Ñ);Ô);Ð(<Ñ<ñô €Dˆ�Lõ „|ð -Ý!œÑ)Ô)¨!Ô,ˆˆX‰ð —Y’YÝÔ&Ñ(Ô(ÝÔÑ!Ô!ÝÔ Ñ"Ô"ð ñ ô €Dˆ�Nõ
 ˜#˜}¨oÑ>Ô>€Dˆ�KØÐØˆUˆˆŒÐ6 %Ô"3Ð6Ð6Ð6Ñ6ˆˆ‰õ „|ð ÝŒ<˜ÑÔð 	*Ý�e˜[Ð)Ñ*Ô*ˆCÝ˜c™(œ(Ÿ.š.¨Ñ.Ô.¨qÔ1ˆD�‰KˆKà)ˆD�‰KÝÔÑÔ Ô"ˆØð 	ØˆD�‰Mõ Ô3Ñ5Ô5€DˆÑØ×ÒÑÔ€DØ˜1”gÐ*Ð*  a¤Ð*Ð*€Dˆ�LØ Ô)×7Ò7ÝÔÑÔñô ç‚hÐ"Ñ#Ô#ð 	ˆÑð Ô$×(Ò(Ñ*Ô*×3Ò3Ð4GÑHÔH€Dˆ�LØ—?’?Ñ$Ô$€Dˆ�LÝ”7×%Ò% cÑ*Ô*€Dˆ�LÝ”)‘+”+€Dˆ�KÝ€Dˆ�MÝ”}‘”€DˆÑÝ”)‘+”+€Dˆ�Kõ Ô#Ñ%Ô%€Dˆ�LØ8Ð1Ô8Ý	ÐIÐIµVÔ5FÑ5HÔ5HÐIÑIÔIÑ	IÔ	Ið€Dˆ�Oõ Ô
Ñ
!Ô
!€CØ.×5Ò5ÝˆCŒKÑÔÝ�C”HÑÔÝ�C”IÑÔñô €Dˆ�Nõ
 ÔÑÔ€DØ,×3Ò3ÝˆDŒLÑÔÝ�D”IÑÔÝ�D”JÑÔñô €Dˆ�Lõ
 •v”{‘}”}Ñ%Ô%€Dˆ�LÝŒNÑÔ×$Ò$Ñ&Ô&€EØ	‡I‚Iˆm˜TÑ"Ô"Ð"Ø—>’> %Ñ(Ô(€Dˆ�Lå	ˆ(�œÐ$Ñ$Ô$Ð$Ø—
’
‘”ð ?ð ?‰ˆˆ1Ýˆk× Ò   S¡¨!Ñ,Ô,µ3´:Ð>Ñ>Ô>Ð>Ð>Ý	ˆ(�œÐ$Ñ$Ô$Ð$Ý„J×ÒÑÔÐõ „J×ÒÑÔÐÐÐs   – ›*©*®3 ³AÁAc                 ón   — t           d„ ¦   «         }	  |¦   «         |          dk    S # t          $ r Y dS w xY w)Nc                  óè   — i } t          d¦  «        }|                     ¦   «         dd …         D ]C}d„ |                     d¦  «        D ¦   «         }|d         t          |d         ¦  «        }}|| |<   ŒD| S )Nztasklist.exe /NH /FO csvra  c                 ó:   — g | ]}|                      d d¦  «        ‘ŒS )rÆ  r`  )Úreplacer¸   s     r{   r»   z@is_win_secure_system_proc.<locals>.get_procs.<locals>.<listcomp>i  s&   € Ð@Ð@Ð@¨1�A—I’I˜c 2Ñ&Ô&Ð@Ð@Ð@r}   ú,r   )r;  Ú
splitlinesrt   rs   )r‹  r£  ÚlineÚbitsrÏ   r  s         r{   Ú	get_procsz,is_win_secure_system_proc.<locals>.get_procsd  s{   € àˆÝÐ+Ñ,Ô,ˆØ—N’NÑ$Ô$ Q R RÔ(ð 	ð 	ˆDØ@Ð@°·
²
¸3±´Ð@Ñ@Ô@ˆDØ˜Qœ¥ T¨!¤W¡¤�#ˆDØˆC�‰HˆHØˆ
r}   zSecure SystemF)r   ÚKeyError)r  r¯  s     r{   rF   rF   b  sX   € åðð ñ „WððØˆy‰{Œ{˜3Ô ?Ò2Ð2øÝð ð ð Øˆuˆuðøøøs   ’& ¦
4³4c                  óà   — t          j        ¦   «         } t          | d¦  «        r|                      ¦   «         S t          | d¦  «        r&t	          j        |                      ¦   «         ¦  «        S dS )Nr’   r‹   r   )r®   r¯   r‡  r’   ÚrandomÚchoicer‹   )r:  s    r{   Ú_get_eligible_cpur´  t  s`   € ÝŒÑÔ€AÝˆq�)ÑÔð /Ø�yŠy‰{Œ{ÐÝ	��NÑ	#Ô	#ð /ÝŒ}˜QŸ^š^Ñ-Ô-Ñ.Ô.Ð.Øˆ1r}   c                   ó°  — e Zd ZdZddi fddi fgZddi fddddifd	di fd
di fddi fddi fddi fddi fddi fg	Zddi fddi fddi fddi fddi fddi fddi fddi fddddifddi fddi fddi fddi fd di fd!di fd"di fd#di fgZer$ed$di fgz  Zed%di fgz  Zed&di fgz  Zed'di fgz  Zer	ed(di fgz  Ze	r	ed)di fgz  Ze
red*ej        fi fgz  Zer	ed+di fgz  Zer	ed,di fgz  Zer	ed-di fgz  Zer	ed.di fgz  Zered/dd0d1ifgz  Zg Zer
eddi fgz  Znedej        fi fgz  Ze
red*ej        d2fi fgz  Ze	r"ered)ej        d3fi fgz  Zned)ej        fi fgz  Zered+ e¦   «         gfi fgz  Zd4ej        fi fd5di fd6di fd7di fd8di fgZered4ej        fi fgz  Zed4ej        fi fgz  Zeez   ez   ez   Zd9„ Zd?d:„Zd;„ Z e!d<„ ¦   «         Z"e!d=„ ¦   «         Z#d>S )@rC   a  A container that lists all Process class method names + some
    reasonable parameters to be called with. Utility methods (parent(),
    children(), ...) are excluded.

    >>> ns = process_namespace(psutil.Process())
    >>> for fun, name in ns.iter(ns.getters):
    ...    fun()
    Úcpu_percentr�  Úmemory_percentr  r[  rZ  TÚconnectionsr  Úoneshotr#  Úparentsr  rÝ   ©r   r  Ú	cpu_timesÚcreate_timerô   r    r*  Úmemory_inforÏ   Únet_connectionsÚkindr  ÚniceÚnum_ctx_switchesÚnum_threadsÚ
open_filesrø  r  r˜   ÚusernameÚuidsÚgidsÚterminalr/  r“   r�   r”   r‹   r’   r�   r0  r�   ÚgroupedF)r  i   r   rC  r  r  r7   r  c                 ó   — || _         d S rÒ   )Ú_proc)rÇ   r?  s     r{   rÁ   zprocess_namespace.__init__Ú  s   € ØˆŒ
ˆ
ˆ
r}   c              #   óî   K  — t          |¦  «        }t          j        |¦  «         |D ]L\  }}}|r|                      ¦   «          t	          | j        |¦  «        }t          j        |g|¢R i |¤Ž}||fV — ŒMdS ©z_Given a list of tuples yields a set of (fun, fun_name) tuples
        in random order.
        N)r‰  r²  Úshuffler  r§   rË  rï   r“  )rÇ   Úlsr  Úfun_namerØ   r  rì   s          r{   r  zprocess_namespace.iterÝ  s¡   è è € õ �"‰XŒXˆÝŒ�rÑÔÐØ$&ð 	"ð 	"Ñ ˆH�d˜DØð #Ø× Ò Ñ"Ô"Ð"Ý˜$œ* hÑ/Ô/ˆCÝÔ# CÐ7¨$Ð7Ð7Ð7°$Ð7Ð7ˆCØ˜�/Ð!Ð!Ð!Ð!ð	"ð 	"r}   c                 óR   — | j                              | j         j        d¬¦  «         dS )z&Clear the cache of a Process instance.T)Ú_ignore_nspN)rË  Ú_initr  rÔ   s    r{   r  zprocess_namespace.clear_cacheê  s'   € àŒ
×Ò˜œœ°TÐÑ:Ô:Ð:Ð:Ð:r}   c                 ó„   — |D ]<\  }}}d|z   }t          ||¦  «        s!|j        j        ›d|›d�}t          |¦  «        ‚Œ=dS )z}Given a TestCase instance and a list of tuples checks that
        the class defines the required test method names.
        Útest_z class should define a z methodN)r‡  rÈ   rÌ   ÚAttributeError)r"  Ú
test_classrÏ  rÐ  r%  Ú	meth_namerÌ  s          r{   Útest_class_coveragez%process_namespace.test_class_coverageî  s~   € ð
 !ð 	*ð 	*‰NˆH�a˜Ø (Ñ*ˆIÝ˜: yÑ1Ô1ð *à!Ô+Ô4ð -ð -Ø!ð-ð -ð -ð õ % SÑ)Ô)Ð)ð*ð	*ð 	*r}   c                 óÈ   — d„ | j         D ¦   «         }d„ | j        D ¦   «         }d„ t          t          j        ¦  «        D ¦   «         }||z  |z  }|rt          d|›�¦  «        ‚d S )Nc                 ó   — h | ]
}|d          ’ŒS r»  r�  r¸   s     r{   ú	<setcomp>z)process_namespace.test.<locals>.<setcomp>þ  s   € Ð&Ð&Ð&˜��!”Ð&Ð&Ð&r}   c                 ó   — h | ]
}|d          ’ŒS r»  r�  r¸   s     r{   rÜ  z)process_namespace.test.<locals>.<setcomp>ÿ  s   € Ð-Ð-Ð-˜A�1�Q”4Ð-Ð-Ð-r}   c                 ó*   — h | ]}|d          dk    ¯|’ŒS )r   r%  r�  r¸   s     r{   rÜ  z)process_namespace.test.<locals>.<setcomp>   s!   € Ð?Ð?Ð?�q°1°Q´4¸3²;°;�°;°;°;r}   zuncovered Process class names: )r  Úignoredrø   r®   r¯   r°   )r"  Úthisrß  ÚklassÚleftouts        r{   Útestzprocess_namespace.testü  sƒ   € à&Ð&˜cœgÐ&Ñ&Ô&ˆØ-Ð- ¤Ð-Ñ-Ô-ˆØ?Ð?�C¥¤Ñ/Ô/Ð?Ñ?Ô?ˆØ˜'‘> UÑ*ˆØð 	LÝÐJ¸wÐJÐJÑKÔKÐKð	Lð 	Lr}   N)T)$rÌ   rå   ræ   rç   Úutilsrß  Úgettersr   r'   r(   r+   r®   ÚRLIMIT_NOFILEr$   r*   r&   r   r)   ÚsettersÚNORMAL_PRIORITY_CLASSr   ÚIOPRIO_CLASS_NONEÚIOPRIO_NORMALr´  rA  ÚSIGTERMÚkillersÚCTRL_C_EVENTÚCTRL_BREAK_EVENTr  rÁ   r  r  r_  rÙ  rã  r�  r}   r{   rC   rC   }  ss  € € € € € ðð ð ˜R Ð$Ð'7¸¸RÐ&@ÐA€Eð 
�B˜ÐØ	�R˜+ tÐ,Ð-Ø	˜˜BÐØ	�r˜2ÐØ	�B˜ÐØ	�2�rÐØ	�B˜ÐØ	��BˆØ	��rÐð
€Gð 
�B˜ÐØ	�b˜"ÐØ	˜˜BÐØ	��BˆØ	��BˆØ	˜R Ð$Ø	˜˜BÐØ	��RÐØ	˜B ¨ Ð0Ø	��RÐØ	˜R Ð$Ø	˜˜BÐØ	�r˜2ÐØ	��RÐØ	�2�rÐØ	�B˜ÐØ	�R˜Ðð#€Gð& ð )Ø�V˜R Ð$Ð%Ñ%ˆØ�V˜R Ð$Ð%Ñ%ˆØ�Z  RÐ(Ð)Ñ)ˆØ�Y  BÐ'Ð(Ñ(ˆØð -Ø�] B¨Ð+Ð,Ñ,ˆØð (Ø�X˜r 2Ð&Ð'Ñ'ˆØð =Ø�X Ô 4Ð6¸Ð;Ð<Ñ<ˆØð .Ø�^ R¨Ð,Ð-Ñ-ˆØð )Ø�Y  BÐ'Ð(Ñ(ˆØð )Ø�Y  BÐ'Ð(Ñ(ˆØð -Ø�] B¨Ð+Ð,Ñ,ˆØð =Ø�] B¨°EÐ(:Ð;Ð<Ñ<ˆà€GØð CØ�V˜T 2Ð&Ð'Ñ'ˆˆà�V˜fÔ:Ð<¸bÐAÐBÑBˆØð JØ�X Ô 4°lÐCÀRÐHÐIÑIˆØð AØð 	AØ˜ FÔ$<¸aÐ#@À"ÐEÐFÑFˆGˆGà˜ FÔ$8Ð#:¸BÐ?Ð@Ñ@ˆGØð DØ�^Ð'8Ð'8Ñ':Ô':Ð&;Ð%=¸rÐBÐCÑCˆð 
˜œÐ)¨2Ð.Ø	�B˜ÐØ	�2�rÐØ	�b˜"ÐØ	��RÐð€Gð ð EØ�] VÔ%8Ð$:¸BÐ?Ð@Ñ@ˆØ�] VÔ%<Ð$>ÀÐCÐDÑDˆà
�'‰/˜GÑ
# gÑ
-€Cðð ð ð"ð "ð "ð "ð;ð ;ð ;ð ð*ð *ñ „[ð*ð ðLð Lñ „[ðLð Lð Lr}   rC   c                   ó.  — e Zd ZdZddi fddddifddddifddi fd	dd
difd	dd
difddddifddddifd ej        ¦   «         fi fddddifddi fddi fddddifd ej        ¦   «         fi fddi fddi fddi fddi fgZer!e	r e
j        ¦   «         dk    rneddd
difgz  Zer	eddi fgz  Zer	eddi fgz  Zer	eddi fgz  Zer	ed di fgz  Zered!di fgz  Zed"d#i fgz  Zd$di fd% ej        ¦   «         gfi fd&di fd'di fgZeZed(„ ¦   «         Zej        Zd)S )*rD   zÝA container that lists all the module-level, system-related APIs.
    Utilities such as cpu_percent() are excluded. Usage:

    >>> ns = system_namespace
    >>> for fun, name in ns.iter(ns.getters):
    ...    fun()
    r“  r�  rv  ÚlogicalFTÚ	cpu_statsr¼  ÚpercpuÚdisk_io_countersÚperdiskÚdisk_partitionsr  Ú
disk_usager¿  rÀ  Únet_if_addrsÚnet_if_statsr‘   ÚpernicrT  rƒ  rž  Úusersrš  Úarm64rŒ   rŽ   r—   r–   r•   Úwin_service_iterÚwin_service_get)Úalgrþ  r]  r¶  Úcpu_times_percentc              #   óÂ   K  — t          | ¦  «        } t          j        | ¦  «         | D ]6\  }}}t          t          |¦  «        }t          j        |g|¢R i |¤Ž}||fV — Œ7dS rÍ  )r‰  r²  rÎ  r§   r®   rï   r“  )rÏ  rÐ  rØ   r  rì   s        r{   r  zsystem_namespace.iter=  s…   è è € õ
 �"‰XŒXˆÝŒ�rÑÔÐØ$&ð 	"ð 	"Ñ ˆH�d˜DÝ�& (Ñ+Ô+ˆCÝÔ# CÐ7¨$Ð7Ð7Ð7°$Ð7Ð7ˆCØ˜�/Ð!Ð!Ð!Ð!ð	"ð 	"r}   N)rÌ   rå   ræ   rç   r¥   rý   r™  rå  r%   r   ro   r‹  ÚHAS_GETLOADAVGr/   r.   r,   r   r®   r¯   rß  r  rè  r  rC   rÙ  r�  r}   r{   rD   rD     se  € € € € € ðð ð 
�b˜"ÐØ	�b˜9 eÐ,Ð-Ø	�b˜9 dÐ+Ð,Ø	�b˜"ÐØ	�b˜8 UÐ+Ð,Ø	�b˜8 TÐ*Ð+Ø	˜R )¨TÐ!2Ð3Ø	˜B ¨ Ð.Ø	˜	˜œ	™œ�~ rÐ*Ø	˜B ¨ Ð0Ø	˜˜RÐ Ø	˜˜RÐ Ø	˜B ¨4Ð 0Ð1Ø	˜	˜œ	™œ�~ rÐ*Ø	��RÐØ	˜˜BÐØ	�"�bÐØ	˜2˜rÐ"ð%€Gð( ð <Øð 	<Ð%�XÔ%Ñ'Ô'¨7Ò2Ð2Øà˜ R¨(°DÐ)9Ð:Ð;Ñ;ˆGØð ,Ø�\ 2 rÐ*Ð+Ñ+ˆØð 6ØÐ+¨R°Ð4Ð5Ñ5ˆØð .Ø�^ R¨Ð,Ð-Ñ-ˆØð 1ØÐ&¨¨BÐ/Ð0Ñ0ˆØð 7ØÐ'¨¨RÐ0Ð1Ñ1ˆØÐ&¨°"Ð5Ð6Ñ6ˆð 
˜˜RÐ Ø	˜˜œÑ)Ô)Ð*Ð,¨bÐ1Ø	˜˜BÐØ	˜b "Ð%ð	€Gð €Càð	"ð 	"ñ „\ð	"ð ,Ô?ÐÐÐr}   rD   c                 ó8   — d„ }t          t          d| |¬¦  «        S )zZDecorator which runs a test function and retries N times before
    actually failing.
    c                 óB   — t          | ›d�t          j        ¬¦  «         d S )Nz
, retryingr{  )rM  rw   rœ   )r~  s    r{   rv  z retry_on_failure.<locals>.logfunQ  s&   € Ý�Ð"Ð"Ð"­¬Ð4Ñ4Ô4Ð4Ð4Ð4r}   N)rs  r/  rt  rv  )rq  rÇ  )rt  rv  s     r{   r@   r@   L  s3   € ð
5ð 5ð 5õ Ý ¨$¸Èðñ ô ð r}   c                 ó   ‡ — ˆ fd„}|S )z,Decorator to Ignore AccessDenied exceptions.c                 óJ   •‡ — t          j        ‰ ¦  «        ˆ ˆfd„¦   «         }|S )Nc                  ón   •— 	  ‰| i |¤ŽS # t           j        $ r ‰�‰s‚ t          j        d¦  «        ‚w xY w)Nzraises AccessDenied)r®   r  r¨  r©  )rØ   rÙ   rì   Úonly_ifs     €€r{   rí   z9skip_on_access_denied.<locals>.decorator.<locals>.wrapper]  s]   ø€ ð9Ø�s˜DÐ+ FÐ+Ð+Ð+øÝÔ&ð 9ð 9ð 9ØÐ&Ø"ð ØÝ”kÐ"7Ñ8Ô8Ð8ð	9øøøs   ƒ ‹)4rî   ©rì   rí   r  s   ` €r{   r  z(skip_on_access_denied.<locals>.decorator\  s>   øø€ Ý	Œ˜Ñ	Ô	ð	9ð 	9ð 	9ð 	9ð 	9ñ 
Ô	ð	9ð ˆr}   r�  ©r  r  s   ` r{   r>   r>   Y  s$   ø€ ðð ð ð ð ð Ðr}   c                 ó   ‡ — ˆ fd„}|S )z3Decorator to Ignore NotImplementedError exceptions.c                 óJ   •‡ — t          j        ‰ ¦  «        ˆ ˆfd„¦   «         }|S )Nc                  óx   •— 	  ‰| i |¤ŽS # t           $ r$ ‰�‰s‚ ‰j        ›d�}t          j        |¦  «        ‚w xY w)Nz2 was skipped because it raised NotImplementedError)rb  rÌ   r¨  r©  )rØ   rÙ   rÌ  rì   r  s      €€r{   rí   z;skip_on_not_implemented.<locals>.decorator.<locals>.wrapperp  st   ø€ ð
'Ø�s˜DÐ+ FÐ+Ð+Ð+øÝ&ð 'ð 'ð 'ØÐ&Ø"ð Øà”|ð +ð +ð +ð õ ”k #Ñ&Ô&Ð&ð'øøøs   ƒ ‹.9rî   r  s   ` €r{   r  z*skip_on_not_implemented.<locals>.decoratoro  s>   øø€ Ý	Œ˜Ñ	Ô	ð	'ð 	'ð 	'ð 	'ð 	'ñ 
Ô	ð	'ð ˆr}   r�  r	  s   ` r{   r?   r?   l  s$   ø€ ðð ð ð ð ð" Ðr}   ú	127.0.0.1c                 ó¾   — t          j         ¦   «         5 }|                     | df¦  «         |                     ¦   «         d         cddd¦  «         S # 1 swxY w Y   dS )z6Return an unused TCP port. Subject to race conditions.r   ra  N)ÚsocketÚbindÚgetsockname)Úhostr"  s     r{   rT   rT   ‰  s™   € å	Œ‰Œð %˜DØ�	Š	�4˜�)ÑÔÐØ×ÒÑ!Ô! !Ô$ð%ð %ð %ð %ñ %ô %ð %ð %ð %ð %ð %ð %øøøð %ð %ð %ð %ð %ð %s   ”1AÁAÁAc                 ó†  — |€| t           t          hv rd}t          j        | |¦  «        }	 t          j        dvr+|                     t          j        t          j        d¦  «         |                     |¦  «         |t          j	        k    r| 
                    d¦  «         |S # t          $ r |                     ¦   «          ‚ w xY w)zBinds a generic socket.N©r`  r   >   ÚntÚcygwinra  r€   )r   r   r  r¥   rÏ   Ú
setsockoptÚ
SOL_SOCKETÚSO_REUSEADDRr  r   Úlistenrë   r  )ÚfamilyÚtypeÚaddrr"  s       r{   rU   rU   �  s·   € à€|˜¥7­HÐ"5Ð5Ð5ØˆÝŒ=˜ Ñ&Ô&€Dð	ÝŒ7Ð*Ð*Ð*Ø�OŠO�FÔ-­vÔ/BÀAÑFÔFÐFØ�	Š	�$‰ŒˆØ•6Ô%Ò%Ð%Ø�KŠK˜‰NŒNˆNØˆøÝð ð ð Ø�
Š
‰ŒˆØðøøøs   «A4B  Â  C c                 óp  — t           j        sJ ‚t          j                             | ¦  «        r
J | ¦   «         ‚t          j        t
          j        |¦  «        }	 |                     | ¦  «         |t
          j        k    r| 	                    d¦  «         n## t          $ r |                     ¦   «          ‚ w xY w|S )zBind a UNIX socket.r€   )r®   r   r¥   r©   r±   r  r¼   r  r   r  rë   r  )rÏ   r  r"  s      r{   rV   rV   ¡  s©   € åŒ<ÐÐÐÝŒw�~Š~˜dÑ#Ô#Ð)Ð) TÑ)Ô)Ð)ÝŒ=�œ¨Ñ.Ô.€DðØ�	Š	�$‰ŒˆØ•6Ô%Ò%Ð%Ø�KŠK˜‰NŒNˆNøøÝð ð ð Ø�
Š
‰ŒˆØðøøøð €Ks   Á:B Â B3r  c                 ó"  — t          j         | t          ¦  «        5 }|                     |¦  «         |                     d¦  «         |                     ¦   «         }t          j         | t          ¦  «        }	 |                     |¦  «         |                     ¦   «         }	 |                     ¦   «         \  }}||k    r||fcddd¦  «         S |                     ¦   «          ŒB# t          $ r |                     ¦   «          ‚ w xY w# 1 swxY w Y   dS )z^Build a pair of TCP sockets connected to each other.
    Return a (server, client) tuple.
    r€   TN)	r  r   r  r  r  Úconnectr  r  rJ  )r  r  Úllrf  ÚcaddrÚas         r{   rW   rW   °  s=  € õ 
Œ�v�{Ñ	+Ô	+ð ¨rØ
�Š�‰ŒˆØ
�	Š	�!‰ŒˆØ�~Š~ÑÔˆÝŒM˜&¥+Ñ.Ô.ˆð	Ø�IŠI�d‰OŒOˆOØ—M’M‘O”OˆEðØŸ)š)™+œ+‘��4à˜5’=�=Ø˜q˜6ðð ð ð ñ ô ð ð ð —’‘	”	�	ðøõ ð 	ð 	ð 	Ø�GŠG‰IŒIˆIØð	øøøðð ð ð øøøð ð ð ð ð ð s+   ›ADÁ5A
C!ÃC!Ã! DÄDÄDÄDc                 ó®  — t           j        sJ ‚dx}}	 t          | t          j        ¬¦  «        }|                     d¦  «         t          j        t          j        t          j        ¦  «        }|                     d¦  «         |                     | ¦  «         n;# t          $ r. |�| 	                    ¦   «          |�| 	                    ¦   «          ‚ w xY w||fS )zƒBuild a pair of UNIX sockets connected to each other through
    the same UNIX file name.
    Return a (server, client) tuple.
    N©r  r   )
r®   r   rV   r  r   Úsetblockingr¼   r   rë   r  )rÏ   ÚserverÚclients      r{   rX   rX   Ç  sÚ   € õ
 Œ<ÐÐÐØÐ€FˆVðÝ! $­VÔ-?Ð@Ñ@Ô@ˆØ×Ò˜1ÑÔÐÝ”�vœ~­vÔ/AÑBÔBˆØ×Ò˜1ÑÔÐØ�Š�tÑÔÐÐøåð ð ð ØÐØ�LŠL‰NŒNˆNØÐØ�LŠL‰NŒNˆNØðøøøð �FÐÐs   ”BB Â8Cc               #   ó^  K  — g } dx}}	 |                       t          t          j        t          j        ¦  «        t          t          j        t          j        ¦  «        f¦  «         t          ¦   «         r[|                       t          t          j        t          j        ¦  «        t          t          j        t          j        ¦  «        f¦  «         t          rmt          rft          ¦   «         }t          ¦   «         }t          |¦  «        \  }}t          |t          j        ¬¦  «        }|||fD ]}|                      |¦  «         Œ| V — | D ]}|                     ¦   «          Œ||fD ]}|�t          |¦  «         ŒdS # | D ]}|                     ¦   «          Œ||fD ]}|�t          |¦  «         Œw xY w)z1Open as many socket families / types as possible.Nr%  )ÚextendrU   r  r   r   Ú
SOCK_DGRAMr   r   r   r0   rL   rX   rV   rL  r  rI   )ÚsocksÚfname1Úfname2Ús1Ús2Ús3r  rˆ  s           r{   rY   rY   Þ  sÄ  è è € ð €EØÐ€FˆVð#Ø�ŠÝ�œ­Ô(:Ñ;Ô;Ý�œ­Ô(9Ñ:Ô:ð
ñ 	ô 	ð 	õ ‰?Œ?ð 	Ø�LŠLÝ�FœO­VÔ-?Ñ@Ô@Ý�FœO­VÔ->Ñ?Ô?ðñ ô ð õ ð 	 Õ-ð 	 Ý‘\”\ˆFÝ‘\”\ˆFÝ$ VÑ,Ô,‰FˆB�Ý! &­vÔ/@ÐAÑAÔAˆBØ˜"˜b�\ð  ð  �Ø—’˜Q‘”��Øˆˆˆàð 	ð 	ˆAØ�GŠG‰IŒIˆIˆIØ˜fÐ%ð 	#ð 	#ˆEØÐ Ý˜EÑ"Ô"Ð"øð	#ð 	#øð ð 	ð 	ˆAØ�GŠG‰IŒIˆIˆIØ˜fÐ%ð 	#ð 	#ˆEØÐ Ý˜EÑ"Ô"Ð"øð	#øøøs   ŠD<E9 Å93F,c                 óZ  — t          |t          j        ¦  «        s
J |¦   «         ‚|t          j        k    rpd„ |                      d¦  «        D ¦   «         }t          |¦  «        dk    s
J | ¦   «         ‚|D ]}d|cxk    rdk    sn J | ¦   «         ‚Œt          j        | ¦  «         dS |t          j	        k    r5t          | t          ¦  «        s
J | ¦   «         ‚t          j        | ¦  «         dS |t          j        k    r!t          j        d| ¦  «        €
J | ¦   «         ‚dS t!          d|›�¦  «        ‚)	z[Check a net address validity. Supported families are IPv4,
    IPv6 and MAC addresses.
    c                 ó,   — g | ]}t          |¦  «        ‘ŒS r�  )rs   r¸   s     r{   r»   z%check_net_address.<locals>.<listcomp>  s   € Ð0Ð0Ð0˜1•�A‘”Ð0Ð0Ð0r}   rf   r‚   r   éÿ   z([a-fA-F0-9]{2}[:|\-]?){6}Nzunknown family )r2  ÚenumÚIntEnumr  r   rt   re  Ú	ipaddressÚIPv4Addressr   r3  ÚIPv6Addressr®   ÚAF_LINKrÈ  rÊ  r°   )r  r  ÚoctsÚnums       r{   rR   rR   ý  s=  € õ �f�dœlÑ+Ô+Ð3Ð3¨VÑ3Ô3Ð3Ø•”ÒÐØ0Ð0 §
¢
¨3¡¤Ð0Ñ0Ô0ˆÝ�4‰yŒy˜AŠ~ˆ~ˆ~˜t‰~Œ~ˆ~Øð 	)ð 	)ˆCØ˜�?�?’?�?˜s’?�?�?�?�? D‘?”?�?�?ÝÔ˜dÑ#Ô#Ð#Ð#Ð#Ø	•6”?Ò	"Ð	"Ý˜$¥Ñ$Ô$Ð*Ð* dÑ*Ô*Ð*ÝÔ˜dÑ#Ô#Ð#Ð#Ð#Ø	•6”>Ò	!Ð	!ÝŒxÐ5°tÑ<Ô<ÐHÐHÈ$ÑHÔHÐHÐHÐHåÐ5¨6Ð5Ð5Ñ6Ô6Ð6r}   c                 ó’   — d„ }d„ }d„ }d„ }d„ } || ¦  «          || ¦  «          || ¦  «          || ¦  «          || ¦  «         dS )z*Check validity of a connection namedtuple.c                 óD  — t          | ¦  «        dk    }t          | ¦  «        dv sJ t          | ¦  «        ¦   «         ‚| d         | j        k    sJ | j        ¦   «         ‚| d         | j        k    sJ | j        ¦   «         ‚| d         | j        k    sJ | j        ¦   «         ‚| d         | j        k    sJ | j        ¦   «         ‚| d         | j        k    sJ | j        ¦   «         ‚| d         | j        k    sJ | j        ¦   «         ‚|r | d	         | j        k    sJ | j        ¦   «         ‚d S d S )
Nr£   >   rH  r£   r   ra  rg   r�   r‚   r€   rH  )re  r9  r  r  ÚladdrÚraddrr  r  )r$  Úhas_pids     r{   Úcheck_ntuplez-check_connection_ntuple.<locals>.check_ntuple  s5  € Ý�d‘)”)˜q’.ˆÝ�4‰yŒy˜FÐ"Ð"Ð"¥C¨¡I¤IÑ"Ô"Ð"Ø�AŒw˜$œ'Ò!Ð!Ð! 4¤7Ñ!Ô!Ð!Ø�AŒw˜$œ+Ò%Ð%Ð% t¤{Ñ%Ô%Ð%Ø�AŒw˜$œ)Ò#Ð#Ð# T¤YÑ#Ô#Ð#Ø�AŒw˜$œ*Ò$Ð$Ð$ d¤jÑ$Ô$Ð$Ø�AŒw˜$œ*Ò$Ð$Ð$ d¤jÑ$Ô$Ð$Ø�AŒw˜$œ+Ò%Ð%Ð% t¤{Ñ%Ô%Ð%Øð 	1Ø˜”7˜dœhÒ&Ð&Ð&¨¬Ñ&Ô&Ð&ð	1ð 	1Ø&Ð&r}   c                 óN  — | j         t          t          t          hv sJ | j         ¦   «         ‚t	          | j         t
          j        ¦  «        s
J | ¦   «         ‚| j         t          k    r‹t          j        | j         | j        ¦  «        5 }	 | 	                    | j
        d         df¦  «         n-# t          $ r }|j        t          j        k    r‚ Y d }~nd }~ww xY wd d d ¦  «         d S # 1 swxY w Y   d S | j         t          k    r$| j        t          j        k    sJ | j        ¦   «         ‚d S d S rô  )r  r   r   r¼   r2  r5  r6  r  r  r  r?  rJ  ÚerrnoÚEADDRNOTAVAILr  r®   Ú	CONN_NONE)r$  r  rL  s      r{   Úcheck_familyz-check_connection_ntuple.<locals>.check_family   ss  € ØŒ{�w­µ'Ð:Ð:Ð:Ð:¸D¼KÑ:Ô:Ð:Ý˜$œ+¥t¤|Ñ4Ô4Ð:Ð:°dÑ:Ô:Ð:ØŒ;�'Ò!Ð!õ
 ”˜tœ{¨D¬IÑ6Ô6ð ¸!ðØ—F’F˜DœJ qœM¨1Ð-Ñ.Ô.Ð.Ð.øÝð ð ð Ø”y¥EÔ$7Ò7Ð7Øð 8Ð7Ð7Ð7Ð7øøøøðøøøðð ð ñ ô ð ð ð ð ð ð ð øøøð ð ð ð ð ð ð Œ[�GÒ#Ð#Ø”;¥&Ô"2Ò2Ð2Ð2°D´KÑ2Ô2Ð2ð $Ð#Ø2Ð2s<   ÂC"Â"B(Â'C"Â(
CÂ2CÃC"ÃCÃC"Ã"C&Ã)C&c                 óp  — t          t          dt          ¦   «         ¦  «        }| j        t          j        t          j        |hv sJ | j        ¦   «         ‚t          | j        t          j        ¦  «        s
J | ¦   «         ‚| j        t          j        k    r$| j	        t          j        k    sJ | j	        ¦   «         ‚d S d S )NÚSOCK_SEQPACKET)r§   r  Úobjectr  r   r+  r2  r5  r6  r  r®   rF  )r$  rI  s     r{   Ú
check_typez+check_connection_ntuple.<locals>.check_type1  s¸   € å ¥Ð)9½6¹8¼8ÑDÔDˆØŒyÝÔÝÔØð
ð 
ð 
ð 
ð Œ9ñ	
ô 
ð 
õ
 ˜$œ)¥T¤\Ñ2Ô2Ð8Ð8°DÑ8Ô8Ð8ØŒ9�Ô)Ò)Ð)Ø”;¥&Ô"2Ò2Ð2Ð2°D´KÑ2Ô2Ð2ð *Ð)Ø2Ð2r}   c                 ó  — | j         | j        fD ]ö}| j        t          t          hv r£t          |t          ¦  «        sJ t          |¦  «        ¦   «         ‚|sŒFt          |j        t          ¦  «        sJ t          |j        ¦  «        ¦   «         ‚d|j        cxk    rdk    sn J |j        ¦   «         ‚t          |j        | j        ¦  «         Œº| j        t          k    r,t          |t          ¦  «        sJ t          |¦  «        ¦   «         ‚Œ÷d S )Nr   iÿÿ  )r?  r@  r  r   r   r2  rq   r  Úportrs   rR   Úipr¼   r3  )r$  r  s     r{   Úcheck_addrsz,check_connection_ntuple.<locals>.check_addrs=  s  € à”Z ¤Ð,ð 		9ð 		9ˆDØŒ{�w­Ð1Ð1Ð1Ý! $­Ñ.Ô.Ð:Ð:µ°T±
´
Ñ:Ô:Ð:Øð ØÝ! $¤)­SÑ1Ô1ÐBÐBµ4¸¼	±?´?ÑBÔBÐBØ˜DœIÐ.Ð.Ò.Ð.¨Ò.Ð.Ð.Ð.Ð.°´	Ñ.Ô.Ð.Ý! $¤'¨4¬;Ñ7Ô7Ð7Ð7Ø”¥Ò'Ð'Ý! $­Ñ,Ô,Ð8Ð8­d°4©j¬jÑ8Ô8Ð8øð		9ð 		9r}   c                 ó¢  — t          | j        t          ¦  «        sJ | j        ¦   «         ‚d„ t          t          ¦  «        D ¦   «         }| j        |v sJ | j        ¦   «         ‚| j        t          t          hv r6| j        t          k    r&| j        t          j
        k    sJ | j        ¦   «         ‚d S | j        t          j
        k    sJ | j        ¦   «         ‚d S )Nc                 ób   — g | ],}|                      d ¦  «        ¯t          t          |¦  «        ‘Œ-S )ÚCONN_r¶   r¸   s     r{   r»   zAcheck_connection_ntuple.<locals>.check_status.<locals>.<listcomp>L  sC   € ð 
ð 
ð 
Ø#$°q·|²|ÀGÑ7LÔ7Lð
Ý•F˜AÑÔð
ð 
ð 
r}   )r2  r  r3  rø   r®   r  r   r   r  r   rF  )r$  Úvalidss     r{   Úcheck_statusz-check_connection_ntuple.<locals>.check_statusJ  sÑ   € Ý˜$œ+¥sÑ+Ô+Ð8Ð8¨T¬[Ñ8Ô8Ð8ð
ð 
Ý(+­F©¬ð
ñ 
ô 
ˆð Œ{˜fÐ$Ð$Ð$ d¤kÑ$Ô$Ð$ØŒ;�7¥HÐ-Ð-Ð-°$´)½{Ò2JÐ2JØ”;¥&Ô"2Ò2Ð2Ð2°D´KÑ2Ô2Ð2Ð2Ð2à”;¥&Ô"2Ò2Ð2Ð2°D´KÑ2Ô2Ð2Ð2Ð2r}   Nr�  )r$  rB  rG  rK  rO  rT  s         r{   Úcheck_connection_ntuplerU    s®   € ð
1ð 
1ð 
1ð@ð @ð @ð"
@ð 
@ð 
@ð9ð 9ð 9ð	@ð 	@ð 	@ð €L�ÑÔÐØ€L�ÑÔÐØ€JˆtÑÔÐØ€K�ÑÔÐØ€L�ÑÔÐÐÐr}   c                 ó¼   — g }| D ]V}t           r8|j        t          j        k    r#t          rd|j        v rt          d|› �¦  «         ŒA|                     |¦  «         ŒW|S )ztOur process may start with some open UNIX sockets which are not
    initialized by us, invalidating unit tests.
    z/syslogz	skipping )r   r  r  r¼   r   r@  r   rL  )ÚconsÚnewr$  s      r{   rS   rS   \  sv   € ð €CØð ð ˆÝð 	�T”[¥F¤NÒ2Ð2Ýð ˜ d¤jÐ0Ð0ÝÐ( $Ð(Ð(Ñ)Ô)Ð)ØØ�
Š
�4ÑÔÐÐØ€Jr}   c                 ó*   — t          j        | ¦  «        S rÒ   )Ú	importlibÚreload)Úmodules    r{   rZ   rZ   o  s   € ÝÔ˜FÑ#Ô#Ð#r}   c                 ó<  — t           j                             t           j                             | ¦  «        ¦  «        d         }t          j                             || ¦  «        }t          j                             |¦  «        }|j         	                    |¦  «         |S rô  )
r¥   r©   Úsplitextr  rZ  ÚutilÚspec_from_file_locationÚmodule_from_specÚloaderÚexec_module)r©   rÏ   ÚspecÚmods       r{   r[   r[   s  ss   € ÝŒ7×Ò�BœG×,Ò,¨TÑ2Ô2Ñ3Ô3°AÔ6€DÝŒ>×1Ò1°$¸Ñ=Ô=€DÝ
Œ.×
)Ò
)¨$Ñ
/Ô
/€CØ„K×Ò˜CÑ Ô Ð Ø€Jr}   c                 ó>   — t          j        | t          d¬¦  «         dS )zRaise a warning msg.rg   r²  N)r¸  r\   r¹  )rÌ  s    r{   r\   r\   €  s   € å„M�#•{¨qÐ1Ñ1Ô1Ð1Ð1Ð1r}   c                 óø   — t          | ¦  «        }|j        }t          |¦  «        dk    s|d         t          urdS t	          |dd¦  «        }t          |t          ¦  «        sdS t          d„ |D ¦   «         ¦  «        S )z-Check if object is an instance of namedtuple.ra  r   FÚ_fieldsNc              3   ó@   K  — | ]}t          |t          ¦  «        V — Œd S rÒ   )r2  r3  )r¹   Úns     r{   rw  z is_namedtuple.<locals>.<genexpr>Ž  s,   è è € Ð-Ð- a�z˜!�SÑ!Ô!Ð-Ð-Ð-Ð-Ð-Ð-r}   )r  Ú	__bases__re  rq   r§   r2  r  )rº   ÚtÚbr,  s       r{   r^   r^   …  s{   € åˆQ‰Œ€AØ	Œ€AÝ
ˆ1�v„v�‚{€{�a˜”d¥%Ð'Ð'ØˆuÝ��9˜dÑ#Ô#€AÝ�a�ÑÔð ØˆuÝÐ-Ð-¨1Ð-Ñ-Ô-Ñ-Ô-Ð-r}   c              #   ó|  ‡‡K  — t           rdndŠdŠt          | ‰z   ¬¦  «        }ˆˆfd„t          j        ¦   «                              ¦   «         D ¦   «         }t          j        |¦  «        }t          j        ||¦  «         	 t          j
        |¦  «         |V — t          |¦  «         dS # t          |¦  «         w xY w)zÂCtx manager which picks up a random shared CO lib used
        by this process, copies it in another location and loads it
        in memory via ctypes. Return the new absolutized path.
        Úpypyrg  z.sor¦  c                 ó°   •— g | ]R}t           j                             |j        ¦  «        d          ‰k    ¯0‰|j                             ¦   «         v ¯K|j        ‘ŒSS )ra  )r¥   r©   r^  Úlower)r¹   rº   r    Úexts     €€r{   r»   z'copyload_shared_lib.<locals>.<listcomp>œ  s[   ø€ ð 
ð 
ð 
àÝŒw×Ò ¤Ñ'Ô'¨Ô*¨cÒ1Ð1°c¸Q¼V¿\º\¹^¼^Ð6KÐ6Kð ŒFà6KÐ6KÐ6Kr}   N)r   rL   r®   r¯   r�   r²  r³  r«   r¡  ÚctypesÚCDLLrI   )r§  ÚdstÚlibsr!  r    rr  s       @@r{   r]   r]   “  sÛ   øøè è € õ Ð*ˆfˆf (ˆØˆÝ ¨¡Ð-Ñ-Ô-ˆð
ð 
ð 
ð 
ð 
å”^Ñ%Ô%×1Ò1Ñ3Ô3ð
ñ 
ô 
ˆõ
 Œm˜DÑ!Ô!ˆÝŒ˜˜SÑ!Ô!Ð!ð	ÝŒK˜ÑÔÐØˆIˆIˆIå˜ÑÔÐÐÐø�K˜ÑÔÐÐøøøs   ÂB* Â*B;c              #   ó  ‡	K  — ddl m} ddl m} dŠ	t          | ‰	z   ¬¦  «        }ˆ	fd„t	          j        ¦   «                              ¦   «         D ¦   «         }t          r1|s/d„ t	          j        ¦   «                              ¦   «         D ¦   «         }t          j	        |¦  «        }t          j        ||¦  «         d}	 t          j        |¦  «        }|V — |�Ct           j        j        j        }|j        g|_         ||j        ¦  «        }|dk    r
 |¦   «         ‚t'          |¦  «         dS # |�Ct           j        j        j        }|j        g|_         ||j        ¦  «        }|dk    r
 |¦   «         ‚t'          |¦  «         w xY w)	zÖCtx manager which picks up a random shared DLL lib used
        by this process, copies it in another location and loads it
        in memory via ctypes.
        Return the new absolutized, normcased path.
        r   )ÚWinError)Úwintypesz.dllr¦  c                 ó  •— g | ]ˆ}|j                              ¦   «                              ‰¦  «        rZd t          j                              |j         ¦  «                             ¦   «         v r"d|j                              ¦   «         v¯�|j         ‘Œ‰S )rg  Úwow64)r©   rq  r8  r¥   r  )r¹   rº   rr  s     €r{   r»   z'copyload_shared_lib.<locals>.<listcomp>·  s‡   ø€ ð 
ð 
ð 
àØŒv�|Š|‰~Œ~×&Ò& sÑ+Ô+ð
ð �BœG×,Ò,¨Q¬VÑ4Ô4×:Ò:Ñ<Ô<Ð<Ð<Ø˜qœvŸ|š|™~œ~Ð-Ð-ð	 ŒFð .Ð-Ð-r}   c                 óŒ   — g | ]A}d t           j                             |j        ¦  «                             ¦   «         v ¯:|j        ‘ŒBS )ro  )r¥   r©   r  rq  r¸   s     r{   r»   z'copyload_shared_lib.<locals>.<listcomp>¿  sM   € ð ð ð àØ�RœW×-Ò-¨a¬fÑ5Ô5×;Ò;Ñ=Ô=Ð=Ð=ð ”à=Ð=Ð=r}   N)rs  rx  ry  rL   r®   r¯   r�   r   r²  r³  r«   r¡  ÚWinDLLÚwindllÚkernel32ÚFreeLibraryÚHMODULEÚargtypesÚ_handlerI   )
r§  rx  ry  ru  rv  r!  Úcfiler€  r‹  rr  s
            @r{   r]   r]   «  sÅ  øè è € ð 	$Ð#Ð#Ð#Ð#Ð#Ø#Ð#Ð#Ð#Ð#Ð#àˆÝ ¨¡Ð-Ñ-Ô-ˆð
ð 
ð 
ð 
å”^Ñ%Ô%×1Ò1Ñ3Ô3ð
ñ 
ô 
ˆõ ð 	˜ð 	ðð åœÑ)Ô)×5Ò5Ñ7Ô7ðñ ô ˆDõ
 Œm˜DÑ!Ô!ˆÝŒ˜˜SÑ!Ô!Ð!Øˆð	Ý”M #Ñ&Ô&ˆEØˆIˆIˆIð Ð Ý$œmÔ4Ô@�Ø(0Ô(8Ð'9�Ô$Ø!�k %¤-Ñ0Ô0�Ø˜!’8�8Ø"˜(™*œ*Ð$Ý˜ÑÔÐÐÐøð Ð Ý$œmÔ4Ô@�Ø(0Ô(8Ð'9�Ô$Ø!�k %¤-Ñ0Ô0�Ø˜!’8�8Ø"˜(™*œ*Ð$Ý˜ÑÔÐÐøøøs   Â:D( Ä(AE>c                  ó&   — t          d¬¦  «         d S )NTrY  )r8   r�  r}   r{   Úcleanup_test_procsr†  ß  s   € å˜DÐ!Ñ!Ô!Ð!Ð!Ð!r}   c                 ó*   — t          j        | ¦  «        S rÒ   )rw   Úexit)rE  r%  s     r{   r  r  é  s   € µ´¸#±´€ r}   rÒ   )F)TFr  )r  )r  rç  )¶rç   rŸ  rÎ  rs  r5  rD  rï   rD  rZ  r7  r¥   ro   r²  rÈ  r  r4  r«   rA  r  r�  ru   rw   r­  r	  rÄ   rà   r=   r¸  r   r   r   r¨  r‚  r®   r   r   r   r	   r
   r   r   r   Úpsutil._commonr   r   r   r   r   Úpsutil._psposixr   Ú__all__Úbuiltin_module_namesr   r�   r`   r    r3   r5   Úmaxsizer#   r‹  r4   r|   r1   r2   r   r   r"   r   rÏ   r™  r   r   Údecoder   r�  rq  ÚASCII_FSr©   rª   rä   rœ  Ú__file__r   Úgetr   r¶  r‡  r¯   r$   r%   r&   r  r(   r)   r0   ÚHAS_NET_IO_COUNTERSr*   r'   r+   r,   r]  r•   r-   rë   r.   r/   ÚHAS_THREADSÚgetuidÚSKIP_SYSCONSr³   r   r   r)  Údevnullr   r   r  rø   r!   r§   rJ  r¼   rß   rÿ   r  rÜ   r<   rñ   r9   r;   r:   r6   r;  rë  r7   r8   rN   rM   rq  r>  rP   rŽ  rÇ  rQ   rO   rI   rš  rÏ  rH   rJ   rK   rL   rG   rÒ  rB   ré  rà  rA   rE   rF   r´  rC   rD   r@   r>   r?   rT   rU   rV   rW   rX   rY   rR   rU  rS   rZ   r[   r\   r^   r]   r†  r�  r}   r{   ú<module>r—     sœ  ðð
 Ð ð €€€Ø Ð Ð Ð Ø €€€Ø €€€Ø €€€Ø Ð Ð Ð Ø 	€	€	€	Ø Ð Ð Ð Ø Ð Ð Ð Ø 	€	€	€	Ø €€€Ø €€€Ø 	€	€	€	Ø €€€Ø €€€Ø €€€Ø €€€Ø €€€Ø €€€Ø Ð Ð Ð Ø 
€
€
€
Ø €€€Ø €€€Ø Ð Ð Ð Ø €€€Ø €€€Ø €€€Ø Ð Ð Ð Ð Ð Ø Ð Ð Ð Ð Ð Ø Ð Ð Ð Ð Ð ðØ€M€M€M€MøØð ð ð Ø€F€F€Fðøøøð €€€Ø Ð Ð Ð Ð Ð Ø Ð Ð Ð Ð Ð Ø Ð Ð Ð Ð Ð Ø Ð Ð Ð Ð Ð Ø Ð Ð Ð Ð Ð Ø Ð Ð Ð Ð Ð Ø Ð Ð Ð Ð Ð Ø Ð Ð Ð Ð Ð Ø &Ð &Ð &Ð &Ð &Ð &Ø  Ð  Ð  Ð  Ð  Ð  Ø "Ð "Ð "Ð "Ð "Ð "Ø &Ð &Ð &Ð &Ð &Ð &Ø (Ð (Ð (Ð (Ð (Ð (ð 	ð )Ø(Ð(Ð(Ð(Ð(Ð(ð#ð #ð #€ðZ �SÔ-Ð-€à! R¤ZÐ/ÐO°>ÀRÄZÐ3O€Ø€
Ø˜RœZÐ'€Ø'¨2¬:Ð5€àŒ;˜Ò€Ø
ˆ(Ô
Ñ
Ô
 	Ò
)€ð 	ðð ñ 	„ðð( 	ð Ø �=‘?”? XÒ-€LØ �=‘?”? gÒ-€L€Là€LØ€Lð €
à#Ð Ø'Ð à€àð Ø�!�O€JØ�aÑ€NØ˜ÑÐØ˜AÑÐð
 „7ˆfÒÐà-˜y˜rœy™{œ{Ð-Ð-Ð-€M€Mà-˜y˜rœy™{œ{Ð-Ð-Ð-€MØ€à%×,Ò,¨VÐ5FÑGÔGÐ Ø$ˆ3Ô$Ñ&Ô&×,Ò,Ñ.Ô.Ð2GÐG€ð Œ7×ÒØ„G‡L‚L�”—’ Ñ*Ô*¨D°$Ñ7Ô7ñô €ð Œj�nŠnØ˜"œ'Ÿ,š, x°Ñ;Ô;ñô €ð 
„w×Ò˜œŸš¨Ñ1Ô1Ñ2Ô2€ð �7˜6œ>¨>Ñ:Ô:Ð Øˆw�v˜zÑ*Ô*€Øˆg�f”n iÑ0Ô0€Ø�˜ Ñ.Ô.€ØˆW�V”^ XÑ.Ô.€
Ø�'˜&œ.¨-Ñ8Ô8€Ø Ð.¨ YÐ Ø�g˜fÐ&7Ñ8Ô8Ð Ø�7˜6œ>¨9Ñ5Ô5Ð Ø�w˜vœ~¨}Ñ=Ô=Ð ØˆW�V”^ XÑ.Ô.€
Ø�g˜fÐ&7Ñ8Ô8Ð ðØ%ÐH¨$¨$Ð/E¨vÔ/EÑ/GÔ/GÑ*HÔ*H€K€KøØð ð ð Ø€K€K€Kðøøøà�7˜6 >Ñ2Ô2Ð Ø"˜7 6Ð+AÑBÔBÐ Øˆg�f”n iÑ0Ô0€Ø�˜Ð2 ) "¤)¡+¤+°Ò"2€ð
)ð )ð )ðX )˜[™]œ]Ñ €
ˆNØ
ˆ$ˆrŒz˜4Ñ
 Ô
 €Ø €„�”Ñ Ô Ð ðð Ø #  F¡¤ðñ ô Ð ð ˆ'�&˜) V V¡X¤XÑ
.Ô
.€à˜™œÐ Ø�‘”€ð(ð (ð (ð (ð (�Ô!ñ (ô (ð (ð`	ð 	ð 	ð ð&ð &ð &ñ Ôð&ðR ð#ð #ñ Ôð#ðL&ð &ð &ðR ðð ñ Ôðð& ðð ñ Ôðð0  &œ~¸Nð Q/ð Q/ð Q/ð Q/ðh-ð -ð -ð -ðJ!ð !ð !ð0ð ð ð6ð 6ð 6ð 6ð 6ñ 6ô 6ð 6ðr €ØÔ"ØØØð	ñ ô ðð ñô ðð €Ø  .Ð1ØØØð	ñ ô ðð ð ñô ðð €ØØØØð	ñ ô ðð ñô ððð ð ðDð ð ð Ôðð ñ Ôððð ð ðð ð ð ð4ð ð ð ð&J#ð J#ð J#ð J#ð J#ñ J#ô J#ð J#ðZ 
€>Ø€FðBð Bð Bð Bð B�XÔ&ñ Bô Bð Bð` „×Ò�DÐ!5ÐÑ6Ô6ðb%ð b%ð b%ð b%ð b%�^ñ b%ô b%ñ 7Ô6ðb%ðJið ið iðXð ð ð$ð ð ðFLð FLð FLð FLð FLñ FLô FLð FLðRC@ð C@ð C@ð C@ð C@ñ C@ô C@ð C@ðL (ð 
ð 
ð 
ð 
ðð ð ð ð&ð ð ð ð:%ð %ð %ð %ð  [°tð ð ð ð ð" !'Ô 2ð ð ð ð ðð ð ð ð.ð ð ð. Ôð#ð #ñ Ôð#ð<7ð 7ð 7ð(Hð Hð HðVð ð ð&$ð $ð $ðð ð ð2ð 2ð 2ð
	.ð 	.ð 	.ð 	ð EàÔðð ð ñ Ôðð ð. Ôð*ð *ð *ñ Ôð*ðf „ð"ð "ñ „ð"ð 	ð @Ø€F„M�&”.Ð">Ð">Ñ?Ô?Ð?Ð?Ð?ð@ð @s$   ÂB ÂBÂBÍM2 Í2M<Í;M<