#!/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=f23b1f7aae8c5dbeceaa01ceedfac93d # 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 Eflkf&EJds5a- 4&Z7lgx=8ƻ7']{?44Po5s2\qpCܬ^Ѩ⿿E`f^ TBB2V$f;a8lC-3L`*pDӏ#D2mgXf`΂Ĕy:6Dfq]=ۡA!"a3rvVX &-m0hG!-.{ ڧ@7oH׆ f{һg Fwz '>zm}t).Q;  }u0қ:x 5ɵaUC*hZwj+]tM ;U8ѐO1>Ֆ>К#D ( g.uZjG= J1O#}4ip뵸ć\oj#h\hFԑʉ#xsݑ6#׭/P:ȧ[\̽.Mی\b׃4ldT%e" f+t~uυ>*6}H:'T|.u7bSP[:1/4.)xEdz=eh< wc6}o\xԌS uc^9a,zw6rK@*˭:~7oE^,27dG :]D. Ň }hjPٝĎk?/;F uxm ol6# 91y]BwLMic 6xjГGqZw.uv2b 3&pZWvk,~vQ|?#5U:,G"fwlBspFl'ibsXKa9˳{S/VcqXQDub !u;b -5?_cFH`(+NqCOpa!릚 vxrjFlZ|: 4'#$7䈶7Ec5_a;aĥq]~Ф0.9 51s,Ľ!t{Br'D1$T3+cWF km)dJ,B܊%HJO,1]ɬ:\TL^?WW8Q= c} h"_(V \,~( 1 +GBbMl ҫP ʆr}WR(@`"_qQ)%=ҟ3V5eam h! 0%QdfҨJ|1ygbe6 yQx~$zm,8~Ckm:8ฆM0/yW0ː8KJ) Tܚѽpe<6+)8b4ʋ*Tpf@0Q_<rO h[(H-YWٕ?7G1df&"%r]B2˝*I؎yXH``w8<f lvkaDRǓ( ĹC-)e0T!KA.8`9?SI%Hj r\|IZMHƷxюikq"bLCkz$!:%R-dBsϕ%sI!.@^ N.xW(򚵖Wq41$%iau8̶c`Fupܘ(?Idqc ?mdWezfl %*I/ĿT5 JFJH{dCx'wBs{<gUCz%\%3WV_d}XeO_י=!y ij:ر`Bf-INddyB4Ky2X(v8 e'QȍC:%ñ N>;*\N2SԍSΫMgŃ=CQ@sxXHj`,ϭ{5`Ѻ\wzxkHVI_ǵLp #Һ0z6LPcL(K'8|ob|Bs~Y]V-'Lr+vW;6<ٔf SHpPm#%ڄi$ěZ0~ʌ!ZlxNLƹtm!,R B̕x| 薕 dֹuF.`T o;dqHRSUĖpaڭq­|z*3]5\l2WBnUr|/Nb6yY %fs@ckzo{OhvՎvLR1icYM=B#%{\Jkt7GRٖ슓78N<[*QOc=.-XX*ұ>'z~9Ο] Dd_ġ_klf=jn{Onx"Z7ogKmjqhL78ce]3{T |嗯0`xjz}D0B7mY,zo񔎪~54I쩐FoCX ӊp&^ZS SN t[^ڛ{Wg(t1`ƶ+7#}hhf3`Ifiyfr+*g4x0*!{ F$ JӁ( KG/޴\~P𢲕{5U?(3 Vf^hb* $dfFd#n 3cHyhj #Mjf 6"? /O6{- l.(X*P'壑{˨,UÜBYJ }!{240mވȬķprH}#c[tuabWDTq_Zw Ht6SM0kLY|# 3c| T%3E>wQse~6'5ߥTo<ҾPzx;3q!$Q#]12%#y~v#װM.qE4_̈܄$ ;6My`\cd ƄV^ @! /.5xQ/L %'~` %<XKrG{Bϱ0 iGaP6%enD+׋k#ѷX{!cCMf_S#A!L9dgo˻]kM۸|X]%$rDB95J}$ Qԙ)mowoәrIvu&LgDĉl:d4qJQG "ԁ^Q~iLtseypM3# Ӓh v? uWzꖰމVW_Tב= a3U K_Ƕp|~ac?KN $k.cli)%o4s[F` 0 d>>/jb4NBK¢2!GN4w9pg9x DԾq'(:``/GN2[Л!c |JGeȩ.[O7RSmy1D||ع,Yc=I&|H iDb,Xw·*ǫU6?kae8Q QB*R{k8WͥNȊ-b٘S=d.>3`[L8a>rԚNIjW^YpZ&-c&)xPI;{+}0|c`k*PBqO ~|=GI{vF0gshgՆlx87u\PॴJ'-j odcB*הYd_M#=N]k׋h>3e4R,a1|Yr7T\LfZo.n5}|1?)Ch4,/o JFĞm*%/H{tzQf p("+Kg2WlYM? L~R/wрߦU$)3: %rz[܁yV{WӂՀH_ӧJH.mMѮti6<\,i,!j'VY/Gυ]Bj[j.~U߾;bW=} _])*],ɬPveʯv|6_3* Sd_PKxga38K4jlKD%҃)̕&.ڹ$:C³ys+0=JuJtjL$涒4տѹf#m5z!koj7Aʺ]6 Al0AA*33z=r(wp^y/=fjm J -]yV{i䤻lK"_+x+u7AbA#yLEVy~dAv{D?=Ҥ:˶6<;&8W5pU }qbQBDl@DCi=3K[yM 8q[O2.yoqrWkULgoC򒦛h (ke YR_鯅!ݣ[>[~IsN굹A`HKcV EVф)1S%.MvTt(u7EZPöܵÛy-lW[^+LV|;\W:YXk_nIx LvRx)›q"Qw ?MPcňO1%!0ϧHRH\ ƕ1bQ6!Ʒ|++k`rU=c^hi[wA_(9ȼL@[,9s4oƞoyZ7zmrOF'HOc#xBG JxhNtLؓMW!YAGNƚ(cceEhP`(fc`r#u;'x(&PH;XV T| \-cͽS%!dōbbC)x:;Jh"3e7߉wc7םOjV C& o+E_zOjX HRED!24Ѷ$t_I̷Y#7 `\@!w2 Y' xm'xzAKSAv@Ly(thAg!YdCJ G0EK2 MY|F̀ +Fހ>닰SЅSsף gqwһTd:z >eqSzf;#0IAqϖ!W{h;7ayh?jUpIaw;OPo 32;K6mD] 6Aau  <`%Bȓߡڊ 4'XAIT7Nk,NT 32jG|j=qȝHg>-dJffY=KvJQO^PR.Ax`V,%,+OWS“%53fp7It܆(1 fFTp ] \Gfb<]ݸ i]kbDAQLLv(aN,MBT2o7!E6<;c832K\J| :Wt5<$khh(FQYoEtnʴ[:VQYT2=W3=':ox[nO+3P9ϧȶM12ڑO FnhoԴ/T(r^{Xw$D$LР)B[gr5iXJUh9K++(4ȱe% N':h1?9חu,Kc= |g>d/@Oۃ864€aT.YOBRQjz)R ^ujHHWM1˄Gi8=j*یrJbil>鉹TƷj39O.FlSƃtALbt uZi} }‰b(m3c0DA;§+\R# SLG4EzA =٘?gaիt"64Oh_*]#@Ϟ'gDc'8~P}ϗhSj\obQwE>4(d# (.qulH&ޤ.sWGT0P5A.itdbpk!sNO`Z?J𚟕510 rg}fP-`m{R{_pl ?M2,NJt8&P)>Km&],3d ԍ21N~q' ]ffhr5@F$Z>:H5gh2GԵZܪx"%A ̷bX0E_ׯE $J(v C" Pa8>],Z!|q4aR^F]*ћc :&#%ua$Xl.7"sT T4xHO)25;kVAjv&_ǹVy^vltq[;ǚT?,Q#zN/qy^cejmN+f|l;nd:܎sX#%lHO9@6Ch*oYI.bF-Q){+KƐRûa6PIqƶCpCU؝M. 8tn)Hj0oܰ0J֥`$B'A>C)w@8$31ߌv'()$Y|LX+Ffg$oW9IHp:n[/JǑLShYD'xAn %?0bk!FG;Hf!:-;6J?Ƃ1ȵC | ̏cVu 4['@h5v[fv&iT#Aviz<8x/XtI!^/DkBGS%"Xt(& s,#'t6I@%``rrO6j~(c\lPwWp& q\eik}dwL**Ѱ@;Ll yzqMWќ`pxc8'ƙDK0 iKX6=XdB {<ֹdG_(.9MO mq(.ނ9u=t_?$NƶU>j0.Q5V">} -X7&qxĶV2Qa\Ucnlu&?vœ^R Bp-ز?aK#S)$) 9w,"1,5KKVű/X^D(a@)dDAƿ6)39;ɒsD NkO؅o]|O|a;^ӱ:IM>mqt ܼŗ@@z6J.KVA%MeQXxp-x/a7%lֳg]׳qz:{5;me{ϧxb$h4iFH󹰫ubAj֬ ~"=U^A{d,yVӨmn`9|Wk[c3j-7^ޝ2 wʰa3afxczek? N۩[s??$}WFafK^ FAf@i >0@k hYAHs;NG~&htv]ӄ"v *}8EJcdY\FDR`=|vqȂKwo9{QݤW8r&gY޸\B^g_TVhw~ZK:oH  j M^ݯfVi w=ɿ?2(thmdLj(eۥ7#`NG8[tGMr!0 @/^ zgc\90 ?*ʆ_vz6RR`ySYY'+%G@QKI] SH*h>,#=/w虴]\_\'̇l2-컂DKq"ޢ­75Ct6B[~8da5ׂmto D^=zH}Ơ$C OpR0A ueIl4z-q>#c C<p'lծaz1>X? Mvŭ ,`xNťb';'Rm}ݛn}I݉“ʏ]n)n1#YvwWk_d]zcur&aisW-n=NTp\6v!bfm{BJmX|rqE 5 DES'K0T׈Gkt8oAbҽnz(%,ʯBE!i4AOWcAcB&`|D:+Nt*ɜݨy,GL3`F zFg2(Hk>xMP06fh(ѶA0TW֥0Tx>b{ 4Bp1["v1GAe32«Hpp.a#*uwhKlZB`hJu.>Bem4Ɛ@"xY C `. M*0-Nhby,H&W8H3s;PN^7 |]o4Q8cz_Y}ToC{;`U WOPTHkHZH.$}I.P;-Lz S(cPEV%IjŲeovΆiaV4݆UAI' plǎ9d ?@]$B{CvBb$aފ!n6:|2,8Pytpkz95A6X%Qfr. x,CMZ&W}/,UVCL})z_.Hl>L$핷OXJyf'2/CjP/0sܙjTKH9IǻCgF?ɨwY3u=A9uB>vǣtdP6D҄*,$)ՙƭE`*Q&b]n 1|g io r܅X2Ej^4Y!s(UպL kB3hr;vd+`ꐠ6\ bG4O*lu/'x1 \v9 uVۤD ϣX` 8q oޘHU Sp[X@h&n`6̮PһM,HEGx&7XK3h ښk⚃anOΆkγ eAD 4( C8P>GǵlV\%W`єҵQ>jG?gUwq[ 5C H4p JHS'idBv}$;TPsS{{7Y7]˸( " נ@jh$ QI=8qV3QQq* Z60OT N5"h*T/ sTjKr1 r9AK0R aZjj^z7(2#L0]< ~|d$Wѕx)QƚIMS |./yg=:3>Y5.e+ZLsuch^ m%PhRTx a^Ҳ6P L!#̓Z:D8ЖRuRbal^O\$9"|6!9أQKn]ĕKg.wyܦCpCX|JswR7ܮm&ɑHeZ{ 2FИM,y (&9=vr6zV֏^( ( ^ Ó7_9z-S_'v;‰{9GXܾ p82AK[ȿ5/,7R,͌nYnDRΒ^"6(…D7O?lB\YDLP(jdvԣimY]|: Jks##zm'ɚF=_}2stȫ]e?N$>\G Ӎ}܃]AwVHJ9-`40j<.լڵfc+L]@*`dٙOyr$iy+EIƞc?ȅ+Bhdfr>-f^3˔ٱX^g7?T_Kd<[d|V<[_P$TAO/"B&h#׿ZdžMgsei?;L_Q=5޴wE -]3QEhD&vZtY3oW#ns6/7MMMM1D:LJC뭎urY]R() kDF"|AZMIt?zA-[:T5b!d"N&(K۸a{!qxu2AJX(d77*t>(g3mcvms52ݫ"vz[?BgDqs /[Ejn%@v )noBa3?芐H;LAjfG,&OQ%,{'2Txa$6115q(+K -ɧ^J ~ǤL/ (rձ1 WqQMb/v/H+3#3kV:~?.QhS>/*d횫3`ʙʬ7@ >,0N5ՙcBF'e$.]j;b$6z5ƀRSlrG5?YI0B2a܋$u,p3%ʖo[{ #>r̍vu0c}9b$lcw­"/0qkM& qCu*P@gOT"p[)!JS8BNf/-*YdҝU(kY;r)a02G]j>;+ :1\=M);BV ,X:#tA!,h 71<@ Wr. |93'`b" aӳ0?dPhۃ { f >E=ןUMAk^TP؟tRt l6wVW֫-*StUl^:._t؏ 3eRu K0"ovMеV=M2vꠁWO0R^hGhM`!_`A.(7,U }ᨙLE0݌g$ RIg f;f Ppx-Hp 뷟9de8 M'˗pkU[@ H>ot 竒!)@4P0"ыaMv{:!n"k2-pA`#0WU fBӋ*f cPG`D^kf@.o 22 m7d Ae8RT0r5gÕ=i}P՗O ѧw<%#M>6z#e1^o zO UnQ>w@WhqN';&Z˸"h}Dc C;k-eǪF΋Uowjv]tvHnh]MA*Hh?)%^Jb4vIgA`6ҬTQ|VapR@Shҙ1Smlj dT!'V9:`( CT S>G}bчI #Xygu3&pr͆0 "3:=g]]RK+ xF0oUןdmad9_dW+4cuDŘF̮ؑKȫzu܂~yT<~/`U XWf`ۇ%dRCssr)Ho"czVVLYzKfl8;cńXvij(Q]_R$^P6 p=NzA  p2B̮$ ^6ű~K(A'c=U9e!6q P > [mc /7<ݨJ "TR6ҹ Rmdͫ-@*w7> p̯h5D}mo#|o:op(:/kd[`>M6(5FUi")T%[C4+yIih<ޯ܄̡ADNM^Q*t'q*:}L6E{2Or6S a f|uV퇽ILr)KhjƂtO]QoXM5pH**V YEu!B$Bd$?KL*ʡ/Eˬ,㻧5eb; O3!w(3ifQh:+#:TimO ƨ`@|>Ļlj CIO>0*I|BϑERE`)i} +W,DJ?_ )+c^ŔQNjqNZ_@uUU_)S8K+ÃtalU#ܷAB(HHzJ=Wd b~ T.},Bծ3S`w61@(Si oFA<H2#L *bHFh(t@VLxę ͺ oФfTHq d!{űa$*9"`83֊Y00aϴ{yZlz) F>"` \FI`D0qB{ڨFM'4Qe;`ٖnJqD@uzn۫$/V1o\J[*A1/$=V#mA&4H' 6ȩ,f  yrCaXMP3{ `g7-.1WïqQ\=0KbX邹v>DZ2OdOc" #'+'tf\^5]1j-Mb^xeDf>(ܪ~vJrdHfkdpK휜H(>A3PŪ[QT1 lniأS{z|h83rěcB2#%È \-,頎^#^o2d?`ϢH ٵCgR-bַʴH${o}Ζgjc R5{MMpmx'\Wpb{sL@Kz sp] 25J~<7UZ>7^o/W 6M䏍J>Fe|ӿs~RM ]Aޣ՚~r%$rM^[EFɧ0)aiq~wisc]LM/rdk::iKj5%ݭg~Mh5m'jr5mk=Znv0YS'hk h`s5FLklmL[omm7ϟ=Gh4 fƐ :t`R;Nyoy1L4c(6zA/.W!I>mw^ZupգW%a!7ȺO$:obuH7&Uū6->ۺ٥zÑ.-$~{vE*"Q2đ!H8F&X{V;#^ώ7ɴ]=; / ɁQ6Y2Bډ/8'_V(thi$:V'Ȣy]j>'&MX+wQ4K9!Z(<]ďWJ\ {?K6WlJ'vĀ8Ԓ{(;o!aBLŔY.g{첋b>f4Ui ! ae{ !i֘82:+%tFS/CE(س}9:n[zb`u7Y7.gX#&\Z2HGXD6x4;meqv%؝ `l~tX̾{FIEGѢNSVke!V>rаvYg +.{³yq׬.̰G#e2*:u8 :LDv7N Qv:MjS7N{(#UG<8<ޯoon݇߷Z Q74hp"l"ʆg FRpF&+Á#?S N%vz:co×v ŎTLm>,NvH9XIDb";Gq52hXYw|[M-wty;$7! f8nv>g WPɞʀp\tΒއ-O"tVFxUL & 4+AΖ"HhnXAe^Ft xƀظc[uYy)O HI\& sVĒmP5nCx5>JĠID4?sbig~vD"\ b%ѹ|4z鋊APsgu 6a Miɩ |HR ;.cAd* DbO;D_S)WpMC*0tCTo2@X=?I/i|#DLoὂ{9`hFh>2b)C` _W+<+7ĨrNBg%F@rY1CT[Ѽ$W!@#A24Vo6Z1('oܖqM:!#3B$\(R?GY9G\te^}iKV ;*-t'(W`eHcw}ᨋh< 8se Z3YI!l!yIs&7D9)&O\]Z4;7TF})ndb:p|#.L% 3`jh,wQ;x~^dڏDlzʕfYgkYXwc8bVg7ŗrRs#Ry ̜[/8h-p%-]HN`HDK ,^IT,Ԏ 'mMsDm"eNx&+'px^]?7^Yiٶ:C)#NC2PpqUasw".>VGBwYH2` lO±7}:9D4HA;JX.w^F|2}53s%CYZBӔN[nd,r[trgK7ӊ3:njͺ4=B3+u'`~>C%y[lU t8:AuWEAㆠ#Tj,ȋhKiCNحN%!'M^۠X9ljK*?!$bz! H]oJƊ@#e)h0,, -tq|| Iocu%cwP9}>n؟}||~&e$Q Xު4X;z0O֌B],kPU~6]$qŲUX SaTz=Ǽ()f*l5OA!+ˏS]ղUO3ۇ]%M,91\* da@3*s)q 5-kDa.YٻSZ*b@vZ} ryc(?͐ 5\◸X"pH;0r>a ϑqfsdQ^X 4PP} n̽kf_Hr=2UMs*ִ%s#mW`)1ϧw$^p|n}hk;ncaFdIY\,u;ܒ{g_D9+/} Hn<&b/DCP JK~NPRKᵅ] -1l%bP$=뢃PW!"&Vߊaưވ(ֶ[*͊&xDphcp|]8w"clC5KѶE&d on׮fVhqM.ښJd? tn1b 5i4ޞWmh|,N,yHٮq?r.yp] vCbHV<~ï ,NkuQFt<`),6ur;XUN~g|nBe:ǜ5/Lu/RP O@7B([7=DV^I{/nbtӰabEVbq (O[Q̇*r勢O<k#y/8uL=xѶi] aKTV@'l(RݛA.Mo5XV|eNpAL/ùflyKuiw2*V=1xP quo0qW~r{|}=ߗÈQt+u ^Z:5j^poPۣN^J{En<:=͏t8j΁J0{]hW,D$FKI\Lb7ɳ O1mwm-"$8ZZ=H,uĴ_^X֐f>c|n.>8ח+/2QDRqKBX~I8j40tiaD ;xW(4< V٤wSMѢ>#Gvd;y[-sJ/޷Hq8Dt2U'=p2ǩz걇N: {=nwŏu2f:ְ32y)x mݛ2Sc'9n4u谱:l` 4xlAm )wGmO͐$Xt-I8"4Z 39!(9'#:9BDžNۘckڷhGai6700A_.?ۛaǜ!NbDE7Jێ?6T# R<861bcaN;R,&8ۈ~,5溩yst9|s=}2rEY'cxtVp{ E嬑/<2'l=(XocEj\{x&"&oJ^i>7#y81e݅takVE? U KA 8}x! [Rۡ UjQMt8 F? Ͳ0 Z 8d,pW\!;K @evt{-ZKn&}d r4,toSdYa|>շ}Wc{l\'Hΰ·I='ȓƴd2htMR*&-LvCRh˃޻N+)8P&D%}T}k RVKj#e) 'Mk8dWIu/GJw.y?P3P7,DH35#6}.gBteq9<#W%{"oǚ]ڋ"/'4AD/DN+$bĢ(NKsc' 2I$e4:n=a۰4'wSE΀c\@׃8z;6E&oE>=gyԔ|Kjg(ͧ~g2N2pI%f8B'/W`PB=Pwvfbj즎'Q/i3;ֲA܂tV;f㤍~ PND ./cƾ;=o>e[Ac~Ԫ }4¬9ﵹ!6B#MN t&EZ }ڄ$9]"k>eq2P%e^ْGzz|}>~嬂t|/έ2lfcWwN3%vFJze Z'7Uad ĠwRAA%3if5q>+X,$ꗯ[zdnԓ-TWTیF|@iFfܽ&c lגlɛ8 ϡ(#);xrٍD QL²9Y)4=5 pu΃itlvbyn/MV1"W/"tIv;T9: ag]vo[E܃&C r`i2fUBEy8|罴Ax`X`EI֮/P894~;I٠SnLnI^B?4pxRkk ~55HrH " 4;΅Y}^PG2AC^F-e|l=<>rO|äЏr.U!9ge)U35K}ĭc$Vy05R҈bo:?{q;Ca_q sɷLρ{wH;*n:3}[r3 n a0e| tO.[١# 6?׉ӝюËΛz}ڬwkdnwx._ƈ$jy3\&t˾Z6z:yIwrg\ccc蓹e{T@KŒA(bR1Tpݍjs6[lCh 3qv{wfX)+A[ (]$bmYd83U{_bqtظ|]NMYw JS0G%L>ګ&R|laG+,Y.vfc-ÄC(%w#7DU;i$h+:L\;m~fr㨽V_Ce| >ZM^Ӯ>r0:iO]ǸXls+}!ß1Z\U#5Z"&bFЪ1FT6+]R2RإC=c(*g%c=9PW:!VSZ8F KͰAA#IA Z3kw0F.4 ChfX MZ.`s6${uk,G:Gl8Ln3XE Aj#i.ֈT1P[%;: jAu7ҍAЍi4:^IPd[ +TA0`O^fU초/OT 1:D4. 7*n4T>6>d84fayfI($vW ]5Hu֬+N}Gpzl}V͖B9˵\.я 01-i40(Y;j7ꭲj7ޖqhCq7{?kԐ7*Z;=5iU/`;5U8bֻAf?n/ L<.~Ykc=;hAYN{ Rݩ5,V_O!TCWŃ!d+HN_ڍ6{{|OC\c]YqU/C ZC0X]lV zywB0,dݧ=>7Bq h˅J#U!hdX7 `:=hձ5XʇF^Rf \ AfIxjlI jJ!{']`G Rtl"KA xP`( +`5=:UoCՃ6NI/^A@ `&DV"(0z]\Up~@#("M9f>ۮi`fpvr/>4px&i'k[P9-^Mg_Hnuhm;v+C?tA8=<1 NwQ ֙*.'o1u| ?[|0Vƽ?mnSrAZfNλN oS mYxm b#*x:GnY/'%#(ho!O@D!lic-e[z=Ecu1G"aZd,4TnM|wVX`bD q=7??֫ T~:n{6ưpPtjj'&D )0eˠצ=udDqE00E]MmQd"UbNaT&3*!,d <`w %1Z#1R!l0}89_W^l$p9 GƢH#` m:א]>O.<=Hcu60  f?k7J3]%E Hz6™4^5fT{Q!%HdA>: w*vqJU}?\hQ(d?ҫRY}<`Kᵸt[Tg0E5;? f2 ʍ-ĽKjEz9츕J 0|[7j(Dj=<a҅ g_&9hq7@J?bmٻhI=:hyP Hw8+o]fIKdRZY2s4<@=XLymM͑t^ ~л5Ũ [r:l0B:a"+KjBuq@=cv)y`ji#0>VJYMr6=dYUq`fJ3r Px9CL"tHIXdB¨9ϡQIJ'?\$+"*n;JXoFِB lAkBfES =am!8NdZdڻZ.x&p`UYcK(-bMg[j!c=![۩5]BWW Z gU,sʬV_ݹZr5~[?~S@vիeԖl%?=cjym{{{qSJz)|-YTzEs`SpV`0')Db67m|j*Ål"i '_ݟbj!t";8xQH%'f~(,5zDB Y 4u;T\p>M0s)":LlK <f5 )!r ՐVZZ$0Bϙ9noZu}hԖP% ]4Q1EhWkqfyP.i0&?8KCJ N/y=&[O*1HN9zCŶ=3̈a_QVq*Px&(p >f֜9ƁѫGwi,{ vgY]'&uyALȗ kҠӸRԝ+ ci-"D8&cB'pН}X4Ja$& W-3 .CDgz,YPHZˈEcڽ\JhU,W!@2FeEzh5@-܃~!o6LΖ;;uDGGuz] PF;5sf/u°/7³^7*ͳgݍ󭠷Ã^;{r`v7mm<{r]'d/N 6vKrW#ȉ Kg,&;j4 w1ga՟>)񧟍L98 BBJ/BCj: ,edQaDjuL' iSǃޫ[[@|m?_ox}{]oz˳p}kD|V`PHjo 8A:=K"tL.j ;>nk]NǓ7&|a;{m*\9j;|}ks?>jWCNCp;Z)7'o:4Z̪$3ţŶGFUI ?/y/[pˠrmz{}7~]BL^L71Vlv9~3s'J5y0)Hf9WYbVGNqf/fcud v's ݌o1d20dTLJ5|F]Dj{bJ(cq0h({w 28VXUoa7!@'r;U./\1ub|#q|bA޻# ځ%,[" !LFγAhItsnmLf_bDY/L_E,PqCr,~Rd 2xO8vAږaS$, 'pI:o޴mr[z['`Aq}6KhŭCi: mPSu7vup_zhȿ& aSv@ Ӌd=Aэ6G{79c }_k ռگ>}_{fWmxD]yYҞ)(@Ayd#E?&(D2onr ?ߦ6nqF)!p*b2:3&Rӏ F43 f g~SH`2H#)釲FH Ifbenly֦q+m$ļ!K5H㕆8ZB>)UtLe$DJhy(X%Λӥ8@Zm U77}$UM \a'3 UQK-uFGS[GL>vG B2O 9Ev1H ICw^^1LO IrM&Pd<l=heP$vK~S͠5+;@tYY2_$ t M6H z<{$px]ѱK2 ِؼmD0n* Zb% L;I؂3 h| pK|'>ZG7?OViY۰ }?t*ЍU"ttŮ#Pcy8w)$Uv't9%P륥OAv Y@覒w ȔUKزDz$A^YpZFT 2{ƌ]«p R8Z Js&J&҃Yyu5p> 9SEo$<}}G E!zdC(|,'~DpjMS6 - "Az;hAvo|9 H5$ϊf+rAjg`51!i1n8-́3jq.2~z[^mW/XE#AH \{=٪ ĩeF3U/Kʼn&XA53fՂJQ0 0zU 7hFJӄE34婁 "BPOE cO0#1DqjƒVO"OMy uG)vݦzW,gT\PRlMCyjm%? ӹ|TΩַsĮŊ}cౙuX KKڛC-hJհWI?L 6K d^4zMC =8P[d$rDv$ 6)ޕ& DM`kjIyHCӣ"{"$Ov̒l_ǡB'mxc 5| U.eAhAL$l|47o֍^fmvSQ^I-/7z♗\1SQ:?!Py4M:D^sGfI!]mvBhKǭ%)+$ Y.}1 z32h"q0f~$$at21!)$E3+_SwXr#o#ņBV:]!"Fc_]>,XYue OHw͐',q,Z˞Q==vcH!:A&6#@uэ:J'tc~"ȯ ê@૾#APoC z7(tyW Л㋟El|$pTN*>oӳm Nek୏/6UjsfX.* 4lZ `8O D}{ltL|V [#=,DW缔EBzI)$+WƜ owfuDV$[9l&/Qn2s3 upk_yhc 9t 8&R$>79})vdrw~#ߟ~5zss|$9ǐqeQŒ{M¨NnY5V:>T(ۤ!#ԕXBۑj v!> ;\mO$=d`GC*nb 6Ŭ>5h5;!9F #d~L۵d6'ihb 8'&z_˭8ln5Fz~; =*'3ASYUiiyl^O_<[_ Kaֈg6-Gɼw0r6A:zA+k}/"o.X$:M15}*Ĵd)1RјA26pPe1E2}ӷse%ǙײRàf64)XO}G+D ̡$ܻr@Lt1)!@,þ+ToiJXfax\zUs,RpOg?H[BcgZ&`4OsLW)gh;=N]n{L ?izRj,2k49+VƯY_y`yyz܍[U޻`DXY` ߤ.hrŕۉTPWD6aHb3'i$79${~Aw Ģ(eLӗEߐ’UWڡFʅ3m;{T( i>jU t`uت)8zr?z~Lh*Udf߅'ucnĿg7_md{Nu[-Ϯ7m`{׏%?[m=c1Cu1h'UDiQgR,wJ O';=Iq8u)U'}D=+x$ӹH(=WHNidVڋXReUY?<~_' ]@⣼8EU~/r*% t'PW)d171[ a/u,^9-\]rs̎Ns';I#c=+ 3W0ɩ+N F%KP&TT⩔WPI}Ф_4l&I;$eH}.^00N.w:P?Վy?(𕟜Jh0vGDdž뙜H)5dx_J{q wg|g/ T!̉W:p?,w'h?#?hom=O6o??ͣy @V0M ^?/3\LQhTeBK"C!&6;6Kuکã/Оݐ{iJ)d;i`Ŭxe] uCAv)%>qڡخ8b;'PNV,g~[v(Q:hgv('#lO8սC9 BӚIoW doW ߎ ா ;lB P f݁}bo_r $/45G~ODao;'W,YgW$;mvXO{uκl>|\(H/@THNW{>Z7RQRB$^_˫O_/2K'O*y(T. [ZfS M( Mn%gır 㛘=V:WͭKUdw4ڃzl&, o//'^Aw !=[o;N4XC<.pZ5sbRVӓ*Ȕ_0y>m.w'HԿ6 !FPȞLS/SUrVJ2j K6_?aby.x*SB,S:z`383\rV1Fu89ZP0C^u"d^h-\V17٣l>-P_ܥ"*QyߔY8F4:Ọ'<j9_h#roy($+E.ԶEbw CFC$E < PcqgR^7s SGmykN+ A:M1YvMͧXށacf*<(IE&[2;oFlNWO O9t)'8˹53.-+'9CY%= qV!Q%f˜=Ⱥ >Ⱥd]8)O)@Te] eO&FC h|a_BY@;Jx>`ͱI|LK$i׿"NVw6ֳ?#{H)׫k˅vxV#ɗxW#^PHij_N3O֖_<|>y<|>y<|>y<|>y<|>y<|>Pڎ X