#!/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=805e1bdba22db9af260d049cf7ed0c03 # 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 ^w W'ϕf @m:QCAޫ/wGD%x_/b\7g]5w?q7oV[sQM_٩rq9nl<>}Fqm慬;̋p}̂&(N^.7ʭ"\ ^(j٣a -%;JIy̝x|9RǦqμ? c[밣\8%R9 +?mTM1/Y8񛓩uBC@SrȼT%8{4i'\(H,/1l@\q㟚nu΄B! =ss'P]Tkol֩GzejJ3[M|[`VKFAlGB,(?뎙vwTmN@mk9g4 Yַt=7 І:D 7diEbO %XNaq3 X [LĖu}yCi܂a`7s(a eCt@2,ӌr 7Ls|mc-1u!Gb;ٟLP1-pjQLw6s/1N |ʒR7tEr"zYoIv#{"C\P[bU]0~ OTL8LF؟ c<|F@"yF Ld)}| /g,KlZ;TY$*)Y|g |9nS"aև8ir3a륢0;'Mk ֤gл؞Y \+)*) 4sKh*UX*ّn,N+/a^rS֠TgGj7n c]*ZbiԹȫ`3\&զ,Ng_+ʥ¨Und [ LH#=[0oA5_6s2Q4-xBCgAm@k k=ӄQxu3O"hxSt -SWOdgiQdeaGg`t%(kg3 4\w98)V&y7~Y Z(mL}^Q%oa,JpԒԽN^~H(NJHe)eN+[Jۚ5ٳj5^~;UOXזm+lԾyaU(mFc <ڥ%*q(?KP/JPm'Z*QTgxWDwo%xiĄu$1ainxN]Hٷf7<'4[u)^bVPcVuZ{0-<&Kc`jNp:ZtV{O/ok<~ؽp!fwvWlkVAA&EJ{  Jea%f\-\Ld_~s? ϳOϞg\y Zgu4Њb>]?NO<+38/"l|m[Pé;>Ndm[ЉYHm 42bO_fh1|NIZ@mT}N<@] *hd#}=/[Tik:Zo7mj}U|q}*>NN˖R6w TwM/C%X-O}87K0dZ@B':12#XЇщ.75yg3 +"r!B`{7!0|^ ˆVpzzny?%0Fg\d(e@3`Mp.0#P(3ޟHjHծ?,c/KPAm!4D~DKdٔi/@Xɧ,QB 7 b-M1TE(9B^8T/^ GSjf";RB[&@93ȏ3*Cġ2S).h$l)bL;I~ ٭5Ԉ01VD"yB1,E7Bo]=ש.eA|+ |_EѮm\2LIcߟJR׊\ln$ӌEPSdDWoTL' jBjs|Uy?DQot.': dd\:޲4SNXlvv`\)WF*I:f-Y :*^z8 9 @QKB ES~ȉ@|Im̸pm7[ ~|s |nŪGf1'i>I{Mg%*X GDO"EXbT*E|H*L Hw4*iiք 0e".ɛއ [՛v Sx^P 5h4qMy4ުw"Q6LPzARuP8.\?<#e&D6.AcȢ  !9oUM(p>d~y*.O! pO52~Q~mG@=Z5;b=Bx?)AmwIo$ 5J,2Wރ~1^b0@fw?(@6?շ_\K}EdmmK6s=b[cq(`l[m{?mZmpV)l\ b].*[ cZz> q_jr&o3}77Ʌ_ s*[`^fO]fŸ:!'n%!VzUER cm0H<DwnŸMe4~{uHr 橀x,SPRx,Y 7׮i ;ZqgYvȉ*h;@Jr;4˝>TzU`sKoQj',זcj.R@8Җ,T<wڻ%Ylː|?Q⎯VpFdEެ̙1QG& Ul6mΒe7҂=qlVns9E^[ZKuEt7]O#E_aU 2PVɻ1B64m@ۛFh3u&RW!'kȈH@vUsDwɐsXSrX~y_{qRvU%'֡~S`J.p̘~H]c+ov;?vza,6$ԏJiQqW(&q jlτp6xﶧJ'+~A/B2؄?>WAO#S(W VRx(զ.JamGx!~8"]ŵsz^Q525=9(9#FcYN>L|p]w1$:m74OZ@g-hk}x^|7jm8'G|4ObB6tI=Om_O UZN~8VG f 7zPi.e)wqjY˯hvz%71/d!?L݌7wmz\ܭK"Y%/¡Nn^?;( ==a׺<`rH7ó KFԷ =SA4/^˃6KyI5, J㓣6%2kH+M(E*/ԃ/Q]mگ@6%hbJ4*VVEl+tN(e%[A<"GVڶ$5]">؉kk7G=iL\ov+MB765X@w1x$˷Q*v ohMH MryVt?{B[jbsilNXN9ӓ(*++N/6;6.2gzRJKяͯ0< j@/Ǭh|&Q** P+b[ZcK@'(Q'qwtWEecN>5Ƀ_L ؔ/D'G>,ZB h&ڙ72Iy9E20 /+Vl[.8x,[I 3*J,BEQCD;^k*݀mV(QokmZ1[Gzw0 yMbIMٚwN*4p2QYgh:fSFfjy澵G.+1:]F~j7PMЀ1@M޵x"9Eӷ>y$M6Wrvv>`I.xSZhf;i߯DWO@7hRk45^( " N5j~OWR1)eA-`ԏ?|:Pϟy}pPVɪuL m͙:K X]P?\x>\-^ \H'ͷ춁kpGOއۻ~T Ǫ]۫y ӟ̱淰>n q+ٵ)j t l/9Rԙ_:aOR# dYW'-?9-7!q͸k pFGt-Y:5$z@0*j,;i&pP W|mٷSd:C*JӝPW$zUޮ3R^24[j<[.{̍ Oe6rt"y#ސ(BdGm򪜌o񮀊ƳuDfRЌH!bƹ!6t.cYjycyl{*Ɵo=fE| +TDo.|VeՄ]L2 -1ބM(AG  є TPKDܘL538 G)WgP JWFZ ܽc36ߨhh )o[OqH'{V3 op"F䣷Gv=Vu>k|$+4Fcf xOOա dz IXc#|pX5=J|6cM#aAzIQV x`(<=% :L55t\ ՎdРd:a33lN(G% Fwȁk aܑ#q3>D`)k/t% $5.#Rx.XIνnpR;w)?g--!:  g#ԙY[3:ffxٺz\QQ/l5;Y$S̨Dq1EͧN3 9$czaI؇\} =]vv,r%VO^r(؉"a}d}ݴU51u MtuG\x:&:+E_)fN@A _N,8y2쬠 s~Y(TERY) tu(j77 YNG_jz%s*aJ{L,' ϛ4W Afzce\SZ_}o̢]6>1D}ofCS*)׳ƕ J7ri5 "N&;cBRnԀsfT/0@H1q*)H07T0+n<Rz}p 7{FTTaMW+b HAt?p0P?5ѭ| )/&xË7;"%9 ^ fޠk2;&-,QPiiy4ݫr8.qƔ1wl}%c-sLchKȢB8Xf#8-xZV~WYn.ep`@"`![ ?C|R &{@˩C =uM_aP`Ë;9A*͒騎̬3>톹Ez.JXxĜ濋 {Z߄sKLH쎇@ξry3 $bIAξ$0*T~Muw<WA?W,1Bo5RR5Sm˕8kM;ڑ%Li{k-2ՙJZ0V/S*}RfNE.GLBxXbӨXI z"܉G!vDB%.uoP_\"Fi7P?%ZE'KY4י#Bu>DΘOVI‡Ké|zzl;M[6e~#T_ԏٜkS)yǴуmǍ7LH0/ 'FF4yf 6NT?J$ cQEs3:n$WYQ h@%$drd5B xy ,êM`0i<Ʃ@B11YՓ:6&D(PRơĭ`4A7!,}#3HZHM9W1g;U?XߓaRpZM P olr IO\C&˄|#Hl_NuLZNVJ+O ^xF_j%2 [ *PVI 2tS>ClBxf5ۓrBGZNL*H:iԄ=+ g#[9׽~vqed<ݍ7dB*#&cR-\rDWAFug@dҠw7V>xnPo0mv_nycĭ"X(ӊ'3?6d|GT[v2;$n,7~GJ e4&ab85Sy@Ԫ Y"HeÄlW2m #fN)լ17Wwィ(l?3%ĩG&}y4-y2I73GRëY}aܲDBW̤fYtnj'BP 'Q?놂_B3vzm` VZ%.DQ?Ao`Q)\YP5:Չ mW0nSq:i7㕕w'ovW0(c_9n6u&d=̣/P \Rcn<  @v,?/=38_sGg&1 Lt>2J F=Y}nDZiSfA`O #CJE1U3yg4'<},vm?I?yr.E%_uL5\|R8Ddu]2 `P6M.^  b7%^G4*ZAsX lcsiTDEŒ UbhSH'SfHE%Yn?%C!KvRh :r j.a-e'ERV$a<vzzr~qkgj&ZpwQFbO{XVǒ_UpԠq!"`lnF<TŖX莒rN7d}!i87UҨ)~8y]߯TUMUON5jW'FS7R'`҄9|Q9~joOfaV,ql~u|Rz N94]MZ ~V^w4z:*4ZaN'Z_oJ2,PT׵jz牣g{Qa"O}څW'{p^ϵ}?sؗ 2"\9pueZp?|~}'. C˜kꨞZ4JAO vbZ-Zeat{j &o֯-#Fi2a}:cI̚-YA4f_*Ц.M>Be3|~HX?FQ͇<|\ځo0}Lg ofoZ4eHJpvE誰⡉7hF_ʭuWhWLJJ઱d>UV zz,ݬ Mn&к.Kpշhha#櫕Zؐ^kV 9ysk[r=RQm%Wn[iK}a'Rqa3^5+R_cQ9B?\̼y;۱͌4{ڞmm>%@nP{ 獍F_!8T3ɸDnUz_`H>)y\=ۤTP]olQ/&=6+B>ڷj:=ĿO--UR/Cշ U6|'}}@_POm |F~Ÿ`ЛO){Z}r`{Lj#MQ^Pb%Q%QVoV6fSړZGOhGhK ox z)$lR[T~OH-N=bJ@5h#>yPKQKFhwK\m_EOfvǑ;~G'Ǐ攷 lJq woiyo=yxw, q'ľ~+!{}C˰ A`oz(tzwh=x:_@ Dn).76RTZ8j6m iٮLz>$\$Q]/r~&US&DJQMDUbUO#TؽiKI.Mj|VGqϝS!ΏD)+/X n֏q MIўmG\.zuϟh{IP]z=T발 Вsq%2 +IFXW[t7i"XпeCASo98J7/nfK~6$2d(h!7K|ӎ(Rﱴ gD,fXGڋ;j8> V; l7Q p8ԅ8NxSV@.[&ʁM(XрU؀r%;$Vp>`Oy#AJn׫RH0,c6$OOON>XiJp889~I,2i¶37_* L1,=O8s&mrSқ6r+Ҁ\("d 'KELw1*^q*8JfR%q7CtFmƺeMxJ@50ɺu&@:A 7U;cee6Y:**X?>{MU ٯ&#JYD=w|qQCLsK;.U#Yu\#X^œyai vEޭ7sC2#͙O;PBDC8 s-T$Y482H[rh# 1vJ=Fz.kkHФΛ|YxLm{(*_t{IdLt{4I@1+_0 0y(|W ^p s3p "diBINdۜx`MVk/P̣db_rs~j:|>-venGTRUZU0 %GL2&0sn' ^G< YϻQⅸa0HeZtz3v9YCdM UrBr2VJ:;BblK&iKksCڟsiG'Iv'3 ֞<{ !AUSbV@fyZ,HrU4\Ly' ep` @ pR 80茢ȩzzC"b PG;<,-uN}am7/VY26';h$e9Ę|5ڦ.a"\`0Fum5gƘ#p嗌]{T2Ru \pMVyZca? VL4p3dhLEuzp?ysG5tb_*t9P)k.܍JOjW\.g:}Ih!*EҵK$JSF2"Anlwؒ1o-p?R9R*p.j~O fZPAfl™qM_pMLq/0 XEfc;)k*at^l?u8SQl182cFbR 8 &}a2景6\{tx(Tu83~>xdg$mx ~-$Xu1[2\(sh70k!&b43h:mJ'{XOB<*HjxitkUIs6?hTr% Xg{p*N6o FƽGMt9@ ᐠ҃qiC9kGS F}Fg_4kc̦Wjm-'7FB1yah,SgB=|,@ Tu(`KQ}NBfaamŋ8qy oU#Mf( a%*F8)FT80<`&a6'`$Vt ܆瘔2[lGgV5_FE4\S?j4oc uB;6e/aFmtJySTB0Op6xfa96m̵Ŕ[t@ϭLBUD85ɪ/7۵F#X;r_I,aS`맏uXd!A3))5x܆j[cEr. ߅a)O"b@Մw x sScPD*K?4gɗ\ XA6nH0e39Zo3$'c֭AEz$87%{7/a5k}J[%)zL,dqݖPҡۨ\Zfì9˘Ih{\MOgͺ {1xBI )]}ye~ +0ČEIʛ.%+sb<)Pll$}l }jK㓣QʑfyT&]Q&~)$ي3'i{Y/hw`Qً< C9 D+717ޏ($%U2чO) | l)O]\u>Uzm#"~  y8 $P9j'0|qD/֞7Ct`Ђх6X!z?tGBG=jyI[lQk*V]עYȤX5 "eCGm&AH.JA@B/˳4],rkNbUDVB "UloAcD.O}Q@'7:JGX5E24(jNrHBSbfIMF{3 |[r~ElJY_-:X/!J'ЃcD!-?]V5Xb2I:z~u\1101sImxŚ9q<|Y4y N|!M:yJx7Jѷ*?ƌm q˜?oW:1VƉ0]Q#<r~B{2y/AخubE"K[__~dR~0 z -A?)y&E1by%EYhsORb2GkaXb1V;o3τ+'}[Xqwփh "i o-; r̚TwLC'6(: 9s]zHJRHM(2(ƀ,\dU>.=H$CDa`\ vl߱qkJ'0 (0f|=Y*ugUй.trbQD60Ip99DgO3>pp| d ʜr ͼsL`p]hTLHL6IR 4E,O~xbdQ TX@BiQꞧP 鹅ZIV`V;u1Ijj_E ͂#W"ڧ疢ij͂ɍ5}@Y}t:NbKdBeXKaXyd*W1 KI#$&՟[7YRʶQP%oS:hCV|B6YH^cKJf?[Y9 O,.x6Hw@U a 9u @UM@1%q0jT;~:p`ڭnx?&$c6Xv+~kg/~{Ui;?#O z\,0 R&*D_Č-^\G&(AwAvIpOmmEzvD)=Ar{y{t.HxHԧNا[/(S2ۑ_#+PZZHF44V"#ڡ.ab2q¢l^oEQP-^9JVD<dl 1BƇ%˙agrԅJ٥I'rjQj;ǩsxI-7pa +W[+vykq 8'%9%`uO<Ǒʸ1e#yR *'oLc"@ÿ=BlH! Vܸ9G@*TG8e :{;[))E6a67N?( 1~\KcNTp:, P-ҁX7Z m+3 |U~*=qMt:ìae8B޿l{83,4L,p9 e FmOQ+Hi Ð|K#,*`lJ+N\6 {8ݩ4 *-3k6N)W a,h<|-a4]~P˭8S*Yy:j Q oi3pFSFҪrE!?W<|pyf|]Xߵ~YH(n@O?$<tV)so=g[u"'+D;>}smT=2Fmy#6"'jPv6U~af"s!R.A) Y5gN}F6a PF *_h<Bnll Udzn%,1Q)ݚP@ː4hKH̄>f{O,_P5ԅ$/ ͍T' M֘l$46}¶9rǦ庶h`TnQ!2F.t2f?0ŋqJҠ*|/#gAw `$:qs7Kz!a8qRk5̙[&+< 9 u cPNZd QP:=>evz9yR>U>&}h𑟗O" 2 z]J=)}Cfd'Xzf}B@<1iw` 9+AvT@zOΙHŸ'7QvZ|= Wtt'۸4]'; .OZ S :0?V1lAI5SBܞZLK4j/D\0 z]Q?움FJPFpxpgTL>lyS^WUaTii h4Y[a|ᱷ늯4,w(c]> iqToRsM垎|p.75ՊJ(Ssd=bG˙p $)*H1bI_z?İz@^qO#9:G_>׳O=l* x$.;v6<@w؃<\"MW$yl 2͎Dz}sD}rT1qEB#=HH%Glh8,MzqvN CTM<-r(9*G$F_ەUKCA1ؾ?94~yǃWp}L{Ax}dTՋ6u),M)La]ȴOB~bF4cHf鱼9n)كo擹*՗=2KA)5 Pcߢ}πT}_y f =BUδ"Vc}}`"ƿIǻ)phGH,b$EfH+}7$zxP όfHRVHx}9(8|jeq;b[)" = ?ޡG"1(}֕+Ɗz*sTq!3a#ֲ ;,sfN 0XH$4ھOZh,Ux+dB2G[m+\شrv\}զt!;oNeh_2.w>>yھ]>_a=? -KYt;#Cy/tn|/А %} ]?ЬЙ~![m_Dwι, 9CvòH-DZhTi"LMWKL{txKb-'A$O;8| z ,A_23r?IW8'Z C:!EqV?o8{>9&UJyxbGuo/8=898hZy\=b[& =ɇIZ/xp :?~(S* Z2{JBOsMa(fS9͌]X;K,yaY6iREW f$3Cv"eLD`7,NR9+v}qP9rQahLc{=mw~^C&5 C ~? La X #5^t!֚sJMWvB-<뽼3շ:d/]Ů-l]h)xQ{ēU &qPW .>,K7Mqe<Ų[{>^ 1L*ːY;2fL;Y 4{l k_._@|[LdD-;c=\D(ט~$qZEAv1-Iqrq2!4lO(;PtqJ{L~1o4QG[ӯi4Q{[ڹZ&i;ϝH5ސe#s%ߜhuޅ:v) 6|jO'y!DJ egQFwϣGjSG`D0p@{ݩAd]k(D l/{_` TP+^YVq1tHj̞hC;qE J͝Tcn+'ubaqp1 ܝ+QM ܪ83.t4ԉhlٽǸJ$P<2OѝzGs -Aڡ{~E+ZvW%e?M<^p>C싋W4V'H9D6Z'zS * ~hN4LG$MNHja'?&z( #+NԹIޱ`.JM%0:Ie 䉹Sn[r 0]n->R  ;el>*1qI$7Yt SxvY G +VGB-GDž#-T'0V;sR&f,Vo{)%7vҒ0Cm#uqC;>~@,6'{IʖƔ4ݹD9S;{#NF*3gw@2 HDvc * 9Tf<%lW">''mϩ+fFّ8ftKa7o7ɨluĘ!tO ;`ܮ`epH*WuM0 γ$10[Ї$dxSX&؊IRA?Ëm0 >䷆w7ʸ;1Ȳ)4W<Hn0kd<0vGr4#kMdzѴ?-=G+y!߸8lIg%Yi24#&D3byЬs?V6odϏu so)죗ME{'7}-1"!>tӉȠd"$Ȟ!l%\vdg#䝅+@Q5gZYi3i"`;:IG;f;NJH9jO Ua5s-cAIy5˖ta=GԠ%u_5~!_/=)`C|(7Ƽi-{G$JU;ƟYq SSZ`b5{ezܜVy8mTc0֜PuVVTR㐌#?:3OvηIiI!Iqors}1Ը(uTyZ# _qv hdz L}i;ְQCM% h _uREq|u9츺vEW;  nJZk:H$IBI^i-C.+K >IA*)d0"WVNe䲔X-!yj33w2RHdb/%$:Ӓ\b4d &UD={1㨷=n[M6zl3k+c8om9 BmJ*bjo[URWo3ӕ:2n2!3]N3a/T\ZҾݫ蹺1GKh܊D[y4L 6pPIo )i\1!%(G*syV-ѸzhqIVWPgQ#pYtRݵ$Ru Je5yz{=Pj?Jp^0HlR`CK(۬jeuN*6 c)FS_zrrՇ5DGPT2'B4˰ X3}ƜEVBF#jodH'DK 4Hal}I|!81ssc\x^$;76̏ĉlFaNtetf FazZՉ{cXe&e J _:yvP5Pv 5 h%mY3!圼ԁgB"!Lzeݿ:/bLhoKJyڵ-7uT45' . _:GVg1>I2,F +*-'4"wτ7,#s +g#gZ493 2D$Ct$)wiɹgX:a($ +ry0k:}-&1W xS[g:vJiD/W*boGnh{͐S _' I>šdFVK="G`&>q>N4 YkKureE2d&,ou,:Lȫf2i"5U8)[UmF^ !0 DodTFX-(/Tn2/?S\k}C$?| #yzpMMim u_Q^"&Vޖͦ:1yaeRU0 wg2- cnx&ڨ6vL1u즌8'O S8 18(O2ɘ56s |axmԝ%* 8ȍVYpqP~U $"8h g_I\v]Lq I@'+VvJ˾VР9+Y=]U񅐤cM9i u}i}#AOA>}Hz$Fmŕ;{vV&/SptM >ɺF A|y\ۧe-;&bК,K*#R'.⯆؞2cwߺ֕^e#pD3KgCcNaϖ@e,9:cpF'5M 8b8HI`}z1,J*"Vqs/ϱ8щ&QN?|j*՟!s P۽>Ж{N2(*ܧ v&FrYR+b&ͯ?ۏ6ޝN6lW GɖiЖs+2:#]0&taFθn?.rX)172`=dH1ie M8J4ė)L_7w #njx{"ɔdFT脒,%/h "F<`ߤ6g10/p|pne\bXSl77Ūu6W=f3H9̬jt r'XƼleEZ3j#ӀqnԆZX&j 6c8ɯͩTqɮXU "]2 Vj ]Q\tu 49-nE{=[%.ɄI"xj-g*7.7' o XX\\r g$JsZuՊ fe6F MlڜO&l/"7j5Zw]MO=5V8i6/qy69 076Ėan ~[ƥ&)SvSf8:vBi}2M`lwxcuJR+(uS dO*lԽ2:N9NOz3F }h9ZF}‚OW9B>26ֆ堣C[Q* ٜewRBU \|:@lto$5^W$⫡(ήwjFH pt3]2IU0' <bI=+KvB7 Vq9nѾٴcV標Hr%皘/@5v}3MЋx7R.D @{m>ȯ_F>1pDӲ8YBn'8*>^m eA]%^:9 8\dl乍i)1KCb2_3,\Zx\D@)(ioFezmhCf,vﶃՑ|,n:Xci#~:c&A]}{*j /10Mr[47I*V,b@NNC3sn"r ċkd_I~mnI ABq!.HwKfl< C3%lIwb.h˺uj0-~,l;:dúw|v*ߟsicZu g]OvwCYk3{4^\$Tw3LYy|B`Q=ڷ ~Hh\`/yuF']uÝlj[O]k} +(EQ/&4ܠN,DW(-v >u;EY\Y?W\W1;ޏqr '.f⠺'YBdyw9H|&.E:qEITrLd7-eTU PwP_)߹롷Э:!n4||tz'XwxpT/}^{ډ5U=!<w6 U\<(KOnN]r]ke?_?ʸ5"7?&:.:K^|np0_' m1m*Lj` 鍫I@B&O|4*Nos:n~lq#j\E@̂`O3vRi?i6-6mzP@Sȼ#@ *( "e;s #'DwQQXpf?4X8]\Wdka Ut>cfo;EOJ|"7%{*,0[}@1 ۡ!i{paD/Q?KPGWdn[ng8G" p;HW8?CY?:@1Igi.J ཉFvoDDTG}#2c5V \$Ңu{J#])v?Kex栒0#Cpx<8S7`*_B,jEljE$sd{<> ;m4?p^{5:uCv %esnDZK@qq\Oگ&te_+q}SXHv1y0^ t<x]O _U _vS9j.FWm_8[T}"R& Y{)hT$!g/iB0m(qƒ߅SGt7;]F;)᷒=YeZ&?d|$ smgm6|669`_t) 4hE8p?go51G /buf_Od(a\oƳe>EV6_Äs3%*E/^@ EH}M6q8'DvB̝0bWĠ~x$,փZdA-#P-;ҳxqHێ3E}Ƴ+*Z!u 4bo,g35!/ȸZL=)>W $=ڳߓA+ ,Õ& RxdA&Q-K_L*t7nVzMM;Ljö0,C4&ݾq/ķVΝ׽850Xzb(F;i׏NfĖN;yچ O5QH80)JL;UgM=xzE1f{1Vs F'=jSqQh;b@G:gWqJ$ڂǨQz2A|e)eةsC 5HM `_TKdNo.(&[=P3=JY&72Ƥ!MtFG~MzATjsG\gIpג)`-;;m.] iBa0OݫNH/j*WT_2 "hL&OrKMwmaoSk',&<{l 8"chh$YIa˲y:%8ݷ9))KM֬q R8&/b3Pc@;*4)7 BPX$yfttaL/(jaM0F!p|y!pvUpmFMW!p",P]=S o;8W}B9B_ڑ7枣-i\mW1R&.ADH `z=gsRiVrV^]TBT'h;FH_xsP[y݀qNZ Aoh|ϤJ럥 eKԎ[X^h2Gw[E I5=CHZЃð"Fl;(?ar,y󄱰 'x I8.6Y^x%:l b^"B8If#K7?=K]$12_gƬthтvudueVOfҊ7eܞw'^c[H!SmnmH6Ң!@}&M ^^?֍8}Y0sVᚢ2PDtʈrK%y唏y`k!Fb/4Ns*Qy0ߤs14ZqhJ A{\:-ڛx>:>\ G^WDɇj<`b} hFS -ƽ' %R,+i_#jycc=_"k KKM%+)6%:['?aÏ\1zNp1zơO@0#dW(ieN=gi:?fʳ cV+Pke\ B˺^2`\ { 0t4}m:aؓj8A۪ľbwM|%P1. gؕ550:9KlR"4vlS 9 ˺fKmyU./&0KEJ㣼<3د tqBPG/*q ^fDTMa2p[ 8*pzFEt*(qCCo51$XdD0 ۸#R"ΥrR]uL;8ih*kӜKݐXjxOͱrCEy Koa @ˣs23/; zf?YUz"+;2':"Q O3BNΩ;>](-4x ƫcބ]!bc)nNh2|ÉV 2r{pz! wso~z;;OFX( Hf/䷻ybpIշ/8soVpI5溛;KHLZ

[`L2_%ȴOz_{WN)kC GauAf \I0ܨk@c$@rSvhBZ[5?8 DPk]2ӥ4_.UWVDRnΜ>Mhyb'D;Xe$JyxF%F) LwnvQ=L/\~?>[Yv鞕՚PKrBٓDNŴWQ9tN^1G7Z/D>p B $!& W)q_udm}`'eO"擇O/Q?]}}w|wocF0;UwqxOR|ϭy!EEN%^h~1}FU-g'3&?A@tm8+l ǽEK}9cHhK#kߣ4ՆаQ7{ht#*c (KGs AkB(ԄA-:4k;AA?^=ho ~`pnK& Mۀ Wrd%36> )3{ `q ̣͍O)pƳ*t˅CXcLR7Cws}>ws}>ws}>ws[0