§
    xÅj×u  ã                   óì  — d Z ddlZddlZddlZddlZddlmZ ddlmZ ddlm	Z	 ddl
mZ ddl
mZ dd	l
mZ dd
l
mZ ddlmZ ddlmZ ddlmZ ddlmZ ddlmZ ddlmZ ddlmZ ddlmZ ddlmZ ddlmZ ddlmZ ddlmZ g ZerWej        ej        ej         ej!        ej"        ej#        ej$        ej%        ej&        ej'        ej(        ej)        ej*        ej+        iZ,n¥erWej        ej        ej"        ej#        ej$        ej%        ej-        ej'        ej&        ej'        ej         ej.        ej/        ej!        iZ,nLerJej        ej        ej"        ej#        ej$        ej%        ej&        ej'        ej         ej.        ej/        ej!        iZ,ej0        ej1        ej2        ej3        ej4        ej5        ej6        ej7        ej8        ej9        ej:        ej;        ej<        ej=        ej>        ej?        ej@        ejA        ejB        ejC        ejD        ejE        ejF        ejG        iZH ejI        ¦   «         ZJejK        ZK eLed¦  «        ZM eNdei dd“dd“dd“dd“dd“d d!“d"d#“d$d%“d&d'“d(d)“d*d+“d,d-“d.d/“d0d1“d2d3“d4d5“d6d7“d8d9“d:d;“d<d=“d>d?“d@dA“dBdC“dDdE“dFdG“ŽZOdH„ ZPdI„ ZQ eLedJ¦  «        rejR        ZRejS        ZSdK„ ZTdL„ ZUdM„ ZVeserdN„ ZWndO„ ZWdP„ ZXerdQ„ ZYnerdR„ ZYdfdT„ZZej[        Z[ej\        Z\ej]        Z]ej^        Z^dU„ Z_dV„ Z`erdW„ ZadX„ ZbdY„ Zcer1	  ec¦   «         Zdn"# ee$ rZf edZef›�¦  «         dZdY dZf[fndZf[fww xY wd[„ Zgd\„ Zhed]„ ¦   «         Zid^„ Zjerd_„ Zknerd`„ Zknejk        Zkda„ Zlejm        db„ ¦   «         Zn G dc„ dd¦  «        ZodS )gz5FreeBSD, OpenBSD and NetBSD platforms implementation.é    N)Údefaultdict)Ú
namedtuple)ÚElementTreeé   )Ú_common)Ú_ntuples)Ú_psposix)Ú_psutil_bsd)ÚFREEBSD)ÚNETBSD)ÚOPENBSD)ÚAccessDenied)ÚNoSuchProcess)ÚZombieProcess)Ú	conn_tmap)Úconn_to_ntuple)Údebug)Úmemoize)Úmemoize_when_activated)Úusage_percentÚproc_num_threadsÚppidÚstatusÚreal_uidé   Úeffective_uidé   Ú	saved_uidé   Úreal_gidé   Úeffective_gidé   Ú	saved_gidé   Úttynré   Úcreate_timeé	   Úctx_switches_volé
   Úctx_switches_unvolé   Úread_io_counté   Úwrite_io_counté   Ú	user_timeé   Úsys_timeé   Úch_user_timeé   Úch_sys_timeé   Úrssé   Úvmsé   Úmemtexté   Úmemdataé   Úmemstacké   Úcpunumé   Únameé   c                  óT  — t          j        ¦   «         } t          rÁ| \  }}}}}}t          dd¦  «        5 }|D ]�}|                     d¦  «        r+t          |                     ¦   «         d         ¦  «        dz  }	ŒB|                     d¦  «        r*t          |                     ¦   «         d         ¦  «        dz  }
Œ‚	 d d d ¦  «         n# 1 swxY w Y   ||z   }||z
  }n| \  }}}}}}}	}
||z   |z   }||z   |z   }t          ||z
  |d¬¦  «        }t          j	        ||||||||	||
|¦  «        S )Nz/proc/meminfoÚrbs   Buffers:r   i   s
   MemShared:©Úround_)
ÚcextÚvirtual_memr   ÚopenÚ
startswithÚintÚsplitr   ÚntpÚsvmem)ÚmemÚtotalÚfreeÚactiveÚinactiveÚwiredÚcachedÚfÚlineÚbuffersÚsharedÚusedÚavailÚpercents                 ú>C:\Projects\Historical\venv\Lib\site-packages\psutil/_psbsd.pyÚvirtual_memoryrc   ˆ   s¡  € Ý
Ô
Ñ
Ô
€CÝð 'Ø7:Ñ4ˆˆt�V˜X u¨fõ �/ 4Ñ(Ô(ð 	9¨AØð 9ð 9�Ø—?’? ;Ñ/Ô/ð 9Ý! $§*¢*¡,¤,¨q¤/Ñ2Ô2°TÑ9�G�GØ—_’_ ]Ñ3Ô3ð 9Ý  §¢¡¤¨a¤Ñ1Ô1°DÑ8�Føð	9ð	9ð 	9ð 	9ñ 	9ô 	9ð 	9ð 	9ð 	9ð 	9ð 	9ð 	9øøøð 	9ð 	9ð 	9ð 	9ð ˜‰~ˆØ˜‘ˆˆàHKÑEˆˆt�V˜X u¨f°g¸vð ˜6Ñ! DÑ(ˆØ˜‰~ Ñ&ˆå˜U U™]¨U¸1Ð=Ñ=Ô=€GÝŒ9ØØØØØØØØØØØñô ð s   ´BCÃC
ÃC
c                  óŠ   — t          j        ¦   «         \  } }}}}t          || d¬¦  «        }t          j        | |||||¦  «        S )z@System swap memory as (total, used, free, sin, sout) namedtuple.r   rJ   )rL   Úswap_memr   rR   Ússwap)rU   r_   rV   ÚsinÚsoutra   s         rb   Úswap_memoryri   ·   sF   € å#'¤=¡?¤?Ñ €Eˆ4��s˜DÝ˜D %°Ð2Ñ2Ô2€GÝŒ9�U˜D $¨°°dÑ;Ô;Ð;ó    Ú	heap_infoc                  ód   — t          j        ¦   «         \  } }}}}t          j        | ||||¦  «        S )z,Return system per-CPU times as a namedtuple.)rL   Ú	cpu_timesrR   Ú	scputimes)ÚuserÚniceÚsystemÚidleÚirqs        rb   rm   rm   É   s2   € å$(¤NÑ$4Ô$4Ñ!€Dˆ$�˜˜cÝŒ=˜˜t V¨T°3Ñ7Ô7Ð7rj   c                  ó    — g } t          j        ¦   «         D ]7}|\  }}}}}t          j        |||||¦  «        }|                      |¦  «         Œ8| S )z(Return system CPU times as a namedtuple.)rL   Úper_cpu_timesrR   rn   Úappend)ÚretÚcpu_tro   rp   rq   rr   rs   Úitems           rb   ru   ru   Ï   s`   € à
€CÝÔ#Ñ%Ô%ð ð ˆØ(-Ñ%ˆˆd�F˜D #ÝŒ}˜T 4¨°°sÑ;Ô;ˆØ�
Š
�4ÑÔÐÐØ€Jrj   c                  ó(   — t          j        ¦   «         S )z0Return the number of logical CPUs in the system.)rL   Úcpu_count_logical© rj   rb   r{   r{   Ù   s   € åÔ!Ñ#Ô#Ð#rj   c                  ó.   — t          ¦   «         dk    rdnd S )Nr   )r{   r|   rj   rb   Úcpu_count_coresr~   à   s   € å%Ñ'Ô'¨1Ò,Ð,ˆqˆq°$Ð6rj   c                  ó~  — d} t          j        ¦   «         }|��|                     d¦  «        }|dk    rt|d|dz   …         }t          j        |¦  «        }	 t          |                     d¦  «        ¦  «        pd} |                     ¦   «          n# |                     ¦   «          w xY w| st          ¦   «         dk    rdS | S )z-Return the number of CPU cores in the system.Nz	</groups>éÿÿÿÿr)   zgroup/children/group/cpur   )	rL   Úcpu_topologyÚrfindr   Ú
fromstringÚlenÚfindallÚclearr{   )rw   ÚsÚindexÚroots       rb   r~   r~   æ   sÁ   € ð ˆÝÔÑÔˆØˆ=à—G’G˜KÑ(Ô(ˆEØ˜Š{ˆ{Ø�k˜ ™	�k”N�Ý"Ô-¨aÑ0Ô0�ð!Ý˜dŸlšlÐ+EÑFÔFÑGÔGÐOÈ4�Cð —J’J‘L”L�L�Lø�D—J’J‘L”L�L�LøøøØð 	å Ñ"Ô" aÒ'Ð'Ø�qØˆ
s   Á$B ÂB$c                  óÐ  — t           rt          j        ¦   «         \  } }}}}n¯t          r†t          j        ¦   «         \  } }}}}}}t	          dd¦  «        5 }|D ]>}|                     d¦  «        r't          |                     ¦   «         d         ¦  «        }Œ?	 ddd¦  «         n# 1 swxY w Y   n"t          rt          j        ¦   «         \  } }}}}}}t          j
        | |||¦  «        S )z*Return various CPU stats as a named tuple.z
/proc/statrI   s   intrr   N)r   rL   Ú	cpu_statsr   rN   rO   rP   rQ   r   rR   Ú	scpustats)	ÚctxswÚintrsÚ
soft_intrsÚsyscallsÚ_trapsÚ_faultsÚ_forksr[   r\   s	            rb   r‹   r‹     s9  € åð 
õ 6:´^Ñ5EÔ5EÑ2ˆˆu�j (¨F¨FÝ	ð 
õ ŒNÑÔñ 	Dˆˆu�j (¨F°G¸Võ �, Ñ%Ô%ð 	1¨Øð 1ð 1�Ø—?’? 7Ñ+Ô+ð 1Ý §
¢
¡¤¨Q¤Ñ0Ô0�Eøð1ð	1ð 	1ð 	1ñ 	1ô 	1ð 	1ð 	1ð 	1ð 	1ð 	1ð 	1øøøð 	1ð 	1ð 	1ð 	1øõ 
ð 
õ ŒNÑÔñ 	Dˆˆu�j (¨F°G¸Võ Œ=˜  z°8Ñ<Ô<Ð<s   ÁAB#Â#B'Â*B'c                  óf  — g } t          ¦   «         }t          |¦  «        D �]}	 t          j        |¦  «        \  }}n# t          $ r Y Œ(w xY w|r¸	 t          |                     d¦  «        d                              d¦  «        d         ¦  «        }n# t          t          f$ r d}Y nw xY w	 t          |                     d¦  «        d                              d¦  «        d         ¦  «        }n# t          t          f$ r d}Y nw xY w|  	                    t          j        |||¦  «        ¦  «         �Œ| S )zªReturn frequency metrics for CPUs. As of Dec 2018 only
        CPU 0 appears to be supported by FreeBSD and all other cores
        match the frequency of CPU 0.
        ú r€   ú/r   N)r{   ÚrangerL   Úcpu_freqÚNotImplementedErrorrP   rQ   Ú
IndexErrorÚ
ValueErrorrv   rR   Úscpufreq)rw   Únum_cpusÚcpuÚcurrentÚavailable_freqÚmin_freqÚmax_freqs          rb   r˜   r˜   #  s\  € ð
 ˆÝ$Ñ&Ô&ˆÝ˜‘?”?ð 	Bñ 	BˆCðÝ*.¬-¸Ñ*<Ô*<Ñ'�˜˜øÝ&ð ð ð Ø�ðøøøàð $ð$Ý" >×#7Ò#7¸Ñ#<Ô#<¸RÔ#@×#FÒ#FÀsÑ#KÔ#KÈAÔ#NÑOÔO�H�HøÝ"¥JÐ/ð $ð $ð $Ø#�H�H�Hð$øøøð$Ý" >×#7Ò#7¸Ñ#<Ô#<¸QÔ#?×#EÒ#EÀcÑ#JÔ#JÈ1Ô#MÑNÔN�H�HøÝ"¥JÐ/ð $ð $ð $Ø#�H�H�Hð$øøøà�JŠJ•s”| G¨X°xÑ@Ô@ÑAÔAÐAÑAØˆ
s5   ¤<¼
A	ÁA	ÁABÂB'Â&B'Â+AC-Ã-DÄDc                  óp   — t          t          j        ¦   «         ¦  «        } t          j        | dd¦  «        gS )Ng        )ÚfloatrL   r˜   rR   rœ   )Úcurrs    rb   r˜   r˜   =  s,   € Ý•T”]‘_”_Ñ%Ô%ˆÝ”˜T 3¨Ñ,Ô,Ð-Ð-rj   Fc                 ó    — g }t          j        ¦   «         }|D ]5}|\  }}}}t          j        ||||¦  «        }|                     |¦  «         Œ6|S )z•Return mounted disk partitions as a list of namedtuples.
    'all' argument is ignored, see:
    https://github.com/giampaolo/psutil/issues/906.
    )rL   Údisk_partitionsrR   Ú	sdiskpartrv   )	ÚallÚretlistÚ
partitionsÚ	partitionÚdeviceÚ
mountpointÚfstypeÚoptsÚntuples	            rb   r§   r§   G  sc   € ð
 €GÝÔ%Ñ'Ô'€JØð ð ˆ	Ø+4Ñ(ˆ�
˜F DÝ”˜v z°6¸4Ñ@Ô@ˆØ�Š�vÑÔÐÐØ€Nrj   c                  óè  — t          ¦   «                              ¦   «         } i }| D ]Ì}	 t          j        |¦  «        }t          j        |¦  «        }t          j        |¦  «        \  }}t          t          d¦  «        rt          j        |¦  «        }d 	                    |¦  «        }d|v }t          j        |||||¦  «        ||<   Œ # t          $ r }	|	j        t          j        k    r‚ Y d}	~	ŒÅd}	~	ww xY w|S )z)Get NIC stats (isup, duplex, speed, mtu).Ú	NicDuplexú,ÚrunningN)Únet_io_countersÚkeysrL   Ú
net_if_mtuÚnet_if_flagsÚnet_if_duplex_speedÚhasattrr   r³   ÚjoinrR   Ú	snicstatsÚOSErrorÚerrnoÚENODEV)
Únamesrw   rF   ÚmtuÚflagsÚduplexÚspeedÚoutput_flagsÚisupÚerrs
             rb   Únet_if_statsrÉ   b  s  € åÑÔ×"Ò"Ñ$Ô$€EØ
€CØð Nð Nˆð	NÝ”/ $Ñ'Ô'ˆCÝÔ% dÑ+Ô+ˆEÝ Ô4°TÑ:Ô:‰MˆF�Eõ •w Ñ,Ô,ð 3Ý Ô*¨6Ñ2Ô2�ØŸ8š8 E™?œ?ˆLØ Ð%ˆDÝœ d¨F°E¸3ÀÑMÔMˆC�‰IˆIøõ ð 	ð 	ð 	àŒy�EœLÒ(Ð(Øð )Ð(Ð(Ð(Ð(øøøøð	øøøð €Js   ¨?CÃ
C/ÃC*Ã*C/c                 óz  — t           |          \  }}t          ¦   «         }t          rt          j        d||¦  «        }n2t
          rt          j        d| ¦  «        }nt          j        ||¦  «        }|D ]<}|\  }}}}	}
}}t          ||||	|
|t          |¦  «        }|                     |¦  «         Œ=t          |¦  «        S )z System-wide network connections.r€   )
r   Úsetr   rL   Únet_connectionsr   r   ÚTCP_STATUSESÚaddÚlist)ÚkindÚfamiliesÚtypesrw   Úrawlistry   ÚfdÚfamÚtypeÚladdrÚraddrr   ÚpidÚnts                 rb   rÌ   rÌ   x  sÆ   € å ”o�O€HˆeÝ
‰%Œ%€CÝð 8ÝÔ& r¨8°UÑ;Ô;ˆˆÝ	ð 8ÝÔ& r¨4Ñ0Ô0ˆˆåÔ& x°Ñ7Ô7ˆàð ð ˆØ37Ñ0ˆˆC��u˜e V¨SÝØ��T˜5 %¨µ¸sñ
ô 
ˆð 	�Š�‰ŒˆˆÝ�‰9Œ9Ðrj   c                  óÜ   — 	 t          j        ¦   «         \  } }}n# t          $ r Y dS w xY w|dk    }|rt          j        }n|dk    rt          j        }n|dz  }t          j        | ||¦  «        S )zReturn battery info.Nr   r€   é<   )rL   Úsensors_batteryr™   r   ÚPOWER_TIME_UNLIMITEDÚPOWER_TIME_UNKNOWNrR   Úsbattery)ra   ÚminsleftÚpower_pluggedÚsecslefts       rb   rÝ   rÝ   “  sŽ   € ð	Ý/3Ô/CÑ/EÔ/EÑ,ˆG�X˜}˜}øÝ"ð 	ð 	ð 	à�4�4ð	øøøð &¨Ò*ˆØð 	%ÝÔ3ˆHˆHØ˜Š^ˆ^ÝÔ1ˆHˆHà "‘}ˆHÝŒ|˜G X¨}Ñ=Ô=Ð=s   ‚ š
(§(c            	      ó8  — t          t          ¦  «        } t          ¦   «         }t          |¦  «        D ]g}	 t	          j        |¦  «        \  }}|dk    rd}d|› �}| d                              t          j        ||||¦  «        ¦  «         ŒX# t          $ r Y Œdw xY w| S )z?Return CPU cores temperatures if available, else an empty dict.r   NzCore Úcoretemp)
r   rÏ   r{   r—   rL   Úsensors_cpu_temperaturerv   rR   Úshwtempr™   )rw   r�   rž   rŸ   ÚhighrF   s         rb   Úsensors_temperaturesré   £  s³   € å�$ÑÔˆÝ$Ñ&Ô&ˆÝ˜‘?”?ð 	ð 	ˆCðÝ $Ô <¸SÑ AÔ A‘�˜Ø˜1’9�9Ø�DØ$˜s�}�}�Ø�J”×&Ò&¥s¤{°4¸À$ÈÑ'MÔ'MÑNÔNÐNÐNøÝ&ð ð ð Ø�ðøøøð ˆ
s   µAB
Â

BÂBc                  ó(   — t          j        ¦   «         S )z:The system boot time expressed in seconds since the epoch.)rL   Ú	boot_timer|   rj   rb   rë   rë   ¹  s   € åŒ>ÑÔÐrj   zignoring exception on import: c                 ó¼   — t           dk    r| S t           t          ¦   «         z
  }|dk    st          |¦  «        dk     r| S t          d¦  «         |dk     r| |z
  S | |z   S )z!Account for system clock updates.r   r   z9system clock was updated; adjusting process create_time())ÚINIT_BOOT_TIMErë   Úabsr   )ÚctimeÚdiffs     rb   Úadjust_proc_create_timerñ   Ç  sh   € å˜QÒÐØˆLå¥	¡¤Ñ+ˆØ�1Š9ˆ9�˜D™	œ	 Aš˜ØˆLåÐIÑJÔJÐJØ�!Š8ˆ8Ø˜4‘<ÐØ�t‰|Ðrj   c                  ó¶   — g } t          j        ¦   «         }|D ]@}|\  }}}}}|dk    rŒt          j        ||pd|||¦  «        }|                      |¦  «         ŒA| S )z:Return currently connected users as a list of namedtuples.ú~N)rL   ÚusersrR   Úsuserrv   )	rª   rÓ   ry   ro   ÚttyÚhostnameÚtstamprÙ   rÚ   s	            rb   rô   rô   Ö  sr   € à€GÝŒj‰lŒl€GØð ð ˆØ+/Ñ(ˆˆc�8˜V SØ�#Š:ˆ:ØÝŒY�t˜S˜[ D¨(°F¸CÑ@Ô@ˆØ�Š�rÑÔÐÐØ€Nrj   c                  ó„   — 	 t          d¦  «                             ¦   «          dS # t          $ r Y dS t          $ r Y dS w xY w)Nr   TF)ÚProcessrF   r   r   r|   rj   rb   Ú_pid_0_existsrû   è  sa   € ðÝ�‰
Œ
�ŠÑÔÐð ˆtøõ ð ð ð ØˆuˆuÝð ð ð Øˆtˆtðøøøs   ‚!% ¥
?²	?¾?c                  óŠ   — t          j        ¦   «         } t          r(d| vr$t          ¦   «         r|                      dd¦  «         | S )z7Returns a list of PIDs currently running on the system.r   )rL   Úpidsr   rû   Úinsert)rw   s    rb   rý   rý   ô  s@   € å
Œ)‰+Œ+€CÝð �A˜S�L�L¥m¡o¤o�Lð 	�
Š
�1�aÑÔÐØ€Jrj   c                 óR   — t          j        | ¦  «        }|s| t          ¦   «         v S dS )NT©r	   Ú
pid_existsrý   ©rÙ   Úexistss     rb   r  r     s/   € ÝÔ$ SÑ)Ô)ˆØð 	ð �$™&œ&�=Ð à�4rj   c                 óR   — t          j        | ¦  «        }|sdS | t          ¦   «         v S )NFr   r  s     rb   r  r    s/   € ÝÔ$ SÑ)Ô)ˆØð 	!Ø�5ð
 �$™&œ&�=Ð rj   c                 óF   ‡ — t          j        ‰ ¦  «        ˆ fd„¦   «         }|S )z`Decorator which translates bare OSError exceptions into
    NoSuchProcess and AccessDenied.
    c                 óÌ  •— | j         | j        | j        }}}	  ‰| g|¢R i |¤ŽS # t          $ r<}t	          j        |¦  «        rt          |||¦  «        |‚t          ||¦  «        |‚d }~wt          $ r}t          ||¦  «        |‚d }~wt          j
        $ r}t          |||¦  «        |‚d }~wt          $ r/}|dk    r!dt          ¦   «         v rt          ||¦  «        |‚|d ‚d }~ww xY w)Nr   )rÙ   Ú_ppidÚ_nameÚProcessLookupErrorrL   Úproc_is_zombier   r   ÚPermissionErrorr   ÚZombieProcessErrorr¾   rý   )ÚselfÚargsÚkwargsrÙ   r   rF   rÈ   Úfuns          €rb   Úwrapperz wrap_exceptions.<locals>.wrapper  s-  ø€ àœ( D¤J°´
�4ˆTˆð	 Ø�3�tÐ-˜dÐ-Ð-Ð- fÐ-Ð-Ð-øÝ!ð 	4ð 	4ð 	4ÝÔ" 3Ñ'Ô'ð >Ý# C¨¨tÑ4Ô4¸#Ð=Ý  TÑ*Ô*°Ð3øøøøÝð 	3ð 	3ð 	3Ý˜s DÑ)Ô)¨sÐ2øøøøÝÔ&ð 	:ð 	:ð 	:Ý  T¨4Ñ0Ô0°cÐ9øøøøÝð 	 ð 	 ð 	 Ø�aŠxˆx˜A¥¡¤˜K˜KÝ" 3¨Ñ-Ô-°3Ð6Ø˜4Ðøøøøð	 øøøs8   ˜$ ¤
C#®7A%Á%C#Á2BÂC#ÂB'Â'C#Â4*CÃC#)Ú	functoolsÚwraps)r  r  s   ` rb   Úwrap_exceptionsr    s:   ø€ õ
 „_�SÑÔð ð  ð  ð  ñ Ôð ð" €Nrj   c              #   ó$  K  — | j         | j        | j        }}}	 dV — dS # t          t          f$ rA}t          j        | j         ¦  «        rt          |||¦  «        |‚t          ||¦  «        |‚d}~wt          $ r}t          ||¦  «        |‚d}~ww xY w)z8Same as above, for routines relying on reading /proc fs.N)rÙ   r  r  r	  ÚFileNotFoundErrorrL   r
  r   r   r  r   )ÚinstrÙ   rF   r   rÈ   s        rb   Úwrap_exceptions_procfsr  3  s·   è è € ð ”h ¤
¨D¬Jˆtˆ€Cð/ØˆˆˆˆˆøÝÕ 1Ð2ð 4ð 4ð 4õ Ô˜tœxÑ(Ô(ð 	4Ý  T¨4Ñ0Ô0°cÐ9å  TÑ*Ô*°Ð3øøøøÝð /ð /ð /Ý˜3 Ñ%Ô%¨3Ð.øøøøð/øøøs    ™ ŸB°<A,Á,BÁ9B
Â
Bc                   ó  — e Zd ZdZg d¢Zd„ Zd„ Zeed„ ¦   «         ¦   «         Z	d„ Z
d„ Zed„ ¦   «         Zed	„ ¦   «         Zed
„ ¦   «         Zed„ ¦   «         Zed„ ¦   «         Zed„ ¦   «         Zed„ ¦   «         Zed„ ¦   «         Zed„ ¦   «         Zered„ ¦   «         Zed„ ¦   «         ZeZed*d„¦   «         Zed„ ¦   «         Zed„ ¦   «         Zed„ ¦   «         Zed+d„¦   «         Zed,d„¦   «         Zed„ ¦   «         Zed„ ¦   «         Z ed„ ¦   «         Z!ed„ ¦   «         Z"ed „ ¦   «         Z# e$d!d"¦  «        Z% e$d!d#¦  «        Z&ed$„ ¦   «         Z'ed%„ ¦   «         Z(er/ed&„ ¦   «         Z)ed'„ ¦   «         Z*ed(„ ¦   «         Z+ed,d)„¦   «         Z,dS dS )-rú   z1Wrapper class around underlying C implementation.)Ú_cacher  r  rÙ   c                 ó0   — || _         d | _        d | _        d S ©N)rÙ   r  r  )r  rÙ   s     rb   Ú__init__zProcess.__init__J  s   € ØˆŒØˆŒ
ØˆŒ
ˆ
ˆ
rj   c                 ó8   — t          j        | j        ¦  «         dS )z+Raise NSP if the process disappeared on us.N)rL   Ú	proc_namerÙ   ©r  s    rb   Ú_assert_alivezProcess._assert_aliveO  s   € õ 	Œ�t”xÑ Ô Ð Ð Ð rj   c                 ó†   — t          j        | j        ¦  «        }t          |¦  «        t          t          ¦  «        k    sJ ‚|S )z;Retrieves multiple process info in one shot as a raw tuple.)rL   Úproc_oneshot_inforÙ   r„   Úkinfo_proc_map©r  rw   s     rb   ÚoneshotzProcess.oneshotU  s:   € õ Ô$ T¤XÑ.Ô.ˆÝ�3‰xŒx�3�~Ñ.Ô.Ò.Ð.Ð.Ð.Øˆ
rj   c                 ó:   — | j                              | ¦  «         d S r  )r&  Úcache_activater   s    rb   Úoneshot_enterzProcess.oneshot_enter]  s   € ØŒ×#Ò# DÑ)Ô)Ð)Ð)Ð)rj   c                 ó:   — | j                              | ¦  «         d S r  )r&  Úcache_deactivater   s    rb   Úoneshot_exitzProcess.oneshot_exit`  s   € ØŒ×%Ò% dÑ+Ô+Ð+Ð+Ð+rj   c                 ó†   — |                       ¦   «         t          d                  }|�|nt          j        | j        ¦  «        S )NrF   )r&  r$  rL   r  rÙ   )r  rF   s     rb   rF   zProcess.namec  s4   € à�|Š|‰~Œ~�n¨VÔ4Ô5ˆØÐ'ˆtˆt­T¬^¸D¼HÑ-EÔ-EÐErj   c                 ó‚  — t           r&| j        dk    rdS t          j        | j        ¦  «        S t          rS| j        dk    rdS t          | ¦  «        5  t          j        d| j        › d�¦  «        cd d d ¦  «         S # 1 swxY w Y   d S dd l}|  	                    ¦   «         }|r| 
                    |d         ¦  «        pdS dS )Nr   Ú z/proc/z/exe)r   rÙ   rL   Úproc_exer   r  ÚosÚreadlinkÚshutilÚcmdlineÚwhich)r  r3  r4  s      rb   ÚexezProcess.exeh  s  € åð 	ØŒx˜1Š}ˆ}Ø�rÝ”= ¤Ñ*Ô*Ð*Ýð 	ØŒx˜1Š}ˆ}à�rÝ'¨Ñ-Ô-ð <ð <Ý”{Ð#:¨D¬HÐ#:Ð#:Ð#:Ñ;Ô;ð<ð <ð <ð <ñ <ô <ð <ð <ð <ð <ð <ð <øøøð <ð <ð <ð <ð <ð <ð ˆMˆMˆMà—l’l‘n”nˆGØð Ø—|’| G¨A¤JÑ/Ô/Ð5°2Ð5à�rs   ÁA;Á;A?ÂA?c                 óî  — t           r| j        dk    rg S t          rÂ	 t          j        | j        ¦  «        S # t
          $ r›}|j        t          j        k    r€| j        | j        | j	        }}}t          j
        | j        ¦  «        rt          |||¦  «        |‚t          | j        ¦  «        st          |||¦  «        |‚t          d|›d�¦  «         g cY d }~S ‚ d }~ww xY wt          j        | j        ¦  «        S )Nr   z	ignoring z and returning an empty list)r   rÙ   r   rL   Úproc_cmdliner¾   r¿   ÚEINVALr  r  r
  r   r  r   r   )r  rÈ   rÙ   rF   r   s        rb   r4  zProcess.cmdline‚  s  € åð 	/�t”x 1’}�}ØˆIÝð 	/ð
ÝÔ(¨¬Ñ2Ô2Ð2øÝð ð ð Ø”9¥¤Ò,Ð,Ø&*¤h°´
¸D¼J˜t˜�CÝÔ*¨4¬8Ñ4Ô4ð FÝ+¨C°°tÑ<Ô<À#ÐEÝ% d¤hÑ/Ô/ð FÝ+¨C°°tÑ<Ô<À#ÐEõ ÐI cÐIÐIÐIÑJÔJÐJØ�I�I�I�I�I�Iàøøøøðøøøõ Ô$ T¤XÑ.Ô.Ð.s"   �6 ¶
CÁ BCÃCÃCÃCc                 ó4   — t          j        | j        ¦  «        S r  )rL   Úproc_environrÙ   r   s    rb   ÚenvironzProcess.environ�  s   € åÔ  ¤Ñ*Ô*Ð*rj   c                 ó¦   — |                       ¦   «         t          d                  }t          j        ¦   «         }	 ||         S # t          $ r Y d S w xY w)Nr&   )r&  r$  r	   Úget_terminal_mapÚKeyError)r  Útty_nrÚtmaps      rb   ÚterminalzProcess.terminal¡  sX   € à—’‘”¥¨wÔ 7Ô8ˆÝÔ(Ñ*Ô*ˆð	Ø˜”<ÐøÝð 	ð 	ð 	Ø�4�4ð	øøøs   ºA Á
AÁAc                 ód   — |                       ¦   «         t          d                  | _        | j        S )Nr   )r&  r$  r  r   s    rb   r   zProcess.ppidª  s#   € à—\’\‘^”^¥N°6Ô$:Ô;ˆŒ
ØŒzÐrj   c                 ó¼   — |                       ¦   «         }t          j        |t          d                  |t          d                  |t          d                  ¦  «        S )Nr   r   r   )r&  rR   Úpuidsr$  ©r  Úrawtuples     rb   ÚuidszProcess.uids¯  óJ   € à—<’<‘>”>ˆÝŒyØ•^ JÔ/Ô0Ø•^ OÔ4Ô5Ø•^ KÔ0Ô1ñ
ô 
ð 	
rj   c                 ó¼   — |                       ¦   «         }t          j        |t          d                  |t          d                  |t          d                  ¦  «        S )Nr    r"   r$   )r&  rR   Úpgidsr$  rF  s     rb   ÚgidszProcess.gids¸  rI  rj   c                 óà   — |                       ¦   «         }t          j        |t          d                  |t          d                  |t          d                  |t          d                  ¦  «        S )Nr2   r4   r6   r8   )r&  rR   Ú	pcputimesr$  rF  s     rb   rm   zProcess.cpu_timesÁ  sW   € à—<’<‘>”>ˆÝŒ}Ø•^ KÔ0Ô1Ø•^ JÔ/Ô0Ø•^ NÔ3Ô4Ø•^ MÔ2Ô3ñ	
ô 
ð 	
rj   c                 óL   — |                       ¦   «         t          d                  S )NrD   )r&  r$  r   s    rb   Úcpu_numzProcess.cpu_numÍ  s   € à—<’<‘>”>¥.°Ô":Ô;Ð;rj   c           	      ó  — |                       ¦   «         }t          j        |t          d                  |t          d                  |t          d                  |t          d                  |t          d                  ¦  «        S )Nr:   r<   r>   r@   rB   )r&  rR   Úpmemr$  rF  s     rb   Úmemory_infozProcess.memory_infoÑ  sd   € à—<’<‘>”>ˆÝŒxØ•^ EÔ*Ô+Ø•^ EÔ*Ô+Ø•^ IÔ.Ô/Ø•^ IÔ.Ô/Ø•^ JÔ/Ô0ñ
ô 
ð 	
rj   Fc                 ó€   — |                       ¦   «         t          d                  }t          r|st          |¦  «        }|S )Nr(   )r&  r$  r   rñ   )r  Ú	monotonicrï   s      rb   r(   zProcess.create_timeÞ  s:   € à—’‘”�~¨mÔ<Ô=ˆÝð 	3˜)ð 	3å+¨EÑ2Ô2ˆEØˆrj   c                 ó„   — t           rt          j        | j        ¦  «        S t	          |                      ¦   «         ¦  «        S r  )ÚHAS_PROC_NUM_THREADSrL   r   rÙ   r„   Úthreadsr   s    rb   Únum_threadszProcess.num_threadsæ  s3   € åð 	'åÔ(¨¬Ñ2Ô2Ð2å�t—|’|‘~”~Ñ&Ô&Ð&rj   c                 ó˜   — |                       ¦   «         }t          j        |t          d                  |t          d                  ¦  «        S )Nr*   r,   )r&  rR   Úpctxswr$  rF  s     rb   Únum_ctx_switcheszProcess.num_ctx_switchesî  s?   € à—<’<‘>”>ˆÝŒzØ•^Ð$6Ô7Ô8Ø•^Ð$8Ô9Ô:ñ
ô 
ð 	
rj   c                 óÚ   — t          j        | j        ¦  «        }g }|D ]1\  }}}t          j        |||¦  «        }|                     |¦  «         Œ2t          r|                      ¦   «          |S r  )rL   Úproc_threadsrÙ   rR   Úpthreadrv   r   r!  )r  rÓ   rª   Ú	thread_idÚutimeÚstimer±   s          rb   rX  zProcess.threadsö  sx   € õ Ô# D¤HÑ-Ô-ˆØˆØ'.ð 	#ð 	#Ñ#ˆI�u˜eÝ”[ ¨E°5Ñ9Ô9ˆFØ�NŠN˜6Ñ"Ô"Ð"Ð"Ýð 	!Ø×ÒÑ Ô Ð Øˆrj   Úinetc           
      ó¼  — t           |         \  }}g }t          rt          j        | j        |¦  «        }n>t
          rt          j        | j        ||¦  «        }nt          j        | j        ||¦  «        }|D ]R}|d d…         \  }}}	}
}}t          r	||vs|	|vrŒ#t          |||	|
||t          ¦  «        }| 
                    |¦  «         ŒS|                      ¦   «          |S )Nr#   )r   r   rL   rÌ   rÙ   r   Úproc_net_connectionsr   r   rÍ   rv   r!  )r  rÐ   rÑ   rÒ   rw   rÓ   ry   rÔ   rÕ   rÖ   r×   rØ   r   rÚ   s                 rb   rÌ   zProcess.net_connections  sû   € å# Dœ/‰ˆ�%Øˆåð 	KÝÔ*¨4¬8°TÑ:Ô:ˆGˆGÝð 	KÝÔ*¨4¬8°X¸uÑEÔEˆGˆGåÔ/°´¸(ÀEÑJÔJˆGàð 	ð 	ˆDØ26°r¸°r´(Ñ/ˆB��T˜5 %¨Ýð Ø˜xÐ'Ð'¨T¸Ð->Ð->ØÝØ�C˜˜u e¨Vµ\ñô ˆBð �JŠJ�r‰NŒNˆNˆNà×ÒÑÔÐØˆ
rj   Nc                 ó6   — t          j        | j        |¦  «        S r  )r	   Úwait_pidrÙ   )r  Útimeouts     rb   ÚwaitzProcess.wait  s   € åÔ  ¤¨7Ñ3Ô3Ð3rj   c                 ó4   — t          j        | j        ¦  «        S r  )rL   Úproc_priority_getrÙ   r   s    rb   Únice_getzProcess.nice_get  s   € åÔ% d¤hÑ/Ô/Ð/rj   c                 ó6   — t          j        | j        |¦  «        S r  )rL   Úproc_priority_setrÙ   )r  Úvalues     rb   Únice_setzProcess.nice_set#  s   € åÔ% d¤h°Ñ6Ô6Ð6rj   c                 ó‚   — |                       ¦   «         t          d                  }t                               |d¦  «        S )Nr   ú?)r&  r$  ÚPROC_STATUSESÚget)r  Úcodes     rb   r   zProcess.status'  s/   € à�|Š|‰~Œ~�n¨XÔ6Ô7ˆå× Ò   sÑ+Ô+Ð+rj   c                 óœ   — |                       ¦   «         }t          j        |t          d                  |t          d                  dd¦  «        S )Nr.   r0   r€   )r&  rR   Úpior$  rF  s     rb   Úio_counterszProcess.io_counters-  sD   € à—<’<‘>”>ˆÝŒwØ•^ OÔ4Ô5Ø•^Ð$4Ô5Ô6ØØñ	
ô 
ð 	
rj   c                 ó\   — t           r| j        dk    rdS t          j        | j        ¦  «        S )z)Return process current working directory.r   r/  )r   rÙ   rL   Úproc_cwdr   s    rb   ÚcwdzProcess.cwd7  s-   € õ
 ð 	�t”x 1’}�}Ø�2ÝŒ}˜TœXÑ&Ô&Ð&rj   Úmmapz*path rss, private, ref_count, shadow_countz6addr, perms path rss, private, ref_count, shadow_countc                 óL   — t          j        | j        ¦  «        }d„ |D ¦   «         S )z8Return files opened by process as a list of namedtuples.c                 ó>   — g | ]\  }}t          j        ||¦  «        ‘ŒS r|   )rR   Ú	popenfile)Ú.0ÚpathrÔ   s      rb   ú
<listcomp>z&Process.open_files.<locals>.<listcomp>K  s(   € Ð@Ð@Ð@©H¨D°"•”˜d BÑ'Ô'Ð@Ð@Ð@rj   )rL   Úproc_open_filesrÙ   )r  rÓ   s     rb   Ú
open_fileszProcess.open_filesG  s*   € õ Ô& t¤xÑ0Ô0ˆØ@Ð@¸Ð@Ñ@Ô@Ð@rj   c                 ón   — t          j        | j        ¦  «        }t          r|                      ¦   «          |S )z=Return the number of file descriptors opened by this process.)rL   Úproc_num_fdsrÙ   r   r!  r%  s     rb   Únum_fdszProcess.num_fdsM  s5   € õ Ô ¤Ñ)Ô)ˆÝð 	!Ø×ÒÑ Ô Ð Øˆ
rj   c                 ó4   — t          j        | j        ¦  «        S r  )rL   Úproc_cpu_affinity_getrÙ   r   s    rb   Úcpu_affinity_getzProcess.cpu_affinity_getY  s   € åÔ-¨d¬hÑ7Ô7Ð7rj   c                 ó�  — t          t          t          t          ¦   «         ¦  «        ¦  «        ¦  «        }|D ]}||vrd|›d|› d�}t	          |¦  «        ‚Œ	 t          j        | j        |¦  «         d S # t          $ rG}|j	        t          j
        t          j        hv r"|D ]}||vrd|›d|› d�}t	          |¦  «        |‚Œ ‚ d }~ww xY w)Nzinvalid CPU z (choose between ú))rË   r—   r„   ru   r›   rL   Úproc_cpu_affinity_setrÙ   r¾   r¿   r9  ÚEDEADLK)r  ÚcpusÚallcpusrž   ÚmsgrÈ   s         rb   Úcpu_affinity_setzProcess.cpu_affinity_set]  s  € õ
 �%¥¥M¡O¤OÑ 4Ô 4Ñ5Ô5Ñ6Ô6ˆGØð *ð *�Ø˜gÐ%Ð%ØK¨ÐKÐKÀÐKÐKÐK�CÝ$ S™/œ/Ð)ð &ðÝÔ*¨4¬8°TÑ:Ô:Ð:Ð:Ð:øÝð ð ð ð
 ”9¥¤­u¬}Ð =Ð=Ð=Ø#ð ;ð ;˜Ø gÐ-Ð-ð!/¨sð !/ð !/Ø$+ð!/ð !/ð !/ð  õ #-¨S¡/¤/°sÐ:ð .ð øøøøðøøøs   ÁA4 Á4
CÁ>AC Ã Cc                 ó4   — t          j        | j        ¦  «        S r  )rL   Úproc_memory_mapsrÙ   r   s    rb   Úmemory_mapszProcess.memory_mapsx  s   € åÔ(¨¬Ñ2Ô2Ð2rj   c                 óÊ   — |€t          j        | j        |¦  «        S t          |¦  «        dk    rd|›�}t	          |¦  «        ‚|\  }}t          j        | j        |||¦  «        S )Nr   z2second argument must be a (soft, hard) tuple, got )rL   Úproc_getrlimitrÙ   r„   r›   Úproc_setrlimit)r  ÚresourceÚlimitsr‘  ÚsoftÚhards         rb   ÚrlimitzProcess.rlimit|  st   € àˆ~ÝÔ*¨4¬8°XÑ>Ô>Ð>å�v‘;”; !Ò#Ð#ð'Ø"ð'ð 'ð õ % S™/œ/Ð)Ø#‘
��dÝÔ*¨4¬8°X¸tÀTÑJÔJÐJrj   ©F)rc  r  )-Ú__name__Ú
__module__Ú__qualname__Ú__doc__Ú	__slots__r  r!  r  r   r&  r)  r,  rF   r6  r4  r<  rB  r   rH  rL  rm   r   rP  rS  Úmemory_full_infor(   rY  r\  rX  rÌ   ri  rl  rp  r   rx  r{  r   Únt_mmap_groupedÚnt_mmap_extr„  r‡  rŠ  r’  r•  r�  r|   rj   rb   rú   rú   E  sñ  € € € € € Ø;Ð;à3Ð3Ð3€Iðð ð ð
!ð !ð !ð Øðð ñ Ôñ „_ðð*ð *ð *ð,ð ,ð ,ð ðFð Fñ „_ðFð ðð ñ „_ðð2 ð/ð /ñ „_ð/ð4 ð+ð +ñ „_ð+ð ðð ñ „_ðð ðð ñ „_ðð ð
ð 
ñ „_ð
ð ð
ð 
ñ „_ð
ð ð
ð 
ñ „_ð
ð ð <à	ð	<ð 	<ñ 
Œð	<ð ð
ð 
ñ „_ð
ð #Ðàðð ð ñ „_ðð ð'ð 'ñ „_ð'ð ð
ð 
ñ „_ð
ð ð	ð 	ñ „_ð	ð ðð ð ñ „_ðð0 ð4ð 4ð 4ñ „_ð4ð ð0ð 0ñ „_ð0ð ð7ð 7ñ „_ð7ð ð,ð ,ñ „_ð,ð
 ð
ð 
ñ „_ð
ð ð'ð 'ñ „_ð'ð !�jØÐ<ñô €Oð �*ØÐHñô €Kð ðAð Añ „_ðAð
 ðð ñ „_ðð ð 1Kà	ð	8ð 	8ñ 
Œð	8ð 
ð	ð 	ñ 
Œð	ð4 
ð	3ð 	3ñ 
Œð	3ð 
ð	Kð 	Kð 	Kñ 
Œð	Kð 	Kð 	KðM1Kð 1Krj   rú   r|   rž  )pr¢  Ú
contextlibr¿   r  r1  Úcollectionsr   r   Ú	xml.etreer   r/  r   r   rR   r	   r
   rL   r   r   r   r   r   r   r   r   r   r   r   r   Ú__extra__all__ÚSIDLÚSTATUS_IDLEÚSRUNÚSTATUS_RUNNINGÚSSLEEPÚSTATUS_SLEEPINGÚSSTOPÚSTATUS_STOPPEDÚSZOMBÚSTATUS_ZOMBIEÚSWAITÚSTATUS_WAITINGÚSLOCKÚSTATUS_LOCKEDrs  ÚSDEADÚSTATUS_WAKINGÚSONPROCÚTCPS_ESTABLISHEDÚCONN_ESTABLISHEDÚTCPS_SYN_SENTÚCONN_SYN_SENTÚTCPS_SYN_RECEIVEDÚCONN_SYN_RECVÚTCPS_FIN_WAIT_1ÚCONN_FIN_WAIT1ÚTCPS_FIN_WAIT_2ÚCONN_FIN_WAIT2ÚTCPS_TIME_WAITÚCONN_TIME_WAITÚTCPS_CLOSEDÚ
CONN_CLOSEÚTCPS_CLOSE_WAITÚCONN_CLOSE_WAITÚTCPS_LAST_ACKÚCONN_LAST_ACKÚTCPS_LISTENÚCONN_LISTENÚTCPS_CLOSINGÚCONN_CLOSINGÚPSUTIL_CONN_NONEÚ	CONN_NONErÍ   ÚgetpagesizeÚPAGESIZEÚAF_LINKr»   rW  Údictr$  rc   ri   rk   Ú	heap_trimrm   ru   r{   r~   r‹   r˜   r§   Ú
disk_usageÚdisk_io_countersr¶   Únet_if_addrsrÉ   rÌ   rÝ   ré   rë   rí   Ú	ExceptionrÈ   rñ   rô   rû   rý   r  r  Úcontextmanagerr  rú   r|   rj   rb   ú<module>rÞ     sk  ðð
 <Ð ;à Ð Ð Ð Ø €€€Ø Ð Ð Ð Ø 	€	€	€	Ø #Ð #Ð #Ð #Ð #Ð #Ø "Ð "Ð "Ð "Ð "Ð "Ø !Ð !Ð !Ð !Ð !Ð !à Ð Ð Ð Ð Ð Ø Ð Ð Ð Ð Ð Ø Ð Ð Ð Ð Ð Ø !Ð !Ð !Ð !Ð !Ð !Ø Ð Ð Ð Ð Ð Ø Ð Ð Ð Ð Ð Ø Ð Ð Ð Ð Ð Ø !Ð !Ð !Ð !Ð !Ð !Ø "Ð "Ð "Ð "Ð "Ð "Ø "Ð "Ð "Ð "Ð "Ð "Ø Ð Ð Ð Ð Ð Ø #Ð #Ð #Ð #Ð #Ð #Ø Ð Ð Ð Ð Ð Ø Ð Ð Ð Ð Ð Ø +Ð +Ð +Ð +Ð +Ð +Ø "Ð "Ð "Ð "Ð "Ð "à€ð ð (àŒ	�7Ô&ØŒ	�7Ô)ØŒ�WÔ,ØŒ
�GÔ*ØŒ
�GÔ)ØŒ
�GÔ*ØŒ
�GÔ)ð€M€Mð ð àŒ	�7Ô&ØŒ�WÔ,ØŒ
�GÔ*ð 	Œ
�GÔ)ØŒ
�GÔ)ð 	Œ	�7Ô(ØŒ�gÔ,ð'€M€Mð* ð àŒ	�7Ô&ØŒ�WÔ,ØŒ
�GÔ*ØŒ
�GÔ)ØŒ	�7Ô(ØŒ�gÔ,ð€Mð 	Ô˜7Ô3ØÔ˜Ô-ØÔ˜GÔ1ØÔ˜'Ô0ØÔ˜'Ô0ØÔ˜Ô/ØÔ�gÔ(ØÔ˜'Ô1ØÔ˜Ô-ØÔ�gÔ)ØÔ�wÔ+ØÔ˜7Ô,ð€ð ˆ4ÔÑÔ€Ø
Œ,€à�w˜tÐ%7Ñ8Ô8Ð à�ð ð ð Ø	
ˆðàˆ1ðð ˆQðð �!ð	ð
 ˆaðð ˆQðð �!ðð ˆaðð ˆ!ðð �ðð �Rðð �rðð �"ðð �2ðð ˆbðð  ˆRð!ð" �ð#ð$ �ð%ð& 	ˆð'ð( 	ˆð)ð* ˆBð+ð, ˆBð-ð. ˆRð/ð0 ˆ2ð1ð2 
ˆð3€ðD,ð ,ð ,ð^<ð <ð <ð €7ˆ4�ÑÔð Ø”€IØ”€Ið8ð 8ð 8ðð ð ð$ð $ð $ð
 ð  ˆfð  ð7ð 7ð 7ð 7ðð ð ð6=ð =ð =ð@ ð .ðð ð ð ð0 ð .ð.ð .ð .ðð ð ð ð Ô €
ØÔ(Ð ð Ô&€ØÔ €ðð ð ð,ð ð ð2 ð  ð>ð >ð >ð ð ð ð,ð ð ð
 
ð ðØ"˜™œˆˆøØð ð ð àˆÐ6¨sÐ6Ð6Ñ7Ô7Ð7Øˆˆˆˆˆˆøøøøðøøøð
ð ð ð
ð 
ð 
ð$ 	ðð ñ 	„ððð ð ð 
ð %ðð ð ð ð ð %ð!ð !ð !ð !ð Ô$€Jðð ð ð4 Ôð/ð /ñ Ôð/ð"CKð CKð CKð CKð CKñ CKô CKð CKð CKð CKs   Ì 
L ÌL*ÌL%Ì%L*