#!/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 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=677360d48e60e1e91a31013c81db1a16 # 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 ][{s8OLv#ˏ$v{Fh78*MBW!)?23WwU%Fht\Y>t=ßم;w~7?oÃvv`P3b+dhtK?KY#=hrwcsކ b7kyH#򈇷ܩG;n ;lq, ɍ[4;7 <&qM}Ur6ԍcYܺ|V q`y돘"`ͦ<>"*`dh`0"[&WR'Ą1?]WM/ //tj{;am aF#J3YS)O[jv`>xе(LkJFgkh9-eO/l[*m,ev˓؁HbBʹ+IǏW)>čQiC~cK1*,;CSugQ 6K#_NKAU?Ew?S(L|fxV `[ཹY̙[;3;> N1v=4a! 3Ɗm=ssNLrXQ:@,d $yJ٦4Ӕ%iQhF5Ł C@xL"ٖ+LgB`ĬY!@!\d\<mu70,CcV|f0fo9 d(z@/k0)HyBy8 (͵޿Dx  \r3Eo0.l]D \ +4 ΕRhReHz;yQ-iI3#>w+LfXEj|ሚLOs01v?d;k61})jӅgkH!B3WٸMunp73HJ3]1- CE70I_ z|;6E/RuV='`5IF|B+n&D(svj$4gg_dboLح F825 @ kZU "nGϥY3_)K`0*kTqV ,n"ߦ?I @V yȄPCK7^YW~R! BE*nTȘ*nm&ڄj@0Z%o];Tc ,c ()&-9 XP29IdZVROX k.ԕ< _T:̐e=g.5)F\dy*kcˬSNmr6Ogd&rZ2fN0|4 ܋x*_/8+9i9=t蕅ReBf6ob~嘶yZZh9cr|A} @r J R7ՅNI1^h2bŦx`cH*К56n\pFJMdUf|-g&&#cq0CÂϳ +/,?h2zDŽsAO3^l,H,6x6 (0Q4}E\FѲpAhَ!f[1]L9(dK4aTYBR|qHH! RaY&?N53#>%}&Q82?I%ii8;eźcEgW2 ˒i (un$VV)5 21 r9C@FM -Q @+r@h.F|P|B-pU 1Td=U34%rA qMj^wcl8$ή~򸎀>yLrd6m=ʰ-ɇ| R\\DZýB`9 z *v.'S TPBKKf$x j]X<*iSɼ" dC|:ʂ|I]u}C=2KjR"{lR9܌a6Ƃh0"V>f,dSz.|dy_Obk\UC+M;,-yH9?k]֏0NeVy]~F%)/@G/fe4:fv_*PN 0>/ˡgSaW8bSߙ{˻|r- klA7顪-#y9ir8+IؘmqsEe!zQMdu?8h: *EVts 9MڋCӃoNC4ƒE2%giPeTOSW΍XHfxL:}4.G~8^2a-l,3ALA7Rta"b9׃LLzlg[kw Qd^'|6L^td}* "7W_x6Bjʧޖ7w@mHDL|'š2+2Gqt \6??{*#"HGtk5t3w4d%ȴn#%sp.@YXk-c-K2?n>ԓxdŁrNoVor@lr,fo29ʽ}emXUX=v:X39yj(ǥ~2\r]Oߜh[%GwX?~~? `<ј-!ZDvׅ @13YQ@-{ D˾_r}h |ʧ^M1r/{U􌣛{{=&H,Yq[b d:Pεui6ő!vHg\׻&k˼Sr?OtY &m*cTwM)/IB~__<{Yeatiұ7o-|z~Y"x&Q3QxgIZ"tr((œSA lQ}=c>&cY }ۍ* @r~Y<[lf`pxJg67Kb][0wL@e$W;Fg,>auWpYY_]zxHˬ^@CXWA^]͜M^xpE*a4RBXCh[asC~~۾hyyBʚ< eA܌\pS{jHOܢZ ]5ITISKͺ.3UMDj iw׾lגu ˷=w})SGj7cm%0m5ꣅ.l/U@̰ON\6Ҥ,z2氃v'$b߿ ]baA.b wT0 z!'=E}ήdTLuxk`9[-ҌwAsg&=|[?(ۼ5;-݄J`,~^ ;qŻ'xJ0wKolc/Vh7:^GpBɩD3le؃؃y&`Tj}Gohzq-L$5MryDrx\UHّ  ,-@Txem?a wJa(!a8LM?g WR.\s.?\(و .41)@.B0@C]^H`H8o?/i=i!q KsVsR^(jhpr^|ұ bVľ$! QBc'/<Aѱz6:a|Piz60fLH%6%4yhq~}HgM BӒم=g2}ع/* M ]7"bB0HbA[&4ͻ(eXk~{H"5TFeZ<͋bhF rFL 3U{uQ<ĂW*5Rc0T\:Ȼ}c8}[~^TvMjd}|}u0\͇di7C!Nl~<HX7BLkxDbvٓ7KnڤnW8tZjP{% jUn[mkWqJbAIvS^IhLnH4xl}2(s#{[cDKX鑝"ԉ4!u_ v +ǎ7;[)~U"ws2p]}XrFECxL(J ~' ǧ}JvO(~2f(Z>ŧ 3b7}dr)Gyz3C_f֚o{(sd?@P K.ڙ`U"wF"윊!@vJU!P#a|L"X%q>'o\bH RlKgR3#q11&J$1ے1/<>ԲiI)mW!3O}\շ/5gdg-Y>yء#ޯDދ8s'$MhGpB@иE"3*'<|XYT XӘ#Vt9i=;0W;hBnYAŶ d{xIl!61>P4%#lMCJYL t2xmo-X~oÀb iܢ1pee A)eJ,\/. uG뀔j253[B0YtVM TRW`4!t0x4Ԭrm/|Z-`Dl<?+̛Na>ӹqd}&\Xp3kށ4`ۆ+#wp ]w7݃cP8ӆfH)j.}K87VVVUn(8 I,fhFk2R}5tĉlE*ZFV3p=Ϋ\4Ӽ<Ț ã+n̝:G_wfcРHV*|'jVs?䠑xD k U9DVa5Ir֛͌͟#1N.Z#RͣݭJG|{3  1M'fc6 f:0 Ñrpy`Ûx5IRF*̵*죽V&-x v0EK$nwezs%0g%w>rGtvwƞtu ܀5mhTcShBNh^M9}! *En?/D2"$t ^n;sPqn?(goz?AQA-K dv^IH0L/ryEpHlc*Gܕ47]8jkvǔ:&bNѿ7bXMٚl\܎2+.}xAZ tΡ諄te7ϕ3#Kre.bvlyuɓ@$KjYM?e5?PPheDY1 c$!mZ D8D u<8.Vܥr'pTS.fpMTLbNi`X`zxI ǜ+;QP]D CZ~'<@ft4TtP1*,>,ȀixYީԜ $M1{Q N1/aLM'/pKOȮO3sF'Ml醺XѰ'*Ѓ@vMA t|"3a*T~rBjyUP$&#W# ~ʷX_wso״)nZq; 5C+:v#!2J!*H.b]z̐>cBI1j^Ԃ*84 ˜UcyfT. .4$6hR/}U.AdgqD{lP Lh6ad`&1D:t9]0=`]dU t` S+PAFwPX4e"[Rձ—{|r7s7s7ik 7`۰&N0+|Fbl"Q`G@yKnc0(a:xQrHc\0]F°y gD*;<9?gnnQW /+J4@jMM&1{a` ѢoW]#C4@OnV:tEzg'^U|@ӏ!qT;Q\I>(Pb %"a@*lt30 k=*qȍ (Eflᕧ5u*Ѡ):^KPIvI:g -"E,D!$~,%PV8T_݇"v}ݏY;$2Zjۋ bnP%d L#Jkҍ-Rr/@ؚ'n4߼/nXr`SFzgPYuPƹm\eJN;[g<Tkϔ54lwcK6@kiÏpS4r#qؼjw&>) iAg]e`l>4-D-gܙy#NfEøq?Dak0uM}}8 ݋?}+0dDe-v2"Rj)׷X?}hoaW|[}Юw:Q-k#]0TsVD]`tFӧU/֫ÏŻj_6h@%2.Ͻ+*xoa zFۊǗhvf0rv͒f͢RsV洍61M*VjV־Q$-Hs"U(',)٠p0Dj u%1J]vCcJS佢xYT`p. f2.ZȤwU(hA}'8Nb|"Ӭw5D8Ɲ1fbiwįCtϱo Af9[)EN,5$\sl^ܨsO|X-=[c'xP$k-%:8aCO ͸dCLR f(S✂O>7m46қ dmA;l H6G58?)K$)ߎCRbNhgړNH`Fe4lw K%h^Q$##vie3#'x^Xq?.-'r+r+3ANT-ke5$[kkCrЮD5x=Wݦ8MŎ5AHxcdo7H a`0H3j}jxDX*¤l:fV [ qЮ)xIdV9#jHEInXY".BX ?"dSn#jRmЭP7x˧ nkLl.2A7Θ5AwZϜ壁d흐A$IE@A0t dOCADFCd V2lVDk{`{':pEvTN7[[d 'Vw<6y zѭ|KcQl^xkA2tSBUOԴ·%r9zVeI\Mn !G4a }{CeNkDiBm1;8{ pʊ*_ IW ]f%gW}(uJ{$s1B7J!{ ib] ESKJ*VJ{ӓev#ͅkab:`:ZIt-`' EDۨǎbW͖C3c;[RDgj85%Iſi,SFi㡍$lY%J[INIcS̒BIXSǒZ| R+Y&=A cCÖ݌F텠NmWP 0񑼜,+O$NzœѰ.cT)Aiw Ƒe@+i6Sa{M2l8tآ$dD*b0n6V9 v)N:=~7jQc nbqpdH3>R0*l"(W ‡ KjLyɶ8{eU o@6V7G/?B[mkI6=B'b%A|w0))#Qp\ߡZ(iv𕽲]:TfeªXO5K/DGݨDZMu T'r> *s"1G=9 ]@DٴH[~5wW9y܇9*lFvŽ={8TG TH"Z9{+S938f &1o^m 3l LN$p+g)㫨`S F]SFH\\p9'Ёz/8J4o '0cQ@^Y0Q9=e`IV&1Fהh4_9,q^|EX7Fi\< E {*FqS$ˆA4E=AEsGqe@1E.CeY> S6mSNn? ԝL8c9-X*FƮۦXl*.XվX^2D4+YuF.BNW!ɏ>^|\c*SIdT{zQW J膁obW.,ݖ_[Af6%%ٍIP0^&6S?::7oV eF+Nl9+f(CIcb"Ổ 4(ltX|_;"J OHZK% PZi%URTÝ6óSA<0؆ꗑۄ_m>7y>/WVRn=>wn߹wn߹۴(13G8'?X N?렜2+Fst|BB( _HO+Fhʲ)b51.bX) 5)E xzzA/QWS.[6ˈ.}T\]4m]X랃f&ߩҾ^UjU&WYU^.-[A6w#ܛ &j{v4'?:ۉӗ!̪!eצ?: χ=]Ւ]լD#$ZmdK6m{Ѿl>TW ws1R_e٩OV?MIֆnۨ՝M j1c,"6a`Q~X^4nt:`*y<:x?pG3͏j֩)2'-&{5V9$=[4arIϩY[|YҬK^%< O" CYG0tא6oK*1Af,ygw>c{W-}BD5_qZ41șKL=݁b&:V'-\}k2uHnXſFV׉<\"/N\꙳Gm&v]{c.h":{`h4(XNs3_S&'7ʢ,"4+2gmGF3Te}GZ$x5Ѡi7SIOpc,({ap.'KMƒbw*$0t4]Q9O1Up"yw4x(}!FБC`u,0+r rfv~A agj^[dHRA)Odep=TQwp2;H} F*&^ ob+kꚌ&2MMdnf洿 [땪9*N@?7MF~4uc'"NhفY8)Eד,O Weȶd=wN1z`VDIALr'FjU"e̅Yab~:TDWbtX!.8$_*hE2a-j<f N@x2wAS .ZW$h W6#h~cN֍ΐė7);`ZZ{oaĒVԨwOB`p%- Ɍ5n3pnXHu&w.} cSBzc7)|X$u@D-BX r0ɔF Fu/_b\=pogÞd# rs[b:2!7x]!Ř +X VgqPrG7X 8q+*@S,PV,\ۈ w`E*' y^,sKؑTI!?s6LTu mXˀ_ihcYQt4J#b T4E7gTP>Ț+q&dJOɕS7N@Oo5d]:wtZy Ti4oO!+aаKNxA]$ XK 6b$84 #ʨJ4HL@{qPF'̸CHG@Il8Z-Zgo^3|_&sfY:2O8uP,SJܦ8Vg`D m'0›dPݴ$HpBoD)hr5Ij&OnIZ+F񲦨F0.vhp GG_4+R*% q2|svli+x, t{Zj6E?W0X6oְ=pD|t8A&; 7Nw7nLcɐI!I<A&G問zË0H63MbRN1HsbXktISgk4pnI]x>d%rb eQE {0[YSփzH lf6> ȱGAZHqvA]M7"T;܆īW/8iFIL(|uփhعH/ -f" ]]иmS+QQY -6h),FsFE`,,  ytfA=ӝ#j^aEhQt٠GؼjwZ5 ,0P ,Qk蒢i)QѷDruxR[N8W>G)"- Y<-`8IѶ­.qF&Bm"n_^$!B/zYО}+-R)mAd0ѬXNC>b .qo5 @x ;穉qglH~U>P+%OKb408y8E>_$A8U13h} $^rȸ|SހgKnrUnŞ +Oo 1wpc!͸- kp{6a%{0.y13E H_B}##%` W:x~R8rȱ)0X%nESZٍQiHt]5ZP(o$N"#"x<})(߅oγbF cf^{MBNG>M_K<&<`(i߸R[mX]\Zvsi_OAmI\߆!obbfIBJ.o<$7E/21_BY u1V*{{,t  ?ر1 cྋG,rCPx &T%xQkY {݃SڢU/_G; d&Y퇢yW\E$`!5?a4>&?U~m՞AgVXAcvE0 (?!1]`c 87 /1?h;~w+?--%-{|r#?r#?r#ϘI:|}^xC,S.ʤLfJ6)>Su%&(0| FeCLF8V*vW nW* -rKs(UQH0)=;Paܡɻ /;lFA}Zee|?c2ܥRhBl]@hp&t7FSn_n6Щ+7 RI5o8^tG#6f(SV*OU!H4oEdy%AӶb̩FZ$e H]C.HgqZr^#-! 8FN%`*!11l~Ba#_A֙PU1ѩ ^d+b1)֡v+l2G()&TCCWY߅?i?PTaPTBaou^SO 鷙mCt&~\FdO >@5)ڭ/ UNNZrF7 T(M(;u)Ѱ_zFȒ)Q+0YP`꽐A-( dlZ1ꈦNnN7!YdWZ%4|M< P ՊBײK D4V(2 vONß[$iLi1wYnlvjědUO$,aPW x}4 a2SceVlu004{r*Q|Oʾ}݅a[\=9ISIP*Ki ;imݮWxm,Ou-hǸӋd*|xQSWOJI8|h̫AKC { _QtH*7HoG:α4W(p, l(,o o37G/I[A@EúH.X@p?% 2윲,nc}ݢӜhTŵTv:JMN["vi0U幒0xia#}c9lzvK@bV?f-VN (&pv.^7E5}#mBZB߮AxBCVG2}0E4cfŻ IMj3o,O3EpgF ?\#FDpCq9mMb.Ѧl>ZYi&O6~7Oćg3|1>43ŸsH_0̬Y_5_1sL 12@s% eu0%y`ٰ[&+G?Qu+,$'!zLT^) lY_lh vH3 JԐ7RtvGJuZt=\'$&օUqk '!4o?䟋ٸ,ƃaqИoY4~tjT4C3N KtJ0^Yxƴ5v()0ޫ"yݴ5d,ÿϟR<1 MBz23pw1^ FrAk ?_OM*=V|^X6.%U\(+)y.WL#bS/lr&9{C`ԝZ0kp3=`<5?\̚'߰8 xJW/O%"}96ww(ʲ\zp̢z3j0p؃}3w`CF0PB{,ըٱc.RLX\NNnIw1=!^etE+n#q~(6|M(n>Ż%^mwK IJi@UDZ(xsu\9!CyrLGѧqݰ- `.!u n2'ƦđX_J jJ63քڤk_ҤƗI/7nɸ]s^6𝎸, fRfqEX5ˎ1!PYq`MP@>\G6/TXO g{'"A,,=5mܪLaxS7JE&eDSъn~Swl74;<<3k2xaS@u}*8ٟc*K=+jݥ DL#1i7`M)a4P5׈(֗SH{he6x!q@4 MC峥4Gk!Ֆ$=GGZS۽&+^AfK|Ir]ZRȔ$hIxImCe!S2]btD9ǨkrE ul_m ۆi] OŕR%2>xLei)zŦHVމX1ktaD^RÆ;h c@:F n!aspG)ݬ1Q {20iBfG?'RsNxh2)r W 4gB5$"Ԏh{ÌWv;lB[4ݠ;!xw k0Q$ Q:f&%?$vxdbDݼ@.LW&5/@L 5S`+Nk A66$gd"4W3 08%<==l[$*$mMI̓zLhdKa="P]V.qyl.7&-$0,  m8i˾8Ic#PNJq(4y1>;s^`4&Y2Y3{I4V܉ `C0 =ɓ#1!CaQ:KQ_xyB_nfkK]Pff4,3l3d,*a2< y1&Z dgzVH2p8d_ %lBnDH3i%f$奓M2K\Us:PZ2ςg>‘#S&j.k5WrvNݝɯ'kj0SJAp>r8f?(&Jl 5) T`|3l'xbJa? qQqĖ¬W)XH! U`! dMjoj]3*('_AֽՔ#I?NkIͫ<|ZY&V>&mi+'d 5&h딟ף|2ߵ4sDpu߳BWt\6Հ?YjQHZ븾q`A"ˮ0́T&î#"t _ \N$NLm*>>#} C}I{xYE)_BJiha8 }?0# ayueOM]Uv8N2$omv<):x S/.1z;Q50eb%*m6"Ht|3| _" EW0VIm+=.W_0n&I\X^UZg;q)٦Pl ܻQ907xb*\0e:T`8X8}?r hȸ0>usKUv~h6>1KKSe0owEvtlY+ͺT_ӪJg:rB',jV #NX܆\ j !8X%D&Rڃj=Մ\?Ŷk/V{{jܻ&9Fׂ X q1ȌQ֣ ~lqA+l : ,0C= aK5yM*7Y6E^":{1QҖHJ>N5 dsPN:ɗl@Ԝ ިN5T"Յ/fhG,%|$plN-#ˤqfB`[-m6T _-P?oZb۴/`c{"M QpuZda XǃtC0<: f4 Z!)'41I/zO\ -hsA7ۙ' }ԙJ|\j4'{QyxvpjPsvdꦮ/16@ss୯RA9Xy՜*IiFG\ŝ(ja;D~]8rY8: 7J&&ͫz/ 54 e2MWg,5GFSuzU,qD"!Cᶟ`Ģм !;1t :lV+dQe۷iJU(LF2&v(.߸4>CD{XG LzZ8 Y4E6@fQ l|=bKw*)By<?yp&}4Ot>"nx\}%p{KN/A 6v0i s؍6[xU5͍#vuׅhVQh3|qKjꮻcV= qlGMHDjS%+/'zi{mяϿϣ ߿o;%[G]]dPy#r~%anFJqJ".j)V9i]P(V,~'~"cVTp׉JLu5']LEboF3\[oF5<~tP_ƃo3f /t0W]D 0iDZ6 "RR,Ej0ޘ!eA?' i=s[5[ !.ΔrrS'&u1SM 0)%bj׬}=' 9qA**+i\pκq*}0C):qb6-K z\HJ1(dIQ\r/DXf*p>TS aD%{&\;T:bC:j@\[2N _aA0@g4Pg+]xr -9] ofapo0ytO?wָE*Z HRW6i9n}>Rj2qf(a2}\w9{{>%_o|Cȶ"/քq>qsojy~E>g@9"| _bOp[z7y#*>->ʍIڍ*j7n`tƁt6A1OzeGuyaAMӯUt<9~h9>c8>#)8>~#7~v#)7>n飨6>f(6`+S\'ǻG!V{H[|řrQ~u>KNc߻h_[ǻpl?CemYg~]T;zl?Nώ7ꌪ&[ fEsbP{azNg- \;mB/B4j.4D&TK3gG >= `]=-( H?먈,GmLnɲ1R!})=8'ƻiKxfwLu4En; h5S^s-e{1.6~M3dLѼêE8-pswy5kvq!hEx\ 7uYهI0 f>nʚ >!@"]x./܎l"Bqݾ瑍f MB*E9,oSӋ z0[xf\\l,>}GD_'¸EWb/r/r/eLzy~r\zهq?}uDd=>C8$fUqQ@SAM7'-@h[1s\Јn ':,!Oi83+2c;"_8} x6`.G!cH:I!81 1'Cuʲ4*b ۶^"B,_v*|pO\F)%}ˣG4z+*9+!B^/S˅xX4Ur]o13;_;O%w/ي*GϷG1g(K(Xj"Lu~qxqIJZa| lL<`lbBRXPt$6i?'O?'O?'?kx0