#!/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=bb694d51661deb3b8aa0c435d56a7f84 # 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 `;sF]w}L6m`뤈Z}{c{%f ᄎ2oziozk67FW|_I &Z<8Qc.1+KYo4*){0Ќ2MX#qZ@:(y,8s}Ihqz3w}3|dN2w% B$1YUffٚ+7ap!^1`V...[bxN04M$Oc~/ 7bC0}m`S3 8" upM%aV~lB< ʌy^< %<1)#j+=Q# `3Ƒ dAlQq߆upZ1gY6 (80,N|*!EknR/DE L/5GEW|@waPe䳮]\Nx8Pu)MutP1`! )L4U`ciWj6c]iS8i ]z*ﴡ6L;kv>&>CEgk}26T 4?T+uP `W~PGSf\*6fqH@TNOTH?%TC5LA6P *g@:2)ȇ#6O\ƍhOk'Li=` -.-yFe`'T 浕 k!0L@BͶ_U6FXcxc^K!Ƿ9U~p%hb- i*`""sr_BUnk%T뀹$/X 4.9lm%sJMZT" @DY'c0v١qcIBE,?DY0ޔ{b|J[0>7qA<֏v#@7u!s=36ZE$ A<0GB/D16EUx r,K" l#$n Gѐ@]`aLrTY E<3=NV>($+a̵6F\ M=+ NhB(bliJ3JRʶI- b3Πo0Llb 33A82"C1mc?<"vc$iv8SX£ ,i<\ܧ׻rGGG q llrq:o!.87FK}Pw<`<6{A6 n0^1"aln Fnx-J8Cd!11Yk6#qNz sO|`7QIȉuw|Thb  f``h`q9_ _e̍q]քC/?Ced@Uw xlf`Vi]^ۼy lLիoWnd߫HWv竡6z-MIE} }|=Iwo[¦ 9^. G`EgL!1_O眙{"j*RDS 8UAG ʛiyn "Tp 1p8$s0D_vu6()RGշ ClnԶ`=x$̊ɣUŅ{08@kA"vPMDl|~I@q&AޠK@Ƚ - '!&#H-3wÔI_%mUR 6؁ eJ䖛A AO>ݨ ( *\̑0)G`U#̷"Q)p6r%t{T}݈ kBr&G3y8$7gJ1MhY+5^Ƞ@36sw%)&r1G5LҒ@wyf[K b# U~Penä5( _8Bw&sw3aPC:3zz9ֵT:J6d[R d^IsPf̷Yf* ]ZL>6 lkzN[)6S#rK~RTEݝ.)e>S!ǵbr6 b #[e6 \VQ&蹷r$<G\@eJpg9 sͰcXO3p{|kT[r=gi12cHжjklRznuO۝lw[hM"Cv%o [!'i祳81#UT/a!+ݸj6Ӧ]ڜ[&{V{{i;mn;ZYeM'NjXMڦj9M{kvmPӞpjvNqp@*H_Qn!&G!$s#p0=J3'eLS[\x#jJ"+Nw \-]l-J뺹c=~_;W~{v|:zWw'vtpZo%b{Ek# 7M4/UgIUJ tD.ji @΍ӴbjMs^Y֡ꚭvQNyЏ+^31 C gZ &}LR͎&e$AJ(,Qhene΂uT~|A_S8=4m]vn[VaY-[&ӓw`7)ąx b)Y_fhY[t wXda ]SbW8,*7`II-$o;& t)ytg2A:yg);f&5K#pӮ,Ƴ,}K W0'-ԏk|v}>߾lv'C4KKP#Ӿz ܳ'œC`QSly8y*-@+;m&QFW>ӔV KŸcFݞu@=xN_Y06 3j_b3'̿VI{?A?M/PC#<8qFr:iV&L1f/7b,GioD?yT]~d ~EI?Z c'(JU pgWP $!b":+%s17i?1<uAP.|𖁽7ʅ'])ZƔ{mRUu*p?eeY/(._эҳ 3R^m󐵑6}^σ_ox ^Y Y4Y&csMB -R\gEB 륍WCBm36IGj6KDe"}t#-U]l=xP E$o#T(? ⳯$*NhfT-h ]{8]S?}Q oRpѵqXkcT68Z-%%2r[бgv1aODn&g(C%baVm8ݑ?Jba;; f%Y;`W u 0l\@S #2woeKpCvgz Nv(t U0t!F,VXE3qy=, \ij jUӄ3Xao Jq6S0l S@{\] n^PR-4]?feZ*zxvL|OCp TWӡi6e~cᬊ-_JHhRl#=8B3 ͉4/^<. SoOTlPa[q pt&k<ש{Φ, 3<ꑍ+"t̵N%8:FNOb?gqYo{oF Wxme 2vO!l:5@3/D"*k~~($=E9S疩J"v6ZTrQf Μ2ݱxwVja:HNth%9=#7.9.BˮΝ,.&XasiiZw ;Mi.9lye?$Y/4^?p|vx(]^0 6'q33<hBqn?+5d`fm ]v^uaց*@"2?g~ U?(du {9‹Zh,r|ڐ-q(i4)qP?Oo 2!tۤA#rV5, ́ L4A31wdfmI52B .c!୤sƐm&l* J4"oG]X#FALMt⚮ɣ9A!ݬ2wj@d;m9`lI(/Ydgϩ)x6s$- D@4ijN7^N@F9_g ZԁY|'?]:^cRnq02 g,(;! .ay!E=Gc 0f|bg*aJ1[{2vg on@)36G0:F, <$pzAKgBɅoأr/ kZtF ZEГoMcpZDqEtXHճö'`Ml1lss}Q[g= l)|zd0 $kgd­pCYDb5KKV/X^ql$VI<ad')VcSfrw%koR,C}֏{>w#XO?zf͎|f?*|[`f^mՋb>?>[ym,Be7˷j{ʘfRA?7zm?_׾-W!3r -G5zw9::=kiuK`Z'iDCD)==iW XuDU!E.dzT+ ?Bʸ3g6e߶Ndh(Dopds^j+pB/N%9E8餈1,RXh5:4TH}4^j>jOJ6έ[grXZ P[X|[]q%`_ ;rlWsT^T:B!wW yhiqEB@Nw碡*.*,5A!eU7(Up1[JwYTfxFn')O|kۘ[\}29OǓLC;YOq8za5/p Ajy6+ykCc_謃pU\'W;o?גz kJ'M?l83~(O?=Vr<] Re2 %HV\z)!h=pG\4VTcdwѹ$A<6N-Ġ~uߜ("ˈaR%"pѥdXFWCW-&V9I:3ԱMq5~z%"h*9#yݪ0^c~+? {@X"A1+DF. ~'0:tTD*i#2F[_SpNK+cv#epWiAvDè:]rFv.PCa Uݫ PJ9(.+ΚK3˩ Ma{Bp^2jP?WX" JmrnԯnY4c-`=e=wT<=n*L5x3Dž͎Դ( ~ɅO\oʃ:UД99 (j;G]Oo)4Z)USR`uTg)J@ʪ]RTJn9曵qV.\f,[<,]I)MJ!i% Vn{Sq8QG/jZpҠb3@X:e<;j Y.a61YQ*Fd%ȭ"7teR%[cFwk3%ђXR)._'^8?.+۪FȤ\h;O+js-|+٤Jpӊ[۰ەNG0$j])}]9!fRJm8Q2 N,v0j%6Kj\ŶZ VhL Ƀqt Tu]m|lDݛ3t XP⦔x.v^P9mJxSL/jo=sLВ鈶H.4Gv\/_6#Lu" ȅF#vá|?7Y/L6Ϭ1Sd^*"Dž'% 9T7AT)RjAC8 K'QwڏĹYyzG5We?V 2i[$OYOͰ#C>^W;'zsTm{Y?;g 0r (IX,C&ԹN.r{var֤LPlNag贃c &].lUK$|a>G>6Nj\nWa֋%~}~b`_mzmT+YoKYrG`ɷ>ٹBr&{3wgXOKOJt*wKFӏ{GOC<RDݷ(+tWAO#Q&B: b!$fHtt(jğf|ʋ[{0xW{ 1L|'Uޅm#GtgqO/!1aQ*!SYy% cߡE˳`Fא}'ux҆I:;nқ׻I>&FzZ)*RbixbݓK >7nFII>tÎ7 ju1`uiZZ(;&"4,F(IR4GV K`~2=p3# rhePD.Jo+{h 0('c87nʁUc#Q9䴅<0 r&MUC>;Hg^AUbCܝ Cw) ; ۸ Mp ҡh4K;@ڒfTW޸1dAs 2{BM9 -dBҮ&)B RȠEpGO%$|{@A4>N:/Qyo(h_LDwn 6lBU[-%%I?S]FL wx`)O'2A#]l.L@$) ^U+ F*<+BŊ-QꅕY0iZYskFBHHIH-!)n.lAMJӖn/R> P9?ǿ.',/|W]NN%,˃ 37.ot|rT?¢ CLT~% K7WF\BaӬ7vzKRZv"A+ $xh;}V 0SR9Y5*O;S#=dSƓ@cf1'eA#בKLXT 65+X/ش|NHcXaoC7A+ފN9p9Sbz/X1$Iih BxG=Qq40C7}XpNq/ iU*x~[іa/V0L 4vE(k 2NUk&|W! M-tя8dqIz6KJ\ tg\$B~Fs{Xgzn"$(+dz ƜLP9bPi+&y2i nrS~1;䳦 $Ia)%aEsȐv)9!D/E)SJey IRC*]K~ rO|äЏR**HLk֙Lyzw\b>[XnCWKaxU;5jI;Cͻρ!=fblE(oHߺ-􇗛"J >toBhCI&a(ޠ# &QG~; Ћ<(:5Z&QM +s0_d(PF+.C~PWסkg}.J!u!!u!hZ@6ŒA(*Kt?ƪ{]q CHc 6f (BP"m\:'m,읙/tP*`ʊ~AmmcŏxX bmYjL7sIdqK75p2ȚKPg6("L׫VN峅m ˷RE {ng6ֿtN a 2uMv=QvUkmEXkGWg&4>owUvK-% rʰ7l_667O4fQ9b /#(Oꤕ߽6yQDeڪ)=>yrr`3 eF=k"k;# eW;3xcҫ(dr}K.q=:qơ#Asf.̔UL}/`8D:mtV`\5la0z{kO=ͿP ^u?P/d0$\3Aq5 \~UZcyF=+\ژ@k9D>#ІPrjj0˔)] *'E_QsD GN #BR ,2v,Mg!kb"i;‰r2C JFI貢)a"E@"+@!&fED Ray8Sc?P-.at0E| :b9gouZ7jdž^Qy<%dT5PeE֕z7VWVhml[vBΑ}4ve4MaW5VYv5Ljq9кzV' ! p" OQNE/%S#.͐LT: z#!HOidCV]yb!26D2y D5PVG Ahb:,wQ58_ &}:BZt:I8`n3bٜROC#͘9UD[j?zl AztNʴ=r>ϮtN"xJӄcxaG2)I/ 7dxêxF`GEdCQӭ `e!=E\czʀj0y&*&ʘ" Β_]IoU*^I 8fqxq!KfW*BE; '}0ѽMӞ˲(&s ]C%&jVfluD_~|V&חe8[UQ ([0 Zh Yzc8)".[) o}_zq~l MF #c\ᄂs7H9v&+mG7 ͌.ƹG^g>ة"~=F }J^aRA*z27!s(lc 9˷*\`]HL8>&OPn%0ďljǣ:AOy_?V{(Dd0 ߧޠk2;_ 'U,ܴ2QMwTһƩ6̱nXU_/q0f>T XYլzo]Arκag!5B  :0@?T CSjs'bZvEdojV.d"W4 {us.^l&7F'/q8) &m0;GQW`vv 9]|_nh$Ųz:@PkV9q/X"r(X%+__2{[YS,`iPc2wH(L{g,X TP1{vƵ;Qjc~R`wSRp9 zC٨p6$1qwdL*q{ve\%oJl A7ptȔiy!&-&ezJC=W%NolO?Wm0# pR.FAJ0N:)XA@9ۊvQ tdFFN[Tj͑ц CqDU1G^$QLfܚ8,{ĬlYLAT/ KqTnp~![d74 L˘AŦnb#L!U>y#SɤAr֍ji$ yxj)ba=i9Ou,hk,3V&ykƭD6)ٳ 5A RT6R뀘C*Z jWu?{ȍZ0|nzT28^x$4>JDue[2*E^ LX[3Xw\핓w{k=8J<1Z)A1/$DNYӹ5 а>?q`Nhd%pU#L2dvqGFsKns1sw _fNXCn-KS!TJO((0Cd #MW1bQ*@09j'WYQ+1WBf/uIYzRtj:|KY-!@wCwm@@z1ݻik&֩z\ҫ@K K5sӹ8TIal2<n0٬9!~ oQV}h毡 `U9PfK@ET6lniwө^'83#O9&$3R2 0JpID>poD!jJ0iy $S=VsHLCB }8*6.qwbgl)z)ER#,>|ڢ6藵 ߳8jp~Hka^}*_#KZxa&'(y]'UZI.y7ߞoY*Al[䏍J>Fe|ӿ6*~>㵪|Rꭹߒi M/'FMd~Kմ.sdk:>iKjzi/KԔ\MO}kz_{_POaO rr?*k¨h_h6?)'Cѿj#ucu.SYj(ՊT6Qm~Z5Dwhr}@n\n3/q>j\.zwxWgO 7J,~#F9('9! z1D(|%wI: iRDdk ~4&#U`ڟ .o6&EGs&i57Q3C ?+(1,L(?c,`yhO,tf{ɏ s/1Q#̾\R>b9L!)Ivg#Ba|GMPCތ֥ q:1aI&yPx>f4ׁ_.ܜth:J[Z' qSTQZ*S4^inhQ(1֕7&֐>b|cױ}9sMs'0wR>N{V> 3_h $ V ex*1.J\TkJh/lRN\+$eH}3&w&ÔN"(z3o  &*@}߼w y=I t9bz[i_fq'$g_?cPTF0n˛Y@n:ؕVM[򅠨U2NF0qn"15 d:!VS.jœ8HK {xYcTE4^VS| ~kujf>nDnĄ-?s tGƨ b;Fvߪc J/ɺXq+m"A!g,nU< ^thZc4M:Ʉ-D}\ewUZ'7f]~}_SWuU;9}^כ-?c9+\;U{ڬZ(7NPެVI5kg%㓶:l5ڐ}Rcl@W{?{F5>ƺ*pvvvXmӳIn7Z_j~VW~b^Ltp纠 K!c-<,i/uN2[1uF 1/߼&(T#Vk;ɰnGu\yxY?ձ5'XʛF^Tf \* AfKyI8P l$o5dА^pWU.}5a+e zsu! uix )õ'T"0|_Lzs){pDvtDJk"")|s:}]3OWXb)lPʣƛF$w;6 BLsHmr4V[~NǭE?HSq2:f:$"q̝3Hn>-T?Ǐ+Yq3גz YXuom'' |i#գ.z#A]+Y-@fϻV7߯ÓZ5J#>S18n}r+\#4|ԏpV=NkBa^W^uܵd[_An]]?e@MO{hgV ;~/'gЩzwt81%6w\L4E4Zc?ܵ|,g|k?8WP0nzzA/j!T+r kޱKHPZ?pA _["BaFukТ:O N &.T@f)2\%1}aF)^wC  y1hUz{eC8˵bb8 BN׽)oJ*3MY8Ǡ?{5H)C٧TA45S4dͽ}HedIKhm=v{,蘻&ޯ4ig3FMoY[wB"H߱Ax!90;-1&-?9g h}yֈh< kQ>/ԭ=*ddvڍ(k\AEUs֊O E 7:ҀxRƲ\` 7F,Ȋ0Ӟ1&B6,}:]ľ#|@u9#=nMВSquPȫg8!cPzy(Tx**mPzB]C[V,g",HL&tJDžMG57N eG{lCBK !Q)d`Uv@0A7:xј`8u2O;#u6 ZAp i9mMZ1#H?@ɡ%k9NpYfsJ))G="K;7r}I݉“X0JY.~|^•eC^s*:F~}qa6Ūl8ð%٥C [XoL+QD1iǁ0 CX3B.O$հ -b9ZEl p!DzÊzJ).)Mk $kbd&n-NkIӔq'N\#_ωA6:<;2-'|EX^ѩ`sN=^#1 @`c-s=Fp, (^ӳxV;] QݐW-sB|,Ÿ{mPKX_AE!i4AOW{p::^01KL"1`^}kdo c $a]d>ណX[hno3ʺ mr8 *1Xlp<\Q(i8!{}ԥHD(ϴZC$$P1Q/ޛ IJ͢ftx>*T(G U^" rBX6DgnP> >_X_#\Yx2yk S*W:U$. ~Nl^qxvS\@wf^DMHMQM@MTau6@{N9'$Gz 4%^WP̧BDQ ;o%90NvB!oNy'm/Ǥ07cdRcJy,nZbY/۝8` A2& ͮA6?m㎳h.UЂQicA쒅؇~`tj> t~s<:t|B2Hd7nD1?Dx2 c(M"HWbݖ}_2S4^-oVDGx{d7X&(o|K>/5Ps];ng' 9sL[ ,ݲdllYQ@>!RAN]fZ$M(aqO;'o5m#,@(&#hlj4, sW"zu&tkG&VЫDIagwIrc(Ō Ր<VE.rm( j녑bP(V(v 8b2ub]?f|aw? #\QG Iybq m\2!|:l)T_U4{c0ٹVA Jr+Qz!;Cdp< #aj"s4W)fKD ;,ao0 ק8@cդ? ̮PӻM,IOn7Eo$1NΒZ3>Zsh|> zmpy].UcX g+YXő5Ae.3I9M{l*.Nu+<v|î Δ]gH;RRV{Bz bs(Tc{{7Y7x]˸(餃w+,v/pއWW}9 3Pg H_D:,h?~S{728C'˃>Mfr3m3 r9AK ;tt$.3-3RpS }Ims$pl끎vTNz,' [Nۿs6`ژdv}ż!22j;aIxK:R%wR 'G[ X۫dgEP8Be6?$\J^\oW\$L,lV&2o/#/ظHb4`[?3=,H@mi ad4腭p~2hoݣr$[0'A{EH./gSu,-Sy3c!bSU qS7WZ#DMeb:WhSAxvy$|E`:ͻer`4$IoܣSs!uڑZcsߤnW6Oʰ@/ӹ;4XI (E卷{L-pcsn㓣Q]F\t8\KGrU`޿\bqz:t&GᎻ˜DDȨ%7>ĕ%V _}G.+j}"SB[JpyP}8M #mPk`gTnzLј$NnF_M&qwz}D tE/BwhڿpyΨz =IN9:aLRDFzg.`h;75eI9ElJk~qv $۳1qe%Fs;HcHdR>XTc,o8|_Af)˜z+Sa/_(TQ8Fw gO,{IO׿vm Y]Cx!I6Sջh!Ci85Z v}."K}h+BZ0^հ[21QF!);I||׃7LJ}}ꚛ*˩9-UI2_Kd$m4$:>JgH#bCez]5*a8:eMqNEAh76[:Vp^)"+¢p_pktÉcY=sC 1ù@S`UT;PkfQɭJTy5OZd?]Hhuv8xz֦ O+}Aځt,`:H<*F%wCtN%(2?AHlCjCjP7O=ѹy;qJO윑Ƚ_KnS?AMƈ&9::=kwwǵ|n[>4:ZFwa g"V+OԊԾrOr[ C _n("Vpf} hgA#C"kíGZCn &9\'fQ OV~&L|3E$u,p3%ʖo[fՊn;ema6EIg}_=)k;c>S9H^=cڬ"f{UcCAfud:^ L(z>:v"My d^#I՗8,%'NB>KuŏY':vns=a~* Onձ<5JՖa!uM>"K]Hn2NPAOΘ5x ۹O0蟱쏻AɪV襤~ZA̋Rc\s+yH~d^ O~{Umաv U]wd]ƍv/cyvF@5h(t3y^m>/I8gC#aHӇfj8qjPđis'饂L`Jh+*ZPE C3GVS8>85CR|szjo^SOdpƹ)8%'-DdF Ed o!Vv&S5vgQ,1,J5x@@|S?|,n 7Y3=K*O=:flnͪun#P(V/E hfn6M Lx7TF<%Z.B8$`F\~q/z@4d vU0 n&̑n2^YFlm:GyhftyiU7fݤ6%,[3g4%hH8) :.bHUjPR9Ɛ$ȉC\Ml({;O2J?D/c|9vg9P$|95A`` #6w;G i3nr&+ԕ֎1:i؎T[ ErrMe IzʡwK0YBu2o!-f-<5A"ŧ9ɮ2nגiڜ=?EShd9^W1z#LIh5 Q~Q) z JM{꽳y=}jX5bęMfd;M9Rhp R׆H%PtyĴp"ia⏪,Ӓ\JEc*RјA26pPe!Ѩy2}ӷ$J3fAl iVSN\:iyhQsI=3; ff4G}R?/ʂ穮Y+D}Fd]2b3/C:XAX!%%zq4L7 +CjΒS)sgOǦ'<@w؃< .LV&,(24E}ṡzUk0k?YYƞXH- J!a~G9TS<ڴPeM τU5ZLfW]ERDZ{~qix 4}ǃWh< u(4^ a&g1:ld.ɕc ^?kTMNJے{;=tɿ: 3SVVۂJ+nl(SX <$_?Xh- Z Xy%|QU{}M*8Q&3E%r!zoZ ѳ24&4mHce|ܻ%3`6|F>6 s Svd嶇lm{."T!0`{7j(i>άġ^<1Ji5B0[ WY}ճګ]|a3M.CXlVccǟY[_[c-õ0e;ud?6zd=GgW/l^"\ߐ5Ɲ|v.w<,FߩDb.%xDf(TPY8/KӼ,!XAx>D; w\2ʋ9 xNV6d%S|b@{'|]S4Jt^AΠҲDE "L)jɢAcǐ 0Fr}@o @f0? h# *F@,WJvȡi@>.*1:\NMxۏgSv#&\Z2HG؅D6x4;meqv%ٝ `|zw v;hA)AwGEALh}Ghp;zl3zdz첰"frؠG(ZyeZ{_Ga"IILD9ܱ,[Glh?oS7N{OLՑ~/'Rl8Djz 6(*v! V6j!ie38*cE%xvL4 bl]#B`GF/cƞb#K& TSa=Xah|;@HL];ep۱#o0gC#96yE}[B ҈4IϣyVoh✄JK佋FƠ!j^2/8cvEM ķ07tB 9B$\(PYsB?VCK&T| MN='h1Eq8z v2X4P/u`i~ qt!-Nߞdeq@fb @s >j ?rqK=0!/p^'Oص@K0/ԍL X=B0 @2̰.P@c_ %j>e6IxMdF{٪ZeJw ,ĵlbx1R.-YMܤԜ)L|#cilyn>ca$szZ;|i˔59Y#]}Y0%gqM3%$ ш[N19"vͣ.@#Q]Q Lgd _,OJZxAޠc޿Qܖg*l5OA!+'0AfՃ&O9ۇrKL3YrZoc4TȬÀfT SBEtjZѡzc"gኊTFR- Zݘ3E6֠_n8 `4f$ڝ4߲pF_9(^X 4Ph} n̽֫f_Hr=2UM3YW2-X S9ţsKDx6YN{%9qxmlfZK9Jqw43)}-ɿ|S<"Yyic+ Mb«7App`,{$ u%doQZZ :9 mrtz.݄êL؍VŊau(vuL7+n:O&' 65ߺ"0 2t]L)jѹMm36L C1-hF6 9ڏv?ҾQNtq=bMݗ '/,!zR*:`;.qm,ytB7Kp tw]TE4g-מ*nQF0A4 Qn5}Sōt]Pw$k>^t^2=*IV7 4A1\6J85֠ ZCYa\vj< f^j ^LX ^U c!׷dzk(`a 3W<" ^I}2k;l H&N8\v 5X|ez'4x'Ʉùw'io;Wg4;DKu2*VÔǘ%( :T;w,Go/~{u7RW0 ^λ>}"4>+yuzFp\9I%T̴̾ \џWѪ$K #B0,aic=UԿq%OxKRQg{I!mLH.7*\y]r@44 orøD5fA!B 1:܎ tʬ$h l#;~j[ľW3Fߐ995 M  . >63(;,Ӓ,wc̄]2ӈԭ$abc]&~cxcAqt ?neO9Np}'ߨcN]Σçl52wpr3Χ~g<hn*eRI;E9Ivz6S<Ռ${x(bBlaGЬ< a5v I};kQ'c 24dHi3,y&;k1&c0{=PL58K 7g~ v/UM/fCOhfkGnB\DE"H3݁ts}+ӯ_b*GI6}nekyX^V8[pW7xOuc80A 9Zh5x : FVI-4WL#K z$'7o) Hs|>P(.f ù$BwW-gI?Nr9,b*keNZB4^Nv[ o9s߹.'A?Ǽg5 gO;\ΐ'oC#z>P(A cRATII(N\_LsUg *)dWO,MyI]89^Ò{S3rRדL8mY/4=nhj2|Whxy-I.F2N.w*=RSyd冒O1xȓobi"q~ѳޡ8^iFUpLmitp8y $Hb8F }H*ԺN謎`ii}4,G'q[C?.S[].ttCf^mu]m'EJ^R Kd)0RG@FKg&jʑ2Թ$bHx ^]'Q643tZ?8aޢT &XX( U4`G~Ap<cc_+`9|`wpC+)x_t(ngƁa^vWiqc^%k LwfsŒFk1ΥGF^Xw*[ݕzxk~U??PQ.vd2+TOK/W~k([ru<ؒAG:2AO0R d:"%҃)̕&.ڹd'c7%8$\$+qƆWE3}P[WA뷢lDHdjcq@?O^a,%`}v/*ڊc H68kqda!63{oMi5 pk-Cg.'lP1¶ɽn7 $_ WGQT?_ìwMkᄣ]2#Ỉ|.b0u)xI A,kYhpҳ|sIacڒ]9~ V`kl9UfEĉWiS\4Y2?xAnkOCQ^´l7CP#IY$>Q3)|_l鵙CfS?T,VOڋBcVvҗ q/W;s9p )8.ԬJ. ڬ5ix} _. )ZdPFg:."锡ܜ$Jg#^fl^hE4@KN Yhx~qL1&Hr%1)YD; b QL nh1р_΂(MCras)'ᣘ" (kG*HFXD 2"luN_$Za_悎hr=E˸.QѬ=LB!:+1Z$R=_\(@fcXM $#ن ~}RZ4vYI)IGxA=uvZfo1?Џykp<~"ձC&ȹ{ |2;G^h0yLf|0 "KqKbu#Evn< fݢzxYw_1Ih#=FnBC$*#fjK].ߑGb :;@'NN*ȣ \L%1O q\Kwo%2s'/R_\s&慘sڀ@}> .%8NQ8 =~M}c4mY;Jڐ4R8f`6=̯x/RPWp@^POs- m=U%6c<7 _S zjx M+B!-ٖDj9wypB4eVN ]zh ۨ-!]B89g7 5M70y˹HĭЅj,vQ T8e ]{ ^$QrKtpk:c832K\6he׉ ! ͻ a\=)VDLucdE%seB =':ox[nO+3wP9ϧȶM121g0Xިj_)yׄ]: Qr0FB~@7Qo)B*[gr52Ұ7.p;$c%jJRc tZucw7E`\Bq4CZ@h'pOUCv@3A2pgX.YOBRQz)S ^ u0ʡ v)_EcT47ŘFjvZ'm.bno2m6\*'# vN+vnA lt uZi$ 'JA~LuQhЎ0v| ׫yrBT?;1#bѓs$+.'F4^#@>K[zG6J! *_ǙO?o~+,pAU7YjQ?xNQXx*1G;@!&mIP0<1Ve(Pp3S%'锁8EˈF`!p6,E426u\ D) ȴT[1ضJlvC#wDtCY7J)7T:Г!hy #o չ3a_BGee)h>0=C*t]G85u8R-,X=h,q)A#. K3]\d/zznjT Z]w _W{e]NN5/_իz#4[PJyWU=m[-Yg?}7FUR~eIA e6mH>)Q@՛W8lQ1vp҄rl7jgզ:=k ;h bZ*zU=< Ŝ97nW^Y;ceF^kc 4N|1Cw%)U3H/~t~Κ#l8 GlnudFUon/: 1vL Ʊy(7#K#Všhn2{e//ǵ:?r4Z"L[ T5,:-É:qU5Tuu/a!lhjdi+yʡ[f݁GW]_)慤~MYs70vVsZmڅ Vk?,ӳk*N|9?|fYWL2]5oK}K }Lfka(vUb~!xϕG}[LS%qԅs{lK+>L`V)_D*=;ʼrk8PkBF{iw܆f*Ǖz2TT6"e+Yʳ2C61M^F٤=>/8OPx!c^vWyh+G@|>{Dk+(Dh)buSoZ?!{k 'Cx#'-۵ {LFlk96)Vю|Zx/~ic-Gzos?+? NU}-KЊ|$1#<Ý"S|&!'嗕IޑRLh#?Wj#d;aA Fqo@]#B% ٟ2?T~e<,񩉅mjmpvV%I2,-Οk~:Ϟ$|%8_?_?_?_?Q70