Ë
    íéñi¦b  ã            
       óð  — 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m
Z
 ddlmZ ddlmZ 	 ddlmZ 	 ddlmZ  e ej"                  d«      «      Z e«       Zg d	¢Zej,                  d
k(  Zej,                  dk(  Zej2                  j5                  d«      Zej2                  j5                  d«      ZeZej2                  j5                  d«      Zej2                  j5                  d«      Zej2                  j5                  d«      Z exs exs e Z!ej2                  j5                  d«      Z"ej2                  j5                  d«      Z#dZ$dZ%dZ&dZ'dZ(dZ)dZ*dZ+dZ,dZ-dZ.dZ/dZ0d Z1d!Z2d"Z3d#Z4d$Z5d%Z6d&Z7d'Z8d(Z9d)Z:d*Z;d+Z<d,Z= G d-„ d.ej|                  «      Z? e@«       jƒ                  e?j„                  «        G d/„ d0ej|                  «      ZC e@«       jƒ                  eCj„                  «        ejˆ                  «       ZE ejŒ                  «       ZGe
eegeegfe
egegfe
gegfe
egegfe
gegfe
egeegfe
geegfegeegfd1œZHe�eHjƒ                  egegfegegfd2œ«       e�e"seHjƒ                  d3egeegfi«        G d4„ d5eI«      ZJ G d6„ d7eJ«      ZK G d8„ d9eK«      ZL G d:„ d;eJ«      ZM G d<„ d=eJ«      ZNdZd>„ZOd?„ ZPd@„ ZQdA„ ZRdB„ ZSdC„ ZTdD„ ZUdE„ ZVdF„ ZWdZdG„ZXdH„ ZYdI„ ZZ G dJ„ dK«      Z[dL„ Z\ e[«       Z]e]j¼                  e\_^        e]j¾                  e\__        dMZ`dN„ ZadO„ ZbeebfdP„ZcefdQ„Zdd[dR„ZedS„ ZfdT„ ZgePejÐ                  fdU„«       Zid\dW„ZjddVejÐ                  fdX„ZkdY„ Zly# e$ r dZY �Œ&w xY w# e$ r dZY �Œ-w xY w)]z�Common objects shared by __init__.py and _ps*.py modules.

Note: this module is imported by setup.py, so it should not import
psutil or third-party modules.
é    N)ÚAF_INET)Ú
SOCK_DGRAM)ÚSOCK_STREAM)ÚAF_INET6)ÚAF_UNIXÚPSUTIL_DEBUG)?ÚFREEBSDÚBSDÚLINUXÚNETBSDÚOPENBSDÚMACOSÚOSXÚPOSIXÚSUNOSÚWINDOWSÚ
CONN_CLOSEÚCONN_CLOSE_WAITÚCONN_CLOSINGÚCONN_ESTABLISHEDÚCONN_FIN_WAIT1ÚCONN_FIN_WAIT2ÚCONN_LAST_ACKÚCONN_LISTENÚ	CONN_NONEÚCONN_SYN_RECVÚCONN_SYN_SENTÚCONN_TIME_WAITÚNIC_DUPLEX_FULLÚNIC_DUPLEX_HALFÚNIC_DUPLEX_UNKNOWNÚSTATUS_DEADÚSTATUS_DISK_SLEEPÚSTATUS_IDLEÚSTATUS_LOCKEDÚSTATUS_RUNNINGÚSTATUS_SLEEPINGÚSTATUS_STOPPEDÚSTATUS_SUSPENDEDÚSTATUS_TRACING_STOPÚSTATUS_WAITINGÚSTATUS_WAKE_KILLÚSTATUS_WAKINGÚSTATUS_ZOMBIEÚSTATUS_PARKEDÚENCODINGÚENCODING_ERRSr   Ú	conn_tmapÚdeprecated_methodÚisfile_strictÚmemoizeÚparse_environ_blockÚpath_exists_strictÚusage_percentÚsupports_ipv6Úsockfam_to_enumÚsocktype_to_enumÚwrap_numbersÚ	open_textÚopen_binaryÚcatÚbcatÚbytes2humanÚconn_to_ntupleÚdebugÚhiliteÚterm_supports_colorsÚprint_colorÚposixÚntÚlinuxÚdarwin)ÚfreebsdÚmidnightbsdÚopenbsdÚnetbsd)ÚsunosÚsolarisÚaixÚrunningÚsleepingz
disk-sleepÚstoppedztracing-stopÚzombieÚdeadz	wake-killÚwakingÚidleÚlockedÚwaitingÚ	suspendedÚparkedÚESTABLISHEDÚSYN_SENTÚSYN_RECVÚ	FIN_WAIT1Ú	FIN_WAIT2Ú	TIME_WAITÚCLOSEÚ
CLOSE_WAITÚLAST_ACKÚLISTENÚCLOSINGÚNONEc                   ó   — e Zd ZdZdZdZy)Ú	NicDuplexé   é   r   N)Ú__name__Ú
__module__Ú__qualname__r   r    r!   © ó    úP/var/www/pod-logistic/pod-ai/venv/lib/python3.12/site-packages/psutil/_common.pyrj   rj   z   s   „ Ø€OØ€OØÑrq   rj   c                   ó   — e Zd ZdZdZy)ÚBatteryTimeéÿÿÿÿéþÿÿÿN)rm   rn   ro   ÚPOWER_TIME_UNKNOWNÚPOWER_TIME_UNLIMITEDrp   rq   rr   rt   rt   „   s   „ ØÐØÑrq   rt   )ÚallÚtcpÚtcp4ÚudpÚudp4ÚinetÚinet4Úinet6)Útcp6Úudp6Úunixc                   ó&   — e Zd ZdZdZd„ Zd„ Zd„ Zy)ÚErrorzQBase exception class. All other psutil exceptions inherit
    from this one.
    Úpsutilc                 ó|   — t        j                  «       }|D ]"  }t        | |d «      }|s|dk(  sŒ|dk(  sŒ|||<   Œ$ |S )NÚpidr   )ÚcollectionsÚOrderedDictÚgetattr)ÚselfÚattrsÚinfoÚnameÚvalues        rr   Ú	_infodictzError._infodict·   sL   € Ü×&Ñ&Ó(ˆØò 	#ˆDÜ˜D $¨Ó-ˆEÙ˜ ›¨5°A«:Ø"��T’
ð	#ð ˆrq   c                 ó.  — | j                  d«      }|rGdj                  dj                  |j                  «       D ��cg c]  \  }}|› d|›�‘Œ c}}«      «      }nd }dj                  t	        | dd«      |fD �cg c]  }|sŒ|‘Œ	 c}«      S c c}}w c c}w )N)rˆ   Úppidr�   z({})ú, ú=ú ÚmsgÚ )r‘   ÚformatÚjoinÚitemsr‹   )rŒ   rŽ   ÚkÚvÚdetailsÚxs         rr   Ú__str__zError.__str__¿   sŠ   € à�~‰~Ð5Ó6ˆÙØ—m‘mØ—	‘	°D·J±J³L×A©D¨A¨q˜a˜S  ! š<ÓAÓBó‰Gð ˆGØ�x‰x¤W¨T°5¸"Ó%=¸wÐ$GÖM˜qÊ1šÒMÓNÐNùó	 Bùò Ns   ½BÁ9BÂBc           	      óØ   — | j                  d«      }dj                  |j                  «       D ��cg c]  \  }}|› d|›�‘Œ c}}«      }d| j                  j                  › d|› d�S c c}}w )N)rˆ   r“   r�   Úsecondsr—   r”   r•   zpsutil.ú(ú))r‘   rš   r›   Ú	__class__rm   )rŒ   rŽ   rœ   r�   rž   s        rr   Ú__repr__zError.__repr__Ê   sd   € à�~‰~ÐGÓHˆØ—)‘)°d·j±j³l×C©d¨a° ˜s ! A 5š\ÓCÓDˆØ˜Ÿ™×0Ñ0Ð1°°7°)¸1Ð=Ð=ùó Ds   °A&
N)rm   rn   ro   Ú__doc__r‘   r    r¦   rp   rq   rr   r…   r…   °   s   „ ñð €Jòò	Oó>rq   r…   c                   ó"   — e Zd ZdZdZdd„Zd„ Zy)ÚNoSuchProcesszXException raised when a process with a certain PID doesn't
    or no longer exists.
    r†   Nc                 ó`   — t         j                  | «       || _        || _        |xs d| _        y )Nzprocess no longer exists©r…   Ú__init__rˆ   r�   r—   ©rŒ   rˆ   r�   r—   s       rr   r¬   zNoSuchProcess.__init__Ø   s)   € Ü�‰�tÔØˆŒØˆŒ	ØÒ4Ð4ˆ�rq   c                 ó`   — | j                   | j                  | j                  | j                  ffS ©N©r¥   rˆ   r�   r—   ©rŒ   s    rr   Ú
__reduce__zNoSuchProcess.__reduce__Þ   ó$   € Ø—‘ §¡¨4¯9©9°d·h±hÐ ?Ð@Ð@rq   ©NN©rm   rn   ro   r§   r¬   r²   rp   rq   rr   r©   r©   Ñ   s   „ ñð €Jó5óArq   r©   c                   ó"   — e Zd ZdZdZdd„Zd„ Zy)ÚZombieProcessa1  Exception raised when querying a zombie process. This is
    raised on macOS, BSD and Solaris only, and not always: depending
    on the query the OS may be able to succeed anyway.
    On Linux all zombie processes are querable (hence this is never
    raised). Windows doesn't have zombie processes.
    r†   Nc                 óX   — t         j                  | |||«       || _        |xs d| _        y )Nz"PID still exists but it's a zombie)r©   r¬   r“   r—   )rŒ   rˆ   r�   r“   r—   s        rr   r¬   zZombieProcess.__init__ì   s*   € Ü×Ñ˜t S¨$°Ô4ØˆŒ	ØÒ>Ð>ˆ�rq   c                 óv   — | j                   | j                  | j                  | j                  | j                  ffS r¯   )r¥   rˆ   r�   r“   r—   r±   s    rr   r²   zZombieProcess.__reduce__ñ   s*   € Ø—‘ §¡¨4¯9©9°d·i±iÀÇÁÐ JÐKÐKrq   ©NNNrµ   rp   rq   rr   r·   r·   â   s   „ ñð €Jó?ó
Lrq   r·   c                   ó"   — e Zd ZdZdZdd„Zd„ Zy)ÚAccessDeniedz@Exception raised when permission to perform an action is denied.r†   Nc                 ó`   — t         j                  | «       || _        || _        |xs d| _        y )Nr˜   r«   r­   s       rr   r¬   zAccessDenied.__init__ú   s'   € Ü�‰�tÔØˆŒØˆŒ	Ø’9˜"ˆ�rq   c                 ó`   — | j                   | j                  | j                  | j                  ffS r¯   r°   r±   s    rr   r²   zAccessDenied.__reduce__   r³   rq   rº   rµ   rp   rq   rr   r¼   r¼   õ   s   „ ÙJà€JóóArq   r¼   c                   ó"   — e Zd ZdZdZdd„Zd„ Zy)ÚTimeoutExpiredzWRaised on Process.wait(timeout) if timeout expires and process
    is still alive.
    r†   Nc                 ón   — t         j                  | «       || _        || _        || _        d|› d�| _        y )Nztimeout after z seconds)r…   r¬   r¢   rˆ   r�   r—   )rŒ   r¢   rˆ   r�   s       rr   r¬   zTimeoutExpired.__init__  s3   € Ü�‰�tÔØˆŒØˆŒØˆŒ	Ø# G 9¨HÐ5ˆ�rq   c                 ó`   — | j                   | j                  | j                  | j                  ffS r¯   )r¥   r¢   rˆ   r�   r±   s    rr   r²   zTimeoutExpired.__reduce__  s$   € Ø—‘ §¡¨t¯x©x¸¿¹Ð CÐDÐDrq   r´   rµ   rp   rq   rr   rÀ   rÀ     s   „ ñð €Jó6óErq   rÀ   c                 ód   — 	 t        | «      |z  dz  }|�t        ||«      }|S # t        $ r Y yw xY w)z5Calculate percentage usage of 'used' against 'total'.éd   g        )ÚfloatÚroundÚZeroDivisionError)ÚusedÚtotalÚround_Úrets       rr   r8   r8     sG   € ðÜ�T‹{˜UÑ" cÑ)ˆð ÐÜ˜˜VÓ$ˆCØˆ
øô ò Ùðús   ‚# £	/®/c                 ób   ‡ ‡— t        j                  ‰ «      ˆˆ fd„«       }ˆfd„}i Š||_        |S )a¹  A simple memoize decorator for functions supporting (hashable)
    positional arguments.
    It also provides a cache_clear() function for clearing the cache:

    >>> @memoize
    ... def foo()
    ...     return 1
        ...
    >>> foo()
    1
    >>> foo.cache_clear()
    >>>

    It supports:
     - functions
     - classes (acts as a @singleton)
     - staticmethods
     - classmethods

    It does NOT support:
     - methods
    c                  óÀ   •— | t        t        |j                  «       «      «      f}	 ‰|   S # t        $ r( 	  ‰| i |¤Žx}‰|<   n# t        $ r}|d ‚d }~ww xY w|cY S w xY wr¯   )Ú	frozensetÚsortedr›   ÚKeyErrorÚ	Exception)ÚargsÚkwargsÚkeyrË   ÚerrÚcacheÚfuns        €€rr   Úwrapperzmemoize.<locals>.wrapper?  su   ø€ à”Yœv f§l¡l£nÓ5Ó6Ð7ˆð	Ø˜‘:ÐøÜò 	ð$Ù#&¨Ð#7°Ñ#7Ð7��e˜C’jøÜò $Ø˜tÐ#ûð$úàŠJð	ús2   §, ¬	A¶AÁAÁ	AÁAÁAÁAÁAc                  ó&   •— ‰ j                  «        y)zClear cache.N)Úclear)rÖ   s   €rr   Úcache_clearzmemoize.<locals>.cache_clearK  s   ø€ à�‰�rq   )Ú	functoolsÚwrapsrÛ   )r×   rØ   rÛ   rÖ   s   `  @rr   r5   r5   '  s9   ù€ ô0 ‡_�_�SÓô	ó ð	ôð €EØ%€GÔØ€Nrq   c                 ój   ‡ — t        j                  ‰ «      ˆ fd„«       }d„ }d„ }||_        ||_        |S )aú  A memoize decorator which is disabled by default. It can be
    activated and deactivated on request.
    For efficiency reasons it can be used only against class methods
    accepting no arguments.

    >>> class Foo:
    ...     @memoize
    ...     def foo()
    ...         print(1)
    ...
    >>> f = Foo()
    >>> # deactivated (default)
    >>> foo()
    1
    >>> foo()
    1
    >>>
    >>> # activated
    >>> foo.cache_activate(self)
    >>> foo()
    1
    >>> foo()
    >>> foo()
    >>>
    c                 ó  •— 	 | j                   ‰   }|S # t        $ r  	  ‰| «      cY S # t        $ r}|d ‚d }~ww xY wt        $ rC 	  ‰| «      }n# t        $ r}|d ‚d }~ww xY w	 || j                   ‰<   Y |S # t        $ r Y Y |S w xY ww xY wr¯   )Ú_cacheÚAttributeErrorrÑ   rÐ   )rŒ   rË   rÕ   r×   s      €rr   rØ   z'memoize_when_activated.<locals>.wrappero  s¸   ø€ ð	à—+‘+˜cÑ"ˆCð( ˆ
øô' ò 	$ð$Ù˜4“yÒ øÜò $Ø˜tÐ#ûð$úäò 	ð$Ù˜$“i‘øÜò $Ø˜tÐ#ûð$úðØ#&�—‘˜CÒ ð
 ˆ
øô	 "ò ñ Øˆ
ð	úð	úse   ƒ ”	Bž(¥B¨	9±4´9¹BÁAÁBÁ	AÁAÁAÁBÁ#A5Á5	BÁ>BÂBÂBc                 ó   — i | _         y)zsActivate cache. Expects a Process instance. Cache will be
        stored as a "_cache" instance attribute.
        N)rà   ©Úprocs    rr   Úcache_activatez.memoize_when_activated.<locals>.cache_activate‰  s   € ð ˆ�rq   c                 ó(   — 	 | ` y# t        $ r Y yw xY w)zDeactivate and clear cache.N)rà   rá   rã   s    rr   Úcache_deactivatez0memoize_when_activated.<locals>.cache_deactivate�  s   € ð	Ø‘øÜò 	Ùð	ús   ‚ …	�)rÜ   rÝ   rå   rç   )r×   rØ   rå   rç   s   `   rr   Úmemoize_when_activatedrè   T  sA   ø€ ô6 ‡_�_�SÓóó ðò2òð ,€GÔØ/€GÔØ€Nrq   c                 óœ   — 	 t        j                  | «      }t        j                  |j                  «      S # t        $ r ‚ t
        $ r Y yw xY w)z�Same as os.path.isfile() but does not swallow EACCES / EPERM
    exceptions, see:
    http://mail.python.org/pipermail/python-dev/2012-June/120787.html.
    F)ÚosÚstatÚS_ISREGÚst_modeÚPermissionErrorÚOSError)ÚpathÚsts     rr   r4   r4   ›  sH   € ð
(Ü�W‰W�T‹]ˆô �|‰|˜BŸJ™JÓ'Ð'øô ò ØÜò Ùðús   ‚6 ¶AÁ
Ac                 ó`   — 	 t        j                  | «       y# t        $ r ‚ t        $ r Y yw xY w)z�Same as os.path.exists() but does not swallow EACCES / EPERM
    exceptions. See:
    http://mail.python.org/pipermail/python-dev/2012-June/120787.html.
    TF)rê   rë   rî   rï   )rð   s    rr   r7   r7   ª  s6   € ð
Ü
�‰�Œð øô ò ØÜò Ùðús   ‚ ˜-¬-c                  óî   — t         j                  rt        €y	 t        j                   t        t         j                  «      5 } | j	                  d«       ddd«       y# 1 sw Y   yxY w# t
        $ r Y yw xY w)z2Return True if IPv6 is supported on this platform.NF)z::1r   T)ÚsocketÚhas_ipv6r   r   Úbindrï   )Úsocks    rr   r9   r9   ¹  s_   € ä�?Š?œhÐ.ØðÜ�]‰]œ8¤V×%7Ñ%7Ó8ð 	"¸DØ�I‰I�jÔ!÷	"à÷	"àûÜò Ùðús/   ™(A( ÁAÁA( ÁA%Á!A( Á%A( Á(	A4Á3A4c                 óÐ   — i }d}t         }	 | j                  d|«      }||k  r	 |S | j                  d||«      }||kD  r$| || }| |dz   | }|r|j                  «       }|||<   |dz   }Œ\)zCParse a C environ block of environment variables into a dictionary.r   ú r•   rl   )r   ÚfindÚupper)ÚdatarË   ÚposÚWINDOWS_Únext_posÚ	equal_posrÔ   r�   s           rr   r6   r6   Å  s•   € ð €CØ
€Cô €HØ
Ø—9‘9˜T 3Ó'ˆà�sŠ?Øð €Jð —I‘I˜c 3¨Ó1ˆ	Ø�sŠ?Ø�s˜9Ð%ˆCØ˜ Q™¨Ð2ˆEáØ—i‘i“k�ØˆC�‰HØ˜‰lˆð rq   c                 óP   — 	 t        j                  | «      S # t        $ r | cY S w xY w)z�Convert a numeric socket family value to an IntEnum member.
    If it's not a known member, return the numeric value itself.
    )rô   ÚAddressFamilyÚ
ValueError©Únums    rr   r:   r:   á  s,   € ðÜ×#Ñ# CÓ(Ð(øÜò ØŠ
ðúó   ‚ —%¤%c                 óP   — 	 t        j                  | «      S # t        $ r | cY S w xY w)zConvert a numeric socket type value to an IntEnum member.
    If it's not a known member, return the numeric value itself.
    )rô   Ú
SocketKindr  r  s    rr   r;   r;   ë  s,   € ðÜ× Ñ  Ó%Ð%øÜò ØŠ
ðúr  c           	      óˆ  — ddl m} |t        j                  t        hv r"|r |j
                  |Ž }|r |j
                  |Ž }|t        j                  k(  r%|t        t        hv r|j                  |t        «      }nt        }t        |«      }t        |«      }|€|j                  | |||||«      S |j                  | ||||||«      S )z2Convert a raw connection tuple to a proper ntuple.rl   )Ú_ntuples)r˜   r
  rô   r   r   Úaddrr   Úgetr   r:   r;   ÚpconnÚsconn)	ÚfdÚfamÚtype_ÚladdrÚraddrÚstatusÚ
status_maprˆ   Úntps	            rr   rB   rB   õ  s¸   € å!à
Œv�~‰~œxÐ(Ñ(ÙØ�C—H‘H˜eÐ$ˆEÙØ�C—H‘H˜eÐ$ˆEØ”×"Ñ"Ò" s¬w¼Ð.AÑ'AØ—‘ ¬	Ó2‰äˆÜ
˜#Ó
€CÜ˜UÓ#€EØ
€{Ø�y‰y˜˜S %¨°°vÓ>Ð>à�y‰y˜˜S %¨°°v¸sÓCÐCrq   c                 ó®  — ddl }| j                  r| j                  sy| j                  t        j
                  k(  r?t        |j                  | j                  › d| j                  › �d¬«      j                  «      S | j                  t        j                  k(  r?t        |j                  | j                  › d| j                  › �d¬«      j                  «      S y)zbGiven the address ntuple returned by ``net_if_addrs()``
    calculates the broadcast address.
    r   Nú/F)Ústrict)Ú	ipaddressÚaddressÚnetmaskÚfamilyrô   r   ÚstrÚIPv4NetworkÚbroadcast_addressr   ÚIPv6Network)r  r  s     rr   Úbroadcast_addrr"  
  sº   € ó à�<Š<˜tŸ|š|ØØ‡{�{”f—n‘nÒ$ÜØ×!Ñ!Ø—<‘<�.  $§,¡, Ð0¸ð "ó çÑó
ð 	
ð
 ‡{�{”f—o‘oÒ%ÜØ×!Ñ!Ø—<‘<�.  $§,¡, Ð0¸ð "ó çÑó
ð 	
ð &rq   c                 ó   ‡ — ˆ fd„}|S )zƒA decorator which can be used to mark a method as deprecated
    'replcement' is the method name which will be called instead.
    c                 ó�   •‡— | j                   › d‰› d�Š| j                  €‰| _        t        j                  | «      ˆˆfd„«       }|S )Nz*() is deprecated and will be removed; use z
() insteadc                 ó`   •— t        j                  ‰t        d¬«        t        | ‰«      |i |¤ŽS )Nrk   )ÚcategoryÚ
stacklevel)ÚwarningsÚwarnÚDeprecationWarningr‹   )rŒ   rÒ   rÓ   r—   Úreplacements      €€rr   Úinnerz/deprecated_method.<locals>.outer.<locals>.inner-  s-   ø€ ä�M‰M˜#Ô(:ÀqÕIØ-”7˜4 Ó-¨tÐ>°vÑ>Ð>rq   )rm   r§   rÜ   rÝ   )r×   r,  r—   r+  s     @€rr   Úouterz deprecated_method.<locals>.outer%  sW   ù€ à�|‰|ˆnð Øˆ}˜Jð(ð 	ð �;‰;ÐØˆCŒKä	�‰˜Ó	ô	?ó 
ð	?ð ˆrq   rp   )r+  r-  s   ` rr   r3   r3      s   ø€ ô
ð €Lrq   c                   ó6   — e Zd ZdZd„ Zd„ Zd„ Zd„ Zd	d„Zd„ Z	y)
Ú_WrapNumberszNWatches numbers so that they don't overflow and wrap
    (reset to zero).
    c                 ó`   — t        j                  «       | _        i | _        i | _        i | _        y r¯   )Ú	threadingÚLockÚlockrÖ   Ú	remindersÚreminder_keysr±   s    rr   r¬   z_WrapNumbers.__init__<  s&   € Ü—N‘NÓ$ˆŒ	ØˆŒ
ØˆŒØˆÕrq   c                 ó  — || j                   vsJ ‚|| j                  vsJ ‚|| j                  vsJ ‚|| j                   |<   t        j                  t
        «      | j                  |<   t        j                  t        «      | j                  |<   y r¯   )rÖ   r4  r5  r‰   ÚdefaultdictÚintÚset)rŒ   Ú
input_dictr�   s      rr   Ú	_add_dictz_WrapNumbers._add_dictB  s|   € Ø˜4Ÿ:™:Ñ%Ð%Ð%Ø˜4Ÿ>™>Ñ)Ð)Ð)Ø˜4×-Ñ-Ñ-Ð-Ð-Ø%ˆ�
‰
�4ÑÜ*×6Ñ6´sÓ;ˆ�‰�tÑÜ#.×#:Ñ#:¼3Ó#?ˆ×Ñ˜4Ò rq   c                 ó  — | j                   |   }t        |j                  «       «      t        |j                  «       «      z
  }|D ]9  }| j                  |   |   D ]  }| j                  |   |= Œ | j                  |   |= Œ; y)z†In case the number of keys changed between calls (e.g. a
        disk disappears) this removes the entry from self.reminders.
        N)rÖ   r9  Úkeysr5  r4  )rŒ   r:  r�   Úold_dictÚ	gone_keysÚgone_keyÚremkeys          rr   Ú_remove_dead_remindersz#_WrapNumbers._remove_dead_remindersJ  s…   € ð —:‘:˜dÑ#ˆÜ˜Ÿ™›Ó(¬3¨z¯©Ó/@Ó+AÑAˆ	Ø!ò 	3ˆHØ×,Ñ,¨TÑ2°8Ñ<ò 1�Ø—N‘N 4Ñ(¨Ñ0ð1à×"Ñ" 4Ñ(¨Ñ2ñ	3rq   c                 ó0  — || j                   vr| j                  ||«       |S | j                  ||«       | j                   |   }i }|D ]¨  }||   }	 ||   }g }t	        t        |«      «      D ]t  }	||	   }
||	   }||	f}|
|k  r;| j                  |   |xx   |z  cc<   | j                  |   |   j                  |«       |j                  |
| j                  |   |   z   «       Œv t        |«      ||<   Œª || j                   |<   |S # t        $ r |||<   Y ŒÌw xY w)zlCache dict and sum numbers which overflow and wrap.
        Return an updated copy of `input_dict`.
        )rÖ   r;  rB  rÐ   ÚrangeÚlenr4  r5  ÚaddÚappendÚtuple)rŒ   r:  r�   r>  Únew_dictrÔ   Úinput_tupleÚ	old_tupleÚbitsÚiÚinput_valueÚ	old_valuerA  s                rr   Úrunz_WrapNumbers.runU  sK  € ð �t—z‘zÑ!à�N‰N˜: tÔ,ØÐà×#Ñ# J°Ô5à—:‘:˜dÑ#ˆØˆØò 	(ˆCØ$ S™/ˆKðØ$ S™M�	ð ˆDÜœ3˜{Ó+Ó,ò H�Ø)¨!™n�Ø% a™L�	Ø˜q˜�Ø Ò*à—N‘N 4Ñ(¨Ó0°IÑ=Ó0Ø×&Ñ& tÑ,¨SÑ1×5Ñ5°fÔ=Ø—‘˜K¨$¯.©.¸Ñ*>¸vÑ*FÑFÕGðHô " $›KˆH�SŠMð+	(ð. &ˆ�
‰
�4ÑØˆøô) ò ð !,�˜‘Ùð	ús   ÁDÄDÄDNc                 ó�  — | j                   5  |€O| j                  j                  «        | j                  j                  «        | j                  j                  «        nT| j                  j                  |d«       | j                  j                  |d«       | j                  j                  |d«       ddd«       y# 1 sw Y   yxY w)z>Clear the internal cache, optionally only for function 'name'.N)r3  rÖ   rÚ   r4  r5  Úpop)rŒ   r�   s     rr   rÛ   z_WrapNumbers.cache_clear|  s‘   € à�Y‰Yñ 	3Øˆ|Ø—
‘
× Ñ Ô"Ø—‘×$Ñ$Ô&Ø×"Ñ"×(Ñ(Õ*à—
‘
—‘˜t TÔ*Ø—‘×"Ñ" 4¨Ô.Ø×"Ñ"×&Ñ& t¨TÔ2÷	3÷ 	3ñ 	3ús   �B&B<Â<Cc                 óŒ   — | j                   5  | j                  | j                  | j                  fcddd«       S # 1 sw Y   yxY w)z5Return internal cache dicts as a tuple of 3 elements.N)r3  rÖ   r4  r5  r±   s    rr   Ú
cache_infoz_WrapNumbers.cache_infoˆ  s:   € à�Y‰Yñ 	DØ—J‘J §¡°×0BÑ0BÐC÷	D÷ 	Dò 	Dús	   �#:ºAr¯   )
rm   rn   ro   r§   r¬   r;  rB  rP  rÛ   rT  rp   rq   rr   r/  r/  7  s(   „ ñò ò@ò	3ò%óN
3óDrq   r/  c                 óz   — t         j                  5  t         j                  | |«      cddd«       S # 1 sw Y   yxY w)zÅGiven an `input_dict` and a function `name`, adjust the numbers
    which "wrap" (restart from zero) across different calls by adding
    "old value" to "new value" and return an updated dict.
    N)Ú_wnr3  rP  )r:  r�   s     rr   r<   r<   Ž  s.   € ô
 
�‰ñ )Ü�w‰w�z 4Ó(÷)÷ )ò )ús   ‘1±:i €  c                 ó&   — t        | dt        ¬«      S )NÚrb)Ú	buffering)ÚopenÚFILE_READ_BUFFER_SIZE)Úfnames    rr   r>   r>   ©  s   € Ü��tÔ'<Ô=Ð=rq   c                 ó¦   — t        | t        t        t        ¬«      }	 t        |_        |S # t
        $ r Y |S t        $ r |j                  «        ‚ w xY w)zaOpen a file in text mode by using the proper FS encoding and
    en/decoding error handlers.
    )rY  ÚencodingÚerrors)rZ  r[  r0   r1   Ú_CHUNK_SIZErá   rÑ   Úclose)r\  Úfobjs     rr   r=   r=   ­  sa   € ô ØÜ'ÜÜô	€Dðô 1ˆÔð €Køô ò Øð
 €Kô	 ò Ø�
‰
ŒØðús   �* ª	A¶Ac                 óî   — |t         u r" || «      5 }|j                  «       cddd«       S 	  || «      5 }|j                  «       cddd«       S # 1 sw Y   yxY w# 1 sw Y   yxY w# t        $ r |cY S w xY w)zÛRead entire file content and return it as a string. File is
    opened in text mode. If specified, `fallback` is the value
    returned in case of error, either if the file does not exist or
    it can't be read().
    N)Ú_DEFAULTÚreadrï   )r\  ÚfallbackÚ_openÚfs       rr   r?   r?   Ç  s|   € ð ”8ÑÙ�5‹\ð 	˜QØ—6‘6“8÷	ñ 	ð	Ù�u“ð   Ø—v‘v“x÷ ñ  ÷		ð 	ú÷ ð  ûäò 	ØŠOð	ús9   ‘A¬A& ´AÁ	A& ÁAÁA#ÁA& Á#A& Á&A4Á3A4c                 ó&   — t        | |t        ¬«      S )z,Same as above but opens file in binary mode.)rf  rg  )r?   r>   )r\  rf  s     rr   r@   r@   Ø  s   € äˆu˜x¬{Ô;Ð;rq   c                 ó   — d}i }t        |dd «      D ]  \  }}d|dz   dz  z  ||<   Œ t        |dd «      D ]3  }t        | «      ||   k\  sŒt        | «      ||   z  }|t	        «       z  c S  |t        |d   | ¬«      z  S )zÚUsed by various scripts. See: https://code.activestate.com/recipes/578019-bytes-to-human-human-to-bytes-converter/?in=user-4178764.

    >>> bytes2human(10000)
    '9.8K'
    >>> bytes2human(100001221)
    '95.4M'
    )	ÚBÚKÚMÚGÚTÚPÚEÚZÚYrl   Né
   r   )Úsymbolr�   )Ú	enumerateÚreversedÚabsrÅ   ÚlocalsÚdict)Únr™   ÚsymbolsÚprefixrM  Úsru  r�   s           rr   rA   rA   Ý  s£   € ð <€GØ€FÜ˜' ! "˜+Ó&ò &‰ˆˆ1Ø˜!˜a™% 2™Ñ%ˆˆqŠ	ð&ä˜7 1 2˜;Ó'ò %ˆÜˆq‹6�V˜F‘^Ó#Ü˜!“H˜v f™~Ñ-ˆEØœF›HÑ$Ò$ð%ð ”D ¨¡
°!Ô4Ñ4Ð4rq   c                  ó<   — t         j                  d   j                  S )z+Return updated psutil.PROCFS_PATH constant.r†   )ÚsysÚmodulesÚPROCFS_PATHrp   rq   rr   Úget_procfs_pathrƒ  ð  s   € ä�;‰;�xÑ ×,Ñ,Ð,rq   c                 ó8   — | j                  t        t        ¬«      S )N)r^  r_  )Údecoder0   r1   )r~  s    rr   r…  r…  õ  s   € Ø�8‰8œX¬mˆ8Ó<Ð<rq   c                 ó~   — t        | d«      r| j                  «       sy	 | j                  «        y# t        $ r Y yw xY w)NÚisattyFT)Úhasattrr‡  ÚfilenorÑ   ©Úfiles    rr   rE   rE   þ  s>   € ä�4˜Ô"¨$¯+©+¬-ØðØ�‰Œð øô ò Ùðús   Ÿ0 °	<»<Fc                 óD  — t        «       s| S g }t        ddddddddd	¬
«	      }d|d<   	 ||   }|j                  |«       |r|j                  d«       ddj                  |«      › d| › d�S # t        $ r, d|›dt        |j	                  «       «      › �}t        |«      d‚w xY w)z*Return an highlighted version of 'string'.Ú34Ú33Ú30Ú32Ú37Ú36Ú91Ú35Ú93)	ÚblueÚbrownÚdarkgreyÚgreenÚgreyÚ	lightblueÚredÚvioletÚyellowÚ29Núinvalid color z; choose amongst Ú1z[ú;Úmz[0m)rE   rz  rÐ   Úlistr=  r  rG  rš   )r~  ÚcolorÚboldÚattrÚcolorsr—   s         rr   rD   rD   	  sÇ   € äÔ!ØˆØ€DÜØØØØØØØØØô
€Fð €Fˆ4�Lð(Ø�u‘ˆð 	‡K�K�ÔÙØ�‰�CÔØ�3—8‘8˜D“>Ð" ! A 3 gÐ.Ð.øô ò (Ø˜u˜iÐ'8¼¸f¿k¹k»mÓ9LÐ8MÐNˆÜ˜‹o 4Ð'ð(ús   ©A* Á*5Bc                 ót  — t        «       st        | |¬«       yt        rt        t        | ||«      |¬«       yddl}d}|j
                  j                  j                  }|j
                  j                  j                  }t        dddd¬«      }||d<   	 ||   }|r
|dk  r|dz  }|t        j                  u rdnd}
|j                   |_         ||
«      } |||«       	 t        | |¬«        |||«       y# t        $ r, d	|›d
t        |j                  «       «      ›�}	t        |	«      d‚w xY w#  |||«       w xY w)z$Print a colorized version of string.rŠ  r   Né   rk   é   é   )r™  rœ  r—  rž  r   z; choose between é   iôÿÿÿiõÿÿÿ)rE   Úprintr   rD   ÚctypesÚwindllÚKernel32ÚGetStdHandleÚSetConsoleTextAttributerz  rÐ   r¤  r=  r  r€  ÚstderrÚc_ulongÚrestype)r~  r¥  r¦  r‹  r¯  ÚDEFAULT_COLORr²  r³  r¨  r—   Ú	handle_idÚhandles               rr   rF   rF   %  s:  € ô  Ô!Üˆa�dÖÝ	ÜŒf�Q˜˜tÓ$¨4Ö0ãàˆØ—}‘}×-Ñ-×:Ñ:ˆà�M‰M×"Ñ"×:Ñ:ð 	 ô ˜A 1¨A°aÔ8ˆØ$ˆˆt‰ð	,Ø˜5‘MˆEñ �E˜Q’JØ�Q‰JˆEà¤3§:¡:Ñ-‘C°3ˆ	Ø%Ÿ~™~ˆÔÙ˜iÓ(ˆÙ ¨Ô.ð	;Ü�!˜$Õá# F¨MÕ:øô! ò 	,à   	ð *Ü˜Ÿ™›Ó'Ð*ð,ð ô ˜S“/ tÐ+ð	,ûñ  $ F¨MÕ:ús   ÂC4 ÃD, Ã45D)Ä,D7c                 ó  — t         rƒddl}|j                  |j                  «       j                  «      \  }}}}}t        | t        «      rt        | t        «      rd| › �} nd| ›�} t        d|› d|› d| › �t        j                  ¬«       yy)z@If PSUTIL_DEBUG env var is set, print a debug message to stderr.r   Nz	ignoring zpsutil-debug [ú:z]> rŠ  )r   ÚinspectÚgetframeinfoÚcurrentframeÚf_backÚ
isinstancerÑ   rï   r®  r€  r´  )r—   r¼  r\  ÚlinenoÚ_Ú_linesÚ_indexs          rr   rC   rC   M  sŒ   € åÛà+2×+?Ñ+?Ø× Ñ Ó"×)Ñ)ó,
Ñ(ˆˆv�q˜& &ô �cœ9Ô%Ü˜#œwÔ'à! # Ð'‘à! # Ð)�ÜØ˜U˜G 1 V H¨C°¨uÐ5¼C¿J¹Jö	
ð rq   r¯   )z%(value).1f%(symbol)s)NF)mr§   r‰   ÚenumrÜ   rê   rô   rë   r€  r1  r(  r   r   r   r   ÚImportErrorr   ÚboolÚgetenvr   Úobjectrd  Ú__all__r�   r   r   ÚplatformÚ
startswithr   r   r   r	   r   r   r
   r   ÚAIXr&   r'   r#   r(   r*   r.   r"   r,   r-   r$   r%   r+   r)   r/   r   r   r   r   r   r   r   r   r   r   r   r   ÚIntEnumrj   ÚglobalsÚupdateÚ__members__rt   Úgetfilesystemencodingr0   Úgetfilesystemencodeerrorsr1   r2   rÑ   r…   r©   r·   r¼   rÀ   r8   r5   rè   r4   r7   r9   r6   r:   r;   rB   r"  r3   r/  r<   rV  rÛ   rT  r[  r>   r=   r?   r@   rA   rƒ  r…  ÚstdoutrE   rD   rF   rC   rp   rq   rr   ú<module>rÕ     sV  ðñ
ó Û Û Û 	Û Û Û 
Û Û Ý Ý Ý ðÝðÝñ
 �I�B—I‘I˜nÓ-Ó.€Ù‹8€ò€ðD 	�‰�7Ñ€Ø
�'‰'�T‰/€Ø�‰×Ñ Ó(€Ø�‰×Ñ Ó)€Ø€Ø
�,‰,×
!Ñ
!Ð"<Ó
=€Ø
�,‰,×
!Ñ
! )Ó
,€Ø	�‰×	 Ñ	  Ó	*€ØÒ"�Ò"˜F€Ø�‰×ÑÐ 4Ó5€Ø	‡l�l×Ñ˜eÓ$€ð €Ø€Ø Ð Ø€Ø$Ð Ø€Ø€ØÐ Ø€Ø€Ø€Ø€ØÐ Ø€ð !Ð Ø€Ø€Ø€Ø€Ø€Ø€
Ø€Ø€Ø€Ø€Ø€	ô�—‘ô ñ ƒ	× Ñ �×&Ñ&Ô 'ô�$—,‘,ô ñ
 ƒ	× Ñ �×(Ñ(Ô )ð %ˆ3×$Ñ$Ó&€Ø-�×-Ñ-Ó/€ð �h Ð(¨;¸
Ð*CÐDØ�hÐ + Ð/ØˆY˜˜Ð&Ø�hÐ * Ð.ØˆY˜˜Ð%Ø�xÐ  ;°
Ð";Ð<Øˆi˜+ zÐ2Ð3Øˆj˜;¨
Ð3Ð4ñ	€	ð ÐØ×ÑØ�˜k˜]Ð+Ø�˜j˜\Ð*ñô ð
 Ð™uØ×Ñ�f ˜y¨;¸
Ð*CÐDÐEÔFô>ˆIô >ôBA�Eô Aô"L�Mô Lô&A�5ô AôE�Uô Eó.	ò*òZDòN(òò	òò8òóDò*
ò,÷.TDñ TDòn)ñ ƒn€ØŸ?™?€Ô ØŸ.™.€Ô ð "Ð ò>òð4 !¨	ó ð" "ó <ó
5ò&-ò
=ð 	Ø!Ÿj™jò ó 	ðó/ð: ˜ C§J¡Jó%;óP
øðg ò ØƒHðûð ò ØƒGðús#   ºM ÁM* ÍM'Í&M'Í*M5Í4M5