summaryrefslogtreecommitdiff
path: root/io_uring
diff options
context:
space:
mode:
authorJens Axboe <axboe@kernel.dk>2023-12-05 07:02:13 -0700
committerJens Axboe <axboe@kernel.dk>2023-12-05 07:02:13 -0700
commit9865346b7e8374b57f1c3ccacdc77846c6352ff4 (patch)
tree348389fae84b4a08f1c98c46ec8d7e7b9f6077d0 /io_uring
parente53f7b54b1fdecae897f25002ff0cff04faab228 (diff)
downloadlinux-9865346b7e8374b57f1c3ccacdc77846c6352ff4.tar.gz
linux-9865346b7e8374b57f1c3ccacdc77846c6352ff4.tar.bz2
linux-9865346b7e8374b57f1c3ccacdc77846c6352ff4.zip
io_uring/kbuf: check for buffer list readiness after NULL check
Move the buffer list 'is_ready' check below the validity check for the buffer list for a given group. Fixes: 5cf4f52e6d8a ("io_uring: free io_buffer_list entries via RCU") Reported-by: Dan Carpenter <dan.carpenter@linaro.org> Signed-off-by: Jens Axboe <axboe@kernel.dk>
Diffstat (limited to 'io_uring')
-rw-r--r--io_uring/kbuf.c4
1 files changed, 2 insertions, 2 deletions
diff --git a/io_uring/kbuf.c b/io_uring/kbuf.c
index bd25bc2deeaf..72b6af1d2ed3 100644
--- a/io_uring/kbuf.c
+++ b/io_uring/kbuf.c
@@ -756,6 +756,8 @@ void *io_pbuf_get_address(struct io_ring_ctx *ctx, unsigned long bgid)
bl = __io_buffer_get_list(ctx, smp_load_acquire(&ctx->io_bl), bgid);
+ if (!bl || !bl->is_mmap)
+ return NULL;
/*
* Ensure the list is fully setup. Only strictly needed for RCU lookup
* via mmap, and in that case only for the array indexed groups. For
@@ -763,8 +765,6 @@ void *io_pbuf_get_address(struct io_ring_ctx *ctx, unsigned long bgid)
*/
if (!smp_load_acquire(&bl->is_ready))
return NULL;
- if (!bl || !bl->is_mmap)
- return NULL;
return bl->buf_ring;
}
h=;5s8æFٮ 2#}ETmH+:"/#K ӅκG(ĎWdnNCk3JRlC <4&S)WeBd 47wΕ>}*h7M-E}m&9Ͷ*㵢^;;bcjF YVY80L[&fFb4_ƺ.c;1>6 TM0 f1k[gN<GfoԀF8};=37ii0SUCTI-g%w!eg6,6Ӛsb,nHهM$09aY\ve=mf:3wV70{oϹYKk_Ӆ_᥶\FSd.oEW?/@t#juxik/SH_ա}>\o,?M49:OmG?4,.3, !V50=υu5/|sa1GY쒳զZ7(+ig~ HXϭ ա-V6Xm=q\1sѲ^No1Ǚɮvnոe٣G4CǿF>h7~H֡nptlGMKH-5W9>dAgEp !'2p8I#) eN7ɩ t[)A[!fY :oLǿn)ܳsK*l@ `_JJq8_36Ƀ`ccimT0smFDpYd=pWŝrwɥ&UMWU01l^(\`+n,eRz0 /ZMLa'DD(dC)Ut\d9G; "_$%r9LƇ*p?1}cs\ O so2:^T>Q|. I'G[:N)6#^ؗkV{oT.p-G]AaW!$0UskٔDFud (LKx>tePO{xWTd 6040g'"@TÜsm̼߈8wxk6\ܱJ VJRc6r$`ᓃFlzCچfp]QkBJam|.tF5ѸPfם4 rz5lt:SuG5'{O7;Ï-Wk߮`RET0.0W()UJNg('& uZ^cJ;`6q->W/r~+YŎbf×+0H}F]TJ/UȰTeH[5f[ &k6Ft8Jbڃ ?GΚ<۹N'^(Qbқ`ϕߢڋ,YYZ"6mLk& *+2G 95W\H[!!}~xh7"x[h0,)1Ib0k;a*X 4+6{1E`:r4gЌb/~h\l4nf.$7 ŢB8PĆQԜ_#4CD@⭲-46AgAVA'0G1ٚ^x }t:gty ha߻eEv"/v a2^7W,7nCT-P(RN<%˜8b%Eă")㻷kb,$TʨO註xxl\niȪQ['^eyDq ӽ^;>=Q.M:M ^ ,yY+Zc wQ^%tՊʢ\1mQ6rNWw*Y:t4DDϤGۼܩtKQjur^| ucMwibxu]b}+^@jP㠺cõ,suofCK:^+y;-08çVe*Э 8|\3\uY?'\@ڟ1բ01V9o?ݶPCqup+(gS3(&֣!UUB₥#lyD5C}.nNcrKg6Je?E>,aHH^>s2=.(zj.hX/W7 R: ƐQ)a$yUts2*Yzq@@d ]jjjVmUVgnsmAգ[jPUUHUP¨D.vcX1.eK/˷̫ZQӒySxU2pՓsVHMe^*)u|(TBBuAS^:oݑʑ(lm4\wI$I$ٷr _,(I-j$!?p*(qKq~-/#":r6M`ڄ@WKO]͈KHӯ<_ӥCl֢uO{@H4ċHΌA3Hf("y\+"2QYB80{, ]H|.")?I*(y@X/q8+I=0,`“d?~(_1Weâh>y~FQK..SRI`:(Gn3j zv0l8bMĺdU v;cM*skO&pE H Ў K'|^p=?_٥Ѽ? \HR'Bc ,tը'5n?y?jܡ!NJ,.t?w=W<|k{t?NV!BS|Z,{o/ePL3C?>p?Q,?2 K*#X *x#Fk^>_hR?s.q 99]z9pцEvLXi֑O9K W sBʂ͍Y9rs8r[>1_cx:Ybk+qXf8g"cR@d|@;QHc'gZ,ag@4op$ϝ g}Oiؕt#0 L <NΟ4JoQ6`!R(W%K"js!|)T:տxӛ07_/(. 0|AGO?/a悻gDC'-!)tz*2[ӕ "O,`ZAk# h*%{Yd|4[r:D[y\V™ϢbF2 "`Vr 4Nz>{a(d3㗟B\`샄lrP`bVH_jog+Q4n?("C'Mp6|~_RCނ XTgy EAtwwoie eޱHx=g\pÕ@2lDǨ= |3%GoS.<Pn8+{Ԁ&:&# :w2ݍ~TpGоsZAZ|atYoDnB?8ΈìjVw܃sOzRCeZ|1x0s{n˥iH "mgt BdwL8֚f}BDέ HMT(.԰Aj$+[ox}v m[\%8coul;z/*aÕg6ѽfeF`փ׎j/0B'8ň ԇ {䇕V~21ɬ]L56J>mلnY_~uE۬6kj>c{S,-%B+C1~6O<@rTI(: G>Yn?teisIQ?rzD&np5ֶޤc8kMοkQG&',=7P@5ٲJ‡+^SV*IA{u@C7one~ 'Tk`&Ȉ԰#Ka XH]ܨ9e%c.btJ]`݀ӧٖeWb Buq`䴧[{*8!s~_{~TKzu?MQ u7ݽП )Ͷ{̂da}ŪGVO]-=ɇBw'dmUyxx z 1V&C6W%zǀyzrNb>gXl/$;׃$p6.qEJh8 E 28yΝ]%ݓ D֖u*6)#?)2Հ0o.F\ )=9rYŸTAS .ߗ]Ҭsou|˦@`ݍʆlǤ- iE9]\-aPani~4g|jsAߧn^0xO-Ts|K>`468X%q앍p>wg߀ƒGl-GaY6e+tvKs oEFY-[hN$ 6҈,v7 B"7Sq۱nÝVn6su xOHty6!X#}.usԿ6lY⃄{HjxWnjNeִ(e2鷬m׮_$~(U\ߎ9v\en݅C ~!YSQٟN%qqp;tE7m{4M|QOWCblf'cO?#<㷶=ںUu6rhkՇv{&2ϗk×39_}-Z"nfvl6.!*_HS c <êC))[B& GTu>:]x?!Mpkz:mQrk`ձGj'»E7G}h qd_W + nxO0ثB;de^RD)G0}+=~"嘈~ҥ1^*uoE-%D"RBnr7)0@fcs|4 ,تʭnoHEC:7OÅgT,~VZd t$s ',.q3jh3O(=ꌼ| VӴBRsYd!E/ %vq l~P.epidW}[_4AR \,'ΰK]W4a6_~עs Q w3Xg@Ȅoe\Xk&bNP"nn P EP#K,@7eeymk Bд2~8OR |,aF>ԟǫ>oa=/@@ce5wѵj9Q&Ma vxpdE 'WD"%ͻ$^|]!ce!E b< -;5P%z_^Kpׇ<x m dGmܻ!X-1!ޫͫL x|kjWpD F坂F_=. ׏7p1œ8'q9{g!ڽ[-eӰioQ t;t&CEDBΫ^F#" ֽpk5 vÏtwݏb=B$2- 2y?灃vpZ"IO.^n5Ä\ʒ;̈&`7P rm#f_[ZDDF*#(HPk4N#,aA-R2Z%N'Y.\Sl 9s쿛j.u T <..&ōKIӒz]m$!NBY'i2H98+#%VSNk\?zepZ3#;1p.<% |Qlֺp\ ޯ5y7z}[h\{F^B=rV~&S_d [,o;dgo|/롶_ ٖR[cTtͷ˖0濠;x)ר']#!; ~CO!ϖhu[WϢ@T W %ď~8l_Ws3s(W}hh**#fٮ Sv֕d0ߓ&Mp͵N)-Gǣ59 (!0]NH9b?:[c ;l zca˿?^uLMDJ S__B_^w// 5l_ o_$!ױVm/I"Ol-0NX#賝CS^o[Q'[2ZqLRRdo;b_hjM+ʁw{anW0^Zx^udGf⓴Hdнr} zݿQ=;Wa݆͑~[ -rmaeAa/lo00(i>.4̱p^/m좓0#ffp:{uAo3Ûؗc<#"1[ߊ[$h<,G+^#XA"(G;զJWӊTw^uVQvX!1;fܗDE](" a+'{B^v%knCq#oos/U/$>oTu~7n8Izu\,I!8_x_0;3xudy3VC7 b0 9*[<=rl|={ K~+|$qsrN| Mֹ:w @$7h'reZp},2nBq@R}8[j3uFI$>0緆xmt>Rk(_ꞷ3S]?^Zzȁgq X3zv'P=m1ᦻc㿚}@sIl]x _kɜkCy)r[&1aA~}Z^>gfo#8|Ӏu8[ـL;:ݢgA:l >ρǘpU wR bfPh{ =Dy%Hl{%,@ǁPhvs/O䩛/l6 hܐkum83v*TuazxNFA3(zZq:xWb >Qry3I( H@}Xs cA; z`yf:9'Ó 6 +`ζk_UE* wppgdkADJB0`{7 zeV}W:"3[9 P"n+g$pD`/b^g#kb$/k QEO !GdQ1OP==>u^ƧBؠz(ORɻQp֙ R#ț(& U\" 0z]r:<,W 3- j+$z0( gPI#v 7zOvAX)]JMdx ؔ5KfP*&x @u`Zہ«Iw#d24wk~ލ.O*XrNO&p,lno$T 3e2Ҷ?u-a-S}}n`pDbI1~Wi'ytXI E@wy)GԚ ?vMbMgƓLg}a)90p^"g{*EOF5Ղ|>T ވu4yn5L4R͞B|2TB'`+Ĕ`R׉\'@E ~զg=mSpxc_sc Kv4އ>ެ"Sd6Wu+gQA7*Ӫ>wmf9uJw !z]u&u6xeˆwNZn _ߖBN8ZA,vr]J")vϷ}=m"6 zkB!u=48l 7"ܳm ՝LLX%\_V=mÝif:*$P7xnh,077zp79C* ǝ5lsvdPY͕l: 5/zG.袙ƻHUs'm(@eG }y] Bʎ i2 1!93ǜe_EEú/ЉM 0[Dbc4GT x(Ꮔ$P9Ӟ: q譝rJ(G#i]uƔgyC6I(3)mO˃)Ti E<.~EyS3pX"R[+#j@e(ڍ.Zxɤh<}vϧ[:w.z8!GEaja61}u(6b08/:׍oSU;ĄxׂaX@g;n  e4RT9,#+|%.K7 ]P /`:BV]cO@FP/ )ioʸRIP25z smzׯ +6dg!H8}˥~4fv^&f  -ȈsQRcH [HqL]gWۅeAS9ys8"#u`҆js@ է{R>w`FC+ "._ xw_';1aw 8<5v9<\A~׿W7Q;޽]d_GCsAЈ 0% [}#SQ7vD& ~:xB18&{mGi`w@˿Q$>Hq2oUD" ՂI[/{4cΐc[ckS)ȣc9Ec>ϐ&ߺ9zϊ/6UXgM PZlZU)c'טµvts7M{mj]v Ŋ1$.+kWC4ɎNu{,v5 g}Xsu %_n6$,n@ٝ-gN*5 p 5ڔ&ٹIN+ 1 0Ă­WgliǡR&(sN{J"Gmy_)4s7fN|h5t%}NΎ>u|j@^Tm&r\c7LǪ՝Qtf@ƄIۂA˒Nd䣜5{ͣbkԃRjxg\-Uщ~ x煿%k̛2N>Wl 4;V 6k?1BLi B G=ӓ8Iع=5JJcѵ|\h '83>>J:ʭ0 Ǖ27pq%*5ۮi13ao@EҜETQ GNQYW|kQ!d16q>nl=/\)/n!́Ƥq/}jtߞ 5}=3y*_iͩ{Ԙ=_cVOvLwH0z A|_W ?^ͳULug?#P.v<]ǻLGleo14~n?," 7Kmß7=Hv[J"!E ZdFl5DKYdnrG}vS]ϻ8h˶o{ID 忒07"n.ub<& {vENUAFԚi}+Y,MgGU}!p%JZQK[N}7 A ,w/ŷnOgIGUaWи?.HKZioӱ o 8qҔcJy@?w񣍈}M6puݜeR('șDŽWz Uч@0vQ蟫{Ta CF4l>0RΝU7fQK+TxVuBFc>t]IK+]?I{;_5Wc5Up A(M!Z @jSbJ65 ӽI?|s޷]L@ᩑM*F`e˫hLsaLu8!U?$A^" XR7+To~~cLٞ}f.S*> ws}x;9E8x6H%({5Z52GN U@?,uUe2τ9F02h5EذbTZvb)!#spa n7ݩ_>k~P]K=At%|k@>H X(Y+mT}'%a5<&lG1ھuE=s`:(9~QϢ9h/c+$B~~3g5}&f|.'nLp#È8 kq,,FT ^^"oNav6oFh}n1QPWj@w pS>$)0nd@~8wopw:`{>qo]}c2TW) f-~b@E.f. s{X^=ҳ&!Բ bͰKfBXč!A~cnuFsj$H][nJNz[PbIdB+x+}$t~} q @^}/d*S5(4u>C\ f缍?+a(;\4|HO^s {tv$׌k j)S ,!rp 6Ш74>J_FoꏃU.`EbD0wKi˫^$41tkJ.*敃Dz7ѓ.'WL١hU ˚ @(Xpc9I ֱzE-GG`^ ԡmFϡYŷ\?}u]IqF&0M6o@  &]` Od}ᥠNJT=^Kʩ a{~ <]=Yy ?8 (%%sɞ 73,ƮHfs&xOGꤦ :*6 G!gRlaN'#*5Ztw \EٳCDq)6}wa X+a(+z;V9E2jHD*ޫv8E=-snS1D‰4>(vFQvbd.!U>} /8>0yy(f=>z۩0vuU=7up7p:%)+N|9?C~_ >Lt6xdkYUh(oܿA KgCE؇%VTCA_'n~-~>[ wE%^=X GP_-=wԗ ~SX r6 8 i"vM~O#8[: ? 8>ke<8nŅ7QzB< Ar(ݗzO#7hp =ګD+dF< l 9=\=c"@o+ ^֢l =5ۣ)9FE$}aaGk FGDUBq n9{hw N,fUݮeȅzhx9;ߟy;=rmmk2jc$YXo.+S@Ku&`U!zcZ0 ]KO+ T B߽KU:i>!Y((N3l)`a5E .h.^_\oΥ>iCN8!So  Hh,eg_CD=mwڽGJ`G"-0 4BEJ:Fh q2`bÎ)Eu_)*dWZ|HpZcS}nحo$MDҩ(9E\$PСQGK o1g=aÇHwM'tw(E.$,N _O idI ntϖ7,x0Xd!" 0 Lȼ cҟ|9`w ue8ss]eEV3J Y= Cv%6(~~0O6 5:bM1ѳ%Se3 ~Zn8LKIhÄLl| j ,Z/_3k=d1J3bĎPA?lc_l6ncMd1s Y=FE ]!֨0U( )8~Î٦ϟ8[8^AͽA5ΆJBZ7[r\w{oNZi)6ur@d\¥6&Wgi<9vcvڮϚ\❬8%$JH]hD^֐w \%ipA ))JV u0uq⭇<Ι] z+9׶{-t8 C뫦nSx 811]sj;0sNVnI>o{@au̝N \QWyoԒf3?lRY, aiH˼<1:3_d/:O;aSW_-5Cф"^A.Wg7ǖOn#?bsnۓ" >ط@ 4ibO=P}d4X,@" )8Bu;gJdNℌ~X눂ȿd>=6R2ŀZi7F(H#L@X ޜkJ4WB%LME9ni[G&CƦ|d|pe~v/Z5z˜W,흔V~zǃsVU]J窶AYѩSVmפ:/:Bd"4>M)Nu¼#G^xa v9=ONcP(.!B1g9l„^ëڵ}"T‡c.[9a#EI },TݚfgVc.UWDAvμd%4kِnV.>g6Jų&HwM5!!3'5/cnrB|A2J%b !JIbX$f54j:5>CW~WWVpI)>s*SȘlzoe^/3{a]߆wf 6ߏC RaEDd֍O!P49uW=fc|I6"oGlghr+U\/e~uۃo28o-[d^#Lpa( Ʉ؏AB\!>*䁵B:KHGQۦ wWD'$u72 ~aQjJٟ.9Q.x7R B>Pt9_fJ%>\I{z"Fp UE&q)xs񩴂q\%ʟ{YX |@,}B _ oX)2|s|? $ZxEOx1Uq I#?\q"FmG݅a.G;^O nkk` 7}OpŊ.^~ϧIFtbFkAدt5WsMgtC0O:]JtOoaFcErj#jt`:njIq/b>qlAyK25W תׂ6Vsiar(NtjJ^K59 C:,Fg; AKmQ!Ϣ{]/74qR$s{IG}6%7ӗ750䭾 f !̌RyVg!vZR6BF9},,*QJ 4eUuhbvu!Q7!cMzȗ y 1uJ<ņW˝hwh>uK8',ilEaL~P1qײ۫"\ WAF gù]Ɲ ytÔi0^MۚQ2S'תb5hX"u0#IaxcX ڭ5NV+NJ&04znSc.8n#xMa)A=TU|JK?ݚJhlM7DA^MMꗡ, ,i!=j# ( ٩4Gs Hvc5Z}`1 N |IࠋB)ȹ7RXkQ{kӖx`{ߝ>0$#JT܇ eo '[yKbtLe(IQ]ۋ!VQs (Ueهytb G-xy!*A3Zv϶6vcBǞ>z@%X_0,OXŎ+4 M\q5|qB`@^d8h-Ϣ07aCf T0ΗQ}kz/㔥2:]Wuf^i'qtZ=οOjC-e=Ṝ=ØG~e,NAb#7]G\s-Q"?MO!{q螝O;~گ=/&Fz1U4 J߂hĽ! B=Jf#"VԶ&}Zk`9U~$A$mWʊ?`#΍X၌A,-xT@f^~:b"D^H.}RAUޏKN<#~?Ef$>B'pyܡdȊ>);3fnlcC6K}NpX2kdlu02L:J~uʀd¹iF\]]*Rǒ(@XQA͞T$lMѢb;K|WW4'MV}њifާ-6(yoe7t)i]?:ۃ\0PǦ˧E DìAnAm[^Dq(y `5fP7K׶fAUkVE$3ŪX/_e?YAPmj" JO#:2q#m>'㣮f;?آ6xpE8x'IwwӠ8ԙw8t>/W#9 ##$K:~X$ѬF /zu'/3'N=kX`PlڣUCRnJ$&_ "tV.Yy\t@:`?[3  UG3EC` RfkZnyl4z&$C/jj~J89QU@F6|&C76(l^9Ĩ%&`PB\7\ #TbJ1EVZ;/ } DsDc1PL2\keN:y+gzs;'ol3"uuےH칃u}Qlk(o ]pB8.f" ֪ wF#>$"זZʐZÝ(`bn3mٶBI%k7C8%3ER4=e)n{f9ތ4to,)o֌}y2:rnVIjmq!Ѐ^Y"|\yQl8m/ X$u?u1:ß~,7좨K_*Zğ5/S`|QaWA7!řMx̳,l 3Ig-Z$Es<<>{BzzTT)~l矷 W>R8NY סv\E?OߌibSrwxgJ=JȊZGeYC;:@}.j&!2 y3ă0֢"͞Mt 9qx'Q2`!y"Λ/ $ݗ0xF~a_/Ĥ;^+ӽ7C'Zd9=lב )1h0&{s7ķOU^-^srGcR{VrS4Cɟc1 ,ŴV4x. YQ]Fe0Fz9 mBB}1e6f{1.޲e;ظ&I$࣏c>sR26;Ap&,3]5fz S`#)$2tk dLƼI*焉|y%ଜ-qGl=ySdAjKcHih'<෍2s{-̢ղ֊#iT)')f`jQAH[/f,vZ Z"}2F|A-!Asosҟ`".xBPjL;`1T%I]NY(:NܾPba%KH| W +@|]Q68v NpF$Z@X4 V[H%8/&k&g;n1 0q!6#󩹷_Nh Rr;M*Qb=l/WW4W-rm&o~T+mas??"X:uGbc,Ts3Sz Vߜg9/x:(B}5y>zf\+ՄDL,2:j?5UQB_ϣ (E/1Vb]p6qײrFȖ{F{PսG?Yn}xakxgXVTO"鞵;{[M8 A\!bW\t"pF*BWNXTV<󅻼.+c'@:t2 ?_o_ёვJMp4jB`B1lEjH}naRD M1HnyC Bsʥ 8lZU^5Z0@/߽/j=}I}3+z]BuߣnQ@A]^׎_v8CCAHd8wj@:EF>nPx?':&)5EG/"8cm`<e(:"0vڞD<8HvQ9m2'("k9 (1$k,BP^UCwDGfͨva8 I{]HYqjZa0'q5і $D 2yv?ft`)RE8\C bm|  wd4E3>g$;ow(q|nZb=!"AY:U"ӫw?(h7*J-" (e)kPjjMR~1DM\7j>KYnж?ΟӲ~?I/zJ ]|,&\]џ?Sg52OAd;H:,F#ɬQp1=Q`RERt >Id DY!AHF0TF1S†APX0  3h\DvGb;4#.Euz=,5A}6~2:M#Qi(^:^{e۬.֨c#d& ˤ:Dwkz]"zW.SrjqEg4\Fķ,"rzɊsd!Řj4XEOG#*-'/>bZ8ͮ)l%e*!U~od[Tvoc~5<= e?uh"t*ʜ]|Ny~&YsM4 ~وaܶYcgri"L@OFUA΃DZdB'o{n͜aB(^S(I({_}tJ]ޮ>ձK=֍r:e,W)lLn[ t~uTVib fP;]W;j"1pk|4!z9-l\V]05pbʎ4LP>]s{3>D~1PńRz:31 o'v?J|cr;Ǎ| ^ʹVu6Ok%1mb@z#ݳ(hR;{xE-^|{Tz"Ŕ^BL,o2^Wr^ !-c?w~x@lԻ:lhvo%6Hgq(3m0 ۺW n=@=oA:;drO?(׫a܃8ǔFɨ鍰TQY  [W"VA,xǎLݙ=n]Խi7Fy}bfc”8"#qH6#GO0C;Ǭ8aɃjC;N^ڦ_rDb+#C#_Xa{ԷYKdSZ=х!3XjHzkLJD~ٚPU:ZL8y1ZILm&T]cVK+YYy aLMIm&w3D]rӥ ׫V&}R A .9èn#҅]PAn <B4(ʑ]%+KE%[5T΅ #x2.&j֮)%S9U86CÿaKYyD'w4oZԫt4hqnNia7Ӳ\"%!9$/W#5uU1%UYˋ4y者~{%ӥBk I RdB7rf%5bqwֈY/i[f3 9%I&;8ĥ+7Kp7kDXo5"^l)~o5RhbRHUg#! "7^kp )2SD/^:fG ab8|+w ];FP[Q DW/|8x;@'aWBv|/ZiuIJ/^\6VPbbʘȧ"I0CqGɠ -Kh\m" <Z(ǟfPB̋r+8}ʀHioOoSZ|n~F쳁X (*ф?]oos=|9EN3Z?`f&0rbcgf0~\6ŷC@aܖ%%sI$_WK4p"$%K{8nXYXOB{gAiYT(Dusj쳳~\VP>E UzѕV3/ (-z457$b"w; (8$dGv^io)[&C6:5?@6]]qsJ!ѽfʱU-ځC?b~f&^w}#'~̷jXHkl'~RYemeߖ ~e,w j4"֜y @h8sf×Gz<ބQs!\XT *N"7Ff"FzI,v^W;use8+O,mzJQS {&{v"<`ӞDq; ='OqjW+n?O*bD~l򁧷$94zQbŴ~>`*a1}9`{"+ ڭVچĿ]ȓ9Uw11w'׳)λV 3)v;sBRo1[KX9Dlpvn[ 5M5r]NE2<@DXғF<~h :`$Q^]XgsL>˞(yͻb1yH: ֪*6"e%(/ָw AB?U`#T.I'sL )(̅L 8A!yHivBoےr9E;4>P=#5Ǵ|K^/Aw!;9^wd^,w|W}i]ƏCmߑӪ}7b:L6*~434lJq!4{SaTF M.+%'g<]5Uv~-!҈a/agY}s҃(5d؃>GHϋhhPDL%xoaRke2ӶiX?XD>D">?[" }R^?$U!|ҎO0x]l`7(ms4b>y${G O_dQCXYģ{6+/f`u'a$W~3\,gbE;S~b/+8clDFԼ8Ci'TBӸYk?m1lk?Y58GH;'ml4Ϝ9D.:Xs'gO3f֦G҄thQ06JeR WOkm$#a/-Mֹ _d6RO[P q/0q-7嗿~Aq_[?GPAI脄7okq8icBI~*y>'A;f\m gE '&zU꺓ʯk5F>ZH2@Ox;%q|T*l0 >d:!Hܠ]R(9N6* n8i YX]KK=SO<}NNFy[OF/Kq@kЧz v6]Q A=F@y5:dPwj;'$|FVKRhdCOaI|"W}4BQvLB"~夎`.``V1ER"Å]:UP 2'OX_Կ;u8`4ӠÂM}/U; 7>>r ;}hܠlBvZQRc X`hɊh - . =^sT߱$H A`bT0=R 2Nl:̣Rl!|\|` RWJ6=w2,$E %DNj. D"4d Q@ܒxn'KrM>Crgr9"%"|>{& X8(U++{.-{୼D8Dh)>3},: P*d/ߜ;e\M +o{,6D'|S s(.6GNr!*Xͩ)o$4 ۱Y*{U}ϫu2оq0a0.Ir q5V#(nZƦd/Dž/\k8K ߥڮ|wZ{9f/nr"F-}~.eKGxQH w_UٚpA65-[\:;aSd0z7pO6 N9:1ϐJ,w C}4$8wyd6Jvj 3oO36+a:Cs  FK ^]2pf&s{¬3T+w l/"YYۗ:FʥYdmV-a#o@E`֋mA)i@Dsswa w\H0]s㨋c`:ŊS ^.wbȍ= ʊ{ (Su)+ɖl@[ܣԣkc8c#"HzڀU;uxa Zw?;4'~6mP^{%(P۪:k%W<7,'X| b}:s{yvxz%HCXZDsO.RoSaO1L[ WrHZ@!$m*7<(hk:yc]p\f[bV;4B!FQ;=)dBLSPQCX 1tJuư2ɥD})G:#ӼCi1j eTf=I$7d:d1 u^swϮ)dz@%w=qf$iN~ f U&ʔ1TzDz Sܲ헌}DZ@jǍ8֟|VX=R7o1 {]lsO z}%|NySyAz ZUvMNnQ̺b<gX|EpW>Eik-w`qgQsS"g5k[.=-RVm4ޞ⛭$.1D=c*ֱfۜcj2a4pԦv4; Dq;y; Z)U4 >V8q2xFF`)YM?k̜9q qSIRGu0I"n2ÂrB= s/+7A,ahw64j9g89gόݮ8K3?dwތVt.ٵ֡\wD"9>EvF<!:I#s I"8Nu1n (w}ai6xibq[9˜>O]'Ѳ<EN]t$,0%f$و7T_{;_fd!GǷdsy5b;۵*"7/RQM$jt=H8N͟[\.5vX`5tQ{6CP%]5~m9"RH)>Nөļwy2lI'GQXMƟ5]pۅ? JNHs.ؚ5ɑqڈG/xkn+r޸Ds(uDn8x+Qуi4; T Ryܦ[0k[:r{Kσc xy\TP)AL8h 5<1mV#z!鷘fo&l9'q~ a&e2gb=W[=+}3M$D7{ϖ6vY01"TdAB(Ai;ˋ*y|*,u肫y~6/\GǛ7ߢ#<] RcĒ KlJvtR23g̻eAh pn}s0QccedY]N S8MjC2] &c]97sP\۫%?1 yXzFL&#SqAv;t̛R}uёc& \4x0!~|1}%`~j:;1$bNSRfuhh"H 8+Ȉ"zLaEi, fyUؐ=vl7`>\ygnϕ!p܊c%D >!U 9EfF_!xvy*(',Sdx񼰔OgdU,lDj1HӖ[vg\M3P[`E;ؗqj7Ym`![KJp X|S>=) &Q!sϬ` :+9” ذ|.6 `<4¯Dڪt(_vY^ز~|uP0ô̴Q6j#N&D!L-YU=)]Hs)pR;>c(yΈi[އ.PcN`>{k5V< RQ6|yH`[Ev=@5>55M>q]^?fɥJxQc3NTHuY5xί+_`âG; _B:BvхG=۽ZyrhGkKVө [?hVSWͽ_90'.7K-QN"Rf%DT D3'Bx1byxfnEzY(>-I0+4z|dd!=-LGʁoL#m < Qa-d:@$㚉pZquWG"ⱭYkβ1T}Ooo\/-C"؁^E9]qyc6B0*9kDA .)(ei-%/DkYD A; <BQ @CrK]1+:PڢT_ ꚓfI((冎ۗrb4<'ygޣGnJVtUOz%6{0LV^NW)Z} nП-ķtSW VA ~|;k}$φJɞvE[bc~,ǢWٖ4~^JD|4aU<%@HJwTjkw!^pĀAcB|h,Y:@}+?W=""%\ˎ:Yr(^h':SWQ `!27ǮII\mjoT",g @E#P!{*ԸH^oQ]"& O 9IԘ 7;/,%j!En0jZ.\/\H`O%74Gf]2i!lL+jMR/دW~ֺin¿=>5ѺW}z` %~w/5.uoi঵ZElals< =Y`ߩ5@H ?g[8Q黡=9Dj!+n;Qo͚ `eH:+2c;% ,HƁ$u^!Ur&4YhE`@QX'vR Ipoev Gja7%(9>ri3Wf9'6i)̬c,sXHlEPbbXRZH̴Y0ճ^ 49 >n |!YvJB>ɇtbmɮj߀:gɺtJ@v_7"=ELw|}h?$@[pdГ UUbnbAI?"G5i" mmhUIpC_l m"ˆ7Ǧ=M ɛ?){)+>bk?u74eӯӾS3$Tc3e7y+&͗-_& Q& ƪl"ɂf{PQSr.>9$BɢV7ƥNx}ZZú@Rm.5ǚat[Uo.IOD 1]d$#`0/?]wB^R^"f-ǁG/J{%t5U%[wwhND#uZaoRX9 /GKޓsYܬ)Nn\Ծ/{2ĸXfEЕLcX:,Lhr)wH;:0 U>c̔þo&_Qz+ }9]>lA3wp3'&ܟ?Y1'?tN?Ӂ* !BYhZ)*1!CPe4|ne?U/K;=ΟZ;q7oӧ2ٻ&+w{b~}JTjtH+xPq~6s[b!l‹CZoH'XJ\W|/ 7&/k,;( I_q\ $&\Q_ug.|y׏}Qd =0@)O%G@ZV!(%DZA䈘Y!쮁?< {=0w!T4xz(_/W2}үYzhJZZTIFݾeQSֿ)jj>m uʞ aؘ(_u"7^koߝ>ө@ ?ۏu#IC%0r'g8Lm^?Iѯ0?VC?iRӷsCwհm:,rr3K;#AZ 3n1a ڑтdr+O.Љ#hL͆ NW5R` X! c9z%pWL~:@-bFb u& iޗAQPw 0) Ns^ola{k26;wk~߯Ewt9iُwҞΨl: E[WS輺Q/C/B_Ϻ" ۔[zj8}d͔}gzFdlMAyCθqxҼBmx .2NgdB,yàQ9e,/W穯÷Gmtmÿn6+9"v~˽O^taͥM?1B{Tdx-͑5p/xzW&5i7[:eĂ5b((_kfMgK$63d&"~fV-Mud01eNIevnŐ'jR\gy^o|<t8m( US&G\M ?r;,5ې}_BC͈E:u!::2;w\$:H@愅؏7[?ma]zk,U1D*B~RA;YSR 694sa0H[)`<ѹ<@a 1G9($0 7zB) -E"L4U B]s Y[Vj>YB~z}V>7aW®HK|]د"$J4~E#H#!DTT Dۜ!JI_E濌7Lpɂ7g(QFhn+] D_Vw`tpz2u(Dh Sc[QupgL;#Xi _|! @rr^v G%n ~;ص98|GPkA,1si|謨6( NQa\t?C7 ,~]+O[cf>s:@c>::Nr!$&s4хu46Lz:?G==37ފ=Ł2c%D-j{}!7,q+S?uj7uF woۅcC٪W[3S4fzt<8$!{3>x-S"T^/k'7m,у{پϕ36Eۍ[n _RX2{bC/GZ"זb5%o=uOӷTL`$-h9-qx{Q#ԣTQBFL}CHbZ1%KYuN(R<[t?sWHy 6Nm?Bҿ!g̽âܞ f7)yӹܺyewCl OTtPӦfmF*_ (@rЋ@>u%-EVOT4j2v.Hr" *XQjV+\VH%(͇w%poWbWwvJC? azì5 [mt!b=tXDS^lz rc9UU#6c`L >o^rz6 sdF߉;w3z[Kި6uhVWH87Aڶ|El5Za[׈"L92Tyyl\:vA]WcB͸쭍:י ֱڻwD/a쎚=i< !Ko2dLd9F\HHwL`#֭>{cU B>M[mZֵJOJ_ na d+z |KZ6zMt.ć \fܝ{" >/]>.*9@@$#"!\ŕu߃GcN_Ndycl͸f݆T˻>:r?ɕ#ݹT\ۙ%#$!EUCADYJ&*/ڽ{c,6Zœ`15N8\϶ f0J[~}) . 6fVMUM>k JF J0u6löwLonAȲOO`AQ\yX^&i]3?^T[tE|%PC59ZfJ)BuJmٕD܅6?n ?.pPDf-z>*n|tDe.i5 tVp$$21=TIqvݲω8 '{pbXz9\^F͊QmTڷ (VGFho,Ҳ|µ荏S)'@ɻ۾QY0x~(pCB:ױSF;x&/`ygf&69"M*JhlJ$daZfȦbV"5)y<(IOSWv¯bMҀv,6 ;ú%n.\Qm\̳[&Wu) Ά}ڏ5~ȋ\s\-S{}gh` QB[T%ﭑDžgmǁ6wd_i)(`Sk֘~k-XFN1 lC"VE\/ClXmMP7sdrfWyzzt%mjԑv/ 9#!3UlRr+ -{ p[˝`rJΧN9n 4Y \Ј=A5FWsg痸LlX pr_;[-(#d"H7ͻ텯@ 'EM̽KB`?s@ H@\Ć $UnjkudZP"\M#` @`|I-RFLِӡ4$D(κ cGI(4PSy`Ї`0F<%7j'F "rZ Í-Sِ6Z+X5if 4Qqv83&lb |IN.b 46X r4 NwYhУGa@cA!nC81 Ŧi`H@KKsQ#b nG,uDx Aj=҇> %)I:99/|46Zg1Vrc)rݹ :%ϴ.t{7 _{Na;<\0º)8G l8ZRL0l!t^DUBB{;7q3 TޛṛMֻ-jS &`Q^s}{cfU&kd2㕖eIf 187juΡ¢ M|j 7eep|Q $O8]Lm3xL>23tU-'@Z5uDD"t m#Zav yj-N4uQ[Ӂte93C[jc-,F8D Fr7}'Ksx\3%tSuv\afӋ=8|>_]^v`:p\c.ޤaq/HH|yM(1q9W>1wd.錸dMK0o-^|(W>^U?"x#S_t;#H.x=gwWՀĦd״S'>k6N WyzA1LjE]j1i@a]>y{?g fp['޷p}UxRb (HdB^/Ip1?wWBEnʌ]L KjP\<^Dz pna7*: QL{9HnKCɃU< e'Ơ^jc\n45Qu9GR\{ɺF:.|:l *^U9e] ?E?#1d9ͱbŋmmcle2}'4Y,z}(>h;[[wd#[5@"Ԗa){;]`sf=^=y0nPRXH.;zc1ڳAǠNCmG-?ƞۯUdnc!eo7_7ؖ\$JX!uzΟO(W/ xEOCm,QX@wrUQ ߨǧ,R`>%Txɣ4\Gb{gxBkP]@L8e; ˔?ulvcn5\um'+29w>s6 nƴ"O"ﴞc.&_ήYH%UISv=mIܘpSRyb#`+t,Ae>-B",I$7aÇ*qCkF+& YD8FQ&>3@aT" z\ 9רT[a k@\Cފ3D6x>ғ)Wo\$pYdJUbuㇷ.*&vL}ťy;|DS3/uw^q_wXa`,8y GS9fT6BeA r .NBIᡂ"|S> RW-@c.؎A: 㑙We!,qKmOA`Dpm_]tlwPN̛kľVn8 <ʨ w~WC!Owћ>6h7 ` $kǐ;: }}&b}Q`)>CC#Uԛ|kzC,ve 퀡5̐8DYeC rc[::QAng ϳeb{¢~y)+#; IڏR2t dpۘ@ =[CU;=EzLy=GH& @{lXh!Y׷#OW z4W45.规eP;.Mӆ_bN'/^1fcGY:o2Ga5p ˑﳷ; #OCe<61<= z)2!BRJ T"YCSTKIEf 4!q% !M0r^X$xb(JL03UD,J@>;A $| Q'ǰJZQ-.C2bb;WhkX|a9h,W~,V%(bf.#U3 @5jʺnjSݾ]{xb?F yY;K'>~ML9ч=kD@٠PwgᮊzXg4@_=mp,t*ܵKoO2;l8t S%# Dxj8}d}<@ys"Zʀ Q)xVљni6T\F=Ae+W^Iz׈_}?*?쟱)e﮽m%7Ux3,ᝩU>mY m)΃TdFF~9&c;QFl ҡHT IP24R>ty X\uOPEB ɘmxZG":⥳Ԛe~  : 6뾌_\~SQuU?{ÿ5%9g=|n(xQ^>U4` >貯Z]nt-~41Vߎ` 9S>es-ws]# T7z^|Hbq"ݚ#v oho?VoiTp׈v7kyEm0lI9l{ @qO2:+$m))mL(Рa)ev=Tby#P F#FcNkUwO?NM R\jZPq|EA}. U.I2B|zc|z$EAS2!0lÒh*?d8 +rӕgSuTLUiƀ)$%b/ePά^̼[Dd >4HLX`߱,xF״?&\z"-wfZlFzOy!$FDI"g>ZB!#']:Ҏ -TDz8"vp?=g︺w3O:M᥇;{.?\6Oq;l_rۜ' F?m2*Vk=y߄'[%o>+m owX陇%O7wtk7YUU'@P@>6 ~xr_6B~*@"¤*!Pȓ) q  60`HPQ߿~/]~_u)R:eRFKwe@؉$RC_Ķ_YXTa 6U+Y?mIlZ"}e\5⺱]@"i}1_p 3o$s!.A)˝NH}*T7EwKnF40˷As!E#kaT!0Ϯi|ek1nn;jJ&4ۗ|lѰe%2eЖ'J<yXP5oK(_j fv';D9Ozu~%zh:],g(qmoc'}_o=`$­5w5 t/aSf[D=]h$bn" 'o|*v lkQU|ʿ,3B^вͩ@L}ܾɧ-':;kN9]ZuV7lvK3Pt(S]}}d˃D"P!Kպ488/F68Re[1(A> p c]Y^WɧA7mK!Έ@KH qiÉKq9w'ڭ ?5}u7vOzplOXS&Sj*jzr=,5>x@@KsIQ`aJmQ %lO#*G]Wz } hK׿RzQî>FYIhZQu@ Q`p@@A lU@>Dpyuc}Q(^`EDGWXN 6Рh# Ҍ/)Stu6dz/Ha.F$E iMfƥopSY@Ea*&_G]pxkStif`ao2b~\xr!Jgݚɷ+l5AY@x^o^fV7(=b@"fBW{RdBM߭FNIo&Fe><|=ٵ-˄hb_Uп1!ް~Cwг$mŭVk\A\*ዼ=4Ax$SdJ7۫:}Z6DzڤJ\/O9_GTϯ-//LA`o+%PH$GK9 ~!u=^-\84N:CIU%Ғ؅oуOoym>wtdo`*! ߃sQj_͏2O˾13:{4iFawknݷ*