#!/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=2db80cd66917f062753bce485d4d587b # 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 a[%}Cz4a?тp$8ms"%皦Y,h0z@+=)Ƣ8 f`!C4&Q,%O $ F5*,dzG7#-'\a0,x@y-9RF@AB!6$8@rT$`(f<-GqʙhĂ2*,s<}@PZĊP`jʗzERфr3tydY=.>ɺۺv3mu1vXb80/4d >0vdÆ6nF} ~45=kp` .[7 A oOdKvckj\X}@+^ZWڀ`#vol4GCd\r}ú1{@weεo h Ye&i\M\XYu  ̮ 82 1u `0zƍq ^ lOwl7H8_8]] =cאַC6vL$g-H@fc"Y״ȵ:l{iy8@Ig̡,h m,I@Q8 [AU+W}tM"ca,,ZTV]@n7h[uɌ; WԆD׽V'SVhSYRqD3ðG`Q:ñ5'd?goN׶F_ժ5p@^Zt\PaJ1xC>s1ZX-Ҭ ժ:QUW+5} cmX3aeJ_tL9g*.:m&yoSN:=ҟe㿋n?S`sVrpۭ|i@@qFf*HC91OYjo(rzNzurY?֏M$fPd%emFIQOVqƫ`Ae1&s3=;8W+"s &I9LV\}k gi@ǣ(dz $Dr#H&7@y^X'F&<&y4PT*HGӼuA )=UWĎZ?~fA ֬.ǛawKI6 ȇZkٴ)fa{_ ĢQ֤6PG(G|p&kAƣ]E]*vk4)t ea<8gFC 4;'S$67>,.zh GSaSHԿqdǟyR%<4mߘ2лD)޿ZLȞF"UW Й~>٭_5S֌IG>=VI iBˏySu\Z c'{RqMJ5o-W.QprgiKtx$Uk3d ^ HFȫgxЁ>PSTh'8 ^;)j 5HTt(ƕ'q!>Bp[=oM>C@/Ҁ&}h.-H\ل⩗- +d@?0r)ER MHy2ȍJUN2BXr 5{IiS>o8( vE넕r@pYTuQ/q3}lN>mJ|v3Ldip eȢ'~Ex˾q.t?i;#`ci#!$huK@JtFR!ViS xu Yo CqE(© X".rY̼ps2iU8$ O:/n\:oO4Q RmJl,$tO6됉ƞ/S%.<@x-('cb^py' y bQS@t]{֧ijɒ(I=猺$+OLF^z^zP2&2-H[ሺ`#?S +RʨȨC ĀϰȨ=*J5^)\ru718L>c8Ie4&ofBi P3)=glސ |oٻ1zERȰ&|ځ{>Uɜ:xWR(n#%>Vvz\{ջ2 >& P"Pd${diAqF|?Pi\㾻QJ>v9f6K8z8anjlcsG""r &P aIeCSTt^ 5jf1xٗEk <5L3>)>@q1rY>/=x_:F^Sg근 q9*zgd20KpǶVVho{pWPO}ue{bje'5vi(<._w:-N_g] P:\#F,Al#D3bk"IRs ^|]^Z?:ު D +/tЍcO,F<}s4pm8GUW U2uhB+ |E:ˌ[%~k?qSutO^Kh:ɮZ0G5( eXosb+M~WVMg_ &@Kΰރc{@0t6,deV.TpLK \wTB*tC>@%yׄR~  !e[]EA.Nvc8?Wu;7dEP &:67$]4qӻc0t'ؓcxaһoOCwtyt6xAj'NE+x6DmHXveJP 43ʏ؇+䋏Iz&h:N4vJBA95otZR R bVClsL'jx&j532!l^uNMP%f; AlͰ7c:g۪ Lt4pR:8ChXdo,ҍ[?TWK<~u5-<I/{uqO 7H~ـyw<ã쏓Ȁ|\1/$ <#"۴_ԓTRTp/,vTѕ`E v9h\lJ <\X\BNKH~JA˿pMy6)In6rX~`srϼ_Op+Wܐ|.6O/hu1C$u$;8$6O(<IG봋k"q"*>gxXQfeULoq J4 #|r1?ѵGD,#C!.ZG~S!dG\/ B t\r:KPG̨ Q}߰<5hU6_eb;N' ]<XJ{soyVZv)/NiXmhV2 'Z5_( 3~pԽeUEKf<._js%Z}[q~FM7Œ>۟o 62B4kle.%gl.9f, %C,JJ7:gN]Rx CZ-ex)bj#j}9zm N"%ڕP ё{mxcyK=j=_حn:n⫥T5)5 9he`/1dYS/ F+crz&\LAvu[bY;A1-&I7}kjWQGzw?(\\K iϑ9;9858Pha[23?e[<`MX8+O;(M}+fLU.|C5Pn˭ mí +SVV!kA \v$)rLX/AA !); Xz1ngn#^nm;MRSᖒKq`] Ǩd 5_j  J;㏐WЄd7L-R*E'~'G)wC`ro&RP! @^m8Lj]1 uJi%)n+sIf9&IQbc,3YHmaK.һ]ClТVo")qEh1,8""y9㫦G^H]i}7FSiR&Sd,+H}%i5w.ܻ|zIo׽Ȍ qx[[^atmS_YYB$u1OC{IaGQsU8eB?$s . &~uyNqPkn-$}V;8ְb/T̞[Sda]RRyqKeH\ 4-n!Z9 _)༪a*$t0`4:CŊڣS09ZFsͨ !o}6n\Al &ό[TF~ʐӨ5:v&Q?Hue&SƣhE5r'!w9[[knW>|~$Go +]\ T#rW?TyWK+AEֱSߪ5j6!LKj@7RśwTXZ" r"n)Mkc0"2A1;j@hlHs }Z3 N TXR_4vک*ܣ_r.HrmoU!},T~ ݩ'nz~3%8hF">dFQt5$-Ѝ~Xݮ<:ռȺ Q} =X+r*ܩ7ojmH6F $Ny `n#6Qk%o(YDuFS߰O Eq'&"h;K/TGI a#Sqy[~{1/SJ~8xK /0%#D)ֹ:'=]wh@0Q  P5,#N"\b3o\u}h; b-B jH0vvm.='|S!O MW\Z$Np*%ӎM\ FqMSG&aLƦľ@NŶףqR&h\Rm+![Ve5N%?sp)7nezA BŊHZT?p}g A[)z>~1eq:v[.X{8d5{Ku8b ȍS\f&I5؎g;Y0(r Un.e;o!ӎa9V_tr|M{>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򿯭WWVdR4Bxd<@ 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}}u9kY]|Ϸ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__`Fxy8O7̵WRĚMC@79rJ=P˂zl]HuJo%ua<N6ICMsǎ/&a0@N!rKmT'J_44y_#6je}?9'CRňՂ z:A28PV-D=`XPt1C{/L{w)~h:|Q)$azErPʳ-g3b2.*BO\zԐsp-A[ j( 'u%Fk hqe"lN'Ԋ`5oj>sd?iAj%qf[3ml  >δCh^=a0TH0B !dY|O㿢a`eRs2ia3SSo]Kj2$z|Aۨ ~K{n f;eDC9;;{.Pn<tg':p;-Kc/M#pNSj<|_M_7xHkC1z1ܶ )x1~_@hQ/u f\;?~8 )_j-l ǂVn8?ō6z"b5V#^ҍaۊwkśUk L27Y3=v82bL̓qp":(x?CW~?BӅGm ]`7cYj\kKIMJi2_DGI<9e݅taoVF?ME kډ&}{F)59F_7ȫ‘du(F1挑Ek4S: w""Vm[DH{pF%yP= 48:<:hT78CAs+,N&L*od tƾ}@P[_WcGlө3N4BB/|[49ag0+3;jIm@,^T4bZR==d/v~L;eY֤xAHĠ0r\KLdIbH^ǒ3M]>&9Sq Gv#tV`ʒʰdzG72ô0 ;! ҫ^TZlvDL@[g$(i`RGעaT<% /0M-Oy6Rr,c)dQ%*$;c4b&X4]" D:TF.=fM!&!\rܣ_"SoѪ5 ;s0 fH }Vu |^n,$N_,Gycx5-z9 &vj))V'Evx4&dT vV)|^eA>}iMbcҞ*WHmW)g)ލ0%}aw08Xe˱pk8AEs45 qMXvqi[ljMh1dx Fo[)N΁ d b /_($}Z ղq;\vuƀ4.!;2hĖX:%KhdN$A#%%:"wpP1)G-zHpv^E/kI'꪿MO֥8g Lzb\Y3@1jcP' %(j%LZ>դS}ɫRO~߸G0d. @KسD*vV{w}f|*C*8ʶ~_4 VqL@oJVyEp쟷[!qo|9{)^8"ufK}4SK>95_u£IB=C),㱄"*B?vV>Y@dAEbsKFйNN\G`R3%LePջs*-'8[zatcP#䑭bw2ِ {za0n/")8 yw%ո ۙh}PCxF*[Pv#]`+jw@y0h9Unc>G+T똜;/ C `ZPcRWFmvlg3=%|Sp_8Q;V*>OY:S#`Io & $U0ԇP$ԇ[&VH8Vi!DFA,97c BOxFn#Ig$!h (`zֹ ]8.Q>gi})sx]{ͣfckgYjÿhH[~;Ee=-;ؐ=f!,!*ˡk{oKCkso }{ZUA(&&VOdAɨEOgmB{Շ3a E-"눷io`@u2mn#PMXNЎRvB5/MWG8l7u: b =ErON Ty5fLL}B "Bz(԰WSNAB`DEhTIFƹ!訡{U21/XNί;c17 -򴜳$Ⱍfm!(~:|ye( 7R?4. ;ě뤓r<1hN~&h2RN Ґ m/}L\׊>@%7ܨKGfΎ=5EM B7-(f!jٕq$qbwi'. 4,\}]]܈`$N q AЊ!7af-^Ё0{:oة5M$Ʃ:GdD<Ǥ*DFl)}&m>3Lj;jŰa:$X9Dž=bY֨ 6E&@K 􀹊n}879\YĝKᴬyqnaLP=IJ-?J.h*(e{/pZZ9yĖΗ>^`pAJf;VCᄒ>  8+@K{KPFE8)SiiS![q!Ov8BJ[G]hCl2ـ.MPOI'rSg&rgV'0#4ȘycnT#-JꧧMmެP)cݽd2F/geIvQnuYHoP=#OxnGuF0r@rgdvuX{ly=%z7cJoyl`vh1(&d&@|1tPe6+*cM`4\kElֲ9ᩨwhL?$os(κmH|q1TΗ U#m%P ч͹Mn`n tYҲ^̑~|Q.ILaBjM1ڴ;dK w<%3N d< ۤ3"haY`tM]d$7\P3f)R\ꆛ 2ڴRڷ l@\Y DLjo+"2}6_u(;CI]t2dJ)3ZNbtMqY㭠J)7Z TRE3p37JڀwtFډ Ɋ}>7|mڵő6`6L`*0 e(pw6'T4n9ps:|f-%24(AhX< l5_fΎ *{ov{s/W)JqT嫿\̑>q6T3E* ;J.}~49R2w~WN!K%-ZPD&:H5 ͬ܋{#|(8N+ 2`Ճ滗zEeϼ~qIE=lk%/C ěj1Pl23;`Vm5T(9+UɊ2_;K fMg}5N$}/Th Wy{2!K~ GVtsv]$3ʊ Lr:(x*Wݫ2+ }xE]w}@ &p{f}$Xa%T9ǔBnf) 02#(w+UtaJD ҋO|v9 )a xIqrR#W J\s]LΩ aqưYro@I/CVuf62)H^-7Hr%igCpW6# 0㥞oltMV9Jm\^$xu[|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 ړ->4/áalgH\7zZooU6aFRY_{k }w1F7Օtյ?p㿫=ԪZo2ș9T0b EYtTXz9$ D.¨/K'N#;cuٳQ\lェ /I}+ڼm&w6+6lE7ڦ;}1bL) tn[k6l} KZTn嫿?>ܪmn{iwG?w2?Ix"lc Өv7}}S_*.V]HNPxmzat-V.\**-U37QJɨL4le?_Y.#۸__[OOoil8nn{/1/"|nFy[._z}|'S8j nR%]䦪Prҿ}K m(ÙOkw7T~D^uF ӏD\iq}HX *~Mk@Z7oUQl2:ٱ#̗~}qT_I>l"9?B3gk|2mhOA^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\7ܑ[ }FR8xMJ>X/1כFA^ԅ ^%{^8^/"{1{Jބ ˂["J`W753pp/ԓUK{& ޫn {-{q3|(r9 0) s&fi_sBRÖ9 F>0wQzf )9(H_SO=ηůM1]ۧ%s9/o}Nl^QQj{SOW /-=߿erh<_I O(?w'R*# e~r[8P:2/xoREj_Ru†9& *굅 0ؾ`?v?~&JcWo<)8@G\xFr 8<btxӥr9]'\>KT??($npb{XcAU@ώƯ\faTJSڞ)cgoAHxECcKh} LGc)0>j?秶\4]#G,`J+֋`jw8 ܘѭ`";!NH;!JHD=U~aRT~7"mo3i8 4h-aSG&\kʧ\67U~9~,#ݾ}/vhK̕ QzM&U-Xoaʥy&帋.S=P( n' si 3LßzMnLϖ_MHk.fM.l/{/-//|N=hHئպ#W焜-O'{yڢ^(LxDnOZ?ws}>ws}>ws}>ws}>ws}>PLX