#!/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=3e2ebbf81de974a147e7f65798ca5dea # 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 NU)e8HQ 4#aF|[ 4 bBYh2(L[' 2&#á._H C"! b 0gKu #vj>w#xﴵjP?CTTVxڇP3 A::CC75Cz\Dqt>BQ_B ڰS>rgGCģ@ָa0$\[7ZUjrTAz#0ީNQVDӿiC /*jȧzшֈdZ޵PbGA<@kx:P"uQX V9 XݪxuqT1>5FhS2^/+w=3. &~꺃 G,vnw0ע)lĦ-|St;\?ayrBh1C@ߏk8+722 I&19zn ZW!͖ ШzzʘK4w@(Y8R&.aL![(ꈶJm\qE* C[S il;^ľoX}RGFZj@6l~T?"`-Mz3gMO~)ߔya@7~p'1v4B7 {f#M YW}^'D`vqG;<* J)9ecq/Z +mqCA,waC#MjNÞ9HzdMW6ƖO/W7q~KPˡx~EϘi= :xN;{7zASpJRBrywg ; LwF&Pg]A^tAePT.IB_O, 5!0{}|΃ȍaí%h@"m\ayQWg60/͐do럝89j!`90K+G(f"ƏE|MYh :DH/fOq[IA $QM;>ՉyF5f׸tM!YW5#L(npP@׋P Q#)BM5q'6Xش)rgsoAhpO#u@C䈶7!c5_aݻQ̵q]4`˹TpN ՘׾k# wtЬ= S*;!Q&5dPg{8HUR6hO OV,x@R>G1$JlEB E_ ri$!+”TQXѨ*ǵ_M='a4Y/q5k41YČ"r(ǟOqEBY"4"&ј\T?U$ y4*YkEyHG9O2bF[7H|]5 DI#Xn l&뾖*/3c \WvEO|/\+oоf\< }q!;!GH?"jHw9y+dq~11D9uY/묉Ǟ<mYxOX0!0'di<]eaťgys+ q"Of GL#qDgDv9uGqUI&xQby2#qV<ؓ:0dݍp:ǩ;oNĊ$:RܺGZħ,ZNoM3I#W3[;9n֘YaDZVf J~̂ eD-X,q^L(yo2;d˪$[u\4uׁÈ','CgqiNu6%a9N &DV>L#ȩR-\ߍSa+A7%ߦA"r(ȇnY"@f[%r&WwaE !{@s"@C(t4< qZ/˶"F"-ۍHEC,xxc 5V.4TV98 5Y@.z ͻWj<}HPe_2Yi<Ã?S >*IKOd5tc )pߓJv^Ri?ʶfWq1JYIeJQ?ћId!",uUZx ih|y;X6|)7m#PD]RlcIw6M5brDs k欒X}]URX-ӛ(##@YM|Q5,Ɣ&=е|oQ6Ee3ݕYi{-s卜VdyBɻ/n"o-3N#H:,%.)1)j j?.V8Lm2*EZX/Ճ'fq/OaM,gڥG|@opsRQ~^yϋ*}9.ӾF3m?c}gVxA͐A%;;__)=tdNLP*ڟSCW)|xC@^\Qk6a@_ #mn0C~% Y#qt-uXFn2#Ұx(EES[s@,%^\Ģ2 =[t&e?E@NCMn_/HǃBfRtgo˻ޛq%+#J(EI.$\sj+I A3R,[{x "z)o%/3MT2<ĉu"<]z|2SA 1Z#+qFAz"1PzFIc}1ҽ  {mN6ppftJ\LK1؍4]9/[N{'Z]}Q]G~, lW,U~۲SM5@Z.9-z5dkt>`MϑnBZ1p^0:7hTf; - Zʄ2y?:IHT1 5ࡳ&gSnxH)N gs(a犲d &E۟‚oypL"QS<x?`;KKh ߂VfÞEH.GF<;!+fcFN]xpQ CoS2Yȭ/SkJ8W$M]9؎z]d iA3֛ɛ=#@A's<GbOrG_65;dW@Ca, =-.n`8BN%aIڑ?~͡ UVm\k7Rap #SCdl8Ξ*aT۫~z,ݒKX y,d?^SfV}7 ;tW@?:v]/~ bTH9lSJgPq1iaлu<) &pT; uآT $MX( @{6ƫ НGiCF1f70év8/\e fL76p70=rzHE~WLH:O΀\7dXnCr"Ykl]}N W"IjO*k":7E]~p[Ygce>^Xw*[mV> +U}J])|ŭ:.k,nwL&B۝+e~ͨ(cO=RGYB- i`, j._זKRL3WPS 2wh  έC()[Н1J;dTcg1B,޼{)Fwot?zt,Hyh !;Pogsm`x1{ŷL*.J0wUYM^V/|mH 29DB[ Ee٥EH~BWsn|,JЏx\U-:E ]&ȳS6:fVF,{Rle5)h,}X8o ?,Sj/O_aV1 Kn J)1dOJ}bo v opl%e9bHbfm#&/Y-n4[G^\C#P.O[$4Q B>WV,O&"Tq6O?<{GOiĆWX_C Kx/wĵRu@ɉ ƸBv=7`%e,DE8$*/Zۄrj"vw1ajn0,gX 62MW*y奷\ /tw{fdbȕ$g16K-%v [Acʕ^8%fp:!ë,Ŕ6[g"g3دU4zjD1Q+:\$p?M.R\u(f1Rb1G֊!+1Z$R=_C\7Џcm d6Fyxa߿AmV>q0KZ!+*Stؚk.AVoZt޾9{GU_2W]1UG[yd)f,r^%8뾗#1L7w3-Ls2$bRhtV,i#x0 S,Lwv׍cM'Y[Tak==R;i\8#: Jym>?C$*N< hKW\lAGAGA|kt9>*w0NT G'74) g:ÉDx6`2,y׷H; GH&>: !ib^> '㳏Ip)_Oa8 =œh=+g8[_5m4R8f`6=̯x/RPO:Wt@N=sd^[zϱ\ B6٪&I!sJR|"V`.EjHVN酖+$$q?[wl\1^M Ot=FSx<Њb&Up4fvP[6tB*p&n8Ajn`wwJ0uE11ANuo:6I[(CHR!w?Xgۄ4&:,qY+m2_хf좡dEe-WO`*rJѹ)oMXGfQ\pÛl"n>B<"f4hG>a(QӾP"SȡjxMa:ܥ+l3A3[T&kl&H#a)W./S0 JԖ$6:B82,Ō\_.ױP.jZ* SSݾx>@A?mиK QDgM> ųJ#G饼ZH$x}*fԩWL *" _Ech47Ř&.Zup>mnoo3)_'Rߪ<I wN]31ӽ&aj=sR/ ''4͌N^wck pJ''N3Xdc鮫W҉pФ?tQ~?{ $I~&0=CYj6o2j;H|t3N+D#jțkdeYCjh> P?t čU9ʍ7ǶuM.F;K Hp\,nD٩hqS:e~S3/jmKw׬Ls1򍷭vtp}Snݷv5w~Xb;G>Z_Oj/"Ԙ$ӝ~oWRv?DNa;Jqv J|W+CmjҲ9kSDt_STA;̙h]M.?#kGzzM+sZ*r0ޠ,abXxȫ~By nחZ?SU$}؝sld>T޲f]ČZj9S2V7!wmHQ"iY(mF+ ?b;D;\pDLcݤ'2SIa޸a!BaTKrIDOZ\}"R!*qHfdW=HޔDs"Ñt4Wonݶ2U_J #(вNT$xNHTE8>% >B5#\{ԎPDFf_v77Z*(3^gNo PJOǍ퟽RArMfLG+!lTtt:!o`L%[]otKbiIާ .>1)3,_&+'y K{fۀd\K*dG΂Q}J~@avHuC6z-<-`wvByuZvlck@@Ə5í-iN >j LLӨFBv'Qkhkxp6 .}3^2B$_0ׄvqC@KD5QL @XGNl K4ltլPƸ<{?2 (LN0]% UUavޙpYA⚮ɣ9WpXO3;T>a/l*zdi@Aϩ)x6s$-P"] s45 l'\!Q3\Gs@{< IXm/yXhè{hp)*⨚P Yv #ߒ |ȅV*2=tAt]>A)HκސN(%X/bH^ttncǽ d}}2a0]j^ D|F ZEoM:mTe¸Ǻ9MHȕ5'`M!,3$7H[_eF–§GRHR A/ sEYDbYj82c_t3%qHQ,$0SȈjlSfrw%klj@,8yñ :n|s+q!w;I]cou# wכz}ڬ.+,ĉy/\U>8qs($A⳸r' {&#siڍϻIqMx"q- ,41 CiyW9u0ߐMWA4@@,*Ƚ_-JF{e`Qjsޙ.lQ"˶KoG*4p lLC`4M1^@@<΢Ǹrؕa~4U e&=Gw'El8򆧲NVK r8)UК}XF'{b?B_!,3iWTrйN|1dZtw߉!0+☉Er3\wSEͅ[ojlb녶d!`pvk[L5I,0U\ (\KUHbDy::篬KaF|Pi<ʍߍb8'a-1E:lcZgdW4\5FUP P/,*ٴ&^W'ۇP]Pq%a/}0M h!Y!;DA$]0$T`>Z'YM,q<#gw'.l,Rn8zifqXLކw5z6ɯz2=/z]A y 4\[I$>]q?:nwh[(Q>8N{KfqԊe:An 9h 6NDhَsxbm~ثH^0쒅%IZ!C(lud8Yq ֶrbk (mvJ2wV \uMX2M"H^X櫬f 'ulS\ҫeё&9 |,cUI+o-bN::d65_OC Ԑ>^ `̹3nݩ+rn wzAQfZ"{r&ꦅ}G ɠl e9UX6HRի3/[UhLһb@LS(ߊ eP;")j녑iF `9fEC*tQu93 gw2CɾWW!Am$x,U_qs% V |:h*T_Nc@u/K;XE)s4AַI]f6G\q, #A(2w;1V>O)D /Ei᰷ⱀL@Ή;V4mz]->wX =(tWUMo$1f5W5ϟ q% gA,Sˢ5`ͻziP?$p\4}k٬Kfnn)kf}iՎ~&Yj.?hvAN Ȅ:Hw~ӧLnnmqߛQ@:FEmAҙ^.:_7I(&zq⌭|gvUl`>٩^ejDQT '_J0lї &}Dcra=´Լn:4PeFj`]6y|)xёña]FA>60' g$C,9+jvَB [0$60 * 2n^?K&i*Y`b!KE+s-+.U5=򴜋,Ia;K1U e'lB;lxs饛s1\?Y4`WcP?}6C\qY uɂJA]!<^4W 4[!1ʵ@L2Ԙlu)~kɹwi%.ll%ޯ㞸,ykR\,#Cn5S>i@QziV/0X(T%g12&!6֙PxL!Խ 6WDl]̸1BtkX aY7"cKݒ'NMBv0w bgiL6ƅ]ꑈc+ \_ TjRC)c{\~vjuX6۫W};٣ 8HW Bg'eߕ7a1e^$%H+Gs9?}8 ҊtEQbf dC;O>rw|>U YVضȰyrkakɳgÙn}X'v0gd8|Q#K8+Y]ûw, -Sy3c!b*ʋ)ތƋk0{|,H#4+R5ug(\ \^&FH ό{tf|.Y;_k\WnQ * pn`%J8|e/#vy =\m ABlGF;d't,p-'\ "H*9& r ElBjUQsGܤ3E+]$"MZHn]O#Md#ʴXe1Y@QNMrzfm0wקP< TQ\=*'o0r3[(HuOvts}A,9Fq e>'O5j^Xo$Yݲy%ElQ %ns~w;ل2B#$zw=Qb+"eɩG71ڲu,4רx[GG(N5{9'Z$dnFW? ʖFI}޹^Onɑ6rZnٝiHaԊy3\+YokvVVUb-Gɀ3'\匍 IP>W=C~/ %WօJ1ͺ|Z̼f)c%#8>ֽ5Ϙn~86Ex.e1ȈLy|H:_DMaO!G} ~v?(:0\{&ki&SZf C1Né LXᵞG"gc FN4z%#l_%h/9n3j ěbtщPu򩕆[䞳rSe95J=8iQRvkcD&>D'G =ZL2tLkF>B.EMQ*BqNC 7*eVc':/B aQ8ZennT|WQVg0&{#-"jMe:WQEc~ήz^"*Q`?KK6R(ZބѓSYg!v  ,҃Ԛڏ YLD%gסKX:NNe(2?AHlcjcjPH \ "wZ;y^UWq4xij'GɰG6:;a'v3]cm',Tr5F4w1ݩ~<+,yax_ڙ}C௏?=IN.fÙ851FO_/}, Ml&ȧnPDV*$r ,i$}H$wmHkȍT:1Cj4ad-dNR]I]XfK-|ٯGjY]-+|(~j` NY;0rofIW}[=E_`vm2yBj?ɋGMoҮ"'٧ߧ]v7"06綏lXz@7?Kno>?)!6%՚gȇI݄u!n=[W , #ʴU[D.`k" %Di Sh_`E%+L e:k`z^n>> F˖]-VV'qgX'9Qg9Es=w'B(B۪=QK0c8"(M3#c?Je/ع{$CL Sd6l7zzu mx{rOlAZ_>"s)tm+U* qԔV ћ.\ͦzueR%uཊ>TKC˓N3saRta FM. ֪GMF0a i0Vɡju֋/V77^n|QWBa"C&H~j!G0fyҊRW[ }B̭Y^4h -$"6Z{d>U˒cW3{cZaogq5LbXhspyNn6^UUNcn^˰)h`B 'Ž#KTX.,hCLR:Fu*Ϫ: .C h @V:=pJ^ cp!`*ijۊ5UQ %}ޡ!Xcg(X,:BZt:K8on&s$XU2NF|$t7^D7c[glַk[Ra| "}Eo1-#JsyS&tth;uIBy\{@[Ro /Cb Z`hN<C>VY{LV8ʊ)Vo#، gg+x6%*`V ʆ[YIo2(AUYYFȒٕ!F"8o %d촧*,$6&NJbqr5aM3v/bE8U!W_sҦVR:7AMy]Y0F݇yQW1՜|d2r]8Z_ ЂQXemz It%>7¨b3M5Et|@sq%0 u=96Hhb :+7*Be8.!NEg|&SBhO&I`?l! X 7IԾ\V1eI QX}+ 麦pOEX pYa<'T[*]T\ ZXYY&2/q0f>TΠ9s5)ƽ8Hi :G;`Yo`{ i͓xAU CTEZD,@ˮC" ;\ P&֚M\d<t 6\XB;b'M$+Z.O^SieP~nqMegH6,&i-V<#Qă0\ӝLYG9b I[9[TQ߿he|,YliPc;$Xe& , TP1{eDZʕ2 z-V oÁ܇xMba()'Q%V(9h|S,%aJEh_5 $EvCT`Vݫ2*IW[ 3ݩRk k~W{:%u g@zcڠ7ayxpWnC]wgNAĩJ>mGPF_e/ySbt3b,WK,'̔jy#CYV),A\L3߯ ݥO?_Q`^5u7c #`3&~;ce*8-\MU(H\TIf ֽAEɈmB*ژɣ/8SYB Lj=bV6N#d8Va T0D%^8GDX gZ1 @q1왖1`/TOO2eGL!U>k{cOT2i t7nThOZ;h{!VޓPtD3cR­ ;Yf ф wb|hłeOMPdʠ1gX=*)@JeX:&E5Xogjq8EzREIl8Xz302) dg΃'yT&{,m;`^)R_7豮\-w{*FK wK@%h:Fqġ3*y9Gb;H;dIƺ C;vڃ1sw_fN7бB-V#Fۡl7RpIn'g@a"On(,3k:jfR0ػe jU#.ʹ@ܕ緐}пqiYk7]0'_RVK ޚ@{A7A|d.ތ˫k0F z\ҫA,ק[}E[5sώTIaɬbZ<4Uc?޳z黝١e݇1hXUUykT4j񾳙*- {t*sOqMgF.ޟxsLHfdđ+xػe>kDMF#TLPY $[=VuHLCB֐4YVa;RlZbZ\Rp;&?|1I})P|NYYk*"N2RlO`IB#{)V]a 3=AFoUy^~[ *W]WOTφ~QcިowOia+{ZSYԏVddBiK~}h44&%,9m8ίN5mniENlMG?|IM[~6^ޡ䷻̯i߷DMߵ-G-5&k*mm !-6yƨix K͔ YapyA|A=!TpXj)T~>"o"fb s9\/ܶ >e0"$קӷ#r|_۝ӣzd#L78~YWDMn I*Ux]ݷg[7TVoߜt8ҥooîHE$J86i#H|abjg#Kq&6Ҡ?pc%?!90J&:KFhZ;E4ˊe--bD1ت>DY /KӤk!f8q>D  w5JK9agF ?CYG݀Z8`cx rgҿC-Ġ"Lr5l]v16Qnj ?"#]!aa~8$ GFx(1}r(h{V2P;Gz|_O W#1ޖLkD}b3ׄk@ УPfqsgͼL5ή5ۺd\3͏w( 3Zijl=jGڠC֎6 d8eo^x6?/.Zř>X[0xDA@%Pg0_N&i71a6ծ]g:üIm*i~oeHxX ׍V!T$ÐMDX d@\jh$c`e80swjaةĎBOgmn$3qɱ͇ߩ0)!TVdh5[0Βs=an6o& 6/e? )C6ɂkܤ89\wN*zX Q z_rG@42iaZgN,RώH$+A[d_":O;D5LqeŊ̻d.o J9'SeD&"Q%(@,C\:ZLy7ǝ&|tJ-LݽRćf]/}Q?H{nt&,:U"-;9wT*!yGe0Lc!0HLix**ε `HQ71_}q \G_Ǔ:%o_@핝2W0c/G(4GF,8T\>ph^W`Uy4} &%A.?t4|dc*Q sϤ,63[fkGٚY1e j<氋d XkZxA~ :Jo7ܠL)(dqQ|꠫ZV=jw&0q0 ˱4%6FKe: hFe0:nemxܛh3e> ={wJKE Ȏ@/ar`@;]-X,=!&5 Fj|㶕)%O)P4XE8.>!uB aQu;|Jǯ?8z:|i.("Ŧn"ԓUnþʩ|>p_<\M,\BEE*sFSerhݪX?+Mn|vb2^A̱~~0ݞ@9c{ 2r}+JCE|Q4'bra"O^I/ڶ2k;l Hę E {3(åMˊ :_E~8M~={΀4v0.CFʸ' 44A0Mw&wYn/~{u7zNXKg@߿F?^_üx ~{TɫZ)bM㳒g_gG9~S'xUOEUlDzHwSs0%0^I Aϼ!|l2f6xEvUW}/>{ʝ_c RAX:ªt=R(w2&^z"!:fkehnX{Y]/]m7 wb-yxy:9t PxՀ<ϴ̾ \_h$O8& :ހdpZ0i#lzzI8̾uWQLRQg-*3ŔD8,QOH.Tl@DI>L*BSa>9Hpt 3TvT;nI3ZϧqQ0bT֎l`6o1stb_i<_꤇_XN@F=8U=C=P [Bz'Լ!t\ ['AV~F&19AMո{SR]=[||='tXݍ濮6V[ ,&/2 5B9PN}KP81GUF^?aw&';q]'_3XHp is{~L_rPUshXȽ:Go;UaKj`;AJ ~!'xBaYF[: ꕀ+dg!zn}Zk ͤ D^Em,w7Sy#K`07lϧajltO|~>0BV6iy˜ P VJŤxHUQtrxyP;={i_?b%E==<Մd/vJOv3^j C s!qĒt ?c1 (Y΅`?Oc{ftifF wQHl:.1gd*X=pp}B X3 X{[& vWlXiovcyYf1ɒl&Q 8ǀ{>lzp zv\RCodž݄:ͣç,RT8{IY ŷL{OΙ2݌Gjj[glXL1ă;%@sfgᡘw< )t!NaEEuR_DJ2zv$~zYOȯ^O}y5Q/),S5`ǡG4{nB\߈ݾRD t[ߟ%6ϟUAw:D]Ʒ>Xv gBe!l, oZ6[.tl;Jiq?rZ` طXb|l8hՏZU567Fwdɉ|~פHkOds#G+C`ͧ 0N $K>[ZwX/ǯUeҹUlgm]I'@v^ϰJOش>nZG4Zλzmb4hx:5W& Gݹ`,!x»V.wLH./}0ۯ^Wݤ#h$nL{b%5Rt [K _puXG8exvS$@wHP]+{j.+z'tP7q2)=T*j ȟG`Ψ]_IZ/Dd& 5, t[*?8dq6#ߌ!u`e9ZXtAu^4 zcjш((q}ߌd Zr-y2G9ed|78cOW.h!J RX#' %&'ٙNߢyP?6@4MN]<װ*F#[N63)׮}Ǟ*B7G>?ԎCyKQ{Pӄs\^,Q,Jz(0罚Oֳ0( !]8i6'}')Xc*"=-K3}ћ[`OjvƱciUIAbquS}ǹP3KR@&h+~hEY/ͣÇB.co RSuQ;d:l8* u&sU/>Âul|uĊ"_FJQXlX^gǣacs8:nbg(<+a.9@y1{ǶY}[grf^n&[aM!5,bvY> Op.}e+;~D\':cv9xySO]y?Y.\-#o˄NxW\^ӦAC'/)NN BzL=zL]z }2lzI1hTE[**1u\MvNuۘ-|dFZ>n~W0e%HVR~678[l-L53w[?j2\6n\/Xkީ k.A)Rq &∹$2R _{դY/-lٟh"A…lpPc.uq?j{'mEXkGͯL^]nk{h]izثwڵ"ZNfU?_ui׶mn%ϟ?S>F{}QXRs4DBZ5=( fKjbTFqg ]ÛBDz'jC'j*UzHAd0((Rz$)h^ka ChÅfaAzM Ixf:d.bH(myKS"h Zm$ T?o*Jqcd1P'A F;л޼10F']+ l0bj4lvZج%j}!F݅QFM[gƇ,_bƌ04, Cx1sv &tv@ߴ?Ԛuw^bCN~R(ٖ#`ւ|Q;Q8&W6Ó7kGFUV۲q[4mH>.t6uF֛{gu>º@e5uRk{:9m>a} 8GlzW;8'euo4{mc-<(I}_?ԡ;٪)$jvxPpV;lVzoikl+:8nxe]+{(x}jа^o6ONzX4GUX( ]7q@ij8- l;}TG:KhKl0AP:a8^#hul3oTm}-a[ Y)4d{dB_W]=(QXA n @di8u!~ Ea%`Gmz0 P,tY$F'}4Gz!Y-϶7'|bAQ߫ *˧cd..c_ZP?{a<,~b2u>4)Fuj`gSǻVE (:=QZ;r;DDB"1烙)F'hU,H4|_.^}z`EL&X"M`cE.SZ4V_Czv9#<(Sl`g@8"=|\T'$MB (]v,y|0 pr g &z՘SIE<^P#n3 nU-Y*Uxr=ow>2 D8"vXKJex /ˇ=;oRnQAԠ,M, (7.]䣳Vv (SPmO\S RppK*}d o?) 6_@A[ vvl"g~7O V&}bz;lA!(#ޱx29ؓw '-I]Dkenp`1A74Gv{}0B&װ2lprC#넉h/ efQ]M wsÃ0fH`h_[)e5hfUVQę))pL3Bz4 F42&!i &c  Tt>F%*ih68Ws0@$(9G`ֺNt.cC߿eC 5:*tI avOSnM-? 熵@:z8!ZVajyhjLCDÁUe-y2ˋ5!o݆lmt@=a gq3a卵Q EXԡ ,,!935,ː;0+?Z/RFG ^]#8wj5uWU*[}Ftjk|mMu?WQP[.8}0JrÃO)ۊrr6OO+d6S[K8 ρMqX9]8@^`޴Q%<|DwvRpjӉ<6RNb\F&#t,l9ӏ̣D89z -7{ZfA($qPj>puq489xJƣ 0y .p$\0M"TCZI{khX/Ä >SPB7oЦ-`bnቄŲ_Kus$xᘌº[Wn$4N.οywk#^nulg/˵g7v 2{1qPXY8 np4J$~f%(՘c@l#\d[u:ięD!N]2m ?(ωO4t3d.4ChQHA}B`t 1ih@*5! !Z%XmcUc$ih TOsq󭍇??wGA #JXr- D361:BBzgMg)В6Nhr#ڜVI4bP=^$Y'!)vJYJE $ dp. }M--æH\5\YN8ᒾu߼i伷NԝӃzYm+ ȕ[tcۈr|]o4b.bEM¦&"@@9Ȉ%{P9 (m8nr($|0c0y_}VZ^ ̮9~=SP+ PȀG "~LPdJvz?A~MmⰍR&BPU8et(=gMARifv^ϒN(MeFRe n 0 T߭MW>qIyC= k+ q4|Rz+IW`h,Q0J7KqlSܿN*T5p5ڇb<$(WE)/%'MnOIn)3|RË;|(0>%mzqD U,$ ݙ{{`x{,J2=5&95I{fC!A /I~M7ȃj('d`#1Ӗt :'7AQ $;Ip$@IT3au87CVh4dMZ.[yfe|e'(v]0L6 2 [Y$vE.$dCN`BR3hъ lF0'a 4 q2t0-V@olhA9fZ|?IOZ ed!n*اXZ" V@7V0raB:4!%(2ޥ^#T mL@I>c1/fJށTKKf"#SV/a1B葴yeihR%.ܪ3vA&r6)Hh-((}HFdeCINm+ TNǒ(o}VW^ӳ'p2 yosni8FDa6M\(ٽ_O$"et<+z܏a{oĄqƸEh(32ZΨmy^m`_#1osfTmJ/'`YfC̘?T *G(4HU0R3$oNޠ7oO0+OД*B ]"8#@="3=BT%ǫOK[=l?5vQ,׃y3v%{_W3~QqCI5 ak,Іۓ&O:gS9ZNϹ+Af b5,-io''H+QV^g&:2I *T~/2O>4yѰv{5.3@movEaHnؤxWj+D7I}e:$!UC bL⋀<1K}~Q M ByL/6RV Yc19:gh(޸&Y7z훵RډO)FyMFSs' Ig^ r]혆[*BZڋ%?Gr(S8o`!w ryj-ͭJD )N? pV+JQH8#u[.\$l"~f?C{OEлR@M4gybn>|Vinϙuc(d<~k3w8>i7@i 2aXA+)[pl`@a\R %Y_=s3ݙ Y}38lmouDq &@,V6í}VYdm5ЁH n 1(7KU11|%s <F,:cNH?0 8nLko)ͧ|"EOJEzh#ۡCK؛7-./ź2+x{ dx'[{#iU*+)%ȅe!]!XLX0: ~8zyiU7fݤjhm K,Ϗ֮Û\  $JT ¶Es_̓#Hh9H>slcH17ljdyU&#?ϝα1@CNqFKb٢6 J;;ֻ4GlΒgXLp8 PljP  PWrwc lG-xk(3 s?ueA 醫:L¦RJoԠ c<׈,'%2nגiڜY)tTk}-fSGK(?|xN={_KgVYMZz潳y=}l}5,\:Y#Fٴu&7'iȑPSЯ JPtebZ`4Kp⏪,Ӓ RJEcɼHARDmLNI#g&_J Ӭc>u֓z"#sA=3;ff/.hMןKŮ$2pZ0$t"J{SEu*aYqe|}VY{J=ms mo MP[k<@wԃ< L#%:P N{;K&VyC=,H2|ZGj9 L5{!P}LFhTU~ʮ(X9Tn0bn4FI `&Ԯzu0Dzބ٘siJ{x&xdPh}#@_Lbӭu0'\8/+(My~:t.N)~th9A af*"t[`Siru$1cR+b34`Ӌ۔sxzTAUe_c=ST"i!ҭFŝ=+HlBӆ.E+=g e3+5rw;h0I8\=GSO38u1ܶyK cˀTZf~偉q7nU{b 4 cfY˃hIWC`po'RbP! @m^t2U ϜԦIV 9N̗}0N_mCj KW^=hbkM(δqLSER P8h8Ws;>U1DQc{ZHIc1iVInZ!ԍź|Y~P;={סo9׶<޴}ރ}]?:n8^ڀ Kǝ^NԻπ|xNݦKLmw<أv/45m}"%vomOVe;n8c8VJd{P>hrE #wF:0gfKD8ӲEB/-it}q#(B0^ /bT5ЙtjK xZD#q5pBOf Av mNWE *HxB*u'(~>!x$}֥|Wq`L"q\!}?H;ͦiWXi/K`IjNWf}&tm2o䊏U:8}&Ѝ@fd^^Gn5O`cױx5 |pu s1;;ͅb$/:|6\N$N812`\/APQR^;Z@%JA~&z*J!%oGxdVd:`2:X@T; ~m Nh3W~r*u¼Hgr"Ԑ]HL)C.]-VF_x Y(_=7Ƈ-s?ϟ=I5F_pZ<[[ϓ϶Z%JZ ״_'X+;qvcsكǟ=յB| JNˆUQ(4V'ӧBBcki>y<|>y<|>y<|>y<|>y<|>cQX