summaryrefslogtreecommitdiff
path: root/kernel/bpf/tcx.c
AgeCommit message (Expand)AuthorFilesLines
2023-10-23bpf, tcx: Get rid of tcx_link_constDaniel Borkmann1-2/+2
2023-10-06bpf: Handle bpf_mprog_query with NULL entryDaniel Borkmann1-7/+1
2023-07-31tcx: Fix splat during dev unregisterMartin KaFai Lau1-4/+8
2023-07-19bpf: Add fd-based tcx multi-prog infra with link supportDaniel Borkmann1-0/+348
JĀm3!hF,w l],ٍ$Ek,Y5)KU7w;95T!#HAt槁Ig% O`(=꥕ACT~EďŚ~X5Z\J.'yܣ8k3(;XF4pJ/02"D~B{1Nj|2P픫b7 4^% \R\Zܡp*\>'EG^ߡd6oNZyL4/x(AK-;U Uq\Ih3)951}ktx肰^, n*!tѫ~9KZ]\*ra""+S.E(E7S~vPG0 j]Aq38fvGE DeϧĖ]/g:)J/S15(3UJAO db!8gwKv$Uܓe$[BW|!#,bW0Oq(Vuhжjb֜lD|ya?-e7zA()/w&"PuCEǯbJW`DP[^O`~@/khަB[oCRhߝ'Jdt ހfi o#I`0&` iqխCGzt>T_.6:~Q:N%aӒ' *i^(dP(r !S gl":N++߿4ȦaɊXW\S% oDCRѕ6)ieST1wwTљx OU>tСyyi&ga7ٴYOj: YW;{>ҩ|%@஠oDw# D L\֕,4"YpAzͤ=i ZfܟA˯,.PF|+ _N(v ]JD1|xn3-pJ2_@K35vFvQVPY2P(hvCxz<~# "tO)=FV7UDe0E1*2̞b"fڌ9P$moG]+e65<%NUj Aw}<}):F,CM %5-]*rD7d s#Ɖ-kX#ۃֺMB aOe?fO65xfȀ$Re&zfWF紎۳Ի?67M"؇jaљ-x om&(tgpi_/Y۝ʡX7w.({u"r2_ۯ:SD_:|?;O2(Q75x5ܞ#:MH Tbn~ZfU ;׫L/LZmYvoU`zE)`m*E ħKB腄6p1ܤLnk ^4;Tz"3vPBܡ!R\8H. <@Acz~1c*-óF|!?)ZHNxXc hOk)OŲ Vɨ!>K<) ϼ3WmD#,;<wQ_b(j8Lho$ 0WR?s 4vpRD ӣ0zWĢ|@EVt ~ح\Zw .bYRHZI Xk i;OhAHT+bk:ukK,$ #(םp勪X חqTrw*_YHRV9XIju<wwv$0!j{ŎKT\d&#}Ėz`XMJуx/̭?֚cX}s/t{Lo쎋'p|`*T6=G [m0=aoHD.VsٽT/i?О4M ?{xj]K&WD࿽~tX3c+V_L&P($!eʎ5.l,UO ` nQSd&|) MW8p韹bGPf>TyM@ "ӼL;aCT z@@]A_hcد e^%]w5!L &tj4o0VXTfyi4kꌗhXЯ饏}c4VCgMIKm7cY 70c{uN* `T luHE,PPMun/"އ@tҁ "dG)ةh; O(qG MEA wN0^#U+ә$9/<-a(CER{#Wo\J~PM]S;$J6`:^!E_kq@RU*v$mL3]oiug2"4'SlfI[ITMś R<ۘHQ>6M,hLJvO[ > t3nܞfrbDH][ =i m90{hCG?|8mo_@?7|gW'roW_uϿ6NLJ^j^Ĥ%W{{OG.T$ #Ggt (cb`nOڃk/FޡhȾIKei{;_&T|%IЋ/.ٞ"]ċ~x]Čكɨm+%]@$uLې1GdFfDfJ գqy (95acJbլcGx[RU׺]l}?ȫ!nYFx>|3+ԎL":tw:_l 41iq;GydauXt6 y:־7Y3'7"vLtT%wCw&Ո-{O]u5W VJ+Zfq;t$R)e15 X۸'mR{zŔI&[RZ ٰ%3 :ҀiS4niZ>}9z ;,E$G~S#{/-hXWL5%utОKDahrY2)fYgv. f{X jTU͞vU5qG)I d=5fS ^Wc&0XkȾA窱u+E#? "xtl2`oQXart;+87Ζee6(]GDpI\TmJ,ecQT항gwuAޙ`_`${Otz٩vSm! >RtpTm)'>h eo҇aSyfZtQCALR?aWחd>]i$az*!gf ;ijC]J3%b/ ,X1fyeOWRu1'Vd5PR9GE J#q;"/6" dm"qt !yKdڙ/Cuփ̱z趪dĒɈn,6:4OݍK؀%;Wkru5|'ydnYNM6vꨦFSQM&D :Phz#5nW/\ ]Nu_$`eG$mjT:nUdbZq@&BY[ߦ}j.dSFVu2x$H&>YA]FAAHZUx H$>ŷ>K5dnA?}}{ZsZi4*͊'dN2_elzuӗE P{(t!Y]r1 W H pg>Fo;qAN*`XkC,,/X9lHG"^KZhZ'A3ȅ2tbI^˄9PBGuXpH }uK- I9W5T=G넦!,Dg%U*b]jM7Wz4~]P%EM/ r*V"LvdH)+>gtx\(d3];Ӄ4fME /䙰?A:MH 0H&fb_ nUqS$3S.&U!%WWvED{g|^*eTorpIܒq;@v鴧hM6ڪ6m:TK.$r َx[-fq,-ev$ vd@P)xzD4u<ҵ:Ov 1|v"Mރ4:<> Y :/dHM\9ȃ!( ?II.^(q Z^$P&7:7SV&--8/oXcYqɏ3 -,9> c!ZJ\'ĵͿHC-._Ҍ^UJLhi!k~1/f5P.<=~`G#{ Oye~7kݨ'I_!$_lX V,8b;Rer~ys;g4\K&>XyQzJknꊜ5ah?NmOUFj>" 5܋]9]v[//-۽zH;Z$jSEOdAy+e4u,|HsxQl2O"BRHٶZTVb9 L$n\@3CVӤwUUWfe oH/zu\>pmoᒾ1-ć;ɡħUv;d$BHgbe~mI6f%٪U%beYDgfeڒlybǸQFj@G^~dR 2n.׫Hbv M x xo#}zݦ" J.jAv{p{>9"t['>(f>Ѐ7GTM^:d :x>DīU^v4$]FA̯݋dCJe톝-m/o_w1:4tf!4`c3Y>36UDJ cFޮqT1="@.gޮ^9#XJlUɮZ\,=Xc]z+(,9Yrewh ZV|PC+&4H]+Y<~IkeHpǰ|63y󕴹< ~p-*E¦z6$ar~{;ϓ, Mt+]zOBwS_HI6BsZjm,~oUI0SOaz zl7x.#)g9WDHG k#>I0,[s>wSV-CCBN0$,80BWohDG2ّà? F?8~X{+({=Hf1pX .}m:RӐ([HKFjbN|%i dhJ/ šق>6ꀄc>iNRYkd&4l*j52diw] SxM&UkYNޜ'zK#˫NN ϝfF[?Bg2_1G!{hN$B\Ngz[LWRsKb$qC@1'F7CuG~=H`G Z 6j4QRc> ժ1< =e&>&{%-HC;Zux`.r>NA'-l]#dP)q$C??sLo? ! |'Su7F}"u$t@Cg26(,X08js\}%EUCHEJYz$T%EBpKWUFJqJ-''_z n|M TZAr~y~rBoXpأ`e}TdGBcLBOG'MXkHZ +7keonpidR,py:plF]]+Wv2#bw>7! ]4+'ڻ@6KQ55M?M\2۾}0>jxQݮwk$jCzo2T}ql^kJzMFIs S4"~)Hv/!5Sz{O/#60P+950ʹ%\ B#iX5]r ]`cIBfS{,Y1i,9=QsFtOˀL j)-G-ޏyM[\A('9\&wsܐ)#i4Arwć N4+JC^;`I'ƨreR7 :]^ꦉryViօ&泇YN|λ,{<.-- TߐTqʐ!q85C/ס2i>fV:ҝj:HT݁"U+Qyn280B[lH~r,k A8/6o`|%:r *UZnк@"Uĺ[_l3Nwg1 XdI~IZg_,|!.; y5>79 o%.DZ\;ˀ9Y鷠;ؤAJD$\VUd爌'DY{kFpLwxO_] Sw,z_$!2fAV'<(ǡ_jI<'e!iǯjOֻ5=^݃3.b՛"Jb(4MR6:Ja^'%ѥeo7h>=P&TEcViH*dB!UD^;7#sۜ,Ჰl$?mQ//d!:էK,ڬ'ȲFYιh5WUp.F[w[~CHRhhm.lHb|s={^/$2XFt$uF=-vKt]D850.h"qgcIv$Irw!ЦǢ~ћ0m@ZpQ'uV4>WL3w\S. H(C#4ʧ>/'KCG t$nBS(zAFNM<u~W@mQ~,C20LŅtj2 ;xCêЖ fD A.ed=fS72ipʯ~W#k]gJpIUKK!X]rvjj7 tK7ܟTKb}<M,hyF$>ȴ װ`&_ lr=Um5hjNUq:U:UI$eSW&J S/e1u%҄T:f7 *s6R`&]z(<7AfKaJܣ~a~y'fgWDTz~_tDOӟIPYI_1Q8qZ,B4?;ˢ׉;ՐrYs4(57(Q׃{"9@!|7^UOx[h/ʑ<  %y1mz5!h5"cg05`SyL?`כ?eP5αz>1aR"| (qǶU7wC.fMF!ۇK}z{7Q!IN;SpcEs4_VZU( DvW~'fPv>F5TQGO;@"!IGI6դ]5 k-o gdPPj?A6IVhE%E|p%P P2o4L6SkmI B[; @H는ٯDH%iş8KہM9:EM^pѺS+@\e,5=ptժ$-+!Z]%#-eZ6% ZeK (=P' bojf w6u}2.R&_1vQ~4@Vnypµ壗ƊkHBclնv]"¤#`O.fjG:&UʕV+&ذA8dؐd6tlL*_~-H|':udiqpͽ}3~ 6EJKzj0,1Ѹr5'1 #J>1 }J5GTp*Z09U.*!U>, jdl^l"jGg#FÕZrd3jo-Ɵtꓺ=GMjJOtXF3sՎY$uؗa>?Bcb:Ml8++5 /"[Fye:=䡭\kc$OΒͤpP ⡺WH^uKc9 _jqk!?w5O>C0r$!SYWR}#0Rq6[Zi(gHnT*7@5p;=Cg>y}uƓ{5$JRb dJ|8-+.vS;'=Kٝwh5IlT__ G/B˄#8.Rn[?}bTx[MˣDC:D(b +ox: A ǗweuZ5K8H,`M0Y-QYVf5z~sa6`U;]F&=@vC|'S6 ƽ|Ϙ5U{+vCJ4!,n@J@r~ѳqsY{oHBhP/IԤpB1CVrH:\V`B\7b$Q4ɟ-ƟgdEo! z6Yi r$UG#"PΜƢJ MK٣vJ kE`񋔺pp$u9jnȏaإ6]c}U#v{?uhU PEL%׽ ]5IvlrEE~!7>V~8Tr(Vj@ ˱!x#UR&G&<;W~7j4zUvQџ(|H`5u)[GkV \#N!H>İyT@ind.tՍ׫=2Fhqk\RwL(颚q/$k4#U[7!Ƿ57pYnsYwS!kZ3C s)BYm*8{]Ɍ,OBebs 9d ]V4\E/|t1L%fY{&Ys$ <+YO磵lL kŇ6S$BP@e/Tʅ=-w@DV-s]NpO2;Gɟ7jz3c`ᵳdtUJux2"C ,w O;ducLB=d L!Kx/N[" Nǜ~Vnޡ{G[x|WE %9/b= aM]6O;"hCy V0FM;K`Kې|pwQ. U2ss CZpM6Z:@7)h\qd.4APp0D4\gUDxIOS:HL$Ǿ/aM2ZEHAǎڧ d<)դh8?O8%[U"lo91"Q.gjR0mά֑:VށaT`_+|XRd`nxVHGkQ("cv .l =SHRo7 0ùI6%tc{H9RȵAt Zb%u=W"gN2 YJ^ar251ܬ &15>?F/Ȍ%=oIs$/!-%L]ݍӘTMV|$ bfh|)m sy[|g-}̹#[Z1 2Y $?q7[oB`Wֆ EwImholi||jhq4~c{,n7oڕz ;-v/ndmU:IuZ2 " K)6qycC~nB鯑[3 gb:L+si%'Oh'~)+R+4Ĩ׭Z)oN˥.ƳWH= 颻 3 h"O/L{2^6̀IqI@C0PJ{fVI)-WMAz6+ AVt{S{l,[:풚pS""҈kPݡxB`( > ZLV|FC|=h V7ɠ1jkd)Muk46u]7 J&:*3N9l:4[ V 74a_EpS|+ݔ '_!NsdsF<hĪ>id.t.>o)1wZQDg )N13vJ.,C+1iإq/K0|{2"xTuk&&QRHlVl&3+moM;6 T㦿I7e R-H["~H ǵE"]-# ݺsnQ2|Rܣ?;U:Y'[su5G] fH5<h"}"Qm>r c`^X?֘7¦@JDžl`=]Naj}. X0 p.VL|۽.`wPNߩB7Sb80- q.z`mn`d̓elʇC ^2[KM\[`oPB z YѝFuV`15~C( mV|"B-"nc㖞®R׼$xR[!K`ޅ+D?FWEKݢ&2_Ί#mooL\z*% p,BdC?s ؽŁbD,egάFp=ɗϢe +l5VMJ[og,Kvs(@|}zf{qn^ j*%vz+uNr+h|/[|2B3%/Pj;8fK]HHc}f@ݔY  =L 7{u2=u~k׵E7^k~+ܐԴfU-ȼ+)oґh-EE:uHst{qLk-V N""آnAh' {.G-t'ےqXd &87fHPi< NPigrњ=:'Ks== h~ŅU#sնdkj[ȁȻH>j~ofZѩʄl)z cony\'DrKO%x]j=!Iu*>zF4ЧnxlWy=AK[΁=Ӵ0,g,0.lL1p0+}0=2HUju J)>r6ʵz}Cb,le,6|! |^]^^y 8U=!'$8%ufZlQ)ё4j(fLƸlDi[Ms0Z ul&Zy 2X`*s*${( 74 %RfX.qw5?V-M^FVݓ+?o"ԚmĦ↙flh힩Os[!Jak~ǧ~w<ޒWH;8mum3VI, {l˄|b{osMnDmvF8&"Ct]ٴ2Pv2 1h]RiMHV/Mۑ2E'$ViyRU?Cv$yYN1 .̅<̓S]g gI]+I@ZFeP+&  =q?M2^hrzkC$B Z;V,D|<ٴJ9tGw Ihس@ GsD`Ki? ^bǓEưF:-1 0+:.߿SSw\j6˙!IiC%#+i0I)|V_yŤ.p£/XDɄ%ޑEU 67Dgzm-_X|ɺN;zcRPPuho(UIfehUuFη5'syu[RePg~Nў^~G"SoHĜRw\qPi%A*iYRu.zIiYޞwK"_74,jXj2BjcJ.ZvtɗQ]S; v z_𫈾וucv+RyO'՜[rF.F"*AÞ")X6WŴaLJX#; UӪ5nXϫ$S\K p$;xsu77 tG-N bɟ򋇷O1fWuRe|G~Y :y~6&&YfUnf@C ug,޺% -txJҌ=lÚ~&c59x8+Nii`Jg(;H[Ӳ\OTlan7< {(ɩtBڣd4&m]Q`ԏ GyzAz c3To-[A)8FsdAhNl~oEp% ! 7]wTA7pb]4p~TjX)2 D=v|n-3LHjvy>%=4;G 6B7&7VnGr;Rpɋ#9 m!D3-x=ه;^BmގaZ,}Ny⯄g1L:b ' I\[ @}F SV|]R;/- w@HIj;:G\Dl- r7nZ&ՙv| $@ %ޑŗ.vf 0!O֮F\X)} ]kYZ'ΤAS9 !rFjZA?NtiA$P8-Y,Q.Жhe#P)Z]r8Pۻ9^nv]t_)l˦ };AzZs!WA;[XFk'2oyLnOI? ] t ٽ)-r1̣J @h tKM5AGVx(B7hgZEkf~f|g?8E)]kg|Zc:*:ճ^L L8p8XK*d|ƹa4n4{nG Ah:Fm n(=h)` @&sT~B$K.MzayT" bpHoG{2rm!C?`{W7F`Pi+ףxtm Ui|G̩)b7ү}m@ !hT**XWI<-jO_ mw2)]QLk{iT̑} \"=<~owKHrӒrp66eB!sG;@ɏ;d6xû"&`Dd? hxcGVSwT 40tꓔ<ӲtHĶ[Հ0+'4P< &_qGh ݎ+e0S>)u+kMS+@B<8I$px W*&d\%;eQ)öņp)\a EtF?a%#JF^=%)1csmoҸgR?LCi=.^PdI3Yì>5yg1z.0 f]Y?@ ~p+F dq"ջl]>D E?9".]aI,[g-# JmBSgȩp8T 3TQh50&5FX?I=$\s5p{FAUWɓ呶.Mq IDΓwx[sQ\q@ՉlGa%'Tg=\=G|r7 FuYħvŃGj#,ݷ zGPQҴ dߢ-hZ<\8 Nj7{5ە|v]3_; jx]RѴяC-7"d q*¹So4H'%[1\gF/;E|Ez,}6WwOF4\Kmw&:r6ʀI+es/HN|F|;E+Dh^u&zdb%i -V.\ʅ_/ mИAC1fHXNҰVl Vw1z&E*_]lrE|A- u@S"~Vh;='s)ل}fڅd Mjz59ۑ\Pl`q?`A![o{1 $lT$4|rK]وQOڔ݄Η)(}Wvִ}n_;7,<“3c{D3&1qÝ WƼv˂-'[5ףuo[{#'UwqtOr41Z{h iOwg=θ9&URHJƌ6QjU:^hGszCd~4X`HԨru=W}VFnDZ|oX6ߓY:Rpn}<uP~^sAw9adήBw!#_"׉wGk!m7?s P# C9ّΈGW\܌ZQZաv$ 9[MsnrIL,#0t4YZ*+tSk[N`7~};8Cq]k'#4Ojm+]b!-q&ʒ<% y $H<(dBb$ ͷ '*mNf|/9/Ke[2Ej%^^70JU[nGWХI_$@[dayg>Fw.#ګ)dtȀ>Fp%FN2ʍc ѝgj|ѕZ\ga.U 9!XV^ֺvMl\e,6X ?N6ۤ##ل%5Yd-\]8`S\z+n2w%tg2cA -q}_QUB]SizPPH+IOgFc>ӓE@'Oqtyu{elLTk]Y'+@ 9(qԳ(U/I3vS %MϦ̀})Mw ̭꒩eAlpUk=Y+ZRő"si #Y!^6ٽƣ=l@~͑d rg/TI.&Ѿha1T_d^Ҕ-6SU`E/Bђ. wt[DĹ.}RxkY9?" v۴a8{ [Rٕ~=jKe b@B4#&ǎ'|MѢur})TS;an5{>нL2*4+k/\ITo~y $cd^mWLÆSCQ( =oH s$I2BaИ;(K}TvL3&2uhoG2bBV=C+z񘻽ruD:_ұ^{ÊFu_ֈzY+rZ)O͓^oG=m! z?] +[lxO/Jx3D=uh}]dĚ-O,ll^)hݽ1f"p=2s3=hZ̚d )a.($O3ظO:'NpL1X8giĜVs2Tdjj7;55nP,0޴S$F:5@U&%ҫA갋:Pַ>ɖ˝!BDo'Ȳ ӽtzYp%Wd aF Fve((vs*xgDP55n*iPe~rumK՞>Wd_K/bJLfz`HhJJ±'71Ya^_t#3)ԇ!{h^ FIqy8d}WѤV頣zTMG&ͺTZ䥪awQjJ p]ֱNC>l衷G$>y+6}oV$,\vup<:"l*Xg9ʤE*`a}$y#1`{zI*lLgo!uP| #T,BR%Z?k>,Gϣ(e^P5l׿aITJg\(#vbJo+OOϖ^^s+\%@̷Qapb.Mkd#ewV}T=U9$e$+FkFA7SUO4%u1dѴ\a„kĒExxn/{s#]@k[wvc]-z8>2jͮ!)˖f5=Lfr Fp7 SyX} [8& IFVN ˕iW˓tzd{]v^rk;l8$>_^۠1:rcd7JE34?eFPfbcIm?1B8d#M/ӝyPN(3-ɺ4P2t (Mɤ EΎJ$  T.\n7ԏ#][ͪV{4T{Cv(h*=mCFԹXsX^nPDVd&S2VRE Sx #2kEfFX8} IZE4&&urm]bf%.A_?CJ_Q/|ߺ3l(I&ē\L6D~^䜟Ah_/s )g#IN#znV"rȆ;"n ZkcƱ/GcnC'=ne;j)_#_]=e6CFZF4c$ȹOW$x_K9Pw=j={!hBTAReM(AL (C<#}'貶;+hiyMl8Ey#H#{BKNn@_" c|FYG\*uSY<ˑv%fS j?4:FFitFTm`XU!j2ltUu؞N6U8CqdW:zW&Q\h&kc#@{Tnhב˕SH2ŖOȵ>} 3:Yh4%;7Ęٓ( >YF[E(%PA&}ұkքVΘt }H;(HzBM SpWb}yh[hKGWrx*xI;%h` <Kp9Gc"]$ ɭaAˀ2 Fp E%◧\-+[3Dz'a][SI^ojtY i .W$& E jùDKfQe}{˄GK}2zN{y2L' 8"=bnch/HsvUQpr/N^KwGtSY:F*4Z Ѥեk]cu)qM4UYa{0TvAzS^MVWWWNףhUkQ݋PsJ-%PN9,Nis/f/! g5G<]f ۓWрAjfoQH<ЌRv:AۄOW馴cڒ/N~k/$}@&Lf[IAZ1_F}+$jj)SFjYԂǀUsaH:BxajIҔQ/h XY[ AWbG],hΣHwRDuՙKv7xg94*5sUk}=qltv>f_ k87diI}IH|t^ BMT(ta"ax.R@qEf)6R:9JN#;Z23~ڵYc=}-ݮg-j\Aګ(>?S^JDziuZۆ/.jW/-`?p!w6:`~v!1vANINٌS$3efhx}CmK̼Ź1/q"xʩ)yrqEoHexi= HͬpfeG91Mײ ;-RzdaD):H`Y0wlR<9Qd :K ;gÅڡzŽ+"Ĝ},p0,Uk:gR_:!9p"[ZSS +-ZK[ GJDPJ[@Y96$:˱сO2YGޏfҵfq~=gWr? m$Ekm ';vU;hIϽΌmm$n.!t 8+G[cq][ka]{/:I8[vKki2%Yn:oe2j~9.MmG)&MP~L9~YmbB1TwqY`js-ݣL6<|>d/였 N7:bwE gv00rjnlKzr VժGPꭢWS?VI+e3ŅQYQwh%?sw$>B{SC9cT܆$=|Trp-9^,97iSR{Er[%4.]ѭF(FBlb?G-,gz|5qtnK68foNza&j+U_*aǦ3dʯJ-s {=J!Q^:_IyZW/gtHIC|FlgAӴeK;B??6pC3^يp-l+OyJ4'΋^ 3-WBwזTR!Qupk"-h@*܎UQd/ʊO//[~qߗ~2s9:7? ӄF z:扶υJ;_'Z]XcsI&:<+MXZT`Z'D]#̇JҺ|>|}x U܃ļ+{m |[5;A2}lZzFF~D3Y'iU<KSKO{KQSV'V˝[VϜsO.gYV~mx 6 gl_·:ߚ*x댛QP"Vmiw/mP2fS} ,sśܴ>?l{c x*BCs@1Cݹ:Zi+F+sHU`oBMQرA8r5gs=Ske#s;!:4D>+f(-}w;({O> uMqڵ$ jv%V`6I<-Տ7LhK^*\xT;)`@"yCO(k}D!y&R~:n{݆jLc:rܙU7l+՛:6O8C,i qOz- LnKH[ Tz>As\sَOrlV,@KfMM`LTU9 -5qc:T-&.Oqe=UK'|-Nqݝ7)FjX<8Ba :]>] TtcZ֥|s|^^S3`Zh4Iyv pxS,Sd *CaC>Rӓww6[}DRaiCZnֺ[MFz`d9^VJ>Cn{=pN^ە| i`6 ˵\"=8q}N7!tpnE< i!i]k|l,/ s8{EXJ/MG]r@ ="-3civ0ތRdZ#~;Jbgd1LVS{D[CHmԚH1H٥Z`vkFr`>ix<8>O[t>)V[TMnB";@բ)s%}p|E 64&p>\zR`øm\ AGʪ$vnH6/|`Q4YX v/{*fkL8G3Ba!pr)Se1;n⫰nUH1H`9vU~'iX5UM/a0aNRil RdO1`)tPۄƚGϒ ~-Ѭ ԕ ˁIpm+ r06\kUlߞ;&#'Cugbn ّ;1eG-ñq3JT6/mϬ٧ōz`iд⻭@.%UrU8 n]/n|toh {#_;p ?G&h0/ˑ zT0gur#aEa?(,pqH^($gQӈ]"2[bo ;2M!,#RR+Xo% 0Bt18 cJN6aD|':zh"QChbi,1=!G{auY]$'TDk0%,4wrSJE\1X&tzh> isJEϷ)z?hyfd!5m| #Y[4Ra1*ɐqʫ-tzj PI 'j<Q}-]#ʆ}@.IyRudʮ+/]IWi4O8l4ܖ[qG_;9HvkZ{V];g~b6-˹kR^o]" n67*ߡ3ɝr$;\߀t{'IxBu HM}%kAOӄ괪Y;wǼw@(C-#\T▯Z+6 ZUh-c_J*zvl6 8$x8[{Y?ef)UYO+uarG,} S-0PB`vav6 4_3 +wEpvFQ!#HCA\ϟ=jUpgOܷkj-!R/Vèڠ0{;RmLWDhYiy,ɠ~{ddMP8؍X\c~<rq'ɥ_n t!뎮+Z W=P,+dyMc_GI|:[+?kt5 eNHoK UVhMY8FnvMfAI %lv@Jpwd#nhF%"GK eO?)MH{??pʎ3(YcOo"v=/Kȵ7#grtP&dn7E} {Q '9RPHb DS!gCmn!RJ= C_I72bŕx'~  sox S6[ai NBtNvp;t-yI_F{T{:*իh:@@{T:W"'NEB3K!_x.zY+1 8=*?KlZadCW5K.+j0G^L.MbnB_i{m:XC"섲)[6j.$}wwd%\<|xl>wHN.dC)j}'9Y4A~ɼBpD:Å@v!S\j ^ʗ;bwı6$g4rI{[]@y䰦@$E.0wt`zk[k,>ϰ6hGirl`4ר|}"vZny Pf yɢ #zd!껇{\`YUApVHZ8|JџY*ߚpI&)q$7_or?;=~o"cfg?C;4X'ħ~q>_~_ޢBE[ ˓}y_ֱm+T䂟'G9 yL2D欩 %eKEd52QPκ2]'^SXí {tqP}W y\l_:R֗{HdNvXNEij%eۛO}5X.eಗ>. \ٙYBۭV_ xSg1Xx"{i+MywHW:#sH>c]ovN_ԽPct]37񱉻Fs'g4[.KTDIL38Ju3/8̵g%CD 3> |>@\#,+GI D8 RBin<H6=I-ayNz<&0H* l~{7z|rvC6ߺ)2Aac$-jZynլ'ͺY]5.{yBbBT@:Wmrޡ٧KoLjѽ?9Rsc9OU(_VKI<,]Izm kӫ+#B-.?^˄!B_H M].pNp%_+߶<2&ytřG:G 6^]sH:{ڰ@BkSD ;t} U,F2!z3t 'ܣW:2Q?Ʒמv.mL3sFE:7?DŽC2c53y`ҏ_L>YjiH$d@Kkq]1vNAHH`=#: ?p[b7 &*.4&ېGr$3_x.[G%a4i{C) <(HkNO0pwNu讜5\ӭi"ԒR?SY֊5zURTӞyXiqG_ R蹋6R!)Ar` Nr PVJUG/ A*%Jn !.%߇jՏ#OZ< @;l6BV(\ŏ[ezXS%! p y{=בr|ofM@ ơ1Y!#/=sƉa#Pswg|kP-~PSNa]՘)nT L>ǫ5-fyx$8-m՚rZJDOmoslJ@-5Ǩ⃸2_`ރ \dBpNJgL7T˜_"9Q{MG +R7u+aWƲoV5owwȏ(O屔 l0}fVFހنSp:(SuV>LZj a0%3s\%ϳ,ivmV~.anC:Z{ϋdH3] z |A*Æ(ݣˌ;c3HJAIm_ XYJ/9RC&)ʵZ =mU: i4SOeJ?ht@&}7:~[Z&Nm.g,0c)mڭLkSzVMFUZVU)zk՚qW(kG]5Tva?p(!A(%k]^mv-Y3gvBR%.NJэY{Ai$ܬv{gObI'cvAKZoC\O:4e׻J0֮ZGlvV!/fOMߔП$)kp}gJR717ió QGMgH#Z]u 0Ua󜣓;>rA#Xl@-ܮ=QXŲT˘ǛIG?)};M5s,dPn W<.?Tn $?LhEq ,?0gG]^ѧ>R\Mr3^N1gO}Tp}z1|z=kdےgX T'kgvBE>1g.2{TsupΖ͒Z@>f۴",VrbIk"-2 z:lE< ࠭=q&}qJB*tPs߄R#_j3g\5Z"CeKٱ~ڗ4cVʕ:kkʝIg{*C2Jk>d _5REGUtꅂk/< lAS \',sH܌,uI3僺>H+,zf.JD<:=,ɓx( |!C/}{ԥMۗ;N[Q.0ժ46wm:n*MP:itԒ+lsܞ*LC'XFZ[Ϯ,d]c/W.|;Eѓ֎ .DVc~^%L77bK68@gW>=H] 1n0sD_4zXqExL E׮ÎL}b19Oze$-u=8_TM u{ +׺1SN1vczX19dltk@f&T~b00E) !M& uy]=,)Mq`mO Wa"9:C^kzMNuKm6L auJtzرȵHUlGԞ \7b/98cnf- 6H)EzvdT!]K[U!7fM-g8ЀHEZ4?k5Emj<-dKYᳵޖ-7 عX|#CMR~FJ9P"ɸUmZh="p8 -nѵBSZOh *xFltFe!Yo}U\X'̯Y>,-⽳W9&r{>z%bs4ե Zf^4i5ț/_p2yhpYp-GNJ"9?C#a6Rt`^NK'YZlC!,^bHE8Wo*EW6qBY<'{foLG8@y[ ̔<;i '̮nvas8jL[d:DvL ݃;ݚj5I&T*p p~2ػ2*;M9%qiy:;'#708gV[{Ąĸ JMmo ؓ}|76zȂRP}dJ~xvZ-VʉxCIG~ lt[zKM nЦ2pZ;lOgLHD™ZhAs,f4vvOTrq+7{P`KOe(h&2t g(_A~pGIxFwV"|"HP'YIJB59 OF9̤{NUsc6Nd EqKwe)#w{5WVY,X!tZ:S9VTkiD}\3.k%OfÁ>ը+#05QƺjtZ4)U||nh'x;3E듧kq<%0{4&ߙRonhR[t f|ދ/Pd_kEo(1-qI' i[Y@* бD@d#G"_FaGQk[?+)?Unj,n,F ?pL1LjhQ4k=AY{:v+ZD2ؒG!~b=iɻٗBKڴ\SccGW6BGׂ艳H&|=d E FUtj5UějBך?P8dNdWDVY, k<ͤR/ ףA9y';ɘ4?:^$0c."$:!_|k_r9 ye%SauTFxX4H?NJֹnSZ}@FDzǦyV?CMn1 N=n98m#%u؄Eo'k8U4m8u+RN7Wyу6 7)! ah<_4qQ 2h tB˕՗; ц~DcqçXR?v9ܺH`'}n %`GmtSIY76eLAꐔ ܍v?&Ay` 4%$zAZF]z}; 1mxs(gG '|Z$\8HE2Y &0vLI8ҿ!b^.6hN %awk6♻w-w7'[=Rz glq6cP,`5Z‡Ty 2kP_2M&㯎nQQ-P` *7X5Kg!-\֢R;SeeU~bUzy}ySnh!4!;.ש( }:װ e_lמ@UY{.HZ='tSchd(sm:\KTtpLzBH#A2wY t =} P󛆪qhBΖ@KF?i$rx .TWRo ,$>ˌnz֣l)\=61qvHB1#;@Y϶ }OQJ}fA.%k$^GyS󿭜5sܵYgg `4^R>jr՟use(If!q:zdiIaraնzKoo/$uq Knl]/2{3辏%X $?DO]3?uOSy޽Gĸd] /@"溤nPxAV!}w{?߃ ɷ(% :_,a,ܘ  rҨ]M;'^IUޏ'Q}d}3$vK?dc\'_\|@>S(VI_-Wk3dzUvkBC7KʸTnuơ^S SX"~s.Yx=bACi\V>!78uLJi~# jzoIhWy%u[<4godAfeͼV&IA+і>= pg2'{a2 7 zdMZ |ܱ&Q*= ]T} G9m[񱡿y3svu9ˣ=lҍ[iWfrB3 =I,'7VݣJr "{6 -kG`w TMP٘ 1Ɲ,sLIr!|߭CYui jZU Jj:GgFKR=UͶTu^vqf A{AJ#Ӏt0/cX/I7vMl@#:ڠkPC_i.$ǏPp_*sDnpy@׬hOdz$1tߢ?z-'gWowER{' O@V%P,LbNYL ~lV+t-?ܼ3a\L}l6.I๹U[/o,CyҜ]p$ HbVިGBx;/eSr^(g|8̝)£nBHmųr>,.SJ <+urWEK`ydGW<~ ݡf6bPLv啋!2Jrosh$ ;5Jo5[#_~$O 6pC\@c>j[>~Koȁ3TH+ ev{x{}#7!"jpS:^HpVs -SafAY[ S H}Y~=e޿t0WN@`CwY'!] VOo3fGc֙܃}+81kO@"3~=L!'D~c?GGƠ辯8^\]8J X3^Qn:x txN bo/n8.. V+^s4ʋ_, sC$cl滰ZF: 9f9< @Y9!*}~|M:QLi -nTw|T{6vE8ח!% w>xTyf Wo^I 4X^r52OᓇlHhZn"h Ǘ~_G L$É"Mx73-z,*Q_6-7 GwېAӋZaQs58\o죞為y oGr<cumП_Jr/KMly!6Oi6>Sq5#oj."-47̷}1 7շRA?F$D:Lta[KYm3LXZ+(hw5goPQ/2e=a|F>nh߹tgtdj|7xHBit͐|ƌ9VAIŬiU:uef;t(aApѣoDs{cnE&>YK^xڈI2);p0`; ^ 8f,u"L 9y FSe~gJtaҪVn|M EO…D,,΂ |kӱ _^&̱NӓD Y,&y""*;Y\eޘ5І[Y,-wpzpÜhό"k.[u>hGH@#oQ ]iwcO-S3R7+x0ԏ+W u6]]ިVs^?BEV>eztOcvOj+~_ ~,tyD$Z~Wf-hkK˭nS,r¢֔O 詵_Vt~? v&9@`7MgR KM}cd܍o#_ّ.Qh7q>.N;҉|Û#_A)(EvN>%W%:`&m"? yj,p9A}axү0V;H~!)9fc:$Qe>#N#t>HP"kNE'pՏkX=g;3[ahc<"|sfˣv534Cf1+ DFYۉ8<>#!?M{?(~í\ hK"ǂ{b`hOwmL>dWkU<{fSu@VݸDď8岇oy/Kώ~ƯZ8jw7_e\\mKXrݯCꤪ.X3%U 13$OXv+{`|GYR6 S^noo>Ok V6 P\:9`]0ăKJYSaD}6J6ol-H˓h!j$HB"##F #CBQ} 9i@ab^C"@^rd?Z ¿KN0 .]eqԨOyFri&=6 䵤tnrDwNgU.$pBԷ_>*Q ?l뤴+7)zՒ8&:o.zdn.o+w3ٜ͒UUKEwŽɒ(۫__ZoU;տdVs^3YA3B6jPK/4iN.W7(uJ6*w,b^h2j;B<<,sy?c2ph+zd \g$1eqpf*~4aRPr/_4F3"ItNcbȏwv bWO}'@R۽le.#z.?"!)hINfǿs(_CNr#Z4,a@_?( .X,hHuğiz9_]g?|7P"%F?,\o]b}Ia9X5}c/$2bc =&dmΒ{RV_e'1FF*xN'[M?kN}?&=Ȓbo@{lڍD sېC**,OV q_>Lxl@LXdeŞ_ Zф@80F/%!)FpKHj\\zKshYCЈl0~}5N/m;GnC(nuS7}q~EaEaJcp^B"@`aUr,gl?K^OG$D ѕZ*?n{q L=ctrJtYBEȗы+%#r39AM&f~Mj(x)8g #L+ɟf1ͳd6\J]D99OKY!$A6Q<~^[~tW_6V/o=^ڃ-k!1WՇF tNM#W¡g<MctEoMy^A!3`d%k3N@b ѣԖʁ A*Ɉ#ew5e<);46tBLc0RS(Fj,~fY Պqh2 i\cKt{-ÀsOMA^5;&;1-/K/lyW :ToݨٻϚ*Ĥ83Kq6+  cH6UkHVTk2QVA'7*<_r4ep֓~N=>moسcd8^({{.ωؐȎMH KO ;=Zsi,zlY#Q{KLF?&x1"cgykeӃy;uX/jJ^m4;F|>._{cLktf=|b PgnRLfyHˉeJc3\1»*G-}c=+c afpotw!IIaޠ[B 1 K;]+]>5~Tz?/i͚ @QJALqhe;OUUJ SڧVЕB{˕Y嬨]ΝAs܍'Γd>$ B'a@M_Mn>&_+td$@ TA(2Z0tvЋVԨ'4΀ͦ!'1"ށec c `KSi,Y}}FX)$YX?{'Kƴ^~bnq_&DHX#ܣ5臺vxgg$ FrN'ijr*/;^8:L&]q%' nܜ^6򡉰9, E@haoRaL_ZnTY9\%p$њ+Lc>K.%"*:'Z1HI몒?΂o4[3S?b 3yeMɾ˝yR iiR2ؽ:6p8ѥЂP )t\>޼MQG 1? j\٧m%__wJ_?SF!|OC'?ҞVޟFB?f7j~⼇Ɯ2 x;Xy~爌ySmq|ǔvW~*k Ll$+ӯO_[- x6%fK> +}x}lo%*b 4+0,\zꚖ}i1v[L _R#;7 +:x޸T|*e";3O5H9<_}zpL?0&7?Z 0A{8A- Ҭ},! pjFӣwSwמߧ/LxK rhޟe~n9 䣙ɦ\Τ άN]:!)" E(#B uAET)=3ailxAU&Ћ¤IR}N 7C`XWJr$w12_wxJex& b[iinO=5 G%%oE/^kSm,/2KֹܪZMtL,Op: fڛ'.1C ۴%AF00':M8 y/HܚZCXh4=_ND%̎=XABY}zaLZޚ趢!jsF(FRGBy3zF?h0gi[x^ndlp)\?1cD&5irH߹ի4]Z:C5iVyUFL6K|pn/}oܤ7A0nj?4;pE}1N;#eVO(IGiRCgv<'ױnH,SFW=IcP(+u][,'C$u@~6lkOKVڕEi>|r:g"Ӱ>G9':Pi'ڛ-@z:b^"3CҖ9P1Vg)]Z^Q{)W,^"&6 DR֩+f`B a3J;`\^-̀\ۦaa :vvF lk#wh*3ELK;3@)Kn ϴ4vYU/o{c MOd!/Jv=7e czd.̀ɜՊuÿ6ͱ.9xߏB(34N: ":"S |;0樽kI0~JeQsܨy D`/γP#  O"B}{eBB3ιZPcaJnMak;@0L1;=-k)M3kM2']kwӔ8zV {I,i[kC7ZQ%EkEzselm\&!V-T_/a 'ѫ16s(K3Ȩ>Qݨwgjc+^F\]lHHCCmBm>QsInxI/m4Ƚg)ڨk%xQL4o_Mu)Zm3^o:{^ =ڬ9TcIM-*g_kq񟛍qۯWJVsnˤʽF,Hu0.czoL3kT23!C7 0L o2\2]󉁒@'2NODIEH_>$9-mÀC<@+pIb9= #@b"3}=L8`y +Igm302F!^<̰F{ 8co v,R)aI'$4&<x"@3>_KS>BDN>Ι7*t 'Q}ϬVi_j^"qX',= ' I_瀘ii~ J [l hA{Hj7݋ml/(ܨ γxݮ@vli'9HWnx'F@#Y'F/{Cgh`)C֥3hOGtIE9KHGpSll-y w\єA<Hʋ/{)]o7_m߉*Z 7˿Q_En]jT+Dp_*UR{ h H~/x^OgG*+1 wN[':`= &}w:5]eGgz/I$V߲P?+;]+ک#2}i[{'d:W4~ `/}hI;~I.tsp>pģ]`C `k,㝖bѬ̷D,͒^vY6EW*G'{v\CWrH2$!I D TkT*4ɫ83-֑Ϟ55{ǍY~Hi_6;W1?!n=7'^||w|޾& i2IW8wJp_^0&rLDڊ]zp̈́#7nW*\'U-ȋg+Lzz7=oP߰ (ZH؂fkQ5\b`'kitxsi>: `u"vsx & >iT6{KI˜&%Z7QZϺ |VǦzs&a!"FėOLzӪC[_٩o_[Op?wLv;E-oRk1jCEo 0oRnȽTD+LJwUGn8 :2|HaxH"49w%~yH-(!m7,5I $6CKOJ"SΡ!͵Jvc*JF\%nC3X1II1IF6m?$|/{`XiD^hv25o|MƈWy x%ɤrUq*jWuT%L+|>+XZ Wld$G@^&pw}Bq2-`\& 6Y5%68Y.~yI[l|z鍓ާ9ٿ+e|m aw+p `!%$B}h fIS]xwbm==1@ަzfU I+ %-Kvd$kE -<]fC/`Ag1H󆜵kI6EwFWP4-vCVpo?s(iKB-ZCu3b9>