#!/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=43ae89c2565f70711c6941f9e2fa8b03 # 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 uqC*?l[5;;:9|wlt߱k-b'VW-cojGɫӣNFGGgGhɞ\o\9oIof},dp!/'׋ WwY[e-uA}Vaa L}FE4rFqDy52'phy:qz2'z`0Z F?\ǀdܛs"VQ!p^ vE;a$bK'"<- *yaܣو0d=Z+ ,Owl8[am]=ҸonC6td$3exdA-h`r<d3|Q5J&j4*,\΃EP$Je߸]LJaUX6BH)1 B]lqL1y`lHu+xrr f"E*^9a0nek86৕35m%rX`H~k[6H \ŀ"db9J0?VZ٠_M jrsgC(+%u.Kl * 0GO"bSIF0~y|׮_gqsy'_6zʥ\>~rtGx;Tr粀J_v9kwEώ-+Ki:[\n,I995]l?:xɬQf<n<ǣ3V!zv;*{kWx3yP>xYf/ReFzT/y91Ѭĺ\_c0QGV?p8{*R)C9~\*R.~(Ak˜|n $']SlgVi5yXc"ֳX,N̫{Qjg%XN뒠b?fc`{Xm^Uo,c8؃'U&TM-g|"gc)(,uǮY,\ZD(.B$Xw-i;dIDLǝLhP}\DK(EK^ూ& ˧6^-RrS+_ >ySbqAyV.^u,GOAe@k+w?˖"Y@F G)xQ ~&6OL=K`ȷsJ;4o\Z9ڏ71&A)RpK;ȂJ&=+-|;XI3w;u h,G45ASf|=%,оsE8@- ʊt|VaQ sݭw@BK4N P~ pkAΓ]YE+"vkt)ꔺAӐ,{.g(>=(uA0E6`q ūIgx[g?B•J% zL,0pvטju,/cKnZd5 f״ZC՘{_+骡U2tܼJAv{ BI|~gCxT!em -D c#kRqE(t$prgqItXz*fqSd 6IHG֢evЁ>PaS\$O8GH `X(A3$ĥAb8EM01Tp<Ub|MaN|%ȘoV#9+pWzKeT &cQHɳJBqbΣ$+5nsen4.W*-a4TK$ňCߎ9?`2[cV4{ӄyo>UONYڿ!k}|pY/ڥ]Ԩ?ѴFm5dnŝ6xnhF91Ĵ+C!YA®[B #J9pR+ |,fNAv9;iU8,$ݫ]ߪ0D,W^ΫD<D|zZNUmDtDFH 5K4Wƅ6bw/{o"A[\|Ȱ1#XéOL j玽4EJF*%rbue.ZY`9;aFO9P$p)bN>88;x 4G;sV_ N\&s}9}z ڝbGorof=›w'6\M&YU7{av5{le˥0ɻ +*UE܋V**e=;bƧ!;tw!\8^:-:̈́NLݽ` !^Fu裥JK qB'ۄ-sbh+ͺ:,㬄^:>iB3{҄V6A҄v6"6yv⫦[zN{G'm~BL[-97i= Zsh0ۜ 1¿|k*wzLXz/v4{=1CI!hl](:hK<Ս]*> SW詺!.[:5W~l()dKQDS/^:C˓CDG]kϥK}+Ƿ;7 V*j01=IKwYS=T※7i[`hO;?=,EÂN.| ?YG¡*lNj?pz zF':6<ßY)Ƿɲ!ci_SFj=>tbؽfǤ=9p`%W_ZQՍ6kJ83N?ёWjIi 8559-1 MhuZSgZe}Xlk`J̴4T2ao[O;ۦLpl,%Wh)N D؝ڰqg%^ ,%t^,\IʗZV*G`Rq/0 oUGK$P5*b=o2RH`uXXү9r{Jn&tjճo'v/;5POvײ]i!t~sI =q .a$.6(_2 Z%t% D SduU$ ,`sg_t:ГBNp+{Kd_ʭN~">!FZhK YA]䰘/X=zU:u[rGҞޓ:/3Ia"#޶[ḷAE!&{KE}K &lJ=T3'`Sfĝ6/6kωg"Z-j]+p? pdp1\l ?;y]|$L?٘5T6|ds'ReZAX΂drSH4*Y7.sBv[]-f/"lR4Ng-$jkU)f+O%LF `ON!Ӥӽ0,1U hpLW'JzHO7lc]fuu`a< NEԼTNEdم% ~ݪ;nD7|^l2 GNo{ﺟƑ~WQV268+,a@v- 4oc{`_ĺ}%9UuUw5BF5h\O=3_U[RK3x}cu ZuCuWܘ}WXʰo2d_5KH6RHEJX%>w~>~L=ti8lyְZn;G=,Aa{tERF,fDÖt:m-**Z%E Oߒw}SZq F8i9(,nOֽ}3GjC__8p"E&36."7;ILO2*3Q $j'݊Գtϖook0ޮuׯ֏MLeU޷Q̞n8;#B:pY~y+:`c#D VRҁ,\֙bcBXA>{# aYڎ 2?e,mRo'\HFke ᝴MJZ'W*b=#(!H{̗zyWVn )5 9ke`/ssӧA8U+ݝc z"\LCv;SbY;A1-&I70| kjWU-;.#~BsdcF3fMBݳf&rk k6geYz%oOڬ)Vo(&vʭsU/!Аs="d-ˮ$tSN+ſ~PBGq cN{H-?۠] dTUjR|):N P\ȰBtF:4}鱼9Dýgj6qi ZNXܿ?Q:dceWG{Ns٩3~~MHF|*"Z}}`$&I;)phDĝdܛ8TPWdCwE8F6]2d/o9c"e6Zcu"{5$iZ4I[;4+q 虏R1,8" y㫦܉rG^H]i}7FSiRB)2s$9][;~&÷\Ndf?̯s/ |{{s{?sg$\{woGO߯<{-LCiAwUe|?ĝs`bm܁[yq}=/wloes_sGjO[3Tl0C/vh+6G?`i2FnE-ټ'h jޢZN6;GoHqQq j XRN4xԱخ7TC2-Yԝ+eՖ+RQGi 8ġzC &|L) 3X*N\Ը rtjџ1:-RRY~u~_-k~)"E+VrP|'p|x|w@wŖ G4r8'S0Xc؏qGOQE%5AXj]9/pTnjvI[b0hcy,z64NL:ڎǝiJGzd U 0"f2 J\t7BB)x fSfS~g+h.ۇL`‚zv>˔f/&|ҊwA")L&E 㲺iZ8fHa99Ƭ (+뛓a1 폨u0eJ7ncK ڔ9& 45BR6JltN3[.b!6؝z>|W;TVN}xO~mXU܂zY8i#XnXZ#*jy?΢Ӽy]pkyv*+-rxx[k՝+ pO(;sX<*LaBt e;F`rXgc8ED&Jh TtFS޲F5cr?mi4ٖ[/sC!|_¤RWuROB՞2l8* mfS~oȯ' ~ҫq~[q~9lo|{3B(N=WbZ0`A , T+ j nm4^0ACU ZΞF0ya ~w̨F3%˙H!AX!PEU^fL={e5ast&Xd3GMyXC[XH B_wӣWyq"DQOJGD[aŒXÓ<U&}@/s.e H˖rӸ.@nlhOLRFUK;Yը|ϵZh.܊zc˵޲yy96\U^2RpNdjEB-U%!J_a~!oaBl㳲ZDQU??շKsѼC8_oh|`@-ue]I$Jj%Qt1y"'^N.*}l 3א zyYOc(V}={aBDGQiXOԗU [ *kCǟYbIvohK MP9 J!V7 w kٶHf5Pt3D1& S_djzJw>ܒ醵bFc] fg-G4Ͻt.>q_sM(  p̜a\N#ц^Y5'yC^=a3|@NɒKiIuoCݕHfڹҳ '!,#Տ(%i26%U3\< %> I1gjdD֭l[J'$#73 ;ηKyDˊqO a;cCXoW[W|7&EӢy&W10$ V_%J{S¥$|kNʡu-98/DW YArG(= `=1aI7źbI)R\rzLНX)_KV sHtQ$r8,O3}@ȱavu6s$^3BÙY:= ^ >zJ?v)=#:XղJ]orN^ +[)svVdaIdnjz*ӫ.cD_6p34-T\,̷k4A+{VӋ9Cjwۨ7i6$/b3̨u&T>L.ǘC<{ו[`9nl+g4їS47i~Ʉ,E2FpoԒ| ;[N{lM}vzв Mx%U\FW`4cΖ40 O㩱Ey? YFS̖c!DHYl-}"6w0B<u<Ϝ)Yǹ-&Dc(ڏ&sW!1 'PO4W3X\b0 S[̕%TCuÓY<=sIg1vsmk%ivČh'gnoZ2 *u$e=q|/2=\a \\p9Sw~n6 Gaf[츙0MO+%xkȦ6Z_ۈ߂ؙWOe!B 7I"|byz vՆ;j\Jbeܻݼ ,>^a]~O 2tq.Ҩ+y)u;O BaWz1MɵlZGW%Mp/tvzic0cߴJ"?9m-]8Xr1FR-V,پdwW݈1eʕ3.>IO2}EyΛ~dJ<,q65%ɇu/8IȠ6kTC~0땽iV+)5v_(y}0FaӀhNG3 >߮fhNH7-&.ŬsmTNl@ϰi&Wi8Wiw1NOδV MruYZ\4\ 6" e `}%F#Y6vds3T/`IR@'½B,Xd02k9'x 0~!UEN{쿏Rlٱc>d2yD 2<3 k =HE2-Yb >uO7> ˡ$E9}hNQh "$S8>YˎVJU:3df3(0X9Yk| - ԋ8UZx(#ѳ:")CrwDn*)b{lx%Vs{<&׵VGg99*O>8UR.GD@8(0k m՞hqр?`8 ˅ݥ,< `D_A')v{w @-јj{*DyP``Lwԋ62 mq]+ Y{ M8$^ Ӓ%l$z|q^#=%<`fF5b.6,WMOIb%mt_lTN/|Xu&'L15GGzda\ZirnRD6nnTr)ɼi㖦yX| CA*e ]<ǃbI;HQG|)r:&a7 /fs):ڝM6ysj.0m)?9vMKITxm{=ʋ^[+g#+PK㣢<'IF&5z;j?A'*/s. Q)RtDU!圮{!O}@}L> L^I)n؅utO p ?j֑_k0f}N`n t Ēyl͆.,,XǐG441AA֦:'!3TC 9~FjH7N兖oؖ aXb_RC&:cC؞hm6І C-xN ߅Klhx8A>DjĿ 6c'u,!/~Z+:+Ҝf%2UdEE;'EbpFbGX_NQtx[3{\ 4_31-7EO*z9(f={C)5Y$);ľt!ZOWT$Khzf/7 >(17m0x .b1$c/$k >qz nu0}ZuVM J8!nQC@Wb P42s IH8^ZA3Cfhx| .[:Vj-*]ݞDb 'tKme*G]1<9'.+ `k]|[+ܥU+ lH, QhnU^N1@LyD1K|Z j;q9^I]iB*6zq!k*._ęXI8l 6z* SSþx=@A?b[+FKtqi'|DVQ-#Y#d+/}f1qKV/PlG8Xg@+S@nIG:1AHe{%R}0$Kt]RиPL>q y&ӝ8Bc{h vޥHG(*9it$mL{_mme tI?_ᓃ\`^[^*{?^Y[_?ݸ*;ˤkr5}MF^n }{2`|A:dB7_ m_6UZKQPQ"5SVX ۟,JD"z.RzDB3Lk)[l=J` o |`¦+CmG ɵtKI)+Sw^F |iPs>ԭa؊SgǣVR^-.cgަ3r+PeЧCj֋fw" ]ZFLLqjD]$ /8\ZhLǡC'%)Œeƪj O90$x^sU=Ȥ; ,J@p1}MGw5Y ~Y2X`9v$aJݺX_Bx×RiڂC/vO:X\9)=VH߼QpUғgu@U;ELT ȸsUV] B3j\O{kamb34WKWmhttSl:icB4Ÿ}:!Buh v."_P},CbubG!Dcpqz|g9 `!ޅ, zcbM}|?p&W֍ Cx-IQ?Aׯ`0<}÷'g*p#+%{3R̚φmf,)q;).;Hwd:H7NZ]uv짒/'24H00ڑ(Uc}0FJChJY|IXuĔn1V7A&XUy BF4N2Z ǃq v׺a $e⬘*xTŌ9̠8{Hy*1헛egTXe.2OC]Ss1, Syfm2^-sn;h5(8Q-Cũ!fJ8k'քDɭqi|2o=yo/Lh.;m]__]W_?5/s.J~8<)L#y7&9 NENMQ>QN3)0NI8} bT/;ǯŌoz@Q]l'7Z%;'umLHe:[0^ if JRnuHŖ0 c4r?U*Ic.Iml,jn /m #/.C柢YP_೬$g@,: %Ǘ*俛iv{I$qLDrR\b@gߍsMJ낊w]xb*P/< z}vGtMi΃.3_3:P]eP>TX|3E8jXZcBu60W,tff28&/)0 E{z~X̛@:jI,o= .ľ跽}3?f:쵤wipd#Y9R?LJ&;ŠuZ6mЩo ^:g,6}aa4f⢨O-׊~*tȏ=͛ !o`2Nqk-X*«cMf"Yo,,N~1d=y)wc``Ѳl a> IclBG~L_CL^j 'C3#=[4;BdiAK(׏0יZ<ɵ͗ZBgrp$S<vb V`f.ff2dk0>{P_8&?!t~Ud&"4fά-/,4ٔX'x&kgN$?QÃfC#C⟨nHz cR%p"0w=3 A+̑2&[5t@k+u0iR ۋsI<)S|mI,%GWzRòhKלl7 FW$6|J757G 3)"yo347C`2$cUA$Ns'@X=m5?D,\\0> z{ X>L-<+_FL&}Ku=cK .#AXhqzG{&\9wӛΌk9 F&{Hw[|G)|?\1rpRˤ> wv p$8Ld4aClij i.ϜuvxցeL IVPT~ 04{ۣ4wz+.boچX?.ίcQgHA1d rWc4[c쯥o\r=B9E꓍E}m|:"]kklxzlY- !9)|;}.p+`L2{[Y]/ӦMyӰy6;ܱIX] SrZ 8GW tz`YW[|B27y?>'CRׁ 1zudpZ=xco(8U,’FӄmYL1 k(U 8[82&*DxyPxIADaY? 2`&҂ KQyqui7ZC+KavZs+ռ99$I/dHUU'<2iޱ5\O;8=Rt CYg(}!, ;W64@,O;cT ;ג1ɞ,_||lTQ8ϥRsՂ\2}to-G~CI^'1&ܓt N[ j}s5fofz21O蠣s"K/<2'DPNϩڥ vo?쟥Ml7irPsV9M'> 0О. *TaMtt('ѨkyU8N8Aܜ!`|&UJ1NDRުVZüQ C/4D5[G-7jZJu`34toRMF@o*nb}56z$F?Uqb1Hx'ESƨhuxӞ{u+BR-RA'727}VRp$wXJ%DSC;NHZP,k A ^bP@F%&2ġFcəΦ.w{*\8 hB*XP}~xx l:1vh";b8vyq7dr͟Ox.PQjvfg6Rq3sA8Ů}3S͢8myn0#|mAe *s:GQ 2 ϗN'3Lˀg~q` q ֕7XW1UT=Tg_a@"yIu0 =~O 561oʹ~8vLuL@3B=/L:0wFzMS䒗AoҦm~S|:}L2m /XG,1򃝿`ʒʰ#6-a;/ҫ~LaZlɈBtƓ"jXTT?<Oi`b4 :?ɇl^b>y,# 91`),N>fS#?'PÈGbH '9PD Uyεvf4+}Vu ^n,ģP,Ǧyc<^3uS0UkYf+%-ߴlX;u^{ЙNٻ:1UzWm"LJˍ[Q51SA ړLZ!դS}ʫROqG0t.M@#Q`i,b]vZ}bDh8doޙRjˀiHE/ k3 `'=᬴~Uќ7!],a!6y'{7xlPӜ+ܽ6X:Rtӭ7_Pث︹ >ȗd::tr쮍=%r>wD$D#']EZ+40S v> , {AMǢ£G|.b1a0G^MmC|,D238ld(0JGACzv&1.ЋY8RFH qcQ_1w꣋[ ' RN&Xà. ѐehM"H@eJ{prCnD9ԙ-'--:h̆$l]sPj['<$)Eg9kJEÒ|\ !IJ|?vV>YKCB\&/A=9~p-9KHP3|ɣ|$VDV$Gi0A{gKb1 .Brj4NV1;~lȆ=Am0rrVFEψ;j^F5Ë>aX#f(10UFk1 M|B}Ն?/QG 6:CK(txLVQDAhe'nx6%>)^O8f/E?iS8ԈX4䶰[$\UjsUxzz ~i`3K :e |SЇ>G'p@b&R@nqYDL;zk+,I ]l,YV\8|,-)ڭvsgY=jýhH[ڽa7NDe=-[X pE2X}T8E<^O ;ko{]&hbuj7tń,"D)mCh6,EdVмCG&n' *unv M 'R'vB4/MWG8l7u:<A\1\{w? -JO/V l.`T~ i&>w>ysjث) /!0@"G~3? t0$xUZׄtI1 zژsK-l'Xlgj+YŤa?cF^srJ,MT)~,cvcu~9g'?4hq)h7rHan!L\תN>@%5ܨKLjL+AOMQȉm72i!1gD&J8Hp$Oƅi|Xv@ ݻ.J`"x^!ask69篛2T QSuȨyIUz?D49+9VK|gC*Q4]~CtI=#mw,gY*V䛤"",7WC*iwߠfm. bӲiL>ƅ BLC+ \oiŽ4R{ ߩ%QGlq|ƒwF% jW;0!Ʒ ݍ ^ ǘMYA:b w]F^"0:,yNѝ*dNOGp d dW %u ݅64. ę4|>3:A!5vޠoSV?=0A3{B1R6Nth'=%7.>~s}N/ݦY]d/4^Q̳3}n-;_t4Q-uWTf7]-P[ d0}*-_cB&TEӳse]e;]+B9 WUCcr`4$}+@u̅pď< |0V}؜4W7v+p{V@E &Z`3&gI^Fr6}f3ǺLr5gR,t-e+T <6IDjUQق}IgD⸳kH]d$7lP3f)R\ꆛ 2ZBe1dn3]/(6U3;>`A851mNQJ]Mg>pn/ R=T-ľݬC<n LRFr6T:|I翰_II|abtbs I^4TVHgqeeNH2$2)~,zSb7O|܋]A1iM#m(`6Lh/WW e=xg)pwTp9x@y^9OS6WLCKkϠE4E,Yvi6/3jgKZ]ݽ8+ Bk%iḪ_J ʈ>q6U3E|MȞ"%?)_OG]P2]/^HdқƫfehfA8#C8uZ߽+ [O}L>ÀȚN?6?Gm^beCOW63}axS"7M&|fr䞳rKR() kg O!>l&щQǝi}3,gӣ1S($epNErVViHn9+EWBj"˕Wj~*zq ϶E 1o52mSTPwVR(JTy"u-}Y-C~ΤP;;.,G0*?:<ұ,=H3B7QŨKqc 5|W~1;z0+{:^*Tl+U$;)GSAh>V/pl˔,AXѭ׃ Hg4*:*W + } yG*L2M *.GH8Kr)̚S|)`0e,QF[ܫF=WCNDd9 &)/zH>_[OV_7_=oZF$APQKSyA]/c?F,ʰxsaU1X4 [O3Z"yġxX,eG9KN6AJaaaɆS& s%*,,L6Q7 :b EKR9憺NLF \F\ʠR 1i6RaH knQ58J#8) ։avLprқ3S:Dd]^a7PsoG!:kN0`zi6&q݆:M<4É{Q>Bw>̕w% -Met[fɌ=vWC4f')ݘkC4R8LeZLU:MqpJft lZf¿zӻ&!zqZɛ/p_Æqr3K.T0^i[ʒFTsw*~hx OSbM˟[y.n^ gQm~ ;+ܹ Ӄ_qKq{m{k|?G/~ ӕ__[__MQ [y1 qi];T;ke)olK+EvvZuC\ڸ>W>_[Օtu or3wUiZ^* oiz5*+9+V#E #%"EYt\y ?4Rw"Ioy)Tƥi-刄/gpwKa@_OGE(핖8[[|=@T2u.|nQwQj [Ӛ S&b$;ՠrƾ$@u' iL}>x&[׿|'WuXJ:g7K[d'`hi֡m;_87G/AJzQ.9)h|[%ǒ&Uvگ`~n7[_<FR^FUF\~C[zޖ/vw[Kj_`[.g k(8~ma|I{\ސTQd093bU}\ X:WHNyۏ_Y -"m܁߀GW>_[ki ?<~٪mm-zqg̼|2D,oll,f=d˯|ayf $j]"KMUסTK X/](sh[Y_sX]~k{u ˶ĚVXة754Q.ꘘ&q렱lvwxjz )ʏ-W;W}bޟ#>_t˴q^*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|:+9G׿Gv?gIZ__S AxTJSL[%?YغP. ۡ:%aY ,#!ޝ9Uʡ aね A[ dp))ͦ"ܯzRUB.SUQr7گEdbٖW]#QE3gM+٦%x &2Wf*e>di .V-,l(.KP}i gϖV_Yh\u=- Y3Qo[4AHٞԇud|CB6$J-lϪ~mcfkb~BY p.қYRӓ5ˏqm|Ma7; >чY36+:IKҫޕ"+M}W="kR77lmZtƴ IBCI 6B 8^tȐsTQ 8JY^,YNqQ2L'E{Tt%iAxm HY8I8rm%$`P–g@).C$ی9pѦ[wzJU1|c(S h)w(@x(}j? 'KNb2LAʽ$V*OT!X;ah,]H=B@@Ԓ ;LxU5a¿OqSfi0F3ŴT$@[MU.E 4 1`:IyL5"UKׄ݋NV }}WSJ7u)c|VկFQLaxw)kf>>7;}IRaXH@j g5ǤpQ5̨6*FΛYok-k֫6tpΐq '~LQ^{[[4lemYЉHE.'iTQ|Wu nt1[huKX\Hs:Qx֜VEPa2=xKj׫!=ظ7ol8AW8a<B UtH\U{#`֋ftd:Lm5N_LX'ޢ7j]SE=%mWMQn"ρC 2k +!\h3Rv=~; lmyU7>Ɔu20II4H5۫૧3P6Tbzw'}ȠWSX%s*9+':heK3jl$NJ7DkMDfbݍ&ofVuGgתFvmфofߦ>?y5xk4 c_Q>_|_x9aD}"U^N'b9a`Lݲ|nF I J IXofTtqF5E$u<ǕwIih8nTt Xo\LkAnOS`C~F(7CD+Cؾp%i؍Ɓ$j_.zKXqd-T~qꆺjd)}"bb:u<0gdkpHcP3CO s^|l@:>c5Pg>.0+/2"vFxF$YЁ&xlr'b>-t("D~KMӟH0L Jٴ3CfDǑbv\#= Wh{,\1F'/,,N}1&\m:+UNv9]}Oył{bE[}hhC3rZ17C,_,VXߴ2}'v1ɝʙ(3i&,%M _ HPL2n*ew~7DNba(-'%>TXgIͨ">+ec~El7?_ )aÊUAvb']n[)ehZǵD߫]]+ ϱl@bv< \IMwel͸rB < *<@ʿM3 }Ua$mLْGxlcAЏ#;t~H0z(;f_hO?_Q hHK'hZ0?X\2ܖ[uU:(j9" )Qйf7ɌmX7Q4Q1GޘAU`h֭Px#Yz# ȉ}AY*D{0ߊ[ 7hdqh;0ax {h) F>"b .?y3KɤAG}ᴵQ/KÏ;BM3=}&KAI0R{mD05p᾵N5NI쟎`Yv΄v(Ac0L}$R6.a[?F/r7GЎEVx&88aq.( KjA  j)7c-z_H;kJuAm /ϜC􍦋‡Ki|v;[6wX'f#q=6um6-u%23 S' T#o.=V΃sF%_Zӏ$6- RmvDo+bVnu(,eØp3.A 2$(&zx:Y- z}G o%ʄ@7:*0i A't_fОNXW0B-FI]4 ,-ELqPp-#!wH| yrCa?}PP3g*8bbAvk=*WxOml6^ra`7_蒯'hJM] \dD71t- c'4Uϋc<rLi9]u=:CK%ox$Jdl9JS(3=8~Q}hfU%PH@UER0rC6 Y/#.&ed ݎC`-N-\OVNv4$B0'c 0!_֙T MciH {-.gԢWjqSp;%3> Qm\hm ?߆ӯh%6M5g?}$iF ];$ā8}bqN.175\d 5OI^}+S3K_ARV5ZrF$|V+*|TK5|T?כˤ rKNٷ+EFUJVۜ%w1->S/Һ;h)|-=q[Zg˶jE[Zw[ܲn/a/ b ypgkƑ}Loz|ܟ;gʓ4'_JܺI'=-FB>?{}oZeDմ:2Վ*ظZO,f$\ǡHTM^b)8ɍ24NZgu֛蓢 qgH,Mz#_GgKqul66v`=gw O-sЖѿ")zMLF#-XFp ,OO͈OeRI?:Y0Q|miGS75>E~pmRq%JU8.g8.#q6"X<5w~gTzOb#e.cIcV~~2up4 1 m4QZVԻs9DՌe)# [PrqKs G@FOU y"@pVR`wIY6A^pEpKȼi/n3;q`.͌$VMa,ßsW s(6A];n98jW}|R"ᖪjGBAI_ ֥Xfzmѕx@PokQmc}Z_^^/r%Gqzj⍄ŲYԻn6fI~KRchq(S`_.Bx9)^KouJfut) 9g>1dxMz'ڹ;e&V)W!2CɒTCdxFjEk"nK9t:՝tm7dE:~X}6R][.=W{3&φm|LP6es>]X^m|$XX WV.vgk'NgCaRV `;rJJ3; {$+?(|Q-y,۽3B7Rdtw^[&$x.R#阂`E gFe E7kf;xaOL^3nM0ׅ}ɓHB]jy<ٛ,l|rg= ;A}>|zÓɓoUֺk'᳕ltVuVOOݵSx 'O׿&irvV>y 6׃hRhDUY '1Ix0d=.>GD: 8{f_~52%a5oa?@ _ԲOLYRI;I{:W@}n=[Xduy''O:'ӵӓnJ\Q[0o%T?7\-  A=7AKpoW-50Aݓg+e6WW;N)2#ȯfm zCDo_qx$*Ɍ성rŶzaQ\yaF࿇ ig}5< _ke8Okk/=YtNOד("0cFAr&,~2X,J8b dmҌ3{xa%_Y]2 ?sxnkx M9=۞q e8>;28D#KSr@4ʎ-A&'6V+ByrMrbOT+Ы6ӕ{,o`'^׌Gzdy>r6?}$7R'dOߺDWϿPwX*{MᯧO3V}7(c 9/|SFeTy [:>?/TdQw<-;=Tq2;r$=_/ШBu4=RדFd=RzlΞۤ@-G9casǗCܔ9xMڣnQ³i{mfJܣnɤQwHC{&G.yMߣn*G!BP aYZ-v{c:./ BR=)Is|X(5`;Vz_ԖMziߥᏯ)'^hί.bOK!X(8n;GʼlU)ɋ>*n*|C(^_KKo29t$Ow{*w'8E9,n_X[KcMu^8&˯{NC;KX[184}=hb.u9/X<[sR|ey^QR]IQqx՛EɑFKUh * .(CgXN8]zPH ת;";'Gb碉E*~K1Ɔ$^B{x9=(\)|JI͵ZdT5ǵNx;QboDP-#G#fY6LLyb-6啊 O02Yȱ(gU"MQ 5(dQi9Hs ]2%t/hF0 A0ad\UȮ 5V! /ME-:F lNͭG !!Ap1墧"2 +ȃ`8=;N{.0Qid]_{Y^ֽue{Y%":m"Ĵ*P-oc]r-hiiBY@{ d/S.y8ظ=?֖Z\^Tjqr+vKO@cO_? w3L5Dz4'( )Xg^!{f¼Bn![if4WYȕ)n+o ǐb*po\ţep HئՆWbFNEIKRa6|#gt_;!ǽ|y?rj;"Bvd6İ~ U#ī0cճ KR40RHYlz)s?s?s?}LA