diff --git a/src/limbo/model.hpp b/src/limbo/model.hpp index 45c85a2fa3..20fd1cc9d7 100644 --- a/src/limbo/model.hpp +++ b/src/limbo/model.hpp @@ -58,5 +58,6 @@ #include #include #include +#include #endif diff --git a/src/python/limbo.cc b/src/python/limbo.cc new file mode 100644 index 0000000000..2b34e7acc8 --- /dev/null +++ b/src/python/limbo.cc @@ -0,0 +1,113 @@ +#include +#include +#include +#include +#include +#include + +// clang++ -bundle -I /usr/local/include/eigen3 -I../ -I /usr/local/include/ -L /usr/local/lib -std=c++14 -L/usr/local/Cellar/python/3.7.0/Frameworks/Python.framework/Versions/3.7/lib/python3.7/config-3.7m-darwin/ -lpython3.7m -ldl -framework CoreFoundation -framework CoreFoundation `python3.7-config --cflags --libs` -lpython3.7m ./limbo.cc -o limbo.cpython-37m-darwin.so + +using namespace limbo; + +namespace py = pybind11; + +struct Params { + struct kernel : public defaults::kernel { + BO_DYN_PARAM(double, noise); + BO_DYN_PARAM(bool, optimize_noise); + }; + struct kernel_squared_exp_ard : public defaults::kernel_squared_exp_ard { + }; + struct opt_rprop : public defaults::opt_rprop { + BO_DYN_PARAM(int, iterations); + BO_DYN_PARAM(double, eps_stop); + }; + struct mean_constant { + BO_DYN_PARAM(double, constant); + }; +}; + +BO_DECLARE_DYN_PARAM(double, Params::kernel, noise); +BO_DECLARE_DYN_PARAM(bool, Params::kernel, optimize_noise); +BO_DECLARE_DYN_PARAM(int, Params::opt_rprop, iterations); +BO_DECLARE_DYN_PARAM(double, Params::opt_rprop, eps_stop); +BO_DECLARE_DYN_PARAM(double, Params::mean_constant, constant); + +using mean_t = mean::Constant; +using kernel_t = kernel::SquaredExpARD; +using GP_t = model::GP>; +using MultiGP_t = model::MultiGP>>; +bool verbose = false; + +void _set_params(py::kwargs kwargs) +{ + Params::kernel::set_noise(0.01); + Params::kernel::set_optimize_noise(false); + Params::opt_rprop::set_iterations(300); + Params::opt_rprop::set_eps_stop(0.0); + Params::mean_constant::set_constant(0.0); + + for (auto item : kwargs) { + auto key = py::cast(item.first); + if (key == "noise") { + Params::kernel::set_noise(py::cast(item.second)); + } + else if (key == "optimize_noise") { + Params::kernel::set_optimize_noise(py::cast(item.second)); + } + else if (key == "iterations") { + Params::opt_rprop::set_iterations(py::cast(item.second)); + } + else if (key == "eps_stop") { + Params::opt_rprop::set_eps_stop(py::cast(item.second)); + } + else if (key == "mean") { + Params::mean_constant::set_constant(py::cast(item.second)); + } + else if (key == "verbose") { + verbose = py::cast(item.second); + } + else { + std::cerr << "Unrecognized parameter:" << item.first << std::endl; + } + } + if (verbose) { + std::cout << "opt_rprop::iterations (iterations) => " << Params::opt_rprop::iterations() + << std::endl + << "opt_rprop::eps_stop (eps_stop)=> " << Params::opt_rprop::eps_stop() + << std::endl + << "kernel::noise (noise) => " << Params::kernel::noise() << std::endl + << "WARNING: if not optimized, noise is set for all the GPs !" << std::endl + << "kernel::optimize_noise (optimize_noise)=> " + << Params::kernel::optimize_noise() << std::endl; + } +} + +template +GP make_gp(py::args args, py::kwargs kwargs) +{ + auto train_x = py::cast>(args[0]); + auto train_y = py::cast>(args[1]); + assert(train_x.size() == train_y.size()); + + _set_params(kwargs); + + GP gp; + gp.compute(train_x, train_y, true); + gp.optimize_hyperparams(); + if (verbose) { + std::cout << "Learning done. data points => " << train_x.size() << std::endl; + } + return gp; +} + +PYBIND11_MODULE(limbo, m) +{ + m.doc() = "Simplified Limbo (GP only)"; + m.def("make_gp", &make_gp, "Create a GP"); + m.def("make_multi_gp", &make_gp, "Create a Multi GP (multi-dimensional output)"); + + py::class_(m, "GP").def("query", &GP_t::query).def("get_log_lik", &GP_t::get_log_lik); + py::class_(m, "MultiGP").def("query", &MultiGP_t::query); +} \ No newline at end of file diff --git a/src/python/test.py b/src/python/test.py new file mode 100644 index 0000000000..ad5c975469 --- /dev/null +++ b/src/python/test.py @@ -0,0 +1,35 @@ +import numpy as np +import limbo +from timeit import default_timer as timer + +train_x = [np.random.randn(1) for i in range(0, 150)] +train_y = [np.sin(train_x[i]) + np.random.randn(1) * 0.1 for i in range(0, 150)] + +print("init & opt GP...") +gp = limbo.make_gp(train_x, train_y, optimize_noise=True, iterations=300, verbose=True) +print("log likelihood:", gp.get_log_lik()) + +print('starting queries (1000)') +start = timer() +for i in range(0, 1000): + x = np.random.randn(6) + m, sigma = gp.query(x) + +end = timer() +print('time for eval:', end-start) +print('', '') + +print("init & opt Multi GP...") +train_x = [np.random.randn(2) for i in range(0, 150)] +train_y = [np.sin(train_x[i]) + np.random.randn(2) * 0.1 for i in range(0, 150)] +gp = limbo.make_multi_gp(train_x, train_y, optimize_noise=True, iterations=50, verbose=True) + +print('starting queries (1000)') +start = timer() +for i in range(0, 1000): + x = np.random.randn(6) + m, sigma = gp.query(x) + +end = timer() +print('time for eval:', end-start) + diff --git a/src/python/wscript b/src/python/wscript new file mode 100644 index 0000000000..b14bc093c4 --- /dev/null +++ b/src/python/wscript @@ -0,0 +1,55 @@ +#!/usr/bin/env python +# encoding: utf-8 +#| Copyright Inria May 2015 +#| This project has received funding from the European Research Council (ERC) under +#| the European Union's Horizon 2020 research and innovation programme (grant +#| agreement No 637972) - see http://www.resibots.eu +#| +#| Contributor(s): +#| - Jean-Baptiste Mouret (jean-baptiste.mouret@inria.fr) +#| - Antoine Cully (antoinecully@gmail.com) +#| - Konstantinos Chatzilygeroudis (konstantinos.chatzilygeroudis@inria.fr) +#| - Federico Allocati (fede.allocati@gmail.com) +#| - Vaios Papaspyros (b.papaspyros@gmail.com) +#| - Roberto Rama (bertoski@gmail.com) +#| +#| This software is a computer library whose purpose is to optimize continuous, +#| black-box functions. It mainly implements Gaussian processes and Bayesian +#| optimization. +#| Main repository: http://github.com/resibots/limbo +#| Documentation: http://www.resibots.eu/limbo +#| +#| This software is governed by the CeCILL-C license under French law and +#| abiding by the rules of distribution of free software. You can use, +#| modify and/ or redistribute the software under the terms of the CeCILL-C +#| license as circulated by CEA, CNRS and INRIA at the following URL +#| "http://www.cecill.info". +#| +#| As a counterpart to the access to the source code and rights to copy, +#| modify and redistribute granted by the license, users are provided only +#| with a limited warranty and the software's author, the holder of the +#| economic rights, and the successive licensors have only limited +#| liability. +#| +#| In this respect, the user's attention is drawn to the risks associated +#| with loading, using, modifying and/or developing or reproducing the +#| software by the user in light of its specific status of free software, +#| that may mean that it is complicated to manipulate, and that also +#| therefore means that it is reserved for developers and experienced +#| professionals having in-depth computer knowledge. Users are therefore +#| encouraged to load and test the software's suitability as regards their +#| requirements in conditions enabling the security of their systems and/or +#| data to be ensured and, more generally, to use and operate it in the +#| same conditions as regards security. +#| +#| The fact that you are presently reading this means that you have had +#| knowledge of the CeCILL-C license and that you accept its terms. +#| + +def build(bld): + if bld.options.pybind: + bld(features = 'c cshlib pyext', + includes = '. .. ../../', + uselib = 'EIGEN TBB BOOST PYBIND11', + source = 'limbo.cc', + target = 'limbo') diff --git a/src/wscript b/src/wscript index d7253761b2..04ff3722f3 100644 --- a/src/wscript +++ b/src/wscript @@ -50,6 +50,8 @@ def build(bld): bld.recurse('examples') bld.recurse('tutorials') + bld.recurse('python') + if bld.options.tests: bld.recurse('tests') diff --git a/waf b/waf index 84799d5946..2f20ca08ee 100755 --- a/waf +++ b/waf @@ -1,7 +1,7 @@ #!/usr/bin/env python -# encoding: ISO8859-1 -# Thomas Nagy, 2005-2016 - +# 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 @@ -32,13 +32,13 @@ POSSIBILITY OF SUCH DAMAGE. import os, sys, inspect -VERSION="1.8.18" -REVISION="4bb74d2af0d005ad4420ee36f19f050a" -GIT="878ab1e29494e28236a260212a5021b1de35d9a3" +VERSION="2.0.12" +REVISION="99294ba4df4d1c7132661cc921a025f1" +GIT="88e9382f1be4083121fe73d9172addafdf42f3c7" INSTALL='' -C1='#3' -C2='#*' -C3='#&' +C1='#8' +C2='#7' +C3='#/' cwd = os.getcwd() join = os.path.join @@ -165,6 +165,6 @@ if __name__ == '__main__': Scripting.waf_entry_point(cwd, VERSION, wafdir) #==> -#BZh91AY&SYW>99#&Y #h%H4#&`(ae#&#&#&#&#&#&#&#&#&#&#&#&#&#&#&#&#&#&#&#&>XFt]3}\M3;cݒiOWт些{kmi{oΪmzl;lwK[w>ƶ^o}ϫh[i;^}Nmv/nfx#&#&`lh#&S}QMwAѮ仍l#3݊:zhW#&tVE#*(:#&P$#UvI#&4WC G}{wg]ha5>U3];Mz[}{vgn˷}{G,o=vm׶w#&4d[Kvw3}gy2>}"$Իݽ8]/lCf;kT:nB jX=z-.lbs΂|G[_||ow].o}S㍉U>www{td܈}Ey|#3c:^ASc_yw]tg{k/;o{o9>7۽e}}yuʯ6cBm#&{/ﯰKsZ}/kkmZs|#&@W*]uVd+UM}^^oL};ݸ2t#3*A(۵ξ7}>_|L3{/{#&',ǢNh6yۼ|^E#;evt}vUۯA$N6Ϸ]=祏7/}b^{WǫӾ){FwޫwqwY|ス==d}؍wn[|Gw{r7}@4  #&2iR= hɣ bS@ @ FMShd#&#&#&#&#&H$B FLSКiꞓL,HW#*8TRsaJ[xqy=#3;11XU#B11(;T%}QȤ5mb67U"U#3LȨx*+aB#& *B#*tּVեTkVֵRA PbX"1FSR%%()2Iba4mJPa($llYXКaJ H؋FJ!L,T )"k[E Af,MJ2PRJ)H̨j+KkMRmDɒdb2ԭc46e2Ԗ3KlSlB6U)S "$m#R4IIFZ)Mc$3c,fi3ML #&C$ȔD6M HEd2e,Rdh)jcRT1dhM `F‰%Yc&*#*)RLRDb#2TfE %i$$Sb-%Q$IEEDA%!L؂I5&HĎd3Fa-S J!BTHi+$ɢ3͢4(Њ!JHI#*"fU,e(R4Meib̍Y EeDeAMAFM,IMm4"12RiM%,hF#3#3(6""JPS $1@3ZDV2"ɐ!MԔ[$V4$KHF DF$*4F#C34!!2h#jlReFLIHI$,EM0P16,ɲhɐi!LL6ɲRd"deh2FS)b0ZJU6h- "RDQcI3Y4HaQ( Q(XŠY&ha%1K #*F%Fi#*-m%MPYI,S%2LcY-)f1IflSEJ4*l)CK-~FFJkhZ*4&iQLi-F*IjXe&5AP5Ȧd62ңH,LKK1FJѦB6dU*lK*2X֒5ԥ)4ȋѥD,V+L@͂BFѶѱQ3IjCPhՊa&aDmfe1%h5(ږj6I+ԅL[6֚a6dBfSSJ-ZZJSSMZjIbLU2MًFffI+,hf6ҬQQH!C$mIMQƣ&MaE"lF @4LF41bBR*-d1JI`1eK1Q2)CLX0-i(ɚ#*"̢T1Ii̓D2aJb(#SM!fm66(ЍdБI%%12[jQ$٩D%TYT̢6)ٍ,V-$2$"dI4%I2ٚblbVRMM,I32hKE#6H"cEQɲR&"Ri!#hFMFEb6i03DEłiI&(#3d,!FFkhЙfHA ,#*RJXғ4!QdYRDHYV42j6bedSJPҒ#3$bTRZ(QUe%RTlmT)(J-IPLذDXi%#4`LDU( M)X(VV#i!#*IEE[VdTh1E& VZSTj-V1Y-fl(#(1B$()F DmhҕDMEDhYE2IH6lV%QEbjJecE(HفX-d5biL4F"کeCI$Z66Z[$IXѭEѵC,[j((#*I1eae,lH1$I2$ԛbڦ?CAE6jFX@?6sc߻IezDL854zKgDvQubiCrX)\nk=şCfOe㌺K;k F#%"Nٻs]atj!LﺘOQmnfN[֩weRTۮWђ:਍b*!d2Ӗuہ2{+\*W]zWm]y'{wbQ?ehQAcWen@nTW&̱0Y/,;kF`:2S4#*᭓? lbURs?!ؚтF$iu-6 8(0[R##QAQM#3w+4&j,NBB|jx'Bʔĥ&l!G>}5˯,Vh4Q)*PxŷRٺjy0Ƞ}ooK#" FG,Hnyxu+$buLTy|y•%]VVXΨFzMiz``%Ura"AKh!DRn#}8CKҍ~fGU/|\~fn"Y\ęꡎehE`]6-v١_ךܪr,ւg܁Ȁ#3,̨{ Iahw+Ս1{E, zu}a@fPKP[h[KVkKs(f[2Z"" gu¨Y3L\܉xrEHkzUhcug{u61^9d5˖ƫ.)- ߶zC,V,|UW#kEAucRSLP6͏sP#]+k6C$k_&™(PHsAuxտK%])}I*+'Qm*u4#3nx2N N۴)&J`/*(T-24GR[N u,AViiƬ!#*Ema-¼g>ڇ0#3<7 l\(vGL)4e#*ُr"O]1T#3Cz#3"8 \kRýT%H" 0g'0m6B(L($*4͊#3#36>){SN@#*i"5" `6=D1~PeV6FU|Yu2Ș ff 1(d\g?&qS*ݾ\jz(5Xi,~x_/.ܻLo+sRgSDSi%@9m!#3?tC*& G)-`,&|hs.Q bM<{q8prw?vx\$Q2G?#0VVՄ} ^* -Q%{T0؎$۵qYtAL"f̓;HʊJA4] gOamIjo) ޻UmMCqv{,rA $Iߏk2 h>GG->iDD/b~̬Fpj]﫳-ig!)9g뮩O>;ܵ5)#*:cD.tATʬTW5!E@v`ZCUBcc$B@aZhoOcS%6)liy%6Tݱv`Ow#Y>WNEϻ!("s=;3i#*H;0mEzW(vK01:e9Ja]En)+O/:|?ouٵꅨEZxY--%,6 7@I#3B`^-|6oL8O=ͻ5#*Y#Nn~_;_SrwALQNZaeŘG%Ht FyڛF.+` 6h;#34|nݞCsӫ GlMyDF54[9C/!Y\메)*PQZ-{4Ú"HzbޙpqIݮ(RoeZweCEe4 UHv&5JGJ\8Ω1q-gѝ]^34rR8h 5!"99"n҇^:{*cC.-uKyɂQDu<[(qDzZg9;R#ՅFR9Mbl=#c(WcOrJD2=xjeM?7Vd~"\WaS?ܢ'/gMӸb2pb{xˋߕa].X|GR"#3MYTSt1.IFJkRzCz~X<؈Gqnb"Y>.x1U!#3eY5nAdƽe;p̂k{m>9\ƅ2ą+#ۍDMD+e-#34\|݆*X*U&&U79a/q]^)T|$}Vy2 6|ymRTlMծ̖L9sUJkdޗ>np(lt ~f`PCٔhʬ^qʡQ,t¶EC*/ң#U}j<V8; @`|)B죯a\"#3m! 4[#&8o'.tJ0g hoQm Q<bTXy\|U^WIn0㟺 K)2A_(NxP'ҨVHCx:"Cs]oz_ S jѳeTsH|rE֌SRS(݆S%^BoKtP^RY$ `+;glDxxt44A:a6DSVl9^*cE$bvu2w9Ʊ &0Y ldާQU#3k!u"uo壶hEvR_UE(Wd×O}6GLؾc1~ux~>\eD!'[%:WE!qv,N0^^x*T6R<>"091m=LĠi*omv4PiϖN@#*5QHq6]7NO'g›ײ%oL0ccK29*\ #&A>.fk,+?n0ķmuyGCE`5+.#*wU?l-ݦ#:8>v~`[FM+ S#*UjUļZ&O3d]7QG۫@BC~m LuY쵮9㞏FYUo;zN^[-uU^Mҵ?g$ 5~eXW&]]{T374p)*fM_gUDPQ x^WgS.i?Iu `ꜹ |nϦ*DDa ##A3^}EZMw]󞋊7DpkRI(wpsN҇f?ݔ!#*'ݸpp[NKUg*۳,8y֦;~ClI[c&;|ݨsy=,##*=XYCBT{@]!zSS؏{\Fӹg9pBq㹳uO8[׻{Z ǟ>_\#3p{헦&tY=F06^TrW+i;{eEPO?l)PH.\s2#3]:z62&sBq~wW4bcQLP{7,3/+XgoC*^6}D@R6vXH54MSɔ\#* ΂wN7G?~(a,.5@B#&Rc>&vׯܥg{םwƹ򓭑˹(]+渪_ ].n T&1N ZsGͻLڃ#͸^vq~xp|Kx رL]^;\Sz% g?4bP./,;;:Ws)|%<_7&<Cl,v^ r|MI-`v9 ,64ǤLL9ɷ#\z lV%Ubr:~5c}1i_y}X3DqBXjhao1I൭fi7^: EM>m﫽>O˫`Y3#&g`s&}{pQY(N>ۜ;QZ k!0#3'N[`E4&W TV󺻼i^w#1$X4I@v NGɚa "VYX,0"ztfXx4JQc>^^5/\p,2*{pPO*+fcW%8Dp"#$ka(q+8s6*tYJqn`IiÄ&b`A4@;-Ɲ84d㘈jkT(ڌatɝt&1lh/99E}Md iٝ?;CWכdׯ`ZFó9<w4DqKZSуi%3b4Y 4hL_4#&邻g9U74f0Z4J±whC $d@>"TVHZ(Nr[4̢!c_=3mGwSn 󛗤T!j!޹z%mtM^u&eYzVMbjR[) v5۾[#3oFoʠqy+*#*C-ԓN#*<>sxRZPB%1(t(,]L᫛Dn Lѽcvxc^wff#*_SYH3]-Y#&IB":][54m THmH*1`:1FqJx(>:^Z]~suF0!V,T1ރ;^wYEF]oC-by+#&I!5LM/ R8d[T#3l#(4gZivk#&]aE+V{kIWө؞jQ]@#*`6Ā1cF6]^v6+ӅA2&F2EadhP)#jEe0i6yvqN4e',Uo:B@䵣0<gbъqx!3U}G8rh]W#)b{Sd>?rdr6!&&r,JhWdɭfl8`ed εӕ_p`ܹrI{]0XM%Z>.^ 閤ȟTS ?beT#3"0ʅ#36RɖEnђu87KX?cj./k\e#3#%ίu\&C^ njHR`#*XH1>[߈|_i/ v&QA(DY#Q[R,.\iceJHZ,Gyo⹒@{#*4ޭɕi"1EPP"Ӿe>A#*t(Pa*$$q<|2|Y=RW"~xaSܳ/yKۙ;X"0bn֖k4lʴ}vKcrã5c:9*ȡ&`ۖEmh3NgH]bP`hH\s}ZL8B:%19%wMqr#3}T>P`L#nsKHۥ7|säk/g]XօV(;8?i#3*c۩K W{%&*^fcΧ^Q#*zv7g<>]NȘ}:_JP.b򾓘DJx{s*-' BNm0Q1q\,KH'N '=O#3*}^8C/12n7&s?TCsbԃug5YW5&&U'ug۷;o_2hۚ#It3#*Ze#*SI1P+3۶%+F%\'M ^/Mny5a(EmҢu̲kCxj?_ncf"vZQ8j{y," 4҆ޫeKa]VZ\\-wV@n:#*FPRfxATGBcXSyTU rpeۂ;j7Qd-z1nM#*ݠ6#*Ѯ"1ȍ7@ma9N͜o.MeǞ;}z7=vƗ$Q4#Rtl1KHO_d71dh<9)4D$-y5NלhdΕVm.g@"]zuoG,3ysoFxʽ:+#*sTm~iE#*J̎Zxoɰt*4kϫ^d4d,Z74Ist/y^mt,ޏL`:cGn>;|P:m>Z烟.4Rs6q. Ra\c>lg[eO鿣}h\nթ+uDۼ.Y0fsv]4;^ʄW3y*UǝCOS|>>xD]/߄POGr~|q4CJ3{ꤴTc"\w^wEŐ=oO /˺λ2 ʢyA*w{/i,iپ;/<~vsRt3Mmmӈ{:1kmŁWq_yǦ8y__/ʘ׮,4nW2sj=Ұ/o4\YŲo;|=5dUrad%gV:˝qpG|Kٴ33mV[h3ߟQ'9nxꦱ[:^:G*2G4>ݏdޠb,jp>`{ʚorS&qOGoᄕSA2- =y>M^{;?sտAz<&;VyEUk۫gz>_1d㣨w+]<_ i:|'&FooD{Oqo~f5[f6y~۳=}io5XyBS_#&DvGk߿J?;Gȟ0;^gurPaLr5}v6/ѹ\?Fuxl~>%c^{OD#3*]eLDxՍ$k=f8|EWMdh3V^[L>#*U RA48jvA@ukZO[Z:2)_4yl.^=+x_'Zˎe2/nrrTj^wsNpr۵8dmINPd%F snPзGm|UO }u]4[Wl?}켰Uwn׍zc5G27)uHr򤔹?5 `Fp# ȃU^^Z詗gֹ,q k3j|+/Q26V܄bzhQl7FK9EhRLq+D68dXH*҃*M`l魵 #*(̄ŋX ⴛ#*2M*i4#3B%TDhvifJɼCh_]8HB{-N,N~z̆g#&3)gMKeFej"L",(FDjtitt>pX8Hd@J:QFk1|- c 1TViӵ8<6YIT(!H"QLFag}/SR|ϳ /΍GyKNΚ>:G/e2׭/dyOB|~+᫫;(Mx_ӋL:pϖqۮ][^?5y|贉rh4![JŮ?)^{==BJ"j#*}gYy4ϯ'_R6]&R#q ^3%<]Kh{odvI~G=_U^vnnT#3QI z}@#3<,i'+?g60ƎVyaҷ%hlR풍$Pic! c#3f ()-۔˵W)Sd1Q bG,KL攵E@b`9F#3VF(X2)A"0Xi`𬵥;{vjM66lxꦼYv+:y=QR29F(``A6"2c$.$bHEboDsSDqJP1̃YGHCH#O#3dF&Â@|\e J0T`#3#&‰#hiI3L (,iv0hD*x }+vi2YQji"E,1EYY((Fr<8zq %DS*Dƨ`{:~HD)Oc0-{G;kk;$e^=={g5ax3gw~ͷ/jm.j5\p eu7?V67z~Xuq߯&nE[yLmkgNAPU9q(Hهn%.C':Ll+owEY^Y7VM>Ehc'v'-e;Q8XQ@@cG]3xRDN~'Ѽ.T \R=c CPYgFv%cx_#&ҾT Y\,Wj3#&G'Aq!涢qB9?i)ͭQĮ.lJ5zD+Io5_{+^㵞kPǢ֌>n,W"#ۑ3=l*նVR62B8HKV'sXiAqA݄" 14Nժ 1m}pò!!("35aP ֙MS b #CJS:c3cl,ϦE-ga0 O5+4#@°Wiq Wri12X_kH;͈HW⭖޵1IѢ=0h9hkGs*YŹɲX2 fKr㜉lG-ƊŢ4HeZ,D(J#34:pu#3Ƙ!ޛr;` FLKm =x󼕦bPӚj#*G2)( <-[|]~8%le<&TDTBa:p#3*gL٩VދJK؎FW&xe|"ml4XcӬϚ51q#ҋ/N )ivr6Qk0w EAhk Z4!;t x[я[Z|c:z A]͓<#34#3A(`GwCͱM:%J2dlZe剗1Fdl ذ9N-1AȤY"&L:)<'Rs{RUhz?7=X];(?"SƮ,llfe3*#0aRhD$m8{wfO싱jߪ;QgvaGQ#3&hZS0ԄLF͙F j ;2hqO,U-qFdy(8jmKy6ƍ܍V F$*V $ۧ<.jwkXzq¹㦗HiCH`؆U*Lk&κ?&7ݱभ00|>qˌHbh68&)3N&$@eAEfoDJ[ˀ%U;3a/"Ʋ]&ung8MP4`gkqmw/Ie"=/Ct]89Ve;HWUV L5U"vaapq9(%9Ųnͭu"ƣ!B$DcGmj`[tuO#&Z8K6vҹ|#*l@x2?ݎYpjaD5t0`Ʃtd[!ږ6Nq0=*PnrPrvg&i1DX};ߋΖIbu-谹 o@b/=PFR Q|19)iҪe1_Eс?ab7ƌd|وb6/YsD!'c;$r+7q#/i+c2wa{=nz7U| 2La߶7Sb$B1pI@W$u/.J:a.G3:d z;Yui]8xgPqEц=U»s1Z-!?cr |<Il}f)^Wړyey*s#&J'A)D6ccE},߯a[1'L݋98%t| bԩd41;k^ۯcn"Rwa8F26f2\(#*R2HFzT ait^Jf8^[[#*SmsX45T-öEgPpZ9X3}gM"CGB̺2p9ȵ͹h4-F-H;X9!CkV"r 0Fdp?톭cI&=x>kR <>*BZm2 exbU ILZ\|r6/I- HH !:hebo#cXyLo&E#*DZWjP'1} GA6x;?U8kmTS#H9'Mz6/¼w;r#3u\D*]oŗ0o_xTz-2[-74T{KY7ٽt=ItZ ΑubЉ^e2Zl7z": #|9%$tp=hv!Ƽ1׌sF[H{8G-Th/"V,ZZh#3~^;qKf.M:8.ӣY;1ϫ'?-|ӠvC՗r^tudB|#T& uARTeivt]{F#&Oԭ#3pwsՅd}\3%55GUtsǀjɦ:aku-m,êD56:2Ui}5YYESJx|X^, kDTWBJBbiܭnI?-Uo|2_6Hi]({ju3p87YfE?5aBÌH.tRb#*1>(DZdeyҸ\'|stL9(!WZR? '[pg>X×/\{8cҩ{Y >IuL8 TU{V%i~MHO=8NetG`JǣG#*-֭ކ{QHa#qbMƷlh|㝶{eL\+*Q#p٦v 0ćn Nݺ%*34FסE74N~v?!Tb(#*|FFTAuce-> eQ`Z1σ%fiy><<Զ;\ xm!q@S s?ƒi^޶bׂ1&ZX 쾤\roYM`5$63R?t(b&7"hZ&h#.v#%'Hs9Y&Wm'Ywd{J &L(;wvlv(y,6uyYl)E_d~rό22>V,+k,_'{qR'>k}#*/IUeK#39E]$JAkQys%!NU(pp覊 Uv5Ft#3M_h)Ң$%_m5n%dkz_Ȼ=z#n 7R~zgYv#3ӕ4Yb,1usOx,'m%>EqR+;0'w|,Ǧ{-">5X͕)9|Gn}3MǴ>YeCc f>n¦ʲp{gabvTQG\KLR#"1#3.Canyde-_JT$FK&}#3mldٍ|]gOmYՅ4a"@D8[~5]#3k$Ymoz/ck^Y[<^cתAD)BÜ⮭"Ʈc^i2Gk'cu r#3a#*I<%(GUxk.x+[YK42\b2i$3Ms E#*=׆⦧:] wI䓹,|ȗn{o.bĻ}2v~K/}0la}PѯXPD=m[\EIhcZt}K(]/5p*#*_Յ+#*/;(tghj3nd7:W_nzx鸌1~y5#3tt~>q>zllUG{'R5 $'}_MJhs6*蝶ƄweX6W9:#*V_BSG}|Θum*~oo#ϒk.7Gճ鰞b\@e":jv:ApHL}fFѬl'H#3*,n`8.R4<#3rڑURҎqՅ R#*AasgmK #3)0ƫK!Iȹs/Px#*nuF} BI'͍}{I4%iT[!Xx+lex_ESϺNy ?1'Z{:{}㼜qYev3}ՃX!>{e#3IDz1#̚ю/|I#s4!9cgR|%fvJ,:(Bt us"㏷l_թ?*-m_q3(~OW% 2;]{2O|-DĿ%#ptx}?^~x2\Iszxgz+4;3g1+ *5\A(MW<2#3j< uoL V"߶Ft)CL;L'z$yoSd43!]G.pv35||F0vwr}ظ._}[i2yfI>7E#3׮U"=*zԻ:bBxw\ P.#8%zA#3WEӎAg"B/ch $sfdHqǗ#:H.Jkf#*%/w]3mWQUpͦe(ovd~4SWדަEO? 7KK+6EWtm+e?|N9CfkixH/WZ#*'/k~]W&ꆬtʀGGACIX s{FOJcWKZ}xLeYٮber"'vuj)F컦W[]"*Vr*aHCS0gIkUX`PP(GkwQ\+̇gRMdêڴ; [A,85ZF˗M%ybC}H'2M:ƣ!l7-zb榙fҠYs>HB+焳(eM8Pyk1qI{{ظ(!n/˞\&sSM. ~HjYc+>N=O[f5[(Lp;s]e#3]跒J*F"rvS(4Dx<CŻ1ljzcȖ&"H&!V<٬GcS4va4'5-L.t2ѢwWCu-/YVݖ#;桦;a'/[ʩ ޷BvǑ(c|7㣬^LZ$eeQ_V/mUlHu5rGe2T諛\UQ| 51foMDYdI5gb{mr|#3XeG7K⦮H3)a7ӯ?i|>wS^&{l?n:tr7/x3ݪ%qwRhTn>C\[ú7RxfU[{H.KI^5i{QK! sΥ<֘53~“Lꉕ}@y~2NIq 6Wfnv,,vo*γ J[y#+һ~qZ(li2Տ뉷OؕrqIzW]TI:-:jm(n~)&8DL%q˝ 5mr9Y=䡭:cx;}8 1NGο|N#s\$xEt÷'"~>fd{F7d'ÚD`谕́hiVH,V31n؊FQ:HazfsjɴhH=8`'aҖ]:h^{%Q/hm΃5{ϛM_qGi<#*2b1c2-7":pS$OEϖcYneWMa(nC yDkW3v2#EB')ۖpͧ^v\kgI #&&ŞG ׈嫺c:M;?#&plLMtbنϋ xaˏwI1 [Fy]}jSmNkq&M<ҏ>457p?{g,İTDJv81zߝ3CΪN:i#DӇ\c\Zp,NH@.wrR|N?\YNGҙbz)1Jrz(eo_#*醱_naP221hoGǜy6|sԜvS(<3BFgΨ1'*zW?PA A>?O{m,>l=v&`7̆#7BSi gYeVBۡo8&M-DG-[m>~[ dDqF T(WQ3jƩC@09-#3 xiA`??2@(S9Qc7`;Ks(e-hXUmN"@1,>qx'jWڭZ?],6pi$Cp_=-yDjW%n>Ex0ɖ}F+K ^iZ)T5AOIgDg[묷s a煗/hiOu֊тak7tShvJc5sy#34t?s`@_7o#;gZjmՈ-wSSsQHMzyD7ziU" & (}@NSx2ls){D1M0j}17#3;:H&9 @u뫢6ҷ'dX91VoޓRxNpdoVŤ_gѦ~Ac鴰9Jpȅd&X)UI@Ť_sx51 ([#*НeOh$)!7N)6d5@FED㮐OCSh^̕T"LHn?V41v@IlbBt #3#&nV<P%%s0r`GV<.&йTL#0v:~#&U ¯ʏΦUޅKX`"v0~O tۦwm. h2QQ_%XޮjZo78HMis)>Tl6#!Uo\уJYo$6s7P[n|U%1׬ۉAh}ۄe#N#3n#*2Mܸ`VRIh(g |SaӄCx=% }J͝bv6R FCb5w0e$%4yқlY2,"Ѓ;#Qߎjȝ3ӺrC΃:Ԭ̅jb#gV!%G \3 H4`!1Fs8l~x:Y؂sNY_k*KW͞I&in&&N*B@ul#*\k{XeH*7Km|Rouv#*fz HC#3b 35A{io;m؄dlѨ0+)t#|7<ϥ ^{h5BL0Rh1%,vg;i:矘L4Ale8mnmdbpmM`u1 _'SSZ\7?n,ki[(7%&@WQG.tO#2CCTA7ê`yaUBg1SASx͕bT6ƒT2"]k "BO^蒕px?%ab[z;Nu_ Ϣ4H %֑S:eٚ.Ͼ>Lnǒd҇{OG?cyÔU*55ʽ0%QzltjJ@\=m+GC[.y#3;4iEJСP5vjvqOaAT#bUUQ (81l + }=ۃY^IMRtR-[kBۓjl|{x;Oȩoo*#3MOGK煝sY$piQT.rAK/jEDTLYLpaZ7ZcuX#)!v-P(1vڇl/\f K{ ^(j4y@9VuyB#3^+*(e(2hO6UmS [[>z#*لL8d$1ğ?$GӮ>{X@#*"ٷ~V:>$3> L_8Hq}C."4#&$,9gaba֢7D#*x SHX%$]#&Y4J[iIFL:^)tPвҀiwGT" /*w%ɑ6h",Ea#H!SLl}\A kmŗbKw_ѷώ,c.Nͭ73I`j7J2Wa)/JΈ0ȱ.],8gcB?Y0`!󳻂u{#3.4uRb5nMλ !jK}MX4{ BcR+t81}KmP#xjFՔ-NB^khL*Pj#*VGy3ÈGP9`rhqR)$!""T#&*dA$gxc3k,#&Cw+ܫ,TQ!|Wb8냦;㳓Cƕe#3%h k45[Vjn͍ 5uHurJ<Ĩ#*Gm=>CT6j70|4#ӷC ΨTza8R`(#3 " Q"dΧî0p5nf(–K'lSf-\D` \0#3;>298x{(2wzU+u.y7:M(Mtn|>;T^ݑdx]{I8^4Lp>8>Aѱ|9a҄ T_]#&P|hs3" x:6z#*#&ϬJT5(=^̳IB [c0)ؘVp HIaBm?/Lo dW#*ߡzWMΊK#*`Q}^XF(B2xky)sz_>)gCwf=Nd GE^AC6hnA&D5W>Y&l`; PAC^e5l;Fq @Eu+4(ZEoΉ]JQ-r.K҇l'#*靝Q#3:`i*"z)9$khkW~"&:U)#A6>b!P0N߲v:{Tq8j\$ITWE-ꤳ$hTR]2^bhxT!TR#34JHo4#&'?(^M}e8gC5ཛྷNND7VӪ)9{i7YxBBNp~5`>2!Qe[˸rvAKJ E dztM:g&LZFx$EHjϦ\ĜxQ%՗孋;d1Iyǹ3HHuFt5:12fTO'/Ъ/#*"tUzC~/)̪̚c6V`#*iyQ&Rif챇s˩S|CyJe[ņujdV#&bf 0sZ#&Cb~wlG\2e$V\3 _W+1}þy-,ntK;aI7S 1E w>3xjݚT\/EwC8]7uA_ %~?g[WuW$oZ!B^?M[OYOEj 5K1 /aNFݢSV\x~ćI6?o*g?Wٌ) Cx>^>Hp@U#U0G#*}-r%˕ɣb)єdԡi&ׂ~ڇ?pkge-"}p C)iҫq5sjuov BDU~eu=}9aGﲾiJDCH1v`iMK.&7eLV6E3;w=Q$GU*TkAqXTE/Y|>~G*c 3oM64#3I]j ]/<9aw;D6N6GiyxΛbLݏ5qQ"ŁϔҺ?h;8IīUCFd ?1]Q,Lۇ?cZmZmZA sF>Dt?ن?:P~+#* $ɹxS D0 'fiױ^AjPHC1E磾^{CPN<}}r&dDAi;sc򚭤 EΚ 7qdznjw}{zTet3 PQ/ :77K{|'s=+S3f1e٫P|+xXTݭ'9/ASWo_'trP3oJƾaEX Pͮ׳׆30wْLpT:=0[0jMf-o#*6/]w0J4}hYZW"3GX8-ˆ@_$Ro:iL?ouRh>8Q_GaV5?O.BVDy&OOZlӥ#e^;*-?bͼB7j}O8Kv| D4j> Vҁ\b^y#*'J, (&N(t7?şdqs#*aXUF#**?ܷ9 KG}R"*ҠEyDTKEyGIZ_Kb + oBL}o:>U_7@8%'\(u%ǭ~eEgr2XZVo.?ȹoEoGF׊a34Ftơdp^0 93)/ĮrחM *g|#*m;ۗX/(ȴ .e5C+/\~S|ڀ['SqcOx:9׎#w[ IF.=xs>ۈMgUb6vM=ҦH6GK?^n_<,W&;utqaU%gWOmBjc"Sga,]ؙ:5ҠBXox:=f!,5~i2*2i<1*7&yICKfry#;y\ DxnjL_~QuaxGp֩;W3W<1<3Hf?"wS9eRvC~sqo$ssl5SYPSr˧4Uzg#3:<{a)bS,#wS>=MT '<Vgq[Ci30!D6蚕:{O{وy0dr=rWJ">0t >w|5w+K1`$F;z:ΠU:6OA47b\)*AKu)|>9I#LԿӇÛ@┡zK; #3 @C"%G=%[3xW$n9w;--k1#*ҷ{Cwv)2}uK퟇M>ڗDdԷIp.n}<7_Gv~M0_/9U3d"peC{.:#*b1@ifKwi#3;YI"ι<"R\`5D#**L>ߪR-j-a|k֋n9w/S"JR<ߴ¥{̀x'nBcZt?LI%ҳ+0|<,&s6ϕqx\э1Zh=Ӆxao}j 0Ih1ƠHPh]F?{]ab g;JOy'{!{vz@" =8pOGr,9%js˛ĥ ,KMhwҋL#*"L898.ݜᭅ~6~]VG`Ygwh<>٣׆1N_"BV6ٱTwO2u:2uFw^w>%)3@ ЃB2.Y&*ƹK@îlFߢ#*(`&ۡȡ#3}TEy0jR40eP)5M )&Y/!pm'9^["᭽-xsѢP 8&0HD1띗B]k4~q' ~Jxۙf§n8Ib䧯u@L99$2`?Z>^ێl:+GI#3L`fe#*k8 uq凛9,xHh r.?8.li6wF#etDDй5'n!δ=a.,6N>e$ɚ,I?[[d>t_p@&7itq +%{%]fYiK_uX]YVkHK{jr NK=LkTzT-1ڸ=䟪JkA ?J&+ႨCQ/DzɽGbO"I De)OlE5>Sc0D,~N]5ҦwزV'Q'O&tGC4ƪ#te9;*3&#*f2J&m[n]}guWIҥRt&wJ;m#msj!Tڪ٤ecx-RjA=3UzF)BɄ#6t(W hE*(<#3#*XS??m޻ټq*i<ʧ?]N7#NN{byC6VT'+0YL9z LaY]}-ed5Ke_3ThՆ^I*#'ss0Lk1nqE٤}bJ@8䂌Nu#*HMU&#ڼĽ;yږwd#WFyP/)jO V, !$y;ۙpG~DQ0KJY(2n6-_EI{M9X+Zm<1W<_-.SDqe*tfsbD?',X8b;▆S~+n"4sԨ=FN۱M- :EK'nN'zIS=e"7(qe@Ž^#*mpm#3 sOƎ#۹Вe\. vTBI|!!T}.H vrDnHܦ&Ga3t4BDO,4&Z+3X:#*Lih&kMV_ۭߓ$E#*mc-T{Xƶb{<{FvoPR*&vmV?^55&9,M(I')M^DJo.y.j{L*,Tq5|#Xdi9h㠊dm4oJH P"u`!P%#*#*V;n Ft)\)ZMU"Vߎ7yF*7Tc4Ly?۽qF͵գl0$H҇ҙ1Hg-(x# d.c㯏3>LShAd;җB*չlKi^Ni-yۘNitpѺM+jNDA)vipg'u'* 6nll:k.UG.lJW##3qz|-V$I:&"yru[devIәym09$3ZSK+p[Ĕrî2x¨̖Xr'ymU<N9x &MNll٫+f 'WWKpDwq X,;St4Vd;(&:DPF"_ND~]FL+ҘooM3cs#3u3xu ѣ뿮K+5QUbpeFg)ڜ͏*#怜SrsK[{y~=SY/E5d#3%G~~~?kVQ#*~³Wu^hߨ0~8Yemm'3lr|ŝ_0>w#3SD'"8cgĻ>|<>_R`!h#&_A!ӆ#*?0ơ$_OUDJf#&K oHT(7#*AT_-\v?]nDO3h 7ح?>0L#*`s2 /y nTuûl+ƕ;θ̴y$zޤgbAb;c-tyl=p;?xuCOҾt#*P#3lO%{>$SD:1{; mk ?d>#*AWOѱ0jO@>8Q,DDk_w~ޝ3|C,6.Xam)Iʘt,@%&sI5ͻPO;̤O@D& h<ńYA"c2zsG@  ! &`;ᱪF%b.J^xԚ9#&dJCCKTدxj!&`z]NS%d삘Ԫ;*a|=1<=v#&jZ/Zkq D hV5@( * /@Cap]iJ dyH:K'5k̑sb10$8V$IW᪖}e?>>,IPx͉>tJ@J}?PqaAZJϯ#3F>o}Ƹ6$Aii,#3O׃#*_MG~4$cL#3ز:Gi3w:Z_.=!s2223W#*FpQ3݇2l9lFD:ߧᗝo|Kc?I#OBNH/zi-bO̱YP—EQ?Fb6M}0!7:u|;hD1 3V_$@qK4v s&0l#*;K bs?Jӥa#3""p!;*.& i#&EWDcQi2]:H#*h}<JDyܟ%N#*hu%.x (]g|KՐFq]gdZ&*hcc-M!JH "PQA ֦fZ8W2s&zI3mnƪDO@p8g ܰ^`5=`uQ`ZNeuȧaڟmHdKt.rQ37i%#*IIa7uWY]U[u<ŬUY&jYWGJ.l!Ě[aTnlg4#*2fC8odI(Qr=UPQSREtBРt)$i"$U?<#3Sq,s1M?vmu@n(6P~ {ʊ#*k;k#3?#01pvsn=,v2v#32p$6Qݕ>YA}![S6D!^,hUvk2 34/8nH7|:I:Jk;tLfxO{;rۊ(ŵek>Ct Bf>mzDɹLbl q#*ba2~_FZe6$C~ΆnU4m4hV_||9}>;#*߆  Pv@7 #*痬-#&G+ pxEѾBѩGQX#&!qog #&]3iAE}O`@bsÜن"@Ea>؃^X=gJ+DRQC8 \_~L @-̈HX?0?}߭6owDcsz}$T@]b߼ٳ?xǴS4F8GpHN<M!xߐ~f"/T0,(EQ>C}K2<$x(ȡgD<nxr0 }#:FXYaNBp#3d{!2d|އ *Y4S=E o7h *(k-IJ_bP #*^I$n4<8% Z9*h#&@O_|@K"$ք++NߣҟgKP@Ǚ_L3og1n'D«ǂ `,SBq#*d87? o3gd`A\PR>RpܚB.~Q% ߅44ʽԪ'MjY|$30(d HB\_XX3yѹz:֚o1Apg<9b!$HW†Ɖ>Q](یIgÝX@>Wn'm݌"ߧ?wSS@]2эI[?RU?wlOua`6iH#*3D"GBkI)B<qVAg4].xHN#3l@SRjsAyR|;٬qsgܻGv{(r#> N\N?r8+(~@0}"#*òG4Lʄ#@ed$8"bp-붟7lAh &seB73$xnmV3!#&^JHZ5wbcz6LI.tpt)̦)41IbK6&]9!@K#&aF؊"d bDV( #&eG$PkLB!P8tM`CSRw`6;v~AC5A#U)'GJ#3CRe31e5|}uW-yۍZ0(6͡T]lR,0aGP|(|O0:ye 8(ܯC:HN OE$!#*~ޯqJy6ԟĭwJ$dPcE߭#32\Y)O9XZnQb}geE$j02a\|[eP`P"""%#3QSPl69I=gE~XRyuൈKXHV , j=PXti 9Ve8".>.ӳ#3<;M }(s9*ЩK(?0;熣|"@:#3fA #*s{ާp} FmDgOYu׾M"QnʘDŽ}^n0#3 N|8%1@YpXw{yJ#3Ɍ fub&HƵr8M.5#*儞#aPدhX1MLHL=s#31l!7GLj2FG,\;Ónsg,d̴˶n4^`jNqniO#&65ؒ"8W6p@h6d6;rmGJHps9$'3VO_BƧ*rƃpF뽸Zfa9Pȣ#*on4a#* G (+=hx;`\NAa UV0^Onz=i^CB֞Z[&pw')|2/`uț}PE\A}CS\[21k1׽Ki]5PHyc^dM$ SP5MX#hϦO>9LG1W_.trf`?@#3N ^#&b8eYxzVz"!YlbWrЯ89!^X~ؑ#33#3k)PGad,֨L~=#3t&ڠ&| B1B'=@#*z=}ɟyC AaVCwn>zG7+r$NWV25u[ʊ! mbN#*! {^.B93d*3=}w[=la{RXUg`,1:hQ*5@}^M#3!bzSOZ>!E( !%d!iN `#5ǻuxヒ;~iMTyl#3$t_{bun ut*DbvU(bbƓuA(;kpdH0*{WئY4Ri>Z#3e f**Ƙ6R`XH رǼ^8HDS.W?E;~cow{uj{_p3*/KUiN{?[S+IaC%|O( H&oweET#d.+ߗ$$̨$￉f?X|(!c;NNJei#LQP bsl~7qt&"\aaH̀BdA˅ߑ젥P14hߠ"L# % 1"Fd(;7HdDrdgq!w%L6n[)6hJY؉CF됥C0{%yVƂ!5c'+JII  4h@+!FF۞#*#ujj- Lf05>9jt͠2AHtR"u!hXבbqo߇Î#3]/ s6ar}uS&fG&!^dOAXYOƪ,r}UN.rTs^/s?&c۝ C_w"v[)̑=b9%R>Rm?thM#*^34Y #*$ei^=Q=p%Q j\㊉ԮdHȊl>LV#*z9eރUPCIa0qC-4>Mʾc!h?&M6#90jF7{{n58~j@~iv=&_et-jgf`"ӉWx6LJygav/[&J^4^%4?g>d#3̷ }ixb[*h @jT#_UΦHk<>S{qY,zoRJnw=tu<gs5/\b#3nV&4jv^ܩ #3хUw.2<8e"dr %1wC~PN_iRq?aBtVG}~.3=gԜtUicimM%DCOY(qyǏm6xt߸h"d;5_yO'Nf|aΰjzᇶ*BGݹp{4Ԛ%ELѠЂ!rW4i^ZW!e4)ǁ`nce(o衫uj+U/*'~>5%3A=O}kL[HZ RƻtްwZAT vtSwGᦘ5[m.SrӺ'<($zvMg9y`X*s֝ɏCג8=$cCw\o=+]ɏBcmʚzPa)7qY`H3B4CG(Oo'iJqjJ Ib "QE>4|Ͳd)mo6D;",9D)frfb2MxG9?s⹷`>ŋ'C؎A $+kJ G=AZ 0zi#35}qgHϾ`uPq佈oTָ7YSfnv{pyC8XP8# #&PD7r%haJV pu.QMOBT"*:OB7+bٚ !)i'6CO"L|#3öNEu|/8\7Z M&!hEB*yA LOȲt\- ѥ6..9.E_{|='xY5>a {d/_:t΄vQq=Xbp4#3^-h!2vTXX10 'LA.^YQRK @}InC|PӬC!0d ξK?wܛOېaAM=iH9n^0,l lkX1- ImfVT$agnqs!%F:F7XkkghOZ4v;\!5K/6lAr+ 8ض|?piF/;0Ƅ13G;86|/AX)GE(+`!lYs;lS;r7ׯ}VA=#*4t(FV0tMIG9$@`Ҍv,~wgoQbfVGZ)S010v 6nHWwv8qY{ 3lLmu<(DNQctaxFb17Pk+ 4(000jҦCAI)vژl#*=jq}͂owGO_Aa$0Y#3hkڎoB#p%ѿWv]]_یjߺte#*?O>M:'a`8uhFC74mU70G!c(l@De40; vU[N3 2bP~?U۹n$HH~h{ݛbWiJ(?x%Z{W֧-]vxhdML<뎀i1wĜ#& (BŒr.zy KKcR;(fk5THiV,CՉ.lΥ̏v 8Fr#*54bq%MM:X4kHf8Is%%#H QD?1#*H`0i|^>_^9Y|fS-90F8\m#3R#3M⒀އK\0K4)Gd}5D%c84P!7wY iGYpyx-Bj{M{fU^M*WMgxx896jvOzƵǬ}G3mk{Ui;QiL<4=9[cgmg,meN-So۬a[YOۤ߬ s>G13^+~łilad<$`.[ Qwou5k1(b#3B^ΛUu9+H3jDUT/n>>\np nIH-;xIL::"Y0SY^딂IQ g5Se$R`8vYn5նFes#37%QȐ!q=/W#*fǡ vɏ #*K~3"ʑ"Fm`VPi ܒ.mm..r2O"y\X)΋PLjHQ&[4Ⱥl`iH9 'T(aȠ]X7C4Gdּ@tz)rk6&xn/fiy^,λbv#PD367gyϟu5c#3v$ħQм17459IPHs`cJ`qεiSnS-.HF" ipsӡ# ċ#&{RF#3Xz#() 5cK/#rX٦+r,8{77yhLI2raVAi:={aEup 1*feffX2Xct1eKѿm{ņn2,U PXA`eRf o#3dW׶o#3gG2ap? ԅt~]f£bcv!.B؇uWN.^wV9 gZ5L@yb$GE>v>:V{Kt 1#& R9tmc϶ٔ8 sdp3?3;x12wɺ`Om \@jRek:ÍzUFҪX,e™L3YV0  5o)BI6#t@vUG׺}q#*hv#*Ա_EfXs3#3u bc8Q ֕A:aiVmM8N3xLetşa6q!&#*# ǚTA2&8}Q6 ۵*q;jH;pXF`V8XFrr1zpriExHlGlS8#*-p,>pqTTyC w%4Sh #)##%8" K}LOV0Ll4|#&9K4Bv Tw/e!#3HйK1E_С.##P`ʼvn|f#3E!SNٍ9}_Nz [Hw0:#*qHb5-ĤHάш#3DsQ43 fV8|N.RSU3Pobe6;6L\)d3:{[|.̐ΎL9r]&ST3-C#2$́rAg#1)f{dg3aD`(1IcEA+ H&mwEb枆6:Nķߐ>+`}Tsުꭡ[d9 "Òp*ahoNKngQbAB>(!ctOc:GhDrHvk湮۞ ,5+KR16XZݦbP?oyTaDFRDhHh!˿:H8'q:P`TJ`}\8#?͗/q7քa\A ܯԪːJc!!H?=NRCgh<MN=!",IllW^\8Ui @IF߿\bشR jӾŎ\vA0k$%$ E%#35Ge* fru/uV@潏}--#k7:EdCWAa8hm,D-^@ B(H KT1R ԈnS: ވr6P @F#&{N#3X`)pzTVxt6f"ԩ-\Bfd1Tn&C KUVMllҶr +.)$[uX%k(P))-֠0k#*aM#D`Vr8(ERLo]v[Ԋ.\%ks%fr)הw!׽nBO>ku%eL#3I KP=`)M `jK#&]?"Tzr}OqVE4YBu‰QcM$&M ^l]%`JӠmm>Q#ӗ0h&\~;?NG #&MSc1@,oSLjl%C+EQ2&$hUߡÊAJp2Ӹ D Xɀ: #*I ."~voi~K_ESx; XH`XYl/`!#QP]w'e#*iҗ #&*44}D~@ HSacEdwu[h@CiUA_ͭ :v,8nߧvf*Q#ES"HD,WoФYmFbSU(Jk2%M-CeE#3XQ >I|}|E#&dQ(2 Ȃ”h#&Sc OK;Eiqᔨis3$"09dwh,_*qusz#*}۪ʐclxUi4d=G,eqa)D 0h!_%j&D JϯkaQo@QdD)#&, I՜C9HΕj iR\!t^YAoey'y()#3`͡C#& __cU٬ʯ5FLܫJҙjƵt5$\`CrX*#&H9+^wuwqż7KHa&+ըB!ʽ>Ր !S} }|~gy0Ά:qq/șC12[p,)Й@eT*KHQUպmqn!ѠR /$&T}llS ?:,UjRA:)]$4`i7J-g%#s~܄}u6!OXd /=~RCCpm ~;'=r#*slzcO pwHE21u%[z@xtȧ*"JB#&H0 H^8E1C(5f==vߟsY`#3_ٌ`~/#?O\;`]#ˈ>zX#&#3YCN`fvvzMlou<"Pp]:$8+ ?nz1Q{&R|^fI|Vd:H1OWBzc:FQwѣ=1n=h> u:gc#sݲW&¤@Hx};~:ѫC?i#ս\=h<ٜyWWБ̍]Gc4)}ܾV aCEfass5lM2CJݵ\e[F+M-pY`\go;|JXƅ,MZhZj*rA\mIn>zYRFX⳩&4bpÆ #*UhEʼnr/qpv#&40r#*4UZ AS76z`D\ ə_;#3zCUz2ot#*:̓{uaj#*'@:#*RX"X#*Ze68kFI\N97sKq[ȅ˲N{92CPdj^PXb0vvy̯xR^ mCDAFRW#&g׏DZQz&$ի7#"#*qDMձm3rFzg CCӤzJ2ո!*)ZP|*o/FGHqߟE^] oUvIg#*U1d#*PȆ9yn2/Nomk"}Ә4P;tf#*ũkykJl[wWRwm[]ߑg7]ZFZZD!oSIy#*D.Cevv,@AHmWz} 憤HEL 5sbsbqyAXn:Aqw~O"R1UR(H(@ʪXJ9ť, d !Gр7Lbp$@l$h*Q2XH!X dy'qTpCM~ɿkiߜ#30/.NCII["ĉP=g=䍕)3ҷ8$St) Mpowg_*&'`Pp򄏻-ZGRL3 J.}%`+YHi_^I hLelA#*]; A /. #* 01%`Èi l,V }P5C;3 s x%2'7vR>49f|iIJ$R Tj#*!I-˻b!`3*U2 0Po13чj6CZIB"jbt&PmfHA#&,e,Z׿#*ꗝ)I+#t}XRR4\Ņ|Y$)^H!qg҄kZ݆uo 44!0`vNG>ڂ}ȵ%.LU?Xz3x_dJ@9:pXl %4Mal,_>>|{#*#*\GQc0!TL"2u7l(D(\֐I!#*Jt:)V.^{/:d];ʬSJ?oݸ ı`&(~4`pS#*QiyQi90_aCR1sdGuW#*#&لap)d7,H\V#*2xi::vrL*jY",Tk:'0m|wA u!~Fhh[5t2w<0uRqE#&xzl7tnp`i),M#&!| ,JpM;9[vQϯ9-2̒D3`C:I#&Di{@4M.Q~HHwFS6gvM2j9FtS\#* m1c4j2#;9> S5UL&;WP# dj#3urꞏ<שʌ H1`c5hq|v&ΈNKQPa0Nm;3l'r 0G'@sp#&* Lhȥ7MUs ҞT4iߞ:ΟsF^F3ĕ.0]Ԇd+x": h՗ejo[(WJ,i#3#&U@W@tIZȔFU.ds#&C3 -4I `Ķ0QJ6^P4D5QiDM(% --HX (bȡl;L7ϩv_*9[s$dNFш٪gSo+P]B$c] 12oa?E-]yrDD#&J #&qF..S"xJa̰ *#*YRA-_(Z#3İt%e#*#3K66Ҕc m]uAҜLT{ta#<6qm4n1("զ md+[#A*{.x8[&4A& `tP}Af7g+0J=%X Avbʢ|vh#&PiN};MVװ@$,\!4 (*taI#35%ɉβI#*b&d)c#*Wol2##&"E絙7 *$d("0]Aq#&\ \rArj#3"4yU :QӜyg_O4dBvZmz_96ݳ$Kcɼ{.!6$&J I'y}NL#2,a$j1WH !\Ju*:$m[ 5U@BA Z#3 (  Ku#& X!<1k IEn`>,#*/#D9>gZgg>G#*W⒘QH%2RmHS$̖blZLem0m4BJhbJ̑LLѢYJZ#*FH#34jbi4"M#3DI),1(-&I`(EiKQ( FK#MFbCJ#* (bM*|˷s*1as>O΢'Yڞ]vˆ78T%-3r,31,Vߖ`H-2h$ưw6@QOScy7Fw<,I_r\ۮВJ~k˥iݙ!? ŮϘbXnH*00 #*۲_#&WۭCTIKJk %fZa! 98֝mj0&tgؿ13ABQQ6!e"%}}[I0a Sۧݯ3/ޥv*/G#Ƃ|aH ν>7zHxjX.KTXc] ü0c.[cu"%p#*C}`vhkhi "HȐ w 5z\nߎ=ӄ(#5'| pw0Z4~fx;@I91M#*ف)a.ݺou(,΍ uIJ} W+s{4~]KC}8⎘hn'콚̋2|;i˕|t@>taQ=Ѭ2Yzm}^=Yܬ3r J>3]{B)!q DH78;av !n4;wiTZrfr/|QI#&b<өqBF3.vV|Ao3h-v0EmXS0#*{ |,@npX$H#3j4\{ Tf#*FKZO秝3#&؝, v vyz)^)![#3_-3yUJLIi`.M*<5۵ۂњ ic03p2#&.<,tNv;N=561riڊb"D,'a 7E#*.0*Ԋ| DkR~9]^ز%bˇ ڗQQWǼ%0噏UTxˡ t)r]w9DC) OL}b^HDj#3%nZ,+s!Eż:YL\.i,MjppiփkRߩYwsv#*`[\UZv&:EK+'8ud_d8aPhf,0RU幊[8#&ǜAyP@eh|xvvX3&&uS5o% >7|ÚWd+j5 ɦɃی t.7>ݖ982HfwcbRd,vrh L_;l\;.q#&X(c(HeԴ#3S\a1B=?:[yKn8ptΠ< ώ7;'q2刾AH $֘u7"em#3f7b;mIu7h2nSKcu" Y̜#*b7Hoc{q0nvN߁#*yۼ #*-cԧv鳋N)XΘxL";u<րEl1ߎ$Qxb#&-4$F1@c9Z692DCk#3=#*"5CCnimraGL&(#*;S5j;7XdLXm<m3q ٖ"QYt)xԨiqI%3A^!>i73 2:.x#*.".vVͼ%rtGDî994fX9,m\+롶Ȍ^\$7j ~.#*tT^8s=2I3D͂!6ʲb#*Ӷ$ #*Z\tGLg(^M'2yt?r!#3dPɱi]#BŢIʎnpnDoCwB@iJ~#&d(Ӹ$Si0F$d0I"YHQCBHs!RAH塺TATlio-$YP.il_>cQ:e)elPk|Y}qbC>hwB.)vK6998b[ [FFK ޛNə-VwB!Pڛ5v*.r/x(1#3ATUDKAA #3B?#*"(#&.jD#3l "X8L pqIUr$#*[l|<#&LvH#&svkM&#*˼XF9q8$8p.#r/XФĚL6GwzՍՙek-soF"ʙ5^9͒6 e ƒ7쁰cTvĢ4cx(։%JA̸H&JyC9eFEƁk{GP| -[Is-GET)iJZ-QTR3Q61#3AZn<4EJ{wId ۰Tv=M?oE4j)%zPtБ4o%h`źCR]4#* )Z;Ia`A҃ĞYHPʀ )m O5P墼5 Hcf#3 6ji)*#"l܊颰C11Y4Acbe3Ph}a`0Mlrj#*#3#&? gKYs53TtĂo|Xz-sm6XZ3n3čgm4ZׇF6dQJe,VP."Ņc)Q`1#3Q#3BQx,VFŷJԅu1M(UZJ(#;0Ɣ8kS[ x"@ D`f1;} AM.!hb6.@SnZ~-"#&$Q~ClEsD$HIFip~u5(}n)ۆTg'+cCZa?|AqәLF EtM~pHehBm#3 n262Ea#*E5Jiigiȉ 3bOCJ#&ZJqC;[xD{yz^rQ6Sgy1كɑ \u95Ɇ.:XX>nA\ @8!ȃ{[(#3(D#*A)d0Y2 \KeL#*8ȠBqbͬKWƼr J G A*X#A{=QzFu[&R P[,.iv댪sstdwk&MAvW+LZQ3S[Ƥ-rۘi +H:dHvWŶle-M$%&DXMJ)ZZYlli~o?^05$I!@PX )1':{ehM{X"R`FLaPTN'&тbQT#3C46Y7ye1=d QXRû )i6LZ=sB}q_!I@a@B.St5#*p@י2I7H#3k\ !~"bYĂK/#&0(B&2XIFV%m/ޯbD*¸ѪC|2`ͮA28q#>\aQ>bUCqȏH2B^:Ϲ*k#ӶAi9X]3"o?8da1&B 4]82VN؊ ƍ.tMrNӈVZL 뒲#&al ).0к]l^͔9\8wb#3DR*@!]GzkʼAA*"y|iFG3>6$abIݸGWFkQkIe4J]TdomsA6^n3Kf&TڑLYM5J~jʙ6jISj(S[R븣R+Y]۵آ#IeXTbk[T$ljMcUBU+VWTXZjxiMfl՛fj61-*kήwFʻYMx۬RbZЕo n1MPh}3qIr U3>mujkxԛ#*uFT^2ZWdL"ۼ}7Eld?O_ eh#@BzSG)e""Z#*+6M4֙cVRUM<~N#*UB"elۦS 4#&Tѭ\T[T[]}]Vl@H6($#&u-sZQLRRm^֛%jlj)%#EJhE)e)"T!Lm)(5&TT)YJjbj$*i5cj1d2J Qj)R% $dLdɢmSlbDRMJkf٪ԳIS&*lmݭmMhvJکMmmFje5Xִ[)7UrH 0$4MpY]t3b-}RW6neX07з{ ߭xpn*k "wm <2i}#*oTT0&X(v=r#3̶(/'lT$1c+]:mYtwmt!h#-v_4_.ч7كΡ҅~Q"Ȳxbum}us9$-KX@{? s>CkvCb˓\;PU?{TM!Fc7a>!M 1*J*wN?[=7yW(+^5ĩ/zEFLj ud3 #3/,0~4h8D:Og~#*Y$gL!Xe0hFAC#&j\*9.S@)Lq`{9|eteOH$#*#&|Fz_'m.,T!˸#&TUFw]ǩվ(6D+@kq!d㻍do:i{V*'wKzP,#3Q1[*h7eU˧kO2tCha}8nĻMGR$MY{]zXx)F;B4@=Wv J X/ I#*h\-THBd"dIU`ZiP!uw;Fl.hYwrIҀ2u#*Y4IDh0|1D2ea1(NRJA7+'vQbI)jBI4&Ǔy4˭oQ;O^U#*GAFM#*TT;"T@Й0_F\a`vJP aAr+0Ld^z.ѓh# A(HpН!љH#E}UAZ5-#*ʘ%U.G,рg::9wV=H2$"h86BFGl#3mkXD Kt{39IR6Bkz0UtP]lVB,&G**1h4Oy oj9kQ5; EXd7$t=XAr%NMmN],_qLfL6ru[*d0J$dTk=p@߭ϮJFeXĄ*krR: &y^2C4%U&j6[[O@S`K@\r>^@äC@…_ =۰#&*H?@REd#3g>am2AZQ+R7¶7u[Xˡ͚l20A}sd1bE4zִ5Lyl^=YF'7#[0ϵ6͂: ćuЪQap!۸h"˼QD!wT"pvv- @Y^4q/񨡺6FUl-GIo῟ 2?HCqF3#3jlAQc_y!"0ȢwT0*)CQ"Cj("3Gx6,! #* (I4#&:X]z?#3K<]ީ)HTC:&Ɩ4-| 8E OsarzsF''NVt+O!׼{PR;A!;ū^౼kߞ?FFP.Y>zLPΡ8A =͉bDpZ7 χUx?u "mcU4]\==#&j*T1a#*_>g{lP}[6y( [.׎uv%&JJ*YynѦ֚VSԮɬ bE!(#*3dm3}X"<UV0l(9CϢa>:8phuԧC> t_Xњ[QJqp<∫#*!f3"M$A%AtX2;؂*DGi$P{ɩ*#*{;/oj#X*B@ff}_4>wrią3~ޤ? :E 6фR# #*#*GMF?}Mߕ[F"6EdJHQ8HmYbz5NlBtxsYOlMl1&A0n$L#&=5YO%V*fEM6 Ɇ̓*NY #3~JM}5DXlq&DǪi=add1/ލuu'{zjy#*f@.ѯ[ry_+AXHP&IU6Zm盀BlTW5S2m)if%ik)Q6#[J#*ehJfej2~UD{4w`6KcDMp 5}WEhյZj5ֵ7o0?cߚQ["5#3F2n7d)Y_^ȹBޖgdޔ'Tvl(ywAjPW w:j'8! 濻Z:s[Z\肅KtE4 XM;E^]d64_+8)#36u% 'ݝ244W|OQ`51#ZQm9ʪl>#&,7yq#&#! 7,1'ǜ5 C!Pq#*SG,,v(CPU&RġK<9#3(ō~e(?]_9ik6u "OãA2ڍnqٔNbKmdI1a kÎx>G6u#&]f:mI~R؏)]֩nEߚd,_]}[I2E;R!&}[?Nl@%}4ʖΓ$b#*Kj!&.]2Lqq<Ph:t`&#*h]"5!hdRcQGoCΏym,8Up@*;:%D Xcg`voECdI )]H#|@AAM#3X~xsU>#3vαrVS(IN#&"DzvZA'tF>-rHqטm;xDAt ,Pky^TTԺٰY@/sc;fDƒUhaZy(#B1 Q#3yKT蟡3Ϧ#35u52#3,Pp,l4ftf@IںT3T cR.gk-Estulk}5緿:o.HCyԯ)me1z+?6T>-q">fijCt1m5֕7Pkcci8EŠ$BRJ=.k,ӌQi3Nb't8?bk[P?, P2#*#&W.1'e:{51$T*+tl(Bmmu?Ӻr_{<@yr$$Rhۊ6Kh@jIITi$΢s|y:عsݥۊyB.91-ax}LQvTIa(hUSblQmzuK񷗍P),Xl` OyA㪙=VA#3:UyͻO Lןd^C&" CljlM *7yN0$P Q6!$ i'e-В;̍5?8~q9mmQr8?wl#&&O$_WwIfd.Yt2Y*vRVڋk,˩ A!R(P?QAlP;{k[|$;QG #@!0ϮGL(4fyha-)TωwyV1a-Li-!]re[Vok$A$IĦ2GcK.jb|4ɭS0Ue91yL:tM ۭDԑ'#*bv46iFX#pu%C&qjvĻB@k#3K/KΖHw1;O*$?i9VC:?j0e1+a:΄%#d~euiIfL*~3k~DJӺlkh+bZ=07F@ DKAԎ>@PQa|8uxn;#3=z{ψIYύaF018OKMg $VA_mZSV,}Y'oY*3].t}^QɄo:)SMM#&r.&pX#&oUP q:)™L8i:^91Lŋ=Ue&t%1Rl#*y.5%&Ld,zci~lGD4݆Nь>*#* 0랃Dwy{#& jTQ04k}m%&A x|P2J&ӪqjrI_?r9?ƙё&9TގccE !`}Βi2$Ʊ;eo % Cw f)\!Q_lDCQWNfbwi=)ncV}GFx6e[-ݰ#&z#3ZDn=(!/H6.̲-b-T!Tk X)$m.\kfjUeB$C#&@LR}zDk221CLŪk33EnI 쵭Zս[p_`|zzrswÃW_8lzѫ& mZ AS!Iղ'L8t*eAiFPZ_6wKCV\\:~AmIc)7>mH=~=Esr֏͹bQr\@!hhE1GRZ2apĊY )A1ls*.6<8y6(ۢ~7ξn&VJABS߾2H*tICc#&:j'VIn$(z, H@Xmm[Uy**5SQ22wKqsQ#3FwB0( Dam<:MQpvabv2U$PHkVz\~Î6jz됬uSI1(FC(cH<#Obdo>֡wFO}ʡ*5#&%Ѱߨ=HJB#3#*y/@(̠( 'SG,9ì]|9I%q 6bz5xl$(#*ˬ9FDAdRПzjnҋMFsr3/#2v>ӷ#A>H!#3*Vb=.O&/BCJJ!Q:E~Z#* T/#U";$.*(HVVdC2րURoj I1Hff,(#*Z{~O9>5P "P&mV F!nYYYZ9GHt>>Zct,~t49UGsB#oP߆}?oYn#3VTn*j&wrb ݊Se8WXsci⮮#&94KHO^Ʈٶ*LEd%RH)FI p V\١C.f^uᶼ]^[vduv)Lzky!ȵVJk#*pз(3^JƤ(EC 0mZXƔiFa1[}Di&m$MgMoPD09Ed"ޕ1U"a#3$"˱<{>Q * z(~ЉpC55v ʫtc~st|mx!pR4ZQ@A4#Hl4 H0`$Љ1D4#3RXlQw4\]) ut֖#&3۸:\#;pVAsXXpň#*FXC'"VSZUڭ%.4 kTXB#3B(3.DPTDRd,cD((ń|M`*mSvU+Eo'T ElVL6-hVeF2уQY+2deƴ%E[5z۪/j߾‡#$&.\$"$#$"#*t}z6UnwیQ`M/fV{;N@PDiZ4[o+~\KZ[DRnMSnSk\MFMd]66+ii*#Uvnv2+ f2#"')T29AdUT#*7HV(!:7>n;9 kJW:M &eޮaɅ!l#*ֳշ,nxy,4 "c(%<(p\uf,FE[TlcUcJY Hi2&No2w 1fK=عãV(%݈y8FiQR\&F#3vt}Hp,xzP1`9)A{XaV=/7Ym1.gJ`w\T~t:'wL?> 4rp/NO*X*C#*v]KUŢx>v43_MmcT[B[|}ZiV"CH 5`CD5B6ɟQV[Qj[^W_zp#* @ȁ%S>m}wXҲkMuWQU]$,aFKфdD4j#&#*ݩYЂIC@$[m} TLbU^4vOe5u" D R0b.WvmR4l jJ7H!Ŭ"IDQQ""#3y΄}Դ#2ʁt glpiQK*Hy?ETH#3RROa`shq\$dˉ9rr}g0I:j6= s;9dCA{K(*(x2#3OKH;wd>-Y?ꀭ7(x6uFj{GfCB*D,8Ǒ杰c>m-YYVnov?f=X#& $poUA f&ɷYK2KHBaBw1 {_}>4~v F/@Px-# e"?%D"3tjWs}iJ1Ѝ4p`*t9J=@Ke?8LCYd#3T@#3$F"`Xl?AByܙۏ>87EH@X3iZ3+6^<(?Gr~穾Wko65THbCb*#&#3E!j .X#&F0Pu{LHEV*%-j{7~RǗEARκ뺖j6(k]K=o!I!#&#:ŲjԙoPҞvײ!ci ;(F b7@xF^[mun7=Vݫv)2`!=aB|ROp/n•#D#3Pm#3"> yjP;Q]U*kil٥jm0Ho->#3"4k|ٶMeQRjLͲ!B@9,zB;5aR 4H$D$$.\1_AIϝqC%9KS5f~aègBDF)2?`B~{rHMJzU;X6 dLЄl Hk_*jFiXqb¬lYB(@EdUPQP$b\0FvQv w`#*< L8]ܚRzv%x̞[ߗKQxQBOQPb@pUFB3Vv0܉E8,EC$Oi*F(B~("_#3,؂% R@.$#*lIZBh":pAgO"mxp&6; -mti508JRn7U$U#3#)#&*(dmI,BF 0cKOxn]!pp#*2(-#˕el#*#&ZhjP&KmL9ͻqzc4ЉOߐX77ԶnqT䵆}F9̷RBxN"ZA}3N[:7XIMnś0΅RfP!b\n*LhD|<Uoܱ1-{= ^#3Tw0.!񚀈ts=X,{_neUQr.1C%슇y"#J9g$Nd)]O˭  F1t2:^Va5^O_fSz1MDC;I8;fG8Qa/kbf CǯFsSطR' Kv+`ǔ7={9 lGf-2>#ݺxr)x~GyN$RgWUH 3d<)!R#309m1 +7>4{{囔y+ wjcס˶7RY&(ɂ&ǛM poL#*@X a&9%#3z쏱J@xNÚ3*9>][ SY.YuLyE61#*U;t#*@** 2: #3H\"h">H0'T10EmeK@PcXtjHRCU~毂_GU5LbnDFFql]J#3=O{և2F[[YwrA+#;#*d[?F3͋9Fs;J_#]'C."P۞,ሯ#4#&(#3E{ .vKCJZg7꼘 I#fΞF.K.JQq˭7aT%ש8$mdIa|>_#qE$ad 4;v>>W7ϰ)moPռNAf?!NunaxddnT8e>@>A@őj3|WrT<4bϢeX+vIvE^$-?m|w¸ro8Bg:rQy\V7fmZ y6hQ0q4;ޟgʬZڋ[I&UQ,ӷ~ӯ.Ś #*oeMRЬLzfQ92}kfoϻ1hSa%DYXW͍/m#&!DHš;r!0Nhc#3`sgΚ#*fg4}lh9 /jl̅;v3CT#3Z۹ߑx#3jw<#UNSRKE7Aj2uMEAA)FP%DIA61)~u{w{+jBUR35Mi>@2#髬Jc?8͹ q#&[3I-GV*@h}A,:UQawXi)d}#3%Ab 0{7QPV *pS$c] ZH"5g@0V#&2%RUQZXme4A @B,ݲnxR! {Ÿ"#3AH"rh/.PFF1I&#*4"%#*m flX2$,J@q#&D>b|ԛwuzE)$pٞ16#*%dm1 7#-5\=˧U}gcwL#j*~ÇNpX;q."@XJ?Ib9vKЌ%UBBY#*]|,MacYc`i(ݼ<3&5Eg0`tfԡtx(gT"hI S!2C"UӵSrp(kxs-r$R"mEdL#*i K#&bB!۝׷TuW-7]JݜjJ&1͔m#*4Ų6eVٌ`F2,X"5#&vܥB\!IGe4&,5ʲ#31nI.n۫tAur=(YeU$8$>#m'F0b#U$T4&v `͑Z1*@#*%1#**("#&ѱ1AV `$\M'ڭ+a*TޅD#3Ix•rHQ*(G) !ic+swQAVVĴ͉(SZ}#&5q0x},T ynЀxs%Y?iW*PDQF ^o5RkTV6`Z4M@`h^Ǵ҈RzC#gﱴKʄ JR~)#3Z77]&':#&9 ($#M.#3]]6u)=BMDba`ǐ`H(o7Ae4Ԁ, %QU4rHpALw_jom4ܻ;X r##*zφ,E)0|w]#*ْ tDDu>%S0M$XW&Y^aÂPF,!9Vz?h}`]D !dg3uU`)fs#*zcULDnvg'ѯ yi؆~#FCymv/3`.W$MX'B+ԝd}<\=֣Yreҵ nM늅ACrrˋ:80.: #*Bw8X :2!6P({cK eoUx7+YrҪH81CMA@-0ـ)!S#*#*I)lM] 3t[&)ULAF@4cA4m淍_Lxm$V#&LDTK;qsOU<~4OtRd@0OD)*NL&,TQ&XMrZݚZ6wpݖ΋]¼(VPDYڬVVZm](2H֍K6V#3퓉;bE9F!A_U:R󪇩T5h>VCU=#*?5qk!)x#3 ۓ2JǤؕ /s2z} җ{}mWVvSlԣhl)EcM$64bhlL2DZmFckbSiJh5kLi~yk 2@ 91ȑ?)pM#*1<1IcDy%¼ Z 2H(D¸QK#&l+c",AP#3`iP0#*H DV1P`]BT$ALϮZ PJH%PB ]#&R6;@pPR+ߒkUsƵ ("uCl[3 Z#؎xr9xt;8G/6\AͺbdTv⿳mHq?7HHw벺smv]<\cNGOKt k/S:f*_n?%nxG0;RISu$snp蛘$3NTuzAu:&yp2-vY=^d=7?Wwf0 pWN-4ek:y*:[!N׃&j,7W;\3uNtyjǒB|S԰g^CHN6@WK#,PqVZOK2+k8r%P! ?J*~rfS-Y&bǶUeܧmC"j@wn(wU#*B#3UEJI#*@7d\!!/(|شE[zlBIl,QIh_?-`Mؽ(IBШWϒq\W퍿7G eSLrDuw*:"*+%K_{^c>UۤLC"Q)S3ڨKI;C:@w01ɱw9Q]=3gI}+v̠䬜wcB7X踧yuUaFHu;È+u5L6i1Ӄ,)8eH:%0QDf#*tq?Ii}O#3Dسu8xs3Lnt9}sOjgԛ]xK̒#3&7AlTs՝#3*]#3/Fƺ̏Bf*h5#d2| }H5 4TL,#3]'m0dkF%".@D{+n=o9ri;|`M;;p7; jџ^$U|3H%LGȴ$PԪs,ՇSF :\jDq7*QP@٠unuZ dɉq <512;Pr9`uFY6XrZ>'k 3㭿C̗;z=}pGU4#&iVx"TȔ7hμ +m(g}PYD%؍%]X"n3WM5嚢zтA/YbQ6.:;c)Tфepf7R .Ĉ[y##3۬E ov)ݤM*ι*]vnHn=-ko RqT7,J@N#*/]9aREqdjF»6ezYiݨP,NHc^x52Y@`ӎB8|@qD#3ipz_5>|jG8="Lpv`]$6ncq[J$9.c +RWC)6a}8|'%GL'wD%#9tv򴜱]KSQ|{uD#V'ti7LAm0iMՍ17{~O#*tX&C)RP~%umt}7pdTӪwfHIk͵,f(I#&2 O'4˳GH֝S'; QMxFÄxl2GM4u{>We.NCn՝1CT,+֒dQ]_V#*QQjXpl#* _#3˨ f#*+tzG}uc)(BHYZny=pq5]}'CCP0S]-O<:&q#3!V8!^)3MDQ#*$eNZ*QJKA28N#3pÌEz+Eclױh~|32\2ydP  I |&XTQ=2Lp25! JA? NҢG#3sc+^R G=[$3=hi#&ө5=7;gΨR*FEBX ZaKT3TY#*#*iJ7E$cӎI#&N(bK#&lm+mͨv(mV*ߑk]5*صut#^U;^-P 0*2( > ӛ+c6fCv,6vG#34#3!_𴜺Ёxm.[WKr9)-jI#*#&"hj) 揿Uc&R0n uHiJ!⣌NRLACԖn'6mpH2h*6ӌ1#3Rڛk:< H(2*HȣUm2(pqF# &Dek&I/+n@jB4ŃfHSK21v̢xpjt3Jp0vkcyL&5B#&ޟ1Z"Nڕo#*3}@iN rɄhcބ>[9J6jje*XaM0laXj,R7/\]-0B:@awm hpH4x1Am@8|]갨ita?'!UJ5bࣄd1Œe7L8{FƉd#3v2cKhhZOoP#3 #38_m0V?uK5\:1ePUR1Ejǫ\cJXT\ KU*0EcYlE:Êz! [#&VhP0p7jш;\|O`H#&2N܍mf5j#y*AA@T T#&Lny6t u~C1#*lIVѭ(F$QRaV2U&MRm-&,ɓYlR)Fd0-lliR,ԩh5"ɖ&a4$eFDQ2G^AȖA;qMenT~5c[ Ep=^lͤaմ_$P}2$l"yР#*n<ķ1jCR`3>ǚ+t; $VX7#3s;J$"R >>8K&*Vo\5 5"#%9ѢL啜FTEv9ebJhi1B7D˲LFZh#&m<RX+Ba,P7]5뺅4f`"FDf.=޴[CMQVZxJQ,bF4QđȬ??qb*ɄʀNxww*5#$Ĉ#ebցo@qLaJT4&!Bhb|"I g!.#3 \y)I$p#& 緇dP@#JQB3#&.dr=/4|D8L<^7ftp6cЦ+ל}&3@GP`;(3r. VgΡ.C p{ W(5uh{n[.|uCRW`>52 "M,#.zL!"1Q0CP!#2ҼqcU4- @L] n\]y+ӐeЋ=#*Q:vW֜F^@)*s#$_QCw{ddڻbeԥd<(=FI&)aDzRvh'hV&Pxkt4#*P̆ ?#*#3Q;GmMlZ)'^xd+^ǿ\d$=qa\l|>fUVg'p.UtaŅnL~>s_ Ư#*UGynTarl3^,@%a .EZ :r RKֈiUw҈.[j8Y=g5"l3GhPxd"nDz&Gk&9$$4C;q%q4f@o܌`}02K ad@ vyqK3!ie2gѮ:HM 5)n8f$8L`ӵv!C!cEtc-D9cir8MWH.\ËBN!"mf <ś!4@IRP& mX#*Nձs pWh]S(8tW9.Qk_**}pToq3LgcX柁Z:9NUI1ؑKC rc BvSQ0~S6Ij0ΌhM4u#&H`!np91hH˿;u622%\]G_;<#*r-i5+iK#3p\ ě bwNP`Vf0#H1)Hp3%( Ƹ-&#*D'CQR7-v}AyAGЉ&U}[#ڇ )2r|:@>*!yyWNI.t0xBxo1щY4պg:M,hHŒccB#3AP D1PjJ,)#* J45X>IPHuܪⱈe fQfA¤̑$V)#*ugj{B|&^~{A>#3 y>J#O3Z1A&%JE-2QY]@^}HG#*}13,J N>؜Bug3쳳='Qt1E>سy} 0#*#gsГ^g9b&馽dNy$IejJK1#3&#Ź3BX"j;z@rDKrs CBH(Tzj7{%'\6dSw;I&'2T,UH6d5ʌʶ*vn}dP= JZ%~6mI (9RBS@ [#&#* .@)$,!ɊHm{`#T'X2A_ZuogjxS$Y HBqׇ9OMYp?R0` " 卞oJ` i"̓7># 5ju#$#3oT 0VyYHȔB+.eJF*;P#nҫZ]$EueVD!,, Rj 鷫#&ta#*2,t_rvôykQ҇MAԢ!jT]*` m {f@HT&\zxww܇qSਲ਼} @DRRI"# c vb^~gK5 N"i1XY9Ed^Z9: hD*@9Uâ!$ceY^#*QŜ+4OG!A]~(&k }X|>WwhFR=p-"Rս [m̚}d}h"Chk?\E5PR'a#&]DA`[pH(L\VaR@*SL*?)/y^zjD[#*B WvMUFB(底66앿#3 ~E6M mFyz"O>gY{Ed8~X5<>aE$PEFItIܨ;@!$S+E2[4j2rF1FTj&iZoyI OB&pai ΢GE#*Dw\ىQ6j(H }_UB#*D7qA4J,b,QIAQђ?"jP IUAH,HXO:`cR42cGhq5؅BY`'\pvBwD#*©V*ƭj#*BB[Mil˳ɝJR@ӗ[$ʱKikhX2=:p&Y>}|- @)- kVD*Y;@ o$2$F#&mZζFLLChJ0D+]H%8KPI5ds X&wh+I8H#3DH+aћu)ɁPP+So5!mêJ"AbʉRѻWy2Ż532JJݮrYRo;]Uycv\ҐFڔ)[2MwV+Q ȴ(3[Hhq;<K=۟aW f;E_n)A4N&0$|MMNgwzb,jn_|Mp)Sk0d-՟fިEqPU3]{#& UЊ{UQETJKB9v⡰5CDXy뒴r{oߒkinD n4&q*95x<>4%4iXQ ̇b,$|$%̀n}fo8 0퉦 b[9^ Q//Qp(ա#ڝbk#*L"ש(C 4<=B/}#*"ȘL9Ԗ9.#3&"8[ɉj?{UW)A(]GJ?\28| 8AhBV#I/|\I 饙ʭmnNځ;;SKIƊ<CPAh"k#*ALj֪'f'oL!ED˩k#*S06L9$:)E1\LΘBqpzQ1l=8-#&fg;ݰ;Qh-o5`3j]r 2!#&. X7 utB6ĥ.00H=Q_?&f`.O Q65k ?n?w?'?w_o9now/}_qßϿj}#*8G֭&!)6pPu Hbsh#*#]HBFy?į'H0#7`Z&rBz5^mg$*j)wύ7aUWqPDAjldFz2PQ#$ W)&C#*o:_1Ң욐T+wM OI:p`Ӛp׿os実,LثY``iR_VFZcc[86+!FD&0gbΎ;01Q#3E.+\hV &ŦS !4M5L6nPRnLB Ul 3K!JxuwS67]3~\ő++ fp`K#*=eLJ'?;uI#*hdw#36/%׃x\m{t՛1`+!ӣʬG@Ӓ{ .O\|Vkm1dQBxl5ZۜbWBsO׻ F6 .׷.ܘ$>:L6&h"!oZ"hCR09L7m/h/#3\ysm) KNEjEQkһxT>W<|ݲtq1zKpYk#DZ! ^G,$ }z+(Oϥ0>.Mzl{笏qYc-UE^_׍o~#A.p } +#BZh91AY&SYWP 0#/(b\s{8@#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/惡}.)lJٶ&s]/uʹHOquk!i݇ilyVZg)S]ke’QwmݯzԈ;};|ώ޻p=IoWomΜw㻝up#/#/#/#/{#/tt @ tko0 #7vqmP#/ 7euշh>w#/@tTN=UBRQAĩJ$E5CUP(0M|}/m"]tc*uN{Z=wH3ﺮm3g]w=Om۫n{ټγ{l>.cPVUulkFXCnzaСdk#7ZI%;yø=($"4 4+R>6/CG4T"=9N)4#8h{vܹ;LEl#8qz4n[mo|\]g]nnokiܸ]{כx}:\,M2Yzz|'.ٶܰ=P-|ٯnln{>G^#8|쮇>ۈc[[6Ef3ûtuNOnr\砅imvt= Lf#8j'R}gSuٶo_u:#876g#7wy6{=S׬FYrlvswRhӥ+zbgKন wmyo<}[wp0#/:8yvO{݅P4whi#/֎g[U:NkpsTEZ]C-뗶dR{z!||k0iyxѴtWv֛n:;;3wLuyv|jh &#/L4@& &A((QFR MBd 2L#LLڌh#/4#/h#/#/ F#/LaOF?*yj7ih#/#/#7#/#/#/#/$JHLR~=F4F#F#/#/#/#/#/$!4#/#/4@=&##A'ih4h#/#/$D)M2#*(?DGzyS#7#/#/#/>_I?٪OW_U.)15Zr$QU=յVF[$@~xW5u7i4y]sM[oD>,NB hhPjm@;מj6]ۛfhCㄷyaevb*mJM t ~?pjerUZ+U3mY[m6ET*9(H#/#8H@ E@!aB6"(B'#/,")B!TH, #8#8j)S2d,fjf"L`I3525)FSm&4Id5cAfɦ%*1HhԱ#71eMI%j"Z bZCf`33ԑmFIқ!PP&41SM͉4fd̄dKm4ԔlZl͙i2I E#8dQ$Z"#hhBIS*"#8`؄!A"$Ȍ6Lib ٚ1L$C2#8iY`ĈK#K%dѨTe!#E46$ȣ(FM#82bARQJ#I VAMEfR` ؉1M ͂ab6 ,!I)65I$؄(E"f)a2II64k jHb iM$"H[b2F̒26"fȊQ#0Li!REAFdF&E4MH44hBI%e5L6( Pi,bI4LJͥ#8LTbe I#Hel*fm1SXD̆SFlYB*HI$$cc6iňHRff)def XDjd$2,6(R))1"HQdR"(TRI$қFQHl ƂfL63Y 14" M! 4KYck% c!*L2H0RXYa(0ZҁES#7 3)1L2ɲ#)E,ѦXCPPLDԭ&P)2"+AK`RbH*lZ!lBFR04mtBT" 1QFɔ5-!j6MFDai1d)$[" -#%--4%ō Rdɕ&V[&YJfٱ̵bȍledJe6URdkdh Me-!CQFJ6(։&H"ыF6dUQH%ZdV[6[$X#7PLjjɢJm"$mjUcl2#7iU,jh hILƆ%V1Pʍ$HX,XF"Dm!Kh @VI& &l#7"+,D#))(٦hEHDfi1Dcll0 bCђ#70,F$6B h$Dȥ 4j0I0HME!Ffe(ٔQ4d) YJE0616KY"QCAbIEMIK)YJYƤZQZ3DT4Ta*X-F#!&@4ؒ26SLlReR0٤lfFCJ2m3Zȍ4*fK HAf4mF k4%1 4Z-Tj5bFfaB#cأ`KAYfd3(b!d2 h5FE U( Rj&cT#7X#7)Y#8($U2KD,EV(5&&e RC2Q%MDLTF*eEh˜J-%bդ%e6Ȗɱ4MS TX@llll$m$5 VdFٛMcTTɬMEQEM6e$b142JԈieheji5 Q5%)Й̉5"1LֈT-RT3jƤ(QLiV6cm[Rf2BYYX2j6*)JҌB2#7,%FX,ʒ-I[M-F4E&4mklXLTLIDbD4lSI6*ضŦj1eRɶ j4Չ(#FFJ(6I36YQj$Ēe$ȌFB-,$b?ЮP#8MOh\A_Gvs߮MbZ#7FGQO0?(L1U-%Q2*CF(R#8(0\tqK$! >]mU#:? Z?$)k)#7hVP_{XaVa;oè|+(2?jŧlNO/?Q#7qCnNK5'uhZ2Givț1 #75vNBczޞzrw,˿ j6bG4LvcK@JB"LM6 ] ,cHAFvPܲ274#74L2 fHvޥg>~ϓMy4x.$,XՔ;^LVe؊)))N9+s$SW-\ʂSߥ^(?0KL&B E~hf;<#*ưb#7jdcm=wהc.\ۥUͺyhبr5Z4E~^WȦWȶ!u.n]w}>s=+b-#8?(4Vp좧څqalU'-b#KxU12p #8Xʜ8ŷ'#8'&(S?_;x:pf.RQo`XND-z'XF.)#$ڟ,j@8!A8{J]I(z}lXdE?_5o7u5~tklUymYqR*tRRe[H׮}-_o"4JF}w/šjj( +;RWW}7m(o߳v/cbIk#7#81"p<$~d?ͭ~PK9`l |hw:hZ-d[gV|k\ 0Nmheb\:1uĿ|h3$"#7yAi BHI7ΊD^jER,#=%'+"ܧ۹vuO~پ4H}MA>p1i=ػ1zkEX)?)q6NfAuKXW|TW&1QOő\퇁"摦iug#@ڤx3[=;6◶,Dx^DES#8(-MQ;CWI, Qªy#ϢkՑzk5#89#8J7e*DF/Jh}Xʳq ).YJ#8ݝQ]zn=6GKJ2,dj\+yS,ݏYgʾ3L=d6RB{9z &E.Z5;.u:~9(/c#MUxHghigZ[9#8fq傄QT nU@ّ`ҟ20#Hc;4{K[$F?JɈtP"p^CTa#↗D^-JId%e\{(JShFO߇7•sQ˺M)g5T[ŘvʍN)ZNjļ.u YgeT(̓ R/Tf$B{_'Y:}ٶJ9U9Ƥ|QEi٥lc6,æ#84"=E)Wf6#7@JDj^%9$ZSos:uNuWBʪ8xbҫt:n<2ZQ{`C@H~R}g3c4DDxl;:bF:ISóӾELHgSBuR#8Q#U!C2muVFzĝӦdpڈZ_^}^i|1~7KѸݜ߭Pqrz@yc/I YMh=H't%W.7-J`^O&86b[;x׃FG׆,,Wj^ޯ#JN,a0hmv&wbEmNI#LӢeg܉h aWRz-sş У$cMf"6u_-QDpNxti/GO(ŅyAѡn(J?HUpʌL-UG_Θ/J@x5sR#լV1[YjJ% e.( J%eM^;wnoȥU']eױ̞qX/#/CxagPaēTKDrJ%9)\\a!צHQWH6#/'f_Gwe^`^_KۓbzB"Kc?I0#zdIz05d&'V}ҴJ5͗ouDvLl6'dЃgC8MLum6\f|՜itt߾nִHg7V`D‹CђDRP⾖E`ҌCf!8,8C5r`atS,кFeU@/=vNuFx8W>2co4NGxj>cnDr.{VyS8ңF-UL#8b^4N;D#Nj=gk qjWXv_WmMuZ3Q x~d3ӃU[8ѢFɒ[( ѹ8Mշl/z3g3;$IA+", [O#8;55\7+=h˘#7ֶN{V(&\RdS61A7 xgkNJNybDipf ֯>xuVxŻjAj;#7Oa'gLV[+,#Ǫoi [ѥev>!11G- 6o|)@lH*rCA  ruQwųDdžrsbJ?čuj eQc@DX1ǚP,:kQKA(ZUǤe(w#8Wg}B'duvZ9_AX92>˥;zwX%޽nt҈x5QGm_Tbvi(]sX$81k6Y3AGs;XFޓJuPh=ou>4 #F$:eF]O".v3f3~2+@5IC1`}1 yE㧽jg@_c =P|k mT1!KƮq?-K#7Nǚ@Bcw/k!Hk˼8SA'^vx#88+0ǝ/QE#G #8p')s?W<&?7{\!@ @HK?rqﮚ,"헕rOΝ x[DpɺNQ6" Q#7܊z_)i{ F׈׃Nx5N($$@7px卧O$5v8e\C1DD¡sWaB(ͷ1N#7?VW!S;Ȣ)|w~2Lh7@x#Pi.Nުav ipH}>نXQG\tTD{8fO1 }jDگXT !.#/ h4wxp鏻զ=6kxC#삻a_O6~0ԲlmS,V_7$$${wtp<`|d #/>בj>=R=3:s|5xmUvG^bB$wrN2?/VD--[&䰐P6{ٚQULg =0Ɨ^%l>Nwic&F!@:}Ʋ@B#K/b2a lZ%[I(nT$~O9B|1ژ<~Nyw@T\>YT&i/[S0#8%tB#Q9]KIX1ڇlj0 e[A{j0=5},-}txHW<>ѥKfxQ&'TQAٜؔt퀱ZJYOiĞi6,##7>]>z崎P@۩9X aaTuDMǍt8?JUU % m6L } $ ܄@ < b;SeZcT-Nh;gk;>i/ #/{e*+swo.l#8@#/ ޢ,9l։ \<莲ݪOIL4a"#89&)=#770keT/,H4]nуT[]E<@X"ƣ0Dj#7?\M\CghԄ_f p}e7V$/c *0p璌s85*;g[#84Ly{X0C( S1m) Ld*&XYws@USҦ67Par還ҙ8b=PdtE(c]z6#R"b*}V:VP~/&p6an8А#/c2x#irV8QoZ#7ӘY#7zsWZ [iX!n#/ O!!#8׏ͳ;^{WJ)ISc=c}[{mbImJ[.Qf(HsPUG]Onᮆh;ץ@)ѺkBn7]k7ӝy_#8Q{BڇFYr>!h90v#8(Py!ƆSTPPaɣ+B2Z!(LNbUt\iDm)eIRp#8XXҢtnzPЙFojcgF!BI:;˦849BS7[#8ġ?~pە7 TtX^3SSg֏33J+g~gcMr'ТaX[]@ڀfdKv.;#1"ܴTh>>}d0M3MK 4?:kȸ> LF&KJYv9D/41&#/U#8dZ#7^2d*ꂞo"/&7u=!t"|~!o{Tj?9)i5'ǡkҶg}5ߛVp#8pZ ʤMw[":6%M8BF|$2_[Gg4HC{CZ6mռ`bdF4/j Ѥ["4VM,KXX6@#84`x{xi}X_.#7$6I) Y6 uk؛Toٶ"tpҀ=qeϤ.+`M#8ehaG޾va]J)N p,˂-hRd7dަ#7}[uO_R鵩"dxK-]Tc@nOfvA8P[7w>&ўRǛpt("vv^hnc 'vH)ȁs곣D#8|(R5%]?t52IAGKh3UE' SG.úa!&@o`k#7#?qO6Rcuf+9fvXֈ%#d{Ot3ށvB-[E%$MaҚG$tZF#q#8\vcs}^y1zcyi a`n"+ ӥ3S= #8(dY$E4'FF:Ep[#7$!MиR!҄a-qq7lQ4Y#807X&jۑC U5LD`!L .7r *_wKw!^ݡ_qfm)#pPҸF.4vMsďr\d\6r/ROH##f#ƩcsוOx㍒ˬ#7m Ƌ#N}!lR!cя[:QqBK`vr[yvbOS%,,`Y_x:Y#Jp?gj)61 ˔pb(v9Iz"jB;<9[g*TESRuy_~a$bf5fy׮2c< a0NϊsfWn$"ص7?c|{dlJ#4U졋;zXʕqTF;D}/)z7ⱶx:Ɩ8THZ1/Gؼe#/cճ0cBf#7URn11jDd ~t[9} ; uIO,N0og|%S݊09ǿ#/՘68H^%#8Y_n׏3;rߵa*8YtuM,rZ ځ簾6dfqK, .njK$j+F-HhbZ,B02;Kd9]ݕ<#7 #8Epu]36 gtj#7^?EvM8#8Oq=< %#/&OB}Zï =ʼ[v> r c~Xaḁ 4th,~c-PY@%,#x*z^ӤDl?[kY rYoG-өWGCϧ706m#7䱇ׯa_x#7##7=:D8 8!̒G61e1TWϙc~&Xoq̀ 8FPnvdbhjCn>*ڂ+nX[;EYF᧘l٭ RBrvt+S p{^ y#8pr'NaP،;ZmId& 3eK8MlUvݨITR!jοpa{WCWNwoC8m6ȥ+~RӲXN`bP}\ *S%QA(RJTy ؚ_/{ɫX%;㦠 {x}?zodMuLMF+ַ6wK?4%?u{(#8ޥ\Cm$mm@Bʢ ݃p:FdK0D#8AEP A |ruJR8. 2[%eX}q_?Ջ`c#7%jM殥ynL_^,>Y\NE@z(PPZkF@Pzp;mF4aE&RAx\/؏J*0QM72(D˨2FQLT,9<~,m!C& `?4ٷ?E:G?%oW`¾u♩<-џhZ&xˣ|dGFpo[n@}{fQ4r3R0u+9e!\2K]w킏:9m6%X_)ޯ ۙv.Y\Gt}߿8.ËvA#uxDi U@)!%Q4zJ_߉VB5#7p<,=x{(镒S`.Y~'nxp5K<l1Sec~);YbBҙL5**I;b?Bo8}ǃbۼ:;SiC֞ m(pRqR_DDՠ{5@8GWfB$:f_c ꘶*I) i254dϼy迌/yOTQԩ}z3i#71 ߩ TQ_#/?~yLTrε,o_==m~5 a{?53'CUR(St C 7P HQUGN|Ogϯo\$?,_ǩ9HY,DZ!DRoT:ԗER/>q(:AG9%@|;ٙtÛ_{~4;ٷ#8=~~oym)Yexpl浂vh<#8[\rg[,/g|u~Vg;5#7 ^WK*%oNp'bp+&v818;]+VE#7}{ ly))1_>w~/㊛$%C_r0]lU[1{^1em}𫃺=:Q'9ax#rk٢7Z#710^ӽyл]^gEg6 }٪]#n#8G!++1/ >oLn&z|!tgyL,x铸yy8cxwoIXwzS?aٖ pSz<*;.aE>znջ/52p;0v1[<~_ƾ_B|c G㷀~KSx<<HrD(=?~0?xBA눞/]؍4J&ڜ&z~,o]X6KI t'd wŏ8,ȿc:)'\cxe翗#/С)R":X0_]ADzx}&‰Ew.`E38KA#m>ѳ='&nQ4`[xh!]j+J"rN3{}m/e峈rѻkXOk;Q}Y6"#^#& ޘq#7yu6#/sw;?5-H@ҧI5n`w;ld"vձcpN_> 0nq$ae$3k?blJr3~!{$>/5ޱ`{Lk/1Vϔ#`|s#j%ePr ##8F50Ҩ6ةA EJ$ݱ!n,$UEDX6mqzgZ=1aJ;;U5iSjȚ#8HV#; anvcm & #8J3LMFHl&Jpɴ}D^Z΄OQ,?qL-=a5hf^΂w!alaaci2B0H~S\88G^GbhGGJf IAb¥*26B40U"Pͮ~Ι~NnYNOrgOê\HfphAs՛<^ǎ_#7uSt]}b^U@t.nnM[n:ggۚG DCN"oc;,eVMqeo\rAma}DzDKG4ivKPX @&nmOS 7."Nή#{sXZxӄ¦?Oi{ů[p&։?|dз Gxan&1[[VrV1JwOuZ!5Ci-%i$FDPQRaaF$7@+9"Pmb" \YJg4aUj4cj2#8Zj[*b86FH2#7ӴfkA(AS(2-LujS@:F1,Șa³QiFGE$$KkA#/ekX#7<Dvof(Œ$ʇ#8DV?J # E,s"EU]G]dc=B3;?Dx'#8m#84R{gHA;/~H^s djEb9N5GTSϣ%{>?1y?C:+kbaW4;5?#7^:tco把]yzBܿ|~dDD^fauw#/5m.q7}C#89@RAr2yN ďPurMHneCGփB̺RI,ʪoZ Z@K6X]B=^Ax\϶YI O5UP3gfePBm#8vݨNa#/D}3hnFDz;:fۻ{7ѺakI6 ~ZX20ːDk蕾rsxỰ_x0\K#R"5+`o6/%!A,Q<?~>#7ޑxAVF3rh>uD(`*b0F3\z$Es,]Wh&6p`dpkvpf-MT-+X J1~4U`V^HᙆZEF LW=F&2!f<mZ9߭f>+ A~Ьj7A jFʘYs*d#d]% 쎪ͽZw5֑VVfDʠRTQ2Z-!B)2LKѻ5l+z4"6mA(f]QliB?hyccn#7zwpƔ#8$<-[~E+` ˘Ku7N\N]w`Hn6UIwd*n8HQcʪ)m8rҭEZy6f.i4C3-& eXPXJe@#7#Za0B#/jJSM@Qeo" \*h;U!VK uLAM#@Vi%wLc8^ OĈh4jqcL}8fc#kV;b5:P",#)I_Mk?/?.LL>Fn9k`^4=G|@Q|V^JIwC`M\}wJgc H ^&AӋ$'wġ/4}#7[yj7$cHsGg-JAUHtFE1O[xsܚ+]ӭfnM*KqzZ$-Ld"mj'ׄ#i^n/|ƺm;@\l^21)08R ($}Dj8MQ#8PKf)Si7_t >%c5Pe„kln# mrl8schӆ QybႰ_"%a6㍼O;>GTb͝l糂AE/" 56ẅ́eux7vŽ^M6$$1P}svukw.ZZv4cn(1LI-3RIZ ft{8nDspq--1w5eFҔ[žqlvֺW*#Pkq"GGFFKˍzy#86ڎ育o1,F[;K.2}amk}\tcܺEjhD7]]g3ɝ*e#7-\X;5KM1dፑXe '91#8Fogl"P9]naZu `my&֤#7e{V6X56Mq!T-;'n1&PιRPC:z}e9`kz: rqB17׌ڶ54"N'"1$@XdL)iGMÂ&O*yum!K<ņgDt,DFQiy8oOZYOBzN9RP:+>M A < MM-eqIGר=2ROMW 6(Ë1]BL0g&ϊwvIz>/ i򎳎1}CMM< Ԥk>ud%zY'3!)R<4OWKu#IjNAG!2IJwhQϾk}QP2Lx spm<(ngrӬGrɧ嶖;m&LxPQQ4^ß< ԅ?=n^?߷^:+Њ FT[ѢX^[B<ԡ;<e4Ƃ$yzv X>t GɽOy2.ST:!;֏U/;d8DVUnxx63+pDF:[~)@*';q+r`qLÉЁWqn#z;wM˷ah?XyGWRtK`ETjްQDT}q D7ㇿgenkNl&Zi4QJYi7`4\FWnEOjb+3_2/&|F#8TWpgsW0f mh}uZԤ6@eTnկH?=D=*AJ\, MczZ)N;RE@wY/vK@$Zj&k/{m)a>y65NQpNHe>C.*Edn2,Y(迃f/s;0DEIy/7F="h@[lΗ{Ҋ.^[mwBۑ̝[ڋ&*M`V*3$'30Έ#/ǕzPv߷SC:l#:=ɪ/0DT-[xs#LۊY YWwJ_zIۢ͟ 8`ΒYzցc+3LP")9Euvt6&j/jT2ПnX#/z=<|O<9Vi@:;>T=#/g(&=DӗrJ_k4=䘄(H( $Оtd:xT{IZkU>9[PoI"5#7{K'ahK5ƸBM.Z<"bc ogg3.AY#7Z.֏BVbi-抮eEtlzfsDF/ԕc|&R͚T}0<_X_8)_v,g#8cI'acj(,`RWs_ݼ7=ûn Q297?9G[}n|6hW`fc2̐~!ܱ'~nu/}`:ؘPť\91mSGJԉ<=+~ݯ^`~`JRS*mtdmz졋d3M#/9aj~VJ2VF] \\:>XӉD99zCT#7XauMU$Œ.`U;ƌ2co}`9OoS.诟\el˲4`'UV7Հp)|xBϲ^[s]*6+VYxfsXK9edPw6mO5g+DrKi:2NTx&p`u=wWLgRR@ܲ7>h>=lǺOmVwxEGVvaW ѲF'q7pZ;5#/µcd4qPh(|‘R"GQ(%e|$,d#7Ա3JV6kom-TPHLIm*ҡךlk%[]vw-\4": 3|ţg}4}3EUЪ#f+n]@;01X ӣ@uxPBq;a6gW-LVXFf[&it^!y拻ʆremcփeicY#8 3c OIiN}#8n#/A^v(l!.o7B[8*tͨ0G!wl^jTzL:|&1E}ܻpyRQau3q8=贼UD1;w[k㩿_#/X HIY稵VfvR2!JEi’7_}eU#8^y{=]Rn798S?jk턄P#75x}4wU ƒGwYHGo#2v]um*zÝSq poCO7Ov =Nςu([u,Xcj;2#yj9aSLggqqjL_܆]q(ufSr<Kx5 >mٞŬ4\F$EE5۬s: |jz{ostjGLA#7:D&/ٵ]^Xi\wTX-/a4V(-Mx=u's$K{9)l`46!:49*Kl#7|3r< {-p<6U_LGrO, u7Pz߳T:6m9M"IS;h\XKKRa%;d*L:9.V?GSRqۘxȘ#12J>s[usJd>.oڱ*<>i1j6x`%0RFyS>B)7p;f<5.vrD ;cN>+T#7Xf˭ F|6jy^T>fhᔆJ혶jھ@X5oհ|戉`2g4!x."tXA`BG?$f/#EsRn0(J։`w z=cc;Dw(WkЁr =ޕmL3[> /%a^R0~{ _{d%(R9='\~:(L P'i) (UT}G.0Ŝ}D(Pޭ<nf5#8k￞\湠1 ?-;ѳ%rDcehSVT$ڀf]\οV9|=.Yw(==kVHBB\PTK#7!0nM9{RB#8m:2 ğ71ْwLj~VIJm^ϔ-vp4u7FOJGlR7Қ'1mch|H(E"/tG™ KGdEϚjuP/%]&nݮPK[/ոFq<%#R<{YߢO z㍉-|o)#XW>zx UM`/ſ̒.n#8,#7/nWlR\Z_fbK/ath$&c%nl#'sxsRݧamW u|OVpxA)NTD.:'EnӬt؛T{4WcUb-[ 3K|Qz@mu ltbz6yv=Sǯϋ6"~ Arqֽ;_݈VrjRDZCCq'f9׺Gml]iGFf0R5ҽ3BEwj["^4#BG;@=o̅Zduݡ[wcah g7wlCϏUXOׂN&0nEN(߭*^\\tؖ^ݜ7Anv}9t"ӸS+)iJ/Uߙ#7;,(%\DR'ް@wW;,:ջK1 h埻 C_Ipjק}nx|~YD#/D:#8liԃwmp#8ۦ>v?Jg2M$d\ȥ#OcNH>N3#/ ?N؟W|e- P#/O@?W==G'kt2 ~8Qޏn\8"`D+hOQUqHTi*7+y/etpH*hZbR&W{1GB{bqGzN!oAPuuZ=y*x.%Zn{5Nܬ/_ٲl\egrZ*dم2yc% 3ppwsGNym67~vXrȦ#8w8~=)LW@5B!gK@OfyN!YK:TgLJæhZOR[4`sڑgP{ -;(#΀} c_M|7;-a?Pq'qc!/uh}Ӷ[ΥPkZ!uN koZg>Pϧ84/GSH{(߆+n#7|5stx520boj#/@`4!ńOSIƺ#7Щ}ͭ7öuP+U}Ĥc~?s8#Bx_zg@X?e2(/Ic잸yRꮽ؞~ߐ-#w;J83ZCI*RBԬ#8~xͰh7("mßkO2FU3) Kğ&UN8፷L M d7};*u&l]ӭUR,Y3PKp"<㋫?dy<#8a fNWU/ӧnꍒ+Dz #8uB 4,#8,+(;ɄA|] ƈ[#8ǝ߰#8PIw<K{ߏ 0)ryI8N_x#/|PXfi29x?m|rq(g:{xw#8[$FP[7³q}#7/|a9t8!"q)9&BuyŔ7=^9J#80H@&E1 s {ێ:6!c uĞ`zxA&0xyJGPyH",{7Tf"^<_ZL 8r Mn*Uo9c֐Pqata9D9Ko=";yfyXm],@yNr(kyc7 )41bOsWCj)|'<@HZ [*szX@U-0eǎM<!98>Lfi#w$=qhY7Ĩmc#V$r[8t% 1$Vnv9Bpc=[1q%~^1DBy#78H2 QvVc'Ǔ5^Ȕg_Urb,K&Mn*Imt- [\k[sG[cn܈SOz0Dc3l둝#7: MJ!HLxF,'|[(%nUayFS/%'әʗ%PMwS1#/CA3.ŜH@x{T6=ݐto3/ye٘F;*4aW+.]3 9d\;W:c k;,p#8MPLӕ#qkzdh}/C☔|'$}mG:;`n3S/.OV!IMYPO|%[5pf-)[vڼ1.V`?9TM$(#/GlyrQB?}tU=6#/'_|?Hzr2AU`ID:!i 3?&>7\Q$y{{.z`W^6LL{#/Z#/Q)t9F;~9+սm{U2Z"$I @x<;/#іXrB5=,D,H0$\@À!%в1@e! Vw(0s(!ɾK#8!n`Eu_`0B&=Rn5),fAI;.R;nY##85Bf:oK6#/P#dؔi]c2,aD0dvaFD T*4M:bOTM7dAiJX=ޯ|Kr5П3C}Xt;D6SX~g?@~BFa#7O:qap=sv4z}wβJ[xg sA%\:9+{jw"m8f^>5ue sp٭ܚܦl/|t?>?n+ʿN/)LM5iWTDx fb#8vpjxyZ$ӗU#7;5F(z?Ωi E_,SO6QS4#7F>lGl+w}gaFb2?˂3d&(a@VPvM"D,U(ΚRPm7[龹ʛYIߩ29O[z]3Xv!3J^^'Y&0S<t'(v2(#8`mknkdcm|fK[dڮUtVE]wzU|%&:(2!U)(Qj6x{@+$[a.=9O1CA>YV^ ,Z>|8h-+_;3q-OV^7SAh̫}o|v_t@^wL)dn,G cY[4hCpjQ2I#-犤#8LGW;ub$ Gfl|ksf#7Wν6Rb66wZoqch+^BB lJg ਋HUV;0 jJ2Y,Co(#fT}f/$cPeSEW<}((*2c# F@wt ]5 =>Npn̆6אwhzww˒p`P3hOSDI(` 6E387Xd^#87z#ű:aN/'NtufY6vѝ.8#8`MiidgciHfN+ye:u5V.(;CZKc {uuzlF“ `N^.vw:WjG;߾)\k̓o}単%_}duFǼ&`gXid$Ķu .lbJR3}h_vezW|9R#8 qg<mar#7c>U o*&L:Ĉ頟Ǫ-pS7KcAnSAa^#/v Ұ;hLU]CzrPQdF񣥷oBqh2_㥺#7V"t#8Dh!|6ml[՝}L_6ia5uaonduSdZ uK&182WiSxXz#8UCUX#7ӧff:'U^h+pd#8G D[ TD%&'̡,)J>;yۍۭ@ &:l#7~vɁ²(?TSz#/+2`{6 " ,#/L#/Mm.<'n1i1_ TNܧꤨs0SoeG|ws+IPMKio`(Lnf 0??GXkI !&"ZVj8NE'*%0сK#8]] I:?Gt:/sl(Rny|*?/ww?/=Ԥ+5g>Q_H$[B鹞LR9`DQ#/QL_.|ҟ-NtQP#/zhuEܗiETfiӷQTPBn }_ O^`pEO:_p80@qgپJ(mUv QGۥŨםO7G.9$#j9%qC#\<̨PcY/uD}xt%3riץ Ĩ~m4-#wۗ@vwF1}ܣM\BLn#/@8j҃2K]0!`##dL$"#/y6%s )L]4IBk[؃@S(n-?½[*mi_KuFFj$'P3~YͿPrDJL>,PԐ^v0DЋn5Ya4CRmX(HB~燍*ר)' NZV@Ol|˼{d8L0PJG1՟{r#o?d e`X)L;/qTbO-CNyOHH">UJ,ͩ)O*#/u#/9t RR"λ/u~DðrX$g.?=Kk>'w?_9v< =Q<'.kǖM{%Ѭ#8cðgWQ!xw%#/A:)BG(x~z=hNV$zW<r]Km2:sf[j"_o?5@/7g(,!5t}ohU#8 }+xd Ҵ#/]2?g0mk@8ulĕ3EG2#796jTD@! Ћ>՚cAiP^GۦCXNUnsu#/ jWe({fV0/Jh>ӏfUC- !##8b(/,9x;^y;2Nmz7fc#8q.P$+"NB8!e}ӿOr\DoKl/lR9,ߞzV&3oO#8h =7SKחo_tpq3 F(GJە\y8ᔹY`t]m.d612Xgυ$?#מfeѮǷOЪ}h3a@g VwN@u2rv >i8#8/ݯmO$$Bo]ӧfJmb($Pn  +jB48_#/Pz1>#7z}A~ Ȁgdghp.t5p0,r}"hHjW@oE`adw^#8DRW3dt䦼0eF@ƕa_AFfdv([ms.^{}E,UxpO30m -/NitRHGKT^Wg/WZDÎyZ侵)S9}8+n]n%E铽)_ѵK<6JSd” g0!ޫs@lz/<8 Ԇ61Ϊx;tXIN>MK_Z#8SMh|QօX Fe{Q?5.Z`~>L͍Z##/l{"hVa |}x'=2CqFnNhToBD=#8>!Aq GM@X#*;pj@5t0eARn"~FUfJ%@c qELImz'/Zn'T|p= F9 wvBϖPg3w[®ޝwtf<{X3;h(ɉ_}f8\[Ekv=A(?df{)"d9yǩsjƵņPyuEC D]o-wLI&g|tSl'iKUg,rJ )P8 WRi{#7*`307HO^_϶Nzk諾Β?_9<6ڨ#8e.uH[lG=3aIzYK9F,8A>iTdrm~-M h#8ٟ{y`PsX NYu9Z.g.tv\N n螿*F]fDΉm&#8W͔r|5m>ޱHvOԈ5hd!^ zr;8m#ܐ?飡~m/>DAV݈Ir:=2d]\>!z͗QPP4=lg3=qR|g\Ps߆y ^:A`PAQpQx#/ h~afp~Xaxb9Wz H&FH 6FnY{=! WԊhWS߫:I8e#0\th}K L?^l{s/>?VA}Q7su@lT $V0dDb#CuzɳG.X0@C#3I}B/d=İ%<,/gg~OոH}ѪCřtH!"j1".Ntƶϼd^@w|gO6;J0&5#/}8Ur/$qS9'[,Cq;@v/#/@]C9AH:埿R X"Js!5AcIү\#/2*#8zp5)>Ol;STg,eH8qK D+}ګR|gɫYXP\DAR&N0#8y*Mt t5X"ϝe.ğƜ3ĚtP)M1@D9Wzbw;IT+ j$kzY-tZ*T#/XVU`᜛?Oˋ(4g7nmW^JNgɘe;gTLq>#-㇄0?JOTԪ'C&ӗpcC{e%I;Ds<m<1 *ꅉJT6o蚦/diZHzhP=(5fϏ#7!!|"X|AYJیBh9\4\ }D?D*Gu M*O]=*,ˇssZRgmOoG|_#/P]?C ,)-#7WwIf;ZNL{GF#w%Ͻ 럪0j712[lV5rwib/%* 8) GBAy#8ױ%a0P~r~~yY2umugܹީfVV۞yȶ45S ET/VICH_rvmM[bNzPiTbsyr.G+8Sox1,lـϕ>" +8SuKyM>ku!ˁ:qo>^&I6u)ȏpSpז)gR( 1*0ӵ!EJ$75a٬crI.{?2#8C;tOcHNٸ|x'vv-8U*.PML6tѪC:Kq]rm.}9&K}DJ)6mv0 Hp#7޿ǀ~TBøH<+c*ÁfV E{ p ]U}EbUlP>[C_!,~#Ϸeku#5vqzG6!l rT1.s#BoJЈw1;zᓨupd5a_#7##7$̔Y䦞\,*Y6]wy匬rq[tz5/%qulv< $-#76VSȱj|_?F7R(ڗ9#87%zqB`%UF ߄)43'jTVAt8D&<^#/ 2x;KQDJ0#8xyBoڨh}hEh3I<=#7{/ n\A8*#vw3*5`,r5#7/ڎ4WiE8)[=ׄt#/J"rk-30> X:!C#7!Sx;BHod#7]i60`:ώuu2uKZH#7DGػ8߳6nu|(*f.֕Tc[9yP54Lq{cҫ=ؿ{(#X #77X:9K:vvsu ^%:#/)cTkЃWdO!pD1d\lDM~g0'~Z6# uDE(1 `3k*NJ 2Z9#7N0O`jU #8َR 50ȅȡACjݹCJf1l. ȶLvI|_݄d9𞃠`O+e|V ܒD,ߟxARnǎų `wJ~A̶n;l4(ۼWvΔ"o?ws#7tfJP8@5[+ϟ~lm\ks&o6(Zsc.x*sgi5JI@od/Lb[i>XlL,`$NY4kͰ_:[!]Tg#8fEMEõg0 /<cTq)i8VkjfxdlN꺮j_TV{{Uz GCf]ߡag &Ű Q' ;psFo6(&hm;RD'C\įNfԞGaB_R7Q#8)F#8mف-uTy9S y5#=N`pz{ó0?ߩ}yPv#܎EK |&eta{?MLmj?a#/}ƥ{['}uA\u<{yz~aW㎜,!nh=`w Z?'۸D<;Yry]#\@#/#8V!a*%y?+q7[k l%kwH#7{1eNq0e&IUZ@b pln|jV1nB?6 !q@!Hp28mjѠX%.S7Mޡ`jv ҇S #7|6OQv &P<#8Ҟ;ʚm\?7XƥX<0v /~$+GY5D_@Є&ϘڐGt_p#7$(4#5=^ՍQ"F˚.u~#8KXPbmh4~#/w"D(z$Јh#MB1#8 ?o_yE#72+ئz~l;G$<|Nm޷F8+%'@2P.#7d#/ωpڲ^P~JL"ɐK#",#8i*" 2,r=#/iȌIW32b`}*ɨ"kaǵ\1z0婛Qu0 hH#8 3cɠ'ܣ@~>WU-qXaY?}+K#8bFab LTE ]U]w,z,e3D6FOZdOPlhONHKYfW)H9#$I3UkZO3W5ec+00e1׬ `=ZZ#7XL.QQ6_XwХ1 PI$@z@_5($= i1ÑNы^\G{Q"J&Dj \C(~M]"1yw)/ǯ]M ؏C'>;e{b'_ ?[A%/H]>r?joz%q0{1ͱ*)jB! #7phHnle[[0P[ݚ #/J,JQN߰h8'# ,B7C&*d-#8:,3w[5yVf>_$#86?@\Y§"#@#/ Ad%sݸ!p$ eڤx5 o["}4@Q/܉,s0},z`~}|tҼ>XCDۆE,B APCh<ksp>XƜvHCmS]`t@{|S8t#8wR$n#/7>] 13J5<HW]w<@rw`m5gP;oaR֟MsFi"HHd |NsU./{̊6/C{Ð#^! ;(3y÷Ū~*_gQ͗ $X1!Xh|ew-g}Au5C֦jI'cUGA4d>?دH_h)[#7D-=?QhݓNܫkF\s|DARQɹ jiDcXU1#BS/R643]Ц$!H%HYW>nC-o2`e:"\z#7ﳏ6ss"U?{7ubIHx[dgdYpmb%"QCs:ZZĄU$IZw#/A>^"y<pwp:R#8{-3#/MOV_|X+~#70w*-#7eAYibmJAjfNk`ʎ09䁚S^Jd[UVؑ*#8?̙#7B#8>#ĆߟnrCK͹v e䋘E#7;>fߦu?<:]e+@<0)st DA#/`- G$B>o 5%RNxݻ:#7#/xY3AVttf˹r 7(Ĺ(ĩJ#/RD#8ER3A,#8!&ɬdE.aTC" ! %HbfyQ#/$P!k;px{УB62<:@+"* "3(.k\zW7HL6T& [w^ya%*Z%FF@fg/ppeoyo=맽2$Zg7z##7]@;v`#7 R"#8Q!LiM  _J9)ak1<@v׏7o#/4z28vOAx"H4n϶IʸgUHN)_n#8Ӈ#E!&]2H(ydUꌁ=#7TeBSfG*KHۻTyiHDi1ӳ%,#8( !I?\2{9t$yK)B0%déH1AIgs= mUTSK$>pVp5W#/oBX ݌؟?=_qS)D YEEĥU3B>G=!_ }Bi4“% g$K%UvAA" u0ǯKe%EZE)`\\P~pw:Ǩ<#7uYкsm(#/wW>d*A#/vmT‚gOi%:'ٻ`)ayTi#$B­#8#/Cu}'v,"ӀyzK*ü ,7aGž>O$*{*g~(1?>ś (0 ŃpTx3>x"~ Ga't^_]lIR6rأ/]z㖰%u_[sYm&N^];2{"uͳ\Nhzw&"WԠ.rvudڗ ϧNH%xۊS_,p9hC8m3GfЋj?Q5C:#ЁăW#8Xb0R9/]V|=z(ws'Zz UdUQ-"8;8xΏvӴ،"(%#7p@/؅,zPx(BA%'Sza+H {`y2#/?//wZtTn- Zez{TD}-g?aMB@<*E- hԓ\O> sUI7c8C{ VvBB8TrK\H\#/ $ Kд7a`⁰#7J4L@o 8%$i@NjA!d,zbP*wS0ކ?|C>1$XdG:#/u<(9A&#/6#76;[AzaG1ʱy(bW䳂u*Iz#+q[ mbT݄(NF#7kqpu a/f0I$!>/Ax϶C #/UEPuj($![wϾ@vpB{ FmCDݹhQS ?8?c(f%o_&1K6ٳb#AbXъZ%<019f{= |1Dm|!U~Aǽ<'9#/md~9&@,?w;J~#{p){ ?uz΋mCzն!2ǎ]_k/7y`lX`HX=x#7"#7?Xi%Q`&e6u` &[:Ŏz:x%4~4H!qO{hQM[5@Zr ,|^ײp^OR)g#L6sd/#7m+V=p܀:U͐턌?3ދs˿a^rÑ)CLʆt=Οճ9*)t}&ΔIM¢#IqAxTʅ  !VM@ukmXuU]dH5_??{@k>K` Ę>vтF^;#/oJ6KSԜϳKy'CQ: ? qNTn>+kk-].53yκf['y۶R潅l2dAX!Q2f}MPT(b&ﱚQ3?6DMl^ c=PZbubI1zSVs.&խ.utb80sAE0,0c!#/*@Cw~υWVfH̯'ߜ#8S0BA_/뗙C Q̒t9R_ͧ9[QCg!n5C#7#8KEZEq~#/ֵS Qk#/Zz#/W;τm`%#/&8ۈU}ei#LUD"sN?_DϧF,M-I9\`gYʱY #/@6fS H#/e6DZ$Iͬ%;q)7 CpGswm':!tάv|=nyªz!n#RM3Fǫ٩hy'-zjn꽕m)QO bfHfs@nϭpxV t#/#7|>}fގ#Q}d0vQ!hiW?^">D'7Ptv4ڬ"U$IWn]9wspFz͙ZvKܧg8vpE4HI$ ,ţ?#/ry[K4d@/(( %D,6GLG_Qv#/>A#}i#8[ڨ~\^-1gFס^Qc}uNX8ht&"Lp?%tPm?#vxgp1׼u64>a4H=Dzǝoq+#7IȽ1`6 Lcx4.ݦ*d̆Al܁iZ- wMH,W;*iVqqammg 2!g`90Yr::qkC轾կNhFz *QHFʤXFG(AzsLU7jkLx0jHv| %E.~Жf.' 2)X3~Gg}ipB3BWi-ۄcL?(*'U=}_@_ݎZE6PDIpHN#Rp~r#8.D!!#/ު\Wv#/᫴@V50F`S0HIHeM·YMQ[qŃ[& I-yQX2]d&廍eȜKuup*Jn*.YxnF#7<\'HN{#7!oTȔ5fCS+fip9F TU*QMdSɠ$3_ U'~$}r2b\ y9qEXy̅]FhQLZO4=_w|5 ,M55fcfSzhk8y$4@ư B1p4X6@߀Ghҹvqrf"%^x*wK^NA y92z2 RakJIh&d"6b>]8oٟ$)՗gv.o{?(F}b4$~u,=ABH@G|GDuUIhŧ$#RD.1LJ$#7V&k%O@B%(rd^W_k{K5,_X^V6i莺^*$T܌"165#/9 =\eOuk#/l" V#/|9HSԺ?x$ 3HRn4]A*#7Nf@>K wbMրm>LdKӸlrR.zĢEɍ#8?Tk#7cc^ngG]eKfS-96v۰]|#ln'F6jC̗`~;t&%aDq]b:#7idޟ,*~XTvB#8n3ɑ }y%{IAz{(Y8_+ڦ*MtF"SrmA“kߥv.+I=ַ8Oi\WS !";ل/Y7clg: mA7pȅ٢Sil܎N((y0Or@ɏ5~8]MB6"lZg>}"#/0[Chj倗!.k 7sT>_Tѯ߰ϯpq,gh=fIc@ '#]%d:4hokقΝ$flǛX( Lm(Z\//C¬7iwD0PcK_g;S k4:!PBEaI(`<#7'/"PRA`vo6Æ64ÕFVA8S#ěw}w)Zb"*4Ui:yV.p lךQ#8fbṮcYVeJ3܏N:w^t8.W&j $iJyKiێ CdesЍ˼G<2FU8RQ^k9 ]MsLμӮ܃X&gʨdyvj8v738#7r ,BB煢4NϳR],(IuK,Z&KbҼv>EeGթXBdj \Bř$%摍l,k>naUMe׃ɧ$E((ƅ(,K@(9qhЯ2U6<"@}=;|@Ww[ǙU FE!U0)K#/_Mj4t۽h(Us)%מ{^:;{ȹCcjJ'`p 8x.r(U̹QrM4TK+I`$6$Q/ݲ .m"b(}<]#7T:MPڒW|'~M\ i 0q#/;{[L 76UI`7T#X($hݓjcܦC$M_a%^ͳM443fEbѱP=9b]ݶKbg -"GeԆ>W'ٱ]nG4b@TA+c_N9}*p⦡JXUwOPNEsZ#8VNs/- YN. c6CHOH#8F8*%BHX2?<.#8\Hms=?ȏG2?Cj+%/Z))~$ /j~Zԥ%گeޯ!P5#7<{,r/+/_iJMRdR&%on$-LJ5oMH NdCqH hpXg CԬz}M:=ն^&/<ծ3;D|\۷^b2Z X3鄍dEa+#*mQ#/H$A\Ik_;_ 6n=<[@ E*cO>?gCz%4R<s?q.<_aQ/#7a cʹ 6d2k )&H#7-T`d mÓp|pV G#/ 6s*$#7$&O݉?7Ox8*`x^BK/\'o I g{k |(!ӟ .fRkg?'Dt}\s{0bP#@'`QJU(CuMPJ;MKz^@@HDw 3` 1" TC)_AIDZ<`w@^t^kJA>ߕ,f#8Z}BFS?-&ZR?ĽWoB,6%Z-V4eTbYM6i%kIdeF3*bz)'J9m<$H2#/ ɀ1>{S_!Z-`}Xh\PxhluQDF1,2@x,_*ai#7q۔C>)Lj"KfiN"@  E#/BV@L3Uu[/#/TvJ EA$gP⪆M5PHԺx(d&_C~{{@;%HT*M:L@T H 0 :g"A6^Zcj͹W6LRQT$PMDPPO3Oh!jXY#/G%SEv(s_>/}馎qpA=OB"{<G@6D#Hr{?'_v҄d Y1UD0ejD"F~&TB Rh},c3dMN(^(mI ӦQO &Lꌉh/ᆁ^5Y L_BN<^IE %1DPχW,wo|NmB / /p6_AnA%O'%\g4#/B HV0i|:Ο]nqD4+Xofq[:h&Y-x;S9!dž/G凉U%Ny5ָxU 5In~`JFk"N3%cxIw\Z]A#CcƙdWԜ E1:H{hd4BT)D fRJgJg?#+|;Mbr!mHlN'L;pU 3⿶nu])e6 򠨒驮Յ &˝@!#/D@'{<#/N"S#7Ε臌Y8@ՔQPiF v;dwv(,F{L <@vr8>5Έa< Af1M_kK ՝0= >)c>hUKԲ 0'I(@m&b\.!| | Վk#2Ar _"Ac OyEy+miQ0-t}(ܞZqێߎ\s8f:^6l .Qۇ=Zbǹ#7<{c*[#78H8w}7:דlAWA7`WpScƦSPV;Vb>w.nE0(Z"™#=#7X7^8Ly !sqwy1}Ǜ! ˶=_{O)9ZkWxyXpY~9 OoF(GקE#%غ3ف! Ϝ0b?L#(iv*$4ݸZ#Hpm; PcFB@y#/}ݺQ=͉bN@jB%/f|+o@77tݲBt]!1PeϑGCq$LF:*@L9~<5pΊE>^K"0F;4Y,nOucǡEJ=73C 1\es˂hi̵ _Dt#7#({'L!yA kl1.Q==6s6Evmq~S_H ^#%T9JN4{m"<H;IS#Ҳ#/ٛ'z){6Ȧϫ^՝Dd ;=5bse:J`bIV1K#C6Mk͔ȹ4mH#P+#0+#8%JBi)ǵ6Q#/6V Mޫ|׵55fE$MpAȣk#8l֘ҳ#[_Wܟ!DDfWK&m }l!$|@* 1PY@or;><]qG  S)DsAK4IF/cah1Pla[dm(F׏7{ZiډAl݊ـ1POT7#Q-ʳ{[i[=x$ߓIþ|:"!6#DCQB$J#NG*YEJHAB%(7i9h`;l!|-U_2ۺѣXR`lI֘"bEd#/־;Sgڳ7U]^./Ɂ{yB:gR&kw $JXlLڪ3`$*WGQ獬L pj%3!Dgj0<#Kvd~XqI@D PE=#7騐ZIv #8*EwԙC vqq*r:#fCDň`Hc M^ut*sM ]Qli}N >CBaJތ}Gu:fX(w@qx莁\|/{^BФTK)s{pwm˩ӹsccg:gat HUSVö&c׮ٳ4`uƁ/y$=Zۥ)fDk-nM6Qzf^n#aX%}Db:M%lAh:%Y8%=#8:/#8 K dN/s{>4E6u@р'._0Tj#7.ef`iq$C#`CL  \Y48OtK.Bsc$)i/ h! |<ީC)@HXhv`}{no[Q=S.,/YS(1rt@؃٤)r!L80gi82M~`#3#/Xbȳ}Nohn~KKf"#7k&kcoT6m IDAMogה#%6KoKUV$$rlJc'HC-&]@_ұjj@hx_rd ^,G;#7GnTK"riqJ\Tb" ^ؼsL$]cmGK ) & ҁUat/Na#+9T#81#7Q&Mnl$!tJ; #8i:A"gH\Vɬ%V/c "zZcME#/yѲgפw!IyUb_DBB33КA/ ԕZ@z-jFDJan#7#ξqmN2Y>ȕmUȒ^}28'8+\e!p+!m<ƨ,d6RPSqTƮ`bi?f#CVHPtuG/TunU#D?Tfg4)ZsuH@D!HВ L6YRLRjI]I0biC%4DEic^Mi1dJelЦLL2F`QFh}]DmE#8D)%%0AD)Q1%ik!2HSPe*3i6ƒ)[^NۋvaM {ߛ+UYq3j<6E06`rdS(g)0ң,d0vn$ av1boIayC#/9S]#/P?cː<[Ήr'3 9lGhMZU#6in2eYW+#b! 9s` g|ཕawxS`U 4`1Im^rŔc|TL+d##5#edX6L1UDDb$Oo{:yOP!05gg>М0ר%3z5RE2 g㹾r;WXu#,v>{W<'{D#KBs,"pzS?(i$ac2PHA,`ݑo=z:If5@J)H%" {S&=|u#YM>#cR="(2F^#7>p}1"b3ۚ;Ï12{9- |Y\M8ae|זA(~389@쯕#llm<qA[Eh]#/3Oa} Ik| L|;mߕ˖H, VPKsM;4k]6my 4OSkÙxIJێ=06P=;'Sr2Ϙ)>4k3"֋JBH ^`݆Ǜtȟ6X@z잍;۳Ø3m$![4A̼hÿ @7oW;2eRz3/XM5q?#78}t ë+Ob6%'MIy}![_HnD~[eT&&Lnaf^y,Y;gmV\=ˤOrghɒ5`VmjA6ֆfN@HZf/ˑCp\%b ZyLFڣ `,ꚫ.m>pi9箙 !fve*V#8磨iM\b&OsaLa.Ѻrm#81kZg)MIBw&!ߔYvxM4]dr,)N4bтl-&]G{EA9zTݍ&1u&<=p[I1Zpbwk\N=>vdFu0 ~Z&1yŐ5XCC[Zh6xNVz#7Nve HbggҒ(5V 5@W6fǭ\!u$QH(} CLEL6tF2$- ``#7`RK.JjSÌCۅL4;Dz26I l]/?VXZH DJlRQ]+y"9a48yr%k0cJeo3$CfL.cX#7̽l]a+*P(6b$cвNxnBa t%˂v200k6(^=Y&q0! %hCB,.ӁtpLh)`gĨ!$#7j+T;-̐ks1ܹCQ46&NFͅbR8Ɠ;+q*qK ^Af%lK:…#/0<#/'&ԖP@ #F1 B(IPM`<4R#JD#7^J?_|z8A#7ܯyIRI@1 jUK_}W|,#/q9m)?bRD 0&4TC8 ( I*Aݖsb#76a`{ӶURaϥVC ~qe;By8S5xɻ-/Ytmq#8摾|fɔ\s'M.iRm%09l!C~"?)!sGbc9!:E#/(iT%%D#<#8@PRʁ"a`;!~_hC!wR@p.#JJ2ird!u7tʿHDUUwaPWwUٍn.nn-tX@0H5=Pg$:/r3E^#88", (}COє# [r~|,r=YFwG*ɽ 1 hiQ6Y8M(.,x=&3pZ5]CFh2!M1X*4#8:b8auȄ\o!F5/qzFg~ y8)nz4cYMQzkX >'Τ`wA28f?^m'cul#8qCFMUD`*2 n"uaZmC7Rxk]gbhč('<;XB&[M"*gaC!aa} QpB4eWk 1!5tE,0ĨQ4IFI8#/ZPRI#7MQZިGgTmY+ӊE'[t6+Oka vj#8=2#7g]FCp|TQUUPNKDŊk&ڱVmZ !!|C3by" [֊_N+ԭ^]Y[ QYZI\&tӆJ4ɕj`teJe:^ݛ$ .ƥZQWJQCA##8q4]2N"(nfL2Hjdj|I{tprDM9&y#7I"ndv75B"Qz1*[gSfĚBcr"#7ԧ5;[kÁ|{9Foi6=oo8u3ڳ3mU#776ަ\IE}M>JgXLɏo.2I xcw#BtؐaR$!JtlP9 44`v\XJ 0dM .kT6ِ$DR4}\m,dU)#Q#7#8:4,h`ЕFum[i]#8TW CZaa9wcBP(&>Jvٮ6r@1ǔX%LBΞO<◪&K4ۡWm]#7һ+v2Ӵue^M#8Mn5Fvi)E60 h0 `RHJLXR)ZZYKL̩UF=|T,TЕ٥%y?jn`:#81Bl؁9&Ed0 (TM ؔDDC 7}CwRVc[ ZYG8 #O^IҫPqL&Cߪ-Dh2~,LC.)c%%V[rňRLhBjIDj6K)[RU+[!#7FHjm[vViy\m*[lU͍bHYHu&SfS%"檢kKff)i3E F&M4ͬiMM+rIlKA(4Ғhm6SH4l31l##7[(ɒK#BɫJM)LIZ)*Œ-J%hM*BRe&LL,MQdHڊX&IV,L4e%׾]֕m%4ֺlkR%Ѫjg׬c[h)lj[Rմk_pu:l"κ#8dkO&o kU7#8o aʻZqh%DDpj)$//yo˶$>xqoD_|OEo넆,;C@3ß&5ѳlf=%մrd%.A)]%_ږ/#7{}e+ YBK- $7БN# iL*QF#8w @A(-#/Z_#/Q[(뚆'NJ _ȥ8&Yfğ{p(LT`w%3;vk/]#8MJLR駘p\&r#7#7,GV%_c%*6V iU_c.?#7 P3AQ]Cr0~5NKO*Ce mg#7M Jpn)'QEUpC;[>6ǫe87fGH֊eKxR6Wq0>!mpb]#/mU6DTPi\$#87d' Y.+Yqϡp N%#8TCA;drw8_-p< #/VȺp|;adzΞǢ7xҘ22Ǽ5#7A#/2vN 1?Ql#8l#8PPR)G7$0Ȃ,m+Hk{C+) *1hΪh4C D6D5$-pINcX6Sp:h桉XVFA4^EXݶgV&-FQ0*EF]$ *Z@P\H:GۇO4k<M"}Wm}No[I'Zf䭸uoB0-K}\$bq{mP#7`M[K6CJʙP! V3 oRņ#uۭЭ1p>w1~ֱuY#71oT#y߽ a—҄@ iQO`|Vd֙id86)AH1@iIIEd47  F2e|)Dմguj3XȬ#8P gk3Tmpw'\]I f#7&3shVNAUN0%U/FPP'e\fzU:q򕏁AЈ#8*̊!kjffĕ,JK"]ߦ=_yTPGQpGrǚpt`R>CJ$Z,+yX^bx0ÄƉM]HD$lid#8M6lِӐtL]{r%`j&d s#8#/Uꢕx [2Dÿ6Lݍi Y6=ş:0=)* d@D]U|D'hhm)d#8L7,apYQ#7e q"Z<v#7#/ ;0TY#HbW AIgU%&.eZ4 ᗮg8Y3cy}7ԘlU"lŠOUj%4JHS٘cCmvV#8'\$dM9v%dv#7X?L "#/$lZb$Q k#}HFe)b#7e"ɋ<"^Obw%fRڢk|g{{ÏNٸx R5yK~VّQ#»Kؘ 8ҎF}bU@]OfG:ҼMʂvqiݔ9vۄN&gVȡ2*Z -$@U&j*rw0K:|=h #W} x ?}$؄3 e"Rm[&f$'zjj%khꯅk-yx#=^:wn)\  .JIvYE#/dm׮pG|W]Mm]=&cr1.CS[y<9GRMqv2)mF:U1kڧn{UOz$ԞC''Vr+/@"AHA-0"W#7/"߷>11Yyp,qDչp( ^Q9P96X1_vJ {BNYwe֟HT܉I:c3#7;^,Z`jZ)Jj2fRih5P*6H!_k`]1;Vha h}/orV#/"2@SkyȒm+Ux_|-1dxփ#70#B &DfXЈ#K1Rbc jyQ!$xn[n|ەuԱ<0"+ a#8boUYVAhķ#ݹl\wFlW-sc^wx)`Q&U"$kd5C1NXa0#ѝȼL\kL( ?(iK6ܐXtjִihre-ԄKߖ#7;P'Z@FA@/n饶=&.hR>C˺ɟ7jImu`č h`F'SL4O^VrzMᣠ>`(Ъ #7>4B"*+$V_o6;Qy[,6UD/-,k\WRm7[dY}t*#qU`ԩ" "M؟2MQDG{za` qyw|<0or}&!B#8BQT+LI~b#/@T!aTbE뮯un3zɰph 71?9AoUQ E_Vݪۚ^ido:eK*kxYztEZd*b`dXbQ!Lv$"10ԛjbE1#/I#/1&(#/M)FG+Q:!-m`,6Xt)\+Hʢ$>Pa#/q ,EP1ĜX 㨋  и~NJC7ӄc/F%I{$3DvfyӴ+lɋX$UT5YӿmڑzQT'h݅svK g]I낕#7>Ł#/6 o8#7\{#/lz.;4!i^$ҥmRQ-)RPͦvƚYORE1AD9qtjwFߣj#8(.UF0wh/jZ#7(?ڌ:b\ٴu}0d>:uIwkLn*z뚻H8#7o:\6H%e-aC-kl.14qLH#8?#/F:[DAP*>+ I{;I$HI "#/D p@spfn2?#/u(h9m5鷒_JŐ5*S@ ZMBB^D rsнLGIW&i8PfI߀Gk#/C،F;Y#7#/\#6דl #1?ItCf! *A m*g{)FUJqS_iԙ"&@&Btҏg^ 8bX:nokDN6F|Z0'frٞ;ԟ\62u'P=o6h:㩒'G<$I-[lԔ,1Mm-IkM*eչmLSdZ(YV*-i-ĖiDU6blf6Ű$bf@ҏΘD{46cDM\#/8ZSڣZŮVټyF +iMo--8z:q#/ub5Q-1_iojG/@7PFBEȪ$ʕQaH Y`d~Y&Qd!>\vG E/i =>I*E**9?sHA1!#//\FQJQ4[nƕ=O0b<ǁzn7K .EU-8#mF3: l҂K$|(8G/.*3T4.k#8|oTDg2EZvo:ZkZB.q.lOO_j0-^Ob:aAP':(nL88!`#7Laa=`B+X408F#77&ʞ/>qJ=~uiYvdc#8QѲ?,4]?Al& y}% Mt\T!/߯9vy!!#/56rWuLF9 O#8IBiVBe%,-#8vk/yŊF22F"IYs4#U鉁tkY4㔥014FL*vPJċ}0LU)x00E`#7GHگ yR`] Z|-s/![2gYBCd e#8dR gJ&)aUBfVdUD)xM<)=&ywm#7wjpi u>@fnECf@vЧhcoo􍫆Ed* )\atĴONEnU}A ʟ#8*Clm+*Y\-޴ѻ` UHySxBT8[!8^.-I#/,E"!,L6˭d-:Y]oDyP~; #8#7; OĈo/ Џ:L5 0ö&#VFI8;>l 7O۝(#4*慠w9/ m95&#Zd,q[(;Uhٝq>X[5#YT0X#/I#/ l@&(@hdEiR@TT*@(lFz{#8_wն-ϙB7ۯFj8KUdo#m#/3#Đ-*FVxsPNpDHQ.Ƿ{Ip#Am69XC%7Y] =c#Rrdml7q:ֆm=?6&YÏOT*0_D>27|nKHDڗ_xC$3Vue<00TAiD6k;a{N/OF#[kD7-ڄR #8*%0Q Q-a@)a ~⤠C/Quo"ʄ-n\{%o+Jc``B0c%b*,IPJ*D"4"'Ȃx8""6%Q6R7vBLZtʓ#7?@rMZ[<$^"=y#|^\w˵ĝ҉N7tC6aXB򜐤Xtl8rPe`Lh]!%؋GC_ %Q;>|%6;8LAvGlGGٞ=EپR+J_tZ&5{%6t:2ZH$2fVAR5:'&[^<(ݠ_#7pl7+$x1>n|#/=}XȻ'?fo=e|72d $$~'>t^5cEXjTj'κILz cMbd`1>p kOѿ;#/? B'*\CR3E'˾!BnQ-unPR60*C!VlZWC֡py#o&`#7B#8b|#7ع#/\ pz#/#8@!aN!NJ*|5*ZmtՍ6mƍcTX֯֨SVBu6//rb0hb 4ȐF 2 ybu8͸]~Mpw7N"b#8MU>pP1p랿[U1#/릮oj0l`+cLib}Cy!wƿW"6}Bn6ЊR;#7¡] n{3O#/tj=݅?ݚIZMGmN dA]h$[i6V 'N67oaXBy(1AF t(TMJ~*J7(I/ÿG9!(^ZEgKP: Wc#e H+AFҶb5fp &N1dg!1#$ٕR T*_wߊYkӁHy1b2#7(U5ET6Pbd&=^q1 4*쩒YŇ+51z;r[B;3СV'|;pt"Šb?eڹQS7f

x4|9i@r4i3 PƖwebC`*RzEw+51x4m$sˑE^#u&L:D#8Ɍmg%J+dEaFb7H1JЇNYnn\11 e#v6\32 jr3j\yJ԰V#2|mlmjC$_s#?+LaB#7%7fޔz j@OV$mLҚPt1'~"4},K$xjͭ-\`pooUAT逥0(C2$}ބv]uOquex43(#/lr-}{\6uqmluɮ&baW܅}=,э}$,4b`ITef4T9S#7 0*EfT5pRZ97M~_WtփS*ЍATב 18@KLMIʕX ʫv^Z҃άyeƨfHY My宮5FҤT"b #c(#7 i$R,Qt%\JoNkFZ>K2):'u)qu#/T#7VGs)FG0?%4sڻXկJ2lƕ"SiR*SE.2?~u\^;#91HyK#{{Nçtd˝x̒Ryj-kٻ33nNf3nawh"#7E5yCdqleSia6Du\gCs;{A=EAv L(#$L~p8=)~7D+ˆ BIb${nʈhmA!ߪd=kS~þ]o[l؇Hˀښ#7CS)`|A>?pO|#/!0AdpdY06\ caH (gMK5i]yVңxvZ6MKWxV5y.[sṅ.QO XHJs껺Zl+⪼ZVtvym6ޭy$M#7/ɋhXiBWvەӒhDFPb0X%=RDa pRշכ͗U填%DJL)b1$ / KPe#7bBTBe#8*T5Hꢛ(LҕQS1Qe`ѣf6K21*(6@͍mWFtQR3 ~F"gU4Tm ReWyOsLG+8~0 77G< : ȿGS HA!Zߑ֒Z7s};$`0hBRi#8Ƃ-gݝu%-mTm&mkJWݚEin?+SRrLA΄ģث#8#/a14HLA"#8b͋v.*6HCB2#7Q9]BW{$@F p즹o#7V&vu};Qg Ƀa:nj a>y!06lK7B&l:Øo ZvSa mhќ; -DTje;8`Y0{ WvЬdxD$ s+V4%r(Tٜl~m?+*&*ž#7´2 iE> 4 8>+ H%ʗح]5&4oMum-䞝F*2#/EyVpLJJ.3 @f"|{{%r(QE$H21B,A1#7AALěԑh04~/fp.`Gt@V0Ll֮i_l^wUR( L,d8JdA$ g8Z8kdfQ0mѶjԥjՁPL2!,Q`!#8$DQ#8#8,ʎX]dY#8KAK#/=a^2#8Lb Y, >w^#/pa׆}Hj|5~'kzГKllݻiy](3nݧ{@<$;D#/d$ #7;@@Ho=Y!*?}ڌO~/MSzN?O#/AD^G9`i$c$h䱓w,|#8s-Lr9gTN:R4FAfAlx#/EoPUAK/[2d7#/Јab #/3 TްFbMᑆ4&!QU0i(6Bo .Xt,B"#/"I;ꑄ . ``xEgߵ}i*jYo}͙:d;ߺ#8sref>'|v~ USE5WJ(]uwc5}uY#/K?p#8PG#1/޳[֯8wUVL*"吝OECF;jwxħ72qdM$RxvdbcA+nno7n:c ۤW/y>)5%c [Q$V! o#/T353SXUI3ءM#/??AI$#8=Qݿ]濃C@B8;wa&e0%Cm0pl9&'k:Tv]C$RIlC֜toat|#~ay,v`vOh#bF41RDIhTN?WWmwcuQ^Wf:Z˗8 %" ?XPSDۭ$صFZI(#7c1(1ꪰUcx%{mkĐA̩#~N͊/8bWĞk쪰pք H@F\; Ad% f &iPR,,`z-HĒE#8#8ȠJjG`@9&Ca$ N#7p?=TI=P<ʾ^㪎/6XTDؑ#8f%Z@ij7KXNP?<H ;7#/AQP+&{ҾiW^f#7-PHE:YՉ3@Z4'S Qkǜ>/u]PR1m4q#7W _yzkԹJdML!$0#7GL۲B*WTwX6-hgGF6qṶb5ٳL#!DB'xn4;AA?@~FJ;#7 #M2?"Ȉ!I`ʑ!V!#8'lg2;_#/p79ݛP#7L?HJIT~ + T|TB{_Oi_SRx@dѣo Mv"HQ2Hꄄ gц8ZCD"[bZm4lLXjL."cu9@ɪnVsϙTn:7F2wI^Z]Pѭ3JۚI㽀@I-#/5J+e?n`^)Nt~omsأd&"#8bކw}==FxmytD}wq+lc0U>&*͎e"^Ȩw B?kz"6J#/Mws_.h|3]eyLh> !#V1@.EnɊ.7)|q F*h<dvg/Mn}!FxFxwu4٧wӵ)旷zy0 y+u+`ǔ{n}>h%vZ϶9@Ѽ#73]7uԁmް# K(ң56j#Fv`vI=Ԇo!'4 "#7:򘩥nHY>OWlH7VD1#*TR]SBE#87+3{aJیL[H^#/8ndwp?>3!+,+65rN>F#7)("m ֑J[~Wd27Ӆ`w*.'uOj7DE#8"qΞ|q`1[VNwm#8MsCaY|+QUjUUfZLh~kl\0JK&%\WfwwɨMQr ӰXC񇔡j#8hB.WgU=8'P_va0p篽OMyGB^#7#/@Cq~av H$[I& 19䭍!@B<_{gP;IO+*G_#270\-0N5݌T q@Aq:^=_up}9g{PJKvN n.uQ{>ؽv 1 Ԭbc*>%z1  [9荼4#8HOS26\*T"$KˬJ+Np.4Єӧm FRXq|Ά{eSzC#/XD"$Ά9eFB҄ԭ#7 l$c?.'ydž[%FA~"K>_i Ncʻuک4km٬ThQ ~ [H#/:.ldwn"ԫ@UwR~ ḥ6HEhMDRbcDSddؚ6Mc!Iˋ?M<YGܙxsoי)$ٷl#7c#7Faäq5X.:E@#(*ޛbߝ\/&9#8ax4#8[p!fs #8WR5*QG51.زüuF2 e [2&6۾q3~XlICOM2#7G. MFcFl2̺ls^8S3% a!5H6|S[XsT/ 85&a?$#7ؕLd+m4J8j#7EIj0 Qi@FEW,)[vڸEV+!JQ6P^/aH0@̆1qRĥBhRQdY'6&#Gٹi}J*ȔA޿/)|5OLnJ?iٗxqG|#/i粯\ci,Sx`_Q3LKs p2O0\Q`Cj*B'h9n N`(8m5v;,T%DS{}lֲcBKT띵 :!7.Pd%T]""&,IcGG(!`Pv]#/z:;-QT+L=TR2S{ZPvqPJ^@3/ HrVMt_UH(z݁#/2"e7jjm36I%(`ť2ѤسCjJ+6RS&ѡJU[QkRҴSQ+[I[5ckkUD "bԢi‘+"~A6G2|:]6Uǐ4y@H!ZP$J51pM1 "c$(UL4"%鵺mW*ڤT`HQ|BAQ1@/TiSwt\;S+n]ٶ!PC Ig=Q /Džeg) #8(X*AY2&g;qp)4v,}ꪡ/-ȓe0#@N`B!puCB,”(`pG8r#8BH;yv]o,)B+kW5lj-ͷ n'fw6kj,SIe#8J>M9q[3ubhcYG<|qtE;>Ylz3PJ_Z~Zsƒ" xSVh&"f]h`k^:$*G7q^!L}dr!Vjt;?K#9bOרur#/z`Q܏,zy֌⽚n[vgUK"ߊiEϧV3a)GZ*z\km N˹4gU\|WL 0ie3HqvҞ{d ?1us٥'Q#/3!O"eBGVH#'53Z#7PRn tCxmwDayM>W`qH}5pb0B*#t%ʹB^_8a9ftSMp̺mZܬw` Mn^]!b\9}Jlv"J/\-\L !$a\fI ՜5qIJE0!g7Y kO)*^GW{H‡:^[=c1:gHE&e!*7d:{5gܪ΁ {Qa"#7`crmL1:-szhD}@VNJ˗E'LH;B #8'^Y3zYmS)]NʹÙkt>ؗ޸ %yxFmĽ%}Qu:ζt]<"dnlyxyCA؄Ez֎ƻ->g}s׾ҵ)[EWnlS:_֜/#ݞ}cUz.aљAɂZ(ʖVx˜|ł"N~.=tDkʪ.S8K ;sS ܻ`ЏDעi2LӍyJ#7|, d.f1/ަ%`v؍豋qcAcuv3 ɕĴ;[l/ 6 r6Dq(45'q4jR-#7oƺfK]Ip2T:y;h|ٟbOe3usڜg#8 6AxB}Dݪ,1@ؔ"t2k;6c86r8E 3^D9Lu`^.#73C`kw]D҅TnhןxiC;<4˴ ȔcNIRD"1P^ttj]mL$ K/##7Հb@\Cqym0FAtbP'2fB0EKR<â8nܲK RJ9#ʝZ%v#/6s^{1~ Z3K3.&ۘsyC^TQZ# *A.ji^N}Λ6 S+.ƼLQ[f Gg ¾T"Vs ##lNƹkFaC-D :EKJOs˂~Em(#~ E5*~s-ivF=u[PaNN16Q^#8D1.tX]Pr:J&f!1/6r!FϽr~yĴ\,e+V6GnwPw䦵ӶQ$j`2-?UbQء~%@viVkQ-29ys83GVX2}]Qhтr7}zbo4P>Vf"N bC1AċK&ӥoc:ﳨ _^=ts7Ḃnw7wFatk.m\WwI[P;O #M8pp8fn{6drj#8'hgÆM#8XB9'Tʂ12ay 9䦫dn/@lp"䈀CBkv2*-uCρq9f0Wß* #([9?hjDڇ<GN% grͮ\9x..mf4(kvpRb1&Q1ܶU#Uu#8yΐgi6#7 #7J/,ɮBˇx3&hLĄ#[Aq6s#/:\f2.D1f3i2 @"#/O'JtK|kqtm0H]\ZBka:A'^9NśtT1C-a)UVM{+l@`{S''#/j;˛t}iLa"#8f/6>y-CoZN*m3C FbPPl2[ZUrwW6+!*$ALi גjmEV+[[r@I 5;)DQ5X#7E (* !R9YL kb 䜜m!xi:IDXsQE_zoxۑrlkJڵVVUT[mWZenFfuY3_9l:#8[EX1ibn X=#76ݵᛁ#7?:6b"#80eq2 U>=؈v֜h*C=2JYצcɠ(2tHrʠ+ƞwwMYH #21i3uiq͐‰m65$R]V6&cD0J墣ܧh)b)$Y/O[=Y#8-uAH &aP w. S5+qcn)Vk,f4 #7EZǦֵdƲ;kWW.V0Fؐ(.dCyg$E3@Ŏ ōVP˭#8 UIݾkSxn֘ #8ftbjFGK6%#8c14cݏuZ, !ԍBTxYTe}3Jɒ$njn.3#77`7AcoVI'Ӎׇ0 3ycD4< -'v֓cSG:j]P#73d2V8jmRTVĦ#7!ii@գo7LY]fn]>h!Z!*TVL`uUMFemF?sj16)ƤNKKmhAqA#/[$GSU?vA4W$y%|Α0i!#O&*,N BKk2UrH8R”+Mc Z'C1Dڢ&n\cFV=o8`o4NUm!CY(*]gtc#8}ٔQb,bQE n`#74`n#7`9e4+WYcLw )f5#8pn#G `Q 3#7X+4Mhn.P`jsJii<ԃ~5΂6&'"ː9#7+TS-7 ffŽ zj2$DJ;J[ц/^|a? cY7Oj;)5rD=kk#8o j1/f>trW 4vȪY)WžlʽTMnOJϿ7b,YIH)0!}`o#82;=<< 5ӓX03iqO\UKe8Ys7ہ#CR rHƛcq9;fody}#8=(`ЛGe,P'=CF=|g! {ނa ^Hƶ춒2/."(QDAA@U"6`#7O!GnDd$Ūj2lcd2c(#7D(ZUil[&RQ$0*6C64ԍ)6IF(-R%$)*SdR I0 6a$#"!$ȯT€`Σz wc0~_lD<8_/s7{.R>#/ #/*چAmR;7#7s4)656ώzkpC&8:v!FAL=#8b@8]۬ O'9beTV7oInoiF̿<(RZi6lIъ،! HRY~a;*H(|Ic[Q#8JP‹P1n~ytjkơڢ jH&"(ك#75HEh'2Ԗ4$H$š%RDj4nhS]%扴Lb:k5 #8^ ,ib!GLĈ;(ۖY=g2T=dCt}#eAU ^#83KHoo݅&bW-q&Slf6#zmbHe7:09`9$!1xzEp3UK4auBs ( ,IdE$I$8P=:o#/id+-=+ Z6Sߏ 4=p3CfuއS8'tg#/Au:Q 5T:o`CHO"FRK_x'#/6iEvzuVFkMzM$1#8t+zC~(&tͫmayHsg*4-ofo2nf1#3am#7jQA@ rג<9[-YlKM'4k@WLMy!"|NKoO sCzj&!Q[*\"x2HBB#ש?ޙO3Î{з}C$ 3#8W3=bnrv-1#7݃Rj93>L#/Q<:܇;" H"#8_zTuPҝeV.Z߶df81FuK!UE2C u*#/r XfωgǠwg ~s#8 WIq靔zJ Iss R3Bmݽb2FiI![.xvmw aDU[ÏfFP'F#8TۥL C@jsuV%"QQhdI;nEf0C&0R#/a8%7JR89݆4 20.q#/;Q7Ԍ͏[7 ځ&l)UHT+ j^7!Foc,-07k^Y907CɰMyTH*D@8 #8 %213T#BanR>Ky#7Ӯ5@b )R!t\114Nx׶uށF"bB3H7,2Uϟm.f#73p& #w0d&Ero5:fbZH@ ؿD%)Ӡ /=mRc}<~I`.]#7٭RzC#7W nyJT(x&U )IzQ1xŵ߂[Ҷ3TO+:.IWW4yb_#72z`9q&(; 5vA[ȠXObYgH#8 Q:k4Gad6Bl%=RGScQLěI ݶi`.J@ub3-)+|Th̹c#7.IᑱcyE!Ҟq#8t؆;5K$4sJ WL;ќdMEG/V]lP+E˦LmoNljW8x%z?}}3Hz|KɄjl#ʲÄ'&Զh8#7(X3W5kytoˡ%(A#7#Y:` Plr'AayQKɻT%h"0HTȔ[;&Re1 #!K$)GpbA4b C6?mCR#/}"#8OM(:x(bhՄKg!vJbQ GG ϻ!dﵒ`>`(bHsK1B)hQ&#8C8jQ+WUXQХ#8l6&;BaeA}~}MO"'B *T >B`\t~V G/+D)I&dY6Fͩ4V3h,R{<X瑘ꍇq<:9t@;Ϡ#7#7޾δб;\sÀMI@\z/.ڥ@ DC|.(N`@r"vvޠlA{YԄ(#/A.PD! !u|]XKWDD(0"0!0s@bK|%#8y8z`^$X0J#/cP(x/J 6X}cm`HddxIwWA!4{?Ov6=yqlᢲl1/&kWX*51yR@HJE@ұ*2Q?jE6#7[^QAEWWc{3iH)}a  "02 Q>FAiH,dlڿ劍_}&QFA!(PQL~"&l%-m= Dl)!9R(P5TS")65k21XL`xi5PNP-((?4zw>0$W B=1Tr!f!Ƀxv,!0P3I*z3{{,ET`-Ђxcy#8F d dpM5*^mWSU!JD)ԞjKWU|-庺4֤VғT-y 766i0#8VR+\/*SRm/v.iQ>{<35~ Źk3ZTGB᜖Bq#i#7ՠ9jiobW-%61t6#& ; ?R P#8#/J5v$CZRkU;`g#8 ]e&1DX5"g7bdjYEkHcN,pSr`\h-ZNQHXGPiɐٌ{m#7";wj@\29z+zȱ|* DHL0ЁKM+zVyD{]GG Ղ^Nqm"ѝ2Z$SaCGB/jQ,G4SeJXLX/D2~-DEC=vN|G[Pw#7/k^ADqzjvN:;Pcpkc#/ ҍ;˧edB4DbN|#7"M8+@qH|Xrcpdl}#7|{|g>{,Y71^YzȆAᡑvnFwm<5'p2}؀Z@ #8#88#/kS"y;)!4&!bO3h&H&_#)fUDS#8pl=(bo?Mx*40)*wuHfgmmf GL$=h:!S"-4+ݔN'h!qAsd?[u<}#/~e2}? {qWbA|-<ۨ?BA%ps⌮_e{ڇMz|PqtZPQ`\<`@?f:$|?gokLs+uJٙ\#/ԩ"nLlkvh$qƆHDIg2&(q"ԫM"e;#7Fw6ԪN,N^ il0B`函2:暠3n5ʠEGX7Ř5p746#8ՉqoxS[u);Έ!C2gӨ{!69;.AqS1dI"Z/!2#/hsH6f~gSM[Vx]gZtlƊwQGz;w1|`O`C?Fxňr;%(sfdfkvvZRkkHhڔڜ|>Y?j"<:P=SQL3/8ClI"x~*ϯq4IA'(Ep]?T?(!- /m,h?w?6ߙh9+y={a,.|F|:M׸'o(?t-A!u.HGTJ%na d.Pl9!/Npgv8"7٪qs8iӶeec&X߇hf4፭CW9,Qxe_uCE.Pzwi lBmWBj36Uc~!i~>P#/?"(Hj~+ #<== -#-----BEGIN PGP SIGNATURE-----\nVersion: GnuPG v2\n\niQIcBAABCgAGBQJWjVbSAAoJEGelZe39+Q5k1DYP+gObB4GJc2TRrfkaYrNAZaCw\nOZIH/XoeOG/W3SWA667oZH8prLtNreE2OMiimqqNLZ/SzmNZ1FfkpgPlaPPSw/Ao\nyZo5FD4CrDPshX87fKGpcG4OGSam8b6ky6ogAdMDPeXu7z10w685PPQtel4zpyqs\nNM4709og9/EvK+41jEyl0oagF0sa4EAtRmGowobqTYQIl96ThDPVnRCLMnmeBveL\nmjTtiVQuQSmJlo1VJnDkvF6TOnvWqBL29LhgeKqD3h34S7a4AnWWfu8DHU+UI6fI\nDGrjQ7Hx0fNH3XSR7MmqM+fV1eB1bFC92MhLr26aAE0VDnlVYJDDi+YetFXodmqn\nDDFT5ySI4bFbd7uAVqvbbYcy1pQfj4cfQ5ZShQzYMuynGQtez1/2+nbHtySeVAy6\nku/MLNcNIhKj7+8G91ot0psXd+GRXXES1kESVnE1dQgMMNgzCNNlZ5M/aPqZKHt3\nbduc5KsjEitWLhjeOUB/l08g9nk7h055J01+HEykrkqul8Si3uhC2wogIt4dMOYo\npN58GlOa1COC2YgyO4Sl9UQdwxc+5ICwQRJ16V7rMsme5ABrLHQgtNLcaR5jLbdd\nfZ0D1PB3xRtD8GChAAZFsHpKPmWaOIqabWiYKCmlTR8GWOZQcyw5E0zG8QRWgFVi\npHt1l9gxtPg//95wADD0\n=9wuW\n-----END PGP SIGNATURE-----\n +#-----BEGIN PGP SIGNATURE-----\n\niQIyBAABCgAdFiEEivIt5aBoIuNHTzxwSbTGfAUneqoFAlu6SwgACgkQSbTGfAUn\neqoUow/42qAAfy7QD0RhPW63AjZo7A73LFo5Z0ZAZbeIT7CtYpfOdbFVB5JOU2ks\nluazZNtf5yfJK9MT2zvJj6sv29zT13hFTCQPw9d0Uk4u839Bl1/WujJ7RPVJRDIF\nxuou2nteYEZwqgPNgBUTU4hHa417V+D3pxKeeC9Kv2OpOjq/tN2TPC6KkrRrEosY\nclNJS9dTRqQVKbscSPicurUV7otBjhal3fTdqqyfNomhr5rrJ57ApDFBUqi2vLQI\n6IhQsMTETd2ELyLG0R21IKMe+Qh9SbqKvsLKTcyRGxHhhbTpqo51chS6xrTkIo/U\ngQpfKNV3Y3a3Mrt/bHk6DRye/lMXLvmiT41KXDOQPn3UFH6nDVUlSgum3pvU4SSP\nglCvFa7Fsh+IuDLDk7dst8FUoMUlO947LqLx8+SVOz6cIyxh8bf/PWjum2Rk7+t+\n5OIWjX9sq8c6PZ/zamUloFQAb7lj7wFOIUD0ITzsCwXoB782KALgh7Qm55HyIqSs\neXVCxxiLI73/Gf6yctHj1Oy6Ikf/Jhbac8pK/JSHboY8obmsmIhbOBNQAlxQVmuO\nUoTunVuO7CM+VZlIvi62ySlKJc3g5D0jC67GHdJF8kZUM6o+oioveG6YDr6nwNKJ\ne8R8nNrhu/tVkZ+EaF93xKc+vLnBq9LCOvNKeaftJKLUfDOnkw==\n=da20\n-----END PGP SIGNATURE-----\n diff --git a/waf_tools/pybind11.py b/waf_tools/pybind11.py new file mode 100644 index 0000000000..2a73a2916d --- /dev/null +++ b/waf_tools/pybind11.py @@ -0,0 +1,81 @@ +#!/usr/bin/env python +# encoding: utf-8 +#| Copyright Inria May 2015 +#| This project has received funding from the European Research Council (ERC) under +#| the European Union's Horizon 2020 research and innovation programme (grant +#| agreement No 637972) - see http://www.resibots.eu +#| +#| Contributor(s): +#| - Jean-Baptiste Mouret (jean-baptiste.mouret@inria.fr) +#| - Antoine Cully (antoinecully@gmail.com) +#| - Konstantinos Chatzilygeroudis (konstantinos.chatzilygeroudis@inria.fr) +#| - Federico Allocati (fede.allocati@gmail.com) +#| - Vaios Papaspyros (b.papaspyros@gmail.com) +#| - Roberto Rama (bertoski@gmail.com) +#| +#| This software is a computer library whose purpose is to optimize continuous, +#| black-box functions. It mainly implements Gaussian processes and Bayesian +#| optimization. +#| Main repository: http://github.com/resibots/limbo +#| Documentation: http://www.resibots.eu/limbo +#| +#| This software is governed by the CeCILL-C license under French law and +#| abiding by the rules of distribution of free software. You can use, +#| modify and/ or redistribute the software under the terms of the CeCILL-C +#| license as circulated by CEA, CNRS and INRIA at the following URL +#| "http://www.cecill.info". +#| +#| As a counterpart to the access to the source code and rights to copy, +#| modify and redistribute granted by the license, users are provided only +#| with a limited warranty and the software's author, the holder of the +#| economic rights, and the successive licensors have only limited +#| liability. +#| +#| In this respect, the user's attention is drawn to the risks associated +#| with loading, using, modifying and/or developing or reproducing the +#| software by the user in light of its specific status of free software, +#| that may mean that it is complicated to manipulate, and that also +#| therefore means that it is reserved for developers and experienced +#| professionals having in-depth computer knowledge. Users are therefore +#| encouraged to load and test the software's suitability as regards their +#| requirements in conditions enabling the security of their systems and/or +#| data to be ensured and, more generally, to use and operate it in the +#| same conditions as regards security. +#| +#| The fact that you are presently reading this means that you have had +#| knowledge of the CeCILL-C license and that you accept its terms. +#| +#! /usr/bin/env python +# JB Mouret - 2018 + +""" +Quick n dirty pybind11 detection +""" + +import os, glob, types +import subprocess +from waflib.Configure import conf + + +def options(opt): + opt.add_option('--pybind11', type='string', help='path to pybind11', dest='pybind11') + +@conf +def check_pybind11(conf, *k, **kw): + required = kw.get('required', False) + + conf.start_msg('Checking for pybind11') + includes_check = ['/usr/include/', '/usr/local/include/'] + + if conf.options.pybind11: + includes_check = [conf.options.pybind11] + try: + res = conf.find_file('pybind11/pybind11.h', includes_check) + incl = res[:-len('pybind11/pybind11.h')-1] + conf.env.INCLUDES_PYBIND11 = [incl] + conf.end_msg(incl) + except: + if required: + conf.fatal('Not found in %s' % str(includes_check)) + conf.end_msg('Not found in %s' % str(includes_check), 'RED') + return 1 diff --git a/wscript b/wscript index cb7b7eec00..70d70dca06 100644 --- a/wscript +++ b/wscript @@ -74,7 +74,8 @@ def options(opt): opt.load('openmp') opt.load('nlopt') opt.load('libcmaes') - opt.load('xcode') + opt.load("python") + opt.load("pybind11") opt.add_option('--create', type='string', help='create a new exp', dest='create_exp') limbo.add_create_options(opt) @@ -89,23 +90,23 @@ def options(opt): opt.add_option('--write_params', type='string', help='write all the default values of parameters in a file (used by the documentation system)', dest='write_params') opt.add_option('--regression_benchmarks', type='string', help='config file (json) to compile benchmark for regression', dest='regression_benchmarks') opt.add_option('--cpp14', action='store_true', default=False, help='force c++-14 compilation [--cpp14]', dest='cpp14') + opt.add_option('--pybind', action='store_true', default=False, help='build python bindings [--pybind]', dest='pybind') opt.add_option('--no-native', action='store_true', default=False, help='disable -march=native, which can cause some troubles [--no-native]', dest='no_native') - try: - os.mkdir(blddir)# because this is not always created at that stage + os.mkdir(blddir) #because this is not always created at that stage except: - print("build dir not created (it probably already exists, this is fine)") + print("build dir not created (it probably already exists, this is fine)") opt.logger = Logs.make_logger(blddir + '/options.log', 'mylogger') for i in glob.glob('exp/*'): - if os.path.isdir(i): - opt.start_msg('command-line options for [%s]' % i) - try: - opt.recurse(i) - opt.end_msg(' -> OK') - except WafError: - opt.end_msg(' -> no options found') + if os.path.isdir(i): + opt.start_msg('command-line options for [%s]' % i) + try: + opt.recurse(i) + opt.end_msg(' -> OK') + except WafError: + opt.end_msg(' -> no options found') opt.recurse('src/benchmarks') @@ -117,9 +118,11 @@ def configure(conf): conf.load('sferes') conf.load('openmp') conf.load('mkl') - conf.load('xcode') conf.load('nlopt') conf.load('libcmaes') + if conf.options.pybind: + conf.load("python") + conf.load("pybind11") native_flags = "-march=native" @@ -163,17 +166,31 @@ def configure(conf): conf.check_mkl() conf.check_nlopt() conf.check_libcmaes() + py_flags = '' + if conf.options.pybind: + conf.check_python_version((3, 0)) + conf.check_python_headers(features='pyext') + conf.check_python_module('numpy') + conf.check_pybind11(required=True) + if conf.env.CXX_NAME in ["gcc", "g++"]: + # we need -fPIC in some Linux/gcc combinations + # also -undefined dynamic_lookup to work with Anaconda in macOS + py_flags = ' -fPIC'# -undefined dynamic_lookup' + conf.env.INCLUDES_LIMBO = os.path.dirname(os.path.abspath(inspect.getfile(inspect.currentframe()))) + "/src" - all_flags = common_flags + opt_flags + all_flags = common_flags + opt_flags + py_flags conf.env['CXXFLAGS'] = conf.env['CXXFLAGS'] + all_flags.split(' ') Logs.pprint('NORMAL', 'CXXFLAGS: %s' % conf.env['CXXFLAGS']) + if conf.options.pybind: + Logs.pprint('NORMAL', 'PYTHONDIR: %s' % conf.env['PYTHONDIR']) + Logs.pprint('NORMAL', 'PYTHON_PYEXT_LDFLAGS %s' % conf.env['PYEXT_LDFLAGS']) if conf.options.exp: - for i in conf.options.exp.split(','): - Logs.pprint('NORMAL', 'configuring for exp: %s' % i) - conf.recurse('exp/' + i) + for i in conf.options.exp.split(','): + Logs.pprint('NORMAL', 'configuring for exp: %s' % i) + conf.recurse('exp/' + i) conf.recurse('src/benchmarks') Logs.pprint('NORMAL', '') Logs.pprint('NORMAL', 'WHAT TO DO NOW?')