#!/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=ea6dac7d17e2646a90fbe28d22b69d17 # 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 BUuߏ* sGygϿ!\'GGf]j6;l6O'߱Lk-b'RW-con6_7P%qFGGGhΞO~'߸r<=~AY7p!/'׳3 W7_Ĭҩ:y >F00 >E$rFaDy5NdN2&u4dNfa5,2t7%\5Dx☻lw 7‰0~9"@pْDc  sZ3 pHɄ075 <%6S߁5sIF5H(HĖN#E&yR *yfܣ$7yL;s^:1Z[.} ,7jtuC8L3G ’_+)⏭ڠZ.|}eyXe) @);pÜ#VGn)#S;t;i=ŵwjN_>G)r)łǿ'Q'?%eϏa)).yQ|*?@"c亱B'O[\O}9}zlof-vo=o˃؛y<:gajP[o;r׆}z^1u|e<+)UTQ:;Ie\̛.Hcͺߞu x9 Ջɟ|$ ~XqX}k @ǃx;s ? D3zڕ>5kdu$k4"5 ?kL J~k;2H r3;?l'hWFƴƠ3F+}1uKu%]VC5&h=X@~O#ļ}V,m.1*C6N^Q2=0;aR kBr 'r<摚2.\="/E4=/".DYzǒ:C@4x}rTX? g*Uї񵋵ha Y/٠ aT\7x@Hu)4=Ne-y 8+c^3R7`qeQƌr ؃R׍+$pdHm(ZMpu$\ɩdHbH lҿq0SeliMr?h bVy_ՊB\HZ$MW E:e}:TvTKHK%X_&20;ࠓ+RD$[ְ%B~w|ѹ(Zb&'9^X h D<F#h{p(p)PI=N;[ e}:hdh{)SdJǓ!]5ztSRl)L@Wҁ&}. m5B N iŪ- +^PFU h` ?4<,GN fhQ .ޛ&>~!j]>9ciVFLn) 0qY~쉗`#Jgwܱ'ސfz!f=^DzP]C̱8Lj)Lt+NKgD`)/"˦'# z)'l37 r*UgkLr{f>vvR. 08>*[ ;bH]I'@sևg||]YeMkl?A| kw;,esG;0r7&XA&iϒ"uv P]XAX`1u"ư# ̩6G MBEY$!t`_^)Ggv[cŭ`Vv:J!LT۽ ]/i˗6')q:*_f~ሇ` kA{2 )JM7 N HwXôG"J?hyhLq fSO$KƢf@<ω,=$LEijdKl׹s<ߙҕq)w9oQ Խ *䯔K) *2cQQJȐ.! ZMqBI[Q,1ECpzFpIۓp:]m-{g=@YH )ԜtvKdN?itu"OvSud=WaH<^T Eĝd L!$pDP H5K$Wƥ6bw/{o"07-|Ƞ1#XéOL j玽DKF*%rbue.ZY(`9;aFOSsSMvNNrrȱ]o?^ݩ*eϯOor=W}Th>}\[UZʻnG㬪=Jav5{de˥drawlW-kUU R3TTvvXŌOC>wfBPq)8mD796v ͵f]qUm:|҂fI Z)ͧo'.j _MߟJ;}z|:jo\>OΦz8V |iMpŜ&4n@hEԏ}_5pL_,x ;ٹ{$@g82Asj4\Tlr}ءEƮcU*|3,\,>lDy֘^ l #-ߏGLxi/OUvY>kܔ/X $-MReMP^m=wL; :=^~΅Cu5U؜`8 ~V IulxRvo!ai_SF ``ACV[:1w3#9uwTujѷӏhltZRsR ffMlsL'jx&jTt ݵ 8_USbĖ [}vm*KOLRrBЀdIo w^2?{6BaRoI%BMZT" ̨<*nÈ~χQVak\ =!楔DggpE =9)IxaؕꎮdfWG^\Y\4Tg}sɶΝX 5Od ThMYf&)b$Wpٰ Vp_[ml.+: *zV0$6k nsO~!*L;!ˣ$ʴKmMcQEf_,+eHè$86Up"^EƲm`mkYgiyijRZJ[*m$Ey&[0nOm#oM'C͍Tj1םp1aCzj yt;ҜMw\v%NCSϪ;opxJGD[i+mU5x9״:zp~G$;f )n%v1ߓvGDZs4[gfb_rD`ADN]PJf) ֺZ'uk, },WM]ؽ$wH FkY7c'kٮ:i?复f| q|/B Z%t% )2*\ކa 3/eI-^'ٗ2 /XvQ'5"0DhS }!":!2h2Kz%6YϰRbK_S{_gy=F _o1m6\=<o[GL0:h qg Zoۭw4g۳ڹYvp"S}̵mw"Qu`*H|QAK&>dqm_~Ie]@[ȣѮSr6)vp'xܖBEC*U̖|婄H#켼)$vttV{5F ywS;JS:=AH)I~2xtŧo};íSQbh$%/2Q~%"pҒcꎳ!fW8'ۧ 8ڭIAo{ﺟƑ~WQV268+,a@v- 4oc{`_ĺ}%9UuUw5BF5h\O=SҝY(P<ϬAн "ی@/JtTU RR|i&gYGb B.R*+ɕFs C(.žSC_cHawjf(ߝ'/٧J?Dn3z3%9א5p\eQŒZn菬+[o8bs/c>CN53$]Tgb72<1j3}1Q5c&_wH.%1#Anqm 3:ŁZ t`/W)taMd˴H+Q5g~0+r9ja /k+:B6f7#*<ϠәgokWWYb()\x諟k5bęMQGaq3}#9R Naφ(D61=It1-̿AYMbzQјZȨh$V?VT?˷x|+8̜8<[Ivx˧~~hf*\f垎bpޗ]nQҁcS]ɍ7 !5Hh27`D3Ē!%%xI0v <}-di2}?5BX/6^.;֗<@g mRҪ= U \E G3gԃڶ0p_-VHY枯XH-/xFC@Ř> A4wh\S1R`ߙ˚ *׈h1IkXPjpٖҞ#s6(6 85hu(4螭@03e[<`MX8+;(M}+fLU.|C5Pn˭z hD!k'\v$)rBHX/,:SSvC|lg ^nXMRSKq`] gJ-Bhx4ҩCF,OIԽ&+`g >S&oÿO{X2w5I!-?N?:sJŨd 5k  |NO+hB2zUo)`ך(E'1N:yO+GS$"$LġBڽ"c(]157ߕ$|y,(ˬwx݃!IТI"/%|ݡY .0xoE|F½atViXΣ._5N;,gBROSnޠ<Ӿ1Je7O!X#UOι6_^w"3y'Df~|Ag_s)s}e%IX']x5֏R_-y[Bć{1O}i bG}n28~;y~ ME)>prk7BJ!RI~Vc{mCu!u9ZFsQͨYdC|ڸt{I_[ Jռxfة3y:`:苟 ^-LVmp ddZy9͹O!g"E):gimw߁)B֛/." ..F<+Jqhb1c]o֋;eZU~;!#Wt3˘+-5(2W |pCLSVfTp1q  1)?ctZzch[NUR@s EV{= f'b N7nc'=Ջ-9^/A@h*p#O`<ưj;ڭz)Kj 0պr*_ F~S_?l#`4X mi pA0nR -zt§̦0W\صDžX5})%^WUM"إ SERLeuy뜫sXiƇX!_$lu+x 'CDZ`ʔ,op24))sLhj;O85u,ءpFܰFUNwi5M;~Ey?Y-*H_5^˰wXk)736jpM*"+>0΍ =ejt9 ~zh-^ͣÇB.c0)I=e YpJU$@7,y.TvΞO c,5&"/Xja68_klG8!am&Z[vjs-Ptޙ7s{N/wB>euxSWp?{eyX 'Q4iwFyxµmt=+.#oxYeh3(5 mmyzHzH#zHCzc*w r+%aƠSx\\Đn/ o0'En?~C\J~ѭY/hX,’X VK;ŏ\Y-v0c8ܕ?hRb Yzyu`k{~2LfR"#pƸnGL 2#5 tq˸>$IEBEf3l0(Ѭq ?G/~ ?kO3ߍ{ϯt:L% jEV)Nd0Ά鴞e@BgmP'7PssDZ}Kw0E+"3UGv|uƝ:[>!5UESl6#-8z^j[(+J &I_/LTvnm7_԰[kw0jJkf[,% ve3qȓ6Q 1pe_Y+1YфQ16[jsG?1N:koJe_~cϰj("*"/xr/FIyL>M`amπ˯\`[e) ;a?GvʯzH`jҔ~Ģi zJ=YfbFHݍIۜ'JJZU ӝmҀe5X )s \L/>46rOrm{NĤ82:YQ멱iXҦLb@¿Ș5B/"6 /)⿌c.($4l%)ɘμ7=;lQ+Uk NI XɄ;{m[N| Usc9@[FSoc$ %eDmg} ̿y ބB Rv2tKIvv/RiFÞ 46N4*^hcݿO#+?Iduym-g|5(tÑ_Ov+AWuM-r$e=g(!Q Qzv#`XvW6 8h`e!ۇ(.ȝ=*am4jQfJ3 BرBFAC@͘z8Sr+j L<o/GUIwD\)Y2 T<@%'3=y&$Lf_\-q/]&Ѡ)rU zӫ(wQfk'-N]? keMr2m>#@Y{drԊ[@KNCƕiB„.~W;ge$ey nK{fRj%鵪+PUSjPÓ: qhRvK fiOʫ_[L&-WFf~tY$$ߝ^RCsmkWYw>lG;9)DžBSnjB'"&[7,h&ϝON6L)SQPyԝvO7:`PM|{v!iݽ3-ftoOL|$ Z yc<^15O4Uc@o J01ė#N`AJn[ ~ FJqj)ueM1JN5|JKIלC{Zrp2_'(Qz@ ){b6nuŒS;63;S*%gE0&HpTYf|cM0l(AI=*-fl3t8{֕zm{䜶V|}?LS:a y’ȀSlZUͧW]>mgih[oYoזiVJs2vcpQolI_hgTa4ESQL84} \~1&y[I;++,sK?LپWNi/ho. Yd@ ,%w8X &gG&ehw.KЯ i6<-i`.Sc/,ݧ-;T9B;Y?[Dlax"Ey;*y= 9S*TǏso[~M'ۉX>PMBT?7caN`bi 9f~a.b? /bo8+KK\;sI 'ӳ67x,{. c2Jҟ;}lA(n E}« wո% q,,=wyX}VM#>ºre\Q (W$S7v! î;"ckٴ 0KႣ_<#LpӐv`ƴ)iוJE~rw[t{ջp&bȍ[B/-Y} \c˔+f\| 24e<7G ɴryYgmjJ_pv 5LAm֨Ň+(`+{ӬVSjdqP)ia ƹ^."o 8fջ}]ͨnX[M\#<8-M؃Tx0j'Œv7z6ER(w6uM GEy`O? ōMj.hw8>~O1Tl9^]&q-="RR#f-5! B9]B|{)}U3(A[텓`S<) ,GlA6~|լ#׀7`,,Z ‹%ٚ ]XX!,i*ib-MuN=6:OCfZAr4L'Ԑn -5Gߚ-$&Ś?:M=t^=lW]-i A Z Xp4"|ƉVՈPm.ǸO=; Y+B^6VtV59BJzeb 䋊hwN@H?;pKP$'TNs0]=I=ۘWC';nrU>E~|/%6%y!A$=E8{r` }8yb`׆9:g=[RW k;;ma3_{o>yHʯwG ~ԪK |sߞᷗ?a˻%~itm',k^^80#ٰwz>\JSA (X`.z)t.8ޤ,">~pHP!qRI< ;>y}H9|PqUDDpY:Z0yl'm4v8CLN'j:)4OC(ҿVETNRY]ڐόqz~aS0UX=I(2jM C1p(qX I$WPNC d˸7 GErPD A@KݭH 0cU(jU ^ d-XXlE'a|"N;eJ ӔgTwJ} N%Pf;8 gM]#E|eպu n1FQDMG ifyTTyn3W6x=A}N$9y`l_ H$\ ~q\ڴHTmj/GAEۋLYa6ToR+Z\)CXH  cTVp8 0XSo6+-d)M* @pSx pڿ'גa/A$ALmyn +(XR(i %ΠQ+I3*r~Q fTKX7fզA)PЇc+N[JRzܺi."ԡuK^Np|8p$~܁⿍V( Ny @A{ Y/F݉fW0`v=k~*{1m0 «uuSpV;Xpi1t3ZV%.+Uz"rZf n2e(VI*_ 4tTe1eQ`p6އ))fvb/ Mx_RJm0R'1j nhO۵&"?j/w\cq夬N\~6׼dyϻ+n >0 p~oЛF(:u?87EbwND=;t8&cN;$& ̋cRghur>rxֵ1 "~hhnxY.x).3(QK#y[J$ќb|TY$!NwzfN&'q R,eh76nغLfA}y rϲjQDO( _oh_r~n2^kH$M\ 1Iq}7Bϝ'6՚V+WP *bufㅋ@$[ѵw6;N~|@u2>=Ce$Rvca}8h L\ uEtT\DXNÈ/Elкzjbu2ovcTX8ٓc'NL>ml@Ћ\גޥ?7f7H)09( +Zejـˣ#A:!+|2{hd@ј>\+]r!?4o&8d;ǭ`ڎ5dZ 89:9Tk䑧T[ QɃF~c)M`,$ 2y~ 52y1Ďlx ɓy^<<U/u^?d^gjJ<'6_j SCaDO`틩/8[mۺLQˀf-nC|lX:LaWinИ9ĊZ~dSb|9;D qps8r #61K‰0B0GʠwbmmWᮍlԹä鲢N&K9(Bo/̉'>@"|hDNUt&t;V^vlJEˢ , k'_s-ސn]Hf&e*I~XY6 )G\2̀\ ɔ8E( ~SιxSb0v\ػa\t&#݀k:hJJ},hDx'UPVҝIlp HvS`>(_п cumKxN"qZ;|usEm[f85I/]XʙH&SEvĀ_9BnBfpr D&۸ru!~@ oC @5Ua*/`j3()}QTAE' j?%r% HY R$e6C=21.Ȋ+~ĕwrE D^'I4[6uÌR-zU q${C ±N#BjcU@*1gψD +.—Vl(t0횫 ݌BJ܋#S7HI!wnCBM2&&s'2i75vN?UZշ,96a\LR׀B&Bb/;$\lZps<2?/RdټLmdp{fkmTK|Y<|3*O#qƣN~K(1g k=m*ޣmI{y4.s0nݥ 2s7rv>8Y u5kM` DC}] I UvzxT@9TT 2RIw e-!q|Va*m5GA!;SeD]Yϧޛs|Xdɒ{;+"^\€z)q--jn.\Tqr)+P`Qyz 燄[Fr')Мg n̽kzdlKs&ok! h`34~ Dx:ۚq81/ Sҩ 2{n簒[W(keyM@ zζ]CgDCN@1'=ӗ `(Bb:p^(Tu$[s<  St&(J4T*Z7:BFǚ+DYHoL$87CcԓQphی JֵK< hv@{ t%<2^$C=X,a م'i[qN")$z:e Ig(sk wΛ &zx^'~.\Q؏I?ƴm]fX4S͠)4nQ٪?7dz'ʌNDRƢY?\[Mr$l2t/9f@=5y\waV~;cyr|</‰{M /`T_ϰx\#<̳S6%sUIL~sp՜9Q8Y*.]U%X#sj)W3pW˟tyAR|Ym!5^|ݖd<Žmt'%, DBGXh%g:Ѥ\'yYD>yD/'R2}`:lHB1Z\$e%GȓKrv;6~D3u5T; L=ʒM;Oc>ϱ8ѲZM{F'nXTܗnZy_1z7oI;9=n5S,; #Ip)\ 攊?O6}avvJIeyg$2‚XwqT=cíh`>1]Hoeua<N6ICMsǖ/&au0@N!rkmT'j^Q f]m h׫o I"^. Yj& >Â?LfwWKbMRQg/*3TD8Q/H.W*lyCl#ʘʫP{A=W'55f(pV(4J +,GIԽh  M:,U#i̭VV2@']z׷"U9W8clcMzxp>q葸*4W}`ƉHH"ㅟGN$3OQAӇ^xWL{׭IVKI@,^֎ߴ[?YIa)ՋjJT2ڗdJnL;!1j CóI/zAaȌ%g:|9r~:ds848ϣ cAAge5ĤQ@ ؁sߐ9Nik/7N>U౺@0FzۙE-?H-qJDB[+Lm6_@{5vxt/~N]*Xl=_1y4Йi4ELiS?ZQf#>~ە:>LLΰdF|iA7:&'USya'̉4$Y`;|yܤA@~e*Rf9I;fO%o´Z6`HSwo9,yo!9s5 7Ehev삸D|37A! (V7Vzsӕ4=|m?7 x LAt}?!_6,mwx/ }drA  /#Ng ֧ <>@]@+o1cL=WzLqΆ+>hUNI .D$Ra:A{jmnc,v 毛i;p켵똀f"/n{_R;u`a|jV?zm%/M `u2dL!_$4 ۱Xb;%# a`Gfm4[72v0!^2W:p'׉3"E94*ػk1~x*Lh0Gu~i)9?BŜ}XGr2c4R&X4}" G:TANc6Nr=0]"So)1I k h$W,8 v,30 XGXMx :f$ `<ײͲWJZiUi/$,vЉ3wub4<0^a=%D晔ɷTyN0+PvAm!=9eh]ȴ?6Ty]q֞b9ILPd uWQt>]Dǝa)Mn9Ԇߊ҆祡2`dqV{hDR>F>xU-zcZR52V\GLY/8јHƒ߹SJkeY ȯrrp聢MN*:eg\8N[{7ҙ8(r`TG+>X,,'"qb1ӈ3.EL%ofӌY*J[Jy?M=҃4ib&};Ј<4%;c #ƍtg!87;e}dכ')Gd2=Yl+ITFߌdq͹p -aVMCFdfGXhfĂiji7Oc[D5șv~՜Nj_>krigW \☺}xtNa^Ðp`]GOX*ĺ$e#nxňxCUq޼3]ԖG Ӷ_"Af*N{Yi9oBnqYBm$qO`]9nؠ9W{[mt[yYonfWqsAduA|5t/tu2(]{J:g}HB-Y׉GNVh`, $}IY)VE}'G'4\9b:al7ۆXdgq G6wQ+raVڏ&Ѓt!L.cx]^!p00~_ҋcGkN./nDM2|A/ ]!_R9"D\Q-拁>˔hn+>>Kr013[N_ ZH[9uИ I(ݧٚ" 6\NxTIRP0s`I;7ϖb\{h8䑭b&vِ {za0n+")8ywUռ k}ЙF*;P]c`j/"75dұ,,pLy콞 :Cw6$0?L.D;~Նo Y?(E2jSXeAۆu!!mXrQ:⭠y;lۏLDNT6n7MAN0Oj)p0-~i^q뙑&0rkoXu%x5R'c6~[T4Ĺ_\zl5gLL}| "zm)԰WSN^B`EhuTYfƹaxI*'2!/XAޯ ;c17 }8M9ZOVI!(~:܍`2X&Ǜ.RY?4.;ě뤳r1hN~&h2RnR m/CJ;ޯU=[I=x}įK6kQ=z/5eW&nd ҖCcψZMؕqdHݥ)xz|6 rtwC](Z25@D = 2kC{lr_7e|Q%$*irVPsQKϤ2UiDk`e#,z,F&@kXβFU) 7IEEX7o8ddU(O>{Jvo]&}F]E^NHoa_M#M_i0ۣ:#g9 3f2;Z,vi<[^O뮨Xo<[`2CU ZƄL:2gʺXSw%Vm-szhiIV 7keD絼XTxXAf镜v|գ,euu*yh̨gh; 56e+ 97zL$ffn.y 'wt1A|r-'o Ob<GPlLU ^B. G0[˰{R2lOGŇP˫0gd* ӑ=EJ.~9R6j6iߵ9didF*_Ȥ7WtiQCz˃p0Ḟq" V;l{WA ̙|5~ld@)D Plf.=D "oZLN#$=gw5gJ=9YQR&B|@Y_MI 3;|A+fXcϦG5'c4P&6dI,[Y(Ӑr:WTNE++[õUmcNm"j]e: ۦ"z]'6Dqm /QXE[nZb?Ihwv0]XJ>][UapUV 0ur="gycӁYzQg,oQm.NjNxc$v!!ua(+ 74+Wrat0UVH6vR܍WՍzx5=<4ey'qBOBީݴ>^oz&*[ЧDᅞ|?64ǥ Gp'F'0Mq*)é% ;IX)@3,tyvۘ*ˡYԑv .$7v7ƀRUmz$ ؟ҋO|rLR|3 ,_%ʑ9zKyHԢĕE)Xu!26U6KR.?P[UٵM[sO̼*0 A,m \9?s{"f_<fS= _nw6dyk|_}>_ן>M㿮o,~z" %nI(1֣ Ix Lq/^~XaS` ªcNi&f+EC9X.,7+o|soÿEN+pT߭ךRT(D' N׫Q]V_)N)ɯ)z SqqI/}[~_M2.-L{n,G$|Q=#l_,:<8j-Bal2ϥ堔s#t?jWMܚhpf0; pߩSU4%arfϷ; QO{gk0ٺ`հ<n \.pQ%]䦪P?݋AL,j.??s?Co}n,է9m.?:]He[bM{ymJ_u+],ԛ݃FduLKNuoj[aX@h\Bǖ+>RqW/jeڸ^*zs$+?Ɛd{VY] N(* AIj!;! uM 6N9ׅI^ 6SZ19ʌO(ɸw25^#; 04MBXiC#-ptp$,Ʀ_EP-ѴM adVu "t=7"p<#U5k9ZWh䔈)_.`w\=^I:?o9`! ƘYz]HuM'v3d()@J ׏i?Joll@*8/d6 ^е'pZgKsK/Ya!MaT`d_GH@^٫W/{k|?G/~lu铴WH/S֯@ba>wO:hn)!KBvΤi )`oXB91:ow`b}r~FvCx`B`4&FRwPxx$adGRWO++esTZ0>c Ɲ@7f 8>ՊT@ŧSč(h5Nz}ģG0$h)Q_ilq<5NIRgSCVy={sJlH"#@ůŪ 2ATUP(8TU{g܍kYxbnTnJhi 9 t=̕JilG!t¤ ժGK0:%T_ChlٳWVWuOKy0nFgLlЩ&b=+k'(a]6%_GM6E)۳_ۘYP\&dvMecd@[i'_Sz{͎"q!e֌ N:wG:zSUϪȚ3 [41mE@BҩCȰMP!n:@,2d-UTNpRVtokyA vM7"ɠA.lKS9yb\L5SIU2u ~vr1=`Nx\f X'Te PJp:*6n#xt;t֝RU X-ʳr;ZJfA>%)Ch&J_ /ELSrdp0U9JU3C;K~g)2y6uNw:F*4^UMXS܁Y % )e1- VSU G}a Af&dl 9N(AE5S aH$Rb5}s=lS3gnߕ4 mk/zEc0UǴ͎A?dsD@0Vgh:R+B!ca1i7aTcM=3&k[ZF173$u>z|sEB SV2 [ ctt-,R:I UU]#04'zLZ06ҡNT!EG5UQ{=T؟LޡjHl6x u8iclOǢPC"רar"3:>'jev[Mh6 Z׫+Or^mc|o4S=9ajǣq/]TwO~kA~gsߐ{{to>/JȠ!(ڌԁ]Bz"xs?6uMa (%cGRx R *i, ?I2Ԅ+,#dɜJu > ZR 茚l`(ӵ ;qqS-XwIoUY񵪠]E*|[4ٷ:tA^k-vAM*m旦x)wacX=Q;mUz3ǵӉXNya3}z`Cn֛U=]yMe)IF9A<09q]aRANzw;]6z%Cl87zZ}[{0"X_|ŢM~(p0P;?5 2n}8Ep{vq 3ڗ,aY fnmk4=Y GaXAX<<#j74.̙>뵰e%.(SvCN1OhlXk Oe JNjޯ(a J_n)> Q48SXJ "aV(Yh|3%aJE_[͏H}ba+"uUݫ:*IW%8ּvFJ1Vq-jWA (s,td3hz{7WvGR][3n©JmPǩoyS8L'"@_.|X.d1SXL^+%NY@d~SϗfkjC##% ZL$8',LEx]UZrH2CJt 5G2#F z9Mmх7fE{u+^jf#fe:*r"l_A &ѸgVF+9tLb5=c!1&uȻD)C|bO R2iGAߠb8mm)#'&p`LORt'&^+d24L&\oSS#Xnrb%3Jc;k'SEm" TAK֤9ϹKècѹ z=W>WTUuM}ܹQ<9_J>RM>f_2ҪSzqtèՇ6jimu ]LKrƔ㻴i9ZJ5_KOܖ-mZіݽ=lG۶Kn jwXC'\0#|Z[7 䳧H[g/qQȼV[GQT뉗 BC8Ծ QK,%{g5Q]z}R; 8AIol?ηmfu;>N!^"V'Ix"`ڲ8wٹSd#Ehet lPj=G'Kv4/5-Y8z^RbƺƧ4]*V Ǡڅ~$F5ΏTVILײq{e#4ij31<>=A+He"pw/@N( T@SBQ%YKճDֆqht"Hذed t-g Gl8V? J ~M'贂hsux`Kl~Oz ^hXy-?ϳ.Z"O1i>`q^{FqI5R =a)oK(H5wRAoO zXBXr#}ƹFg OυKbL28FS}L3Kr01\Q@@Ba~<Nt ?fh4R Hb!:ZK"G4U%iVZW$]b% EJ7^Ez" 5*qf>!&y\@>L/?^P~=uN&!!f&Jˊzw.ȵ,vx J.nri<5ڈbG 61l)9D3thoB Y~(RQ66HM:+A*u)|ȃkCR] @b Q EE{_T‚ wZt?pvОHs^&Ff;&:?%7[>MЍ*<դaf~9=b8.a$YԑW ݤvi&|c/qc@DVqZ@Gi3Xʺ!ONxJʃ,N0 ?+&K5ѻnx 7-|m}4Yy'n4ŖĪ)^톬AgOTfVk˥jwٰcR`٦7X| ӧ+ݵןkntmy鬞>u(LJ| r[:=XitV\_uvaoqE/A7Oי}WcfZF*зΫqu䴑/xEj5Sآ 9̨<(^f_ po8̟8@)0)]{«}fub/yIKM#\7{Օ|]a'O;߇OO_Yzx==y Zwdt=|ʳjvz A]? VN7'OV_9=!ֆzMQ(*69+w51 /@Ѕbh\Pg֖~y}˯F7-'RАZvS!VY"zay@7 iSH4{ݭg@|.<]>]d}I礳rvz ?Y W֗K4##tˡ&M<^:DҘG^]$'^";8hi].W&t4py{l%Xހ] rFrix^g+6`V?̻ȑ_#3uN'_ONϟCu ʯ6vU>~oQ[zdy>Co}fL{EcL8a8o ߨL^ }6/PUPAuTJ<.y%xg*Q:=[Gn Z@ΛG*p}z2țG*S![Ԓst=q@E2;g:4wryT֞r@5I{- Jx6mMڞX{ԭ@=={hd%Z{-B;$P(0B}8l1KnoLG|RAH귿'e>iN ]{jZoڒI>-};5kmESLiI~|nASL5<3K6*RjQ I3*z"9Ryh)J{@<BRQUe~ɿ#K/ 1ZuG~/W\4u°HOrC0|pz{Kh33+O1iV,#y og:*XQ{sDBnߓxNq h)'!.yC~I&hUB!K0d/;L2[[W-yxK0l3@8 ?m% U!"QBLP 1@x=,V.< SS۴ڰC]R`(iI*,_^o̷Kq5Y_[?F:{+Bvd6İ~ U#ī0cճ KR40RHYlz)s?s?s?}ѵ