
    daf                        	 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 g dZej(                  Zej,                  Zej0                  Zej4                  Zej6                  Z	 ej8                  Z	 ej<                  ZdZejA                  d	       ejB                  Z"	 ejF                  Z$ejJ                  Z%[da&da'd Z(d Z)d Z*d Z+d Z,d Z-eZ.d Z# G d d      Z/e/Z0 G d d      Z1 G d d      Z2 G d de2      Z3 G d d      Z4 G d d      Z5 G d de6      Z7 ed       jp                  Z9d! Z: e#       a;i Z<i Z= e
       Z> e       a? e@       aAd" ZB G d# d$      ZC	 d d%lmDaEmFZG t        ZLd, ZM G d- d.eC      ZN G d/ d0eC      ZO G d1 d2eC      ZPd3 ZQd4 ZRd5 ZSd6 ZTd7 ZUd8 ZVg ZWd
aXd9 ZYd d:lmZZZ  eO       a[d; Z\d< Z]	 d d=lm^Z_ d? Za ebed@      r ej                  eaA       yy# e$ r
 d dlmZ Y w xY w# e$ r d ZY w xY w# e$ r d
ZY w xY w# e$ r dZ$Y tw xY w# e$ r d d&lHmIZJ d d'lmKZK  eKd(d)      ZFd* ZGd+ aEY w xY w# e$ r	 d d>l`m_Z_ Y w xY w)B    N)	monotonic)WeakSet)count)deque)	get_identactive_count	Conditioncurrent_thread	enumeratemain_threadTIMEOUT_MAXEventLockRLock	SemaphoreBoundedSemaphoreThreadBarrierBrokenBarrierErrorTimerThreadError
setprofilesettracelocal
stack_size
excepthookExceptHookArgsgettrace
getprofilesetprofile_all_threadssettrace_all_threadsc                       yNT r$       $/root/Python-3.12.4/Lib/threading.py_is_main_interpreterr'   4   s    r%   Tget_native_idFc                 
    	 | a y N_profile_hookfuncs    r&   r   r   J   s     Mr%   c                 F    	 t        |        t        j                  |        y r*   )r   _sys_setprofileallthreadsr-   s    r&   r    r    S   s     tt$r%   c                      	 t         S r*   r+   r$   r%   r&   r   r   ]   s    Er%   c                 
    	 | a y r*   _trace_hookr-   s    r&   r   r   a   s     Kr%   c                 F    	 t        |        t        j                  |        y r*   )r   r0   _settraceallthreadsr-   s    r&   r!   r!   j   s     TNT"r%   c                      	 t         S r*   r4   r$   r%   r&   r   r   t   s    @r%   c                  <    	 t         t        | i |S t        | i |S r*   )_CRLock_PyRLock)argskwargss     r&   r   r   |   s.     (((D#F##r%   c                   P    e Zd Z	 d Zd Zd ZddZeZd Zd Z	d Z
d Zd	 Zd
 Zy)_RLockc                 >    t               | _        d | _        d| _        y Nr   )_allocate_lock_block_owner_countselfs    r&   __init__z_RLock.__init__   s    $&r%   c                 6   | j                   }	 t        |   j                  }d| j                  j                         rdnd| j                  j                  | j                  j                  || j                  t        t        |             fz  S # t        $ r Y vw xY w)Nz)<%s %s.%s object owner=%r count=%d at %s>lockedunlocked)rD   _activenameKeyErrorrC   rJ   	__class__
__module____qualname__rE   hexid)rG   owners     r&   __repr__z_RLock.__repr__   s    	EN''E ;**,H*NN%%NN''KK4M>
 
 	
  		s   B 	BBc                 T    | j                   j                          d | _        d| _        y rA   )rC   _at_fork_reinitrD   rE   rF   s    r&   rW   z_RLock._at_fork_reinit   s     ##%r%   c                     	 t               }| j                  |k(  r| xj                  dz  c_        y| j                  j	                  ||      }|r|| _        d| _        |S N   )r   rD   rE   rC   acquire)rG   blockingtimeoutmercs        r&   r[   z_RLock.acquire   sY    	2 [;;"KK1K[[  73DKDK	r%   c                     	 | j                   t               k7  rt        d      | j                  dz
  x| _        }|s"d | _         | j                  j                          y y )Ncannot release un-acquired lockrZ   )rD   r   RuntimeErrorrE   rC   release)rG   r   s     r&   rc   z_RLock.release   sV    	 ;;)+%@AA"kkAo-eDKKK! r%   c                 $    | j                          y r*   rc   rG   tvtbs       r&   __exit__z_RLock.__exit__       r%   c                 V    | j                   j                          |\  | _        | _        y r*   )rC   r[   rE   rD   )rG   states     r&   _acquire_restorez_RLock._acquire_restore   s     #( T[r%   c                     | j                   dk(  rt        d      | j                   }d| _         | j                  }d | _        | j                  j	                          ||fS )Nr   ra   )rE   rb   rD   rC   rc   )rG   r   rT   s      r&   _release_savez_RLock._release_save   sT    ;;!@AAu~r%   c                 0    | j                   t               k(  S r*   )rD   r   rF   s    r&   	_is_ownedz_RLock._is_owned   s    {{ik))r%   c                 J    | j                   t               k7  ry| j                  S rA   )rD   r   rE   rF   s    r&   _recursion_countz_RLock._recursion_count  s    ;;)+%{{r%   NT)__name__rP   rQ   rH   rU   rW   r[   	__enter__rc   rj   rn   rp   rr   rt   r$   r%   r&   r?   r?      sA    


"H I".
)*
r%   r?   c                   d    e Zd Z	 ddZd Zd Zd Zd Zd Zd Z	d	 Z
dd
ZddZddZd Zd Zy)r	   Nc                 :   |
t               }|| _        |j                  | _        |j                  | _        t	        |d      r|j
                  | _        t	        |d      r|j                  | _        t	        |d      r|j                  | _        t               | _	        y )Nrp   rn   rr   )
r   _lockr[   rc   hasattrrp   rn   rr   _deque_waitersrG   locks     r&   rH   zCondition.__init__  s|    <7D
|||| 4)!%!3!3D4+,$($9$9D!4%!^^DNr%   c                 l    | j                   j                          | j                  j                          y r*   )r{   rW   r~   clearrF   s    r&   rW   zCondition._at_fork_reinit'  s"    

""$r%   c                 6    | j                   j                         S r*   )r{   rx   rF   s    r&   rx   zCondition.__enter__+  s    zz##%%r%   c                 4     | j                   j                  | S r*   )r{   rj   )rG   r<   s     r&   rj   zCondition.__exit__.  s    "tzz""D))r%   c                 J    d| j                   t        | j                        fz  S )Nz<Condition(%s, %d)>)r{   lenr~   rF   s    r&   rU   zCondition.__repr__1  s    $

C4F'GGGr%   c                 8    | j                   j                          y r*   )r{   rc   rF   s    r&   rp   zCondition._release_save4      

r%   c                 8    | j                   j                          y r*   )r{   r[   )rG   xs     r&   rn   zCondition._acquire_restore7  r   r%   c                 p    | j                   j                  d      r| j                   j                          yy)NFT)r{   r[   rc   rF   s    r&   rr   zCondition._is_owned:  s,     ::e$JJ r%   c                 P   	 | j                         st        d      t               }|j                          | j                  j                  |       | j                         }d}	 ||j                          d}n)|dkD  r|j                  d|      }n|j                  d      }|| j                  |       |s	 | j                  j                  |       S S # t        $ r Y S w xY w# | j                  |       |s,	 | j                  j                  |       w # t        $ r Y w w xY ww xY w)Nzcannot wait on un-acquired lockFTr   )
rr   rb   rB   r[   r~   appendrp   rn   remove
ValueError)rG   r]   waitersaved_stategotits        r&   waitzCondition.waitC  s   	, ~~@AA!V$((*	 Q;"NN49E"NN51E!!+.MM((0  " 	 !!+.MM((0!  sB   %?C$ 8C	C! C!$D%9DD%	D!D% D!!D%c                     	 d }|} |       }|sB|%|t               |z   }n|t               z
  }|dk  r	 |S | j                  |        |       }|sB|S rA   )_timer   )rG   	predicater]   endtimewaittimeresults         r&   wait_forzCondition.wait_fors  sr    	 #?#g0G&0H1}  IIh[F  r%   c                    	 | j                         st        d      | j                  }|r=|dkD  r7|d   }	 |j                          |dz  }	 |j	                  |       |r|dkD  r5y y y y # t        $ r Y )w xY w# t
        $ r Y &w xY w)Nz!cannot notify on un-acquired lockr   rZ   )rr   rb   r~   rc   r   r   )rG   nwaitersr   s       r&   notifyzCondition.notify  s    	 ~~BCC--!a%QZF	  Qv& !a%g%g   
   s#   A) A8 )	A54A58	BBc                 N    	 | j                  t        | j                               y r*   )r   r   r~   rF   s    r&   
notify_allzCondition.notify_all  s    	 	C&'r%   c                 ^    	 dd l }|j                  dt        d       | j                          y )Nr   z3notifyAll() is deprecated, use notify_all() instead   
stacklevel)warningswarnDeprecationWarningr   rG   r   s     r&   	notifyAllzCondition.notifyAll  s/    	
 	K(Q 	 	8r%   r*   rZ   )rw   rP   rQ   rH   rW   rx   rj   rU   rp   rn   rr   r   r   r   r   r   r$   r%   r&   r	   r	   	  sJ    	!$&*H.`.<(	r%   r	   c                   6    e Zd Z	 ddZd ZddZeZddZd Zy)	r   c                 b    |dk  rt        d      t        t                     | _        || _        y )Nr   z$semaphore initial value must be >= 0)r   r	   r   _cond_value)rG   values     r&   rH   zSemaphore.__init__  s*    19CDDtv&
r%   c           	          | j                   }d|j                   d|j                   dt        |       dd| j                   d	S )N<. at #x: value=>)rO   rP   rQ   rS   r   rG   clss     r&   rU   zSemaphore.__repr__  sK    nnCNN#1S%5%5$6d2d8B- H++a) 	*r%   Nc                 d   	 |s|t        d      d}d }| j                  5  | j                  dk(  rS|sng|#|t               |z   }n|t               z
  }|dk  rnB| j                  j	                  |       | j                  dk(  rS| xj                  dz  c_        d}d d d        |S # 1 sw Y   |S xY w)Nz.can't specify timeout for non-blocking acquireFr   rZ   T)r   r   r   r   r   )rG   r\   r]   r_   r   s        r&   r[   zSemaphore.acquire  s    	. G/MNNZZ 	++"&"''G"3")EG"3"a<!

( ++" q 	 		 	s   A"B%B%%B/c                     	 |dk  rt        d      | j                  5  | xj                  |z  c_        | j                  j                  |       d d d        y # 1 sw Y   y xY w)NrZ   n must be one or more)r   r   r   r   rG   r   s     r&   rc   zSemaphore.release  sX    	 q5455ZZ 	!KK1KJJa 	! 	! 	!s   1AA!c                 $    | j                          y r*   re   rf   s       r&   rj   zSemaphore.__exit__  rk   r%   r   )TN)	rw   rP   rQ   rH   rU   r[   rx   rc   rj   r$   r%   r&   r   r     s(    *
+Z I!r%   r   c                   0     e Zd Z	 d fd	Zd ZddZ xZS )r   c                 2    t         |   |       || _        y r*   )superrH   _initial_value)rG   r   rO   s     r&   rH   zBoundedSemaphore.__init__%  s    #r%   c                     | j                   }d|j                   d|j                   dt        |       dd| j                   d| j
                   dS )Nr   r   r   r   r   /r   )rO   rP   rQ   rS   r   r   r   s     r&   rU   zBoundedSemaphore.__repr__)  sY    nnCNN#1S%5%5$6d2d8B- H++a(;(;'<A? 	@r%   c                    	 |dk  rt        d      | j                  5  | j                  |z   | j                  kD  rt        d      | xj                  |z  c_        | j                  j	                  |       d d d        y # 1 sw Y   y xY w)NrZ   r   z!Semaphore released too many times)r   r   r   r   r   r   s     r&   rc   zBoundedSemaphore.release.  sz    	 q5455ZZ 	!{{Q!4!44 !DEEKK1KJJa 		! 	! 	!s   AA??Br   )rw   rP   rQ   rH   rU   rc   __classcell__)rO   s   @r&   r   r     s     $@
!r%   r   c                   @    e Zd Z	 d Zd Zd Zd Zd Zd Zd Z	d
d	Z
y)r   c                 B    t        t                     | _        d| _        y NF)r	   r   r   _flagrF   s    r&   rH   zEvent.__init__L  s    tv&

r%   c           	          | j                   }| j                  rdnd}d|j                   d|j                   dt	        |       dd| d	S )	Nsetunsetr   r   r   r   z: r   )rO   r   rP   rQ   rS   )rG   r   statuss      r&   rU   zEvent.__repr__P  sL    nn**'3>>"!C$4$4#5T"T(2bPQRRr%   c                 8    | j                   j                          y r*   )r   rW   rF   s    r&   rW   zEvent._at_fork_reinitU  s    

""$r%   c                     	 | j                   S r*   )r   rF   s    r&   is_setzEvent.is_setY  s    Czzr%   c                 \    	 dd l }|j                  dt        d       | j                         S )Nr   z+isSet() is deprecated, use is_set() insteadr   r   )r   r   r   r   r   s     r&   isSetzEvent.isSet]  s1    	
 	C(Q 	 	8{{}r%   c                     	 | j                   5  d| _        | j                   j                          d d d        y # 1 sw Y   y xY wr#   )r   r   r   rF   s    r&   r   z	Event.seth  s<    	 ZZ 	$DJJJ!!#	$ 	$ 	$s	   "9Ac                 V    	 | j                   5  d| _        d d d        y # 1 sw Y   y xY wr   )r   r   rF   s    r&   r   zEvent.clears  s,    	 ZZ 	DJ	 	 	s   (Nc                     	 | j                   5  | j                  }|s| j                   j                  |      }|cd d d        S # 1 sw Y   y xY wr*   )r   r   r   )rG   r]   signaleds      r&   r   z
Event.wait}  sF    	 ZZ 	zzH::??73		 	 	s   +AAr*   )rw   rP   rQ   rH   rU   rW   r   r   r   r   r   r$   r%   r&   r   r   A  s0    S
%		$r%   r   c                   ~    e Zd Z	 ddZd ZddZd Zd Zd Zd Z	d	 Z
d
 Zd Zed        Zed        Zed        Zy)r   Nc                 |    	 t        t                     | _        || _        || _        || _        d| _        d| _        y rA   )r	   r   r   _action_timeout_parties_staterE   )rG   partiesactionr]   s       r&   rH   zBarrier.__init__  s:    	 tv&
r%   c                    | j                   }| j                  r*d|j                   d|j                   dt	        |       ddS d|j                   d|j                   dt	        |       dd| j
                   d| j                   dS )	Nr   r   r   r   z	: broken>z
: waiters=r   r   )rO   brokenrP   rQ   rS   	n_waitingr   r   s     r&   rU   zBarrier.__repr__  s    nn;;s~~&a(8(8'9bhr])TTCNN#1S%5%5$6d2d8B- H NN+1T\\N!= 	>r%   c                    	 || j                   }| j                  5  | j                          | j                  }| xj                  dz  c_        	 |dz   | j                  k(  r| j                          n| j                  |       || xj                  dz  c_        | j                          cd d d        S # | xj                  dz  c_        | j                          w xY w# 1 sw Y   y xY wrY   )r   r   _enterrE   r   _release_wait_exit)rG   r]   indexs      r&   r   zBarrier.wait  s    	 ?mmGZZ 	KKMKKEKK1K19-MMO JJw'q 

	 	 q 

	 	s#   2C5B3%C3'CCC&c                     | j                   dv r)| j                  j                          | j                   dv r)| j                   dk  rt        y )Nrv   rZ   r   )r   r   r   r   rF   s    r&   r   zBarrier._enter  sB    kkW$JJOO kkW$ ;;?$$ r%   c                     	 | j                   r| j                          d| _        | j                  j                          y #  | j	                           xY wrY   )r   r   r   r   _breakrF   s    r&   r   zBarrier._release  sA    		||DKJJ!!#	KKMs   =A   Ac                       j                   j                   fd|      s j                          t         j                  dk  rt        y )Nc                  "     j                   dk7  S rA   r   rF   s   r&   <lambda>zBarrier._wait.<locals>.<lambda>  s    DKK1,< r%   r   )r   r   r   r   r   rG   r]   s   ` r&   r   zBarrier._wait  s=    zz""#<gFKKM$$;;?$$ r%   c                     | j                   dk(  r1| j                  dv r"d| _        | j                  j                          y y y )Nr   r   )rE   r   r   r   rF   s    r&   r   zBarrier._exit   s;    ;;!{{g%

%%' & r%   c                    	 | j                   5  | j                  dkD  r.| j                  dk(  rd| _        n| j                  dk(  rd| _        nd| _        | j                   j                          d d d        y # 1 sw Y   y xY w)Nr   rv   )r   rE   r   r   rF   s    r&   resetzBarrier.reset  so    	 ZZ 	${{Q;;!#"$DK[[B& #%DKJJ!!#	$ 	$ 	$s   AA66A?c                 h    	 | j                   5  | j                          d d d        y # 1 sw Y   y xY wr*   )r   r   rF   s    r&   abortzBarrier.abort  s.    	 ZZ 	KKM	 	 	s   (1c                 F    d| _         | j                  j                          y Nr   )r   r   r   rF   s    r&   r   zBarrier._break%  s     

r%   c                     	 | j                   S r*   )r   rF   s    r&   r   zBarrier.parties+  s    H}}r%   c                 <    	 | j                   dk(  r| j                  S yrA   )r   rE   rF   s    r&   r   zBarrier.n_waiting0  s     L ;;!;;r%   c                 "    	 | j                   dk(  S r   r   rF   s    r&   r   zBarrier.broken9  s    >{{b  r%   NNr*   )rw   rP   rQ   rH   rU   r   r   r   r   r   r   r   r   propertyr   r   r   r$   r%   r&   r   r     su     >< 
 ($(      ! !r%   r   c                       e Zd Zy)r   N)rw   rP   rQ   r$   r%   r&   r   r   ?  s    r%   r   rZ   c                     | t               z  S r*   )_counter)name_templates    r&   _newnamer  E  s    8:%%r%   c                      	 t         D  cg c]  } | j                         r|  }} t         j                  |       y c c} w r*   )_shutdown_locksrJ   difference_update)r   	to_removes     r&   _maintain_shutdown_locksr  W  s8     #2G$GIG%%i0 Hs   <<c                   $   e Zd Z	 dZ	 	 ddddZd Zd Zd Zd Zd	 Z	d
 Z
erd Zd Zd Zd Zd ZddZddZed        Zej*                  d        Zed        Zered        Zd Zed        Zej*                  d        Zd Zd Zd Zd Zy) r   FN)daemonc                   	 |i }|rt        |      }n#t        d      }|	 |j                  }|d| dz  }|| _        || _        || _        || _        ||rt               st        d      || _
        nt               j                  | _
        d | _        t        rd | _        d | _        t#               | _        d| _        d| _        t*        j,                  | _        t1               | _        t4        j7                  |        y # t        $ r Y w xY w)Nz	Thread-%dz ()z4daemon threads are disabled in this (sub)interpreterFT)strr  rw   AttributeError_target_name_args_kwargs_daemon_threads_allowedrb   	_daemonicr
   r	  _ident_HAVE_THREAD_NATIVE_ID
_native_id_tstate_lockr   _started_is_stopped_initializedr0   stderr_stderr_make_invoke_excepthook_invoke_excepthook	_danglingadd)rG   grouptargetrM   r<   r=   r	  target_names           r&   rH   zThread.__init__r  s   	, >Ft9DK(D!"(//KbQ//D 

57"#YZZ#DN+-44DN!"DO   {{"9";d1 & s   C? ?	D
Dc                     | j                   j                          |rB| j                  5| j                  j                          | j                  j                          y y d| _        d | _        y r#   )r  rW   r  r[   r  )rG   is_alives     r&   _reset_internal_lockszThread._reset_internal_locks  s`     	%%'   ,!!113!!))+ -  $D $Dr%   c                 ,   d}| j                   j                         rd}| j                          | j                  rd}| j                  r|dz  }| j
                  |d| j
                  z  z  }d| j                  j                  d| j                  d|d	S )
Ninitialstartedstoppedz daemonz %sr   (z, z)>)	r  r   r%  r  r  r  rO   rw   r  )rG   r   s     r&   rU   zThread.__repr__  s}    ==!FF>>iF;;"edkk))F!%!8!8$**fMMr%   c                    	 | j                   st        d      | j                  j                         rt        d      t        5  | t
        | <   d d d        	 t        | j                  d       | j                  j                          y # 1 sw Y   ;xY w# t        $ r$ t        5  t
        | = d d d         # 1 sw Y    xY ww xY w)Nzthread.__init__() not calledz threads can only be started oncer$   )
r  rb   r  r   _active_limbo_lock_limbo_start_new_thread
_bootstrap	Exceptionr   rF   s    r&   startzThread.start  s    	   =>>==!ABB 	 F4L	 	door2
 		  	   	# !4L!!	s0   
BB BC#B4+	C4B=	9Cc                     	 	 | j                   & | j                   | j                  i | j                   | ` | `| `y # | ` | `| `w xY wr*   )r  r  r  rF   s    r&   runz
Thread.run  sN    		7||'djj9DLL9 dj$,dj$,s	   2< Ac                 Z    	 | j                          y #  | j                  rt        Y y  xY wr*   )_bootstrap_innerr  r0   rF   s    r&   r0  zThread._bootstrap  s+    	!!#	~~$,s    **c                 "    t               | _        y r*   )r   r  rF   s    r&   
_set_identzThread._set_ident  s    kr%   c                 "    t               | _        y r*   )r(   r  rF   s    r&   _set_native_idzThread._set_native_id  s    +oDOr%   c                     	 t               | _        | j                  j                          | j                  s9t        5  t                t        j                  | j                         d d d        y y # 1 sw Y   y xY wr*   )_set_sentinelr  r[   r	  _shutdown_locks_lockr  r  r   rF   s    r&   _set_tstate_lockzThread._set_tstate_lock  sh    	 *O!!#{{% 7(*##D$5$567 7 7 7s   *A11A:c                 (   	 | j                          | j                          t        r| j                          | j                  j                          t        5  | t        | j                  <   t        | = d d d        t        rt        j                  t               t        rt        j                  t               	 | j                          | j#                          y # 1 sw Y   ixY w#  | j!                  |        Y 2xY w# | j#                          w xY wr*   )r8  r>  r  r:  r  r   r-  rL   r  r.  r5   r0   r   r,   r   r4  r  _deleterF   s    r&   r6  zThread._bootstrap_inner   s    	OO!!#%##%MM# !'+$4L! k*..
 LLN! !.''-LLNs7   AC? C3AC? :C' C$ C? 'C<:C? ?Dc                     | j                   }| d| _        d | _         | j                  st        5  t	                d d d        y y y # 1 sw Y   y xY wr#   )r  r  r	  r=  r  r   s     r&   _stopzThread._stop7  sU    "    {{% +(*+ + + +s   AAc                 Z    	 t         5  t        t               = d d d        y # 1 sw Y   y xY wr*   )r-  rL   r   rF   s    r&   r@  zThread._deleteR  s'    K 	%	$	% 	% 	%s   !*c                 
   	 | j                   st        d      | j                  j                         st        d      | t	               u rt        d      || j                          y | j                  t        |d             y )NThread.__init__() not calledz'cannot join thread before it is startedzcannot join current threadr   )r]   )r  rb   r  r   r
   _wait_for_tstate_lockmaxr   s     r&   joinzThread.join[  s{    	.   =>>}}##%HII>##;<<?&&( &&s7A&?r%   c                     | j                   }|y 	 |j                  ||      r!|j                          | j                          y y #  |j	                         r |j                          | j                           xY wr*   )r  r[   rc   rB  rJ   )rG   blockr]   r   s       r&   rF  zThread._wait_for_tstate_lock  sj       < 	||E7+

 ,	{{}
 

s   2A 3A8c                     	 | j                   S r*   )r  rF   s    r&   rM   zThread.name  s    	 zzr%   c                 $    t        |      | _        y r*   )r  r  )rG   rM   s     r&   rM   zThread.name  s     Y
r%   c                     	 | j                   S r*   )r  rF   s    r&   identzThread.ident  s    	 {{r%   c                     	 | j                   S r*   )r  rF   s    r&   	native_idzThread.native_id  s     ??"r%   c                     	 | j                   s| j                  j                         sy| j                  d       | j                    S r   )r  r  r   rF  rF   s    r&   r%  zThread.is_alive  sA    	 4==#7#7#9""5)####r%   c                     	 | j                   S r*   )r  rF   s    r&   r	  zThread.daemon  s    		 ~~r%   c                     | j                   st        d      |rt               st        d      | j                  j	                         rt        d      || _        y )NrE  z/daemon threads are disabled in this interpreterz)cannot set daemon status of active thread)r  rb   r  r  r   r  )rG   daemonics     r&   r	  zThread.daemon  sO      =>>35PQQ==!JKK!r%   c                 T    	 dd l }|j                  dt        d       | j                  S )Nr   z:isDaemon() is deprecated, get the daemon attribute insteadr   r   r   r   r   r	  r   s     r&   isDaemonzThread.isDaemon  s/    	
 	R(Q 	 	8{{r%   c                 L    	 dd l }|j                  dt        d       || _        y )Nr   z;setDaemon() is deprecated, set the daemon attribute insteadr   r   rV  )rG   rT  r   s      r&   	setDaemonzThread.setDaemon  s,    	
 	S(Q 	 	8r%   c                 T    	 dd l }|j                  dt        d       | j                  S )Nr   z7getName() is deprecated, get the name attribute insteadr   r   r   r   r   rM   r   s     r&   getNamezThread.getName  s/    	
 	O(Q 	 	8yyr%   c                 L    	 dd l }|j                  dt        d       || _        y )Nr   z7setName() is deprecated, set the name attribute insteadr   r   r[  )rG   rM   r   s      r&   setNamezThread.setName  s,    	
 	O(Q 	 	8	r%   )NNNr$   Nr*   ru   )rw   rP   rQ   r  rH   r&  rU   r2  r4  r0  r8  r  r:  r>  r6  rB  r@  rH  rF  r   rM   setterrN  rP  r%  r	  rW  rY  r\  r^  r$   r%   r&   r   r   g  s    L59!%:15:x%"N47"(" 	.7.+6%$@L6   
[[  	 	 		# 
	#$   ]]" "				r%   r   )_excepthook_ExceptHookArgs)print_exception)
namedtupler   z'exc_type exc_value exc_traceback threadc                     t        |  S r*   )ra  )r<   s    r&   r   r   $  s    %%r%   c                   	 | j                   t        k(  ry t        !t        j                  t        j                  }n&| j                  | j                  j
                  }|y y | j                  | j                  j                  }n
t               }t        d| d|d       t        | j                   | j                  | j                  |       |j                          y )NzException in thread :Tfileflush)rh  )exc_type
SystemExitr0   r  threadr  rM   r   print_print_exception	exc_valueexc_tracebackri  )r<   r  rM   s      r&   r   r   '  s    	 ==J& 7[[F[[$[[((F~  ;;";;##D;D$TF!,	'8J8J$	&r%   c                      t         t        j                   t        d      t        d      t        j                  t        t        fd} | S )Nzthreading.excepthook is Nonezsys.excepthook is Nonec                 X   	 t         }|}t        g  
       |       } ||       d }y # t        $ rm}d|_        ~j                  j                  }n| j
                  } d|d       j                   j                   }n	} | 
         Y d }~d }y d }~ww xY w# d }w xY w)NTz"Exception in threading.excepthook:rg  )r   r   r1  __suppress_context__r  r  )rl  hookr<   excr  sys_excepthooklocal_print	local_sysold_excepthookold_sys_excepthooksys_exc_infos         r&   invoke_excepthookz2_make_invoke_excepthook.<locals>.invoke_excepthookZ  s    	D|%!";LN";F";<DJ* D)  	,'+C$$)9)9)E"))<#41 $)=)=)I!*!5!5!3LN+ D)	,( Ds'   &, 	B"A!BB% B""B% %B))r   r0   rb   exc_inform  )r|  rw  rx  ry  rz  r{  s    @@@@@r&   r  r  J  s^    
  N9::!344==LKI @ r%   c                   "    e Zd Z	 ddZd Zd Zy)r   Nc                     t         j                  |        || _        || _        ||ng | _        ||ni | _        t               | _        y r*   )r   rH   intervalfunctionr<   r=   r   finished)rG   r  r  r<   r=   s        r&   rH   zTimer.__init__  sA       ,D"	 & 2fr%   c                 :    	 | j                   j                          y r*   )r  r   rF   s    r&   cancelzTimer.cancel  s    7r%   c                    | j                   j                  | j                         | j                   j                         s& | j                  | j
                  i | j                   | j                   j                          y r*   )r  r   r  r   r  r<   r=   r   rF   s    r&   r4  z	Timer.run  sS    4==)}}##%DMM49944r%   r   )rw   rP   rQ   rH   r  r4  r$   r%   r&   r   r     s     r%   r   c                       e Zd Zd Zy)_MainThreadc                 0   t         j                  | dd       | j                          | j                  j	                          | j                          t        r| j                          t        5  | t        | j                  <   d d d        y # 1 sw Y   y xY w)N
MainThreadFrM   r	  )r   rH   r>  r  r   r8  r  r:  r-  rL   r  rF   s    r&   rH   z_MainThread.__init__  so    <>!! 	(#'GDKK 	( 	( 	(s   /BBN)rw   rP   rQ   rH   r$   r%   r&   r  r    s    (r%   r  c                   &    e Zd Zd Zd Zd ZddZy)_DummyThreadc                 2   t         j                  | t        d      t                      | j                  j                          | j                          t        r| j                          t        5  | t        | j                  <   d d d        y # 1 sw Y   y xY w)NzDummy-%dr  )r   rH   r  r  r  r   r8  r  r:  r-  rL   r  rF   s    r&   rH   z_DummyThread.__init__  sq    8J#768 	 	:!! 	(#'GDKK 	( 	( 	(s   0BBc                      y r*   r$   rF   s    r&   rB  z_DummyThread._stop  s    r%   c                      yr#   r$   rF   s    r&   r%  z_DummyThread.is_alive  s    r%   Nc                      y r*   r$   r   s     r&   rH  z_DummyThread.join  s    r%   r*   )rw   rP   rQ   rH   rB  r%  rH  r$   r%   r&   r  r    s    (3r%   r  c                  Z    	 	 t         t                  S # t        $ r t               cY S w xY wr*   )rL   r   rN   r  r$   r%   r&   r
   r
     s0    y{## ~s    **c                  P    	 dd l } | j                  dt        d       t               S )Nr   z;currentThread() is deprecated, use current_thread() insteadr   r   )r   r   r   r
   r   s    r&   currentThreadr    s.    
 MMO$  4r%   c                  z    	 t         5  t        t              t        t              z   cd d d        S # 1 sw Y   y xY wr*   )r-  r   rL   r.  r$   r%   r&   r   r     s1     
 *7|c&k)* * *s   1:c                  P    	 dd l } | j                  dt        d       t               S )Nr   z7activeCount() is deprecated, use active_count() insteadr   r   )r   r   r   r   r  s    r&   activeCountr    s-    
 MMK$  4>r%   c                  x    t        t        j                               t        t        j                               z   S r*   )listrL   valuesr.  r$   r%   r&   
_enumerater    s$     !D$999r%   c                      	 t         5  t        t        j                               t        t        j                               z   cd d d        S # 1 sw Y   y xY wr*   )r-  r  rL   r  r.  r$   r%   r&   r   r     s@     
 >GNN$%V]]_(==> > >s   ;AAc                     	 t         rt        d      t        j                  | g|i |}t        j                  |       y )Nz$can't register atexit after shutdown)_SHUTTING_DOWNrb   	functoolspartial_threading_atexitsr   )r.   argr=   calls       r&   _register_atexitr    s@     ABBT2C262Dd#r%   )r   c                     	 t         j                  rt               ry dat	        t
              D ]	  }  |          t         j                  t               k(  r5t         j                  }|j                          t         j                          n	 	 t        5  t        t              }t        j                          d d d        sy |D ]"  }|j                          |j                          $ ]# 1 sw Y   4xY wr#   )_main_threadr  r'   r  reversedr  rN  r   r  rc   rB  r=  r  r  r   r[   )atexit_calltlocklocksr   s       r&   	_shutdownr  %  s     $8$: N   23  Y[())
 	 	 ! 	$)E!!#	$  	DLLNLLN	 	$ 	$s   $C))C2c                      	 t         S r*   )r  r$   r%   r&   r   r   ]  s     r%   )_local)r   c                     	 t               ai } 	 t        t                  }|at               at               a
t        5  t        t                     }|j                  t               |D ]  }||u ra|j                  d       t               }t        |t               r)t
        |_        d|_        d|_        |j)                          ||_        || |<   h|j                  d       |j-                           t.        j1                          t        j1                          t        j                  |        d d d        y # t        $ r t               }Y .w xY w# 1 sw Y   y xY w)NTr  F)r   r-  rL   r   rN   r  r  rB   r=  r   r  r  updater  r&  
isinstancer  rO   r  r  r>  r  rB  r.  r   )
new_activecurrentthreadsrl  rN  s        r&   _after_forkr  o  s:     J )+& L *+eO	 ! jl#y! 	F   ,,T2!fl3'2F$#/FL',F$++- %$*
5! ,,U3%	( 	z"7! !    -	 ! !s   D8 C3E8EEEregister_at_fork)after_in_child)dos_ossysr0   _threadr  timer   r   _weakrefsetr   	itertoolsr   rE   _collectionsr   r}   ImportErrorcollections__all__start_new_threadr/  daemon_threads_allowedr  allocate_lockrB   r<  r   r'   r  r(   r  r   errorr   r   r:   r   r,   r5   r   r    r   r   r!   r   r   r?   r;   r	   r   r   r   r   rb   r   __next__r   r  r-  rL   r.  r  r=  r   r  r  r   r`  r   ra  r   	tracebackrb  rn  rc  __excepthook__r  r   r  r  r
   r  r   r  r  r   r  r  r  r   r  r  r   r  r   _threading_localr  r|   r  r$   r%   r&   <module>r     s   A     #  %,,< ,, !88 &&%%	"77#))M!NN?# mmmmG !!
 %# ${ {z q qhT Tn*!y *!ZO Oz^! ^!B	 	
 !9& W 
	I	
 &' %1 n nb+<\ 0jF <
(& 
(*36 32
	
*	:	>  $"  }2p''
7!t 3"#C4 $y4  ,++,:     #"#
  Gx&  (=& 13O&(`
  '&'sk   G, ,G> 9H %H &H) I ,G;:G;>H
	H
HHH&%H&) IIII