#!/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=c8fd3396e9b01d19d3d011ca3b489124 # 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 ]:9jQ§sjju'v=zl5OZW-RM8cg^_ySzz)w +*ljwh#' 4g !a,oΫ|&K+2DxT bno X GmZ#GǙi`P"/F-q=gő5d^K 4b8*,(d6G7F_0h4.lv5ubڰOiOiךs_Ӑ6cS,62q=6tʌao0*l86lGU";.صnvn Q0!RGccʹdl<1#KgaqPe>u ŵѻnKe:t$FK޳qMٷXT5{|"PX-?&]k򋒁MLqXs6쉭ѨOtl0HhKGVq@2~> 1uӜmc4fLGC\0>2? bCṉ%i( $׳`@ʆԇ=Ga6BH* - 8Í(*qLȼE 6$ޕB8oh.=QaV%3֤lu~b(|Kf$׾3 Prd9'ͺ?=&?A)P{`Ll#yZ~r iO>[lh eA.| PP?8ԘEūP2y<.&o|lR3-f^r{m9D lך[TYRRra`ӈSjԈx":H(C4L1nӿ!M($Xg?x&f:=K&n)`ٝ:8GϱKēz\JtCöGoAyqm [o/$|Р{ܐiuڨ}<9Ҭu,aq%w`UK,m>9ћsjK[RdVU 쮘p'jVK>Un|؀E_yҮ*1P\ĚZsUc8h9>Hn% "YT׆՛f|=7cFJS'LQw_'\Zx抓0֜q!0}ؤcquGfp>D ^x!8fD_6rW_/j@N~RrR]<7r"65fxM[t2[az96v`?sTxwϝDa5J@t"pMqmSa]n$4yd V0_['%Z`*K_Iݐxܞ wω}_I}dRifRs\pg e`lS+:Aq.쟒C!˸lsҳ ϜzSŕ!pTS5d(^4Fp Ipxc `C.kP|"AkS"Sdug>h<`[8DENsSYKq*~8[:"PDHq;WO+dMZ8jK ˺6Ht[qGR{Ǭ"'Fn}/6+Z|Y4>8et(d@etPo;)]N*1=kU䞀v_n!vN;4~7It;Kxi4)$m@%b,J bLkqk tdq=p 5/}D׵~!Y>[6[ y!AmڍkbJ!vw_tK(w wӰ:8gB܇huW-U. :tD <`SUv4tf#IJ[hpL ZNb)~1R/f?z"o ( w"43Q~'lơb{j7".V^ҧ  8+:|Wq"Dya.zIfELUTovQg$b rAz?7H`NMQb'C" " B T0TC #u.!˓V)3Q42.Q#.s?sav|& y4X_2~'4ܳRgPRK K! 扃 TB̄A알{}Fg* s;Has5 _1$*ԖcB; s'#)u1kIS_+W# *w*vOc&m~/"ˍDAht=K4eEj2!{)d>P\Qu0F۝ \C3 cBdTU'M(i3(O'}jm~hgkm|gNEA<&)Q_ER _ EJ%I99iѤ:iѤBJC(,"v o#. 8Hn8< ~edxu_MaNr&e;h]tN.f*g?׺KDY-:Hxl%gEe[td"%$*,d\6)!n`8Oy"~#q|h|}t>JG>|& w+[anso0_ ͱĘԣ&-OE:zɳZ]-~Ԉr=V-,t)H ~|eGOLfG獇N G?(Jtvxa^~ˡ1X~atTҌk$>nb+0byYX}EW1M=/bgҤ; T+v·dmX|:eIY$]ř9l)>65ϙmA)!uD&&$w%"5QС JTpxˋH+Gbե+ <.ՅBwcV*SnNx Vj?3C}C6t-}[ۻ{? _QM]_ ht䨻}qn٬0Ke<  B3\C6J?O |/{3#-/F'ZS[m%1&5ӉHeUB$X?Ίw_o^*:;p<9ZtfbHא%EYsbXѯ,zԆURB3χTUyl \z?zq!&}:B  I."H]H/k֒`ȝK—} *AH, H/S,וK[:cRŸRhwIfFKz`MU7KTOմa~YTb@GxlB|1 jn4@ __^6 äpJt& k4SqɼAI)P @{% one%OoCʧCE/CNC6xJE}'}ܻ΃ŁVQ/wC=xY 6j嬱c򸨲8^Qz/k"<JRqqC+R_]p(a={"z=(}q) NF8306idɾ*bYUm h$K攦 Ȯ:Uu()S`Y]׸܇8rƴ̕.wEwɐ!VDTAVbYg` ;leVLkjYr,}$ 7ƪEv־,ζuIO+B΋Qm.&T˪2Ǵݰ^}eG;$-[xPy[KT͚0+#3aI~{6TAfAh3=fmIf ` T"'V9:!. r/xc>PE?'- :q DRףoBŨpm"3:9 jIyuS7j//zI%Eou8#k-r> W+>'4 tI/t)v^5<@^,3X+]XA4vAF^{UVYb!MYjCf9;R #aOGD_b xAE 70?őe,])jymV!4Iar\#;oë [m9ᅴ߫gZ]I (}PiRH6h ɚU[<51Й7W8Wfd%tV8 LF#1MEѨ1vaj;Mx|mfkM|3:#5Eb8xrϋǕ¤44od nBp(hb 8K*B߃.%&C`d+Cx("k/cXh}ջ`JV5cA駮/NWqԧ?%aKt>-=+GM0n{9Smr58$ka!Jz$pUwdcq[_,5h:G,w ; =Wg䌬5Og|,48;`08]MvEdj&hpmtp彋\l93p"cON`.`Å5-~RϘW˓qzF4n@%GI[vvm)$ŒziWaQc~7$r(X=TR߿ke|,YlG]MhPc9$tQzK̤aN"34a^"=UzL4nJewv7DðbZZPRO?K|BϑERE`)i} +W,;X.~<@RC]jKRV ٽ)KЌcg\;cVKP]Aj .wuJ΀R?Ǵ)Abv2 \ I wi⌸;sB J%@g*Mvg6 }U;67"9-p~CvHt }R_ɼk~l%PF4]\YGK\tl@ 5a-AoCb^bs]FeU頨)+" )QsX910*ژɣOAfrWZ8vY8NШ+8JT/ KISNB׌Vr<` Jm5-c^4N|D$JRk:d (T~Ez9U]OQ-=%v-l5=' =!}݌qN+C`j4}k흪?ôt˞@ۊ+&P4a{2S$0u!j417z =5Xog-g(P/>[RtuGk[/"oGbYSɰ >;9C䉦‡SiBX嫛.wDvH̆>6u^)yGb;HB2rl~ƍ M _n6r%:|Q+X.4E[¡C&9]F3\A$_99 4X6.rb( cq7-t g9~U;ms+Wao!3z]4,Fa Z?+] 7ϦZ@[hp9&/m) '+Gt?5qqAApg XNz u;rf:iaɬdZ<n4ܳz黝w١e݇1hXڪlh⽰J- t*x~tqf7DŽdFJ6Р) aL,4׈JFd2ٵCgR-zD#ߛiH>N-Eb R1~&t1N})P|NYYk}D8H=NX& q @XuF+ĤLnOQ*Q4j>5ߞoW?AR?5cǼQowOi:\LL5{i߮m>0BiQv մ.g}5sj|_ӆ;_'_ME-5&kJغAnC~\00B5 ?F$7WvDOAu-ase˓~9/,rC9G4rGRl<,*'# c|˹ʏ\(^6"[. Bz;k/Wx#eTgwofw)UemA..߽QL8bۤ1$@u.Z zb5Ux&HL#>';Vc:"qpc_iE%Œm1mCaƼcܒG nd ӗra̍bbDt1I?r / .Mpb[K}F``XŠnT,R,!Ř,+]fʘlH4" -'Eh!EVzɑ 6Q><Ӿ:ffᄊt⋨+_ .Ѵm`\At /0lcLLNmhEl/]ggvۆ> CHmT]Csɭ iF y(2="c$uI'Aw;7T#mTTq% _WWW.W^oPrQRvoiJx||a޴Z6}d%|6sK:q"埫jc]=R,h-$ͫg7JЫ~>31Ş_zf=zt=뷯YY{lpo,^iɭol6!r{۠N{֞+hl=MWtШBaVjVזjqVW.af[(úP](ÆVYd'?^[<5s]o(]`)4DE D:1N*5ljx/=c98°5jN}j$vk ji$)mŁL aT!hBAqyyCy3_@6aLQ|M3,D@CUyObmg .CZ85a(+KYZɘBKѼ+FƬSIC6Pokݢc<1'Oׁ2vCDtqY1T%:tSYB|u&A>zdGhHMYq O;rb$Y`J. /!{D'.:Cp 9#d;{lO[ky7AAm 4mkfiz1/^s4$MÜr~JnOi.F ('y>'s{׏mp4,&;yvN@F9_7zKjQ:va7=|Z_e>nЛf7<~$yvgM>M M aj'FH[Q?7F2DE>Ԃ4Y} @'j(En\se|OGkBHhG " 0h sYp `w+|$.feep Ňw1-4S * qjAJlfu]C6|k$bjk7JS;cFYDteFfje_i]^УEA qgo_TRV?GWC<.bю"vXj5~\WܴotV>B4w_Gio^m]NH!pRܽVt;uQPMO\myШSXcYqeX,X~\?X>dX;x0w?o4:+!PxK^sB~9jW^/2%NZ $ :glh F@-0 L "lqtM>(F7X'Ld{A<1-%vΡ'J1<$X=dYU$jԔNc-s$ơ2M3!im _A1IUB[gel 1b$YmG9C:y1B` u*t\p$iw0 ! ?wa ښE]nx}ړ~υ+ 3r./քxj/B cx&[{,yMO&Rn9FO Cr0,-)8;?+5P`[RYL#}u^1VwCU}P~n4;;ơc~X!^=|Ń20Ok?>$zo* ruxǠWL9lwAAaxD:GKzCN@+J5D` KiCZ>BvqT9Zb\J60 ,b3l r7e$Yuѽ]ߐ8}#eQ<(~@| -1ѤhTD$H2"^YVr  mr8P8jrrehX4Q1ivj\+=@񐧒HNީ Tqz@,CZ>":3Q%^;Vᆊ{6&jp1>P~ ‡emOF`7LٙJ< $ 2oZ$CbjNT̃fD,0SL_>6 GV^ս)XXu2B/gҩXf=-i'd׏-qAl殶:ЦN݊z'~!fyR~uVa)]N# I'IHz߻ s{]АΝ>}ԼV8HLΐsjZkTȂn Np2*bWb`rT)ub :G:3B%4:ќd/79~ʻZyczL H5P*60`͗R)<}du操$V׻ggON;S$PrOS܀NbeTuXNƥTph i}Хa;nt{ڷfn$=(!j`}pd<({=L u{ZJhU,u4(0*#7(׽y5ڸw+v1Vt7| ٓxskgp4+tqL5bso*B؎h}^% Y} YL-$!_W{|7#Sr#*'"2X ȢF$AtB'5=L+Kjt;6<x}uǛO:wN;kggZa0$FbmcgIr^kIC㞠G訩ua8Ϳ5g(VtOW*\9I{jYt>}JlL咕l}oqi0^o(%]+fqUIg+pQlC/[q\z%] z|mtWa?~>Xxx9~YMp,>C&" *mNDzN䠠z%^X@ds%~̠du҈3{a]]2m ? w vQuUB}d:q|^ VޓvJKe,Q({w 28VXVb7!Ndwv1=s7^&7V\V "@ޡ^gr=V.Es`". B(*1k^\&E3e-?3Zǵasi}5~Z=4kU, 4iiؗɄ&$Ed/yygTm ߐLɪqž3&ړsXPw?^rO?wMxx1j +|lOc>\_Hxuƽv<0Q?FuRszOlo;,%iv r.ë\vfHV\*ih07v$cPdj7K'GuN &wYnE[|0j|.~κuL v,q3z眝۹-{>:3&楨BEP#Ή?=x[B{ d4 R7=F(ђ"5Ox5j##i#KaˤkE;PD FJãz/骉Bzd;\#@L&l*ێֱEfa (G21ϢDt`TZe^[^F5Y6O ʎ ݦD6yͤݷEҶZ`^aF:MQ! @jEB|sEhJ7>qFOFqT؍'@Ng媠~瑿aa0bc^a܆)Eܥ7f0uם0$};ķ:MjS7N{(MHB}Z}cTI5 H{)%Pf?4h_F̱Gf/0^B WQ>>(lgmr垍gӼ i BZ|Ym:C'ϒ{Q&_P%&1dذ;dZr ;p~$O{Dn:wGNJTkTc&1Ӵ֒އgd_hG[KGOl=pUɁ&H~#Hxj [ r0r#=EVs˗.w[xH߷Uo߹y/ 9qs&Ypr!;Q|lA,Ihu<":bW$ (6 [,LE%%-btE" I[JhǾ>Z6RfGS,qɼK L4[undҕ^(r<FN:Gp݇vТK7E:U'f - -InQ;)]֬>OLP w8QNe':ECKRTB2FC.G4  TA3^=\ phQ) CmU jg{ Q ㎝2+g^] zjA9>(/ȇi"H#Qc,}+/"Ҕ&cKz+$HA|uo" si~ߞط< %$ns#&2VG?2(Y`/Ӿaaz~L%HzE B5=>,ei2_-8$"45팬E殕΂qŗ7ӊ3}I.~&Ds|X S9^7 :E$XJ xAj:vѭ6&j-8+̤/åv[ʹx"Yyic+ JO@M7xd"E SWBF-JK~N`\uƐbRAND@|ua׀2oaԈ(t0֓͊99!A쳽ClL 1@zc$ SX'@~ ='6hÄ-^#9`0D cѕs@=Ǝ:]-&߻rci[ V>SVsW4>^Z,> i&G`9l1xKڹF^_ìxjт_VtV+rPuztJ<9UElDzHHjXoWնgv)C6Lo99-C #zv]rnD< W0TH ;xW(;VtԽ.'h;:,#i0 ͛jϜ<794[#x(8Kbp 6c0iWS\%Ծ @U\M 2 ѥ]\fo>s(:9i$Z Fi1~gۆjp{džC,^f1~[Ṙٹ7!5溩yska "7e+O<ǣ9tAhg#䬑-<2'l=(TѶ[XSڻě43}է9rM)6 35݅~OⰤ}{oRShԏѵz*lIV'N"AJ N_{rMv Oim\։VjjbA(u9,ꕀ+Ćc1aQ}Zk QJ?3ӽI5bYa|>ַ}=U6i I$SmҰy P ZU\>ig;jE@,^WNwߴG?VYIaϰEO9!*]DS];LZXMg #Ń]66ZS1Hu.za6/+ݹ؍ P׈ElؑfkDpL˾3N!slqEDcuߣ Q5c;7gO~ScA8m3Ţ8-yb'ho>L~Y$TbIZ6M3_xqXZ;U 8tՋO;_cCѠ턻:͢ç,R; 8{IY>o9q7O~Tv(:)7t\Bu@v l@R`vx&)O(4J3Gy˓u2 ,SHCIFoaG-OEO؁^1 }BvzA"`~Nfd`7BH- q}wܼٞRD \ ] I|E.fP1b[|(F7ui׍->}wraw>;^ݯVBJf x}-r{Zm=GyDafA1JΑ:^WWE׋J upp|ęӞOR&lQ_5t|To.Cbr@"OSe._}HlFݢOz k78K^jd96S *'kkGΔ9(c{tZ\Q\r6έ[g쏳fcE=Et^@;gnbqj!a|Y+ګ[nug]'Q2/ѕQ5r^*?V]=`G؎^eN82C{2P3v%  ߠrGqĊ)?,˳I)nEI¬|4q=Y_;5 niO{8 <7z%GaE=ΨIl05]y'R SyZ]i֎KK|'^zyjVRޱrjiic=M&>wI( vr0; c᤺>хO_Tսf~pi/n͟ka;tA @q] }K>x3A߶s5y7&+/ANZcu.fXOG^L)N[;`yI2H(MϾ*b}k"kOU>1]'3[7օH_8sv!"<{-q`,)\C?{p@+խKa78/Lw?5'0%:ʦ42e>jN @zm] c%A7mNQY##~cx%t+)ůboTޘ+TNYv'-%B'~ǿ(oێe*N=8FMf3yU6vaSSB/ ^9' t ǾqA;ǢM;qJ,p b0N@٬:y!6 8r=.'3=/6; v{&'RQF}}f&?U4D?%| =NVo?Kowƽ`^(m6M!BB6H"f8!,xi&o@7$/ ^#h_^q4T?cyWK Hbٖ_ۭ6=daV`֜n!ߑp2*;VIa̋4hzC(ux!,!Z X68c|.w|nY vg.,@+{@V4 L-\RFZ+S -)sr3*݀ '@0X(woQ&\E`}6(\+1wIY$@`j?|rLLRۛ°|l5F7-$&ēr<}PЊP1hF! 5Bm^Dq"Q$նT5N=3;Cm 2 Z$ur82&ĐkEz,/YN"cǴ` "@m뽞$27@9r 4 |ԁ xu1 ^Kn%oVfItÈN8ŏ8rٍD ,A vdۓ/Rs$O6@,ٽ!4: +Yŀx$3FXk۾c;!{r>fwr oEq j].,X,J< ^GggY/-$aPk/B&Xqq\4s9j?U.RzommjV^WXj1QUZKn ߍ@;7|vOX6 Yj`2 j|l`e`aJȸ%nk O`˺ߔ1f#~gKs}\%x?ȆŒ D ήS)-#,p1D43 xZu~'})3%P)@iQF1)*1_1)Hi<Mv_H`jE-%vAMT~_>y#L1`O| R‚.ۻ̅!A!zwVsI\dQXs]&`3ԅ%h XtXoC2`_z+z^:v-ҥ .7 KL}-9uq$\A:͹x?l- I>ZK9!fRJm0V맦2 N,v*0j(qӢ8cw˴M&x z7l TuY+mmO\pFxF&g&i[@ !1u)4]lVP)m6OI.jo]uLВ'&L.4t4J%Uk1x63ա$0RAEe#'Ҁ\pq9ڜ 6 1%})"x[7)cTT!pIX"s,9N !i0?=}ͷ;GIp#+ѽΥ)RjֵÖ4j;AL fS܎~iW9NkRI4DV<צRtMOHӡj#`6{h'ChJQ.=eq-uJ%[,U&6Y=S]eov;4|j䬬'k.1g \=Ꞟ_M Bqed&ϩw>[ܠ%RX`;[t%w/; @5 dPHWxcdi)ڥvl(58pJ8Ϋ[e(&,EYvk|?w?ϱGbՍa#[_: ^&M/IVe|Y="EZ_E:G( MM8<qP!!oN;C.h я8\΋<74s)2ѾM&ļ#muUQDi t:@в)/itmi& 'Y<SZQf#h&kT[JQ?k#Q4pTsIkb$b՞NԤ+جh9en1B>?[:d|ht|F%?,d8t\ΐ{W2Gy&tpZ (ovCʔ6H@R@QA}g"?HI! U{87IlގQX)?Tli(z\a-=bW:zm؋oq/BG)ۅ7HfY1ؗRSt'-: ?iid7K}rjы>#BEgۃVZwZ_?U)Mk4kN'۹,hn i3fyqm6=*^Bbp%,>xUFoDć.xHG^vbUe"xݧR(F[>Rk0?WͥNȊ-bUS=db0` /lM=I909؎Z] KkHSk)+Ğz>s?DFB`. c d$D6_q i("tOF0g3hg&8X{s!+ڗ: cvvT {>ߔOGxv.PzdKX y~|kM?XMy4r+ Gz *FҬ?c h}YbHŽbia.л5 hz18ڪת M5mǗ7IxMeo 2Mn@A}X{kT;B?o&3Ŗ%1y-! MZ?ܸҡdgrz[G'9klMa=՛Fέ@=UDr ].?ly8_]Vce{nel!W\WaGmQl^(aHɬP?.L\.O׻leQ9bA6a8I9C *aU3B~]YbxL+JM\);sItH-έC ,A1JWkD窛0wj.͝"}>F3Fuu nľxs5G͂AwpBP 4z=p(# \8`KaΥx :jBZ{V# ޤJݍ߂YCbY᧳"IHdg&"1v.Zؿ檯Oc7uckAH>Jzjhڱ(RЅ96a3+z4$ " 60)S?G;kULgoCkkeR_g鯅!|A~s0!9R Iڜf6`Ҙ"aX0:\CY0J9C ?EZnEQדs6H< Q.6{Ʒ|++@Qʞ?n?7= 0 QsxM@gz3~cBcϷ,SW=Iht"Fdl. f;#y{;p0$FȊ @<=9.7š~O [cd?_V,`mNk\j8A؊<"S027uowHLY"w"UH(֩;/r=@2+ p zq4ވHCs9ZbFp>Hjkb$zwbgȭyC( y=HB|;i B>\ x?3$3p#>̇VɡF*hI|ϣfS鶦a鵙hX%H<BڋBcVLȇfsV|]T3bG )@ xwx2W\ ڬ5i]&HwQW^ӯ"@Y8(;S&ږrsDn+)b:{mxGp9/n5 m l Y7‡x#<mc(NNdA b$thgI{8ʅͥF.CJC=0dA'ZáOQLhNTbn>V$r 7ԀcVؗ9Ovf\RQ}h5Z12@&ll$z|㒽V~kk 14_νXF˳ BɆz"VUN/h5F9g!Ό&QڄD A>h8,,;!ܽVKu$N~N4*y[ar R ƭ4_FF/b@Y mk)%v3?TUhXZjN&<1d ʟ^ZѢtPi+=Ԗ;\lE% %is|`0 :9@ Nn4hRr :ñD ;v~kɻgDb.B301WN9> 1 OgE9 8\|=RѴEp|%lA6v|!; 9hp `6<4z?Y5.x;2/-=xX3ې{fJx'y :ρ+]"DE 1:fS"5$+BKwFl0IAqϖ!W{h;7ay6ĵ Al Z Xp<"|V페ZBlno2횳 $R.N3X䷨7!H.rPҫ(UD7(恊~żQm6lv\՚2_qO (A!'|N)4) J%"6xޞi `ՔdIn͠ &VS@QO`6` .A 8|i.C%.ŕgH _C+ `b7@ 'оhȢ(m ] >I(vkb bPnʓ8)Ȑ6x:Wt5<$khh(r<*[6xZJ E%se][ӑs%f2cxˈ#vd+ Fd UkB .(X9dî #̢"zM G&|WCA]ZQAi` E +Q[Vkt\ h6mgT>d/@Oۃ864€AT.YOBRQ*z)R ^: Acaإ|9cHx$o+QæB~$SKcLO̥2~Pyr10`ϝ"WܭE31ӭ&aj=9s+O8QL>q m8yB#ݮ)|o*E:BP8ttLS'bѓ6 ]W;;D8\lhһ7xNWl<]On~gZ Bm<:^/Hlܑe#-t2s2rҁMgBs ';n$mC/La&,Rq]HDs3r-$'YWg, D( >ޢe8/؞Q֝.`^W5`7 j۸r(ꫜ:sK/k) rI:bn,dU͵F/8C+MkG}4~"_y8Ȟ[adZea~#ϧnlm<-}L7kd &h$i_}G:ff;՞8FEπ<2\u)釲=m?;7y.mPzB]6ú]Nsdtҋ0ĭ0p|5Wt#2.c] N#0=p_/vMIz [Qk-uaxNKeoԼ/ýK|N.b^^nvLP*GS1ntO0m[PKo4a-s;bd5͑y~.F|\L"^ P/!ъ/"}DңբYM6 u"H|M?xc1|>YB"4e̠<*V=cn,fG_2c:#E^vH}~@Vtq%xOCNQuf?("k.hvD=U4rM. ¡?&^M#/Ը/yC޸^\Yڷl֒am:ٜCyE.8e '*~.FP& 6R^)b:ǺW׹PAQD=>d6RMFWKM90aO-"+XQB; 0/ 5B֑ihQ/Px10 @6cʕY=?W!O.Q9NZbd X)i6q~NA R*ދ0Ҋ!mikfu)oPq<۔x4)GRbυٵ SĮn4;(ۡLƓ}o4j )˸AA-KX T߽,#n+5;##uCŕyg E5Cr@vrg51/;(n> & m$q+$0v[#ʡpuudĴM.a,.9}c耩iv~m VƠǰI'e|S5[-{Lz S(cjw(N;>u[bc)ݧtt05_-CsL[w u A~ $Cւ5lHB]#(]. HPS$V,Svלǫк~Z ^a\ĄF< |+f<OGb=fzad`A±XQĐ)d U76lg^tVbnÓiob;PhpYt晋AL'-aP[776Hƹ< _?Q1p^bVV^:'M8T7:%nXfgx<=`D>8 Efn&F) "H.QCrZ8`ykPsո7"1̮Pѻ6X =(鑛wYyČZrBk0$"ݏG ѯ\yPT4x,ZTMG#5u.Ҡ,,IjO("9YqY^KSJVح&ġ[ယ!q,`tv~@6w~٣GLnC7&]  Hco{SJgP{E;|'PLD"[zaPQq* Z67nxepYG SPOGnaPٸ4u#Cљr͙ R. aZk^z; H-kÙgoN%NGr dž+`)'!XlN&9 z{$DE 07̡j+a$VKUxogģ^ŔeGȒ!?kE`be?yri_T=*O9_ I"ۙXaV&2P| c1 Pcեޥ!xz|6 .x&x/F4[Aeh hŐ ӛ6-J62/ykHU➻QS\nA$ja]_͇u&-A-:\.R-/HG"=OM#mAqeǏ6E`K F-w# )"$)0> >Cs9?}8m8.;LjQHn@sQbf `A'r3Xy?HW q#demMkP 7)*t_ҥAs[F48Sd6Mu٘#}<*LJfu?%72:}xE_h<7ߢ:%9 932;z:,v螪8_^O뾨Xo)kYබp2gbe%9L*9&1r Ԫ2fܤ3EI8heN2/txO an!uD9L@}Uf.Si2 Q.Mrz. sNDLQΒh2 k`| gT7L=o'^d NZb pXr p e ֗PYj,,WRm-MnYnDR֒^"6Q =>T툄զZ++ 4ȟAwWI`S'IFy ~CvByQ"h\%}5sU * G8I&T9DŽBNf) $.]j{Z;y^YW82<#Ѩ}؉S]'DdȽmcmꧧxjhBo*ofp7yQ,Ik@ۼ?6~>Ǔt^%#]b8G&,|'S4W_J=ido)@2,[7UE8JsHM4>$6z5ƀRSlrG5?YI0B2aӝֱ(+[zWmkHԲzen9ema6Igu[={UgvmΊӍK=3?S ~w4<:n|y->{TY^+.皕~rPcp-[<0br(zWvD'|iYlA|(T$9bͧkO&O|woeOVN{ÕhcR\}g}U~}Jy+Jʀh܀eԣn/ eU8"l xYw4B!YzpdЛh5-g~t^aB0 nQM{ziSӽ(pmo@G PNu"Qߠz5(TrFCBgDtCݙ8_~@R :3lI[`ޛ؎87FRCbEctL.#MAћR(ubI m@\H4:ӚƂq,hݛ*<҈Up(0rM7}U*?rL[ jT5,:-Éz/"MR5l$Шɲ}#O[Mp*E @`FwGe߯.rBRæK9&5AB$Wi?'qtR߭reLiE,rR$3QU#e2;E~Z^bDQ;SUHEJg  x-݈Ɠ eiVIYIO*В#`n,7'HԿԚ Z3 Tnp [TƩ*M2Vd\.ѱj-ЯuG;u.F"<۹L LT+ۓ~*N@+Tʠ}s93kO> Zl]D9*W 1y`=@ 7gƣgST{ews}>ws}>ws}>ws}>ws|x0X