ÿØÿà JFIF    ÿÛ „  ( %"1!%)+...383,7(-.+  -+++--++++---+-+-----+---------------+---+-++7-----ÿÀ  ß â" ÿÄ     ÿÄ H    !1AQaq"‘¡2B±ÁÑð#R“Ò Tbr‚²á3csƒ’ÂñDS¢³$CÿÄ   ÿÄ %  !1AQa"23‘ÿÚ   ? ôÿ ¨pŸªáÿ —åYõõ\?àÒü©ŠÄï¨pŸªáÿ —åYõõ\?àÓü©ŠÄá 0Ÿªáÿ Ÿå[úƒ ú®ði~TÁbqÐ8OÕpÿ ƒOò¤Oè`–RÂáœá™êi€ßÉ< FtŸI“öÌ8úDf´°å}“¾œ6  öFá°y¥jñÇh†ˆ¢ã/ÃÐ:ªcÈ "Y¡ðÑl>ÿ ”ÏËte:qž\oäŠe÷󲍷˜HT4&ÿ ÓÐü6ö®¿øþßèô Ÿ•7Ñi’•j|“ñì>b…þS?*Óôÿ ÓÐü*h¥£ír¶ü UãS炟[AÐaè[ûª•õ&õj?†Éö+EzP—WeÒírJFt ‘BŒ†Ï‡%#tE Øz ¥OÛ«!1›üä±Í™%ºÍãö]°î(–:@<‹ŒÊö×òÆt¦ãº+‡¦%ÌÁ²h´OƒJŒtMÜ>ÀÜÊw3Y´•牋4ǍýʏTì>œú=Íwhyë,¾Ôò×õ¿ßÊa»«þˆѪQ|%6ž™A õ%:øj<>É—ÿ Å_ˆCbõ¥š±ý¯Ýƒï…¶|RëócÍf溪“t.СøTÿ *Ä¿-{†çàczůŽ_–^XþŒ±miB[X±d 1,é”zEù»& î9gœf™9Ð'.;—™i}!ôšåîqêÛ٤ёý£½ÆA–àôe"A$˝Úsäÿ ÷Û #°xŸëí(l »ý3—¥5m! rt`†0~'j2(]S¦¦kv,ÚÇ l¦øJA£Šƒ J3E8ÙiŽ:cÉžúeZ°€¯\®kÖ(79«Ž:¯X”¾³Š&¡* ….‰Ž(ÜíŸ2¥ª‡×Hi²TF¤ò[¨íÈRëÉ䢍mgÑ.Ÿ<öäS0í„ǹÁU´f#Vß;Õ–…P@3ío<ä-±»Ž.L|kªÀê›fÂ6@»eu‚|ÓaÞÆŸ…¨ááå>åŠ?cKü6ùTÍÆ”†sĤÚ;H2RÚ†õ\Ö·Ÿn'¾ ñ#ºI¤Å´%çÁ­‚â7›‹qT3Iï¨ÖÚ5I7Ë!ÅOóŸ¶øÝñØôת¦$Tcö‘[«Ö³šÒ';Aþ ¸èíg A2Z"i¸vdÄ÷.iõ®§)¿]¤À†–‡É&ä{V¶iŽ”.Ó×Õÿ û?h¬Mt–íª[ÿ Ñÿ ÌV(í}=ibÔ¡›¥¢±b Lô¥‡piη_Z<‡z§èŒ)iÖwiÇ 2hÙ3·=’d÷8éŽ1¦¸c¤µ€7›7Ø ð\á)} ¹fËí›pAÃL%âc2 í§æQz¿;T8sæ°qø)QFMð‰XŒÂ±N¢aF¨…8¯!U  Z©RÊ ÖPVÄÀÍin™Ì-GˆªÅËŠ›•zË}º±ŽÍFò¹}Uw×#ä5B¤{î}Ð<ÙD é©¤&‡ïDbàÁôMÁ." ¤‡ú*õ'VŽ|¼´Úgllº¼klz[Æüï÷Aób‡Eÿ dÑ»Xx9ÃÜ£ÁT/`¼¸vI±Ýµ·Ë‚“G³þ*Ÿû´r|*}<¨îºœ @¦mÄ’M¹”.œ«Y–|6ÏU¤jç¥ÕÞqO ˜kDÆÁ¨5ÿ š;ÐЦ¦€GÙk \ –Þ=â¼=SͧµªS°ÚÍpÜãQűÀõ¬?ÃÁ1Ñ•õZà?hóœ€ L¦l{Y*K˜Ù›zc˜–ˆâ ø+¾ ­-Ök¥%ùEÜA'}ˆ><ÊIè“bpÍ/qÞâvoX€w,\úªò6Z[XdÒæ­@Ö—€$òJí#é>'°Ú ôª˜<)4ryÙ£|óAÅn5žêŸyÒäMÝ2{"}‰–¤l÷ûWX\l¾Á¸góÉOÔ /óñB¤f¸çñ[.P˜ZsÊË*ßT܈§QN¢’¡¨§V¼(Üù*eÕ“”5T¨‹Âê¥FŒã½Dü[8'Ò¥a…Ú¶k7a *•›¼'Ò·\8¨ª\@\õ¢¦íq+DÙrmÎ…_ªæ»ŠÓœ¡¯’Ré9MÅ×D™lælffc+ŒÑ,ý™ÿ ¯þǤ=Å’Á7µ÷ÚÛ/“Ü€ñýã¼àí¾ÕÑ+ƒ,uµMâÀÄbm:ÒÎPæ{˜Gz[ƒ¯«® KHà`ߨŠéí¯P8Aq.C‰ à€kòpj´kN¶qô€…Õ,ÜNŠª-­{Zö’æû44‰sŽè‰îVíRœÕm" 6?³D9¡ÇTíÅꋇ`4«¸ÝÁô ï’ýorqКÇZ«x4Žâéþuïf¹µö[P ,Q£éaX±`PÉÍZ ¸äYúg üAx ’6Lê‚xÝÓ*äQ  Ï’¨hÍ =²,6ï#rÃ<¯–£»ƒ‹,–ê•€ aÛsñ'%Æ"®ÛüìBᝠHÚ3ß°©$“XnœÖ’î2ËTeûìxîß ¦å¿çÉ ðK§þ{‘t‚Ϋ¬jéîZ[ ”š7L¥4VÚCE×]m¤Øy”ä4-dz£œ§¸x.*ãÊÊ b÷•h:©‡¦s`BTÁRû¾g⻩‹jø sF¢àJøFl‘È•Xᓁà~*j¯ +(ÚÕ6-£¯÷GŠØy‚<Ç’.F‹Hœw(+)ÜÜâÈzÄäT§FߘãÏ;DmVœ3Àu@mÚüXÝü•3B¨òÌÁÛ<·ÃÜ z,Ì@õÅ·d2]ü8s÷IôÞ¯^Ç9¢u„~ëAŸï4«M? K]­ÅàPl@s_ p:°¬ZR”´›JC[CS.h‹ƒïËœ«Æ]–÷ó‚wR×k7X‰k›‘´ù¦=¡«‰¨¨Â')—71ó’c‡Ðúµ `é.{§p¹ój\Ž{1h{o±Ý=áUÊïGÖŒõ–-BÄm+AZX¶¡ ïHðæ¥JmÙ;…䡟ˆ¦ ° äšiÉg«$üMk5¤L“’çÊvïâï ,=f“"íἊ5ô¬x6{ɏžID0e¸vçmi'︧ºð9$ò¹÷*£’9ÿ ²TÔ…×>JV¥}Œ}$p[bÔ®*[jzS*8 ”·T›Í–ñUîƒwo$áè=LT™ç—~ô·¤ÈÚ$榍q‰„+´kFm)ž‹©i–ËqÞŠ‰à¶ü( ‚•§ •°ò·‡#5ª•µÊ﯅¡X¨šÁ*F#TXJÊ ušJVÍ&=iÄs1‚3•'fý§5Ñ<=[íÞ­ PÚ;ѱÌ_~Ä££8rÞ ²w;’hDT°>ÈG¬8Á²ÚzŽ®ò®qZcqJêäÞ-ö[ܘbň±çb“ж31²n×iƒðÕ;1¶þÉ ªX‰,ßqÏ$>•î íZ¥Z 1{ç൵+ƒÕµ¥°T$§K]á»Ûï*·¤tMI’ÂZbŽÕiÒ˜}bÓ0£ª5›¨ [5Ž^ÝœWøÂÝh° ¢OWun£¤5 a2Z.G2³YL]jåtì”ä ÁÓ‘%"©<Ôúʰsº UZvä‡ÄiÆÒM .÷V·™ø#kèýiíÌ–ª)µT[)BˆõÑ xB¾B€ÖT¨.¥~ð@VĶr#¸ü*åZNDŽH;âi ],©£öØpù(šºãö¼T.uCê•4@ÿ GÕÛ)Cx›®0ø#:ÏðFÒbR\(€€Ä®fã4Þ‰Fä¯HXƒÅ,†öEÑÔÜ]Öv²?tLÃvBY£ú6Êu5ÅAQ³1‘’¬x–HŒÐ‡ ^ ¸KwJôÖŽ5×CÚ¨vÜ«/B0$×k°=ðbÇ(Ï)w±A†Á† 11Í=èQšµ626ŒÜ/`G«µ<}—-Ö7KEHÈÉðóȤmݱû±·ø«Snmá=“䫚mݱŸ¡¶~ó·“äUóJæúòB|E LêŽy´jDÔ$G¢þÐñ7óR8ýÒ…Ç› WVe#·Ÿ p·Fx~•ݤF÷0Èÿ K¯æS<6’¡WШ; ´ÿ ¥Êø\Òuî†åÝ–VNœkÒ7oòX¨Á­Ø÷FÎÑä±g÷ÿ M~Çî=p,X´ ÝÌÚÅ‹’ÃjÖ.ØöÏñ qïQ¤ÓZE†° =6·]܈ s¸>v•Ž^Ý\wq9r‰Î\¸¡kURÒ$­*‹Nq?Þª*!sŠÆ:TU_u±T+øX¡ ®¹¡,ÄâÃBTsÜ$Ø›4m椴zÜK]’’›Pƒ @€#â˜`é¹=I‡fiV•Ôî“nRm+µFPOhÍ0B£ €+¬5c v•:P'ÒyÎ ‰V~‚Ó†ÖuókDoh$å\*ö%Ю=£«…aȼ½÷Û.-½VŒŠ¼'lyî±1¬3ó#ÞE¿ÔS¤gV£m›=§\û"—WU¤ÚǼÿ ÂnÁGŒÃ ‚õN D³õNÚíŒÕ;HôyÄÈ©P¹Ä{:?R‘Ô¨âF÷ø£bÅó® JS|‚R÷ivýáâ€Æé¡è³´IئÑT!§˜•ت‚¬â@q€wnïCWÄ@JU€ê¯m6]Ï:£âx'+ÒðXvÓ¦Úm=–´7œ $ì“B£~p%ÕŸUþ« N@¼üï~w˜ñø5®—'Ôe»¤5ã//€ž~‰Tþ›Å7•#¤× Íö pÄ$ùeåì*«ÓŠEØWEÈsßg ¦ûvžSsLpºÊW–âµEWöˬH; ™!CYõZ ÃÄf æ#1W. \uWâ\,\Çf j’<qTbên›Î[vxx£ë 'ö¨1›˜ÀM¼Pÿ H)ƒêêŒA7s,|F“ 꺸k³9Ìö*ç®;Ö!Ö$Eiž•¹ÒÚ†ýóéÝû¾ÕS®ó$’NÝäŸz¤5r¦ãÄÃD÷Üø!°ø‡Ô&@m™Ì^Ãä­d q5Lnÿ N;.6½·N|#ä"1Nƒx“ã<3('&ñßt  ~ªu”1Tb㫨9ê–›–bìd$ߣ=#ÕãÒmU¯eí$EFù5ýYô櫨æì™Ç—±ssM]·á¿0ÕåJRÓªîiƒ+O58ÖñªŠÒx" \µâá¨i’¤i —Ö ” M+M¤ë9‚‰A¦°Qõ¾ßøK~¼Ã‘g…Ö´~÷Ï[3GUœÒ½#…kàÔ®Ò”‰³·dWV‰IP‰Ú8u¹”E ÖqLj¾êÕCBš{A^Âß;–¨`¯¬ìö ˼ ×tìø.tƐm*n¨y4o&Àx¥n¦×î‡aupáÛj8¿m›è¶ã!o½;ß0y^ý×^EÑ¿ÒjzŒ­)vÚÑnÄL …^ªô× ‡—‚3k Îý­hï]içå–îÏ*÷ñþ»Ô CÒjøjÍznˆ´ ¹#b'Fô‹ ‰v¥'’à'T´ƒHýÍ%M‰ ƒ&ÆÇŒï1 ‘ –Þ ‰i¬s žR-Ÿ kЬá¬7:þ 0ŒÅÒÕ/aÙ¬ÃÝ#Úøœ ©aiVc‰. ¹¦ãµ” ›Yg¦›ÆÎýº°f³7ƒhá·¸­}&D9¡ÂsÉÙÞèŠõØàC™¨ñbFC|´Ü(ŸƒÚÒ-%»'a Ì¿)ËÇn¿úÿ ÞŽX…4ÊÅH^ôΑí@ù¹Eh¶“L8Çjù ¼ÎåVªóR©Ï5uà V4lZß®=€xÖŸ–ÑÈ ÷”¨°¾__yM1tÉ?uÆþIkÄgæ@þ[¢†°XÃJ£j·:nkÅ¢u ‘}âGzö­/IµèЬ¼48q¦F°ŽR¼=ûì{´¯RýicS ÕÛ íNtÍÙï£,w4rêì®»~x(©Uñ§#Ñ&œÕ¤>ÎåÍÓ9’Ö{9eV­[Öjâ²ãu]˜å2›qÑšÕJç0€sÄ|Êëè0튔bÁ>“{×_F`Ø©ºê:µä,v¤ðfc1±"«ÔÍän1#=· Âøv~H½ÐßA¾¿Ü€Óš]Õ; I¾÷ç‚Qi†î¹9ywÔKG˜áñ zQY—§ÃÕZ07§X‚ Áh;ÁM)iÌCH-¯T‘ë|A0{Ò½LÚ–TâÖkÜ’dÀ“rmm»”جPF³ÖcbE§T€ÒxKºû’Ó®7±²(\4ŽÃ¸Uu@j™yĵ;³µ!Á¢b.W¤=mõ´êµK k ¸K^ÜÛ#p*Ü14qkZç5ïë †°5Ï%ÍÛ<Õ¤×Ô¥ê†C Õ´¼ú$ƒÖ“”]Ù¬qÞÚ[4©ý!ûÏ—Áb쳐XµA¬â~`›Çr¸8ìùÝ䫦<>ä÷«?xs´ÇÑ /á;¹øüÊÈÙà{"@Žïzâ¬[âß‚ U_<ÇŸ½4èN˜ú61®qŠu ¦þF£»äJ_ˆÙÎ~ ÞAã–݄ϗrŠD;xTž‘ô`É«…suãO`?³à™ô Lý#Íc5öoæØ‚y´´÷«ZR§<&JÇ+éâô´€i!Àˆ0æAoàðLèÖ-2ŸõW.’t^–(KÁmHµV@xÜÇy®Ñø­â^:Ú3w· 7½¹°ñ¸â¹®:',«Mœ—n­Á+Ãbš LÈ‘ÄnRÓÅœ%¦²‰¨ùQ:¤f‚ "PÕtô¸…cæl…&˜Ú˜Ôkv‹ž+vŠ,=¢v­6—Xy*¥t£«<™:“aîϲ=¦6rO]XI¿Œ÷¤zÚ­›¶ 6÷”w\d ü~v®ˆÌk«^m<ÿ ¢‰Õ\)ùºŽ;… lîÙÅEŠ®cѾ@vnMÏ,¼“ñ•ŽBxðÃzãÇç%3ˆ"}Ù•Åî> BÉú;Ò]V+P˜F_´ßé> Øše|ï‡ÄOmFæÇ ãqÞ$/xÐx­z`ï9"œÜij‚!7.\Td…9M‡•iŽ‹¾‘50ÞŽn¥ß4ÉôO ¹*í^QêËÜÇÌ8=ާs‰'ÂëÙ«á%Pú[O †ÅP¯Vsް.‰,kc¶ ¬A9n˜XÎ-ÞšN["¹QÕ‰ƒMýÁߺXJæÍaLj¾×Ãmã¾ãÚ uñÒþåQô¦¥ /ÄUx:‚ÍÜ’ Đ©ØÝ3V¨‰ÕnÐ6ó*óúK­«…c ¯U òhsý­jóÔj#,ímŒRµ«lbïUTŒÑ8†Ä0œÏr`ð¡¬É Ї ë"À² ™ 6¥ f¶ ¢ÚoܱԷ-<Àî)†a¶ž'Ú»¨TXqØæ¶÷YÄHy˜9ÈIW­YÀuMFë ºÏ’AqÌ4·/Ú †ô'i$øä­=Ä Ý|öK×40è|È6p‘0§)o¥ctî§H+CA-“ xØ|ÐXАç l8íºð3Ø:³¤¬KX¯UÿÙ 3 ^ d@sddddgZddlZddlZddlZddlZddlZddlmZddlm Z dd l m Z m Z dd lm Z dd lmZdd lmZdd lmZddZe jejedddDZedek rddZxeD]Ze jeeqWGdddeZfifddZddZGdddeZddZd d!ZGd"d#d#eZGd$d%d%eZ e j!e j"fe j#e j$fd&Z%Gd'ddeZ&Gd(d)d)e'Z(Gd*ddeZ)d+d,Z*ifd-d.Z+dd0d1Z,Gd2d3d3eZ-Gd4d5d5eZ.dd6d7Z/Gd8d9d9e)Z0Gd:d;d;e)Z1Gdd?d?e)Z3Gd@dAdAe)Z4GdBdCdCe)Z5GdDdEdEe)Z6e+dFdZ7GdZd[d[e7Z8e+d\dZ9d]deie9_:e+dfdZ;e+dgdZe>jdwej?e>jdxej?e>jdyej@e3e>jdzejAe1e>jd{ejBe1e>jd|ejCe1e>jd}ejDe1e>jd~ejEe2e>jdejFe4e>jde jGe=e>jdee8e>jdeHe9e>jd5e.e6e>jd7e/e;e>jd3e-e5e>jdee0dde>jdsdddS) BaseManager SyncManager BaseProxyTokenN) format_exc) connection) reductionget_spawning_popen)pool)process)util) get_contextcCstj|j|jffS)N)arraytypecodetobytes)ar./usr/lib/python3.6/multiprocessing/managers.py reduce_array$srcCsg|]}tti|qSr)typegetattr).0namerrr (sritemskeysvaluescCstt|ffS)N)list)objrrrrebuild_as_list*sr c@s4eZdZdZdZddZddZd d Zd d Zd S)rz4 Type to uniquely indentify a shared object typeidaddressidcCs||||_|_|_dS)N)r!r"r#)selfr!r"r#rrr__init__9szToken.__init__cCs|j|j|jfS)N)r!r"r#)r$rrr __getstate__<szToken.__getstate__cCs|\|_|_|_dS)N)r!r"r#)r$staterrr __setstate__?szToken.__setstate__cCsd|jj|j|j|jfS)Nz %s(typeid=%r, address=%r, id=%r)) __class____name__r!r"r#)r$rrr__repr__BszToken.__repr__N)r!r"r#) r* __module__ __qualname____doc__ __slots__r%r&r(r+rrrrr3s cCs8|j||||f|j\}}|dkr*|St||dS)zL Send a message to manager using connection `c` and return response z#RETURNN)sendrecvconvert_to_error)cr# methodnameargskwdskindresultrrrdispatchJs  r9cCs\|dkr |S|dkr,t|tks$tt|S|dkrPt|tksDttd|StdSdS)Nz#ERRORz #TRACEBACKz#UNSERIALIZABLEzUnserializable message: %s zUnrecognized message type)rstrAssertionError RemoteError ValueError)r7r8rrrr2Ts r2c@seZdZddZdS)r<cCs&ddddt|jdddS)N -Kr)r:r5)r$rrr__str__aszRemoteError.__str__N)r*r,r-rArrrrr<`sr<cCs6g}x,t|D] }t||}t|r|j|qW|S)z4 Return a list of names of methods of `obj` )dirrcallableappend)rtemprfuncrrr all_methodshs  rGcCsddt|DS)zP Return a list of names of methods of `obj` which do not start with '_' cSsg|]}|ddkr|qS)r_r)rrrrrrwsz"public_methods..)rG)rrrrpublic_methodsssrIc @seZdZdZdddddddd d g Zd d Zd dZddZddZddZ ddZ ddZ ddZ e e e dZ ddZddZd d!Zd"d#Zd$d%Zd&d'Zd(d)Zd*d+Zd,d-Zd.S)/ServerzM Server class which runs in a process controlled by a manager object shutdowncreateaccept_connection get_methods debug_infonumber_of_objectsdummyincrefdecrefcCslt|tst||_tj||_t|\}}||dd|_|jj |_ ddffi|_ i|_ i|_ t j|_dS)N)r"Zbacklog0) isinstancebytesr;registryr AuthenticationStringauthkeylistener_clientlistenerr" id_to_objid_to_refcountid_to_local_proxy_obj threadingLockmutex)r$rXr"rZ serializerListenerClientrrrr%s   zServer.__init__cCstj|_|tj_zZtj|jd}d|_|j y x|jj sN|jj dq6WWnt t fk rjYnXWdtjtjkrtjdtjt_tjt_tjdXdS)z( Run the server forever )targetTrNzresetting stdout, stderrr)r`Event stop_eventr current_process_manager_serverThreadaccepterdaemonstartis_setwaitKeyboardInterrupt SystemExitsysstdout __stdout__r debug __stderr__stderrexit)r$rlrrr serve_forevers       zServer.serve_foreverc CsPxJy|jj}Wntk r&wYnXtj|j|fd}d|_|jqWdS)N)rfr5T)r\ZacceptOSErrorr`rkhandle_requestrmrn)r$r3trrrrlszServer.accepterc 'CsLd}}}yTtj||jtj||j|j}|\}}}}||jksTtd|t||}Wntk r~dt f} Yn>Xy||f||}Wntk rdt f} Yn Xd|f} y|j | Wnttk r>} zVy|j dt fWntk rYnXt j d| t j d|t j d| WYdd} ~ XnX|j dS)z) Handle a new connection Nz%r unrecognizedz #TRACEBACKz#RETURNzFailure to send message: %rz ... request was %rz ... exception was %r)rZdeliver_challengerZZanswer_challenger1publicr;r Exceptionrr0r infoclose) r$r3funcnamer8requestignorer5r6rFmsgerrrr|s4    zServer.handle_requestcDCstjdtjj|j}|j}|j}x|jj syBd}}|}|\}}} } y||\}} } Wn^t k r} zBy|j |\}} } Wn&t k r}z | WYdd}~XnXWYdd} ~ XnX|| krt d|t || ft||}y|| | }Wn,tk r&}zd|f}WYdd}~XnPX| o8| j|d}|rn|j|||\}}t||j|}d||ff}nd|f}Wnt k r|dkrdtf}nNy,|j|}|||||f| | }d|f}Wn tk rdtf}YnXYnPtk r"tjdtjjtjd Yn tk r@dtf}YnXyDy ||Wn2tk r}z|d tfWYdd}~XnXWq(tk r}zBtjd tjjtjd |tjd ||jtjdWYdd}~Xq(Xq(WdS)zQ Handle requests from the proxies in a particular process/thread z$starting server thread to service %rNz+method %r of %r object is not in exposed=%rz#ERRORz#PROXYz#RETURNz #TRACEBACKz$got EOF -- exiting thread serving %rrz#UNSERIALIZABLEzexception in thread serving %rz ... message was %rz ... exception was %rr)r rvr`current_threadrr1r0r]rhroKeyErrorr_AttributeErrorrrrgetrLrr"rfallback_mappingEOFErrorrsryrr)r$connr1r0r]r4rridentr5r6exposed gettypeidkeZ second_keZfunctionZresrrr!ZridentZrexposedtokenZ fallback_funcr8rrr serve_clientsx  (        $   zServer.serve_clientcCs|S)Nr)r$rrrrrrfallback_getvalue&szServer.fallback_getvaluecCst|S)N)r:)r$rrrrrr fallback_str)szServer.fallback_strcCst|S)N)repr)r$rrrrrr fallback_repr,szServer.fallback_repr)rAr+z #GETVALUEcCsdS)Nr)r$r3rrrrQ5sz Server.dummycCs||jlg}t|jj}|jxD|D]<}|dkr(|jd||j|t|j|dddfq(Wdj|SQRXdS)zO Return some info --- useful to spot problems with refcounting rUz %s: refcount=%s %srNr@r>) rbrr^rsortrDr:r]join)r$r3r8rrrrrrO8s  $zServer.debug_infocCs t|jS)z* Number of shared objects )lenr^)r$r3rrrrPGszServer.number_of_objectscCsLz:ytjd|jdWnddl}|jYnXWd|jjXdS)z' Shutdown this process z!manager received shutdown message#RETURNNr)rN)r rvr0 traceback print_excrhset)r$r3rrrrrKNs zServer.shutdownc Os|j|j|\}}}}|dkrBt|dkr4| s8t|d} n |||} |dkr\t| }|dk rt|tksttt|t|}dt| } t j d|| | t ||f|j | <| |j krd|j | <WdQRX|j|| | t|fS)z> Create a new shared object and return its id Nrrz%xz&%r callable returned object with id %r)rbrXrr;rIrdictrr#r rvrr]r^rRtuple) r$r3r!r5r6rCrmethod_to_typeid proxytyperrrrrrL[s$     z Server.createcCst|j|jdS)zL Return the methods of the shared object indicated by token r)rr]r#)r$r3rrrrrNzszServer.get_methodscCs"|tj_|jd|j|dS)z= Spawn a new thread to serve this connection #RETURNN)rN)r`rrr0r)r$r3rrrrrMs  zServer.accept_connectioncCs|jy|j|d7<Wnhtk r}zL||jkrrd|j|<|j||j|<|j|\}}}tjd|n|WYdd}~XnXWdQRXdS)Nrz&Server re-enabled tracking & INCREF %r)rbr^rr_r]r rv)r$r3rrrrrrrrrRs  z Server.increfcCs||jkr$||jkr$tjd|dS|j@|j|dks>t|j|d8<|j|dkrf|j|=WdQRX||jkrdfdf|j|<tjd||j|j|=WdQRXdS)NzServer DECREF skipping %rrrzdisposing of obj with id %r)r^r_r rvrbr;r])r$r3rrrrrSs     z Server.decrefN)r*r,r-r.r~r%rzrlr|rrrrrrQrOrPrKrLrNrMrRrSrrrrrJ}s. "Q rJc@seZdZdgZdZdZdZdS)StatevaluerrN)r*r,r-r/INITIALSTARTEDSHUTDOWNrrrrrsr)pickleZ xmlrpclibc@seZdZdZiZeZd!ddZddZdd Z dffd d Z e dffd d Z ddZ d"ddZddZddZddZddZeddZeddZe d#dd ZdS)$rz! Base class for managers NrcCs\|dkrtjj}||_tj||_t|_tj|j_ ||_ t |\|_ |_ |pTt|_dS)N)r rirZ_addressrY_authkeyr_staterr _serializerr[Z _Listener_Clientr_ctx)r$r"rZrcZctxrrrr%s   zBaseManager.__init__cCs(|jjtjkstt|j|j|j|j S)zX Return server object with serve_forever() method and address attribute ) rrrrr;rJ _registryrrr)r$rrr get_servers zBaseManager.get_servercCs8t|j\}}||j|jd}t|ddtj|j_dS)z> Connect manager object to the server process )rZNrQ) r[rrrr9rrrr)r$rdrerrrrconnects zBaseManager.connectc Cs|jjtjkst|dk r,t| r,tdtjdd\}}|j j t |j |j |j|j|j|||fd|_djdd|jjD}t |jd ||j_|jj|j|j|_|jtj|j_tj|t |j|j|j|j|j|jfd d |_dS) z@ Spawn a server process for this manager object Nzinitializer must be a callableF)Zduplex)rfr5:css|]}t|VqdS)N)r:)rirrr sz$BaseManager.start..r?r)r5 exitpriority)rrrrr;rC TypeErrorrZPiperZProcessr _run_serverrrrr_processrZ _identityr*rrnrr1rr Finalize_finalize_managerrrK)r$ initializerinitargsreaderwriterrrrrrns(       zBaseManager.startc CsN|dk r|||j||||}|j|j|jtjd|j|jdS)z@ Create a server, report its address and run it Nzmanager serving at %r)_Serverr0r"rr rrz) clsrXr"rZrcrrrserverrrrrs zBaseManager._run_serverc Osd|jjtjkstd|j|j|jd}zt|dd|f||\}}Wd|j Xt ||j||fS)zP Create a new shared object; return the token and exposed tuple zserver not yet started)rZNrL) rrrrr;rrrr9rr)r$r!r5r6rr#rrrr_create%s  zBaseManager._createcCs*|jdk r&|jj||jjs&d|_dS)zC Join the manager process (if it has been spawned) N)rris_alive)r$timeoutrrrr1s   zBaseManager.joinc Cs.|j|j|jd}z t|ddS|jXdS)zS Return some info about the servers shared objects and connections )rZNrO)rrrr9r)r$rrrr _debug_info:s zBaseManager._debug_infoc Cs.|j|j|jd}z t|ddS|jXdS)z5 Return the number of shared objects )rZNrP)rrrr9r)r$rrrr_number_of_objectsDs zBaseManager._number_of_objectscCs,|jjtjkr|j|jjtjks(t|S)N)rrrrrnrr;)r$rrr __enter__NszBaseManager.__enter__cCs |jdS)N)rK)r$exc_typeexc_valexc_tbrrr__exit__TszBaseManager.__exit__cCs|jrtjdy,|||d}zt|ddWd|jXWntk rRYnX|jdd|jrtjdt|drtjd |j|jd d|jrtjd t j |_ y t j |=Wntk rYnXdS) zQ Shutdown the manager process; will be registered as a finalizer z#sending shutdown message to manager)rZNrKg?)rzmanager still alive terminatez'trying to `terminate()` manager processg?z#manager still alive after terminate)rr rr9rrrhasattrrrrrr_address_to_localr)r r"rZr'rrrrrrWs.         zBaseManager._finalize_managercCs|jS)N)r)r$rrrwszBaseManager.Tc sd|jkr|jj|_dkr"t|p0tdd}|p@tdd}|rxHt|jD]8\}}t|tkstt d|t|tksTt d|qTW|||f|j<|rƇfdd} | _ t || dS)z9 Register a typeid with the manager type rN _exposed__method_to_typeid_z%r is not a stringcs`tjd|jf||\}}||j||j|d}|j|j|jd}t|dd|jf|S)Nz)requesting creation of a shared %r object)managerrZr)rZrS) r rvrrrrr"r9r#)r$r5r6rZexpproxyr)rr!rrrEs  z"BaseManager.register..temp) __dict__rcopy AutoProxyrrrrr:r;r*setattr) rr!rCrrr create_methodkeyrrEr)rr!rregisterys     zBaseManager.register)NNrN)N)NNNNT)r*r,r-r.rrJrr%rrrn classmethodrrrrrrr staticmethodrpropertyr"rrrrrrs*  $    c@seZdZddZddZdS)ProcessLocalSetcCstj|dddS)NcSs|jS)N)clear)rrrrrsz*ProcessLocalSet.__init__..)r register_after_fork)r$rrrr%szProcessLocalSet.__init__cCs t|ffS)N)r)r$rrr __reduce__szProcessLocalSet.__reduce__N)r*r,r-r%rrrrrrsrc@seZdZdZiZejZdddZddZ fifd d Z d d Z d dZ e ddZddZddZddZddZddZdS)rz. A base for proxies of shared objects NTFc Cstj8tjj|jd}|dkr:tjtf}|tj|j<WdQRX|d|_|d|_ ||_ |j j |_ ||_ ||_t|d|_||_|dk rtj||_n"|j dk r|j j|_n tjj|_|r|jtj|tjdS)Nrr)r_mutexrrr"r ZForkAwareLocalr_tls_idset_tokenr#_id_managerrr[r_owned_by_managerr rYrrirZ_increfr _after_fork) r$rrcrrZrrR manager_ownedZ tls_idsetrrrr%s*      zBaseProxy.__init__cCsdtjdtjj}tjjdkr4|dtjj7}|j|jj |j d}t |dd|f||j _ dS)Nzmaking connection to managerZ MainThread|)rZrM)r rvr rirr`rrrr"rr9rr)r$rrrrr_connects  zBaseProxy._connectc Csy |jj}Wn6tk rBtjdtjj|j|jj}YnX|j |j |||f|j \}}|dkrp|S|dkr|\}}|j j |jd } |jj|_| ||j|j |j|d} |j|j|jd}t|dd|jf| St||dS) zW Try to call a method of the referrent and return a copy of the result z#thread %r does not own a connectionz#RETURNz#PROXYr)rrZr)rZNrS)rrrr rvr`rrrr0rr1rrr!rr"rrrr9r#r2) r$r4r5r6rr7r8rrrrrrr _callmethods,      zBaseProxy._callmethodcCs |jdS)z9 Get a copy of the value of the referent z #GETVALUE)r)r$rrr _getvalueszBaseProxy._getvaluec Cs|jrtjd|jjdS|j|jj|jd}t|dd|j ftjd|jj|j j |j |j oj|j j }tj|tj|j|j||j|j |jfdd|_dS)Nz%owned_by_manager skipped INCREF of %r)rZrRz INCREF %r )r5r)rr rvrr#rr"rr9rraddrrrr_decrefrZ_close)r$rr'rrrr s zBaseProxy._increfcCs|j|j|dks |jtjkry2tjd|j||j|d}t|dd|jfWqt k r}ztjd|WYdd}~XqXntjd|j| rt |drtjdt j j |jj|`dS)Nz DECREF %r)rZrSz... decref failed %sz%DECREF %r -- manager already shutdownrz-thread %r has no more proxies so closing conn)discardr#rrrr rvr"r9rrr`rrrr)rrZr'ZtlsZidsetrrrrrrr s    zBaseProxy._decrefcCsHd|_y |jWn0tk rB}ztjd|WYdd}~XnXdS)Nzincref failed: %s)rrrr r)r$rrrrr9s  zBaseProxy._after_forkcCs^i}tdk r|j|d<t|ddrB|j|d<tt|j|j|ffStt||j|j|ffSdS)NrZ_isautoFr) r rrr RebuildProxyrrrr)r$r6rrrrAs    zBaseProxy.__reduce__cCs|jS)N)r)r$memorrr __deepcopy__NszBaseProxy.__deepcopy__cCsdt|j|jjt|fS)Nz<%s object, typeid %r at %#x>)rr*rr!r#)r$rrrr+QszBaseProxy.__repr__c Cs4y |jdStk r.t|dddSXdS)zV Return representation of the referent (or a fall-back if that fails) r+Nrz; '__str__()' failed>r)rrr)r$rrrrAUs zBaseProxy.__str__)NNNTF)r*r,r-r.rr ZForkAwareThreadLockrr%rrrrrrrrrr+rArrrrrs (   cCsttjdd}|rT|j|jkrTtjd|d|d<|j|jkrT|j|j|j|j<|j ddopttjdd }|||fd|i|S) z5 Function used for unpickling proxy objects. rjNz*Rebuild a proxy owned by manager, token=%rTrrRZ _inheritingF) rr rir"r rvr#r_r]pop)rFrrcr6rrRrrrrbs   rc Csrt|}y |||fStk r(YnXi}x|D]}td||f|q4Wt|tf|}||_||||f<|S)zB Return a proxy type whose methods are given by `exposed` zLdef %s(self, *args, **kwds): return self._callmethod(%r, args, kwds))rrexecrrr)rr_cacheZdicmeth ProxyTyperrr MakeProxyTypews   rTc Cst|d}|dkrB||j|d}zt|dd|f}Wd|jX|dkrX|dk rX|j}|dkrjtjj}td|j |}||||||d} d| _ | S)z* Return an auto-proxy for `token` rN)rZrNz AutoProxy[%s])rrZrRT) r[r"r9rrr rirZrr!r) rrcrrZrrRrrrrrrrrs    rc@seZdZddZddZdS) NamespacecKs|jj|dS)N)rupdate)r$r6rrrr%szNamespace.__init__cCs^t|jj}g}x,|D]$\}}|jds|jd||fqW|jd|jjdj|fS)NrHz%s=%rz%s(%s)z, ) rrr startswithrDrr)r*r)r$rrErrrrrr+s zNamespace.__repr__N)r*r,r-r%r+rrrrrsrc@s8eZdZd ddZddZddZdd ZeeeZd S) ValueTcCs||_||_dS)N) _typecode_value)r$rrlockrrrr%szValue.__init__cCs|jS)N)r)r$rrrrsz Value.getcCs ||_dS)N)r)r$rrrrrsz Value.setcCsdt|j|j|jfS)Nz %s(%r, %r))rr*rr)r$rrrr+szValue.__repr__N)T) r*r,r-r%rrr+rrrrrrrs  rcCs tj||S)N)r)rZsequencerrrrArraysrc@s8eZdZdZddZddZd d Zd d Zd dZdS) IteratorProxy__next__r0throwrcCs|S)Nr)r$rrr__iter__szIteratorProxy.__iter__cGs |jd|S)Nr )r)r$r5rrrr szIteratorProxy.__next__cGs |jd|S)Nr0)r)r$r5rrrr0szIteratorProxy.sendcGs |jd|S)Nr )r)r$r5rrrr szIteratorProxy.throwcGs |jd|S)Nr)r)r$r5rrrrszIteratorProxy.closeN)r r0r r) r*r,r-rr r r0r rrrrrr s r c@s2eZdZd ZdddZddZd d Zd d ZdS) AcquirerProxyacquirereleaseTNcCs"|dkr|fn||f}|jd|S)Nr)r)r$Zblockingrr5rrrrszAcquirerProxy.acquirecCs |jdS)Nr)r)r$rrrrszAcquirerProxy.releasecCs |jdS)Nr)r)r$rrrrszAcquirerProxy.__enter__cCs |jdS)Nr)r)r$rrrrrrrszAcquirerProxy.__exit__)rr)TN)r*r,r-rrrrrrrrrr s  r c@s4eZdZdZdddZd d Zd d Zdd dZdS)ConditionProxyrrrpnotify notify_allNcCs|jd|fS)Nrp)r)r$rrrrrpszConditionProxy.waitcCs |jdS)Nr)r)r$rrrrszConditionProxy.notifycCs |jdS)Nr)r)r$rrrrszConditionProxy.notify_allcCsh|}|r|S|dk r$tj|}nd}d}x6|sb|dk rP|tj}|dkrPP|j||}q.W|S)Nr)timeZ monotonicrp)r$Z predicaterr8ZendtimeZwaittimerrrwait_fors   zConditionProxy.wait_for)rrrprr)N)N)r*r,r-rrprrrrrrrrs  rc@s2eZdZdZddZddZd d Zdd d Zd S) EventProxyrorrrpcCs |jdS)Nro)r)r$rrrroszEventProxy.is_setcCs |jdS)Nr)r)r$rrrrszEventProxy.setcCs |jdS)Nr)r)r$rrrrszEventProxy.clearNcCs|jd|fS)Nrp)r)r$rrrrrpszEventProxy.wait)rorrrp)N)r*r,r-rrorrrprrrrrs rc@sNeZdZdZdddZdd Zd d Zed d ZeddZ eddZ dS) BarrierProxy__getattribute__rpabortresetNcCs|jd|fS)Nrp)r)r$rrrrrp szBarrierProxy.waitcCs |jdS)Nr)r)r$rrrrszBarrierProxy.abortcCs |jdS)Nr)r)r$rrrrszBarrierProxy.resetcCs |jddS)Nrparties)r)r)r$rrrrszBarrierProxy.partiescCs |jddS)Nr n_waiting)r)r)r$rrrrszBarrierProxy.n_waitingcCs |jddS)Nrbroken)r)r)r$rrrrszBarrierProxy.broken)rrprr)N) r*r,r-rrprrrrrrrrrrr s   rc@s(eZdZd ZddZddZdd Zd S) NamespaceProxyr __setattr__ __delattr__cCs0|ddkrtj||Stj|d}|d|fS)NrrHrr)objectr)r$r callmethodrrr __getattr__ s   zNamespaceProxy.__getattr__cCs4|ddkrtj|||Stj|d}|d||fS)NrrHrr)r rr)r$rrr!rrrr%s  zNamespaceProxy.__setattr__cCs0|ddkrtj||Stj|d}|d|fS)NrrHrr)r rr)r$rr!rrrr*s   zNamespaceProxy.__delattr__N)rrr)r*r,r-rr"rrrrrrrsrc@s*eZdZdZddZddZeeeZdS) ValueProxyrrcCs |jdS)Nr)r)r$rrrr3szValueProxy.getcCs|jd|fS)Nr)r)r$rrrrr5szValueProxy.setN)rr)r*r,r-rrrrrrrrrr#1sr# BaseListProxy__add__ __contains__ __delitem__ __getitem____len____mul__ __reversed____rmul__ __setitem__rDcountextendindexinsertrremovereverser__imul__c@seZdZddZddZdS) ListProxycCs|jd|f|S)Nr/)r)r$rrrr__iadd__AszListProxy.__iadd__cCs|jd|f|S)Nr4)r)r$rrrrr4DszListProxy.__imul__N)r*r,r-r6r4rrrrr5@sr5 DictProxyr rrrhas_keypopitem setdefaultrIterator ArrayProxy PoolProxyapply apply_asyncrimapimap_unorderedrmap map_asyncstarmap starmap_asyncrZ AsyncResult)r?rCrEr@rAc@seZdZddZddZdS)r=cCs|S)Nr)r$rrrrdszPoolProxy.__enter__cCs |jdS)N)r)r$rrrrrrrfszPoolProxy.__exit__N)r*r,r-rrrrrrr=csc@seZdZdZdS)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)r*r,r-r.rrrrrms QueueZ JoinableQueuergraRLock SemaphoreBoundedSemaphore ConditionBarrierPoolrrF)rr)r)rrr)NNNT)T)r%r&r'r(r)r*r+r,r-rDr.r/r0r1rr2r3rr4)r&r'r(r r)r-rrrr8rrrr9r:rr)r)r(r-) r>r?rr@rArrBrCrDrEr)I__all__rsr`rZqueuerrrrcontextr r r r r rrrZ view_typesrr Z view_typer rr9r2rr<rGrIrJrrdreZ XmlListenerZ XmlClientr[rrrrrrrrrrr r rrrrr#r$r5r7rr<Z BasePoolProxyr=rrFrgrarGrHrIrJrKrLrrrrr s             ; ] 4