#!/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=ab4475eb3089b4d572eea996bf2168ab # 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 Kc<^ p@ ZYN-yzAd1D`\4} fRhE4~!%BX7",|&_& ^B`D4!~Z`Q!x^(~0$BK6 "3h6"%Gv!h?T(D'hذ)GEb#riIa6@,(2a)ϨJ˘X*L PTH*XsW;6<[g{4Yw8zo[7.{0cЃ׶.v_ {fލlqfo:o2g  P}r6h݉lxnM{_Koi+jWCldخ h YNoXf(U̹1m^":˾=6.?uA@bxٵdbG:濎 Yϸ5ڳm q8KǵܱkGwL5XƎ נ rX$=k=pP~: #109#bC1Ὅ%( $u`"yeo]Cr:l EK*cb (ÍVm+{k! ڐ7Jd j5xJ1KU*bfvh,Ug8৕7-xuk5Zh@22ܛZ뙎 R?W) Oq GcN4Ҕ_k[׳E_Z[7jE=ϲuA 0k&Lg)]]ǿmV$W??L٫ߓ(W6??؜@vk<]:v@@qFf*HC91O.XzoN(rzNzuroX?֏M3UU6n'8E0 YùܝMM ;UbcGYPGhd|?B&/CF/oҡɭi8d^Tn'։ѲI 8!k$ kͰJ4\sb7HB #@U++?ǓVl5 c{k؝[sҵMVZ68O 9(X@~e` J#.mE>1*c{^AQ@gg/N|&gsPH> P6+(Ԑ,uqS,\F$ .BhPtzI DLga-::┕Y,rੂœ o "ȿx@0Ֆ4W|Dx0]H`&9V?C˷Bo Tϒd<ʾ7"9U@-Q qk(P*?D`.92~9ߕ=|N%gf_T*xȗ|Jq3%{u3h# )Lf|gӍb~E<@,eM |QqaQnE{Hh0)q@ gd :٧*tz $ p!E-cՐ)ڝ%=.GHcW=nG5IgE5ߦE֠%+V<dQ8YzhG\JT,H/s fv8b(rrUP3<\B@)Fz|tț3?.n|:ce3+\U({]Kuewڭ[R; S %q#ia4=;Ek{?jf3O^9_\YF<( '' `+# ] 3? E9Jb\2=5AGKK Nթs Aߕr<Ԏ@*ِ-xumj||o\;GOl=XDx@v ,f2`P'a`AG{. peX쎚"?>%MSKE/@N<"(xpmEKo!n`2$ј! Q,Gͤ$ֲyC&e|. slNӗppDEF% T!2'XC'ܱbj,]Yբ%cb}_r( xk+(fd}R},2c N.|){^ wo|ϼoygZ;N՟WTa֗;^Mn&V'u];MjExk߃z;֮+S=uS+;w줎OC!wt]:wiu:~J0i*ɍX0b *`!a8kYqNnl}*Vm!wY)xz׻ :2:m7G˟7ssRYzP(y& /'_4Oʸ_b{ov:o !_wOE~!kpTs__B RNPg $G~e$>}U`d{PL {S=3vCgBk^ޏhM5 W[mnԡu> @U*_ N7T^'qM(2RɎXdA `KO| lsZxsCXt `cczMREC<:Cw=?=M~>D} _|L3aul@KtFTB ʩ~#(hՒRPkr`c>S4PiaBsUbcĎ{ؙ8ֿs~*@A@S -Y& un&{T͑)! .h>[Ug O&v/ytkٵ2Fpo A" C5H(BY>h kLū"ӢC 7K/:4 SnIK-x 4rQߓ΃mB&Fm^o-ݧRIJ.ٰzT:U-'ie;Ǽ*L+;~&|D6۶r2h|Qjh}h~THrh6K(:]N*RQUހvo~winD־_7nb0ԟN@<1U֎Ifr@1u`e-zvV@Hj&{lx]qY_;aASiUUEvQ9r$>حvz/[8e)Gై:4jqnX]D]$gqT)mBĆB4(eVdz+#fW L(䓋yCᆼYGb)0NB](vB"^h@J0tC"nQ"eyjRѪ+m&z =hQ_v@*0y4,㍴RZ_8Js/*HdSO6jPP@fz{ի7bW5xT;\&H}$-KN v:N1x*2_Q Fd~:x>`R^d J0m^#DKA5qpiM8|*BK(5TDB95AJv˾pH(b*$ T-VSf%KU}.HD'?],Aa:=tEF,pfDã3tjUU;E 컞IX_-8Y#Fٴ)(,nOֽy3GjC__$p"7.1m$Lx &1=YȨhD-dT4fOpRBv+~PO台xє0s8Xm5T&5PW.Ճn,sJ=: _ftG}ĐN14ՕX|CPYf+s)?$`KLt1g1]@,bQR½ב8s:,z=rHvo){ǿNSMPAkcp@tw)iծ\Hk#3_QnuK q_-BI|Y枯DH-/x !&SLzqo0wh\l31R`ۚ˚ *׈h1IXP:һA1rZOH{lyv= qXB 6 I=!/ZkšYY}9Fh[6dʭrʭor\ne5HthnUXY + I7=cŊ%~ J(aLii姏p5?gwwUrkij \;=3T"=h!2FŃ/m+HlAӇ.4=V?'5e^sk}|6qx{}/o5JL`;p+9F cRchTT&$]]QfjnVa,zߐ.<;x=Mr{3 Qj}HnA?FQSJ.Iq]K͗7@1Lҏ`Q:Gj [w=b[ (z7LI .2x/E|FatVXΣ_5O?,gBROSnޠ<Ӿ1Je7B'cX1G+Os;㽭7M2|eEfdO6ˈ_4;ol_AGam0eO%IB]4כ4;};W(^&q/C:"r0nWhyy)>94BJwj)hzn +!¨H955M%U)Et]͵ M)y:;r Ϋj@MF3/W=@?N~peD?w/ ތHhM;oE5o 9ZNi/aT;nMPWm ?EIoi<>Xd^@.-GygPyx)vQ{÷w JRz|f@5 }A%T^m;^Vo˴$;!#Uʘ~WM5(2 'tn>,J*ssk &lh4ЗѨ*?@%A^m=%)wkX|BݝOzޮ7s^h*#Kf4EXcMOͣZ+Kj շЃպ*_ zVֿ~lsj^i$@2X6r8y0k3&M^(]E].Na4 ; J\t7bB)xs2M5q_l62?kKGJ2щ?`a]H JQ?bLrisuUC?I<$q)8CIPчpi/V, t63jQhʛqo8NB3 z7ܤȥIN2YRz/,P=ۄu@8[nTפ?uddlZL+\l{=,e8-%զRYKoU&} Pt-QRcz&?ip!%;sY.a7'C(b Qz폨s0e]7E@ {MB_/d)uWXeVɩUb AU.acwnn@}Ŀj?`}xW~;U܂rv,71X7,Q`=-ۣiugi?Y-W0-d/Mr]]#W7_m;Eٙ̐Q)od, KD {U ,AHOi ƷsN/+I-HB' ݹQ~[ڨ .O0 rk%|(B? RT.@_J \Sp TAdz_bsKe dcъ$HAϪ$׃dj]YF l4Y 1Pv$>N nNAtŒz>CԐT!o2G pP+2'UUES6 -8z6_jԎ^+VSS&7. 9 $Q)s3| k$F `CiM첥$aW6Q 9nWj)y.:`(0޻MERCAcodb(0ı q]e~_+BMP7 QFV?&U:E_nq{/ӕ?֣zR')\e_Ƕm?6RR Z>Xfm˯zH`۟kҐ~(k0 =%H@Ȃ﬌A0Rc=6mN B̛c%VtHVq6dsST])"v2ЦU0`(F&h[cg=C#b?n&H@t[=($8)e(N?K-m)˭Y(w cBfz `44ZtDTV%Ԛi&xBd\ONs:N̤+ d62*`s؀RJeh(1QS 4ׯ(+  D䓍)l* ma>kn+GUNwD\)XQO% 8" /ǢH3Z@s.eM֦Ӹ/olFA*rEFU!,jās#ɶmŭ3b-gʽ7%RႧS+ lzhOCƔ_4`B 4UYI呤 Yw4SxZ(b)__AIIF$vm)A?Yv,)?T%xUlv^iݳ=OS;Q޶5\nֱAwGiò'.dN?.@Jq~K3rTRnܰ%HM?=l7vD#u2t*GH/PXEvB !Wn>!{_v] XS? 5j{1rWe%!02kA5qt#2E:g-JOEXkխZs\vn)_MS;a|5Zc#=jqT=h>22Kkje1gBaC; #6;ZfS"A(( ):NkA%oH{xO=A Q߽[E;sWrز+&/p0=d^);V_рߤC$ɀlĽ/%w8 {lMmf:c7e>]Tq菃_.?ly8[@6Sa/ l/dgOP3[rv>"e賲6Pv0BJQ:pufΔ Uĕ_6:jg򳿧90P]ؿcX$@ Vu*_KK은i 1s%i+5 s~.PudrD%{\R_Ď-c$}׎o͈}r6j¶묵/QNؿ\CHgNR"L7;=; 3lK1eϸsQO087=fj5ÎI 3:jBZ{V"Hkoel#r| bg^?JB?؅ŲH~YhP~?nŪށ-Mh (eRQ_O_ 1Cݣ՝k(S-z}._6`1E:B `6ryxJò$٥ɎN~#֋{u6%pxFZ} zj =+i6݋OZ[8B¦]VA=#)rC@oӷrKK 9G%AQpf4 R~!iě6ڎQr^^8 EE" $@TXQW'U`%ɨOdn]T@tן۞a"Ÿ{4n5 B UR*ٗCG BqdNh/E`^mH>8kq\Y_}{W#g4+0[.΅XtPN =}n+);A8n{@@9:8zT74GyG'1 iSҮ+w?oUo!7Zo r2g%3{rN؍m\S`Fgp:)CSfȣhfh!N;^)|[}4ܦ$a u.)2ձps߲zeoղ1eF%OO`0n#f̀pjn][ЌM؎5%Ń5t^] R9x3lSJmk 4̫4w3VcBc$S@44cAi# d. B (2'UC&1J]o 6c`Мr#yğPFQH;XR$qEvpX9Dbb%Kn vNI)XNC y2u\7ǺH6аN%B/n&>,R^\O <IM7&FCzW(/v*:@73$U* \{NISX +~K)07<tΧ^F*hI}ϢfS鶮ahJH,BBcfVLሆfsv|]USbP= LzX۹q2kEaT4kZLb`/gc? 㫨[Ydho s0NZ:pW' OkfF9礅a CP)1<~ 瑃q@ɹkVK}lTr A^BF4CqK<,! . I^I#]b uⰛBVTF) ~iN&<95dWZѤrRi3F@'&W[~i#xt W~is|Td0 8@]hФY}]@v'D8:)~6ަ6g=>ㄧ\R#f-5! ]B|{)x(G;ar46M;0΂|>~T$aW:}U%ܼcga)jЅ/#G5,"L?<2T*;YzJ>GCfZA0'c~EjH7N兖ئa8̟!ocjq>lO4R%m5t=5=P >D§.4wΠ_p_5T1nwFe3t 1/~Z+x+)BJze;(l^ yZc}9Em|6g\ 4_31-7EO*z9(f={C)ջYĖϣq!RWd_:'wS*%}4A3xF/7 >(17N{Q{ѷ0B*pnAjs`wXC[W ] iXg:#pgmP!`}4</i>X'qܗ><s&8^ZCfLEC 8E'0`M`1)胷u[T<7e97- 7ӷܔU9! TaDg}Jd"N8/[yK0K[·zeSh@R<BY8XrKbm>鉹Tj-N.F,]"W N2$LZХ? '΢t䷵dBȢaMw)ʩ}kݵ4 dz667pФwoqkiՕ;o?TKI\9sPg=YTWתma_ko>~Pʯw~tTۓ1{^oߟ*w/KrtX%n2Pgq[I2[>{}@;xPzIExDsY:Z0 Hc$Dh!1AXSSP#R}Ǔ>*IR,˘\P b l;#iYE4+@V ,%Gt`4jwpȚ[=@Bﯠ.ʽ!.VIRkIC'!R溏eN^T50,4 xcmЄ D} K, uGX|mi9%1:cE'y( uI]ⳈK& bB2Gaj]Qp+y4`t>V#[7nmaaTTGy\UO 2 ;LDjZhK ӭC~-< IkPPU/I@@jX*?)q^֕R#z>JzBvGU-fnVr!e7C2ءr7P '$KyQ}k )#Sw^ey,)vJaCR7a0&os¡Y%Ն,?mVBXIIxQ6y 誨'[_l؁*++2j]~f-߂>@AhcFRIi@'8ZX[Lz#Նn)Zr3ib:Eb641sa0ğy2b2uhZLQLu>X!ۉ1*SlrܡF" 1h8=>3F#ݛBpL|yk.;T˟u8+X F>w;H̖(W%`+ "7Lt649OmYu HvvosYYTY)H}_+q[&әTG, ´w`Vo0Uc?C9A\QLru/9.Д2Rᶉ)킭V7A&XỦHOьv87KjyLM 3W )gTc*f4nƅCb@GĘ7ƴ_#J\dFiO[k |Dʲ+L坙{GТ5n<נHWx㠆Q Rl8"0S#9;*$6/On5sL㻗f1oR:k%mY__][D˴dӞ14=?sr } Gh|v@Κ3I`Խu*nt2o|{ND9;d6L8X2솟J;$ D : 򸾳|yW/G^ݳl7%Z'umHHE:[0^ )b JRftHŖa#T0E¦1IV `P{ "z&y1hcЗo\xu)8$)| EZN~zBAz$Bw#͕n!4qFDړ:@l3V殠^u fニ@8tKѴw9F~N|@q<>=Cex)Qp 㪻a\ uEdXȣr\~ϗcBQDnso֨&V-fF;bmְd^eWvoL^Kٓ?7f7H){LWӃ-2%l QwڠSސ^w$hۈ01P`!/ǴmQUӼaqxGs2A'ΏW="Jt&Fj2b~*5}(ՔP}]{~>Уi}1`G؄h:QPoa*MR3x$k/5Kgtrp$R]QgE3V}[IsfYE5=_@MrLlnahs%&]7? .bcjBM ~gv+<_8o8<Q2N;2V"-:8(>B&fc:EcQPc%+:!0:mXI BB[U)S Cπ X_Աg"q@7n^2Yt)WtMzF,e/yGe\l*YX4PZ6QFz#sPj$:]Gfw jpIzs 7פsH9R{dMB:B~:r9J/ 4܅ځٓ5A/da6}欋h|j}>jkbv@?Ld)"@lb@_9BnB]N)>.V& h8P(珯S LTQ)}Qĩ  ?w?%r% HY R e6}=XFKi9L|<}71|hAaA* p%͖H[`TTOggc Jxj[%x٧lk(KxPQC'ʘEαz簔g`|}8}0Pt  TB)9cX(8ċ3_jQԊ1F~Y|K"H?b}KrM@o Ȓ0j 9<y4j_Fp NE ;r~IP @J;GSPxݔ!v8Qf&Fpt9,fʥc@c0:nR^C 0wa^%H T)ʾ}uO'wobȆƒI+GuEZXIB$G'Nf죄MO4=εaos<k8>L iGʵ4gF&<%3pF/"RcOs`Wi s?ķ:aavJ:ZVʹx,1 Hٖ k51H4SpT"Ғ3T>bAjct4,7bIݵ;Q;P&3jH.b<#б׮fKQŎƖt_E&VW(ˆuXsQCc25P;IX'O+ju8aNmFцY[!%K<<`ms4+J){%<tq?9;P$m+BSVtzуKܚh}57qɠx2JK?W`0gn4枋Y+$I|:ZV_We0as΋8`W:)r+u^#,:cYTא*ZdEkA3ѸJsgjR.m "/:Aš?^Z?"|:FX ޢc 2b% 3SЏhBɠ.9DՃ{ÑmLZ؆f+7I3 *؟HkQQDQHX4k Ƽf{}4w.CXdaJCGu)[JB{/‰M /`TOS/x|#z-hK<B"~>Q W.IYIѤ-xKLŞMjQ7|_#ƹ&X?i$Ɏ'I9'ZxSmin[ ˳c*GM_/+99]u[o;@m2ɾ; qáCeoa{?m|r=B98"Ymklz\Y- = !9)xw ]\GsN4 wjވ._e:%0_x M!a\vcz@ f96fq@Piu`YWW B2׾!bj^ E(a0,aic!=EP`m4MHFES F"\Es 1W'˂zNG=NjȹaAԖᠭPC5i|WXZݏAv5x4鸲TlohjE7r92؟Bv}ߊT \yK-㏙6g hgڡsc/Em*z\͆,_Q0eI90)귮%5b=Zx|mTP]?ϥRcՂ\2=tm7kok{G:Q81u&8ejةVu>d/P/m<$!nۄZ/u4E|娗a^][Ek? х/~agcY@b^}SwDHFN=e {Sg/mBz5|lw*|&v;w^1R&88tl<Ρ+Bo?[`#s6`rzN.m}Gg,5%ޤŦJW@%Y4/#$B{7+|۟P 5D>=G~UH:qUjpsH5vTZ)~ ˇ;J{-"u8yp<_koQ RC~f{j&n7:c_q> |}#U6T'f!!d-3OQÂAӇ^xWH{םIV6Nne/w{[oG?XI1-a)ՋJJT2E?Nv`ZP,jk҉A NbP@F%&2$Ecəʦ.;*\8 pL*DP}~xx l:1v(";b$:;4m?v<J~1},tT"o4AD/DN+%bԦl(N[e7_coh2ӉPKG5tEvau{*rgv^PCoNOO4jJunSdm(:㯘t0pߛ`qTF*':-7t\F}@v+|@!v|)^;:euL.M5%XeY 2 ,S7B-H6,y#bL0 kfނC0?r}`\ʹc|}Z٭m og&6ҿGN+݄deq k;o_q0 x LAC?!]a+ ]A+F'1Do5ങ_'`kp8JM m*SUS\sa j5*f|'sfn-<˯FNyomH x'v W߻jǵZM]Qg↎;!Y>>&9Sq Gv#tV`ʒʰdzG72ô0 ;! ҫ^TZlvDL@[g$(i`RGעaT<% /0M-Oy6Rr,c)dQ%*$;c4b&X4]" D:TF.=fM!&!\rܣ_"SoѪ5 ;s0 fH }Vu |^n,$N_,Gycx5-z9 &vj))V'Evx4&dT vV)|^eA>}iMbcҞ*WHmW)g)ލ0%}aw08Xe˱pk8AEs45 qMXvqi[ljMh1dx Fo[)N΁ d b /_($}Z ղq;\vuƀ4.!;2hĖX:%KhdN$A#%%:"wpP1)G-zHpv^E/kI'꪿MO֥8g Lzb\Y3@1jcP' %(j%LZ>դS}ɫRO~߸G0d. @KسD*vV{w}f|*C*8ʶ~_4 VqL@oJVyEp쟷[!qo|9{)^8"ufK}4SK>95_u£IB=C),㱄"*B?vV>Y@dAEbsKFйNN\G`R3%LePջs*-'8[zatcP#䑭bw2ِ {za0n/")8 yw%ո ۙh}PCxF*[Pv#]`+jw@y0h9Unc>G+T똜;/ C `ZPcRWFmvlg3=%|Sp_8Q;V*>OY:S#`Io & $U0ԇP$ԇ[&VH8Vi!DFA,97c BOxFn#Ig$!h (`zֹ ]8.Q>gi})sx]{ͣfckgYjÿhH[~;Ee=-;ؐ=f!,!*ˡk{oKCkso }{ZUA(&&VOdAɨEOgmB{Շ3a E-"눷io`@u2mn#PMXNЎRvB5/MWG8l7u: b =ErON Ty5fLL}B "Bz(԰WSNAB`DEhTIFƹ!訡{U21/XNί;c17 -򴜳$Ⱍfm!(~:|ye( 7R?4. ;ě뤓r<1hN~&h2RN Ґ m/}L\׊>@%7ܨKGfΎ=5EM B7-(f!jٕq$qbwi'. 4,\}]]܈`$N q AЊ!7af-^Ё0{:oة5M$Ʃ:GdD<Ǥ*DFl)}&m>3Lj;jŰa:$X9Dž=bY֨ 6E&@K 􀹊n}879\YĝKᴬyqnaLP=IJ-?J.h*(e{/pZZ9yĖΗ>^`pAJf;VCᄒ>  8+@K{KPFE8)SiiS![q!Ov8BJ[G]hCl2ـ.MPOI'rSg&rgV'0#4ȘycnT#-JꧧMmެP)cݽd2F/geIvQnuYHoP=#OxnGuF0r@rgdvuX{ly=%z7cJoyl`vh1(&d&@|1tPe6+*cM`4\kElֲ9ᩨwhL?$os(κmH|q1TΗ U#m%P ч͹Mn`n tYҲ^̑~|Q.ILaBjM1ڴ;dK w<%3N d< ۤ3"haY`tM]d$7\P3f)R\ꆛ 2ڴRڷ l@\Y DLjo+"2}6_u(;CI]t2dJ)3ZNbtMqY㭠J)7Z TRE3p37JڀwtFډ Ɋ}>7|mڵő6`6L`*0 e(pw6'T4n9ps:|f-%24(AhX< l5_fΎ *{ov{s/W)JqT嫿\̑>q6T3E* ;J.}~49R2w~WN!K%-ZPD&:H5 ͬ܋{#|(8N+ 2`Ճ滗zEeϼ~qIE=lk%/C ěj1Pl23;`Vm5T(9+UɊ2_;K fMg}5N$}/Th Wy{2!K~ GVtsv]$3ʊ Lr:(x*Wݫ2+ }xE]w}@ &p{f}$Xa%T9ǔBnf) 02#(w+UtaJD ҋO|v9 )a xIqrR#W J\s]LΩ aqưYro@I/CVuf62)H^-7Hr%igCpW6# 0㥞oltMV9Jm\^$x'ҭ%;6-y7 y8ie0LBp@C; eƈD6U}>"z0ㄆiol_ ʓG GRX~palRH9 {e?p+ߌVqaam5ulZXx)['ulˡT^}TQaAi H,[$i;) Յ[Ĩ%k7;|HU{Q''J9!*򜫸?hǒEFLg z;؉XR xNl4FN8¯sjW=JPtI1\d]h}ǃJ\{QJ( D,,߄DkFIgYe6]7[qE=KnvҍvGc DP'.QE}LѐDdFs8Qæ%V#7beC1)2cxcq2Ӵ'5fᾅ?7&/N5B](a|Һ%:uCnwFe.adӧVKA>f (6,ywezٺ?70_'+)->4/áalgH\7zZooU6aFRY_{k }w1F7Օtյ?p㿫=ԪZo2ș9T0b EYtTXz9$ D.¨/K'N#;cuٳQ\lェ /I}+ڼm&w6+6lE7ڦ;}1bL) tn[k6l} KZTn嫿?>ܪmn{iwG?w2?Ix"lc Өv7}}S_*.V]HNPxmzat-V.\**-U37QJɨL4le?_Y.#۸?}?Y_ŧqs㨶uVĴ tTdǏMn|fΣN 3kZt%uvxHEtCKTKE/{+q>w7T~D^uF ӏD\iq}HX *~Mk@Z7oUQl2:ٱ#̗~}qT_I>l"9?B3gk|2mhOݝo1*l$ssl wy״GBTTZ+HOJ]bQM]۽Nd|}>LO3>øI86;f08ӏسsGH8`ҀtN;-i)GIQ3F&`<`o4bPGbF<Ȍn`,]A!hG8hCS[f)1F 7=Lw:mjc~n5 h̙ ]{"z?t8l{К &IPvpvĀNMd j& */L Cݎm]W[= #I/tZc{>2t7S4/? 3ivJq .NJ8E;7j:zW=)8o׶˟ћ?͑z ױm+B _mpսUZ:N*{{GZ{[;%#S߭AR;_Z}YߩLyU?ö^AcUuP=k9 :GG5zQ;|[ߪ56~Q+A GUd56/u6vw0-*MGC?+9/޽CP*NAfl)m9cT{;׵fkyWoԊzXo`:7 mt@F+ٳRuoeДmYQZ<ӕCQOvCrYZclP" G#!4.JvN|(oWhچv n䫺]]=tRptZu*ul|0MFJDt--] $7 }Bt.v;Hmfָ^G:~Iǣ݈9i#&4ڟa %y6VLD6"~J" N#>~]|<>_Z'lIxdE%7k>M7x LDnk6fOe;7/-U{=AHp,cCvEm}GFBTmZ9 Z'f/ !T)ex74[(-.bN狋j.ِ$Qeed"F}Ł$8I܎:N'7[9tF'A!f8h#Wp)PrAW{NDPJ{E:ss]M t6xpi"9܊4^)~=:Zh "C뵋rܶD{o_ H+DIoT֗?&jcMH˱'2Wf*f>KuJ/jE% :dD zQm/?]ztim곧eqamG}̙w}ޢ :X/>& >,.h9e{VtkgVQ N"ɟښͮi| h+kJoqrX2eX:sHG:|SQO+Ț3 [4"Ni(D|*?;`hwڈ#CLQYXi9%D.$]XkG>1& S~RdJ&6Ӟ[~SFf$Nqµ!JPPFggͧ8hezy[ZuOK##Q= ΀߾SrUՎE5N%IHk YLTP)] ܑy[{c)j[n#tۖrijӞ( i '{S s%04U1z@dflcsKH#f*1<XJtx \=AZ<{h>ݾ+Sia=#eL_*p(ief(1h㓘 N# ‘: &CeS gIvv5̈6eU}M֨5GרUTu8L(!-Q8m"QEB STV2 ;K:sh0HkM⻪g vӇ1cRk[8\HsZ2,G79drƗ lg7u0icLF"PJ4X僡 t3au|2'jqey]5v\Cx : xNWzeєWgn7Rȫko8$R*)omovyT<OaW{o>/Aàs_uag!=Mxv9j0֝X~A/^_=Ų{qw'}ȠUR8%s*):oDDq/S 5\`/ᚉSZrL=oU{xqVothamW fmv3]WL t ed 6JO&h)`>/g^p=*C%|nF I* J s\ aZYVF!ChW&rKpSfPb:$q}3UrC`<, ?GoFd1\)Uxȩ0`Q,u+:I12cg^[C\mVถ{KҠpd9=XHL4=xގ+#.wWNA`T[߶=Tq&cxXJ}>, Y)[1,RT~~JV'NY@x~Sϗfk}## ]3q>Dc'rt޺+BQS.Ifuf`ɌmXZcbmх7IPY\: ff=V6` T4tvkFo0ZЦ F3P҂Iۦg XjpX[li(eHZ6CL m9 z9]Bt~DA; 0tܧh46r{mP+MpZ{$OY߿Xb,nt9 TAۧH)`cP,C4o97z v=v,:3 K(Po>[RhЗUGh[oGbYS Ű3 [2?s}7. .i nWJ#e} wrm&^9m[j Mt+Jtԥ3*ypXR4HaSТ fK6,f%VBmR佊 /Qoz1&(0ϐPN\S&zx:Yɽ:]=A?Qn>-I`訰Ô˯)]{1OEm鄅yU,M3[)|di):dzk CK?0ȓ *9TL95k[h-1Wï[G;_e=viٌz 5o ѥPO: ">@AdɊLMq~KS 8&,GӭSE e3K%o$jH26*3;8~Q}hfU9RH@U}lJ9!anw>N◑\2R2nGС1NCi+)jDo z=T PGU:juJθDDwڲsvZW[Z-i-:E[mS6~Y{-m⬬=!"N3RO`)$!賔x|pRp];dj} }>kˤ rK^ٷ+FGF5>OosVŴtʘlK{,~NKVRZz䷴TK?uE--[m ֐ Fa"+ѫb 񔗴b[%{ƹQߍΦ il(t.|m13dY]$Q-CQ/r;=sh lI( %m iJuiVZWc$NUbeE EBw`"Ͳt\.vOsW@<{ O"+;RÂk݌W31ѨqEN:}Gz%n#D2ECy $_l"ewsaP`uFJ"8 H#vK­NqR;:gҧJk;66z␵~Gpy/6ݥg?/ja(ao ڞE!DT#Zb^)(sj֜ȵ; [PɥMPr#(vjDdL!H`B Yvh1AՎdoSxr'2l]r'P\K(HU -[^} ˱ ojt?prsuh!9 /UU~L=V"-O4%˳gͱ(ft9Ϛ|VuGL[}$g:3Է/aiߚI=m{ {*Dߓ>\wϙk|]^ k%  ;GcF]7H̛ Ra>33sdfZ5qkϙ$l"li5GoU.,_h%Z}yREm $AAIW ԥXfZ*Nrx 0ypX[ߩA֗׋\(Nx#lbn'g[*,˩S1ڃw*JT19^]Z]׾S6KOY&g9q5͍5]6 yOsg˴Z}˔csv:? eu풺TCNdXFjEg"nK)t\8]+rЙ#Upr1y6l"yCS '۔ /Rxdz{G''ĖWӵ'VkGaRZR `۝`NIv՚cל`kAoEvZcowL H %j|t< mm<`婑#M`2xݙa P#0٦hY{ī,:`d^Mhޗ<$ԥgp㛝g[q܊'V֟<[[Oۧ'SV^kOW=zZyZm?9}NOA;jZzuZ9];=iNV"MHjCU!JvXk$RAN:j.# e~Uq_aOO8ODˏa.8Z{zz.G'O(ɌWD~k_7joSq4[#J][}w#qUIfd'P(л9&:(+ \8OZQil?z-=[^{jxkߊ>8}_/F20v1)UrPи>xq3s $/˽:aDc4^Nrw6d v=RNg.4C=r%k tN:}9 Q%gKɱƊzE(/޸Iq<݉|)q5@+G?'e]&G_Son/r~% ft'W=s߹ ~4.JyHhyvr\^CU l^|@/U4<5G̓ћM(hгOK!~|M'>87tmBLQ&22/;U~yQGE!MU>]oH`$K+@ɡᷧT~&y*L<Tߥ`n@H<➎Tv7/`ر]ktrdYI=`f ,/S"u 5?>w)ŊVFIUgFEe)($=bj- 9Ry\?R@vx֏rJzpDUy5X\L^Rp9ƵHA[_ظ8bS9X( 6߁&9E+׃ʕܧY|"BV=zLm'z6fy@xὙmpFFbԦvRh-h  P8@%tC)J59,63ɵ1>o SFGspY *uS\vm lدzdrӐ0ThԢ_#[o4-ީdwGd5!:䧶\4]#c/P֋`zv \Uiԭd`>;YNֽud;YJŀwtBDIQZ ú>Z.pPngb[ ev蒇smMrc?߿^TWw).݂F2~su`0D7g"Vuh>LPRQ޼LE`[fo{svs 4maO '7U'm/_W03J *sǽq|~>'eyOt$OMmljuuūsB>ws}>ws}>ws}>ws}>wOvX