#!/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=db7a40933668b62a1ad89f750d74af19 # 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 uWUlk8ju<~;vyEDʷje-v}:nt:'/eu%{sN.q[}3f[/:'7x1?nE**kAßbh #a`3,⠑[6ʈ'ț9@c ьӓ8=RG/^0:$ތh՘qҋcUz. '?~ n, \' @Ӗ<>%{^`Mp4 ] abxE4!BXތ|&Km2Dg1ja40k`*,ᆳ,G#[:1<i`P! 8F䁳ٖ ĐHHlѐ@mxZ1gRY`9 KpDPVĊ`yЄҰ58>Deshɞ\~OBgbAׄߋߓeϏfŵ3#tz̕r%|~?j>oq?@#B_;O[\O}9}zl؊S[\ϙ5]ތ 7xt*~8סVޮw}Peo `}Wb~=yVR̨ԩ;Ie̛.Xͺ\t& O>r߯h,5z 2 ? D3zCr#B\56w:5t(N5fXRIt;]A= W\@H gT\6kXNu@Wڅх1h1NZtM]u<~SIa8ZbПs';1Ezğ`5 h;:Kaax~tT`NTšP5J"%yBԅSgrq+NK `e޵N%g j2YwJG2BKer-1pcV1/{ +4,σxqZHuN*˵{+'Oi~'& N-aiiwx5 =} z;/[d-§G%TL?2/- -w#1мqak?h`ݧJA.# *0sT†pW.oicR'IR*ܕr쀎A& &?̢yܳL$PMlf?XL@D"$(+UiɆF*u7- -n x8@'Pé9Ow!g%aËحqbSLC0 Wc ucZcـ K: s6&m WJ*#'R4l mD08^cQBױ- [+]U_j! FWcNw]\VIr2m_9>FU'R~’RɆ8IAZPҭ~mؒ Cc-at*a9֫IxN 8&@$#a4"[VkaۉB2P@AOq?qw#y+cO͐9ڞ5ĸrR=$FHgW^n[5IXg89Pt cK[H$S|E^-} ؊Q0Z:hÏ F!%*5 ő9 nָi[a\U# u!P-L#q~;n4˴n*4;h;2K |.]y+[`J$(C#KدZ=rmnCN;\4ӬNj(\,TEfϐ0Kw.`RMy`[qZ>'ڇD|eMwO@WN6gnT:ט(Y|S 089>*k ;bّmI'D7LqU$Jʝ&-lunwtehʝoNGhzf~ޅ*TJ "{R.>d$VÕµ!+]B|S)U&*b)4ʅ LڞZ6o |Nnٻ=zEZHƿw\:%sT>IxǧʳYȜE@O@K MhνȨA` F|{zT&S}9}z G[}70ެ;ur2ɪ٣ 빮cS,[.%Lޕ]iUUz/^LʹRQa'ۭa3> ܙ Aimi&tZOgcf4b-SܻYsҵTz]+͟~jl/~2 ỏ[go/5򰌳j{JX( lBQZQلT1ۉf>=iN>}Qg6Ih 3mpܤy(h^ Xosb+L~ Xke-wf0a#^=̿epCP &QKw Tf .u(W7vOT"|3L\,>lDxׄ^ l -ߏGLxi/OUvY.kܔ/X $-MReMP^m=L[ :=^~ ΅Cu5U؜b8 V INtlxRvoeC:j=>tbؽfǤ=9p`%W_ZRՍ6kJ83N?ёWjIi 8559-1 w&O4:32t>,6[u0%fZ*Alհ7e'GۦLpl,%Wh)N D؝ʰq%^gs,?%t^,\IʗZV*G`Rq/0 Z#BSٶImX;ɕ\6,`#'/WV{GF;0{4 'o\hstFmOt̴#< K`Bb |,[:*ހӬCe)|dž*N+^, &8֍O&_(͢UDj)JiKEĜu#d ƟMbm-Psc(]W5ͯ8Оx*O(pGt /_,EO=GN)]mlTW]--IכÈl:_:w@ L(nM$w1 ߓvGDS4[ 1 ϹC*0q bv{XOy(5k]j:5>&j.잒;gZu ԓݵlWpFrBObKX %ʗ V w`EQGBCF]lI~c.oð ܙݲ$PٗrS_OjE`Ѧ}CDu:}=dФex>9,K;{&)@b#bvmzzy4>u56ߵ+$btAtNP޵[S0gPTE逸9=T2s- >z>i f x&үe ݵ p G'cXŦ#nEW+LYCLj˗Hf>w"Qz`,H|QAK&>dIm_~CO2N-ahWv)ًv;MkCYu8svnI|`ꎳ.G$'ۧ 8wOHF?(+@Gˎy ͎NK ;YN^҂hK۷W/b]ʾ!z#G4uY[%;97QxYš{Z :DZ݁|_y΍7騪|> ;&|Mf5Qh8)$\UsW̓+"Q+\=-)Ɛ$ȍ9FQ;'O^O~n#v?fgW;K s!kG%ݐYW>)~Aq>_b}xkfI-FDoexc gbjӋk(+lM|]KbG29*fu'-f525_;sSx:gȔCKiqV~k,1Ϧ`Wm s_ָ7@Wt:/l4<͂ oFTN?lyA3ֲBQR-yW?%0kĈ3fdG0s6A:a? )Qtmbz8c2-bZ*d!1QјI2?I٭~A=KoalVNq9_qx-+ ̩+XO}ahDT^}=v/?3>"ǘ巟o 66B4kle.%ol.9f, %C(JJ7:`x CZ-exk΅^Jm6]v@/{yΠIۤU{r"#A:rg,| {maZNAR#=_VZ^&20L11}h|]UиR9'b,̥J=d;A3E)5)ؿT)btװ6vUһA12-'=G6lQl<q@/k$Pha=[!`fRO.yfûqVVwQ2Vx:r\nurkb[:[Y >'8É,BO0_ HRM<儐>b_JY%t0촇4` *e AFUޱZ-ŗDN@8j HZȅ j K7iSIAӇ.Y۟{MDWx|F_oMe%khC?V[vLzu町Qj,?9J;wWЄd7L-R5Qק f-/ObtWHDI9ɽHC({E>$zQ4 hckNi%)n+sIvf9&YQfc,5YHmaK.һ]C֡ED_ZKC]`Ћ8 {2# `G]0jʝ(wY>ԥAynߧ}c4*Mo/B'cX1G+Osa廵7m2|eDffO:?'__[]yz5>>_[?WV2}uҕwQm(gO%I|Ƚ|01 "v8*qzÁsLh|ԭn1A^t!v>8o-4n~(h5XACE&&鵭y2]RI)82R ]wxĻ5NQ ?@_L_0rmag2ox S&`&X2ˡn}9֠-OIUo9Kk`sL`|qfpqP7zP_i,UJ[DI~^\A5$,;8M Y|^Qm._AY"uˀCj7`05PMLKؼY/@N",WGvK(RR?ثaU(g0; U^wLJwww? }^l)zzD@#WSy2qp58,,GTinNQ]RcT֕S9I6zmG!d%67lc}NX(xܙytI|JPupq )o&O Eq'$bh׻K/o>e68A~}n\-=.,jg1ͿL)m¸j.X~*dR0.^\\LC4>tT $dWǥ [)< n3*[&_Ҍ$ȷhs`p0\w!=[ aq|RxnҿRE&'Tu,+no:-]7*k:1 " Bl!qZ Mca>d ΪL]~r0䓦i o:pa9@@(zaZSdy6vHMc@S/)eS61@T rWI)L*uU/e.T)oʆS"2/ff1svs}Jc1yX}~@RӠ˰`^c?8 1k5"=(SoIμCwzxڜ) C0?+'ǺW>I3σ[e4nYq_55y3t/E!FydVahm[48 \CCCCSt[) 3 "4w{1|>gxK &?9F.p} (BRlnezA bJHZR)~nI]s|Acқcu\;/X{8d5{K6u8bR9\f!I8/*2`79log EfCH(i#=TU>lh+L\۽-~+62>>m&zE,QxNO?_"ONAAȊ8׉l0ֳXh"ݺvnжA=Cbo&;Hp5Z{b܏&q9D),'M,Ƴ $y˙ŇS)YN6mωTT'S[A'>Jq=56Uti_ H]eP E>~T=pEXe#4%әg-jJy-si#I0b>0uwmuoA5_v|cL4_<'@hhm,^YDQ_u6 a\7o]h[JNP}i4INcB R"hسyI@E4? mL^yCw" S<ߗto^5>wY}Z6ϽWkQ#VImZXI zPB. 8\F)j1@'SU+l 0!qT{CQT]4h;{U8ۆ% i2S͔,g"c䃆B5*Wy1p/OVՄ љ byxq6b ma!)}8|9x_L^ʼnReF=*ymKbQOfz$LTI-;̹5 -[M^LAS<1JɫWQ/xgW>N8[kp+~,z˚rd|FrWzH9咩 ~W}+~!f ]vjI"{#*Wݖ%7=$ǥJkUqW~~y%'eu )햖ZoGұRIWgǿ߷,\?L6[2v(ٳ=HI;V+D9HItt}:*ߏv,s٣Sv )1Q8(ODLf)?oXL{ђ%HM;=lP'yz)fZO7^U^^wGVT.ͱGd|YU@s*'w%S8+eGt䉸 ӀJٝ+$dEDĸxLA9ÿcvDcu2*OHPXEjE1]Vݐ,;n?!{<@Qr(ma꣝7͋B"QW5Kɵ\ަt1fx$#d=&z E|SH%lyvr,M)/t#x=c:u%YU Yl~R^Y&kG܏xNڈbbW+tin)ў-LO9{ERɣXt]k E1aa>Q_ W%l7#X Fg%վ۽Yz .16UB!R3*X0IDӾt%f"eff@qmdL}{+9)| pKnz[&E3;ctt)ל yV3>f883;%K.A%ƿ uWn#k=hFPKKϪ+ȏގ|V?x8;?"o/;uv֛BҺ{-,d3gx[),6ߨIf1|y.s]c.kg&{zUv[!gfpx2 .`wx5@]+ڥ؎`=WˊN;|+v9m/{1'niuº5Ze%=Z٪ū 6O}}DåжPq5޲0߮- $Y N/ e8nޤT 2 7Ψh:0nיpPi2 cL0Ƿv]W2WlY~}D_Oрߤ]$ɀYSKV)\pl97MώMB/6]Tq _.?ly8[,<]^Y/dgO_3[vr v>"e鳲T}DvTԁh{(?sdUҏ&lO}8j?_:xoW0B>@r\`Us\~^&Lqn3WRS 2w U OgmoX\؋%1ϵe9xi3eE:k/h6F5G|IYľ8s9g݂Csqamt2nL%gq(s0Gm tfRB̫K4y>G+"Hjoel#r| bg^?JB?8J:6{tuf#0E+Jzjh/Xeb)#:fcfetVϜ_4pGO6W< J8w[8j*s yK%Jdb%PiɨBah`mڲc/ʻT!ND2fHAoX !&ܳ|W.ϡOiX Ii Agt] v8v<#`Hz̎8=4'-\ga.BC!N ˅_Zw/(8s[ii?M`턨K\'M<9iNBn '6z:36>ӣyZtS] ĭ8}?g$ݬAm8P8s<;|?w'P$11؅WRq-K4*YX {×rv*dF|xu=18zŹ7^KPI̳obC;!ݰ&xΩ˷AS9>öWj[\ed^}܍81>9kW[&4֙fu hqӜN0sYD4Ȓǃ&1Jo `7c`Ȝr#9ğчPWi*:M>KKZdǎu!($!Fp XXrSu 䙲뛉 E; 'Xqoȕ{z-`g}-6臆*zq4qQ呢 8d{bA>Hj51=һF~W$1ĩWiڃ$IS]± $'!V 907<tsCT#x>gQ3)t[Y?tL4,Ab;E13DLf.;J\[)wWϠ`fIC-I(+P/W kᡌD8(oH MLzIA鏫z QJ Z`n\ W[5&H\?@rTI "c*@U{El$$/v6d8A|)W 'DcEf6_9zj@1Q/\$p;5RBu(f!'4px1^0NKDVU-{_ 8qvК wԋeڰo_5V>%~:Z|Q:idXHsaI֙lJ,0D둅qiAɹmVKظURɥ$J|F6"yp<[a% 5t`N%o"mGmPmꨛxN.䳢:0jhM{̥hw6Ω%PՊ6K.%QQdj+/zmy@/m| D' \; p} DcrL/8[zFE GJZjBpThs&>Sl11(gP0y) 'xSbFYu?Ǐ*ق$lYG? 7oYX ;,Ѕ/K5`"CYT*[YzltS hN!8Zj5c[.H)bM5I < AtP{茽6a{ ZVCރP#9%<~.= hE/\q7\{,;wԹV"mjkHs ؛.Tz7~ yZc}9Em=?l͌In\r) P.|ijĴR:6>c<  dxLqh=_R, 3BWxЋ89*tOǐ ܮG&b<]5=56Ck%BY51(7,EYeGb_qs%pCʓz8Xh-%!Esxmh I( -qmWG`2cpoYX~tyn u{7- 7ӷ\NIt#眸 x6j:*@d կwmdsVA,L!0LG1Uy91Je42?,mZYh9K++p Qtx&u ضp:)n _|gJc\'iP@'OMCa?CcogX/ٯiYEd9-[X@u)8"@c).ZO%6vqt\^'# N]H'¼/3ӭtKaBB1YnLwli#)|wz"HN`:]{Hp{uR^4`z*T6b`W "9v~!űR%Gc::,If,3VVKx5%ƛ8}\4OW$D&<9edQJ>Th:bpˢkշm4$SR_›`VOLcz4kMD~j^ֹIYxE%x<, f2OwEVxEƝ-vPژQx66_ kn OIoZWn3EKn#(C:]t,fLX CEmtTc3<&= a&@Æ#<3Q0=O.d {kȗGi^3ϰndrkl9N ~D䆉Φ&'->8V])ݛ\"e,~6lK6SD`IѯMqٹEc&әTGv`o4Uc?|9At\юDG;џ6rVBSK¢&tvI 7dNk 7vvZo8LM 3W )gTc*f4aCb@GĘWIiď,;s*syw:}\fe7V;5k2lݝcwۡE{F8`AAtmڥpL.N1S%Y;&$6/On5sL㻗y &{QgEsro{?gw}}ucݸ~6׼dyϻ+n >0 p~oЛF(:u?87EbwND=;t8&cN;$& ̋cRghur>rxֵ1 "~hhnxY.x).3(QK#y[J$ќb|TY$!NwzfN&'q R,eh76nغLfA}y rϲjQDO( _oh_r~n2^kH$M\ 1Iq}7Bϝ'6՚V+WP *bufㅋ@$[ѵw6;N~|@u2>=Ce$Rvca}8h L\ uEtT\DXNÈ/Elкzjbu2ovcTX8ٓc'NL>ml@Ћ\גޥ?7f7H)09( +Zejـˣ#A:!+|2{hd@ј>\+]r!?4o&8d;ǭ`ڎ5dZ 89:9Tk䑧T[ QɃF~c)M`,$ 2y~ 52y1Ďlx ɓy^<<U/u^?d^gjJ<'6_j SCaDO`틩/8[mۺLQˀf-nC|lX:LaWinИ9ĊZ~dSb|9;D qps8r #61K‰0B0GʠwbmmWᮍlԹä鲢N&K9(Bo/̉'>@"|hDNUt&t;V^vlJEˢ , k'_s-ސn]Hf&e*I~XY6 )G\2̀\ ɔ8E( ~SιxSb0v\ػa\t&#݀k:hJJ},hDx'UPVҝIlp HvS`>(_п cumKxN"qZ;|usEm[f85I/]XʙH&SEvĀ_9BnBfpr D&۸ru!~@ oC @5Ua*/`j3()}QTAE' j?%r% HY R$e6C=21.Ȋ+~ĕwrE D^'I4[6uÌR-zU q${C ±N#BjcU@*1gψD +.—Vl(t0횫 ݌BJ܋#S7HI!wnCBM2&&s'2i75vN?UZշ,96a\LR׀B&Bb/;$\lZps<2?/RdټLmdp{fkmTK|Y<|3*O#qƣN~K(1g k=m*ޣmI{y4.s0nݥ 2s7rv>8Y u5kM` DC}] I UvzxT@9TT 2RIw e-!q|Va*m5GA!;SeD]Yϧޛs|Xdɒ{;+"^\€z)q--jn.\Tqr)+P`Qyz 燄[Fr')Мg n̽kzdlKs&ok! h`34~ Dx:ۚq81/ Sҩ 2{n簒[W(keyM@ zζ]CgDCN@1'=ӗ `(Bb:p^(Tu$[s<  St&(J4T*Z7:BFǚ+DYHoL$87CcԓQphی JֵK< hv@{ t%<2^$C=X,a م'i[qN")$z:e Ig(sk wΛ &zx^'~.\Q؏I?ƴm]fX4S͠)4nQ٪?7dz'ʌNDRƢY?\[Mr$l2t/9f@=5y\waV~;cyr|</‰{M /`T_ϰx\#<̳S6%sUIL~sp՜9Q8Y*.]U%X#sj)W3pW˟tyAR|Ym!5^|ݖd<Žmt'%, DBGXh%g:Ѥ\'yYD>yD/'R2}`:lHB1Z\$e%GȓKrv;6~D3u5T; L=ʒM;Oc>ϱ8ѲZM{F'nXTܗnZy_1z7oI;9=n5S,; #Ip)\ 攊?O6}avvJIeyg$2‚XwqT=cíh`>1]Hoeua<N6ICMsǖ/&au0@N!rkmT'j^Q f]m h׫o I"^. Yj& >Â?LfwWKbMRQg/*3TD8Q/H.W*lyCl#ʘʫP{A=W'55f(pV(4J +,GIԽh  M:,U#i̭VV2@']z׷"U9W8clcMzxp>q葸*4W}`ƉHH"ㅟGN$3OQAӇ^xWL{׭IVKI@,^֎ߴ[?YIa)ՋjJT2ڗdJnL;!1j CóI/zAaȌ%g:|9r~:ds848ϣ cAAge5ĤQ@ ؁sߐ9Nik/7N>U౺@0FzۙE-?H-qJDB[+Lm6_@{5vxt/~N]*Xl=_1y4Йi4ELiS?ZQf#>~ە:>LLΰdF|iA7:&'USya'̉4$Y`;|yܤA@~e*Rf9I;fO%o´Z6`HSwo9,yo!9s5 7Ehev삸D|37A! (V7?_sFocuk|6tЛm< /`; l>2 ϗN'3Lˀg~q` q ֕7XW1UT=Tg_a@"yIu0 =~O 561oʹ~8vLuL@3B=/L:0wFzMS䒗AoҦm~S|:}L2m /XG,1򃝿`ʒʰ#6-a;/ҫ~LaZlɈBtƓ"jXTT?<Oi`b4 :?ɇl^b>y,# 91`),N>fS#?'PÈGbH '9PD Uyεvf4+}Vu ^n,ģP,Ǧyc<^3uS0UkYf+%-ߴlX;u^{ЙNٻ:1UzWm"LJˍ[Q51SA ړLZ!դS}ʫROqG0t.M@#Q`i,b]vZ}bDh8doޙRjˀiHE/ k3 `'=᬴~Uќ7!],a!6y'{7xlPӜ+ܽ6X:Rtӭ7_Pث︹ >ȗd::tr쮍=%r>wD$D#']EZ+40S v> , {AMǢ£G|.b1a0G^MmC|,D238ld(0JGACzv&1.ЋY8RFH qcQ_1w꣋[ ' RN&Xà. ѐehM"H@eJ{prCnD9ԙ-'--:h̆$l]sPj['<$)Eg9kJEÒ|\ !IJ|?vV>YKCB\&/A=9~p-9KHP3|ɣ|$VDV$Gi0A{gKb1 .Brj4NV1;~lȆ=Am0rrVFEψ;j^F5Ë>aX#f(10UFk1 M|B}Ն?/QG 6:CK(txLVQDAhe'nx6%>)^O8f/E?iS8ԈX4䶰[$\UjsUxzz ~i`3K :e |SЇ>G'p@b&R@nqYDL;zk+,I ]l,YV\8|,-)ڭvsgY=jýhH[ڽa7NDe=-[X pE2X}T8E<^O ;ko{]&hbuj7tń,"D)mCh6,EdVмCG&n' *unv M 'R'vB4/MWG8l7u:<A\1\{w? -JO/V l.`T~ i&>w>ysjث) /!0@"G~3? t0$xUZׄtI1 zژsK-l'Xlgj+YŤa?cF^srJ,MT)~,cvcu~9g'?4hq)h7rHan!L\תN>@%5ܨKLjL+AOMQȉm72i!1gD&J8Hp$Oƅi|Xv@ ݻ.J`"x^!ask69篛2T QSuȨyIUz?D49+9VK|gC*Q4]~CtI=#mw,gY*V䛤"",7WC*iwߠfm. bӲiL>ƅ BLC+ \oiŽ4R{ ߩ%QGlq|ƒwF% jW;0!Ʒ ݍ ^ ǘMYA:b w]F^"0:,yNѝ*dNOGp d dW %u ݅64. ę4|>3:A!5vޠoSV?=0A3{B1R6Nth'=%7.>~s}N/ݦY]d/4^Q̳3}n-;_t4Q-uWTf7]-P[ d0}*-_cB&TEӳse]e;]+B9 WUCcr`4$}+@u̅pď< |0V}؜4W7v+p{V@E &Z`3&gI^Fr6}f3ǺLr5gR,t-e+T <6IDjUQق}IgD⸳kH]d$7lP3f)R\ꆛ 2ZBe1dn3]/(6U3;>`A851mNQJ]Mg>pn/ R=T-ľݬC<n LRFr6T:|I翰_II|abtbs I^4TVHgqeeNH2$2)~,zSb7O|܋]A1iM#m(`6Lh/WW e=xg)pwTp9x@y^9OS6WLCKkϠE4E,Yvi6/3jgKZ]ݽ8+ Bk%iḪ_J ʈ>q6U3E|MȞ"%?)_OG]P2]/^HdқƫfehfA8#C8uZ߽+ [O}L>ÀȚN?6?Gm^beCOW63}axS"7M&|fr䞳rKR() kg O!>l&щQǝi}3,gӣ1S($epNErVViHn9+EWBj"˕Wj~*zq ϶E 1o52mSTPwVR(JTy"u-}Y-C~ΤP;;.,G0*?:<ұ,=H3B7QŨKqc 5|W~1;z0+{:^*Tl+U$;)GSAh>V/pl˔,AXѭ׃ Hg4*:*W + } yG*L2M *.GH8Kr)̚S|)`0e,QF[ܫF=WCNDd9 &)/zH_ן>M㿮?}z5>xkW*h6% Z2'=]b*0uǽ z1bQMUă% o:az:!"#ţb)S?]rj Rt O62IH+ߌUaaam5cظ)N[(Z-17ub6w~^6ZR*=Yx8Iӷ %=E@__p1QQ0'=I1N.cĖ,!"s- AX솒{= Y]v*և{|UO-4iCp_?Pp6G}dlaߤNQgԽ(m%Qh`oR-#fL2Nf7;I\31ae"(ӒfhS2[e2כݏ&灺>T8)3qx5 JLtx6<݈qX:uJRL0ꬥBKVqh;W]F;o?xkZ4sqbם}6?Ïj xf@YM_[嵧+d^;Y7KN.G 6l) yƀucvPPE-TWi ~<^p"<k}}>7+o+߾盻\]-rZn֬ʥB!:[epF^ ʵzHQvHI~HQc(] W;#,Hxb|jJ8qidw Gd9"ዺ8)eeᗸQk c{=_y.,L>[]uTkoڭnBִF3 dɭN5*l',/ #3{G &f0B;Se._5^k/Icm]/M`ىk;>puhCj g@vfnjq `I+Xƫ֪̓+(8?ѥԸQU"@;gd{ֶF%KEҢֿ)J:Bな|pW/wy7$UT;:tΌXUW;.NҧS{^W+HǸCHw7%sܤ[_[OOef8ŝ2ZUFXQ~4>X,>:8>Z$5h/te:w ,"7U5_R'/)(^ bbٿTwP簶#t.#1m5qc%**~׭7vSowkh2]11#L.;Ac٪n-^b֣Ap>R [fw*J?]G|<肫ɗi.{|?G/~ C*n%Yeug+.pCt:p ϻ0f\(%Jh4%61 裫;_'% jx}>LjU*3>ۋ'ԄR;>;{u04 ElB\:`-z\э7A~t)U$:)"'|cBly^XLv(`D1'E'M1K1&0eP&8ahSVƬIНuCavsrkKÀ  q2ْ5 uAT kU/( ] I}\5BCX]4'Ahp؅BЙA4!4O &B`Z)Ot wwҐTL~t4yvTWN}GYGoZ㪶I8gxXk›HUãz6n*{h7FYV벂 AK6-(:(kګmFgȫFkza>ޭÃfi4%cN&m~K5'eehv  s=-a}pjG? \gP~T;=Sٓ}|T߃ 0tl5Zǭz}pCSݬmlכjIuܬVC0YMf GGLJL Pa~Jqh˅wo'fSЄnYŰm5F_x]߮cowfjG&hpj&Lk?=[.J+UynKaXfCv MUKfvr(\0Y̡Tє¹ P kxP 3!4!|kWpBe<$f|AD654Y- ވתOW5׬5dh]MPϣQh2S"z`~5Zopx%$ifzzQ6cfku!}ԡ7t<͐)1 w_? K())qvB"QWp0$x]̏C~8LFϗ.//gi5- /fB؇|7)Q }]!yzmg^tTwѽ>^me?|̖Wן>+_S AxTJSL[%?YغP. ۡ:%aY ,#!ޝ9Uʡ aね A[ dp))ͦ"ܯzRUB.SUQr7گEdbٖW]#QE3gM+٦%x &2Wf*e>di .V-,l(.KP}i gϖV*|VWuOKy0nFgLlЩ&b=+k'(a]6%_GM6E)۳_ۘYP\&dvMecd@[i'_Sz{͎"q!e֌ N:wG:zSUϪȚ3 [41mE@BҩCȰMP!n:@,2d-UTNpRVtokyA vM7"ɠA.lKS9yb\L5SIU2u ~vr1=`Nx\f X'Te PJp:*6n#xt;t֝RU X-ʳr;ZJfA>%)Ch&J_ /ELSrdp0U9JU3C;K~g)2y6uNw:F*4^UMXS܁Y % )e1- VSU G}a Af&dl 9N(AE5S aH$Rb5}s=lS3gnߕ4 mk/zEc0UǴ͎A?dsD@0Vgh:R+B!ca1i7aTcM=3&k[ZF173$u>z|sEB SV2 [ ctt-,R:I UU]#04'zLZ06ҡNT!EG5UQ{=T؟LޡjHl6x u8iclOǢPC"רar"3:>'jev[Mh6 Z׫+Or^mc|o4S=9ajǣq/]TwO~kA~gsߐ{{to>/JȠ!(ڌԁ]Bz"xs?6uMa (%cGRx R *i, ?I2Ԅ+,#dɜJu > ZR 茚l`(ӵ ;qqS-XwIoUY񵪠]E*|[4ٷ:tA^k-vAM*m旦x)wacX=Q;mUz3ǵӉXNya3}z`Cn֛U=]yMe)IF9A<09q]aRANzw;]6z%Cl87zZ}[{0"X_|ŢM~(p0P;?5 2n}8Ep{vq 3ڗ,aY fnmk4=Y GaXAX<<#j74.̙>뵰e%.(SvCN1OhlXk Oe JNjޯ(a J_n)> Q48SXJ "aV(Yh|3%aJE_[͏H}ba+"uUݫ:*IW%8ּvFJ1Vq-jWA (s,td3hz{7WvGR][3n©JmPǩoyS8L'"@_.|X.d1SXL^+%NY@d~SϗfkjC##% ZL$8',LEx]UZrH2CJt 5G2#F z9Mmх7fE{u+^jf#fe:*r"l_A &ѸgVF+9tLb5=c!1&uȻD)C|bO R2iGAߠb8mm)#'&p`LORt'&^+d24L&\oSS#Xnrb%3Jc;k'SEm" TAK֤9ϹKècѹ z=W>WTUuM}ܹQ<9_J>RM>f_2ҪSzqtèՇ6jimu ]LKrƔ㻴i9ZJ5_KOܖ-mZіݽ=lG۶Kn jwXC'\0#Wl񿟬nO+q&|i ~%.1jW rT;`㒟j=@AHpu|:"Q!j~7Q"{d ܿ&78kYoO6`ǝg #(4U-ճ جn>ۉ1:DKJן1> `OA[G.;vlt6Q3,b.8t>=!s7#> J'di܎FVB% RUKJLXKŕ*U0Wԟ4b7[Џو8`PqQ=Z6{7&Ym0ǧ'hL@P$3"މEa J( <9kz 0ZֶL~}Aξ,ሟ OЖC C#`AIoV-#~N"lIok +vyVEK4&^Y;,k}(.ɾF WQab 1Mt2Q?&[* YAKcKyb8w<,4>p SIhϐifIvј_&v+ H:̏ΡG1 -&QJA7I,DGTkIC䨓\# Jjb9|Ô1ڢ+Rbd]}XHODBF[6L'9+ ݇'"/LK 2wC(M! r+k~\_ $u$;H5C<H9+`9FťQ" DPcvKĭN1dlNO' .ldHe) xXʇeqAo'N֩D4#$Ĭ7DiYQV3rЎt0oAM.]rGF@Q\\&o@pm3%hQMh92 2E\P*jB_skWY79‰o#ZIy0 &g={1z /!ETﺭϜ&+čFrT63X5 k/\nΡpv_:JDo2[ F)q&};(X[b8mGWj׏An쿭6vڇG:i}yy˕Q7~>fyR~Rڜ <' /I٣=iL}߻{].>\k) e<3Fǐ5]I0"jX\]l TD &KjSuF!z>}q-}XTwQܶݐ9La*ڌJum\Θ<1yCQP #۔ϡRxtecy`}c-\^Y} -ot:ՓӧIYIpO3\AbrQG+ Ί+t4 8WE":ojL HV~y5ns\:6xEHc [tu40ǟ6ެukm>&37kOxuϬκ:7]<<¼_Z%O" uifoW˝0aigc+O_[O'OSVY뮝vVYyY>=}tNOA7<]~ FY}+'00^)JEVr"g%@8&H^0YL- ꀃ/ȔԼdRTJRxJ<1=d #K@$]?4$ay\Fal}ccϓ啧˧Ϟotn-}d9q־?}تcN,_OB@8ss%F'7S?x:,`+/b 5I3%z)|qgEvP`,ṭ)6l{Y"jL3#yBwP 8,e,NQ(;DXU7!Vd=Qկ`CڞHxG?2ۜ+OW|cc֞~p~$Gv#G~l'Or?!-p*|GvJz[@T~ qߍ'_sO}>?i&ڽ|"1?~07oT&/J>j(`X렺U@%Nfujژb7#b $ߓ24ȇQ殽lk7[POmAۤg]r~5)k$23 ~V"7$@0H^-CmO1MT)ŊWjq%)(KEaWZ[Tohl8=Mr%WљӃʕ§[\ELuQs\<`ꄷ3h,JT^]=9yd=R/^8ofek Ą'vBjS[^d< -rv Pe( *!POAv:o SLGftY F6MͥXAذ_!ZkoThHnQүm4zt 2A9ɏ~"s[.z.-"c/<S-xMJue{Y^ֽu\.^/{ BLK2 &9%⑋f!Z *i8 ۹L2蒇smM˹ڱC/CmmEVg!t'kk+;T)WˋV%>l*aR~F Waƪg(2h4a$Ss?s?s?ٔ