#!/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=7837cfc83d4c15b16df22c260b080b9a # 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 zE`oDdDuzfߌ^,;#"2ovju||'G ~upy8:9>?:lZ3Cp}踧^?dmo׋UUh6winWo֙8oU/# 2ӵ:vY{2;;\0ϧ: Kϲ֪1lb+߻-xf7`ǻk6\IiK!ɡ0o4, Ą&`ͩw]'1 ;`C0ɺD^)Xt-)D> zЌgK3m:AytJib"ܦ51P# A@2P6H@ǸkA+G^ș`hȂ2J(s yx*!+>C%6* E A @_j:{e2xﴎaЩ`q]\QG:ShGZk2tRaKRa8Ru FL4GJzivo5 X0=JF oNd.RGK6H+vqWFGaCe4ړ2bh8Uu4S+S `USc_*^V3xWGH@TROSq1"iJ@@W8PmkƓ.q\WGﴶ@'MtQ(c 3ϭX&ñ6WA;;A &QyAr*1Y0XT%z.~[yjĦ8@A` PPݬHL2NCpP]jCk_JƓ)˶;s)o`vatrYLFmٍyz{ z,Z_ Ce|yJGǠ =o`{Zh~97%JfjS2Ue͵FY\Olb:@!kØي,Γ@7s W_kyAѶ|w|D*H@qc'|p$ .TdtXK] {nθ:c6 /= pTx a5r,@m؈ ,=qRQr9iA"U@͵o.y J3M# Q L60/)` cE??a>pkY'HcfpV,E(Xٰahyvj F"c'P,-ʱ17}t gJ`M*,)A5t#P2'>&_NP% ,bZDC~ P!A(q,P{|k/ϒL%oȓ%l,LYTY\YgȖ̷ye, 3y}sʜyfҝoϚ(țY(k#? G[ўC1gK@OƥQ`ʵkN]RSީH.@׿+w52D:{$WچC&}8{gSR󎩿Ҽ kR!SӤU[4A-^CBP:yئ 4굘wcm liڧZ1Elo#ҽܿ{zZQ̸W:x?EUzM;Q8>aҘ׭8&JƑhSovGW8|J29$4NHz~M>"IY {B4DNI^g4AhBkvHt?&iPG:lQi!zM3HNZB  ʟ~Ęnrθ(;eO'͓\߄q@X+]͂0b>aw n1!¬vvnAeNi;3./eJd]_蚭K3)SV<([O c !-/xloZns^uQϚ^~/ˑ\^2,a+0q ]*07]LȡpO!r#/> !1 4Ris>!SClg<\e!%|.R+^b ]]W7Kϱ#dE}!\yTD bh*ZLtFrBb˴,_J‰z֑_QJ ϔ2OAȗk#8{mR\CmĚ7Sҵ,DPG-,YKWD`dLzJb91c.mǑoΨ URE<%_%-b?bm`!S?$ ݾс. zE?Qro&r~HEavAI,x4h0 m5vl)Cn63~Fɪ12C{*4Jmid$5;ښ\DR6h{QaUP%"|Y.f7-zJO|^:$F{Q/OꨯQ֨VcRp&"3 >*! ,0PVVVuD:#cv7[؎%{#q1 8je8 Y핃k&ag ' I33o?#Fcu10>VDiHR6F[[{d%4$ah314 &3fXQD-C;YfR0O*aiYn T`)GG̨dVyceKM]д|j*UP3-cA>>FxH8k%XR8~v'&C кh 9T0|d܄Ԣэʨm5Ru&/I$ƻjW4ެ/)Bc;+yf\E? RN)մ&0?X?nhke^)?y9HTMvBbFM7(̔'K$ʝf hY\2ZGhɳdI@G4E*Fhi%ePq`ʫ"npm/F2d}Κb}qY^kAxtV*HʟQsf Uy|.rgҹ ݕ W7m0om߾5Cn!<,cIW{BO^PdS"%s&ˋ>7%uU#_#Sr,V^lj'0 šy7UG\a4۷AԺ&^'~A mt3e$[ug(]l`Ӛ݂4Y'Qf_OsGx̩X}q6^A5Vh9aVRy3ᨖ#6 (/Hڴ\FeCs<. xpb'z86l.V`Rmcaa!A7+J$<È|3sjtrVd _L,"pL@  U'16U]9s'o,EC:ʞ^y~;+x > |4j蠗2?3]_XbCC ;:oc23 Wyj|nJzԝKxEf2{` l.Nmд ˕/%E[FoL j^;y}ׁDҗkѬ$3FTl# ӧkv@À[Y^hՕjMڠt0,yBOR99A1Y7FF-`9R@`w |δ`Nw /R%8sib9=7IZY$3Ȗ.Bx!SSFHBEh@~K!өH]'8]{힂 5.B\+nreH" 'Ψn}a8L` #bFU+>oJsy;)oIW bc>RX/PwWUf-NEk0zC1+c B'K6U<}Ýpi!),f3U(1 h$ xyCJi}5Noex_enf*MC <,a^~Hi;a{XW%y!oyd VD zhă *$5P!f@(]`a:@Tt% C%BfQ߇j,Ҧ_ZC> ʏjn o={X IdZ+{B=ZZ3 ڭ%lrZ%,7/V?Kʽyi=dk y "O] ݝOhJTav:Q|t\Wj2j<ήJ:_YfU)gvQsB_2Kܱ"Q{JwU\4']`ѱo@)밤2i6ɰ&XmiMjofQU $-1=wI݃^?=oielBCl_6fycA }w,imbj45[G?x8ÁM#WO-־Ӏ᎟ϪT00Hp5ս ?M+#Xs,0 `XHY*#F)-cIsL=rF p;8b~e!uf,L6+%-H|)确2bӲrf9\H4'Yin4[ ^l#B&޷F~[Gkz2ØڎGբ wŮG%fSU \H\K6=AmXo[kmUU2 ZsU;>R츪<*0^Jan&K_~ Lʏ:5A$h uD U'J+w3mnlo!$+%@DNy֭x$PʯxK "EdeдTTZ,4ʵP9PbƮPZ8 smn.@ "Q}PYe]@V\4`L3 8v?Hg(G5pGƩZCĭ]֩|+$OFۃ}2-=Ig#6=qv:p2oԄ'x jN8@.րX\djsiP2軙,(#KwhnnOZ4?4bS%|Ug${dX#J*7`j7랂 c= h` lhz^/1V ]HsU}ᘢ2|Fk0r6;e( IZM^9cyk Ȏ,9Gb/5Ws )ܓQNg5NݿielhG 0VPP)tC<1VpODsG|g# QFcYtm1 {[ iU%ԍOk㯈.S|"rW=) aضXb_\wCUƵc}XjU+liEuSE!o"M;OPe̴l ]gƟ{yi0<G9 ł¬T7Vތ+<+wZ*[z曠g/M0s3TuWd$Y..+%PPSPR.SsVP]TDcL`ui /`@3@%,V)inhX ĹV3F`SYkD Gh Xc@@EBsulQPIZ@mHC6 NXab3N/kL䗱ǝqm`]VMU}F˸E[sTQe]\%se Dthefoet; wH$|NPOս΢&qPJ~:Z)4\̓L6-YW̴i=+WdsB`]Y"N.6۴<ߛ2aQv 2ziH?BFd߀Fw,\Gx ~krfT_ۿJIQ\uTR\, {=FwƄ) -vΛ'c,iY1¹#祸: G;8UvWpuNTÖPwՋL BY0IۡBGf ]*@#~_I{D@,FNvdu~4^7eͺO7Gv T m `L3Z^Ǻe̴-42$/xW.(0sb{[|4L/&V@#0,vUHj$l_]7E|ݓ["&hA"nbnW1Z4v2VΣFcB5IJZsmecȷ۱"we,(b OJo_R9z=#Vp dÑq{Kh(Ȍ2@6hc![oh.^R O 9ACI-c9Ǿ׬y@^X?6߾jt^];Ugk c{æwl#Wz&>0p^< kcp|b:كTIk{~;:,Cq#;E+誗-W|KSe܀&}Zf}ݚT H 4@ZgּCmtO ic6v+JpЅ Y8`ی$$H)Ff2K|ƗKd^yON =<=EnC_[7ȅD #/n6Yl" p;~eKV Yb^e'&M/H,V =;aY7:_ !($5j8Zq{閔D 2o (N&C&t? LeG)7aZ 3 xy]a,1| Mμ +y%__ʼn02W5 ٜYȑ`5f爅<ɑ+pHsS3Joɣnf?˼t*}D [^OZp{q,L4-N ^;sBǗ w;mN`YܓGG˗zK^82KE| Tϼ_'vqq_UaͿc7(?aR`L * *~QIFK'AMvpݎxW` @Q#s/R 6"DWQz,&|lR_Hї;"#iv̢L#2c0,ws/n$J 0x؋[.|@Hۚ>ǡo&Q@}@IFaؗ%Ԙ1:a-с~n߄AٸY1ynpWmM|_(u* Kb؅6s1—+_jKDjq[3֟`&Bt'OhUN a?%80 uv,@&Tێ-Ux)h>-`Bhj͇b??){}U@b6C4wEPUfOd82<3tvK3$j2FQ fa8^M@p1C#K!W- ڣ5d`;A]#6 BdI;bHY[7+L[(3%Icٙmw s,m !L/8vi2\WB[[<^_±gxU@6M91j@Ǖ `sSL[U\=Jo}ZXCk8Dܚpti- {!S3Xe_g-a{)k+b.3aV+q(nK=] rxM"ܞG6̟x! $: Z!M:rQprd`hyXɁ5բSv|gȝNdȝh)eg*zLmw88z|2fHtP&M,ǠrxE @I4L>Ixd:>g l:l!ݘϑRRGVoD uQej[ t/U;G#')7)%BZU{jc>F?CJAw<}Y@LcQwqUqqZ)/ocs 0 bA4弝0Rq^t٘.A \WWԿσD(>4ޢ?FB ͼOrO;y1tKV5kz_V|WnhǓVqx:4`(DIJ8,z }fBORr\GW6ˀ9uc)q,_Ļu]q2] p iDpjk.`f-ܖ'9a%D_beq izƊ/=p^Z_[odY"m xx^&\RSyWr9 ~i☦Py7=e>ȜmnXL} {"&8{G|,H MBkz-" 4r B,q xT-bOѪfl󑼪( +z"@& 1t ΋FB '!CpXPÍ&JEC?,ź}XТ{ &$üa=ytt Im"urzg>@ru #ɂ2B9L*+ˑ*CX z>KhUNP)+ ^ZwBbS9 \#2M<,XpF/xr*EhݴJPSɁ|&,J!#%^_]óک<ʮf X}X &x#a:s`A&ŐJzݱ:/b*hnKgjЂў[!)0Ft$!e[¤jb2nɁzOuw|z5rbd&3Idw*۹UsZj _(C;'+ AP t$dJykܷ+-:H BۙJv VӖ)/Z :1ԱiDv>E]Pu\ߠ5MNv}#4|qcԊ`6~Wr5>.q5;,& 2ndəuM񹍥r|22ՠVؕeG8`u 'QZ0Yg%.$:^H|CkvD㣞þP78g &n1<Y[TpDm :!>  wk̒ማ 0E0-i:|>CnKl7 C{ן۲`IZUX6EJYW=Ft }L/ԏe۲,Nܦ&5+ }\EH&vY! ԁ1TY 픫9!劃2<%M{.F @OdYC"u&D}2!aqVn(lw( G=<1CKg&v:T/_BAq 3[V+OLH!BQGXP0H4> d^)=>ߦ7/}sv 57, F|ar$i7?nRFdjxKoU ׎m*3mSS Y2R>߰$\JFt®)ŕV4wjh"s:W %gZ`ꡲ gھu1ur K4fɘ:Râ=՚V=2Ꮍ>yy1DpCb%6IПX^?镍n w _2 jwzx󠇞^bnKJF~hELlI4L,jf6 љBNe"agʳtNl} \:K'%"ѻ#8^z݄G#CuVn8ݠ)1헮 #0~8ͧgQF䫹b?b>c.WuӾpadA +x4$\$=5I3"ۥ"½v]D|7AeqLDA|碋B 5ɸv!+ [\U;αvmIR^v/Cj/JÀN;gЀ}w#n075mi[lj= ݣc !ؠc3 M]'g/>kR&Zk($7|+J.:Kugf2Bgcsl`gʜe^6c YdƴwyOhug0+qD`3ۈ,Ы5\jhm2/:%UI-ڣ@D#fApU*8糋I:3(vYLM, [ڡ 㽠7INhg<x)_9_ǭCfYX<\ȸM$9;9D&гMF˷ݜqH [##N80i99BA3F ]5n7kw;o;z}gEGo,Å6ע'deeA(XDTE-۪ZiΏu"ErJ~B#ڦ/nM'/@2Z>:0t9la衺L"+'Uپ?.TSl cp^!l-gH"5C|%V\K4Scm AM,cmZ;tCb)֗0}"&Z?t9%4gS}05mԮ}6>%&h'ͱ6#(FVmA9g+'ML)$0)V%g W1#TJc vRŦ'ڋF6q2,ǝsL7ˑA-c!" gz~T$ƨ/|5޺'j1%rX> at5r9Ao gUD΀ 0B=_]!u7􆉳[_ҍ^fb@ڠ~^W4 _Irh.zlh3lLg Ehj? ‘|k-EU=U9P0T1%~@{d(hy 喽qӗӧCs).UgydݭAe$`[h pz2GZae74۸h3(L^3 1N~W$)8c6F-U]?8ٖ5G*veڃi<ݴGA>:n=Q;?S$r:ia_5X ِGxџWQsO 1T#S*36ؚpҟMUf}8`T%+@ %azK0 #cݵMb7O5VwNu@Rͦz}R Z$|\ 0WP+:]LFqw 3eURusF(Ĵщ(j7A[iU9F# W=]}tusOzZ=Z*Oέ(~7z}sbp|8y䳱f=8F h(N0o@ǐȝjOvJz*7!}k#p8Yl2ZM޳DLfbJ`}ã׭ `Nk"Gu.mp2Ug0|J /&5$(A[%syQYƣr4q1sTtAP-븩.t>7 YqV%Xg =7;x0kK.C/quՁY@! žd3#bأ* c\LA@5 (TqFT7"70KqWV\wy6z$ >멘tawMxݼ6p5*FnKpˬ ,F_E;')#UC*]+N'6e`8V v^dg\W46`xøKzk|\l?ۭƇjLg` wLT@PoBt>aVEx_ȧ MИ'=Xy5u@QeN k^T Wǘ*w[>ÀFiz2MXwr7͈|<'GjAod<"sC S󨾾-r>ͮ4'SN'w[,%+ Cqr5aM3̍_[՟^~%sIos U +)>ndͫ-'p*jVJ(\*VsZ>u(7cd)u'a gs0P{?tuxͻ1,0Nb,OB_>? .BԌߦk:?] Ԅ-{4='kV*_TENVVXՂJځx4 c \Zlrfq7%ZUA K,]=CM䡤5g?#i旉O*"`,I"=e!QIƁH`LJAwT%;\|8- 6\غb7bx57^/aIܷD7h8BEήoyBp@s\k !(/A&/>ki_ )VR,_h4vMw,Wʒv jGrR}g[cIuffySI@ijiMOƨLBtV ZSXI z"܉a PԳzQĥXJF8RTYX.~<@*C]5)^͔QNͨ>Ƶ7Uj}չB~z_N H/sLG0esdx`CfTu6S]ZOzߡ T^\pt[O=s 8nf$ZK^JB2VՐe=ȣ֝ސ23VFZl߮8 :mPYK9] Eqm/^f> f "&?7؈G>c(+2 rЎoߗqĹ.jPJtt ?+".{j02 .dԤ@m#(HL=:ti]pց$+D:S&FIb9mJ ͰOJn3kfEI JM$\"c[2c *g݃If$q a(wk޸HFn=R20.?0˚E0`wwp/PM<tRp*9UˎyӮ}2w[-N`pSK^"pN\TI|Ä$K888@$}oQq\F;j@pfQ%R ڠ`1[B0cQ0:EyS{FlA*'gՋhm&\B";H!4s<2ƍ6w<A1)t"'ul'L X4clMSdo#A@YZzBFs"=Rk &cMTa( #OiND"F\]VnC`+-dqtKYzٮt\' Ջݜ SXh[36qLormQNɊ ]Ti剡kеԌKwDsQ[gV4'bOwJrdH7>!XJ$`Mkg+.h|7$к_C_gIkw?K~l= *'0Hy~Mq^RlfhKNz)F C$AS|L1^uǹ>?јO?9GqGx{޴,]G(@Lsq\[Dƻ8t:QY #@U601t9&.KU8`LV+6!#cd4j$j.쨵jv|RRNek5b)lU,s婒[ХŮgk&K&WndIŹEv:172R-QWG?9!آ U"LBDo Ik .,ϛ?yTi)w*F~euM/d KQ'03ۏJZR*Vh(Fy4a`*\Fh(iӭB63|m`g:1"ȋ9}T(M(d)k&Ah &7-9U `OWN}]zla_I,HNVl_ȭwsS6(nMn|p Ȭ :wn_!p!]ph"V]ham x;+c.8q$LUiqUO寧uȒCzIȠو5Ɓ e0x Z ʡ#Xm7Zgs^0<=4֟(7& x3 >ymƒ3>f TNMBpVR5(*FDӍ a4"ĠI0OLç[B͍Ӎf=XG &c6W14I^Q@lrUխTguu8>XUZmf*eG<o+NpZ˟\igeja7V(rIwO$~ϟ~i% I'wK_PoXd ObA'N@Qoja Z-ipetes!n^_1"eDlֳg]׳qzܚe{c7Q.ww-@FX_|ךvX^r ߽8⊾OWR[n*Jtw q2lKe،30_V_t$u;G|:';o;!W ~ 'V5wJ0OJc qKX+ u,k7$GO_ O2Q =7 FY.g$bgB+t!{䬗?|vjf;u_O"X_b px4\^FaqF#@>3?4/aFiߛEŽ~7VI{ldW(l;7S'Q^м2yp: ю7 )kśc/)04/(Vs6[hq4=j_S,l>-[eyl;X匁<nl }J՟ Blxяd6v>+uo #PK(}'i=1!B:|="W9cLYz(r.]\7D ;5!(j܉h&e; kkG,kN&h-' 谖IPuqh!;'6W/L7RW P8F;@|g맋P\{ǻ+>Z٤Z>qB5&"1$oAHf߭:<1|2`f&;0ޏޫW|_`JcJIcDh{ <5qWs1W,?-C@U>LyRJ.mS :)F4.-B dG5` ~X9hH-q?wG}ŻBG Yz RgQr; [9!iGbgA<XZV3rLg08qt"8|T`e` XN+ B#kBLu {}7* U}#;@Z/3=X1h8;I :z ޜBJ8х)8`9+K /tpF Ldl>+BJ+$tkFD8Ab0Bsҁ CG>wk'(R9';72v7V >R2(Ւ?LuI'$x۝RK8vvMizFaOGwnb$TEk.'R:QvSgdþ q4H0rNA c?:p5;]ŠI8#*F!}D$T!5H&aKpB`18 kv`gzlp~joP@}Eå6|.0Xeh`]bPYXI1`Os4SUԇNHd:Ȼn9_x/ 2\XYi Q`"~932hApL# 0`\3ǠB!*ǣS3`*tV/Q6g^cp, :AP 0v{#`*G`*ȪS{'LyF1N>*H<(LBX8K`)q8(~%BX{x^ 猭4ْv_"s\Y.+2-CO}'pc=YYgqE$OI,Ͷ\`.ڶyQ ]QI d<^X¥.0.&c&Pg[ցGQ}n)7& yn?ЙZ8`qlO}LZbq6D%vំjV_~K3'%,Y.9g<8z Pmo2VG13Cz[G,t7jFz/[G vYƋvlO.T ?%C&1_z{Gou[Vhxgԝ')ݵj/4TNN:UIjQÕ+xH}7o(| w$w]ּ`􏾊z޸ZSKw:EDJd*B?`jt:qX[:zq|gm SBJ]"[C(8dH7ׁQL1' u"̏. vEp'\*ܻ/߉D6ɦYFs^|p!@XD`ȱe fe̼ķF7X]FubøE 3"fkaղ|x?q ֞A*򯮠meFZ(0bU`[2C"x&i*E>c FfPP}ٶClmq/-or@ϭa3e^8>hd$"k䊇ýOqJdPn+;_O]doh7Gy?ݪSE#ދK5烳kSiHĨaUx@;툻#'E"((fjs"A\R-0kds]gAb,Ypks/4bC"!YT0=8~88gx;WP JmG⧎ͫaj k5#q$(k<>lÊ* qPh FV"(UUBpR~.SD4c~AxPJ|wWRdnjTˣ?ZS:ӯIlRMK"'+3mmT-6"䦥!%I*$ jNw ¨1>E{ H,ɴeDe.cbqIQҠIa 覼74X 2Ew0@IĒJS``\mtK{yhԥva2> X{[qАqCX Db6؈rl6~_!$g)=V c 0X 4@1 E : idG= 3^UȮTtiwB٤Re%kuƿ CXa$@Nʚ^!x(-UGMdw4Ulϳ^k9~6O?KlnoKCRNR;7| _GSqj*rw0GSB6_.~ZUz,Ti/b7>*z7`4 Pz~;J1sFyFUŚ lgzJ=h$:!%+=ž-Wæ[C*酴TMv ±h 3Qf h7>: C gh< ifrvSu8&l` ?DP?g$;^ v''F:P8_=A<2e]8"9!!WK ZI*$WY+$0Lg5'ivxZ noxto&mi"3zҨЇVv$k]YR5ͱZjL!ئ!sm0PX&uV,>:`Xr6e[;ߦkQ1dY*cI]kN10M8r`5  *@%z^ܝj3 [U\FO=4UUXP,3eأ*ž1#G*'Y)rUR$u78ϗ]dlgMV,w١ڂ6R"E㍝RK蚧nXFJ8nNJq\b<E r"?]|6=~C' l8ѾM3tg@&FFȄDA7XZ"#R:/+u\j-d$HWeVƻ;''IkEk5<t"&Sn't1` oM#W[dq#ˁd~NJ$8>ؐяíBQF@Lڋ Ӷt6"`:?}`F$3oO|.6O>ɷFVVɈcN=~&|Y 6Og|mUΩ֟DDCo([YǸ?d)Ӄq)Ӿ3Xy%->t/{Cɛv2/+?yjtaQ|Q og}1Qn= 7@";!)R92(0t4$rV?v:CR(@eGA uN ɓ +-Z6Q඙7>Lzt69.UnLڰW~xjyeUn8oIN r]ۑҸ۱ ii/nVJx?;i.:<=$VgF#w>:L)#Dz} 8D@0b;`@"Ǽ"z\.;yT9&PxMkNLhvT7Y8?R{4m֚+iM3n{GfJ!I @GO@]0+̱ FpT oǞQlYls +J$ >9Dǟ B ZX4)ԟX!Pj>%g d%#}^[ª,^9 VD.jL1H(o@_q pyf|T(m6"ă"ps{D67~1xSmZz?Q֎ʔ_RMMGy. ˬ0 @4g1';|9:@h\ ZS0EapŐ(u ! `)z+4&` 7C0GRyq-W쑨sFC~)Z@K7"!O,%a|? 88IZz#CDKiЛ@7_t(8G *8 ^.WB3:SLVUt#2Fu,?4;N2:BKo̺IG]5L$ 5z[C6yHh$vuf(dJ>Φαu!IG瑅9O6ڈyU&}#?ϭֱ.@CY?ܣQ8P,ApnqTwfh*N*0ȕpJc-6F4\GakunrAn]sH\cCmMk7|jІNIEi ݵd.'h7_b080/&zȭ: @Q~Q5 z J8Iyu߳3h@Y#&ٴ%&7'aHt(~K?׆H%_(:E21-\Ht%bjX~*ĴR*?f̫+|YN/Ei2}wse%Ǚ_7Ràf64)XO}>huPߕf7hgrwG9c.75UA-?Om%'Pz5Q > Bk($ $'t(DxpYU r as =yTI,<6]v@=Zz>g.~Ձ,c984jtOuU8h ƕUgF$g{>##)2@1 ^٠N1vao>@aNQF FI N҄UWb}#22,8~ͱ(&WOk. fRn9aFYx\9Fh[,Jtk7۔č=t@y3SS,Bw 6V(]"H)gLٔ yD˜rXkWOמ>} 2UU]SA(iS G噢N n3Z-24*Nhڐ=cetҿ&3`6||6:`B?B( 2ۃӋS.s/>GRie-K+!@vVvT&ˢ+R[XRi5zݸu&")qܙ ɗ|-mb 6Y,^͜ra3k!q')7(ōzZ%iMf]R7fK|Y89}uksഝ?U_"3? u}s=i9naIKEuNiY(_8û_vJ(" =ʹG 4ܣ4A88Z6~m;HE\5l^=}ϟtgODCLRB2Sq=YO F( 4T!IQ8L -E:@%SSzq/(㑼E=솊4 F^NH4?|F EZh"T!&kao$Aӫ MZT8ZCk FZ%*9]3ðEx#dAef7s!P~Lt>H5 ӈiL+xF8cNe.aN`0)`Nȗp\X L▅Kkםi*3V_F`e7;wf) |֋ k!B0 x!6-sG NO؟csK6"YNT15;VĔԶEOLoz̅(U2bZ\hbYz>ľa)" 6";R= zjK(V^9iAݦg(*V,G3A!=Xo)E$;Vݤ,YɑFgCD?iIėP\x@MkX{}nAB)9? d_͍cxʚM¢)xq.*T&*XTNw|7׫ IL vӭ A+&ɪ=Yl ؘ.5"> hЇ?h(S=Žjۍt[\NNrڡm{-lP-@hu#XDW>5>>5~ ~ d]N'7CΰV;QL{,"d|9F SzK}7'q' F:˥ 3[m@aU31g&a) xbj^F9.)0'sʨ+uјMlKY 0mCI'ma WװO^pF$AcG?RV*Q|r>\8rхo"JRZz#A.`ԮgUI=L;iEC^ًl9JIp ɵb]4sq8x m,a~^om&\S \k%~5;1Bx*q^FJFyl2-ǚGw/\P#cq@f>b;7_ŬWs!X¦.jik>KF7?~$iqgG|>?:"˷n^yq2`\U4܃m\f*ri^|΃y Ykq1zq=:9%~<t[M,0@I)c,"+osc{q'6!msDydD4;{: 9h%&Ӏ"44w6i~КfòUߩ MG$ZRom]b{:⶝ѷXv_}v5u@=>A7ǘ.e?iL6P?e|Y DžN?=M$bBr/NjQwU[) bz1` m=;}gGN}a' \BޯrQ-bȹu  cßMqOŶ= omyHSQ.5ܞ,ࡆ $aSęzq# }ן&WVK%JbP6:Q/nա@ 5Eb2DO$NDsK&a-x۪d ĥ1E nr2Q+WY+il9Li;juTEMT{[}TGoۭȆqȴ{J,Ejtnv:ȭ[PԊv[NUefuuxUVuE4MPM8gyk}K yb]/:nݓF[:"vkՑu!ԩ Yu^53{Y|ބf“~.v( c-ܯ7mOMNZ2;?DR5Ш@ Iyي0n{mGG{4mvQӬB FC0XmlNP?cV:zml@=ߣC*Q-c@_-yՄmPAFlk%úaVa~ep9R޴:͊j[Lj4NZ_5[-L {fKbNKV +u?UdN IaL4"Y(<'zq*uXFHu埐h PFuo66ןOq&O?q*[fvsـZ)'eI|]rI#` rHԇ|E( s@ǁNΉev,ҥu+us`oO~ޏHs%HUV؛'!-ۚT;[ N|o#upk1.8ak{(qS *FhZ{ LQf2hʒ' R%n]Pxƭb2hRs2"vXn&U:~9~'mV̗UypPv[/znsgC ߪa0 'e< %iTB840uzP׮Fu#KsS\)쑢̡8!Y>yywϿњn+`V(ur:MQ ǃɭnpLV?%͜1 tῊ*==Iٱyd\/^^U{[Dm65?cm7Sc0³qwP!Y|Ӌh K(VImNwU?Aq ocT!|mJkПa'AB"E ^ ƶ3NQpuǔŰ6-͚c2rUL"s3~5E@uYd`aQ; ud·Uy@fm[%*D^sW;W ?v6's} q+f* m.:Lh"ؼ~+Xܭ/VA;PX:Z Bn wL̘f\&Cbõt=}팃&:8 9w[4!pPB";GBUu_Ѭ'NN[>٤ }k"r g%|j:BW\mW)N\~²8ׯ ϴ?JLvNAv~ɈC+љmeZn{76u`Lw۹~nT#k|D5e q.|l7ls_@ObfaFycA=]}0bߊE'|YLgT|(NOIzS?{(\=W{ vQƾv5uLJ8FFĬSo8yScRK9VzT6rhݐ[[}@RJ`oi[=).fQŞj}ɞ6ܻ./`ٞd=(öQd=('ˠG%Ln2܃b---d%FƲSރrR{hͤ-,L>uK>+> E @er/}V~8GW(j6qe'ʏ-M~L2]U,_~Lfȏ1.]T;viл )<~rAň:ջ3K@Y1 [Wc^l6Y9*A )#lCtp6ѢȞqmNT{qklL#AcuG/7;!NHB"noUx xz6SJ1i B V1+l*d05C¾6&>ڱA+ Jk%/V'o-A$ ^Dꌹrm{NU˱Њb$e2#KcOL^Z(o ˊ$oe&hx4{\D~)oொiłrwS,Z8:'9q!9CKs A]1񩉅mjmq|D9!|xDK 5i}>ws}>ws}>w??Lr0