ÿØÿà 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ÿÙa 3g@sddlZddlZddlZddlZddlZddlZddlZddlZddlZddl Z ddl Z ddl m Z ddl mZddlmZejejfZeje deje dde diZd Zgd ZGd d d ejZGd ddejZGdddejZGdddejZedkredS)N)support)BytesIO)UIDs PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KPCFET0NU WVBFIHBsaXN0IFBVQkxJQyAiLS8vQXBwbGUvL0RURCBQTElTVCAxLjAvL0VO IiAiaHR0cDovL3d3dy5hcHBsZS5jb20vRFREcy9Qcm9wZXJ0eUxpc3QtMS4w LmR0ZCI+CjxwbGlzdCB2ZXJzaW9uPSIxLjAiPgo8ZGljdD4KCTxrZXk+YUJp Z0ludDwva2V5PgoJPGludGVnZXI+OTIyMzM3MjAzNjg1NDc3NTc2NDwvaW50 ZWdlcj4KCTxrZXk+YUJpZ0ludDI8L2tleT4KCTxpbnRlZ2VyPjkyMjMzNzIw MzY4NTQ3NzU4NTI8L2ludGVnZXI+Cgk8a2V5PmFEYXRlPC9rZXk+Cgk8ZGF0 ZT4yMDA0LTEwLTI2VDEwOjMzOjMzWjwvZGF0ZT4KCTxrZXk+YURpY3Q8L2tl eT4KCTxkaWN0PgoJCTxrZXk+YUZhbHNlVmFsdWU8L2tleT4KCQk8ZmFsc2Uv PgoJCTxrZXk+YVRydWVWYWx1ZTwva2V5PgoJCTx0cnVlLz4KCQk8a2V5PmFV bmljb2RlVmFsdWU8L2tleT4KCQk8c3RyaW5nPk3DpHNzaWcsIE1hw588L3N0 cmluZz4KCQk8a2V5PmFub3RoZXJTdHJpbmc8L2tleT4KCQk8c3RyaW5nPiZs dDtoZWxsbyAmYW1wOyAnaGknIHRoZXJlISZndDs8L3N0cmluZz4KCQk8a2V5 PmRlZXBlckRpY3Q8L2tleT4KCQk8ZGljdD4KCQkJPGtleT5hPC9rZXk+CgkJ CTxpbnRlZ2VyPjE3PC9pbnRlZ2VyPgoJCQk8a2V5PmI8L2tleT4KCQkJPHJl YWw+MzIuNTwvcmVhbD4KCQkJPGtleT5jPC9rZXk+CgkJCTxhcnJheT4KCQkJ CTxpbnRlZ2VyPjE8L2ludGVnZXI+CgkJCQk8aW50ZWdlcj4yPC9pbnRlZ2Vy PgoJCQkJPHN0cmluZz50ZXh0PC9zdHJpbmc+CgkJCTwvYXJyYXk+CgkJPC9k aWN0PgoJPC9kaWN0PgoJPGtleT5hRmxvYXQ8L2tleT4KCTxyZWFsPjAuNTwv cmVhbD4KCTxrZXk+YUxpc3Q8L2tleT4KCTxhcnJheT4KCQk8c3RyaW5nPkE8 L3N0cmluZz4KCQk8c3RyaW5nPkI8L3N0cmluZz4KCQk8aW50ZWdlcj4xMjwv aW50ZWdlcj4KCQk8cmVhbD4zMi41PC9yZWFsPgoJCTxhcnJheT4KCQkJPGlu dGVnZXI+MTwvaW50ZWdlcj4KCQkJPGludGVnZXI+MjwvaW50ZWdlcj4KCQkJ PGludGVnZXI+MzwvaW50ZWdlcj4KCQk8L2FycmF5PgoJPC9hcnJheT4KCTxr ZXk+YU5lZ2F0aXZlQmlnSW50PC9rZXk+Cgk8aW50ZWdlcj4tODAwMDAwMDAw MDA8L2ludGVnZXI+Cgk8a2V5PmFOZWdhdGl2ZUludDwva2V5PgoJPGludGVn ZXI+LTU8L2ludGVnZXI+Cgk8a2V5PmFTdHJpbmc8L2tleT4KCTxzdHJpbmc+ RG9vZGFoPC9zdHJpbmc+Cgk8a2V5PmFuRW1wdHlEaWN0PC9rZXk+Cgk8ZGlj dC8+Cgk8a2V5PmFuRW1wdHlMaXN0PC9rZXk+Cgk8YXJyYXkvPgoJPGtleT5h bkludDwva2V5PgoJPGludGVnZXI+NzI4PC9pbnRlZ2VyPgoJPGtleT5uZXN0 ZWREYXRhPC9rZXk+Cgk8YXJyYXk+CgkJPGRhdGE+CgkJUEd4dmRITWdiMlln WW1sdVlYSjVJR2QxYm1zK0FBRUNBenhzYjNSeklHOW1JR0pwYm1GeWVTQm5k VzVyCgkJUGdBQkFnTThiRzkwY3lCdlppQmlhVzVoY25rZ1ozVnVhejRBQVFJ RFBHeHZkSE1nYjJZZ1ltbHVZWEo1CgkJSUdkMWJtcytBQUVDQXp4c2IzUnpJ RzltSUdKcGJtRnllU0JuZFc1clBnQUJBZ004Ykc5MGN5QnZaaUJpCgkJYVc1 aGNua2daM1Z1YXo0QUFRSURQR3h2ZEhNZ2IyWWdZbWx1WVhKNUlHZDFibXMr QUFFQ0F6eHNiM1J6CgkJSUc5bUlHSnBibUZ5ZVNCbmRXNXJQZ0FCQWdNOGJH OTBjeUJ2WmlCaWFXNWhjbmtnWjNWdWF6NEFBUUlECgkJUEd4dmRITWdiMlln WW1sdVlYSjVJR2QxYm1zK0FBRUNBdz09CgkJPC9kYXRhPgoJPC9hcnJheT4K CTxrZXk+c29tZURhdGE8L2tleT4KCTxkYXRhPgoJUEdKcGJtRnllU0JuZFc1 clBnPT0KCTwvZGF0YT4KCTxrZXk+c29tZU1vcmVEYXRhPC9rZXk+Cgk8ZGF0 YT4KCVBHeHZkSE1nYjJZZ1ltbHVZWEo1SUdkMWJtcytBQUVDQXp4c2IzUnpJ RzltSUdKcGJtRnllU0JuZFc1clBnQUJBZ004CgliRzkwY3lCdlppQmlhVzVo Y25rZ1ozVnVhejRBQVFJRFBHeHZkSE1nYjJZZ1ltbHVZWEo1SUdkMWJtcytB QUVDQXp4cwoJYjNSeklHOW1JR0pwYm1GeWVTQm5kVzVyUGdBQkFnTThiRzkw Y3lCdlppQmlhVzVoY25rZ1ozVnVhejRBQVFJRFBHeHYKCWRITWdiMllnWW1s dVlYSjVJR2QxYm1zK0FBRUNBenhzYjNSeklHOW1JR0pwYm1GeWVTQm5kVzVy UGdBQkFnTThiRzkwCgljeUJ2WmlCaWFXNWhjbmtnWjNWdWF6NEFBUUlEUEd4 dmRITWdiMllnWW1sdVlYSjVJR2QxYm1zK0FBRUNBdz09Cgk8L2RhdGE+Cgk8 a2V5PsOFYmVucmFhPC9rZXk+Cgk8c3RyaW5nPlRoYXQgd2FzIGEgdW5pY29k ZSBrZXkuPC9zdHJpbmc+CjwvZGljdD4KPC9wbGlzdD4Ks\ YnBsaXN0MDDfEBABAgMEBQYHCAkKCwwNDg8QERITFCgpLzAxMjM0NTc2OFdh QmlnSW50WGFCaWdJbnQyVWFEYXRlVWFEaWN0VmFGbG9hdFVhTGlzdF8QD2FO ZWdhdGl2ZUJpZ0ludFxhTmVnYXRpdmVJbnRXYVN0cmluZ1thbkVtcHR5RGlj dFthbkVtcHR5TGlzdFVhbkludFpuZXN0ZWREYXRhWHNvbWVEYXRhXHNvbWVN b3JlRGF0YWcAxQBiAGUAbgByAGEAYRN/////////1BQAAAAAAAAAAIAAAAAA AAAsM0GcuX30AAAA1RUWFxgZGhscHR5bYUZhbHNlVmFsdWVaYVRydWVWYWx1 ZV1hVW5pY29kZVZhbHVlXWFub3RoZXJTdHJpbmdaZGVlcGVyRGljdAgJawBN AOQAcwBzAGkAZwAsACAATQBhAN9fEBU8aGVsbG8gJiAnaGknIHRoZXJlIT7T HyAhIiMkUWFRYlFjEBEjQEBAAAAAAACjJSYnEAEQAlR0ZXh0Iz/gAAAAAAAA pSorLCMtUUFRQhAMoyUmLhADE////+1foOAAE//////////7VkRvb2RhaNCg EQLYoTZPEPo8bG90cyBvZiBiaW5hcnkgZ3Vuaz4AAQIDPGxvdHMgb2YgYmlu YXJ5IGd1bms+AAECAzxsb3RzIG9mIGJpbmFyeSBndW5rPgABAgM8bG90cyBv ZiBiaW5hcnkgZ3Vuaz4AAQIDPGxvdHMgb2YgYmluYXJ5IGd1bms+AAECAzxs b3RzIG9mIGJpbmFyeSBndW5rPgABAgM8bG90cyBvZiBiaW5hcnkgZ3Vuaz4A AQIDPGxvdHMgb2YgYmluYXJ5IGd1bms+AAECAzxsb3RzIG9mIGJpbmFyeSBn dW5rPgABAgM8bG90cyBvZiBiaW5hcnkgZ3Vuaz4AAQIDTTxiaW5hcnkgZ3Vu az5fEBdUaGF0IHdhcyBhIHVuaWNvZGUga2V5LgAIACsAMwA8AEIASABPAFUA ZwB0AHwAiACUAJoApQCuALsAygDTAOQA7QD4AQQBDwEdASsBNgE3ATgBTwFn AW4BcAFyAXQBdgF/AYMBhQGHAYwBlQGbAZ0BnwGhAaUBpwGwAbkBwAHBAcIB xQHHAsQC0gAAAAAAAAIBAAAAAAAAADkAAAAAAAAAAAAAAAAAAALs KEYED_ARCHIVEs~ YnBsaXN0MDDUAQIDBAUGHB1YJHZlcnNpb25YJG9iamVjdHNZJGFyY2hpdmVy VCR0b3ASAAGGoKMHCA9VJG51bGzTCQoLDA0OVnB5dHlwZVYkY2xhc3NZTlMu c3RyaW5nEAGAAl8QE0tleUFyY2hpdmUgVUlEIFRlc3TTEBESExQZWiRjbGFz c25hbWVYJGNsYXNzZXNbJGNsYXNzaGludHNfEBdPQ19CdWlsdGluUHl0aG9u VW5pY29kZaQVFhcYXxAXT0NfQnVpbHRpblB5dGhvblVuaWNvZGVfEBBPQ19Q eXRob25Vbmljb2RlWE5TU3RyaW5nWE5TT2JqZWN0ohobXxAPT0NfUHl0aG9u U3RyaW5nWE5TU3RyaW5nXxAPTlNLZXllZEFyY2hpdmVy0R4fVHJvb3SAAQAI ABEAGgAjAC0AMgA3ADsAQQBIAE8AVgBgAGIAZAB6AIEAjACVAKEAuwDAANoA 7QD2AP8BAgEUAR0BLwEyATcAAAAAAAACAQAAAAAAAAAgAAAAAAAAAAAAAAAA AAABOQ==s ]> A &entity; )()ztoo short data)z1too large offset_table_offset and offset_size = 1s"*)z9too large offset_table_offset and nonstandard offset_sizes$,)z'integer overflow in offset_table_offsets")ztoo large top_objects" )zinteger overflow in top_objects" )z)too large num_objects and offset_size = 1s" )z1too large num_objects and nonstandard offset_sizes$ )z%extremally large num_objects (32 bit)s" )z%extremally large num_objects (64 bit)s" )zinteger overflow in num_objectss" )zoffset_size = 0s" )z ref_size = 0s%  )ztoo large offsets"* )zinteger overflow in offsets) )ztoo large array sizes'  )z$extremally large array size (32-bit)s*)z$extremally large array size (64-bit)s.)zinteger overflow in array sizes.)ztoo large reference indexs%  )z#integer overflow in reference indexs,)ztoo large bytes sizes%O#A )z$extremally large bytes size (32-bit)s(OA)z$extremally large bytes size (64-bit)s,OA)zinteger overflow in bytes sizes,OA)ztoo large ASCII sizes%_#A )z$extremally large ASCII size (32-bit)s(_A)z$extremally large ASCII size (64-bit)s,_A)zinteger overflow in ASCII sizes,_A)z invalid ASCIIs#Q )ztoo large UTF-16 sizes'o )z%extremally large UTF-16 size (32-bit)s*oO )z%extremally large UTF-16 size (64-bit)s.o )zinteger overflow in UTF-16 sizes.o )zinvalid UTF-16s$a )znon-hashable keys&  )z&too large datetime (datetime overflow)s*3BP)z'too large datetime (timedelta overflow)s*3B)zinvalid datetime (Infinity)s*3)zinvalid datetime (NaN)s*3c@sveZdZddZd\ddZddZdd Zd d Zd d ZddZ ddZ ddZ ddZ ddZ ddZddZddZddZd d!Zd"d#Zd$d%Zd&d'Zd(d)Zd*d+Zd,d-Zd.d/Zd0d1Zd2d3Zd4d5Zd6d7Zd8d9Zd:d;Zdd?Z!d@dAZ"dBdCZ#dDdEZ$dFdGZ%dHdIZ&dJdKZ'dLdMZ(dNdOZ)dPdQZ*dRdSZ+dTdUZ,dVdWZ-dXdYZ.dZd[Z/dS)] TestPlistlibcCs"zttjWn Yn0dSN)osunlinkrTESTFNselfr1/opt/python39/lib/python3.9/test/test_plistlib.pytearDownszTestPlistlib.tearDownNcCsrtdddddgdgddd d d d td dddtddgddddddgtddddddttd}d|d<|S)NDoodahAB g@@@)g?ill,l @Jzu Mässig, MaßTF)rrtextabc)Z anotherStringZ aUnicodeValueZ aTrueValue aFalseValueZ deeperDict  !)aStringZaListZaFloatZanIntZaBigIntZaBigInt2Z aNegativeIntZaNegativeBigIntaDictZsomeDataZ someMoreDataZ nestedDataZaDateZ anEmptyDictZ anEmptyListzThat was a unicode key.uÅbenraa)dictdatetimelist)r fmtplrrr_creates2zTestPlistlib._createcCs0|}||dd||ddddS)Nr&rr'rF)r- assertEqual)r r,rrr test_createszTestPlistlib.test_createcCs|}ttjd}t||Wdn1s60Yttjd}t|}Wdn1sl0Y|t|t|| t tj|d| t tjddS)Nwbrbfilename) r-openrr plistlibdumploadr.r( assertRaisesAttributeError)r r,fppl2rrrtest_ios*(zTestPlistlib.test_ioc CsVtg}tD]D}|j|d$|jttj||dWdq 1sF0Yq dSNr+)object ALL_FORMATSsubTestr7 TypeErrorr4dumps)r r,r+rrrtest_invalid_typeszTestPlistlib.test_invalid_typecCs|ttdWdn1s(0Y|ttdWdn1sZ0Y|ttdWdn1s0YdS)Nz not an inti)r7rAr ValueErrorr rrrtest_invalid_uids  & & zTestPlistlib.test_invalid_uidc CsdD]}tD]|}|j||dZtj||d}t|}||t|||tj||d}|||Wdq 1s~0Yq qtD]f}ddddddd fD]F}|j||d$|jt tj||dWdq1s0YqqdS) N) rilllrlr,r+r=lrrl) r?r@r4rBloadsassertIsInstanceintr.r7 OverflowErrorr r,r+datar:data2rrrtest_ints   . zTestPlistlib.test_intc CsdD]}tD]}|j||d^tjt||d}t|}||t|||tj||d}|||Wdq 1s0Yq qdS)N)r r!rKr=) r?r@r4rB bytearrayrMrNbytesr.rQrrrtest_bytearrays   zTestPlistlib.test_bytearraycCsJ|}t|}t|}|t|t|t|}|||dSr)r-r4rBrMr.r()r r,rRr:rSrrr test_bytess    zTestPlistlib.test_bytescCs4ddigggggggg}|tt||dS)Ntestaaaaaar.r4rMrBr rRrrrtest_indentation_arraysz#TestPlistlib.test_indentation_arrayc CsDddddddddd d iiiiiiiii}|tt||dS) N123456789rZr[r\rrrtest_indentation_dicts(z"TestPlistlib.test_indentation_dictcCs<dddddigggggigii}|tt||dS)Nr^r_r`rYrZr[r\rrrtest_indentation_dict_mixs z&TestPlistlib.test_indentation_dict_mixcCsrtd}|ttj|tjd|tdtdtdtdtdtdd }|ttj|tjd|dS) Nrr=rrrHrIrJl)Zuid0Zuid2Zuid8Zuid16Zuid32Zuid63)rr.r4rMrB FMT_BINARY)r rRZ dict_datarrrtest_uidszTestPlistlib.test_uidcCstd}||jddSNr)rr.rR)r uidrrr test_uid_dataszTestPlistlib.test_uid_datacCs<|tdtd|tdtd|tdddS)Nrrznot uid)r.rZassertNotEqualr rrr test_uid_eqszTestPlistlib.test_uid_eqcCs |ttdttddSrk)r.hashrr rrr test_uid_hashszTestPlistlib.test_uid_hashcCs|ttdddS)NrzUID(1))r.reprrr rrr test_uid_repr szTestPlistlib.test_uid_reprcCs|ttdddSrk)r.operatorindexrr rrrtest_uid_index#szTestPlistlib.test_uid_indexc Cs<ttjdD](}|ttjtd|dtdqdS)Nr)protocol)rangepickleHIGHEST_PROTOCOLr.rMrBr)r protorrrtest_uid_pickle&szTestPlistlib.test_uid_picklecCs8|ttdtd|ttdtddSrk)r.copyrdeepcopyr rrr test_uid_copy*szTestPlistlib.test_uid_copyc CshtD]^}|j|d>tt|}tj||d}||t|dWdq1sX0YqdSNr=z2generated data was not identical to Apple's output)r?r@r4rMTESTDATArBr.)r r+r,rRrrrtest_appleformatting.s z!TestPlistlib.test_appleformattingc Csd|_tD]}|j|dh|j|d}tjt||d}|t|t|dtt|}|t|t|dWdq 1s0Yq dSr) ZmaxDiffr?r@r-r4rMrr.r()r r+r,r:rrrtest_appleformattingfromliteral7s z,TestPlistlib.test_appleformattingfromliteralc CstD]}|j|dt}|j|d}tj|||dtjt||d}|t |t |tt|}|t |t |Wdq1s0YqdSr<) r?r@rr-r4r5r6getvaluer.r()r r+rr,r:rrr test_bytesioCs zTestPlistlib.test_bytesioc Cst}d|d<d|d<d|d<tD]}dD]}|j||dt}tj||||dtjt|tjd }| t |t ||r| t | gd n| t | gd Wdq,1s0Yq,q$dS Nrrrrrr)FT)r+ sort_keys)Z dict_typer)rrr) collections OrderedDictr?r@rr4r5r6rr.r(r*keys)r r,r+rrr:rrrtest_keysort_bytesioNs z!TestPlistlib.test_keysort_bytesioc Cst}d|d<d|d<d|d<tD]}dD]}|j||dztj|||d}tj|tjd }|t|t||r|t | gd n|t | gd Wdq,1s0Yq,q$dSr) rrr?r@r4rBrMr.r(r*r)r r,r+rrRr:rrr test_keysortcszTestPlistlib.test_keysortc Csrddi}tD]`}|j|d@|jttj||dt}|jttj|||dWdq 1sb0Yq dS)N*aNumberr=)r?r@r7rAr4rBrr5)r r,r+rrrrtest_keys_no_stringus z TestPlistlib.test_keys_no_stringc Csddd}tD]}|j|d|tj||ddd}t|}||ddit}tj|||ddd|}t|}||ddiWdq1s0YqdS) NrZaWord)rsnaker=TF)r+Zskipkeysrr) r?r@r4rBrMr.rr5r)r r,r+rRr:r9rrr test_skipkeyss"  zTestPlistlib.test_skipkeysc Csdddd}tD]}|j|dftj||d}t|}||ddgddgddgd|tjkrx||d |d Wdq1s0YqdS) N)rr)rfirstsecondthirdr=rrrrrr)r?r@r4rBrMr.ri assertIsNotr r,r+rRr:rrrtest_tuple_memberss  zTestPlistlib.test_tuple_membersc Csddgddgddgd}tD]|}|j|d\tj||d}t|}||ddgddgddgd||d|dWdq1s0YqdS) Nrrrrrr=rrr?r@r4rBrMr.rrrrrtest_list_memberss zTestPlistlib.test_list_membersc Csddiddiddid}tD]|}|j|d\tj||d}t|}||ddiddiddid||d|dWdq1s0YqdS) Nrrrrrr=rrrrrrrtest_dict_memberss zTestPlistlib.test_dict_membersc CstdD]}t|}d|}|dks,|dvrXtj|tjd}|dkr|t||n:|t tj|tjdWdn1s0Ytj|tj dqdS)Nzstring containing %s z r= ) rxchrr4rBFMT_XMLr.rMr7rEri)r irZ testStringrRrrrtest_controlcharacterss  .z#TestPlistlib.test_controlcharactersc Csbddi}tD]P}|j|d0tj||d}|t||Wdq 1sR0Yq dS)NZpythonu🐍r=)r?r@r4rBr.rM)r r,r+rRrrrtest_non_bmp_characterss z$TestPlistlib.test_non_bmp_charactersc CstD]}|j|d|ttjd|dWdn1sD0Y|ttjd|dWdn1s|0YWdq1s0YqdS)Nr=uu)r?r@r7UnicodeEncodeErrorr4rB)r r+rrrtest_lone_surrogatess  , z!TestPlistlib.test_lone_surrogatesc CstD]|}|j|d\d}gd}ttj||d}ttj||d}||||||Wdq1sv0YqdS)Nr=abc)rrrr)r?r@r4rMrBr.)r r+Ztest1Ztest2Zresult1Zresult2rrrtest_nondictroots zTestPlistlib.test_nondictrootcCs&dD]}|ttjd|qdS)N)zkey inside an arrayz-key inside an array23z&key inside an array3z %sr7rEr4rMencoder rrrrtest_invalidarrays  zTestPlistlib.test_invalidarraycCs>dD]4}|ttjd||ttjd|qdS)N)z0kcompound keyzsingle keyzmissing keyzek1v15.3k1k2double keyz%sz-%srrrrrtest_invaliddicts    zTestPlistlib.test_invaliddictcCs|ttjddS)Ns-not integerr7rEr4rMr rrrtest_invalidintegers z TestPlistlib.test_invalidintegercCs|ttjddS)Ns*not realrr rrrtest_invalidreals zTestPlistlib.test_invalidrealcCsRd}t|}||dd}t|}||dd}t|}||ddS)Ns%456is%0xar#s&0123{)r4rMr.)r r,valuerrrtest_integer_notations s     z#TestPlistlib.test_integer_notationsc Csttj}ddtjfddtjfddtjffD]\}}}|jtjd}|j|dN| d|}|| d |}t |}| t|t|Wdq,1s0Yq,dS) Nsutf-8zutf-8sutf-16z utf-16-lez utf-16-ber=)encodingsUTF-8)rr4rcodecsBOM_UTF8 BOM_UTF16_LE BOM_UTF16_BEr-r@replacedecoderrMr.r()r baseZ xml_encodingrZbomr,rRr:rrrtest_xml_encodingss       zTestPlistlib.test_xml_encodingscCs<|ttjiddWdn1s.0YdS)NZblahr=)r7rEr4rBr rrrtest_dump_invalid_format,s z%TestPlistlib.test_dump_invalid_formatcCs:|tjtdWdn1s,0YdS)Ns!these are not plist file contents)r7r4InvalidFileExceptionrMr rrrtest_load_invalid_file0sz#TestPlistlib.test_load_invalid_filecCsLtd}d|_|t tj|tjdWdn1s>0YdS)Nrr=)rrRr7rEr4rBri)r Zneg_uidrrrtest_modified_uid_negative4s z'TestPlistlib.test_modified_uid_negativecCsLtd}d|_|t tj|tjdWdn1s>0YdS)NrrDr=)rrRr7rPr4rBri)r Zhuge_uidrrrtest_modified_uid_huge:s z#TestPlistlib.test_modified_uid_hugecCsB|tjd tjttjdWdn1s40YdS)Nz)XML entity declarations are not supportedr=)ZassertRaisesRegexr4rrMXML_PLIST_WITH_ENTITYrr rrrtest_xml_plist_with_entity_decl@sz,TestPlistlib.test_xml_plist_with_entity_decl)N)0__name__ __module__ __qualname__rr-r/r;rCrFrTrWrXr]rgrhrjrmrnrprrrur|rrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrsZ           rc@speZdZedddddZddZddZd d Zd d Zd dZ ddZ ddZ ddZ ddZ ddZdS)TestBinaryPlistlibr offset_sizeref_sizecGsdg}d}g}|D],}|||d|||t|7}qtd||t|d|}||||tjd|tj dS)Nbplist00bigz>6xBBQQQrrr=) appendto_byteslenstructpackextendr4rMjoinri)rrZobjectsrRoffsetZoffsetsxtailrrrrHs     zTestBinaryPlistlib.decodecCsd}|t|ddidS)Ns<bplist00QaQbrr)r.r4rMr\rrrtest_nonstandard_refs_sizeWsz-TestBinaryPlistlib.test_nonstandard_refs_sizecCsddddddddtdd d d d d tdd d gddd if D]\}|j|d<tj|gdtjd}|t|dt|Wdq:1s0Yq:dS)NFT90^@abcdeu абвгдabcder"r#r$r%rYrr12rir=iL) r)rUr@r4rBriZ assertLessrrq)r rrRrrrtest_dump_duplicatescsz'TestBinaryPlistlib.test_dump_duplicatescCsdddddddtddd dd d tdd d gd dd if D]}|j|djtj|gdtjd}t|\}}t|trt |}| ||| ||| ||Wdq81s0Yq8dS)NFTrrrrr"r#r$r%rrrrrrr=) r)rUr@r4rBrirM isinstancetupler*r.assertIs)r rrRrrrrr test_identityls   z TestBinaryPlistlib.test_identitycCsg}||ttj|tjd}||d|gf}|d|ttj|tjd}||dd|i}||d<ttj|tjd}||d|dS)Nr=rr)rr4rMrBrir)r rrrrr test_cyclesys zTestBinaryPlistlib.test_cyclesc CsdD]}ddt|D}z |jg|dRddd}WntyLYq0t|D](}||t|t|d|d}qV||d qdS) N)i,順cSs g|]}d|dddqS)rrr)r).0rrrr rz8TestBinaryPlistlib.test_deep_nesting..sTseedrrrrseed)rxrRecursionErrorrNr*r.r)r Nchunksresultrrrrtest_deep_nestings     z$TestBinaryPlistlib.test_deep_nestingc CstdD]j}|j|dJtjdtj|d}tj|tjd}|t||Wdq1sd0YqdS)N)ll)tsr)Zsecondsr=) r@r)ZutcfromtimestampZ timedeltar4rBrir.rM)r rdrRrrrtest_large_timestamps  z'TestBinaryPlistlib.test_large_timestampcCsL||dd||dd||dd||dddS)NF Tr)rrr.r rrrtest_load_singletonssz'TestBinaryPlistlib.test_load_singletonscCsp||dd||dd||dd||dd||d d ||d d dS) Nsrssisܺl:}s #EglMW s ܺvT2lMW )r.rr rrr test_load_ints  z TestBinaryPlistlib.test_load_intc sgtddtddddtddtd d }d D] |fd d tdDq8|D]v}|d|dP|tj$|t|gdWdn1s0YWdq^1s0Yq^dS)Nrrr#rr%$34@)pc3s|]}|VqdSrr)rjrrr rz6TestBinaryPlistlib.test_unsupported..ztoken Z02xs)rxrr@r7r4rrrV)r Z unsupportedtokenrrrtest_unsupportedsz#TestBinaryPlistlib.test_unsupportedc Cs|tD]r\}}||P|tj$tjd|tjdWdn1sN0YWdq1sl0YqdS)Nrr=)INVALID_BINARY_PLISTSr@r7r4rrMri)r namerRrrrtest_invalid_binarys  z&TestBinaryPlistlib.test_invalid_binaryN)rrr staticmethodrrrrrrrrrr rrrrrrFs      rc@seZdZddZdS)TestKeyedArchivecCsRdddtddddgdd d gd gd d tdid}|ttd|dS)Nrz$nullrrzKeyArchive UID Test)Zpytypez$classz NS.stringOC_BuiltinPythonUnicode)rZOC_PythonUnicodeNSStringZNSObjectZOC_PythonStringr)z $classnamez$classesz $classhintsZNSKeyedArchiverroot)z$versionz$objectsz $archiverz$topr)rr.r4rMrr\rrrtest_keyed_archive_datas"z(TestKeyedArchive.test_keyed_archive_dataN)rrrrrrrrrsrc@seZdZddZdS) MiscTestCasecCsddh}tj|t|ddS)NZ PlistFormatZ PLISTHEADER) blacklist)rZ check__all__r4)r rrrr test__all__szMiscTestCase.test__all__N)rrrrrrrrrsr__main__)r}rsryrZunittestr4r r)rZbinasciirrYriorrrrir?Z a2b_base64rrr ZTestCaserrrrrmainrrrrs>     4  W 7|