#!/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=b288c9b1c0cefc0c1c6270e027e9ce5a # 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 S)e BlQM;a$aK/I"3@2N9mXPFeR<"Q%13T2%^T4!$+Ž wm2x÷V0hp޶o\v3LaƠom]ݡ ̼٦㰡ͬQt6e: f q\7` 8֭;l»ݚvVrӊW;ծ61Ȱ];612׳n߰nP29pscۼềi#EV٥ t}#V{mv])~8#k# }Cau qk\g%-pƗkcda$[k:?!IAرHz5m{PQه"iP@~̓ VJ^(GcSl BU3tqeꀬͨ 2*_JyOըj&l˜qv'֜tmӀ|߫xMk ΓjJ))'CX?>GcKh[{zOØ gatT9ً*_ O- 5d.K]o64'K+4]G*iaQ&ip@*tl}i)38eeܱ7|.x`d[yH/*/-9g%*-/D<+ekp5̩ wof: 2XkIAwhճd>*Ͼ*DfH}NвF vlBb#yJ1O7F{̺eweSə {/6lC$e}d b(ZDn"H&#HJ`u4~_t|O$2FY+_T\ x`Tb[@:L gDE P™>wq #H؃pRV ,1gev(gi }KBã$YR&_k&pLAG6hD^-֠>cg,e B?y 'CHQ `X$?G5$ĭAv;EI00c8Ie4&ofBi Q3)=glސ |oٻ1zERȰ&P=dN <ī?t+;tPnH]i˄{H%H (ATBMmbۈ|UZ8bHӍT#\r 4qݪp%KBt;%=05cco UH &P aa2w)bXKWVhtXW"u YA LCSƬ gʞ<c/@#_)3o[i|Of} O~3uf2ouWZוicD+V4pi=+c2ՃZ1;iNh4royAUO>N{g^ϯ3wc(ґ܈ #B f`V5 9^'jln~rzЭcO,F<}s4|c87'UW;U2whB+ |E:[%k?OiSnny|~?qLQ}}y> 52H9@۞J!oUЩFXnPI5(&UKJAj@Ojȁ]iL oDC:z=\: qڿvTَB;js;cgXf鮪,1<M)Nd&[ˁt/*6 _\yK6O;:wҡK#DwS~)­A}&8_6`}'A{QVId@>.RYmZ/s_I*O)@A*[;JB0{UO~ LUߞ4LGJY.,.Zg{g$B?_@t _ ?p]pT79|A`p~=g^'8 ݫgnHygFgP̡xU:\TX'Y5%K ȉ4?;NƐ‡^IpVŽ ҷ*?vSIge>`dJE7Tuiv)TheoN$%3|Ƃ@<`OXx  :fEzO!3E^oL: )X,U;t.L/ZȻ%y/)_[G}O:PDH CTux&=h2~wK˺dæ9ZHSQT-{3An<=>vlܢE}Q!^j>,h?f`v:̊>PKE;8 VQxکZB|sA&<yN:Yz%n]'@f'P yz>R n}{܀5h?L>Jyj%ճȦ[+d _`Uv4lzfS:uOhT-^Z;J&ԁ4YShl!m2 b]weL>NUUUFR"P"Eʑ_`ʞڍXl Aӧ"l8QavRuM8Q~ާ b " ьbYJvͮ8_20`dO. ]{fyݦ8 v:e i$8zQa+a ]8gF]ldIEү5Bl/G}]:a82xR{_˳7ҲKi}qN(ͽ"mC[I0O=ЪABI m/kW|Z_Ք77QpA Ucg.Ax7:m3؉;0:lI|FF 2ٗN|~dIy2+Ay _C/9@u7oE?. pHS] Ix)-I IHR6޷^[;SL,U-d"s8w5K. GÙϠәgoWWYbi,<~z'a}fqfӦ>Y!Me~}EX8Og}dL(Ĵmbz8c2-bZ*d!1QјI2?I ٭~A=M?GS̅`Pi`W`NC]Ǻ|zWjj*m[(dO |QC:|zTWrc uBFFf ̥ X-1"t"0:x|EI ^G4²A d~P!Yڽ :Bz^Lm6}v@/yVI[Ur#A8:rc,|G -5@M| &F$g{# Le4"L1;3}Ž躢ޡq}LNXKi:ηnkR,kR'\#Sz$cmB*Hŀˁk ?!91g#b'f4a M?,z`+0Pf&􇘿rk k6geiz%oOڬ)Vo(&vʭs !!sUae"d-ˮ$S)+~ 2(81eWO>m mdT˭mUj*Rr):N P\ȰBL#M2X Dýj&QI :NXܿ(2qrdӫ]K_SigRwuFUE Z}C`$r4E"NrLDJ*D+2!ѻ  8FN)m$we.6_ls!D2I?JlEu2-l)EzkmZ4 _0U$%8nའ-qA6eXG^b9:g|Ք?Q| K=M?zܾOh*U_~ b;?~΅{T4-?!2|/#.~?WV2oOmX9<{ۇTGW{=y' !w]^oDdhQ\ǣ8zĽIx8_]ޢbl[{G )F~ߩ5 "4YXTAbjAF^Etw4ׂ`7Mg<`VB)8EwI6 P_> :m}ܽ(x3n"E[_W4C3ռx24j ;AD~R5A]YI2%(`yys GA-Bǧ֚5Fiߺ߁(IћBFՈ..DR!xJk{uԷj{Z!b,;T+c]6?֠Ȭ[Je!wLH)ePZ7yC_.~GV ,Wk{"v K(R\߭bUgur _wǃwww{? z^l*z ZDȫ,h]cq7s tV?5k5(.1HTBVʫF wꍣZu[!ͩ%z&ɰob}^XdԚ4ytI|JQt]8h7*.|*qaܤ Z "f6(Q}nz\--@i ;+˔F'N**҂wAK")L*E1QyuIO$LTC4>tT $HWǥ [$qCD<mXrKڀ+̨FD+oƽ: y, T{s*"&9ɤDʮfI}@nv0lQy\ԑIi0PFFkrj\ C@.TJFg-}U5@}DI9}{0䓦I7fOY^ߜ=q$D-~E?}.ot4)5 9~jԥ^)bmXx&V`UǺۆ>n̓W{;tYG]Tq jYءx`AܰFUFn֍~ NO[gs_67HtգwSH"_u|Ueg.3C+G";i4,[dkU5 #=f1t4F,8|S$¶TD"5 џ TtFv)oYh2#r?3˭` X/LJaR})'pN~}V2R ~63)gK-'eF+"^`c{Vs$[Xi:,}ŷy3?Wr7,49 C8i?+7+tC fk8iGI!"\pDs!_65y3t/<]{+0i7-x.J> >> >hZ߁ȭNţQ!!MNB1aqN1En7aC\J [9:^BP%+B":Cŏ"\Y-vqJpϩ+ `LYzyεka d8dޥ(EF+q](r#5~i*p峙}I"A vr8L((J$FB1OS˸CO5]խz ĵikߒ2y#_;Z-o,*ӆ4aV""R2:\_Gxړ,7"r<\auazg5f5@ّ:95MK~_ Ud+RCRuvʤ#W&3vt~A-n[HȜhVUAMTgS/Q;z[VLN!ܸ$xDhG1mh%k 5 5MT˖Ć]H?DBD7三sB[\٢+4rբx6 In u0zo(ƽ:&v}X 7A +PzFyYTyELW>XJ%RKs]~k_$=HI5d&hc͚N-#Q(nIC*bE4 ! Fs2 kK؜9-1oeZtm#WZB|i^M!SwUȬBŴ5Pm# QЋ=pTl#Nnt㤔m8,'M,g'H{ Ň&ҜjmLӝQZt'SkA' !Jq=1:):;p3(/Rf˨aJ)E>~TX#vXݾ$h(1QS 4ׯ(+  D䓍)l* ma>kn+GUNwD\)XQO% 8" /ǢH3Z@s.eM֦Ӹ/olFA*rEFU!,jās#ɶmŭ3b-gʽ7%RႧS+ lzhOCƔ_4`B 4UYI呤 Yw4SxZ(b)__AIIF$vm)A?Yv,)?T%xUlv^iݳ=OS;Q޶5\nֱAwGiò'.dN?.@Jq~K3rTRnܰ%HM?=l7vD#u2t*GH/PXEvB !Wn>!{_v] XS? 5j{1rWe%!02kA5qt#2E:g-JOEXkխZs\vn)_MS;a|5Zc#=jqT=h>22Kkje1gBaC; #6;ZfS"A(( ):NkA%oH{xO=A Q߽[E;sWrز+&/p0=d^);V_рߤC$ɀlĽ/%w8 {lMmf:c7e>]Tq菃_.?ly8[@6Sa/ l/dgOP3[rv>"e賲6Pv0BJQ:pufΔ Uĕ_6:jg򳿧90P]ؿcX$@ Vu*_KK은i 1s%i+5 s~.PudrD%{\R_Ď-c$}׎o͈}r6j¶묵/QNؿ\CHgNR"L7;=; 3lK1eϸsQO087=fj5ÎI 3:jBZ{V"Hkoel#r| bg^?JB?؅ŲH~YhP~?nŪށ-Mh (eRQ_O_ 1Cݣ՝k(S-z}._6`1E:B `6ryxJò$٥ɎN~#֋{u6%pxFZ} zj =+i6݋OZ[8B¦]VA=#)rC@oӷrKK 9G%AQpf4 R~!iě6ڎQr^^8 EE" $@TXQW'U`%ɨOdn]T@tן۞a"Ÿ{4n5 B UR*ٗCG BqdNh/E`^mH>8kq\Y_}{W#g4+0[.΅XtPN =}n+);A8n{@@9:8zT74GyG'1 iSҮ+w?oUo!7Zo r2g%3{rN؍m\S`Fgp:)CSfȣhfh!N;^)|[}4ܦ$a u.)2ձps߲zeoղ1eF%OO`0n#f̀pjn][ЌM؎5%Ń5t^] R9x3lSJmk 4̫4w3VcBc$S@44cAi# d. B (2'UC&1J]o 6c`Мr#yğPFQH;XR$qEvpX9Dbb%Kn vNI)XNC y2u\7ǺH6аN%B/n&>,R^\O <IM7&FCzW(/v*:@73$U* \{NISX +~K)07<tΧ^F*hI}ϢfS鶮ahJH,BBcfVLሆfsv|]USbP= LzX۹q2kEaT4kZLb`/gc? 㫨[Ydho s0NZ:pW' OkfF9礅a CP)1<~ 瑃q@ɹkVK}lTr A^BF4CqK<,! . I^I#]b uⰛBVTF) ~iN&<95dWZѤrRi3F@'&W[~i#xt W~is|Td0 8@]hФY}]@v'D8:)~6ަ6g=>ㄧ\R#f-5! ]B|{)x(G;ar46M;0΂|>~T$aW:}U%ܼcga)jЅ/#G5,"L?<2T*;YzJ>GCfZA0'c~EjH7N兖ئa8̟!ocjq>lO4R%m5t=5=P >D§.4wΠ_p_5T1nwFe3t 1/~Z+x+)BJze;(l^ yZc}9Em|6g\ 4_31-7EO*z9(f={C)ջYĖϣq!RWd_:'wS*%}4A3xF/7 >(17N{Q{ѷ0B*pnAjs`wXC[W ] iXg:#pgmP!`}4</i>X'qܗ><s&8^ZCfLEC 8E'0`M`1)胷u[T<7e97- 7ӷܔU9! TaDg}Jd"N8/[yK0K[·zeSh@R<BY8XrKbm>鉹Tj-N.F,]"W N2$LZХ? '΢t䷵dBȢaMw)ʩ}kݵ4 dz667pФwoqkiՕ;o?TKI\9sPg=YTWתma_ko>~Pʯw~tTۓ1{^oߟ*w/KrtX%n2Pgq[I2[>{}@;xPzIExDsY:Z0 Hc$Dh!1AXSSP#R}Ǔ>*IR,˘\P b l;#iYE4+@V ,%Gt`4jwpȚ[=@Bﯠ.ʽ!.VIRkIC'!R溏eN^T50,4 xcmЄ D} K, uGX|mi9%1:cE'y( uI]ⳈK& bB2Gaj]Qp+y4`t>V#[7nmaaTTGy\UO 2 ;LDjZhK ӭC~-< IkPPU/I@@jX*?)q^֕R#z>JzBvGU-fnVr!e7C2ءr7P '$KyQ}k )#Sw^ey,)vJaCR7a0&os¡Y%Ն,?mVBXIIxQ6y 誨'[_l؁*++2j]~f-߂>@AhcFRIi@'8ZX[Lz#Նn)Zr3ib:Eb641sa0ğy2b2uhZLQLu>X!ۉ1*SlrܡF" 1h8=>3F#ݛBpL|yk.;T˟u8+X F>w;H̖(W%`+ "7Lt649OmYu HvvosYYTY)H}_+q[&әTG, ´w`Vo0Uc?C9A\QLru/9.Д2Rᶉ)킭V7A&XỦHOьv87KjyLM 3W )gTc*f4nƅCb@GĘ7ƴ_#J\dFiO[k |Dʲ+L坙{GТ5n<נHWx㠆Q Rl8"0S#9;*$6/On5sL㻗f1oR:k%mY__]V??eZ2iVSzG9I>†#4>t; gM$0:e7:7Ee=|Gs'f2h hpvOXl"bxy\n<~+d#YIȇ|NC-ͺ6A$Pڏ" -/E1pR%s)3^w^q$bK0SOY" Ba pWam0WbF=GOAм17.غ͂@xLq>ϊASD"-'?= | \a{B JBMxM`אH x#}"I}R] 6řV+sWP bBU^hu%h;ҜGmvw#?'fu˞2l jJ? >߮=^Y?rhQ A#lBC~D}H^* ']3%b7=[4ہr\ei AI(70יZꎮ]]Ys钢N)(Bo/z̉x sS!4@*xX$%džT,p|ְ6u6@d&vx]sl˟NA q6>Bsy3&SN,@ ?{="w`j!,wM{W{sEm>D>55 {; ~S&2 s 1ӯ!l7\!ӊf.LLQ+}MՅ}4Q( QWqg `*f(^씾(ET՟FiG$ͬ)ײBM,nW]ܴJ &TX>] ib8fn-nHm*{'ZEa $!^:CbtrIW*N8%ˍ%} &' n[Bĭ0􈝄=_08YDC Tܮ}Wc d&M?3äX?89!q&w,dϜ 0^& k@㡍?1뒏y~M ~n 8K䳔.[P֘IzY䦸r7_BrߌʻӑF 7c s6@.ov-b6nJ#?ZQ.Ȍew~1J%u>(t:[yw1,lPlř/5(jM~ #,%$ō]b%h& ÷dIYm</#JȢΝ`ur$Ww(p L)(\nʐl;cv3 {A#8KL3YrzoxgRYċ h1Wb7KNyh)_ 0MLee>;7WcdChcI~#غ"Y-$!V'3Qdɦ'jR`ڰMal?WpcVm4#KZ3y| ANɀV8#O`1H'9I9p΁M[s0Ұx;%EP-Cv+ɿz[^buZ2Jlrt09EYF k{+Qkh:M wC۱,ckHX-h܃ѳ\V5{ 6VVtx~ g/ŸG x}]M,oQb 1ߊs황Bh4!dЋ IXTq~L=6u-ln3 HӤ nOHml QsMw̨D$e,õcZнP>;Xv!m,{j0Nxa!#պnu㔭vr{|oDZ`&uQ 0^ݩe<^NS&%sm&rP9={ j΀RO<+;*.!eScHjIZ$(ȗՆjRg7%CvLo;9bC Xt4ZNOoI S{HPݔlX}`V% v!t?(Vhy<%b|&a5Q\,WdGlr ړ$qc-k64k-t@}yڣ馯7cndㆸP!Ų70ҽ6 >9K!֜RBql_[?zݬ6~J5q6ZZ=I, _[ސ|<;}.9P';@oD2{[I]/ӦMyӰy.;ܱIX= SrR 8GW :0ͬyWzuMZkOITo1o^DN "U0QO԰1h o ]E"(6&n"_TfpX^F\"Tl ʫP}eA=W'5\0 jpV(4J+,Gɠ}]I<t\Y[G74"X͛ZϜCO!oErZIżٖL3[39ڱO6 g=P.fCYS(mi2X٤TLZ cT[ג 1-_q6*(Cn}[jAh@P Զ#OCɨN:l2ljZ:2C?6np mB ^yL_p:">rKFnY"N叵_nZ0۳±, n);"OjsqC2XͽHytxb!tGwf>6Ļfl>a;}Lλ ?)d: 6Pt9ay0C9=j6؍#dzobi%+r}O`NYw=]؛O_QÚvIQJMNQ? p$Y8q*59c$~;M@N?@clC흈jUR:üQ C/E5k) !PJ?3ӽI5b7a|>>q*t3D2u  GNؙ(ayC/<+=NZREA'72;㽭7ͣk{aﰔEOO%%*DŢSC;NFY-an|5 ^R'1(\ #qҢױLeaZTOFQl.y8&"(쾌|?<6sV_sbjA`yQӝr6͟Q;Uj%flg}q*n7|fS "|]ofjS6Y-2 fڛu4wD(ʥˆZtOwDs"AXR;DҺyoDn;_sC`NZEWQT~çl5:7)pRr6NWs:iMtt0LDLi#P?:Qf#>~z>M;wTVv:&US~&šiI ά[q@?$}iq zk1&؀Oކ5O}~3QLo!S>[xf1f>wh>[M3sd?zQnz8dm[|5ww{2SPDOH{@znJz}1r}вA eIx2a@s 8m ;:1RFkjۦs\بEZ(l$A*>D#'ɜY` c1kG[p1a&^h7Ʌ)]Z?jq|SnecDcoV'IGE\毁1d2;0-L|NeW#U8V!ۀ!%ӥ"<JXTlѵA>OI`Lh0Eu͇K"lX/ea>Y?#s  %MDEȩџ xcG|I'("*[*isM6 'RBC߰U.`f ɰˑiDDTpfvU5ZRz9 %VtEک;}/tTa^k"xX]zJ<0)i/o+PvA]ўt^8drze'bpُGY}̤ʦ^OzA]5~о"ɨ5q4<4y;5᷂a44]fpRFITWO*^m˸޻kN`l{frIZJJc$a,;Uy.U pgYO}uqpqsRUYh w)11:LkIc+Gi6 Om^"' Ŋ3y(ŗhtFyS9-nNTG=VP&<uh\K+;QOcqF>au t?zG1Y)x?ŸAs`)-X‚|+ ( I_%e{l܎y]1 t2b{7atNp>_N/./H;d` |/, |-ceBlqEGu/+Qړ[)~^Hْ=|Ei9Mv>nzCc5RO5;tEAenhlRP0y =#x,!H86ʽϨ]C,Ylă`ܒtԌd e)SY.<&Db >xAI;7Ζb]wԈ#ydGLm6dÞh^99+ #A"gB]IE5.:Cv&ET^ x3xFk1 -|N}Ն?/Q; 6:&CK(a' uԕQ4(L=dp 3NEhS9ԈtXm᰷IBj8 @cհ3)!( !UDdrziu>i`#KcP^ry.BY$Iwȸ,Z(=ޤuGhƪFYee_>n%%ahت&مCVယ!ud/R?丄fߎcQ{Bz -6dsƹ9nH&=r rZ[x^D;~Նo Y/(E2jYeAۆ~!mXrCQ:⭠y;lqDݵ *unv -9-lůCKՑ2N=32F gyb:λFj++9kxG`)`k87p^*9g z};4Czȼu; 5SF QZ#URqn:j^>x쪌n ge6?}$Ęet9mM~vK<-l!$8lgj+YE[0_G^srJ,MgGnfͱK;1:lO@LZ rw9wB40H ~`3*uɆ 7xY+BOMQȅM72i!1gHZv%fm]'gø0.h_A{W147"5 C\tbȍaXYt ίvj&GuS:7qQ21Jbz&g8[JILz(Z`􎦫_1~hN6 Vq!`1B&:8{q5bMQ@I*=/~!;E=`⩛F!}:MW6q F8-xc[!ThҪ<}˧ 78JeK.bd|@FyeF󥫧ػ5,aPcَ1j8O2m8lB c^h7aΣrT)'sڔ8cpV\ȓ]-t(L6`Koɧ ܙ + 21B^طpx cS487+s+EnXw/ dgYaeԅi]V'[8n.S2p4Q̳3}n{i4[^O뾨Xo<[!Z 6=*-_}L&T &gʹXSw2Zlix*#yO$ [ʭc.n[?_k\ U+%~AH[ TCasnө4X騆:3]4@)*g8cre.ok6sFǽ,pd+9?S>>daL6ROI=H**c45;/6Zwx-ixtS7M:WA41mqA-6-L6_ /=Qꑤ'\ pXȠg7L5;t KDF,V:|AeO-Կ@B=WV@$?wD.c"0$ 2HLiGWPRh< Yfʌzֺ]Sg8q\x+hRj:ͯi` ̍%6}n]v"HbO37iŮhvmq )= * fkv9Jܝɰp?*<[<<𜧩_Yy +EI `%5?d"",?u4y %J-۪^C5qtpUa/WEsdDGAFga}Ll dNK_'M cm:lӾks}tV?T x!Ioꯎ6ҥE -C3/1 Nǩ ,X^{*B3ozFtzg@1D Pgld.=D "o8LN#U>ewM- jJzrL*B|@Y_MI 3?|A+fXgңS(}2f"A9VVk+J4$Õ"+!5S3U~Z~#^q:}7³`p̩m[D LaUAWkۄ(E U^@˭<+e(ߙvg 蓵UGW%?-]CrG:1VXB&*:&a:8o|#SW[cXYY9 ˼ٮB6S%@r1 \uq'ȕ(hޞL_B0ݜ]zaIb<3C4 n~B}Q&h]%{=P´ A37AހY r'y5A1PYs F4 "#{hjϑ'F}t;$wS۵4]ф B'-xaxo:}ϻ_x|}Xp^w(䝢yK4 ,vZ)@3,tYnۘ7*ˠg7=n; c@)թ6O,bE/]N?A{AoE1^R\÷~HՇ‡WiWsBdXmF1l?PːUٵ [ O̼1 fA,n \9?s{"?yxz@?sG?¢UοR>I?>^YD5{'&% :2 INzqguLæχUD`0:kWTyA9\cX .,<~M )'caacs%*.,M Q6e뤎@֒m9xJkxV[xY?*,3(Tek1-#vGr>E@_ppU߻}-&qqpx/D#73R:$\[sXњp]b;ÀWA!oՉmB( GsUG u*}y5i`9 yxP +t2JHKR`(.gkH{xys"Sg>d#Eݵ@nnaTLkj48 ^iv;ՠTa"e~G݊f0By9Se.^_kiwm^狶sn;q mNz1:x5^SsSP%M*o7__ln6WU]T4\J;zUw`$tuF[mmiTҾT>ީm/xj+\`K.g$'k(pGهG=U0:Up+w. A{CbkcdT&y ]},p[m'kw4_6~nv77NʗWʗY~q>7-/>?>̓yayf Z nȒ.rSUu(U}߂j߾%tO6nW3M>խQWݭ#7E~y\9_u9;[U۩.gv,%zz|_kUwv6q!Co=H@)d~6}*LY}Ez7->FW-䟖WC|w1[.B#(W*Rk PiKl1ꢩ0}׹IvԇU])UTy'w; gU֦T|S &ǽt{vbh ,b\iE#-(i_d(G-`hj,E0(\4ǀNgMmϭf;9;kOOmZ; ז׉lADcD%VQ{I~sj` ^\ΘښHBhN㕤OEtznm4\Co:x12MRvB76}݄F3, ϦQ܊FDo^\y|aة۠zOk?KK2- ϑ,fB؇fQ }]!hVޭUzluɣ #FpXT!kWZ٩~#yO.] Si17k!7ĺ#;.P캗6j $Vl4J.9I/.4~dCfGysFg:"p&q;h"/:ho zPCx;݆=ࠍ_@%]9Q@(qu%61y DWr+xxk) .Vrղz-~- Nf/&QY_ ]6-" .Ǟx7Cg\i/ B?)ltG`6%TXE}htӥgϞUb.u[;3g&r}zJ6Tc*3ۓv./&Yկ=YcD18!\&jkz4 n2)fOD=ʥSbxaulKҫΕ"-MmG="kR77lmZ4b8 wWDdئU<i#J Y3}0GeU"ȚbZNR wac}Xr%Ę(L5I* ~N{;oM:ǽ ׆(AKBE``Zr5:J6⠕mGyv\\|_wj졡8tT;O onlt<1AA>zxjWABU|ʚ>CfǠOb2b:+Gl4 RFLNCd,9&;ڍ93#ڔU7YvԬ^VQ0ㆣGⴉ0G 'LQP}[[4 &.i=,R: 5}ʊ襁Ҟ LƠDIJQo cp!-ri ijhoݰj _;^R3G|{qţo\(AW8~2@*:$R`:+̈́ɤ?,ǕusPqr1 u(+-:=_e땕GS^m#|ntJ!z*s{aVᨓ®Kѧ辵j?ʳM9oR=]Z22kp[D rPgϥvZ\|ՅD6q,.ڃXwNF`a Tv{e|sSˆEz!XTIM82B̩bAL pԔrl$k&Njs5Z"3soWYѵ*]Y*(_0ٷtA^Z2i51/(M?}_$d9{tדy*|o`W3co4ia-0'6(=4́r-.iE^SdYiJ)HLy\yWT톞.]NE^@ENʹ^Vq 4;ĩlc Cm@-ؾx8i"IԾ\tdQg-T~qJd)],bɸPhػtaXE(X쳵>ȧr9M(PWk`3T.Z К'ɂ,48;`06q"?mӦSD'{jDrnHqIJfln^#6݊FzV/wr}&]q8ŶV6v5&\m:+ ,'#D |ł{bY[}4LËd⠻KA.K77-VxG+S߹ޙK̤ib44`|#C2~9-%'>*0elIW, ?Dć +I_4U֒ǰr"{Wp"€.GUFvl(']pym r}YZ.IQX6j`:gg 1y;wn܎ނKkg R2i'ѣo@06w ycb(4g^ r@qN+C`j4}k흪?rbd}b&JKc;,h'Sm" XA QjҼ%aSfڱ G',ʢxBl"HA_VfEoK|ugM.h0Rn.y?Ih(|*dw-_}r+=b6Kɵl{qo $7)ҭ*ERHP9byKI#IMAT- [ K*2DyŘ>CB9epMfod%*tժ}gZd.98nTqr2YgO6`%#K3Yw -&&ۆf5?ٴ.+Ѭ/c.1``O$S[o(=l5E#o''do#z,"0J&״@ȣyQ `7vw:[~' .i hG6"X<5gTŒzOl捧Gދ\?D6!<@ jAc`Ɍ}Ah({jszQ="GrT' Sg6J4mֶ ~=OhDg1zgR` 2Hcl3)`2.NhFfpawpMq^}DVW)/i!JxsǣM05FP\)F%ۂc4g4$HFcS;9[2^vzJpA &Q Q;/tKDkTzߏƎ'LI-,n?鋎^Eer*]leW9N3,x|f&,EVv׺7hgcQ㊜Puze͏K4![PG,މd΋IֿD8à>>"ѕDpPBAG얄[㤴wtΤO# .wHml He!k^dmKψ/X_?_P~=:ICCFĬwRDiQY99ʑkw:`KcG@Q .9`7 8xɶC$ӏ'#GP+߅AL- 3b.768ަ -|H(Nzeغ>OT"Qj8$r[Z$4c 3<޶ZcW~ОCHs ^&Ff{&?kE7[-kihKgϚc/PN50s5ޭꎘ +6;IuEgL7o#^Ҿ5ٓ{*(4 7 TB'}^HG)3H!xJʃ,v4?#UG5лnd 7-|m}f4Yy'ft `q̈j(3IMD؆?jV]XB]GJ&󸥊6H4'8K mUp):adS{]>//qQ5Fb/R,Or~UXJS3$%c(Ubr-t;1u1uQpw}lVG8Lΐsjz˛ km0ji)DŽt~@ %ucXɾ8D ݖSX'IGqvV3݇G2~+s9clEX"T4O)_B?HgNNk1-kˏOZ¤8'A ; !r3r5Ǯ9pM"1fiV +AJFո1x@2xS#G'y 'Fe E3kF;x aM WYfu!b/yIKM#\7;㥵Օ=[m/'ǏON?y,OO}^;Ym=Y<{~rd=jƒv>yq6'㸵h}ѣg+'0jп & e~ȊVbȋ^$KQ@F" s:"Y[a1/0Zp CLJJ/b"pxbȢF"Hn HԹF~tu >VW,?}Q뤵rvzҎ+E 婇VǫVC(S8ޭIpt \8sGZUm 🬟Fq/?n<].\9ql}ue4>]NP,?2֨nަi 0GU G N+]Pl{wzQs0L/tX5PW3pWz+^k/,j?^__[^{h:־?}pTK;^>d"acR䠠q}dyfO/,\EI^{%uNd6iƙDN?+l. 9<7{,ݥ]G]DiP{2KAt%tr@)JP9 eϖ cP^qxURHkdkV'MOLf_J^'O{y1=qsh\2,GUaD 帼P̫>*1ؼ-;^Dix\yO 4*hW*zy!6 J.dgJ-YzAU u𴟍 -,y.~Ld#e^vd󢨏BPۛ| ߐ܀2Ty =,n_Xq[Kc*`:a+aʓ{A;%;A M_G=X_K^E !`k>~|ASyɍN-RvQ8HzF Z^9>@r~*r.0Ck.˥sk_qq+Ąr'!Q>l8Mr%ԇW393+O1i\Ez"N9$?bmP=z{3,+XS&ysMx`$[& 9N17@p(J@Sj$C r<Ymfkc|ë@MG1<[D'&T6JͧXAذ_>Zcgo!aАECcKGh[Sc)$? ȮkCt>OmhG^0'= 8'}[ɺ|w{'ɺwp*cAu{}']W4O;,<ŷ>2l%\?j~yNg!7{S\:e~$`o2 D||˥ y& .S=( n'rsiL3LܟOnO~ۖ_MH+`fT.l/{/e//|N=hHئպW|FO'{yڢ%)|MxDrr7]y~| 9~K}XU g UW`*grM`8fKilm=s}>ws}>ws}>ws}>ws}>wOX