summaryrefslogtreecommitdiff
path: root/drivers/block
diff options
context:
space:
mode:
Diffstat (limited to 'drivers/block')
-rw-r--r--drivers/block/sunvdc.c61
1 files changed, 61 insertions, 0 deletions
diff --git a/drivers/block/sunvdc.c b/drivers/block/sunvdc.c
index 6b16ead1da58..ad9749463d4f 100644
--- a/drivers/block/sunvdc.c
+++ b/drivers/block/sunvdc.c
@@ -875,6 +875,56 @@ static void print_version(void)
printk(KERN_INFO "%s", version);
}
+struct vdc_check_port_data {
+ int dev_no;
+ char *type;
+};
+
+static int vdc_device_probed(struct device *dev, void *arg)
+{
+ struct vio_dev *vdev = to_vio_dev(dev);
+ struct vdc_check_port_data *port_data;
+
+ port_data = (struct vdc_check_port_data *)arg;
+
+ if ((vdev->dev_no == port_data->dev_no) &&
+ (!(strcmp((char *)&vdev->type, port_data->type))) &&
+ dev_get_drvdata(dev)) {
+ /* This device has already been configured
+ * by vdc_port_probe()
+ */
+ return 1;
+ } else {
+ return 0;
+ }
+}
+
+/* Determine whether the VIO device is part of an mpgroup
+ * by locating all the virtual-device-port nodes associated
+ * with the parent virtual-device node for the VIO device
+ * and checking whether any of these nodes are vdc-ports
+ * which have already been configured.
+ *
+ * Returns true if this device is part of an mpgroup and has
+ * already been probed.
+ */
+static bool vdc_port_mpgroup_check(struct vio_dev *vdev)
+{
+ struct vdc_check_port_data port_data;
+ struct device *dev;
+
+ port_data.dev_no = vdev->dev_no;
+ port_data.type = (char *)&vdev->type;
+
+ dev = device_find_child(vdev->dev.parent, &port_data,
+ vdc_device_probed);
+
+ if (dev)
+ return true;
+
+ return false;
+}
+
static int vdc_port_probe(struct vio_dev *vdev, const struct vio_device_id *id)
{
struct mdesc_handle *hp;
@@ -893,6 +943,14 @@ static int vdc_port_probe(struct vio_dev *vdev, const struct vio_device_id *id)
goto err_out_release_mdesc;
}
+ /* Check if this device is part of an mpgroup */
+ if (vdc_port_mpgroup_check(vdev)) {
+ printk(KERN_WARNING
+ "VIO: Ignoring extra vdisk port %s",
+ dev_name(&vdev->dev));
+ goto err_out_release_mdesc;
+ }
+
port = kzalloc(sizeof(*port), GFP_KERNEL);
err = -ENOMEM;
if (!port) {
@@ -943,6 +1001,9 @@ static int vdc_port_probe(struct vio_dev *vdev, const struct vio_device_id *id)
if (err)
goto err_out_free_tx_ring;
+ /* Note that the device driver_data is used to determine
+ * whether the port has been probed.
+ */
dev_set_drvdata(&vdev->dev, port);
mdesc_release(hp);
~͓ݘpri]LR72{K{HՌagU$~X}@]y )^]F0_XV$N*BP>MqHdӸJke{fBPJQrZR~]D8+;<ғ*Gn<6(byWSi~`˶H}w{jk7oV9SSzK:oNTlhNv=.*rer3* :Y٪{oj4'~)+ُR뼷tWpz|uDh t&B#*~hsT#G Mf.R40s-C{Qq }D{knL;m{[)ط*"&bw{3>ɏpzUZB滄"%Cf-+{WF:jsED':w~ i:.84 q_|*.b9iÈ[״o~D.O[\˟0H$ {nHd%-wtC-]} {pvcg^o=*B:F #;˵j5^DMYzƸNylX4[#yǾ9Rg8_{-OvЧ6bF.3zDkq{WvNl,R{5E''dΣyQӋF. UZ*,sx@K zT$g+F[+e3v+;ON',iu_7;*a0Fe^f;qd١8<5e6IhUS$ ʔ+QET$M`'rj X.t1ߎ;ۓ4:8m87 r%ЉJUÎj SAPL>j>ϣ2gA5A1rhi(& ÀBbJҍLwCxrb(&"b"c<pʙ 8MtiB郍BO{|oy?{ d#-YO}7>f* ) #6thل+1/0QT*Q?<\B(3pweYv|ǛPlwd\zf%0gnTj:Y5+%iG"Z1mQ?Gy,Νq%V#WXv'3mt\Y5W(:j,-- j5ȼUӚJ\0%;GuNۜdm[ I̚AYb*2v~Jks˜dssL]Y턯ۆ$5im>0IՔm-Y,,|zg}҇y?1Ec8OQoOz&עmt].>JQ)g99Glke:z >o{#JAw~@t;{, >3ˁLclHC@w@zD`{9~mU0JuIG0uj ppqcBB6$8JS; tr0FfRToPÝ~3&>"S[1 *-ճ *NJ~7#z~kg,E |:#3'l; f{zpJ}߫Lyl!(>ߧh{GazA_xR}RG]"5堈oa-a:e6Q?V_@oG0GTgCI!hN:|6,ϾP'>0 ]lwF~JuJ/\e'˺hmv=~{Y:_6"??[w_#"j3Nz _%nӮޓ5ݥ4Wcԡu㠺cõ,suo4seh|j[ πXXw>O5w~0 LFq W=8 Ʈ岣eCSf,>_Fu|£+}'irV%[7f0e/~d{澖5Q㇊D.%^.oz'd)ۍa9O`C͚b8rrG|ϝ[IgdҞ-nw ?v;>|_]SͻkNgXs8 @g[q*5}sMf_[w}G[:+U =aK5>aMִ]c^-}_o"9uewS7Uf^ )ɼlh|~ dG-j AO  tW2oQMkDH\an T 86 qv6*Ovgvr'dLu+ n&]Ck/*`?^蟝\iv?Ƨ*D"S]$?%\#f |`"fj;9Q#p-C"apüi0n!m$I&Ge݌!F*p pbcVX"Ƭp1¬< ;+ ̖B mf1(?sjmmUUmR[lI ~ PkU L ?=6+APa71f>x6<1O[rCD[q8nBZEm_9s-ɝ_uVj{\=IfyL/\<0 owʽH@pTĪDk41$$AA"  +*7{}"!ѳ; o{yxttwu_D @;9T4 `.`t[Rf:^T&S''KO,nՊR G|7`B&fFGOZMq"lbҁv,(J>V-*d$n<|E\@ !|~\ѯYĀ!OوD(o 79gO?G"c^[6>@ZDs>iGG~.24sD56Aq]jy鐌$^M5<$y-z\vL(8޻1!r Mr'4Oi6AP ğ"#@,hQ' O!p.J^.JyJҡH҉Q}ވFsr4EL/KM`~?j%A/mj.;C,>u;J <@Euj0?c^ھ.ywZ6T,AYEɈz{sQcRW%m&Ch|lV|#s}.1|Z1j%m,o -Ȗ V9*3:B"K˝kcl$IF4g3VBr+Q|>RϞFݿYcw_Cǁ雵"+&,:Q:UH6tMP6c  Szk:XIZDa,v+p]h"6Z9}r{M1, BkTH|g^f+z=l0 )[dw.TbՅحڻ#oU#hj .KjpxwNP{E-Հ-heqg!?\Wepf}h`-nG.֎g'Ӿ{rvTJ{=*6\sg'ͣecnD9Yñ/㶛DX!ODzİ7mutM|͵b5v0J$QUuwkщDw6AU) Zc߃HLt!%.,9duN@t[RI(zz~YW+A s0&oa'ra~ߑup{.uI|Ak 5c CV{qm -8~ec[n4}>4-GT.N\'[񆯋:sw >ߎ9 I|s>e _'6XAm B>Au}uqü{ݻوtK 7{ _n.MOdɋcM 4"Yh^GRڋƵr(a׹ܮ=?ӆIϛ#S@HNb_W,{=+ ' ۳y|nE&mfB}-;EF]R5?ʚGn;xQ,Ę $esqoH=`6Á0Q 7xєtY/_f){ (!(im%s 3txZYU* sX]k4tx|2\Kper*:.3&Hs=mp8av̆ՃŏCi`US'㲟Mwy!WT-1C欄n~} o?jgo@ nֳa]fVt3A#ܠvLB<ë Q_N^k =--nqHofGz_5j\e9@h@LP~cc#odA7gY4q\-[ q!$$2Ecy$)%s u $m:'g'loƞ$a`Q28.38aw0j9"!٦/ iH6j# `cЍ&.p% H`$;hx +a483])k/h)0gXhYP;?Yѵ3'J!d| k::ע ,]g 0ic–mX (c}3؟p*9,ǒKn`89 tSF|Yu:=x6V᏷=wxY(0scב>w|bwN66zlvA{|:7Ù7#|)}]Tt;2\!e^7\O_5$@9ץOޓmrSa΋Kmqkx:ϫ;j# CLKoك%}.Cz&w#sv8;Ƹ ߀26[tM㦥ӮxUm#ˮ̧iN#vQUscxF t>m>~`<tvGzyz3NIcj'Iwh_.G辟Ѐ<|@5'o:])P z5c._6\f/ߨ ĪY[uu)LxP @b r ᜐigoLfuσ#ƈAۆ [a=M b~fg[^Tz3cgTԏoOIb 2F8fqۦcCs4i ͎35;4TC}VΉ G&3 ?d/;}OȮg_-+dr}>] u]|@vzIR1!J{PQ'( #z?ә8u}_&;#Yj(ud{ypt( ]6٠PQ9GKͷ 4m'9YCFO`ZfGy9]ڽ |F ̩/'!w@qO و^\??6YcrjyxI͛ϫ.=_P#ʐpb3uGи'g Xg:{cD_1Є$)&#A?D7}E "DXO@v+|2,@ppْLHd4e)m+=K|E2#Y"%5nhH_sZe ඣ_ rR@s{&ՖRvD &^Ӫa[G~vƢ` Fbdj#d;'׫[-w/Z|`kc!Q}oТHG6]k .wH)ԺwK n0 =`_Gv23RgS}0OK הQ(V:ֶuwv%1l,@/L#H=ѵ-p~=dlKW+]|}")bzbz i~ctzJ:ܘYWS|;ǝm^ ;zH3! X'kdQkl0g!~aRq"5Yhy]TpvrW6CalW(eػ5[1-]%b問v4ٿ=gB~hb' \pD<ھN]Ghr_^xI>nj{0 }2 Ll!(64~#ÂHRzc߉ ZzHZGX!x Q,)|闙@oTK[5㾾d@_[i{ sLjL{9/ɢy(PEF<{v_kra[QPCWrK$]E6(o# #[lSn ,9 SF}vA4%h;! |>lzu9揭)퇚ʋ!/oM͜g½sOay`:܃"x.CkUT ͫ. QwkMmepO*7-]%yK,Y[}eMz ~'˨\_gvßm8DWЭya{}u=w>lBqU a;C]/ed荤:6;>n}4\GFiO7eG,̤)wc5K%9GI{Oq]|Kp_~\r;HyzzAQu :@x^ &o{Gf5MTD$. ޺?Rp՜U}mlվ؉y8e`~J"Fݰ@z˲[=j">Z0Njk}B zjmGr|G29fK^N(H H'/5E4h!cKl Ϻl^󹈮fਐ$1v"z/BΨ%~ &5 xfrQ>w:9l+Y3:ían:esiϓmD]:p.P~+Ac-_ G|l}.٨zAdA^LoN Y/vQ=jtng/˛DXit_1 ~ l>-/W(}rUƁXYռގ-t+;QW(w*5Alǚoph(UMGb3!t/W..Y;a[%:f1Xw:}w 9lѴI ] mf*Z=7mxtVz80qK f,~;\\3ǻ'z5 meEfPk:Zq۪8)n.ϖdzwE%pv9٠mj<__r a[O}C0 AA@6F(8[lHsRU_&nJf0^ 2ju:2}K{hd}NDn^:?5?l{τmfS3z ߚ{mhg]r1 Tи^ڝh[(IpPꯕM>mG Ő?^#}  *مEDiT?`3kAQ @m$wJ+n{R՚ki6aѽ]DOznL6j6e7 fE AaE"& 1n TYqA XK0;B>LdZt%Q'Z]r?Զ@ |<7k[ۂH%'~A9V0BA]3y>=?{/0vb; ANmOTg_W ] G JQ %R;5€#!L0X\GL8Y{JQb>B.7wmJcp*7 hsq+lPr* m;68Dp"b-x}J:iv:HsM J ,A33dڷ1ԳӗSـ]AR g4y[H̊8B5 v9ž?Cz'I G<#acvPa@7t\;=C>F_Nwyyy3S 1`!-"·1t=|iJ}u{Ƅ]ܭaPN(:2`2PYBUҪ=f*XjMDo 8Exs{P|:cO*?x Й9W-|Z܄f@IAv}\Gpyqz кG=9%R{F ` > .@8^ fk~jmL o sG|D܁. cm.kaiw;TnpW1"3׷ϝ]QjA.E!*|Gr@)Rq^+"]@Xm,Ikߣ?죃5 c)xxLB[q%Ƞ |T\l=Y\qUeclq_a,J}\r+v˒"0&tV )r86pXR`L*rz1sgQfv(B>mwU]e;]b'4UpfzEf#9À)>z tEƸ3zAy#PP_d({pp)ܹTlS5& Ѧ&*-bY<X͋ZtQF /"!V b$Z)2r4TI3)X(JՁ3s~| 3ܪnAVoaj'q"QŔ|9r[]r^G ?b<ȋWc[6Y0 32讣f+;s&'q5WVrB])1xI=r~- xNYڤX+4 $v")7\&qadA p^\\y%WMJ A)%G|ߑl|# wEPF%~,pe97@ $BZ(v =3lɠģ6c`HTr!("':߹w ǀ.P +< ; Ww <5MS,q !QYGq}j,H YsWu+g_+">Q?D{S]_ޱ!W߹~=^D@qR|p8g$b|r9w_[ٟ"Bf;56-RLI"8XP|LmkqDxLހ0dz,0ڬ>a+k"w<8娲  tn.H/J8&3w.Q],NSw[&J4/B*MBwi.̨Si1 [wjYztH?_iX&L/%vTxF8 >?Or=7sV|e? ˓vh.*[qQdU귶!`@ܳ"*gXQwϯ2u髍qĊAy~t %ɪ6{pqX;)Geh۱8/;"oEj_5q<\Y&fF8ӑR > ;c;B3"3swy1}MEEb/%,7c_a{Ǎj̹JtFbU*,>&eꊃ<]mf]:m(F#%#Hiri/6z|z_e% 1pcp5Q3)5+,s8޿Tvlnº0h͈Kh`kDA~4=- 62 #X }y %_7d< Raהa?e.;3r9"rj\Ƈz]/S Q:j 5CT1.+Nߍm`%17:Rb-M;p] sȪ@_xeibY /ȰZeqm,LiLQDgm#]4|w|tq)D=C4=mNAH"BY7g - ܟ?'^-e'+ %%Ԣ|=bϭoF𞓲n=?YIpxaA;O. wogݛ@f>7s­+v@⽔_XY|`,;>m<? `p/Gn;9Q8꜕ptUS t.r>yzTs̓qP2b3/uDpun*V}#^+a`r e0 36TԓƩ9}2 j?, a$1s5 q\}Z{S2w3˞/Q}j{nr%aaUf@ҫaEZh;d?젃y@;ܳX Y>2;`bLjz_L_nMʞWuqSzeu^y2_g\<ǣ+e1dm}6'u]_ fã/i1(B7?$1=Ճ=-HXhAc |_^7诞 `*heӻkqƌɴ_/Te#o|gqq4}XIPcxW@& 2+ȇg$@f|MF- ^ͤ2JrY۽\g#sxÍֶ%@yRdX]\䖲{^[O$<;.!\N$}`m&*I hMr?^轅72-;[!SO쩗f_^Cud d7Cp,vyKo\Byavgat2R>/ i"p}"䒞.H4`Ufnͻ+4N߄˭MbYڈ mR~ǔZ(mc/.',C`-."gڰ~V$15.Mq^;8w>![0.F:0?)%1CeNLoհ0o<ލ yUj :Mjqjj@A ,¢$ĿQ%T(“mXF"*]S%u_Ӿ%!fh_˙ <H/ʽ2%Awx{MԿgBѻÇsB`(K(л|qS[wf 6 ?G$Qh-Ųk@QM|9܈Ow>c~cуk@2w\xmd޵GUhSmG>әWZtU[KAouDOjvB(arHC=uH_ÛwvO4 EuvpJ;tg:c5qK]#/7?"5N;\!h]=;7X|Cnb"!T*3 L6eŏVZ5! 2ؐ8xmHnŭc՗ CHVj\ƭ3E:.k685 iԹ^+po42Qea5tatc%tjGZ(CaUğ oLm4z7io i]{i3Fo{8&kRBvrn1JQ{5iƢoN᧎ɧuiX@ħ>:޿vzuƹs<8qLxV!W8pqX,PYq 0#VfjHt#W\#4X}:KY@a55WBf48?Tqa[Bx(WiG ;jWrMQs5vBW 8H:R\pTQQlp,湙#,(EPk>RY͇L5FE*U`f86%)KäY7_tp!EI zwtG*-Vjkiras[>?FxeEa%\d-}, q9!D. phI]5QSi3Hw0S^W[ZE+\[qmez*\1Qp6x6MTJlެtQ "L!]EeSJnՕ=U]M*O /"B'ptf. G7JR_q,҄+m)vK]QIT ۠Vvp̃Yi?l\ʅyfaymH.)>h3 }/OdpuK6 w]2Rlgc,7@6AjTz ҇f߽u(iAOʾyqiػ^,+a z$J qR 4Vu 7gWLk@1#ٞKw?%o|w0t!~8/W4'Exk_+*7|:͌bNeOz΂+Ԟ3ß\:oJ.BI $cӃdmbʼuKi^P8}?e~ycSĒ:4mDhCooY b *R;no"Gs*[gѾwwtzm ]9zhHPWڋcn8v,Yp \ JHϬu7ĴCFONTA);i O苸iw6F?k%kV::߻ VjBd.563Znr)sDF[evypp*~Hk)ab<0W vvJV]TAEOYU职FA|GY̧F㘈#}/>RQx%Mn> ^fj ^ Y[Ϛ Cٙ#{a17P%rQ9 ce?iKKE| \¬JPC_x9HNU ~wLڊNYWuC EAl_g)zLlZvHzJFZؼvǪ9&]G%1 dG/;tuV~ds@ݟB>?E<2\#cK:>@fkQj#Vz..cKY[+5lGŞ\?vRqZ|uc?Ԯ"'u9s["vrjinxx[9Nd(KC3`,ЍX88(kOj+pxR: Lcnq@˞Ds )߾([,2ڤMȤXpr+At߅D_(eFq\zi`3ָp0cHwsv q;@`:Ax߂# '>`F`8l4ϳpm2YGfD)<ʟV[<.X*6ذ\L)uyJI5B9XTFX( _mUl?|XkmaKdZ)̷V&0ܚ|y-)@s1S!ofq EL^CV[?̈́3 A}eI4/jK )SNG*}<:sT0{~ RZ >"l8$>p_m//4%7Ytkf#^1vJM3Jՠ<&|~cx]D 3]+VӦifsQJfi_W򾍀n=B wZ;b;b< e FRޢ6,,׫`4UHYMw&+ d:^I)!2%&\!#l}zgTWHO3+C%fdz\nvj"8;mj n+8uAxڥ YmY0rG>ړ lacZ׶(¸'K~j\g5z A ~qa%ءp$u3d3RzwjP)?yg4e1c$|`NrIA5PҏKxX]E盆-3瞂:o4{1l&~^NX#',sH~{j7\Ka VW$WW]PA.m/4)3\Ur!)}<4c*ÿ5ZB1X}M(bi@̡z,䋧kt'KI9Bݝ=@7H%}1PJyH;RlniE-@nGS4-v b.{ޮM#,Fګl!YAŘF+MTHt"D|w13'a "-`gݱyQ&pgJݖ}wUڜS][yo{fGyZ\;+ZN."~ 2 /*M 0Wv{8k7Y}a17;]t/}Ϲ㍻]M].ZC |_i8p/[HplM"N| C^u~֖J`!Dܶ3Л & G1@nbHUJ\d*7c6RMDH bk(^hT*~6 θx^uhͼ^c~H45t ŖNЛ; 2mAIV*Nϫe`RGk*DG9y߱~rL[5]EVMj/dw/|2*;w0ņW+R"#@h8[P)>krYQGmd0a7XPoLgh(4dEG3T&(5@*Fi!rp\_ PtDk$Pm4Ь 9ʢ`Kdn0p1ǞrV=Z-gvf2t9aYadnbI]͵z30*߳O-)X>656i4[]t$-LB}3W毜ϩ'T#};oV6[zZ6LCTNuaGw^8G%g ,N۴y b(6:2NJ~72B`e7n轝ӢZĒ5]sS,7e j :GMMɳox]_K+wkt)6=*VUz,`/U!>9'ƵCn k#ֺK^1JZ{Ag|.ƣݸr[u}{;|5X wCk<.^䁀Sq+e4Gu+R0zcWr&OBKqaF]רms9U%n~R )Hw%Rzd͕g*3:O~eK񛸷A\z+\lm\8U:l*DxNwfyb~[$ARuW-H  *M^YQ*q i$yυKDtϻ]TRc@f grX׍&Y?o{KQ.P$c ois88ݻw}16:>D@Q!mWP~Rѝ5LZ^ܒ.J;7ռW E*7ՙ$oKŸn}\Jˋ:`+ȹ?sn<;cYEB QukҮZUl֮se!jZ׿O.aYڙ~ ;gX=|NBw3<߷鹓-|-{j2{7sDU1+wJ"̢n"0τG,7}@D ˦/VD@Yjo{ 0jQ5xx-b֖P 2Z_+D:|i`@0 9ֵ(퉵lj[*&˜ e=DA߇4ls/@x,#T$Bv\s`%oGcd8KklQC Il2d'h@_H7|O=O;3t9 nͤcr, gV s_|C)U!HpLnM{'V87J0Fu2spOAD_Ք=ȋba}h߽[ 5+2M$is"`0v5|#?S ώrN = zU7>HYr4I" ƌl[.dޜ3A(lwHdAyדmw#V%˴?wQ!$Kלr?īg*r5i7I&-F%Ӄ؜^=_[bf0(7՛9 '?x@mlOłHg;l,:vff!~WtM@u¬&_8*fY#'Lm'VYhQ8xĦi~~v|]ug{q\w١(fPG)ȲQr/3Z?VXcX2iPL:sŻMB~}c-+Lξf mwI;zM(bh06f{#T@yeqjy#-uPH\e$EȜz/ߠ|˔V\ջrȅeFQA!:ex:m'`fw3.uDNS\"/'@yDW<'Ӑ>+Uz90BR55{VN>;yTӶምSG:I.W7:,%D]\?&׋ ;;iЩ!^U֬&?r6U$Izyok~;mjoy8$P?9Khq WGdA{$vVGJs΀ |9k27ď"-t#H*9m"f{sY=x`2e 6ܼ[/JqJ:E|/~Ͼ|ǿwb=\߃ܝq{Ijiq\crzپϣηOk![&{Ţ587;9U4˵y jRZB n :A%,CfX[dne2ĄOSFBM*ٌƁCFׄn۹|Tׯ8e{ʡ4;/s;0PF#JsxiueCsg3;NFڳ/ى^#<[BP_W[{g4O*ᴭѬ:᭣%H%.lT^!ϧj#],s5GDK"#+oy?wV%X3!泒ɖ[A^cw~U犾1EUn%ÚӺoZ?ҍ2 G/np1|boXWa ]|P|~C}ݠol/iycapm΄'Y+Ȑ#7jA@BU/0>E0bXa ك_ &ʇ"YɼΌ-[˚ƺۢFd6V(?:c> 'Q,N;7կtEZaBbMbjUQ[F>; l6lhf( Q5lb"۸[:& wd_j 6)lM0Bʇޠ "[ӝ^/MrGAΕFIA+QEJSx[(ٯORʆ#JD]{R@j EoK/XJ˶Q)8 :,.T4C$30Wg{2[n䞹1#IJ3ڤAB9fڊU T̈́ep"!V:2|(xzuH/=np5O쓽RQtG &աj3_YT \hyWQl1fV'Q! MxRs#Xk7G`[p|kg=+2XɢhwuA2 1,[ׯ5ޘΦXG)J\enTlvrz^ƽ?!t;>vѠiUIQU$qr~Pď[(Y{ /^*!2<,<ݔOJs?)q%fxB}a\ƴ3p\w֌><̄>_=F^RGl&N?aL+.YQ"_EvPTwR/&;Y75c ʇrpAe.d-pxTF,c,Gd tё`DCƁB:KW,Lz0usg1@!N@:n7%S8 ^q^1Q2|Kl]?[#gڳGB1fYThR4TڪwvAzP2]˿itf%qv>m8TԆ_{)dٳJ3_o͖ۆ|qg2.U8pk;_~pGTq߯9y9{S-iZ}=y8)~Ϲ}֋}ra;?M=w,f^+Yjxpd-Nk=<]f=|_¢9̈ʐmTLJ `g2ze7mwP[pHZE=T7j5)F| 9-|,'&`ʷW!~ #eY.{CگaQVd^ڋQ2> # AR]p$G웟[OG]P}G?&EHՔ_t$*UH (zc'!A-YWP]i{4@q>{DH.cJ3,o^]IԂri̢Pp!&9jGdK#˹ M*N">JeʒȈv&ѓ a21 ɕirJ0 m(#W=4h|5O_)_%lTttl2|Y5kdH?@ז|&.]$fzNw⭯|>!sSmPw?mWKnW0؃VkBD,!τǟIlƼ,Yi$+X*@{?]|PEn]ۈ n!NA &t=jz1dm<TnJ?#\USVm~=9JU}T,N;Q\FB&46ąv9;t[4$q3U!R_'Ocqr̠ wp޼VBkWÆֲ$CӝpceUzqM;ӍjG|g $IӪČWd&GX;7y;s .$PWO3c6_Ec)*˹qa/Pc^`0B,l07{1 U#UzV/VjU&A`򚊖Y_ujrC~s/NEeHs:6P eՠ`sӏ.y, %㽃쾈t5 蠹S7<9(!9ڵ`||*1`ڄ ]Dl0 } OAA/#KK7Qa\ʺ13 tt 6?UdR;1+=%''uA~t| ƋPN `Қ&hE)Zbhѥ?xP|GjC1ހpܿokVvJ;ᜂrh[GU7dHp2q wXJ/%Qm }BXvni(R6zSsHq)]q7Ht)3 L_ozE l;|ff Y;8cq L(Z!iYɧ~LzEˁr![T:E &a?Z^r_b>*ಸjnE]<5[GmVն[~kzYupPuwrF:7A581Ӈ frf/N*ƫ@VgfVM( õu/ Tbp/`|.U"XP!0?lM#| 6q}{i^m(-5+eqE"QcV7V5L;QyCdY0|DZfl&$oQGDL* >{~&F֓G1 |?pH~?h.**mkJK"׶e7 7cԈdebGKC&\QWZ*E (XxaY#A@]msd{;Vg:M9$dWMjTu_g 8L:LhxC};韕+Lڤ]UZγ45Q=X6,7VǹqБ䷕TD*4J]$Cb 4[eg}.u 86) MC\TbnRB8`㋹6qXTDz)N70\HOSQt\oM=vQXynj?8тK%KT%*7gӕ/gY.69Q> ^o181Q ̔g= ?׿.(t ׻v*~1.?u <6QO؃uUJsLJQNbT"ZC^-GsdJIW¿K 3̼¶4e|GDWhYڿ~ -awdf |j2HO\93P!LLT=vq%Cia~gLK|wnz&wp"xGKDh>eyc𛭀_^}r֌ճuX 0rTT}v# ›?&odcvR f NW ݼt`ߟw_yM ES߽ش]ƾ+u_Έk[aY?)ͬS{`A"HB0m~.$`vhyޡ`q{]&y̓ߌ,Px+lj(ٔkktT[@߱a]zl~ߦFtY1UKkMrVw1j_72v{]P1Z:%x0މɑj "GZR -Ƶ.{_}'yTd5g1AB*%AbT')^ *xD\ģՂ'Bdw1:%xPKZbB?ֻDEAtg;.`,Zr+{u缹 L>ӣsj(;m#3˥8bHQEYk8?ݡ~5IaLD2ɉtM0IC vtb|?7!62IME_A', yL Ҟ½ >=AqOæd*O=M9a_81ڱK0Mj}G04zyr3yn3H؄"y%'dӥC{'#a\sϏXUj HnO4`h8L<:7o(N+U1`FF;vq XiyP!\&3xkzaDFg9?,ș$D6cxAH?^?%Ek]r0;0M$)E,ȟ4|1ӑ0 d*zcZ1>8Q73/Q*F tÂe(@bAAuaԱ@SǜΘRZ>+qCKqCS}$X큔;!e Q"j~̙;lhu2LRci? Qz(K 0sG%z@99`to5ݪ7xFaRY݄& 6_6LD*/vy.Lm(HLSBU`QB@mΐ+$A7k:1% lg`fbLlVԄ[0..GI'aAYj@PѠES,ytn %CH>!HvP_}mחTq#o#0(UtK>WNuBҵppJ1l,P.pr^Gu*{ 2p?=r=~Łc Y{>g"S F'ag (0vxdAAx_:`#&EZAz,.آ@t]K(TT=6rI<*B-Qcmkr!D3W~1zҬ'\{Js-rǷicg*~{4m3%0vCwc ߙkp2pνNTɳdrm-n–֓r3XIs|Gptwoy|NzSQyV@Է`26ig*GЄ%7rTn9K~5b]Ac*H 'R}~6ٶw&u}n|AR\vEbҏLCK{%*Y3Wk l>QD T_;|S[d]\}7Ĉ2 &}rV˰!AF(k`,8‘<é<;d88} $MzX^CYZsK_~TSS oX"|T2n؅癩xŁ&xnDw2r'DC[Ypc|fV! P˛&СN/SjӣN;xM2d@s s0hG3 뾉UAIR\S;f U/he1o}s}F^k0uQFBxBr[(QHs9 ~C_w.S{cxYU^dvrgTJQ¾[i:v$~/x Ab7B|gx>x63gǚ6+BEأ>xEv_ KouIn@AUA#B62.aGVj:Wz05eb-J)$rcfϮ򣇗j&Y2x*|`PP/uV #F0BɵB9c1XnqzXXM34Y1 ">:n/y@(A:|^yb}O;a(Iꧩ7_^9(6sU*>'?/)dv澃٩iͼQCb@@&3 >=稸}6z,%NJ7u彳F!CW+Űv*mIͿPts%J08( qsJ\[-s}2)=޼=#6LW识y"R* L׻G'Ac@Cm3 ! 뫘)@*ZYvv`].q.w cJ:NEIxvg ̥n:ȥ=j%S8z)ypb~ty1Gv-!BLZH?Oo\0GW$gSKj}ǘd34; \jhrT9X}͸v!7t*80qJI2{|(&N[Jc9ŏ,` 6cY[DǴ$ q:+NX樛Փ׌5֎w5!t ˻o3X"3m29%q8x6xh@sys&KOKhIv%DT3<++RkEp-Jx,|;B,\Xzz>u(hoWxSz9"b[OotJc47B)wdA #+mpX+G釄HˊqAL# |z9 NRxbqHw5"_LГV~!kp^Jknц񣆏JW/gn}cWaHM?4^j%ߏoz6 N?1?I X~v55$<;Ja18'C셱IG!6]&8PQտլC7=Ω%4ŒB|gY*/0ԏIdUibVQoWMKh93 :MWpΊD*=g_|njc=_S՛񬪼ANvXN[i'uV̤^{aŋqkc{v Ujrw069aQ0鑝d؃o87or ✹6wb"ϑ\5I|aj#3eM(ʧBLLrȕÜ0vhwAGK֥/,dJC"ˍ!ްjWh+ZiZێ nw~+;E.L'ߌLSq3;/6uni;LC31#z5z3XNɻ]f-5G[y\G1ϋ7O(+/+7:zrzi2m|태ZŐDeiAn'œ+pyt[LtMwVu7l\v? NR~Q]ǦhÝv95nv䨫t|ʟKJE8$L 81Xo;OH k:_79λeqkxFtcL :fb[gcij0p"w h%Aէׁ:{ƴf΅mkGOǽٍmqe(C~4\XwgvF7ipqFzes$sܬuyԾ8ˌI8\|Ĺ-3fi ^=$8d$D&^7VwYܜA5陒< SK' NBRc9|KMpό1Z(0۽lV5>j 6b|;Dqò:{!8O{9ֳ7ZƗJI|ʨ;u2k00665. ԃI1wS^zu۞]βJt(J^{må}NOJi}:sx-2s\80O'wyYx*s-3q¼g}1>? 'P-‹kK aap†.h#PX*A ?(CDV~EËEń6\ ,a$GZ89$}$z$9{1`E``ZItLaο߅gd@3O$_JWJAwl[C6u~O OK{zks~0 ڢMʽ(&"tλe={EYx sA^U7[M|pod  .lPI9K)s&3m[?f wou'Fd+:v JJًE(u=Z H;>w6c?\ӎ%#: u$MUmcs)SI9&J1Kzf (^3u!&^s?} zApv9ϝpjvdETq?~C R(M `Zz-b0C'04pG?L;?#"dm~]j(wJP\AGԺ /~]0e{duFd6d,,c"kw"{| ʕ {:JyRaQ:Qə#)4x<isB:AB.E]/|B`; h&3Ү[֍)hҋ2gA[h;}33&eMR,i_oLݳ =Uz|pk7"-DQ os-/Œxk42s ؗ]0Fw 9y  jH Z\'!LVN{J~anrgaCM)ţ2(7zs;qQ`( cZlj&Ec+a r} i/; ^daK)Gg3jC'Gϧk'!Ni>!p}]mr8|5BjN X`HE۲Wl0L:PUP-lnE)9)h##GL ۻcFϷ.rm {(2GDDmAD"u!bns\ĸK/=JlWq!΢W ![ц':cS'7T\RGjl⻴yP2(I])&<όL˴?jiavir!pP;[ԪL S3? م^ije[̓]Kc#5~u (qMtශ,-9:A߹&b=wQ?c9rdSzϩia:,-QD7P=W;LS[o_['Y2UzF4~ eV\SzM֦1*ә*t1Q*Dڒ m(>I7({aLPKvvT-g{cҎ"7<'h|csL$-.;iY & 4I%L]j34{4>G5*|γAE!ǹe$6v.n/@ fO3w L/Q(<N u)3Z;s~"eҎ7i椦p>I5PH Sj.|vɱخ乥b \m6m^%Xb8<\wcXaScsbG C8:s$/:ywLJlFTKI.Hiq֖Ż+|ӆ `W|D yG"Yrze }dvmM (] C*ZUv p/{:LZl0h*k!Sng7,?Xn*Q;}'}5= '"ls"lg6 4.*m9D!y(fL6 {xT^/8KV:~p2s3E@H#tWdq 䫂L,{!*x ,j\)^+#eE6ᑺ!jnW9?'xdP0N*RPړ b9F*ZZ'7( ^:[/\gu8}:' _W~l$uX/L‹ RD68HBEbv˖TK zIu]etz'#:)qeҔP%&yK7Mt?Sc.8J'&lVlp !5}Ov0ޛO8.׎]S}l(-6ZqW#Zao.j_ réF*y.(eU)(\ 'V"3R˵عykJ 40bsa(1@ۣ&$\HlLIf<Y}j]ѻbi\-rqfG4oa~b8: m(xnvm'u'~[tn6g"ϧ!8X #;A]<&~wO 1N?'̭.):ot#0Rc>h- Q#tFYCT%.a h"?8jFC0?Q ɯ/[l h|&t1ƸZW̌s2 C+mأȍK UIX ;q%{!ɮOOd8sϫ#hcR.amƮDf .S(ѱ5hQJ,1VL Əz_d`jW9>b.^i Z`ݓoMq_.9Q#qQ\=gH>c{Xw6lgk=r <'d&B2;Y{8Few8kQS(s?ٗfoޗGn9wi4`cm*'싽B$FJ;?VBMhϾ罢)IEhD*9nDx&Ҿ? m U%߷eW}ZB9ߛe`p'"k #΍[bTe|2GCSMKcvG3;ϒ(` B h6X$"-QCk:9.Gy_4!~cC!ٝXs3 /,D;~gGz;D\ wJh S|p;*BBV} n9O,dUUo-ۍ?W ZxH4#&Ʀ%)* fy/9k8AŠ11``G[AQ$B#?Qm4B4+>'z'G5n 8Cǧb~f,p'0ndOoiy*RЇK^~@m[c3Pi Q@tdZ{9h/ddB03_o6I|ݹw^ff|ZzZqQo }O/dsv[1on~b'T.Ő_i.O?(0ǯN Ja1jUu?GzUor$z;*!P$5x '{AɄ%iIww?J1sq7M@\d2ps5[}\InrT#KgͰiCO@s_=pTPv32H/JQ{̿Km1D`, jP8Xγ< e+12[:lHx7ʜj?ԭ,B!bPI=Jc2TdJJHi@@.Eer.8 Rڒj@)PODDIkF~SdxedU0: YETWH?pa@@F.!˖{x,ҟp{/QɶDw}\tI~%Ɓor'zv3z⿑b~IѮ{p|KJ:#gC:}}u,Z NX@kH(_GrL:Z]# #%-'<~cK`g9;XHMm!XV<}No[azOq=Xw龮oӡOYw =f¼oNXf#u?}oZ9ְyuG7qy%2 :E;" Kl+ӌh^/Bg.uY=vX»ǡr Ίcrɩy_E[I勼YNG8(A#ю rtjOue>nsf{#g~w52R^wO~|Y/-&7z^XZw_l6|o.g<3$PR_惃 ]",[|uV35{ttigW7歐^~v,9Kf*ąã^fW.'ji[@0~ pvlfxp;Ox8|tQPgՎgg䳬} 069IvF7tʶ$&8Rcc\WS*p}ת}M],*WphQ#vj'ƚ&>w؃[e+zߟ`4^o\ǎ{cߏ!oiϐ)Mx-$k\r, C!ٺY>;mrGIS~ev`vևyM=BsuwAK^-ΦqYm.JD>sǒ0ik-έt⚡Whl{7+X֞esQ[i!s;o:Dsm}{#26ǣ\dvT"$_msу$} k2FAGR3/4Әr^kjXE~**MZ~)ZZ\ nϳxO F g45{سh)X^ *|o^6N ~kqTSwQ]8^0y{D[(E~?o_GŘ|:yl_E.wgS%xpͯ/>ЬhtXICci F4Vt\D]y%6mbgz"7ng vy^ .>G\5Ye鬀2u >(]bh-tFUZ<((Ofx!'‿rC'ߛb>%#|pMuߗ3i~3?/ֽ?Su8|#`av0`AܓGThؖjX21}<gO0b3jO0k˳bC ;Tc : TD&&2blA7ʬU7X9 .ۓG y#azB>=kRdю+qL#V:kH[yu_1u5:#٧$ e'oV䮤қZ܈Gm`7*„-k q]Ө+"@gPAzS7iw4 ٩m˛^ovpAQk\ (c~a}S~?MˏHl9M<0(UX+Ǎbʧ>&t! Vla=Kn ģhgR4 ό%7aU7\iåmoHHO䣾F}\v ,P(1tm Gёb;'dRx]K_o>eWCHe|'z ..\ʸ!EGV% ژ|eFBoϪNZKZ2YC:EWH^y)8R ִ޵訒 r3w#(|UAjwN`_owΒ)`Nђ"g<,9,!z}zEK非=jKjٓ;^BZ\Q"Xj'ae]d#ӳ,sj (ng~:R/*=g*δJHu+ӌh]‹% ?xyثx-iwͧ~>"`9Țn/k*灯,4;i݂SO cHm߈w n{ e7?+Ums_ f~CYO6sq7FE*d"Qe,[q@lՐR0_Kw^:MS&7 *‰"n°0d%4;macCU(9TB+h$X :$7=HiS^Ha&.'kA-LVsஈw!D-iy٬C ֽZ-H67YCrm>"S:'\_ۅNZrWX1vBN[׹\TQѫ \69̢XTys I"ro4~~G1T|E4)ȧk}ؾ>Y8E-, 6W[{1MH3ю ʹ66Vső:5}qzR?30͙\&K S[_~H pgAN8|u~ UD yr7oq>LL3ź]Nьb:RUUsT&[)*ehr=~hw6}x:~gベwsnr{P'>N>p:Q01 pa~ BCાW%^z;Qfd ǀ"BD`T# T~x.H炱4V}۔7tB9M#੎7ëhգȹGÞϠ[P2g̈́Ӏ,PxBr m{#iP_-jeypq7t[G4l(Ue??ovg@h{N9 xq|p坵`N$<6 ? ZqأU|`ä*Fyrs_g3Y V-_+r`V?Z]3Q3(L1|c %D1l.:&R{$@ DL}I|7e.}nPV9}g]cX?n| g:@CƔl×XBB% kSTMLvjdQD]C;PW$3SWּ ErX3)\v,vnx@$!OJBFYnm$4E*/~s^J^ݝ}/Smx뜔?_.o`V#@UjinSe`ኺ-x50K+R0OpF$HSnt'}v tX' mǃ 8>' MQ@ ^՝K=W Y 'Vu瓨3{#Ab#܏|:ÿ0YN/-`#$XT`LKHŽH2[83UJjP{@ H/-*^WD1M4 QD@4A &B9:@5{eutt[FM;/sDV(-FΕi+xWcpX`&&4muVlnKitB`3/ڈP#@ƙ *KY&]T05jaIjzθ=L[ }w<cV ILDA;覲NW\dgLXr!OXs E͹yZ>g B쬷3xk gQǣx^ 3gyq 9͐BM%U N8j&=6:/W\2u[4s@;_o2S|\+OthkF`}(rzs%ٕii[QfZ XA25F¦JJzR[s[]vVcۡ&"LuFxp,p 'D?N}Ǣz}{/8dn&).Rӆr' \ qOٯV̢1F>#u-~Z53=G5WsbL(HR UmoHa+n߷O3*{̶[=[mRobioZ,86|j{- Rs떖$'|wX@YӍy:O֢HA8P djZ,(?@B킨9(-IUI& a;K'";i4PD|$o^!PuX<PM^o{$i>>}~znLοQ 0u{b ;~ۙO'/\>> 0>$!^VHOGSB( >+ 'J_^mo)2DH_k;5>0Qs~kb7,_/}0" T ('!3}cJF]W$Rg='@&C:v?Y'v8^k=XLj{<!#瞃N3FDԱ(`Bo)R!jR!T/*T'H0Ց>}Qxxߥn;-HCȘNnɪ/*"<04N'㱆D@[KC@MĆX\o OvzHrvsk^"W>܃.$ gy,WSGav:&yioOI&! yoڡgkH իd{e> zX)Ctر~vP9nZns .7;PH5Q4ף.ÍYE"ḟ@ LHh*qpBc"FE_0"?)(DH=tAufu qq8a.11CZ^3jPG%$_`s"JB F1PT:k~ب1/,M-2 RϰW)9KgaȢRcR\[GimgfƖX@ **ߤI8XxX"流 (>6Ie$(d(d(*(j(j) "9֝:^tv{ϫ[~gE)?w@g ༦ H] NBz0cI ?{uƍEFGS.-ŲȞ X.CֱhMxNnZ:H h%th ;o&$&w7!u&=Mώ灵E `Fa iBF" a@y`"A 1E++!+"h:F" B )}X8IDID4ATE!HP!HPU04TLDM@LP ""xbhȞl[9e>8ogf*LGwz\NTY Kh@NG9B7G}Do\:As-ia.Gp ?Fk?pK5 VcyHBJqy4-Z>a3(ގb= 碤c2ju?F6HXbMmWjMiZGe"VD%N(j`zGvmzǦn0]'$#Q<-PܺDD`Xtܜɹ4 x# 0(L`G"ma<ݏ3 dA8{Ju=27a"hݦY/gN EuI&[v˘UYD!6l4K|aM==[!dP g@}#xdpN㌾FI2)5듢}[l副ϻ29ףC6Y6-‚s%^!<7&*;8 &^eP^{7O!-Tå&DI}uEUUU~fWs7ĘЁy;T eӮnӿ#B[;l@2x*gZ%1S1WD`u7sm/wmӜz " Gn`.*;D}OQvOhui3dU_?ְU*խm\m:ΓX2jN{#'-Ā[ !N8쒘E2\1嵭R- Όz4g?\91+-89u\I*+?rLfu5*ŘXr3Z̘yjs@M3A{x F,'DkY]5H% eU# H(T"TأX}ڻ=$2 CYeU@&/ozBJosR:MA MT=_P0g|bXg8}kckr\5J-BeIBVW_gVtMsLBttr(@Lߜ%|mg COŏkXvoJoG>ʪ!19G):.PoPŴ/Kk`P'Ґ(%hv(*?x=Z A˲ttד7˓CxpfNG)=*y;?;̷0p çɛTc_DC`Qy٠xV8tyF\:*/Y04:>1` }0m_+;>b1[^J %nFPP$SO.j {0&$H9qg#@T+i{0.{ !ثW 7_U?f<|'V{(.FNs~y,x+a^ed6,2LXtG_N[ 0ҙ Ⱥ*ڄߺ;Ӷڌlewcn9\?\c'_Ƶ ,"vґ;yanjYNUefM s8jy&qyzl8R4Ք:75 vRV3`Q<^~cfY=>[>+OQ*ُ_DE(@D$@T71t&fb?&_Ws`6N\t3ӁN ITPa 4qMl$_;kU .B '_?ٰGW+ tv{f}xW,]zzG8˕%pU8~@ 0.s 2(33N |g @0KT_wMʗDŽ&` ]'\ J;HD%UOm }Q[v-[>4k|Fʑq-᲻eߤ; :=*{u>תh!'9X{M'smW?[Qno,!XC'UЭF Cgb"wFK_y m.6m9a_x:x=ͺѰQt^=uvgjP7U L*G\eo/CfdB[ RoX6H+vä K X@jQ6 5Z"y$@:jKehǠ}5JSB#?ܵǤQ^ w_ ׍ܕXI:nY