#!/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=c9c921dcb19aabf80188b0633178b656 # 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 O[A kbRXznհ4ͶmM+APa[ROi-\ʃ6cA)]u Ώ/t$e RKIfvBkC? JWO NOhufdeSZyYvU}Y"}+5k6_/ITxpW}9{7o׸(rj_,V*HhVms8q"Ý 踱*.ҖFUsxfUfD/4bC$ $䑪 {\ߕA`N"-8[vR5Յv6vcfa@|:w:m tv}KS@ S κ:8թtaiCȃ==Bb(Vk\YV& =B5xGtZ5,+\ۆv~ !F1 vUZkڏ`W[x5~F`3^oa )@ Ɓ[(hEfyB'!!뚉{]sN(\)]7B@\fb%uذ=S:$<%gf?~bIģ3Mϧ RL>ߛgZ05+%|&cf)[)y|)#zD~ KarIxrr)@ZL, k%̒RV^IxL^i[VIxTVi3$sfܘHl56oW`'A1#^` X؇8+>Apİ іUPK 0NS tg\Nj p߃M{1x-Áq}4D${#]A ~CBB{]p-Ox Ҝf6O4Rz\؋cǩa1?65[Vy~இDŽ5׼/Zު1]v@|:@}`y)|^F{1N,/K8/f',3u54,Ӟ!XKUĵ1V/D\bS|(\L^)x%+d`?zqcPfr'p Q_Ub/[}B7yڍ to,Ŵڄq-v{B6{AS-f(do2WNPI*4]w a+3b`B _HOk4Y9-Tέ9s_iNNW8ǏSU*7aDat-,K6Y@x  /Ķ_`?ww|k F/$ BKE'c;R!w~=s~[DJ09 2s=8w >ڜyxT51AQ7! \\+miee5߾*רJGh$|U_vfe~70Bf]x0nf~7mǕkF c[D!7U!;ZK팭{Tt/9ZS8]?x/SE"RO( vÚly;/Kh^^5Vi@~{S%r1r#}LMNC Eb:@= K K%G`> 6;a_taD!h9Ȫ cRCt,"Wgcan7h@BީqX%-T"*89pϛ?2Za2~VWarz~=l+ eTwG¯HAR\[2/" Ӛ]!Y*Ħ,G2$ޭ1lOj6 gڼD_Ec6#QȊ* &Cؕ[5ʽq\w$v|asa&&M& VVU )XJiN+3gP8J%P2KO))QLH€*P`4|?@g;,Jl3ytu$N R nT jNʧ謢(`y 08؀k06Yo1%>2=,aRMF IJ(|fM:~7iuIZ#_OڼW-*+` &\|8Jb6 ?88Ā.fX^A ;X/14ǣ4%_ MڐdYX iy42!KP0Vs7mArs|! ViKoJ'Dpj28lѮ{zTteXk$c],|| rAs*i\x N޵14!cA|>R JOLN#q/.`3Qҕ ;k2sl ڋ3ؑ"c!H\J#->K\n5q7;z9g(+ _M3ݔB'xp0_Pp ŗ!:ʢiN/h'v3bhe9 -;phn7u]hR#27Y1/׽l[Ō=/6RKw lnuQяartkm9 ,T`rNf22,Zl3؇*1>9fHIC*pgEOn:3N3=C 8l˼ï4_1 q4yƂWB߫F.(US8ߌpZkMӺ W$Ȁ&qo0B6O4줝|#STK+5 'UpΞkyB' =|n HBn#KUn{y4Ig! J0>,o.5a], Y'M|ATF؃ɘð R lp<}K4Aɤ_bV r-3Nhp{99m2 =1uGgy d|0 ObvK׹=r= _Bő'rFzpt^({!T89WdF˽r{&;`f(NTp+17ͨ ;8W4lfw"&ФeLad1Щ(MkIe\ZƓoE!Mϊq_| }4j(/$0UHe&@ `xW8m7jAH֤>rh&siVہ`-y7f|АG;0)6а%-$@u#6uǚh3X@ Ceh u*QgEFHKk}5N2"=uh7g-<!TF'&fj2({6oג 4;aF\D0?},#pnX1 `61@sb=).~UjhNbZ t$=tߓ dpkU;Xxq$ ]K+ܔG ,mѮZ1qsߡa&# , 7.JN[OՋglgjծndx W{f&i̬ PADY5u5FS  QV4:z36ɂ%OЛe2;N~hz$o&Y ¨Jۮ))܎P ~;PY°i|A% EtP"8VE!&152I0:S0O@g#obŅp5Y$~op1 QY{#ʌrɩ@KeWs{# *,*i0.\OGSkka2^vN™<6lT֍Z] "*t7Fnkc׆#?Y++Iܼip-ҋйΧLMʤ2C_Ϡ~.%\5rgA p)W"qHЎ1nՓKzN]rq%r}&ޒ%cJE.m|x59  [$U7)/-Ax1p9ΰmƭ]B}TP#-cEz۬˳WXgA<{WڣRkˣ縖b53IWDYۃ"rOrp|S?Pf1þb7BjMzDeg1&Fqp5!v9/X>lwϾ+|yF7+ZǗ7kϮ3vrXzMW!p"pXB]c.ZxHA GmV^PN0*DЏJjccAAÌz]9/YA Fh'b0{1DiɅ6>! C^@)y|!xӨ`x1 G!r NϦc {,!Cs^x EoD!| Z !cE"^hpgdE'w$fM 9RT-?uk'C]dq+v)E${::d wXY13 aP:4@|I3q"X٣Y vMci%*߭>Әf9mwJ{q±q Zؕ"hLlEEփ<`AKI.ZL岼[*?wiw]'[rTNb-q=Θ&B]fl GM- Fi[j!Kynom  pH&B:5Qۗh4J)^.DR/̩c(ec5%Bd3JbbUX<hm8]xAѻ$ ;FCٗ%U~ĄCGXH5{ r.EMx,N Ũ'\jEހ(#w:؜rżh@V\,# EBSB!A"ݤsHD%8{)^1Np; puc9TS.#KXi_6C:0o#{maTFb֊)Nu1_: zKҴG7]0ȘZ+ogW*gIN4ksnbБGPb Yq~ LiL}uqPG7$\L%]q$O^G{DY7ݜ"gTDYJ1$'>13㠎{4W(uq<~Ҟoe>*DA%q'J)%; K{QӦCvI/GgJ/^9vpxg?*fenI5" !564N;g]`hCL?Ow]Oω8N"/篏Ma~Q88n fvc9hDNF]3q}ᩄ>wbi?IYIvk II\Xwt;tP O[E cxqe`4;'՝I(E86˄=} )jl=bvf@Z(!*ĺnkRPԫt4l`. vϝv^Oq&fE}T'֫ q,_z]'f U `@v#=`mղmczO:"lcH1= ׳۾@pdlor76ZBSbE'ϧ?;诓ffy8Or=JE#fIy7 YHq%*fM]O7ۍ>h\wCmP51x+˲rrT!+G.f4^{tZmE6k ״; &0abK7=6έJCX - >G;3`Ĝ撛$~9,P{9B #XT.@?J KkLD\QNΆ.Nf枧9;K,]vJI 5_;Z_-@QUr\=j:G&NfaATC јM]q\f7el[wt9 Rn<<#NKEs?V ,2%qL:u>:sՍ ^m5mRI(|kyܩVC51&xͥ$߯;;t];=k`6sqNiRiVvNg p#PDܨfUok4 mB:@3Vۼ=8(V6˩uL m-/K2WD PH"m4G[Ok`╨JngnIVM]v3~rp=3j]٥8_5xHfwu6o7aavE.f,l~K{ -Q:⣡t4WI;aaFNpEm@ #)N¶PXMMZ8-1 :ĸ :XKY1 n?,Z2c7hvڈayuwD`~E~cDZ㸽Y߬l~,qʦ4jNR1E_>G1bQ2 },oo_ɓȾ,bFI_ͻa_og4xR_I+@oxsjԦתyM8)Z|ܫ"{%ҠF٭.PoS@AwDU¶J>ߟ#`0!e_ W4ܪLKzZd/qˁY".cN u5Y#w\3m}˰;.SvWH؈@%K1Eo<~?+L|vfhprDRo0I, u7lxWw#1r@ڵIYŴdqK%5Dh|@A.w ^å`QdeX>c`p(, kճʶ)#Ec2 G9*dlW=T+xƷS(Cd`vG@6QY5};R4 _n^'1wCiJn+\9R!ޥF>9A3# RBk PB 6a9`R% U C٤L9vPYOggar U9`+|HݢDD]~!"/8rMm7HcڍدNH4fCbӮָG[?EDD6a"1c;Fԑ)P:UDBX= h:I88:U mA۠7'hx e_QB9,@o`+1 p1O[ovG_zߪ$@+[fx|>cun/l2UOS2C}>l=ɨB1Bx;(5Oe00:,m8 p"WN૓g[+ {P : "RPh 2v^_?d!> 1>XguVRpɀRB8ldsWƪK^@ʠEh !\>dd;cXdN¤ti J/"%L3HDBOqsc=0v7k՟^_ T9RdOS_$.dm4o Uz ܔ22A< 7?:Tp=ݛUJFrp6_~HipO 0 ք/v*`j =иRWTļrKR5[Jx&z/ߩ`x1L" NTtod|d}q8cZxλ)oL'+-׃ ,Yd\zƆ3OQXI5o`HB*h?+?'ݰwU %GQbLpyqJJ@:Ժ*CV.-vDٳP%G"F60PRƈRt6B4Ni) y|_.\D|<(Jס\DONa%gNࢊl0 1rugFs8Dr&:PxMzJ" ($V_ۤP4Rێ-$gYg,5@ ݶ*Xc6fC@hx=KYiA:3_o2&޿z\Nn@zEߓ~o 0Mo?m~zh@駱ߟtW=j=ȭY2BeֶScco'[15OGK 70X͜;h6E~_q0DY‘'}{9Bȴx=A:|G̴~Op7xKvS2M nGF{Ѿs?گP|`<q0v`fF (PU[-&!6Y~qTLZR KP\6T;'H*n5ŖZK"}M/޳U #J?NG7p:Ze@HUpFJX;fizKtjYc#kS|c[[;̓EI{Ԉi&ȰW]3v]^6څb)^(~:gJc5YL㐬`|_9̓oј-sjq_6iBH{Mɞ@!q2<^ϽarFwv֬W. -;9i@ێf ES nHZS}s;qo{%̆Z"X,Nj&тX)?ILTNL:tߝ n`{dD?'?7SSAw#yıfYP۽?tsQaX w2?yEo 0ĀwE C3@*b؟@+HۙHCǀ b"jN4h^w ɉy@Թy RMli6:{9WrIY cYq$|ݓ1RDq{H*j7Hr7NXRjgTl+)hrʒȔ ǯC0Zinjx[.t GYGjx?sd7 ВX}uz_:]SO 5Uw.@"00&s3/SLd,X%ޡ GΧ@ z0g:9SbmgW?>8'JΑķ3( `# ۙm~_;s=wlˬɷ>&f;m1 H\oX;mrÝ$BEvӄ _4mDן>~I2%qavk6O4Pu5<L&@06S=4Se&$!^ hbS.x|b(E]26oI΅K(JS+].mE= &Q}>vT17paF.. 8}8{3s'%x%`uߥd\Y)Jx?'Ylzxx4/L\;MxH:Nfk1v9h E {:'r_R:ˆn\*~(ϸbq-N2iNThP3)0@;Zsaj8!ϵ&(Fnuu2ЁWzRä\z3L ZYMigǙYYS@plcQ>Gn`2?+ tL+HNӃa 1Zq hzєSdلr89GM.p{J#)q.2 YՠJW@r̂:_S؜˦rƩ)%%u.W 4gJH}[1 gYp{Xv3%K8 zm=UΉpd/ ys:e֋DWl}Op'۵{Șvƅ .6 ,6e1|t2`dvnaT%:\뜍S홠]v6rCf%BKi D>~vbk_a46Wl4HL>Hr*Ėhn5?)$b@hl|M1%iun+WK籾a91ևm:ǸAh`qpޙQs;;0gn,A}9IZT╏R0FaH䙝Oj iKNEs*{U mz x Yt Jut.?rx7ljp|P&U4:`ѧxx7А0H ºB~ܮgMsyb2t͢f%ȍ͡vn6ɓJҏ1}DFt~:λTq aFMl}3}' #w7G@`X`E- (L@%0}?99;Mc |8dmo%u6/@r4A8 U̅ON$)!AN-^E%WXc(aV7U,d%i6LYV8`M])`Љgoɪ0$iqܴEZ';[|~ǂτbp&2\X,{ +GCo[n'^_#Q$Pt,01#\$L:VUHHr Y\Bc)ls_Ɵ˷x|;8\ZqxZM54,jP`Mӆu8몧QET z=: V LjrjAYb+#إާ1SAXˀ. tExx3 ь7 +3Mxi2{?y[ƅq1xmzJF}X%I5# U) @#)3pԻQ&;UK/79i_ڵdO`4 *-lgicnrNz ${ao>^p|wԪ+l J5vӳW#r`Yp|2 %AD/ zӈvk K6RgkYrѴW%ms%vDc.á-/B:Je";H"=D>Ǜ`ܟ K#`t-pl>| Y |0X;]mSW=EE6D , ;#IȏidPCB,K:Iqj1>e4rF.:kD-;Yx@fg$.GR{P~%uC"wNRX(m$oe.>_ެo+tz%V:sYt@HCO另wl߻{Xv] ᄜ&kE F]fyyc3g ,.84ھ[h,UѤV>'2G[Wisճ|Y'-/Bʟ}O;_gRwg|P37K^!73¼WhH_hc#4L}?Jy|9%tr'skVCSkx?%vՍz5MƞX;87s Qnc动{~ۋ%^XiϘkv3CIJjFg:''wM (9 %kiq\NǸukB~,h>C]J]L+r2VvknUQw^(vD^q#'f|sH4ꓱο±ܩ0EQ%DW Ⅻ TéM01A Փ>T"ɡ6=\u‡T L\SΤ`܋M4QϦ;z-dP=EJوdXkY.~UjuќbTQ8p2h ZۿψS_qC颬M5h TS]|F9B">`Zd$N[:"Kk} K,P fڀջh lji&=°7V?'sbq;THՏ@ɧ+Ns|w䨸;_ {/,l'phf4郉I]dEu͊%iK._- ӭB9B?ܑrb7kwa>+H̖*}ÃkǓYcjXHIn^^OJ(A<*resDxRQ0Msb[?\Pg36DYk\NU vv`< RēyUB@,Ç=z9 sg?Ih<3̪|h #ͨk1BsSun`A((81r*ՐF9\=0܃4^4 P cKrabPz;-h볠jN?Oxۙn+) > yk}:[+`G p +z<~ƃ\CEЖw: *_8Gh :NZX1>+KA׊yXV;Řw]/p2b֘M/E!C*\7Χ'?ǭuhw (ŋQm#b .G/͍cm:}v2#׽>\W_+`u"|3H@6ONI1J)X#Y#o‰?&BQ$?Ӣ]\sQl(Uc/ fhn +I2)K )T `RU0"ěCBiwvi1i_zx@FR\( zm(ۍ_ K()n&ҩ}p @i)?C Ҷ~.9@/_0xqx.73:|]t[-Ct'Ӳ{Gƛ܇|rD(.v˜;&i8;{b,f'w?{)t^ %꜇\XH}~t sǘyN/a^[Ƚ*XHŪtR^A5Xy NT[JL,2? }肎BLh3'XoTrjD{q>K$s ~w+.K(]V'DqDuG5E:`orm=ά\FJd-*BN;ZQhp"\.EB*K{qE _$Fj|i^F/9=aLC]t+`;2aáh`||N'Vz[:VvK ?C6|C7TJDx,Sah~9Ds?+OTΥt 2؇{"pBz*w@{)x1ԏ#xgm%hq/˳) C;$H7Uv>#껷z`;l2-0d oO Jp6ҫdFFZ7RK}ƅ\f>GقXy6$Q~Ab]ipHP්}W<5$=Bc5_FjQq휱Q˔zt,@ YVhw8|ġdwv1T=BfZqmIESv6b{GDM$6:ihږ ̌&cY uے tJr Pf E26O*LZI i:j4C VPHQt+;36~RS>)gO׍Wfmjc>Yle`X)%bf*li/J]/-]3OִԛTN5, Kml:-FX߸}tb.=N^ySe}CI wz A.z (. %(3"lFq17G d k9^okO@A:Q^SA_x O>3gF)ҡd3vѠvsWRX[f NE?RI8KrX[*:t2>iq}$kAXwvPH|R“$ŞGK3.d:<'A\SiEhC"`ƌTil2rG$9^HRAoA(q.yk3A8sA? @خeT7gK/l#=yMd E.Z< F',W8 r2r~2{sn㓣Ӷ~$ǁdBr+ԠB0D xLOnV};(ЙSk46ҡr*Su0O͸|j 4kl׆ bMf,`Zؒ~q:UȾg"8ǫ`w!⨴v"Xڳ=ꊅSgx3H|\b!-qؠ px MgAES%WSQqtNgK'ŀ$?8jǔ†T!")@Vإ!i\nFlB{9NczMi6;krGk9sk`D&MH|1[R:*VMf_(_S qSy8h/!ca/ˀpMBzyR2YV%9’%-t#fJ4B6^|rQ+^v)'m.qb;犖R=٪"qWXYd8-K׆"kWi|r}1-![k)g ܊"I~Uk6N35ulZAʸFjDOVvB9`c#r4|:[jHeQ)9^.ꢑPS'xYIo6.dx/gh1ui۽K{1 F 0BER@|F4Fg&vbeScWC^LQZ֕sQ!%iQV`:?p_984͇- \ZXE˳~٫HvZ'm Ύ@…UMA/^t)2W 7P2ߨDByq퀚ΎD ׸#UDeVPjRN89޹fBz Ҷ8#@7-c끦C0_4DVV;:g<(#4+$mhX!)y'Cu6OmmHlhn*B>N Bga0-p xPjFt{ۑ s 'tÔE_yÁaUMy;.PmLAb`3~rv~ 2˪y[#:>79<7BlEE.ޯ ^o?kC,:͠ldŔ}y߬jQ*ҭ$®V/ؙ2g,X EݛUکwL፴nv%cv)3og^NvU?ή8k O5*WSTxGmnHso! '~%' :"ŬC}+`|rK.V bC-ea  )#@/B]k+;`Xȶ~#њ'Ecs|"bK]z\wB$GbJB:6218 MvtQSBPdq"Js> m7d3!Zkm5Y2ΔiSt3G, ;lz襸7ꌛdT.ȷ;)^U(E–!7EYD'5Z꛺,nd=M@Mjl@˜+!'vwUwd&Ea 'i( g' (-ѝ6MB4>;fFxiM` EBb|C5vDr4bR6 ρ-=J|^(Gػhvi$ױ+iӷ4ä<-򽘠bF(p1 N j!--PiIB҄kgqsi0yXL e p4\sTG#)2&eLi/@+Q3gڣ;:͉ .*[/:\3-;̎u&_GL14.e_rqxhY -LL:'Tx| ꚮGb5nQgvQ[7N'Mbe&Jo6 >S6E,fI" d|4n6Xgc~`'䨥 jE x D0QEw89HPN8A0@PUFem. Ԡ2Y{^8d(.#}9EKn$찫R=Wzͳ~CPݜŢIRp]I\GLli=o >T#WKYR^53$,:/'EMo WtgoA#n@B Ul/IaU8 !j}!Jܓsh g0֧/<'jWN2QX쌧$s/٪"SNБIAqI^]?aܺ^[XiS'-W p_`È3 Fg\/~e7Ms1)A[Ol=UVBfBᯫۭ? 7jS#>?3>X׮y*./gW ߇iY_r$- : /$?h4\ϥZxr8A)=*x1w,LܧhRq'QW&ǹ&{yKlAf!7H[}ݑ Ooby1RTBa@2͠w)$yCRے94؁u&$Vi;$M''G0`z:ъ0RGMrEjSœ/1K$'b)JM>6NFzAb,+#))Gc6Wݰ9"YՁqi{a^|~ð{ u;G͓dqa?>˺ɹSf96vt$f:#j*jD!'3:sh 0L'Z¼wۘJNr{/k ) ,^0d~xzr^U@L#^0e:wGeizTΚu3]Y":#Ԥ)ChXZLE&24 F)':Qph{ c)Ef*fq%?++B S֜f55E d@'hB& g9UTwfL×y;qgRg6mEg Վpqr\ R,b#:RU[( 舴RhU].O!'T} B{:XJiDy?0H:Zn(VMmUn$4N ݮHFxގ~`QlN[XMJ㯃; {e#wS.gj}v1*I[Vѐ7}PppB]tIeK`Z{Pɡ&Q fL|(f;ÿ\ ̪f}@r N:8 &:hӨՍ4 Ez A8M74 M TŤIzJ+v%!K j3= E{>(G-h*J LOl, B Qp2#E4"L0왁GYZl f$[Ar\˳Ouo' Ra~^`PsOǺ 9_I1j=~ gMOyΦ4J[eh1t6@$_vn{FS{)ڗX f?6 ڳspX}u8`'/s(:nMs#`n FmS{y92.Z$-_MRNƖxxDr ^YgFAT eߢѷtP]{ǜU% xK4QX&K#@R}ltsС`gY 3ۥ9hY|q*@:bZ/Ɨ6i>مV.Mf{gǵ"YP* 1VbĪAŪ.B@XnO0rMT&TK-+ @8A;yUIĞp>3R@{A-'^KVrt-m9nը:D8 7} 6c™Ty>|_c{> "1R%CY^<}\vAa)/$Q8$;2O9vt5!endTPL~u/ui^=Kf÷ߘD-qƋ heEݠQfҢuuSW>uqȨ[:^0SIP1l7ORNXpWtVڀ%.lg=]M۷jenE{"le(gYWb\•u*.hӯ@B3"VT;i&4(|c3HFfÂ%mܑިxryf/daW t2lp X>rB |q-lo1޿:0 mz* nz܁]O=7a\rlXv`,zOqRvm){lv/>Z~pѝgvXԎ݂胛 (矫Oj)Xg/K{$#/}[wC=3yw:@p'u1Pgxs%o2Uxo>ڎ7+>F:Ĉ.BV<^5:8dRRiSmu05>_I w&&5;'7Z*#@' &,i!&;bjk+mIbUВ~i\Z1?34#V)6dS}ըcyPsmT+Э\٤!uX[ e u;MXg6E+ UfaCb7qM;ų~#9}1Hݜ&׮،9D\X<}'eмҦ'>9D3;;#JYHk~J؎p7'bO! #a0`P[2yQ9ͥq7g"slh5/D٭7P8VSBMIcοE!h@AT Ww$>eZYizm[ҷ|dE{|knghi/{(WRxѿsg l,Γ/_߾&}gV=t,Wobxuf8.{=DQ)VfK[B-g;ۏ5"(#W,g;D?[9epub/;<qa\ .N-OlSkvXmio~z*ڒl}(Ӈ}R9N|V[–Rm[R[VYkԽ3p2@?9{yNHըL{NncGcNy2hb|F_`8Ts̫aq|>Ʊ#&}҇aBSō cFA]j'Wq=[+ک ̬s.X#4a`, 뢞[u0A=QzQkz-v?_+7)5% }d҃i }#U /:,zLB V^FvߠJOUfiG#UYF},^{p/G0܄|Ǜq{ ϧ\Ҟ܇ u`6*[R36S9Q %-JK-3OZ:"|NrnFU#Z?7Rzzٔ&~Yi3 <<ĿQR?*xfU\aLIANC8迃f" E Ihcǩ;&2F4l#bS_:_7(U_RVRI\35/¤hN2xZ M)tj>e; v g@F0SXrOCj|~8X|<ǜ}1ܟů~kw[h@(?wlB؛¡pV̻09j4Mwi2@H$DmHv]Thv:,.h"pJgZlb3fc K, w5fXvEᷴ]6i?fѡ׀SA<*qp >@!BLPW(l>Fҧ7lM#&(\#`OsZ*n@7 aQC(uڈ9z#_O9o3'PJZRH)2a{ ]:7 #@ݔ@#X-lFՏ׊! ٵYMtఙx82" hKPj9Z`i XcW$|ǮNkG$szMbKf<¤9W{퇸SYIGHPiE0,B!."gAhuFW fk>~<>\)A̵#0<a)mYMWjzg- @y/x:E9 7h/o#@iHse rE ]5xITHBi蘽oa啢^tXW/W }Ǧ IO\O7\Sz_%,2U*"ug~5. ^tmkWUTɔ mEyۻulMJmڱa(.::|Zu{뚔;p&n͵7zXI)TmΨ/oy>%j( [%sbW=J uoz7`4 zkAg'Oݑ-ޑw[tvǙܶ B Zܖϓf{Va*bV [38#$;Y֊ i (ANǩEW0|F-8LjIeG0@'`%%&;Cܙ?6axk&옥Ah:f UȕC}^Cj0<_(Đ֟`̞ ۣ48o:ⷢ]-{{ ׎ j/?eKemi$Fif8h D#s¦?r5璓*֮8r`A2 xsPCbRp A+%eVqNӏ}J۬2`7M `FfΒP&n G"/Y݇pn)11 T/߇Nqu#UQe]J$![?_Pv78?8,9FZiR$ \:i7ZwI9 O`ø%u7qeiŪ-XZ-=B\qaPu|mEضF 4k&#Í:D۪ -],<cLM v pc5F[?R襕ϧH~t G@*;/"<(]UHnf9]^S˔"ܵ#@IWEy<]ϧy4u_[̖naz1DлoͣoՋ^d+̕&6 ;@5|lg1YnKpcw̔zHbƥ. (I| (@k2{WM=]^@\Hd`9Z*>7{‰qIBi [yygisW+\mpK <4D̉Ԗ^|2{.t]\C4 B[9oQ2E 4-W?P?9׾k_/~ v/~ FyQwCN;Y$^pc3on=}/#G)׶*kvFę7 X|BR|c21n$//O0