#!/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=1398df418cd2f1e21f66dd6bfa4b92e7 # 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 [rHSTP)YޠIHB"9c<"P$!22OU(GcDH̬< [^u6m:_ZFFmk{O-J8h@Oq=c27^#RHhT)Ѽ94l߫>4$ Ypˬ4tfa؋Y$=q`2~ga{4ؒaњq}^&_LhȆE"-iqV=I!i.^ryZHe“[0,(d¿GR'!&+;$C2uxy`Qӡ˂#$V }^`QIGX̋hi5ĥ l; @VD1l$Q!g؍aG$ b~[`hH Og]6<~ĈPX̂1J*Kx,MBZ 7D#6_ C C! P]j1&w}]%yOjCuH^*LtrF.'?L^_&T }QOu0D't93M5DFCm|Q&@'31Ү M|\F_\qtdgzZN pCڕ:*Qߪ1.Q^V 3y7Vu +*y#5]Pݧ(X1U| Q_PT 0 a lZWqPqژiJ.&!׸ojJ6Tde؟@tkC3Uׯ3m2.f} q~>5H\9Gy eJ ȯiWl ]A=ю]I_}gj^G.׃IYo6?r5o>pUWD(iUL&0g$#ΰhFv˜R\x m&qJC*O\'K:OS-?|g"Om6ZՃ=&{;`LLKg4Нǔt/0e(v(s|f{PsIc%ZKK4k+n*)TzRR$*I'c;O9qS;#[?&& aDַpC G4nČ5`WL$!"PPXoP(-I<,igD%(ѿI3Y!!;E1D Ndm/WMlFhVPE>alǑl;eFwwO$gi|bLбݍccA@h \+?IDy\w`K@q>'~- +"k '`&AN)2aTwFC +XyE]uU?X$kTPyJP/}+}3U}AGYiP4yЭʮQ57d8r!N*ZmM yò/ɐBnrnzJ_W+zs{7:Vw[Ə\3H!DQ}K`1$Ay)"KR.(]Caaʖ,W )a,L62rʼnԤb2 u{Lcf~9_*rNZX&=}IJ b`j? ].w|}x *aaUJR&Dvy<WBEVMNzo F7Q(ҡ l |/pCj0 cn9G,OҴhػV2)9$GC1'7.ȹ np;FxP+sDzQdUF[A~$? l8D~[*P-QorLVonA"ҬqUvZq]e~Y+؃`ԫW xP[(Q:3+&CUv eH/>$sRzܽMR[a `  "pH62'-"k(n-Hr")nSp1 R<jhm0 OME{7(Lcy dY@UXy L#GҬP<ɇ"_G>XЖ$` oKx@cUX -,bPEі"bѽw,U$| 2si])2fKD ^T7Z,)) ,_2|1K(&yN)i3}l_eլļBBE@IĮ20%I% ETHL+L; ftH2BiM%i4&V0P6oV`6ʛO (!!vG=Q4]zXC"u3 hz TU}GPӥaluà &(_N5· raz*ޅ A:ox2g]:,QUI&ˡ*J\B982qd[(Qr@Qb`oD#6~iTj#Bz۵sXP[;'uw2UB,R6Ř$D̠2'K}`2u [ےL t ;XD%Y3D]SnqG>.L=.݁rrQ M|HnKQ=qڇ$H!gɑL(R l)Gj;xmCYר꥗^P !hR?RzjuO۝ł-/՛=Y݅iŲ0Y`B@ȡRnu:`EGgaE7cFC$(om%^k<8[/`ɱW{VKo"ŁwD4HRvP 잙SŁP; =snXr~ptP,pȠh#|+ Q#vB]PǓ*cqbBS'13j6ӦU7یY==ei;m٢n-cJj-fN81VokSZ.EE}ڵO{2i7;icm]?ƪEV(@${K1xI\\AED1Z_ӚRH <+, $Yˆ¢ Cc3 _Ε&m:iwm>fѫ/'vt̅X .Ѯ2Ȁ/Z#'pDRU|Kˤq}VEd :.b$&Y m8=WLk/)c޵' Z֡i٨'KEɏ2 C}+gRsL-5O(/E+) P Ym`X. z 7@SH8=ݤ =me;ۭz4Ls{lG7A6`Iw4Y@[ji3Ubs@vsg R9ncܼ';w8N^?n7~~ߡ.SOk .W;Khg ~wש2tn="`4cbǂ_ݰ=4tk ̵^"S-9KR 8*ż9E5$=LGE=:jv1c}>̍A|ttxl4y7GGK2ym+ nm{8LBfw~ǑeM 2!ٹG?x^k"1s r&nCݸ f썠¿X{`hJt-yenZwҌApٞZʡޛ六d/_u0# '}ҟԀ=,uS <'ޕ 't*Op?AL'ҫ|k`t[u>ED W ٓ}6vͺrRʒ"ۼfV괵w:wg7bC9prJ)%z3'v< g@.˯Pvrw~LcRv¯~I|&,`<\ȀG%R. D3\1u*LJW~uDHA.l5-oͦ!"%g% C5p2^ qi@/k.e1a0-rE[u΂^0 :{E! >Ϩϊ ,Wy.pc.PRMjX/9 n _9^vGuJ0[uGU>.TFi1:K>ԫ<}7]j~^X/FZ|ߧ+'_G\_KD+4BA2z8HJZRJk6~L4!_e†iCIK†H]~%fQKڑG@W9b஛hN3M8| 8'ZN.*` svk-͑dJΦҝۧ1{-ΠkƀFY,pHZJ>d0\΍zfP(VE!_KTS=+ƺsEAzxv.*3+jsgM%wAq|W& c|(/WSK"E`vt)X}n27 /Å[C#Y 3ZKy/2rҮ;Zu Jz$kʹ{.!x`p1]9I{7Z[{Y8g!lx@~8!{ض )U9#r4k,K3g8mQJ:uP^0vnEA#OT/:k"\79LX4e.s]c.kRP?||]M7J.0D##ᚂM,nڐ[ 9~ 㡠_6p1!_vJ"LiSk$tW+)&LHs=+6˹"cr֚k,g#jwi)u(|2Vxw'Tw1Kks^lІ)9wC9D)V^7vpP|][Xf8zcr;H&AuLs8N.<&t?[#UcVoa1_*AcC6%эnŖ$AEw4r8O;@[d]Sa80@'T t!XinM:XjDP:Z[Sc8NKh,nF ;x?^Rf} 't* { Ƈjծ녛 2Tq#/٣n6jr5TLjYXo_|a 5b]aU;EfAtӄ(lH  SmB{t@ @bh< -pb+";ɶ`9|wCKje ]R_3!MLA\"Xh5Y;D)Cw2V t&sŜFs`eAeq.H}ɧgO*Gm ՜~'bG=} _].*u"\Fz,dWϟ`~݈( #EqXHG9p\ R5BE,6~ˤs%5 qv.Psl~A;ʾ$̌\q`)זVǷjDG; 뤶/)>վ\o;'d7N{ݵHiey4W͂AP822 <1Ї=F1^zbm JfYqIyR9@ZIK%t#)莝M+y#BG+Ee\2`_Vijb$J)WwE F*D 9]9rݔ2fF'gRle5 h,}CO374MJ9.Zqx$tA{h]S,cȂ:K~-?)48pEI9bP7Bjal#&)7 𭄫 Sڕk(SE.NvDt/0v'(~M+-}!y7 ml8z_p uSo]WE߶H[/#MqP@^]a߮,rd7A(xFQŸp$*KO\F}ᛎ^V{!Rn+,49-!q$>B@nR de8 wPP;I"nByhSX4ͺbkzD:Dyݙ;ƺ Z5A Q6Ğ .`),~E체AniPWV,K&ZUcp:8_ cVн?̛bWpȴ3h6(GYī(P:(wH=?H١Vdk-Ƌ]4aOL6sTӕrY^y-6r'He͒kK)7{`%H9=\I):6҉/2,7Ӎr)cf8̀)&1.;NzCa'mj"MCf` =SPz`*{얼symO) oGx$N'vf3+F|%Q 8O/V$CS1VO[Q(jnX[]\=XB絕 8B@C4P m'ygcá`)N"U\4>s8ogDc<)S@^f;!Tqbpq#p΁L=Jù,ͭ߳<~upQ2&FW޹5 m 'f%R5ggRH:XR㳿pw DI UXvY`+ndK暱bh Gt]iB8y,fs;V:d4]=r58\2XK5a$|q4>6m82!AT3n!P0@z!J R[ݜXzʌAPּބix7<t3@|$,ZbNjC|l:L8,Ab攱z<7^d^.7K_tS͟yU;9dd7`r!2p8颈@'_5E f$|f"OhGÉ#A/zfm#D戼"g^kjs\2b FSػN0Ie49CֱSaAaUN08x~/ ʅͥZ8+.${ɄјHh2R+:X?l|I%!9FdG/sIq׭"3*Lj(Z+ h)Jll$r|FK,uG=mw-̓ IIW8# bkfFy]޴Uttxq~銯NLO󘺣<hq:wj1$7sź} ׍h' -8E%tpҙ Emo"GiѥP^7dGbM&I4-ఘZ[Tv'iN?cn˯Ρe*g/%v8df˯yU.'0; +-~ XVn]D PG74i(zV_:УDID ;v~;o6s$Q&>_?baS9` [ʀg|U= .6Wcu̱ 'ýbJ~U ?*e $ ^ʘωf@ǔ F}RPOWp.z;Uq#5;KwVla8⬟mK?60woxu6ĝރF%J3J] M흎& 0o8꯽1291͎;@"L ,Dy;[fp4%HqfXyEtgbpWI6"`T[,/'?ڽ݅=ƅ+wj_]ҴiR>6c7 _S zRjx-ŐσYlKĿb,4gx; @g@aQGB=U n ;cJv)|05/"op.* "%%10GwJUZ> S!Omw_Xp:&{@)2Q⑼vZmNF{CR@nIlG6=6AmɍD'kHw;"c%1f׆D/'%?}b(m+e1Bv;5O+ \C)Ʃ'h?khDLvwpݡI>DH7xכֿ7Na~Q+p؝OۥcF4!Z3pG`ydS Wo՚^ksB8ӫjWW\?T"yWKcBW+F~ԪV0l^pZ73&filD=葰}ǔ9wpkh&ka7S0 ZVorg1M啭JWvy6fhъm3b$i5ڝfun)xƵ. c"`֧Ȇ1r9Qm~UTuGHWD齘DlId<^DAR'2If< uP6qTB\\`J*-vhg6&lǒl,0\[mƾ2x룘fd #Ǩ;T, #&TlC0BVuw4?b=d öLرlvt_4.D*,%KCsǰz?B@0-UmSÿMBǻȈ ]̱_;LN'Vd]pR=ڳN-g ZMӳQtoXڣ]4~wpY//1ŧW`Y:Nf4c}ze1n+E9Y!Kr=YK^<e ݀%kG7@2TzJ57 f;$y{t='$@lpܪ4u]XsaRђ?%i J4 RXT.@?J Kkόf(g9 n:гkc2/@IQPcU@@Π"Ѫu~:6jq'3 XOρzwKLޣs1_^&1|45F/0@3?d~]XGgӝ;AT\ojYo5mN1` \,&?l5#H 5ĭv$g2frQaN/;v^Q-X9BF|uL̖zPGU(@D48YۄxP<+f*! ĠK$puuۿhOZf/O էwy '7.aF>zx7wjSChG)2R mI yGFw1'ZpA1E ƪqƍkY/KC^cg $rh6^bdqYxS O hQJ 'u6T#uB8$Ge|*$$ 5'##*XơB8Cw\&7v):$Q/ ܯ1uxT',}N!]gb(܆>'#:^7#[gl6^T֟v ]-c0YeyF2ӌB^T { dڇ}ɮeѭU|u܂~ y T~/*Vgɪy}XD 5"c>j,'5@#䬮:pNB`a Xǿwez޿P6n*B^'}Ƞlkb U^FВ9 k H$fp~t S{䌧"R^Bt+EXO46.oUoruQozʑ"S4P0')qyZL֦1HvR5hk2+#a+/)-}_Gӵh]ZHo|h*r_eMY*n!X98Ȉ5'x4[J'KL moPŮ;Hk /+]E M`h\+D*pCy~S!.EGp0RPwo PaMp+>b ~oǃI`~d_Z8 ,byhLdxG'a+!^3++| A!R+ӑXp`D'y+L V&srҒ0@!D 45-"l2.5}EtA*Urv)&.6?4qا0HpB =)g%dg(Ş6RNp\.R )<0a`>E@x 3AK7ͳ2q`sd. yvz޹w3iLQo%-M$u(_+3` ].G(`Bx Ө3 aV, E`+Iy WJ̢Dg/D0t0*K[e$ʦ2PemskwzA&N7 'aLJi0<2Ka>"'D43 ("=32&HtmS B:"b 9SXBD>H4pNWzPBx^XzF䠝n8TR-"qDk C-cj$B}kj@>m3 8u#wkiRdSāK4:K$͛y$έLpqLj೭ #ctf5s&YR Ͱ3 Oe?S>M8QmKW]iqĖTDzrXwqZPoT$50p*ӧ^KXgU(Ԉ%E Bě܆w٬H-v(qZ yeb$ة$Lm޿!`~HP G":'S&L\ºQ ҫ0cԉ1]!.jiZْ=HGC8^(us_ K0@`Xo0bVUsF)qlXBOtŸ~8@ԕ+緳1LjuqFL5o ᥴG9|4Hr(Bɂ1)La~SXЫ ́bxYwAEf zF2gVV-JB怐Y Fпeه1hXU~c4J^JeCPa`ܽǸ+#o&2b2n0 Yp8|p2?㯍CQ4LˑVtHLB |Xf%6bBi;OVL~(UV1>9z~쟚nѺMPemĊ ^DqB ^;f$ȁ(}">a)k. 5Mvxި>{5>OTϦ>COڨ1oT7;'QPYUU//=mzem<+5:H \5w1=m̘կ?Ϳ,Sr=={rWE'3ޡkhwߞx =FnmGKM+1*ؘ.]fwg?կKg(:Dx;[H3XSNz}?Y}-(7\{a"4$#Dt'stH{i)6zjvFiѫ?_+B0!tWes-1Fi<<<Ċc=A9E-n{1j]U4Ia8AIAU;HNM>{]aU\3^3ʻћN\㰾{h@8x"eX|w"̑FayK+J_mxjz 6w6ü*jDQ@ҢTOɡ[IGJB4$ B'YcCڙW# ~;/3yD0kCHC?hb$S4H41LR<1wXJǜ 2̔|gj ClSnL tDiuU* fl·8^l6|c/} >Ĉ:K1ցݘn,{Q-\,D{duBKQbSf4Ȉ\]| $"ΆK SkIϟ3"y"-Gʜ8HKS2:cQ#/Q w^##7< aɬ;9Ο` پkNw-Tw~X;_/(8 H?A@yg|4O6vVzϿZ #D mk`kJ` $,1r2yNØ@:$@ `!]5|^B (:&&K\n;!Ck^r9*_E`h*tG.f!:~ND *5 mS +ŴNC WkAk._&vaYxh:ԁ v@=#oSҁwwPfc}o;;&ϫ9siS_+>8'ଊ+?X:oNg9xsThnQ`v! ùњnzzÒjUyX+| OY*^i '^Sr8XgI]6Ye ϔ,f8p< :N?ZfBb(Dk& h7ELn92>,(z^L.7RU1]2.Rz&ۇڏ]'ȱ 6Q qhb3zRW\}qL,ŭ#~R_-;7hg䎵 !HBZEJ}iqPO-Bg3.opJ( ::ܸn;j4qcDnQ6Oa/(/>{吪M&*`ΰ\Nz[| ƥ&M0^šLJƛVyZkS;lpfdT5P(?}6:GGFoL4B7-a aS .v˃a 0Z"l@۩Q)Blx1A1taf: KFzѲ)2@s U*ո$wCd릷l~.u! /6 {cuBX(ȯQ@֑`yC{Kt<~ql:7 Cȳ5gL#4R4 ԧȎWAUX#^.#aח.oq{QxA>6Iލ:,̀4d32W1t97whC]~h$O6{q(/ JMr9* ?i t")9=c9iOH$EBP^?jׁ&ɕFk1פSPcC_c1||nsi})NTrO~#_D~7|ӹv>"ȌkM t4Xb{ώOqt>1ޭ8"ss]]!&X<"8(PE>F(53Hi;G0m;m, +lm*qJ1l*q̆o :0eNb.|Q(m!QN-^E%7Xc/iVwU,d&i6$C߬ք΋OUzQ) x JGM[{u=yjg5"ęLGaq|&M%޾oIxA6GH6Y`bFHtt1=, "P,y/ IP0/XuڐDWrci\Ş%H:KOb.t)!]@ !;{epC?oWgB)=-eh◌ ųb l={'I5ҪC U) @#I2gԃvZScNª%ꗸ9i#7:"a8Oo+=*W{FNTHc|7t$2<&0q[lA:?wijϦ1k^`NCeg_It4 -oAA5Ĥ^4/Z{’T|#d4m0:r\nsr[ۼ3.): `"-\v8)2ID?ųrp#K*`t-_߼\ X|14H9]mRW=EDƉ]ܱĞ , G#IȏidPCB2K:q29){%uh0)ǎ/?C3f޶qrccI:ŽIAyEB?$rxP όfHRV:`r"qXeqb[)" =hb{ʂ?6] eHBp@B8L̉h31DY@yycg ,.84~h,UѤV>'0GWisӣ)_&{h_?&]Ͼz}O{'?`1 d,}O{'_aRth:kAAp5 Ig>%o-A͗[bN}`0h3ԎT7kt4{b~Q)^uCt 0q1Y'c咫~pm[p^X*z j+̐ޓRg}isOA"rC:9$H1H_d)?񔣼i&ܰ$Hl+ey0ůMNkڝeNiqTNG[dvFy^:5r* 39< MomK͑pOcJ1`'Uf]ݛ aV2dU$IW'+F,?V9'ɈPF Jᛂ 9nSfOqZxf:q_%ڕ,(xþ IH[gԯ T~e6b7یiYԳ*iSSgDh 9$akXlR]M9#9/r2vKpr:ccZqOY9(xLaTԘ;䆺)=e^]7-[J_QԬPPK%hWUoiyP.Ǥwa@WKVzY(ưbp`zR1h8D8gƺ%'@>~K/m?,9Sq2n9tB~8-.)YMڶ+t4xS(kC ic&(mJD~{&QJu[;.uyz4 |5NɸJz9ER({Wfw^ 40Lj8 pc\01j' ,6xh';8Ew&F:Q΁bܽ`5DW?FVH:6-)zﵲs?TvE)Z_JaVX&81) џI"U8eaۤ}>k2QQ{ <sʲ׳'A͇&6]c1v䰭ӅP*qo4PɜآDŸɹa5ykfiAP) ;#CuGy f mpX巹H0+@.Ѽ c"0?7|>Ǝ'ݮq o`Nvտ.J4YD CQ(g*1#)a(,jSo!%Tȴ(!vyAC> l'UU z Q(bdR#uJKQ4K:]9[h_< fp4M]R8u(0~$”Dե 1`Uܐd0UQcdbKi[S ;^x2a(L"HURG诶cM=x$"2x.>h8SE6}Y,١+r lwiO:zV}%Hl,r^tgY!-bAEkAIuigh _,sg $e)ј źT*{n uX"0wbrK֊5e@LKlz!䬘7j{)91'⬨UbHboEF{p7:z3A,7-YX9 KD0=t:h*]:^S#Mu/+Xis8&/ʍ$O{ 9)Y0Dۃp==aSri2FO٥aeŧ)ɴ.Z{8mᐷ9 դ? )"i]͡>w_ =(yۇ n+(fgd3b9~6)sFBV}H"R.Ԁãp޽4ـ b8>R4R\+)-(WNV=%ʿ iS ; نdDEԎ^ѳ܂Mӹ琅+W?(rS{{4AgZ7"mؽpA5(`:sZU+0&@'+uY?}ӁcJt]'+@}"_Z:Ch0>t%{.Lf#NH F3/LeQRIms%Gpm~hӻ]BʯTrI'D7}҈;X\޶#PQmnj2R)CaZ#UR~'aܐ?9:j@,8^Ddf1旯HbLZ6TV\RiG^Ws1KD3餢-d߰_^pprJ,qϚ6)~/ZJ vc o'A7ޙ B52OCi^Pn KEORf6@b%+n' chRr~E) [^FѝDA\sHvP\lLxñb_.-ۥa^c +h"wGF8'6N@eyC@-ֹ_H$01z1=# T8"R#IqhHp&#E& J:`4+{}Fbd8nIn :\8 s;EfEHo^ݫr([RNƃ~ϣMih<آ:') 3;:$v6袴_>Xnx2Z^/Ƴ5m3×),qő~ ӘJEfť8>w  %埗<Jtl9IB(략#FߤnWO&AN.4S6v+pږrk\Tx ,q,i˰]+\kvP.aoHz,ӤKkQ[NB۹e4=)WN1 lLbU;R$3Yb`ddd.{O1fn)qx-k#tz[jv54rf9 mLlc77&{('^nH1:y<$mvLZ߸[_z&iY0bgK"d'54 ZH bTwt KDeˢ IՃaYsPD(R $|)$4)vz#m7> T%}6#ĵ*T 0V􋨭; )6dAAb;7Z%DpwStɫwtz #ɂ}>C)bcSC8b-3AOEA"j[j`, CXpp2 tv㘫pr9cs +EH&-`(!kBph<b5L+ju5Ϙ9?T_z(YO6QTa滛 XGsJdْ*@ t4:)k/ֱi0}L^گ#]x&mwE -S3L i lXG&g@ fЫ<Q%FJ0^r( e'167)0 HC뭎urπRiNIR/N@=X"kVФWD(Y!~㯴>_ЋV uՈ؇l _d∌R1#PHP0ֆB(Hi_1, Y/o 'E6u=g#l;cuSZ `cWUI<mm`ErQ^@mcWz},Sত3?qPw8`$( "rjY|! @1 {RLOX844ǡx(~.[.,?ѡȸnzVƘ!)(^^h:ǞF0q[}7'MH#&n&`.eexe&&9:cܝ w|!?pm8 FiApXRcH ) 0D yTH|"i"FJ0>z: pdˋ.f_6:OtqzW۝Q_ u58oۜ+~Ƥ8n7w*ѲPvpWdl%fÑnH\KvH8v'EYuj#loڌ]OTĂ1$F6ޙ);?'n@@'2ƶ?/z.z_bLB]bBQS'~l<) N^Z~ c' %+NĪ3v ȵ͗߉ab%`xY5Z1񢙔_۹suV8b;P?í /;IR󝏮W3bQV*vNC_uv~8",T5!b LVai)l+ -xQj !z=q-it ]`ؠWxl.)#x>/ BJ\撍Zod@ug E;J4A/Q ʦ ŇC" όXznώp$J#ؗP\&IR4lN+.C3D]c/஠wGPG܄ Jr}̈B iI_֑ |2e$9ժ+bV\N_z*J=I 4xElQګfwR$FPz12 zOmWw 6|z|6dIKe.fGcNHΡJc;ک=B9RIQ0ʍ%c ;rUh׏t$k +m>A)`#e5 )VBq<6ECUV|[1? w;BYOc;RJkաL6~ # E<| cg{R;|mK5팪EXZe>of1iegRd%$=S1nɾcpFj"uuIGD]}EX .WN }j:2zk|mmal*JgP 5 Q> ABU,j>6.Iu3dL1EPwA||q:lTOh ?a%a$!Q&  F֧)G"~[ =J0~6˳:C Ma|~ඔTs<@? z0|~W79|{qK8<>쐑EڠiFK譏e1+%@S:s)q3=h׶Xǹ[p Ie9ACF|ofH`qNuQ+ܘX;nuD3 Oʨ:rhHygJz"Eġ8.F9a 2e9. Y-:>ˤ(Vq8 F2 mY ivD(T_7ehd>&*RX<&@#ΘN ,Ey]^ޙB "eHe|@]ѭYh^L*U]9ͮ*OjERteĨ)r< b^z "'|=<`I Q") a![DhZT7'aDoD2M; Hb٤١%Ȩ^ZYAC'˜~r{F}aDMj-Rx+zxYx~sT+Z(bUfi)c~kUsg{XY;nzol45DZ~M:"fJ`&bً!|l*"_W;~=uץbp,AAj#GX *5CGbb$'b<>{]hW,F"FJq\nja]sɳ1o1{v;6V23^ t3:;$m"Kj91~ V[ooa{j?1/92,|vzfxӃӖPieoiӈ>k|t#B,9g}՚? awј\W#EJiЖ9 I.mnsVV U826)]Hӏt,~IDT$!!\rJ2RZ[z3@F!HR$T4082FGAHWW|jՙ \[_/nxa)WѪ8Y= L\BƜs2fQHff.ΩXbN!h8lQ(azs P]J#MŰM]rR`QXb6= e2HZXWHZ=q7T51+F aHv=nv^$9C+mz߶"80W(Ó3LI7܀~qzD?R ۇBļm Ei?֑# 7G@27"#>pϕ"4S|` $Smt 1)8 Z>AG q=STkjh=ZgzzT{iX?b!Eb<d/EߧNv8C.AH~2s1' 0IVPi4UI~hp'3C{lxd([{D%o%; Dqc[[̠1yh8LIn0I/b~ 5I_##W$bPvl؛n0}45P!ef $ =Ot1=3a ؛'ckkzu*r#}G7](k3 0ډ,5||ϲ)΁A6[Oco;㉄s#Lji'):7v\ иF=PwwfBb&'%%FcR[S3W6ex4v1ɾ59;H I=is%a\?ezƤv`ꩯ)5ॺ|0vp1lp- wAC _#!GϟgOzg`{S PH>KԒb8>(ISmv0!oHwg857xh/PO` ,cI!.n/;d7kflYŦsPf2"g_y3zQI to5xW}?OPg` ZR #& դ[mƚHmPR-,+}mR iVjZ*ZN33:GYYBcM=؈-9áM9mM\2J$ދg9hk@({Rք7+mjhCDXT3V bk\%-F; oQxwvg㩘j=ʤ2tǽüQ|&$ %"=lEH~PuO>58dUD{x1/ $Mak(ޔ&C\!5qccB;䃁NNƀn4hǟX M("9[,K77߇AFTS{ԮPWMM>@gq% <>ʵi`lPqLya>E O^bRmˏ/~J|'Lt<S)ۓ\^C|؃RsH@i۹ͲN;l5LLKn!\|dR2^ }6vE`!++0Z@0pPpk"́Ǐ6FVeo]욭8ZS?4q[bv&~[(4"K?3J%Ba!Ib8aȞva[5St'co@st(ur^<9YPRxkVEwppQRp!; h\f;T&hj%dZۋ0]G{Rv^P!s!R_]\SYؔB)& 9 ^ft.$8LdJuvCqI@B)_gGs-̛z;?_fF"xzhk0C\(Ih8cwLcB4"0@qBt]:@+8J nw͓ mE&_̦0C:AC47{kG$װJ0lj0DW2aTQ#=nu @d>vJZS/X6ģ!b8v!{AV0'ȟm8HSs rL kΪ0YiKQ =fxћ~ [֌l;ի4 4- &??}YL|e5EGA}v*/[5tP'[`qG';tc-[fM-UaV[¦P_–of,s5? B[8Eckco<C-z~PR1m껛~P*4 1~?I{zU?֡^Fu+K_]5\\Q5^H^P 417\I[\M$|&*]U 'I8j;a|Z O%?Aތ|{S>_gZ!gwY\}0;ƓTC={Z?Ei\S1,|8 !ZeJZӰ)@o{{\}3&lI-|uS?9fA~olO?޿dj.ҪLB$r|@.5c8{\Ƒ2feO#U>*XUt (@fadA@cW}uߜ+##͋ˊE8S[D,Fs`*'ᴋj,xA*'H&z23R`La`QsU sEE>gڧE,;i]1wԡy-֣:S(plɮ14L8 `Hz_Tst B[C #l^`dz]{6w{9dh{k#jUP%!aYs1& 2t\+FE%}BqpQXy&*nI4{ca=-d7p OiQcDEs IA K0'R㢔8AI!QTJ14Oy@] Cq_HbZЁVܠ~MbPL!8X`/|V8Nt٬a`< X̶slŨYB0m-yJGa4ɮ,b>4Il>Ndk_C:qx7l< &>y͇I8j?=4t'sBS%/ϩۏE0;';&M^F7'Xχx h7>\)QǷ#.<KD AV޳4ŬE@wc{n 3@aⷻ`Rntf|UxUJalj1Y&u'Tјr͑;[R-ɊU*"r8a~Σ)+۪FHk?ϣg+Rjsm|5rT7I)Է+>,I!+ &JJ'jtF}m#)iPC4X8+3je7X!7> nz7J"g:";v_voN8۶҅1@AcAY٬vϠ3r=l=P[LR=|}pxD[BNxCyrFu`C? ˯13֡$1R4K&PRSCOT5w,cr4Fm)ĺzFBR*x$W -L.QɊx_֛qhD=7GqکjݨTyrܪ+^U;6{8f{m+4s SU0N`g4սF^k, GSz_aM0j󧒴ڪS(/^"\؞)0:8pXV>m՛=ZV9(qUǡUU5hqjꡡZyzna8Py'L0S?n Z>uxĕR`jm sUG77@1Ѫa-,РS8n 7jmj޻^ 6tt@3UU>ߪ5'^JG|b^P귿2_4Q#|~ـHBa)j?.ӳ/k*N~|9ֿzloUWL1ڗ5oZI7Dt)SiZj*ʽ]U>߄_`Dk-|L}LtG.,;/e[F%jΧ*;ʼr{D8аiw]=Qkᬫq ~6ǀ(S|\mf(HI5NkUiڵ*b:Oz!M+2?ciZQoOOqh+8 cI+^PIEwӌ_^p.f%7JarhccjF 8]l7.Ĉ,fW9@߭pFM qnL9uxnlc0'y-vw\oaq%h GOԫW^dKLɑoHH^Sp,,$!ӐRib$L~Yt*w->f%|SOo99v_2e*GbޛqCEԏ|ro@8w`+\#1]4mn|0ܧ@tv1>듟G?Dj2H]칐uq)ivm㏞ ѫ\y,@Cx?/&1I|`&Io$"MBxyQG!&ECQ@h$&SG" "6үvǏ0h++_1n6CmG)c^㙚R&C"8 AOY 64 . q]wezDLSO_%ix%Lën|&GzwW솴bA xy0~\)+G+y9/K~#Atj M Z (8Rb?}"ًߟT+|| $Ja&w]e DVr|>!]Off1m?|>y<|>y<|>y<|>y<|>y<|>_UX