summaryrefslogtreecommitdiff
path: root/kernel
diff options
context:
space:
mode:
authorHou Tao <houtao1@huawei.com>2024-10-30 18:05:15 +0800
committerAlexei Starovoitov <ast@kernel.org>2024-10-30 12:13:46 -0700
commite1339383675063ae4760d81ffe13a79981841b8d (patch)
treeda13a420a2fd5bb91b7d46d0ed04b88588c55a16 /kernel
parent393397fbdcad7396639d7077c33f86169184ba99 (diff)
downloadlinux-e1339383675063ae4760d81ffe13a79981841b8d.tar.gz
linux-e1339383675063ae4760d81ffe13a79981841b8d.tar.bz2
linux-e1339383675063ae4760d81ffe13a79981841b8d.zip
bpf: Use __u64 to save the bits in bits iterator
On 32-bit hosts (e.g., arm32), when a bpf program passes a u64 to bpf_iter_bits_new(), bpf_iter_bits_new() will use bits_copy to store the content of the u64. However, bits_copy is only 4 bytes, leading to stack corruption. The straightforward solution would be to replace u64 with unsigned long in bpf_iter_bits_new(). However, this introduces confusion and problems for 32-bit hosts because the size of ulong in bpf program is 8 bytes, but it is treated as 4-bytes after passed to bpf_iter_bits_new(). Fix it by changing the type of both bits and bit_count from unsigned long to u64. However, the change is not enough. The main reason is that bpf_iter_bits_next() uses find_next_bit() to find the next bit and the pointer passed to find_next_bit() is an unsigned long pointer instead of a u64 pointer. For 32-bit little-endian host, it is fine but it is not the case for 32-bit big-endian host. Because under 32-bit big-endian host, the first iterated unsigned long will be the bits 32-63 of the u64 instead of the expected bits 0-31. Therefore, in addition to changing the type, swap the two unsigned longs within the u64 for 32-bit big-endian host. Signed-off-by: Hou Tao <houtao1@huawei.com> Link: https://lore.kernel.org/r/20241030100516.3633640-5-houtao@huaweicloud.com Signed-off-by: Alexei Starovoitov <ast@kernel.org>
Diffstat (limited to 'kernel')
-rw-r--r--kernel/bpf/helpers.c33
1 files changed, 30 insertions, 3 deletions
diff --git a/kernel/bpf/helpers.c b/kernel/bpf/helpers.c
index 018985ebc5ce..3d45ebe8afb4 100644
--- a/kernel/bpf/helpers.c
+++ b/kernel/bpf/helpers.c
@@ -2855,13 +2855,36 @@ struct bpf_iter_bits {
struct bpf_iter_bits_kern {
union {
- unsigned long *bits;
- unsigned long bits_copy;
+ __u64 *bits;
+ __u64 bits_copy;
};
int nr_bits;
int bit;
} __aligned(8);
+/* On 64-bit hosts, unsigned long and u64 have the same size, so passing
+ * a u64 pointer and an unsigned long pointer to find_next_bit() will
+ * return the same result, as both point to the same 8-byte area.
+ *
+ * For 32-bit little-endian hosts, using a u64 pointer or unsigned long
+ * pointer also makes no difference. This is because the first iterated
+ * unsigned long is composed of bits 0-31 of the u64 and the second unsigned
+ * long is composed of bits 32-63 of the u64.
+ *
+ * However, for 32-bit big-endian hosts, this is not the case. The first
+ * iterated unsigned long will be bits 32-63 of the u64, so swap these two
+ * ulong values within the u64.
+ */
+static void swap_ulong_in_u64(u64 *bits, unsigned int nr)
+{
+#if (BITS_PER_LONG == 32) && defined(__BIG_ENDIAN)
+ unsigned int i;
+
+ for (i = 0; i < nr; i++)
+ bits[i] = (bits[i] >> 32) | ((u64)(u32)bits[i] << 32);
+#endif
+}
+
/**
* bpf_iter_bits_new() - Initialize a new bits iterator for a given memory area
* @it: The new bpf_iter_bits to be created
@@ -2904,6 +2927,8 @@ bpf_iter_bits_new(struct bpf_iter_bits *it, const u64 *unsafe_ptr__ign, u32 nr_w
if (err)
return -EFAULT;
+ swap_ulong_in_u64(&kit->bits_copy, nr_words);
+
kit->nr_bits = nr_bits;
return 0;
}
@@ -2922,6 +2947,8 @@ bpf_iter_bits_new(struct bpf_iter_bits *it, const u64 *unsafe_ptr__ign, u32 nr_w
return err;
}
+ swap_ulong_in_u64(kit->bits, nr_words);
+
kit->nr_bits = nr_bits;
return 0;
}
@@ -2939,7 +2966,7 @@ __bpf_kfunc int *bpf_iter_bits_next(struct bpf_iter_bits *it)
{
struct bpf_iter_bits_kern *kit = (void *)it;
int bit = kit->bit, nr_bits = kit->nr_bits;
- const unsigned long *bits;
+ const void *bits;
if (!nr_bits || bit >= nr_bits)
return NULL;
II!ꡳrOj^}j(}G4nWC~7z'잟~SAVW`Tk %xnU_7N" p2R?lN8P>x;z(+KGjj0Ly%}ѩ!N%Wuk/S+'wJXH>Org~IFQR]tz=վ]E·,HgDf4EHMo(b/o};]6miyiŐB-/M*&̖عWHnVX% CNv'gO u̔9[|.I|8ݑe|cNv SSϣ2F% ީWr"Q@ymhy;59/X\Fc55'5ݒ(^nh'NU{5^|95Ą_#/8q}pE(u咜52B]Ir~~3%7h|0hKG嫆H&4*|֠P(,|,5@ϫMgCO&WlȚ񐺡#ysuvQ%ݝHu3dWV~'rOG,+|ȒdZ]aOms4G2{Cu=T Nao'ӹ2 %!$ئE\ ?z8]OdC$H.GKtI#QwgHJ{_Ud:T'fOk-#⚍Fy*xo`_W׌i nI^#2QnYJge[WNBDnBܿJI$ӆrqH/7{ѿY{Ri$f2g:Tަ߾`_'Op8;OV8X\gO.7^,oη= ? Dĭ tf$,֗~<2I`5)`k~sN *3'֧tkdk81^n>' uWkk}咾I<,_^&4 ׋EAMgmu;Wc%UU]D&GZ,~!ٶsC :5M4-[m,X<{'7O[o(\1r*įy6&4^MS,|j9&Y6C\Tԯc1C ײve_ѿ%p;a \z}H&;}պxc'BV|.#vy׹r x aꒌl/`'2 $HY$ (! HIvCKK7y5(шgAu[GW /iL|ߓCP&&]LqYmO_[5kpwK8ys*?%8Ou38.GNY\ud> qz%Km} M{-UJ  te%'6j9С|!šJY蓙ƒ&qkb;'µ3"]ٿ+^gwF`0\~mYR')v\XE@pߙ\.AjHE笛擳ȞO8@#4&܉ 9Q6A|N'5}Zfotz"Y)7&v]ΫaiHewH 9[{_4>kafl~ WVnY$h5/vk 6FNXMJ%ZiALIp\By:i@T/Y|x& g{ֺ{qlLiIs=c$UBRP"A/+@ 3e,-g|gwHtꂘW^K^^+ ۾;\(XdR0s0wG9gk瓟MAFdNؘ6CL~Mk8 vP 8KǕw`$i'!^mH n$4K*S(Yr<ꝷ/UoHํ`Ӡ?w{TMd$!TBPϪCÃDW %j}cǸn9  |aa4ExKԐhvSyx" |PfRҷ+hs"K 6]Zz{g5}Oo(BqZnh=rh/Ix8!/\%>Y1|146/eTNsB%ͺV97uP8pC&1:shGCq0gn\;F }6+唁tKzx.L#ۥϞ#^dĩg~/eHIM_r]kkCYxQLm[e!;H@=i w2yKBj;W|'G;"[H"H1(^R}{Q/͒%S7e-̈́w|$R}uyGBk~1lB,B i~Lf[+5 .$zD=\{Gڎo5[6N#V PfQBm8D?KQ0;]b , uVJe t %$K稿B5_tm҄>y&1=@BumKv4$]F v˲ }Y҅pԿ3<;$;${`Gx^;OVO/ ֵ 8*Xd= eӥe9N)<{VNOoUS$\梖h0:!Ȏ 9^$9QG瓋4ҖY%Z@1F^pJ'&&],컏ꤐA|plU͉{H뚧A3^J%_GceC$c%wa_x>-%e! hn'7./v/Ph]qDG1ۂ$jmdj#2h=а`]ʟd7#–~$Bj2e#.+aX|xJ%(Wr$C?CJ^=a$E$DdX€ O?^#^!8,C~P˧MGj:e雥k nWҶ@LJNǁB򋅮lv/.6)ΛКVWǃ>AW%jm7^aǪչo+:_xp&!Z&۞OCN`p1`]w&/g=xx"KZϏ*GdjސX7i\g8RJ BtÊBץ>"vvՃDϕClscҷ` ÐqGzzzztx:q%֦XH n{p_2oGFA [Lv\/{_1@6]f^Hi1vm|M);e5OV> >9TM^eq`j#z- nUS)[NN,V{"M+VZAr~g͍dz(bwY%C<{ 3DR- 9;I\}귶6;Oz?[ko@DdHmZiU 'o{|Â.omc1az~QdG Vpڲ]0zql k~iS]BESpV֧r ч~Lg եG2=JM³Y/ XĐL_!WD[.6Ksֶx{+Fq8#^JvW79 Y[u9EU&j0ԫq@|E{h{Zf޽r8oHZ qPµQ'GpBru }̙Z uFFxt%weFCEYYJA-bso8G? wn8χnI}}ͨ2@^P7}R[\x BxOk~=w-Y/L-CPku| %(W늦wd/|j6ML2 J:ßl;"@'ge]p8\eai<쵵qO+e [҃DL pлU.4"+ yδ-blڵMqܦ!M5ʈiV{X'T(p!S 9}׸?7o# R< ;k}*B悞0~j4ϟҞ\/,R6@9@%a,{N4/3{{a|ޗPƋVS%PШպS:mdn{w<$ Ng(LAHz^K0NZ1Y`\aHt`a8Y76 J$hNhWҧbfjxͅ3tB(cB0\ YQнL[t{]rB'Z +Ta0-Cԭ#ݘLlAdD@7je@4 B_ '4Z+(ywć2N-7r]^%u.,TyhzW 5Ft.6;[\Zԟ\u*):p?^|<_ߎyP>В@ KeS3:'_6ʈT\4&Y jdIwɸ%lW5T;nGsXY2E\Ob4qc=26~?& y}C1 7F >F~ksCTkh"%ɏ^JMwkVNH"]1$-m%A]z#HԿJG;ۿ' {326[2_Ҝl6KStLqJ/v6^`|':r;j -]ZX+mD4xb:}f}+#RBK _N+sZA9`Eslf0?G?\;:o@w|:9;g!'`YI"q:6Z<3!7/0I @y]3c¸ky>'Y 1:G$=T塠lm>Ё<čNVsٵܽ`b<Jb(4Ml ug(y QxƆ<h^y`tؤS+^:Mxt'1Ac4{F+a+25:zџTmT'[kN{VI,ɤ54ըZifPW8C6ǴԵg Ի/h58`qpGD&.xsyMFh$!n7L@#ҕ|{ h }AVQؤ i t (.6Pwu3OW_·-č̬9VuX!(\ͯ3dE:FV9 vu?ĺ6K  ]i#qb}' 3z弖YJ@L-o+cUB0̦F U+0Y+{HTMJ!X ]rOOi2=;}eV 3=__;KZPUPumoT@> f|,ʡ,[nD,~:BZ6j*YԧRJ!;vZR lHD"lZ)=I/s7h +7u5iu&VԨUv ָJۮI%t)˘0V'6߼^ o@H>I5ALrPP ff-=n\Hm=cU^`N \B~_tDЋ= $F,/GQ2+I{Z yw!K9'g}圧hPj@o~Q&.%Fͧ;,QiA9> G{F>2żz y"dI3 XNOZx/'㝸's)8mzG*Z}n@jGoTk֔ {=f_D_ -: A1E:igoroA2KɃ'hunX ҇Yx@_ #z˲O^Šd}D@I؂%Pl,)&SUGL& 6u xO2tEȣ oK>|5Y ]GH g ^ -Y/p=]2Xkom4i #xLLaViUF1"4`΀|5GǕV'&1^*]@Rd͗|zr|VІR=Ϛ8 ^C)49~f>BKՏ4ƊPi'W$ ӑݱ.OLvmTi ,N@"!q[H6Ը&5 2˃)ɠO`lrgqu iHP Pc2o 06ҤYH d} )Rf!?J%Ҋ?q`f%]ԋ:Zxi贜 !k8qR:lVxgōtϫVΫiڔ$$۪Z1[f-MB{U59Dy{[nCP+#"aA8lG?elC=mJXw%{;9ZӮK$\tD]=r1@;j¨CSgulp1 GNƆ&Pj_kPOG#W` ̬[ 7['rL_tVoѱ3.f6 dH|Fߛ|3S)5'chqO7. V,S&@dI,q%ϐ]dvSPCX9:A 6ʄT3fa;W2Nj"ymQg(zZr3Hk JDI除3|+ω:#5V}fZzP3!( @+9|bmYYy-)302VNiEf/ή$I~Cu0PjWCTiT'F -x_z^Lk#` AAoV/ £LH}Ro7CX eaJU$M)҅k 3ٹ2_l5DM1|  _D[MO'iFiUÿe\&t Uvթ>1j g-EWD~kpx< l/ {/﮷vi1%dgI Vp$ǖN82D<֨VoqnF ̂'|I9'eA*贵u i.>cvPXO>-8,rwS7:>) }eYˍ1A(G^zqpG9 L 16\)D7tEVS#3B OncJVt4]4]ESP`tgŢф(H^IҫΙ)"]HFBb88 :\kqÚ#pX.v MWd*ZA*tzq>JUQW(u!8^O?Ɵz?>8{?1=Ns!+?cvXntU޾b?ZK-n /UNazN׌Bъ?"7N탁}H 4g'pYn3iwkZ3 s!B 幰ݣk1"XǓi~FӧA"h?] ˚fG6·|:e9n֮I0e#Ʉ1s2?/JVXZd&iɐEiŇS$X5B e/PUEql%NoUj[IKd;[j}ș11Y2AOvx24yGv4_xf)EUkMZAFJT~oCt4ѿ,᱾;mgOChhw*m1 Eֿ{ ~twEzMȾ TS9{BVRg>ج3krPDm|;פtwɆQOSY{@`s5äAtc?JQkZކXǑK+/|+lg竱bSoIupI:ޗAoD~4chVDRLncm&Z *w#ѭ TR6L&].ŕDvmKjmKzA`{ mm#wj{h { ıvhRy/L.ĢA{aLxTd0gji?@aa+ j#)@ ,2 Q X[hRn7eB6EAR ѿ.2d$^4c%k=@x!I Zaf 28"FUhmn4<3rMrbO>ma=':sz P{pʗ"MAY.ދ6FUb;5Pys8hZC2߂E>8Hhmlq,m 6^Pӹ~i9\߾6ꕜӞSI(Ma˶3l!6`3Z zpѧ`<5m}5O=' tW(M/}+2ᖾlkPcx?KoSbK_Wvoyp/ W59ƦxOVQıWI31Icj9G1T3P1:S˸|a]*Cj4jXDti2aF]""S@PIT=R Q-|r=HT8ss bZ4Ij_ZKlQ݌dT_,yI>L,;Xh }WDQ9]$<ԉs'ZlmHg ehd l'\Z6T(fF֎&QQck| 3ıb+%c`7#7ϻЎ/RB(!k~/6#[u'fЗIUa(V LBS jjTՠܸQC[`m XZ;A`J֘]8ҧ%|<%92,I:]1&$Z&85Nd hl}geayoFV#|3 O\녧F^cUc|$Pl%s3Hj`uz -lD瀞9gkzG0vٮo7:e/0i ړ|c= a8أJa.'RRLqB݀j6|.-‰Vx}-9V%g&@`$]g+,` ~@;ViÝF@>:)zP-!|ե2]i;3DjIݪJ]uyz*0Q_`UP5j LYKS҈Zʦˀ  XRj#ZĞ},^rv A=3ئqoyաJb֑# ^u4 pdԨ -uteݳV0Y1|o@f,@*?pR2UXuDPk@#\2|E;NA2.mKp#ռ$T%s/wd 1 .&R${;s}"fRpZ,UKk{Uht>NF'Qy`RH` 3Y⃳{ ѭz2vc w]w2 vR-8d^tjSǟ&̮0B?nk.-X;rg$4Ȭ!nr:LKֵI\Ch_igh/@?f k+H%/i&M=Wjץi䅠Q$_k 6 p Yc=#HQWn'e*/?q2ebq#jv2 2]_N}ӰDp$? _N5`Lf nZiOۏ#Wƒm9MvsJ}vAzTR0IuE.]k%om̶5\9u^!ʌ6wL( qB$Pnk_dSg7qAsMvM3'?6ӉƍAk>STvU06+#U 'dڪ2FkTn j#A*͎\}BUxmv֜^K5I d2F>=ʸ8Sd6Գ{zX]@<D_xrg;/-Ϧ!XF{fz@¼(HT$N '~" 3k)yłVT?_6"K$HйG8u.Z2%K]ڭsR"ժ9"W}x`  NtІ!yfV@Ӡ״\1i4!_^'RoF$gp3 GzZ1-4n7T #3d;޿7?3|zNBs ?hy$X8Co$v=ub6pʟFYrC<#i')yEo"Sj ux!*)#[6ȣlxp/uߺSady&4cga }fep6Ldvpbth\68ԯ T\o7wÏ/ëx?IۙwҶK$jrb],@B{H49P#m?I;͚`F=jz*VPNcC CY‘==ƼZd\sML=)OvW9% \ Cu흅'ANS] e&.7;.5 1 &[ښ-=AIoC@W!\o9oCZ .ϛ˵͟=blg+{Ty%Ŀ%񷿉{0lCMpA4+{mO)P/dP p4i=:J4h?81ʵq֭UVp2Tݺww}j4Uju%=]k/fKkvC=_Os##nc ]'*(gXE GT֒Cw4FKXhA<ĈadsR!6 9,8Cbuآ+29u>S7/ {ei{:ܫg{OǔqQ?߼0k_b˵е$0EW9w#|\mHSZ%W&a-žtJޔi$\i0&ם$M  ѣ+weG`vS&z;cy5z!*Cⴣ֫%IH"'#}ӈ>@r)slp@M(^gJmH_~_;\+}ބqM'ݑ9~4tT ~^#YmY;z};? ]-zez&tQjlV哱A"ܦ#%|oi⛓˙R+TV8ӣ%}է9{:.^n2H:E2kC݈׳V+ PK|=DkhWU4TʭV^WF\}t..8Bꕃ'0508P&-C_Ț Rxw)UPeI.n:>fvIמ(ړJI^cutoNw@@UHJS1v3:UTuDhŒNyNhy(/o?%q Qo!J4Gr}mZeKE>W$_-]FWa+A eTZ'PԤ^a11|Z'25$ANJ5r}feՐtk ^`7ǯ tmf[Yhc) &r;P$&IV'뗓I\``-9D:ogtlX86؞WkeSPȨH)-zJ6]pw4cTH&0y3}J4C>$Nܟ/tք5'e̒\ H.ƅ{<^X8Wyڒ>i$ Ryar b.lHƭgIo@iֹDikڨ4D%w)%[|O˒ʿDv[Z5T-]'6]!KIMyIB~R=BF23A+G,Rm !D?B!ƔNILl->X.ԘW~i$ ]\7voqKl93˂a݋>OLZ ~ayJ/~MT+I*ZAujn+猥sn@ s/[Gjt?00ϔ_U͏lK*mx,:c+a'ZO$b.P! VHB t[ŇTXz>ͺ4\UPގ mvN> a<ݞ׭NmY$ϲFlO,|_)hqoњ|LX4~+K5\J43?|d9_Jͼz[ 0rlhi5䨏I1*H7t7捾ȔE\[tE;fC3J ٸ[ޯĦpMI9-~}t.̔l';Ʌѥ"&0zT5~>8Vrgq@STuXq _r g6!|~UV:DKM*/cQJLBl%(-2_xSr^o( ފ+r0BfZhʰT [|̀E/ٸ=xz/F1Y8!C@̜fa4w喞;XUB`SRax Z6, ߮sz.f.{IUƢd(^`dѥ=Jn&%;׹=2x%!5.#[fyIkB(le,6 يx|cO]__=yζ>1;^ƴ5>t$2.LIVS>*q̆VdݑCk':*9kW,4\?D3 ni6}3ƒ~D"5N׉&XݕyKsXު{QeMhYjSӄ™O{}~ZO|OW ^=(4t~ҏPK"ῒ5G>&uӴ(Czh/K.71q7>b.ʢYjU &MoBqdz744ӬHjFѩ+y7~!LdgGeK>_G _.At 4Mgo+rNU5RuxG8O{}Jf;% }ugƛZ.|$yIkUn}G97ToѠ_S3#|3P8wre۟Ud_f7 {97uBچ|!:nALSrRh>[=ҬZ~)$EmM3hlo% g!6}=]YLTBrU@^ZijAK:128zda$_C+2B4Y[ߵKTmەѠK2گ@`Ǫ;lWNK3T6p|3yf[e ,r!@q1-h=ه4:sۙ fʜD9,![==ȓcak. ggL^2AaA=oI0( IY6"en3Oqr.Q8g²OשڑNƗuf !6 ?O1ծn)X-KpscAuqs˴qVc4$C@ դ2jY9tI%p [g^6%au ZzWû=9wVlt&)oBۃ;cBR"S{AGKxyjЇ'1kLnY _tٽ -rϢ B@lh`p5j}|#<$pgDĮ|Ǯ{~q R[;%O贾sx732Sz1 BPZ ፔ+V Wc4MQt]`xj2jCzS1Hu9>L=ZQL% ӿ6YQw'X="d?!lix_9\}CͪnָQ_]z/ &~.OP'u~Fďto͌ X|[bjYՃXϖ=jXB4TfIVyVRWvjTE_u|i=,s>ڇJt;oD1_Fsd4+:G+H6yVѬ)kj`)')!{c>_hI(sH\ZI4!T@3Gٲ˴#vb[0X9흖C",5vFR Q9S>|!߭?ˊO[v)HoJi'ñ.߁k#LvNRm 3xiZq{o%h!c<2OnXnu$ G wǟ~XFw=b^_P֏%7B o"¹][H9+]g1X fF mhB"@%h +[ȅ'#;{Z;Ϳ3`J9PAMm2~J^OoUGm=k{÷=dH4#!x9f_ws5~9Լ; 0#jY\d5Zv> =; X21i 5Q?]E6"?8e?DV{8;ޙYMP)P) RRV zZ3 /q)4G6Vэ.6i>J;X#;[؂aK;hz*Ð/%k*3^UF(U50*p|/1_o/%bKq.xc[lɎ{/9iqp 忝0vd UM\m$3y}-Ï ܄ܢ,ewAg`=7ξkoGBWNE}";bؤ5Jh;0s Ciᜂs#F;3C=8X#4o6MeEvK(÷KFJH>ζy#C h M b0ۙdٸT//, ?J *8=|hy1А4)IO4u Fn1ӳvڳJٚ\L)L ?yoOx$Qʆ*KೳjFjʔ[IX Bl?ytT'pCT@LJUltۏ>$w7H9Fs{/a"_*oNo,XIݑCFs{Sl֪-u9S?+ M蜏1'ǧbCĵNŴvWޚt45vfG2 3t&1bJ'sec6ٰUbb2Ƴ!WS#.&t(HɭΗ)Ш'&w7Vwn_t`Vx+[' Mk;Sފ(v$_J*g y27{7?hz;GI{Z-E;bձRnB;w:\G9n?P99#zN: zWosjZ3tn s{~zޡ8'wWAR=16ɿC pMqz/xO{}. ;z5貦L.(:#Hv_p9ȑQFsaR)?T땁s(9SIҭPqHCwLUR'trSݟz@x>q\j`9E)ELI?PECH>"lrifQk3c: w'pml{9M9huqt%tTM@GLA u(̈8 8^hY$iolIצwA}R\c~kO$ni YAK\w"ZtWώJ-n"NXrZ=BRuK8q?qk 漆Mnlvt'p[jjT#+_ɘye\26J8>oQ7Ҽ\knR6,cF}3?Q<_DOcЇu6dQ5 86Z2fU0 =LO Lf9I O ȈUxtPZ&yyT>Ś;у}&u ?wlti'2b=}bk/VHmgK>nfrf}ory E',[nG}yJSkh>n(T:]tVB@`, if;N}G#r<`!OJ)mqp}7]SlV041!@iZp%N_KC (\rp}x7dL7U՘ 4\ tR Yْ uEG5*i,қ,hѿ\u]2|]Na B`# j+՚%*02dHUp>;@=K"X2 y{;VIlf:`. R.Iiogҷfx[cޣI Z_̲Mehn4@t“#/ =_ JI/k|=u-O%f e"Zz̳^U|rno'/CPVX,"3 k#MpĖ/,l6} c.zMq`ބ!}&\L㘹g? $%jE{d < ?bfrN6ZLjUSFF.N]E~DlXSpv^mn$(qA U]1fN&̖\  o$|3?ʦ]ƒ׳"q)/IΡ`0EbTH*k,s}'M%}1V}<Ε#X=7-:+c9؊\CԮf /II{N$M˶|,GooE&=Iބ gnTᭋ?'$)W:{/^>c6h2w[ɱ'j25h֑;lCEnﰭVf!8CבNB>m衷G{W4OYǂ/V}\Wtzi$h\ B7\rjደ#c/) $A.3uekRӫq٥PnXq$d2,`HBoY6(>嚤RҶ2ֿaI碞T 3_5@[K&Ie)g)78%w.\-2:dGѐZ7f|\=RO3=om/N'_k+^>wjpu&_K4o7wp*teZĜ:?N?wN4{oY>;UR';2I^ڕ<ْl']kJ901{-d&aM Q f'J蓱֪昤Zdhxm@3+P Bt[ St)EFFq3m 1?_Oq</C^S-q'$,\#ga hw.2ٜ9f GNa$*, PT[ tycmI †I7uODHj,<}8uyr%T9Y\b[5ȆrJEE]].3@ibݣApD0o@D6;hjtZbϏCUzCU}4y-ц{`hdJFɲR(B lXʔSEo IІ'bS"w3~ewӇfV1@J ӶIkQ[ivxcm3> ,,7A%Fz9!yg7YЭIFD;j0OMDiTjTAP8)(ʺUͰe򸬑֛7"7jŒ&hIt=?ꉬ: JzChHhA>~M0,B v!їV &-@zR4h"t#6:sB$So#;О(pO7xvKGL^_1.-fsY.d8(h[%R23;*_-d.$itd2`흒&&}28+A@x=뢰 fTjdg4MAb^^_;7rس!Ÿ_=x̿3Y,˛憡`<:7l7] ꨹i_Bh!qF߳<~s~)Q] 4tuM˲:u,?Q_ Zl u|&$!9z5O詄Mѥ3UX #$t($QFцQr9t5hEi2@٧Lo_J_IT=pb{Ŝ͡%+F{7]kS5 _j3y9Z:+{bܖN$nI ȉcK°dEt%T_$}ѧ:YE ׳i6`h\4XB&Aqn9߼2FE>e`I?ט;NJ6<|>Cb/{1G>g.tƮMKu_LmAR\+*l,2 zpw?qTX)K"Ujx燫ĄM$ĵu׳ 4 uoƬiοqv$` vC  "Z{mWj-٦,'6ϫ2SR[?rDP4.UѭPV揷L,A%[OCb-MT22R !Q.Wv_;%ziP nA C2h^]Kr%ۙ*c3d'ʹu|YQ(uE7R<}=C ="_g)1n*5:pL=хC(-ͷZs)%4h`]qe22,,7Ya80_;du6 B^aG'm;'~QiY|yG/]i.sZezIL5u~Dp%md?-=g>=lNןz4NX<M 8"|>B^ g%*ڗx%y 7BR[-hwH6w/hyz!H{nyV0 HZZHQ?nv~yh6^~欌|ڪ6MxclH4{ %b9s l7YL@62.BC8'Wl?r=\:_:gU̦b/٘0WM"y$6:: gPs<4~:%p14.4(I;a[7'NBT񲻦!P Cx!e<"x` {tK 2۟#b&^>7 V(c z6\"7U2}SfceyuۥCxh˿={VLPLȕѤ] a;ix}F,l npy3J3(IhԇJ(XhP{ #@"xKOFރMtm}rJeTu;uUOF=u2ߨ=ZwR;əkMTu@p)iD󬃴DUQ%irL rĔ>AoHشĦ.L@g<Z[+W}rJMj4^58Wc˰}Nõ8AN4$< Ră#w d+ [T㋠蚵^6AMg~@GLz_qMi|Y{bU JBRs՗άww.BwkjɆ;nֺ SpҭQrz򭏥^tΞ pgyusi_p2YmWLAӃw2/ `K!)7p@J&9",DE/IXO>=[$dc,mvY_H"(k%ަ3޳.8$HHfVjߗH/!N7M7?L%<,s;桝^t6KG ai9rYX(鄳4n8~.$C 7 I~|`%ًdk)9/:z^So/ѳL#cY׉KMC36Hw1Y펣)dGBJ`,,aS) +k=Hh?VFktA[d]C'"qb"5p3YpGm=+ ԧv| 8A#@zGˡwe-@R?a'DGwaZrmmN:+8t#x gR6wj-u-nVidl^}wi6ڕJW] .?t$EK$ic z?ط{$Ē #{%*4_$L ]0r݋a~~'A Yk%v=I-DG9SaA3ԁ>CF{mgtW}vTum s_`1j22sfR,Żcsb8Ji }QP55ʃgg|!dp!X-Ά8̡=ܲevN\+\ҥ߹>,4zCM!]9fÑM]Z!nɦ9 ;فZFMXuT φ6P=u]S͎jUl.V$evՌ\L[z/CI/[IYOP?ɖ,r,| h?t <;5C[)ꘄͶT* ^iIO2J[ LD#K<fq?~?f e0iJ!23Co;/4: ̉(F;$ܪFNs~:#:sS[2~8.i5: \7a m. --5S%34%+4=]L"ݓ j]H\kЊRv3;5#90{B4x=H+g '{˿DHgOY0Nj6}x_o9C rFkd&c>Կj ޴+RmoZk ۙ䵸Lٗ9's\ESEa whw’R'P?H #;WCQbÎI#UG" @Ik<Җay0sC*)| 7My831CĸBk;'loxkȵ4/M%E*FYVH5O&,3B{CE;MnI^r %/QNޙ.ٽͬ75n[R#Ѡ_,a< WOJYPs@.M\uqv_7_Hpht? ^93[%{;УdisǯZ`axB;۫`AEwHn*_;4s4C*0]{Hls)qtKW% W[$3e#a;_:8`_" B] >A;WedTFhH3ԐEѫP`o0=#AJgXUjUݎ ;+MU:]ZMEv̸LszHnU2QnHFKR<2)VVda0)(q8H k 2OdPA3:гG[5iBެoL]!_ks=lvh'_xR<6s1Xή!qsĆFߑED[o/!!Oռ_3WtڇdG]#b>nu})j%-JZ3ynG{2r ﱽJ!#h?cξcޙ仿?.Wz^AkY7#.t3]P>i0FVVA*J[Ud˓O}'J&kwL>P8ojnhe'&C[Jo| r},6󟒶s:%z{ ⑀a4,n5hg[+T>}rA)!!(р k9HtS1OxɺFLzH-,ڇƢΣLp$; I!X.ݩ ֋ݶ6Fpq.ڽOnWLKnvJrƟƂ>u|q :9Ξg6v[aߣ'Ut.P]m6u(LW>7'֚AmqڬqU?=wMuvhZEb5-pz#wbh˾Rf=cP_)>|k{Ka1M[,RݝnV)֛p?PX1̷֥u& |-?V'{zrd #ϑ -le1t@ԢN9ozǮ`P>[G ^=aY. [ёPHx`Q^]\*§;ky #Y[4Ra1ɐrʭ.tziM 5ꃳE>O.CekeCާd X$ )_:Ȯ+/YI7_;/8l̖;qG/vdκa&j*nUOߩe8~yM#Tך$dxf h)qlIjiv>Gl/8; /%CCj+^ :%y=MHH!vR힥}wvz2:$[N$nq:U]ȷ.zmA֡y,8`r |2v劣M`PWʊuUp%R yY?씭~fv -"Ӹ0Lg-4I\&PXmL~@xq9"=ggE1yx/=?leLR?fp,y 5i7`eGS2ke|ORFn2M(>RوZR {1,q]'q7T3&Z'˸]k4TCq(5* W8C^ΖOÉ0_rwEZy}}r-{;V@0=aЪ~6ǀԚ?/JF\H_.3^Yp`#?F]r! 9fy<IP7.밴8r|&[˿NJ?s~ YpA2-\{EhU`?잦^DIr&31 j<ƚL.ʍ@ >ح8KP|.4,*ә͂7%4Kd(5Ԁ*STkF\ݰ|*):J75<[kR {zuHX:ҭ^1LAR+;Oo`Dŏ D'ߨiiwkxGo-!^ѽ} wbπ}Y'lGDor[#0 #qMN냃v▶:bJ+KhNI72J'r#h ~Q6UAoi%+9xj:M:HCԣΰݩ4%Q&*QjU}T IAaDC}0]qT(>1,)|TcvɼM3ЈwQ͉lSfɺEDEýO"_M {kp2M!qB9P7escH`/v쮘k{N96ɩo {=%[Kfkd ,esPg# _d^3JNuUÞ%4!'ԽtzonLj]mH wBx%ȉIM(xtIV`.4Ԛ{*m>Kp03hEfr{cT4Wd Q.s]?3Yª۩TZf? xG\g1wC4FB]}[crf9Ͻ >I[}o%_jNct]pk.QS7=rFCIE%afwPJq&Ìfݬ}cRjGX]PЏ@X~6,A @B'>8?%,I+s]Iea/-=g?i=9;sGOfzyTF2 }\U+UK/je'}LXQf&{Y>ϴbQF_sW-r>9uFƭ-׫?QڝюB@[ a0C6WS/fuu^&yڲ"EH 3rĄk_K[%&bh$d]vqőQZN.y#|m+5%s Z7`CoݣBTRu7/"jO#AJwX8ZUl^#" {kjҒl4ʈk[k T[]P瘞Gf&[<+ɄU[.ɟ hkYZhHnƞ11Nԉ9i gDM}$vӠVkrnhd-}e7ѷ2{șVLW:Ępx`F8= z Qּ_7L`F+w`F\O׻ Pkǽ@/Pb- *m~oJ1 ޒ"t"  4w-0: rCv(,s9`&ħ^DK`LQڋC_/%G|i2OJoagͨ)ړu흮um͙Tb=)xsCRk`6Mnr%pSt 2qNcz9,nD)d9{aI݀VH|_RK^_!]2{28!q :mйrs)gk O{01`v{7`08>n:{[7IJ"Ar[|ӽimEeaN2 ]274k}b>uK8G$K |UU t |,V;O='YݘJ6Bdﶺ Uq*SCyɰFXU:ἦ5u%0&|c+o}i,ݱ둽AP:--L m%7Ԣ1k(B#2e+OA=1Bb u Oeoa6-+T-u3r,w-#5u[($'H}Nm { $2t&͒JN܏c-Cm^=?lj"_dvfkF=z>uƭJJMMw SWRB[}2ekgv=C2bRaiVr.l(7ಳ_Me[G0w؋KʰM"ߖ fTWt 7[k/#Oppmwӝtdy_KX zs/٧EF2V~kUMk-(S_U&cU3= ԅM1U*Y\_:Q)wQ&H1|99Om$w<LJm"&/:2zO %->ҐV}r`>5Ǵy/A^ Rն+;z2sNRLow%;tJq'ag# . VSz$6Ĉ; =d|~C$xw SH"e2:n% 9E#jT5/oZ fP.fW^#9347Lv;D I*: e7j~'t$!Gǧ_ck=I8Xğb\+|%UZ&1\S'x .$waIrCH3 ?aΨ.XgCR"Ke+%?qR+b82.GSƶQ^pBq=qzZl~NbF9X3]ɶ$[-؁@^`SdTSk ҰĐ[sCtc4Xn{鍦MY'N_+Wz>W$7[mU$4G3NyWQI'!!`nȴ1_;9sjy80!' v/-+ w{rp\SN&qzb QxZHVЛnQGd+NMש/?ѭɽ#TBp϶SQ,GR c#>X}A%!=?{RA;f.gfo'S55*L҉`QR,G&\Jo􀤸CbVq kI"4\r>S8g*MPX IVX7jxHm~u}UHVGc2t>VuTh8 9l&Zv+'q,|B\\1M?τ/j5ut'˒_rKx<P'&90&sۓkPO}BZNRJ*(OڀgNa$xL ]?{6lE=Q&7G*G6{ؤbd{bGTM>@nx2̽ܓ(e`纉u|Qbuynt*Fq ezCd#Iv VɈܓn4qhQ Mt$Iὐ|`IП 34Fx%`H2|(wZ㔙\P\l4/wXj1z[5UAʧ>6eoyRZZo[q7m ]CX^-! H'ed?эDp+Hi9%{ \=k n|fc#Qkp*ۓ 3'Tj5@/[m%ixȆu9%f$ !V?gN,+ 6sRGW bm/$,K0W{g?&rs99|2V*b(Hil6ݦߔMa@'\B]D`%PĆFg̱"b9?CCaRt`N=-N؆BXh"p&W|=ݖA1.,{A `rCyNv+n/mLOG8@[~T[{)̔t7i Ԯnt*Ac0Ox2rD ]۝j6H7ǴT(p p~͆=PMĬ qIm2O'ix7?gVAwG JM,w Г}|K 0Ov-h>K`%?{тlkb+R&P@kr+&Y4#?sQ'|:㐿3; p+7'=-%dY{C Â_`x90eBI* δBS) 6򦱳b49WpiCSzoO|lv&V]9TQN& *Y2>qQ_ SDng!w1Ir>M&:2s#uńWGׯ_d@iYk[ &.) α0]nFNH0W";N#8st3 DO8LCE~VCg;xhd A!@~\Չ&jzra{^^f>zqR5c\$Vk%w2S~ĀiQo=ynU4 -UW90g:A ,w|mI*ht % V}LKO5% AФwC &&cXv&*%(v&z2[LwϾ 4e%'$f4s6wdtKz&Y/7[L:NfM BE&8j[Qd{;ɐjOJxEl,g3QCZ|7WHlnpw*\(j𙣔A EQ >Q&C2{v>4C] ^~=q [|8=I,`z#dwg$;g4fJ]Rn-fI.6Fբ*pO7ɝ Z>'uaz%WfAhsgKs7{mK( 5V8(9Q:uN0$-$l#3+lk (1pOkd=hʨ?}iM1oV>˗/f14LlͦYG~R;BqC_8WY`,IcN{e9I3Lh@h[Ndet{ }ad{ftswYPmAnjv4EtCpwb͟/~jSYmFדp/N|nd}9$ g)['tqKh- P.SSvƦ{pKlH\ߨVSi@,LnzZU^mЍOtoHsY|BAn%Te9D)Pm"mhKٯJ\&eiB{kmX0Lof"4 qt݅W#hWr_$hW/\ZDSA@A| „6šHi"{[BN\mi$ 熑#'8Sr/FfEpl-_BwH]4Tk'%aI-%4*-qa§Lј;TfE&o'k84u% 1Wy-{ɖj'7)! a{}z6d-;(Y]eܮlځAqd'ں;A!ц^HcrSH>9V1:H@'%^'T gHT4qs$ K2E« BIB8턻_c?\ oZ'p|Z^?睆6<ٹ_ L --_0%<#ƻŮ|bO+ $+2dHs*. <ӱ.S;;\IɆ7bS^y:h)3[)pyIwѳ8#.x M *E^;ܸrQ-K0vh3]2'T`ZZ ]Wmt1@a=1Z(k1:E%h%Q<ͥb xȬ#^.ĕꓪ&qfpULァQd0puR26 !qhj#&˲age4=N^UCGcrLZ24m$ G#C?ijoX^"?HNyf%^f( 0-=˖Eկ#C>۫Ւʣ3J뢯+l[8u55^]5vKbռP]rGCG@]w&$.d6+z'aʡӨGzH$f;!oVi<'m?:Gί Uo ^Jgl20;I~|e9:f~ԟ{KPzo[鈣] г& ~;-NS^niH>=GrKQ>Kz/ '"CdhѠX/ktlȢGqOqfT?Y nf~u=;>c0!؀:Zgr ʿeJV[k54t!:q2MTF&j6P8/.i 8#D8h;Ic,^ֳbPR-*UyxG-s Z9 }# V4(nQI θa?3=D \8%kZ̈́MzK59R+/>7[[YqdIoz^Y?eoܦJ*dE{|(wuZZ Ĵ~ 諪:1Ƌi$Ʌ W|/yOygۡIE+dCRJ.IuD5ZjWa;f~j;HIzd0ڃ.9s k%  %4r*uZٷvhu]ZKQ8zKZC>>lL $P@/:e!3{+gErw'-^OW^,L'lNQHfvU6*eq CXl֝b3/cfK6ҍ6*RwL)SzO_AWY{|ڪf̉D&bTl9{_A^)Ď!g!,(As= ]4xrAܩ) ә\tcmz> ME'+99+Kd$pGbw's i™Dt -t M%jC+ku77[2e182,:_aF47D84~Gs ]u- H:! #ƜO9vN zS_"a 3 -&p^rx9gKyƒc"+1 <89 i]ڂD5e;nIY@} 0Ygy4/L?V3dt$pFB ckA h5[.jܕ-r@xЄNrmmN(]XV:47fLNwC zUFr[,Qkf}EMe 3#/hx AsX='$D/Y."y6O-3xpܴ@j_\߽-}02'Lcפ u^^6?]Z{vGX8DuE[ bOeVچ[~YqXwpM5;G2N8@R:|Ia{ ڂ8XpFiO%YxF.凛ͫsYH~q}iM8s3B3\|9ZK7f:'Tw[zyrеT 'o#]0-1s)+?/A <HŻg`~Шq*] ]뢛'Y:4R37qdف“Ķ'C4cS_5hFZ|Mp֟`2G }:.ZZ9)ɷp;Pz5'QSkn_y ]jY]}'jIoG3>#{@ΜJg%vׇd +?121ux El~}<qfa쓓2 "4X<=p.`,P^^ $S"ũQR0cD?;8DϤPN{O-R^,%Ytyxыvȷ'!, k JoK&_Hca: ./AIsixXRS yx陡}>lČ.,imhMG,|toGK8t=&#QI}QۻrYx!T/x9*fŇ$Q:&%Y5U7[$華J_vߡc' Gw[ HƟ zD3n .F ]49-]Cut{$xs&sJ7M\cD,Vj~n[VSy煞+*qD^ZNm5^eS].j̲A1vi:DWK˛Lrb:e;bbKBb:2:K4 W]_i`B nV%{{q6 z? %iOE'8X ysL:LDr4 7z@#qd*lŅ>z? )p '0.gNҵq1s1s[f;lobu ZK.fΚGfF`7Lh˗ɝ2~eCMd %6d#:)}Ql$q2AI9 #*Ȕ0ݚ_lӢgq O Qw:]X@z~>G RR sùA ~ yHLe&Ϩi`ύ\=y6cgT_.LM&7Q!בw 9zdr|zd1ԻN{8и†nl}orHN.יSY"94{(B2vg_xx0)JW6Iց4Y7Zv%X~.@[%+Nh.PB?i!#k03IN\)\!&;w>"s9WF!אϏg\po_Kh(j|3q%Kz'\8T]5gQ=/'5d葞l9L=.&"wRq>trz n~0M٦Ncp49c&'O`,YLZ iLUqBo{s&O9gOsIblP\''+!C%Xs 0({kn-SDc/{OZFrt _Wɝl&7ɫJs"돖_:Y@|2IKaB+yF .^Ngp=IơѫLA3(3tHJR#,c^GƉQj +ܾ"l c 罓:NvtófG܍,ZקoD bLF&RfKfOFp,L&K#:W{\K!z &Aga~' I1qGE_F߯MrIni3bi0a>O+rA')lDOrzJKZ [#:$Jy kz+N "R_zwȂN}bD`k䨟De'.ªY'K?y#92x}Ev : J YBA$bD[ӱva\ mV[m$ VF0NNR>ݠDZB!2t88 3Bf6U_GYȲf_R]̦HG}!JY^@qv!޴A]:)AGRNJŹvp"nr0܂lwtt c]FpޜJ$&<~Zw;ha9!gZ&f8&&;x$Eg2HNN줪M֖43]5҇o0= Ep `|_f*\Hua&Og wxFˉ=< &I]!,<7Xg0~C4pkk0.L{ y,`=Ƹ/``5]%̀-k 8GW=ryҦ{Zk,²rs3`gp( ԎDx0~rNi: Ξ-#F*O,)s`]I!#($qmbގ!g"ػN2'-wo)UL՜N[@s.4R0לǙ@%zb6|"#XȇvRE6ԗ:WKw&v+iq1N ;{N5st ,d{>m:BCͅ1` ,0!: pU>_Cv/1@iF2h}>@mq)bSۇT=5>)W J?ւ3¦aY%3YXWǍm gat\(rIu1}*h;dE~:2iwUbu_pʼnez9!Y{o{Lz]LlkuDJѣ0'L&;Ė5 C$G~ 4X6bIPM:d%`-Tctxdq1,ɚbƀ$`DА{PA=K5H"uQΟ(MDh=E<'Os{x\} z֮'Do\pi5dq{|}gdz^ && N8z/(0ÈafqX Y1Rjc( ථ}/NŅe $ ǽ5H/ez{0υ_4yI7BQOs+QljՌFDMSsx™ymi|yMTqsȚ3l"(l:$~&5PFc;œ(.t*[)S#vj}[~PCWAM^WJ "F M@K0ZD>6,޺i.ݥ8CsM P߼H(\X\e'.o%Zm B|Y2҈*!i!CfLM$rO ]s;mߣ&CS"#J N@?!A/U=e7pp?T%ct cgZuGxpٻL 1K:^AjΑKi1S¼0po,6+fϹ*Y7F=L&#GWr{a5mqMoqۋR)` mA IHC2,L*Z4qVk0Lt-lB7):+E{{o|7+PVvRi4Ʃ,/Nq0q j,.,91J-" ^(kr8%C |Wf: 7445"NX=jġ!{| ~auv ۡWqHCzth\fQ{PyGw+L3::TE16<:.5gJx{\' -QA8Z#>9z ꀊ ̨.r5+ep| )"mH*?22;F\bjy~(Q\ncI:f/3೎e u{u8܍riE>y|~9xS`H0t(DK+4r%O@k;B1@~Gp'Hأ|gS2] U $18A3#%6衺,+Oԏx"[h _N -hX'1nX!&p#Kjэ,5L hYTe} f:r1괓!]TN}?_iոnA\9%:Ms /Ƹ9<3?ʶ/0n ۜnc5յW<g5WkQ "JP4T.B? %ciP*g>H+m3(T@i,QcSSQZR?[˜G 0V֋z"YhȝQ5:?. ~A}%}U컬r\\J+0gCf:d jCɇq/QdP'c豰dFqpB,.|2F~WfsI('O6֝pu2|tD\" j(٘y3w;K4!Au73`ur4F 'l.Zۺ+e}(Z~?9(i"Yhk--\`HUűyKO25NwwNÝ@OLg3*l%uQ]B)O⦽L2Ck=(JAf,e @re&}Xc@!ԑfNTV,Hk;+TvkJ$ 3-t;>Q3kpn֗Ikzދ&'hY%dfzzYa U/?TBo'@4l0I䗚e;/g[.fbjm:)ǁ=/m/ 8wiTʹO6ZR-tyqOxHa#RpϏ7}/7G ?;͗AmhR,M{B,v6+=`o]qljvh` ~^qr2@q'Nb(>P'厴IfT]#7.< xo/[]]To|/؇mXlI.K%5(WJlϲ!}fh#|moT}s熽u;2ZCcw&ţP̳m1 |vas|n^Q`x)b& E>%QҼS?Q}ɑb&SRYdMc(!GQ ,Zv ‰?G ^yO{/1Yp*LJ͓k^,Kd5W{/#9(xoEӎ(<?R.A%+!3&H=N,%Pp•RON̲|GB^!BS/B]T %|3ud aV+z8dG4p=Ivj8̾;ֆ̘Zf delXqq@ \‚#y]9~RE pK'C8kWroFkΗ; 0dxl;ϒvaRB F&LK X`͐F=֪򒡉h:#L&+ot:#2%oTMh_!ipvꍚv'-4 ,tDGϸYN ┘3V[_.AghC6̤tļ68#Z9&^0vĖM"zAG-ښ2hSqzusG^{*C}斁ϫԄ^ e2%>T@UA(-7}.i\Np)w ):ZeIP#m?~0l( j.hI{wHoZyCyS|OGqX0 ށDeʗ#2_@IC 1khhg`9p; ޿ԥ2%ޔ.&,{Q[AALiܤґx#$_kQbk`&:^dV[caǒ(x=Ԉ"l!'uʠNWG-AJ ZKlb@ sk~+ 9%6~(ũ Af( y7ًyG)gciʘRq4[av s^Tc%s|(Ev4Ȫ cB;{v3 6M+"ukCZ&};<?w_pS˾ .Jv]s [n&:ޏ