From c0b0fac8b2aa64c099babc95d7bb68298799a1d5 Mon Sep 17 00:00:00 2001 From: My-Tien Nguyen Date: Wed, 4 Mar 2026 14:43:12 +0100 Subject: [PATCH 1/3] Make pie legendrank support array. Each entry then corresponds to one slice. --- src/components/legend/get_legend_data.js | 7 ++- src/plots/plots.js | 6 ++- src/traces/pie/attributes.js | 14 +++++ test/image/mocks/zz-pie-slice-legendrank.json | 54 +++++++++++++++++++ test/plot-schema.json | 8 ++- 5 files changed, 84 insertions(+), 5 deletions(-) create mode 100644 test/image/mocks/zz-pie-slice-legendrank.json diff --git a/src/components/legend/get_legend_data.js b/src/components/legend/get_legend_data.js index ba32065c802..c080785729d 100644 --- a/src/components/legend/get_legend_data.js +++ b/src/components/legend/get_legend_data.js @@ -100,7 +100,8 @@ module.exports = function getLegendData(calcdata, opts, hasMultipleLegends) { // find minimum rank within group var groupMinRank = Infinity; for(j = 0; j < legendData[i].length; j++) { - var rank = legendData[i][j].trace.legendrank; + var legendrank = legendData[i][j].trace.legendrank; + var rank = Array.isArray(legendrank) ? Math.min(legendrank) : legendrank; if(groupMinRank > rank) groupMinRank = rank; } @@ -117,8 +118,10 @@ module.exports = function getLegendData(calcdata, opts, hasMultipleLegends) { }; var orderFn2 = function(a, b) { + var a_rank = Array.isArray(a.trace.legendrank) ? a.trace.legendrank[a.i] : a.trace.legendrank; + var b_rank = Array.isArray(b.trace.legendrank) ? b.trace.legendrank[b.i] : b.trace.legendrank; return ( - (a.trace.legendrank - b.trace.legendrank) || + (a_rank - b_rank) || (a._preSort - b._preSort) // fallback for old Chrome < 70 https://bugs.chromium.org/p/v8/issues/detail?id=90 ); }; diff --git a/src/plots/plots.js b/src/plots/plots.js index ffbeb132f28..b3ef101ef33 100644 --- a/src/plots/plots.js +++ b/src/plots/plots.js @@ -1261,8 +1261,10 @@ plots.supplyTraceDefaults = function(traceIn, traceOut, colorIndex, layout, trac coerce('legendwidth'); coerce('legendgroup'); coerce('legendgrouptitle.text'); - coerce('legendrank'); - + Lib.coerce(traceIn, traceOut, + _module.attributes.legend ? _module.attributes : plots.attributes, + 'legendrank' + ); traceOut._dfltShowLegend = true; } else { traceOut._dfltShowLegend = false; diff --git a/src/traces/pie/attributes.js b/src/traces/pie/attributes.js index 7816082dce3..eef04a3a468 100644 --- a/src/traces/pie/attributes.js +++ b/src/traces/pie/attributes.js @@ -198,6 +198,20 @@ module.exports = { '`layout.legend`, `layout.legend2`, etc.' ].join(' ') }), + legendrank: extendFlat({}, baseAttrs.legendrank, { + arrayOk: true, + description: [ + 'Sets the legend rank for this pie. If passed as an array, this will set the legend', + 'rank of the individual pie slices.', + 'Items and groups with smaller ranks are presented on top/left side while', + 'with *reversed* `legend.traceorder` they are on bottom/right side.', + 'The default legendrank is 1000,', + 'so that you can use ranks less than 1000 to place certain items before all unranked items,', + 'and ranks greater than 1000 to go after all unranked items.', + 'When having unranked or equal rank items shapes would be displayed after traces', + 'i.e. according to their order in data and layout.' + ].join(' ') + }), title: { text: { valType: 'string', diff --git a/test/image/mocks/zz-pie-slice-legendrank.json b/test/image/mocks/zz-pie-slice-legendrank.json new file mode 100644 index 00000000000..02974e748f8 --- /dev/null +++ b/test/image/mocks/zz-pie-slice-legendrank.json @@ -0,0 +1,54 @@ +{ + "data": [ + { + "labels": [ + "slice in legend1: rank 3", + "slice in legend1: rank 2", + "slice in legend1: rank 1", + "slice in legend2: rank 4", + "slice in legend2: rank 3", + "slice in legend2: rank 2", + "slice in legend2: rank 1" + ], + "values": [3, 4, 2, 7, 1, 5, 8], + "type": "pie", + "legendrank": [3, 2, 1, 4, 3, 2, 1], + "legend": ["legend", "legend", "legend", "legend2", "legend2", "legend2", "legend2"], + "domain": { + "y": [0.5, 1] + } + }, + { + "type": "bar", + "x": [0, 1], + "y": [1, 1.5], + "legendrank": 1, + "name": "bar in legend1: rank 1", + "marker": { + "color": "brown" + } + } + ], + "layout": { + "title": { + "text": "legendrank test" + }, + "yaxis": { + "range": [0, 4] + }, + "width": 500, + "height": 400, + "legend": { + "title": { + "text": "legend1" + }, + "y": 1 + }, + "legend2": { + "title": { + "text": "legend2" + }, + "y": 0 + } + } +} diff --git a/test/plot-schema.json b/test/plot-schema.json index 9e6c6299dad..cd0ca2e8798 100644 --- a/test/plot-schema.json +++ b/test/plot-schema.json @@ -56758,11 +56758,17 @@ } }, "legendrank": { - "description": "Sets the legend rank for this trace. Items and groups with smaller ranks are presented on top/left side while with *reversed* `legend.traceorder` they are on bottom/right side. The default legendrank is 1000, so that you can use ranks less than 1000 to place certain items before all unranked items, and ranks greater than 1000 to go after all unranked items. When having unranked or equal rank items shapes would be displayed after traces i.e. according to their order in data and layout.", + "arrayOk": true, + "description": "Sets the legend rank for this pie. If passed as an array, this will set the legend rank of the individual pie slices. Items and groups with smaller ranks are presented on top/left side while with *reversed* `legend.traceorder` they are on bottom/right side. The default legendrank is 1000, so that you can use ranks less than 1000 to place certain items before all unranked items, and ranks greater than 1000 to go after all unranked items. When having unranked or equal rank items shapes would be displayed after traces i.e. according to their order in data and layout.", "dflt": 1000, "editType": "style", "valType": "number" }, + "legendranksrc": { + "description": "Sets the source reference on Chart Studio Cloud for `legendrank`.", + "editType": "none", + "valType": "string" + }, "legendsrc": { "description": "Sets the source reference on Chart Studio Cloud for `legend`.", "editType": "none", From 011f1077382d47166a3cad04252892f42277f73f Mon Sep 17 00:00:00 2001 From: My-Tien Nguyen Date: Wed, 4 Mar 2026 16:03:18 +0100 Subject: [PATCH 2/3] Add draftlog for PR 7723 --- draftlogs/7723_add.md | 1 + 1 file changed, 1 insertion(+) create mode 100644 draftlogs/7723_add.md diff --git a/draftlogs/7723_add.md b/draftlogs/7723_add.md new file mode 100644 index 00000000000..fbf504c14eb --- /dev/null +++ b/draftlogs/7723_add.md @@ -0,0 +1 @@ +- Add support for arrays for the pie property legendrank, so that it can be configured per slice. [[#7723](https://github.com/plotly/plotly.js/pull/7723)] From 08e79dd742f0b2b4b3200f58a9aeb28dace5e0ff Mon Sep 17 00:00:00 2001 From: My-Tien Nguyen Date: Wed, 4 Mar 2026 16:33:34 +0100 Subject: [PATCH 3/3] Add baseline image for zz-pie-slice-legendrank --- .../image/baselines/zz-pie-slice-legendrank.png | Bin 0 -> 33686 bytes 1 file changed, 0 insertions(+), 0 deletions(-) create mode 100644 test/image/baselines/zz-pie-slice-legendrank.png diff --git a/test/image/baselines/zz-pie-slice-legendrank.png b/test/image/baselines/zz-pie-slice-legendrank.png new file mode 100644 index 0000000000000000000000000000000000000000..25f58cfc7e8845e53211dba001a79d46001fb7d6 GIT binary patch literal 33686 zcmeFZRZtvV-!Dpl1a}MW?vmg(xF@(naCg@L1BBr2GH3`E+%32}1c%`6Zo7Hj=l%A+ zICbir`+Y%CJvB}Dvj6(oBJ7i*6bd2%A`}!9ij1_lG8ELCOW-F4{vGg%W_4UI6cibh zjJT+(hyGzELdM9}O<#2C7batFvAV+tOon+%37G+w$=n#+#2Tb4#u_^MD(v9zs&TkD ziMSHq(5p@!gi?BjU#|QfPmV@iPclz38*fJSMm<|wkZXu?e=kJdljVR(-lhML z`|r)b*RP2G=i)ci8|q88KjM0U|7~y%xcuaQxBeZ_me5X`ea!#1_OH*)x4DZgj&ZkwB1`g+|3p6W@$eW)>Gx_Bz^jq_F>h0bbbitqrkj?y5!+KW#3{0-I z*U80mEozP-0*qWWnwvWO6L9Bby}iNR?M8I9@EbhAQq4-x_Ex~*!|Gn1E?8F#oNe?ajz0yKyAdG14)kx9 zJtE)lUl~D43JQs-oaTe>tG={S(Ikn=1+p?@S%L+6&2IR;Aqm^Vsg%v`CrO)|o5DyG2KCYxNX?@qhWO#7mUm46wET2B9nMSjmFf{4drbHdNg{+UK8 zi>dwbJUnMhy1s)b}#>@oLV%X?L8QUiC)|m+gY;{mluh=f(C1&SUtP-j8Q}Bdd*0TbPW#qWams*Qxjiop7XFaBol%QoUn?n7Y_R%(NLX!Q z@KQz#UZ>neh=r6zZfsLiQ{#ioQ6EK(jEs=a?3bHnF6Z)PusE|560n`WuBX#0;Sh) zc`*{WeeYf9RSF|o+gaOgf5+haQ(BbAFlwKuY3P~S*IUgnh~-)oMuAaNmD0Ed(EZJz z?{dqGe@fak2t1y4Id!3M{~=v%bS}C)m{VHuxlkz9Z}oZyGWT)lVqiBLem{`Rn!Wf% z_~}x`^X2J=b#gisjnod6lPJdq7I~CNeV35&-TS;&r4+VKqBLEEC$fF9F`J#M3kRUG z3+lS7&u!tpF$eV}Aa(jZ-|e_vaH9EN&1i%il39O4RPK3<)LNiP*_|*XH|+1XGKi3R ziOI-&yg#VmFzSXE^LmSj&1P&|4va?yr$zeCST=XQ_sz1qIoV}H1CKHJFNy~EBo;lZ z*<2@$ioO}1?_Srm(* z**4(1tTG)M{M!>A>5u=n;e3#B>vX-VcQZ z;$jqf;B{@`!xK9T64X^cUW^HEpMLF)ZX^)CYINSoHyMb-!)Us26(WQ;L?Cr(hG9haT~*B&b!Sx=%KM4kES2TFt@>^SXb7#EGCs z!FEVIVh?uXIRQEXZ1q?ol3d(01{y}StR>(!weQ@Cx!#xB1NEOc=C`a!W&WkvOD}!Y4@~I{;L<~ z&5C`?S;$>V4$o{5tAPZ@H*sL6pmdz0^cgA7T|z(?(>Yphu0KPeM8}EUG%=}uBD5vC z;1e~E!SpkhLdkMdzX$r}vd=@;k&-9MvGK1Y)O=?U+}0@n$*`f5yTopZM#aZabW}>% z6j84j#?KEaSJgiu{AS;)8xhIOhd0Y%g?Yfy6-&52DKRmI&{?n{(&V71u-w$M({6Bw8nPWw02>NcdCYpK8@4nIr#n#WM*Ma5h6q7@JCXBG zKoR1ct0pTE^1V;_%FFaN>hp0qd?xQYO$TfAYIgH7F~1vEfIShikLYehCl2Q~ypcxT zMkf{neqGE43^E&CD9!ii<>jKi*0ZJT0iiK&tzK6V+hYNi198;nKrK!Y!=<^oz4dVB zc>|Zu4^Dv!eE)L0f!0YKz}Qhodk+9Uap>2{_-m-C*M`zzvmYZ~w*c5Yoi-x52}t<{ z6v+yK?R1XHH-Jm+9{|-)4>Z>q(UX`vAAQYhp}}z@qIf}Te4qX0FX5~>4S8)DpOyq! z=_@=eIhyXdMS4?J{pGpGe7Vk6hy0%4i0Flj<^Y#jJ0-&YKY(=;8+bl%a7z@S6a3@d zPWE;i-?RQ>3v4&WF9{cJjdE3fv_|F`1V-pD!2l}Iv@K$h{12uiQ^xoNik{A#bNv_N zf^mSq^rbel>HWVLSNgTIDZA^>mHi8g)nD<#jN87^zgUn02LO`N%bt4m{{fOBn&d!1 zQC}<$2T;r_Q2nO*I=HSouFL;o)BpPt|F|LyE}x!Lq`cVe*z=xq zxhv)1{B7#D1>4lY`I-R&ZK=uEx&N#}G@xZ;u)|u_W&={BzEl$v6NRQ$RzEX@{q+YE z8ENBbm9E#-Ei{Bgq0U$8WlhFpV_QpD9(ik5mFLi#aOl&7>!+Dj#M9L2S(tzJ${kGx zmkJcx{l-BT3r;EV=VwimD=9p9fpDY5@yupceX?k-3IbNYu3~g}DbE4^ADRPV}u+m$*6%m%@Iv!^Pt}^;VSXpCklO!lCcd7-I)e)8**LHvC zI=NnX?9Kkjs3}uZHp+D}_10eq_-8!SUq>S_t`30&c9a-T>!X&*9exKVVS< z0OYGjqmV{5Rj7cpl%pRdUiR&vqFsNX)_P|venBAawcu_pqs`XZzi64Pki~BB!|-*9 zU^Ll&HvPUC|2gwOcF5}Njh=Zv8tzYUoB0?CKCe^0YN_VuET8iM=~YR+b|j#euWI2* zV5Kk5m#Zm;injYRpn6Z^9WTO3!flsPyx{;aF-VvO^mRCE8=L=%=MJ&hubWl>_8QA6Nj~>u zru;w>9*3Nkr|U(x-=U8c4Sx|Y?k4i2Om9!uCky28#111Q+Ep!E9*&!-85m?~iS-L)UVX!XzZ0?6mE9`)XoZ?Six_l#q)ZH+vX41 zD^VQIJzua+W+v0qwz~u$Yh=rS{{2|*&_T? z2%#OD_Jf9jFLg!xa})iNN&Mxd3%yoVz9Ee{Q_Tw?BP<9@b+w(eJq%Y{JU-oDaSHE@ zW-hK2`oBC&4!K7;X`n36*^7Bx6@f|gAMgoE=C4BgGunj4E|Zpf;IJUoNx$!$hDw_W z<_%2%<>$+ z4@B5JE_fI~f|gvS8dZ)Pl33m9x#9@)>ZK`5j(x<+?S8&fE&z!-znoGUf+O`IdyAx> zvBJ#>5_Uh%U~k;esL*Y!+KbQOM@6&P`w4m2A%>sRPaN-ZH4k#sOPMowL6zlzD>tNa zp>|zu?=KJhd+HoN9K2S?X+E0r&DCc!r4xX|J~EsJj=Q{xHHnF71zCK?A6P~XcF0L|xVMICgr zg?wRG`9UTR-C z+|-v2tLuiEs{?`*_S|^9&Rp-!Hr!A<<#%QGc`x=wE^q6}-G`50haAy}Y_oFe!C-Jk zYD&~k_y$1h(lbDMp@?x&-dw(>fSbK@CnCKhIRuYlGWOxcj2&Ck1fM_SVH^b&SmW8D zuPO4HdBnByAi9r++0|2Le}=*dFnra^-n)_O?!;u#aBSelmI;S+BZ>u#zo`QDn^d=* zMDhU3A4+kX9O8AtSJNsqTMSyu{dA%8S<>!4`wZVje!U8&O#B#87q|D0vBE2;sfode z5SU%#BkTU05>|1E*TR@PK7c5ttv-CTB+*yz3kWW$BD^>fWGSy$y>J=6sL@8Bilf?D zx{NLXK9h*t;qujY*@>_6c0`jX|7!Bd0a{!rXG z4{-U-EOwxl3EWT8YtONzPJYs?2dbDm3Y*~Z0iODGme4h`!SZ1sutAlsN;&<=DZ z*2|>&$lx1ZP9JwP3UFAdn93-OQNu7EC-4O;rkfiqsD8GibM1e&*LcAE3D&RrRLb6J z?fP-`r7ly*O+4yo*}8F~!Kf#Hm)ex6elFzuSJv0QpiYZjNe=#Tty0X+;cwsK!r&`{ z*quKRky&8+km|!x+KbDZMnowWjhk3^7E1k*Pfut$o@^)@FZOdSx2ediO0&CrLM(w} zQGr({=lOX%j;YI$Le+-6zNfhquV?voJBd4;Dnh1&tEHy8{*fPfd&Bn=bj_#bx$`I0 zxnK?5NaYG!@5bw_2Vd?t7%C4Lr7m@kXF^9yL!_2-@=wxVPW)fulbChV zgn5}e1H&=B6x$KjIiA-Q@SxWlypMxzWQJLdKdL1Rps*+kR130K2-H{pY*{?Dj~3*s z^WIuTbduW(Qf} z_q$Q)lkw_h`*-^QC)fJOsTz736TUOTk#6?EZ6MFh!r|jfR^NWGy5?t8kfDx?Fy$|7fFrI zbMpn+0D+g8kr1%PArDQx;+@_*0~IxG_3&gpsj+^s>KBeDeQkmEh=$^*C0^T9YF#zC zdf0f4$iT>PU{^D&nu@g-YOVtGJxf4U(OA}`W~tyCF*23{y#VOSi-ND>otH42 zZj-g@&l0`V-c*+%J;I!f$4e8fvCJTGp3(lp-u+0iP<*H)ol(ZfDgn8)L2hOKvt$}B zKTGrIcKqVtQS1)4dTjE(&1Kqn^G60o9W>g(LE=8DHp5b%GZE*;qfFt=RhS}bmXDI# z!sEJ<{#VgH%`5k6t&pRiLj%sm=PUM$n|aR)`BOUWgFi-Hw>E^`2L?0yOm)ZJosY8W zn2sD{CH>m^%J$M`rmS;Nr1N`7HcteTuRxRj98_BmC>aAeqCuO0aQdp+aJA01Y2^e=`1_n=^vQ5wfrXOlihE z$w-c1FQQ;*A=P!5P(b3^X-#2V?42zl4zMS%D^<~P$ zf6HCri01TKKu4_-vHO{ba?q|7@)@sPGqx z=jlMr4L}D7!(rH=V<>E8iih}K)nxgpik9>5d)arNlSx3EF&#w35+}Q2*?_x%&7#W# z19>IAW{RVBh`nNRBz!JEGHarVc#TkzO$QU$XHHUv0B;55T^3sv1|PLs=T|Xo<0ecF zRJXlJ2?W8ZRUun+57;OhT>RDk5=ShRysa?TnF8xQ-${n&lsdUCyU2HDJ@G2%=)KaZMPm+Z^*LqR{qmE$St*&{*v zR|*OO5Td;f>d>K{~_2a8WL1_ac_Rka*H#TJP$u^0h3+jm{ zv&1nv1WAdJ4@!gISZ8Itnm(ko`{XoQ?ak&4)~Jyo5F3d%Qj?A$k;4`^;RS3O~`(IT&Gao=BZl-oYocpwbbA#{tU&J`~U7YJaBCia3osAAa4LP2?B0p<@T)S2sny zdzpBe`JD^ENFxjvF#{jl#dDT0kC8(wcmZgw5J~C%1Rn0&*(qSfB76T8Xv6d>YqEc&OCF0e#f0X6?UNu-Tb>5&rk}JE`!y9^=TbEXNaJaGE_BIG45F|T!xjgJh9&(6 z0`gnV=T~4G>nB;xrcuj!1-u)+l?vm~J~19A2}j|^T@@k9o;Z1%?k*5;lGb@OhDDY&;1{ta5yzpDNVJ ztC~DIcj|3<9%=HO-1vU3TxTKFXg@34SR_I1EPZ>o+Lh#>ZqP)X!t?==3X+GPtB|Y4 z4cKfJ^C>@B6vtDX^iC0%-)?yc(Q=5HkO|s#jym?rl?de)4FMyH=>K5Ob z`v{;*5j0VT*8op#Mxnv(3ee=e{A04&AL|z1eDtDgxqJL^!Bb%2i&r1^s6Y(R^$Tb; zYg?$4_i6m@<(+6HZ^~iabHR3d8cKwK5TWuQ-m6Cw=QVmhZg3o(JXf!pKsWHiu1()P zGea(%9oCP6TGA+YvcRXUdb0gDOR?r!X(_*!i2i+jmArj}_A}q-KeqfA)UjDCXl2FJ ztkcgLh`srU?yClWR3%WUw_>wQZ)7h1mX|@RmzQ1H>FO`cHHsgnwaF`w8fbPc1t^#v zx)W~IGfNG(SN!-Se{8QJVdp>R%C&}F`ll#%>2jOZ zNv|wUnO#Vc#*>GP#|@0&e>Y`20uiJ3hKG$Cx8+m-*gN-%M;AJA_iohq8A_fgxAp9B zTmMKpH=*-K*wj=WtR@AW9bQIoR4~*L=~P>_2$)hbg00PNcn;ke;HQxYPk>Fk{p&B& z=(DF3NJ^~FitWp9*azd3T6RZsDKYn!z`oAVF4&C(MvYO6rR8S#F_GP4HlyQ|1D#qc zYUADrc3jLQvT|_*!D?<5;W2zzzihJek$7ItI#S7zh;e>yCQ88yI#zdi9UAkv7o=%1 z%9k%)qN(loAm}(VHQD#=_kt%cdrnE5_aBl{+fUe@-OV9fRzp?@9OvP#G^gbow+0ag zEmoim`P+%s-jk)Vq2+zTGK2qg0DJO=vt+|$jr)oIhP#{8E)pIK*Ma~6@1`g^k@jsz z08D{Wwou3}d`6c)iYTv~8v-#YpEhUr$T|$E5CONDH}ueHd%eX3Mc1#CY4*g8n?7hL z2 z-NGb)#NUl-l1pL62WL;5pV+8>t|Q`OUM+3Cg<3<6>BR{jIDDh<_+5j_g+vDf4yr1A_?2* z0j^}6pd0M1;|wY|(kC?GM?+L77mike4 zwyPe?-O}7ea42^vzB`m<$4LFxD6-cWOZs7SZ)ijquI?vOJ$IQQ^jzD$cXq`6Jt=Q? zlAUaZU$bBPuzuT64dGNlR^#*bpwCLBpJlN+hob(|HONe$=Bm@SWFU5G!0BWdha~7w z_e-;hg*Cl_z{5>qknidvZ@UO)lkglyf7{uHaazbyBd(+kRP4TZ5kK7gTPOWkwj_O> zaIoHWAAvtU0YdOiMt82x~@czW!)fI`9Vhf?w(gb;F&dHKsr zP|S=yEG&$s5~a{Tu9{4@g7PflyZLM7 z=XE(X2|(!nO$bP>rz-|8rFIWv6jSz>N~^qotQ#=+KKcE5VX#y#_CU@3DF!%6A~~;o z7<+P^YZNU{+>d}*k&(k1K?+o~JJdC&-ydA|Dr2ul0$!BINrk^UUdZ!>1NG(5AWp33 z%~P^Rw=gUC`X}&}&esSO+aZW z`R7hF+Iy)LJMb=lpilNRNE(u%)=(CItFv8I$|J32omTbp%x zeHw0H!gLepndLHXPs#g`U4;&356XYAJ_DhS`JoiA<$!2Xhtc;t8^_f%nV4R6YvCQC zT}=MX8>k_S5bMCy(wD3d7|06%xM@%rc~@Iw4QX7eCO&&c#{H~&yjdw_=C=i`=sgE| z{P0isEaN{n3>zsa;9>hwKAjpDfRY+!bt!93jI?XadfO%rMAwquIJEk-gV60PMqRk>B ztq=>|&`5;WAY?0L^39moZ7( zs6yl&>zAC!nOS@dTxZk@M|r#DCz6V?yaus#Asz@@QvMG|+!yxSl6D@mUq4m1xE(DN zrr}@wvfNFuDd<3%h1bz@Urc)+?W&9&@|T6vZ20tB5p4v~hf6?!9@#7*Wiu3ccl$o* zFAvf9kBV|I36%kI%eTiWpZmR{!rYiL$;uLf4p9!%cEycR`{M**v<4O=f=otj*>2oK zus|>sIbTJBd~_`M@**zAM^QFQkohc3Du4RyDUS6n!eA$5W)v8+t9@Ki&>AqjR%=sEi=#OwiT_M!7v8*)>hWmRA6m6pa&`Z&3LTv=&pRt#+@_#E94 za;xm@>>;~AO6TyZt5WgQ_hBPic<{&PykYYOM4+EsW6_>~NCd}0JqBMW+2H7cQ$IgT z$Qj+qASB@aFm-(off5L7G(dZEIqtxKZEYBa9Q&0)WA`UHO4;D?`Iy-_fXQ*F zf!Q8TL6T`p_giJ>H|y=ywTBHU&~fNG;+VJm4AFA7?YG52m|LIbnRH;ZeRy;cS^;-! z>!6dFIX7p72m_uAa-yWwrj!>ZJEKw0D}-O zX!Abcx`7)sapW%-zT#g~ z7##uDS!c0qks7g1_YnmkdHa)<#!~b;b)`?nrHRvzz?3Ior*Z1{`}6C|HabY{gHRu| zA*Fy-bYA0BR-5|T5dq78zGW|kcnst>qTx+9YdMM-e&F7WdVLo zG%YX{S`tDQeKytMmm6)(!1{oIE-EJV&|7-UbUWaPlCy5$*n?v>3Lgq4v~T&W+en)U za}3n%BfQD(zNk{I>fQ$UsuIY};k=3_5-6dC+k?*toP>s}Nli3&fapzqN%o|U5BNB| z^q4t;q=nkGNOzTI#u9NgFD~*$1E92t2V; z$>1Q}>ADv-e%6eI9%>3rdY{5>EdK~_yR1~S<=FAoo~hLFdBWVeN)TJS9Bb?J)ouUVb|iWuTt+_3!5Y@A;ZyAS#OVrMoUf(E zM4KsdH|7iQuYa>?+QQ*YKlpmM$R;J5^n=Qkp*A6xo>~I6=$TuYCHC^Mamy#bf;XO4 zTX7qgH%`vPf5CG;HG@HCjCx48Xl!tO^Fk<1@4ESOy!R|SG8M$!H;MO#YOZ6vt=aX! z3?3z$_t~BaepJ+rmwTumUkhuPjL1Mj?zZKa*rgrbt;5~zwB9he zf4bf;Dd;73*R&(uM>&hfDg)qN-=P9B)V5=JV=*i)fXd`gg#i1No!Jo$(;vf+;@Atb z3_lFhM$~bBIq1yafQA}Rw?V`I`X`~O<;uaxSg>419M*%`P~#LWC-Uc-ern~4g%8Rc zKU+5WT=c0fH2H5-@}aZ?mg3TcB}aQDhr-^+<~536KegAjGt+B*q{)hh*{Rz3JMO(Z z?<;rd=?;&s0rn?u7n)e1%3SBu0g`ptHAJt544eqs7P+q@nxN+F>XQk|-uN~oTB2cs&R{{CEpq->9B!jGUm3QKiW_Y;k5M)!pLo~@+( zmWj9&TG=Rxf}u`b3U3u*M5(H?oyQ@3#QN z@f`vDDCPqLBlt8iBso;-Z}!$pGdr5w`it5?>v?wg{qn@Yhxsa2V z!I5!o_`dxsEq`HTYwlK`Wlkz;A6!*pI=9fHrR^{8Vppt^SF1{=tZ_~fo_JXu(71rR z+Md;|e$Tqs_iDcHO%_Z7DL1TcanTrHt6aQrT*Tce&MX>R@x9TDuZvHBn0(wo#HttT zCsnLM$9c82(15Oa?)+fmz3ku;f-pInT?76K*TECf$hFtVqwG_PrfB)0>j#v71 zu(*Z;ZMkRZv{lL&OvMSIQAwJK{~fMw#&^`-tQ02(r)Pay7b=%9Z;v^i;hwi=&i73$ zNVhRJU%hr)xmX+~j31xYvPdxcNNv?KuVDBa(oDH7f+udjlNw-i>;ck9(gN>|=oPba zavVm)p;1D2J|B7NZ@N~QS!SJe6#LmYEZb;bE}iS>_g_4BDFmB_s41ni?d%I6&gvf+ z$8Jkdc!wKvXMwW>{wQA>4JKFWfE4@VfF%O1E|5&TSAg$46Pyu8o81y2^avnSR}4x-iT8MxhW*(<(;pr#saw%35fAh{#y3XuJPOMMFb?Laf3cCe^nyT2|1as?o;*7Ba0{#i6}7OCFQCL90D>{^7qEENT@) zTtb-3K>j;wd>K0FUl{ixD1^vKZT-J{S3J_8dJ!GpS{V={JOOElDxEZdYvCk-6^YTE z&Mx>x^w6sgKUhwR+coXcWQ!Jpk2&cmi}JP}l85w=UP|VPh8f-EkE~p?inpu><797i zY*|vNb1IiU)1V9`mNC~3awq4?oW&hGXsk>bBLuO;3v3~o@x4XV__S3b9)?M>=w-FD zUrjC+lClpbBA{cKEL0%OOEla@dy7B?QK519+Z_f{aH%T)j7P*gIp3w)0Gzhe<&PrZ`!HLHUa2qjMF3T@G!^E}iSS1I z)vQjhQ_p&ml~scD2r{LVt^=d!?9yeJ(peq-LU=+@i5WI} zgL`NCL@@7x$e{Jl5{xk@NPw}fZiWuXpv9xI7dw(76ivDud+f(r{qdR7S=um4)yw%3qLlt| zL^F^GA@dexd-Jf+P(V8IW-PVCN4^d%5kg#%~b?+_O1^Al`5k!NCNKl1!NX&rsKguw zD-dNQ@)$7cwnZ{gA(3@>^VIkRG`-sXw=KY7M}GBKUe7)NF3a4!#sLs=xd2i&hS7Oz z9TJ~5fCT;zTSF`<5UG$)Lyh&^sD8@U)6FXP!|1~lz?L{^0_&cE3`^=kI69ptB2Noh zf?mNAeHyo~*eww<`id|Us^**VQ6OPs9mr%0I)-I}PQ_?yUghki#1p)2!d%fpeK+kQ zCGbVuKoeV22~a6GecLM$9d4n_-R;UteS`tQ_3Z~=$-w34W0u;InKJ%yTW~2qwta1* zSaT_L&cJUG7E(th5|ztAIqGsPd;?eF*e5_dpFp0VnfOV_ZD&(sBR_KtPaKKIJag6y zm4wbEEH#I)Ae2VKf+htpz~PyX2Z$`O|8X#+b|aJ;Rrhl!iQc{17ewgfW;I6rsNBEx z+?P$a&j3>}O^oFCo3GiGh!ZUI^aJ{GnJ~266djvD%8k2w5Yk7Z8(fpRWc#usD|REk z8?`ZkI`z=vc`^Kd`WM?mKzufcR2@ba;TYV7APUh`&}{@&U4$2cvxqM#Zs(Va+~oSk z_++h`T&rEk)}4|UX7-6NbzBmKb9HoVvmknISmP#^pYYI@FSeVN>7I>Ni!1JgCHwnx$D?Hzg+nj`)?xIQ+1~Cx1af$7=h2( zt10ae#4`ja6p;mp2O+|P_KXno>)C@HI}G?)5ObDtv-a}n1@&ORl52LA`ooe!QJb`g zv1{At(co+;rJ!WQ=>Eq2(hDWJG^kJ4POjx*-aLC?rPVufb)Fc)s@pJbabd9;11IWW zv960l6^16>w~qPp0d|XNp4!D{*J1>nI~2|5)?!K5pXwL#i+4CKGY4|G46zDte#l!W zQ1BYU%7yqYkrUh2Mskq>DvKs<2MwTVZ;H87xh#H=H`wfn3m4_VOX@|m zGdjcdD*W>xb~+v6z_I(s@EX%YLjP#swdYVBujLQ1w&tC_{TdxM#pH*tI6rFk@wn0n zZSphQ6-M#*MpWVVWqtE>TRwkvYn)>RF1y4;gAL7!^;%O)owq*NXVunT znL-oT_nw@t87t>$jnXcinvHh;`4|I^!cY1GJ9&mltndrBy&agy=bJZ)t9swU2w_v2 z??~3%No`|3#{3*%J^JS8hLG8IOF|KYVvGAC3=Tgb_80JTZj)mhm@CtnD}~Dif(r%g zt$7pY`0OyiX|)^a-H2dTk^`9ShgZHO20I%t48N?B(Ci#X)F#{*+v#oqln;~6z_)Jg zt!kj1(@xO{S6&he2fT52Rn-JvLe2K0j-Z_?tDDCUM6C8MZ`hip>5 z`q)v|mT+UuPg-Xj{=wTAp=4Q%`?}p96-{+_m}+xlS`gIo7HOcPel>YF<#23y&|`gx zCI(Ex!jt>n@Kx$Z2>30M&o{9Lu*&tSZ9}b4Os`*u;2zH$y^Cv1^g<%z0pGBkOv+eNX0?R6rjNDf&8+~~`ivMq; z;4}K|vGN(|D{}6dwHGvgcLGFS-+^fVV!aT~k&n-YRe_fT3tYR4#2nu3kxuMpd;CQZ zTg&)0G01*mEcAOiIQ82YQN`4+jz}qP**Vsxd)qQ~eiD}-<+_5di8I?t3z^mqWsm9& z@db721aB$cpm?sI5O8aKPhc`Nm0gg;IOT=*dC7q_ysy_A`0GU+X0G}e4g@p(&#vT7 zfTKH57;&FO1|K8G2m^OUEBHG}B@AVY6!E0PO;B#@JhD0npf&dAD(o?-)(*(y)!O}@ zSoV(_3&sZe(uJ;vw98zql$#ZW==X{gwJhx#6|~!+&z&zc1l0Abm*!u%FWsTj7Rt(F zuY*Xg-Lx0JZH3AJ5o5s|a=LdVNl)nsO*m5)!I8HPUJ!<+Eae}&D zdj;o!e41vV9H@0#&A$RuE9!oG_{EaDK9j158jfhBG~eyYEKZ%F!gGq$_9^kJWUaHk zJ7|#+dj0k24g7HtBS?yp_HVqj23T6z=Mc8B5wkz51gHEQKAs60ODHw9!Fuq^8&Huf z?nXmg#(9DH2VkGET?O{u`4-mpnQi?Vxp>TErugLp|BJu)V+zZbJKY)%t>3=s9}i#> zuFLAyUbrv@cF3Scz*-wkR2IxqX{Uc%J5-0gz-L>Cr9dYK$Vup$WHW_Jd9%X}7AM~u zn;2G8c9|9tMWaAfY3P8{x5J5u%HqIYd`$tn8)`nF9*mHcy%*1jSC05`{EaqWn3-Zx z2I~9Vc^Lq(#?jinr(ztPu3K0-a62=7j?=To^M1;>fH|&luF{Bo`pzgedWII|t7*IA z!5H`lsVYIOLVvkMj_BI$@Xr@S`v!h#GjGU0`TvI3lSZ%xs2bo=4x1hnc!!N=%Cz^Q z^v>JE?7ZQPl7T)zoC5R(PGj4-hUKJ^Ecd@z0BCKStDkq=2GbD(7bd<=v;p#P>C4mQ z>h*$+R$_Mr!#$2L>e=;^qj(4wx|TajqT6e|BX5u4o3TocJXX%sVKrj=3lvJ<5%A4d z{yL1A?oJ}>8N9EJd`)1!9{68f`_cNXzj#wcQcl?E_}l7Pznzsv36}gA4z*lGHrdW- zM*Y2X(t;`N8wGir(o1jOs&1U-Pl6*fM1RLK8qYdhr7&S)1E=P(?P@bG%HT1HV%NjP zDX2ErPDRvNP|<2knfe4aw4iB1No57HsQS>f$4EcrIFw@3@1fx-pu#}9LScb*N?xe| z;T))__hpV|9!NPKpR2x+u+p&KPDmWIUb(clP6r^a?Fk9hRmF(rL8=hBTu!?d18H>2O?o>q{udn(_28SU7GioaK zj@#&F&D&O2T8!PMwH1eT&QvbY!k%*s>ZNqGRx^lz85a%5tw8Y6#=_~)SqyCDlI0Za z5gv=#RR7J=TMoWds7BlFVgI8{vWwhN8P~b1l?J2nBu(vRK~;XC|1$ijb7kDu!mhQx zd`XqDx0?N9{ztWQY1Sq{5}wn5VmhLb?cLn8%^vS^t(f=Fp?dc#ubF&{1(rz?^#cw= z)rXZ9VVly)ks)NV`ar*@7Xld`00F{bHC6W>t??>y&GW)|{ltZ}S60XfRvqu=`D8Y& zwrtyHM0tp(&74ZpII7+3W}D2d4VQV@WrQu1 z4dyAF+6-{QE1dVh+02?$;R5*qbzYBCL#(`jPcDeoSYx8#mgG9G-Nkx)Zgz@kM%s|B z&tf;K8NvVL0YwJ1dUul03Um0Pb^Zo@r!k07q&CykDDAHMVwP@v404K3D zq^*SU$k&E`xck4>-=U;c0WHN$>9g%voBFGSuiM|#n`MV|PWoMtYwV#nZkqwV*Nd!} zL$Dd;Pk2Op?l2eiMqv5-8WLeyc4?q$dle2kpUZB{gg_d%ebydPP@^c&SzS11s1~W{ z1P`EDNq6w50*>^XLvqd~io?#YZ(!sX%u!(yGYujgIMo }F(E>*2ov##6N%+a7aAsB@QK^6p2TqC5(s_KVqr;Y@{DC96Sfz*n zzGH}3@}q784e~ppT%u*|(G#A0G`sFBhaYE&Kq>%H=4gikc5-qmBB^crG|dLGQ88V< zB0s2+IM;%I0a^^l8eii+dAxNP*!mPQ@!)rb!1$W}xeJtPrpg&-H~-2Hl0u@AYTAH= zrR~R1EwKM~Rq+`_XZ6#0r7uei2`Cc3N^|h}HKc$^zc2Di(O^Lo2~JyVBFpDM%yeNW zFt;o|HtwJTolfJ6Z4zXrL?c~{`X7c?r(B_l_>0Hztq4Eu1WrA@O`sYAkbm1!Sw7<2 zaO{Hd(L)G@=kkr?n1^2`mb?s>2)J@NT9`Q!O%i+WNUizBLP{X~qD|A2b-DI4Xbjcs z-lh8 zh%Ow3={}^30*~IBB<7F81p23Ry)}spL1o8k>ElFyzuEKu5H`b&FudO0r%ZVSgt8D# zVrTQ1iw-lV`VkCw%usShQOD7Z3AjRc4jT?MlcR;&>mUR;GIt>OH;~$aRw8Pq%{_~a z%6rI*3;iDrWZG|u;@816%ifFa3sY=Uy9&T;>YO9_2kq|`fQBZ!nf^SCORCqW?2$Fd zSRP}Au`0rp2Gw^e1dG-1d_y&Ik=nftnaD~1U~RTaUru8*8bZd2WsX8@(4tU^&W8(K z<1ha(3XS1pifO>TZT&5^BratfkTLeFhO4XnS7OH}#w!Wrfq#o2gl%RkzcfEF&I?{! zl;XK{NHNTC+8V@nrqED&p3|Xq_*H;sg;w&e}jXHmtSonWpy`YEIjhMhNZ2fBjdgsX9?|INHy=h zY}lQ-#rK5B;_x-0!{{7$ilO7haaq;G=JK>PXtX(kdMN;fw+MKU7%>CoNk1g%(`xKVttUS=r9f?>)3^3pkt7 zKC}ajrMJJ9n^>t~zh)+<-DO=TU+qdzD3Y9skaKv2eh&TV92#BqR^XTQT<zwC;v*gxssU;QqKeV z8MeiLrd_52Y3#G1Dox<>v63QY^(Nx~ZzNsJIRdApAC{Q7ax7tT9`W2MYgwj&H zsUBWEAoP>my^^Q*X1zn)+j;Ymd`mhvzB>e8-{}5ocYN2dXFy&3AzAr!md~AWQJHlE z&)(GS&hdeN!CVmc5I19T6|d8ON`3x=M#^w)sQlbmmrUCALkM(-{o+Z4S@zk0T zTHLttYQo4r`UgdvHwB+g%YM(Zo>MqAgwqPBjy27@G-@X-)^fEbO4HO7CrsHP>!!X{ zoQdaA$A@`5qjepXOjRq1v5`;gt4c_4NzJ%Qd2N3urE98euavQJQ^v;-4JCg) ztUD5qc~F9=p^)^zYt6c&`0-HL%8fkX=WSMens|Tj{Vq+sKcQ#&LVuWx zG((~bZEI`z$D)4?oKwNsvSy#_f4q=wHg`SV-^@;leXFv%^7Hv&MQK_8!kscNle+oc zH0^u?vsd-Me6dG!Ahw+qg{V@j30EAO24^9bF5!r;fq|XMm%1`Ly`ehmF!d9rV7q8w zmeh8nB5gLN@tc$GA3r|>HzW{95v;8gFa3D#_Q=WMc6_--m}z^b>cZdEYwNjz$jnYt z(b&qm;(Q~6f?CakK@G4MGn9kUEOzyXX!LUdJA3!jLY=vdk2S1PtQ(z1lGqiMA6UfD zDUBS5UFWA?{B#f!+~BpDlFdkAB7TS@Et8pwLs1DePRWg$GR)SuU*n~DocOGu%k7*l z|5!-4k$1O|^i!EJF6XVnxV`=rvOnfvFKAU6o5se;GPo>hiychT`&s;n&-)zvIy<%QCb3tU)rkIJ!8ovRx&{uI_E; z#Ev`JXyz#fsvjG za|O+k%$4Hg(pyH)@4iOQbB@YVaNXAj4paxZYgs2)A{{!?J!9oB=)Qh#b0(C3|5x2Y zW&(8Ex`R%gQHxNIP{ou0kxKfy$y*%&QJEom8G*!Lp$kau|!AxJo4xdYfBzAgE zfU+kQ!m1;;Wwz}AXaLmxlIb|cQmn zPhCHF{S(22`m2(oFkiFsW8& z5L0PBrQop(vddp}n^&7*K7snJC5UE8si@e&HJboqq`y2=$PA&9$j^M+?jVNvkoqxj zEam}e!_lQ3U-hDZRTSV4#6Ki6Uwo>%2%imOE*3CbmX~!S{^fH;mi#+cI&YPk#azad z|1nq)>kDq>UGHvZ_^Lqb$c(6GJd5|qNaNQ z_q3Ta4ho?+DM0J@eT>C>Ur0IB$lnyVm4>!gK4FSuMH!`zyKK8JV&qEdm$?Snpnq9eUBL#NZWR9b~L1r||;W^=vd_()}kKxv%Wx`96HkI!Us_u6_WmbyHw@Cm(mdPvKLM93>-8jH2 zbRn)MoH`I%rsgPkt|6IStn|UlhF|mOHtkO(#u5UA*EBXRG)+5`LOJ6gUoDks%Kvw< zKG*O-z2^@{Q{myy{KaIVVH-|_x2tPouUdA6kX@^%gazF>2;R6RN@+Pn`Caa@qDN+| zzEj1VBSF-Xu>?h#E^u?Lx!4;@bkM9NNN;j0XdJ#X?O~Kh^tlMZq4H9F6RJtkY_99s z7KrBFLh4EI%NP7{TWvH>wT-HC57&-}kUfu{I8$Vs=bHClaPBWTK*592VH!B#+bnq zZ5dwUx3`ez!k`3idcW4b2cW|KdQvSSu%!Jyt+a-GVtLd*xDofxj-ra<@Z(yv;yDUA zaP*J~5|LPqEW~B93`2Ms4d+HX|PKGVr>@+8?VGi|A~XQA>=DrkixuA+#L9&~=j^yA~P$|k(>GRnz2Z_%42 zV|stMgcl}ohDx+AFz8aoE>>&Tg3>(yI<{QqP-*jK8;vE1!PvZpGCDKTk6I(ClKqbk z6o)34?n=Q_EO82l0l!8L=qwGBQ=iW2Jg1C5nvUe_$?}}^ZYSnRJzr-v0viYXFDMi^ zfyX_DPrubX9l_nR0Hh@$k<0u~{s0^DxDf+SuR4({dmLV;9_t3sSgwSfK1=CB5Q3(m z<*!XziotN|eH2m`daE>4gkA!ui9o0_4f4K=G9uQ;ODuLd7UFmDs4IkT;YfHa-#Z+R zU>v0 zuTd?g3-TF~-sPL-7HI`G#6q}6Pq+gbx#bJK#?9nly>DL1M_(nb@8t>j(YTj(PYt$X z#7KUifehI-7_#y>v8AvH+!TlL+5yxX7h`}@-euDaB@r3NjHUq7=EnB)lU-&yK2&zqND6*1j!c7O8)dF5lCRqMj|@XNN`x=HKr z7+*&`{$Rd`n(R$XEUm!)*EbfdP%g3QK~=T3wp#M{6M@JeP7I}%C@~ueD$?BRZL{m? zAKSDP&h-5!M8a%ttaSPB@=Ybl~}k|GZx>E8f);7e)d{wd+tbVTCiN3(=lDM0+U@6c$LY;?drzRwKM@dg5}Z=sWvdN z@09m`q5T9WY0OSRu_YN>Zd^3#L$XGA!^0 z60KHq=9n_j(>2I@^u(o98v@ifkQg;j4npbI}bh)=Dmsp3mXEG|`$K%eWOS&a$)5l)WN*Rpr_ z3Ye#SA6NqS)nr(=M%8E}1O04)4xcWb<&3n)VqxGO1Y&3=kr<)%;+@pb!g|gsKxjpf zn!0O-l{QZigMvO?-9NvC?hY{2g z2|zER;T_gbe-ioHd-iR?EVreZQ{5cpc8AQ#p#|yI#>pS~|7;l^|7n$n9WCwYd~a8; zdVdQ#69rlz@WnaIYradXukA^ruFUMf0_)K^}g*%_K!7GNQXvKvfAEQpAvnLsA&mM5F2aTqq*O=#;JV&|{pq5s z-^RN$mOv=Wua5eX*6Ct*#jI4 zLn-;D-g6X#GTXVAr9wIwgT%C%CsQ$uLy+8zaL@Yv4_w!YFJ2tbxuuGGyb9_ggDNk_ z8v>~EUKo59=TZg?U6^1;X9otzvGFsN?3*zZyVO@SMtC+ zzgw*v{D@^BhNR=s`>VuGYHDha)!o?KeKGr4Phr!i?%jt-ty#IK3b$3O_VHGUO>+mh zm7Ji;9kcfJO)fQ=oMFM?Di}J?2LVS(7PK}9F7nn2rh!orFY6I@@C&TSQ+imHZp)u^ z3@6#ZqF43?Pn1-AWsc$93E~``xzXh{lz+zb_WQq`%@5=~!$|zhwalb|Roh#}-si^+ zckxz1Ne6Wm$w76(eMcEc@#uPq9Y~Ao;WJ+US8*1hpSE9g6K=9RtQ3|TQyR=WEXoxn zJAk3L-4lzYmoeeeeQ6dxqD3p@-X;SHNvBh+><;Z^20KCbaO&a|YiH(hk6~l0OGubL z&_Y6pbr@BLegMR(>tss&J_vc^G+D%V+1IoW?XSAdcAR7LJor278l4O)NXCFS`0ju0 z4PGBCJ-wzz(jg5?-$*+KeTgXufaUP^R7s(DlHQQ_6s-J$e9TO7sIOeliutL3M&uB{R0Okq1Z1)1z zy}@Gv!{%)-T3=B$ehnZEN3~5f`s|$xSqJy>d!wmWx47M2w#Wz5e1rypb+y1j9TTw` zvWyUTu@H;TyZZKZSZDdMLH$<9-`X>z2{NqQ-rT1Omr(C=LWv-W1bM#&yZGTSabm^2 zWXxtxu8_hwt@OtCTvm%}_W!7R@ekm^viV6Y`OYU3FGGPa-?wLJr~4i53hJxuVpLdQ za)lRIUndKvngg2gQBdv37yF}tIkb196P=#(U35wRoye&Z^)}E84>l5i%|)9C*(6y1 z`$_Hf{W(bSjt~ZPNqlQtTiT*ca23P96-)0A=0^``h~Z_M>$GS5rBSKH{<~QEFO7<+ zfWMod)qmfG8khw}q`t`egBH{59sPf)ReX2GZ5M8S0+_Wv#OV`GPR}r6zRqQ4#(ifl ze#yD`Fsb?Uj+|nP46=cpx$W6_9Vh1urPfLGV|w~Q!P&kl{=28bb=k!y#5(!{D#Cj* ze~ua;JG?j=e!-edmXE%lQ~u;Q>(tes3l2%vKI*+F#7Ez~_TdeqfkeIsnvX_a>Bjo! zqGU!7iW4NBk+H8@;QzDFqR~3AB;I=5Zu38KfsXp5Ksoc$*Jwb5@l1*v*dX7f{m!rG zGyk)-V8bHQYN$k@4&N!bO}T#&i$XRu5o8zlTCvGN;t`v5bf0+GpH1{MEJTz}bi9Jd zcfEdt`V0Jj;sC6FivuY4qT~H_HyA%N;{U$Igm_F_)&n$14&Dizv25?8OQNF5g6T{C z%B-$YSQq6BSE$DoRQako&)RkI%d1;AUeZ6R{f8C+fiixdgu-!|M7mChwDlmZxBt?1 z64h9-frxi?XGPMOq3vP{XP>H1K(&iT|8oDEt1IZlnmj*`TSQV7)_zCcW#7QYZ*C0% zqN6LTj&0b^<5xL`SiC)GBp!M64CA8;k?kB*%mk)n`l=cmC(cKt?yQa7Mg-~r7q6LX zM>NZ2%sB}q&)h4>-5DLY#YQsh>I_ZpQC>877kaop>uuWPTgPd6W7J@4Kq9%S_x;AM z5`YtBouKHGuki*dPT8ThIxq~5uSpMZ<)_NbA0g>jo^EeRoJbSYR7^Z9LTekA`Dvo* z@cqE+hDhcS@EX({uV(_}92yicjkNZ{kKgRPq%itYYRX66RX3kzrxxS)>NCiYKk7zp z!({gf%Hx)2FV0b&W!&h`Q`zdD?R;9ZL2KaBdwld_J`g)esQ@pWk0p-HGu&qS>-C3w>kj14z`vKG zY7W2zVS|ziQL^DbhRzSNH}3_%1$cE2Gr4w72**jY?I4>@9xgC~<5rF`JSVTXQJ8g7>8E4{_++YtKMpr*fw$>12xO@`H6Q7>;yq z`Gpr1Tr_N&dZcA%lZZy;aD)!__T)6FJac@OsP0TWSY9)cXK0Fpo=jaoXPwGx!jRL2 z?X9hKtUHj>qE)REnOa$ue`)^-C-Nsn!?3%GwCBlPT__js+YR9qh*Kj7m)MGt(WkYG z$)BDB!~8kpZLWGSYF>k4lI?P>PI{9?#q`h(T5d5cN_m2@XGbfQd40}1rbM@SI3dWon-g1H!^LoD^mi{Sk1 zOl=2FwVj}I$SEuti}ieCZSDAhV3M9mC=S%T`FeOvi~e+9CdXaWqk zEI7MRM&(b2wc6i!j#9p+mzkASanft%yn;J%u7rHMNYv@Imroog8%9zp7(04CreZc* z$3C9Tv0#+_-Cp^FhxmIq33F5_&9=}-HKS8(JGn}+X&)jgL;-AwPe*zUodM;yqbvU* z-rycf8#%~mpZWH|JlF*?eQUvWkeygFxFh}R`2)RTgH#1vgyhkO)Hi3C-qi;cy&HZW zvTk=xYNvpOShh^@V-`!c54E%pHBU%P9c`At76@-sw{mUXt>gK9e;;}st;8HAi5ILu zKo8bWB!|~<-!En4uKVU49|%5huNy_>rsgJ8^7bV(}TqZ*x4Ez970TyHp-<;!lPr3gvjW{S+ym>R;5J zxYOZOCl4fdMEf#|Y-IuY(a; zVVg&lLAnn9w(V6`$(SXAXtbMqe!R6lkk&x zyC+qiyI1rme$deu>PFqXi)DL-!R%HXgFNdUSg9}AV4WiAB;8k-CQugSu+hc)&da3w zQJyJ0FdmDPL|->fmMP#46FDyKfWdg+Ks^1&r1;|&@~73m)LfnVrMeqE`z8gf7fhNG zQeMAxvzqtKv~1p%6xj1-SsZ!4D~U!;2$-EWB}1_+Qm1JJXENI3Kddg3>SvSNJ9p>9 zFbW(0;bW`BY->Ej;7nfo{t6Y0)Tu8ULUOXfnK{&~i`4IvvaJcmw(UvX`vZl1)rsS> zt!=Ku@079rmw*0?QLz79v%g5d;aeZY*5>`9X2Iba&4N#8>%5Cir}33B0)nqlQVL&5 zckIo5GK=d_N7FJVorl(bkG97q1izK`_RjopUjOmwN*ZV1i{^gm&7IfM3tS??wz?|6 zFBVtptplB(C^Ql^ksMljwd7xaNj=!a8j1Ch>2%|vcI)f->sQEJQ<~wW%eU-K>Qe}1 zGU5^CTFldBo#4SWRvuH;*!AM|Tu8Q;SE9N+I~2BuEPyvgw4X+gZsZ-P7pY(dnU?rt zP!rhN5yrj|f%d7-b7&uL*>-CWhRx@k0RO7G>v1#U^&zaEX{~XDdqolqL!ZXp;){vtmi}Bd-bJMKUf=YP_n1?g!~)oFln@kDC2bb8R#U@WaKcv1nOGF=SiCvT?LL)O%r-S-A{xmzJ2At`QZqf z#SeHv?N~9>Qgk7gmTI};L!df2ZG_MlJQ3B2@N?oW=c9H7_vy zlonRQHuTyTZlqqN_xSt-?;2n0W|KY3{xN7URgbN%Oo57T_3_gEXmu0`?)|0(RO1Ea zHm2t-zd>G=)513JW+bH8sP5Bs^F^g6!?nh=$71AbOmd|mChx6Taqxp~eVr)4>qw%w z$o_ps+JQPEdxm;iefk#B1^$+YBO$LM@x?FkncN5I)>f&kD7s<}jIImKVKuP@Dh@xj zgPWkmahNLbbLj1ZwfmuBqtAo;4&i=lgnDh$i7M(CJ_Uxw@Vj}(S`+hsjPzKYcsu;? zo1ie3uX-)oAA0QNCj8N5dls=$R;jd-UYN7o=u9KST4!^)j*K@Zem`%4hM?f^!V7zv ztk|ZINr?W;hvg*v554>?-k*L6w>etvfSywt%1$3v7YtP=6lRx?(@V%MQ2b<0`y}vG z9{JmSa_o_-iV9-q<_42;@E$tSCG(k9o6yRK@l%qy_dVXs&dsz@PCf*lP@|aWNl|kNs%?kJDq@wi~9LvzT>X<-x&2Lw|C< z+LUa>-1>0aYc~8$^0$rmV#yg-EmchxMVqf@PZw*;Eu5n(rT%WU9W?wTS?z0Pq-A}xl`OHLQ z=plMbQz>|o{Jy&HbtcR;XLa8m&BK?H9Hoej9i<&a^CKJmP zsAGOhrlQ?^gH;JvJiCr5k>Jy|D9Q|VJBxB4IC_r@7!{2som z)bK!lrLMvrMaSp;DNjXj=<^{-T=s8^F`Ik;+UX75@aq?bUv+-xGik6P8zVko7bA#{ z9e(O{y_XLgzuvS7H}?icAcR-0pR#&kgk>=k+ipLNfkCbx69u2d{062Xbj@2Bzuvm# zViOx45&-1>`?kGKUG}&X9|wN4mqV_fxEdv8_%+iyA=~Hl>+g2Kf$*aOs{hkJUu{LU z17SqUiH&o>Tj2l;wYSY4KT0#1;+P=JiQw-(&nm~K#4(Ze8=0cUhR$T!1l5?AJ%bYWpQgU5@vy!MVX2^?ILrwK1WU z#k2Qfhh07WJK5aTy5>MNP|oSsNkv~8JRGvL9jlDt&Pm?T$A2hqM)6>e6Q|rVv`uBd zR?|=~AxtAE_OfyP*Th%PgtyxE*2Y8z_*Fu=2fpD;DB=3SW@Pm-oFw0(J!T%dk5-%0 ztyZuD{c>9n`(<(KirW#DEm3ag>ri zr(_qp9QK<}@3!i1l#@UKCBei4fIhp_U9R!}3@vzT#y>3z<+fgjO=B(WIBr9bmB`iizAfA{ zpHQ6DIu!~iUVjQGswc-sYlkl`DApmepvRxe5oRoJIhoUJ)sNxQte<^L%yRv^PAc~+ zR8ZOqOM-Ez34EPf?hwfRi7&iBiQ`cb{P-oD%~$_28(}=@iRY4Y&gpQPMg(fTi+ng^ zf10CIHB~2sd2;&mmzTI29#^kjcxsvM^;Mk9DC&mo0PBsUJ1#GtkAdb^9rjiSI?srT zn}kV1+V3e`piUytFKJPf@3Dw^hahXN(=IPBzs?>^R<&;+fLBQLaWW z`w348YdMFDw2cELClyY#C??SimBN2`>k$8bgE9pDkGGL`Y3=J(ayg|7oN}roy&&D2 zPrlWo&<<+(17PrO`xO?(C{NQ3!g(2Y+d%ysnjD`oKuP7^mn{~MUwr4y`-g3t%Qjka zN{RoM!G#j7Q-<~{X!2CeDg57wE~MNilcP~n^nx}wRR*sj!9~OuW@|FJYe8v0#N_ze z!rz2*Y)F%_sd1F4IFf{nlK6;qlYgg4ehCuAjDmbu^GR^*yrIS6RUODOD5Goy>=ZGk*+n6fQt`Wc|Sl zqorAylk@Iz1xbf1@8!kx)`hglY%<1{-|Ut2PI%wpJhoMRk?(dNivVpc9OAz|F7{Uc zNzMK*UtP>5=E=p^231@q7t9^x$MIP9@He(bu;#j|lYCD0eeHd}s_|zbo%4PZ^ z&Y$te8z!O?A9Cahk8?gp>afx0;J+`8rv1__6$EYBWW$odevfXLPvRLYI7`m%bc(_2 zs$7Tue_}hb%L_fJdZwmM-LccSRAf6)AH3sqDVBEg8!4^HKGa2ep7{IWID9=A`7NPY`sOZ84mE;mi0{ zrId}W4UG{z24Qy1%u1Zdm-BruW-eLu&G4}54OmYZFz%fz=0UdF zf5ZoDizoGCDW~T8bGJ(ahGi~n??uZruTg8>{4i5RX3(Eu$-L;*nZTxA{=8&9HV`#I zKX#q@-?scTb&OQ=ZC=9u_6lWtg~hB{9zkhDdoI)rwFm!Slu?)eAMfk`7B|^BT=lByf4aL<;FEibwfXfnEG3{M`LZmD!+r~sH zc2g;(Ka$OsG>D~=>&FW63tejo_fT2YYUPAKDT3mlEYW=@?Bh9>MfMyV6%reA)^FR1 zAao628dF7)et%V4fxIK!!kW*qVSESVhxAc6Yz%UI7POx@wbx_G1M9AfNtH7JYhNV+ zk0s}pw`mp=gQ1>d77O!!rDeRw%Tl}$HQ8X3Ht_<@tm;;<2b*U7sDtxc(ArP09s910 z8mvw^m5en{RlPm9rTi`643Y2&87Hs)cW2z#?j+k!JTiLPhVc({)KMiu5Gh@yWS`>q z_QtPU7=^=+9AYfDPzg8m)lt_NcyQ{1Y0QgNi%77M!MEJkPWl1(#PavB$=QveAJ(ue z$0qUa*s(=l#$jSWzFxq+)A=hT@tHb0HvO`qxx0`g!RW<>ujM5Re^3_rl80cBe*yyfGf>eeHHD5*Ig$E*E_Y|OR6en;=`~{YnVKayldf{Lr8z=`4+mJ_$ zf%ar?zJ8^oLdFLa3BBM^&UCJxUt2#Y>3yrZH&WNpadc*x4pf#ut+r-6t)P@1ecEhB z*k{+?ut;pUR>5UZU8GKv(oD0<;4(VYes2=YCB2fAcOmU%d|kxL4U1!@Zbo_ zRP5i<-j2kCO*RJv=)md|14wvEK9g~qMD|QCD1+QfDr!rbH7=SvdH@LeR$3p%)5w`d z-hc@1f!>b(#@XL{KWZMd_EmiXaQ!K_jc;;>=rpyk&zBby7iJe%;B?w*^vc~}lgR4V z&!$uwl@4H_@l)atJRm=_0%hwi=e1b$Ivi3dk-iq-9C%>`S{Q6;yusbeMcCX z0u3;A(nN{NBXH)xFQA6>0w?oq<}nU@X6Es_dVP}SmLAxf}L|ubAcrKY8m&> zNs_Ss2tryZEb(BKgKM$Mrh9omdXNkK2;yYypKu>N4;}kuPJE9G3$px2kAoUO%zF0v zMJUkNPBk_DME$6pAryc^YSGfw1_tq-#Yvvi+RR!Bi1&>(;MZKT-Z>NhUvt5?ThK>P z;8I7#N6{jaHrHb>84FaUtHgi&VPEC5DE4Uc$0kVCxZo4mci;czS>R!%BpZCmqL+RP zn)kxxEg;Ttls-9h8^mC45=Z#KS<0{3Jwc*JDe1O3t>{B=43&31!3)UQ0eyYt6n#5z zo`86>U8s)bu9vZKhWAQw%~m@DY@8JX6n%-g(H-5Oady->ioat6jD=k?!bei9g`MXD zuL!SvuVO(y1y6vJ;B61&@s|z4Mt_bfQq;3oNYd$8c^70Lv&td!pdwdask*IDG;6Hj z*Q|8O`{Tozn#qSn#?w@$zUB|s$8Gr{p52GqLOK2I+10wyu`0Gj7oX4ZyhTTzS}U4a z$Pf?G2OJJGfL?T$HskT0`X}m7&DFMp`LoIpqwvF7QjR13_(?NWcC0^^J*OyC}O;Q0^zl4%mLKR(5C*sTCL8#-hEI^@Q`<;d^CWn>UamHA{jrc?;dFH zM`c!xUQZ`Um`uX)VvrtNub#-j=_$Kkcu!n>($w72X8p27o}AysAO@F4s1%fx?{ z{QuW4j&dk+!@@ent8z_F_kZaJ`TsBe|Gk&*f6r&WFOwbhwt!{k#w{%Pr=qBFtwi1| G`2PULbyM2_ literal 0 HcmV?d00001