#!/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=369913669e90d8c937c5668bdb67939f # 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 ݓWt{t {x~Hgn7Óp>// Z?]Z6v{wSxnD>ӖKF y{7 I`A@>$!KMqj?Ew,hU:̍9[x):~wn p@\FyQ8($8l3"-2X`&uVDΣ{2!$QxA–{e`Ro+ &,H$#7@C L* yS7S#ܔǁLrɓ S"(28F䡻Hٖ9#HH8ٜ!CmhZE)gBX`> (,['G4 ie,Ys h|1W( -I+ž2,fM.ך3=5'7PЩd4.lv5 ubxc4gĴ˟4 [eɌtƶ[f_v` 8FƵa=] ^scdoi lhl14Mgtb `p(Y~mf]iQW@3y=Md*;ׁN|d0< @ q 1uӜMmc2n_tN I̓12L6O̷eAzW:(Y@r3 W6/Gƥ>?A< Ko  Lf. uQ6LHC i6$<-f3vċu!rٴ&3s; ~\7iLm+kcMclf_Pl0AN1i}\q2>s4[Mܨ}f wє5󙚧 R37xk*/EES;oR]oTQ~0;yjWO5;~߫?ek_^S]z{WVn=mNNw?3Vϗx 7{a )<>chH5 .$mڰ(7{cAb:y^%GzRG!̙iSѬkc]q/#ym K$ }\do[AK<nV -ҽMQ[n sk$gk&Xh \"j$.K?6<($q#띮=\ 2PgQ#;|8vd@ӎdڍ L]|4nayaIoTsNjNpHYV[}b4ٍR{80HwtlQ%~-ބH""3Oy,RCzݡ4`S{g `̓$,}` C%M l{2L)U}_ueSe7UY,r~ P 'uVX6;kHNZ+Hg46 ~ ET+ec|1ɩuz֨6~M$ʞ`c rZ(+P̫WzLw"Sϙϱ-5^P~p+0H޸ls6o"0 S㫴Ÿe~ʛLΘB,;7sS<m }\$.S8/k*M#<`& |Pq$rRPАZtgg ߿ó@hP0>kb >^4q;xSJt#"̫!:c^L/hDvu~I,6$.v(A#=fMҦLg/) ʳ#l-vp =DOGZa & ù`'ͳ8Y#SCx|>=>=k4{.;p>Xj!GWҢ`;D+K6 ~Zv m6ʲnL'- t Y `bmZF^A&~%i6&@ 4񝂹yuhVz.` _LC]"^2rvۚ8Ι=Ydƀ.10gYy+fN !x?g}2lu{r':ٞ2CH^iaGej`' 4?i@?p~|7~}?{{GKt{=΅aZstwʱfH.J5˛88-#NO)ՙ;L$xݨ2xb;xg}Dh0ԏ>yL 㔫cb}h#JŽ=YC֯~o<޻K,JېI|xd~ijުn'5 r0lenom>xtiT/ Z R dnGtlsLDzLuN;Ť]͚lh w/AR 8NFH/XsW!"w!ѧxaeZ<*fkTA.fGZVsQa q[sÒp6YeGX%0p}q]2,+.A B,-^$ymXJYU rhe[kJ@e-h\)[:Yu!IbAkH:eAξI慔ψ6W@A~R:87a Lj²)*ҙFcfMBFY.L.:WUS\}l.P!} N@Bs.j?Xub C|v^xK_öEk:,Z?>:m\f|AMe$]k`z&gA(/SE! lʢ&s}-wlOR ,Őćz±ĮH`-2oH_U}F!i\r]Hy:ncw}ޅ&^ji&Q43sis7]oIJEZ0REdEouuK]JW-NJғJ l據H0XZ6oKuشhZ!+ pl:!+R]{+Rl nd[xX*O`ȓ#Q W@'Ў)"Sזϔ3ZjeE7^.K"01KRv kN8}Cf` ɬbZWZā5s@ٵ9FrC qr[0K{N#ge>-^^)SL$~BX>Ir~AB' LAt!x .9_Ȣ l@7JA "tKAdAV R3~db!DDdd^KzPqM%m!o_ǟ+p٘fl8eꔮw^"Ʌ"pqf}E]^5 /@{LmcVXLjѻiys,q&ID]Ԥ=g1m@va`^ /^];}:Va_2Qp K@ pA>^zʖq% Ϲ.HKXlsG:ϖcyزKø6l]!$J=dWWU]*k+]i#)hKyB"6JE`4@.Q2w;jݠRV9&NJAHjzcd@L6^'~$'q\>< %e_Xp~A=?+ULFͶ8D-D `x|,!Hdu-] ۈɣtg$(٤@KWXZpc%H]v |/<9lds$ۤZp;j7n8jch,Tts*$Vv%/B8 qֽ_v} Q=p:2/H*[U* IaᇻĀo{xb˯}d.9lA [ (OW4,a@^d c {7_"Do7K7u!ЍsӸFيJ\JysV6Ix)[qԩ65m@Vۍ=-fb5^(|nEPQ.´E.WzwLcp}|M֭-݆A2EFԛ ,Ui$VG UQBR]j ;[ۦ~Vm߆wF֒2#3gCymXX{d쵣ʫbļ GwjG@(]i@_v-]!k!q3iNSwƵ6`=S =dR½'YJr0zF8S\?*kחg\Wd,8wUA3{,E  .dR`S "=1iL!NO \_1PeaaMU?SQ71ˮbJ[Di]Hީ`ByN# []uZzHЀZ5:j>w?6QAܿD?( R*҃l¼.AưbS}ad+Vwl)ԧH"ּ`,u`QBߩGc,pߤ ,7,ʷ!Yw[G!o8{H)' -7Mo/dS$ˢk%dG L^("ܙq@H2(8xD;ʑ!!QU,QIL|Q'"gC[l^wy}y0 םt+K9?RoN(\881 |7FpWW􏉿KO;6oL*(j0>%R8Bg 8B6 C/.OЃJ$LsPhJ{ثoB~Iآe1=`H*Ⱦ] o@l\82/n v(S)\_< L, JnIa,DTO TXov_j^#zCyk}l6(,bk|*#Ew| )|-߫`&^o ]9lp[푮C[ zQ[ QݩZZ*DRb՛-mj]2x̦}muwou}chxXڪ.-l =xUI|vJ9]8ho6͡=^&$`$ 2 &A<Dz,1@-% Π 4l( 1Տ'83>)Ib؏z{nNI#>l!2J) 4Pv&5_S)ߧ6&:e1{œpBɖ]Lk)pAu8J<3 shs|wj sKON#ӵcߚgx|i uZ.?kCF\BR˃uxt2hQ!E=Cl!߲4)qvkPm7)I$wj;v,:}|5!ӷ|OuMr#Ȓ,%2d;Fّ[efo&ь]d$ڥH;Cͨ< ۓ;";=)K"a*IBmyT=NXk7j2!1QV]t$#P,-NI҈gk;H>Zx;D0lN:Ge U\_rjGA,]UwvnHY .{2ٚɡ J3shyDFvg(T&u&ܜ5  lᎭZgcK (E[ܑ\fr^YW Y;LOU`6ub~Eu3 (+3܍!ۢ=Ǭf;qGP?YN\280Yk6a ɇ(s{xTQR#䗴B)pslh8NAޡ^ݫފxUvko2eP^ZZh IbVH'Du_4FƶpЎ52ytzalz|Nϻ|&@!k*IjI)H++ {*cy,:?F:@(uJQ1?l9a?|vʑ.b%^8ʍ6Jc3rr ^,B֚{-6MэŁOvh<8գBRb0#z褾F[o1F:ׁNIR&l#GauD% -3A1LL QfjA2H7irRa#U\zQ:D %'WET ?v9>1n;|ӍGJIh,Y$NÞ =N( w 9gyވlpS KБPg,9DbN^QxAYIY @Pa.7*穓P1@CFtֿܴE>XΒ<_}\ڃ[|'t`䖲M8M? dWy?DNiiipy$᤾*BD:|q@b3C)f}n 1jkFgqQldP t₩ 0m jIsX$S O+xwIB kFļVƦ/+rFUhVU)Dku jTeІ3*m[WJ"՚&EEb6@sF9SHAGcu#!-EU$!φ<K*/LEp`PHnS^"Y RTh\Nt$N^HۤyIJ#!}cUi8cd,FanMU-H,nu:Se6r&3ց7I9~5t^T_(2] 2MZb`[@L+cA"*B,R@ԅ172-1kQx~gHoSGp?Gf>j洃;jzdpkk94w[\ahm.Icku`)Ԑ?Վ+zۨM/&z9h ]Vl7?車Ώ[e@@8Q dŸNPO&4G]m,uF&j}r1;F4V,~Tva}1݅uق~_INpa}Z迄 {{Dl(0] BtNK/h3@-Gv,r'< h9 cm@#gˈCGAb@9yT8/ O@C'RSCpk⻱}d,.BQ@ @ =O[/"oDꐼk4yoHY~9u)XsoF#ׂ֊ٮ; ho&-7.. P&|:Nh1(*қ7*9 P 2Z0X~f"3} 9ͬKX,NF5x+m]S \ՐtF6iĞ ,+Dȫcv˸b + l;d =N]n-n$ih!X1)'az[7cqm.(O9kRܧt ܠYe\HGV{BK>*p- t׹I)4VIMz~L*$^*'hdRMRzةÍo )nn`Y}J)1wO"q^l8씘U<Ōp鏆G'7w)3g3௨j&GB z(˭kgM;[SwtGḔӦX&g8۾ GtYv= &K"3,Ne73"ꏼR("k#G WdF]a %LkrM7e߷5wݽlɆQ'+CU2mN#-j2)6?鍍%8ӢA"UR GW6u?86"hpZxii?)M$J>e¿Վ2uR2enI̡v40"85̀rAyY 'wp ƴ!" ;, b PB"0Ӡ. dMJc,.DC-=hR9n/oj-rO!v0Hd,AK܊y& osM>gm6},| _VV9 `_bcz)6hEn_8?Qg|m?-TtV,T~55HRa'M , Y*0\ tߧ261X K(;|$ek:z2ͨޏ-95;x9ۑ1Ffj89;Oe>EFr h?&8"F7- ;ccq L#nŤm a8V] =؄q<\,A_)Óe?e&q<;P 2 mJOn^78͎LRv'#D2IKg99 g!hJ#fKptm|7[~}ӰcLZ}d%A=;\[#aWqM%!~%ci.+?I Ʌ_ iueh!M@ROKr e,n{|R_ |z;Z9ege MY@;&8I(,?>dMuIIY yplER aD}}| Syfѐ&B:ši~j r^ i5CyM ȫM0F!p|y!i"`wNdYeRgUbܳdVGƴzSlзWxjofXr` WA )X *7mAf)P!@F $1.|ɯnr? y}5Y۪$s9R*õFMM>0KIs;δ>P\uE^ʤw>!KpL`)Sr[h#.NErhy5N wIz7UP )p>; 57i8TWSl4WFKģ]ƅ|%Lg:$CFh0Eӏd Ҋ!dc&ةĕ4Q8AvHLxDSF܂͂6DD ~{wq7NW9ؚ ~WEk*196Yђ7ZcڔL-MaNz'-Şеo?c!o!0 e"EG&S6gzS+ Eh$0VWƲ4eXQLr鳐7IrYʛ殓q&99p'FISI]flfhu G%CSbk+ &rd"ۨ@X/٫t BCI.JBkJ`قWqNa|jFYl*Cck^** \@hk9mTn  KKڗmCYvɫFE#/3;Tp (Z|eA #y ?.Q Z2l)y<2i]q\v2lS4%) ##ASnR9ޫ`'8{)օ&)y,r Wk.Ta' A..DlcB .*wQ#gp2b '!r[93ņ4k t\LH(0ԍluדeT] N|N֟8f]\tR+1RGRИ5? lZb893r[Hv^UgXb1o+C%cq>8Lso`n(P ]u#ŀAվ;͛\<vp;Z<7t|-Ǐgw0ў$c1et#=DGZ.L`APj"ƨPdx`18K(5'֙~&f`?mNoZj)Li<@dӌJIs$]z}/*u)%&Ѫ̪,տ:?.Őq!*D40hrNm P51f \qrE%\U#QFO tlr^$*0[eQpZĎYRϏZ5!a)$GC+q…e PHDS&4  ǎ[K5˴͊;lWV3BCX[p%Zw@9K,ϝ]ٻC)yA3ˆO J < "qL;)OH$)ljVjX~'ِ_X@ iO2v26VzDk;KNR3WLx*a;3@jPo_9 ̒IY&߆my2utyI_{X}P}dF:v 4OegTFSnRҪ V%)'d6(+ h1O$q)zخV1QUp/wDa"v-M}ü⭐1.A=@o@NUCVoV Zt(R i UZvZ^5yJDj:)U˟USQR"N<}rJ^逅( 4l)vtI' Zl<"3/y,ּӆ.Q|w*a~Fj13HdNM+(EBih"UH%}`hq WB\P5J ]],umu}!;O*OӕͧJv8rm;t= 0֑Ǐ_8CeyOqMrd{ N\p`VC&kU;^cmn¿GUQh5e%[žd{7x|vp6ޠ!*% 5;LBy#p5j :JS&&fE`@nSQH4 m||+x.QzB.KMG٠L- VX8A߫34j{DIdT~P0RGjK*rQCihwxVoK"UvHOإq$EF2M qM-֬(|U cTEG̯hIHYg$> LjpɠM!(uZ_f x/ص-,* }>b\Nuj}A3)Ǩ*ƆN)p*ȡ23p\(P#Iԕ: +d:W2Ph#@,vtRIwQſzMХг0dHC9NmI`_4Bg~DdyL"fQDHi-1m""әh)8U^TcDhvEȨ :ޏ &%=9ʔWnYmh޾0:3}.5bJX;С39Rt`1uLu P:h39\Yѣѓ0<v0&6C8h"\gX_-PyOJMsw00 kU/o}@ieL漛k"]5x4Һ"nL aPLw+*Qك<^a2FT IM<00 2U*"uLoXJ?īW_8@2Tmn6m^ډc@q::+2X`.Ln~XB 4&JB?#v;н;DSDwaʬ-VOJbD+c:@~<}EG"i J_+k?Ϸ|?d~Y;=9Y:_€n*z]าs"6{wNEOMQ ;,B˻&PLD}VxX\ Pe#)SQHpvtKjo6H"n1} n`49np_< @uA8#s7xOmv7A!OKNEaN12{B҇0[;$asbaDل/$h}iDpk PW[}]>qv!\tMi6u68UQkY*;|1G&ɉ1f2޳%Thm(Ǽ@SwnԎ #w}rnU>y!){HYXEkI;<|{8f J;g с\q;[P/(ׄ.)Skr(l3Imz, /qVg] b{Qs"2y&$В) <~"ՍDYF*U8|~bQnJ޻LǒQx*g@~%٦xR8j(HQ'g&&(I^MM&q>ķXH4ޑ G24[lrXd\lM'JԊT35A/JbW J}V3 QZXSMqz Q$Ae/cemX ۟ե>Zqv8 QB~Vo9&76)v&q zI J:Ȕ)>8>n~I1n$EL53Y뭮 G FI;Z 4tw>U#C"OFO^* *~' v-0 zi-?U^wge^17Q2~yWQkSΈp/!%l'L;4M~h Fs7oI`#ufŜ7`xȴjE4sVʑT::ƾogѴ1 gQJ@Kv2OcϬ3b%}fGGd .(/6Q5s[CLɍNCы=%I ŠS%?"^te ɂ쵻xꋀTܜ(A9.\r'vj +=!Ј:2[5 (sn:CmV8lSRj3T\c{rhTevFUoTf)f`4~$•}6>w,TeV32^5WOɡ0׬?:=P26mHm`{h|ӸĒ6\y%^#dGk܌E3HqQ7O %jG߳uG̃`0IL@"ŰBt|R3*\vK[H6|wHII><܇Sr9D;:0o,՞ (8!J۰eywr'#=AbI)M9K=sSZ-8Er!mde_W+֯!n`m5Ka6sd|ӻY0ϧM#u|8ĚI7%cV8Jdr23"oVd塧ݘ"QYjb|qN'>r 4_ <"j@W"5+ )(AHf/ ^$`S%4^Xظ: ʎ6n&ljjqfIbFni~Jek8'#Gj|eND<͉-vAsw:Ɓve %UDh3}gw=zrMV@ĉJÁ;*f` =1ƣ eXe7ΤF3SH$ s>m>$ь㭪ΆV1 r HK)+c/%3z)ee*h2@^q^ǀ8&7),M* bsH6`. 0 Pi֥HeY2HJ"=0R! +ȽbWDJ@+:]n,ɰژ1BId$;86Wٟ2b&I!-qoR$lLN 9&!НvJsf x6!uJJFIm'l=4)jJKQa[J6VqGTYSr ڬ:J45QTbbHd`-cA{8&a@S7$}868A Ish`AJŵsbC2Gd>!?-G Tf6ڲvZ ?ޙt+qbdIb =έPيmXrɲ$" Nf57()A%XCKє 1T~ `I7&CfV2'c ^?t#,MF96odzݵ2ĭy#s;hμ20T~}-EL & :շst$VF!ڰeLMt)ZsHNFv鸅 n*G ؞-MK}kzH-=Ҳ̄TRz񐷓pgs2MI@iEpQ=B鯆34>{ ?LzSs,NWL,Zs]暭/j (>6,0Qk tZڪgv:9;f]|ki$GE#X,ME yg<Ƈ! ojvBhE2$4hKs r4ĀF`v8[(v|\R"R[d,[@bMe1H_H y2?0x<7ꧤ?= fچ E\0^a\+=TS7~UIvDe%7M[dž}Ͱwh`E-RQE cm>ZXӈ,8 Mc|e BxQt/tA)g 6^`&/ &i=ks)GVD=}2:9vvE.ʯ5Pmhʼ`Ѵ\bfV5|u$DC<$򍇖>s'.q pV+nhT~W4gW\0U "J·j |ɶF.(;p㒠,F^AH!?`8~L9FQ& |,<b"e8?Z/5ZJxͽZH@T?4_q5H<~ IIGRt+6(#KQ Gbp2cBrZZp4nԀxk)qre6y٢о.W0Smhԟn//Cfr¥}I瓔#H wˡ]n@ߠ?&ں Ϩ0YKiQ3֘%s NA)!'>)ŮAאє:(S~g;?'.ᠣ_z ZD4֍n8%FOv {,(X K+ bUAż.B@X3}'u8TKN[bDJ(PE@( eְ⬪qbOS81 "mہ73$q9 n%HMhSIbA(aGAeefHbjї+/_kl{gaHTI9dizdo滗0+g]Pw iW1;A")#c-N '%c>=FF T:zvi(3c6|[ڍ)[;4RS<,\Z?wzFz^vҺ\]Tyw.i۽f*9 \%:vsd!etOwk X8E{7,MڷPِMQʣDh6wN^܊}S򳬫}1J:4iט! GuEw:E0F䓟A500 yK% wLR9^iHf;g: >^o9^\@LkfN!yh + ;+K=D0 9bh >b=A݃qߧqFRsu ( +c; ,ŵI胛 (g{U~wΈg+?<{M>_23@?3pyS+D.}x}gw3&~v^RGA:+Jr A+vG,F ۘ,O{JZqcywb.{<='Rmv#Y# rLq9NkbL~) k̘ O=ǣNB4*3BLc2/rFW#e$,ϛNgA;ide1ށqD{J'+iZ0Tyb扈uJT7P:Baumh_rtop:^X/vv{'ʯq´@OK_>GPK@ eй&CYU2)--nIXW d}=`ڒ8wwx耠gO"Dp5^DQ%GzqAk#nMI(//8 hs_ QyT4%=2YH//ݭ;4x@"|~1K_$\AJa.c7*Ͽ'ijJJlѦC\K e҆MI<ٍzmxt!Ș;~z?~DCypb0]$ Z?F&MbT?Oxb ^lk1ݑHV9̓ ,<(t-Z3NWTCwhǃ}jRP$  ^GrAOLCy9'U(Օ%NX/|`Iˆ i3ᎈG%o8[p!Zl*7@{&x TS0쌸+ % nh !ƯE 6-H6 J:IHHlnsLBUm s̨&KQ4Wԍ5DPϠ:Gb KXkY(ހ*8{z[]F\'(u<0Nc2(A-r -IV" Rݼ~W.pYh]HN[-/-)諿|Ų]MwWi[S?(^GJe1ÝKˡ7߅;(A!aˎS4%N|<*&FmB4:1CG*2UAޫF'A07dܬK#ːPOǺ./_֠CZ%/{8r j:Zg.v$Ǒd18"$qP]Yi5 ;!Z!*60*l2&'{[ԓY.SK\En%:Ϸ? lp•}v.kc pxŦ728s??QS 9NlWbI'" 8Z GR$twzYH 9<3Fy9kV2MgOclx8gZkq[jA4]{,D x$8'Й$* T+uL!#x82JF?: IwP2Ō&Sjaa]_k$C)KtqKD2\;p>b'a"xb^ڃ%~H)aЃ2O],YiCqy*f azt[qBWNr#>1a C6wFɨv5_>~3Hh|W qo7-qi,Bi^$jÚ:bʐJ*R p>S(prN}e0) {*+K_rʘ( N7P,%jf2Pػ F͜'~j=@PI3 |~x]ӧѲ;)C@RV.rKxImeuSu鍆/FEO&Żw!gb8r.0S roד%it~qk 7 RtZ vH _K :1 Db4O&!VY=m\&8 m'VdcKcGQ,3`$^pﵳJ@L&G 9AO?[ÂCXYd$</#֯mżGL8Ct9{,C+ǤIUK}2G8ՕB?#MYV2W shPƸQ$P~@9\dQzZFA 0p z~"CeZNbQQmxoZQH ]nGJe06lu'k"K"8?m!g$26XH-tDnwJSz_:R&^x۫UwuE" xFH6*kIp ) 6]eemYɈ#Ky<2YoZW 3{ _j eJYR "͂q׻.?4*Sdm/R4%Ll<Cf yl0PlU ٧XG:@;:B#PzIS*RQ$R<%c>24pdd>OX;_7 %4rYa:n /eؼެ(>EBi]ˆ4ʧ6%mkYK'+ $M`;AJX)i$Tyl2BT'IVUxi$ ]}|e kɗ‹g@\ ^4S各OK2)M;~aTJ!{G{cF!;gpܸ>TwW)pnBLホǠ!g/_%迵g߷,/NH'ӫ Y _to5Np)ctgl$n)P4-]ڃ Dշk͚hWtqqӬ`6gWlɩ TƠ)&+*H =`;LA'IZSқcT:6IR ?vF0:^IgݔhV=u8U:q>H 0JsBN'=ͼDqՃև gAQs`B0yaZc-Tnb:5b*BV}xGǍf @jQhSB'RuQE`c>+|?:q@=DT+1|UT ܕ[m+/;LJVx"2[[}"jh8CW`yOplCē 1 Sw̐+lhxlDR@$f'W1 E `~0~%&z#{0l}m܊@Q}e/MsC.uQCv&e+zUS5lO0z6qLR]gN8dd |4$$,RsKЮtǑjlvaz=Q4/Vld1UAG5#SHa2$\m)-05)ONmGl}5}xLDK=۩5v_cڕFWP9O_5ա=fIwoJ-ld_oAaN)Ć] r!7۩7l J++o{{twتH)8!RN8N+ +(QGma]j0)Kf?;}Da&m7j8vXVUoj-L{MZfSmU{hJY%jVΙavMznĻ5xUr4a[f1&WՁޮaCl]Y+՛X~ C掛vLȝ\]Qu >|ocQ!X`-xzM{Ŕ ۟>}ǯQ]4FҶ+kp_qV x_ߝ5>{Q2꽠5B.}FfUzJnQzToZ}cEN~zvGN%2lz ~ޥ[8f zw Ѥt]V5뽠R;vsFQz?Pٕb5y5Mo-Cm{Y]Ϛ/iOѪ>vtH+vz\fjA_^$8тj9R/whv he˪G0Eo*Qm ; 48ZnQN5>Kr?B6PُFء|[yɯV_-)KIk1?oy|ut~8?D6j{*b.7<2c5VS̱78J(F`r{"Eaqdur զ* M1iL%`$xP͛|1 ,N]01׆a<tM//pQMݎ :v7_)o}*ݽꛦsW̗,Uy!P2q@a_/S˿T?K規|&*mQG*@$*Kv+|+efkϞ?sT I5:z$٥MMmZW>mpkv6*B0qXeS=nf&9d֓>$O@zfӦ[&Hu%P_x3kIuxpG3rMC?;ײP%"_X/E$,JH>Nlp'b\ՊmON=wzP_|&])a-}-=;?FRssSiaԸ1 rq-9Zs+̕/0 Są.bQ<薞OoiwIQt{]0pw.qTP_aP{z=vh\=񲲦"A{b4GmisNWedD_4uk!N.ikTa(U4OgUNHNp yrJ>BC]K-K9)~% F&Ej쮀XaIt~[p>0~D|F9;T`T+ ;l^C`||qE[NVhA-˜#?%ܪ;6@=rM1ڿ!VyԎ"JeG71&έɵM!\(cu~B'3,rmQ7_ui4՟$TQ`p6w6d\آ3 H=2-͈d0,gb;At1ċg,I3VY]ɨ B\ktwQj>'z[| SnHzP}) =EUnv7V/TCz? "RKx\)+@ |Jt[ZSJKtez=% $ԥ%fN@A ,$\zUDAR΀"3y,kT,*V0.)j':2s(@,(Wж`4e fM:Ce$Ty;e`W$ -hL"Uh\W1ᷥp"d)9a1͖3p@$n$Q O@WJ'eٕu7H0bzWEʺ 7L*wzV=FꝹ7"N`r S g)HH3&$3>͆Ezd]14w WkP%\ 4jq\&\@RDRx ` $bY[=Da:wtQz5DzBYS?+JWيt$sIT`k 0jj- ɨXkcDE+,O]w`h^{'z(Dz =fV,qGT5Ld4T-@ JnsB lMy0Wc%RBN>A \F"m-D$oX'."Zh$-2}Jwu(sGN9:st)YBWW_OVs҇$,(J O4^)u1&[HΛ *P'5M963P2v 9$ yUoNN2 ;Q(>]@}Q:T֔3ZKB-薏Pp_&%\.r r9塗wN7#n%_Iݟq[EiJ.Өy;͖wTm݄o{InS; ߪzvu1Ts9w*l4yE6rgSO $Z'{;{ʇO)*]Rhw-ǿ(namơ?yTV"B2{s"diMy*D,ӎq(WCqaleC`p$1DLzxR#>GkŊ.z(/$-<^ m&}r齝DLFoV.KoQ߲斬AM6O(=&>|6 SW(;ib3{.8.8h(&㏞`}28> ǵ9jw{Al),aUc2\c!Wui=4F,\eXn~k<,XnXn^,$ ,I@ꔢ2D1IK{6 FǕ|Uml28f U˥$uј~.!yP?|>y<|>y<|>7Y[0