From 4309604eca9c8fb5d4a317ef2558a92ffce91f7f Mon Sep 17 00:00:00 2001 From: Alibek Omarov Date: Thu, 25 Apr 2019 04:21:38 +0300 Subject: [PATCH] waf: deploy waf build system --- scripts/waflib/gitversion.py | 33 +++++++ waf | 169 +++++++++++++++++++++++++++++++++++ wscript | 100 +++++++++++++++++++++ 3 files changed, 302 insertions(+) create mode 100644 scripts/waflib/gitversion.py create mode 100755 waf create mode 100644 wscript diff --git a/scripts/waflib/gitversion.py b/scripts/waflib/gitversion.py new file mode 100644 index 00000000..7b4025a1 --- /dev/null +++ b/scripts/waflib/gitversion.py @@ -0,0 +1,33 @@ +# encoding: utf-8 +# gitversion.py -- waf plugin to get git version +# Copyright (C) 2018 a1batross +# This program is free software: you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation, either version 3 of the License, or +# (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. + +import os + +def get_git_version(): + # try grab the current version number from git + version = None + if os.path.exists('.git'): + try: + version = os.popen('git describe --dirty --always').read().strip() + except Exception as e: + pass + + if(len(version) == 0): + version = None + + return version + +def configure(conf): + conf.start_msg('Checking git hash') + conf.env.GIT_VERSION = get_git_version() + conf.end_msg(conf.env.GIT_VERSION if conf.env.GIT_VERSION else 'no') diff --git a/waf b/waf new file mode 100755 index 00000000..c8dade98 --- /dev/null +++ b/waf @@ -0,0 +1,169 @@ +#!/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.12" +REVISION="009555f9c2f7207a25556e6aa50119b7" +GIT="88e9382f1be4083121fe73d9172addafdf42f3c7" +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 + 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$h 0#$(b #$#$#$#$#$#$#$#$#$#$#$#$#$#$#$#$#$#$#$#$#$#$}:٨S]5v MBlf[5َ#-&fFg/k"ôix}}Fv⼸I-7^T:.|{쮙G>:zxn9w]ۄzӶuo5}d*#$#$#$#$G'Ҥ#$E=Қh#$AQ:t]*mP) HIR*P((v#$4uoׯ#,IƯRKwwF$ص4[WWd} wS޾ى][[}u{;w{-zt>M_]nQ{yGt5R #$#$0t+Tvu}Ι#$yozBE{#$PT#-DN:f`ʹ׷kJwv{޼\U@0;kw{Ϟu_z{P;ޜyz{^#-hRz}m1Tֹ wnuswo{#O5I;.:u˷׻([u[#-K;{=#{mOznry#-Z[sW׹=w}{޶\X{onݝ{-ܙCSgϯw+-zTJ#-!)@qg*vv΃/PO3^M+:GuK5==좻{s(p[;L׳u#$#,n@Uww2}w'6=ʟ5{-ܴoL4͝|{wW5H ޸.z׶w{{ U@[n %Nm|}>qۻoml7>wW>!I:qe6落|;s88^&z6 ZT0UQ{ol0lj!پ=z|}Ok6mM۞CFt#$>ocO[m )tуPϽwlEY^u#-&n>=U#--={rj{q]y׏7Ynvg{igT.fg5w可o^hu}]uٍQƷ4m;c^cm:#-zxssBSH#$ #$#@d#$LFMMH@2!@@@ #,O&Pښ42h#$#$#$#$A" M|Pܳ^4 E2"|W率}Xpp0Q`whS5⸿Sd*>+(vDͱ)'92z) `o"uiWQf#,ǓK`A a>ӡJCmCժ&zB㜺.\ۥUͺyhب5Z4E-)!Qq#iNwqSH&eUOpi#M+ʊCWXYcԷ~z1K‚7mZ((UFxZX-&;U`ek]Y)*E "3 Y@H~_]XUKFCD)bQ#,PJ^u `~k2c)>xW#- Q _o,z%5Fynȁ&w,j+h_J)b(,iFs]-^EIMD4*IuOU!v齘OTYalT4PaLֶjϵ!SCJTdȠjBmU{/#,EQ7ŴT4]E2R]U";F5jxiKS/^,0آ7a$%;Kudɳ&(*7f^,Ҩ%uah;e(@좀NUOGߪy;c5m.+QCR݋DgD9z01w 8}Já2<,""%7w3'n\4ғ7Z9OYяyά0hUIB#"siMF+>8ҹ9(F* mRK,nHriY2ݐa[SS]eD˲4#,>?49y=|{ʮ5#- D`΋S.)ur_4ꅙ$ğ?gHؼYF!&:Τ3N8r">su{G z27W3\2熴zm.2>H=voϭ#-QU);eCPBDI ?]\t΍">ϯO'3A8&XFr7Ck˜a{p'!ܨ4=G^ff}-ڦp)ϫ`WVm?yz KJudV)gҒjp>9 ֫*#,M#,Ǩ2vca GsO%NJI mֻJ\?#-IbyO^~5MauFDܜg NГ;X]i?HďnaL Ӎ7ׇ-98xMhE&׮VA1[/E_Ncpg3WM+HlEM}}=>}l<} AXA B:ZPPy"QXe$Q%#-a>еTEhAQX>Ww_{iZZWEIQTYUϓ=b}oiVTx]*5Sʨ4Q(PzT8hݔ*"Ek\:'?٭<*#,:-<R唠Mѕb:]ƶ& :Fc~EB4Θڞ'.?+,پ / ҭBAH yӎlY_~#,k4I=<9SeT|)h8\w_S8pC!!2-)p"Ѯ|sιߎsBL9!e1g&}kquwi$c0R|gÏL.:*!|MX(EBv/5W1)$@j^ #>4Ǎ#,ׇT-V˂°kZ[aƑ!\V+Z5_*yޣW~7/j)P9(M/4=>9H W㣺M)gpxb{Qnη[r)aA&u+`\;UqJ%.ZxZϞ\scd=k<艏USorΕd6UNS'|c\{FW.3k8wN;# L%Tc,>) #6;wqa TŜKm5=[X?&vs"szm͐mIR#$IM޴wcܥpr0תX .#$>^33c4Dc"bjю5tθ&JET*wg}">ޙNiR#-(c:zmuVFzUGkZ_o#-s XJ|3wpoΜ7T=h84VSZdR)9:sI'Uy{H=#,sx-k#׆,,^zG,#-X?tͽUQ9c:L]փ*}i dBHC֚9v )li#Zhd!~/?ʡiop!jx#5 /s EYk:~@jur8p#s[\vԢ\uPXl3m}fjIzKqeEg=Zkh:,'`V\j}XCPjsAFiA_NR:o\ѦoU8@+3x]7)'DeHꋪ[9mAmO#$CnTf(X0b]K#,WBnjz%3y9:,+k:fuk3E+m"q'3#, 5P$ ]/Y' 4 0ǔ%k˯]#-12N Dmyδ9Tv-b埪tm>_#,h2l7fAOh2U0ʌL-).S_0^j#,DGWgYb#賆֢PlP173=.uJVTv;\\u]ru^}"KZb7Kg#,>s֮틚t9y=z4A"ԶDO_oΪ냈/@6VHsx:Ll6'dЃgC9Tc8V03eLn)VnYŨ#zFNu[}$)t˹燽eu6P-?\6w r4$E5=tXd]QS;Gɋr_-C#-CkV>CO#,ʕx#D(߮"(Ĥ#(ORuTvnZT?yy-|s*!w0CU$Z>{ۜ]">N?[Hv);9zA8D|,tcl|*!"RDvt@ᓒWUtWjq1¦/\)!&_{XDFPtJtM0fg_wRVfF~9mpuLt\\S8li;6oT vv}rYRݩq]߼Z)qH{1iFdK1&YA#-9 83{`9vmZsyPNqf[ֺ͇߮v>3z1.Z\z>R-X:8K'duvZ9_aX92>˥;zy`u^#,XNźiXR^7yg(ʹFC k#,&E\Сܴnny5h0Z!}ꑶlMfQcL:UKQzyKEL??\[.N?5%|۸TM bb~;g@hF.rUU#CFvJɾY;]qȉ(9۠'[cݱ n/6|\3w~G4+Fk[?#-78O_c D^~"{t?h2CX߁rwas/8~LU#$8}BLS $2i~l'XGm.A/C;Zzɡt +moB[剿n6P#-'oZu{6ow=vcCޛٶ=7*䧚N`2#$;}51Sa@$2ffd v~̲wY D?_voT8QT::ȵB cUQ.!a0ZQk0܏__#~nckLlb$"~gΏ"0#$߽^ZB?a׉$Cj>~8?mV%W(G0#$5ʠFږ_#,e{${i~`1+?)з6|`fgq$굩_,g}?F<.3/yW:gM5B5~xQeUUt#Q֜|/ i8z;}>Ŧ_&,~E Ƚ7}uxu4;V~6r#,}G㟋qZM҈ioW[%tS>ܳf4XHSsIg)?xN\\vgUӔQv Lhw3ٿ(*\#}>^IR-rB`m2Hٝ_ő,zE"& Ϩjk 69eiZ<>8hZqG@y̭y.*#}_ mRH73l SѼ-#-!rfl'V4 eK ?2U}m$3a"eR>#,ۡseKp_ÑZðv%6g#{`,d>,ôOti6,##,=}7Zk['7#-NsCXhK y6l:]%llozI3\qRi"nG:p-pm/3`ZL#,v\m?\|3;L|>ːi#$Wڤ^j0t#$cC#p[168{zsN5_U˩/ӿ_;Aq#$gFwFN50fxRjH;@X",7)n2pCL$.̣{qoW#\@q^ot)zfs&U-rq.F"bw4gh<"\9; 1R4JdI#-@Z㠈:\!#,Ut\>8-xɝ#,6ABLEBپuNɧfXqĴ>Dz6%rsB)2ABL YssQROu; 1"# _ l{\!JPI1ٖ١ZLLE[nj0$Z>7uy)%0\Ʉ,1R W֩3 =uWxB$1BPՉdBqRN/g#$b0´qHID`EL7r0CBxFسNM43Z`bA`A#$ag#,_jpt^|J)ISc=c:+)#,P~SU»S_He4lZJ\rU"-sӢ)=kBݛ]k7YיUHV'E*5aǰ[tQ9X9bcWw]Po8ȫڸD7dha,Ե;إکzkj3EM'Y+7u'6C,'+KO8=Mz(@шs1I::2 #Co,:ݙĈóȻ%Í^r{>K׽,n$qJWa[ܣVkh]KdZY&OAՎKe4slnG[O8,}YE/kۉ1.a&vKU} gاڧ^ϭ~Zm!?plO+>/v=6I|c^8x=#-͖uB"&*U~eaFv)  kkO6֫N䆤2e01#-,#,bS"M|Ŷab#$:{w2j>06G-$wH7SQޒNO$Jwgߑmh_XJK{,08,zdmݩxX C[.8P,"S"o*!WTCyp2b P #-'<^pֆ d)e!eP?}XD2gZiD|zCM*&̥d=Cnq+|#k\gX}5ͫ2q?Fpg6hp 3#,֛Ւ,`Bo,6&r\ff)hnil] rW3hR4&D2QZJ`!d?*`+K,F8!3e l"@g÷g{{O&߻ϟ--'k5_jvېcLbщ(#,-ȡT0TèE`V(c`aR DPi¦ZN~NYHź@Q;2=WRIR3S/ჵ4v0]쫐-m"@l97k#.FU__ht~#-쉔jRC2|ԫFўRǛp$DӡGqB (6lC;\lȦif6!24cwxlq]` jI$k\T"pC?FTIDV#-Y-v\kG/Ec8qHMVj(dvMw 56>|lSeF׷>G8>ӓnNHX6"F&aσBHje:q&Ld HDsfWn$"ȵ7?k||#,dlF:G4SZLx9T1pCP&0>הv}m13zXYR"hwkļ|1Uo|#$ k흂MFmreZH66R#!U\ÆA%ht:',N0ogGƞQȟ>My`8H^%#-&g#!HourS3&Aa5{k}-3x<]ۑ2rf=5)H$˓Ԉ,6 6Emj-mmwםc$ҝXYH#,Fa"y#,w^%SVщXXgWGQt#$1`p/Cv~Cqo!Y&{W5s-f]Mӄ)asf~>$s;oow_EMV7?P-h#O8uՖPǚ:]/?}Kxo(x{N̳oeY蟽\HPEh"%D͕,J/8MlU ӶEw:!jٽR~C7X*N'*CHVԘ3 M"uWѫk%tBCd+, A#- _eLE)J #-{N5x-Awk{on:J*sO+*Wm6e_kN&/Rx>iuq! k,űVݿ6kw2.&|haX}g7Vvoǃ)Y7,wHt\jt!q֑a}xh,6t(\ϲ9SGgE潔WwY8>/^1//8)|kHvȜ}jiʖilDtdc€^P8jߎh;rAnuZ|I")V>'lizamǟe;2SvxC.oZ5tGƈd:NEH$ܕR?e$ɜ#-[l%'CANW4 N]NAL6U_4>l+'|FR&EjB~?)l6=#$n9#@cs88>~I4 Cc 1et7BIsyT$quSnz%m=y8azߚx͍|>vr:V< KDBI47]3яwGNܔşg X7oJ.0 ) Y%SA"@":=>]4N7كOP[7veѻ_gjwcV_vy|V!MOa}]Zp} "뇏~|[_wUſ_7$3cNUC˟U~ZgUխ |5EO#-/nx~-:=#-;+wZtXvzuJΪ᫛ɮSq=={ͽޯ,U6/ )eG,%Bz >ɷ&'#k2Šy{ 9B mAYɞ4䇸)ϫ^>}cʓ[ZC_Z=ro?'Vng?T'Sf=xTʭ'\5Br|:?ga|YG\4!G"Qc|8Jc7Or$p?weZ]5UЎ:N@%>_-}ƣ,zv]Uʬmo]Ue4wG}P\R@^* .R1}W헋nr#,<>_VI?Chm×FzMu+Tۣ\}2.ȮL 元ܜ|l՞UG埲Oȇ#,,qVTN$AruAk9I#,Uz)F^VnRզyϜJij32FfXLePr ##-~_JkPaPmR8<RIb4CCXH*J76mp=3֤On `a-AaFd&B)cAEeq8wŌkq$]X$~9]rhG#9!#ohW}R#,X/uoYȔ?~ UZ\µ;sױG!D."U j@gP{E4 H@bi71lXTQ&FCV6ƛfJlm%#-BSh>&x=hmXWB4?ˣ;1ODKu+Vs+V/#n9}~^CwH3xAqݿWR~yq'2g~:FJF?;mֽPm~ZSIǶzGrh8w56$,#(q?gOLײS',A+]HL>%EF10yrn}~#-:wKl+K7 .}cJyï'w_{9uB:p?wM4V)բEm(d#bX*5G /ty9fRɲ!Um(clH#֡SӑDA61D 2(-p#,Q)+oZd--RD- E#- LdI7)nBTPTJ!70e[0 kyU:RL1 6-!ittYKk$-%d(&Ӌ0q-n[qR("ȕ1SDlzL;4UQ9Aچ3XbL:%BCD?,ɳ8+qBmHVɢɛM5>yGMe2=bgODmMt&vOOcxyul|u=^-4 :*K+3㕿kF+EM6A):)|[>A92% pi?(WgGg$=6ܫDѲ$qҵiB?i.9t\#!EM܄ 1Ը=ٷG$4;U֒9s(IBϮmNx-sRLYz啂-;%XqVt_>b-$ @w(p#5jfJcU!Pn΅TfO-B mTw$E_n'$S#5=#,nW[!Q]MaSmR62B8!b?˦mR2#,أg=8;goo?$s#$L$ɂ1qaLs(V_i141-6R65E75@sc0OSꦘ߅a221W0k 8#3 (T`ȋQ`tzm/Dbkf< F9҈A,k!mb{&"I5bLjf#,U`Fٝ j9PuGJ>uNX3+dp&C5"$Bc-!B)2LKDh,j8NXkYX6РMՀ 6҅QǪM4{{7t˅t/ w$i@OAj] 7x0#-TVMqiɐWaßT><JF5yjec4ma7ԢpqWDXeBN C C._Vq Xj#1[یj7 4m`kPCjRn݇yö?uyĈxb,N)Lktp#$Ba:D.[jAHI÷L[I`V&5>D={7xNtówJm-vv#-C:!m8uveSuf'<3b  pCeqpJ'J1!5U$Q>qzH[~5~#-pN67-yCKR ~iːUgaޭ.-cA@<[~uN){.`rtM}>#-sq[<{D3^E:_3闙R*~TY&\H(u5R9x#kM!umfW6owg+;5 0;cVR=-neR 7K?PmV6!##&b}g)IV\.Bm0JdɋaGhZ+RG,KqY}/nQb%6ՙ?$I'$kdv%!#-2ltKEB|#-{ڼό'yum!K=Gmm3:O#-"q)6΁mCٔ, Bŵ؝rؚ)F&/~O}9fo+J1$x]Dd{t&AY1ↇ'dR,a؄>rhϬv~n7I>z>/ igN{<jif#Y[!+6?=23 RS.U8CI6z~4xb#,_K͌AG! C!v4Ʃ1ce.df\AD}މ2Grɧ鶖#-l(jjqr#-LAl#Xs$*tM#-ғ#,$!vpbQ&Onٶ8mS9lsE7ʰ1Adx(rf^ۅi愍r T%&&Z7W6d r=ϻczy.nڡ-\eNid++ u vˣC-m0"ESu.;E-/a H 0N3\Jܘ! hȯ_ 'Mg#,O*T\T?Pݚį͛](:*PGzGQ#h, Pc9=iodӍkֶRpM9:nڠ,5o/!:dψA|>ch3yeښݪ#-?Q4>\λ*W,bqnj<5MFێ !'YC<.1NVIEyάyb^j~8z(WV8謽uu7CyYj'O%ʕ9#8>D?R]T(i#_m#u&,$ZBIl\țݖB` #,(xCVK[r#xq[Qx0a![}OݠICg9]86[@Bjޡfu28K\Af2{(A(}441_*t΋9J4<}[>=<; Z=3i4pQ1sZ-39g"ZX=N[l2Eqy5cs=z/#,>J_zn;έ1'fk4o@ Bẙdܓ*v#,xjZ2#-z\w(eS,Z.}cjgjpYifyZï1#-)uQM #-RBuzf8ֲ*sCJnzmϖ2Qw/zg6.(n{]5Qo]x#Z4o|y'ySwdcOd{\Jdq+q Tز<#,'ߕN#,:(J[֞c'_ S2+l1:+Eu8XD(Y筺sёRnyC\іS]sIF*R)sĕ菦133X'~ZLgxSo4{}n(ӳnvr#--H_6^/"[nكhx>=x|oKs9On9e17e J1:}wT|}:/y=2lTvU5D*b}tV+!IgpXlW__kXԮvߢn2jq%IMʫE\-svҾZܲ0|-'1y͝QppqۊLwsX]{Vgǯk>8;ws8mZw16O&?dVMK>{dy _.|ev MHǵr`R!+"B¡P8:Sv#-J՞\^xg~z\(XE{V9Y=#f+=TܻB@/_^!r bsCLxV+z]l;{qW#-F2dr)=Pe)p*}d>L-DC?^j*_*uJaC{v7_vyQ?5B(H[ؕ\RYU#,97IB:,vڶ@ΩC o܃u\ߒ4Y[Qz>/nlj\D3NJ1>8^Ԩo}ӎsMQcrZogfSr^0/,4MF{g{[?kYo2;G?>o_i>#,O5ޞGLA#,:D&/~la|*5RbJUo벋bϛc#-wK#,]N3bus%fnpѕ(c8c=TdВ75Z^[s)d,lLo'`c`#-:5IjJ#fع,Z^6SUϬmåȶys9 +E#-+ќ\udLCS#-*iONQzWWT:'m^HS=7GN r ::SU/k^tkv|4%VƶJzD0WSeٻ•6 q݂Le8tYGdኹ0+!Im|f47V' =l~xբh&C(9l4#-H@Yg[YZUWIG,N_Y#-?r`p\xnYuﵚ%o]&9n}YbyDXѷC3S!W33ipv:89/3ه]7w>Hu%>\~,P;jnZ}^QguP$ut >UsA]<1pеqQ}WH>b{<7e-4-Țx\Hۺm4y{h[uWˆ"-}gl~9s@_~Myl)t+riѾw.Qk7j_=EO=KۯŖ63+g7}.Y[$c(=EUR'x*}]U%Z6;lSP骐R

n+xy|OxH.V|WU|Uyz4EնBmzA4 W`}tSLz㍉/;FxΑvkyv_AmqhiA@uZ79%l\zCf|9.Y.|fpat+TS [t2,MjN`V_#-WqO6)*Fs}qwA؁?=16{Wos7-f= Nkly#-열J)o &ls#,ޠc{fF(= flvNvu6tCt}܃r5ּ_ѪPƶ^)Iޞ aӃ{/k=)S.b)m^ռ10B{1^F%sB4$c  f92uu١nY Ǖ$ah͌_:PeFЗTw{UЬsyOׂpgVQ^tuL鸘#,#$J[k ZO.oF#$}}7~Mߎ#,حݫH\QF m\mrBr#@ .iw\ݖCU796:ͺ #_<+]H&.]_6,9k{BGvݍ|PhwG^#,.cxWOev42˔[y1IGjңFw~j #-2 RM~aRŨm4ۤϒ>Eux/qߞ1wP$~>(nոFu%I$jJ*arA \ayuĨ꫼LsD*2, 4?S%"Ԗɱ+W\s b׵偡 2eIe*iHXA^,[*5E0Z(lB KU '%Rd)6wWeژl>+ra;;ĉyP}?rq^O9҇u{cd2__#,l;18ȝS|p%{}箟7:T9'%{#-[0oB/ePd^Gz(!8q۫o,8~Sz/~x7]WC*joQXnjZϾDl@9O"=jÀHc*2rQAٟtk4OFm7Rh=)#H^G6&m{n|I^!Cy<}oZOHQI9ï s27Yt5GVjHЏ5'6*1z9ZTIBzG_f{\g#,FHN\M1hs')d5D5@?'2t_h#$N:^pF"{v032\>,e:V3Bx7.09&a: Բӭu`@>P#,ѿ۰k9a?#,C)ĞŏEb3}a勞_|&,l|l0C&uk|@{K*gǭp1aMq ؑÖ^4;kz=\hg~;lj}u)`a"eWh2v#,!Ţ^i$*Ixf@`"?]!XG#kʩ aI]8e>pM"֙;i5=y@ֵ-?#,bRf%٭R1# (HE8GSyY7~P{r-p`e@ #vݶvR[6p۶},w pR  _4|L\7I5IRjuXrM^#EV9}1~9:uԠ_uv4ͥ3D|;!aފ_CQb Ri0ʅD_#,ZkGRdTg:oI}_|zFߺRPF:|Q9:+N{#z}'.p0g+#$ 涔%.icy因]buX?py&XCׯN_S2O-qGZ͙\0xBIR~z̎8?Q6,LZ [*sI(HZc>FtZk8o`_4NSHCLT[ǣ'v'4مnKl,^Z'P s-8%`KNrжolBkDϞ#--Qv&jA&bDb}%6\oҥqR[gM5ǜ6]u֤ vL1!0KIʧV_Ai#y"͔}T2CeC\iH5Abeq/6 ~nY ˒ nkgimRspIÙKN%Q|;(M-c3P[ڼI2D֖ V HEy9ıg#,)ur&*1x98ui8xE!J?h&LÛ#-T=5Nh[;dܯŎPFkK$Ok"{{j2@' Tp1i/JtjóψQOXwofF?tzm8#-.3IW#,O28${w#-Z|ōL/X"+$Z ^RV7tm1^KdJg_ྪF?1O}Srڟvj=39 [^/v/=eT6dõF{&oF l__g(FICExѲ?6C.붵iͶOmM#,ӌ#,_*.K٦6T>Q/)a,Dj#H+ѽ]#,GM#2,/vwfaLeX;ðs۰=% b(`L:tq_,&L"ۀ]Bji1hN_Z;gٍmeae[!sk4y :hn0oT)}XNIU+I7v)gw'æfjHAh ť+vNݫ<3:tLy_XhwNj֯aUD?X!.G+#$c`/BCpQݻO~0tO>QU`a$Et717넎q;fuUQ (͎hMN̙+t[5atך+N 嵞(B_e H"U&o[/kov'^"r/T#-N,O>jLs3n^6#,]*J!qTSlcfVy8?ۉDZya'\XrM2_S^#-4uqm;Qbϐv%Ba㬬qjnG~G\+"v^,=5=^..>.p^#,̾,('W;_7G_ߏY]41ZԣcA#$sP)#,P.)wCP"Z|, w7@oBF(Y DP&dKGU@AФKT&cE"d(ӀEec1|#ÄeSu-~Ԗ3 f;FP$CҁĠ˵%&.h0lLi2IӺ=!/_|K[$1Q?|)"%Jt4iC.|"yWzNzv~4TobCeӾGXd>'OwǨ==J4R$R0R"TZfJbgJ#ERxt囅G醰ˁxL.Lq ^5d!"hAEY+~5&ReM>Xn0#SqA'iƆwv;˘i27ڕ- b$SEv352S6IDq#$z9Q#-TtL6Rp@$Bb麎6P 6F&@UdXL`׳0(MB\uݭs7!D=Ն;HI#Z1'O]C8)w&1g/Nm J9'zy#֌Wb#-SnhmmZح1`bA1|ɘFml0WI”b(ʹb\ݚԒpL8HZ<.ܯ}S Si4;OU,No\H':Pgqk߇DžO#*wן6/DtB|E5_T̒hU#'=6;k(oE?=Gپ!p&[-El1L`@N61bTVaA~*tgH±C]qN+ԦNLu[gZ;` 2׉g0g`qBmri;Dfz;Zշ-ȧC#-:`g* sAS-Pzjֶ;5vT5ikH1#,h<מfc)\6b.D.ڰl6w3vw}F )y8.bTH&2 +{&CmtZeW^dg6AfhzT(Ud$^nvB]̋#-/6|O~B7'^O6,3q;biÖԙ8` E4^'+|>X؊ |BZlnE($'Y$S"p%D4绿v3Pݵ@C`f&$$l.sl2aia 8)b>Ap`n2V-Ҍ &w?j¢/$cP }| 3/HwcɊn#-QOX@ M6w⟢O~.i+8!wIPMx-oՀb΢o2PwbWpVrE@ /ts(XO0ᙽKYբ0m14R}vZXZ}r@ZmΉac:j +IGWEZqW"!C$1yD/8oсح$d033xg W'hWW[mgO9ZBqmR|_Ynڋ" ﵎4#$Iou^QUF1)rQb!D嵵 >ڢUJ?!?Χ/EO:_t)#EL)yPY{w犬o<`PHAR$.6#t"-%_y3/LŢjqcZ^p$#nI\!(C#NP(D?,km+p!"w]iYp9эO^y4~?G\UP~ۋtۺۻd7JmHΪUpi"AD\CJ#,6#,Hc4\ɞF#,=iFPRkxVC#:BGThWYJa:}?5&N2}0aє)X*,(o0;~Oǧ6m K:H_ۓȘL/4\H1znT QSΊ,Re|ﱪ6u 8U!Rۻt ?ʢFW#,aca5jg9mzk+ h˄ݯȹ., B Ǻ^"O5:Y#-^KcZd+Z[3-;a8_:O؅+Ymʵ n~rU;Q_zj{\;0=h)7{>^Zwc%K%IisTG\o&F;-Vb+3[/܉x/4WմqWY^oa"X3{hșčgk# qz&C%v/dwj8E~Ů8.yNLpes~RNxۢ?rhG!nUvˊ bRH!L*ϨΌnj靴VrsYƳQ~jq.-5Ǖg]uOP;c4Mw^#5zQM>PY!>ynnɻ뽫֫5/xn#2eay%Wa5ܲ0>ׄp('!cQ^>{,i9e-68?W9<6`5QjRw)ƭS9Q>͝8ޝMu#,2sQ,%ȵڝG}jl{|S(~>DKs֏ƇID+HwĞR9wRc~ϟ|sO3wBo{ 8mNBt(N祿R1;m.:U^?G|`nT}j۟""N]ovEfCeguf}m70F1:80{]xMvi]n:t=M~*"948PY)~ssZ[} >c g0wkک+g}cioY;*JE]4cetc#-1159&S"J;q;sّ4b=I@D .ЗM%'qdI9d6CH |!N:#w;ăo+1prZ>ϫ7HqOWo֍C.z3"pgF)a+{wk#,>o8EK:2 a̴=f9pV6q99-S5Jo*`¾zOΥ)[܆~wD5׻05z]9̻}pgjO xr[sI#-督Ά]])g=:ka//mqSV]NN1P>'5 0E|V6O]U2Da#-qW:'X2 :鐠>j-Q俦=]z=G8~O$p26<5 ]cC',EM}fmq/!{>Av~g^ ΘoxvL!( ϣh}IPÊ>C'E{(|DA3?_[ Dr AHM *-̎?{K)e<=OhQGַ:x)tN&N#,e.o;Ty::gԳte4jZh!f144ynF6T{"`!3gd`i- M ݦ>3kI<0AFKH}xBxWJQ"~TwUiqݥ%kRJ'lg|uqW-oQ$ވdndq}GV=:Zo z?0F$[E:c{zz+|:yRUЌ#-Ѕݝ+١D뤣";hПEPZXܗfIYU[{uO;8;'xҋ^{1!4I&E*+.Ϋl!8/v{Q,aebT;;>8\@Mz| #$L~1by_5QUOoYMbr4"9yKm44QH||tFfkwF}.vs(v$r#$N&x_ESN=#,k+? &tro5T |Y q=Vޓ6pM#,ȍџߋ(4g7[C#,q4ͲklfNÇep?NnӑgF^a%SS窝xzvv L M*O[DJ0SWqC!ȏڸR*_g'4-+g̿˜(&:Ų=:/o%/!0%j-L!4 (x+;8z{s^SE542/x&/' PoǭK4&dxZY-Ϸʾ6kuZ7s$ aMKP)ޠ pSkLݟ~]7d_a/nzcfB́{u}ZMkˮ{g߮]1^>Qgwۋ'^ 6[Zӈ?c|id#,R7r#ܟוonǦ^ܾRJӲm>!==:UhyA$]TG\owC?hSD?^D$훇܈&˲nR M<cqtGମU+o]kpfQl^7vVۼ&YӺq09 5*X@5sE<`ْfhy4e81Pb" ??t*>ZnD?>xnj|ޠzŤ|N{)3S#-P?Te˺L{RtԣoMFn䩜s>Rtzq\#-v&[9οw=`!1r"v(hg_ 4gᒚxpgL{d]MCjLlńOhJ|^8Wbmr' buPn')"絞-=:@/gakqh9;=SKg3:6Ӏ#Yo\$ܙI͐z1k}ݎ[4,LmM;fSm>X3]#$v=+0tj|&w9I!&I$;/;o/WvOAa~CSZw9N-QK-[rcBr6!1{?`y#OSmG,:c@\ R|mxG#,D\+_=Mel@ C0k?Ĭ {nNiѽv7e^:fÛ8jKWOqͨŴOX;b2Gm,:k#,hq͙S\d:e!t\Q9+캻֤λ;Rʷ='5"#,6xK1PY-ՠʳMUO;E+VzNe2ݥUD<*2 wI8byX>šN#,oymw*B0ZL[`Bd!ʕ#J&P;K8}ڷ7bUT1D1eJ-YW̤ĺ% *jjƦ,C`մ43PP5QZ;3c/-zHΝm=bsm$Hk /!+EIٶ?50ȖUJMyv-IX?]rqt{%enc)Ǟ K{̖CPy@&!DX M1Tf?Vz%_Cƚ;r(펾---#-WF]tV&ƷKwJ&l[_G[#,J2vvt?8ڤڪ"xfhf*!Kt#wR-gN=פϡAkv#-9ͶƿYciя8p}੾ڣ˻އ6it@od-A2%~~X/}=!'|l":}פ3^\jJe88hO<tl4#,c!#-z渴 AIm3,v{hа}e<%mk7/߶qC@v픶 h[ ZT5T=U;iP7ɤ^G>?+?ԥnqQ|G2z2CN=Ûqȥnf]#$<-+2;! B0&N tttvKE9Vr1W ǭЯ,5vuvsܬpқP 8=.epmOKÿyI峛=>/5  Bqm$~)j}"QNPs4XZ0׌(Tq#, kUN1Ph;AFWhpQa->ʦ`@'Meta{=qkXPO$ѣ33"B wI?5{re^$:BsF}>uU&{Ṿb\omq6xxf.ACAt#$9V)Fg}ie2 Cc$qtn|_Z},[BA%Ui$.\#,[_:Z+[iI{W+bp =!#-a˳r٪Fab`mH#-P4sf;Hn b`Ӹ-Eb#$ ֡@!U6z/3J7-.[#,kmm4͛Vb457ڣbD.ullu,%YHl9Z. ⴥ@{f@sw2{#,$tV7Gqlɓ$j-Z|?&O?#-$CB3>$$azA819FQM8rj($\Ba?=Olq7Xo0{( RZ?}HJ &DyV(D-<?ZuYP#,#-TydtXg~a1&?`2&fI&ǵ0wRh\ߊi37h7{s-Kd\E(4%8#$y1 pD P>Z#-V?uG쭔`RHX! >#- j2Kgc6`@UGw`9Okf1LHȨ$a%םρ4e8i2͇tӅH7OD%Ԑv?"سuJG9jUGMjˌBs݌qSb?n7=\^tψlsR2 pqgQVaܐhMl E#K{OeUO2~͂f!+#-hoX۸qr$]I~S_\Hhf(?1«l<>C?OͦMC#-r,Lwpea~?R~XfRo CFCdglN $gcVEEgW}/Uk!lbHB74?.DH\%g2M:lbohnA CLv)%NЇgq ]z dP ;C4 7Y#-DIgnY#,uXRyL\9*TGC0 )#4fffjMgI'_Hfdn}*ɨ"kUsuE F=y#$P a(̺b4#,$Ġ~οP^ioZ`/`op~ғH`tsaÍtީ7JM3"1B#,`:ǒ_s qEhFhiR#,2ꍔ#,>ӒRYR!$uI&jMb2SRZZifj^Yu.aGꙬ #, 7jxd{uc@(ڈdfi59{JS#$p”!NM#$ Ɵ$L|•6̚aŠsC벃|}ҍEB;¯W2׳WHg]JKuEB@#w;#,`,[zDi7RwI9QHLC%~f4>Z- #-5NiUެX0IA#$)lh$kɡd.I&؆DfeQ>oKKm)|pe#-|(z#w/X=e|2Sx068o'NRv$$X#,0?MUӌݩM".e #-I :݂>?٠y<-g3E&ҷza}9SΡh$ /o,"0v xf6v-HT$!!#U3C}MYnD8EVfeB@0bR%)Q2?}gzW,ؘǤ5Vw=уF(qHڷ2Oxb(Ѹ>Rbi H|#$bӸE 1_1bd/xjavgp F`G .,0Ȉ#$!qA"$o6?=[H "_uO^)gB DQ1@H{F9&<as^ϸl蛰ȡ&`C{ ;8@ n##$!5!3Ӑߵ7U9;x8swR$n7] 13J6vǫ'2k@:#-M8-I.y7(Cǭ  @O`Yܯaq|UCdP ѭ|& 3 PGҽpC@uwMwMo#)#,\Z369 A#hw7rXxy$ P#-I7-,8Hf#\2`.|@b2I$.*Q#-Y6,*tIDN}^!.'wZ 'cW֣NTc'"2l iF*Bh'U_;¹W|*J5Xi,Bvmc*\gI>FV vg,O+b/Qj.fEr,l[PZRy^DiQMȀ>0KU4pᱬ*蘑)Rq֡CJ}ϾC1TF2 "!g^m f9HG-,%9{wWK"!ZDY>]aBIh/=z%ؖ5QDN>QbJ)Ӽ|fy<fiGw.+惩qe=,B*#$vtbql}jY Lj5H$Iox49'E:_!mAYٴ ዒ7-Phw|O/}xgaM"t hwŦOyD%Zꪶb`~5||SK'!;~/ȁ#-xJ#-*SO$>2E" ƿ(*h-#0tl?[O^RSD8>.X)J#- GLϪVЀ8V&.}Mf'K_cEZ:F?kxXjrxoQoZQqщS9#$6L d]P5#$?|PAHK#$@eʀP*BMXɈ"Eb$KRE$0 U Ds]T3%D8tK#$El$#]2Z*`rK4= }ԭSXXXxH;RHuruO58ĸPPwHJ  viےG: ƍ&:&}{D#=(Q*`#JhdDfo\"!1ef2iƸ$[ōG Xl#,̺`%((8 $ZI#${/4a#hif&,A2YdH#-#$6.`ɓdK YJz]@Q˨y۝=B!oEH;8')'Er=q#$7J;zZN|jz*I]>ϺGHV.ϦO`ꊟ&Ilp`V 0_A6aa'۾M۫ZAMR<3P !E*q>]RD #G<:GҕV9g#- )ʎl ȿP¿s6,' T&I~F/8Xc8H * JD\?;-) :sUR A]`\z @G;Oӧy=#$3p~Wd*A#$v? %ŊDMOOiӒaߨ)a^*tZHpAr"l#,^AKsp"8!Ǥ;̌e|ctN79dGO9ac!=>}^#-K6ٟivٟ'k*gGVDJYɛ wDwऽo=I""iPR6rؐc݉u J?m^sqɏ=«:T9TMQ\ʨFk#-A>]7\a 6,w #$aMa&fyU؟[gBIUO#$>]d#IHeuˮNȬ5D(wծ ?1f#$ݫ .=zC#睷tfP9PTqn4HGB"#,^6)aJ@8޺|=}D7?d{V#,duqxvr9ri0#~kT`)<_g<#-C8>t`=вt4+\QV`RǛY}sG#$-`3=akn8tTfզaleh$Ƅ x_tMȒOo+ʇE- h&1,4}gِ sUIWƱ#$!>*sg6w|m:d]&3_uj "7dizf,P5b,p&ppRl~@fM p,sTX~ L~Ƈ? !DT 0Y'`\zxSޙL!2BWHX5g'^zTwFlԣr^yJ'(9,JA?2>wߑt#,[B5S@n4%#,e!{1*)7oA*s¾fb) RR1KnhUB1_f^+ R98!3cd99烃U4i>Ppobƈ枸ZՆ{~,dj,?o.o#$$#,sa7e?+$~})k>>hD#,r C0.`yO#$#$77/=LY7BBM#-IFjkv0#,N4"YGY :_f rQQEXBIՀъ4@?Lg GGmOK#-.M oڀFeʂWuG`6C ~gҌ9Ydo0 PtQ_mnjԺD>ת44+X '\4ӥmL09fE/#,~]_qmh҄t #,Uz;ᓼS[LU>E&Hi4ϊ^ti9SW#,w2QpV6!h>쉱7pt>5X'õ}$1WXa9?S=:K 4䴇Sq jV`qRweD_\P ߠZ!em3!cUu^U?(w|p|Q  Ԡ>#-%]v3*>wʬEx9T~ܒo1Ўع+˭v鷩ڣY#/T켷ZxJuճCg_V?c]z*6)A iVJc\ΙS7FFs5SCpPį/GoK'cQo=1hq8vYW%?>VF-4߿-sntJP%!=j;'U)e*T)>*MVvm'|#jwSke%_=3~>no?sPY0i/WO><#Qt"BM a`v-#,/Z}Wa mbl$ʉŐ;߉'=[jƊIksNK8e\>uNtK*Ʊe, _WGvOV< t_W&iyxT宆AKQ? FO3;>j䙒#$c >X~_sriiKqo]UUc`"k5 P,Ѳ.u#-wf]Qi )1B#y'Yxn{T62Ē_dIZa0lX,pz%yڦ "ˠu}q~]0tno1h#,aӈنǺ[Jw#-|$TXS@gY#,L#,^RT5E6jN̆;Ͷ7#$awdW)Z'G}c&XYS $,#wN\}"C@U?w!z3̴=Jh'o;kUjRz2#,wlMhoPϞ)T"jH:.L0aa5 X@ ("p}eː[a8t Fecܾ]tH#v<3.*i#,/?\~BӰ%ro:ۧWscW{(l9>}]UNA @ɆK "lAApieTA `VxG (C*IJ"#$ȼ??|K5F[/+/+Y~t4tn?bUY>#Y_jT!IWvݛ<q?74EUUUE` !NHFg6t5KQxQXo3%ht^H-is,h?i#,CO66͈49B#-m{A.^C$uC4EܱT$2@Q<{VqgL^8㬘ȗx֥R\2f̐e E#g0| {1˟LyB|3xxx3r&L qMݶ>i#-7{yJ~WbW`bb~'YԶll:Fp{cUхNd!;Y WԏR\yjIę#,v02$^&VI~9R\⡯fuUgG~ʔ tg[#$[zAsmWS !":a74I5m#HM6t88_RqGyCɅ2{rLxiӲ#WBoik=a٠N7X r.u{\,&aMSFݞ~g׽ă'eQ6 P4hI:mWױ!#,acc$C} ň_G<5VǼATRi2HC^j;C166Ci##-+ra0!p1L6XE-t#,&,&Ie6&uyN#$.:1x[)5D&km8K6nSb\UhPh_B6qA( ǥ腣l>]˙1XN#- dk0P]Mt<-籭'c!~\sxb5;0=XrN&e{ۈ+9uŽT9w8g^ uon3r ^v=h,n])A !.9"Tt'S&x1)66,xz#,qʊmPYϻ!jYu#,k7J$")#@w`^1DžYnضYX^4B.a1!.vd*4pm'w`TD9jM:EcT52@({xM;Jh-2I9}ui:yt]Ng*8p <5LeWfd˙clƲ3$cg[3#,;0qQ*W#o==X5OI+͝؋'- {gHv #-gÉnAYg\X3֨d1Q &pM`\ݙ|y88d @|Bqϖ6:#PM6eF™% #,#,7ا#-W|wh+wdQڵ#RLAX3ľ1 eeggTU&Xx==arHv4R-m<#$#s芊ls+N:NS$f:`j:pez#-b2-A `jId#,P#-J}<}yI`N}8߅ #,3nSGp;Z?QaĎ閷ls{D[!FۮTc`SzH #)K7zܛ~h-#,X˗"7c`{jy{BhpQEqdUt6N4(d i< f1v#-,߻ssHFJcAaܚ&I 4s`Lcs& e!24XIDL`j#,v[fUlJ#,PԷTU4P'ȽQma#,rC|M3;`F;$WW(VmǮMYLӗec =z ]9'tBFP#-@ct#!PdjP:hE#-\j#,fMQC䏘 g>#-LzhL4MkWieˣ3$L$lmaU>PhRw|jcZq%Nn_vL#$X "(XCނzcfJ~lنs6'[ttwysc#b 4a;A(*.I -<#,m.t<*_q_&^#,T^icL]:2rH%cS0ݶKbg 4˜O s9:O]؂GLVPL\DUێk`W^% k=V)Xz=R>W 83_=[(@$ b0F͐н(g"<D~#-6Pj!,-F*#qFdGPWU̟Sqں|~B(" #-Z?jRfl銲>J!g}R-9c~># [㺉7Vfe(:F[ HO.MHNAd„CpB7Ĩ:w_[JΗsOT "RЌRېwkarݾ6wj#Lb)J)&!8t6:!+#*C/./vVN'FLQ(K?h\ )@@@>&LjK"?e>I*}$*85+`%;#$l鵄62vVۥx#$۟ON篼tvrb<bòa#$`MjrTm*ICĎ#$@d[iA6T6պl0XK|@I_lGJ>,(FZd#-\R:#,b55`ư#$ ݁ޠ1}_ҚE*RI=mٹģwvKˮ\xcY]vtëQ!Qj Fc`/6AMkR7H#,YR˓"0er-xܑK ;jc9P]QcNR`ya'Ij0/!d5zZO]Xz\#$1j6tUEA|gƙ": xR'z`㓢I#-ٺ>Ny9d$.".ġyƉw4~S~eRNߨ:YEWr{(5=B/dE l#-d"<#$1"T3)_"1TelNbzq)lDm}Wߌ)Tg;6 DG*FSF%ڴ7/[kmMXMIQfbimFԚ3*mbzI')R#,'b )@^~=—900v }ڱlCC*&?L늣5 QoF,NUE1%`e:&w91o;ej+ۊcSXhJ{\#-Dmҽ1*ʶ c[LX^`#-+ 0*라VrtQP1HDmꔪ#-z}9qxkQ:eꨋvz\t^j BSCt 򃬩%U)mi(#- #$/}+Z؊#,mb6jW)*f`&-E"ϯ3#,`CMdRr ,#$7ۓ?馚8Hda'̂{dUPLAt$uyߋoJ``LfG2O0Ig@1UBPQm$:>Q @a!h_d?A3<KMeBPP?#$-⟤ /r!y^6"UE>/22^Eb_Ҁrc3TY ]'O9x8uWFpiTӗ_N`xc]P#,ՐGjaA$}#$ Q\ekhT D(&Tc 8uӬ^; d`haz#-fz8MX3־.gO#-;Cl3n(Iɳ6rڬdT$&#$$*>l=5=J#kyiă=I#,fwzь=§wo`@#,A:,] 2!fmdk2#,2ưפGW #xm1ePW8r5!Yqv I /LV8cbqB$=}# #$'ZPy#$4>SXY۷wȈ?PҐՔQPiF uGR#"UDAPY!BD~ƈ@LL=y/N=#$/_~]gøc#Iby GF1}s @#,|b֨MEӖsL`c|B9uU^ŐM 5M[^2_3|c~P.#tBAEG.+ [V=1XQu㖎F)c729o|+|uQmiC:gJ7'f ]FvkY,4]2]u)s)2f[dM r>r6fʌ#,nxTq̐=p&}7:דlAWA7`WpScƦSPV;Vb:)rѵOk&{MU{ȼYBfVM+10(,q9y.uسPw}n7}١9vByX~.oaָG4;+ XDK}XK^2\Y˞gRW<'==N(51#-q*&1`V0:ANY3 ?8*rD|#[?FYֆCqq$myhLe k$G4&e6A,2BAadTswi8&÷nft3,I4Bۂkօܚr_${wM:"VƬƣ5Ŏ]@ɩ~e #,#-lɹNU*X 2{|ϧ 3Z)D`vcIg33>6d>]zT!"Dw3P)>̳9vbNZǻC 83k0)]-dY"sJژ=R#%}<Ρʾ;UC 9P+CCMSR6ȏ$NtTHǢt%vfmފ\XqdݼB#"6u-%lfVAsh4Y Y˪0B %1A"43dֺ\Guu6nEɣV~_.[kŸ`W,AFBq1(i"rnDp#,eۨ"XDޒ55fZe2Gƶ3AŐ̇h41*찵y}X4nrfY'$UcD̢#-*((AKd#-BCJT '.C{]`@Q尤LqE2LYXg.ae#-}Z6MJJAl3S-{)D3:͙G#> |m>fD5˲-nM6Qxq 3@Ca#,JZm&N@ ץ dHdh],,9C 7 fj2B+N ( $ d .ovWهƈCP&$ĕ9QY.ef`*iq$C#`CL  \YikDpQ. c$)i/ h!k/mZHj u((TfDBԉyE 8y|%0စ~u!XRdN6`Mz@To|DۈRQ#*!mhX7=#-!6c |N\E +'P6I"L9nZwbN2I<[;y#,0Y=|绹h9/C!vdu[bBBTiObÒ;Í-&#-THJ'4z1P{NJtz>7ޙ<4>כq_7|=@UE$2gw&H>`h~*/PŊOCa#,(6 0ܢlPUU@?bUugk?4eu> lLXbc)FB@.E!j.ĜVD#$B?8ЈM-$HG_iU*-^VH#,6)99l~,ŗM =HF~M`q#,1-P##, >##-Ma'p@R `Bit.) +V:YF1(r&Fmezqg|Tcɴf4W"J[Bp`3W@P'WmeM'y"/s/#-|[8j%P#ܝ=:m(buObbOوǡdm"QAC5jf24Fwu-5E HΘP`*0?\Z|'kMFA(cJ7_\}5d#,FS#,cf NliiCr6l+Z0F5iǶml7Vg=^&#;U/O$Xh?m8^QtayQG;#t166C7Na=57Dm#$E#,l4Đ%HF&D0W6񴸪o\^#-(1Ki>GLiCt*Lv"9: "`Fk20DL@e@XQD7IH[$2Q #.,0wxvÍnHuC%i82!q2ȅ0-"fKCt4x8Vh04bȂVv:Y"Mxõ36mMFk0bf"QDk8S(G=ytJN RHpx? ~XqÐDJ A!fP&Թ U36͌e&bS@+Sw|Hstr(r-z xyRĠw`x 'Ll]B؏QFu'pH?ˠx5ȚN1mMCESLmj#-Qa vX(w)iYsY']7a5s?q3f:Tp,Nx-#$i1g) DEiaBt/[UJ&,`H UزeDV QÚl4t1@jbAl4@B0‡#,[mqZCᑯU0$+/NR@Iu+I|Z=3FsQdZmIn-qS^r>usPSf2FiV;lQ!$EFZ/M=!y˞5sDڊ֊F5m655V]ڹ[],鮩l>uPG/T] t|hMVE&]0|O$AA#-)%2S4)I)5EE_Ԙ֐JҚ"aFF}Mi1dJel2df$UbR;,d)%%aBdѨ̦Fh)l%&Je5)Rf AH"ł E(' f-`U}Lb&5ԇ):DV>}ة-*:rfIm0(H4czK0(`#vˠ1,=-CH>/ t;n$~*4-uga6"7KcoPdtm8`deS(,YF:_3#-tZ #edZ#fm2UTQ{x׿!tNߡTnqGkGEڞ$'g_gIX^s#-FXL'؟,sӦ2%ڡ:+gdi+/f8}z^&ɑ/'Ӎr( H$E&'g&ek+Uw|

#$ײ;>o#%:H7ņ$umGqk/YZ|K(9y}![/ݚ L$#-b,Őt&U2 K f/ISGv(K9l55Mp`X#,3P8>#$ #$p$PWJ9A7nRHLt;Ͼ1M3ڙN <y> qf[ɭ#,&Pz _9L,]tO3#,sNjӤuj;[lӜgRY!cѨRR[ 1q"E,.a\dQ%\<, R#- jg|O\ֲ\a:S#-=Ok_jqi>0LӉRWSz!4J#, rWTg`B;PZ8 qcOj~Iѕ%kQ(D06 nkC3'Oc2>:6$O.F 'D෻0/@eh} GWgm>x4jOǍ1vnuMU7Y4"yqvHkѝwJՆB4o1a'cjyftf~.Ѻ4vmimFdg@:wChz͔#|OjQ;fEܚᶇ.-B~t%&1KQ8$Fq\[VX7k;9[3#, PI>1w#-/Ll'KMutcD$uXBcз2hYC5B8L&/0CfƖCH9bSbGf#,2(4%WB وrT GXXDj }dTOLw6ۍl_ʰɁb¬XWo}L 2cY4N^ _dE{𙹒@e|yНm1fncWx1MRn&#-T upU:!mx27L:T䱺ף%vsLH%0;Bb2$8M$ؙ vɒ3(j"#,.!Ll`Lg(j#,^.#,#,XɊR"Cd!)J&B#,89#EƎpUC=N! cQ[I.T sFq6Hl2 8#(΢Vt43=Ҷ@pcM2,q.f;2l:r3sad)ՕcjK ͡cP46K hYvp-`s\0n\*a4QbH1 A(PHE.k#,#$xL@iSzC2}J߻G(jFCp4U0KSmGu߷FA'0`9H߅mj6F*vT `\X=5βHDH;i햳=.` OvʪL>g=!;N85rh2ne Ku\\8ViB>Ge;$lt2aC#,#-r#,܍-:!Cڝr'IE9!â#,4J$q)pU$#$aJ#,7,(0(F@/Gʁ"Xbg"d&gB$Ґmd-bBp65B%!K=`m #$wO!U@#$6U\SWwUٍn.nn5sdך_ŻB@T`#dP1;Lw9#$ "k=cYaGS`>?b 4_Xccg&EQ4pqs`v#,~9p\`~LI!pH,J@,vo@Jc_bށ"DIEoMU)R\3otvΑs.2d#ѐv4 #,hz?~?0YА#$¶h<=~(|UDYcRmLj"afZ5llkѫW"|™z5P|#$T:7y.Id|;v$h>pH\Db&&(DBU$JXB#,A`2L'{uI#-GkEv0 iA̜e2OD~:Xo$#$'z)d7tг#0" L, u(.ZLic$YƄWKooeoDU3[ů>Wz̥,؁7V#,fF,`293Lq] CX*~' .#-xU1#"EUPm& |1;\sPЁ1{M#, 1>;t뭋Hd#RUBm@3@R'BjG2$tCEl#,QcZD!"Pij.3\9y~@x i)E$-DBƚ)CxG A W#- 'Mo``#,`ArH8ʂj$tbR҆1#M%j:5⋁H҂sNjvMNYYڷ4$4?f;#,Gv *&X\d )eh:H#UD@L\J$MD :IlP$PR& 07&#,VfhPW[o ;k>eP6_ܦR(= (0P,\3_E=a w5jݠ#-=2#,g=)FC+d2BE$c#bZ?khTZɶ[JkU! C*(]|I.|pz@ikE/#,\MomJ1ՕU/rW"NTeʵS0鲥Z̧Zm(m B җZQWZQS0̳pdgHgE6ᨸxRA#3y&dEAN mnWrD|SNDI%Rn.8Eojhh:Zonn)clߘHLcDAﰞ!Ü[Zmx#-|!j1sx3Bfcm̑3rNd[VdfM>ORYɛ!4&j+xm8#,HKil`T iin:XJ 1R#0 oZJPERIQ#$ADrHF==y/&r}Mqx)`C`DbHpi@$H?`)R'*Cpb#,J8(-1Jݍ 5CDQ`HSHwmhs-d'E|{7vv51b Hm i̱UeNTd:7Q ԛPB} v ޕ*FR$.#-1#$TfdB#- ۴1R3!p3%cn{a 9T8n$BH̀ƸZ2H^BVm_os7ذ"z&QS 7hZ'Y nX#-I׍K[oϺfXR#$0#-Fb@4H"DmfK[Vž0IP"#,EڨKV%E҂YHG]"J@Q-@ACrɭcf)i3*(Ԥ)f[#,))nPe%eiI#-46e)MI66 Scd%cdՋTPTTʔJHbmfJ%&,I$%K*ͱQdHڊX&IVږ[&KS&H#$BU %P"@ZK64ͫ]6l@a(-sjڱ)lmW @d kTYòq#{u9XE#-`n5<ӎnp(LT@L&JQU8oInMxX.8`>97CXe?B?//2~#,UanG},~:k3AQmCT##q+39 D%g87rѨ%W V~iiF>$:Vo=Yĸ7#-3/ZR6W0/v*@#$#$+lj9EIHA:#$VBYԤEBvP?ntKbmAU@ƴ #."0GKaH,Z)қhPֱZVFA4^"lƠH90Ȇm ig5h慊T1UP5 dRաIL~u#-CYtC|e(O#$cVhqTh%jLhJXW#8A"tŤMc؍cՁJ,ΔlhBWIFP%f/jOSLƕi~emVA\:;?a~<:-sBcMo)^>?#ȡ*xI;ZUCK^CM#B^ZLty9lRhLp V͐TFJ߷ʆ|uRy\ƤBhl6)!@Ofs{JZl#tA-cbJ4sϨ1kB! mD;P΢rL ~2&\#-J#,#,1I1$RhCcp,rɅeW2Myۦղ Ν:`0W#-Pe#<zE%9,G,Mc兪ֲ#'p&#,M#!GcT G!nn@A9#XɍXȅٙdݴ66$IF3! }t.0}(^zv3VT.4;3sΌ=d*%R;jwLInы*#$馱S!`"#$q.( /#,E@K"S %b1l[u߫;YFiˏN{݌!4YuEUb3+87׿ߦ#lv -H0"#->dRB20`Kyփ?oe\e۵RH6A `0Zל$PfY7e)#,ŞLàWػxtj0dTv;_׊_8ϣmݕvg#K6Ex`drpKLEW9RN}bU@e?VG:ҼMvriߔ:;'#~3<1!ON-ˡe#-f>YFPar\vh$X ێ.2&f$'^^J3v_;^صgyev0RR(&Q\v2RK( n]D:AS~T}o:A9vB`_wK5yS#F|Jr^Ⱥ ٥~-ZcZJ5dګ#0,'JLnBK`,bUfٳIĮ.UbK#b5_s&+_U(^fxK6&ҩV듣']2quI29fS.C.řĆRXK@ $oU0E_51X Xba`ߟ3ni:5,; , ,P6zOT5A0G-T7DgBZS$l*~5J-UT*dWdsa@ ;ltђ}BQ#-DUI#EFh5;[mZW`a#d#-N.Y#-*偮X#-=QDC ŘAL_pryװ+ J#$ Ow;H]a#,bi>0aE`"QBs&aA%U%Poa]~W>6xR2pE:Dt@OnCx%6q_/DtkDl]bBe׍ yNG(;ش8;;xۧŷbY#47 ͻ6;:xCAx=Ƞut7STSb~^H#,$"!ADNVҶصW5V ⍋0D/H1.$|ԉݍfe8`̕тAi`( 53RumS~ǧrxI4zzܔuC^8+$ yLU tuN-R(ZJEp(vu|xi;K m4`3 uA#$Q`KQ4gw\G^ q6A?GS6ЀӞt1fV ~H"M{UįfTԴRLJ2)4 @X5Z`F#HF ,wd0-#-%0Q֏ {euh46D6tȏ IFj%w*Ȓm6J|1ݰHa2&k-%AvicB} `3Lm(G"ڬThiZbMLcj-BPLQH rѶ#HrǾa F Y CF56MƍMk^.\6͵t&5KIh VV#jtgw27dUV+zM ;d3q%[cciEr65bnkw.H+Qm-Md ƭ;AcXdNEf#,2FĸkL( yA5&ΨhPaM$[H 8ZԬwqhfVٝ#-THA 2eO!Bv1_CRt4M؅F}BU]]y2fhʼnh=_&A=1O#,MwֱTi}?o6;Q{m⫖4/KTbd[0XR*WniA:%DEGN؟2#,H `(R??̰#-D˻啧v(4\T) +E#R`1%h@V%#- pNB2k 0mRU.so99Jx+15F6_MD4Dg,Y6kκRW56DQl6B:k+WٵͶ*o7uYI%ji_.BIU8+ǗQ:Q8ɸqa*ȦpБE.I}S@x&,e rIbHQ-U{<#$&YUeٱZlF u0h8]^'IiR$K _|`ٙ-Eǟ&L!+S)O͉KD&Lp (#-iSm-`aC2ї >R!1`@#,(a>ޘ\#,\{@l㯊.;}d+$-PDX4-Xֿ6|vƚYO]Fh"%D/:ʭѪۆ(P\9 ur$XOcTtMuET#G WwO l]w,13C9Ib9E3Ŭ! :#,taQ͝LLhd+h a#$Tb8p{m벏#$CDU#,|ād><@BUX"C`m(fFEIq-2}>כlX6[#,WԱd#,#-e3'|sm΂~#$gQUɳb?51cDGkF%(F4C#$Yӂ91omw6 1.Hld4a%@b( „#,Le(ʩC @W6~#!i)6 P13g#$TLg[[WYHfqm GP Q"KV9`9۩ld#$54hQk(0%4b-&›QDʘʱmLͩ6e)MlTXij[Y46JehJ6*mBbXUfh i jU}/ݵOa_ cDM*u9~F A*"4DDmck[W6ݔ0H?HIxvrеom\jьP!^ ?+}1ysY漻\^^ύzșH'鰽p\v.)xN&!: $044(p%v4e#$pwd9 XO7Q?xV5X4JT#-#,eQEn,M<^_QM65ZOt0 a)[qNI`^ ":b?Ch&֩d"0EEU5WFAҨiUHDg#,uFaS$RFH>gׂbLc.#-AA#,)R˄ l0A6Ĵ!(0Mjqo:xٓtDh7!r{񾢺5r,l m~!,L.A0WEǑiX?IPHc?RP\;b)5{"' i)pf,kiidbic7p0t2թk}vj m05. s%aUl Ab0G%XcSa_~`ί^oԎ#,6IrΆ '$BA`#,!IhXqK d'Qa[PyL#$Y:^#-+8Pxve#-O]UF͑DZ܄ f<#-`#$l QR0/ 𘅨##$&f[d0  ұ^oSr]-!p˅ŌIAH"-#-dFǦkRi7Z9f|#WIxO!cLL9x5bP#XCd#-rO"tx%F֢D$Zn٩/#$…8kB@TG˛^1`EQ"Ɉflp##$r)z΄{3P$&7Y,&wdUgNW\|g 9}^?wDN%B܌#-6j!W޶ګ47WF>ܵkqIQF` h)amLQ1H B^BF')1{n.8qp0B1~< m8̍:HLR`2Mf#,Z[3S-AK.ͩ79 " ۦ6ǸR.٠Js#- 13뗾7qȴAޏ z/v]gdG_@_|*Dw!֙@m(#,c1^bSwceᯔ.63{lSQolB-Xs!fI4?eLB{Lߜ遳܄.ԿXzG* } #.#'#,e-!vTKD!k@P#-BݨE 1(B ]ZU y:EW#,A@P#,OY?-rmTM<5kuI$,E 7Zl 'bID Z V@AXpDDlKjMW( k6"Fj6iU5Ʃ[Y:#$LcŅڵK2sDq;T,#-GӫMĆ5bA$))<.NPI#-p\!%؋G#^辶 9'j7CALJOxH%#,G3Cw2qlhB(Ώ0BmeJ 64FU-ݹfm;v٦]VƊeݲX֊#$s@':[B])ZkRk3t[Șp*KH$rBM)6;>I3vSYtkxj(L}9ǀhf4׌%RVl3Kcƃa-j&Fk"`ta5gǣ`՝LHuFh~`0D@LȜ3(9_#plEr`.H#$bA~5o}#$}~,d]#ݰ[ѴW #$V61ج6k /Q4d&)#-ӮI}jfAePd @$U-w_H;M >5//1}IݭMtH~"#B}&$rADDl [bax*Ca`zC֠ )HY4#$jP{](vÁZ c^&-#,ZB)!2FwZtn2Q5CL3K`T>O61gI-L,ŷJ ТFl\8 ` fW(DR:ylشm#,1Dagrmi] R`QD$P \sCi ,#rL1jyfb $3SK{h:݉(3׆9*C<HvBźϖ~ ADFW"BBNIǒ#-|60W6~EXb6j+kcF1jKh+brض&2*Lף쮛x.E`F.ʫdw$]{'sno߆rCyRQM栅بdgU tcyLߺmSߗܦ> t#,mFm CEli53)j(y wƿP{@*#,O5ly=@HL0`#'/wnX~ï m&670;obp[ p9w颗̐PVA'!e9Aս6XF:IG3"Ltr|ۭ32(|5_JC׍I+eGo(8Ȓ].{7N#$Xuy*Z.UE,Z6LM #-d)ƨQ`Cf&͞42ޢ9#-]**."@aMEE$6i#jdbѮ%t%ǼxtTfo+`1Z*QcLL21ġC!ɎǔѭSFDG$Q11ȑ#,!mv6z~lֿϝyvIjU̍%ZJ$uD!J-+bn{[DXoT@!JG!cٙdǏ>=3.԰Cc Nn#-p#,pA#$1~sMdNc&`bbCv\?Ud.y펕EAZ+m9a]WъcBĀqr:Yzp6b 9-.HI+:>/>ۙ`r#,.Ek CwƃLe98"Hdn$JosggEyqBƟ bCUYxddz f"e#mB #,ⳆW!#,2{~t_6s<*՜cS O`z"zC.>9#,` $"E6Op +2t[utו_ΔZQ#-HlM*d"d!aERFȤm!ڨ*mV۲ᵺmRZEιtۚ2^-E<3RXE6wuX%VZ5WKZMͫujF*,R[,=m (CXŒzrE%φYȨ*Z(D!B4V k*LBZB/K #-VAX0̅`H@]i5ktVWZV5Jjꢛ(13Jj*S4ThUE4hf6K2dĵ4QRHƶ^v~ QRC̐>#,b*1׶#,%Z6#,MVмQ[&h/Lˑ5hs0â#-(w!$RZJehߕoz6ߕZ5Y?w-osiZK[sQU]+ZV٬Qv\A9Ё{}@4& f!D@Us#,5]m/U"Tj#-D"2#,Am1Ah#$D̸vt!؄zC.ϣLy౴=~d1R,'՚l$}ǐ"k360f3lc]̓MBb?$f#,AeBa-suKk%#|=uc]yLjĘ|Uc*wkd9+/xс4)iy̘)As\ra0xfm̅u؞i=0놙I.gBUy;hV1"xR zfAhVAwK!ڀMLm?8*&*ž2uJکXl>j(\}f FXDQKo/ַMIEc\BQQ3K #$Y **o[VqLJ:.3H">ҒtL_! #-"3i㍍[ۥcWXIiU+2% % Ac;,Fda 1sZ|m$6K[WB;9KA JR( L,dadA083ix-fED2 L0m-jKZdTlm L(PIUPXbix4WeX#4dCECѐXE#>q,^[{؅)胞#;v SyobVdͺhd7np3h֙2e[#-}1X#,#5UE_xLE#$n!G#$D/#,t#$ϑCi W*=o LDO+'d8?x J͂uá~zXӐc"<߿sN<#,o:Sǎ:jVHEo@&;w7'B /!(Dī#,4ω4#$m#,+pe)P/G0`# #,,9-EuB4asl,T/m$E퀢<<DŽ`Rz"oFgTF̧#$vp#$]sUt5WvLCPZ]BQLg,x*BWka2˯72} X#-HF,KH\4/+(RȖDFlj/Ԛ,RRl`lFܮ[swyq]Fc1rtx&6[۫UfXZڌ;m[Y*,muscvY6MoѺrvgMrF;Aʺ˝fhͪ-uڠH D#$J?f+#-YTjz#,MȑP{w@;OLB<8#$DWxxBA`j 's,#,/ 䢧O/ᜧ;Gl$!#$P.tpB E?D2m P9JV&-&N3CAkk(r8ϤvC1 ds\Zvz;ք$cvHEJƅb٥" g#QU#-l+ݦv=z/.9(pE #-$PUT #$NOx@;jsZl#$qmT .p'e"/0nmzII Lѧֿ>kVP~\'떱btA_dd/c3M(xDZ)#-&I}lz0#$HhTvء[rsLZBj]."c}-LJfIS#,;*ɧtٱsL8Z)7\5 EAƐj#$3 &4hȉi , <Zݟ8=j>@]$e |>8'[fZ?#-WU9UOXc0U>L#3#U9̤K*%P޿}S7"6J#.d4MԚowg:ֹL˫Fc y<@0m1=,"ћciiDMcûEAٟl5~)zXDoP(#F2քrDNt^``WȆWtttoǜ E,ktq㦾S#,@5ۈӴ< o:&/*/4M^)@à)ukI7} h:#,XoD1!BuaHyU^ڧ=^'YerDr:0Ѥ4LŐ.cdD%NtCY4||Ϡ?'>w1;O* 8ZT;f4uT x/]\uY\X*Shft#,۩-lU#- %L,`+H&ah# H{)#$1S)"Y jN'iGOu9^4k<1f[qnF֧͇McKk8[!d~SkP6v EGƿ;#-mw]#-P"UqJ2wB|k&nco}uquF`8+4^LM-ͪNMwG"]M#$;J,kqfDCov6CWBPRdNA#-DɄ!r_qZU-3X.[lؔqk i[iX֪2XJ׸r͢z2^D$-FTi+gh9]?o\o덑a }Bvt#-9H#$3~;j4Ipם81oEihudmRZ=0p $$VP^#ǧ"{ku=IhrDrcaOwKjQ2-יn(:ٚYw>°ڲ%7I0}I^_;#$'lPvm[|Z㴗6JgvDWB)?Xu#8'@ҕDH:Ѵ+-&HTې0uf0-`#,Ψ1_F!(Nʳ o'ӎ/RD$PR0Lˠݴmn$v13wЅ1V8\bּy|{UcER6(5j Ρ8o hF$HCQY(L; C8tE)YYӆx|]ĽT0B>-4|!#-u9L!&[B^.3н!(\D?{R|<rVaF~>f⏊{XI@8yyxbH$Z$TlrDžʴJ!?U#,G=V CDBU"EIȗۗXr{o;ƚ:t^sb!BLI=jULF\9ޅj" h< nIj^G?BOoPM2>&>Vv5&t4!חâE##-VְE@Y!S䪮/W%ڭ藂؅Y1+y#%TNcʻ"#b@ D$UzkT @1ܞbf_e(mP=*"Xr?w63d0h&&)1 1Q)2lM#-L*M <>qtI#ć/F޼{JI7m6e1AdH0Î!(cXsȊFxΘV݇ bt,\4ifO7F;ͦ6^Sdȁ%l`zo,f78lIEi0bV!#,.,MWu5v~•|3 M;x`wݪO ($~8rIV6M𙭬x$B,o#-|f~@4ZbU1^ mm훦`foBHM#$NuM۵.n;$QUk \a[f6%ad0) 0͢#$buF*Q?[`E5mn#$dbr#-0#$ϧ4'ݙQuD.Aa8:#,9SFVxHj2B{)~/S@kAyfxK„#-D3:#qGHFEQ[y![ZMV խ4T[8 6ZHF]69!w6QuG܉#$ژF#, )hiB @8SL"EA0i9 2mM6L0c&ADy#,toۄq!)ZEiYBH2QN }!F ʧF>~D1k'#,kf,F4mE1fጒ.kRPn rnbZ@<(ӄ}2#,*4T`w QZF`)ZjD17E4E.A&lh&b^)xaԆب#,3Y~A<.9ܱvƤcQ*EHX`oTghδ"L+"##,3PBfk:Y9e׍o3d H;x-R&#,dӃFH`MBhicm1At6C ܩi h;MZ%F`$0AAj+#,<: O9ARW0rfE:{aQYu-slh3"]1#,eTETOH?8epTt3+DZ#iLgTx:vF#,UE*Dc#,0RPAD0#-AD%*("Rp$CB$0ŭaX#$8ZhTUHTdI\6ԑV?貐iiDIhT5H-njN j-(Z6ɑd- )OS c!\D D(>9<#$߀Sſꢏ5zoJˋ}ABD!DQABrDԤIz &giPR+,t/1F r &TPY GY6& #, DA$T3HQ6Lm֠1̥FRP OޥPz)M%T ZCl 3e61.X yS^znU!tR`6vR<$Yj?0tH~1bЭF^w|s:~:%z@q$d&섉2w<): KDL 'hN#G#G#-dhxC dJ _wƚ:j|6|ct ̻C?}nGqxm7V$5W#,"̈;)#,-̃—ܣDaSj"B#$Ruc"t1N#mP;`@=3MTA80xVV[r)#$?2U;gmb)h: fJM$(ڿZxT|agOTu X W5T%Qa?&HL-aB!_馃x"+21Di QkslVMkkv&ܻm\mŎnVƮKkn\kQ&hQxj[ǭ|+ŭ`osC#-24ӢfbVaMް2Gtԑ! #$U? "]û7փU~*iGTs"!l ?,}#-`]#-E#$v<}VZiL) ChKوD ;01fXa#$ H$E"Dub]޲D@R Mddh5hT#dǑ@h(:T#$D=VQF-PFQHAF0jWlkFD RvLw/BA$ oJɺx+3P̀zs |j)flJPK$eIfԔmFRdaMlmj5jZVj52ѫE$Яgʷ[1d"]ooo|c#-e 1`DAP#v(Ĩ2H*O V:B` hpc`#,2KXHP(:0Z``P0h`)#-A #-/H#-5Ĉl0C>!h"P[wf.jzWLE@-U$l)9\T7Q|,p!0&jΟ>疊)TR}! *H@6Dw4=S< M~ Xhh eŢ0% L̆6GGD <#oÌJRӊDǪ#-S0 Mj?#,x*s! O9;˷JyeԩL]sQڨV8KȞeNNҨS 1MǼu0bY|uƶݙ N˹4gU\|WL 9sZYLĒ89vҞ=[?17٥'Q#$ )ULH*IvzZj^u&L?Y󄓃z\$S|ʭ` A#,K.H\Tڊ#,Q":Œ#-G+'Ή9+mp|76B]@KPT, ~קr'_/+)oáUo9Fpr*H;V֧=+ˏЌ$8]S8[訄})*^Ӄi;F;tX){[=bCקLwIɃ 1q%1Zqpo3#(!_^ s똮6aM. ^8e ]+L <(DLcyJ(+pө:fy#,c|~:o3g޿| >zs0>O8L]ϻb-u;=7+ ;tcww۰4#7L4]=O'SAX daMʹ:ݤ3DHrB ӊ;dcT,LcO3fCj0#iGQ1antf$xjGPP%K] p2T:y;h|0l{daB㱜#,b…⬰rTNTMQ;6c86r8Cy110~n8X(&7 nA҅Tnh1 'Ǧ#J'h^D0s9iaJ7{lVa#,~\)\Uv (fG$ v#-߭rbycn6CH\HRp?ze!̺b7Z#,>9)i;hF#->|R cxp ;,JB[*j$sN+bFJƾk"Dv:e;F#-~ٸ|!4Uِ*OK-iJِXqfkԾ&{N U}!)}Ѫù+]-9|`ׂPhS9H﷖ v{nT3ڹ:F봭T+2">> @9 ՉiPLqvZ*/DaGPYq3TQ[*CC^*ZmodGz7MchxX3_Nr`N8ڛ }D(H~Ikhd֓m, FbQAP4d ShXЂUNsj/]S$$-#$ NP$j6ͫr:)DQ5X#,E (+)6K@B_㞸}s5-fr#$2`?# N,Бa~nw^*"ضMhjrI@e ,RRcOnc3kǎ[-L/c2Dk``0ma#,?:6b"#-0eq2 U>D:kN4`*C<2J^|-y4BBb)J+ƞw$KFe#-bf60m6C#-&IXԑK wQXؚi43IcEo-4Nn锎B-ټQl#-@Y1!Md3N Cf;w. S5+qcn5)Vsor3SEhckZ2#,cYql59eoL$1 o0lDXL*cRV Ee Р&t-NyٻZ`,+!xlQ#,PPs5%%#,A11NJ-\D#,Fd!jDU8̯iY2RzeԨ3F۳mG-87s`NKf54Ӟ.Tqaf0OZMN ʎrԺ#,igD2V8jmRTVĦi ^5hŷ%WoNvO2CdTux1qkd505C7c.ۺ#-~OJ1N5'䴶Ԭ(~5 MO Ɗ$*6q+M4 %k3xpww;:]uxC!a)2,[ Ll\3j:wkct#-kfS+:6nȐ4DEm#->c("{hG[ 5x,M##,iMA DN^xe)$ՌF0\d#3$d3lR#,{)2q' )LCH"fxs25Ɖ4m! F ֧PKO0!4255pgN 8I4sJB/M>҄Jү\`O#zL"0PRcDcz+8&K/.OԵ~4߃HRMQ:.!H}G| ʧ}X1c)#-H$=*SjŗNq>&E_!$sq? w怟@/A<& *,{$&ڷm¶hI^@#$1P6B^c,$mbLKnnJAHi2`n};uޗ~'i chNJàWyô\:7"eH(2c0)$`Ysa^w$jEկ q@H #$XR%KXkZԋe#-MFjgW3iB T,'Nhd'}2‘D#- #-=̋fn(RIa\%J(#,3Ѫƈ|]5J82V)#fH6 mǦ9b#-@C)v^[--ռc/.В|y4QJko^/4MV(@p.@+qvw@ hE`GLĈĽVtI|h5OCBod4”7RB*E&LĮmq3~m|>!`3g.bHqba:f`DFYD,$@#-6Sߏ#,{w1Qꁜg%D3=dHFB/t|>~':hx\\cHR KIpFRKC]8N?d#$f\x̊iEu?ûע^I!!G C3z(p}~TXGAwm[hXw0&k 1G%2N5J%86C*CEBC(Ԣ-7b]N[B/{lWBSu}iҝ6(|()$$@/gbr'{ເ7#$EJ0>)QTJS6'6)0l8)qQsZF@+eϨ#-_V<#,e;DZpTč#$(vE EAI" TRjw_j*<Y#,d>Vto6kNjY#-,0![btk?$z!;;N>Eę!P#$"wnn밈Qk*1.hU\zce)^5#Ё'4A1*)8g!Hͼ{7bl#,#,-ՊؗSÏxfuA6#$LICJLFyApBE?almXllӼUXɧ #,#$qkT Úr '"8dB#-(^vƠ#6^f#$S0,  gj9ۦ .>;GF) %1ͷNz5#,D鎳 J,r`n`UCj" #-#,C  6k#P;SZ5xTIo!zj &1DHX)ϙsua X;z& " AB%0áDFP8*sN5NAB5X0eQf/GYfL#-FpaLc97WZL-$TLNIsZ9'eyl뛪vJ ^zۨ $w#,%p]T[#,RͰB i4筌,jB @:;B g XɂH!ԢN5@Ilg Ԭ*RxMռX- y;:]$>*M#ȢA: 5evA[P,'ѷMl|8D`6yH<#,XN|dѝ |tFFi3m&#$vm*Gu2X2Ғ,4f\|iwdNirLG 8o(4S46@Oo]6!A:Ne;mrF)Km68d.ebLZ˙CA.& 5wʼnRt$!9 %vaUD<&Z]͔:N-fSK8g2hSX-ia#-׬JXU˼q5N*s&iZBĴa#,YxB˕¬E;!#,g5 Iy*U8aεl.uY\T8C5Ht]ʁ덑WC]&!@E#-56ɛ!;ncMK|`iRu0:ù_Z&ppB ܒ%q}Nphs‚k2ZΉLCzL2Z@Yjdj:Ab,!Q#$UXm[3\nP[d,7`$-Y7nzzo]γX7`i֦8!x`a$LzS0W>mW&8+RfR;mc]6Ebs-\hb|;-:]?G9\ØGoia߲%f8`HnhZb .O"#-e9gWM}1)fd\b\kQ<'ai1Lpʹo6X,*. lp6h~fe8tɁxko#,Q I#-dމmfd04UXSOL۠6 Ï4a-۪h,DB]iC7#,2 0o )BI%1wmp׉ۇ&ʱbmiXzbS U-9}_SHI*xx1Q}鏭R*2GN\dL3ǽ>聾p˙iQ>#-CH TPZNDLbHa&3ULk1S,U",c%v3I(z޻w^Ky#{+lu1H2G.)#-b(MY#Z4“5X1$*3-|gPY1l-M. Vf1'q yW6ͫsuzYO"ZC@z#:c#DMOz:QILaɤ #,Z5 &\2bj~ .5#$:B9ЂhԂݿIT*#$dcsm#,sRت8v΍#-6Pm0ۅlaoӊ2LC&Ht 3vx`3eF e]#-|dv5ݵDjkiHJߩԖɰ*8""`Јe6I)HK0#-8`!܂xO~~)RLªp5`v03 2"Ed#${.z«✰* mˇG-|qwPoFr"`\t}a[ 'n^I#DI)Rch#-k0 "5_QtV3DT,R<X#,FD9St@;Ϡ#,#,εб2vA$YrgȍspjZ^(~TE8{il-MPĒ0M#,`0ܴwqAI˙2e0Y#,4H:`Ãp,a@&tCnm 6U&5[AFa) HM"X>)6ڝ#r#,$a-ɉBU(pC= ҡuvwPŀE 3.%sv*5V0XXpm/fPOڗXKKB͏7 @,yoh@R#-%RȐq!2=˙ 9: Z7@$`D`CbhS{wKAF]..xwcIUhkީBIf}[k[G T<#- Λ6X}V@$LfG،hK #,}kG=yų)5Qnl6;qwuy]կ$_#,+!GSpDPu'w"0nwLoz31l$A441Cہ+cLlVMѩݭ[˫WE#ch%Sfb~W#-4CflUJRhżkr &l%-n= 0Hrd"ĝ₁ ʫ"jcfF+XJKeB#- (ZxP(hOu$#-mQޞ|TՙS[׺ 1>M"L' X"y`ں$^*{)(iWBwnBRAuQ0"@M{{n/dH$D֞j#-#,\SZW7FjM(FREM2 #,[mP)#,B#$+Ը^TĥYY^LueQ1s+ӚXq1vl%#`:+44~p2(tže#$>ۂ6|rH BC~(zg `WVU#Y()M46EE-T`MoƯ$Z6ɦPl-4ItYmb~(ܫ}!wE uTH&zyF`9l|SJ8R#$1XYkQh-JFBABF$]#,/Ofd=?qCZ6Tp7mֶVC$#-qXa>/h]i#-:'//,pcoG>D 7(6ւդIlqA#,3ܝn#,XDlR/%3f9!狵#I*1\JSnÉvg `oׇt4!]p<֗#:u`.qO6SC>wJXPnnkl } fiN!Dj9*}C5Hѓ$j"+3P'dWέmuuX$X"#,%t#čPޜ;U#-7#,F![J^"6o57¡w: lYm!Z5$$;y#,'3wC2V*7S&=d(1>:6J”->}"nJ&Gqܢ&GrT.r)3;Նwlv#$0WݔЀ\)*O0, D#$kaec)ܯTx&#,#,0L&ȭ?oo?_<}~:~w/>o?3)~W9>~|>oؘ #e  Mi@AWLp\d [8#IO2TE%|b$$,TѰ#$m;/EPg#,HAviC\yN M#-G#-?ǎtP\O@p@gS'/2dwo+r #aA6xQ#uA0?__@=Cx#-#._J#-,K,v!rIE8kLs+uٙ]ojTԑ#,L{nLlkvh$q#,CT0FE2wo[x奃O<=]`8kU4ûcXC !,74[Xj۴pӪi[qAmp^`b #$8l,rAXɔR2xS#r#uq1o/xZ1R!/Y\e#-)L|I"6m!L90{塶M^AȊkW0Rvo 80lƊw= ~H/-Cvؒ {^BBCFy~+7ᅬ$t%迶k#$aюE݃i;ڛPwƀK] zG~c')4HU4xf<(#,Qa>,5>9l/Ae˖|5.WD4[۲Ƽj5+~&}nmcŶFս-RhW+\_> ,jn:+Cx=&Ƽ&Ds"}Wȁ˧@N"#'@=fp0dxfaHWNcr]pX*J:H|=뿄EyPm$Y#$5J<|Qߣԏu||q?W%HQ#$#,wD Qem[S3]-5WeX5%{UۑFѵ)o#,Q/3iBf#,<9V =;Lez `g)9FlH=߾$\ B(H2)" Di9ǣ*I>TьhglC)Gt??'䗏3pQkBa$饟/ql|*tҜ9p^b!uF?J?k8+Q #,W 50>?N gAX7 ^[ c~qQ-y[Na E?tn;]"K*|.rX%"aώ$4xynZy#-#-q;'-UEBqGν\8x ok`3x ,+}?X3ܑN$!(` +#<== diff --git a/wscript b/wscript new file mode 100644 index 00000000..c80ea873 --- /dev/null +++ b/wscript @@ -0,0 +1,100 @@ +#! /usr/bin/env python +# encoding: utf-8 +# a1batross 2019 + +from __future__ import print_function +from waflib import Logs +import sys +import os + +sys.path.append(os.path.realpath('scripts/waflib')) +# print(sys.path) +import fwgslib + +VERSION = '0.99' +APPNAME = 'xash3d-fwgs-android' +top = '.' + +class Subproject: + name = '' + options = False # if true options() will be ignored + ignore = False # if true will be ignored, set by user request + + def __init__(self, name, options = False): + self.name = name + self.options = options + +SUBDIRS = [ +# Subproject('xash3d-fwgs', True), # we set multiple hardcoded configurations, so ignore options + Subproject('android') +] + +def subdirs(): + return map(lambda x: x.name, SUBDIRS) + +def options(opt): + grp = opt.add_option_group('Common options') + + grp.add_option('-T', '--build-type', action='store', dest='BUILD_TYPE', default = None, + help = 'build type: debug, release or none(custom flags)') + + grp.add_option('-S', '--skip-subprojects', action='store', dest = 'SKIP_SUBDIRS', default=None, + help = 'don\'t recurse into specified subprojects. Current subdirs: ' + str(subdirs())) + + for i in SUBDIRS: + if not os.path.isfile(os.path.join(i.name, 'wscript')): + # HACKHACK: this way we get warning message right in the help + # so this just becomes more noticeable + opt.add_option_group('Cannot find wscript in ' + i.name + '. You probably missed submodule update') + continue + + if i.options: + continue + + opt.recurse(i.name) + +def set_ignored_subdirs(subdirs): + for i in SUBDIRS: + if i.ignore: + continue + + if i.name in subdirs: + i.ignore = True + +def configure(conf): + conf.start_msg('Build type') + if conf.options.BUILD_TYPE == None: + conf.end_msg('not set', color='RED') + conf.fatal('Please set a build type, for example "--build-type=release"') + elif not conf.options.BUILD_TYPE in ['release', 'debug', 'none']: + conf.end_msg(conf.options.BUILD_TYPE, color='RED') + conf.fatal('Invalid build type. Valid are "debug", "release" or "none"') + conf.end_msg(conf.options.BUILD_TYPE) + + # skip some subdirectories, if requested + if conf.options.SKIP_SUBDIRS: + skip_subdirs = conf.options.SKIP_SUBDIRS.split(',') + set_ignored_subdirs(skip_subdirs) + + for i in SUBDIRS: + if i.ignore: + continue + + conf.setenv(i.name, conf.env) # derive new env from global one + conf.env.ENVNAME = i.name + conf.msg(msg='--> ' + i.name, result='in progress', color='BLUE') + # configure in standalone env + conf.recurse(i.name) + conf.msg(msg='<-- ' + i.name, result='done', color='BLUE') + conf.setenv('') + +def build(bld): + for i in SUBDIRS: + if i.ignore: + continue + + bld.load_envs() + saveenv = bld.env + bld.env = bld.all_envs[i.name] + bld.recurse(i.name) + bld.env = saveenv