#!/usr/bin/env bash # # Copyright (C) 2011-2021 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 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 '/^isgx$/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=93 # Run /usr/bin/md5sum on the binary payload to get the MD5 check sum. CHKSUM=c71d20e6171a7d30ad1d7d16417af652 # 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 source scripts/installConfig make install popd ${SGX_PACKAGES_PATH}/${DRIVER_PKG_NAME}/scripts/install.sh rm -fr ${DRIVER_TEMP_FOLDER} trap - EXIT exit 0 ]$[ϙu%UvWN,~ \FW*xWUneR߅jeRT&Sѵ#;Ak5i{Ϻ,ZZݮUjU8a֛XS&mԻfYDjZ~Y1§r.<=/OV0%\ӚXU"Gɜz3+I{k!ƶOsM 1-\\6[![|N" X&ЁWD[ u⸁e@X>Ye⥙[30A0ux!0]c1NGŒGfz@=Kنd )L$bZl5"wEVXB?D bpdLѐ@ PDŽQ6<܀,Fc L`w''4ʈ?,<4/sQLQ;^Jw9I4{rz6$gvKD`;(ǣaoW k_){E7 JVHݡ"%tQK鞖 p2a.$ґ32bOaG"}i0T4 ѠSeµٖ*@rwH3N hz]y$E%2)e$Dm)9D@`]TiO`*n6|Jf .> ,ӘPAsa ("Q+S۔qx.U.¶)*(4P1q3ܨضH T%4YxvDr {7-r9ycp`-{wyӅ< "|q(2ԁPt:P3q`6U#C2@kOLҸpȸ1t'/DևG<0yvE@kWgN#rJꁢ1HD\*gL2g+N!5jN@A|$lTM90QJ& D\*3 yWq/Rʚm ;_1 X^3 X(g skXyz{h CCi=󚤡z6)y~LHL=WΗ7KtK<] h^_ S~,#Ϗ.uQ(U4:y쳁_2ԻDxS& 6oql,@a|`9sY˰NN/QWˁw?ۙ}b`Ǥ603YdRۂ 78O}OGRϛ1DCAn]$aMA &3 [0_ ~A{{X KEQ&=EABwP@;Dg31q o y~wn&H9N0X3 RDٍ "Ɣ7~xp^\2sP|\t$bCfuc:,2($uWDȁvM.`APm 2;v? s<~>bX[吟&q=6kyDx֒aDxf*/VTVRg`g".obUG#GGd[\j!h'Ҩ=Ժ>pa|+r Kr "j\,䆒`*Lβص5^LH˦Nv+4\cvb1=oAIf7=m,;4 - y8. m' Fސ*t?29p0B.Y68YēB`g CC,D¤[-O,0 o14luDB(;rD "jblrrS"-F Ul qtnO#F`5k0b!BsIʜ{XVı'">Rc%JnZ+hyU{z*v8gQ`Y1/\ 0e8>yOѣ*Zrs9XUv>gݯ=`_'WSC&斶2\#阒 && kBH2z1c)y(X/Du8ΑUc$?"}EF} W אּU&}IY-Ki#^OL=AhJeEcNɶp,$)"3pJWz=RUg&c?l*w?w,Tfɵ%F0VX`?tDbtxRb1+F2vC`Vv$G#nxKlsA%F[X:<\2tNM:5v]uϞ8b?wĢɧE"$z-<}x?C7Ɛ9Pv!Nz}e+;},-{†&z?~E88.^`95|-E؄Yo&vRy[Q χWV`^y4yVgh7|k?6lؼyc FR_$}8hhXםܹ9}Á_r!#TO+&( Y (e!^R)eVT3t>:Rj5HHƵhme-Xztr 90IH֣cg6 C¹3~ 1ɕ&5r ź63Ϣ(l!bS¥Éa, [X %IN/9UJVZO3j ! s8nC DžܕYRC?,hkc\1['҆ut!)nj^➬q ?I~OcJJ_ 5iM]H^9+luZS3 NjZ]=pp%{3-fm/Wxw.w$8|l,h\TvR=W uDV7f^Z^FZQ2HpS;]~._uRk'j~9u]=jfںDcd!TER,̭uPf1F!c EzE5#\o2-R$3=HM[4:?MӃִBAӰQFMM+b_}Qy9Bo)6J;6$z$U C>{[BΠo c+1 ߃‰^b1֛:. @ Ab;ϜW~_mF.);d]sEV:o#[T&F%꿢H! y\Qxd#ɨLޝs5|V5ZPp~t[y_`$q}jSQ-q&IŻ'G&,E ~!U[%UK ր!D8vWq0_Zj#6`oo1ZffԿu#|r0)E}za|"’in7:x@*!K58 yQz¦rI)1s,9|5y `'L]Y+ɡ[i^eוqŠx{˱1CK2 Ǿ=@nps_ce_MjocyNN*e)T FZ4S#$8;7+S4S]7P:qHHpG*THs_fbO4AHǝh<9(fQUhT*4!x JC_0Fq [ɉmn3ǃ~WaO ֨=R𘉎Q\R[?IPc-nY13>eσ?Z27v`G%9QVyZ,>H!Dѻ z2TBǧE+ɍՔ~M\]}唭Ucg-"%)-O~3ΥWO7njӾmrHO6 `dmjXI,:j.Ϻr3|vƼYTg +s>EwA& `ӓdRj%Z NlwU6vgޑHUw_=,Zoli+۲~o0Rkjty!grr9xwno82gm^ǧ63/#탾 P$xmQwn~LzlkA}3]|A&e'Ķ฿pwL5>3L;3L;3_N;Cg$AU,PMIH>q$0T 7sOl_ٕ} w_!$flUJd#Fb XX<9U5+:X`uR<%fo HWGxдaqkf6G;rBCt4Z =y[BmE26 * ,GZ?eB=؁ 3HpAf\Ti{PmJ:A(a\s JdP>CKr"ҬѼJI_W<*yJT HLjBVyHmAL~1Wp :N&pv2G+BHI堁;P4glSad^eKC n` ,<2HE9isA%y&$i PꎾWoő.&/|MuL~ƫiX߼v3u"o r1Mcphܜ Q#u7m^e=rC& U ^B6y)KSWB6)/+nնSTҵ ߬5ZkCQ`bkY4&7(>Ptij?A]JD݇LC"lЋ0:\_F[RtUK Rq% j#"Lp vXw|ߗdP 9),&h`Qǒ!]@[kwXfOV4WG.[:!%V"P@as 9 0t'jM$ : aX.%)42NT ۂ|%&B ʃ;YZvFɛfj^U1[LƛdGA@т敺:5nnGgeK L~'rbЙ.؇!ZSF׿S[tC= ~h6-&|38HgE}AOɏϢ9ИxW{ZGUă擦MOr=zT֒7$T/lJ\|l@gX ٌɩZR5s8IF /~3N \'!% n(qEq|):v}fe?=Ϋhrp,2LdAu"DѠ1z I" \7*4j׽c-oAsewkh|@S I9|to3AAn淢YAWJ3X~a ;}UĤ~b@V;6!uJ}1YUo=+z8@-4,H7nhU72k{6QNDjL] ͭEpI( %acMWE:NK +4#{7H-v:DWRgVmjꝤ&Ч%B9Qv8-^@rˏ0t&dn^eEMe3uzlm ۆ],jvU"ow W!;sA:𪲛Z)r j T(Dd Qo@ˋ3/1%mc7,є#QXpul0@C.mw4շԝJbf<'?PŏN¿-&3Wr>ͪgѶ8m)PpUO!T(k4W~ieѻ9U;!y7#aG'댔nQTD(Q- *к@E?FnMz@؎ m[ebĿkNk; r\YZ.'GOf`JqszvR$ Z'?D}ESPVE&MhS$Ee>MC.?!/h夆鑭.N»gOijn""!s6)*]+iV9l+^sCJW2J:kbu.l&>8x pk=u#ܜg, mֻU<_`\``8ј J8v_™q")X}hoIB -#[W8}^Ncz^=s|ᔫNr?{S;D%\~h05f@Q:c $砮20 ؚNi?TD<^&\4$ZY8P= ryJzޕxLݚy/&e٘W1{XH]ȷ{ɽo]lmrִjs\Sy@VuY& ,|ER%(m*y' g*|L\*J PäQ\Q͆X~W½cň(^mZ]k–0w H!"c4d%l֚\#Zb݃neKBsyM.d۾qc=*4RpϴSB9x7 frs% /z '@yhqVQKpujJ(k$bc %ZJF XO^p${#dڴ/`ڈJ7 Ԟ` 5Ѯ{O\ -9z<5cc*Qg.T*,׏ӽׯ,7"JONO7+*[+,+Sc婄*uX6'<9HzuS0Yú1 \'K -{C]훀z3FU{O-(n3 .yJLkam{2 mo&"85wׂ@(DAybyi_᱀TN|LlQ?U˶k^ - ;& Y'v\uiǁB5=9Sd-])l ݄=1h[MbQkXWTYJڔg8ڬ7sFDJ.ã(/hǮXla 쟭 Ş%LU#tv1jtFGj-}+H #S7-1 Ů'Qch/8ƦaR?|,,,,,,,,,,,Wpoqx_tXT,:wp.ȬX܇S@/@y@!FTc6A\)#vAK(6Pēh}Z>m\[<"IZ]ƪk1{W%]\7僣=הmH;UL/,,%hvZJy6f=r0^}lӨ{s%1b(Sv؎'6l|->qBIJmYU[z8QwP{bS|Kd/)r(Y0NKb-5=enX#fw̏klն7 @6o2ֺӺzm4E?tں,MwBHkCe nJkJAK=h>=z:,}gPٙwri cp#q"F#p)NyGijMDK-6MR4qrȞ[L ! N$HSV&9/b:SHGQS5i(I{v+C: x_fˣC`ӕ/ImiԔ&ec18E2*m"LM~n&N@`!i`G-5U}ϧ e&qe2de@ccoa~S$iem̈́ ޴G( llȷa2R֞;E' J5h 7[IXBMV1 ΪB^J7S/Ӝ.6&ɶĆV^݄>H;Y+_C5y{C{"0:'EYnܥEᰛM;qUNfpR9Pw*JMqHdtҿu{75{QOpŽϨI{ 4M2o n&LXpG`z~p"!x2k0F,&+5kCb.=Z"^N2AZRaԫYZ% ML2wlCg_?@QVQ]Lu#qIgoOhM?,`3x#w}c-c$x\۹cߚPe"C=MRnLф8a#eY2>N{ۅ9Pj)o'EzPP3~SnyK,p% #zppz5SPFtey>ƄY,Cz5Y$.?ּj H~%2ڿ d^- .j# cʊkKp5('hQJ^\M,3Ejb1ãxAf5ß,(9߉ /E3rxutv^8gBcbt.hə@څi)|E䳗{'"_f I+׽wY ieEvm"OZ{Tuш?UMk3f?g3Whoߧ~S`^ѳ B^ڿ*X>!FG@N ҼӘ*(uG{ZWu46j5?H4U Yi,jP~NM|1`ykݪ IgJZ}u{/P'`OaNXX΍.˃3U_VIlbs*^(KxM:eQb&5=[@/RZ 3yZt [y t-q t? 1NVh}Kr]88ӱlOaQxˤؽ|z43'L!HF@f:bShu@5%: ۹}=98CyJٛf 4Hjߡe]HDf |>vq"ڋY*&t15q?1:cTI`ƗpE|G+0fd47"زkYo'2yI@MAsxG[fP]t2LX NCj&I+Sɵ%v6-k~"(A_^eevـ Ŝhi\מjz6pV^:xi, KP_xvWݾ)Ȉ9:;f L/C'Sg=hVB˥ adan{D?d} BF1D$;=Ch(\} ,8vrRQ'3uEe4D1!tҸi|Rz[6it9jN?VbG7 yvVjuu?Lh<|qL@-.q4.HG fqͫu !=ڶȆ9>)cK+\TA`t(#R-ňޑe)̃-zЋѶy S\z2`I u: WB~7{ q p̵ZrttX"8kۆwfKY5O)Vs2.,#,6;ˬ*PO<:@VѺLT9Z:mֹQD.t,;oZ5ye 2^Q}c8QYx#,(!JO=3;=p̨&/D4Jߋ"W ܂@2 Lwg΍?o3`~ /g|FxM qD 5(YwH:Yi(+RS'kt1᮰pr)ݤR~ɱ1ˌ?P#ʋr|RQ~'38)J\]*={"=zUqOӗ"xyLhDȷkW_xƪg>{f=g3;&3.B.lgeWӴ/] 1Ĭ!f.lVl77r4@Y_tE[ۥtܖ W(SƧzM IOݻ͂Cy5bZz۱dVw)a +k}y=f;Y*O_ wKACeu>BVAkᒇJ_ste–m%|B˯ߒ9*+,n6ޯڡ[K u%5nEQH4ō5M?>%WlB`#׭|ft JN;1~g0)oj̷puZv^ ژٻ/F;:<=37{~cȵzy!y=j_G9G>=QNCmk5oO7*R6d_ YN6Fc_}'\[we/>l||_ 1|yqNz3v2s-Iٕ(u.C+eGb4+>$d-R1m6WrHTi/w81 y+K?mb|2fdE(n3lǶ܉q^סw-'._kOM;[{ @5ugb3 FzQQq6P}5`W;f3of7ߔyv]~n$O>u/k `W4I~n[#jow8A٫h?24Y4#޺'euGtaX-[@3 My}#T eJVL0GNtr؝[z1m޷#u0r%)ҁhuYUͫI1/'8*`nIa]08iWQYb$ڄ >00 t>I^{)>mw `2ǣš=iՍպxmDNʎ`v&dĆOjOO8[ -gy]V6T\br4'o2P$:^e** ʍ!C91b HTFʼnL\Co5Ż?0 gVݪ| M{^st)hRԚĻbZ2k@v3wPAB o& Q,T02mefnŋLW@Z`P+z&|(pXm .9*FF>SoJh,0H;`K7>tK#듞R@%@vC1pّ`J{>E BI0t: 4>,($p8'? C.&jglq1K U" 1߇Vr!cN@1.p"Vߢ=@|՘r;#pyy"07g:k4.E4̪* ƫdJxDRGqn\C19jJ@އ#DA{.J(AI1•$Ȃ]-pҝ߈U[X/>MsJx}N[ &\!7mDM]yjUH|2B&4dj1 hUK FW$?4Ng'g81m{Œ`=}3?rYX~GϿš-d@w&?}Nj8lF u:U3@QN\ìc=~dL} nc?dT9P' E  TR$8j@]Je QS;.iLfQ0\;1~N1&#tnbUF޵q:|4||I= L&h#2G-"*9?^ F#ma~wZݘt/YVϱxȩpUs(rܟ% 5 6{s 9u%Ĩ0:!KGd1<#/gj1b!$;D_lZHo,5) hRBo;Θ$ҌvZ8B|5"+IQv <$+,}$A~Z+\%N[sje Ɯ23^ ^Zձ-{I.`):_DBe=JwW1/]O<Ka "{EF-6PŖaaB=XoBޜAnY-H ׷e,"PJ.iA܃8L:}4p'A1m΍?bK"\|qq3LzZ:FtkO'Y!;.'3m'3?Cf@EaxPFmmmPjrC _\K//rƇ6"lw}Er fȥ^'rg᯽vrL%=K]1eǭ) z=vX)pjJ}i):ȑX \&P=q';.p)F߰1wLL+Ri˸^`-!ȣ8򤣜W3q]39-DXmAKЂ>2PK]mO +2rM!TR dƋXnmۍ6cj\"fJhcQJ=V׉T zN4ZKKΚa.C+O|hw$k>k|f?3g3f?3iX4kأ?kMqQcY Km`noQo܊=߉##` #r0Qq8mc (UcxEFWꎽ_7FxojM_?;9 Aqd9IE ̭VWk+sy},;{Y@ 6Km U9H7XEz\;<nҒh50';9S2VFQШS \.^y/CגGZU%J! 2~*O~K[ۋ9(g^9;܅ڏg~:M?~3P5.h>h>h!ڡux-Z#TZ0(`{{}ϋQ8\O?ɀO8]r/Q'd%|% qa[Hޫ :_..^#+D:=?ÇJ =pbw͍%4ڣ fJLm(-.=R(*S#\v6wx7kdd(9r+'O+w47O9 O _5f`BG*jFlUy%Q5ǃ܆V+\rX_'xPvFBu7J:]}E4֊OY3 @c3-`V[tA ǑLԀX %0LL@c1Y~1pB-+ FvHvSߒZ K(n2?^쥇NNl˹6dBt G$d3\0@777xQIORDHڲ}vн}3X,rBX,MLۀ3鯖N^>vв-[ć0$Ja@Z({x]O+cMioj_]nE8W+׳ǫk߭h~/|MQ*ټ8Ͼ?o|~޺[kXDs?\Ec+Xsh dq*?d qd)|GǧIk ]ֱ:,hX-~X@v X9Z5 Ek5}k_'YdT0v P>(sQf[ dw`5=8dkԷy<7ç2&4;{s7.DӟcG _*h%jodzds8vy18WӟOw1&6і{*85%oT*NW5YI9&6$]N=g7ovZ.ab*XWiFXooܢE uVqjkHP3: 3Ng s{D1G[ 0f$%?ԦTAZ49`=BeӲ%2rWo54V{w=4ߎLYp'T3U L+7I+ذITja7-WGu\Ֆu_X #yB-ep|uߐ;bA,2xXt\#}-Ν%HD7~5݆z0Dq}ͯ*>|EMZjhom5`r*] *<%jon4e(]% k Wyw@zqbr2@e VZoNS`͊?7BDoI++p+LGpq9f%F $e(ha;|ƛdq1x,(oajޓV%q1=Co`5Yh_M/nk̻Arvr h0TNnރE\ @Z笁R*q?) Ւ#WYɺ(`x bqF+vzk?6:k\Ln}\Cln5pz\QTkW[=rfgdd^XE/q1lpqS!J'UٜD{ :PN΅J O*6kwR&#ɍ570khJ}e8@}60Tg+XW6 N#M:xxaYoHL1u~[b|LCB`)G! {]c2gbΖ#ıY2ꕯUӿY9:;Sl3ȧWʄb]Ygl{;G{$Y1B *p`YIႆq;ZyC mv ov-&u}?mǶ6~'xg{f=g3{fs- 쨽Bm,&YX{å5fwA2+w- "gd}Owv8E~ { % !".ݜťZ@5 nT/8TZ8񳛀\!EnP|}Qި7j\k0aaZ] xQ4j+w|x5pjӷg)ui1/cy.bZA[畎?d0!!Ie}Tf}4/HII yĊ|O'{§IRC.Ed_4^㯸/?@q־8= idhP;<$U]eRH w:zUzebKӏ FYj,WtU71CZR\[%i&9ތ#3E4Qc)'19w,8nT͆!w)kR٭: D JgH.M1 ;0YUޔ1g]^`-g ~^)ᖼusk'\;HWl[ d ִ'o,&g%䓱{t3<gdz"vKjt?ׯ M } wo\L٭SWG*JH ȟ=Y>夵"]:w]qsPKRl, ο%D펻7 SA# UvAZ'-hnt{tZ2K[^A ,d.2A$M+|lDT oPd1`>>9y2 9ovZ <8m 6\Vz`/^_[]sK,UyF1>Vu$ PS6d$6q"VM#(L ;ЋI0S,ڇ b:9`;4g=[K  P[A817@ܛaaj *+׀ A L5PQ{d72*{A '}%u)O#>k l6TT T{ hg'DPUA`[oϡ0񰢡kֶZft) ,2hcS]S0D<ߪ۰ qC`Cÿi-za7bL IWE9+浧D1Ohi >|M d8H(dW!a;Mf/9Ǵjasx8 Bc V% 'ڠY@T.=+pm!_toC*s`ۿn<JD f,?C3jSfaju@^?2)jF%Z>qwNЍlԎ$av. g\d:QiU&^[q !HLU{6[)+%>uS%.x}|G,/+{J=@5ިzbEZDzcءST4)57+,0S675xEK1ԅWO 5+9mE7íf%Myql9GCg-<`[D *|$N0Kd`rO5fl4{]Kbv vv5GٶPkhrO(M1v5G'Q&>uR{u-0i/M`#=OZX\b uq'MN4ga$#3pC;Zz7u|\Q$.!hq<kaF1Yb\FWne1[%yDq9hc@n9*Sh#t@R US=ȓ,RlhdKCwRD23;} ؔm #tV-5~C}4׵xR;,ʎ;QRўnԒgEo"a(ANc@(M4lM7g=2nX=ohH ?F,TSǮ-'¨$=bU"sTU>6aAd/Kdy!sCİ_2)A?ޕ`Ya.4@B\Q~yV^Jl#>ߒE&e@F>rrk͈ xKؕ{P-זzZ. .6$Sq<<83hAwJWWJ^oT De"r)][Z eCb=ѷJBL,$ q8c>Ѣ'޻ +/꯮?:|lưSuo|x>{=g3&(S{zH5=ǮvS\'mE7=7 =φ3CBܮYwܡk)=|,XIV&^:47YcT9SMCXS}菉{VǢo>hC9:oϷ'1|Vů7{AYyKwg~'%Gm{~ãc.?ϹQ Ejdo9ukwdFɨUD2a Ae@ u[-JK*1 +*y%p;s[IT0aK4/:Dk[vtshKe};/:׸u-'[ZX.+zg?;d\Hvo<ҦY$d* J>iVsvNߚIZ Gv2?UGFV}A0ƿX ؑj`PKSO6irF`Қ ̀c ]Y1"T3.i1QWJ3=6IŦb W07V*U>OS-J _ը SKەc rzw1j.j"iD@l]TADv]%{޺M\X`U|֧q^KZ7@SB"'vNAk"pvsow[7Fs*G֘z. n7, Luk\ ub-]{u~#؞:oL132nXwrʫm) pؾ.}Q;ɥϢ_ܕvzHW)_:4Ī9T<РїlYnsM[޳Ӓ v4\uV[/(\4k/,uf_x8X>ow1*?,?4ʍGڍեՈv#E;L:LTq xhج{Pv<]G!wWu|~[Ps#zxx/Zs*xxO xxOꍇxxOʍxx/xx? eᆾ%2GMaFwVi2W- IۿLu/ڗ]zww 1]~"HN|qod?H_?|GOuN'S}\rdh S&kO[z;IR;v`-MQs * ? #vbIZn'.%YK~|}K,_Xi!xx2me=1MenvE ʝw0Rf'TU{Oz @>$8Dv Oq 3ɟ%ߩ?yK_"&<9ne}x5#@iҀکRө얹d*c%bPn^TOa뚆!P^{NTxyy}q_*I4OGg$y(Im&_bs@YNS A@Ow%o1зv!eV\J\BPUt1ߢ m+|!$㮹L%Oԏg\˞q3.{eϸ;qvܿft\MB&3pO.i_g;W>n/PdZ/x#Hi)'[?=LhȊaέ!s ;Hb~w[K~M7TsuY`~kCD8