From 1b354bc434ee9e3b08bc871a9109a06e16b70034 Mon Sep 17 00:00:00 2001 From: Nick Burch Date: Fri, 18 Feb 2011 16:44:05 +0000 Subject: [PATCH] Fix bug #50299 with patch from Andrei - Fix XSSFColor fetching of white and black background themes git-svn-id: https://svn.apache.org/repos/asf/poi/trunk@1072053 13f79535-47bb-0310-9956-ffa450edef68 --- src/documentation/content/xdocs/status.xml | 1 + .../apache/poi/xssf/model/ThemesTable.java | 12 ++++++- .../poi/xssf/usermodel/TestXSSFBugs.java | 31 ++++++++++++++++++ test-data/spreadsheet/50299.xlsx | Bin 0 -> 35237 bytes 4 files changed, 43 insertions(+), 1 deletion(-) create mode 100644 test-data/spreadsheet/50299.xlsx diff --git a/src/documentation/content/xdocs/status.xml b/src/documentation/content/xdocs/status.xml index 44524a32ae..fbcb3cc42e 100644 --- a/src/documentation/content/xdocs/status.xml +++ b/src/documentation/content/xdocs/status.xml @@ -34,6 +34,7 @@ + 50299 - Fix XSSFColor fetching of white and black background themes 50795 - Avoid NPE from xmlbeans when moving XSSF Comments from one cell to another 46664 - When creating HSSF Print Areas, ensure the named range is reference based not value based 50756 - When formatting numbers based on their Cell Style, treat GENERAL the same as the more typical General diff --git a/src/ooxml/java/org/apache/poi/xssf/model/ThemesTable.java b/src/ooxml/java/org/apache/poi/xssf/model/ThemesTable.java index d78e31073f..5b8b228691 100644 --- a/src/ooxml/java/org/apache/poi/xssf/model/ThemesTable.java +++ b/src/ooxml/java/org/apache/poi/xssf/model/ThemesTable.java @@ -51,7 +51,17 @@ public class ThemesTable extends POIXMLDocumentPart { if (obj instanceof org.openxmlformats.schemas.drawingml.x2006.main.CTColor) { if (cnt == idx) { ctColor = (org.openxmlformats.schemas.drawingml.x2006.main.CTColor) obj; - return new XSSFColor(ctColor.getSrgbClr().getVal()); + + byte[] rgb = null; + if (ctColor.getSrgbClr() != null) { + // Colour is a regular one + rgb = ctColor.getSrgbClr().getVal(); + } else if (ctColor.getSysClr() != null) { + // Colour is a tint of white or black + rgb = ctColor.getSysClr().getLastClr(); + } + + return new XSSFColor(rgb); } cnt++; } diff --git a/src/ooxml/testcases/org/apache/poi/xssf/usermodel/TestXSSFBugs.java b/src/ooxml/testcases/org/apache/poi/xssf/usermodel/TestXSSFBugs.java index 9f8909ea61..349ab9bd8b 100644 --- a/src/ooxml/testcases/org/apache/poi/xssf/usermodel/TestXSSFBugs.java +++ b/src/ooxml/testcases/org/apache/poi/xssf/usermodel/TestXSSFBugs.java @@ -673,6 +673,37 @@ public final class TestXSSFBugs extends BaseTestBugzillaIssues { assertEquals(exp, comment.getString().getString()); } + /** + * When the cell background colour is set with one of the first + * two columns of the theme colour palette, the colours are + * shades of white or black. + * For those cases, ensure we don't break on reading the colour + */ + public void test50299() throws Exception { + Workbook wb = XSSFTestDataSamples.openSampleWorkbook("50299.xlsx"); + + // Check all the colours + for(int sn=0; snwFjI z>CjqyPm6buar0tgBS2#5#>CFN`z3j_#g1`!Ad6=(riQ^dyF z!PweCSJ}nZ*j}67*~*eIdj^;?6A182e|`NAQeaeV#CnAhsTK230IC%OqpVhTrrQp| z19t^TQotK|0Yg8Sv{A<3%|or4mem(^g#7C+u{2{N%TvKq~y96?7euQzMQnksMT^!cQkX}70vds?YN@ce$?d@qdt zx$c<)O*@*9_>Uk0sd5u8`n8Z}6zx@A`!xchom9|6@wTrGh0uW&G_QKAFw#JgtuI6T z1xE2?8w~?E5L~G9s>Mj(e%!dxK`x@!d@KaXr8+kkmYL#4s;*O2Gef-0su~$Ugu|Z$+2|&g^%W*E)qm|VdV0uFrBhLT)yx{P`^K$* z%W7*rNo7~qG%=wTL+Zjg5;txu9!dP&Ry=Z`ID2?na@CkUW&EWoQ`9gjI8!gYZkpKU z^svWX*n2rxSKHPs^{-@u!DO+Ut-d;~@;_D&a&cC-sv?x!x2gof2Pz@D5B7rIEjk6l zmix~<4=8d*Eqp8I8#%-|eXGx~7;hto+1dOdcpC80-Zc`%*^MmY4HO9I4e;{e-{pro z6-JWp0P1A`;SUQm4y^>b^OF(7i zwa7@c5Gmt#lAaUPh3Ak8-rxCw`brtDOx+z!2xzXK@0%$T;2JQ<^)yooRk0YjEtor( zWvC)%8W5Y9p$)u?z|~hR|4h?Q4YHX3k@umxfmPPVnPK0N!6XO9xL%Y~Jv0gxCw7ocPdZm=^tL8|U3F z@Y|9#`k~*|hp4Oz__zHt>*wEiST%rwfDmATfZhQ?0XthV{DHfZjh%&ojg7_6YWO$w z!G59-_}%}vzgiQ<%mL7NUwmy7x%BvwR&U0Wa>oqOX1xZQB>IpQjAwaKU?VUkG%sB6 z9mxTDuzz}h0@9-G<#_oJG|i@T$SZUD#=@kTKouX>DplEuL+7MQ^}>UY8euG_TprH^5j!SV zj&?M315M@Y>!RV_oBc|)rJZy2gBv8d78Q{|8PAV*gnEi+)KJM-39Y3`}Xu?|sXv4b%AB={lD1|GovWE0`ZTWmJQ)MzUVIz;IsQbFj#+ep2 zPB3(19P){se3Y?PZ(3kK2^*ZHI2lJz6)kLAH3x#@+8|`j{kK`TiP9|b4nP|)I1muv zpaujW^WQQVrrZ^=LWtI?b}T@6u8lJ+&NAj>nS&1YC3rR_&g^*Ajo2bxZd#ctf=zspea zGFgtj*&f!Tv%Te?C{4ttO28$KcKxVF{o41WO+)JS4ULE$uHz%3eFm9WjQV{Was&rD zy`QuTnqoI^GK)iZbYoANjA7YJMuon-3akmU5M>omk6 zh_Pj`=^79dCW}XDf?>Nup&kPLT+Zqkn;T2^xfX19A|xy36sbUZ2PnVg-L3Z8NQrk> zRh|g9K8m=^&S)kGiE$RVI|y4Wn|t#sGCd#N0_%rQi5&~C1ONd3Ie8`aWgu1oigYam z5D?Zs5V1EkHg>RQ`1Qv6Gk=A}%L3p=3b;r=^3rQuh&k=mHB6Jt8R`ujcS!L}3-+TW zkNE(+V&&!G)Ro0PorMW~Rz1h`t|8?K*pwhTD-Whl()FRMbbNd+Q4tVzwEUM`Log^|OOAE+{kf=*Sh$ z+f>WmC)Nie_w93(^o_wH z@?qO`z=>w`RZ#n)mis^nUFyRcDS_2>=pHp=5C=9ds3A%krsu#!sK0_eD~bTP7W;Y4 zMcAeC^KYY6k)cVjwBaQtMa4ecnm$xY(?=7q!Uh`#PUi+z0!f%8> zubo?%E~;WodQi`)pIVmVy0v3wG_H?~M~Nv%xp4a^O}5iDRjIVq2zRwo!fGF!l?1%f zZPFK@7G6kEJ>3Cg6W*&YipaaJ!@khIbzXqfE1E&4FSD77x#gAZPYb&#wxLDw(+XFR zkrp`RS-|J*Q~Y>(u6e}4dF5E?_$}s)uPG2KfS*hPvLVSoVg5(C{s-*8igju9-;31O zDGx`DVagmi2E$2<1wL;JnqYNe9O;w!h72c4+PumU>qnss{;aV(i+6L-umhqP7|p=` zyGlW`n$A3}yrn`_oG{ihei-9}l~xxQ>~6T}vqbm?pH!%NF(9I!jo_YuDF(QWbC-`4 zlhbBvZ^?Py&RtnY@?BW>I6#-NmCk(qt6`--1lpIUzI`ev55>=jeM^ek?T0}Pc`8j* z$)({70WV`^g2$hsDC#|rjzSRzq#prQmO2lvbpk?Ui|k-jbMM zcpbI_qUN7V2NzRa^q0fCx{lBA4?H@74`q7z>zk)#UXG}@`im4M-rxnb!G(b!l z{)#EF=x0;7CuEa9VoE7FeYO_vXG}q`rv7_va6SzD5mW7v_!%*8NzuPzif3+wdO9As z&v!oYovyE{nlWR8)$;$YHt#&iY2pB7)%{tFF9ow&?k)bPhVEoWDM%Gf|Zh1-5}X2fFNk*OT8~S;!}65XLFe5X(`Q2sX7> z8N3@joFG8dWsk!eS@B&cMh|;M4p=A85a=_>%aA4WBNH@*&xx;Fqlc2w2@Xh2J{E@&sANN$;)h|XDuJP8GE#^eExPZS7%OD z2x>N)4#$F}E$d!U5hI8vVX&LIdu{^U%ceyH@E&#n3YXA{`XqNV1p*7&;9nPpamnS2 zG(u5_@uDIK`qauJtJ!if$T$&AF3}wXVpiK!(v|dkc&T7f56+5wxo9_816eph^AzvS zfN=@$6&97mx!0jzDBrpl168T%^tYRZMobH8=d?7iWQ$`#PJ4)N<$Sq3C|7MMSp|AJ z23wX1PPV*A9w2`gt`ziq>pZsf*f7OLBm7$-$U>m>}L~32oXvN9@N-CyD0D~r* z$U>rkfhj2tgw`5e4(-`g_zf? z^J8^(FSkx!>xX!~+sMjW>-&e9yX?`DF@IYyEb0-{^R#s^A6YvEJ01lMWxb&|s-~}M z_AsUFz6Jb+w7#5hm_kFw?=1qt9|#cQjhT_%;?txRno@d$e0c^p_7ydoSMpITKO!*^ z8{YCS&@&ij394@2GyP?HrfUcWTKSI^Vz#dXl}sg@GbWZx&Ifpt+9{HIr^8d%zDl zj2?oEPCOaND%q9Ap%Y5%rTUAVFgmu(9{yxP5r-Kh;1I|*2wkra_<#hnwGsrtDG)J< zc(R#jj<1_e4eiSie)Ie~6u)Cx8_}{;nSSDfx9T9OHKjnq4$Sr!S=RP*hqcpj#ep^= zm&>ZQvB-*z4*mj+77Z~61nvtX5aGn4;Vi;O@abpLc02o+cryRNOpz@x6vjG`N0WkD zaeYSJI8dJ_=MkYha7#B%AHLx@I|7CeRM-5lPV=JnbfY!TuwK|djD{tUoGVVk%#G8w zrhQPT>A-8DQ;gYBVps-dL&eR1fO~4F)#^OmanwEimhwlO$KyZ%ndFE7prt1&(OOpweEP!rlIvN0bOYW-;)Utgp|rk)koyBu{73b`bk}1w@V$!LwXD zPE4q82K9X*y&F+v-q&inPtv<4#URXDl5|xmakI~J6`08_DCg`oW3G~tj@5E=9TnSi zbzf3+)Aic8tqRr=mp}54#PNLV71M@_L-N%ayZS2HLWf2oa)qEgh#G1ymz~PVN%1*K zJKStyvEd9k@WUz~TdQ@^0Qa7P0Ho@qD%9S5@D9fh8{b$eLvqO*(2=RSQ1D;XI}-ML zK{^s&$+lT(IERJXfOTX+rvHsKwp&!w-A>bi7xaLh7>| ztqO|b%GmsFulC!|tNCA7_|dk^Vcc}!btG00q_=twEW|>A@==0k5-Y&ad{}D{61L+M zADk$iN-2+f&Y$Lm5sxG^5N5oUt;^4qPHae#Eq*;A16pO>9&e*Dim@>Lu(m;riTNuVaVb z?(ci}jt8=WL;$=Z0GsD;J-m^fzLS}?i9N&LzG3@$1WQvMvz}!{YA3luNVu@7Uddkz zPf?zPAytl7ktWcSNVC=$h_I{?Xax_n+k!BW!$m^jm81E*jgA!=Yl(~wN#C-Q{LudJ ziTA2&t2o+{D6Fh*_=hRazD%KTVqNp-kG>KUP1NyHP!-=Mxjlnoz^F+lwqpNtecmn^f}X=C`CBf;XBR@)n&*ZmYa~yIYpfZ zAm6&?1DsB1@^5Q#T@IH0}zM~a6PRCwhAlAIJ44~_95 z8#vrDA|v~GV)1>Me39<+GiOAi-9`9+@R9~QK_ymD`G+we|Q{c#^HhZwGR71ez zu#6|8(ok4@33sF{!8kZ8O_llFoP@2Kh)rOhpV?*6{`7ow{?f2QK#-Hcq5HK@jQ5x{ z0|iTd_P~Q$Iyb7E`fE>svKqRkvAc;)%IQF(ro}2#O5%Ypno1SO&Wu^>K@WJp6UET0 z=l0H2Kmpr4A7-=u`d}lne~%cUe_!wyqB{8_WpJ|Bh%!y-t=K$nRP?)G@BzR4_vqr& zmEeP6A_`D@VnnQgieOH@JjhP25MV_l!V_9^iU_NCK5tO3`v@8>?(c+D^jSbTUlS{V zF!+3_E$VZbRJK!UZu#EW>nZtSL(6=ehg#Q;Y2-` z)o?n`8iY2J76<}z3AP!GGHTt(e0!8t;&?3XZ#j_h^-?d_JL!W9&g03d`Jjn;@MF5Q zFHIqdJ(s@Y|6BBnV?V~@niQeX^{&j>U;YG+Ag*bPd?8yp;9Av1DE2dF+ zi7gz$^P(xgS3BkI&4upkZ@ba!PK=y(5{(?6vR`)@j~wx2G> zvdACZ=uZ~|(2be_T#U7Ub}_!qLjLSVOaI=DIy$>JgY|7wHc}yLaFX=Yw{)zWezsE# zbPh{a$wSh_dVd|ubSj>PcM=zEULbGms5rx%box96Z#pkKlX9I3yyjcv*d@H=&sNy; z_il7zDB}}pQ&qR$Hvh>#ccUeLbX+d)qpAB~OG>^q4QsyOABj)XzD|1l*6X$qKz!-} zI6K1smBYjNcWwM4y8vSdB+(0>=dX)yq!fYmU?WX_g5_3^z{RZz?@!|=t)*}7=c?HK z@dF21^_OSvd5aimaZ%M5Pax1@Y z65qGjx3uWpNa$E;(yr?O;_rlNbu>S_QH%QViANHYq;j^gM?w{`F{?S8EV zha2(*-!6isM^eF`6XBP;|0|9D2NAvq{@*TwG*%n=pA+F9&gOpp+73O7=Kn+^cihJI)n*XHz>HF7Y5mMN?azUbpMaXw_TH^y_kdzqWZK)(# z{yfYMXRdSZ+o!p4&M?6$RY;miqSNbGcc}CcUt}cw;g}fYq(*Zj$930&K544(#Ae`4 zwsX!EHAKmKz#qHI8$WnC;RbA8A-z}$#R!ng4EuoHV1~qf)taS`q{OK8G`VP6KfVyu zTkdbwvibet(6B1U^UsO!4-3;T@~8EU39Ze+Eo zF|8gBGQybyTZZlWDd)|j$A~O}5*X&%KEl^kh^!i%cwYP*nICb#TSxd|SPxFt5tMw2 ztcg|JrXp4C6SmYxk<>I?lyBsmXCgvp?rr6yVu~c^@^U0esVLS+eLnQQ8!B>a^KU(| z_%NVJJ@VGF!w43+F{O(^>cXP0h(MZzNU4Zmr_jQi{c-X!zHPsGzQd=pHr%Coef_sq zrRZ$HTlb$zjQ{W||4stvtBA8(?7Tmmh!O{JqsjrO!Q(Q-N@CPK+KXEau5styp6$dQ zd+HN!5zZ%sXxiCk5dU36Ow-Csw`IBxfcJmAiUv)`8>K%(-<|?0Cnps=5cLrqw#r|D z^ablzark$MF%)OAwAkG0S{JgGL9XtCcGpAgD>t8_`s-!^@N`!SCk%q zwglJU`?KqxHm=j%w-c!hP#-g#8@o0SKrism#lc@eAo(W^2eAzgMt131HqQd%i|PaSpNcncF@*zzU0v_77z?fe*^=Xq?_SlBqz_$V3;1@ z<)LCi1O$UUXo{7JM~eG}_kLH=^0=^d3w+^C%<#3F)9KUZ71ql{7%9Ua8G+-EjDYwv zBYc{0DX8%2WUX^?UVjGt9S47+Tl`fM{^}P0>K6aocZ+`l=3htMzhM3g=KuCE7t!H8 z@`3>YrC|dBp#h2%pnbD9)weS?QgX2SY3BVbNvG-?HY>_#p5ohHL2!sN%r!PB6bK=F zTxP{Y;bzN-I{DCCLsnK(i(QUbbAGkUP!Ofli&!$kaN&VI%F2FN*+HGJnCHb^O0VG7 zrzfnzXLf0&aKYb+BqKZQT_>C-nhsjbUV3@j!n;=%Kg+Htayn@3!Ym#yYR_n>HNqaK z=_WM!o*b#FZB){g+NLh<$rVlrs5xm@2zt<|ZNW{PbPz*X4|MXa@mb$jz0W9Jl9Rtb ztQc?Jyu&MX(groGXdps+UqyWDFtZJV=ceZZqlQLS&R99x0MUr8jzn#5zQ#7!T+r@( zx1C25?sVc?F#iOh9bn=(&gsv#a;NUUqo9g_ zi>hVNUM=7Hm$i!5Rws|Q9;@m)X@SXw4#)GTvK23PTYJ{l_jHjRi+J!IqS+GV*5Lse za_~xNu(_omiir zy~+D`(67$=b>L+pE3g1APGjTV9 zGaEkV=b7*qoQ0q_8feGCxsx|qtcIc>_uBiRy`svk72>ljYJ{Ct8~SD94YIHX zUXyHjU!D=uACq0>3!7y| zq!)g(x37B_BZ!nynSRA_St`r<=9W+A!{ zcpZn}Hckt(Q^B`+qpTY-V~(-sb$FHwypJ>ONl8;5<2;~qnEN1in=bJ~B9Lt-f|SJUbGuAeJ> zw#eFjKkOP?72?%Eri?`4%{ks&Rp(_qVP|7G=vAq*CpnzX#jSpyZxnLIER>v zVX>WAVD}0Zb7h)vbTO5)nYvBI?kpvSwn!LiNPvK6L-6IJeA7!$81qgKm z1k%zD4vQ&DO(uRcA2@GH(sps)Z9|hS>ENjI%tu6i2kQC3{9_dSg0tfDfN=yl0!Bnbb_*(FD}qxJ~V}(7m#|KU}~VYtY89&omWV`M(NP+IS@{z zk9ayRw(EOAn21FdFsqpyxtoh>WADR@%1l{{oPCZ#Y{Y_(2eO{ntItZK&LrQ}t{o{G zWZ23GZD!@cP>mgV7u9^`SUuI8u1+WkckX%=)|4Wvuqt;D}!NVjnIv z6|#l*D0iBm5{H-|dt73kP<`2{)PJS>p>W?m1RM}FZ#j|})!?SOszJ#mscwy;dU?U_ z57Kw_Aq{|Jlb3PDFC?us<1wk6=5OP~W@}o{(XX0|hHHqaCKlTn|3GpTfMl|Rf!b&# zr}DML2V4RM1r|+nFQ)e?!EF4UFmbX^Nb>txZa})e0)lvU4ye!;fpGZ^(L2B~AAN*2 z!BC}Q+Ssd4m7QE^L14b>TrRy=&2b6m!Q8*H+HbMgZ#r-mdJE*a82qT=EGq6?6>%g5 zaqcj_d0r1^v`piw1hjFFtNenuFCGeH|E67@^!cEhw`q(Qk1-wCHnhl3|R=LR8@I;K!pp-BD9f}`h3-OSmPM@i3IR2$35rqqUC;^_XUpjt5E+9^Fjf-@Yac=dvDv=8yNU+16A@j+vLU zZ~J}suaA?`vuA|`HDriakin9&Ta=&d3sIpX{sYG@k5CP$Lsj{r4LHXJu$|v8jUpE6 zTzUg=wE9mnV# z75f49}o z@E61~-`{$F?gTU|EY;`tI|{L?bo+Kt8C(2tPmn&;5|&YlzV35wZr$8+-;aKiSWfLq zRj<-fc%Phy3%+Ry`8BS=Kx85F$+luhlG9DGSjRX!n}9wKrXD$DPFk%TW1}}`Sp)Ja z+fhY>=KH3oQxJjAw=2_#Z-b?)Q!&({EqFPTUVQqzUF@ev2pf>c4ejOkDSOI6R>oe% zFKRKV(;&{cGLH^6e&{#Js%`<-+(D|1pZb(q(?7?64f)krT9g()LFpxP1^VAeJV1#6 zX{xQP@iry-^L!ZAu}r8uivN6D4DYinlF=5}9_CAl?ODmy*VFWMplM`;MN^nru=z~sS27V78-m6nNT8X;)~<>y%1?Jmj?AxXe_tVi#2o*R`Uy_sf+yc!8iGDqm-9|8rwfe&aW^KvE$j>|JYGL7z|8*y+h0v_n6kFb3L~65LFF6a zp~tI4N-g^~npvm;czyQA`nD2wJlHxq5yhCg4o`}fxiofQ3_|ZOXfEO*yW7|DN;P<9 zBr2&_oI#v9>}vj&9N2H)Z|+9GP5MLXkpNqAI}=7f_O5RV`gD#cl#tZ}pvs1vjja*` zvW95P{h*b_>1gw&!z($DWlgzdvk%i#xYI zS%(Y7LWMM_zN^FKy;oV@lCm#Ex?|l`fCs5o$hX10%@1?-FVi$GaIDio4hyAp}xodN$Y4qP#Pq&971--1XiNhs>wjp0YMY$?JAXl z6JD?V0=-CpAn(YtsQLt=#QHK+;eA-n;>pR54xYwApeo$LqSJm^j|IY-fPL9~tP_SNpI7=@vHE~H zWnXF-LS?`?)k|~kJLUSmg1W=aN>O(TF`OD&rh;_d=?ZYR)+*bQ)d2TYw9W{o<@?sQ zX%yI^4Ut81DNVZEy;6`@5bf;tqg)H|R*HE#ut?-|sl$1v_p2AM9h!;1ulz_KO2vZ# zyH{#}odDE74xNcqI+w|Z7I(c_%!^Y(vLw68j!A-nNp-wY zY}?|X*Agy4`bC@XM@mv6)s|Xyx^SqFm84B!9r$h}j}(2UxO3#u3tG5W0~t? zW+Qy6YxmZzD4%Ok#cc&vcQ*vqwXylaZGo`vP3vg|ywNhRRnp=N3WFVvh%w2X*`_nh z7Z}F1Lgilp>fV;peLy)Fz}r$A#1uJKtrdDHLhlMRDHwnr9-TsN6y`Cwix3guYd{BN zgQVqbnCRYAnQKgR1e;QraBuCKMZN#5lkWa>yo>Gn<=Wxy$HVCrV$IIZ(#{1PL!d3> zfKc@1-U7kfYv0phgNbgN`?VRD4#t&$*Zr2ffTtpYA54nH?RHH;2d~%T_D!Vc%f2ME zyY!|$GJhs=^dSP5@Dne{N|>S6*w6>9Fasom;}4ri&WV-h#goA6$p)$c7N`p@_u#CN z%$s9FBH|04l;j}^67A?>2)2p#^ZVJezzwyfzJZXjoRpaK{lh6RJsiZD>nr7ZLV*A$J-x5x7h3})KyXw4tyT;+M@HBD1W?bjKZp~v; zIqCNOQt!Zkg-l#JaF@xrv?4!jHQ|$7LZy0`Yh~flC{groU_Pl|g_*sRtxsnF1a$d& z4)tjurw?|^z8SfXj5;I=nO67GIBnwfymQh_JRdguZF1KgXz(08!P1^eTN)m`9s8#d z=+Orj)Y@X~G_}R!x;Uz&7w&FzjUs#L66`sd68qdeauGO8*{^-8sf_-FN!pzw7Pc}A z*;|&r*w|(rEAX7Kp~2n80TKbuqSIJrEtrPNEJDL}eOeHL=W)Ff88_pX8bTUMH7~H! zcfg%g;OnZVS#;jt7@BGz z^%^5Xm4Ed%iq@9V`K9YvLcB9@Maw6;d?8`LABM{zi!|3$zH?L0719V+YoOagg1S+O z{SBOJ_RVTc9Y4QxYqsFd%p1)AMZ(`ViqBM<{ApZIRr;QOBqlFRMhty6K3K&~0s$K5 z5Wg}1-VxD1>Nr0&*Q#?Ac=ygJc zc1eY?15j1uOF&VMr)Oj{!dtneEZn zTY|;6!b@x>vr>*(;Ellbkj(~&F}P`n>c4l4-_^`bHcakM#!@9Ic8#qsKUlWM`_7jLd0rM|Q z@GqGEg89Ea%vEj#H$#9G2x>eaAoxFe3VR0^OXFX2v{m&r^A$$4c7jv9uyf57$sN`n zIWr!Ruka9OdJR&v6cFk#^@=gt^%snbIH#X1E4%b=tw7q&XijmLK5ti%Stk~**`cZ@ z+6d-lCx<)mW%?0e$F zUcsGxX9^DZfIW2$3Zk6E2DUOO~tFrv3c7! z!yuLPydFx1FnJ$N7hkB(!QxO??0V|NC zx9tTlRp{eDVnEgPThOOSm2C+=TrtvfRA78}&meG5m7ae4*8k?33R?p~fz3ERF`2d@ zmRHcYNi{Qw5}TV?h#3_usP5O-nGH=PF*Vvo>~;7UHy{$t2;2uQt-{;6Yz!1hTS1YJ z{9}e%C!!r>wUwZnE&No7gpsoe0Gn|lPV1?Uffeh=j>B7#cUBeOols$_bU%ts60&mPgI71e&+=l zcqn#V66R^dJVuv5$k_%M-W~M9r@izgEeO$`cwddfnDf9n-AepMm4L)ufMDW*?yzPR zt7ZoT3%AQGPIFaXGhsC;jn$}+rTDbx+b}%&UR zrffN=r=O$>ynniUK|Z-d0q=!Y7p2fjPh{@U%mOUiwg+z#q_|xNwGdZD z&2*_1C*5tNP|^rXP(II>a1m%|NX6)=ZS9NkQ)j1~rw$cKM=dj=lcdK8ap(%AJ(`f=r z9CE|;PPvNAfaBSsCrFM?}xJOj8srlZh5w` zShD&q^*Upv_?mdHKjm9>k}Jl72V|?Iii;}g4%bS;e!;5Oo`E)2E;dhW#HlZKf~eFv zbnn#_3Ve;?(+!Yu{`?OhnrzFZ79%^%CZ5f_A0&mLxZ2@<-*LH`@VW3sQKT8+(rtw$ zo9Dz-@lGNl!-0A-6WzH_Vj9vC8)t~*Z3s8o#J{;jVBUE(+J^?fLx!6X9K}GKr63Acwe|7D0lc4CJ z$^ixlaA`SNHzS=~_}onDZHn|y7mE)A^wu!6NF<659`qK51v%+bJT4o_8lf7oF$a@< z_Lr8&oCs$P(Xtl)mJHLGXL1D~Pkx3lypVM9(q?jyGU;P2+n-jV0@$?5dVx=9az&|q z#-`}u!rGL@nDi;B^aQ*yX)wcsjusJk?ueo8>CEXnHTjG^c^21DWY&M%7({i9*}ekC zTv31$^snZtzcwwyl)3KtmD60l6;XAeq*V3Y zi8xg-re$KfD4$ehq`b1rlf|q-uc5K@?PcaO56K=a4xYjQo`(+|a`O-P#A-o;qVnuMc z*a_!eoP{UKUoFf53%RzWp9_ukUOYd{i)hz}*jEv4RhDd8w`-wC%^4Rzi)?l2_8LqG zf~(#&8n~=b1R?`pNwHeLE4q@l6sqCkN@dAPU3{W=5N<)Dl0P~eW|?9ajj8o4U0 z3V!t4HIBS5Og?MZGxQ?&!L4q#jB&!w$m1s^$VfA-isiv;pWY%V_Jq=MW@<@U)*K-` znVu4=Ot+`kH+D~ZsMaHs1-l^D5bFB=V0UYwi^*YJe^5PkGwRvs_BasR8=a2Sb8=>!F7qPi#|5ESsn~+9x=>y{B{C* zrT=3!0g%5;|Mh*Se@vVJ&kX=D6L0}~M*y~lxgwd$AWF3i@!lSbvGj?vq#hSw-ODS+ zSaobHJ3s+%=l~eh7 z>)tyR#f4Tf+Os!CnQte`Rx-^M%4eEEDtWg-8|clS-P?v)E#r`Cs4<_})vaTb#7|Tf z9|Kjz@2$ruV@(Wo1}n$FB7JO&m8qDLdv`L=Rn%cTIfPtRD+Ke{q7(+)J3RLU{7ySQ zCKPF%OTW$G62z~gAiB7Mms_9|5nHms}NmpQb$7!>#@vk~Ha? zW#q1qXB?16D<8B_u=m+wkd-%lonfS#CB`auo$1y9*RQ(H-`Y zc@$V3iS~DiU7{az;LsFoNT{4awl5n<+b%#%s@@^CC$XZ>P-xE~5{`Q_~H<9zV z6adSg{x!>gjG+LJmP-Bk42++TmU5^7=DAwYK)DC3HtP(9wKkwvyVqG{4I#3r8z*q7JpieLqu) zR%`&TZ}u9PRU<=YmlG>OMYA9nM(Zc?%C1&te4h;RDkxdI+$O)zf2G|6mP_}0tUDVV#8vXE`A7^x4v|%R>xF^`jlV0d zJ~_}*vl)-Hm=L}SvG_sruCa$4alHTHR4k~?u1~BD)UuGyZCXDT(gfAZE>V3QE+(@+ zHx(h6m$T(4x=`rR4Z4nO%~4{vOMON*kxLd*@`L7dtq3vVcz#>jCy`vYLOL_v7BMUO zaJ-cS+q5xPebW!O(t*nX$-3f8F_0!V_|RuOg1*Z!7_;oaS@amiD#nM@aLU^w-m$u|vk_pE=O6|iw7NE$4$*4tqiWV5tINdYRzbmd5 zB4RPZ54VNM$0qYUb2w9Rmz*aJ;J0cI#!``E_aychZn^TOO-ZN)3-yTES?dcd@< zo(X_w>;Gh~`o}{80CUx4Mzp`J13Y-gV2BnTVrk@A754+y0h)+ZV>xT!OJBb8u#=F! zL%JAy)KggHnk(W%BAd(_Q74YE?+JL73TS=)RBCFcP!yo}DiNT| zu-=hM5a-EA7HvE@nG}~eUthz>sxDc_=wn_4toU;yAa6Y&e~#2nzPQ8|?Y-nj*riLu zfaKQ<++s>2F`D=@bMsTC;C!i%ha7p9@VcY+(4%-kX4H!9VJ0VjfuT(m&(hOfx9v;# zK7cgSa?e}zwATgWAl<YX*sP_0;zBo2Te>*DOx~@pEo4J*2bs`?ropf;Lx4l* zZ!A}BdH7$07e)|YCC_$|GP>!aqUc5;P*+xB(1PG=}j zT<;vB#&_O3L_f@czGW<4(L-+Ds5zYa?$B6E%V5*6v_1;6&DTZQXfJ%z^?t08m&q@K9AN=d1!>`-8!&Fux07r+v?E%`37-RaEN~RhP9hSenZg&9XiXK?{z_rf^9W z5n%~V=7OoL7ID!mT|i#i#V11f8u%3xe8jZ7MoAWDE*44y8T?@+rVhnso(nXU9tv7R zl=H6p7J(=Ai_`@ypbTM++I%fqUcF`e+wlMhE=PWKz*U36B zqKfBS);-;t^I?_)hIg)`B&Wyr=|f#+3-J^_b{bJidF?kNCc_bVASrtFSTV9e#Hn?g zm|$a9dMI>LWp~|Vami+k;Aq(nO9$az9ggF+IuM9p@X_sb%=4yxFMa4f90X9@cV&GP zw*RZW^A3tS$>KOk1Ox>H0m&dqQIY}+h;tla$iYCAoCRjcK}myTB#DS5K?y2B5CsGd z7?30ef=d)(1(h5O%SyZ->Scc8|qtvYY(#y_Yjt3TDR`}Oqi_g?q+Y2M6u-Xh^o zAN`U?)c@B5H|wSR_2yab(I}JL9;i1eQqCU8opm-FBQS?Xq%65dMEbDsP><*vr@r0K|9qPQ7 zC^(u=ey?NE6LHaSV3}KZztboUhe)H3P2;L)`B&5``a+|30L7k@@3dEFdyLw<(4ylO z#+aHT$-(@LHM&OCRRy;^7mm=W^dQf4lBl`biRyJmpIt2W8O$!Z`qD(mv@Y;k)~^i5 zpJregg{1Z8IMJ2wPwIF=&k;t4_fFFU99v{|#UgrTf7-44UV*ZKL78s^70+}xFUuf#?JjZ`6_h<1m`e?|*mA3bA+!aJfa3~J)@E}NVh*Nl& z)zo+TR{U9dOqHH-QEIuj2sM_<+*(#us;<_mFO*jLa}e3EoSewM_WU{}truL3Og4y& zNKMM5QlyVB#rT|A=k?ucNwzi(Zn_GHVMJ&C&mXkgqvKVs5!+)p)EGN7rk+*^Gur8h zo}gn)5>yQpPHEQmEjhy%%=bt)!MND@Wf5i}QIg}**HiL}sUMjY=x$O8dX6e8yg1%` zU))rv%7~xMhM${obL~rGr`V27zRyUfBYSAMyU*OGg^4mu$Bpq;UyE=! zCx0kgw3U^sQI*u=Kr7VSoGb0#rFWke(5i%FUJV*}Z*l>RKBNCmDUnRi>**J5*RND7 z@eUrNnpNii%-XWt&!P(zweW80*kXu8iz_n&WT!I8J>k=0nqOS-KY{VhxLF zXzs{XyN+lW?|!uSJR;U^(X-r2M$1fqt@FlP~FIV6OPo`)nbU`=itgdO>pa2R@o4 z7^JH`3k<8cl{?p7|E2fz={eb2*VX6D!&UO-=65)&>sZDDrP_-=WweosFt%|w#m}^1==%#XOXs8SDvq(I2@gsb7*idE{Ro&*{@HvOM8;{tNNFrxwc5&%l4g8AFBj& ziBKhF0rq2Yb8-3=dQWov^V$9E$2cQC7W=Ok%Uk%w@*?OJ=Svf;)IMq5wO3B@5Jr=0 zCvY_8>}PMxddr6J{@OKm=4`T*V^>dmXvv=S#`@X{a*hr*{&|OBGPI2Dy6Z#tBTi*MMa3n1@*dnLnA)Cd%7h(}Lzj@le zL8aV1H~wzTWJFAR{Y1oGKY#QDYo>fKd$Zy>R8(&sheww)`~0C+vSRTI;L>j ziChaVi-O*SE<-ac@GXCahVG$x*tngx@$kT@O99`HAG36DakFZ*ZnZ+%P?!snl&LW@ zFvl=c*T)A_)VI>Nx`kWp+V9RGOUg?sV4y-3-_%NreL^;-Bq~O#szSb>=UGG1A&e?X z#UU-03Mg)%A4WlL$2CEEMk$tctvz@JjUgss!Fo-sNv++lH=hrT#(IS`l26f~Wr)Jb z1U;0o_7n&Ou3*S3{}OY=eq?h3-Z5UoK!zfrO+=8O*%8AxJxJ0RVL2ynW;f;=pZZvs zS){S4r-OvamD!c~xwOL*SdcQ}De<<#sgo4^l*j2TD_w}$sEg@d6wCWCtXEi(SGf{5 zl7uxOC_JP>xI<7S3J7f~QCE#g1&w0!@f zk^Fm^bK>u1j>L~_&gS0$!hWHp@R;*o{|WehGo=3>X8iP{n?c~lf^U)hP+mo#9r$*Z z|3y3SJ-GZY+9CQkSs(cJ#Q*wyh(<4QdO?rM-p~Ui9aOf;8fB&9hC;iGSfSi(Hs0L0 zZvDSn)y6aHr9`Y6sTh=>#LSh9)oON~E48S`L<#J{Fg6(@o4qDn9vtc%NGssj6?bdj z$R3K!OKCL`{mw;4qguw+Kcofnt9qfLd>n!W-_g4>Z6YJT3*RAhKh&uxLB~W%p(42F@{T$0SS7E>qyny?9|wm z*nG}Y9IE$weGep=7rr{IV9jugD5<0LOaaA^NL{8`cD+ooWv0U}x`802-sx%54A%2O zuJleL>VmAi!|zHq^pq%|qDf$?Dpa2k zFFBR?lhiEdxOJE9eW8ON$?X$Jq`Ua#9`tlonpKToKen73x2jjR_%Ge_G1{vI#Y?#_ zSLqj?yRImC#yiWBuW*ru#S^Qv2JuPT@BjQ_vAXRZPgzm{CD1wc_(q(YtHYlF8Rr?mM?F3T5%1|(+WG_hBq@WAS zrh-7QoDvLt2C4RL?baqB?p_5>hZO{ZHHcu~IPDHVSk4m!f`xlvAQ}A*Kv)_R1cKFW zU?3NCN_VTtxS7E94WxjTMqtV$BVGz_$Uq8M$pNNxKw)Y;eZiRpQow9FOt}KxP=+XY z1@=J-sAUdQj5xr)Y;pxymlyHEt6SR(l44plUV@Oyt@D2y1AAKv04j z1}1aw0Nf-<4H7{;XPB7AvlDUqQ3S=2VPY2VPQ>lkJg77b6LTS{)othHo4yj>MGwmM z!o+)gI}x{E^`HhWOuWy(6LI@x4=T#S#4;!vwY}A_zAQM`pgb!~tb|_Sw-cbSNabV0lY5W-6k_3AL%9X&FbXoiuyrT;$NWd5!c^n4RlK}g%y{k|u;Q*kk zeCNi|tAdw;cM}7zuEECSsNpE^MK;h3@CFRrG(`*7bfW?=&N+TB?<$6OGX`%jz!+X# z{21J-273dZXNNHcr}1L&x(IlZ7^WOLhnIraL%{Q!Fy*rWUW(Xv&TyhJ4g>lL-th%b zIKiDUGsW8(+?ERtFL;Usru@SKF9r8Y2~xmRK1?C8#!JB^_CX4m`GP59HaH59EEWO2 z4L(6Olf#M>eAarxSVIwjOe=v3gLBF%BYW9RsalvP>tJ@DMivuB0Tyl|c=r}=8 zTsV_(XoVvoJ;mh^K!1f2#0Dq5dy^}p9qICI1>WJrGj>XZgtc_ zf}qgzC3GNzaO!OrLb?iV7~e&`fFg+col8{$O%N5ALLhtumI)DI>YIF(sL_>( q=uhEwuv1$@oSU1YJvKG}J>aRMz6&}zNJMlJ`bQ1DwTF0beET<90FDm; literal 0 HcmV?d00001