#!/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=e33e9ff95af5efed03432d57c31726d6 # 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 uqC*?l[5;v:}wlt߱k-b'VW-cojj6;Iu>=}uZQ?Z)W'GY}<ܬDGƋuC.bVVY obFsFUA|`qQF&w=Gt \c^DfL<>z1 Y7fDƜ^ss&^81Ï^pfaz8IkY,X;+u)Ƃ0f`>C4]o) :Qc#@0]s/@TaA7uہnyQٹ|j}=Ի6ʔuAbx5tDZ YO.A'552mc[ga4n[?"-YiF |l=c`9pP~ >5#5(0ٌ>4!bCṉ%i 4׵`@Re~7.AW!ykXzͰ ` @uLrgPF\eezo d^!X2R]J)\\H)fŁ@n̽rͮ> 7i>8luMcd[c5\6X@2쫟Z R=W1 HqEg̅)ՃV6WSŸ_\vY7JrIݱR: ;hl+rzHؔsvRm?;t;n<ŵlw wC=9g62&u=9=X7 s &?A⢱րb;b%CS+0wn3 +! ɍK}rkJHhI8!k$E܉yu/J#Y@܉q]Tl {8e {pwքUO,y#2.=E_hvVE\+% ub,i?hPS\? *]/kh@yp>(O?*fX)g}lvn[qK6]Q&3$>%WݟwiYPɄg6԰r\~G>I2Rq殔ct21ae"&=hJ=`u0uٌbw'%AYJ6,0*VaxHhpS# o=Nu-y 8+c^3ER7`qeLv=7Z;,n]Ycx5 oGHRR)Ns ^ a4"iZZ= N:ه* z$'@;[ e}:hd4T &ƕ#'1B:jpSRl)L:ɁM]jD" 'r.Uo[VtD~l0 )yVY(@ydepmy̍FR%e8jidqSqc_4Gq ]v+UẙFc 34{oP8͇)K޷ǿl$( 릖fOv׳P:=4;;+4" ׷ |3$xR0#xn e3dSVO> ye1A}0 ~BC9(5&p=Ji3 ?=hr=* ;bّ]I'DJ{T)!$*/)9)lfXXs]>LqU$Jʝ&-luwtehʝoNGhzf~ޅ*TJ "R.>d$VÕµ!+]B|S)u&*b)4ʅ LڞZ6o |Nnٻ=zEZHw\:%sT>Ixǧ[ʋyȜG@OAK Mh΃ȨA` F|d;EǞ<c/wFY_z=Rug꫔>iuz5]YSh5MP-ìVxF$fR0̮fMl0yW^vb߳VU꽈{15JElgU4sg.KEi}>IvH-Xhe,ZWwD'˨}Xict{6YwYWeP UB9^'MhfzO&O&\&7ON4[|q\?Wwio\>OBS_wi4&GAbN z3[a#f_oM"\.SoW3 BaŎfv;b6"5^k\ 7[8]uC' |P!`=U7deK'&؀ !e[l]~<(`KG|H{yrkt]v|JQVW &T6'ii.kGJp&m ~'geyXO \8TWS)v PYN/aUDdž'{>8+e8Y6d,ckBX>XN ]u1dK;Q5f^ G|G46:RV-9?f&%c5 NkLk ݵ q~hiie6޸?&:kvMe鉙>XJR(`̱;)UaqJ&g/FX~q9J-$Y/;U\qG% &0_6aB?.x@ţW wOHx%&ZnQBOrNrZU<7auGW2:,zޫ'~r ݬnN&#S.gԄ,K;j`@vonoͶMjSIT7a9}Ar؜Ǘu<2 U٫aH>ykEǝsnsO~CofQX2 ʴKmMcQEf-+Hè$86Up"^`YX@6Qn ~7)5ȬBl=6rV 4U5MUJ[,m$Ey&[0nOm#oͅOC麪h~@g`C{ hTP>%_lW1~(ziug< nwO骖h+m`o9e5mNFdQZgBqk"'uD;",|(ߪx?qI~RkUz*8utCe\Jka(_5Qsva!M.>ժgN<^vke҆3B斓6z]%H]l(Q e'J+J:r0bHsy-X,Vu';7zVȾ[?Enw%}Rs/C6З" !&-ûa1_.z`{-(t,='u_#PgDX+69-FmئG\Wc}B)F=@M$NvL6T;z{j,ag+rO:է\ ;ۧm_l24a{DZ>մV~6$b /t~MwpjI~1kTm\sRN:ʴ^)㝏?*({֧l3iTͳo] :[L^Dؤ# iZ:$q[*In:$_*תRP_5lWJA>K;BoGI{a6}?aYZc4h$u9:ӯ4%OrMdoƻ+>xynSUG#y ȯɞ KUw݈o&p4 -8>egY{6,_3 GQMuA$$Sd '$"D!,K{x "z)o%L UDwD"28q+bK qIwrfo@<]C>.@tn34*oQU5J}KvM̞+f &0pR IH 箘'WE4 uW{ZRN }!IGss|wNd*HF~#_Ov8@\CqFKj!?.|Slf}1' 9ZtQB ބ`kwۄ$3Dզ׌QVؚ|!F5SYz6-t'r,c~Jn,)ѬABt u&XӐ. tPF()H9FX#Hk'K۷=[9Z)t:.x'mVUX.J<Ҟ<t^ֶTj9BJ#H2|ZGj9x`42,iUUGJ}g0*X֤`QF FI _ڄUUKŀȶ٘1FQLGЯCElI=>/Zkš Y^y9Fh[6dʭpkʭork\nyK4dD|`'Y < Ia4B%~)eQ˜ҀgK֩p5?gwwUjkjj_;=3T"=h!2FŃ/DN%M2gyz,oe^s=k}|6qx{}Â/oOjXmv2}S.F cRchsv*}_y@,] v~3HDa,z_.-/g1? +ƻa*=Ϟ|({`0mcDq]V&0zq 8$[|=>C{AcךKi6z@ x[;PVv}hW~m[U܂zi8i#XnXZ#*jy?Ny]pkyv*+MrpxWk՝+ pOm(;sX<*LaB t [{oe=F`rXgc8ED&Jh TtZ޲F5cr?mm4ٖ[/sC!|_¤RWuRO\՞2l8* mfS~euxSp?{iyX Q4iwFYxµmt=+η!#oxYe8o3(l5 mmyzHzH#zHCzc*w r%aƠSx\ǐn/ o0'En?~C\J~-Y/hX,’X WWJG,;)Ag7)1,_[kWfK/$?tJԊSpȆa\ i=˘&k!٭xNoj cܗ`HWxIfN1됱;9Ju # |AgQ2C4j(l"s)GZp|Wk~ݬQ VRD 7LX^,!<ݺ3|Uoakحoa064SͶXJF!*'mb_Y+1Yh¨Y `P 5䇹i;D55ZN﫥/1gXb`hяIA]<9Η|#V&ԉ&0j 0g@VUύV̄㰟#DswW=x$0 mw5iJEL?Tb4M=%H@Ȃ쬌A3azdFlmsB%%g*N#WB|i^ Lm!SwUɬJWBbF72@ۚ;- UO0sTl#:hq?l26i۲FrG,9.g9Χd9ض='bRILR}Lmb,(I4r,WiUwf}1 _dvAI_Z1a|HU[~vҔdLg^*F$TdEdԝX޽-sM׀~ٹ7c9@[FSoc8 %eDmg}Կy ބB Rv2tKIvv/RiFÞ 46䝔ыiTDc4n'Ÿ;}MGлVss}j6Ͻ7kQ#VgImXI zPB. 8BD)j1@SU +l 0!TCPT7hۻU8ۆ% i2S͔,g"c䣆B5*Wy1p/OVՄ ѩ byxq6b mn.)}8xWL^屸ReF=*ymKbQgz$LTI-;̹5 -M^:LAS<6JɫWQ/ǼQfk'MN]? keMR2m>#@Y{drԊ[@'!J_a~!oaBlᳲG2aU??շJ7أyp2(29UԩI~ղK|:D\y`i@M[!Ub\< 1`X3`ñ:]mWD5燢I@ .Wnꟑ=tct (9DΰL ΃Ei!iCPyw(֥ZL?KoSvX3]yu܋tL)SQf883;%K.A%ƿ uWn#k=hFPϪȏގ|Q?x8;?"o/;uv֛\Һ{e3gx[),6ߨI_f1|\8z\U7%\J[גBt0?,wDfH tS+Ğ)u̕/YLj? ݉՞dU)9+0D1A"4^kaWgC :gNoLUm1#`;㡚08Pwkc;B-):k[[&紽Ŝۻa2 NnkM@jf֪/h>2Len=N?cOCBx|,Lg%P:3ᬶ;zfSM"e鳲6P0B<uM= 9S*TO7&l϶}8j//_:xoW0B>@r\`Us܍0H2>f,-qd%5OO(v_$,K:s 1ϵe9xi3eE:k/h6F5G|IYľ8s1g݂Csqa-t2nL%gq(7087`ޏ35`ͤh:/r\6lj#Nx]@ -z%;xzR* +AcsrLNjN6R+}٪qbQBd(LHjY=sT|egRXt ?_4(S?7qbULg@&K4^vJQ_鯅zANe^wͩCR>/l 0yenrްA,BMg;:\C1ҰldKE'?iH*!pxF:Cqzbk Ki6݋Z[xsnS/gMzGs ;cߦk,窚ӳ~ՏjC߽̣Yoi9C77m.ʾr4椉8: a؀j58;$NiNLwY3 #fZ5nA,T/[{-1M9=W,O.ڐz>Xkq\WC{%g4+![.9ZՀr%Ob=}n');F0{ ?M*.8ynp̘67RONy?nnzք\ zK襥1>K/ݕ7cbwrπtSLGQhP zX"۹r2kEaT4k9 ċqZ$ןD>n+dbę㰃lè^,3Ն~)ICk I%B2KdSb9 j/rXnCGݤ8fvr!ՁQE_oc.EG&vN-F<'gծVt\r)ʴm ړqrz2/9>*{2n]T .n4hRsI쬮.GÁDxb221o:_̑)5k ymOGdP]隸 D L 죨zB j7؟v]]gA}T?g fP5ܼcga)js3X /_'gk6taaD?59! bTaDg}Jd"N85B`oaͦxhq<}ĭsjzl$X&:w]"Ws7d|In_ '΢tUdgCHalM׻ErB>5CYil!54|r㯙 ߫Ks_[߰cV2O2\|M_2>`SDB^{:C/X'_هqJ>/-vmș+sֳMt~ߖ&>+NJ7|ߟOX;G~{#j_޿/K밦Kn9a\\zʼn~N+qR"D4sKWt1TQ&=`?},t4HC JQAIݛ*kҌJ$"R1ԂΆc3U< n1#)bt>VӑlO'x2B* p"$WOԆf+{r iiU4H*@V lbϸGu@FьjpN"޸w"P&XƽO8*Z" O(BZnEjѥBQT50< hPBU'&g &kIb˪8 ;gCAp:){/VK?`P VtN.P2۩(]ipG%7< $owI/*+s.ׄSp;y4 Bo>WnصOK5 ȃ⸤Ct󜹲S wM'ɉԴc0GRF< M҆CjCU= *J^f |%])՚HBOBJPH8Qhi-rz U\ l!MoRPtc= " :eejKuhXAYǒJ@)HkL(9v umގZ /MڝѴ Tkm84+ڴ^"17 J~N7Ԁ>̜[qxT~>LwW>xkօ=NOvi-̤^:Ows؏Ł7M'9mL@нlpgtFa 5cHz1N4;!^SۈiiLI1[Ko{RoZ96Q[pE~ڮ5U{Sez⅚ i㛗> .Kz_|3/:"? Yw.KJ`?6߁>@AhcF+RqڼzcZXu[Lz#ݨ% u6Sz:ҍB:Eb6δ1{.O>:QLLu>X! 1:Slrأf" 1l8=>3c0܃BpL|yk>{T᫟np&W֍ Cx-IQ?A/a0<}÷'g*p-+%{=R̚OmF,)q;).;Hwd:H7NZ]uv/'24H00ڑ(UւNľCi#g%!4L$,:zmbJaT \^ MRq!y#\m{;5hN]k]3|qVL_[ߵ%w->:3\9="}ς$?B~1Ao3YT)p|DԳLga Sa>6.axiCbBX8&vћ^1[PT׬$IyƍV'#Gg] RhhG{81帔{]8g4L)Ƨ܏AJ pimpR "Z&{6{}Y݆[!O,/WNYV 3 JH mKPoߍTk=y Āw8&"9).1AĦZJ` uAE.lpP>c#ΦtgAϙ|.A粧 DYjr,"51:I+a?hɔcq򅢈 Z׻aY?|WOM[Z r g5{r$ÉɇZ zqrzb_޾3KZһ48`r2, R?LJ&;ŠuZ2mЩί ^:g,6}nn4f⼨O-׊~*tȏ= !o`2qk-X*«cMf"Yo,,N~1d=y)wS`wѲl a> IclBG~L_CL^j 'C3#=[4۞Bdi^n?:QPa2MR3xa%k/~ϊ)!0U}IY0X]]&ͨe@3`|bI7ɡ NpM6,~&CFTMpÏyh̜Y[bE-k)OLΜH~xs͆8G89?Q9ёvEKcR%p"0w=5 A+̑2&{W5t@k+u0iR sI<)S|mI,%GWzRòhKלlפ FW$6|J4w,gSDPM#.fGi.odIx"~)\4"ͫx/UPVҝIlp HVS`>(_пbumIxN"qZ;\:VcUA$Ns'@X=m5?D,\\0> .{ X>LM<+_FL&}Ku=ڂ%Ɇg |,8=oFPM.ޜMg5Q` IYPλ-'Ȕs9C)SeveR|P; B8{b]&~zMK21t6hن4\gκvۼs g6&Iu?K9Äccێ+G5WH^ BNpw7Y.}(>? ;L%eL & ;;J*d2ngZDI3+Aĵ,fxP&EYwŕrR/Ryw\3bxhNءhb8f6nTTOt:!^8|aA8b$Q\rH%l#7_Rdۅv]ʓu]sQH{1{dJrfi3=nu 5pHi]C@f҄|Y&҆g\ɭY}Kɒ8|3}2I5PDhOe ˼tM nn@GoJ䳔6Y61nzY:ܞr_|rߌʹH?F踓JnـBi4tiۢʟ卑(pm[m.+ [wi܍.yV2H!k]ZX,daHsRCU^:l'?yT(OKy7kG6=DjzxD ND]0=@ =%xrkFttBD_DSLV˂K<ַ( d@KC,Ex%\S8ސp8WhŁ0)òpSM M9>ls,Y2d᝕Me/.a@=Yr5{7`|Ϋ8bɔr?uO*9woB/'Ȇغ"%ZX(O"&؇1'R<=CBk#͓Fh7^a_Hs=T975yNyK^"<ݐۚq81/ Sҩ52{no`%^} Qr75iR3Y8w fb  A:YQZsƜGL_2]DG$ q5zALRg֑l}D@c/bNљ;X+Rh Ekezh^ #1%SOFQÉ m36,*Y.C0~QŃ`9^~ 'N֢I7Ob(̾Q}N㿾/q0Oo4۔̽WR$1>?oUs 'zdq.2qJ%Gϩ1G\ ]WC,ҽ‡EoI&%:xM{~yN!K,YVAj'J&uI N|/|^LyOd\kufE;ِ,.btuIJ&]g'/1=<8+D9RD 7309%!QwڟƖ}cqeͷvNܰ<[?2/O4b^Uvo-컻}s7jܧXvFySb)-Vϓk>7Z罭^gãՓd0hILe9 I.):ێ 9[ t!?*+չK8m$ 7 gS[9 7iQ0sdx JG &u5?χ^N)T+s3?$k{Ы$E=`L|5, L?xCie6&n"_TfpX^F\.TlٌG1W'˃z.ONj " kQЕᠭPC5i|WXZݏ{UM<t\Y[G7[u |}﫱#qU6i3D2 ?)ꏜHf0FE+3[jQ:Xܩmmﱒ"/#R==Քd/&*ܘ:wBbꇧAX^!2r-1' 5zKt6vsCtWqhpGRǂ+`ӉI?c'Fıg3ÿ!s0^n}cu?`%P33>[z[ &)v_W웙ڔmi˻3d]f:˃v0bU.Y#{xN^< hk[YZw[E}7Q /'sC`VZeW(*S~GMMut _9yΣDOQ,eRM@Ɋr5ۮWgbr%s7JK i'М1y8K;fN!&2[Y櫣& 2 ,S7CH6{,ycb㟐Fb{3Q`̻TnO~ Q3ݐps_XoVvkw.;I7sdO "oe}=߷?Co}{[_Zo'} #zw)'N~osALB.hAeI12_'hkucu6շM*U).ٰqŅ]5A|5씴2H$/:In 3ȝbm[) a&^')]h~To׶\"M^б-pV'IMEB1%F~LY2BvdF}#3lq%Czث) Wm an:xr8#R@M;S')lX~q4Q22⤉h9U8ҡ s 5{})pE=_zKIJ\] `gF#bP7lU`!Yp\< rl791S'98\]-ϼhRM:H{.fSw赇N 锽Syw )&2ϤHct^Qev j{ T)KGCȧbIbd"Kp]xݏ">/ M'È(F 6*Iūm;`*mLѐz*OfJ~űD]3Lݝ<}mP]\4>/J@~]ߗ#Gmr8W?W));aUYh w)"1n+6_/\€ ` %Ǔ@RU]wM(ŗъ/"ssxvHX4"K8SCě0#%GҦh3~Gh~m (/q⹘I_N`nBh &4%;c #ƍtg!8ע;e}dכ')Gd2=Yl+ITF_dq͹p -aVuCFdfz#v507aCC0c͇9H7; nn.ިK}.)͖k Ԗ3Xoʟ0Dzʼnj3"99}$Wv`1u(V040z!yxpA3`) SA,aQ khY?N-co%Pa W",vёRD@Z:+5%`XHl;)ߏN18!ȁ".Tknq/Dt+kI/諿MO֥X O b\fb G ǠOKP$|3kO2iTN)J]X?}ԯ 40"FTuIi*GB񼇊>㐽}oJ-m#MD 4U#UE7 "g ɟ[>q܃uqc\ lɦnU}n}IE&Ӂɘ`wm)y|M;Zqti `0,I'ea[m:矼yQ/cvpt5D6B$#8ӍQ8:@鸋\^ ^407`ar XC,a`CX}J/T]BH]8 ^5v5 7tf|-CKm|lqEG/,Sڣp8$Ǥl99|%7h!Mv>m:Ac6&tgkv芼5u£JXz橤Y4,Ǖ +ɯ3jno04*́`tړԌd e9SYJqڹy.<$KF< l3#藭͆l #'gq]ayHQȻ3yodX35Ra#\UhàIބ'WmځsxPac|f94" 29MdAD!뤮]vX` .cPdZ1/8:3"ttˢ5@$`9[^aOE0bէc,ϲ/yeiIɬwn[_dU;*Q3lEC' ᥐp"j/CYoATݲl8dpV+IDz1-z*HX{{0@UA(&&VOdAɨ%OamB{Յ4a G-"눷m/2Iu;aP۸4u#GiJ8d<-´uyi:RigFfȭa3OLכ.:D̕õax#pآ$bKe]W?`f~sc^<׻nKzr$,B{72 3GG KW9Yqy ~Mwݑ$i;ir|vUL F n;'29tI׍LRÎyLN:;/Sg-.#\=)9 ­?ZÉHdCu<уRSv|%)j9Z m9$?F1Մ] G ]'gø0.h_A{W04? E S\tLĐk @=_7ln&G oT!2ddR^v"Q#M2q>6P&J`=MW0hmE=bbY֨6E&HK-,O4Hoqn3\[1iY4&܄ z&!ϕVӷ4Y|nGSG)㽌{E"(#Ըsxl}Q;"5gQiFSJ/Іc& 1.v#/C\mګY ce}MoP )ڠYs\)r'{t4Ɠ/geIvQWFQ׹S'[ؗn.wSpWr/YH̎>/g(ϖS+gx3g(f-a2D1!̢陲2Gqty[朆ޣ190GDy:B8nGjKPewOTi+>4W7v+p{V@E &ZgLΒlrfu=5p/" jہ_̥6Y;ҥ![V)yl Ԫ2FS$oΈqgׂёGȼI!gR>6ˈky yHSLk`+TvyZLTj,/Y84F\Ĵ":ZF=+]Zv7_J󗞏(HHRv~CeP@3A_K_S&JJs[+SH~1' ܿ'@B=++c| tȟ=@w!I`SEQlb]WrguO#a䡙28D(N,5 ڮί|j6PYI(]jO'bi'$+ZJOx(?=73<^zInRiC)aB3U%x Ul-{Kɀ=BeyeпRdJ^\p}-)br[OW/Q;[^2B<5Ǚfq &NQ2*.]`cgY^__>S$TA/Rr͑BtUN@v_JkKLzxH5 ͬ<c|(ZN+ 2`WzEdϜ~pY#{J%&J_:te#v7!b{d"gv,'A9+/9+UɊ2NvcjHe_H)xܙ Z1P$? ќBؐM&.+w+lyOCrY?_\)RR;Y,?^凫+'=U7$#<-ǜ6EtMQECNmXr:^*QaZb?Ihwv0]XJ>]]QapYV10ur5"gycӁYzag,oQm.vjxW~1;z09K{:^*Tl3U$)GSAh>V χpl˔,AX׃ Hg$*:*W + }xEmw}@Ӧxp"f}$Xb%T{9ǔBnf)>02c(w-Uu!'"#A9rhYwI:6쁥~ E݃')9ax't0͟w . rtHW)[E88dAԱb'9+H!{.nb{Zt96c#:N!DݎPJMszRɒO:YN7IwQo$b^9ۇ(a鑚W>r5ϝu0.Da fI%}q[=GJz볪3pkbF|9 7DK9{N{sORoތ'z?}<~ճ_,/~=W?g6ړiWr->xkW*h6% Z2=]b*0uǽ z1bQMUăE o:az2!"#ţb)S?:7]rj Rtss+O֝2IH˙ߌUannu%c87)N[(Z-17Ub6w~^5ZťR*=Yx8Iӷ %=E@__p1QQ0'=I1N.cĖ,!"s- AX솒{= Y]v*և{|UO-4iCp_?Pp6G}dlgaߤNQgԽ(m%Qh`oR-#fL2Nf7;I\31ae"(Ӓf>h2[e2כ݋&灺>T8)3qx9 JLtx6<݈qX:uJRM0ꬥBKsK4.7 p_G<3Sp&L5[wG7_Os/?Co}V.ҽ->wx/I:5ذ,p׍V[MVƶ\][wngQ7y@_;O}_Y^K[ßo.w79a}^kKR2@8 _FwJ`|j(;a$Z(1.+O!^%Z}1> }5%wʸx<#E]tn~?ȲK\`5.gk< Ry-:^4rkZSsJW3WV}TNWؓșԣ3D?靪O2[{odO6KI&wIVĵ M8:M!v 5?3UIo^E758PdX֤v5,_V}sEU˕aBj˨*PR3ڏuhkKOݔN}sSqi^m ld %@U>O9. zC_PEḦUutxu:> TAZ<Uڸo}>VysUܜ|y-*e`#XZ__/(?G{̗lΓUH2p;>"uUݬCʓsw1_P-砶#vt#1m5Qc%**a7v]owjh2]11#L.;~c٪l_|֣Ap>R fw*J?]G|<肫i.M>W?IV'!OȒ8!:P]UD3. jCvB4l՝r 59QWtAlRQcrTaœqxjB)LUMƽ: Fv`h "6 !.^FZ.FxЛg?i*PLD~tl1!(,cf&G0"]@"c옥F2o(@\v{0 y +N@c$NS0Qg9NEa@8lɚ: ժCۮ$>hFI!ZD!p.ܓAMN8O! '~! k]U'Ll;i{*&?K:NoMz_;+p]c^Zojkƛ-vgqUV$x3<5M`ϪaD}c`GV,vcMYAjovk h5ZګN3uumjvjl~^am71 ؃6U]}o{oDqn BA}JڂU??a8ßY#(?.FͩIU::k T:V]ߦn5 ߤ:jBVߡ vQAӆãyXWi~h0C?c84ux~J3U)hŒmb6L`ګimձ7XF^RF 45h5^֞-p%U㵪mk`0~!;lLwU%3i;]9^.]mhJ\օm(ԅ<(ř 7{G y1\BJ82BQ|v 3IXM}ZiFȬtuDz ToDx+Gڧ߫ks2&g(4)=Si\lzt0 sP=Cj1>N:fPfSʁŻh%8;!ـ(+U8q_m.Ǎk?M&O_V v!Bèɾ._['i{o)_<,%\͛)_n}xmo6o)#KBvΤi )`oXB91:ow`b}r~FvCx`B`4&FRwPXX ‚Gv$|\6o0GuSƻ` tcsSH_|2E܈Bo؉PCAY36+:IKkޥ"+m}G="R77lmZtƴe IBCI 6@ 8^tȐsTQ 8JYA.ZNqQ2L'E{Tt%iAxm HY8I8rm%$`P–g@).C$ی9pѦ[wzJU1|c(> h)w(@x(}j? 'KN`2LAʽ$V*OT!X;ah,֮]H=B@@Ԓ ;LxU5a¿OqSfq0F3ŴT$@[MU.E 4 1`:IyL5"UKׄ =hW+ ٧wn=$|AZK^2/Go^rŤ zf(1 cO0$l68 $@}FXXsL 8kXSόjjt8ɚVbfjQL G Ioy_\~wuLV&h Tpƺ>HwUW@ A_g4Ņt(8Ug8aiUnS,w(fpۃ,f:pCt>ӱ(PH5j\Ÿ7fnLtA-WN|AWAWZuIΫp3w7)TOea`oauh܋Caץ3USz߄& 7dx`.[ϋ2hʅ6#.t`>,'ώ;gaU7Ɔu20 ԏ$UՓ)OY(*1}-,jjKdN:c@w)tFMS6c?ZSZpL$z߫wJUۮ"T/g O t&d 7mWx1wacX=Q_:mUz3ǵXNya3}z`Cn֛U=]yMe)IF9A<09q]aRANzw;]6z%Cl8k7zJ}[{0ē"X_|ŢM~(p0P?6 2nC8Ep{vq 3",aY fnmk4=^ GaXAX<<#j4.̙>뵰2qF}A;!r So([k0Zuꓯ;`YR"#bgkl4OXhqw*&`^-q"?B",2N4Ä-.pJM;ނEb'ox)4#oP`16Քw ybQ8idr)}: R{vXF.ܷީ ,K7bΙp1r U浓OR*Ơ% Q`kҜ%aQfڱ G',eQE|I"HA_V,fEo|ugM.h#a_T蓾tQp)Mu'|uW{l$.WfUƽ.\߸Dfwc Jtԥ3*ypPވKk$æErA͎mxY̊ѭژ >x{z51A/\%5S/{C@'AO6H#;$1zM$=P@>FG&m~a:b.L V(Yf$)d$)/at On(,GjRR0twBWlY,~jX\= /ɕMfK<Yý]7Mɟ 4D!4?EayAp X)-KNP'Tg(?]{w 4dVIZ @i "xfַ'7orB#ʺc 6|jL^Rt~آ[^{z?ke݅7ׄ 1th=Et )0ժ݉ߊTDfx&䋣W7Q:ju,26#aeZj^#n`jnGdƧ! ,mѶMpĆVǠD8H?k<8GR:N憑— STitST=ӫOb}jzfz.O$Ug|]U%wnTA1(_{Wji'XS'sWL }Vnt]0da?.g9cJZe.-cZy~ݬ'nKl~ݖS-߿jKk{[m[%LT5ڻA!.}l?!8}V|Ͻz_~~>|Z[7 䳧H[o^_V==y5 L 6./1  WLJq}-w%";XJ/+r Y&hv,rR;2Wſm^>[Gv|8CDDO|~v De;qsjFGl5H"3Kgc2w3{٠z܏xq_h%dkZp QԍuOi\ٻT\RU?!|EA#v HEk|o2RY} 1]y2Ѥ1x" dFDY=^t`;(PO E'g-Ud1ZQU cږɯϓ9(ٷ%1rXA2vb3()~4T z/q- S4z aΖ|py"IWVZ#6 UTXhcLy]F GrԏȾ }DV+/hŒC36: Mx:ư|.\c13dY]4旃2A`w:shhL6CIR F Z9ꤩ*9H0X0%a(YWo_/:Vy(PVc4 a7y Hzoa‚Ի!o|Φ~V9A5s/քx:H`$!g Lnb0(R] T"(1%V'2Y6'ҧZ[zd62zPet,>'qmI>~2;up4 1 m4QZV39DՌe)# [PrqKs G@FOU y"@pVR`IY6A^`Epċȼi/n3{q`.͌$VMa,ßsW s(6~];j?lW}tR"ᖪj[BAI_ ֥Xf#zmѕxö@P{j;a]c}Z[ZZ+r%Gqzj⍄Ų^Իn6fI~KRchq(S`_Cx9)^KouJfut) 9g>1dxEz'ڹ;e&V)W!2CɒTCdxFjEk"nK9t*՝tm7dE:~\y6\]]*PS&φm\ u`( JUAsd`%T O./uWן=9>Wå啧K+qY9>yP43Uv/&u{ 謸RL'N |%_T-n~31Kn̴ЍToEE)ݝW:ǥi#7Hk: y7x^GsQax@QZGނq?qS`2S~Wyfu!b/yIKM#:o&+ϟ<_.u°ݧӓkOKݓ')vWW:OgϟwuVOOՓx Oמwa?,'k+O,?_>9!ֆjMQ(*69+w51 /@ЅbhBPg}˯F7-'RАZvS!VY"qO7 i/SH4{gkk@|,-?]:Y{dmI縳|zr /kK% P&zQ"iLzh.bt/psﷴ. VRva=~,.\9j=X}yv,O)ьWD~m64R4"JmW}w#qUIfdnj(}ۏK 0:.,x WKp<kkKϗV,w:wZt̉IhUB~zzN }d9fgOBEQ^{%REA6iƙD0/. lxnkx M9=۞q e8>;"8D#KSr@4ʎ-A&'6VkByrMrbOTЫvC˫Xztٳϼί?7ȑ_#3ɓOH Bҟ?^_5>Jmw}|W?g6>Y~z->={1 ]; \gUU %,kTJu|y^̣*1y[w z㨻ewIzB_Q DMHn/_OfyHvʞ;dZ9{n7WHu=P9{_.s]f^6ieD ϦQIۓ+qU'G!ulu=P7}e\tu>p WBU(46fi4_*Igi0a}؀ko7[Z&~S[r6b?ܳ{í::o>/|d)U$/*'+ Lx/.>翇uۓL<OQ~$ߥan&`d~`5Sn-Ǐ6zKW1{,V*Oo; $/amԣe}}Tdp lͧO/:hJ"颦Zgn򒍊Z0HҌDΫGH5Z .FPTapGTUF:#rȅtB!50Vimi4` : Nq?x'Ӟ:LT5}+Yח^ֽue{Y^sɺx|_1-0TKXz.Zh%p'=Pn·>2ԣKε616.j~~կZ}܊'o?׏C] (=&`MѪǗ JB "֙rj;ruiЪهM%01_jo*XBR&̟R{p?s?s?sA{Ze