#!/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=d00db8cd19d58bbaeaca43a9e3512a56 # 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 :_WLJ¿'G^ڻa$QٳIR7fIMl.eA=;f)_Bob7 pi%#Є<=~q0 sCm΂%&8̃Ѝ"WI};I*E\Ɯy ҔlG?;78Y.Ax˼( i M^,X0@+u=vI( < aKhy2Q0tw$ &X͊)AOVn]&Ia)XF#]qlˌD lQ lѐЇV643!,FcX-ēD2FC4+$b_&kc[`2}kW6i1m<ֱm3{bZOcD]-LMݲdtd:ojcЭ3ƃlh/; P#ڰОthlruspڹ124aq x46LFɦ3s:t k0Ҍk}L6Ѩ+&2Pd@v>q2buhF_ 8k 2с#|ۑX-?gl]k`Yɀz3SFAܲ {fr2-ݼ1=M,ґfk49 >YIۺiΦ1AٯA:@$&'[D =t+M,ILCQX ]AU+#Rt ׆AmM ΈqTP(qʌ o $^!X4J Br;e:M|r9EplZ9Н Z?]{˛45˱ͦ1FT~sk[6H Zv>.8\R|mU&~nTvYhJΚ LSBT`5ۋY҃""STU ^'}Hy_?~{W~o#ݯOd{'ի"NNw?3Vw%((x=a 1Xr:R:d { x6+6 ^xv;}TA ֌iGvc2ppjFwA>f_԰<$7^*sMy{'Jm8$ YAۭE>1l {ZAYhWAoSMEM $YNa!nE& q6'G =n>:22rʪ,c?E(FbE+,yxޝ5Xcz'gzɳVz"1T:=ko?y&aeAd019V?CDrU( ի`\J;ވLWX/(?k$o\Z9O7Ɇ)tUZ2{yc?M&gL!wYO؝٩SD6q>.] )W{y5 DD UN̄`AD8~9)f[hr-33EyrYN T4(u5ra}wQɎs/b8<)V: UMo1ld/4";:kd$DT 0z^iSP3~)) ʳ#l-vp =DOGZa & ù`Gͳ8Y#SCx|ދ=>=k4{.;p>Xj!GWҢ`;D+K6 ~Zv m6ʲnL'- t Y `bmZF^A&~%i6&@ 4񝂹yuhVz.` _L@|61?ػyzUWx>Ku]B]" 1*[hR{ZdrglX*_%wf9I^ R{.9*֞kvמK%tf S>t{=΅aZstwʱfH.J5˛88-#NO)ՙ;L$xݨ2xb;xg}Dh0ԏ>yL 㔫cb}h#JŽ=YC֯~o<޻K,JېI|x=d~ijުn'5 r0l=enom>xtiT/ Z R dnGtlsL'LuN;Ť]͚lh w/AR 8NFH/XsW!"w!ѧxaeZ<*fkTA.fGZVsQa q[sÒp6YeGX%0p}q]2,+.A B,-^$ymXJYU rhe[kJ@e-h\)[:Yu!IbA᎗kH:eAξI慔ψ6W@A~R:87a Lj²)*ҙFfMBFY.L.':WUS\}l.P!} N@Bs.j?Xub+C|v^xK_öEk:,Z?9:m\f|NAMe$]k`z&gA(/SE! lʢ&s}-wlOR ,Őćz±ĮH`-2oH_UF!i\r]Hy:ncw}ޅ&^ji&Q43sis7]oIJEZ0REdEouuK]JW-NJғ%y6H0XZ6oKuشhZ!+ pl:!+R]{+Rl nd[xX*O`ȓ#Q W@'Ў)"Sזϔ3ZjeE7^.K"01KRv kN8}Cf` ɬbZWZd@u9ڃ#B!N-\=ynU '3H //sؔ)V?\U&{ !,$? # Z u XQ :UQ<|3l-\/_GYdPb7wφnXdf6 z C@t Qm̠Ae)_a?fG""2Et2/\qW|%=RѦ~܎ط x ?q~WlW362uJ};E"Ʌ"pqf ޻~&6TVл uOXaEZ2[nG}_q\%u?pO|(ZPR~;Lمy7{{Ikt X5|DQ/, Ƣ*k!Xx1j)[m⮖*.Y{4Fra%wJM6ZTD8)!=*鍑}4t{oҭ4 w9ʵ2S |#(9"`~md4'Opq`Y#pY?{ZQ|d^1HO|yzAK ˾4)z2W,֍mq3 ^Z`A|eHYC8Z%GHQȳIV&lpK'EjQ<-D^ZyrPqUeM2HIy|mvn;Pq2X+DyUHJH_p5{"橋4u{tp=d_ ThQ:U:V[E[ %e&'$75HYH%Tc𣄤z. vM; oՁCs-V B%dZG 4gUφNuڰ޵\kGWGk{ňyki=A*S5*[I%<C<#eC:9jW f9`G1AS}ҀJZBBf@ zgkm{.YpfXD%L% ]Ȥ$1LKD *${9Ac C>/*oṾbT=~䃬obb](/84Hs- GR-~6.׭@pIN#Ds2IO$v/,P;qPFyM3[^"EG_7(Y=VZ(t f>D1K P &sc 3-1%JxLc ΌO9/uR$ރS&8ze&)RC065 f }./OXww)aƿpp~Q q]\)Tfp"ſ6wkSW_}Up}~h4qd3,8`#iTI~ A֫4% */΢UBl$w@knCm(NzM-) 0h"rB-@An-\GՖZdQt4k"!F.r83yaSR2!g`.uJH(z)|(z,F:4TU~ P1L04QAG?fl2rG9Nb̞0\PE~Ӛl r6_ %Cd9l;59ǥ'zZαoC3q<:- iε #.dAߺ i<:^{4"QVo^IFD8G5I6ț$;_}u;] T9^8E"jEdB6 Kˠ*nhT(@szwlQ ҙZ2܂%hP(X__+rf_>_Mx>_!@x]d"M Fn)˝L?4NyӰOvӭ?I4f!a7pLWNꫲ*J^M-D:3K $63_=b'VvIft&}F`X!mLga!.s+i\a>>IR0a bd)Owgj$F)KkoMkelZ8y‰.gTU1fUE*(2OMT[FUm8=Vxu=>\$R) .jR4]$5 \|yՔy,QNbRassmCԭb8 -;T+#$ ]vɋJxMH_gf,)gBnba44k jo^|'QtYPN ;:7)ƪs ";^BQЏI|WݛDKW%> lPqIjBo;\`1^B"! 5ҭ 1 Ub8e1I$0"<ڋ r;0$B.e=t&u@ (S!XE_r#~^izTc΀Ȱ4x$ `w4.=KӮS\^pdIdʼn{FDO Ed-#rc;hb+,xi 3C=]FVb-2be4|J-IweVMZ&8''Z4HSij*Rjhjզg]cPd>U@V 0-';$\LQOJ,- 9.&15SSG:C.(/kA~$2Qs9d@\Yuܘq 9|^a%W!1WL4J^f#ԂI |̙[8E3(tH:-Z*EMU)4Nz %a[@8~mγ}֦/*7'sP_lL3f-ȭ g6jZ/M}oYceԡnQߊ%_"rʯI* UiaQy!O&ӀP`>R: ?kXvc9%{'=<$l CGOF4ceL 'g穬BYا(H'G\DFxQB^F< v`Y>*.P$HbQyz[cqiQar* D_R qf1somMxIDyeZjy]`]6|#ҧƿb4 *kwp0n%K)) Cr!-HwY5p5"`8ό2d~wPhc\GX3x5O D $fh67Ͼ)S|yA=)(//D{ M[,@jJ {ȘVoj?8Om" BKn *(7K#A-,喗*D(2pE0a/ۍ4W'^1OT&+y[[b.G\eרIPf>`9a}Ǚt@3K'd)51ɣ0B:%qCn {$^8ީRZnCTQT=Щ{"sR& 6Nb']`RS&jJ6z ]v’XӨ`x_ָГBLD|rHph,1ZYAZ!r;0 'PIVȽpȔ[p~wYpȐ9v. jv [S1aïJhM?&=K~?7ZFk S))I/DE C^CR}g,4&̂Y=0Yd 5Y{juh:$&* XV6:c;; Y;}R6&i[.WVy3~6u2$'$҈5)W}uJ/ N;aȵdbWl0rmӺz<^[ۄVCLdy4k#{:aC[h2%OIhU l#}7[*)Oh#KmWX@]cȐ£t|KPev4|U (_m-jmaw}Imh 3yHBhvEc`U"~p1u@T/:}"vapܑ#/5GѰ% DK 0e>G&M+.3Z41m 8%ad04h M8g{ go?0d4%En Cv:}*6œM{\%Pn2jU_|$PNt ;gؐ^zMᚇ畎B) ^4q-zT9;ௌ+xމS' uTq}˖NJt%FjHrUgM [y0{qfSn1Ɏ r4PCX+|#Q,meH?d22Ǿcia8!⡫n$}0WwybNnoވ.8!<&=S`d"st'\eɘΩ$-7Vlӎ b_OCkc7 _Όf@^(+ 3JI<`gc{ǃL'Z^@2^N78.{4Ri?8<`' ,RMu*,}R,Gz ef8: ͩv`M W-4)(̶qQ)iKϡE.d$ZY5<@ǥr?.8WEֱh?񯂦MN)<-xA&l+NXj$*<1B 5qwΘ }Xn^ދd\f, .T1KQ0d6CW0eShzq%.^Ly IcēƵXƒq ɰfYQ`Jj`Fp5]k N|$9C˺b(t)63+{7x(%/htfIDu_U2`R1i'R i$eMJ  YB$R2 !3 INj;[ovmpgIj& O%l'}<hCM*+Gs9YZ;iT!5"#P0/R&߶v./koBkcuBn$@~ Bch BJZ eVyx%?Ci#=.E۵*Q: @(\].qEoW2;( ȩ |M DPE!M3 U.]ӫ&^ɖHM'"qxsj*5j^XĉѰ/@N+$6nӒP?>AP[$~}0"Św/7n\E97oH-pfS̩ |pBH; S@$ıl-#~14js3]1F_)V%ߗ_R|l>MW:8Ñ3l+PGݡix΀,>~_ǡʔV.D|LsX,l kuUs 6E^;o3}?ߵځ,Wkkpg>*x?GQU%-+1*%ݫūcA Q)IUpfpˠWQ!.P65P5~/˜rFQHlo]AsQErYj:}`jY T ^9V{#2L&#ROP>rUXWPBjMۍ@kûzS_A"EdF7$^[@|. t(%)B6)lRkDp mfuD#*G=b~G5/(NBR:#Pa`RK%4.hLhA 6W{ImaUQApEtOIw?FU16t|NSAyT >@!LQX~&Ց <58@KybݠcJ8GBX(H֣h.ɝ 'D"r4qjK׵ :CS> "#x`1AS#Fi8 MI`1ڷBXF[#f5'透 %J5DʝM hi3UmFHɎFp5ƙtR( K%E+zEFU~`h5-pP_4HFwjk%@=љs$oT"Q#e cҁGʢ%wÇ1z5GZÒz Pj=L]~~J(Ce2\K$ !֍qc^p $b[U:tq5r;42-ZHll*䉘)/Rc4g~R.%^4ZTNn)%oto,Nxѩ\鷼[^wyepÒR/}}5VBu$2z& Sf]nzR'j-^'(ו>j7? oĠy؈'~[9wdw$l_q-߆1@AcJkœtY@'8zX{?& Hs:c@ӑK,:HSpгe^]@ѡ"K'I0$^_) 0dGPm̈=Ф /;fiJx,_NF3;[E1kpqcü?!>E$o#w e88 ~ D̆ QM>FlԖFB=K <9PV\n(kU!Y6.1FLb hlڃqcT 2pY] bo(ܳe,K*nU(ě!JIX61Ą}N!nVuu.XMk=dVXY3]ug'Ό޺@dgܯef z$!BRϕ=.Lʜ9#ތ[LEv<#UQعOGx2_Wp]/[%l0d(tGα vҙ28פH@8sR#?Z wI20iz; ̀D3::α7^EG}_?a{2omuŃ[|dfC}KV2zɞ],V/a}.p\9;"'(weΝpZAK]Q(KX]h">L+fqv!\tMi6u68UQkY*;|1G&ɉ1f2޳%Thm(Ǽ@SwnԎ #w}rnU>y!){HYXEkI;<|{8f J;g с\q;[P/(ׄ.)Skr(l3Imz, /qVg] b{Qs"2y&$В) <~"ՍDYF*U8|~bQnJ޻LǒQx*g@~%٦xR8j(HQ'g&&(I^M|M&q>ķXH4ޓ G24[lrXd\lM'JԊT35A/JbW J}V3 QZXSMqz Q$Ae/cemX ۟ե>Zqv8 QB~Vo9&76)v&q zI J:Ȕ)>8>n~I1n$EL53Y뭮 G-FI;Z 4t>U#C"OFO^* *~' v-0 zi-?U^wge^17Q2~yWQkSΈp/!%l'L;4M~h Fs7oIꯈF"͊9oνBiՊiXeQb#uV% 3u}ܣi1)VbcL> gYYH).e*fǞYMg$IK*ʹ%:hA1]1'% ]P^l jd3U{J-٧J~E֑鐯,@!kw&9aǗ9Qރr %]4$NVZ{Bud\kP0t"#6ڬq8kpݥ,$MQg Ш&/ l5yl@ngzueh`mBG _qt8[F-u>'B}@VSiH<+l|ܧY.LˬP;5 f q1d(ju ΣCa"Yuz dBsmڐ8q%m-+J׽GI{Ɏָ:ngx5=uo|ZKՎ g뎘;`Da10f(>=6T){bQ%ealPm9)-h+}xr. )ewtjagX=\QqJCa{NFz1ĒRr$ 06z.aʧZpB%JH}˔,V_C8j$J)lH&w`OFBp5H#oFK5p2dFg&EެCOy+??1oEO|-h#eAyE>EjjWSQ9^@2zEHT*Khdqu*,mx M>ժFͦ!Č.,ڑqNF2)> x2 [VAY23 tԍ(bAJ2,gz~̛ܭ*4 /Mى)wU̜@zcGʖ@Io:Ig,3gջH1;|F#?|LW;Iȣ[UQ b:RV(*J_Jtg'S*F ˸? U6dʽ.l?%x#3SqLnR%SXe+gSfUlx]a Vu KmjQ1ʲ eƑ[EzIaCbAWH{:} Vu82ݨYa1%5b<Hdϱwpm?me .LB+Z[ޤH23 ,sLB;*lC+Ozhn S*Քۋ¶(4l"ȏX4$V$%b4YuZ?hj8()8=6/rZ6Ƃs<#hM€$np I5"plpibO'$+!r#9#ȱk:<Ćd,Z|BL!2-IG[>ƥ1|Ͳme~>=3Wl >>Rߓ{ʝ[ۡ%ڰ,尓eIDfjJoxQSJj£)cTԂ%I|YVʜx<X4qؼwVf䍰2B̆*΢=;tSa6RE6ޛ1aS3`B&,4gT.ёXVĆhÖ3O7ӥwkC_C"Ir;6vjlۥ6M@Ȃv1%P;$ `{ޯ4-!JB3:S1J݆ukCCNáv6& FQ;WC_5*3M"COϱ8]1Mtvjmtk?1 N~D1TwӅkijpx]J:w }"\b4-៵/򄢷nxUl'ƸZ$SHbMD_N= GC h fɈڏˆ`%,"EŚ $DZ܎'sCs#~J3` 1mPU  H5y3ZPaID(QVrӴulؗ [yF^["_0f;{i {i@87qrBWPgAQaqJxJsv%{\B1)@*| hp~χ!ʑl md.m2(9. :b4X$A<Njdce£-*2X<>o\KXAܫՎd0\Q@CÑAe Q$㷐ā0jq-.Mb321E y$ '1&.$WU߯ GyhF Fksá}Q=%Nqc,7҆8<3[4Y F@;~`-4e,RC4i|rY^98)n9B 7$Ғ\[7]4u ` QIߟmB0@{1H MrS%,~zF3l܉Ûko}# 3|I=}=jx.d)=%4g#5=RAe/lgE3tK/AҺ4 uH.Zawz|#r%b\aI c%A;HEHtoA[jiKXH:]8CU4Ni s4&UA$stm;P>Ft$N#/"1ح0-r*BQ5s q3,IL-j {mL7,I*),"M,|f@t N!m\:Jޣp>f65Hw"ed~Bة[L:Q&'fF& u@Bp~'iÝ:35S~cTW4mNmp[GiW6Sٟuvat! d;R8<&LBkg(X~n'e`iܺe{\uB΃C:@fk&^_U߾|3>{l%wCo_Έ+qJx LAw\1C㽂 ّ{Ia-hl*a<@Szc?؁ۇ6U&E]KT:#飫뎶ѩEFR4Zc?.P!Go]lqhW-?k5\+՛-.BSdǖ2ҞRm{o'")Q}ߘB> )յqkq|isSkѽIt{$zaK۩p* ͆>B^/}hECe.6MCůgUEȄC%}`] oJF=hwwOK{FӻNgf7%$\$gfv%\3pF]sPwd!Uǿ󔑅\J+{9cUgC+o7 t$ - tx/}qLse)QZ0ݨ<.fbQo$*))F s-7]^ҳJ4i 'd7FDEYЅ"c9q>Y aw@ 7vƂ#khu6cJSy>7t!T{gTFwGs#Yi4+O,  M1s>8\;ġ2O+̀etb:JoTQUaL#pqh;(BB͊jlaDHq9h&X썍pB|>%͕QS~,̼ NBaBh wn-#0龉e1>:D8`~Z%H{)RF4"a[GQKA$}A* #:- zPo_ٮ g򚍑 !tx.lq,m6lYcCa0zz0V_tr?ӹ@F2CjF䒏 _ Sk$s0@)#RU:2qw[[)&-_m'Ap}n>côf΋JC^Q04Q. <Ȩ!'zD& ]H,`f_L0$TemR7*=R/\FqvէFzk*M9p˿@i`? BF8ZVec,G#vVRRcF$|hdUD;*H1*hŎ s i=ɑur: r:ad"Hxy9* k ÈS?:' :6B>NAIP4֡ܮ|rc5¦ƒ`1(8݆%mŨ+nN;capJX !f4]JQ$"J0JBa&?ٱ(2Sq "l= Jb ))Sl@l^,F8 &0s6}lJ9s G\Q7m1(٬^`}[TGZ\HԣH-he:]Q ݭ{֓#L؀CS1 QR{+-1MQ^O(QZ}a|L'Xt9546(: ePm [$VW4F1*·&cY u$@\*mJ,'!!  1 eVQ$s-C3.E;\S7jԘ5V2B?C1/aݮeB8xIf];v*qQ*l`SL;=ɠQB,Vo\1 0&Zp2KIvI^ TiFfEgta 9m],|?2wE{4YF^mMxYM("TK w..`HD|vnʫE`X-;Nє8A#8e ykbO S xWNzW2qF.ݲW\F .CB=B$>z[giq&1h8{YCPتG1v#us@Iveդ&+HDj\ZÌ$I˘.I{lQOgѺ O!.q<@$FcҲ Wٹ0%-t2 ZSNDAP@NE*:]-v'64hARF:'eKgH5|]&J4g"!f28 Y} 6=4?HZzaʼnRo%gZt{Q~D+BgNH⫀Pԭ3]( F *$Bd3*OaΆuA|9$VPb&@H,>Y,r ዌUyzjJ+(!`Ђ9BΧs7s=grA%0vmNFxaTv=XffKQX.9eL.&[|ױSO7=Uԛޅx-DʹL5ȽE_O|>Ǜ^i'#k1@67KQzB[tkm627")Cy#}w[3H@XX+(u< <[g{#s04aXɒ-G5\ZCmpxONI*M'3m>֛%?hl_ =ceM; LXn6:p 2 xA.拾p)C&U- WW [7eI[]+\A*̡BeF@ pFU~V~qjY6 P[,,,X z2CB<۪Lڦ!O"U@S&so-O!0dn!S!+V%}z(Sϭ d14"թAMOϝ!O["8#CGvLSeÜP#]UܸO)+pŗbu?] 8{b-A?⳼;e_ eLdQ(|[e /V$:"ؒbBaaFՋْN>DBPt);j6W߮4ky_m*ߤßW\f9 dOHNmА2M1YVYFhہg<` >H*f֚|ұIZ3‡9J:EǩHFZQR\u:Ql}%Q=hA,hwT?aL70/_kl*խ^+حjͦ PU>ޫ6qYhZTc'@CT;=똦Ok._\<?A*|qi4;J p#zxwV}[?bE~IJORfkZ4X$$"h8dd,>,3dsk$ [!(o:ǧCLgDa+X_ˡ 1G .Ey* ([)yikt["hG_K}A:qPKc]P`t ^U3T C!ӠT6.ق9=$8+q%]lvF^Otp$ ð1cYLUQH7|2RAj=%I0E&zWon 0LMwS[˚><LDK;۩5v_cڕFWP9O_>5ա=fIwoK-ld_oAaN)Ć] r!7۩7l J++{{tتH)8!RN8N+ +(QGma]j0)Kf?;}Da&m7j8vXVUoj-L{MZfSmU{hJY%jVΙav(jKVhmb%,&M,8ݫ]zVͫ7@@^17혐;2D+껢K/<4|hWǢJ#B;6b45)?}\_$6ǟ _!8imW>Զ~>l>;kw}d{AkToR?P]zUzfzݢ+[*|Ǭ5nJvGN%2lz ~ޥ[8Kz[3uhR?_\}Q/wz/hjT-K*Z}<5ִem4Y3V3Z/iGwi%oVyK z$P[ϩT~CH_U-!xF~^n1Jwi9qj+1_??{&/ TRCYd?SwnvGbmZ'ZY|V/-%}:Ešnjr=y^=oy|up~8?D6j{*b.7<2c5VS̱78J(Fg`r{"Eaqdur * M1iL%`$zP͛|1 ,N]01׆a<tM//pQM :v7՟)o}*ݽۦsW̗,Uy!P2q@a_/S˿T?K規|&*mQG*@$*Kv+|+e6[|%eS̗wXyh)u|mh3OJ[}\#B3dgk7UFC~l>IviSrS[#ǕOt>ܚ~w]Eʨ6LDfT[f |),!ٴ)?Ah얉RGT/njZw勇|4#' 98s-KAH Ui(+ErXDR{h0s:\G{")neQXܦ(O>_nsѩ gjҕ{҃ǡlT,977<8_8F@ b(RH5w˹;8}\is֖ܽUN=y.')Lswԓ乻(ɳ4;i=Nxnqb9 bN#j@$;~rǤԠ&ޖڌJ .$ӷUCjO$ jCz8 5<D7qە\.cѯ6f(VwB}* މ!GY`g@/sAiؾȕ1V1c>Rፀ\A<kluǀi&-Y~jի~xU3ZuN?a ό=~XB"Tff|wr:pPR%C,W-.0"ޓn ζԅ; JWb+ ʰ|qOϠ 1'^UtuY;hC-mi21&2n| ?B6D]v0ܥ"-`ʢ}<0,JfX, @ ."ONɧRHv ;Be)/O$_73WCdԡ6cT+U8nqЯpkngQ`Ə((6~ [js`"`a㶒 r /o^P#Pt 4@)yªtB3-݁!0e3uG[uFhG F78D^69*oY@H&fV'LBDqф]1A3;}DQ<9(,t"2誢Fԓ@R'䕉 JCSL@EIt+ t Dͷ--aBѥ6&?jkj|O}xJQ][I"tFA5e`tbP%CX.luDX p8 #i+֘hh8+NX4]U: Ɠ%L쵚b'.Ñx~\>0Ir*+UA+7WN3 YWxa Q؍IʢDjm΁B@[ `H6t_Dj +e(B!vAҒnZk8xu@)y/8a?UOgdXЬI(h%ĂX0(H@JAd&%t1%а7Q ƅ=qs=A 㵶DgtqV{.eYe ,]Ơ,dլޢIg⸌DbH^$p0;?7Q6c7 FØ< :З,W݋2,l eNk49YFA%YXFAk4. 'gt01rL^Zb[1&Kl_;h/@*9HqخdC‹Iy0V8{KGT 2J@!:)@tYD}RKJ"l2.w5}EtG")IvƷyĚqا0Hp˵#>#F.*u $W=+!&\m;+r ]BC5ߕH lY #q*gW5Tų!9kq((wœ}yb -ߋtoXXvpBJ%H f0Il\uehAm΃Xh)&j,_PJ'ިuTD\%1D DY%WD z>\@OeN)gQTg."% v]H*tjX@Y˅o Ӕ=mM%ଇ /s[ARSvLP|ܪp'mhurkV-c_ܸ@I p2%qq+5aLC%%B7MŁI;̬JFL\4$ 6F0+MRN\Oq*]#*A 4 )cKc֍4PtQb Ԁ,IApbY|G~1%~Sm"L7h(ą]\ O{5!+#&K4jk"Ȥ7 ^3j Q~TIfdv7>{Qo@T&7VHӭ"Xmy[lIO Mb[}Zy|< > k/kJ}ظ}0vًϳg&P ._*tx ":S6@_"A]>&]rh? vɭ|FKn)~FKns]r+KD|\>B1.Pǟo |E[>B-ؖpr3ʁ8D^:ݐx|1'Qwen*Nk4[Qn I&=]OY{~55TkR,OI`>mA%ڀ*ʝMQ>]_$ēh旗)z?tK5iHQYq*nϭM5MVTtTO;ǁ\gd ƅ Ġ ,a}0 J<}@NV.^\(R/#&w|)Yz9kh8d=]S@rtרNUNd~$Kw J3ޖ=ؕR$px ߴDNR%H+a-\EZO篁+pꁢëd{)bt&N`bnQ˥v0[,uFq[.[:M7=on>lDAWBI#su1ĩ4EF}0A!z@˓A̖~_{~N4 ] 'EQ [l(+y.jK)[X<x6e\8Ώa+y1iY>Qۼ b0Le !L" AK둠\7ڌe:,r[arwr2`$n0`)HRR'ɘ$I$T.!%'RBjJr9, 19d13{NB#+&Co Mnvt{'($fl*jBR/cYBAm>8X+\Ee0qy<|>y<|>oEdF0