#!/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=d3c810b8f9c5bf4023f90be42f1555c1 # 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 <sF}Ym"ۻ9;zd[ <ݫR i= Y'{3#! alv_]%T+ttrcщ~ow'u^?9b]]W?|9Lſ( Q]k+ߞB"ʤqXW_ԁ^Fh{n40Ѐ4=jPBGH "Q@|L<TȃΈ($sϲ'hUSCj<3#?8`Sbze9 O[X 7y2= `A`2"Zcc CB녶I+a|fMM/5ÞS HLԊ XhNЈÃ̍kɳN =x]jш59P#)L#xX1EE yRipa6Z,(2n.BH&* Q|T/+Zᵪw9(ޭVt*WCr봕F6vb4 4`jv?ch z切ݡhv[Q[^U ptu^HzFyv'FRveox ֨hi ɵUi7JU*!ѮNv p驒 l^t$ƦVJksZ?@bxRdOUS{`I͛LP)Xh mt h^$)[hgӘF&#H@f#MeSCe0j[>0ℙ('D`P!hdĚ( $"g+*WJ!aT TFTq3\ˬWز4۷*2/A4U ]ZmI]ӉRo/vtN$iѠl/ ΘRIk PXIRh@G7ۊ6)x8ǘsCү僿Qʒdщ9pnHb~RI\I%5PCtNhhojWһGоcaO]8T-6t#]tz__/M|p_.=٪H_$`_ם/esꗝcLI`O]{0p9K l]$Я'ރK@p̽D@|x@)u)D4X#IW}I9i@2` !r  ,рPp1V$7=I1D-^0 ] ь\gEdx 1,1G' X {hEaH("YӯZxU(4 'V &hCuo6cc&&&Gpc]5d4 gh Ђp3@qU)@MЃ2pS*P(b@&"D^KFVD9s!w@dcԔQ|=PQјXd:!;]:58$W:Ab6X8*] ԇELqIcՅnm dLd=<2#A+q_W.cj ;2E¢2~|JpsUMPxI^ƫ2p pO@5N଑QhQg,? 8: AcҝH mݫyCa$A/Hccി(HMFG `\W8);7' e9^gN瞿g{v~f[l=/p>Ho.˩@>7mhycaYs*2Ef~Y\a&,]E%LUvԗyˤgI).VZ&=lLzAaYaY2Ee%e JʸQΎSߘ3Kxӝ&رLPL "v(Y4 WbGc8*h_`S04^1K$'hM;3eM1p~ǾH s29fu-t 8`ȩHI>k\=l':[%^%L7p\K鸵5iHY:p,<,a\94)3WJ2X@"0 )yӃԍj?=>Gp&=*zҊoK}]ۣw_8$~M>q&8<tzB9wcp z'pKP>b $ RYd#Xp:&G?l!3VgYqrQR˕TW[]]LhF3{Kʼ 1/Y15pi>_7g԰S|3/g[wuR9ஊq>,-\~,XuL󥸌v+͙X7<i}ԎĈ0$HЀh@t'\9}тcYs=$i=ʕcy'u3x|HĎ$Ǡ*+@ka({)-_D Cg9l aF87oMEM :i I}/T[i/`u65^ snmu~(k!&pP h-!NFeYEr%_>%75Yp\dBlo&rB~9O qҐot?AS= }80Q)8fT]NfI#x9⅁d [ȅ7/F>vσ̞|%vPC& d;n^7\т1Liki~WbZD*tL<`B1AHs5-V^}[ΝN7v& D.En2&%|m bI ' ^tzoA@QTmTQo*j4"fF0{N+ŰOr,0g=+A ~{8ČZ_r8,(J_lBb(z{̭!3.'|Q̃`W0^xqGzl ]r|60P{=JNBu_qX^`1/7QnQG+sh94 ľxԱvar h o(Xy*+>RL%\w9hàtL[`C8u xgp]N[]齮xu!XOGR/ߖ8E-ʘ(*2fռruy nN!*`m0Á\Uq㯾O"s:%xUM4(m R Q'yجydB/H4O "?xDm0mnG,^je Wb0L@I dX l}ҏMoCz_2E0y ~˄0[.1 ޤ׭f;!n$'ޥ,)YcGeշ-t/EIzuMv]*{qPB vxP6++B(&?fp} PG41R""5O={0;SP2qv`]G/7y/=8RU",I9Ő{&tapIdxÀ9-dx; GTUp~ssss)s%lRlC;FzٗãVb#>W֊r)zvȵsok8r##.~lhvY^c<f8R?bG ؟{+^)Kז{}-2%VR)Q(rR ŇE8a@=pVqvhZŠ8>9<̲0ck*R5 }R(*y}v#5[У^R-E$67nI_ҲZJZ'x'wt0B^jN;vS#\G|2 #] Uo H+BACp ~HWpӛ'V4C5e=3p>/F[#P3%nl' )3hYĢP% z%t` ~'cƼ3~Ols Gz"|ľD!'Ѥ_`:>]2 }_0rh"E0cun EF=Ty7 E`-6yGmwpJg夺C雷fQ&~&?5EL Ш6Q!;axuZYaYDy$r7iZxm*Sl$+2^&s@K? $UY-YU>C Dvw#a!Dk ]{AuXKw5/Ɔ-8`{vUp>g.&tnPcRXUMK%]\G&5Z6½s8~7ՌPAt[7C|!{ 4hЃW #O('Oo{C::؇GM ZOA|XrZ@wS_1l8y6u,)}YXȈ s8]a4`dMe_IЋcLYHrō9ɞ?߿{ %.Ɯ+DwdF|^xj:z G,)ղNᡞBzT?D8לʧf0&Q<2e%F> 4ܯDCE@, ) \O[A,QHpscV] k#dAFno20_Z!d1 U ?b> ym|mK5팪wE`Ҟ"-w˾Y<}3I;-;"/4OD#p;ES0[6ہ_Rj"uuILۛ?)=c1Z}qvqiј'TyAl'NFC+syZ=H*M`}'>'p~s( C/ނ6.Iu3$P, CadGG0`zʁ `z-q_jcœ@Q/&K$qĐh^U fƀ$I8fx!@os/n,]| 6"{l] ~};zXQ PI~MϦ볘yX`3zC;+ʢ%@S:s)q3=ITX0.\QԺ=QYjԹ7O o|sH /K']ƬV%:΃5{/e430s9}r(ʒE^X ͭ y\ƍF}Ҋ qG4;!9/`<$~dhRH6PM }SbvKJ:kn;sGCNܹvh&R7KG-$wx"9yI* Bf&p ݹUKF%?'v(.EQIz>FǧX.w a3 $M8D2@@w0ưVc%Ԧ[PopP#w0k Jra9LC;V':t^mFІYKI8p7|db2p4j@؛%<+Nԙ1B`KRT{P^ؕ))p\{ojˀ(<9`^#\Y:-F^@Y iO࣢phnR}ݔbGGG3o" YJ?S3fS[V>b@Y.w&gİ˔"UbHLL\XXz˪!fao}Uh׋@(jws/NpW'(8^GxoEH#R b'gяqp8?&δu}&XC" 4p  ThwjNCU(wR1,<I&pof;5v.AX8rCpջnrRQ_n~c}zI۪(LVp|߿Z/*alw7=]"VEnV<]23>y%EǛ*!!e nF3%0bً!|h*"_S/TO/>{noazTĢ#|c6pE@_^Kb*5B 0GT1f=q׳̎IJn.btKK>t#<ewv&JQ6|_cFs ؛ xVqI|X0E9'X~[k5u4X_ƴ~t3Tnok랉=8;?iu&XL0mg-BȥKNhaxBzqЛnkjHi"|d%f2|NFC|R fDDv sqۍ DF`B >n}?JX~!6ICMCSǎ-&jf9US86c_" +My>Tjՙ \[_Bq0=@Ыh & ܆w  JXc7(b(بuWQaPsB6,EeJ -mCp pDæ.DAt,pEahe:+PK:VtڿhM>ZtYj{GavC7)enKl+bi菀ItTlgYm4)۠1PX]##9\.uerNFω],$ 0x6lWS@WD|a0*[fms]'~l|@х=/>Y0YBbȸ'?Ewdžbd{Ǧ̃f<|#ߟu#GCM]Bx6_zϓ1p<:*X;nlS9kd3L [σ%[vhۏ#r,q.&I.v(y"߈1Eva ._i+ `Ҿ3B)#" Wʼn#vwæϧ, O#TƶYniD+ylڷAMlsK9+ON)ri;Q:k1 &\"|f{h&}*#0G7lgZ=F?y`&x+|[4s®uڵqUjC39?(@f9&R67ZS3Zu@ MJ:C?\RjDܘ|mM=ԄҢ֞m'8& "x!p\#m3cˬ8a0ތ(*dp\fJ"c4*fp?̎zž؛'ckվYݹ-Vp0ov]QBo׆E:!mL,5eASjsW AP| -@tf/F ~ҋG8jh;d͔_΂%ʯQiQ +^5_i!_ 0DZJ2zKw$݉HS,;k6&c݇UO}}7HQd̯iU7}8v~́)o< ?1l] ׶R?W|0чvq2ԕS`J c-n䗔7eutriami p<1"75uG&}Q>-L}OBhZYxA_5m#r?v~|;$U GM5ݫ׎8εy"58NL` }π%mJ>z8;nN•'/kPBtS$JzD h{NВh8 ^)i(+4hD&`:q4#b20c FMJ_i}u ,`e?BS!L R|~/1T>F+z>0eWSS.dGe6 i7Ǵ|2IEΧc1~ܘiq [& BnTC PbQձ7~խggϪ7?+b>_?GL?=sV"wߩw땭uTzc9t)8'6CFi9^r<+onT Cri.m6"CN2ۮ4Gb9P/qf/؞+ux\}alJ;n84#@5ۺΣ-\f`ɢgi7c(=APNkTVM=R$hDTN~wJ,s>j9a8} 2Z}bH^)ݩŌldhWÉb V4­M32A)pQS2~(}b>-SmxC]2 ۟FJcVTN( 'eQ(a\WޅOEmA6^iht۱` Og,vȿnpyģ7t<_ǁOP8 :0e)eDӍ"2:9]LU]YRËtO̮H֭m4/ PYz"SL-LY0 }!ץ3UStk^/"nn'N^aҝ%`2ԉ; FʽsϔOR&4mK0lhNbݠ+Ǖ{UI0FU cL bHXgU($Rp}~7 6{"f6+D/6djC2F;IkOW"JPX &o}C +p$ l#$}c!.;Hj?uui?Z/b^xa2 ]@~w^R{ ``~kI}ۨgo8'íw0dGQ , ECDs0e)aV)⳻lwxlL;8$¶Szpb#>b 9|JF'+h55"2)C{[Y8'%;3+F,&EQ$OVyCe:*Fb>'\(<皂?/mHs]ɜ$";NRh?_I tl gÉD2ݛQ91A d,kLYג͉WR;:I1i8Ta${m"SFz9)rIx 5(ntl=)S2_$O8sB%9C5Py0{?ؿ"zE||tԅw筡2xd2w1JFu RRuhqr?˄w8R%ȱ`xȳ{t19s))V٘L7%~w_`1hT*|^“e >F8% VU,tLw[mRBWȽo *n+ Xr|V73ˈ'LM03@v]M9xƿB;ЃI)u{6h7R6FHҫUTH=%F. i87f65H W!F>]uKTA%ʗ:Ts4qڋxR5Ҁ(/#:o9Œ<Gvu>Jgsa!ohj.8`!>2| GVm'f6Ht8v{ҞXmqlas'=,SWDžԔrXϡDu331ٝe#UNVek ioGK[k$4A$x̬E[-GI1화z)$,ȯ!}ujZR 7>ʋwu{}`LgoƮ :D!uT&[U-r`̩Sp.pޘ}UDUg`cvD'h?e)Ns> Řu)[ PN#\> a_pu$9v@2'pb i ۧxFP5sHCStY{*7mC g܁# 1CWbg*49w )2/ED .J{KhvKLHa׻pV;6 N̝21 |hPwn)#b8>cJd$).Rl,m)[Q]~JiZ1C $ۈ"?br^p(ݚ YnAPŦS9 nLF4iX:{SpZ- %C@v~Պo Ądo(E ?v $Ԗ1(9aCYU9N'_'~p*^_t1NdEơ]z˜KAm;5N(#˜̴FTI_ 󓣫峯Wq)Kl~IQʊ+s]*zz*"\N8tR27ׁ CeMf/KnqJ vc n'n3Aj$ qXjr4A:^xݤSEORO6@b%*QF^pA+HMQ>n$ Ccόz @cյyDK&k C  b=.A12\Bft4nOr=%ٯ߼* u6 {_5GytI?Qx~Eu1OR@3;:$v6袴_QV=AxpeB61[fPN6́Cq$5AtqvTƒi#1{ޣ23G:$|5ѹʺoHRbJR5O8VJ)[L Wi[I: 7cr4eخAq+qUԕx~?$t#HiR8KH{rP>|:fOCrxK*<$o ;Ft/If%,Z02en2d.{˄O1fV↛ mD㵬lIA^iZ]fh8y781oܴA72ؙ` 1H*}v혖߸ [_z&q;̉!7\" X&hHGQ#tsHoIHٲh">6lzo짚w" ٞM*+ټ2 ́YOuHKGdrd!E)Ϩ<]XUB3F=HtN5> Z[?g`~JVfjz8`=턑d>\G %)1)_[aC1cݝ [YMNih5* ,2w x:YaU8ZNxy^=CFI"L60BB)&+BDu~ZNҗ c%B޸^W:(J֓ `v XGsJ˗dْ*&.afa='hoT 8mv ^:ZʻԇzR<6_w^KZf *q1 i lX&g^ ̠Wu+PLF(x9yP^$&=Et"_8LIxs=teJsjNrzq, )Z&FM"ߣdJOt^̴Rd kF>S(2$2JŠu@m\ߑ.u%4B(Hi1, Y+?w͍]*1ǑxX]Ep;vUQCqή]؉z ^$* 4h%~ƻByxcr򽫒OOzF< V|! qLTtN1 ]R4Jce~"AHCCC_hѐHpј:Nsb ͊'iZ NK7c~p)_X(/ɯW^]wѮԊ\QP ڕ䝶v`rFYrv;ws_UO~\{RE/ĺs$/^5}/ \=/{:|.<V_f4R=!xnw?JhFy|IFGolmɟ1xV" \o>IƓ'?Z9z:D!yy9Td[%TǛԎ@tٚ&dڻDL_´H^hݟ,"!5,$FD NZ^vJD>p2Fz&FNpN"a ̀^ZB |ӬûVy tFP?s}T+akQrbf=wV[fSE S-H*cmq]67S4VDHt|$!|VeYtrI$2׭ZYZB nw6^ʞ٢oWO٩3R?9_8Ƌ|8TQy=u(~I^:kLQRH>zm|7'n~ʤoEC(4NAv6x-|M:wo]M9Cn[#'a̠˹U`:YGLt}GJ`1DX-\tqp5XLX9]Bߗp*`Yt*NCٓ&YҞ/šs'M C\a$,{b2NYx>ձ!F 8s5 Un=Ѹ'v2rL  Q%њݠ/Lyr4$NU#tkkGI/~INR$QHc( (fi@Z?,,ͷQW3I?_j^#,Uf_s $r芶4 :!^RHXTzl %пÎ"K7;Zb6WXgSfCδ kiJ3i+! @.+Pr0cwLS!Ji,cJ@i\0̻D 0)Kι] ޼0:8IH*. ѐ *R7P;O'U`SgY]W2aXQG=nu\e>vJZ?T7;LJNAM'QAV{0ِ^-\ ºǴk:< (28ƼdQ3IS1)8;񖟧$1Ia{XQihZ~3K},ͭg>ߪXNw^;vV>2b^.{SF1,V~=%nn߮y"g^TeyVUu[aV6lƭ*l l [A"e cn?N|uO%fy0o$a~6* 1|GSd/]ɽlgȹVFSXP+W:]ht%Y4B>Sp\jg<h#Ѣ7H PGrv_#sVn~q:>y4vwWðR}Y^cwR~TDoMME_)i맗Nkm<k6*&As0uN 'v`kڂt<^OBHΦ^A ÀPzj+m+hyD; "` q5X(8΀jLA_v"r@5Z >dӲ Lu0[!sJU,MYfx_d?8:K0qg8*P!Y?-&DPjΜAԌO+-'Z6P$@.nfQRx7,j{x0'Oz݇C>{OnXL'c)(#mhfĞO`ۑ8'_ ]e! Ŏ∕DH13Yi?2<%0Zjt0@TL~PNѠa^ Xxt}$æ&Ε#`%g[[|l?]l={{w[lNu}kH|:7 8):$^i5p厎:Zu^qn <׶ֽm8kGm{Ϸ6z`;}ӷ#huZ:5#1;Ȣ$33%^ m`]t_a1@ş0p63Voommm>_|F=}i`Y 1ܑV-IIi D u(-,xG\1V (!Mo(@`wDXlJL.}NYi:{H̉:i|pN / Ԍ03D9KűƊzqbӺ U W?>7m>]omo_hDq=D˻٣)obˬWW"{^w0>#ig}pl<?%FmH ְ$Fh@i =vCs^Āq<\7s ,s3Y(ȃ&;jEaX腟{\Y|L6s0x)c3|r;U8܈r-t:c+ ض[Q& w;3nUS&&5ܛQmCOOKMq>)2~Ӿjڱx0 ƤCZV&`) YO#̷NL JD oB#Qҋ &$ز$L1k9;S6A&i$ݱDN/_[_e-(uM |!phyV >]@/&ԙsJĞs$+r"Z"Ȏ#^+bxč/)*4K#0`)sxJ(4@hLZ.>7^&M;{ø:΋oȣ86OF=okK>@?4xg% +~{pw?}ڵJuh&*"u թtNmwWGzԏ{nu4"љ}hW˼_{'; 5D=YR^W20Z9joeIm^3C+Zu;倘K^(bC\9pJϵj2.+f5sؽ$./QY=z hI|fgyQ(&O<JDYd%DPvjtׇݽ_z!]KFSsȷdvI= ,yZ$mޑ\қ4 jF9pnIN; ˂N8Łe]UH27@>wAQ2 wP,ttbeAžڇ%NpᲪt@,|whw* gȼMKZil oVYx`?N6tFEmR`uU4}o1銰h:O:u!A%x{v$CQyJP):hff xL?h##7v4)Y1NCc4 8sNWxwEno[N6~jԋ8Yp\ *7OF~P/wDž3 j8bBćNәiUD$Lw!/ Fx3`Oy%3q旻\'^o#ޓ.4ޣjr<tQޮ/%c8(_h>ZFm$fEaz[KjYIL4![eN4V/ #v5[ +?Pw&ZLEɋ99-'Jh;k#p Ĥg9JhW}G!p\94ˆ[N!X 9:+c}ؽ*idU4 1ﺋjEUv5ń)r|ph`'s}E83gU 9Ývk10RCɳj-fjWn-;*X'áts7*W4IDȣ/h(%ql' :ƈIf8SryH$x[:9{a'xr,9E" k;1SU@hGfL2a@ t',81Ӡ@;hFrB4$ JϾN Bُ9Z4'Fcm":˩mIŭi|x?_Rf}%pb=Zݩu+/4Tq#/٣6j.ڍ7Z;4} .ְ~ѦTs/ ! *0>&U@ė.r -D~bmL!09Hk:_lKvL7.p/0=d^)V^_"Ip&) %W֒|98s gfϞ}G/ )[].?dy ϲ8\e^sD*W1Qk FPWJo#^,dW1qW{L*!ⰰ8q.Ht s,6e҈čfC;d>f+"۝QbR" +,mm%IrV診gANjH/(7G_W.RFY|a m s9w IW?ȓ'Jү+Zg Bt5ue,Nʙwk,}7c4)5T?ǻ8k*sB.hke Y_gɯEC Gk7>GQR{Ns!0@UƜ)7N = S5)M˂d&;":yWm{( ~˛֖$2WZB(LQ|[+tzDY8k?^Ix}*ȼz2ݨ~Vsd7AT: Qe:'\ R՞kꬶ$޺NLH|0Cݤ8NȄs? wPP;hP逛tAQU0ΧG| 38ƺ b- pp*a\9r'3Nv2fɵ%]-r >C):6҉/2,7Ӎr)#J|ѱ HfԐdI=ݥuW@'mj"MCf` #.9U [>Y0I >EX()Aof~ bħXՀŌKbE94덴 QH[iQ16'6`12Áϫqկ¤~×<zL5zPs׉YG#%b:B58x@pExs<^t-wju< FvX#+@o\(SW6MM3s q-H3[Q$,?|LE8;ErU?q,7y%shr1#:4[!<(z$QG#ٙCk i6=(9K} T#?#ZLt_xf^j E-e! t6nFL0,Ib䔱FxxiLLrzn&,}͉Jm~@Vqt4?@ÓoB`ef-Is0E]r|Ր)ˀ"C8e`)'afqtnf0% ܇-8E%tx Ƨ67r.yR(˽^7dWbM&iZTa1 ~jN&<1ZvU-@J_ :T"%v9df/]yU3{-~ "(a]D PG74i(z֨,uGñv /3.N.gTDɑG|LwN!҇'/kʀg|U=Π6WSu=̱ bJ~UQ>~T8acWI}+c>' Sb69oNY_KA=V_ z|şcxאgfy'y kU]ā;MGf(COt*nxT^`ΊFd"΢8g[iFW{7xu6ĝރF%J3J]D;̖@o)2;95ufגK tt',Dy[!,!(rPҧ(DS7(+;-+ ̲ټdy9ym=?.P"]@i9rC+]lxQodZx[O ųZ#RGOH̩ҧ6_aj ka/dh4X&,Q_zaja,w p~} hx<sXNwr oѝ8+2h-{Á=JEc=x7'YHaS|Z}pܠ0{|W4>ևjZ|#JQhV\>,%[n̒7@2:zJ577%y{}'$@lჳx8nUºT&L,9RukIrh)ylK֟ʋmS\A),* UU%5gL3WA Llfn7гkcbkWcni *RzwaY4Z87Ƃ+z =(=fco963;L_;09 cL@ϝF # &VG~2}<8Nl=z{ݨuNZ _AVZ`11A@bG%nɊK#?x'hy~|pBiFiJ}10ZJ ̝ue~$ĭ\:Ko8y08@JOFn5D93.Ŋ$@S~.cnq-fi%뙹Gڵw zsx]iM:c/E] R$u HJW8$Vϖ;BecɴSk)@?,Meܩ:Z(2p. ?~bJXê})兕4kN~bYAO9՟#c\.H|:n)&2"|(\irTx"*JEkPh}p:S6pޅ ϧQ_la=b_k V>]vp "IT:[ZhrOc7^8f| #^z##NJ2A08 dy7muQa]Q*ʒt8'lZKZC{8 dgt.D b:n4"3n;)=V9![yxYwrt={@A&\G^T}`\eE v~lwmÁiLk("?ky\5kx&'~l|x[k)x8 wbGye *Qd%4 ^\5ЀbF,z_$gLutLj㙎B{H)^aPOt6tv !LB'm6 |<*C9{d z#J=>ԆN}fOG;Owǯm7|Ӏ;ٞL UE ,pɱ1d(lS*% |FW=FQAմ[ U 9cc~| pO*Z725 _~a{mbU` 7-\n3Ko'ܒd jvQgעC]'f0ܛlްdpJ2 [Gl {޴ x]8эW{ǧ0Ah,ȥezxsTUW.ͼ0Rz[ϧWsu~sn7g=WWf_F䭻wR`+R zRI,iuLY>XhpCrGPkvmaxdyr ?ʉSJ%uqw 0n~:"HT݂'`hu;CJHx_\WHl5^q @Ɠ2(B0^š rC(i;3AYS@,eIO:X5jcGܧVr Ð|K#oq#(1 }0##gH0`;1۩9[Ns6B9$Rqm@I{Y;ٺ3J Sh*9ƾi}l[Zɲ@qko#HdW44ryho4>xyya9n@_>Ś{,26=[Vέp_lEu(/tμ t['z`N9VHYEB iP>{!e4,C"/吐.s$`^(ț뀈LĐ [wȀـ7]O5,t#YHȭ46'Y)`cR8E,q"e[l(;Ȉ1t|X!npo;^S]\sX@tSt{t͕c}ئS?ֺ~h`aC9bv(% ҌÄP;MpE k+ڥH 8{_ns{6KnWwv Fp'ۀaez hbs¢6F|-clơ_~UGs\TvtB)9=ݴb t$ PhvA< JP;h A`^jiiyRɽU&0,v(D11#\rHt#bz3\BDc*јE26pQe!yQ,^œ;aҊjiaQSk6xϾzh4d 7谧֊ގBp G~fgc1:E2,A. tHJwb1NxxNfah\Yzs/b)C{X UDQr@mХ,B}X(#(HRdl晑jz3.EQ? 5KeZGb9JS~fklsrj;QS TOIc|#aƷ8S)l Jbk*OA6Մɘ3ixSNXJ&CO bR/n-=aFYx?9Fh[W$mpmor[\n}# E)+ˋ F ;YiJtSZN Kҟ"K;`t -_]=[{M,A=$TիuSYdi3%p!hZ< ѷ< 4cHeɱRs:_P0>eQO]AC2Nq Vd cu Rk PbʀogT:~偱q7nGe 4cɂYˋh GN`qoRbP!@m^m6)gFi3$)n~+$YLN(B:=+`S,Dh GO>=hb{Tp+mܹ{Pxt̝m8ln^C$ȳ[5] t9 1>1Jmf4o!Ih,͕zFګȽpq~KoAk[:qB-+{|ws˟rߵD{߿ׄf`S/DE,!pXNJYϔZ1l?c9lt|@aX=*?Om\x %wsu?uZn~Mw56\\4,pym]-gh3M{loJ'.p>[k|pR'hveTNz8` (zau `t5KQVwh$k1kzyS˚P#R{|ڦ`YЌ$춃NM@Ί聠$y@ O{ B4.=U,jCoڕ7ʹw2z -H%Lm ڏˆh5߼G{RFjj:J uWUpǭFR~[N.&)5ߔ4:~فu^F~^5f{~کZK kAcDWE.\NzՀqbT쌦 ll9ouX@~)F _aM0ZCIZm7KW;@zCn\؞IqhjwNC9:ڣGphPGmZvWԨsh ݤCAEu x•Ra sU77za;FMzB킑FmjVwMnʱQY״ ;}? 芯|R H7[Kk2qa  ǩ/Q_t=pSL*|^dbD4ڿ$RrW ,VG}{L%/a0ҹRe_`m0ZA PU|~4[^u^3U2wgj:d)Z^~}O5yd=nds$}bYBa|Pe>11G&qФCmcDN K; 9|Sn_@vՁsy1=Zɷ[#!!ܢ+[6Wsym}LQ ,6xuvڻ"7ϓW2{.t]\QC)د,7Yl%zi~h߉Mf={Ou1"Z}a,Ģ_K!-YRBTPs"Pg#")žW0~l^Ҩ_J;ئ&(Q'g5,FV舒5{Us?s?s?s?s?,X