#!/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=5f73ba66d1206cffcc2d27003e4552c5 # 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 B]]Gq0r.H\9w_:stD*?lk:/^4/;l6_8|"v"`[?xZl{K9>9i~&>y8ܬDƋ_zV~ƺ>n1t^2#* AiTFn(##oF@.1/`"\G3NO^DlFKQcxˆ,Cכ{3UcNيGK/VQxp/p@'/a0p=$ N[by5y,t,:N cA{3^O0!.˨ Hꮁ߇ KNh!Dl<_dA /L"{4Β#g[fd^,RC" #<ܳ)GCBriƜIe5cTX0,#y MBY+>C#_HCBXKb~:9|c;{:GLf~O7- zt``fܿА6x둩[̸ @Mm`UcƠE 6ڀo\6ޞȆJ7Q;3(MfFwL63gXݾf\pTF̺MY@7QL>HԞa]e@`_<,:[\Qo|}?Z]~O/(p;=J?/Y\Px_f7Z]o O_J_9~}?j[O[\n,Ưǭç7*Wsp>ފOoqniI"9a>,~|< 3/;l ·䟧,\"xT1r&v._2Z@u/O?JӏJ3~"V3/- -w#1мqak?h`crpK;ȂJ&=--|[XI3w;u h,G45@Sf|={%,оuE8@- ʊt|ZaQ sݍw@BK4N P~ pkAΓ]YE+"vkt)ꔺAӐ,{.g(>=(uA0E6`q ūIx[g?A•J% zL;,0pvטju,/cKnJd5 f״ZC՘{W+骡U2tܼLAv{BI|~gCwXR<@Z*ِDz6XuuC15)"UZKJկ [wh88N%:,=Gz38 )xa2y#Fdkj 2l;QSf 0).'{`}#`$o0w,xY GS1&{WPGB8 MuKq0 'jd7CwIxdtʕO+Vo[2]FKm(Yf8r1Q7 v927?Jt?d}B b!NoǍ}՟q0tvۭVfr@fpi4q^qo5;6re|v Ldqpd uSK'^YÍp( pǞ{C띖F`x뛅 HF<c)<ׅLj)Lt+NK'DpH̲n >C[?}@ !u¡JGb\%봙ݝt`#ڙ''[vmvcWt2; }8p!_d9_@4>kVw^D{7 >5fw2ţJ|C yS4gI {غ ^o Ik@(q©Jl,". I9cT#섦V,l:v3S1Z*{-;devD&K= ]/i˗6')WnH3p}0µ=[CM7 њ@H͓Fi*%DXŃ1%'%M=,_y+YzNˇI2D BӤ-ق έԗMi 00XoOݻtXJ)uTAd!}Cjgx̘DTjR62dKo!Vո ![Q,1ECpzFpIۓp6[m-{`YH )֜tvKdN?itQu"Ov St}\y;;h 8ATB-ɹU"Y (l$|#׈/'\ NڸoovuK8F8enZlmsE ""# BǐO`b >!0-ܫ;ub:-3VrG ˉ]}jeA Sxy>)@Lvq99|~k_z*՜>w=\gupeެ;ur2ɪ٣ 빮cS,[.%Lޕ]iUUz/^LʹRQa'ۭa3> ܙ Aimi&tZΤK P;RiKiz;VA/Z`a7wV4k >/x2F,V?<^ D#2 &teCkO_~]jag%BPI&4 Ϛ&5M8OMn>w;lUS:[\O?Wwun9|&o>_'/;δ_asܣEz1'c0/˷b}+ߙx0bG3c{A1TDF/5rSKʛ-ԡȓ_>R0Upಥ}~\zl-L.~?EH0#><9DTa|ەf\Ү~|sS`(*ӓ4I}5#@%{u2]o=,h{n)::TasTV6KX+$5:ѱNK=%N K2^( ﳒ҉ak?t?\|i}KU7F۬+8FGj^Ѫ%55k6kr`[bMhuRSgZe}Xlkhiie6W޸?&:km3}=\P8"4cwR+Â5LzϞαb[yIp%-*_jwX ⎊K 7JILaDl(+~ZGk05PAcRK"'3"ˋMܢ䴂xfؕꎮd3u XWO~ݬnN&#S.gԄ,Kfg{͝X 5Od ThMYf&)b$Wrٰ侠Vp_[mlNg : *zU0$5sQ'?yD9"wȷJd3ӎD(, e_6&oxz"Nvϖ aTڪX8bxQ,, #X7?śdV~C6Wqx9F*-MjQf6s"_RǂOV-j7'C͍t]hkc4v h`C{ xTP~ f+Kخaɇ~(zIug< nwO骖h+m`o9e%mNFdQZgBqk"'uD;",|(ߪx7qI~R+Uz*8u^wCe\RkwXXү9r{Jn&tjճo'v/;5POvײ]i!t~sI =q .a$66(_2gJ+J:r0bHsy-X,Vu';7zFȾ?Enw%}Rs/C6З" !&-ۤa1_.g{-(t,='u3Ia"#޶[ḷAuA!&{򡀢I?ۆjR/zO-%yE XkIe'L5 w3~}-뿖Op5`c8 8sK.6݆p.bZaljd*U\TF22l,gAJx ^2)$Ll,=;G]-f/"lR4Ng-$jkU)f+O%LF `-ON!Ӥӽw0,1U hpLW'JOO7ƻ+>xynSUG#y38_=g' v8Ld!pX?ugޛqdUh8jh "! Ϝ%e_8 $H$ dYvWqV YU&K&1lj3O1 -)%ɹu;t-к!Һȫtn̾NGU+X,e7+2{%|$FI)$"%b\i4(ԍB_"kI9E05$AnvG͡n6:9y}#}Lti6|=^s YUF>U,ȺN #683[3NhE5 -p&&z.V8U^\3FYaku^??=0sS8i1+I Ar5 B[?Q?DZLK_cIx:RokXm-&!y)di`x3ra :y}ze-"ͅoɻ__-Y#Fٴu7'># ҡ̯kf~IlLKm9Do7;ILO2*3Q $Z'݊Գtϖook0ޮuׯ֏MLe5޷Q̞n8;#B:pY~y+:`c#D VRҁ,\֙bcOCXA>{# aYڎ 2?e,mRoO~͹lRMP+^3bp`pw6)i՞\H#3_A^m[ESP+Ԉ?,s{Ux c! SbL0\U;4ww) sR0mN0PeM k`Jo$5M]UP lK iϑ9`DKI4 :~XtVH` c˭u&nյgcU?iN[[֮ܺ)V׼@CFp"LW. FO9%XR@ ));! X| g ^nXMQS q`] gJ-Bhx4ҩCF,OIԽ"+`g >S&oO¿X2w5I!-?N?:sJŨd 5k  |NO+hB2zܵkUo)`ך(E'1N:ޛWHDI9ɽHC({E>$zq4 hckNi%)n+sIvf9&YQfc,5yHmaK.һ]C֡ED_ZKC]`Ћ8 {2#0`G]0jʝ(wY>ԥAynߧ}c4*Mo/B'cX5GOksa廵7m2|eDff'Df~|Ag~Ͻ? 8iw?wO:Żw~jyϳ'2$>I=gmL> t_/p!"7s[Lвݧby_ h.HJ}`UC,Ty m'8z~3e8\N}L&ⰰ@QmSuT;EQtIAP=ZN0s$Uho@mۘF 9 `nIg%o(YByFSLVqT&OH(wA^,|lI88}e)<][^*,%3_6a\U5cV,L ~LIa2)JgYsN7b .!:cPAxdIR y`Xu}h[R-BjDiFmA9v8Oһ̂-Ǹo>)<7_" iil:yDj TO7asPΖ.5L˜O JrrE!6!] e8-PզRYKgUf# Pku.QVcz?9m~I,C 7OYYߜCa D-}?})Yઍ/eh,R8lS+ yJ+EM ;dnX4XL~cwƏ[^^P}Ŀw[k;=q`Uq jYCᴍ`aizy]pkyv*+-rxx[k՝+ pO(;sX<*LaBt e;F`zXgc8ED&Jh TtZoYh] 4l˭` X/LJaR})'pjO~~V6R ~63)gK-'SK"}DX ;?fqX[9@y,c}K2ݶwMo_ijOY]0Ԅ%\}'O^Z?y>ֽB7IM۝},ޢp-I]ϊ-7zyĨțs>^V- 1#;r C[nnޢ᢬Ҁ҈Ґ˜JEjI1T81ۏ)9[b0 .51B$uр_C:d3tsGg Z(d%(VBGNwpL3wClsl:ع|ރ !ٻ\zŷ1H p_[kg?W?_I~04(Y: ø:z1 MB[>B@A~i}?/T!b!cWtfs"lGlϢAW dhTQMDR菴>xYoeTWAX/Z'n<&~X2QMBypu RnWYal(im46ؕCT !O8G)+ĸÕ-鿲V c* H-фQ16[jsG?1N:koKe_~cϱj("*"/xr/FqyL>M`amπ˯\`[e) ;a?Gv?ʯzH`jҔ~Ģi zJ=YfbFHݍIۜJJZU ӝmҀe5X )s \L/>46rOrm{NĤ82:YQ멱iXҦb@¿Ș5B/"6 /)⿌c.($4l%)ɘμ7=;lQ+Uk NI XɄY޽-sM׀~ٹ7c9@[3oc$ %eDmg}Կy ބB Rv2tKIvv/RiFÞ 46䝔ыiTDc4n'Ÿ;}IG;_ss}zZWkQcVgImZXI zQB. 8\F)j1@'SU+l 0!qT{CQT]4h;{U8ۆ% Y2S͕,"c䃆B5*Wy1p/OVՄ byxq6b ma!)}8|9x_L^ʼnReN=*ymKbQOz$LTI-;̹5 -[M^:LaS<1JɫWQ/xgW>N8[kp+~O,z˚rd|FrWzH9咩 ~W}+~!f ]vjI"{#*Wݖ%7=$੥Rj%鵪+Pި~~y%'e qhRvK fiOʫ_[L&-WFf~tY$$ߝ^RCsmkWYw>lG;9)DžBSnjB'"&[,h&ϝON6L)SQ'^N.*}l 3א zyYOc(V}= BDQiXr@ԗU [ *+CǟYbIvdK MPԌJ!V7 w kٶHf5Pt3D1& S_djzJw>ܒ醵bFc] fg-G4Ͻt.>q_sM) pœa\zfhV/, {o4'yC^=a3|@NɒKiIuoCݕHڹ*'!,#Տ(&{zUv[!gfpx" awx5@]+ڥ؎`=W+N;|+v9m/1'niuº5Ze%=Z٪ 6O}}DåжPq5޲0߮- &Y N? e8nޤT >2 ?ɨ†h:0ߙrPi2 cL0Ƿv]W2WlY~}D_Oр_]$ɀYSKV\pl97MώOC/6]Tq _.?ly8_,<]^Y/dgO_s[vr v>"e鳲T}DvTԁ7^)P~LɪP?xkM>N:lh> \pw HCq5U% 7""!`sĕjC?`nx2;m}Dz環^|./a<זVmÖ{r:묵/S؞߿RGHQ'g"䏞v AŅQ@ʜ1qkO߀y?:|k7D=pr X.,//T5g2{GHsLKooh'D]ʕ}:i1IptwI-? ,U+I'q4tIG>Ӣ g n #Z5iA,T/[{-1M9=W,O.ڐz>Xkq\WC{%g4+![.ZՀr%Oc=}n');A0{ ԟ\ɦepIXD Bo<]4 Y`x fLv]T'|EW kJ.Hj%%ۗ߱k1ƻLr`gp:)CSϣ(y|yL;^)g|_|}6ܦ$:iPf\|踂of7j%1F %{HݧH S0rvy; fl<XoF tÚhQ:.N:~.F^mmr ȼN3K81>9kW[&4֙eu hqӜN0sYD4>Bڈp(lF!FCpfؑP>ȒHN{CY1plNsOA`Cǫe &%، \-cG:}e#8,Ad,)y:ONHLY"wjΓQӸXʽ=3@޾rC[w۸Hц#c=1 X$5>]y7M(k q&U uTp, D~UekL><3 k =HE2-yb >uO7> ˡ$G9}hNQh "$S8>YˎV#΁w*Xqx2W\ڬ5ih?E|Ea-,:M&H򘚣b=0.-49j)"~M7J*d^BF4΃qK<,! .ۓI^M#]`Mu㰛Ʌ|VTF ~iN&<9dOϪ]hSRi;@ۖ'W[yo#x7/9>*{2n]T .n4hRsI쬮.GáDxMb22o:/)5k ymOGdP]隸 D L 죨zB j/;؟N]]gA}T?g fP5ܼca)*f@^P-|‚ ydISH$odmsћ4dj$GlʯH ƩRsrA2LkRKja؄CgyMղp)p Ms(ghW|rcٹ#Νe!oSkEgXCS,wQ/ֻ9@vT g/yjG57'qʥ,@m:G9rKP¿>'Rh3ŌVg+Mai:BA]ZYAmwS0 K4+MHƶ]/"aMqSpUŕ˿\83Vv: McBO>}j rC gA,{kŨ>z.5M/*Ep$kl,&n M'Ku`%?x -[#R?:ILtbD<n:83jA&4.OE6ot'ΆF?§qw)ʩ}kݵG4 dzbW[[B8]jhW_2W衷>W72OϝeR5}d|Dc/d7tr^pO . Օ|.Uj"+3vz~.J@p1}MG׿˿,,J,@}FC0%n],/! KJ j4FmmbiDVnk,jq+Xo^g(,ɳ~a:΢_l&T*xWdWdҹ,Y+.b95I'j=zOpl7kamb3t.յLђH7 Nt:8h?!l:FІGQ2]D>3աXbl7 *#OaaB4ǰ'.όsLpC YA>0Ś"SmG/Ù\IgX72d^o'EP] "rDgS HUĮt.K2k?S)boת"ݱzL# Jt;a0ku 7ٱJ L:hGTYK:a,Д2e)GbRnpyM&6HŅhNsd8״?vuu H"Y1UX9sAq31URc/7#\& MwiO[n\)ˮ0wj&ce;;C>pEk5ҵehb18~>LIgÚkڼ8<`̛߽EO^01ۏ:/ N{}>k+Yӕ{|hsKz uIx>c4>4?g4@֩MST/v'Ɖ秙$|l]>iypB*ǍݝbƷP=yI6ɇbNGϺ6Aڏ2 -/4E3pb%q)7^^q$bKi SO* B1INV 6NAE6LS7->G7m #/.C柢yP_೬$g@,: %Ǘ*俛iv{I$qLDrR\b@gߍsMJ낊w]xb*P/< vGtMi΂.3_3:P]eOQ>TX|3E8jXZcBu60W,tff:8&/)0 E{z~X̛@:jI,o= .ľ跽}3?f:쵤wipd#YLwӅ-2ebQ ڠS_>tDm x@EQZ.9U{7Bt:ЉZTWmǚEL-XYb~*5{S-(NF~c)M`,$ 2y~42y1Ďlx ɓy^9xx^DA~4H⹕xNm=/T%:g;S_p4cu4 4 [_$$*:7ٰt$%&S]7ݎ>D1sfm|aɦ*?3\;sjw /4pDpDGm-K‰0B0GʠwbmmWᮍlԹä鲢N&K9(Boχ̉'>@"|hDNUt&tO:V^vlJEˢ , k'_s-^n]H&e*I~|dِ?3"jq6>Jsys&SN84N9⁻{BnApy`Fqљt6}+R*)n^;TORdK@RA9Epw䬀lXsJ5ؙ0ױwBX3N~W0Vce x@!D4d 5'q;zHlC(֗t&D,ǭdRO^2Y (gpΆF,c6YyGe\m)YB4`Z6[AFՖ4/I6488cy5j"p uo:3Ir;'N?Ț"umAwEm[f85I/]XʙH&SEvĀ_9BخBfpr D&ۤru!~@ oC @ea*/`j3()}QTAE' j?%r% HY R$e6C=21.Ȫ+~ĕwrEsF~'I4_6uÌR-zU q${C ‰N#BjcU@*1gψD +.—?Q`5WAG$ n;C*VP5d.MMOʙeHlj,~q60o)Y'o~洯Xqu2IF_  sY/i hpM|&5Wo#\3_[nXOQ9wxLj3wXBɍ9P( _1m[TmKrأeqq.Mň=~1K)zoZhragcɒi&KV l*xq iX͒"߻^pQM@`Ы@ "Bk??N8 `4haI<cƜVvlJ}@ 6OR9ܘ{ךG)~!RٖLH$C92 i,,5zl|Clk:]N;sGV:̾4lNIbSTːz -7DY;/}IYЫg|K5t暉1H498d Disc1} v,P.ę.f# ?2IUQ[G 0`a:EgbDcKuگu+aDB1{(܏ƔN;;L=E'.(ڰ kxd]`|  ]fG iL(E2$c܏]({(BSV`?p2&Z_op켩0a2(,MwU5lL|J?RUgl3'Wg˓b{-:Y'ߤ>0F5j ;5< 4/z;H P4MQ?ƋϾ۲wG1BĒ|avHlR'Ԁ$"+0'ŔDJƵ^'y`V# B"FK^huyaI͎#ьn%`րf<z:PMޏHT!u^BN NU 0Q_԰1` o 1 JEX~h:|Q)$azEr Pg˳g3S\T^۟/MD֘ +A[ j(-'Qv5x04鸲Tlo0"XZyȜCBv]ߊT \upy˳-㏙6[𴃏3\=a> %r7e=aG҆(e\Yb,BQJR"&-*PGXn5Z@`>PFT#xsvm}x8;)Ձ$4>ۄNi7wCAWc-/m<$1nۘZ?ϡ 4E|dOŽQQ[_C?y)ޟXٞN""`*ٝҾ# H,2z*b5r0lbzZ:wz>ǻfl>~;}L^^1R&8Xtx7CW~IU5G愓ȃ9vi]ۏ=+)8;,zSMJFlRɍӡ|'$FY-aAxt5 ^R/1(\ #qRױLgaO:g}T&}l.y<%,(쾌|?<63V_qb4jA;p<$2I9 c٧ -$FtC}nZ $M!j?ǃ7 /v{'zs 'i'k_\os1U| omZ4g#I-\4h~t: 1&`Z6\>Sm췎vT2\1ť:6tf;F\CE'I t=3Ԁ7v^׏7NK^K:%Nd3ɴ)BHh@8acv:)KF@(>̾hod`3B dHu2j $#: M۟LgDri`URw'WbS'gLh0Gu~i99?BŜ}$# 91`),NfS#?'PGbH '9PD Uyεvf4+}Vu ^n,H,Ǧyc<^3uS0UkYf+%-ߴlX;u^{ЙNٻ:1UzWm"LJˍ[T܌V|XXHdzO-Dbg\J"̦)9' s,;Z\{YF=9.Aٹدxk0@qE.Jq~aKSc5 Cc {w'Q <>"=[ߐFQHZ Բy;\uƀp5/1;2h-%Nt dO,U9RXu̖賓24cRz(*Bv_ƘCDGpQیd]yalȠ(ƥk(9@pTp LE:C$*nD5TԅSL:KP#i{KX߽r-t0ٛw2(Aa6R~K$X)=bO8+_UtÛ.[|yIܼ=XW<6iV,lV^Glw\Y]D ]a2hj:9 vƞGd;g"PKu""0S v> , {AMǢ£74\9b:alۆXdgq G6wQ+raVڏЃ>t!L.cx]^!p00 qc`_1w꣋[  RN&Xà. шehM"H@eJ{prCnD9ԙ-'--:h̆$|]7 6\NxTIRP0s`I;7ϗb{ h4䑭b&vِ {za0n+")8ywU< k}ЙF*;P]c`j/"*Ӣk{NН7ɽ. 41λ_diAbnbDJZVYж!_]HHcp"x+hގ!#DQMS7raa;jLF)Z ;f!L_G#ezfd :<A\1\{w? -JO/V l.`T i&>w>ysjث) /!0@"G~3? t0$xUZׄtI1 zژsK-|'Xlgj+YŤa?cF^srJ,MT)~,.;ě뤳r1hN~&h2RnR m/#J;U=[I=z}įK6kQO=z/5eW&ۮe ҖCcϘZMؕqdHݥ)xz|6 rtw C](Z25@D = 2oC{lr߼nP)F!N"JI&UULo7 5䬢p[.iaIeRFtU+ Ӊ&GXX#M.ޱeX)oSodϋop^BQMT/6huI#uOc1.,Lgb2\iU"}[Lv4q2[N-/!&CIq ̇ T*rT ,%l\| =(+s&{aidML(e[(AӕL_%TAMk iRT''+J:9YS5hI@?+e,9t3t'fX`(K#sX5EaQC+Wi[SBdhmF1l\s>:k)0n yT`$/A̗Xt@$s紿!8+Eȿxxz@ۿsǃ W=ms>>_[+מ_7~z" %nI(1֣ Ix Lq?^~XaSpªchS3Z"yġxX,eG9KN6AJaaaLj7cUXXX_K86.,<@{'--ٖK*1YNs /J)J,HfX'Rk^1 bKoHOvyq ,vCIFϽEG>AOB ;À=[J>gI4'N8Ưqz8RCtj#T>26ݳp`s 'GFEGZ3WeZ(H07)֖YwoM'3^\ҌtcK2iJ3KTUS4A/*pٴ̦3w)yƤ`ʌ){}^NC<㴒7-^fᾆ c7f/N5F]aҶe:k?e}oo<_o%I'BcW>_[kՍt߾盻\?*~[GzY/KBt4~ߕ+섑jP@<wGXzy?$j, Ԍq*ɬ?ȏrDuI8V%0$/qÃ"J{-"\*XJ:}>BS~[{݄ʭiMgv) \x_[ jP9UNX\Ec_F g|KL`?Ue._5^k/Icm]-M`ىk;=ruhCj g@vfnjq `I+Xƫ֚̓+(O$?FхԸQUF"@;gd{ֶF%KEҢֿ)J:Aۓ|9.KzC_PEẌUuvxu6> 3RAZ<Eڸl_㳶7r q~\XHOPV}okkq؏;e@G/&bɓ'9ǓC룃íEr;|jX[IZsȲ.r]U7P?QaL,ju%}?߸g}\k˜{WֶD^.ł~$- Q}[;RGzhJƜ*LPcTj;N=:tƹ-'(kz[VvTԎ~.f?vj{5'We`&Pj[u`Y?zخ77AY/C Z*`؉MZ;c ^ݡ=ا  N(T 3ݲa0-kjz񺾿]`-zIՎM,fՠMhzZ{\TWݖ°͆72U!/J̥tPz`vCsMZ"P"W@g&ChB^הug'p ) =GY-H$a16 *jmjh #[1P1A7i~jYkкEd$DLzA5Zopx%$ifz6`f+u!}ԡםt<͐)1 w K())qvB"QWp0$x]̏C~8Nϗ/..Y5. /B؇|7)Q }]o!yzmg^vTwWV}>3?<Ƨ@~p5gҷ~  ᵽK~KYغP. ۡ:%aY ,#!ޝ9Uʡ aね |?9-x)u1I,~*]XyڊP g cOyNm6ir=TZj "CvKU Ž#LUEwheg[Y%vF6f 㡠@g\iFʦ}̚IXIZڀ^/Y_GoYuY"xv&akV$$ ;$ T"C0t]!CBQE5w(e{HZF`t R ly;'ET3Q%qiO`-)#c f$ʵa5zBE`` [ tgӨBo36@iGn+Uբ<+{R"4 H)H B3Q~N~90 ^`rN0 l f,qw4Rp{.Rd$>m jIlT&i g)<cJ@RpbZ*f@׃LRr0R$ų(PH5j\Ÿ7fnLOflI>lVS4'_Q[@_96 |o4S=9aj'I?]TwO~kA~g3ߐ{{to>/JȠ!(ڌЁ]KK&fz<;%SWTpɀR,Q?hjKWW{SP6TbZZI2Ԅ+,#dɜJu > ZR 茚l`$ӵ qL$zߪwJUۮ"T-g Ϻ td 7mgd9tacX=Q;мmUz3ǵT,'< ɨ[֙ h> V=A7 ͌.NӈȲҔn }E^0 f =].!6ir-T}b/;ĩ`hrlh?9L1Ώ{MLy_?; Q"n4 D|&Q_ƒ%4#k"=یS7Tmg'8?a+hgQDXFЅ9'[CbVPEQ|*wnL@X;ǬpȈ͓dAx WaOЩC-5M"0a $R+ŪfN6 Gms;.^r}ƼmԷ8ŮV6tdpxP{sJW9eE|iF62>:Q[N -m`DkT@bS|r9Tp[ZoWUU련(j$3DA@Xs$3baO9DL]xVPWYB:f=bV6"'+Ad`MJx~+n%lI($]3fj2]lI2[0H,V/%q|D ,F.!:?ZzJ`2 6L.OdjRJqN+Ch…;?òt+6(! H.P5a^;*jI 2l ]&΍^FnvέLpq\Q͗*.eRnZ[ǑXw֔f1_ʝE9>M4QXwWlyzOF{re&^%m[ Kdf"|7OMG~K]z :#BX8JI2l Z4 ކWŬPY1g]\eHQ"LZ3һ7tZxd=A?ToK 0otTaWA3PŪksQ"ybJ9!an{N◑w\2R2n'С)NY.Tv'R^;QUœ /^DuHLCB&ԱL˴H$Ӗ}KjѫE{CEݒ(ܶ\nRE6oWZ&ܳ4#ƮL@>K8? F _GLRM}T{N>e_uU} ?k-sEysRKյU|>}>ܿe5Ս"p貏QM%mިew1-=S/Kwii7h)Zz춴nmI%mi{osvmK F[{75}O1#G1_sܡ>W?YO?^{rU>ĭ{Bh-7g/qQȼV[GQT뉗 BC8Ծ QK,%{gQ]NS}R; 9Ai߃t?ζ.=Av|8CDDO|~v De;qsjFGl5X"3Kg2w3{٠z2Ndy_h%dkZp QԍuMz4<]*VG Ǡڅ~$F5Ώ7Uޓe{GhҘfc< y|vVE2#,S/:0ʡQv`KΓo2 EamL[qm9 Y;d1b ?M+Qhsux`Kl~Oz^hTy-?d+\DHꕕ} kp{(SDQ.Ñ+ 壟`0 : Z'F8sǃB>1# 8;Řd:pf feM`jj̡d؝.)~$"itBtD4D:iJ5z? /7LI-"*v?J鋎n.D+jtUlʹ}BXMx* 7n_1dзUNPuzeͯ5!&$px'9?˻f')g "Ǩ4TW bn;v͉餡֥>,8e=4t/>ߓ_"n?P?xC{D:uv8fGW(-+ݙ"jFڑ-(ɥKr#h#qk5xB ^~mfIX"jt6 -7gZfA JE q65^Ga<֥" Iu)ADa+t}Q} Z( 33"XA08d^[^ r=gvuC?#x)6s8(X`V8MѳjkݕFvO_OV)wO:O7g?~Y}Y>=<ݓ?&i{vo=~jXEa4C<ȪVNBȓ$KP@F# sApY[a3/0 C\JJ/BCjO',Zad)݀=?O+[ >wmkk?/TdQw<-;=Tq2;r$=_/ШBiz7Yї'zR;eH-ٜ=I׃ Z$csNOs=P/Je.gTsn?G2igۤI͌G*qԓIݣL6y]śG2}.T:C8 B+*GV~['t]Y,~{R4P9jܵwaf -9hK_SOv_]4tmCfPp2v DUُy٪SY}TAR|C(^_ˏo29t$Ow{*w'$EMTv7n@G@}} ?K7ꔊbv1MU_ޤ0ֲ)C_ru颢Y|_`h6|8MԨOzs|]qqj pTe3F$/K/ Iw-b.gS}~@sYeu NԡjJqeu9Z-|JwVݠ9"jOjf:K+'W4* G#fYLp@Lub -Ή JB3 `|!WGSj$sf <YxGǬ9C`.o2tE(ݷTd]Ȯ 1!ejBCpY/>fS`:[zL"!ѿko1墧"r*`4={{n(D_{!^H{!%$"O|[샌0+(T+䑖zG.̘r>q@.M[ v%\Tsc?߿^R+_>΃<ߓxN j