+
    Ž°³j3K ã                   óÚ  € R t ^ RIt^ RIt^ RIt^ RIt^ RIt^ RIt^ RIt^ RIt^ RI	t	^ RI
t
^ RIt^ RIt^ RIt^ RIHt ^ RIHt ^RIHt ^RIHt ^RIHt ^RIHt ^RIHt ^R	IHt ^R
IHt ^RIHt ^RIHt ^RIHt ^RIHt ^RIHt ^RIHt ^RIH t  ^RIH!t! ^RIH"t" ^RIH#t# ^RIH$t$ ^RIH%t% ^RIH&t& ^RIH't' ^RIH(t( ^RIH)t) ^RIH*t* ^RIH+t+ . RnOt,Rt-]P\                  P_                  R]P`                  ! 4        R24      t1]P\                  P_                  R]P`                  ! 4        R 24      t2]3! ]R!4      t4]3! ]R"4      t5]Pl                  ! R#4      t7]Pp                  ! 4       t9]Pt                  R$8H  t;]<! 4       t=R%t>]P~                  ! R&R']@! ]
P‚                  4      /4      tB]BP†                  tC ! R( R)]P~                  4      tD]E! 4       P�                  ]DPŽ                  4       R*]P�                  R+]P’                  R,]P”                  R-]P–                  R.]P˜                  R/]Pš                  R0]Pœ                  R1]Pœ                  R2]Pž                  R3]P                   R4]P¢                  R5]P¤                  /tSR6]P¨                  R7]Pª                  R8]P¬                  R9]P®                  R:]P°                  R;]P²                  R<]P´                  R=]P¶                  R>]P¸                  R?]Pº                  R@]P¼                  /t_RA t`RB taRC tb]$RD 4       tc ]c! RE4      ]nd        ]PÈ                  tdRJ tgRK thRL ti]3! ]RM4      '       d   ]PÔ                  tj]PÖ                  tkRN tlRO tmRP tnRQ toRR tpRS tq]P\                  P_                  RT4      '       g"   ]P\                  P_                  RU4      '       d   RV trMRW tr]Pæ                  ts ! RX RY]e4      tt ! RZ R[4      tu]u! 4       tvRoR\ ltwR] txR^ ty]Pô                  tzRpR_ lt{ ! R` Ra4      t|RpRb lt}Rc t~Rd tRe t€Rf t�Rg t‚Rh tƒRi t„Rj t…Rk t† ! Rl Rm4      t‡R#   ]e d.   tf] ! RF]f: 24       ]! RGRH4      ! RIRIRI4      ]nd         RtfAfEL@RtfAfii ; i)qzLinux platform implementation.N)Údefaultdict)Ú
namedtuple)Ú_common)Ú_ntuples)Ú_psposix)Ú_psutil_linux)ÚENCODING)ÚNIC_DUPLEX_FULL)ÚNIC_DUPLEX_HALF)ÚNIC_DUPLEX_UNKNOWN)ÚAccessDenied)ÚNoSuchProcess)ÚZombieProcess)Úbcat)Úcat)Údebug)Údecode)Úget_procfs_path)Úisfile_strict)Úmemoize)Úmemoize_when_activated)Úopen_binary)Ú	open_text)Úparse_environ_block)Úpath_exists_strict)Úsupports_ipv6)Úusage_percentz/sys/class/power_supplyú/proc/ú/smapsú/smaps_rollupÚproc_ioprio_getÚproc_cpu_affinity_getÚ
SC_CLK_TCKÚlittlei   ÚAddressFamilyÚAF_LINKc                   ó&   € ] tR t^dt^ t^t^t^tRtR# )Ú
IOPriority© N)	Ú__name__Ú
__module__Ú__qualname__Ú__firstlineno__ÚIOPRIO_CLASS_NONEÚIOPRIO_CLASS_RTÚIOPRIO_CLASS_BEÚIOPRIO_CLASS_IDLEÚ__static_attributes__r(   ó    ÚP/home/luca/screen-checking/.venv/lib/python3.14/site-packages/psutil/_pslinux.pyr'   r'   d   s   † ØÐØ€OØ€OØÔr2   r'   ÚRÚSÚDÚTÚtÚZÚXÚxÚKÚWÚIÚPÚ01Ú02Ú03Ú04Ú05Ú06Ú07Ú08Ú09Ú0AÚ0Bc                óö   € \        V \        4      '       g   Q V 4       h\        P                  ! V 4      p V P	                  R4      ^ ,          p V P                  R4      '       d   \        V 4      '       g   V RR p V # )zWrapper around os.readlink().Ú ú
 (deleted)Néöÿÿÿ)Ú
isinstanceÚstrÚosÚreadlinkÚsplitÚendswithr   )Úpaths   &r3   rR   rR   •   si   € ä�dœC× Ò Ð& $Ó&Ð Ü�;Š;�tÓ€Dð �:‰:�fÓ˜aÕ €Dð ‡}�}�\×"Ò"Ô+=¸d×+CÒ+CØ�D�SˆzˆØ€Kr2   c                ó|  € \         P                  R\         P                  R\         P                  R/pW\         P                  \         P                  ,          \         P                  ,          ,          ,          pV \         P                  ,          '       d   VP                  RR^4      pVP                  RR4      pV# )zRConvert file's open() flags into a readable string.
Used by Process.open_files().
ÚrÚwzw+Úazr+)rQ   ÚO_RDONLYÚO_WRONLYÚO_RDWRÚO_APPENDÚreplace)ÚflagsÚ	modes_mapÚmodes   &  r3   Úfile_flags_to_moderb   ©   s{   € ô —‘˜c¤2§;¡;°´R·Y±YÀÐE€IØœbŸk™k¬B¯K©KÕ7¼"¿)¹)ÕCÕDÕE€DØŒr�{‰{×ÔØ�|‰|˜C  aÓ(ˆØ�<‰<˜˜dÓ#€Dà€Kr2   c                óœ   € V P                  RR4      p RpV'       d   RV  2pMRV  R2p\        P                  ! V\        P                  4      # )zÌReturn True if the given name refers to a root device (e.g.
"sda", "nvme0n1") as opposed to a logical partition (e.g.  "sda1",
"nvme0n1p1"). If name is a virtual device (e.g. "loop1", "ram")
return True.
Ú/Ú!Tz/sys/block/z/device)r^   rQ   ÚaccessÚF_OK)ÚnameÚincluding_virtualrU   s   &  r3   Úis_storage_devicerj   ¶   sL   € ð �<‰<˜˜SÓ!€DØÐßØ˜T˜FÐ#‰à˜T˜F 'Ð*ˆÜ�9Š9�Tœ2Ÿ7™7Ó#Ð#r2   c                óv  € \        V  R24      ;_uu_ 4       pVP                  4       P                  4       R,          pRRR4       . ROp\        X4      pV^8¼  d   VP	                  R4       V^	8¼  d   VP	                  R4       V^
8¼  d   VP	                  R4       \        RV4      #   + '       g   i     Ls; i)	zçReturn a namedtuple of variable fields depending on the CPU times
available on this Linux kernel version which may be:
(user, nice, system, idle, iowait, irq, softirq, [steal, [guest,
 [guest_nice]]])
Used by cpu_times() function.
ú/stat:é   NNNÚstealÚguestÚ
guest_niceÚ	scputimes)ÚuserÚniceÚsystemÚidleÚiowaitÚirqÚsoftirq)r   ÚreadlinerS   ÚlenÚappendr   )Úprocfs_pathÚfÚvaluesÚfieldsÚvlens   &    r3   Ú_scputimes_ntupler�   É   s“   € ô 
˜�} EÐ*×	+Ô	+¨qØ—‘“×#Ñ#Ó% bÕ)ˆ÷ 
,âK€FÜˆv‹;€DØˆq„yà�‰�gÔØˆq„yà�‰�gÔØˆr„zà�‰�lÔ#Ü�k 6Ó*Ð*÷ 
,×	+ús   —&B(Â(B8	ú/proczignoring exception on import: rq   zuser system idleç        c                ó  € V R,          pWP                  R^ 4      ,           p V R,          pV R,          pV R,          p \	        \        4        R24      p^ pT;_uu_ 4        T FS  p	T	P                  4       p	T	P                  R	4      '       g   K,  T\        T	P                  4       ^,          4      ,          pKU  	  RRR4       T\        ,          pY,
          p
Y4,           pT\        T^,          T4      ,          pY«,          p
Y¥\        TR
,          T4      ,
          ,          p
\        T
4      #   \         d,   p\        TP                  ^ ,           R24       Tu Rp?# Rp?ii ; i  \         d    Tu # i ; i  + '       g   i     LÆ; i)a9  Fallback for kernels < 3.14 where /proc/meminfo does not provide
"MemAvailable", see:
https://blog.famzah.net/2014/09/24/.

This code reimplements the algorithm outlined here:
https://git.kernel.org/cgit/linux/kernel/git/torvalds/linux.git/
    commit/?id=34e431b0ae398fc54ea69ff85ec700722c9da773

We use this function also when "MemAvailable" returns 0 (possibly a
kernel bug, see: https://github.com/giampaolo/psutil/issues/1915).
In that case this routine matches "free" CLI tool result ("available"
column).

XXX: on recent kernels this calculation may differ by ~1.5% compared
to "MemAvailable:", as it's calculated slightly differently.
It is still way more realistic than doing (free + cached) though.
See:
* https://gitlab.com/procps-ng/procps/issues/42
* https://github.com/famzah/linux-memavailable-procfs/issues/2
ó   MemFree:ó   Cached:s   Active(file):s   Inactive(file):ó   SReclaimable:zW is missing from /proc/meminfo; using an approximation for calculating available memoryNz	/zoneinfos   lowg       @)ÚgetÚKeyErrorr   Úargsr   r   ÚOSErrorÚstripÚ
startswithÚintrS   ÚPAGESIZEÚmin)ÚmemsÚfreeÚfallbackÚlru_active_fileÚlru_inactive_fileÚslab_reclaimableÚerrr}   Úwatermark_lowÚlineÚavailÚ	pagecaches   &           r3   Úcalculate_avail_vmemrœ   ó   sc  € ð< �Õ€DØ—h‘h˜z¨1Ó-Õ-€Hð	ØÐ/Õ0ˆØ Ð!3Õ4ÐØÐ 0Õ1ÐðÜœ?Ó,Ð-¨YÐ7Ó8ˆð €Mß	
ŠÛˆDØ—:‘:“<ˆDØ�‰˜v×&Ô&Ø¤ T§Z¡Z£\°!¥_Ó!5Õ5’ñ ÷ 
ð
 ”XÕ€MàÕ €EØÕ3€IØ”�Y •] MÓ2Õ2€IØ	Õ€EØ	¤Ð$4°sÕ$:¸MÓ JÕJÕJ€EÜˆu‹:Ðøô1 ô ÜØ�x‰x˜�{ˆmð >ð >ô	
ð �ûðûô ô ØŠðú÷ 
�ús@   £D- ¿E& Á!*E9Â+E9Ä-E#Ä8 EÅE#ÅE#Å&E6Å5E6Å9F		c                 óè  € . p / p\        \        4        R24      ;_uu_ 4       pV F5  pVP                  4       p\        V^,          4      R,          W^ ,          &   K7  	  RRR4       VR,          pVR,          p VR,          p VR,          pW�P                  R	^ 4      ,          p VR,          p	 TR,          p
 TR,          p TR,          p TR,          pT^ 8X  d   \        T4      pT^ 8  d   ^ pT P                  R4       MYÕ8”  d   TpY],
          p\        Y],
          T^R7      pT '       dQ   RP                  RP                  T 4      \        T 4      ^8X  d   RMR4      p\        P                  ! T\        ^R7       \        P                   ! TTTTTT
TTTT	T4      #   + '       g   i     ELJ; i  \         d    ^ pT P                  R4        ELRi ; i  \         d    ^ pT P                  R
4        ELUi ; i  \         d5     TR,          p	 ELg  \         d    ^ p	T P                  R4         EL‰i ; ii ; i  \         d    ^ p
T P                  R4        EL¨i ; i  \         dQ     TR,          TR,          ,           TR,          ,           p ELÖ  \         d    ^ pT P                  R4         ELøi ; ii ; i  \         d    ^ p ELi ; i  \         d    \        T4      p ELi ; i)a  Report virtual memory stats.
This implementation mimics procps-ng-3.3.12, aka "free" CLI tool:
https://gitlab.com/procps-ng/procps/blob/
    24fd2605c51fccc375ab0287cec33aa767f06718/proc/sysinfo.c#L778-791
The returned values are supposed to match both "free" and "vmstat -s"
CLI tools.
ú/meminfoé   Ns	   MemTotal:r…   s   Buffers:Úbuffersr†   r‡   Úcacheds   Shmem:s
   MemShared:Úshareds   Active:Úactives	   Inactive:s   Inact_dirty:s   Inact_clean:s   Inact_laundry:Úinactives   Slab:s   MemAvailable:Ú	available©Úround_z6{} memory stats couldn't be determined and {} set to 0z, ÚwasÚwere©Ú
stacklevel)r   r   rS   rŽ   r‰   r{   rˆ   rœ   r   ÚformatÚjoinrz   ÚwarningsÚwarnÚRuntimeWarningÚntpÚsvmem)Úmissing_fieldsr‘   r}   r™   r   Útotalr’   r    r¡   r¢   r£   r¤   Úslabrš   ÚusedÚpercentÚmsgs                    r3   Úvirtual_memoryr¹   2  s  € ð €NØ€DÜ	œÓ)Ð*¨(Ð3×	4Ô	4¸ÛˆDØ—Z‘Z“\ˆFÜ! &¨¥)›n¨tÕ3ˆD˜•‹Oñ ÷ 
5ð �Õ€EØ�Õ€Dð)Ø�{Õ#ˆð
0Ø�jÕ!ˆð 	—(‘(Ð+¨QÓ/Õ/ˆð,Ø�i•ˆð(Ø�jÕ!ˆð
.Ø˜Õ%ˆðØ�H�~ˆð
/ØÐ%Õ&ˆð �AŒ:ô
 )¨Ó.ˆEàˆq„yØˆØ×Ñ˜kÕ*Ø	Œð ˆà�=€Dä˜U�]¨U¸1Ô=€G÷ ØF×MÑMØ�I‰I�nÓ%Ü˜Ó(¨AÔ-‰E°6ó
ˆô 	�Š�cœ>°aÕ8ä�9Š9ØØØØØØØØØØØóð ÷Q 
5×	4Ð	4ûô ô )àˆØ×Ñ˜i×(ð)ûô ô (ØˆØ×Ñ˜h×'ð(ûô ô ,ð	,Ø˜-Õ(‹FøÜô 	,ØˆFØ×!Ñ! (×+Ð+ð	,úð,ûô ô (ØˆØ×Ñ˜h×'ð(ûô ô 	.ð	.à�_Õ%Ø�Õ'õ(àÐ(Õ)õ*ó øô
 ô 	.ØˆHØ×!Ñ! *×-Ð-ð	.úð	.ûô ô Ø‹ðûô ô +Ü$ TÓ*‹ð+ús¹   £<F Á:	F4 Â	G Â&	G> Â0	I  Â:	I% Ã	K Ã	K Æ F1	Æ4GÇGÇG;Ç:G;Ç>H=È
	HÈH9È4H=È8H9È9H=É I"É!I"É%K É1%JÊJ<Ê7K Ê;J<Ê<K ËKËKËK1Ë0K1c                 ó„  € / p \        \        4        R24      ;_uu_ 4       pV F5  pVP                  4       p\        V^,          4      R,          W^ ,          &   K7  	  RRR4        V R,          pV R,          pWE,
          p\        W„^R7      p	 \        \        4        R24      pT;_uu_ 4        R;r«V Fœ  pVP                  R4      '       d1   \        VP                  R	4      ^,          4      ^,          R,          p
MFVP                  R
4      '       d0   \        VP                  R	4      ^,          4      ^,          R,          pV
f   K–  Vf   Kœ   M-	  RpVR,          p\        P                  ! V\        ^R7       ^ ;r«RRR4       \        P                  ! YHYYX
X4      #   + '       g   i     ELL; i  \         d0    \
        P                  ! 4       w     rdrWYG,          pYW,          p ELui ; i  + '       g   i     Lz; i  \         d1   pRT R2p\        P                  ! T\        ^R7       ^ ;r« Rp?L³Rp?ii ; i)zReturn swap memory metrics.rž   rŸ   Ns
   SwapTotal:s	   SwapFree:r¦   z/vmstats   pswpinó    s   pswpoutz,'sin' and 'sout' swap memory stats couldn't zbe determined and were set to 0rª   zM'sin' and 'sout' swap memory stats couldn't be determined and were set to 0 (Ú))r   r   rS   rŽ   r‰   ÚcextÚlinux_sysinfor   r�   r®   r¯   r°   r‹   r±   Ússwap)r‘   r}   r™   r   r´   r’   Ú_Úunit_multiplierr¶   r·   ÚsinÚsoutr¸   r—   s                 r3   Úswap_memoryrÄ   ³  sù  € à€DÜ	œÓ)Ð*¨(Ð3×	4Ô	4¸ÛˆDØ—Z‘Z“\ˆFÜ! &¨¥)›n¨tÕ3ˆD˜•‹Oñ ÷ 
5ð Ø�]Õ#ˆØ�LÕ!ˆð �<€DÜ˜D°Ô2€GðÜœ?Ó,Ð-¨WÐ5Ó6ˆ÷ ŠQØÐˆCÛ�ð —?‘? 9×-Ò-Ü˜dŸj™j¨Ó.¨qÕ1Ó2°QÕ6¸Õ=‘CØ—_‘_ Z×0Ò0Ü˜tŸz™z¨$Ó/°Õ2Ó3°aÕ7¸$Õ>�DØ”? tÔ'7Ùñ ð E�ØÐ8Õ8�Ü—’˜c¤>¸aÕ@Ø��÷% ô& �9Š9�U $°°dÓ;Ð;÷c 
5×	4Ð	4ûô ô  Ü37×3EÒ3EÓ3GÑ0ˆˆ1ˆa�˜4ØÕ ˆØÕ‹ð ú÷& �Qûô ô ð0Ø03¨u°Að7ð 	ô 	�Š�cœ>°aÕ8ØˆˆŒdûðúsT   ¡<F Á&F4 ÂH Â.A&G1Ä0G1Å
G1Å/G1Æ F1	Æ46G.Ç-G.Ç1H	ÈH?È&H:È:H?Ú	heap_infoc                 óŒ  € \        4       p \        V  R24      ;_uu_ 4       pVP                  4       P                  4       pRRR4       X^\	        \
        P                  P                  4      ^,            pV Uu. uF  p\        V4      \        ,          NK  	  pp\
        P                  ! V!  #   + '       g   i     Lv; iu upi )zÙReturn a named tuple representing the following system-wide
CPU times:
(user, nice, system, idle, iowait, irq, softirq [steal, [guest,
 [guest_nice]]])
Last 3 fields may not be available on all Linux kernel versions.
rl   N)
r   r   ry   rS   rz   r±   rq   Ú_fieldsÚfloatÚCLOCK_TICKS)r|   r}   r~   r   r;   s        r3   Ú	cpu_timesrÊ   õ  s•   € ô "Ó#€KÜ	˜�} EÐ*×	+Ô	+¨qØ—‘“×#Ñ#Ó%ˆ÷ 
,à�AœœCŸM™M×1Ñ1Ó2°QÕ6Ð7€FÙ.4Ó5©f¨Œe�A‹hœ×$Ð$©f€FÐ5Ü�=Š=˜&Ñ!Ð!÷	 
,×	+üò 6s   ¡B.Á9CÂ.B>	c            	     ó  € \        4       p . p\        V  R24      ;_uu_ 4       pVP                  4        V F£  pVP                  R4      '       g   K  VP	                  4       pV^\        \        P                  P                  4      ^,            pV Uu. uF  p\        V4      \        ,          NK  	  pp\        P                  ! V!  pVP                  V4       K¥  	  VuuRRR4       # u upi   + '       g   i     R# ; i)z^Return a list of namedtuple representing the CPU times
for every CPU available on the system.
rl   s   cpuN)r   r   ry   r�   rS   rz   r±   rq   rÇ   rÈ   rÉ   r{   )r|   Úcpusr}   r™   r~   r   r;   Úentrys           r3   Úper_cpu_timesrÎ     sË   € ô "Ó#€KØ€DÜ	˜�} EÐ*×	+Ô	+¨qà	�
‰
ŒÛˆDØ�‰˜v×&Ô&ØŸ™›�Ø ¤C¬¯©×(=Ñ(=Ó$>ÀÕ$BÐC�Ù:@ÓA¹&°Qœ% ›(¤[×0Ð0¹&�ÐAÜŸš vÑ.�Ø—‘˜EÖ"ñ ð ÷ 
,Ò	+ùò B÷ 
,×	+Ð	+ús$   £*C.ÁAC.ÂC)
Â2,C.Ã)C.Ã.C?	c                 óŽ  €  \         P                  ! R4      #   \         Ed!    ^ p \        \	        4        R24      ;_uu_ 4       pT F3  pTP                  4       P                  R4      '       g   K*  T ^,          p K5  	  RRR4       M  + '       g   i     M; iT ^ 8X  d•   \        P                  ! R4      p\        \	        4        R24      ;_uu_ 4       pT F=  pTP                  R4      ^ ,          pTP                  T4      '       g   K4  T ^,          p K?  	  RRR4       M  + '       g   i     M; iT ^ 8X  d    R# T u # i ; i)z0Return the number of logical CPUs in the system.ÚSC_NPROCESSORS_ONLNú/cpuinfos	   processorNzcpu\drl   Ú )rQ   ÚsysconfÚ
ValueErrorr   r   Úlowerr�   ÚreÚcompiler   rS   Úmatch)Únumr}   r™   Úsearchs       r3   Úcpu_count_logicalrÛ     sÿ   € ðÜ�zŠzÐ/Ó0Ð0øÜõ àˆÜœOÓ-Ð.¨hÐ7×8Ô8¸AÛ�Ø—:‘:“<×*Ñ*¨<×8Ô8Ø˜1•H’Cñ ÷ 9×8×8Ð8úð �!Œ8Ü—Z’Z Ó)ˆFÜœoÓ/Ð0°Ð6×7Ô7¸1Û�DØŸ:™: c›?¨1Õ-�DØ—|‘| D×)Ô)Ø˜q�šñ ÷ 8×7×7Ð7úð �!Œ8âØŠ
ð-úsR   ‚ ˜,EÁ(BÁ1BÁ>	EÂBÂAEÃ2D"ÄD"Ä	EÄ"D2Ä-EÄ?EÅEc                 ó`  € \        4       p RpRp\        P                  ! V4      ;'       g    \        P                  ! V4       FL  p\        V4      ;_uu_ 4       pV P                  VP	                  4       P                  4       4       RRR4       KN  	  \        V 4      pV^ 8w  d   V# / p/ p\        \        4        R24      ;_uu_ 4       pV Fz  pVP                  4       P                  4       pV'       g    VR,          WgR,          &   / pK@  VP                  R4      '       g   KY  VP                  R^4      w  rš\        V
4      Wy&   K|  	  RRR4       \        VP                  4       4      pT;'       g    R#   + '       g   i     EKF  ; i  \         d     L‘i ; i  + '       g   i     L[; i)	z-Return the number of CPU cores in the system.z9/sys/devices/system/cpu/cpu[0-9]*/topology/core_cpus_listz?/sys/devices/system/cpu/cpu[0-9]*/topology/thread_siblings_listNrÑ   ó	   cpu coresó   physical ids   	:)rÞ   rÝ   )ÚsetÚglobr   ÚaddÚreadrŒ   rz   r   rÕ   r‰   r�   rS   rŽ   Úsumr~   )ÚlsÚp1Úp2rU   r}   ÚresultÚmappingÚcurrent_infor™   ÚkeyÚvalues              r3   Úcpu_count_coresrì   4  sb  € ô 
‹€Bð 
E€BØ	J€BÜ—	’	˜"“×.Ð.¤§¢¨2£Ò.ˆÜ˜×Ô !Ø�F‰F�1—6‘6“8—>‘>Ó#Ô$÷ Ññ /ô �‹W€FØ�„{Øˆð €GØ€LÜ	œÓ)Ð*¨(Ð3×	4Ô	4¸ÛˆDØ—:‘:“<×%Ñ%Ó'ˆDßðØ<HØ$õ=�G¨Õ8Ñ9ð
  "’Ø—‘Ð!?×@Ô@à!ŸZ™Z¨°Ó2‘
�Ü$'¨£J�Ó!ñ ÷ 
5ô" �—‘Ó!Ó"€FØ�>ˆ>�TÐ÷7 ×Ñûô$  ô Ùðú÷ 
5×	4úsB   Á.E7Ã	,FÃ6FÄFÄ%%FÅ7F	ÆF	ÆFÆF	ÆFÆF-	c                 ó<  € \        \        4        R24      ;_uu_ 4       p RpRpRpV  F¼  pVP                  R4      '       d"   \        VP	                  4       ^,          4      pMoVP                  R4      '       d"   \        VP	                  4       ^,          4      pM7VP                  R4      '       d!   \        VP	                  4       ^,          4      pVf   K°  Vf   K¶  Vf   K¼   M	  RRR4       ^ p\
        P                  ! XXXV4      #   + '       g   i     L+; i)z*Return various CPU stats as a named tuple.rl   Ns   ctxts   intrs   softirq)r   r   r�   rŽ   rS   r±   Ú	scpustats)r}   Úctx_switchesÚ
interruptsÚsoft_interruptsr™   Úsyscallss         r3   Ú	cpu_statsró   ^  sÛ   € ä	œÓ)Ð*¨%Ð0×	1Ô	1°QØˆØˆ
ØˆÛˆDØ�‰˜w×'Ò'Ü" 4§:¡:£<°¥?Ó3‘Ø—‘ ×)Ò)Ü  §¡£¨a¥Ó1‘
Ø—‘ ×,Ò,Ü"% d§j¡j£l°1¥oÓ"6�àÔ(Ø#Ô/ØÔ*áñ ÷	 
2ð" €HÜ�=Š=˜ z°?ÀHÓMÐM÷% 
2×	1ús*   ŸADÁ:7DÂ2!DÃDÃDÃ$DÄD	c                 ó8  € \        \        4        R24      ;_uu_ 4       p V  Uu. uFL  pVP                  4       P                  R4      '       g   K*  \	        VP                  R^4      ^,          4      NKN  	  upuuRRR4       # u upi   + '       g   i     R# ; i)z7Return current CPU frequency from cpuinfo if available.rÑ   s   cpu mhzó   :N)r   r   rÕ   r�   rÈ   rS   )r}   r™   s     r3   Ú_cpu_get_cpuinfo_freqrö   u  s{   € ä	œÓ)Ð*¨(Ð3×	4Ô	4¸ñ ó
á�Ø�z‰z‹|×&Ñ& z×2ô *ŒE�$—*‘*˜T 1Ó% aÕ(Ö)Ùñ
÷ 
5Ò	4ùò
÷ 
5×	4Ð	4ús"   ŸB¤'BÁ&BÁ6BÂBÂB	z'/sys/devices/system/cpu/cpufreq/policy0z$/sys/devices/system/cpu/cpu0/cpufreqc            	     óR  € \        4       p \        P                  ! R4      ;'       g    \        P                  ! R4      pVP                  R R7       . p\        P                  P
                  p\        V4       EF)  w  rE\        V4      \        V 4      8X  d   W,          R,          pM\        V! VR4      RR7      pVfg   \        V! VR	4      RR7      pVfO   R
V R2p\        VRR7      R8X  d*   VP                  \        P                  ! RRR4      4       K   Rp\        V4      h\        V4      R,          p\        \        V! VR4      4      4      R,          p	\        \        V! VR4      4      4      R,          p
VP                  \        P                  ! WjV	4      4       EK,  	  V# )zjReturn frequency metrics for all CPUs.
Contrarily to other OSes, Linux updates these values in
real-time.
z,/sys/devices/system/cpu/cpufreq/policy[0-9]*z)/sys/devices/system/cpu/cpu[0-9]*/cpufreqc                 ó^   € \        \        P                  ! R V 4      P                  4       4      # )z[0-9]+)rŽ   rÖ   rÚ   Úgroup©r;   s   &r3   Ú<lambda>Úcpu_freq.<locals>.<lambda>Œ  s   € ¤¤R§Y¢Y¨y¸!Ó%<×%BÑ%BÓ%DÔ!Er2   )rê   iè  Úscaling_cur_freqN©r“   Úcpuinfo_cur_freqz/sys/devices/system/cpu/cpuz/onlinez0
rƒ   z!can't find current frequency fileÚscaling_max_freqÚscaling_min_freq)rö   rà   ÚsortrQ   rU   r­   Ú	enumeraterz   r   r   r{   r±   ÚscpufreqÚNotImplementedErrorrŽ   )Úcpuinfo_freqsÚpathsÚretÚpjoinÚirU   ÚcurrÚonline_pathr¸   Úmax_Úmin_s              r3   Úcpu_freqr  ƒ  sn  € ô
 .Ó/ˆÜ—	’	Ø:ó
÷ Dð Dä�YŠYÐBÓCð 	ð 	�
‰
ÑEˆ
ÔFØˆÜ—‘—‘ˆÜ  ×'‰GˆAÜ�5‹zœS Ó/Ô/ð %Õ'¨$Õ.‘ä™E $Ð(:Ó;ÀdÔK�ØŠ|ô ™E $Ð(:Ó;ÀdÔK�Ø’<Ø$?À¸sÀ'Ð"J�Kä˜;°Ô6¸%Ô?ØŸ
™
¤3§<¢<°°S¸#Ó#>Ô?Ù Ø=�CÜ-¨cÓ2Ð2Ü�t“9˜tÕ#ˆDÜ”t™E $Ð(:Ó;Ó<Ó=ÀÕDˆDÜ”t™E $Ð(:Ó;Ó<Ó=ÀÕDˆDØ�J‰J”s—|’| D°Ó5×6ñ- (ð. ˆ
r2   c                 ól   € \        4        U u. uF  p \        P                  ! V RR4      NK  	  up # u up i )zmAlternate implementation using /proc/cpuinfo.
min and max frequencies are not available and are set to None.
rƒ   )rö   r±   r  rú   s    r3   r  r  ª  s/   € ô 4IÔ3JÓKÑ3J¨a”—’˜Q  SÖ)Ñ3JÑKÐKùÒKs   �!1c                   ó   € ] tR tRtRtR# )Ú_Ipv6UnsupportedErrori¹  r(   N)r)   r*   r+   r,   r1   r(   r2   r3   r  r  ¹  s   † Ûr2   r  c                   óx   a € ] tR tRt o RtR tR tR t]R 4       t	]RR l4       t
]RR	 l4       tRR
 ltRtV tR# )ÚNetConnectionsi½  a[  A wrapper on top of /proc/net/* files, retrieving per-process
and system-wide open connections (TCP, UDP, UNIX) similarly to
"netstat -an".

Note: in case of UNIX sockets we're only able to determine the
local endpoint/path, not the one it's connected to.
According to [1] it would be possible but not easily.

[1] http://serverfault.com/a/417946
c                ó˜  € R \         P                  \         P                  3pR\         P                  \         P                  3pR\         P                  \         P                  3pR\         P                  \         P                  3pR\         P
                  R3pRWW4V3R W3RV3RV3RW43RV3RV3RV3R	WW43R
W3RW$3/V n        RV n        R# )ÚtcpÚtcp6ÚudpÚudp6ÚunixNÚallÚtcp4Úudp4ÚinetÚinet4Úinet6)ÚsocketÚAF_INETÚSOCK_STREAMÚAF_INET6Ú
SOCK_DGRAMÚAF_UNIXÚtmapÚ_procfs_path)Úselfr  r  r  r  r  s   &     r3   Ú__init__ÚNetConnections.__init__É  sÔ   € ð ”v—~‘~¤v×'9Ñ'9Ð:ˆØœŸ™¬×);Ñ);Ð<ˆØ”v—~‘~¤v×'8Ñ'8Ð9ˆØœŸ™¬×):Ñ):Ð;ˆØœŸ™¨Ð-ˆà�D ¨DÐ1Ø�D�<Ø�T�GØ�T�GØ�D�<Ø�T�GØ�T�GØ�T�GØ�T Ð,Ø�d�\Ø�d�\ð
ˆŒ	ð !ˆÖr2   c                ó@  € \        \        4      p\        P                  ! V P                   R V R24       Fh  p \        V P                   R V RV 24      pVP                  R4      '       d1   VR,          RR pW$,          P                  V\        V4      34       Kh  Kj  	  V#   \        \        3 d     K‚  \         d\   pTP                  \        P                  8X  d    Rp?K±  TP                  \        P                  8X  d   \        T4        Rp?Ká  h Rp?ii ; i)rd   ú/fdú/fd/zsocket:[:é   NNNéÿÿÿÿ)r   ÚlistrQ   Úlistdirr(  rR   r�   r{   rŽ   ÚFileNotFoundErrorÚProcessLookupErrorr‹   ÚerrnoÚEINVALÚENAMETOOLONGr   )r)  ÚpidÚinodesÚfdÚinoder—   s   &&    r3   Úget_proc_inodesÚNetConnections.get_proc_inodesà  s÷   € ÜœTÓ"ˆÜ—*’* × 1Ñ 1Ð2°!°C°5¸Ð<Ö=ˆBð9Ü  D×$5Ñ$5Ð#6°a¸°u¸DÀÀÐ!EÓF�ð  ×#Ñ# J×/Ò/à! "�I c r˜N�EØ•M×(Ñ(¨#¬s°2«w¨Ö8ñ 0ñ% >ð, ˆøô' &Ô'9Ð:ô ò Üô Ø—9‘9¤§¡Ô,åØ—9‘9¤× 2Ñ 2Ô2ä˜#”JÝØûðús/   ºB$Â$DÂ8DÃDÃDÃ'*DÄDÄDc                ó¨   € / p\        4        F$  p VP                  V P                  V4      4       K&  	  V#   \        \        \
        3 d     KC  i ; i©N)ÚpidsÚupdater<  r3  r4  ÚPermissionError)r)  r9  r8  s   &  r3   Úget_all_inodesÚNetConnections.get_all_inodesú  sT   € ØˆÜ–6ˆCð
Ø—‘˜d×2Ñ2°3Ó7Ö8ñ ð ˆøô &Ô'9¼?ÐKô ò ðús   ‘ 7·AÁAc           
     ó€  € V P                  R4      w  r#\        V^4      pV'       g   R# VP                  R4      pV\        P                  8X  do   \
        '       d7   \        P                  ! V\        P                  ! V4      RRR1,          4      pMñ\        P                  ! V\        P                  ! V4      4      pMÅ\        P                  ! V4      p \
        '       dR   \        P                  ! \        P                  \        P                  ! R.\        P                  ! RV4      O5!  4      pMQ\        P                  ! \        P                  \        P                  ! R.\        P                  ! RV4      O5!  4      p \         P"                  ! W#4      #   \         d    \        4       '       g   \        Rhh i ; i)a.  Accept an "ip:port" address as displayed in /proc/net/*
and convert it into a human readable form, like:

"0500000A:0016" -> ("10.0.0.5", 22)
"0000000000000000FFFF00000100007F:9E49" -> ("::ffff:127.0.0.1", 40521)

The IP address portion is a little or big endian four-byte
hexadecimal number; that is, the least significant byte is listed
first, so we need to reverse the order of the bytes to convert it
to an IP address.
The port is represented as a two-byte hexadecimal number.

Reference:
http://linuxdevcenter.com/pub/a/linux/2000/11/16/LinuxAdmin.html
Ú:ÚasciiNz>4Iz<4Ir(   r0  )rS   rŽ   Úencoder!  r"  ÚLITTLE_ENDIANÚ	inet_ntopÚbase64Ú	b16decoder$  ÚstructÚpackÚunpackrÔ   r   r  r±   Úaddr)rP  ÚfamilyÚipÚports   &&  r3   Údecode_addressÚNetConnections.decode_address
  s@  € ð" —:‘:˜c“?‰ˆÜ�4˜‹}ˆ÷ ØˆIØ�Y‰Y�wÓˆØ”V—^‘^Ô#ç‹}Ü×%Ò% f¬f×.>Ò.>¸rÓ.BÁ4ÀRÀ4Õ.HÓI‘ä×%Ò% f¬f×.>Ò.>¸rÓ.BÓC‘ä×!Ò! "Ó%ˆBðç “=Ü×)Ò)ÜŸ™ÜŸš EÐE¬F¯MªM¸%ÀÓ,DÓEó‘Bô
  ×)Ò)ÜŸ™ÜŸš EÐE¬F¯MªM¸%ÀÓ,DÓEó‘Bô �xŠx˜Ó!Ð!øô ô ä$—’Ü/°TÐ9Øð	ús   ÃF Ã!AF Ä2AF Æ$F=Nc              #  ó   "  € V P                  R4      '       d(   \        P                  P                  V 4      '       g   R# \	        V 4      ;_uu_ 4       pVP                  4        \        V^4       F²  w  rg VP                  4       R,          w
  r‰r«    rŒYÃ9   d   Y<,          ^ ,          w  rïMRRrþTe	   YN8w  d   KL  T\        P                  8X  d   \        T,          pM\        P                  p \        P!                  Y‘4      p	\        P!                  Y¡4      p
YñY)Y«T3x € K´  	  RRR4       R#   \         d    RT  RT RT: 2p\        T4      Rhi ; i  \"         d     Kõ  i ; i  + '       g   i     R# ; i5i)z.Parse /proc/net/tcp* and /proc/net/udp* files.Ú6NºNé
   Núerror while parsing ú; malformed line rÒ   r0  )rT   rQ   rU   Úexistsr   ry   r  rS   rÔ   ÚRuntimeErrorr!  r#  ÚTCP_STATUSESr   Ú	CONN_NONEr  rT  r  )ÚfilerQ  Útype_r9  Ú
filter_pidr}   Úlinenor™   rÀ   ÚladdrÚraddrÚstatusr;  r¸   r8  r:  s   &&&&&           r3   Úprocess_inetÚNetConnections.process_inet=  se  é € ð �=‰=˜×Ò¤b§g¡g§n¡n°T×&:Ò&:áÜ�t�_Œ_ Ø�J‰JŒLÜ )¨!¨Q¦‘�ð	6àŸ
™
› SÕ)ñ B�A˜e¨Q°°1°a¸ð ”?ð %�m¨AÕ.‘G�C˜à" B˜ØÒ)¨jÔ.?Ùà¤× 2Ñ 2Ô2Ü!-¨fÕ!5™ä!(×!2Ñ!2˜ð!Ü .× =Ñ =¸eÓ L˜Ü .× =Ñ =¸eÓ L˜ð  u°UÀCÐHÔHñC !0÷ ‰_øô "ô 6à.¨t¨fð 5Ø"˜8 1 T¡Hð.ð ô ' sÓ+°Ð5ð6ûô4 1ô !Ú ð!ú÷C �_ˆ_üs_   ‚<E>¿E>Á"E*Á7D1ÂAE*Ã1*EÄE*Ä'
E>Ä1$E	ÅE*ÅE'	Å#E*Å&E'	Å'E*Å*E;	Å5	E>c              #  ó6  "  € \        V 4      ;_uu_ 4       pVP                  4        V F¡  pVP                  4       p VR,          w     rxryY’9   d
   Y),          pMR.pT Ff  w  rÍTe	   Y<8w  d   K  \        T4      ^8X  d
   TR,          MRp\        P                  ! \        T4      4      pRp\        P                  pYÑYŽTTT3x € Kh  	  K£  	  RRR4       R#   \         d     RT9  d    KÄ  RT  RT: 2p
\	        T
4      hi ; i  + '       g   i     R# ; i5i)	zParse /proc/net/unix files.:é    é   NrÒ   rZ  r[  NÚ r0  )Nr0  )
r   ry   rS   rÔ   r]  rz   r   Úsocktype_to_enumrŽ   r_  )r`  rQ  r9  rb  r}   r™   ÚtokensrÀ   ra  r;  r¸   Úpairsr8  r:  rU   re  rf  s   &&&&             r3   Úprocess_unixÚNetConnections.process_unixh  s  é € ô �t�_Œ_ Ø�J‰JŒLÛ�ØŸ™›�ð	,Ø28¸µ+Ñ/�A�q˜!˜Q qð ”?ð #�M‘Eà'˜L�EÛ$‘G�CØ!Ò-°*Ô2CÙ ä-0°«[¸AÔ-=˜v bžzÀ2˜Ü '× 8Ò 8¼¸U»Ó D˜ð !#˜Ü!(×!2Ñ!2˜Ø!¨5¸¸vÀsÐKÔKó  %ñ% ÷ ‰_øô "ô ,Ø $”â à.¨t¨fÐ4EÀdÁXÐNð ô ' sÓ+Ð+ð,ú÷ �_ˆ_üs@   ‚D–&D½CÁBDÃ
DÃD	Ã*DÃ-D	ÄDÄD	Ä	Dc                óR  € \        4       V n        Ve   V P                  V4      pV'       g   . # MV P                  4       p\	        4       pV P
                  V,           F½  w  rVpV P                   RV 2pV\        P                  \        P                  09   d   V P                  W†WsVR7      p	MV P                  W†W2R7      p	V	 FS  w  r¦r{rÍpV'       d   \        P                  ! W¦W{WÍ4      pM\        P                  ! W¦W{WÍV4      pVP                  V4       KU  	  K¿  	  \        V4      # )Nz/net/)rb  )r   r(  r<  rC  rß   r'  r!  r"  r$  rg  rp  r±   ÚpconnÚsconnrá   r1  )r)  Úkindr8  r9  r  Ú
proto_namerQ  ra  rU   rä   r:  rd  re  rf  Ú	bound_pidÚconns   &&&             r3   ÚretrieveÚNetConnections.retrieveŒ  s  € Ü+Ó-ˆÔØŠ?Ø×)Ñ)¨#Ó.ˆFßà�	ð ð ×(Ñ(Ó*ˆFÜ‹eˆØ)-¯©°4¯¨Ñ%ˆJ Ø×'Ñ'Ð(¨¨j¨\Ð:ˆDØœ&Ÿ.™.¬&¯/©/Ð:Ô:Ø×&Ñ&Ø %¸Cð 'ó ‘ð ×&Ñ& t°VÐ&ÓL�ÛFHÑB�˜E¨%¸ßÜŸ9š9 R°¸uÓM‘DäŸ9š9Ø E°%Àó�Dð —‘˜–ó GIñ *9ô  �C‹yÐr2   )r(  r'  r?  )r)   r*   r+   r,   Ú__doc__r*  r<  rC  ÚstaticmethodrT  rg  rp  ry  r1   Ú__classdictcell__©Ú__classdict__s   @r3   r  r  ½  sf   ø‡ € ñ	ò!ò.ò4ð  ñ0"ó ð0"ðd ó(Ió ð(IðT ó!Ló ð!L÷Fò r2   r  c                ó,   € \         P                  V 4      # )z$Return system-wide open connections.)Ú_net_connectionsry  )ru  s   &r3   Únet_connectionsr‚  ¬  s   € ä×$Ñ$ TÓ*Ð*r2   c                 óÜ  € \        \        4        R24      ;_uu_ 4       p V P                  4       pRRR4       / pXR,           F’  pVP                  R4      pV^ 8”  g   Q \	        V4      4       hVRV P                  4       pW4^,           R P                  4       P                  4       p\        \        V4      w  ppp	p
ppppppppppppVVVVV	VV
V3W%&   K”  	  V#   + '       g   i     L³; i)zkReturn network I/O statistics for every network interface
installed on the system as a dict of raw tuples.
z/net/devNºé   NNrF  )	r   r   Ú	readlinesÚrfindÚreprrŒ   rS   ÚmaprŽ   )r}   ÚlinesÚretdictr™   Úcolonrh   r   Ú
bytes_recvÚpackets_recvÚerrinÚdropinÚ_fifoinÚ_frameinÚ_compressedinÚ_multicastinÚ
bytes_sentÚpackets_sentÚerroutÚdropoutÚ_fifooutÚ_collisionsoutÚ_carrieroutÚ_compressedouts                          r3   Únet_io_countersr�  ±  s  € ô 
”oÓ'Ð(¨Ð1×	2Ô	2°aØ—‘“ˆ÷ 
3à€GØ�b—	�	ˆØ—
‘
˜3“ˆØ�qŒyÐ$œ$˜t›*Ó$ˆyØ�F�Uˆ|×!Ñ!Ó#ˆØ˜a•i�kÐ"×(Ñ(Ó*×0Ñ0Ó2ˆô* ”�VÓñ'	
àØØØØØØØàØØØØØØØð ØØØØØØØð	
ˆ‹ñ7 ðJ €N÷Q 
3×	2ús   ŸCÃC+	c                 óH  € \         P                  \        \         P                  \        \         P
                  \        /p \        4       P                  4       p/ pV F  p \         P                  ! V4      p\         P                  ! V4      p\         P                  ! V4      w  rgRP                  V4      pRV9   p	\        P                  ! W�V,          WtV4      W#&   K�  	  V#   \         d7   p
T
P                   \         P"                  8w  d   h \%        T
4        Rp
?
KÁ  Rp
?
ii ; i)z)Get NIC stats (isup, duplex, speed, mtu).Ú,ÚrunningN)r½   ÚDUPLEX_FULLr	   ÚDUPLEX_HALFr
   ÚDUPLEX_UNKNOWNr   r�  ÚkeysÚ
net_if_mtuÚnet_if_flagsÚnet_if_duplex_speedr­   r±   Ú	snicstatsr‹   r5  ÚENODEVr   )Ú
duplex_mapÚnamesr  rh   Úmtur_   ÚduplexÚspeedÚoutput_flagsÚisupr—   s              r3   Únet_if_statsr±  à  sî   € ô 	×Ñœ/Ü×Ñœ/Ü×ÑÔ/ð€Jô
 Ó×"Ñ"Ó$€EØ
€CÛˆð	Ü—/’/ $Ó'ˆCÜ×%Ò% dÓ+ˆEÜ ×4Ò4°TÓ:‰MˆFð Ÿ8™8 E›?ˆLØ Ñ%ˆDÜŸšØ Õ(¨%°lóˆC‹Iñ ð  €Jøô ô 	à�y‰yœEŸL™LÔ(ØÜ�#�JŠJûð		ús   ÁAC Ã D!Ã++DÄD!c                ó°  € R pR p\         P                  P                  \        4        R24      '       d	   V! 4       pME\         P                  P                  R4      '       d	   V! 4       pM\        4        R2p\	        V4      h/ pV FJ  pVw
  rxršr¼rÞppV '       g   \        V4      '       g   K'  V
\        ,          p
V\        ,          pW‰W«WÍWïV3	WW&   KL  	  V# )z[Return disk I/O statistics for every disk installed on the
system as a dict of raw tuples.
c               3   óv  "  € \        \        4        R 24      ;_uu_ 4       p V P                  4       pRRR4       X Fä  pVP                  4       p\	        V4      pV^8X  d;   V^,          p\        V^,          4      p\        \
        VR,          4      w
  rxršprÍrïpM{V^8X  g   V^8¼  d)   V^,          p\        \
        VR,          4      w  rgr‰r«rÍrïpMEV^8X  d.   V^,          p\        \
        VR,          4      w  rhr¬^ ;p	;p;p;r¿MRV: 2p\        V4      hWVW¨WÉVW{V3
x € Kæ  	  R#   + '       g   i     Lü; i5i)ú
/diskstatsN:é   é   N:é   r¶  N:r·  NNznot sure how to interpret line )r   r   r†  rS   rz   rŽ   r‰  rÔ   )r}   rŠ  r™   r   Úflenrh   ÚreadsÚreads_mergedÚrbytesÚrtimeÚwritesÚwrites_mergedÚwbytesÚwtimerÀ   Ú	busy_timer¸   s                    r3   Úread_procfsÚ%disk_io_counters.<locals>.read_procfs	  s4  é € ô" œ/Ó+Ð,¨JÐ7×8Ô8¸AØ—K‘K“MˆE÷ 9ãˆDØ—Z‘Z“\ˆFÜ�v“;ˆDà�rŒzà˜a•y�Ü˜F 1�I›�ä69¼#¸vÀd½|Ó6Lñ4� u°mØ 1±Ø˜”˜t rœzà˜a•y�ä69¼#¸vÀd½|Ó6Lñ4� f°VØ 1±Ø˜”à˜a•y�Ü03´C¸À½Ó0DÑ-�˜vØKLÐL�ÐL˜ÐL ÐL¨}¸yà7¸±xÐ@�Ü  “oÐ%Ø °¸uØ°	ð;ô ;ó/ ÷ 9×8üs   ‚D9¡D&²C4D9Ä&D6	Ä1D9c               3   óR  "  € \         P                  ! R 4       Fõ  p \         P                  ! \         P                  P	                  R V 4      4       Fº  w  rpRV9  d   K  \        \         P                  P	                  VR4      4      ;_uu_ 4       pVP                  4       P                  4       P                  4       pRRR4       \         P                  P                  V4      p\        \        XR,          4      w
  rxršr¼rÞr/WgW¹WÚWèWÏ3
x € K¼  	  K÷  	  R#   + '       g   i     L_; i5i)ú
/sys/blockÚstatNrX  )rQ   r2  ÚwalkrU   r­   r   râ   rŒ   rS   Úbasenamer‰  rŽ   )ÚblockÚrootrÀ   Úfilesr}   r   rh   r¹  rº  r»  r¼  r½  r¾  r¿  rÀ  rÁ  s                   r3   Ú
read_sysfsÚ$disk_io_counters.<locals>.read_sysfs7  sÚ   é € Ü—Z’Z Ö-ˆEÜ"$§'¢'¬"¯'©'¯,©,°|ÀUÓ*KÖ"L‘�˜Ø Ô&ÙÜœrŸw™wŸ|™|¨D°&Ó9×:Ô:¸aØŸV™V›XŸ^™^Ó-×3Ñ3Ó5�F÷ ;ä—w‘w×'Ñ'¨Ó-�ô 47´s¸FÀ3½KÓ3Hñ1� f°VØ 1Ø F°FØ¨MðFô Fó #Mó .÷ ;×:üs   ‚BD'Â-D	Â=AD'ÄD$ÄD'r´  rÅ  z6/diskstats nor /sys/block are available on this system)rQ   rU   r\  r   r  rj   ÚDISK_SECTOR_SIZE)ÚperdiskrÂ  rÌ  Úgenr¸   r‹  rÍ   rh   r¹  r½  r»  r¿  r¼  rÀ  rº  r¾  rÁ  s   &                r3   Údisk_io_countersrÑ    sâ   € ò
+;ò\Fô 
‡w�w‡~�~œÓ*Ð+¨:Ð6×7Ò7Ù‹m‰Ü	�‰�‰˜×	%Ò	%Ù‹l‰ô Ó Ð!ð "ð ð 	ô " #Ó&Ð&à€GÛˆð ).ñ	&ˆ�f f°UØ˜9ßÔ0°×6Ò6ñ àÔ"Õ"ˆØÔ"Õ"ˆØ¨¸Ø%°iðAˆ‹ñ) ð0 €Nr2   c                   óJ   a € ] tR tRt o RtRR.tR tR tR tR t	R	 t
R
tV tR# )ÚRootFsDeviceFinderim  a2  disk_partitions() may return partitions with device == "/dev/root"
or "rootfs". This container class uses different strategies to try to
obtain the real device path. Resources:
https://bootlin.com/blog/find-root-device/
https://www.systutorials.com/how-to-find-the-disk-where-root-is-on-in-bash-on-linux/.
ÚmajorÚminorc                ó²   € \         P                  ! R 4      P                  p\         P                  ! V4      V n        \         P                  ! V4      V n        R# )rd   N)rQ   rÆ  Úst_devrÔ  rÕ  )r)  Údevs   & r3   r*  ÚRootFsDeviceFinder.__init__w  s3   € Ü�gŠg�c‹l×!Ñ!ˆÜ—X’X˜c“]ˆŒ
Ü—X’X˜c“]ˆŽ
r2   c                óL  € \        \        4        R 24      ;_uu_ 4       pVP                  4       R,           FÍ  pVP                  4       p\	        V4      ^8  d   K%  V^ ,          P                  4       '       d   \        V^ ,          4      MRpV^,          P                  4       '       d   \        V^,          4      MRpV^,          pW@P                  8X  g   K¢  WPP                  8X  g   K´  V'       g   K¾  RV 2u uuRRR4       # 	  RRR4       R#   + '       g   i     R# ; i)z/partitionsr„  Nú/dev/)	r   r   r†  rS   rz   ÚisdigitrŽ   rÔ  rÕ  )r)  r}   r™   r   rÔ  rÕ  rh   s   &      r3   Úask_proc_partitionsÚ&RootFsDeviceFinder.ask_proc_partitions|  sÏ   € Üœ/Ó+Ð,¨KÐ8×9Ô9¸QØŸ™› b×)Ð)�ØŸ™›�Ü�v“; ”?ÙØ*0°­)×*;Ñ*;×*=Ò*=œ˜F 1�IœÀ4�Ø*0°­)×*;Ñ*;×*=Ò*=œ˜F 1�IœÀ4�Ø˜a•y�ØŸJ™JÖ&¨5·J±JÖ+>ß‘tØ!& t f˜~Ñ-÷ :Ò9Ù)÷ :×9×9Ò9ús0   ŸADÁ90DÂ**DÃDÃ+DÃ5DÄDÄD#	c                ób  € R V P                    RV P                   R2p\        V4      ;_uu_ 4       pV F[  pVP                  R4      '       g   K  VP	                  4       P                  R4      ^,          pV'       g   KL  RV 2u uuRRR4       # 	  RRR4       R#   + '       g   i     R# ; i)z/sys/dev/block/rF  z/ueventzDEVNAME=rÛ  N)rÔ  rÕ  r   r�   rŒ   Ú
rpartition)r)  rU   r}   r™   rh   s   &    r3   Úask_sys_dev_blockÚ$RootFsDeviceFinder.ask_sys_dev_block‰  s   € Ø  §¡ ¨A¨d¯j©j¨\¸ÐAˆÜ�t�_Œ_ Û�Ø—?‘? :×.Ô.ØŸ:™:›<×2Ñ2°:Ó>¸qÕA�Dß‘tØ!& t f˜~Ñ-÷ Š_Ù÷ �_�_Š_ús   ±BÁ+BÂ BÂBÂB.	c                óè  € V P                    R V P                   2p\        P                  ! R4      pV F”  p \	        V4      pT;_uu_ 4        VP                  4       P                  4       pWQ8X  dN   \        P                  P                  \        P                  P                  V4      4      pRV 2uuRRR4       u #  RRR4       K–  	  R#   + '       g   i     K«  ; i  \         d     K¼  i ; i)rF  z/sys/class/block/*/devrÛ  N)rÔ  rÕ  rà   Úiglobr   râ   rŒ   rQ   rU   rÈ  Údirnamer3  )r)  ÚneedlerË  r`  r}   Údatarh   s   &      r3   Úask_sys_class_blockÚ&RootFsDeviceFinder.ask_sys_class_block’  s·   € Ø—J‘J�<˜q §¡ Ð-ˆÜ—
’
Ð3Ó4ˆÛˆDð	.Ü˜d“O�÷ ’QØŸ6™6›8Ÿ>™>Ó+�DØ”~Ü!Ÿw™w×/Ñ/´·±·±ÀÓ0EÓF˜Ø!& t f˜~÷	 ”Qà%÷ ‘Qó ÷ —Q�Qûô %ô Úðús   ¸C"ÁA%CÃCÃ"C1Ã0C1c                ó´  € R pVf    V P                  4       pVf    V P                  4       pVf    V P	                  4       pVe*   \
        P                  P                  V4      '       d   V# R # R #   \         d   p\        T4        R p?LtR p?ii ; i  \         d   p\        T4        R p?L‚R p?ii ; i  \         d   p\        T4        R p?L�R p?ii ; ir?  )rÝ  r‹   r   rá  rè  rQ   rU   r\  )r)  rU   r—   s   &  r3   ÚfindÚRootFsDeviceFinder.find¡  sÉ   € ØˆØŠ<ðØ×/Ñ/Ó1�ð Š<ðØ×-Ñ-Ó/�ð Š<ðØ×/Ñ/Ó1�ð
 Ò¤§¡§¡¨t× 4Ò 4ØˆKñ !5Ñøô ô Ü�c—
‘
ûðûô
 ô Ü�c—
‘
ûðûô
 ô Ü�c—
‘
ûðúsE   ˆA1 �B ²B7 Á1BÁ<BÂBÂB4ÂB/Â/B4Â7CÃCÃC)rÔ  rÕ  N)r)   r*   r+   r,   r{  Ú	__slots__r*  rÝ  rá  rè  rë  r1   r}  r~  s   @r3   rÓ  rÓ  m  s4   ø‡ € ñð ˜'Ð"€Iò#ò
.ò.ò.÷ð r2   rÓ  c                ó¶  € \        4       p\        4       pV '       g£   \        V R24      ;_uu_ 4       pV F}  pVP                  4       pVP	                  R4      '       g"   VP                  VP                  4       4       KK  VP                  R4      ^,          pVR8X  g   Kl  VP                  R4       K  	  RRR4       VR8X  dF   \        P                  P                  R4      '       d!   \        P                  P                  R4      pM"\        P                  P                  V R24      p. p\        P                  ! V4      pV Fz  p	V	w  r«r\V
R	8X  d   R
p
V
R9   d#   \        4       P                  4       ;'       g    T
p
V '       g   V
'       d   WQ9  d   KR  \        P                   ! W«W\4      pVP#                  V4       K|  	  V#   + '       g   i     EL; i)z8Return mounted disk partitions as a list of namedtuples.z/filesystemsÚnodevÚ	ÚzfsNr‚   z	/etc/mtabz/self/mountsÚnonerl  >   Úrootfsú	/dev/root)rß   r   r   rŒ   r�   rá   rS   rQ   rU   ÚisfileÚrealpathr½   Údisk_partitionsrÓ  rë  r±   Ú	sdiskpartr{   )r  Úfstypesr|   r}   r™   ÚfstypeÚmounts_pathÚretlistÚ
partitionsÚ	partitionÚdeviceÚ
mountpointÚoptsÚntuples   &             r3   r÷  r÷  ¸  sk  € ä‹e€GÜ!Ó#€KßÜ˜+˜ lÐ3×4Ô4¸Û�Ø—z‘z“|�Ø—‘ w×/Ò/Ø—K‘K §
¡
£Ö-ð "ŸZ™Z¨Ó-¨aÕ0�FØ –ØŸ™ EÖ*ñ ÷ 5ð �gÔ¤"§'¡'§.¡.°×"=Ò"=Ü—g‘g×&Ñ& {Ó3‰ä—g‘g×&Ñ&¨+¨°lÐ'CÓDˆà€GÜ×%Ò% kÓ2€JÛˆ	Ø+4Ñ(ˆ˜FØ�VÔØˆFØÐ,Ô,Ü'Ó)×.Ñ.Ó0×:Ð:°FˆFßß˜VÔ2ÙÜ—’˜v°6Ó@ˆØ�‰�vÖñ  ð €N÷? 5×4Ð4ús   ³A*GÂ"GÇG	c            	     óª	  € \         P                  ! \        4      p \        P                  ! R4      pVP	                  \        P                  ! R4      4       \        V Uu0 uF  q"P                  R4      ^ ,          kK  	  up4      p\        P                  ! R4      p\        P                  ! R4      pV F.  pVP                  RV4      pWa9  g   K  VP                  V4       K0  	  V EF  p VR,           p\        \        V4      4      R,          p	\        P                  P                  \        P                  P!                  V4      R	4      p\#        V4      P%                  4       p
\        TR
,           RR7      p\        TR,           RR7      p\#        TR,           RR7      P%                  4       pTe    \        T4      R,          pTe    \        T4      R,          pY
,          P                  YÙY¼34       EK  	  V'       Eg'   \        P                  ! R4      p\        \+        V4      4      pV EFõ  p \        P                  P                  VR4      p\        \        V4      4      R,          p	\        P                  P                  VR4      p\#        V4      P%                  4       p
\        P                  ! TR,           4      pT Uu0 uFG  pRP                  \        P                  P/                  T4      P                  R4      R,          4      kKI  	  ppRpRpT Fè  p\        P                  P                  TTR,           4      p\#        TRR7      P%                  4       pTR8X  d4   \        \        P                  P                  TTR,           4      RR7      pM9TR8X  d3   \        \        P                  P                  TTR,           4      RR7      pTe    \        T4      R,          pTf   KÕ   \        T4      R,          pKê  	  Y
,          P                  RY›T34       EKø  	  \1        V 4      # u upi   \&        \(        3 d     EKi  i ; i  \(         d    Rp EL�i ; i  \(         d    Rp ELši ; i  \&        \(        3 d   p\-        T4        Rp?EKn  Rp?ii ; iu upi   \(         d    Rp LÌi ; i  \(         d    Rp EK°  i ; i)aÐ  Return hardware (CPU and others) temperatures as a dict
including hardware name, label, current, max and critical
temperatures.

Implementation notes:
- /sys/class/hwmon looks like the most recent interface to
  retrieve this info, and this implementation relies on it
  only (old distros will probably use something else)
- lm-sensors on Ubuntu 16.04 relies on /sys/class/hwmon
- /sys/class/thermal/thermal_zone* is another one but it's more
  difficult to parse
z/sys/class/hwmon/hwmon*/temp*_*z&/sys/class/hwmon/hwmon*/device/temp*_*rÀ   z5/sys/devices/platform/coretemp.*/hwmon/hwmon*/temp*_*z'/sys/devices/platform/coretemp.*/hwmon/z/sys/class/hwmon/Ú_inputg     @�@rh   Ú_maxNrþ   Ú_critÚ_labelrl  z /sys/class/thermal/thermal_zone*ÚtempÚtypez/trip_point*:rj  r·  NÚ_typeÚcriticalÚ_tempÚhigh)Úcollectionsr   r1  rà   ÚextendÚsortedrS   rÖ   r×   Úsubr{   rÈ   r   rQ   rU   r­   rå  r   rŒ   r‹   rÔ   rß   r   rÈ  Údict)r  Ú	basenamesr;   Ú
basenames2Úreplrh   ÚaltnameÚbaserU   ÚcurrentÚ	unit_namer  r  Úlabelr—   Ú
trip_pathsÚpÚtrip_pointsÚ
trip_pointÚ	trip_types                       r3   Úsensors_temperaturesr   ä  s  € ô ×
!Ò
!¤$Ó
'€CÜ—	’	Ð;Ó<€Ið ×Ñ”T—Y’YÐGÓHÔIÜ±Ó;±¨AŸ™ › QŸ˜±Ñ;Ó<€Iô —’Ø?ó€Jô �:Š:Ð@ÓA€DÛˆØ—(‘(Ð.°Ó5ˆØÖ#Ø×Ñ˜TÖ"ñ ô
 ˆð	Ø˜(•?ˆDÜœD ›JÓ'¨&Õ0ˆGÜ—7‘7—<‘<¤§¡§¡°Ó 5°vÓ>ˆDÜ˜D›	Ÿ™Ó)ˆIô �D˜6•M¨DÔ1ˆÜ˜˜w�°Ô6ˆÜ�D˜8•O¨bÔ1×7Ñ7Ó9ˆàÒðÜ˜T“{ VÕ+�ð Òð Ü  ›?¨VÕ3�ð 	�×Ñ˜u¨tÐ>×?ñA ÷F ˆ9Ü—I’IÐ@ÓAˆ	Üœ3˜y›>Ó*ˆ	äˆDðÜ—w‘w—|‘| D¨&Ó1�Ü¤ T£
Ó+¨fÕ4�Ü—w‘w—|‘| D¨&Ó1�Ü ›IŸO™OÓ-�	ô
 Ÿš 4¨.Õ#8Ó9ˆJñ $óá#�Að —‘œŸ™×)Ñ)¨!Ó,×2Ñ2°3Ó7¸Õ<Ö=Ù#ð ð ð ˆHØˆDÛ)�
Ü—w‘w—|‘| D¨*°wÕ*>Ó?�Ü ¨rÔ2×8Ñ8Ó:�	Ø 
Ô*Ü#ÜŸ™Ÿ™ T¨:¸Õ+?Ó@È4ô ‘Hð  &Ô(ÜÜŸ™Ÿ™ T¨:¸Õ+?Ó@È4ô�Dð Ò#ð$Ü$ T›{¨VÕ3˜ð Ô'ð(Ü#(¨£?°VÕ#;šñ' *ð. �N×!Ñ! 2 w°hÐ"?×@ñQ ôT �‹9ÐùòA <øô* œÐ$ô 		ó ð		ûô$ ô Ø“ðûô
 ô  Ø“ð ûô  œZÐ(ô Ü�c”
Þûðüò
øô* &ô $Ø#šð$ûô
 &ô (Ø#'œð(ús�   Á P7Ã-A:P<Æ6QÇQ)È7A4Q=ËAR(ÏR-Ï7S Ð<QÑQÑQ&Ñ%Q&Ñ)Q:Ñ9Q:Ñ=R%ÒR Ò R%Ò-R=Ò<R=Ó SÓSc                 óò  € \         P                  ! \        4      p \        P                  ! R4      pV'       g   \        P                  ! R4      p\	        V Uu0 uF  q"P                  R4      ^ ,          kK  	  up4      pV FÀ  p \        \        VR,           4      4      p\        \        P                  P                  \        P                  P                  T4      R4      4      P                  4       p\        TR,           RR	7      P                  4       pY,          P!                  \"        P$                  ! Yt4      4       KÂ  	  \'        V 4      # u upi   \         d   p\        T4        Rp?Kð  Rp?ii ; i)
ak  Return hardware fans info (for CPU and other peripherals) as a
dict including hardware label and current speed.

Implementation notes:
- /sys/class/hwmon looks like the most recent interface to
  retrieve this info, and this implementation relies on it
  only (old distros will probably use something else)
- lm-sensors on Ubuntu 16.04 relies on /sys/class/hwmon
z/sys/class/hwmon/hwmon*/fan*_*z%/sys/class/hwmon/hwmon*/device/fan*_*rÀ   r  Nrh   r  rl  rþ   )r  r   r1  rà   r  rS   rŽ   r   r‹   r   r   rQ   rU   r­   rå  rŒ   r{   r±   Úsfanr  )r  r  r;   r  r  r—   r  r  s           r3   Úsensors_fansr#  Z  s  € ô ×
!Ò
!¤$Ó
'€CÜ—	’	Ð:Ó;€Ißô —I’IÐEÓFˆ	ä±Ó;±¨AŸ™ › QŸ˜±Ñ;Ó<€IÛˆð	Üœ$˜t h�Ó/Ó0ˆGô œŸ™Ÿ™¤R§W¡W§_¡_°TÓ%:¸FÓCÓD×JÑJÓLˆ	Ü�D˜8•O¨bÔ1×7Ñ7Ó9ˆØ�×ÑœcŸhšh uÓ6Ö7ñ ô �‹9Ðùò <øô ô 	Ü�#ŒJÝûð	ús   Á EÂEÅE6Å E1Å1E6c                 óH  a€ \        4       oV3R lp \        P                  ! \        4       Uu. uF3  pVP	                  R4      '       g   RVP                  4       9   g   K1  VNK5  	  ppV'       g   R# \        P                  P                  \        \        V4      4      pV ! VR,           VR,           4      pV ! VR,           VR,           4      pV ! VR	,           VR
,           4      pV ! VR,           4      pVe   Ve    RV,          V,          pM&\        \        VR,           RR7      4      pVR8X  d   R# Rp	V ! \        P                  P                  \        R4      \        P                  P                  \        R4      4      p
V
e   V
^8H  p	MC\        VR,           RR7      P                  4       P                  4       pVR8X  d   Rp	M	VR9   d   Rp	V	'       d   \        P                  pMjVe)   Ve%    \        V\        V4      ,          R,          4      pM>Ve+   \        V^<,          4      pV^ 8  d   \        P                   pM\        P                   p\"        P$                  ! WŒV	4      # u upi   \         d    Rp ELKi ; i  \         d    \        P                   p LMi ; i)zïReturn battery information.
Implementation note: it appears /sys/class/power_supply/BAT0/
directory structure may vary and provide files with the same
meaning but under different names, see:
https://github.com/giampaolo/psutil/issues/966.
c                 ó¤   <€ V  F%  p\        VSR7      pVS8w  g   K   \        V4      u # 	  R#   \         d    TP                  4       u u # i ; i)zfAttempt to read the content of multiple files which may
not exist. If none of them exist return None.
rþ   N)r   rŽ   rÔ   rŒ   )r  rU   r  Únulls   *  €r3   Ú
multi_bcatÚ#sensors_battery.<locals>.multi_bcat‚  sR   ø€ ó ˆDÜ�t dÔ+ˆCØ�dŽ{ð'Ü˜s›8’Oñ	 ñ øô "ô 'ØŸ9™9›;Ô&ð'ús   ž
/¯AÁAÚBATÚbatteryNz/energy_nowz/charge_nowz
/power_nowz/current_nowz/energy_fullz/charge_fullz/time_to_empty_nowg      Y@rƒ   z	/capacityrþ   z
AC0/onlinez	AC/onlineú/statusrl  ÚdischargingFTi  r0  >   ÚfullÚcharging)ÚobjectrQ   r2  ÚPOWER_SUPPLY_PATHr�   rÕ   rU   r­   r�   ÚZeroDivisionErrorrŽ   r   rŒ   r   ÚPOWER_TIME_UNLIMITEDÚabsÚPOWER_TIME_UNKNOWNr±   Úsbattery)r'  r;   ÚbatsrÊ  Ú
energy_nowÚ	power_nowÚenergy_fullÚtime_to_emptyr·   Úpower_pluggedÚonlinerf  Úsecsleftr&  s                @r3   Úsensors_batteryr>  y  sQ  ø€ ô ‹8€Dõô —’Ô-Ô.óá.ˆAØ�<‰<˜×Ò )¨q¯w©w«yÑ"8÷ 	
ˆÙ.ð 	ð ÷
 Ùô �7‰7�<‰<Ô)¬3¨t«9Ó5€Dñ ˜D =Õ0°$¸Õ2FÓG€JÙ˜4 ,Õ.°°~Õ0EÓF€IÙ˜T NÕ2°D¸>Õ4IÓJ€KÙ˜tÐ&:Õ:Ó;€Mð Ò :Ò#9ð	Ø˜jÕ(¨;Õ6‰Gô ”c˜$ Õ,°rÔ:Ó;ˆØ�bŒ=Ùð
 €MÙÜ
�‰�‰Ô&¨Ó5Ü
�‰�‰Ô&¨Ó4ó€Fð ÒØ !™‰ä�T˜IÕ%°Ô3×9Ñ9Ó;×AÑAÓCˆØ�]Ô"Ø!‰MØÐ+Ô+Ø ˆM÷ Ü×/Ñ/‰Ø	Ò	 IÒ$9ð	2Ü˜:¬¨I«Õ6¸Õ=Ó>‰Hð 
Ò	"Ü�} rÕ)Ó*ˆØ�aŒ<Ü×1Ñ1ˆHøä×-Ñ-ˆä�<Š<˜¨=Ó9Ð9ùòCøô. !ô 	Ø‹Gð	ûôB !ô 	2Ü×1Ñ1ŠHð	2ús5   ®I*Á
I*Á!I*Ã=I/ Ç2"J É/J É?J ÊJ!Ê J!c                 ó¸   € . p \         P                  ! 4       pV F<  pVw  r4rVp\        P                  ! Y4;'       g    RWVV4      pV P	                  V4       K>  	  V # )z:Return currently connected users as a list of namedtuples.N)r½   Úusersr±   Úsuserr{   )	rü  ÚrawlistÚitemrr   ÚttyÚhostnameÚtstampr8  Únts	            r3   r@  r@  Ø  sS   € à€GÜ�jŠj‹l€GÛˆØ+/Ñ(ˆ�8 SÜ�YŠY�tŸ[˜[ D¨(¸CÓ@ˆØ�‰�rÖñ ð €Nr2   c                 ó@  € \        4        R2p \        V 4      ;_uu_ 4       pV FT  pVP                  R4      '       g   K  \        VP	                  4       P                  4       ^,          4      u uuRRR4       # 	  RV  2p\        V4      h  + '       g   i     R# ; i)zAReturn the system boot time expressed in seconds since the epoch.rl   s   btimeNzline 'btime' not found in )r   r   r�   rÈ   rŒ   rS   r]  )rU   r}   r™   r¸   s       r3   Ú	boot_timerI  ã  s‚   € äÓÐ  Ð&€DÜ	�T×	Ô	˜aÛˆDØ�‰˜x×(Ô(Ü˜TŸZ™Z›\×/Ñ/Ó1°!Õ4Ó5Ñ5÷ 
Ò	Ùð +¨4¨&Ð1ˆÜ˜3ÓÐ÷ 
×	Ð	ús   ¡BÁ /BÁ:BÂB	c                 óÒ   € \        4       P                  \        4      p \        P                  ! V 4       Uu. uF%  qP                  4       '       g   K  \        V4      NK'  	  up# u upi )z7Returns a list of PIDs currently running on the system.)r   rH  r   rQ   r2  rÜ  rŽ   )rU   r;   s     r3   r@  r@  ó  sD   € äÓ×#Ñ#¤HÓ-€DÜŸJšJ tÔ,Ó<Ñ,�q·	±	·ŒFŒC�ŽFÑ,Ñ<Ð<ùÒ<s   ¶A$ÁA$c                ó¸  € \         P                  ! V 4      '       g   R#  \        4        RV  R2p\        V4      ;_uu_ 4       pV FJ  pVP	                  R4      '       g   K  \        VP                  4       ^,          4      pW@8H  u uuRRR4       # 	  RV 2p\        V4      h  + '       g   i     R# ; i  \        \        3 d    T \        4       9   u # i ; i)z[Check for the existence of a unix PID. Linux TIDs are not
supported (always return False).
Frd   r+  s   Tgid:Nz'Tgid' line not found in )
r   Ú
pid_existsr   r   r�   rŽ   rS   rÔ   r‹   r@  )r8  rU   r}   r™   Útgidr¸   s   &     r3   rL  rL  ù  sÄ   € ô ×Ò˜s×#Ò#Ùð	!ô &Ó'Ð(¨¨#¨¨gÐ6ˆDÜ˜T×"Ô" aÛ�DØ—‘ x×0Ô0Ü" 4§:¡:£<°¥?Ó3˜ð  $™{Ñ*÷ #Ò"Ùð 2°$°Ð8�Ü  “oÐ%÷ #×"Ð"ûô œÐ$ô 	!Øœ$›&‘=Ò ð	!ús;    #B8 ÁB$Á"%B$Â
B8 ÂB$Â$B5	Â/B8 Â5B8 Â8CÃCc                 ó°  € / p \        4       p\        4        Fv  p \        V RV R24      ;_uu_ 4       pVP                  4       pRRR4       XP	                  R4      pWE^,           R P                  4       p\        V^,          4      pWpV&   Kx  	  V #   + '       g   i     LV; i  \        \        3 d     K£  \         d   p\        T4      ThRp?ii ; i)zkObtain a {pid: ppid, ...} dict for all running processes in
one shot. Used to speed up Process.children().
rd   rl   Nó   ))r   r@  r   râ   r‡  rS   rŽ   r3  r4  rB  r   )	r  r|   r8  r}   rç  ÚrparÚdsetÚppidr—   s	            r3   Úppid_maprS    sÄ   € ð €CÜ!Ó#€KÜŽvˆð	Ü ˜}¨A¨c¨U°%Ð8×9Ô9¸QØ—v‘v“x�÷ :ð —:‘:˜dÓ#ˆDØ˜q�˜
Ð#×)Ñ)Ó+ˆDÜ�t˜A•w“<ˆDØ�‹Hñ ð €J÷ :×9ûä!Ô#5Ð6ô 	ÚÜô 	-Ü˜sÓ#¨Ð,ûð	-ús:   ›B&´BÁB&ÂB#ÂB&Â&CÂ:CÃCÃCÃCc                óF   a € \         P                  ! S 4      V 3R l4       pV# )zXDecorator which translates bare OSError exceptions into
NoSuchProcess and AccessDenied.
c                 óž  <€ V P                   V P                  rC S! V .VO5/ VB #   \         d   p\        Y44      ThR p?i\         d"   pT P                  4        \        Y44      ThR p?i\         dX   pT P                  4        \        P                  P                  T P                   RT R24      '       g   \        Y44      Thh R p?ii ; i)Nrd   rl   )r8  Ú_namerB  r   r4  Ú_raise_if_zombier   r3  rQ   rU   r\  r(  )r)  rŠ   Úkwargsr8  rh   r—   Úfuns   &*,   €r3   ÚwrapperÚ wrap_exceptions.<locals>.wrapper5  s¹   ø€ à—H‘H˜dŸj™jˆTð	Ù�tÐ-˜dÒ- fÑ-Ð-øÜô 	3Ü˜sÓ)¨sÐ2ûÜ!ô 	4Ø×!Ñ!Ô#Ü Ó*°Ð3ûÜ ô 	Ø×!Ñ!Ô#ô —7‘7—>‘> T×%6Ñ%6Ð$7°q¸¸¸UÐ"C×DÒDÜ# CÓ.°CÐ7Øûð	ús7   š& ¦C±=½CÁ
CÁA'Á'CÁ4CÁ5ACÃC)Ú	functoolsÚwraps)rY  rZ  s   f r3   Úwrap_exceptionsr^  0  s'   ø€ ô
 ‡_‚_�SÓôó ðð$ €Nr2   c                   óÊ  a € ] tR tRt o Rt. R<OtR tR tR tR t	]
3R lt]]R 4       4       t]]R	 4       4       t]]R
 4       4       tR tR t]R 4       t]R 4       t]R 4       t]R 4       t]R 4       t]P2                  P5                  R]P6                  ! 4        R24      '       d	   ]R 4       t]R 4       t]R 4       t]R=R l4       t]R>R l4       t ]R 4       t!]"'       g	   ]#'       dJ   R t$]]%PL                  ! R4      ]%PL                  ! R4      ]%PL                  ! R4      3R l4       t']R  4       t(M]!t(]#'       d	   ]R! 4       t)]R" 4       t*]]%PL                  ! R#4      3R$ l4       t+]]%PL                  ! R%4      3R& l4       t,]R' 4       t-]R( 4       t.]R) 4       t/]0'       d'   ]R* 4       t1]%PL                  ! R+4      3R, lt2]R- 4       t3]4'       d   ]R. 4       t5]R/ 4       t6]7! ]8R04      '       d   ]R=R1 l4       t9]R2 4       t:]R3 4       t;]R?R4 l4       t<]R5 4       t=]R6 4       t>]]%PL                  ! R74      3R8 l4       t?]]%PL                  ! R94      3R: l4       t@R;tAV tBR# )@ÚProcessiK  zLinux process implementation.c                óZ   € Wn         R V n        R V n        R V n        \	        4       V n        R # r?  )r8  rV  Ú_ppidÚ_ctimer   r(  )r)  r8  s   &&r3   r*  ÚProcess.__init__W  s'   € ØŒØˆŒ
ØˆŒ
ØˆŒÜ+Ó-ˆÖr2   c                óÂ   €  \        V P                   R V P                   R24      pVP                  R4      pW^,           V^,            pVR8H  #   \         d     R# i ; i)rd   rl   rO  ó   ZF)r   r(  r8  r‡  r‹   )r)  rç  rP  rf  s   &   r3   Ú
_is_zombieÚProcess._is_zombie^  si   € ð	"Ü˜4×,Ñ,Ð-¨Q¨t¯x©x¨j¸Ð>Ó?ˆDð —:‘:˜dÓ#ˆDØ �( T¨A¥XÐ.ˆFØ˜T‘>Ð!øô ô 	Úð	ús   ‚%A ÁAÁAc                óˆ   € V P                  4       '       d,   \        V P                  V P                  V P                  4      hR # r?  )rg  r   r8  rV  rb  ©r)  s   &r3   rW  ÚProcess._raise_if_zombien  s/   € Ø�?‰?×ÒÜ §¡¨$¯*©*°d·j±jÓAÐAñ r2   c                ód   € \         P                  ! V P                   RV P                   24       R# )z+Raise NSP if the process disappeared on us.rd   N)rQ   rÆ  r(  r8  rj  s   &r3   Ú_raise_if_not_aliveÚProcess._raise_if_not_aliver  s&   € ô 	�Š�4×$Ñ$Ð% Q t§x¡x jÐ1Ö2r2   c                óþ   €  \        V4      #   \        \        3 d_    \        P                  P                  T P                   R T P                   24      '       d   T P                  4        T\        Jd   Tu # h i ; i)rd   )
rR   r3  r4  rQ   rU   Úlexistsr(  r8  rW  ÚUNSET)r)  rU   r“   s   &&&r3   Ú	_readlinkÚProcess._readlinkx  sk   € ð	Ü˜D“>Ð!øÜ!Ô#5Ð6ô 	Ü�w‰w�‰ $×"3Ñ"3Ð!4°A°d·h±h°ZÐ@×AÒAØ×%Ñ%Ô'Ø¤5Ó(Ø#’OØð	ús   ‚
 �AA<ÁA<Á:A<c                ó  € \        V P                   RV P                   R24      pVP                  R4      pWP	                  R4      ^,           V pW^,           R P                  4       p/ pW5R&   V^ ,          VR&   V^,          VR&   V^,          VR	&   V^,          VR
&   V^,          VR&   V^,          VR&   V^,          VR&   V^,          VR&   V^$,          VR&    V^',          VR&   V#   \         d    \        R4       ^ TR&    T# i ; i)a!  Parse /proc/{pid}/stat file and return a dict with various
process info.
Using "man proc" as a reference: where "man proc" refers to
position N always subtract 3 (e.g ppid position 4 in
'man proc' == position 1 in here).
The return value is cached in case oneshot() ctx manager is
in use.
rd   rl   rO  ó   (Nrh   rf  rR  ÚttynrÚutimeÚstimeÚchildren_utimeÚchildren_stimeÚcreate_timeÚcpu_numÚblkio_ticksz&can't get blkio_ticks, set iowait to 0)r   r(  r8  r‡  rë  rS   Ú
IndexErrorr   )r)  rç  rP  rh   r   r  s   &     r3   Ú_parse_stat_fileÚProcess._parse_stat_fileˆ  s-  € ô �t×(Ñ(Ð)¨¨4¯8©8¨*°EÐ:Ó;ˆð �z‰z˜$ÓˆØ—I‘I˜d“O aÕ'¨$Ð/ˆØ˜Q•h�jÐ!×'Ñ'Ó)ˆàˆØˆF‰Ø˜q�	ˆˆH‰Ø˜Q•iˆˆF‰Ø˜a•yˆˆG‰Ø˜b•zˆˆG‰Ø˜b•zˆˆG‰Ø & r¥
ˆÐÑØ & r¥
ˆÐÑØ# B�ZˆˆMÑØ �ˆˆI‰ð	#Ø!'¨¥ˆC�Ñð ˆ
øô ô 	#äÐ:Ô;Ø!"ˆC�Òàˆ
ð	#ús   ÃC+ Ã+D
Ä	D
c                óº   € \        V P                   RV P                   R24      ;_uu_ 4       pVP                  4       uuRRR4       #   + '       g   i     R# ; i)zwRead /proc/{pid}/stat file and return its content.
The return value is cached in case oneshot() ctx manager is
in use.
rd   r+  N)r   r(  r8  râ   ©r)  r}   s   & r3   Ú_read_status_fileÚProcess._read_status_file¯  sB   € ô ˜D×-Ñ-Ð.¨a°·±¨z¸ÐA×BÔBÀaØ—6‘6“8÷ C×B×BÓBús   ®A	Á	A	c                óÖ   € \        V P                   R V P                   R24      ;_uu_ 4       pVP                  4       P	                  4       uuRRR4       #   + '       g   i     R# ; i)rd   r   N)r   r(  r8  râ   rŒ   r‚  s   & r3   Ú_read_smaps_fileÚProcess._read_smaps_file¹  sI   € ô ˜D×-Ñ-Ð.¨a°·±¨z¸Ð@×AÔAÀQØ—6‘6“8—>‘>Ó#÷ B×A×AÓAús   ®AÁA(	c                ó¨   € V P                   P                  V 4       V P                  P                  V 4       V P                  P                  V 4       R # r?  )r  Úcache_activaterƒ  r†  rj  s   &r3   Úoneshot_enterÚProcess.oneshot_enter¿  s>   € Ø×Ñ×,Ñ,¨TÔ2Ø×Ñ×-Ñ-¨dÔ3Ø×Ñ×,Ñ,¨TÖ2r2   c                ó¨   € V P                   P                  V 4       V P                  P                  V 4       V P                  P                  V 4       R # r?  )r  Úcache_deactivaterƒ  r†  rj  s   &r3   Úoneshot_exitÚProcess.oneshot_exitÄ  s>   € Ø×Ñ×.Ñ.¨tÔ4Ø×Ñ×/Ñ/°Ô5Ø×Ñ×.Ñ.¨tÖ4r2   c                óB   € \        V P                  4       R ,          4      # )rh   )r   r  rj  s   &r3   rh   ÚProcess.nameÉ  s   € ô �d×+Ñ+Ó-¨fÕ5Ó6Ð6r2   c                ó\   € V P                  V P                   R V P                   R2RR7      # )rd   z/exerl  rþ   ©rr  r(  r8  rj  s   &r3   ÚexeÚProcess.exeÎ  ó5   € à�~‰~Ø× Ñ Ð!  4§8¡8 *¨DÐ1¸Bð ó 
ð 	
r2   c                óÚ  € \        V P                   R V P                   R24      ;_uu_ 4       pVP                  4       pRRR4       X'       g   V P	                  4        . # VP                  R4      '       d   RMRpVP                  V4      '       d   VRR pVP                  V4      pVR8X  d)   \        V4      ^8X  d   RV9   d   VP                  R4      pV#   + '       g   i     L£; i)rd   z/cmdlineNrL   rÒ   r0  )r   r(  r8  râ   rW  rT   rS   rz   )r)  r}   rç  ÚsepÚcmdlines   &    r3   r™  ÚProcess.cmdlineÔ  sÀ   € ä˜$×+Ñ+Ð,¨A¨d¯h©h¨Z°xÐ@×AÔAÀQØ—6‘6“8ˆD÷ Bçà×!Ñ!Ô#ØˆIð Ÿ™ f×-Ò-‰f°3ˆØ�=‰=˜×ÒØ˜˜�9ˆDØ—*‘*˜S“/ˆð �&Œ=œS ›\¨QÔ.°3¸$´;Ø—j‘j “oˆGØˆ÷- B×Aús   ®CÃC*	c                óÊ   € \        V P                   R V P                   R24      ;_uu_ 4       pVP                  4       pRRR4       \	        X4      #   + '       g   i     L; i)rd   z/environN)r   r(  r8  râ   r   )r)  r}   rç  s   &  r3   ÚenvironÚProcess.environî  sM   € ä˜$×+Ñ+Ð,¨A¨d¯h©h¨Z°xÐ@×AÔAÀQØ—6‘6“8ˆD÷ Bä" 4Ó(Ð(÷ B×Aús   ®AÁA"	c                ó¢   € \        V P                  4       R ,          4      p\        P                  ! 4       p W!,          #   \         d     R# i ; i)rv  N)rŽ   r  r   Úget_terminal_mapr‰   )r)  Útty_nrr'  s   &  r3   ÚterminalÚProcess.terminalô  sG   € ä�T×*Ñ*Ó,¨WÕ5Ó6ˆÜ×(Ò(Ó*ˆð	Ø•<ÐøÜô 	Úð	ús   ·? ¿AÁAr   ú/ioc           	     ó|  € V P                    R V P                   R2p/ p\        V4      ;_uu_ 4       pV F>  pVP                  4       pV'       g   K   VP	                  R4      w  rV\        V4      W%&   K@  	  RRR4       V'       g   V R2p\        V4      h \        P                  ! VR,          VR,          VR,          VR,          VR	,          VR
,          4      #   \         d     K¶  i ; i  + '       g   i     L€; i  \         d/   pTP                  ^ ,          : RT RT: 2p\        T4      RhRp?ii ; i)rd   r£  s   : Nz file was emptys   syscrs   syscws
   read_bytess   write_bytess   rchars   wcharz field was not found in z; found fields are )r(  r8  r   rŒ   rS   rŽ   rÔ   r]  r±   Úpior‰   rŠ   )	r)  Úfnamer   r}   r™   rh   rë   r¸   r—   s	   &        r3   Úio_countersÚProcess.io_counters   s9  € à×(Ñ(Ð)¨¨4¯8©8¨*°CÐ8ˆEØˆFÜ˜U×#Ô# qÛ�DàŸ:™:›<�Dß‘tð6Ø*.¯*©*°UÓ*;™K˜Dô
 ,/¨u«:˜F›Lñ ÷ $÷ Ø˜˜Ð/�Ü" 3Ó'Ð'ð0Ü—w’wØ˜8Õ$Ø˜8Õ$Ø˜=Õ)Ø˜>Õ*Ø˜8Õ$Ø˜8Õ$óð øô  *ô %â$ð%ú÷ $×#ûô0 ô 0à—x‘x •{‘oÐ%=¸e¸Wð E#Ø#)¡*ð.ð ô ! “o¨4Ð/ûð0úsH   ²C/ÁCÁ&C/ÂAD ÃC,	Ã(C/Ã+C,	Ã,C/Ã/C?	ÄD;Ä)D6Ä6D;c                ót  € V P                  4       p\        VR ,          4      \        ,          p\        VR,          4      \        ,          p\        VR,          4      \        ,          p\        VR,          4      \        ,          p\        VR,          4      \        ,          p\        P                  ! W#WEV4      # )rw  rx  ry  rz  r}  )r  rÈ   rÉ   r±   Ú	pcputimes)r)  r~   rw  rx  ry  rz  rv   s   &      r3   rÊ   ÚProcess.cpu_times#  sŒ   € à×&Ñ&Ó(ˆÜ�f˜W•oÓ&¬Õ4ˆÜ�f˜W•oÓ&¬Õ4ˆÜ˜vÐ&6Õ7Ó8¼;ÕFˆÜ˜vÐ&6Õ7Ó8¼;ÕFˆÜ�v˜mÕ,Ó-´Õ;ˆÜ�}Š}Ø˜.¸&ó
ð 	
r2   c                óB   € \        V P                  4       R,          4      # )zWhat CPU the process is on.r|  ©rŽ   r  rj  s   &r3   r|  ÚProcess.cpu_num/  s   € ô �4×(Ñ(Ó*¨9Õ5Ó6Ð6r2   Nc                óD   € \         P                  ! V P                  V4      # r?  )r   Úwait_pidr8  )r)  Útimeouts   &&r3   ÚwaitÚProcess.wait4  s   € ä× Ò  §¡¨7Ó3Ð3r2   c                óÜ   € V P                   f1   \        V P                  4       R,          4      \        ,          V n         V'       d   V P                   # V P                   \	        4       ,           # )Nr{  )rc  rÈ   r  rÉ   rI  )r)  Ú	monotonics   &&r3   r{  ÚProcess.create_time8  sR   € ð �;‰;Òä�d×+Ñ+Ó-¨mÕ<Ó=ÄÕKð ŒK÷ Ø—;‘;Ðð �{‰{œY›[Õ(Ð(r2   c           	     ó.  € \        V P                   R V P                   R24      ;_uu_ 4       pR VP                  4       P	                  4       R,           4       w  r#rErgpRRR4       \
        P                  ! XXXXXXX4      #   + '       g   i     L,; i)rd   z/statmc              3   óN   "  € T F  p\        V4      \        ,          x € K  	  R # 5ir?  )rŽ   r�   )Ú.0r;   s   & r3   Ú	<genexpr>Ú&Process.memory_info.<locals>.<genexpr>W  s    é € ð 8Ù+C a”�A“œ×!Ò!Ó+Cùs   ‚#%:Nrk  NN)r   r(  r8  ry   rS   r±   Úpmem)	r)  r}   ÚvmsÚrssr¢   ÚtextÚlibrç  Údirtys	   &        r3   Úmemory_infoÚProcess.memory_infoI  s‚   € ô ˜D×-Ñ-Ð.¨a°·±¨z¸Ð@×AÔAÀQñ8Ø+,¯:©:«<×+=Ñ+=Ó+?ÀÖ+Có8Ñ4ˆC�f C¨u÷ Bô �xŠx˜˜S &¨$°°T¸5ÓAÐA÷	 B×Aús   ®2BÂB	c                óF  € ^ ;p;r#\        V P                   RV P                   R24      ;_uu_ 4       pV FÊ  pVP                  R4      '       d1   V\	        VP                  4       ^,          4      R,          ,          pKJ  VP                  R4      '       d*   \	        VP                  4       ^,          4      R,          pKŠ  VP                  R4      '       g   K£  \	        VP                  4       ^,          4      R,          pKÌ  	  RRR4       WV3#   + '       g   i     L; i)rj  rd   r   s   Private_rŸ   ó   Pss:ó   Swap:N)r   r(  r8  r�   rŽ   rS   )r)  ÚussÚpssÚswapr}   r™   s   &     r3   Ú_parse_smaps_rollupÚProcess._parse_smaps_rollup^  sà   € ð  !Ð ˆCÐ �#ÜØ×$Ñ$Ð% Q t§x¡x j°Ð>÷ô àÛ�DØ—‘ {×3Ò3àœs 4§:¡:£<°¥?Ó3°dÕ:Õ:šØŸ™¨×1Ò1Ü! $§*¡*£,¨q¥/Ó2°TÕ9šØŸ™¨×2Ô2Ü" 4§:¡:£<°¥?Ó3°dÕ:šñ ÷ð ˜dÐ#Ð#÷÷ ús   ³A#DÂ=DÃ+DÄD 	s   \nPrivate.*:\s+(\d+)s   \nPss\:\s+(\d+)s   \nSwap\:\s+(\d+)c                óD  € V P                  4       p\        \        \        VP	                  V4      4      4      R ,          p\        \        \        VP	                  V4      4      4      R ,          p\        \        \        VP	                  V4      4      4      R ,          pWVV3# )rŸ   )r†  rã   r‰  rŽ   Úfindall)r)  Ú_private_reÚ_pss_reÚ_swap_reÚ
smaps_datarÇ  rÈ  rÉ  s   &&&&    r3   Ú_parse_smapsÚProcess._parse_smapsu  s€   € ð* ×.Ñ.Ó0ˆJô ”cœ#˜{×2Ñ2°:Ó>Ó?Ó@À4ÕGˆCÜ”cœ#˜wŸ™¨zÓ:Ó;Ó<¸tÕCˆCÜ”sœ3 × 0Ñ 0°Ó <Ó=Ó>ÀÕEˆDØ˜dÐ#Ð#r2   c                ó  € \         '       d    V P                  4       w  rpMV P	                  4       w  rpV P                  4       p\        P                  ! WAW#3,           !  #   \        \        3 d    T P	                  4       w  rp LRi ; ir?  )ÚHAS_PROC_SMAPS_ROLLUPrÊ  r4  r3  rÒ  rÂ  r±   Úpfullmem)r)  rÇ  rÈ  rÉ  Ú	basic_mems   &    r3   Úmemory_full_infoÚProcess.memory_full_info’  s�   € ç$Ó$ð9Ø%)×%=Ñ%=Ó%?‘N�C™dð "&×!2Ñ!2Ó!4‘�˜$Ø×(Ñ(Ó*ˆIÜ—<’< °3Ð-=Õ!=Ñ>Ð>øô +Ô,=Ð>ô 9Ø%)×%6Ñ%6Ó%8‘N�Cšdð9ús   ŽA! Á!$BÂBc                ó�  € R pV P                  4       pV'       g   V P                  4        . # VP                  R4      p. pVP                  ^ 4      pV.pV! W64       EFD  w  rrVP                  R^4      p Vw  ršr¼rÞV'       g   RpMH\        V4      pVP                  4       pVP                  R4      '       d   \        V4      '       g   VRR p\        V	4      \        V
4      VVP                  R^ 4      VP                  R^ 4      VP                  R	^ 4      VP                  R
^ 4      VP                  R^ 4      VP                  R^ 4      VP                  R^ 4      VP                  R^ 4      VP                  R^ 4      VP                  R^ 4      3pVP                  V4       EKG  	  V#   \         d    TR.,           w  ršr¼rÞ ELHi ; i)a˜  Return process's mapped memory regions as a list of named
tuples. Fields are explained in 'man proc'; here is an updated
(Apr 2012) version: https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/tree/Documentation/filesystems/proc.txt?id=b76437579d1344b612cf1851ae610c636cec7db0.

/proc/{PID}/smaps does not exist on kernels < 2.6.14 or if
CONFIG_MMU kernel configuration option is not enabled.
c              3   óÐ  "  € / pV  F}  pVP                  R ^4      pV^ ,          P                  R4      '       g(   VP                  4       V3x € VP                  V4       KZ   \	        V^,          4      R,          W$^ ,          &   K  	  VP                  4       V3x € R #   \
        \        3 d5    T^ ,          P                  R4      '       d    KÉ  RT: 2p\        T4      R hi ; i5i)Nrõ   rŸ   s   VmFlags:z!don't know how to interpret line )rS   rT   Úpopr{   rŽ   rÔ   r~  r�   )rŠ  Úcurrent_blockrç  r™   r   r¸   s   &&    r3   Ú
get_blocksÚ'Process.memory_maps.<locals>.get_blocks­  sÓ   é € Ø�Û!�DØ!ŸZ™Z¨¨aÓ0�FØ! !�9×-Ñ-¨d×3Ò3à,×0Ñ0Ó2°DÐ9Ò9Ø%×,Ñ,¨TÖ2ð<Ü.1°&¸µ)«n¸tÕ.C˜D¨¥›Oñ "ð %×(Ñ(Ó*¨DÐ1Ô1øô !+¬JÐ7ô <Ø% a�y×3Ñ3°K×@Ò@â (Ø$EÀdÁXÐ"N˜CÜ",¨S£/°tÐ;ð<üs*   ‚AC&Á""BÂC&Â.C#ÃC&ÃC#Ã#C&ó   
Nrl  z[anon]rM   s   Rss:s   Size:rÅ  s   Shared_Clean:s   Shared_Dirty:s   Private_Clean:s   Private_Dirty:s   Referenced:s
   Anonymous:rÆ  rN   )r†  rW  rS   rÜ  rÔ   r   rŒ   rT   r   rˆ   r{   )r)  rÞ  rç  rŠ  rä   Ú
first_linerÝ  ÚheaderÚhfieldsrP  ÚpermsÚ_offsetÚ_devÚ_inoderU   rC  s   &               r3   Úmemory_mapsÚProcess.memory_maps£  sµ  € ò2ð& ×(Ñ(Ó*ˆD÷ Ø×%Ñ%Ô'Ø�	Ø—J‘J˜uÓ%ˆEØˆBØŸ™ 1›ˆJØ'˜LˆMÙ *¨5× @‘�Ø Ÿ,™, t¨QÓ/�ðNØ?FÑ<�D °÷ Ø#‘Dä! $›<�DØŸ:™:›<�DØ—}‘} \×2Ò2Ô;MØ÷<ò <ð  $ D S˜z˜ä˜4“LÜ˜5“MØØ—H‘H˜W aÓ(Ø—H‘H˜X qÓ)Ø—H‘H˜W aÓ(Ø—H‘HÐ-¨qÓ1Ø—H‘HÐ-¨qÓ1Ø—H‘HÐ.°Ó2Ø—H‘HÐ.°Ó2Ø—H‘H˜^¨QÓ/Ø—H‘H˜]¨AÓ.Ø—H‘H˜X qÓ)ð�ð —	‘	˜$—ñ= !Að> ˆIøô7 "ô NØ?FÈ"È½~Ñ<�D °ºðNús   Á6F(Æ(GÇGc                ó\   € V P                  V P                   R V P                   R2RR7      # )rd   z/cwdrl  rþ   r“  rj  s   &r3   ÚcwdÚProcess.cwdë  r–  r2   s   ctxt_switches:\t(\d+)c                ó  € V P                  4       pVP                  V4      pV'       g)   R V P                   RV P                   R2p\	        V4      h\
        P                  ! \        V^ ,          4      \        V^,          4      4      # )zR'voluntary_ctxt_switches' and 'nonvoluntary_ctxt_switches'lines were not found in rd   z1/status; the kernel is probably older than 2.6.23)rƒ  rÍ  r(  r8  r  r±   ÚpctxswrŽ   )r)  Ú	_ctxsw_rerç  Úctxswr¸   s   &&   r3   Únum_ctx_switchesÚProcess.num_ctx_switchesñ  s}   € ð ×%Ñ%Ó'ˆØ×!Ñ! $Ó'ˆßðà×%Ñ%Ð& a¨¯© zð 2.ð.ð ô & cÓ*Ð*Ü�zŠzœ#˜e A�h›-¬¨U°1­X«Ó7Ð7r2   s   Threads:\t(\d+)c                ód   € V P                  4       p\        VP                  V4      ^ ,          4      # ©rj  )rƒ  rŽ   rÍ  )r)  Ú_num_threads_rerç  s   && r3   Únum_threadsÚProcess.num_threads  s-   € ð ×%Ñ%Ó'ˆÜ�?×*Ñ*¨4Ó0°Õ3Ó4Ð4r2   c                ó  € \         P                  ! V P                   R V P                   R24      pVP	                  4        . pRpV Fô  pV P                   R V P                   RV R2p \        V4      ;_uu_ 4       pVP                  4       P                  4       pRRR4       XTP                  R4      ^,           R pTP                  R4      p\        T^,          4      \        ,          p	\        T^,          4      \        ,          p
\        P                  ! \!        T4      Yš4      pTP#                  T4       Kö  	  V'       d   V P%                  4        V#   + '       g   i     LÅ; i  \        \        3 d    Rp EK<  i ; i)	rd   z/taskFz/task/rl   NTrO  r»   )rQ   r2  r(  r8  r  r   râ   rŒ   r3  r4  rë  rS   rÈ   rÉ   r±   ÚpthreadrŽ   r{   rm  )r)  Ú
thread_idsrü  Ú
hit_enoentÚ	thread_idr¦  r}   Ústr~   rw  rx  r  s   &           r3   ÚthreadsÚProcess.threads  s>  € ä—Z’Z 4×#4Ñ#4Ð"5°Q°t·x±x°jÀÐ FÓGˆ
Ø�‰ÔØˆØˆ
Û#ˆIØ×(Ñ(Ð)¨¨4¯8©8¨*°F¸9¸+ÀUÐKˆEðÜ  ×'Ô'¨1ØŸ™›Ÿ™Ó)�B÷ (ð �B—G‘G˜D“M AÕ%Ð'Ð(ˆBØ—X‘X˜d“^ˆFÜ˜& �*Ó%¬Õ3ˆEÜ˜& �*Ó%¬Õ3ˆEÜ—[’[¤ Y£°Ó>ˆFØ�N‰N˜6Ö"ñ! $÷" Ø×$Ñ$Ô&Øˆ÷! (×'ûä%Ô'9Ð:ô ð "�
Ûð	ús0   Á*E,Á=EÂE,ÅE)Å$E,Å)E,Å,FÆFc                óB   € \         P                  ! V P                  4      # r?  )r½   Úproc_priority_getr8  rj  s   &r3   Únice_getÚProcess.nice_get"  s   € ô ×%Ò% d§h¡hÓ/Ð/r2   c                óD   € \         P                  ! V P                  V4      # r?  )r½   Úproc_priority_setr8  )r)  rë   s   &&r3   Únice_setÚProcess.nice_set+  s   € ä×%Ò% d§h¡h°Ó6Ð6r2   c                óB   € \         P                  ! V P                  4      # r?  )r½   r!   r8  rj  s   &r3   Úcpu_affinity_getÚProcess.cpu_affinity_get2  s   € ä×-Ò-¨d¯h©hÓ7Ð7r2   s   Cpus_allowed_list:\t(\d+)-(\d+)c           	     ó2  € V P                  4       pVP                  V4      pV'       dK   \        \        \	        V^ ,          ^ ,          4      \	        V^ ,          ^,          4      ^,           4      4      # \        \        \        \        4       4      4      4      # rô  )rƒ  rÍ  r1  ÚrangerŽ   rz   rÎ   )r)  Ú_rerç  rØ   s   &&  r3   Ú_get_eligible_cpusÚProcess._get_eligible_cpus6  sk   € ð ×)Ñ)Ó+ˆDØ—K‘K Ó%ˆEßÜœE¤# e¨A¥h¨q¥kÓ"2´C¸¸a½À½Ó4DÀqÕ4HÓIÓJÐJäœE¤#¤m£oÓ"6Ó7Ó8Ð8r2   c           	     óÐ  €  \         P                  ! V P                  V4       R#   \        \        3 d°   p\        T\        4      '       g    TP                  \        P                  8X  du   T P                  4       p\        \        \        \        4       4      4      4      pT F9  pYT9  d   R T: RT: 2p\	        T4      RhYS9  g   K'  RT RT 2p\	        T4      Th	  h Rp?ii ; i)zinvalid CPU z; choose between NzCPU number z! is not eligible; choose between )r½   Úproc_cpu_affinity_setr8  r‹   rÔ   rO   r5  r6  r  Útupler  rz   rÎ   )r)  rÌ   r—   Úeligible_cpusÚall_cpusÚcpur¸   s   &&     r3   Úcpu_affinity_setÚProcess.cpu_affinity_setA  sÞ   € ðÜ×*Ò*¨4¯8©8°TÖ:øÜœZÐ(ô Ü˜c¤:×.Ò.°#·)±)¼u¿|¹|Ô2KØ$(×$;Ñ$;Ó$=�MÜ$¤U¬3¬}«Ó+?Ó%@ÓA�HÛ#˜ØÔ.à".¨s©gð 6$Ø$1Ñ#4ð!6ð  ô #-¨S£/°tÐ;ØÖ3à"-¨c¨Uð 3,Ø,9¨?ð!<ð  ô #-¨S£/°sÐ:ñ  $ð ûð#ús   ‚!% ¥C%¶BC Ã	C Ã C%c                óˆ   € \         P                  ! V P                  4      w  r\        V4      p\        P
                  ! W4      # r?  )r½   r    r8  r'   r±   Úpionice)r)  Úioclassrë   s   &  r3   Ú
ionice_getÚProcess.ionice_get[  s1   € ä!×1Ò1°$·(±(Ó;‰NˆGÜ  Ó)ˆGÜ—;’;˜wÓ.Ð.r2   c                ó  € Vf   ^ pV'       d7   V\         P                  \         P                  09   d   V: R2p\        V4      hV^ 8  g   V^8”  d   Rp\        V4      h\        P
                  ! V P                  W4      # )Nz ioclass accepts no valuezvalue not in 0-7 range)r'   r0   r-   rÔ   r½   Úproc_ioprio_setr8  )r)  r  rë   r¸   s   &&& r3   Ú
ionice_setÚProcess.ionice_seta  sy   € àŠ}Ø�ß˜Ü×,Ñ,Ü×,Ñ,ð%ô ð !™Ð#<Ð=�Ü  “oÐ%Ø�qŒy˜E AœIØ.�Ü  “oÐ%Ü×'Ò'¨¯©°'ÓAÐAr2   Úprlimitc                ó˜  € V P                   ^ 8X  d   Rp\        V4      h Vf"   \        P                  ! V P                   V4      # \	        V4      ^8w  d   RV: 2p\        V4      h\        P                  ! V P                   W4       R#   \
         d6   pTP                  \        P                  8X  d   T P                  4        h Rp?ii ; i)rj  z)can't use prlimit() against PID 0 processNz2second argument must be a (soft, hard) tuple, got )	r8  rÔ   Úresourcer!  rz   r‹   r5  ÚENOSYSrW  )r)  Ú	resource_Úlimitsr¸   r—   s   &&&  r3   ÚrlimitÚProcess.rlimitr  s²   € ð
 �x‰x˜1Œ}ØA�Ü  “oÐ%ðØ’>ä#×+Ò+¨D¯H©H°iÓ@Ð@ô ˜6“{ aÔ'ð*Ø*0©ð5ð ô )¨›oÐ-Ü×$Ò$ T§X¡X¨yÖAøÜô Ø—9‘9¤§¡Ô,ð ×)Ñ)Ô+Øûðús    $B	 ÁAB	 Â	C	Â0CÃC	c                ó|   € V P                  4       R ,          pVP                  4       p\        P                  VR4      # )rf  Ú?)r  r   ÚPROC_STATUSESrˆ   )r)  Úletters   & r3   rf  ÚProcess.statusŽ  s3   € à×&Ñ&Ó(¨Õ2ˆØ—‘“ˆä× Ñ  ¨Ó-Ð-r2   c                ó€  € . p\         P                  ! V P                   R V P                   R24      pRpV EF;  pV P                   R V P                   RV 2p \	        V4      pVP                  R 4      '       d÷   \        V4      '       dã   V P                   R V P                   RV 2p \        V4      ;_uu_ 4       p\        VP                  4       P                  4       ^,          4      p\        VP                  4       P                  4       ^,          ^4      p	RRR4       \        X	4      p
\        P                  ! V\        V4      \        X4      W©4      pVP                  V4       EK8  EK;  EK>  	  V'       d   V P-                  4        V#   + '       g   i     L|; i  \        \         3 d    Rp EK„  i ; i  \        \         3 d    Rp EKŸ  \"         d^   pTP$                  \$        P&                  8X  d    Rp?EKÏ  TP$                  \$        P(                  8X  d   \+        T4        Rp?EK   h Rp?ii ; i)rd   r-  Fr.  z/fdinfo/NT)rQ   r2  r(  r8  rR   r�   r   r   rŽ   ry   rS   rb   r±   Ú	popenfiler{   r3  r4  r‹   r5  r6  r7  r   rm  )r)  rü  rË  rû  r:  r`  rU   r}   Úposr_   ra   r  r—   s   &            r3   Ú
open_filesÚProcess.open_files•  sÔ  € àˆÜ—
’
˜d×/Ñ/Ð0°°$·(±(°¸3Ð?Ó@ˆØˆ
ÜˆBØ×'Ñ'Ð(¨¨$¯(©(¨°4¸°tÐ<ˆDð$/Ü “~�ð& —?‘? 3×'Ò'¬M¸$×,?Ò,?à"×/Ñ/Ð0°°$·(±(°¸8ÀBÀ4ÐH�Dð/Ü(¨×.Ô.°!Ü"% a§j¡j£l×&8Ñ&8Ó&:¸1Õ&=Ó">˜CÜ$'¨¯
©
«×(:Ñ(:Ó(<¸QÕ(?ÀÓ$C˜E÷ /ô  2°%Ó8˜Ü!$§¢Ø ¤# b£'¬3¨s«8°Tó"˜ð  Ÿ™ v×.ò! -@Ò'ñ- ÷N Ø×$Ñ$Ô&Øˆ÷ /×.ûô .Ô/AÐBô *ð &*œ
ð*ûô3 &Ô'9Ð:ô à!�
ÛÜô Ø—9‘9¤§¡Ô,æØ—9‘9¤× 2Ñ 2Ô2ä˜#”JÞØûðús[   ÁF?Â,F$Â?AFÄF$ÆF!ÆF$Æ$F<Æ;F<Æ?H=ÇH=ÇH=Ç H8È*H8È7H8È8H=c                ód   € \         P                  WP                  4      pV P                  4        V# r?  )r�  ry  r8  rm  )r)  ru  r  s   && r3   r‚  ÚProcess.net_connectionsÅ  s'   € ä×'Ñ'¨¯h©hÓ7ˆØ× Ñ Ô"Øˆ
r2   c                ót   € \        \        P                  ! V P                   R V P                   R24      4      # )rd   r-  )rz   rQ   r2  r(  r8  rj  s   &r3   Únum_fdsÚProcess.num_fdsË  s.   € ä”2—:’: ×!2Ñ!2Ð 3°1°T·X±X°J¸cÐBÓCÓDÐDr2   c                óB   € \        V P                  4       R ,          4      # )rR  r­  rj  s   &r3   rR  ÚProcess.ppidÏ  s   € ä�4×(Ñ(Ó*¨6Õ2Ó3Ð3r2   s   Uid:\t(\d+)\t(\d+)\t(\d+)c                ó¾   € V P                  4       pVP                  V4      ^ ,          w  r4p\        P                  ! \	        V4      \	        V4      \	        V4      4      # rô  )rƒ  rÍ  r±   ÚpuidsrŽ   )r)  Ú_uids_rerç  ÚrealÚ	effectiveÚsaveds   &&    r3   ÚuidsÚProcess.uidsÓ  óI   € à×%Ñ%Ó'ˆØ!)×!1Ñ!1°$Ó!7¸Õ!:Ñˆ˜Ü�yŠyœ˜T›¤C¨	£N´C¸³JÓ?Ð?r2   s   Gid:\t(\d+)\t(\d+)\t(\d+)c                ó¾   € V P                  4       pVP                  V4      ^ ,          w  r4p\        P                  ! \	        V4      \	        V4      \	        V4      4      # rô  )rƒ  rÍ  r±   ÚpgidsrŽ   )r)  Ú_gids_rerç  r=  r>  r?  s   &&    r3   ÚgidsÚProcess.gidsÙ  rB  r2   )rc  rV  rb  r(  r8  )Ú_cacherc  rV  rb  r(  r8  r?  ©F©r  )Cr)   r*   r+   r,   r{  rí  r*  rg  rW  rm  rq  rr  r^  r   r  rƒ  r†  rŠ  rŽ  rh   r”  r™  rœ  r¡  rQ   rU   r\  Úgetpidr§  rÊ   r|  r²  r{  rÂ  rÕ  ÚHAS_PROC_SMAPSrÊ  rÖ   r×   rÒ  rØ  rè  rë  rñ  rö  rþ  r  r  ÚHAS_CPU_AFFINITYr	  r  r  ÚHAS_PROC_IO_PRIORITYr  r  Úhasattrr#  r'  rf  r1  r‚  r6  rR  r@  rF  r1   r}  r~  s   @r3   r`  r`  K  s×  ø‡ € Ù'ò€Iò.ò"ò Bò3ð (-ô ð  Øñ#ó ó ð#ðJ Øñó ó ðð Øñ$ó ó ð$ò3ò
5ð
 ñ7ó ð7ð ñ
ó ð
ð
 ñó ðð2 ñ)ó ð)ð
 ñó ðð 
‡w�w‡~�~˜˜rŸyšy›{˜m¨3Ð/×0Ò0à	ñ 	0ó 
ð 	0ðD ñ	
ó ð	
ð ñ7ó ð7ð ó4ó ð4ð ó)ó ð)ð  ñBó ðB÷$ §ò	$ð. 
ð Ÿ
š
Ð#;Ó<Ø—J’JÐ2Ó3Ø—Z’ZÐ 4Ó5ó	$ó 
ð	$ð8 
ñ		?ó 
ñ		?ð 'Ðçà	ñE	ó 
ðE	ðN ñ
ó ð
ð
 àŸ
š
Ð#<Ó=ó8ó ð8ð Ø*,¯*ª*Ð5HÓ*Ió 5ó ð5ð
 ñó ðð4 ñ0ó ð0ð ñ7ó ð7÷ à	ñ	8ó 
ð	8ð —j’jÐ!DÓEô		9ð 
ñ	ó 
ð	÷. à	ñ	/ó 
ð	/ð
 
ñ	Bó 
ð	Bñ ˆx˜×#Ò#à	ó	ó 
ð	ð6 ñ.ó ð.ð ñ-ó ð-ð^ óó ðð
 ñEó ðEð ñ4ó ð4ð ØŸJšJÐ'DÓEó @ó ð@ð
 ØŸJšJÐ'DÓEó @ó ö@r2   r`  )ÚPROCFS_PATHr-   r.   r/   r0   ÚCONN_ESTABLISHEDÚCONN_SYN_SENTÚCONN_SYN_RECVÚCONN_FIN_WAIT1ÚCONN_FIN_WAIT2ÚCONN_TIME_WAITÚ
CONN_CLOSEÚCONN_CLOSE_WAITÚCONN_LAST_ACKÚCONN_LISTENÚCONN_CLOSINGrJ  rI  )ˆr{  rK  r  Úenumr5  r\  rà   rQ   rÖ   r#  r!  rM  Úsysr®   r   r   rl  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   r   r   Ú__extra__all__r0  rU   r\  rK  rL  rÕ  rO  rN  rM  rÓ   rÉ   Úgetpagesizer�   Ú	byteorderrI  r/  rq  rÎ  ÚIntEnumrŽ   Ú	AF_PACKETr$   r%   r'   ÚglobalsrA  Ú__members__ÚSTATUS_RUNNINGÚSTATUS_SLEEPINGÚSTATUS_DISK_SLEEPÚSTATUS_STOPPEDÚSTATUS_TRACING_STOPÚSTATUS_ZOMBIEÚSTATUS_DEADÚSTATUS_WAKE_KILLÚSTATUS_WAKINGÚSTATUS_IDLEÚSTATUS_PARKEDr+  rQ  rR  rS  rT  rU  rV  rW  rX  rY  rZ  r[  r^  rR   rb   rj   r�   rq   Ú	Exceptionr—   rœ   r¹   rÄ   rÅ   Ú	heap_trimrÊ   rÎ   rÛ   rì   ró   rö   r  Únet_if_addrsr  r  r�  r‚  r�  r±  Ú
disk_usagerÑ  rÓ  r÷  r   r#  r>  r@  rI  r@  rL  rS  r^  r`  r(   r2   r3   Ú<module>rt     sI  ðñ
 %ã Û Û Û Û Û Û 	Û 	Û Û Û Û 
Û Ý #Ý "å Ý Ý Ý #Ý Ý $Ý $Ý 'Ý !Ý "Ý "Ý Ý Ý Ý Ý $Ý "Ý Ý +Ý  Ý Ý (Ý 'Ý "Ý "ò	€ð$ .Ð Ø—‘—‘ &¨¯ª«¨°VÐ <Ó=€ØŸ™Ÿ™¨°·	²	³¨}¸MÐ'JÓKÐ Ù˜tÐ%6Ó7Ð Ù˜4Ð!8Ó9Ð ð �jŠj˜Ó&€Ø×ÒÓ€Ø—‘ Ñ)€Ù‹€ð Ð à—’Ø�i¡ V×%5Ñ%5Ó!6Ð7ó€ð ×
Ñ
€ô�—‘ô ñ ƒ	× Ñ �×'Ñ'Ô (ð ˆ×	Ñ	Øˆ×	 Ñ	 Øˆ×	"Ñ	"Øˆ×	Ñ	Øˆ×	$Ñ	$Øˆ×	Ñ	Øˆ×	Ñ	Øˆ×	Ñ	Øˆ×	!Ñ	!Øˆ×	Ñ	Øˆ×	Ñ	Øˆ×	Ñ	ð€ð" 	ˆ'×
"Ñ
"Øˆ'×
Ñ
Øˆ'×
Ñ
Øˆ'×
 Ñ
 Øˆ'×
 Ñ
 Øˆ'×
 Ñ
 Øˆ'×
Ñ
Øˆ'×
!Ñ
!Øˆ'×
Ñ
Øˆ'×
Ñ
Øˆ'×
Ñ
ð€ò(ò(
ò$ð& 	ñ+ó 	ð+ð0OÙ% gÓ.€C„Mð �M‰M€	ò<ò~~òB4<ñp ˆ4�×ÒØ—‘€IØ—‘€Iò"òò&ò:'òTNò.
ð ‡7�7‡>�>Ð;×<Ò<ÀÇÁÇÁØ*÷Aò Aó#òNLð × Ñ €ô	˜Iô 	÷iñ iñX "Ó#Ð ô+ò
,ò^ðB × Ñ €
ôf÷RHñ HôV$òXsòlò>W:ò~ò ò =ò!òBò,÷6R
@ó R
@øðO+ ô Oá	Ð*¨3©'Ð
2Ô3Ù˜{Ð,>Ô?ÀÀSÈ#ÓN€C‡M‚MûðOús   ÌP6 Ð6Q*Ð="Q%Ñ%Q*