#!/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=4aa83d5e2fbe970454fad803d1c106cf # 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 5 # Cϟ.UgNقGs?IQx{p\; f6 ?sqP Hp؜'Dc[k,f4`L֙%eBH wy YK3ǟ!0aA"!q߇TbA/t9'SZ BON#ߙKɓ S"(28>F3HنK҇)!Q 4ܳ GCBZ9 4΄= QbBONhX. "4@Z Vu[Ccp?2zW벣KԘ:]ɩNfLtu`&`(&P2dL G=~CXf֙>P{>83@C pn5ě5C=GH%x[xhqO1hlƐn=Ek&P2\X@@:@$&ц%"FYݩJ$(Lj`F$r ~ T nj5Pn"NS)cbWNje1S:/L] N=P.;KSn/3g35 UldžǴ {\2f9\&X@)jW3-0Z+\$Z/+4jZ n%咼c ZydnquJ[[_DA,,Kuw ׯ_=ᵞB{]LX|!{GW\$A Gw !anM\泘gA5'-("|hJyh#&?geGcVˁ3+H4>po3?H~!y]3X}ρ&óhg9@, o҅D}n2[=)'& /uli*Z ?]C#h' 8BPq E\LӥL.eyб~b_A.[0ꉶJmI\q .ԥUEūNS²UCrnx}bG.FZf@w]V⣷&s %F.gȭ/mYݬT, &?JnF.ޔW8+g5L(;iĵ SP~FRoٝq'mFS+my , wf2_Bgs=oQ#v\,{7w Ywww~)Tz@郣&+ \jJ۩zϒ.߷?Vx])c)3m w/˼JY[CYVy\)ۣQ?!%1t~7=^aÛa/םc%WG s ae>>-?6?y{8Vtw]r&xIU~N km¶Z?/J+{߁WZk |~z yv}ǮoG{NX{4Gx^`ˉ$rJsEJ6 VZDZ=}0^FuC&%2a!Y9+dm'{H%}[t 24m48_ADriں[A C~)ݬֱe4|nkd~`# @QF1ܳ; )7@t3n$I@Ja9 ='q!taTq'ڮ`M6\ *"ٷǝJ|.E \q)x!x~| CbB$s|8ĵ^k?2#D &B0_Mɬk:%> !/"pr/< kMk*;5F1 "@6/u+6S~^Y%DS?Bt utu1:T"<`P_i$gn@AfapE_T,܃Ph,-=LΩ4sCp: plYiE+i+GuVh˅i. WX_JN򄀽n,|e#rGzu;w}LK:6uW81KSәsךڜ8$DPD\`GyP.FAe>,oisW<sK:zDlYyDOxT*NzA@Vt^2m];<+Cqhq~u HxABRFOp4nC21KlIXfBTb+mH2璆ln$6򢾔;HFӺ+ % $N9tM$ڧdaf1rHߘ]:v@GY·]d{+=`YY6V3&:|97)70/ʆ+L%eC΢4s90pT@C) URד++i˙fҷ[pUL\ 6eV"XY5ܹ7?.Obyŏ,WJ\+'a".5,T," dV+s߳iĔean:oT 1#]\alUC.uzI$^O*d2D(V蕨>u)*_έϾLև@%,;ki:.PVAe5f;5&[$pKXI&I S9פs)m"q >rޭy+Ӹ ^,rЭ`SoI=r4XzAzl?J2˜QQ|OY_x5v)H_f j^_SpU*HPypi¯Zm "#ϳ/n쬟W\P~/2@LBFUX )@&^Pq{"@Ķ6_̣6 oDou7T˙\d֦#< 0+ܰ'331xwsiRi ӘiS&$@R A(VpS3ȥDm w]6/-qs(SEfJ\b9A!BNS6dOδS<]N>&A*C99nb帟ÛWx2죃'\NhP3 BҚԨtccޓݫ4QKO<@Oin)1TPPvn jN ,阔3cGsq$) A ̄I%){.pdpJ #4!s@êQC;/=s07lń5CZ߹|AT}<E"aQ۽01/xFdEi.o' nU5l٪ǽ^uv:hOFPg}w&PM/S9[6@taer\SkaX7T @ *-_+,Oܫ5Ww :<'PUZD;c},X{D[97e^[70V fyQ8'5pjp/Qp(-Mσ>#y81O+c&e uґ'/]>ܟCpX1Ծ(8a}̉q:9۽P2ƪExP-"g52.FppzR#~LGX 6dHV _a2cV)_sLםb7]O+F_hٖم%ld?g~$JL[Jsn+8їr)$9ZtSlbku>,L d^Fς($":R6 FLYU%1,AǢOu t,_B7J _ rkmc+fZ0 h:MgQIbqQO4:(^Bj`3bNMk!1G riٚ_Tۣi915̇X?8mpGNM^nm4s,0!$ZvHoUQx; >ĠuKsnW7v a'[AFgg~Whp67\M!)N.͍u`5ő؟%.7#tn̾NGEU+X"e>e]O&8& āQP!C羚',Q+0¾֔SC1$ qP;|N*HF~#_ϝ$ ؐ3p\eĒZ^lXᅠ8swr X OgmQBI Mh+9;(ёV@e;oqeKzɡwh@ԅ ޾5n),6NT gP\Ȱ>BN#M2Xtƽk"ʼZɳ wБo>t;a W;d8 }u+5 @bK/~~NWo^ώv)mO0@c0oV^Dl=gI9ɽHC{E~Hnv_6]2L̛@IHQ>XTg,ˎߐ–]w֡E"/m%|-SE2Ct8xqDQ (r !, ¡bnftPY'p Ɯ2Wߴ5ɟ[#l(4B5aѰ+ EOnm.WXE1PIsR]1hޡ{vso?}5S, "(;Ѐ "~LP._nq{/AM!F=eTR'E~Y_-= QN97 `'a/H tRgJFJAreP Ʉ;s;uiAB ^dnvO3Nhm\Tg<޸M;.cTV;=Ck W͛gg }S ! &)Z[ )H!@杔-iTD>74VA>ZmV~6nxt+m]߼|E9ԀێpW:n_lo~|:mpFG+;ur}@t 1dx D Bdj:M#XE,.>T5R^r~ o^zo $Y]][7FM˱٦Et+zm\`81G~+3u3mL1x89lg1^Ƕ U ¼ 'gՋduW77^lx^WΊϝ7BCף. I;J}ڒM60+lN|6l6ۋSgEWm^B=.ӛ6Jj8Npm| f?l(`baulK[,ԯځz^0E6)nnڴg*Ӷ.з8JFMP b>x@PzB@6`ʪ'z Q2Rh*|#_;yB OHZ»+kU,%ܮjbrd> 7YQtak#gf*ClQT*C!ٸLo.@YWno$gQ3|YzP`M8 D}*&Ft%TNC“-9h4_9t(fˢB;|V(>m fYc9ǚzLU:wdhFL\x<08 oHz9n6` ;aTijz+l%P3BRMb^S:3(vh3=K\IlG RrL2Ƨ֒VYhg~d+j׫.q_T~hLcqTACP7.boBыft3vemKj?N.gޢ٢?nU֟.x;7 &EЫ&(6 Hv%cxyuXDPP#+?~=D6>~L;cSWTGpɀR"<~³0^Yq2dI2a<[UGdN &,hX.'K OEl)%34&aYPE.1ʚJSx# ăkAL`d\yWTІF݆.]N 0Cb$7zZPAZ(0ij"8_| hǃтC,h li<[,Ϥj_W$̺P]Ʃ *ٶ&j<OYD2Y+1aN'>R뵲KRD#NXkYMu@!{+ l&|\T[ 9O~]rpk 'QjǚM2Ny,-{cr("D?a`G ě.9(U*-37Y Gms;.^ȓ>ލL^Y;bOi&̲Pw3H-r}!Rx  Iڋe:߇Co:ɵxCKp14”[K>WV1uV]ouMٲ&/ZLN Jz޹w3iV_/%M _/g*R^72{qդh aIHKbe('5>4Xhb͘"=+%V?haѨ,uQ+:o]pyNZ_+*8U^4(\~eAcv:ߠ\IMwy̸rB  e<ޚ3iԝEPc* C IElU#< Xh9`ZQ;'f_hƳk2[#_A^È7A$W5c# GwGK /o]U("͌u-G2#F1ל[C ythe4`h-rev ǩ(*Eth6J.k*9h0]`/TO:e$(G,bLb!STY4CL$6;95՜wDA; A7LA)oPތqNCbj,"}k띪?,ŊLMHcōAyXLi l "ג?<.A˾q7GέLpq’"g(ԛ*.&j1n&Z[ǑDwf1,vL;\gɃOR&нm+4U_Տ^뱭\O w{*b0C0mVJt_RLTgUh@67I2" fW6¬f%6A\D0F#_ 2iKs_G5I L fx?FGx ÕW%=2I 5 ,_MPSkiْ=H#KK!SCѬi$ /L'#MXו|՜Q@ &[kr,5_ 52!_4lFeG>fZg*DB=&c "{uPN6M~ ] Z-Mb^d[g*jK%o4jH26*D<N8_(>A PŪsъ}lJ9!%؏'~r( o؄ cءC3-rqO{H{ <dL~G5:iDTwfߗl-zhv1F w"ҎȤrs-nS.~Y{-E+މhD8-H?Ny& q @DuwgI"eԅ/#AFZMj{^~[gʺ lghɟ~`?K_ZZl+YVUPk.+]&][ʾ[*4:_AHNy67VŴ|lKG?>1mEKnSMw6ݖS-Ֆ=\GKn)cb h`s-FŠdzm|L>Xۺ=>_EWl{ً'8(\&> F& ICaKr*WM%Eq~EHX<9D@LNgwA8[*+3\>>j?*GUNwʾAK):٨ h%'bI=,H3Q`2˜KYR-^I;ncW1&04\;yɹvI[S`[Δ{/ nyJ*\EZP-UOiȤ/Dzڜ0~a]8g%$e\{]==hIzKJqbj% *+Pު~~#vP$K6tZlݨY::.L*P K'&O?+mz]k4umzJ Wމ򶭉f;V yubq/\0{tJq8e(< 3HTTtH/K]435_3K7_Lm-t_\xwh]VP+b.:n+8!Kud)- AJ .XK0/| (4j*fwX"] %!<}45 lЕvcz5]V &ů^! Xwڪ}A0q,ʣ,(Gvg=i^лѸdkģf"\lѲ?!HoS8,3]yu`"OސDphyb# Ek-E|h)Ӄl۫j/YR^lIzx3a5tx!O2Et 4bfV%v<_rME#G<'m wM Y]r[Dߢ-LO^AcVWEC7Fw1=sQlCbM}tΰ!>4F&3ۜlpQ6z4_ƃk{NWrKUvdd%Tm "&K׃"'SJ(dCF@S\ 1"ty5%eff7@q̄lD:B+VItJ1=%\[mK'׼^E!]2:b fgHfi20=ƒrc `<թ@k60 M ڰ 0Kz[ɢ!'\A695#):z -0mk5, 9YS#P֝n/7?3Wu6PMB{6g[X.}Ϝ1tŠ>!08IN~Y[`21;#L%>i DL06G3s0 6.xk26@tMg/T@ckQk#րIսZ>NXf2kA8j%_Y8]`Pm7[Vp%41fM{W1Ҡ{C|wY&n³6O8C%j~xrP5i6,J.;G1 *@A;o7eSOt Eg~x؊cv%-9X1ypx!Sje MVfB7E2 ؎/XPhtk>:{[݄,vnsbT{wSť4 3-昇5 Ì˂<[<ǹ,|%j{ie!0ۗD'OOW vT́^cuu2YoM\n/.>&E_%(KOa 1.ī:CAɗ2V{?76J~[\87=ajm J w%[ۚ%/d{Y@6%o ;vj3Sdwg%r>l"^DSi|EjB9Vڇ0B'ҷkZ8Q"F ϑS6;mlڙYwϤdXyYhP?Q˭bz?{4DA]W,ȂzZ8؋ 9bHBQ@l#fQ[ܰ?*t.f~N!s(4,K]>BK/Yh- 1n3`$Ufȣhf(xnY 6.< 'x8WLnSSw4O<]BPoSרXC~0땽kV0vP )i{1@iSjUxS,I@XI*ϡwQ(j8-&.%l mԂB@h-̧wm` lF4w1NLHxgBc[w)f;6b菆GH1(hLFL1ƱPLdi,{<iT8͍y08 n{ r6SniM !O [Qd,qQ9UR-cS%aqQ#BL| \̲)M%7웉 EwjΓ1Ӹ_t iWy iJwNv9o?"E뉁 D$H~( /*"Qo;;cHR5ĵvTg%^l {U7hò9nx/|ST$ђ<\F]]gt3Ѱ7"(!Ҙ$e0"Y_!)@W;/chPpePrfmI[H@g_5E2=qQߐNh{IAoH=mcDoY/H:DVBY!$T9dA1e DJx ĊF3fw)'}.ԆG4A'>Ľ=ciGk>:>:u|0db *:oxc '{Eva}=S>| -hƏuM5  KA=QwꩣZ8sCm*ibzl6 "hOH ƩRs{d"Τ8gkaHg θk'^6V A V%~>=p d E'ZIgɡ\q?]nv20 b^6VV- .Tyw7P(*~ ,VFr{}4r\` K45gbZnx)r1T7?rP zFRjx -;GB Ku}CMH m+<'0| Qcip.1$c/$kw3 C K\E`*_CE5)gOZ5ƲL&@PeGb_Kܧ4:͔ x]h Ih5\\4SThz SSMA5mcݢ1nrω^薄ine*>+F ΉFUBELAHU&TwI)I6")ftaUAIJWk=,&ҧm8-mijp Qt-u ܱ tRU?TaW? /X(z5 }"gT>/^P@8>4BbWӴOBTV^g1mj-" _E=cDx$q ӣJ ._Rߪ:ILtbvԟxrwrd|IP<-Yx!OPL>q۠m&ӟ8(4GCS?b]t"9rjM&Dtg~/pФ2m,]zx=1(G0k! ''&&k]l!BTYL0bg0NhiCf Vg3A,7'W$$C{DLtϑӘBĪz) ??x=q6WF; 0޼609k˙\)ڏl߬/X61rm!Z*dXxpOvN?鋹!9a 'L s*$bSE XzS5_@)q_W>ۚ;>ШyRok#Nq VMxs%?T>'ZFU5K~wp_?zSRP::naZǥ<6}MV[Z}U?>PG^[Gkh nU;=6iYMAՏvRͷՃ8(j꫃ܯ7j{-kzz\W?j?`8ƇRl| G_= IU;m f+9/߿N(T 3ra0-g&ky_o֊ڨ7@}_6a:]\#RWR_:v[ 7ShtW(.s g٥2CKؿА xԅ5s:+@i&֛SYd&D*QJC|\Ľcs F|iJN[1 E D潊aΘ x"^ } 4R#[oqx%$5)fW?"E !KnD򋧔,C7HhNNRЌID6n7T>"{0 ;ubdo1ϟ+9%#YrCb|~qOP }η?\*_U~6 onͭ{w'}NB^$Kښ|$5$.QH1 ܏ZʂHovIs@K$z)Du+D񖋜%/` ҕG /9+3}Rt;\,Y' =˫ۘHb3H[z€'q݄SK Dәs/0NM &f&O4=(ra .xt1P{ V;qgu$U}GbU.C馧gN4]*hS.x :# _߈8` r6*GJW˼Ea oRxCyQʳ84Ѓrһ^taCfT@STp-9OZ! Z;ذ ̯PY< u03)V3OLs# ~ UgYz$;36# 1h<*>ؓoe.ZD\=Q ^=s&J K:`)F`|M~mNE>a"+ګyɋ5ޡr=q M6 }'N1)ѷϐifUvє_fv+dGP0r;s(R $PKhsDo@&Z6t>KU% ]VGLWS8\e)VvQtX`h_' uIkSUble796ʹ{B8dɢzZR3P5(+-8C@}#BwL炦e3J&8= g}e+g~s}&3f;ԑDyb'60')1&bealr^)h$DPTAʄU>('9Mt)C.ݧ,T~)d'x H}VYw\:+ikoΣ CU;|reO+%vzk/W@^)5?ԏBERTқ~ɩ|-]})-N`/N&JȵJ2ll2I>Ӏd,'$jqL5 "lyӸH8z8rs6He$ $Yn*8Yxr'2ˀϡ.C]$AtRi%E6gLAx.WkC"ۯCO=ejtldF}sHw e4l֤LP?x\1)@9.䢌$g%)\JH,(m|K{Y;:Qh%3n#w0W.RtԂsS`۴xJ1R 7K$(X|-ߋQvj<}d* oZ%`r7&s9 c(*w2bh^L]P̈j.2; Xt:&!Fr[iqj+uF9'-UԾVBA@xL~ϔAHJ,)$A8nݮ'AM E!*(&r$-B"wWEt%^3xA.ahDtU{WK\BTw5YT$P77ſ][8˞,H㔔iz[\}ٔ9Vc2fhY.K՝;\$H"Ν~љH{4,K~/yِi*zesLHpk(P*#2۔  ³gk[[O;hk{3Fg^lsmv7:g< ʒ|& ҂,tkW9-h 6hV"/r-V^ZD#aZ;{0G㔎+ґ",$E#CCCрIAP_] 5B hbw(d\raLFPT1ljF`OoƁ7Oyu^dVg],41qQMhޗ<ԥgV7͍O_lֺ[q܍޳ًg/6Z^>tcm[ݧOY[kEi}(־ǫV[bSQkl@8e8s-m exWqmEqm:ףm؅kGmG/6׺⳵bhQpEϏfMNVi NPpG/5t:Ȧ$32 `OR>bp/󬻵uG/fo Qo{kksmn}7yB2#Bп OA%6|Ykh뒺9D_|ۤg2T+ -yKH\2+?*XG"voN!s5BPؙć5rZs>q5("1R-Ģ%XkcEϐ&=D#0\DU~d}@v7m?_Ȋ\x;S#zm~>1(o󿵵>guU-lz8912.9oCnF* wS=!\T C/¤?B00H HyeVYZ NP$gIA >'.VfsAM<d"z lAK/~`HYCPS' #̧)@u;Nia,^)Gʡr E4?U?kq44ͫЯ|'P_Ɂ%V<<(qrOXə @N.d ?3SId'wrܬ;! OiHM0,EPBd ^?:0W@ԹCtI?B',XBo/,[< )KS!4@mI,Ui#+ V =HM$>쒅 ߐn]H& e*?noiYό}@]2-Rɔ("&ծWc2"j?jGJ&n]mչʼn[3BLb¨#(29%H36c2^eeR$$BR0<)gI#us&2WW{߳Y`z}2I-P4iI?1/jc6 "_?7ɓrc|e KW܄۹Zz:KHQy<4ToѴGᓝ9"%)L7x@"68Siy i\28']L=zo:h .Ē%LYThU͚ S?q@=f^ElH]Dr'&6jbm,I(+ژj\"Q݌}O>ٔD-y?X m Ss7^ki#%/Y*97޿e@ +\`1H[`i/89y4t̝Jt*fuC?%^QJҤ, I&x  k?'?PYv^2=&p,  .BBd:AICH,uX(lFݞDA[c,V4X S9A`(3H19i)8sL=eӶHBI]ݛAs2F٪6ZM2G UcѢ-S{Ewƨ4wmf2D2Y&*6xA+ee)Dި?핺Y. /ԏ;8_}//xنu6+rPuzj΁J=񲸕%/V2IXsj#Rf+!x҃7͋ԮoSgO^KG1NĢc|evtMNrf@$0Gb{":Vkg]]X roŏ52Bmhaғ3# %P]>ay>q;WP]oy谾VoQV#i3`tH&!S:/c,7w""VY,@m%F%P9^ˏZ2 ͝3$ݛL3!w7h-П}=d.4qbaRHxۢ ;1)8/@4}'^qy݉Tjh#zyP=={n_;b#ŢR==d/v~L``/ezi$xCZckCcF_{Gsxҝ ǡy0R$ǎ,IF,ZDĎ3Ae9veiWm9q4'Jm`JC-.-|v*n7|fS ̮73)۬Ӗ3 lr,pz g߬V1]l:sAX[v\ExL2pB I4n*\]DQ EԔ|@!bzo'xz>O70.j TB柝(W`PJ=Pwuf&gI*_rwK;.X^IjMfƛ>+qWMdDt;9gɛ0mǟrVc m멯o%-8k*7gq ߪAqh1[MĽtdG!oƍ7ַ7~b%K}G@Thj11(Nxf 89 Cxͮ'qz [(3z֜1φ33Z1xV26 dC1k3{O6n{e.{#r3gmn|[V"1y$A~ڱ@m%ީ7FBսkWVaa(7̇ki7xA ϣxj%zL/:􊼛g/C'VoceifcSi=/DpBnyUCNb#>TïֈpuV pkP$BGguGGZVT.Ԗ+H6k< |>'ۘl:u.>hf ZvxFN#c M۹f%(u*zŒC].a=A-3LJ GcT̘ȦLz`:ħ'C]fR½K p3yUW4ib&Pb} ֪=mI=H[]bѽKT(NNi *R1o8Ј]O"˼Xv@] G&:@L;;+Vn?&ro}lٽ{|~o_8(/罜]`L'<@}nMb^r AW [Ec]1Jq&x]{#g~6jVJmT\js\C5Qr=5$sWq(7zofQriDHkϒKSjji~[?[UH~gG:29kQ0|1i]K:ȃ`ʒ fPoo0)_uF0ZlvDt{ +\;: F{T4 ]3BVҰDZSv'O:ت޽q !ſz) >--F+d;c4b,&#>ӡ2s JԈѢB8Tǹ&o2Kй6@O%8rBITj`U$n%cy<;f$hlגW& 7@x?>zCIm]kmNWXOv LJ˝TyN+PvA]EF-=Ȕ}$\.e0\ـe8p!j:I5dڝ; F^э[A0@yih0>gmRԯQ8A/G۪'WeBo] @0ZZ3憌GѹLIiX_q,ã17%SǻS{1dK~]4ճhĎ1EoO_\NYԆnu *,Eܻ.A[|7Õjpffr;d{f)=OzxN3P_B*nG+~x6uaX4"Opon׌Y*J/Fsy61Hl/ mx!߆MAc;R7nӽn܈B8kLWE+N޼ ϝPGn}1k:$F܌H -a<05L {xtDhBp6 :XĤ5Ph#ݪ,`6D~ۑ4b-ݖ3-ϗrޔ?:;ZIT`WVQXU_$8ݟq =X읜&xDI(mj{2R3xHnGUr"Ÿk THXoCU!tЂ^xݻ wu09dl\a]M%n ;Y,Ml\y"!L[?p)8Lf*)j1Ljܛ3FDbO$R!%׬*Gv Be W!}t.霵# _"An*{)fNHQw[!uuSdž1Uh0Я;@Bb|9 ukDj@ zEahss2f($&T$vTGb=}Jws|J-~̖+AiKz r[Pܿ 5׭M% 5O%}ʢaJ>NKH,ͯ 3Z5[$iGq1 d545#YBYT% X;&rZ|\AE7-0) h>쀘Q\u(ɵ!_ ZEo2B|d(|ݑTT?ZEC0Ver욀 \QoŠIވW}u%5T9q`cr4" >29#N;Ys8&m2W=Dh.!{z18pƨ2 QC-V|ȠF X# &!媜$U$&߳ ZC}BE6BzX%>A8"?7t'eahG# }E!~IM\fλzk+ HM{XT"˲K !O}dUpVx۱s5<9ifb2Uņ܃8vpIf9t㟂cpZ7Pӡ+eU_|.M(&&6OdA~EOemB{ɇ6wÒZDlODnXMS7rjF+ Q :H]N=32=p֙'mA*"%'6@[;.[V崜Ĺ R9kLB}B *s.u;5N)#HL"QZ#URqn5 /]|JvU  _vGbbe%J27[z5Y9K&∝m!#(u:[ntӗbvcAIx b6a4vs?DJCp(Pf?Um͂>@%ʿQAF7;^gW[o 7(>jՊ+1HɽKS3LjjŰ:I27F&@7g8βTT)1IŲ%XtnU%d<)9ػyVdum2_Չ^1x~GuF1J@3 ;:"b=DiR}U=#xyw+4n4[:t]+l\9 gEXiI~+@u̅H=G[P%vOT i+ꅂoӅ,X騆˶:X5@-*onq,i˨]Fqk6sĽt"pd:?l>ɥ6wӭGCkpSRsg>YULx>d3"kc_idCpCmXf|J)s27lmqQ..dN/@}M.^=trb%͐*T 5YtB ܚƈ --js/^z>b #IQN\yC2(`♠R#y4zrIoϰԟH۲y흜ˢ6Yxog@B=TV@$?wD>D&UOu4X+"}6_);[I}D@:UL]m]'FN5 ^)52_(7J.O/i'$:FOx?߷xZumЮ-a3UYPA[Sr+AjٞO S‹y0 {_pJ^\pCZDS&˓On񫁢8^2h|8G{5ϙvq &NQP⸫ Έs\ *bKĝ19%_OG_j-tiu?(6wIdn Ě=Ėq" V=iWAQeEiM_#P̶F/1Q2q+K|e6(FilݵT(9Uɪ2h_;K Ϛ5M$}/Th:;$wS%kv݁i~ EÓ'缈0d&vOO /1zO_žv芍S4"Yu,ܓtb{Kt̞a1uۆ*Bb4ΘIl>25PJ%xPo Ul_٠6W )%7S ` ~R/Uy_4JNl:E"ty֘5q)퐁X(0E]?Me.($A;*LI(OU >_jPLl%$noޜPoN^+ITr̸XKONfo4lOc֗Ut>`KʖtgsתvKxC& [g椔K ,Q0 W"Ig-QICS- 3TFG l^5^J,xi WM' 61]`F5@4kIb;{1Ks2blq?i|߇y Uf;8 A‡ uB:q s֮$Y Wh2 XSOWR6QUyIVJ֓dw }9ޒB俜ȸ`D6ؠ+$ކV᤬SNq8X iMWJZCw{CfR.#g|*3LkIQp+t씛[E2ء _1dpVWJ&CNvڸRh<*!2̛0QFG_”#iKX7f5HBțʂ\V3w|\JR9uqCdL9hU];|aL?Gt';9-*v4%B:k3mg8xtVv)Ec^+09pf?)1m0 B cgosiOK9"[)]"eJ}Ô2u?Z%_1Q[4}ڮ6 [,XXfGŎZy7/3|]99JMW;K1\u^i3l+]6Ը!5v.vplkaoa3tsLђy!L.:t2r)  ##  d1&%Qe WL -!R$qRx&W/d GkM̿T[D~FtCt;H̖kG~S]”Hnjrߞ{'g)p#+ٽe)RfR磶tj7EL4%F5ū7Τ:"U{ALֵ3Ucُ(!S%Ľ!4 h& d\61HbY;h`KWжK@[hIs};Z3mN{݄H_>XًCb@G:5?f̑ Enд5 ӼvM1ڭfI%.pЛv1ޠ[Om[K`[0I-C;VI(pN8 My4"NxSX*wׯ?b^-@ٳgOOgcIן:~6nls+O~W[m7N߫߶ێlb)d> ~@q Dm3Rִn0 ͍'j|~љѯL;뺝>[lh(!âd]> ~U>o]] Z7,ېzj'}x[m]0Lμtޭ^X/ BV/l^?nsLbј?fƳ{{|}VE9Nn<b$! jz[yVOdc2t-v?ҝQ O{ߨ98r$AD!Qrk&؝a%MlH҇m:ưɜ-OjKs`:tơ6p7=?jlXx`^+ˊJabF6ۄ sv=X-lš:rau'wu; ׹s2S: hhh7"|6T/qbΥdɡ a`f1pw7T=Tϲ%e MoTzԟL\ʒO .vr_ICvp>'~%*N"Bם?#병yfa3,72#EbsCڡ5PĺaUf~nNU3'EFATP։ Ae-0\)Nn(0Zƍ>/oVkV~z(jax lKbM_=蟞?^"?ťKSiCW7Yi.> ^KJ ztLq'C W1$Sܝ;\MLcMMtIKrmf2 8u{ B?(:x4sy nCږ4أHNq&1"$͊k!^vS܃ hٜ$!J4ə?<.o%Nf ?!r&p0~ D8h<Fhǟ+HU5txX}G]CĘ9R{;C%a@fcvY+9NљnnַUzS~po qs~X㕚Ld:w)H}o{{4b]Iۮɝ,k(&`ce%eRwR'&%\s8D~E^,)r@P{Cvtܪ,x92Dt%D\oaT_h'a~hihS+b>|ҬTo Suyw#UfgIBO{^N#aGddkC-!sd1% k`=[E70#ȜTAꌥ:T Z,<9Q~Q<{?P԰()uQ9oaGCRM9PeRH!G'{.((6RdL<tHIL@k#a:!R[*_,)(a۔fсB->˞M\2IL(%MZNhP>EcY/7z紁Wyr/sGv3;s%=R/QDlxҜO{ ؒ.00ՐQ](-\$ƴ;:֬ #_uYX )/TbaR@a$]),Nfܠ8^"Y "Iwڟ̒Clk'#`PI~뿾Y\OJ46I`(9JjWnFPv ʂ@Ό@{sI#.+w稔EzVƸ7μQ#w0zG"/ q0bzKz,1+fN {4=}%4O )Hu=EsPv|6[Bo&|2FK z[ojoدWǚ;>ШyRok+Pu:n4j]GTx^?<9CuU5K~MIACz KpEuZ{o+juu>n@=UuRm{Ն:9m7k _oJ ZUw ?V0wU ~: uިpL=@A i'I FTm|(IڟOt\qf`yNC8LGUUoj>xxW߫5wq&YîW[Uj*9qڬQm00;*O||=S;n|q.hJW4&hW4o$OqdڅsGlK/`Z~S>,b?[pMj5uWx9cZaUk4юXe(X'2Zf oSG^Ew|_;B{?8uДbE|ҋYL?%\V (EQ2P,ln+ #zKU:TxוχW*?#ʓ݉*Oҫ|j`9jŸ6I{15m-C&>P9h:w4J"Ie0>z7SPۭk8<*|[gEToP#G#Lv6۽Ff Y$^Omj{754vd5nq{=T(s MQ 57b+w.nM@ K=(E:@D /ySu*|Ϯ-@voys"@C -:z bN͗w80аB K40q?xa\x Ț4Է֎_Uu{]^׽uuQ.BTyQG1B!Y@6H&E|IO| bBa/S4"eq^)C"[R jonnJn>-;ifI$d1 5Ծ\OfL)?s?s?s?s?sE X