#!/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=0ffae734f84f359b337add4a091df5a8 # 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  emyӂo/NZ'oZo^)YK{!O{ne%ƫM,SVYj?1+Jy*N4#f!%\GUas?iL8yւ b"^'3NoA%6hAz,c?3ګOAr!!R0?тp l BW%Y\ &WMRB2$8ÆM9*3N8L2 dA9 Kx~FPZĊP`iʗzERфr3rydY=.?ɺۺqͰ3mu9vPb8/4d >0ndÆ6nG} |45=kp` .[ a6]ȆWִ7ոvv5FZq߰hlɐtukؕ́˜ߦ L (.MӸ웸ڳl"MS(] '&Pd c 5X{3 6oq`3t\&{qǴY]1m예Jp `<_g \Ӷ# Ӏ=bpΘCF^ m,q@V8[;#V60ֵ98>D8-Ǭ,'X5:&Q\ j[$Vf]1BtPRjC(Ɠ)TA4 ), V8"a؍yV+2W쓷Uk[#ѯj8po~kg:.(H8^<1DZ9ѐKK_m_6~n~jsoBܨ*.Ě>Tgo3[fʘzr]~]W:m&yo^>'NO0;;m`Oylwу^#>eȷnVgG| 8]E$x'v=7G'9f =P:{o7DǦ؈f*YIYQEylԓU\2G|dlN&*1!DT͊ , q#x^2TuCo!XY!8oҡɭi8d^Tn'։ѲE8!k$ kͰJ4\sPo APV;W~d''FW3$֬.aw[I6 ȇZkٲX\" {l 9d,^G"XX{M7)r$/ #gI|U}UDe *e}(vABByJ1O7!F{̺%weSɉ {/򥘏}@U!Jr2r澤cdb(ZDLP#pJ`u4~_t|O$0`Y;_T\<0*V1-h(!GS"ׂG[8U$ h8)SSx38'Ff+iZwFO7>,.zpi>6p%8B"æ@Ǖ%` JMHӴMg|k|@K3RV{uXZLȞF"UW й~._+&LS:H|F8JŅ8 4BOdRqMJ5,WnQa8)I֫=gKarLAG6hD^-֠>cg,e B?y '߃HQ `X$?G5$D FKѝ"'{WPǍp\i||Mn ]Hh #re>⊧^Ҷ"]'KmK)JiEb̎G!EnTXjujǺ~sH$0Hc\zXysdAe3]/Zg{rˢ e~RoYv:y+Vj糟` $$NcGp7,zc=g{fޏEeLxW7{#9pJeۙ4莟>S{bwy4ݯ?9Q5~_`O01N(ʁT* (Xgy :b\Z`pqN؝噤vD"PɆh#kCp|P< W}9]5~vF`"F0cHf1떀28. & C  M xu Yo AO0qE© X",rY̼ps2iU0(2O:/$w\:oO4 6%"^RʧUugƞ/S%b.@%MSsE/*yxΰ+IRD4I4J<=xAMCiʘh̷]# {=F~S +RCbCl@3 2j\W VABh]K6%TFc`&tF5ғx6[ 薽Wą jAo JԩCJGqɏ|/XO eL4^*$(FҖ Foek@qeV};] lXٜ/`>0s[c-{KBegO0O c/-QE*XEۥKPQ#d0М0WP<0P!癲%}'H~?[w?ysZt^#>ǿ 'ޙhr3:lZוicD+Vo;pWPO}ueBje'5vi(<.ާ}p>-Og Ɛ;3ܥ#F,Af`V= 9^'j~hj PN7zѭcO,F8}s4pc87'U\w;8e9~тVE tWK_/~_N]C>ɋ~9qLQ}}y> 52H9M2Q?B+&y3UůBo {ރbbgݛbý:D^hl2~D;nijrsԥMJ/C`F y|aXJ p(@|bcv?I  :a|ڭT6i@<ܐB"/ؘdGwPwtOﲶН`OOfI>qǟޣs5u9:VX n8aPrtbⅧ;\Tg˔6X!h'ɏ؇/䛏{&@h:B`@nta \A%!Ԡ:RV-)?V!v)35 du q_M l@&3q3YtWU ZJ'x v2c@q~rt/G%[tHj0_ phP4N XI~GtxqR{ %DfV$ԗz S P Jrk'=]I86^ɸ߯iKȖTZ pas9u+s/?#)M[H-R5^Ԧg')A l=r|V?^f.^=sC{4<;]'O>gdū|e֑B0PfxԆD6p-7'.,j8A z%B?;[^k0LXmPi MR 4+P 6K64^$|#-UJJٕZE;3żuz'/O~&[RLogQʶPkk(moe&nM➚zk\f9Ҝms\N7_KR{n0іU-QNJSF5erb%kҷy?N?٨gބDװm@#܅\dlت8O0@{[̉jb=2Q@`sc_5!׸/cejL/)YpAjR=kx0 {ɣ[ήu1|sex&| }B ZtAO!3E^oL: )X,U;t.,/ZȻ%y/)_[G}O:PDH CTux&=h2~wK˺dæ9ZHSQT-{?%PgxX 69#z|ٶEBWCcg$gzhxs Dcs6MNaVfE(Tru->9 ` p<'}=ᅭoPnb0K=nfpr[2IJuRUľzts,+x ֎F-"?jO\'iK{G$39:f:~ mM5}_6^뮸,ӝ ۇ ީHr^Ld(T]9 VS_m2HuX?Mg8 7.V |0APXa!bCD!Q 2Wn2e3+@&䓳yCᆼYGb)NB] vB"p@J0tC"nQ"eyjQѪ+m&z=hQ_v@*R<XJY!Me~}EX8Og}dL(Ĵmbz8c2-bZ*d!1QјI2?I ٭~A=M?GS̅`Pi`W`NC]Ǻ|zWjj*m[(dO |QC:|zTWrc uBFFf ̥ X-1"t"0:x|EI ^G4²A d~P!Yڽ :Bz^Lm6}v@/yVI[Ur#A8:rc,|G -5@M| &F$g{# Le4"L1;3}Ž躢ޡq}LNXKi:ηnkR,kR'\#Sz$cmB*Hŀˁk ?!91g#b'f4a M?,z`+0Pf&􇘿rk k6geiz%oOڬ)Vo(&vʭs !!sUae"d-ˮ$S)+~ 2(81eWO>m mdT˭mUj*Rr):N P\ȰBL#M2X Dýj&QI :NXܿ(2qrdӫ]K_SigRwuFUE Z}C`$r4E"NrLDJ*D+2!ѻ  8FN)m$we.6_ls!D2I?JlEu2-l)EzkmZ4 _0U$%8nའ-qA6eXG^b9:g|Ք?Q| K=M?zܾOh*U_~ b;?~΅{T4-?!2|/#.~?WVok˫w6a*#=˞Gˈ~^Ua7u + +wj<[r Yӎ?@_D?vܚ,$x }ȼ\Z#dΠ!Sbkk4 ۇo@Pa!EjD@ꇿуJ"Jc,mp`f2jMP$> %(.\h 4vi>A0nĄR-zte3jw(x_As>ld 7{=.`זs o4eJo'U~vi %T&Ę(:W礧 &!:aPx$IR q-8 q6^`%X@pAm fń7p|ޅgo*=}IIJKkdR "PeW_Xzq ;ptܨd ުL[=M~I$C Kvd'\,oNP8 ?Q>`d7nbK kM_RR6CT )[a[*"O*@s@O,Q\`Jy\|Pȅ~,_&0U]PqL>+N`Ŕ3%ʎ2RyX}@DRSK1qn}[?PMD{yz,дNcvξYμCzx!NM]wcfsOq54ϣ[e8j鹐?ïv:aE~eQٮk괛tLx<%utFttT4]-@VŒAѨǐv' oΰd'gǰ!t.pѭY/hP(XVG,;h8%8Rԕo0,$ RYa;k9&%U#eܡA=E[Qd5}o_-ז`V?ij0] Xk)UUZzcxIg|I?vSK9UI 0պ0=γhhbHnoc}D@XAݜ&%iB?/}*2]!:C`;eґѫZJI;:[?ࠖAW$dN4io Xm*޳)Zp~[mzըeWX+ZMn\ sA"HSg5HҚ&eKIbîl!r9Ji!-lQRU\tjQ`w7X:POa cA\^}X 7A +PzFyYTyELW>XJ%RKs]~k_$=HI5d&hc͚N-#Q(nIC*bE4 ! Fs2 kK؜9-1oeZtm#WZB|i^M!SwUȬBŴ5Pm# QЋ=pTl#Nnt㤔m8,'M,g'H{ Ň&ҜjmLӝQZt'SkA' !Jq=1:):;p3(/Rf˨aJ)E>~TX#vXݾ$IYJIƀjg"Np 4U4Q Zx8?( $=D mQd%CR|$]~!8SᦲM7Qp~h pƛt gf%ȴ:n{7ZZzZYA~C;Ec[wfE>y߰L> N$gl5}Ϝ8o0wF=GTb' ^~u֦L͐ 1 5⡻&@s*MAlC|)_>r8 V\wTJ[o7RSk 8ׅc7|+S8yڋk5b8J|B gj`XrD5muB"yay8Ӱ|;GD'؂i `f_o^YA&gD8J>5rjo=Gѕ!a8+"X;H(03%xM؆XW=%tuBml3"@~'bC=|1+E;*y 9S*TǏsoW~D}¨B?Ӈwaa'3Xթ~a.bߏ/-w[&̕%TCյY<rIe~;4?\;5#:٨]ۮjDa;ar ! fcD8sD~9I!؟2=\[v..Xt{.qƔ= F>ހ~@;f&%D+̼< iyZ92lj#I]D -z%;drZ* `"ΣmFj`9V&'Z)Εu\©8crVBdʐLT;u̬꙳`+#?.dif Axbz?{4Yt+JOF}=M-?v Vw{8kN|A`HV) -"ل;S9) ˒d&;*:O[/PñiC*fv뉫-0Twt/>im ݦ^O? vY 7M>X---T4GqH3LKooh;F]ʵ{zi0Kqtd&4H*ӓPbE^Ty &>IACZtuS]n{)sF̺~kԄ3^lP%{e1~Z;(d[u'Z\4&(craw)> jC#{ zu]]|B AϦ nSstTGƝ&Y-EoS%y= :#<8-M؃T7lz'v7z&ER(w6tM H)L3yM=t]=Jy`Ѕ C- Xq8"|VՈ_Pm.Ǹӹ3V"ļMjkHp7 (]"oPTDuR*Gz3.j{~؜co\r) @.|ijĴR:6>cqFSDm]iB*6Za!*,_ș1lzہX(z5 }"gT>/^@8>4JP}]j _(UT8jl/,%n MѿǣK e`%? -_'R?:ILtb?w_yr/;83jA,LX\(&8mO !~;4O3vޥHG(*9it$OۘgC}MR򿯭WdR4Bxd<@ d/ǝA2`<7Wd/%ry@kdaS-_-/_noO*~=k`C).GQmO <;)~{#_޽//aUܢyN53;ĥ9qMi2(ಯ Aw uV E@} Hl%0nC%ej\' fk{~ b,]bMQO&C 8JAOP&I.crBih713˟^w}Žܦ+gP"YX-H`< сtqw#kn8' *"@&X%H9&QYPH >F:y St  , ㅪeB3ZR+j/؊*ya w" ϫv{Kv*Hq'Evɋ".ɛ_(ĻFҋ uIVG:ЂZX]lݸ힖J8{QQ9sU=I&/ d0iQ.)L Ҧ%&V@mBU$7bMxYWJZ\)CX( 1#VfR,WpzYu˅1 Ax`¦ CG$/yGɮE$@Lmy?藑籤) I ބH oa fTKX7fՆAɞRn5 3Ux;6ݕZMuqsa."ԾsJ_{'z`ށD p2N@K06&]\s=d^;2vm:#w}ifi6W0`v=k~*1m0 «7h#9vn!m]i10¼3աXbl' *#OqB4Ǡ'.όs@woc YA0Ś"Pm/D$b3)2 3[`_Aׯ`0=}÷'g)p#+ٽe)RfRQgtj#EL fK܎~hmӛLgR0 Yk_TގT D fsD=2YOw\BSJK&t Zr`MWm2'Nk >mD3noZ/a03nW77 _,BS<f9:oc~y֏$;s*qy?!\"]ፃF2K\~>L)섃ڼ<<1^N@^ƿabHm Z㯕rg}}u9`Y|Ϸ6i=ocXiLz~%& 퀜5=g${Td!͝rvlq*e ?cvHALAtq}gus_~g%"7n4:99JN4ڐHGCi?t4`,SIϥxző,-$GN5>ea ,Mc.]^AE2L3=9AbƠ/0b2SpHS4 #1<+M%6pI %( 7F+5n_C"i07''t}?H=wgZ ]A.( Uzq;8i,JKsݍ x|.{ʰ@5j[ 3S@ 5UwÆ`00ɰG/)0" ZaQ;|[KM[9 2 g%{9vfa ;z`̏ٽf{'#! o2ȏR=(+ZeJjـʣ+A:!+Hжuaa8bB^'i&vuy6QdN zKExL$ˍԂeB9[9:9Tkw(P)!(G`wxe}c!G b, y~5"y0v͔llqɗy<+|<U'u0T^gjI<#6_j~ϊ) 0}I<귻 V}f&V3Adk4:{P_'dN7J\M&n\̑%*s̥'Wxpߨq33yxpDGMFjp"w;3 TZ,jmx`{o;wMteۦK:i 1'naBMkMbvZN[RCh[9T)kS$`!rú-f8E20S% L9(Ilk7w7 l^}~VLQTcNGD_;? cAҶK9}etwdDZup,Q|9Mjdt@\Ǣ"ߡ2J`'VtB`&?tڂ&H-hK=RS Fc 0E`y?n%Kνe>R:ӛX~-^d$Tzͳiԡ lۣnF5/I:t88cy,Moz3Irz'#?ȚuoL t8劑s;2Uew_&i A/')F1ߕk^R(boǁmHsMYn:|V'a,N& SE6ĀNrpL+R0} 29\FM6UpF(PD__-5O xSSS<~ V&JJ4@\ mz6^ wŗrRs8*5,Ryco3btƃ^UK-{!"T艹xh5 {Z|qsy6- N42?/RZlAYc&ݞmdgkݨ~G| Y<|3*OGq&?ތ%`oـitiۡʟ>SkPຶ$O=ڸ*hF"3}r=8+նQ ,Z!JO PQj3N񤡢‡N1o呝c a)?a&9p` l@߅SrǰCQqg0gc45D7~t䢁 "B%a>rdy$귥hԾ(":w 咓*\ݡhÁ0vr)Cp,SMM;>r,Y2d᝕Ke/2\au,9塥~m4`¼J62R?}<ꞖO xf_ %V܏`4fXI NG 'Riz Kk6y\Zq|\,kiM2y:%JfX9~4ou̝Jt*uC 9$so!yYc^&e Cdz-ApЙkXch਒E(%?g̩}%8hY&n.Hד>kwnwLRgԑ,]xF"c]1d6'Y-龊MP ejpw!ݱN`Vpœhی BֵKxxhV@;ISJx!^!~,:svIVj%QoW^5koM Aa=d 6OGXt& 5nv'!Ub ׺fq;FrYդ\-XXj[E^uC  %EN_+wu6E=:d,|+Jεg фA/>\r6'$`S1i#ֵۘ + 1VnLf* T?!߳-Gã 6މ2hyk&CBh`],28`TՍSr{_l/]+kQ$ G1f_zu?/p_o4)km[h5·>oUsGz87\Y0]Uv y,4sDʕ W{=ĦOzBx߼ )@D6TK/>{."czZĢbvtU~ `|Mj= D"od\g-l G\$e%E/1{v;6aGE|`xǧ$;bCoОt'cXhYM]kl7,֏ M7}-Wtmu$o7 )I)\ 攊Gd:hfVJIreyo$2܂D)swqƆ:рܩ}z#FJx~%6m̛s)_LaB4ڨN92A!if]] hGЫ3l \~rN⇤z"zudpZz=Fcx_*RA&4!uu2SL%H2rΕg[8f8$d\T^۟/ :8!粇vQ[B դQ]aiu?/NJڍAФRE:Nj}b ٥}+RpJ.-Ͷ?fڤ.@|iю{¶a>ar97BȲbEiH&"d$f ЧߺdIh!󉃶QA vw?vK:V Bvpʈrww]ݬy:*NFuwZ_apGfcV;Zy9*7.7A}O. n׆pccmRcj[?9^2vzumvj/2pDvSZٞdv{Niq~W#m:D1jMFßæ ;ָ7!5fdofzpexDI'DtQ~8lU5 ȃ9Un9Ը֖x&N+q_cT#FiRjtc(,jDT+EڶJ|.zhqtxuG-^Kn qVYMT} 9FWSfi$^h8r=gӨ)չNӶ!tzbO}oa"eRM@щr5ۭuWglrعz1y 7֔HCLbeXvfݚ/4/LJ!p sOM8^16yAbz ނ=s5ӎ 7Ciev݂m" CHՋ:uד)'P|5ww{2SPDOH{@znJz}1r}вA eIx2a@s 8m ;:1RFkjۦs\بEZ(l$A*>D#'ɜY` c1kG[p1a&^h7Ʌ)]Z?jq|SnecDcoV'IGE\毁1d2;0-L|NeW#U8V!ۀ!%ӥ"<JXTlѵA>OI`Lh0Eu͇K"lX/ea>Y?#s  %MDEȩџ xcG|I'("*[*isM6 'RBC߰U.`f ɰˑiDDTpfvU5ZRz9 %VtEک;}/tTa^k"xX]zJ<0)i/o+PvA]ўt^8drze'bpُGY}̤ʦ^OzA]5~о"ɨ5q4<4y;5᷂a44]fpRFITWO*^m˸޻kN`l{frIZJJc$a,;Uy.U pgYO}uqpqsRUYh w)11:LkIc+Gi6 Om^"' Ŋ3y(ŗhtFyS9-nNTG=VP&<uh\K+;QOcqF>au t?zG1Y)x?ŸAs`)-X‚|+ ( I_%e{l܎y]1 t2b{7atNp>_N/./H;d` |/, |-ceBlqEGu/+Qړ[)~^Hْ=|Ei9Mv>nzCc5RO5;tEAenhlRP0y =#x,!H86ʽϨ]C,Ylă`ܒtԌd e)SY.<&Db >xAI;7Ζb]wԈ#ydGLm6dÞh^99+ #A"gB]IE5.:Cv&ET^ x3xFk1 -|N}Ն?/Q; 6:&CK(a' uԕQ4(L=dp 3NEhS9ԈtXm᰷IBj8 @cհ3)!( !UDdrziu>i`#KcP^ry.BY$Iwȸ,Z(=ޤuGhƪFYee_>n%%ahت&مCVယ!ud/R?丄fߎcQ{Bz -6dsƹ9nH&=r rZ[x^D;~Նo Y/(E2jYeAۆ~!mXrCQ:⭠y;lqDݵ *unv -9-lůCKՑ2N=32F gyb:λFj++9kxG`)`k87p^*9g z};4Czȼu; 5SF QZ#URqn:j^>x쪌n ge6?}$Ęet9mM~vK<-l!$8lgj+YE[0_G^srJ,MgGnfͱK;1:lO@LZ rw9wB40H ~`3*uɆ 7xY+BOMQȅM72i!1gHZv%fm]'gø0.h_A{W147"5 C\tbȍaXYt ίvj&GuS:7qQ21Jbz&g8[JILz(Z`􎦫_1~hN6 Vq!`1B&:8{q5bMQ@I*=/~!;E=`⩛F!}:MW6q F8-xc[!ThҪ<}˧ 78JeK.bd|@FyeF󥫧ػ5,aPcَ1j8O2m8lB c^h7aΣrT)'sڔ8cpV\ȓ]-t(L6`Koɧ ܙ + 21B^طpx cS487+s+EnXw/ dgYaeԅi]V'[8n.S2p4Q̳3}n{i4[^O뾨Xo<[!Z 6=*-_}L&T &gʹXSw2Zlix*#yO$ [ʭc.n[?_k\ U+%~AH[ TCasnө4X騆:3]4@)*g8cre.ok6sFǽ,pd+9?S>>daL6ROI=H**c45;/6Zwx-ixtS7M:WA41mqA-6-L6_ /=Qꑤ'\ pXȠg7L5;t KDF,V:|AeO-Կ@B=WV@$?wD.c"0$ 2HLiGWPRh< Yfʌzֺ]Sg8q\x+hRj:ͯi` ̍%6}n]v"HbO37iŮhvmq )= * fkv9Jܝɰp?*<[<<𜧩_Yy +EI `%5?d"",?u4y %J-۪^C5qtpUa/WEsdDGAFga}Ll dNK_'M cm:lӾks}tV?T x!Ioꯎ6ҥE -C3/1 Nǩ ,X^{*B3ozFtzg@1D Pgld.=D "o8LN#U>ewM- jJzrL*B|@Y_MI 3?|A+fXgңS(}2f"A9VVk+J4$Õ"+!5S3U~Z~#^q:}7³`p̩m[D LaUAWkۄ(E U^@˭<+e(ߙvg 蓵UGW%?-]CrG:1VXB&*:&a:8o|#SW[cXYY9 ˼ٮB6S%@r1 \uq'ȕ(hޞL_B0ݜ]zaIb<3C4 n~B}Q&h]%{=P´ A37AހY r'y5A1PYs F4 "#{hjϑ'F}t;$wS۵4]ф B'-xaxo:}ϻ_x|}Xp^w(䝢yK4 ,vZ)@3,tYnۘ7*ˠg7=n; c@)թ6O,bE/]N?A{AoE1^R\÷~HՇ‡WiWsBdXmF1l?PːUٵ [ O̼1 fA,n \9?s{"?yxz@?sG?¢UοR>I?>^]D5{'&% :2 INzqguLæχUD`0:kWTyA9\cX .,<~M )'caacs%*.,M Q6e뤎@֒m9xJkxV[xY?*,3(Tek1-#vGr>E@_ppU߻}-&qqpx/D#73R:$\[sXњp]b;ÀWA!oՉmB( GsUG u*}y5i`9 yxP +t2JZ^3ߗpt84ؠ#,FO&WV*+ytz:_nt#&h󿺲||wUZQ+@zp:#_W9wZ=g| ]?_a(Α*?vK/u;'D!Y^QqdsdGp .{6Jz_=,~:?P M+>1SqVG+ƍdUa$,c+tLV˻Ј>ZEzThlh"LupR$aUfeUx*UNY)T5ɨq/'~Ğ;DsiHK9Jz1Z86A 3x9C:7"Dft{Dc D;ǑDF'2Ka6J0M41`hSsN@c$Naۃ19N%C%unb'[P3XoQɭUԞxaRvo}>袸B)O!X`pOz033yaWvNWS2[twwRT)87TcѻaMߔy^χoԛmUuo[f߇jބ~j? wvP;v;%U9ޮ.)@nrh5JNgȫ Q}xzkļ LP}T#x~p{w5&p[0N` j[G8 p:Qé\qC!QmWwkFfO am^LqT?:>4ՍVv4_ǍZ Z8w&xyܨӴ쿃i>Vm=*X)M)M LUq 0c[GN1l&ګީmհ7X˻zVTz ԹwUh5^Ξ-p%Unc0~.;lLwEˊ噴z u=;ҺcY9qyw^{WLND/B Qrs3E }@D6kv#_-r ސ㠛תOW1׬3f;&al2P"`n)hGopx%$asQ=ްAj05:>N:F̡Lӧ w_7 K()>ȳib"QW*1p_v6(e? FgKs$K/*YancT`d_[$?Uwk^+1_]('G~h Bz׮ca>S-Fn\;2Pb:mbaoB>1{xouGv0]Ju/û!lHBilݕ\nqs<_\TUsiȆ$P*++%1c-u )DLv@E_t:A\I 5:v 15{A1$KK sr'25p'P+ԙ58Jlb8'cO)V:NSABESZ](='e[.Z@^^!rMz1TmZD7\=nξ痹2SW1_Sz.V+8-l!&%Jԋn{iӧKkV=- ۧ\nڎzZY5E֤nnڴiqNC!ȰMPy@Ff`ʪ'E5"M|->)]o 'r!X;J1Qj&"U2)v6-&0 'u2{ Q"腊0*>#?ktnm>=A+wxҪ[z_ZgeipDpe E54vL->q,IB2 ^fgrJo-Us"{KQ;uɠC޶KSdDiLՀU>%L+ 8 hУ谀 3c ^@y5SaH$Rk}ܿhjCC/p]A'_BZg8ainv'3,wȽf(`>G LQLpgd2U tH|* uV8 ӭI454IFKɨ%sa D}'="UW1gƤ.it4Z`>OUlPzhZU=] ӊȲҔ@7R >B0 ' =]6!1i|.-ijwS/>b!e; Ƀ))qZ1p;k}Gp`Ӹ=E">}ٹ,aɢ dZH6 l[Rsu,] * /2"5OXhqw&`^m D,ڦM",2N4݄.eܼͦdg Gms;.^(c'Lx7Gkl3VZh…;U?%2ŊM;guۗƠ TwXN >EHzgդyϹKØcѹ FG\~U'Mڋ1xD/j3uN',+X.fiْ=H#KK!S/\HJ$_@PXv_-TU `"ΩXB[lY,~U:q|= /KfK^fƬ_|U.z'Of"{MwNVfRh6[w1`9"X^n(NF(?]_*y#8 WG(MU97YɍC4 u_ʑ*6Gx/KeP[t+kOqg-\暐t;ǷpZL\OPn'R^k롪d?`OF`N8zu֙T SRv%m$Ӗ}բ"G"܎nɌOCl9.7)ڢm%k hge QpbcNy& q @DKƗܑ STitSUvG>1=5=[UVG *jВ?7*~/*>+RY]QQ-UUQ\kL+]&][Zʾ]Y/7:\u0azs.էSd[esZZǴl#5w6ܖZr-{-znvm0Rhk\0?rx>W=^K}ϑu$|v4:9|C\*^^RTA%7պq@[f0F0ֶVBU"k rQUˬg>)ڀzK@,Pfi*wwp盘l\`g:CDDl_Ā݂=`Nmٲm6.tJ:zML q`^Y:#ʎ\Iwpԋ`nGKR+!\Ӓ!*E%.ktNݥJl2$1hvۈ8`PrqQK=7y/ro|Uڌ&'-Q$3*Γ쩝ΉE  yRuLT c(ѴU8~lX2<}X걟u`OPK"1s`3ɸ<8-1JG\ t<6'!>(yjgK~g\H#K=`v^{$:)\DE}/@e%jJp$5wǝz Y^K*3nt6M8HeCsol D!̒"IM47Wl:̎z)CFd3pHD)Dh(-mCdOSU2K}?;0%q+(:W`h_/:{]it]8ʹ{BXEޛ]xWYd^f,޸I!Fݎ+rB5?s/фxlwCp>x'9/ʻf'Yb)㸛 4DWi@E [nu9>4TZ!у %;{.=#a}Y̾?PC {],$ &NJESg(G`ނO.mrGF7P '߀'fBL?~@GjC|Zn1̰̂C v${/#u8a<߆S]DAHmVhX\M|Lx.Wk]ۯC{!)xOxcjn}-Y=k@95Ԥ̡~{;b8.b$9ԑ1ݤx Kt fOlK0pg+

zX:V7-UԶ@9ęt`M]eV\?n;D-M #i}yye7~!fyR~R <% /I=xGiDm۹娋 ЮڥՅ{;%`:er3W[h_ӵnd~P;wLշL9&?gRfh^.K՝=8Hoơ_t&RDB:ɥN:ӵ">>R[-g6.*09yM)A*'OV/?[tr?^Lly==][~|jVONx&%A> r I,akW8vl kFhYnn56Kv̴ЍT_Y R2?-wIM_9ԵwJ8<YdFvX b{ ЋaR~ê.󤵾F[Z{gQڳG+։郣Zh ac\%'7S?xza,`M+qv Nt ;I3%zt)\qgCvP`,ṩc).z8"jL3#YBw0(e,NQ({mW⍛3ݝ7@BZ;'K_ >yh*3|wX^Y~?ԣ)79|`e}ɓ>y|M>ݣ iNOr:]sq<ل¯jJ=Rה{~mySLiI,d\te"s)S'E}TTU&AKKo~{:OWi~;Oe]z c(HegqC" ZUK' [LPߓvڱ/am bph:2ž_j?*R_ٟ[sRlemTx6KnTtjQA3*##Tig( TwGTZCt\.50c\4u>c \!&y=ș\}JIZ-Ҍ m3)v2Xܭ'˯nqhvGԋޛfY g4a$VϛKmj+&2YȁpʎDQB7T#j)Ȣ<ev†A;{+7 #MEL-[u>FNA&x'/}`@v]A~j˅@<2 %h?=~fgǩ?[xMJ 泽ud;YNֽud] xG_/t@U 2[/%8¾ y!ev&)`[f.y8D)W;{M_Ϋ_u8 o -h)'1]C~Ip&hU\.4a]wpeF7w;i77K`f@xrS%~۶ UnzEZ3r9g{y} ({~W~sr A[GDG6]WW:'3z:%-Ik-R۸)omڝ[| 9~K}XU g UW`*grM`8fKilm=s}>ws}>ws}>ws}>ws}>wOX