4-zbQ2%wZmwRL@JB>{j_X=M`fw-R*)}SgwlXmurd2JILjABsPUu= zNuBDLlaaiNIMQe3zmbU7cGA!>UGIk?XQ8L$>FK3XML^ zk2|VPI0C3_wBec;5kWfI3TsmeFWW|KL>2F8ud`BwwC7a0HE2Ki@(z>~!obUGcsOop znouNN@98-~>6vBc(6cmnn6`Gp!P9RyhRWt^WBbw@e4LRsl1uX{45NB@){E!(w!v`y z>Cmh+&!+_5>N+EG&l~HLzO`dP)$uT!rg( NZ1UERMDg!jClga5w0W zf$UH?U*r5V@fJkvU$j?~nw<2Yjx+Oqk=cCQ+n|T9A?`ZFERiF_c~h&eH%J*yfWnVF zrQsT$HBtuE%pAg2zzg8RSPm$wPCxn{{yYONQ%W3#VH2rJ^t$RhHZNvq&k{fJK;)v?RYj2mH?#nmRGzl%&| znkC?ADX9)Np-}RQ*_dLHVqkE6SN7>|`M^-CY;wqw{x?J?ULd#@Xi%&n<1O8xf*ZWB zJ;RKlZrSN0ffTPf=dzxFWnnRBJ48t90U-F+k<8Oyz6+t`AT#MabEPCD?fGrl`pj3N zWgJxwEzh?>Jj>F1woALeFsv_ar8#}>)rGv7B6&HY&=gIXfl!!jv<8l^F?SM~V_fDL zaEv=54#{s }vf13MlSs(0J@<2+9D)(-l{+9lB0Nr_GBM|8M zGa2j1SD)eB`4&BK5QP2C&b~ZX4cL52pkIDS&kZ;}d)ZvO{`t_Bcee3(Bffqp?=0;E zF2XroYV&~8Oe{=5V>Pn(0KT!oMkz@%ilxmh#f`+qEb(Apb6GxNZ=T)XcKHAsy`7y; z=VPaNb-%=nH{J*NZMHm2mpG9g4nT{CtI $)*f?LbyPq|rV@%hsjK6sMaG`#dmYcy_0 zu!33cu~R*)(W8g9T+?pJ&zObUhm0_F^3c|OzPg4S=in9p$VKa0XOW-Zl2Fhhh-oCw zL&MNR70-EjUVC^lGG&xhK@BOyzhV+6$ o<-2zC{94ynl-4erZUKYtVNt6Y*9;5F%@C$l zL4~8>txcj?w^N^b?=C=A1#Z8#NIqEAhWz^ie znsk~HFwk^G(6E6j6QB7}(T6E>T@-z1JgH3@^;3=d4Ph1hgI_q{hfV;8oUnsBhO8H! zt>&e16Fae( 1d|l+^VlgGZ5Ng%Tdy4yoXDD?jye8t|eJ=NV8hn zPtsg;316cN=FRtvreF#ECZy%si~trFWPBbp0+Y^ahr45XRXP*4RLbz+lCcreV^n9v zl=e8mxBQ;b_gnzv`ih=XT5X!Iu-(#zRM+-!^uoAT?J7P`Y?%Wqiyhw&@2yTght(-9 zY%ZK==JeTk6o5`gM>d_4er=(;O48t7N8#dyp&SSn+;}(^El=}fUK7K-M2hEz@*mA5 z8a3VExQ+SP#~*L6>>^E9G#3eS@~}q}BgJ4Cb3LDaE=C0k%fDVAOUbzfeo)Kxap1mJ zMb^(MQbY2JoFz+A4`ycg-Wut@%+p@PPl^?EBA4IN^Z=jRr>)3$$(*59%^MNd=ObmD zLTqB%$hv10R8$+ih2{J4eF5y6qDSHCUb-KfnG0`az2Nu`j_(w5HMY;##3Xw+mo0ab z3fZv~Di{@TM{_{Xy_BG|Z81tg=q`^>u1A4MpiB92HZV=v-(v8GTPr79IvheMiCd6( z#~XjhZKyG4gu_7c*vOWD{@6G&ZXGVjB9V{#ekh$X=hQ1lh4n%ESSl(A!HVHdtk^M_ zgqu;{%gt6P=K4i=;%x5v7S(@93IfA>hpc;FeiQ*XXO=o?YuP3XXo_dIT>nDC7XAp) zOY!8&9^o7I3Zux s>3JlJ?CjI9em I9_Gi5!M{^rP%-a9fEu)b)fP_J;)nN3z?Qwgs#w-5O3s>T&) z!blvbZ)AN` 5f7XA5L*M4W%^T_5|)iQ6O>f0luZV#c3XQ5?uj zQ ic>9m%6Z><~ P* zQ2%s^On{h3LMvvD7Pkw1#;nTI1MVsA&Ah{Ko2X0GK#j&hoY AnB|N|^ zA;JhT>}wRp9>X8Y?L5t14LnklqEb$b0srG%v C zP~m{qzx1|rIki-reOC3vD^1JRguezjmu_} 8{tZh1#Wzw7Xi)%ZrGVVD z*X3J3?*B=ooxPmQt=#RLZT>FczGO@!?eM*(AkdeuiS+t{`9v$n*#HeJ0vU~Di06mD zv&O6u2z=@O 9L2Wv9RyWOr&sxS{QGaqMfHCu0P^``~2mj2aS>@BVR4>s{ 3g28zEMG6s8|xw@ z p1z5rYm%4G3~NdPfWma-O7JXIw0+(xbEi7d*gki#W}EyC z?Ay3LfvA(J#-3`_$C_#4ZX{8%Yj^33sj)>C9z!8YDzK&60((P%9!FN$w`(-D*5mD% z=tiDjGbrqYt2*_L*2g*b&6cB70DQ9y*1<&Dr)uGPi~#8c{ zM%P-NZk{LcX(*?fXb{jktqOuSTp+5l29}k~n(=hYa8);5Or1!K-}?bjhsM+D(02(Z zoCot1%=ndq0X5MZ^VHSWo9JQjCkoXgK>l=D!+o{R)eQZ?Ax;od&@*XOGCBMeX1N$! z8`3o#i1?G~Ggof3MEpl 1kr99fDf{Kiu} zBZJp3I>oapeXD`xnoq0yi`IIJQ1trxEn|zteV6!Vmf@}F{7=pgJx-5 l=>zR?V~4#BI| z`Yqn8ow8C=(uLBl$3m(Wf3YRsF*OC-E$KOwLJS1@lvhAC>-mFJb}R~wL5Ww=DZ5x+ z(CSruK!!dF6&_xoZ2;M~R>U!?(m;T(dE>h*eSs5WqHhA%z{HF(wv|ajuDCEeeC(!y zK1W^^^pLdhq7b=2(jcRmf|rb{fG3?4SMiq4SJJ562fyGjxXF}K%`EjE&%keJCwOvi zq_GsGI6LrtzaoCy3zP?=#)MU+?N^rKjm;oa?ieAzO$*D>*SR1p3{1T6N5ce)^pI(> z*F!CJn3>c$);%WiC;38xg+n%=K$+j$EFzerV7c1_d7Q_PmPm NVhsMfua9+pS)>F))%rLX`De*y-QRp$+-ZpSgyVMcHq;alFBx XPdo^OS5 zKecw6(b+!~Td!zC3b_w5t13`3?}@aB!-+Q%?-DuJ*AdwSx15L9h+(Hanc&dyeA2M2 z*1?1Rtc2SEk(r5T-`Qdg2lk|^+Dyhj&(~t=yRQ*;gz`S{t2c9UMU4Y?%YF8Qf)A-F zmrGRwV DIoq!WIe){3Si2D4wp@YZoPS+6J zxg{V(CJ*UTx(tH_`@4!Ng0I0}HJ-A$ugF(?;Q)gr(8ba1Zh55|oOY#`c4p&pv8~Qg z*Hq>C(2%y<64wZMo;Y>z%YA(v6J46h{)?Q7)=JlUB9%C5k l$4jP#HOVA^JDRfKk1~`<}sNt1JKE~jre_()d Ymv&zXls0WR0b z20~C#AIpKBo71qV7McvB_#m?kw?efVp~2p&<|>YkPBz@)2EdJ}b)vNx1zw=dAX(@( zL+yg8%XnQa1E>V4N)A%Ie_p~ j-uJ z7Wx@G?yGu3kDNh Z4m7pdx7_qf7r8DN{xvC$}c5pzgYe85`gV6Fjja{q< zDxO8N2bG*&fE3vu0<99ax#$~7JV)$q*U#qd _-62_+i@><0s2~*4lDSp+kePSTUg(wIg^4y2S1OrxwF!jIQ#s3L$`m51NA@zTC zktF2mub$I`@D04`$#jU{01`dvKZ*6fG44Ol-Ohn@4 -`}c14zU$3#E{U0VH9VsWynfAQBzvf5-ZNx>@Rg_zxn{kWT#_Wv{>c{B=h7OO*d< xG2M{PK_pQozCI+V*9vkqcNbR=b~9JkzcYlIG93J0OQP39_w{OL;B_*A`hQl$69@nR delta 10951 zcmZvCbyywGw&lS&xVyUscL>3q;O-LKJxJrh33~A05ZooWy9IZb;1V rQ9+*VGUwTgM6m2rEz`pLxL1km}-6lyjoLGH{I@P=8XL= zg=8Twr6pXx?~d>=G!rJ)Nw*4ZeJ7Tz#5Xtkz2;#cXcHYC-9RtIgne)&Bvyv)Yot`< z%t=NuF_x7po(P}6hsLP8=E;dqfXa3r3P97_s-_U6ai~!6;yl2rE BNrjurd_mD7lPtS(_4zrK2*3J(ROjXr~Y=`-yZrNQSU? W^wow3AE?eEnFt@q;)qJ_F zyiIGU!32Tq_Lr!`H`xXJYV>1mu^_>(6U}TeyAKGE=~ggK{VEIv3{Z*gi5rgv0zsRC zK$veM=jG&T!DiuP?%`nR=>E>z!TwZF*KJM >?xjFLk;UVF_HUSgw)XMF2McP% zxipQ6^0qABg^R3mpwp>~OSK%!JoQAA#21KLkvTvd E z{>AEJLVbO>v!n4sj*K6Za0nZZtIYLs5dM4*7y0DfnwBMy0L1By@C=%APz@hU)NMa4 zNPdBDG^a8!8jW5B&$Lm%V*Q-+R2z?zyYlIu=M_J#LWI&@WpHUL_zk=Lu&$cltd8X= z6S=G`w? zNNfgXX?D NL+zP4;BNovc7O5AIz5V}MSJ#yNY6?3mZ0Fh5 z77^7wDV`xUGKvYJ{i(OnSe7d@bT^vvnV8hJtq4A3KXiDh9*144obG1uL}OINm#6`^ zmQWCOwuXGQN^2lXG?PlIxQ32u#wZ~?Y(oTF*> 4Poy+#uwTVAGCLmuVSsyI4O`&wb2R5cH~<6uUwk8d=5(bHXW zW`$7QAal*4QbFc6;Sf1Aq>4-LLZw`oyitNwmPBS?1kHK?YMyj&Af>Z> z6dg~LMy{Yl$JZpkxv}WrLBuSi4!F`SdGgb#gu-#eGMeVLsD&C1z1!w^6i*K+VzeJe zSCQadb9hh(IM=4N^>0w~&6z46rO?qGtJf9mDk0!bYDK^n^~a1N 7C(+S_Knd6J22urQKM#!|x6W%0$S^*2N$nKw=5` z!*xI~1*bqSudT`c*3RzWDFl}EBhMzW&=JwC>%g2Lfs8ym61Abo7t)(F$lkSKAv8*N zQ$Z@KZ+~Kkpe(eXsk(^o>*0E1v<9Y1IDtp=(B(x^nYJP@*BD6DfON~NKmFO!_HM~! zK$5cnUq#BEhm&K0A}6*oWxR(Or60sQ=?Uz6{xDc1WYd=(QE=Z-p#6NdZC0xH{UpT} z_bhNFRKLbn0?!%FXhKF1u0-VY(FNJ=_FDr(QlTU>43kV53=5+*OkF<`4D@#}%ScqR z{P$P!a!MR&kv&c6MxAOJI_1ptHd{$f&q{`u5!t4QygkC&v>|Z{Bay|wpt+>@l}^C! z@e?7>7qNvF(M=u<#^M6x-v>}t7!td$furugB*AUAEFpHEBdSP{m>Cu4y2Ut})>OT? z(59}Dm&j}G{v6^Q$Ph*b)5jcTuUkEdv2@iF!+3^Hv#o?W-k0hHbI1kzC4TV7PTn6< z1ZwzpM6^}@h+NEqW6we>f>a0(UJu}o|8q7&nqz?Km8I|^Xm7pu)w^gfrabPf4K0!6 zDMgK&eedCYDd!|A!?q@? ^8UREs!M;3NJEmPcju`lh$$qcwNhp?zq8KX_xVP#x{aDjH1xI1=yyy*0(-aQ z>t%y^s$KIRpS45(jNi`oKMSbv+MW{UeuT9D%}@|Dx zIYXLdCJ!FE4}iTEx569Fx`?O3hXguqm&&;X+jC4i4bPJpKoa- z8uy!NsSSEWRIY|MW<@|R2@b0^onJWEKRCYHTA47}H*&TSX!l25a$-?(sPv!zd#dW} zz_HXmpP|=(lWF{dv(|;2X{J^q%r8Qo)7E@zg2@Xv82sy`(rv8gj94E%AaLgL=al!s zLLYK0msc~Hp{=sgmzyDgn7Fwwx+`>Z{n6pLA3J-1ylgOD=exu_^^3*4yumcV;64k{ z1A*X>x%EB$iCmd-IJ(eetp(x8C}};g6*ELIw^pnR~1uV|SG4#+l m z1GU3HbaRKO`O8^|V^L@Z^(8D(ns%z0)c6*58%Lx?(WYlV*|!S-iLUexPVKOD!vt#w zkn +PFi3M^W!~r*BR8B z+CaxY2ZoBAfva#w64Eb&`&HT*@~9oX1SHFosmg~*fQZYwGoiaey{6NI5<8H{<=;&Y zwnQ@?P0eT^!WZBWW&`8s&72uYMebSV6-+`Zwg*p9KIqptzlQk|d}I_ d+Vyg}UZMY`G2Oc%97bvUmiP5tBoK4BC`|5RbS0leECxJ(pGR{8 zG%V+q073rNX#-uKZKEO8fqa@$#LhO2562{x`04iVj~W3(6MYXj5d4>tIw_Lyo31lm z*pB$Wh9% n~pXR^X z0`EA%$Y<}$rb>{Lx54dOR>>xvMfix({mBmIFAHU43d3m_m3QZes(Z&s5C@Uc8kdgh zr}}8sI%W^FrL>e!m)wK@FmS}e@yM&-rk*1U62^=&PPxx3c2-)Pb?MvT2Un+d1AX5! zZCKC|)Kavb{z9mv!e&BIPGmKR9eb}L9;V;vR$atkZx K3RC&>Jj0`Evf}r3)F~6ynTzXTk?(e9#Gt(01zp^ zsIX*1@u!5Z<^>CZs%4s|P@84*<>5}4&J3a0l+yU_fqh@* kp2Xxj7|9F|AoAPtSBxEy8gN>g7Lil5@lf4zXk+;%Vv6 z(h~#mT3hYJ75;d_2G)LEn8Jbz?WS|bPM8xZcFuFL#(MQ#p%77p{WQOXPYs Y49Wh0F2Y78Na_C&Sy7+zu1Tt7n;eYicD)|k;;niHCeJIRj9syO0MFFK7#2U z4XZ?`-v&}M`G7UbZ^`c%S?H-rF0K&6u)+WaH_Jh*lM)|xkKHf34j&N#o#09C(L&84 zhTlN?PIPe9S4CdqVl%psU;A6<8g91%-uIIHUesBS;9R<^`3bhZSi8%dU~?=fqUu}R zF_Ixf?(d#UV==p1+mR*?sH^X3zeF)`#%z?RD{s%6sSe}31PcviiYoK*;x#W62Ri{D z;ZLlB=Mg5_6l~I9(Si(sbv6bf7=$N$EU7dJ=UJRnj;zA3dZK79NORIGA(IEoziLnm z(D8$# OLk3 z?MVJEy5-t-l-6$?*|nNt8vPuK_|Xs@F94 ->f^U*l<2*0V{5o9;df(ayOR?k}#;y}{hux)z_R*Gr zMv}Gn_*H+2Sk{q>OJ?^KGjMZ(;khLvG{$hV=!z_xS{!nyje0*I@q?&(58+OPIa$3Q z^y6`_FhLiOhpC<0_txu{*1F^$8`wIsS;1@CY11+JGn|lL=~cvkfJ{NMjZAQSb<-pp zJlEkC?k*Ge%Dl |L0j%H*^9i70>EP{ruqC|nYeTw%Aobm!4>gHQw+$K|nD zJ{JN=SW7vd?8zNWMb0M4Wqy*>7YG3l;j&X F;(X` zqXQ3!mlKu@Yr(e`6Q!&tG#Wu!#QM3R>)q$x#=quJGX8isd~{fqv!j=qp3h`) zC9(^=g{QBtr#cgHtGpNixMFahkEKOZS#)FZYAk(KP1Fe-jRT7rG9ze^XgW3=65M|B zb|2J;;7SE$;fdgOz#>lH*|aNf=1a)meI}(~O*GpEz1IQA(7taEIfawkWWvWQE#BMD zru7#)=nbLcYbJ9F@4zdWbJ=_NZQA%c%rdBonYlgAek;GoAu{E{0(?AsRe1`$hx35` zc=CMfANvB954G%*(d{^xQ4{IOnijgyQ?fz*Fj@&%Pn?6uG TB9?;sk2ng2CI(x zaQU?36NvyJQ%NB+Q?RAIpzY@q *vUatx)0CUW)x-G+s_!+^mFCc`M_v>3RJXNa zaN-Rvf~xG|kt{b#?q%X9gE35PqNT^0N>1-tA?|9N&x`!AFWo2!_bY>itQKeKgWCu< z;UPfCHpd6zp7da1BjV=~A;{_^_GU%+aT&JK-gMIZ7yk0;HVWBCT*s6FrUgM#P*^a; zV@_gGBDu{136ev@cEMk }DK=5A)avT)+8@A+ z>EqM&?8nKrZzn?&`}>()0s5U!&l9u8kWJ(2s(@CXyB&&+Kg=8VNzeZLC~JMD&ip7F zuj~)6G@G7ZM20Segc2`kDvegb@b^@YRmk_J6l(_S8A@GozF&{yw{t4%8_|ER2+E#_ z>D`Oz!H71riA+ytuQnXghlnk 72ZBfk w}!mHwm8dm8_cI`O2Wa8|a4D2XaVII~W(qSqm=P@lAU?0M~yaVuk{e#+3X1(Hv#} zO6-Za{Pa?tb;M9>R(apupY%ocbeN3n*;la~4`w1FEM y^V6w~7f^4KAeC2W-4Gme)>Aj}^kjPriv4gutmR=vy(qODqZzTzddORy zi_5z}%5YyaU5tAquMS)*@3G~>zL!rV ^ zDn9T?Ya$@Yn+lGToGt+~eb|~HLI8|87b(uX7I`=bBcPx`B4(3a1ElU0sv!PislX)a zd3fhHzvoaWCerN>(+Tq>gNXe1{T~PiErg>K;TeMq$&4rwDp}*54_joCc$K(HI8x|u zuPdF|wloy%{$wOGtS1V9)+LpJKDCd4gK~ )^I@$?D%U%Db3pA|`dUJ@-S zIk4)Q$&L|zAvEh{;(md6nI4%fm)(-orab#TkjkPDmQ*@1_W91x6wT3DBu&wuvM=iS zw_RhK^Q-e#db8C^p&E;d^C5LSm}ytT9{=dR`qm^|*gP^qjt)*gmzwLy^znAgpUk1K zL0s>Xun8jee$+b^v&txTUT)K@G@%?dRv>n5Nr*`xHB(8RaIz@Q
8%2e0T_UCNgl-GaiwHhKfJTI|AFRk@6C6TI z<4dF3UXkk~&vHLWt$OiP`!XysWEd3_%YF!5c5
K(ZXNzu&w)JE%vAg|yTnc+Ax?~SOU5yys zk?w}?jze-nshR@<*-^WNN+uz3B9{eeT!E1eS! }>4&2O)u=8`(U5PsE!{+u_0T?M2GBS%6 z?W{mzO4T)Eml3qE_3XyO&nS91{#rgh7V$_J;f(o_DMUddv_}*SWExw-QEO|+1VaV4 zHxDj z zZyyRnmDY?&xsGnjRa??HC5uvid2*3?2}6Y|fBejCAoT0iLjpg{aCL1tR`&(!zu0QW z>=%@ibWctW{6A!^-7WtAl9lTpvR?iVS@+VtO#Uyjp5nccwWJ5dXAlcBNfD{(1O2Dz zzUvdnA7L{pyq}!AP~vF}+U`MEcABBJdEnjtwX0-Xn>}D*Lv^Hf%~5^S`JG3Mgy?0o zP!X-=VE5;ENs _X2#F$cLIfcI$$0z5=?X z@3ukG9UpSbq=@dR4VTvn$r
EQN09DYeEz{gWqi1{^*;DJ `x3$6PzJU zSf{f!*j4^ZC2f1(D*jNlZ^YB^+pXcSnD*d&cMo1mR|O*F_@4fNmJ&&jwq)i;Sysu2 zO9g=4-xdq^9RRmrVhtEZ>3g!Ao>z!0norj~mR(;D=ip$Vs7qoq^FSw!O^K-pmvnpK zw6 a3<;lCPCY~C-vG+);8IxMB0a;@e(ZY!2=|90tQ z!kcp}o!{CQd1udFX2ud`yb6=jTWn_Ba775Y|8rICV8!)WZ>o6rwIjQ{_x+Ndn^P+A zufG~Vpf_PH1Oo!?p@Bdc|9w(pZE0#@>B{lXLCqdS!D)^iBk)4@?-z#qg-oTk_|i5_ za-0<82soEJ!3{cF68)z886k05ia3%FaJR7Zak9UAznSV^u@M|LuELkue`fZrNvb`( z@%|)y<>)Y_W1&>4K^gDcRKHQfN(5k^f4Nef3V1m+sWjJ@-(4EQjJKJ3pEtU3zS-5x za|>;(mrKg*#3Va~)__MQ9tE3h+Bhjr)w)C7q0BGg$BhJ*Qh(<^XU`wICnu|1s#Y^c z7DunMOc*y_Hscprl4~DG9099iE2z(&l|q?W8ZBt4QV);lx#T{|;AN?SObC?A=f>($ z)RalCRLDGy9q8T4PH=uVjNeO@%l=%bCRpnl>?USTK;kk|6RzzON{~8aUJGv$ tY2$L}Ii#Mxgr*>4pMgxW3fPdk;4oo$1J*-OST}TSU#9H<6kr@yRQxPS}C;1~o zH52YUl=V@TWc{2%IN6T{ui?_Op-)OKE5mmLsp9klE4izOkU2aQo(d!36 m?n{9MXx*@3+NiKQwKFS*|E)%y)x!1sxF1jir$`sT>Mf zo0r!eE<{1!5g@#;jEaE$Y0Fv1xiaNS3AJ$C@1L^b09BG>?nkPcp-hv~qqLRMuCS zhLN1=af_FXi1A-CBTG>6jlmohvWR(pC~*BmTRMc)!Pz>75X?pvS%SWXb#=Lq-u;%H zX_ N9V?vl>L?hn6B0oi(8TvXX;Ya N)pHr!C}@AH~)Kcf0w)Co!R@x zli5cI-%axcTW5}8)=PVxo%(bl-b=yV>%Zn#hzi{o6*{OlK)(Uz4X|&3djtF%5Z-{; ztU?FQ^+aO%gTA@|2LfecLY}g~w1D8kIzBgJMRX>Poc`ReyY$qf2;xW_2EjP>)2@rJ zIF 9mj)^Pc7 zWds8yeIkxuE~Z}o?yfs-m{ESHBn81a9C`!@vV>V5?7Cz^TBOgwcI 4; fJ~* z;X?EZ;*N=Q8CVC(sB2A@oX8WM6{;ZlIkGxg&YeX8T(YA(5AuSh&vFaaM~M{zJ5S1< zjOvFs(Zr+tdfHoPg_9s )-XY--OcBP> z*1+@S9T%QrW0$iY+ABo6#eBF^_Z~?*+JbhPZo*o$?!c-DLOsW5H!~SVj`RHbK+ezj zGHCFXM6(=zpMtZ@k-(#@(1EEz)GAAuok=C-u8DANpre+3PH%JiMR9d@#V3+~wCBX} z4{Xy`1*cvel50z$G0?<~udf;1V5obk8A+6Nd~ZLsQR~ADw;tUb(k9UP#d{|hkzpE@ z(H0gm;wHX-xFlVh=|mBX6Z{Y+8UXFI2S?QU`GVf8&&xjA=IV4CJXJe4O+tA5jzXKY zAAybV)$@Bixn{(HHymZTb349@ZL?j+lQNR(alzLSm&h5?I6yUERm<58uTGB9S>Mo2 za<0}c=;!1)v9)D+qJ6(MOYS8TBJQibzKa~g`=PyJ9Q@yU#Xk;gt~lEyeVcHfBvZzi z*Ppi58Omzk4@(HOnZf<0W8dG~hiDVIr!N=9c~Ha4!MBE|gfQ1uQ&?+M48s^r?@+hH zK}l!JI^Az+qX8yNUN0!~yPr3=Xr(cv2*3eTpN_{ hqz@p!voqa zKM^$P-TS!D%JLOP9$;P1HLg8qxiJ%Y$!3UJ$se~h9qn*t~Ej*J3dBNg(|MG)=?G+UFj`>}V@_;JtN z)q48;i4ERl>cY|ZnjGgZq)}`dx99HBrc3$}ds8VY=We1CDU$w99{6Z}_tVaSIBW~8 z&7J<+Q{XVkJBgt_$A&Y=t?@jGW|F4ylNk~{j_z_@w_NeU&4{>H>t*FIl_F%}$U=_2 zUWR^b&DwV2f#n9 iw vtgm3j9>KOe7t}{M zKj5b9%WdqUX-= awQu1ear)*MG&S;PU26+dw&)m^#5$}M{%XXI zuotsbwN6vb0nZlxiz_QCQdpj}P7k%S24)^p(qHn5OngHq*VNxLtA}I;nNGevP<7$B zLKFU2Sv(0ie?JqaT^Q!L)*bPVfN#kd$xR7{fZztX#h^y*+Bvb+=JXfxdAMx@ewk@s zD=?5r(AaXsZcb!7OWw(coXCJ89oMWA6Z|GUDZyCrW)xkG-{&Fy=sDdy-^h3^%X ^OrL2)+mfe+KJrN*qh|R~mwPj!b@; zG?%dqnWb9L(Atohp1MxeigcTtTJk;-2_>F!a}&mT@#u(~Jqihm{_>N#`}Nqt5JEc} z&YYfK`bD*yMw1Y7gVWKLO-9SWo;n 1fx!c2ZX z{Z*;QijdC;)-EopM9Zs8o@A6-Sbh`o t zmx7FEsMZ*IiJVf}ij$jeRH{e8xCx^*rKo0JuF?d%?+r4YL=x~Mi4X9AOY9_7) lvNSLt~#($~l#u)S$Ub2(z z_^B?@aOml>w?gPDvhHeO13l`(+3t6Y_}*s_lfCkQ @3I)} zlO&PTfEX$tv!mi+cw3xk>X9eW?t1vp$PKFKFP)w0>Tdx7uk9Bi9J^*s4}2R~9=9#8 z)~Z=FvrT^|ODH}M=6^Do41oEs$W(1@WW}>NvmHza1*m@PWycBIRQijqu$f1k%Q42A zPmn{yfmv`>*@Rze?=Wjb@aNu>7^Orw?KH3XaIM;_M5*`-75be?_8b%K3_A@JLsgi@ zNpkzU!w?}Xehc{;17=w{xH!f7lk(8aG&|%eE#ex69=M!BgK;H!-Uzzlxhqthanue8 zAD1GB9$*^csf4<#-vlp+)Tgfp;_Uf4L&VQcnn02e>?K=Y?*oI8C5{Hi;Lc4X{rgm^ zCai5~nn5%xtbepy>O}5z4S` ;cf-Tymn)7MO;sEI*UYVNywx4hHH7``0zRk3;1@eW1 zx7Q@eyT21vG!b8p7X^UZ9|OHc3vATU`GY^_M>q~W`7wf~=pAQ;8J%{QcU_h1RQWSd zdY|;Ale{_O`YsD{suuxxydm(5M7yE%?gQN^_Qycp{1@Vh&NuP!^%Vy6KPipPqFvwy zXz>3eHA4ROfYqRSAs>6eWW@iOLiZM%{qM2^iRcB>ko{Ya1c6BYyYF9hE+Gh%WKTo_ zIp_srko-$Hds}bBkU^lgl)V3=sE|Og`oJ{A{}L j$+ccFx+z8R4GXOQ@B zgL6tqLLXQdTALO!^-rzKm}J6)525J?GeO7HKvep{Vlb_&Fp!>iFnEx%e_H26APfJr zmZ-o%s#W3eAnXHgt;`1yg8{G@G&M2g+glCO@&OUjEry5(d3@`IIn)M2E_A?n5aGc$ z+pT1X^&ps@ PmM1SW$1n+IVU0t-Rk) z;q=4UVs17A1@7% z??Z2&`>!eTHdvQ$KKZ}>k tzv6(tM{}U;zD8Rx0;~0Xs O3;*rzcRTp)>3;#Mkc=t- diff --git a/src/main/java/top/sharehome/springbootinittemplate/document/word/file/temp.docx b/src/main/java/top/sharehome/springbootinittemplate/document/word/file/temp.docx index df9c6e9f0f9257f9cdbfb27d5dbc845506009dd1..a2d0a64426410cc340adf5d7ddcb534f57860ec6 100644 GIT binary patch delta 1914 zcmZWq3pCX07XQy9{)!35n=l$ 3nPL_3i!Jzx92;z1RBo*F0g;G-09w z`5=%Q00@FWOb)$4B@%{^?v2SX9l68IgFlo3%m@UA{G(5&wMLG_yF0VEvc$%11l{Wj z891Iu)n*XzaV}n0M^|shmS{e0#k?mP?jJi!e2Q2GjM9!B?MtGo>BI&lywKY @(fO9_oCES9JNL3W+%#-0BnB*QT 6^-e%X5`suvG+B` RX ~T^$)3I|x&`$0V?_P*J8xAl?(zCk`8q3Ivhd(ydX?l$ zjOTnj?t>jR%vtr pQ{WQ=kw?hO6N)t4^5B+Okd$?VOP z?{zCX^nFIT=Y1rSX8Zo3>RX}l?`hFtrl7lhL=1~rI-*=&*+O)Qif|3sT4OPd&dt3M zn8sOF*ff4IgGwANcvR3psz%Oswmh49S*QEli)4N)IAYKGfEPqXhDo&gIfXFZQp2IQ zs+9|_ 8;)Nqo6GPVhDq)F?>9XmX|15!oyCfWDLwn*jtE|@L zKPJU>hsRgMvt=RU`ku!}=PE-M{myt|(YJle4@RStrYXm62L@d>7i3VHduPb!;q8Ll zVKty18QkgRhz?qI=@ae4zpftoc=LNZo?W(OT+@!$4{((5RA)kSg&QjT)5|lb>Ww0& zz5CE9*iCxZ*Bji+C!A_?^kCqW@B6qll=e0S{?oYtN5eft87;u7LemUt_m&u6xN@V? z$oNvs&@M`_LnwD0FE4ni(U#s%;h Xbmvt0=)KqIA=;d$16x7-msRUi#|Bf+Du>HU{_1!tt@>|+C#F)xgZ@e1mP!Xq5 z5%&}drtq8g mAH!Mf4n0)0)m`@~^bW(~nXq_zz24B}q1Xq|JCO|9 zt=3zf!&hf jvd*9 z9r>PliDStdyj(aNN9!p*<$vLo*_V S^@c8~ZD;>(&dC;N-7{zWEzoSb7Cd2b{Cm?~Ua z byAp@K~#J!XIRq?73evY>PBQ0szkJo9BKISX+%+ zO1AQe$ 0NG|XNwS&eYF_zE~sy+sJAAqC!|brAJy!cov3uFxF$71$vt>{P(b z%K_<-s+T*g8qh`VJgWii 7novYKhsSgA0*}=YHC1 v%DS4js$?^jBg952~cD!)`KQ; gZEvLK!*g!2_tyVUY=W#2gY5J5AVwj(29%ckC$iHu%>V!Z delta 1928 zcmZ9N3p|wh8pq$c81FE03A+q3h_Rzwa=#2l#BefHmZesr+?|n#YUXHV;;1Qumr>$V zqL@LJN$a+>t(i<(L?Yq1WRpv@gO)jC&ar*A_w#u^|L6I>&-?s;|L61hKktv@dJW@x z3KVYyQWXF}5Qxmks#6GuAtY;k66|ZK!(zgpZ2?v&!hn9 {n0zX$HX!4 z2v_RZ{-t2gXN@lnaaqZqM0d{wP;k3)&)qurFr>*2 +NqP-od|FBcH;WW2s8SD;ZbEtEfMK zOS77_q}D7t3U_Kw3xy$N>4vHpCY$%N{Q2%tZ;m?4=OO2)F4~UaQ7GqF7n@Z&b~+rV z*cx0()#|G&Y_j!3^`!6=mlwS%D%!m7oJsXRJxf6zHjq1O`|4rt!sNY&k46)sZr1;4 za(pRdZixLAp@egcy!yf!-8TQ^1w_T|$$h;ce7whCN@cUUX%k8DmIc3+JNH-?1^{&u z`&$R0u_{oV^%F9f?nETgKCX5tvJlL9ld$RT%ZCpymJGjKKFau~2}xk&BpUuy@qO}$ z!$yy@13Seny~2F_Rl0J>nHeXWUi;a!k`Cpp>#ugA$DiA%TX<-)6DNe1FguOS{N#`) zrmZftz5nHMq7CGA|80hfa1d!7;TwC3i?0H+mkPrYbN|7=PbYU=%e1JxY$$l&nRh@h zgq@O0d=|b=+L>sAPD}D}xn{dOkEtt>zsNnce&nKAID+P3H`^ox$kEuDL#Q2=FFG>) zbx1vh j^(_!JcrgQX; J8waxm?PIBBuV;0}aVeQL6w8v=5m`vU)|65rZ@p+6J+ z#zY0?4)AuLP^+Abo&Mzuo#$Wo+kYSQD RAA3t5HQQ|5uXAUqIR<`TUxhNlobsdYQBw5$RQzse6W<~Z*00!xu u5Z|HR!vFJ#@FB`(-0u_+oc_u~lAvsR^gApbQg@Pf-yBC<_7 ai>e=oN8N1f4zJjBXkt-xRLdMI>1EZ(2nobY9aoq-NE$LG4c*&D z5uG*nMoRsefqw|NyK-K-0r5LNIc_XCw5==erCdLN8BvOAF`EnQy5^bRxIb66Xqc4q zQrF|jqi)5}m`ait^A4*r37pE#oE#M%Rph3m7DuJMt8esePF;2vnVKGJzVN|~PcN4@ zWwsJewl|DD{YiP8RV e*$AXC+~h^x 7G#CzMUY{*qp>561|HT%J+cX&OHVxi|-G+vYJT{z{$400rY$F`RWW!~6 zy%h-AwZ9n5inm#cbR&EQ){K+gNQuetPIjXxjL$D@c*BQe8^S*WTVBIMS^V;6U{@a} zx4I&YC8MfV>aeOoqSWcH2Cb!z0ta+JOSA_{2OZ?c0j xUA^i0=~*&;Y _x5H4^;812{xu!_^_B8W5wqC2Fc-v3EBC0G>F0xkr5! z NU&L2n?3^)Kt?C(mjg9zwfHK3j}t#IAk5DEu?_48jAyLJo(bxP8tQV6vY zDbbxM2vrN}Nmay;Wvjee0f15!*cbJAjgV*U|4$Y#`3}|(W!HiRs7uwLq!a%I#HKXh diff --git a/src/main/java/top/sharehome/springbootinittemplate/utils/document/word/WordUtils.java b/src/main/java/top/sharehome/springbootinittemplate/utils/document/word/WordUtils.java index ce17e9bf..ad3207c0 100644 --- a/src/main/java/top/sharehome/springbootinittemplate/utils/document/word/WordUtils.java +++ b/src/main/java/top/sharehome/springbootinittemplate/utils/document/word/WordUtils.java @@ -702,11 +702,12 @@ public static Map getTablesText(InputStream inputStream) { * 从Word数据流中获取段落Byte[] * * @param inputStream Word数据流 - * @return 返回图片Byte[]集合 + * @return 返回段落Byte[]集合 */ private static List getParagraphs(InputStream inputStream) { try (XWPFDocument doc = new XWPFDocument(inputStream); inputStream) { - return doc.getParagraphs().stream() + return doc.getParagraphs() + .stream() .map(paragraph -> paragraph.getText().getBytes()) .filter(ObjectUtils::isNotEmpty) .collect(Collectors.toList()); @@ -723,7 +724,10 @@ private static List getParagraphs(InputStream inputStream) { */ private static List getPictures(InputStream inputStream) { try (XWPFDocument doc = new XWPFDocument(inputStream); inputStream) { - return doc.getAllPictures().stream().map(XWPFPictureData::getData).collect(Collectors.toList()); + return doc.getAllPictures() + .stream() + .map(XWPFPictureData::getData) + .collect(Collectors.toList()); } catch (IOException e) { throw new CustomizeReturnException(ReturnCode.WORD_FILE_ERROR); } @@ -734,7 +738,7 @@ private static List getPictures(InputStream inputStream) { * 注意:封装后得到xlsx文件不支持“合并”或者“拆分”的表格,即要求表格每行的列数和每列的行数均相同,否则导出得到的表格会不尽人意,如有这样的需求请使用getTablesText()拿到文本数据后自行填充 * * @param inputStream Word输入流 - * @return 返回Word中所有表格数据,每个表格均封装成Map,key值为行号,从0开始,value为该行每个单元格内容,最后所有Map装进List中返回 + * @return 返回XLSX文件byte[]集合 */ private static List getTables(InputStream inputStream, ExcelTypeEnum excelType) { try (XWPFDocument doc = new XWPFDocument(inputStream); inputStream) { @@ -800,6 +804,7 @@ private static void handleZipResponse(String fileName, HttpServletResponse respo response.setHeader("download-filename", encodeName); response.setContentType("application/x-zip-compressed;charset=UTF-8"); } + } /** diff --git a/src/main/resources/knife4j/README.md b/src/main/resources/knife4j/README.md index 3e6bdf3e..976448af 100644 --- a/src/main/resources/knife4j/README.md +++ b/src/main/resources/knife4j/README.md @@ -1,6 +1,6 @@ > **作者:[AntonyCheng](https://github.com/AntonyCheng)** > -> **版本号:v2.1.3** +> **版本号:v2.1.4** > > **开源协议:[Apache License 2.0](https://www.apache.org/licenses/LICENSE-2.0.html)** @@ -56,6 +56,7 @@ * [搭建Deployer&Client系统](#搭建deployerclient系统) * [兼容Java8](#兼容java8) * [申明&联系我](#申明联系我) + * [模板预览](#模板预览) * [下一步开发计划](#下一步开发计划) ## 模板特点 @@ -82,7 +83,7 @@ - **MySQL** - mysql-connector-j 8.0.33 == Java 连接 MySQL 依赖 - druid-spring-boot-starter 1.2.22 == Druid 连接池 - - mybatis-plus-boot-starter 3.5.5 == MySQL 操作框架 + - mybatis-plus-boot-starter 3.5.6 == MySQL 操作框架 - shardingsphere-jdbc-core 5.3.2 == 分布式数据库解决方案 - **工具类** - lombok 1.18.32 == POJO 简化工具 @@ -93,12 +94,13 @@ - commons-pool2 2.12.0 == Apache Commons Pool 工具类 - commons-collections4 4.4 == Apache Commons Collections 工具类 - commons-math3 3.6.1 == Apache Commons Math 工具类 + - commons-compress 1.26.1 == Apache Commons Compress 工具类 - okhttp 4.12.0 == OK Http 工具类 - okio 3.9.0 == OK IO 工具类 - fastjson2 2.0.48 == Fast JSON 工具类 - ip2region 2.7.0 == 离线 IP 地址定位库 - **权限校验** - - sa-token-spring-boot-starter == SaToken 认证鉴权框架 + - sa-token-spring-boot-starter 1.37.0 == SaToken 认证鉴权框架 - sa-token-core 1.37.0 == SaToken 认证鉴权框架核心依赖 - sa-token-jwt 1.37.0 == SaToken 认证鉴权框架 JWT 依赖 - sa-token-redis-jackson 1.37.0 == SaToken 认证鉴权框架 Redis 依赖 @@ -117,11 +119,12 @@ - elasticsearch-rest-high-level-client 7.14.0 == ES 高级别客户端依赖 - logstash-logback-encoder 7.3 == Logstash 依赖 - **对象存储(OSS)** - - cos_api 5.6.208 == 腾讯云 COS + - cos_api 5.6.210 == 腾讯云 COS - aliyun-sdk-oss 3.17.4 == 阿里云 OSS - minio 8.5.9 == Minio 对象存储 - **文件操作** - poi 5.2.5 == 操作 Word + - poi-tl 1.12.2 == 操作 Word 模板 - easyexcel 3.3.4 == 操作 Excel - itext-core 8.0.3 == 操作 PDF - **接口文档 & API调试** @@ -154,7 +157,7 @@ - JSON 长整型精度处理 - 自动字段填充器 - 基于 Netty 的 WebSocket 全双工通信设计示例 -- 对象存储、消息队列、缓存、分布式锁、限流、国际化、网络、Excel 等工具类 +- 对象存储、消息队列、缓存、分布式锁、限流、国际化、网络、Excel、Word 等工具类 ## 业务功能 @@ -1403,7 +1406,7 @@ Deployer 只能监听一个 MySQL 的增量日志。 ## 下一步开发计划 -* 设计方便简单的操作 Office 以及 PDF 的工具类 +* 设计方便简单的操作 PDF 的工具类 * 集成 Prometheus 和 Grafana 监控报警平台(选做) * 集成 Apache SkyWalking 链路追踪(选做) * ...... \ No newline at end of file