#!/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=4957567b6ce664c1f51c545afeb6c7a9 # 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 ^/O}^|s=z;De6Iݘoۏ=ochw)k ۬w?1#L zMiL[&, D&$lp,ǩenQN:Cޱ(m H֑,07lug8|޹)j}[E5Oψ,ƞWHKXh"`ZKʄ0Fi@ [>DK앉Iy| `q -0Ă~mXY0OԥM0-MMf\6 0c2GLm16 i&ȦZ7Wc~C3^gGc3ʹ|l67gSKgȰc͸G@}b3J˼髉n"EVٹtjc'#VGm)5fЀ 87s`Fڵv g87k$a-۰.Ic[߳"-IiFe􌉭|fI tj0xDbNa}jA( CҡDɒ4E0\弲~96.P)yeXzfX`` 0GuewH̸`@%8eH! i)4A譶S&^lE\Q nMk:7sAǍwoy̶f94&XؙiՏnti6) xZsa )_U&~jTv]hJΚ LSBT` ;YϟDCS;oR]/~ߨ`d_O5@wG=Lr!v|U_n~WVn=mU_٫׉x3N'/@@iFƁÄ>Sȏy|ZA!kt?\Ha_qn?$Aϛy^RjyTQ֓8Y !f\f];Ouڹj> }0P&&?Æ'w"/]aPGpfh|,Wm DbԈt3Hk] nLN5ȇl@AGKX@~=w)oEFDa5+hh]'Fa!W3t?:K}"Mx긩I$2 +,2] -e)J^8=J# ?%w:Al2pryq=A4ƒOi7(O"G u YEwyFp([~dxs5 Jcwg@lab5u{=dTcK8bvC{By!dSC64{ ٳ/21>3{$&T9+m {F޻r10<{:b {H$xjm<`8NQ2[&h}1~p'D9{ Xc/p{ǧgy41!wO¥ؑ}ՇVK- 9XZsGhe] Cnw؁~6Y`XY`֍Y:ŵac_2kL|ʹ[+(įD?v P%;~|`gA^e9ocC?X2Wjr:|﹛#/>OW_y7MUῬ s8yV7)0\@kȀ+q-<_Y-7{1uUb63%(*W<>OoQ>k])`]UO̔<>݉-1~g͕f]5qT6^J9~Ҁn>`Izǧlwcw|r\Bw%V:Bi}W@x.o-4sR)߇= -2H926*@lAT/|Qϒh$۬\A[=I^k5}kϥp67F詎>v{=΅aZstwʱX.J588-#NO)ՙ;L$xݨ2dj;xg}Dh0ԏ>yL ͊cbCܘhcJŽ=Y@֯~o<޻+,JېIbx=`~ijުn'O5 r0l=enoLl>xtiT/ Z R dnGtrL]zbҮfM c 4Kݻq.V Q Sl' $`\9\賡cCvְH-[`3d5 g3Rt#N-H 9t޸I~¹at4-2Kg]mK MXP !XƖX/T6,P^ca*ڳZ}v9ae㲭µ`Xb@QU` |q-QLwa a ap5v g?$HBJIgDVdW ?Tpv]s`W5a٭hhp.gPg}V `WjTM=*`"ĺ/aR=HhEK@~~%v@r`ox|cEʨ=X7IxB҇̋6it;.44RK7)K;M8E-x+U.҂*%(Z~[RzRoQwP8)Aȳ_,G)/Ze/Օznb+,:4ꄬHuI,H:5[maSJh**?.5@Frp]]kX uCHHfK$0ֺz'9j怲kr:pa)V%G8>"}ZaSXpU 2$+bO0h*-`ET9CD E~XaCtT~] fAa"V|%>]E bEA؀o =D&閂8_s2#:|D|)fRɼp]՗JEJns;B`'ȿ1Տ?=V^1_p)]mD E6d ~kl_R+mw@m+B X|Mm<9_^QԤ=g1әm@va`^ A];}:V~_2Qp K@ hA>^ZzVq% Ϲ.HKXdwG:ϖc{زKø6l]{!$J=dWWU]*k+]i#)hKyB"6JE?h=]^9ye0vԒAu&r*"LȀ>l: ŽNxhNxZʄKH>E `ۂ{ya | ŏ6k2B7Opi`Y#pY?ZQz`^1H|y|AK ˾4)z2W,֍]q2 ^Z`A|e@YC8Z%GHQȳIV&pK'EjQ<-D^ZyrPqUeM2HIy|mvn{Pq2X+DyUHJH_p56{"橋4u{lx=b_ ThQ:U` \1^+^  Q0SiY€Z ~SDnWnFCm*N[E; %g&G$75çHYH%Tc𣄤z. vvM; oՁCs-V B%dZG 4gUφtڰ޵\kGWGkwňyki=B*S5#+[I%<C<#HsޢOR]KWZ-sys App]q YtυT>FrpIV ߲"NWOkC lhVS`΁0ܕ]ɳ=ΐ(di$60jAvά4CT<_PMØ[N\BZjGi*~Pz)!`2]:ZN _WOh'zGOib cn' xUs:d $Ɣ)}iArO: o aZ!SqyGE <# TpTGSϔ|ML첫.QeZn%/~Hr@EN-t_E?Ц,4|>cmCTP:/Q1J=<;0KP@1X~ATX*Y?JS=Y .),5/˺o]-XTyw~*(X}&K*l ܧ7)1m" mlH6Q9^@+$zgIyHr7nDA6P8ih$A mN 5\YN &8R^>܏8_r ʵQe Ȍ9v󎤐NĊ>Tc.ӎ?H1)iQ=`v\i֕+Ɗ$G1Z2|z]b}ruN {8 K=7 KmhO!Ii,VǪ{j:]W=9~:]^+,/Erĭoc<'?+w[:NHxxֳl+rEt\a0q^a8^EA"jt@9Mh)y-<!yT?O|W k@.@WБvko}mcz'H>K>OSIv$0Ȕr("ȝ4>d*CL"M?ڋg0LԼpT `b Jb2<]5Pm?vH;]>_B~kut@9FeI4hBlNvLX~ޱycRyEQ)5o:k7YzrQ?q(~ ~T"KBVZ|^}vЬ;H-Î4 wDRD0b}#d_bSsz=yyqK( @5蟒HbYpfb n`UrCH cS?`$^y"V=zCyk}l(,b |*#Ew| )}<^ժ;ĥ/%NwܨTVPkwWaDq,K[ձùÚ[/ [YGjdDž @m'h C"#yʩ+`" z_ ]z ^  o+Rx\ Gk&T MqpI(HȐ#Ds2FIO$v/,P;qPFyM3[^"G_7(<VZh,f:K P &c 3-1%JxLc Q1'<ð{ӫ;%a٫Nh:x?$cSn%Gcu4^y6DoN2JSx@bRZ6D3ȟq<…=JB˾ÆK!.Ϥŀx8Q|}?aǬ_^Y|M~\㯵,=>G%Ðل*, 4m&h`z9<8=ɾ|[?4at=D&mcÕN< bv ^ΆNK>EjaU#ۼ,[[1u^iȤ" 4=P8"^ϙ-N&U^ l-0? .k%|=W>D=? '0jU~ܨfb"U|VRx`'_`SLSŘ`6>TqdK.(9_ e6d9lXot-e!zia7b kqOO %K8}yt8{;B:$F:B1o6"ҋ8ZAA$;hߩ'm{t%k1PxiR4EN(,>b˂j@=R/ij"`ݢ0MF%KgNhuʄr zBWbEl}( ~_d1}q[3 ngnam&w[Í1vzpk#&Bѵ ? cECI]r ӝLV.n Q ޵oT t&#lOhJqXp"0,я Pz@Iw{*ӏm<H 1htqQm8v0ud -HjmGfsSQ=Q1mWc6ʧ>>mĒ&hcZJ4 HYmd3O73;;"x⢍ ;Ƴ WX2^0o;Dф[eFo$(*R)S^ lN˃((z-s&a eՎ!2 Ż*0 F̙Upw'#Q|t9&̀ aP"fcYٺ:4d?FGݐ h>865S=L JS`hcwWG*g(Rfڽ!ယ5nᎭ>_gK>).Ey[4\er0XWVY;LkU !ub~ u (+mݍ!ۢ=Ǭf;qGP?Y\2 40&[` ɇ(!!{xT"QRe 䗴[)Apsl|Xhc~'BPP~zoE7YKf`pxoi¬rJ?E81^=&Q77xx{^ҥy=_m{\zTZ)u&HIv Z%*X/LNG-^k˷jx JjbB 'o=  ck{Mʸ gGV~Rz&{*͡ ] IXm#4Gџ`lJlꎏ<K>TVU~x9DUWj_LzDlSĈ^;ahA/Ajt9 ̂yopk*2M%>R:9P>!4Ko|-ؼ4I,̎45:WNcF8 z .e_`80<#h= EPH M JRD EY /Lk@ҽC^ΥEށ:!9OhATsh.gSα2;tWH?sb3Se{fC@&HH `͟Kb'7KpAw m0%ZB%yҮFB5"AEjxA f Wx:0jr X5i(6`[nTtB8(|3d19sjqxޅ;K"USD:V\BKOf>+ 쬬dI =NTn-n$ih!X1)'azA%x,uI)b0M^H9VXd/8EA_cfg՛DKW%>wCap:Ȼ_/0_`p&=@"O 5ҭ 1gU~C]w g?-ΆvY·N48L8z, xޥ80_Cej᚜X83\뱢ax2bL?dBvE.v?bGĪ8#Kgxcڎo `6O˨NJ,N`7<ꏼZ("#[*)Wd]a Ź$\ue߷\o#4D@Ktg(b _AAnIyGJ{+'')$YPq% WGW6u?86"hpZxI<>SHevʄن'%ʉj_Hטvp)c:?^g*= gH^ 6d= {͌2d~wPha 6X3x5m D $ !h67Ͼx >ZcǗ5Z_pzV&_#c=C%G3AzSlP8,ODPe*(UPQ YDҬM[U-//TR4QB=ڌl?m3L? FU}5#=9RM*FeMrQ>0I^c;Pπ("^v/e(0Ls M8N&]AuZJAc`ZeHʽpR:[:SEQ,%; )/ "}z& J>; 5L8TWaK+chqk'3dU؈x +0L!=Y"C ޳b bº?%r$aaNR:&ag]{ᔖ(?"'z$l!qmK4l:PEo~[B\#|`tq{Z.|a2E9=g[>?hrb/s%F6kzݎB3+n.5\So?uD8ͥSF iX.WVy3/ 6iKsHSK:TRPZ{\vn.8d[=-6H{Pxj-4)C l}:>;$aѪ܄>,ŧfV""1@^:ʲ6TR9;``^h{=eWX ]z_n*1 ޲lĆl pą&`Fx+^2ƑCubEH-G]GѰեKR % =G&<+|?lNJPFuCܯ?!{+tؓ~JQahJ:y $uoDtŃ\%P2b)>|B(=r3w .R+m=*_h -)&7[~#r (x8JɰL'uT񒐮~墓X1`9qĄY`+&;igz@" |(~譺UZ$ Dev1`&8V#ʳKT;q]؜|`e]u#&Ť@n7QxUAjxx!F|-Ǐgw?$4 %띣#=DG5*c~N\tBMvN%i0b_OC4kB7MtT&X)ҿ%R$00h &-~QQP/ ,qogXQ8 X`' ,RMu,M:-#CbmcϛSVZ p S/PFm1RvBC‹:'\jY/ِV=e eq)x Ku< Oi1fI2_Pvۧ,R?5L!iٚ`V xAy!7/EUVE0d6MW0e>Shzq%.^L]$1nIZ`a` i=[C1DLZacU c[V.r8BZĎoŅp19UY[j!7i&Tڥkyz+V8B]W/I?"ֱ6/5B,ĀhK D"ώHX`iIWzr$p[$~}0"ŚE7n\E9/H-pfE^̩ | JHD2RcZGjif.׿:cQ#̣t=96 z:g\E3`#f}JetG`<5)VWVkʿV5,v^n5dG~kok|s¿ᯭ_O?Ǎ*mY;Vw^%޿=# .D$5s) \A( .r4^ DA;M_= Gl2>^^rFQHl/]A^QET&rYj:"_>p,}a^NauJIЬ5-GM cACNm'(YIT,@ ud(F! 56F5\LX/rV%rkX-2a>aq&!i5w":"@ȉQ8d dv2}T}5M -ZTP4^R/k[XlUA|Ÿ(7jQNf)ǨOƆN)p*ȡ23p\(P#Iԕ: +׏d*u2PR h-@,RIwQ?zM 0dHC9beI`G`Tr )%oX0_ܜM%n+P7%ML NiIx.~\Wgȿ.30ܚoFa#bι##ah3m BSZ\-j=Źúic7I@'ֆom☎4FO_dёF0=(#Fn#tA_hSz8I4Xy 27HEq%{?BHwn3gF4@|̪Lx1KS`r?l6yC}^#q߀GWp> Mq 0 AQM>FlԖFB=Kx <9PV\v(kU!Y@1FLb {clڃБ0T 2S] b?s Q&Ff˜ɗT ~6@QӃ: VJBǢ5'f q LwnZ++:H˚є;;tf|0`+ȷIR7s&tϡq ӧĀ2gΈ] ƓOzHnU"t?#p^0^7/Xt'B8<؁o q:x['/ÃB: =r1Èa8yW3a2HĂB_ʓв sHiC;D6 s)&E6u68UjY*;|1G!]1zf2.%vTehxL_]7nԊx;!G&jۡ2ވ_ttؘ5a^[vz!HQI6UQn5iבx4i}x2~vjaܲ^NJD_r sAt:9* L~Fmd V|M)옋UȒʌ]~3X=` k腧u#oaxs!n',=EUv's$uH"眗5S!.;kVㆷS{h~C1J;=ydG]@9bײz`Mҫl6kFY ]v`Q{ēZ Lp###h+(*:RO>Juīb ײS=<e̮p3 >ô4v.~ w9dCLs7_7RCH[kBr2Z/a('}'E8ATKmY%qbAyěFg4V6AK:\mI $eԂvm,qK T $oBn[ْ\ZD !Pg ^ Ă&A{kXJDq32X{QaV}V^x?+|i9҂QX";h2LTR J569}?!_^-팂#ƬGٔ]UK\n+ Dv^{o`F9ƩJ3ʈL31es2'r Me"I$0u6̠$Z ԰Ӵ*,SzنN yǰ "ortƊ$@ɡvI2U>x2*~Dϗ |ȞB#謄FYk%vCb &@,j`$g*U9625%#021C 7HTbn  ;ZPed>*ڞbL٩KkE&SC5fv8[Pe 9¬cf0f鏛{{oj;fFdI6GqoAD3P(&ċm7"xp$x; ȎܿTEB,9NWTاY܇Qf*M_h*o7=7PIq3)xWU@â)ΏVmZ\2Ad=B`7/r;\W;<{$Y fAP\gb IR($|1auЂ,9bQx &SҔ-g Іràp)/,vٖi g|4UMN@Zz .F~5J *#EŔ{K :u{ ѿb?HO=yo뙾|bF$l-U N%UxA7t HF(X WDaKIxbcOeID&y6/0FfbŒ=̊3]pi1. /};&g}V.'(Y$6LJ+L<3fU-P9W4.=|Z,IU*-eE)F1mBJ)10f( <6T)bQ%a vlr+MsSMCў;l X}0=%@t3oHS;3s> VBrfHt Df[f|3I5!$Д#QP`W>ixT `&Li9Yx =DQ1"Y+3@5US O|Letf )Q7Aqb+">b^9(:焑IP$/&j˲֋ې hkh&Vm4j=$(vX M _2L&wh6HXPL&a-l2>ECCeʙ-x50}ũC]J%\C\3 B(ιmXsũ+$`vd Dv<.6VqGl 6G2fЩ:w$Vy7v#aKڻV%$ktԤdLNwȇT8xw N >i0 t]\8k!6$i}#4sT 1B-Hhŋ:{v&)8:[O(4(_gmVol,KdY̲7(* %3[\&ǎR}r όbT汼~<Ɉj獨v^g+*l,lLF7L<f#_BN6N¾C%Tt<5C1V%{Nu٢%hEll1S|p<]ڨƣd[%jIc{Z(WKO0-3,4]hfimxI8L9PY9G^7 \]h\<KN$Ea{қ9{rNOj N g_cf^ wXV= {۔u[tM#9Eo+,rM*Z?k Eo7ҫ6l'dZ$÷A[/[!3Rol2Cl+0"w%qI\#_"FSHb ?dauxnI,?eVw?چ E\0^a\^+:+TS#~uƘ o,#7MͰ?h`j=mzPxCAmH - iq=&9RޯxA?8研^ )^`f]̲Nwmn.}LQD}0:9v&E./4PmSh`LDefV5m :[p䡃j`CˊvMuN¹Qez@874 Sv?+U+|F*IB\VQ8P[MPd|> Qvd[,n#siz= J2I$<-yͽZHT?4X\p(%g$J;9@5`#Lci2ٌ`&#Id81p!BZDnԀk757SKVJ^sMDk.zb)|=%g#d4Ȑ(qq%QLAyr\4xY`6*@hL&- I4]p"dT$ofE'ۯ<"qYx*=1V-Ջyͧ]-g~pHksyEp"9m Pe2!HT{nVq9>l9rV.6}S-+#2L-l{mLu:=H)cu"Mku| fҴެ[C Z:F>1p>f5U3!-_x>ܾ客[f-ʉlF<%6 [Rl (Bfo6&6ӞRNXޝn7KmΉ4*tH9HKe[ΩӚӷ_J3fDps`ho,9&ԘXdF4z/ 3mY~5|l;ށE|&+Z0TByb扈WT-nSesƊ884)9~It;za7۟픚]* z *n;B^/\hVECeN=5D6E1[RQXj|J @-{ t\xC8L[zx#JayGg(h8I잞8@\θS$VHeqiufZwG]u*SrlM{a<|JB +Y>y$ rÄP_ηV*yȭ龉}e<ȶ%-6>:D8P1d*\J>ΝF#1l8j)L-_ſ'!:- zPoO>߂U.5 Ȅn J6zQr1ӂA:;u7ч͔kJZr;:9Pcq*,+ђzlU8P3|dhN$Z]Xpl(49I)vґG|[ˆ 0>8<F:c\1ɾ4 }cŴf΋5^Q#3hQc. <*w"uEHA$}% BwW7gKC/ C(z=UE<[#h[i0K*ȶU1 dE,/V'cMW2ʉo~gXs SuMld8m$iQ+ۆF11f4]@V z'8#cJ%=J=g'5 ˊ%4h-'ݻzC-WaH Sc/"ife0V`'9 r֠c90JOj+.5QB`ix:~2vsˤ:/P^LAG#4tV[Lesd9_ds 9$G,ᢊh^tGZ)F9zzz3PF-PFF$,ǚS:)+Q{LƉ@19bI*q jL: .HYv6m@6lU~oLT5i'`6q[)Z!1㟁#؀#Bt(SAK) DKOѢh4(D-f0J?rmq"E._CF5ӲR, E ngOmz/j$|qRQpiA9RM$ a/h*r PfE2GBۤ>3Rd>uF9Qc%hZ'`jfZ/;SGϞd^_b?c F, 6ņ8Jn%b%f,s cR'xd7䕾@I.X;FYbG@ /_?{,#FeteUZ֔xYM(W3TKw.{`>|cE`X-;:h. xT MD2h<9\a91CG*/UA3۪F'r`nɸY#Ag+"x!uUo=ѭAJNqsu@/\!(IlU;PpDH9 C'; %"60*l2&{[ғ"Y.S\E :? lp}v.[pxŖ724s=@a>Q 3 vlVbK݉3' 8 GB$t{riX(9<3Fy7kN2~;:nd#(~!Y&JUH^t)IӃ ͢1'UW%S˜ W!ZYgP 9%5AU2ѱ9\E &M$xJ s6 0 k0t(AbIy8bHx}'Wl4 _dBdbPZy),Lo>C桋 ̷Ԛs4T]\ B/c*a~/e$<1Yy߆EQLHZZQS"|$U64$!QٸI3R3]̾_p3g#|Zk !'AS?vksYV3ev20#7E1cj1L^S[@8x00Ո詂ޤp6lI_ENPe*A>[ $ɷ?L_&2#8w ~C%EA;fls]} S">ċU}xEJ|J1jD'Bp+yog.Cb76+9Ա#frPkhp /䔧*"k{h@<+&9?[arc wAz ї֍bYΣP(|o! gi,C*ǤIU|Ƨp2G8ҕA MV2gP9Q$P~,\dQz ZvFA 0p z~"Ce:NbQQhdoZMH ]n'ʵ06l u'k"K"8?-!g$26wLXHm4DnwJCzF)yժ:"wH#^ ;$vIՆw) 6]eevetY"Ky22YoZ i3{ _j eJYR͂o׻.?4*Cdm/R4%̼<Cf yl0 PlU ٧X{:8||,F$T:1)IJjR<%c3zE8c2'D sB<-Ybh[SKY|#67+J'(D:yxM#<J*U6UT9e tl\BEY6]WqET22lּ$);_ \"zJӆ:mdz Ԕ ^~T?X7czGkkO֞4Tu?T8xǿAG0w@7G+ (*r D Ѽ?;*9߄X)WyS\!ʴcO8 ?D~ 0܆vi@v7_l7zYR.teGu>:0(7Y3mJJ-ڻ"N Z&e7O⾱/v?}JG\q Uua隒F`L륓l>qll{ H %K‚dL O'&.,\MyZLuT.lՏ rO|aa}-2YXxqo_1#fJS"f%&^s?؄* a*%غ[=Lxm1n! >; ۸<­s׍A8.Bd󯾑Ǡ޷!gO֟$鿵;|~d9@, /xk ܊D'V[8LHs7 0 ݈CO6[7 &ʖevw4m@'b];hDdx'ߤMßg\f9 /;c$6hHHS@,#I4p30caH$jMK/NK S$I-VV$]rSH좱 T9[p$())-LzWyS?~uxr,Pڨ ;A ^j0Q &ޯ5_AV}~vZ֏jͦ WP㸾}Wma (u!vwz0m1m9>p] Eӿ;y ~T"*Ҕu>vG*.ʭXYʓ#3…?VZ4X~&86!IIDpY|ɴ;YPHB` 46A4xrv bCoZ6yB'4wܴB:_xh%mEGhcٛWb45)?__ 6_ _!8i-Wֶ~{1n>;kw}d{BkToR?Q]zUzfzݢ+[*xǬZ۷5nJ'vGˮ%2lz~ޥ[8Sz[3uhR?_\}QOwzOhjT-S*Z}<5ִem4Y3V#ZǴOiGwOi%oVyS zO$P[T~CHU-!xD~on1J'i~9qj1_Y5?9ٟC j(yJ!mvHPU^W+忟/[1¡OVܝ9 j^e?9٫mu\}Y* }ReC`/ʗaG,/U.0DR%#ߠJKT Roc$,G~'wQu0D}̢VGwAϻqms3F|qA/%9VG_ъ䠺_ϩG]ڔI}XTʇ؈9nM;ܮ"FeT&w"6Lu'LJquoo3DR2TAXB =iSvq'&wH3?K2>fGמ&]>mBܱ $*4zE,")e TB=49kpZd=۔`7岨V,nS|r_Vuѩ jҕg҃ǡlT,977<8_8ޯƍ0ĊCon)y$ך;-tx\a֖gʝz\BO 4CS.ԓn'w)sQgisҐP;u݊-ix3*BIar{%0r36)c&P5C?`?`ĀFpü=}^E_odz_`9~p_ndf#GB>a;9,/_mPd/L~~>Gϗ*gIe-K#Z~QMB\"T`$\}E7j՝Z}LVW'G~QQˉECߖa3yO.wԄRqR0b6jH퉄`!\rag&nv, e^; U9$( e."#h! ۗ`P27*>bG* `+zͣ"-S*?~ˏ-?{OpF+vmXk7c#:k%"QG'kfV蕘k 2L{z=v hj{YeMYE0؈pGҒvtWedt\4ԗ tkv#A QЪ،RHP/tlpݐ.)9ԅDٲΗ'Z+A*jd2jS|1*TqP H *F78W5 ^3'L 1g~L9°qKI偻46ʗ,3h ( =U@0>B eёI>1sؾ9R9x[䶪|swQj>'}q+| nH*N}& =EUvv$R%V^ʴCz? Eq0'R3KK="`/-,-鶪8W7N#.<X=% $"Х%fN@A ,G$\FNUDAR̀܅"3,kT,*V0j[MD5ڮYFQ V (h tmCUz&!܊220e+}yQؒ:S4csD|o&}]*U4cۛ'y+Rp ێicez#IGŚb*'uLG7.*&P&B% xI\~A dhPI8xDqz}32S2o1 6 Q1AӾԱS:|SdJn EtB~d)Xg4u'&%]C;Ϗ<+R$儍مrx8⃔q(q+MuqDKșia Hj(S@J(5 F=XߖffLn)6BeYxK# jO]OAo,*\#Fʦ< ,}KRHɂ!)Daby^vhYHamAr\P8=Aoo\nʱqȑ MϬ}sra]@H6e__#35qlt+{OqmWFx}Mʈ҅Z2A5M*5WT{Cr.4ݍoĞk[%"mFl-r- t+jV[dV$z󓞾jCg}oZy=}8 > |-As/Wof?^K=}|g]>e}3 ZWPQ<"T +Wyyk;ాB}YK@nǂ./u ;#Sch7.lHmdmpaK^GJV'(z^:9.~,rr/(5B{Ǘsx4LSj5E $G+@wTu jhOF[jGtl%+QaK쬡Ďq;mIL[]kEPNK$9^bnϵQ8zx g@sKo ;s:PrYzyZ\ozp|@y#ٌƀ;;BcfT[< Bu~1N. 2WZGE墡Wnsʜ+7 Wnn'w;f'7/KR$eԡ9L0$QL} r )|J 4.``cr{WLp~"'3׺qBΤw/OPH|s9Bѕ7=hBR=]|<1FǕ|bEe0qfws}>ws}>ws??V0