* @license GNU General Public License, version 2 (GPL-2.0) * * For full copyright and license information, please see * the docs/CREDITS.txt file. * */ namespace phpbb; /** * The class loader resolves class names to file system paths and loads them if * necessary. * * Classes have to be of the form phpbb_(dir_)*(classpart_)*, so directory names * must never contain underscores. Example: phpbb_dir_subdir_class_name is a * valid class name, while phpbb_dir_sub_dir_class_name is not. * * If every part of the class name is a directory, the last directory name is * also used as the filename, e.g. phpbb_dir would resolve to dir/dir.php. */ class class_loader { private $namespace; private $path; private $php_ext; private $cache; /** * A map of looked up class names to paths relative to $this->path. * This map is stored in cache and looked up if the cache is available. * * @var array */ private $cached_paths = array(); /** * Creates a new \phpbb\class_loader, which loads files with the given * file extension from the given path. * * @param string $namespace Required namespace for files to be loaded * @param string $path Directory to load files from * @param string $php_ext The file extension for PHP files * @param \phpbb\cache\driver\driver_interface $cache An implementation of the phpBB cache interface. */ public function __construct($namespace, $path, $php_ext = 'php', \phpbb\cache\driver\driver_interface $cache = null) { if ($namespace[0] !== '\\') { $namespace = '\\' . $namespace; } $this->namespace = $namespace; $this->path = $path; $this->php_ext = $php_ext; $this->set_cache($cache); } /** * Provide the class loader with a cache to store paths. If set to null, the * the class loader will resolve paths by checking for the existance of every * directory in the class name every time. * * @param \phpbb\cache\driver\driver_interface $cache An implementation of the phpBB cache interface. */ public function set_cache(\phpbb\cache\driver\driver_interface $cache = null) { if ($cache) { $this->cached_paths = $cache->get('class_loader_' . str_replace('\\', '__', $this->namespace)); if ($this->cached_paths === false) { $this->cached_paths = array(); } } $this->cache = $cache; } /** * Registers the class loader as an autoloader using SPL. */ public function register() { spl_autoload_register(array($this, 'load_class')); } /** * Removes the class loader from the SPL autoloader stack. */ public function unregister() { spl_autoload_unregister(array($this, 'load_class')); } /** * Resolves a phpBB class name to a relative path which can be included. * * @param string $class The class name to resolve, must be in the * namespace the loader was constructed with. * Has to begin with \ * @return string|bool A relative path to the file containing the * class or false if looking it up failed. */ public function resolve_path($class) { if (isset($this->cached_paths[$class])) { return $this->path . $this->cached_paths[$class] . '.' . $this->php_ext; } if (!preg_match('/^' . preg_quote($this->namespace, '/') . '[a-zA-Z0-9_\\\\]+$/', $class)) { return false; } $relative_path = str_replace('\\', '/', substr($class, strlen($this->namespace))); if (!file_exists($this->path . $relative_path . '.' . $this->php_ext)) { return false; } if ($this->cache) { $this->cached_paths[$class] = $relative_path; $this->cache->put('class_loader_' . str_replace('\\', '__', $this->namespace), $this->cached_paths); } return $this->path . $relative_path . '.' . $this->php_ext; } /** * Resolves a class name to a path and then includes it. * * @param string $class The class name which is being loaded. */ public function load_class($class) { // In general $class is not supposed to contain a leading backslash, // but sometimes it does. See tickets PHP-50731 and HHVM-1840. if ($class[0] !== '\\') { $class = '\\' . $class; } if (substr($class, 0, strlen($this->namespace)) === $this->namespace) { $path = $this->resolve_path($class); if ($path) { require $path; } } } } JScsjfۮЇ(I-oDϻCk*`a[D%SKG82Ӕ\^W6>I@ZW?[%v$Yc8`Fސ=(n#Ȅ%"R3M_;<<7$e9 oO";}G#x*u&!9|1]5)JJ ݖR-}YXPSPJ*+'pdƙ킃>~@@dj=߹ t]Wy-i*c߃XV!&[G"jsD q2̚TҞO}EyDs\o;XpD/k\)qTIyE0{7}A;n$Je˽jďu_p~v$.-w:kʤ7*9HM[>EO9 _Ӟm{1~/PBCgY'h(AލxuH vs#PqeH'NۜkUDxT\x.-8=Y6nN?>k wu)sgo6XĂoMځ0/'lR'|Fj[w˸/Ee_S|D ^ߊyW+tR v*:EŸ@&wΉ)K:v9zI,C=l]]~J1? "M3"ҧV˘X N>`EKXߵsbن-E4a|t-B驔)EE)S"8z|onxl )8^6 0's Omiyh:1-< ^ ZRUG mM(mh7l8Ӭ6҆R@[ s&hlӫ 1=Kp݁O'֒j9zW6(D6D)ħQ`Դʋ]փt"|jWr}"2D Ljg</yfo FbEҩ-!:ݲ_!n=WTlT_?KhJ# eUQԯ7sFK"`~䮲,i9U+Cޤ,/m(MU$~=@C@)O#4z:Gƶr;AJN 40t:nE$@ֺ:gȉ^ 1ا{d|j8̓pYoH3 %_LEq]$b! Y흄נtz>U:3'O5: e 3rJ>f][J9L2̦6%2ɊM*#> 1;jbdc'z,Łڷ+L}^%g8{c]޻ԾaN0$iY1;;KTkjR7Wcp`'n#[4fR|lʘ+>\fI1s1zoxѱj\33Kg>?cdZMK&O8}?Ã촴Ĝ&&DG?m'>3=8 *! =so6ebOM@pc{0V5YtjBqK²4mq3YM\ub[r=[7չϝm/02Rk.s.GZaOW %;ŕP:5AH1Iƴ^*az OqkP VGM`= Gg}]bk-1" ;HC$|j҃wP ?v/@K3=*j[Z(KSZM PLtܢ!s##bȧ1"%,g#(GXYqCG"=:RZ"(w'vm[2 cc) K[4sz?ժN9Jx*y#Bٮ J3>CT&7L8wo_kJcaB sb7S;.=v0[Xyk*Ujĥ:gj;mx[F&V]1tz&W3g5J]?*ybgmkY{_ !ŭFȴ{JV`¥% Jgy  iB +! o[}KBs=mkA J*l10/-a>x>G ykK37Q EP/`q\s6q\oI'}zQ\ [鹵|x-/ڹ +@ k4F] | ;f9fHT'!G}B,P.UAnl˾ud* ih8 VP*| _怬<s' wz=v^|23SKUL7P@"2!Â4 t10wΛ<_ $]4~ fНi+n{`ukXl笢i;O#D=a !!s ۇ45F22B4ޗ5.n2H:.H*ucʡ99Z:kb@l4tāNZ)j%Y S$Sx&jq >rr3BނE5f ~MjR7JeS s (@| "F^\g3$!՞)#Wn0uyg?>Qb ו7W} Atfˆq} Mw/<ˎ m}=7 Dlbs"G93\`ŮX m&X>o3J xV_F|( Zs|4+EG JP7 &蝩hax NoV4 ʤ[yb8kn>g~.^t|q2hb2>Oý|fVN u;2oM(rDQ=x0`h]% nrL~VV$]ޔ,AwYTWhݏF!;/&4Tz99y}΄KtK/fLm"]!a EXѹ̭TߝsIk or>U`6ρ˼.d%j>;E{W7KdeORQFB̺MR̃%$ֶ.#E J+*;nuqd l  *?^v,V\ *]w.#1$휅bh|գ =L1RS8Hfg]K OJkGtZpOwb B]t\WծǮG?ge--A;o ,؈dB-J?f4Kvrв-I;ɉGT{4ԎYys:G$^)ZgX~.|$9i/jh1otEF]Sd_8300#IcE&p3;?rfkj> 2rތrǏ8e5b 4#(+4%z< %W9lJ}r؊Wq)C> 7c|YQPBZ~=6/q̐h@RS !|3h tcGZ2U߸FKǝ<]AFDkʛ1W$~;5 LeeIߧ1J[X|g2FxnsNPp]9#țJx\F?wlÂAe9SAeWbD9 mtD3fVOT齜wC̜ I( M+ﬞʄsVnzAmoV통GN:Rr_ք<_HsQK ^yX8-‹~_q`鸖t< RY΁h~X|*gY3#SS5N #.]LIyYJ j Lֶ p G9ѲD7400D}| -?_Bo9M5xzҧ=:c9nGyKcn b+yje]J/F)N 7r)JL{ j0R"HUCfYRhT>l6p rJ}~:¾PBdW:m* 9E|&ljÀ] d"_qD]QTZfp^?Mx =V^`-!ow9 ,`wJsx?]fC-gtɚF2PlS[XxO_pj^V.ʣ[.?^)wɴSyehGVf^˞$|u>scgS-qԺsJQLjṅ'А> jqXla˃/^GEi-F3qc9 FO b О4LV͙?K-=/ lluɆhJPj^֌1 Gsxڐ&;gTXg>#YX'V'9&ԒXy$ 8n;2fW% V ٥Wz=nDgy.;Sk}0*̦gf+  Z״刎5|]li\:"/B תd^Μ-}WwZww2m)z -q2a0 I?  T:t,c (( AݪofBAa@ F;|=ry[ʛo$×]M) J<'*Ynxx'޺+E+x) d!ibcEBpu׭֜jkƥS "K[Oo#(rLt֤)֞rs:wzU긵7w8]VM{"Kp 5m#sj`g)SjM#Ո%L9)`sJ{GU`rώr,p@dʹ?N(YWX{lg*nNx XCm*aٜ >yI|Esmɜ2+ipP];jψ}T괪b֗3f.qIs*]0nf8>q!óu =SjfuSeLa'+KiPoy_s͜e{{R[ OBE}/beAO\nzƔv=Xzth+Fp8z@ η 21^T/@%ҡOs%{++L EnAs͞ƥ>x &P& v;'Fעč3_gsߐ(-:h=7Ʀ!킸=cB:y=߱ bZ R lj;0 f]~oC@'_f=ZB+qlLf>"č{}a`!M (|Gh1CvVs o'mxɇZBP~%7a3uӧK{'nǣp}Vx֗ [E FI,:uatp3̍qOM\SK&v;)5"F6 Al$lIc3C:# o.L\7QٮmF{x#*Iӓb ,.}󞷑g2-9 К7_ w(Mlc԰Q^6Җ sh0oyJт3'(,x{8:pĉ'eZ+o+3у1yMlOO5Prj`0\ sfl:Kn0gjtS:;L!ys:THb @0NJٚ˲sYL$חcB$Yү 2F٧+wY*1REplkɛȞv'!Cm]K<WW'րՈ*|}WV?wh״ 2U\Ú4\/AW =# #UvֵQafQ3ڋRA6VZ1G*>8/Aۊ6:gMps؈9`KKԇwnTBFz e7 QW㷧xz\{)xR_ݶ<z i,m wkƹS *ŹI}K[G&G]Uuk(HaX=›ӵU&V,GUtUT5AfJ(mYѪ^o? 2 tPyRW MtSl1&kR g["K4VHVKR6$[T޶7W7`^[3umWvPx%'I`H\CN.򃒍ٌ#t} ۅ:ɻ|ς91ecJr4C%5=5tc\"1bLkY>Fq.P|„ (`![k |,o g0ShqAd*<|k\}Zs-]lSUZD[!?qz Ⱦ ܌/ *znMl4֚RuR$Ome棊F$og|&a.80J5k# a~[3eiLoرvCMA@ zD%2l,5ڥεbGn:2HmYm8Fչ.'R+q .)yh䙞_* 開FN+pxI!r8I'-?uiu74Is,#eo%UT^sI ^6(}KHpwr).b(?-#h+T|z朚٠.+˘ Sgϻ2U74 [r\͎;᷹L1rD Η)+GBBwlUUVbш r@  00qICs_2q]w޼  oȰ*ˈdWysgAI3K& ?ޟ} ciS kM4KY;|me!ҪwD^~T1HC vY2Xs@<̱W(-QIi{? [CáCf)05ٮ=տ饓`4~4&6B_UD~/7WF^Ŭbz9͠ld7.cς][;|@|KpTGŖ 1Ua'>OIˋ ¤#Q)J󖎓P2*hJ, v)ԠwEk./xGOA5 x6V]U! ˹(pnxV`O-~+A'ii#&w+obqYNqRz7lEF"8[a{Cx^hR8y"vvPa!pA'7_,i=m3L߂Lw(T@@!-w8̻iQ8 M!I6k 7+lD'ؓې˽oɅvr;^ B3zp YFJA/ZkJHGkgٰF~Ap+%*ZߵavpH3>G}0gÕx|';ǚ֩Rg(eRάwu,h D@.>zRħ; 6vZ.b=YD=I χRsAیDdy+309cb ,sfU*rp&g R-|McDg9ĞU3@ SWa,4yl ʼ(]Ar}^M?)|t 5HHZ:jJEV<+)D<*]Ŧ-D\qyZ Y?]ۚ(4 4YI5Du%'P"p Kh@qIl= U7Όh4WEŏN[pl_HQxfn!64ef.w"Nz+Wj&Vk73 t#jwT wac.qB[b7l?O*i9SQg(F#qb3<"W_^⦣)ONzNIłhC1r'6%ko:(]:4S9=j{گ9nj70wj1$g8 Ƌn!`/aHܬ&*:ieAo;!U {VL@A T&&k,JG( ipuzфcPE"F\!r Y z/\ġȎcJ@+Ru$\s]%$#XQ/q=1т:_k5.]MIN,skNe+0 CP{HluV=xx `H8oذ&љ[^тk 3ֺaNEL}FనFn^jÏJ;p"w,:Io8>+q3̮7[3W] gង oѶ@ M RZ9ZH.{|%43yVmhUL(}l'C7:U>Ao܈:` Ժ>YX@Ő+լӂd}ڰr+@~:PHv )!MWS^ oW<֢3!mT|d猘ɌA- 6ե KAe7n]'nV%dZjQlI)\ah-|GT90/K|vA/3KFp)txjn*PbE\.*@Q'dGfc6[OUN1~Rq`IT]5Ա.)(v2bO"[;DRsSiBhGv0.\[HCXHIø@ޢMLTg<;9jL7$%Qq-(XSł3Bo_$=Bnr_r=wP(rQpZ;;BT9dKԁQT6T+V(砛 z0DM\z^VT+.",)vc Ԍ`4xYE; F*~k4ԣB8~Sgm9RP).owv s:4pt}_ӡVIƬykBmO$(]1`tgA1H s0`b~Vf6%rJp|wqG*N]Yn*EX'7%A>36O MA;kJZq}YQXy$.RL&]c=ŃJh%H[>%|I@Ӎz9\{ D*:z]΀wZUZ ȯ%EɳaZXm>LA;\Q9+c?u32a~ 0uGjH>wCoԜ -?E%pCτެzadBdGP(AjH: it /`!Z/S|k'IUf+b+TPDɪޠϭWm4ƻ8Lq_.Ma0WeINvz CЮ&c{4&Ѭ$S@a1P^43VNƧv$ҡpod'ɴةq@3Ju9!1WSeV$!7oraӧq{vC9 oN1=y!Ofҫ=DK[k'g,B V7I@B1d5ATYb=X[ j >y. . )Qy9! MlGvPW#uLw4)=Sxtё_^ŭLU|,>a٣T`;0 ;|MG]RC0bO(|]hæao9lu"0= Ek띃@`n&LSwp`c\ H-z(r  =><0߳W/PS?P%#pb|1pZU Mu[BKjK9v3"/eLK>s`wW*w, X.!g%;ͩ7yńIZ:@#yxHd%xv>CFs4$.Ƨ>!W]_yљT@Sf_݇d]pv6kd'4[MI+U[n?\ˡܸ\Vіg:o`d]j|?e"9O=~umf,CиNhp;_ 0| =0 oYO -1br5y@t ;f Bȥ(k4X?(!4N^KwkoִBRz>$t+}*dל9_sgG4ؒ4d@{iqKmn328<8#JE2ܤ!Q(p FM锳w,;E<OM%)0[w7,d6T% '8"s}=ůַ&7C釞Mgѥ&vI[ xP#SuDS\o0?,. 7@$3U]o]`; 4J}8Z,7&f]gHP|j9Kbt.-8 T\]E5{)ȤIɼPsu-U4 6hi% 5'RO!G3odOǒ _Nn^ٓ{|OKgNE~V9͸9 .1?o Egm-h|OG&X&s -jjOVJ>k᥏|b4&fxU.RbV-!szdEuPL_i]H]ٮo& 5C3,-(o Zm L-ZCNCAM{US' 5ЍC}j{׮e;hМ$[jBMOkSg5ySm|"+ t.86 ay SETSy HG%GWœ vjCڻ _ ·s< VXN` BSxQ7+]KćsZ9MOh)7CeLQn}_nes8ITZ_= _$6mIP$"L=be+S=>:guv{^Dd|(t&E!"i>MiyA2ճbt-^R5,&%xD} ;NTHWT턠cGƻڅT-5q=1=ds{Wp1">04Ɣc d>-cwGy8} / ٢鯷Ձ9d5++DlGi&ZMaw$LXTccDqC#8nՀr d%_?R~Аan$aMϖ0mWOA7|v/ϊhs oǣ'Q˜@sZ4*YpA2ĜV;{vg _PS kkX&1&Y-$糴zаDr{I )W*D$7{-gyn1/5aƫBҎ0BV|,lzp,Ίտs8Kt~rܣj8itfd 苒n7V&e *aY^8$98bӭgt'3|(%Z7o~йڷ]}qh bQɄ7'jx_MGE] joQԵ3,BF3  yMCx<or+ \1EH)WuL.o\t,A{ KXpny3 W[_t/D}C0Su}PsIW՚&`2P܂H?򞫃) qe\aT3 ,Y;Y!ixB&]nexet޻v>NPʥFedxG22I;6!>T,/n=G5EXpܽ#]z~\_ʵnaH,($}˰,I5~O~>w1`co'b7DhU>8zg wD-pe= P3 i7ͤV78kI9sMQ7CaޠnqȊxJ‹JNbw$ A?+o|>:/Q8YD}|ؠFݞv6ҎJmoT &hxeK)9A&kY>T,7#==iJP0bԜn-Ip -Z*VSg65o*2lArjis+Tn|oFc3MlK;^g9"oO_~3h'YRj#QNq1m}S꤂s;gGy{,#xgղ%H98Ng&٣u ff%oFA'S@s(RKH*hqfGՆlK,؞=%,>+k|Vd>v;E"l6mLˀfT'h<|?ZgTp 2XҏR`n롳6Z쾵w!FanFiрu ڜt(}c.gg!LmdmoleEo{KYv 󷌼$BK  D. x$3)Q0E_KJEy=ehhh7&L  k{# k ".nxi_RWp]}֋!͹>gJyL(zۖZ6-nsҭ%@ H_Ѿ(W R?^Wu!B n3ܩ0oSo pL&$ 06g8 eGg'JӎE&ʱ*a@ntsFȉ"TYCU#~\gm陹 =kg>ZI(Z#ߊ8uC0cO!lńbOvpq_$ha ’%=5\@u;ת.ns{D4p3ػH`!eēeÃ{ce`T?w0 yzR9l&iP=1|@Dq2 ]LO@')6i7,ao|K| IjƱ7(fNHZz|Ad}I6LH8n̻{N t@H_Jx1!1J X8Yȯ%%!9`Q9 zlDg'"zNȇ2`dKX' )r!'bL#BHr3L%zByFv؝wr^=@KOH\̵2`#wr]όⱊ DBBL& (3!~%IGkh0 ,b4gJ* P^ȯc t@QR>Wd';c0k Z3&L71 Ct-ܲ;z$&0'DILH>mg%mBgl'Ӭ*0sdO5ao;&%NJ-78~Gc6:nޝM<4CƖr?N#L%/"anTՓC l%l! hILP(lRʪŰyp¿BlF0dCU<K!Me#_1 (n # ]ҕO?riB&ULqNEll8I0 A=_{)D%92AU,%R'],7+oc?,߳N(FN؀|Lʞń bw0el,2#0ZQBAiP$a|^zuD> W~VLXn7"S{)AZjv2uߋ+"۰H-%2 S6U&[KzSރ_%FND=A]f˔K;%\ 0c|fzl3]6[~` $h.(mg S"cV:0Ѩ.B*e2zа~?D5 *liȒ1?l,)2ո]HrHW?qES|EtFpSLӑQ8_@BjjTo/zZ 8ńKBkj&3`:JZes "$7}9W>M"1x?)φ4aX^񦦬kK5\%(ҋPl ,0賭`^`!T'2RLyj ϻc3I ay B^dUxƵȼX:^w *>qvM0* •_[䴈9(.=r!_V+\rP;%z"$L(3,ֻems3,ްC#8fF>O AUND'&Ue8o*QEճCA^KM^ep۩zLY'0VZit58b)%n$0a.視)R=e M$3At (Nj|X $8v&H~nձ" thUzMP{N<5Jd1Γ:*: "s-c[@vOA3(6S6WW'|` pnmͦg)D>q+b[E ;NO: _ 0vA&;nI]YiDI(t7%BA^u)B-= 戒E9%GE&KLL]GǤ㚅q@ B:7֭MSp6E\J/,x~c1/9oܗ K}2o+ I>.!Q.2LY3 أJ,NìGugd<U?-Ȑ)Ÿ]/s[jB0@?ҨÎq+_ng /oN0S]:AnW,CP:-KժJe 8Vt^0*v-zX83a;kٰys@}8m -O$ pz ;jJỳ(k |gvG ۖ:&\t~%}4ĴLWgp (үe/GOGn]ڽ)t-H6eSR>vA&xD@|D@:C^*[,אHT<F+Ul I1;xѸַRJm |ͽaۤj={bʚjՀtnya0=6`οbh _n]6/V;6}vfEͷN_Gqi?x+S_vT/0 QO8`ƻ$Gl̔]՗$lsc+m K3(p(XP7n'r,؊؀Bg;ex`5޹Q1DwgrՔZߝԷ 8zIQٵT]2Cw])C5Ce0![y=LrQڄC\A79Pу.ӂ߱LY*>@y ("C=i'[4u#y zb+Ak>uh6]`b@C]z-;% קp34k2u_$Ԩ.8MOk,X: pNQC.RD w QߗduN.'Q<3}-ňBs%jPGdu $Bͼ8.A7KܩJl8v^c@V/e2#%vs妳 O9d"KWq5r"zhQ/L!/GqESLsR7zw2d;]NhK:DLJ2[Ux9Ҹ! MDX%3Y;A AUi9ArsYngHuQ1/q_]ޯFm?0a3hq&_ aҽP\9vZG"J ߺ%tl 0w-jb\Y@oi<)EFG)Fr8\3/C-:9]7AӹA^HV a"CD“`3گNd=l\+ F"(MJh%8DŸnfU+Lr*Ы/©jPl٠;-77;W~B@AuΨcwćh<)A_Ǹa8Q9:K:b[Qӑ?XюeS0([)PN;j ]/biV2₠LDD.e8/Om zLjcm? RźՌ|Ljt2˻I-UҫsZ;z3ONjNYT}'|nM^\\j #Rzm6v [bәn9s.z &S40j ;bzg{@dNhP=g2Q2 <򰸉}S (_ILlstyuzt=Wnc9 f`~D~3兾Da-9'?D\҆QK<}j;[|~e}zr"p[[+v%)KSp 1 g0<+%Dg#҂CpVRm-ŢCG)HU]>nDTMC O7kYU9U0&QsH9 K (BeAW{|=Vlrbm__Ʋ 2EX@@Ae?)=aQv|#ZY()sĎ"HϤЍf"NKKc݁W ӹѲL ڀJyyRSh vee@8rvn?EKޱm5Yߋv|F.Q?u)(XOf^4kwsCk!{0_w9 wC8_jHپ֞UCP_9g=b hط  Fj{rK/ؙi6)5ovPk&Bxqv-7'<z@?I>o:Z4w=H;0|9^>SI!bDŽN Z3^9Vvh[aYZCNrtӋ,OǢ j3#^ZxT9lJFh)yVgN;3v z0ٓ٬x `*5*Y/xIvB ؞׹* h2U܍tvIb@*eTXt5@֣tA .xb'Egme$ e,vA2%@?y,=J;oAMOlަt qN9R^ˁbǞ܈TK q? D]<}lNWȶ2|xs{} 2 ! E|k&=rg"^pGn<}DP6kf`$Q8qʦb{^@r"BK3Ogj}"RF]T#34A*>\4A,I[6 uB퀏ihCˏS 2.l/RZADɹshdlĜ9W*^2g`OM铦LܹR;AmؒݗK/Mx)拐=~dqcM呶fz1=cOh?/j ɧ%2%\κƤnΐVT>U54 Vh(諺S$'kQJ:IEI+>'/#Sf̉[bAP!ڸJMVin8OoOqY떾n*xlU*u݊{[H!&e>>8ōBxQ;x0eڲaM˪eLj)1/zq z1Y[04wjAC^ƭl rx.mtuQ-_aVX8X֓ďlu〹pT8ttg:93;tҥ& _DĎ L I@#idѧ-d:My`\`i~vT:j \f탔G(spNTBQ,@nuW'/Ѝ\5u$p ^ 0~Wvi"Qoր?'3@>&V{~hπm6;uR(f2jvrN[a 7̝]5rlofbż'BϞ~+{OX`=٥DNX^ɏN8E69_TxD}]Q+L |||Opusc5IAQG7zXX@dʛ]Nz׀ @ Lx$3;ِ@ CD~H?SP$lCn2sslSzJt#*7X_~8O4)]_8/v><6V][|lǒICAIBOmP;Snpp?#89H+ `{(a|j~!`R`l)?L4vοrXbKFçqQOv+LzJ, n ηǻNՒ;gMԍv>Q3̧+6_hiwʰqE/5K~%(F?&yuطňYJ$6XBo~{Mf=Z oZ;Z'xuo:4>LxTs&\$227r/V fgƑg6$?x[-]<,6Xe kE0VzoOEc>S4X="ܗ8g;2[V@job/Á*cշ1rOp߆YRtMEz hpFt<_KU-\GXZ;/jY 8=dьDS+,OKGΞDlv!>KDbDž5[Q-R,VqVr[D?N 囒 ,)KjWBAoiq &~1~~6|WCOћsħxz|-5yhGw̟+}F/[m,'x=3'-GLoHK k`l /ŷAI `@r.dp|W$ Y>VQCk[Ewvx*Ul\[ik Bs[$z't?rO+Nm51Vlhl&ǯmUUl۩m3$Ln] +*%imUbVUχt5Lj`f^qܰbTM)>9:msRdyMcy""bP*n"ͳMFI%>E6zr/|R 3NRݘ^y}jw')8aR=%$Nva%+#br,fz/yi[ٰ=w* SE_ZgA1r~q',wB>HȲc TF?D?fms|^60$SbC-_X-W ˀB{jvyӘepj5¢n!OMpg/[Չqmk'XXqm: i,7񘵫c(ӍD T\oK@` hW(Xp`;IF@GXq7FZ`45U:8r^(a q 6dPIҶ?.Wx.Le&0cjj|cvZ' +i9msj 0C&a éSa: TXl E7dq-:pp#*Rw;6Ιt=haְ#D뱗jbh* |b&7җ^5?7؄3$w+qKO\妰[) KHM6 fl_1rnK{M*mLsh*Y/P4w8|Ja8,}15ΩN28 %yw᪋)=k%̭}* HU2!OxvnM*q.V> SڷF@g TOi1;?Go4>M&E9S \NAS'Ѱz=s׻V83L:'R M"XbDRnJѼtNtGS+7 bOJ"VU i_|!mf(VN ieҗ,^fkWm0y6(VRn[k*k/yw6Jnj"N{QATjyx5] Hq:HqזVj]=Obhz>𖲦 >7S֞K ؗ= 3Od-Nh`` sB$(lb;E(r^r0LcMHxxq/7Kye}di8ơ8cY]ٷ;q3Sﺩ& > f RD נ8n =A?-<+y)i!1PHdiH[9+$Mȴ؟Tz TU1{jήsEZEb KlmDm5ba4 C5.Zt%n_5*jq9^M-֋R>?]-xa)yJR{)[\&{K@ _li{!C9Ald]_*0#m^q/ګUpvޜ1/wqq (Mjި3;g6?8uTo:gG:{O*xVTyϊ[,r-) vlJK hR&NWQ'jA1$O]NR#<=@ vX4 r>1\B ;9ンˍJtJSkFGy ϵ6qmK.no&ܴϐTZ~kxeS}1bO쯎W];}X+f`5jp\$ZM]w{&E怑[@P˘oyDMX2Q"!UO/33C.XwG\6Y%fg Aх,1H3]VߜͤLߛWo;1y*N 3A`X Ru*T(Q{M|3*fƱHA@P[UC MiDZ: K Mچxb o$6މ=fK?x(^YrAl+Wgy/"fX>*wz^Guݔh83=aty(/V\=nk lXQ.ޘhzi 2OHh?$B oZ K X$.kޅ)Z3Θ|K6>{{.:Mha,:^ݶK0i_sɹ?[Nr #h0%s%^scX(-;a8M3M$ p8RokɷH%4ڜ]GeF5) ϰX_IDEs,v&|Z6Ҭc(Iۡ30x`H9OI#{!&EH|c蚞08޼nB;bt&kqD0\c zpÚ"6)Se@qqҘ$Ҽ{|Mӻ$8J%;r4|-Oⱒ PT]r'LK(r8Ĭ{uNMaDy5Bp95q L>G`5 3$Nl}ntG^ڪH_Q~W@JxbBrb*ְi 0B2ݭM. 1Ͳs I-[&5L皉Rۛ81#I%߄NRdU[GB2'!fNJ A1[n +!8mVTkөᥴٗl QPv.Xx ^ޙGLr$!7 ' ^b5bٰI{+Y̫J|>Z(Y2C|*a2[]3ZL`m>`¡zF gCxc'IүA|2n!hŀssb#/B&:7)t0f/Tz91"gsbkkd qf~ϤәlBHaZyx@Pu !I3v/mG_:"uF a/ D%KN\{-!-=D mhZC,́轰l Nl0Χ{!Md=Hܖc| (bv د+fbbx=)=оΥ=(+ۄ\+j}pBq9L 1 8\a|+9pLE08Kq1uƶU=57&O;E 0)Јc$o02w`KθZiToI^[j&/Qʲ^֣&ԁQjWgW:kB`{lYe Ҕ+ijhFd|N\Rtf ?){à F$ƃqu"@S9y 41\Ld+g[%wu\`ayDg) ֿk/Ý_ ]Vm le;o8o4m:ؿQv5?"@J|x8'o}w=55U 3F?fÁth|e UQvoBg(*witCV;[mtͫZ:X5"m@v1ֲ:z^ b 8p+6/緼.<Xmmi"]h0my7@^C% .^ lƝ~<,/;jiO}0Cj:%Pp*dū/,|.V*5߃qЕ`ش~QToM6xKFci$ 0KnPr!6`h"R) JclH .$:W͠&ΏY0s56g,nMѝ#&]^/7-Br3;ɶ%[UDEXCaI6 ݖda- =5C!6fB*Bp2^AmOdo؈=H$#+Etqn1Eva'xD٣S i sH}yi#(it^uPz.9+W Hh,z(8uw%⮮ĀQ)aIǬ xssn]cn԰[aYֹ!ļ7RXGsf610Gp6D uʐ;?.4[h#c=ȣc7%g&2< [BC͒(^ we֤osbxcgϧИ|oo|R I@ߤqHA5@3y&g]N c~o3cqĚ\0PNK;x`Z&2~. h?Ǥum[UɿU$D|c8(Zog:ܻ(;,vnЊ*9|{e}z|ױ ;K6>Jț؉DOzAnaA+QZt 5Ar}RaTvq,ZL粲DkU#89Ξyʜ`45|Ɣ7׺vC39^a:t!v+ A9x[( Y#USnY+L[nX)! i3҄!8:jc<*B{O栗/f n?Q}3&y`@--79|/`V(nE,_㷨7nvcylXhy*tHs}Py/Y6aQkJ溨ʷm=8T_*n3im5#EFsr}uI&mY^.a!C5l. 5pV9Hu<qlТ`j[ϑ/ O,wu -g-k.^wGFqܦ0v/ւA&e`-YrE3܍i'*ea9: x>1j> wV V +wWs'ٽtỈVBNX"Jo4:`UGr{ ]`rq,A\Fx3ם&YS/óclW8$mԴ> h%=Q: )3 {uڢrb,[o\L1fLRXP"c)*f)WVWWZ 9v ̀à% ;3=bђLCcHJ Cq|E}%UT5;Oh>AÇe8ĂiH˲7;U cuަ}~g!h-_mUj!/qb.T<6#㳾HFXikx,tٖ5cM&˲ĚO6rvg4 KwI(z1?(_B|Zxc' #'}61̝t뽴o؇#0N,[ʛ_~`/UD޳r2~D;h(2 /2,N snW4yt#&?mU+걠-&n١1$G*j$>T+sR{YsW2'5*dnrf ZכqSP7M(dc<D) W{xbb/XYip7hRF0*ͬ,:DvGrIVYrsw=˷҇ 6,RM*nY+D l$oIa:²JT yk>/C߭Rз7>ddffRߵVjZHZފǕ{'޶3! gr-VȀo]~S?/uU՗(p'4]8`aiGd63 0F E9,d@r4̠MڶW=Xy\t"%x7\HCjgz9o9!Dtz]Iq=K(7 1y`c$–@g,Vc |Yɫ"nř-sQ[9*,')5A{#patZO=p`KN|'w|57)#JMjE:T$?e~*\t8^ٕ?g8SR@n7+cp:z<yg#K_ %L;nd68G \ "QA^6DkEnTKֶ$f8GAuj'zda']w3pd5/h:`j _,4Y 9!$HSlqa4*qϩl%e4Y3!JoOjמjupWL*(k+M9 Rq |'}uvKݙR?2XLyFw~[xrFmwk^cyL:@*Ind~`#U-e3=8ႂMuDbs@](X@CYP;>2{ |M N4! ~k+3/T_RGuܵHB!zzܰ Hu"0>@ʘib@h~I2upA#vI(%AfCU0y\^JR:k\T DѼN^^1? Ͳ*CdC ΆҲP8'T1=岘`MI@Ij`J'l }6a}cѕM4[YkUkx-l$:F/(>M-7-ciރ(9@RfJVMo{2O,>5-sDQ%#?RA> z|4"XE ̖@φx$^[apv 52V7~PzDXNq{,H8Pٱ-OSJnz`9;qW{3ҋGo({,v A(/lԲa&6d0o)J4a5:qUu& lzo-ѣZB/7&8W]NLeHi QH=}b@mҼRHY5#qnk.޵[(L[&)p]9~O*LsCw~7IHlp+x& k ltԪ" @ku`$Mlt9SW1 %Ax"𵈢Pa;#o0cࣘvvlkjeߵ 9ӭ'). l5>^ ޙ}xij04%!λ؄-7 Bx\^~m[:0 5.첕)V9:{n*)}Pr7D"OȈn7&&TӽcAZ-7) rV>8bEi"HH!AYi,. D*?/CHa`3g(y\s\WP(H? VrL u(~4<#&͛Jk곯Y1諅o ]U$W\3Ź6KYh11!{ؿf$E\&A^8G_}ҲVHdY[C!P/IT1:qMT ]IK*=:h$j\x|!v}uk&d7 -JF"yk(2))T}~eɆ9Sy1nܫ0>A3TTg#tervF+Jq5qm0`->'P6$N$X0Q_K\Nk`Ӿ4w=`㖘T3 ڙ2 =xHL2 (35 v8,>x_߫ g{ybx`'mgO^?Y|?*vZs"CDWb>tX//lJoĭ\x'v2DT'۰,Z`b*:擙NtɓL7BFy^x1F1[2,Pm9vtrj@,ԝaXٙHw#DH@3%WIV&j9iK~9#f;-P,-ǬH01e^POv_'+C\ɜMj-Gatu?眄e6_;݅Gq?G$BWevm8⅄N9Q]L3#.w=n{00/%mE}f@$͛| c;Hg<](@RfcK¾!Kl?nW43Q$΁' "s2~6C@,w+H]>>dS ѪC:"fZ,i_b2;GN\hh&MRaT+&E(P^}'M\~e^>oU2KNn]O?Z +ㄔS$eHE/W(wmkx(S(r JhvyRJ }9bnn"rIp'0"zҮҳW6cTK,NaqvuҌϰfAKH4$"4 RNFbH3$,)w+PoC䠘켆%t]9_?DɁ|/x]-"[gfVCZx֬&'#>b{ C>xvAa#*`ߥʽ}.m $3Z7JT6aׅp頿Yc>4(t| R'Zܻ%lͽ!!nW&}!7dBlZ( r[ 'PqQaE` w?͹@9KԺHK=۹B7ɕ +L`,A7UCW"*Z\ju&+Z.j%rSN|sk@G5HFF oj2 ٘eSGV$0PbZțًiԱп8S- ƊXtKnw0lEFJ)[ʛX^Y.Q̕5i\IuS8f5)>|>ث ݤd싞~m 3Hr<GBPS0` 2(r(8}N ,.iONFdgic]?c /Z}ҿުoϠQ zh7$57n$yjk+ⲇ#*p~P;#Ò0ml.Eb[}Ϻj/rq3JݚfU$=oߚ Hj6gNMÃ~L`H4Ww;4dz?Hˆ I/n,ߖvG,hO5e@$[x}'|̪!*O::~ s1yp9p2.";!qdϳ24ϭ#Sa Y RjP ɠ!0DW;^gBca8E{qCHLav5 ZoiP4۴zZ[p!=izvةKԽ ?.=mrj:Q\~I6쩔뢏8mekL50$` L>k*궱@|TP(JF B8_Kb;9L}fE}aP\Vg\t~_5/PɄ|I@ :j0ڨ8Ea+ԨE#8$"1(:L?k 7cwdoNre?}y vFДo`3 $m|c Qi45]-t u`8x Q;b~oS OIJ6xd(Bn U3,B*sI[9IXW. Elu HSIl` D=BQtD<YnqkG6蓲ow0yEf+: s1&˻ 2;H܏t4/120d\}Ȯ?STs'v.n&bMHERQ{ܕ_"DŽ.bnũavz[C)״"J!fl0kF=üj]3Rړ=.tcj_m"_ٰvõrΠ oErT1DGgP[s]w@˂Xv͌GAk7{T;RvR"ܲ nMz#':zvjgHh*-_Uh-˸V{Ld?їX *̕ .sH9w]g1Ck3o.ߎ\X>$߃ɿul΄b.vu%Ւ uBvРklW\4%~~@|A#/joX1a:0<"ˢd`>Jq[W_Q>#zx} OD#8Bl&G}`vKr㎊LtX"NTɤvƯ3/g& y`^?W6&g61ԂeL#ŜNfz'flҌ.++zwx.,ye8_\LL /іUs*Sãv |e:2˻ 4v2\!ڬ;d\8z%?֨A:/V˄PKB78X8 Xm A**3[f˳mtEYX >^]PĘ6fAAv&ZQQܻ9t.1h+4 ߠdk4bPm|O䏺>ZuS)>u\AH-Oɞi/w­{ï*Zl@&f6[Ytn@.?PG;[ѥoS*> N9]ʉG;;bU6YzLS6r>ﮉb|EQ+ć>u8l5q=TiN砶]Ed8= bh)qVob+0=]"N_saa3~j$R:;9M<hM1:pirwIVYzU71GBdH5XD0Evk'yT19Neҵ.}T)Ɏ_+裚{Ohk_fA,#h[tc 2ѾϻՒ X4bȮ[T__'<< \ b*2h)dK`^ Ps 9iڷ81 tBpeu_2Iޠj\_G<nwLiWWf)RQ=g0=4 Suʌ|>90gI г+.Pncvc\Ϲ:!-Ƶn?'wl,V-5 Nr.If3uxg' fov\-ГPVOfv]3n_"k/0ٲ8<;HᯃW,"& A{PQo%\|G)R{Hl-0h=0g>d1!Z#~d2CEg㢵[KB-xS@,kX_fw_-B\H`pqS͏>q_g$G^n ח7( (VK)[8ubd7dY -!` 4{#WOjR!\GMW{*BL.`ɏ :aDO> LȓKm=i5ȚAʫ/ăPQ:m#oJ=[zZjmngr{;Ь@ݙ7Y*b j4BUtq[QٔCdslHCTlIzث?ZV읧+!Rn|o\=3<W㴽HF^pCڏӳJ>M-h01mHl `{o/!˥5.` r06WwhC֋h|iyeO쐌0LH2W&aY mg2tՂAtgpLdJK`DB%H껢 hc3D>Ї~I -5B$\c&=&I1,TQP9A3mk[XCJ^E7 uA:ϛܥ0ң O(ګ8N紤0nCESi&}mgSr2Zʼũ LƧ~OmGɧ@m/J9?B<8kRQ($FOI{ sGx_\'w5LHEu2 K`͜PrU\j[RLK`ʭqQ&j1 S*3O}fjb^[q|ʅJVӜ ny}z>%<:ȇ_.L4RŠdbF5p:sHV[è]ti9]872j02,Y&H-~ݰùId+W![H$FsL@8@8aB.В+`7A7ea# \֋QcCZ3r}/)ai}OY+Ν:9uFWj?>NFKo=Ea_戵s}5$lj\rlaCuYv}?="mDhޘ88|O p"p\Ӝ; jfKHHisAmmx Nl2IA>Ht?q \o X<؇ ,}*ݡ`K<@ıR!1(R0zᬹ_MLXaSrɽ|rBS"zP µS0n{gV9M&vU" Hr=?wmibe%зI9Y6KwCb,jz[WV$_8/}(s$l.xCԚSx}Cw!LNRſxl NQDN~m߳^}/nN߼c{E:KΦo^a(r['13`4\C 8 rE7m:lQ/voV'ѷL|ܳzСrڰ5@k\F+| V#sR%KN:p-rh _Ne_*9u qI.ņ]7LًIjŜ(;yUm xNU$H؄ރ(EѱqUSdLQϭ!ЀQwbIS'/#9&N|PMQMmGTp.xa86_x -^#,MBb< ~i,Y"%6% l7*.o5(q/V|c| Ԧ aǜ$7t^g>P-Ksrj4mIyxh9Vq!x6,K?b Dyt%;,w#t2(x<2-% "S+@i_[>l ~ͬ`wYcjrF0u6+^`"BnF CY1{Q0&kVGj尒@/lS3#w_]<#!BY;VoLBweT)O1},2kt%ҷyQ;wئI$6;ȚB,4aP~lܟYU M>m%dbSKN z!ѲG"`d}?#?PE@Al'~}yBCU eʗø3!鑗ĐVB&}LoFIWk%qHoނI %P KTQVغ&IJW5G~%Уx6wͤ-Q[qƲ+{JφIXyuKO?ކG' 0ћYzS8l\h_'wOJ Q$ea۽yG2[ rV@RP;-6UΊ=m1-H[ ǗH`U>vGS5^>Hf4F" H5tdd|:/*5Ń#,r:x'6}(LJ԰zʎlRθSD yl~couf. &;FO꼿r? úz 8v1@HqRi4O|WOxmC҆ex^8ΞOղTA oZF)GK7;4)|vF7R.I4y,E![E38vHmt}6A~GRXa"VmͶ-F{]b[[R6ɻUqnӨRcV`J;_\4;v^BZ Wd?en[}c [zPhͥ  BaZݶjH>GHFK Cљ=-].JꈵԻ ;5>p9Φ g]Խ _ŠUA~IF.NS.1kd3E)Yqw\3:y-$kaBʀo!b6? [PHߢZ z2B@%y'B@y?jG$*@'S4#"}@at:zDxiBf1 {Ȃb]XPTR,kHF Q~ iSrX 7 $FTJhns ,}qh 8{.zcQ<Ӿޗ$5+CmP6ueiiy;^6&!n,TSퟆ^9 VAТg>ZgD3(p.b)\5驹*\ Z^ )b'{흤rq |m=x׉ѫ;0Tu@ )x@]V Px yW,*J0W-2vݪ{K.rH- [>cՖ