#!/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=f94692c64c4fcbc3eb7c680479b5ccd3 # 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 m` ϫ+֍WOIKY[gV |Ϭ(!&8 @K=~ $yւ b"^'3NoA%Ol'K`Az,c?3ZOAr>!R0hfq8I9isM,4I=zL cQ3@!|]bo(Xtz'{ ф}hEzɣӛvH–^ʓ E.y0Th<و<)R#` RiM9*03M8L bA9 Kx>J(-cbgd05@KP"hBHV{m9^ d<ﬞc`dm]]zÌA\ۺC,12y;MaCY7m \tt5j0@Cp@wؠ'%15|5.~/-w]mcaVw7l6ۣc2dg9ݾaݘVe;s27y4F 4.&.F,SqFfׂG :0d=Ƹk/J;$/rǮɮI1wVt~`CB;&3\$ 3狱ckxZA6=H4`r< ä3Q ڄ6J$f(\- H* ̫ue&{1m- q. 7rS̺dF+pPRjC^+)TA4 ), V8 "a؍yVK2V쳷Uk[#ѯj8pkg:.(H0^@Tٱ6V2_DEs_vYSv)'o {{??=>=sOy [o_fk;GogԻmoZ>ծFf!4Qg-hOba:z u@VRfTQ4ۭdg _6#kb87۳su; ;`JL~ i߷x8y 2*_JyOըj&l˜qv'ΜtmӀ|߫xMk ΣjJ))w'CXߋ>GcKh[;zO!g~tT9ى*_ O- 5d.K]o{64'K+4]G*i~Q&qp@*l]i)38eeܱ|.x`d[yH+/-9g%*-/D<)ekp9̩ r33+=%Vي8Iؙ:QDґLpGzh&f33b־E<@,eM |^qaQnE{Hh0)q@ gd0[aM3x8E2`s#V~+9I,6zL;,p@v7:(5M<^#M6)A{Z1xL>lT+RuJ3^?g>3yO#m V*.ı7U'ȅmeH0z'%פHZ$[r'|ɹDGOI^L9/M8TlшZXA| Xs :=EOܱI~NjHj[mOEwa`\yBq##$3Tt" Țo҇ikztʕMH+zI;JvQ,= #R$. ċĜ':*,}1ܨ\$# u.P#'D`8u(̏˰ig*_NXY)w EM^ew]9cvFg7HFIG_6,zc=g{fyeLxS{8 |mɹl:>gg@ϣn 9C<F̏!tBQBRuƀ/Wa@:dg'MRounHww,$#8J6$D A]_1_7WAA3[^?6?6B26XĉAwht0)ebn(a>e<"pWאK0g^"ˋ."K8ݎ79!ƊZLN:^}3۸m0V {+oȥD-զvBBKJj`a2U"O :ׂr2)E>G{. )˰.F5DZKg}JKP,)_)yxΨ+IRD4ikx!Hw7 )c)3߂+ -0=?2.j:$zH ;ڣTµ!k.!)Z׻q;TFc`&tF5ғx6[ W$ kAo'S̩Sx'6^ce< ɵW:-sp3i")%*UH6IM 'JKlijėKƥ1cwI(cnfsx66w r,2z,a )!`b UT掽<4EULPcʪm.Q뻊}YDPs^Ô^A1#2cNp(wʘuBG`phk?~˻::?᯸¬/ɯw&1\O&N*C4 wlheՊ. ־ww]WQk/VvRYcg;Q-B3"u{iou&ޕ` :U:^aTh6B4,p,*]ݱ&t>!5W5U@㏭@ᄚRB 82:m7G㋟׆s}TYzP(Y& /'_4O̸_b{ow:=?y/_'jחP#a4_Y5 C*~z3+/;^{v=$wGcZpSM0V.u(pu |P /C`F y|~\J p(ma|fcv?Y":a|ۍ\2i@<ܐB"/ؘdGwPwtOﲶН`Of~I>qQqѹ:؜ q8aPJtbⅧ;Wg!a9)ɷB-ZOCР)?҃bx/>&陰:6ss%w{:uk * DёRjI)H (Z 91 Mh}PGϴ_x!N9:m7A(67޸?v&o&o23C=ДAKa9NfbH7nbS^. Hdsp':4@q=:(8`"eq>?N Wt qwļ(ȊlZ~RORA~J R]Q}GW&6æz2k'`ڭar5vV*-paq :s/?#)M[H-R5^Ԧg')A b=b|V?^f.^=sC{<4<9]'O>'dū|f֑\’`< l,[o@N\Y. q2>J~v*XMTiMr <+P!%O4^$|#MUj+M5Vf6y.N_2Lht͍Cl_h{cw x`Cz \| fkKةf ~)[Y}g ;R%ZijبZqZbD^O=@'U;&&]vosG.$'`CVy[ KlDn0'Tp GR2D!ε~s҄\t92]=;dgJI$%n :ו͝5|5H}d(V E/Ph1-D}z )2xUcZaH"6fEgށwa xB-{EOaFn:{y"BMWhHËC&-{}鱔/Kt=^ i* ŖܓU}ϲS^{&ȍ|`>NmZz[4(t5>?)$` 4P@dzO%폝 L6TYGj`G* o@;շ\]K?v:?d4a;Ig"k_Md1'p G5,xcMIwyS| L?/d(Uk!^*%KԍvP4 $ G.Y>`smbwG]-%xI YX XnK!tQnV_=l幂Hh v^s]hkGɦa6'P4kF⥵dPLXYKU?6SF5}_L6^뮸,ӭ ۇ ުHJ^Jd(T]: VQ_՗-2Hu#X&ZO.V |Ջ8APX6a!bCD!Q 2Wn23+@&lDy-ٯjʛv |MI[α3 t02|Zƕ ~ۼB/֡zg лiM8|*BKh%K.$ Qj}HnA?F%QSJ.Iq]K͗7@1Lҏ`Q:Cj [w=b[ (~7LI .2x/E|FatVXΣ_5O?,gBROSnޠ<Ӿ1Je7B'cX3GokO롟s{Ӄ7M2|eEfdOc>͵4l_AGqm8eOIB]W<כ4;};7(^'q/CҺ"z0nWhyy)>94GRJj#)xz~ +!¨H955M%U)Et]͵ M)y>;r Ϋj@MF /W=@?N~peD?w/ ތHhcb=eh 9ZNi/aT;nMPWm ?EIoe<>Xd^@.-GygPyx)nQw JRzz@5+ }_A%T^m{AV˴$;!#UeL+ԶuWqKi 7D_N ?% 9_5PBc64@cѨ*?@%QAm%)kX|rWI)L*uU/.U)oJS 2/ff1svc}hEV_4 lp {_iq0dk5Q^ 4s]o3oП^&&>guAxSG7p?-}X{n`l '()dVkhz.O1!oyxQwbGvko:&ݼEI===!=1MW ;0cЩx4*1I(9۠3,.5!hf1,|K)5}tk3Gg Z( dE(VDGNwpu}s6SlslZع邵?C&Yw)J`\#H :ߟڸ%alfl{aȬ~Px氃 *P,2S wWu稞k2qmvښL^NVk;0+J@e5MծyH̪?e=1α=>"r<\auazg5f5@ّ:95<%iB?/}*2] !:Cα2G qP+2'UUES6 -8z6_jN^kVlSS&7. 9 $Q)s3| k$F `CiM첥$aWQ 9nWj)y.:`,0޻MERCAceb(0ı޻ 񠎉]e~(BMP7 QFV?&U:E_nq{/ӕ?fR')\e_Ƕm?RR Z>Xfm˯zH`۟kҐ~(k0 =%H@Ȃ﬌A0Rc=6mNKB̛c%VtHVq6dsST])"v2ЦU0`(V&h[c=Ccb擊]$U ۯ`M֖ĶI֔R;Iz1p!3~|BSis"*Udj4 JA/7T1g{$Id 8})G 36U+V¤w*PQ$BG𷎐U}Ub ͦn{4ϨƙB$9ed ELT%cp?M+Jcx!;lk ; 9C[ZG Q+8W fS~Ab.Cñg3=x&*L3PKY4.+x g\ѾQ潊Q};q 4\;mEuq+~,y˙rU;M>#@I{h) [@!cJ/Dzl0_[HRcDڻLzS˩\WYmud}uP7kU1{w\?񟵟j;C8n>SȀp&9U]Ig_uj2 x\`iBM[tbD5.GXc`o%0HM:6. T"VCxꕸ%~'O>ڑhZ"`g{(yQ5Z/, ֥q{-~۔.LW^6~6"OސDpq,gK)Zk)CNf883;EG.A%ƿ uw~Hfڻ:ؑ/~ۺ3-mY]rz&=d[{ /y #N78_\\fо+nJ,QzJtO\ ʩ9FW ` =̔=6ab]q$Nб!lD=evU)9 C˜ QRxuB5㸭P֥,.![zUv[#8{TsGW; c]~RjUQIuV٩58u'a?-i|'uF^klp2`Tm6N'MgP]>CV_7p34r-T\M,& lYf3l(}'arf}h^klq\%heTa=4ESQi9$} i/ '!|h~JN[`9nl+e!yZD2!K FK ZOzcʰvv~l6?3vSJh{x)U\W`4cΖ4T˂<>KYFS.̖=c!DHlm}"wu0BJQ:pufΔ Uĕ_6:jg90P]ؿcX$@ Vu*_ZkK은i 1s%i+5 s~.PulrD{bpC./cזVkǷfD> auZ(l'_P!$lg3')d]Ǜמv AŅvP@p%ܘgscm 8Gm cfRB,γVx+Ȧ6Zym$@"b@+gUIH]Xuhc-_Wk6RSȱ29Т?Jq΍D %{Pdf!cfetVϜ_4p'O6 W< Ju8w8j*w yK%JbYdB`h`uڱc/J*T!^ DienrNB,"M::\C1Ұ,Ivi^kx[ eI;;V_0kmfGBJzaMuG.`miW_H~J̉mRnee9=WV05< ΌFaZ80|xF1Rn+K(^S$3ARȀj+̸d0I Zע K3Lw_0f֍[&D(JAE]:_82}A(n Eb« q-K4 +YX {×=rw&rdF|xuzŹ)t³obmE}mԶ6` ȼN3q81!9kU9&4~kM:iNCcZ<z6"Nn> Āb,xj[5YkT8uD#_L7Znm. |zɱ"ws*%d\׊¨h29=z8-^Y)~@WQ-~8@`-fF5u66,W OXIW9#̚rI %@2<5gSbxA9:*#΁Ms׬"s}lTr A^BF4CqK<,! . Y^I#]c-uⰛBVTF) >ߴ\v'mKݜ p[~q/+mhR9{)ʴ #mړq-4rq>+49>*w2n]T .n4hRsQ쬾. GÑDL"]ĎKwoS qS)RtDNAOᮉ{!O}{@}G09m]]}gA}T?*g d*n^ހ1볰wj Ѕ/cG5,"L?<2T*;YzJ@CfZA0'c~EjH7N兖ضa8̟!ocjq!lO4Rm5t=5=P >D§.4wΠ_p՟5%T1nwFۀe3t 1/~Z+x+)BJze;(l^ y`}9Em|g\+4_31-s^Jg' y=Bࡔ],bK΁Ѹ@+/wջ)ɒ><' zQpC|=щ[{!q]Sw7܏ 590ykpkl.T4jahPo86z(>gC,8KPԃƹX@nRpj ! M3CB &[:VjA-*]{Ή^薄*7%b1 x6:*Bd ծomrNAL>0LC1S rbz.&idqXʴrPVRP)Ga4K֕&bc۩騪)8Lj͟næǸpiP@'rOUCa?CngX/ٯiYEV^R-^zx4 @c),Z@%6v\^'# N.3OE'_g;- gQ F`2s!dя0q|׻ErB>5}nWB8]lhqhN4=?TKI\9sPg=YV7תm a_ko>}Xow1~tR;O){^ߟ*w/Krr\%wn2Pq[I2[>y}D9zPzIExDsY:Z0 Hc$Dh!1AXSSP#R}Ǔ>*IR,\P b l;#iEE4+@V ,%Gt`4jwpȚ[=@Bo.ʽ!.VIRkIC'!ROeN^T50,4 xccЄ D} K, uGXr|ci9'1:cEgy( uI]⋈K& bB2GafSQp+y4`t>V#[7nmqaTTGy\UO 2 ;LDjZhK ӭC~-< IkPPUOI@@jX*?)q^ՕR#z>JzBvGU-fnVr!e7C2ءr7P '$KyQ}o )#Sw^ey,)vJaCR7a0&oǹ9LЬjy l2(S>ҭaoǣvR^).-Ur4&أޒFgR/h ƙ8}\0OkUv#r^b moeRρNQ9L_/y)6oMT$ýSR|OMx_RJ7Tg1j n$q6 D~L\ca6\9ƻ%DoS)"_vENJ"V?ú"p8) U t& -MN78||"qVs]|:H5KE^ҩ17-q7).;No2Iu Lۛ~' f}ISz;S1$9UȔ*gY?arsbM))/nұ.jun5!\ɜ8_hk3N_R`:ܮn5 _,BS<f9:玈1oli†#4>t; gM$09e7:[4Ee=|G 'f2h hpvOXl"bxyZm<}<<(d? YIȇ|NC-ͺ6A$Pڏ" -/E1pR%s)3^w^q$bK0SOY" Ba pWam1WbF=GO.AмZ17.غ͂@xLq>ϊASD"-'?= | \a{B JBMxM`אH x#}"I}R] 6řV+sWP bBU^hu%h;\Fmvw#?'fu^2l%`E LIpCyT{6TsK{m_# ,E}Vm2j_w,oh<u&'TWDJ-X&_/Ce~qB}wkO6_O܇?6z /BА-G_#! ÉhLM/n`|YCPuR' #L)@uϝ3rmfRSї$Z/~+?lwhƪok2iNl54K?GKHIUuM6 ~.t~d&UlY[BY>_Zj)OL>\@~xKGG=<㐇'j 7Atja!X [ 'Ax p L%ϢֆwF}𶺧khpDW\myq ۫s6&HT ) $m*ɨy ű!=$&k5|] A 6E" B*?>(gSDP-0E\2̀\ ɔ80"vϫ^tDU*(KIl0$m!a'^G:~GJe;G'SHܤLv`Lu,+*Sy|}bE'fC-k12V(xp!Q0c*:%q?za:@ Q$]2\0.n:IψEV;>Lm<+_+FJ=vHod QmYCl>Z~AQ.Ioa{ӛqM:;!A$|/~(dA)Wܡ*2)O]z1=I1^LFI{v8lC hngκvͧցޗ&&:|ocqD0aؘb.Ķ!t#m2h&rJp7T]H8 G@  <|Jp` ?m&(NR$NMPPa̿_h(i+QpDJq-k!6x-_MK԰`K;܏+gaN'I4[v#muCDjSS=* k@ A=Bx$H}Uq u,ч_n,389Pu ݺO:%nn1G$%"zgv%{$D44ajxR FbuKh\5ɬͬdN&o~l,øz$X6K>sy6- N42(RZlAYc&ݞ]dyqnT#,w#8qc s6@.ov-bJ#?ZQ.Ȍuu>(t:[y1,lXlř/5(jM~ #,%$ō]bh& ÷dIYm2#JȢ.`}r$Ww(p L)(\nʐl;cv3K{A#8KL3YrzoxgRYċ h1Wb7KNyh)_ 0MLee߾ ;77cdChcI~#غ"Y-$!V'3Qdɦ'jR`ڰMal?WpcVm4#KZ3y| ANɀV8#O`1H'I9p΁M;s0Ұx;%Eͩ!s_zr-6D9;/},jҤ,ax%:s k  UE9dM ˄ͅzGwN(T5u$K1kW 3٥(b'VcKuu+a:(k1{(܇ƝĤwHwا:0'6hÂ᭐u%|0o9%NÔCvHǸ E({bptI!E)W:E=D%nMy`dPXe<i%ϥk0jNjI7QsE x܎ >^cuZ2Jlrt09EYF k{+Qkh/:M wC۱,ckHX-h܃ѳ\V5{6VNtxy g/_F x}]M,oQb 1ߊs황Bh4!dЋ/ IXTq~L=6u-ln3 HӤ nNHml ǵIsMw̨D$e,õcZнT>;Xv!m,{j0Nxi !#պmu㔭nr{|DZ`&uQ 0^ݫe<^NS&%s&rP9= j.RO<+;KWU]B:"->r%0^i>4/;H P4-R?ƋϾv7G1 -\bH>h R;AX:ªG?0&5LIV`"BwS2}`ZYіx6؅E|ƣ@Z]I[񀗘=;Ռn*EDKMjr]HuJ%ue<N6ICMsǎ/&a0@N!rKmT'J߀44P#6je}?$CRňՂ z:A2PV-D=`XPt1C{/L{w)~h:|Q)$azErPʳ-g3b2.*BOܜzԐsp-A[ j( gm%Fk hqe"lN'Ԋ`592؟Bv}ߊT \yK-㏙6g hgڡ c/Em*z\|CYS(mi2X٤TLZ cT[ 1^}|mTP]?ϕJcՂ\2t6kok':Q81u&8ejثՎVu9*W.WQ@.$nw׆pccmRcj[7?9ף^2zucjG/*pDWvSZٞdv{Niq~W#m:D1jLFßæ ;׸Uk L27Y3=v82bL̓qp":(x?CW~BӅGm ]`s}Gg,5%bi%+rmO`NYw=]؛O_QÚIQJM΀Q?Ʒ p$Y8q*59c$~;M@N?Bclc흈jUR:âQ C/E5NOwNk) !PI?3ӝ [AlWܰ>jk8jlH|~:U}`ƉFHH":o#'SưuxҞ{u'BRh˽ΛᏵVRL wXJnbяӡ|'X0T7Ztb/F.k8IliXr逰G*'J6C<?dv_FNL%o91  I<(N9 c/*c?`UP33>]}$>3)M S n 73),ӖY3km ]f:ʃr0bV1]F8.y@0ֶҎ?no[EC?QjXVi)?FMmu _sxz< 70.j TBNn:c30/k@EՔ_Db,zs7|yڠA&@~e*PF9I{@%o´Z 6`aS r[pTn^vLpH+m"φ@h^%y_߯mLQg!d ǒ[{0e,ӑDdgX&˃YTH$KΓ[r~_d-Zй&@ag})oتn0 ܍d4oGKcNr*AF3*y-){M+:HsɢYczCc:jk05<,^a=%ZE TyFpUv(ǀIhOY:Z/29=P~1ǣ>ufReSg'y=tՠav?hߐFdԚ8A^F ^эZ[A0P}^.zOj_#wx$V{۫'e\݀5@0ZB3$N-%Ê~DZDK~NU>`ho%Yӷ}G$vx?(b\}~r=sô=yrmd(@Yy{X= nXR| XV|XZJdzO5bidEۓ %'_Z; 6@z"”JSf "F)6U,7<*vS7bӍnEl5 (Ӆ5*K G?b2Pm9h$A ;ᚧyZ;€H//qi;GMh1dx Fo[)N. d b /_($}Z ղu7\vuƀ4!;2hĖX:%Khdn$A#%%:"wpP1)G-zHpN^E/kI'꪿NO֥8g Lzb\Y3@1jcP' %(j%LZ>դS}ɫRO~߸G0d. @KسD*vV{w}f|*C*8ʶ~_4 VqL@oJV-xEpw[!qo|9{)^8"ufK}4SK>5_u£IB=C),㱄"*B?vN>Y@dAEbsKFyNN\G`R3%LePջs*-'8[zatc P#䑭bw2ِ {za0n/")8 yw%ո ۙh}PCxF*[Pv#]`+j@y0h9Unc>G*T\:/ C `ZPRWFmvl3=%|sq_8Q;V*>OY:S#`Io & $U0ԇP$跈Mp":'NC.I$YrCo@0gݸGs"ICePF@&K5?$p\G6V}1,+.Rt,-)'N0Y.  ; [ѐ .&%4;v|#z[Uwl!{0 pC2YCT8C@N]bƇ&Y6|,M7PLMȂ|A)Q* 6 glÒZDo1d#eP۸4u#Gii)h0-~k^q:虑&0rgo8u%x5R[A\ \{w?N[S4ĹR9kp56>,܅9"Rz(԰WSNAB`DEhTIVƹ!訡{U21/XNί;c17 -=򴜳$Ⱍfm!(~:|ye( 7R?. ;ě뤓r<1hN~&h2RN Ґ m/}L\׊>@%7ܨkGfΎ=5EM B7e ҖCcϐZJ8qbwi'. 4,\}]]܈`$N q AЊ!sð/@=_7ԚM uoT]"2dcR^v "Q#Mqv>j6P&BMWb0hmDž=bY֨ 6E&@K 􀅊n}879\YĝKᴬyqniLP=IJ-?Jh*(e{/rZY9yĖ.Wn>Y`pAJf;VCᄒ>  8+@K{KPFE89SiiS![q!Ov8BJ[G]hCl2ـ.MPOI'rSg&roV'0#4ȘycT#-JꧧOLmެQ)cݽd2F/$˨ AӺNp(ݞY]di<7ۣ:#g9 3f2;:,t=Di}Q=Ûxvw>daL6ROI=H**c45;/6Zwx-ixtS7<+j},SJ[H0_/#:M[c:,f];L喧 uMqO:Ek>McEL(@\P˨gMˮӦM>p~K_z$~;‰{9WxKLRF6Fzg.~a?J/,b󹅗׾TVHgJ$uLdR>XTXAf)CJ!0ULQ/Zwk l'omWJM|O2m,(]j Oi'$+:JOx(?^zyhGP҃0,^` .`*`adٜ SӸ yewпRdJ^\cpC-)b[sk̨/Tj!Nn̿X*4Ş 7)2##:Z}q6T3E* ;J.}y49R2wka][@_K[ LzSu.-jhY/xFPp:NV@d`Gw/>VRy=4?{%&J_: te+v7!b{d"gv )kjPPsVԓ%ePamvcjHe_Hx Z1 P%?U/МBML/-;Y^XS!t מ9ÍcU铿mcNm"j]e: z]#&Dac/RX _nYIB~ΤP;[.(Gl8) i?:<ұ,=H3B7QŨn7Ki}5|W~1;z0%{:^*Tl;U)GSAh>UǞp\ӄ,A% #XEv(++33D3Y^vo(;/d3J6!h&?0#B$/:9jt3kNAA|D\q \ S"9Ԝ#Ѩu!1SH-X(K#{׏WPU;`rN] h6͢}~W=Jz3qkb)O9Fl9-?D9N;[sOR'O/T~g}4#,Z+1qui'z"QҽJ`}cGCV$D=3:^'aHaSGIo* c0Nhpof+M24Å{QuW#4f'.ݨk'}4P8LeZpLU: ItNf48lZb9?zӻ &HZf>T8!31&G/U_9}m3a}c>s7~8TÊjFXqpr|][U*vӇH~GP:G܏c,IdB"PxaTǗGŕIΑ1D(*I>HKR$>gkHn{xys"Sg>d#Cݵ@n`TLkj48K^in;ՠTa"e~G݊f0By޹Pe.v^_ki~pm拶sn;qv# mNz1:z5^SsSPM*6__lԶU]T{iwG?v2UU~QoKRAsptU\̫p"eT\-I[\?ܹ7$UTZ2 5fn*˕V+Qi*x~ZF85άAkӭك[;*̫j*/[P-}W\m5}7稺#5:~$H/O{'RPn[X>Һ}pb;̎%aBTOOv6N9d{G=I)϶Be8_Ͽwoc?soG| ;$?-d[9c2]5mFQU6-@BccESavos"5_ 6S.jS9O8nwΪMLF-{9#$X4ĸ4 -NFZQҾxѲ *X&ͩ"ԑؼyl?ϭ!2#2KW|&Q<$Z4:ԖY` Q h9>mӝ@ژ[vs&AwFמ&ɩwT*1 u;قz;Jn P#xA5@Oy{ҋ0ǘ  s4FOLls*aFNюMNUk λ]guv~>~suD0s!<ܥnԎwj-wؠ:mJIC0Y-F ]ǧGL PaJqhKwoj'fSЀ9qa0'A^u`9ZX;B0.tl)+Tum-au)4e;od+B_VV/ϤtlӨm9F(ԅ-<p Sp޻hr$|b˸)l%]õnAWC]?@ݼU]}f1ۡ5A c0;tK9D ~W?y+I'-CRh5n׹Q;x12MRvB76}݄F3, ϦQ܊FDT.b<0mQx='е.ER.VHV^Trv!t3Ǩɾ.I4\*Whc6x#-{/-U{=AH p,cGveum}CFBTmZ9 Z'f/ !T)ex74[(v=' ekΟ_ Hr9kDnHQ֗&3jc3E[[Ⱦ;:_L]LGL X]ЭVo[I:c }brZ+W6<}l2ʰ}^v.>tkopDoQoQIj`b3CBVU\2AL`1I*'3xQgb >|jkz<R m8t;p/bz=AoOW(L%Q\ձ-mBK:7Tԯ7=nlHN5! iĿ5qrMC`ȰMPy8v(32dʹUG WދEFkZ|S{ݎ?HN" Ê/'FnOlOTdئiAxo ,%8U6DX"èƒѷݶǫLos8:CqK~^$b=! 8̀{>%'rjhX\M}4$YZ˽K{!KT!:H;'q|u,@hg-RHyR.H-;Ɉș+m;'>+Uq<3NS G] L8όxDNH_d9/N%"UgSD?-/cEqx+Ͼ3gn)wm b [ǣWbe1-s,%–>7;mTS ɉwDX5RdUb brJ1qqnαּt8fZEUÄ:B!@U$'biA0M\ҙ@qX,t~AFk Um=۰A_J@-ϽЊ9pW{5PVT8M.!|.⛂, ?Gp_G6]d$!tH| uV3 ӭӳI"SMYT?G(18Fba!:\#.n%2sn<7@_ߪ wVQCۮ,-f Nk-pSm> pͯLJ2j}0=Q_:Iϼmz70U 71K30`-FUOÌ")v)}&7<+L*HCInCO.F"5'˷*O`rCṟ>_^f^ +/qDZk}Oڋs/ SQ$VNw,w*pH N(/ֹ?*]!)y)i,:$8R';tsu@u 5fs˒%x)V5츰zt3%)K0j \&gHb9%`YD'=ݵ(_ D?R~RY|YYwo+kjvO@)s%ၝ(6KI@=:?(a y^n%9Qc Aba(-'%>TXH̨">+%#>(/9Lu9ꗥ2{eSG82skkcj }uIR?DzQ/.@bv܎ M$QXeO\Yz~@H;55ǴWNV@p}b*[R$Kԝ3*TypX2jHaSТ fK6,e%2mBm }/Qjz1G(% )SL=^E. 5A?Qj9-I `訰ˮ]{/OEk鄅yUqq(ك>2n@5yDK&wd hKB\՜Q@ &[5-ŔrWÝ=:2ߺ$lF @e`_R'pB">@@dIXzLMq ~KS 7&+G*ӭsD [{ K%ouH26*3;8!"'/|DYU :-VH_#UJ'pKܵLJ8񳖋_F&_xsMH@A[8 A@`)z3PS2@g#&WVsHLCB;pn#| ܝ6EEavtKf|:~Gmv( _N7lgE8jp~HӼvʱFq,%ƞ?m&e /#AFG>׫blWYS+Ϻ>BKܨ1_Ze}MGuRUGs1ttAni+vmhpAӇm. ֟NmiiZJXK6}[zjキh0RThk1\𯅊?Ý'+ۘFgc}9%0WLGR<˃2z$@9r{⋈2˯vEVE1"HI28,iYd P_N>F!fp*awpKq^}DVWŒii!F sǣM>1ʆB'N1:>CE5innȡڒ9t8"S:4*D7a"G4U%iVZ7ca$NЖWbeE EZ^Ms*]lYQ 1x̣} O E^ K u8ofQoGnǕ١ʪ39חhB<ϡX8 ]3ij6yJغ 4daЀ :b.]@VGiO IRi|FT\Do.E&$U1C %7A۽4t~<zXK:}׫G>eNm5;!ƧIx ?ɁLNqD 60l 92dGP[/AL- 3b/=768ަƋ/|H(Nzeغ~@7B.Ea^HVh(/oX\ͨ|Lx.Wk}ۯC{^!)xOx3eLvjn-Y=s@95Ԥ̡~6x;biPnrvȕΘnRƾ}o fOlK0pg+

mnqQ4Fb/R͗'g[*,˩$%c(UbrP.t;W1u1mQDpwoFlVG8Lΐsjz˛-[m0ji")DŽt~@ %ucXɾ8D ݖ]X'IGV3Ǫ2~ks߹`le"T4O)5_B?HkOV7Om>>;6l&ގo>9kZg{&fA~ r_:=XtFRݴ&G`sAstt;YڷUfn%`y5nwQ:62o% &~0e^GSrQax@QZǰށq?ql5m[m=OYyq~3~z79|zuZ;8?k"MƏBY5~ CU!Jv\k$8U@@N:Ek. e~Sq_aoGq>i=]V.\9Ils}m<>_ξX03~d\QݨM`lz(umѫAV%qBd(9&:,(+ \8߷6ףf+h,j?Xxx:־?}tRK;r?d"acR䠠{}dyfO/^EI^{%zNՉ6iƙDN?,. \_{1-F]"G]DiP{rLAOt%tA)JP9 eϖ cqxULHkdkVѮ;>)*?ҟs^+WH6{aW3_1oPDxMqϳ@UE E̓+TǗB%2d^`b/ zq!;rgߡ/ШB jQ^!z3(++d1{׋wZW}6b/~6f/T)yPể,h#h/fa{]`{S3;B=^нgnPKW* >B.r 8hlbo Έx|1'$lO`\nsm4'o럚A>|;5|[jӵ}Z Y>2]2y٩͋>* mo:|C(Y_Gw[/~{:OWi#;Oe]z c(HegqKV91ԭzL(+GrT0qWTra$C3BzmaeK"dj)/XlOݏǣIXm՛#I.\ *3?k^t\vׁH-Jv1i7ut:µV=pPbn'-s_֫UܺG#fYVbM,UR+xV`øvYUW ."))(Hfx H;>׺ n/VDo780\'}F2suf0RcZ. HW[iheezүFlF6ۏ΁ƃ>0 ˩ рr!t1̩B BZ/Op?xY'pyMV,ϟ{y^^{y^^Q4˷듢*cEa{}'b;BNo}d2סKε6ѿ{Վ|zj{[W_>Boow{:g!J$8ACŬ덈RL7/wf2 gR,w7,tKtfxrSV=*7"DQB(< ~+99-ˣ~#A|jjcV뮻&^{B\I%*lބ*b*0crM`8fڞKilm=s?s?s?s?s?sUoKX