From a8c38ee52f871e8376df8c8eaea869f7d18bf160 Mon Sep 17 00:00:00 2001 From: Shahar Glazner Date: Mon, 13 Jul 2026 18:12:24 +0300 Subject: [PATCH] fix: remove unauthenticated SSRF-prone POST /providers/healthcheck (#6630) (#6631) Co-authored-by: Cursor --- keep-ui/app/(health)/health/check.tsx | 65 ------- keep-ui/app/(health)/health/modal.tsx | 161 ------------------ .../app/(health)/health/opengraph-image.png | Bin 91368 -> 0 bytes keep-ui/app/(health)/health/page.tsx | 11 -- keep-ui/app/(health)/layout.tsx | 63 ------- .../app/(keep)/providers/provider-form.tsx | 49 ++---- .../app/(keep)/providers/providers-tiles.tsx | 30 +--- .../components/banners/health-page-banner.tsx | 16 -- .../builder/ui/Editor/StepEditor.tsx | 1 - keep-ui/middleware.ts | 1 - keep-ui/utils/hooks/useProviders.ts | 12 -- keep/api/routes/providers.py | 39 +---- pyproject.toml | 2 +- 13 files changed, 15 insertions(+), 435 deletions(-) delete mode 100644 keep-ui/app/(health)/health/check.tsx delete mode 100644 keep-ui/app/(health)/health/modal.tsx delete mode 100644 keep-ui/app/(health)/health/opengraph-image.png delete mode 100644 keep-ui/app/(health)/health/page.tsx delete mode 100644 keep-ui/app/(health)/layout.tsx delete mode 100644 keep-ui/components/banners/health-page-banner.tsx diff --git a/keep-ui/app/(health)/health/check.tsx b/keep-ui/app/(health)/health/check.tsx deleted file mode 100644 index dc41d688e8..0000000000 --- a/keep-ui/app/(health)/health/check.tsx +++ /dev/null @@ -1,65 +0,0 @@ -"use client"; - -import ProvidersTiles from "@/app/(keep)/providers/providers-tiles"; -import React, { useEffect, useState } from "react"; -import { defaultProvider, Provider } from "@/shared/api/providers"; -import { useProvidersWithHealthCheck } from "@/utils/hooks/useProviders"; -import Loading from "@/app/(keep)/loading"; -import HealthPageBanner from "@/components/banners/health-page-banner"; - -const useFetchProviders = () => { - const [providers, setProviders] = useState([]); - const { data, error, mutate } = useProvidersWithHealthCheck(); - - if (error) { - throw error; - } - - const isLocalhost: boolean = true; - - useEffect(() => { - if (data) { - const fetchedProviders = data.providers - .filter((provider: Provider) => { - return provider.health; - }) - .map((provider) => ({ - ...defaultProvider, - ...provider, - id: provider.type, - installed: provider.installed ?? false, - health: provider.health, - })); - - setProviders(fetchedProviders); - } - }, [data]); - - return { - providers, - error, - isLocalhost, - mutate, - }; -}; - -export default function ProviderHealthPage() { - const { providers, isLocalhost, mutate } = useFetchProviders(); - - if (!providers || providers.length <= 0) { - return ; - } - - return ( - <> - - - - ); -} diff --git a/keep-ui/app/(health)/health/modal.tsx b/keep-ui/app/(health)/health/modal.tsx deleted file mode 100644 index be3f6a2851..0000000000 --- a/keep-ui/app/(health)/health/modal.tsx +++ /dev/null @@ -1,161 +0,0 @@ -import React from "react"; -import Modal from "@/components/ui/Modal"; -import { - Badge, - BarChart, - Button, - Card, - DonutChart, - Subtitle, - Title, -} from "@tremor/react"; -import { CheckCircle2Icon } from "lucide-react"; - -interface ProviderHealthResultsModalProps { - handleClose: () => void; - isOpen: boolean; - healthResults: any; -} - -const ProviderHealthResultsModal = ({ - handleClose, - isOpen, - healthResults, -}: ProviderHealthResultsModalProps) => { - const handleModalClose = () => { - handleClose(); - }; - - return ( - -
-
- - Spammy Alerts - {healthResults?.spammy?.length ? ( - <> - - Sorry to say, but looks like your alerts are spammy - - ) : ( - <> -
- -
- Everything is ok - - )} -
- - Rules Quality - {healthResults?.rules?.unused ? ( - <> - - - {healthResults?.rules.unused} of your{" "} - {healthResults.rules.used + healthResults.rules.unused} alert - rules are not in use - - - ) : ( - <> -
- -
- Everything is ok - - )} -
- - Actionable -
- -
- Everything is ok -
- - - Topology coverage - {healthResults?.topology?.uncovered.length ? ( - <> - - - Not of your services are covered. Alerts are missing for: - {healthResults?.topology?.uncovered.map((service: any) => { - return ( - - {service.display_name - ? service.display_name - : service.service} - - ); - })} - - - ) : ( - <> -
- -
- Everything is ok - - )} -
-
- - - Want to improve your observability? - - -
-
- ); -}; - -export default ProviderHealthResultsModal; diff --git a/keep-ui/app/(health)/health/opengraph-image.png b/keep-ui/app/(health)/health/opengraph-image.png deleted file mode 100644 index 6ca6f2de82f94ae18ac6046acc168f26d091bee1..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 91368 zcmc$`byQVv^fxGoNOwuMz@=0`x)JHTTpDTVZUK=7B`)0^(%m85-BQxsEj0(l@9%wQ z{+KnhX017E33$&rPwoBe{n?+rpBpGID~^gpi1g&i6I6-!qKZ$Rz?D3C0_%tX4}2mg z=%xw$LbQIbX7}U?GWNqim?!ax1i*(dc8cP{Pl^VKw}Ah^84Jk>J$X_ZihQH{>$tn*~UC|Huy(NPBzE95M?0#%K3)o6 z%KqnXSpCmpqK_Bi0R5l8z6Gp6FfbLAjImA4QAz@UD|f+n=jI6}rotHJm7R(VwBvLB z-K!szz?J?+(M`2uJSZR_{(ByjQDegMioi7K1-$A*OUlMerUxHXfex4yYI=33O2N{( z9jy8L1RoxTqA=HbG*1q+;c$GQU$c$G1h01VI2!i6x}QN_xWF?v>7WYP!d|^FFwbL~ zh1O@y7?_wNCWzvmdG%4xW5AYfGRShz;MS20zzkK>2tMMmy48d=S;|#QA~1(CzpZV2_FvaMN2SwQhf;sve(!5m z1GYLbvIQnGAUJ*q#yT;(?N6eZq<@@<^4i4KOX(%`1J1%)U?fRm?Cs)944!;z^f~x~ zzEt!xJ&gGsf2TIynxtz9zWTmYlS55OX$rf1HEWpvo4$&{DtVHDwO#LzG{)1DB&u63 z8HxzhfhDlRzpWm0+@3eaF>t>sh+aqvgTZ@PJ}JleHONG$3HaU%mx>i=4CM?P%~vkT z>~cK8K^yOR+hb!`6YMw)3=Glp^^SqF>rt9rh&>fC0b_WqZ}b`fAq|LR+=!LWw39hX z3b87MJb&GR?|-QE@Tr-km;?i^@OW8=N# zP>-J6;43F?A3zG*bi_Ci4>B986sjf>|MtPbV;kMSOYtRfFm*4Mp<_LKd_0xfiID!h zf>(D9P>m6jGOmvB8Eq&JN<@`dO3>_nej5gasT%3uXqEi27|lkh6XeY4zw1dEIs?+P z?=(j%&8dzWr@oOv-O_SEDpmglM%)wrqpZHY_%cX=^ZOVH^E402i{8Je?DLvK6Ju?a zY`%sEyXuFw|6her53t5{~S<)37Hx{o~w(CM@?1#@@7+{8+{0P2{pgB_}lXD zr*pP-n6Llz4~&R1-KX-AkUS!!TF0HInEOWSC{-<|)^9Ct#i@u_t%LHGP$%K^?UMsM|K)sEWpkVeprY*)<2UnJzpm2XpA=*V(npI zW{zIG-FLEWLw(zQd9-rI@1uTy*(G4G+#cwfGWKGzOA$`4FNP&1ODd)}Rmj_5p}_?j z6-DFy96h=t7{70!(G9r642D-lh|_l4V~=Aui}q8=%F1%Rmw7u+9r02QFQ$(s2l+(1 z*`u*PnNMTC@j_b*-$!qy^BZ=3QW9xE03H8j1kpW&n+f?*=b4E&+;jRiPI?BDc(Mu# z7;SaPF@{SJm+*w?mBk9xDW*d0{JzXp$gsbvL2q6;VrjY*&be@H zR8&>X6`ITl<P95ableSvSSxMUdf#V7b*+pr zJC(Sc7`g10c2V>2Xjl!!y%FDUy0%QZyV^*ZI^13f6__mYzF72ZhF6FsgJp$N%(WI4 z^b5+Xwc9Yg5WcxP?qlg|LlO4ZJ_H?JkY?VpL`J{%G z#8i=%LoLEiQSCY*1z?~udyhdVmWKLj(T~cr(0ax;@Pbwi!IS@L6n%v7AWW;?vFGcHH*CLzSt|^Bu=Yp;er*EXWjhkx>{)pdy#OJP$)xaW<)_Fm`3P=q z<)lOdqA|tiubyQRxayI!e=!1s2TR+Judka{W_GbZPxy{P)pacjvRc;1JXREF)qGpU zs9GWjk4Buk!|AxIx;2vFUtu;S3+j+x@^ukXPzd(}tG+Fm0yf0j$&f%ymBp;-g{Ti? z^EH=YFOEBZelf5QXm{VKvi~&~1ImmHf`UW-;FU;Gf4{WJL|)Wga$;h^(?Y6E zA=Zf|cQ@2(`7|G!ObmVsQQ-?=`&tni+}5m*&djjXa33aB)e%ZDD8Wu(k-5;`T$rcu z?^F2Q4Z1=|jsdJ>QsZZsv5e$}3(HW^N7^j%z`mUuRQ!~`CHsR(~ zq(4vZI#27}0gMDU`qvTPJSOFsfkZAPP~G5ZufM41cv;11FXN*P4)zPK#rXY|;FWOw z+3i`e=fr2^D5+fgR$L@9msLy>aik@5;f#+6vGO#&f(Xr2Kl11sV0Ub8esLiT9DY*P zN_)LsyOBI*Qz8%c1!1SxFG{gAW=1I?WO6(07w8hfN8E48dFFYSQ8ffLj*{2$1Bw`N zJmh(&^z@A;JEj-$y4T@X2rV^bI*YIGk@B9o;aZbu9`nlwTkeWgbmLhmt>jW?y$k0% z+iv6hof^I7o%uf7cjT}4KKbWqW@JUo2nY#4*FTUhD5hK32!fHkt2E}Hyc+O&`kZq9 zxdM&vRa!k+9Wv##Fho$WnztXH0{g?T6Pz4E0^??{|8RkbKN`0HBRW_+mW83+`k9dO zCyE+jPCr)E700w-iuJK(PfvILb?(J~74N%A3BHpCECyiFvZNZ6lTe?7x~}#Gn9M;H>7I-lZbH zbQhnOx15yCyn{K!J?_wmVOn|&xGP2nq>{|hwuzFCS2ANA%szm(6IHH!cNbrtZIds1 zQF~TNdb9u;V?zP%pe_&kCJaDw%h)tAcu<2~up{>MT7^S2LPH2{n7&lDdVC#B@a z|N9r{FnxUUmT(>(Pgg}ehT$eglVT-+3bOt{KND5hb*!(^#2w&D7{Hsdv*!0&Bny+L zqZYM?a`|h@`X@tO0`y&D%&icpQjkjp`I zILMtKh8>2#3mPUE!M9a$|0t*pPL(qU!$4vAFAx(&e7+Rbn165it*lDept|tTe_NPR!VMq38*|5(ek~o&4NMN!$7t+L#?b=$F_$ z&7d*_#7NHu7Ren;Wkhe-1pi1y>}kP=_lYmNs3_9&X6)xka~#VH>3<->c@rYkCo)r{ zZ&MIB#@ZpRFxw{9w71E@J-ietKa3`RK^HP2qRdk$UlHi13KlBC<=BWAVCz?N7E|W& z=TbO)8-RuWS6Y&S=DZjk#Z?AD8`ugB(;XZ({~w9>|FJ&&&kLqFOV+9l+QmM?6cnbt zuwI`@`vO}JE_S#v*^OlZPxk=y!0PG@JdV3zzy_8uGRi*P91*d#wQV;lm!NEOwVJO3 z*V%7T&dkiX>IeyWF={uc!lMw7lkhlxH6y}sU3xx7`Hy!VWz>Q+)vQ4UTbu8 zG}CIa2^t@-zGoNBtd-Yw*&c}9v1I*TYbmyBa8JK0L}F*M@JzGi^^R*I)%)w4lc6lY ziH_!hK@ZsNbazHcQBjeNkw58-N>cQ317M8@V!vFq^1M!9RIhkXG|}=wzRq!v;Q`5I z$s}-aqY}1a%x_lim;WmLxnG{FGvWRbP6GytODo2bp9lYzaQp!j%mEI^_GI9#l%gV( zV|?+`iHwAtTnrijkktJ**Tfg^N2ORyL~hc9nXzK}9D09aB+)18G~eGIu%EWPa`^QF z=Jr-x;CFZhFul=NmbW1*ZbQj@uRU&@Q3DE6abaS!vJV{q7jY5b}oKYR-iU>)!&)FtK6&vqEAcv;=YN!yVCE z%W)Id`-yx=AJC}7f-^ti{YOp>FGBK z{ieJ{H?RO2Pnr99-oAw-yKd9>baxMLeBi2g+=K4TR-2{zA3g!U6g7s`I*^As^Cr6y z%zx%|u)yRrXXCHwx|OA-C&8?B?cE(tgVQO%8k&u%;>f@$6DDfp!R8 zJPfQhAsKZ@8#uobPp&?>YA+{x1Ms>JfV8LXup4OEU9|wL&l=NDo?gHOscc?xSpO1K z`KS=l^6C$n5rBpBg~Xm-xbitHh%MV6#8E z9p>~r9T7Jih-U{NdvP~F(Bypkz?M1kD})po0rfXHU&RFB@SD{q5u&b--5RLoX7LXo z+~cZGM^aZe?bGkAoa5c{AyaSC*;7C*q^8JbgW!u zc3wv0bHo&-DyU@0!Qd>`s#od!MwA1iI9p}G&PdAVTEUMmG!4wrDhVC~i|X)avu88u zy~-JW^w~x8y;h7_%PprIM(R>SJ9-uBj=x|&04UG*W^;zxxbQUMBqF<2y?{^~u(PSG z3lqS;)U!%oD`zEUaG0iz2?f9ppI}x0G_4cZh)(L&%jM@X2FhOT?6i$p&!g zzW7sOuc>cu7jiGsq$mjwV$m)2lRv({Uw_*?Vlo`ob@1_P1`-nL>UX6aQxP&;l3eZ5 zRGYii2)W+rQvEEAYD?~g3F8#^Y%m3$j{-soD^s5E@CR{cM_>>p;BH9MF>dWDRLb5R z!!k{H4d8`F^O)IcN<(rPL}*YH+yyawSCC=QVHZ+vca2@Yru|0jYMda!zztC$2%gPV zZRhf5F3PQF)#r3#CG)8!m_ou;MEG8?@2e6ctjw*hb$Q4V;+|8U9vHHwiqG?dw-gP* z!bX1MJD;fOuHa!iR+uMMOf? zW=nrXiv}P6j_UNNi!8=&kV~9Q#QTN5)RL3EoN&eqfz8)Gop0(E)SfD2czxX(5km^i zs6+l{%1b6NiQ6yl@ZgX!@wCt^+~ODMx30kj1VBm~!)7plL)X|L^ypwx-_`#l1d= z*gl)m6ewaf!TK*Y5MU?ri<{I#1wcQ9X|O%gmp+M*2me9flk<=;*GDbrRBWj`?E&uLP(j3Vzc#x zH5;vtJT2T@NPjBtGT@Gnu$3WS7_PZX*8d&r+(v5)Gg z4KlGVP}i4B%fp(7SNI-K;xw4ZMYy_bQ-GdVU&3pz-+qEoK=Gl?5nJBJ$6g=%jZ2hg5?2JaZO|Y>6Y5pC>{B)is zM>;M&N<*a*pFFkIelt2?L$83j;AJOOD=&feNSyF{U%?5&e&R055FQ^%&Jdd${^M>c z*P9Ge#0{iaMfc8bPqRt~-OamT2}E7wDRA!wl~BwbGHhnjp2 zE^6XTF0NTda!0G{=fA%>;g-c61ldoBIe)cV^~Kj77DU?M8#GBAnvB&_756cXeV$ja zKA4ohbJs?8CtpuYMcp~Ap~6nBpri)^UD%9sJfI{aI?b#5<>dA893L9Z8kt1@7|G+$ zX6@^;5q>x*ewlMC;W*fOoWx8#iGpo--;|Zf)6@~?L*)0o@`CTLoA1Zo?LNcTO#Nmw z7y6E|4kb+yE(*Wqn@j2rd9wEt6s@dbck~sLC9aRk`gb1)jE2B-DKZ%ZeQREsqt>FqVbzXDmJ}lX4ZgPiq}H zaog*WC)IWQ>fUDhNh7LVxJxA=(~inTs`L07Wzg55HA!gYESfpIMh@=Ceyz}WD5E`t zPa0>o^_)6b0$6+PrP#JtfwL;rf}n<0bXXnYiyEx72@<@n*Iy{-{8#XnSoVX9oLhIk z?E4dhB1LHv9FpkIQrrlC4&DINwS+g(Nfn>5j}U`YmoVDf;YY2{#?q%BZt(k06K4^6 zS!wY)o7y^vNIfof_gwo9t4+NG<$1MJxOAX|pU8Z9#g^5sD&X9-nX4i{*$wrWPW9d^ z*R`pv5L?(tkJfrb0bVumkqUm(@g)CB*c%^A zkgF;TR?-J6k|WHN=z6O_bU(O+q(u+_ow_@JlXviCkjl^3b^lpqk)R?#N!)e~4-SP< zSzgv5{|}x&6##fN`BoD8y`OcF+Du;aQ*M0T`4lfL(o|1 zOz;xnY2*rnb`5nSK%328l0f>~F4=0J_{<8SNBY*_raU+iihk(;*tY#&Vv!XK*lDg|@v#4&ZnzPfE?! zq{q<7VY51Hmn&o1o6T~jWmIE4FRI&h&tU*+f2LJv4&a*uayw40Z-0B2789fS!>a*! zGCV^()HKXj5V;v22WOK&bwHb({Of-K^+T1;W21IiNhW#L;0xFR@UzWi+4~<{{e&@M%yzde;r6Bl9`( z{RQ_-hikNlXfapeahj&O!fRQI$5$K6vyDpTvegFC3C#OwB>74F#IL;|Kdh1=%*$t# z_rNNd{v&48W5b46*348Sw$h(1clSaoY*v886J7WbgU=t#1^oCwkw5st!26Wx>&yg^ zf(qe2xBR6u15VRvVL*nDo#rukjjs)xqUs=P0Iiu#1!RCh5&~9V{@mXce*e(yc)za* z#nHhcOR@}6d%az~PhT(4>wjqG;St1dS_lui9-s&3-O_yk#M!M&C3m0OmM|WMuld+f zdSp~oPj3`x4Zygzo5K_@-WYww0k**2>8brgF2%su_#vsw4%o$qMnx48Wpf@vekc@b z00gefwzaE31UOn{p|Lfb=AD_DseC;r|3!PA1qTWFPH8>m!)9O5>p8T9*^wPm6mbDd z(sGZf9vhy>lG&f*Y0IGikJj-gaTGuoG`knw(7=mY?0UXS4}^kKK?MM7&^?kN&i+F< z78ltobZTRYm2SkRfgf8PY#%I&hl_AY1%orGGBvvrEKPR!&cgqy%Ze2J8OUcVmVPkn~^wS`q~mdwgE&U!T7cb18yK{m@AAqSO$|fZZ%__}Q?0hPuZG zJ&=yTIzc{DZjjc`y6M%KReYjKZ?a=&3YQT^GlM?N`L`Baih@(G9lsa=*V%#@1E(?58{UVMo^=tYSYBBY%7;CzM zrRaPu4K>F$);Oi6cdhFJJa^?Y9lnRXQOt#NT+o;~$>RaJ=G}!+ZY~|NE_4N{_P;s< zWEkz?V6o_!vF;ZdmuE|5dR2;X7AKjoPMyWRz@X;kVfPN=d3LiHdc8*U@s1+p+2vxG zHO#r&FX58TU4xoKvQG!M>Ah{QrD7^VplgFr>Us@x4i#gCz90WOpwr$YR8?W{^7haC zGzL$vQ?CB0zDlYjRj{??!?(1FErfV$(8qN*y3Hu61^u$+OVb{?!3fJ2TA7}XI@m@I zVZ=^Vjy%++gU&wK5AGVstkM#5w1DHBtF59&S=J@5I#IDWZB<)6JRAL0z|0Fb{;c`a zI_U!SlIPu{RG`cZ#1g*^)M)-VzAOt#v%*PA(~$p|WN?>{k`Npu;jQFWy6>`Dvn;GX zx{9(!ocxZtP^?3%4t2*%Ndu=XQj;Vo%hU4fo)m6#oW#E+Jz-$rE)rBj2`UT%gDh-nxa_b{u0OH^np`Q+dYE^y!Gm*&3s z@K5{Tbg`d4gH>$OO^W<<9vE4y%G?57F8>KWv^ve z7Zf&f5jxSSNsiILV~i0KkM4!R*3+8SEko(uV(AGnpfELklt-ogCdb;z*5?V1u^*P| zNm&7dC?W0#Ar`jFg>N%IO-LfT^sap+&lFZQ{KAmHBeA=+wcOv2<7O0n#V10%Wuhk~ ziwW^)LNT8eg1WmX64J%ko+uI0ML-3=qjiUP&DiL$5_7M7K-NO4#y^0@I5iorYcNo$ zqlQa6`Ngv1re}Y7v~S4x44{bRnUo-_4WK3=ORBd-S9l!D=hlN>t4>w6;VRy_+9K+W zUUkBcUZ%lBVw*}UmVH^Rj`{k~1;?shY=6X(cHJ(+ryxBlZ0oZ(LXeb0K|6@NH_Myn zM}7^qtq{hp#;&ywSC}*4GI7U*6hQ51hmYTre{!8Cw5e=uGx8|jbyhl$Aqm?ep_R(d zBn}A{lY#$Bd8gwsuU<%8#e;u3^iDK+Q(x?XL3ckDTnL4(M->3D*qGaCjVj z5%WBa;SWKH{jsh@agvVcM8@;X%x-(kS1#csEm3=Y*)Bm;VgT!#DI?i*+OwTCq4aD) zct)X2qYBp|W}stsHFl#W@;P4)ILepV*AAU2EbPk4wjObmzmf@5nk(^71=VrCM;CLF2$`)_hR3k zLel=x?FQtou~HN|t-#Ye@6jAtF48*q1$`e^MlF0zD;Jfi-Pn;Fsae~b2Qxk3`J%{v zD`G;))yOg8zLUtDUi@Ita-QCOKQstzL|D(Z7Wl4@&MQ z{~oq0RAMQiI1pW5dm?N3(7;K^c-9f>eia4fJ|?y?FyL^u2IDFlt-ajnsW^|w^i&~> zt36OsgVZQI|6D9pEv(c1GKDOWg{#OsZrZXSlUvD`?jKeHDsL#Pmwj-WZv7$))eJ4i zEm-X}xmX=85qjz_6(zPuq|67)7ZV+4wMLmTg6GC>3Dq1v752~Fe|LOUAjOW?Ir@9` z7qNt0R&Nc*M$nj#zGz^;zg!r*8$m_mYPp)?YbVF~R#3fG;tUs|X4Y3y(Eg;wX_Kf| zX<6A^-0P|{u2GJx%Ko{FICIWYiF$-iWbal_gH{&aW{8oKc3c=1*1yb{>B1MGqXI1^ zv6Mlmyp2s#^7j6;L>Y6v@M!1P;+nivrdP$&8x=fR5Eb+u+1_ZiYvaD0=luAd-DFdC zuMlp$Mnzt441Y3-N(8w`)Cxy_B*_1p{8K1jpRE_KM}tQr`Fbyb=1+aLOH*4tPhqn1 zGJubZOScV#oL8z2Ebm$p3l!K95%kH zL+x@$>RuXWmtWaz$9z`4fsV_!%u_Nt#~7)2D4TJfw26Qa^Dd_vbO%FEm$#rpJf<%i zdv=G7fLB5PpJs~=L?G(&5^=nLFmUJ2%O3IdcKAI)&g|wj({mD|IEMA*2DbGlhMy8f zmdm>Ef24ty(vGQ)d%U<5iRp0DMO**5!1yeAlkYe~@$_CI{>yG(251N8RG@Arh0xdb zHPaEx#oCf=o3gP>ye3~tv zE?~1$|4%a?ew?SPkx7))&^5iR(S-8fed>wj6*HGH@6Z2fKd{M&?~usg(o?vMR$7H; z5i`*>B}qrTQKKu0`UnI8P|K1Q7Fnpuyzq@^IbmUcxaDU#bFDOSoZ9Fdr#ae-urUa2 zC6C;wril$-4z)akR7hc%{sJrsQSheuf7Oixk|i~&y%6RIc^8*GZ2h_XMB<)UPKiX9 zE7y81+gUAJ*#+yZ@DcFS!k?+frcPV@GiqhQ5b8{yM}$F#L}0bfT;TiAzXk2)DSoWi=aQlRJRfXN*T0I@#j_ zjBi|r5)@j9DMx+>;>2Rd$@x>bsNmDJ5)LpNA3p#QCgnpt681~k?w^%rG$4>v=hqh* z7uX7VNO5*GpC*tHquSp-seQvDH~KCV*Uh$%v$#If3EEQoboKBq!?mL&9^!q0y(vMJ(NFinSIjMdf2Mdj( zK+Qm7Go)BsJ<4Hsx|AWsU$ATC?4>~o_W30>K|u|aKxJs-LW1se&7ygTr6r=;dmXK~ z)+wpcFFC|S9A*D;|+OBPjT>(pn!W_P|$4b~rRV!{1zbsDl2 zL0cWW4H86{pr|Z79onZtMq|O$>DE~}r8rs4TQM`VzeA9)%SHmYhyNwe0a9y$eQQuu zB94z!LiR62!@NsN<|e*|d;daS5}|}wP0N*sW2cq%7r9ZX47}=EvVRvOC+$Zm8}mjH z(cp~}XA;^igzW8oUB5+4uuR}@KleeTf;ZUAEZ7I<7FfrV{6^TFO_KX>1?Nb(O=wi4 zpv%(X9%}9e7A^0%*7>w|PTeHWd%cdmN8e=BVn64v4Ws3*YMF$4vwp0Tz-thV)a4Imd7xXP{V2<~!1IXQh{b)?MIeAQLw5;ng8Jy*FbiR61VX##1Fd?QS`y!ot$_ ziX24y&upDOy8*a`{PTQt!jP{hHmj>a6^BA6N{KzA9JOaL`l}P<7{`5HW!^S>I_ZA@ zMIrGGB||Uo+})OuR1*u2+b6QWIntQ-KzA*-qGpsd9i0lt;9G^bHn}L%tltL=!vELX z>a*Y=>0T^gp%P?>XSkNTyCb8~<`L{7%GkPt!~>f%Ct(%?36UPr**d_N$h*|~NJ^c( zBo5G*CQqjwtoBR^@dkrXel0M_wQpgRN#wnec|HHaMn>xwXuPxp=uDgc^8=*LjT3SP zpC0)y&r~QBmql~zH(U~)i^_oMsJ+~;m$&&pmh-fa)KxyXo>AS^d}*gTgZejya$8O6 zIV@)}K`%FPfd$6>i|hx&tQNKDHR?orCySy#n3UG~!{D)70inSqJVEtrdw3KLhsuZV zIO1iQTw}}ecuTnT7^DBTS1uQlU%#9nHO?xyE%&NCPNcDbZP3I*Pfo(*=xL3Hreh2> z*D}%5KKx?|)_&$5d&k4CK&{OKA(K5|6jLIAp@T0Br-~NC?=K%_gzwMPG~)ZE1~zSg zR@C_E(4W)@z@GfZC~6O$fM8Zd+;>nFXoahdNEkmKQvcHqrRj33jlUvc%Q(%h>AJO- zzjb0-B)nFC@h0PcF_%mNBG_CO@@al{c!2ds=@KKw4gN-r3R;55v{%?5-hc9|h+{>1 zTHZy26D_Y6=Oa?k3hPOi3c>&CKf90RmbhYwIq~*Uu|>yMXUfY#b(rvSD%ffhs+UtY zKrB;QJEtcn6_tu;f$?FfDY}SPm6_%aT9YkfLmk*R_`mE6(eaA7U%gSYy>N=zfo5-o zqS~0NR&h#=GlQ94ikrv1zye}c@|Rk@{c<%@Mbxvx%Xkb&F_Jc^Y(*wYNhZrxcEuwz zEr0D>F4vFL@o)-v&MNdu-hE5HcK53e#pozT8Z`;UU4(!siwJ$@6k@cLu$3m^BY)%$ z>|-f`Vn`9P(_0u7XoZ1uj^JnTCJ*M+DVKyAZF^98KCJ@Zqq`k%PXk37@0lVJ^QKO` z+~4Q($?fPFh{kurmsH4=4*FvFlbu;PB3@#=?psDP4>-#IM3!m;N*b z!)h3^6IlbRTc`4&)@RfF5i51UYF?{0Ats#(4T#%0w#RRmJY~xR$xH!D>ugVf4t6Jqx3^SP0L}k|uS(91m`h zJgZa%6f{HWk0#U7n*Ut)$`H@A-@*bY3rXRQBQ2q?vfeXO3-k31=Vx`5w7dn4`M60W z23x8U5CLkz^_xnUrdxCUoQlA~7F>Z*enYOFHF4tnfN#2*b@Z4}-m`ir#{{D~YMA(YF#lf()9 z6#seYTzZ6fc{=Okmyyn>mU{yM_xjcExPujm=|@2s3Dh$Yrb&1$6LqcM%F3M~!8@et zgp5((XJ#w=!ZWWb8|`Iw=tPaNckUkyV*r*WCl1y@Cn{j~rHVZ^_7}7QHkCQ-JnUI@ zrL-lBcIoMh*<%^bVtUf4`cAp%2MtURztGmSUFvM|Z=z3WGX)AAU2mMOT|(?9A8Bey zdjKXDYSW0l5g2{~+NdMSq!)>43%h#NlQ>N*3k3aJjx?}7zGKN1f3<7rdW1Jf1OH1K^QKQv}kGGLJ7UG5*}J)SGPwzjNR|E@Qh33IWDFOc0bS`EKh z?PWoN@vS-{9zHTVQ*Qb;bW-AH=4uyM!Iz;B)mOs+2tyF5e_h(1A?j;0ahA2ixjh5) z+7!0&PR+f;&<=5A=3mH6XSo!_97gMd?9vOWBUEf{0iV2EMV&G&aK>>)Udy;m>7f`} zGU7>fQ~N<>hdvNf`HYB~py;+nET%;}Za&LOMb427K=v77f8MOQe|M@+|LKf| zKKaV)GL#fkk{3Y}e*H9x^o7=PUMo`Ey<_xlGz%J2q@L$VejT#U)3U90BQ<;H@6O&$ zHOUd{(h+I3-qiC+%%XvxAERT1MBpeyWdF4=(xQu!B;H_*wN1FZUN68qj$BdE^k6Pt zn(|}sezN)KRlr&Gt~GGHu#%LRnTIlkI2QE0ccqwhCwf5*-splo4MzW|BnmIqpDaPZ zHtc*cYc791IxSnyKpL)S!244aN$y4uv%7Odew;qkfwO}I*cH^xg`xjHL6|3VE z0bKh`tQ3=OWfO4xo32yJX`^{;^0XLBLvv?>eE>I4?k!TlUK3yVYWo%&39e_zi&65B|lzCU9H+*JYvb=4}aT5Pi z^UO)C(wdbzt*k5vME}!VPfnHt@yQMxR!{2Ooo(uF>Zh6m>?5BB8$M&R5i}Rw>m6IM zm|%ksvH}uiT~ny9!V?dZ!a~o7qC+nRLh9pDR(vaE24kdnbUq35(qw(t5v5R;VGvUQn!|yBar0u% zqxWN`oSI&?Sj)q2poAHSm$5xly`a=7ZK&OGSF<%2OR5vr)A?q`qh6QO_4blaLI3Zm zEm0gApvLeatL=|Y2ArUXi;Gj#)MPwpzHh298GFavd}G@)Fu=Fw5<9taBq4Ijit_ws zd1^m+-H(ZpKgA^M_svT(oFmsptV77$JACotsh3_6xZ+Fls=VuttOUQ0tJH=B$uHMV zNj(jIhq*Kmk3DbtuYkk$B$P~mIT)WM8YtD2sBvGqo%2^Ow%~nF(|_e9rGeJRfk!%55Z0>NujhG|94BDN#blvCS@a zO|6m;?Znv@sK zL(UAoYV&s8m2Vpiy`B1Xo}SJn$;%Y0{ORg7$DN}f_oX-2lPr@>wveB19lX|FHJB0* z^dTHUqJu*2qoe=e6(ac*nV^__OtjOIV4PXR~y%|H?lq#g~8m{a~7$Y%n_qRK30IZ&(Q zlfWcCZ&7XHsFgutg#EN@f)~}B%+_ew<8XVED+pF!MV2K~jx+M3Clj6FMAM_0954o=f~5S$#&d&R{&sJTbLV01&KW^LvPTO;Mtdb$M` zHy5b}FKil+bP=Gl+I5AfkZMq6XoN-rbOSYrUTJrfGfIje0fd3ny)gQ;?64b4&HYmn z@j3CtUapyQ6o4*G0F43?OKfpM+uzsz8L5oCu%MQSt+uEqz!9^c`$JuuieCIJ63-9v z3D&H1cYO67)lQ)yW^3k2ETZf!wR3zK37X?Jd6BzxQH_SzJEx!Qhd_Ym+HO57%eN0b zWrvyUZlEAENQ?hYQTNMN?rsAeFhg7XYG%=mH=Cwhsvhq@Icy@mVCo2`T>1Gm8u@2P z4BM1iQyqf>@gsPrp-hqcLORs*s+b@d48jOIjsj%@se<<8Xy&*WO$O1*mejS|^6TzO zt>Um4$EKpEl~Y+*$o9MRI^m4mWy&ffI#eWMKc(&yJx2R{^!F5JCG)7%^5bRS4hu7Z zfA}aRr$R!UL*jm!hN^tEpqneudUl)hLQ}Ut9|yZa#+*l`EuYaT8-xAXqr1V9<|M#4 zz#DsiYmWC0H71gx%_q;lv{G2RIG~RP%XApCIQNCkjMgYieT?SJ8dhATRh2pYg7yXm zviu7$KuuIFCzVy(H#0gKOUy=c(6*aWX^rwoMT10aBg&`;;z$w8tTBgsbVeMH7fPIJi5G+ z25K=Mvlo))Fk=NQylE3kX~(u)RI%b}-{IsEG3pWVTkpn*!~^2-m4z$iEI<&aTG3)f z&W&H6NQ{vnH#|zEy2@fsEuAYBTv?v7WO0+0Urq=1LCie*PfX*TSN}v}3c!9a~_uAxZx8&2cT6%r;?eIZ4WxLuIGyE5-( zRM!O2FyAvdhs^gW1=_E(&*)x+%|jHE=!M6}A5CL=G>Bjn=A>_`V6%?y*ai+#2b9ly(Rw?D&BbJc08p+F2XAomvg!q|jpph!A z>~$%ZCUpFJIR*{4|3H!V_m!L|#3cCli$To3w2^22Pt|?F>nu@asp7o@a%!p4WKLXj z&?V^@18mtW&Ip>B!G8wG;L)4Zyex1CJhLL=7j}dIS;B8^*L{N}Fm62<8V& zb|sX&09o`M%)dd{|Er?Df2C&QnLd4e)T)X>i|y;S37)OM*AEO3J<2-ISQpV>_;95T=0TkQ+U2a#k!*^k(oNAJ zR-0MwA9y(4m-mkl-=@o)0RJ2qv0Ncg2FCvDafKC<;H0EF%1w$Ku`7&?0_wG%165F_ z?;nMiD+?61;0(mmHzn~I`cs%OvqbGZSEuR){w zPo2~()4ps{doq*(_yz_epcI(m@|UuTI_)#xXSV%pVUm)PnI$Fiz@f&>tSl*QZIH=W z_P5OJ?0CP3{7#ps=;&S`4MKy1v~7`aMLzjmU)X=3lyDV?hpy@W&mGsAocE@ zpM0MJa3;#_V*kyzupp_3S#u7P*{VVVBctsD(TSs2ziyzJ_E4c`8)?8_=Pn0cqA9JbnuR ziF50-NkA!_1aR=nV7JERwc)Wrqt^UeAK-ff!c%TmJy(I_TCPN7tsb{KIz5L=ZCSPI zA_gOD{og0k|$ueRJSCFb!m=SEyG+e0Wmo69XKrpE~*psAMxR3oPDm`TXW zMxPAw$mJeg-SFQYlXL%Q#YdbhVL>RAl#-%cisJ9u7`sURxVG+Ye3r+qsBBMZs{_;? zX93*EZZvR8>M#ywgF_hfNt@gC^kdZ6lKZR`zp;<7&5g{f6XaOCg^}zez+55%B|<-z zu-rV%NR${NqiJDcW_cG>%-8SaZS#DFeP1s5SHbDf>BvoH`S|Kg1<$4(sh$T@#fukY~x;ORX4ss8`>Z#y>0IyR-UiR^I* zWrR3Zj**nTkG&mxwXCuwIu3`j_g0aS8QIBR*^cphdVfE+-ygv3#yPLo^Z9sO*LA-% zrAIed->WW1i$ZYZQzbYaX7MTK>RHY~=Zd0?^S6&Hux?K_?vcHlnty4yq2=>>tEl`} zPCd4-nIaw6e&^N^L-h~qcMqPk_{&Kdhx@wre??CieZihhMD@L?`EieUBk2w9yP%Sk zuIm#Vc`|OtBOvG+O~Z-!k0pDFPj1q%36^bN`gG~g3un+cy&h>uj(Xxvub6Q|6=;;530>AIx#eWtkE4>&=@)-! zArH?<*A@?f1?*^z_l|0`v9>Eg%Af3}8_o;Q=tE^BoIH?Qg7d3P8H}N1AwP!?*23oR z3?mVGcm8Y*>Z=&MFqC&8cqd4t&KJ|;tl?euY})M$O00~&{pOd(jj3j|G4FLEXH(PH z0pn6PoG!e7z1C(<$q*{t!ZnjTy3&?xV&c6wb>^;*Ox^R8s|nJecRSHl%;qT*MhH~1 ztD2?b%z~B!7;1hrSJWY%2hR?lnBu-C2H70OPH(UVzJDq1`(PV-x0f|^pKFpmMIO9!{oBzP z&ZOV2dDr@JJz3!Mf$Y-dZIFpB$r{^4cceuXzaHo>3$%RHm+n_rm*TqIgW~q9s1ayc zHcY)E*^3UmEBDv?x&P7>i&)KFn{I|5D@J=~kLt1zH9a;*@QvnTXUi%Vq0!z1Kl$gs zDyEHZbHl2+ z?w_y1XRmLM*n1Rt9AyKbAWs)J2Bez54~trX^spa^VZ;KZqiyxAr;K zQY>$`3j%Hs$WnGE!8V@oH!4Ep^_yO0yvi6fR{Ob_yMs!)Ir2SFHS=|*$K+nSSmp zTXt?79#usY#K=u>VXfGNv3~ro-{i+n)~V$|%dgh?Y5AyKq}k z3#<*Vq*4KVhV-Zn!0f;z3Q(xL;{-q zKgWDtSG=EJwrQF*Wz!D7HFjI;7vmzwQr7SicejI&!bjHm8 z8_v0?>|VAGxC$Dt=1!;L6Q1^-AI*yR>EGOjps6`!d9>1mQZhLE--37Ay63Jecdi}S zk|(fA8S&}7`#`8_%(ND`+r{*6yyZgZbGAu$1kHsuz?hgX?UT}QyaiF;mVI9WB3qiX zqmbV6c}t^1Zr}6qmh2eqh!V;3!+{D-r?dsOVK5GLx@UH5@$pI)Jw86IR9vdh=a zgu0tXHt;xxL;~ai7jpqjK-_s!0_43iD_w?V%NEi1CQ?hERDbXJqL_M>1{*5q*;i~V zljhU2_Z(8Y`zO=0e+XIp{dZkXZ_dSj(N_jhIxdCt{SdE!8ACuWtNl3yFq<17LG4`F`T^6Z{deGrRe#HXEy#ACS}aKA zXH^B|-J0XpH?tBm&2qfGg;IojhBdwXbIeXIY)3>Yi2>sc8 zQT=3pSl9O3>%#heX>Tq`NwuSnw|5L|+dKCP9n;E+6w+l6PcCsGmd#_*d?9wtzAHbg z;?J-r9{4@sNV-J30j0~vKmZ@8HxK0AEp-ht03I^lkh8_hHF+Ulk&B35$yu^KXm^E~ zpd-W=kxTfhA9!%F*{uJmcRF;07@|t+^C*MvrgvhCD#H*qOGnWNl7ImE$K20U2tjl< zPvu1mnXLmk$X3^LUTpca3`cReXjo=Y+3tOLF(3w;Bos$ZjyRA;X)Gec$XYHy;8Qjy zZVvr#LKtMs$K4$Ne0}u~nKtDJv@|7F&>)QV!X<6TpfBop>D{dCI<$I{^55t=q>WTile?S17AVh`Qyb>ATlq^KEe5<18*44zJ`c^T>zxOJ=KJ7g4fxqNK?R|@&b4kCoZ$%QV@l6D` zlT0&9ic>pfd;mOP6i@WfMEJJgOXT_(oV>hz7JvnAEoHpOj!i&BFLNirViH%8Q#RFf z*oXt>m6ZEpv84;g6HPCCZrpCGa6%yOLi=q|liQ7Z)q&d=+uw5AA|5#^S z57-i>m6+39yW$u;06^i}+fN2wbwleGdU_`I!NkNp0t!isB_D0B8J~3oBp@Y4QP0)j zY{tbS9T&%ooR`J(UK{=dGjEJa&4d7*AfIenIPHncN!*7QAI4=sx-EIHQ&vPQ%Jk%0 zN!He{FUB=kw1C9|vNIXJ6n3HvW(e)uXIM?_;u-PYQhon8yuoE+CgZLWx>97f5Wiao zzz@Ocg9cZ2W(ohn@=AUay!or|_|tkSBbw3MQqx`q``hEXfwwwHDvPE@r1c8zc0$!@ zpq6kLA$g*bgpru<*;hJVU9you(JPci)#qEXF|oGD%Tqv3kictYs3W1_2-F-UJS1&T zkLK`y09aS%wjBfSsBx6T8#7HkC_#L{Woi(JRN7T8*p0oFEee~^ctvu%T>!;hGwtnY zPB?FKN=DDO;{Rk+rH7)`YXra3HkY*ixUx^UC}>jy_)t#03@U=kepE=oi= z+UCz&tDGCkMGgBKbTn=JW0yWj5L+J<@cnN7M~WPAsaW&-t^dZRTC&8^E&r9F$ug>8Hs9P2BMruEQ^4Cib|%1U^Tj4(?08xACi=`*sOMQN zdf6}v?;McLUV*m<=d1F2P>WmgN~eu}0B`YQPacZOaq;P28~aqfhgsMaDPocIcng>) zB|jM`+%X710r3wsCWZ$90$o|9V8ZlpbI=cl+W%fMu?hG_;jpT4&#r`-&eT*zcMWp2{4tx+r9>|w|fmQYr zdA$_;&+w?0H#VG{<$-~8M(`E}E?!Kj3{RI-^2)-2HwMB!i_Sc^;X1Sh43M#coGD7h z9&P{Lym_O&;`u;T6a_Kjy*}+e>0>7{ZjMC$UUcSu(7I>gJKyyng-+#$c^lodh`uB} zR=+^qVLWfeB{QB;XoSBWjm`@X%O#U|uEy_W1+t>zR;{65or&Tnbcg0ssze6i6u8s5 zHo}j24X_fu@|GQu`u)6yA-J&x(hSz00kl^@262c9T_j7ndCbJb@%3wr2y-j5G5GsD z3iar)TFD&KKNO)Kru*E8YlNQMb9A$X&t*#M-_TV&`4IK+_)~n`-n`D-`78(RN=oDlP^_+k2^RYtV0QG*eoI4ZhfY>n?h8$n|8qiZy!CE zfrwOa0450fItedVmbk6QpK5AGmlBiZn%Uqd5yLCAUY#*?;QYZ>WSdwTCYaj%v}P?2 z5zFySb}!-C8q&B#=amp!)AFDAAFSP}t1GR1M+rAJxdgLS1wY}3DAf3~>JybY@QlS1 zMM~=qA{cQWBK(qD6(=ifiZEvIiku2vx5oT%_rct@l*0qS2}o{=-k}Zi_VSHA`VErJ zE2lSZ6{REBbB}87<_&{OH9xV5FV$`&p~aMmuk+yO>DN~UuW*Amcf%=!X^SF4{#|Y6 zidPqkei22GSh%|{sdLnyFLhg})May9!Md)9kCjuVEf?oEzGZ!YT}OX#Q@ih&$s)1C zC}M$uX?nGWuf5UW^pg;0-`|?nYTiwBz2b>fzQ#vbB(W=fwC=RL`1jzMS%Tv}U=e0S zUDEKvO%&-h8_y4)$VMeIm~-7%t`Rj%=dOjRU57?k28s<35nPVAD2LK6Hu=oHiKXYe z4-J=uEpm>&7*IG0e3m7;JybA|($MT}oQ1uIswi?B)evZHSA0_Ov~a7yWx75~T!H_E zQJFbiU7{7a4XG)ECFEXC(BC>u>>hxI3kP#9GY?*M#U}LTRnP8R%YU zL{W3_2b~_i>P8*3(Ii>285gMMX+4WF`dV1jGu}my|E-5}APyA=c{rGRxn|sgZeu6l zV&lA;VT*G7)U$(6S051bq9DCoV&KgfNjUpZDX2$?DHN0wE{X{s`ONR1Ne+d4Dn5|CotJi^;QW?suDej3?BF*IJ1i z)e!_qDd&$ZZ-R5Ie$E>Bm_b^EkO>EctOxx{a=<}u_rqNtb9 zOW|~-Aep!KzUo#u1)l>_%PTipeFa==oevGl&c;KgnON?UTGK!Ws)$VhcVcG+d~KP` zs%+Yn2Wb@cbB&Zo7@#?|W;fbzl<+_jjW!A<@F?b4s_7#lp3sKsNQbEWxz~N6QX?vW zrz{?argdI8$MJrQ&+5L`K zba#$Q%<6%k?x(o+O5Y%x`6kt#4p}mUuKw=$Fv^D!BbObpoaN&{%y!7Ca?8nhKa#+~ zz}(O&yguW!*{W@Qx0Ud+)F#Xn2T8FlzOPz144_>F)26KS?K+vfSIA0`iGT^D3D^C3 zTB;sLU0AMLR==i6Z`Pa(yE|vDI!fPOe_H?f))=W0B=;$HEiP2))~$x`{L+RW^Wy;R zq-jB6k(bKQ2HP4Z!Z=ojVDiH%b44BfI2+q-Y5udW4Dj{X zC8XVvXs`#){5hyWNM_@vaCt`Ys^s5E;Kf(2j?nIF=-hnP%9Z@P&vst&w;c4y-+Gi; zJne-kanIXr3c^uS`Ib|!JZBCn6qa8G#|!2&lqyl*98Q%epVs>+qT^_NTsO_~%}X*i z+WPa8fsiDWvB|x$c~YfgSe5ag5~{yp4);(Zc0{}r%1HM5bTHW$JmzHxBPGeLfoA${ zft4>$8w<2#h4DGEmx$+ zLiTo=BafmdY}(9<04&ZS?Z?+hlD=lg4Ri&14%wBW=C1gJNkv(&%65;DMbu5X&|d!s zH0Z$4YpFB99m(_`y`0B^|LPVS-Qo9LY7LI)!d|4U4+`^*CWZ~4JY%{+0Y$2*b-kK` z7}Jj2_W^_*`Z8r>bMu4IzvVi`!e3PQiDXu~V|phFDk3#wR>V9-qi6`wYg{7$T+ERy zN2^@?#bHVFWG;e+H-+2IiP!7+*FZ2Dk+?Qlo*Wg&Xy~5D%H2-8!J06H+R|p$`W8-} zcd*{lD9*w!LF;6KW5p388uPI#QT&o#6lj<8@{Re9DEls^RK(ESwBzByg*sJvc`$@A ztL$z_32Y^lbN!&p8)zD<3^R=%^^@_uW*SdqLy`L@;k(uC*Dg;Yx-Z8{r+8}I&8zxd zOA*&gBECzZVvRy0k*Z8>?+7ptnY7X4V&BAn$j)V|rag324oE0rBq!D}2@FfZqIQ_p zG?LM><(0Sj$iQR8c<3v9@m3!2HSH)W<6E|BnoA&AmzVRS9JT^6cr! zqf`vEwP#BrA)nm)gxPwB!l*4uR>-^1BS*E~V{==8ZawUh8p=gDZJ>m6swQ!QAt&gQ)aS+8Q_3NNmk6}_qhGzNKXkd3pUUA-izJDhr zM>2NPEZVK1+KmMmv{g#-gb>x*GeOJj8FyclWlu>LUCVQ{LReicG~wHnn)Wb~gw0lY zrh!`?$$=rz$IS}TB#8$HzHC7AxRt)6C8J+Uqh#Wi;WDy>&v6diw}gg#^Z(J z7QPB%(v?W!dsiD;jpl<=SBE3<1btK-4~5EI%9-rU{Uwiz%cn;oBuv;+V{<1$_Pt_k z$tOuZ6czZ&S6d{C)N8G#O}D?U65!{L7iB(qeKY>R;cXGC3tTda-lC_TNS^jd#RRjs z_}%@r1i%D)#bg=yu;)<+j~ss#albjba`cdm6w%Ih;;`?Bp z>Vm`d0<)!9fJ?OSUtM}|lZ*sE_|K5WGeDB3@?elPB;~?<<}$3sZ8iJ>_xDnRn&!8E z-afEHwNg>JQFPx!_gejS7ZSOt=F)t^R~oKj8#n3}gxjoH%JkIuc9Y5S@$wwc*a_du zc3-%WUZl$#W;{6&C0*9>vAGSq+$2$|A;ln^p?|Q4=I1R-ry2&lIr5}z58W!8+tzY! zzwb*u7rW3kdTx|B$_!ya+awl_rt2j}3#S6YWX{z9M@T}PbI%!_0F~5K6=+O?WQcN% zHOOWC?tlAbp#D5vQ8;}3^u{n>N&*lhP#VbcO zCZfy}Y+@4{TdZ1|ciJh$y*HRykXc-aERw__b&AhJEY8u+rk&|jFCE;WjO-3|MMRqRUSDx6x1#Y{yi^SVx>GWTj9~W2BH_*swiVxR;xTHp|Qbz+rCwc za1J=#P>S6OG(uRf7HxubTT&r{Ov?hI*g zj0((h-;kkqo~#`EP6no`!z*5Y&zH8jO`~xwBA>*{KT3bu?ePj(gSiGlZ`3qY?q~jYFww=uONjlYC-fQ)zY48zl z_F+qNkS^H{KlA`!hQ9c50!Q?thW8m2Q%7-+4?s(rg;0Q;PCbGku9{GKuLsikg$7JOQb3lHJuZrg^o z3aD}UgB?>)f-L2pHU8kiQ+zbBS zAADS?XZ{1l{LmO)*Bv3S!W0RV)#g8DfbjEO$pH2Yk=~po-E_msf%`)(4pPz-e$M6pSaY)w`v!u>i}xf78t7^vzsSw0!?bPTe>?IthZYXJ~@yWZ-T}6WiIYQdyYIX z4dHKExD~@pN)hp};9oC!q#ld-(?2l=;BY+zs{@18lj4PTypvJnluB!rRa^VlMF@lF z*L&gG6eOF;)J(hn7>gz}xa!V}Q4$3^NcBfiRnl6iS;A?j+}nuXJS!*DM57fu#KOnd zwZp5=8UtCR-Sqz4Q@L&!rsiXr5Xmpw`0+`#%aGnJHiz2taOaXWbR1-Ir(Oi$kpHWI zVDT)on#~I*T^>C@3K?gk$l^(!msE0_v-*uVqb*gzy@^PZQKTCD9Sn$W`)kSYXk&bURPHq`X^!)$>xiOC0o!T~ zm&G6&<2&boV#>o%17UJ)+>PS1m=w*zL=NI3&VehlNOqI)aSYwrBftPS)o)uy`mmL z!cHJ>xP@|HmZDg9B6c}GYPTOg;CC?+4Y$qBUk8u!$az4$-q6oNN2b!4a;|5v8a>C{ z&A83Y68MXXK?wUjuXLk9Q@x-tv7|vY{_6R7QP6{6kplb}>RYN2LBDG&QlMLNwA7xNu1-c2o zbf-Gl6$g7Yym>lSDq7}#u@l*OGtHcB^(m;r`lQvr`++OcJQ!8}Xe&qP6mr7mXjK-j5u&ESVmKPR?;h z*n+N;D@@>uvjpY>jCdJ(tL1ytLbMnU`|k#4=$u9339#;>?g} z=k=?8<8!Z$XpMS_)u0{%^qa`<52||LoNKV*TfpxLy&g zcVlUGlmGWfrbpxFv5R;(f<@^0aac||vKc|@s6H5RezF~MiF@0YNlFDR#_C9*Y$ueY zy>p*lx`=XrrKxJ*x1d4M^ri~G@tF-WE`oI#ZH)4Dv8uSEg~*pAm6Gk}y~DA}Z2GhKU;84z_k&CSU#TEbF2ACPK;1sX};8~FAE zK#K_vOsI@f>goMe7E3%lwnx!^S(B@N*6dTo9{#7RFC?70QkF$i0Yla+Lv56+-k*Tr zkJ8yZ&A(Pcng>TN(@2Z4YWc&7*@JdkMkn3N;PWn*_-#2VRKVTm=EXh4Wlm%(-G`m@ zx+@hyK(nkY5gA*0qpO$#WcNn{xE0|x`07kSgLi~qixtaU9TjdcWa#URatV-fqNg2^{PvnSAvd} zHJofX%!#Jix7dYEGIRTi&bakTdVo$?1B(O8y+WO-yDf42bT{uc7Ug^!4PHMDEXBL0 zv}@$k9c=3HaeYc}Eg%pMlp5(P`^!abGW%Vl=JQS0-r0-8^bI9HHCUjVaur^E|J*Hq ztL=$p8@+XK2&j=BJ0}R_=jk6dZO>u}-xlm9L@|U%0&Uc^p=ORez)m~=6q0CKGEZSw zJRP|AL-y}m;&plCtauS%~L0@Bn z+yN4M%~#6K$?+iT7Za#=8AQ`bL{(63@Df3c9)vCu;#L6xe&~)(G1+U0&NPMKbKELMeE5s_{wrKj_NN%!$1_Mw3UU zqKCN^u8Wd?@%Z6zv#Q()z*gT>!u=ZHK``%ba|T~(_?;>Zq}%>kHF@GoHRL=rd5giu z3;F6wvp@KU&%UQ@%aLSL62M`x*m7}z<-_2TO|dV3gXN#c`1saO;e2|&OcB>+Q+Ip_ z8!wO|Qn495;zj10p7-I!ZDuL!r1HadIFplYoYcQX}!V?+5()Vn>~(u!1=Kn z%pQ6gzzdsllT>Gi3bT07^ zELI{(IgTr2M27nUeCqvZPGhyR`{Ax~Ku3<9527qa7b{{W%3@hR$O-(_!Wk#tn@?zLH*I zK<_NR*jbMvilTvn&2M4gC2n@O+a8WyR~#-w$XzLeI*W&nuR&}eu@Euk{SPpNm4Tvo z{p2MIdA~+D;RLlqhHvDxczt?et8uTy|DbDv#OslF((j=0X)}FV_V)P*CTM%HG;C3* z{vSDKC(skHz0!MmpUT?U$5@O{>cRD#cRiV=1@hoxcOXR5)Gs4b7-d;2Yc7c4MHgVu z*=t;QofV<5r2-{sYfG-*ZKSFj@hja@sj=gP^RSI*2SFydJd?TT?%ST7ck>a7!E>N( zAq^b=lk!FGv*Ls29>+WLWPb^9_U>%iO*&zsLG436l(v8s$5iBzS77X8 z*1#bL&})Xyea=bVp+1U(^@u=MeuBo+eU zdz8tQ6LgqyuT#im8`zfPdsop&4hX>oST5R)3!UY9+^FUu#}UjH=P#^BvAVnkjv!;X zmN93uUfqyW19o{#+{1sN7-`OlgUkyxSR7##=uWA-JlIr&S_ z`enJvb9{m0w2Of@h3Kt@hF(YD85lfXe0QrqniE{o-!GPaky)PkS(XGE$!6$X8#axG zmH&+}kIcz80R;OENg;T4z@bcOXWW)q{PIE&WSZMO;mTkIr8t}hcaMM*-0Wo;)3X>3 z8XD}ct?2--gbs8WdF%m)orNQtoojnpuB7 z_9g2wz2Xxq!AEEDM?9JFMohMiIrG2U>*9}O&*ms@_K_}gD;CW8WJVmbx*~VGW}S(8 zkFODIPahMIaMPxS`OTABs?2|3C-6HvZ=H2JQ|M09g7$=Q9kkb5g)I0TtB~guxXW8{T0#2=L!#X==D{aRr$@}AUurq0%8YUM*7e-=U;coO zSa3IuDzaqCDuvbnjMkc3*IM@6c14Q(GZ zB;9>+Iabqr2TX6V!E-Y$m!TX?U`P_<#5Al%J31-?kFf|3=Y!pMT}E&799FM-!V1ZA zPVKZ83D?G(4<%WoTrz{dcAFqV3BJ+H`V&*ORgc8@TkGN=NWmbh9$##3-8P z!_}|)QDIJpUQoST&uauPjXvm^aG~+O%y62j*SYtu8&B~ihm6O>#&+&6pI?&?TBA(` zN!LwBE27u3!L(zTkDWA0I}hI@gGWM?cYlbC7cak%8y{E^A2Dxhgp6#BoOoKacD}4KJLZ z52X#cM+=!}>o!U7W!o)$T(%+YQg9n+Tbs8DL6Ef-!OxJi5Y z8>U&yHXd1DE*x|OnHUFtayUnHUv&F^I>tqhlMS1LYL`=H0{-9KFN^})BF1Ug;|DT* zn?(N*j4@%!4tW)Otj}QUdxVEFio66Cgn_Xrq>6InI8BcA4l!R6**<^kh5AI)k^ArD zamJAMu`$KZDa+qM&a68)LnKgW2g=bDIF%vOaqcw{@a0NB?nufx4W*Gdc8kp!4x>rl zO>o6yNbC)Rd!NYBgN10Zp+Xdm_;EF3o>8OMZ1#L}OksrY`=~%<-UnjNIfutN>(?pP zV_X|{4d?@3CO0qG2ug^eS)Ua1A6ubE!+A9_y~mXUCz8(fESY?N4B^3S?qu7$2U;au zJ2UqhQv3N5vwJuQ!Q3IjuFIFYRyxY^?Q(c#%Y-;A-s4t+3LbwVQ<>e;pFVv$FRk2B z%!l+#9t)LH(hXT7hy4p9wDczJQtYUc3iR!;ERQI@(>6;T7z`5)3uU*aQcUCGg4sy~ zoqAE>a{T_XP(23bFg>C$k{K<1d{o)$@d92LnF=@2y0N)?WItyf+02t2HJ%wy{iX;v z((NYS+2DWQZXMJ?{^1{SV_>1-gQWPR&FQU7_>dUd1*(f`n5xO(F|-wY+NlK`taJwso)6oe1BW>9B^Oa=vHHA{MFEb^TCa zj4VfN$KOVwB4;P^tt8`}F~TX-xeL37QK4YFYG72``oUEhXd2kLN{mUT0b=r9ka|ia znjN!lj9Xcw3ha%hiDAP=#Vjz8M?V|yNBBn?Q9wW2U4Q=kIfO2VY@S4gXPtr(b+=et zWdgN>&j5qKX!+)P*1Dth@Y|v#`#Ds|iS99LQE(&onVya@yruiYRa;))%3TgyvHn45 z8Dmuk3DT2^bP#b&P(|I8PTplJyYtbB|r%Q!wmwf5C3lZ_2c>KY{z zdTDhke(omf2pWr260CJj?2S7Q8?Z4-3)~>>qgannz7_^7AbVARBRB==apXC(JM~sm zpuY!4iwAmXg=i27k(#P22SUwa#LGUq}x z+?3jB`)Kef(Mhy3TnQ>B;ok+lZrwLl1)bx21gWvgq;SPzWtA11py1Zpys=Ym6PPVa zI6q3hn6KjnjnlRxw&^2`2K3yv$>!tO`8z~i1?JkktwXMC(^sWkEB@9{6l{ej+Ccy% zw$dKcL)&T{Gz1?YU)ixh_2jEEV>l0A!S&;v+Yc9l$Z^Ee2ZO{M+{`5U8cWP$qiBgQ zWoz-9uv*k0?K;Z2E&anW`#{gWFD2pvLoOr$iD!qlt|i6j^^q51>?>TPNp_(5a$Fo5 zh1Usg3G8&VnA{3vi5(|LXqJjulyd!mMql5%uN-?~V_~HH965hqjp_?ypYIQ!&V;${>&skI82c^Nyi3(|OeC`TsG>dPQe?~i zQBa)BHHwZarHuPOhbFW*PF2igJHSfpnk#H>?}*8HQbL^zFj6Rl+WMH@Z2gRT`4v8 zpv^zejC5H<<(hV~6$A!qa7yqBSfL*~;9&xXx@u}E$Wbf9eJj)2L}jug?)z;tf1{5m zF}$gN{j1ZItE}<)aR&4hcEF@bBU6b@`hnTVI+WI0{Iud(J09(u)q>nXRLM zqoPBx-3G!i;C0sizlxsbqW&Ies1h@|mV@SJTKylQe4l#O?=EXSu7VdH-28Lr+Q9ds zn-hB;6@_#0p>Hvw{n=#E8}%jJ zR!{P4ddU3+)6*nd*0#P7h{Xg8tDsGca&3jCCi_?XG`8QEK)Nh~4n`l?z9q&fdSBXP z$#$FT)YO-#8P{A2LAvrqK3`+yw>B%$#4NPmhWnhyD{wqbvuO&hz-59ik#60F`&6yl zd+VdNJ3`qv>nYk5j((Tg+??0|ZK1`_#|ozlIs_zw2M-{KpyoqB|Fy?l(?4&=TRFzD zv;UU3PGrPvNd`+~@b8S`{=wd!2c*e6KTBW7#6Um9|+O$lL@~Q zEBG0NQBKe`b9hJA`QpCtX40C#*-jH^1py@Rt5QfRNLb4BbUEQAog@R50_3^pbA(X* zsL_?9W#n;%B;JXi&_hcf^stl zT`7DOiB!bvVI^K91o-xv<;{t^(8s<1zm{Q54Rn86JlwmgnCsyP&<5t=V#J)|!h!$N zReg7f?gDw{P}}36_P~nZtC-T&6&G4=+G|V?EAz6$dF=v$kgKt! zS{v%{7Q~2~^oaOx58hTgvNb0j-1J_rEJnBPr;{kzt=J@}noH8A-1g;wPSw&NvUjD+ ze#a~?`Y}^-PJh$V(n1EOCoP^xia>;D8|S`H0ry|F;FD@?3%?}>5Q7TfHSViYxxsc< zn$PX*3Pl#;(zvUhMcqRzY#wgED}B)g_Y<>ZD*+{0lnd!yy9tZbOb^?4BbOFsr28@a zC7_IwUFlkjO%|<%H59}9w+^I5Gh{qJURg%BI|2)=5#`!!y~k~SVGb35rM&hJtj{on z!J-QNOc=tC=RmS8W%6imERC134geRcAvex3s>=mMCz`F{pJ7KFVA;mO{PMTJ=IGfH(;iLQ5s{%@{UpUwtCMWbTn2Z`6liJ3NqnX z_R43Hi*5f0^cm^P+pY0heO$^6Bm4rIW1$>@hreD-Dyyl|CkC3U{dz}D6(G@f)tQ;t z-4)N|sLGUbBRv`pzia>V#xKyCg)#l2&N^pzy+AD9mS+SCrcn$ix$jP5FEO^uRtjlW zOd?U}Idrt3wF2_F8X+|*SDM6)&9sd;oRUqTIJ8|XI@bnBSpH7jw3A<6B!h6RadP~X za0y};2kG~@_UEHHubkY^4%S9rh1&I{i~R)aTGL9qS68K@{+WtE2KN9FwO-H&U((xo zY7VLa>p4tjK=%z&p+Z|gxl4ZM4CoLiZ=F?Y!&@D}e+*h|^$Wzn$9u|yCb9t#%-$;E zC8afWKQ~4$HI_n-JF}zO261|@UbNf~{<>$NEU|tASiBq`c!KcVs>fAh)-sho={Q#P(@DmWu|Kcz??%uWnlQmWYi=Sv>N{{7QM1# zmXrXWVI0H|kvnxg*Mlfg6J_JeW*v4QFM$zb=jR_RSCbA?7eSluunFei8||S&>3hC| z23=ub1Wc3h{A;%oYD3z_KtOE>o0o1ALuuY*i-(l$V3FomaP8%YMFwtu6=5Qd6|<;i zp8YGAsh6LTl*u}&+XlCEMUpjz${hhrMYsLut@sP3y`C27TjkmqfiaQ#2KLm*m&7TS z=^WPAs_ED5vjoyfrlN9Iwp<|vZX8x}?n?c<+VOiL{(YigtN&dz1m$nS`p5-EB5fl` zv~%k@WFemrwjs5yfIraYpG$t%U)jG=#43Q!AsyEbDg;4)1lvYIGN7$vQ|689PX3 z&Gt7Uq}2Iy|MrR}2kct-O+#zzY+p9uVvX07+NhZ*k$S3Vw3H>uDInUp4cT%7X3$Q@ zrwEp7+xin0@=|94+0=F29iNZVq1v3~K?Q({AE&hAfc z-l}-wjfSjQWLpXwI0lvR!(CCJ~%tMLnilx?Uv@7U%A$rw|s}=I|#U-=6Ag z!t%V2;|5gX=g{pg$LJot`LLc+O+i6c5X1PG!fF^2co8a{Pw>j5cm?J?=OO7t$|gVr z;|k+sqwsBV*EYo`C%9!e%H;)1k1Rt=b71&eR(2E1XCUIDRNYTIb|X)6<=Db0z3f%3 zY^XYuY-oD~x?|hrhq{Dh1-njj1xh5d8OE6MnCoxx)T%%tt(ds4C%MZf*>LW)g0fSH z$)GLu5t#jMGA+lAZVs67B?UMJxeHrmNJnE%o|?%gahCj}4CBm>Ze?2LIb=e=29JnT zJ9=dfg2SIm{w^YbYF~sTl`FZqJms{RHJyqJLX{;zzG3Dl))SEBhjf1O(( z6?(goJwsG<>nLPT0CBtMS<*q5=T4w@vftBlJZsKW$EIczT|-Z9=8oMk_a?kNz9bq! zLVWf^(nBE&UO~b==M}MX74AK$uWSL*me5lb`uR{}0#f6L(lyu#bNj#9Z+c74bPMGi zEO?)=4ND-ZKYMUuU9XseBb1Q>mzKYWGf&@^qbPKC+ zC8|Y7u#>FCk0N@|<;rOs3FDqU>^}F)%AQLqmy*-|t}dI2ipm__>>=kJOiy%~GfiH! z)V4uxs~{=51?m^#1S<2)5Q8d3MIZWjU5Yvyqsk08Ivk_N73`o(pYBj`vMn69{d04g zV^&_FN08Z;(j-x>#|78Y^!z`j&N3*jXkFSN1b25Q5G1%0ToWL;y9W2c-CdI4uEE_2 z?(RCc4eqYr&bjB_`uH~#RgCOe`(3@dpAJ`jfG#5T0OmOklfF3w#RTYir*d~_;KHRZ z^(5HKqi9NTwO-(|TJ21Qv(?^aH}v?xHZ@QLI@Q3D1$LAcB#`-p_vNK7Th;rB45MU_ z-}Ps#Zs@83W%a(k@J`-JKJIO43i zjjoT@;3}-XWi6~-W3VS{K$_8dYN2FAkrL%QYQ7hEys2ON!BVbTZ&9AadEZfwY|T%7 zwEjUVF!YQoSXOnmk0Ry{EqPFlzO0;IyG`xk^vfCaE5I6b)j*alCza z>!f-W(XPAdQ#H@&@i5P~vAziE^sZj@&%2Ykb~2uLI$Zl zoIVh{Bo_3NeqXq`K+mnNG(&jnIRAO9I!~(a=qlAajrQx%SI34;%vvC-kJCEFWCO1M zwfDZO4}Y4$5hw$UZ}Ys}XJzqub|YYOPM%CcCF5ljbb4(Z9{Kfq2m3!%D$8OZ1cLrS zSuo=q0|JP?DybmoCZ*vPXQ*l z`q`Re1IZURVLh)+7!;@Ww?MLQPKp3QfVty3SC8hQ{me_9d92m*j>#PeI#W}zE4R2D z(Ufa9&Q}!z)$7cqY3aXL%1WHO_d2G3DxqB2hi|w+xB3Yg1hjv=?0P!;I-%E=FLg({ zRkGzc6YFyWRWB@L~NBxK4^66Ipwa8}xT%C|`@NT3! zshj4X@%kG!;QxUqJcEWq{vA!kHCPral&IJCD9t_N2N=rSc6!hRCqrHrtGDa?y2OahR1MSyBgeo>RHfO#M zI&VH(`ajcuGB&Qis-p0xMk=u6Q_QAvmhLuy&*Feu`u>|QtussjS|>hJ!1F6$_~_fT z*0O^DP~V?pX>5*$o z!~cBa!b70c-izcJ?pJNrxL=uRRvEO9ro5!=Kz6@A4oQB=KH8`;9WmMNNBNnwu2rb- zM#0Q1GX~qzS#JaWe%f^P{e;N^lvloQ>87Eir2G*d@td&-NJVw^(!Qg<{btim#Q%7` zL;tUye))`AnR1_-VqggJ{2_zNI7h)9l*%lLfQNYL*drQ#wurYAf?Nr|8K&H|$5s=+ z^LDSg@zY`-?SF$j0GUq-(L1%8?JWvxO zepPa;aglIPQ^pB6{kdNgP_0{){`%2XCM`kfc?iavEeZgO^7 zDUw+07pIUueYleUUa|ij$BrDRirp2TLU<8C8F6g2%v^iMJBP_%JeFYu+svb^-c)@l zgL9F!)G8sxbJLvyO&H#CH&D4`43CUn?A?gB_(>!h>hVW`gDpj#BVQsH@WE<*z65A!4LOpY&J_I4d$kA0K@Q z`(V%~7DL>^uGaVd&#goLK(^L?AV%7Ta@V6V#z?FT40e_kIkG4z=0P!hn%r5d#PhVDf zwK?oz%RO1}u|6yVwlW30J8!DBDqBr9DS`EbIe;Dm^~GoSDbsy|@iWuZw}!<#fimvf zkMl%FVOPA^s1|q{qhv=xyT;EAj#s2B%U;b2+Vud2sl*Mf_piOR!5WC*YAhA*mOC@a z`SOM4)|tf23s)G)yjXQsqmveeQ*NYq48sB zjplJ`)ng>4$(jSv9#lA0s=r$t7z~Hfc1+KlEE#~;&P@%hg=HJ`E6&6dyNC!Ap370 zjM5rI!ao!hX*LMFFnSne_;-m++LrJ8oB7O82)&bi&(^%1?GM-5o>KcSlA@Iv$#jeM zCbItce0%_NEbv7}W^pTe(*A@G*quI~xgnJYP zAZ@xe-?ki4jWDzM@2xaDnf6`o)&TuQK*~t(=4@SGGM0ehnDT40y7sCTsj5s>=;P8pG9k-Ea-AJ+9tL{fKXixc>_*Dj_u%jSl(4 z!^0z?;LQ%!o`6~8sZ%=DS^HJP=;J*V3gTJQ_IHvyMzyYs?aLiy`PB0o;r5F$yRWoY znMxK9dpa51cA0-|*O;p+nOdI_QDV{3uDsfteVdoiiZ*(jc_bgv_AB+V0scSN(!osOk(I8peHb$WYO2lCejeJ` z({^D5(wF3I!mG}Q;46Z&E;pebhsRrOyF=c8-mKve6e5$|5}X!h<|cz0>-B2g+ce`3 zGn?ss&b++5j;*}w7h1oQ?}Yyf^30#Nhu>+9dQNV1u?>Ccuz7NkJKchs6X1pge@95!isz z?-_h)l4rswaIR_ghbN6|KclXZ50+XRxz?)4AgLRN+p%VcT-g}m?=B`c#g@s%vq7sj z+=Jv;I@xR=W{d>^_ES1`>O!%0<0&C^?nUHDcjuV7*Ea8*stIsRn)eXRt;Y@iP5VnW zS$)RMT!WdzWu3(zq2e_JDhFJDmOao7jKCZ`q93EwlG2Y0@uumU99JP-_BaC(>v+XK zXTVS$qpX!U@2ToK%1=aL;9J_-fk>U!E{FT@Z%eU(Y&F!Jt@2#0QvLOI8exZ_OVg3j zj<0Mcg9a#7m$Kx5SnFvcd&cpEnbTPm-<$yJCS|(3Cr1SGftEE_Tx~Ba(z`bQIP8Um ziI=*Km=h;;H}=h@)3~exhQ?YPJ@g$SR434ixNCf+pK zLhMHyEWnZxkr6juKD)a~&R=Q|XwG|ZJ`N-cBS6svZ1~U^SXzlDoYKaMm0rS6XxCdN zAmp%tMoY(aTlO37Y)4DfAGv&jzd4i!FofG~(Uq%**`o&WGH zMd*Qyr<6k0QMgyB4`}d@)_t=Pv@SV64YU|&W7OqsF>sOBXNy)vBD^&uJ3&LFto?%T zgoDy~Tw0t@a{a;K0iswjZFyZt^r{ygxkl!Yagx0@i}(;Dd{3k^ZI2aARmnXb9#f*R z*om{b0V-p~&1BXAxR}5cvi3?58{pZ4bZbkOP@`N!?&5y@GiIs}$l6p!bq*6Kv zy-DMKL%M3O1%GfYFVOGsnQoJEb$T_CjzK_MsMPn8U%D z;CkW5t}x`IEJ0`S^>oXm{s-AW#6eds{66OgGbbnDc^wBpal{!CY0_Ab5{T8rNanEc znMcmh2GwnwtD5MzpY>`KAkk1YmE1WBt+yvsS3Z!8 z#@)yXp`_SRkKD)pL&VURP=(ETuOH_{{#T3 zELSDgAma$Z*z+^09ssHvKhgaj&5X)Yd#iB-yB}WvFY_=TsG@ZBB^gND& zP`ba{ITDX)`jF&9$iljPp2dc1`9(DD)A27&G7C4(d5*ox_Cw2)25e*)lhtL=WjE4< zMGqdz+|0{36u5rmL;3!+OF_z8T$k9#kDL;%KWw-*mz3oN=wuQZ6E7eccm(SuH0F!3 zM826Zzk(16q5zIxf;zy8W391AjUw`Gw+7$lt0m?fqOE@V3{ZpOrmH5V|YkoRE=Y2v7w$Ea7j{BJLpI-aFb#`$Y7xoI=+I>v7)^h(5{39=NQAGxSi`M zn%*S1SAq@avGhqdUd}|F7&USJzz-`vw0MkJ5?H+VJ{~DCSl>+UNx~|sYuV3@{5TMF zua&eyfI9SqRZnHmTd*n5rmQ0^WOPTx+2u zoawYUJt!M8C>;+v)6NxIva^ft@f&){ep5I8%Cf^m2Ot5#zhI)H917#FfTKKfF~_5M zn@5y4_reQ1)t}kR#=FBf%P6M9vlhTTBW}>xJU!Ft)O^YMJyVcDsoX|@eYc)GEoDE2 zDECK>PL^b^)}jjP=5j~V!`TSHH2>+ntSexaOod&Lh4qsIDq%oZlMo9$ z`A3LksL)i`>Pa}PBAeV7rNT!!J$%o|(J-mex1FTpQS35RcZ)%Gd8?Mqd13&9gB!k)|xlfCZ%XG;IL22wn+=o z*;fjEhcvNTXOXApZ_^zVzC4Fs72~!#6^w0+kaIyI(^D#eR1YQxMCXqILxiowDQ}Yr z$g4{%Cw+xeR-o;k*8zi#B3!Y?Id=cjL5dIJ1&AeVWw8I!6k=ahe6kpqqqw2tl`l9QvM@kq5IU=#cG%D1(pgB$lPM@kbDP*#WfpVr1 z#y^b+Dd&&mpNLIkLI)kJY`05tvQiBQDg|2NC_8~Uw^VH=n}Mh$Kx+W|Rl>a9ea7tJ z`HHt@@NdXJPG+BjRc%)KpW5N=CO{cm#^Ism|I>dXB^@5YN}Tj-)FJu~$*Of`hJEMx ziZ*$n`}67;Yq@HS8Ck;b-v?}0at07*RYoGH(N9>}*)l`{ltFBBT@Gz#V}#`<-Ja+z zK3aS(`_y=PJYun~ALNY(qGt}OzH_w-)R0*b$sklpG@h<<2zULpFLQ}Nq*hNwCxN(k zyh2m+(`v7yDNKbgST0{509(OG+jZAunPSSHR$ohh>Dg@uPG9YGpBm*!7i7r zCgCJoD_J%q`ZGXFvs{C4TXC9z>`Awq`hD7`gPN12uAi_<@+WaX@d&JW(2P6_&jOvS z_^p}nr8_2mVW2uvDfq|;cH%dl#*6llxAS%v@JZv5gv9i;(!*v9VNgt?S&WoQ;%|4a zpT`wV8o{gM+tKjnrc@prZhr+yu&{g=tUQGJ9|AiLc1bG*7cA4S1k#J%dxU3a1m_5( zqqeHOT|P^H0VFqk!oS9{e!=wbovVAuXgGXWPGbO-)6$iXgGaFd6D%#YZ4Xe|mN{W` z(J_d{(HgvITvAzJDUb+#_qnk7Q4#x%MBT9D;PND0IgktWv{)C}Vb#}KT`Selva7M- z@4qj>I!`(FayZsHInuwPr-fKGMV#8;sw5e#!GBaJ#sNnoCr~K=sRw$-?l)G7jUmcw zP1ADw!CmEwQ@PNftTO9PmxAPX&^QQF=VSQuIF%GFT2L*o24K&d)6cxk31SG0cC$r_ zsx}d)+$tA9miOtAzhv$4_C)(AjUixM3=Zu;@NBxi)Wl5vG&9IAx5MIj!Svlh$;N%H zp7GyA99^i9dWKIicpn6c>?2MuT?%VzYdF6obDtqCH5+?MfO40}iquxjZrSGxJSRvU z#*iS2?Fdl0ceFA53q$C%4Ut4lYJSy;lc4Ftm{x${v+APKm(7pwLtkFGbO(>Xa*AFU zNvqMrr%CZc&OSY_1kG@+(;r$sg?o>c^Dw>FVX9r1AL|@;rzeGM|00ShYacc=5~{a$ zbafBZXBA~Y-GIdKK6aeOt^Z#AEvxPAUDWpQc-`gRy>xaFbn)*QtsPI9l8W!((NQo> zxI6DsEd0$?)K^lM+(MfPDO z4~T=xm|0*sKeUu&Mph|LIb=$_4B6-K3XJqm>c9(R3PZ~80KwXs0o`&o_VE6}?Gm$7 zwH@v)BLr}qoaN>HsN!&Dzr@!K{lYY7lwfXZ;#y{mU?D|)D$8FRoBHp z0&&%y-QA(x_x_=TV!&x{9O0GS>=Z)%m`ZZgZ>O)hXpv!ja=v*iywf9b;}L@t>Dxeq zz|?+rvm`7oi2ihq#KQ^V?0Ut0Kr#IJtBp;4<}bUBm&7uSi&vPDj|DawA0fp?^~N@B+}`XmQwhm?;VrwGk|0@FL?%Y}1-@n(~`Q z?r?R`G}gnhXrnr-yIj zr9FP(xh;Z(e4@|S*b=~Cm(!wC8geQ-y4`4lzF9hNj}^W5z2bg5 z3NS6ZBao@kHfZ~vB;x_yOPc!)$hxU&);lH$MnoX0N`FsblS69OFFPfr@P=CRefDY1 z1m83MFw_CGNL#BgPZ~yAvC_z_6f3pJtX_7 z>JbWmgGR{y3m&pj{a|rChFQ_Hsfddo1mouCvw_TR+DOoR@gaf?DMhrn(6a}=z8H0m z8CHZ09uBVM%ct2OdY1Q$+}!$Vm0CG{8&8j|s#4m+P>&nmR_-k;myhZF6h862QCjE~ zN&S|UlX1bdC3P-K-TJ-_>(hOY(1I#%1cceam*--!hf)3l_0t|yg8D%%So>*_FXaqd z8MYqwQNCBB?5U)hDmskDlChk***a8{UXr%iX0r%X36E^Vct@hM=!Y>m_(DqG9P~~W z+f_|dRH>gV4Nr&=vw$}TSLv&68#ZFGHBs7tgKY0MT^now935yzR*1srq<3gr$>FgM zW9$et-{yJREN}H0L|c8_V6xtyyNVYQ-S-ocz0}4U+z}7rVQCjG5WtK+U!iAH0d~CxJJykLz9Ei2 z85)Y@SaU-dElKo_Upm(k58~9pp ze2D~BbcrX{B8k)20W$ZBK_b}coT?5vx#-mCkn5864|FDBv(xbLnzfut75rt~5~H^T z5=mpMJr2SxYV^Wf*(}^jvFHbYdWJhRHWWXQb#D|4LPOVt9#_qn+XlNU#Hw(M_vVm; z1{Ri=gQN#AzAWpnPfl*~B3rVy5}N@fn@R0u(AxP%%cHEeHWqV)^6KvgdoCo8Ddcd$ zcTdlbJNt?_+R}!tsbu2K?nBG^(nIMT1|p3kni3<*&GSkyXD~cy82;GN63RX#)V$Ly ziuXi{j&4FCtZvw8`n6{DvgsU(A0^dy>c@mbHE+-_W_S^iAgJR`bqo-;N`b%nqZ#b# zE+;F+wcm5c31fI^V)0jPVHHc|!Wes=^wn#3R5SSh47@voo3DPi7&=agI#A?9zhB^I zE}kDm#rTpFN;a1oypMO32DE%;G0`kdN!H;BQ3$h64fJ(-7+1&XpoUHNFs2p+ely*R zN=bDIAk+oY+*ak9VM}E3Ol!&{?4nF~sPym$+R3C6@CUKy8KqgPQuw(`Fc=J*i_57OkbQ6!Xm@8Bw}DxBrFN~hmOaYE~1D@)b&`@g{Pm%#`kpGmLnbL6vJ^uITNVkiAI0RxpN@ zIjz}eq>z9%J)voC0E3u+`J)lTIhkYvQ9!Pcu;28py^V0ysNkA>8D{#OC>m$va^S7^ zc^9GkVX^)Yu#e$?MyXvAAr?h9+!L8q*0OrU8+bM9e$P!O&Ct{7bG9b1*W|il#z;Cd z^o|cLlj2LfOZc{NfvM)~tcpwmukShLh>fbH$V<`ut>|OCB+3>Lc5$Q;xCXJM7Pv|+ z5!RX8dT?WW1k8dnOJ^=;%f*oMrQvUK&Gq6(bMNc-(I4tPCzu4Xma~xJ>ZJ>SJz!EM z0E$dz#6%d`^}8aD=S5clH`;Xw$EXrn1TMV+2+6!Ngr;%DG!%(NR=U9XG}iZsbiR?e zt3}gTm_=8;h$kr~JGf@SUmU4<6-AyH@F8sDjl=8-^b4VSlI3(r*ojiTn7Pj^GNio% zxyQ>$T-aVx`s8Eo>uYT!6)1HGTQHo1=Yl*9tJGMFZ;uTrH_J|^I&&}!qXmAAhS$^*n1Y5A0=t zqDD3|7WY(V^j$~xy0ap>5GJVroQU#PTsdUN4Qu+C$vAdD2~>+$a&neJM8o-dqKr9Yp-!eFG!uxMjOE_WH~NcPcmeITg7ov&b=5;xpg|CpH0 z$#unDosIMC<<8lqA##qjlb6kB#qHz_IB_rS;cB#ArUvYlykruF-UBEp{#x2`pUHfx z)W%gZr@RC2pAAmn=()B^q&jZf^-k<8i0s~7aVH8US?DxJA_ z-xVj=SJm2!e?`$siN z%s%~9Ay2h$GxSW0ZtC+PpDusl9+IZ`yF0IaL)>K@6gRNQU3ZYrEA$Vow>q)pw72gL z9T6$Rp@bB#maK^hVH^jA-N=vChw-^4AyMw2V?-Ri8|d`t2qF&=7V>#EkHw(*82BwJ zIisS|8*;*ZBhY(jC*B3*=J_wLl{@A&$&_J~5V3I5Ez-`rTiVHo^xR(E-LIm#Rp9d` zsz|~V!bGllO=vs%XoLP;nCj5|&uH(?qn~XWS1Ev=fQY}(({`$ah7ENgAs*%G0bN7? zXtBzZ+JRKE+_Bh#;!-MUc9TfaZt%%adcDZztiRN~y~VzP+YK)$yNzNGaM&Jx5hoIZkIWMufKb1G`ru@nJ2@uMy3_Ss+ zxa7Pci`z(fqXj)`C#zJp`@)0Qujz8L$SZG;m&zAl#xF`U9N%v`y}h6f{tGs{15#+60XH=Q z>>JNQ+;GI!ewgS79$$3T5B^O)s{R~PdA{>3WW9{B)0YCL?RtOW z%!V|%&t%6bf3(1ICX>Se6a>J}wY3ri?+-8T-9}`mlY54?3RUfPSJQgqvEF8tq&Hz| zMikcD&Brp-8}NX%1Bl@Vzl?L9%uN<)j}|N*H#Eu%xOV~o2+b*MF`srpah&|i^EBIBQRJsJ_4qlvf)zq+a9F;tWB^oIqAIWNf0NEHYC z-czKKI;g+8%6bv+IB&WdFQE66iY6>(L-tk^%-5kJr??{@M|Y37iUx%PODnqQ;9TcL zV8?Um8wGV9uR7>^UU3M~!F!R(2e2(NY1vl4f5WnLSVLHGR4VmdN*70N-SWbxu1@4) z(9moG?p3*mG@QKaifw*4!F`s1r{pj!S|S0vnO>cZUaUG2hOt4&i4pz%MpdlPx? z7eyHU`1@2w_HhSi7$=9?n|~%CN#$l_E15dP$aB@;K7CLqMOMOwu*9I`qkdo&pCoBqr)XU9D!r|ga8L}7 z50@yMIK1`{*R3D=Rk+_AVMTCh@;g2y14cm(6iq6YZym$BKp`ym(VD3E*VyOJd-y6A z%YoN`E=eyXKfyO*DCAMu}_QDsasmw z%B9_y5USfdE+<{h_^U(Z2@`w!~{-9s=*$5TF7j#^1MpX4p`a-;gaz4DS_ZRK=L(dWC zE5W#o87FV%zfzlzy`GwR&9;*Z`?S7l4J)4OFNA&JMa;zVgW~VpqnuE42TOK?@9gpg zEj{dv12gsS!?%OXXFN~a)xUw)Tq!0d)H3Fz>r+<6yK*YYleEVKwrZvb;Tic*kt}=O9=dYcw2#Jdcm*0y{49_@_*ktVQLJN zuXT>C)QGeZW5E|9U~km{GLp=u`;4T|!KRPQ4fDduPJhgJ@cpPGZNYW$F0O$vVL3&( z2DVBTe*QSqHZ0jEhnz#Zc`c0du_E!Ru`tk_`7;H4Cw#Dn_~#;K*&&Fq<{J9yN(g~! z)>!WmplRzc=!}NwYVwvtZrS%X-H*k7IKbrugi&P3^&QAspa;9;zVrBXKsBlmV&gjZ z9r?D3jOmXI+#^YYRp!8YJ&o+2*Qu0e*(@WLa8s75fyY*U*m*(9Xtb^O;2vT8muVm0 z2|HzLU0kn$^(wo?Sd|DmNHs@N=QsLOrowCsWg9k(t-E)^}jqSV0ICTdph;nkSX6 z?ReWF0{&!25{c`ADwHUAi+n~w_+1wSLbd5^jBr6 z?!^HO!os4?Tc$jf=Yq4VPw$r3Up?e;X4@VYe4p@EJM6rV!1SiAJuQ0|?a3?ycu#Yy zo>;>A25oNSMo3Cbn#ck!U7qnbf;qnwuPLL)`MBajewn%#YCQs6+FZExa}o@UDoWjBEeQ*{=w2$ zk=$)xCB41wq~z9+$DXaSW$HD$*s!sTkLp8#D|cH#$~toeyxzz&|| zeQSXZq(qM4lTrcIXK6I>Q$SbGf*&Q#X<_x;bdVP$dP&x1Tfh~n`}pzL#Q`s3ztthq zl`4%(%AT!Yvl2*ny|;DV6>_lK8lhX`z|7j&Legk$zpCMDu2GFEu$HAfRN4_fO5nGYyS{{g5n4`Hp=%H)7F^E&G?~wT+-Io zcDmeH+-f}Y;3kIcx*#J>E4%B>J=cDEde!M6&`U<4P9)7RyBw8zcaLudzw4J4N8N;d z4wL#Y4IK}T!S0am!Xu<`lG|*j^Y7xTq!Y!~L4e<|=OsyH?S{V^4SFAmK3!>HYx(a8 z^Uyjb%jYuu8+(4GON=PR3z7Ic!04f@OtVm-X)LbYKAO&X1i+(22RkWH-Ek0QX2Yyv z2L^RUbw;6JC?Me}R#drD6CzgyVU1GZFz$1fi9l2O!O1o?aZsHYJ7&~k-{^`TCIkB> zd@S%kfrz2#j~lUXxDnGr=Nn>Lu2IN9N8$GoJAF5i8F9q{i-T!XHrr#jH4St&zi^93 zD;=*?!V!Niii|FhVQnjigdk>2#Oln8pSJSOSSN9OgC3gIBE~eqn6y1FCnC~~!mp1c zMKWwCq!^-MKQj_O>)&rBU9UIO<^MHBOx8VR=(tjqd+0`v3WP;D1X&Uec`1B)yP(ZP zrxr^3jcrwZBO|v-6=Wi)1wHA7b?VIfsS>^!-i5@ul^P#8?Fbh1v9+|BaK~So!66zowqHH~WSnzjl zJ5_`O1UZ!9JlOFN8UO7z|Fh*p|2d^#fboA15I=A#P2?X=-Az!?)x4_>WNh58taO4i2ut z0)W>>;l7vh$7G=*gC0vsWLJ!`OVeK(E{05~0Hgu#n-aH<2Jd;PjCgaRh+y z6pg46VWfR^o?C0ruDOhQKBg6l*B5+1;&ngF|KFE&Ab_p$5+$6iYH4YiUsCc-v@2VO zzP`Txa;ZOBNl`KWGTVDQB>HlAgjr^8iJqdDa&npe$3!M)?p~QBd_XoY_qy+!fICni zcD;^!p`ioR1Ttp%JPw&=ba>0j$V4{Wlyk4gDSV>#M!4-LIV{tw?GhIL-?#gkv=IH4 z9jL{m3WP&TJT9{y8UYw}Lu+lVrY|iZHiv0(0uJ*y^!GG!nT);{c)oO~f0Vz;{DQzx zPXa^t!32P-6#=@5P1vBQ5&`puSb`k)x?`!^7t#X;$!NmQZ!gR~e&~_}eAdbT|Enc{ zoqnL43Y#x*R4EkVUqBP3R^=d^GljA|;fYoe9;5gY>Y;hx z#y;esp%^Zno7FMCi(L!zB0wlpfi=bc*s93{m}!Z0zpFPs1vD6}s+CiTLwdJZb(!ZY zCnC#7Za4gQtKSx5z`LgkXEJwlb5r7|pc4|+YdBvQ-T0-eNueKHPHU&=rgK;t{kdeCPioM{&aR6}n$4)>Mn_KFy% zA6sTb7&EAFehXayhOnf-y%RuI}S)kuf9ISJs#}_LM_KKGcI4M zNE^YcyUpJ1>s4819ax3l4Gpg+C570_G2WdIOU?ahAX}((XpKKN{I4MmE!|8GygDS~ z85LEQLkG>auc6+@UZd5>y`+!mZ>L_2SbHsqX}4Q^a|^9MUraLo?Ektwk?b(;C~NNo z9oTPZ{XHiX0iV~lUZFolIGsOpF3;Q9*7~F!a6j8-sK+pkOZ@jc)~uyqV2TeJR~-U; zTm?Wovzcrb1;2}R5)i&PBEMzOe<6Dd^xh*DjE5a?-o zRVe4U(FsL@3=nF+HCQiE0v(+5T+T4C%UNDEdf&77K65i^=3*LO6^<=)Ne9N~Ne-p+ zIu#TZ?FV!TJ{nA%t~%~d8p@>vH4y>*zp`0^x|df-iV3}_f0DvN1q{7zQR^k zrT^m2goj7FEl0S+iw@fpZz%CxKygug%d%E8(1w)nHHdzI5;n=}e4b63)Y8JYiYMMH zm%^ti8HHa=nZ0Ix2eeYNKdG5FIHZ}Fn(9_%0@;_r0Wx1k_r?NmlbEUT41Uuz-uXq>$_eHp!Pmj-6M~nga||kz`LZP? zJv|@ACHt+NuhB(Bf<{e%4LWxMCj9~6Qa_n&hsbjdpH;LbMod8X-&%kK>`=t+nbrE| z7Q<@NyvB8RZAT}^die!Fp88HKl=Jd#D4-GCQDQqs3!@3!;yJNb0xp50Ls5$EZ58J17wVKB$3w%GPv_qxh3Nh6y)&h zOena~W-iO#3kD__xDRUB{K5gjLcLs$Fo!P?Z-dX8lpP%%$2&-$f*JsrnZ^WoWkn~2 z->#kXE`dQU*=o*o`M!!NR!gf?t>S0bUK5i})1=Ok_I0YYt>yGK$Evl{9fxPQV*AU1l%JH~2N^ z0{^q-?^ufYCm3>YaSav9WqnmNj3;JgGk$yZmegrd4e7;lu;2(h{+!1BH6@+~=rduf zv@iV|VBqm|!d=kPqE%B{3rg$;f*uD)5PSldujpLUaBsF~uzjC)Q0btmgImN~T~1jh zPJV_0P_{z3j6%w-#p*nIdS}V{;cwndwA_EdFT!c4BtWEvj>G27>UZ8 zvjQn_4oyc#H@6_1zQG$-3|vb4euRM+3ZIH>R$5GJzg(YFu{jU2B=E)=!bQsx0(#YN z?4(RQl>NYZD>a$Oc;e>5Xyg7EerA^QM)`SP>)vm&r+<%_4p8Fsi{h^Vt8A)ISZSEB zukfvKz>3d+EF7bO_nJLU^cnWyxYl6os8U5FY zVL7X`BC?y6+KD1SQ+)Qxsvzrjx!N16IX?9?DTxom{lpmin!@9d8*gM>;GIntLv>qO zU9EW9en*-RjDz#%27kl<2o{XbZ)@EMd0)|&0d^fsvun4l$gn)2O^TPJl~12-Pd3ay z!)w3)xLR4ndnUv_z{1ZjmB`rqHDAskC(Gvv4B0);5gYOzz8qO9sVzJiFiC9w?%-pR z0%7zIw({NXmmjOfH_o5srHbc{oY8^X-)`G;J6mj*BV`+5;(#EIlMIS|iRBXM2jOZ+ zpFPh??_F%u4g%`eb$Sm7&LSZx>Br6$os(@g^UBb6yKhH3_o_QYsW$rPkz?#9u-WbG zE2&?eOR~(M`h{?ScK-JxwKuT5lOseI@)baz6v&)$y*Den_tLva6=AZ4;^1V+M7LrS zMs89s)2XOz1}1$~7ZZqy)ea2oB2a-g3Hr!4#uetzoa+YE4Kuo~J5|P;1uJQ5)1KjD zz=l_Cz3j4qhE<|}rviB9FK;VO^qHrvXM!Zx9v($jK`utErRwFg`*h-jB9FxUE;@Sd z4-(P0$$~Z^7&v|O4TndEyFgX~$P&g50$nM)sO$>kkedPhJ)no>h4%QU zVM6ZlI;TovcIa34D@f$X>9h?cW_f+R#DaTw81*1*=w|}f_nOd(0Yx+nm^3)#T=U+~ z)sl4^Ab>+16d$(RA|MWvW5D}Zz7i%OE+fZsq+jciFiwaNz8g0|rB)K{<);zEf^W4$ zNDW6>v&P|wY~c;G;8h*0U(i$BlJSt+{e3Md1ClbsBcb>htlUeDHa4OkaC&>Wea_Md zIfM4=0o$`0RWla>loD5y>{9^)Vl;K|yFg))>sY`QF-hzl=CbLYu8(eWpWV-eM#vi8 zfI`B>ky2v*_-;b%aPv-z)LlIIlNn8r$>Z`u2ZejH`%lweOHcG1Zud)-W&kAqYkI=^ zs&BnLTM4iYuWIolfh{a-6L$-J@9-7j92{qUrhQz1Pb@5y)NFN$j%UdlJgRJ?2WkwI zFLGb7YbsNmAhKR%`Dd)XD-i*Y^diRVp15@!nrq;uMIgafmrpkQur zLG`jLwVvJpynrf}R!tf$Y-I~@aaIPw(u?qHREhtr#t*%KDEn2UNVC$SV-?Axo6lt) z)24$e7Y#Cp*Kutcz0>3HJPY47SE`<7bA|HQb1TxTL@t*7WQ{JJJvPQtW68~;&i(!J|9isMBQ;~)(w!xbG&2(3jo z`_y#cwx1Ik)!Y29b~*1dx0DDS`3pu4v^&gHkjM$VQ{X!~jy35&>ko$u&g5%zM7*#i z((GQq`ZY*Rr4ttt8kPXu_{1F@om6khFJTUh!zx62an`P{#x|Pr>r`ekl$Owt{W{M3 zm`exg7>LROU*JgHq`}S`8$Quh-JxUO#eE2hgVBPd$UH^uoPkr6I`~_vSiur#uY6np z!6A1?^b>x1cW_f|+9)UiCh_a(2sJP0G9QEdGvo;oliIc+SfzArh0$V>#LN^OlmZ24asKx_Fo7#=wh+S83j)D#3uiH8g72&0p}3-(b$%sf{&Pm={&f43a*nHn6|a`pC%DzldP*hV~wCzG^F#cnn_+1|++^@&?rLcHR$ ze!C78Jpx6L2~Cs!eV))G)x+9d`yYKtU1a1z^$MM0ef&&8Z>@i|r5F?5P^X@2URQDt zH>S}_&W zRWbo6=PL1BZoIY(fm+H?S2GZR5 zL)UP6p<3#nd{#;GK{;fxSv)kG3L3CU2_r@Ec`8cj#b2z%mDwm^m0&G&rC&rXN&O7O zh$sdm3F&6sS9?NG*#q*0?al$wvb|55in)egf=i@?0+Y@>AFEf{HQp>vCr;Gur3?D$ zm!ddVsHA9);It@}G$G;PZWOQU`@KS}0i-ucGO_mE-5W+0W>_=kV;$@E(K?b7k!y?{ zTGD+Yc%ghRvj_gnQo#=S)25g2PF^vV)Jr!DtM*f~^X-%={rd~X0fWMWRIv+r65|wE z=ld~k92GaK_E)HeQO1*`bz}k9knigEWA3nDSE~g`+ic@~@R32xpOs-CPLSX7v#eqs zl({4H6PfXZPJ!?ga)2ap)rseVW0SR1loa+vzGA%D{!U+oVvaQH=>AxERRNv``J7fR zmHJ8|rC~{W>f~@WhYb1f2o|?QS9;+-z*h*L+2Dqb*yL z`f7^S!zTp4gfiPN2Qtr)kCDSvF?lu5xntsrDnZ?K3Ox+TUq3&AJ6^PLG|;}B`>mnn zeE`PUv}+$?2*K%s!ZegIsaHzOQwxPy$o^H6eE%5_vxDt+`mxvAmJfli6g9^1KB_Uvr*QwH5Be@fyixKjdOaX`i>T^k)kLTTgbHSH+AUBMX|+ulw+>O$fE3tX zZtJm+3rY|AoS%}E;$l**j#ksss1lacK!`T&$V zQc#OW!;+@0!UXr%L7TH;IZ$)Fj6GBx_riG!}W*;o{R=Re;XQ+ zTR9A!&u6RYK^VXCCh?qx-}6={`kQFPQjQp0ogn5~k(Fghy-*qVvq~`=8MQfspaL+L z6d=9Eps}oA=VrwDxJwp_ObUx;zhWr8pPKkV|J~{XmSwtJGK->qBpNlt?gdaD%&T9v z`o30d3mVls=%nsX>8Grn3nzAO-TMH2+pgD%T@H)7z&*0SPek9~*e$WU! zF`nJsEZDAiLP|c!TgS`lur-KQlCxp(0t=RCG>T`wR8+m};@P}zkO_lRt+wBOZzi@K z9#_-U%=KkuCHLrbNXDzEsmWWcxFBI{tt9}hr1mUa_d)!a_;mig>ycLJVJM0KNE_|N zyN&e3u;UI0eI2{w3-aSS$|v)Eu)lo?Kx9Xq7=o^JeZ6`4W9>ta$m5jAZUdoUJyizBxXtuHnZ@O1*C8NKz1RSe3U6mO>v2BIT&f?-_eKJbzoGsYK~hXJegkXY zzVHK^x(@v8f?>4K4_##HDi9$-j6QFc{c(il&YvXR#P)}w_UZl87eBpOy$m&xr%1~+ zV3R-l9B*VkDMQI)GP%0r3F zpJ9R?{T{?c^n5ctkNB1m>(I=DT&VY+fbfx6o$@!)>q6^*y*{uD^iczvb1Af%=T@HY zbf1fdq<xCL@{5FQM}!d|o|Eg|%i*uM@=>2y!H1wu6a(2LD1V zEe*oTZ#>_=yweo&I#~mV7VPk?yQ9>jG?zDOW34KaU81f5J7v z1EbO_-P*wk`YhcHWrmKfSGdlfUEN3Ppdd;#W!-!~*lP(q>E;1LxAs{M%gQ^ijv9A# zQrLX_tyZek>9im}G=fLuKGywkpyH~3Jcz{Sol()oapegb#~%2t{k+iZ-o`2$N(Eb8 zycxi)pG8q&5c}V83q|gH{N;OZ`z+U9aqs(-_52~|HDVz^homO{_-a=r%z^#K4;uT= z9ryV`C4>s+4q-#@c;DaWJ^m7o_$WU5Q}a^Q_foYfBkS?Nl%bjJMC#|v@#D&IQAO7y z;Y`Sw4Y*tn6nT${K8JnDm1q6d%u5<+B8dKd%TrN7W*mWzn;&fW#XD$A*Oq((%SrxA z7DD?F5cu))Ir!i<>-pSwukp^+_u4g82~8hP@gn;9CYq=SYKb_DMFZ*(66l#Ee?BE2 z0)}4s4%?{aQZ?1ciSP6Ab17Hg>1z(bO=pk<=+~?2SnA%{!Mu*U6+qL%le%7Vj9#%^ zZ}QsBPue10y$N0d;(D4QUrg-UPJ&qbqkSI?Bg=Z`5M$$B%AyZ_z7HX&#t-+vPHUo1 zwf#=H)rT@@C*}S4%Sivr741Sz|4M|iJ7zEZF(kd~@|n)}jE;YMp+Y~Pj&K9r0d$O& zoM*X08&QC~iv}>ie3<7Lu&9cvX|{xHuSxSDJ7U5)LOBz|WLDzC6p|>bN)+BDjH4+$ zE(am2J3{0c!H{gAC+sJM1!o*8ws_%Uo_UN7cI8c)y-!f2NeqhbdTjdPJN%X4a0|l5b~1W{x=FzAPbehoOfuuX%NO99_|}9axRY={E&8{ zH7zMhU*xR2yCxP>?@lBh8=q6Tiu%&yk`w~PWAtZB*1%k;mJ8gJMAU|NS!On`D6aO1 z_wqZJj6}a11WQeCil@>l5eWp?KAte^I7p3!p)G{$C|aWPU=@xz^L;Olix<{6=ymXXJAQR#wMx0IMEcEiJ42VG;H>8RxP?a8Dr2P>3Zg0XKcApQ;_RFQ(%_`-r zCFFYEpjk746*!7;d+l72lRsPw;V#tvXtVF`U>*Z^?5#Jr0NhT|FX-EFS=)EoEekOK zNVacYQUVAX(=drvxPIu>J2Q}Qf9DZn2_(A>@mI z=*N#PX>FS*oMJ|U2@g-0;o*k>xp;KeTb#7A{|tKYTLV;Z3HLLvre^j~Vua;_kp^{3 zeWzmHh#86>>0iBtLN%Z;guJR{)_EkB@8QT}Jc#>_iC*wo!%J^F^=jjCZmi|gB<$FF zHySySOLMN~uHC!uBKGmnM?g0I8XF+|__fA@cNeMU_PQvZ4sbFj^?0DPq9Fdf?jTQ4 z{3&VqDMgA;E=xF9VwtICC(oQ%_yU{RMDqA{!AG2dmKyhPC#jFm|H(>ILQ}-+Nt0oR z*9Nr$a|yKOhvg**x(zws0+Xv>AgD)h$U~H-$jl&y8a8>?!+nsj?9$gNueVg17I&`mH&^~cwkQPD5! zI*7IFc4QmEfD0r*4w5hBZmu>UbvI(I2mGZ2^Q^aF?XYgeIm?H7nj)(+*&4I0Jt4!Q z?+6BB8DZr#oCu7XgDof-P_fkkkNTuBQ^QvfcCFW-Mv#0%eQ#}$CH|QHB9x-r(ryfe zF!*ZS=c4@iu3TA5Kjrp($8zsG7a>j_$3g_s!Yi>LOV9?|eV{$T6CxktZKU;@$A@PM zfAmEOUBSD*xeFm~B7e&SF#zBYwZsQ=#jHR+E!)BLF!lExVpz>vFefFu@sufXt*EPR z%fL;`0Fl6@^X1*IV>^DOPtFG@2S{P5ws!{{>er_q*q2&hqKSFLj1`#3ICylL|8P{Z z-n=!M%o|{6i7R*f$tkM8J2q^23gbt(%oO|$Yl4_MuwfI!>ngo*r=9C7MF$TBVB*t~ zLZIcOB3^23v;ZVk+s`+we+CpG;tPpaUpChjlB)m%Nreo}6b6z81c( zoq#gc*uG$%N-(GEJl$TzcYe2Z@T>64_I(*dr}_6biG9NnLrLwX!r-^&l;@*CW2{MW zae$>=9}=gy|NDE&oX)RPf2OfYAA#CBQYD`A^y{lSVv}iNGaH-9O_z7(MZC6sDd&Vc zmw21 zJe5){a~lZeQ1iBw$$%WsKDT`fr9i#Svcvo=)18sRJOzp^>d-c@_u(}l9_TNZ5h8D1 zM6}srTim&vWu1H!{q~0HM5SCOfA$F|0o9HY1E}*b%<*wyQoxu<9-KH3&4F~h`h3Rv zoTGa|DUNFX8A9E41{if0#x^NXFgkICja?ygs1X}}joFQ1$`thT_#Cg=TI zB8{7ao(|#ws}}s;HSALT5d&+C)c1dT@9b^EoO6W<5<7Qr7DB(#P2+Tll9q?`S1F;R zG=8zu(WsWm4JO{J$_^$Tl}n$3gm<^Hj`D$-Hl9FZxjJ|`SoUqt4?7~W&R?5{y?Kw4 z>?0|}QFa6^eo^*f?wkWKZE<<0eBShid-{0;UA2qM%%PTe zuxLdAKwIcZYwZv%A}I}i6rdICQWZG%XH*p7Ka=+%AL zHGIv;Pj}-H;jpJp2Nm#JDsKCcO?Tjt8-lRbtiT~RE-2_>ykZk=Uk~m*11xk0(Z)my zs;Ac@F?yGa$CUTKlb`K46mL=BAldrt&-gOIP6!kL@Y>+5L8VZT`b;O=}eG3V8&nWR~W88|%dv4uPtyqEIdOD{fRw4YFvViSxP(_y~e-0gp+22zV?4hR+W-yVwi$3{R{`o@w(g$&Zx^N-@ z`Snt<9!0p=l?0ZMlg~+*XEu;@#Mq?crRaapjr_`rJixq!IKTm5o{`w>`W%u&OEpZZ znWs80AFo%-_d6ULcKod9?WJ2cYECcD>(2Q$_?ZlVk4Fu zM0+yv2hp01CeaC3FwJ_4`~41O=wQn-ARzOgBGW9Iq66LSDo+*#~7FOOzJ_F zJ3ticwCC{XVJoodbxIGoS7fZko+YN?sDsfD-dE`3+-_{Y32z_26fazF1R7uzu2Epo zt{ocMPI;yq#YNO!^N1=?;$X~@)rB5@e_VZjy1u;Ytqo%psAQe9#SIVn+kFnQQ}JM< z-2Dn``RXfAQvUW^7+c|e5%q$pMOD?TDf(~a-iP}*k&;{23*kR zojo46?-KhVfO^jWiOS*v+X7kNg=fi&QVG?zi9Qvhagwiu#J9VH#C8Tm0Hvtv2CL!A#}?Qhq5 z-FAQJJ{?iraq2yn?l~rOP24)r0au0lc(iB0t?&_aLQ5^A>wBnNT6xupME>{uuShyt zw9r$a&5+6QQ@8ii1A+%f?JwlF;J>5-9$?#r(@59bm~3mV0hY(@S36jfmgGKvvDGU# zyoJh7I`{;AJG~lh)-Sg;FD10=M@SegRX#3lWtUIvfDGta26y980EMq25Qpqgy3N;@ zOi0LbhKUrup8Tu9_i$r=EE&p7imC;X=vj@mOvHR*CICfmLfcaoS6PQyc*cNpvjo{n zdO0ia$HmCPT-zRw$t_9Li|l+=Hi5m?g^KQZJ&9e3o7MVaUfa06O0SPmJk$;8e+MSs z-~)?!Urc;pXtI-k00OA@9ytRYc80N9$f{7T?=u!Be%JclFI?Rto!pg`brRd$w7g}k z3&$bINb)O`Xr`Q^U zDiFN-MG{m>8M82Z1%r%W{oXbma_a~3PZpDzlz-Y>8%%i~ z?EXv5cUs%R%3=~L;eBpjVaz@YY|-9X^tB7~f8R=g zc37W|IChvVg83HluxB6Hy#owGFLTtMksW=gCVv*6!!GvmnBU-|^`TQ?ZlLT?wYmTD zSr1;|H@P9@!80Acvp@HP2p8k4snR6%-Hn-#6n-}sh>w&1N4UTC7oVVP9)OBf8oZ zvoNuhK=Rt&VyU0Tg>ij9fQhbP&QLe@HA+8(+@I;uTa^)v;U&48>gB@M3(;0qUWbo_ zh(^@iA4G}p3)-Iw*lVH=UFgzRAii>o@BB`VkS4om5?9edeC~PN%J^c=y5xB5U1c@D zOq3%77Jl4%{etgp`5}>gOS5g{qMeX{=qf5Zs}KsJ6WNN&bV z8r+dhHUs#mIyI_S@BEj{1EH3{z)U78a3J-L`92QmS_tI>k=}B&g4&9d`i9X2Oj?D# z-R~^oC`!?Gbqf=|D0GMiZtZPcH5fkxo@%T;0XxLRNilLu>q<`1Dy1>qB^f#@JLxbPTDxS0;Bykk9#lHnk1;6S)$rm-%-7=`}o8uoF^BhI*- z=!{1Amt%u$|Cc%a=YB$@B>W`*=gx|=6aD`ar;`QWVSTh-{@`s?$6l( zg>PoMc~OEWClf&$?YWF$J)e=8OYDuNKTZ*^b!uFhqf}398r^7Br@^%wpuG17{Re!F z@$-wtioFw>wEIhlGJB{L`;DcA_MFyrST*10T12K{7n=9FnL`ux$5UlVS@eKF9}l7S zH(`BvKQ8WaEiz)?T)}$ZND^y7#$9~1)l|3UkE@!LT=LIKH2Co~dez~%HQ=+OHr*-$ z*6bdtz!(-_T>pdA!uf**-*zr&OX(aYy49#pN()Zw5#h$FxCW08gSz8(*vnVxN2ox=|MwnJ^w5x% zy{BTNNDR{}=r&0koiw z`mjp1j|Qj7J)0;#ViNtd2GxWC$9B-EBQ}xUGoU2HSC!j8)FIQ-kgN z4$j5SuuM7%i;?YVa-*oUaGD8MlJFI^0g67x$~r`TWsAwy)pE7K;f9>=$& zGXdh$h7&*U+}kZ2QTK1~KQyAHXmMr2))($P9JL#11Ozm-KGBsk|A(F&prEf{e}i78 zsgX)c6fSM!l4xXn+pAwtL$&45No!O+-@ECuPu-`b+i9nknx>goS)?dPR&I3bWl+yi z8}lDTmK_GQ1fAAmOWDxy_4Z_JT$i|gbIJm^KLK_&acmPidWe>}v{Y$zoF)z`>!QM4 zF7V%zzXDDU!Zk0qH3KD0Q3grrP-cXJ9R7&)D7&a6@{Vx1mi&uf5aXu{#32K{qKfqx(#*&TyyY-&=6#r_Y1 z32MN{zkcgFIAAiju!(g`ck}`94B(i;uc}dcH}4?HAC?}-~g*_4fCrOuGX#WW;VRfJ1uxrE$g_`I{*k!=&0 z6+AQgGKx$XEA+8y_&i4QoBEbUAS|PV=!Np!ocnZ(L!-7hvb0F@*YV>^8B1AFgU|-| zZm0juMmz5}7-r_^J0Cr18(gDr8|A4?8ECN43&$rRB{tApuaAOMoob>vp=u%RzXSKS zjE2ndltG#{&6;Ns!$jsZGl5H$?83GY=vN7$Q=^nZjV^2RneX19kcWbM_U*%$rP4k@ zeyrK?a-A`l*odZM{yXo*SZ1ny++ZHT5q4J6aJ5RB8Of5q&`NMGqgCHzm~eG2sbNS| z*JZ>1rbj`q-04_VYEmF&5II0fdmg^iKVIVS?hM}om5RE$Uo;r_o*ijQ!!6kS84&WV zG)&4A|L%T9h%xRg%|9b&mPNy;wMfw)=}Pwe1G&t}xDR#NC~a;Dj%vXT{{l!RkQNtH zR{N5BUb$H{*a#!my_dttqSNTzc>+5_IJ%mfi7BYi_fN%Q5R6)&5hiyl#Yn(Y*vo^m zwLn7_uVxqz?_!g*eYsCl<67U7npT!tvxf;bMc5GIn|4x*;>n8PG8K+X>76q6nINIA zMGT+q4DIai@P}ob`ri7_yw_+n>U$~*5eYQ4+4duZ3y@N)EqPXh6{wRg$ri(jg&GmX zg26xixugudnUIJu2WtEWstTR5zqy4kt`MN?KL2;ph6xx+q4vK>aofgVLusT>_8ZMI z9@U*$8b-!JDYg7v@t|$4ejN+8w5YjKe)}3QX6zMrsM!rnx8S3`C&Cw=1O9=6_wq3`Be$M?3(26`X*DHv<8-o^g?+QJ-sp(B}U?JrseeswVz4N+9W204U#3-S89`o4yNs*U}yI^FS z2MqODlNcN&?8lae@+vA~+#i8~IBMwV*87=FnS8f9^|qVk=}eRM^P7MVI*mrCXhUyh ze#G=+4-m3*mU0z-$8-M>FN`DgB}kqm{%%$$v13~f2Ma!LtW&7Co07ZWvz1ilLaP*u zz|w~69W72YgcCbnjcQ>>F|Jb$!kxazM3*W*kRf4{;7(iJb9{nA`G|p9V)@mKlObCH zqM@O2LClji#t0biZa+@>_z*q_;iAg8xYW&++o_q;;KXiko7guC0RdqvF?TBps;aE_ zSBD9))E@?cfUIV1%t!PAf8irp|IV-Quwtk8j~l02w}g^J#Kg`b4vvl^eEL9?FmJgX z3F)>(L;3Zk0sQbtPkEMyhRg8^b6+%RyvS|*bIuMkF#W;eoK}ESqoiwYlN*5q0^BOI z01nH-x%0O}M+;MvZ){?n{GD1+5V~m#s${6>J|$n}+goTyte&6sa(I*kMv=s+Nwns1 zgp6-HK|Lppiq4yjd>?mfE-{)YR@0ab&k<$o!VT6f;yc`S$Hj^~ck6MMS|xDSg`q1w z2WM^+LR_r!T9T3mV`Bs#K9$YzS9`W@FujX450Is$Q(|F`#YgGwnj}Jle9n{J>yA_+ zE=y85_Zn_VqDT`k4ye*S_GI7C6$(P;z%*cHs zl&&l+qETzymfZIt7Vxs(cQ_y68A@uq$Y)7HOT%i;df1|q;zszhxccOx`Fw=|#23f; zK41GLy%bQ6TCatvqYfNsZzrOC^5XWep4PC2eQ;CG3p9d$SLk;~cscFg25us|Uo0Q{ zsP-=W?)c*{0AwN=0WOPYQ(2E)(7Ly`omfxesHkT_z?zUNitu}oMV)MSr>;z%zORO* zo_qL?tkuKuknL4@V*JR?q{hy`@x@?$0ds;qxeryOZEKXBi8L{Hn%l3)q%PLSsA-|= zh(Jv8#2O+d>NlwE*GN^)PHhh!$1->b=H|h>N#eFqOI!wJOMG5+ZX`C8s!07m6Xl5W z*Z&aEIvqf@@V9vvv}{UEx5>D*mU4eVXOWdY=#;tRzOny9kal}^?Ipx~etf#!$D5Mp zFO7DaR;fM*ElD&JC8ENR;?GFvmKr3t$2+j8je3Y9w)o>7%Ebu19GeC0{RqdAyQrbUJMhFU;^wu z1Gc42+{`7pY-wy!`NrMUTxO5stNk1&i7Z?5Qe8ks zu)H1&oSvDHQC3cnYWkLx6h3zC{)S_PoYM5<8sLoOSOEf2#ZT`yWfyxaMD3-Gt*q=5 z0uqh7kB?4$ZP@qrRXMRKA6*pN$^W4>U1vhAJ{ z6hFlIx6aT6O|rRGVhfm)~y)u`a^0SJjhuXM8KdPiO9 zTOdTR9Ur;}cxY-`x|&_AdIL{bXgw4s+(-~t4GyQwQ4tOvP!C?u~O9X!_e&aXpz8% z832SM#t+eCzyHM4L5+cEVwTeG%Sl<*pXmP(x7G+Cp5vDDx*3hT4TAPU_7^?t8z4T* z*|a~pXp?y(pgqrepvbNbH_8n$Jq*I5-skP6IPD2D%&tt@!8 z1HfccS&(H%*VFY7mzJB2@G792_?+u!%w4GP*B+o8V-+8tRrI&Z9=t$)N4}fQD`j>J z1TttY1M^7~_9%8<0^kjwFX7DzDdJgilXyv<@IC`B*POKCMFD$`deW-3sFecJXL8By zd?El8JxwK2K{esO5YD<`&7P!_{XAaVdJAYk}200`nqZqAA0DH2vu*&JwtD ztlYU&js$dB2lMF0pX^ReTE^^|9!XYj562%!@`QO#o7vw~gUi->#OvywjRhXrxlO-C z43e>MMD{P}G;4BaF4FX+%1hH=@BZf3%!Rov@knbpBy04&QKBAj2#Wa_3~Tun)-MQY z?;~Z^502!V0O%rQzbYWa)LPS& zLJQOx=q#VgsaV$j#80hz)t|_$8KK}Q)^?t8TsZ!9sna2b;e2N-NpZUy{_$j(W9;u3 z;LxI&kKcoFh1c~5K%SZ+-nZK!fCW@4wZ=HVvJSA1J9^D2-QXtJ6e{SA9}s^Iy<&e&A9y zjbDS@p<#QdH7H!eWFCJh@f<*Ag(H_4K;%>OZ^rVLpMCKDHlyi$3v_0Tc?3B<<2p6> zz;K_j9?2BytJ(b)>wH|8-c^VF+t|-}#d$VE>Q!3-)yazI@oz&*X{r8C(2xC+By+LFMBgctF>sLB3!4pA$>bfrt_tfR zV}n7|zyQz%93_2oC1)uOD85q20(~KRiSBCDNq`-5&X71Xo$qt@q#n>}&+rq3$7$3L z@(u`s_gfN!k4B(Mz$BR~H$Y&AUz98@JNk+o!0Y~SN>^id^8hq6xdZ-YC|#%&t?04f z7`i#`oIHvUigGgV3q@*l# zo)3qCK?sFk4{6eh(NUB4ZoRDt>)QfKVsY;ce-(bOSvYiR+5!O4N$yQ&4wH|w5DqIe zB{W4u=W{2z5HPh+c3rA+EoYLX=XidKiAnZ_t%ghpwf6mrUJdLc5%-qj=JRN@4=BVPJZFUC#us~`4 z*`p~4{!EQB0CqFMQ~>>kqmVfX{uUAdY>X96N^d z8bTNdE-EaXraFl+jgf{3)Fk@hcEO46i8@huAe);**MJ47&-V#w0=RcB96*n+7%YWK z%uk@$V%Amwi^ZIB$uAnVqE19g zWH5E_Jub{j6M`HOL^4`$UiHwx#bg4nefIl!4FM2Fh@qlpT1kEIg8rf8yMOOK#l$32 zeeUd-~C6dxVB-XYKGaudOKJ5sfcnB?gxDlX11OFak zZ7(r*fNJ@V69TcpNlGY>At9??Xj5%}`Rc+C*K7v}Q3CE>=O9atGLNf3i3+B&X}ZIf;JRQqtDRXIFIjv&3+&4J+dT5k~G_ZS2taG0! zQD3$p&nd{x-bAN_Hu=$a){$y^$$s4dRR+JFclAY1MCF)}1uff4kl$Jciy?Dg!0hQ}ukr`5qOWO3Iv0u#0FNxFm}(+;amouMQmvc`AE7UOzwWROxj-=;Sm1 zE40F3?&+kk4im3cY3bZ*_@b(Igjv)(hthkR;H4 zKeM1XVD! z`iLe5^^rt1puw4GlVl*z$tv+C0n*HVFjD>{51A_OWbIGx`8=i4lK(61-ECo)ply{500?In|DM-t^G@%J?P|Ob6CB9 z_ZPo=6xXSx8`@1;L|mo0#%Py)wqAF=*-C8TJDVF|KNUImKypXG>HJ>fRrN`O$9HDk zU7Q_8N)JPU4f;X<46x%U68!n|=Olz!5KB6+Q^Z1?Hdk4R_(WokNvlD@v?f4Q9L5fc zjjJdx#U{sn_EW*8?bamHNSx9Z{6+tf+~>wG47Z;-uN20znVzKGcJ=AJdRFMP=k?BK zxJ9@LxcBE5Q)B&5Z0blmzLMS{MMspN-sab0^m9=jDltkiAL$LEX0!1LOtipZ6bloab^H_k^cU;Jy8-pzd7G3?*DLtyIAMl# zkw*W>_;W9Z!MCl|`>$>zyb^cjisx3UiAxGiqI=?(ReQrB8}*)Bbq@&ajvoU0_Y!bQ zkErguE>x!@&{Bt2z2ghQN=ui}DN|k{%)COR`eUhkpZc;l$w#NkFWCY1C1M$!n6*`} zXb_d|T2{s^KZ+rXX;6lt_@m-%0uf8U2@mURSASHY6ghwlAqZeFR>NkLKutd{YOBPw zXsSM8-ZE<&Tg|^a8(YwEJX~s8>rZ`fc8fOJG^F zZ@3OCKs|J!gI(N|XB4p5VkQF;$PCCLNsQ`_``c-@6Sxw?D#(;bgyxbbwa0W9bTbG8 zuC(m86i-jbA`cK9&qHVH{g;M^!Odu)e=CrIPH%xy2*z>opN~#>z{-@%BR_8gzqI}O z^%hSZf>*PJsx$?15BkE1`@U~API6JC9uGuLj}x7;MZrVCQR1Nh-SDgFyecI`h{XwZ z;x8e#{)%hf-Uft@FCbS&|M6VCZ;PeQ&CAXfd&YD(v?ku~7+4d=t*_ST&MEJC~Q%4IR(2+g_L|H>=YTwV3>!+XFmP`I1_RPYWL>!H~(OFzxo`7*T& z>fP;N2A3$oPo{KtVw*?cLVz9O{9Pn|@wvq}riqZ9T-1#@?96xNIkHLT0trl8H>(q~ z{$``WPzYKkE>J;sK{^Wau)KgJtDt|Ih@bvppzTAJMo}#3;(T6FgxiI)5W~UjY}=Ek zR32%Pt-?a_mpTIs1hK=bqyOJXr zj9+JW6K&1e$k3iHw)j(v26$ud~S4s@A!O}-pa z+?H39Cm84+=jfzr25h*vq{j@vUUxQ#g!jJo79Q<)sVE+IB9(v4bMS)Hfg5dFM3?1Xljy?v%*^W4$}XP2W8q5jHjd_p&D42 zQqI!%MZ#c6DEkUzq3@xTz`aY&=p2s7Fg5*n32gQc#UG^EzMfs{e8)^~ zYn}**-IsKfyZ>u5*8i1~%q*c}hB?m6M#kLTbeCcPaM+n^o&6OklzIBPN5r&kj{i69 z5l(+cYcs9G51_WogR7PTUi|0*P~?>Qa=pC~|F|i|4EHUyNER0ZmzzwpahjP_zt}6{ z+Sc$PqQwL?L4d9C_XENP6a7c?EW^u7oTc{J3%V&}>6bG58>vZ8t9@0vMkPdN?xi1;q`{4o|{SzKXV5L+I!qGgYHLiABJ6-+^q z-Hk*`hI!qo6BY4t=$D(?3-aZ4) zrqX_NAE-_X^Wd6ylRDLds?1JsPx*wzSu)fNTLYs>e-~zFR-{?N?gkjNBj#t{I?Qm` z_`69(eET~;NOsRSGp7eXgMBKO)jJFy$IVMM1OhP~u#UWCO=M3EMOwpf^3 z<3%qnAEh|~i$cQi5tg#_i8ztnW*ju0WS+B&e!!@Z0NQZ2mG(JFntsNSrXSBbd^gEJ zH?!fGKK9@iEuupv_Y((sflGgJ4%NH6R$Eyr)eT>^n={xMTw{8srtu>X zT0SM=dN}l2@9?fUAZPKvt6W&fB$(!G%HALpQYlj=alhTj;FQ#;w@CySBCSVH4=*>< zwjJm=VtlTOyXbK3Lx-J2H4l_yF5Ni4<<)yjGXkbkr2a-7XW3S|eF;20k8o)tl$i4R zN)-8_fij@9nN5ak0>}bddYyML?U@kK<2M&8Y5h$yt;`3Zj7P(%U(nSWeekEyJW}Fn zHWoBTlGr_bON#@0#k6k9vQCMf*m&w$CX<6*b{wqO6o4A_&=Lg7N;Fhb{h#$>IRWHG z-{`(NuPhsw%{52bA4xc0$Gru4E3eMcvn0t92(->C{5B zCE|^UQw|J-_{EWTc__}_X|?N8jTB5Vl-DpH^iR*QYf@jMh=+0d>@` z?|#)#VsjjZhD_0y*HB97{FbgTDef^8qfC;b!bvc@Z2ShFSlj^C3MgxxM-m9|P+`bZ zN_m__E-{m<1;w$vkW9^$^X`0nchyZlK54-DMKsJ)7=3@u!&B*ufiXEgN6$AuuMr*v z+}39*z8iVnQx|a-QtC;AY|ikSr$~I;=pS~EhTOvsu#ulyw%>0I>KkP;_ulIaOC=*0 zxEi239E$rTWEb`fj^NcVGVfSemv)M!dWhYq1rE$a?n~xQP|9-O#o(k5;8X59Hz9 ze;n?2b$bkOgxv-6FT|#8#qYk4EZu9LC!gjCm5ZhaNeZf^s>gp}T&KLsk+yF?vF*P%iJwN8V)gNqjm2N^Mp2nZ@7FaZ`&Cc%=fq>pqo zTW1~4#zOzDF+_eXjr9h+!|&*O%$n`??BKTglr*(5?1+%SQ-m3wgh1|{0Ga+ zBZYSOYe~}vfy^C0)k_(~8p-63B%~5S%woL|m0~VB7!&_Pz(Jl1cnBFHkZwpYqW(&T zjO)J46#wNn^PZ>DpbUwIwwc`f<; zz)Xn_`Ys>+jSO#yq+kE9i|8F6O69#*5i^lI1QubHFeslUCwAHt|H7?jyQ2CSqVZoe z5x8CLmGiyoYTuLq$>&c_?QfjuAN1CUyr+ryp3007cYz-8|9*@1K1GG^ zRK;{S_S6*?7BtwXLtOGylrL=C@7esC1|fkD2RgnMIWaN9|GWBtwD)m2xmoBSz!sOO z;8YfZrbtUmajeZC=IRBpfiCU3!07rvS1&Z$1zXv;EW`>e%x&Ti<*Dxn24pxyIRU~p zeqQwplmG1O^S+^Y*{lEi8SW6-^j_L``Sp^Pmb6OR`5ZVpLp|M;D5OF(p=KpJL8O@W z__*xeF?ksOi^)EcrC~E2Rc2&#@JMi3RLvTH=Z{XPIp@rM^)@vA=Hlxz0B6gvEvxO3xE|4^N7Ik1{pP0xF8~#6M zV;6-$N22;)VU|IjdrUS@4jk;Uh*_f2(=!Poq-ec10!KSsOXHB?X`HqydWb$Vt{su` z=va|O1JlM0CeY6cNHd6t+#$S=61_*mfH?|XEVgrul}mI()rYX-Vj0reSHLe}tfUmsoZ5jbovI9Ol9HlJlRa*b@Dro})n=huyhqhaN!03dB50 z0%IAxB}0bnZ;#P z1_;lM2M90CG;%EtT5!HNL6Po~4r!52kvup4>i;}1&YTzLoS8Gjz{~>o-h16weB%@H?f0??@Iv)xw&q<2 z=L0MaAZO`1fSE=ZD!hT33`Ew>~n36Gbif8x1QQ zF*}Ilc=yC4Zq*yP1@IWZGIeuA0lJW5RL56SYV^SQ6^S8{ z9mg&4_o79?M5~eGH%$~<%;r@NMx{%oW^MM&;BIvQyUo&M4WLS%FrQLr3o(v7L)R+S zHklg&bvX^Dcnd9?hYV@jMBzrUqD4yTnZudoVn4%R1_oA>bJ)|~%?1uK5`nME4S-c+>e=&}QA5cSRB{2X~p1w*~$_?4ZMR#}!fNb~|!<@aMf`W>WF z*SpTbiL+@}v>XwZ9VEol#cPVB;KBf(!&%yJ=)@$SCy5#phGl=8Ehkm0#@>tybS(L^ zu15Ke)2ewdbUgU;oA2ljD~xx@fLPURWl(!80CnAct4uRJ7N;gfYZu`|_oAhUY6@oc z@Ax69QkU~;lW|Yj1V@y+%jdr%!c%4=r)e#V?cYfumZKA)t|mxQic8q~3NBx!+@U46 z1;_g3B6%KizF93PAQ`>+?b?}2moZ9~;9gt2)l?@VagrR~2#Z-@+n4~hzqK4LWj#K} zI2)zW8RIVI$+NrbH6j5SQeoU5j$G0)S9Zml0m*`zopqnTQcTfeX6C> zShn&@;YQ%sw$~1CqmKI5iT&{fw3FvC<|o)cJ*5pFUImatkN?|P5pkqUhtodrWU537;jax3 zt6kr4>1_y+%d@C482F*!S_0Cn${nXAH7tVtM7SgE9 zpT`J%LwrhI(e{)sJn&AUhA1tWF*jef@UC7PT5axkpQPh>Qg(dnRbab$T{_4#XBjQNIF-F|C#PVrQx5$+2ZpWkYH!(AA;_qbj{pa)coRc#d4{`3NExe;!js~frvL2PcwP#b9{Fy8lp1jk&#F4QExbNK$L{8M2N>*(o53eSbH=lMplV9>d z(op{AK}8R5f>)AC6a0G(%|=J$ZbRdAtVdw`&H*g-Y&S9zbjlWcn4!l2NVCy7`Df0( zRQhz~v@X7S&njr9FFwI-hSP-rC_AU2)-(QlbFsslNqaPW3T>sj#4A3MYe8ZIRZ1aW zC+gPx!?Q(L1O^WXRyIn_y!<$+hp`!gt(gip6FnxH)`Y{gG|zu-!eMSWL{!K)qO=FA z)bF0dI0^on7c-A|UADI54zj##(+y1qY2~Ey89JT^p%#-ZL@__7ZuVk%dcTOg#z>ar zE5C+MX$m#?aU@|c6mH9|nLiQjKR|By}n8C3%=evHV1 zqi{AkM{e4R1>Rqkm72`7@e$~yx5JYYH>*z){MVJ%avD_(LXoYy83^Eqh-NG-G6rOE z1d}MRdL74#BEbs+x`>9A`?!r|SN$q0TPT$5?`;)$hi1>}xh@`yl8t5msxIQ69t~fX z2PmY>Lu1ItsSYbL_`;pHnEP7}P+T@PBZqhPu3@y3?IH2jF7OZLvW1(I=iph}E=>;) z&WJtmMlv;>Y;EcyR5y|^a(Ea20lD_CTKo)NoML;wde=oao5DF;AS6Cw@>7l}NTRe< z^#Q>Ba)sR1s8#RPN2^G$8>mYxF-y!IbB&*WKi*dbIj)d8PFF^9bQ{AD-|v75ShFF5 zUp(XNs~s+?^oCh~k*s8nUl)SiX`^}j1%YD!PVkNNuUnpxUIW|=R|ALgUj?1zOn$M( z+erChNvYFASD*IMxLzgIZIt87>ZWNzYwV)cK;D8+l zU&^Io4BGEWRMh}-2D5q(pj?>(l;qGT1ejOV>3EdbanX&Inc*@<0_c(4mh9Ujg~S{w zBg94_XDI(O0#IJ+B$c*BfJo#~)kYuWs1L<$MhZusrz*?w6kweS!e{$}rZ8VF$d6v}JF&CbuaeotHYnQ=5bM3uN=6GMFl z4*+0Mq(=@z6)f;SI!+%C#sr%1dXL;OUwg&J-#k@@G{;5DqgykNrwTaN&`uca3N+3f zEEjsB*d_eSM{GlN$Z@2!4JCv>kaOe>3EI|fh+e{hZCBkz78V%%FWMcv70Aj3`v?)H zb0K2j4JmkBf?2%u<@Gyv(`CNQ?(T%ZmEbj2GU&PUC)RN{&78=>c7)xZkv3%-9CUbA zghT0#Vy=feMR_qN5og+ePxijopG_MF;~cmiomHGSjEL=Pn=H&E>^WICsumw;Lp`i(G+lFh*B+N=oE2*C= zv(l&O!nuw4Qs4L}yQd_ZSbrLBZg5)0o!S4-Tf6n0t*K6c(FTI9Cc)v-G=_={ zq!0ntoFQf+7E4`ZTMwClRBd_x-)k|^soryD@t2xWcTJBnnp|Zgxr$-0Caog!3%D!H zK5w~36u&Bo8anRptPKatsjqxrBy$)^L=L7)Ti?V@Fmk{yzAPFAY5O$Sl^fHsk#aa-ZcgYjb3sE2UOV;e1{gxl;a&MxFgn%@b?VN}BC=!dVy^iv zRwpjXM!LKNxbzUU1fGUUHmnkVdNa-4FJ%B~)qb(;vpcUoQb z1fbz^{zVyG^E7_;DVe>K#^LHYfiiq$8-D^rB}tex;iy!7qQxV!PQoIql%0wx$%pC# zOZphL3y*2uC7}V`-JDx@e1?5x^KwV5(V$d52il*~{WC&u%WKyEHC&PJib&f(%m4b6 zFfgpTuv+mR;12%z&=%iKP?BS8B4+`lvUI@?fe1N42A94=rG(2g-_J+<74KPfjN0pF zpH7fsk>pxsM~2dneTO$?q4o1QCZuc?pu*_j8XW%Su`=D?rs#L5aAPBvcAx48v=imJ zz*9I%zMn-{pFMNIp@0CSPS{`(5J~j=qG@No*@=sKw8ki?FO=T{yI7+k7T%&~&TFDV z#BLY-yR$DL(K*~(`1?`;EYvs-3p#@l!?=xiBmm0#8;$!txo}d^^l3Z^zZWrhcOx^F zK2BoGqRmQc3GHz9d_;>^;?1w>EgHH4ZtH-m>kBvZTm|%wD-XG6xT?SQ)Ma>Ope)aF zw>jQGy>>XMDXhYWv)WMwCXhk8TLuq1WToj>o|e+hU>@-7NBunOQJ4^D%rb^aHO5o5`MhyYW`JVOKs-1rJ2T6&nATtVa?>Om$l0*S5w>g;5$h z$H%Jrm{=shKqBly;j#-YTq{e{hb%Tk`qcC3r#L+=GHz6cR!LHkoDtd|j1*J{@%d33 znUs~aU()X)eh5oc;{UViAAPav34_J1lS&r^Ca8S*a@uGdbfs>T(-ej^Q$l|~qzlHW zlP{=MqsFAx)C5=XI|hhSAE(eNsVkW@4AN88gXKy?`xuKSg-998xp}JJe=c{1H@(Hg zwN|ZZ8XV}#Hn!{2&d6k8lRg)QRP+2)#1<`gPMzLED{fS65XFH}Aib8{#jQ;aLQr&?xZnhyqfuV%iwFv^|*vyd7&u&cR>X!|U%LuLFLUt0xL|zY72k@WZ}_ zagU$z)ij_$AP>dyHE9hE1=?wcyBXiDDc8P=YT`lrmy2^#zI#6ZM40-@J6<3=>E`n( z16mP{qoiH3m1x~3mf#!d3 zsP-;aRFE+Rx@ygj{+=70Ce;9Ak|mpFIWH}N_j?&P#t_i3TZW`{TCCg95@M$+env_3 z7<5dK0}3Mw#!~NS_|rsyR>0D~=_h8ml)+lAUU=v()DUWB>f(LUwMq^Js`&s@v4{r& zLsbTtb8@r#Gz6u+=ZHU?*dOR;$s*vaGF%?LA+eBHXqQ02;t^d^!G!>6SE06J=9 zME8~}P#KKF_~&6GB2rgTVO z8k!!1E{OCVB>417l<-N-_I)FN`Mg-&0Jm?B!gDamv`24gbzqMil@Slg7V$2o(g6 zx*+iDDPY6_M-a- zTmJm{a|ED1k@WK6{cL_gY4kL_pw)`}p~v}WT>#&FkwZFjCBrttL~n8(R@w~%!{FY4 z{3PIARHh*3u{X;B;Ju||I}sA>0Ue=QpHr(H9I^Qa0h1Yrx@R%xfPT^jAfdId#VM|J zJJ@j(*>=>40mh`=#mifHnF*2b(-R%Z0@x?9xcW2vnW6vCqG46y1>drT{T{UM;sJy% zd~kE3j{!~!Lzkji{UsiZA{P+QE}tDMdZ!~VFK=aloQa{ z2Bf_UWQ?OJM2#XMBD$G*l2ya9)VR}q=wVto6wzsY62Yxn$TgE-*lR7tY?^aQ8h~Cq99avpKOy3Y;vKJ zz?EjV;)^FSEYp$O)m72a(euvyVPnpZ2F2l~&43eaKLEmazX$9~3m3ZW$8x-}x3P&X z|2rj`p-xS!D9Ivh?U#AX`VERXk|Ey!_FKLgDgyG_`qgfgHX2e50>na^Nu2U_x8v@^ z0CQi&`R>eM5`((Nw282mJGRuoKr)l2k%?hd$6X6L9x8b`1?P72cJ>29QBl}YAWPB(Q60Q{5eCWBj$^Js4 za{I4Ohoz*!ZNX6wrrq*Hb-92=OE-Gg$OBaPC#D+ee#`Yit7a3K$Sa-HFCv6^cqJhc zexNTXL`b;+7W^U)=lEu#P@!J5TG<=hKg`iA%Uk$r??D{cGxt`9VBdeYqESQa6L1aJ z1;<9)0=)TGfP(uVz^AF2K&`sp`#5UR7YDgoe2`uaV~|xXv{O46tcpg)iPY zEVXFHa%2Y^youUH-y^(>IYqo~c=h`Pdr%@`b@n^I*ogQQpbcplaI;SFpjzop;etuo zO1Vf`Rc(m+JX7I^C@CN3ktsUlpDKg`!rBg?IILt`#_M$_Fh9vrh|*U z!F;p#PBie&Cp_c_g_MghAZvI65OM6Ma6+CHbhr7Op49_?1h0|8rShN*qE&qNK3)w( zZ4A&OHC~Ic=3;48u)x`FNWd5iGWy5QU!Uuppe%$~bncF8!SJN$#hb(m#Ce4;zXvn! zRSR7>FElt_J@11uBc{FCJ_Id1!v1dqqmKr0 z?({PvV0RpF!Ig~rsP=1_HWJa}<{%q#p_z7(lym2sx;v~~MDd^*6X8c4)SMVpo6&sB zW2iK!HOeBtH`+FWnmX-k$fWkfV#H;{6?IRLCcf&?Az@iOg+A+gT7a4TQ4I;AC`2Ax zRAovMXLISlHIzpDEo2)I(LO%CMv$|rSeU2l|l-BhHx0?4G9$>_v#Gqln^YRF{7wf z)~WjDDWxfHw(7mclL8N6mdpV>zvQz6u55n?i(Vos*+LO1{)_-X~FbCu&a~Qj&drbT7*&RWUN8)9}h5A^%YPvG6SMO=(%Ui5AnLE8v_f@9V~$t z)`3Nx09PaY1h9$PZGpT4l_Hh~+pwcDND)C!(04me_iNM;aleEBBD9qAsH*a?>tJs2 zI)acy{LSEVv9|Zm1oHBZyrhCx4{azeHtT1M)NzA|SqU`#B4~#v@!a0Q-3FVl)6j7}6uWc)Ty!VV1)}6y`5=J>FX(^5(Alfo@c%N36>8%6?;4e>=zqt34TnU$6T~jD*oH5AJd2*pL-;MmDQL9!; zkL{q^>B$lm?_9r+yzyRnF0iaYv$NHjc#x#K5Ua4S-jU?KPA)7naJTnljhS`l+wLFi z-Sa5+mxf1x02J+?%ssgsY2pbNwggBVN;!|B$_pP0LK1h!wIdKW_%0yz?R@}lb}-!5 zxQh(fC&kk#rSR-z0SN7e4)OqQ5Tb6VBjrz&cvwkQ2n;fn(PrW7NQIS zwg;v1H!C_64Z-K)Q1NVC1_xMoutCr}NeZ)-a(arrCk0q{G5(T2$&3(lLmkbHDfKB$ zDb33r-+!7#xqG_;IUTcN`UHAE3`>++sJ{P!0jDIDbf6d%modG5^adku0N_m^*oL`F zIZ)gNIp+F%3(uo6ga!nE54MnOtqv%Ey8BkDGeA-#SM(+3nAREEbnt})X&yy|zjOiK z6=(u&_wCEhm1E~U(dn?;YOyYo2K#fSE3DB~FH{x>!ulEzipA^@nNnf=oUA(H$%&KF<5S9CQkL?0tFTmiAg{uLs4q>tOh4 zMlapAr4~2yu}Ltr^YN(yX83vnxxmVLbgkiMaGB+-Xyg4 z@{)6~;~87>>vHs|h$SN^Z>p`aP|?W%x51uBhi#ScC&y`^GJ$Io$Dc&~Tjhry9SZZ-cEGk|bK#{isbMg4XWXf#0A#e$rRNwV_BwRnqr z`|{$TR9{9nHCx0<3>~=$-bQ1(|7NI$Cp@;M`|H^BmvntS5QM#xGdq8q>aGkJ1GWK6 z8t@m{`qQT7o*g>!9g78}4LEaF}vmkYq0n zI2`5-?_Iz8!Ls^NDuz^e$z|nOB>bYAs^5lgayca1^8&-j?`DGt?N@EZr^1?2-Jc}s ztlrC3^Y8{s`70VZ(SH&Ulh+(+OixykfmQw$h79CL@LPwNyH?ia_;m)1NA zXeldo^rI|ZrZvpA8Bxd9(%?qQ>9Hev%)A#*sQ)43VqvKe_#|G!?_w|BYuQJ(bG6!A z={^Qva8h_{v^gYtLBMArJAY*8};Nj&RcyM_r^@IBo3wc-1?t2OV1m&SD zL2V#Jcs>XCw6+HTR>rlje!DIm0H-f~BCS$F<4S-&K*pshEG%^GCG+a5G4JgH0%;)i z*%-@}1ltRa0Fgy1Yp~<>r{+z1vYz~LrgvL`d-<`de9tf?wuJls*3CTSo^<*>mW?WM%pp=Q&4=3aj|-*R0!6Q`%j}M!Ojt*}X1*==XSs z;@{#JfEqYxLrdU0)(1O^m|93(A*FCxzvDLuF8Dsq1}m@mrTWxAd}$qjbk-%|WeS|h zuZyNo^_)m%ivJT0c$78qNv{E0bS@Lg-1t*$YH8X{oTv9uYA%3 z!pRFDA_XAT(u@(5S%6y?HDG|4w4D=ZZ%u+{E*-%%JPzuvEHvZqUCE2fDamA0H^D}qhOq1*y`C|rukvRD`4Bp zU36?2AcvI>wE)4S#pXaVquoKreSpvH`Hbd}Sd^xwWK(=vlswWN z`m}&FFHdByiJIY4ky6~!HMU&JiuD~qLj2dk!a^QO{f5ItBK2M(+;27kF{yF58t2i& zYA#!u4)g6Z%!fR?7(Z4n_C(FDm|1moMds>%!H2R0G-AlB;>yyWPqxE1GR!sA3@AekF#o4Yvj4p@7DNuU6F4PDb3? zyFQvE;`R4q9MPa)m9GJpH{{X8k_*~_H)+#johvxcnv*jUX^?#cCM=|kgm6<|3&eZ!w)QPtcV?VF+GV?j+uQ1+nyO!=eQsr-p({8f|VpjDbkk)mrWh?BQfX;SNWa??{T1y_(Yc1||T zFos-|C0VmRVgFb7B)lQ-jnGGDCzqB?Fb@JN-vS+vN3;xpnzOzj+VKfRZr=LsAYkb7 z!Zo_>Bz-#`5_Km#Pq8t6{M4G&=R$f?je&jFgFs;OC_ZtG!%;j5&qCAIHaCe9zqU+f z66HxU-auR}*w(>`<4u|Li_G#Vjn10In8-7*Bmd?x3(7~hV)cRmH3>vGs6`$&T1)lrIpTQmkm{6P z3$Yj&a_a;Xah_jO+(oCWZfntRozM5vKsRE32qT z2FeJ#9jYp1gAjBK3AB$$RJS0Hx)f&JJlkM+%zUGB&K;R;*t>erj(?oiEUOv_l5r&X z(@Fe@vL3YdWR%(vcLCv&EKpXTavmfAh;Q>opGYjR`d4u}%2*Knv~dLdd1bH|;`iEa zFuGLPK@&Nf!3qVH?YaZeM?@NG76mDWlL#)Dgd=HINU2M(Jd5bkmbbJOZahupI=s#c z_SsAv3vSPH-Q^{6t1(H`XgR2X-T~wEodf%R7Ozj{#cB%Kb+@?`k&&S1)L6{ET$l73 zT1|8ObCMJ(Zs^4ej}oey5`Yk(%kR~aSzf{&NoP@FJNbp04q!7$t0T%{5<$aavL|2_ zi;E8Xljd|x+?pU^vUd|*F;K9inTJ0-KKVC7ggjE;4g>JQDvp(2QV z@apNqqs0^hlieqta1yq6VN(4oMVp71&4gyxOj+M$jgp8x(kBCpiC&=)Zx zhAMf`HT0eoylQ7wcpz?P;6NlaPk42}5(m@L!2c{F`CaVCIg~O^9xic2j~7eNirV<# zQI%X?Ub(Ve?Zo6?vx{s7wlCqH=r;FUgp`_nD{9s8t1)Ck$2v>|-4Gg!j5oX@T!?%d zPfdTZ2M!O@8_G8#%`RuPR^BTkQ-MwsV(wofB~+Xk)H8qbh_5Vby;$WDCd-gwrb6qR z%jC?Ia;+B|u6`dM9FVh}x9wyM!r_&Fxu6av@#~ma}usAJUzBsq1&|VR*TD7Fh6sMy~fD3j)@*# zC2rzo3NqyCRI4U*he^GX5n^@K|zf3=%2Db&>HcfER&u5&Z)~= zw<%-qw6L9kQlDS05ho@zl=HyLqDMb!w$$5Hod$tA`ljL33_N~$PD2)Qn>g>LW}IJ;aV0c~Qz%k2AilHg zi7TU5CqxxK?MvN(;0XRu6~4m@U7R@2@tgI^Sg^igRYp$y<^+T$#zprkAfv1I*W7O~ zw$-m4TieWjZFyf-a#B&xY_TI*KB#oXmuurY z3s|Q+Jq=^KE|dCQ@*a)Ilpr=eU~ncNxGth`npk`t&ri!~OOE)GpSom?<(mu?|JmbI zX7?OaUSgj)Go-`?p~F-rWc1PAj1LJ5Z!gVV%I&dxR{n6V9&kEPZneIYvA#^jRP9GQ z&YqLgQdD;H*^0>uAsLAu&zsv)p;hep+2^okGVEepF_HZa07f0vj^3EQyqrB?|EXO|fr*2@9ja(2+uSQWq0DP=T44erEWZ1L76SZ`K{}GgK?Uc^q~NgFK{vKf zbU|V&zDqGoQ~ox;fR__mu4s4sp7UIR5qr|p^)~nMcMI}PGTT17W@QR%XLNo@2;J_l ze_{`)-~NTQ+Tj982lu7Vx5$L|f)ld#pN36B&ZGOMsyg2oC~ex?*^U38Y#nB$>HZBy zmj-Asa-`U;8=Dqs9nt`E;K$+caK)Nya{&-aj_W9@-z~BhBT1U}j}GI;_OcAKR7_Z; zoL+xQ$k^xGwc}lg4WGGT;p5Xco+QZwY1cH#m_jBPd&@t5*+a|=HE=4HuQaD)wD=Jx z&go#2R(|i0+JJ>C4FsO2>F?rYqvxIKct-2KEDz#ImsfS~Y4ekQyX)id-*IUzZ13OG zhtlfKl?Wt95uEx80Xqd#?n|k3MZxjAX)&0YOx?GPfME`QVvfMbcPryn-oPOsSLw67 zFdgXaXcS{xyyLdV#I5RLn%$K7N&U%>s`(Za$H0?k&kMfP%~{XG15h*er}%hFKcf@x zgq@G3^DdudXkW8|Fzo`jE%HZob|awwZ59*OlqcICEBq{eEmJdoc#A{E{Ef#$O;9KpSztkw-bYNx8}(~+)dk_Q9a}t=HQ@nd5Xp3vXHq3ZL1d)Y*ihn zK}o5}eI=`#u2V4XK5o=X5(33kH=gra>lNIO6{P#4TGVinON+=w-}P6e&$X$;VzU!! z^56EiL@#LCMYEq^CA>@(FakNw6;;V#k}xxg&QeYmMI}mOSVb_kdi{Jfaac;YtVP6Y zdjk{D^m(zVJ0|4R=9IE0_)6@ZPsUcsHD~k^@Z->)3bYn=qXldy&D>xfN$zx@a$D!2oMI`-P z?k~eh1$9lKL)M&u7kI-jgWt6tR+3nb422VmC&Ri5e*vxX>X-#*y%JnIxQfKo6bs+T z)7G!1o|CM<*bJ#8qsHc|ZHq~T1N63tkKG2>n%7R7>)&cC*sJ8{y|FT`ZodtC(KmJ? z?%Ft)N~GR1I3gT2d^)UV(}laCuAm@x{j8Q@0ro}ValCe9RZb!J^!=QXt!fbZhxB>h zIjW7x(D$c0thXize>85$A@%A50VEWr}}q9T0z%iP1R5C#qodw>-ma zxC%BA#LyRuLIyG__#4}>n0OuCfE=W#GvXBj$9k7ZRwWL%R#L_m%9^ra<+#mXc2g=& zmB#28Zqe_Lfi9IAUd^znhcq0GU?rj_m0eBpO?Gt|zqhIa9hZ&SAE`bvhM ziq7hh5Qyd;S5H)g{pIbAP7(b;c?>>X^zf0QdA--ezkz_a)$!#W;XMAJj-=L6*iwj1#eO*xjaddN0ZBI(Z-*pLdx97Zt^GJg9Xe!3S z;zEm=Mh1FVT6w^jwK1UYmtTzUzTH0{*nrwNt4#HaJr?{m<}850s$U7!x+TRV_`NR( z5e}Z>cp@dwmxr>W3-1i#{%H?hCAgVsV|&%^lp2p8he!Xq-TW7XI`f7&wBB)BM8J11 zYA8oocK`)nfg8*7A9vJw72M|^FmX@R(|dWuH+F4L^8TS zB1EM!UOg1qM<%Mi@6DWgG(B3M)yH8I_7dAjI6bkT>pS@@jCr!ipANpfsoLON0;N&= z4xHKIt*zHloC~DFt|bS(4@v00<3eR{dKtgf28cQ!;k+Il-L?Mpb?t&voMi8d-IYj; zQ_IaKB!$iOn)zuxvE;N)jUUVf^GpH$y}OLW8I6?AHPJ0)`31R9k*aoBY-W;eVvk*m z86{rA_}9VcuEE5&Z>^&7Bnzg<_>AeKic36KX;CprGk<;e(a*Im2dKkN#vWjQ z`^HHHL5_tJP+&Et(R+4Czr!+sHB9si9a^Znemge6%8@4=O%f) z!HZDxk@PXBbM>W;nU%`Hp~Qv(>+zP`R);FS_ zqwS+`n5hIax)_a^iVAOCx`U{;>W@t#XFtk!ZMiE9)qUNn-sxbW{26e4<*Ms?OG>?a zq6y0t21y<8Lc)1XS8$I*Ze^tKscKb7DI6tTyb2`Eh{DJmU2FtZNto=eaI4(X8pJRrZ>L1>x=ONZU{65BP4!7V@q?(ft3w zFhdY_*Z%8F^cAkMzxmRK=JLfiP{cuo`r*S+Wi1gzX+vqp{ z9GbOvK@;(dtj$~h8`IAkh)@S2B%nTtPX2tv`8A(b6(($Dk^I#>L{se@Wf?av7VWPu zKFJqfP$|NRch-kFC5n_#d=v%sz7~lp3A%3yXEa6sNaOJ+mqDNbm8NKcXbE`?pAojQ zt#Gr=DbF9gbmMgWg)S|vyYSY#&gWE6$}isj$$#zF)DU?}s6|1K0Ts?$p0P7w+~ zZJYUhv)+Xbx4dlWqIHbKmGGs^ok@(t4EekJZ$avrVVGC*?8#!tnHV#{q048iX8hP* zhEO!QAQ<;_Fo<^NA4I$b>5F1Xs`wIlW(nAgn0%;&sSE#}S)-S5-B&TvnZzZhL=*ag zDgaA~dQ%y2AeFzyIfF@~we=5eh7%o=n4Qw=-D59GP?8FNr#K&EUks|r4^EtZjjI;k z)MPLciQRC_*EmQs4(n>8EkSgbF~>a-xQs#z`?|$NXHiKP_8T+r^MF+5Uq>MfB}g1G zPfo}vb~d^VJxl_OYF6!tMazFgJHy$8oiOuya1}4M*W9A&lWb5ZJ#)^eb(gkOx;{b< zVaEEoRHdy*2R7+e`jNMRj7f7#v<-A8^xrWd4z(obZB)pwDZdhqB8GGo9iSmPw0<4W zZ+m`U=2;p7i|wq(i(U6!%Z))7J0scY+9$`T7_c;{T+I4nXRL{>=LOa0gC!3-152cEIB!|G$&~_|X5Kgr)xZ zZ2wP8|BVEoAqkF_p)rJl(UwF4JY|^)CVRV6fI$@bXAtA+a8Z#g0Cjmab@luXNlrlD zc>t(KLZ4y&bc=)b#*ifjzI6V8dAD~Qt zl~dYlldk^g z*Mnf}1J>h%Rz(7!&y3D4F@gC{%NOd%4PX-=RK#>!JuB|8>@gJmC2Ju_u0p z5*o#Mt@vw8qZO!MKlyRcj3aU>mhFErhy4b5;Wg$pU_Q^_;o)&5NIq@f3dW~ChkaY@{%(KLk|UeT~FS>R0Y|CW|+LrlH1ho$Vwo zzD`^mKj9JS#*_lvC#aH=lA#k99(q6E!B~K>n{&65vtfLHZd_PjuZarT`Fb4Oar5E+ zA%p>DxIvUj)~r5bm+o_22kb^b4xOJAdk%2k&IGVFPHo3B_)_uYvUkp84QSlkZ4LfAn;hiIsJFCGaetq7?qJb%_&D zW(BMRu5Q=@jxl_GZ>DPcZftCn)ad{!z2yeYYL+r`a^d`0Bd7aPbuojR3AMGHx}SXO z8+HKCa8(xspI}~yox|nPY729o=g-|;K*7%?7zHb#yqx)=pXYuJ*Xul-B`~_)Db9&l za+*_Qt zu{IU}O>#g~yF*9T!=wHJEpKJ)#SPYN#7rKR4apt$(IK^LOv%`n8gaq#-V8oxEh6|j zJU|?f$^yNOlbJne_rJC{`u^pLxO^RG2amOPy8b|9ZuI-*lpL)?cx4aZG<}E02i8CYH;}JUhW;~)%gIuXkr=^NWIAygnhO%k`WG4j7(?# z6!-?Quy0)@j^hG=pR0vv%kg zb-x*3MO%=bu~9HhyNmprSPp?IiE%%)v61mZ&_h5-$X#E6_Ou53-h91+G&b~)BYR1C z8nZqOes61zh&hN)iMlu9NkF#L*Dxmd3Zuf9hRCNf~w>CTe40kOz&RvQQt#h;gw$D5fcZ=yk@Q^ zr?;@Li_O0>w}nRCXqzua@3)(Q1?mXg?o)AP66v ztICokXImej#*hbGuD%oT_iZ86*vs;qw{;m{C@%O-!@s^PbT%gGGOcS}=tKA3pxWe1 z0|z^W#tHrxO5+k~c+JuwQXG;#^hXd*^4)cg{s zJT>@jHL4&g1l1Q6R5AongplS*Yy*mWF@W+pON_wQJG>CkPml_WQ5!#Cd(qB+e{-td z*DZjA6M{=<{K}`bdXz6@J1YHcxkRX6^o#Zb8wE{5R^_JaAg_#1;?{|hi zo5{AXkaF1CjwJMm`!XFn91^xm_VUvsj$%H?eUF-Xr@WOFfE&d@5fy)z37}JqOZpPI zuWpRrL*)_*IHaG|yj<XVK#{^k(1dM@ z>nFrPfWUz8ypyz2)&s8>)KhKo^0Hl7T3RotjP*+NRSbXFZ_^#Bs&U%e+?B;AJtOa) zF=?73NoAe_ma+xAth%*OP2X{X$AqV1AX&e*kxyI8;F~PB5dqt9x-WRY(jFz)u~dFp zbQ3z&`pz*!^D>X@O|7VP2P5MTRFb*DNS|#Ex53P#R+p_b>!NFBTL;~shpB3-hznQA z{mRLTK$`Lyw-fYI2w2k$Hv+)yS058A=}O>{Aia>G!b4bAxXon_c^xxCG#(0I#Xj3jav#>jLrxb{3&+__oZ+P=h?q*gFn3ByDEXjrN-I_|qRGnwA>b$ECr0 zww~WKwF{5peb%q)hP7RAd}3~EF9Qxg{VK97)`%a+{skZ4srDl5cuHvSQXKsVv!n9tuw9s&t*|iW{-6#bnfdP9E%W2M_eEsheArP~ z4LFItJ#XJ^?<|NtN`zo=C*mmT_((2>`P2HV6a!A|9^=Pn0R^{C%iu3e6`md;{dL06l<_m<4idUk7f3t1H z`h9)HNieeQvGt+J>nv;q?MhDnEbTO6JHjM-MF4^0qTMXmCxxwcv1V2~dM1)xk=VB4 zPHDVjt>0!ufQxZSgZhdgq}A*-u!ie0I6o(}6MyN2X-`)($N!`S=AZ36Y(X^#&ADWR ziZpLN9BaUN_D;ND?s7&nmvffIfnn7f%Jy+gBxopn>z$8i{IOIplyO>5{<3r;xxERX`+t^|RL zG~(g7qFE+POSGzX1|135%kEp(9H!DX%xd7$P}`7bX}HD9^Hh$egm$8vKz`sg;43-( zamvF_xdi#)M+$#lk}I@&_*}qC1!`P>t`C({DmN#|{<@xAf`%Q6&R_q)$b-oI z*KhylauwvjFV$=<$A9jI_sru^ll&YF1ZG_Uu6n6dz1yp)i%TPo){evgErCCmF3r@7 ze)h^s_l)({hg++?h37LmaM6jrGIyn@ku=dL7mUE9Kx2?1wA4LacsK9x*L^~m zw(~P1xrF&Dj%Sh-mGEWD4!G6ImdfvE51+DBqn0^xYwMijtY81Fc0$4Uq+JosZpCtR z?qB1rwqp@|8;^Cw_Wi(zMvhqc)l1m)GxX%xKO;HNzbBu-{qxl+1JnQiphUl2&9T!e zb+}~=u04}X@XUP}A>f`%HFi~(%`0X{L#<|og!hP^9QC_l9yR38Z}c#3fyMPdGXh! zOj8R5R4{*(f>|ckRxmSB6wuU*w>i`_;)eoC!1t22`^Pp;S`JlavQd}Xma*R#U)<#!eWM*;gwWT_QEW_B zrYK1YwGLTy2volPv_l`Sy^Znus6un1*IuH4mGj(dYY-*DoxM-(SbpeXQ~0FU{TUC* z6%OwEfe>#*uG{{VO!-IA?5JBvf}tC_{CfD)?8ryhDH_#5g&5t3p^q!QSc2rBwBBK# zJ(M5DA5ILSh$B^8RYsBjD-Dalgh}V)t7$ETCD%7C-aY^tI2^aNcu*+;-_;9c>`pON zYW)pd?`sB3c=mPXln*e*#aPdH`{vc)N%2j?^ELOr0Ea_9P?}H3Ox4|jQiCKVBXRrs zHo&*N&Q`|Bey5!5zWheTWi0t~Y^e@a<5-L(JsxVh8+ALlOb#Uk%1k$Q4#+jg*^8(r z4~c^+1h{ft%Z#~P3MV8v2!W{Jjva!&HzB5zoA~;Vx#dJ>XEodlbi-D;t~otrH`dFVnr}MbA@9e< ziyVySmm#``RUN!Q{tkZrSPHZg0mfL z1W45049_K_x2;(t??l|U%PWo2aXxj&h`}>L^aT_wr za`n^mhA*x0&J62r?2m?C%L4zw$1Q`$8Yyj2f>`Q6i3Y$bM+MSu%XKbB>4u}grIX9( zrJm)HxkD!(DI&sO#b3GR?R&5}G%#Um_%uuRa>5gQRTjJE=CY7WF%);32Q8+M?{K!V zH7Go+F49g;8t;x?o|0#jbdG+QXdPf~k>oc&%CWgoAaYz$!jGZeqe5^GIRN=YezxUi zmh`S=J8xr=u^?7xtQSUNe6%yPM)C6i4&<_b5acrgSLUy$GRq2LX<;wqMgoJA{m!={ zb*kFab5=+4FMQ}A%P)FJ9%l;7%ZNGAW3_*mz(LFlIpoRT`-U4KM&a@Z(A)5$oFh$I z;}wA;NT!&_BeN98p5hWJ7K=MA_fvl(qn(h{jdgaX6*g}pv^h}9LW;}77<~8De)lue zAZm>ZdYIcJ>wLZQ;HgoN`qHYAht@NICv|?*Qmz^X2S%D`$ID%d85V1!aPSp38?&Lj zl(x6buCtdhZsElevKX25>&?q?436=ZLT|d6DkTq1{R#Z?H7w@vnLj-3Hb2bEE-q~i z0(`5iaOjf0LprHF7fkrd743A+(8_%cccD$eV1B2;JIYI1{{qqZxR5yJH$EaTIokmP z1Uj_jLE0}W%Un}A*zVp>43?gTOeQRH;bx^WKj!dSKM>nGDKzN^*(r~Iw(clEUQ6D3 zohjRgb_#Se saC~*HZr;;Q;0S|5+BkJT=N0hYh;r}dbC - - {/* ThemeScript must be the first thing to avoid flickering */} - - - - - {/* @ts-ignore-error Server Component */} - - {/* https://discord.com/channels/752553802359505017/1068089513253019688/1117731746922893333 */} -
- {/* Add the banner here, before the navbar */} - {config.READ_ONLY && } -
{children}
- {/** footer */} - {process.env.GIT_COMMIT_HASH && - process.env.SHOW_BUILD_INFO !== "false" && ( -
-
- Version: {process.env.KEEP_VERSION} | Build:{" "} - {process.env.GIT_COMMIT_HASH.slice(0, 6)} -
-
- )} - -
-
-
-
- - - - ); -} diff --git a/keep-ui/app/(keep)/providers/provider-form.tsx b/keep-ui/app/(keep)/providers/provider-form.tsx index 2992131247..1d3cc3b1c0 100644 --- a/keep-ui/app/(keep)/providers/provider-form.tsx +++ b/keep-ui/app/(keep)/providers/provider-form.tsx @@ -72,47 +72,29 @@ import { UpdateIcon, } from "@radix-ui/react-icons"; -type HealthResults = { - spammy: any[]; - rules: { - total: number; - used: number; - unused: number; - }; - topology: { - covered: any[]; - uncovered: any[]; - }; -}; - type ProviderFormProps = { provider: Provider; onConnectChange?: ( isConnecting: boolean, isConnected: boolean, - healthResults: HealthResults | null + installedProvider?: Provider | null ) => void; closeModal: () => void; isProviderNameDisabled?: boolean; installedProvidersMode: boolean; isLocalhost?: boolean; - isHealthCheck?: boolean; mutate: () => void; }; -function getInitialFormValues(provider: Provider, isHealthCheck?: boolean) { +function getInitialFormValues(provider: Provider) { const initialValues: ProviderFormData = { provider_id: provider.id, - install_webhook: !isHealthCheck - ? (provider.can_setup_webhook ?? false) - : false, + install_webhook: provider.can_setup_webhook ?? false, pulling_enabled: provider.pulling_enabled, }; Object.assign(initialValues, { - provider_name: - provider.details?.name || - (isHealthCheck ? `${provider.id} health check` : undefined), + provider_name: provider.details?.name || undefined, ...provider.details?.authentication, }); @@ -141,13 +123,12 @@ const ProviderForm = ({ isProviderNameDisabled, installedProvidersMode, isLocalhost, - isHealthCheck, mutate, }: ProviderFormProps) => { console.log("Loading the ProviderForm component"); const searchParams = useSearchParams(); const [formValues, setFormValues] = useState(() => - getInitialFormValues(provider, isHealthCheck) + getInitialFormValues(provider) ); const [formErrors, setFormErrors] = useState(null); const [inputErrors, setInputErrors] = useState({}); @@ -436,13 +417,12 @@ const ProviderForm = ({ if (!validate()) return; setIsLoading(true); onConnectChange?.(true, false, null); - submit(isHealthCheck ? `/providers/healthcheck` : `/providers/install`) + submit(`/providers/install`) .then(async (data) => { console.log("Connect Result:", data); setIsLoading(false); - onConnectChange?.(false, true, data); + onConnectChange?.(false, true, data as Provider); if ( - !isHealthCheck && formValues.install_webhook && provider.can_setup_webhook && !isLocalhost @@ -487,7 +467,7 @@ const ProviderForm = ({ config={providerNameFieldConfig} value={(formValues["provider_name"] ?? "").toString()} error={inputErrors["provider_name"]} - disabled={(isProviderNameDisabled || isHealthCheck) ?? false} + disabled={isProviderNameDisabled ?? false} title={ isProviderNameDisabled ? "This field is disabled because it is pre-filled from the workflow." @@ -551,9 +531,7 @@ const ProviderForm = ({ )}
- {!isHealthCheck && - provider.can_setup_webhook && - !installedProvidersMode && ( + {provider.can_setup_webhook && !installedProvidersMode && (
)} - {!isHealthCheck && - !provider.can_setup_webhook && + {!provider.can_setup_webhook && !installedProvidersMode && provider.pulling_available && (
- {!isHealthCheck && - provider.can_setup_webhook && - installedProvidersMode && ( + {provider.can_setup_webhook && installedProvidersMode && ( <>
- {isHealthCheck ? `Check health` : `Connect`} + Connect )}
diff --git a/keep-ui/app/(keep)/providers/providers-tiles.tsx b/keep-ui/app/(keep)/providers/providers-tiles.tsx index c80c6a48ce..f2d9728319 100644 --- a/keep-ui/app/(keep)/providers/providers-tiles.tsx +++ b/keep-ui/app/(keep)/providers/providers-tiles.tsx @@ -7,7 +7,6 @@ import ProviderTile from "./provider-tile"; import { useSearchParams } from "next/navigation"; import { QuestionMarkCircleIcon } from "@heroicons/react/24/outline"; import { Tooltip } from "@/shared/ui"; -import ProviderHealthResultsModal from "@/app/(health)/health/modal"; import { Drawer } from "@/shared/ui/Drawer"; const ProvidersTiles = ({ @@ -16,7 +15,6 @@ const ProvidersTiles = ({ installedProvidersMode = false, linkedProvidersMode = false, isLocalhost = false, - isHealthCheck = false, mutate, }: { title: string; @@ -24,13 +22,10 @@ const ProvidersTiles = ({ installedProvidersMode?: boolean; linkedProvidersMode?: boolean; isLocalhost?: boolean; - isHealthCheck?: boolean; mutate: () => void; }) => { const searchParams = useSearchParams(); const [openPanel, setOpenPanel] = useState(false); - const [openHealthModal, setOpenHealthModal] = useState(false); - const [healthResults, setHealthResults] = useState({}); const [selectedProvider, setSelectedProvider] = useState( null ); @@ -64,24 +59,8 @@ const ProvidersTiles = ({ setSelectedProvider(null); }; - const handleShowHealthModal = () => { - setOpenHealthModal(true); - }; - - const handleCloseHealthModal = () => { - setOpenHealthModal(false); - }; - - const handleConnecting = ( - isConnecting: boolean, - isConnected: boolean, - healthResults: any - ) => { + const handleConnecting = (isConnecting: boolean, isConnected: boolean) => { if (isConnected) handleCloseModal(); - if (isConnected && isHealthCheck) { - setHealthResults(healthResults); - handleShowHealthModal(); - } }; const sortedProviders = providers @@ -141,17 +120,10 @@ const ProvidersTiles = ({ installedProvidersMode={installedProvidersMode} isProviderNameDisabled={installedProvidersMode} isLocalhost={isLocalhost} - isHealthCheck={isHealthCheck} mutate={mutate} /> )} - -
); }; diff --git a/keep-ui/components/banners/health-page-banner.tsx b/keep-ui/components/banners/health-page-banner.tsx deleted file mode 100644 index 7c099885e7..0000000000 --- a/keep-ui/components/banners/health-page-banner.tsx +++ /dev/null @@ -1,16 +0,0 @@ -"use client"; -import React from "react"; -import KeepBanner from "@/components/banners/BannerBase"; - -const HealthPageBanner = () => { - return - Easily check the configuration quality of your observability tools without the need to sign up. -
Your credentials will not be stored at any point. - } - newWindow={false} - /> -}; - -export default HealthPageBanner; diff --git a/keep-ui/features/workflows/builder/ui/Editor/StepEditor.tsx b/keep-ui/features/workflows/builder/ui/Editor/StepEditor.tsx index 6067bb69fb..bca94a59c3 100644 --- a/keep-ui/features/workflows/builder/ui/Editor/StepEditor.tsx +++ b/keep-ui/features/workflows/builder/ui/Editor/StepEditor.tsx @@ -203,7 +203,6 @@ function InstallProviderButton({ closeModal={closeModal} isProviderNameDisabled={false} isLocalhost={false} - isHealthCheck={false} /> diff --git a/keep-ui/middleware.ts b/keep-ui/middleware.ts index bdd5ffd7b1..f18179b1a5 100644 --- a/keep-ui/middleware.ts +++ b/keep-ui/middleware.ts @@ -51,7 +51,6 @@ export const middleware = auth(async (request) => { if ( !isAuthenticated && !pathname.startsWith("/signin") && - !pathname.startsWith("/health") && !pathname.startsWith("/error") && !pathname.startsWith("/api/healthcheck") ) { diff --git a/keep-ui/utils/hooks/useProviders.ts b/keep-ui/utils/hooks/useProviders.ts index c9e6986851..4ff5cf250a 100644 --- a/keep-ui/utils/hooks/useProviders.ts +++ b/keep-ui/utils/hooks/useProviders.ts @@ -14,15 +14,3 @@ export const useProviders = ( options ); }; - -export const useProvidersWithHealthCheck = ( - options: SWRConfiguration = { revalidateOnFocus: false } -) => { - const api = useApi(); - - return useSWRImmutable( - api.isReady() ? "/providers/healthcheck" : null, - (url) => api.get(url), - options - ); -}; diff --git a/keep/api/routes/providers.py b/keep/api/routes/providers.py index 6dff2ce1ea..2952106ccd 100644 --- a/keep/api/routes/providers.py +++ b/keep/api/routes/providers.py @@ -4,7 +4,7 @@ import random import time import uuid -from typing import Any, Callable, Dict, Optional +from typing import Callable, Optional from fastapi import APIRouter, Body, Depends, HTTPException, Request from fastapi.encoders import jsonable_encoder @@ -833,43 +833,6 @@ def get_webhook_settings( ) -@router.post("/healthcheck", description="Run healthcheck on a provider") -async def healthcheck_provider( - request: Request, -) -> Dict[str, Any]: - try: - provider_info = await request.json() - except Exception: - form_data = await request.form() - provider_info = dict(form_data) - - if not provider_info: - raise HTTPException(status_code=400, detail="No valid data provided") - - try: - provider_id = provider_info.pop("provider_id") - provider_type = provider_info.pop("provider_type", None) or provider_id - provider_name = f"{provider_type} healthcheck" - except KeyError as e: - raise HTTPException( - status_code=400, detail=f"Missing required field: {e.args[0]}" - ) - - for key, value in provider_info.items(): - if isinstance(value, UploadFile): - provider_info[key] = value.file.read().decode() - - provider = ProvidersService.prepare_provider( - provider_id, - provider_name, - provider_type, - provider_info, - ) - - result = provider.get_health_report() - return result - - @router.get("/healthcheck", description="Get all providers for healthcheck") def get_healthcheck_providers(): logger.info("Getting all providers for healthcheck") diff --git a/pyproject.toml b/pyproject.toml index 7188003d6c..86853c8ba4 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -1,6 +1,6 @@ [tool.poetry] name = "keep" -version = "0.54.1" +version = "0.54.2" description = "Alerting. for developers, by developers." authors = ["Keep Alerting LTD"] packages = [{include = "keep"}]