#!/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=d88dc0a019914bfdb4f87997d8c4ebfb # 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,WF{vWzVۯ7^U+RLEtW݃pM7tu= HY$J]ԪDqjì7w==\L$& 'wKͲ8Դ $cO]xe#cѽ{2q_"`J\w 5 FDt9fVP=2C0Cm,cZ$lFw-B2ĝD< ` LV8!!qˠ%|b>DK3D [f+a&41 `DC,abF@6mÅznKͳ ARH.jD3`a~H]ɘ!@. mx%\Y`&0 b4WNOhN 42Xjyh^74ᙢw22ABi-r|2iWlHz Ӟʃ?Tz"l%h`qEȽ"F]}(3Y1 U$PETKYIW>m+r)|\*\mSTPi0:bvgQ'i#.m% Z 2!Jh6LuͳP(-¯Es#ے(SmPOr >)'7ߧ_"D  7![ q=H?C.R喍g(l+Q5uw--!,.B'Bɱ9okĶ L*煏C<^AD+MJs+D0jPB-@e}TUA=}2MN,ƞXlcI*{Jc0Z:7z %RU"s Yӏ,QQF9k/eX]ۣ/ GC4hPgHC푆h$ IeE:eZٽҌvY ^[lR@2Rܮhc!-y~h(v B9Z9>->%LkJ$k7eo`Sz7 VȑSܘ; +Q|5_c ?}Yg; O2r&0YxRj[$&}[iHJys3ƃc0ȭk$4ӜDpvյv B6b^~߂<d( քC(;[ {y|lF;" m}! 3r ky

(]~A~ٮq񇟁7}θ/R+`y $&~?zAZ:/GkLl N/Y%3hl^k} =ἂ.*LBl nSHx8E}?:~ia %00~=P@xC@L LrRj}"Arlː^-5DZׇ=,oe^UNai2X~^0@D뙅PR̂wrUYƋIriaFT~̮X3G0}?;毇\: %b`p'0E!B0ECm[R@eNG U%'#xRh\,acH^bbIRE1FA23M[=F?BDAܶܔi-Q#5B9mxq!E&8QXM̶XzP\b҄2qI":T@9䘁}e[ǧ ?t^^N6YXz*@n ,12W8Hh4n'))Oޓth(\gU=τYrtkXfT xi|04> H:dɃšqXF/t :p? ,lsdIh_wr_/CU;+d /||}VRĪDlZȃדSOvE3pQS-w1.$ˬ*xtȌn-U+᭵^Tj> UGYrmGLtb%!?Cm6Bx(=0b}:"J%<եhI=&:䈛'd!ePI%QxN':0Sv(`]`(>mike8v> t O^1,/{7dvq_bJ`+lc"A>bz˞aIFxƏ%|}7ã ĸX-wNc _Kx6Ce֛I݃el%yit.p+pE%+XWbcDqdt!k, U* jاZRjXi5)Ҽݸ-m֠墴+XNZ?&#<0 izscSX!{H\8W5xO>F9ҤfSӟaӻXfYŝ-ClCt81a VK$7 PIsӽJ iF͡ Ts!!w Rsu(Ḱ#Kj{s "v 6RDR0N4p9M@ܓ54IIcL@Z򫡷fsB5 ISk6G}NkyB~yŬ /./smB*7N(|j [˝V 6H8bT .zj嫮A{ vD "4#5A_L[^} ,$Hn,(d!DU(]w&x=]@EC |ziF]\gizܚV(h6ʨiE쫯8 19G8-Fr܆dT^J}sէtOzKT;al!c#{С1]8k~XL@52zS\_!HlG sZ%? xr:5FWu=)l<$Gb%xpiñoP[+>\3ܗXp|w=r޲J%Ybf?Q+%MT? @>M;ԅgvW NR)ܟ%\D㗙q'E-*39(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ƼYTmm\[+Hh'd'Ѐj!c4DI|~]Ӟwt_)OTa.{`hAIlHMink h-m;j .}u|a31 0> m A(r{W'qW08'M0jPvKMl 3~m_33L;3L;3$;F$1Y]eR>n'A2+C5Ѱ{3w]اpqEYi+InMϯ>JMJ._=MH:頳Y*u:v_8m/VPәڿ46K~`G%pݣ+O3Ee< Z$. Ct)͕2?ywPr rxKy l/M@LN;j$Rpnh&4g70XlHTX  e|#yE'"bWP< r{f^v hyg6 ^$f R Ȱ}iFe֫2:j1ʷ('ؾ/Cg? (а9ԨMY OCcȨl#? Vr1 *#1 CdecHh3V̫v /#LEPVui@#Vjf7( I+(WW!*:t8nfq)t1ڊ%‘+k#Ԁ}XB8a2펠bso;~:fEպer|{ymHBd s3SgE@/&o1q[QUq߻Ztkĸk ݄<4խEy] EùHU.X@p 566F or3W'x)zBMW[('N/?1lWLVVU$fyGH2D:'jP9*Na~62h4Y 7NJՀnT,N' ͡]j_(lu#mTn6$, λZKKO8r /GΞIox5MuNsrT61HKi{>Y޶iHR zY?zoKèc+T*BҶjxir|U:D"9a[mWX6K@"g,$Fiܟb8aq$חhASw0ktS+عَ(yqLm߫ 1{l*4P)yto6ͳ&?BvLDYۿb!d?C4>]יe>H ɓ'gȟV<+ڽv NAXIӦ'9y=N*kɂuXVySo%.>6UT,lTf- 9yV2'.V{s2|VC:7~ f=gBiI=p؅tc 1&bHp^e E ]VӇu־j2O]5ûr 9ctGC-BH `BVnyݬS|*iT™{rls1Y+eW5}sv*5W=kSbOO0QD?J,YgBv LQڤ>IB /~3N \'!% n(qEq|):v}fe?>Ϋhrp,2LdAu"DѠ1z I" \7*4j׽c-kAsew+i|@S I9|to3AAn淢YAWJ3X~a ;}UĤ~l@V6!uJ}1YUo=+z8@-4,H7nhU72k{6QNDjL] ͭEpN^( %acMWE:NK +4#{7HͪgѶ8m)PpUO!T(k4W~neл9U;!yCaG'댔nQTD(Q- *:GE?FnMz@؊ -[ebĿkNk r\YZ.'GOf`Jqczz\$ Z'?D}Ey ?r0{S[[%.ӥ)e -;Ϳ@{6.[(&w4g h܄ǮIjl(IB[TUyZPݴoXW{u\vR!nMC.>!ϧhŤ鑭.NgOijn""!s6)*]+iV9lէ+^sCJW2J:kbu.l&>8x pk=u#ܜg, mֻU<_`\``8ј J8w^q")X}hoHB -#[W8}^Obz^=s|ᔫNr?{S;D%\~h05f@Q:c $砮20 ؚNiWD<^&\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 XOs${#dڴaڈJ7 Ԟ` 5Ѯ,k61~|"k` '6#LGD:0=zd7ͬOmhŦ1j eH/>yO\ -9j<5cc*Qg.T*,׏W/O-7"J/N/7K_*[+,KRc婄*uX6'<9HzUS0gWY1 \'  -{C]훀z3FU{O-(n3 .yJLkamy2 mo&"85wׂ@(DAybyi_᱀TN|LlQ?U˶k^ - ;& Y'v\uiǁB5=9Sd-])l ݄=1h[MbQkXWTYJڔg8ڬ7sFDJ.ã(/hǮXla 쟭 Ş%LU#tv1jtFGj-}+H #S7-1 Ů'Qch8ڣG^Y/,΃W𥉉+@E@vPu뗻p 3"(~*bF^;;eD.hExM=T;3B˧^k'?ݡB$QKX{TT;+o  ipG7Kp%eNCwU F׬'\l=+mug΁"F|Ew!UrĦQ0Pڛ#ڛG?TU(IISMͳ}SB/9y9:z.Z'Ѽ\sʚ;ne5CLKf*NM7v( Vtz`z:2jb }ݬLHUM lAw͏y&dPxYg(oqrKP AG7W^o~-W'q^7b6A 3;EзŤoKӕ fzxTCVvLu{2<OwOj̆|K&Ke퉺St8?TYƚpZ}k4.j#y(ପ!t셫Tz329bj/Kn"lIlauxM賌쐼aU:0Q+7#?'sRdN]Zٴ;??_d>!(q ѴkY HV A'[w]g'-$gJA$Fvop~„ w'r'-CKVc$b2꠼R#j_iXq9d8 +c_%l' `*%O9U⎺-(sw6t6teU(˞\7iq<ɨ0ydq#6΋׻?r'ЇK?K 02;pIwlS6A U&<[,oMh36;BP%t] O=vRt U U=S7?w]'.9Ҩg 盬W;eD._ס cLʂ>TX#ErYnƀG?=|x@Q3DF@̫%4o"U\mwLYqm -JIҋ S2š`(BM,~pwt/ܬ&s0;8hFnb/O֏rF(d9&J1 (]l7Y J>}{gY{"Jjr{ VVdG&%WKPSXW @&G篶R}>Ƕ3O]5L>f?g3O4ܷ n)W/Yw!/wx,b Tb '~i}XBƷ:v%\ѳJ iV̺r=Tr\Q9:g$H$R+.;@b}n]-E\^9cޮTȥYy|}$}yb(7}tS]>MV[&QN429)'`Nɉ?QZEra,B3ny6+ bZٍwd.[Aӥ'жe%T,n~~rIFahI;uPYGyP  =A% KdPaR9%A큎iY|شIMˮTւL~FVi^6]c {mkb84O$̞j%QȯYr22?dӇEb)4~ ЊDŏK'qZ8 XgF[5_D#2VTľ؞%{fB2kc1: 66 ]LM=!NUҹ*lߑ" ͍HG2l/F׃ ox!vtFܯiίz@y?{G@wPGځGTurjɣM}KE)+7_qE>AP׺W|<.=Mc5+ڳVMfn5K^/T#^8y)ǍXkDؓRH"ct ` |T5(Նe ۧSt2W71Pgߌ^=P!evͪ[h4! L8÷;:T ^a"bYbbzC(Ș>]dgr AG?J3Bb]**]DyF?\H |=Bc:(&N׍T¾WQw&1yn4GmiCHµ4a!z=8ѪB C Ϗ6ByrE騳,yپj!D[0Q |R'ERrli* s^;2>yPֽ@Rzp5=oa+wCO^9 2 s7 iZgBf!vQKjTIJǵ3sZl83~)*bQSӅe%SU^Tfg_pQ*Zwɣ*VSXG:7僎e-A&⾌]A}kY>7oL'! o;BC"gFs[1>U@ᅈF@IA;BVT[H̹]V BO!(a׼: 3U^'u3]%pExd.1N.et`\6ZTjT/96J0_x~|DyB{p"`f:ǃ""3^KK/+NiRd/ (^w3O^[XW쿿gf=g3{f=Ɍi&}4-g+KUuᙆ= @Yc_[z7_1|+k3[rw,KӠ&_TR]lxy櫖fq=v(p1j~n |ꈖLGTXN-,*NRB% zY{TazA+E%<$b,cVZF.qƳH;|^,1!xcĠɓdoY 2(ѽ,Y;7YC)KfkuZI@yәc696ǡ}>)RۏmmSQ/Gy->7uP](۸E$v;_TYګ?}&[3) aM]Ξ*v#>46ґ~zs>8͐"*A b3R`M̏Ś8̟Ywy{{q>$ Va_;i!4eoV\qB睌"Է)׷ͻ9?ٶt| I!;הg}>ӽk@*щ}w3 2F,^Ytm41WV݁y_m ӸI&$x$za3UPۛ!"e1Kuv r})93b^w8T==/nGTZ]&&yZV2"%'8Yʄ-L~_&sT gWY 0l_C㷪XJjPy4]2+,0Vv6pzkS1+ֲT,&Xcm=TH9mFnRX}bGIԟLs؉H~},?ikx=~Z?|J6F [,(vA b0`R(R?ԘoNe창"1!cwW؍9{xpsjJo:+kBjԾj'Js&|zbvA9` ֗tkޚ6oUlɾpA/( km46ǾfV>>|Knh_|N˹8M"c g& SeZ+Q\n|WhV| I[.bkl4/%J N _\#ptc  V8~&NdȌ(vSY݉Q'؎moM{7nC[N\+מv3xS7LMA\k>&<gA6P}>5`W;ՙߗf3of7>ߔy;݋v^~j$> u7k `W4q~n[#jow8Ap/2$Y}d$F()uOe2 ZfZF ʔ`AK;8bm޵#u0r%)ҁhuYUˬI1/'{8*`nIa38iWQYb$ڄ >00 t>I^ ׻{)>mw `2ǣ̚=iՍպxmDNʎ`v&dĆOjOO8[ -gy]V6T\br4'ko2P$:^fW+* ʍC91b HTFʼnL\Co5Ż;0 gV| M{^st)[hRԚĻbZ2k@v3PAB o& Q,T0"mefn7LW}OZ`P+z&|(pXm .9*FF>SoJh,0H[`K7>tK#듞R@-@vOC1pّ`J{>E BI0t: 4>,($p8'? C.&jglq1K U" 1߅Vr!cN@1.p"Vߢ=@|՘r;#pyy"07g:k4.E4̪* ƫdJxDRGqn\C19jJ@އ#DA{.J(~I1•$Ȃ]-pҝ߈e[X'ϟ:IsHx}N &^_!7MDM]yjUH|2B&4dj1 hUK FW$?4';ǧ'?zރѶ=aFzWx tW\X,^,G]?_PNA[>r[ A`@6#L:SBJtCaֱln?~2>a1ϟ2T}(d @Q*S G)~YGX5 [J%òRɨݝ D4]&k?ZMCypxNЍhc:7]M1.#|8{D>>@`YgsΣ yitI Syo(6E-qׇ.1AFI Ysp]@>|*ɝ&Yff? 4+0-< b煐yqI]LPqc^쟜w*jzH k5{V #!60B?=nL Ɨ,Og}+ h<ԊSwVN8H9|L Q9yDƀOӚIs9a^brGq#Ip5dÎm/ 76-7 L)޷gL iK;S D!|O(;RF> `C Mpaƒ95cNX/V[Nnؖ$[Aw/";U'^c {%0p"_IbSӰ0Tр@md7!o ,gC$۲YX%Oôm^Hh&>Uo ŧ6Ɵp1u _%W.b}&MR=-_Qx'F,Qɐ ēkv듙ɟȡQ3"0<(a66r(^5!XJX1fօ:<<_' Qe^C GX g]ʭ^h9(IB'q-Y->rPԇ-Z>_\K/.r6"lwuEr fȥ^rg᯽sL%=K]1eۭ  6[z=vX)pjJ}i):ȑX \&Pw=q+;.p)F߰1LL+Ri˸^`-!ȣ8򤣜W3q]39-DwXmAKЂ>n2PK]mO +"rM!TR dƋXnmۍ6cj\"fJhcQJ=V׉T zN4ZKKΚa.C+}>igõu{Ùϗf?3g3fw ^hְG7՚ưL1ߢFߎ!O{~ ĿGFG`t7pڎU @Q,\b/ߎ.Q{տjKM;t~{O*s>[V!fi{b7 )mGrn'^9:wpEg7ܥ%+`j+sQs e`QE5ƹ\R^$`%K02,BjeTV?^VηW3QX6=rwOw^p|= rjj\`|D|(CC7"!Z LGN-aQ<(p-Lѳ;Gɟ}?p6;^"^O2W7J2$ :KVn~呾WA{U{տ蝟4jG2 WfK "tz>HwF-=:sZӗ&6jмl&$B/*17MZ_HDOUߎpى'`!g_(˭6ƞ|՘ k 6b+9 6ĶZ"Xm\=:;0ڌ{UV+YV|o-l*i274,Zﺛ J8`ʧtƂ_,ab2qR͆s[ jIXY0F_C2(?sV:mXBIpI~zs<<: /ڐ 59p$q~ѢB(wsQf[ d{j598dkԷy<7ç2&4;{s7.DғcG _*h%joųd38vy18WÓOv0&6іs*85%oT*NW5YI79&6$]J<g7ofZ.ab*XWiFXoܠٍE uVqjkHP3: 3Ng s{D1G[ 0f$%?ԦTAZ49`]BeӲ%2rW54V{w=4ߊLYp'T3U L+7I+ذITja7-엇u\Ֆu_X #yB-ep|uߐ;bA,2xXt\#}-Ν%HD׿L_|znq_( zj\o_`+/fi}2}V8l.eK J'fʼ$uI[{! uwJW@|&Cn^^/ꬿn&PYxp(mvVeS[&13)n[ !#Q!A\NEYQI: &^r  lgDs;GuO-xޔI5;RD]zBf-M0Cn?8Z߶i+}\  D"wDkIp7:KFuZvW6+;Gg'{xUP9댖-bthd K7F;>S;`QD7cc,+5\0nS+o!nmzNŤ2g0Ն|loC |Bxg3{f=gߟ;ٲ߁ΞڋH1-db*e7\Z(`o\Qlv$pwx/ߐj !=ƼLt'ovRX'P^""1bY\% [P<&K[cM ? %Rׇ8 zƕS.׸E^X.I.Mɨ~ ɇ׍~+ Z3q=}~U6o1[0/tu^xC R9_wNG= {]zv<+iFwqrҷpVިx|%ϔj?1uuĉP?CPNZ.ݥs>7+ɲ[Bn x3>D9Qeye+҂YFWQQH+eNB,I0ݔ*nMDj a[! J X(_/c܍ANafzC۲`w/j' b <*յo1X'a3ceYWH⪍o;eNLo'm 0Ho: k>+4) z6M=B~}8`.# YE}ٳ%dH %%s Ľ {юx xd|LTunKv/ڪ2pb7ZX^B4,߸vH jCE5A@0~xB$;5 `mv{<VS(jTb5NS!Gx'P$Flm XQyp6՜I6ZU*oxe)Tչ'J%\%(鯛-QDAߢ\O+E;x iv:aNR50ެ._;L -An:\PR_j<-H KkG(_ 7VR4 L敎dl&>A DA8nvmvk~c0Ľ0:4zXn:Ѯ#4!DI}9Vny =8h\Zu$cL80S169q}T^ol1Djpf8c,*=]'Ϸv-5:ֈ!fB\Bm㮡IʁfN?'HJ 7:Ǡc ֘U?>L};Zal>^"euoEzde>j~.3NipIFfJ+*w&0n๢I\C4>y(-5 -VÌbĸ%6 b7K-2!3b8À$sT:6F i+?;8'Y$8DeWg"w.))/AFd6Zj,?2hk!6=v`Yw/=1ݨ%O@E&ow/TPuFƀPh"%z[tcS32?0{{dM{Ц c~>YL*][<.OQI?w{f9D稪8|.m @]Â;F5Ba5y$q6 h,hYFl>[A欃iqI.4퓏EEeY#%N=nu - (],+B£KᦍL]<8|]wVu&<"g&q-An]HBH(T9.Rb9-NÖ0s#i q9D)m qo|6`R*~+\4@B]Q~yV^Jl#>ߒE&e@F>rrk͈ xKؕ{P-זzZ. .6$Sq<<83hAwJѳᛗJ^oT De"r)][Z eCb=ѷJBL,$ q8c>Ѣ#޻ +/꯮vs}r>wcة]~:W7Yᣙg3{=g/L]P@$)Oq1j BGd?}? rV.gq8ci;YY_txҘfQL5= bMi;{{E Z_,{cN!?χi%~_콢͢ϣRuj‰U%rjxҡAٞ0כ,/x&gՒ v4\uoVxQG?3h\]ՆAX<+p|.gwYcxY_oIeKk+kFwt}5*Bqߨ;YwxCn*:G?UqN@Ɂ .T@qFq?]qHqNTHqn })Ke ŒnjhceZ?Lu>]wr w!1]v HN|aH/wTWǻu:>,}\ ~24u|)'˭rw|uЁ$f|1 ?[_'٨AL[ φMzyjl ej-Ny %߿:%Vlr?^Lۭ(# An5*ZV+dn%L'^._t{L4٠]-s/Gr-zԇم e.FIf--yp3UغahD'3xn^_WvxʄfMdJR hX?(I $u5=Ob_Fn*Dj%Z [E5 ۶2-'B{[JF8Ž$U, ze2ދdY?@p <#]# ͙Ds۱A@m|xelD#c/IOqY*,+Jsyed >}+n)D^.[0 x1%reKw,Υf?%[nV1'Wpx/VhfIOR; ~;/ƣ3ϗ\t)(iۆK,`xWu#V\$u˽eCeObgʙіg}fD70