ÿØÿà 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ÿÙ  jddlmZddlmZmZddlmZmZ ddlmZ ddl Z ddl Z ddl Z e jdkrddlZnddlZej"ZdZd Ze j*d e j,e j.zZe j*d e j,e j.zZe j*d e j.Ze j*d Ze j*dZe j*dZe j*dZdae j*de j@Z!e j*dZ"e j*dZ#e j*dZ$e j*dZ%e j*dZ&e j*dZ'e j*dZ(dZ)dZ*dZ+dZ,dZ-dZ.dZ/d Z0d!Z1Gd"d#e2Z3y#e $rddl Z YwxYw#e $rdZYwxYw)$)model) COMMON_TYPESresolve_common_type)FFIError CDefError) _pycparserN)cddl}ddl}yNr )pycparser.yacctabpycparser.lextab) pycparsers =/opt/nydus/tmp/pip-target-mjwu0ny1/lib/python/cffi/cparser.py%_workaround_for_static_import_findersrs zz/\*.*?\*/|//([^\n\\]|\\.)*?$z?^\s*#\s*define\s+([A-Za-z_][A-Za-z_0-9]*)\b((?:[^\n\\]|\\.)*?)$z^[ \t]*#[ \t]*(?:line|\d+)\b.*$z=\s*\.\.\.\s*[,}]|\.\.\.\s*\}z__dotdotdot\d+__$z\[\s*\.\.\.\s*\]z\w+|\Sz-?0?x?[0-9a-f]+[lu]*$z\b(__stdcall|WINAPI)\bz[(]\s*(__stdcall|WINAPI)\bz \b__cdecl\bz9\bextern\s*"(Python|Python\s*\+\s*C|C\s*\+\s*Python)"\s*.z'[*]\s*((const|volatile|restrict)\b\s*)+z3(\b(int|long|short|signed|unsigned|char)\s*)+\.\.\.z\b(double|float)\s*\.\.\.cBttjatSN) _parser_cacherCParserrr _get_parserr2s!))+ rcVg} tj|}|sn|j|d|j|jdd}|j|j |j }|j d|r|jd|dz }d}|}|t|kr?||}|dk(r|dz }n|dk(r |dk(rn$|dz}n |dvr|dk(rn|dz }|t|kr?||||z||dz}|j|dj|S)N()*r rz,;=) _r_star_const_spacesearchappendstartgroupend startswithlenjoin)csourcepartsmatchclosingendposlevelics r_workaround_for_old_pycparserr/8s< E #**73  W^ekkm,- SS7 U[[]#   c6 * LL w#~w #g, ACx cA: eA: FA#g,&#g- ;3 6 LL 775>rcg} tj|}|sn-|jdz }|j|d|j d|j dvr|jdn|jd||dk(rf|j d|}|dkr td|j d|dz|dk\r td |j||dz|||dzd}nA|j d |}|dkr td |j|||dz||dzd}|jd F|j|d j|S)NrCz(void __cffi_extern_python_plus_c_start; z!void __cffi_extern_python_start; {}r z!'extern "Python" {': no '}' foundz7cannot use { } inside a block 'extern "Python" { ... }';z'extern "Python": no ';' foundz void __cffi_extern_python_stop;r) _r_extern_pythonrr#r r!r"findrNotImplementedErrorr&)r'r(r)r+r* semicolons r_preprocess_extern_pythonr9bsu E  ''0 q  W^ekkm,- %++a. LLC D LL< = 6?c !ll3/G{ EFF||C!W5:)+HII LL'2 3gaij)G S&1I1} BCC LL ! 4 5ikl+G 78= B LL 775>rcd|vry|jD]=}d|vs|jjdr(ddl}|j dyy)N"#r zString literal found in cdef() or type source. String literals are ignored here, but you should remove them anyway because some character sequences confuse pre-parsing.) splitlineslstripr$warningswarn)r'liner?s r_warn_for_string_literalrBsS '""$ $;t{{}77<  MM1 2 %rcd|js$ddl}|jd|jdyy)Nr zGlobal variable 'z_' in cdef(): for consistency with C it should have a storage class specifier (usually 'extern'))storager?r@name)declr?s r/_warn_for_non_extern_non_static_global_variablerGs) << .2ii: ; rcFgfd}tj||}|fS)Ncbt}j|jd|zS)Nz#line@%d)r%r r")mr-line_directivess rreplacez(_remove_line_directives..replaces+  qwwy)A~r_r_line_directivesub)r'rLrKs @r_remove_line_directivesrPs. O ##GW5G O ##rc:fd}tj||S)Nc~|j}|jds tdt|ddS)Nz#line@zBunexpected #line directive (should have been processed and removed)r"r$AssertionErrorint)rJsrKs rrLz*_put_back_line_directives..replacesD GGI||H% "KL Ls1QR5z**rrM)r'rKrLs ` r_put_back_line_directivesrWs+  ' 22rc,t|\}}d}tj||}i}tj |D]:}|j \}}|j ddj}|||<<tjd|}tjdkr t|}tjd|}tjd|}tjd|}t|}t|t jd|}t#t$j |}t't)|D]u\}}|j+} || d k(r:|j-d | |j/} | | kDsJd |d| ||| d zdfz}X|| | d zd k(sJd |d| ||| d zdfz}wt0jd|}t2jd|}|j d d}t5||}||fS)NcLd|jjddzzS)N  )r"count)rJs rreplace_keeping_newlinesz-_preprocess..replace_keeping_newliness!QWWY__T*T111rz\ rz2.14z volatile volatile const(z volatile volatile const rZz[__dotdotdotarray__]=...z%s,__dotdotdot%d__ %sr z%s __dotdotdot%d__ %sz __dotdotdotint__ z __dotdotdotfloat__ z __dotdotdot__ )rP _r_commentrO _r_definefinditergroupsrLstripr __version__r/ _r_stdcall2 _r_stdcall1_r_cdeclr9rB_r_partial_arraylist_r_partial_enum enumeratereversedr!r6r#_r_int_dotdotdot_r_float_dotdotdotrW) r'rKr]macrosr) macroname macrovaluematchesnumberpp2s r _preprocessrws% 7w?G_2nn5w?G F##G, %  :''399; &y-mmB(Gv%/8oo97CGoo97CGll3(G(0GW%""#97CG?++G45G"8G#45  KKM 1: eQ 4B6M6-!f18A1AAG1QqS>U* **-!f1811@@G6""#7AG $$%;WEGooe%67G'AG F?rcFtt}|jd|jd|jd|jd|jdt}d}d}d}tj |D]}||vr|dk(r'|r|j ||j |d}n`|dk(rd }d}nV|dk(r|d z }nK|dk(r|d z}n@|dk(r*|r9|dk(r4|j ||j |n|j||}|S) Nr4,rrtypedefFr rTr)setradd_r_wordsfindalldiscard)r'look_for_words words_used is_typedefparen previous_wordwords r_common_type_namesrs) &Nssssy!JJ EM  ) > !s{&&}5"**=9!&J"!   %1*&&}5"**=9t$ )** rceZdZdZdZdZdZ ddZdZdZ d Z d Z d Z d Z d ZdZddZdZddZ d dZddZdZd!dZdZd"dZdZdZdZdZdZy)#Parserci|_t|_d|_t j |_i|_i|_g|_ d|_ yr ) _declarationsr{_included_declarations_anonymous_counterweakrefWeakKeyDictionary_structnode2type_options_int_constants _recomplete_uses_new_feature)selfs r__init__zParser.__init__)sL&)e#"# ' 9 9 ;  !%rcpt|\}}t|}g}t|jD];}|j ds|dd}|j ||j |=|t|z }g}|j d|D]}|j d|z|j d|j dtd|j ||j dd j|}ttj tj|} ttj#  ||fS#tjj$r} |j!| |Yd} ~ Td} ~ wwxYw#ttj#wwxYw) Ntypedef z*# 1 ""ztypedef int %s;z@typedef int __dotdotdotint__, __dotdotdotfloat__, __dotdotdot__;z# 1 "r;rr[)rwrsortedrr$r rCDEF_SOURCE_STRINGr&lockacquirerparserc_parser ParseErrorconvert_pycparser_errorrelease) rr'rpctn typenamesrE csourcelinestypename fullcsourceastes r_parsez Parser._parse3s%g. !) 4--.Dz*ABx  & D! / VC[  HI!H    1H < =". / *<>?G$Bii -   LLN -%%k2C FG## !!,, 5  ( (G 4 4 5  s*#EF9F FFFF5cd}t|}tjtd|}|rKt |j dd}|j }d|cxkrt|kr n|S||dz }|S)Nz:(\d+):r )strrer)rrUr"r=r%)rrr'rAmsgr)linenumrs r_convert_pycparser_errorzParser._convert_pycparser_errorZsw!f);=sC %++a."-G"--/LG0s<00 $GAI. rc|j||}t|}|r!d|jd|}t|d|}t|)Nzcannot parse "z" z parse error )rrrdr)rrr'rArs rrzParser.convert_pycparser_errorhsU,,Q8!f -1ZZ\3?Cn (+,CnrNc|r |dk7r td|r tdd}n|r||dz zrtd|d}|j} |||d|_|j|||_y#||_wxYw)NTzB'packed' should be False or True; use 'pack' to give another valuez$cannot give both 'pack' and 'packed'rz#'pack' must be a power of two, not r )overridepacked dllexport) ValueErrorr_internal_parse)rr'rrpackr prev_optionss rrz Parser.parsers ~ "@AA !GHHD tax  "D}}  ))1'+*35DM   )(DMLDMs A.. A7c |j|\}}}|j|t|j}|D]}|jdk(snJd} d|_|D]}|}t |tjjr|j|: this construct is valid C but not valid in cdef()rz *** Err: %s)r_process_macrositerextrE_inside_extern_python isinstancerc_astDecl _parse_declTypedefrtypeIdentifierTypenamesr$_get_unknown_typePtrDeclTypeDecl_get_unknown_ptr_type_get_type_and_quals_declare __class____name__r?r@r%argsrr) rr'rrpiteratorrF current_declrrealtyper?rrs rrzParser._internal_parses#{{73VW V$=DyyO+ 1 / )DD & # dIOO$8$89$$T*ioo&=&=>99'(K(,..E"499>>9??3Q3QR IINN004?? N#'#9#9$#?$TYY 0G0GH$TYY^^Y__5M5MN$TYY^^%8%8%.__%C%CE))..--33B7BB=Q#'#=#=d#C*.*B*B IIDII:>)),E+C+G%MM*tyy"8(%MP^^,,8#MM?@$%@$(NN$;$;%<=ACCE!J 166{a@B B#&C rc@|jjd}|jd}|r|dd}|jdr|dk7r|jdsd|ddz}t|d}|r| }|j |||j d|z|y) Nul-r00x0or macro )lowerrstripr$rUrr)rrEint_strnegpyvalues r_add_integer_constantzParser._add_integer_constants--/((.  % abkG   s #3**40WQR[(Ggq/ hG D'* how/rc |jD]n\}}|j}tj|r|j ||>|dk(r|j d|z|Yt d|d|d|d|y)Nr_rz5only supports one of the following syntax: #define z+ ... (literally dot-dot-dot) #define zM NUMBER (with NUMBER an integer constant, decimal/hex/octal) got: #define rZ)itemsrd_r_int_literalr)rrr)rrprvalues rrzParser._process_macrossu ,,.JCKKME##E***36% hne4Ce -..)rc|j||}|jjdrd}n&|jdk(rd}n|jdk(rd}nd}|j ||j z|y)Nrzdllexport_python __cffi_extern_python_startzextern_python !__cffi_extern_python_plus_c_startzextern_python_plus_c z function )_get_type_pointerrgetrrrE)rtprrFtags r_declare_functionzParser._declare_functionsn  # #B . ==  [ )%C  ' '+G G"C  ' '+N N)CC cDIIor*rcz|j}t|tjjrP|j ||j \}}t|tjsJ|j|||yt|tjjr|jd|nt|tjjr|jd|nOt|tjjr|jd|n|j s td||j rq|j |d\}}|jr|j|||y|j!r|t#|drpt#|j$d rZt&j)|j$j*r1|j-|j |j$j*y|j!rt|j$tjj.r|j$j0d k(rt#|j$j2d rqt&j)|j$j2j*r>|j-|j d |j$j2j*zy|tj4ur-|j j7d r|j |_y|j8d k7r td |tj:zr.|j<s"|j?d|j z||ytA||j?d|j z||yy)N)rEstructunionenumz'construct does not declare any variableTrinitrr__cffi_extern_python_rzYY I $&&yy 44TGK5M E%%**2ud;((*f- 73&,,TYY__=..tyy$))//J((*"499ioo.E.EF + 8&,,TYY^^-A-AB..tyy/2TYY^^5I5I/IKEOO+ii**+BC26D.114OO'ABB -r7G7G kDII&=r OGM kDII&=r OArc*|j|dSr )parse_type_and_quals)rcdecls r parse_typezParser.parse_type0s((/22rcN|jd|zdd\}}|rJ|jdjjjd}t |t jjrtd|jd|j|jS)Nzvoid __dummy( %s );rr zunknown identifier '') rrrrparamsrrrIDrrEr)rrrrpexprnodes rrzParser.parse_type_and_quals3skk"9E"AB2AF Vz772;##((//2 h  2 2 3HI I'' 66rc2||jvrF|j|\}}||ur||k(ry|jjdstd|dd|j vsJ||f|j|<|r|j j |yy)Nrzmultiple declarations of z5 (for interactive usage, try cdef(xx, override=True))r)rrrrsplitrr|)rrEobjincludedrprevobj prevqualss rrzParser._declare;s 4%% %!%!3!3D!9 GY#~)u"4==$$Z06:=>>djjl222$'<4   ' ' + +C 0 rcLd}t|tjjtjjfrcd|j vr|t jz}d|j vr|t jz}d|j vr|t jz}|S)Nr constvolatilerestrict) rrrrrrrr  Q_VOLATILE Q_RESTRICTrrrs r_extract_qualszParser._extract_qualsIs dY__55&__446 7$**$&TZZ')))TZZ'))) rcpt|tjr|jSt|tjr]|j j drB|j ddjr%|j|tj|||Stj||S)N$r) rrras_function_pointerStructOrUnionOrEnumrEr$isdigit forcenameNamedPointerType PointerType)rrrdeclnames rrzParser._get_type_pointerUs dE11 2++- - tU66 7 $$S)diim.C.C.E&8+?))$%@ @  u--rc t|tjjrt|jtjj rt |jjdk(rld|jjdz|jvrD|jd|jjdz\}}||j|z}||fSt|tjjrw|jd}n|j|j|}||dk(rd|d}d|z}|j|j|| \}}tj|||fSt|tjj rG|j|j\}} |j#|| | }|j|}||fSt|tjjr|j|}|j} t| tjj rt%| j} | d d gk7ri} | r)| d}|d vr| j'|ddz| |<| d=nn| r)g} dD]3}t)| j'|dD]}| j+|5| sdg} | dgk(r d| vsd| vrg} | | z} dj-| }|dk(rtj.|fS|dk(r"t1d|j2j4zt7||\}}|||zfSt| tjj8r|j;d| |}||fSt| tjj<r|j;d| |}||fSt| tjj>r|j;d| |}||fSt|tjj@r|jC||dfSt|tjj8r|j;d||ddfSt|tjj<r|j;d||ddfSt1d|j2j4z)Nrrr rr_z_cffi_array_len(rr)rr)r0signedchar)shortlongr2unsigned)r6r4r5rUr4r5rZvoidrz:%d: bad usage of "..."rrrT)nestedz(:%d: bad or unsupported type declaration)"rrrrrrr%rrr' ArrayDecldim_parse_constantrr ArrayTyperrrjrranger r&r rcoordrArrrrrr_parse_function_type)rtypenoderErrrrlengthitemtype itemqualsrrprefixesnewnamesprefixr-identtp0quals0s rrzParser._get_type_and_quals^s x!9!9 : x}}ioo&D&D E  ## $ ) (----a0 0T5G5G G**: 8K8KA8N+NOIB T((2 2Eu9  h  9 9 :||#--LL4E.G *U?6EGF"%"7002C0?1AIB??2v.5 5 h  7 7 8"&":":8=="I Hi'')d'KB''1Eu9  h  8 8 9''1E==D$  > >?TZZ(Xv..!H$Qx#JJ-5\\$-BQ-FHTN %a!   "H"?!&x||FA'>!?A$OOF3"@#@!!&'"h.&H2D$&E$u,EF? ??E11O+"#<$NN//$0111$> VUV^,,$  6 6755hdK5y $  5 5655gtTJ5y $  4 4555fdDI5y h  8 8 9,,Xtr|j5||| jA|jxsd| jA|| jA|| jA|htC| |_tC| |_"tC| |_#tC| |_$| dgtK| zk7r4t'|t jr|j>rt|d|jLj d|_'|jPr"d|_(|jRjA||S)Nz$%srz$%drZ)NNrrrrz!Enums cannot be declared with ...zkind = z^enum %s: the '{}' declaration should appear on the first time the enum is mentioned, not laterr)z anonymous %sz"duplicate declaration of struct %srrFTrz!: using both bitfields and '...;'rr )*rKeyErrorrErrrr StructType UnionTyper_build_enum_typevaluesrTrr7r-force_the_namedeclsfldnamesrrrrrr&r _make_partialbitsizer;_partial_lengthrpartialr rQfldtypes fldbitsizefldqualsr%rr completedr)rkindrrEr8 force_name explicit_namerr_rbrgrhrirFrdfquals rrz"Parser._get_struct_union_enum_types ((. .    yy <% % 2 ''1,' %(?(? ? B M!4(C&&**3 =EB :x%%mT4F__]D$E O3#$GHH**=$++F$D%:;; c2&v~$++"9)<>KLMM||   j ) <I :: I ;; "@4GH H JJD499ioo&D&DEGGDIIOO,?""2v.||#..t||<#(D 22499EI3KKD%##""2v.$ 0 01dll""2v. OODIIO , OOD !   g & OOE "-.Ho Ho j) Ho "J/ /"e../BJJ)-/+233MM%%h/ <<BL    # #B ' s  ct|tjst|d|j s|st |dd|_y)Nz cannot be partialz is partial but has no C nameT)rr StructOrUnionr has_c_namer7rf)rrr8s rrczParser._make_partialhs@"e112b:; ;}}v%"&NO O rct|tjjr|j}d|dcxkrdkr>nn;|j d} |j dr t|dSt|dS|dd k(r:|dd k(r2t|dk(st|dk(r|ddk(rt|dStd |t|tjjr*|jdk(r|j|j St|tjjr+|jdk(r|j|j  St|tjj"r1|j$|j&vr|j&|j$St|tjj"r;|j$dk(r,|rd|_yt+d|j,j.zt|tjj0r|j|j2}|j|j4}|jdk(r||zS|jdk(r||z S|jdk(r||zS|jdk(r|j7||S|jdk(r||j7|||zz S|jdk(r||zS|jdk(r||z S|jdk(r||zS|jdk(r||zS|jd k(r||z St+d!|j,j.z#t$rYt|dkDrH|jddd k(rt|d cYS|jddd k(rt|dcYSYnwxYwtd |)"Nrr 9uUlLrrrrr0bzinvalid constant rrr \+r__dotdotdotarray__Tr_zT:%d: unsupported '[...]' here, cannot derive the actual array length in this contextr/%z<>&|^z?:%d: unsupported expression: expected a simple numeric constant)rrrConstantrrr$rUrr%rrordr r r;r rrErrerr>rABinaryOpleftright_c_div)rrrrVrrs rr;zParser._parse_constantos~ h  8 8 9Aad!c!HHV$ -||C("1ay("1bz)12#FaKCFaKAaDDL1R5z! <== x!8!8 9 s"'' 6 6 x!8!8 9 s"((77 7 x!3!3 4 !4!44&&x}}5 5 x!3!3 4MM%99 '+$E%^^0012 2 h  8 8 9'' 6D((8E{{c!e|##e|##e|##{{4//#dkk$6>>>$u}$$u}$#e|##e|##e|#13;>>3F3FGH Hu"-1vz779Qq>T1#&q":-WWYq^t3#&q!9, -   <==sN1 N9O%>"O%$O%c@||z}|dk|dkz r ||zdk7r|dz }|S)Nr rr)rabrVs rrz Parser._c_divs3a Uq1u AEa< aKF rc|d}g}g}d}|jD]}tj|jrd}%|j|j |j}|j |j|j ||j|j||dz }t|}t|}tj|||}||_ |Stj|dd}|S)NFr Trr) enumerators_r_enum_dotdotdotr)rErr;r rrQrEnumTyperf) rrmrarfr enumvalues nextenumvaluerrs rr^zParser._build_enum_types  GKJM))$**4995"G::)$($8$8$DM""499-!!-0##DII}=" * ,Kz*J {JGB BJ  r26B rc8|jjD]I\}\}}|jdr|jddd}|dvs5|j ||d|K|j jD]\}}|j ||y)Nzanonymous $enum_$rZrr )rrr anonymousrzT)rr)rrr$rrrr)rotherrErrrkkvs rincludezParser.includes!&!4!4!:!:!< D+2u23::c1%a(DJJ dBU C "= ((..0DAq   1 %1rc|jjj}|dgk(rtj|jS|dgk(r?|j d|jz|_tj |jS|dgk(r?|j d|jz|_tj|jStd|jjz)Nr__dotdotdotint__z'typedef int... %s'__dotdotdotfloat__z'typedef float... %s'*:%d: unsupported usage of "..." in typedef) rrr unknown_typerErUnknownIntegerTypeUnknownFloatTyperr>rA)rrFrs rrzParser._get_unknown_typesIINN(( ) )%%dii0 0 +, ,%%-)>)J&++DII6 6 -. .%%-)@499)L&))$))4 4C)* *rc|jjjjdgk(rtj|jSt d|j jz)Nrr)rrrunknown_ptr_typerErr>rA)rrFs rrzParser._get_unknown_ptr_typesV 99>>   $ $(9 9))$))4 4C)* *r)FFNF)Fr r)NFN)NF)F)r __module__ __qualname__rrrrrrrrrrrrrrr'rrr?rPrrcr;rr^rrrrrrrr's&%$N AE#)0=~' 0." +1Pf37 1 .JO,0g%R!IFtlGHR 0&*&*rr)4rr commontypesrrerrorrrrr ImportErrorrrsys version_infothread_thread allocate_lockrrrcompileDOTALL MULTILINEr`rarNrkrrir}r IGNORECASErrgrfrhr5rrnrorr/r9rBrGrPrWrwrobjectrrrrrs:&) $  7 "D, RZZ7 BLL02 RZZ2 BLL02 BJJA2<<P"**=>BJJ342::12 2::i  4bmmDbjj23 bjj67 2::n %2::OP bjj.02::()RZZ <= (T0d ; $3@D%PP *VP *C  Ds"G)G& G#"G#&G10G1