From 0c20b5c8013f93147c221f7c035f465c7825d10b Mon Sep 17 00:00:00 2001 From: Thomas A Caswell Date: Thu, 15 Nov 2012 17:03:38 -0600 Subject: [PATCH 1/5] changed how `draw` handles alpha in `markerfacecolor` so that the set value respected. --- lib/matplotlib/lines.py | 20 +++++++++++++++----- 1 file changed, 15 insertions(+), 5 deletions(-) diff --git a/lib/matplotlib/lines.py b/lib/matplotlib/lines.py index 631885594a91..f2f54ee71cf5 100644 --- a/lib/matplotlib/lines.py +++ b/lib/matplotlib/lines.py @@ -531,12 +531,12 @@ def draw(self, renderer): if self._marker: gc = renderer.new_gc() self._set_gc_clip(gc) - rgbFace = self._get_rgb_face() - rgbFaceAlt = self._get_rgb_face(alt=True) + rgbaFace = self._get_rgba_face() + rgbaFaceAlt = self._get_rgba_face(alt=True) edgecolor = self.get_markeredgecolor() if is_string_like(edgecolor) and edgecolor.lower() == 'none': gc.set_linewidth(0) - gc.set_foreground(rgbFace) + gc.set_foreground(rgbaFace) else: gc.set_foreground(edgecolor) gc.set_linewidth(self._markeredgewidth) @@ -574,16 +574,18 @@ def draw(self, renderer): marker_trans = marker_trans.scale(w) else: gc.set_linewidth(0) + gc.set_alpha(rgbaFace[3]) renderer.draw_markers( gc, marker_path, marker_trans, subsampled, affine.frozen(), - rgbFace) + rgbaFace) alt_marker_path = marker.get_alt_path() if alt_marker_path: + gc.set_alpha(rgbaFaceAlt[3]) alt_marker_trans = marker.get_alt_transform() alt_marker_trans = alt_marker_trans.scale(w) renderer.draw_markers( gc, alt_marker_path, alt_marker_trans, subsampled, - affine.frozen(), rgbFaceAlt) + affine.frozen(), rgbaFaceAlt) gc.restore() @@ -961,6 +963,14 @@ def _get_rgb_face(self, alt=False): rgbFace = colorConverter.to_rgb(facecolor) return rgbFace + def _get_rgba_face(self, alt=False): + facecolor = self._get_markerfacecolor(alt=alt) + if is_string_like(facecolor) and facecolor.lower()=='none': + rgbaFace = None + else: + rgbaFace = colorConverter.to_rgba(facecolor) + return rgbaFace + # some aliases.... def set_aa(self, val): 'alias for set_antialiased' From 639034dfcaafd433fb0d815d7c77dbe8163aebee Mon Sep 17 00:00:00 2001 From: Thomas A Caswell Date: Thu, 15 Nov 2012 17:55:49 -0600 Subject: [PATCH 2/5] added guards to deal with 'none' case properly --- lib/matplotlib/lines.py | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/lib/matplotlib/lines.py b/lib/matplotlib/lines.py index f2f54ee71cf5..377f8a4ed084 100644 --- a/lib/matplotlib/lines.py +++ b/lib/matplotlib/lines.py @@ -574,13 +574,15 @@ def draw(self, renderer): marker_trans = marker_trans.scale(w) else: gc.set_linewidth(0) - gc.set_alpha(rgbaFace[3]) + if rgbaFace is not None: + gc.set_alpha(rgbaFace[3]) renderer.draw_markers( gc, marker_path, marker_trans, subsampled, affine.frozen(), rgbaFace) alt_marker_path = marker.get_alt_path() if alt_marker_path: - gc.set_alpha(rgbaFaceAlt[3]) + if rgbaFaceAlt is not None: + gc.set_alpha(rgbaFaceAlt[3]) alt_marker_trans = marker.get_alt_transform() alt_marker_trans = alt_marker_trans.scale(w) renderer.draw_markers( From 50f2ca62aa6bb02e842de845ba47df7ea84b5605 Mon Sep 17 00:00:00 2001 From: Thomas A Caswell Date: Sat, 17 Nov 2012 14:04:39 -0600 Subject: [PATCH 3/5] added test for translucent markers --- .../test_axes/translucent_markers.pdf | Bin 0 -> 2238 bytes .../test_axes/translucent_markers.png | Bin 0 -> 43012 bytes .../test_axes/translucent_markers.svg | 289 ++++++++++++++++++ lib/matplotlib/tests/test_axes.py | 14 + 4 files changed, 303 insertions(+) create mode 100644 lib/matplotlib/tests/baseline_images/test_axes/translucent_markers.pdf create mode 100644 lib/matplotlib/tests/baseline_images/test_axes/translucent_markers.png create mode 100644 lib/matplotlib/tests/baseline_images/test_axes/translucent_markers.svg diff --git a/lib/matplotlib/tests/baseline_images/test_axes/translucent_markers.pdf b/lib/matplotlib/tests/baseline_images/test_axes/translucent_markers.pdf new file mode 100644 index 0000000000000000000000000000000000000000..1aab041a7d2e463827ae675acf5db36339701b79 GIT binary patch literal 2238 zcmZuzdpuNm6tAX~`N$%)kG6h#Q8M@5nS19BX-YH*86%I9+H2-w#9WO#me6K<$o8r2 zv3gLky+l%ND)inGWtEiP?~lr-Rxgz;#s2P$N$CD_?>WD7&hI?G=Z=zl$eb_%&L35D z8|*IUV*mwAL=4~66(G}-<7t4nQ!EwBL;*xjMbQaB2n7^CD&^A}6(=b9LLt;YB8FD7 zfYi%C1(v0?8bEL)ACYSrWgyLhFlfp{2F=q+EI_>DpxMbCZ}*P3HwXvFlqA+Okfm4} z;06PM(UeN9i2`DSc^RW&fk^+|=?;cMhA{w7Eu)JETqy2=0P&y`)k<372`_`xbS3zGy8SuBjygH|#ssOd{*V&5b8XcZTJMc-y7%hSKFeU_2vOP6{48YmPg9<>m0wSo4V&hJrTX2-~lT8XnE_9 zq{vo=?^^QmHf}n$#wm-PVt&PQVPs6U?n2f19R-tB?e|JMJL`^n-v#1T%W?#bH3PEyuH9A`{h-e_vsHc#RUnr!bLoU{n=&fG4h6@}bL!)JQ?1g~OU?S-JNl>1sas`x(Un0t!Gpp!o&6(pWXz1( zwU5vJes|*Huww1S^wVbQxGnn!40+pj>dN*RMc2dDxP{x#jvrDG^XmcMka273QplJk zgJX^*hceZwVn=eLj~`kZQopr5{lS>59eZY4KJRO1%9vaUwtjIt?tDOqdhqtkmUDJL z5RwDmh2Vrm>ZPeStacVGe5jjul~+-D)=ECN*|p4;IBJr2bL;x8j!Ba8nFmW#-p_0O z??Y(du%X4|2WQ(iLC-{|-ZdxI^hPSZ^3q10{3TH~pnrrHPj{Y|oXK-qnv#~6f!F4{ z)~=V-HcFDr`p@^`rJd)cW%Bl{X#~6p+ta0w(vP1>Kfc2E+DCj}i|Nxx+4&}~ZSP%f zCNEr`J9NCovFlGWov-;{IhcH3)B59gvuYQaH|#%dSNS+I^?A$tf0wm5zMeI4^|i<8 zN1J}0kMc*GH8_4_p{rv-I_9x+NIB3k4yhYvKoK{93JBwncj6PG zr1S?6IXd+@)azlCgRUM-4la#1`Jn*o4zYTMQQ)h15vYq`^SF62-2x4NQe|@Xm-pO#ZS`Gk$hN6 zoR5BffS4de1c(Hmc^GU5?g1Jj4-<>wBI(8xN?L3e e^xHI0J)ee2H1r&$W%X%=9qY^=HEN2#jQ>BppdCs8 literal 0 HcmV?d00001 diff --git a/lib/matplotlib/tests/baseline_images/test_axes/translucent_markers.png b/lib/matplotlib/tests/baseline_images/test_axes/translucent_markers.png new file mode 100644 index 0000000000000000000000000000000000000000..bd5086ae3484bb79ac63db15bc08cb208aeeb663 GIT binary patch literal 43012 zcmeFZi9gis7e74qLCn}?8-qxsC_5vAEQwNzItMr{G72mkUUFv)&7IjQR(t8@QLW^ExKV_V7B= zEv7e99sMn_qCXC1|M#z4+*BQZe?Ur_8V~(kqO6$(E&T6iip$~1qkrnLuxAtg@53D; z7ycVEMkn&@-)}P|{NDkA@%~S@VbP5p`f^S4QtNi9vZg4<-sHK5R$h{!endG9ot&EL8o1k^_lKT)rqt)DH^7R zP5BL~*Bu`0U7CLKB|t?`I$}wcayR!k=fvb>|IqMqU`6l(efW0GWDn+L?n+?AK3HeI zcNp_pVB@pX(xtEd6n$EA_%&=!-nez^gV)1z)?w`d6~EUTE%vt_5jH-FRa>2&is%)* zcj!5_@k@EMd#fxwCV!z zq`fnqYKr@6Zm08dGN~!7akwLO#Ny!n-4DzDOcMhR@e{3!!IsnpoeZ$oPcBQlB@K_- zYTbS7o*|YtQ}xBefswbd^>eTt2n1%ia3nV$`9au0|Gx(pJ8zpXe)e;?L5I@|MvJ}Q z(8q&IUUZ2T&YVc;YkAiHVwuGLYP74;fI_UisFymE28V_qz>zf)^P+oE;!lkuw$fnY z2()PzA)Ov=Jaczu^U!EJlpQ_%ZTV%cOelxNJ@U_6(zdklNiHy{ecELz_*rFmfgFZJ zf(QSu%B3T|+sLHDs${da?D9lhtq*&3$``A0>(W!D?+p*&%(NNg}w$SYg{>vA4^Ob_FM8P9_{>I z?^iD(mNIjW5&J$zT@`maxq32VoB&*TSb`eQhEl%XrF?Kf9_gTp;jTr6vh}f`gAa0i zk$1LwSk(4DUkm!ylQidkH74xUI@w>TXN;s1X&BU{yTb)0y17eR$waxW9Bp6zRjFQ> z6g%_DDPq~b(IR;JvRao4KvYDL8zBi2ki?Z3UOY9w9sII zxyx#-#JXTy_|R`( z%iC&}_C+#i)+SGKGEj2>F=O*Sbv7+H(q~Qf{1{ul) zH7w|W9>RH6bRLBme^Kv4;A84|cz@Y>$FsQ+Jr;tZ7uI>)cpzHdLzN;*5n=XF+v!1%h|6oyw#WoL?0i%H$(F z(+PJB#oVUK&#%-{!M0-3ctcc-6(c4hcDN<*_s5Y`CRNanA4i#7g`+W%$xHUZVS>gd zi`R&W&l73E#=MpYcF6qSzr%FHiSfWxb{UX2f??D!q$ajh256XIg~ax>ec&5~$Ei%_ zJd`$vOH^ioA0p>F1yClo@O}=kc6N=YJ+u1I;)j!91-BIhDc?=9H_<0_`o^nV;!++T zMH@B>F&4S)ArLLG47|itm6{Ya9yD7N63|89)SZ13oun0eSg$nZw)Vt=9o26TPjrXb+S&D*D=Nx9 z3Xw|H!LODWIQj@ep9=$@Gsys-b4}eu$DqZ&)f3~s^1n1*_&mTweo$Tqf3Oy0Eh#|l z6Xr-`d#uUnI9ug4uHIP{b>Pn-I+53(of4vWc(aqyNg`t3>%UP4E$s&jwE9q;qw{tV z+yt9&@>dneFSm0SAuSfF(T~nS*XIm%*H$5JwyIjchad(I_Hw2hB;Xp*c9G#7zCN`k z73Ql(*MM=8wDiUxcQ+%*)(s45I2Pxy33HnhXmUN-P>p`mp@`j~lGUm$3d!YX{-%Ih%mpC;x=pNFdHv(0H{`n+3 z%_>5A{9TRS{AfcO)LoSdii%0BxG!Ej8i(YRyMkjke7bs#>~pZS95+-YzRm!V0!J-y6(P>+By|T7dBFuP0In4b>6LjS$VXQ$8tuZ@B z>}gI!&zKVc7$d7c{J%wPFXYKrS_rUJs?Iw~T*LK|)ZTXlyCShTicB@L2qzrV$usB+4Hy&-h<7u%d?>oWFDNlg{Q~`X=xS=NnaCAuDE6kC6-0Y+DkaGM0kH7yCLqeE`BU+ zwN~PN?$S!T8wZucjb__3@)%OX(JH-hdcJIOpEeeFTK7+27J|EUJ7S3*;_YC*SmM_9 zMs4qeXNyp=0yvQBodi3lC`3Ui6#Pyxp;9HW4LJlmPp^4q%g)BY)1&%6He?V5m&I+m zbhp5#nI^n{g_JjFgF~q}Mn(^_pn>gl7PR;X#L^}EfH1)X*p8}EY1(YV0*HF4mm6YJ ze)tYq0ql9&4gsN`H&49I->IKz5C--vkjClR!^sPI)qlp4O>PGZmD)8vTvjk-f}-Ix zDS^@_V-%9`#;Nt|N_!!cFHHrZ>72oII(kS9tnCw@O>g@_X69R=&><*T-%67K=|ySz zU8~a3d?02s78OE!tE5Av3NK<`MxV0n)G-28X!n#E%i6IZxdQtYlCsf8w)?tci~pMqtV0X zKqf9?f)3ZCTi4vZcqgRJTvFhQn-W?avy}oLS6>#v#21yOP0Ni;^*OYbtgN(u=ckfu zA5R8JKw^?y0e=>g%}DP3B2!A$rAx(zj@BPNis(^Alcd^2dBsX?zc023vkkDNK{GrO zrD_VcL|twy=~OS@rR$%TOiWYsnjL?c)1js4g+$SrKhpO;?(Vfnjga+0e!fqDDnI^Ms*rnu>sc+N+@N7Es1;$=OC3V$EXx}|1Q{=JOh zX(Aj+-zIc4Ef;F<#mj%v2b>%(;kw+1kar3`9Z%+AusSW(Q?6f9c(lWl^Nj{NO+wDN z8@UinWRc>B4$icfkbVn%O3d8^d1v$A%eceOl4`3Bo#f}MV8$Xo?0|(|ULW&`#a|)m zWalumG60r~Dp_a2N3T*~kze0k&iXJBg45F%uj$fl_?}EmUYXBG;34<^!Awb+2ZDHG z;%2I;2X>wAn^9AjaQ6xB`PH6BKX3d2_sP9#=1eFDlSU-C*+~HGOTT+R|JvkR*JFzp zrzJ5YB@U~3(Wl?zk-;fytHEt8VHQe3J{yA^==@u%N9%ffNxSz(li!pC-_fqlLE-VN zQrknDs|-Hi1UYaw_gYWC8+1H=k{0a>vZkR&T#82#KX#wu!_OiufJwa7R|gWp(~`6y z-~#3LVSJyuRr4?(PcFRqUEBf%$F1#Ll%cc)3^LV=BamfAAwGxpiW#OuKWeaX#2t&s zflJCyisw5Q*W1%z#J~_~GFz^bEALi8x+orBc9j;?unmRIskK6=zDp(OtA{&kdBEGvy!7=#(4xh zm{F+_4xz&VaVgY=r?4tH1ak#N^5qgTxfhie_KheD?kj0(Am?bXr2h@(GG3-wbdfeT zf0zr}5wMAK60wPlRyMGIv+eVJ%UR8`!?bySSP*40j1Kf2cIF`cc-9VF0;$YEhxcbpf6m?yI zJ99%@QAm>21aFj9`C}0fmp-e3CoJokxA2TmFcc|*dSGbai`ke$PRczGeoJXtqlVmOY z^}6TaEW()P_9?w}yQl-IosXgvC4nE|XPdM2wc*SOAjO#K{=Y$-Bn{G*9aW5|lL<(( z@x+rjJ#D?}H=!n$^q57ZU8kxz20oURosw4z<%fTK3O>m;2(onyU5va=Dim=Nz*vuV z=kHEmIv@ASGI&8NK7m+CMsvjx^?M0U{8&RM01nHP>APl9hznVsdk_0jR95fAS*M%g zHgZ*B2sVmaf!gplBGe?TDGOShQg`P-ZQ_g9yuP;S-^lOLPPk4BLd2KxD54US7u_EH zBz>mG>D8=Sy>Josx8^AWRfxt%zV*Eg-Im-~4J-LvqD4c}vMw3%AgtRDhfW z7(FIrd0b_BRh)+(Q*Pv8*+t6@^Cm_^>|n?Y*gSc?fbkqO+c`Psb8k35$=OODb( z1sBRh2%Nz4H#BI$!Oq>0(T{O$`g}*0x}+*u4XS|~duHso*N#Fdama__)THOYlK+)z z78K(5`;b|ZM7jcjcZlFAXQeLT;nGGw_AFR6^|=3T%iqN99Dwh;CFdca{O~TVUQ87W z+6K0frIE70BXd)HwpDjdtB@HBOagGBt$WkQHOmx)Br~{JR4?Jo@uY^_uz2r&wFFGwo7F2yL(lGWhy;9{aQ*P&f~S%nU%4N=N1U zoEz+yY(BzekH7u=TV==FLu~qE;eBGh>Ux`NZ(P%N;|EFeT2E*;Gt8JZp5*j|n5CGu zk!ENCFsjKEcKV?_3bW2H_jYp|^lV|B-A<0)wsbsWT$u!Rl$SOHN}~a{nN!q9GbO?b zZs?$$rf&WlB2-#jwvc9E&#G5#bRh#d&$VqJ!SKCPe8uU?Qo%#>d79d z7rGd;duazJ!Kwb@j3El+5_3i*YJ)l3N(}4+L-=-2#ti=q@b?SPMWTm|#PbKk_9lZ4 zCTB|NFr?ReW)F_e#*|i%$gLLL&&0I#@S^A7EXTP ztqIqULj3YRoe#KT^xKn5y&65uhnt9#_l14|uA#v@;~qFF`y1MkpISyzrz28^xW2%q&l?NAC9V0D(fG_)yR*0X+9(lnI^Aq9o|(`;0sePdD%19+Ln*zVUY?6Mc+){R?=@4&2%TCg zL_@f;rE)=VZ*OScv95$3UcrcZ^9S?rb&sb(JJoEx3|p#W-e54tg|Zplb5OBOn&@Ao zboJ0bvegD&yV<&RmjQh;EcMJfPGl9Eso)W$oRn?dHJ z#d>rRJP6dWL;?P=_wq27n++c$8^dHHkF4ePZ>|8!y_&vgnqOG#8%LTi#bWAUcTYg# z9DXbc;p#tAc^q2#JXrY^U$#^pXysuy7Qo7>;1$rfQjIk!n=qw!;-J<_Y~1hrF#oQ~c!ba;zj zW5D74M&21oEi%-Z16!&*&4k)wDt1po{oJG2+3@ULn+5+`c=hw5Iulwm_pw@SWz-Ul z_=F~fI3&_#hSU511-1D=1?Yz#yVCa2DzKuD#+!enh`B%cT}equVU<<0NUd!>Ru5+J0)sZ*{o>+p|rHva^;1->vX6)0<4pYo?T#sa^Lal-b!o! zKOHkCu>(+{msoZi*XJncFCcAX?8pVk8&GSpq5BP@Qo<$=Pv6e?eVz>+nBlZF?WN#5 z6hK}@ghvvr?;|2orLoZ-V=};+g}~8AFX`L+^GFr zcoERf+wSi9&@psKF{8FDPUkb}>K$dKrXk3(-{Xj+wB6(thp+QGYBaM$-3i~4GcOb+ zu}rm8+^bXLB@heewNk^jkBE~l^27^p+z-Em%DfRvyCkLpTc-=mj*#MljvR>&J;jeQ zc>wQ+;+uonQQitci?LvwOv1{?yF?-tM@D>3-K75VQ?0nPYyp$+^U|cQvV~RgUw6U# z#KHxw2Kw2bKLc<9ejI)=o;D3&ru3m30>>@BhyVVRJD*^;FLE&aK=gKP;JMl5z4gvd zxqm#K@3HXvtCl7>!z5aNoPg?qhiBV*zbV)1EOgp&r@4=A`{+nQNcKexgJ6U`!!r>w z6>P@Jt~V|m)hn`IRU~f~+T7lfIxf1Aegd;kclp)$GimaiF-@qMf$=p^6H!}a;9u4=RGBJXB;Jk&hLWELPSocP)b^hx5^ip zhZ!A1wJkA$joIDe3-wDmouEZgyXUJS2>K(3>eC@Bprvs5CsXac7~p17VT&aZd)~f> zf_I(np5H!Oy5*~$AY`jmm%qy-<^AFDHl=%+9z`e%-Kc-6qxv)e{of*l@ccMTgHb!Uwu`~ zrYW!>m66-Q3pB5$mo07_e0)Ce(h-D-8k5_nV(4HzDuP+d{?ufun?a3YFC7D@_EX$P z%U@UAn~q@~Njh}hq;m4ZNvq@}cZ*Sz?q|+A{>ZYf|M3rr%9{RWr;mCZTsim~GUv-! zo0cdC`T4=TDLpnG3Sh@TqBSu^ruIs_FxA$}p%ATMsGSg{p%wd6^O!VYZJ}+({7tK5 zn(CHhyIghmca&Ui;JB5FA|yUGVfiWd#g%B0A@}msu_Ig0~QF_K%x*M`7vJO#bi%}AC!gKN-q88zDJbXq@uJi58dY6d0cay9wTPOX3}-H zyD*Xn=AS|N!B!dMH1)igo0G!C< zfN$f*gZfvEpUp%ZLpl$a&3^qT1}eP%t`$I~AXjel)HAAwzk29d-PD_?^*_uS;TO$0 zF-{KWKe^eH`yRA!+tC12)a}B7Ayu-O{ClFo6B`TIeZZj@^l{PTh1Y{X@n6PE|8B;cG>T_v>&a%$YKdRG6St@$>{LI~%Q&A`4l*y`{XHyDuZBJ5 z$MAjI$Nr}Uc=y!e&-kE0Fs@Ao0-8gg`6B#&$qB_N=Kx&x{C`W22ZZ;HSuOhRymz-| zNvXgNAEi>MK62zW2s;&gY+Gjg@$Yf6y#z*#?pcAnmzSsWorndb0}Up!-ND^`Z^xd@ zYspD|sRTG;DH%R7A-rBM1Y{Fd9mvDX0coho7uv?x# z;+@1f@>GOLC7ciWSfqI(0Uz%LYR=IMKa&&{G^&3UmN9lDuPq{&2tBokV&q+)8# zfw7G$KM^C#c4JJ`fCgL)6E*BU4^7>CLl1|jNSE}yC?BeA*1zts-U&BF zTkajgcWQxg>?8p6nx<_8PCQZrvnYGnc#_Eg`FwPgyu!?5;;|-d^`Dy$05`u93;~`2 z%|0yx>s(nnb~{-$QR3nPay~>z#?ynhOdw0_DJbX@dl_JAL$_x)(mQ&SE|zSfL08XT zrS93!uKB!AYxALHt;to{M$Vh)U%tM>+dH$O-vWKv=3$SoG7SV=OZroD6z(qK(}7<; zIEo9L3B=Ns`Jt9D%7R2r8{+9@e+RW&yjbhO&WxV{uWd$ef1N!)9t$jX3?&pPnZMa} z@F$4zW0~Cu*FA(QQyW|U=077Rx1Ucs&pSfh-?(Xy9mmdQkpRh^(30)=zKHx)s;u4I`dlMj~M=4@-1690vng==559)O3MwDaR$`v zao8gn+wyL&t4EASCin95}=Ih_&hn5R|2FZmLjylwxqnWC6A9{6gpWwDE)iR}_dg=(INv7ml@X zn4HCWwDk^jCs^&&_?>IU60Xcny4J&nG`|)Bj*oM*s(Er`M(c2!j7C5_Y=K_Mk@)1MMzlr9GLGqK) zI_eAxpmK>O`tAWpzgl+c@AU!HvoQB94)BE-KfWuI_*ev-LTtMq>gWC_8(3E$)S!w5 zjMLV|*mo3SR8I6M(Bq0ij&3LJAS69j%T)dwM;4-|$5(C;z!vohL@|z3U-;C*k^CsQR0O+H6mc7^+iqT5ig$tRX@z5&s?&+G!e?)soYU zrT<{gw0-T`H!rUq41M3&;re)0kiBP#0)*0=+0efLf*8>sO8{$)BM_y<#q!|C34dwz zEwEOADchhG7seuPp1l$7?8gy7-S%Y)zY?6$PT-6|9=446WOemM{(tQ;9^c0Qoz5Z; z;P-3AD48Jt0E#=>_8|wmX5V&c0)T)$^IC=cSj^B9%E`Yd8PEon`0K|}ayM+pY!$zK zF=9C5uL4biCq4_4?U%if^RhRi11r-)-W&`-QL_zO0tpi z*b~J*XJ~E`7Xxg?n7Ss)+y=RIJMSJ(ddI~)P24kHoZbs~0qAp*-~}`or%D`4+e))g z%f!msZ>iQb3UMFYR@N^(3j#D3b6=L{mi#@{aJ+|?*R2ZB$OKzj<9)fan3MuaYym$T z0Ae}N=opreU_(8pO0s`doJ5KszuJ;)P2+d?N0^r>Q_99n%A=lr+!p|hhm@c_f~w#% zBkCyH&ild$>3p^gHK!;<&Pee{+t!p@T`jlo9D{3he;XX3I|>z=eLyVpw0%SlP`6JE zoEs=t0Xda0x!VjXa<(Ma5D-FTu6+2*7jy|P-rqQrS*vV>mI|CqJqhq5#WXOMlQgcEBt@JIx1QK2g>rlE?$rY}gcFau<;LVq^Ue4&i$qOu z*_h`g5Ow*&4p#68R{`wzM1(7I+ploc-QB&%?|;#(oFUlE={y@}pc**DTV zhPMs?Ey6y(UEava48A>H(E^ZKqlu>n zI}6@CB7b|l#vitBh{`KuLrbrKj#5G+ILRaWGn4}-EuGemhXmC1{GJjIru!e z{LxOf1}F>o@ab^?7r+me7HeWRlJV+y#Z#^l08e8|8~Zg=COn-a1|5nID5~kJ&f@%S zcr-L3!dIO&i;{^17Z>sPJ% zqo;WR9%5wZ?ed#9ApVF>vdCJV*VQ)w-N{roIbiv$c4;P5(bD@li!ztj3Yw;D03l3W zq_Jz=wQX8edN66Lh`$aP`G@cd78El90hn3IhvMV0P-q4DXpx~qH-{&l>CP{~`f(qQ&ysMG8@z5j|?7$c-Vr zYJW?MI(^7farF$I_VSitZS!|{0Y8Lufg73Fa-@TF5|0I`1x7!)Ytow1Tis*bii$g# zHW>p3w%q&C~x6xy#&rfEP6+Cfr3<+xPI}$i?`d1T#EqmuAJ>-@PV^*S@?3 znoJGzAU_dBHb4GU+s8SI`e#x1KqP0B$q8U?cmXxWY0v9gwCPNn04LQXcJOsz_nHXnvBMsj6DoNfHP+||>&8SWN|Ow+fu zVKcc4!CwZiZ+0OeqDTI}8A z0`l;aJ3WN!x_JL;p{zi8jg-t=pKiCs7XqX``|c^_px|22Sb*b#V~_^dMZGM2+b>8t zNpJ$@O=p-u44mXVZv-`r0;5cvaeAE_22)MSfo!dHU*o{M2`9DL&~ulWup!O1_pB^t zpeF9+v$s>4Ew6!S@*P5_w6rg1%q#>)yQO%}%p1SHzp{7!1nW^z+%E?DDVgU%Dt-4m~knjIRh(*jqxspa0JM1NIVFDNaNSZ%leysf0j zn^x~K6PT+V%oPbp+GDk{Xsk+U!dJhga@w2iyRHM(UWy7}GPKw`v9j;*%sxRks)2W~JdT6k*+h()L zeYwq9XZjO}d2ZaPei6}tJKkCn;7TDD#v(aDmBASB@?%>^d$i-mIXJ5AX4H?Ocb9RR z?m?ra`FyWDFM^InY~xxD)J@M`j^A}X*G|}f{}<5mHs3V_ZF!X=kS0f-)8%AKEmaZ4 z=Yw+L2JprABi!pWAI2ss9j+9ygCo%@nq^0cWg4KCP$_RrzY zbSOs*RK@{xd$g{z5uj>I_&Xj4#MoYU26aa8wd2xLw^L6;=6U!ve%Ia^#CR!uU(hBO z%-h>*zUb-G#|hip@=*Ck1TpFFP;syVA8`s1+TaDC$^?f@JZHIZs@y%*{PV1h0%V`B z74v^?2OsIajw6ghgv>yzwa!F|mbdjK1OWh)JmOHxw&2UVZ>F;>wIi>;2HiR^P0htat9MWz_w*pwM!p&ul8K$f&>nlS;cB%>1$$$;piNI9I^9_h zvCW5y$>pL`Sm5d^sBnv&7oS0=FzQ4*WJfc4Y#~sIFu@-zeSe>)>$_3m7`+s+xCGke zKmwyv9Arle+7A$%KEJN+$$^30)R)XMJ5|Lj|84EiRmJFee?7#c0Iu9rE4KL0@IjZv zz;rsa^kUF~151zBhO*~)BJtxAh*%DQfrz^R9g&Dx(;0SD>T;-y0ESe)``VMzw&N%x z8T0iRQiO6PInC{kt@z(@HTz0^lcfG}0iwZwDnTL#i>AdEf^2jVk5@NO14aAah01+P&Es|89f9i4s4IQ zdBDa0Es6tWG8QT!gAofhwzIbDO~_8p0F1k^7(n4!{q>iRF2*>pj%X{WPSZi#ZIZsa z30XPfVJ3u1Wr53vm3{|Rv7>je5b5jB(CO{Xi!ZO8!jL}h8kykq_+ba7lii~s>TkUd zpL#;6T?|Nb`WL4zLY9AacmwPJMdupL(+E5++^ZBg@_=@qh0)yiUAnw4j+HX<|QD&I;v+rf^zUOy$SE{ag$cv&*>V-{}a(eBAQ2MrufozQd zG=_oZVCk>(yD$Tfges>}_>nb$=CTl!C8uc6r(wCuINq}9V2RT1;6y%QT3)rKU58CR z4pg@Q>8twg>xJ3=K-EoEWzZ1*P95apNOR~ACV1%SC@PCtT;hyOsqSGOEnB!c2DU(p z_T5C&U49QbsG!udgCb6R9IWCssCUK{UUA)nSo2ftXwc{>GzpsRVpQ|pTAWo*p}K!c zR9igWm^$d@45rutc5FV67uOdm^X-okyF*PY zgv1K~sey(SG`03*L(^K>x`UI{0g5!(6@WIxg!o zpH#Du5QC4Nr1i$n+2e^%?SYad|02y{naS7(zMPf$`y*!aT1;4|kHFM+e$KxOD@u7-$UnmsgQTCq&YZhM$bfA%G(&}1#*%yDZ$sbb;lw3p|P99K4h^0*j+ zMlzu^7lB}Ei9o8F#!uCe2)2Jtv+r0W!_pGj?v_i%+}`dpeNUk3?FLeb zXV!P|eeQ>(h1q+7{4TG1Ooe|u8}kl=2ulL1LQvjXNo`|TV@ zd`&@KQG4<8X3TbM9H}20T7w4R*+c*@-A&PshRcQ?dzw57r2T1vR2>e^lh3$gkjHPY zV?sDnP^vX9CiA(UZI=Vx2~gY+j%V9BaKd} z*Hj1Ke_=5x9Q@?{g&G`Uk+MJq1>c}CuDMmK)<^3$%V38n(bQ0fnJbmRp@uPmZ8qZxJ_4v>fLFOs?ycx737%#8B zIVIUD($CryXjAFYHx{6n1at-malePzk?ahBL1CXF0X@x47*z-Rt;uKq>h{TxvIyLc z5N;s!S>8`I`Jol6VjofBxSJQ@le^i)k7e`aK-Yrb-^4d z;%x+apHJI9jV3|IP68GXLOt!Ew24Lhn*y^hsI-86p z`Ne;$tFH(h(rHha^Y4h6LVU3(mT?Z=Jt;u>ItFrqIeKA9(zQ8+#n*M z(KAIz(31?Pq+6^x4=1pu~i$eZ=K~M)NcW>sg2}=hk2zP1Jt$8aj zymZV~<%tCv$D?-gIYq)HHy3hU=}3@^JM%8pZ4b{3*21Pc)jg*9K1-|8DnMzVl2qUZ zk4r$Ld7k|(=pZ5nv`7m`6BnG`Rj46fInwQEz#^V{|2A)T@8;b%$N#=eh$@l-yXWSl z>X7TNX)S&&Ab~_5#C_15nfC?f`X8h>Re7~FFdR}BWLq@;cCnEYs4PwXZu4d=Q5q;N zj!J@9a`eixZp9N~g+AQSXw+%;%y_?{5q;!?X-kX7w*eG!<=*Cry-`FRO zcD}5>SkyIhVq>2|{3%uW8(X^u*Z;eXU$XFi8b};34$83)ciTX-|0q+)?thWH2=yUj ziL>9Mkn_L8%DYXp>V0Noy1UXWoe9Az$J zWAKx=Mg-g|=&S|_!eYiyU_*f3u;mIUCl(J`$2Nj(3n1DLP#OT(b3*zY#?tQqoQwf% z@G!XMk8?hF?32VIFf-PccsLXGXd>HJK-$oFf$54WUVDy)_t-@CMH*%X#EWq0No1-# z#;~US+mbHQ1Qfa;GvwdNwwQ=VjMqR4)`+)nZw9+FBl19e&4Z3m@-#LcQaaF@n}V9> ztr#`_Dt=32zx6+;pf2aT5kS4@q<(ucig)>F?xOMW+>1ylas#^u@)7u(l46NTV+ij3R9W7E)a-z8;lQMnx$xV@?5e!Ox!+qd!sVwUcz4puH#BEc5~^RKyCG1bBTM z{wum(d7rlJmk|SMkrGBA!5@sy{#VX)=AHo!?uYOKK8%w!JhXM=_phkUf2gKD^IhW= z$f{1RHR`+VnO{yj>kKm&6)ywTLg6_qEox7eve0?3cG$`aEMqYR{36sF& zK;(FMo*K_(HWe4ji4oJlE;bwh7zdsO00Gu1J~Uv2PDOT$>iU!qcW{7ru)}L-UOb8; zmXAJLX|Pbg%bFV?Fg5DMU-nqYbSh4h9se0<+7JJP=Q{x|6gl5Zm~v5tp=&^sg9iJ2 z6Kx8F#0)@{*1`17f8Gleq$Qk2Zb>d@?0SG&A@VG+geKHeir4O&03bL;K+}EiuBYPD zd{LmC<(93Jd$=6GeDy>&ZJiGJ<^Zdo51@U!Itkl{q|J*zldCAJEQ-4wkFhII`Tu@((IEccib@gr@ z7-+{zV(x3?QlniZ=*8g$QlLi=wAE>gFqY?gY;x+3oCOF193V<)JuzoWIT?deVJ)3* z%KUz5UB^@h-vu}eF6b;1fJ5ClV%{As9ft!r&|-|3hmAJUR7$Tnxv9V#gKt4OY#1O8 zCV^L`@fY;I{mFIwF7k<)bEIrDB2$OEgqhF*y@W&whV+huTO6ZoO}1J0#AA)*4`@;sc<&(f+3#NPB4U7!jfH+ za;;mFjom$gp4aWD2Lzs}z`k`7e1DZT2Ckg}=MRiI5|MEX+eez!3V%;U&1M41ZeeI& zS%Jf5Oeykw+VDypsN|^;A^jsiQoB8=1b$b*-`@*R^WjPM35>;euy+*=j8n%9Rt;~x z9!Ty;;xE`lPgag>ENH?;fBzXX=K$K{!bC*DI()f7#w?@5#W<@iOv31Dg4u{EW3 zbR-e)%j{NxMXsaemA^>Lw1Rgx>5K-TmHQo0^ADNo)OV7jxB#_~^nSW1)SSy7dz zFMmd$1Hg+)MNmw1=28P_qqj9cizdaMi4IglXn;53*I+M7ZJ4wC)00w8z@$(Si5#-_ zH=_`Uwt&&@aG1srAHpr^7q|nvi~!yI!(sI4(i%Hj^@OIL5QWGt>hxCOsYq7}Lf7c> z^}i+Z=&_oU;Went&=s1K45rr;A^>6-7OjEv7i8FT zx%D>u9`AU#z)FM6h{FL@6rFBl`52%t&&LC@r*BgE`*#apP!Cc;PhWv1JF&C(`N(bg zr?(ZJS}5U^xUd*?)r4G0I+t57kho*5=_Q|KAoZum;YR+iU+ozC&2X#fi4Mlcb6Pob zGzN2sS_zUkT#_2qHhs-|9+F`M0)Y_QQF~)6?Agcr@Z-OV!Z|TpzdH$Qy|Tv_Qo`2# zoV^WBi(IfMPMw7sQNG*a;j;~)fCaG;lmd@YPKiPcD+qTlAX2I8r<%3<`OW&!^>)={ zj=K4f2>@gmu?i!jWu(O*nU+I>a< z0J5V@II&>5@b@&c=lMD#L@_)6q847heEF9|Ji9P7>llQxTxfMq0?!0%bp(X}nD>Ur zo`6_k}TN_(}h@Xk$QdgF*KUOY@oiMO37@qKJ1maMDI?rSF zohty8RHZ{N7LLRml@o3_N^*Bs@AUJQ(cVQE&>b4?q|zHp+J6BiHDsTTzJdGaBPw3)c*EN+0Jq1Ij8@ zq>C2nR04cxD9)c8O`lrwa~3pSLD!^AGNzTjJZ4M$N;v+9CT{UKc*8{t=eK%D3DR~K zxP87H@e%p$cGA~yREld7jR6bd#SM>3Tu8b8qey6p(-Visg)~<|)lgsf@oI;VhrpG< zGukt-x}fb_#jS2BB3)Yb6rUQ2fAmK~c$47c`c&T>H*NP7VYc)i`rYz47GZUCleyaL zsCsSOB1k79Z)i|*uVXYXY@$ae9z`z)j9zX&ZITIhbxV3`W%bXlF?e?-g{=hacnmUa zRP{7CHpjX(Wl<3QK}32B3qrOwmS z490sc!e-ZlK^S2^Ca&;KyfkUnakM5#2tzab@NvXi+`!?OFQKhmGj#NidlKNaxX)fl zq4(ivYgt}ydn3k^@3XH>mZepvZ@$m&$2^~VhUB@y02^!N z2q9+6yk(^dyN$Y{Vw&a6iWLRr)u*oD&v21&-NVrH9{a~1G0b9HQ_Nv%^s^j#Da7*> zc+=&MGx?Y9eC^PE-E%K8fiO1q4OJ!L{j!tiu|Jjdcn=|Qp$&#QLj`udU4roTpWzis z5Rlj^1I^tV2Mh0*5BCRy*4Jw9{@FFEO=#7)%j(_ylY71O@F2CO@;4Bhh{1y0XE0N_ zpPc0vt^?QRX=}7x2*}?If@8R;3`NI(m0krI-uO042`Bl%S$^bJqh;RRMfkd^uZSO1 zJOs9;80E3;{Y-`gh_X$d_xElC#rd>d+lI<-2I@B4(5YbF;{Hlh^hU`aiDTj}$F_dPl2! z%=g0H#?0o$G>%oZ8Y(ABKS7UxYr;= z#f%pdDQI1Db!yq->R!*L1*eY+H`)H-GOAu7w3)iL5IkG+Fn6BSI@tPAH=;!P>;n_* zCR~^QuifHfPlY-~cXv^tix3QuC-}_vkd)0VXd*iyn zen^TINI1M+p$7QHdkB5x9Rv5K$u)W-X{svym6K417gU0sjkIj+3~2M$tY9KBtl>_Q zFaS!oG9mez!-<~dOldXfxgiH?tD^SUGjnxB>#;TnOi>tq0I@lswxZ9xcw;vfn=;0g z1eMmu+lI&sN)uiS{b>@u7u}l<><*=-F<~lxI44tH>=w`ka6);;jf!$C(p;9ZC|~?a z-<=mj5`$jjcQ(?qIYbc&=^b|VK8C!z?`5dbFWlQ;jch{6BGLfLG znL@RXy!E(`1ESXZPlRafsI}dd76+X?9@M3o-`uxcT$raiz?<~5MVlY#$_wS!sm>;} z%m2({^{5fwNk0omE*?=JVwn2~IuS8A`ruPI;#ACu z$BrThycp;zW>NbTEzI`p_{LGjtia2zNgdmb;%V>(Hz$d*88L@Lt?I@$hBelV0Kw!p z_oOgKR^H3K?d|o-^PNNT^~6@Ovj*x`j$`L zz19&vE6ZLLpNnYHG4QJ-*g?^R)|^rHcoYkQ3sFi(q5Kbn>}a=qNgTqiOZOL;Jqy$l z9=fr!j#SZW2egrh-(lxpyzr5VT;b>6bdWygviHo>@rEeKJ9k{|(zrgoF%qXhzqiAy z_HG!1{s8k)I)b#ONS?^ajfEA1Ip^pi$0Tk%QI0H&yNyJ@F_=poxyPe+e44czB5V2v z`(^!qgvTQ0^H#yb6^QZl&;g}grBVjXY+4dMW@-ZHeDbShu^y<`o-$GZPlHlJ8Yly4 zXAT9$J~5-6hEDr#PNPH}m;6f`aWbcr0q^*uA~^5@st~2gK{p72c~U zi#)-jANM=lVd7}oK=3PJEWiUbfPfn&XMVyv2z<@WRL~}iuAAVC0~+JVvP~KZNV)Y- zbZN}!#bJ3^Sy|Zv)M0(IEDI3VmgwR@-yUvoja^vV`*3w3IodgY)4t8Z>^yivuN4~+ z^CK_W@khwNaYQxp+)R$|jIrSpfW+oITY#Ah2cTbCqQ~DB^Hk9nHb>c<2^Tn;+kzdR zmGkrx5CHtS5sCbC?dfwFJaMwd(~h135*nP`D(Y+k=xERU%@04$9~92$UR(L_M!Hug zHsX2E1e=7+;;sUODvDW6gk=I<1EN40 zU&m|sjFo1L>Bge#>y!8~%x&}fI{2>{A>3Jcphqzm!Tvu~y?H#8-Tyy6mYAfBklmOe zT12Qw8X0?8k}Q=aSxU)L*~e0*>_#NYR*{Ozma^}RQc1FueUR)%VeG%xHTV1TeLQ}D zz3=;en{!>~T<5&j=ks|Y8MZp#b-N@zA4D#Q?@jnlV?&jlAO7CCYonyChQ~-IlOv(? zNd)aW3$xzQ$Ga0UG;RPoPy*ZAPYYKs{r8cbyLcn*m46>?l<9z)S{vGv#hR`zhe{^S z;Z5wf;2a$S#j#hePd~8sc5IWlnz^v(?HiJ7G=u3(d5%{5hR`_ zfbIYuses={FJEC`qo5ho7y#vHm%_zeAlF>t^XTBLuiGq zEh**kKNRCs5Dp5{4qA_g-Um z9yG%_2h~E>+uM_Gq}GmGO-`c1296y z1B|%Ub1WQD>b0cZ-C3aF1dRmdE-DHkw zy551qYHK9=W40WkDx--2!U?xj7LolrJYyF`aEIbJJQRU?MCPjLz1=D&k3c-Ew@hC7 ztT6E$%CL|!K{o?x0r;#`cAR@EA;xU~{<}avWyP5TVrmx-u!LM%&2vg+Jqg5i6T>@z z^hkuP$yAy_$7SmAl|zf}Q%A|LJ_f1i^8f2k;YXUgisrL_4%f%hJH)Sxk>T5`eZ=5D3-&?gVrabClbF_tXW+e(etYTPe{#BFBrcP1{YVZkWA6tQlu*}SRq|8J2P!JfcN599>% zryz)00h0a^d=}4OPA7xhc|}s3kiT9Oi257DQFh_N9JkC4Sf?0cT1srfN@*+<#di=V z?ja1l*s-AudAla}YuAB_>-T)FSeH#fCFQ=Isw})37fxp|bKAv^zjGmHd|7L$ia$59 z&oGRhdyqu=JmrgzG26H9z7hS;;5@(WEXm=YNlnukqv=e>>Hw`CPn^#s=oN0g!XyF$ z?qe~PDmqu-le)$kdGAbUdx8IPe8ZhO89K!8{78*yA`;ndV2IP+9O&hIQc%1l?c&aK zPQplKP(bcoDz|Y0EZC_igg&%-`kSZgzinfy?=_qPPhYFJI9Il6GFtv+X={(un{8Ao zli&uGh)(gSNCcEHVzwUZeAomtuO6b}*8f_JAT5g7`ENIIJ4%rtza;q2GH1w#7#?>< zR3*aX4)i7ASRe>O&{U}(+Vz}ccGy;77ZSu8ZWvbQ>XFGw{5Xi#=dskfDvy5lXc+7G zv!l=F5_Q=$M3%{K_K*&Jpr*hru>@- zKAU^)Ka{u2^Et<&M}H)pk?J|-hSoLf9rb#5%<>@A*sX&!{|RTgpyATgyN{zGqaj7i zv8V}Y5B_xXfxp;FOz#qLzg2!a0n9r%#i2z$FbM#fMTG`lvfV3p^lQ38?CLfxeQ4Ej zMHbpsqPdN!`-HId15dS)WB01>>QI)>Z23Nwqk8W}q#0Iq7vqd?V2Z$r-batKS#f%x zx)<*L1(a2zPB`1e;JWr&t9cX5vmJ$gKq>feUUm7o!q873(Q2ium@?+ZSng-c#cJsb zBR#A&-b;Lh5k5+rLM-Ru$T-S7i6|bI9W|Ec53F7B7nyvtcJCN)^%%z_&A$r=vvQzHZ2jR5=v^$|P_bBUmGV`oNZ4hmw*wjYf>G@A=`fGs!6#R9W*QNs(z; z-_xu3Z^eBP1-22YZ2or&lim2y^V{}wTPxmrsq?fKQK4DhE#?!iewx(deW2QusNMRXTyF8$7gO*WbbgG8wQk0MSo}q9CK% zV@7g$)H`7iWP&h9yFrg5G@Gk5-~h`f&`< z{k`{DoFFTDshI~c^!y3Hyp8-cMTwlO?Xlh3_YT7SI*gKk{(b137jDqJ+dU6L6JTMR zpvTlHyM64~>FF)i=fC`Jkc4dxZGG28f2-}w{rca(2Mr~mKkmS_vN0y#98kZiNLcF; zTlD|rL&$z?MEd19CmCXPe)w6Z1B9!a+?aR{m_BtkEpr2k3mvsPKqdpXWxGGb*Wjt@ z=76DDYQuRDL2x2PX>WL)xIgnHSI+_k1G+7<0IllmC-L>U!68@>1mqud;lcPh?i^s7 z)36q-?wFOzEh;K1`-S0+m%!BwnuV^S3@88GbxL>$3RF+JZi1aLLRGU22BGo{jqK}} z{tm}-g3SVpsUCZ(f$9h#eTx8R4oj3Zy}}9(UWNO&V?aoO@NEk;KUivnkpA#aGO2f( zCW1j$D{gSUj>>H3AONVBhoPK%zzpeOKr5^X09B70Rs|jVD6TT)=j_bRr zpF5Fx+XvMfzWi#T1eo|E!N=>XJgT1a2fgU1qfd9eb(o{R99ow>q5lwqOm%qxP9TC- zM$f;crZo=y^Y>+^{~s=>2vzlXCl;0e`mixSAkw$PiYl(jYDi}Z+peMlM)CkT! z<4f8MsvyrPq^cw$86m&zqvg$>@}BOKZ&$zmtfAZLYfiB^ z1$L7VH|=??A6Kc@@_M&UZFMr}duM2n^u>EJUatR_;7CTGpC5K&DAjB%btP~>DE`$2 z9gB`ve{qxcS6fG|hCkiGq(N?#niNi1K~&rtQ&b92gRuu2YMuE$gjl0pUhJ(ZF1|Z( z%1kUHx#rcLU+MV|tX^1PF5=K!Y24-yIB`1kg4NyKQ5Zf(+(%;}cGcu;ZT%+0VXY3c z{7CR)Ebs@o;yb9Z6eH4MgM&%gY_hRBm}jC8@hSzCM+f|P%SBEG5}jGKz&)#Q2lZ{- zl|v*cZn_;-jm%k(Y4t9@GN#(3hiib^3VsYuYC0mrB=N!IlRajHsINend7OMAB<*$? zl=q`3eF}|>w+lL^FR?i@Em96}7m^^u!`3XS`gjJ4XSg4lTMMV};UO9#h~|6lNv~&@ z_k?2F8F7JExoX(H$W-;X?tnK?ihQp?@`0}H8W8bntnYPB5XVbeeSjd$#AMdJaEaVML_*m0{UmlBmg8W#2kidIX}pz9@Y#8 zMz9X=8AROQ5EtJwnA^MT|(_oo{TF^xm*Q9SthB?36VU)g)#ULl_*)$Cu>3*T3()>CX94{iHhs@ye=PG;6ZC> zZdEaz^&5A7ktu+E@%?O1KuYp2G={p9Y<_{2(=+`J3^dL6gJ--HODG9UjQgO zNIFs~Ys&rnWGp5Fdgd&+Y-suG=%X$MUfXtmH@u}@IN&iuF_-oeoGDm6ew`~iZC28b zI?Yc!544P>?BUV^^72rCd&TW#<;(AeGM6fiw8Q&glHP1J!K`zqF(Y7Ym56Gnx7mA* zS(4f24F2`&D1gM zjP37D5B}MDcj88+g`+6y8F^)z!!wfne-IjPw=ir~wK-gANSrAH?TxyBc^NED z3^9D>#Uvv(4uEc8gW%WkAD2JCTNt9Y8c{Osc$ih7Fzgn$^L;qhPX zmgFDsrCN|}`2DG54Hdw%vXS>}(+$Wk^$-$mvBB z=MaWKkeaviQu!&0+ZF=8~`diar}^aU1NGiSJwY=>Pex`AE6^{*!%Y~sIO^vKKou&(RXaQvNhau{n&GDy zak5W!PRNkE!Kex7FsA6kY;>IYU5o(Z&$kOfHun|C5-pR(=?gM}!49I_K zs0UD-nP{H}s=_>1zZpQ$u}P2Q*eXLViDkb0E^^w*hGyUiyfK+cIAwXKi=Z_^H0KpI*H^hrwE@Ht|F;`oK3nvfX@gBw! z^b(2TJD{~Ny!gHNny;jh=ie1Csj=Po2B5h+8C|%?V<1a39CT=%KZWct5NZept&1G( zaChc}K}L;-5x2st^v82Ten{(k3_P`DrNz#zT3;zLdgDekS`k6WWMbn=uC7|izNaRs9z{N`1hn_QhOw-LA0u@(GO|355 zwHOYyV?Eu#uFK)QgmBPlmjPar#zlVD&M(M9lBoHM>c4#yT$@P~$S(j}upw;4P%=v% znP1y;l=B_bCO&d*s&iMrftmXpZuQ4g)uw=9pczU+6?lwqAGKzBO;zh zA#gB0%Hx1v>~kYEIunu+IQpEVbaVuoU~?0R?Wt^ z60&j1O-;)E`D@l=INo}f`&!ahEF&oWjujOJWsxfFKU|>r%KP1TryQ%5@0?~Ti0j23 zmO)%xkakG^cPGtesF8RZi}}fKI~~De@Nn~uWKEAt4umqTu$-S?u;MCvt{;g!cuYA| zKvIxMg5IMK+0pOE3=8T--RZr+Mx&F>-(*x=j-d$xsQBmwYT0H^tw_T|C{kIRqoJ6J!n8si+l z*@YAlu72Pqx>6A)pPZMP1HG-M_RE(~P}1&~|Dvn4sx*ONse2&EmJBGFg+qOT@y1}P zE75+(jADksWJJUTZWoyn%(J7Gx+O94v*cj9P4-BHkmWh7$vXJv&4CKR6D2prbV8Jw zv$8Djvxd<94#pDVw%EAMTXPp>Nbin`%T>+QEf(0}2-4UOQM0^~hJJ9s{$9Aiu*OJk zWp%}C5V9;VgHLtY2GFdoheVpdA&|gQt%t7H4b_+M-z#@-IlxDMnhj{2dBNNuM7`j9 zK3$R}KVG_ouSd2ce@rDyUJ{vct4fORrEA*+m0;CFF4#1lDSwF^5I&1z8Qp z+sR*P4XwMVLybj;>%)F%NKDmJLp;AaletAWdt4%;CMOw0e*2^78`Z8ywh^rx!$yW3 zRa%CfuOt8DO-H_E?&f*>qkiwe2^nV=tXsy3?XFqe`t)amtI$536CgSV*5oYg)Nf`A zMBC|GCkJx*?&55@wMarWPah9y#nVAqrMkOU47gvqWYV^py!KmI!id6!o0@T}PDS7M zAkJnlm)5)Y@AC^QQXRfbx$z@kUz=RQ3*Y$=8Y_yz=%@-&OZLZpQ0QxB_*F8(y^SSu zFmZ@(qLQirV%j<*9a2H-+@xYdO@2>_<(QqA8oBz~5zhlgri;&x!ICzj`gsQ3S$g%0 zDpi_g$YQK>bk!!G$40Mb*2*=LI!66|x(0`0z$2g}$GzL!4jnwEk~CReRH=#fMD!#s z1q0BwZx6|E#&AAUvc|RO(NWZ%oi3rID1k=86-B6TtR{_dv}p)e<=ehY0c^i1HMDv099c6NEP)X$FZjf&gE zqvz_~1bspo9?w-H4}K_($kX`CEpc+^3&avGI#VU;yeDhKA#w~m1os;N6;~%@ABo>4 z=n+W=JYltFl2L={*`q{Kt=^+04)fb_LEzb`zZ;7Wlb-$*3#j)qCEr5HJ>M&VX6-dJ zbKSuZfmZA^>ZK&T(;g-aIoQ(^G!MVd3@GVI>iN5q#2S(fKYF- zWA$Cd&pjeXZ+}4K8ZX&-&+I)c&&?|4dgP6+zA$1o#+$d|AnSXr&~+w;^18+Hkpi-o zNu&4L_F-uI5j`-_Q7BhQ<-C1{%w0A_Vhw=!uDk1ro)=F_O*z70EZASZ^zgB>GVv^e z?t53C52hD}`!2w%RHBLYE9+@I)hADXTA*%{s~CY90Gi{yxYvxhvpB~e?Qh}x?x59Y z>sHFX3}&4L8GMMCW&-pX20{C5G&xs#v4tLSm}ij{q~=g!~YLY6?!ZTj%x z78!{B!X|Vpty@OsCqv>&dK%xPs3->p^4|-8|9);n)O~P>62wnQ*Qj1~cB5(8=*;29 zwZZcg1M>7RkpsG`ySh3(+%Ah@%}vRUfvr@T5N9FUar^KOx2*>h=ufL)kM2adzj;e* z_$49}^Ez#XM2g6|27%&bHllS+*r7k8=Vfx)An}eg7NQOQIGdg4?o;k7&rN5vWm*L- zJ2jwoNsurmvRiF`{lXLY&vIbn<;ilh(e_^O1_H!;$Qxw8@Z5`5dShZsUXwPWw?{Ls zka7K6JoZG+^~7-W_x`GLzUPG}{7B-&LKDrCF-NAG5}S;({zq!r@mV)qh#)&X1@R(Su0Ry z&XcQWRj2>djq9(Bd%Aw3F?u02|lx7LO_lM8u6;gur<(ys8Ns;UZ4F3$zJGdCKvj=}=ziNWfw-&j1C~ zU9~yvn0xo`p+=fz6>A9kV+zzWyolj$B>gf>{E|?gO-4L=oJvji>epFExhvy zhZ;>d2Qz)rX3<*KoN>+#Al`fqpt>=Kb`$usfs676SpcuStPO3qBpU#j3=3c=C4JJ& z)y?(6iWm}I#*rXH9Z^P#YG>}o6*9VQGFW?dqjdW{`WqLQ9lS5G=CLKa9=c(qdPnla zw<{L~YC4l)OBFtcy!|?J^aHF7Luc^~z`8<4$4PIAV`q_(iPCu52atcf^aXP$T=L?~ zfkhn^7vpBRmEheaJM4WwqlfbjN-y)u;P$Z_KYuu8-WJsi$pk+>E!n-~Reuuo8kHR7 zfJDcE4s0n}i^phE7a%SLrEazBc7i|+-ajiPXfBC}YUHG^{m~7NRH;cp64dCout^9w zD9}L_?Z)NDm;4;q63om_&cTv7ypLMzUF`Mf4~w%UL0+AF{RnRu&N=1FZL4vUImI4V zJQu6sJ=|{@Sx)fg%?}M=PEuL0RXd<~aJ60zA=tf|_(+i_mmm#f;Z&$akWL`|`uSMS zy&;Ft9=SxcDxD)ZVLj6ja`78D3yLC_P;{NnNIqXCDjac{d7x#g=MjnBW!f^iQKlD zYp6OFM)!IdFIxB>kBbsFy+2~B^+2!oi=N#CrL)kOwW?~QO7@Ol;PPKD4M)P<7*QS$@i9}(6}{$mm&hcw zw5Jer(ZBVVb`3Xu9kmF>6qJ8uo{ozF(I-W=f9~^>{bj06ivGv}U0KYVr%;_7uYGks;Xd| z^nK(CBU1Di0fYyHB*>& zNSh-kZ$Xi@;r1uIqr;7zt*+OH5*n!8z+?fU4=?V66tQVc4TR^9D=CMX6rW%2=R3m+ zu>#UO5PWQ;zE$#Zsx(3F<8Ekf^PYh{aZU5F#leUyg6SO_OHy zbeLDH&9{^+^#>Ho4~(HPr*?)^sH=npqoHQa!C#XwR&v}!f=6| zf*okjR*U5t_k7s#Q@O|Ck!TpkCTaFhGvo_kRhna7t}i2Wm{M_Gng&6-1HCtrqBN6bVt7LKEoam;`f&R$GkRoJ3 zme;=c#%%HHN_Y1PglT_T4iQ&^2|5pF;h^J3yuGxM4U(wSd@_Cy1gi@y;gpJHU=(3- z?(cgT=8rost#%$*y&QD-+JUhVi~o|QhOkaUoMU&ZY%2sx$P3$~Vdif=rad=);SDS- zJouBfFuP5WjBY=<)hF|VnSWM5VK4{k(VESjptw4-cMae^n54Zs*^hS9!1D89h3&wNm)WSXxF(k3_}I)F*;nopY@$Vi69# ztoe!A4Pi~UaN3PAFX6hXACN2sEZN9yEN5hPT;;{31|s)w$%jCgv?M!-1-~DFI>BC3DNTr0qAy@!Pk1#^p^a#dk%ZXY&g9I+7R?YXpT4_3^&W#6UAfIFu*o#;6#6VfP+3e3t4Pi7xH`QNfN#K( z{|#q;Mjo@Isya1xa4PL|&2@4`-}qqSA@e&F`$;X*NED-FJrIKn`rYdKt!N(a2+cfY zWyZ|ELvAzN^B?X!xj|-t*xZEP>Gx1SGcp+#MIFh`4yQm7LOXmFaYG-y$;l#|tHC=m z=Wy3ijNKu}o(5g|x!O{24Mo4NNORa+(j+sIf|ZGsPmvhmPM+3Q2i}_P$k)#Zp^Muj+3?XZ#UELVj{QNES9-M|6>%#~(3mGi7 z?rI-`VVeP#KV(aoGaafWs}J%eYt}t0)|IDMAA{51$E!4vnEy zzQQ@{$#xU0`FL0E3%pyvmP6PbjO3An~y>8(QW?_@18Ge@-JV0hS5``tJW7Q#KL11;PMA)*X~5 zt~$JgfHhURA|Br$L2h=xgPric9kEsHc%X>8ipcX>or8Cg2&GXogvSYJ3qX&fzSKmd z@t}`8XKyX?mtBkIa7#Np#q<3i{W}!1%dPm>;a)yY8(28q%k5HoA}FCrL`&tcBoik>*G@J8BTdX6Q!S~`Z&Y$3!R zUT)*sTXy&7q1{BWaAjT238>c{2K}J6pa0M&kw@!$LBEdYXIJK)LJ6EXC3G9WA^6$P zZUzbqxA5`#uHDz0v*tGs+I!J_Aww#h zBGw}0A+{5@NPU#q2={b2ir|i<-n#ykInpwWghSd3AZp#NY6VxTa>+lMI8Oaid_K{R z%gXCUtS^$gPamP*cM_J0)xtN-s0O@y2dTRut|2?&Z47g!nO552K}c-`8eOhpoJRPO z*h7t=xO7GQ=riC7#1;(&NsEFe(w0>_$yYf*BZW=#CH8*8^j*6w+&`lejh{hZ}BC$`bqK6@LJ)TAk%U@4%o@_TtQC=H`Db^Xu24-RmjAoPcwmiC;l|EKb1OFf)5qLM(ZDF{^VXbX?)tE- zOUHI%A&Q&&7<2!f?%@<8r;O*UxU@YtCbF(6rATNRkp6)DGJ*GVC}q!>d#90PgAN!O znY?{&{|@-uNe!wX0Hu9J;t`Z}c$<;VE1zyy?!uYvNWW#2#f9C643G>cSq)w}D4lSS zOCSXJJYwD$Qw1H2<#41p6X~i)bMV#HUno8Ltk619Q@>xurwiA?*z*@QcfG5&{$k)e zZlsPs@A{Y~G6>8AJaaK}AVKCM&O;p+c{&|V*zd)cpOo~-FAd<!#0x8!7l@&jSoxlTO5zpQhZ)rlI9{H>w%bCpZxEte8IrqE6 zNy`K|xuMmUknqXy;;GC3fffAnnyTgCRT8S$q0q{&)~`)dB7UN2i4=B7*@b_2v z75!5X(A6QIg$rMb!s9MI0+9`GWIWgm>#Hw!z<8MN!KtgN8!?Y7a%%Km^fa2Iu*n%z zjcbQI78(WHOi3iry)=jV+;u%Hoxb=>tFEFUx?8w6PEwcfL74jkf zfuC?`StqAAB}`6+fB$ieq?`}+n28ZPkoZ?c>HUi7!<$5!?It{x1&VO%sv5;SO8Z>XK~$}N`m;xwZ9n6q+R@mv7$WiP}g&T^gX9#n4U<9Au%@(?HA8`$cFqqkqY}x*GneQP8&L zu5|4&&K-mG85@U!2#UAAezkfARSPci2s~DFGd`_l^nW41-KrN*+@Ao2Dh8B0Bh661 z>oD6qtta5QaMK|?7kceZHm@(v6UkFwj*v>Mz+Ep#V``g9MOE?{b=!Q4`}!NH^9}6A zX~&~FKXW7hldBn$k`{XeQXtHkf2vDPYm@66mxoKfEjjEQ^WsQd|Y+?D#({KyU{=|Z@rb0SKCcJ}cz0jjDOjr}caC(d!Ey8tYkwdiJH^v&U_ z7llv<(Qc+KOsaNGTR>>IhiDCw4qJ)u-@iNX!Wi;!U2<|1V-J?DsG7v91XPcgeXmse z)3o1PTKdp&eC?`{ueHNJSqpE@N8hZkl7)js(rQL}NN4AqH#|pyVn@-V{v;}ok)BdS+_tI(^ydQ$@!KYlUZLnD*gMh=rp~v2;@c1ncq$Y~t<4 ze3I&xi~AyVjaMQte_siWp`HXx3E3X?=2lxe4}G$IP?Iv&Vpd=_ znN~-nvbYJfv=le05&ZZj{22NLIw(q-21Tzmql<7`mgx3kC(P$Z7-j%T`Q5ZbRQY+& zz;8(ndZhr3fC>{>@8OJ-B&e=Pp7(ThWi=uHsin@SO-qiPLvHWPm&jEomwed6LqP~$ittH~ z^zsV_Qcl+!x@0U($>E{>f~3Oi6edf`q@>(_y|&2&gB13H5JHXo~n39nBj6bPo=r1 zSPJscKiEyf{~qf8W1GbGVF#Zyetd&2@}xkRogSGRo|JJFc$U}K8mreoT=~$$)%i8U zP=YFhe9V=mY9^>_%R`kvTPOlU$j>DkoROc~@JdR+O$W%&caY?QM)#{O{kmqg_Q^6l zuF6o13Z+dv@dqUs&@9N5^Om+yroEp-4fVxNV3{F{1ZGJVDaQ~#z1W7`<`TJVv2B~n zNiw(on5Q*@?b7aJT!us$pJio(%0vCKol6GW1ArMMBQB6)ZO8=COf4NXIxZpALW~cm z_1#mf2g$+rYHa*O{^n!4STN--PNL(VbWR17A(?Rie0E;RbaUhmgHeDyL7_7J({Q&8 zvbJ=3E3z)lj1k6#nng!DYQoD%aMgvzfJ=dEwPH~8d^IS2?#Y1Cr*`w)SurZJEj3RG z2AB|FJi92AzR|tf`sYZF=VY0{@>wwuvY^INU)1wY~0l-h3_Y6O*M@tB}GOMkuhT??iM3sStVYtSm zRPyvj_r(+l${nfa!h}C^GG8=;Vj-3Z={aq*g+Y9LX?Zj$F_jS!H?&@+PbpgVfB7noz^cGN9vEc2<;>#;Oq{FGa0<7AiT5rb6d z(CLx?QA~AYraHp4}ur-XEhJQOLr*`*^PTE4@r%C7m$W^pGN!zWsmc+ zc(TC98D&g6Kp;&$kFwIAVv*C8?Oh%dWw$C)HFuwK(eDy#TAIUnosG}XrrRONsix$R zrEu&PO1xb04rpLo$+zO!Px0}odbJ)uPpIAu_=e2sE>0dK%nVR%|NdE#UcY|(EK#~t z_Ukz)+Zt=5_dgcBjLY6Fh+$5#9{5OjZTHF^$G07IuZk{vdX1^trYF}7Q`GN_dCOB- zdja^vNsboHER0S9eBJj5jG03fiN|F3)^ywR5CdEc7_i-;r5?0$D1BS~Q(!A5nuPWj@1!asAm z9aoLw`FNS^D4wYs6AbPVLcx7aYnU1r*Ue&E8bv2@BK zcbUy)2tvZ+Dja@1p|_eNMU6}TpOX~nZGcAn`}h1}r7b|mhG(9<(B8pRt%F>mV=HdC zHQV*HTgLt5LRaGdo`amYtDjaM`uVBPk3l>4uax{xkG+6ig*01y69QcX+{N5$il)>m z6@Z8<5G}lC7K9eO=k3v^x54-3@Di<-;kx7$kXutTnET#o@d~EE6M#%%bRX!YILqo; z7Y*XJa5fj>KE5-e5QBFS$QHJ+cnXW@Ol{{|)cK?TjFw_nXmLp|0Yr~Uy z*ZfXw;jL=|jNa`>+WMOfM`sIt+~03!{oLnccfe$dX?zQx|L4x3V*0a)PN=SMxO6`- z4^5b_N~=i8E)if)1{&-!P)9C!fA6E=wImI=Z#WWVucdrD&Yo{fy~WK(t;BZ_Mc9mS zA6#bR+*f+*^(Ur9VAUme1QqC_vX??jOSb*VEJ2f&y0)-MbB?l5FN!EGBS+J ztl91%Z=XC4qEJT#_*S3sjrBVz6!$o2)L$kupj|ivHzvTuo>lcnIPH&3oayoU{4X%5 ztf`?tFfUE|7ib2s_+E787zk<&n46CgWwK#EI|5YF{82>U&xj(qRS@iWM5xyzGe8*V zEgJGN811cQb%#Zzd)MCfrR8x6KBs{TSC16av}~1p$J#Pa2+;&2+gFRjG0yuyNAYcQ zL)BD6sn5@h^&*XyHDLk{Y1Vpa{U>KXA5)ff5B)J?e09w*Cc=|{NQ+9jM%BB;IGA4U zy&Z`yt``?p%aYOd9DqZ7I!}-x)w`>7n5kzwTU3?j~p z0fiYpbtdG4eF$3851ViSP6&`kWFZHUVuoh=8-@Lb6@bikbUfFjKFXt8;Ar@Rc_-`< z*wJT30}b60A+T2i&8z?5+;$m3A}w6sF2W_n%5% zH~>$)g*?$o9+&kM+LakQ|3Z0^@p(n9YU8uAEy#T!aS8)4*{$<(K;>+&wIj_2G&Oy~ zJJ^nMW?Cu9JVyNLK~emPGw2Hdda7v);d z!0lK*Gfmq8Fn8yX-oP%gzg!wZjq!?Y(y*P#<{*swAaO~t)Epo(;glXm9N)Mr|Iru> z0B(74s}PDDZzXFwcfA2E6OrnM`;8NS}!As_%apx8_ z647nTPvW2c_ao-TwuYc>b?+*?nj;mtE}R5z(2^{7IOROO;IiL6-uTO#X16hXCI(a3 zcDPa->1wYr3VD&o8G<6qdou*THb1OY2&hXaTT2lMx7JF$N&n zzrcqTRaRT%2Qs6~gM7S_(F;zj0QdA`Lfnm!<6b!qZg5?JhnPb;dc6ZF%E9~Hf|(tW zOoJ! zpd7bod)!f8!Piodp-0+7)pOr(a7Q*2MbVf?|K>NmRp^?hHk_%_*VB1RX*mUI(D%3W zyh@NR5n)<9l*hbh!U^9gKw)d;Z*DXh19*$i}6J<&6yl3If)y(_gGCn$rKPPkxuB z<%cdDx+y47#mI9%+GFk;j{Lau=&YK+^sAWd>cypC16(4j`+n86C{#xW%vM_V6b8b@ zEz&G#pDU|ShM?7dX77-OEn3No^WPtZ>07naK-2*oSrGs`upU>+3ybfry7iBc-Z;)= z;Dp*!BU=i>d2aHVnI$>!VpoSpt^D`jJo+$VJ#Xp8Ys;SN`{^uys>NDVNT>?2s8@L_ zm5&uU_W{VTe$Bnn3#s%=@IL#1M=O?Y7C%D^#!}(XPsNq zza)YRYlrtk((`Yl%V4LRiQ(Wj>@r$DX!_bo+o@Ok zI}q*-GJw-S|Ci*(QDlJibyNQEKD0uO5LztB8cTe=k za_F9K(2Kj~21VUNszpV`5ufPbaU}9xp2;JX!tz)c#}^7zf>^@!yqsZ^_yR5|Le4c1 zrE+6i7FOSRujCl|HRF28G%s#KSs$Z-5|I-PaTnPT)XIVJK6;eH{51t?%kLq-n$!cvPVkJ_Ls=P* zq2~LBtJiE`Y`8z8-f-=slJh|XAIdz?bSoiRHOt&^#yYo(UgePba4W#dBzWU1@zjft z7TN$&Yyk;Xm#5h9kDo=4m}&@bab(6p!QirJ;YdclLM@dw1VGvsg=p!A#3SP>G}r)S z0`BjVSg1}X6(CwYnC}|4r_LdrJpiJBw%D*qvLYMIq=SNB-Xb@+!{er)iqYHR@E8<+5WTP<@`H6@4A9t#i!bJdJ{J<8 zRs!~O7y-ls_yB{IDip>giNqK(fK^rU(#dE-kiy+`NEd*mpf7tTPSDnGOYnNe=FRa8 zQ29F!&;_;FTGL50rp1kiB8dX=YxPnkbkF8e%4hHdT@Vl?r0{|g*VooBF6Ss^jhUf} zMlg#+0ql2O%-{lOAO}t!5IgHJFGYk_!k^dRUJU=UKE&D@BUAB_12z zyEUA5MW5rR+uH%t&Q61uT{RU*zgs$ZaWa(JJ=}^w7@n=9bNp^iMb54p`9ULR$Z>}? zYxv+1d?j2MoWl)-|53G;Y;(}rpdlJ)M_eO4J%>i5lg3e*6O`WxURPMTQ< z(i_i9YBO(t4>*DV-7~O7+)evpVSjZXrI(3$VcdSWN0kvC5PZ{)jr@lhp#h5uw$r>r zcCFQ2YwAVECBCPRMi*vbyBc4FRPu{QZ> zIM3=CjdT?^s0!0{Ug!jNw^ zEO8V0C48ZLSq*2YXcxrfFteu*fVbMW*rkp@3>`^9hax?KGfh`wX5Oea)rIo7&4Sw$ zNYrfZF(8tx9$=MsHXYI?bz2Jj_fQtxzNIe2^G(JajI+SCm-E(GyMe}txgP-imk#n~C3pK9s9wHqsOF$nr> zC}bu?x4#?(Id4*SBJyo}bGXQV8g4Kf`n_d-H7=aJBAv1RGR7{gTAYrLr7T&xm%>8sCB>%A_k=Btgmd=t zeK6~~Ec@Z?R;p#9=VIMe0s7G8|Na08*X-rZn18V0**-R$JE0nCUmU@h```N%G9NUK zJSaXo<$pcn(NVgSR%&DZd7%9xO9$_*i}*uJbLK$ImT*Ug&RUGJ@bAC|y-KK0>yaJZ zG05tgABROVjIHK@%fvDci#%W2azyp3b8;6ib|D)56AMn)mR#{zx*_bTt8hj{+)8Kg z+N)oJ-5aWz_Wimb#PZ+c&YO~fFgO??s^Wn&is1S3^9YQ(aIKpTPA8&BrLH8OG(rI11TSgB^#nk=TbpWLnK;SQ>FEgGt+Tq1>lL zwMoXzZiD8C6A9 zg*lx$S8ucK0^qVnFoEW?o4_%Dj`S=bYJ-f}9F=PgHnkAYZ`FS7&_mg|E_!E7K}LAp zya_Qt_Hbird&KU!QlHEL^V9@yEmQ~#_T|t~pur4_CbGXOOqw`?zET0MO3T>j8w~}Z z;~VG0BDqldj!2PQ8r3!jS#6L79y~a=JYZMNtlYLu^{F9{S;sqeYc2fBHtkcL1=6Sy zd_Z8vfk2XGr9Tn@)=1#01HxBH5Ohy|^p!M73r@8m=x4`oc95SzyYh?@4R?EngP13hJmglWUJckZ*p!8FKy6u2&m6@ z_e6};tc#GX;-LO^TD;27@9+zEjRB^IDX-oUF||?1sv(InuA1H8ctea2g zw$*Y#a-2Nk1Sysfrf=<8NjPgmvCo{p8}4SFAim@Ie!uFVrT7#0@P&pBHhXAE?Z|cV zU7$GiO|+J{pk+0DQ6%IwfcrQ314W0H>v^c;;rtdtYtAIo@;xhB^y2Xv_GsKRFPO^$ z*{x{V_IDXL@1O@a;XD!|UO#1_$^|tdHZ9nVGZzA?RNr%-Wg*4?*xv9o6#4bT>e1|L zey}N7V@8zMToG}^6VX7FRRCe;OH@tZJbE?(zP!l?X+pe#ZSup5=(10oYP`PV)}l!{ zv_nh%W)@Z# z22`<}IqJl1B+Bayko*G}#duqm5|8ij;qc9_f zb03~mn8CU)VBN?9BDvfOD6nD514ZwL4D_Uv%nNKBIdgEM=n$x!cfjuLnzM61^1?yoE7D5P4Z$HzjD_((y#z;DmuqZ|^33?*kEyW|EBvHo#yg5Y@SUEleFj&r2Cx!S__YWRZ z55mqEl*HIC58kClb@@D)0q#FE7~H1~EokuH_6{Ho2}<5yDEk>Q14`!q?&taQ_kcRz7-1SQ1b@B(&X$13%#n(S>7A@PHt9brLqn?nFCkYG zKmMK*AD^t>0xAV9&kq%zq}~#@eopk|D-Y)E8E7bl!$;2!`u;nWo0GLS=fb)H{lZ58 zWF{9MO#4vyPJ-)YFWN9{PHwcm&DfXW$_-~1|E?kH4~?a9&n+$M3vx*Fjqm^?&s6g4 zR+6}FVf%d$Na_N}HJ@H4kB+BfJ7}))EJAt{t!^M)(V-$?t|jdz_zEC;BXy!PV8!5@E;k@omJywh#|I z-v;kcH_RA5hYwzY`!S@+`LCT_XlN5MkxfPHgQ3G%m^SU@PRkKo=oRE;Xq^fJS)Dv=~q52!X%kdL8b_L9LV6y#Qw)1tQ?io=# zKfO@i)K#_u*ZbVEx}tye_jxyb%U7+$#>%n3u;*OaKJsIh5^ZKiC3$H$5HrE1)sz)u z9Z`E##Myp+e$$JyEzIO({WTkOi%!PEFtWry5DF?O=e(4hwVQVZu~^k(9npJLIApX4 wIn=zD)4V)P+e&N2lRy9ciG%-x4my=;jNnVbks^K@wC2IN)9B7+)S#3<0LqCFdH?_b literal 0 HcmV?d00001 diff --git a/lib/matplotlib/tests/baseline_images/test_axes/translucent_markers.svg b/lib/matplotlib/tests/baseline_images/test_axes/translucent_markers.svg new file mode 100644 index 000000000000..3ae2016d186c --- /dev/null +++ b/lib/matplotlib/tests/baseline_images/test_axes/translucent_markers.svg @@ -0,0 +1,289 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/lib/matplotlib/tests/test_axes.py b/lib/matplotlib/tests/test_axes.py index 79b8d19e3c05..0db3b7dc6bc8 100644 --- a/lib/matplotlib/tests/test_axes.py +++ b/lib/matplotlib/tests/test_axes.py @@ -962,6 +962,7 @@ def test_transparent_markers(): ax = fig.add_subplot(111) ax.plot(data, 'D', mfc='none', markersize=100) + @cleanup def test_mollweide_forward_inverse_closure(): # test that the round-trip Mollweide forward->inverse transformation is an @@ -1005,6 +1006,19 @@ def test_mollweide_inverse_forward_closure(): # compare np.testing.assert_array_almost_equal(xy, xy2, 3) + + +@image_comparison(baseline_images=['translucent_markers'], remove_text=True) +def test_translucent_markers(): + np.random.seed(0) + data = np.random.random(50) + + fig = plt.figure() + ax = fig.add_subplot(111) + ax.plot(data, 'D', mfc=[1,0,0,.5], markersize=100) + + + if __name__=='__main__': import nose nose.runmodule(argv=['-s','--with-doctest'], exit=False) From 7f3e0ee22ce5f5e6833d47c23a066b149b5cfa6a Mon Sep 17 00:00:00 2001 From: Thomas A Caswell Date: Sat, 17 Nov 2012 14:05:38 -0600 Subject: [PATCH 4/5] added change log entry for #1504 and #1505 --- CHANGELOG | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/CHANGELOG b/CHANGELOG index 84439e639298..0e208c93b4d7 100644 --- a/CHANGELOG +++ b/CHANGELOG @@ -21,6 +21,12 @@ an active colorable artist, such as an image, and just sets up the colormap to use from that point forward. - PI +2012-11-16 Added the funcction _get_rbga_face, which is identical to + _get_rbg_face except it return a (r,g,b,a) tuble, to line2D. + Modified Line2D.draw to use _get_rbga_face to get the markerface + color so that any alpha set by markerfacecolor will respected. + - Thomas Caswell + 2012-11-13 Add a symmetric log normalization class to colors.py. Also added some tests for the normalization class. Till Stensitzki From dcdbc5af255e84ff38903a39e7ed0d4f05c54c7f Mon Sep 17 00:00:00 2001 From: Thomas A Caswell <“tcaswell@gmail.com”> Date: Mon, 14 Jan 2013 09:13:56 -0600 Subject: [PATCH 5/5] pep8 fixes --- lib/matplotlib/lines.py | 4 ++-- lib/matplotlib/tests/test_axes.py | 6 ++---- 2 files changed, 4 insertions(+), 6 deletions(-) diff --git a/lib/matplotlib/lines.py b/lib/matplotlib/lines.py index 377f8a4ed084..3e4c3888d16c 100644 --- a/lib/matplotlib/lines.py +++ b/lib/matplotlib/lines.py @@ -959,7 +959,7 @@ def update_from(self, other): def _get_rgb_face(self, alt=False): facecolor = self._get_markerfacecolor(alt=alt) - if is_string_like(facecolor) and facecolor.lower()=='none': + if is_string_like(facecolor) and facecolor.lower() == 'none': rgbFace = None else: rgbFace = colorConverter.to_rgb(facecolor) @@ -967,7 +967,7 @@ def _get_rgb_face(self, alt=False): def _get_rgba_face(self, alt=False): facecolor = self._get_markerfacecolor(alt=alt) - if is_string_like(facecolor) and facecolor.lower()=='none': + if is_string_like(facecolor) and facecolor.lower() == 'none': rgbaFace = None else: rgbaFace = colorConverter.to_rgba(facecolor) diff --git a/lib/matplotlib/tests/test_axes.py b/lib/matplotlib/tests/test_axes.py index 0db3b7dc6bc8..f254e63a4d76 100644 --- a/lib/matplotlib/tests/test_axes.py +++ b/lib/matplotlib/tests/test_axes.py @@ -1007,7 +1007,6 @@ def test_mollweide_inverse_forward_closure(): np.testing.assert_array_almost_equal(xy, xy2, 3) - @image_comparison(baseline_images=['translucent_markers'], remove_text=True) def test_translucent_markers(): np.random.seed(0) @@ -1015,10 +1014,9 @@ def test_translucent_markers(): fig = plt.figure() ax = fig.add_subplot(111) - ax.plot(data, 'D', mfc=[1,0,0,.5], markersize=100) - - + ax.plot(data, 'D', mfc=[1, 0, 0, .5], markersize=100) + if __name__=='__main__': import nose nose.runmodule(argv=['-s','--with-doctest'], exit=False)