Ֆv='>Mj}>oƘGW2}s9n]3]6W[N<= tچFoY-dwq^ZINDH RUDk8ۛ']ޠWcʼ<+;pJSkm [w/}w{O>΢{>7gvk_eg<={=O/sklWG+Zzy:;^Jl8AJ}w)h;;6QZwά=o4op|e3WU۵z(yݯx۸ usm;qN=/^`y) 6ڽveB|W^uݧ:}"g7 !;Ysrmf:2tt56=77q O_[_.]gAξW9筺ثԆ9pn'w\9^U>F}ڋ<y cDv>TMI Tݽ;^&W& ׻|j>vJS tWv(@(@Ik 8$lR`hj7ξ%޽/[j=vK7_zzᄌ=6ͳo;f=w{s|P >us1=z@$sާ7nNw&U=zvi9۪AY)FN ׯL}>}}T5Tnt}wirٺZUN-rj֡zP{{Ȍ1S݇\̢]gnkjأFV᳸ŵZjwoLs@W gp]7@潇Dw>rļl{-o\PVλ7Zvn曪}]}{{{k_nÝuR8nݵ04 Һ.ڑ}% Ulj@ co P@CX$zݻחwrۯwms%f]۽pրmBT@uwYw3vvvyXnt;N^Kk7 t hh 4 R" =CCPkjY͛;vwZ=%-fmXqEQ];euZVƷ^Km{cX^o·jƚ5Amw}篷OM|tP۹ܷ7s.yܢ>)>|>nУmkFh}uى}Czᦈ@ A@==4ɡh4dM=L&@iLI=S  #@&I4'I!hLC ``LLLDA2iM MD4GjI4M=OIBQ"AM&jz46SzSтSi =GꆇhB0M4 SB56=zCʧx/٪j4ZN(t鈂jw**S@F56UA$DU1LUA^@ -TTPU4M,T@MSR' ̈́d$!'Bv]NLQ$~C8OQ_(1RPp%k8%pi쥶c(UMrOk?Je^֪-IFEzg"BMBF/ +R0Mڧ\,Z%`%.|zQlb"$)*i h((bJ*k"DCovՆӵv՘9RI]8 {dUA$D11 L1!10@4ADJTQEU I)DBz@@HΟuTbT:Jq`> :fQG@i؈bo?=DI@(JP1)BoxGe BCmt5@3?l!>( iJtMA 4D %U$AEM $Q E D@SKSD0DP@ ;EIR4Wbszwmh$Ta,"me6jXzH9 {wx[瞕oDþN['aC ?P5&CEaLQUIea- N?oo5φdؘ?ҫob30M4UCAFFi5;8lrAlڒ-418LpTlb`VYBTDĄTE$ELU0L I 0A - 444,DBPQRP0 DMP45M,QDRSSQSLD1D4LRLPR4݊Xhe)F$& (aB$"&h(PP($H $hJbI(%f@B%&($J"j h J**"b"*aji"d) " bjbH*bX$bfd J" aj h)Jh")f)` j)" &I j&)IbfhjSS$MU%$T@TATMAJ0PM1KT4 AU HEE0 T% J4 Jbi)bJ$(j ") )&BJ) X* dhJbF&"bZJBi"JbHBb "Hjhb"h*h")f%!c5Q5MU]DD0RQ1QDS$P1$&j*j"JJ$("! J)e"i(Z*VPbj(h" )***"XJ BBa**R&(""F! ӈ"bVbi*bj*jj!`Jb((YJI*FRZibJ Iff")b"a"J@Z@ff@diD*`IBj V RZH b(B ( Ba*R"%()"B(h&ejj" j&*(hJ"bR"H"b&(*ehjXa DF&&I)J ((bR``$ (ZB*abd*"F *FjdbF"bH*i(b&i( "F hJ&`*H)%!R" (I"IbAS 2KELARԐU1PI$RT#E%4̵D5%*" &$n%" CDQEMLJ MRU!%DPDI1 Q 5PC %%4EBU 4E4EELELMLPPP\li*)mG"&!Z bF'Q-{ݸi Y"B& &{K41TC2TE,J)J H5I9IZJ e%(`Jf)R""J&heP("X}(C.|Wc*#YĢfI[`:b"X:b 1ceĔ{1oW˺m@qBB(=8k>Z ATeEL1'U`x+0MUQv*"%ؙU2 mTH\0N4guJ,A4Ҍ<uPTFJiRED!~d*B)*_eh (h iY R*6It4qCE T!۱;,K/;Q1?([|QjG:řWJF0`pб 4CD4`Rh,}ȈY>k(EAͨ Q $ l a2>N 醏oa!H,l9~Q>N @Jf>fay;\`:|?)1WTXS#HË)iܨaI3ҩ [p1,6'ogl6ߥ,*U¦ F/NG<]f=S59Fqk[Qa.8:E?*DIdJ?^bHV/wнƙI:£?T6q|9__vRLJCSt|m:sUyv,MՆ]gKnlyG*t!ͻqz?g8^XdвFEAmWMұ"B7b,uj( -/T\s@0劾%s=r0Xfqāďz~Fu'} g~V\VASo V<+bBVܯЇ1..'}[9uɡ%=R:%<[13#ϯx(ǏmKL=x۠Nmڕ zT8bm^+Bz&g}Q%!Km&R1m@:U  v=uW{=bzJL':*(I|㯝a% ^ezLfӜ9ͧHMjSf('S B'kg&Zk>Bd2-O ~(rku,^"Ȕݰx@Zb ( NBsW0e !@*ALm\o {Ф9s%qe{(F(F=phA.:ꈬ0XLo8T !ꢖx9\,Q_ ÿmɐ}ZJiPrdb(nؗ*aSOB|}q`1"5oϴ2$cJgTMC'{Ep`\l`e#a~Vyن6h_[i~մeaF7g3֘5]0/G)>〸t93,zȖgGvZv1IN;4k!CBEQôȂy5c5='RDcXapZ߁\w k h.m9Pt'A fSQ0 h@ќdE߲Ӥ |u{p1; y\Z]^( F^bP}-(Pf޸C6BhȰ )fY0~<_'i3|8ՓpNTF9F1 ֣EVd*?懏*sɘ©N%Ygwz]Ft)L1TTik9ļ4?rP,v<>Bή6sA)j||uDJF)D2+v֔ a" UNb NzTmph_ҺkNār&I(Mjq}of6C_rRazC'}_w0.Z` fh\HDs,ʐS<ۈhR]6;K@mͥǥ^uX`jW*P@\ τ]UTy AJ̌4ΊET̩Z8Vvs8U#z~2m'fn6'd, 5B) 7_FW Q C|D JQG&\/#cdZ9`-z^%ܼ_ d{]{FAB࣠f7)|ȥfC} ~h|qs%Xzsv³GmxV~q~Z3S"ǹNE QO<ҏ?83ԇ2bco(o,Ki2;U z@ό=(&^'=)ڡb";v\N$$Lw:"]:fBu2f=UwEy;l*`m=O}g:ڟ)D+艝7j`CE~<fg՝Y9&||$Fmľ e}bge a`k{e-.8@įy V:.+Qg[bc{5Kt160$OO4eDP5JU[%5i{uYf!hp`ASA ̄)F "|??6sAl^7nUJkt c$o ghP`()UY]#l l+:IլNu_>_(QC' v<74h8d`Oeڪ,Yژ!:T4>Rg,x&u28͸y=[*bs HφH޸}FsV9Z@}*0z&!cs5j]4+pGrIíܔ8>4pLS/}eShk05JNJҙho"l&m$IOiw1FQuGpkA!`I8kʨ<+G|sO(a)L!H~O{Y,g;IzI,9@nm7(/&+/ש~s9a’j?_v# ҊʈK2*ʽ ՇO'] O&BH[D" a翾lBZޟHo>z^jw9tO3:R5I&rN%R׊ȍ6R~8) ˀ ԪG+ŗbE-ɜQ+"r q\B1oQiDW!>HDc4FJ;H3K^6f~)gWwa}IP,ZbEgǍ =An}_7YJc `3P| Z-?Rn¹%!O}5{o w&֯};iC՝SYJZgOs̄IPnhʡLNx;1? $[CI+z|۵'*8AUB\Rhqdl=V^=a=# ÔġDg3LMHPR8xY_ϰDٗ;:䣄ů\6C&0w玈oL|,aNd=i6䀆Lq:;m}~Ys_\iq`k-3CG3B&s1!"EtVOC.ؿW@#3i1nW|F+щKK**UʲsZꮂw+mR(D>ӃAEu(!Ȗ8_̘H ;9],[nU*q^$ tꃒ^*3aKuJ2K3 *~_;@ٲ{{i#*$91t,l +؊/&<@}d(nmek".xx9}~mW+> T\O"|?W:Z:,bK8x3|aAU<,{w' r:psh9I/ bBci՚= ㇒d ' 2?;8Nm6OnG7ωj˒ lbi[*V2Bp8ф,JPEShNW*EON;Pv};w!i~jS܆h jH( Kb)(F5'`V4]SC5}~]yXhXHO'c} ں SJfC9oCCD6G%7KxG\&t9 DR5zO Jsy-8`u- ਭ+7E2rKC-5LA;?I5u{s0 ?[89הbH.gM||`16tІl R(i0hC!<_DFbZIMd UVYޏ~˗&R*7N Էf\ * $ML`lpC#zͻJ&2{p;Q+!?uOx*),/iEWba'rsgKbe}LY?5grс1z4 чۿɿ{.9:T 'ZjkP C|$H79 ?NDq_m#qQ}0E{ )<}KMCâ@IxB AG ]k@TP!6p,AJ)1E#/*<jio*1Q&A=ndQQ'6œJXse>iϭ/[O۳uψa+0Iͣ&.np'o8('4g81^Pa8׈!ay$5Yk $ә~͛SĽ ػZlinZ ʍDc~qX pC\^ sݜ$\:DM9v5H+ݽ=u"?'^}AY* *ѓ dQ Nk2ܞb̏ =2RGAcR 'QJjSeںUՓP& y\,4a\W CLf o> ~z\3U;䒙2(;zz 8 4Gy2Y.ԱIsK<^" e*z,9JD`ǴTTyuvTH絍@$ 0zJ+ 9@Arfc1}s$Y1G܀󃵱Nq%mA:{n% kB,$A|ol(+4"EWò TY&C5R/"|e5" j^}:KT0=I~=TmΚIu0GЏPת>@ eT{"q ,&lv]pQCN("^'?G y{xW ?Z|dĮ1 6L2/h 0\oKr93F,&ߌ8aC]2pUXAOgD>GE)p06O5y,$]a{IR8˦#L>Ȩ+N""eA4Gkc$QdRszV(US)#oECsG2c4ûғ Y^ ٍZ i+}V'Yde#q&(TXաsMFT\,yKڦb$\'Q_c˃"ȸ?.gT)%&̔r+#58qev:r~Spo۲2/d`lTjgjžEuuJ0irU=>lmQf(`0dvNO1F{Fd-}ח| %˝׼b$"yREO:9'Ҏ擐XPY}Ck( ۫WUӴtAp#+=6?}uϗ^ FAT PP_^;EKt* H}Z煂˛9k$,>;X{H)6tRf!A0'M'~խhEH5;2oD(J"\uj`PDx /G̣nHQ(lrTjȒighZ99(%_zT:> ys9h6qT%r~^> *P򧜤OoLߓibG(9{fGI»]) HJ.4s!C<.ɞtM]teÅr#$jrk)FT]X}+"m(:9/\R uɵNCȥD  setqp8$D9(b(0dR%Om`\lº[Ņ5dR5li5osM*)ji Er3}jϥwUY,^7ڃnn̬K27"(+Ԣ'W;BWŇY)C_ULl݋Q; ^-l 5LG5ߜ<㜘Ω &CQ]2ay+P(CaL ^dpݥPN^ )dQe/M{PпUVHbh0WvjAir@Z:%ZD0{.< sTp3B9 =7QJP fH zgs5-sD|^EDL%XzMTLTU}9!Y?-/2nxQ@npr)fՒ|YZ? ; @VB uٗó,]T< u(>ל2ߑ]+q8aXnltO̧N!G4 G&]T{wiMcMV\6lٍ0qa?K68 8xk㶈jѱUC"^A-)m=Wn]Ji,>ʋ?[Z9ۡJD ({jp_4Sb)dpwiyOjoӓ@ܹV]Y W'y p'^)!ׂ *r׳,UDP[Eq 6CUo>ޯ͞)GkF a¼fʚv& i``2w \5fؽS,=NwDlb:s_]-+>+óf&y) ^ mfޜGL+p۱<L5QrTP`&vߋ!0&OQj<| yJM~9Obd/ *Uo*5fNѴz:VRݮ1e-OWJU[M!(EGl!zU~%ft $-#-i7tQFQJF1249 &K*i!E,2/p_E6K\D8-4a;ſ«>?)TRK?(VsáG|KYp;zy~e?j^ܸXxACcKTA# _'+Zh}sGz3-m! G̀L3`@"{ū{O|YLk7߀gBzK%4|]?BHZy Y:ŏ|F2|y6JkE;;Gܢ̗hTSJ{.|1EfU[U#3?{9% ))cZfQν6wq.XPEPFX$ $}f1՘h/9R@WWJ2tV0K9i޺dZO2.GE7(LJBPMGOô⯱v,I9'>sK:ELm7}ѭku|t4BjE df&ʃ~K"yyb׺d@_ӧw4k GG싫) ,Q4,R rDH@ԡm^Ǣ=T ˤsd.hEHYT(ʵx'NU\¯dNPZ%-,gRqMTh;W1V dW8N\@)پ}ޙORnhrNml_Ȇ>-C06vkKQ#e'S׿=2QmՔr p)"yьXV Z\[@'qk̈́x4ꗃñv60ݎr+!Q=w4" %kXջfϕpj@pWk?7Xy`͓ _ RD@v+2mok-]{_7:}# =yYw|~+EoJxt!CtQTѝwuf47$coӱWtO(|>oΈ^niTe\2#K/YSGK)j^2y*GRЏ&w) p=@P @5gt ZFD a\L">?:,HF`S֔Ĉ qq)Aqp@P>QhP5:d6uâ`W5*0FC5N,ێ9nR*nuTՋ@fq$+!rTR} wG|+_M.4q|n)GCQ"_LkȝK7ffbcWBCNşءb?P厢q'A/0?= ;hubiowCax}sK:8|)ӥ{5w5lkYUG \**b!87g~*1;FBB*!ë`xJ!1TJL3[?bOc&(=(8F`Ff3a0r|:C7wo{hk""ʆ<]byk]!)D-Zsx{0:BugWGW2[U0~Wsў !HeF8k&AC@ߧ^ϵ^'n W~\ WE)rd}휠g~r4/%D6ez!y)Q^65_a-S6IA:dX#($ n!%IVP4^'ë(m=b?k6&-{O"^dÎW}T⇦ Cs]!b Oʦi{iнyt@y؏濓?璴3[ݬow^tJj*X?._MȽDEJ=Ipw;[f¨ Z9_ʄfn8/b} |. 6.Vc ICmxO>,㩋00(n['S8CPTFU `5^^4ѾG+( >1}cslR,,'nvAy^*[B-N!fF ;eoչʦĀ%*(H z{zs[g: ڣ Ӡar*!5rpҍ3Nwg@<%3Ng_DX|$n^ E>J @Wz ., *xajyJ<f"둍+@Ms`>L50DF3k]9ɭ7ٸ+F7$]k{zA/Ӽņ_:Slwv+ VN(yca[}q,-e>şHv \$%s.%`Vfӥ쪳XA}Ӻ]`𢣳7vHc\eԮT<m*?up݆  ]GS~欧DydPϋEwR$W۠<ڊH$Ξ`b;VSߥSmA[{r^{>?IR0hX j5'!X۪<7f'fvR2'*ݱ։G3#O2]Zj B<[UFGIj"!F5{lRzZx0Hc8C97nsԓNdyVR5dܪ^BmSO'?EPvax_@P~(|"9t9\wyXO3ϥ8C'%uK-> 2S%zËⰰM Z[ջj5&]*8J̀Teq'\u'P&n(ğr{mzʩsd?_ uj''Qj:[ Қ`;'?E5x5u?<Yxʘ 3QRe8sR>Ei(F|n1 |_׈k"ĀƭnW^QA(m_|>' +u8Cσ4׬X$0&Yu_]o7B.?k0AiJEDWfwA B<ϐVo;3k8[[k@49GU}W7\I' g"^ -ed|Dq~pG,4!&jSLvCPhܺd$`t|X}*sB^q$ A`|F=}8zn3k^F9xt$ĽOYvTҿۍ aa' eC9p+I'O^dP6I P8O8~bj9>Hw8H=(f!{0ȰDqDND$ȁĢN!:Ͳ]qpQ(e;> UPV@󣴤 ݬs0@ :W 6ejn\Dܣ9-㕂р~v/p[XфG UE&OxF$%wor["rᜪ-G_YkCo}zCDEr32g yvFXߣUbuo)}֓,?JȧsnzC3*MXCgy^G0P ꞮK8>ify_˼j<=qgIAӋpŻ&3HӪy?7y\D_֩$dw!uZ'PQ**!?ss}nl[/%҄Dta`9=h3|nR"})t-k ϳ9z:Ҫy@({:[9j`5}(^T{ymQ=, _) &k䗖.%tR1A I!ah,}]8x;o$a[O\'A[bƸ2>Vìy?]LR۝RJse_%cQp"~8x%\ }la z,2Owkr3Aы#ӆ/s v,էb4D`@6zk>:;i&2|SW]ﳏm(Dnsq LtT,-涞H GBgx?j/?HnSuFGiwADLɪ^qA8b&%Ns0$ g+V c)SLB#28X8&PSw`F@! iIHήݿ)O12a{Jܫ5@ʩ7,,z<ыK4 7_u"$ @kA ؒa%J(+ QN@:NCˌEU@BUQ*hL[f)( j) )R("@35)yTlz)G4j͚ &Z("4R,@%KB-PF۲=1 h(XMHr5&U>MJ1/'x=n~=^a ?Iav,(b+ O6U`H V>߯j~o@_;:)#,Ol' 9&-jޣAc fs?1 $-!=CWٱ#R}8׳9'i(U;!:܁LG~on=:|9a?/^ P{Ym~lNDO· o+oURgyAxXWpd- >~H@@KX ܨ~Gߓ*=S4 FI>j,"#Oeď̌=韒1$C>R?SEM_1xX/;țP:޴|.5rƴק67!7JeBD|E0v2}0׭.g' ´_: ?^Xy~X/Fp2ק{#S}^ܩw 88}B׃~ AG`~ 2~vA?dj`tbWLUBl1{v WƮ(:'1).Ԋ*!qsi9]\vbV*]Tj7[%%T8®Ʀ&N ۈl[=fuUJCOr9m~o'|5yL-f ʼn2PyIA!P8^w8 xyҬ+ʣg| r[*H&k}k2㤧]NQAm"@RCj"G|m /~u/q(ޡ**G)\Y>8[#u0jTR2%ImFNFS-GWxcMD71nj@YY1AVmW%Br&OӾ-%#~D% rq ӿa;d83r3ÌӺ%Og*L*T~ 6#ȰND+Nd)u3 qˎ&8珛fpqCh23LlJS n4P{3o˝|Ɲ]Gz%ڊDg*UAW}kQ]uo&"߂*Ƀ$PY(+Ql"yw>n>:xappP @<)Gr*X³5aฃn{B<׷!Nn$&_=+Đ+S_!> Ν#)qՐ=bA=j07VP'O3P"=_~߁FP C9Pz+O@|~%9$JLn|5*\@@N-\`.wHbGW?Q(hnUpruv& Y< MC頬Qx&:Ҵ)t? 444 S/Q`xWAzqIX,y@G BN Ωfգ +ء> xi8[2P?-#clCxXřFb/Ψ\}I&BHZ|ɂK#Z9 'ϼS`cg;XKN ߯O}oc \1ݫX-a^ (3l8~) 3,4QL\RaD 0M5q$-7\5LTҖ$57(ޗ1D6,be LT4PFz숈ٱE',UơWeNXi3BpJ5廌Gv_cڪa` 4aFb!"9 A ;@ qSX+JM1ĤU>֔:cjJ0Ȱ_&C-Qg:E9̸VndX$1BDO~,/,H04د fI(bC'g1^Zb!4n;ApyRԅ^#6Z=*TCPN5LQE DL(2jـC:&m j(Ӛ{2ep{zؙ`zBuNT+zo7=1&:5_rOΟV3 uᝬ4Ċ!X,0̒萶)E.'!W?05\"&$,h.m )/gz" \` kh, ".9ۯ^42 G*x(wf5w4G߀oR[y/8sg`|걲f܆Oy&X" QCDEub8u[]Byej1:gJ9 poc H,UUYzX'8cãFS$x=5DhXb1_vs*Q{ cXxs(yPd܈Θ,*P>ũe;evk\ڍi¶ Uƅ 6| aY O: lV!@i;AOwהjļbR?у /mP"dq}$qYROֶC윍Ä͑/0F R:1M;@&3QBMI9,vpl6X8D*&,.xvtX՟Js苦v4q,n ԳܖZ-P]L*@Ȩ|."z@7׏GE ^tЍrT>'.:jׇ>18L鏇\cu2kƯd&?1~A9n`4Q&m;0 7o?5gʋ*BV޻qGHPp41h !: )a^N8gfaP8$g*3ƭS&Rb$t @z>λ_+Q;@K|WZ`~Xk:n 05,]aOnGP\Q1f-Tg{:h)y"8}.?^fE;5z{EOctYfpL"vѐz}?EA&+^D!թ4׿2*v:^\WS &BKϬnk% 2'\Ь:>r |f9}O2w[#_!j_ä!vG09>+;:LC>mE0;8 r_+ޏluDX9S^ecի@ܻTw5Jxxr(;|% EGy5A?Q|gP(c t21 780(R}_#nA_k ~ޚavϻVR/lۓ#6G2I"~#ڿ?v Q`g!kh>6vTscbp@}67#3J# y@֑)_1Ms^`~vHPPA1Nu!%J"j)G=:DPRHRKJ"!&8Ilm# Ch8b G ?/s9^X{&œoQúϮ=ka&CK@㎹P=Ob _HԜ1$<Ӑ/O HrP<NRA3Beri5U#8i+LXx^vf''b_O;2h¡2bv9b kE:QA1˜tCIcR2Qtz h=ߞ|oGR=Cu彚,d(>"hc~s|\噝yF2 I=pR͍VF&a%1PncxVQk>nķytKX5>34ib'w;Ô˔ yZe>Ɂ;sWU;u쩟ǧS!+pQEx f Z9R9P'ov6 Zo+ő*@מ ESD =E4S` R $:v'[ ((@L6vn$wLSG|PawǣwpT_Wh.E .}#`: r@~8*%:8τp%{Pc5tl{>POtbU#9+ ۉ rCuE ^CSq~-jV>eBYIsmKMP :Q dI |ͷYgV=0?sgrHv8L"N $vighuwuo~f>DeKTayD> 19 xg\P]} k1j@@>eq}8x"KٖKADud-M##LQX,?22Ioo^g5|7~Ji7Hf搏\35VU0WF6KIB m?+ə >tӷխǺ'9ApEs[sJREg4/xeJX%dHeQPXn?D.Ke7\.ũ=qShUv|#E~Ր?h?yBQkKv ]\(7DC 1(M  Ӧ_b>"ub4td;++0(mߛXkNM*(5Khe'W[?Bj9 2dN([ڢxlcfD 薑QScHCc !­5x]+Z1~ȯ==Y]YANL]RȾɡ@ϩ%7 lRzprĹIk˃2β>^vJF-p}oEb*\/k;R^b q/C>j}u¾:QR d ٜzeݲ];鷮ɂ_KOc|QIQVl;uA.c&[4Ļ䮽r:6VΑ!D&EMX< L8yZag:X9֋"Gx9ۀ :GP/twÄf6*>nzrVt7mù١jqt+&lVmv7Ev'F^4hn`UNgT篌`d)6IuP_hɅ8(y;wz; M5,y]ose *5pcŁ[ݮ. RڮGmIl7ᢊ:z.:WYWB=~ެa7eҏߘmUNP"Œ l5jv2 $Y\ggc'(j6ثU{l+sKo_/B@qv5rq|v1 3u!}rߴQURp/DbyuVo>8m}~BŰd\ė'8zt$,5GƱl8E@.n6$Tk65 =6b{3_(=-_o2_h5ؕpr\3}ΠA |Hw Ӗ{ Z0Ei6k_ K,by3ɼ&=oTf g$"0}+mAcv7R"N.XAڙC*lJFLʓUKhv 3xn4g݄1=(3L($ X.b*#xӝX$l^f\phq"hXB!]vtV酑;n8Pm<9Bs e ToeP&˃mzFj#_5NsdQ|fk=Ek %J;Vj|jn و[0N3)QPU@|Oſ:?sgk3|{;3թDߪ0eyޞ`mVD޹wyѕ.hPHX*H{FȌȼhYXkSE|߮UoT< vg{3-r|%wemӽP =#Ktǣ;٠Cpƽ@͍G 2)rLali3i5+fm*[ET!YaҩK6Mz(]6k '!2UamL ^bݼ0GhpVW_Л!w6jIϭ"=(0z}ꞎ}S48j $v> N ($c㤶01 z<+3I]sخJsZ& (EuP[ʱy|]y|&zⳡTGf %ػ6]/l*Ff%ϼ.6ovL v+qݰz#{YZIzcɵDy\qK򋕚!MU+sdjx :e@]FWمauz/1 0_B}>?C~ CB`"tl=J>.ٗgkڋ؟,_O/9XF<]cqFg-HX*QX$Wpza[{p*s#6BO~N'y|B8t7^ՌmayxXUW/т(H՞9VuB=X!?矨xNz{DSt_hVa)UA^\bTXqG,QŞkZ}op\#PRnD%j2z)BU(Ipi\fAs2MĤoPNV`o _rδxrRwѐ$X5]*0} w=nѪb0?2mT[4^%:pg%xP hDO@"tovLpP75j2@@@WF+x] ( %Fun 4O^qӲӯǪ[Tg"4{^ U(.Ȝxl,=)$ɸnOuX<懲I&L;B$$z5 K~< DOVG@J h GQ'睤:jq`jr;1HDg[ NaUxVf|]vrq0ݿΆ6 y@g$n7HFvuEll8Ent߁%'z˾HAj lOe(w?goebʈz J k ,C)Gg?LBUF@` Óp s1}2QPF~X H`w }=#I͔ v@zٻ(lst8ހӜC|6(AJBf'V4ph1 -e p *AU8_'LJ) |m^tGY<(o,t[2P.SU4~N/ZP_eQ-Hp׊]HunLqH~ǂ<ߧzLpp9%ӶJ,t|y|)"*@iP"0>I0Ǣ;RU7EQ='AEf_M/#3U _w$Na?nνVlfvఋvGJ▩iQºRVq{^.a\GF#8$AHȠ~WAXϠJ0I2X,2ֈ7Pk;;ǥR  R%}lQ)NFe*er?2Eq[\> aۮI`(T|1s}H,'"cuDNܚNMNV mUѯG2Yl`6s^B驥X7q/T*Y}_,rQؑەY ,]&0рc{dD$b!;unIAbв;[ො Jj;6z"c:]49 5㡫exTt*lѳ={oacy4)l.M*v4$0ɦ\7ox\y,vȉn/a5@Ԍ %t0(}Mى|ޟ2~ $H!Aݫv=5zZDC]m*8B"Gw9$Cݡ0:;M%9o~I4!N{r7ݱxߡǀqCu nBl{`&c eT`UICѭUSr_Ϟ Tp(70V*Lg)rJ~+rJATC#U@2 eh֡IZcc%9!lLl7V%S5hqA.&L9ޭ>٣5(t: Aw0t=0 P)8e~H.9v6!_P_ "Fiʪ ᗸ2M4QGJT2Ơp@7 v y92dl>FAn=uڬ|wM5~HjɾCamr9lh9%i 9bdLr\HpeM;tXu DW Hw W}R|p|_i`ts`spu, 60qjFw*BK 3l:h/>.c<@dwEtdIп[H^U$;L4=0_0޻`Ekf_9a} _MwJJUy.P3V(6te^V$44nZԜ,#OilVgᦳ`o ,MhfxCǦn:(֭<9se\,XN@LТ|V|odw8 CσdO_aik 73NF5|D<0mt!1rp6j% .1%ʃIڼv\ PݺjO2o]NۅʱrOY՗t((?ݝ.q~S3vι8շxze_7=wۖ-,cFwݹ8%qx$ p. *P_*mEP/.}1CYy¬kY>g/ɧ3 ρ_;,_ ⷩe.(U-1)1E WS>?I0Z x|^O]#Ա #r <7coԱ̿9YGj'=r}&;c ̊kLV>qF1/[2/f~_F['va(^@l0Z _}?9Hϒ8gFs᪾-5J0XGf{inl5;'*cҎ׭b7@B0y6_ِ0l<5 (,?>wPY6P`L&+^< h\E0'57/ CMf#`B &Evtٕv cS`C$7A0%1 `XAZC%a%z-uBHPC*5{}ҙsݨ]5@tTW|oҢ0uU~F>mL/mh/wh80&؋>lh W[&5P.d2T;z[i$71>m*O;>䍽kJ:yu\\a=b|C~@u(d99o1x_x<3ήω FɨoK r`xO#ab(`(">{&Lm$m8g}5 FJG٫a1DWkA3N=691̵}Y5{Ltb}( ȝThGc8-y\ޟYX{"_ ɕp2|eTȴP0›PS*Ůh.uVڙf|`x-yHQ ^%qu9KdKNxƳR?H5p Y ,Eaw$u/#ˆMccEJ83AYسtN*lr b0q^6 i"ߐFh1K+}Tr[ۄ,?[ǝā޵m;GƔHks8fH" Tx~q f9+3Ϸ8a%s(,@žx@acD~0zlw}~s9:D؞I E Ӕ~m6"ǩӐ+uo5S[=kT\R6 md:MX=ӹpd&#nS س*lɅ{&nM<%ǜ8kTe25 财cσ*&QYUf0EPN-vYU5Wbi7trQ(/n5|2`WS=+Z+# CgR( t:9o=-b7Q@ $2qJr)o?6:+¢tyaXȓgi_PIT (YY^`< @b2̷Jckoz(3;JhOFAY)𐧕B ed4TZ9ۆY%Ա $If1>(4U/TMMa+ɢs/Wf/ 0)h5=U âo쓣{?:nis.!TG褤`DK-M7>bxԯ=&>"9~+a!iOrgB09DvigW)f^VO*O|C(spAT+kӣ|O, jI.Cŏ t.2DZwϤ.SFwsۮIG P̟.׫Xf XlUE[1,\&(MYL6y3/KUjXa-, PF[flOtĵQC6ݿ29o>4̢%H8Z_d}OX72l8:K+QG[" BQ)DfەZ#(Ģ)C!8j]B 1)rT(V> ' ]0 d9׈2,VqD0&M}}M)#MmPGI#ZgqB#Y [xz*֋~PNu`|F@5aSCzN ̚@8gvZ83TNdX7xMuإƜR(YIXwHߙ'邢OvvyyMi` o7שh:팣K:n-\@Džhگ|8 ĝn^-=G3R䓓Z ++\"UWXLlG0wՊƪ6bBg;QLNXW:W$BR p$m|TԵs\跆;v/~N8>Ϻp LͳBjEЗIuZ-e!,P!v{KrKw=0wnlKjQN; Ӟu3k aU=s0?LE$zΜ!-Y*zCzVa\)ޡل*+~R*OT"Ω(6A6L]URpqT/RA͚og l Sp$,PVVMٓ QxP*(% L}҆lL*וj]NHQߪȢ)!M & )'EA4|\]>7"nz,h|K½4tuE͗18.p A3xc EȎe \UK"Tr.QFڦ+`Qfҧ,PVr$悌# Nj *ϭPi˚ d3Zbwˣy҈v̫TٞݯH*U%ܸgT`32peR ʄ.7S^xaVf '9Pݧ)L=Nj*9dBﵟ-L$Kڈ %е* Pa1~DQON |,z'FmPfY]aSfnAbZXXA8I#er~+ߦ$A7K7|?5<-LCDTC30Omadʱc p3Zp|24,[ !l@D:|'oؚ˻>(bSJQc'&Ơ!,WS0Q9ԓGgR+=+ A'7L &nh 鍢:(=I?[mu;^ozSK !QXs" 8(k8w`eV{v8b 4thcWbCfO<DKTyqb,m.?-(p8=pl9>=;H,ߖ~<k Bu,ioMj`J 0AQݒCEX!.Ȋ 3ҡwU 67D)U hl|:>~&z'g d056Uv8NФ躑ӭpa` 9k򈋄 rv\Ӱ>̱[>Ͳf(-(AQ߅XQn{V_z5w ^Dn`(A'#aȤw-QC{_ZЖd?\2~|/8u!K[[E}KTdopPB/Z E7L0oJ#fJ~"4%E-L.h5p!F?e,F®êmH^A]|&9rc=DPE"]>t,PT5{aYvӸ3.٢s132_}(W=D9{ٌc׉9Ѩ-$)0) WGo ’b% ׋؉0 1}|[LguTKWksFBƓVTfqnG9Xt>_ HFu*j#kƅ翏aNx2R(*z lB3eߺp.2dlBaδx(GBO$#!7톟➝'\1uktt=dD D] =UD~[PId@}_SkTUv })C-;^D[v!Lޙ&>35 X;l+]Pa$I3u)2ѷl,;p)R֮/{ xuDnSEPrxEDQ jaYr%Zw gMT9]t"P}Z-33HVW`D.[_GV+N:z3  ^vqlʺ >X Þ G:^wV;a-!- 7U: b[s&KL٪ ɭ8U[>h ɺ ih瞐SH38l{`PLD @(#Jd퍋Cڑ^I)%g8İ!hc}beM;r|%wpuĒ,.z+nf+Z~;`Zw2J쾮$Ԑ]!\>#^Z>Fr{?-D!w b}ǔ5=hv< CyVx>Ⱦ ZCC/L5!奞S#dO\YW)lD5*`4A!z:zu;I:yNf0T@BHh9#.ڄ^\Wu?I?~p3λ9D 2'KAT;` lvr܉]ҼfI;l脺j٣G/;d|'VkŭtV$vlK׉%ob x@QߚS6 Ԟݐ vgHb3ȹ֊ %V(7[d6<#?cH8/ܒaCvPn|",.̯底cë(k-xY`&$!{xrgL xCcD(՝NvԴB8X̡v3l BT>=z!SoÄe0tFEi}yUVMAZ6܆|~B97]nyLuY޲}XAVtT3uc `nSӔzWSo[X}`XQ̄OY]rҰ:TVF:L kQz^9W#}v}'z)%+J+MuKTYrzQFDih,c @2??fk0l>͟3 (vz(Ar7y:=m"{+'g}>(J2 ۜ(5KZ誝^s.*X_>e5R.q#pQ!$ Lo]"rf>B Up`Mgl{B|x:1nL%WeαA$ \A0젺O,NIQ GB^V2} vLTqpGi'Z6< X~;+^/ʶsOQ %D|T^~̙g8?q\Tc#F?&V2 BX^pz43C qۿg k3^¼ s'()ɔʈx2%_ߚ*5YSk &mRAE0b%`R)p(,w(;/y__3m:}d(ǜG񇎱ܺq~eח(o{ݡܟlTnjcŞ=`@>l6s@.ׂPZah#ԈY0fnLUs[kuD:R {1>0Up`Z״xaX&T@8O:*<^@r|aP|Q!˹^\U vKQA5owݴ91aʪk^ 觖W˴Ƿ{w6SP(QUۿ1ӀvsD 2:pNyÑת9rpZ30g(ouAiB!d!ht>/{"bz{OlwkX=hZ{Wvw;lk ZثuB/f cDQŔȅ(7R e8 "&U]aAPPGC+IaY@:&RyMd}s?X95I;;+.ﬗ ^P.R,dHk;]y05_{d񡙩.o B8JeWG㘖,P웴TCQt0I7ܵb&AYi?jL?*1VwM 翗~1q^ַMm!x|}3pw<995gs?񩞷 gx~uv."$]cNp'j wMf\}غ9Z٤l7#Ë߃z~=VR벧)5떯(EG x7]s=q33|a˧_>xLқ<1,L!ZՉw΅+ykƱoj*4h_:'AμB0=+%tn^;.˕6Wչ˘*zDI-Π$zi܅ItPܭĒxr9rqƋ^Vnv^#s߮/QVIqVYu?[3b0vr@ŎWihy7k⮩a&ed+&#Cԫz0NaDP~~3F v99?WPݢRT'K*/ӱm˚XjЋLТZ/H6L;"]# >?H$`tZ9qEPkkA$مU\!e ܑTVhoh9Ofñ< *پH߈ľ'-CLFQ\xq"G8{+_d }uQPA#PdFʦ9}#}ʺAHхl>>4@6o&֤s"9apg&}Б12<]N4d4 JaV|[f4hIhbqO1gQ#*OQ$[n$ Wڼ¡;IKmKEX~w5 l`Xr~8Pdݤ8JcT8BƂyp٧T@Si~!a)Ac{-b'ǧo-̈́CMH7_iH 8(!O>5@F& :Sx [8ŶL* :4NW6).h"Ju!1^ `9a@.DبJm\\ i2q}2a,k\d6bYAX *](s(;Bk?BVKj⛸q۝',x1ewa KhQh W*<.K#]U J$ 1Tr8W)$_nmχOzC8^9G["+'6z>ֻq,|+F|قx!TP@;] ZQ~\oebrЖ㮂dH؛@ƃ-!MWrߒFQ đ2@l/}e{) I[Ix;\&c|8'f궧,]Q{Ш& A*vv"Eo}.#/Jcu8!#zix_ݲYۙ.ig/2'US tPaqۜ='8vƫ~byN3!u}?^q9<*\-~X16C#>:spppV FiK6@*xW[(T~oq  /xKBA0}jʴxj* &L-I*r!I<}$/$n?u]j٭(rj O4W?W^j;u{50pT3 ~ߞdhO]g~`#?Wv{>z X 9xUt%j)s‚iJ-F\P~ -Q8%aΆ3at2LH?웗wS/&K 0El>FiA A4xb p\_/6m+@D967V7<60'+ SGȧ Xʚ$K y9>zn VRQ#Ezz4ĒAi;TD2AXq TlL"`l22i.!?A,'04Y;z-aƖ+tHZ* zO"JJ [DaLX5Vk$"XB I$`avɿ &Q!|5NZ<&g@<&%> *Fx\~GΗ34wN?-EmK/ZS}%QxՐpGA.D8ARtmT Ջ$U4P i*K*CA,#SHxg>5襌/V%Wc;nTAc: m ?ʔ^a١kOK+itNXzƹиUbKA28z=†k5G1¯LFAgD)ap8hyr'%j̟:ZP:};CH9( m&&mv"clkTD/ٯuBo1qlhSztqdJ4Bav/%u@gdIc4P0Fx)~({z\?{ig.8ykSDY:CW*yUf3̊ 3b^~DA%{/3s Ba÷(%* >^#)ú-NWk(=Ƣ i; *T).{:zsU<ǖe: ;QNz; $F*!Ͷ.PCi!}a_YB68"Y+sxzmwL!׆m7Un!=ǒ86 rΖ+\Xhÿn3Y=ߓQXOy/3o$Dq TK_Ԩ\( `6ͨ;ӤƟn>DJwO$;]\e5_v¹LW& VgPp/^h c̏pU-K1 B6 80I$ٿV+&d3$/6s6L;ĽMXW]zL+9sB ɏb|χs v:=Rq}݇QUIQdQ=3lu2(-@=ljg0»k^_T/{dҨNx&!$QBOG5;0vm̐{+vsiK:^ұf%`PG|WCȳ|#۴7W!n 3 k0o" Ky6D}XO_ jk^ @J~$yG~,kQz/:5P ZзCvnw̲o9B]  pf`^}+i\r"UPAن9S^Pu-ӵ^#ǯ1v eZ2jUma 3D9$a( ?Շ5 "ۋ] Ni<^gl0x~ŵEǯ5=|c:i9VgN^a*}lqdi`~]똝mc'bj?<|E?Wg^-Wg_2z0H=&I-A:Z8AuDX. 6xC+*Oy$ C0;` DɖvwT9^$TZ3g.[h1k2s7]&Q(%Q* gR *\1[sOn{T P z0;S_w^ВcQZ䦗CNzڞE98UYl沦[XkIe mhKǶX?s8gs'7=8Unp: "L/;z^FzeK9?ADNIKuuA`MaÚs *(hQw@8 Ɲm%?:؇!kӌCfkT~s]ˌrӞ`ϲ!о2"tm66 `#R} ѶfW_O&NCΐ8_WO7X?#r7 7~EPHECU@~eױ'FLpWн~UDK\3x2B+Ę}N~lKU+\w/Bֺxf FՑ-Ď/S.FWSuw&q\WƊPgkMu/Zx%AFVn0lZt clUbW[[*Ax \ PbwYm8 ͬld5F{%Ķ'Yډu51t_ãq*^;zAhYmΕ\M,cN gw)鬸R3:- ;U*NnaB9{rIyzI;! ~(w{џ7)FHfFIwDNdg=0CW .XrNyx_|`~۸BdK8k%NT#|EZCurtT .tnmNvLnxKAMlg!}Jhu+hσ/?0+Z5Êb<#&s?M ob{>N{Cȧ[&TRV`4d5OJO>z|yãj;piÝvc2HHC.b- Cq ١TϭlR~ Ns]WR:v?5s;,xu2BN.{cx젝æ8N?>wiNET\ >Lc~^0.Zb5=`icRwɌbj>}{`sϰ5cS.dt*\Fg|hUAm&Xx85YR\QQQ J.G#o#o;(\T6 35&XH0U jD-][EF3u.2:UQHƴ) -T_|*J*O lKS snX**™j X!lP (q",`LW'^o>3 ?[sn~q6MH/J]&UJ 𸐲+!qp*X9Xyy BN=kWǣ}Ļ)< R0ǧ=crQ ?CB`f$OPt[VR.}PR\FIB,H_vJiåJsMjC&kƳ*Y&Tz[xLJ_n咡9-2\YUlTǢ:YLD BCD:lmt|7l HYTJ@;D٭I']tmHl?Kb PAs_ɘfo}ziN;xb>'n(lӇKl}_GI0bz1{<>9C5mn-RP}(ڙ PI SFZnb<6F:bQkylyz~t~+Ʊ}QKU_;}x}sڊ3O&n/$4ɔ>=^11v[ 75V$c*eO2(*a5{g [QbɉS3ëѫuuo.T귥|lCV%9=Gq|L{o]eSjZwQoDSqn06Ev17=mc}o]bxr{5?(xqv5c˷O]MASb__H]x_mdv IW>;kmwTt{O;ZF!MɹoEIi _vcs'8Sʠ0O4u;}s8+ :Z~ ڷ v7& 0*RZ51pwP'71 vL:7c$Qe4z \&>c^}#= Vdt͑ xr31./'XeGQ=n˜L!ͻ}bct/]b>)>'jDPzIbeMupE~5A֩'\rm,\)w^y>;>%Ϳ(g Re,Fz}/Lq\HHWiF0k* a./@ -Ŷи*g, ȴ8'r@]P"5*('yt 2ގpxcqXI+˴ZK^1& "|ʌs}(k{ \ܼC⴮k=TH-[L~R\>Kck2 ,G1;Wn R%dlDޱDU;{l q4oPC0o21 [)0*&$kx\TlOb#]w32((2TՃ _2XXC†,yku[1 +n+I<ۢ/gCo[ɘ=ɼ!T&q^–L_KMI?!x~HTrc0~kbh,5D3zMɏKFD6%Ҩ=]h_tKĨy* Rfznxs9^ 9#Ysp|,~_NB>6 lތ[$:Ȝ׺.1;ze5Oyvt1/Oxňvn9H;>`/m׍c02JFrzC%~^qX ҎZߎ0e[X m-x(sport/f8D&"P4P*F׍KgRWVݪLD@.F`T/'҅R"U&qF XQmTc ky%uRkʾj"|ec\(ZWSq:lTuQU8@Bzꪕ۬qx\ ^<9K^Qܕ~V兌 P374 = 8_ۛSD%[f*Y]UYx;Ч-zۘÎx&wu~kxF  4s =6V"8ުUS'ZnԭIh{q;7iS-t`I]ixq0ԭqwɉINdv~mnLohNӾ߶ϣ ӎ?R^my.lMe<&k3 D_bKYߕAL6 OGtm,:Й2+W;Vk4s;VNXoYe-8g'4*{sHOPG}p||\s~fQRX3|p]IBIux??v!-|I,G!Nj ^uH>zx?iZ޻_ ͯt#Id3D8 V:PmW)z?e>蝻e'zeoVS=@\zVYZVƝΉL ) QXGz4KP&ڮ@\]bh[=e %]t>C!r]%'$g :cXYbҕRx`U0" dx6>r;L11 |<,yq:Q͗װWS¾nsJb j^D" /:}EoAz"ᒓH0hêpJkj* _5 D4I 9:&ۗ8#«F-p𝰕6c,ٗW<~Fɋo8i,;6lQLO~eIekltD[ ʪ89W0-各R/_{-ex֒ꅾO"#~"Sǹ=HûOWT(h8|-?6I\\NCh"i)[n `ng箶@" yA}:P(լ0u?v$wX@0ABO.{ Sxh[chi݀lDV*, ZOVsTI⢠6f |ݞ߇<uA.Mѽ;JV[؏6h-ѐlE͢K`R6!]3NQ~\̆j>xOĴb;T?l=@bIrO?o,XIb47ӿwQ5AoNgR)=]K1dF0#`m5A=e^?@2l8/u+@;gs־F?مl(DrB@aؕLbU(PrPyB=od%:l ĤHM@D$^[d5TXO0))&C* LeI8 `LWX009TB $$)9Iy$ZѭPIDiMm2As֫MZ46dn8x f[oJheQ@⑦U'69KQ ̝-G}r,L4/t1Ȣ+Iw Z(\\ scR#ۿlG5 N } dy̰cw4fb - MDC2Fu ƒA9B9qHvot8?HD&dS_a_^>>ۘOj<Ȋy~W>+6~'_ ƫp'FGh@Qk#1qv2l4~뇏Ah opseզH\qLUtK0#-b[Njn6W2]ZG:(sT}s\v>ML>P.VK%*N5ue'B]F=^1FgFG Uz˳ch<>m1:Jʪ`*sb aO'~}aOeqV}>meM zj<0T4~&!.3v}LU(_Jî8͟׏>4Ew<ޕGO[ƭޫy(Cf]t!bʾYc *ڊ6m>E.KЏ7{(ڛݛGps?tŞC9WWk^Gv ~!CS6nkf;$ʛqR8RY]3A"~=@^I(PʂF,{j0u x`#|͐yI3stnI}^.;ș|!1!z=#ZoK;o|!% > oP!pqpPٵ~F/b"y#4mV[zUh@{i_r/y'+'&w M]H* 6Os)-¥uV"B.uns>$WnKѮYutH )mn\`n_ d+~o?Ҕ8XH+] KF͑aB 52.ѫR5wӄ~Ou-˿0p1אeDD =:WD m,t&zM*&o?/ .GTx{'@4}6W wJ܎|`'fN,J0sZo8z\}D]z98Wߝ^o/0\aw.^d'z ~B;@we?qX(iSH~`9xP||6>!joX넬jI$Nn]v}~ƀȜGMݚ>n^co.~XcPT)d;cM.Ñ7ȡ>!'br>?He+l{ * E* $ %0nZ2Н/Aq.srazXd8u^ty_\ `A !!_'!-"7yQH{e";?m$%/EbAI.|$H,H+ pHju(z"Fgɏ<5aR/\9S*˱@:\j ^ӃX8p?)zs~@'$v;-NYܡPvL@P^Y4AT;&P1$!F\CrlxZl#lHHRJauΏƵ{t;Qm0|l_RPVa DD7}AJ+Of<׍hp UE q:vj$0->9ɇPhaFrg9AvШomz oyl[4(Ϟ񄲥CɎ1Ԁ8G~GUIGOXj3ԷAq(1VFCO'L v9 ݑ՞J@/bHL bD"wC=]z7[xvPu E![RL`i;zߴqަ_9'g'"u!Ry5s'-.8G;q#sSMR,R>qg;0~gO;^liU~Oތ/lGׇWY>P:+:`5}Zq9mSO7%7hU~_X%;z9ʪN ˞E֝9Q\jssjU]T)*&f@\\n1`KkZB.5~@?$M }nlps2>W}٨^9zHi\oo?N2/~m42PN<-:aBG@Oۑv*Wjܵ`hbR ?>ce#49&65AtXM15:EF3?B4e9":x`lfB &cܞ1PF\?{c߆yTrԇzZJa K)4L%-C\h7p!_F4E4јIz8=K0O@r"~q& NkF^nCަjZ\TꭚCmJ_.b sX Mjٶ~)0 (?/u{7Ո/|*SO]a%V+} ]P1qZ衐`3Oa۝j>>~=p 'R |և#߰"w!w^_~R컘3KYF ӪGzϓSIδ2C3$'[2#)W?}0p*2 D&^2mjy[ #ŧ6H@mKEه,2*,GX  #[)Ȼ-]ǘlȢEN(+؈6rJZVzmۍt56к$:u;:i"V}`Imf( CE$:5Guxr HҼ&-m/TM1Ss!@LD RhJ|_S8޺T vz9f3nϠrNJQeg00JX=EBա70V26ozT'(b8VLg,4FJh((Djj 󱴌UNLOѣ!Lc&Y&{n[Jh;P_ai4B"Ih%-3)nD f0}N=>7Rj۫/k6֏L0r'cJm|,b6$g{5Ç_e0cqt*<7?խa8a;lamɺxe\7a]9QU48P7gqw(uG s\H?>!RM| 4 _]"}>"d2J3H\ќ"o4{aOx]pQ`et~8cT'eiM2Lv$xgivq`1)#۴w";S5w1]+MfLއj ? 3+8z&BX۳z`2ݚ*3!cL4OQ6L 6yk.4P5;⚫ƇAɽ˵]iww6Iː[O߽0]m_s1'"QI*S]G8KPb nӊDb;Oh%UD%~pUL2n`o8i.MC [0$ F%'ĸRrfbGϔbfK595T}<%PJhC2JkPŦ>bkN+SΤ]$|6.nowR~s 'Ls=.ת}0wٻb,=|ˤ.tr4>? %q}荬Y9bI@#|fDVS> Pr 12G=y'b:vbڹn+yr&TR0?w2ۿjn Ӵ8wC@x9<.C[ HG~}q;m>zahf@|'^P2,GW\ b)@`XqXWm*R)Pe\Vk^-kI%ЭkgnyU}x6vwq墛c=p)>"&7);B, MqԎ{a( p_Yo.Όg] ̝lc64Vh>Y >4CRݷLaoXm1,{j"gaW-gfyԖƬ&V?܃.P hPh tGY<\KfI0p#! l6YiRp]xOo]*2AD0Ԝ^t_2Wc*3\cy)!u$3Xbv|N7ëw0`(bMXMWnK_,y 4Ϸzo$'J)5Je6\Ń 5oMUwދ r彯&U:.@C"PČ()謪v}V P$@EOFEҐ }>eG9g\y"9[2ǏO@Wj|1-0t0Q ! 3C3嵏[T& \{zdqR| =0EH@ 0xtmNW.ήL^P`4 $EvC;UP'}J#3?QwC}HljX c %'ea;D R#M_j,osÇy>:ćl͜~vPʻ7ʍY->#J%ՇT"1Fېp,Ns>~P-DZrTqOVcl:h]L.צb_#Ij'{wzvMn0ߏd1DNf(Rzg>B[;0QΑ- YU_!e.֗`MʍEm7 Č}8՗PDC#%AI6_TR@'Q4w3ǏW9'ai%`\'Ei㩟*SZ'+=qK×GԁĄ2AXuɎ*FLit^D`jO %3^DW~ώ \7t\[5 5۱(g RA坻PޜaB}q\~ ᕵzo<t'}+v(q??vIMYx:a[՗*0QTV;z/=K$Gs|NզPQV^}M }II:<6kYn"(1TW ox s_g{ncG.٘k͆xxapdrޓ茎g $wO ;˚c't"y rmåŘO\\mwd* zn^BǞșsQhQ$餵Xo>c0kviM-U!-KokqJ{LÔWf5z%â "t*(>#Y"J.!3re۶ Mm$K,`9,攈be2%2/:+V5 !P%ȋ=RJIMd]#1S98i#zv,N9iHx}@4!?cRtP8Mj!2]E(lSOa#cfmYJx0 :@_h$ayCӦ=Ff"AI푆6#r ͜<f]8jmTa Ŵ9=Oc%oa"yg8[?pҢ{IojJ9q 7  2撢ӿI/Qc`|z,egez5J(@Du 1R DbtR9D5v7z|Y"M_󚳗sy]SqrO[d﷌#-Er<ܙ.qǕ mΣ̎>9ǫF>n9cѣQ|-Mץ1sʷ'G &`OW1ɛv(eҚUj]n`' }N;g/>9r9:~qH&a9UAsBDvwl0:du(N\\\)[ZoM+q}Gnl&16:BOgF9H嗳(F9{![rL虒(2'TFMbe3~+#鱒e.-@eL/}zó ݓ&'z;drctT'-O x"j`Ys M5bd?oR/+Fcub2&e:\gMX]wgF:C_Ugc<$WE?ENLq(^ۯKJ-dWwׅCYz(1o@֠ [{54WDV/f Sf<NEzߣ0O<@j\=*#c 5ؚ {k-W*؂Le7@' 9{an֥P!>J͎C+=WsgDP䏨zN2?\Ŭ.W'Q_Q?+k8"E qoaq0fg!P'h ƌﯚ} TZ0٢$o *$R)`Qm o1 ݠ"Z`:E]KDjf?AA_O^_[S*;: H૲#¢֓p{FKb^֮EEA/Qm3ӆܴDVF v,Y^PKQXގ f!Y #CgRI硅D d b}; #خbf!s䑾+߃W<}e<U]4rP6 @^Px_:L1|ޙr:ն<*:U/]${ (HؕTYEyjM׿_"ݣ}cb#yRRv۔}Q颇Np\FxWo_.@ PIph^Jh)pRd=Es0]ƨr\_`Qq7Sj2M=ͤ({ֹ8cU8cx<`6@0CkgR$sdN\Kl_Ƈ>|${ (^k#WkZoϽS_唇Ehk ['4bKby(+sNlKm#!+:99FrsH:--.ahkz|Y;0t9-9A*TO. *˶ e{J2vE\9_B8Vs8LǓsIX'KܔIt*8u4kom4gDG}/-. PD vC ?^,U|``Y^ѐb۵/nY/".iB&vgC}EEg?bͽG5ArـRO_ߡha&T!!vA{zITN6yڱ-- աlSg.- wpBL4 qmF#$倱" : *q~lT)-n,݅bT٭Z1OAUAj*i On1ۺ#$wsËE;4h s_ g|!^9#[po5hL*gT_1k|KqFS8@tljGΙk;a4]:P!Uċ 9Vt ċ t\Fv9Gr˸8bTSu@,"²iرϟ?j[ȝx=yT>{ 5} 1dD"!:#:.Ceapp?/y;+A1[ml~tsDy|91ۯvr>fPmfV/FR^ʭ#ifw5w`yxQIM[;4/wiZcῦ3 <;xunbmnD:>(AXVކJC߻ucuvZ`spdq޺dXz:ѱD-ٶ Ghg+?F~󍊛b,܃ܶϳ9{x/r͚eN6UT;哢2+ch|8l],(=W+}_j"NB(PcE6Wd>:8#@О4W tùYE,K:V"[\Ja菍CTхTY8n{?(~m X y+ͺ,1~{rBvۃz60<եza9l3ԝ[Q/c "!yN8zMC]\Zo} ˘i5AUIPP,  Zl=E..w19? %c5KFk - \ 0|^=~< PexT5qV8GхUYww<|w"Cc`S Eiv]h dC먌9ݡ5bXֲwrۢϐX 9}y=~6]>ۉcU{9 _|V*J66/k5Bl!/ڕ|p)a_PM8=&M68 <~M%t|yW"#Cv芟-zҽ=;o$UCvS@@jaUGh;h]= sW?Pw~J `'B}IPqDRrj* {;GCo 'Ɠ{KFZkI5'CstS*Gs@⚑?# t b@@ד>7i&Чdj U+*T"c@̣̃3qXwъ0^1).v Y ̯F488??+ċ- Qph:]BҠC5Ґ nwzc>*-5u̅磮}s~ boQ=w~J^ *& \K ]9zGI<;{~0UUpU_|`g?/O&|ySwX0uNC QV yxt@+jc2*_7`:Ę霙Z _I}"$.ox`%m kbJW6O/퇸QS E08^`(SiZ#Gq[pO|ECBTP(^fGN#~;.;+}aW=:@l.O<~zwV 36m}aiċCh=r,Zu7Rsqwʫfuf}{bEoV4>XuZZʹTޡUV6h@p['"22Tk '.EϨ=;I(\ExRoe^~>r9a{-Z Μ2+q KEsԊ55AH߾a`/'Ι6s`2lJ1l [9j 3c5v^F/\=ڞӼPAO"w˴p{}o|;n*3'P`.F "6jS@yz'b +%}o(ҁ(`Ca1`tGW`6JӦƬW۝B=EX8Fo5D9`dU-XU(^w9G&exXC yEEqu|ql1/Xu_G7-bʧ+(|3n{~Yo# "AJôDy.oh`aW*E{DEs Xg-OI5/45^<7 $"`%FFEn] g˿1d\ 4Ro}L!wƻ0`v*$W$Đ*'+1|izamlPBeLܷ)cU .[@ qO`Qj~ё٘+H:+ Cy5v"-tj>K'a>`Yۈ&5Q^SVfm;!CpqG Gfk[=Xdn6K F^e)7ͿIweyYG~wX~2i.}y/ I"'TL$,Nb=U&h:˗ͤ曤GD8[PQoFJdi9vlt&jRl΍^dsDzhьY)*VS!nč*79:Y߼T;3nzz9'+[t=aDA7_nHF+ՂZC(0autZU-*w! Ci3)QU1Зu gSOFi LV5N"1uӝ`Y댔E@9܎ӣ/%fW}xvˤ}Զ 7q2L{Gu#&,kQVϝ]]b;*Xڢ{ u9#01@"uHn74rwİfz1L)y4j$ұ&?#)8bT0E=UFU=0O!ֿyn@ހS ITBi >ϧu詽-4~?:IYzf_^;!/@kAhb:}Dbd{(V&Lx]lX=g(y)X> JǺ|*0y F,~hv#ɺjv։XE#@@=*ꗍFUue*,@0q 'C~Opvlz ͨD83E Y,uN{άd57 (/SO\GH]պAѾnOV%MCN8սك)DV 1 (=`YcU<@R3 %\Y]`b&[1]*9C} ֶz_Sj @R-% "LG<,b7,*> UXs|ѷBDp!5`2am!÷#6?Ir2DkP2G8S 4+nVa)}1ׄ5hQ*uM^rʧ2=v1z󅨩WCFsSfʀxC QMqr6!*@J* c_V /!QU D;GȤOКN*XZ.2þ"0HVjr p&6d.UQ8 ( )FUS*EȄ0i yna .a>B;=0Fe^qs &qxyxCKpxh͋)V;U{5CK(h@K o2:"n! oqjk#N@G(Eۭڒb5b=!ZOx炃WJvWW)*^Y{r3yqh">>=BÞ$*FCGJDb$7zpr=|BD#׏~)$u͚@ h'/ZQ:I٣MnqL@ֵ `;WX5]@?Dd_ù=9auk֎:K5rn)1EOD:*O]|GZO2%>\9U #N+@~RdlETW wgjt.} 7WǏw)MȜVz.zbFAЀ(t fBF>V '( ´<27%cʭ KKe~۫BxH/ݫ2zt %|5DdG1e )EpjkӘөĘ^ˑwBZXoW,̀g¶x6Qu#mIc8g9j*@;MVx3'9QC=p}gOdjt|ܐ6IYB2y g-2q܂D LЂ7hjl`S-\e`WjW l#J_c{W(-{5TQ}s0Dhz6,#L'P f<0KDY+A~sk\.FEGs{T<ӿEܔVb_l2E K z7NH "*!K^'}%e֊)-Z6Ta#IgKhLȗM9r8wB 3?n݉LG߆9Wn%rkCA!Zj.2բ!EOj2%ӆ$6i딵BB (L:0 vR/F#BƏ@*8ylϬ`|MDbK$V [aղkr]T˺"2dT{ -PP&Cי yrgc@c۟N(WaNql!-ܖJV~;(sl7VHBk|Mp?(gmPDuL0 u:iG >nAg VN2,BavV/`Ԋ"L PE7N:rvo3Q #Q_s ̸ͧw& ʛ<(b3~8=_,)cqR&E. udv-TV ./g*2'ͻXр$,s #K4IkDK*X cW\@C;_+lm!bͭU@zb"uB0&? 3˿xNePUgf,Қe|*hA*1DY05OxԂpj'^r(аە K+ yz nE(>@f@a"~1Ea*%gBJtL;d?Z10:Hffg /4Q=+&"CSu4ƺ T^ie7V ҈ !lO!h5ja.o{ih|Zj qulE`.Y7dBR!oW_,!1plryMƠ0Ga6)x `a7 0F/#r\x`upwZQp A@5J QtE8|Ap4ET#qsAȧU+d\&&0|=H- 5Vq ?hAW!% !ygĨj [F %PrhtȀ]axb·I4.` M#>$ப">\u9N!XCU[Rn1Y|Y!勉 9op<`Ae"a&Xq= []0i=,Ӣt7y'}}tPri8u>V 89  9M€H(M=cA?јujRqT͠<6_jAt'T^W.8Z+g ʼnII(<ˍbw N5݌GKeTa^kѰx!AEX}_|EOp= g5#Z.}T[ߜHΪ̝&d^DE1V%5|ʑPËZ`aps{IDd;H\GT3Փ9؁h}^_"lKS1P=3(O31 ۹ JQO;~Ұ NgQ>җ?ƴ8;;hDHJfN ]u` #b 4Њv{+]Qe!mq(hYPeWPp8]KhKuCyJGpv`9M _`Ȝ(Pz7;Fkuuf5:\@(Cu]*r)bx{DgFn(/yB=>s|UUIBT5❩ݦuDU ʡ(U q1'i]&2mJ IU^0u͗"v'B 3QS5AP@N`<M:z:nAˈM)T̽S]&Tnp bes2 (B,`PnT"gPAh%Db"E/GVv'vIYE'vCkn7W6Gcv(퓭>$HV^\nSR;WSm e\ |qC`˙^ˊJMo7:t?JP1Uaj^kR9t}xyޡ`lgcmME#E@hvG\>M5J[q!rLs<[ՃHNJb弊La۷ o}%h NX._ ƌ rW͝NzsZ׉W/ty>xqnR |qƐU\BNj Ok[j+Y)TJO9xVOOƧony;kALY7.a ԉ$̡€<1<<CSl!$2VhIM Oz,DOВbph4BBmqVF"XFe"!Cg@{9ǁ U{&a卹WHrc Ͱ1r>:HDSP#ĬFBnZo /qZmcؤ{) 3tBA LJbUR@>1H޽kM¶`jZ⚕dbfekfMd<r< s4=qr #Ȏدe g4!NƜ|LE&6TdjMb="PbA m 87e-00ˆ &w G7RF߯< >1QDAHr }:hW'xfϔ!v#`?vt@q ~鷆Acof̉IDI @r"\@ ҃Nv5"uHqbI\phib c#2W9c!,͢{3:29N{;?nwj}lB6c&{52: ӏء#boy.9~Ԅ\^C>]Ia0‹tعT~FMY"OZQǿ&4sAq?OAFOE!&zD;s8D[L(vyj,S<$#zݡњ$ZIu % }ܧa@XDxT tbwZ~tK+1Q`VQ;t)@ ;ƾn كǎ636|9&N7ҍaUM#cY!$RdDE<ͺڢ ap i=B yY*ykoNI;0E@4DRy5ywݏax;ý5~s#y2Z%[ jmu8Ù=pÇ$shY^}R׮%Jbj${Bhc3B R/ +%SGd烳t,lhSbb!;È&>i~I?hyݑ#0v5u>Lg%Ns23p (vg6t $@ÁCҁ$ӿT>^$u9 "bđ6Va̪\zNЦ34w%jGd&! A/y!ycS̸_c&FBmB ^"er]2CwJݸX~j;1̄ߎr `J/[lUA6ӂQ"s;CP)õ h_VALާ ׇs*Bݫ{=Ra"?S#P;τm9 "tNY₈#cxlrN# ZB,Ah2oʂu:T1 <]P#bhG#| Pa!#ɞAʤ^sbz&69*}9gVۯV6FݸkEϑ͚p{{5لIx$;;:Y>ъ^lz@f(kmv-w{ ;;ȱʌ@GDD@LB%quK4Rڡ <@} EB=j@8e|ήX&:i^~ʢgPچH"0mˑ1;i0e2c|<9̞M}L\oȾ.ф=ʕvx@Jc}Y@6IDWԻ@˰A9KqlΘ1~YM _jݗd:Εe'XO#.ŀ,zt0nk$ņP9Y5V>ѓ%MR yL2]g]:sLo%z=^&S`G0{yX [ACC!#PNa`AQ^o~t#V*ssXYhW˥ߖ쾃҆fR11("B}]36<*bw~?`#G al$ƽ!7fz\XZp4Ё z='_;Gժ R!)aL*h]&(ǀִ)(D@clc~O!C>qT{fFX(aSߵy/1yU D0~i]!ufsѥg|[l~HwH5?K28e_~9Bi6bKJkLBx<'iJ3*vFL! ^;? gs~$ݑ#& NpÜ і1$2#lQnrk̅pňLތo#'1UPKbЅ B&=s'ۛM/C$گ-PCb(!&>I`JB\O}ZO;t oϡ/YDKz;*+P^`ŨMjM63P iLY CIDs0΃{Ձ&G:9\bViG*C<|ylTn{!uLrW]ifFA\95MMf47d hM 𚩍"+@S{*!HrԊ VQlW Dqs%_ր!!.f~z>op / #G"^g>N?7 !,NG,q?^8B vow!╊f_:Nt/,}\{ 0G2GOhq]3jI_A(ʟ _yIR2Q ;T;' _"mߠg_2xq_HhQ^0ݼCȊ}or(OH3"WqyGx"r IJ#~1]ZDܗ5s ͳ`Q; Ȑ>pUxV= I&$(pj q=WǗyӱAQ@0cX vH 5T+xna%oE,tUE[%)!龹P2LQXψ\ꋐ../7 |9 )]V`@F&H0H HF:5:W0Y#umҁG4"ltMC&G,%I?{1QN;j d@%{7'u[ln|S"jG8*fZz#P>W04uy.; Jw:ƒE]>s:8yOU<;^CôhOP:5zzwQyz- '"I0ox6\o{q.\ LI I})UR1[8xBfjXhBqҐ)j|y=_DPI5+0t$:\|224>i>}u-w  u0]!Y2,iƆѨ52.eQ3[J˰b8bDz"y(8)1k8䡁"iD =szR@=]}V>YA*V $ f1;1x=J_މKmK[83 *5 ^S0(H"?(7OA917z)釪dKLэʱ8n|SDEU/<ZNclk[ce2eD]٥ V)X\^r˜[SĎ8_3"6|†f  !vcN4Aotlঙ0>0gw6"ؓ,Q'g:`A}L. gWMhbڬ%e@)X R[&2l; 㧉qC9*]d(|b޴2e0œV{'&8DUC^=&J4-_4tsx; /ܸt5(=tH$ʔx{xzBi!2Ou:Ӆ_˅(M:s| h<҅u.=G~NbKjPtB NJD)&S ×T*.K512!j6&4fN3S|tcAXQ4ez;]~;Vn;lŲEݑtƁ:$(nn\8,lnv99u7֦վK!NdH-ck{QyU-2=ˎBsfe<#wm'<2m@JE9yjb?e֍i1|Z}^<T! -]҂(Î H5Ϩ̄P֤ ޏ9,?A =mU0kҢ>k&X^ۢD 8֕1ZbI5MWw:S#m 0]D6D?7icK?Ʉ?|>orې 9#Hp@HFup ~A 4nmfKN3 0pXRUB9 a bk'aV0Ҍe?#UDSOsSie.Kv}; 12и Um;uazڂ`pVZKעs~_y8AT`lOd̅hJ2 +$iaDi>XuX>q>OŐ;gzN^n%&1ė~3~}9 i( pi@@!Ԃ+Ը1`/ %#p!"{>>|ϑ.),$V\}?%l"6K*/E~u)~vъuaΰ,=}???3/t]#j2j&CBpIUREEVm.L5̼J' s_eUz\B*_bE`I.22V8*ێQ"[q%Bf 90<ğ }JTr}rH>5D?ih#BI6OGxqN)%w>lf.0K -@ w/!Czv#G^)$v='M K>./(}YIInv}9ٶ {ў *ht: v=Հ O؋9҉aƠgw@<(88tGyܚ#8 YWIUSXu%j7J14sm8,@@gn^|gs$l}6+3 ?É]F o /ݮޕ\ mF^yb, `u 0uHܕWWn}󔴄m `ЪNvռGfE>al0`_udpTaHXpŴ'09+Q/{MnN8و +Ԫ"3;B{!Kk5vUH!4lլZ5В٭/7Bt߿[;XP(,@]! PUָ %pp7iv+ޣk{*v?跫激%[qA`g]_Ù۩d ҋ؊[jC=0OHdpE5*}w(X}g3FZ( ~;z3qlAh=aː!vzF`1(iN);N0sn B(P#F@^ \ʥw 42Sk@D)aЮPBu~gC7}lyƋ"au,##&ڣ~>"]ɘ1J0MQ2㺢0a){{a~lwu;F~qvjuf9,FK xU77Wk IqWM?I{.3<3 ||݋`,kǜs H y; J#Oף7O)`j>z * .zMmg&Y'߷a#`7AO2xP2SPCޑøG)8vٶˌS`uU^Nf^l<`nw6J (2RBl>qY1;3wRk0`\y$#ѣ!?ow עb|=[C쌌MH$U |V= #屬[þV2[cs @*"RVhg+wR[J)4O|w'!$Ό~C\o#:aa1n wpr7t%&2/Y]Ѵ XyyyX6O\%[{JyN|%vBZB<93dĄ ydVGEX>ӭ*&ce@Ar wE|&dg ވ!%Gnhq«QI 1 OǕyH,J`%e C "mDZuA } G:; ,;tfitPjI8$Y[x<+(|" % <9dx)q׿3̣HDVAF2R@';8<u1/Ah2uvېp`C&h7׫;nϻPrY%ؒ"]0׏ĕ@$7#Baamhɶ$~}C&*Bb&Hr*# X4EI?k-IPls9zw-p&mj_dOyŀxNn]nf$jO&#ƥ8+~L.&nh_gڳx>?d8 cʞDZ+(ϣ:"QgL =^bsZӪԬ:)u~AԫΊܘa=mg| wo'|*c F ,YB >+\QM A_W!۪盡]QBHŰsN{7"3"% B`1BbfB5x{b5TkoԽE 89rF@g !R;kO>EC~ \>yпNM(!.v 0M~D-7T"Bɏhأ(ނ@dzQåӪAU`]lFzDAA)R`uA f3=yO!F'QI1Ӓ0Y;+hȿC׾|0h Ϧ1g׎1 uax)KGe ~& \G.i•䯪޳9ǣ,^2Ã6/ͭ4!CH>1@܋TZEeJ,M7 ԋ͜&4ʘJM'7mgG<0]pUB* 6d$YuÿcIn\,3wPB!C%q.<=㚦%N+^*u^&r#˒:<(F{=>95Jk /fBeT|o&T|[Q,J ]ȗS f`D/4G9Y|v՞i|rV<cڗkEW<.vpI|W" ?c{vL>!I= ~۴ xx~o6Λkt)d閎l0D ˦gh`XX|qi̵SsTffT^' 殥M'&j9nXwMS1/zm1. lZEDS=&Wj*Rh$+OU%GjODb _U^!%`=tKa8e ׁgM̳j΃ǻ{,Mv?.8w}m!@Y1o33>Gקokl'=Kf"V~rEotq{{wx`ݖycN+E2Q/ϻގbm\g 7V^~|liYΧ- 1=x 5\wb[+]uƔBjf`&n}ospe*qT=_JČB㊳@-z#(H[0 "p~Gvמ@#&KLLu8bn K38ɩ5ld"ݱ!]!3@)0Ϸn!;kHCrM J>xqdNtCϵiη7~:r)Bi ! |<2f!WM}hw2ki;=Vy gž G|uݰ\UV n׃'ߢrJO*ë!ZHf63S4W Y<^`kG~yj(?CҘ 6%oS*S-CՊʋ\+i}Ě@]{T40IF_lz4ưs$Yz  С;%UqmrT$yK%;AcbU?m+0ǻ&+"#즈|XPw9<Y(^zvGL&!o,>\voA_v" vOMZ%A+Rou[Ʂ  ٌpP ^=X(5;NJh0rc]B @J 4>V <Zq]j]f]e:SI:0&. C89xdLౢœp H6Pe 1T`B^+М9=w9z(# ٓ$[ʰՋzA;\ *ӍszwF|ޙ(Q_FJi*V:BBZ&q>qs)= rlQ" ĄoP`{* yptR#qGc0ۣBޯa"5;ܘJWF6MojH׆Ec ^x/" H3"Q52 (#pp?qYN`Dk;g)PTiW_gu(ZfCk +k5R#h>Bj!n.ӊWskk(&C@V#&v;.'DY½Gޫ* xŮxQ\< ɀY2+q#BOĨcID!ti{;ذvQ%9AͶL M} &|v0;X ,7m@ 01|bޫ:DDGٖ؁ Mvq\0Z,"kTD 4ZK5Uaf1O>wh+_Fņ~/*0WNLX?\O{NOj݆p8}3JpCSL1wsri|ȨfcnQ\eS mCqӗnQװ*u2x#l4. n#ߏÆR?h#^}G=}l T1 L#q옞`ZRՖ.(Ca4nvs|<;` #tSBՑ`PB;I2EQ1XWf9a4&DVsDj:cU"^$᳽·c3/!F_'d9X~i@ edYNP">m=\JӨ^ ݤKj(iV؟3-0/!Id( L$?vh|nusIPp#/ B>${|^viM@ >݈C7Hl2à4|Py8/ 6|>Gu+~8^ :? ӈ۴!΢ʠu~8,G'Ox)7s:9?ȝ+C> *#o+G=;G\}XJAaT/74B O_d2y,Ai*!J4&'ر-i@BV Rc?Ss?s(v/;>+T woTda9UhAJ/<XJd٬.;qEkH릐H ٠P |kⴏd5EX*_aAM /J, 9%Gfx4lIi"샃 ] #^hBh,Җ]0C 69s\Ae@͞B.Ot3Y4AםbWc$ U2[km#e|e+΅A>3=M+Cp5F∁ADM P;fR|J%>PS9p{ٙ~uC8dGԬW ߃uu@*4f)uy|,' WݟO|.6_;&\6;ϭjS b~IT[_0-ǎp$XY_1QN:_#?ADOT~~H#7_vv&P`)HЄy!ޒ?6j}KU^82!|˜Un"Kb&Pˍ(X? ʋ~ !&`#>y9)7^ v> ЫPFP_^e$u^D&Tp7&zwvv6jCb/!|Y@S3ۛP橮r4('͊qOS>b͓P3Ϳ0h? 3@_/?ND߾^}uqI\GyD;J_.Oj) RvcxaU1zm_πs1?RTuskxE56{GldwpD*Q)de;RCj7!HjêLLfz򯳳MT*1x;ǹF' ;8.:I$<{lk4rAJʬ-eZc-Z/U9B _^\v1BA axhf*Mc"=d@o/ jyu/:swJH'KeAE"1,4LA c`7{_Vo_ok9 D x0\@.cd9N~lw%Pt~D "1T !!V5\}zCBr@2a_}xʦy14;MÙl;?Ow~%w8BkXE.%V %Mi5s+9k|G[?,TT-q9|>qwU+}ZCi) {ٵD>?6.W?D=~79|Y$ )T#ۂ֝ P5g\lT T24 pgGҝx%?Aݐ$a7KXe?FbV[J"7[9+4w?>t_h@rp Ll]zBí'Nd?2{yV3 Wo^p 8`gԃJBz\MQM5Q1!AIi&ا yB2*l<XXq ܳ5 6–2*La8Nj2n ]C4RN^_C•3<\x/|׬tp~kSÒL#Q|9q &GhPn9`?D}}bgˑJ^!` 4;=31a`"n}~7RWe6C,_W6akfbSK<][X*& 0@X4FL=a㟻GXcT̿50SS_o?l-pѻp3ZD_p!-xq]2':E#(:0QX rImąB=CgWIgĴBa.X᭿]ݎy1Ca D"?\c "88z`/#Ёt?>ﰣ]$/O+}kA//Q5Te[5PHA!Hz5_N?߯}<@ 1΄=3x.2ݟ#ܱޟϖbc;95Wxm={_'V)$~3q]"Jy ?BRp' h^JC&|h0#?RQ~|=3TP PT9*r`+ :\3A0ob@(h/E%h*yȯAŶa3wOtnlM) T}OnšWJ?lE ihqFIc~ìkΏM n(ܡoq7jg 6Ou<ǸED]=(:Y}YW K5DFDT|:fi:vStZN\\شֳbc68v }JO/ǧAp(1ݘT³ Zs2悫Ux>t4f0$(eD&:E͓pd6YE‚īMPwuu{+5Q$xҦ/!C^\C&UDE^s62v;uimj\R$Sz0#]zM>|6z11Lp $ ~QYKT]kD8TCd&:7gM4u~10?D}/RoG'}UtZf[r>Lj>fR1<(u<΁̀vDzfؾpwˏugX~C%B$?o{}`s wk3>x7T{j}NRk]_}p I /h lz ^gtҎ*FwQBXY 3 2q1Ҕ*C |} ދ|ω ! APPIiQxN}(~*C}8Ej\(^!vΠM1i-[;[tyP#W}] 4<aΐEY^l6 4Dڰrs+?8l#Qu ٭]lX`g)KN7}?fw'СeO=b>_!G8?J ]C2#ﭥ#*Z: WPO]部^G;">bX?q a {wG(u|= 'aG;|OwRISn68vO4W_ď@N@MQ)ؒ&T8z {Iz>a7nRmv@AgiaN=O`lk2E-2}046dWbz>nSrHbќ;}$%DѤ Ϭ'uװ3='=I+ /NxT-,A2 wC v^OLf|KW8U~P^PG{ Yؐ~|ORTF HvjQЮ ."?58ل/a͠;f7 *\W1V*Dom+6~pCgX%7!& : fZÊ-lXmEoX~q [8d T.hw&vL WAeGq&'iV9W}iUzr^S̀Z gd\XIkHՌ4(̩0ș` =}S`?E}ܫ;lp:"~_;*j|(nPj@N}Ohj"vY ŒC>3t$܆z;3uO ށ+OU<\-('@˄?8}=xq{{[ăf~N`g~݊<tgOs__uF2nJ?FklŢyAM[ "AI$ 5' sPRHB=5VLIV+Icb ͔u'j!mD?3$3&i8|f|~_}d5lK :2Z8`RNG(B P2ro.xP;e%\h+n @^_OF4' *{t[Z^ qx>B=\1l=\bR$7) Onȣ^]>s[E\0ȫZ#Gb'>R.q2@{[e4trw0{C4 vwR. BhZ?\ģ|<:,K."v͞@aaߐCvYvt"<ܰ>>ĜޮI)Ĉ!G0v%a{K0}/Ȟ{k%RBx_Z$`r}(܊azC}!vؘi9@'Twy:@׎'.sNa9nIપNPO.OQn!IFށI6n`z i4{ *1 J( 0NͶ;e#Կj-+z3vD`Y8M4d*pARH'yז YLU _KfKL$ Ȑe>~?~i9~š{o!A"#P}xџq67Ew]_K9N}QĬ~%sx 7Xuw#<|@d?D?e!`QIGz#s1OC0iIz{|BLE 0ةY%'\Ո|RXч<}`yU6܇a},D@5BR i78lDP]UFp89 -4~?s&Xv*wT(}*h2U2ǏZч=L?%Ev[+u`4xEhN 8yAp[$Jfm0$b" Td烬| ң=g{soXs C297.0#q@DCbdJBR2\(kt]4$LQG>?@JZ/R 2q q`m+= |c k*"u57n@q3=ǜο<_vO@b4dbB8ju~TӳT;$c1KaONtY' .3F B{zꪪlס_e*AK vw_ ͸xH5na6m?D;J⪉RN 9F2yhМO6Tl'tkg#t('DR ?_:/DM6%yc[' #^r#|XD, Q}Lw5g@ZC"daG/ qg6٦qկWx0W>YLCzEXj3'Dz;uс3s?ɽמ'N(A`h$7;͚hPV9a𙻐6~p 08m2*;oi$66,?gEYeEڊvPo7OW{! @!GøEiLǟo~==1ݍސGWPvmvAB!x:0i҇%lyw`8LO<~jzI]@ ׃;a%.?KkLwI:}K*!ͧ~Mt IR󣠟[1M03v~=?#wt|,},?nR“;hM*n$,tGwPOXG6#ٮ<y*UmEHٹ |!}xϤqكݠ8]!x"T>Ko9j oqq7JBF{{1n-56(7Bt`Y8 0c TTj{unx~e|mVbv1ˋ e$lATdq#2jA_UK]6WeH xSj?.<GW j ˣsBn&0x㦷zKMljSǞNo} w܇C r qsuːXbD'ۼE G |^( hYawyuC3#+Zq~kxb.g=;ȽD# &)thg2urA;zcf )twM 3OOOtawwv6&]4P%^t:0ɻ3oO{<f|.bn vX[p002Ąa("[״ nRA=e Z_u P̧kq1ĞfiT Hl<߼+gI(Ȋih7 Վ/!؇*PTJT>UF]C?њCP_Px,xtũV_2ֵ{BK 1ŷfvb cVDۗB@уs]ï[M 62]L]2c{{0׍ P8  ##> l^c246/ + i*!e2qn*]FϦ`:JP!||j`g8 =MW@LP)an5 NN*E>,y="窮mt^\s=_r;Nr Ortøvo.{f;;4*B,ZmGh8#;3qFd6 UCz|SyAPW*d[(.çhmpvW,aP!.d5) ruw;· &wYxy6r#b_cZGcggow#'d;A|@TѓRa,JYyzqb? {Ggы}I&[@AH|kuP $oёy~2a>>_?[ʏ̏a?zфdaߦ%VɴSd:(u-S '1/qMݮ˄j2/q۸GVlCYMn4 /OO)v{ \>m)Sw3`Nus !i3ED} Dr0Y(@ԑ ߟ 鉄њ242O5x6{C_LM)g(;g':?)9zÝ ˎD:Q^'gߞtt]ު'V#z?CzybоzǥEQHE; 9yu?O,X}gT\dZ__{L S {]9}y6逧 ߶g~wdS@c9\3c!;0OYe\[cT>gtgw)1^E6DRHe)m wYև2S2G52?T4D` Ȁc>#vm~A9Ֆ8hkk)a85d E%0~tɓC7{„i~_-'I]6*ZS PFz &g# l=Bg"񈣿@wM_}T3N_on|'ly@A剦qx)bSS$kyNWo_->?Ƿ^s46G|zh155ʖ?6^ax;7 J!Gnѹچ;/x!8#2@W"w5O%FBsנ#nۨG?B|.ꖗ!2.hDHd@Poi ={|6В^./5=B@ ;yO-U'@'"Jd=P<]m'Ě:~BYC I$ K{Q <E}.P0kVh:p ֥N kVX_m:X0#&R|Q^~cf.C2e*],ULrӗi!nD^Q'%Me)D9 9X:emL7s3USaOWQOD Jdz0~gצ}f³fS(ܔXY 0GDaE*&Y?$GOozh6r]ѩa,ߍFNf0$l h^J:| js^x2ċ_& ?=? :1= n'(eqF5km(ikQaU#rbp0q #rh~x^1>O%]gX|;_nQ{ ERw/P&&AD.0X ,3]8qmkS kn¨ǤGlzІA$YdmB1X&(HQzF歞q{{s?Mh/%&XȈAn<>//"[l*g}Yi' YH(wEѦK9{=P|uY*tE bWSWJt(p7Bz wk^񼊇Cǰ]; K?$`.;`φ|] }!1>q5:d-Va_+s]eiժ=;|WfiՍ>BoR1ӡCT"t-U ~+7eA%DcV<{ŠH=H=iw>KiPH $`~]8/l h>uWڂVث.TM1#ߵ!! bz-#lT(=yYbS $H Z~6>] KG*EOhacb #V@Ae,OI& a$QN:\ψSw oX]&Q͏~䬯e{'b'Č"WvkVJh&k;cy|t^Edt᫽HM0JSn"','cp8''Wy8Zg7ZQP1_֢be(z-?>݊}]9 }_i]Vl@=P^*xg(X:ʠb^8BY+]OEGc֊?ڄ='q.zv>:+;]UUB D*~?7 z$q5N|6;/XuO[rs0O14Q' ٍ!Rm`h‘?9ɿ)'B8_;ᲈ/0ɼ3!dB~(~u< X<]5[倒TN:,5%cx_1LJ<#7ywG%s葬$`?Ѕ*c[ cJ*ǎ'~]Y;ڗ0Pv{Q`~W?3=4K{I.бùE3_s-󭝘g1*C'yq\y c^nQ<@s:_p:xz>)p0E-!J^@I&; 5J3FyΠ!;ڇsC70("x>cZ;QHr+H0AGA[Ekh#@& q7Q% /<5pÑmXc0:sؽO'Fox h߃?;GW/oUtS.F! rKXidO}c4 13ӧ7+3MHj ;O.īo!4pcaˤ9ĕKeX a,8ya^ CX-m 5,ͣ$//mǎ"HJ0KUP%)D3Dts5[&m!Izvi-@4GTN$̛c]5 LU!U9[< :{a娰{7=y>ƺ;g;+xeI yGu6 sx!i[7vrƼvыޡ8@o꣫1 !Ol]@"1}&#$L@yH2*csS&ًvC1h ZN)K lp5NKɢ4$W쐮 !M<πKRk:َ0ro\3h B@HM3T7юI%"t:hKBY fث!3N) &g7ǘ>aꎣ\`Y@0rxoM%[;o:CwcU90kf3,pqWT6rF׸m(p,WӸvfbdAC I3Ί T]BhF :dqPăM9rSL y+*d9hr;Ȝ`7|)DcɃ<7ը- o1|i[ZDqiҥCi CP:'Nq: CI{pO0q䜻|hD01; f;TPxt'r9_| UPU]pF =XL%$bGz 66ڃ"9 !2Fb(##`J$@گ9/Uۋ#s@+ jyX2s>hI5~7M!Eceq I=O5;LgZΏ *&YB6~vvYJTGZXGL9CѵAZ"l@1rRbuNLU92xdL=$뻏nZ>ET;)l0Xݙ9Y4$N`%4v7a1RJض"yKDBqR"AXޏ#(iABb/RXfHG*`݄];byaz|d dE`P_$DD?bv0 ]@Nr&wH KШ{?O2 y @-Q_U( αŐb:JwpCD <`0dR;8D=HxJ<4oX4)"#HP=qT( D'PМ=Bi%~E>U;?́I- A.M|z?bʟiSrDn`P:,!! `4!(LBN3[2*KƷAChM3tYGC 뾹ָ:r7˗d5 De@"'3ܘR6}Eш9Li4GjV5%\p|*9IȎ{r_buLMmE YhMgNֆo]L c ae[>qpzqʨO{&^$d1u9}s@!"=f hJ>T^DK"Dh玽P:FCS`o_׌t 7&nsCd{؎s;'>zʔ--QEpd(6sHUT4>"nt@X!oJj4;OV3`v'_lFuzkP]HGR&p0:5%Gsp9+ɦ69pQSS 0n4蔽x! H]?﬊C8jZ>d![ŸzdȘy~h_f²lȰKuC"&"Pᆑ:X!SٓsGș hM%4`tH"pېDB`e(&F"!Ef=H VVaQ Ccp&P?>H $ԿF}`)H'$(E{d2SE'ы'  NN`X*~  @CJ4M*P(H3=~笓C?SL ݆.J?A>JxH)_!V6.(o DpyL+m,EMӬkûj.q4JoόRј%#4v ;ENm:QK'UU"-D @ͭG> *$G}+"oyDIդ?#$Cz^8!BFa og<{7Gϱ/3qDvo3!;H I52jwHO;5 z(q*CM00q6C@4&?1`]0[e!V ,aY,R"xlcsj[/5Q7\tE {0# ~?;vZeǿN8Qb/P@Xp5GR!%6N}L9Vbٓ@6И('~3V)*h2D~<.=lGea~W ȉ`ȣwmQ)(m?x65 d B4yw^X͆{nĤ}͛K4"FJב;)x!P˩hYF( IP5uLx_oMP1*1 *=! $JS:>F@wuorJ73O 3 ;!a@D@AQ)PTaq$EOs|ۜY:7M%bR} ddf0(Ѕ`zi;5J;P[RgQIC"r"Ԇtuo9s^hlll\2(6~@MtásMJZCv$nʙ80U䅚20+y#WqePS<专zTqE$0w3Ih$Lv< ,a(662q8M}p,,, T`ƎHe藈1W;57C8|ud|f<und`a[Xp>7'd+OJ(tˤTHy'X \z/VA śfSި#lȇg\hNi0OŁ2wz˞ts^ y&'I]PI1Xk1M n EwG{H(U_ # b@C V?O2NL/ Is.`)H$&.ɍ5/d4UQhC}b,X蠌9QQt!,Ac#34-03JI-)GYrD)0@(D / CHrM$s E+HbJA" Uh H%1TA<ҘrzHP'g=\R ̋]3 CD$AAMAU+2ib(h Xi%!bHY"C~-!*~LD]Q"PJBQTPH`d@6|d[ac`kC(ŌJ*ːG.!t&y 8ߣS/P(D݀\x0|HO5ǎ1ͤ: K\v3OQ<;!%sXN /ȩJbY)C*huGَZP$&u8/3aO)u[!y^uDR;0C|`@}Rq݀}ߧZwJF;av6&UCht, ;O';!Ł4!)y$|$<;+o9:P>p*zҞ% C8~7Eahz$#zT{Qn7!lRłDq00'*MbKpQJ)!: "s|`YMAI4R%'/wO͊+Bx\c7%2@ q4'! Tg& |,gf.nId~%aꃬv@S!b ^Jz%`xAJ)aW|O!pG{@GG~TLDE1# A g\=*"'.8d`]Xɚ0\QHN}0Kw`p$E'#"if3R N" ~#(xC 1`x8*LI}G_(8٘H'3slv-6 ``B)B!S_?JT*{l5a Og[>EO>IHc릳qB"dK&Tƫ-ĖX ӶOچi I&}?;sp \HdI( Du<`ZVv0~?DuJL"?$PhrVxt>ZpBlТgA#8kW^|W2#{x:k3!xn|*E>P6bg~{9a JqDQ'Lp>&I)qsգlݸ&o΄"Q @! *>x SJA P Rp<7 :0H ICw<_qЇMI JlJ:C$ 8mm y ~[Sp 7 JDPzR6 `gclƍH.^Ozc!DruTDB3 J2jrʇ[Oal{:6$Lx10i^AXF?.uiTb rrѻČ&X0gd)RUPV`V^w' qqXL PQe:NRrVAo\s}[k4*ԛ\Tpd5%6BJvtQ'+n cZXDh͊k0hp'/_l5c|iF@[Q_0qۭE~icLkBFѠ6S=VL(qN&k|QR-uCE [Bd&)`Cv LYYE=~O.ߑn)Xa Ȉ$Dq qU(W]4aȸxW/ޙx\PnrE -ѝkfp#8G 3_kloOG!2 L Bn8jars4ui2^/9ՙ4»䐖 ӛ:ηK+ǵTj4Zt0 ?TS\H^Ǵ UDĜIhfU'Y|=vsDOO..r&'C/}\ w/ۈwi7c;UL" |B1mG01 =9'C 0|dׯ =c5XXO=^(aDX@5|qJj j`6-F#pg\Ĵ(,gE ;CiCCX7fT[`'R1\Mb;2 %h>^kΘܪ~ߴkeF&a|,IFm n&Jpe=X3 +cpX36esp^'g֦d˛I%M 6ϻ9b()_B^e={ @̩)}ph4j,+}G=XlwxFWQ$/ȕ@7,bwZŞ=gnOmBў/r-y4͍(LM$%`b ׷Y^DF~zM\L^UnR6L^G$ -ޞk*s7ur?LG|_ef(  |`| +gϐvePVh(F!u $_(PlF]J >k}!y[jY9P:QȀ Ws+-;zn477@$aG R #I aف C|象M$0os#fx0jWCL{2CZSR)($caI2MD y<1Hϐ9x&>KÑ6Y©wp=zBy #=Ҷ:5>@}Z)=''u}}?z~zuTuzg@d4 BA)(>@O-|uǦ!A@sF'܆ҿo|bvu)xKP4@4 AB2yBs }i&ۅs X- 4maP/F%Qt<_E~npj'*Cr)HE4D{+6z/?)dupb40^c眍/ԐPLUl:`ocuKq|?g=gd8kHʲK4q惄"ryglNEp޺Ii*M(s~VA(9j)9N)aM&h R8.LB,9f6C T_4HYH5LZMkT,hӖMQT$ \e)/?q%+Y{ Sڅ I)OPJ3QTF$oG0mz;p~ Te ~F~}ҟ%P;ެ.G}} F8 \xf}gvr?dPTu\X}Q~ռխTM3|:N<ߍ9mY0v1 z`ϱzvC*!?$">>jA\Ev2e Q2P"`8z 樄T@#+>*!Q @77g/^C 29#bF7LV*p cw8GmFNe ^Z7* j{;d^G  M? 5u㮗%ܒ3PsY0 :6A"$f#`/vܜ1{gNٗC22magBEׅIi}{\A3RԮ6kxZߊU}WiǬ2 Dו( W> Scicǀ)՘`Pp%o֊E`?'K-|k8gx;(W x"a3%#)rd9kf${, i\!<%͗PUgbTf]1f"_@M,I%IB!FDBr}P!o OxiH a:C8 LpS-Q 'E\wX8u2$W`ty ÆiiXHU# 4iaUӥrewDPhM?'Gr]DpBk+UR*d\ )L?9 }|2_<&166/o&F'Q6C2$=wWe?c9wy"v0.LGD/CBH0D;Zheb<\SW~"].v Sӏ + z=I(kǿ%JloP t(''Y5[]Gv"Y>G7 >">XH i <NI=$0o9HG!t''sιQ!̟"! URAREN]63!Ҏ QU+8XXyFW6,'-ͦ1\S|Qy*DĐŠδE %e#(xgrУ7 G;&);ADQ'Ql! aZ@2,s*"Q5* HbA8B,,X 2adC@"j%($Ba&a ^)D&8D҉7.stᢎa#&x\&Vͳs nG+e؊C<< ]'I^ ZL6QS$zHrgʫ/k (>$7A }шB/'?401mh)MRQ=3g$.).F11gXGm72c(VҾD~E䟟a{=v5ü&@I6# +}Zm B{ Q(GRtC,/NLY6܈^LՇUrsq^6YE1Kʼn;x & 3?tYj|*%]Tpe!s5E\l'ENiPCqǑvSSVkꞍAfh|S(D(ftCP DJP *z`U^XQXQфjaiܝ=I{\L~AFMMQd1=@1I%< cS:Qc6yg> $DX%o(U-|Qc/4B!4Zq{ܮ=su :r)'D&>$C!P<pC4QP`- Ӏ OO0 kLm/.{>63X#PbTMv`xr8[9K7gE3=Ý1kw-p;#f\99ӏeh$Jh("'H]"_٢ B>\#[Ĝ!#-ph) %MUz!{0㗇40QF5Fo*Vȩx' c˰\r'q d/gB׉C 4;nY-+BO'Rh Uza;%` "W1y+7xFdyC5e6q)b ƐJ81Z5Tl rD$?Y4/ЩOsYX9v8D_>t'yz!9yII- Lh!HKlKh_U 50^J?]hPzocuA@,Uzh;Cw?cVR1#!?xĎ\m=o3sH&{yitqnMe|WNY!!^(I'= m3`1XwZ<v8q9ċiGEƨ^$FQ1Au!MGxՎWpsab-=v⩁˴Z[ E2Aب!2 3IX2ra&r/oS>#ZL@V u Jȉ=hub[4bV&n}3o5f<60ޖQр0U!muWz%" 104| =Dc!vHMtǧ9a+48%arFpdv[1(xٸ77ѮDbL-:8C\BȰľXŖxU✧H4/x =>W*#0eyi Dwtor),п?xD;WC|<-b*]5tXi`B-j֮ kt[aR6tCՀ.+Jgsk3\5b3,h( #NI*Ɖyҍánh(A==OoT̈́m`9D5ei93TC=XfV7Tǃˇ֚Q1lܹT۲H g M3^Téb愴1r.+s/N&ӫ_)8pw%h]D&RGiD1o-##؛j0ca6\A syhlӉ6c`n@ËSq)zg}]xljяc 4gh/I|VxBwR(T)ZGF* Qtgkz 0gՊ;]_apl^,XcO?-T:M];Ã,44=kL׭L76ƒSpX~ JI]$Xz]%>Iz^|b륯a&<(\TsC!Ý LV\Xj/1$Vxޔ]+a DQ!g\ʍ lMqF~HnJD;qw Q9&1-: 'Y^:zi-' 㐸ﭜB곍PXl`4g)rBW':#mt!b59N(xM<Ɵ(#!CIZnKtƪ$lμ*^C/wSsЩҚYLKu7lne}5a=̓%U,EΆ8vŭ`/Ջ<mɓ\2ӤAF1wxi] ֮}0 A1C$wFj=塽-8qK(Q\6h*K]&j*kI@eT4`r]D?ݯ"8?0Fqcl `oz=uن5߽31YLeABxS[WDSj/8ωCCѰMClHr[~&]yL:r v T&fEBً^P AD[>{ut\Qa Y^hW^(FڐFa˩qޝ$u\HG5|":zxsqL.Za8(L` ^bc0QX&r+/B,*BNGA%Eڨ@Y2^! 0`+d WTQc?4jqB|IbJxU)Ls1♌9:'a3Fk7[LD" 9L JA) am!JAED34$FcukZM#E0PDٰX#K*M]r V19!q˶_·z1MPzWfF ibJ&`(Q4a!"vq{9k[4mhXwgaKgƓj( -bQ V5S)l%Ncj։ \4I% 32Q BUq-QZ'B[`E؈@,bѠ4Iz'ԉQAJs LC798_NR#T%r'8;RI'ހ:^9znn- $ 0'q < B6M 9K( 3jnq.j'`?1 by9{G䏸Z1{i0%Ą6w8BH.J"!-Cѣ.kQ1"uQ5A9scm v{NkܘɁB!5ɕe7'2@,J =?IB>)~. I/!%$7d|?:T_Cn }R|NG(8ͭPYd5RT)[OL؜$dE~}v}ޞ w^oq $u Hِlf 'I>]9yL&Lv>ś&[k3,N>O\xC_&_xMiV#ŋڒZxD H{[G?L:=wt4EqEZ-zK>C>RFiݜ0fbSC3k*쵤T%Ͳ8T |?o>v_~es=_'V5)M5LGKJjͷ*"gW ]ŚrNfCQ)@ -_mhKJ"s #;66ルi}_9H4/u y{GdDQbG'x0Eg*d|. |u;%&_,dyHҘCuXGx=IK"-أğ?]*h:ca(!~de+pBЧ>?!ĢІ vI-31>Q-aM s#7aAD)lnG0ERE="T%k.I\lApmfOPҚPK:Ӽ9d:Sf0f<]r6ѬN-ci&ffIUю;b{+e=Z1 7ZlTzRv KKʑt*,9f U kB4ll")Owp*J!GP;~ (=b,MldO`4i j5%)KI@q)iҦ"*$ ?|=)%=;/|9 ysADjbK8ct00@ȑg% P%D7g @Dz\gX>㏶ȿ[5),K"QL_!oD9i$oNQ,:2gv/ d޹tL%~'͏]E(FpKL_*ymT)Y* s 4&Xs1ѳ aa1ɧ=en"dG +C8rŮnռCL"^1ORs5;w_qN*Ƈ)ӷiyWp6$.*ZڒɏUS-oٕN56q17YB0Ѕ|Ldb|~͙: [ձ-oji\[7bwzzhX%}zf#?"uѪr)d`gwkqde$%>{iɗ #lx?> 92MdOK<)3+5>5j:9 ߔ=δwxz[[UP&B2^%3GwJ8yOے\<'Ng4)KV0w}h ݻak(?i !ZĩqqUb #v~/`fn+!(iIuLcWW qEs<={1wնcXhU-FTgD^Ff/ .+S̔UegI68S JG!a ։jޑ2N]s]Fx|mÉ6ƻ>)6Ctt!$bpp9t3PM4whό v|4mMDttˌvQDHghΥ H'D9OQWpd[e>?tq9#|9d܍ sD2VkGho2vm7nܚ煆e$`Ǝ#AĉSGzCbP8&M{xp8AnAX#P/{| Ѱ궅iiۍmDŽ(31h9TiG%Pc]d &d1#"xQ΁H]v!㨆<]I4,=c Pֲi qwT^1!~JۗVd!."CbiĚe?)N1AvkzLsvc^v0΃i#uҘY-`XdGĭyYXSsqMAsPyxl4'2ի3V]o)8fX_F -䌢9@bcml5^Iɤ.S]w8/2x$D=06zTanvFΐ.8;1vkI1Ņx=N' m8uuV9ri{*[ L:elY?/뱌<=K<6.o{ч`3՞uYqtA[<}"Lݹvnɡcپ,n5ۍvs"C\;HC*0v\e$f|[;28^:ܪ|QoCr.oz e6C=yct_rF$s^#N6527d (lמ0A$Uܜj ܧ0iG$pS 8vU+a JQh10? ylވ ϗ<.= ɯxF=#{6v Ƀp[y#U۷uf8XG]}As[h@JmKd[DiqI &S?kI>* MT e uw&E@-uo~-6tsoyvXQ5:1X IRT陘V9W=f_yv$Ik zYB jKN7ך>6,8Ř[Mp r[3R^`(hxUM=ZO]p%n&f4%0àUҌ;L;\9E^J0!$Iq8r}(ճLhn7 1O7(b7c=u/*MQ+9)} n2)A3O-V;8KF=x>Pܹ`mQܮ \Rxs;4w\'$Lu0&bTӲQoDG9R\V m{[9W: K+3E cYӿfy#9|"^&:4Q1ރid 8v86fU ۘW7.ql|ᄟ&GOM"H:;xgF Tщ19fҌn4@6.QC:*5MPV 5֥c;s+,狆=Z!jFI4ud}wo(9~d:ڙiA@bf'Zo{fk eG#ջWMjY%ٸ7VGg༾NBXO+`s(uݿfz/nZXpkrephS>3Y`D UVJ6v(4n\/|5Ry!.6Pww#o."*˜[ \4N՝[Lα8Ó,񋙸jw[#K,Qw~PW oZ&IN]n\PhQalT-[W qLs]ʄo)rsԚg-]@n5[^'n_x<1WUnn8Gg"K5/oRE.A4.rwT͵?LW }Su[ zi%Ǐ_eEm$ JWJOzgJ7+]fYesruRE7y7E×v%\#AK>r6;ˬ96VFLp[ӧfW3 P:֎U9c$t9b4C4sYiP'iS\ L9R]sD/ 29o8-xc;cdbTMdmb!B9 ʈ|!c2Y1䎰?}q\bSev:&j\5f)72F. "8ǭcD<0Lsc dqx`{6FN/םe׆&<03TTtdĊVZg H .M0: `7yPpˍˉmŇf]ZC+8A4߁gQ/:B^Yv}~}LʚxJA-FMYN%1fhH@j^%gVe4S$o{mdά{H8p.Sn+d6J"u!F`*PvD*wqe$ˉ R8eHZ,6Heqs*o( e#eQ3'L ;,9QZ#썏TH:|tsf:ib[)“ 0ZHk}gn0>iN*AU C i5 qQ(BfD5ۚ,q2Oć-#tch;p 9 >T82@΍\ &F:9ˁF7G9ȵqMgOS0=9;wm/@٘*鴙re,55c.:ħ23Kol@·>29ۻb4NfȎ^2LA`I[ {%l46{ qbsng5+MIט]ɷ-fu `ɚ  FJM=9Z r,9DFgK zjgNQL`!Qd=q3;]dQFRq;cj!D7a]Z@gn a0 mui_DbP:ͻe1" J:*tT&%6}zaR/j'Dž^,إd֨XF6%]hm$~\ҼŪFԯ쓅epgqRˌ_8~VJ(m]ZqK91s3=pH]pmˇQ=d:9x29]2oS"Iib\pZ9"ZunwǗ]p7inXI$.`ߠL'nO}fʜ;.^v %X/GnlvˎeB=B,\:,R]ȇM"23M)'\i.xzг@tOt2<z}&F)/Upgr D9 O'KZz#bǜ`>b}/YQ4F0(6vb:7F0J$ ]E8}5(`EWQj04eqi%ƞh=?L'^O2pߒ A›1#e38!S^5)uQ+vqDSbF(e2r3~/ dJ X{cQ~}]SpOou߅1D`b1b#Es1N) 煴"JA&Mxfna*Ncmr53U#UFQPMr"6i.DxFFJ q uZZ.lLb鱲bX4 ry8뙈 8Wk҄Cwxe@|/U=9f":9   lK`JÃ,Q0h@G.ō 9c &׌xC~Ω~gwKrJcPALN+B5Ȅ98NfeTB'a9%D0R%0l`Ц!ZR4ͶP%xaցHO;"r8@'o 3 @S (D2/BD11U~;%$a![0о 3L>-m*~hM< v*R-"d+!rb"dBV(5k(VV:١, B'/n$̓VutcC"wq[#&\@2^~OsSN0`{O ( iia8xC@>>>7h{({NLA =/wcr}k|$s`Qy=7\݇/fxt[r @R,c/-H^ \j@o0^Hb` Ej.0F8?IDK@"ߊ*le!֤2L`p{ O(&9 S50q,1De+6kHj} 8!A8"{6N !( Rxp-! ҇0#C3qk˗?i" qt1`j)I2`%Â>yxZ:P5nrA!_vԿKPli| hiԨؙ4i8*% Ƹp{dU S6!}MA0]:^94"蒩 g~&RiWadX!VBJzjJ(Pò_{cb) ^(((5v~iXoG!"TЪeiX@:!T;|G^DA|1 3Qԕ}_[DTRC|ĉ٠$1TR*|o`#GaiRb cZ $CK)Q( ɋcRxF;v[7Ce8jyм#CxϦOzϫjLB~vZ `qQD{#ȥc`%]d9pә:T.QN^;{>l`h7p~4 nc<{o5MVY N|Iϗ5\ә2(QL4ɊQ4ubm,Mƶ a:.aƙɳfHܰ|cj 9@m$8e6s@mpѪE BꕌT1 T7UeQR3 x CM,*hˋ%* jԗ hj(f[ 4N揗(܆B1I!AB34SHJ%,@Q@| ҁCi)1 GSIC`*-e8ܟo>WDݠ2Λ9O8y5*%2w mCM|45A1{c`@8WPqDC#A @=Orv4!Op7w:""C죆ՊIH"Qq]JCo~^͇?#K,u7h?MXs*[.~84P̨$C12*D 2T2 4`"9G 6ePa1\w>nP0-`~5<*B?k@ƙ!Q2R9z !Iix {9Dv3o4LL`'Ji`# YD[+$uϠobI"ꗃjՍسo.u\:lWFazAEvZy`te$fMD+*DM`q1 j)y*>1\biUt 8B2.1 1vpɡW0c6RH U1&pC7^nVZBom{E H:TnpN)fDMu)F2X؜ū=검v- 40D2E_|QH4VߨjĠ'i̓2,D0ɧ axЩsu BO+'" rk8A 5v?)RЕ0设>P{x'zE쀥@5I6C% 44.;^}'jC5OA˻J%4af P:.. h)،ŌTG0 mFfDc}PX`&*yQJ /k9{ CL^#P(;m5 B J 325HAD+C$BQ4AD8AJX$a,.;DLl XZ3n3'{&3?LUڹvuFylQy%muE< F+}Ioa"d4iO7mN1[@}9 uJ.(T2jI-棊 nLK4;SbؖV=reY9dSuCkT_ ,V/1t&ΛW*:lon#w $!MlS EOmrMCn . /LMD1 }7ƹjqPtBfc&;Tb>w nFmIX@u,5dY$' ݯc5wAS\jqs3]!Z!h0GS^k#O!M18OjVf8]9=VJY`c=.F%ee`ZÄB3lٌLCt;<0 iA B$8u5KZ4j >r80glӎkҘ5=A,VNCIcV< 3h+ M"ν3;6C6Or EK Lbm9>Ap O t0ٕ` M"uBIR =R0@>=6U;!zk;yʎF{S 1"EOCG#\ԬtlwK8icMn$bC wh.8Du]z?| R)_:_|?owBInJ2P~Yv6#c:(bC0mXi -!y2!e\~Bثt}0٨KDNaPH~i4Rb M }Zcsk8 s:Nҍ7rgښHpw9eA䣭2 H~>m÷$cSK4ԨE12LSxiJ;Y(`ȗߍ-D4DC CP )Pd}+NCRdqj DeIӞ;O {_i*Y2Q .o8wݼ؏ #8*u DLwɭi7lssz\Ko;M/ k/:r"v:J8$"̐׻Oc=CqĒCusm` X$gt\piv賌!VC/w ̤Ppciay,) 9Kû&b'MJ8:1q7D<>#XYZd}Ns?r3zx _Y:Տtx8XdX-[NJ+,N9E@;pFLursuV:}|kk)kAdn䥀\AUjcyE,naN8U21/ߋէ8IĬ'f`/ nO>0!XE53۾#^.{IH.G~+]k5w*l0 <7|s8_O!BS׃7] c[=]Ug'~x2icqڹ2k'YQsJ/I) L!{LpǎzԜ\!Wp\y$O-F򅮈jY˾kdR(*w!u 8+xp`an0nc<œv[hU7deVa" y^}]jng3Ӷ](4"sTpjܝw,\ }줡[dnj c[<6]ZCL1ALhlr6"7/֖sjri 9t[$I2GF$XKX~.P9rq&=9/F9Y.~ l`*wsZҬq|ݺ4֔+u&^CmH J bx$͔.XѠ(`8yNO>ƒDpvZbrه)ۃ03kE;D`ÈH&{,[myzDJ0ݘ"Pf,LH"0Ug PE )sk(&tOFmE;(щ,cK.HXs >CB(rOSstti̳ێhjR nH2ecqv$LԏkqK9yN!PDQ FT1 .l`ɓ`G m/n\- dg3A#! Z7Po#XI=6ȼ --Q9'#':&"]`=A#d0Pc2tfb&"Hh'j)B)BT#DWA S>c a @ ^d?nG1(YZ$$~db Q,pQ8LV|H=[|ADLKHP0!$!g/7gCHQ 2g ?$ˆ !#,{q:|O'r~-Q\9h $SDsÜ oRAzJH ЌS0DD$@$@(P8{U|#n~'Cm>{sl" Б @HRD9ӇO%Ѩ&aS1,DBcn}c\p 2>=knP9nH#a}cUѽ]ܪ mԁn!h Nq4ɫհjE0Hk@J w'`s:?29;ȑ pbpNB?fRӸ򴿇X`O"43 t*09=n'1L̴!BDܜkyǘy%l=Qd876b  =@@X?Wa?v+{8dڜQqN&&N8 <^uayu)vJO= #zսm!D[D&Ip<HtAC7Gx1P9 7L3S ЇL]'y/a`Wu7?_.r&(hh4EIZؚ/J֖ ƩM,H?|ӯ5={ [KTQ3b8i};q|F2?EeI?,%>Vq*dӚ-$IkHlat]0uT*qh5:*&'#B"M-0Ji"D$p 3,#3Bd(&VJ%T#!(D@?`ƣI?4/B"o~OEB WTh<aO^,y,6s9|df]_L\g"՘c)n;7 U $% (CebaGicؖM}^]WVӱ{L^;07v O}=E@g6wv@0^1`4_"7#f mc i2i?؎6F,E pdS( 4B%B"4$5zÝ)8@Hgɢ$ -0F=Ƹf#Df Ԏ@YK`L-L[A6#4ڏDBEwd#ID  E3c$0X(!ěհQR00c8T3$scy΁Icb+,*DJH]c80X ErNsfФ&;*$)\53lĐ8Hg`9!D!s<BE>rfZ(4:Sp."(࡛EhlFq9v*Y#IT s*D :DFrcH6L`5mשD v;r$((=id]4tw;7㱬tKD҃9~an1\lb;Һl}f}E(wZsiE*F.D~(IeqN̸q)M?ՠ65ȃqI]U l(es}L V(!V6W@p$N Ivm(G쟧{L!m@!r6-btO vE)*N0h2o,+i,*$ wHJ`AhL (4i G2Tt;:Sp6E@<  mR⠇i#SI=paDM.!i Dd8$"I̧/zm Tz;a]9F:zr<2'W1W 6?1UVo;U! ~ouc(ۉnK>*!ٍpl0~YHY>U(,C ?ژ' 5Vе78{;/Lqp4R1j,܎ [4)dυГw|3>J*c?uxxyM~yޖRR?P(FQ " ԕU`lx"n b:yza_a 2ƪ?FQDdQ%^OF1/~Kx gp3}?Pv^+P LLƌTUP\ȗI:UhdDG ML-G~9K O*P!S,Z+u"ei9dzvccf iA&'@ tM^ H3d/n'4m8M/0|m|Eҕ@H@]c@8!lSBl",p?$TzҥnM\['h_Og[X1dA 0ɸtfN5b~QD [uzob¶E3WmP ՝HDC@ܒrm@c֤͟ QD 8 ivvǸ4Bt{&RK MgB7u8p]dG t qC ):`cI9QpO0c|_b) .6MZXHn Ru mmBXcLTy`Ta!$'qUa]TIPYf$JDոi5+)gmrd܆B42y_uC0`bfqC C\04lҐm&pno#8KMMi/C6>L  (AY:iÆ/'#B2F 8+Iq8sZ \7DUH5F0CKTbL}$XD\M}>%Shm&l bxr,YLr`*O;v2to&40`}hJ9j @*z有0eq Q/*  c9r!ϱre$Z cG"0f~RaI1_D XˑVʦQãXæXe!:Fq,Q 7 T!d(pd Bd?zSmFBvw Vf?=9e ~QN|ZL1d 2hvs4PEA/e{|d;'0I̐C:\/XR*@(0ehFbi&==g fX-t(Q>;YuzC;Q4HN9oȇ2Rf VB"ERWڜiץc:E1dgI+Dlr2;EнT̆`k03 OvoUƒ̕@cdY7ON$ꮱ̽{}w2BxnC_L! /4zYgԇΌCX$2,SW*0P]c=:_܃ "Mf us7g:F4A5I{xa?wڛJuzOA#Ε/B2.rP"y:#VWG;;FJc"hfw 'xbx #$ACS?oԈ"ѭkͷKwv{lʌ&Nҍtai\V3S>SEШr%=&'yGrkgOy^a?y0h=ƎHt#.vy&Nc͡4%*R$辡>|]{^=1Oo]!*o!95PWNHHI]Bxq9c"lQ?d4li&4dvdPz_S~W%;^c,q/HӞ,9_>sF.~絇`R@5%Xi$yC!L0I?#ӞOV>y ,=_[yUŒ_2SjS[T3!C (Vd6mk?*=@R/!ZsC'_.P55*8 1ix)anZ\v+<7 ! fa@ߴzvcv:J#8 CQܡ 4Uh[cHs tx4\ b:vE`p G[qd&.m 䁐jF!65JdC<9a#b:テ@N1y rk .Л@pPMS?P;',;Inyu =P)pΰp (~-9UH^N0B hX:YiУdt(X dmG٨nF~򹋃$n-c+z.ͽ jk:/Pa>vO'<(^g;0|2(rHe L&A 9"~cLRDTQ'0fqѼ9 DR;0-Ǜ΢v{ v|Mރ 3l;z R($ =X9Lc“u{#3 a؅{1_`H, u1?kP)tO1V00w>^?JDRotDFBcڜ/* H C#m5|a$2R6 a  #:sj(hpm2@ PZ hlhH3!PvY꾠Wv@y:|wJWi~O2 J6R' _k1F2w֖":JDY̩g2\w˘i8$^祣D@m+܌t5 ;*YA|3Cb).ܔ.u1\P0(j(sMs.DJo_~Aymf`81QN8bPxr'AHkfF(Hs cDMjNhAC5DF*| SRXR( 1hƍ\Ʊ(ۨlf4cU5M2OU1:S&%E3D!Qi`? rsm -02p)5f}N/a}bשh:vK7;e?YNP?&b̆0pdɂ!C;cz,s5}dJ b$ L^PR&Dz؃*e,ȇ]LW@APuSS'DJw:|4( {G`PF]Γ jzrfCM3!kXy2OFxa/rfCS$!n&8n6|yE:HbZGB˥z/QhzD1A7"+BymigVhrJR%_SN%4͊@(A)NCNK̆ W37-i$( 칑(J,a4,E!A@ BP@ E-+LJҥ5Q4RJR-(P EJҔ#JRPL1%MR%+CK KM)T3EL@SI4 -)D@4Ei41%#BQ@B1J PЅPQT1MJP1!B-5XhF((bih)@v04IAT CACBRR4(RPP-:@Ҕ-!4- E)@HP;SLZ뀵ZCwi:GƤm"\ـkFE@f` O%D."?2c 2b'"_iQUPQ@@&Z*Heӟn^-H^S'E ҃ 7 ŷ?e@ٮ{ ܉@بOfLe@z _W\&^ȩP1%OL~z38.lsQ"B}ZD3a?v.miPRK݋ʵlp8# PC"a66lӧssеbs nQ-EN9OuU\s[Pp`@z3XPTUKL=FlcwN.&bM:Qon~IkLw;0= >gҡNrD8O V Rv 쓺 b"h`f""&Fe]("HFj)*"%&""j\m"AQ4_KsߙK{┽nzC`}*RhK `=_&crF'$'!Ked5msaؓId_ܨΦ|SC \F;-^fԂ#0AdNa_7?A{`Pp \8(BzHV("$`{ZZC 6#YFΦCKn1=kSȐY)Zh?q8pºTx Y>B~/C/+Sa#@G 7LTJ`FTN#e81a h bx 5NrF)ҨH?7z&e]+Ʒ-Vr³$X0jϏGMCNXߗpyj/s"_#͌G\ :_b9ymy:dSroEcqg_{Oq/4m~X~X#'7cC !l GkBxkM#m#jxe@'s3-DF/o""X?US0PU-8CN:56Y$!r0m4[ )Ń_Al!={ lHP@~[XV.(LKS E / jvezTj0SF󜹖ɢb 4vL +8Mn\ь?fjs0T"xF f|$G I;<3;`ѥ!X[/ qG\ׂ^x ;LtOzM9V%H:C00<߹ `)i)JU  *@_ߨ (!"忏:'d=OVYY9|)|d ʿ3~I(~FӫeRC? @1aqo@ "hiEaj(ӝq]m~VɅː[1O/I7mkn#솞ì=9m'dcOde+21(%M6OM$MB<s q$ES%CSuc8e"Ȩ lYf|s5;fP`J!N;qܒ|g=Bhc-A뭩%)Ξ{$=s;jLT4w}0Ll^䆞EetQ}$S{CQĉ/zYLS3.1G5# F-6&H=nEz,oDZ}dtt'gOĝ6=4+=YxgR3[@e!m(De ?k'] :L7`h J>{:; 79pc{{ԓrXS$ 5FO=l71EuMLrAKTTDS51DIDLM!RDpz7HG/gA$) r]' ō*J@ 1܉Ơt=V2r[z'W`5O]9bC9ס $7A@{2gjCg:9h'!9i4F0eSȥpr8CF I=IN6 d.:Le2@?X?*8(Hc?zq(Iz!? 8aʣ_ (}J0:Ie!#b365 }OgRvv[p(.e3OEZ3OɈuvҤRP%L (6vFSn`́H yqbr8,A)'1`CDX2,d y'J{yԕlwBDޣ,?7vla6d=d*b ̤D\b~L# A#۶ Lm4ѹe8%L$axB(sq#nJPYa9e' Jࠦhr4-HD ܷ#70FB!<%4@o5 Auxc`@_ri> 0ѕCϖt%20/q?qD~|}'UA<$>MD@R1?zT( 'h0!/tdn=pP^B=g҇:;b,;y BLp2̴@B!$iS엺vJ#8w.8FyPh%pш1&h99=!; BUgKDh,'M̦,J sps㐜 14#A0uY%7529ef*j"PV@ z1$NtR?a/WSiǑ0ma婭E P:\;kQ_i/4M{!L Dd'MrGk"{OqOL&πo5 ԗBq9#?mTD'F#iȉ&NiK@J)ct] .r]+iCtCM3O].O3 NIC=|M&mJ>Z!NK5{]>gg;mg%foSp ΢p~4"B%}I-a |=HwiQ[crW>_ 0@d|;“(Phl܃eDshQ@y9M$ĭم14Ѫ:|mQC I80'=ڽ_vmN=Y BdLD8liW\?$or$2l)gؕ"h}m=>vG >#|IC#B>WnpaYPH $hmƟf yۜK P[@4>55CsiF @O/8z=^IDvZT{De) M3!R n~x)"72f84pW#E4h+F4 '[0R8J}KAW | 5ϼ^q>ó!3dK%ձbS(4oZIaȩ9cLSG!O;H\WS$Ywy?s<|ǷM~ۛvH ]v%r +<֥Nf p>js{܍UO0[SXZrbr % ]-JtA5UX.LvkZ7pgDΈ(,E!4;bTr,x;$(rЊ NI 0|{4;`eKmǨGBM|xPS)t֡FAɲRR r0<۸t4\9ͨ80ó{1؋XA|u2Akϩ 7"iTn;J=glM2=4ny;i);#SgHnKtcRc̃MBK?~H³n$Q\C'ሖلy9DZݼ0D; \|ۻ ?MF FҘk5Z;ኔd4#5M44A JBJP:]R1SD@HT ,K54PAKJL4TCAM E ACLACDҴ D U  IBS(L$NCKB %@R - JA" DAObF )FQM~dzLZBBE";?R$Q&;bɧ"QC@<܂*odF2!z#`p ˿30CƵq1ЉB'3C;`d .N߀Л GzTDDA SwOldyI%PL%y堒W$@r$>,BBP%,Gr *(" : I(lcIBBrMPTԐA JR5M)R&fyl̳ ,!AlJJMI#0D1DDh?DE=&( f/CF73wW0Ez04|q2zK(9QcIpK>RFgjZo进:dKQ!g/rC+D dHhacO%!sI1V@$2W$QTҎ4y(!A)kBWIlb;^7&S`}d*CH;pjqYEw"~?Inʓ#/i>}F~Ad9(_석Od~y{$H7mu˰ Fvejyh p~>`W>?I%J4ѷR#xg& q=9ãҦQAlx򥴎ukrFt.[<BWa%,X)Fa#q^ JY.K?mjxHPvXYȆt!%q[1!vpԍ`fm3*ķjWTqA䇰kaO<R8N )lT44Ɔ;0)`.#b}!_hC _݌ 1s}UK|\D T4h;{I2OሄA 7t ]w "uS$Pkb3g}[ d49X Ak "!;o,;ô=@=QvK@8i57IG$):VBQj3Θn%@R÷o8W 0h<{_CMXgkxi&g3XQ?lh^V:ƌs3Uf!(¤] t1k)Qybu=_ ;K{a 5Mg9.ֈ~~| (k3cQ^\I D C~Bf؇blG%΅ |98tl!P+%Jm!l&<'%-!)JL4Z!F0B/ԑV~G??VЛ?ʇ2}& iC;j ݈֘A'jmֿ3 ?ԟP艰2hTP!p_YRGgaD/xaB˼n{fiGʟ ?{h@|݈~ہCܞ'QYU5w,M/#1cߧ7rPir2#iNX;FFS fTb<cx ms?TP\p17S0RəF|ESW(0pXy2֙I+4Jѥ啚 2d]<Aܑ2  är"nƞ!YH3INY]hLUGy֭-~H!H"]bpΐ44i%4T=a8%m™9$ zCt܆8l($k9?v!9~=3;X)W>Ogûew=TtNGh餃|=31EM78dh8ýP-DV@DQpcQa(rH z׷048ض 'a:W -cG!Nw.KCV?`Xwy aw۷#5F57JY-*T(LfDF&y'y| b\2_coA+z{:(7aL7S@J@F(Tڴ4p!uS3'+4/h3#ţUMDEH!pjMJZJJ ) ($! KAcj(&%] RT!i2;DJ1J""UFHp'wb>LV.=N+ۡSV{Z7hGLѪW+Qu Q .Iq>D7w MoϿ!@N>thy#,@!ҚSAwA@9=@| 7=;$xH5Xz 7Yu!ю!BLaspWmnUDZm@i*}^Nt0B1T1%>*c+{ {o"*rO 2 UM֮%2%DK.Vt3Lm7zԍ!bQ}Ldd2)!c'fɩhw09.-3Kou-#6C7#5=+ ZpqLl`d)P貭뭛Ԓ/4rķ\&v99I0]jꆩ7T.:] [eSJ&ݳNe HA,)F Txt+|n橦Q,e: ¸!5(SpټĐ""6rbI&im [.:<]3Ui[YL,}FP9dzf6\"_O\{luI D>(l[$d  5f,̈́A3/HMB3,#љ6CTLnJ#=UJ@&b]/ nmrb۠%;F'_==oRjCM ŀk%PQUA]La w"+ѲFY[r]$T&k0Ǫ>DIN45 O˻mc}"97{w栘^0d(LjRj"{$ 1;#1=_4bK _)N>:X`O4Y':s7j'b3 ̶:\%l듟\(&VƘE'^,p@>fF,J&}}+,ԃkG9q Мnkx›f7 "*65Ml h#ۜqgεǔzgL@t0SPdQ-UaP ORd]7@0CIj(@ePu ^lyHkyBJ|KS=>u!I}4x?; , i;#@ˆ;'A>I gkA%!쳎7L'yQdbӽ&U!VD1u#u. rd*CšxdeNQ("wٝYSy{c4?MrONχ()x.) [szBnEpŢ}ͻv#'Lí%{1۞$d4:־J%0׃<]` *Zg \c%*Bf=A!e*݉#= P] "Fg[f33UYp'~kώL 3B 'C Ωo/ $̌ 19uT3{`=`wg I灘P9 oOI ߇c|rP ` " 3seEz+t1R|rVVlͿ*R֘_bjگԡ3XvbjzG>Ut 3=P#t+Xю/R/G \B(N-*ԁO: |ʒw$HT1xMʡ6e$t Cʳ<.e@a!3$H/4&?(olĴ0}T\X&#`?U-ăԖz%fyOdȈ|C)bd;6=06冬E$zbZ3l:n|2 %CQݟ!t:Aː56^W!P>\PrF|ӄԘ‹Bi>|eTe#rTNi2K4(`n=,LҚO݃Gn{n엓 @0x`wO0jCN N#wTAGch3@֋*!Cz3P1ֶ쏋Yתuo?XvoW俳zr%=ؘɠjJpTPHYr2QibYly8K Ib,ʼn_"W4,CJ"Ѱf/f_|v/zK,{H''?Y Ҋ>vNٽgw#'d?3C5EP"l==}EQDy'3cvruQ9$O*c3S((ޟ'G$l{v֧8_nC4;Sp¹Pf/=&'?oe見 HFUWvco<^q9I! bI$LB\6(ĖӼg E ~n@"/apP2@]!ğ/^LD/#a8} Xu~>É !D%ہ!809DA G>ju2d)ڊLvBL!Ml@sӀ]atYPd$sM,2'&8ChxBR}gVlJd5 ӫ =C{OS=7\6d5 )>"*ߵ kښ}-E)A 1{6i*:^t:/țiaI66("R|5ڧi`ls$yݽA9q^o 3LM626i)h_Ņ у5 XN{7@1yj P*dS斄E!=RNOD˄{DJA%>>ɭM ƇR4/|40d܁U 3O`ɐd7''~[-_8ɦ.ԤS,1 K=Ɂюܞ,m*2^xf,"2DDZixRjg;d(`SH}Ju4t?hd |=%4{׀.bla/๝I]$Ѻ(x=a/9u4lloH?q੯N4J?k UaO:~p~s(~q*s\ VDxUcLU}o'_BRn[ (+5Kێ 4VhZ}7xm&cC3OH3!C)-kD?rr*IȔ__#ώjDplb ⌽!n (6eJ#Du19)w^ $4=i0Cf8 r D`G+!^)KERJ)*+pBbb:C|L5F[ &INZMˏ!g"EsAqmW4 " ơۀ]Mq/Ӆ7 _M'!*Q6K()iykզESvMc1#PN7a$0G/&s֪b"**A?<J0 LNr&%E s<5Thn>5 3p1Ѣ 9ޭKJ Lm92L3̬)ptj̱B:C7+mha3!^=?Aebm4=XQ3-FT!9{jh}k+ner)Z7vM5m]f[nwjuZ0C113X5=h#Vi5G.YjPuA Nx*7j`fY2"!'(h d|:vt~#(a7&XE&7.0Y#h(砳"94wաZ̋Fn8PX .ܺ1qZQ5 X%Ҍ^&ɔE:jXa42cpɎ'&kn u*8׏mҼ 㖻F= a0]u` A;@6AXBHd8 Ue#ӉT#2֖$0+ <2[\fIy=˙ͫ-4& 8=#,=<@-7ަVDuM h$)#8z50kDV(HUNك4"0+nM-632䡏VuoQVd2fTF 8XaLhI hhekXy3tyg۶Tճi2HRRREU0@Fh3P-LS%8ybGΏ;4BΧǭ6yˉƠ%W |NMd3#,EmFB-ʱi9 mLLPdfcWsEZ@n&LD g5O=k7 LFĦ(nYt==5vr#\AGAQ3M2!mWMV>Lħ]PnfalBRom`"#%11{^є0,`%"(r :l\K5*7ez21&]Pap>P FB*N؜,ssww ]sp*hcf CR 'Q4=9< 4r.#Lp16q,h`eȴvBd(Ag%nMDCsFj4V iÇ#.6 PDžv.!S!;W9]Xy0y:$I}-},|:pF6]Y/87NK3Uw+%"#lч7g世3OKXO(șVMR=&`™dGwFpɠ `h͠t}zgYRkj[} dkET&z&>42 㥛Bũ\0ok` G>=gʄ)h.O `)2!8ʏl: Y<nP fR`1Q3"kÆVĘAP߱mk4#F'4h2#O]7rPcQca Qg@Ͱ4ieNs|BeȎOë;7ٖloRMVW d"@} { Z `T=`N+wy!0e>2A3 W~UmXy;'C @눖$PZ+<$#9\M.l"Ҏfڧ նoP%3Z7}h1$0  ҧ@G Vv0o;,GvW2 ڲ`" Rs U oѿsb[["~vV H#M#ui,j4ڸ@eb&kJP u׏ܧN4D|isIwrma^wbנgѥ{%S2[y= , 'M9u@(7;T!-"X4Hqh!JQ&Ȃ:)v;ph1cb)E2x$:8uE Q =Gbp d~\<`&"-dC({h( vLS0oP1bڨ (GWWQP63zCϨd uĕFv<6 8cmk S1n_ zeZMbORnw3G_FHEÔe(&ogwh4~=ڙ蝃<b #W,ŋ\2o{ V$.萓hÈ$mo5YA|'?WF ɘD0 5D((:L'>#;<Bj($O@% B H@fbDEZĘRPJ(`% %1@R,XI~"hE"j"bE% " bI*ĭQCY;18sNBa֑6([MT a"uv0}z"_?ǘ2tܞZQC˔QƅH^H_܃HT( )a^0@,7YY&n"HML11KD{% zHf"_~dh~63r)`7xoA8^hLC u]|{81:bBP: 4,{nQJyXpCx+۾OE!G#J)BRBx};5w ĜaBX1&qhjǯx5#߽s@M)8|]S7S|CҔٛop1LbZyo~sNZMyjgǰmuѓ 2-5PN:H`b Gw.;Mly Lh: W5h͝νѓ}fPLsd.S: OߙNfwLnB}k*>FS+Z|@ %O#)8r,u9dEIn3č _"CQ*폒C*!ٶ H3؏8ޘegr{ɷsG:Zw<.+cNi]BBXv|&bv)_il)B ̑ 2K?ż<`1!aw`֣7>_- bM+(TY*dE8@w&^0?g<s3$t85>Y!)P d !u@;DJyUZA9*sCD>\d(Die9)*~TܣGeS܂r@8(8L<w?a>!T&D>k)1W-֞SCFף^k&!h㴘93)0_#Ԏުq75v9MxlBh0%(Dhҫi,Y dE% CA0ĕ$SbQZUB'VWC)?DGŇ "'I0ϴHIm^!j~L)`ga[F4DS 7 7PûI {'_įE`9&5kcއO9}>搡̡&l>3w.?6zOO@zk{$=cph-- C(S0 *qzFA:0bt(]? $FZ P`EF56ѶF=žI&8@(PެTDxm|h!^'# 'E ;`9'ƀ앪S؎`?:q}rK漶 wmnA7ubv^~Q)4ƀ}pyd& @Fh&'@iW!)`wgjJ`S0UG}S!lӒautqZ+lM=*"N9!l"<6͘X(R9݀ "Q) @a Izr-ur~lЩQR{ i!vz 6 Rр8@sC6'Cyem>3BmHM:Hq JOG fV­+CT$%aT0 NB3T#CEKg $"ip"}P0t̅E :L iܜ60>jXy7{O:㱽%  yC A27mi9~ӳ1 IZNG.]gtYՐC:ᶗ=y"p፜<>&dЌE׾fJ,9CXit;D>DH^~N-Ee*ݫ&#`4*4ءThA `b%JZORBS>:h#nI!% :4U! Ճd v?[!41H@׈ E<}CLUVl`׌c34G!!!kBK=-ɱ6-!/20tbBO,MAp~ .A66*DXm1O pIՂ)b5aM`qsqN▓Ӱ|Z[4&鲬 Qa7r&I;4Q>.ZN5'^a;َ*XVq|KD&/yZv0rBhV;n1TNZoi1Њk L2E1(|02ïatCbe]0-yN/13MrJS3YvŊ U]v_*k9|DgII)sُ!/6Hn2?c`谛:fm/3݆C 5Td&SYÁ,su1Ob 1".2̆¸Ad}.\C_<3tedDua @ (9:OB2a\ꗭN?Fl'd=oS Y6]\tؔ(!6Wlbrb6o4|1,$YJI.hMgQ9)*>4őVj1èV!PiۏA:V4Q;JCΎ"2ψKuNA |ޥP$:``S9{wkGZQ  H6ؘ3DM9O0HEJ:.C 8.>LBiEB%$ByM~C% տgBєeƣd@> Ti%A )BZ@̠PCH1II1E%0L̥!fJBQt`@He*:Ok.D@Hx/JB"P1{T SG (->T$AACcl?!x2`\/q_SB1%4 ry}x.x/: }4z!DT͌'IG (C*`s7CH37wԞftY"Gnۃ[;8bIJ0Ga Ɉ$24G:UqcHD: LGQPXA {ݎx%'R:HJ#dB%|}B4/#BPN752opДɘ0v\Mp%zzm&&T& b5P0A>!a(S:uCCdXxA&SAG1<;|XTLS!UM D4!IAJqO 2񇯝fMXLg?70~?w_ٱlh4Z,4ꭎs1TƹȉBf]%5c9M5b9;?I:!% {P~hTg:i~A23$>l@L DbyhI?*SSodz*["Ɇ5WHh"A_7z NEU]&fc<ᙀspxWGST g=]&?zHQ^\-K$Eןe5f]J;8/X{ 0\f<&)2aiԅ4ZoLMe7BVt0J龜$PʑhJ>,++gD*OPޟ&TB:xEh1Gy|/S&EUկ/Ym=k{v*bI;Rk@8ܳY%찏M0BS&{='`8k DSCu]jHKypK2+.DAM8qx鉓pۂw$)Bi}^pz8qD&0t7\sjYƴ| ALP?aT`HMbhP zS^4'8rnaUF(DJ5Ql4ҏ;A=$&fPIy<['.!@$Y>|W/3K Y۽#p\%IЅG0vǞ6n:Lc89F|zDY\s"1}h߳e?l #]1~f#AGwrXιL;]ڔ?pO+܀[=t58G=ȴ **HH:\J#-FNA&&o5E"ۂJ!$caͭM! cTV#F1#P G|˂ӁZI( P۝߉8y }|V3<&i^/t(39 G1*R"A~5jP*Ed@͌m2# Jn,&bAr4YyS@BM헱Y1S%J0m|<Mދ#f9>%G >vpp?77o 'eܕ3O,T5 8}$uVC\*&Y., s[ YdxP隶@^{y_vSHX܎ga.N7N r}m&VhcAOdll7WD!7 +B`pJ&:'"Crc#H pH@ irk؇p|~Z$ `LI)"u$Me?U_6lG?Ukc]AJx FAsя쾿3y  ?;Ûl÷$* P ID'7ymӼ ݉B"ɬamnf,-֔13T1b9 v::eVP;npN3QJ{ij<}M<7keZ 0|/{۹V#7CJ瞹.z"XgTyg ߒo"*u faBVJCl(>J fO:(g9ah$_iDAD:;z 1??P9!:PRz0#T=bk!ǼEc @DGfӴ ,4HzB9n'5H_CX+"X5\k : ^ݙAؑ=*d>U"l#R1 (Ȫc"`$EFAI:=Ѓ@(yc;SF\ $ap ' eGsЎ0-1PDЃ=`R k/VOqBtCycCa :مXm|&RH =h6}}B"O.gGP𜨤 B$|OC3z."x3Uϧ|J9*Z< 5IBr60r®!!Uڑ$QĢ(ht/;oltR !&Gĝ9ohls옯>/|>̣Uhmplef{ں^oą9/OLW23DcC=Ȣ(|(8\*aedsSL&"F`; YGEOpL}m #K eOlA9PUПSiGiCA }L7@{ä口5sr6iwgOmgɽ~cfpe](vd7{$d(0χZUe˓yac52IsY뢓x:Iagijy-X( ł?, /߳5:Qf]螿4zrcWCI($XXx"׋]^[DY+9'fHo;Cs|$˜T\ JiA(WY r.S[;ݸGCÑ>$h '"-iTzmxF,OF655Mu5f'lAE`H Ej *s!+sp9BP eǹ3m^G]{i|Eɟ )-Ly)$j*D)+55Tg`՜W1x6ɵx<7 fUclE@Uv TkK¬fw8h*!󲔔TC44HHP$gqD@ҭ#BL֘bWQw+B0ZD*x" x=a5z\#zz0i[x,М87i: jF9h8kn疮/0C#eY cD#<*\=sώƘ`GvFr 350,(s9GRdQ4?;ˇ>bMnaGx, s!؝!0?MExDDFj.ײ{}IykD??٬g~YOҚ TE^ݺU3Ir@D] 8f`Q]qa^ilɻXz]ۻyU5;Uf~~T8qGL]xp/3[Ҋnt| `A$4%Þ92.71T?WY I1(hoz?=-꽵13LO?+*AIU A^SIG]\nY? Ѵd6fY1BMj4m2ut hj`xX--Ե0i!!jFeH1-MK+t(ݔraH ق 56H Q?_) h :t߃$|zni798@[W̘9fM PmAE͊ ӴQw&9938g0D%Dͪ")ڃA̙+J-S B\cZ*v8<1 X|ߖ8Plh)5.ݶ*.xC* YS/k8o(v;EM >&ݔL=Xi& /a<[AL˱ƇoE dA=y~P2lQbY,\̥㝞XLh}Ãw ;pkt'm6Nkif֚ZbETJP-/\^U YnI $!1lm*&ٶA>u L\bXŖ]qD3fs]O&룺nĴ3g$ݥx(f!2tN3F %5m*w+M0P8S]d/ZutS75n-|8@F.I @qzΫ+dGFn^L3}4Z9vZF3,66@5d5цöaZkR;< *jhGP @Q) FbﳧL_+{l((jr׮.)42um0m%s{g ;I1~ץU N`(aݦ4ԧ @" B|~ǭ&لLm4/8hM_’g^ >s}CA8yk=Y\04{'NPTQ !h=ʂVh UmI YMRmLRZzͿCx6 |ߓH\@5U8 6#!~5$ud/dP}gE?`z8IܷH́S+q y&NZu$ҺO%9R3"f$ALj1iC7sA@%/J%( P |z{{y?u 6 Gr)OI# `V1=n")\mwPsMFBДzm+.~Qм#V_\P0yג?d! @ҔDp"(U0E  ",)BHC K@ #y{fv41zL(q\ٟlS5,F w4ܪu`n?nC p_0}\ {hM!ld(o> 2 O7ʣլi*%\fB#bo8TqfKWV(#?W"oF%W⥌1Lrq HaM+Zj= *Ai41~oy텞Es, O%Nw `vT5;w4ЎZa{ͧ.p AseH9&pzNjBD>g?NWé5ķ?=dԟ#ZIh#0 p&.%Z !yɈ|1\iDHA^769ܘԪq @jJb +Hq6| *, *($*aYBZ.t&FNt~#!phMV݇ ]]حHqK@A^$PeTcFH|{08P0gǕ2LiֈHц278f|`w<17кf1 ~ 1&ya)`e;,W!h,҃r1J;-Q֘1PcB}0]B>c&:N0 uىHwI|,34>#Fn>{Yfރ/3QR5^?0}ccbJ@Y1Ai>a@R K0Ξ1ȉ>d001[Q"Lgc9 ' .9:ȻC OMbd2a'j 'd(jHGIG s99Ь\~R9 pp;z@!;q "FoяgbiA BC Kd̺QJM +f-UK f#67O)0eh"(W0e" FhCqP @6@$8B!DDQQt4<>vnT  @h(⛑8t8._( AR l_GH%p]F+\d^"^=˻'q?Io0 +K!nìH},;ėzM(;weK*@v8.`&% O(lDCB4O|ME#um>X(Xd"T ]iDR9Жꦙ^)(T0.ta'7g$i}{Әb&F_h@Q?1TۯYts/@"b.29=xp@M%14!DE5I/hB $F*J)bB &(&))&H SDIJEQPPT3THHTBP@Cd-?EZ ԝ&BASFL\..nFK`I|$8LN)9 0G@aHp᠋mӻd8ݹle'2QI;So\A`ɀNaRm ד{[C9Pqꜧ7ʡ #/ʍ&BL BP-HD/S~(liQ-o##q߄x{zL_77_3&So uona%zj ŸYaʉ!29V ӹ0s i.mC"ws垉#׈UO<5S~(+gםV4?#2H=pP()tQ(aGs;kcLiLo ->[}'pGؖ_!` Ȁv9 E0⼅+BD[*jLB釚SZщ ~ȕ˟#nIxE։}P@7H`-{ 蟪_TN?`v> BshJ\ƲC4 ԣ zȐYVB. Av!8z2q}co GKN9T"nv!^Ha l(Kb] `A IH 4[{T]cnogWŤ`OK:i F>/?4WSf! 8jI|z 3;˜'dRa;Rn='Yb# \(0ŵxcprMxsghb \6}=rʎ6 /O FkL?׷ϩлXɁ uϖyU Ŧ~ڦzگ/NmnĶvP>pF; :r 471RwuQfO057X PǝKf@L 8 a:8X24Ѷ`4ĵ,Pl|wxܚ  Ld J!`+ް~&\J~jN??WJP$إ5C%2XJB'N=RAͦx{jHFpS5l\Y>̊'6wv8y 7 , gLThwv'85MFd5ES΃ͺW98깜U7<2-Wǩl^΃\rT0M/MqzU4 ]^ϓ̖|0®J9lQxfX\jҳiݫNzǟN:6>S@T;CvGMˌ2;w5 ]W7q{-.qQx1e# UQyS$ٙx,AK¡dQ0XrYdDr3?(>Sr\Y-f)O0ܒ"dm]tje]9+:)Vkb+m3% 殸X>S_kK8)mIBG#Z4{Z .3[j3!A'+ڢ&u6@oupTm:0bҚپ|ݻ6zzy֫DVsIXM"pw93IqUWcLbC=P/veCgQ:3 4F]b~_/xx$7s¸s#'O)23$ܐ betˣKJ1y j.I-=|o8pir&`C-|q{ΕoψӲ׃pD^ 3OIqm%BHPvzah/:ڝq=7ORea'LJě.,}|!Z\@&_Z%LÒ ltQE &f:Y/̙iI3 Ӱf!_厌N$rX/X:`@+!2aK6Mrkh`CFk0EgEԱF(*HpNpFy$>{Va-sAʼ;x/P p&"x`K$y햎tp7EAKxoglҾ `9IÎ22chxN']od -A +źD&E|sC]tpw#JY$i3 3:li( L8L5,S;QփgUi+ǫN F7xu1ߴayEWbMVZ[9 fK#gybLrX|rWPy3K^39Vx\kȔ)OX4xlBŭ}wub#gOBc8\ #e/G/o֌͐lVU%HR"#tak#8 ;15زVLs"f% ƃB?؆ eo.yhscXa}ќup;gތ|(ڢ>=n}bc# gDx%gQ }׏È.pם[9ܦqN BC{|PP`XyLqgV&^&2lb"ӄub@R0 I'".I4 `Pn#L< .% Ƀʾiٞ|<x" sxә㍮u43iW3[fa +bL$(HĽӿ,N[H`dFΙz|/|샘cmE1٭aͻ8 W'oX-m,]^,ǰ/jZO/NXžbnEvx b9c23֐ 2B%6DDeJ.5łq/"IyDKL1ܒo T`%$AaǠ7vPPOS PMv~qD+~ff%5x98ƣ8˻(e$$jjShTCf"͓kB!"fD{B<(?nZD{:Zb *a~ r\vw'M^ q%y007v1!]C}Ck$|O$ ĂC ?(<8/@G^)s6Md5D3838k*YYJ[BHmD]Cϋ'=)ESpǀcϦfƆnA۾b *?۾:ɗ)%  h?aQ^8idh_fͷ> ǃG 'X+MsPƵ#`Nba'$dp+֜1/YIKF5 먇yGu^B=}kXWԪn"3$8&Q#xΧ[RQX!sB*#ԴKR>lZ{O?ϙ feDʇT n㝖x} ( y9^3 ݥz!x~0eW;,Fqq/m9TDd[LFSQ1x\]P/jҋbP"/&U#i 5Xf3IV&Fe/Bh;nE֨w?>)vE&f^ |u`QL|.>1N*$eN\YQ@A ɜyQ9_qDڳ9qPtGP'rE"09gJWA-@ǎԜ tCHjf3Co )|ױR IT`!bQ& a& Bq*t =$IteOΘpVlU~ꢟ,J!IUHSĞ13 ;O=&Pcjm3.>b: (CΧ=G6;0ƿ7mew$0/n4әa4ES89JGpbuobh]'t`^Z#>&FR[H?CX}Ҥ8,D#<(#'9~IHb;=?3LTNٱ}zq2H|?Z>&\BȐt(9Xr0$]`ٕrbd+Hfyݽe61M3#YܤtbGZ`L`!0XHŬ*qN0wY&DڑmXoWLͅgZƞƂ3ZQTrk"(fZMQC솷w,rb;Ѷq4,CXnPlț項MY薂0y'E XIi ʶ`:6*dFHfoN`EEf#3/q E좔 !BA{)J4#G(yQ :"U(cC00(Himqu'}љ%X;:\7gwr|^M| 1Hm,.pBHv'-4G3c! +cPZhd6 f (,T)DJ$!dz8JL܀˄OImjbikɐ&FNG8[q1Uw8/qm10ؖ!׷~~}%*V3cad<Ԫ"it:EU4GлvHf䡂%|ifjh !`"wHn)k%I >|Cde`ϫ-·ddEKrra>818r'5;pBIܽLzZ. Ékm308̖a۾lyjA QN["b¶6H1 = ͝ '0M0ܴ}dr"!&BH ]…*hL~SahQ&hQ68x -Kb- 0@ji!eX%?ͽqp 6HRR&bf#`#cg1l,\у1CA^e͈޶:422&dI~`ji<䙦]Egwl 8 -uK犌0  CR1=m!64IŧC>Bqs>d ~Oɢ{#F*ϛpm$DA薵q]' <V{C,)q Q(0D\1,57c}3`Ҝp)Az9\j$ x`(1#!nmx7waF.!1Y .' xI+hf,|\b $LhXp\Qw4>~vfR8' ?82UT? `aΧs.dDž?/UXv8"PN%̽>)5$#h)k ?PPud 8 jY>_9q@WP<d;CsN@"9΀|byc#<T 4PXC:xՓ҂|3`4pB;$}Ax)^f 20$R8AҜ>faɈ~iuC>(P$@H3+3L#"w[>'IK>j/dgc}ꈌcE!=U1Tp4`n1\a}^E\Ԙ cIH_1)o8J=nq ~A㲞_p|1^yXx3`W EC=Qu>NW#W3J]EM(5VVTک3JGCmFubr8\̞&d:~}4x3@8ΜNevd3>B(8GO. ,c;ނcQH,EyUCQi`=3b 5&O?HXT* >hJz| oICRZpaܚN?LĞ}rAU! FSw8*z޵! F k=BnzV`d!g֏XנHElVыh:A/=E3Ee2HR"Pt}{sn0nX5ʰJli1$0*q0( ] QonKHun0i r;"g:Iv^;ͱW`Fa tNa96"}֏>/5׈^6ZFYUr_=Wx/u.vb d4$'S!< -t!Z@q7w:XJkѱx؏8{cЌn8iN39ؔDn*t .<_.^$ؐE?]H}DH~uq1uA6K=?@X𚌵NDɕ1(" (0l7壧|0$wk>>t<=WI = G'X`4EҊTeQMF/LeܥU+DQQL0͊ޑX?n1Mܛ f1K z'g3vA0`P!0ܨ$[b3C e::a`~>'wB{̌a!7@o់wʺLd oHGY{*rUddL때Qz=%cI=Y"1koo!8@䇘BiҞ vC.bwգ@QLv7kys>u>DwPA`)\ r CI=DT%(ovvtu^sDT JB41DD^qM٫ E )PBD @SH1BEUą0E.DCDT-QEC$UA 3 2dmԐ DıA)WD@A4,E IHR?Q"fj!XHSMpwtɽE]f(۴!4= 87& F4.x sIjDŁ"l [\)8{ kẍ́ LF& rIIriܙZѭ[,V‘ԻDR]F+`U;R2Hc(kkoRvN(LiM!;eaX4Pf e h[3YR@ 2鵘W7TC#mxYxxq |B4LjyqasrMBGHS}x9W^cIeuOo .&Lm9%vwnf#HȺyDHOs*N,쟺Ӂm@"!x S ̒kdQ9n³h|DZy#MFqVOozdeM-;%J<7Rď}[ły+S K Z(xrf<`  vрcOC1 S!kI-|2lx 7Fet`%~($"hS')!dQT9Geڪ3G^4,'ćdچ*AG ?[2$e|N{a9.׆¬Sk\Ղpg_.I"e:hƉ)ʗu J=8~yʆ'Q=c lqØR 'W_ j3؝9·n|L 3) md8~ tCK\]%x&¾2训jT Z}!q0ĤOB$Bb0 $tj~m!O͠H4e⾍hh'u !#AW- VZӠдrG-klH։ "^ւm灲wE?@Gg8^bPys c'A9CTMCrT9u%M]ȍ/sώ[i179\B;5=w ;LEr{9__L *+xW(ݜP: ŏDg.u1h+u*wjRVVww?WΉUnq(LbC;j&5/˓3:*v焈:<ַu&:1m^,JlS.!R_0Rzœ~7&Tw@;mKaCd~e26b%4$WpN2%KRM<ŧJh1(88WVWUE&`ÃIʢ85vlbKU$*6|:Nk5CVXd;{S*[(FSoTdM0HGnf&i6H75Bq ,`%6>EllwWpFeld{FNMzav`7HbN6uӳ ;i h\q)03YPS L|^1b.Kp4`bpCK񕦕U0Zw("f:bW1]h:xm!`8$xt(ո]jJE)EXsVLr3!1ŻL(Y"xQEq3D7fxDqLc%O9i7T G wAYfO mXam1RT?)gOB\<'vj=nF.+:Ϝw$nSvO0e B":I3RҨxW8!PaB9X;j qlsP9NpIy5Q5d&aޙH>$ibh74T\NRr;=\-4 Ld訜$&bѼrhrwPFif%IqwqK%NӉó` -F"6HBmYH'CD33d3=ay*TӴ4 H&&xöY9j*6>݂9؈:@^jELU`ʶ%e@e6m_0,Ak݉;sEB7+u8ŧûf|2"QRmr1>Nnx3vHlo81CVZYN츎4o0cyOJۋ&26OZfD{(s)C$  DŔ@X3f⳥Tŏ\GᩧSg'hAƠP/f:lW"E'磳qY8M8^Al+PDnc ЖsÑc|Lͽ}VuS׌tgnsX'7`,暃hew:M5C%@Kon|۵ӪOm%bxF#>49r ˴AJΰ'H* *8A?:݄E)3nzSLs-5uIS]@hus6i"hZ>t@q7X ZfQ5 rAqڍ+j--$[*_d[LQin e3%Bb-\.*X>S팞'oBb2;.5 /*&P9ыo>rmqBA0,SA~SF40_4>5r A*PVF l5޳ w!f%`US85C2d .f*bgq qpdɘo6:28CEL7qPpu90uUfNzW38tBGcL.8BAeӂ+EcPq\648\\5 m ILE)}@'OdF8}ʯ Gm\S3Xl(aؗ1yɗf a|y\5'QqFrY7d6zr)&^$gHbi\9,boc-ޛ E7$DL&0ڃ7I-Mi4`65iNG ]7Z\Rbw0SeK*!7` .#cSd$p^qvKLKيa)eL0M8.E̗Vhzda;Ĥd@(֖9㍶*fc:bf$o ӈhu:u:U 5zngXo΢6;>S^VQCZ#2RLdLɍj0V<KuZT.aٷ9qe $CxXhwn.!IJ}oZr:Q|LX/hIx8;AI67 sF֢jDٗ0SBknN2hfo6Zn4n3v>An^b 9#ࢲvùbϣbpem\3L۸Z嵦I-&ݾ W湨T$'G%7 ^)ݏk]qud=.dIAOgL.;v+Y~׺8k}\L8kMTzGM͸yuC1`*T(~ Rꌬ2p(@[ͺb̬YnZ(hh ~;$i5 $rIlwWA#BggFI ᔲX֋`n-mq'=Han5$ vPgP;I59id6'G&џf2q! Sc 3>8wV'$<~^wLlMѨj`koTwׇMnRQm"L1Ljq8KqX$:u<@ZY״*!%ZG.wW~؅҉.=:,#B*0i&d~+MXD2kD\O!8ǁ눨&8r|xT)hЈ2;i$g@#AyHE voGۖD2% -㙇x󺇘nOf4d-ޜq$)e h02* q~`Gb'A_Jf0n o@nݱ8QYH2h^;ĖиƬ."gL$ٶNطf7tCtnh3$Ԛ6ʋhSΞE%;&鹸 J,xN:XE)һLC&)N2+DrQEw *հ$6(y`Y(} Fl$"6q=DDr9mԁ'k,L YEP8d.ÎQa6;t;8xdy(B@ \LHHZy ( P#̉Vc" ~'F'eKjs͎%z𤈌`JEcbA$|~!wأ%!::HO؃<#G㣖+K@ Cx/$n3.G)O&or+ H TPP4Q&ɚ7sxQX)g~s7T *boM|AI%)"dAy;iml#AEI^kXtw|]19u|7u ?ջdc9`'STE(#K"MQZnnvQ*iЉ_~ ~ϴ}[AqzHfB ޚ D_pf Nu']q=cRhѶJư=@l JS1)^s 9aZUiA$y2 M1eV֌ 4775YJڍz ZAXV6,lhNsQyӇlf1 tUۙ5&ky)$C Jޭ,\Rh@ejS.wjqՔTQ rte/8jz 9TjgT!/A:u"`J'pqÌc}N<5-t͠]#m"jrF,SjJr(e&-+bޮp))ڦ[WV)b'Cīe*ʼ>1xNYQ{&h5& #X ?b ,e;FMflw4REQ5;I֞,;YڒH6>T[:v8KÄ}Cm9B /Sc~LuF1I$n$ J!`i oE8o':p]>}UvPj\`,d5 el<)h9'K_EE`:+|Opp`غD8U#1q G!iE`y Xy*cK\qo YBWb!Գ{22XSFTUc8`$4!gtC6 KS w}u>xo=vb&QLT;(HvpK-! W7Rm2NJQ\{TAgf}~Bo.!I@mQAF[c}ĵs}Qz1UFL5 QFcD;? E@^va<ؔV/-#Hi#Ha}?p9'ssjk)DjmeCY%>>8l>AB06r(.w.6ک n\W9V4ΑƑ?3A-kIQaßƎ~`&>/ >38qSO3yfwuM!2vSV}|hi7SjdA-kJq #*c#G~vMDRlx qĸ Ð=5 T:G+NIr19^\ c&@Xd8c0 I @ñ%5:;YÉc 5RfjE( $#(4)I>{+>b1Q414hZ O2JЏD1t(HY {[BTEY: Qc9zݎon } _F,hsB-9УmD3% b`ݠ}f`v@rint'd4P45t@/ BPH'68HB~6V4 [atP|>k(Ev <>Gx{թ. ,1w)|#8#yJ^ẏ;SerJ(z]HOQ1X c1(sRE}lHG[a@mC+ kLwݐ?Hw\_#vh S gAP2Y (n3ߎ6 PgP9hG*8܌-!?P3ȓi +FEn T4ĂNl}^X}p0x9Fa G2N\CfWA-Q{(0 >t0i} /=D(xsE`8r Shɇ)j%"XD'w!ūH^"v~s@4|O?EگMzMFbt>A g|Û,J6.nG4aeHZ?ϲW96ܬTJcZJ *C%/EK|7H_1Ĥȗy(` Ę\cB,$1 ю [ByAJVx%ëiE4n8J!ҝ u!r ɻ;& L%PS J TnHyd=ӄ}~ó-(/a G'C\Q1f(*ʇRQS \ jѾ5c05> V15gNlnqµ׈^s:\1MNۛi1U뼴c0^mZ0kfZxxkD#J=uT/:-8o'-$΍IC闎ePm)IP 2l k)m ҬL 䋛l.2%/0ކi=M@wַ!b;)#`^TSLn额[h/]QT~vT6&#L1 |HuyFjQ3C"xeʼn" | `Cz"PLJgu'J+㣶`> %SDD'T7IV>0vc=~z"3(#,z=,5G:u+z >'O>ӴS'Lf5ZiO#D/p9AQ-(Ш1 UD*`$;DN~[oQ8B|UL{D_ڀ|qߎi}>a|/q_Eu"NX$LA@l!-d(C M O?k/iԲVy}?C u IAz0!JT[bm4X&?wXZ #"HK Ζevx:< o@o~ Gw$N'%9%\́4nw(x&u؎^eH*QM%:| |.NI 7!SH:Z{@^jp*`~E4ԛ{ =x}ŏT6D? &?$-H L<>zGRM0h(xFO) 04ACqvY7r^8_gB},x,ElHq AӉte-#h6; :p:`6O)nTT1+2.P6)"딎4phçI'kXiϼ4[Y؁\>^_XAACIAu OPwqM84H~Ča$Yo{OĿ㈟'> `?65[Xgڻ.ΠD9@JT;:"$K"?'t)s"&P ((( t !$fi&Ph$ND%71BWGtCOKX%j%!d Ӎ<&KI6tCg)8&LIJ HGtpY !)w|䴞((%D9A6U%OTp=bw < IB$g8Itdמ2,͂F`>fX ;r㍁mahb=*xw`p}&{n,ׁӁz3~vgL/6][\}J=']RQdTQDVڋX()*Jj )*H*(I_G_fo(ޜ z'_4BZ(@SQݯs'xeY(T0G}Bf9r-:qGZPD(P;-,0b-yD8q!(=k(NKU_?8 ;KݤR q6eH+Fc xGzʒ!2K͓0o=clc$DE TZPP?rˠ?QrJSb7Jݼh"&JO?n',`8"ý vhǑu lQB)*2XW&fUF#i[ܚ#|W IAŠPIP/Ihw>.TW'MW͋ `61=B D;e9tR"Lҍ(PP0,Xևb*JD!?OŎ-؜TqQAqqf~;A &/&Q90%ĥ^lU:@AG&W 7sN[|9d`6bHs@&y)!aSPD@? ܵ>f{Î7`;0ǧd?P.G>MIzq5 ZUBB-W]w]y.aЅk=t\ڀ¨Z2r栲2^ %|H4F#8_#\ &|R$v5J? lMT{nybW{aPA%?iD v"gKKkF55  r_R{6p`0Xx~M3ƚ-Ѝ|u5GE K:9oVrHDNÈy[< 3Jm#IGR]ί["^$BQ* [;e=KA, I@Im2&*|y0a{hğY ?Vч2qq{0kd. kcM&)6Qs^8,I`kP8ה33DlV:^sp)>6 mIƪXTHcd4#UbFX!iH pa='#MJ˔EĚfdM " t9/|#}߱/INշd?ӏQazb312Bϙ1BB '0=k1~BLN]|=U0 |/lr|ab=}r)e2BM0׮c&\2$:0X]Cbk:I˰>} ߷?NN?8l\vun(h[a&.b?49y WGo:un!z|zAH'!t F̚q~xq4.!%UI3"@)ݻm.I<8"pP! Dde,ABBK(* SrC'Ϯlv.(Ri)v|-IM3GEHDd"#6yِ: 0aY|f0 m: vMttD,JEabE:Y夳n9׿dopUQOѹQDUi0o1xQR6$ +b,rע$Ħ_Mѵl{r<+l7 OVGb kAɽmF? c _ ;w}_t-Й,+F:N]jNo2CofMi (i)&h!Ďڍ6Lbqqy'vC^Ӄp= PDLliы9ע38Ӕa>P:8e̔c:aUz/UG,N(<#+DSXerڕ`t7nU6.fZ7 po3+K?W|P +2'ikoxy9G{zE(@! TPh^aM &cѦ&aOM1nNof<.a3~2?+d6`hn>1;܂JvCIߤ#/NM6J"whj'F`R4uF@0I:Ro, m V ϧO:ۀN\rFx`BĦD us M9Zpan> op = DELETE_GLOBAL; break; } } } com_addoparg(c, op, i); } static void com_addopname(c, op, n) struct compiling *c; int op; node *n; { char *name; char buffer[1000]; /* XXX it is possible to write this code without the 1000 chars on the total length of dotted names, I just can't be bothered right now */ if (TYPE(n) == STAR) name = "*"; else if (TYPE(n) == dotted_name) { char *p = buffer; int i; name = buffer; for (i = 0; i < NCH(n); i += 2) { char *s = STR(CHILD(n, i)); if (p + strlen(s) > buffer + (sizeof buffer) - 2) { com_error(c, PyExc_MemoryError, "dotted_name too long"); name = NULL; break; } if (p != buffer) *p++ = '.'; strcpy(p, s); p = strchr(p, '\0'); } } else { REQ(n, NAME); name = STR(n); } com_addopnamestr(c, op, name); } static PyObject * parsenumber(co, s) struct compiling *co; char *s; { extern double atof Py_PROTO((const char *)); char *end; long x; double dx; #ifndef WITHOUT_COMPLEX Py_complex c; int imflag; #endif errno = 0; end = s + strlen(s) - 1; #ifndef WITHOUT_COMPLEX imflag = *end == 'j' || *end == 'J'; #endif if (*end == 'l' || *end == 'L') return PyLong_FromString(s, (char **)0, 0); if (s[0] == '0') x = (long) PyOS_strtoul(s, &end, 0); else x = PyOS_strtol(s, &end, 0); if (*end == '\0') { if (errno != 0) { com_error(co, PyExc_OverflowError, "integer literal too large"); return NULL; } return PyInt_FromLong(x); } /* XXX Huge floats may silently fail */ #ifndef WITHOUT_COMPLEX if (imflag) { c.real = 0.; PyFPE_START_PROTECT("atof", return 0) c.imag = atof(s); PyFPE_END_PROTECT(c) return PyComplex_FromCComplex(c); } else #endif { PyFPE_START_PROTECT("atof", return 0) dx = atof(s); PyFPE_END_PROTECT(dx) return PyFloat_FromDouble(dx); } } static PyObject * parsestr(s) char *s; { PyObject *v; int len; char *buf; char *p; char *end; int c; int first = *s; int quote = first; int rawmode = 0; int unicode = 0; if (isalpha(quote) || quote == '_') { if (quote == 'u' || quote == 'U') { quote = *++s; unicode = 1; } if (quote == 'r' || quote == 'R') { quote = *++s; rawmode = 1; } } if (quote != '\'' && quote != '\"') { PyErr_BadInternalCall(); return NULL; } s++; len = strlen(s); if (s[--len] != quote) { PyErr_BadInternalCall(); return NULL; } if (len >= 4 && s[0] == quote && s[1] == quote) { s += 2; len -= 2; if (s[--len] != quote || s[--len] != quote) { PyErr_BadInternalCall(); return NULL; } } if (unicode) { if (rawmode) return PyUnicode_DecodeRawUnicodeEscape( s, len, NULL); else return PyUnicode_DecodeUnicodeEscape( s, len, NULL); } else if (rawmode || strchr(s, '\\') == NULL) { return PyString_FromStringAndSize(s, len); } v = PyString_FromStringAndSize((char *)NULL, len); p = buf = PyString_AsString(v); end = s + len; while (s < end) { if (*s != '\\') { *p++ = *s++; continue; } s++; switch (*s++) { /* XXX This assumes ASCII! */ case '\n': break; case '\\': *p++ = '\\'; break; case '\'': *p++ = '\''; break; case '\"': *p++ = '\"'; break; case 'b': *p++ = '\b'; break; case 'f': *p++ = '\014'; break; /* FF */ case 't': *p++ = '\t'; break; case 'n': *p++ = '\n'; break; case 'r': *p++ = '\r'; break; case 'v': *p++ = '\013'; break; /* VT */ case 'a': *p++ = '\007'; break; /* BEL, not classic C */ case '0': case '1': case '2': case '3': case '4': case '5': case '6': case '7': c = s[-1] - '0'; if ('0' <= *s && *s <= '7') { c = (c<<3) + *s++ - '0'; if ('0' <= *s && *s <= '7') c = (c<<3) + *s++ - '0'; } *p++ = c; break; case 'x': if (isxdigit(Py_CHARMASK(*s))) { unsigned int x = 0; do { c = Py_CHARMASK(*s); s++; x = (x<<4) & ~0xF; if (isdigit(c)) x += c - '0'; else if (islower(c)) x += 10 + c - 'a'; else x += 10 + c - 'A'; } while (isxdigit(Py_CHARMASK(*s))); *p++ = x; break; } /* FALLTHROUGH */ default: *p++ = '\\'; *p++ = s[-1]; break; } } _PyString_Resize(&v, (int)(p - buf)); return v; } static PyObject * parsestrplus(n) node *n; { PyObject *v; int i; REQ(CHILD(n, 0), STRING); if ((v = parsestr(STR(CHILD(n, 0)))) != NULL) { /* String literal concatenation */ for (i = 1; i < NCH(n); i++) { PyObject *s; s = parsestr(STR(CHILD(n, i))); if (s == NULL) goto onError; if (PyString_Check(v) && PyString_Check(s)) { PyString_ConcatAndDel(&v, s); if (v == NULL) goto onError; } else { PyObject *temp; temp = PyUnicode_Concat(v, s); Py_DECREF(s); if (temp == NULL) goto onError; Py_DECREF(v); v = temp; } } } return v; onError: Py_XDECREF(v); return NULL; } static void com_list_constructor(c, n) struct compiling *c; node *n; { int len; int i; if (TYPE(n) != testlist) REQ(n, exprlist); /* exprlist: expr (',' expr)* [',']; likewise for testlist */ len = (NCH(n) + 1) / 2; for (i = 0; i < NCH(n); i += 2) com_node(c, CHILD(n, i)); com_addoparg(c, BUILD_LIST, len); com_pop(c, len-1); } static void com_dictmaker(c, n) struct compiling *c; node *n; { int i; /* dictmaker: test ':' test (',' test ':' value)* [','] */ for (i = 0; i+2 < NCH(n); i += 4) { /* We must arrange things just right for STORE_SUBSCR. It wants the stack to look like (value) (dict) (key) */ com_addbyte(c, DUP_TOP); com_push(c, 1); com_node(c, CHILD(n, i+2)); /* value */ com_addbyte(c, ROT_TWO); com_node(c, CHILD(n, i)); /* key */ com_addbyte(c, STORE_SUBSCR); com_pop(c, 3); } } static void com_atom(c, n) struct compiling *c; node *n; { node *ch; PyObject *v; int i; REQ(n, atom); ch = CHILD(n, 0); switch (TYPE(ch)) { case LPAR: if (TYPE(CHILD(n, 1)) == RPAR) { com_addoparg(c, BUILD_TUPLE, 0); com_push(c, 1); } else com_node(c, CHILD(n, 1)); break; case LSQB: if (TYPE(CHILD(n, 1)) == RSQB) { com_addoparg(c, BUILD_LIST, 0); com_push(c, 1); } else com_list_constructor(c, CHILD(n, 1)); break; case LBRACE: /* '{' [dictmaker] '}' */ com_addoparg(c, BUILD_MAP, 0); com_push(c, 1); if (TYPE(CHILD(n, 1)) != RBRACE) com_dictmaker(c, CHILD(n, 1)); break; case BACKQUOTE: com_node(c, CHILD(n, 1)); com_addbyte(c, UNARY_CONVERT); break; case NUMBER: if ((v = parsenumber(c, STR(ch))) == NULL) { i = 255; } else { i = com_addconst(c, v); Py_DECREF(v); } com_addoparg(c, LOAD_CONST, i); com_push(c, 1); break; case STRING: v = parsestrplus(n); if (v == NULL) { c->c_errors++; i = 255; } else { i = com_addconst(c, v); Py_DECREF(v); } com_addoparg(c, LOAD_CONST, i); com_push(c, 1); break; case NAME: com_addopname(c, LOAD_NAME, ch); com_push(c, 1); break; default: /* XXX fprintf(stderr, "node type %d\n", TYPE(ch)); */ com_error(c, PyExc_SystemError, "com_atom: unexpected node type"); } } static void com_slice(c, n, op) struct compiling *c; node *n; int op; { if (NCH(n) == 1) { com_addbyte(c, op); } else if (NCH(n) == 2) { if (TYPE(CHILD(n, 0)) != COLON) { com_node(c, CHILD(n, 0)); com_addbyte(c, op+1); } else { com_node(c, CHILD(n, 1)); com_addbyte(c, op+2); } com_pop(c, 1); } else { com_node(c, CHILD(n, 0)); com_node(c, CHILD(n, 2)); com_addbyte(c, op+3); com_pop(c, 2); } } static void com_argument(c, n, pkeywords) struct compiling *c; node *n; /* argument */ PyObject **pkeywords; { node *m; REQ(n, argument); /* [test '='] test; really [keyword '='] test */ if (NCH(n) == 1) { if (*pkeywords != NULL) { com_error(c, PyExc_SyntaxError, "non-keyword arg after keyword arg"); } else { com_node(c, CHILD(n, 0)); } return; } m = n; do { m = CHILD(m, 0); } while (NCH(m) == 1); if (TYPE(m) != NAME) { com_error(c, PyExc_SyntaxError, "keyword can't be an expression"); } else { PyObject *v = PyString_InternFromString(STR(m)); if (v != NULL && *pkeywords == NULL) *pkeywords = PyDict_New(); if (v == NULL || *pkeywords == NULL) c->c_errors++; else { if (PyDict_GetItem(*pkeywords, v) != NULL) com_error(c, PyExc_SyntaxError, "duplicate keyword argument"); else if (PyDict_SetItem(*pkeywords, v, v) != 0) c->c_errors++; com_addoparg(c, LOAD_CONST, com_addconst(c, v)); com_push(c, 1); Py_DECREF(v); } } com_node(c, CHILD(n, 2)); } static void com_call_function(c, n) struct compiling *c; node *n; /* EITHER arglist OR ')' */ { if (TYPE(n) == RPAR) { com_addoparg(c, CALL_FUNCTION, 0); } else { PyObject *keywords = NULL; int i, na, nk; int lineno = n->n_lineno; int star_flag = 0; int starstar_flag = 0; int opcode; REQ(n, arglist); na = 0; nk = 0; for (i = 0; i < NCH(n); i += 2) { node *ch = CHILD(n, i); if (TYPE(ch) == STAR || TYPE(ch) == DOUBLESTAR) break; if (ch->n_lineno != lineno) { lineno = ch->n_lineno; com_addoparg(c, SET_LINENO, lineno); } com_argument(c, ch, &keywords); if (keywords == NULL) na++; else nk++; } Py_XDECREF(keywords); while (i < NCH(n)) { node *tok = CHILD(n, i); node *ch = CHILD(n, i+1); i += 3; switch (TYPE(tok)) { case STAR: star_flag = 1; break; case DOUBLESTAR: starstar_flag = 1; break; } com_node(c, ch); } if (na > 255 || nk > 255) { com_error(c, PyExc_SyntaxError, "more than 255 arguments"); } if (star_flag || starstar_flag) opcode = CALL_FUNCTION_VAR - 1 + star_flag + (starstar_flag << 1); else opcode = CALL_FUNCTION; com_addoparg(c, opcode, na | (nk << 8)); com_pop(c, na + 2*nk + star_flag + starstar_flag); } } static void com_select_member(c, n) struct compiling *c; node *n; { com_addopname(c, LOAD_ATTR, n); } static void com_sliceobj(c, n) struct compiling *c; node *n; { int i=0; int ns=2; /* number of slice arguments */ node *ch; /* first argument */ if (TYPE(CHILD(n,i)) == COLON) { com_addoparg(c, LOAD_CONST, com_addconst(c, Py_None)); com_push(c, 1); i++; } else { com_node(c, CHILD(n,i)); i++; REQ(CHILD(n,i),COLON); i++; } /* second argument */ if (i < NCH(n) && TYPE(CHILD(n,i)) == test) { com_node(c, CHILD(n,i)); i++; } else { com_addoparg(c, LOAD_CONST, com_addconst(c, Py_None)); com_push(c, 1); } /* remaining arguments */ for (; i < NCH(n); i++) { ns++; ch=CHILD(n,i); REQ(ch, sliceop); if (NCH(ch) == 1) { /* right argument of ':' missing */ com_addoparg(c, LOAD_CONST, com_addconst(c, Py_None)); com_push(c, 1); } else com_node(c, CHILD(ch,1)); } com_addoparg(c, BUILD_SLICE, ns); com_pop(c, 1 + (ns == 3)); } static void com_subscript(c, n) struct compiling *c; node *n; { node *ch; REQ(n, subscript); ch = CHILD(n,0); /* check for rubber index */ if (TYPE(ch) == DOT && TYPE(CHILD(n,1)) == DOT) { com_addoparg(c, LOAD_CONST, com_addconst(c, Py_Ellipsis)); com_push(c, 1); } else { /* check for slice */ if ((TYPE(ch) == COLON || NCH(n) > 1)) com_sliceobj(c, n); else { REQ(ch, test); com_node(c, ch); } } } static void com_subscriptlist(c, n, assigning) struct compiling *c; node *n; int assigning; { int i, op; REQ(n, subscriptlist); /* Check to make backward compatible slice behavior for '[i:j]' */ if (NCH(n) == 1) { node *sub = CHILD(n, 0); /* subscript */ /* Make it is a simple slice. Should have exactly one colon. */ if ((TYPE(CHILD(sub, 0)) == COLON || (NCH(sub) > 1 && TYPE(CHILD(sub, 1)) == COLON)) && (TYPE(CHILD(sub,NCH(sub)-1)) != sliceop)) { if (assigning == OP_APPLY) op = SLICE; else op = ((assigning == OP_ASSIGN) ? STORE_SLICE : DELETE_SLICE); com_slice(c, sub, op); if (op == STORE_SLICE) com_pop(c, 2); else if (op == DELETE_SLICE) com_pop(c, 1); return; } } /* Else normal subscriptlist. Compile each subscript. */ for (i = 0; i < NCH(n); i += 2) com_subscript(c, CHILD(n, i)); /* Put multiple subscripts into a tuple */ if (NCH(n) > 1) { i = (NCH(n)+1) / 2; com_addoparg(c, BUILD_TUPLE, i); com_pop(c, i-1); } if (assigning == OP_APPLY) { op = BINARY_SUBSCR; i = 1; } else if (assigning == OP_ASSIGN) { op = STORE_SUBSCR; i = 3; } else { op = DELETE_SUBSCR; i = 2; } com_addbyte(c, op); com_pop(c, i); } static void com_apply_trailer(c, n) struct compiling *c; node *n; { REQ(n, trailer); switch (TYPE(CHILD(n, 0))) { case LPAR: com_call_function(c, CHILD(n, 1)); break; case DOT: com_select_member(c, CHILD(n, 1)); break; case LSQB: com_subscriptlist(c, CHILD(n, 1), OP_APPLY); break; default: com_error(c, PyExc_SystemError, "com_apply_trailer: unknown trailer type"); } } static void com_power(c, n) struct compiling *c; node *n; { int i; REQ(n, power); com_atom(c, CHILD(n, 0)); for (i = 1; i < NCH(n); i++) { if (TYPE(CHILD(n, i)) == DOUBLESTAR) { com_factor(c, CHILD(n, i+1)); com_addbyte(c, BINARY_POWER); com_pop(c, 1); break; } else com_apply_trailer(c, CHILD(n, i)); } } static void com_factor(c, n) struct compiling *c; node *n; { REQ(n, factor); if (TYPE(CHILD(n, 0)) == PLUS) { com_factor(c, CHILD(n, 1)); com_addbyte(c, UNARY_POSITIVE); } else if (TYPE(CHILD(n, 0)) == MINUS) { com_factor(c, CHILD(n, 1)); com_addbyte(c, UNARY_NEGATIVE); } else if (TYPE(CHILD(n, 0)) == TILDE) { com_factor(c, CHILD(n, 1)); com_addbyte(c, UNARY_INVERT); } else { com_power(c, CHILD(n, 0)); } } static void com_term(c, n) struct compiling *c; node *n; { int i; int op; REQ(n, term); com_factor(c, CHILD(n, 0)); for (i = 2; i < NCH(n); i += 2) { com_factor(c, CHILD(n, i)); switch (TYPE(CHILD(n, i-1))) { case STAR: op = BINARY_MULTIPLY; break; case SLASH: op = BINARY_DIVIDE; break; case PERCENT: op = BINARY_MODULO; break; default: com_error(c, PyExc_SystemError, "com_term: operator not *, / or %"); op = 255; } com_addbyte(c, op); com_pop(c, 1); } } static void com_arith_expr(c, n) struct compiling *c; node *n; { int i; int op; REQ(n, arith_expr); com_term(c, CHILD(n, 0)); for (i = 2; i < NCH(n); i += 2) { com_term(c, CHILD(n, i)); switch (TYPE(CHILD(n, i-1))) { case PLUS: op = BINARY_ADD; break; case MINUS: op = BINARY_SUBTRACT; break; default: com_error(c, PyExc_SystemError, "com_arith_expr: operator not + or -"); op = 255; } com_addbyte(c, op); com_pop(c, 1); } } static void com_shift_expr(c, n) struct compiling *c; node *n; { int i; int op; REQ(n, shift_expr); com_arith_expr(c, CHILD(n, 0)); for (i = 2; i < NCH(n); i += 2) { com_arith_expr(c, CHILD(n, i)); switch (TYPE(CHILD(n, i-1))) { case LEFTSHIFT: op = BINARY_LSHIFT; break; case RIGHTSHIFT: op = BINARY_RSHIFT; break; default: com_error(c, PyExc_SystemError, "com_shift_expr: operator not << or >>"); op = 255; } com_addbyte(c, op); com_pop(c, 1); } } static void com_and_expr(c, n) struct compiling *c; node *n; { int i; int op; REQ(n, and_expr); com_shift_expr(c, CHILD(n, 0)); for (i = 2; i < NCH(n); i += 2) { com_shift_expr(c, CHILD(n, i)); if (TYPE(CHILD(n, i-1)) == AMPER) { op = BINARY_AND; } else { com_error(c, PyExc_SystemError, "com_and_expr: operator not &"); op = 255; } com_addbyte(c, op); com_pop(c, 1); } } static void com_xor_expr(c, n) struct compiling *c; node *n; { int i; int op; REQ(n, xor_expr); com_and_expr(c, CHILD(n, 0)); for (i = 2; i < NCH(n); i += 2) { com_and_expr(c, CHILD(n, i)); if (TYPE(CHILD(n, i-1)) == CIRCUMFLEX) { op = BINARY_XOR; } else { com_error(c, PyExc_SystemError, "com_xor_expr: operator not ^"); op = 255; } com_addbyte(c, op); com_pop(c, 1); } } static void com_expr(c, n) struct compiling *c; node *n; { int i; int op; REQ(n, expr); com_xor_expr(c, CHILD(n, 0)); for (i = 2; i < NCH(n); i += 2) { com_xor_expr(c, CHILD(n, i)); if (TYPE(CHILD(n, i-1)) == VBAR) { op = BINARY_OR; } else { com_error(c, PyExc_SystemError, "com_expr: expr operator not |"); op = 255; } com_addbyte(c, op); com_pop(c, 1); } } static enum cmp_op cmp_type(n) node *n; { REQ(n, comp_op); /* comp_op: '<' | '>' | '=' | '>=' | '<=' | '<>' | '!=' | '==' | 'in' | 'not' 'in' | 'is' | 'is' not' */ if (NCH(n) == 1) { n = CHILD(n, 0); switch (TYPE(n)) { case LESS: return LT; case GREATER: return GT; case EQEQUAL: /* == */ case EQUAL: return EQ; case LESSEQUAL: return LE; case GREATEREQUAL: return GE; case NOTEQUAL: return NE; /* <> or != */ case NAME: if (strcmp(STR(n), "in") == 0) return IN; if (strcmp(STR(n), "is") == 0) return IS; } } else if (NCH(n) == 2) { switch (TYPE(CHILD(n, 0))) { case NAME: if (strcmp(STR(CHILD(n, 1)), "in") == 0) return NOT_IN; if (strcmp(STR(CHILD(n, 0)), "is") == 0) return IS_NOT; } } return BAD; } static void com_comparison(c, n) struct compiling *c; node *n; { int i; enum cmp_op op; int anchor; REQ(n, comparison); /* comparison: expr (comp_op expr)* */ com_expr(c, CHILD(n, 0)); if (NCH(n) == 1) return; /**************************************************************** The following code is generated for all but the last comparison in a chain: label: on stack: opcode: jump to: a <code to load b> a, b DUP_TOP a, b, b ROT_THREE b, a, b COMPARE_OP b, 0-or-1 JUMP_IF_FALSE L1 b, 1 POP_TOP b We are now ready to repeat this sequence for the next comparison in the chain. For the last we generate: b <code to load c> b, c COMPARE_OP 0-or-1 If there were any jumps to L1 (i.e., there was more than one comparison), we generate: 0-or-1 JUMP_FORWARD L2 L1: b, 0 ROT_TWO 0, b POP_TOP 0 L2: 0-or-1 ****************************************************************/ anchor = 0; for (i = 2; i < NCH(n); i += 2) { com_expr(c, CHILD(n, i)); if (i+2 < NCH(n)) { com_addbyte(c, DUP_TOP); com_push(c, 1); com_addbyte(c, ROT_THREE); } op = cmp_type(CHILD(n, i-1)); if (op == BAD) { com_error(c, PyExc_SystemError, "com_comparison: unknown comparison op"); } com_addoparg(c, COMPARE_OP, op); com_pop(c, 1); if (i+2 < NCH(n)) { com_addfwref(c, JUMP_IF_FALSE, &anchor); com_addbyte(c, POP_TOP); com_pop(c, 1); } } if (anchor) { int anchor2 = 0; com_addfwref(c, JUMP_FORWARD, &anchor2); com_backpatch(c, anchor); com_addbyte(c, ROT_TWO); com_addbyte(c, POP_TOP); com_backpatch(c, anchor2); } } static void com_not_test(c, n) struct compiling *c; node *n; { REQ(n, not_test); /* 'not' not_test | comparison */ if (NCH(n) == 1) { com_comparison(c, CHILD(n, 0)); } else { com_not_test(c, CHILD(n, 1)); com_addbyte(c, UNARY_NOT); } } static void com_and_test(c, n) struct compiling *c; node *n; { int i; int anchor; REQ(n, and_test); /* not_test ('and' not_test)* */ anchor = 0; i = 0; for (;;) { com_not_test(c, CHILD(n, i)); if ((i += 2) >= NCH(n)) break; com_addfwref(c, JUMP_IF_FALSE, &anchor); com_addbyte(c, POP_TOP); com_pop(c, 1); } if (anchor) com_backpatch(c, anchor); } static void com_test(c, n) struct compiling *c; node *n; { REQ(n, test); /* and_test ('or' and_test)* | lambdef */ if (NCH(n) == 1 && TYPE(CHILD(n, 0)) == lambdef) { PyObject *v; int i; int ndefs = com_argdefs(c, CHILD(n, 0)); v = (PyObject *) icompile(CHILD(n, 0), c); if (v == NULL) { c->c_errors++; i = 255; } else { i = com_addconst(c, v); Py_DECREF(v); } com_addoparg(c, LOAD_CONST, i); com_push(c, 1); com_addoparg(c, MAKE_FUNCTION, ndefs); com_pop(c, ndefs); } else { int anchor = 0; int i = 0; for (;;) { com_and_test(c, CHILD(n, i)); if ((i += 2) >= NCH(n)) break; com_addfwref(c, JUMP_IF_TRUE, &anchor); com_addbyte(c, POP_TOP); com_pop(c, 1); } if (anchor) com_backpatch(c, anchor); } } static void com_list(c, n, toplevel) struct compiling *c; node *n; int toplevel; /* If nonzero, *always* build a tuple */ { /* exprlist: expr (',' expr)* [',']; likewise for testlist */ if (NCH(n) == 1 && !toplevel) { com_node(c, CHILD(n, 0)); } else { int i; int len; len = (NCH(n) + 1) / 2; for (i = 0; i < NCH(n); i += 2) com_node(c, CHILD(n, i)); com_addoparg(c, BUILD_TUPLE, len); com_pop(c, len-1); } } /* Begin of assignment compilation */ static void com_assign_name Py_PROTO((struct compiling *, node *, int)); static void com_assign Py_PROTO((struct compiling *, node *, int)); static void com_assign_attr(c, n, assigning) struct compiling *c; node *n; int assigning; { com_addopname(c, assigning ? STORE_ATTR : DELETE_ATTR, n); com_pop(c, assigning ? 2 : 1); } static void com_assign_trailer(c, n, assigning) struct compiling *c; node *n; int assigning; { REQ(n, trailer); switch (TYPE(CHILD(n, 0))) { case LPAR: /* '(' [exprlist] ')' */ com_error(c, PyExc_SyntaxError, "can't assign to function call"); break; case DOT: /* '.' NAME */ com_assign_attr(c, CHILD(n, 1), assigning); break; case LSQB: /* '[' subscriptlist ']' */ com_subscriptlist(c, CHILD(n, 1), assigning); break; default: com_error(c, PyExc_SystemError, "unknown trailer type"); } } static void com_assign_tuple(c, n, assigning) struct compiling *c; node *n; int assigning; { int i; if (TYPE(n) != testlist) REQ(n, exprlist); if (assigning) { i = (NCH(n)+1)/2; com_addoparg(c, UNPACK_TUPLE, i); com_push(c, i-1); } for (i = 0; i < NCH(n); i += 2) com_assign(c, CHILD(n, i), assigning); } static void com_assign_list(c, n, assigning) struct compiling *c; node *n; int assigning; { int i; if (assigning) { i = (NCH(n)+1)/2; com_addoparg(c, UNPACK_LIST, i); com_push(c, i-1); } for (i = 0; i < NCH(n); i += 2) com_assign(c, CHILD(n, i), assigning); } static void com_assign_name(c, n, assigning) struct compiling *c; node *n; int assigning; { REQ(n, NAME); com_addopname(c, assigning ? STORE_NAME : DELETE_NAME, n); if (assigning) com_pop(c, 1); } static void com_assign(c, n, assigning) struct compiling *c; node *n; int assigning; { /* Loop to avoid trivial recursion */ for (;;) { switch (TYPE(n)) { case exprlist: case testlist: if (NCH(n) > 1) { com_assign_tuple(c, n, assigning); return; } n = CHILD(n, 0); break; case test: case and_test: case not_test: case comparison: case expr: case xor_expr: case and_expr: case shift_expr: case arith_expr: case term: case factor: if (NCH(n) > 1) { com_error(c, PyExc_SyntaxError, "can't assign to operator"); return; } n = CHILD(n, 0); break; case power: /* atom trailer* ('**' power)* */ /* ('+'|'-'|'~') factor | atom trailer* */ if (TYPE(CHILD(n, 0)) != atom) { com_error(c, PyExc_SyntaxError, "can't assign to operator"); return; } if (NCH(n) > 1) { /* trailer or exponent present */ int i; com_node(c, CHILD(n, 0)); for (i = 1; i+1 < NCH(n); i++) { if (TYPE(CHILD(n, i)) == DOUBLESTAR) { com_error(c, PyExc_SyntaxError, "can't assign to operator"); return; } com_apply_trailer(c, CHILD(n, i)); } /* NB i is still alive */ com_assign_trailer(c, CHILD(n, i), assigning); return; } n = CHILD(n, 0); break; case atom: switch (TYPE(CHILD(n, 0))) { case LPAR: n = CHILD(n, 1); if (TYPE(n) == RPAR) { /* XXX Should allow () = () ??? */ com_error(c, PyExc_SyntaxError, "can't assign to ()"); return; } break; case LSQB: n = CHILD(n, 1); if (TYPE(n) == RSQB) { com_error(c, PyExc_SyntaxError, "can't assign to []"); return; } com_assign_list(c, n, assigning); return; case NAME: com_assign_name(c, CHILD(n, 0), assigning); return; default: com_error(c, PyExc_SyntaxError, "can't assign to literal"); return; } break; case lambdef: com_error(c, PyExc_SyntaxError, "can't assign to lambda"); return; default: /* XXX fprintf(stderr, "node type %d\n", TYPE(n)); */ com_error(c, PyExc_SystemError, "com_assign: bad node"); return; } } } /* Forward */ static node *get_rawdocstring Py_PROTO((node *)); static void com_expr_stmt(c, n) struct compiling *c; node *n; { REQ(n, expr_stmt); /* testlist ('=' testlist)* */ /* Forget it if we have just a doc string here */ if (!c->c_interactive && NCH(n) == 1 && get_rawdocstring(n) != NULL) return; com_node(c, CHILD(n, NCH(n)-1)); if (NCH(n) == 1) { if (c->c_interactive) com_addbyte(c, PRINT_EXPR); else com_addbyte(c, POP_TOP); com_pop(c, 1); } else { int i; for (i = 0; i < NCH(n)-2; i+=2) { if (i+2 < NCH(n)-2) { com_addbyte(c, DUP_TOP); com_push(c, 1); } com_assign(c, CHILD(n, i), OP_ASSIGN); } } } static void com_assert_stmt(c, n) struct compiling *c; node *n; { int a = 0, b = 0; int i; REQ(n, assert_stmt); /* 'assert' test [',' test] */ /* Generate code like for if __debug__: if not <test>: raise AssertionError [, <message>] where <message> is the second test, if present. */ if (Py_OptimizeFlag) return; com_addopnamestr(c, LOAD_GLOBAL, "__debug__"); com_push(c, 1); com_addfwref(c, JUMP_IF_FALSE, &a); com_addbyte(c, POP_TOP); com_pop(c, 1); com_node(c, CHILD(n, 1)); com_addfwref(c, JUMP_IF_TRUE, &b); com_addbyte(c, POP_TOP); com_pop(c, 1); /* Raise that exception! */ com_addopnamestr(c, LOAD_GLOBAL, "AssertionError"); com_push(c, 1); i = NCH(n)/2; /* Either 2 or 4 */ if (i > 1) com_node(c, CHILD(n, 3)); com_addoparg(c, RAISE_VARARGS, i); com_pop(c, i); /* The interpreter does not fall through */ /* All jumps converge here */ com_backpatch(c, a); com_backpatch(c, b); com_addbyte(c, POP_TOP); } static void com_print_stmt(c, n) struct compiling *c; node *n; { int i; REQ(n, print_stmt); /* 'print' (test ',')* [test] */ for (i = 1; i < NCH(n); i += 2) { com_node(c, CHILD(n, i)); com_addbyte(c, PRINT_ITEM); com_pop(c, 1); } if (TYPE(CHILD(n, NCH(n)-1)) != COMMA) com_addbyte(c, PRINT_NEWLINE); /* XXX Alternatively, LOAD_CONST '\n' and then PRINT_ITEM */ } static void com_return_stmt(c, n) struct compiling *c; node *n; { REQ(n, return_stmt); /* 'return' [testlist] */ if (!c->c_infunction) { com_error(c, PyExc_SyntaxError, "'return' outside function"); } if (NCH(n) < 2) { com_addoparg(c, LOAD_CONST, com_addconst(c, Py_None)); com_push(c, 1); } else com_node(c, CHILD(n, 1)); com_addbyte(c, RETURN_VALUE); com_pop(c, 1); } static void com_raise_stmt(c, n) struct compiling *c; node *n; { int i; REQ(n, raise_stmt); /* 'raise' [test [',' test [',' test]]] */ if (NCH(n) > 1) { com_node(c, CHILD(n, 1)); if (NCH(n) > 3) { com_node(c, CHILD(n, 3)); if (NCH(n) > 5) com_node(c, CHILD(n, 5)); } } i = NCH(n)/2; com_addoparg(c, RAISE_VARARGS, i); com_pop(c, i); } static void com_import_stmt(c, n) struct compiling *c; node *n; { int i; REQ(n, import_stmt); /* 'import' dotted_name (',' dotted_name)* | 'from' dotted_name 'import' ('*' | NAME (',' NAME)*) */ if (STR(CHILD(n, 0))[0] == 'f') { /* 'from' dotted_name 'import' ... */ REQ(CHILD(n, 1), dotted_name); com_addopname(c, IMPORT_NAME, CHILD(n, 1)); com_push(c, 1); for (i = 3; i < NCH(n); i += 2) com_addopname(c, IMPORT_FROM, CHILD(n, i)); com_addbyte(c, POP_TOP); com_pop(c, 1); } else { /* 'import' ... */ for (i = 1; i < NCH(n); i += 2) { REQ(CHILD(n, i), dotted_name); com_addopname(c, IMPORT_NAME, CHILD(n, i)); com_push(c, 1); com_addopname(c, STORE_NAME, CHILD(CHILD(n, i), 0)); com_pop(c, 1); } } } static void com_global_stmt(c, n) struct compiling *c; node *n; { int i; REQ(n, global_stmt); /* 'global' NAME (',' NAME)* */ for (i = 1; i < NCH(n); i += 2) { char *s = STR(CHILD(n, i)); #ifdef PRIVATE_NAME_MANGLING char buffer[256]; if (s != NULL && s[0] == '_' && s[1] == '_' && c->c_private != NULL && com_mangle(c, s, buffer, (int)sizeof(buffer))) s = buffer; #endif if (PyDict_GetItemString(c->c_locals, s) != NULL) { com_error(c, PyExc_SyntaxError, "name is local and global"); } else if (PyDict_SetItemString(c->c_globals, s, Py_None) != 0) c->c_errors++; } } static int com_newlocal_o(c, nameval) struct compiling *c; PyObject *nameval; { int i; PyObject *ival; if (PyList_Size(c->c_varnames) != c->c_nlocals) { /* This is usually caused by an error on a previous call */ if (c->c_errors == 0) { com_error(c, PyExc_SystemError, "mixed up var name/index"); } return 0; } ival = PyInt_FromLong(i = c->c_nlocals++); if (ival == NULL) c->c_errors++; else if (PyDict_SetItem(c->c_locals, nameval, ival) != 0) c->c_errors++; else if (PyList_Append(c->c_varnames, nameval) != 0) c->c_errors++; Py_XDECREF(ival); return i; } static int com_addlocal_o(c, nameval) struct compiling *c; PyObject *nameval; { PyObject *ival = PyDict_GetItem(c->c_locals, nameval); if (ival != NULL) return PyInt_AsLong(ival); return com_newlocal_o(c, nameval); } static int com_newlocal(c, name) struct compiling *c; char *name; { PyObject *nameval = PyString_InternFromString(name); int i; if (nameval == NULL) { c->c_errors++; return 0; } i = com_newlocal_o(c, nameval); Py_DECREF(nameval); return i; } static void com_exec_stmt(c, n) struct compiling *c; node *n; { REQ(n, exec_stmt); /* exec_stmt: 'exec' expr ['in' expr [',' expr]] */ com_node(c, CHILD(n, 1)); if (NCH(n) >= 4) com_node(c, CHILD(n, 3)); else { com_addoparg(c, LOAD_CONST, com_addconst(c, Py_None)); com_push(c, 1); } if (NCH(n) >= 6) com_node(c, CHILD(n, 5)); else { com_addbyte(c, DUP_TOP); com_push(c, 1); } com_addbyte(c, EXEC_STMT); com_pop(c, 3); } static int is_constant_false(c, n) struct compiling *c; node *n; { PyObject *v; int i; /* Label to avoid tail recursion */ next: switch (TYPE(n)) { case suite: if (NCH(n) == 1) { n = CHILD(n, 0); goto next; } /* Fall through */ case file_input: for (i = 0; i < NCH(n); i++) { node *ch = CHILD(n, i); if (TYPE(ch) == stmt) { n = ch; goto next; } } break; case stmt: case simple_stmt: case small_stmt: n = CHILD(n, 0); goto next; case expr_stmt: case testlist: case test: case and_test: case not_test: case comparison: case expr: case xor_expr: case and_expr: case shift_expr: case arith_expr: case term: case factor: case power: case atom: if (NCH(n) == 1) { n = CHILD(n, 0); goto next; } break; case NAME: if (Py_OptimizeFlag && strcmp(STR(n), "__debug__") == 0) return 1; break; case NUMBER: v = parsenumber(c, STR(n)); if (v == NULL) { PyErr_Clear(); break; } i = PyObject_IsTrue(v); Py_DECREF(v); return i == 0; case STRING: v = parsestr(STR(n)); if (v == NULL) { PyErr_Clear(); break; } i = PyObject_IsTrue(v); Py_DECREF(v); return i == 0; } return 0; } static void com_if_stmt(c, n) struct compiling *c; node *n; { int i; int anchor = 0; REQ(n, if_stmt); /*'if' test ':' suite ('elif' test ':' suite)* ['else' ':' suite] */ for (i = 0; i+3 < NCH(n); i+=4) { int a = 0; node *ch = CHILD(n, i+1); if (is_constant_false(c, ch)) continue; if (i > 0) com_addoparg(c, SET_LINENO, ch->n_lineno); com_node(c, ch); com_addfwref(c, JUMP_IF_FALSE, &a); com_addbyte(c, POP_TOP); com_pop(c, 1); com_node(c, CHILD(n, i+3)); com_addfwref(c, JUMP_FORWARD, &anchor); com_backpatch(c, a); /* We jump here with an extra entry which we now pop */ com_addbyte(c, POP_TOP); } if (i+2 < NCH(n)) com_node(c, CHILD(n, i+2)); if (anchor) com_backpatch(c, anchor); } static void com_while_stmt(c, n) struct compiling *c; node *n; { int break_anchor = 0; int anchor = 0; int save_begin = c->c_begin; REQ(n, while_stmt); /* 'while' test ':' suite ['else' ':' suite] */ com_addfwref(c, SETUP_LOOP, &break_anchor); block_push(c, SETUP_LOOP); c->c_begin = c->c_nexti; com_addoparg(c, SET_LINENO, n->n_lineno); com_node(c, CHILD(n, 1)); com_addfwref(c, JUMP_IF_FALSE, &anchor); com_addbyte(c, POP_TOP); com_pop(c, 1); c->c_loops++; com_node(c, CHILD(n, 3)); c->c_loops--; com_addoparg(c, JUMP_ABSOLUTE, c->c_begin); c->c_begin = save_begin; com_backpatch(c, anchor); /* We jump here with one entry more on the stack */ com_addbyte(c, POP_TOP); com_addbyte(c, POP_BLOCK); block_pop(c, SETUP_LOOP); if (NCH(n) > 4) com_node(c, CHILD(n, 6)); com_backpatch(c, break_anchor); } static void com_for_stmt(c, n) struct compiling *c; node *n; { PyObject *v; int break_anchor = 0; int anchor = 0; int save_begin = c->c_begin; REQ(n, for_stmt); /* 'for' exprlist 'in' exprlist ':' suite ['else' ':' suite] */ com_addfwref(c, SETUP_LOOP, &break_anchor); block_push(c, SETUP_LOOP); com_node(c, CHILD(n, 3)); v = PyInt_FromLong(0L); if (v == NULL) c->c_errors++; com_addoparg(c, LOAD_CONST, com_addconst(c, v)); com_push(c, 1); Py_XDECREF(v); c->c_begin = c->c_nexti; com_addoparg(c, SET_LINENO, n->n_lineno); com_addfwref(c, FOR_LOOP, &anchor); com_push(c, 1); com_assign(c, CHILD(n, 1), OP_ASSIGN); c->c_loops++; com_node(c, CHILD(n, 5)); c->c_loops--; com_addoparg(c, JUMP_ABSOLUTE, c->c_begin); c->c_begin = save_begin; com_backpatch(c, anchor); com_pop(c, 2); /* FOR_LOOP has popped these */ com_addbyte(c, POP_BLOCK); block_pop(c, SETUP_LOOP); if (NCH(n) > 8) com_node(c, CHILD(n, 8)); com_backpatch(c, break_anchor); } /* Code generated for "try: S finally: Sf" is as follows: SETUP_FINALLY L <code for S> POP_BLOCK LOAD_CONST <nil> L: <code for Sf> END_FINALLY The special instructions use the block stack. Each block stack entry contains the instruction that created it (here SETUP_FINALLY), the level of the value stack at the time the block stack entry was created, and a label (here L). SETUP_FINALLY: Pushes the current value stack level and the label onto the block stack. POP_BLOCK: Pops en entry from the block stack, and pops the value stack until its level is the same as indicated on the block stack. (The label is ignored.) END_FINALLY: Pops a variable number of entries from the *value* stack and re-raises the exception they specify. The number of entries popped depends on the (pseudo) exception type. The block stack is unwound when an exception is raised: when a SETUP_FINALLY entry is found, the exception is pushed onto the value stack (and the exception condition is cleared), and the interpreter jumps to the label gotten from the block stack. Code generated for "try: S except E1, V1: S1 except E2, V2: S2 ...": (The contents of the value stack is shown in [], with the top at the right; 'tb' is trace-back info, 'val' the exception's associated value, and 'exc' the exception.) Value stack Label Instruction Argument [] SETUP_EXCEPT L1 [] <code for S> [] POP_BLOCK [] JUMP_FORWARD L0 [tb, val, exc] L1: DUP ) [tb, val, exc, exc] <evaluate E1> ) [tb, val, exc, exc, E1] COMPARE_OP EXC_MATCH ) only if E1 [tb, val, exc, 1-or-0] JUMP_IF_FALSE L2 ) [tb, val, exc, 1] POP ) [tb, val, exc] POP [tb, val] <assign to V1> (or POP if no V1) [tb] POP [] <code for S1> JUMP_FORWARD L0 [tb, val, exc, 0] L2: POP [tb, val, exc] DUP .............................etc....................... [tb, val, exc, 0] Ln+1: POP [tb, val, exc] END_FINALLY # re-raise exception [] L0: <next statement> Of course, parts are not generated if Vi or Ei is not present. */ static void com_try_except(c, n) struct compiling *c; node *n; { int except_anchor = 0; int end_anchor = 0; int else_anchor = 0; int i; node *ch; com_addfwref(c, SETUP_EXCEPT, &except_anchor); block_push(c, SETUP_EXCEPT); com_node(c, CHILD(n, 2)); com_addbyte(c, POP_BLOCK); block_pop(c, SETUP_EXCEPT); com_addfwref(c, JUMP_FORWARD, &else_anchor); com_backpatch(c, except_anchor); for (i = 3; i < NCH(n) && TYPE(ch = CHILD(n, i)) == except_clause; i += 3) { /* except_clause: 'except' [expr [',' var]] */ if (except_anchor == 0) { com_error(c, PyExc_SyntaxError, "default 'except:' must be last"); break; } except_anchor = 0; com_push(c, 3); /* tb, val, exc pushed by exception */ com_addoparg(c, SET_LINENO, ch->n_lineno); if (NCH(ch) > 1) { com_addbyte(c, DUP_TOP); com_push(c, 1); com_node(c, CHILD(ch, 1)); com_addoparg(c, COMPARE_OP, EXC_MATCH); com_pop(c, 1); com_addfwref(c, JUMP_IF_FALSE, &except_anchor); com_addbyte(c, POP_TOP); com_pop(c, 1); } com_addbyte(c, POP_TOP); com_pop(c, 1); if (NCH(ch) > 3) com_assign(c, CHILD(ch, 3), OP_ASSIGN); else { com_addbyte(c, POP_TOP); com_pop(c, 1); } com_addbyte(c, POP_TOP); com_pop(c, 1); com_node(c, CHILD(n, i+2)); com_addfwref(c, JUMP_FORWARD, &end_anchor); if (except_anchor) { com_backpatch(c, except_anchor); /* We come in with [tb, val, exc, 0] on the stack; one pop and it's the same as expected at the start of the loop */ com_addbyte(c, POP_TOP); } } /* We actually come in here with [tb, val, exc] but the END_FINALLY will zap those and jump around. The c_stacklevel does not reflect them so we need not pop anything. */ com_addbyte(c, END_FINALLY); com_backpatch(c, else_anchor); if (i < NCH(n)) com_node(c, CHILD(n, i+2)); com_backpatch(c, end_anchor); } static void com_try_finally(c, n) struct compiling *c; node *n; { int finally_anchor = 0; node *ch; com_addfwref(c, SETUP_FINALLY, &finally_anchor); block_push(c, SETUP_FINALLY); com_node(c, CHILD(n, 2)); com_addbyte(c, POP_BLOCK); block_pop(c, SETUP_FINALLY); block_push(c, END_FINALLY); com_addoparg(c, LOAD_CONST, com_addconst(c, Py_None)); /* While the generated code pushes only one item, the try-finally handling can enter here with up to three items. OK, here are the details: 3 for an exception, 2 for RETURN, 1 for BREAK. */ com_push(c, 3); com_backpatch(c, finally_anchor); ch = CHILD(n, NCH(n)-1); com_addoparg(c, SET_LINENO, ch->n_lineno); com_node(c, ch); com_addbyte(c, END_FINALLY); block_pop(c, END_FINALLY); com_pop(c, 3); /* Matches the com_push above */ } static void com_try_stmt(c, n) struct compiling *c; node *n; { REQ(n, try_stmt); /* 'try' ':' suite (except_clause ':' suite)+ ['else' ':' suite] | 'try' ':' suite 'finally' ':' suite */ if (TYPE(CHILD(n, 3)) != except_clause) com_try_finally(c, n); else com_try_except(c, n); } static node * get_rawdocstring(n) node *n; { int i; /* Label to avoid tail recursion */ next: switch (TYPE(n)) { case suite: if (NCH(n) == 1) { n = CHILD(n, 0); goto next; } /* Fall through */ case file_input: for (i = 0; i < NCH(n); i++) { node *ch = CHILD(n, i); if (TYPE(ch) == stmt) { n = ch; goto next; } } break; case stmt: case simple_stmt: case small_stmt: n = CHILD(n, 0); goto next; case expr_stmt: case testlist: case test: case and_test: case not_test: case comparison: case expr: case xor_expr: case and_expr: case shift_expr: case arith_expr: case term: case factor: case power: if (NCH(n) == 1) { n = CHILD(n, 0); goto next; } break; case atom: if (TYPE(CHILD(n, 0)) == STRING) return n; break; } return NULL; } static PyObject * get_docstring(n) node *n; { /* Don't generate doc-strings if run with -OO */ if (Py_OptimizeFlag > 1) return NULL; n = get_rawdocstring(n); if (n == NULL) return NULL; return parsestrplus(n); } static void com_suite(c, n) struct compiling *c; node *n; { REQ(n, suite); /* simple_stmt | NEWLINE INDENT NEWLINE* (stmt NEWLINE*)+ DEDENT */ if (NCH(n) == 1) { com_node(c, CHILD(n, 0)); } else { int i; for (i = 0; i < NCH(n); i++) { node *ch = CHILD(n, i); if (TYPE(ch) == stmt) com_node(c, ch); } } } /* ARGSUSED */ static void com_continue_stmt(c, n) struct compiling *c; node *n; /* Not used, but passed for consistency */ { int i = c->c_nblocks; if (i-- > 0 && c->c_block[i] == SETUP_LOOP) { com_addoparg(c, JUMP_ABSOLUTE, c->c_begin); } else { com_error(c, PyExc_SyntaxError, "'continue' not properly in loop"); } /* XXX Could allow it inside a 'finally' clause XXX if we could pop the exception still on the stack */ } static int com_argdefs(c, n) struct compiling *c; node *n; { int i, nch, nargs, ndefs; if (TYPE(n) == lambdef) { /* lambdef: 'lambda' [varargslist] ':' test */ n = CHILD(n, 1); } else { REQ(n, funcdef); /* funcdef: 'def' NAME parameters ... */ n = CHILD(n, 2); REQ(n, parameters); /* parameters: '(' [varargslist] ')' */ n = CHILD(n, 1); } if (TYPE(n) != varargslist) return 0; /* varargslist: (fpdef ['=' test] ',')* '*' ....... | fpdef ['=' test] (',' fpdef ['=' test])* [','] */ nch = NCH(n); nargs = 0; ndefs = 0; for (i = 0; i < nch; i++) { int t; if (TYPE(CHILD(n, i)) == STAR || TYPE(CHILD(n, i)) == DOUBLESTAR) break; nargs++; i++; if (i >= nch) t = RPAR; /* Anything except EQUAL or COMMA */ else t = TYPE(CHILD(n, i)); if (t == EQUAL) { i++; ndefs++; com_node(c, CHILD(n, i)); i++; if (i >= nch) break; t = TYPE(CHILD(n, i)); } else { /* Treat "(a=1, b)" as an error */ if (ndefs) com_error(c, PyExc_SyntaxError, "non-default argument follows default argument"); } if (t != COMMA) break; } return ndefs; } static void com_funcdef(c, n) struct compiling *c; node *n; { PyObject *v; REQ(n, funcdef); /* funcdef: 'def' NAME parameters ':' suite */ v = (PyObject *)icompile(n, c); if (v == NULL) c->c_errors++; else { int i = com_addconst(c, v); int ndefs = com_argdefs(c, n); com_addoparg(c, LOAD_CONST, i); com_push(c, 1); com_addoparg(c, MAKE_FUNCTION, ndefs); com_pop(c, ndefs); com_addopname(c, STORE_NAME, CHILD(n, 1)); com_pop(c, 1); Py_DECREF(v); } } static void com_bases(c, n) struct compiling *c; node *n; { int i; REQ(n, testlist); /* testlist: test (',' test)* [','] */ for (i = 0; i < NCH(n); i += 2) com_node(c, CHILD(n, i)); i = (NCH(n)+1) / 2; com_addoparg(c, BUILD_TUPLE, i); com_pop(c, i-1); } static void com_classdef(c, n) struct compiling *c; node *n; { int i; PyObject *v; REQ(n, classdef); /* classdef: class NAME ['(' testlist ')'] ':' suite */ if ((v = PyString_InternFromString(STR(CHILD(n, 1)))) == NULL) { c->c_errors++; return; } /* Push the class name on the stack */ i = com_addconst(c, v); com_addoparg(c, LOAD_CONST, i); com_push(c, 1); Py_DECREF(v); /* Push the tuple of base classes on the stack */ if (TYPE(CHILD(n, 2)) != LPAR) { com_addoparg(c, BUILD_TUPLE, 0); com_push(c, 1); } else com_bases(c, CHILD(n, 3)); v = (PyObject *)icompile(n, c); if (v == NULL) c->c_errors++; else { i = com_addconst(c, v); com_addoparg(c, LOAD_CONST, i); com_push(c, 1); com_addoparg(c, MAKE_FUNCTION, 0); com_addoparg(c, CALL_FUNCTION, 0); com_addbyte(c, BUILD_CLASS); com_pop(c, 2); com_addopname(c, STORE_NAME, CHILD(n, 1)); Py_DECREF(v); } } static void com_node(c, n) struct compiling *c; node *n; { switch (TYPE(n)) { /* Definition nodes */ case funcdef: com_funcdef(c, n); break; case classdef: com_classdef(c, n); break; /* Trivial parse tree nodes */ case stmt: case small_stmt: case flow_stmt: com_node(c, CHILD(n, 0)); break; case simple_stmt: /* small_stmt (';' small_stmt)* [';'] NEWLINE */ com_addoparg(c, SET_LINENO, n->n_lineno); { int i; for (i = 0; i < NCH(n)-1; i += 2) com_node(c, CHILD(n, i)); } break; case compound_stmt: com_addoparg(c, SET_LINENO, n->n_lineno); com_node(c, CHILD(n, 0)); break; /* Statement nodes */ case expr_stmt: com_expr_stmt(c, n); break; case print_stmt: com_print_stmt(c, n); break; case del_stmt: /* 'del' exprlist */ com_assign(c, CHILD(n, 1), OP_DELETE); break; case pass_stmt: break; case break_stmt: if (c->c_loops == 0) { com_error(c, PyExc_SyntaxError, "'break' outside loop"); } com_addbyte(c, BREAK_LOOP); break; case continue_stmt: com_continue_stmt(c, n); break; case return_stmt: com_return_stmt(c, n); break; case raise_stmt: com_raise_stmt(c, n); break; case import_stmt: com_import_stmt(c, n); break; case global_stmt: com_global_stmt(c, n); break; case exec_stmt: com_exec_stmt(c, n); break; case assert_stmt: com_assert_stmt(c, n); break; case if_stmt: com_if_stmt(c, n); break; case while_stmt: com_while_stmt(c, n); break; case for_stmt: com_for_stmt(c, n); break; case try_stmt: com_try_stmt(c, n); break; case suite: com_suite(c, n); break; /* Expression nodes */ case testlist: com_list(c, n, 0); break; case test: com_test(c, n); break; case and_test: com_and_test(c, n); break; case not_test: com_not_test(c, n); break; case comparison: com_comparison(c, n); break; case exprlist: com_list(c, n, 0); break; case expr: com_expr(c, n); break; case xor_expr: com_xor_expr(c, n); break; case and_expr: com_and_expr(c, n); break; case shift_expr: com_shift_expr(c, n); break; case arith_expr: com_arith_expr(c, n); break; case term: com_term(c, n); break; case factor: com_factor(c, n); break; case power: com_power(c, n); break; case atom: com_atom(c, n); break; default: /* XXX fprintf(stderr, "node type %d\n", TYPE(n)); */ com_error(c, PyExc_SystemError, "com_node: unexpected node type"); } } static void com_fplist Py_PROTO((struct compiling *, node *)); static void com_fpdef(c, n) struct compiling *c; node *n; { REQ(n, fpdef); /* fpdef: NAME | '(' fplist ')' */ if (TYPE(CHILD(n, 0)) == LPAR) com_fplist(c, CHILD(n, 1)); else { com_addoparg(c, STORE_FAST, com_newlocal(c, STR(CHILD(n, 0)))); com_pop(c, 1); } } static void com_fplist(c, n) struct compiling *c; node *n; { REQ(n, fplist); /* fplist: fpdef (',' fpdef)* [','] */ if (NCH(n) == 1) { com_fpdef(c, CHILD(n, 0)); } else { int i = (NCH(n)+1)/2; com_addoparg(c, UNPACK_TUPLE, i); com_push(c, i-1); for (i = 0; i < NCH(n); i += 2) com_fpdef(c, CHILD(n, i)); } } static void com_arglist(c, n) struct compiling *c; node *n; { int nch, i; int complex = 0; char nbuf[10]; REQ(n, varargslist); /* varargslist: (fpdef ['=' test] ',')* (fpdef ['=' test] | '*' .....) */ nch = NCH(n); /* Enter all arguments in table of locals */ for (i = 0; i < nch; i++) { node *ch = CHILD(n, i); node *fp; char *name; if (TYPE(ch) == STAR || TYPE(ch) == DOUBLESTAR) break; REQ(ch, fpdef); /* fpdef: NAME | '(' fplist ')' */ fp = CHILD(ch, 0); if (TYPE(fp) == NAME) name = STR(fp); else { name = nbuf; sprintf(nbuf, ".%d", i); complex = 1; } com_newlocal(c, name); c->c_argcount++; if (++i >= nch) break; ch = CHILD(n, i); if (TYPE(ch) == EQUAL) i += 2; else REQ(ch, COMMA); } /* Handle *arguments */ if (i < nch) { node *ch; ch = CHILD(n, i); if (TYPE(ch) != DOUBLESTAR) { REQ(ch, STAR); ch = CHILD(n, i+1); if (TYPE(ch) == NAME) { c->c_flags |= CO_VARARGS; i += 3; com_newlocal(c, STR(ch)); } } } /* Handle **keywords */ if (i < nch) { node *ch; ch = CHILD(n, i); if (TYPE(ch) != DOUBLESTAR) { REQ(ch, STAR); ch = CHILD(n, i+1); REQ(ch, STAR); ch = CHILD(n, i+2); } else ch = CHILD(n, i+1); REQ(ch, NAME); c->c_flags |= CO_VARKEYWORDS; com_newlocal(c, STR(ch)); } if (complex) { /* Generate code for complex arguments only after having counted the simple arguments */ int ilocal = 0; for (i = 0; i < nch; i++) { node *ch = CHILD(n, i); node *fp; if (TYPE(ch) == STAR || TYPE(ch) == DOUBLESTAR) break; REQ(ch, fpdef); /* fpdef: NAME | '(' fplist ')' */ fp = CHILD(ch, 0); if (TYPE(fp) != NAME) { com_addoparg(c, LOAD_FAST, ilocal); com_push(c, 1); com_fpdef(c, ch); } ilocal++; if (++i >= nch) break; ch = CHILD(n, i); if (TYPE(ch) == EQUAL) i += 2; else REQ(ch, COMMA); } } } static void com_file_input(c, n) struct compiling *c; node *n; { int i; PyObject *doc; REQ(n, file_input); /* (NEWLINE | stmt)* ENDMARKER */ doc = get_docstring(n); if (doc != NULL) { int i = com_addconst(c, doc); Py_DECREF(doc); com_addoparg(c, LOAD_CONST, i); com_push(c, 1); com_addopnamestr(c, STORE_NAME, "__doc__"); com_pop(c, 1); } for (i = 0; i < NCH(n); i++) { node *ch = CHILD(n, i); if (TYPE(ch) != ENDMARKER && TYPE(ch) != NEWLINE) com_node(c, ch); } } /* Top-level compile-node interface */ static void compile_funcdef(c, n) struct compiling *c; node *n; { PyObject *doc; node *ch; REQ(n, funcdef); /* funcdef: 'def' NAME parameters ':' suite */ c->c_name = STR(CHILD(n, 1)); doc = get_docstring(CHILD(n, 4)); if (doc != NULL) { (void) com_addconst(c, doc); Py_DECREF(doc); } else (void) com_addconst(c, Py_None); /* No docstring */ ch = CHILD(n, 2); /* parameters: '(' [varargslist] ')' */ ch = CHILD(ch, 1); /* ')' | varargslist */ if (TYPE(ch) == varargslist) com_arglist(c, ch); c->c_infunction = 1; com_node(c, CHILD(n, 4)); c->c_infunction = 0; com_addoparg(c, LOAD_CONST, com_addconst(c, Py_None)); com_push(c, 1); com_addbyte(c, RETURN_VALUE); com_pop(c, 1); } static void compile_lambdef(c, n) struct compiling *c; node *n; { node *ch; REQ(n, lambdef); /* lambdef: 'lambda' [varargslist] ':' test */ c->c_name = "<lambda>"; ch = CHILD(n, 1); (void) com_addconst(c, Py_None); /* No docstring */ if (TYPE(ch) == varargslist) { com_arglist(c, ch); ch = CHILD(n, 3); } else ch = CHILD(n, 2); com_node(c, ch); com_addbyte(c, RETURN_VALUE); com_pop(c, 1); } static void compile_classdef(c, n) struct compiling *c; node *n; { node *ch; PyObject *doc; REQ(n, classdef); /* classdef: 'class' NAME ['(' testlist ')'] ':' suite */ c->c_name = STR(CHILD(n, 1)); #ifdef PRIVATE_NAME_MANGLING c->c_private = c->c_name; #endif ch = CHILD(n, NCH(n)-1); /* The suite */ doc = get_docstring(ch); if (doc != NULL) { int i = com_addconst(c, doc); Py_DECREF(doc); com_addoparg(c, LOAD_CONST, i); com_push(c, 1); com_addopnamestr(c, STORE_NAME, "__doc__"); com_pop(c, 1); } else (void) com_addconst(c, Py_None); com_node(c, ch); com_addbyte(c, LOAD_LOCALS); com_push(c, 1); com_addbyte(c, RETURN_VALUE); com_pop(c, 1); } static void compile_node(c, n) struct compiling *c; node *n; { com_addoparg(c, SET_LINENO, n->n_lineno); switch (TYPE(n)) { case single_input: /* One interactive command */ /* NEWLINE | simple_stmt | compound_stmt NEWLINE */ c->c_interactive++; n = CHILD(n, 0); if (TYPE(n) != NEWLINE) com_node(c, n); com_addoparg(c, LOAD_CONST, com_addconst(c, Py_None)); com_push(c, 1); com_addbyte(c, RETURN_VALUE); com_pop(c, 1); c->c_interactive--; break; case file_input: /* A whole file, or built-in function exec() */ com_file_input(c, n); com_addoparg(c, LOAD_CONST, com_addconst(c, Py_None)); com_push(c, 1); com_addbyte(c, RETURN_VALUE); com_pop(c, 1); break; case eval_input: /* Built-in function input() */ com_node(c, CHILD(n, 0)); com_addbyte(c, RETURN_VALUE); com_pop(c, 1); break; case lambdef: /* anonymous function definition */ compile_lambdef(c, n); break; case funcdef: /* A function definition */ compile_funcdef(c, n); break; case classdef: /* A class definition */ compile_classdef(c, n); break; default: /* XXX fprintf(stderr, "node type %d\n", TYPE(n)); */ com_error(c, PyExc_SystemError, "compile_node: unexpected node type"); } } /* Optimization for local variables in functions (and *only* functions). This replaces all LOAD_NAME, STORE_NAME and DELETE_NAME instructions that refer to local variables with LOAD_FAST etc. The latter instructions are much faster because they don't need to look up the variable name in a dictionary. To find all local variables, we check all STORE_NAME, IMPORT_FROM and DELETE_NAME instructions. This yields all local variables, function definitions, class definitions and import statements. Argument names have already been entered into the list by the special processing for the argument list. All remaining LOAD_NAME instructions must refer to non-local (global or builtin) variables, so are replaced by LOAD_GLOBAL. There are two problems: 'from foo import *' and 'exec' may introduce local variables that we can't know while compiling. If this is the case, we can still optimize bona fide locals (since those statements will be surrounded by fast_2_locals() and locals_2_fast()), but we can't change LOAD_NAME to LOAD_GLOBAL. NB: this modifies the string object c->c_code! */ static void optimize(c) struct compiling *c; { unsigned char *next_instr, *cur_instr; int opcode; int oparg = 0; PyObject *name; PyObject *error_type, *error_value, *error_traceback; #define NEXTOP() (*next_instr++) #define NEXTARG() (next_instr += 2, (next_instr[-1]<<8) + next_instr[-2]) #define GETITEM(v, i) (PyList_GetItem((v), (i))) #define GETNAMEOBJ(i) (GETITEM(c->c_names, (i))) PyErr_Fetch(&error_type, &error_value, &error_traceback); c->c_flags |= CO_OPTIMIZED; next_instr = (unsigned char *) PyString_AsString(c->c_code); for (;;) { opcode = NEXTOP(); if (opcode == STOP_CODE) break; if (HAS_ARG(opcode)) oparg = NEXTARG(); switch (opcode) { case STORE_NAME: case DELETE_NAME: case IMPORT_FROM: com_addlocal_o(c, GETNAMEOBJ(oparg)); break; case EXEC_STMT: c->c_flags &= ~CO_OPTIMIZED; break; } } if (PyDict_GetItemString(c->c_locals, "*") != NULL) c->c_flags &= ~CO_OPTIMIZED; next_instr = (unsigned char *) PyString_AsString(c->c_code); for (;;) { cur_instr = next_instr; opcode = NEXTOP(); if (opcode == STOP_CODE) break; if (HAS_ARG(opcode)) oparg = NEXTARG(); if (opcode == LOAD_NAME || opcode == STORE_NAME || opcode == DELETE_NAME) { PyObject *v; int i; name = GETNAMEOBJ(oparg); v = PyDict_GetItem(c->c_locals, name); if (v == NULL) { if (opcode == LOAD_NAME && (c->c_flags&CO_OPTIMIZED)) cur_instr[0] = LOAD_GLOBAL; continue; } i = PyInt_AsLong(v); switch (opcode) { case LOAD_NAME: cur_instr[0] = LOAD_FAST; break; case STORE_NAME: cur_instr[0] = STORE_FAST; break; case DELETE_NAME: cur_instr[0] = DELETE_FAST; break; } cur_instr[1] = i & 0xff; cur_instr[2] = (i>>8) & 0xff; } } if (c->c_errors == 0) PyErr_Restore(error_type, error_value, error_traceback); } PyCodeObject * PyNode_Compile(n, filename) node *n; char *filename; { return jcompile(n, filename, NULL); } static PyCodeObject * icompile(n, base) node *n; struct compiling *base; { return jcompile(n, base->c_filename, base); } static PyCodeObject * jcompile(n, filename, base) node *n; char *filename; struct compiling *base; { struct compiling sc; PyCodeObject *co; if (!com_init(&sc, filename)) return NULL; #ifdef PRIVATE_NAME_MANGLING if (base) sc.c_private = base->c_private; else sc.c_private = NULL; #endif compile_node(&sc, n); com_done(&sc); if ((TYPE(n) == funcdef || TYPE(n) == lambdef) && sc.c_errors == 0) { optimize(&sc); sc.c_flags |= CO_NEWLOCALS; } else if (TYPE(n) == classdef) sc.c_flags |= CO_NEWLOCALS; co = NULL; if (sc.c_errors == 0) { PyObject *consts, *names, *varnames, *filename, *name; consts = PyList_AsTuple(sc.c_consts); names = PyList_AsTuple(sc.c_names); varnames = PyList_AsTuple(sc.c_varnames); filename = PyString_InternFromString(sc.c_filename); name = PyString_InternFromString(sc.c_name); if (!PyErr_Occurred()) co = PyCode_New(sc.c_argcount, sc.c_nlocals, sc.c_maxstacklevel, sc.c_flags, sc.c_code, consts, names, varnames, filename, name, sc.c_firstlineno, sc.c_lnotab); Py_XDECREF(consts); Py_XDECREF(names); Py_XDECREF(varnames); Py_XDECREF(filename); Py_XDECREF(name); } com_free(&sc); return co; } int PyCode_Addr2Line(co, addrq) PyCodeObject *co; int addrq; { int size = PyString_Size(co->co_lnotab) / 2; unsigned char *p = (unsigned char*)PyString_AsString(co->co_lnotab); int line = co->co_firstlineno; int addr = 0; while (--size >= 0) { addr += *p++; if (addr > addrq) break; line += *p++; } return line; }