From e6061d1286d9e4c1294ab85c3b0b95efa64e6905 Mon Sep 17 00:00:00 2001 From: FANGKK Date: Tue, 1 Sep 2026 13:29:22 +0800 Subject: [PATCH] Support monthly source rollover; update data - 8/29-8/31 MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit The 2609 file carries only 8/31 and has no 投手 sheet, so build_data.py now globs every *每日数据-武汉萌奇熊.xlsx, merges 平台消耗统计 per date (newer filename wins for a repeated date), and takes the roster from the newest file that still has a 投手 sheet. Future month rollovers need no code change. Co-Authored-By: Claude Opus 5 --- 2609每日数据-武汉萌奇熊.xlsx | Bin 0 -> 49554 bytes build_data.py | 52 +++++++++++------ data.json | 108 +++++++++++++++++------------------ 3 files changed, 90 insertions(+), 70 deletions(-) create mode 100644 2609每日数据-武汉萌奇熊.xlsx diff --git a/2609每日数据-武汉萌奇熊.xlsx b/2609每日数据-武汉萌奇熊.xlsx new file mode 100644 index 0000000000000000000000000000000000000000..f0298f2deafc5a5e34c2772014ed542b23fcefd6 GIT binary patch literal 49554 zcmZ^K1ymi&(lrnW65QS0EdheNYanQF55eu=!CiwBB)DsE3GTt&-QE2kxcBD1_rCSB zcIwpB^ci}(ckQlbCJNH8Ako48`XTxI^REwB;KR_$K*83^+Kx%#?`AMSkOZuH7Z$!1 z@MOWkz>xp5nVz*Zqw^Pw?~zUB!YuH9SA2dasn^xQG_6w^$nTx38}KwaSjs63=tw|! z*Fuk*rrhsWh231-`y}x*swFu4t~Q9F(sPk*xcm6;DzBq|l(#RVl7ybZ%a#l#Bj462 zeeFZhkUz6WtyVlt=$Fdhbc+0>c}ccEDDsy3u-pj5ug9cht?qQSH7Zk z1{-Wn4(qBTU+?cf-_>l5=5Gd1#7$G+u_Xu=iq}poWoK;@II$RyIjF^7YVcZ_yxGlY z)dKtP+Z8Aar{e)`^$P?T7|MU%u7Q=U(ewSfM=O4ACr0;MI-~PG3X;_5qm+cx+!=%O zF|yc~J+DRx6B}nZXi1xW+i#k9{bTET!4)a4KXZGPX*lP=$nTV0m_=gp?BgNr`D{@P zH#(j)MeZl23?V9JQ+070Eml#r(iQb9xT-I$wbCv43b<{`ewUN9-sO6($m3bRslL}9 z{7j!DxIm=qL$rsk?Wusm)TPOd(~poH?-3or>75BwPOE->`;A6I zGLko|P4HwY`h1mk$A~-ofhoQ}34w9z?(NXY-R2HOXj0Xvco*1&VlR#!Zr*`IlWoSk zD(-L2wm3J$+~)gTe$8LL@~2RCeI7(>hctmWp1u(Iji&XjW@fEGJ#)4@$?!_D*|Z|m z_hBXE3B*qloW}Y@8sar@N|_d=FSpqV2?FP&Y`!JB;P_{#fpGhtqVWXH%_jWJ_)AKjrx9er7?k`$h>H=iPL5#;^l z=!jNRz8l};IQ0=GXbn-q8iEm~)>=eD1_qlbpyUpF8s|XCC9$5`%9G#2V<_ZcawSD^ z3tn0jG6KBFKV->b(2~{BqN&?rkqg_h4$=kb*0sXJQn)C3eQl36_8jmN5jKC%9PpJbeiL!< z74O+;|41l^3ZEt5fZI3C)JRfS-KE6Nu(Ds2Pg&{~N}=!3$|lBQ>r)&C5zIIy zvjd;U57P5nxF{%ZE5(+bxWyHf^Do?5P$zc2=+I_Qo zs(-V07G9}id->!P|Mn?8_OfMfSFIx89$_`K5HehM%L)kTLesJqS>dwtt zw7n5tmLz$+?ZSpFNLn$nlT|cNqNgIJ&uPdTLf6vC>P*#XqoFcyQ`d=Tz+$M9x3cu{ ze6G78MrR5sq9*xnDz^$-PJZ%=BiX6uiob>LVa`+AZA?y{ux9G&sO0F~)!tNYODU23 z)A?qaw)+gv{pqz{)8gY;?{!*v)Lr*fE>ZQI{8H+7-bFVx&qfa|3%=r`?iNrB=-Ro7 z;OYAKY-TMt;NqeoSLfc@sjFS#H=p*>V%pA^*IGi`(LAH(pk6#1vAC+vEA*;O1Ixd16hCQ_b8`8ZIC2jq};T#L!i8z+R2h z8pUBV5L71A0%&m#x#Q(kThTiWHx<)+?QEvV&FXz@|Rf_AXSp9XpwQz)-u@hX6yPL~}y|Jf3EPFZOEvqc1eh%UObJ_TT zB{wHV)*jpIL+-dIZuhg@{ERfh#l~5;#l?liQco97(EYs)=C_l z@@#Rhd0>9rbXGW;JSyd1`to$Gr*pmtEytz8^?0H4PKR+yhY2>e^ZG1#C}Qm^foCi6Q(vB$R5U7g95^}(IYd&Jz1Ly92gSnV_!f0 zECIq)%tcXs_d}NKFz!-eo7{%4^vChp7)E+op4wVvL4sCl;`xJ{$fFDC~6*I^ym0hw~Q%An#pcB<25V# zp1KF1&|AKHQ#qH=-d!(7Dg<`~TudH&r~%lu@(8MrI_VRS!ejY9v?O^-UbIkosQ$EE zdFFAyX{{6SmFoE^0=^w8_L5}Zjq_3Rx75qJGcd-8OK~`Ch!|aTs%3jAieYbfDI#JU zg(_BuN@3CZ)RXt`Gb^QmQVGP&IqQ4CGA(daFzgaPiKw_!l%z0Ag?xRRi*JqU8v~g_ zzD$lyb;2d7O4W$&6~mb_F1sQGCbxQ?o#mwy3|)X|{;kQjE$^EjVVEka7cER4V8HXd zztUokCt%tbIedzPs^!Ii{#O4<3mr_kJUwe$u(Y;@ig%k!@moN-c>XUHSOFDCWdwl< zFy&4Gl{Zpw4yY506%gsPUczqD&{OR@K4d>g? z4|ZbB1EWdx&Hb;f&EsO4o3RkK6$bHc*z-1>s5|fbU}Nfsc~lve$5G^Xm&aep5v+{^ z*Fy67efj=Z{;QPwjgDQ*6N8$Rf!e7Io1vi5rC=2#@`w^xv!q}h(q)TE-;KtL@*uHDzk!}sq5J3t?H-q!$ffD`U zP5MDFy@0q|ML9nu_%|yx$uKGe!U)Ftbujxj7iL{sTgNAm4KLF)d}vfPagU|~IU_YI z7G%L2+j-G`BU9OA0iks$qhC;{KbU$>u+|P#_5@Bb{69*lYR_{@t7C`Zalw0&zZS*x zAq^8u?5wNU||3SSHmSG#)Mtw@+&ohZHm~>nE<-Crp!GlwNfGamc~&N#1fws z*56X2;z1@M*p7>R9+zerplvH69YAgn3|~w)?&{oSW1|T~6L)t@pw7t^4fi4L6^zHhs4lT?kt{yvE0@h%hWCm0WTQmz zJ4oT@(Bii~f)B0XkK38|5-y7shT@*&u}G*8Kci2{o4bYFWYoyB`yL^{Pi9Z>Nd)V_P8c(@z&rHT*bs1=zrCuG$ zkBIwYnD|cM=z(5qq^)3@_6XE{ZtY2Z8XkH`L@^9KXYTfl+|es}BK8@8C0oPdQX+!S zM+zT@7T@&|ylB-<>>3X0#MTp=?IJ)5w`YIOQb3=hz+(#t-mj{K{2{ zugqBjoJz#_G{~d~ zx5*O39wo*%Lk?$$@xk>C87e~1m}00Sc6!_4V=b6~k?snhF2~R`PBlva`{m-{=rBHT zzI*gcW8L`B(IRI;_%LLMz68+G4X-!z!#bI_>k_fzo!~ln-mm?4mul3_b84{^iTA&` zZu>OoW-aG{gMEl}IgVHnEZ!2_#LX&MN* z5`NAm@0~C|;z0cA+>VVYyw7`2_g0-;5S3g|=>@3Nf}_h6Ar9lWIZ`YnnB;!}foW-Q z^!RiEK2SZo$BVqjE9(X1!(QY`!bZL-w(x-<-8i0CKTJ$uX`Un?(@DWF!1I2zML;G- zpuYezDWZcdFRA%ge+Nu~q$}IT`Pf*Ja3>h;YXufBTCG@b25H!-Y~ME@hGS`ZMLV13 zz>#eT$1aU`F>-U?2K3nxs#n^^2GFRVw^1{kvkjtSxRUo+WxarW*eZ)hxM*juQ3i)3 zjzGU&$izj%t^=$k3akaZqey9;19hDPu+PpmNAy63)azK{ybc`bL5BYP6J{#UjW08dF>{s@HdO2>3J5C_^DYt# zegQdg^^%pQ{o+ zFXlfl23P>E7sMz_lM%EoMte8-Y`y9Ccx-0p`6RZ20^1~gpK%RFta9$yotyrWHWTFB0fEdS&&diUm zMn~Fl2&FwB!yeH33k-)rhTS0RFOtC@Tkd*jm_89kLaq2&jM$j&fG$S{iU&STv9f<> zcCnc#G1b}VaX0L7Uw?t&u)ATm`!KP)n_GVF_}wr~WlJrTUfY$B*V>S9hsok2 zS0X~qM*^P+fM;Ytoec4aV+E@+1T%$I`c2}Ki-WH+r#7s_K5-#TTHO;eFx3naDG7To(4TLzsyhu1u79l5K>S_fXJ$_ zzzGS@tAXjMY-Wf779wMZ9OBKj;nB0Xgc2%@F0b-5C39WHpa6kUVbUFvsB>fmmq5+c zD9){t;sA2U1QXsWWX!A%;YJ2tcIG9}_N@-T%oZhG(6<1AK4H=glBiQ;1yG>s3d^zS z@yvWD&sK)CB$N%IH)n*f^jloiPaArd*-5Zt(q}PUKME18N-zMMcgR z9i&gP0(SHQ&yfw8kid6&AoI?U1^owOMe2o#7f7NGBPE<*^0>1GMo0T6vWcsZ7g%_U z6ASRc&3Pg7E|5K;q*=eyu@XQeA_mC>h~x+hjFC)qPC!@cbScs5qC>F|c%!@FYb41e z4_a@BAj%GW+Whh5he(_-aX(4aMr4mIj44+~IsVUxn~Y|5X|tZeH|6-=$}WKhTo&%( z*L14(pm3}>*{5Lm00Dnt(sq)l735*-KoicqxNphelfV%R{wQFX@gcAgIgCmC2Jh)? z@u6(-DP90&kKbv7A1zIIPVb~1c^bY-9d6+`Db~jwoXe@kPu)ykvMynaXV1hqp*XcC zsTRa8{*_%EumHf{ircV@<7It3NQr|g$M-`vm+%v}q2(Fy*w+3U&~;%uP$1%wDd3R_ zSO8ugnPuX%C+SOhW%J^4v|l?dv|6kVK@??+pU-~~yJQ~sx9hFM2M7}ztB{r}5|=9i z7JxvxVzkK*r6bvRLWYn^$4;JCbP`cTFy zdN=!aE|rkku>B}B z+2SWo2NHFA(3SnG5=ftZJ8R?bki5ntB_jw!q&z7*2Mq|0BS=ldj?!#D3K2Qm9E3S|4hFJu+-*lZ)mIR zY-mGu6qy@x&>C_8_SrGzD9~w&5*<*=+*P)cn99ROR(xLcH?|QfEwU@p5O?txL-s<9 zT~xEUXtTJ?UqGA3RiN3TsBv&>c2hyQoT`E{s0aXUxB+#z!42gHQSNw;wQ`R&V4s~~ z>v10O{{0&THla5(i+MN+)+)NL;cym1z`}2?T&+m*U6Jesg5MP%4#bTHpk=#l?ZsG1 zo9*rWXFRG%=j@clO%kShKQ0+>lls#!g?H!MOuBNHm>aUw8nOfS*)e4=uwpm7BIJ}E zWWja883j3nis{J~6FV_?n{H!;X?;{RHAPp|#-^%#tBR$cTqk&5k{5MlxaqmjAPso8ez^ap%r7D3cRUgSg`U;(60`r3656wnmP{`6b1(h1MIWo5;kiBEz0)Fu2F16`r2Gv zmqa`By|yrxk!p>AaQwB4;)L1_Ze7^xx-iTaysi&>H*j98KQD&o)jaVUOjUSZ>}=lu zP;-!BW&0NVCKfBcqAuuXj}3c|P1Ot7hi%xGY$Pmi%^oXIm~AY3-p7jlqA%hK7jAE{ zID|w0PV1t`Gab9lphSS6L;%=lN0}hZBxt9t+CMM63x?(OX!vFx;+cQuW=@o){k^a!ap7A4{8apc$EyKA+ zEap!5>z#1GK0CYNaVDT0XxhOM0v8wi#gv-j1lxT7eX&{AWwd0S(F_vM#+ zk>{p>1(1Gj8h##WL;7yJyS0Cl3+X{Q8{x*V>f#c&&)ghzggjH;Io9-c$NjS1gI99!Y zUBQuE-qE_$XND=AtE9b=FqfoIMMHG7!~966XvxfOW`2YAHXO9!_p^ez!TV>AJ$sLR z)eG2%?b)q5rO3>3+%iEwgjIk3^oI|UxarEs-V)YleZNz2BmL2S7PQfsEtAPQIZnDU zLcB2oSO5YWBRm_5em&u#sVB@cO*IysZ@2Kkk`0M4YvqBhQfC zjgZ`p02YAY-AL00or=cP-bLI(6p;$Q-A>^Bw#3(N;MY~1XB9OZ3VU*w+%wxr??v5h zN8W7%7C`#lcIq9r3(Y10%6Am)z}szjLy~|vO741J(?3Xr9dEUKMWHJZz+b#3AKFWZ)J5D3h~9a<(G6v$b7F7!-jR6am<0CpaS2 z1Y|}u&(_vocsATnU@rnJye_|``EgtJo3Dq5*qfMV4`zy@M0YcVcQeIb;Io_A(63r6 z%_@5FDKh1idh;mC)yT%ixAIqW_Fyc9gk}+lW)XmWcFZFVF+uCvJr?>)Z$=y7(lNM| z)<@n%6Jkoxx#)eQyOeOXmvB9QfxUw3`TI8m>t`6?o6bldRA-~0=oaQ8#uuAuwz?GecpNl-X7%^2OXE~u=&O^7V#>MG6|5q z1nB$)_6neLzJ3`j`pa-;;p*LOiCFQY)O^k8DjYf8r#I`z<|v6d3s(KE*qZI&)>L61q;^%2XzhL z@dBnfJG!XfrM7m-<=UYKp0pQqCgRPXfC&q`S!4IU8PRZ}@k)BWZ;rX_ziwT^WfZX}zOO!doW@L^}ovRDLq~W=#O3G<=bO<6W{nK>s$=9h!_yuoz z>G|K?L$205ZIf(LIi9n_-8kDvovF$WI&cftfA^h+^Dp+DmI^FRpKgqw&S9J>GI{UY z#bm39@LS1lS2RU?3q5oibbUgWi$T^KY1bAkTJtn;m|2KjkNcyLq(1nE-M!?RT&zW0 z-4zwuTYYY=pI2Pa1o{f$CK=i^CNp}donZzQ=jPKVxMHP#=Nb~Fz?deEW})|9I!@8^ zK6LEfU-vS>$0Oh}UO}t2(`S>kXR8Y6Pwfy6DY{t`yqXfW=7pS6v|fPb*#5p2A23YA z$z8WsJy$Nv#65mc50zUZSj&^T_a+<05#eg(~mH0bm&PKaD#9e#(s@S z(W#)}CUX$X_fg3raLv1&biw(&$Mr;*aD*!)OsPlsNQA+!J&v~*J;hZq+y96ue@&WPg(QI2+0Z9)hg)qqIF5i$h3zeX^+ zcqh~=lwg?AM4ivqqELZMtA6=a^gwggUq6i=U;i`wFpZqqy90XUU#r>Q{nJ`tCE2cn z<7*Rc2>p`$m^ITb z*p3rNnXk1?)nO{>(KRsP7~W*W`P~yp*1oL}&dpR$iZTqq)bW}kb`Cez%goN#V|z_S z&rMM3x6eExlwq2oP=!pZ(SyRE_s4FZq*nhK48#Mt z07pN?hBh__y5c$UG8yD|LX;r*9SllHJf#{4$l`G5w>}7Lbofaah=XvM#(od=vG3TE z)0wkAA~JM+XxIS~)Zo9G(&FP{AcnzZiuuJvd~tKO*j45foJM7((Ur)z7AhlgpbZ_* zw^qw-OAucf&a~cE#J-?T*?Qfp@0v`ev`+^4TSB8PQbJE0P>kAes=`w@;oq9QF$nbv znanwgoa5B^=ICN?;qH=aa^i}_^#qM=_npx-ak?VK^|~{$L)uD2%Om<9YK>R?5dByJ z+VnEu0ucQa1KNx*Q)T7gAWH=v5N)aVxzJw?sZd+wyi%Lrbv9)?W)5h}5MCM1VBS@@ z{E7x%9bj_gFagI5y~tO<6HE?E2YwoT) zrs3l5gt;4yix+f#yWo6#b+9=$))E$fbzscxVTb5>Th{DR<1zhUmXg@KWKkW!A9|4b z@<`Pl!s?Oezn=;luOI%BcLxLe_4U>N@2N2B^HbrbCfNvb$>sRdOpiJe00(;piNev85<*aCTpd`S`Xv!2J3wV?hS@T?!26~a)|f@ zB}=-%(56Dffi>{eC-smP1@?{I2PBlr?!~G7WY60x{)g*{rKYFz{(uPnr`uRp-p1SA zhoL3U`-Ols&!;`rr&Aq^#{wW2KXl~rxX?hv|9Jm6Rr+}P7_a(tKIeHln8xpMJE!w_ z{P?itc{*|KIVR@uxB;{{zBwa0T5P=8xZ`hp+F4*K<$pYR82Ydo5RvBLas|4bl5g=m z>nGxG^1N!uCA#0~=J3E?ACy1hyT9KB(K)5j&)rKK!<6KIKW=l4)@6EFKU3sRyC2vGv&ey}y&^?Qw%n%k9u= zSMh?vgHCpRbPKMOy{F2DbI*&Zy>I?ixR1A`?zcla?stP@{^4oO51VUgd{5UaTUXuk zIuED0X*p2${Z2=o_t#rGElJItxxe`Dj_>&0CVwScwSd^3=8yPfbnqSyblhE@+DmmF zevX}gxYTiXe%jK}zCTmF6@5yMAbR@vWc0+nFj}*8f3h%i)N*@&5@EIUbbRyp5Wz2} zd0g7;a`mu<n9k!3QSQ;?dG}?b zeEmuMliQ-t;MkSjt+VIZVf@t`B`-~HhkQBGP4-_p_I)A6A^@J0*b)5BRjL;MuU z4f-xI-*=B?>3sg!+dAd*u}9G-sXkF7P8I(-ys+F+&iL0)v$5ZPeB<%-K8vco91pCAu5_eELr^`{%XjJ8j5_N}1LHB0n@K-? zw73gaVv=@rmn2}6zEoIclqO8iy6I^78of!@;upQi#xEp!mVu-rrOl`p+aJ9oBw5+l z-JGSqej+XEQ5Urp%`sME`M3+}R~_R2@;f$u?lb0I1Jhe3>G|QJ$pRs zN>pOD1Pvc9Dji382RLhI#_vhDl0kKkl}n79MjL%aWl;D5B~>M$TqpNzvX{fXUE%o1 zHPSaD&NzZF1HB{AdB`=0;RtCsbNrxC`ypT%B8MSh&-?H{d`aGwS}yxZl?CyonU^B_ zpo%J6=u30)Y-`C~wZRcoeWP1bOkKZgVz}YhX6NXpyeLy{@pW}?TJUPW`@jJX9r|0M zHR9pM{{{bkn_!LAkg&mufc}Huo1eAQWhs?Bf3EmZ7xf&{k0v)b z?lQ@Tsr2P2Zv*XZ+|CLCKg_&g2n-G40xc}S%qv-oxAH;}1!osyaqe5uTuZbHXF&aU zZmzDDZmym#^+wt3tN9XMHYL@8`f)*<-e)=HDU4YcJC??L|7z{>Vh+t&6&_csSr@-* z?Uu!ftr({%EgXJj=?|subiaiwvuhOAHOWuatT--Q8uFJIxfU65=-3^$7Wa2;Ri_FO zUm@ddYl4E`>Ga#3SJ>zt+@gQcfS$Busc+vV%tRV;tsY+7#S<&kco-c_@1N$ zt#Ltu5G7OT+^xRL=@m+k{`S{TMCfG2GnGClUi_fQji=9zXZmzEqF~DY&5ZpUi2d8N ztiOH|ydR~Hd@})p!WM;NWd?Q$W?$i)>YJL+;c92^J4P4xfrp79<;wwP^xyCdT07nn zc*_PDj;ZXkV7SV35`HM}R{qD8HOSD9$e%W#y-Wz^&3SQmg(6NUcekQ$L0KMz`9zZ? zyh{9kX5(HL=M4}PBVutmmUv)x>Dbh|fJ85#%a@;MA=Q@8(Wd4{tEH6dQ`Kkg#ytHy4B+xHMV z75{nWI@@2L)SXZ=O?-4K>Rj(&mTaeemO;!3d%@tm6?zO_U^HMvJd}_pn(vuZw-lpW zvROl9J7*HNZdo|UyUbOy#6%2i#2Ut67QGFQuSMqIy&jMr-~-uTtpebArPOc${n!CK zTj#*L(i9%d%-CGc)B~F@;lefVI%8>Q#E<0QZsO6b$3Ld5-ii9+Vwg;b;jh+kna9%c zryEpb)SN1x%>CWknxo4~(}7nTfZX5A>%vE52G-M)>InW+Qex(NB)FhX}|t2x$~A9Bj^CKh^l)14cRHPm}J+}olK zzlRfURuZgX>2vVymmTt+G4h_FE2Q@lz6~?--t$h!?Dnd!6gD)MM#xkg#)$E9S`U&k zGmLqNYWmF-a?K*GWL}{So=dRtj><%|i2xn?MyY>*naLe`$a1?JVuqV8fby(P&g0bj z=Yb<5Ougt$L0h185Fsd4JT>6w=LjC8&o$T!diD_`&^oeXU?9R50`;8zMIdKw=95M* z9wy?UH?QPg=?E7x!TIRnri3u&2!6&(XK)x>Rvwq}x%|Bwez|n@SO(rDh~1p(aevcB z%ucikepOi$h~WMPDI0hPGpc|3Tpkw6pa zWXY>tjB>}25dyI*YJmmP(J;0WaKS9;Eq}7R~mIIk;s0(2|R;vw)halRV{X_!hGY?N<7aRFU!p3 zJ3@*-3yUm+2FB2~i{kMPR(uKM`-O64_-cP$YR@2-b?LEBykPgW05iPT+*|Pin^HUO z+iro^E9rK>!xnTPu)u|yVgelx?KXU2p^>w^zuef49&3sy5 zfqo(Vj|ZoP%m6?;+evN#?ey#tuk*Y`_Sm$1FY>fIN%Q!Z03kmVCdb41|CPHx`}L5Q z_E!;{Y}o~W2S&1yu7~EScg#A743hp?l}6U(!hzsRm)?e8^Xl7&N+)%iy5bY_BSjLy z^vFZ5i$k2Uf!}0!-75=t&=d1x4Fg{Zyk&k)mi2&Fr(@tZCtlKdOi2nlBI8&n7oyfz znDOKY2gSZH+r>>L_2KJsmPeH0A>3R)xMzM=f;qOF!S9oSVhoauTPr!Zs)vwW0x3V+ zLUP#T;<`wyFeJKW{jkI)Z)dLkWXC=p8nxfUBHzC3Pr#LQY%J1oY&wc;HcAs}EBvyhr5wLE9KW9(p)Uk_`sX-x(tZ!n zy%P7QUz)Ugj^`+a=G@4`qC8dd0S^bU^^=OuS@k<_;^w+dL!-2M%@T6j5mas2PkskB zvXLHz=IK9A1qRuFOodc95PX>mmC(PsMcZX4vMC9j@GMF2XldIE+}8BK-X0JniN&lx%vox+mn ztRu7-A9+Qw?ylA#*K_x0A&{Vqw-s7^sUlEMU#f^4ip6-DMkbOY>7F~(X}8bTj8*dE z>J-aXtv}a@HM_ocW~U5i&o>SGUoJU~d1>|0$d4`0WY6=ltdS(j^absAkA_1~?=r%} zBW@U4Q~xEZQNmmkW~lSl)KqB8GBBKI5Wjsj#EL#qjkEp{)kqn{jWd%kl;Gw#EG`mx zMjb$1V4yL|N{Kcn-E)ar(d27^^mz()hVT#Dde;@?dM;nGSg87C9jNNK?C7|JoJl2~ zL$kh?dyrewok{U2^`-ASaEHW!&jhO(rwxT<=wqN-eK=bDB8F&$15n3pQ_#~wCdAGf+ z2E^1_&)v?XhsEmjy?`uFC7wjV*Gqz8(l+I>XR2oh#cotL zT^DC;jwsk6`^f%9av@A3$uas`Jw;5kUUc$AZ}JZcHGw}r3oiVtm--ddX@!hL22^>P z9ovGy>E}XTeUu?MXa|;+S1^aF=e*33;o1CMTOh}Xst^ANed%%HUp)@m2|7^ezArKG zm^q0zt+&XYxEbf|mZK*$%D^J5sb-&5x|>cfKBkM9Q_X};_;z>K?ajnHSwqO5{O!Ym z@z;am?q&Lt{02SZ>(#Z(#apu2y4gWUTkIA>EpE)RBKHES4!r@Y^b{aIT(4An8+m@0sHCbS^I3*U_-yQwJ$r~+>wS<;9%+h>11 zo4<=@L76xs!G6}~(ha%8?OCC|Q4CQ1-Fk_}g$tijpB?_Ef!MEw`tDg+=eUOM*`Ur! z`fYW@12p=qBu4a}3VH`z#GyE&rNuWOqiJTQzAywP&tdc#@(lsr9o8ZUg;R$?$l+v@MRVYO`zO#%3h z!$tIm?=!$vdv0F%F82F{?~NTd6+vf4>uxw)OEgK0emOLVB?rre@XN(t2KVen`qhW| zSiT5r?z+L`{xHU@8rZh|u(juFjC!7&L@9WwBhUYE>Yg}A{;O#pICO`$VscqjQe-nH z%FiKynpq-*@=qe0lo60iA|M(PKeQ$6;An7b&rFeZW+Pi12;^WZzy!oo@#mjR5Pk>x z1_WPcYqn(4OBtz*6=%v3e*YY{ep8CZnh4Fa3{K(|K3k z99qOgw#O~n08;S(_`anNa;YAq%R;jjR}b={+_)Sirt0S*j0{$I(FeZ2t$U&LFn?4^!t zBv%`tEQ?3kH-dDR)xnQR)UHVVrp!u2F*6oP!ifdA^E*%L-_k8v zs}~5qlx~@}FQpquvQACLt(16)uICEw6xelPt^d30LI#1-6VleaxUd#Ig%Wxf-*sKnI^?FH*!XkQ_66&!Sk zk>v`tvq&>5=d(`XFyOwc|51AkBNK*(*irQ zdi0y?z)u_+i~8zUmR0)96j(kqfN*BvUTKhTI#Nfn)%CEWTXM#P1X*B`Cqwlb3j)Ce3v{5NSk*JT)C{wg&EhyUt5 zOVl;9H0tZ7KaqQ=01LYZ1jNN183{p5PItT0KkKZJUWbgI9QHZB~cm2KS@ z8jsI;Aog+m;MOF7Ccy4oXmVXCSJApXNlV7Gl6aOr@ZB48ARRv`RQ{WeEb1{p@Fg7u z2Vc^$KiarF0Zd2mmn!lx2Be!>10&4!pLC=KYFNQvFDnxq#7ijF-FP3a+XmOoPbpP>IA#>i zO!K&upPlFOE4HzBqGe_RZ*kpRKM5nzSTsjn5$Nk)aMHg!!GhjoEg<;3($E4O2Z}GX zc=nJ9-z(bHreNn%(nX;75^emq__~NwS3o&>*;oZTzig}=V2@PL77GKPzwx0e4JsRu zLtOewug2cG?@*Y)|GKua-4ibahLpm}7GaFuc}3Ro=XWUJ_^mS_-4Xst!Y>Y>;c7r% z#@OFjI>!_SnSLZs!U!@JecpA`{l~655BMSwd?rI)p6Ux3K8@0SM4Kp-xS&;P3RVWl zfC20V|M^4c#JX&W#KjAhMGIcYP%m;(5VWh3<${r~jgbP?Jc)>+62eh8dKVMmh^e-i zrZtkh->?V4G6(^TX`=C0`UJ%1L9%MO_;yn^0fEtI{# z##im{@!eBFn=A~xpw(~EC>`(~bv#xnj#C%-xIX?HA_SwZ0;7%qijvBfg37jdjM{lc z#FD>X_$^mdVQY}Z3xNxsoo50|$r*CgzVuhVd+GG8JMCUe?w0kL==b*cLBGPOE$cDu zT9^J6f`BW059e|pX#+jR1`AevkM(0cM4d|2am797e_;OmQviKkG- zpua8}+87vx#d1n2rrpsKf(=3;V*-Ngb;(;5j(_?8H0bISm8lk$X$+(iKeM)BP8xf- zvzrm+j}x4awBu0r+V>kpzz8|RshRi`l2XX%AACd!=LWHa^v(Ab#g2gFn^lU%57^YX ztRN8nXAVVpL{sSzJw}aG>epyh*`_H-I&6v+a^LJf{|G#ArN8IJv=nO_l&HmlP~7C~3<{ zf6)->ZX9JPwI84(IFtHsH&JVHs{)%5YvjLAhcu4PIA z#Ds&LU*GJZM?zszE33Va-y3(C1Ko_a^Vy#seKvgQgSxO*=U$80^uNU{31T$6*C#=T zlBurITdC`HRDWDqpAD_al+E`;yuEhvr}Hs9SLA@pbV-iaW*^E-Kqk`-Gsf~i?)Tm@ z-uRy(J^yuvfmFssI3XM*$G~^z*B#H#T9VvD7EjrOiC&1q1BHfORM{A)hdE)Vrq$`z z1^KwZ7>ZrPpf^M3%L{(3sCTWT3&Ofv74fe!35+AuCgd@EqLM@E+nw1b!_M?9HiNc# zf@(H{!dBiJ*D{{eaN5vG%?G2_{OBmA{@W#usdQ!htf{#A@mnnhg{5ea<_Jwn^2cwO zno$V4?_Vc`gXb7{?O^|p`+NQ3nRtf(bp{hWrxIMI8*Gf_m%VN><4;U8c^y^Roe7(0 zSu9%2wX3?_OFy{g*!na|oLtFCvr~&F#0jUdj`gS1er>rJPKm=VSnNgv&shDkufW5} zwGLg#8uYL;6pPoA6N1rJ2&j1V4xyF=nVPD#&=`k;ey$2Dgvx)rk-b=a@jrRBdQj1EXyt2=hv@h!2U%CikDb}-AcYxJat zrbpST&tH8?faj}$%T@Vs+n+CA?bG4&na6RK(W*Qwt#EcPdXmVS2;y}R)z&q@wi;%n z==o2v&M{7Ij1387Z=LKqe7NQvBJkEL93!25f>J_q_QEcq94Fgs_@d)qb>4BfkXyl{ zTfM4DZ7nvj-cvW-{lAdiJgqC*5l!{W`A>K#n(lt79c3#y52fQ>lN$P8cadFz=YPXY zt5R0&v8guMCR#hKwFJVjECH73V4V9$eXbR$PEH$5ovt1w=A|^gqJXTqxsGgR-HYoN&ws@`-5lai39E{4uSHS9Rf-VbvsE8of1&^u5x0_IM#4 z4JFYXpaNN0r~%^(->%Lf4&=}-104?7HjwO8*wnN*RLg!l)hOgKwlF>@qomM^<_6Cv z(Y~|Z!x?wHm;`~L|03a}`fFJ2TyK|(@8N&yM!U0fvnlu zTM_A!W=RDJ3F+>x1q7tKL+J*=`|hHCe)zxlKF{x&{k=2iEK~29I5UfPQ-=~Z^`hn2 zTXm;Z4X0I-$n;5Xc7Zvmp2I$H&2HcYYO!65D$svY0uKAeHdBpUSIBgn^TLLf6%Q^a zt0+0^Kdp(oKftAuX`K0vd~$F8hTs*g4CVOyD(M}Cw1P+bX1RD}rCh2ek5oUnanFpE zf7?F#IwAZqiaD}F?f%3+A6q>1Gs%~PoOtA4_j_1(GEkeMadXt+U|XVpmHiu@T@2J1 z-$Xp@(*J~>g2QdoLl8#|b|5?YTxZ=y3Q2O+btNO!!Dxy0*n*;{w}>m*FBMN8rSDo# z!uCT0WLAvd73EqdWJO)WGRtDnNzWu_H*M%aV>@zx!7Kl|V%}4yEd2G!Xh`__)zv18QA6njw4ss%szAez zP*k+H@G1Aes-lqz_A6XXfj;L?6`aD-C5LaH``TvTcqIH%h2S$8^%pYg#DuMSJCb|# zi-CC4fexQ4-3aRT)_D=PSSAm3w_3>0XE(39C=@JQ%NBz0AoAp-UobF=JyKKuM*U(C z9t$fD3u`mdN@?Ddl0uh~YD_NT8omzIeL@x^k3k>dfq8+NP9E010dc&?{uYEM&4^Ce z0X(q~bm-Fl6zz!Qp-HVJy`(HtzjQPhLK5-%dp#^u8 zwK1jy{ZzQ3S&j`-USVOtf3EkEYP;;$X z@DG8=lEeE&7mG->tsLEOTZe5^`g5^mxRW=78(nZ8AzZ8tJ_r*8*DP$#QOL@0>%)x= zQP7Hji;@=v2C~r7N@3?dtP=DwFd^O&UKtI2az6czIhY?5pSk8DDjKz9S?P-u>}+cT zvC(us7m5lEg&G=?^~z}{%bDpseNdd9MYIBwK%1n2@c`H zj$zm32xcT`_$5r;4;ia`u~}(PW@v>v+dhLpMS%gIL8I@WhA1W1AV;hA^gfv|(^$F@ zE{TGbRXTD8i4vKxz;I!lElze>g1Ebaue}6pLx_UC9g;Quacz3H>GI2Fa75l2g$sP??H0vQ>P6Q{Sdh%-z?>P@e4QZer+TC_u=RTSVmHrtd(U8PeGI z2`grl#3vo>53eBdUViHMxT+tx8?wT?v9L|bqc+gIGyklxxR9}ooc46lHju8kG5sE& zYr)72;o*?xy>ZP?Ch6C2*(uR!WN&&Wr=&jTCwZVm_wlOWL_r+`d6Epmh;T>aJXd2( z)@PAjMD_o6Cx1F09L9Wau0O$QA|4(jLk|o08!^;}z++?*8`g+;yvCSb|L#mJL=p&k z!ov0@;=?9W5NDh;g1(<7P8x!g1{9gJ;52t_xu=vkWI{j7;ZMnh>c-O4KNNZLNW?mK zc9r{pOXSOyq=vp`@dEfX;o+drlIn;1LjsET$h4aUNmzUE8#{+tku8!yyXqoW>blX6 z0VNa~X_EidBEiCmw4qDl^E|*s%wg9JChHsel*al~F31ptr(Z(p$>Gw{^n~H)bBX^-U2CkpyHb$BrSsY}>iQ5eeLeC2=J&m7q+mLm( z(uLM9e!ZNW_Ew9ygT;JRbf?2ek4ou!ke2zHEhU=4hgnjEESF5Fv@k=P3I>k!6WOvz zbIoDu{0wT^0g$LU31xYP%au;YPcP{GG8zRYtjhv$I7fCYZ*`*ggSy}DG*l*(a?gNC=9Shd(wn1#wA-*FsA zM2zindDOeEXI~cCN=?`G=L#CMRAV}^UWj@H6pi=H<6W>w|z{(OyRR|FD`Z40V%qHlqrD;N5PedQna78Ib7mE;~ zR2IhtXOLNx2zTl;Oyq*lR&o51EUovNDd38d>AA2p(?jFcX-Nk>k+$no0+C;p?OyZ| z#c)js0AnF~ZH0uAHk?fZEBN+ay_CjHTfZ(0c0t6gBv>$n;>u%zt`AZYphbCD~)`(8$91RHrj*khLLH*yrY*a3w_}; zP?#f}OnXtp5pISQM{251*~r{2Utg#uvtopuQaQ(r~SQMz%jOpKxf-b5gjW@9u zKq8Vcf&m6MA`l#4HEm&UI6P?%e#Ddb$A{VeA&>}0AWTDguz!lOHz4#q;a++$y%>!; zDjn|#n{Vr*B;kB#TE+Yt{wvU}t2)HgygIaQ*Qa#>s`G_XCvjpc%#BaYzl%!8++}p? z>CYX^t=MLH+ah4^qPLQQMr2}ZA&ReN_@=qu8%@#~VxQCWyt7>*^AkK(3!bXE&BR7L zc6&=JU!uVzVgUB7BDN5wjIDe+I;jnkG{@=gI`n~{eGuaNw1^ErcLP?Ma9q&ae!FOX6L*OxBR>A zrJ)JWH#c|}0(ciXS<_wfIma8YOF0@@L&xx?6y#<;QHq$0g^nrA+Y^;jj>K3z?E16Fy;n%Ot6s21i~;dtj290KMWaN5HGZkw zc(@QSe^-3Tl0}%PGW`*;vryGnQLJjSno79hCeGHUT8_Jwj}SzzBCZN4u1=7S=yfPV z^I|x=u6gvRKi!If0H%@5hYS=od3R~A)|mJlO^!}jg$*?`1`h( z0#r{~gH(lBH1eDhD?op%EJw?+5wA>Q>$I^?8GJIS_~-8B5ra>X{d5kER|KzAt$dgo z?dMRabag7}96B3x%^z8~;W%FT^+T!pqU&mlUo)o;OR$p=(sFl;ZCbxoF7Axhv_CTO zEQ-8q1{K%5_U&=xt@KEp66GVP)E^&a_D3E5{Yd;K{{0mh4|5<|8f0p!Es>E{Q0PS( z2dt?+Wd|}d&vkT^6`<%>norrkR0a+N)RWLxq<(;=u;%k_HGf*lTzLFsZ1sV5dgi{Y ztC7tIxl7UafC+P$@?PhVQEkRlOr4^`KC74HUJ*SN*LL>zLfM%FAtV z)jWomd#-$SL0IBcSRzU)TuBA2P{H8T>+{Yd%<^4^RZUu|3&Q{`K3CVl!PC}TG;`+@ zH52iHYjN2UV9t@-7!9zn440Zo>mD`o^c;jSv(4!J@i*!gPmiu{Me5wt`S)XBF)=rr zI|snGUj*O*&iy8|k&zNmsG~hs5U9ts3fk%@9d|s03~8jgU?mJ5xJa=tX?yn{ZqD=Ogh8 z*JAa#tmfMmjJ!|%TaFH&AwvD=S1HP&LAelNO|o89(W1zK4}W6-7L=P!pK}3HCVj>q zSpyE02ia$N##v@5YP5tu0SnSD8tc8N^V!0t{-U zbHkKdbg>|Svv0EPWdO9M7_O_rC$^ZJ%A?PODi#{VhOVj?y^LS%`?T4VcF#Fj+iY%Z zkH6+Gz0>oPRzZUiP_qk>-}P@`m55+h`FfCWZqi_AH`N7@I^v_V>rW#i=^uRuJZI

bZ*R%DpQ;6zDd)%0_F4*n)SitquPljkb%j0$A|PTk-JuyabZp)D;nePIl~pT~ zLHM53Q~}3K`kRfK=bK8dT}1c^G+Tp25+xhvv**BwD7$pe{2xDZ`PrY8o*BpjssCYV*)p9Mw+25@)ev;;(wnoD9|>4U?&HdAzNcp1WD>5(C$P-ELdiUn3M#Y9=igj!(0xqq>M++trhV^+ zuL|Y1H3oWB>hg1@+e<>j(qSLM>BeK}AX;BZhj?3x*{liu$KTL!zi*Ra{7LVI@42zP zh?AeECo0DjF@F+@q9k!|gEV;;qk_v*4a`?!F3@g6H)Q)5{wIaFJhjkDs&%}Nv(&aB zyea+5#4CqaH#O_O0{gF4ZZv6M2{&sh%>#k1m6wywL&GaJ-~3gEcX~m(`=I>W>KXv``ZtB@K7g#^ji8j*>f_U(m)=5CF^$fE=;_d`Zp%$9e{3v(ezre z=MU5}GVVd1tia`+=_3*`Q;jat@F}1UNJ9UUqC*!kDat57DB1I-FP%A>rms@UwLr`N z&@h&Uxb~#ngv`8GY}umvk!Z zT})5hDC-w_!^^;LrF?~VI}=C#42?sGEIrx@N*9`7$uQ?^6ofQikDF4S4~8N^Y9jm_FfQ-lp{ zp`#QoVb2@SatW=P$6l%P=@XE?_X<gliKzwQ(axyTYHBabOaYRJ}*pkTTtkg-+mJjYKaY2x2nuU9uywOp^5_NWV-dIoQ(7==~SyFw3TgF;w@d z6K?6d03;!cQS}yiN@i9B0_6lsGt+8JyLC;3^Qg+KtXSG}&&=t<8H#e;6NPQ-N<&;m zW_*@)PH^M;od^cdsgndY3Flw5N)$Ow&wa*2`&jSrf%$cH^{%fPs}S511w*qHp7Gt3w$Z+G zlx466LA1%>YNCsgp-xc4i`3%weN;41Hlzm=lpBa(o}1`$(P)h*%X(B%2otjAE|yur#>%Sn41Hfz>N5iR2MgbqT*|WIQ`+5 z>Ygjy>c{m2mU%@uUrW`n627toDldBv^#u_ZHHj5BwQ5EkJ~t>09WgVsC)cpN{Wr{_ z4oSRZX@u+f8KY4>M|Ltg=edoorUKkwc;Mt75W=avo?>^J`++85K=FAnU}c~NESKG zrqrpgY$OYVnjK0PtPCcE@#j*pYH!xKXhr9k$A=h#<-Xjcwji5L37Qp6D+^^ZH{3G* z8%1QZ28*gqvr5^5h?$aG`G;Huhg@v_aw#}}m*H2*dSSjHzsdjG7xC3sA*B?X?JXvRg`-W`ko*F! zKS0D?u(aw!!dLe20RgiVA+r?9)9M|rt`Q4>I5M?el!;KOqbUN!nJO*)n>Gb~D?grT z#$}TYLM8n?N5cfwmxL2DK?@XqYEXGg$fmZ)QpUd`SzN~ieyRytCo;C`)BZ7&l0Ki3 zKDu@%v**K9ylnUf;=|pB%Q~r)3}vOK4<%}nF1;^df7x2FAKXi;YIiUl?sMt0EaCY! z$F)2-?W%`dDgS1>w-MpoNRuNZKc4Fk{4Nx~n7VANy6m}qxDypl9~GV^!ed-;x4lUm z#2F?XNJmKfn_AJjd_o?I?6i3kYN$^KCzYTV4f8`$;!wliI`baXnc^6Iq|M8+wNMy*Jcngnzz7eUF5csqR|ghNvWG z5K%a~;0VQLbnQ0Xhu40uaSuP>9x7{Fep;__Dd3q_dhgfQL&#BAd6rsTR6HCM{yIF_ z=b6@Wh2LvvJ~`v^8xp&QbWPbq!<1q_V>A7yaq60}f54x7#AXk z=Rf$C4W$f&FPBG|Ka$}%d&^V0$Bl& z!F)C=@2|i66&c;?%V^Crhy2i|dWy`_CSH3V8k`mN1U}{^Dyz%=E&>G|DwatVdGyCq zUG9E1L!^kn$KhA09C<_-Q4Mv9r0Q7cQhK^f*eqTi$jG=K&n`qoi0CpwehR#E7#||i zI(W)*$$ogsgM_2*z+t-C@D)HD8ge>y9Nqlioj&_=#@4g%uyI@p_wD+@Hm$MY(`IIH za=t3)xfyUWAPa$78+&=BG&Csa&1B?RDyu*IU4q2BEELU~ zv_8PB&Fm2i#Vz9Cj$}(^Q(r|=1uR-gJz=ImMlbwSj$|Uyhz4K9;ZruqLFKQfUm^j% zioX=<9qL-|v)SjehniN9UOI94q0YuxjjsLqY;uaD{CmQXvexT$2Ze)5{>mwXmrVLQ zH8;uz-0({CvTY5T^xdMzqV|CebkxCL_byU}{>pJsbpQ_VYhxOET+G=dw*~{SzKVG5 zB{w)LjJG9bQEPvj-X_(n&dAeNR%gEt2tcZDbc#b2MDIg5n6T-+>OXMA5MhKj=qi#* zV|hyGAtRe%&LkJ2p!m`-@)!g*J=n9IUyG79f%G9>6lYld9#v%=9Wdqx&euak*lDGEN+ND&sJ&&L>l5(;B8~N15D(1@U$hr=C)l zjS&nZaN`KV5>gn$^*6>?HsH-4F2G4aI@Zh=1WrZ-GJvD`AP77J51HU@`_cCU8IzNPBOWws|j_o{VxsgL31jS#!!@Ng4rZ zbisJ(j72%qq3a-*Fp>Znd=@vaTL$4Iq6FOhu4r+OlQ95)({!SlB?KJbg>3}RlK2~i zUDJsgGO-sxGVo!fg$ZoafrtlzkuIeFQd4l5(P9J~XC2N1g~`IKD^pz9a&hPUMC(TCmzg3YwIckUpA{VQ4!<#g2}mvh;lKxxs%|hry`e(#>A1m z6nmo?!{|oiNP}fbo_o>X7{=c4+Do|rsKTSCroIIn$t;14H)uN=E>fUt>k0eKh~Wa} z88}#llqv9K48Tz!7LD-2hf1h<`);sHVSR2mI|{l=v2kifFsl0Fd&}$K16d5MFf(5| z3S{0^QnAa(X@KvNh`I~(r(Q+dn1CpswzcyWvNl-w%bd2k(|7<5f*7OFtKL-alJVcj zcN)KOL;M0dlV24Lqe1ol(IAy4#)$B`bb*>u9W=Zu;CRP^&3FU7g+8vk2?n8WBF3CA>p581sd-k#^+1*!t za?|{L<9_oQZfIuBzIEr2wyAmvM-*!y^hT%H-w5a$(pDFIdI7`>DFZEZ%;5G8=>kxA zHsS&`*(p|og+;;*q4XMX2~`w*W*GKcg|~trl(($!Xq5SAREbaI{?TaV$+v;|7rDzX zLMGhyk?Om}YJ0_MrM5}cqpoX_u50af=3$a8`{S|%qfZY$L`d524hb!5Z*_a+6JAnE za7n22X;&*MQ!6eT(j-1GK`)G~H-&O&YCL-SH>!=(lm|mp|BFG9)91x^J34#|K*`yG zjLftb=qSs2Bt8@>tU;!rDjIQ4N${b+Rkl{8S0-f@Q;gGqhA7H8a|(WN+sMCbLA!TB zdtgC(ZdN)UKF+M(FT^d+Lhm4iJT+1U`e|o(W0{ia51c#awapAmK=2%C7;}Kw-^l8k z*Vf>FdI2QOKvOU>gF89`3qUE^hzryNT&@O-h$MqTMK$0Gswn!*FydTA=^+luwUimz zgQbFik2LSo)OjCUUUeqr8&{FZb$YnYgX5;HZwa7kb-(V z7hzNAnAnNm08Se=6pT2+R|3O8ub|e(Uq!j zk`iv5Fs9>T^V!su>IAx~+6g*%C)<~r93lKHt&`n|^82itpUN{9o~?Bf<`UVb9WdLi z%>n=AP+mJQg5!|8l0m4aPaM;;&@GhmB@zlU9RtAOu@zCR>V@-zd{x8ssiC0gXZEzX zkE{I0GCE69yX;1<;%0yHs;%rECB6UAk$G^XmD@sK^-#>y)7`V)K*usU8UU zH9)fs->Rn2=!e?`V%oE9QWPXEVg;<{j(a~6&Mg{x?WU&R-h3|j0CLX=>Dj;Z_Lql0 zAb_z%gh*R>Mudn8O~`Ko?M|-qItH5KfZH0ztL7|VlW$M)8E}aQclnKV?>fNrd&3SNr>pZp?j zL^(Qi{U7*G3P&KXA9#Qq-XRR=Y_0)^`T$xr?BQ>Qe}i3rMuerx*NX&oZK|muK;03D zOm5E>1UA4?{I>uLn|?9txkE`;HEDgyNFtS-c3y>jf;7J>jUj5FPgbyr)MF)LaXo>PJFwJx%t&Sp7DL$ z>`80K))@gG zLftgL;rAI6F}%GTgTb5TVIGRXOa4=KX@)mh_P}Y3`3-Q_;5J$gv*o9!uIiZPS=4CV zV;E>|zGqb2rn1*w?dW_ZCN}k`Dm_KBJX3M-npQNUZVRwmLw`)Qlo_o?u!img?5}!M z6<5bjKbg{&i|J@N5{IDQtLde6dhu@9F~fjrHO8l+uA0%39cw(`@} zRFs8ct>1b%U2G9l&(yz(Kq{7F*m%)9aF4FKGSL8nae^N9*1aym%Q1*+o+V*<% zXl>u&wAbypw8RWp+d7!`vBwj{X9x7FW{ao%5@|QEqAe5Y5*T_QJ8zGj^b6oUP;NFx z3iKYEvQur&O??T&s)IuspQ?G zGym7CqaG&@qggu=C~B`)EAd%9>%<9BU()e8i+xQoSC7Z5)R6<%H%JK{$uNMd-Y-q* zSj({H%N!5>ML|3*KshKmeQXhTDQ(1CDf$2!Fe+t18zVB=ls+W@TlQ}$Y`Vc`b4lDS<(c-~usjAiv^d*J3my(&tkU9wjS zPTK);y}5QbZuC5wPXJcr*QgzzGc;=gKR^0F9{~+;s1z8f8#C5FpRQa-Ipk>_4T2rX z_4fkR1!z@!UQ7Lr4H=uJ!s$K$F6NI}%688Y@LI|OJuvZ7ic#G%8HY2*1iAGQQt$PVoI!rE!ivBu-Zwbh@kRVF zT9#4WDp{U$l*Ml(X4&-nsn@J%)U3$ZZvpRyuryepU%H2@AKbMo4L(hF?H_YYHPT*z zt2r-5COVzd#4O+iN5zFdL%ke7`e)BR1f7K@cb zVih~AY!1>EaZ+r9rt_nEGnEvyj|FCCq8RvxhfQ@M5|pJ+=%{)LVrAUlr2A@WZ#M zNpxsfQU{KqchV&Et)s8mMjv>-5fpmK^Lldo-Q@P2A)TH2N-Uu(GINvz$p!oQIw3X# z$+UEDX$JtT$tFwSF&|&^X4>G8(sNW3g`X`c-5tBiGs~Gm!3$Zmj zP&J~J<<-g%)EQ1r+2hfNJ8@Lsq;ZN2rso;YAup%@4v0 zM4;2|)V1+*py(V8-ftC7y%Tn!6$^8*@VoqBcdNh_pG)4IGH9O2rR|5fZ)Uh}#zc+Q zcHvT)*>ASJ0fF8JN;A?Db^tV)l0TD@f3g6`bZsDlopz_QZM)-dJTLSVi&7K)FIq&L zphfsqZCBVq^#RhGG=vxE=(p)mOl`y0BqO*~@M#fxN8m||&aqeYrzo-c5A)|qc@-um zxg{^RJsnC3lH2j90&-4ClupFB9hJEqS)|sc7O#dh51zr9L#Vg8|TeZw@;-tvSm z<&+jYr71xVMd^b>{R|9M4F5(EPbqB{4ed^Kn=3nLDgbdnvr}D`;V%t&9UU`$kKWM_ zQ(ONcjkDq7te2ABBp|G6y26g4eKhq_zf{`wPLifWY>j?k>OTGPYUIk`+L^31NTW2o zt0IUxS*?V=$ef|rJl*JP3Ht<^IOMCnb=sx3G56`y{QW-a>u1IQv`CAgSSwvK>Z_qa zupit&e=$bA=YOEe7>#ZaOi%CXhpD6A5FN95kKWZ-p(n-^o1L>!3b9E5u4=kSA)R*m z-qA5L_h62GWZEd2D&igeTV*&hOX~fbNt*<;^u0;%D~Vq}S7*?``G+tChE6*-!n$k| zKHDaIu}w&n8IsF|o72AnVv@}+bEr#W6BBwiH|cV6s!K12$*zXUmTL92ds7k`v^EWM z=41a4jA-@wL4E!1>gcyclWyPhb_M9uh`aRUEmDD71O`=2r0kp*Xjs?11k$;CEslPi z+WLXfC~Ay9ckh=b_qUbc{3wU90S-qkKjMHt@NG|!oD&+#`#zIXW*d;0O{ z=yylQ?A%*)1?bZ+xb)=hQqtQ5;Z;p^?3@>9Sl3j1%=|riCqD^o{jg{hH4dHk3!29a z=hq8kXdJ-&Jb`{QyjG)bYP{C)iS!vv@1@N_JoYhBP3?_4%NE3Y+?|EBJZ0;ldHOrt zow~7T4UP(=>{xRmdR2^pBv*6VlLrmUp)$neu0-A;4Vwz;f{ZNGL{WHHo!7h;JR7zj z>m9ut&TdDN&kWedZyqOcEE8h56);j0k#`V^IyErLkuG4S@ash|1a7}kNaR39&dLz} zb0IcdB!U6*Q|3(;;k!aKaSj=@0{SKM%Q4yQ1g1l1yG+x!|M?utVj>fjXNz+OVo-2p z?22v;BZ9>1D49ctXffb*u)cy={6A>{vS@ddOT~HLFX8 z=$1p#iOJoF(n1<`71V_pS!jre@v#D~dx^Yhpn0N)|9;rC4oUu7w>1Bcy45edbmKyG z7x->Bd7oE)xU=15TMMhVCb4L`=)n^Sx|}1gQg1V$!Qn4f=+SO_hy>Mbn_k(^uL(Yd zzUsnefq?Tk^oc|R8+;W=Ik9L(AA>Db!Fl5#bR+Ut2<$sx^frWI!{0CkqZ>sLz+i50 z4IS8EG<**Vb8}LVj4|V42X}Q!?|}NN5Em%~Yzd2vhA%?XoZ!aVD7qjL8~t15@Ogq% z|H~%_ZQrnUbA~(SoC8K52*)&lH8`HlccIDiS=KAKa+9su0Eou!rhxtUiFdz+E}a0*0h zM2@=P1l(@&Z~7BT553Z^<0_CVw)F3!0TCh~239co7&s;j_8Jb?MbSkO`WQ25j+c6h`Ok6) z>u<*nByYwxlH*z|S)MS64FFF1>D4L3jJ+M{KGfR{uBQVVjwah*7)d&@wwwIE?Q^j4 zD0kA${a}rI<81e6Zm}^WY3k+iYX1p!TC=6Yk1f~(w*|=#Ii1a=*A}%$E2rsGwY4vQ z%!Smt?wz(iI?WDvi2d{dLyhVDFoGZn-|??T%|MPsy3S4Yh0ys zNBeQ_69cN@B;X&C|;%m-b`FY|Oum zJKke(FnI5n5bWKEzK|~6lv^*KmRrA@E~MkhRJu4WYD3;__MmiOT-JuKd+kB#(s)LB zs7?Pm-zoN`M~xBxmoIHAcR6)E_Js+-Jg044mjLZC3$XAgqzqJI39kVpgEf@H=xdxF92s9T|=X<{d9@WW; z?JY3#58FQPtZmy4WYEweX246D7;XDY-D=wl}4o#ifF6E@~Kkl3wYY&Har0 zL9~giGsbk=(%5oB`0Ny1+}7s2=rLzn&m{PJ(jN)_+wUh{tS8!}EQ%suiSmLjj_2Up zW#l-c!5Hgeo{$e7e0}d&ji=8*&ppY?bZ|!VFxJ&QOR{G=j6M%?S@w_?8Do!^Vwh>6 zJA8VqIaEh!@|pO7CByBaTR7u87-r5f)mv79h^lE4*#{Ohh!w|BX2*=Tl|@stjZ$D#@&^AfB7A(rb(CQwhPPLWm4 zx?~?aW`*hG@Q1t#MZlPigPC_qlric(9F2*BXyQZuz-I_^uT%YSrM!3ssHL zkb^&fL6l&g@U@5$eb^)DehkoH&nm13$amXpd{p)ENj09EH<$nK_m%tsxAqZsx5&cd z!|4B=sr3gAJ>?2EbCF5?wJj$vUIxi-z#i7b&Fq?c&sCEB?+1*3P8EgEcwnF<>a&K=q3Z`!wX1l4)v1MT5B6+g7|BI&U0Md_An&DTBG zp&h64p&jdO+j5j|8bYRCZ1U7`dFfV)(mIP^IDNV_54b+u-Ul!yQoR$Z;} zBqJiaN^klYUsIQjga~nU(c63G`HqA_csYTlLoCkmv zmb76$xAaKkdtm&u=8c#QU``4XK`#)dX$XwpxXh zAy}GWKYr|mIndUR8rzcez9f+!Eu~3O2rx4ps$~N<3}vw{4mmm_a@3yoaZMBS&r9oV zFuK+rmJW?4qBUb`_HaN{)*AUjxzB=te)eu`9KV#XIezmaoyr zlA;SThtbnXuQ;fGFf|G#ePBc&U^8Qpf8@jqr~etRHTEXKuI7 zP6$pSLZK5j@w^)IJS*Q_m*0+YS~vd8o@V_ zCKOr4sJcdu>L{_)@`1=x?E6C3vxPnb?MmKd)^MxY!=LIQ&=DY7<%PN2r$`IKtF^K` z`mOO+WOI@G!O)-^FWcOJL7IcV*G4yeH6ODp3D3$i!x_G2i4CF~Q%thX>FS5FR(*WU z4Gyj%8;4j^Teqs`m|a`dc7t;_DRp}JY8o8uL^f8jrUq_RX91_%)OTg`H;Lq&74Nu~ zYT6#|)U??WusE{u0iy`Y45})@yx^#}2Wc5mW(hc?vrXmb6eh7X!R8e93>Efn0-ONK zsq>cMh-3;goS_#N8CsDhIkfjPk!95hANg@S!e3x$h!>04xo$(H&`tZjl)WSP4cS{p zbOP8v$=Kqbo)<=h8p7x_$S}_>4br&9xkqZ>gVsoPI7dbt`O|;BC9}vJo2|wLr$pBP zZek||K?TS=T?b?KvN?A&3zSrE7s1<1B8s^TY*}&H#cQ{FuvnbTFDU@?4)FUXA zBLn}(#0W6(L++m#nX=T@b(xv6q}TivD?7e?Vl2**9`+|F=@8Ck>}^C%1d%WEsg}Hz zy{?_Typz4Io4ve;y{?zNyq~>pkiC4Uy>6tvyp@x#os+!NQSqrVvy7pLy*v=gph6W? zs7U<9gg`@%>I*IrT=YsazQ=>@$2m`i++}n4)T~7|NQeh#1^ujYGpv&4%hZ%h!32Vw5EE4HT)OKs-E>FMsF5HXt5`$!*glMFM=>HcsjeV)9oU5tqw;7&@ z+;M=5=HJPU2gXyBX+uq(>^n@)ryJSGQFktaY@x%+r{Hx%_8n$sMg&&DIW4V2O;gQ~ z^Ht>J7+ELZ(gQL_d>f_=1`>n^6NLX?VU+MdlN!!$B$4V$5z1qc>a~%| zwUO#6k;*B*LZ3)w_NZaL&|T?=`I&4V+3x2@v3!hT**YC$sQhw^x<5R0#ou7H9c0%` zwr3brFm0Vp;ZWHtQ@uKWZ@9Noo#Y(lZS!N{zjj~y4 zC3GNER?51Kw3gn?<`0UqtjtH74jyNmt8pzQS&h5^b0kOL(S)q6S5Td9?`SJpbB@|+^LLK==>aLb%Xrq zV4`z(DS9jSIdVpg9MHd|A#l$JbmWo&wTb|`#e9;Lgk7Cqag9WA&Ck${L&C1ruee#F zxY=*7N@B0d&kp!?DZK1~!E>X3KD44nb>swq4;XAwRl-$}NVQ+54E(o5Qx9WZH)mmV zrRw9|nCtGhh25MfuJpGa@BVY$e)LQFHEE84EV(fH8XLali9U~w0$k^4JKa96<%toG zq(zQp$|;YHLtN)phiSe%&q)u;!|t_r4(8Wt`1qD7)e#d*#vh>Z(#T~1YGuF;wT~H* zg|os?b{{n(jt3bm9;IDAuIsP|sx6)URqdFi>{P#d=~8@+_L+GXk6ZZ3M3l{O>`o=+ z((bJ`2f18O^QrOxM%H^^DH>mMQ$M+9eP3G{V z=i1h2Zq+Pz3T~)=w>fS>RI)DZdNnxkO{UfOote+ueRd$40<5g82-^3P-90nl*EvLt7jduoZ0_e09o3+2S92a)$f zmevc#M9$SfipzTk@TcsY2HP{&W32a;lom=;0uJ2UJu8}i>!N2oZmjJS{gqcYV^)f> zlAy-sJv?rl?Gv#!$0p&Gx0ZHK?>K07uf&1Z?SVX)j|Tw@WgEDQV6=uYFg3>%ThaQI z9edxIO5Ul4Sm0$wb|8`;IZ=u9P~Xq0^zT0IxSx}}bUiXsQltmn@sTHPN1cr%u$Es@ zIz`ru1O7NrDhqHKvQ(IsK&b>dewerNxOJaRw3V+AiA4&dGrz@9xr39f1^l-{uDqwu zhGs$>7Adk)*jiJK!E5X`WexWb&G|>6ls{dts`N-b7)enycB+!`?F;w_*vK7gc z>p^*!jpc6*)ODmjj+FY9kat^IubC%WdErjBwRooWO;u((6`t!^_ro&p&r9Md-15ou zr~T+J^hv892-Q_Wl~w9%+2zD(Y2h)*l@@Xs`0vOtzVxyB);E7-cl&ovft-;;`fJQA zry%`3rkh5C$i}F@?%$z(sxf#!oKOPL&BdZ*tm_6uT z3cJAXXtv-Vam9n~xr4wL6@G`l!HY;Z%^#^gyfZenbl|t>z3>KOCQ~aM-({=pocv2`s z6gvm%J8DJaW-^FXf1x6_3cbDgh_?2NKZ%`ESAI)@9Wnt2M7h%N`-m!DRoRcf5sne+bO(d0(_Y4^z zWueX5c%=iyqz2`6mKouO^i^fyh;kP700!Zb)dae;jr#Gb9@!RB2gH*Eg$ z#c~ZL{dzq+7P)3NJ^irfZR+>zaOU=N^~l)f%GmykhM45anDxk*JOJ5@5wN@?q0d5 zdc$0=|M4N7|HBgh6>Y)h9|LjbviszhXJLnDq9;prZrKS1?7#|k-~;^*EcpJbeZp38 z!dCDHm0>H8i4yU>fFzw1hMqt|PYT^nAnqrHNhh$LL15!fsi1jIqgjKXc|)UFj^Hl1 zaR)4Dp3!KQ@v9%!Q~JOoAlvl71LOR~1ET^CO%MI2O*{EcA_IPsD2h?^6+OSR6KU*P zzq1p+5*F@huRvYf0>1-);@=_bU&))g5~Yq3UgC#n`fmmM*Qp118uNqA1;MZjz{lY} zjwQ0qdzX&oIbwF5gm*vqn>rfo#3I}q&6xJ8H9lkepJT-7IcAoc|Cmvu(;~bS!V6gg zRu#!iBYM0GfUomj3d-EG&?n)c(;`SzL+fWm+yMC6g?npsf1wpa;0P8?>TG>us6gXg zH)S8D<`kx;lDXXa(pG`jhma^2Jv>fND2vlpf1H=@c^mq@L#?ZeBaxfqIkL%;?OQ!V zXGfTo9a&ol09}jqHVAE=F~>Wa4{wJ84^?5_LVD4XFZWQYaSp~>|GBR9KPjP z8%n)hpR>NdgcaFtf!;3Ptmc+@Twb1T-W{IZS?amp50EZFuct;x4`J1{9S>pUR+d*s zu6@)vZy`YU&}E~Yv(t%|M$hx923Q^D%gsX%w~NyyVaw|T=-L4P zRYQx%F?;zyMoW1UsmSfg)s)(yi2L>Bc82HuK!nm-$B2mA?b(Eq95nR)=y=4u$lVP( zz33FQ9YKqXN%MJ!pdGB@cAH9KI4AD6S{Oe2fc1_Js(QB3cUARx*AFl8L`@I zft9q5XmPoHHm7&DF#;>}ZFYBXA##7Y`BVhDb9{Fw+<0@>v#w(Wf8CYnvAfzJ-vR|P zpG6#cCQds$rRlk!Zx0CEr{7A?$<3;y zA{kK07I)A4%Wdn7MWu^Z5%My^W-EnEROLgkmgAgUf?*)KR2o_aDtZ?&W{ENM3?T7TP$dk9dl&1baA2 z=xa0Zv-g)2_qV&LN`(LHji>km+x-7G|oF|@f?JtJ?rN%$Ff|I zAbB<7(ike}7{@h_$j^?JW33}Hx%l-A%x&B0vd`KSrG8MOo4Dpp!D@pu``KyraK)^1 zzg(`jh|qoUa5%xRA;uv6wpD(yyjAmK!`^~mAcb89yfbohVyDihW{DHRK2mMDxHR(* zbJqh>orY=lMrYuk8`-4}T8;@-CSx`J?7@u$tRDP1=Qdk}t7GgW5Two}g2*_yGMW+t z>%$V3%9f~LK5lfvG$q&0Vf4_%O>XL~Te~;;qOZHxsllEzh<8k*6fe%YgpqGYwItG< zTH+8cxzFH_T{5LZP?y_07pd~UJiT_AwOW_87~f0l)zULbFm~Y=xcPe6)EzgHhI>X! zE}VS_eN{Mcs z!y<`eG_!L>(@ZR4iHEQ2 zn@~(`v^fcxsFWMus!$;)8aL^eA>?i-ojv59%!V)$_ud*3W=A+O`<8-*g-BD;0-{oC zeLbjj1>SMmMivQOJmOww1U_r>P0nXgNe(ozxzoNqq#K@zD~qwvvXYXCMSAxX zVpEQerr9#?QwqK!nik*Ah{)PrNkcmNXSFrF@h2pB767In+)O_jQwj&^X|Vzl?F7(3 zDZysEbTv~dL%8@c!Io@bg4ZuOv*rm_+kFe3#|hZLJ5M4PZ+&@3-@gT!CHi8Ywc;`H zq>4m)l>;f`*wChwKYPJvMlPu=$3IxbAQ6uuKLmsZry6984wTYGvV)2Mbg8cnggw(xgU}z{}17WXbjEA2C^myIcc@*5^{im@Gw^EXRZ5a=nmY zE&m{{*bt&GpQZuv@U7zM5P`EN#b=L- zl{3ayYtv2WafY|lY>g~!j4+GQ+T%oPUj(I~7*S3WNr3IG29v3<*YV!BYmWB6)Wl0r z3bo&}{qn@Wpt77JFs{-ryNlUeoDt!^XN1faBiIoQjEDU!(rE;snRHM}Sy_%#$?o1C zKH&n+e#84-FFUR#GfuqH&V&Frv6vTVFguyGbF=XzBu7vA&|5!A)_^6SIL8D z35VIJ{W+AOS(VVOs3XM%PY>0ptI4Mmiz=Ml7Cv|e|BL~H&zfwLc`a3QbPq8YB-Qxq z9xEjiWcp#LQBsIdeIXK#Ea zN#XKlaa@QbN~Ps z001~yu!2ks?2JAr+1r^~eFQzY($8vo@mWDrOmJeU)T_f8U-Q)bcF z(Y;~V#j@w;;=-bmG8epLmKVy9cs>NIELV`_U!D0_`NXJp{SrT|>8oNTH>cFz!o6`f z2MN?zkjJ4c;rLacSw~i))!XP`W8V;kS8qBehOX+&H(59dyM2PZWJPmR9&-(aa*%Q! zS@#pny#yKLqy$&(#HbGVArG};=I6bX*4ja1YTl_eip{}H@>5JXp1ukWj?j7z97|1N zw=nJ>p8v|3W;UCYuX--rUF?*qjP`1XQnpKt4c)OVd(g#UJP zN`E`W&VAR(psv{V>gQ0IVqLAGRU;%cP`)P6^I&?cqeg_NsENrDKQJPLl(mq=+Cy#T ziP0-E-)3B@h7>7D;DTm(5P@6%CoP`KvvA*1^=UTQ4nM)coujlXes%%Jg=dN(>C!=E zxS7Lph94dw8s-%YFW7|dn-SN!=7$T~L>6Fz7LD4U$u#6vQejPSRz8YdVR{rA=5RY- zLRn+Y_s9;Ml8uGH;~BRKUnB48Cr;~s(HBK4!Xr{Zsb4w7A?8mVHTWSHu&a}5I0Tff z6noabGg>`YUF=wZI{2~R#3N&ZfZgnEGg7jDzGxUquG7ZhG*(&+K%&2Ur2Z^f{AJhi z%j=i+2O7w{U!8m=39#25PrVH(zO2?S!&2ch#DJE#Trp%Bb(b>nY(;Vy6b^G}x8ADB z3x5?v@WE%=%UYxiA_KR|Yr$Ovphe2CuX4$sdM#7NvJ{PR#(0-GcYdgHLnCtOf{uD= z4Vb2EQ#how@408#(un8Xr`6XkPfW*F_oSMNx8}#`Sn~--v&$J2enY*HOy~@udW&eq zTlEY@an{iSkw1GnwRz!qg>r}XRnH<2P26y*qf{qXbm8>5<4GikBtO%IU9cufz{H0-WO&-r$PFAwUC6Pg#twHqk_}w4l#YKZKS8yZBaqtkWs;-$d>b8HM zG!<6IN-;#a^VAvdpU01|q`BLQC(6O}i5H0Mh z#zY!Bt1F^Bt>~8kBqZJ-68EYf5P|PdE}n(!@1EOi27i3NzA@t) zXT9qaAEA|r8)1hCKcKt1EIuM#H`mPSd5^x;DcgiQCKimkyLX z317@8gwW$9o9S}9{PYz2g5D#JcC5C(hQqm`53r2N|JE2Hksi|r7o{ZzDN}{O=PFs> z9}kj}^M@&I6{@UZYgl3`8J&Mb_0pK2rbe4(TD-L^Qh2uZIWA69)otzjDQXS(+oKjdnIaP4 zg|}jAN91^HgKw5>ZQxAR3+ter#-sv{pT-M{_by*bPB?xv*Hq#K;F+q0%ZbL9msWaS zDc55k;2Aft4AUGVQT6>eoJXhb(p?w65S>8CLIQyT!D^(zy3MMcX(j2`GX-ka9#<@Z z&YT@29ioZ|jtb3J`!}8**QXhqvS0i%NOzFGq>c8LfAg96*Rg5D{Z|FS zgRgpsQel(Y*&nxV-^S4P_q3{Pj9r||>_g47kA+5|L|q$1^5PLOqmxAWE@~QD@kJvE_6XvC4o+5em*#JOj(u(Cy`;MqwDh5PO?q0!2ggXT6=i^-?xa;t|Bg9)`$82uM z1QBUS=u^w{B6>{hT4?Z}!Y@a0-XnSt=3g^`Rc;UoV0$T?H0xNZ$vC5xbLI5{ zO*P*SiSIM(<)qD?T=&Ckv^X(?oDz}98HM!5 z24La+0WQo1mtM|$!$)$I&hNrbq1 zn-LV?AMyIAhgWx`J=*`w)*79~oT%M1r@SU3{e7TKRP0bF5Rs^FOxJP#(LOhMtz=$d zRdJwLcM+bGxM{vACT$aPYi8Eyv`^0`c)dqhRDIv<^u^Y7nC73MWg^vKheu)g*-1HK z$`oF3m(v@3XpIw)GKHgRcyg21GhtgyrdB&jAa!G9$W?94$m~PyZ_?30RTjhqkYx|x zEsIYOZS`g>5VEmNbwagyt+?F8R)rJZT5GdF-YKztM*cn;C}5wea91xyGVam%xyLFx z(T+2kY7ySAGkEU92fo&Gqx0A4IJ7POuMDB^MhP|=+tTa@eoOuX0BbyG(`PafhaXMU zCvw*`PhP__JXax;?rvuz0c`adlk-F+q~P`)c&P&4`1vqDVdI5&e-fvqMok_hKaOrQ zgf+X2607~$oUAUY>BA>Cg3_dn{qid&)Gbal-9;Mf?s zc7bms)X_k&0a{$VM_`@4&SC?G)Lzb!!0Ebg(gnUxk{6$o0Px7NHAr)Xv!LuL@XZqL z%}eDAg%{LPuaSL~{cwB5(4*lv287z1X)8>T316%gO^h;CvUejb_BU?QY`9mkGE#+i z!puN-fp&JdrmFPgB zz6Eur2_ap={wY+J0I;W0epV&CsOex@yLN?wHDAtnC{XSgt!M8o#*k+7w_0N`5AkFkMmMJkGWMMl?xgHaDyW4n*?>OA^CG{T3vJ z7p5JB392?Y>v+XFW0P&CGN;ZGcgH?3RrPr!yF$dYu5T*U9Rmr$eHkNY&CLk^(>)W&#W_>m)7vh5wEInuT4qWgdM*NgUg=WcWXS`k*m8+zIKKyM&j8H%mqV>xb7f85;2qs0aCW6;=QL_DGi4=|M@|>(JL8^#V(wM z0ZtPAJl&Ynp}<1@agnh-ii_k73fET+dQSAOiaP|OD;+hX{B=+H-E!&1z z(#St~#UU?9y)_)}Fg)AI9KE%dMbIWGj~w4`Dvx{+xC-&apzgk)0r~ncRW9E%_eD zED+G7_-G6vca-7FlObJwe9OMZ;}PkGvSBb?x1QN?>MgVd{b_eb8cO=lDT{f&snir4 z0Kkg;d&;6EZf#|6WM!|X>}+EM(s{UEL#hi_DL~xjLnX2$)gM_gIi@n>p$-l63{|cG zB+^#Y`zZJ1$eN|HiMLvksULzT?cmxs-9)%a17`QX+!&$@)0uBrXv(R>#T~m9uyJXsU_L$ztplR~@k<`F?1ZFWKVgd-~w7IwauGWD> z6E^cvO5Yk~Ns%Z}-Ehqyw3D;J_m$wex*Ks`HK9OAC`Hjj zZ##f!UWcwBy%$ppk(gq#j-pZxvGAbq@V6;Ln&MHAg@b27ct{UFY~;Up|DrJc_-or2eQ18L zey?C>Z3ANcTkHv}n;cNRgN)V&Ysta%3iE;UUt5+pEv)sIn1PMWgL?fb{jxNiQ4l6+ z3HvRu{w)gIXL;kpdjFDsZ*6DvPw@v{^8XM30AN<|uWet{8wLnVd;d9}ar~z&BG{oS zSa$sBU+fR#fqx79r|tYx*mj3z=La#&*slFvrT({kmiI0U4mR3@Fv!Hn$Q}gCx5IY7 zf}lT9jMolY<=p{*R&Rt~Yu$gNz)}8B6!w3f`R~jA=Zg8?C;?yoC(5t&^FP1Kp9=+l zqfF)gLiw*{gFg}e%) 2609 -> ...)。全部读进来合并: +# 同一天出现在多个文件时,以文件名较新的为准(源表会修订历史数据)。 +SRC_FILES = sorted(glob.glob(os.path.join(HERE, '*每日数据-武汉萌奇熊.xlsx'))) +if not SRC_FILES: + sys.exit('ERROR: 仓库里找不到 *每日数据-武汉萌奇熊.xlsx') _cfg = json.load(open(os.path.join(HERE, 'exclude.json'))) EXCL = set(_cfg['packages']) # 按包名剔除 EXCL_ADP = set(_cfg.get('adpings', {})) # 按 Adpingid 剔除 @@ -20,12 +24,20 @@ def key(v): return str(int(v)) return str(v).strip() -wb = openpyxl.load_workbook(SRC, data_only=True) +books = [(f, openpyxl.load_workbook(f, data_only=True)) for f in SRC_FILES] + +# --- 投手表:取最新一个带「投手」sheet 的文件(月度文件可能不含该表)--- +roster_file, roster = None, None +for f, wb_ in reversed(books): + if '投手' in wb_.sheetnames: + roster_file, roster = f, wb_['投手'] + break +if roster is None: + sys.exit('ERROR: 所有源文件都没有「投手」sheet,无法归属投放人') -# --- 投手表:Adpingid -> 投放人 --- amap = {} dropped_ids = set(EXCL_ADP) # 先纳入按 Adpingid 剔除的,再补上按包名命中的 -for r in wb['投手'].iter_rows(min_row=2, values_only=True): +for r in roster.iter_rows(min_row=2, values_only=True): adp, pkg, buyer, status = r[1], r[3], r[11], r[0] if adp is None or str(status).strip() == '示例': continue @@ -42,19 +54,25 @@ for r in wb['投手'].iter_rows(min_row=2, values_only=True): owned = collections.Counter(amap.values()) # 每位投手名下的 Adpingid 数(已扣除排除包名) -# --- 平台消耗统计 --- -rows = [] -for r in wb['平台消耗统计'].iter_rows(min_row=2, values_only=True): - d, adp, pkg, geo, spend = r[1], r[2], r[3], r[4], r[8] - if d is None or adp is None or not isinstance(d, datetime.datetime): +# --- 平台消耗统计:逐文件读取,按日期归组,新文件覆盖同一天的旧数据 --- +by_date = {} +for f, wb_ in books: + if '平台消耗统计' not in wb_.sheetnames: continue - try: - s = float(spend) if spend is not None else 0.0 - except (TypeError, ValueError): - s = 0.0 - rows.append((d.date(), key(adp), (str(pkg).strip() if pkg else '(未知)'), - (str(geo).strip() if geo else ''), s)) + day = collections.defaultdict(list) + for r in wb_['平台消耗统计'].iter_rows(min_row=2, values_only=True): + d, adp, pkg, geo, spend = r[1], r[2], r[3], r[4], r[8] + if d is None or adp is None or not isinstance(d, datetime.datetime): + continue + try: + s = float(spend) if spend is not None else 0.0 + except (TypeError, ValueError): + s = 0.0 + day[d.date()].append((d.date(), key(adp), (str(pkg).strip() if pkg else '(未知)'), + (str(geo).strip() if geo else ''), s)) + by_date.update(day) # books 已按文件名升序,后者覆盖前者 +rows = [r for day_rows in by_date.values() for r in day_rows] if not rows: sys.exit('ERROR: 平台消耗统计 无有效数据行') @@ -132,6 +150,8 @@ data = { } json.dump(data, open(os.path.join(HERE, 'data.json'), 'w'), ensure_ascii=False, indent=2) +print('源文件:', ', '.join(os.path.basename(f) for f in SRC_FILES)) +print('投手表取自:', os.path.basename(roster_file)) print(f"窗口 {start} -> {end}") print(f"排除包名命中 {excluded_rows} 行,剔除花费 {excluded_spend:.2f}") print(f"合计 {data['grand_total']:.2f} / Adpingid {data['week34_id_count']}") diff --git a/data.json b/data.json index 199d8c3..da00276 100644 --- a/data.json +++ b/data.json @@ -1,19 +1,19 @@ { "meta": { - "week": "Last 3 Days: 8/28-8/30", + "week": "Last 3 Days: 8/29-8/31", "source": "萌奇熊日报", - "generated_at": "2026-08-31", - "date_range": "2026/08/28-2026/08/30", + "generated_at": "2026-09-01", + "date_range": "2026/08/29-2026/08/31", "note": "投放人以「投手」表 Media Buyer 列为准,@某某 已与某某合并计算;未填写投放人的 Adpingid 不计入;exclude.json 所列包名已排除。Package 后缀为该 Package 花费最高的投放地区,Adpingid 为该地区内花费最高的 Adping。" }, - "grand_total": 11581.3293, - "week34_id_count": 123, + "grand_total": 11872.5278, + "week34_id_count": 119, "buyers": [ { "name": "黄政", "@name": "黄政", - "total": 3344.4122, - "active_ids": 32, + "total": 3480.3241, + "active_ids": 31, "owned_ids": 133, "pkgs": [ { @@ -21,42 +21,42 @@ "geo": "SA", "label": "com.amazon.mShop.android.shopping_SA", "adping": "2732727", - "spend": 1145.5168 + "spend": 1220.3056 }, { "pkg": "com.king.candycrushsodasaga", - "geo": "BR", - "label": "com.king.candycrushsodasaga_BR", - "adping": "8460883", - "spend": 1098.694 + "geo": "DE", + "label": "com.king.candycrushsodasaga_DE", + "adping": "6951594", + "spend": 1089.63 }, { "pkg": "com.yandex.lavka", "geo": "RU", "label": "com.yandex.lavka_RU", "adping": "8156506", - "spend": 360.9953 + "spend": 340.0207 }, { "pkg": "com.fxpro.direct.application", "geo": "PK", "label": "com.fxpro.direct.application_PK", "adping": "7202934", - "spend": 234.09 + "spend": 233.96 }, { - "pkg": "ru.banki.banki", + "pkg": "tech.jm", "geo": "RU", - "label": "ru.banki.banki_RU", - "adping": "91548044", - "spend": 137.5186 + "label": "tech.jm_RU", + "adping": "1745925", + "spend": 156.7521 } ] }, { "name": "万科", "@name": "万科", - "total": 2426.0128, + "total": 2318.8753, "active_ids": 24, "owned_ids": 112, "pkgs": [ @@ -65,42 +65,42 @@ "geo": "TH", "label": "com.king.candycrushsaga_TH", "adping": "5497580", - "spend": 1059.413 + "spend": 968.234 }, { "pkg": "ru.aliexpress.buyer", "geo": "RU", "label": "ru.aliexpress.buyer_RU", "adping": "6607117", - "spend": 953.539 + "spend": 938.279 }, { "pkg": "ru.mobstudio.andgalaxy", "geo": "RU", "label": "ru.mobstudio.andgalaxy_RU", "adping": "7953512", - "spend": 152.69 + "spend": 144.16 }, { "pkg": "ru.kinopoisk", "geo": "RU", "label": "ru.kinopoisk_RU", "adping": "10599681", - "spend": 126.88 + "spend": 126.23 }, { "pkg": "com.edadeal.android", "geo": "RU", "label": "com.edadeal.android_RU", "adping": "10599157", - "spend": 81.2 + "spend": 85.55 } ] }, { "name": "谭超", "@name": "谭超", - "total": 2250.706, + "total": 2311.848, "active_ids": 23, "owned_ids": 124, "pkgs": [ @@ -109,43 +109,43 @@ "geo": "ID", "label": "com.kwai.bulldog_ID", "adping": "7815836", - "spend": 1148.97 + "spend": 1149.95 }, { "pkg": "com.vitastudio.mahjong", "geo": "ID", "label": "com.vitastudio.mahjong_ID", "adping": "91467820", - "spend": 465.14 + "spend": 519.33 }, { "pkg": "astrum.ent.m2alyona", "geo": "RU", "label": "astrum.ent.m2alyona_RU", "adping": "11690181", - "spend": 273.82 + "spend": 263.12 }, { "pkg": "tech.jm", "geo": "RU", "label": "tech.jm_RU", "adping": "9297014", - "spend": 116.73 + "spend": 196.63 }, { "pkg": "in.startv.hotstar.dplus", "geo": "ID", "label": "in.startv.hotstar.dplus_ID", "adping": "9096620", - "spend": 71.95 + "spend": 73.74 } ] }, { "name": "周梓君", "@name": "周梓君", - "total": 1860.5323, - "active_ids": 27, + "total": 1954.4797, + "active_ids": 26, "owned_ids": 119, "pkgs": [ { @@ -153,14 +153,14 @@ "geo": "KZ", "label": "ru.ozon.app.android_KZ", "adping": "5963354", - "spend": 974.2013 + "spend": 1000.9987 }, { "pkg": "ru.kinopoisk", "geo": "RU", "label": "ru.kinopoisk_RU", "adping": "8291713", - "spend": 575.96 + "spend": 630.0 }, { "pkg": "com.edadeal.android", @@ -174,22 +174,22 @@ "geo": "RU", "label": "com.yandex.bank_RU", "adping": "2937658", - "spend": 65.721 + "spend": 75.981 }, { "pkg": "com.appteka.lapy", "geo": "RU", "label": "com.appteka.lapy_RU", "adping": "5623760", - "spend": 17.2 + "spend": 21.2 } ] }, { "name": "詹涵粤", "@name": "詹涵粤", - "total": 1699.666, - "active_ids": 17, + "total": 1807.0007, + "active_ids": 15, "owned_ids": 144, "pkgs": [ { @@ -197,50 +197,50 @@ "geo": "MY", "label": "com.king.candycrushsaga_MY", "adping": "5464039", - "spend": 1144.35 + "spend": 1154.11 }, { "pkg": "com.esprit.rpg.lttlefirykng", "geo": "RU", "label": "com.esprit.rpg.lttlefirykng_RU", "adping": "10514860", - "spend": 311.45 + "spend": 359.1 }, { "pkg": "com.reefgames.fabletown", "geo": "RU", "label": "com.reefgames.fabletown_RU", "adping": "91532857", - "spend": 70.9804 - }, - { - "pkg": "net.peakgames.Yuzbir", - "geo": "TR", - "label": "net.peakgames.Yuzbir_TR", - "adping": "91550293", - "spend": 38.75 + "spend": 63.8392 }, { "pkg": "com.netease.newspike", "geo": "US", "label": "com.netease.newspike_US", "adping": "91551388", - "spend": 36.6713 + "spend": 62.3091 + }, + { + "pkg": "net.peakgames.Yuzbir", + "geo": "TR", + "label": "net.peakgames.Yuzbir_TR", + "adping": "91550293", + "spend": 45.85 } ] } ], "unmatched": [ + { + "adping": "11729927", + "pkg": "com.amazon.mShop.android.shopping", + "spend": 13.5 + }, { "adping": "11729830", "pkg": "com.amazon.mShop.android.shopping", "spend": 0.002 }, - { - "adping": "11729927", - "pkg": "com.amazon.mShop.android.shopping", - "spend": 0.0 - }, { "adping": "11729820", "pkg": "com.amazon.mShop.android.shopping",