python (3.12.0)

(root)/
lib/
python3.12/
multiprocessing/
__pycache__/
managers.cpython-312.pyc

̑e
gdZddlZddlZddlZddlZddlZddlZddlZddlZddlm	Z	ddl
mZddlm
Z
ddlmZmZmZddlmZdd	lmZdd
lmZddlmZ	ddlmZd
Zej1ddZej6ejedDcgc]}eei|c}ZdZeD]Z ej6e e[ [Gdde!Z"difdZ#dZ$Gdde%Z&dZ'dZ(Gdde!Z)Gdde!Z*e
jVe
jXfe
jZe
j\fd Z/Gd!d"e!Z0Gd#d$e1Z2Gd%d&e!Z3d'Z4ifd(Z5		dbd)Z6Gd*d+e!Z7Gd,d-e!Z8dcd.Z9Gd/d0e3Z:Gd1d2e3Z;Gd3d4e;Z<Gd5d6e3Z=Gd7d8e3Z>Gd9d:e3Z?Gd;d<e3Z@e5d=d>ZAGd?d@eAZBe5dAdBZCdCdDieC_De5dEdFZEe5dGdHZFdIdIdIdDdDdJeF_DGdKdGeFZGGdLdMe0ZHeHj7dNejeHj7dOejeHj7dPeje=eHj7dQeje;eHj7dReje;eHj7dSeje;eHj7dTeje;eHj7dUeje<eHj7dVeje>eHj7dWejeGeHj7dXeReBeHj7dYeSeCeHj7d-e8e@eHj7dZe9eEeHj7d+e7e?eHj7dDe:d[eHj7dId\er!Gd]d^ZTGd_d`e)ZUGdade0ZVyy#e$rdZYwxYwcc}w)d)BaseManagerSyncManager	BaseProxyTokenN)getpid)
format_exc)
connection)	reductionget_spawning_popenProcessError)pool)process)util)get_context)
shared_memoryTSharedMemoryManagerFcZtj|j|jffSN)arraytypecodetobytes)as L/BuggyBox/python/3.12.0/bootstrap/lib/python3.12/multiprocessing/managers.pyreduce_arrayr/s ;;QYY[111)itemskeysvaluesc&tt|ffSr)listobjs rrebuild_as_listr$4s$s)rc,eZdZdZdZdZdZdZdZy)rz3
    Type to uniquely identify a shared object
    typeidaddressidc0|||c|_|_|_yrr&)selfr'r(r)s    r__init__zToken.__init__Ds06,dlDGrcH|j|j|jfSrr&r+s r__getstate__zToken.__getstate__GsT\\47733rc.|\|_|_|_yrr&r+states  r__setstate__zToken.__setstate__Js/4,dlDGrc|jjd|jd|jd|jdS)Nz(typeid=z
, address=z, id=))	__class____name__r'r(r)r.s r__repr__zToken.__repr__Ms-''dllDGGM	MrN)	r7
__module____qualname____doc__	__slots__r,r/r3r8rrrr>s$,IE45Mrrr=cx|j||||f|j\}}|dk(r|St||)zL
    Send a message to manager using connection `c` and return response
    #RETURN)sendrecvconvert_to_error)cr)
methodnameargskwdskindresults       rdispatchrIUsBFFB
D$'(668LD&y
4
((rc	|dk(r|S|dvrSt|ts%tdj||t	||dk(rtd|zSt|St
dj|S)N#ERROR)
#TRACEBACK#UNSERIALIZABLEz.Result {0!r} (kind '{1}') type is {2}, not strrMzUnserializable message: %s
zUnrecognized message type {!r})
isinstancestr	TypeErrorformattypeRemoteError
ValueError)rGrHs  rrBrB_sx
	
2	2&#&@GGD$v,01
1$$=FGGv&&:AA$GHHrceZdZdZy)rSc>dt|jdzdzS)NzM
---------------------------------------------------------------------------
rzK---------------------------------------------------------------------------)rOrEr.s r__str__zRemoteError.__str__os$s499Q<'886ABrN)r7r9r:rWr=rrrSrSnsCrrSc|g}t|D]+}t||}t|s|j|-|S)z4
    Return a list of names of methods of `obj`
    )dirgetattrcallableappend)r#tempnamefuncs    rall_methodsr`vsBDCsD!D>KKKrcPt|Dcgc]
}|ddk7s|c}Scc}w)zP
    Return a list of names of methods of `obj` which do not start with '_'
    r_)r`)r#r^s  rpublic_methodsrcs')-@TaCD@@@s
##ceZdZdZgdZdZdZdZdZdZ	dZ
d	Zd
ZdZ
ee
edZd
ZdZdZdZdZdZdZdZdZy)ServerzM
    Server class which runs in a process controlled by a manager object
    )	shutdowncreateaccept_connectionget_methods
debug_infonumber_of_objectsdummyincrefdecrefczt|ts$tdj|t	|||_t
j||_t|\}}||d|_
|jj|_ddi|_i|_
i|_tj |_y)Nz&Authkey {0!r} is type {1!s}, not bytes)r(backlog0Nr=)rNbytesrPrQrRregistryrAuthenticationStringauthkeylistener_clientlistenerr(	id_to_objid_to_refcountid_to_local_proxy_obj	threadingLockmutex)r+rur(rw
serializerListenerClients       rr,zServer.__init__s'5)8??T'],-
-!
33G<*:6&!"=
}},,z* %'"^^%
rctj|_|tj_	tj|j}d|_|j	|jjs6|jjd|jjs6tjtj k7rGt#j$dtj t_tj&t_tj*dy#ttf$rYwxYw#tjtj k7rGt#j$dtj t_tj&t_tj*dwxYw)z(
        Run the server forever
        )targetTr	zresetting stdout, stderrrN)r}Event
stop_eventrcurrent_process_manager_serverThreadaccepterdaemonstartis_setwaitKeyboardInterrupt
SystemExitsysstdout
__stdout__rdebug
__stderr__stderrexit)r+rs  r
serve_foreverzServer.serve_forevers $//+48!1	 ''t}}=H"HONN
//002OO((+//002
zzS^^+

56 ^^
 ^^
HHQK&z2

zzS^^+

56 ^^
 ^^
HHQKs+7E,AD::E	EEEA?Gc		|jj}tj|j
|f}d|_|jU#t$rYawxYw)NTrrE)ryacceptOSErrorr}rhandle_requestrr)r+rCts   rrzServer.acceptersa
MM((*  (;(;1$GAAH
GGI

sA	A#"A#cd}	tj||jtj||j|j	}|\}}}}||j
vs
Jd|zt
||}	||g|i|}d|f}		|j|	y#t$rdtf}	Y*wxYw#t$rdtf}	YEwxYw#t$rx}
	|jdtfn#t$rYnwxYwtjd|	tjd|tjd|
Yd}
~
yd}
~
wwxYw)Nz%r unrecognizedr?rLzFailure to send message: %rz ... request was %r ... exception was %r)r
deliver_challengerwanswer_challengerApublicrZ	Exceptionrr@rinfo)r+rCrequestignorefuncnamerErFr_rHmsges           r_handle_requestzServer._handle_requestsL	*((DLL9''4<<8ffhG+2(FHdDt{{*H,=,HH4*D
*a/$/$/!&)		2
FF3K

3#Z\2
3	/.C	/	2
jl34

II3S9II+W5II-q11	2s[A;B>B#C#B;:B;>CC	E#C?>E?	DE
DAEEc	|j||jy#t$rYwxYw#|jwxYw)z)
        Handle a new connection
        N)rrcloser+conns  rrzServer.handle_requests@	  &

JJL			
JJLs$	0303Ac$tjdtjj|j
}|j}|j}|jjs	dx}}|}|\}}}	}
	||\}}}||vrtd|dt|d|t||}	||	i|
}|xr|j|d}|r4|j!|||\}}t#||j$|}d||ff}nd|f}			||jjsyy#t$r.}
	|j|\}}}n#t$r|
wxYwYd}
~
d}
~
wwxYw#t&$r}d|f}Yd}~sd}~wwxYw#t$rQ
d	t)f}n?	|j*|}|||g	i
}d|f}n#t&$rd	t)f}YnwxYwYt,$rKtjd
tjjt/j0dY&t&$rd	t)f}Y=wxYw#t&$r|dt)fYUwxYw#t&$r}tj2d
tjjtj2dtj2d||j5t/j0dYd}~d}~wwxYw)zQ
        Handle requests from the proxies in a particular process/thread
        z$starting server thread to service %rNzmethod z of z object is not in exposed=#PROXYr?rKrLz$got EOF -- exiting thread serving %rrrMzexception in thread serving %rz ... message was %rrr	)rrr}current_threadr^rAr@rzrrKeyErrorr|AttributeErrorrRrZgetrgrr(rrfallback_mappingEOFErrorrrrr)r+rrAr@rzrDr#ridentrErFexposed	gettypeidkefunctionresr'ridentrexposedtokenrr
fallback_funcrHs                        rserve_clientzServer.serve_clients	

9++-22	4yyyyNN	//((*5
3#''
S&07-z4!.7.>+C)W,(#T#Y9
#3
3/"D1D1C'J9==T+JF+/;;tVS+I( %fdllF C'(E):;(#..
<Iw//((* !! 66u=0Wi#! !'0!"!(#Q-C("
;%'6C;(,(=(=j(I
!. $s"59"=A" )&1$;+Z\:;


A$335::<
3#Z\2
3!<+Z\:;<
		:!002779		/5		115



s2F	D<-F<E6AFI<	E3EE.E&&E.)F.E33F6	F
?FFF

FI)"GIG$!I#G$$I)AI;III51I84I55I88	LBL

Lc|Srr=r+rrr#s    rfallback_getvaluezServer.fallback_getvalue?s
rct|SrrOrs    rfallback_strzServer.fallback_strBs3xrct|Sr)reprrs    r
fallback_reprzServer.fallback_reprEsCyr)rWr8	#GETVALUEcyrr=r+rCs  rrlzServer.dummyNsrc
r|j5g}t|jj}|j	|D]K}|dk7s	|jd|d|j|dt
|j|dddMdj|cdddS#1swYyxYw)	zO
        Return some info --- useful to spot problems with refcounting
        rrz  z:       refcount=z
    rNK
)	rr!r{rsortr\rOrzjoin)r+rCrHrrs     rrjzServer.debug_infoQs
ZZ		%F++0023DIIK
HC<MM#($*=*=e*D#&t~~e'<Q'?#@"#E#GH
H
99V$		%		%		%sAB-AB--B6c,t|jS)z*
        Number of shared objects
        )lenr{rs  rrkzServer.number_of_objectsas
4&&''rc	tjd|jd|j
j
y#ddl}|j	Y3xYw#|j
j
wxYw)z'
        Shutdown this process
        z!manager received shutdown messager?NrN)rrr@	traceback	print_excrset)r+rCrs   rrfzServer.shutdownhsZ	"JJ:;
FF$%

OO!		"!OO!s&AAAA:c	n|j5|j|\}}}}|!|st|dk7rtd|d}	n||i|}	|t	|	}|Kt|ts$tdj|t|t|t|z}dt|	z}
tjd||
|	t||f|j|
<|
|j vrd|j |
<ddd|j#|
|
t%fS#1swY(xYw)z>
        Create a new shared object and return its id
        Nr	z4Without callable, must have one non-keyword argumentrz,Method_to_typeid {0!r}: type {1!s}, not dictz%xz&%r callable returned object with id %r)rrurrTrcrNdictrPrQrRr!r)rrrrzr{rmtuple)r+rCr'rErFr[rmethod_to_typeid	proxytyper#rs           rrgz
Server.createusMZZ	/mmF+
;Hg/CIN$NPP1g--(-+!"2D9#FMM,d3C.DFGGw-$/?*@@2c7NEJJ?O%(#g,8H$IDNN5!D///-.##E*7	/:	
AueGn$$=	/	/sC7D++D4cLt|j|jdS)zL
        Return the methods of the shared object indicated by token
        r	)rrzr))r+rCrs   rrizServer.get_methodss!T^^EHH-a011rcz|tj_|jd|j	|y)z=
        Spawn a new thread to serve this connection
        rN)r}rr^r@r)r+rCr^s   rrhzServer.accept_connections0+/	  "'	 !!rcF|j5	|j|xxdz
cc<dddy#t$r\}||jvrBd|j|<|j||j|<tjd|n|Yd}~id}~wwxYw#1swYyxYw)Nr	z&Server re-enabled tracking & INCREF %r)rr{rr|rzrr)r+rCrrs    rrmz
Server.increfs
ZZ	

##E*a/*		

D66612D''.2259NN5)JJGOHP
		s,B/	BAB
BBBB c	l||jvr%||jvrtjd|y|j5|j|dkr6tdj
||j||j||j|xxdzcc<|j|dk(r
|j|=ddd||jvrHd|j|<tjd||j5|j|=dddyy#1swY`xYw#1swYyxYw)NzServer DECREF skipping %rrz+Id {0!s} ({1!r}) has refcount {2:n}, not 1+r	)Nr=Nzdisposing of obj with id %r)r{r|rrrAssertionErrorrQrz)r+rCrs   rrnz
Server.decrefs0+++T///JJ2E:
ZZ	/""5)Q.$AHHt~~e4++E2455
&!+&""5)Q.''.	/+++%5DNN5!JJ4e<
*NN5)
*
*,	/	/$
*
*sA?DD*D'*D3N)r7r9r:r;rr,rrrrrrrrrrlrjrkrfrgrirhrmrnr=rrreresNF&$,2<
Ob %

% (""%H2"*rreceZdZdgZdZdZdZy)Statevaluerr	N)r7r9r:r<INITIALSTARTEDSHUTDOWNr=rrrrs	IGGHrr)pickle	xmlrpclibceZdZdZiZeZ		ddddZdZdZ	ddZ
e	dd	Zd
Z
ddZdZd
ZdZdZedZedZe		ddZy)rz!
    Base class for managers
    Ng?)shutdown_timeoutcP|tjj}||_tj||_t
|_tj|j_	||_
t|\|_|_
|xs
t|_||_yr)rrrw_addressrv_authkeyr_staterr_serializerrx	_Listener_Clientr_ctx_shutdown_timeout)r+r(rwrctxrs      rr,zBaseManager.__init__s~?--/77G
44W=
g!MM%'6z'B$(;=	!1rc|jjtjk7r|jjtjk(rtd|jjtjk(rtdtdj|jjt|j|j|j|jS)zX
        Return server object with serve_forever() method and address attribute
        Already started serverManager has shut downUnknown state {!r})
rrrrrr
rrQre	_registryrrrr.s r
get_serverzBaseManager.get_servers;;

-{{  EMM1"#;<<""enn4"#:;;"(//0A0ABDDdnndmmmmT%5%57	7rct|j\}}||j|j}t	|ddt
j|j_y)z>
        Connect manager object to the server process
        rwNrl)	rxrrrrIrrrr)r+rrrs    rconnectzBaseManager.connectsI+4+;+;<&dmmT]];tW%!MMrc
|jjtjk7r|jjtjk(rtd|jjtjk(rtdtdj|jj|t|stdtjd\}}|jjt|j|j |j"|j$|j&|||f|_d	j+d
|j(j,D}t|j.dz|z|j(_|j(j3|j5|j7|_|j5tj|j_t9j:|t|j<|j(|j"|j$|j|j>|j@fd
|_!y)z@
        Spawn a server process for this manager object
        rrrNzinitializer must be a callableF)duplexr:c32K|]}t|ywrr).0is  r	<genexpr>z$BaseManager.start.<locals>.<genexpr>0sAAQAs-rrEexitpriority)"rrrrrr
rrQr[rPr
PiperProcessrR_run_serverrrrr_processr	_identityr7r^rrrArFinalize_finalize_managerrrrf)r+initializerinitargsreaderwriterrs      rrzBaseManager.starts;;

-{{  EMM1"#;<<""enn4"#:;;"(//0A0ABDD"8K+@<==$6		)):))..$--""FKC*
A)@)@AA!$Z00C7%?



	

"MM

$t*..--

t{{,, 6 68	
rcTtjtjtj||||j||||}|j	|j
|j
tjd|j
|jy)z@
        Create a server, report its address and run it
        Nzmanager serving at %r)
signalSIGINTSIG_IGN_Serverr@r(rrrr)	clsrur(rwrrrrservers	         rrzBaseManager._run_serverBsz	

fmmV^^4""XwD	FNN#	
		)6>>:rcV|jjtjk(sJd|j	|j
|j}	t|dd|f|z|\}}|jt||j
||fS#|jwxYw)zP
        Create a new shared object; return the token and exposed tuple
        zserver not yet startedrNrg)
rrrrrrrrIrr)r+r'rErFrr)rs       r_createzBaseManager._createYs{{  EMM1K3KK||DMM4==|A	"4x&4NKBJJLVT]]B/88
JJLsBB(c|j>|jj||jjsd|_yyy)zC
        Join the manager process (if it has been spawned)
        N)rris_aliver+timeouts  rrzBaseManager.joinesA==$MMw'==))+ $
,%rc|j|j|j}	t|dd|j	S#|j	wxYw)zS
        Return some info about the servers shared objects and connections
        rNrjrrrrIrrs  r_debug_infozBaseManager._debug_infonsB||DMM4==|A	D$5JJLDJJLAAc|j|j|j}	t|dd|j	S#|j	wxYw)z5
        Return the number of shared objects
        rNrkr&rs  r_number_of_objectszBaseManager._number_of_objectsxsC||DMM4==|A	D$(;<JJLDJJLr(c|jjtjk(r|j	|jjtj
k7r|jjtjk(rt
d|jjtjk(rt
dt
dj|jj|S)NzUnable to start serverrr)	rrrrrrr
rrQr.s r	__enter__zBaseManager.__enter__s;;

-JJL;;

-{{  EMM1"#;<<""enn4"#:;;"(//0A0ABDDrc$|jyr)rfr+exc_typeexc_valexc_tbs    r__exit__zBaseManager.__exit__s

rc|jrtjd	|||}	t|dd|j		|j||jrtjdt|drtjd|j|j||jr7tjd	|j|jtj|_	tj|=y#|j	wxYw#t
$rYwxYw#t$rYywxYw)
zQ
        Shutdown the manager process; will be registered as a finalizer
        z#sending shutdown message to managerrNrf)r$zmanager still alive	terminatez'trying to `terminate()` manager processz#manager still alive after terminate)r"rrrIrrrhasattrr4killrrrr_address_to_localr)rr(rwr2rrrs       rrzBaseManager._finalize_managers*7II;<
w8!T44JJL
GLL!12w!		/07K0IIGH%G%%' GLL)9:'w'')		"GH$$nn	++G4%JJL

$		s:
E
EE.E%EE	E"!E"%	E10E1c|jSr)rr.s rr(zBaseManager.addresss}}rcd|jvr|jj|_t|xs
t	dd}|xs
t	dd}|rWt|j
D];\}}t|tus
Jd|zt|tur3Jd|z|||f|j<|rfd}	|	_	t||	yy)z9
        Register a typeid with the manager type
        rN	_exposed__method_to_typeid_z%r is not a stringc(tjd|jg|i|\}}||j||j|}|j|j|j}t|dd|jf|S)Nz)requesting creation of a shared %r objectmanagerrwrrrn)	rrr rrrr(rIr))	r+rErFrexpproxyrrr's	       rr]z"BaseManager.register.<locals>.temps

FO)T\\&@4@4@
s!4++T MM3||EMM4==|ItX{;r)__dict__rcopy	AutoProxyrZr!rrRrOr7setattr)
rr'r[rrr
create_methodkeyrr]s
 ` `      rregisterzBaseManager.registerscll*MM..0CM!IBWYTB+J"9.BDI	"#3#9#9#;<
H
UCyC'C)=)CCE{c)G+?%+GG
H

g/!

f	
#DMC&r)NNrNrsr)NNNNT)r7r9r:r;rrerr,rrrclassmethodrr rr'r*r,r2staticmethodrpropertyr(rGr=rrrrsIG>F2/22
7*)V/1,
9%  DEI6:%'%'rrceZdZdZdZy)ProcessLocalSetc2tj|dy)Nc"|jSr)clearr"s r<lambda>z*ProcessLocalSet.__init__.<locals>.<lambda>s399;r)rregister_after_forkr.s rr,zProcessLocalSet.__init__s  '>?rct|dfSrs)rRr.s r
__reduce__zProcessLocalSet.__reduce__sDz2~rN)r7r9r:r,rSr=rrrLrLs
@rrLceZdZdZiZejZ		ddZdZ	difdZ
dZdZe
d	Zd
ZdZdZd
ZdZy)rz.
    A base for proxies of shared objects
    Nctj5tjj|jd}|;tjtf}|tj|j<dddd|_|d|_	||_
|jj|_||_
||_t|d|_||_|t%j&||_nK|j|jj(|_n#t%j*j,|_|r|j/tj0|tj2y#1swYxYw)Nrr	)r_mutexr7rr(rForkAwareLocalrL_tls_idset_tokenr)_id_managerrrxr_owned_by_managerrrvrrrw_increfrQ_after_fork)	r+rrr>rwrrm
manager_owned	tls_idsets	         rr,zBaseProxy.__init__s6


	G!3377

tLI  //1?3DD	=F	++EMM:		GaL	
 l;;>>
%&z215"/#88ADM
]]
& MM22DM#335==DMLLN  y'<'<=K	G	GsA(E<<Fctjdtjj}tjjdk7r$|dtjjzz
}|j|jj|j}t|dd|f||j_
y)Nzmaking connection to manager
MainThread|rrh)rrrrr^r}rrrZr(rrIrXr
)r+r^rs   r_connectzBaseProxy._connects

12&&(--##%**l:C)2249999D||DKK//|Gt04':#		rr=c	|jj}|j|j|||f|j\}}|dk(r|S|dk(r|\}}|jj|jd}	|jj |_|	||j"|j|j$|}
|j'|j |j$}t)|dd|j*f|
St-||#t$r\tjdtjj|j|jj}YawxYw)	zV
        Try to call a method of the referent and return a copy of the result
        z#thread %r does not own a connectionr?rr=rNrn)rXr
rrrr}rr^rer@r[rAr\rr'rZr(rrrrIr)rB)r+rDrErFrrGrHrrrr@s           r_callmethodzBaseProxy._callmethod(s<	(99''D	
		488Zt45yy{f9M
X
#NGU

//=bAI KK//EMt''

wE<<

t}}<EDT4EHH;7LtV,,-	(JJ< //166
8MMO99''D		(sDA!E:9E:c$|jdS)z9
        Get a copy of the value of the referent
        rrhr.s r	_getvaluezBaseProxy._getvalueFs,,rc
|jr+tjd|jjy|j|jj|j}t|dd|jftjd|jj|jj|j|jxr|jj}tj|tj |j|j||j"|j|j
fd|_y)Nz%owned_by_manager skipped INCREF of %rrrmz	INCREF %r
r)r]rrrZr)rr(rrIr[rYaddr\rrr_decrefrX_close)r+rr2s   rr^zBaseProxy._increfLs!!JJ>O||DKK//|GtX{3

;/!

6$--"6"6mm)##++t}}e))T[[$,,8	rcj|j|j||jtjk(rO	tjd|j||j|}t|dd|jfn tjd|j|s\t|drOtjdtjj|jj|`yyy#t$r }tjd|Yd}~d}~wwxYw)Nz	DECREF %rrrnz... decref failed %sz%DECREF %r -- manager already shutdownr
z-thread %r has no more proxies so closing conn)discardr)rrrrrr(rIrr5r}rr^r
r)rrwr2tlsidsetrrrs        rrozBaseProxy._decref`s


ehh=EKK5==8
6

;1u}}g>tX{;

JJ>Il3JJF //166
8NN  "	4u
6

1155
6sA
D			D2D--D2cd|_	|jy#t$r"}tjd|zYd}~yd}~wwxYw)Nzincref failed: %s)r\r^rrr)r+rs  rr_zBaseProxy._after_forkys<
	/LLN	/II)A-..	/s	AAAc
i}t|j|d<t|ddr3|j|d<tt
|j|j|ffStt||j|j|ffS)Nrw_isautoFr)	rrrZr:RebuildProxyrCrZrrRr+rFs  rrSzBaseProxy.__reduce__s+"mmDO4E*"nnDO T-=-=tDF
F!$Zd.>.>EG
Grc"|jSr)rk)r+memos  r__deepcopy__zBaseProxy.__deepcopy__s~~rcrdt|j|jjt	|fzS)Nz<%s object, typeid %r at %#x>)rRr7rZr'r)r.s rr8zBaseProxy.__repr__s3.T
##T[[%7%7DBC	Crcf	|jdS#t$rt|dddzcYSwxYw)zV
        Return representation of the referent (or a fall-back if that fails)
        r8Nrgz; '__str__()' failed>)rhrrr.s rrWzBaseProxy.__str__s=	=##J//	=:cr?%<<<	=s00NNNTF)r7r9r:r;r7rForkAwareThreadLockrVr,rerhrkr^rIror_rSr|r8rWr=rrrrsu
%T
%
%
'F26HM'>R$,.B-<-(0/G C=rrcttjdd}|r||j|jk(rct	j
d|d|d<|j|jvr0|j|j|j|j<|jddxr ttjdd}|||fd|i|S)	z5
    Function used for unpickling proxy objects.
    rNz*Rebuild a proxy owned by manager, token=%rTr`rm_inheritingF)
rZrrr(rrr)r|rzpop)r_rrrFrrms      rrxrxsW,,.0A4
HF
&..EMM1

?G $_886777  *
((2	
4 	EG++-}eDDz9&9D99rct|}	|||fS#t$rYnwxYwi}|D]}td|d|d|t|tf|}||_||||f<|S)zB
    Return a proxy type whose methods are given by `exposed`
    zdef z:(self, /, *args, **kwds):
        return self._callmethod(z
, args, kwds))rrexecrRrr:)r^r_cachedicmeth	ProxyTypes      r
MakeProxyTypersGnG
tWo&&


CH6:DBCF	HHTI<-I!I'FD'?s	  cpt|d}|4||j|}	t|dd|f}|j|||j}|tjj}td|jz|}	|	||||||}
d|
_
|
S#|jwxYw)z*
    Return an auto-proxy for `token`
    r	Nrriz
AutoProxy[%s])r>rwrmr`T)rxr(rIrrrrrwrr'rw)rrr>rwrrmr`rrrr@s           rrCrCs
j)!,Gu}}g6	tT=5(CGJJL7.""))+33o<gFIeZ'#=
BEEML
JJLsB##B5ceZdZdZdZy)	Namespacec:|jj|yr)rAupdaterys  rr,zNamespace.__init__s

T"rc&t|jj}g}|D]-\}}|jdr|j	|d|/|j|jjddj|dS)Nrb=(, r5)	r!rAr
startswithr\rr6r7r)r+rr]r^rs     rr8zNamespace.__repr__svT]]((*+ 	5KD%??3'tU34	5	
		>>22DIIdODDrN)r7r9r:r,r8r=rrrrs
#Errc8eZdZddZdZdZdZeeeZy)Valuec ||_||_yr)	_typecode_value)r+rrlocks    rr,zValue.__init__s!rc|jSrrr.s rrz	Value.gets{{rc||_yrrr+rs  rrz	Value.sets	rcft|jd|jd|jdS)Nrrr5)rRr7rrr.s rr8zValue.__repr__s!!$Z00$..$++NNrNT)	r7r9r:r,rrr8rJrr=rrrrs#OS#Errc.tj||Sr)r)rsequencers   rArrayrs;;x**rc.eZdZdZdZdZdZdZdZy)
IteratorProxy)__next__r@throwrc|Srr=r.s r__iter__zIteratorProxy.__iter__rc&|jd|S)Nrrjr+rEs  rrzIteratorProxy.__next__
s
D11rc&|jd|S)Nr@rjrs  rr@zIteratorProxy.sends--rc&|jd|S)Nrrjrs  rrzIteratorProxy.throw..rc&|jd|S)Nrrjrs  rrzIteratorProxy.closerrN)	r7r9r:r:rrr@rrr=rrrr	s 6I2.//rrc*eZdZdZddZdZdZdZy)
AcquirerProxy)acquirereleaseNc8||fn||f}|jd|SNrrj)r+blockingr$rEs    rrzAcquirerProxy.acquires'%o{Hg3F	400rc$|jdSNrrjr.s rrzAcquirerProxy.release	**rc$|jdSrrjr.s rr,zAcquirerProxy.__enter__rrc$|jdSrrjr.s    rr2zAcquirerProxy.__exit__ rr)TN)r7r9r:r:rrr,r2r=rrrrs&I1+++rrc.eZdZdZddZddZdZddZy)	ConditionProxy)rrrnotify
notify_allNc(|jd|fSNrrjr#s  rrzConditionProxy.wait&
33rc(|jd|fS)Nrrj)r+ns  rrzConditionProxy.notify(s1$//rc$|jdS)Nrrjr.s rrzConditionProxy.notify_all*s--rc|}|r|S|tj|z}nd}d}|s<||tjz
}|dkr	|S|j|}|s<|S)Nr)time	monotonicr)r+	predicater$rHendtimewaittimes      rwait_forzConditionProxy.wait_for,s~Mnn&0GGH""T^^%55q=

IIh[F

rr)r	)r7r9r:r:rrrrr=rrrr$sFI40.rrc*eZdZdZdZdZdZddZy)
EventProxy)rrrOrc$|jdS)Nrrjr.s rrzEventProxy.is_setAs))rc$|jdSNrrjr.s rrzEventProxy.setC&&rc$|jdS)NrOrjr.s rrOzEventProxy.clearE((rNc(|jd|fSrrjr#s  rrzEventProxy.waitGrrr)r7r9r:r:rrrOrr=rrrr?s2I*')4rrcTeZdZdZd	dZdZdZedZedZ	edZ
y)
BarrierProxy)__getattribute__rabortresetNc(|jd|fSrrjr#s  rrzBarrierProxy.waitMrrc$|jdS)Nrrjr.s rrzBarrierProxy.abortOrrc$|jdS)Nrrjr.s rrzBarrierProxy.resetQrrc&|jddS)Nr)partiesrjr.s rrzBarrierProxy.partiesSs 2LAArc&|jddS)Nr)	n_waitingrjr.s rrzBarrierProxy.n_waitingVs 2NCCrc&|jddS)Nr)brokenrjr.s rrzBarrierProxy.brokenYs 2K@@rr)r7r9r:r:rrrrJrrrr=rrrrKsR>I4))
BB
DD
AArrc"eZdZdZdZdZdZy)NamespaceProxy)r__setattr____delattr__c~|ddk(rtj||Stj|d}|d|fS)Nrrbrhr)objectrr+rF
callmethods   r__getattr__zNamespaceProxy.__getattr__`sBq6S=**455,,T=A
,sf55rc|ddk(rtj|||Stj|d}|d||fS)Nrrbrhr)rrr)r+rFrrs    rrzNamespaceProxy.__setattr__esEq6S=%%dC77,,T=A
-#u66rc~|ddk(rtj||Stj|d}|d|fS)Nrrbrhr)rrrrs   rrzNamespaceProxy.__delattr__jsAq6S=%%dC00,,T=A
-#00rN)r7r9r:r:rrrr=rrrr^sBI6
7
1rrcReZdZdZdZdZeeeZee	jZy)
ValueProxy)rrc$|jdS)Nrrjr.s rrzValueProxy.getsrrc(|jd|fSrrjrs  rrzValueProxy.setusx00rN)r7r9r:r:rrrJrrHtypesGenericAlias__class_getitem__r=rrrrqs.I'1S#E#E$6$67rr
BaseListProxy)__add____contains____delitem____getitem____len____mul____reversed____rmul____setitem__r\countextendindexinsertrremovereverser__imul__ceZdZdZdZy)	ListProxyc,|jd|f|S)Nrrjrs  r__iadd__zListProxy.__iadd__sE8,rc,|jd|f|S)Nrrjrs  rrzListProxy.__imul__seX.rN)r7r9r:rrr=rrr	r	srr		DictProxy)rrrrrrrOrBrrrrpopitem
setdefaultrrrIterator
ArrayProxy)rrr	PoolProxy)applyapply_asyncrimapimap_unorderedrmap	map_asyncstarmap
starmap_asyncr4AsyncResult)rrrrrceZdZdZdZy)rc|Srr=r.s rr,zPoolProxy.__enter__rrc$|jyr)r4r.s    rr2zPoolProxy.__exit__srN)r7r9r:r,r2r=rrrrsrceZdZdZy)ra(
    Subclass of `BaseManager` which supports a number of shared object types.

    The types registered are those intended for the synchronization
    of threads, plus `dict`, `list` and `Namespace`.

    The `multiprocessing.Manager()` function creates started instances of
    this class.
    N)r7r9r:r;r=rrrrsrrQueue
JoinableQueuerr~RLock	SemaphoreBoundedSemaphore	ConditionBarrierPoolr!rr)rrE)rEc>eZdZdZgfdZdZdZdZdZdZ	dZ
y	)
_SharedMemoryTrackerz+Manages one or more shared memory segments.c ||_||_yrshared_memory_context_name
segment_names)r+r^r-s   rr,z_SharedMemoryTracker.__init__s.2D+!.Drctjd|dt|jj	|y)z6Adds the supplied shared memory block name to tracker.zRegister segment  in pid N)rrrr-r\r+segment_names  rregister_segmentz%_SharedMemoryTracker.register_segments3JJ*<*:(68*MN%%l3rctjd|dt|jj	|tj|}|j|jy)zCalls unlink() on the shared memory block with the supplied name
            and removes it from the list of blocks being tracked.zDestroy segment r/N)	rrrr-rrSharedMemoryrunlink)r+r1segments   rdestroy_segmentz$_SharedMemoryTracker.destroy_segmentsX
JJ),)9&(LM%%l3#00>GMMONNrcN|jddD]}|j|y)z<Calls destroy_segment() on all tracked shared memory blocks.N)r-r7r0s  rr5z_SharedMemoryTracker.unlinks* $ 2 21 5
3$$\2
3rctjd|jjdt	|jy)NzCall z.__del__ in )rrr6r7rr5r.s r__del__z_SharedMemoryTracker.__del__s1JJt~~667|FH:NOKKMrc2|j|jfSrr+r.s rr/z!_SharedMemoryTracker.__getstate__s33T5G5GHHrc"|j|yr)r,r1s  rr3z!_SharedMemoryTracker.__setstate__sDMM5!rN)r7r9r:r;r,r2r7r5r:r/r3r=rrr)r)s,5/1	/	4
		3
		I	"rr)cReZdZejgdzZdZdZdZdZdZ	dZ
y)	SharedMemoryServer)
track_segmentrelease_segment
list_segmentsctj|g|i||j}t|trtj|}td|dt|_	tjdty)Nshm_rbz"SharedMemoryServer started by pid )rer,r(rNrtosfsdecoder)rshared_memory_contextrr)r+rEkwargsr(s    rr,zSharedMemoryServer.__init__snOOD24262llG'5)++g.$tG9AfhZ%@A
&JJ;FH:FGrct|j|ddr|j|d<tj|||g|i|S)zCreate a new distributed-shared object (not backed by a shared
            memory block) and return its id to be used in a Proxy Object.rg_shared_memory_proxyrF)r5rurFrerg)r+rCr'rErGs     rrgzSharedMemoryServer.createsKt}}V,R02HI262L2L./==q&B4B6BBrcb|jjtj||S)zACall unlink() on all tracked shared memory, terminate the Server.)rFr5rerfrs  rrfzSharedMemoryServer.shutdowns%&&--/??4++rc:|jj|y)z?Adds the supplied shared memory block name to Server's tracker.N)rFr2r+rCr1s   rr?z SharedMemoryServer.track_segments&&77Erc:|jj|y)zCalls unlink() on the shared memory block with the supplied name
            and removes it from the tracker instance inside the Server.N)rFr7rLs   rr@z"SharedMemoryServer.release_segments
&&66|Drc.|jjS)zbReturns a list of names of shared memory blocks that the Server
            is currently tracking.)rFr-rs  rrAz SharedMemoryServer.list_segments s--;;;rN)r7r9r:rerr,rgrfr?r@rAr=rrr>r>s6FG	H	C	,
	F	E
	<rr>c2eZdZdZeZdZdZdZdZ	dZ
y)raLike SyncManager but uses SharedMemoryServer instead of Server.

        It provides methods for creating and returning SharedMemory instances
        and for creating a list-like object (ShareableList) backed by shared
        memory.  It also provides methods that create and return Proxy Objects
        that support synchronization across processes (i.e. multi-process-safe
        locks and semaphores).
        ctjdk(rddlm}|j	tj|g|i|tj|jjdty)Nposixr	)resource_trackerz created by pid )rDr^rRensure_runningrr,rrr6r7r)r+rErGrRs    rr,zSharedMemoryManager.__init__2s\ww'!/ //1  777JJ$..1122B68*MNrcptj|jjdt	y)Nz.__del__ by pid )rrr6r7rr.s rr:zSharedMemoryManager.__del__>s'JJ$..1122B68*MNrc|jjtjk7r|jjtjk(rtd|jjtjk(rtdtdj|jj|j|j|j|j|jS)z@Better than monkeypatching for now; merge into Server ultimatelyz"Already started SharedMemoryServerz!SharedMemoryManager has shut downr)
rrrrrr
rrQrrrrrr.s rrzSharedMemoryManager.get_serverAs{{  EMM1;;$$

5&'KLL[[&&%..8&'JKK&,33DKK4E4EFHH<<

 $

t/?/?A
Arc,|j|j|j5}tjdd|}	t|dd|jf	ddd|S#t$r}|j|d}~wwxYw#1swYSxYw)zoReturns a new SharedMemory instance with the specified size in
            bytes, to be tracked by the manager.rNT)rgsizer?)	rrrrr4rIr^
BaseExceptionr5)r+rXrsmsrs     rr4z SharedMemoryManager.SharedMemoryNsdmmT]]C
t#00dNT4388+F
J%JJLG	
Js)B	A&&	B/BBB		BcN|j|j|j5}tj|}	t|dd|jjf	ddd|S#t$r!}|jj|d}~wwxYw#1swYSxYw)zReturns a new ShareableList instance populated with the values
            from the input sequence, to be tracked by the manager.rNr?)
rrrr
ShareableListrIshmr^rYr5)r+rrslrs     rr\z!SharedMemoryManager.ShareableListZsdmmT]]C
t"00:T4266;;.I
I%FFMMOG	
Is(B#A--	B6BBBB$N)r7r9r:r;r>rr,r:rr4r\r=rrrr&s*	%
	O	O	A
	
	rrr)W__all__rr}rrqueuerrrDrrrrSr
contextrrr
rrrrr	HAS_SHMEMr\ImportErrorrrGrRrZ
view_typesr$	view_typerrrIrBrrSr`rcrerrrXmlListener	XmlClientrxrrrLrrxrrCrrrrrrrrrrrr	r
r;r
BasePoolProxyrrr rr~r"r#r$r%r&r'r!rr)r>r)r^s0r<module>risWA
	 @@*INN()2	5;;-4M
NDd$72t$&'
N
3IIy/23
zMFM.&(b)
IC)C	AF*VF*Z
F##Z%6%67)):+?+?@t'&t'tcm=m=f:*)+,8<7<:
E
E
F
+/I/
+I
+]6	4	4A9A&1Y1&88o0


+(
	
 	
<*

k,
!" $
 
	+	Wekk*_ekk2Wiooz:VY^^];Wioo}=[)"5"5}E')C)C"$[)"5"5~FY	 1 1<@VTYY	2VT9-VT9-WeZ0WeZ0[)^<Z=N]%8
""""J*<V*<Z>k>g
]%IOsO;P	;PP