ÿØÿà JFIF    ÿÛ „ !.%+&8&+/1555$;@;4?.451 4,$,44444444444414444444444444444444444444444444444444ÿÀ  á á" ÿÄ     ÿÄ ?    !1AQaq"2‘¡±ÁðBRbrÑá#‚’¢²3S CñÿÄ   ÿÄ !    !1QAa‘2ÿÚ   ? 5˜Z¯V¦cø)›t/? z¨±>Õ5€¶‹Á¤·¼z¼Ü¬+ñ®v¤¨_ˆR­BFn©—˜ý®ç̝P8gýt·ÉSTŦˆìät?þé¼íìN/Þa)ì–í6ô… Ï¿øÃj´¿KÇü]ÿ ªô¹-eKànëÕHTx}ýSÜ›ÿ ”7Ø×&µ<¦  ¥ÑO¶[Ù¯ä¨ÞÃÿ PZ-¬;#õ|•oaÿ ©CìÞz3˜öː/¤­ñTûIØ}š^ mÓ%ªxˆ¥ÉŸu=Z+ISe¿45™¼u;ú&WØ÷€æßQ™®{|íx*TC“#ZŠìZ§²‹ 6pv…³¿¡äª*áZÐ%ÒOáˆo"x«OHk w±æ+¬V(kMúŸ5Vö«$ ÁrÏbàb57/luR ¸ÑÛj Òµì`Мq­û žICÀÊ•©4€Âcà¨Ï€O´<èÐ:›ù(Ë^L8þ‘ÍÌ#¸Ð_Ì©ÙK(Öz 4¬û+¸;ü’V’84‘¬ÃŽ:[â‡ÔÌáõp¢~§ªlæ£ö{®G>J¼"°‡7¯ÆÉèßû ‹É‹§ÁòÃýâßî ^ƾÙõ‹×óH#«LP½ïX=xÑÍ$|W?•~• îëÔ©ª‹ {ÝT…Kÿ ”hûâá)J*ö˜–ÔU;iÇ€/ ÆþjóZ\ýwØ=Ìm ºèËL9 ýèÆð/¨’¥öo=nË.%Îì ŽÕ¯È|{Oj²ƒE6e/ßdÄõ²Ìâ1O®ò×TsəԸhOMýíMˆ¿¼H˜l²,7Â¥#MF/Úf°Ö½± ¸–dr‹NýÊ íjqx{œÉ ä-È ¦ øÄër¨q°ð †nцýÑÄÆ’mä…n<0È™;ÁÝá¯ÁZƒ7FÀmì­ É&9ˆîéi¶ùN§Y• ÃZãAâ?•‡©‰ , ó¾IŸŠc1 4â&y­&pŠ­6;M À 0¹qç»p.á …ŸÅáK@%6·y6ƒ‰3?”úºŽ‰éX5ªPT §µ!=Mž«Ú½‹ÅgÂSâÉaþÓoö–¯ÁÔìR>5éÿ üs¶ÆUcÌ kÇR ]ÿ ù¬¼«VŽ;Â|‡~¢¦”ÏŰæ {L™Õ°Óv¹ò¸írޡעCÃ!íVÕ {¶»sŒNPg/ "uÕbkm²“$ďå¿é¹§°½æz¯6 †s¿!s–wÚÝ“™Œ °.ûj>·+™Òa…©Œ&rÝÎtÛë긪Ît’LAVp%c Úý[ÄzJ¾ÇàXXç@˜ó<êL]·T˜¾¥1Ó©V‡g´æ½¦Ý@¹óø!_@´ÞâSÁ —S3™•& ]@JHÚý©ZŽ €×æÔr»Áf!‡yÞ4Mv*èÓã_{‘åóUuљØ«Oïé*®EvÑ Œ÷‡U \"㪒ÍK+À 4“M¡ï:0¥5í!'<@î´”>Ç»&Z–ïCCV˜Ì5Šo&îhè.žû |ÓK©h$s6KìŒëã)¹hI¦GïOåóI;ììü#É$Š0…Ææ¥TØ.5­¾gn´ “ÂÖ\:hœ89G)J@„}œ:’Ò{/Š"¦_Æ×7Æ3VÇŠÊa]ÚŒÙ€Ä–=®uÁßâACZƒ§§£ Qnâ:«,×{tyø¬iÛcœÜÄ€H½ÄÍCk´÷šß .W'b¤Íåh]÷€=,Žv×cÚEÚHXJX¶îo¨FÒtèöŸ>ªª6[J®Fµ£sGÁeqõfe\íjÒÐïÄÐGˆe1Ø‹.Ø”‘Ëuø Y­ˆÜ ŽG|zùªüMpDnQWÄ”%JŠ™)â*p@Örš«ÕT2Ð%ˆG#ª„ ·¤!°ŸOTÂT¸aÚ%4&h™LµšØüÐ.F¿²ÐÞ_Ç‚¾ÅÃaÜ÷09Æ q€öy˜v‡85õN÷]¬äѼóS{°_MެúÔ#°Ç¸0åÞè2ëôPcvÆw9®ií1Ä8F™˜à‰´+‰Ik1òÝ7“Ñ×ÒsÝ\x‚h`ÞÑ`ó"|µEcý£n˜h`}GÞ !±ù²Ápü²ß6 0ïi󜵩SÈÇ7˜-ÕURO˜¦´f$ªž-Í6(œ}<„ éc øs]ŽŽ„*—¾ ìdŽ„)méª\¿êÎIg¾ØÞ~I#C/¼¼´EÁÈŽi8“©õådô·>euä ƒ'Ê×लR1ÉJE1ÐAát`t;ÇР%Ý<‡¥„ÍÆ`×Oyó)õiI€ñQaŸ4Ûù\áàaÃÔ¹HÃu¹*k€¦<„e S‡&õÏ B!ŽhüÞ`yj}mªf×\¿ Ç~æ­9‡û\՞Ǖg²1Žû5V7 !àöšm° c`ܬøÇìµÒ'P"?…´Ö,"§^•õލsÔ)6˜sæéÍR¼ ò|Sl”‹7 nPW Gòú÷½§O¯‡„l¡kSÞŒr½PÊ@æ¢pŽ-mÿ #Ÿ˜Àº¶Áä¦;ïÔæ$1££`“Õ>„—·ž)ßð³ñ#Ï Ô$¶œ‰ÊE‹À;÷º ¯«P:Ñ”8–IÊtpÞ3ª“>ê“þës4ò2OÏÕ­±zô†Õ§‰.÷ä¸;¿˜“'œ›žª}«Œ{ª±Ì 9ÔóÞÕ‡0 $íWV3Üì¬ —@kÝ4@¿r¼±½¬™›?øØæ´'Áé®CË3-g$˜ö‡×auÚi´Žp/êÛ æF›Ú2v‹ã¿¿,nB1̨ƃqÞa5͝@&Æû“él÷ \C²½UÍc ¯k×¢U ÖéQå™—-r wô ÞÏ<Ò=&=ÿ Ôê Òêˈt,i—;LîÜ á¸*ÚÃ1$êL•LÍ <É)ýÐà’ ;F™{ƒ™˜€&'}‚ãÄK`¡ÞT@I;®žZóè‚s’7®°›+§O­Åq©é»²9<Ô J ¼9O’HL»Ùïì¸rk¼Ž_ý‘TŸu[²ßÚŒ·ü÷B%¯E ŸÔX5êO´ Ç•€’I0 ÉJX` ñ¹õ%;µŸD‘«´€àwÒ™U ûئžÖö\×®×´8 ½‡ºÐÆÓ§?Àkmœ=;d5*@-ì0F Rªýš[Ü6âö̃ڸr*KA9· u*µæ£?U¸Âêí†8@¦X4 e-ò„0s{ HâUpU?¼mñRa°®a%Ð'tÉ×’\¾ÊÉ]t›h>·(Ë@R¼¡Ãt h}’O÷au<+nT…Ö…MӐ??Óe95 q>í/;&JSû °¯ÊéÞ øƒ*Ã2½Ài&:nôUl=¾¿5eˆ3”ñc|Ú2V”>„»&eE;«ÚäC p¢Û úy 9š[ŒÌx¼擼A&DåÒ¯ˆ¤ÀÌ;"˜ ÏQä¸åhÊ}Ûq«Û0WžÒ|»€ø®öCm5•\ÇÀ§Pe3£]0ÃàLDÉ‰1øªxjgwT‚÷¿LΨK‹›ùs—xˆÜ±µ kæ¸f‰‰ÜGk/LÛØ6d9ò¶ùA{ƒA3š/¬D¬khÓk‰`˜"㯒r¿±Óã jx‡°e}<Ñø\3y:'À•/h½Í€Ç4~g ?Û(¼]v‘ªlKÎâ~?O‚W%{Ì:“'©úNq¾›úo(X’¥¯ˆ nFê{Ç€ü?º'ë ø‹ì Þ09ŒÌç9Æ —ËC`j@ÓÄ(+a‹un¸#ÂꟋ{K`‘ÑÍÍ'à´»/Û,KW;Þ4²þð ï Nm|~fGÏ(…³Ã)«1ö­Õ ¥‡¨©ƒÃ™ü-s=à=U66Ï«Ýc蓦W¹íž®›nÔ%êÇìŒ<#Ü×84ån®Ð ÒåOC` ñânÑs‡¢ç 1õ%Îhì½Ã½® e:ݼUZo™`  ÅZŸŒÊ«ê1ÏÄo$q¹Þ€©ˆhÐÉä¯ñ[!…Ú˜àJ:x2$Íß&PåT£6ç— ‡Í*4Ýšçjÿ ‰É nófÐ ó(L5C•åÆ\rMÒ@ò }y-W}™üýVù—ú¢=Ù”c®‘< M ž ´Phr ¦©TD ‘ù.$´÷O‡‘V2Æò.=IUŒ=ž‡â¬i™aþÓåÙ?òUø'ØÖ•.~* šTŒ!•-×áºTâ®ä#õü'´ eýlYÅÓeÕKÂrT"CÚ@u!Óxƒ{š3€}1¿(r}%«nËamjÑ%ÑNEò v ˜à  σöK³,*º.àzù¨™Ó ÚçâU¦*¿ 9{%Ö¹ njûdaXöb) kÛÆ±ûÓ\°M7ˆÂ=û›ç¿Ã‚­V»Cg–8ÙêE- j)k$º`Ã-ùEýeBÆÇ]c¡°ñty&Òd0nõ'¡W+ƒ*|–øµFa\GQªEAÔp5\Ǽ·¼Ç8·õ -â§Ú[ ‡ uZeÖ 3}×d'+¹:ð+K†Û®s!Ï$úe€<Û”x)1»a­¡LC]¸µík…ÚàA»AYº{†ªS[¦5HÒ7ù --,ísòDØ€èk ÞÀîÜ ò@â( ËNˆë›4ô½•/¦o‡€Û7 ê•ÆêòðÜy'Án½µ á˜ݦ ndeo…[ì¶Ê,¥R³Ä=À±—–ß;£™´ñSâ*g§”ïaið‘Jå~™ÓÞ ß³Õ¢»8x埒²52>AÊb&-÷\7´éÄù€T˜,w;3{ï˜k…à¹ÄqÀ«œ{€\ ˆ¾[´¨јr &Úé„Ívˆ±8†¿]|¬ņ4I×pÞS1ÈÖz‰#Ìv‡G!YNògñ:màTz¢Ý1ô©^O=~ë|5Bã™ç•¼µõ•bÆ@úÕS¬ÈŒ#¬zünrŸ û” Z²•èðV"ÁHÚý©wÝ €7¼Ìu1hÑa3Éä û f$o¿É ™Ú›ÝçnpÒ3äÌ3†Í§,Äï]$‰/pê †«À¼¸e9­Æê_C]žƒ·ý·frÁN«, E=›Çq -‰öŒ:aÏ¿±í&£Í:-} 84‘ÿ eƒQÑeëSsuiA ³g㟥ú£?ÿ ʼn*”“÷aühe:ÊWa@ÒÞk±eØ] F Ô—r.åä˜ @ö¥ªZoÐýYL·¥S²G/‡ñ <~*ZÆ´è>JlòàÛÆ½ÿ 窘ìGN¢:I®KšJp/`íIÁÀõ#Ä-€ö­šµŒoF4|ÆQØÆ@Ì|£Ô…¢À{9˜è½Üó›€ôYÒÎYsið;ís¤€à²ˆ‚4qÉVŒI$ ‰"° æµ8cXGjœˏ¡Aâý•ËÜ¢ûï e·çLx']á"oÅÎê3¯Ç—¹”ó0nå‚âg{Œñ> S´˜îè°g238‚ãköÝfÚd´6Ò€;ò÷±¢™¼›º ¢Æ'¥Ðx'e¬ç ]bÈÆV¢ó‹kýBO ðÊâ$Ÿ!×T 3Mýמ žìٍàÌü‘8÷€àæØ8æ©6‰©L´«…oãpð„~Çk‰!ñ;‹”ÛžÍ àž±z Ÿôû øŸÝužÏ;ÿ #|u6™Þ¬ÚˆÐõA4¶â|ôl|Ê2ŽÇ¤ÝÅÇY.<#Aí.k§hóF‚”Y; M½Ö4hŸ4&›­¿tès´%FìL¥£Ãk‰ÇT¤haÁ¤ÚxfÉ`ÑìË›>i 3t‚:,–+^÷´–{Û–Nxi"x‘Ûg î¨>¥Õ܁ùZH,2Û“:8xÊ¢Çí9.É-Ìâã-=çjwµS˜dütžçwýGòú®®ûº_ˆýx$–¡ãøO EÚÛÏ÷R„×w+3£Á£öUMyR²¹âŒ°š›¸Ñãò9§Ó_Dl+Ùßc›úšGÅÌc†Ž!Ko=¶.‘Îÿ c²(2®V mª.ÿ ¹B›¹å ù„öŸSV>™ü¯$y:G¢Z×àøúdî¹û­·ýÇ´:•c LÍõi_‹ö+ÎæGÊè>OŠ•äž´§Þ{X}¨1ÚTc›»Qþ•êô°t¿OP?eæ~É{5]•ÙR£r5†nZ\ã@ &îJõ ¾àC°þV>fé¥/ü5ñÊIº_é5 ;e­h<@ Ä&æÃëE%;X,ÒãÆÞ`Oò¦kŸm#˜!ÀyÄ¢| óLšò¥Ä` ¶R=|ÈCâh5ò3DˆïF†ðÒ#ÅìÛœ?¸yhBãœí ZxßÎÄhºRK„`Þödvײ™ÀÈÑÒgŒuY w³%†ƒÓzõ ÖÏp‚dH®¦A´ù§»ÓÇMæ~)ˆð‡û:ù&Ä •vGD´À n ݇¼Ö8Fö óáà£~Ë¥x`oK|Ä?fxiØü%pìR>éò+Û±éÎ>núlFŤ'tq8LZÏvÃ?„¡ß±È⽆¯³íü@x|PöUäèØã¡ð‚ŒAìÏ"vÍwóŸÍ{ ý0.z È•Ö{,N¡£¡ŸKÕÙž>Ýœþ ÍÀ°<×EA!Å‚D™IúOÍ¡>ôG}Â` ÍßkÜL™Ž Þð™ {IøF²¹òQ3&!ÃÂÞz.d&Ï-sH¸,Ôõ˜ŽP€ 77ˆÝ¼ÊëÜw =cÕ Ú,ØÐ5ÎYÐ)ì´öœgŒ[¤ßv㙑8心>h]§µháYš£²ºÑ.{Ï7Sð•?´~×SÃKýJÛ˜ ™Íäiúu<µX¶1õ^kâçIÑ£sZ4h>j*ÔšD:4­¿_ ÷¸ Õxæÿ ¸?Mù _•­ÊÐ ä ÷ý ÑwL œ­ïnTkÛUÍN©ë:¦fV ¶ÜÔÜMªÅâA½–¿R×TXš-%iTÊT•‡Ù‚JôϐZxWÑè‰f‰òG º ×Õû2aZ7OU3[“×AT–ÞŒ…-‘¤”Ì ì&(ˆ¿­•ƒkï’:ðY¦W‘ Å)“†‘˜³Åtcø˜ñTÂwÚÇ4|üLÇªí–v- qˆèU qPE.†â‘˜µ Æ,ÐÅs]8¾„oúÑ i>ÜxxÈó)ƒ ´æÁâØ$À‰vžŸf$Ž |ãw;ÀÁIJ»b` {¦Ó¤Ú$©YÀ‘n@Óïž«9J¼êG m¤ ܯ¹ÌW4€ÐÒÅÛ‡#褕Ÿn-?í|с¥÷Ú¹¬'´ÞÜ9ÓK `hê£SÄSà?7—Wí_´…óB›»:=Ãïq`<8ñÓŒÑlú2d¬ê³£hÖ[l|$vÝro~'R®‰§°ñmY ͧäP |PUª¹·:3Œ[Û{Xÿ ºâ@‚W–Äé u‚ ¯´*=íή.pûÒdt @G‰¬ s¸ ëÉücr ÞæÑ¨Ê@>¤¢Ö±. Þ'¯°ÌME[YéïĵÂCå½ Ué©Áû'Ê9%eÔðNU”ë‘ÌsD3/®+UI˜9h.WC”빓$#:pz:YÓ ¿xž* ³$Í +$kñAŠ‹†¢ Uê>¸)_š¬÷©ßAÂÔb9ÇU ¯¾á•9¯ÏÏ÷O÷¼¼Fähal1‰3Ì[Ïr•´UCksNÐ] R‘¸¥H+§Šé†c©vÖÞ0iÓ76s†î!§=ß ¼~Ô'°Ãmäoäš³ªøi1úÉ)³yV8 CLÄØÁ‘WYïi€H6ÖÑiámø^ÈY´°Ñ7¥Û*—Ñ©L«Qƒï—Ùrÿ ›£Ð*š¸ˆL©ˆ$ˆ ÷¾D§9È®«qbqC)–ˆïv´çñsÑVT­Ø, <àïºÀO«Jý·õ àfPìð .wFšir´þ’2_Y *Æ€x\« ì€9š@ Ž|F⇥ˆkZ@hÖÄ0t¿-<“‹qµ¾*ZL¤Ú)&BJpÓF5=$„at*Zš$’ÑtdûÝRI1 2މ$€$I$#‰SÞ’Hë¬ï;Á$¡t$’`<(ñÇt)$‡Ð.Êf¢X’Kt=Éé$‚ˆªè¢oÝëòI%Rgcª÷ŠyI%¡‰ÿ !ñ)´õ $¤ Ô’IIGÿÙ (is{gdZddlZddlZddlZddlZddlZddlZddlZddlZddl Z ddl m Z ddl m Z m Z ddlmZejZ ddlZddlmZmZmZmZn#e$rejdkrdZYnwxYwd Zd ZejZd Zd gZeed rd Zed gz Zejdkrd Zed gz ZefdZ dZ!dZ"dZ#dZ$GddZ%erGdde%Z&Gdde%Z'Gdde(Z)dd>d3Z?n#ddl@Z@ee@d4re@jAZBne@jCZBd>d5Z?ejdkr0d6ZDd7ZEejFe'eDd8ZGd9ZHejFe&eGdSd:ZDd;ZEejFe'eDdS)?)ClientListenerPipewaitN)util)AuthenticationErrorBufferTooShort) reduction) WAIT_OBJECT_0WAIT_ABANDONED_0 WAIT_TIMEOUTINFINITEwin32i g4@AF_INETAF_UNIXAF_PIPEc.tj|zSNtime monotonic)timeouts 1/usr/lib/python3.11/multiprocessing/connection.py _init_timeoutr;s >  g %%c0tj|kSrr)ts r_check_timeoutr>s >  a rc|dkrdS|dkr'tjdtjS|dkr>tjdt jt tfzdStd ) z? Return an arbitrary free address for the given family r) localhostrrz listener-)prefixdirrz\\.\pipe\pyc-%d-%d-zunrecognized family) tempfilemktempr get_temp_dirosgetpidnext _mmap_counter ValueErrorfamilys rarbitrary_addressr/Es 9  kt7H7J7JKKKK 9  &< " T--@-@A'BGIKKK K.///rctjdkr|dkrtd|ztjdkr-|dkr)tt|std|zdSdSdS)zD Checks if the family is valid for the current environment. rrzFamily %s is not recognized.rN)sysplatformr,hasattrsocketr-s r_validate_familyr5Ss |w6Y#6#67&@AAA |w6Y#6#6vv&& F;fDEE E#6#6 F Frc t|tkrdSt|tur|drdSt|tust j|rdSt d|z)z] Return the types of the address This can be 'AF_INET', 'AF_UNIX', or 'AF_PIPE' rz\\rrzaddress type of %r unrecognized)typetuplestr startswithris_abstract_socket_namespacer,)addresss r address_typer=_s}  G}}y g#  '"4"4V"<"< y g#  !B7!K!K y:WDEEErceZdZdZddZdZdZdZdZdZ e d Z e d Z e d Z d Zd ZddZdZddZddZdZddZdZdZdS)_ConnectionBaseNTc|}|dkrtd|s|std||_||_||_dS)Nrzinvalid handlez6at least one of `readable` and `writable` must be True) __index__r,_handle _readable _writable)selfhandlereadablewritables r__init__z_ConnectionBase.__init__usm!!## A::-.. . J JHJJ J !!rc@|j|dSdSrrB_closerEs r__del__z_ConnectionBase.__del__s# < # KKMMMMM $ #rc2|jtddS)Nzhandle is closed)rBOSErrorrMs r _check_closedz_ConnectionBase._check_closeds! < ,-- - rc2|jstddS)Nzconnection is write-only)rCrPrMs r_check_readablez_ConnectionBase._check_readables%~ 6455 5 6 6rc2|jstddS)Nzconnection is read-only)rDrPrMs r_check_writablez_ConnectionBase._check_writables%~ 5344 4 5 5rcf|jrd|_n|td)NFzbad message length)rDrCcloserPrMs r_bad_message_lengthz#_ConnectionBase._bad_message_lengths1 > "DNN JJLLL*+++rc|jduS)z True if the connection is closedNrBrMs rclosedz_ConnectionBase.closeds|t##rc|jS)z"True if the connection is readable)rCrMs rrGz_ConnectionBase.readable ~rc|jS)z"True if the connection is writable)rDrMs rrHz_ConnectionBase.writabler]rc8||jS)z+File descriptor or handle of the connection)rQrBrMs rfilenoz_ConnectionBase.filenos |rch|j* |d|_dS#d|_wxYwdS)zClose the connectionNrKrMs rrWz_ConnectionBase.closesB < # $ # t #### $ #s& /rc||t|}|jdkr|d}|j}|dkrt d||krt d|||z }n-|dkrt d||z|krt d|||||zdS) z,Send the bytes data from a bytes-like objectrBrzoffset is negativezbuffer length < offsetNzsize is negativezbuffer length < offset + size)rQrU memoryviewitemsizecastnbytesr, _send_bytes)rEbufoffsetsizemns r send_bytesz_ConnectionBase.send_bytess   sOO :>>s A H A::122 2 v::566 6 <v:DD AXX/00 0 d]Q  <== = 6&4-/011111rc|||t|dS)zSend a (picklable) objectN)rQrUrh_ForkingPicklerdumpsrEobjs rsendz_ConnectionBase.sendsN   ..s3344444rc||||dkrtd||}|||S)z7 Receive bytes data as a bytes object. Nrznegative maxlength)rQrSr, _recv_bytesrXgetvalue)rE maxlengthris r recv_bytesz_ConnectionBase.recv_bytess}    Y]]122 2y)) ;  $ $ & & &||~~rcH||t|5}|j}|t |z}|dkrt d||krt d|}|}|||zkr!t| | d| |||z||z|z|cdddS#1swxYwYdS)zq Receive bytes data into a writeable bytes-like object. Return the number of bytes read. rznegative offsetzoffset too largeN) rQrSrdrelenr,rvtellr rwseekreadinto)rErirjrlrebytesizeresultrks rrecv_bytes_intoz_ConnectionBase.recv_bytes_intosj   __ zH#a&&(Hzz !2333("" !3444%%''F;;==D&4-''$V__%6%6777 KKNNN OOAf0%}9:; < < <!                  sCDDDc|||}t|S)zReceive a (picklable) object)rQrSrvrploads getbuffer)rEris rrecvz_ConnectionBase.recvsS    $$S]]__555rc|||||S)z/Whether there is any input available to be read)rQrS_pollrErs rpollz_ConnectionBase.polls8  zz'"""rc|SrrMs r __enter__z_ConnectionBase.__enter__ rc.|dSrrWrEexc_type exc_valueexc_tbs r__exit__z_ConnectionBase.__exit__ r)TT)rNr)r)r)__name__ __module__ __qualname__rBrIrNrQrSrUrXpropertyr[rGrHr`rWrnrtryrrrrrrrrr?r?rssG " " " "...666555,,,$$X$XX $$$2222(555    2666#### rr?cDeZdZdZdZejfdZdZd dZ dZ dZ dS) PipeConnectionz Connection class based on a Windows named pipe. Overlapped I/O is used, so the handles must have been created with FILE_FLAG_OVERLAPPED. Fc&||jdSrrZ)rE _CloseHandles rrLzPipeConnection._closes L & & & & &rctj|j|d\}} |tjkr.tj|jgdt }|tksJn#|xYw| d\}}n#| d\}}wxYw|dksJ|t|ksJdS)NT overlappedFr) _winapi WriteFilerBERROR_IO_PENDINGWaitForMultipleObjectseventrr cancelGetOverlappedResultr{)rErioverrwaitresnwrittens rrhzPipeConnection._send_bytess' cdKKKGB ='222%< E855G"m3333   " 6 6t < < ## 6 6t < < #<<<<!8888s3xx''''''s>A B A77BB-Nc|jrd|_tjS|dnt|d} t j|j|d\}} |tjkr.t j|j gdt}|tksJn#| xYw| d\}}|dkr>>&  OPP PsgF?>BD1B--D10AF? %F?0F?1AF;F?(F;8F?:F;;F?? G+ G&&G+c|js#tj|jddkrdSt t |g|S)NrT)rr PeekNamedPiperBboolrrs rrzPipeConnection._pollEsI' -dl;;A>!CCtdVW--.. .rc|}tj}||t j|jd}|dksJ|*t||z|kr|t j |j|d\}}| d\}}|dksJ||ksJ|||S)NrrTr) rrrrrrrBr{rXrr)rErrrirleftrrbytess rrzPipeConnection._get_more_dataKs,,..C A GGCLLL(66q9D!8888"s3xx$'@'@((***&t|TdKKKGB0066KFC!8888T>>>> GGBLLNN # # #Hrr) rrr__doc__rr CloseHandlerLrhrvrrrrrrr s  #&-&9 ' ' ' ' ( ( ( Q Q Q Q@ / / /     rrceZdZdZerejfdZejZ ej Z ne j fdZe jZ e jZ e fdZe fdZdZd dZd ZdS) Connectionzo Connection class based on an arbitrary file descriptor (Unix only), or a socket handle (Windows). c&||jdSrrZrErLs rrLzConnection._closeb F4< rc&||jdSrrZrs rrLzConnection._closegrrctt|} ||j|}||z}|dkrdS||d}))NTr)r{rB)rErir remainingrms r_sendzConnection._sendlsNHH  dlC((A NIA~~abb'C  rctj}|j}|}|dkr]|||}t|}|dkr||krtt d||||z}|dk]|S)Nrzgot end of file during message)rrrBr{rrPr)rErkreadrirFrchunkrms r_recvzConnection._recvusjll !mmD++EE AAvv$$"N!"BCCC IIe    NI!mm rct|}|dkrktjdd}tjd|}||||||dStjd|}|dkr,||||dS|||zdS)Ni!i!Qi@)r{structpackr)rErirm pre_headerheaders rrhzConnection._send_bytess HH z>>T2..J[q))F JJz " " " JJv    JJsOOOOO[q))F5yy 6""" 3  6C<(((((rNcD|d}tjd|\}|dkr>|d}tjd|\}|||krdS||S)Nrrr)rrunpackrw)rErrirks rrvzConnection._recv_bytessjjmm dCLLNN33 2::**Q--CM$ 77ED  4'>>4zz$rcBt|g|}t|Sr)rr)rErrs rrzConnection._polls $ ! !Awwrr)rrrrr_multiprocessing closesocketrLrt_writer_readr(rWrrrrrhrvrrrrrr[s   0 < ! ! ! !!& % " ! ! ! !% % ))).    rrc^eZdZdZd dZdZdZedZedZ d Z d Z dS) rz Returns a listener object. This is a wrapper for a bound socket which is 'listening' for connections, or for a Windows named pipe. Nrc8|p|rt|pt}|pt|}t||dkrt |||_nt ||||_|$t|tstd||_ dS)Nrauthkey should be a byte string) r=default_familyr/r5 PipeListener _listenerSocketListener isinstancebytes TypeError_authkey)rEr<r.backlogauthkeys rrIzListener.__init__s#G= W(=(=#" 6.v66   Y  )'7;;DNN+GVWEEDN  z'5'A'A =>> > rc|jtd|j}|jr*t ||jt ||j|S)zz Accept a connection on the bound socket or named pipe of `self`. Returns a `Connection` object. Nzlistener is closed)rrPacceptrdeliver_challengeanswer_challenge)rEcs rrzListener.acceptsa > !.// / N ! ! # # = / a / / / Q . . .rcR|j}|d|_|dSdS)zA Close the bound socket or named pipe of `self`. N)rrW)rElisteners rrWzListener.closes6>  !DN NN      rc|jjSr)r_addressrMs rr<zListener.addresss ~&&rc|jjSr)r_last_acceptedrMs r last_acceptedzListener.last_accepteds ~,,rc|SrrrMs rrzListener.__enter__rrc.|dSrrrs rrzListener.__exit__rr)NNrN) rrrrrIrrWrr<rrrrrrrrs       ''X'--X-rrc |pt|}t||dkrt|}nt|}|$t |t st d| t||t|||S)z= Returns a connection to the address of a `Listener` rNr) r=r5 PipeClient SocketClientrrrrr)r<r.rrs rrrs ,|G,,FV  w    ! !:gu#=#=9:::G$$$!W%%% HrTc|rtj\}}|d|dt|}t|}n8t j\}}t|d}t|d}||fS)L Returns pair of connection objects at either end of a pipe TFrHrG)r4 socketpair setblockingrdetachr(pipe)duplexs1s2c1c2fd1fd2s rrrs  1&((FB NN4 NN4 BIIKK((BBIIKK((BBwyyHCC%000BC%000B2v rc &td}|r4tj}tjtjz}t t }}n!tj}tj}dt }}tj||tjztj ztj tj ztj zd||tj tj}tj||dtjtjtjtj}tj|tj ddtj|d}|d\} } | dksJt)||} t)||} | | fS) rrrrNTrrr)r/rPIPE_ACCESS_DUPLEX GENERIC_READ GENERIC_WRITEBUFSIZEPIPE_ACCESS_INBOUNDCreateNamedPipeFILE_FLAG_OVERLAPPEDFILE_FLAG_FIRST_PIPE_INSTANCEPIPE_TYPE_MESSAGEPIPE_READMODE_MESSAGE PIPE_WAITNMPWAIT_WAIT_FOREVERNULL CreateFile OPEN_EXISTINGSetNamedPipeHandleStateConnectNamedPiperr) r r<openmodeaccessobsizeibsizeh1h2r_rrrs rrrsb$I..  (1H)G,AAF$gFFF2H*FFF  $ X <<  12  %(E E    vvw; L  VQ g.C  (', ' -tT   -bTBBB //553axxxx B 0 0 0 B 0 0 02v rc&eZdZdZddZdZdZdS)rzO Representation of a socket which is bound to an address and listening rctjtt||_ tjdkr0|jtjtjd|jd|j ||j ||j |_ n(#t$r|jwxYw||_d|_|dkr>t#j|s*t#j|tj|fd|_dSd|_dS)NposixrTrrargs exitpriority)r4getattr_socketr(name setsockopt SOL_SOCKET SO_REUSEADDRr bindlisten getsocknamerrPrW_familyrrr;Finalizeunlink_unlink)rEr<r.rs rrIzSocketListener.__init__FsF}WVV%<%<==  w'!! ''(9(.(;Q@@@ L $ $T * * * L  g & & & L   ( ( ( L4466DMM    L     " Y  t'H'Q'Q =biwjqDLLL DLLLs B,C%Dc|j\}|_|dt |S)NT)r4rrr rr rEss rrzSocketListener.accept_sE!%!4!4!6!64  d!((**%%%rc |j|j}|d|_|dSdS#|j}|d|_|wwxYwr)r4rWr?)rEr>s rrWzSocketListener.closedsr  L   \F!# "!\F!# "s 9AN)r)rrrrrIrrWrrrrrBsP    2&&& rrc8t|}tjtt|5}|d||t |cdddS#1swxYwYdS)zO Return a connection object connected to the socket given by `address` TN)r=r4r3r connectrr )r<r.rBs rrrns' " "F // 1 1&Q d '!((**%%&&&&&&&&&&&&&&&&&&sA BBBc>eZdZdZddZd dZdZedZdS) rz0 Representation of a named pipe Nc||_|dg|_d|_t jd|jt j|tj|j|jfd|_ dS)NT)firstz listener created with address=%rrr0) r _new_handle _handle_queuerr sub_debugr=r_finalize_pipe_listenerrW)rEr<rs rrIzPipeListener.__init__su#DM"&"2"2"2">">!?D "&D  N=t} M M Ml:($-8qDJJJrFc .tjtjz}|r|tjz}tj|j|tjtjztjztj tttj tj Sr) rrrrrrrrrPIPE_UNLIMITED_INSTANCESrr r!)rErHflagss rrIzPipeListener._new_handlesp.1MME ?>>* u)G,II!"0'7,gl  rcd|j||jd} t j|d} t j|jgdt}n.#| t j |xYw | d\}}|dksJnR#| d\}}|dksJwxYw#t$r }|j tjkrYd}~nd}~wwxYwt|S)NrTrF)rJappendrIpoprr%rrrrrrrPr ERROR_NO_DATAr)rErFrresr,rrs rrzPipeListener.acceptsT   % %d&6&6&8&8 9 9 9'++A..F $-fFFF $!8 E855CCIIKKK'///  33D99FAs!88888 33D99FAs!88888888   :!66676666  "&)) )s6C6!BC+B,,C"C36 D DD cbtjd||D]}tj|dS)Nz closing listener with address=%r)rrKrr)queuer<rFs rrLz$PipeListener._finalize_pipe_listenersB N=w G G G , ,#F++++ , ,rr)F) rrrrrIrIr staticmethodrLrrrrr~sp           * * *.  , ,  , , ,rrc t} tj|dtj|tjtjzdtjtjtjtj}nG#t$r9}|j tj tj fvst|rYd}~nd}~wwxYwtj|tjddt!|S)zU Return a connection object connected to the pipe given by `address` rrN)rr WaitNamedPiper"rrr!r#rrPrERROR_SEM_TIMEOUTERROR_PIPE_BUSYrr$rr)r<rhrs rrrs  OO  %gt444&W1G4IIw|W%:0',    :g&?&-&=&???BPQRBSBS??????  " ' w,dD   a   sA.B C /B>>Cs #CHALLENGE#s #WELCOME#s #FAILURE#cddl}t|ts/tdt |t jt}| t|z| ||d }| d}||kr| tdS| tt!d)Nr Authkey must be bytes, not {0!s}md5zdigest received was wrong)hmacrrr,formatr7r(urandomMESSAGE_LENGTHrn CHALLENGEnewdigestryWELCOMEFAILUREr  connectionrrcmessageriresponses rrrsKKK gu % %F . 5 5d7mm D DFF Fj((G)g-... XXgw . . 5 5 7 7F$$S))H6g&&&&&g&&&!"=>>>rc6ddl}t|ts/tdt ||d}|dtttks Jd|z|ttd}| ||d }| ||d}|tkrtddS)Nrr`rbz message = %rrazdigest sent was rejected)rcrrr,rdr7ryr{rgrhrirnrjr rls rrrsKKK gu % %F . 5 5d7mm D DFF F##C((G ?C NN? #y 0 0 0.72J 0 0 0c)nnoo&G XXgw . . 5 5 7 7F&!!!$$S))H7!"<===rc eZdZdZdZdZdS)ConnectionWrapperc|||_||_||_dD]#}t||}t |||$dS)N)r`rWrryrn)_conn_dumps_loadsr3setattr)rEconnrqrattrrss rrIzConnectionWrapper.__init__sT   K % %D$%%C D$ $ $ $ $ % %rcd||}|j|dSr)rurtrn)rErsrBs rrtzConnectionWrapper.sends/ KK   a     rc^|j}||Sr)rtryrvrAs rrzConnectionWrapper.recvs% J ! ! # #{{1~~rN)rrrrIrtrrrrrrrrsA%%%!!!rrrcft|fdddddS)Nrutf-8) xmlrpclibrqencode)rss r _xml_dumpsr s, ??C64tQ 7 7 > >w G GGrcjt|d\\}}|S)Nr})r~rdecode)rBrsmethods r _xml_loadsrs*__QXXg%6%677NFSF JrceZdZdZdS) XmlListenercxddlmat|}t |t tSNr) xmlrpc.clientclientr~rrrrrrrrs rrzXmlListener.accepts7))))))ood## j*===rN)rrrrrrrrrs#>>>>>rrcXddlmatt |i|t t Sr)rrr~rrrrr)r1kwdss r XmlClientrs3%%%%%% VT2T22J K KKrct|}g}|rtj|d|}|tkrnt|cxkrtt |zkrnn |tz}nDt |cxkrt t |zkrnn |t z}ntd|||||dzd}d}||S)NFzShould not get hererr) listrrrr r{r rrQ)handlesrLreadyrTs r_exhaustive_waitr$s MM 0E7CCCl""#>>>> A(>>>>>>}$!SDDDD+;c!ff+DDDDDD''"#8999 LL3 #a%&& AG  rc |t}n|dkrd}nt|dzdz}t|}i g}t t} |D]B} t |d} t j|dd\}}n*#t$r}d|j}}|tvrYd}~nd}~wwxYw|t j kr | || |j <|rptjdddkrQ |d \} }n#t$r}|j}Yd}~nd}~wwxYw|st!|d rd|_ |d}#t&$r| |<Y@wxYwt+ |}|D]}||D]} |d\} }n(#t$r}|j}|tvrYd}~nd}~wwxYw|t jkr? |j } ||dkrt!|d rd|_n#|D]}||D]} |d\} }n(#t$r}|j}|tvrYd}~nd}~wwxYw|t jkr? |j } ||dkrt!|d rd|_wxYw  fd |D fd |DS) Wait till an object in object_list is ready/readable. Returns list of those objects in object_list which are ready/readable. NrrYg?r`T)rFrc3(K|] }|V dSrr).0r]waithandle_to_objs r zwait..s)IIa.q1IIIIIIrcg|]}|v| Srr)ro ready_objectss r zwait..s#===a!}*<*<*<*<*-C-C-E-EwOOM    8 833D99FAss*C-//0////'999)"(3A!%%a(((axx#1&:;;837A0 8     8 833D99FAss*C-//0////'999)"(3A!%%a(((axx#1&:;;837A0 8 IIII=IIIIII====;====sI3!E92!BI3 B;B61I36B;;AI3D)(I3) E3D?:I3?E5I39!FI3F%I3!G:: HHH3L$J+*L$+ K 5K L$ K AL$ PollSelectorcnt5}|D]"}||tj#|t j|z} ||}|rd|DcdddS|*|t jz }|dkr|cdddS\#1swxYwYdS)rNTc"g|] \}}|j Sr)fileobj)rkeyeventss rrzwait..sCCCMS&CKCCCrr) _WaitSelectorregister selectors EVENT_READrrselect)rrselectorrsdeadliners rrrs4 __ )" = =!!#y';<<<<">++g5 ) 00)CCUCCC ) ) ) ) ) ) ) )*"*T^-=-="="Q;;#( ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) )sA!B*=B*)B**B.1B.c|}tj|tjtj5}ddlm}||}t||j |j ffcdddS#1swxYwYdS)Nr)resource_sharer) r`r4fromfdr SOCK_STREAMr$r DupSocketrebuild_connectionrGrH)rxrFrBrdss rreduce_connectionrs ]66>63E F F J! ) ) ) ) ) ) **1--B%DM4='II J J J J J J J J J J J J J J J J J Js1A==BBcp|}t|||Srr r)rrGrHsocks rrrs)yy{{$++--8<<rs 3 2 2 11111111*NNNOOOOOOOOOOOOO |w GGG  !!  ; 769N  H<7N  H-&&&&    0 0 0 F F F F F F&TTTTTTTTn OMMMMMMMM`MMMMMMMMh:::::v:::z    *<7&&&&&X)))))V)))X&&&<76,6,6,6,6,v6,6,6,p!!!>    ? ? ? > > >$        HHH>>>>>(>>>LLL<7(.0MNML>L>L>L>L>` wy.))1!. !0 ))))6<7JJJ ===Iz#4555KKK :::I~'=>>>>>FFF222Iz#455555sAA,+A,