From 8a6d1b20079d11fa9e7247feebd886bb54330542 Mon Sep 17 00:00:00 2001 From: Nedko Arnaudov Date: Thu, 17 Aug 2023 02:51:05 +0300 Subject: [PATCH] waf build system for termsize --- .gitmodules | 6 ++ waf | 173 ++++++++++++++++++++++++++++++++++++++++++++ wafautooptions | 1 + waftoolchainflags | 1 + wscript | 179 ++++++++++++++++++++++++++++++++++++++++++++++ 5 files changed, 360 insertions(+) create mode 100644 .gitmodules create mode 100755 waf create mode 160000 wafautooptions create mode 160000 waftoolchainflags create mode 100644 wscript diff --git a/.gitmodules b/.gitmodules new file mode 100644 index 0000000..d48351f --- /dev/null +++ b/.gitmodules @@ -0,0 +1,6 @@ +[submodule "waf-autooptions"] + path = wafautooptions + url = https://github.com/LADI/waf-autooptions.git +[submodule "waf-toolchain-flags"] + path = waftoolchainflags + url = https://github.com/LADI/waf-toolchain-flags.git diff --git a/waf b/waf new file mode 100755 index 0000000..3099c10 --- /dev/null +++ b/waf @@ -0,0 +1,173 @@ +#!/usr/bin/env python +# encoding: latin-1 +# Thomas Nagy, 2005-2018 +# +""" +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions +are met: + +1. Redistributions of source code must retain the above copyright + notice, this list of conditions and the following disclaimer. + +2. Redistributions in binary form must reproduce the above copyright + notice, this list of conditions and the following disclaimer in the + documentation and/or other materials provided with the distribution. + +3. The name of the author may not be used to endorse or promote products + derived from this software without specific prior written permission. + +THIS SOFTWARE IS PROVIDED BY THE AUTHOR "AS IS" AND ANY EXPRESS OR +IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED +WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE +DISCLAIMED. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, +INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES +(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR +SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) +HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, +STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING +IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE +POSSIBILITY OF SUCH DAMAGE. +""" + +import os, sys, inspect + +VERSION="2.0.25" +REVISION="767522112be77f8585812fcfaa08e805" +GIT="39ef33e48380a2db38a0eae40a3a4a2c954f4450" +INSTALL='' +C1='#+' +C2='#*' +C3='#)' +cwd = os.getcwd() +join = os.path.join + + +WAF='waf' +def b(x): + return x +if sys.hexversion>0x300000f: + WAF='waf3' + def b(x): + return x.encode() + +def err(m): + print(('\033[91mError: %s\033[0m' % m)) + sys.exit(1) + +def unpack_wafdir(dir, src): + f = open(src,'rb') + c = 'corrupt archive (%d)' + while 1: + line = f.readline() + if not line: err('run waf-light from a folder containing waflib') + if line == b('#==>\n'): + txt = f.readline() + if not txt: err(c % 1) + if f.readline() != b('#<==\n'): err(c % 2) + break + if not txt: err(c % 3) + txt = txt[1:-1].replace(b(C1), b('\n')).replace(b(C2), b('\r')).replace(b(C3), b('\x00')) + + import shutil, tarfile + try: shutil.rmtree(dir) + except OSError: pass + try: + for x in ('Tools', 'extras'): + os.makedirs(join(dir, 'waflib', x)) + except OSError: + err("Cannot unpack waf lib into %s\nMove waf in a writable directory" % dir) + + os.chdir(dir) + tmp = 't.bz2' + t = open(tmp,'wb') + try: t.write(txt) + finally: t.close() + + try: + t = tarfile.open(tmp) + except: + try: + os.system('bunzip2 t.bz2') + t = tarfile.open('t') + tmp = 't' + except: + os.chdir(cwd) + try: shutil.rmtree(dir) + except OSError: pass + err("Waf cannot be unpacked, check that bzip2 support is present") + + try: + for x in t: t.extract(x) + finally: + t.close() + + for x in ('Tools', 'extras'): + os.chmod(join('waflib',x), 493) + + if sys.hexversion<0x300000f: + sys.path = [join(dir, 'waflib')] + sys.path + import fixpy2 + fixpy2.fixdir(dir) + + os.remove(tmp) + os.chdir(cwd) + + try: dir = unicode(dir, 'mbcs') + except: pass + try: + from ctypes import windll + windll.kernel32.SetFileAttributesW(dir, 2) + except: + pass + +def test(dir): + try: + os.stat(join(dir, 'waflib')) + return os.path.abspath(dir) + except OSError: + pass + +def find_lib(): + src = os.path.abspath(inspect.getfile(inspect.getmodule(err))) + base, name = os.path.split(src) + + #devs use $WAFDIR + w=test(os.environ.get('WAFDIR', '')) + if w: return w + + #waf-light + if name.endswith('waf-light'): + w = test(base) + if w: return w + for dir in sys.path: + if test(dir): + return dir + err('waf-light requires waflib -> export WAFDIR=/folder') + + dirname = '%s-%s-%s' % (WAF, VERSION, REVISION) + for i in (INSTALL,'/usr','/usr/local','/opt'): + w = test(i + '/lib/' + dirname) + if w: return w + + #waf-local + dir = join(base, (sys.platform != 'win32' and '.' or '') + dirname) + w = test(dir) + if w: return w + + #unpack + unpack_wafdir(dir, src) + return dir + +wafdir = find_lib() +sys.path.insert(0, wafdir) + +if __name__ == '__main__': + + from waflib import Scripting + Scripting.waf_entry_point(cwd, VERSION, wafdir) + +#==> +#BZh91AY&SY#*s#)w#)Pe((00b{@#)#)#)#)#)#)#)#)#)#)#)#)#)#)#)#)#)#)#)#)#)}=yl=C(4ӷ޳>lb#i5;zhm2_<>;o9tzQRQ^{ZSvvnV|KzG)=;{#*{_}ޔH#)mkoE#)%ްrMoxyoͽ-n}½_uקʣ^piw>onۗtn%ju^^==׏wΥؒl4k#*m-n肵fmR^\kS7Ϲ;۞==k{Ruc_YGgu=D#)7ӗ;.|hX:E!#+vrT[뒝ݗ`v= Tו{خS=R-mGB5#)#)]#)[^szyn ^E;Ӳjt{|ΈO:"Ǜ^g)Wҕ0WrxiAk뵇>۞޳3n7;xtynǽbE`3EhYۣ)꧞/<7}}^ª\zR}ƕm#+Mw9s#+k/awv4J2]޼Ln T;PG{}{[#* Ym::#)J]zP(ٷ{[l\nu[PUUMwbHݵfF4.47zu"Xzҏ9s|C`OcB= ='Pu}}t:g5`wwn:xo;ΎZ5w#*4@#)#)@M#)&L#)O%44#)hFj=)B&41SS&Sz='4#)#)#)#)#)H!4C@#+i$$GF#*@#)#)h#)#)#)IꔑFMOj&mOSj#)@=@#)#)#)#)#)#)LM 2##)4ɢz&(#)#)4#)#*#)I  hhCLO%fU#G?~{Z?J/e+(4{Jvo\T55bӶ'$񖿋#*R(8'%f`I"lLhchɣwHLo\үRY9IuS Ś&U;1̡LU)I1H P[xenTޛ4V"S8͆@.9_Xk#)#*)X)h vIlF1IޢܼYzfձS ))Y*"i^@"nDDWXж (D%gF[1D!9$n䠐խF4iY#+qAW6d5snv$؟]mx,EAoOW[Lmː9x#Q~="!AeRhrꠊXOUԆ\2MM;Q7~z\n^+\Ѩ8wcr˙(ˮ$scK TSAr6bDa#+hgˍV,QJ>~-Ҷ.ofd4x_QI)饖PC`QV%.xۈs@G㡆[cɑ!$Ā|{kdu\(3)^vj1kgaN#Ux:8XMFP&<^wPCANME)ߣN95RDUH,ܛtj#+M4+1e)Ֆd|h*e,YI#+N*}y>劝U"֍UOpi)O$WrHoL[1[3&)}]uCAbĭ^JFmǶAp=8 fw^w0{(ʚ҅A@P#+m5͵>S6^41X?ó4E#T/65cOvn#)(5Q#)6i\-z˽zFiVJܱhܖqQ7׿O~FɷIoШR:e!x鵘OrTB)jKGrPaLֶjϽ$+?+ue dDvUдp$XSͲ]#ICHs֞M]J)")٥ZVS^X1a#+p(Mj!iL$0J *DbMZҗucg~,'~6QXXy"<4:QSxUaSץ)F6 #*΃`wD T f(W\N0!oǺê3h4{:#*#+M-;2V[rf6q6>ݵXdȶ_fտ'qvNS#Ybd6CTEM'k7T^DAEtEܮwSe(AP3~- UKTWXR/ú%}E}?Bo`*~no=b~ڭUgLZ{vkܬ'5X黄n#9<$0 1,|ݮ>LT0$4ԺBQ\?л#m* Ҋ'; 0O'IXbW |.aðXOLTC] `GE"4df\}(EfF"daIήYd|wjfs|4Hm#*Anj0h-+mnnΛry=m`p;~i2 i>5e 2}֙;vdM&;D;/[0eg#<:<&.#*iEEP~P9*18pM0޸tmH][џVuS)¡#*:I)D}U}g]_lS#+0D v>wNۭb8mDz-x8}^i~8ߕrn;wCփO'D׶ø1;x< փܛ*E''NiH2Hł~\nGKTCrhf,8`{3Ѹc0q֣QAdX"D+j_} Y؁ύ~?Omvij؜ٌNIi_qηowҡG8KU?d~:kRv 洕ՠlj90#)3mp-#+F,V! \bŸ G5:3yfXOLbE\:bEmM#LtбDk6<8!7WRz-sܺ%У$cf"6.u^EJ)*&h=خ9XKaiCBhJBllĨ黌?bRQU)YSWۛr)quYyljbkxs# < Myw2Ԩt԰$#+IrHRUN|. @bX}#)A0#)An/\Fz(T 9h}F*yi>+_\z.z>Jj3PS}4&Qhsy[Q|*S&; 4 P!p\irj׋h=~9qm"1R;jQùk;FfP@OX#e~E`iF!1!8,]\=](aqNy͡Hi/U#)|7?^ʍ#*0qm|42eom>Uͦ.Kd}&ݪ%cB=ӺI7ϓ*a#>f0Նv^͐)X+4ͦxӺ*aOtl1Vc;ee`=xwc8əA nNPNKYn̎ZntvfbU'A#+Ks3%ʘ,"'Q({eڶӑKD@JE̱#+hYS-.6-s0(<1qۋȤ&X 5lS9;\+=hˑ~-l6Yn{j(RdW=Q1+׬60իHY.!\1YmaknèŮԸm&mHI'"7Ĕh2 Ď 0,ȅ͝,|Qu11GrߦZ]Sƴ#*y[Od@P%GWvT鎉?z(x&gAaBC?N\v#Ll܃B@BtR2~Wjսg@ƎTrJ&æs/KH}Dd#+Wg}QϪu:;b-#K/+.t`z}jv-J#|וF~zEڄC񴯬MUY} ˖p.p~AfaUb}o#)#)r `M3#*]#\)lq񮪣-,"$.qQq|"I|^hnlۨ5y#*GOXځ!W;=::a:ATX^#*NBrAH 'Z.Kbᓥz@;@2Ù-` r/Ѥ_R4#)ռڿ>!fnB$xw H>u7##) 0o2p_#*DuH??=ίH=PYc ?sZkV3]d訉.(S#*סؔ5M#*:U@8~xf#)4_Liyp۫o2 2a&0֛:|Ǘ0dYqG0xԫ%[I(nT$~W!>hjI67#o.˖93O~6Fp+jf_4 ed(K.?2hfDj0[Ԡd>ToX[0v?}QU 6q>?kН#v%6g#{`,d>o,ôOrb5)צ[HmtDͷϖ6.w8wk3{e uUWK"pGxX $Tf~e$uod|c.9ߝ0zr2}y#}#)8Ot Q[]Y.*}`#)HYr-ފdp:_RzNa #+#+k9&)=#*cCWdƬ!TY^pxFvjWzm]Kv.wu`#G7) ,ѯ-qКUtc{^}v3N^+H$`1U1lj'X^,[f n8#)HrdC5ۖG.+#*J l-$ #aSM8^M^yȃ^ϴJZH(\Xb0`C[! N'r`?Sڡ- *#)ȴ#+dU<D\ u{:k4Im0PFΉΧEUL#eVI6NuJZv#*r_#cE .  ?FVX7@!#)F8Fr͵h^ EXfMb.hgN^޶5#*9f)dn)l'xXX)k0$`Q1aX@ѤK"4V-,KX!3e e0H'aK|7<6M%쮚1j߭4ȣ&(4d "XTMPÄtTd"+j1"Q$@C(mc3f-ݶ#+_[0* Byz%,5`|]mH!U#ڀW#)R፩`0@~m'c۳̟xO߶stDქ{^aeoѩ?7srtZ&R 5rz}~[to_({4qNռ)Jnt,X)bKoS/?R嵩Ñ2%@*qԏZ﬒֤g`T`=Vb$O<+v 8Y,݇~&#+?]D驗 7R0'vHDߺ(9ﭧ0^:^ɱ˿5~fbU`z;l&z+z#*s@ikxM,V AKs#n.݌a߱o0;pCǍ`yQZ(A+#)Zı`qS ._O^BvB";3)H|aξFV^TN޹-%#)LdC&xVDVANL@2,* 6Jd :u#`؍)cQG#*$CMB&+J,;"7b3^u{ZU,q;FǦaA!b%ن/w7@䡻i[ dikݼmME1w.#+W;K<8G'nXH߈g(q5L+ERi4xriȦa BⱣs|>~p6n)ɱǭȏ.m@nP$ܰgWGK#+EpRۖ`>#*LF#+):IO>\zR0CKIR7ɹ؏ۛT}6YČOJ9Uד,}:&;`̒6d],ߐ|?H-AuȹHƇ4ڂ:ts lV+TF:}Wv}t<΍֙y#)*\r7#vm#)~tsV¶4&`l5]ULI(Vj1zxk.i&0Tn&9ioXqxQ3J`r'~Sa0mpJ%l//Lg>#) *#M45~(LĴ룫si·& A7cΥ7՜N.-R66 5k5ph QV#*RK܉jQc*CPDo[Hf#*҆K_vjN f֡55iUeNQ8'@PwAo[N=媼[Jѐkl|{>P@KJ5th,+^ݧGGZ 6!ZS<Y%o_.8#*^"?ju+Cq_S ~a?*VI|g^Hܧq\f#*ep}2'Q~;r}]5H@U|8Lf-Ȁ7J#?v0a ^o(hV(Z0yo6Trl9Du#)j#+NXS#*n#+7:MvWȭ-5#+Nt|`2JҤD6梪+0mD(pRsS_ܢB~*Cy+eyPd+ʂJ0oߚbk'oޑM#*/S5 n䟦?!_ Iz}$a>TWV4(H"4BUW%gr4#+bXX H࿎A9įXTCAצkODZW(qHO#*P- nH=9=<9kFF7 * %T-#*DK):TżWןiiծ s?<)]ϫ槳.>늪oubgVY\8yl鵂v|J[]r{_n=w~o.[za"Z×cTyOz9{Go M3hr+Jo"_}ޭ>\=>pm6\\,'vz5>S[h=oВ=^G!#)ˊ@i>+ۡ]줧Y!=7~w*lqdyPw:Nm8}.d^C٬uƌ45q91Tϡfk4kmiގt= Vh]L"h[o[ȥ(}Jyt;u4kc#+`|LvRT-?9Q ;˛8rnAۨcyȗ׾V{=[44ͼ4Bu"q+QهWu0٦KttM׌A_,B8aSG`x8WUVϾϷ<?I]F pc?gʏN~G􅕮wN^fɥ#*F~%P=1B,Xן ayyiЩޢW39w_/+<~_ AE(XbïC?s:~XO9S07w>W/gf}_۱OSߠߧݹsD[lٲٷGԅ۩^?0{sßPnML.,gպAKSܓybhvnO\4/߷5FRp7 Wit|?oGр#L8|Ǐl?-O8~ϼ)bykG*By-cڂh)u&fXC6ԥApoNnvu].}-[O'I'mr?-(^g`E38KACn>i螟'o~sMX</#*"+]iDWsdяְV)OQ//ֲQ9\nZ沛 c"1ƺ>ϥ]p?!O]PB:sG}eaPuѭ3e*qc/`'{Vi h.-ޜTh8h^"M+x7u&CPGX ?= U<ͮpB/~Y6>f4W7Ø yA?.?ϊaǤQ=~kS< =a5$3Q]EcXwBRdK`zq |& "4i[F2DH@bi7C$MR%dl!#*YRMم$slmg:> oϗ噧?ƚ?χ>}8$2piY2suϖ}G͕^6yǩVϿzxF_.2N'},Z$A1lx[~{4,eVMqeo950J0}(HAáߘz;=߫_WNgyDA8s8#)/QM]qt#+ed,ΰ8t:ןYGa75_0Ku;z5+uj~1l@L/  J(} 8=uQN^v&1[-DP9+#+0q,j[KAi$JD||ף^^|R"Plch1J1BdQZa++)YlW֣F*\mFAKTQ[*86FH2#*ө7#+F5ߐMAS(0F&bpuں)lcQ#*c̉fU4::RpI C␂mh ͧ`2zXUֻ]b0Q$I8 ~UIG E,IW2*EsEQUڙQdec=Drf |AI$JCo!A"^1b޾޳a/NNdjEb:aN5TR:s^>)쇻v S"?]u>ϖU0H#ǰ=z6)R#kީBݚV=A{_y}~m""t^3za6Uq8i?oQdOepKAr2ÉN 50ȏh6tMHneD ~zԪI%UUQ8$whM 9,HbzyB>Sˋ!z=#+-c>Mɬ[ 5]L5o )ٲgF1#*/XnFDy:|V519$,0*IHKק#*740z`۟!OzkF Tf@"&ˉw\{[u_ץ]`Oyyte(7bdk{e>\4U!hy œQ#+#+XRfDQrKOlfr41-6nH)1=jo\AyY=Zﺊ#+Fy# =fhPi12X_;&-/؈&D+剕.!&횙7I%6mlst+#*߼h5`yTeLzDm,ݹ#+$d]#)˒tjEfޭ;Bm6,q3cRblfrP&%L"#)n嵍G[#Hcm'[C`2麰!05igN=Pp$Xj0C^e]w :wP( +8F )J`٭ҴOT1˷rCwG; MIg瘸(!1&^3M8a=A/q~3A}qBݎtzmG6A>#+W-~:Sh v-#*..TAbX U441nEtH7^ZQ"TOKVItDqH2$HMC߮EĉT~Dgl=zM7Bvc5P 0ڱIqkYp80$',5ùC:˱`X~qXayi{q}CF#+~a]]7HImS/Lyݣ#Zy t^@>QcV+UZL]IK*Nj;κc`oȶ@A@G!xLRx-n:>%!Dvx(6)vӽ#+6ڎ#+ɼIJV;F-o#+OX#*.:1jhD7M]g2r3eI(ijb<@.6bsœ6Ea`0cZ67'8+].aZu `NM I42 ils}ncV)2p:䤡K9S!mD;Ӗ#*֎)=0b#%To,ڶ54"N'"1$@Xd )ci)xAQ5{؉TygWKgQY˕$׽F蛎JYY1 D1ʛtik IœTi#+uoB]O#+3"0EP)yIeF;g:$qCnsl \Œ=#)vy=<N\봈I_*Z"&e.Pj⚛?ߟrbgIXȢ+S\}uF/>͋u]d:FNxbT{IZkΟ$r[J(7ZR:چ齄vlh[0^1De-FsTfW#+/期LYf#x#!#)t֓nW4Ubsa1RXߓL).XmzQjJQgXo=ss*vn*pW[ڬ:]~p6 Lqi1޳={j_h,`RWs}*F[,Úڌ2SXBX>Ǽ9Fmd"R-Kk#*6:#+vL-,Ztw&A%^]7JrpuG8/qX4Vتچ-. ًERt}yuQ[Cos-&RS*:SʤR9q%y㯳L.ܧ"!̦9B ղ(YI|m\t3slLޡ -k^pmViT#+3XW (]Jl_'AZY/#*qƳ 2( 1Qٚ8Y]{>Dob|,KӃk"3QCz΍-%K>qnAZW\e'(ʺd2^$'ۻ*_F.M佅LBK#+:xQ5.#+y*f_zW@]뙆р33JH)#IY_#+Jp|JBNaỞ`Vjkٲ!y\piR-A b g=3KiWƕ}ZKQdvivW#+1Yjȗ|C_(يG`HU\,:^8Bq-]#*S~43 Sjn{w46]_ b9hx #*ӓcZ#*jZt+d$Ō'[_zZC1M+g#*#E-_+g .; @\#+59Bp!M6iPg,21T Y)z>/#+,:ν1KSo@@28 )Vy-U~vC#+%PoYZQƜ6ϩÎ9QT~uj/ EJFjmxR$ d5Uݴ_#+q#<<̈GX-;Z/D5˷WiT 2 bhCk3d9t{m!ˏ|xʅÏ:/f//xN;Tǧ?]uG<3+#+^w)ZsÉDmyL?港LK|RԎ#*]lZKMeϔl0"DYH]n)OI: |Zz]~77Mts%YI QNuTLF`oѵK KM)U;,= xmDt8upq qc%M)l*jt0:>1[OS;dē{79ȷ߻ӻ;+o,a0CuqoL_T:6mrEK_s){g6,e>t&<'k+Ŝ./ՂTې!#y FG{S6:e#)}+ˀ|1ҷfN<1ӓi\7lQloa#+d$c׍A |zպtǤjRLR,9c C;-r)ܩrĠ:9UNmƧ}[6j5tM x/p_ftJ6LY5T޾pGC{ۈrDK#)C,#+h:- 0!C$trYiNWaS-tnZLCa.U*BVulJ;FX#* -8St,sAȋ3<{s3r;Xz̽Df)9Ku:mhEdׯÌl}gN)]>y#+tTl0-AnC͋>D ϟ{uv&ɜ_UHȔ##.斎ZL_~1/ekel}XqaGW8$i,NHs<#+y#+ت^@^..NXѩ4釅e#)w.mMB6֢sҽKRBa֚_Ru0r 8z\A DWNxҺiU~iAxb@ is=G!QDbJ)і"#FBW23fYRDHҮw{#l/e3-v"U4EPMwg Nu.b-ڿI!"`}f|~ݼ5H^wlDm^Bnb3F۟޳j!l /VԤk$%Usׂ|&i{)OJ l+}X}6z^Vsk1I0X>7pb` -e֍, C`[ȩ{ΎRz~:\g5~:e\nݮPU-ѸFqkZ9d*tۿ5􃒞[r|o)#XW>z^x݈eQʃ#*`1NA;o$xO_3E>Hا\ M_~:'ϓ\?M*=Z WxKcUb-[ 3`#kcdۣHdIZVmA9W5~!ی[gyov"Zn#+sԤoaӃGzC۝ &(B~[P:mPG~Q@E#Ta#G]8s>_Xxhsrxg24jf3 (x!{Ux+Y8;>w^`q6ɇs%,tF._\T Rz |'+mloE}dxCb?ʔf܁Wքc2-Ix!bGe(Ô"LI'Kbjd¤d#+oR`b&d#*}g:Cq!ezFy7ѹYTJ@ ;X]M;otQ_UgXA4!;Mbĺ#OC<_ˇjtnPA4d) '+U<ʝ#*$r7gˍ^k^˴pejrBǿwj m$?;0nf1U##+ڔ?򣢦5p&Z~r"Η#*Iq~9;WmڛTƗB!Wos}1+/82zRB+MtgmAH Y4rЖh|K::q,cZ &C(;&r/@tB,_@יg?2/NW>2Ġ#)PO֊9Mw#(JL+G;Q@{{)LW@%B!kRw!%"_VU<'lC&Vnp#+d)4`/\д,ԓD xp ƈ #+Tv%g#)L#OFińCϋlNJa`8&`Fvk}N =k!z13H7*NT] ]v̯>[0nݮiGTqtEʮoj#)P ̰L{Ww-%fᭅUu%:F`oL_]P#qlQ#)}"b ^<#{o9*]U׻_셑md(߄ 9_7J^UAުBzJP+j_#*F$zӇ/[O2FPU3) K^bO|41 5qXG]u/q<2=c-QuH@i6ā"m!;ϕz6~}uMj~5'JW>-8JV`s-tHm]pkefõFctmFhMr k^`GQ^#m#*#+t3:PJ70򍸧KOC/ooOߚۺܳl3$m]9#+T@5ME#+*C\t(sݰ=% b(laM^~\GNrjμߑnSQO Ijcasብ#8o;FG[1)O!\Hμ\o$*В?PbJk]q~L+|̓wYgAUOv 0OH19qF:9V^"p,_©*",{|st N")!{!Q*E6F:jaY1k{ۉDZyJGJ ydo~#)K|]`hGgYE>AR?xpBN#l#M_VDb|ץwۨݙC U.Vfr;+_/LOPOyQ(#)zXlD'?}sgoo?7}?ӈ/Yy>Ww~`#)ofXU?SXq|گC"Q .Y0~t fSQ#)rP\ D :D,be:97ء4#)HҀ2a #)+#)Lk),dEI:\tQPY#2\5R&MK`K%LlJYFD%P*m:/U/XK8,=u* bwy7l8#+p\Bsx$AdCa5!^dˢgeн1Sfbxިh>o-cGhBWz}w\9gEN&ܨ>Խ/2GGom_f=3r@z H6 iR(V npm"&wa!Hqs~!/1xۈ댫{KqF|!Y'YG&͊e'uZm~Dw`wFjVP?Ωi$gWvll<㢲YDtZ e1!!އ=ΏB֚c#*q{iڬ?8k?`6bW?"?9ٝ-%v+FM1fY)TZfJbEor,r4UU1UB}j#*O{r;# \C9pr.Sp70GY|HDHg$" E=_M-6i#*wT7fRn2AðDmqL(t8d+owZKBl S;4<'vdf-04 (x#+mVHY֩Fv5ѿYFE#*:8 Tct\So +! :,jθ04q"z^2؆p 5VD9?h4UtXiPM`9'rx#dN(PeDT#+H5V|eY*ث\\%Z櫥z/:׭uʫ)4`HIdMWUt/>;@ApCYfj49XgOɴVE_N9#*cV#+rë Y_1rUȥXɣ@Ǫ)e&I$eT‚$dSZOx#6>7+u9l(փB*(튄ݫ{mklYHJX%PIR$;<6t:6[@%|IB@D5dXcgJuKwJ9*L6T^ˎ˃^&a Dn4(#+;!v@Ay&6cי߻gӖMr#r8꒩J-JD("`kJWuqdyx,Ax0qǎ4 ټT94)H齁e<ꝑ`yFEWtww댪wTKFN8#+KFd&d1О'҃==[ 7ߜ/7o}xPp|;mU0/Nz$΄ج\4Qv.kyOCh*r2(%*Nۥv]p9 :WqG;aL(W:궂}k]]-bz}>kҸim{f|{=V #*'&#)NlbJb{KL UA`wLjjm 1yw&}֪@TLv9\I^:F}r_MC $&N1҅@"1#*@u&{kuvPć"ŗ N5Q\\DA7')Cq#)r#+DhRHz4y.(Pw?kVsok0 P!3@$QM ZlƖKQ.1 X~kBֹs2WySV#`T:l#+wH#+uh~^A~s]Ё>c:R-¡ MSvƛ-@@nXʌ>ÜL6ԎhQr(I.țKf$nָ6W &'8@!}J#*!B CLIlLMm14G6v8F(fZ烉EP{% r`0 ۟]j15=So]i?'P#)P׍K-<*x,Ԕl}Cu7aX:0!,xDC@m쾷FÓ$c y;oLIW8 J_δHM#*~X*ve\ٔpβNu#)KX?xϧ@n;0>#+'AJ/q.Hp_b}[<,keqK-n^@ ׌o#+s&)G<#)bidz'\Ayp>c8v9&ycımf>: v+#)ę<5f  e !.XZgz<߆OՖ7:%;xߣ!)'_·\|y90#*Q̈jn1Kr[z?.wd'o|rGQX:mf|"HZ-jE_Q hH#+#)H( eٞ_*43#)GDw#)G#)"kO^#)C,?=3Axt|'Q@|}"ϢD*??o9φ`pFC ^G3Za&nyEukʽ #9r ԰}%'63nMQםO7B3f{spRJ|}@y]nGEZbᑯl-͢@wv=1Kx"#)ˤ~P!&-AQ Q:^G#)@ܿ7jLjJm[Rlve(Wnp'y"H߃l ]o2L΍Y~ŝC375_[Pb l?,&Gʼ ؽum{~aOe'CJ2>3Ҳ3* {G޽˭>#*#);9 h`6P#+!#)(|6OO#:BoLN:?mwg՝_Q_Cq3"n6 Ϯ;mP6CCKyT"œVtƪ[ÍE NZV@L~q98:Nαw6oglyϤ_~N4lmC<{=\ݜѴy-z,#)#+{2UnKX} jijYfs(/6Gݤ4nkyihPa*\ŷs R#)uO9)W#+]Eg"aOsGox|D#*3KݭdU=#*%ut#):u~w=L#*_*ߘya`{;yGJ~Qק-#dy9K"1s8l#*H⺥zcAupZQfd>QPhp;S}yf.Y(b4Esff#*!꯱6(,yb'?j4p|]Lq~:pOL#)̃=۟:EyP9W[wA,0d(Sy 3Ff LNϣ;y4[q 7yqXj ]Sv4Hu3^QLB"$r.kߦ}v֪M­džV3BADR!)FSmaz85Ղ"4lFlx\C#c`YJ=]A*w'z>1Om&k*#*x-uvNwe2N@@+[(M]dA7FIΕAp)#)TDENFr*s`#*e:DHyj"&]#u5;]%'yfoVo5~mXgb@CZ 6x ?Pv_dѝwjsTT;s.lxt]'meڽatp.C+i@ ,770u#)%JLRW褑w.?OgEvk9~$̢CH!ѥhbWgzlXuA_R"e2"链)_Fa.uDumlCoEcΈ[ØN1YB`a MK"t0a#+5#+&LKܠMbUy`[hX£2S>YF9\3~裰X##)la׼ ᲫcoxʯPr3u#* r,HeXo9U^zISeNInIB&V # pqyCzY]rѤaņ7M~XEeDBI TܳqΗuɤK9D[6egE+KUy 07QYј AyEg'/HG&'w=}Sqou;uT;Ac4Sye0vԇ"#={_xֿnX" %.m_w)UWG뽏*%o>gh9z7)s>h AKՉ7Snz)DT^Gm(y#*mTZruH[l=/vmo(PaN#7_h➜iS$ӨRwѾw/k[3읈C(Sa;`Ifuyu)'GU*rΡmmXqrߍt[)(@Iw 6ywN;L;\Ҕ Xz=nү^l9$d-wrލ]j[(beW8s_cA*$=.=-z"c:"X=W+~d0zOɢ;)p;}ֹv=aɤi.#+T#+!ؽLJ%Hʔ;pwJ88#*Jhы=~e̒㶉ۏg-1Y|佧A/K:`g0h7tq~{]\ulE*mk2#*v#*;jx9s6xR \G }bq|j't>d='촘7+pǟ}ޠv2ʼn!̝lJ?AZ9H^Me?=`yګE` ځ,E^"G>ښ@p KcIgy`PsR( a_sCrZe{pA8CòtQ5j~2'uKi7pRSᚱ>5G S>kDmo IN#+r@({ 8x0P\BQ[čX#+BiLxrD)fKAMs_p!)uӼ/[;h/KyNi6+[G$oܵQbPp.2|b龞h "&jt&J\E/z aݕ.Q!"_[$=؍K$ÃΉ <;24II][9ϻotүN*0VEG\.OgĻ~#+Vf:'4e(b<f=Pe<\x(`BB*D0au"oo(e(%c:FЮa`pqpw;pĸ"@ "J9$IHQ6T*ꘊ,0 2B'}QD#) 1=?~qfp辬jtKd{ƙ:W~C #=Y?E"r,Bj~d;34V?2?P+YTI#)V\-ǧ=^19a+7>0ׄG3f&8Ly}2WhB?}٧xh=GΚzCmA.zDg7v+;I ˨^#0WjmR1+7I檻5R@#*)h!nqN5']$"KQkgۧ?=EDsmr)DVcL4{xu]h,` c.[ׯ #)U'57 gFe#)~z)Aa`Aָ_!}$zf-nfAaAɊ A/pF `c̒&k)Eџ+!]?e9#)X޳Ě4P)M1@D9]v^#4JXG2t+{Ke(ֽ#+0Q,+*Jb$X Y-$R%˻(4g7nmW]fa8quW S>D1ʢ+!:ѯ*9jW$3Vf)*lWؙ(¶y!vQBTTr"h4zI͂A64JPoZ8}36#)3TJ#lU#*>I{^n; {$Pkma!|"Q|AYJ̐Bi:#]4 QG8,^@28pQVs;HFm?Ou`W|r@#)HWx8%%$cU^oz?k1su#n:g] 5|Og-VSW3M+곍"4k]]!c+|]3SX{^%a0fx8y =1\`zN}ˡ9)h޲-#))F"It@*JL:Tq[ǽ9ybSNDK*1A`a}܂#VD#*Iei8Ze \^! nEm׌MoP<&GjNJ&dqY-8kuZ7s$ qL4Av#yH%XjBu3tgL iqTGQu0D_$k:zgj{9i+ ADZ#*)MG3}ޣǾwUsvKyM>Ku!ˁ:q76ތ&I6uT3p$e)V#+lLk3REUДZD #*}P~}^psM㝗q=rI.{? {߷>Y0BU!"cZnP.f[%")apͥtQC:G3fm.Yr&K}DJ)6umv0 Hp#*u-}~B yVU̬#)E{ p ]|-*uɵ*,}rVY>Y\l1|~Xc}E:E#*;8ؼ{ZCkNirrT8=K#+Qit"}Ʀ{͎7 ^oa۩"籝j$rRfkݢ)' } #+tǩ#*WLK劫[ϫS;uݠyaqZ%qulv< d-#*6Sȱj[nD|^N2Psg&/dMy?RUT A)S̗$tOϪRJ0` ^#)moIj(‰߫C}f#*NϲeQb< #)pIٶ@kz7s8muq/H2>t~6~ŧB*E@9[>RLQ (dnLلF@dd0JD pIe!$ 82#* fiY;m!FL=xGWc'dzuQ!j߆a6ÚQI `;{UR&nFYKpxTR⒵B~X:^zmVPGR#2P.=BriW#)l$; . T,{?6PHӂ Q 5A~Qw|'x::J1Ӄ>k]NfOc+lr]h{'Տ}GnŰ%UGDB-CQuPs_Wu[PsJd&.B$M#*#*b܂Hlyၭ=2MZp܈wFlZmoXB CQOb׾DXkSێ/kq6#VPKtsTK+Au~km7ބ:òa,&q\$@ɯ׎K#*J2uvݧ3ǏH.b2e%kۚt=#*ctn^`$ Mu^Q`mclR5:<0yuvYIVssBiT,[g$ȵ4MF`{~>;Ͽ-Z'kjy\PN#)B1۹yy#*՝N'e:͟/_yGm>StKKP}EjIz.^/C`xk\;&TZ4 A)rln#)#* #*n QX$ j<#+ǃ*CؾAV|4U!Nä+mښVij9(Kc]qXK" XYHq; tvHYlN鹱{N#*cr6I0ű Bt% w{qWM)'NY @ V6kM T(X# cN O#)@#+]k"M~ڎw겿~մđ#~X;ux!F2n÷#abߍbHzGFF#'#+0E#*%ArJ"kmb5j"H?br;)X`4U{5mGs?y&G&mfkBdٮl2!\"ty\MPg7;ϭ_s,uvN Gy6:$OnK,͆$'i='Y!as#+Rc$a%`u)]#)S%SEĹHsIh1zGz)KܵJG9jUG,Kϗfx6#.M{={ފg6=!FA#*ه<:LH;ޝ53ijlfIbQMC_o"d!_I<`''% .%9zlCۇ`Ez`|cd AL+b['#+K鵱g?Ccjz\[Be$#6)RPd:۷rhY+{I#Wy]:e%5&VKDux#*w6ޡn4saJ#+S_S/yX>p2{Sha,s|t应}Z6aY7箜fJnP.nS)QMݴ&a{w#)x;GZ mDd\n>i=9e9{MdP"H}#*ws8{A|?cr?I8CeP}XxyC<#)#)@#*ϏjLIF zwy]ǣihBqGSi*o􎦈N] DYdR2>X9ε w 'Ƞg7;Z>Ht*?}]]%콅x_dW'>&X1UD bVnZ CU[ևL 1 ЯI>S;GW 35[S_B#*/T ߐ20U*Z3#*û#*|5 e_c$=#Cv#)u0q`8Ijoy99s0d$ہzLjb#Jp2nF!~2s$qrp`'G/Rq֡CJOg@0O:>|ޠ#)ٿd@)'74=#)6:#)_fҍ#+W̩-#7^h c% ~( !ICTUE:5,OZZ#*w#+Tsa%j:`|sx<9x`7#*6Og"w`PjI&Tp2߬rs3:W˦]Kgϧ;H%C'*wˀ>;@ rA[g+Lհ"􃚡EM`wA1!#*p #h"H@otۉB{P^= [66"N iUz-\Nx̕l/lD$wQlPʟ__-:>4-ҀxBH",bgrx#TɍYD>8ydT**n %,"p~6(ϵ 噝l_Ύ7 Üw~՝o{ޜ u7kzs#*DD#+˲*m-h `>rB#*A#*!a#*lu84BG:R쏳WzY~6"g ,4:/.˺0,Bd%hAk:.Ywn}Z]ttU_; U2H?ᡑ?zVC쐡,`067#+/@zÁaBv%E+{{w}dP(A*JnEލepGٺn]C9Qp]q#*v˴[Q1\rU76$.w[S Zօh҉&/Ĉ#)a`dix|šky!->;2ı^'s"*St^lo< 3@k(P4Bx"sށ '*7槒Owa* 4/olr]lo:P=?Wnϫ1Bbᤌ*fv5à؄tx~JE8d_y%wBwsD#eўNѿPh8#+,j{(*]{anWYJ}GJ b0o~ qctWXUr}oÛzo&DY-8Bub8*b #)QA[T?9 =d|0(Cx:'IGGHNwS+-5k~W9E0{}#*%{U:V^B4xVscߜ @uTfkcD;!x[[Sufrҩi˃a:E8W+ç)#+QAE`wRwgyOխ&iLqfeκ`en؀Qz('ntZax_&z V*]0{fX..{pHYثmy׎00'w1#*h\ݶX@S.y~yel2ozkST!n" ELѠjJmz#s:Fe~@%qTl‚) P.lq\g]_I#)#) p^#TY^gߏTG&ʓfgc"#7wTdF괜ړsHY/<ϟ;w9OTg٘zB| #v&w(Q@ Vh39T,4ć#)[C !P@ا&j$E?UL~+Jȁ`P)@ %bx#GR6نiXO5(Պ1l}{Ҡ} dnTwͲ"/io5{mF#.̹#+"OcʯMB2d)~Yrr#)= \R&f.A )@!L:VA$)rRIǣzG3[Jn=B' F:~2t&fHG/;BdǒPvLdd^Hp1z<_ޛ;%Ky@DXvt!p}fbb!|X[[E%%Ov`9l=ug3ϋZbjD)={5e/Ca%Bqv`5$fEnnL/$ytOL\ 1VS#+äB>r/b{_#) s,Q` |\|=ihBФ+8_v4x)z49EJkuj"&lZ_}Ma//E5UVLq@sٷ8@u1`6 2߁`SP#)Qw#*#"1jEvjQ;I|r#*nu: #)\ kպu^ñLC@8j"Yq'r[ʢfN=3'>#<4_wWg# ,)'Cgsy~Qk|eBmcȆxe;+#*p}3ez&;1r"B&qd$ #*@ cX`DRAZ,)d3#)a8wIӶ={ow !a*Z|.65sZw}"tv˃^YxZۯ_IWfQJxף{q#t:e9o&u-L!ZZNVxn4: ([F:sV(#+#*daÅZ#.\,X|i.d_1ΊhpQEq$532s]"zuhuLZ+[^"H_E{_^Y-aLn1ù6W&̒ c90ILhs>#+`HA-DZa#*\'#)R4PjxIҖiknXaۻG-9!r=lrTq8 v;= QL_n+5E!T`yXw4Aua#*!DCs#*5T pTPt!Ma!}bI#*qɁp#*fMQCJoH^陖XKa#+ ԩcHs-5^:FuF nܷ'b<,!ьS5Q\Rw|j#Zq;v#)cDxM]Q4٪f(G1ЄH.,85IF+:5_`d{S_OK[3z#+tusYe+\\g؇"2E3 ޫHʂOJ{ $1ZB!B@&9͗c|<Y^~166l tV_VNכ˭<ސƐ0\`#)1PCnW(#**&`%mĨ G@PIyѻ#0LܦdYܯYTS}kl奵NZMlug5>l:#' 8*xd;D#Ϋ#+d#+X/ef3+я6#*MZ8g_fzy AJR]EDibѢa #*;!H=(Q6o!UJJP#+ !`ʑ=kӊyw+#+O׆z_fY?8tEdrP#)%/؄]?[Zvٛ&Qj&:>Ϸm̔#*Cg?itӥCĚRT5JDĭZHŁDBSaJ7JUơphۍP?{-X+>*T*ck(%n xwsH`{!!%-zw>I#*P*A >;iDGN-#)ߦ;,rIo^x)="%Ԛ#)aIf]ؐKd4~;H#r"*X4GZ#*ʛäA=0"A >|/ R韴z5(ؐ-hF)w]cTIʝ{m|#%Xtkp`]0D[YQᗾ3dvxHInbt:2Wy{C#)X0 zLΠ~}P6T<&zk7VץwEdwin\i/E՘(x@* #)4d2mcj墩i,TQC /킀ȊH""" #))zmKnS#+;eQB6E KVlUFւnb%Ȱ#) ݁uy^YWe5xע$xpMnk(ݠ66|,rl@$~=$.4e ET`{ OfՓ'!KQ8!G_r= yib^-8f|HH+]TѤt)mQ#)I$/,V#*_=}Z4w90Uomۚ4Xif,&t9YؼG#)N~`?՚ξޜ9öd[&UvBCc*j 21aYF6(~#)VlFTHmkܢVHcQ$4hx&4_*J2-#)0_@/d 5^=OlQQv)-v|5#)zNd[mK#* IU{X ζӌڹͯ>sE,#)X~6$#*H@`~ykIj+W6\3aJES0j*Mlm!(~m{wWޖr8@#) HAdAN#)5(HwI=8*i|F\"ndxW'h=b@OB4OC/؀p|#*B">! ]O\zjm#)H0cu!h Qˆ?93*NK2~G[P>X QC .ozSu%ٸ6E42T]%rNEX78#+^'I byg@"O#)bcFʇ}GU|>/ׁtt#+ Ę?|#1A>WbFzbr؝Zq5 #+P NC>+3wf!t2B"b33u(7CĀ#)B" )**;f'ήGEfnCD,?2ƚ*#*(D>އ‌WwkCEX_tP Ebx:/ˣpMPb7qBUjY#)0.fmQ}t*;#*|!Gç=ӎ#)ɍ7>wa{3N8N\uÙ*C{#+~YrBYa b3H)}F7kեǁb8 Ja^XR잠r@vLxztuD+A*)gh&ܕ0b7PTFFQ8o%Ƶ>kv(M!;2#+!#)FB@w ZӰk2p#*4n;ulK lKr&Jfv5w&8WmomR"Lyt6Y7,Ln.-]A}"CPd^DZ,AFs$L94OVD`vi,nOmcc"Yq/7@uc/>ӷN۴Luzti9ML!vkl1,%aoq.¾\Mq(|5H}WvC0_#)bn*F[fUnۦBe١͎MglF2uE#)K:S-bWm)c[bfUT7&a&"A#)'\= Yx)ۋ0(FBgrB '9=z}]oXdMS6Vh[hֹ1T?hN (Kd*Ex֙1Uh1Ez#fCDň$X=h,yj󫤮U1UL gĒ5 >"qIy9o$B3{@]k[j=cj7kgKm&ܹ.Sɸs4 JApN:lEƭm2L?]pYԡR}A}!9Φ(CvA />!!hl5Vd)p.NE# кXX)sC n@d#*sV r ( HWÃ>4Dg1 $~̰$#)#+A̬ hk7Y LBFWS#*#*0dL0Pqgֈ="ɘj8NXRzA#*``(3S@FQ uu˯.,0ny~sxB&}$qMEdN#*y@TbrȾLk 3O3pd١9#)PNή|by֋Ȳ:;Զ6] WdǦOi@,I#*[6q>r.0\3kz(dܝf_m~X#*)Qc'HC-&#+TDhvOidAsFZ%α0g,#+Nw3%@{no,n< πh{*^#+c>MÿaTZac$/ \)(DO֔#+ yh~ b#+1#*A+$t1'?]& P#*"\PAqz(ғl&7e =ZFtHF}Z0"'?=4ķQClV}Gd GH#)Tjn(2^ԕZ@yF):6t:Gka=8fY]rmUȒ^X>w#+IT,Q2xQ#+\zHy!wD0Ǖ-겑#M$g!S`b>b1X2EH,ckmy3OFkصj#+2j!FNCY)hS`6cHϺpTc *aX[*Ee; mc#){Zv#)ƭ$5ُWL fI ٹwXU0Hzq"LYq?͵;D6C;#BT&嘌#*ؿƛ Î&C'Xn@vEE#*b6HB 2&.A#P;ZvM˒rZ@ر,\/ĥ qJDMCsAAa% fnh4Q(Q#*Fa#+a&dl;7-2tp#+ 1h E2V"""X0dLU)hn8Q4-" X 1fȭ[&fVI]sYML5# I^LƭΠ7CJ=9t8gf ˁ_;*1h 'bG+\{HƉ#** @R #)ٰk/I0GØ̺>|ƥhYJ)r! .6XD.=ZΈ68# >eр44-Wt^agtzdMtS[w /4vf]60TSB(N5gAF]!&|#+.{+Empd6&M+&Rh9jwpD -0>-D9Kg#*B;ün ~m9ggähAdN9XߛN|ߣB !DDE%#*&3ҒCK0#)F$I :$sMeX<5\lda#)!y6:1@i5i$#) jM%#*7&&Y=5{Q#{ /NR@Iu9Y^|6b]*#)4&̢&Z+NNr?#+e),̸b;}< @Tnwx<>xHB~eA`VEW-[cZڊڹȀ2(A!CB<5__#+):6۹W*@33p:Ks#*#*SrYqS(hޙ #)#37ZuKEF>6%vۋm%A<,]\vidZƗCZF|w.vc n6_`?YB~+6& pʦAJZ^oůbc-1Y6#d(a;3çQ跍bLQ43ٟc7aAfJg9 W8Ć62i\[/czCH `MWSaO=G"!vNJ/4J|,ܸϞr%܏}bD!UVm\jQJA(U$I#)ؙ1[WWpL~ݶYw1R(2F^#*>p}1c"$o7|^ZܞrXLg/.>^?#+5#*j*[iӇe*t*.#+mf8XP†Vڐ(il_zРQgr IWŭ` L|dj:rߡe8yacniq=xKC ͮyap& EJz3\{e%+ii(P?K GdpNB"T]SbY=P#)ƭu;/N6m̽"lG9vefSnIr'SV5:W]v>OA8}_EqAi9*HgtwԜ#*Y5V\0>x$IHݘ5ΙwJՆBh`X;!67LjL =_mb.Pq#Z'=嘤 :5% ܚ 0{01lGjij%\X5vxͽ4V 4ZMDx#ccYwn(}q|oWa3:;1d9LJn5͚']ߗQt\P##)^N:82%pd"^!\(2CAl(jS }5\7HIl^mK a+a[*ɾU쌦!2(1 ٞY5d 7s%}.oͧ)8RcLܐcZX!L2@&hCI5$mwH0냦`\%Cj3f HA А#č5ND#*@\@;a#+i[T싇ZN#)]`rmepn%>PiI#+46Ijv0,iQ!XlhpNVNځ]#* QH.q.bJ2E 6zr'i3jR}huhf,GmHBfY|c90B P!j1%EN74BbeӟK7mppRj#*'5xs/ps[Dr1QvkwgJ]qEBIB H9amoaq&SLMx;dv#*o!Ձ8fmqKfs%O6;!,HD#+%'E@IQ(Qn\11yxƧ#+3[TBUqxk ZG-,ʃy.vX̼!$UH-G5fJ1[s2B9H4q:jn21 O)&PmV\[lf5,yULb0vBW5Y֙fB0 +.2#+A1BP i:c=Xj8rUW8bvgN+X0N4a 9q{"aN+(0e#+Bu R`hÄE8($N3L#ItqFXrm\1&ԯcQE%*rK#*t1#>"<4[K5l^;6Z|g95{dmP)M#)$̠0oj9ّ4tP)QII@x i4JLٝTwdZ>h!#)4BX#+_,nۦP&R ˰dYٰܱ>!W8跎Hy}hn|Jfn#+e󍙍>tCʡW4T΅J.cvk\8RҬΠ|`5`pG5DLb]CC[.an!!aAWɄӌPiI+]gw62ǭf 9i7U@8806Dr+xW\+rkǦ-N\)``iڐ蒐A.NGIF1Hcfx˕cik#*F %DvJlRQ]+y"9a48yr26(kXml.@!lykCȡ#*F+2fis l3YU)Q#)e2ɕ%d#)rṙ#+9Ň32ƎpUC=NA#*BÙp+q%ʁh2\f$#*DN4;1͋ F94Sld̞)Iy#pt( q3a4nf:ͫt5a23iRR8Ƌv={fͨss!Dw[p #)C@#)búgTđb% P?IMDT)rR(#_GǼ= I$IddBO}QcQ"'T:FԑBl@Q(#+@D3#)P.H;ߖρip酂INUI>܍VCuu v,ťkFw-QE܋h^uL4&Rc'j_XGxΜkW g``f!xF##<f-[,pCp"o ŵRnK A#pB: 4*DQ*4kjIQ#+"PT! &) 2Щ 4B,'^8(ɥgp2C~u6|٧b *EUnR Z9uwu]26J槗[vK#)\vcTw;7#)$3C}C̡8jQaGS`=?Htsב}+&EA-`'c̾B6zfiZLPOB0@cK.õ6x e Lfk;[&dBboQ*4#+:\sqvΑs.7 #4"k;ϵ"Û񷇀\b^z#o$57=~_bMIL*ѵj$Ƣ&IfDQm$Be|džhԧ#*$2]v@YC摢#؈Ad#L#+$Ej;HmUqyx:osש2i;kD{5|)KXQs>5a$'-ZDW@Hm<23+i0Ʌ#H7GEi1d#Bn^ʺU|zބj#+.Ɍ[2b+aZ\34B1c@s23cw,!hFX#+D]Dh8Y (I@U~X8M;&Ty;byޥ\7j." C} c* 65$*G/z.G5D; tf$^&А6fjL*qLuquELhF1IoGTK&Bf:ql? #)=Iz{J(*-!VDS04x#F%ƅ*U#*D30c#*4$!|Kxz[4g<0F:N%E`֙7pQr0s|## qe]cCNHgDҘo8wh"4TuL4AѴ-ㅥjAl"$2kBTLH#+gN6:Ů(lYM{^ZH8[3<#)UehNå=(JvnN#+ˑ>!5#*-hq\Mov΍^AY[ QYr$E#*{9Y%leʵS0:2Kl4ivlt2VV1Flc6h9qH.KӃƶ> s7a 6WIT%/4嫈DSNDIR7DM̗CsF7ʚ1NͣqNv˧~Q&؈h5)a=`C8ۧ E2±J|&-M 315ę3fgSbiyXzMp\J}d3}xdǷW!2dž9l4(wMc&U/dآsLggjRP@Æc$"1a9 czպR,"`L1`mYG]qK%!##+\P 0hHhmQ "D"5P@@`~ V,0ܝqJԃؐ"8qUv;bMI#VeH!V75t*i5t)7]Lb @a赬fn51b Hh$̕5,aii۝C6O}od@\b*FB,Z2"S F;iwo.kGe]}y,n#)ת 2!MiK٘ˆWhJ~=;6@=ں6v#*G][{LcښPP,;n !&'xQ\̟y^)6#*iXVYlQ2$QhќRh4C D6D5$-p#*9m&R(7#Jh\#*ch7#*KT3 l Leq,TCD.XUTƺ]$ *Z1Mnx$WUc^o#M! yh^ QÛokٌ4!L }IfzIYS*#oӽ#*C{c2>HT#J)X`hb!EXR$S$>]Z<._; 8RN0$ S >&¶m%ümji&4jRRyzj"@2>8#*>w8篌1vb]00PȵH =G"3Tmpܡ\}jsfF'`aZt0Qii}'S~UD=9J^P'e\fz:qyD#) NbCJ&&@C8DϾw~>gک47uEi΁`sCg|#*#)Q0jH¹(7׎74Lmu#MCgӗ@&MD#*Ӓ5Ռ-8vI9:bˑ(K!1€8rUb*^zv3VT.4;3sΌ9 b*,R)`f"DB *zIJXB%9FCqpGH]iHtGV#+ $iU8@b# ꢱ$\YuJIKNzszLo;؃S>5&#*HR*ZDI4uԛ3X|D$ "de[tu࣯֭ Y8,ז)B -XLT,KԘ8R6y:cّi]PA:B'n3|s+tF,zvlt-~} -$@U&j*h9;%D(YzwܰjN,0⩂e캒E֗zr7RmdL$'z^^tc7mww@5*Ha(QcO;˘씼UCV(iH@M6;"说h4z&cvD RMpuHwf=5~/k]f"~tZkZhՓjP:U2df`mEouM4m(֫iTI蹷CYh*܌Xѭ|iEUz^ּnZ6ɫikm::by) *p%\TMH#*K8 BЊR2DZq1'+C oЂM2PrHD}:Y4wfa#*r5lm؛= I>l#*hov^J*_r-0v&ଅ!mOʩTe҂WK$2͆Ypt!U#+#Q#+DUKL&Tju۪f^#k*7/a7 f{+ab( dYQy8ൢ:u-Ɔ#),I)M3#)vD[BNgٌ(4dA(蚁CϮmwQ,#*A {k Cb%58\4jm9Gk DT]dn&ߥ=ŇwuyBU?oG }/?$D'&\^ọBn͟C!ϼP:͍؃#__;^H$PRID #+J*#+DUYXDPPflYx@ ,%faNk3.?ކ=3R0V(,i,X)6B\r;>SSQ~ݫj D@$SОģCN/PlV_$PewGjBR+Do,11Yzqa8X8j܉8:Ӝda#uA5m,W5Xi.̷ܤN*^D"ta5ٰTY*6.j,?6a&uCF QV$6ky Dj6daXZ? Q֏){~]jiRD@]C*H0Pr5u8bEXwγ##*fQ"#+RfXj+H46fP)11#*YTdEa)VkBS ,H¶)&Y#+p2SPa DX!l #*m&46!FFs!0! -&h t 7 6ȫ#+p´XLrt5{{wvwnksV6+Q\/xĘ׮K.odI4\3lApjӴK&Di:3ui4Z1(\'(2Ƥ#*0%I@ 8ZԬ<5MSX3b]W?4}0A,m*[lʤZxpu>KϦ4onnMnq1 ǞVqz~#*ݣ.H( MT?< 0X1 EDF5*Y-Uvƕd[,k\WRm7[dX% YPu#)IIn>aXvj ,b$"?y}_A`5~UX鮿w}XQc/rCCPbPPBT`T"P*(R$ 0 :njĀ+q3-" ^8ʵQ~'G^J8V "ujS6ak907Mrb&'D0#*dIP0l0FfjRFy#+!l i=5$wL\jfbvC?#)8 $j<#)j4["ك RRdLŵ5&ƴdkev DʙignmjlE 3X%lS5T6̵m"-(M46UEͦ}Wf&N~EӖl$"jp+#ֺۤj]Mk\#+£רIi'@6Ѳ6s6(崷ꐒ ]^FBD2$N80) 0ه|1q@a>VG{1jC~ N'( %J whzӡ#*Q!(dI-$$)#+@nAE"#+T3=\ׂ#)% S">ʥm#*%"M\˨#*S9m+.!Fb+BCCD6LмLӰ,X˕;:>1J=h} ~nkIP)ItSBe 's|a#)p -A箐_ϑъQ7oE/6 p)ߑ3')&#+Y A ,S4]P&云keeI߅׬z_;#*xoMt#)O 1 򢁴!n[$#M0 )#m$_/w )b`HE)*#ӲvDIUV@Z-Qzal 5Ov= 5#)ٓ=UZH_#),H BʆPjp jETq14s#D>i@ L`)v@Ge5ΰ3ɗI#+53@!duhA -͏--14X dxa,H2:#+0ҁ 0B4#*K ) NMxvi=>~(:>0C.j]$N$dG !ETBG|bOb~)]fѷÄ!,4FDZ&NAB`5ݮltf,'e[_e緶ƽ#j0QSASR03RBnFP,Kح^gDILy#o" $M[QR]o((|q"!Ī(Y]iu#|-0"`dKbz $mqII2053-S.80iq*JʖW"Ka'nk#)DEOy$($4#*q[BqK ]FCl &Me֔ je 5VWE[$FBq?52wbhGrE<3U6D]_1"bv'P e;deg͝Rħλ#4=*v8ZmP^OMWMs(@d'/m1 ,'=QC0ֳBo~[5PPZcyqURE^u4^3b(ޖ)DTqa[PxAOi#),H#)vgom0WWۮ05j( 2#)!GHGR:Dz`JX#*@\#)q8R`h#*}]^Hjۼ2jY8}ޗVI M B$ƒbjĈ&MmRmZTH2c,@=Bd?vi|%Bn%I -[CbCCU-0 3U;i]=Mұi Ʊ4 I^e^5%^;WKj#+-20,f(E΍gr/E!cLL9x5bP#Xed9di%<y#hH$lx0@#*9B,\*ii@e3lb8wn_\\;*gjI KU8#)ʘˊ| 6'!>M-.rg^Cu ';IÃ8'Iϭ#)}t%u@1$D8 yK*5&Z6KIcT~VLU=lX[$)#+a 0?OBzKe(j8 UXz;-fC5"ˁFˊ׮|7ׂ02W;n|G> iؼ`Rv@ !*nQvRջfMO6Bdm@8LZA) y~LM"&V\s!JDH@zp.Ɇӑ.ǬJ [#+yaB`*  {P'6G109_(G1>Na{{D-E A!#'v#*sDc/ytTa_ 9&-V)7EOi˖8΃=q#*~hiѦ`5b$ &PoA%IT)1`F#w#Ij"hkXH咊HڇX&O>%2jlqqNF#rs*+AZܷWY4Քgnںd54W)vo,d#) #)d:0l( }~z+MzPSnk.EaQ,#+I=Ł?5`|~dd|؅_ۓcP&ڑA#+ڤsc ^lxl6%jC"jP4FXl=j$RZ`#4 g7N9S-VMdmLOjnW&VB~l>7 Q#)2}MBM=ZuJtywϩy'|_h#fQu:ea sl1Gk}8IDdP+ğ/Wo-ODSR$]'v5ÂkPX爱SX%DA&?9-`65 .Hy4#)jP{݋ BoQp|. !;‰+"d̊aB;)=^ycK-L7"O譚xޥs,LWkC;9y^y[uvdlpIfmAk7N#+bMjFnYLgQn-T}jctW3d7MH0`yo#*u#1'qB~8}a0y+0#*HH^zd"{`{r}sdï mg;6Q80;qcd 9Ǧů!H(zh{+qQ@f?!Vb9HC!?E) jK~`&#*Iy$ wm١#+ X*J >$ד:.g"gMZT YlPWu WS X( Ua[#*aAN{-{g#)]!7#)8 2A#*U *B8{K=yztgf#!A@҅STU7I209ux/7D?qpkA k Tik"9qE8Qs,86i-2wCc8wF6bb,x3Ϟ m\YA~{#)^DàQ =t8x3jjgo QW͆ E#+YK"r#*uSl5X<'Z4AvX==Ycn#*dZ #*}Vj$qy&i@r1i(fC}`jqҟD^^X #+׭QHùYi6 tӛ3,ۺUY).Y A@1p!*$#+1#+E45-w%WȊ1n0-&`i%ehCVS1&;"f;jc ߻.q#Q7! nL@67v:VW ˉZԆH#*2M4tq(6C NyVu5H*@qiM(9yCKugbY#Vnmm8lHjƚE`h1U)b#*M$}&ށ v] 1̳?ф7#*0.a1_#)ǩsSb<4$wO.y~nl\IXWي-d1!fkD7\``HZ%Smir=S|qS^5 a9UEfT5p#*PMOF,bGI1DP#*Ы()e z9R AUnnnQh P4-[y*6TC H0c,%B1TAv D$ЀrӁϨT}C`奙a'44HjZ1?h4Q>Ͻoz4q=6uߡ I[]TXbjDפ=+F' 6#*=)doowIعq7M^O7ɫ;2)eYIN[{7tn(D$幙ru7GXg~{ϬO9..ݚ>tLa#܍)*"e!柟5 )NKl7<-6lCe~홦jθjRNC?S|pO|{!0AdȊaDl- u%>*GBY#)! ΚywwM;y[J⫳kpmRm]bmy.;s!ίQO XHJu]ݫԪ4Z[y6[7V4mm5^|Y\ٻ4aF=F9"]+b*Z(Q"4uک皩f^.!{,4H k^ֵye#*b) @Tj)jE]j)XfT[cQZck2hэ3T%D̘J(6@͍mWK;)@"g ~G!OU4%I"H)e;/OLx~?EӴp8#;(s/xI%M6h77z5Qfַ#+OzѦn#m;:JZۘsYnέiZ۳Y#)#+R-4}6!7eg"1&Y~%_t($D`b#*7`Ij #*ȴp#+a#*_GPm+lr50^5+)6!4o@vu\Z;HCq3訅]hʈ<`6lmo$uQpA,[w+oei8coE @fꗺm]-kۋ3#+"؀b-8#DF-37lZRE=A!¶ު2LFɫjUu\D]"65NzM^[f2@I@qqH̠F#*[F٫Rmf* 0#+"J#+#+ceG,B0DdА%aј@' x8 _ xgb1/+=]?'õX*x3&mYvgd$k%۷OnhUN$E#);KHFI$$ h`UH Oǰ<3> tPG;Q?ʛ&6#mѣ N3*zQCL_!eAwsmj]F!Ҕ1" gJr;S6|.;#*#+bD!Q Bt?w>,Yi^ygy\2嫆uf"i$l&ʖ۴%(l` %͹\^M]v9й]ݺEroJl̷W.,hv6V;mnZdJXr2d[tΚZ39WlTZ4ri-_y^j#),*=P #*; D!#)zw@g b0#)vC#P A;al@ExjoNyx~{ASq)| o=E=&!p(P&Ө`#)7 2#ըfi}6r[b )T\QEc#)L?o&5jjХ&a>I #** +WjuXC"Bбc 1Z#)#*IY%#+U„"mA##)l(DtR]0KDdK#+A`Fi&ŭ*6VjBTE+k3PƆ٘\.RH AL R$Љ! @X(&eIvlI$T8‚OoPʫ3h} H\U3*\c@zyd4 #*7<'W5R^#*- ȈHqR@(!]!lnq)7n4}#wIRBB@WtFЦ咐 z XLviQHm-PFkxyӱ΁G#Ihպ#*#)%- X#) *@t* Cm{Ҿi]Zvͭ#PZtExO\My'K(Hz(?ܶnkؘ@sj'k*mpEg/<5괹JԷyo!,&8(BIa]f<dTL1}#)0'F>-A*ʫm+Xim9/'zaaH>6 邠?Dv#u|%Dtop dP.ҵinʪKKsT{BhsJlo#)qoKS;i[zN&GciI4A,3EE`>"jܣ=<}#+J:.(+ EGoᢘ eeta>75 /#*Pf#*IZ[{&6ŶT)y#*NՍ* VȺx$LdUC#*xYLm@iq)37#*D#)adƍ-!c?;CqsbtdVެW dSٜc$}%9UNl "^ߊ%Ͼ#昦>YmVЅ,.]oF3qN8L- a}d,YC1vU/OU n*~D"йgA\}yȿ6&hlsҒ& ^ |L5I2lo3 A\0COL襨$D3MAF{k<3r?nr}l<X+5 `~I5j阷JI !0$Deh#*h$mY ϨH#=%$3XUSGRggYF`IY_=># e߽ׄr- Tؾa:6p&P{ wh|Qc!i@RdNAV)GJ-tfuw-*zf-paG'S⛄>?#+R ܁ѹmQv0/n83'=1K)`ĖȃƧN9#*T!1]OCJ z1SG#+,62RopiB#0^:LblJà bA$_ #)$PG!G/` $$""@ Cqz~X*G2pz cCQNq#)s#*An#-GCs.6c;7Ǿq1qq.tr Sյmh<4kfDW@~9({5BMJu;ǶH@wQ`DGK >X G1ci>b"v`U*^yH0^:=#)IKB#)1XH sZ9+fee$^~zdz[-@'ӗ`i! JPų?}«Ln39/.);̩D{%[џPAo_]HwLZ;u55(tЇ;R:R:eT@#v<7e1*2,Ε;r~j2ZJ,JrWtU&b-[5jkҕj6d#**ԒD7!й\u(F(zZ#)E9`g?O#)FeRDh(&Dj"%JHIdP$]'6 'ȋ^d;z㷇6]yRMv̠0h5$lAQR0%o[=4 8oG4߇+k09vg\vru{R2L(Jِ11ޗ `-MU_@i0bVǠ-Mci㊇U'nk٤ecjTCf[ri#+kk5I"X@ɗo猝TMp$ -e*JVi(KBjEIj0 Qi@FQU;JW+ntd#IJ4f C#+1&1;`f#+nJ.0ɔ6\P2#)(PMixW.,5dFr>\fT#+EHSH"Ogi-knqH܃oͨsp!4\4E¿gm#Iy`ppln8F11!9Z4c#*'mܲ5#)vjH-M#* @JrSM#+a㐎(Ymۉc"JibnD=#*bUDV).Qلm6*НaDE!P1Cie(lo0QZcaUJ0lCezOv9*A)V(SEĴj @ŏѩŶeތcvCg@TF4p֔ԃqs`UƫA@2AՌ#V M3OK .U׀AǕbbJ ,|u=7jdtEƶpf3fIkRPn rnbZ@<(ӄ}dU*8 ` w3N XդT`hdJt.h"dj!B!SUPj8Ό@Ɍ3@FoЈ/#XGdm5&Q@ݤ*W:22dI@PdIH*(h#+Й BA(0XѽGUtn\LA]IqЩDYcYR }#*<6 `᪢8A6( =M8@ ) qen#*nOdnDDayQ]}XPXѐܥ7j"B$5fl7Mrg +eF"&&8xt$Z!LaMHZ#*(!BQ!bJ"524 K7 )"#)8Zhp P;zR%R%Z+wv?ytŨkutur;rV;|-WJ j-(Z6ɓV6B!X.Gn45*v2,PݜԠY鐒nL銤jC;(Zr'Y "#)P1F"krAԤyt/}^T$IB\*dH0,痚.P0#+;+$(`fH؛;b1komu҇w `wJ .P0n@bƒ֪Q)2CYrT PjnkeF()fC B$p#+.<pd͵61.X QnO͊o#*o ;#*/=IEJ͞fA  ^#L_Hpm:/W~^P5R@[Ery%C˂PTP'BJρ܃MI}[^`z.Qrf,C^&پ9TkCOLKgueڂ7~#))%#)Ӗ2ai|DGޙAKed"Iy#*EP@BtHY|,fcn& N.=FX,:V*m(z PTZ-:#+@'?`{*y\Pȇ`;b\؂eb 0NRQmTޤQUsk"U Laƴj樤0mEMg#*Α9H<\fɱ&ě#m1\WHFɽ+d{5b[wV-pTk9[5d55\USݮEmA5W"5AKpD8É7cu=#*Q_g@QZ4׌ę6 ][7RD"#D@vASm("!bB chC@M%^B3`N"vTsm㺲הQRN {AD! ۇllkTE&˜SG]0􆆀\Z#\bl2 (!mqQ#+@|k.1b>flQjG4{Sv!ܩ#*k;Ǚ˩R/]rѵhք$@!pil@z%3GQ1TUwp̤BGtK*Pto=Kao~XTٲ-?dW<`x7)Kբ4/!ժ0#+Y*07ɫ'șૌ*'#*'$;,<βdrslsB>;Zut~Ǻ)a=igWP!>#)샭^(quԨryqTOi6.YRHTwQlvrߵ`n=Ҭfޥsqq07%5X̪qĨuUc2|oq@$q8ܝ=U2moqGnf{c&A31o#*\pׇizFx]YsCʗC I$;/O;U#Qa"#*`cr6b#*;w;\kg#*/+6kSb1ĬtRrAێ2yu-1Yf>Z!ۺ#*O9[ҷO%qK$xF4^DtwqHrd3'8z|6ș)Qm\z@Aq=0zJ1KR_)Lt;Rz[m88פ6e3ZyOܞ=#JGպ6de6 kL*YY#+bJںr%ҩ#*Yywy=p'F򪋭lg/=a~U0˾{0޵yJ|]%.Iwǯ;#*[qwb3vXqXic8Li%J'ş3s4. r6Dt6cM,ʝ~܈M NPP޲s1fJeީt[h|Tl1')'#+ )@#A#-qlߣqwas3iaHN(FN]F4:0a(@vdym98ճI6*fN#+*5/32{\U"*PQb,M ez]Qk]94nzFQWLZKB`c5I4q;Buo||- #i5Qj(dvxwug~E5db#T@/-lZ/yŨPĠ^4n5sNx/-kd:ѝc=Xt牻\!jm.;uW Өk vGMu7%Otn= ru Ǹny_6Y_XL0xNq]3Ͷ  xGT#T8bWo){ɛ.eAb: `PnQVt#*~#*s!tV\~ g6;4q[1UT4u-)12vC#*MR_gίU#)=idO8Á\v2YͥB,#)_`DamlsԱU%&FbuBD d ShXЂ6c#I#*U@ x"s@ACUkzVnkQZܵl(vR,u5*2ƔTE#+2($F3='3-!#)ɀ۝pR.4$,g9+x܋cm*ζ[EW-TkU^]{27#3t9t~}XeR9c`#+D"5j4{nm֌t1h]2*vlZqU')fMAC*#Hz2Ƴ,"E#+#*aDi6K)a.+M1@%rQSO1#+|'XuHW>lL#7T`&581"v\jV p#+1{zԦZ;YMiMkT7 glԖZtsղ 6Ȇ<`"3@Ŏ ōVP˭+mIK_֧<ݣLd39N+;rDHcBA@ic]cwC1!sR%4ƮeoiY2R .7 R ǷVI'tR٫#*w4狮.D)l|D4< R޺֓cS򣜵.CZFLdq"7*#+* Ѹ0m0m15+Fn-,za[ tC 2CdT]&09EZ*#*hFemF=]qD&Z㙢͈аiSqWU[UO$*7Įif:pw`cL"b[cMUSWE(VUZ1еr3L=&g63r<@5śıqɦ3NUm!C4@]Qj>( QsA_-$u)(h1n#*`9e4.vOj,H,F#+Q؆v2I-;V\aݜae2mMڿoe&}vݮHI9;'b NSfƵn1Rnq(0UQR=M5?G5{O{x9Pv5b,Ve&8O'}`o#+2;GU/dJp'ih?wdPlR<gosn7m#*H1"a~rwn͛UdX\<B= r;ƺi![kHポ"̍ge.AQtCȢFO>!I!pN]{9WQ FN~ʈ\ѫP #+?3VmD6RmcGZͦƥ#+MFkb3]VZJ}ia, ˿B 3(d"ٛV t`ϊ(TGaEi7?,5XC82V)#f#*UE"#+tF! `#+@qܓ I%jouݺvs^uy1FLX#-(`%$&j#+8E 2lZ( XC>#*F`rgŐn.̴JEIj#L!(HR:n`b9כ1U"tqa!o@D0#!on ##kmA(*kH"p#+KH[ŒDI#U*!ѺL@id)JqKO5^zݑBW#){8~rzdHFBn/~̉:zjپ^H%{҉u:Dx %BɄbce+kS4 B+C",dr1*጗Yxx*7߭*K6׭je%=WTwLMKjDCHĎWػo#`="[S[dʊlA`5%4݊ [ByZr Z}^`z86WҜJ5y<H'YN}G}kɹvSIϜ.b'zFIJS5OflSc/2B I<3Twj7V<@MZ?nj2`#q%A{NqH R,""#+OzGq1/5mPq#{=JaoǵG3x%kٮ{d*hU0\Ctbt^~I;L X=;/#)'?ehO;ʤA/U\yge)^=sDi~{u#9d,٬"]!ntr #d+}»H|YJwa*'*ƦxN#+G x(`Y#)wfAjSuV A/BhI9Qw.֍8e$R5)&n$pc#*҄QF¡0&9팈@p,@2g,3cvAK4"qHd:K'[YlK,䜒aFq*Tp(67ۗ%/F~yvE2"97@1-$TLNIgl_NVqLɔ|e)1>}~Dr 4vkc#+1e2nмP:"Pԅ$uwZ"4d)/BVb gq'^c5@Ilg ԬǍ^nݭ3yzhⲾ#*3(I#y`pHXls 5vA[魏 :fӽf40mg8pp$3k:{OA9 6q8v5NRd7mX)ʒ(LZ1cvL4f\ydɽ>9LG&F%5!Ҟ8dZ{ vk)m]Hg0H6SDK;K.eψ[m0Zyk.eFM:-_g|X[pBsqWbEX4ƴN2b-M>ʲÂYs-00 SpU1zDS\v'#*tݓJs&itԋ\sH`Za#*YxB˕aVj&dKZ{pwreP_.uawLJdw+m4,(uvZ 0 (K(fcn8>{rko)ި ij!A Q4ZsÖ&&ڦ ,`sD^ەk; MNNpW4W*aۓP&~ןX;Qav3at&nɦG Y.ٮjߒ m1 S{qb: !0dG4l]+Tp:5dAHChEAFH"P5S8:єa0QcN F[JPEM܇)|=6MmTchSuHs#3A7b$8l\$ r K5^z䪠Z 2˹DJR*UzRYSAEB;40k4AvM2p#**J;2;˕"pp224P}Q-#*{4GV}&2xvms,:n8֕Ԍ8"s!#*~Pٛ,%5JؒWoxzBBLTE u/UL}*TQ_)τht^C#)ϲ mr>d$uJ%U+'L,P`ƥ#+5Q(NN5Jd*vZ0b#i`+qC&J-jwn6fH $H06B#+AvaHXi#Ԫ iZ4(3 IG\H2?=Íj(b4j%օ#34u*bQ GF;goC wڵ"rNYc/#*XAEF'j#)5#+4V%vHJa^0kbk‚P<Pq)wӹg1g>hQ4eU=jbʯ,_r}C8~&e9/958MHlԟeVBq-(ӅkTMA!zN͸z8)a 1V=K6-h] s1;&lgN#*76QW"#)16sԅ2gQf08D$PuS @!2)#)&!0PGkT<UZ,CČ?;hW0P'x(e[̅Уo8J-9:T89acJq.Bh=D6g }PQ: PARIJך'|D,5_vV G/ DR)I%d-f&Л(1jm576*dfhwoD#+ o,8dE͟"6ON{( T{NBfA$Ǝ}QsI*74 +ԴA#)7MW!jRCQH6٦S3 @047 G˹,O6PjaWD6f ED&FZе)u㍘#*֐RhIHnb tqVsF?+#+:9\1#+ -2[BU(nC- uވT>1`!}L˸,ťLPTkAV0XXpm/٭c"YXS2`:=/0lQ{䳻#+P]%,B#Ct:L#+0"0!1sUbӸX'̡FA ĒK@9& *'IF/XC^XI{҈PE2t#+!o~;{bG?>9fӇ"vR6f=aE;o=J(#+geL|5\~YAdż:{#*XH.ȳ/yq좫!"N3?t &nyBQbp oMw#+@A֡0tZ !BS|WFԖۤ֩"dd騠85ٴU)#*aJ.))VEeCGǞ4!ka5W4&cĴLVu3Wch µ}ƀM%͠9j-&գ{>r61T+`{ ?W@WRC¤iISLJdj)lbMom#WZ(M2ؕ,[(D$#+B<Ы| @*FF&L(MCfҍa`7@}0z/u[imoԍkWmF-ڔ5F6XXR 3:t63kiUJHl}(!X0.)E4ƒQFzQ%遦Ix$ȫmiGl'Yl홑#*Ņ9= EC&WM-i54R4a&4ɭW%Ef̪뛶vm^]Dl*dJlhV@U#*V$Jko"o%i^ˈJil*uo:W3Le]ۢMtٚ HVFZ`&O5UYtXnBQ){Z6g TW9dck?Kh AT.Fo#)9 vp\Mp,ir{Qv~/มpBKy70źs Iڶ)uFἷBˑȦF$ǩCURWtoQ-xz)ad(E#8I⽄#)5:05$3Uw̤ 8;x_j+.IcE<@yr#+R!*F<ֱUfoՁ%hG|6U:Pj ~Vov#*p`LݟlvhKxP4pcoG> 7$5-XI0TR'!4/p֚j ha׻[0Qlc#+]':@Yz\Jm5u܎WC%ۇqY[9||lpYyL(7|5N<-X 8M[.8#1Yڈp2\{h$읊խPnh6EQFnh*ƅ@[8A ʍ;çA!"1OAsܱ2ȤQht -u1pdl0yo=(1l=E9G"=гx2 os+:ίmm=ڌgTOd  3dL-rCp@CQ~4PUOft#)OfYv35^Usb2#)?$RVwާцRNLL#)p`Ho!Pv#*%ηS+VE 2Z@CbŽQn;$ 33UwU$rφB@;3թ.6kC2tB9DmG}/dpuf鴠m#*'/Ќ{qWbA|3;:hd\:_`6lCt~+ڳ_ˍ=CLC2JCx#+,]d'D$oUrOü#*7KeL1ҷYs#5 {Ro):ZefY#+#+]#*T0eTo[xSs#;^lL++UX9ai̦@Gٹ4#)fkcAlaD!vI^$l,rAC 6bӛ#gw9h8+^{: ~Y&l&6칰Bw$Y#\{b#)c.4B#*LL<2t)zׂ}vo i64k)#+fL}2Bh3^i IqacFU1].`AHIz|KRCd0Uy=#*ax1wfL򹃶 ۳]8,gl+P=X#+ ♏vf``3(H&p&V P:Pđ@$HBH˴e!Ay(8caƗ0 {M ;Yݲ@X D'-tn`6bt#+DմLjJlkY3[FmDŅS_;ڨ::"fOe#)ȇ#)/ΪZ,Rزs=rˉM@=?##*"Lk]O׬cS9ɬצU1#s\p-ܗumP^ljoEwʠ[%=ǕN76xh?~i/#*<+:qM:uЧGy%ޟ_NV'OA Q $iwDep#+?dY6occ-3{(WQ6#Uf'uĔ6Q*QһxULqs8մD 2ye#p尖7'ו . Ȭ2LMfypx`H$Y@z= jϫ_E=Tg6(g-UF7;mm_y rE8P#*s +#<== +#-----BEGIN PGP SIGNATURE-----\n\niQIzBAABCgAdFiEECzlystnjLqtCPS4PIr4MYv+/pUgFAmOxj14ACgkQIr4MYv+/\npUgg7A//X6agCAo9x3REEDFk4GTbW8nMkH7gD+ixNnMNcDF96pmp1f3Qdkm4DU19\nscpa1IPN5ik9xeU4Xs7+SifSlJrT1h9gj2bCFIPWWVlXjCXbn52mU4lijQ4iyaV7\nwLuD4ebG8UU9QK5gP1U2hERdTbkuOxuhQijTijDpfOuUnR1N5YoZmONszgYvYmAL\nr7Zr+Cuc+0HiEdsgMUabp1LTyY+urkZJoHcOTMe0QoyrTvM/CFgB4V3ppw9006VQ\nV4XdoAXEkNNfdJUE1s+4SrQxWT2AC2n9X7vjxbqNwfglzrujf862JrloOjybffdg\ngMPXwLpfT8TrVHFSs5aQK++8YhgwcgDz4Biqt/aq68iM424XnUYSwkzZTowGM/A7\nhyM7Jh+Mp/Of10pIx6PBbjjhbh3dH4OUtFv48uYLh1V95ICQ538UypMfBOK9mEPL\n8zpyTbQ8U873Ri+awOcpoJ4738gZNHAbEHZ3Ctr+g7eoayNlFMENG8bMrLwOkiUQ\nLZVXzNPtPs/OFe0rYu6okVONs8MLmuArnIy7v21Ti73Dtc4ABP6V4CFfc3AGqO+l\n3SmEb5r31h+iXvc4vdp33tESohxUFosIgMGjD8ZMyVFWy78wgp5I9qSbSPdVhl60\nF8WGX/ydvcf6D8NDZqjrsRyFtxKn6xLRQgUI+6DKsNLwRzJBVas=\n=mYk7\n-----END PGP SIGNATURE-----\n diff --git a/wafautooptions b/wafautooptions new file mode 160000 index 0000000..87a720d --- /dev/null +++ b/wafautooptions @@ -0,0 +1 @@ +Subproject commit 87a720d8ad158153c72681b7b900ad90f09c2a1c diff --git a/waftoolchainflags b/waftoolchainflags new file mode 160000 index 0000000..e6add7a --- /dev/null +++ b/waftoolchainflags @@ -0,0 +1 @@ +Subproject commit e6add7a50da3274ecbfc68bdcd3e4a71130fa65c diff --git a/wscript b/wscript new file mode 100644 index 0000000..20479b4 --- /dev/null +++ b/wscript @@ -0,0 +1,179 @@ +#! /usr/bin/env python +# encoding: utf-8 +# +# wscript for building and installing termsize + +from __future__ import print_function + +import os +import subprocess +import shutil +import re +import time + +from waflib import Logs, Options, TaskGen, Context, Utils +from waftoolchainflags import WafToolchainFlags + +APPNAME='termsize' +VERSION='0-dev' + +# these variables are mandatory ('/' are converted automatically) +srcdir = '.' +blddir = 'build' + +def git_ver(self): + bld = self.generator.bld + header = self.outputs[0].abspath() + if os.access('./version.h', os.R_OK): + header = os.path.join(os.getcwd(), out, "version.h") + shutil.copy('./version.h', header) + data = open(header).read() + m = re.match(r'^#define GIT_VERSION "([^"]*)"$', data) + if m != None: + self.ver = m.group(1) + Logs.pprint('BLUE', "tarball from git revision " + self.ver) + else: + self.ver = "tarball" + return + + if bld.srcnode.find_node('.git'): + self.ver = bld.cmd_and_log("LANG= git rev-parse HEAD", quiet=Context.BOTH).splitlines()[0] + if bld.cmd_and_log("LANG= git diff-index --name-only HEAD", quiet=Context.BOTH).splitlines(): + self.ver += "-dirty" + + Logs.pprint('BLUE', "git revision " + self.ver) + else: + self.ver = "unknown" + + fi = open(header, 'w') + if self.ver != "unknown": + fi.write('#define GIT_VERSION "%s"\n' % self.ver) + fi.close() + +def display_msg(conf, msg="", status = None, color = None): + if status is None: + Logs.pprint('NORMAL', msg) + return + if isinstance(status,bool): + if status: + status = "yes" + if not color: + color = 'GREEN' + else: + status = "no" + if not color: + color = 'YELLOW' + elif not isinstance(status,str): + status = repr(status) + conf.msg(msg, status, color=color) + #Logs.pprint(msg, status, color) + +def display_raw_text(conf, text, color = 'NORMAL'): + Logs.pprint(color, text, sep = '') + +def display_line(conf, text, color = 'NORMAL'): + Logs.pprint(color, text, sep = os.linesep) + +def options(opt): + # options provided by the modules + opt.load('compiler_c') + opt.load('wafautooptions') + + opt.add_auto_option( + 'devmode', + help='Enable devmode', # enable warnings and treat them as errors + conf_dest='BUILD_DEVMODE', + default=False, + ) + + opt.add_auto_option( + 'debug', + help='Enable debug symbols', + conf_dest='BUILD_DEBUG', + default=False, + ) + +def configure(conf): + conf.load('compiler_c') + conf.load('wafautooptions') + + flags = WafToolchainFlags(conf) + + conf.define('TERMSIZE_VERSION', VERSION) + conf.define('HAVE_GITVERSION_H', 1) + conf.define('BUILD_TIMESTAMP', time.ctime()) + conf.write_config_header('config.h') + + flags.add_c('-std=gnu99') + if conf.env['BUILD_DEVMODE']: + flags.add_c(['-Wall', '-Wextra']) + #flags.add_c('-Wpedantic') + flags.add_c('-Werror') + flags.add_c(['-Wno-variadic-macros', '-Wno-gnu-zero-variadic-macro-arguments']) + + # https://wiki.gentoo.org/wiki/Modern_C_porting + if conf.env['CC'] == 'clang': + flags.add_c('-Wno-unknown-argumemt') + flags.add_c('-Werror=implicit-function-declaration') + flags.add_c('-Werror=incompatible-function-pointer-types') + flags.add_c('-Werror=deprecated-non-prototype') + flags.add_c('-Werror=strict-prototypes') + if int(conf.env['CC_VERSION'][0]) < 16: + flags.add_c('-Werror=implicit-int') + else: + flags.add_c('-Wno-unknown-warning-option') + flags.add_c('-Werror=implicit-function-declaration') + flags.add_c('-Werror=implicit-int') + flags.add_c('-Werror=incompatible-pointer-types') + flags.add_c('-Werror=strict-prototypes') + if conf.env['BUILD_DEBUG']: + flags.add_c(['-O0', '-g', '-fno-omit-frame-pointer']) + flags.add_link('-g') + + flags.flush() + + gitrev = None + if os.access('gitversion.h', os.R_OK): + data = file('gitversion.h').read() + m = re.match(r'^#define GIT_VERSION "([^"]*)"$', data) + if m != None: + gitrev = m.group(1) + + print() + display_msg(conf, "==================") + version_msg = APPNAME + "-" + VERSION + if gitrev: + version_msg += " exported from " + gitrev + else: + version_msg += " git revision will checked and eventually updated during build" + print(version_msg) + print() + + display_msg(conf, "Install prefix", conf.env['PREFIX'], 'CYAN') + display_msg(conf, "Compiler", conf.env['CC'][0], 'CYAN') + conf.summarize_auto_options() + flags.print() + print() + +def build(bld): + bin_dir = bld.env['BINDIR'] + share_dir = bld.options.destdir + bld.env['PREFIX'] + '/share/' + APPNAME + #print(bin_dir) + #print(share_dir) + + bld(rule=git_ver, + target='gitversion.h', + update_outputs=True, + always=True, + ext_out=['.h']) + + # config.h, gitverson.h include path; public headers include path + includes = [bld.path.get_bld()] + + prog = bld(features=['c', 'cprogram']) + prog.source = [ + 'termsize.c', + ] + prog.includes = includes + prog.target = 'termsize' + prog.defines = ["HAVE_CONFIG_H"]