#!/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=a70c613ef55cc9e4dfc731c5fddbc8e2 # 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 N`LyƆ!oR`Ѕ?2=L:ԋS}hb=q,%i]eeY™$bS˕[Eqt{/aQLFY HVC:̎9[8ҔlGw 鍝h|?z̉BA aO_[7XKXyr"``2 "Z*.)BX;%|Kӫ3DaV$3u3`D%p#' xڹzb)=OJɓ S"N&{4v-3 /M$R@ 8L(b_SS׌ӧrO; Pc}h:Dx{ ^F;xSv6[Յcu|fh '7ҍX'ڨU]jSx\+88T Tߌ5$FS mhʧ!Xw1׆:Ԍ6$!+#T8 U<"1Ϧ8amxQBJ$( ЬE$Ϊ+jc\5!uCktt" T4qTp:q3.ud^!4B xg)'iB3}+ZQr1Ԭ3Zk۹b 4f9VQ0yqus&HS@ ;91o _7k[ᏍṘ}C{'uYAhdmq֬MN"bSIR]ި یL_zΗt?mpg}؉Goc(ÄwuAx5AoCc=}n% ݃Wg}v^v/;{;՞p'0ag__ֻ$觱Nj n6ױRiQ9bd6Z5 544G{$RllF̰ooA D6ңDBQf>h3!SɎe"払'tV`''*}!ms`V@LjhB:aզ:L6boKUٓ8uFրV9'VMluA[Lq X/ԣ,YW&Q|ey6#P{xw,La3;֧˷lO_ [@ޮ[8#SݴHk M1sxv쭔u_CI±nօ;BA`a -W#cNf Eؔ [ Tw4I'I{%* N˵S(}+9a˨bs;er+M{&<1?N@Ru)}%Lh!S1Y"`yԞ|(E,_GR*KgzU#m"R*LٿQ>A|T6T %2!dh廇xX.׍5z7U'К'CESȕ!c})l;V9WkU0߉p.\ZU{{`#zTGWڡ(ufIcLSBx(u fba61 EYᙃ}F5 |d]mhyE;oi K}E= ==)=9 VNnВ0,xh  jTh!kOE;M &XhX}FD5~8y|v'gW (4MPY ZA&Tr i.Dy>P/5x*̹9u?rmx+XH?VH_\r}w~$ .J/DON{'e#9Q| GaS \߻\Xs<7-g^mSs_T?tA>}8)+MxexD de`G/:ח1~뿘m? ZT;QBpTE,,e UⲲ kغPᵶ2pQݮgGw 3]X]҇5Ov~MT$tTm׻bRتNQ|KƳzC<}]yin"ōҧc .U֔JclʰI5\mf]Lڼε)k-Šu ./!,\ql2>A 5{ot6+MRƆl6b2PFUȵ#*eQ*0kˇ ycಘ>cap^NkY]ZpCcߋVylZ8(aE6oR ]zkxͅsԡĉ%p"FcB꿂xKxH9j ;x+{ɣan# HVhHЁ C̊ cAη^OtgN{ҙ[)OEU Xe3x8wP~|E^-v \Uh )(,go33f^b RXyuL(M:$Z ӖDT=اK,<"l_;%^lĦ =aVEӼcUe"KeIGai.OyHztL2>Q1;tK@qJ)A~ZZp w@I \e#S*tuEV%}T^"i֩B2At+s'0K'-XڴXkZi6uU̍,M˥ 6【bnUD }mT8 YzRD|7*z_Uiaӧ(z H>*;Я `D?ynuh|$?l;8??7W?`&3U')i %o!ic;47K}lʃ iIh^dzw 6äPԥ9XOO,D~ ѥ rO !cCSFĩk "oJ I0#@!r';Dztw p@=jݞwF17~doZ >qGW< =yFLpikk-XK@~ z>~v=ðW:u~殁AcM&cfp^_Ψ؍eM%O #(}j= -7EmJ: gH~)zTMI\/J??/.{&plmwg?VtRW}a Ѥp)tلB]ebAyCdP_CcSd_av&YICER\d w7ᷖWYfm68iOnh͎謮 Ϸ֣#C W>TCOL^؃)M 5ftʶ oR 8.?q/t<;ohx?=Hg>XiCmvjb++d &>J4t=3]=*>+il@e[K扦o'Ph1uXR\ľs%睾@Nҽݑꛇwʊ}yB9P,BSx:K-l/8VqhqKV*Bh%L3e9HySqpf[\>/ˀUx p@”Q1]Ơ]}iwrR>'e9W^SZ2_Z'^1LE ތ5M$ ~N&;cB o JN Io&TrUӘ;u<g=иRWTݦ,C\.H,\sl([7{F)T\`gMp+>b1MpFьCx,!i1(,s{vGQ 3W2,2/=cCzwۯO8ӟexR~^sQƃ[:A|jLX!p"L"<+%f?^{Ï 8>`XHMe˨{kgJy$Vy-JWI,s,teshy{0W@]wwNAƩrƶhLeybtl,Wۅ7$>e͏>!7$#=IB^+{|eF:4>8acM-##h Т|9T-ZMEU;jy3#' bHVH8 ژ#"3t_tT1 )y_` &'~#A5#6FaîVl;q) F:bb  Y+[ɠA\90:9J^M(9hg! )>E#ivxZ`'nj qPZrgOǰ%]{QO]b&JQ?0ZE5R@ #"6j ze_sAP Ҽg/KpFO>"*/$Lpq''g϶*|e͑mƚ'ķ(wFH`ѷ3 ɝgƒ'tQp) U۶dK0l2jobݢ+'u{]q In,ttW猠 EvȱbO"áMhA͎mxˊpedFa48e U§GS YSYɿz}2i4A?` 19\VºUpsnѷx1v_f]Nؘ0|5FFO_HWC8LP /,Ir`P%_5wU-tE|+WdWBeqA9z٥Lh5|ΈBp)k$N = `D8',M} \1 -L1_~ K uT3>* Q-d7 wV}wrBC*7W,"M_C@ro̕F!K[lI2 xA~vqe$7hB*#$6MZd/, @H{=`VlGLIZ!3I 1POq#b'l+zvO"Ď )'u]G[jSȡ.~YݰU,3)#NRlN` D}*NB8+R^Xɝ 5J?kFwYQ}%3bUf~Г6*~MzZ**Y}5g~KIּV7 @FF.:c8B=-i9ٞ~~5=msZ{@Ooi]߷DOߵ ~EOɞ?@[72䣥)T]h_QK6_t!rFOd P'Ԟ_[KTbUͿDa(Znf TD`oR~?/!Is Ptuw\nzu ׎wUhx[P*URUMЎ]vmOrBTs*7kS l=Ŵ9dNC WkNkauv^lm:ԁ v@=#,?DDw_ãGh={MPxؼrgFbI~meE[5dO~nwV"( GtBNN2+56Oij;&s)f% U?2b~0򯝐hd.pVBzzS^cWk_ <ʳ5T)FJBԱ!fY5|#}TP88+Fh,5Ն !oiW~>5B k~XrtMY* PȒ K{]E5iN(2(bj GPv ɀGD:i"MW)v挍ӦWଟgUIt//,&\բ_zsVa?ιfzUSYx[Q >`v{Eh݂%+ղnWxHMMPP{W4`o$‰mnOBk=8PtŸ[Ԡ-y"d$r;jI()'k;l I{1&S|Ʈœ`75]F'cYb}/d|XBu-WHdԢIx4D( iCG<8oF*0T`_QR{'6I^ Xrq+@YEMϋ ' *ܱB5''n5} P˅Ľ])ӠPl(AVm'_- g lH-٢{bSE0 @5[5* Rޮv+2Hͷյe5.5A4 U >o'jB^gFದBe챜0$@-eRCQJwؒbY ;RcAN\3GagvSIo9E6+_&QRxc&̡R50֠ cl>*SR̐&ԒeN,+A4Ի*zWO~%8X/>=`WAFÓg0ԳwtUU8l"Sɫe˫ŏkD36Cɾr$6A8z^r?׆H}PtYČp!ea⯪3\JDc*јE2֒pQe!}1d,.28\VqxY]54,jP`MuUkzĦ5:왵QH7O0g8Y ,ѕ`,m( V) >N؄ "LAXC6'cnq;a^ᆡqe}Ʃ(s/b)C{X/3F1qmXɤ:.qp8i@P*`;Ehv$)2mFH=lj]X~ 8gY{FXL+v<> (\>Ic|'wIoq| d4Ma'&ЮN`Մ#8ӔG~[+%C bR/n-=aFY]{<9Fh[Tʭq[ʭor\#'g9j8aˋ A 岫IQHb4lL| l+h0`M*e `hztF]e_db{Dr.dZT'!?Aقf )YYrGʼg7J) ķ0`Xo;ND?|ˎI׍(["qRd#K+L6/Or({7+'@#0o,7x>g:I8ŽHAyEJ?$rh@ 3J!Iq[$e:`rbqXeu;B[8R|A;6W(}Ε[$c8&Qx;z1DYyycgYH $PZo7ɬ0⟔b\f_eo[dN^1}̷}lY^ _[b:֨s yɻ Zgi< ]- %#met;{NB2[~ mN[QIV@`g#}5x;ТXhbsZ&% i2|s3-D (hUr(Q&o( ghoHg L-a ǯ[{G Y+lK*uN4Kdn"r7 /q2y%*L&kheͥ!vT hڦ\Vժ۪4F:ّpX:QԋXYrܫbw!(&Y/,83٥ %pt]ކT*UA S N;Gj%:#2rutDң^Rk̔E=.&vܫEB-% +336:ͥJK2-u:iݠY2;N6׃ ^2w<=lv]՛ZaϬl74j`nwlM;*:>i$N, J_](Of]3NF ;ꟷliv gD3Tv^*>Dx&?YIz6$ _\xw| yzߨknq3:NW&dud+m’ŕNhN^ht9{68c!f+ @v9DF HZ>DQn}!w5=oywP^)CvÐ ,;=}A q|<*XxgYYK/) 1ųRLu(X,G[hȄ<SCyu`"]O>ph{5b# k-D|h>AYny/iB^lIev1n }d/0$ESW]. eSIK'q zipV}ܞR +h E_6MƬz0hC!B *sc Ni"Cx QI%aCt$.;y69%adыX;q6K.]ss9'ZNv09[G KKsdM'a OŊy ˰CQf,EoܵbcQfE(Il=W*YNCj߇%]}HTp8HQn228glL9u54gW&@ xJ84fEQR;~qjs̎92Yp Gbr@H%+G%M1!`= ɬ)'\B/994C):| -4m=f0FP+ВFfٻxm۩c6B}`s$l>} 4L꫁&f07 *oݵ"|׀٨`T,p zA\c O0O[aLA&S:Kt)#:%v7K(ɠPKmVBson$؜j!c}ؽ*Yk3M1 d"F3ZCi  *81C ڞߵCR|,wx'mɏHKDݘ[jn-;*>(zF󋔵?k G_P߰Q^FS^L3iF )z>&oZ =MoC/aNXmrDڐuv&COcHmOƈ,"&C* 2̖i/f%0&2t zn4tRuwd֫^k~Z?LRf}7t* { OVzR+\|fhyE{b|Yj*n&, tYh&jӳ4׋CWU?8ޯךjėG/J6УLlP;o$,QhCƷpX9_3ٖSZZ63c Yړ'|J(.cɍѮLi2ґI&g;cqwCkcf2 u Ghu&\aGT{#ugq 1|+jE)ӈK6Ğ U ,~y체An 1"|bl«_5s͎y,̐=aeü>-^!]a3eqrCA9y(u;Pbc]W9g=B⻉M&ᆣ]"# Ӑ j34])WR-ܾj];Iwq#16K-Yh͗ 2Jc3`(䒡*3ˢhfQ.]vD)W4xblL1O Iv(L-Zd:iPCam5Vx虂һVf h}`ƓrfعFC qZqԙqŬz bIJ$<s)_H>ޭ#n-kEnmB°Ʒ|ajFglO4PsmR7iióEP!'8 Wd񙃁~×<:ӴL5zPs׉YG#KK`, M' xs3U(b0vߩǃ1ʘi^zBh\,=69-7ډ&knEtFm̢NG((5T-cS9Yq#Gr=f47tDЕx+gȢ7DӼw\j8ӂtn``i.e90%ՈXE=Cr-1"85   Ћ ΐZ38*M{usb&e}7&4F9l |uË@|f=H.5BEKp4s/w5͆ޘ ̀$9e$,')qfל Qψ*dd X3`. xUCZd@Fg:ᔁv<$B3k!*5Go9wZ\_ mL(XmpT18NdA:fE~4TB IHV.l.5wuGh `.uO:}+FrapZyGZaf& ^|žw3_&e\̨H"$p`*J+eڳJ ȜbCNc\Ȫw&C(2m$%]t [36;77z2W}%q;ꗮv*n;;*# 1+ fsW⌙&э`' ܇ - 2Wx0nEv\E(#]amu#M$&$iBҢ KoU{Lhow67O1gՂHID-X[2p嗽<*gca;QA$:IEѳ`ׁO"`b)'j+8A^TO{yt"̾<3U8;Y<z @Gf(COt*ndT^`ΊA2LgQ-4x C88PZkYK8(aw74w:ρp_#&dr4qMn24;\BFMӝ`!oQooXB:{XAIT7N@Y^NP cg<0u\qRfքR)r1^$[3|N)) J%"xL 4Vd[:'է)ɒN3xGOVN t cq#с(;{!~x\d pʼ]/P-bǬ:o<26J[(=XDŽ4 : g.dγm2_ EЍau\=)VDL-cdE%sg&iMFD uK42kx |#c3 ݍ 02jBUxԡ.X91ɆDB~B7ބskh*R4g~FR2o־>13Dm[I@*:ZaC8W%1\tUa/%Пyul(zjZ*`(ZT>d/L&Z\dž=Z4ەr&aЅYE8lF|*@7BF|%(*0=cDHU[NO!`IlG6=6A'ɍD7kHUZt3iC 4gOJ~ WQ zb '[cwj Wp}J''4N3i4D'L\ rC~n WV/wf"}?skDvǪ /O{۝E>= 0cO+6ZG[ ňX^Kb2[MEi{9 9/2˓|?.vo.Q$0:BV umSmXUgP4ǒqrzx0a//͊9 ?-ꆟ>uNM'%Kk#z=CQ<)Q{ygy_- ▖5dU.Kq3T'J&ITԏɧ/x:"3_0{q7̯"*#4K 3?X> `!tݙ1*@yTGP4r{fS<݅^GO z C LɶﵱcB/^a<,vuA._`ޙX0crRۏ'WNʣ253T{D&`͏8~xtnp4,ߕ׋p)CDzr/djbhahRX q检Tu.P+vtn%"}c t焁H 6̺&IE_3p•{5tm 8 x'M2,)%ĴNksh7{SQZS_&8˹TM#'8 '_ qXGAY:6?ܿ;|[0Tvo,1sև?lPte(0WayH[GRn$CJdD5e^H q∲b%tFf4dyG Yr^)%`ZeuMQ@TV6A=ɖl֕ gD($#wEg#_ߩh4c#mT~7O_5?4Oj;;KhJ,RhTj~8د^)K7cJq[)#t\ 17ayb,7+DX#_L}$zB p6XA t5@x$7(Cgx7$75갉D~rlmSMH8I' "jCv U`PId@{AU"*$& =`jם$P45(V"/p"Xezk1 +y8J1]!w(r  )vtP0!FPJ#M^IAs5jӃuEadщ6<~]ۭ8b?`6΂0 W6&6k+gJ~F6tf+]{'S3ǻHw8FnfYdfVضp88H\~iB\F_yX :σp鋠bej=FaY!W9.9< ͛ <1h@6 rb7ٝFOZq&/13GHKb" v̦̏đ'=|(K\DiP=$v&DQiMo4q).Xba,ڣp@$ʞ.AJ+&>D{`]BUF@A `76V_Vă\g=[y $ c{2| cYf!6;g,c;ES. ϶h"ifnƨȺDl7e :!UyEh]괾zuutXH1/po1ɹPCӦM 2IoHmGUV0i(1IMKǖnI4 46.ˈ2w9W|m+#A[3m1o.3#Q g + %-)K4|23A14H= v[S/^Dۛ^ 4gY)Xz_AߗlX $Phu&lJvf:˞X"Ӭ6,Sme*O~d"4z5 : Rz _vbBmpf{ 3lu̱ٳfG foF2454V^ C{QR91&hA)T}~ :-Y%u}ˍ#ZX6jUpɚ!cL&Q=Ey>ǬVQZ|n$Ć\9[:üI]*~oej ? >@ƫfS5|bk m8^;SNHf~rxk2qɑ/FSys&SN@m84. ``piE`O ꇯZ yeBQyx T&~&$ 7X5S6Teǧb8t*sym䚳ҳ+Op?í|x _Rhl8ɒޮ=n4Hh5ɎuB Amyٚ#BAlX2CO'=I#cs-tSoI;-WSNCb24Ao^6V\^&Bkԁ@„ I9sLm#Ϟ0j?̂H;B8.z ~o9Xp2ɰD_[A+XbsX/j fޚ@ v2yp{Fջ"/-wz8K7px2҇ag2dD,ƜP$2@/_)຺$O~#ھ[V ?0R;rvp Y8J6Y+>3D?BE$.Ǔ zAJU,jc46Iul2Nm0=AClAou(Mf~YKH"@B ޲ c(FXlES,G"~[.OplSiyE+ P (qnʠt?g~79~DGpu)4fʅ/˸sZtgvHnj T<ԩ*yE?+KoBs'H8Y)$!W-:9Y6mrP5K佰A&s7^ki#A/$*WӜdYRi&,-fxAJ:kn;sGNܹYiLŤniC~v-ɿ~],rN^XTAY̡/ 5tV$qI#Вs̹ K*XSuυ8t&-4Q5Na&ae=VJl%ևMl.$KFh^r1%1\dǒ#%"m36, i׮efrAֶh! 8}< a*xoGLGك'I[) 8AoW^5th}؍7e}S7ouv.iѝxKƹ u<sly;"Wcinі8YJ?Sgù V>an Cwl:k= 6"9Zd#hnW #J1IX ! 4K_GQ4h}1J9`agJ{P$݃'3-kav ,@R 8Hߴ=4j͓j*s;Su=M;ݹZRڑ%ȨdX0]~X?WO2_ /giif9tX|VluzƘjO(eݘ?X$T i,kuD”L{%-f/z𡩘9@|Em!1_|dݲ?†-4'B% #,zSc TaJr|/}|;:vce]gZĨ6y2-bb&JQ6|޴@,J1ǓAIa0Nяs,N|ګ5wшg5l@M?/':8Cu{ou{&x߃ӦPYeoYH~"G.XrJE K%}6>zӪ6?&䚸RZH./MČ_hOuf>)E{ZYiAUpF`B>n"+ԥB$Tmԛˈbam1 3Ӯhh#ktnQy&]] hgUg*T smDHkV`,(anccaƋa8]Er=q/]HFELS akQ8k]wYrlc 聛ʻP}'Cu} X7Lu2jI?b]!i8/ۣM%iFk]qqg!N'̆`7o!SBz}ۊD7"趚__n@F?8=\} _X0"`+K*Ҷ#b H4$2z&Mb3f6# BrN5tlkC-Zo,ݜOqK.+*/<ǣs mYG]:`nOGb\KM]'J^i:7"#4šB[5+"O_Q(Ö)JM@ѨiU,NBAH 0g/n(SMd:J[vm,0JRz% E2N'II>3ҽM4Eng o&m@XkWbglә3O4DLVh]y -ZU\!ig;jY`f/o['G?YH1ˁⰄE/O%*=DŢS];'X0t^O" =9&RġVǒ3US.\P8?_t.y̑=6g2|J Ƣ4Xؑd{X}.f¿!qlq3H[̈́"'$A/N+x$]mfP#Y v4v8zWGljM7إ ֣ݓyXi&@[aG,b"k3ۦ?V:DGˑ)ߍ^}b|I`}.v Ɵo&$E}4'1o=3>:0B4qot'(>1$~8P4v2v1p8F)nJZ$dLe+%xZ_lIu|UCo a?{9"GWG?^ᏓFU-lJRE鄁`'XFR:P) N0wYq >ƣ(nTN2~<2I^bH<;p;7T׊xaU8\VYyF4Fc$΀:#ʪ@t̚u zOҒSTOC z (Œw`P)E 3O=ۿd|(j`H| AӍb}Z6W׮9F ӹs}b~TAI8'h{40hN*)ZP$r$TR*:C@D܇[E7܃udžtws 2t\15(|P^Hf#MWj{]T<>l*)e%uZ)R{#5,耵%JUT(Bgt?wZl/l48#A=6ɦnkA#X8VtԪzJXaeNNP\$0Y9u^JD-y~1U:%?ٶRg*HԹ.:;LoR9-ItmCmb==.vm+(E͌Dh˙Ys)1e T3ϯ"ŤP1+G"Y5Ӹe]t.[%`;]?2#G`?vbdФHVxA6軪9'* >wZY訅a;M9P>nlo$?ϞOUCv*ߥOZ*aͥFTz8:=YbU'-8^懃OȲ.r[S (ѸOJ?[ӵgGd@Bˏ]uKhF:S8j &f F_r`R s?jǻ ~t;MaurjVYM?zƩZ0NE-1T`ta)h0'"jh9\˽VLGqu Eav1I@ut5 #bjg}nԋW_ #؝2ցt&#zAu.l/D Y;$)L %ᗵ3`(ȇCt|b[ No EQθ:yK>'bG<2qO/пEq. <(B.#="?pHգKQN- A dݗO9'&e 2Gq|.ܪh:@/y8nƸEE'(*e[jit%PoZ\{9,_*qI͉|~M˞c1,vJ{vfnRV:C=Bxc^s|AsՌPqlǸX2b-'pxJlv)B,n.eʘ M!0BX.(v$:٘d3-"2Τ/v CY"1"!K2_V#[1!4v$Kt6+50rƃ@=B7]xW}/j%vY a!g6iuDO-S,졮emgitArpvvcf%bdžj?32gs:l2VN-&͚Ĝ' Vk]ן!i^YSӇ&99;;W,es_S*arZ$dU0Ba7NJApUft?rx+Ǧ'V->zm|7iĉ6%MszQ 7qk;ׁo]^ll &F<,P9nrntY3C29<2JGӡ "?ĢnJ+*яZk)ᐴ0Ǧ"LԍG E7Y=sFBK IBWجM[BR`_t^dSOt0$B0dd{nb#}Dk6r5 tbRlDK ?. [2/Oj ʽШ5OjLDg=-+YVlu%үs)}cS{TY)eh5m-'i҉1N겐j|d 4`5.J^ w^adITcH >631hjGi)z2 8..!I =PMNǐ(2"8ŕCĈgxMxiZ8oWgSdKpuc/NwYTd G @D;␞P)$ ƺd,>Vґ07 0 %MJO*/dY89unpV7UPf`o%0h9 P5XtӭR`s"PJ=p!Lo93O.jT*_/Od#;˽X@ƫk@6[MerXSCQA|31d:&o/ <7 7zű B4] SY±)땥â+~> Ţg3:L8HdJc }&~ }L᭻;-|l,y Ex2P83jj\< Yr( -81;z U iDO&'Ng9Iyhzt,IU` 8dQ} DLJ𶢐ADaaN ѐ p0!D| V)`!FDMeøz8jlǮ\IGN(l9=(DG-;"-$g@'N͔9&pkΪ0Yʼn,eQ,$JI<fdD02lY3>=}GZ_cGDV76Sk+?ר[\;W ѨתZTGWWFy|8_) J)2IǽzK/{eʫpҨrT\nO{n懃 gÊ9uME$)~k?5N0W\>*OSm.]%V4[8;]Qm ;˚ l+ \{JX5~3Zpte-.pt6*2F%Oyaڵ7tB!S5%_EE+aqZa?GΚ*ʿpt%-mT$,˅TA_z/ p.p! TStM{\?HDHMT:2[JgiT&{j*_K_sY*Ս{g|D?±{wQ?F'm#&G}+/ͨG{@N}e+ǭi_pƪKyym%&ʳlBvўOMWe/Er ]bt-}tu X/$ >MOv{1G>>Zoc\s,f-Ec.ze$W ZVy6 >(t=;!n又e($6&~wQXپ`-1Dj}jgZzЙz01P23EA>IT[F5+g dUZ9;J~ED:ADo}1#:B(% 67b *ۡ~«O ffF"1)Md2&Hg*Mx֛y}QS Jj{uv?4oޞG{Tpr#xTmBͥ<~Qk6eިk͒ p~"Ai:zjݷ_?@y]?9ľQUu\htPǧf-ګ7}x T?>mgG2Do Qm'dK@vS Sm|(f?OT{2],_ܕFa%0IR7kwuLe^Z z8=4A:miِm4N)òPu(*Q6k@_ʿ[ \PZ*.AVl)}8sT77[y_oYmԛXݾB/:gǝTתÖ°ͺZݷ*JSsa;Q0@~mєt(uXKz8Oa臣^yO9sh$_JQ;-SÄw&W˼^&A|٩)Gk鮤ƿOZ@=Zokս z݀4ߗCh:a K^qPQ[P.U('Tt [ea$EA&C P(J~Sj<#X7 4CqC[63.92gxYd\ d |7ʅr#z]Iň4qԙ rzW|Jgi@7\qja筡2`(fBհ<}뇧V{WS/wqiyi'@58Sq\uayOU P9(a;}59=.sx4\hgf:^l.=ܝh {aKa'XDk=}3z9233h$T#B^(VB|*,rf ;⒚ Q!G~I\ ⣴;_yƿA5S/=뫀sEM@B02˰S<*Hs05$nd7] +BXfi 1Gh_rQᆱ@%⨧!`Dos z&|ILcT3?\6O0?1L܄d% 0xbw2jza|;$@R::6^ " oH_#+$c=Zپx*QS41Smi?0{5t 9L}8#`;S,w Q:ӷ7T_oWW 't6i %ZeĄf~ 'njeBm M郹OѶ^oLd=ΒM+GLɘ QUe%KcX) ˥Qz-4g$-ti2iiQC<;I$FҚjDKgk ?4`R#uIKfQ4%K:nftEv;]?`;v!Hz8BQiZd ե ؤ Ǵ@7dFh$S6}/!4@s;^gs{l۷^:@I,3\6r(] ie7)tPIA.X3E&c#WRǯ[{G5lPW& xr`&C} 튤e)՘{M<,OgYNw$b K$r3ƽ0ĴlIMBL{L)QZ/Nx3#*E@NE3eolSKhB%gr!(v{:FmQ NcՊ?n< +QS  M &0q4"eW=bZ$q%.y`X#aeā 5B %5OSJx Ӣ+C1#y+Id6EƽqH8GpO]hEbb1E<=;uz0 ~#t"9L`4k@]Lٿ,aD> bZT.Ԁ `ڹG0'  $sg -%ʿ gig1_g0H5T%@;BR{@r Dbt9d =j@@=rU p-Cߛр%WHnاX| *yU+& N'&pl%"YбW7<8-I5me+@}"tJvi3x' x XPGB9i:&Ǟ gyaz,Jjˈ0-.!XNIm8t.nJ%׿K6`Ƙ$q{E22{vێ@ G0|0'3* 2n>?9j@̹^%+Qy~旯=Ęl2ץҾ^Ws>D3qIE[߰_^pps2&D8;I&;staĄ~ ȹJ xчJOvf_*nb2-N2mĮKT" `6#7qz~E) [^FDARsHvS\hLM]b'Kgc(# %WDqڰ+!bjDS$6 <]6/Ӏ0} ߡe:wki&K9.&.&[ 5䬢-.IeQ+?J᪶W6?4D'j&#>a!Cc-0qώc,kDJev>%2K*e-V`}V=ExpMs2J83Wd*>Bqd04^:~T:JuPKڣ(]iͫ®ޣ290G:3-rk ֎ė3b+*w%~R8 d\ ,WLaV[Iqr'ĒL1!P#̬)J厘?Bk'ݫN3P x5ȿ<h4FGnlɟHmK^S.feY(w:`Ih_`ѓCn:d0 MdkI$jpdI{>h~H$lhȍT91KbI0B0aX}ֱ(K+ ߭>-1yЮ &ﴵ{è6͢ݺ^GzɵmZ(n_uH^j"}`Iמޒ//TOnĝ7dӧ3?'_9(oQ٥L=sXLxz5ꀑ5VYZ,OWahZ]e+byd=?Y'lA|h+} +? ,Oh.O:/j rhlrWox9dFLn"M޷$FN:r$XSi%c4Ҁ#u2uHnʎ!sv%]!_";Wg6_ɊY;n?L'PwLڑ.+mKڎ8;ԝw@;+RwЙI'PwKdPwL߁Lࡾ"\4 '* Iӂ(_~e?l/>d^)H(*,5E|\uӭ}YK4诔}Le/ALKgPQB (^KˏWә 钗zu`Y~)2/6(%y*n+@Gd~H-N+Mi7Jwyu *QT|sX& jU V{nXzR-㐆~g+ͭ/xON|>{EKN?x;D/32fXl=vϯk=vϯ݉_C?z@O< Q]AW-[j Xa~Ȏ&Cx5# mju`DFo.1^IóQ;G-ʒg [l3]Uj?Ȩ*pCI2&C"8 AG둠h!Fw>&up@ #Ϥ[سY>I;Yꘉ?FL:=k#d[솴aN Q7.+s%5x}Y ] SZE#diQ^W?s?s?s?s?s?U>?ؔX