summaryrefslogtreecommitdiff
path: root/kernel/context_tracking.c
diff options
context:
space:
mode:
authorValentin Schneider <vschneid@redhat.com>2024-04-16 10:53:45 +0200
committerNeeraj Upadhyay <neeraj.upadhyay@kernel.org>2024-08-15 21:28:40 +0530
commitb1b91fd1bece511dfe05d41675c624a4506e409d (patch)
tree0190ffb3e5c53a6f22d4f81a39a78c7ec85d4528 /kernel/context_tracking.c
parente1de438336222dbe27f2d4baa8c01074fcac2bef (diff)
downloadlinux-b1b91fd1bece511dfe05d41675c624a4506e409d.tar.gz
linux-b1b91fd1bece511dfe05d41675c624a4506e409d.tar.bz2
linux-b1b91fd1bece511dfe05d41675c624a4506e409d.zip
context_tracking, rcu: Rename rcu_dynticks_task*() into rcu_task*()
The context_tracking.state RCU_DYNTICKS subvariable has been renamed to RCU_WATCHING, and the 'dynticks' prefix can be dropped without losing any meaning. While at it, flip the suffixes of these helpers. We are not telling that we are entering dynticks mode from an RCU-task perspective anymore; we are telling that we are exiting RCU-tasks because we are in eqs mode. [ neeraj.upadhyay: Incorporate Frederic Weisbecker feedback. ] Suggested-by: Frederic Weisbecker <frederic@kernel.org> Signed-off-by: Valentin Schneider <vschneid@redhat.com> Reviewed-by: Frederic Weisbecker <frederic@kernel.org> Signed-off-by: Neeraj Upadhyay <neeraj.upadhyay@kernel.org>
Diffstat (limited to 'kernel/context_tracking.c')
-rw-r--r--kernel/context_tracking.c28
1 files changed, 14 insertions, 14 deletions
diff --git a/kernel/context_tracking.c b/kernel/context_tracking.c
index 8262f57a4363..00c8f128885a 100644
--- a/kernel/context_tracking.c
+++ b/kernel/context_tracking.c
@@ -38,24 +38,24 @@ EXPORT_SYMBOL_GPL(context_tracking);
#ifdef CONFIG_CONTEXT_TRACKING_IDLE
#define TPS(x) tracepoint_string(x)
-/* Record the current task on dyntick-idle entry. */
-static __always_inline void rcu_dynticks_task_enter(void)
+/* Record the current task on exiting RCU-tasks (dyntick-idle entry). */
+static __always_inline void rcu_task_exit(void)
{
#if defined(CONFIG_TASKS_RCU) && defined(CONFIG_NO_HZ_FULL)
WRITE_ONCE(current->rcu_tasks_idle_cpu, smp_processor_id());
#endif /* #if defined(CONFIG_TASKS_RCU) && defined(CONFIG_NO_HZ_FULL) */
}
-/* Record no current task on dyntick-idle exit. */
-static __always_inline void rcu_dynticks_task_exit(void)
+/* Record no current task on entering RCU-tasks (dyntick-idle exit). */
+static __always_inline void rcu_task_enter(void)
{
#if defined(CONFIG_TASKS_RCU) && defined(CONFIG_NO_HZ_FULL)
WRITE_ONCE(current->rcu_tasks_idle_cpu, -1);
#endif /* #if defined(CONFIG_TASKS_RCU) && defined(CONFIG_NO_HZ_FULL) */
}
-/* Turn on heavyweight RCU tasks trace readers on idle/user entry. */
-static __always_inline void rcu_dynticks_task_trace_enter(void)
+/* Turn on heavyweight RCU tasks trace readers on kernel exit. */
+static __always_inline void rcu_task_trace_heavyweight_enter(void)
{
#ifdef CONFIG_TASKS_TRACE_RCU
if (IS_ENABLED(CONFIG_TASKS_TRACE_RCU_READ_MB))
@@ -63,8 +63,8 @@ static __always_inline void rcu_dynticks_task_trace_enter(void)
#endif /* #ifdef CONFIG_TASKS_TRACE_RCU */
}
-/* Turn off heavyweight RCU tasks trace readers on idle/user exit. */
-static __always_inline void rcu_dynticks_task_trace_exit(void)
+/* Turn off heavyweight RCU tasks trace readers on kernel entry. */
+static __always_inline void rcu_task_trace_heavyweight_exit(void)
{
#ifdef CONFIG_TASKS_TRACE_RCU
if (IS_ENABLED(CONFIG_TASKS_TRACE_RCU_READ_MB))
@@ -87,7 +87,7 @@ static noinstr void ct_kernel_exit_state(int offset)
* critical sections, and we also must force ordering with the
* next idle sojourn.
*/
- rcu_dynticks_task_trace_enter(); // Before ->dynticks update!
+ rcu_task_trace_heavyweight_enter(); // Before CT state update!
seq = ct_state_inc(offset);
// RCU is no longer watching. Better be in extended quiescent state!
WARN_ON_ONCE(IS_ENABLED(CONFIG_RCU_EQS_DEBUG) && (seq & CT_RCU_WATCHING));
@@ -109,7 +109,7 @@ static noinstr void ct_kernel_enter_state(int offset)
*/
seq = ct_state_inc(offset);
// RCU is now watching. Better not be in an extended quiescent state!
- rcu_dynticks_task_trace_exit(); // After ->dynticks update!
+ rcu_task_trace_heavyweight_exit(); // After CT state update!
WARN_ON_ONCE(IS_ENABLED(CONFIG_RCU_EQS_DEBUG) && !(seq & CT_RCU_WATCHING));
}
@@ -149,7 +149,7 @@ static void noinstr ct_kernel_exit(bool user, int offset)
// RCU is watching here ...
ct_kernel_exit_state(offset);
// ... but is no longer watching here.
- rcu_dynticks_task_enter();
+ rcu_task_exit();
}
/*
@@ -173,7 +173,7 @@ static void noinstr ct_kernel_enter(bool user, int offset)
ct->nesting++;
return;
}
- rcu_dynticks_task_exit();
+ rcu_task_enter();
// RCU is not watching here ...
ct_kernel_enter_state(offset);
// ... but is watching here.
@@ -240,7 +240,7 @@ void noinstr ct_nmi_exit(void)
// ... but is no longer watching here.
if (!in_nmi())
- rcu_dynticks_task_enter();
+ rcu_task_exit();
}
/**
@@ -274,7 +274,7 @@ void noinstr ct_nmi_enter(void)
if (rcu_dynticks_curr_cpu_in_eqs()) {
if (!in_nmi())
- rcu_dynticks_task_exit();
+ rcu_task_enter();
// RCU is not watching here ...
ct_kernel_enter_state(CT_RCU_WATCHING);
0$A@!K%4אIi8o^'_$dl'(ָRbTG t8;̉ e)jż ה?۷5#ZMH䍗"+5)YdCk]  c~ȏPOwF#xSp!bHU_ ߉w>K$O!%AFGUUg0(d tCP[hLU6=n6S[yTLA/oU9wycaYsHE1?1m|q.JL2=O׮-_K"VH;9D}OPMgw3TS4 8:ghHu[QQkgR*uFuր k-ޜ~zr:S JG~s~oToG'QVS[~||>^R^ju‡zs'^tf,Lq{;=}o]uGr)p]EkSn,~wz7Í4lG~Ks\(γS4hO27^.{`84J&ʢVZakewc6+pU(GMPS~r\sݔbBu^~wPM@q?"~4V̉ά)Ksi1?f{i+tRPS}i1(Moܣ&ɤR+yu>GR(5%.a٠vk똴쩻oct~U+-man?kSnd~Yת%/ʞc筆m-OEg.|V՟X,K }=`[y$uOweXHAD[Z jGA^dp{$a]gs(ޭΊY353 r|`HDвjޟu=/Ҡ.ZwC}\p8)eo>wu胧8cglu8jd3?97u~o0~V>>Z?մg˷qO^{tCYwAzQ%;(ܺoz}ǽ6E0g6αo7My=OpH9; 4wе6(l_B{:뫾'_.o_Jh]8o~;OS[;K|[H0Q֗ (w\?@JrO#<]6StKhG/d=hE52a$GG>;b׍MwAſ:TO`nfZs7Q}n]U.ND.~InHMgJA5곙7eNfQEE"en;"%"f$rTלs9 k,hZ̞pGd}a9 ^.pf0r_{^u>=qcbc髾Dң_ǟlp٭&03$$ю[oaIm~O'G۷6bH:jV2UYuVgO`us?;mմgQ񷝱żU_#ǕaWqUo%nUzͧR{9Q2A;cH=H",>9ŶUku Dž;`n~=#ӵp؁-AOYofV:7(k\v}]a.Q&ˮov;p=Vj컾kֶm!(wY{/AuEݓbKJvS:x\y᫯z<7g}%Hv== 5ƞ''q[~wѣdAwlnOkl:R Ӟ/n_=[Iݧ6I4Fw;Qcݽ p_ПjH)=Zdν{]om&uf1NfuEdor ǘ3OsxoEo#D<y]n\o O9&I`$c A]Lue*X׏dkwWavxkEMivYG{d\nݽ%hޫp߃x[at3sU~sJb&N]ĒhPk!CKi)ӜYr]v \,ݘ m}uÂtm@a>U??kWG}?DB?r'~tn>xzO~>y*EK&&^'?>˿^څ]ڕݲѶ@䜂D^n xE 6<@W=XA <ЃP"B >Hw~Պ| ,(ع *6.7[S&_1v^D۷.d/(<6`|EzCgWC: %cvVIz*ڃ!>d  \m!K }&/zRVyg65 \䷨P܈uEZ[mӬ Lyv-26:6EBgE@ :eajk%ς,["2EImlh fG3 T5 $@;Gd/1iRxC /s5VMBl"膹ݠP+G,vZuOhH'|nM.;Ʈ i+ha%{g )F3Ȁm 6t_}~w6gl|m"d ,m7D:7龻 _6ըY(/1 4m'A\I =Ay dƧcW ;vs E. ]jB?gaOZ;5~ٲ//vqDâ1:5H)/SdP|v|88]hޙ U=t]U.}-{p¡( tWwQAAsM=w|D/|Йn) Mg* 3/+4Ք(o k3^$Z ܼ>ZoߠX6F:U=PXsCV[|5?_}RAR@_EpCW_ٌ|8Օ#-[ zuxmۺ7rrP8׹[9_>j^'.#(}]~{jی{Z9!_꫞ 2ncSCR~yF]0w7luC[{DzQG( ˢ Y.@.k;pݜ9%;SRV* #nX:\?!JPP9 Y(Y^0 M+?7:< ImB`tk[y銚 =P Ŗ(s!9]߽P%5`ܩN;]{īkPeU"".`Z>PxpVGpBI_;tH 2$^aMe(;xy&_V珯/ciTL!|h;lk Kݝ Sk0noZB#' ve?OUSh|pLLB.' uW,KDc ?tb"`ᣓ"PO[>G]>v, ܏; ag.OGƍsj@$;g^WSȳY5mB^ߩE͜| FVI:+ǥ}^0$6w4 W{:GЦ-(7sWC[ ?ϲB$nQ)a*+탸zG3=10ۅTG".5Y8t`J?}A9z ٖZBh$,kbQ;E6۴t_^hFK짳g֊k ޭ Oc! E sEc s\6:َs Se^aD94_g9꧐WDmCmv7 u9H;3'=G$L|f;[FƷgtq,TVSTDTT-#ڐ~jgU'`?\y*L~Xvц$~{ݮt7$C09T`Y$1N;y[DD^h331%U:Qoۍ_h2X!AhDRDEF87o*4(0b<g(^N( '?5mZA" ;b-7 ݇] ̗ZrIiJnX % \Ŀ~{^p3suyu]sƍ!yvκ-=8T]|ɰDdßwG&BeZiwFE69}P " WϘBxd9^s`$OEzC%u/(<@(J:/{BPns'al d Cǻ腢a -舕[~%fG':hрo>HۭYdjC*ZU@:HqbPcY֣@n>yXy,!S74:?.}ǬE]U텗hi9H̫m0=g^'xTbQjSު)Dzd}馼[ݴ閐N|"YstDDg`„~jj5^ETUEX6|d2`1bVt?%K1A/'kž:Gp""ȳx{aiJC控2rf?R`"2 "cﵵ瓩Q# G* * !m k.3|&PjTC5К!$%tB{-CuԤz0 .MY{`O -?80հx`aw5,ߢQ"S_1:osc)` 3G7Z-uk&ww>ʠL~}|T#kޱ?wFRp]t3y _v:$< BܽCl>\[l|3; 7?3~|O^Hqz_}6B5/u(_-^"x}fH(u B.Ӊꁕᦳg,gO}dv4$'}P*@u}/!'%)^~'T&Dc8Z" \9Q([ 8 tV&"8 B6s-#-+QE\_+ʟܵS:ןWˇ]\6U}2GrkX o ?XeWVBnM>ca0_ǿ:HP܄( 1_N!h^[Z< g~Mý*J(_sm[`DD u/BPZXߢd'9\nnya0GyfRכp^"#rRxٲ)%<Ҏ.\ɖ[ܙr.X2~ yFBj]ny~V75gvX< 4UY1H_~f"Ci~N+:{Z!̨PyO6ڭ  ~Ź-tp US?m>yyFxm, >I$ A;uc~mtn.AA0w/.n:x>Z?00cDIqv"ʹ@("@/A=sҔ  NR\ 37 =|K(Iթj 9$i,EPns hMױk=-K}Uߎ&jHY`9UgE} Hħbl$^wmn/'25<,wZ&!ev{2yAwy32b7SdE{)Cn y3x9DoL=N-.xtr+@H*]7ƴջ0G5KBc&<]rgã,عXN}{&kk͓_9_F{9杙mo$s8gL69-Ϻj?_ZSj=3w0f!\PM1u\TTuNÐ ^! q8y. QHġPUT(RPˢŏJ5T=j&Q>K{BK\ꚺs@.o[ <+UXXDXAMc+/Q?9(Dpմk(͉Wp^z1pw]ۗmV P|iz+n}Qv?R\)~qU< HiOwb;&ajCVDj,_8*8n/!&Ik))YϦzS&<: E Q~8d#ˡG6gz$ׯ0چ_3ۤ5tymDBO A=W1)biL\ ~fma;yۏ^,;{*BݤWw[ dQ,-Ak̮fX4`JI*@$Rbҗ$uՃ7f۳jեg7c<00n2\;w;,BX 9qΨyè]Hlg"c䪮Jhcy\s̺D ۝ pM/6ލ%Ϋ_{X#Hm^9N o?]蹀lf)#[\Vj({!$Fܷj7J-B5%SbmFb:U94s+y;q 0VP ~?e$T5{ jh_4bN Zccmڏ:SLVѩqcܟPrMxqN2$cd/ ĝl9#cEUDEhxuꚔM&@IW1pbH -E )5D@fb$x {h>xz~\Dmqm$"#ʑ"%IWy渊/˃_FUNïȸav:Y]Ԟm4cJD {߯Vv:y4?݃(d,D rc {?gЅqT<4ZDa'b~L cdd z{r\eG9e|# pA o>%稷f`P>M| bAP1@l@H"|p-F̀" e2v<-'P!Qdl~[70<>m{/zO/pA.eO:Ÿ^bV[Sms"O(v`nMgȳ(u[eM*"!-^/m".:ٯ9tץ=显MBf ?ҢsRn5Mlz,Ĝ~;<2YNi,,!PL0u|.UR)R +Tjz⣵CMҽngKnwRr$Gpreiqc8`It ZuNVnO_x04(/Hzx#[M ЦaKs uESbQ?o+e:{6*:u4T2ؓެP'7cA3˃ 5u+׮zˋ)`,W}gr1K<5Ê C:c%y;%CqȜ\6͡26. :Xg Ȗ9(ZB.|mʞRD]!%~k米_5m:Tf j]LN[ߙS_ib [.Cz(]T DDMamL #P3"v`&7𬛇p1d8䚌`@S)յL;lG?"\A_nf- HBHϣ6#=Y٣VZK )l~FF|9>XYr pTwbkhZr/fGU7O@ⓑRQqȆ#1 8>sFNwgnv1xW@T#[KLWe-b)ZѳhWO'Cs- B@Q#pI`\u!kM= ҆ F\s0@z~dE8M|šxcA'oۡ*KC`FFƸ1Q;YbK_iP\ p@!ِ,ŝu P7|p~J|Y°c_YKLsrSu"RY(2-5ÿkmY51 9,"]TxMOܔPD2_ӯE r(c`U'-#xB{q{c=CS2$ $3*oqQwWu&a[}~$ќQ;7AO_/a"ㄤ5x&|mc`B`7&+/fmַYR C.3ȏ1 =u@`#) `<.w"~W|~+8wso9͜!9=gU{T{lOՠuѵݓZi/(eäy 9.[#.~S֗pGӛfazh%D)W3u?TcLgN6`oxyKUyvlWt:7V#vbk13pT7|$VZ]T^<T0u;=7e,sE.٢R-Z͟9,'pu+#W4(:'=U%w3qW& ~uճ7_ n?+Ժ츘[ Brt;i ²w9o=q*TKY+,S]jTosoƙ;wdP& 0u2zd} ŠђT4BD_Oc6L6_cѯ,>X928XtIҁZQtǠ=0:zdH4[{ =TmH'xq7^"%O?ど̭R}|Qݕ_PKG]hY{VT5B2kٺOu .n#$ #WqapQg1a߃el"}dEF|_mЉ*-/R9M %=\Ec΃b#.ih;8}gܒ,lBfԁK fn{1$+kRթeJ둝IJ5v/^N迤 hdӸό,=0^\s[DV  /208o0+ [ȣ_tnO{ U7#+3;zMmv}4kd[ng{F- ޷$ ۃ(?'Y+ Ywn$.wO@&SvvU%,!TB4{]u^gaLuå,,- G+Vߢh v\l䘽$9 ;@MZs5"ę0 J$nq[> adS3 S:_%B4 'qhnLŋq^0X_&5K&*yǩ҄"1-/@W{ƬZ76*ȷ~3:I%W:@Jٺ(3x<Utz<IY/"^3ʘO?Ku6]y JT88z ֺҭe"RnNB)weR>^L5+=B#<7dsVzA[Ŝ(fE Nb1~1]@NtBDN} Èz73=Иoßϫx{NDyl]C{R MqS`f1 ntMoX{ʵa;R~a^ .˶?FSp~n^))S7avl~Ɂ2,1Qӿ85!nl? 'be J7!c(rzfjcyog˶9js PEdJOz:?-n_z_vOtn O'MF̾5??Ɛ]fqcxEr|ř~2/O^|p׃ǓՈi~_AAZ_P5TkJrlAޣ Nm=Z*J8F{g:Kv-S mD/f4((z&wB,[OqQ9RHfβG'BTa#r,8a I=u'gN)KMU[.nv o 6X3q?ߗ݅B?(NɅu_6! #D;WO! SyN<+2t\u0VX_ם~g%&95aޥB|\8 ݎ/3׷ẕf3*-$ J52*], kE8*l9`[RR9Unì0Zl$0*5e. 2T0`Y̢,|y ~ߎ[%LˇP5bn̓|Y -ao_66d̅NP:kHRMږ &7I˵,r" #ewGMX?nܽdc1L0"nWQ ʎYZ*B|Tpv2A!Ϛi9F&,Ωv-KEKZ[u!RR>?2Rf)7޹fv'G8G1Q=L ҡG{E9|P?xJQ׀zouH96:X[ҢFN䤉KH_D0Vz_Vf}X{HȢBqrH|N\ P Iyve[z).<µE`8T"ԹNm5!ǟN˕YI!'g @qm|UO!l~G2j-\id 9Y82r/s/ Nɼ{0yh=s r}楳Y 7AFH/`xGW.m"J|x{T`/|ZOG*X!Hcgzcf9IĿu~Z%`~(cWBJ,i1z0pa5}m.*Ak/uQ\>ac*ܱ V"/P"DnWS|&w7b26wܩt$!Onq @l*ZŴyOSN6*'lvMoA[Q%\ʠB6wҫ=nRPFbK9dMFѣ.o/ŭQsk 6JȣQ'd&>s1NoC{^hUs;MJ'𭥐n:6C㣑Ͷutٷ]gt diEŔ+[ #(̡Ar|H%﹖~e5=JF]UM҂5;!=[)}r[\e>$gF:WA;:|zY~>I,iv1zOSŞM$,[3RI[Ո!0"4Vަ̉~JI)Bkt`@(A-Ŭ>3d{K`>h,k(.03`a|?T]IRx;3xezcQHZ@ )!џU4͂#M*)jnp9Xw \N3~fGGlf淑`GCo28^ < Vb$#Mӟ75Zi0ESvK쟲 $%I30?VAM֔DڙZXlHE$~lrUu2ZS&`]Z=E~J4Yj  % \:e˩; o2 @V©YX-'${TQ#}ޛR3ף֚y x.{sM[m@]qW<K"xcU(Di"Q H >/j5[ Z#W 9՞hSJa˩Ȋ Zy0N}jGm酹uHbʠZsj!s\pmX,Y^n}cPlryLr(NJP! G:!f6^{QyǨG'ٿAbA I̔HH@}_V[)'8~^]VI`ٶB#[fqx ;ms+rHd.hD#djC#rlϿK>"8?YXlnT:ěm)8uK%!AʲzηUD8Ab@!bզ"_bx?oO:d(8CWH6G?R[;|J 3ݷkrp`Vaڶ?>q"*//F2i/TQt=ٛ(`z#Dg ! ljA F.s SPIwf>Ww:-۞͟ ^.j H;)2k wNÓl -4+_7iʩ܈䱖0H$IeI9mZzFƪ-zw*6J ̠iYXiݳ_YrSmoTS]Kqb!uJ&V"[4sDdaczk1E\GܻxO#Wg՛oUJ.g` Z#`m>󴇉k*Est{{yGE|;{OqXknit579L\!o_qx>V *' :RxrxͿQ 4==,k\Tᚼ&Q.=t+mL,a7DI @F[a]be~품q3`~@ſܰ2K87DU7G@4~8B).r w)sOA[vNI=Uo â)>p Zb>9!R==m/9'-5n{ | SBH8b@Qw3y[e\£ % lEVMxa CL/@()9!mQ^[_K2up k~EIC5y,0 YI+6e:T-kr2WM߀,H#(&jfs^Ӷc7KhofRsD3!$hL>SBMwpGP LFM Aе=tT @NK-ef.H?@s_FЫ1 ?VG.orWZ]/A}C\`=[3h):N=* Rw:h"l=(7/;e~[6WSs<9[#E\kUdUq԰D ݚ;)E}Tg9zP_Nnr$> 5uwxF*<4PjKXdgSeCe3`- 5W' ;opKxܾDQ:H)Moi;dWgY(ηz*S%>͜fђ{>vLS`r }$х}Hn l9{ 0|C`#_:)D#c!m]+^5v{ikYk/fr,!e\fWZ3ة6>F셤6ck83z\&]q FjB|,G $jQ4|N*3PSIab]c@Pgؘ=y:ctEO/7UP1`j`adx;X-r^ ,ARoW-v+koyP^=^ګKdJ[s8=z%տWq:X/VI\`ä&nG#&ql/5zuˁ"BxMC=c_VC"AhDv.>\Yr?Ps$/+m J8hssK֦_ғ^&Ӗ9?kkq7) P,KYY¡Ɯ]c, AJYo,)˅I-+`qŵ=4X;yocaI"E_sq6G,UqyYH@;*MWBFcvo@ Cawޡ(Q+>B#OIDcq~$*.)e{ 9(?}{{,ؓ['tx(ڥ|\kKb(XDx9&ڭ@c[ǽK[¶',]jK&x;3hb0{ p5`F}# 62])/_%:/B!k*:3x0?.0$ˣ7D.y/khNn9=CWoN-.YWo=8f$ֱWrx@nw0k#P.wު;(Rs}+'K].x?sUR9k؉O;_V3L=rYJ cݷLfXRjKYA`?I8ƑK3kDv(UW]1tYC؏K4Xg&Va8"o~9K{++Xm "JZN-l׺sa!W=y[+wJtWֵ] $%cc &9E[M-)3:*͟(Y$Df~a.>9"j$OwL-_>v0:~C7Ǘ 9X9QNh$*#v?yDw ʯҀ=#EX\0(\@TX>ȰHag =( m;ipޝ| Fr2w3؎:(ݯds8 KXy5goFZ#ukۥ hmm㓥INNvεi 4 +uy ?L(詬<ز{b@]i!I%f%ը.|837=(ޠCy?dKf)oOu;uU~Ie9| z@scSWZEM_wQ9Zq7A Jl֜WTZ`gdk&/cug?=%WB-+SZȱTІ԰1 +`rZreoϘKIwaͮH T"F%X~ 0`@-amϯh:w`;湮_^0gcBz;ȗ+^8Nat0jku\,TT՞u}8pY%jʍrǐT~%2es10$_Ҕ?>6Ccҏ> eu|R*ؙeljfYRLUje?iyܫsǴ?[sx~>啒³V`큃bD~Vtdr ]/G"Iך:d =GYwhr̲guEp}fwAws^RQwT=ߏv&ב_[ܰr*T#]s]Z~H+*zèXJe\mEzV?qa<>zv@@D{pWX؁Eàxؐ `d[p c`J^<i/wc{nI^ #z6qY.sg;0+G=/OTw\;=B;]n^>zB5(K Pr1Y z=:XŽZZݵH1F0yk nx7VR DyDoa<8cGZ5{;-q FMw,ϼгlj}{zU;6ާ tTCIŭAY2B,QtݲY~be0TUadY(Pː_2p:Je1/ "0X(5AD%}Tu7swjyy^DN+d DlliRnL1X3wW6dmw$ oXވqΊ賤q/o?v|qjvv*QJ=Su??eDb:g>C@M (ąs-N&u t2~;<(Kڪ6@ArbPsӡSQmR2N Kr,&ΓR/1^1#qf]>k! '~2 &C^MB 9гeJalGRxhQAt1wgtJZ4N\~}c9X3g ˖$?عQ-V3 a Sb7#?@Ȝ Z6 +w>>̟Zө ^0C! 48c~,K"-W>^.W9|y14>5xCB`Z醲vsT.㮼Ŗ(@ zRG-LQlRˇ䁥8rŹtQ(mw1yá|G',~c )dR pV2E`cjc!FX;LFuҕi|q5`ns*,:__4e{bmG_(OSO2GD-bsΑ:6 "/x QDPQZS6(V33:ݱ\Ve]@'#$]ŀ >M7G_پO@>gnH Z-^@HX`Qƌ=rK*f=4̧g.Nq;܉J޲o;IGځ('Z\psEұ"3$$JUs A@nMSIt>(hB9=\,)9WdBms[&.Үh>MOlw-#%J *y#=6$˓b7]Xi=4y*xC.~$^F4׋fwڽ2;g 7gp2;Uq #+ܘ@hzk;^~̌9^u bO-'2*\M,`MyR˦?s [E0\6@;E_P)Nlh6ovQXW7VI ZeG\UDy2Hc-7Iȳ>DIlSN͑q߅Kix_89 uzP: |[ptêbéJ0{X|#h̬0il 􀬀Їრax5 KEz.[FG:+@ :;Әg~#98m>֘.ݰy|nxCIz)|wA-Ly72g|`.cQU`#N>EvZ!1t"SDePfC嗙9 bnh/ k']5뽇_dJŏWL?hn,5Uaj DJ olWmt*j=~owU9m#*85eK?C淑ֺpHd<=|Q_G_qD j9,~zP,뀈EU:}ۙgg1Bww͎ }optoJ N3 *ߵyqs HBͪ| 'n@ D~<8Xv^x7W#Ңuo[{Jsc,fđP߶5g8|E ([`g;hR^]YN#3^y_/ϰ*> w]bx6&CV-i;/?^}+pIqf5?7 IAv$=OD}kDujH]U??{+`1EPϯtZպۚdpbCb}VxEEΏOL_vvtL+@y~\+Z{sj{aGS0CNw~x!Ufv ^t@?3 g-*zWPu)$EPtp{>;#}vxؚùDakkkD-f|xTRNȻsb*$xYm&`?$$a>w=g\M گDpozŀ謊3w; (/պ>53Rp6-) "^R}?ݮ>zq~<%(*\ۢ@qs=e9?W%ciLHkeb` I@9lLhYN`B"}?zꛃz[TNԑjMjSP/C͞uV5i g 8~ ^lM׳t?4(t~PY0rV^ 0H$z˒tl4JCV(E3_>j,,I˅=PA`gBU:Am-~?QEamUO\C% [ݝMF1W'[!`|O~23~b$QZsdw39*:`SƗ6.dqp",#{q2t'/[(H@xEI 3k}LJRse7Ʋ1ykB-@o.N!+(6}Ce;S[B }! -b\cgcR/)#7kޖP ^n*?D Ch.ZXKٝ\0lݞ򅳶@6fg?D qd|^983s-&;

60I51G -ia ~gכaЍMx(;I @L ^ƐӋu2"53C,zeIHoYD>:8WNl숗 |% I ~6#&/ O5Z΃~Wjo".DEY1Gx T+ b<4!ݏ:5UQ)R5]+ԯƺ8fd10謑pLvtKȑɣ3u׎cLI.r_${F:sdZtc,N)Dq&P0$5SSŅ/#$ 0Iݑ/%0{Bp( EDHP%5]9F/wqBp Ld8r:AGP'LY7ES*ʔ': /V8(+bh@zp!a#c#pwA.qm[ɧ1 :Y&T`5 Г%Bl[10xI*f*[RLiǽyˏjcL~lusu#p5huagh`؆ #*0MIE5?G~)]"ʀS5w#eFJQe` \lS}{71.f^ Xaۍ3mFVH}1j`yЀL$RixRP,@r[~B8fí(.y4AE:/_}w介0N}Wp eGݴ07aQPiE9Em1TD—aOc]|YoMk?C1`g4Qt`Hp#@ mot2!C./ CS7.˦F-[p~O=豳sU9}jqZVd2|ی0K c𧀌Ov9dj68c|ڒ1ULm#7@8k|lp\  uq^0ݎt.8{8!# "T7c b\,rAw?l.ecZj(M qIp%&s2*{D4oR{ GN 98!?83_g:y%X?bǷ[d)2P sNEkGЩ}vQ9Bhg=ux` B>Z,~1)$y?4 z^DuH] +5s( %]-!"*&!՗ 0w`vy➬-ړhT dkrUI@>W"&s"Ka96J;Z m ą xCFƸb$}1']sO"13ᗯl/9`k|eơPG.;:c7>ڥr ;^>RWKx1&.^AŸz dj}1 0lء,X(3[y wɩ Cv2^)aMϝ0z/5]8̭fއʡqLY$}%v)"zsZp??xIdžr6kkkB@>q K2Vp;F|ͼ,}/>S W&=H12 a`XASBji<4͛g xLXGxof84\c97>[2y vs]w_rmdzu3[eVT1Ôl#'_%ܡ@㘲vC`ASO;gQ*6wUCs /0w1}H/nO"- ڟ9a?>׏⋓e1Tz֡HDKY.._%D36.w$ɲBfnO`=|#7Y"A6-^xs{c ߋ,RQSx>N݁fG}j?cmƱD"8 A9zEdŕ&CT47WNT%A@W;yuNI'y *R0{`W/4Wۮ FD Nkxnq- R\A&FR25iW"l[p)%8Z\?,vq{K.~# EĜCR^ՊϐQ!˙AD|I-ɾq !**>贅J ufl l9(R#6*XLc3 Zx,_\}tH ~& 1jlzٺ1)au?GԎ;ؠbh7ٔ U]截IM;e`(>q<p1N9]z5m,PRFG/Q/aۧR_HDP!{x.eE'Db#ᜳ $߯yH"߯;r멺MioC;;P#A"jݧA/- .u8D7PV5حGM3WR8ڑXbk?A2Kim9 (NI0M #j2CT0??@8Ɵ:p? 9S_Obf ;0dik.)0(pՆB`q(ml9W v I MhF$659^8M=urZz{8llQG9٨ڋ#se!ׇr1yx\y/9È] nC,T8 UK]臭HKn0 U~n#/^\(^moJb_TF$ȱF 0\3G&,>5Aʠ4a%s07÷uJCR̖".N| fMXQF"Uˁ,;9,({:~mX/UՃ)(u*y{`à X0':|}MpFXVtCJ'8H/s|DUK}2Lzsh5}DY>yzxCtȧL!8:8Y\A𻖀Dz|̵׌;`>ِXuнST0[fAbK{o#/<퍍8] < 8XedhHKNfRd^R! #|E?z^RS_M$1coq&ʳ h@_H# $pߡF"BcİxQoċ_Nub™\sL_\e;8@@ ")+v v6ka9W^*m}k?O~ N7iz&X-Zc Fj}TqxC3tff$aMwYH@8\;>~&a`#^*9l0YW "&:&IS RLq3͸X1Z LRĖyI!JQCXǬ`]f\:.{NXfFFBŃjQ lln^ߦLۊ8Dk l HDm)eP.$#dA*4jƗ ݸo:Z-uDx:lfEm06|_K|}Zy*^?7jF?SU99qUQ](H, /`OB-\P'Q AJ }=zlw~:'%R[D%Wҟ(eAطrղt2bԱG~~_,I1 Ds&:'AR󱜦Pc;'7U XS(+o<|)W8ǴID@9oP!B[I8׉` F/PWP=Zv`&ӏԫ8ܻ @ GAW v(c7Gs;h+ z:wSƽ3Ѐa2|aQ~aߏ8طǙ,m*MLG5&EwE3hxYC|eL94Oٲyë95k>2iis3+lD}^E4A@n G;L B!|Y~"i]R.kpi Lb͊o_ӽ]xW߹72e{ F_&/h2hIZss&_eρ ;P'eW?Xx%Xą-űje"l"Ylg?G/GOCj+*80^yDI (Ҋ4hW9۞q)?{gŘ2'#,wRaȏS k"wyy8B Bxñ!W'L>o5#Ea a,S3 LE /|)\ Mͪݽ)rn$XDAy>,/M@SK_zc[3'TrFf`qߘil@g@q{vN=44PD/Hsx;(YE5ď8 \-JB $WkzBMD?oтar zD!&P9+gke|,sϧ;t=p=]W/ܮ =ⱙ5g;>7.|ߜXMqp'{zMq.Eon/B*'C9 *{<Ȧ1O04d;-7W`T1jndb&(LX,{LEBr/~i}vwPvs`U;"o];gp튁p!e5[3' iXiyT<'zι_`<,}1ozWAمF j9wek_?xR/ȗ^UhDhb. -0xe-gέXV^ryz3u9(wF>flsG|YKhJw#;VBj~*6/+f7y+;aɢ :hn=>&UGa( :iXpܽ9% F8=SBTp !2DnT(EX=8r,@֞5ATsv})O1Yuh]Zgc9'&(< LtOFa=!' YT3T]f([/\*W0btρky˩[3Kи7AejL: #A:&F O7iLu_jďw@8 5O5[ 9Ăf67 ۳+F v9#=[|jR#9xva%9~o[y?gq1e7]K!z/|Dq@QD ccTfռF00>뎢|>S"x-!ߴ>SO*m}mu&ؚ Duӝ>^9d9 [Bl8n2̂,@,hd`{sKjz!O61#9BV5{ncS1lőzbڴT:nMڳ V`#TGD[>VGHYV^:ّJ>كf5M؝i s5O\~]Q:ܖa5:ך5g#ޯ.fC#pOo̼̯R&0x"ږf|W1]b5է< -w3ΰ!V98V9fkym(XWe\`V-LX =ʸt4zYf`]CPwW9 )ޠ*H:@`NO R+9MP5ҀI:z&K^Ns3+,i:/&'rFi G:ʸusT/^'Wyնsu7.efVݳINUС'yW$#꺍N8"Xs\oKdqxzq%a_ฺh47ϞzYsDxTBN'<"}8,p$FfppDZYfU[y Tt흹 ҕpZ0495 34 =xyY~e}o-]C|l}狣tk]xo$x$}\phhhN0P+7': >j3MT.Ch7LjUڥɎc^ a?<84.z7=yt -KEziA7\ BƘpjei$)s <3ec>} nICŎ$-)9hF;oQ@.ʵ*Kx|t,:ȺRc ˆ<3.}oissC B4"Z$LHF1 >3!ϯ:V?̛ PYܯӔPGP4<=^ yj.yD <~ ]C(@6&3Uu0{Uzc%i3Jl7e4SsP@*@ܺY7r{o[8!z\?ґ+D\~ˁ^Tt ;Dyz|ڹذBPZpo+ci- H8})SQEag[wɗbrSBZ; ~._'p m% ٚ,@)t(L `[Ȏ_L`ELhiI 8(LJQuc!էA -=z^q]mBÇy[5.wMr+#=VA0s#Le927o7qF?uq-" e ΢Gze̺#ǬbbzX /\>>`ǦƴɔM?oKo'4==cO0 xeT;dp$gS}vW57ǁvґq |((̿ ^E0E$>0qf`fP=` SNjEղ /H~R73&c[;"v9>wtOIjc$KY1eV\A-F9cw.fo2,懁Cv2t~ebS8'"Pb U<ń?IW/B>Gn Yvg1Ԣ~VxV?&|#8)9繚%ƇN *,_P8DzovH~D0N,7Xz|UY۴`ZRm~Sv|N^cO_5-$Ba-""yW+Vh GQaI=9 `< <ŗ ph)G樃Ӕ;`2Nˑ!/1p;Ǭ _Vĝ@͐Ws!rl]Sz6#w䰯MƷmVf(7R ec;|c`6/zHnhC󹣖gcÁl.`4)mkƞ݋Vl,} IN.Ip^k1kfAXY2aﵑĒq:ۘ=R|ӠCoV+ M_7[ޑs~Oq:mҺG:d(v]VHތw38yu0r t:x[ݜ!m=>vTO5^ )eV4 -z @/M%̋&G.uNիۮ G 6S`ψE-EA/\?jM1 # [˝9%2cs5.9=8s͡'}̵0F mwbp"2&p8Y ֊sP1zFQ^Ƃ@h?6GZ;sEr">?]?wb>3S"t*Oޤ|2qYfݩNG[Ăq?wiv9>72Ho ُH@ݏc F-֢cYpT+=?$"%L"ups^J%/徯7_3@ ExŕE8GJB-+[rjg4hYgOEp>{0. e^sc\ޜ:4aoe֩mpRkڅڪ ؂oL)(VzzSpzdIwa:0D:-yy[s+ ~C xj*D$ݎ 2g_صo^4\xe4 ⼫>_6hM)j_ެ dlI~G^/<\q q>$'s q=^*`b$ciLDž#La+ho?ڕ59Aq#]CF̟mzk5&AfSaf7+]m=m7ckr djb&P0%4F|+x}q|L\єUi{ݻ`]+\E-X^]9*;eoQࡀ!;29Ng_eWe_ISK>`lmA0E.yly7<$kC(J kδJ%QZ2h8Yjd`w%|{C@C!j "k<0jtQ&Ms^9ϗ\">۷Ǝ0BYl)89`b %ݺQ6B!A.ENVH*/*ͤ.^Mgu:u#'lq ti89C. -m%ɇNk`XTqj$8+44C(EC`\5#S =yIwVCཆM|z8`ݒo 8rS}s?[qP=R!,ϛlve Xj.T0O1{}a !G(®tާ \=2{}y(`!Iʦ.Ĉe@Id)9`˴WR/G5AƏ(c 5.1]Ak~*ui -˳)8%7̡sSyyGH iـpe?K]t'-1eBbz52)$鈩9;^j6Gްuh@~ m 7FI>["APFМa8~#E]g9v.5 _>H+CԑlTc]k@2c4kKC9yZODB њNGE>`VD9\ xy#7lÒR6\`VV9+ bm9i l PHL]ƀV(+ Pu?P(`a(/(Ҵ.?p_$la#~~O–\>}B4-O񔛃:T0@T HԞNA50޾l$?MnP_d̬Ga&Bju .f+zy+^"Ojy&m 0~TxvE}Ĵ ~2{#苐|@8|M;y%,M?u!8faKYo'u=dp@@JPض2!TK jdڈ{M=g'vU~,,X9c_K8m}W߰#WV , A;b !,8Ϙ4@L.1Zn;^AC2馋F'MOG7q) 4 Y>'7 5$b"Fbc~~[c;BDMB1}*>mh5@l2j\9XV)PdLߪeq?VZPڟT"D^]yfcAU@$ym9~1(q{M0?R?~yQuQ>+HAyabb8f2 {G-= oT߳}/,TcEhӟͥ=Y`QAĠR's)(EBC~B?e@.}?| ?[8 E'Röt4a%PAMo9fa9y7@)vTjyMKSO3Cװ3(Kt8чTy<{0ڌ# B(-ȴksby#'cW"S7NG37 $BO$!)B x7>h ZCDYP)aEj'(!4$>HpJ8ZBګ -#&>~XzC~\9qO$H4B#TfS&kvYa 㯲c `8'VP?*< 4hC*CE 8pd;b@=|Oժ"<mU zg=ǒ}Q<a!/Mu C1Zy=HzNjI^?%is6/hh@|kW=4Eo{`g_C v/VG o[g/h]bۼ5_9_t4eS{ooFQzK'=;g \,^ÅE]tfo)ҳۧDW}ǖ^'b;Lm~1nO(Lax듣\ f×4\Jh2TLnG6(y2hp5?R]>6L'!_aܟ#k6l9[ wj}wG,Eϱ(ԝãnx{YlBq!n~: z~c[9B%Â-Ka\ $OR:'"9FWXNbk:no!gHX?\fL"< 'm)?xCRN r8unu}80}?>'njYѯԦ LF8лNE[ߌw[t=[<װ,!(Ho|h,ZT7ämawYR'=vsϐTG}BcAN0_pQݗUTv$\(_v7 ٤q~ϫHٝ#'A@j{Rxjަ?&k_V߽X}zߌKuk:`L=[t}.?X{K?ߡ T>7_uNΖL)3:>]xGK(;Y9dM8F/'6o׿3ppG@PCXakE2= ſɞ717>4$9l }\o'Tm5~RD\<7[B"^8ssW!9HZe~ Ȩ\f)pd24̤K?B7pAJ&a›^PͶfbhdKUm5.vCځv3?SGy+e{ ѡF V F3wC-達T"ȑ M!A$l&)rĕߏޅ?`dA^[\k3"Aˇm8KOF'C7ݷӮn6:e3*~pw K˪-杻K~_d⿚2:LEEW1 P&ٯdN\OM??jJr=S5g@8's?_IJkZ 'Hv'mN jY[\]CW+,jut?C۲ސF4dv$ot?1EO\lx|n5_n]lG?']ۼ: F{'iK ~̩ϫwb/~WrpF$m\͌8Oh wlQ2X vk(AzZQ;5F`w(Yd=s7J@3[_jYz,TVAǍ'x^sɻ60uRSz4(7űݏ }h%9_̤>ֱ'EO.:qw$KiJ%>\S{'6NKK8 ?,J on+RCW:Jcsw-\m9@RK<[m %LsV`(tY ڄCeTxm|Kd)7=^兂Ifkxݪ$=a< =gyx"'{M$;.AkVBS|W՚hK-'F&kaM6fQ+:~X- ۢG/v]xMmeczC ;k^/ܾGf^J9v$ޫbYK՞X(LI@z>񷁾7EzݖjPƊ[SA}5cYm?H¯o4Ejퟟ݉ApN|NAp:?^5Z*{I [d$ ?bŪL?CAOX|uչ{z o}ȡLfR2%%DÁrؾ.8!" @Ucs*-R/ZH(m$CM!bxأ= HP B6R}*T lԕ6$r~ָPQ{}_/??,L;}w(h.Xhakjh7ϖSg>M [G;#ǘ# ɟg |!"E6"kh.t&5n* sA@~ GGί'PY }UT0" %mzL)E7_s>PwiY?z?wLC٩06f _={lwoj@utp;l?C~ ~=sktr3CC6CAC/׋W|8FT64|C4;(GK);o79bvOd|~Q ׳NR!l^TW>a4j{EMe8@ !7c\3;pFOu6e#,S@Ra-,sW1 _Z&$JA+9lazn Ex/5ezw%!on 6眲uڒBu!in֘vSyM0kr9xxTƱ?N+fIbgABTYWeXh\k}gDF_3h i?eNP_K}]ig}JR0y@=n!@6 l[%N}'@Jc찝]狮 ^z.gn=m!^9MFuxjXM <$zu8ށ]9{<.С"67|f.L㤪G?Pd,m(P}X}P;۹f6( c7\TsЦ'`z"J 7A=;ڬL͎vJT%sRRP un?9}U܊Ӥ5}-CCzhB\EoȘe*:նi1x[ck-ᕜLTWQ