#!/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=f52920e6e5380e003476205815486a68 # 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 tc8t6娳{zAzjBjF>B)UvkG=YYGt\ߍo` 1C$0]/8@O:"GCUKP,5~H2z冐oMÁ$r=JdM Y#yL\hT*y'CA"RAzZ)\=Pd@Y3N6[6ޙm{ײi y`PA)%xp({Q.hv mk'ZQշ=w ݏ72=8wkz9{D@A eB R>۞"oE2. %MǑ {G@TxuzR\? g*ۢkkZi̡#NY"wm< *X<٠aBg tYm} ~KsE (8A4wJ_ r*>/*iD ֚S#` Dܾ|+2@,ϾJƳ;}#R_Rт- .l~0wH޺RysM^+]GTrffEދ|͇>*[q'9I;3_:YE900K:1R/lMtʗx:Y+fa_c ĢQ֤6PG(G|p&kAƣ]E-}*+4)t ea<(gFc4;'$67>,.zh GSaHԿqdǟyR%<4mݚ2лD)޿ZLȞF"UW -й~>٭_5S֌I'>=VIiBˏySu\Z c'{RqMJ5,W.ȟPpi\Htx$ek3d1^ HFȫ gxЁL?PSTh'8 ;)j 5HTt(.ƥ'q!>Bp[=oM>C@/Ҁ&}h.-H'\ل⩗- +d@?0r)ER MHx2=ȍJeN2BXr 5{IiS>o8( LW)++厁\轩B7_7,n~ڈf0H˦EOx 6ܡ4v/Œ]T;? A5}vג0GO+9MgҐr[~Z>#ڇ\| y4ݭ?9Q5^OY1N(ATV2 (Xgy :b\Z`prN؝噤vPɆh#kCp|P< W=9^5~v`<F0CHf1떀287.& C,  u xu Yo CqE(‰ X .rYLps2IU8$ O:/;w\:oO4Q RmJl,$tO6됉ƞ/S%.Oǟz?/ΎOJ?g9<?U7<θ18_e`h]WlZ4஠T"jN*kq;vTG{̻z~u[:~qw%CNqcɍX-1b *`!a8 +Xq;n}l}*Vm u^X)x~n{lm3˟7ssTYzP(y& /'_48pqoy_utO^Kh:ɮZ0G5( eXwsb+M~WVMg_&@Kΰ;7ރc{@0t6,dƝfV.TpLC \wTB*tC>@%yטR~  !e[E&A.Nvk8?W>7 ownDbLtlLoIh;:‧wY[G'gt @äw T8(\MlN8VkNE+x~6DmHXveJP ,W43_GzPCG$=Vfn`d`@nta]A%!Ԡ7:RV-)?V!9S5I p6/iMP%f; Al;ꍜcɎOUe!hJᠥtpа o'31ZwxQgWxz[y9_ X Kn 0 8ByDGY'+:b^JIxFdEi-}' ?.^Zn+ laӋV=zS0V}s 0r;+gyjn﹗ʟP &-)Tn/umjSQ݄ l y9FßH/T3v!] m\.C'R2UI>3Hwp!SaIl0PfxԆD6p-7 '.,j8C z%B?;[^k^f,w H&4 ڍO&](M2牷HSեڥJS͢b*'?-)7Z3(j~esPkc(W5-8ؐx"+0G4-3- L m)d45lTS]V`-d-P[@1"/'@ *Bxc[c\.;#{nHsrAvb,YH6"ej"8uu#)E\h9mBq_ZM.RZz$``GM] cI  L>a$! 2+_"(  >z]*ҿ1-0`yT3@0 h.<'~I#o=,H@!Ѧ+4jbQEТIA}z, ,5fk!MES؂{򗶪Y~Kr𰲃lrGxfV^/ ] O I. T#FS EqS&lYGj`G* o@;շ\]KO>#`1p<'}=ᅭop7ݎ`xC1T" M7#&ԟJ@<1U֎qfr@1u`e-zvV@Hj&{lx]qY_[aAUiUUEvQ9r$>حvz/[8E)Gై?Mg8 ]D],qT9mBĆB4(eVdz-fW L(䓋yMᚼYGb)0NB](fB"^h@J0tC"nQ"ayjRѪ+m&z 9>hQ_煯vrO*0y4,㭴RZ_8Js/*HdSO6jPP@fzsի7bW5xT;\&H}$-K6lub6$UdVq#y'L>t04|Zƕ ~ۼFWzg ;c:mYgb!%i "! Ϝ %e_8 $I1I[vWKy+yg)3EtL$"cg.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ů|SJmm| #govxϲ'$!䮋Q|zM >ڝx_/!ip9]7[xTw^skxh!%;ځx4Q}{aWbޚ& *HL͔"ȋ_.CZi̔t< QBH9US| ɦ+V} ‡A ?2oF}U o|]kq b|fߢ7VFa'HցЗ0яA&+ 6I@4EC,2y #o?ټ3zX_boȃX*]i z/򶎝VmQ+Q eZUs~Н*|eL+ԦuWqKi 7D_N ?% 9_5PBc64@chjПapZŒzcpSNUCu Ek{] Nc NxwN}'=pCoԋM9^/A@4ry%3k1&qnnvaE%5[j]y/pTNq|Sn_?D9D4X vMk p9{G0}+*nAM}9 ;t,(ѴߺqOóy]pkxv+&}9zTx Iđ?նefH|e_d72 %Pz }"Tlェaz4Fۈ9qVؖHf! (n?- mTxD'cul=<>rWI)L*uU/.T)oJS 2/ff1svc}hEV_4 lp {y[jq0dk5Q^ 4So3oП^&&>guAxSGWp?-}X{n`l '()dVkhz.!!oyxQwbGko:&ݼEIݧݧݧ!݇1MW ;0cЩx4*1I(9۠3,.5!hf1,|K)1}t+3Gg Z( dE(VDGբzQ;Kں>N 9u)Ko6ӹvs-t݃ !ٻ\zŷ0 AnX_/m\n|66ITdV?v/0,'}_oIo 7hۻ:Ms%$}iQ39˙H !r@4\JLW L"bwv6er` B^5ң*W~q",Dͨ\cQOfz$LT -g9&HkSi\76iNL}UC*Ew5@hv‘d[6V1X3v|Fs WzpS٩~W=!cJ/Dzl0_[慎{HRcDڻLzS\'^N.*}l#3א z y;O} Q}5w;qBDaXKԗUKSn %Sg|X雥 "iQ%r.5햎X]0{^K̖C4ꯁ9 ʍ0W,&w0@S?51].gwR0;SmzypnLj\@v#ڳ` <,@#Tj:w:@&l̒}96[.#xTgp2by#uk=hFPKKO++ȏRz`GP{l'vguv֛mݿ3mt;ݨgJL|$s1W\8z\c <XqUzWP{fPNv02$ gO5pf ۰#va'zL_ߟX)[JYm *FL/;.rmνޘdq 9ҫv㠚8PwJWˊNZ|˵V9m.; V~{)0> y‘ȀS8 WQb4Au Y}DåȵPq5Գe!LuϰqV݃zAQreGgQMu`Fn5栒7L' (+9UlY~}R/ho! Yd@6 ]ޗԒ|;[V=cVVB .K ѯ i6<-i o㩰y6}ݧ\-{T9B;2Y?Dl;!f`GE8Cr3gJV*qmʯv|r3S{qUUupu.1,TR z:/E%Nw˄ĕjC?`v|29k}bpC./bזVkǷfD>9 auZ(l'_P!$lg3')dSǛמv AŅP@p%ܘgs(ѧspڏ35a̤hWg5y!=O+gVfMm$723SdLNKT%!QB|{y~bY$y4^0|]H L "@x#ŹҷZ85gRJ1CQjY=sL|egRX ?,\4(Q?7qbULg@&K4NuŲP)ɨ鯅!zANc^TpͩCR>/l 0ʘ"z~XD0sut ]v_Ƚͫȑjkp-C‚b,:v( Ϟ¾] _i I~g=KႣ_<#Lpu`ƴ)iוrY~ʻ`ŐI^9Z=~wF6S)03`8)3Q4y3|xns -˂>WLnSS鰎:iPFX﹂of7j٘2# h}HH S0jy3 fd8X5}ZhF ltÚhA:NM)T <i{Ukx@w_ĉ əX1[k)UOsb汈{ttF!C pfēPت!Ȃ^_7NCYp 1qohNgQ3)t[0L4l %Jb zE13+IpDCt9;B\*X)wKPL/`MZ[lQW^ӯ"@Y8(oH M= tWR$t=w(Qx=Vq{<&׷VCg99D Sv]‡c|˔m]r b^+|'%TlD$EqL^..gAmpDC!wRz* g!Agd#`!i_{JYCQPNF/Ҥ}_ .܆IGq!+ٴ\v'mKݜ p[~q +mhR9{)ʴ #mړq-4rv:+49>*w2n]T .n4hRsQ쬾. GÁDL"ŎKwoS qS)RtDNAOᮉ{!O}{@}09mm]}gA}T?*g d*n^ހ1볰C‹#ٚ ][pCm*ibMu^=%z!3TC ͓1"5BKwfl0EIq7 θks'@)쒶pR"w;gP/8;u`b:wyJI` f%2Udqޝ hN @H/żQ6vx3{ W.ehb/M͙^Jg' y=Bࡔ],bK΁Ѹ@+/wջ)ɒ>gC,8KPԃƹX@n?Rpj ! M3CB &[:Vj^-*]{Ή^薄 TnJ)tc9AlTu,T]%j.(X9d}b!?`hbFV#f+]Mi.χS0h+MHƶU+ AUqSpV嫿\93Mq;p X&SOl‡YLJZ ϰ^_M> %j'A%-[X@)x4 @c),Z@%6v\^'# N.+Oy'_g[-ҟ gQ Z`2s!dя0q|׻ErB>5}iWB8]lhһ7WJtC47|vL*F(O#`03=]&q,83JL$@9r,le`km0 ]ůRz l~y(C~:I`g=o/w~AT˻%~9:[[4/#WکFvaF~}0 ?4R8܂\Rt\Ua8H:\. h|Q7OP$-tR߽>b(TU<,U@-1Ls {o4V?Ø֠K)d(S>HI]@$)eL^( A1~xkNOؑ۴_Rq" B E #:0;8ndحd WP^^Cd5Q$!)AsG2U'aNTAPdPձLhBz]KjV%[Qq:#SN{R4ayⱢx|ٵ蔑;/2<x;!0Qr^9LЬjy l0(S>Э~oǣfR޽^).-Ur4&أޒFgR/h ƙ8}\0O+Uz#rZb mneRρNQ9\M_/y)֞MT$ýSR|/Mx_RJ7T'1j n$q6 D~L\ca夤N\†#4>t; gM$0:e7:7Ee=|Gs'f2h hpvOXl"bxy\n<~+d#YIȇ|NC-ͺ6A$Pڏ" -/E1pR%s)3^w^q$bK0SOY" Ba pWam0WbF=GOAм17.غ͂@xLq>ϊASD"-'?= | \a{B JBMxM`אH x#}"I}R] 6řV+sWP bBU^hu%h;ҜGmvw#?'fu˞2l jJ? >߮=^Y?rhQ A#lBC~D}H^* ']3%b7=[4ہr\ei AI(70יZꎮ]]Ys钢N)(Bo/z̉x sS!4@*xX$%džT,p|ְ6u6@d&vx]sl˟NA q6>Bsy3&SN,@ ?{="w`j!,wM{W{sEm>D>55 {; ~S&2 s 1ӯ!l7\!ӊf.LLQ+}MՅ}4Q( QWqg `*f(^씾(ET՟FiG$ͬ)ײBM,nW]ܴJ &TX>] ib8fn-nHm*{'ZEa $!^:CbtrIW*N8%ˍ%} &' n[Bĭ0􈝄=_08YDC Tܮ}Wc d&M?3äX?89!q&w,dϜ 0^& k@㡍?1뒏y~M ~n 8K䳔.[P֘IzY䦸r7_BrߌʻӑF 7c s6@.ov-b6nJ#?ZQ.Ȍew~1J%u>(t:[yw1,lPlř/5(jM~ #,%$ō]b%h& ÷dIYm</#JȢΝ`ur$Ww(p L)(\nʐl;cv3 {A#8KL3YrzoxgRYċ h1Wb7KNyh)_ 0MLee>;7WcdChcI~#غ"Y-$!V'3Qdɦ'jR`ڰMal?WpcVm4#KZ3y| ANɀV8#O`1H'9I9p΁M[s0Ұx;%EP-Cv+ɿz[^buZ2Jlrt09EYF k{+Qkh:M wC۱,ckHX-h܃ѳ\V5{ 6VVtx~ g/ŸG x}]M,oQb 1ߊs황Bh4!dЋ IXTq~L=6u-ln3 HӤ nOHml QsMw̨D$e,õcZнP>;Xv!m,{j0Nxa!#պnu㔭vr{|oDZ`&uQ 0^ݩe<^NS&%sm&rP9={ j΀RO<+;*.!eScHjIZ$(ȗՆjRg7%CvLo;9bC Xt4ZNOoI S{HPݔlX}`V% v!t?(Vhy<%b|&a5Q\,WdGlr ړ$qc-k64k-t@}yڣ馯7cndㆸP!Ų70ҽ6 >9K!֜RBql_[?zݬ6~J5q6ZZ=I, _[ސ|<;}.9P';@oD2{[I]/ӦMyӰy.;ܱIX= SrR 8GW :0ͬyWzuMZkOITo1o^DN "U0QO԰1h o ]E"(6&n"_TfpX^F\"Tl ʫP}eA=W'5\0 jpV(4J+,Gɠ}]I<t\Y[G74"X͛ZϜCO!oErZIżٖL3[39ڱO6 g=P.fCYS(mi2X٤TLZ cT[ג 1-_q6*(Cn}[jAh@P Զ#OCɨN:l2ljZ:2C?6np mB ^yL_p:">rKFnY"N叵_nZ0۳±, n);"OjsqC2XͽHytxb!tGwf>6Ļfl>a;}Lλ ?)d: 6Pt9ay0C9=j6؍#dzobi%+r}O`NYw=]؛O_QÚvIQJMNQ? p$Y8q*59c$~;M@N?@clC흈jUR:üQ C/E5k) !PJ?3ӽI5b7a|>>q*t3D2u  GNؙ(ayC/<+=NZREA'72;㽭7ͣk{aﰔEOO%%*DŢSC;NFY-an|5 ^R'1(\ #qҢױLeaZTOFQl.y8&"(쾌|?<6sV_sbjA`yQӝr6͟Q;Uj%flg}q*n7|fS "|]ofjS6Y-2 fڛu4wD(ʥˆZtOwDs"AXR;DҺyoDn;_sC`NZEWQT~çl5:7)pRr6NWs:iMtt0LDLi#P?:Qf#>~z>M;wTVv:&US~&šiI ά[q@?$}iq zk1&؀Oކ5O}~3QLo!S>[xf1f>wh>[M3sd?zQnz8E?}Ϸ.~^fs]`  r|W/܍_iP/F"Z7h^4: Q&"h?[{G;ƁPWhb`MmTzRR UXhU%V1mP6HŇh=3pla,\~_7v{k#?>D^ 80kpUG<ךoj:7t,ؑw $1șZkpۧ)LX~y>i"myBγ2cI-,L'td.Q!3h9U ҡ2sp1h1 E>?_zV%-t&Pؙx_0DJhe,8wc!vb92т蘨J.̮F`^KJo4^!aӊ\hX;u^ИNښ*kMKWXOV&%B-UzE.1`R=S LNOD>_ .(OTIp^]5xW$7&N4}@t9o&V6<Tl{Z^ *Iūm{7`)mLn0ɶSKI鰢?q,ã17%Sww*O`W0ŷJ, ۾On;NPT1~BjsJ9 Man<7&Fi-{ |(ۆɴAׁ0 =3B0бX{F0R1"bg [k6H=g' AJx+MOT; 6@z"”JSf Xƞ%R!'襰ڻs6X]tPqe7LW)UQ}-OpDczÞpVhΛ.[|`$n ό jw7K'~!j6뻵m > ⓨKB\dLW.<|WVD>% ;aqRsʽvoIǢ£S{)"oYۍx >"ԉM]\cLY!tRmuy؇NbRc@ "}/!nWIGk[cP ,wrC{}oAeLQM"H@%J{y+>Kr63[;-MzhXJif9¿ 5׭M5Ogp$%$ W uȚ" Zx,[2}wr:s,,e*˅DŽHޝSև5h>iһX q`$l3藩͆l #'gq}a9HQLȻ+EghD35Rb#\Q"h3Aϩu%5T9jXXqh|I@es:/dހBVr0jf;>E鹇 .cc! Ry"ՙ1Kz-V0I(W'hv1>">"6BzLNO;A '7 rda ~ 0tWN"E>$Ek@՛֠WXqXH$ Kn(jYG4oǐM{"Anvԍz8nrv<-´uyi:RgFfȝ3OLy^Hms%'pm,:lM|~pbK%]0`f~sb^o{nGzr$*BJ*|72 @G ˧]Q܍yru~ݑ$.inה/$Lm0h F vN.Cel׍L9via<&\' )@kv3ACv.Ni{xf:V@\%u.PF]>BP7uv|E)jF m9$?F1 UˮČ##KC>3՗;:aA 5FvޠoUR?=}ljgfbNqm>%p0l<+;L0t;Dz ~Js=3y;c&ϭbO3Mf)q3gwWz3dCA1&g7Q嫏ɤ*\9WkN]+b9 OECcrd4$}+@u̅pmGkjvO8i+j>lm:U7v+p{V@g(ELgLΒmrfÈvLr%g Rl;Ц![U)qb 'UEefE&A # n"&IZ1KR7ܬmצ-!M^3ڮMN_-trbźǦ8U{fqC}A'"51"mS .eԳҦeׁi& ]8?W/ R=TĽݜC<n LRF6FzgaJ/,b󩅗׾TVHgJ$eLdR>XT{XAf)CJ!0ULQZwk l'omWJM|O"m,QM 6NIVuQ~3CHN/(f[(A,ЕL_%TA g ijܧ쮩BAYRONV @=Y"P5h?It"s}!}BgZ/h +C]LzTx>u~,+ 74+GWrat0UfշS1S/" /tMy tKN\S4o㔿TyɂcNr[+H1{Ŝ.mZt6c#y즐C"{mGzCa (:զ^}哵g0h>H X(K#}WPU;`rN] h6͢}~[=Jz3qkb)O9Fl9 ?D+9N;sOR'O/T~g}nhGXWjc6'i|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 ړhy_‰`?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'+w4_6~nv77NʗWʗY~q>7-/>?>̓yayf Z nȒ.rSUu(U}߂j߾%tO6nO;|[?o[G".o4s$,릵s w(S]XKNh8l$CzRl\!T5>X_6n'A^HZ^]9rNdnk \!*H['@.ƨ.^ 'E2j>QVuAl\VՊrPa$UYRLU3ZrGىI$hqi@Z:}eoTL07S1D#y#~[AdFGd0MxIht-fs Ds|;61?4L=\?:=hMS$^[B;8;Tb@^'&v5vZE&nG.-Dk F a:c1=lx:)hxn4pUz;%ø AWqp'yO%ӛzC5_M kMMm|XHنXU!`}x6MHϪa@]}`CozQR뒂 ک֏~)f_Snp |ԏ~a[:շw`Qᰶ A̫MU{[;R7pljwG{Yn"umAwJqP۪j0ϥ٨1vufTalv G㣚zMSݨojgAuܨj *`؉Ǎ:Mj_;c^ݦߣ r!N(T3uöa1V {7jEU=7@}W6a:]\#RWR_:v[ 7ShʶtW(^I!x٨Q;͡P׃ s,1Q kx {5w䤋IT"*!,%q;'>S7TK4mCk7U݂.p@ )8yH{s:cCkkz>&# %a v:r~WWN>!: 3k\Csn4}Jّ pxuϰ/-]^^V`t$]BD$nG TDEuAjt^oSC+(Ġ+='w" (Sw"N[&C@:A z<84RnEo?T-T4ŊR\nc}ZV7گ$ "פ7*A˱٦Ef{~+3u3mAh:n"\b[ K֟.=}l2иʰ}ZΣ>tkgpDSoQj`]ef{ҎReQtVd^=+3_{('pOmMf״Z[>Mv5 }GtJ,2miZzչR~USdM憭MkFL\'4" T `؝G0;mD!k樬p[Y^,4_ vX r"Aa.lKdf?)Q%aiO`-)`#bp\'W%(b^ BK3FGvC2q<ݎ-ʑExVagIo_)9 RTC*}j"'ɒ$$Cb5mv&q*g.R`<-ױ]H :mK4NiOF4^Q X܁=)_„`s@v]= h _23 9%\3֊TmO,%:NP߇NV=4gnߕc) ׍2&/Go^j8HHOY3G@pIL@L'aH2VAՈɩ3$xYQ;ǚzfD&kԎ#k*:&tpސ(Z6"܁) okz+%9 EBwRY]V3t1)[i5al.E9Ax퍣֜VYvPaw29xKjo6x t:Ŵ1 }O&#Q@WjPgc0:>ǓE򸲼vj;N.ƃzNeE⫌|hʫx37OÍN)UOea`o`5̊7uXu)Txݷ^7Gyv< Y*+^K=Wf`vȠaPԎ]&bz<;ESWP{pɀR,R?ljnvxbPV;\ϓ>dP* WYFȒ9C z"8)R.cߗp)@-pCtNF\TKd&xn7=8+7Ve0+K }36A;.ȫZK&m22yiO\KdZb0G`Oԗz3/r[e qjz!`LF>M7L$X9PQ0k,+M t#|!4+ PR% h (h ߸*Bہ!y8m,6R뵰%q}T9 {j L"pu?Ww"#Bk8Z$Y&xlզ0Nmt("D~OMӟHM)NفXlKwqئ[1H=~Rτw˓p:Ʈ~Ä V'p!dwH1OXpO^,wx4ixLtbq?ȥbBYfeVʚhPc2uJt;;si4MQl&{u(P^72{zG淌m0 '0Pa#7ZVXDn~@RT0_Me˘[α3R6Up\K%iP2JF,Y $&M4QX嫏\yzĞu;6um6-&T@h:[i<8B,ox)S~$ɰ)hр\j%z^atA6a)C^E(7]\gH( )L= ^E.ـI (7ޖ 0otTaWuҔKt6St¼ Jb-ك>2r@=ܡD% hUB\՜Q@ &-ŖłW{W2ٞ^4lFe`7_R'pBMm d|d o&卦k8A z^\W #)"j2}ω7Yzx$|T|[H (>A3PŪksQ¾T6 nEx'~r o y)H#X{| '4v"EuJfd䋣WתiI`H:%eg\F"@;m9;[^-ګ-rċL-4Drs-ڶ)PrNЊ6qVu)'0vgYJTIjF7Ql^}+S׳%_eE} ?-sSRK+e?RU>ϵԿeUەpUN9WKkKbZZ}:eL_?uLh)|-=[Zsgmq%Һޢhwۖx -~Ank{O1 #ޟc:w4]7YNbgG3m!ϗ>/AzzeZ/UOd\rS[/Ea6 ccmk*}Y%;K/΀ Ul\z듢 XI eƝ!wgKqɶa+Yv}6!:DKJ4XK - Ԗ-f"J'AD`yu 8⛭ȵt'Kv4L.5-98r^TbºF4؍]*V)IKFam7ڑ%g|Uyi"qQ9h)yhrZE2# F >;˃2z$@9l{Ⳉ2˯vyVE0" f絼':KүEDXQ\FGr\~w`0UxKZ1{ȭ=Fgӄ4LQ6:>vQɶM2,.NssE̡94\`D6IBԎ 6D4U%4@+㫱 S'h*Kۏsuc;EfY\J[UL'_9+ م' |EaaAn+ڙh"'T^Y#=M7 w"󢡼kx/620(OHt%TP%V'8)3HCR=RYrqZh#Y3b֗W0mϢNh"-1]QZ9qVkNrڝ-(X&(9yPkh;Hpk5x" ^~m&}Q{0wlS, ;jǍ NB _rU8ky:Ҝ*?ٞ`F}Z zڧhڒٳ SAM:gMw#&-N3@yMۈoM`$6 wƍPIW.RpQ|5>Үr~q/F`#ψG1zQ#.$YBM|0u[MVމ]9Xs\23b8L{S647mPQYkkO?{܆MIr8n>Z_}h {IB("1U9+W51 /@FЁѧbh\ao֖~y}X˯F7,&Rئ"%X脑 t02ulѽio>]xϣ'˧O?n=z:ig'+r&C`$D5fyo%T;5wk\)A A'5օ2?xU۪8j0'Qˏ'OWǰ Az=[_]Yn==O'dƏ+"5p;xU8Ȫ$3@W(c݇^ V pp .'ը4zފp=ڏזמ-=ZiNoEO>环Es;p~*9(h\LWj [B|gQr`RAM}/愤~-Is|maۍA&~SSrP4٧b?{o_͛bOKb!r^(H*?ټ(꣢*7$@0_Zz 翇y*J<&?Q~*ҋO07 UCqOG*;V0Eҿخ5X:N g|ج$FsЎ} koCQ)RWEؚ;uДbEd+k*Ƴy^rS]Q1HcWo<)J@jfni=Han=ɏX~uwTsDr\Q%>*|ل*`+0csvsi03}ʥ4s}>ws}>ws}>ws}>ws}>ws'}F\OX