#!/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=cfad15a019525d390b607958312e0b99 # 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 9tcy ;=ҟHoI~^T_n$>enOZ&=0K8:bF2,'?"H`F@E>[ ΂x8l=S@`hVC%*_IEBXa}g&=|k|&Gme7~ϴf zv`ܿА1x̻m:̺-@mcZ`֠u 6oZ.-; حiwoqi-=xe\jh ۵a !s= *3ߚ97F+62Pd]@q7q1bgfE.H732{FUwQ'Y2Ȟfb̈́)=~,2圽*?~PrwցI?+]v#>6'o%GOΫ?m#>PQه"iP@~̓ VJ^(GcSl BU3tqeꀬͨ 2*_JyOըj&l˜qv'֜tmӀ|߫xMk ΓjJ))'CX?>GcKh[{zOØ gatT9ً*_ O- 5d.K]o64'K+4]G*iaQ&ip@*tl}i)38eeܱ7|.x`d[yH/*/-9g%*-/D<+ekp5̩ wof: 2XkIAwhճd>*Ͼ*DfH}NвF vlBb#yJ1O7F{̺eweSə {/6lC$e}d b(ZDn"H&#HJ`u4~_t|O$2FY+_T\ x`Tb[@:L gDE P™>wq #H؃pRV ,1gev(gi }KBã$YR&_k&pLAG6hD^-֠>cg,e B?y 'CHQ `X$?G5$ĭAv;EI00c8Ie4&ofBi Q3)=glސ |oٻ1zERȰ&P=dN <ī?t+;tPnH]i˄{H%H (ATBMmbۈ|UZ8bHӍT#\r 4qݪp%KBt;%=05cco UH &P aa2w)bXKWVhtXW"u YA LCSƬ gʞ<c/@#_)3o[i9*zgd20+pǶVVho{pWPO}uebje'5vi(<.^}p:-N_g\ P:3\#F,Al#D3b=k"IRs ^|}O^Z?:ݪ-D3+O/zw[ǞXFxh|pnN8Kve9~фV>E&t WK_/~_m=?y/_'jחP#a4_Y5 C*~z3+/;{=$wGc#ZpSM0V.u(pu|P /C`F y|a\J p(`|bcv?Y":a|ۭ\6i@<ܐB"/ؘdGwPwtOoН`OfI>qǟޣs5u9:VX n8aPJtbⅧ;\Tg!a9)ɷB-ZOCРO|A{_<LX9Вu;Ei5pPrjH) ZZ嘆6M4>ogeC뜼n7A(6޸?v&o&뜟23C=ДAKa9NfbH7bS^ Hdsp':4@q=:(:`"eq~ee.@y)%Q٦2xi$MlM/Zd[)@zdTZu^*FB ,SDZPkʻ ׵MN GuS./,  Gۓ{#P]^۽zwvy.hyvzI< OH}NW%̬#L%xBQZX4߀H]@d )| lU{ bx- }ۨh7:?ExVvC6K64^$|#MUj+M5Vf6y>N_2LhtCl_h{kw t `Kz \z9̶9lSg3R.801LwtUK԰QMuY\6@[oňzO6@ MoM$r ="M]IO d wW#ؘ?bNTp׵OdBs }+k5UsdJ!wȂ VkYÓIK4uv-+\'#;/k,60k+P| _*cZ7:2SduHƴÐElRμM+𢅼[R0%ܽu EDШ:De[mC&-}鱔/K6lc4NbK_ڪg1/=F_cͶ\-_Zڧ\0FNc&lSʬTT`7[%ħ:l2c3W u H8#ׂJĚ&IwyS| L?/d(Uk!^*%KԍvP4 $ G.Y>`smlyp'}-'xI YX XnK!tQnV_=l幂Hh v^YU} (,F!(xիd7h  F6bеG!om ӡj#J|]橐F#Z!R.9 %}fԅFoYT*J^Cl/2Z}Ekp< .cG,NS&*nd }9:)YG&:Y+ø= a:CPo 4#L"$Q#MuA$$Sd '$"B"iK{x "z)o%L1e@PTշDdq:.Fyeh`83RQt:m5**Z"Go]O_$@ì#lu7'<# ҡ̯kg~IlLEMLgl]&EL oVe,dT4f2*3IO8)c!?GX<[hJqPqx,*  i+XO}Ap@T^|?v/? 3>bH'OoJn,N(ѬABt %&X. tPF()H9FXv=Hj9$K=[_\H׋צ 18 :;ijWBUz$GGQBv/|a踉R֤H>,s{Ux C)fgqO7]W;4v sR0MVmMPeM k`Jo$@uM]Ep9p-'=G6l^<;׌8CEl̤]n5aFp㬬>Md4Iu2V zCu.$:dy*LYYY`rЛx1EbY%t0촃4`T᳻z4JM[J.EljvԞ* {AȗiSCFt+؟A295B>D8=>`A KC?N[nLzu1X~1K4Sv*?B_y@.ߨ ~3HV0oHZ^Dt_HI9ɽHC({E>$z#v()M%˛m H&G}Xf#-ŻHt CD_ZKme>#Hư +ԋX,Q猯'a3{!u)7GoPiMJqӛ O!X#pO޹p֛&_^"3y'Df|eů|SJ;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׷|k/8e<ڡ.0Kgzb.R eyHe"7p/Lwtcu&ԶM*U).չQŋf]Qro3FI eT|F>N}Oޓ9 bu#m돼6RcL$n Sj+]~qV.p˨3{qCǂ|߬NBL勸#v; :_c0eew#aZU}Fp\B;CJK 3Ex4 ڣkQ僰}*&і'`<a)9D^”}(LG1`1,J.fS"*?P&.9OQDU~hUBl93Na] >/̂s7a/#Ӽ1-:ɩk浤FsK6 fSw^ 锻¼DԻzhy`R^.R WTۡ삺&գ=ehpNCԙIMUʋk}E2_QQkyi1xJ{iD7jvjoi@yih>8~XnmRTۖqw֜h l;+"[;<IpX2{wwvC]|>/β 4&1EiO`+6vSzcbt֒0W޻mL|Dp҃=;)=Oxgt! P/!ъ/" xFl3ޣ~z{D CksA)2?/Li!4e6>Ch abXBpãb7q#f8F΍(ӝ ewOE|IZLʻ-5$acoeqpz0 ҋ &̑` CR3?{OY\yF(@gsHX!u6\ugM9K34['RF5٢9v``| s,;Zx9z9ݭ]MWy<-"Ѹ&Vvx8KYǴD&}4~| cbRtg3EW]!ztR[EeG?LB/~GXI8&7 g " H歐8̸ؠ&yW;mt[xYnf[೺ >$oεNt5bȣηYЛjźN=Z9Y`I'`0kt,j)<*?5LQ/u88lo A(~ tE.ȅYQjo0ƔK'eٖ^W}$&e< !n?v+$P}tq !16^\^5v 5-z'7Tf_XZd$D0_ W' R߽/g:%{r|Ωjtfkv芜/Ps:ؤ!`NY{ GXBbpl~{Qp+XY ؠՋ"%#w'' #0GR\(yL9i}h ^vn-0ɱ FV1;~lȆ=@m0rrVFEτj\tL4Ë>͡ X#-f( 0; )^O8f/P+,rP7aorՌqƪagSCQ(C-k+ }z# GЛ1Lo'I7}$\HqYQz0PI\o z. ѨUij4ˊ˾9|<.KKJf~U5LV忳 5C_4~q N_ ioǢ2D[lssܐLz?е7P!tWc؅@v K v' _Pd"ʂ C۰䆢u[Av ٴ70 ∺kT6n7MAZ,'hG)sZ ;b!L_#ezfd :t~w eV1Wr׆ݏST9'q'n*Trw~ i&>w!y!pvjث) !0@"G~#? tн|*Uݘ,ZWl~I1 rژyMyZBHqV a`>`2XϛV)~cvcu~9f'?4p)h'rHian>g&kEURA n%#DuZgW& nd ҖCcϐZJ88r4OXoφqa].о.xbhnDkE'@ hŐð/@=_7ԚM uoT#2dcR^v "Q#M q>i6P&BMWb0hmBbMtp,kTJ\T {^%~SCvz\S7>R]Btm%ApZ<80&CѤsUyO%n4q2轗\8N-- #IN͹: A}-o$o#jTw6+)/nYt^!i"6ZxOO݁`{6 I"]D&EO7`Hdv^Ҏ>:.x:_%͔ u'1Fq⸬Vvtw_-*) K^m ;`#Dd>\G go>ԋ]A6HSz0&0S ULQ2s ;a~*Tx8x@y^9OSWLC Kk ȠE4E,Ywi6/3jgKZUݽ9+ Bk%8_ ȈVs8 *"tMН%>N)D;u}搥~@~B"_mKZf ^Žb>SXAKUgc?8b5z]]M5zDp6F06}Z*Ԝ*dEITXï%X&𳾚D'>Gg*4V̰:EϤGՋ#4P&&d6etNErViHn)+EWBj"gΫpmHG|togۡS䷈@W`î)^ +QX[)ANjV%B:[yVRP3) J'k*J*>Z,t,b:0KR={if8o >,0NkcJF7 hjDG*0%"#A9OXwI:eko7܁i~) A݃#N["Bt0w . rxH׽ oQ;E6N;N囗,h:X$'R4gXܶ1+nULA/k386בn {>$7v7ƀRSmzXOJ'^>Y~߰b^9ۇo)aʫy%\Ӯ&ԅȰ8Vac,J9s!:k(1nryc$/A̖X@$s紳!8+ENRO6福E6f?.?Z}|[|P薀<<@2&!8E ǝA2 cD">JzK?V=_qBÀ{76C_Q#٣pa)S,?]rj6)dG28̕oF:6-,<^Gٔ:bYKPi*aȾ{Zme\̠4RB{Lƴ@T-bT} `ܛtE>N*N(f%ܜHKrnyUcIFkr#Tu=Dv\|U'ml MX'9T5%T։y`l:qפ.A%dн(\%k`oB5b2Nf􁮛 7;qF];1d"(ӂf >hHS29aכ1A2ј 1etO18z~iZɓopBsrI.0>i]BuD!D_2Mait+ϥۋ_~e΂;2=xl >d_‰`?63 $=j^y[Z?~ݏ>E_z:]osw~8UÊvjFXqpr|]kU*vӇH~GP:G܏C,HdB"PxaTǗGťIΑ1D(*I>HKR`(.gkH{xys"Sg>d#Eݵ@nnaTLkj48 ^iv;ՠTa"e~G݊f0By9Se.^_kiwm^狶sn;q mNz1:x5^SsSP%M*o7__ln6WU]T4\J;zUw`$tuF[mmiTҾT>ީm/xj+\`K.g$'k(pGهG=U0:Up+w. A{CbkcdT&y ]},p[m'k+w4_6~nv77NʗWʗY~q>7-/>?>̓yayf Z nȒ.rSUu(U}߂j߾%tO6nW3ڝM>խQWݭ#7E~y\9_u9;[U۩.gv,%zz|_kUwv6q!Co=H@)d~6}*LY}Ez7w[| [$?-.d[9c2]5mFQU-@@ccESavs"5_ 6S.jS9O0nwΪMLF-{9#$X4ĸ4 -NFZQҾxѲ *X&Oͩ"ԑؼyl?ϭ 2#2KW|&Q<$Z4:ԖY` Q h9>mӝ@ژ[vs&AwFמ&ɩwT-*1 u;قz;Jn P#xA5@Oy{ҋ0ǘ  s4FOLls*aFNюMUk ۵mgu~>~slu{ۊD0s>Hn8m gXBIAM߼R°SA@~8ϗ.//+gIe0:[#YzQڅs$$?B&a[_GeM>9b EK^Oһv jQ7rrߑх=i~{üً{C;rUʮ{ a#@b5Jcr⢪KG6$ hzTYY)7Qkq`tI!"g*" :֠5tN:]`щCmڈ!\ \b;;^ܭ\Wb! ǠMt~={HN)"qz*zbE\.>Q-rh kɠl"rw3t=̕ 4CvAZxAo f1-QB^ԇvKO>]Z[}ih\e>-r[Q38sf"wߩdN50֋2=iG(Kln/ZNٞ]կ=FBuHo򧶦GkZ--&J;[nA>@ܣ\:%GqVǶ-\)Qvʪ)&Eps֦?M#&p }w@Dm*_0#pڝ6Ȑ5sTVu8-y/ikyNz;,9 0x6և%QOT3ɰM'l1Y8IqܫpmD/TQ%Ytm!Z{tnVDH"<+O3$/u)a>pcjqdI!1H6;83TJ|kBt0wdwX֮[H\Z''#JgB /a\I9i @;MU.uE4[؜J kE6''(^WE{xV+zOJ@ZFCXH䣷Gv5$$ `ZE# J8}}nv $&C pFP j?D™cnݨcM=3MYUppy5jG5jU:n8 oHz|-NsT~շ5LlΜ"e; Zj+a :A06"֠L< kNv;;eC%5CpķY'ԨRC+5 V`1LnLɢZy\Y^W;G 'P=^'ޢUF^Yy4F<™ͧF2070f:I,} {[[@ǕwIi?n܅TXo\LkwAnOSC~6 )`ML9L1 Ԃy_;;+ܞ(DEg K5h {BEznݭdNNaܥ*Q-O+jAL\ ZXY䀒8>[|*wNs~ Eq&:Cɟ;`YQix5P^y,BCS6jS'b6m:uHaq"O$w&p@,k6%;K8RlӭkqarG ?)g»K8KSlkecWCaBMΐrKy;B@ϧ\,'i/;G |4O&kiQ 8R~[n~32+oeMm}1:%:{4L(6KI@=:?(a J=Rr飂[6zPZO?K|BϑEQE`-Y} +WJ,G|Ul7?_ )r* r/K]edʦ2pḙ ؙP)G*8%^i4(\~evsvM~Hj#gݕbX8U.ַm8U-ojE^1R%Hfʖb$JR-8/%q|B=Dj^NxQ-=&vЎBL3}& 8 ^+d2 F.ܷީ)!'F/Vl9 ۾4]NjÂv2U)@%;E&x΍^GiyNnGuZǠlbUT9?Pը{a_*Rt~آ[]{z?ke7ׄ th =b x Zv;[^U%x2BsѫkUΤZ0$o3.n#| 읶E9EvtKf|`qNm~( _^KlhE8+kp~Hӌv3Iq,%$_"65\r5Oj{^>>WTUuM}Qc~Q)_ꊲjoBZc_2ҪWzઃQ Eۜ%w1->2&/Һ?gsk-8ՒOmi{osumKrF[{75'S{1Zgm}.|['1䳣Ё^◠V =2m 2.֭ڢ01z·Z\%g@Ѝ*6NZf=I[bb v2KW8d۰ج>%b%es,%sj˖umqSѓmfb0Լc]VvZO^s;Z&Z 䚖yT9/*1ua]StF.WBgTԏ$A%A#F3XRM׼{˸Ҝf4Ĕ<49A-hy "Pq/-eOtN\/jT@SDVHΓd̦bCcږI;R;\ Di ~v#LiQB=d= YDW;[<+\EDT_R Z%I"",{(S .QT#9I;oOJXB<%=V qxwiA( x;Ũd[p& fdIrhlj"`KavԋNO.|0"C$J!jGCnhm"C}q]Vq)EXGѹC:}ѱH,].W*i/oēʎ԰ Z7cLz q4v\N_s}&cꈅ;yP5C<H`GݧQ$N*R(ݒpuΙi,8d-\ދMw1bAJgQ'ix4ՈuW(-ʜ85'G9rNC,~ril<5 $5l`</?6rdd>R=jrs6edZLe'x/I [<6R$ RmGDnt@DWrl{fvZk*~siN{DhlwUgHw eS4 mYsʩ٠&f&߻Uqy{f'&mKXڷc0{wOe^;^J(+)(>siW9?8o#ZIy0ߎgģ=ƃz ,!ETﺭό&+Č.9.V as&)p{Gћն W(ZVdTQ&drgҕ5u)Ysv86B'lwjkЧ".=ãH8[,XIY֯ Krj&7$u̾ULn".&@.jVSr|\MoysaM׺ FBޓAܙ2V2zHy].Uwzl 7V~љH} $;(NntH\o\|v;gL ۸HP*6KzlX׽$OYܪQyqᘄ y CV# Sd1Ax.Q^7kK>,~W#SFP tI R)ElSdOYtHRIۍ}I{|:W7?~ʓ=jVNNO񳓕xe}H!0A<7xjEcǻ5 vxgnHpmU5W(퓧+c؅ G=֞,Ƨe2G׍T\8MVwRV*HdU ce+m1C/jIJ8 Γjz=[oke8EkkϖZ'ڷ"jis׋ǃL98vL ?p4O,oL\酅w(5r}N)8с&8\rŝ %C~3vӣ㨋1{\f>.c_@H4r8E *Ddr^ʋ7nCtw*A ip,}6ѣI _IB뿲$wɣ;|w"o0'@7wn Rr*R0,h]:*y B%%x_K( >7ܑ[ }FR8xMJ>X/1כFA^ԅ ^%{^8^/"{1{Jބ ˂["J`W753pp/ԓUK{& ޫn {-{q3|(r9 0) s&fi_sBRÖ9 F>0wQzf )9(H_SO=ηůM1]ۧ%s9/o}Nl^QQj{SOW /-=߿erh<_I O(?w'R*# +"nkvlW,\'l3Y>lV@y|O~#9hǾ7K~H"dlǏϝ:hJ"QRD# wINJwp gr%)=&mkH3PUϴSx0GcqG, 9y`=P/^xofek*фX=o.lx8 ~u b-M &oU5u+Y7Nֽud;YNu1n~bRT~7ȰnoD *i8 ۙG&m\k}\67U~9~,&ݾ}/vKQ̯w QzM&U/rD7/ӄ!weܼBn.;ifiSMo7Wǐbqo\%%_1mY SS۴Zw]]꜐{/O[$ei/H3VOn+&9CN|zxVYlo0\FS4>R[[Cs}>ws}>ws}>ws}>ws}>ws>?"X