summaryrefslogtreecommitdiff
path: root/Documentation
diff options
context:
space:
mode:
authorHans Holmberg <Hans.Holmberg@wdc.com>2025-03-25 09:10:49 +0000
committerCarlos Maiolino <cem@kernel.org>2025-04-14 10:41:33 +0200
commit845abeb1f06a8a44e21314460eeb14cddfca52cc (patch)
treef5e453da592114ec67f8abc47b6808ee22eaab07 /Documentation
parenta1a56f541a8f634007de4bcb45aa3eaf803154a8 (diff)
downloadlinux-845abeb1f06a8a44e21314460eeb14cddfca52cc.tar.gz
linux-845abeb1f06a8a44e21314460eeb14cddfca52cc.tar.bz2
linux-845abeb1f06a8a44e21314460eeb14cddfca52cc.zip
xfs: add tunable threshold parameter for triggering zone GC
Presently we start garbage collection late - when we start running out of free zones to backfill max_open_zones. This is a reasonable default as it minimizes write amplification. The longer we wait, the more blocks are invalidated and reclaim cost less in terms of blocks to relocate. Starting this late however introduces a risk of GC being outcompeted by user writes. If GC can't keep up, user writes will be forced to wait for free zones with high tail latencies as a result. This is not a problem under normal circumstances, but if fragmentation is bad and user write pressure is high (multiple full-throttle writers) we will "bottom out" of free zones. To mitigate this, introduce a zonegc_low_space tunable that lets the user specify a percentage of how much of the unused space that GC should keep available for writing. A high value will reclaim more of the space occupied by unused blocks, creating a larger buffer against write bursts. This comes at a cost as write amplification is increased. To illustrate this using a sample workload, setting zonegc_low_space to 60% avoids high (500ms) max latencies while increasing write amplification by 15%. Signed-off-by: Hans Holmberg <hans.holmberg@wdc.com> Reviewed-by: Christoph Hellwig <hch@lst.de> Signed-off-by: Carlos Maiolino <cem@kernel.org>
Diffstat (limited to 'Documentation')
-rw-r--r--Documentation/admin-guide/xfs.rst21
1 files changed, 21 insertions, 0 deletions
diff --git a/Documentation/admin-guide/xfs.rst b/Documentation/admin-guide/xfs.rst
index b67772cf36d6..7b0811d650f9 100644
--- a/Documentation/admin-guide/xfs.rst
+++ b/Documentation/admin-guide/xfs.rst
@@ -542,3 +542,24 @@ The interesting knobs for XFS workqueues are as follows:
nice Relative priority of scheduling the threads. These are the
same nice levels that can be applied to userspace processes.
============ ===========
+
+Zoned Filesystems
+=================
+
+For zoned file systems, the following attributes are exposed in:
+
+ /sys/fs/xfs/<dev>/zoned/
+
+ max_open_zones (Min: 1 Default: Varies Max: UINTMAX)
+ This read-only attribute exposes the maximum number of open zones
+ available for data placement. The value is determined at mount time and
+ is limited by the capabilities of the backing zoned device, file system
+ size and the max_open_zones mount option.
+
+ zonegc_low_space (Min: 0 Default: 0 Max: 100)
+ Define a percentage for how much of the unused space that GC should keep
+ available for writing. A high value will reclaim more of the space
+ occupied by unused blocks, creating a larger buffer against write
+ bursts at the cost of increased write amplification. Regardless
+ of this value, garbage collection will always aim to free a minimum
+ amount of blocks to keep max_open_zones open for data placement purposes.
2R'$-ض`؁b7k4,b4۔e-ljf~Blj8@":bH_-0p."k4kdx?u1GFVg5PH, ')RPņ/BǵΩ($vAξw?On@7o?B=ZTiks q#1驛bT2&ci^^5ɰʜ~fmTsl5[14G٩I.{ F"'A7VPlRWEƦ&ҹoYWQU킪>\;h4 =gV{LxyNtE~P]:b׈-lڥ} JE\ 3gÜA, Sm"q~BX@E?<Ƴz_= =ex]рnCGN}4+F v>sw؁]l Jl:M|'N!bdq_+*j0VT!:dTHj3PjY,rjLgLlo3&+; ͆X]kA>Yt!,ަ]beSwᆖq"S~IJ7I'Hͪj2KùaZ7)#heӱ*ڱ%DO/K:;wqlnDFn;~w[ؗ y{x`M+qV1so=,e2F3Lrg nL4 {4;GFatu2OV.9/\OnjaNNpQL2&. %X{N2~qGPy7c4&la' ;/ѳN\izl_]{&Wדש-?=>rRkZFELkOId0baa`zqkT@ru=A&"eX+vج.wU/|4Y rhl2=v<{hN C{RT{21X𻭗;R?;9Q_ 7=UTևJWjP8uYTF޺gӳR贷DN{u#ǹk{}= Mц1!# uzġ9<&7Q4zvl;0$D61-ُZ$$G7˛Z,Џ{/tL""/޾?ӵu6kY# pݤ]M~Rܮ7 x}@/L#G\ס}ĦmU/-򐶰J[dڽBA{s@%†6tze7p gH`:p&3M͞BL9R uI&_S7xPfwyt@{ 9Цy6(!}6t?]]:!jFE஖euC ziuE_R'95:YիQR`O"V ^'tvqYaEs.@b哃7EcH(Щ%F[X“/Se &2W[#(7 D.4MO) pgo;BX[:$@A"2 \t&Q~3& Ȣ͝4MJl#CxT*?4i?pdOLeen{$[QCʐJ]UG&)~]%T!K g(n4JSZ|ΉB3\|:\/dtL$E<7ߺ;&׋{=(d͉8k{ފ0V6"STggm%nuIL -Bn] = RbԐO =T1! ߇d/4$PZ w8X{A.֦Ӡ#-l =_cg,NR?^W}#;s?|.w"kߛ{E ^78 #9=8kՋ6gŚ$Q If-!2gqCSP`z8%Ös| imۧ37뫟A|ÂY:~̀~* MU;bɂ{Zhv|F&&R!9% O[{w㵴7>f^>Ye2)56ZdmiGx_2;7m!ͽ}:^prC}Y{7ˌ]2=RJXJԪ`#t,MX2m6@gtvA]Ha o.>rk;=d^Ӗ]k1pȲxa!k,ZV'?RS4#gU3{vhg;$ .eId$KgD;mg2H'1:}ѧҦ(9zjUZkThF-rx4Ik!CMҵ֠FzV8E[S7~ί7[6 g=Yx  %Ӝa @O?.ϮKBT*Lm.I`a.{/$'3{a|[FYmWhIW4jΨTv yƘƫ" H h0(ҟhI${x]7Rxg3W+3wr4DdZ;h0z93FC_2Ϝ%[9K?k{G݄྘.]b}z]_rC'ښ͓k,a`;CT^s" NkC[ F$qjR#50 !BpLBNpP©zQ5%gp$9s[<^'}$dbˆDZv dsJIƅw/շ O\vtOɃZN:{fJN~,Μ+Axf= # oSPW}(Nկ 9"զƣJd@vOv}XWΘv:mSI X_Dz8 8apwHbXPom5>ˋ/x+1rSro]U<^yGH~j?$I6EY22B IXZ]K43Fі| tw' y3*a_Ҕt:Mxs\HqENm6^`3W5ʆZZtWy+ m684wb`blO>3>I;#2l㋅/t'4gY"3 I3#LSvj"wPp{YH鷀%x6olq G"SVڨLs@ ,FDvV-p6/zc:Bl㽵-ҖZ@%8(ǡjq8Q2"(zh瞸ޮ[jf?{wv>xⲠz#bjl9= AdM]Y@t03 =n8- ٤4J ҳtRƎ美^-d ytӓ1H Tj80i@OjT`gTaV6pfvT#}՝RLgķ 8FiwwSCH#)nXYqOw]90dRNJXO>L/)dHh~Hdl{ cS4lB#z,nd6I.6M sc*HhcuYM6)A,i|QeV%lQBև1B|*ೢzd9SlᱥcИr&$7lH+ 2f#Yzlơ9g8xNz3IKpui͐)Ѱ7 5G@%j3+}pK ].CzS@a(w툌giT![g+<)>M[vMkt'Q&/}ǐ1p4/xkbGv7JRְEN{̞`7԰RnF_S8Cϳdgse/@ XaURh7ψi'TnH(?RG>C^ nYB)@!w 里MH X{I&LsvjuH70;})Z;ʒW l>Qr^F ۱mݽuXs(\&`E1"#; uFϾ6h?źI \F\i#kb}' [3Zds,^%(H)1qT* U!Yfc}ۇi=jU\ wMS;;'}v" S:<_;gj!N6$!ti[BĆk V'bQ,tJ䦿sI-s pզ555nǪZ հYVBӪqt):I*Z8o2: @YK>I5"LrP s&-]k !1q*/0O'l;K}C_qn5;KK&b'юbje~~O+r$ZNuZ?'Csg< = DԨMA!I ~ԥAfiEeO|1cw@-|mOmNAT“Ki6E\jTU| G} $PC%D_sUd8i֙LSm~?Heޚ{lNrh =3B@7O>Ȕ6]HsAJR5Y^!D}btd #|Âd!镲} :IpQɢ_ȎHTFs^@-t3j;ݸ0 n'Qx0}~[>ve HM?ΆL &6@:˸ -ɑ,5]]A=Aش33%jvM:'"p;\\so[>3`?uwc@moAL+]@& >- V6=Oc2^C(9W~b꣌, REXr02K}v-*H=xw,KSDU ˨0@}:}jRM҈u5q[ :5 Jfs_!3$M\:"1؂wZ<GW0TYBD惶]xd=̬*I#)1z% ,^o'ZmSҋrmMG/tsS2@;"'N2O̢v*|u9gB TxtRvjྥi:4J,xIn?J^%ɑ;r\.i cԽDZ, &߻hlcڊ*aB16([O6zH0ӆSrcLt$3-*}  k} VC)W}6Ww@ջ1I \#_pB'p&2,֎@նO_RޢC=lVy٤HvlJt=S)5#m85,6;۱jOE'd-!ǥ|>Ìavi>T`ʉ E0cP/_Ղ[k/y3I@4A>Y %3\mAG 9dyq˔efC V6lsĆQXv[7KøzrZ5 r_ܭ%Iү~CuWUCTi$F _-x_YKk#=~A"V,a58P*?p|ܪ%n{Þ+z Ӈ}ҥg\/;jzP]!,CG^ri=E`?3fwdv.̮ğͺy)l%Z6МcKP$( y"L|+n}k+j7'Fٗ_ oGղ2!r'}&K˻ş}s ;$O>˂T>܈\IE yoqkקU98hfȏa1&1]){e"-2UhrǞn*|ܼ[|yΚo%ƸbE!>~8KE2WNsWpNS"#,f'u-f`T*{t)Z^Yhy).P$ \-/Tgf)Ě~SzAj|xA> l@5 8 EbnW2Fhqk\P:Fj"5]2sICDK}zpx3zn DCF_݀ETfp1Ni=/X̅ z+v=z6%.f<\6p]f$N?gY}9GfVn[K>!T mDf(*tv&{7ǥ#^$2!Uagm'.<\hico%VTnjS%#HRbs<}~ٞ[-3GnrBi1)"׽Q (DGȂlL`gEj[s҈@vh >tAȾZ#I ߄8.H}rXgf0ͣ.,Нfuw +&fD\|6Eދ'dϑj %.k@4`whc l}.}R5fuNM \0I&bl!=DZmW1ܽ2%ɨ ^MJQd:j8JsL0=he6[7d9i^ Y?pzt=mH[iJP_'jo p!KG2y/dR7bt$# 87 7ϻ!`/SH@(e~Wpx%#fKJES{ JS= W^2WGU~ QT:ú5A ~<Tg,;X5|<,*]1&uӱ$~Մƨ+qvdpc2[g'{K36] VRBS3AZKO gHi{WbQ}9-s-6)⨊,4d~3ȠF d˛gvɘ]].vG>HQGC1 n]0[i;$/N#+dIJЗ)oǞS#Xv˺ 0@ْ !׋=z "lgDɌ#zhluj v4 0u\=pV%ű*rGn^ Ziz=/\J7?X8R*zqmst?ڮ fOsoHQFJ@zq]o* [}7$1AOH:<)]ɷT6J0V"&)K2@Þ5@Y W5(˒^MfX/$z?;nQhKy†zyg rCAy {{G> $ N)^udԨ -ucյ0Y1|SOF&0*?׏oR2e];?80`La^mGXF=W%ePf;NA<ks #bN{K=h $B{Šs-ɞ`ܹM _L0ǂnMnd-'U3j|'sJ-NUOO VPai[.@(m `$4- FL)f!r:jJks .|Y/s x?fn {+h ?:mM=̛`CKׅ!1?}م F5$N]mb?pb?PWTk'֌^EcО[^'P~xEL >J7y]9,~FǩjIIWvEJmnn'VPR䢖rQZ 8.: oO%<–ѳ"m<s Duu3<,\/Z3sQZ0&RaTKԑucƨNGl/D njYdj?dz*ʾӣϋu5}v_M1JA-0 㵹]^lCE]~`c[酒jI #uOsbfB5l$ӦW,I}ijKn ;i$Qȣg~Eݬ;Z͂qHѝW©U+ Wkkix@z.j(4V9dChx^Қ4~l19My^Z ye"#JkX=-"t)':es#f|tג8wpuDR;aG I: i{D,H'LALᗵ=?AΩ4^04925qڀE%rh䂶:V $d]*cb) /@ ;A:'yƄ'!3ϗ+/ƭh*ad,T'mK}3caRg=c6נD )ڟ-6#|p:Ə] # 뭻akվ[2By" L I5>Iuwh?=+z"jWuL)ƣ88؁X#ݰ e)T]ˣ ފvGf.2uwl071Hl= 2ϔ!a>߆a|k7=%o~A\nݺ,9EOGǍ/r-75ceZr}g@ T)m])+ZNG?nIil:/3^Gn__ȿDYA͘]t|lMhט/~poÃC;+w#fٷ-;!Ò/'FR,BW$ P=׮ʚ>naskE+٨t;z@Bis'5#iRsuOGݜ fD0SO~lh}'6^P8I6X?V7R /q7a2osq:<ţ^>D,hE'kOX ~ n}P?\o z8g+1U q٧S0zhb%{, o;T<dp04L?O4i]yzWs;Gݣ)9SM_Gvs{(D>#I=J~VXI5XwIZ1QPa#KTYe1hթQ1r8*|OU1zCZZSEvFjUW7_iHmke ,Jɵ3VQс49 INb/1d9G/>B " "N%"V\-"!wX3Y`c="glM~>[2?ɽ~v6:E.&Ð Lto%U4IfW հ }Id-4m<9;#Si -^ԫv`FeIS ɁͲwvҽ\IU!$ak[Z}#!E??q(6j2MNt6*#P+j8.0ћk)Peͽȍn(` IĀ5Ja2nIDui {^T )~rm9+?b%H3nW٨TCDOşh_Zǡ69 }bضҽ)9ILMװ<1y\_s4c@'h_P%)rF{lm$k'\yM&yVCF_ یiDNtۊ--8P7{ ,AMi y6$~V#wO`)D[B7axS$?rd Du8)V6Z8kzSx0醏V){ܝN3Tlrޖ`y哱A"ͦ joiޛK"oOx?'Mob/rSzuT~. ;EKeug/@ZZ|=[*Z.RK6cz3Q\p$&G? aWkF =} &H>Uŧ`fS8n ?B_ jl<%_O]hWm˕zК3Ơ}}U!5F! d8O[x;hʠZV!HѠjrKFW'sn{p)4k5;%>,}dO;|h:E;x%!2XHyۈ1JJA4+Ӆ*)r",6ob"5 BLޝLcf~:⃢& !:d;+Hj{ÊZ-7K.z+ ^lhr t bc]gN)ʦDCP$&[9f;XE&{91ٹW;{LSCN%N/g76JyJ.ti"ӣ\Soc3gn ʉ^gC0qKfJx]4Dhs=^NtR#{ܣ{iӷR/7:7CRtJR R7K'xJ-Dv XK˾)4FfJĸ,R7<$uT=ų"gԕ+Jaw99ü S$Q(w)lW.uiǃ-edÍ\oAczQoǫG6tCi)'W֋(sa=sfIЩ([gb /,OįQ[HJ9+virp z/Kct?WQLAm1,s5DBYcW9c;J郵 0֊6Gxi7?daEƎRҢnhҘF>wj$QPޮ# .\[Zt晶g Zq"9UhLs2QEA##^~1۟w@`SVgۓH\~>Hop)q,73mlRvTQsh:"33ir] :B.%+N&f$N1 .dhh2<4/Ez&`T2ML =\ 7I33fjV*^̨Y6 1d5M@q[ SX$r &J킿iE#R"=]q^t.)l> 箒*7t=cO麁N/c5xw:m!&FYeO_P_"{fYl4h7D-EÂMgOf\iyM)QYJLw3\Pg=@״ Q56 ϝm5M)Oi^$-"Cwtӿ.^Vcሗx\u`64)@zªR%sҮIx4oҴɄer:}2Ďar!yt): FEKa%εH| ]<TM> +n)_lP,l&Z 괠cnpR 1BR9UnŧW %Y.ٓo_cTjӆݒPr8&hȰT:u{E]8jz/G8W1Y8!sCQ @_̜fa4ņڻXU:ª`SQfxaqZ4, ,bz$ye.:.Zls̃4alDy[a#4A譌3-R2UAM4fVT9 5:'ί{ $FHd\h`3BmX4/C렾Vd#C֮Ovud,4ܷ akpޑcCc68da$:WH84wI-b4흵̦Z4$w/ %ƇB]ڴ4Wf"95~[PqMXL앐X)wH' l~C 2 $vev?R].P\^vC|@jkn2zkJ#y*ʤ(Ty8{5 ?َُYw$ąNwQ`{6z- ?"IԙVUVArqFzqzzM64c-9!Ps !Brct,X%e u{?@n\Zr~'7dž=Ctu_&:MR3W`aR_ލ-l'4yĆBaZYx/_iqY QSj5V MVe.Pĉ=mUlsbR 뻂-:xw4-V&!RRLܱ:uPIr|"A'yvXfDYn e퍬 l1PG{KwC쵇CUڷrcڬs#Ͷ'9*B7+^Ģ03!l$AO+~ᏺԩI[X:JXxd jW9'^ U1O4~`>zޮ䋗' >t\BIl9+GpEhcǂdEH|cgI^{1JwpN,S"O&@&0џުV#kT 4 -}XA=ͮ&OEnbUlmMY O6\,?m!BE#踬-b0 ~dk\4EB{kcZ2wM{3KХCh (4C楼wd_Б%<}T I esbE߱0>?4N!xP +V f~Jf~Y/F$Zx8,2= ʐb:n&ҰV۵80A{-2d*5T]M$=&Q c{A^2'&M7I4֧GG2{m #n9d;W7T?BPkkӡvi uRڪW$L̨1Bsyү~QctT0c:ʳ frbOK zBǫ_f/7¸|sLf:uU1љ(V' 6M[6FVafFNRQ񟐃i ݎ+~J@f52: \ޓc?It#4ʍ<`L*)X]eHF=Zׁ̈́P?fkzh/+>AAz696zA[,پwMH$ IХQV<f jD 1Sf"|h|*,{r aS>֖9eEu(% 'SÀ|;(Y-.xrn9F+1x|43$4k7 hyJŒqԍ61BfV8ϱAy %+j\|r4_rBZ1ðnIkP`&=F$hEKVu1B(B;X~(YD'O#2|Z!B|8fΒ$4QUɭ[·ۢ9r`βDqqI g';+MJ '0(^m?QwZnqr%MhaPdW;,2De5(u=8*|}1&4i I7sI6!z;%2Z`[NC<˜V%b׮G.'\xNq;aְMujqkI~A)iy16_{~k&̙^[4[ݡ.g5[-+Y~|V~#Dwv"[ZyHUU_0e#p5$B<@h"[E'#6[}v&5w30u4Bnm2~rVOzoG4X<N܏?|ۆG6 Tgc6t7S%-BR٪_X1C P]+N[}E0YVj-=' !o=_ H!+bu~EάdU26jTxܨfPR`aflF!N~$]i(®/̝Bŕ617[+4 gv< ëZfnUU) p]b1~ݢ%BL xlF-G/ZiUZ}Ub649A>-vO.QUDI}h!yy!}vA*;E"=E޴ˈ_/v^3NcW7Л-莺Ɵ?ſkT2ӣM h1)`W9଑r3 5fs)S't8줷OlFf9OLic+ԩno(GTuje9g8Sy9x>b( ]%0y0/E(zCDLlX20UY-5{ZrGHNVЅ|8kw0 NT,vjS4$itxRwXunloK57[ǿAp1x%W@8b9IJvW1|%E?68vw:Ҷ^Gǰ<*4  \V%Szr!+)xN&s>cBcᖤG$z\k\?|9x`Iv]oxj3fj-wv؁!٨_kf!@d4gO݅{#37XT˲|ػX(Ŷ=&/(kȋ9Ast*vY}!;b8ڎPIth{[^3ݚ.ftk>w3vq$娀)#Bn+#H'ZC^hݒaGdy_ g6Kd0%Y\6>23v7V!4c8 ;yΝ…Vmk3^,1d'HBMF2{.=3AfQsn')1tt?ܐtT'TWлFFT XwGmյmRҥǝ} 69RV{}t/Vjxy;Y@VID3c:wO.0 g5M+)∜ΆƤKbܴ 9$hs׬ !WIgڇgXJzJw5i%2_<Е)IIȣ=fJ3$79Ӽ?:K(֐UɵMw&4)0J̍@tեpnR;GjCV=O/jס⠾@JH- j#P?0pWJ+#DA`SHFK, ËJEfL}t] gTjW?d&Ah?;_cBOcЇU6` K( u8N&ƈLzւtnjօJ2o{7ustQ7 ' vԟEEqQ =WKjLc?Vu%t+[pbB$DhM?kXy'~cq[9{^0/U~ 7U)ƒ^ȃt4<+ 'if[ }r rҳ?<&qu|j]ȄT̤U Jg<MS8w/L>. D$9ߨpGC;6w/HU)z |43@QkBgi-lމ<SkI-U%-cK{`:P=8ȁf°sJ5g5I7 R $n,LcHIp$63J-]pdMJwЃ-[^v(碞d! rMVsv ڀdّ%N:t duUΰ[%e}ߴΡIt,vCdr[K{lX{]sͣ]ɬr揃'86LOޥqNby& ݝ1j¼ Cp0s3\iN8^>I*ȣμ&yL3~677*JVE k@Gew:$٠3wG Dwm/$': Tm1fN&:Zb}. %?;vzӛ_V e߻WxzdwSJ:E./&xL?i %U5ҕ,2iPe~rɛqc rGK2ϥs)3=O0$Mkjb)Fd N UIxGR*\F|&EM%690ٛ/F2d:4!:B2cퟓ`/u<:+ Q3EHFD=-B[ j?{ }Tu xa$\j4 B7;8%FU9dV,e9U"PaoA .1#p(E_D0?l$Їv b @&q 흆BO)4q0Bis(?u]Wl+fu&mҊCz_^2,91 u^I[ > 6R~󮳄GIi$S_Z1h˃勊r0ŝ}'iX.wۇ5]!~d]Q~;G>ڠnPiuc2Ur> 8LEPh(軵v%Nz6W!r$aq :{p%Ɍv2+$sN:xmJ+I0926Z褻AAc3 $mgNxvH̜4֛0[Z$ʷ{4R,?d#MGaJ#hC'!T[}A zZU[09\y>I W0UտG@ IM)Ew[#Cի@5xknV@&ZE"@\l(3 3e4jΨZ&bWQaj#A SxKy"vA,HE ezǟ}06t2}ił[$ h]V(n(:Z5|kОKNwM?l?ӓ~ᮻZdZx ΜgcFȈL%Y/1D5uL\1D jXKƵufym5&6vl@|V1m ݞfvdk=s蒔hϐpn$wq2SExy<ԍ`'+I*~aHE\3?~-:!(!-ʴҎ\{m H3_ib2yM0A"%{BЯWC_k=35&fDT&L |#3xZ)tWq̔8Z1@5Pvo*ZGU{;MFyXj S¯% ^🲟sڐ/yNl}cqhvW}*]z?X,^f:e1j-Dȵw>}5'1)'g-#$B7k[GׂwՎtBp$9Žš7tO;D*vp~׃Ii|( q6 b*X5xZrEM=n,޲Mb݃ ?K& !+PmVij#q~]UU9@gǒג-mx۱#1fNfXi,;E Lf q<ѕm$޵-̏+y4ղL<լJaSvx#3>*l,%S9^!* MЖӬm|"~?])A,eDqJ6c5A4wU^~Wfp)^P׃oJڳWk+yTifORr?׎?BT7E yCf%nEo?eR۹ tҐr #yIuoDOj 3iqMcȋu8^'>iqf֭NUr0L82vFaޚ7-t o[gzc]RRo4BC@#0N zP0Am 1i b% 8p{O$6Y@I0G#!㹞UUk:+g ]_2PYVdTI& =E͢}8I1y]8Jv]'q@bc- H<6k''>0 Cˎ"I&$I/5CKy'ӛllTh \s8,~-kBWZ&)TE5I;?:A71q+ u92w2>k.t &Ou<AR[-V:emom zp?h)=GMCS^Bc›Hhq[&lô*HuED<-o,j-ɥoXBf\xӵkI]s b1Bd93}͔+kId@7> ,w d{2ϓm\>px'zk L鐂W$M '0$5Yh>{I|g`o|][|;XOg\䍡~& \ K*ΩAwזP"vs ~k"Hgdb/: A/o:}qߓ}lƒQ8U梫4o4XszXӑJt W&`gn*gߴj-3iE4Ʒ<õcC*$hN> .Wg%ڗxׂy FkCG{mUouH.7w/hy!Hg{MkYZ0jxPzًRu)cnzFQegʸ,(?6gDnaWl_7.0݄)!TVmʢi/K@vfSwu =抷=oF4> eqBAgo>ݺ:?<=U=EBoO(te7,>!05 Cxt!e>"iEv邁 Oa~l|C]F~ (wcZ);:plȸ0!շK.{ڧ^cCDX1ܳ`RJݘhWM8% [AFw*Vk{Ӿu!0#6~A@@ SI(-63L[z}#On ƗڰӮh>hچQUU;RQE\s*}3NI#}(֑ AW+'஀dS5ML!tqLv~c+j<)h-+FO=)5nရU&j0Xu,v\8h]qsTŃ#wt!d"K)T ՊF_A͜X~.Q b7[Z:qMit5{e JBR!cjWwҏԧI}֢4+ wݬt]֭r@w|b7^ٳnR6%^ύ& & ǵ4ܝ$]QᛕxIwx.9|\X rDX6~$-b?59^&K't".$^f5JZɥu㰷?l 5/; ##&3Z {tlwre?kFgZ ΄nXB p\')̑,?N{_ ։-;4qlwB"dJ[ D}o{ t>)rtsc+thxexh4yM#&uu$0#CCv]2v(MDRxɐ SYJї&?I{$;"+4l_>oG Ye:JyЇOD,& fYۦ}# M PS;,;@;&H9^v]sOO QƑmXXJݬϥ3~/.ypH#^i4ș \.=fq@?H>b]z\K?+ϗ{1d&@Bn0r16HD2@TK ad=Kəݯ~ І.yn7KWCF@Mm\REl\z.+,Ms͛'ByH|s\:i<ͪ[=*{@,+Z]ש z nm!zM]sh;ER`a_ LqEU۪NV^]U(ɔF[zMa)^] XCw{IjJY yҰf7(^O'OdK"iVm tLtW;'{X˫ 'eY#Zyhl ш3 }ߏZxL57B`o].4E>%7!-\arQ~%m@/NkKmelp0[wt[n{ _wTZHuyraI R[ӸܠUMU{ۘD B ͗{n⫰3le@18S1³LgF?̰zϕIhg D@4 Y Ɂ?CzAur ڃvZwT}rCڤAGFV1fC18./42k `XI$%yCMz٘3l}K J|'lB8?e44TNP dZ NQ awHF 5x=p`Lz1Z AM=UuӜ>f 92Yt* Ƀ4e4ԍd-,b7)̺+/~ uFzp8Lwe4{"GZ-]+-nSt^JRyIK6E£} ꯱3$ #h?fb m;ő3n\,X(RV`;<$Ŧ>{Ih7+jkMU[\'[2[dM?2Y;#2q)~S%>d-;1MRRr K=xwGY"<Ɵr7+JM"`uY쭃,ڇEw;̢޽iЬ$;sׅݩ`Tө;-mLu9t(\l"\ۯh.pu*F=> 1&Ͻ\:(pa}ݝ\;r2!oU(4:nc&B+ 8 9DtjNUkڣE6zZ͡jUuj=܄jz 䙹]hHO/&ˆ^t; 0`8XB`q@֌}M%OkP\W &gS] l%eI_jFe$9 1^NZ͊^d#\^H\jn~0<`՟'^.,7JqUYzDk,Rz*G1yBy(i̬.pQːsd$Vi!':Hbf)=!zctX-&'D;k-aoj 3YEo \2y:^u;̶$A~mk?e6҂(IOw@׌YG2hb61!5W뤭!ݨhMAjK|v|M ]"2k,: wV4+@.#N~qiG[e.ld81^ N)h"@7AQtΒ{ݻ[ܼwLп< ɱpEqPQ[ȷ-qCAqd0ؽfM㌅g zÈȽ6"[ -5S6LP%_ݎ u)if%+m삜:ۭMn2&/)$D#xr;0PDT`/`rᾺ3x}v֎br?TO<ʀ~uOS>r3n7oh@> [ ٍއ>ժ] S:^`BߓN}Ek"ׇ;-7Wfѫv{DFf[Zf̶ZV1UdPap)R_gmpէ#G 2 t\\͞= * C>˳'j\Qoer&+'=9jURb[.D?7~1: Uw<&3(Yl.lv]Adk7sI;B ['+eJ!w4r x=Mc/gnzk7s#F9ɴ$`܈%H \szȊ9,xow!mMLԱT[5\Jxβtm 9a1!ƶ CBnENW^ٲ_KF~:1.;|7^ z%@?RGYm ~wGލw1>O"w&羵s Cǽ=ꨟ#߹n;9hlkۥ].HRR'hqމl1ڀEͳU@~nqQUNVn2VA?v#BmWhjTkj}E>CٌJŇ<%/Q~N.4ӛLnM.X(?Dk4?rk,:7x@L$Mx>|ց|2]vBl!Ƀ;&[ebF#12S/-^{JZfk9C (M"eGZ d^w+ufUÞĒt!'\ooI6R%(h节$ˁ)Ah}ۮ6:9 | >۵ b=9z4W+g!&f\*A+2=Yt=AMCu7O]r, 4Nх(+s7.1?!?wXq`Ho0xMMU qwz@yhK~p0x [kJDza wdV/8vܧuGaapFgp(_Ұayy7'?L NrL>|<Md2o{15ޤ=:ƖOf$>ax@ ҠHi/^GjGPK ]c_f;pհ8iiyB.PP =A?JGi-_B1'S+'7Ow3cM5C(){]4w!Aa b(&"Lfzӥ%; NP&I*hE{q>\ ZEKY_!р=:`K:}w-r'^-i{|ޥY5.5>H$vN@f wj\nc8L5*%:b%C1J KMJ[tGs7BCyRlɼwԦ%) j:jWjypgT*ac&J.7 }@0Q33?!Y+2`60a72m`j| \:CVA>8=9"Sh!jmj?w$}e&q'8W!O$Njv&i`РyictP1.4{Co|ȍ}p6rRœz49E%zHׇ6AZR5ze*Ta)$Ax΁x+,^YW mѧ.GkbsD\l1jr/'E f=Ğ{PdkSG'T2a-Y Kpd2WM+BϘHlCƱcO] 5G.vJC,ti{B5ϑm)- jH/ZlPaGU.Y}ػ77eJf7?uWt-[) P>XʭV5Wuc@pULϲ:<ݍ4(uKZ\fW5.\C?)" y*-R#F\0-r.{O^KsbofdaR$=KFs2~O2̓f;VE !rK3tШx !2}C=y{6[[_>rI| eEQxP1hR,Fl˥DφqqFORĜѴ.V$.t7$:t![e0(LzO8HVw[Ui6l45\ʽ*PEI?3躦j@T }Ti5saK(h5aͥ b蓜JRT ZE)~r|˳0v4|\&ssCۓ`qP6}\z9FԜ)/OAg&?$+i5<{6DvL:4oBahI9)аV)i|$5T{'#ɵj7rMֶ Qx$&;'JzE<іޙ2KJGF1h!k`]TD{V *}ewʠlRymNZEuzF[f 1$ {l4P8%3+] ,Ŗbl3Gi) hkqB9ǂ n jHF-pԸd'"k2#gk^giVp_zڔz֟k:d, {+vsu k+fN'Ynh2-m=$7XOr*D۱S ۶&M3VJ4\"HYK7>WTjW|G搿|9˂:2Dv+ycNVOnߘUx̚t vER,ƆlXyv=;~azg1/2 HZѮl &-*I9C[͓z .lNuY9'78TN׍5:B\)Vpc]2(م5#1jpreUgR|1> !ueӼ]*!%=7C)'9h2m#&7|TɋL FOp&gZ1%Wg ]c?q0s4%d!lO&?ϲ(#0+,[f0B'0\B[r`+ i C'.)֤Aj 2Bz`Dx;cSAؠDH8|pkGqt@DZBVjnՕﯖK>цg Kuia{Sb3iMJx.zrJ0KRBҴA3JdNHS2;E_åByCw7Gml@쟧2>s,mr8K9L4pwNa&[1ȡ rSnסF?87_IwLSC7 G2j n/C7grÛpt"DuKlL7,0n5Fs>kB W2ew7mNHl¼W^@COIƾ ZrgRUj5@Qz:5^Y'V ٺ?{kdnߍ4BZE#Hy@aEyr {{fh!D4![aEZ6eU׈o yެ, LP-|=WOTrƠNtXgbڪO&q )8r[7E׍NS]wl'gAnkrd&P-4&@ܥ6$NPyg!^f(e ҳeK^+LfI@vԯ#D>[.qjKgiw)ˌ6dƻk^Y?.?qx^e 8$d^P['喸r52vO:P92Ȓi$٠eH8tN#,JZ, S+gS+rS}}V&Izd]i>Ү[{:`u+ euʆߏ!r;U|$oo jsrW䕅һw==CnrC+ mWk؀gRJerZƠSk6F4tz +@$jmUo&;u3NaŋLTxnq18)} 1B>;NĘvSl?Ur" 6 ҮbC Nyh(0zMЮ:JI~"IFWЖ.= g2'm{[a7;dtZ_kw}Jkr6v^-EqiζV㷮;wOqdKW=3דiHƔ^[ H{4m;8A(?zwEFRl+`ؑi?-<ۣ*pL\-GrnPjM9T㲪2V!&Z#5 =<uqͱXʃwЏ%bho~D ̱ $[;Ķ+{w~[FVg@vKl Q*uY^FOxz95l&3{+~gwIrw+^OL,_P,L'dN^HarJ%q m0.bhNI6ZjI{n&KdF 1z+m_CnYF3}c} M1,jZȔh~+:EB1t8A$ۗ7LR?-'#w` }{0@5s'6)%x T>mf~e".t.vBL{ 7wNr{%q~qً0&Y@t&7]Q :ȥ Xjb֯ ,B57XZb7*;TGNH1Cw3U칋-kb*:A:=;mDT;{ІHIg4H 9?ac﷡*GbJgQi J1}|JkD׷Dl}'GxJY;WoY͚bj[M7>Q: @ k "y(UOxY0E՗ۇG\rM'?݃kQWАsvjf] =.fv99[壟 UwCS1cf*]XwwsF!4|モ%2,iH>ő9cnOc%)'7b3H{@ i{R^!ByxG-tz>Ou?Gv%,.[:t๔/|LM\1H|ƗQ'̃fԩ>xOd>ZG!I2yHwn48JV q/̡\PFA)[4rٜF̅5~_hDBһ'5@%x:xwVubdf( ֳWɳ^pt.Hossax @"k}~1 4Nipk˗(gHxH/)>s4d ͉ ̇7´$%=:G*.۟Ob){UpQs5C^`*IJ'`ZY bݼ:@q–\7I`N ՚Jb2EseRP+UT$sj>I"Q79dHr5$F!JK-v&5E.=u ZnȖQMb^f&JmaUN!EbC3X*[h XZtR! '.l@THf4)ucM\r}ǫc.J#) ! aI&Os[PΰqCt[t"mK{wYQั౒N~(k_.PX 51/X"8" C:[5KXe2.Hzp?G9ߍC(!߂iw\]IH2R )7K@ #\״AZT+ܾ*8\.2Z9WL s If94d |捁A+>t)"3Y&W+x̔=Q pFC}vOEUrUkHȉ5N' :QǪ I^2N IԁP\X0 "b+9Ckfɪ e}L~4 C 1U " P6kPV E?1zd}X.ݠ']QHQ܍HR/>zS4+$QwLI`pqshаaI";jNp=W' Fu`2Ol8Q}d0 %ӥ }blnʾKHU[IM֋Q)sk"Zpy릛GVwwL} :87_wm2!Skm"CyS#";#NI7!"gCTGV^~2 NjFAzvǨ`4 =l̷^;1=5~_M!q{PU24^ ڙe,-r\џ1=&M͖e&g/˪ZV"dCo6y a2Ih½qV<@v;SKAhJ l+Q戳Fxu;^p61̈́aV4Lԭ4sk ̛&Z8O39д/m˛`S}>,+x5yҍ aiq7=H Lha;x_G/fA׏-3,Q ,|vNz(gsڣHw׉$JG}cuwp&`=8e '^:L,%h3Π3vDYfJ./M~eѢ:2~g9r|p֐"MRo" am:2젘_5<׀' I 0}.B"YZ/p#SsZjb@eK}J qv[&D֥ɨt 1rKa 逻E^ g$ Pq4 ^Uk#y'F&_LEҙn|i?8+UbYt;TX &LtC&<ѱ+ H`6͓]nOåp(ى+''n 0V*5kYsL52L!.5u*b !Ǭ@4٩5b:M.+N}iP8ӕ̼,gVIyrtObuṈ\}Syچ7@%,l$C7ƃ/sBUM'n-mNQ䐳OG3wM(f8"WL,̧:w+h)MT3/"E8`ƼlA>+YEˑ l:5joyk0k(GDaɊE@ l4{ݦ4n0{͒-!I**~;]Pa;TpL z׏apoKF}8iR4{T@ٷ9#&(x:2Y jwӯ)a %VC)!R03DsŽxE^di??:=&vz(I;= l`{Y)~1ƣ i1+R=*q=KI([ҧAs:үHQd<ׂʥ%?n4!d,9K-_<VXѳ5 UyF_ .GSj;2uځVAkZܑ# Zn~G?p*n;w\(:3\3ǚ wV.RrbܢXSd YKjF5ʃMh5JlX\;֟i%WM,xʞIwޡƦ+4fqwVod]~<.KЖ0PQATM< ?P0i7_};%!\.*BjBpŃT /qV}ލQ qp6̊;f |TVsyK9sggY'8hݝer/c 8s\MkRITowGzCDƸNJA}k{yҌ]?XݲQ_FKSҽ.QcCKmn@wspyVChmKrhI*M}'މ>+1qw _R4&VSUe-Zx҉EX$yӦlEVڤh;]PH2:(œV&Q 5P j \]nIݽUjoM7up "ʰ;Ϛ쬘wWC0[[li,VvPyĎkՌd_;t9R+]h`'a+em0?kQ‰Ϧh8P̣2vj{'Oo:*g薜1 !p[fh ZR#iOƁ^ ,Kƃ&Л8K=jӠ]@`VM^ C>gaKk܅y@J%!ex0oZ4yMՑj~GyS8qbC3q|ZؚKWqf 5!Si xKCwMڜNպپ0ޘZ<:a%&83tdy 4=STW;;5OC*]Ԧ;]X]!Rg/j̊p6AA\I"L9-Q8#Y pnqI޸lx*Xu,:-/IOOH^xg/^CQ$A-H<%c>LZU:{yQj1{2ruC:7A/UΖc4rw耱2ö0R'v5syxΐ;1ȶsҴW06E迧1ͤ8ts-6+*g{Y^T'БLC[ZdC۶|@Moq;{L0IH(( "ˆ:F*?`?vcoZsk -h)enI<|'m.s0./3Qm&HC.# 3&}YbW4Xݟ}6Ĵ2emX)pV, 745$NPDIȠ# :@% l&Y|uPBO%lJ{uMki;'_cY#mã C|nr48ΉILhYNVy%H]qk:˙l j0NuW/u$ P*M۲tbǃe [ޡ;ce'cg=McI G5TIW>zzjqt{ߠߙd z w:FnGቲZr&j$n~Gjx^2KZ j~t% Wbx%i{aV N~ZG͒IBAmĤT=%:g {F%Ԫ.L$~Jd*vvpnጇ᠒FC?jDI&PZ[Y&{ӈTz| &ea\R:6̘Z)жa5:H Yn|tiIժF|r0Tj cYe/ `FA0p DVM TVX*er6X6CDZ 4i%3;ڟ| @$݀Z7=֦" P.N(5ˡ؅e}".!ǐ 4sJB-xcӋ mOeYM:V)`Mx # Qb^/ϰ6C2C)Ŋ>;Hk|ҟW3<_nGNJ.וMoC"4!;(LfҐ50!yJsU-m2(MK7~8fGLK+,;9G; u ۦPR`z -ñǣfstpRU)wj )uԑcYo]y.<:>n^^կ˳ëu Obn[~>($*,(Tu~qT3b8ᨈ.7|%a'y^11gaĖYaiƥ<<8>fMK&vпY)AGmu(c̡;ە)L7KO?1~kKߧj9||&!N=,R~/X3_sf7٘71~/$N2wޏߣ`KxXs@ %^pΒyZb[PU1!.p1#1,Nx"ZJ%*8(iYSC|h&N+tHYT;w:.y:RgqDrC&iJ͉JGý00l`1 ~^_^H۫V3?U{} lY-_ ֜{X/"]F_#]P'Hz5Ey}q@HDRѪ uXǦE@!S/(`WKKpx_(x+x+'Tio p@Y3CCgB^B=RҼ _J:RP^=?{1jSJeU/li4?<^];'kqLhj0fJ< ɲ z]7Oyr BwM1Zvwn#v< Ww˿0\T^BL;L|6}ʦbx͈::'Gy櫲* <`YILwP};(n(8?~c|_@ FVSJlv^Οto9^-l~&|zi;fC7#ќnN7)=cy'C{u_q_A@x2iIp79I7 q_ay)NUT"XWU5r ! 롅8aʩHdHMh:0jDnw Renv}j9##$hSގ'%&bd3;˚|Owo[og1՟;ս?/1OOyWV+gJ?qw0}ZO!RcgI|e&[̤r}d2_^̀ Z9B!mQ;RnC8qa]iS USesJ8:D`m=iwvᵹ7(&(r.ߑA+n8sv7[zU>4pætceyȍ@"c/'FF}ԌҮr+Xi!Öw -]%B$ָ'|ϓ`_3ƘhyKL+ Vowʎ28HA${Ê~ M(SfxfUإ`yi]׹AwLSA2Թg.s1%)(n=^ l$#m mT^/z{-OV'8]ڃ@ʰE3 PWI=,B,){4+/N{ eU%^UF+o-}@;#wAL2kC9"%S4$I,/z_ſ<)<{WK|4SO?q?*SjM)ĽpP0D~(MPJa1@?BV+8<}4cVQ<hJRNg)"fVj ڌiN tBwavQbOW1cVi3N<,/hn_T矹1UdV_志kɉȧB^t|6U4?ԂU%4MS+] h́P[+Tbo#<NYZMlɩH4–3 zQZZ\@nERiE) ZMWNE[BGhJQHeX1,Dl.H.QT;oG#T؎1@3nWwY]V/~acHىy&`ZxCK0 ahT,|z\*twldטYi{qge^IϦ>.a10\ ,>KkՊ#FYvӯ1k\W$CcvcҠоZmו.CLempz:4~:'A)i; q^c