#!/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=b13d96c0ec323be2f8db6150d1bdda06 # 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 3^'/?'Qx{t~ÎHgn7G7}5ayۻm;v|&4CV@?l"Ab }M8 BDԲB7~`(^'!HX6$Gsus:HSM>Hf>-pPHpؚgDc+%,Zf4y`L]D%eBH 4x %D <>CLXHF0o?TbA?knzbvS*%O NL4#e;f  M$R`C hx`  E>ri a5@,IJn!$Z$d=42h^0$ʰ5_i̜#}@ΆӸtL63dndXñf\Cfe>ue^D7"\:󱎓#ԇ6qX3}hOi曎j90d#Z[OJ35ms[g$n1ԭxj斎4[ 2HzMs> ~:5<"1O'0ٌ>5 b^]ndIb "Dr^Ddc2, j3,0hj0uN2TEو;Vf\0mtc  2ِWR V[)/6i"gV(\ͦ5Cݹe޻i Mcf[Yl ,`4?Fe_DN<90W_/*V?5D_ݮo4%g͆|)! 0ކĬJO"!SoTQ~0;yr_O5IT?25wrU_n~~S7Y6 [Wg_'ûϟϠSy98>Zl`xlxrx vuDk7`r&የ@D+F-N7tȹ5 ̳5wm,j4j.5%[zXFV_dE.D( ٨}:22rʪ,c?E%(FbE+xxޝ5Xcz'g5fųVz21T:=ko?y6ae/@d0!9V?ADrU( ի`\J;ވԧLWX/(?k$o\Z9ڏ7Ɇ)tOUZO2{yc?M&gL!wYO؝٩SDʶq>,} )W{y*M#<`& |Pq$rRPАZtg ߿Gg98'PSѠ4v7a| &VSCF%;vϽ4i(v`8ZG(DWB6u?=dCǰ=]Ј묑"XnI\SQ>POG"+;`MҦLg+) ʳ#l-vp =DOZa & ù`''qA Y 57{|zhO}$\wZ}mBʏp?E>wVlAٵ :4v|lefݘEZ\--<%ZL;LJ/c5Zw > |աYAQ66F<%|&@3ϧ=rD=W_y7MUeyz̹r<ϛ y ŵld8Zז^Dݽ*Bm_Qt +w@|6)?ػy|<'ǃx~[ ^=DbT׷)J|( pب<UQ=:E1?K+sxlr=p9l\ '5sxU==J:8i΍f)ǚ;c]hv+.oRClWK8=eTg0lE@uؓ&1mtjKR?;"@|21\pS7+Orcr+ ;g}Yx @²L* nC%lU."x/|>,`ˡkmv@&1 VӥR(hY/H (uѱ1udw&vI5.2$0.2vƁXFq.L)&^s(BfsECφY"xnU̐ ֨}H))4: *2~3zR'*%|</Ow/+`4bbXB"\`Y[bPIڰ @yⳆ)hfxk ˶F ׂb^ZFUr'm3őStBF1݅:(%/ *M"σv  )%Ym˯r_1 Rupnحv9:^ՄeST3[fMBFY.L.])RU6aWXdQTTІuKx ,Ӻ~>} /m}/Q[mY ivV%y2"H3k,0PD,~h$mkY IB0/~ؤmnDK-mܤ4ff.t6XVH _ȗlhⳮnKUJEI@Ize D|R [KkfͲTWiM.w"յ'"nI/QrACвe2ŊAr!s$g!Y$|APn+D"g/cƒ CxH0 CY솷.*Z, D}`!2qN>M4h ,kL1.HDDNkW*Tr;8A'~ jƆSNo{$\(g [poOUP{XcPZAojXaEZ2[no}_q\%u P&<;v l  o -DF|o6A< ^XzEU@F# bS]-PU\x΍tE^B'c׽(0=>ycƖ\d{ڍ ! T!ҨU_[yMHIDX ,V:.5<}F#d`i+sPL +5hSa7FdI(uC ϿMw0<h'LU&\BI.O܋ KK-~YyO8X BB<~֊GΈ|8 \bXIѓReniJ4K$ + /DƩXuа(_!ʫBbeWB,ɯ]0O],lۃ go,mxBYUQj )J~+ (V,v:G[Zɍ`и`prtJsE֪0C%Bvr}P7h{1k z8Xe7woeGj]DhCbb Ve/[*|NY\U"LSBp%>wQ1WY/~^w_g*o(>3Q>b$L>@RF(i~;%$իvPkiF]x{8Hko:hj-) :R9~6t׆G^;:Z+F[;OrT_Jz,z irJsG+.EL_z,}@wDv8ȣžb\)ꯛ..z){=ipܮr8jco4g-!~ٵtx2G7}:NڐE\xN*h$9K d;*`? -)Nq(~8dFl>ʩ.y]yە< [`aLIM&I2`nw:L>D1K%ث̯6qטB&3jQ٨5nj9uTvzw\_&;p^F}܁W<3JJ*`IIbLҗ&TH s"0p8xzt: `_Ts}=@Gz4ULY.Q*yUv!zZ 9$*T4NձjYDmBj38 0:X8Ds$HSHγC [`Ê|N}e+H ;uѓR"X󂱬ՂEW1燐rgv}zc&(vφdm#u"IwvG(دW (%ˢc%\s:iI-릓@2TF #Χ/=DDFdFrCT2c;%˛ DRHQbEl1im4P{u0;vJXcE#yG>ۀpH=ЮHl9:m愽P tĥP^wIնz4 ٧4Hc=|ze .߯H./ /%m'KQqXxi2ړ{odح@a~QHxxֳl+ret\a0qޔa8^GA"j]t@9Mh)y-<!y\?vNO|_O j@.@WБvo}mszq$$;mdDdDΌ=E2]!F&3T&j^g8z*G\ FUG%1EIO#ovxEasTm^wBF*|_M{M>_B~kut@9 FeI4hBlNvLX~ޱycRyEQ)5o:GƯoPQ~xy9MP@=D4 FNY+w-Z3iAa0FȾ Ėz܁* Ph.B:j,?%Ŝͳ0r'*Z)PbI;~5kE&")jؔ?- QXR$F TF~S\ |Iw~y⽪UwU+_FKR%Q"r'9>lǍL2~ÈX ucn!s5÷^&*rA"r do3^=ڄ$LD0G-ەSWKKD? >,6S~J bWK mryT?[tzQ|K !GdZDI^XvAσ6* 2gD K^%8ioQy> "YQu"=L[c6K@T9ʣbNLya=wWwKW}χ (C,]I3*ۿpEE %ЏY( x fA׍Iv&fK hh C^f4"ſ6w<[8Ã1p߻mhֆy0 W:$aֻ^0z5:v:Y/"᪪mUBo&Ck^Mm(UzM*" 0h"rBx=g2;Tex=B,C\GPX7`tUQr\T YI၅ |=}JO=g;2cLAc^J-dKA};5p2dg@hcbsKON#ӵcߚH륅!xܬ%o=?-Ӿ1ZD,eFN䃳pF 'HX وH/hyD}$=nۣ+]jkHZY-´FvD@aΖi\T[B @x!+i2*a]:sBS&[л  ظ"+bkEX#F'5Nv;so_kr5k׺!:h.]]>Vt?Ե:+7+0i;ka]Fo`\`LAg2 _M '"B~P $:~9}C͐MFwEЦ:lSlL0"ό<}d1>ZhE`yVE3+_?865S=L JS`hcw WG*(Rfڽ!ယ5n㎭>_g+>).Ey[4\er0XWVY;LkU !ub~ u (+mݍ!ۢ=Ǭf뇻7q{CP?Y\2 40&[` ɇ(!!{xT"QRe 䗴[)Apsl|Xhc~7BPPo~zoE7YKf`hdi¬rJ?E81^=&Q77xx{~ҥy;=_m{R(MԌPWEc lyl;jKY M&'Nvsju[5yʆ\ % R1Dz!Z^Yކ^Yؓ7wKщ1B `J=Տ`&e\a#+LMO)wt=R =Zq\$ €yG'l#75"*6A㨔 3,mHجDn9:)F04vuR5R+4 QpZ|SGŚ2Hh,Y$ΆÞh=r6M&.(w  9g,zyvt_KDg,]8EbO64LPAx,@*"0աIL!יz3:7Mbec,Ioxq/oob;,w2}8M dWy>DNiii*yzIP҅S O81šˆLZ&.]RG/K_`~A6ȐYX &\5x4JVܽ8|lb tTv/0I bRh[ش%П3]Ψb̪_Q\$R) .j:]$iB O}BHX7iedupX)Y%9MjW1 xza$<ق!K$Zb&%oRGzGJ0Ag^ʱC;`4"8z!WDz:]DTX̻%-t {VnLYۢAf8Qf -Z*EMUpD7JbmcU~" =2K,1E/\y6ϟX^~VYE,}uꋍ^8Ќeh>{ hSD_ˁ2OUPM7o 9@S>$m*j҂(b"i (P/2T4㎔ٯ_mVpR23X@ Nf7m@$/[@hF-phiJSQSBad}TS^$׀F{#."MQSout#6}<೬$0,Fe8i\LO!ݠ]}_XA~ _WGZug 4${4gi'Gi.Xi:B+InqF&~taFUؤnZ>Q^&JR;Yketh(am \(0W?8ޯך2x-FI14x궑X-@,(lWӖ^61%*7 0ź;yj^jQT&7o~GW[aBBRkwNkd@gUbܳh (Toj Aߞ4ÿLEt J:J!HeKJ ]꒦0JGXҗ4r{ 'h1Jf$V'GIepߨI.ԶP2k}9pc_ULFiN ɤ+[K2hlB UNB]JgKYa4xEd:%^A$/TVA5@)Bbg]`2] #=jZ6AW<<`IseUbrW4n{,*9As)| ]tVA,@X'DNu$, BJ$,,@r/Zdy]o9 2d#Nݻi\Yhт-oKhkl.nOم7_="bQlGMB]#ezmY۱"TPhzf´֭5եkv`BtʈP$e*o%:!2-#ciiyjIփJ J ]CyxbokNxm?lrd0b8=-ߠq[XDUJUX0LJ~{Lyv)\jw7N+33p,n$d} 9/1H /3Рӕrdst'舼FeɘNΩ$-|pFcQ[iȘ&cU1f0߲"@7DJ&w:Mq* $1nw+*~g0밷Ld0BCQCՐZgbpQշcHm7YikJ|UKaJ%Ȳ 2fTJNs]xQGK-K2%RЪl@,տ:?.Őq!b)D4Ͱpz=,ɔ<@A nE_JF #$-4\w7[*07(/H Bb̆'p M9 əd]: #Y<037W*(3'?[wq|-r} XSж%`vCߐ_7]{sR;S m¿UQ68iTUډc/I|ܢp8&*%9 NIBymp#qz i9*`Q] Y}"#H7@bK<|yL *BT2Rje r S/MrfEah92mTJr:nk<@0zMbI\b@#C1 aY1c:PI(]xn1 4 4H˰  w9_2FNz!+t^P$u;i:]n* lF?z]b0Z.ED4W:w 4vH?F}26t LSAyT >@!HQXِ"ؚ@I%<lNn6OK% F!,YLv_NQ4AjPΆq|"9爕%5SI-|@Gaq|ss4>rps@ݔQH+(Rdܴ=;E gZbLjtUE`33{A.\q,'# RɁ ^vus;8ZMbKz<'ls0)ͯ" R&ZI)%46}atfE8Ik$0*\`VxoSr(X"ԑ2%1@ƒpeIO^;ØS kaɿy@? (h>@&mraܔ2Okȋ@tvJF1n/ $ݭDDfxmDd9e-$ 66DL”BLTTx13Ų+ ^ڂ~_}.*gɔN(l6m֞ډc@a::Nf2*o~2X`9.n~XB 4&JB?#v;྿'ԫ6158b g%~oyr] #xpkK x9玬򎄭8[0(}LiqMxn63h 6_v$i[>c:@u<}EG"i 6C]ZqUdAMj0YiBGP/PLv-X%FY,s&_ffXR1MGMx3$Z) 8fil.ͪ.3?i /kFSә[w Idܯmjf z$!BHϕ=-Lʜ9#v5[LO>#UQԩeh]ηJ$!`" 4 cS}圏SP3e nIpF~&8dr  Ugy}vucѹĽ|ccJ_+tϓՍ'iϓ{Ϸ|_ }KV2m zd]/Z/a}.p\9;"g(˷&3ٴ,cB˻.[h0FjSQHpv|KjՍ8h6I"^)6s^0]/Xt'B84؁o q>zۧ/B: r1Èa8yW3a2HĂB_ʓв sHiC;D6 s)&E6u69UjY*];|9G!]1zf2.%vTehxL_]7nԊxn:!G&jۡ2ތ_ttؘ5t}8\PXE- B$ZNب$ͪd4ȿ <^`< jo{G 58nx/'%[/ue rֆ :ptgd&m6c+| vŪ`dHeƮic܅5S{с7؍ްt\莹bP"ӪYʊM~:$׈s|d j5LSI;8ڭ=خkLN{O7v+(GZXQz5?8ԂfU0n6j/x2Wt ]~S⁜{4sMqeŲ[C\GQxU!Zvyg_FvevV@$wK+`!{JdrȐpF']'.PFYbq8X^F9^?,XUql\ڬ(# s'g&^&^7'x?7 XjiJzm$I9oK_ y/[̰ncXdhPl ~_u2͖&^]l 9R>hՌHĮV 4Q :eޫ^BP"Z[ˈ ;I_zzq˗#-%&$IUq.-ϠTcj!:"(;~n qMUϕY@Kd&fAczx434_6)_8x"Akj`T&J S7oӭ Z?I RJ ;M"?m伐{ bh6+GJgH"$j$SeY}'BG|ɀ?(4JwxԨ5k_kPxv8˴ZF3 n/*+ÙJvML .xtLLf P3c9R/'1FŽTDf*Suv*xRn@n08PykjN8+uFYw0k2m+#2vYV<ڮY9MwDbq= )ʹ8~ۍȡ-) #IjfGul0ގc:2?{gPE(86K/i<7<4aJuƄJDuMύTR\w~|Ls"U4n=i=Uh֫kM. R0\-C?_@,@ (p3T1$)dx@\{BV&hPK gyP(Ak<̈r)]iʖh 9aP8l43>*&'s-=YClEwMB%Nc"bʽCdAI_`p1Kğ hsا@I͈[ѭv7\r \_>a1#*ЅN'y*sL#+ʁV$E1豧2$"QMȀ͗#31Lq!0_$'Enw >9&בwϬg TFTk/1Nr 5yzȐk>Sixce'_diA$N*Za`5{%5ȼb=nNc.1s=Έ!-3[YES2 &C*UIJLF+IbGRշ(5B-aCa E}*I;QC&b8:Ǫ˾o5rF_U'ԓ, BgGS9:{ٔ 1VM6jl3K+]@+7++E+-9ӞZ>{%/^RYr^DVYL$~ 7¹O0]tL\1s uK‹jߎ8:8;Y'I&Jɾ D"SRJD#>$LYs=!G3Kjrzmde-#KnնgKkYrQq[&R !vc a>  ~&XT @ܧJfxug[(GLO-RF.ÜCg2R$a!LtRMc 4H`l,XOyB0 hZxV ^CO(uT} qD2L#PF aՔ:&S@uJ =h識rzrQŅ|'Mh(}XD`u9adɋImڲ,"Ƅ6:9Z{ 磪U}' ]!V*C-:&×, o2,4T:IX L(!@:8:~޼r&rv ^%L_gqDv@`CDgc|<sn(\G3sqJ$ q>٭B0 q)hq6U4_CFwYCG$חZ^=It#B<E]؎?%a"}I3UN`kIR[P"=?d~a|_@v'ÉLl%E4 32]K òvYqPA%,>!.vCUl3db!IaA*2b )&9 -1*r5FܧDӏ"#93G_(JCXڴ{0I j5%MZU8[{nb&^& &!P5V\sf x>!u\w(N;_ab@sk؜QMi#{qTMU[ 㑌YC1tNՆ#C?%fAm^፝l"Fؒ.q A1]8450ӝ]#!ޝSOF9 m)%].v IotZwH`G"2 ^Hz?S #D6ebݬ]EIe ֤,5 3Yۥ[&Ҡ5YDrqi6l / w ƿB)acT{KaG6!3#9>y,/h2y#ݭ#J83j8ˆ,ӭ H9WPӭP OPqɞS]+:GGrI48Z[f<2O6j'3]0_Icӈ-o%=(*8i_zZ޷+-LL"K(MYZ:vlTdŹ-úP:Ҹ/ ax؞&|h[kSKg@Y~?aٻ2VU0s{6%A]H>kۊG. \ړyB;'Gp7ͷ; CiЖ˩hTl[(ȝq|\R!ȦDkȻ@k<.xz]?A,3g+~2$s>Yywx _R&HY5=ўKZ᳑R2d7Ѹ(S$)3&&fF& u 6Bqs~;i:.5S~a&WMnن (:6rsf?_iW6wuȆu.!% OR8<.LjBYWmGn'e`Ҹufb#kG;fI胻 hY@Dž+>4{ %q~,7w|6<.dŃǙoOIho-i'  _8oPy@bU'25qGV<G :pͥb7ܤd r&z&wN-2Ø.>n*3ꂂݨ<&gȧFl<2"Ip+<5l?rD۬(p*܈)1 [o( bKl-=͍<(&< NhFIzau'eGXhZ蓻PNrbN~9ӆyQoF`P͝iȴ͊)c9 +J̬@7F$x3z*޷a 9Gtqƅ&1Bre(Ïk\Hs3B;z3ٞ chޫ؈+S5WX^ ; YU&rU8.λGn~Om-A(ii$ &!%}VRt4"HaKPKAdjA*= q5֡hI/ЃxrQ04h6F&t lP׻"<ľ >l\SҒ+q́"3Wai\to%ЃLf#@t%ؚ}ǂ gcEyIJ 爷<cF\щG6KIQhdc5s^t,P"aԜA[ԏdsm]P /e+BZtǏ"E.Me8X*ExIB!x*(=Aۺ.΂5]JTApĈ] +by,𵲰0=y|hQN|s8e[nz0d'sI-h'̇-Z641b :^`o; %S6/qPz9t>g\V (1Fkq8r G_ ~t4H7C.;IwIcQ}lԤ&oTzjT{_pOa3^&։ʵN`? 8bF({#+oQ"c9$9'd UD;ҺH1*hqӃk䜁p5j8`e02b&a$Fp<֜Ip̀p\ cO7NaDǏ.0MPiEShPcdpIÆwr5wXM;i$8X NayD[i> ;ZO'm*Ԝ儋qJҤmt.iZzo1tet+,ČA) P$fP P({;֟v \fuҊQ㟣BLҰ1!m0u&˫`37`g^g u5S8>ޑQmAfꇻ7FDܢ:2*@*EnEk`& nx:t޳Ok@*dRa #.(\G4V9KFX]Yҫ7H)/>cHpT{gN8H;ΈJ ! gٔ :$՘ H*XwdF6oY}!KQ/`^4 f^ޞ5*y $ڜvKÒ jiUҜ M u\:t܎*ϦڹϠ2,X]fpHPVڸ@ߔNC! +Jq fm4zRz~E..`&TjTx7LiOŰCZJa$Z}E=F!j %0;Qlq,:vZ5bqfT(opv<{hkR#@CMmZ1,m  {.GVt ܆瘄2(9 ~&QMN"Ct5j̉+DϠ:S0ֲ~!QH:"}$AXsOP6xfa)6Pju(!+7[d[BUD8$y$*HZt4IJt04Z^>Ru}e5,+sҲп:$hBXFs ỰmS%(3"lAՄwRhb$A+(aLω}>!:R| ڜV5b>s#H z8^9_\8 p xn :=Ur:Ǎ#`ƨ~dAIbz)#BmeX:)M֏9W 'MGW DgS159]ܓؒϒu9BZ-r_йfptN8j&٠LhEA'%q@A6ʻYs+hI դi@3 /0QB~LI$oh9宂, GZ J:SpAa,/Lяѥt %r.1l&SJa1N_kU$CKsiKD2ī\+P>b'a"tb^'~Hea`zi2],WiCqyt)f azнt[q=WNb#>AKuL` zQa1G % =9ɕ[)nŵV^_lT?iō"3d"+p}D|mXղ3zXSa*#ԱpeBF{ HnBR`T(Ѐr?R`[;Y_SiߎG>#i|Ѩ%gBrp(em{&v[ ۫7/Zmԑ2~ӑ,xi4@C,QHbTmx'ok\aUVf7HX6J0/O.~.6Y6 P[,u,,X z2CB<۪LfڦO"U@Sso-O!8dn!S!+V%}z(CS'AbJbhJE*S򞤤]!O[26X#;&yM>ޭiN(y9Rqvrvx%ofE%H|8< - 5/I`nC:*䴡N5z8jroe}cm-}oAC;CNEP/w+$x stpBr=#w@$ QCMh;,E(;e)L;C䗀mjow5 Oz%XN'@,^~dP磋ù)bp# !9`ئʨѢK!Tp|a=LmJJ\u$B9al\=Nӧt_ZFZQ))@l^{d^:Qw QҹDO/,HƤ$VdÅ /WNʅI].v[pi򝖙/,%_65 O7hy.`eeO%7;O@m5k PB^"=zl *zcviMwP4K?A%~&"MYXcqBnܮ'?<]yZހ߯1sZ/\@lm銨EP _'c8$Ddn 'ŗLzl`^a+@c%ƍ"1\;>+3|#xֹK sxr\B& [j %>ʎ!h zo3]뢆mO#W !jؚ`L_m 혺~@qtiJHR~?]#,Yb0"z,L^_P)l3I۪M6?B͓VߍZ2)^K;s<}4R>N^z8:=ʓ!_xegVuۗnL/wm=M>՝_ЊzPϩG]ڒi}DT؈9nM?ک"FeT&w"6Lu'GIu+DR2TQXGB =eSvqG&H?K2>f'k?$:A+~"dq*n| 0ߛnW^/7^oS2lUs9F XoD0[CܧU5F9LbG[A`oa 9;~A+ $FS9/&EG x|yr>T94(8eK-BHu߇QV=Utm>I|rDa[nla >}mI5s[wrIAMH-w-9 \H,oԞH(JppkxV!nn+\nע_mPz_@YY%Crqˁ^""?Ұ}1 +scbc|}x|(~E! y;h1>;ǭ qV pκ.9 x2۾n&`(^0(ä+ i{#HCxU*kȺ,!F;*5%㢡 g'X_Ə G@m )gpLjzVf@C<'g;/%wI͡.Ζt?w^ RP#QÌQZvW@bTV,A­aJ=y`bd>|=@6C%0\ea~[Jg/ܥ!QdyU@C8W@Q-PF@*u$Ќ1WQ,Hphȡ_k"UQ;90(-'K Ί_:I7" ?&x&02暧A#qetUP#ISMũ)@d$0B9,@o`+Q_-p>{KKsi鹍Z*)>!S)EwoG'B3">zkxj7aDd"fza`bP%ݙCX.luDXxp8 "7g+֘(_8+7LX4[U:T|2a`P Eq*:&^DpdIA\]M+9M~եIvnTio_a@A7# BwbݤCb $ t7#[gx$VVV6ISx8O7(VYk#gQY]ɨ B\k>swQj>'}q+| nH*N}& =EUnv$R%V^ʴCz?w 'Eq0'V3KK{="`w/-,-鶪8W7N#.<X=% $"Х%fN@A ,G$\FNUDAR̀܅"3,kT,*V0j[MD5ڮ߿yVQ V +h tmCUz&!܊220e+}yQؒ:S4csD|o'}]*U4cnɋVF Fbˡ&(I$Q.#QU;ِdٜV8FZվ[n?jqnEqBgr,W`Fb%WqAuX3$K6y[Cu:2 T1A,8єSp?L/(%TEoԺ n+B.ђ ꈘJD~5,+vn6Jby ӧtW2x䔳(3G.$Uu'Z3P.r"*m-j}4eOۓq8! ǰ3 jGpM ):P쏇a-꜊ya-ۚQ$DWH{(02yKSk00R쫚n_,ӎ@c|[uϷ7OVPEå.9=Ӧ' F(m986:Ջ5CTNꘖ1.n\TL|M$K88CrN0qJGщ$fV%Bd #e@_c m cJ}ct.8{ܞdB T%RhFOL(J(z1vyVI U#vqq()PV03!=q9ը QB\UQj@{8,-u?̘qQ?9Wm"L7h(!{*Yù ݔc %cϑ#AY$<e m $ʾ(G'j%a/JeM-/vV0O. 5pdjTmk |ƿ(?,Dc]2iPh=(D÷JEZ*[XVnȨ׭H6R'=}Ն,O -5G_ɓL/$V~x'_sPK+OR?<&Hʁ`pEAbKW+(R*j ļ|%B^>tpX_ Cb>/ܥ{ wvc`gĺlgDF?7%yq.pDˇ_ / q E|.~Pxˇ_$/ᗉm G!ˡd\Cty] [s~W\棢4%maw\=y_z}\/Y{Qk6vj\5>.K%^><'HFh(DHG//?S>v*NW钗B.˜r[#8G"jN(ҫ)+x>RC6YYgRmAr*1V66K6?J%I%l=/^qyZ?p9Or9pDyz^ʽK˹\<\CWf&)5욢\Fu:@4'5GI_[MȒ0[%vP|bǸuQƮе"f`(G%Jt/AZM k17Z({|3 Xх3kɥ7jㅝ9} (,gPK>TJrY0̋b~s19yNB+&8?љ]kTv8!ig{'($!ʿ4acv׍dO?#Oq%;6aQL9U@YW`*r)Ip4flKHvݎs?s?s?s?O{0