5P}]G>;op۾뻻Muס=[ (8OTCzze{`Rw>PPK0|CUQsPC{vڭ^u50{OB5;5"sIk]UP t=@p eBKѨi(P: P( UT( J 6()@J7B(U P@D MHQA!T) !  *(P$PP( P( #=(IPTR $((EB;ϼy*`_@P R7BKnD^Ÿ{7|uju@> hh5@PI<ֈD(&ymw8"҈T^|&TRw l|m/in ٽ7}UI{xhN(^o K.{=;@닙F}:o}z'ҕûH wyH-KNxU=eýyvN&qW6׻Z|}μ<׌セ&w9<7O7Xz^RKfӭum̑ `72>xyڝZ*o.]lmik\Yhi˪Xՙƻv﷽{='$UO/{fw^mmzgV*'wun5_|Msx=v}ہ͔.wA-7xmÎ;djkQ1>T-vwbóuT9vs|@P+);_};^nGP;ھZ; Xvϻl ]Aݬa[jv5TnvG<")@  PP ^OCvTtÞ q=x*ǻg`lݾ8{}@(FGv.`t ꁯHdžN|ݍϋoL7l{d)@Fh*W¾tے}}zz]f w@tw۞$}w]׾"l@{g @zxj▴vo޵KFۊAoGzKF7;`gt݌mm릵͛iftk[kwww@XH -V(3R龷|9pNoFwY >;̵ywK@vm $P _}VqgK'uܖwwW>oͻ,:۽Jqݢ>}]_gi$T*ts޺g=4]Ӳ^ַ| ;I5;<{$ޜ9\l涺QVqک C:tT!3:7-EUP̈dv4l{ֺtZ&ҭN}niNM^Qd@yFQRlhvc N3>v5qr\nA'@T|}IlZwM׽s46ɍom)@B )B㶳].hqw^o{6 V{{>S mPM7QРEHJEj@H "*E@(,/}w޳՗>g}>7aMۨmpmwu2vV4έJzܭwQb=(44;EҞ-ݽ{teuWw" 㽼BwaGT lwY|z{>A@UZ4&>BZwMsn'9wsUl{t8&E BuRL? Q PDAm%3ݺ>l $Ӳiij'4]y~~!b;W㻝}(TOş>ߖhݳ; r_ =a$S}t=r+E72~Abi4e{#O23yξT?&-O4f_ߞDAq@E0T^S̰Ij?DV!$O5֡gև-&uHA4d}},eh}5- }! ,J/1m0asOooS5|uLAxiYsWQn}P”~){Qp15lݧz1;{*-赈㷽ǽ0~?_+ᶓLP][f:;λ7O0>~0ctS/y ԜdAtquLNfMfeAiF B1fMDq!j AXzÉƖ{W QGKw4$AAQ$}(_$gL)gՔyg>{hkUO;Y+gzFoLX%'_yzffH:2E\ Dlgoſcȣ2}ϿU O aS@D #X)ar9'9"3j;_DA{a9yR'=j0x!9z~ݾ\&de&w:߿}7Ql%"ߕ2Y}+ _ΚQ1ve^Vb1hf΍Oy, ) 6_Xw *{8-Ī\R&ѾxڏŅgmmءRTX-ůႦ6𾾜:2T`'lӟ_nZ5\'_{zx._o5^OܟvƖI_OS#`-Hp>?Dj,(N 1<؎ohj#_|;sdhϻGIsGOs׺|׉uIjC#)DLϞD}`d `,=bi0H8sd?{[L52$q(BP'(BZ,QtFuqFJ 9w,XQ9/A\:0 I@(uHt#\;P2Szc?MzfFpܝ Lϵ4-DȘDÅ ǛT 9zI]d+>D!=6;*ClV=^<R|Yn: F-t|krUk~:s T2:¡Q8˩c/[K~ )\ $Tac0=+8>#y4f> `m/;K~TEӾ_O՗^jiUhF_,o U~b_6Cv麏1,yžX#QG+=u}\0\~;S`P@Rt"#5( Z'`nG {᷻rX~Y`ߝ.B wj"=~OGُM&ZRBa,yXUßLƏ?>'d >}mtF|dڠ󶹾?w!郍ouߥ<ÒcE^jsxPSЪQ bB=oFpSL(ɚۅʨ|p.4dþC?mW}${c2E7iO@ɒѪhhG'ۆyΰED"F#ϸT8eX3YOgŠt? KiR-7 E"gQ-Kf/q__s /~K0e vi( w@3)Ts!|a=z|F~hxr'_}~́KҢ}φޚhTeU> % q)H쵥j?zTEo"oX$ JϱR-5*IrtJ@OxԠ< P4$@D}7G]pk׏WS84DϿ5:FCAxXv>(C먼&fBQ.@ө ]Z>߸)?s*j#]wR t-!mZ! O@t/_ o 9dÅn+U@mxUZRk-Z*@V!R\80&+e !kcgAf흆8eJCN|L]jm@gt)yը#IӜ5䡲KOfXY뜅Ylո/>bS%Yi[Of&ԫh\b6(%&NnmV,x7'#*F78}GbLd~]׏͓ݿ}}pk7}â\R 6)7X3K)ɪSnʃ!(MxqB ߂ҎSoGMq;*D-fE訃b0PP=J C^ySG1 E: moc+O:q;(gY7b9ԃ4 `ZLZmb'e6?BMK؈==Ӎ=W=^~M'$}d1XdD-b^h"]l~7}7hr{uR[dxcm>sa.K]^. 'ln+n"z(_\PW11c:iӂqwfZv?R̼aV\`o&x೻@_z*Ft N讳uu /qpPr&Rl}F&z跖]ӌvPiLak_}Z)7b_w>7bNKi=87fݖ}zgqɷֳ?=x:qU퓆yr^9G19r/xf_Ok{8ncگCFU%FP!sxO P)`ɭIW-Xh0?)K|(4mc gcTq.iqVzR0} 3sG;\$R-EE64eytRv5컪zcNNUZt[j:+|*VdW7{+2xS5+fwYꭤE^eMϥ;X1b5| ǫQ*.xi`k/4/Am$'SV`ܵϤK2R uDKn9r=8B2'BnRu~V<[֦j'@E/N LqiT_~{Rs]p84AF=c)7 ,噱q.q}#G u&v+NE}ZҀS3ι5+' )=@ͱeN%N2hk}eo^sͩ ѳֺLL_~JQ .463&B EWVr }QV˂ˆf*P,dRF H q<Ȁ_婦OSЌ^'ݾZ3WqNV m)A;x)L}n:9m.1SvYMTLuM軷sçdn(eǦ.zjXaU9JɾC7sEbJQw݇mLwr<}֦Ru2Xu8?4>igS[QS_P~T* bThj$'dј$]7BjTO;Φ=5'K֏Kj'iUFEUh-\5J77ڤAouȥvR<ן7ִQջUhfX7v/}Rxr^R?*PsfFѾx]g̚ h_)2|53ZW.F*\把WIچQ0=2Q;/,N}=SZU8ُHuQ@SM|~亵Ƈ%@䯫4Y>V#[FA/D_;ŦFҢXb xj1=J伷q06/ΞyD_2g;U$*Sے*([pyDm* jU5UH]g0 O6ֱT9O9(+Jǜ AUEQ,|jsC:d?U}rtQ=kQVuMtkmg1TbK.8)&dV#lw:ZT8ÔE(F+?{%_y[(0<>7{T>Orq8,*)2D %( EBWjv{@ĉ0ԡ…b53E+\C!b V05T~}kbdP8c5P`OLܧu>zdBZ,*;k }S'?m Iߪw׿F=R cu?9bV b֢f배D "?VVK͏㙋O/9:H|bhUKhaÜQ0/ LE4?=tk*k2ߎE14!nwnd$A {u n*ߨ(VM(% E++#lM jl1edPd_mb2{ny )2q4́jBh?uCDUE ~6jy WGcB#ɐ{x5͜6zT~;PYeS30?}XdkEQ娍ҌQU̦$UUU6 :4h~DWɌQDFzOCNK2SS쳜xm,@~[bz3TI5UPQQG{SG LL7ݰ\s;EUiETLEլ?=El߳'Awo-gX]T/7l-_<:epUs1`chrgVOf||%~b9q;߶EsN0Qj9Gm8SQB ymeOٮUV[E N|sUDS_iyJ5 6cnKh<6@{O(@sACƫV^Cvu|pTKgar(TX*$ϱq X1ʟ q*RMJr$(<?)Iw1V(Ѭ*FU߾3Q4ID􆎵J*ʇ;eYK S{9)RiY"b`94kEJADL4Rq'5Z"?*&V6Q֜ljQ4X\W;$hڶtuI-F[kmV+ ( 2)׳׎_ǧ/?](y_) NkĆD,1fR|0]a|,w+i:/_ݳCcot8Q}`\[2PYrk x?eMq#-?g^ BA !D.(7j RIYf$>o@۱-~ïB{|_l"Ҁ"(zgzxbP^J/Xf@fS~2?9&Sǹ$PXXNa|>X2x-M܈v)O2}Yh2"6{jPmAjzv'[T0cbF3f$)E.S_T\2-_핟0Vqw!Lv%b8xy:$G-a>=g᜛ * Fj&+M'"_a0CZ&Y֮Ӆ+OIKU)Z!D2uLuSƎ$C :m˞2sz2;3x{|_o,RaY!KP-=xUCY~ۼ F(C4.v -b8I9P[ (@ @M&8JjG: Bf@1 L'2(;hçCU C|KP޿@E_SCoTzmD]((rA_{!f({F@Qfcf1B"#g$~_;"UȨ3\'Fv`H/jdeErˆ XpR8M=,ĪȲAܪ}N9>Xc A=jj?'M-L3k[(i"GčN4[yp =j1֠|w%|XeUP7,{\1TBZ H#su@ڦ)"7FMSMv09jΔ;̝9mr1KY3/?/9jڃl۷olzR8JD%I4ұKnR˫ctzy^II->/׶uμZxKv rˁwF3栊UT)P#K\sg&5x>cTv_LR y$(>f/>|o7|Ben֐;) (IA*u!k@ @S/~zK*6}ԏ]+ouu!|?]93^AOP h XIr(DOoE`4XC+:q(TݷWr!)n;)zJ$ϐ΁z! [`+|e<C@2Nke{z8n:uHQF*>b%ze<\qJo'kG9-){:L٥VyFԑ:; ƴ"i% !/^D&֮۲bRb2{XChf|7{Y*#̛G ΡxMP1 Y#d0V|"^f@¬[ ̥*tiQz܋vnCsCnf.UF'Gjj[@X(EvTpU>> O\%;ԙ<(ʽ8;^l`rE<0w,xvS*W-8awQ%m6e;PfT`ٲQkJJ'Qvxy%"X6 Pz?F JLJLJ  Ѕ@Iy|ˑee/*Jcnޙʙ#,yQxFu:wz;TU%( S*C}h|?Co=g|rJ( >FEYBoX/pu4g^ 6cI;j3@@4HC!!I82&`g\*(/w=w5./G>\oyˉjH KZp ?5=&Y"+4͓%iz I>nQLd% wh9Faܕ8+JBR:'W#߼6(q92#PYƠλgKǂϟDfI {ETA@ߍ-kqF<Pxшߧ#$&zQύjw]6ΫRɚ&Q ${{lo9?y|; ȠYҒ(~hX>Bg/ +n$F_eXcͳ27z3(6FY.KM] ST$ɸrdI"E֍m5Ӝoi)$ 鼖VΏĚNЏkPG$h*"&$`R=yt^$_@R3ABP %ѻb:Wu> 6;YWs]n_Hi^hx t5^+O37ʞG(Mx -^tB0H'i{V` ZhTiPT"]5!A;*ih$jI QPDNDzB纯 =M-DIEUMQC`A'{`3=wæ5P8eX*SiFŤb:R}7X2&!G4;f8:~Dw:e :frbqBUo"<^p֘2Qw*/m)u+KS\d%*k-;MzH2^o&/k_Ýoh#+_>`; }>MH!UGP̥)*F|2Do_Eo-Ʈ$H50 [+H;4uD|zrd@lDvK`cr R tЇ^W<5֧x3V˫Љ2h*&&kdR21׊?VI[M`fUTBلM%Il^F??W*st]t-EQ7zu|&)t@墁~.Buxsi VTVc -U͛=&ִ¸ A"kXA\`$xk˫9)iugZfI|!P~~oK Ħ؈O7_wPt҇!bYAKBePW/9yݑiu;00Hl(+ı(=EQ$2,󢉞e̼usy|DHX g3{U{AÛDDHJp̅}%l.PUy`XuDĊjda8A˿gg۵MkP\e/{ zKKnQ{^JJ+)0a9>THY&C N/m;rcPp}~~#tU3?;'>VmbO ;'9HU21ZmFC6pĉ 2^Ǩ6_g3}pA]^ V"}9M/gT!DPLmp3@S5Zfg0Nc??xu>gG~  hJ_uyvX?t1z _%eoDup @R]7< OUBg! Pr=3"@SS_!1 >|8rwBnd8,QZvj2`AF.Bu# ߳y7"#pf<yt򪀥$@[r7ul708.J?O?}~0f6aT?FqcVX`Q*0F+/=(S lTQ"$Q @){Pk IMG~F>~\3zq Nz "zd  z$":RފV;wNM]GF D>zЛA|0LHc$?L'V*@_W9x:FڍwP&m`6ԎZ*99-lpn=_),hۿ^͂n{|$Jwtl^(o|F0* nJ/Aҕ0~1O8۽m`XI8WK[TWe(ITu./{t;y|oѧM`r1v PD(e˪oh:Uejc%')ӓt-)hi16o u8d>?XGt32y3y]QeZ%T{'e8yUFXIh*+^֎Ηv?RPM˟#؛߁N8~J gq96qNa5+M y.rk嘶jG{OIV )I_{wټ]%1a1y&T9ۋjUYc85}-;3xB֣X|Zt8(0+P3=UPzLK { tYH CCmG^)UծJB8Wpd#uc[G2TA:d$o9@ͪn%m~g$:NRDҢ)1LYHZ/G[&ABbd8t ]T @~w_bzj~'y&Y]G)4K*`gͱL.420kEZw|Nu^jLѹޛe.r\ f\b&S8\HMXև//~p{< ?) a#d( !,E5 ;Fv0(}ȏf_~}FHnT*2cɝi`N,S X,V_볃#7(ɩm[3o.nW2/g=o] Q߭,k8*G< 9 *IQ۸<'ITz8F$MocUP(* BU^*I=T1km-%R@m~_7MYNp$f&zm!\/;GW|pH*J4-f'=;ntHKrZrp{ PiB.:7;wtM]k:@EVXX:-PPݏ!NҖUg瑁);׎Se * "!i&q حμw$ܝυjL<쫗.]_Uk=D1 +yk ѕ(4|d-7. fO_Yz]xtZ MfE`{ABkSyr='"l{=iσO^]_7-W^W[[[@k1-33sK| o.=:aDNzP4 * Yp"/TIkv%C2)WmJ!1 eGs# #3 ` P % 3 fn@i -SQ ʙI:L ސ1ᏏM$%2Y/Raʹr|wuoovw{C Qޮ7^J2>8:h:@q`̵UeHyJ9ȅ 8Ld@b&u(9ozmyP5%Q:Vah`)}_VOOw +Q>+Wt%=T/a-uf1`W:!rUDrX69E4r!$@x,qh寪8}N:榊=1H9aeY{YrBǙԌ̧-8#1$][P+4 ƯbvVp`Or)-0Yy0m3-侷΢tqlmMaE]XϫC9hiהD'QoU*z#/{>o[;ސ7h{Y_3\tITQ)nJrt379=q*וތ)jsΆ5]+rqrU@ePeJyWEs'vϓIZ /;WU]m`FӉdgݻ.I^:PI^e [诪ոԷ% UTF5Y; N=ޛhsuNCk@W u=ܳhzgL2ĸb<ⱓk-YVK"X':/q7*b&`=ij!}<='=S}Ҥ:A@񍥐B:}Zi';Tݗoei8{AE]i7FΊ-_::RkzVrY5ʔ5ٹ3ũO?y5Ol vSX>9!\42Wi{Dg24(|1k4IS*wr|3]#Fz4Ϗ>'lp;eu/_ۿq41G'cmf7.N-}cu /qNnXn<"<ʑ "?>'~Op.y&-u;ZVR_8/?>Hb1G /vǹA͏OR_lvH0XD)fɗzH>xMD *f֘b]X?a ͵n}{r8L~&Rg'>:+hy "{d"(/ ;Mie„[=9e36aW\~Ԟڬ4]lojKnզӬ $e.,ɾ3 W^eaQH(i/f^S~X)u̩,bw(9Mze^ y|JJ[QGo<{n>\O=4ݼmX8::݀7GmYo;cE~+R +?Uj,[$ Jڌ?.{f]UVTx߽T-Tt _,yf\x3 TeFTIqÁт;G"9ͫVez}DY9(a2YW,k2,y_M>2; W}Ezk<5?g(zzd<c3^G=ZK[S)/$h46$69ҙZ5֣|D񇟎ks$t0+o\3 a3z>٦tfXM@0S+a'@n[)֢hF%n>iMHN*h=T 61`?u"5YC1TRRO=$)$#' (*a_?F8X]r(Bܗ g{g?>*'o#8+k][@vV^qdPyHcJ}&ӣ(2?֒mY55ĩ$_Ư5# |-bR_kIL=h^`SUy>V7ڭ |l9.L]q;8aq>/yl6mUl8M' K/Gap( LY@b2ߕ(>\+ \Gf=< CHGR?NJ+,ְxI*j۴>Ts[EK IMEq P5w1Fdدa(|uz%}vM~\b<.PUTUBܹH$eGь5?fF$Du2Z*h 5ngXomefgh{C[6*@@SS"HR@̃t:Z:Y)D#u 2bDxe.O?DGNGֹkFkG*H'j>yT$ Ie& ۚHWPJff{~ȹD’I)oĿ5]Wj4]W5‰7P:ͰksԚk}5ŪH!͜p/׍o*5T_3J"z%~{[c^Qʒ+C UY-4_s2%MWE7QYT&7WOu;w=I,YK^š{:1H%J#,4,-5?ޚ.cܽ5C-cmIQ!ZkUavjy37 5-i"aÙ->UZDz'zoKV'5 hBG&|? f2ﵸe|W\`6tbd4|e(Bri >)?ձ/|fNٻzk$uʱ'MpSWk͢5nP] ѡ{L5g{\af *0`=/s[v~M*(_uK֞e ݸ #2K$,/+=j׭}k*xDIqN=nV^(M%J("d!&Q|Q ,ya"% ڴO] $ n6?5e2Q~XI Ov0l@ryg~@|+AL>|᜵#Dg5oKid& ww*iS\yC T *q:{BtNδpU6Ig]4-$yÊ^>R8)Lw  v|z},'<jOaRVx0Q 'fJ ;}/zo]W2Im˂c$b~yW1F8IRVAX ë6Y!$p\`5H7W")3檄3vI6CCڼ\T`~L 9u9 zoS80ij)^'d~hdQn㻐МB7*>tGXcL`|$JX  M|RDג$rgLGˌs/zLVx-'UXԘbp#6\8::Ub]ud2 H XK$t^46(gF% (>V_2&Hy5A+MW`<칶q/g1•Vb8aI+4p[ML\SO'NӚ &Y|khiA- (<&ÕZu(" '5)yIxc"8 lPzٓ2oIt2MY41hTx8fV:i%׸0x'MAJkfa\˳[z\VbL\=oWK?_9".s? _Bйa*>T ,C;;o _xE3)`Hewjv[?|8aywV""vleЪ*_BkL)+6V VD(\a ]'96+W GW2su5Äx?0*(kHO/钩ul:\ȸ8Rleb`8Q{Fy9g|ٴ`bQ~v0W3t= 4d|g*aDg]Fۚ[Ua# c8AJī&TЋ9ϬNff)Nx¨lei' ds/Y FfQ"3|q(Ե!":Ƞ)L_8%NZ:WS=a6n Z7Wi4&~XxZ>XzzqH?[=gHoJ/`Z֦埋밓7sljRrSi=#6Y<ˆyx_zuZ7/#ۓ݄s McıܠP@b +WbUh#LAJX?5"s E{{ip왪Q^*,Q[^ 0 *cHE =Pa :P$k\auʌ#~̃ /5Jq[Yne&ЮOwU5 cixkRşOkv?~^UsIb]j9ptXj Œ~e¾FY[cLK鷦Ֆ'hy]aic//| tzŔ/N'h<\'zgٸ3qߧJ /&gKwӗHgk:J\Dz`}ݾ߈**7x;KuӍfZ2j;ȑ)x`d%Oei_ikUA J3.fTY:JRJAT+ (Aȅ:MFKBnlr-)9Xn^qڽ0>B&BB}O)h^N*4Jdѧvr!՜ew8k=dtE՝d0JZMM[Reѕ5`)M$ڼ6c>m'+ I ͲdabSܾRYl=v=Gٿˎ9PjwKX%uVӑ=ׄEMJ5:`(̆ *ڼ:`[T0]ƇnEVIC~m_'}crKyȑg Pz:(U ʛNߜe&ejo^իVMJm2ށ/wIBJ;DP$">w8P{ey~%%Rt2T0yѴe¹0g9*,줡5i-KntCbkz򁓱ZV?rK.N: ̅#1V 2-d2Ȣ$(j¾QZR_Nee/^6)e/2T1M1rWIJ~ަ$ +ck%DB%89ӮRp (lDг]D 4L@"Z+r.a<Âr9YgW]XQV,WuʷiWXj(|\KmM7',ZB긆j3 _ể,6TZ ˦IӁJ7c3 7Ycm\X ೐Sl#k ,%͠ĥ=mBGsL_sǼ@7s v@;+ZpM"4jקy=e$"j)iɩ83$߻'Q92A$H@f! Fh"()(*Ab* $b*hJ*) "*(J$`f h*j`ihu3}zv!ԣ<{ܳ~Jι֠)"A* 8q&0oplxMXێnXŻq̓CE#4vq4Ŭfkh'wfV#\$$=Hg,]RU;dC*:y،5rݖb֛ KR:ޡ|q*Vi:rg)C[t"capC-Re9ӵc>T,'BpT3>YuOӑl-%Ҩ:(dP< "ZSGf#z ߕ~m`g%Fl=jBiQ|8LHHMÃb`ᖙKUԘ"t$HӛFT3S(fɘ!0>\I FOKȬ\C<Ǣ8V;t^+ IUq٤]ܪlt?8K; mrѸ :d Ld`,oeT**H7/ <>Ĝ νė F&xLuǝS_:XՇI%3&gz.NfZ;Β6f2h;N[ǖ/#fw+= .j048Z0$d'> \ᦰ-8n)]h"[ƟJ\2ߴAc(c]/b'֢rQrQ\C[+x+B3}`c ;&bYGI!6 ?)58i4(_2/єi|+ے W"3zv{mq랔ڈ~.>4xd`=6r*-[BFY*rY0.N .2yMqkZ!dHo%iI|1\)η&%٦ÂLI1,kY }rixI뎽N:s5<ҘuDR^ CέPoB)5@,P!yYqkE5eU Tk+> uV<,&>ɢ^_U ۤ%uI*CN`d3L܋\r4]`ꅗ9r;<' uL0z0^wmӡp'(Qڑo.MYtY0j–b3?7XFCmj0Iuդ#a8ۃقD;}үfE>`J37M\2e泵/'$ޡӏLD{|Y(Yt\Ya&h:CbŊE?C9u7Ur08γ ,ؙe+ #)|i(tZ.JeNca|%0-vɣTzŠFN珜z̎#B2dԨxh>d~&S} k(6Ty}ÿ.jsx皌W08HI٨POVh#wolx0[:$dw,_KN0N{U^aBYZ`{ ?آm63,-}6g0g 'ZX/9=V3IqFE(փ)egR'Ôz^5V >ᢺg+Ȁ0b %y-kg^2(nbJ*әUGs]ojS+QI_,. MQ8)zlyT3zcˆyܺ~!k\ה?f8x.4 qTRhbl'ӑ% j{E\2E9|~L+G~dARh?=;+/~,Egܹ× .3INF.ĉc;wO':ALyeJ@ ww%”h${,8kײkKj-6VҔg6KfRR&]p# #1&zOi޷ls:q OY N!"RC!uW)mLXДߪlos(>' 2Z(~E&S'RPܱ(gg+EQieem_!9WݚDhh`[8v<h8+0W`K7}#7uݐpQr"b')Npoike͔*ySϯω܏Ybi8B:>-8M`p:NWHaw54P)sLd rg[OO9DDak(SAhH fg Ƕ֊Z|̭=g,'zkl~/i4UbAZ;rCYmg :BsU뷇!Y`۫N#<y{LJb|mzO[{qZyk(h|v4ViWb}L5+nAEs͵k&.z:쎳ǚP8J+{OOPZd#GP {/Cr7?EKB8gyR'5J7|TEyښ0U&hߔ({b{9mkOFs{`]xM5i-*Ζ|nA-OO}4Dhҩrd`[R 6wˢ;?=\icp!H)Z+;,ϥa53 8f@Xd!R)ƔNQ~O~_8ymTڒ[ͱS_% v hX1f;{{=dFyb^fF_&8ֽ45q[Os~>s~\p/5`QD#5vJK_f?aI)|أ㟋7."eMu?Pb95K'V'uj][{4I vm B:ࣥ{)_Is~فi{1w_ Υϻ >ϯԎ-_g:hn~F|ep#!=XzBTHV b?'UAcVvVTRI%̿Ӡ1{O';Vr33)aɘ%,CNQ NS#CpA4ik7 \{HLy>~Wqonwrmz JwV/7Mzִ~n9mXׅQn.)-4,/"ݒ[:٠py˰LL@.n./9(߈Vٜ(c /Yˌ_;#Ք^:)v -m|KJ+cM_9߮g\ 17^W~; B$(]lSTQ⵾1LsزQkIc)[Jj{Z9x4 3Rd[,}8~yǛFU50^IWس5SP5_3KHy>۱,)a-c'[MpQ¶Ԙ~.ͳMQ^Z_sYjCLQeërin^.[E}t:(&7bV+hF#! >fs%VԱBZiWC*JOeVer`AzV*Jٜ_;"II"0(ʡw{zn5 T{iRލK5^W1>пNJW>F7Z9'*f6yUZH.\A,ڸc) ș5!QCG9R{N̲Ij+6z mFfYPDSMCuªd5ѤvSu e#=Npϵ:3 7 iVv?psº5J؆){8ZR9u{gت%ַhdlUU83ӫW2_dLNLe^[8)6pE3c1R + 9f3Z;iʣ‚%2U @Fm+!:WVfR~m3:,pzBd˫yCLڕr%e }}8gֺf ? hBZ(Vj)B)}#S% P|!]IDE%AS MTDIE1Lwzקh |8lF0ϒ L5WX 6V6ɳ} '[g~ݝJiZʹDZ$>Rޱ`j剰js1g_l ~[F(x΀ >L]p*yYx$b7+xT?d'Nx+^q [+je0Hgn U>$飍&["@.bn|L͓Lvѩ6\m6y[kό,^NJdT|:HQܘq7~y܀5(2)4Bq6=[eM k, 0 5_9acO!ވↇc]Qkv_`('" @Aٶ3RL,U) s'j?zǵUڮ[<.Wv FIF} $re@bgGtTu&T~ ]{_ UT)]-?:k֫KZ]50m |zCz&ezǤ4~guy.|I5m$K%\gc$[Ēu+DǪпU(sܵXܟ9"Z17hƳݢW!ML=~ 9-E7ъI|~(9UN}kxK3d,ot洤xfduhXqEhUcO3SPZlԹQY*$fAP ()GHf 1$-Bc(.;{Ym8aiM6r维*`:?~ cI|'nʒh)@U O5plPtgMiΤ*6856mݲBl]MRJH 2ճtxc{O.ĆR)U3]+_(a Ԩ$df~2M*?O/jU̇?[kNfn咫h"pLCRߚ/L^qtzNV1(PW(8 j!ȣV"MxMr-dg㵃rǃdYH58o-N7@0Id":{C ?;IS=Pnz11+*ߺVWJkB(meJk̻D[2*=ڡtve^Cr"41%2unիDaw5H"\vlU5&) "`کdh(R=#A#X_34r{(QSJ&[,TΙ j3L*P,'ORh(Ȥ%Qj [LQ:PTEpy9=U/+(.Yw[\#W`ÕA,[T$z?M,: z0[?Vј?JP@S 6H4o1Ke%J͛5G#t_"{M2<9$EHE0EWy/P]Z*xT:(1UPTLݘ#e4}R n) d U]ܦ%@ 3 Qai$6˰O}Mbzmb$Uɻ,̠8,2l,5CosnBؓY⹲ϕ{WYd3#=]^^±I̴E?ly@(hNTټ<XF۝b&N&n3gJ ugB#R},sV/.0yh3'{Z2Iңzsh|u2E.+-k.'A{5H\ 9uэ$βƦXQ;'u[,}n94# SIn՞>npFHcudmgORƹ'Wղ+?|__%6xZQF:=\2 nLT֏҆K Sbr@PT撮1Nդ𣥥>3kUsfTkU/^>=XP4O"VA3kE$M G?Jq}2n_Ѯ>w8'ɲ񼵿?M0~ˉX~s:vN0 mSwĂITew&=q-l ۲ZVj'I9;[OTMͮ[nAY?g[Mݦ»٫e."J9d|MV094מ;.^b=Z?kGZ_C cwsBYKy(]o QyNq;?ε؁) AuT).O{7vq[wQ7~0,>G3]sTȻqi\R!CYlKk(H-iI'u^reD kV-;NRd:̶*pwʰsm3R.,}S7\PWQ4ŲO\i0nץͩG靏yz+h㕙qq%LEw ~eNZDiI2<Ҿϑ rmS'(mgVicO QCZ6ULN7mUT :k,y|l JJJFz.>ZG[9 ;),ULXîJ)k8yf S lC`OY@V[{UPnZ۴;WsLf.Zqۛc/^=LE/Q>ܛSnIiy7^sߺ(ϏgbY_5e;2u뫻_&?7п'NU~>SnrvL51m-U\ 9aCA/bd,'4]wg~K*G*A!iNrA ,k-hZk(6of Ddun0kBUx㮘6=$>t:Y_[`lS[H|hdD Pb&DBeՠ`}dGW98 t Gt:?jW5Ts[O%^ǂ;%; e3"&_▣HtGdeIaɆJl BdN^]YXu4EW^vZ7q"x$IOBvY*TYP86 hWi o{{׽c1#~uRQ.)w-[R Ll3x늵wo('r2y&@y8CKԖQ\J @ C|Uc^^ڒ_}2mnn4gwxU6қ|y',p"tg&Y0iW6hT{i3ۯѬrta˃`mHō.qJrmj=^i?M[v{]~Ƕgj_yraoݶv0Ds^196z^4 㳹ɲZ`'bOKD]V%jȱ9˧8똟?smcж菬(&Qu2: _ \21z{iEľ?ǧ5~8 uZu;+IahmBfZ|~+,zЀ D+ uh8* 89>oY>]-D;w1G5?Z͆E/<-y@k8db %.΁׽ؤ`!Sl M6[gtȂlI'/&D`;җߖ4ʐ־C)K}Rbh6Bu3}݇3^cneʲ)c=RqXݿѬm0O&IzT "@F^zW_-~*k8sk3<4j(O-f-J;Z:Jw7F2{pMHƶ铼J,vXzD 5?&O-'"q` \̬^T|r`N; 斆ۯٛp5 QL1!؏'Ňc4HSfF*$>ٮͷCOVH~5m1cEp?TPRziHvtˎ_[{PQiY<|{KFS@j6>/E>k `~)0<-M ŷ5 qA"t c4'3TTPZOahȉցN6hU[oǣ'<퐣""Ub)IzFglEDIÉlxŽ6p )f~-? ᠾL1&z0zUE $)g0Y:i8bx2pOLbؤ(<9c`Ң_ P<:뮇xiyIw;֊*3bxm(+,c 'ô3Qer꘬'ЎykAJ5-:oĥouu@H#OZAwZgӕ)RW؈#>iZDI+Brr+0{be[Uld \h^070x#:ێn9dY}0(kRݐNXbT@ziM٩m!DZYh]ńgW'.,͋C]V̷2,/曆b*|pىh k^=yKX2.wmL'P@H!)@atU:O)6[s)·pP(7'rk\3,6&g2)5t Q<`ɵ-CчӮ`91XA JTǙCksNLN#vhZjךڮ)*>qkRmu_FS u>.Z {%S{/΅ξUY5_am!$ ?cn5δs#B.F>w҈I[YZS7SUKOz9YɃVEaW_nz v[A[ИۗZ0'-8ndb%nML:tkbB/ #z6i]!s̯FĎ <n<.eIZX끇ٳn4 ynkKdʏXKʳ3Yo?eʽϳu)qva8IQ5Vc!%Xv{)[W#=gZJP9CF~_-A]uyayRrY 9@)UECȈhi5#ami0 *u?5+5gERS<@M/MeUUӾ{ O)ȂdW%V6$I(~zZ~STY2LLʘ1 #ѢTeI|:'~}kΫTHh8UJ "30v+\X t"a1~`wY*p+EObgsD9 <Uo2)YZ.ZWEҔ`RdLs" Z@ͯfu;/%窂9W/eVu$"ZIHڌv/{Y yXZsI_(?~pH57<J !?ˁ'K=L68[2ޤE㵭0x(]ϦǺlQ覣fg|HV͑,xce&D +MXMH_kM]ar’ONǏnzzYZ.Aܲ,hAɺr~Bt՜ .gz8ֵiR{ED欐UݐNoYlp=4_l ŚeqE*pVueıj_xI|'Ku;+AfF'4)M=vUU,}WreN>rMi9Ӎ9~\EO[/"D90*CeKT$r"~Gدr~>|cRf3MRc\K}McHLlLA!sI𳅲)Ͷ̇4U 60qSZ .ZMOH5<^/x|:"Z^OXhr.I5_jBHaV.v'fx+LFFpfrRs<J]r",VBJ3O[ĄƆ͵ȱѕ'eyESVׁŕ`hXD)vNZZE[Βͮϴ֑gF| Uq#ph}+}yӳ*w} :Fj0y3(Q!->fr:.\Q>7 >[y}XlJx[\Vuryp<5 Uc6a8Q`ݿ_lǑmx,` $_cK}|v?J|`Gb(W,Ir.^~qnyg$7='>g=#-7.4\:@f>$PjmmE%V<3hK lr8qkPJh$ zB%HBP!XOO5'wŻ9OO^s߉ FJ_m$GWhGr8ZyEH^Q?1s:4>xl܉"ɇmISVYŘE|E܍{sI!Sd] i΅w35\~챞;"+Nre,ݽфVgDFLA3e lݙmi?/1ooija MUKuu')˙^א)vy[췳.Fi`l/<ǍC{&ں+gIص1D)}mpM9qC0V}( u nT4ϧߋ߻Ctw/%pOr[q|X6=< aIЩuW*ъ7)/ 6$%" 9р`@RA 7*\Buc}_]-.Pč?Z_yG,f#IM ~@ۯS 0Ǚ )DQY[ 5\i< 2E#HĉC@4 J D@cQAE4LJPA@P(J31:=nsjC $up 7aI%yNҥ}:im<ǡdhBw.ZUq HȰ)AtT8)Xiw$ѭ0m?SCEgg_^*$!_uݴm$GG>L(0A0N|l8훓O7UyxfV:R%%|(YWWD I?$@":%'&< *0*dE.C[h(J'I㓇/5+`L;;/Ҽw"N6)eJ`W@ltmR5Q<ӒbnGKV}m$hͥ'|>6pAeLtCWFd% җ}}yzU-STSG>P 7\_Ӯ( )y^%RW|h"UC]c?ֈaAyI+,4Y-Q A3 pH az jH>כ<:Z0@{^AFOWynn5fv:Wu𹗣6~䧡bq5QR]]=nujyx?;D:MUM|k{Oտ}~|rf(gDR~wc3u>ng~v+;ӷ&sBDj=]o}zMso {޻G#/tZ~t7\&w3֒ط>ێسgHfz7o}ZhtA׺ŭ)fyS&:6tpfk1Km6Xh>j Iafj[>$ɣ#>N~֪Ț*0IOG5Q%9lKz=\ }׼bٳw{2:-=Ey! {VYUi[GPURŔX'73N}q>뭩OV6f?&lQĊ5}z3 hB^EE|7;^o}KV=W2ۙ[(K]|}P9BG&zJWîfT ԗSy>! {_k~ *QhL^UުD15˒MB*\FZCkU7^c!onsxQ{YJ.nWUԛzU'^DJ}rɞTzⳓxo|8 yߣy<+hjT7s_b sV6Y#޿TSyncyor壿z"=nϜmse|Mʼn+3W^q_wέ+3(y\$uzΪrh}g8owy3s/2gߚs^ؙ_ނ%&^B(P_=p:3w1ϿWs]^+ҽi^ _碇]7ѿVQ"3)Hʹ'{ɴnG!oThpj*fQM65}R=?t;j5*u: b2uW`S<4hli\V_okyrB[|V 2S7Ƹ̙j#sy]Qvw$޺6B?{CuahWMc'ob4I$L|/{0/Vc ܋"1J֜^LޔWa_Ez^0S>||J}j 䕤v_ 4P\n%{p; =% ZiUA\s)]/Cg콑_c txNx; clN"$9A$G7P+y|U{[B;1R@ߎM6̬̾pB_u͎}?ֽXPx9:͑I¨u!$S"u8oQZVSovo}|'ï3sSn% lwlJҮ*f/DT k]uYjDi1z2r!i[ aǩau55CҷTKxqf^y[al)&_DlC}>ҹOyUlܺhΖ ~H{vIe-qfRG_X6:'詙ʒw_TjFDNxSVCUP|QmuIFUw XB&H^Mf |%%bG`@ Q;=8ANRy, `L֤aBs=IBh+]GGwi>A$Cll'0XtWweSDWg^Q^/fV<.:˅qZUiDi i4" H~eiLjRMn̟VMGnKlW )1%h:{ܛ;W5ÝJ^SQJU} dǝ|sF紁C/}^m٭)*͘{hV ˙j4~=-Y5&EޔFU\ʛIh^A[y%b/vZUf%nj Oh('i(ҕğ>Vwʦ v-VMFRPV~dg;S2w4(1n"ޙM̬<gfgN t_VG3D @uQ*8Qnl&mۛ5;V&2 pISE<  ~.Оع UfzL5j^K=S"fWV +,|̼Weγ(q/; 4j\*>k<6sl4=q?zBYCEl2шWV0$+/ۈ46)j‹δᵘZhˬlՃB2t, G-uKx:ҿ|)u뿻\~4332w8 zaSB;A~h_z3ʴ,t#WiQL+{s6g%XBk7j~U_hݯFVu0$»cr&.H(n@ AZ"AA)!@B-B+H4#ǗN=wۻ6+s qQQ(͆HI(hvU0FivЎͦyN4xˋK+D;v˦bH*ES.NzIɒ^7(IџH*̝`(9(YI$: v{ \>EW~ ׸֧(ˊcjU%2X̠ND9ݎOYa.(`>cUfin&΢s;9^ U7e K~1\!Gn 0ERalna@NC H 3f(u S\.@; B~T\d2(XGTJXP &ztůF hp(._RlQR"wŧ RlE = y2$ fK$L4vXd#L[|#m/<9Vc/O_H/a ]aE#BG#;\xn/D=7Ii!΍!&'J{*+~~rƯ=v V^\ZPg#ƪbFɞe"6W*x3dDZ<#)cG+geaE.kweGEhr"c}֖.lDFE v$;*ɷKe{IyrifA51Å.h:<-"8*@o}wZZ(od)ڳzX˿g~}uFs- *tZMklѡϪJVQ2Oi_jl@qƐ{+yw(Vu~lq!??>Ͷ/Ztm{/)`v &ZݠbhutM8UbM`tQPQMGbɟ67Vj40ϊ)W *8?Qq17w>+0[2]=e`28Hoj>zLW);Ǹ̊2,4e?81=5UN~zO5k) Bi=O0F\GVVzWIWkw=dѯ:;&1ULAٿ^[`k5*ͯ )4dR̕'9:Pm9pPg*gsXnT_JmKX>9FTyz,ҧv7dձ.v޵ciPhwvf^/6k={q~<eR}Jyq:>E)GV!ׅPvuYz{ִ3]x%NNoνBò3J]f-X̏* w9IeCW";?woH| MɬFrBnu#׏+nF i9ϻX28t)XeKT20xbdpʽ2!.܈B,hD0RqECFь~lώS԰:xVr.YX}h4׷-zUm:ZRmE$Wo*gqhձqUq!lg8yS~@1/(:s,TLjzkRx+1=k1ak?Gs_ؖ@󪿩+Fk~u%UU)voj4H{DثC/>C[dwW.g7myx::L.¹^5 dm /xtzH~`)e*_`a}V Tnw5S#Rw=uՆtpz߇,+zu`9_i2f٘Jr 6*ۖi8cG+Nym3\ZΝ7 ho9F'VeTPfKRyz ׄU<DD?\5:,-K"nҏmYZORoEx\>E u2_n,EUDsA Fknp'Y/u6zcDo|vZCAOnÛ/DŽ V\F4SBO71N4aQD۟,9>>H+p:Gu> uvl@nCA[0_=7sY;ٯ7ktv͞~_@^rqWT35jN֡U|Fχ%[?s'.__st]mZ4BȯOk/ ճY8ōN:qqgF~ݽ|eˏ#=n.xY} /ώz=|ϝwM.TН;NS|޲XNdwQOVzWg9t^1:G g^}4p:[ ֽt޶~^o^xSv̍ide|;=G TVPY*預~(v㟛]+CTq4*`:d4.׷? K>5ﯳ} ,RD9iAO}4Wɗ*>k>W6uR m|~ ;=FK{:7)ɿp >ܿ [K݌~& ~8X !NCv?wn)OIOYmJk shu)nux%&t]HtAZ]‡$(P.Ҕ МE#@d(gS?7BSR̕CATTASHB$>7yn?UUjmd?u!AaX/%C4Xh~"7`{- ?p +4i0u>h13#=#OH?Ϳ0|26AcDž]iӦ+x$rO8{q'M4g:GW_jo nQ @ @J?qMKlOO)LlȢLuKp@р)?7@7mBbAD^9{z+ڟ^l1n(>R`lmN7mg0fdUIpd Pf"P?2ם+&F![OO9:yr $5̑EP*uuIqSBfkJhM PwDkAFҦJ~|݊$I4 G&D8Jd8HiTJ4*j'z@'XrVy@F||w+N@P BW 1zW۽};?{~w^ /wӋ]_]:7v4(E} u~QsӚo jr2_rjդi6sbgbͨdlU5y>0U0 ټH@I8vu84O~_VkXkseANi>BWI TA岶C0h8Q:W)S8AԵ'3By?ֶ zzɬ~C"<:H bWij;JrY䟲q R߷ ND8RTՊDyl檶nDE(hRc SרS O|7VN_(Hh!rG䒓쩑EVjݭ*-*1bg*R[A$  ;SP%BRlMnZR*j7#;w_: }1ܔRPnnXTw?B{+S_Gπ߯ B1R[0$ޕOQ#qO>9y3M{geI7S`X:y vG>m{3THJ/6fӟ8nuqp[̣Z֒uӱGqK?n=\ۆ_ӘKqa{Ӿ88̎Ғ=N(F?|4Sʝ{n3WuFvgq.6 Lpn Ozmmo&Jf7^Y=yx^~~8>yYw˯/''V:7Y1/9ObǮ,עlK{ڴUPYZ`~coO@[c|{OsR_d8GI5LK|" Zul-(IJ&_ $ukI|K'#Oig[_/q~ml})9]αaߴOMR-bO}vKx,>!*?cNhMr{HwktyXG//onl|i+ڊjޥOͽYlbH̏J xB2i7ٖM/1 <3 .lu{uz+,9ǘ@ugo; Ȭ Èf$ j#x 狷wil_Wg>D;cE3RDeѶbg~j p&34, {dkZO"-&Pνnk5V1ݮn#vZC]ws(e^tW_3TukI ]ϭFy: y,_WӾt8._Չˡ]IϢtܯhӻ>a)_ -sqE)1gzIU^z Ɗ$|MȏE4+R9JoMe֪ s-'Zs*F_6R*ԡ]}_%nf՟SW㏙z-`(5է!u.)H˭58ʬ[VS۽^K{ ‘>UM"dujj+0SєEŗvKR{rO{sl?|ʞC(=)+A$ߕ>yRTe3t g}a}ܾjMlhsoDN"K N|&H*RRWC;vj&+Gd#LO)Ex9>_HʹܽEFw2X3]zNZ,W oڲg4G qQ/FBĤU|BlUw;EE.<7o}Jogֲ2e%FFƍWݰO__LbrZMeiO) |} Q;tO/VI[w=??Nu|y9 E!R/]JϧD}3SJ.J@yߏ_]?**}F]n9nAߏ@@ V"L8ف&_uER?@)(\.Gydft 8[pz'_?DeUSXYYC(qýߧ+?'@E$ y%/=ϳ#gǘs}p}F>s_ x*~)l9lc?5W(ϳ2nثufuSoW]p,ny(btNe. (e);~}g^yg$R]@/+d%S7?[wamv7v_<?H?+ǮF^cӈ)WoӗSD> !L[֍Wܿ޲ks'ڐk*$* *`ɔ\Csn/b!=jt b2j^l@QGN)@a]L#  HF:'Ɇ2IUv4 Vr#%P:)H1{/R>٭jf=[+LbG&*b 1i|L^ןɥZ+JH{{۟_O]ˈq4=<+gGo/y~K_7ߎerO/c.>~ hC _.*Y$qJ9IVW>@OpЈ5{3j~޽0Ð4ƆtZ}~߇>yVO_&.g\͈qvϫǨqz Vq#OJ9}K<ז;rDH zϭWiz~x^=WkzvpwJU usp񷡱8[%=fKZ}+ Te'20zJk;|U}qrȗ +_toF:_jJ^YҮ}0Zr.k)㤨ys=WvhԷU|~#|S} {4_3B~T&طKFa t}QPxO'o"6 +Aeђ=& Iė(b?w_v~{7&hFfP!(n eݿ {8oIRX s:wf,۹*S<>g R@2ħ#ݕx47όxW{{uoN}ʻ4HIDEa;54η5FqFlJegH‹<.D__a;HJQʹSJ)׫lל_8l˞}mz^0 ri(9!q Q3? W: !M{T诔f^M8|$GMg#-隸CBh\]_lmIׇyȕg*{Ξ{-?.ml:֘QWiXZJټ>}~-h_ٸvx\޾tMv떗5[DK[ lya3RS55\,쳝ZG㚭kޓH_ɋ̈́/b2)@D$o㖹J~W>>k5)/]6ƿX^My h'"cٮ믚IvI>xR~i*3᧝woQ])s~ , m vMV,WCYu#X w[- [|9q,Qh#{"+nZ݀ȩ7s'ϥؒ;XЀõKrR{p.y)8x-ǀ"Һo(f}g:uzFg3一(88 O) PeMf! +"gYG]`P)<KJ@q<PA!#zsȾ m:lJhMˊ,cCx3 EMsΈD ^U34DӭkO6@ÑzN A8N<1p걲iZH!`ZthfuRktݷS:eh.ȡX]3%f٠w4MP3Kot7jhVtMUSusr)^Sg'zڝӗp*:L3 Ѳ!Q7y'dMd*L=ݦ{T0FZhU3% ȩ /D[uVO'6[&ۓtYAmzz34Lǻ6uVI nC ځ{nwQEClʬj4n&w[yEV)ge;[zfh^] 2ŝ "[ e-jijjsRpnU\;hjem;djEezhN9c5FMj-Qwi]Jx) kMmZn6 (HZ{-=TӻX]Ԟ$NH})͐D Y n?{ÃQûr,dVbvfJ*իyAeL-m`ںٚCAh`D:aƖԶeFZ2&*w59ӼѬ4D㱢Lܻ2(D tTfeЭ U:6^ރNUa8??]u=]{KٰBPDhi:U2g-k]93Cx*u!:#KFW*bl劫 ԻBFs5FC5ړҼU8͛ճ>^T5's`N/FcVvkbՕjPn$#Tw7;xv|kGȸRBU4\k]{h?.jwKM6_;Z>33\ou3gF&&*CB_ ztofao['&JDl3MMz?8$&FMIYoɺn{yޓ͎0NxhUSu4rjks/2I wX7&bv*m!]gls1J]u)Hyxk'V9_5@@(SB bu전29ByX `=@-*kt.Rd@!&G -0 ?mK-gPQC잰5bz4g*X@tn} {molBLBIN :Ȏ <=y g+tj+;&dnS XW_(tJz:KL 0) P()R*n t#"R}KI)O$ F^2IGB35u(2Kh>\ XOzkY~1woE0/erCk*|ϫ>jd]K,k_>.¤pSyuJNX(|I{i+ pOQQww uS'>?ZTTqUG\&uzOe=d20jԾ(GRvޖ<%)buY2ޭoCK7 Ac>kjkz{hLd6>k+N_m?y9&KcJ]){~|_g1_7!46 x:˹Vgqu>T2ΒԀ ?i WujR09K./>"5k'Aӧ{k)X)I[ƒߙ|]HԳyJfA6Y3b=ͤfVFsXs( £š@[@yTrf\vUzA!v7vﷳ_m\|ՙ vz% IxHKbT]oMSGf^r!+ү}_d sR˃fz9q~̤;W7\هΩ{Xlm <ʽQ3"\";Zۨ%-AtPؿY!Mk^&W f6hWdw߯B .=a d #9Hd?9Y%yUy 2 7Љ6Ø#}>ILyI˞`_fm'ˉtm5h=QL}n!h=\9gWoA'+r e&NsW(W>񐜷x [>xoC?>юV(8-f%_{7˜gT_?Yv\x=3mz3-O>]7y_wb3K>PIyD>sv /I7$0I< f,yf342Mi}ouç[d 3XG~3+-WYLs}*/|'_;/?&h_U7NOoQcGi$ZlxSNy?4:_U6²Ii^D,OYf_輡QhBEJSj*"m@o4EA$[IyBHJiƊֵ^AXEwĻR߮]Ǟлo+)ԔR~(ΰN԰Y0[i@VnIhXd֮,BP{㇢뫧F\hvL$]ك4*dTVP&E R.dZ-.F# ^-mѰe#9>qC%2C4G,]I*p\1i{MMHh(jٴv)Z}^5!D[^QNK-Ddʮ+Fza ϩεR%PF<4nEeqHfBˎjMJM.wۅ|4Rs]`g. kq7kmKDO9*gʷ*4/)1Yu5/!wo{ 79 "+~7/ueMfeYk8z_w+{zXjo->TҍVt=!fKK~I(!H3[_>3[2g(s4rIg3{ek>ZORTeY}Hds\Z?r2›ʬNJ̒- 8\A]L7Rvtd[7ygّ]E&Vo @(kf~1èN ~Wiė"\P'ʟ.q[/~;;'m퓓/鯟=|[dzџBL?@מSH˿S^e;[tFSͳ?w#2g.EYǃw;۳rӓ,?;XVZ4ҹ iI-4MGbK&Xzy"rZD51'|gEw޽γl;8sg&dƪ8Vhq-g5=V#/0͔Vc=d!g/kT椎5!=D;=)9ˁOgZV7_t[qǖl)P?AE$~T'P!#'QW_Q`nGeӛ>;a׷_U=_-U;%T8jPGntJieoC*Dy]]^$`Bas5 !l$hLgȬZ\R%[? 3?Q4xɊ珞S~ߵ~HOhPBI>I@,peC񰘴wOԕ93j긝B[y b[t<:݂v=B<^ ;ڨ׍'H,P1(v]*U/i%MA:(MB|& &Ń -}4E\ Qd$(y5Dq[CY5@k c")2% Z /Jd@q/U롻h;qPF&Uֵ \X`A_;p3P.$s6Ia6e, \ F! P "0gpRBx] 4{Wpu/Z@pl]%,Ne@49(jTM@u& n`IK'wC ,+ӌRXٝd¡I@0wO9d&W4J_;WPWTdl3dں{OkY>SN >& h3X.}x6|eV6vrcGn8V"׭p3"F}U}Jg߹~s azE7¯)bBu ֦[VgIنX|ަhW^V5Xz4},ŭ;Zu7UHb{CNm)?XXL=y D 2<5nNBguv/*J8)ey' nC$"|htVP EbP(4Nx#D?1BTP?Bdi/:r>( `?"Z#E˜$xID JҜ{%8"'>Xkp{K~&LRg.knoԹ ,vo>]H '! KeLD"x&͐.H(f"(Q`UPdӢ4A"A/ .3iIӄ3& h4Z[ZXOW璦w<=dg7AuZWVQz Tt7]L] S*}.1]SP[aVϼ֭ .Ba 嬘&o6\pEګ\uOk|ƕ6l)yh׉g ۖ49FK6|R9P9ftCUO3l9-xն⶧'垆c:tJV뵪cGSekH8g]|cXil9Į'1K&&.SaLWkZXjl,*uL預THBH\;p1lkzpo-O|򚞹Exӹ_&f#*\4=W4TDKu6)/|RSʒuu{@궻%]UQUs$ CSXg QC{į ӺOX/(T$S\{J FU1"}}(%kAVS jJQQ@bWFG 4=J rW6(=B |o0_=?<9*Hh3( )&&Kk?>.gd̢<يUQ kwDOT#5RI$.q{'( ȹ@. P#Ma@ݒE0RWiNᴣn_ڹBhiALrLZ& =שY( ) O:ß%8e秏V<̆aϩt.=t 2v<{{839:fru M(ݱrPDq*ؘr7 u>|2>j1gY^\]$rzu޼xWI榄HTcXmAϟ]pj#3!t#ZH\X?Ux>? Ef,Gm(>qf.j,!QF3JyuRÕ4V#Rwٽ|,oO]`:}HCA](~+,=zHb&ec& S͹;֩Pv|VG9'keIRN'_AkH wu^-9Ey{eOR=/:~qu;^-)f6z=3w.vzS mu@,-M.+4g$GuʭLLB4TK0MR5TE3EU1R1SLDTMDM$E0BD4H}{ AHQT)ĥL4SU1EL)@j4D4 E#CUIBRRTUD) A3 DIKA,Д4SKHC P?.qQz{v4Ǹ*k9H';Ǥuy͔ss3 ?WEHϱfVTxgo pE_rp?GC?9ӐXx%I!F`k$yiVSWB.o8wI`C;/C79 M*sCzs 1J/_?!.lw׀d$(=Rm-]( #Vt1P* J+HkU[oUZֺ|=NXI֐3U>_8^yLX+Vʂ}xʚOSzf:ث9J> + OZ~8n{ɄS{<\/LuuThZww ޿VzCd%E1PT#-E$DTQUTESMTDE0&,=ס`Ŝ(O dz\4u*pA$D,᷇oàQC_{oG$2O2 m8MxHiZ$@Ow:r^Ӹ \xxZ Chg_vs:ܺ5ynf q01 NSɉsXB$iiZ|]N_2} - ;Iwi4B$Q1ZrN M$H(aS(0JCO!]'a li 9HuAӎL&؜OgQ>g?ڟ_zXcF1jb+cZTmSlQmj+V66űZRU DAm+Em TO|đlm%6?h9Ŀ8 PTL(!A, Wyov4ؕ5G0B5'zKiIx?pb# hZ_z7 DA%E$HLBKPJDҰS%MAA 4UA3D4PnQ#ϝk1uRy;[r/.vKf!J1  bvNͼK+kF֍URQqARX6(ƢJM |z AD@_iR_?5xpU`!@;{@^Y[d>Xmeӝo݈psuЂ<8Q(o<@Sn~eWu B` X`a"@HHRM nxA;L2(sl;ɡB36D&9b탾 > `!$!fTdbTDJb$ 9d "9BVBPݚbL3G h$7[ڼVq8LM#,1I21#)*@""!/uஈDﮦh-"-@($$ L I H)xߎZqk-yZh]R$r"bjd? 1+$$ A$  DD*yr'NO"fflU̪ym]a=qXd$$YBY!bT u9kYe2/5r?ܽf TSPPITH` !ZQ锠 ׁ H9}fj/N`e! IHh` I$Aϧ!d#|Bd =SZG7wt! &ae%$;"=7Tڣ4Y$+! R.sTꫬYk|oFgZ*J/*eM'e#YwX9F&Y9|x~53 SCOL^|;TBDH# :_3OR Dv-6KMWk յgW[Zۍsu.j(溥r9͙uiQZZ)rWGeԡf Ra3pಧWdL=%'ЂJgfi\І%RmU.?58n@>;Rn샑DuYkMZU;?g`[ۑT(A$Pj("j*h (" )F&RH(hBj((H(Z*H"b"""b$(Fqn݂|u|pu8yva1Th*CEUG֠^*&kyCP&Ifh hv\U0qD\xVkmBRdmPZKSSA 5+fB_oyfq2{&f H!&H!P]zpjFQU;sD_LvN Ạ!FU]bEE/EzO829V-L14 @՘DCB[ohTMOIeBBe$E{6=* x!]'nf&^69uȂm~n3V:} & 9t(O>/zbmiHx I !!,02@3HfuNRH!#-\t6 S&IPDPDeUʓk&/jQRJ%mQH䤘jF(5ܠ́ sM)2"xDhdnlT_)+9 (B;o0ɁF,!qk!=}ɟ%67NS7 Y}MAe` V S| XT6rN(ٍw/77tN}Wkx램;&7KZ=9rjbҁI$bH/zc "hnTFUlPcUlVY]zS6O.,F6y7G]k}{ޠmcFFvmm[:VEնR#R5YEXaD`iwl;k[|lY\R72; 3S*3fV9ws'*}aKZm_˓ ^Jl,Ѕ K<?T0 A}]YW;}ܱYX _^䪒"hi(*(*(h* X*))& *)J*b !""`iJ "J* " )j**(j`i(b(*h$$$(bfj`?0ÞLfǥ9$(&ۖG)O9ZOa6$T͆Cw#rnSޚ VdGOX6vR!)Kc6taq7Ӯ?w&Gp>o~}VqZRJV-Ekj6f֭ Q٭[űbKUPձ_?d f_O~=;5o`^%0d>\omZuLH]J+X[RJ2 $-!KAJ)@rB-];DfSZ:JzVkLl4&`fUdaeyfQ޷#`Ë{܃~N6m>AŞKЈU߆}qNki>c̖>ҟ7m*?@֒O<'+:7"KCwO vb\W[YA ʶ'_G\@׼ )LJJ|?'!+@Si^*1]n\뮊W&*tl@NXoc>O7z&ZzK_uG|yk^P}X aY=8ڴjC&j\'id*)u*XUY,QIJWBR{|v5;˖gCRD#LZFk{#OaU7 471MjuC]YKꊉ<:lM@%;NaleJgMZ){O5YZؖ\'bZŧ0Ύ.5 Nҭ 4Q̿بJkZ,Aǂ0.Bd 6RTVM`&sFUڠ[j؆VqKR2ƿ_$;`EIT?5ӾX)RXp)g.1i:ʫd䨉ewվlU+?E>JDE4|*a݊▙yY]B<Ej3r6b"0j_O؟gN}g֠HV:Q^L?;%B]e;K QL â*4o%O] ޺zTBHr'::kyDXXhsS*wY0krG RQ+eR(yT7|;DP|;/\::佢DR.ds,_#$Nݨ-C$KG-/UbžΤnyFãv9Ϋ,_ZSfF]NiՎuʣU8{Ac=Sɗ#k`X92rs 橝ogkʎD1bl yZ"ʷ3saBwFtV[w؈ h}?h VER&ڵXѧj8UmcF*mlfʹcAPK{E^z~9p!T}! ]|4za GjpW +ky 9Z]{<סlvD6}c~^?_ROx4֪4iJ)LfVڣVw@FoiX#|2q I_k8BKGUǥk ^k̬;FQ'ι;&9q7YxXwǯ=߮>"n˱(q-k|x0u1+b`&MeX䅳{ε1kF# $kR'Zְo5Jzݑ$oYG%u9>&D*kuZ ];@t:48wW3{{ڛB8-V;䉐 ]Hg!UOf&I&Pxi? uKqGbyd1\]p,{esX3p?$X  GeڸÒGzz68tRC)=fS؞z:U:$]obu8'uiogfѩ%ZĴ NsrA>[rǯ=\}<#G[zM>>@tNQIJNmb-ZŶ+6AՍQUlmkDZ+mc`v-(D =n7VVcY gŀVoŕQlfMǶ)ErDDY;fqKWeǟ>i BR}~>,^ؙ{XEM^Mj5 W9|3ׅG6xctbBѐ2dIrV΅Lv/_|I6%(u[ܴx|._{_OFgA|CP>`PIVe amۍ2G $@W.F-l1Q[1UlkZ5:Uk_>;3!լ&TSAԸ o>kOH=uaLj BskU|VE;tg0W0U7jLw"'=SUU:(74D't7GFsX@&kUBPUBvDE5MkmVgZƶ-cPYŭhV(i1ZM里ZהA;HhedA9v^_h رCS]pbG[xX@o*`^ `y5D_;3UҺ==uF=r{"̘8s&JEO{ޘ 'FJXHgVda.T]gwz/lm8sw5Xx7:Bfn5ɾf% CGUȧb(-}bS9YD + S> ְ!wuefS0O4F̞GZ}k^Nv̌Ml_q,tєzU."Ikd[[ mno`6u&LjZօ;ͨ5UZ YMKtܾ~=WvʼJ7<;s&66cVSmdر#kjѦ mXjj1QZ&ִcm ##iJBkwx<*ZFXᇗmk/cij1-C@LPC5,LSEI@UM! J(*w6n>~c ==)=hó64pPDB&"I]ur~z*Ԏkʰx^ќ=IW`֣WKC bG).TW"𭌵d>&'k9!u#7ѩ}֧}wgb{ꪷvuC۽ObdpvbD:ޠlmlk6'py B,vqC雂0ez|uUG"{|nMDG0ӝXIĶM]d^ ];DˍmG|ʾ瓢3}zbO !l@oiKc֬LlpްZLITuINpl`nVM`hКH3ZuD֔4NK.N/LMۦ.`t%`vq<@~/#UUQq +ZJآ+{y3i~޺aJĭP0Ɣ&EjƇ%53Q-M[&QW4-d VxӃa6 VVc9D-<&]^K3//cg9"+:6Ӻ;l*[5ְ>nն/nXrAKR6Hf,E *C%f,V7"~AHO/*G,9}5(F#}b'V/]IKǧ!Qyutb׭LЕ7-=g"fraڋ+JJ+*hQvEInd'd(đ)XFm\Q0L e`E@ q,M?΃gzx; `?9s%ةf ȚT7QNJAvTUW Im& X@CxE DfD$T(mbx(EbtEs3ȲMRW2X Z)5)3AÜ)A:N:Cf]H N8A.F%(}57?Ӹ?RX(贁!N82X- [Kк r:.X6?LvED-'CF7I~P6.;='גiAA@ #CHE^$ f'?#[t!}SSs&IbS f_ԋ Xe$+~N{O8F%J%E=n7z wU!Q@2wrEll=,Vwu7Z+yVjq wbYi} jP@ k*eDT_H((>Ptl0Fѷ?N hۊ6 (چ c{ȋц FP5}6vbEh#v8i4,Arixӂ);J`+$W0ED j,xQ{(%HH (pmXkg#f Hm iJ^(#ٛՐD=C: r͸,rx ]%&\@6C "Ifljv 0X8>(eA$$(vᦠaAeAۍGnuqXeNvV$u@ jww1܊3PKPjQ 1Afϭ00m ocX'X:fL+Gk{sQ bYmtT~OBADbDPw eDG,*;`:u*oz!0EJ'}//m gHtL )I񌎫L!˜jA,|9EķE hZHuqĭ/=i1 z7& ,#Xe 1Nk>匒 IGGLt'ѫIm0c_^DŽ3`obDbD(RvJDf ug_H"pm! cr.L F`eIRXǍ5 P8H$f,XnS~3{X\bJ|A~Ԉ9oBȌ1xۙQPeh5QamdE?Ң$vlCq;#$خ|:RssWsixt2z-FnٷsN_'GtLvfB=^0 %kPՆngf#ClP"fUݬ@;49.HCzFd <1DK`KkM`D.ƙ&(!F0D1mԉ&%͡^ox*?c{(Yv~^xQO)Nn4!iIԄMLDXl4'ىH8Hf.&}ߢ/aX/Z>XSf±7^"!:97R2U $!&.7SNbA1B_f?Z$1iF?&Cjz D TkulR߱sҠ,$ù!wJP+uߠW(\V N[5XU\nG R Rfؠ` q8Bj>njE6˵tK#5xQMVA OW].R($C!̌s2o<:sDfX0>|]EA އvZ4/)CĪTcOv@rp~2/[|FFo3@wo܈W>a7'YE" ="0z=0|G_zELւ4AYRU$C^rA* c7OE?rxM9j2$RX DTQA֎Bj6[dJ "k!7|;}bx9OĴ9'd(lB='5)N2/v9=u:"u`(Eq ͜] >]̊@T w)3'm 9+)T j),uל824=y ⰩxpT;)@X(#^8g^KCؖ?/9H`It GUA?h!`W] <:ɟ^gSBGL.ÈO( b9? >?Ҟ|=n6ǫO W8hyE4AumwYS|w#{F}WϻOvQG ?_G'kN^6$lT@?O2|ͬ(JC@YeJ4P|?߯5P"(ZV5H#h5.55CBLԠXVOS(~ȵD͙$; OM F(L0* <ㆿ̼f?Ǵy~y7Vƹ=DI +XfYYT v yMls6,Axk.LLDqkߟ}._q3 ţ-SU C cfY>D9vG*Q` KxN _p&447$ǧ牿7>+$J0vk {Q< D'Ȱ'>?y8 lwEX`4'7x' wJ7_k#,O?m'NՏGCg' 2.M_)~ǡC%ВK~0x6{}O3a$85Ɛ'~<-xxR<P,‰B@Rhҥ"P@1@RWihh(+ 2H98(H5=ܯXbLev݆n}|4|}NDK{,>ifaFc*!#vݚt\SV:3C()T+CJPH vzI@'N3)E!\IPKP" I_PyYYG_L~s!TRE\Ȥ  F(=wi 'nCBk11Zsbg/3 vɼ?c8NG;^(Ng ˿i'{87~}<БCyTʏnL& ":ҏ7EFQxT HTE$zO4!oy'>5?#OF|դ};6~< hqpLo?A69 Wc󿟰s ~.+46С r\/1:Jj|~"% v9ȏaЂP˙cT̚TPHs?59cq.qI~}oǐϖɂno !!&zvoeC>CV̈NWz]jDA6'Ab:q;̂w|k6d\yK0;`3f@ XDTl:+jy SH*&أZ['u*uZrJ'j gOMl^~?Xngw9keʚ@ oܬPW; T!QTݯR0cipN&r_hvFbBL@7~LupPA IĔ W\<ʸ>ov{)}ĴP +JG\x9w~36~ JUW+CBY ;r/Y^^2Aa"u2fF9ŸtvgI~1I@{#_~A?MU $DJ+|)3)fH5f(8i_kK|XAkCO@H x>l<馟jK/ l1r t؛s h3!Ac)tAB>?.p0W0;G?p99h㎄?>9xCDǶ x9tU}03{U~OO G&"%d1UsUsgQ׌qm"H0dmJ$W\[,-q}>__ggkn5@\閩J>tC @ !6)=YGʟǷѦE0)e”Շ܀7LYSpk\GF`jN!󟖏,/#<;>Z )/VaMfbg$=La㼏\Tzw~]0Րz`w@IJTT2h~ׯDvLy',?-l)QC\}c ckÂ6~Dك_3?8_NbEýhx3 P%D~ޮI> h @rI~7 K\>H}wmF`* 2DW+)EᯖPAUZN(؂mkL qϻw_6LL%hM92p;{Rށ>f L,<7A ?D[wk0Rκ!p$+ .<3ѿr6:l^C`:OtP 6J ѳzYp=瞟ӘsG:^!ӗǿ nȌ:sqN ,X?CN@>46][jC렩BsľWcƀvm? 9 kWUAPg JQ0<и%5(),Q<ޓ_Ǧ=7xSMW^"ir^Yd4h9GoӒ^NھgOk'=^O|<@ȋK}o{d沫ME;n f"fQX(N^w~[je?ëpOԲLs}!C?&a)_O-XW̟)<-Ut|h\=/zFt\""e2`!dd(t9Z8b}M8~ ^:|6"B6bA`Q*)> Z vS^Goy~ v@菎yQK ԓvsr.grRzN,Ȩz<$n_ `N> #Qx/|µ%71TO~l};XX C@8r$%~AяVOwk<}-ݒϲw* \^PdYzpOl<r{\$H<8U0QI$@ G/p.C<:fi2R@]?&rہFD)QŁ6y_zN?^}Tu2N v'E޿Ðܜv`E?PЀ1Du==[k.}wLC}C`J * _"g܋<vU|_Ε MtPsG_fwNNFiz}v=clY}%;sMa㸄n?^?y]wU:T"f22!Yy0;a-h'~_ *RXPLfz8Zp(zTA D76% ye.k\Vں'A!gA>qg_?Q38K|QEتn:(۪ j.r5$za{T?9vU:"pݰ EגK1J NlHQ!J*;(,!tIxnd73ɃD\XABt <*_3A/" '4ꊞ"*i ( _^>o&K>_ b9'a 3 W'Ayu3CGw#҉筣?Oj!"H$L&|P3Bk]cy\3~,!~?r;}x7TUӜ=,.t!m@`AƓ~^Xhҿ'z'M{3UhO&sVhh_$GnHb1=Hpy_n킩GC&N@GGSA}a~gc(~I5@|9ssm^D뱹܏w';azWzy4ldOЧH>-~?1" b$4 戇n$zm%Ao\z$3$DAS!Ԓ7h,DWggoYow/d Rn$/z?ݛO(9CٯZpa4SX}'8h:B&E8F 0)>S/a/D -^(^h=޽vP%?dW ;1Na9+iXk>?X~xagXpPd )H"t)&)y?ٳ޺jYrX%妨*"*#ÿ⿠5V>0 pyh5@mD4R?Ho +L ?UۏD*|Lo50A ~HLޭAPhU@Aϧ܀l[#1doA><~yQV!Pֈ* ÂrP֛Zqsc 3Q8;8>l LD6GPޓc|@jxl?Gq>yc``aMRĞ݁HϚ&rvSg{k5S9q|dž]q2}E㸃"8r{ ǟ:olHyw9eEa*>nfxoӑgm "fMϑK~:Ci~I~s?;|=OQw %3K_•EYA!̘w` <!7 Rf3ɭ8OikkR7{%wwIC~}_Xt3FQ_``l Q @EBLȨڞ$vqLAljID\<;EsQnsxcXeN襡ðF vz:`@?~ @}C?)'S~5 tr6݈+Y:JstsG @ 'cOo`pCC:?P xm][|'y^-?= w+[_‡Tֲvlxzx|ȅ{La8Y:&(6'sd?_yb:r-0}Ow7̶%By v{HY})3rqp! mz5xz"9ݾ>ZD;bݹҬŤ;z H .ޔѢӀ7.5b>)ҿlۏi}v0mƌf>[c~;(e '+FLW*) GNmǾyߛr=~o zf'uoV~<"OY!Ϫ~L>nKFOf匨WN@pw]][rN'Z~Z^l'ywg() Puq87*{QҘO?U6ay/C};Ƚ?GWGuѾ_|/Xv?wuNǫ> ٳl(SP(Y ksBui@}LED5TP!TSUT {;ƻszy__(&Z0`zsJd!IR /aj')б >0rrRSQEUEUl-W]z|l]M?@9gC߆C5 F2 (q'!Պ T:ˌ}TztIwuK``D=vFxHL?x/^>eUGɟ*y>0e܅xqPHeF:JZ*<'!KZmoB?j?WНFjx! {5(s "Z]`Rxv>1A&0|5nZ0PŜVMD@E5zN Yf4? }C}hny+O&@PB+')1-ʌ"A*^M{X l~dt_?j`^Eg˕4 BHВ172Ilv?Gs~gw{ qϛג@oDa{ybtiv {/i"  JB i*$b2 p J钀QژX8*ButQdI(З^2{ВeJLU$V $.Q~kșJa{cD?fؽG~_3>/Wt}̦׏Zez_!ce9ߌq&CTDWwȺ"y.ڰPH'(xrܔ"дIADTIB Op!%Wk6?E'&!mfEB Tf#@*ozl-}h6B &,'1l,q O]<"}d2[`zU]0 yq9O d}qMt83ݰTQD`JhNvt '>DdƩ7XR@=ECLa+K(C|^ihCIw!{]AC~)2@L T{5P5PNJP@}!ԏ}>G[ڠ}(y' p9/֦݉(5!M#B: $G!n>FrzYI@QveKQPBk5AQ@W>32ymJCpQkdHP?\!YfaJbh(ZQB\Mu <LJch =/"͆YB]\qU Ä́MRJ HWϛ.ׇ̟nl-n'A{'ӃMN(v!9)PP.!,#:5p!ރgn)~Nߣ&eܑ'uA;4 F* h=v;f_3W1]?m;Ͽpy4/OTK8nT@3'څGPО259+t#=`|4)uÛRx ha"?<:% [Z1e=XhwVaKʂk{ygvAQQ[ DIE9kg13 VzLŇǰaT=qpt;rML㘆)acH4bai.SjQF:ےtUq?.cUrYAC+2)\jI *ȍQZ"}ZCvXv2u8nImjz }xxkQ1&$PSJINytD5d,ZcxTZ0j|RG$&%3S!ιihh \ `MȖ8"5J ,J¢H\6dd.Gz?F21Ĩ\~@RIPTa\'D3e*6VT+ۮR>X7 ?#n!w[ ߋ U PhNyտcGK~[#t!'f G& j??Nڄ.2"jt.֌ zҠ Gr * %B1:A°TDsq~*'tAgest_LJ,9'&v{@u!a"0*jrhD?i"9?$~<=džտ/d'K'tzl\뱖/>PIl`#HªJBH !)G$Pn80p|ZwA O>ơ=irJxX}_.?I?.]}>05 uOb"{yBI %=?z Ra\0Mc)mt $yqxï`@`HأӯT i(P@P>Lv `qnViow|Ak׆jm#m/cxl>"^7M$Ҫa:gly'z}oOW\0jJQRDsiтz( $ 1e@Sk5NHB eX 0PU=&\ÔH!NXzn T4I^Npvwֲ sCR&ipמ8t<=>=PFtBP댷dD7_~c >7?G ȏ@@~ފh~WKs\{xk@hgLS̲;a\?)>@uۯ]=w!N9tM(0SLHQCCAjj(tUP@QHҥSB\ r7#IPtM@ P'4QAHPrM)JABR44+ RK@RP(ҔPH% RD E/PE!AOvȱQu-PS?L~LS ΀ )E=Z(J݇\Nwe&o_CĿ8Rh3zk|./bT7Ieԏ#fs3U|d۟[(l=D֫tf˙#36S{;K?seެ~:1d~.mm%aȽhL^^ZwDښ|)#UF tɧ6(ө\uwA]*M2XiuRs2N Y:{2sWg땕ZlNV2jڷ 8-8;2.Wn: .^.뱼<=ֆf:ðrl-FGRpK ok[Lθ6&< KɺYUo[ZDeiVkxYǤuuW2ZZ4LEeV$rU$+Pm , ⵊj`J߫3UK_+l!3 _|\`xmz:ݤm.=7qCiy+]U>8n<}9_?^j~ީJ-=uuNC#κbҗN+xjyԜ\%UH2ﴼ4l(uUxíkn{x˽t[B9+Z]~k-ɴTDiyeϿt\UWe|6xUVlo2]sYIlO/2kiHxt5$oUXn7ʡ(^,b޳$5vĘ*ͩ?8yQ} co $'1?LDhcҾt4P%2@lfݙԅ݀)ML<2rFV/ ւx4x>7`3yucA `& 8>>Oo }>[D @~r lːA]ƛ *zûHB @i9A: <82z2C++hLdI #d.4~9\N6 7Tn_3ATr z$x'wǯٶ>}|c(S\.r6;<0Ãw=C|Aҙ8>rTK574+Q+1$DEwO}ͽc@F=NB+={ ,Ӷv=N}HDKG wm$P )E$G=`d񲊃oP|}]&cBaQ˯p2,lF} /ˋ ;wnld#sauu])T؂MBeHL{d i1D [`!a@@7zP5B9{uF_oD@Hӈt_:m|qǎy/gNsC߲1^=n°"%SdQƎ¥rCߗrt:< !mj9zQ? G 6[s:4 NO5H! 0*?DKZ* p$;.^0DHw | )Isܢ`*څhO˜`$!,Q0HO;!ȯy],waϖn,?3 ^c3*F_C \r,-2B?$DK)A@zVN,>zhP e9*\a lz%6uHV˓{pADPS#CM (BkvȮGQ]cZ TUUV~篰!GJh<1DEΣ_YG$Xa*O "$BQAizeijTCJ^O"}fR],QU3bmBʨhJn3AAT[ffdʊBD3@̆I ( a>.o4֋DS*]־1Vy~mxNjZ`'=sj7M뜢G_ZڬΡR<כXxHdYSfWHxEao@xDT(+ U(*qEA |>Vge`0dDq7j>NOg L6jH*M|'>QEçMv!2pofcg˟Cf:s`V!cP N x;ۈS5Hb$sS8+T$I@PB\|RPapXzed &Ndr C$h~åZ"onN5u[XZC0>YN 8=f spzk:5O>\ҝqW8Bh=Y@XPQ_[z䕈2 TAKJי|qOAD$K2w;tB ש,kZ d " 3ݱBTPJH*"(J7eQ${+4UU1hi=)HC 0KW釒+P~ d&>FSNJo<1ùMeh:I:,j&Uc$ȣ jIY qO%QAf{|Rt%w=dѯTo/Ԉ~ ПTx^3X m3dm%%RP13&IjXDMLQE T!xa;5{AVL0QPGxxֲˬ,G8?'!T)c̯%aCIZOs5fӊ?f5U"cKh`tH,htoYuDD]$-PId8.F5m@$W3&IGD۶5ԲTj877Gu?b`$U+*3Ly}HS+nhęOʌ Xr1J0]䅡u: CԬ]jJKf F3aoU1s 3VᎺ8eֱȲTbx^N7Gulќ:; 9kNls@9  |݇ϻv?69aAY{0y;9ǓaLV J>\uD?6q!DDjE4:??=0GҤ[[+n5jZvf/Пktuh2>?y^t`st{i9Can:TA(ѬNA_/꧝$nʅ_`:|41}`v;"&`"*o TB+dRoΎQ?ePNƔޤ>9șkXCD$(2 f |'C '﴿8ZsL^qh*KQ)2sS"ʚ.njeWò٪n)K-ͻ[pSzEHATs JON]6R=Oݣh֣^aD>2aMȟLHIT 0r߂'M)s~MNP?QS|tJ4-X$V&rU!NiFYRfJfͨA u, ˔qhh1,l1A[<ٷ8pST4!`a2NK )hD_/;nr_%OEyfy^q7v66XN!- 37>~P$93|y>.\MEf4(cƚ@AYbn IUs/4ABU?8'*Ҳ4M+,J!CCB0 %LA%$!䯿Zj*1lVd9bsu@Iwa^#%/1$%4Y`2y'N|c4]N:O3;k #W$ԙoAlmC@S5vw o:tMV߹D~IҞs>>$=y,`nGxA?P8>"?~\z[Fxvq==8=]y0NT6R3G""s/ZS͍i>!yLj q5g3HG:Pgp}"BO =^Ԋ@k T5Cp4*^ه:#'n3@@k&b ͘b˻AC-^7EWr%O7XdyDtzȹ;Yu%|`^嚞9Ť:Rs=8P| W,a8 SK_"Z$'iv O/9?l"z@Q R.E R~x}b"Ò|4QADOfcA7آt${_~HScVWCp1Q=_ Q>=*>8(Π~Z@HUЄ,Q'TYVhf6b˜($ ma'`}ߣϞPRD P簅}b~;$?w$*h"q_iыg*wᅈ,gdͭ-XMէoHzG${_v`GeD'+X`Pe6sUptr@"wj+*jdRTڞC$A~/64*hƑEyPBboL!J;ΛsT 8h.٩ݓIܝeݑ=*`559L*`+Q*hѲ'i6[.I ÅVPsϊq:%9dxNڞ4QnS0=QDi(N4ka7iD5b ']|O58ŵIW|XtLQb"ӸnMVHsp"%@,6&bU(O IEb81B+%mF}h1?wnnfm;9ָo:$:Ň˳ӵ/O?c "rFTGw+_v.#rü68l}D![{"aKd3 |$] ['Χ;HL-j4p5;݄_/G ?DdDd8<=I@zG~ F!i R-_An̕$ ^VX=MP)B^U0zN :1b0@̒5IX/J}ٛHiH>  2DӋh!Ydwb]6`/WZ㙭auӴ6D{#@P2T2^߭i LU0BD5P )0wlZ8H9UA~g- ;?fjY$s:v2nt$M鸻@@qdn A&t(ʣ lteRZݠH$j`EaF1O$ LaCnI M ~L!&A8"2ZFؚ7&e# lQK%LA7˹hcΌ!GhI[Y~_xPX&PiP x~DѩqpBi8Y !KVRx ьANrTvHWT|ы;%Aztǟ EA$Q% cB@ZP+ r4bvor$BXQQ-"Qӎ0W"d"X&ݪ'vqBwm9󨶶+A!ޥyA݃uIJrf'ʛeNHz;UUD`E|6[$:z48W0O=U!YHB}obeɾDfr0MH:Q>:%)M.FL}^󊆥҉2@ X1qœ|rtRs!5J:@]nURt'A$|ҭwD T<>yq`.M<`ԶYzgp[WHA `2@)1A- x_+ܝD?V`N%q:BkG‚&>b3vƶkZ֨xM9Ӈ%ֱrGӡhݞ|;k הմ^>;x±Z@* n , x-9aQfME>E!4}=t"J{ӷQzn w @{:uaD1iRC% R2 )ĦP+Ct4s] I*Cff[~< <*Ҕ@&"u}d.ErҼ^0Jh4V844OQP:6 g/q'}?}v@].8uP4+ 8/x@r? RU?HwNu.")"dÀX2Y&ksNK@~v]CAIJ4=>Gg[hԥUs8I_x^pW$4S㴰 z%{]w AJR )HPDQ_q%i~R0&Tѣ@U6MIA0R4$UT8a"i1< lbkN0R4lBMD}:ZPɉ6EdҔ)H=(9Q"I|(C=-;u"j"bb(*&TpDX x+tć4gMSzH@q_n|uD*S/&%+wk:I2f5Hs`K`Peޯ炿3; {lk `y&Hu<73+HNӵ!yww2uv^%gKUӧ׌wXP 8Po," oD̔}`ab`#T{:ǧTD*~\fv$ s@ԴuMBHApȤDI@ x>{r4L+!D*ШPL!Ppz!hEjȗt5 }0%)PT%Aс@?:g )C5=q?zw(|eC%b2jl&TYHnS~ײ3ZV%9TCm4XL=w,yI׫y'PS Kw -] hT`u\s޸5Y70P9m tC. R mWpk°(ߕ|8Þ~bT;G04 ʚPSx&rCBR*j&@mB)'EDžE*|CQ6%%3~W)babbT 3O`@lvsUu/aw`뮱ó3}vM<[96 h6AvF?m ȆdΘp>YWSy3o|mϗ+=eO/8 2=o9^M{aaP Aii)EЩf@V2"HE4u(h*h j$y& OYԚ)z4% SIJ1Mt3*(JiJZb=lJDF)@yi:4UA-'zx>7ᝏ1Pg22FA q2ht=q?\d=X|J|ـ60He\#@JR~"o厵dCKBq(m"U!U%h4w5F:~msh?I^pO9x5)^SО"<@P5T>'h0PY|(5)zMIf&U!FC#vF:1&}YM$O3Z)( (Xt܃ED$AIU%!2PQE(P; "CACI&&y%uZG׮FɅlþsgsC(c3 h ԇ"),@64jHPCDquS)#'[SǃjsN͹B֖fyMGP8-GF{wk}z}Z廓O笼JRTC7<87Y(2yU]ǟז(d?#n"(Ԕ=!0~ r!h~h\4&CMEB4y|xd!y"]E9jFbՐ/ \=ET'ǬSKV4jT8!'4Dcb ;+pu4BH}8"'艞~w6ML(/)M 7E>gSzXh?Mv)K퐂+mikƴm"֗Xl2d6$8 .bo"ֳ&ε5˚3E`]R99ls` zrB;"*5i ++yI#JrWF 3lG Es<͔f9F;cbм8oFHjHED&" fHد"J(h*Z&NmTH е2UЕDT0 3 A 0DA@JxEvKXOiOUJђk!B)>gw0=<%AWwn7D~vb 8h6z6Dxq ުr@T ҟ?!LũN$SBQd>*L#Ǯ)ur689'[* S$NӕGG p]с܇o1~y<:>{`e?d1}1u'Fݍf Pwǥ`y?wQ2OpN0 ya_jCZ<"&*ib~bɥFΙy)ہ>f[f@&JgMf)Tă4[/)SB RdzEa%`v |d I5cd9) *'!Ծrb<$4"Ȣ~4! +)ҟϣ&9gjgQu!(3CB<{?zcldɧqW37t*@(D &dRu:bZLMFu8 IR'YJ׬b\B43OӻψZB5Y AT]}>^`H(|p @^{AI7}oh l~htg2TCz>_=Ҥ) s׻_J|UKTqǂA@E?s8KQH+"V;%#*X H32T Fe5N8U8n"^IPiI騃iEyZR[bmо%t9qN8DB9]rPS4QwmRO6vw0&: j)! Re-KMl*ZQJ WX7N8 JI^y"RTbVэCC4$@xʠ(4,x*8Xǎ~B [klD:shPu8!9ԯ.5Edehσ+ćΘ51,{0ɠ)i$*C (qIES–W$Uk֏jkR=J[] Ȥ$3BkS |{LTDVOE*Z\y0VVRrOshT GZ*Q S/Xx -Fَ_/,ϧ+S@V(4E)2-_|l "V5//44 &4ĝǬOLSzlEA\KEDDPSHy+}'K,cVEPݵEւED`v b(blb%E5E!;սV &8üX=!8xB#X`tUs` jiV*0}Y9[2_;"{Okr,CHMDi:};X:+ ZTDD$WK\}- 홛b񇘲(("5`RzE:nKf<- +͹IT^2o3T:Õ PrpV3Vօ%&YYCPR|=WO=532 Oz$r%OKY(>I,{I>wE0Ԓ ZWB0Jazf|ɭ8jt3:aA2fugB5^i.l+^7 MLM8 '`i ""4yEU7Yj Ċ[Ugd=o~nltq% d)fP GA2(9&AjK5@w^(spY'go4 '2qPV907))%8+'YI78֨ @ $!ĐPy[Z2_NT0bÉ ޞO(ǯ/YTYB:Q$Aua#Hw2=wE?3o.au""UT~5HX~ML-d NZ?!xV!IAxf=x2(}3fo(te:Ԕ= 0~YQY6#A!۠D 9lп2rޢ@R&jmQk;y[dPМ"ػqw5MoNMY+s,^b39q ε MMNbϭQZtR " y6㠣)j̎zɝHwv C򃔥ёҪx4y'BU]Dh?]ujF)d2OC W%櫚6d4Bp)yJ9 )BRg|A%L=?&ޚ{'~!ɋ(i]əo~N9,HD*)2TD NF)s, ˸DUa J+g#} }9^a͹'$SV(ؓ0s'Ȫc=pSi^E%<@ vB zRĞF=\" l`C.TЇ&Z S92R|o짶((Jʢ(g03(_׺|)*'N 2qA'DA/e{n!ǯ͞x^^݌W{n>|9WXB . ȡ(> >uU2?0A)@SC@0@=n'C=%JUi7$WܟETnK DATL@_N_tr.֣dө4adzz? e8 R=Z?F؄ 4[˝b)Chi֫WQjI)ՙ %෸϶hϿNeZȲOc  @#N,uR  :7h@LC2cr(ڐʴ ul8(bTXⲾ[v7)yR2-ʙx^;Q2N/BJzfT'τ wMaC` uhS[CC Ar8H?QuN^`|I{ܝ?~OxP< g%BGq}.!̼ӯS sUз:߿3QR^,»45Zz]f>v[ٽJd (GK1׉Ln,dQknhFWL R],53͊H׃1|wטwvJwjop6&A_54'dpǖA%Kr`Anplx{ -tCK")Co: qm4(]^F|;wW>z\%L릦D0\]CuqyYߜN#}fONR܇s`yD!@0bN57R)# TJM `Ϗlkqv,{X8 1)wt5kJ!}L|5~aY띭t>}|HŌGx | ,ًW68W>V-A2_])gјW)̍k=POj1`\*@РI!@Ө ]Gr8vohW4ا{=>/o ]mL'Rab\O:nA?AZAdl[:}fl u#AM?pA[s;tyG(vo{ h 3 S:૪tkÝ;+QF=u@.=%DtW^,W!UIib&B@ԬU3/ViLBIcی~^@ُKta\d^m'K|^q~u#X#rkxF?x€dt}hBzzIߪÞH ݺ'*Dfȅ XEvK;Jci@{,JY"zcAq4n*/C0#߮Х]2@&1멏w>={YI<7rT! 63QDVA aےP v<7O֕S#^o*hY1'0gAk_aXILM1М2k4 Q $b$Syuf+řҪ]MuYb*BE5/Q:b5ԓ8dPLƺx; ץ|8sDG(qr}>wPb6C0 @W]T\Gv;dxmKI#GtUvTй 15/ B!F9cJv0k~|#X5EΘHx6eѢ}Ia!0 {|S>u|ڝqzg@&!vNqꪧ\Z5!:TlkhncAV<4FAv`R еglzf!;QۻPQI8;Ԑ ,Q ה>fڋ8gWl0( kwѱm;㦍Sr \ z?D;RCp:!v}ly5# %-NsbtSVR8X;)_FF 4v&s_6]d)wQW`̝MT֜0s#p#ߡ2zɸar( _>bنhra3+r4+bC%om 2]״ޟv,8tU>H{vH{NcZd 3uz~ڐysWA!n Tf ;Xv}z`fxc-MX٢0Wtc=18 vOeF{9|ݫ >yW;|1`LQ!c 5l] o){-#3@=qL<: /%CW_8K>֠h]8ZI`Qө EusF`DPl&"Ğʍ.-NU*LlG(P(LG`ً e 4xd:PL;q>hcDzhzv=VB箫\qSɓj!@ Ȝδ5A~j!umX9Wf;9-h:QF"~Kf!O^\%9AU*o,z0H8}}nQ$jh|v wx[ۻG|yODr~8Gs j,4dy!BƤ8k\><+RTo1F;&꽰6뽗鄝yUG H-ny"AG @f3PXESCwT潝sQ>mPܪՌު^Xs3rҿbzckt'V_]P|(g] kBgNڟF2MLj5Av# #MG#Vt^1Cn;`h]O5:e5ibz&fK2։fu*5x6@dH<46‹L*(okôV瞆\hTv$/'0=;9c49vK%tfݚa>cKfvj3jK*FuZnPSG+-r4|9*`;Y*XT#t(n-׌rYazXFT{2j't%ωHwzջ٘sޭ\bEĤ7$:\bҚ W4iFMm,|=04HZJWHu|#1bPFcs7Ba*{ zo!ߋLL oǴj" =OWk3u.Ou효{rm+ ?IFIǣ@gycmiBbpQ) NZLc:wi9J7X ]x>˷f__,tw Dg=Yb`zJ4xuKC[IQ};_oaQbOJ[u>;{Tz+W7g#2H2|$_cz :1|>AD'u}S{GuO[3Ȃ+\/R:Þ{s*ϣޑi@{H(Y&T{]FvtG}S򺡽+y}UbFm6\_7YK1Lδ7rD KoD'TiQܟ{~cVs[ËxkehjE0CjFW%"z?&wL5h\Z<;P% HPR%&JU4@j ެ>[}Ffm=A{S9͓t(NĂH~Rh0vtjLu3hPYBɹj\/Rr(z1Z7ib7װB>B5)ؒJKIa֦R%؋6 ?uku/'r8xԸb/VF!c,¨r~j`>nx\oOPFΦ)x|QnIWF e@>US˜UN:f^vQ5AXe@YQtkP9*CF4%8NPB30 x$;*"81H`Ez7:8cҵu#u}k%Ց#X47 v_{K*Ubh-贜8Z"NΧN >SsӮuNZJJ8Ttd.dnVW1GTÏVȳv3o:y[(V@d!ZwGxtUa~ᆴ9^2$ 9T]7offޅUDvtCENKSsmɱ@%Uͥ6*76&cD9sn#RhFTVbv9W;-쏗LK\Vi82S\szl﮻$6h j!QpV<a2Dsk;LXYǫy^2s0V[lN\\ӛӇ"'GWRcCD/_t/Ī`NxQ>{,"ISTJH Dwy=Q$R4cӵu  V *(jZ$"bXB X" j J(Vi*h*bh*jf,CI߳lfE,EkZu٥Ƣ@C9ê=#_B~ݢc|yLQ*1:hh\6H".f IH$ܱhtAgv 9E)AI FREH͝f&E/ F(dʈpBJIiawT$I鿇rQ\s[S&8L'mZQ3E%1%C! DkkA[.c&Bq xNqb7:HE0`c}(;v2C*uf$'obULx%d=B?1v3,墼J> P"nC \TR&iQUΏ%C}3]ɜ:#Q@Z"/ M켻,wb "!ޢ޶Q /==cږOddEh1@K꽋 pUfny "ushàzwM)ۀ9Wk/ x{?Yޒ | &OěUԂɶCLHޤ811Q7B[#Gd3`8/)mw;+3;{3bkn:q%-H"hUgPY h΅Cʖ;*V_*[B2PۻYϏSƇE0d4ةe-#} ѲWlbVk/nH==P )OٻJ#Sl&0lIoUI*>~RPu<* XvRŐ R1U$T𐢐2xz7'ĄJ&2:a|~R%/0i(!n'O^飩С=z`_b))ЈS/ N=p R{O`4|_Y;UT(:)ʲ"7a x$prhxD$Ow߃aoXswJkѳOrTX)|"[1d;Ԙx!5#׃RgFb0=L.¯] yhgրx%٬"&ҽlkJw۹&CZ뛷 6HGlq@K܇6Ɛ{M߹ln+м%yo2QMv/zk GH!b͏H"G$)AO6 O]yt%V/SꂔQsGY2GfF_uhdVw7l^:"@< jfľ˕GFiS:F E+Qv$_uܱ˺$/OrNnk|]O_2:|pFuQR&!J5lLezQ7@bbܣ2S-L+4QP Ϻ~ z?'k]qǠC"` @~go/;M_4H2:+y$2!Y" .ٝ`aIFR"2f˩.AR-zt'\pA>[$fhnAFu"}/}MF(#rh/­Br T^AG ÃC"XrP3pnL͂u3s~kW9ui{sw$Eq2tr(iK=oX_)ﻠxk(gΉ'Oy=,&?;s9Tr7 1U QW:RBaVjM96;I2L笨6&P"I&מ&&s~1" O?taSnFR)OGƠo~IEAĂ0e$%%%[OdkIW`\|bVzvMzN|u" HBRÇ9ǃĜ ,H\Jb2 8@}ڐ{sbښPQ80\F$#37C9[l/|'~w!RZ~NY1bGDȭDe]75b^+-;#~ 8޼>9 9 R Vn7K/w Mt̖#ŢW%I:nE}z~ȻΈ>// cZEk6e+bvWhI*z1c]Byħ5A$V8p#^N7ooԊY!~Rj. H$05Xރ:I*6Ӄ$ _s&%{SNeot7,nZ9%`F"xk8,dyBr˷fU()ye!yR_9[xts͎^{|.G[wyVevmEvݑVmsJs儌s^P&x`2!}nuvgv^B"d;! =ln~J MfAymfuT9)k( -j0̿N&JTr@ PJ!(TB%!" CI9ߴC|m@yOh*:=PQ#HR *ƓEOAU9yYd@z>x(=!Q]kG'T&ce֨?"Ǵ kߏXR78=DK:R9{?Pdz+JLݪٚ!-]fZmRNp? ?PJ-zpy c ~c Upك$ XԩzgOmK"#\8hŵ&֚%5Α}+J[I0Y&iYRLiX*S >!1 hCY_zE=S}m̴p0\6˾g Interp *iPtr; /* Interpreter containing the code being * compiled. Commands and their compile procs * are specific to an interpreter so the code * emitted will depend on the interpreter. */ const char *source; /* The source string being compiled by * SetByteCodeFromAny. This pointer is not * owned by the CompileEnv and must not be * freed or changed by it. */ int numSrcBytes; /* Number of bytes in source. */ Proc *procPtr; /* If a procedure is being compiled, a pointer * to its Proc structure; otherwise NULL. Used * to compile local variables. Set from * information provided by ObjInterpProc in * tclProc.c. */ int numCommands; /* Number of commands compiled. */ int exceptDepth; /* Current exception range nesting level; -1 * if not in any range currently. */ int maxExceptDepth; /* Max nesting level of exception ranges; -1 * if no ranges have been compiled. */ int maxStackDepth; /* Maximum number of stack elements needed to * execute the code. Set by compilation * procedures before returning. */ int currStackDepth; /* Current stack depth. */ LiteralTable localLitTable; /* Contains LiteralEntry's describing all Tcl * objects referenced by this compiled code. * Indexed by the string representations of * the literals. Used to avoid creating * duplicate objects. */ unsigned char *codeStart; /* Points to the first byte of the code. */ unsigned char *codeNext; /* Points to next code array byte to use. */ unsigned char *codeEnd; /* Points just after the last allocated code * array byte. */ int mallocedCodeArray; /* Set 1 if code array was expanded and * codeStart points into the heap.*/ LiteralEntry *literalArrayPtr; /* Points to start of LiteralEntry array. */ int literalArrayNext; /* Index of next free object array entry. */ int literalArrayEnd; /* Index just after last obj array entry. */ int mallocedLiteralArray; /* 1 if object array was expanded and objArray * points into the heap, else 0. */ ExceptionRange *exceptArrayPtr; /* Points to start of the ExceptionRange * array. */ int exceptArrayNext; /* Next free ExceptionRange array index. * exceptArrayNext is the number of ranges and * (exceptArrayNext-1) is the index of the * current range's array entry. */ int exceptArrayEnd; /* Index after the last ExceptionRange array * entry. */ int mallocedExceptArray; /* 1 if ExceptionRange array was expanded and * exceptArrayPtr points in heap, else 0. */ ExceptionAux *exceptAuxArrayPtr; /* Array of information used to restore the * state when processing BREAK/CONTINUE * exceptions. Must be the same size as the * exceptArrayPtr. */ CmdLocation *cmdMapPtr; /* Points to start of CmdLocation array. * numCommands is the index of the next entry * to use; (numCommands-1) is the entry index * for the last command. */ int cmdMapEnd; /* Index after last CmdLocation entry. */ int mallocedCmdMap; /* 1 if command map array was expanded and * cmdMapPtr points in the heap, else 0. */ AuxData *auxDataArrayPtr; /* Points to auxiliary data array start. */ int auxDataArrayNext; /* Next free compile aux data array index. * auxDataArrayNext is the number of aux data * items and (auxDataArrayNext-1) is index of * current aux data array entry. */ int auxDataArrayEnd; /* Index after last aux data array entry. */ int mallocedAuxDataArray; /* 1 if aux data array was expanded and * auxDataArrayPtr points in heap else 0. */ unsigned char staticCodeSpace[COMPILEENV_INIT_CODE_BYTES]; /* Initial storage for code. */ LiteralEntry staticLiteralSpace[COMPILEENV_INIT_NUM_OBJECTS]; /* Initial storage of LiteralEntry array. */ ExceptionRange staticExceptArraySpace[COMPILEENV_INIT_EXCEPT_RANGES]; /* Initial ExceptionRange array storage. */ ExceptionAux staticExAuxArraySpace[COMPILEENV_INIT_EXCEPT_RANGES]; /* Initial static except auxiliary info array * storage. */ CmdLocation staticCmdMapSpace[COMPILEENV_INIT_CMD_MAP_SIZE]; /* Initial storage for cmd location map. */ AuxData staticAuxDataArraySpace[COMPILEENV_INIT_AUX_DATA_SIZE]; /* Initial storage for aux data array. */ /* TIP #280 */ ExtCmdLoc *extCmdMapPtr; /* Extended command location information for * 'info frame'. */ int line; /* First line of the script, based on the * invoking context, then the line of the * command currently compiled. */ int atCmdStart; /* Flag to say whether an INST_START_CMD * should be issued; they should never be * issued repeatedly, as that is significantly * inefficient. If set to 2, that instruction * should not be issued at all (by the generic * part of the command compiler). */ int expandCount; /* Number of INST_EXPAND_START instructions * encountered that have not yet been paired * with a corresponding * INST_INVOKE_EXPANDED. */ ContLineLoc *clLoc; /* If not NULL, the table holding the * locations of the invisible continuation * lines in the input script, to adjust the * line counter. */ int *clNext; /* If not NULL, it refers to the next slot in * clLoc to check for an invisible * continuation line. */ } CompileEnv; /* * The structure defining the bytecode instructions resulting from compiling a * Tcl script. Note that this structure is variable length: a single heap * object is allocated to hold the ByteCode structure immediately followed by * the code bytes, the literal object array, the ExceptionRange array, the * CmdLocation map, and the compilation AuxData array. */ /* * A PRECOMPILED bytecode struct is one that was generated from a compiled * image rather than implicitly compiled from source */ #define TCL_BYTECODE_PRECOMPILED 0x0001 /* * When a bytecode is compiled, interp or namespace resolvers have not been * applied yet: this is indicated by the TCL_BYTECODE_RESOLVE_VARS flag. */ #define TCL_BYTECODE_RESOLVE_VARS 0x0002 #define TCL_BYTECODE_RECOMPILE 0x0004 typedef struct ByteCode { TclHandle interpHandle; /* Handle for interpreter containing the * compiled code. Commands and their compile * procs are specific to an interpreter so the * code emitted will depend on the * interpreter. */ int compileEpoch; /* Value of iPtr->compileEpoch when this * ByteCode was compiled. Used to invalidate * code when, e.g., commands with compile * procs are redefined. */ Namespace *nsPtr; /* Namespace context in which this code was * compiled. If the code is executed if a * different namespace, it must be * recompiled. */ int nsEpoch; /* Value of nsPtr->resolverEpoch when this * ByteCode was compiled. Used to invalidate * code when new namespace resolution rules * are put into effect. */ int refCount; /* Reference count: set 1 when created plus 1 * for each execution of the code currently * active. This structure can be freed when * refCount becomes zero. */ unsigned int flags; /* flags describing state for the codebyte. * this variable holds ORed values from the * TCL_BYTECODE_ masks defined above */ const char *source; /* The source string from which this ByteCode * was compiled. Note that this pointer is not * owned by the ByteCode and must not be freed * or modified by it. */ Proc *procPtr; /* If the ByteCode was compiled from a * procedure body, this is a pointer to its * Proc structure; otherwise NULL. This * pointer is also not owned by the ByteCode * and must not be freed by it. */ size_t structureSize; /* Number of bytes in the ByteCode structure * itself. Does not include heap space for * literal Tcl objects or storage referenced * by AuxData entries. */ int numCommands; /* Number of commands compiled. */ int numSrcBytes; /* Number of source bytes compiled. */ int numCodeBytes; /* Number of code bytes. */ int numLitObjects; /* Number of objects in literal array. */ int numExceptRanges; /* Number of ExceptionRange array elems. */ int numAuxDataItems; /* Number of AuxData items. */ int numCmdLocBytes; /* Number of bytes needed for encoded command * location information. */ int maxExceptDepth; /* Maximum nesting level of ExceptionRanges; * -1 if no ranges were compiled. */ int maxStackDepth; /* Maximum number of stack elements needed to * execute the code. */ unsigned char *codeStart; /* Points to the first byte of the code. This * is just after the final ByteCode member * cmdMapPtr. */ Tcl_Obj **objArrayPtr; /* Points to the start of the literal object * array. This is just after the last code * byte. */ ExceptionRange *exceptArrayPtr; /* Points to the start of the ExceptionRange * array. This is just after the last object * in the object array. */ AuxData *auxDataArrayPtr; /* Points to the start of the auxiliary data * array. This is just after the last entry in * the ExceptionRange array. */ unsigned char *codeDeltaStart; /* Points to the first of a sequence of bytes * that encode the change in the starting * offset of each command's code. If -127 <= * delta <= 127, it is encoded as 1 byte, * otherwise 0xFF (128) appears and the delta * is encoded by the next 4 bytes. Code deltas * are always positive. This sequence is just * after the last entry in the AuxData * array. */ unsigned char *codeLengthStart; /* Points to the first of a sequence of bytes * that encode the length of each command's * code. The encoding is the same as for code * deltas. Code lengths are always positive. * This sequence is just after the last entry * in the code delta sequence. */ unsigned char *srcDeltaStart; /* Points to the first of a sequence of bytes * that encode the change in the starting * offset of each command's source. The * encoding is the same as for code deltas. * Source deltas can be negative. This * sequence is just after the last byte in the * code length sequence. */ unsigned char *srcLengthStart; /* Points to the first of a sequence of bytes * that encode the length of each command's * source. The encoding is the same as for * code deltas. Source lengths are always * positive. This sequence is just after the * last byte in the source delta sequence. */ LocalCache *localCachePtr; /* Pointer to the start of the cached variable * names and initialisation data for local * variables. */ #ifdef TCL_COMPILE_STATS Tcl_Time createTime; /* Absolute time when the ByteCode was * created. */ #endif /* TCL_COMPILE_STATS */ } ByteCode; /* * Opcodes for the Tcl bytecode instructions. These must correspond to the * entries in the table of instruction descriptions, tclInstructionTable, in * tclCompile.c. Also, the order and number of the expression opcodes (e.g., * INST_LOR) must match the entries in the array operatorStrings in * tclExecute.c. */ /* Opcodes 0 to 9 */ #define INST_DONE 0 #define INST_PUSH1 1 #define INST_PUSH4 2 #define INST_POP 3 #define INST_DUP 4 #define INST_CONCAT1 5 #define INST_INVOKE_STK1 6 #define INST_INVOKE_STK4 7 #define INST_EVAL_STK 8 #define INST_EXPR_STK 9 /* Opcodes 10 to 23 */ #define INST_LOAD_SCALAR1 10 #define INST_LOAD_SCALAR4 11 #define INST_LOAD_SCALAR_STK 12 #define INST_LOAD_ARRAY1 13 #define INST_LOAD_ARRAY4 14 #define INST_LOAD_ARRAY_STK 15 #define INST_LOAD_STK 16 #define INST_STORE_SCALAR1 17 #define INST_STORE_SCALAR4 18 #define INST_STORE_SCALAR_STK 19 #define INST_STORE_ARRAY1 20 #define INST_STORE_ARRAY4 21 #define INST_STORE_ARRAY_STK 22 #define INST_STORE_STK 23 /* Opcodes 24 to 33 */ #define INST_INCR_SCALAR1 24 #define INST_INCR_SCALAR_STK 25 #define INST_INCR_ARRAY1 26 #define INST_INCR_ARRAY_STK 27 #define INST_INCR_STK 28 #define INST_INCR_SCALAR1_IMM 29 #define INST_INCR_SCALAR_STK_IMM 30 #define INST_INCR_ARRAY1_IMM 31 #define INST_INCR_ARRAY_STK_IMM 32 #define INST_INCR_STK_IMM 33 /* Opcodes 34 to 39 */ #define INST_JUMP1 34 #define INST_JUMP4 35 #define INST_JUMP_TRUE1 36 #define INST_JUMP_TRUE4 37 #define INST_JUMP_FALSE1 38 #define INST_JUMP_FALSE4 39 /* Opcodes 40 to 64 */ #define INST_LOR 40 #define INST_LAND 41 #define INST_BITOR 42 #define INST_BITXOR 43 #define INST_BITAND 44 #define INST_EQ 45 #define INST_NEQ 46 #define INST_LT 47 #define INST_GT 48 #define INST_LE 49 #define INST_GE 50 #define INST_LSHIFT 51 #define INST_RSHIFT 52 #define INST_ADD 53 #define INST_SUB 54 #define INST_MULT 55 #define INST_DIV 56 #define INST_MOD 57 #define INST_UPLUS 58 #define INST_UMINUS 59 #define INST_BITNOT 60 #define INST_LNOT 61 #define INST_CALL_BUILTIN_FUNC1 62 #define INST_CALL_FUNC1 63 #define INST_TRY_CVT_TO_NUMERIC 64 /* Opcodes 65 to 66 */ #define INST_BREAK 65 #define INST_CONTINUE 66 /* Opcodes 67 to 68 */ #define INST_FOREACH_START4 67 #define INST_FOREACH_STEP4 68 /* Opcodes 69 to 72 */ #define INST_BEGIN_CATCH4 69 #define INST_END_CATCH 70 #define INST_PUSH_RESULT 71 #define INST_PUSH_RETURN_CODE 72 /* Opcodes 73 to 78 */ #define INST_STR_EQ 73 #define INST_STR_NEQ 74 #define INST_STR_CMP 75 #define INST_STR_LEN 76 #define INST_STR_INDEX 77 #define INST_STR_MATCH 78 /* Opcodes 78 to 81 */ #define INST_LIST 79 #define INST_LIST_INDEX 80 #define INST_LIST_LENGTH 81 /* Opcodes 82 to 87 */ #define INST_APPEND_SCALAR1 82 #define INST_APPEND_SCALAR4 83 #define INST_APPEND_ARRAY1 84 #define INST_APPEND_ARRAY4 85 #define INST_APPEND_ARRAY_STK 86 #define INST_APPEND_STK 87 /* Opcodes 88 to 93 */ #define INST_LAPPEND_SCALAR1 88 #define INST_LAPPEND_SCALAR4 89 #define INST_LAPPEND_ARRAY1 90 #define INST_LAPPEND_ARRAY4 91 #define INST_LAPPEND_ARRAY_STK 92 #define INST_LAPPEND_STK 93 /* TIP #22 - LINDEX operator with flat arg list */ #define INST_LIST_INDEX_MULTI 94 /* * TIP #33 - 'lset' command. Code gen also required a Forth-like * OVER operation. */ #define INST_OVER 95 #define INST_LSET_LIST 96 #define INST_LSET_FLAT 97 /* TIP#90 - 'return' command. */ #define INST_RETURN_IMM 98 /* TIP#123 - exponentiation operator. */ #define INST_EXPON 99 /* TIP #157 - {*}... (word expansion) language syntax support. */ #define INST_EXPAND_START 100 #define INST_EXPAND_STKTOP 101 #define INST_INVOKE_EXPANDED 102 /* * TIP #57 - 'lassign' command. Code generation requires immediate * LINDEX and LRANGE operators. */ #define INST_LIST_INDEX_IMM 103 #define INST_LIST_RANGE_IMM 104 #define INST_START_CMD 105 #define INST_LIST_IN 106 #define INST_LIST_NOT_IN 107 #define INST_PUSH_RETURN_OPTIONS 108 #define INST_RETURN_STK 109 /* * Dictionary (TIP#111) related commands. */ #define INST_DICT_GET 110 #define INST_DICT_SET 111 #define INST_DICT_UNSET 112 #define INST_DICT_INCR_IMM 113 #define INST_DICT_APPEND 114 #define INST_DICT_LAPPEND 115 #define INST_DICT_FIRST 116 #define INST_DICT_NEXT 117 #define INST_DICT_DONE 118 #define INST_DICT_UPDATE_START 119 #define INST_DICT_UPDATE_END 120 /* * Instruction to support jumps defined by tables (instead of the classic * [switch] technique of chained comparisons). */ #define INST_JUMP_TABLE 121 /* * Instructions to support compilation of global, variable, upvar and * [namespace upvar]. */ #define INST_UPVAR 122 #define INST_NSUPVAR 123 #define INST_VARIABLE 124 /* Instruction to support compiling syntax error to bytecode */ #define INST_SYNTAX 125 /* Instruction to reverse N items on top of stack */ #define INST_REVERSE 126 /* regexp instruction */ #define INST_REGEXP 127 /* For [info exists] compilation */ #define INST_EXIST_SCALAR 128 #define INST_EXIST_ARRAY 129 #define INST_EXIST_ARRAY_STK 130 #define INST_EXIST_STK 131 /* For [subst] compilation */ #define INST_NOP 132 #define INST_RETURN_CODE_BRANCH 133 /* For [unset] compilation */ #define INST_UNSET_SCALAR 134 #define INST_UNSET_ARRAY 135 #define INST_UNSET_ARRAY_STK 136 #define INST_UNSET_STK 137 /* For [dict with], [dict exists], [dict create] and [dict merge] */ #define INST_DICT_EXPAND 138 #define INST_DICT_RECOMBINE_STK 139 #define INST_DICT_RECOMBINE_IMM 140 #define INST_DICT_EXISTS 141 #define INST_DICT_VERIFY 142 /* For [string map] and [regsub] compilation */ #define INST_STR_MAP 143 #define INST_STR_FIND 144 #define INST_STR_FIND_LAST 145 #define INST_STR_RANGE_IMM 146 #define INST_STR_RANGE 147 /* For operations to do with coroutines and other NRE-manipulators */ #define INST_YIELD 148 #define INST_COROUTINE_NAME 149 #define INST_TAILCALL 150 /* For compilation of basic information operations */ #define INST_NS_CURRENT 151 #define INST_INFO_LEVEL_NUM 152 #define INST_INFO_LEVEL_ARGS 153 #define INST_RESOLVE_COMMAND 154 #define INST_TCLOO_SELF 155 #define INST_TCLOO_CLASS 156 #define INST_TCLOO_NS 157 #define INST_TCLOO_IS_OBJECT 158 /* For compilation of [array] subcommands */ #define INST_ARRAY_EXISTS_STK 159 #define INST_ARRAY_EXISTS_IMM 160 #define INST_ARRAY_MAKE_STK 161 #define INST_ARRAY_MAKE_IMM 162 #define INST_INVOKE_REPLACE 163 #define INST_LIST_CONCAT 164 #define INST_EXPAND_DROP 165 /* The last opcode */ #define LAST_INST_OPCODE 165 /* * Table describing the Tcl bytecode instructions: their name (for displaying * code), total number of code bytes required (including operand bytes), and a * description of the type of each operand. These operand types include signed * and unsigned integers of length one and four bytes. The unsigned integers * are used for indexes or for, e.g., the count of objects to push in a "push" * instruction. */ #define MAX_INSTRUCTION_OPERANDS 2 typedef enum InstOperandType { OPERAND_NONE, OPERAND_INT1, /* One byte signed integer. */ OPERAND_INT4, /* Four byte signed integer. */ OPERAND_UINT1, /* One byte unsigned integer. */ OPERAND_UINT4, /* Four byte unsigned integer. */ OPERAND_IDX4, /* Four byte signed index (actually an * integer, but displayed differently.) */ OPERAND_LVT1, /* One byte unsigned index into the local * variable table. */ OPERAND_LVT4, /* Four byte unsigned index into the local * variable table. */ OPERAND_AUX4 /* Four byte unsigned index into the aux data * table. */ } InstOperandType; typedef struct InstructionDesc { const char *name; /* Name of instruction. */ int numBytes; /* Total number of bytes for instruction. */ int stackEffect; /* The worst-case balance stack effect of the * instruction, used for stack requirements * computations. The value INT_MIN signals * that the instruction's worst case effect is * (1-opnd1). */ int numOperands; /* Number of operands. */ InstOperandType opTypes[MAX_INSTRUCTION_OPERANDS]; /* The type of each operand. */ } InstructionDesc; MODULE_SCOPE InstructionDesc const tclInstructionTable[]; /* * Compilation of some Tcl constructs such as if commands and the logical or * (||) and logical and (&&) operators in expressions requires the generation * of forward jumps. Since the PC target of these jumps isn't known when the * jumps are emitted, we record the offset of each jump in an array of * JumpFixup structures. There is one array for each sequence of jumps to one * target PC. When we learn the target PC, we update the jumps with the * correct distance. Also, if the distance is too great (> 127 bytes), we * replace the single-byte jump with a four byte jump instruction, move the * instructions after the jump down, and update the code offsets for any * commands between the jump and the target. */ typedef enum { TCL_UNCONDITIONAL_JUMP, TCL_TRUE_JUMP, TCL_FALSE_JUMP } TclJumpType; typedef struct JumpFixup { TclJumpType jumpType; /* Indicates the kind of jump. */ int codeOffset; /* Offset of the first byte of the one-byte * forward jump's code. */ int cmdIndex; /* Index of the first command after the one * for which the jump was emitted. Used to * update the code offsets for subsequent * commands if the two-byte jump at jumpPc * must be replaced with a five-byte one. */ int exceptIndex; /* Index of the first range entry in the * ExceptionRange array after the current one. * This field is used to adjust the code * offsets in subsequent ExceptionRange * records when a jump is grown from 2 bytes * to 5 bytes. */ } JumpFixup; #define JUMPFIXUP_INIT_ENTRIES 10 typedef struct JumpFixupArray { JumpFixup *fixup; /* Points to start of jump fixup array. */ int next; /* Index of next free array entry. */ int end; /* Index of last usable entry in array. */ int mallocedArray; /* 1 if array was expanded and fixups points * into the heap, else 0. */ JumpFixup staticFixupSpace[JUMPFIXUP_INIT_ENTRIES]; /* Initial storage for jump fixup array. */ } JumpFixupArray; /* * The structure describing one variable list of a foreach command. Note that * only foreach commands inside procedure bodies are compiled inline so a * ForeachVarList structure always describes local variables. Furthermore, * only scalar variables are supported for inline-compiled foreach loops. */ typedef struct ForeachVarList { int numVars; /* The number of variables in the list. */ int varIndexes[1]; /* An array of the indexes ("slot numbers") * for each variable in the procedure's array * of local variables. Only scalar variables * are supported. The actual size of this * field will be large enough to numVars * indexes. THIS MUST BE THE LAST FIELD IN THE * STRUCTURE! */ } ForeachVarList; /* * Structure used to hold information about a foreach command that is needed * during program execution. These structures are stored in CompileEnv and * ByteCode structures as auxiliary data. */ typedef struct ForeachInfo { int numLists; /* The number of both the variable and value * lists of the foreach command. */ int firstValueTemp; /* Index of the first temp var in a proc frame * used to point to a value list. */ int loopCtTemp; /* Index of temp var in a proc frame holding * the loop's iteration count. Used to * determine next value list element to assign * each loop var. */ ForeachVarList *varLists[1];/* An array of pointers to ForeachVarList * structures describing each var list. The * actual size of this field will be large * enough to numVars indexes. THIS MUST BE THE * LAST FIELD IN THE STRUCTURE! */ } ForeachInfo; MODULE_SCOPE const AuxDataType tclForeachInfoType; #define FOREACHINFO(envPtr, index) \ ((ForeachInfo*)((envPtr)->auxDataArrayPtr[TclGetUInt4AtPtr(index)].clientData)) /* * Structure used to hold information about a switch command that is needed * during program execution. These structures are stored in CompileEnv and * ByteCode structures as auxiliary data. */ typedef struct JumptableInfo { Tcl_HashTable hashTable; /* Hash that maps strings to signed ints (PC * offsets). */ } JumptableInfo; MODULE_SCOPE const AuxDataType tclJumptableInfoType; #define JUMPTABLEINFO(envPtr, index) \ ((JumptableInfo*)((envPtr)->auxDataArrayPtr[TclGetUInt4AtPtr(index)].clientData)) /* * Structure used to hold information about a [dict update] command that is * needed during program execution. These structures are stored in CompileEnv * and ByteCode structures as auxiliary data. */ typedef struct { int length; /* Size of array */ int varIndices[1]; /* Array of variable indices to manage when * processing the start and end of a [dict * update]. There is really more than one * entry, and the structure is allocated to * take account of this. MUST BE LAST FIELD IN * STRUCTURE. */ } DictUpdateInfo; MODULE_SCOPE const AuxDataType tclDictUpdateInfoType; #define DICTUPDATEINFO(envPtr, index) \ ((DictUpdateInfo*)((envPtr)->auxDataArrayPtr[TclGetUInt4AtPtr(index)].clientData)) /* * ClientData type used by the math operator commands. */ typedef struct { const char *op; /* Do not call it 'operator': C++ reserved */ const char *expected; union { int numArgs; int identity; } i; } TclOpCmdClientData; /* *---------------------------------------------------------------- * Procedures exported by tclBasic.c to be used within the engine. *---------------------------------------------------------------- */ MODULE_SCOPE Tcl_ObjCmdProc TclNRInterpCoroutine; /* *---------------------------------------------------------------- * Procedures exported by the engine to be used by tclBasic.c *---------------------------------------------------------------- */ MODULE_SCOPE ByteCode * TclCompileObj(Tcl_Interp *interp, Tcl_Obj *objPtr, const CmdFrame *invoker, int word); /* *---------------------------------------------------------------- * Procedures shared among Tcl bytecode compilation and execution modules but * not used outside: *---------------------------------------------------------------- */ MODULE_SCOPE void TclCleanupByteCode(ByteCode *codePtr); MODULE_SCOPE void TclCleanupStackForBreakContinue(CompileEnv *envPtr, ExceptionAux *auxPtr); MODULE_SCOPE void TclCompileCmdWord(Tcl_Interp *interp, Tcl_Token *tokenPtr, int count, CompileEnv *envPtr); MODULE_SCOPE void TclCompileExpr(Tcl_Interp *interp, const char *script, int numBytes, CompileEnv *envPtr, int optimize); MODULE_SCOPE void TclCompileExprWords(Tcl_Interp *interp, Tcl_Token *tokenPtr, int numWords, CompileEnv *envPtr); MODULE_SCOPE void TclCompileScript(Tcl_Interp *interp, const char *script, int numBytes, CompileEnv *envPtr); MODULE_SCOPE void TclCompileSyntaxError(Tcl_Interp *interp, CompileEnv *envPtr); MODULE_SCOPE void TclCompileTokens(Tcl_Interp *interp, Tcl_Token *tokenPtr, int count, CompileEnv *envPtr); MODULE_SCOPE void TclCompileVarSubst(Tcl_Interp *interp, Tcl_Token *tokenPtr, CompileEnv *envPtr); MODULE_SCOPE int TclCreateAuxData(ClientData clientData, const AuxDataType *typePtr, CompileEnv *envPtr); MODULE_SCOPE int TclCreateExceptRange(ExceptionRangeType type, CompileEnv *envPtr); MODULE_SCOPE ExecEnv * TclCreateExecEnv(Tcl_Interp *interp, int size); MODULE_SCOPE Tcl_Obj * TclCreateLiteral(Interp *iPtr, char *bytes, int length, unsigned int hash, int *newPtr, Namespace *nsPtr, int flags, LiteralEntry **globalPtrPtr); MODULE_SCOPE void TclDeleteExecEnv(ExecEnv *eePtr); MODULE_SCOPE void TclDeleteLiteralTable(Tcl_Interp *interp, LiteralTable *tablePtr); MODULE_SCOPE void TclEmitForwardJump(CompileEnv *envPtr, TclJumpType jumpType, JumpFixup *jumpFixupPtr); MODULE_SCOPE ExceptionRange * TclGetExceptionRangeForPc(unsigned char *pc, int catchOnly, ByteCode *codePtr); MODULE_SCOPE void TclExpandJumpFixupArray(JumpFixupArray *fixupArrayPtr); MODULE_SCOPE int TclNRExecuteByteCode(Tcl_Interp *interp, ByteCode *codePtr); MODULE_SCOPE Tcl_Obj * TclFetchLiteral(CompileEnv *envPtr, unsigned int index); MODULE_SCOPE void TclFinalizeAuxDataTypeTable(void); MODULE_SCOPE int TclFindCompiledLocal(const char *name, int nameChars, int create, CompileEnv *envPtr); MODULE_SCOPE int TclFixupForwardJump(CompileEnv *envPtr, JumpFixup *jumpFixupPtr, int jumpDist, int distThreshold); MODULE_SCOPE void TclFreeCompileEnv(CompileEnv *envPtr); MODULE_SCOPE void TclFreeJumpFixupArray(JumpFixupArray *fixupArrayPtr); MODULE_SCOPE void TclInitAuxDataTypeTable(void); MODULE_SCOPE void TclInitByteCodeObj(Tcl_Obj *objPtr, CompileEnv *envPtr); MODULE_SCOPE void TclInitCompileEnv(Tcl_Interp *interp, CompileEnv *envPtr, const char *string, int numBytes, const CmdFrame *invoker, int word); MODULE_SCOPE void TclInitJumpFixupArray(JumpFixupArray *fixupArrayPtr); MODULE_SCOPE void TclInitLiteralTable(LiteralTable *tablePtr); MODULE_SCOPE ExceptionRange *TclGetInnermostExceptionRange(CompileEnv *envPtr, int returnCode, ExceptionAux **auxPtrPtr); MODULE_SCOPE void TclAddLoopBreakFixup(CompileEnv *envPtr, ExceptionAux *auxPtr); MODULE_SCOPE void TclAddLoopContinueFixup(CompileEnv *envPtr, ExceptionAux *auxPtr); MODULE_SCOPE void TclFinalizeLoopExceptionRange(CompileEnv *envPtr, int range); #ifdef TCL_COMPILE_STATS MODULE_SCOPE char * TclLiteralStats(LiteralTable *tablePtr); MODULE_SCOPE int TclLog2(int value); #endif MODULE_SCOPE void TclOptimizeBytecode(CompileEnv *envPtr); #ifdef TCL_COMPILE_DEBUG MODULE_SCOPE void TclPrintByteCodeObj(Tcl_Interp *interp, Tcl_Obj *objPtr); #endif MODULE_SCOPE int TclPrintInstruction(ByteCode *codePtr, const unsigned char *pc); MODULE_SCOPE void TclPrintObject(FILE *outFile, Tcl_Obj *objPtr, int maxChars); MODULE_SCOPE void TclPrintSource(FILE *outFile, const char *string, int maxChars); MODULE_SCOPE void TclPushVarName(Tcl_Interp *interp, Tcl_Token *varTokenPtr, CompileEnv *envPtr, int flags, int *localIndexPtr, int *isScalarPtr, int line, int *clNext); MODULE_SCOPE int TclRegisterLiteral(CompileEnv *envPtr, char *bytes, int length, int flags); MODULE_SCOPE void TclReleaseLiteral(Tcl_Interp *interp, Tcl_Obj *objPtr); MODULE_SCOPE void TclInvalidateCmdLiteral(Tcl_Interp *interp, const char *name, Namespace *nsPtr); MODULE_SCOPE int TclSingleOpCmd(ClientData clientData, Tcl_Interp *interp, int objc, Tcl_Obj *const objv[]); MODULE_SCOPE int TclSortingOpCmd(ClientData clientData, Tcl_Interp *interp, int objc, Tcl_Obj *const objv[]); MODULE_SCOPE int TclVariadicOpCmd(ClientData clientData, Tcl_Interp *interp, int objc, Tcl_Obj *const objv[]); MODULE_SCOPE int TclNoIdentOpCmd(ClientData clientData, Tcl_Interp *interp, int objc, Tcl_Obj *const objv[]); #ifdef TCL_COMPILE_DEBUG MODULE_SCOPE void TclVerifyGlobalLiteralTable(Interp *iPtr); MODULE_SCOPE void TclVerifyLocalLiteralTable(CompileEnv *envPtr); #endif MODULE_SCOPE int TclWordKnownAtCompileTime(Tcl_Token *tokenPtr, Tcl_Obj *valuePtr); MODULE_SCOPE void TclLogCommandInfo(Tcl_Interp *interp, const char *script, const char *command, int length, const unsigned char *pc, Tcl_Obj **tosPtr); MODULE_SCOPE Tcl_Obj *TclGetInnerContext(Tcl_Interp *interp, const unsigned char *pc, Tcl_Obj **tosPtr); MODULE_SCOPE Tcl_Obj *TclNewInstNameObj(unsigned char inst); MODULE_SCOPE int TclPushProcCallFrame(ClientData clientData, register Tcl_Interp *interp, int objc, Tcl_Obj *const objv[], int isLambda); /* *---------------------------------------------------------------- * Macros and flag values used by Tcl bytecode compilation and execution * modules inside the Tcl core but not used outside. *---------------------------------------------------------------- */ #define LITERAL_ON_HEAP 0x01 #define LITERAL_CMD_NAME 0x02 /* * Form of TclRegisterLiteral with flags == 0. In that case, it is safe to * cast away constness, and it is cleanest to do that here, all in one place. * * int TclRegisterNewLiteral(CompileEnv *envPtr, const char *bytes, * int length); */ #define TclRegisterNewLiteral(envPtr, bytes, length) \ TclRegisterLiteral(envPtr, (char *)(bytes), length, /*flags*/ 0) /* * Form of TclRegisterLiteral with flags == LITERAL_CMD_NAME. In that case, it * is safe to cast away constness, and it is cleanest to do that here, all in * one place. * * int TclRegisterNewNSLiteral(CompileEnv *envPtr, const char *bytes, * int length); */ #define TclRegisterNewCmdLiteral(envPtr, bytes, length) \ TclRegisterLiteral(envPtr, (char *)(bytes), length, LITERAL_CMD_NAME) /* * Macro used to manually adjust the stack requirements; used in cases where * the stack effect cannot be computed from the opcode and its operands, but * is still known at compile time. * * void TclAdjustStackDepth(int delta, CompileEnv *envPtr); */ #define TclAdjustStackDepth(delta, envPtr) \ do { \ if ((delta) < 0) { \ if ((envPtr)->maxStackDepth < (envPtr)->currStackDepth) { \ (envPtr)->maxStackDepth = (envPtr)->currStackDepth; \ } \ } \ (envPtr)->currStackDepth += (delta); \ } while (0) /* * Macro used to update the stack requirements. It is called by the macros * TclEmitOpCode, TclEmitInst1 and TclEmitInst4. * Remark that the very last instruction of a bytecode always reduces the * stack level: INST_DONE or INST_POP, so that the maxStackdepth is always * updated. * * void TclUpdateStackReqs(unsigned char op, int i, CompileEnv *envPtr); */ #define TclUpdateStackReqs(op, i, envPtr) \ do { \ int delta = tclInstructionTable[(op)].stackEffect; \ if (delta) { \ if (delta == INT_MIN) { \ delta = 1 - (i); \ } \ TclAdjustStackDepth(delta, envPtr); \ } \ } while (0) /* * Macros used to update the flag that indicates if we are at the start of a * command, based on whether the opcode is INST_START_COMMAND. * * void TclUpdateAtCmdStart(unsigned char op, CompileEnv *envPtr); */ #define TclUpdateAtCmdStart(op, envPtr) \ if ((envPtr)->atCmdStart < 2) { \ (envPtr)->atCmdStart = ((op) == INST_START_CMD ? 1 : 0); \ } /* * Macro to emit an opcode byte into a CompileEnv's code array. The ANSI C * "prototype" for this macro is: * * void TclEmitOpcode(unsigned char op, CompileEnv *envPtr); */ #define TclEmitOpcode(op, envPtr) \ do { \ if ((envPtr)->codeNext == (envPtr)->codeEnd) { \ TclExpandCodeArray(envPtr); \ } \ *(envPtr)->codeNext++ = (unsigned char) (op); \ TclUpdateAtCmdStart(op, envPtr); \ TclUpdateStackReqs(op, 0, envPtr); \ } while (0) /* * Macros to emit an integer operand. The ANSI C "prototype" for these macros * are: * * void TclEmitInt1(int i, CompileEnv *envPtr); * void TclEmitInt4(int i, CompileEnv *envPtr); */ #define TclEmitInt1(i, envPtr) \ do { \ if ((envPtr)->codeNext == (envPtr)->codeEnd) { \ TclExpandCodeArray(envPtr); \ } \ *(envPtr)->codeNext++ = (unsigned char) ((unsigned int) (i)); \ } while (0) #define TclEmitInt4(i, envPtr) \ do { \ if (((envPtr)->codeNext + 4) > (envPtr)->codeEnd) { \ TclExpandCodeArray(envPtr); \ } \ *(envPtr)->codeNext++ = \ (unsigned char) ((unsigned int) (i) >> 24); \ *(envPtr)->codeNext++ = \ (unsigned char) ((unsigned int) (i) >> 16); \ *(envPtr)->codeNext++ = \ (unsigned char) ((unsigned int) (i) >> 8); \ *(envPtr)->codeNext++ = \ (unsigned char) ((unsigned int) (i) ); \ } while (0) /* * Macros to emit an instruction with signed or unsigned integer operands. * Four byte integers are stored in "big-endian" order with the high order * byte stored at the lowest address. The ANSI C "prototypes" for these macros * are: * * void TclEmitInstInt1(unsigned char op, int i, CompileEnv *envPtr); * void TclEmitInstInt4(unsigned char op, int i, CompileEnv *envPtr); */ #define TclEmitInstInt1(op, i, envPtr) \ do { \ if (((envPtr)->codeNext + 2) > (envPtr)->codeEnd) { \ TclExpandCodeArray(envPtr); \ } \ *(envPtr)->codeNext++ = (unsigned char) (op); \ *(envPtr)->codeNext++ = (unsigned char) ((unsigned int) (i)); \ TclUpdateAtCmdStart(op, envPtr); \ TclUpdateStackReqs(op, i, envPtr); \ } while (0) #define TclEmitInstInt4(op, i, envPtr) \ do { \ if (((envPtr)->codeNext + 5) > (envPtr)->codeEnd) { \ TclExpandCodeArray(envPtr); \ } \ *(envPtr)->codeNext++ = (unsigned char) (op); \ *(envPtr)->codeNext++ = \ (unsigned char) ((unsigned int) (i) >> 24); \ *(envPtr)->codeNext++ = \ (unsigned char) ((unsigned int) (i) >> 16); \ *(envPtr)->codeNext++ = \ (unsigned char) ((unsigned int) (i) >> 8); \ *(envPtr)->codeNext++ = \ (unsigned char) ((unsigned int) (i) ); \ TclUpdateAtCmdStart(op, envPtr); \ TclUpdateStackReqs(op, i, envPtr); \ } while (0) /* * Macro to push a Tcl object onto the Tcl evaluation stack. It emits the * object's one or four byte array index into the CompileEnv's code array. * These support, respectively, a maximum of 256 (2**8) and 2**32 objects in a * CompileEnv. The ANSI C "prototype" for this macro is: * * void TclEmitPush(int objIndex, CompileEnv *envPtr); */ #define TclEmitPush(objIndex, envPtr) \ do { \ register int objIndexCopy = (objIndex); \ if (objIndexCopy <= 255) { \ TclEmitInstInt1(INST_PUSH1, objIndexCopy, (envPtr)); \ } else { \ TclEmitInstInt4(INST_PUSH4, objIndexCopy, (envPtr)); \ } \ } while (0) /* * Macros to update a (signed or unsigned) integer starting at a pointer. The * two variants depend on the number of bytes. The ANSI C "prototypes" for * these macros are: * * void TclStoreInt1AtPtr(int i, unsigned char *p); * void TclStoreInt4AtPtr(int i, unsigned char *p); */ #define TclStoreInt1AtPtr(i, p) \ *(p) = (unsigned char) ((unsigned int) (i)) #define TclStoreInt4AtPtr(i, p) \ do { \ *(p) = (unsigned char) ((unsigned int) (i) >> 24); \ *(p+1) = (unsigned char) ((unsigned int) (i) >> 16); \ *(p+2) = (unsigned char) ((unsigned int) (i) >> 8); \ *(p+3) = (unsigned char) ((unsigned int) (i) ); \ } while (0) /* * Macros to update instructions at a particular pc with a new op code and a * (signed or unsigned) int operand. The ANSI C "prototypes" for these macros * are: * * void TclUpdateInstInt1AtPc(unsigned char op, int i, unsigned char *pc); * void TclUpdateInstInt4AtPc(unsigned char op, int i, unsigned char *pc); */ #define TclUpdateInstInt1AtPc(op, i, pc) \ do { \ *(pc) = (unsigned char) (op); \ TclStoreInt1AtPtr((i), ((pc)+1)); \ } while (0) #define TclUpdateInstInt4AtPc(op, i, pc) \ do { \ *(pc) = (unsigned char) (op); \ TclStoreInt4AtPtr((i), ((pc)+1)); \ } while (0) /* * Macro to fix up a forward jump to point to the current code-generation * position in the bytecode being created (the most common case). The ANSI C * "prototypes" for this macro is: * * int TclFixupForwardJumpToHere(CompileEnv *envPtr, JumpFixup *fixupPtr, * int threshold); */ #define TclFixupForwardJumpToHere(envPtr, fixupPtr, threshold) \ TclFixupForwardJump((envPtr), (fixupPtr), \ (envPtr)->codeNext-(envPtr)->codeStart-(fixupPtr)->codeOffset, \ (threshold)) /* * Macros to get a signed integer (GET_INT{1,2}) or an unsigned int * (GET_UINT{1,2}) from a pointer. There are two variants for each return type * that depend on the number of bytes fetched. The ANSI C "prototypes" for * these macros are: * * int TclGetInt1AtPtr(unsigned char *p); * int TclGetInt4AtPtr(unsigned char *p); * unsigned int TclGetUInt1AtPtr(unsigned char *p); * unsigned int TclGetUInt4AtPtr(unsigned char *p); */ /* * The TclGetInt1AtPtr macro is tricky because we want to do sign extension on * the 1-byte value. Unfortunately the "char" type isn't signed on all * platforms so sign-extension doesn't always happen automatically. Sometimes * we can explicitly declare the pointer to be signed, but other times we have * to explicitly sign-extend the value in software. */ #ifndef __CHAR_UNSIGNED__ # define TclGetInt1AtPtr(p) ((int) *((char *) p)) #elif defined(HAVE_SIGNED_CHAR) # define TclGetInt1AtPtr(p) ((int) *((signed char *) p)) #else # define TclGetInt1AtPtr(p) \ (((int) *((char *) p)) | ((*(p) & 0200) ? (-256) : 0)) #endif #define TclGetInt4AtPtr(p) \ (((int) TclGetInt1AtPtr(p) << 24) | \ (*((p)+1) << 16) | \ (*((p)+2) << 8) | \ (*((p)+3))) #define TclGetUInt1AtPtr(p) \ ((unsigned int) *(p)) #define TclGetUInt4AtPtr(p) \ ((unsigned int) (*(p) << 24) | \ (*((p)+1) << 16) | \ (*((p)+2) << 8) | \ (*((p)+3))) /* * Macros used to compute the minimum and maximum of two integers. The ANSI C * "prototypes" for these macros are: * * int TclMin(int i, int j); * int TclMax(int i, int j); */ #define TclMin(i, j) ((((int) i) < ((int) j))? (i) : (j)) #define TclMax(i, j) ((((int) i) > ((int) j))? (i) : (j)) /* * Convenience macro for use when compiling bodies of commands. The ANSI C * "prototype" for this macro is: * * static void CompileBody(CompileEnv *envPtr, Tcl_Token *tokenPtr, * Tcl_Interp *interp); */ #define CompileBody(envPtr, tokenPtr, interp) \ TclCompileCmdWord((interp), (tokenPtr)+1, (tokenPtr)->numComponents, \ (envPtr)) /* * Convenience macro for use when compiling tokens to be pushed. The ANSI C * "prototype" for this macro is: * * static void CompileTokens(CompileEnv *envPtr, Tcl_Token *tokenPtr, * Tcl_Interp *interp); */ #define CompileTokens(envPtr, tokenPtr, interp) \ TclCompileTokens((interp), (tokenPtr)+1, (tokenPtr)->numComponents, \ (envPtr)); /* * Convenience macros for use when pushing literals. The ANSI C "prototype" for * these macros are: * * static void PushLiteral(CompileEnv *envPtr, * const char *string, int length); * static void PushStringLiteral(CompileEnv *envPtr, * const char *string); */ #define PushLiteral(envPtr, string, length) \ TclEmitPush(TclRegisterNewLiteral((envPtr), (string), (length)), (envPtr)) #define PushStringLiteral(envPtr, string) \ PushLiteral((envPtr), (string), (int) (sizeof(string "") - 1)) /* * Macro to advance to the next token; it is more mnemonic than the address * arithmetic that it replaces. The ANSI C "prototype" for this macro is: * * static Tcl_Token * TokenAfter(Tcl_Token *tokenPtr); */ #define TokenAfter(tokenPtr) \ ((tokenPtr) + ((tokenPtr)->numComponents + 1)) /* * Macro to get the offset to the next instruction to be issued. The ANSI C * "prototype" for this macro is: * * static int CurrentOffset(CompileEnv *envPtr); */ #define CurrentOffset(envPtr) \ ((envPtr)->codeNext - (envPtr)->codeStart) /* * Note: the exceptDepth is a bit of a misnomer: TEBC only needs the * maximal depth of nested CATCH ranges in order to alloc runtime * memory. These macros should compute precisely that? OTOH, the nesting depth * of LOOP ranges is an interesting datum for debugging purposes, and that is * what we compute now. * * static int ExceptionRangeStarts(CompileEnv *envPtr, int index); * static void ExceptionRangeEnds(CompileEnv *envPtr, int index); * static void ExceptionRangeTarget(CompileEnv *envPtr, int index, LABEL); */ #define ExceptionRangeStarts(envPtr, index) \ (((envPtr)->exceptDepth++), \ ((envPtr)->maxExceptDepth = \ TclMax((envPtr)->exceptDepth, (envPtr)->maxExceptDepth)), \ ((envPtr)->exceptArrayPtr[(index)].codeOffset = CurrentOffset(envPtr))) #define ExceptionRangeEnds(envPtr, index) \ (((envPtr)->exceptDepth--), \ ((envPtr)->exceptArrayPtr[(index)].numCodeBytes = \ CurrentOffset(envPtr) - (envPtr)->exceptArrayPtr[(index)].codeOffset)) #define ExceptionRangeTarget(envPtr, index, targetType) \ ((envPtr)->exceptArrayPtr[(index)].targetType = CurrentOffset(envPtr)) /* * Check if there is an LVT for compiled locals */ #define EnvHasLVT(envPtr) \ (envPtr->procPtr || envPtr->iPtr->varFramePtr->localCachePtr) /* * Macros for making it easier to deal with tokens and DStrings. */ #define TclDStringAppendToken(dsPtr, tokenPtr) \ Tcl_DStringAppend((dsPtr), (tokenPtr)->start, (tokenPtr)->size) #define TclRegisterDStringLiteral(envPtr, dsPtr) \ TclRegisterLiteral(envPtr, Tcl_DStringValue(dsPtr), \ Tcl_DStringLength(dsPtr), /*flags*/ 0) /* * Macro that encapsulates an efficiency trick that avoids a function call for * the simplest of compiles. The ANSI C "prototype" for this macro is: * * static void CompileWord(CompileEnv *envPtr, Tcl_Token *tokenPtr, * Tcl_Interp *interp, int word); */ #define CompileWord(envPtr, tokenPtr, interp, word) \ if ((tokenPtr)->type == TCL_TOKEN_SIMPLE_WORD) { \ TclEmitPush(TclRegisterNewLiteral((envPtr), (tokenPtr)[1].start, \ (tokenPtr)[1].size), (envPtr)); \ } else { \ envPtr->line = mapPtr->loc[eclIndex].line[word]; \ envPtr->clNext = mapPtr->loc[eclIndex].next[word]; \ TclCompileTokens((interp), (tokenPtr)+1, (tokenPtr)->numComponents, \ (envPtr)); \ } /* * TIP #280: Remember the per-word line information of the current command. An * index is used instead of a pointer as recursive compilation may reallocate, * i.e. move, the array. This is also the reason to save the nuloc now, it may * change during the course of the function. * * Macro to encapsulate the variable definition and setup. */ #define DefineLineInformation \ ExtCmdLoc *mapPtr = envPtr->extCmdMapPtr; \ int eclIndex = mapPtr->nuloc - 1 #define SetLineInformation(word) \ envPtr->line = mapPtr->loc[eclIndex].line[(word)]; \ envPtr->clNext = mapPtr->loc[eclIndex].next[(word)] #define PushVarNameWord(i,v,e,f,l,sc,word) \ TclPushVarName(i,v,e,f,l,sc, \ mapPtr->loc[eclIndex].line[(word)], \ mapPtr->loc[eclIndex].next[(word)]) /* * Often want to issue one of two versions of an instruction based on whether * the argument will fit in a single byte or not. This makes it much clearer. */ #define Emit14Inst(nm,idx,envPtr) \ if (idx <= 255) { \ TclEmitInstInt1(nm##1,idx,envPtr); \ } else { \ TclEmitInstInt4(nm##4,idx,envPtr); \ } /* * How to get an anonymous local variable (used for holding temporary values * off the stack) or a local simple scalar. */ #define AnonymousLocal(envPtr) \ (TclFindCompiledLocal(NULL, /*nameChars*/ 0, /*create*/ 1, (envPtr))) #define LocalScalar(chars,len,envPtr) \ (!TclIsLocalScalar((chars), (len)) ? -1 : \ TclFindCompiledLocal((chars), (len), /*create*/ 1, (envPtr))) #define LocalScalarFromToken(tokenPtr,envPtr) \ ((tokenPtr)->type != TCL_TOKEN_SIMPLE_WORD ? -1 : \ LocalScalar((tokenPtr)[1].start, (tokenPtr)[1].size, (envPtr))) /* * Flags bits used by TclPushVarName. */ #define TCL_NO_LARGE_INDEX 1 /* Do not return localIndex value > 255 */ #define TCL_NO_ELEMENT 2 /* Do not push the array element. */ /* * DTrace probe macros (NOPs if DTrace support is not enabled). */ /* * Define the following macros to enable debug logging of the DTrace proc, * cmd, and inst probes. Note that this does _not_ require a platform with * DTrace, it simply logs all probe output to /tmp/tclDTraceDebug-[pid].log. * * If the second macro is defined, logging to file starts immediately, * otherwise only after the first call to [tcl::dtrace]. Note that the debug * probe data is always computed, even when it is not logged to file. * * Defining the third macro enables debug logging of inst probes (disabled * by default due to the significant performance impact). */ /* #define TCL_DTRACE_DEBUG 1 #define TCL_DTRACE_DEBUG_LOG_ENABLED 1 #define TCL_DTRACE_DEBUG_INST_PROBES 1 */ #if !(defined(TCL_DTRACE_DEBUG) && defined(__GNUC__)) #ifdef USE_DTRACE #if defined(__GNUC__) && __GNUC__ > 2 /* * Use gcc branch prediction hint to minimize cost of DTrace ENABLED checks. */ #define unlikely(x) (__builtin_expect((x), 0)) #else #define unlikely(x) (x) #endif #define TCL_DTRACE_PROC_ENTRY_ENABLED() unlikely(TCL_PROC_ENTRY_ENABLED()) #define TCL_DTRACE_PROC_RETURN_ENABLED() unlikely(TCL_PROC_RETURN_ENABLED()) #define TCL_DTRACE_PROC_RESULT_ENABLED() unlikely(TCL_PROC_RESULT_ENABLED()) #define TCL_DTRACE_PROC_ARGS_ENABLED() unlikely(TCL_PROC_ARGS_ENABLED()) #define TCL_DTRACE_PROC_INFO_ENABLED() unlikely(TCL_PROC_INFO_ENABLED()) #define TCL_DTRACE_PROC_ENTRY(a0, a1, a2) TCL_PROC_ENTRY(a0, a1, a2) #define TCL_DTRACE_PROC_RETURN(a0, a1) TCL_PROC_RETURN(a0, a1) #define TCL_DTRACE_PROC_RESULT(a0, a1, a2, a3) TCL_PROC_RESULT(a0, a1, a2, a3) #define TCL_DTRACE_PROC_ARGS(a0, a1, a2, a3, a4, a5, a6, a7, a8, a9) \ TCL_PROC_ARGS(a0, a1, a2, a3, a4, a5, a6, a7, a8, a9) #define TCL_DTRACE_PROC_INFO(a0, a1, a2, a3, a4, a5, a6, a7) \ TCL_PROC_INFO(a0, a1, a2, a3, a4, a5, a6, a7) #define TCL_DTRACE_CMD_ENTRY_ENABLED() unlikely(TCL_CMD_ENTRY_ENABLED()) #define TCL_DTRACE_CMD_RETURN_ENABLED() unlikely(TCL_CMD_RETURN_ENABLED()) #define TCL_DTRACE_CMD_RESULT_ENABLED() unlikely(TCL_CMD_RESULT_ENABLED()) #define TCL_DTRACE_CMD_ARGS_ENABLED() unlikely(TCL_CMD_ARGS_ENABLED()) #define TCL_DTRACE_CMD_INFO_ENABLED() unlikely(TCL_CMD_INFO_ENABLED()) #define TCL_DTRACE_CMD_ENTRY(a0, a1, a2) TCL_CMD_ENTRY(a0, a1, a2) #define TCL_DTRACE_CMD_RETURN(a0, a1) TCL_CMD_RETURN(a0, a1) #define TCL_DTRACE_CMD_RESULT(a0, a1, a2, a3) TCL_CMD_RESULT(a0, a1, a2, a3) #define TCL_DTRACE_CMD_ARGS(a0, a1, a2, a3, a4, a5, a6, a7, a8, a9) \ TCL_CMD_ARGS(a0, a1, a2, a3, a4, a5, a6, a7, a8, a9) #define TCL_DTRACE_CMD_INFO(a0, a1, a2, a3, a4, a5, a6, a7) \ TCL_CMD_INFO(a0, a1, a2, a3, a4, a5, a6, a7) #define TCL_DTRACE_INST_START_ENABLED() unlikely(TCL_INST_START_ENABLED()) #define TCL_DTRACE_INST_DONE_ENABLED() unlikely(TCL_INST_DONE_ENABLED()) #define TCL_DTRACE_INST_START(a0, a1, a2) TCL_INST_START(a0, a1, a2) #define TCL_DTRACE_INST_DONE(a0, a1, a2) TCL_INST_DONE(a0, a1, a2) #define TCL_DTRACE_TCL_PROBE_ENABLED() unlikely(TCL_TCL_PROBE_ENABLED()) #define TCL_DTRACE_TCL_PROBE(a0, a1, a2, a3, a4, a5, a6, a7, a8, a9) \ TCL_TCL_PROBE(a0, a1, a2, a3, a4, a5, a6, a7, a8, a9) #define TCL_DTRACE_DEBUG_LOG() MODULE_SCOPE void TclDTraceInfo(Tcl_Obj *info, const char **args, int *argsi); #else /* USE_DTRACE */ #define TCL_DTRACE_PROC_ENTRY_ENABLED() 0 #define TCL_DTRACE_PROC_RETURN_ENABLED() 0 #define TCL_DTRACE_PROC_RESULT_ENABLED() 0 #define TCL_DTRACE_PROC_ARGS_ENABLED() 0 #define TCL_DTRACE_PROC_INFO_ENABLED() 0 #define TCL_DTRACE_PROC_ENTRY(a0, a1, a2) {if (a0) {}} #define TCL_DTRACE_PROC_RETURN(a0, a1) {if (a0) {}} #define TCL_DTRACE_PROC_RESULT(a0, a1, a2, a3) {if (a0) {}; if (a3) {}} #define TCL_DTRACE_PROC_ARGS(a0, a1, a2, a3, a4, a5, a6, a7, a8, a9) {} #define TCL_DTRACE_PROC_INFO(a0, a1, a2, a3, a4, a5, a6, a7) {} #define TCL_DTRACE_CMD_ENTRY_ENABLED() 0 #define TCL_DTRACE_CMD_RETURN_ENABLED() 0 #define TCL_DTRACE_CMD_RESULT_ENABLED() 0 #define TCL_DTRACE_CMD_ARGS_ENABLED() 0 #define TCL_DTRACE_CMD_INFO_ENABLED() 0 #define TCL_DTRACE_CMD_ENTRY(a0, a1, a2) {} #define TCL_DTRACE_CMD_RETURN(a0, a1) {} #define TCL_DTRACE_CMD_RESULT(a0, a1, a2, a3) {} #define TCL_DTRACE_CMD_ARGS(a0, a1, a2, a3, a4, a5, a6, a7, a8, a9) {} #define TCL_DTRACE_CMD_INFO(a0, a1, a2, a3, a4, a5, a6, a7) {} #define TCL_DTRACE_INST_START_ENABLED() 0 #define TCL_DTRACE_INST_DONE_ENABLED() 0 #define TCL_DTRACE_INST_START(a0, a1, a2) {} #define TCL_DTRACE_INST_DONE(a0, a1, a2) {} #define TCL_DTRACE_TCL_PROBE_ENABLED() 0 #define TCL_DTRACE_TCL_PROBE(a0, a1, a2, a3, a4, a5, a6, a7, a8, a9) {} #define TclDTraceInfo(info, args, argsi) {*args = ""; *argsi = 0;} #endif /* USE_DTRACE */ #else /* TCL_DTRACE_DEBUG */ #define USE_DTRACE 1 #if !defined(TCL_DTRACE_DEBUG_LOG_ENABLED) || !(TCL_DTRACE_DEBUG_LOG_ENABLED) #undef TCL_DTRACE_DEBUG_LOG_ENABLED #define TCL_DTRACE_DEBUG_LOG_ENABLED 0 #endif #if !defined(TCL_DTRACE_DEBUG_INST_PROBES) || !(TCL_DTRACE_DEBUG_INST_PROBES) #undef TCL_DTRACE_DEBUG_INST_PROBES #define TCL_DTRACE_DEBUG_INST_PROBES 0 #endif MODULE_SCOPE int tclDTraceDebugEnabled, tclDTraceDebugIndent; MODULE_SCOPE FILE *tclDTraceDebugLog; MODULE_SCOPE void TclDTraceOpenDebugLog(void); MODULE_SCOPE void TclDTraceInfo(Tcl_Obj *info, const char **args, int *argsi); #define TCL_DTRACE_DEBUG_LOG() \ int tclDTraceDebugEnabled = TCL_DTRACE_DEBUG_LOG_ENABLED; \ int tclDTraceDebugIndent = 0; \ FILE *tclDTraceDebugLog = NULL; \ void TclDTraceOpenDebugLog(void) { \ char n[35]; \ sprintf(n, "/tmp/tclDTraceDebug-%lu.log", \ (unsigned long) getpid()); \ tclDTraceDebugLog = fopen(n, "a"); \ } #define TclDTraceDbgMsg(p, m, ...) \ do { \ if (tclDTraceDebugEnabled) { \ int _l, _t = 0; \ if (!tclDTraceDebugLog) { TclDTraceOpenDebugLog(); } \ fprintf(tclDTraceDebugLog, "%.12s:%.4d:%n", \ strrchr(__FILE__, '/')+1, __LINE__, &_l); _t += _l; \ fprintf(tclDTraceDebugLog, " %.*s():%n", \ (_t < 18 ? 18 - _t : 0) + 18, __func__, &_l); _t += _l; \ fprintf(tclDTraceDebugLog, "%*s" p "%n", \ (_t < 40 ? 40 - _t : 0) + 2 * tclDTraceDebugIndent, \ "", &_l); _t += _l; \ fprintf(tclDTraceDebugLog, "%*s" m "\n", \ (_t < 64 ? 64 - _t : 1), "", ##__VA_ARGS__); \ fflush(tclDTraceDebugLog); \ } \ } while (0) #define TCL_DTRACE_PROC_ENTRY_ENABLED() 1 #define TCL_DTRACE_PROC_RETURN_ENABLED() 1 #define TCL_DTRACE_PROC_RESULT_ENABLED() 1 #define TCL_DTRACE_PROC_ARGS_ENABLED() 1 #define TCL_DTRACE_PROC_INFO_ENABLED() 1 #define TCL_DTRACE_PROC_ENTRY(a0, a1, a2) \ tclDTraceDebugIndent++; \ TclDTraceDbgMsg("-> proc-entry", "%s %d %p", a0, a1, a2) #define TCL_DTRACE_PROC_RETURN(a0, a1) \ TclDTraceDbgMsg("<- proc-return", "%s %d", a0, a1); \ tclDTraceDebugIndent-- #define TCL_DTRACE_PROC_RESULT(a0, a1, a2, a3) \ TclDTraceDbgMsg(" | proc-result", "%s %d %s %p", a0, a1, a2, a3) #define TCL_DTRACE_PROC_ARGS(a0, a1, a2, a3, a4, a5, a6, a7, a8, a9) \ TclDTraceDbgMsg(" | proc-args", "%s %s %s %s %s %s %s %s %s %s", a0, \ a1, a2, a3, a4, a5, a6, a7, a8, a9) #define TCL_DTRACE_PROC_INFO(a0, a1, a2, a3, a4, a5, a6, a7) \ TclDTraceDbgMsg(" | proc-info", "%s %s %s %s %d %d %s %s", a0, a1, \ a2, a3, a4, a5, a6, a7) #define TCL_DTRACE_CMD_ENTRY_ENABLED() 1 #define TCL_DTRACE_CMD_RETURN_ENABLED() 1 #define TCL_DTRACE_CMD_RESULT_ENABLED() 1 #define TCL_DTRACE_CMD_ARGS_ENABLED() 1 #define TCL_DTRACE_CMD_INFO_ENABLED() 1 #define TCL_DTRACE_CMD_ENTRY(a0, a1, a2) \ tclDTraceDebugIndent++; \ TclDTraceDbgMsg("-> cmd-entry", "%s %d %p", a0, a1, a2) #define TCL_DTRACE_CMD_RETURN(a0, a1) \ TclDTraceDbgMsg("<- cmd-return", "%s %d", a0, a1); \ tclDTraceDebugIndent-- #define TCL_DTRACE_CMD_RESULT(a0, a1, a2, a3) \ TclDTraceDbgMsg(" | cmd-result", "%s %d %s %p", a0, a1, a2, a3) #define TCL_DTRACE_CMD_ARGS(a0, a1, a2, a3, a4, a5, a6, a7, a8, a9) \ TclDTraceDbgMsg(" | cmd-args", "%s %s %s %s %s %s %s %s %s %s", a0, \ a1, a2, a3, a4, a5, a6, a7, a8, a9) #define TCL_DTRACE_CMD_INFO(a0, a1, a2, a3, a4, a5, a6, a7) \ TclDTraceDbgMsg(" | cmd-info", "%s %s %s %s %d %d %s %s", a0, a1, \ a2, a3, a4, a5, a6, a7) #define TCL_DTRACE_INST_START_ENABLED() TCL_DTRACE_DEBUG_INST_PROBES #define TCL_DTRACE_INST_DONE_ENABLED() TCL_DTRACE_DEBUG_INST_PROBES #define TCL_DTRACE_INST_START(a0, a1, a2) \ TclDTraceDbgMsg(" | inst-start", "%s %d %p", a0, a1, a2) #define TCL_DTRACE_INST_DONE(a0, a1, a2) \ TclDTraceDbgMsg(" | inst-end", "%s %d %p", a0, a1, a2) #define TCL_DTRACE_TCL_PROBE_ENABLED() 1 #define TCL_DTRACE_TCL_PROBE(a0, a1, a2, a3, a4, a5, a6, a7, a8, a9) \ do { \ tclDTraceDebugEnabled = 1; \ TclDTraceDbgMsg(" | tcl-probe", "%s %s %s %s %s %s %s %s %s %s", a0, \ a1, a2, a3, a4, a5, a6, a7, a8, a9); \ } while (0) #endif /* TCL_DTRACE_DEBUG */ #endif /* _TCLCOMPILATION */ /* * Local Variables: * mode: c * c-basic-offset: 4 * fill-column: 78 * End: */