#!/usr/bin/env bash # # Copyright (C) 2011-2019 Intel Corporation. All rights reserved. # # Redistribution and use in source and binary forms, with or without # modification, are permitted provided that the following conditions # are met: # # * Redistributions of source code must retain the above copyright # notice, this list of conditions and the following disclaimer. # * Redistributions in binary form must reproduce the above copyright # notice, this list of conditions and the following disclaimer in # the documentation and/or other materials provided with the # distribution. # * Neither the name of Intel Corporation nor the names of its # contributors may be used to endorse or promote products derived # from this software without specific prior written permission. # # THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS # "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT # LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR # A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT # OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, # SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT # LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, # DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY # THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT # (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE # OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. # # set -e PKG_NAME="Intel SGX Driver" if test $(id -u) -ne 0; then echo "Root privilege is required to install $PKG_NAME." exit 4 fi # Check if dkms is installed. dkms --version &> /dev/null || { echo "Package dkms is required. Try to install dkms first." exit 4 } # Check if the kernel module is in use. /sbin/modinfo intel_sgx &> /dev/null && { /sbin/modprobe -r intel_sgx || { echo "$PKG_NAME can't be reinstalled because the kernel module is in use." exit 4 } } DRIVER_INSTALL_PATH=/opt/intel/sgxdriver [[ -x $DRIVER_INSTALL_PATH/uninstall.sh ]] && $DRIVER_INSTALL_PATH/uninstall.sh &> /dev/null PATH=/usr/bin:/bin umask 022 DRIVERPKG=`mktemp -t sgx-driver-pkg.XXXXXX` DRIVER_TEMP_FOLDER=`mktemp -d sgx-driver-XXXXXX -p /tmp` trap "rm -fr $DRIVERPKG $DRIVER_TEMP_FOLDER 2>/dev/null; /bin/sed -i '/^intel_sgx$/d' /etc/modules; exit 3" HUP INT QUIT TERM EXIT # The number of lines in this script (plus 1). Using this number to # calculate the start address of the payload. NR_SCRIPT_LINES=118 # Run /usr/bin/md5sum on the binary payload to get the MD5 check sum. CHKSUM=6b5832f27237077ea61557e592fbbee0 # Get the install payload from this shell script. echo -n "Unpacking $PKG_NAME ..." tail -n +$NR_SCRIPT_LINES "$0" > $DRIVERPKG echo " done." echo -n "Verifying the integrity of the install package ..." if test $(md5sum $DRIVERPKG | awk '{print $1}') != $CHKSUM; then echo " The install package appears to be corrupted." exit 1 fi echo " done." echo "Installing $PKG_NAME ..." tar zxf $DRIVERPKG -C $DRIVER_TEMP_FOLDER >/dev/null 2>&1 retcode=$? # Save the return code # Clean-up the temporary tarball. rm -f $DRIVERPKG 2>/dev/null if test $retcode -ne 0; then echo " failed." exit 2 fi pushd $DRIVER_TEMP_FOLDER if [ ! -f package/dkms.conf ]; then echo "File dkms.conf does not exist." exit 1 fi source scripts/installConfig make install popd ${SGX_PACKAGES_PATH}/${DRIVER_PKG_NAME}/scripts/install.sh rm -fr ${DRIVER_TEMP_FOLDER} trap - EXIT exit 0 "`enOZ&=0K8:bF2*XOTE6&tl-8 "&u2fD^a8Y,NoN2y0K8[d)*{/8 s-, ˖< {YBMxq> bRpE4~!X7`F XL/l: `ɓhDP > zɣB;y0$Bs @MGޒ#f;j3HA*P C8lؔ"A1o9 ഌS$@}@QAðdgT eL | W$MI @qo,9+a G3{= ; =v1ہk[cwh;/kBC=3F8lh3vԷkNYnܳ  `uk06h݅lxnM{_Koi+nWCldخ h YNoXf0]̹1mZ"<˾=6.Ҕ?ubpٵxbE:濎a qk\g9mv8KǵܱkGwL5XƎ נ &ر{5m{y ^u5rZVП 槿zもԏU SCј ~lVmWV}>!čZQOl-@){9k&g)%6`իC~YW'ReȷnVՎOggԻkoZ>ծGf!4Qg,h1PՌ0y\=~Y: +)k3(Ϛ֞z+^/51ĹT_@cP%&?qYqqt !vKWy-k2"+8d' A:45 ̋-:5Z'd1sͣ?R@w>kzY @Hdjs'vxjTC5 Nl˜qv'֜tmӀ|߫x-k ̓jJ)'CX??GCK`[{zOÐ@fapT9 *_ dO-jj\4K*4]G*iaQ&i`@*tLD_G>ҴҔCG2E؛x> yjcAyQ.u(EOet*AbrQh2zg_%WET̾ϩZhm,$=TC~9o4ʬYWБ;Q:"_Xe;$G)#gK:NQN ? M$eh> 6_G3y7N7XDh5i*Ebc0)r4/x-xSeAp2;n ->Cisb}|aš5xkqhp#G W&\cWR*#X 20l . Xw\YB'`4x 4MtƷ4(eeZ1xL>lT+RuJ)Oj?C$g4)#T\c1oN byHa,A&%$K&N, dJ|s6&/zd#Fj 38C&>0|*vM4ⵠbRGH& y 7Yu9) ^:)*Am,Ja$Ps]Mr̕'eIW@_ BoJSDSf*aW -1=ȟU_G5Fb a}Q{TjR"d %7BZ18?(U2734ijZ6o@ݘe".dP znvOU2N՟T:H~{tz|^(7D(^.e½O T!F~6"ߕ,m(0x#/'\*+cwP`;:4~ Gؖh1@Pd[@R.C>{5T}B`Xب{yh.*VҕU-.]<&/zm!漆)bF'婏MNr Y>ϔ=/xǎ_;FZSg근3םOsg9>?UX7<Τ5F$_eкL&ZY'xk߃z;֮+S=uR+;w줎OC!wt]>wi}>~N0i.IX0b *@0 JW0']O@6x]>yPkc|WT[gv'<ݍn{b6難ù9*Y(y/Z_/ʨ_b{ov:=?y/gy5NvՂ 8/GF) PW "G~e$>}U`d{PL {S=3vCgHBk^ޏhM5 W[m\nԡuUe,\t!rO<9 kB)?O,v."  ]zSvWD'O@5+: ǻQXӛh.ꎀ8m11]<0ݷ'Nswt{t6xAj "LJNLt?JU"c`|+4 7Ń|1qτݱ-YG(,ZԍN#k7$SVGJѪ%5'j5.4|qyC= Ax!N뜼n7A6޸?v&o&뜟23C=ДAKa9NflH7bS^ Hd봣sP_ X fQKn 0 8B??N Wt qwD(Ќd^~RORJ \A)^Zn+ &6ރЋV=30V}{ 0RJ Y.l.gveg$B?_@t _ ?p]pT79|`p~g^'8 ݫgnHygׂFgP̡xU:\TX"ʬКQEE'#HC$8^ggKz  *?vSIfe ?ffƋ[݃oTI)ThgoN$%3|Y& un&{T%! .h>[Ug O&v/ytkٵ2Fpo "@C5@(BY>hu=dUiQ!ܛy߅%tWE y$aNm[z[4(t5>O?* 9c 4P @݇%lY¬̊>PKE;8 VQxکZ|sA&<yN:Yz%ߠ4ݮ`x@1T"M7gLEț"av~&CJ\ R),^n^\!]?*w2)ۜl(l~IfP yz>R n}{܀5h?dLtp,Z}, #YԟN@<1UIfr1u`e-zuVۀI k&{mx]qY_;aASiUUYvQ9r$<حv z/(e)ై<4jqnX]D]#$gaT)mBĆB4(eVdzˎ#fW L9'g= y7Œ>۟o3 62B4kle.%gl.9e" %C,JJ7:gN]Rx CC-di2{?z f1Z6Dx'퐒VU XȽ6J<Ҏ</Ww7R*ԚezO r10pb2,ۊzƕ)9=ca.U ;ߊ JIrL辎 ;%\ЋgC`u(4聭`@b˭u&nc5?iN:[_SnC~smr !!KUae"d-ˮ$S)+? 2(81e7OW>m ?Ȩ;NSTZt(iO홡A a7Z-Ѷ2t4}Ncs6hQ0>_ϛhG&,;a r#FӖl'^{>Ǩd 5_j  J;㷐WЄdsU;Spk ctIwS;!08TPWdCw1b,q97+sIf9&IQbc,3YoHmaK.һ]ClТ~")qEh1,8""y9㫦G^H]i}7FSiR&Sd,kHm-|z .߫i[.M/2#Bdqxϋ\[=G| #govugٓgyr(>=&MAƎޏv<quB/% 8_]ޢbl;'K)FjGR'VCQ_szkj,K 15S #/N" ;kA3SM|0V+GAwr Χj@MF /-V} ‡A /h݋7*7.R5ژؠ) eh 9ZNi/aT;nMPW|7I@WQ[X&p<;v~p@wkŶo EȒF-w8D7quSV"D-`naW8Hp8iUwmN-51H~F'&6Qk%o(YDuFS߲O Eq'&"h;KTGI a+Sqy[~w1/SJ~8xK PERTcNR];H4 h|lBHH'K1\H :>4xL{V`W$QB;6Vތ{mzY'&*"&9ɤDʮfI}Dnv0lQy\ԑIi0PFF[rj\ CD.TJFg-}ȖU5@}DI9{{0䓦I/fOY^ߜ=q$D-Ew?}.ot%h,Rkrh,.Jl=tJ39 ] #>mwq[o:دI#:b=ݗC;PS_]& ↥5 6Ŵv{4]7O{5O{[gs_#'5D9~~Sm)\fWJEv>x#`iX2'@k`'zLch4X3pzYHomDj?\v9oYh2#r?3˭y\|Pȅ~,&0U]('pN}V2R mfSgK'eF+"^`cNs~px$[۬XicvY|?M< M}x&n;ZOƱM9 gNQR25\ȟWcFC 0K?2(5 muMy &<OO#OCc*=0cЩx4*1I(9۠3,.5!hf1,|K)5}tk3Gg Z( dE(VDGzQ;Kں>N 9u)Ko6ӹvs-t݃ !ٻ\zw0 AnX_Om\n|66I⽰TdV?vCԐT!NtdnRҎv{8rm M۪*Ȣ)Vl |V^5j'Y/5`+6)Do(改m5p ?u jvRذ+[釨@7qRZa+[ֿeFU<Z_ݦ")1wN21* sA8{7D51kb)u{3Z@jdcRSgczT,_D8560v_"YVJ!3Akl]vmyF& 釲 cS,4 #x@8J.5vcs+msZb+͎*F>F3$Ӽ(BBJY6-kF߷28@{'{p6T"N~t㤔m8,'M,g'H{ Ň&ҜjmLӝQZt'SkA' !Jq=1:):IW)meTc"?*hyb,rʑz;NBn_RRFu$azN;Rg.8$͡*ܓ SwxZ) -hT]lvO5p4ia 'ߕ`UA7]FTf{@.›7L$-n'C(HgtMRH3lioRJoP͏A4Y+_kh}uc#!ӎa9N_tr|M{>IYJIƀjo"Np ^3r TJ׋ RNp(= S AzCB.|W=>g%Ggo$d%=dL ZN)kUW\~~9g%uuص6KgֻQ4wT|R]W~C67cgz`ߟ^RCwmk~+ݬc4N bӆeO\\HO@:f V%HM?=l7'xrx3NjTQ2C}UxvD#u6t*G߻H/PXEދI`!~+q7dKzNOj=}#/(ٕѵDpLQރyj^9 Y(^1KZ۔.LW^6~6"OސDpq,gK)Zk)}ME a Yl~TZ[%kG܏xNZWW;uҔRF@[O9:m.6k{j7NSE)^Pc0@RڋLeO^1$GӸ5Un* λDiN;8ŖfvωJx;E~D9H5dBnS?Ha_MUܽ aVpBҸTBɔ#|OK}:}Ud0-B^.ѥ ;t krHF5Pt3D1& C_dhzJw>ܒᇵa:] fgmO4σt.ܝn c_{1S,xĜI^ل^Yv^hN yN3>f883;EG.A%ƿ uw~Hfڻ:ؑ/=~ۺ3- ; i:PMB{vɶ_cKK^6@sGnԳqD%&xYgm yE.s]c.kh>g<X .F01ė#N`EMuȭpo|v#8p ]8F8/ ?|,s^TeX0PÐL8SÒ&9h  ÙNۡ<"=lgLc0Jߝ)~3:}0̠}':VaY7nS{9r/ YAr (Az@){l6l7źH)coC#=evU)9 C˜ QRxuB5㸭P֥,.![Tv[#8{TsGW; c]~RjUQIuV٩58u'a?-i|'uF^klp2`Tm6N'MgP]>CV_7p34r-T\M,& lYf3l(}'arf}h^klq\%heTa=4ESQi9$} i/ E~xUc?w%-Kb~7CSje <-o"Hd%}O-Y'pñe`ec;oj;?6])k%!?@ pfsْ1 {Ygx);}ʅڞٲgL#D)C-UOĖzbV vTԁh;(7sdUҏ&j'׉P>=u0_Q:XWG?B%!RO0gSBľ_[bL{L+IK\;sI kg&s<rIe~;4?\;5#:Ũ]ۮjDa;ar ! fcD8sD~9I!2=\[v..Xt{.qƔ=kD.`p oi/=fj5ÎI :jBZ{V"Hk23SdMKT%!Q/B|wy~bY$e4^0|]H L "@x+Ź_Wpn4Θ%b)C2$6a3+z,$kRX ?,\4(Q?/qbULg@&K4NuŲP)Q_O_ 1Cݣսk(S-z}.?6`1E:B `6uut ]^a]~2tq.-)ƢcrJ)u[QOBq[/1Mwѣ .8.<]?Y`x fLv])WEwW kL.Hj%%ח;cs1FLπtS̐G4ͰR๝vR/1p/ h\1MMI:<]B SdP5c Jzeoղ1eF%ϑO`0n#f̀pjn ];ЌM؍5%Ճ5t^] R9x3lSJmk <̫4w3VcBc$S@44cAi# d. B (2'UC˽&1J]NCYp 1qohN KA=Tk.x92/e%a1٦R&&H!TS2O5D <'.RCq*/}gƶ} Sęgl < AP{茻6a{ h A Z)%~>=p pE/\q3,; &sgDyZ[֐N)n Pһ(SEoPTDuV*Gz3.j{~؞co\r) @㯮|ijĴ(r1T7/9(f={C)ջYĖϣq!RWd_:'wS*%}4A3xFO/7 >(17N{Q{ѷ0B*pnAjs`wXC[W ] iXg:#pgmP!`}4</i5>Xgqܗ><s¿'8^ZCfLEC 8E'0`M`1)胷u[T<7e97- 7ӷ9TnJ)tc9AlTu,T]%j.(X9d}b!?`hbFV#f+]MⰔi.χS0h+MHƶS+!QUqSpV՛?93Mq7p X&SOl‡YLJZ ϰ^?M> %j'A%-WX@)h@R<BY8XrKbm>鉹Tj#N.F,]"gKN2~$LwZЕ '΢t䷍dBȢaMw)ʩ}kݵ4 wdz6pФ~7J \O}C~>;O&O#Jdj0 BKz8 OR }ΜTYO*0.as<`c));ߵNjR1>=忞_/w~俟GU{?NF9e'.%)mNc$ A8}UθW ,)gutM"T@b+Iq ݧwwGJ/(Uh.KU'P :ih6܂M8c/0&5kz*5J}TRx҇" `P0I%uJCCA/~vI ;rK*\TDCA[d`"P2pDFӡvݍ $«kbtz 8JD9dQxBq"%hdz]ƾ5LU *J:6V MH@ԷkIbk0[}@p*)7֊&?ڝsSib:Eb641si0W<1B:}-j](g:TK,ŘaXe)\69P#4\q|rw!K8XSD5xO:ȕD~u#Ef$^fpR0 L&:[opD:t.K2k7S[)bo0[nkMS\6nKwd:ꈅA7NJ] vb('"4H0s )UβN¾"RR&_ =61c]&3kBj9qZ)i#\uwgNkt.]k̙AIY8 +U1yv3.suc~y֏$;s*qE?!B"]A tmڥpD.'?aGsvQUH64 L㻗f1oR:k%m\_ 6?:#\%sa;2J.M2 퀜5=g${Tl!-rvlq*u ?cvHALAti}ou_~g%"7n4:99JN4ڐHGCi?t4`,SIϥxző,-$GN5>ea ,Mc.]Š^AE2L3=AjƠ/0b2SpHS4 #1<+M%] JP ;V+5n?C"i07''t}?H=wgZ ]A.( Uzq;8i,JKsݍ x|.{ʰ@5j; 3S@ 5Uwˆ`00ɰG帼ϗc ZqQ;~[KM[9 2 g%{9vfa ;z`L^Kٓ?s[ oJ&+tZ5; mЩNd 6.- G Xȋ1vdT.4oY"xǛ/' =jc!vMhȏ󣯑KDkDgf70_K,Y!: 9SNR{VLA)K-QUp;4cշ54'h %[ğ%$$*sM6 ~.t~d&UlY[BY>_Zj)OL>\@^QF]yq5 :lH5R0, ۅaҒgQkû>x[5@k+ up6]RI8WU9q$`n*F_[oCdrotؐE5F\ A lD2l;Tn_>(kSDP-0E\2fGh.odIEHb_Uv/GL-I`Ow`ǰ `Rs:"r*IեYU$UH6 Ӑ0_uD#c%ҲS)$nRk&;0Z:>35Dj@+<8(D>Uj8şa= X0Ek_Dm .u;:!K鼢No3b>x;*b[u4  Q2o6B@T[ּ$<2v_oPTKҗc~f\!NH5F:g_ȚuoL :r9J/ 4܅ځٓ5A/da6}欋h|j}9jkbv@/S&2 s 1ӯ!lsiE3qS D&˨ɦB>(J[㛸TS0j3Aa/vJw"qjdDCI\#fVkYp_&kRnZjG_*O~,\9<#O;lrcIȟ Ɂm(օ?z(qkt3)=b'a, N;-+y#!1̤ SǓrf4[:G;=d".s$6:,Ӟ e`0?\| KlZsid~Q"vقL=ӻ"gkݨ~G| Y<|3*OGq&/c s6@.ov-bJ#?ZQ.Ȍuwއg%8*5E+D A鷁4*Jvѹ`24TTЉ2bQeLu EVPT~ п4{ݡ47z˪&bƪP;)/oPcuX(/wZc-J1Q c![Qp=3U8& zCQ=8!+j>؏I/NlcZ663XX1MfPF϶p\kTO?7dz'ʌJDRƢY?\[|'֚M YlceSqKK( >mlw3+ >^~'V֢H6b(~Q=^/p_o4)kmWh5·>_UsGz87\Y0]Uv y,눴sDʕ W{=ĦOzBx| )@DTK/>{.o"czZĢbvtU~ `Mj= D"od\g-l G\$e%E/1{v;6aGU|`x罒$;bCoОt'cXhYM[k7,Ώ M7Y~b^Ufo-{w7jÂ?"S|aڻHYFӄmYL1 k(M 8Wm8qQyo",|㤆Dm e0TFio(8o+i7ZA+Kav:V999ľ ٥}+RpJ.-Ͷ/3ml  >δCh^=a0TH0B,_Q0eI90)n%5b=Zz|mTP]?ϕJcՂ\2t6kok':Q81u&8ejثՎVu>d/T?/]<$!nۄZ֯M4E|q^XGk? ѕ~agcY@b^}SwDHFN=e {Sk/mBzN5|>6Ļfl>a;}Lλ ?)d: 6Pt9ay0C9j6\~?Kkm4tZ %&c|#:M ). {_tW*hgR3hԏz*IV'bAJ n_4N*P?@aX{'Z)boնEԾhTKu@cӝ?jZJu`34wtfBVPy#[37χ0=_eNUqbHxۢ ;1,8@4}'^q܉T+jh#Zerzzyrc퀕8R驤D%}Xcth (% Ս/& B$ dZb"3N@Z:l: Q벃(ͅ<ǤOݗ~j[NB-#6H#81qSN8jǣ XmzuU׌̢OW>N-qJDB[+Lm&7`FAwL'ByPF,_* p~g"ӥq47Vr-zp'juyB  t*r:;>=gӨ)չ΁!v:=Ƿt0pߛ`qTV*':-7t\F}@v+|@!v|)^;:euL.M5%XeÝY 2 ,S7B-H6,y#bL0 kfނC0?r}`Bʹc|CZٝ] og&6ҿEWdmq k <_`\W"j^!]a b.R eyHe"7p 9<89>3REkjs\بUZ(l$A*>D#Nޓ9 bu+m돼RcL$|n+Sj+]~iV-p3[qKǂ|߬NBLq Gv#tV`ʒʰdz'72ô0 ;! ҫATZlvDǔL@[g$(i`RGa\<% ϯ/0M-Oy6Jr,ſz) Sɲ2KTHvhL(i"<(ENt\C{>CLB}yMbcҞ*WHmW)g)S:71:LkIc+Gi6 Om^"' |Ŋ3E(ŗht~=&cvi*>Xƞ%R!'襰ڻs6X]uPqe7LW)UQ}-OpDczÞpVh.;|`$n ό jw7K'~1j6] > ⓨKB\dLW.<|WVD>Z% ;aqRsʽIǢ£S{)"oYu`}[LL׏D٦. pD.̊R1,ǐN]:)˶\|BC'1)1  qA?$ w꣋[ԭSInq;ʽ7Ҡ2&[f(&W$zTb=Y]x9ԙ-WdwN=4VCl,4[CW|_ &Ep sʚ@߳h8c F|`fbV/.&斌sߝ0f$K(Kr1!wT ~/x ZOڹq.*&ǾF?#[Ō8ej!@Yaf_!DRq>J*q3 /27.bT;F&W4Za$oAs6qwv |;>U1t_@.'+;Y7Ǥَ/Ffz!Kx==8p(2wECT|AuF #@n LU3IaL9GH]&VH8Vy!DFA,97c BxFn#Ig$!h (`z֥ ]8Qgi})sx]͓fczkgYjÿhH[~;Ee=-;ؐ=f!,!*ˡk{oKCkso }{ZUA(&&VOdAɨEOgmB{Շ3a E-"눷``@u2mn#PMXNЎRvB5/MWG8l7u b =ErON T5fLL}By)pvjث) !0@"G~+?Ktн|*Uݘ,ZWl~I1 rژyMyZRHqV a`>`2XϛV)~Z`vcu~9f'?4p)h'rHian>g&kEURA n5#DuZgW& 2i!1gHZv%fɿ8r4OXoφqa]о.xchnDkE'@ hŐaXYt ίvj&GuS:7q.Q21Jbz&g 8G;J?ILz(Z`􎦫_1~hN6 VBbMtp,kTJ\T {^%~SCvzBS7>R]Btm%ApZ<84&CѤsUy+?Jh*(e{/rZY9yĖ.Wn>^`pAJf;VCᄒ>  8+@K{KPFE89SiiS![q!Ov8BJ[G]hCl2ـ.MPOI'rSg&roV'0#4ȘycT#-JꧧMmެQ)cݽd2F/$˨ AӺNp(ݞY]di<7ۣ:#g9 3f2;:,t=Di}Q=Ûxvwc)%-nmצ-1M^3ڮMN_trbźǦ8U{fqC}A'"51"ms .eԳҦeׁi& ]8?W/ R=TĽݜC<o x&k)}#yTz|IԟII|iltb Iϗ^Kk~~+$߳qe%NsH:&2)~,zC?HL ɔv|ա %uɐu)yh̨h;5_ʼn[AەR;Sn~L$f`>7JڂwtFډ Ɋ}>7bmڵő6`6L`*0 e;|(pw6'T4n9ps:|f%24(AhX<֜i6/3jgKZ}xS۽9/+ Bk%8͟n ȈV3GFga}Ll dNK_&M u}~@~B"_lKZf >Žb>SXQKUgc?8b5]]M5zDr6F06}Z*Ԝ*dEITXï%X&Z_MI3?|A+fXgңS(}:e?#A9kJ4$BJjjy)?X/?_Ez8>vh086+Uذk* 5mJ6J"U*P֞*L ERzƺ!9#҃T?S,d!}]JvtwKPCe#SW[cXY¾Y9 |ٮBŶS%@r1 \ui'ȕ(hޞ?Mأa+=u`.eexfh&9{if8o >,0NkcJF7 hjDG*0%"#A9OXwI:ewko܁i~9 AN["B`b?}Q[r Ñn{ ܉+ߢwmw7/Yt,Ibki:fϰemcV@.>fpl$#|H$woHo(T> ҋO|v9 )e xIqrwR#W J\s]LΩ aqưYr@I/CVuf׶2)H^-7Hr#igCp-ENRO?ϼVJm\|$x7?=( %n ȃ1Σ !H+aSzA0F$꣤a1'4 {c3+Mw\ں>0[_G;Xf,+s-Ӄ-3ژn9ѹZ\8rY TejDU+^W&2 T0|iZ84fO֟|OeIm{;9%>k@Kag>~8Q˗^m8԰:LZT!YEUXRۏ-XD}WWhc6QuGTTkt9Hĥm^N䞣Wݶ|5~pb|'aBTOOv6N9i=I(Be8_G*\o?FS䞖WC\w\1.B#(W*Rɉ(4[hlh LmpV$Hú.͔˪ZDNU;۝jS~JQ:=0w0 0. H H-i)GIQ3F_&X<`g4aHGbF<|n`(]AF8h C[f)1F 7 =v:mjcnn= h̙ ]{"{?t8d{К &IP|vPvÀNMd j"k *:/< B^̱ߗ.JJ-Dk҄ F a:c}cLo0hN1>fb{U ']6=pn:lr8zC*0AhSNT qbQ^֠6m8)o;0wýjvK zs)u6jy ڭׄ*̞\>|@~rzRSwiZcK6hNpR-{&xyڨӴi>V]*X)M)M LUq 0c;'N1l&:ޫ԰7X˻zVTz ԹwUh5^Ξ-p%Uc0~.;lLwEˊřz-u;9di]mB]ƒ]PL иp>8U 绫&g]LQ a(9X_ Zi[5Xtu9Єz ToHQ[EڧkZ[06)( SICw7zt2 љNo FYzKuGs()eGthMh?JlŭlD}J"N NW#>z]r<>_Y\'bExdE%7k>MW{ LDǵ~k6fY7_8.ZzεXXv갑۾O.)ݩ Ri17k!/D/;.P캕6j $Vl4J.XW({9~- I欮!GY_^̦]4n5n!L{+3u3m1#4cvAZxAo%錁cWzQml>]ytece8a\F}™w}ޢ:X"fzasdQ\@L`|1)*3xQgb |jkz4R Ym8t;p/"zqHB%P^åprzo Us"a ^;w8Cނ P˴M{24bj*O &a3 TQWt0@ί3c UIu*1D/-/cEqx+zOZ@&a;ضQV-Rѫ  Nv9k a+6*);"`2TƪE19%bt昸s8k7PXS k^VU:wdIzryaB G IoyoE 'Xdv,t4P) cɚ>HewU[i&?yǤ,רPs/Ea)~Ng ,wȽf(&`>B?\(AW8~2@"1_)gCՊftlO;i8&A _2ڣ)6_> 7:W=90pIba7SUStzu؀ny T<OaWa>/AàysS_uag!=M`yv򲩫Zk8ud@)axK5{WO;b!e: Ƀ))qZ1p;kG}Gp`=E">}ݹ`ɢ=c@H. l[Jނkkqg R2i1m;rNWr».s>t<]:r ,WMPPǡdRR8dǻ2w,%7/q UrUsF)oe;ִSa_wN__oct=uIٌz X5{/ ѥPO:2YE|4 r yq5AnL& WUԧ[(O>JNfedl9 SUNSgVo}wpCEN_C4 u[ʑ*6Gx/GeOܵLJ8񳖋?F&_xsMH@AW8 Az@X)z3PS2@g#&WVsHLCB:pn#| ܝ6EEavtKf|:zGmv( _N7lgE8jp~HӼvʱFq,%ƞ?m%e #AFG>׫b}b~{j~{'ϺsC}QǼQS*k|T+U~5..-{e߮m n:_tp8ͅZX_Aw)c-9-mcZ@Kk҆;oKS--m{gKn) *sC[.B JN?'+ۘ?\%JG0.^3"V=7 \J3.֭>Q|X۪F3 @^`fxTd1#8SnhH >)z+@+Pfe*{wpۘl%LϫuD2wX }ވ{N9e=҉YA2P3s7K32r7{) "0Z&״@ȣeQe7uwb:[~ ~i h6"X<5v\dTŒzOr.}Gޟ\?F6!B# 1pdACҾ^`=9sPOy9OZ3[aE¶ʃȄ k['uz4=)Ry[qg |ٙ4y0e4 Hr$xe_EVE1"HI28,iYd P_N>F!fp*awpKq^}DVWŒii!F sǣM>1ʆA'N1:>CE3innȡڒ9t8"S:4*D7a"G4U%iVZ7ca$NЖWbeE EZ^Ms*]lYQ 1x̣} O E^ K u8ofQoGnǕ١ʪ39חhB<ϡX8 [3ij6yJغ 4daЀ :b.]@VGiO IRi|FT\D.E&$U1C %wA۽4tz<zXK:}׫G>eNm5;!ƧIx ;ɁLNqD 60Ö́J~}2D`B Yv|1՞doSxr'2l] ? \T"0k$HOg+Hy ,h.fTg&xmƾYס='LT֙2lG;5֊DoxWGЖ,9^ jaP?B[1 @4({9;IuJgL7oc_Ҿ7'q\Qh%3n=Or{=gv5CFȿ#Dx)638(XhK<3j<w 2oZ$KiN$U%3#,$6K|zuZ;8?k"MƏBY5~ CU!Jv\k$8U@@N:Ek. e~Sq_aO6ϣ8WϞEa8xzzFgO(̌WD~k_7joSq4#J][}w#qUIfdi/m1tC/jIKJ8 Γzz=lU8EǛV7Zgڷ"৏Nji}YǃL>8vL >ptO,oL\o(5r}_Oة:@&8\%C~v/ŔרZ䨋1{\>c_@"H4r8E *Ddr^;nC~w*ip|6ѣ)on/r~% f?|7?{1Qq1^sh\2,EUaD 帼P̫>*1ؼ-^Dix\yw 4*ZW*zy!6 J.dgJ-Y޻zAU u𴟍 ;54o>,y.BG|TEQU|B Y_{{/~{:OWi#;Oe )CP2V91ԭzL(+rT0qWTra$B3BzmaeK"dj)/XlOݏǣIXm՛#I.\ *3/ZC5rJ.g s%iw::Zy8H1a9ʯnfǏ*n]z2,+ S1&*su<+a\N,Y؁pʪ́+@ДNSj$}s<Yck]bÛſMG10 Iߺ9\̮ˮ'U0vVnwFqY^44Q4[ф skc" q rj C4秶\4]#s*P֋`mv \^盼M^&}׾k;kN#|_>)r?V[d^؇Lp+y.ZCZ.딘XG&q\k\U~5~,&|oڽ-p9;| Qzx'LѪGB7"JR0Q޼L8E`T/,IsijܢY.;YfisMZsaF 1r7.PX܃,񩩍mZxuN|ҽ-J~eXjR?m8scs[?G菓w5;U0p͛2!3V{.n c|Ͽ0