From 8441dce4e50a096e991eae437d364899ad75caba Mon Sep 17 00:00:00 2001 From: 2ndtl <2ndtlmining@gmail.com> Date: Thu, 11 Dec 2025 15:10:53 +1100 Subject: [PATCH 1/7] updated benchmark version api --- client/src/home/apidata.js | 9 +++++++-- client/src/main/apidata.js | 9 +++++++-- 2 files changed, 14 insertions(+), 4 deletions(-) diff --git a/client/src/home/apidata.js b/client/src/home/apidata.js index 412c1e9..29e93a2 100644 --- a/client/src/home/apidata.js +++ b/client/src/home/apidata.js @@ -362,12 +362,17 @@ export async function fetch_global_stats(walletAddress = null) { }; const fetchFluxVer = async () => { - const res = await fetch(FLUXNODE_INFO_API_URL + '/api/v1/bench-version', { ...REQUEST_OPTIONS_API }); + try { + const res = await fetch('https://raw.githubusercontent.com/RunOnFlux/flux/refs/heads/master/helpers/benchmarkinfo.json'); if (res.status === 200) { const json = await res.json(); store.bench_latest_version = fluxos_version_desc_parse(json.version); } - }; + } catch (error) { + console.log('Failed to fetch benchmark version:', error); + // store.bench_latest_version will remain at default (0, 0, 0) + } +}; const fetchBlockHeight = async () => { const res = await fetch('https://api.runonflux.io/daemon/getinfo'); diff --git a/client/src/main/apidata.js b/client/src/main/apidata.js index 073851e..4c31644 100644 --- a/client/src/main/apidata.js +++ b/client/src/main/apidata.js @@ -263,12 +263,17 @@ export async function fetch_global_stats(walletAddress = null) { }; const fetchFluxVer = async () => { - const res = await fetch(FLUXNODE_INFO_API_URL + '/api/v1/bench-version', { ...REQUEST_OPTIONS_API }); + try { + const res = await fetch('https://raw.githubusercontent.com/RunOnFlux/flux/refs/heads/master/helpers/benchmarkinfo.json'); if (res.status === 200) { const json = await res.json(); store.bench_latest_version = fluxos_version_desc_parse(json.version); } - }; + } catch (error) { + console.log('Failed to fetch benchmark version:', error); + // store.bench_latest_version will remain at default (0, 0, 0) + } +}; const fetchBlockHeight = async () => { const res = await fetch('https://api.runonflux.io/daemon/getinfo'); From 0470b0f56f1686079584544b834ae88610e1882a Mon Sep 17 00:00:00 2001 From: 2ndtl <2ndtlmining@gmail.com> Date: Thu, 11 Dec 2025 16:00:02 +1100 Subject: [PATCH 2/7] removed google analytics --- client/src/demo/Demo.jsx | 6 +++--- client/src/guides/GuidesView.jsx | 6 +++--- client/src/main/MainApp.jsx | 4 ++-- client/src/main/WalletNodes/index.jsx | 4 ++-- 4 files changed, 10 insertions(+), 10 deletions(-) diff --git a/client/src/demo/Demo.jsx b/client/src/demo/Demo.jsx index 275a60c..12e9e0b 100644 --- a/client/src/demo/Demo.jsx +++ b/client/src/demo/Demo.jsx @@ -4,7 +4,7 @@ import { AppToaster } from 'main/AppToaster'; import { Intent, Spinner } from '@blueprintjs/core'; import { getDemoWallet } from '../main/apidata'; import FailedToLoadDemo from './FailedToLoadDemo'; -import { setGAEvent, setGAPageView } from 'g-analytic'; +//import { setGAEvent, setGAPageView } from 'g-analytic'; class Demo extends React.Component { constructor(props) { @@ -28,8 +28,8 @@ class Demo extends React.Component { }); } if (window) { - setGAEvent({ category: 'Demo page', action: 'visit' }); - setGAPageView(window.location.pathname); + //setGAEvent({ category: 'Demo page', action: 'visit' }); + //setGAPageView(window.location.pathname); } } diff --git a/client/src/guides/GuidesView.jsx b/client/src/guides/GuidesView.jsx index 049b91d..91830e2 100644 --- a/client/src/guides/GuidesView.jsx +++ b/client/src/guides/GuidesView.jsx @@ -14,13 +14,13 @@ import { FooterRendered } from 'components/Footer'; import { RequirementsCumulus, RequirementsNimbus, RequirementsStratus, RequirementsFractus } from './NodeRequirements'; import { Container, Row, Col } from 'react-grid-system'; -import { setGAEvent, setGAPageView } from 'g-analytic'; +//import { setGAEvent, setGAPageView } from 'g-analytic'; class AppGuidesView extends React.Component { componentDidMount() { if (window) { - setGAPageView(window.location.pathname); - setGAEvent({ category: 'GuidesPage', action: 'visit' }) + //setGAPageView(window.location.pathname); + //setGAEvent({ category: 'GuidesPage', action: 'visit' }) } } diff --git a/client/src/main/MainApp.jsx b/client/src/main/MainApp.jsx index f080feb..0bbc139 100644 --- a/client/src/main/MainApp.jsx +++ b/client/src/main/MainApp.jsx @@ -38,7 +38,7 @@ import { appStore, StoreKeys } from 'persistance/store'; import { LayoutContext } from 'contexts/LayoutContext'; import { blurAllInputs, hide_sensitive_string } from 'utils'; import { FaMedal } from 'react-icons/fa'; -import { setGAEvent } from 'g-analytic'; +//import { setGAEvent } from 'g-analytic'; const WALLET_INPUT_ID = '_WALLET_INPUT_'; const SEARCH_HISTORY_BOX_CLASS = '_SEARCH_HISTORY_BOX_'; @@ -348,7 +348,7 @@ class MainApp extends React.Component { handleButtonClick = () => { this.onProcessAddress(); - setGAEvent({ category: 'Search Wallet Button', action: 'Click search wallet button' }); + //setGAEvent({ category: 'Search Wallet Button', action: 'Click search wallet button' }); this.props.router.navigate(`/nodes?wallet=${this.addressInputRef.current.value}`); }; diff --git a/client/src/main/WalletNodes/index.jsx b/client/src/main/WalletNodes/index.jsx index f6f5e51..160e02f 100644 --- a/client/src/main/WalletNodes/index.jsx +++ b/client/src/main/WalletNodes/index.jsx @@ -15,7 +15,7 @@ import { getEnterpriseNodes } from 'main/apidata'; import { LayoutContext } from 'contexts/LayoutContext'; -import { setGAEvent } from 'g-analytic'; +//import { setGAEvent } from 'g-analytic'; import { NodeGridTable as NodeGridTableV2 } from 'components/NodeGridTable'; import ReactFullscreen from 'react-easyfullscreen'; @@ -164,7 +164,7 @@ export class WalletNodes extends React.Component { handleRefreshClick = () => { this.props.onRefreshRequest(); - setGAEvent({ category: 'Refresh Button', action: 'Click refresh button' }); + //setGAEvent({ category: 'Refresh Button', action: 'Click refresh button' }); }; renderNodeOverview(loadingWalletNodes, loadingNodeList, onToggleFullScreen) { From f75cfc82d13a0ace5527127452da6c427bb5fe79 Mon Sep 17 00:00:00 2001 From: 2ndtl <2ndtlmining@gmail.com> Date: Thu, 11 Dec 2025 16:21:40 +1100 Subject: [PATCH 3/7] fixed the grid warning --- client/src/components/NodeGridTable/index.jsx | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/client/src/components/NodeGridTable/index.jsx b/client/src/components/NodeGridTable/index.jsx index d5a5ce1..681b6f5 100644 --- a/client/src/components/NodeGridTable/index.jsx +++ b/client/src/components/NodeGridTable/index.jsx @@ -181,7 +181,7 @@ export const NodeGridTable = ({ headerName: 'Uptime', filter: 'agNumberColumnFilter', cellRenderer: 'uptimeCell', - width: '150px', + width: 150, minWidth: 100 }, { field: 'score', headerName: 'Score', filter: 'agTextColumnFilter' }, @@ -246,7 +246,7 @@ export const NodeGridTable = ({ onFirstDataRendered={autoSizeAll} maintainColumnOrder={true} overlayNoRowsTemplate={'No Nodes'} - frameworkComponents={{ + components={{ ipCell: IpCell, tierCell: TierCell, benchmarkCell: BenchmarkCell, From 507ea9580ef2a80af4ea2885b9ed5a52f4660e3c Mon Sep 17 00:00:00 2001 From: 2ndtl <2ndtlmining@gmail.com> Date: Thu, 18 Dec 2025 14:01:21 +1100 Subject: [PATCH 4/7] updated KDA logo --- client/src/assets/kadena-kda-logo.png | Bin 68992 -> 10922 bytes client/src/main/ParallelAssets/index.scss | 22 +++++++++++----------- 2 files changed, 11 insertions(+), 11 deletions(-) diff --git a/client/src/assets/kadena-kda-logo.png b/client/src/assets/kadena-kda-logo.png index 6d38e8b54008a6221654fe0821776a9ef87762c4..880585d98ad45621dc0589c55006ac219542f726 100644 GIT binary patch literal 10922 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 QXNn>xr7T${{`&oY0YKA4&;S4c literal 68992 zcmeFa_g7O{8#Ww7K}U){b`h|Rj)N2%DBW=s8AZm5h%_4_1XQGk5JpGw5f#OPf)o{D zloFICEkO|x5F#KQ55V zD<{e}tw?Wa<_=kRk140zH)c_yl0D)MSy{!eG!K>h6Fxj{c1!Xvp(~4JY=1loT`7NI za$)F_Pd`uo+j-Nl|MwCS$N%Mm=o$`GB2`#NhL?x?-@2Y5zAFX@lA24q#^*WjZ<>GP z9%#|8vL$T|{Z+5*tb3(i3Q_7;>g1yrpVFHveoLE8A_cmYWo%!}KEWRgJP7<6ouM7! zx?_t^+_hhLrLI?eJZ4LbEQxf1+mZQ~sKCDc`z^FEuk+1`1G((C%BBZG<8qfPyeyh1 z{?o%$oPn zT|pWP;yurWDIW&-eNJ^V-%;w+04v`&oo&0GR_s2`QPPvY0CaBh9B#~4P)L~^jW&Qx6Ma*Z>BudTTqyT<##LC@<+>Vcgn6=mkUwOUyd1qp=d`pt&2SNnq z`*SHnp0$RoN@dfHmAcWYG|v(fNL_uTM zI()5@ef>mRy}sC7#e`I`P@PdQYpfx}Xu2xeccT8(i!;>9y9PK<6Zgaut^F^)l0~H7 zS16=prD>}9?T~wnDaxc2DI|7{G4B!*lpxQ8%DJkRKpOEn4%x&jH^8|OUJ zvOm=c62-VB6<+Yl@T_I3r_o zZrAtzRgK*^r0L_V)XX;Rv=IQyQ+s6}R;oU+a8s?Di5@vPf|`OM+H<9IiR!_Fs>i!Q z1!hdO{`^$qo%oh_6|C9|B09DbkP`ip5KJRWtc3NPE{_qp>O(7|(9_xWP>a!pI$ZV# z$pbe|92ieSw&#jWP3IkB_|f8jkfG%N{eU^qwZFii<2a5O@lCEE`e?@Set)Fa2MI$D zb>8(+$`ubH2jDQ}V{O~^7R3wk%2wbizVXXtzSO7bZ;IR`SgP=H8>_gb3n^;&Xysk2 zzxk}M1PHTDTuL-C-KXa0uX73J8^_BhBI$ps)vITpIo@#Jo&N^&DOR@QB~~=a2B#($3_2(HLFzapPG!@7#jVf7eGo`Sz~v!HfNjtY%!;ww?pYg)Ik* z8in9#Ywo)%Z0o5w9YjZm&KinHT*LVfTQ@{-7W4Dn#c7)KG~_@YzBm%SvF&C@Pztv2 z@rg9@HlM0A{CH(1VZ<2LX`<@*Qx*gNwNp5bRI+q^@oB+FaMHt==Mo;Oxl7AJHjDr? zYJ|5!{7Cm78tb0 zV9NfS8nv@)JW~_=($iXI5*I1jut@W0j{m-fySyP>e|4Eo5#wCsyNdPK;}83pVuZ5xI!7|sqU7vf?;i=FBl2NyITYL7;;{$A$Ad8g=xH1K7M!?A!JyCBToskuGCnsX2jbDIpfoeQkO<*?H}evs_TBhfbUj@+^(~Yf0NB_l#Glg z45_br>Ys|d$I7Q&-*ny?pT311-Ym%*ydR)^0BpB+yu4RC6B#dIBpdKO`%Xg0XRD9p zy@7?F3ntD6SbAQB4X+yivxc)!uI}lT*GQY6k{;$&zfUaVwDbZ*V%5CPj^9CE`^n4K z?&oYFM82J6aEv$`cLqgaxjAS{W{En)7Y$eo9==_eU}@3V`jyx;FHtMCpY4+$fmB4* zaK5G;pK~bSEdo>M-T+6ikHz1RD>N-S6dzY)e|!;paZp|++7&Qr8(ffZGxIxegiQBJ z-B-CRoYJJ6Yx_gvzF+mek9e=UV;!MgkFc@(V3LWD!X=iye9D>X6{Lr+@xD`0f-ibo z-d1%d?tAXCJ_O7Q+Rh~!ZyQ_J@idTPk`mX5*Efr5!VuQDm%_7sEPzH8f=1p;2udv$ z6@FH*_Ib$9o>@*+QO}N(C&1*!DJvYW_UaLO#ImaXsP7l`une?rj4r@` zN!jo32l-TPT`MNZ0Y6&X7tGF7crUxY^#}Mc_3mP_x&5aB#C)LeogzXMCbdCd(uVZk_!PT!D|FsCZ6$w`8>#zDQeIW2qLS0foo+3sSG-cgT&SviGE zy^){E-ZUXBfn?KX1CmdC(U3__ZnB-j5bS7edkRt%$;sg=$&YU93b?tb%KBWyF;Ew8 zt9bF^=1YO>tROsjbiAr6F^XqpUqbu$ye_hVUCoVpTC#LGXAqSrYAB>AFK)#U#7ExA z{cl+|TGeGQ;G7&8)WE!9fYZ5vg~#mm-Vrv|le}kl#QA9cZN&EB%DFVd30dO^lt_h- zbFM5K{bwr<4VQ7X58>X%B$DsEniwq_@55vN}hnq5AYk}tjBG(Zbf7bg&(b>lE zn=Nb_t2R+BP`{q%Qx8?aes%mi`r>&Ah==R4{QVlfMQ`{al_cFOdE!X6G2+&lwuz%u zo`DF9)v}u-SJy1@5}F0$k5Yzcg*j%h4$PaK4%wCul3xG3zp$((bw!WREtKR*P?DU+{cLkXcEaYL zlY&G1xM*QmdZB%64oA2T(-;b>vvODx{6R8$Su~;Kz68WE@-kM7@7j=hA+bz75JiM| zvhT@-$K(mY*qHCPo9#7Ll;@7qxwCsP(-j5JQ{JA(8t#rMoWta2Q+&GdO5&P;+8hJ} zqu$2Ovu(%F(RJ%TvS!Hk%qNVrrd{Pw`5%p~!R(DlfNfS8dWG?N_TFW|n0v_3tkij@ zwvhnKNwTkVT^nyG3Lv;o*&r0sk3wp2w<}?$AeV*5f^a(XDJT;7twPZ?Rx6+xH+ZaG z(!q8k@zw#eoewp{V<@5`V;eFE9;%AVttLRSNpEqkeotSfFB6xaAllB(N;?H9H%&En znZirrs2CgbNamKF-Vom$w2;p9wmVq84xuguVnDNx&yAo5glRa%y{J*AhWMtUg&{_d zJ{Pv3buT@w&i%2_LH!4)6s^j4hPMu}HIPi4?O7m~hH+E|muM@<_9zjuJJg_{HG?8F zV*iSko%9quK5-z@6>$<^&q6NHXFj36x(a2VcywlvYDu`i4x6GWCjI_~*NqjDtedD7 zENN)XW3NUV9XH=Uu0t-NVKOQHXS1e4iY4L7GfzeIaxdqNyRcVbl+iXYJ;q9rrdB); zuKioaE0cifgj$Ya&o^aC7{(}6VDdwh7jr;Szpro^dZzPk6m2+Bi<%AtbB>_BeC4Bs zP#j*}j!J!n6wZcsZOAj*GK;QNy;Ykqcb|>0nZ|P>`#uL?UNug%Hr_xE)?VCt9(*Wj zM_j5E&d@}QUNcdoZA1b?5|Zt)+jbP0*e6Ys$0!gOhkb5~Dtw_|-mYxws$R21=L2?B zv-J`?PydE*lsqE@?W(BV-Q(VfWDMFz7SK*yEk#nzmefCa2G}}=ig3FG*#nL@Q0@{# zDL#ABxTjIs&jShIU$*yv9K2ECrM$vQ*u4qj=WC1rV1Dd!c!BU0cW;e)bQUSp@*SVy@3 zG&T~+UWjRl^9M9bkT~AEriyaY*0^uNW!ns|TuZSr>7yR6 z7vZAq``DAD8%Gv+@qWTou)=(QAM)hoK;hi?+guED-*5Z4Gz{e!7n~TXk5orHBXZXu z(Gk*gg}{h_a8jv&J55)j|%UqsG-H)-jC1q5K9kiq?w9Gz;Fa>X6Q$=L4x~ z&@z18Cp?O$n5mE6M_g;W44LGi@F)PBBg2Ch5+TbV_m|KSsf#x0P(%zFi`l*h4;Ix; z$XtEpeAD)mQVI|BiDek zfgwkWoI!2KgQ5uX_8_?SlqTt20*3vXD7xUfhFrnAFr4R)st__<`Lu0A)hcEMWh=02 z)cYqSCeN#%J2#q;Zu=ijC2xazQja(|917T!)tv66rHG098w-_F^_d?Lg%d5>s@Jp^ ze!~#2l!UwHy4%Wrs}aiLMI%^P97hgn(a~0I)o;jxnvcBp62zvh;c%&FL&p8|LiLZl z=X+8_uR_V7p0zBFZK$BgRb#PTZb(PQ<0mG3l~JyG4zPpuLrj z^ot@~nx>mB!NtSpFGc_;{c1>Qv{IAI6c51#V7Fpt*ZLXTdSnQbj4Z3Q9coRHr!l=e|^#r2jxDJW|n9Y{}8RDGlDgF;63}m|8YEREhjMfmIZ->L{G!d`PGE(KJj_Ki$=SiKLRaW_~4fcO>g_ zyRSs@=Tn%lnQ)xKjTl|4>M|z3^rzsl`L)kHtuHV0dPj(`$m9g%&HGrCKb z_q_O6&w;%JyQ<<_*1+bRPnoZDIVWI~#m=^Nv*hX^vBfzYsSl_~ z#BZ3`P%=rPd?bkaK3^sI=%boKTQC0~M!AsoH5BCb%f|!N!h!xDIED^TPsUg;AI|M^ zHu)oBycYAri{`~&mKj|m(F0M&IMR_Y++Bj*T^A_@yayA9@|6R<&rFHKYHxf~?-(r# zjkH5Z?qgy>5u~PQKj#-@**^2x$2=ciwjGrj%Oxa+nnOrnC?`nMf!PLVN53Yk(2CLMS4dNU^Z&@zK0#Yxtjmbo5ARK(|aAdfen7tDvFz2wyz;%DQ zZ4^yfM$#@>ir8C7?~b)JwA}#=Fn{=-7kftMLlv@*H8ueSKJs+$zh8xXxK;t*!~2z= z;GXk-_8C2-)sV5C``P}8{L?E7?g^kxE5V340@ohlKY2$%AksGY%UZk!Z{wHaF_JLr zln@M_Mh`a?(lAGYLWi@h|7U<_Hi`tz&=SRJm7Z24<8z!D6rMIB5OeP`UOCIO5SO1? zY!X3*UY{sEEohxP(IJHbUy$Ff9&ntuZrf4h?qUqEgnTGa6(eyXZ^(jj|7JR1U>ft~ zYP41V+T21ftJQH9S*$)t17g+qze7t8J97Q6duGb^+_~}^IYd)$l*B;K^dKb@Qx&=M zY=3G7LS4EbE={X%{kxwLjW>6TqWLw zEc*dS3fh4;B;-}LloUEL$M3769rKbj8Mm)ri_So3CngpO=dlfyILDwx;Z-UcbwMcM z`$Q4L4OrSJuL~Ilw#*HM?<70ErOo~8cprp7mC#u5=OqY*|5;VlnH4M2y`(5F! z%@OpRc3(9T>D}mGWy>z%x>S*PMT0a<6mJGZZ;+>%pKNQqhFrp5)EbIoh+Z1}w$CR> zgnXtbY5a|=&BO}?-|Hd%j#sH=v%-+m?AU`^w|N8Sa#GQ5)qmqWA(?AR?d0hhN zA26Nj`vu*|An$A(?DaZ@xXl^oF9@ z&G&eB-*My#3^I;M1maS-nunh^ zgN)AylN+?<(u(IUX{$_s{}y1A-hD%>t>#gyc{!OkF(frmYpy zL^5uBqewQ+5v(iAyqE+hFr0Wa-z(R$!2_f3tMA0>u-=7+9H4NriF!-2xZbP3A%)XS zE<#-`j)8n2_bQgLM+{OWMvuBMIn80`W++JR0tAdDVOkbh?{~vxIa|x+8ePKBVWL>+ zO-Dla^c={vj%2&PFZwtb-brw838>Nl zTZW&9G63@}k%?ttZ`m1~J~VPtdV+!5aq?R z#pc)lwoWwkSm=;M9FOn~16)Tl16NB7XO!j7hd864(ZwDG_cl~Q{x1;`awaJe)Vct~ zPZYnmewEl41&wu$N_Hx8bw&~!tjx|`+H*3q(E>@bTQY#a7(x=6W#DiN_s_#hE+v_N zNA|3vJSVIbjUNCHzhM4fW^|84k0=XE2~Ho~i$tE4xJIow+`j?=hZwZEt;hXVHp;?w zM~v^t`3C_p0Bp79K79~VxTo=)D|J-4tZ#vR;@L7JeQHp%i!x%F6~d+6&(owmUO>Wf z8n|FE>q;Fse&o>uv99~Df@EU&bvF2tQxLRI!H9Mnw!~CV5(Mgv5X(aW8*AHb5Fjul zC$3?fxw;D_1Rd|k%Uj2xm`(Ra$mX=s!m3N@!-zV^z_QC~8{hqmfOBD3DPc(OGPQfJ z0qPYCk3!$lzy9W%A+%*d6*JYlZfO|uIVqzs(-wXAR__hR{AN&PcH(>Q>2xfRzqnJ- zFTAx(3kB2|m6--%mdXY-PQ4G&N`ZZ(SZ7gN1V*Fl{)wXtk7X|U2KQoQNZGd)gKIB~ zy4(!nkOXasX#*dKj8Y~y4BiNEvP5z*4dbOil72|OCk#8AwwW2P{|4#qd!&&$3csq% z0ua-c$S$MNKakpTFInGFMp%81Y%P3K;cA6**uv(8yuFUm*@b)70ImY8CYC-QvPZr> z>Z`A<9i;J*S6(CE8R&Mx;^nQ3!fm7G7z$$7Fdp?C5zIgkyq!_#4((ikKVsLR7mZ=O zhvQRk*8NO?5SuXYeA-bXeRBS2tbETkj0a8>c`zC&Y_SJmUak%tHYPtMVpL{O=}38klq9B+{|5Pwn9TaRHK>4?YUrSZLN0gl%c|TQB%FOnhiykecB`mmmwPU$%SK zDPn#Tbx&Ldw_|PrjocMp+9;gI;h@TjfY!|%BR6e~n-DJNW5eJG=Cy32l#I$Qs=V80JGe3u4!m=Jr6*9@xr=HwIbUH6)jv zU9FoO1DnbC%EJ`NG>HxsUggwbD@e#)(TPx|>|5wCMkvF@9o<@~nQNb31rmJDuP)4) zk5bxs$hD3hQo&{igyV8H@Yx1^y?QQC_<0B$F<^SbbT3zDL0~&w55Mm+d-TByuPvCn z;jMal&wdar9;Qb=)P)WxMMu`6?|UioK6sy=vq*ka^1uSjLN)L-=*Q#$2kjD8ck3p& z;KiDNn+&lG)P+Sw+z4_c5@rc8?Wk$r<>+4T?u}KqSfdjUJZNx6$|=MV20j}&EMN@o zF^B+`R>io-7u*ZR)ORS%8mewcmJpRSY-Icm^Yt2Q5$9ucSNCg{?r4%v0i;P!&InYb zJpCw;|A=Y&=1PmKdM4 z7t(CMeCO|Y&xC<876K1bS`@vu*O{wjhJlit{}aH=eevRWE}-}Ae)|P=^VRk67?_xc z(jwG&QOBWlcHe?9#QEg(4D)H}nW%|TneqLJEjoP8r`l9#AK1yDW+vnoGNTV9eE;nE z@Nd;`0TgVAZf_g#3#5u@LsYHMhWX_ZY?6s-m5EX#Hbx&(y5Y?kQ0iF*;KYIg3^O5c zAy;0*{!Vubg(9dKvP*NSw(~XhI12$Cal^e7AsHx#BFB=Lm!_pX-Jpm(ss(&om`YnM zz$UO4_(q<$n*uZ#8~a^tMg>ov)k%jo#B zpXsec8t^}x>VFFAK*%Q0j)y5IkAr+R*9cKL=Mz6QBlk0){pw9FOw>p@wX?#IC}UFf z>WsYB;?$v$;3&d`8I3m{xJ(NfL;hl$$nZUlgMYZ|phdr#+xA%}zW8c56?FHpuj^gf z8f0NOvy$n|D5Q$Ot!13&gaJ~@@lqX=)e0##KLm)n`zeii{yJJuJOVB{k0HoiSR*uANW2-51ck3t3G8-fP!+r=;=?KRgK(3b%ZeDB$Ts zS3Mr!MY^NOU>FE+=Z@-P^Zfz&1joU8htD0UQ#W=-K@Qy2??=LzZQz8UX`MM*Vgrak zTGsculzyr9N^^_b7(fwO>@$hQHYl;75egMJp%0i7rRXh5F#x8WrwIEYVP1~x1)Hf= za2gDt4oA6DN(M?GS6K|W8Q?pv_&QebU8&_~fEXGfgA+e4+0#9_Ilv9M0qBN7jFYxk z6nPb18bEv{$W(-zYf=3%ws5?;NE;td_yELN@_L>V?J$&t;vIv8%~yH?IDwxG-a1lX zZK$7pgt!yMSZx^yOW;XECfHdLtw*4nYa&;4xnfl;LrF}Wlftd##dt|R%xUU3u_~nv{Ig(AkC6@c! ze&P3Qg9YKY*r|eSmnbfh4JzS{U*E>is)BkwDe_Gx7Qm{?sTY268GQ4(>vI~Y`Suc4 z7;87oXC;)m!$>wo*3dy2mhR&~hbPE7(!L!jy7JUnbGQ(-n1IepD24{?*?$XYbxJrF zbgs7>Eh`8@-DbFMA}_&h4XTB7_$IFCWoO>=DLxbe`^ zsTca6qiXuF>!NmUEcsk2E@e~sqM?lMWjZ|d)FF@yfG42lei+IrZq!31N1_mrbs+zY zn!AtOd-aiUt`D*_dyX16@4{nO2y^|?eRruvG5lenj2ff3+fN6p-s za2*1gZaB8zbH?xKwvF{{!YC|Zt=-tRD;GHlbYl|6D{xioDuJzraE|pOUIdy_Y+Q4L z#`8yaZ1T`rbgvrk%_40(^r8ulPN{l23p?5m%__K{z~9xI?k<2CE|lDui)sjm5sn#C zP^yL)G4DWA#X(RCK6Ohe`k_B`HK<^GB2g8M`sY*zp=+bVNP81qTQQf@ccP%x)6t7V zrr~Nk;ZMT`h#=};Rz7V_)5$l6UJ~N?)0=@@C~KRH9lWun!%x$SX=O-yvEV0)m|Om3 z^>Lm9W?u7=SNt9Bi=qLd4=CiuQ`$%hXDQ~09mqGFEd68CdCr)Aj_$&ffuL~pt*#kjAUzKO~u0d)ERNK?| zMg?hQa@>r2+D($AbnL%y{Hj>`%BQ_1ZD4&HZ%(iUKO8c;jk2e^RVxQu^*DA7JMV{? zqFgRoS3uL11Ryibyh0pq-jkET4 zH8CFF+|^xOanAnj*6p9qZY!MUy>+hj3743#Y|DA<(f3sQIeQ1h{ws{#`y$W9bUpI# z+G3KEkQ8wtP}TFQtOI=L;(ViMD4DS`GLtWO2uy{0;O$m+ltSGTx^dPg^ zX-O+-A$%ZnS{u3Sh}=NJG;xiY3fSz?zr5f=w7S4 zT~0l<k4)?I7hQ^82VH>2j8jfl z(QT`injcwUp;s1{n6NpeV8(+5uBk_rpjH97N5M+b^Ssh z_02M+K={NbHl0D+WK;Q2$P^t#=gX%iGv1-&-F_9GchS!e=#`wVyJ3-$Mr6F6@Zl6- z$L(X$Q>W}1J40)#e2l}CQsgCUH@?d7x7FXp8yK2OBCWd{y*63P(qqo8l}RDWZmYtg zZt+J9mJoC{#zmakUsD|%a1+{PSD$K_h;=Pe-;m+(J@1DEsZ}zgn}RlzyiyP1vE})@{We4F-lfZCRV9B)Ec~#(TUj=nwHVqF>3g%`CYkKwe#_KT{6nM8^?AeyQY zd+V%0D=Xm^*me4=WIs+uUXFUZE>fbXjo(ZCAW@-a!~v(dwj;hK>TrGg-Q#;Exm<(` zy(ERjounLzrZ=gv8oLUut(w0%!7b}!|F}0-)Y2~?)kG`1zn_^Jz){16&3K~Ct$g@B zFdDip(+90GXf9?p#%~ZPj0eZcF`kDxmBSP5?{YQxWAJ%f;N}u<<)R$j97QC<#-g$n zuabpnvP(#^Fd22BihqrM#INR$uSHx3aI#i9Q#Tvitk@97_*MRN=4x^6T4+$xLIHQim?{pC;qM^N)D>uZx7_=hJ1*2{mK>e9V7(miv_ zR~gdPn2r}Y;1?(ud8g|(7CBJ`CY5k^<`N<8x>W29ZvB`c<%F z>uE4qiz?T%Dwt8b3%e9MNd}TV8xCC<>8`T&q7N+r5%vAr(8a?n@JVM}ecB*Lcs>w! zq~ucM49Zj3Tj1=4)R8-``;5wv>ARKW3?7jfjGtk&i9s_n+2e{VX_k|rwux6uYex$b zsi$tt5A*x#J2H5|tGRVtjxf;^P<9~biS0`-Jf&YZX{VpycGeCk_&{+A3%`Rz zBzJ*?O#edS6S{a=P1A-%T-m~Cuo z=ge{^C~`hzci9N;%?$Adu`c=~gL(XyUc*nrVm&%fIc*@39Mh_Eu6(tPX#Usn$Wn)6 zJQg8gv&Mw$|8>0ZMfvBpWD9Qi+URwTZ)sHkKCfP~ zwqX>5CM8NJ3eRiR4B5>scZ!65`P9J(Ra=3fv=|b=$T~j?o_Q=F1?n_(F*ACbsc}+N zPH+bNwIcPDH+um7kG1h5E%nM)No|m%o5$R;E^-6!Ld_J!#X;`{wp%U$6Tl`G;*OV% zKJ}d-s#Pkj&(nwIf;&&f#y?fbExezi@A} z(lTUA(Re7rE!@J|N?U&gaQQ5Wy=e)rq2~vakg=pSlv9U7ior{8R{)z$_QP$D2uULf zZyvm!5Ekdra>@xk9oLFjoBN5_9$7q1l{I!=D{_Xi{sJK2Nk^A9*D7yhFF_-c^AR#K zo7^PhFNRY|OG6Wr!m!+lAOVya8`P)MDTprri)SzsX~KbRCGH`Fh#nuGXPdqOqI~3~ zf59EVhJr+ruAxrT1J99TeiQ1Ra)6a~x-0L6wp(M)*lxWk7$)&$ltLS|hx}^pBPwk3 zYS4a3Z+yh5J1RKj5T|O{^y>@CA;MXe8-WA)CA+KdiAInVC;Epf!aO>C#eo}?Fr>Bf?CvUz zbJl%58^a`mt#kU5q~KwHX7eI>lIc=fRA*^0a!+74$nb{$1o!(y!>qGD;GIAYg_w|F zuZiaboG@AUwrV6)r9!gcp-2kcS;@**FI!bMUs?|LElRktT!Ho@XGDTeo4frHfz5-a z>652?@?lqp#X1S7<=`c!h@KCboV;^BLW)nd#pSCZ*rbnydMJ=rhCc z!4bhH9ivQTgB%d!w-E4uZ!b#;@#LLTyK1V{y-vZ)AN8EZDz>=c28E;T)Ox=|eup?6 z(DwXiM_&Y_nb_|FEWMlIS9>M%=J&D6di&BTVUmy1r>jvVB|j}SZ_t_~YaU<-ed61Avp&pJPAKP@r4ek#dy zrL~PV**4suTnZ1D-V8eY%Ihwz+#uM>{STPel8=qT8`AnDbK8dEzu8jrePIh7W^vI> zZjLluRGXvXAybugg73*6!v&gTVJjrHENMEo@q+?}U*yvJE+`>sS3qGCB!5LkN?#iv zfQ!&jU!3gk)1d%K;I$_SedP^Zo211mNr|1H6nJ^pL{lhSB=y+uw4r;#0w-I~J05V6 z{7>QF*9GZi&!rX|N$M!g8qTHWLz!o~G=a&>bq-gQdcIfz(p|1?76)oOQym(dz8sfi zfX))3e795cn=BGOBTGrGJHCxWr++J z#WoNE+`}UnNUOw5hL=D$*ao0)4*?7LB7OKtsC=Bb&HcKCtJ0y*z~QNj%=T zaIJFOAcL{iXpZt0Aa8p6epC}3{b_PVov&bg&31e0C#arGbx=OBL~Wtl1r3~k@a~lk zDDm`DVt;|0Wof7s!inS!5ZX=K$;ziZl7)m~-^7J6pWzD#gGAn?h*yvYI|a%l)6G=D zKyX9*flR6AD9t+M*GGMm3dM}WAsWZGYNJY%G>sJ@cA-(edXzrM{XRygW@LXLbchh1 zFps(=EXrHiuN^%NImJK7%>qj&GHYiY>Oqh5e&u-_R0;*MnPgsHkVL)^TAX!I=4tem z!P^4l=>!EQFHwXf%WWElFywR>pZI#Ye%L>!U;}J`;k)Agf^6v%P#n$lyc0z>Genh6 zdt>U@s9{AC4l_jJrFsqa;D_PeV~Je2o?0=NIucd?tbL`l5Uw$r!lRs+!@K4G1#v`x zuoM~_Q74ssq7Z}X!3;*e6#JJtMP>i(Tr|3ebq*4pHT32z_lb4V%}H%-x*Z4v*ApliuXo^fktvryq8AP-InlU80xgjp=NI^Hl9 zvY2?h6?6!-5Mf=e{=`I2t_FR`A2yG%oM#ml|8LDgj+u2K z7}YFqmXu}tor8j1N-b;rh^*k@g*sHXIP^iqSFI(jc?g*7YV|=w*#8kjSUft=(fKdY z5;dfc5_9K}2*rM8%bR@xS{c-d&d&(QTWTVo-aQAbLq_tg^em~LBrgB63SX3%vu2+>Tm@2KeYsn3e6h=n9 zMDH>vo7w60IO0WTr$f%Qum1|fN^mE;S@)kt!SHOV$LSG%Bup*|$9;tc2My<2A$Ud^1y#z_;d{Mg(P?x#5p)(~y!{L&0lZn%)a)vV+rmc2 z{C+{Sm%-C@hWU?UfY`k75APFH*IdMhw^2k29xLCUD`Z}{Zfu^j~hsK2fy`{g*Tgx6I8*)LI2Aay+6%Vk}m`x=9QKH2(OF&ZYt z6Do(Lkuz!iu25J2u+4R!N45WukDF=OlT57qx*Ihk$Ox4udQoBOIcLuepIsn}>tNxh zXJ3ePauii3OC>QGIV@$Ysb(baHoO)d#WY?^X7>@hL#`gX6>jqFVg*u+UNdboj_>_x!(Cu=qIcPu9137ZcHfS(o!2(Z% z?*`bZ=B>@+(s)@=2^fwf83={<5UP=8Ae>d$sO@f}Qmy@%CLIr9MLu*RYz!I(XGpXM zYu+@Xpy+F*-k%63#0@qV3?!FH#EU(z==J@h;-E=CguH*VP7~Cp;jLApuMls)OFD=I ze84b%V&lp2y1dK~KL+sl$tojr<=5iO4NXx|Ed~LK9BieoRCPm-z z)z>D^r;Yw%csCLO*61MAi{yU^wM{7k85Sx-guNeqS_D!Oc%yRDn_QlAp2>xzZ(Vh5 zPfu6szr>3IA}@jGdj*KADB&4!vNw7^iXhMnb!D`HQ>cL<6I%aqL=RA6I|vnuM9RqT zoz2pM^KWuZN>PV?5rkyCoivRn$rzpH0|oc+&in@4z%U89+L-9&SFT#ym^jP$DGVF*(;Vga*j+1M(u^9>od`Pmy)kuV@SC9=Do1JUWH4QgDM!uG{5 zlq}}){aDamKlTD|n@h>fB#MQlicwI7|9;oAI&)BCfg0}=?)Sj*<^~wj?V{KonLd4x zY45Yib3tCa40oFVoHgh1E~SmYC?skNa-8B4R>A+zFi^IbDn|;8p`9GF*gzgxE``i5 zWe^f~@m{JJLM!p=KhV{1M{RK_<Bn@4kMlQ^~I?i&}$}e@L7@X#a~R z5)$rv=jLL@(Ycic#pm)P0xDO7S@J<@gD)s5?%_S=Q*MHg_7Y7z=?xwRu(CQuLsT>Y zx(M*rKqVal5AMD%hTT|js*1u@Lcp}nWp)Gi&Eoi_PDWtF)4P%%GIHyrsO(4iVrDhnP#eVjeEeKRxk>fp<51{R=2@!s zCql;lBr(C*4{KIWk~l>VH7fH=*qw{u{6B++GTh`!FRjT$9tN+B{)*@|lp&n zrVHcC#dj@A$kJS9KBW&1GhR1C-WPbQp(_W=c_&HO_l;;(Qd+Nar+}vNyuF@pDQ=t8 z)RzpDI`ZGf8-kpscYP|MJ^U~Qf$K7Z+b`((A2}|%FRunbx>jS@TWW^ zLrzjhbeKe>x4BexkE!t>v%e@TyP51CB_)9`#L$x62<(Y88gsgW8%O($t9l6$gAC6a z@XJhA@k(6s=n!hVPFK>$!~SSi0+ivk*%T|(qO2V%V^@L4IB=o5dApSo7K!lZPeQnm zL)w)p`7YxPL6}7Ch5-5X^nuZUS75myy^T!~?&4-4y)|rU?QU@#-_uR9~+-@bx zr@(@ko2P8^>Nb|iNr09gn4C}aDD!BDLKf;)OY?}5NUMpvWhK!W18m5H;|7bi8;B1` zZ-BIkp7aiCw)U;hdS?5{9fND((h-4l&+4iZ69Gr16D?Ps8#JIk2?hPx<*6x zPI_r$o*rWHQx_Ib@UETJ7qAiy^|^7i-)8fmQGHQ(9Fn86TP8u;RA_Z5-pO{vnP&zO zVGL_vNNX6g64i;fl-Z=fl!h)_ELE92`!;q>AWx1rWDKd;KV#70w35QuhaagVAME@u z5!R%Z-oBBY(f>M^&gjd7T}Swp1bYC?GXkFeua$InDN_KVv+CRj2i^*#Wf$@Adel9;<9dG4@OX5xL;WuVkOkSp z!t7cKG*vN-ZH9`xLyCqpET`Q1m=F2J-g&m3-Zh8l=cEl0Qlysvo$4`YXTC0po{z>d zxHGh!1zDrUFzdIcVb5x-czN;Qs}i(L0`@jO>cURI{H4YjJaX=$KaR# zA()0fxyRyy)h91IW7;3=YWZB08}zWOZEU|u?Qqs0+sM+K9<7oagdUsyfH_{$+@|$) zn$b(fy7uruQ*Y1Uy*i9Ye8E;UuFzmMo@?_q^y5M3`hj$ni@3pqwZ$M~d6HnvGlFg* z7>j5PuZ!u4Ndk*I^L!=kNIq)!QJuUvQLD36A$7yU>rY2fBj0l{5H19QBqeo9^*NDt2Sw2E26KyY+sE4&K*-;W?G%K9miwr{JABkLMKBv zxVtpO{>L{kphH=5OoM3DO_!prlm94!p~vA1!BxNdAAo~`KcNx0kkQnV z4qXQaK9?*wC9!{mK1t!lE1peonf>|@s9uY6{~_=3oO~Q2OxKYSdm5fim5&X9Q+e4nbA{T6O|K z-Onh5U@p=xUy@O(!XY+P7u1Nx4#6Ufa)TtF+yw8R<*+O6TjJ)4wY}6vnt0u`-S#<@ zT)2mHHOZfk4fRlPz`AO~fyC{-Jm~XI?~~*y__GJSl5S);%wS%dd`xRg!>Gp}$IScM z^{msyGqo1N#vAypI~$V*#Ywt959C5eqPBA@9mXKbOB?W#Pm1z7NgnAk6@-i5P{fpr zMOQPU+N#=ExYp)Fg}Bz_?(}{p3s)`9SlW{WuXd_ud@cOW`AedqG5NN_Ux}1BFXx?t7fWboS*;G_FQZGu#-zpC;X`71!_yRRV+sJksCp7H{pwNVD_TYXL zLB@sM1%M3^9?zPxR#h+RjBcCBfD``=c=bBluq>V|VF?~L;P*S>TXEB~W>ynB;^4Z* z_gITbb)is6yCUxo?@#Ybev&j%zS?#2eRZNmNjCwRf-`?*KC&@7S&Cd@s67PXB;Us_ zpyzF2MFI5{eA*|mxM7<6s;q)qRgmX6!vnnuc6L=iMww_&iYaFPWss)yWjsm99NQ>G zS*lfT+ij?6-$Nt`?1#<{Dqb{0^F6@13)B+pOF3I`p|w0Y~ti4#{aV4yzLn+8djAQpX87b?>{Z8n&rA8JyH zuZMispF;XVccr_9J0~m<+{KoFdI2s_qj?EA;w(C}AuHzDirUcpCHfYk6U+^5f#%xc z9KKKpk!V749gp9MKFUK@J6$)%3B^mXK^|R&L^^=A@hl6`Q*eo3R7S*Dn*rCE|HQj^ ztB;}W!DB4_5*TIiA}n59Z{rWC`gD5Igi9m4*-5xjLgMc#$m7A)>H8C0CBYG(p&1(0 z(NF;y&p@I;sDC3j92v%n-Zxw=PrU)KPX^e-bXPc4vI+3%1jFKIVy22e1QwkrE3B1g zEJ9?U9l*GAHSHrNIJ|*$8H6+H69n|t_7Xbl0vUrjOJK+~ya~EsT^%K?_mC3zKS!T< zAt_8KQ@j_SD6&@b^Iy5*FY+;0+4pkC&hB*Ud0^}6IOF1jhn-a$eq)?HJZ0s|Wx}%w zuh-b0i0o6Nc7*&fV~=-;tChv!M-S3}pTA`3+=PPAltoKkE!urJH>JLOxxv!eYbuSL zRyMv$I(a{JcyR2XC}Cfg=N+9YQPflZ%aMN^WrvF+ZCIV6+US9yTR={0&Z%o1`!a2z zStbWp!{l_S-|4R6$I+MJ*<9*|j~TY#;vlx=lWapjH%+*gmLr?ll$&zZn{!Ov{*nD_W~ z*y6y`(IDT?=k7=ryprpnjy{3G<8$Mmy{B3a@5?-l3t?r_=|HxVHu}x17k0Ob>|Jcv z@u%wjcz7l-K$%hj-zgp_e)T=vi~nkWvz-iyv=A=5ZA_8zIR(^nhYRGUq z&#m!j+D%Y!;DwAZFZ#dM!wtCH7rV(*=BZQ-FLQea$0H>C+Dj7k&oc7$-ZreafU7_VD(3eV$M8qQ ze^_9W-Wby&Fw=ADeCYO=ION4Q5`0Bbyj+lklX1jaeoXx5sqi?LW>X2J0vTbe(=!Ym zM*=7a=6aU!I>3Bo^_f7n-dIhh;R`->QssA9tr z>v1Ym9(J1M>+i%HYl*d4MF?W?7E@m80`xz!$#Z+qoGzN82e(!+5;yq~Al&zq!t43X zFTC+*;vI!gA;*wr_dRW3zJ~AlagoA*CF|~ra>kzY<`{i=5|+J}uoW=8l@|ryEAqsR z#$Wj>05zq_(VF_)9E%?dsQ<-u{=(7P-y(-n|J*GU_C@MkZ)*RSj-?&v6{7NaSMSWh z@5)U}2|1hyWc(3KsTlfxim457{=*A{bEX-=!=f1FoiuH~TSc{kNZ|h9Kg%bMc9)d0 zJUt*^K~@TI4y+G`zYj!8U~IGE2SY)EESq=k9U=~+mS+iv-|Z!zELLfT2^nT>CjyO^ zJI*Gb#y7}tbN1v$wZ%byDWBA=9{RJnT*rzG=h}=SIp1;bfDjPz&)+o~hrVYc2Y7B5 zP=Na+>h1>TYzEW5ink9w{c=@R7(8J{@gAG2_d5`RtXkpIuBB_AXy%CxP51`zdoqh{ z9o0ChCk8Z{6@U`N#(Goj=2_G}L7sTG$uI>i*U z5mye+rk?P)AJw@7$i*x|#;*TnMO>?9CI8N`~ZtuQxdE#;VLHJ&2WwX`ccW`eH9COv=-j4J6Pq+gHhN%BCFi}Y5 z!rQnQ-7{8DD#VRL(0y3k(Cc_R_g$|NJVYkDC`LP6OJ6$;iC|Mow^MMrfT0NRC1504 z+qYf2Rhyy(b}{FtS0^4v#&uI?f|3!hD`kg|gZPz$J0hdt_iPV*9Zi4LVZjg(>H`#p z)*%$0X&~oCbvLR_9_fCSeZ&6q*dkG#$8vbScQ!5Av#pIQyf07qDY*`f|9o_(`182K z^H|p)4hb1UiZg9$1YVOX5?&2-4LjyVSLYaN1B@?XFs42Qfe^&~g&Ehu#0Z<_EGNPI z|BtUXkB55uAIC>3bz8Jjgx0GhN=n(gB}t`3%HAT0NOohZZmUWWvb&aSSwdN7C`q;% zTWRd648mZB!7%fCp4W`-+|T#@`29QQoacF-=f0dduYXq_oT{Ns-$e{end5Dj8WBC% z3Q-e}9>T%cz=z)w+t~tRi0hR&@6AhTS^*j3i$N>1SM`jv9}p>NP}&3IT%DF$gbb_x z{)hJA{jPH3gNtDVIp4)~71L^#j`CA_s-ST;va9R0_k!Ie2LC3N=eA?SYeS-V4RWUE zOK=j&Trtht^&7T)Fx#B5-kP!_&~tecqSZ&Pamg?n5gRd^Iw?EECL zM3fM$?c0A2obUD>pT4V<$rgT4+744>%A|UcrbK=M@61wjf}@3bd%HG|FY<~&`|D5N zG)Mba)?BLp*g>9lB}Z-6F+O^Jd5N{_2DREeb!3{UuDNl8zj3;V0^N z0({bteO(?bfpyBCZuV+~VCf>?UEvux?UI2E)CNH7HF4j@Dhz2rE1TT+k(*t z!FS~MIw%dcjGwi54*Mjl`hG%+o3rA4^szA?Vb0LG=bKX~^Uh`0ooE~*LWu`=auGWV z+bi+bz*y%kILUTXt@Lc%=ooz>0)i5xjYW($ZYOkz?9jv>uI8*>ZzPs&HU@6*Jrup4^J=a{fJiU=? z^Fb62J8oN#sQh&bUtgxmmL|i4biutDXCw*lmEhhAPOP#V+xS#3GPjj69n?tut`*lK3A_cKXYWK;<5XJ5f6C7TRB-4{Y7&4|&z^ zFd;Wn&$@o4H#Bl_enHnCpv{w@}Hd}x)4#NN~R_-%kTrI&jZlY z8nkGG7e{b7*{DVHkOC&MGa6WGd80opROx}6ccjIDz8vn{3^ObXLL1~(BkDaj1(#2A zV~0lLbpk`0L|dKz|d1&2+d%zs5ABQAaG?* zGT}h<^jj#2fHj>fCyDTCdiRacJMy?=iH?3PtNBbGeO1gf8s01?g$>^UoD)1nXI$J3 zokR4zU}()o(Paqbt3Qc^ULk^XU_!X_&QC!SNR|!=!-Ru98~*}pa6;maM{x=>a$qFm zNT5uIS-Ps{9X(eBV0q|r1fc(_tC80~2!7R>51oJXe7B%KKqTArLmyioHO7n+^6*M` zI~-_`{>_776gtqW`d%9D>EIr{@L!0I=F;5JuAW$;@&!pe=59+D7DU3|_+lGh(A2a> zQ#*3#79CPL`Z}zB;uFN(>_&?tF+0o=cW$Gcv0DH!CVNA2DiFP0h=SdcXy|UF>OC9!|ixrZWVE7@D}RiB?SB7^)L+f#UjST ziD&5>*$GUT5$8)+)fIs_vO^lBSqArYAbLoJQ2as3b42cU| zD=`eV@Diww13C?Y%qWMmU$aTlC`T}e^k0g0mnDBx^uCWU@PUA}T_(_I(iyCbU-H^7vp z!G`AYdkD!hR^#ao9?xNmrWZ@co81#2UX@;traZ0Y!iYv=_lN$-neb&b0oVP+oCG!^ z-n?6w-RlC1tiNP?x5GU8Nakb$8V+|_&K>@vCmu9;g4JH3w;;SFI6Q$`4y-5NEbfUAfUXs z8T`Knz2m69R#kV2a87Ti*DbICnt}!Eo`E)$4I^m_?(@!B)MulPN*l5Nm_9)|a9;7r zfEMQw(`;79tG&2TI-C`4FHPU%(sLk_<9{ec_XL-)_ z6+-==w)YnxX|iVD>%i+6L*UHr{PAriqR-jAq1!PaCC7{2s=W=?wqOkDHjFHyPYmr0 zXi-OTtlw&vjfkzOv+XD%M5&s>lXPvvOey?o7FsKa!Nxa-e``-SBk$ zH^cgK>WF-PhE5c0dH=%fiFrs6y=JX*C0e@p??s}Bf(Ah#!D1a|yS1EC^bqANV@(S& zizSgb zJ)Dyn2ks6FaxSSxyAX4ry6s46BbOpIf z7<7w9E$SUObgCt*OtpVsIS8EJGpAjfkY;*f#UTq<`y;7`D42nfx=VT6%1D%Xlzz=mzz}mW(AO))%Kc+R_8|z4P+po9zar|tFEb1f7(M-vQ*Q0rG zv~2r6Y|iMtYW*nTCa9W+S37t(>OLz(xCW;%L^vVIPatK2{g#;*E{3ars6=MK;MO7u zg!J_R+JmUhUV^QLW5*F=9aKN)In`=|O?l|gouV4#5Wy<%V2vAEKS{7!N-mKQsSJvW z11Oq5^V`s|1f?4~{UtAr#O!n1yu;C*U0-|7^JOE7Jd-zzs-ig*S51FsW}A^3Uo9^WK>By~F{Jel z@SoJjlX)cC;+}Y&B@6Hg!m61&TE0S5g1f}T8$6o`4diUVa@$8xl&UYOIU+bRcD zZ~&iWSFGUezFp5%B`4uwaCviXQD{{EDx_&*6+humxHyS5sRviuPO*X@e3Yptt`Fdp zzC*T9F=P=`4Fr^T2GXLm6tBq_8uZ&Q>Y+wcbCGC?)oyu)Ee=kxXH*lIOsS~z`js-> zI;J>vz4+&6c1Rw$7(rCAHDO2%1MRCpO4cC z>9QX2f@rX7s~i;1;RN|}&#eIdK29_-h6=;}J1~Zl4es{R`1-`MIK1YpaJ z6fS^X(7Oq8lv_g;x6ojNNSC!(E(F`!1{6I#LG6HugR39>j(g=-4Mhh5<&&L-ueKV-OtMEb;v~F1iKr!8=QKv<$T(G zPNPTie77>xw%CUZAa4Gr#2`e}qD(Bf*||ROQFAcJy9Tt3 z_7@d=j>3nCB4vo3YkCI5=;b-E1{L_oM41Cp5&bW%@$i2r9Pa4*JHd#!SK=sUBjDU@ zAN?+jIc$P)NI3E_dvN?SSkWINZ%77@vw1?>p$QZGR@}IWkwR>+?nC&Qkc1iEOtJ?o^f08^P0CZ#?w;XQbFX1jc8Q+Drj)&;|41Rw zf2xqqF1gt00lf)=6@b8Pp(^MiF}xm=V(;m?-CtuU^0Qyd%1a}c9Z)$-Q!Bp?!?Vo- z%Fxf*CA;k83(runY8l}a0wXu38UbuFb@@zV=tK6Au0(xf#$`IoY~s$ z$T(VQ@N^NBIR%tUAM8M}gWf*8OWZA0;_jL_-Qrzn!s;H#tr2cF#^Zi%=9b8cw_zhx z?nst1lx0CyB+PiCONV5&d~!SdOO$&T0HS}tMbHg^T}Eqa+@imz+#~*ywfCBpc?_a!j!PILiyVIg}aFdX~R6m%R;KYy5@jPfVX^w#F8I3 z^7Ga)MD3lXsDm~hXA~E3$4JZC;{rlftY%9XhU}qEg8z@a0WEne=yCZSM7;?;#1hT2 z0@)zs;2xdWDWz6s&d_%;+8$v34a+brpDltfcLERKDqM+@y@tXM!#S+rXVZe{&==dkH2y0^2`+OFy^d>N_RNvpMPO1Ps*K-F77aA+;m=F6Hof^&x1YDGH5*HLt;3h zNUYc8oF8F?oT1CqnWMTx3vzl_V0i_uy88kbz=?NW(^v5IMorC0IlT{}*JG<|e{xqt z!en7zU)0)OePZkf8p+xy_Z8#v>WL2X4-Q$PGk?z(zHn*Z;UR`?omax^9fUaERL>fDEB9K49bBDZ9sCA(I534J2qS24GM>(hwF7Y7SG!U(B; zHD7eb8dbYGWzoQ<^Sp(jVuM;7tj<+(3Jo0o$lFr`PMfYeb-{%^*_&CG7MC;qClb~* z+XUAjann=-am#!7V{o-fr|^7_>`liT-}u}{5FSPH_Uw?!6`jEfwhqW?`n~3nqsiiF zxqNR_l!nY;m^rV|g^Key%U6pnG4|B%Y>dL2(x#{NC+|}0EzGjx=?h9WAmATKT=eSJ zVckdxZaJWI*BUI_5(rO%k|SqFP0+RyB>K3c<-F;~P#$!##h?9nr@v1nR`K&|;Nhd# zoQw)P~U6H{?WbCD67`o!b5eR@y?RL5vVJT_LKX0MXd*j z3Mbd{)=MTsIPUg^SWR?-pK)Tmvy_g=x}jDpx0)4%wu}wrp&NMwGOpYYgkFmmRe|*B z4`^MoESF70Bhqm|rf`(4A*L&1pO(cN4z%~~a%c|z(-ReYM%bxGQi>|W-yGX`KD z4?wkJlR3l0y3mO{vJ%Nc>|WlsvdzxKL5}IvTMl&{GMBODvjg{h1yKO+*P<}HM+N03 z5z~Q241~xm=Eo2@2szB{6)HiuWzStn>hsjV{EE| z2*k;AJbFE$CVNwLl_PGevJafCQR~!0H6*{Iyq$+N?=hn)XvW{x5;SV!pTum0L0m9T zf4Z*tvq=6E)oB`O@osr2>X$~O(X`?*E5AZvJWBozR$-sHgmz7y%Oi?+b-Npp5vcMW zT2PpE^K0PIQ_*B6r{~^XEe2^rOsmj<7A9B>-g#^HfQYwQ0@U>N0i7BJPQUtmP|}Zk z9>`Olu$TU%MR;moz{l%%eK)=6WN$7(8{>{v@MK!GtksS9V?6gEse0y5G_rLyPdA+y z%qS+Q&h7aRS&cPty9O-!R4tlu@(-TLxqP?@8IPRh%$~unr-g$<%+*2i+Hcef$`(iTu*6RkF1zUjEEPB!2ilY z+H?`cy7YFT_n-cIJ^zB8acB30!c9sDJ^%1>kndJvkcct+IRUMx8X1kkV^r;mz^r=l z-j{s`Z>dtgwONc>^s$Ff!i-5hZhQAFo`ZycX&|RnW8rEMLyD93yoGJCH`Er}Vl)iu zk}Yn;QC@JUs)L4Q{j2w2M!o=*HCZH~hMVPt-g|$3aZklouL!-0t-g^(^Sa_~3HOE? z)y|`l$mi9NS3xi`QHuhh{-|p)jzr;fadctKvjNT6w?WhfTMIFT+y75Yp$_#Z5|RGQ zHH*{y16_}3L|iGoov+D_grHe>kyaLw!#JjgX)^PBH#fpE)*g@YZ8@ht6c_QbFv?%; z8QQh2I*}VT{|8Xn#9WoqK~0rkpe|7)Q``+sTwYKL!IP3|KI3qai}*nxbNcW zc7~lEa-y2I3pQiR7VE*2H7_b+ZrB^W#5(&PH<0LwRn6mWdZhDB&W}CNl{_yTUFiEE5v~|7h zpo#;@oZ%Xt!9;a?T+?%1?r0V2#lEH$Kl65Z+Z#zkjt`f-Arx+dfN1{wMN@HDJt7@d z@py1N>xg;xacp?4C~r6nuBFuyoyJ-}!o1CU z-h?L(%6idPI}1YUXT=p=SHa1AnunzsU0-jhdb-exC*`d(&eRE^?tQxnQrVNc0b=P(vDS$@NKUki!Z{QP= zPTO~JPuJ3M&f(iAimpcMkCLpg^|4Gs{tg-iuAR?+WF= zYHl;Inyq>{$ODYhHTkg^)89CE66qYr%c-}xg;SzlsG419?DrP zKbaoF#;S5?rnSA}koWZ8LE^V&W9UgF*s)c6XX@Wt^hPc8?K3qv*wV?lr&T-&6L1H+ z=Nv`Zj=^}59c^6}&GfjeY&Ww;E+J_@l2Y9KnxEW~Pux!3zgVQt!`y3rNr;oBxB_SF zoWU153!EKzSFQGAxzPL%yi(CaHj%zwkNtk_*7i(6h;D`9o)%&h?p0v*pNN+y=j|>Z zx9B6VI0Mr`PgoA|7UIwa-?szJIrB~n+kI;h+_LhRmLjS5UE-B^Q3(`x=F>dx_zo5+ zF*p}V?^4Vuuf7id0zvh=WO!MQnZYTbpD;d!%74#Z_8BK3hgYhQ50wzeKCK!%-6VTP zH1_{WFg$ZeiV~S`j9AQ&6R^|I#~4(hEVlz zh+uI|2-%ZToqV{94WPfjMR$zTRVQ~_M<}*IN$lZco2g|e|be)lmMBWSJ>(Zw+3M3@2B zM9yK>P)go(t6CB%M3w<$|J@xd=1S|Q2|~`z$CjJ*KS!LCA!~8l z5r42qTcQ$f|F0%V*CD9z+?Hjpq&`VVgo|_9D94SAMi^`<=)y3laJtkvX%w};fn!Z0 z#mjE{bvvN*+#1(q%a_e7AH2Wu;gdy<*IWjMQu`%K-B&(7`e@gTl>EK#`|?sf*~uCa zyKkiRFTH-E;>CV>u{{?rn1^0z>ptAJqV4h4{F|}a$**?rEUPhLl6J<%E#2MTn8%v* zB2Pv#)ubQX#HaOtp-(H&hj-rVZQks{UaSX~uHfo%Zf|x0JZD;%aL-3?pt#9{S}L%( zo^~WPchCk3tuR5vaIY)sNHdBC_tU1$$zolaWG#oLOR zjjAv#r0kym;cW_@zjM`%K~LM@6U$C4A_9TL(65vmC*8UKZ~6#x3V{T2DdL8 zdr2NQfJOj}9}GG!4%j7T9WA8jM!GFs{Op=zltphJZ}G;6J=o$Ou=q+aW%b~Y);&B_ zQDJSuyxPM{aPxZ`8sz)Uu3ynlqA><=cc(L*OJs=7QzOwWXwqhzciB3K$ho-@y(cvG zX5?hL+vEHX`q15@N*Wr`SCN5=NA_AHI)~VQccGTo&Wt*d7h67~L>t&toQ9VvVTJ_5 zt_D$PM=hWzD?kg2-0@`i5cana9ibiK3J6Et?bIki-J@aNo3=GddlqtWydAh?EjnIe zV^=X+YVmllh# zwa%K9E9it`Y#?2h-a&>+w=!o@i5RxjrX;5lEmdsWGR9aG1rum-3NdDCDlYdemSM{o zSvdvRjN<*Yb(R{z6zk?QlR7>+*vT5osy_aKL}2){+(Sd1;28p5qRY=zqdv-qXt5ew zpG&5k#J0}>4be6n*JAE3jr=MW+!rwe*8u=Zf_K$rE{x|*ef>RC>=gVu%OSEBjWa0e zW5eA>s`fB8SHEFq$xerib=&DdGu>P$8ZVZtLX5t1En(}K!-neLiSzd@ z@LfTuvVXBPM}z(gF7E>@Nd@t(h>(knnyOFSPaW7jWaD@HDqcTPqU0|wEt%Pl7%g`m z51DjA6!WVZc<9QEE1Q9iBtn-!QAFoap4ei@zT2ZrY$Ytt>heuw8Gg6&47Y&D0wyVb zy1NjOPg8aDP$>4l(S$A0 zkC&m11i_Bs4&%b8lsEj z8Ip=n*MT8>pOqx$FX-Q4dtAo$Ai8xVQbu%wy{ps~l-|~|QZMp!?O#^%oV(Acoin!2 zcl_zF7%-GLcGk3$ZQAtak{8?wJ&!FT)*MBmEymyrR2k)ZYB@e)Lxdl|kR9;VhY&Lsj_CDgb) z{|mtu5c+Lb9iRJmIK{&ozuvVxx8!uw(8Aa;tyqm}BXa zNW1DLuiPe|i9tUYUb_fTTBu7eo&^>j_-H z{!>ZXs_>)yYwqHZHA{^!>ChS#y-qwm$sn^NzdD&+Y_Tm)M4BRX%>cpH@$q?PcYP zsV$fT>056N4QfH>9TaAyJ@puFQ=Vq86#zpTVo+pU9Vj!1*q`Vs=ZV+F-;wgf_|mgqd^xbrHf7b= z!;5h;tXP(y-nFImM3MvXy+>r?SzZC*ELRJ&dyfSOfMdxsl*cq`DA+hU= z22E9t&Y_y)*4s@|zkp5eK+ooZw~Dvhi;yV)GDIiQIWAJT($cZVqVCw+4x4S3X4j*? zx`&AA-z~jD(_W3>zo~-OxkIiWbu#-gy{NrO}L$n5Vl$N^T@8Vn}NQjT+!>2{nXqV4_;8@G|leunVB zo5J>>o(lFY-Ln+u)NhMyw-Q`Eg$>w;_AW>0*A<5@CaI8#zozE<6^I&AcIbp^?ZKvuAmp#U+j%hg0YOEiqKpXju6>U?0_se;XZdv zg`$X!VMreEcDQlcwNPmVhJfVrC4xYsH_MJUiDL&mdp)n*g}Tn+PfP*^D=!Oxuq%Ik z+5hHJAH@KZ2|m7hss(s_jAllL@DNEbI#kl3_jhC4#$aL67j(Hn^NQG9PoJ ze<(x5eOK|ZuzVBYD|e{!GB)%J8>-U# zKE!Y$eB%y%I*bifBgfcD&NGY0WhK}>uAV;L;f%?Ju6hI%7GiBl9ozezizn@UeooEx zOWY=Mjn@hbMXYT^s6b3epCnEFb80B3J|H_|U-pcYl{a6We#SL+_ z-I4%qCM8ft%2u6jV&;Y`B_8P?Xb;LMU*3VfVGXWAZV?{jXsqIBzjG=lsnXO5S6apx zt2{0q-E|F%MRJp~V}(Fegg<}k>CVbO%E`1{g8OQ5D!6@x(PUcjIgA`4$3+VE`vFy-2F*JFzi@4Ht_|D#sF4~^0 zh^m{HxQGlRI4BIo)#T8Q+gF`ne!-|C)*{;>03HkU#P4?R+vFP3*nBLIf&az!X%u)bsTU#RTiyHxPsxR94IT7)H}ds2NmRglC1=6>e7o0H700X^5tie1}*Sfu7P{j9 z9hDy$kA(lJ(j;+R!v3iPA^BAnRu$Sjl>G#zR=k3Ei%w$+L*LiW`|ZW+a#I;!6jY#c z0viCi7uSUzLG;=etMQoqF4<_^MJC_sjq)-%qKHjhnu$izKc|u?@INb9h=uXQBgjUS zMi%an$#ELwdRP#fothShmXK63>24D~0=OP5m3tU>)?NuSbihQw>S>;9<5a~5!>KKu zJ8-3{sf_`VCL#e@o3L|%+?V3KkLdRIiSFf`P?|Cqz%9MY5Yma#D9gay7!oW{4Do0c zgqfvo>cEqPqphxY|D}rX0c71|SoqE@xYAn`O0xFD3yBik90r&&zju)Vrg_JBtkA%KM4`Ypj1nz6%UO6C2;-;=Tsrg>ZAaQ@o*KP~Rd<6Gkg*YQC)6=cPZ z?1>pmBFf|ZwEC=1IZW9V&GH4%7n%|`v39Uy@28EM!A4hG1C^t)xj_b|TSO_uG|PoD zIon&>{g>upRu+kqr5`b1jI83orm!2Cg19WkAwyR~uRg~2L2mAbDK+N-Qov<@W1=j9 z87ZzU(m1LA)8Rg3N4RAV2X%s72e_3YY>~!Rq~~)7WB#=E-!#C@+>!iiXvTQ4Or%yL zUafcL3Gi?GbxR^vo4}wrhRu9{mr*qhtnw6T_u^fD8?amAvD#KsQ(qya!cD)Ga10Yo zH%qs2{cT@Drg80PY@jUWFsCa#jP%+ya+ZZ512}K6oiXDDg1F%%p8UGZ3jWy}f{b?_ zRKxL$F>vo!xNLBxi)VBc=3wBkep_~H2K<`N4Ck1+O%@B_z6z_bv~eh3T#6+;pa7+D z60zt|eg%OBloILCqzcNN-@u&(84zNjgv)v{_=2VNnL7Q`Yh5wlgv3{*7N;gh&$)nT zwo?Pj5`i+;S|86YUo$1(Y5FqLA5pq=x`mR=(wW&M7AOk;SsCe6}C#LJIJEv8FN$_n7lYMR6=c;`r9 zj6~<2Cmt*9!fwF`zW70MjWvp2Phhn?bmjx%+%untOVOeqtEMj%VWmK1n(6AAZeR~^ z2RT?ymaOFcRsyTxA+R3ev3d+;@xQLu%vC5_;t)!Pfv?Mo6<7l;G8&ckm}vk}Th@#7W-jxd+2$DRQ)xXPd?!|LXkCuk zGVXC`l5rN-uh2D4v)UkbY(;go!H2V306A##DWgh?oE*2wX>=M67O`fl@S{3C9z1!j zmNPBveHSQdw*O3zbn6DbEtvkE<-2NqKbB0w=Ykfn_2P^uOIBKqTf0{Bk>s}Pn~*Jr zEjH|&A-V^=I+i~;<91O6ZmXlN(2ivS3taq&Ny#;dqG ziG`T?Bw{yw`luAzpJsc^UnWtwk2Qf1BlbSFlUwTlYg$6x1c&?NAel)wYT1vFMM939 zH+7UA!I>`d{s?b1k+}5-(2(^E0nd_31>Y0&lJ6Dj;C4QB>@IX{f96_`4gtj0j1^?~ zU`8X9QsMmt7H8HFpFQteIhcURi8L4qM+>Am-3s#I9B<}i4UnTPT_-qza-0tXDF%Lj z{lptGyp&Zs_$bxuC6ppuKlAUha_lY&v3A6$0UgpBh10|O*4bKfU(5n`0nf}d51Bi= znZR#_ildlKR;GLvWt`=m?j{50LzAPgich#0P9}?K321LwhGbydrB`% zY4LBCk}#SS>0FM({fIF!`6*4g$wx_{!K*uf)$e;^=;oc!{kvJ@6Q?rcRdk&zRRZgq z1g1JVDJ0zp-!CyNBB0v#Hld3B{r>7nPU=|?4!Vd z^dEMZJ03ImDK)GHPw-D=pmOpc{Nv%bSRw5h1CrBe*=0<4jI@im7YTmK>=yrkt$5xv zSsmdUV=;9C#LmRWN<oz?WGVh~$S|K8=;<8M zCV~RZaWgS>BfY+j;ss29C1aT?w1$C+nvT!iYFHjIZD9m zeE9)eQ1J3?7729Nl5bGl{b)75vKe~IH;Y`0t72?I;cX8r%$?tRQ)zNMPhBP>N3ReZ z(So)w2_$yQi5MO|7uN}9`VL*>Ojoe?Kh1!Ps(*>_9Kfp;JR~grB;9p_(;<9T%7Etm z`w(CIYr!#>?w}e4qNgCE&bK*&oG@ue9E9uR>#sK}nOpLWmWmg=+9xBI8Zb_aMW5Jg_IHuzn0=@@oS}44NtF z%lMG9RZ90g=37>`2Nbx=K74EA^6hg0H(pBCapcr1ux=k+(CAxf!5 z+3tU@zQtt$u;`}JmmQK6FOrl~IzV{K5JGa!xBtD4j4#=cE!R@LV{Dhg*9^B9x}qxF zYfZ#PAOnWhw;genw#7^DRwHzU#ZT^U|bwlw*!;2ZQA{yB&_+xfly!u3W< zon--L{_w#BSzaCPEXGA1^dJY{U-99z?v)wZ@D~3W>zDwP=W(SB>@%>jcsykMAv9cj zR0_y0VEIaYzPR7yqtR8Z_P)v<{Nx*3^xdax{?&{fXM~UxU>r)@bIQT}D81dQbqv;i zn&Ng-_?F*Pg6PtKK2uEI1Mfd}vGLhMs-%C(T$->?RDIkx- zSUcLyCH@y!RKIH|V&)$`C9m?&BvE}Z9Nxyhq!UHJ-*~(4KeQL$_AnUgRr&VFo;FJ> zU30(1hZ|@pyQQb7sBsKFw2+KMJY&@89QT2A#GH&TNJn~DtPETD)&nNs#I!dx|6r!G zd-xf=8tavC{A?kd@>@dEa&WN8%)%@UCjV*-UffBfu}tY8hBB$yuAzvQ%lyVc&^d*3VmCycD2DOl z7UuXMG>QFssrTg9fXNWNpEAeww86{FEM=YzfwHSHG6LN)?E{h!%2~Ds$qb&Il|tw= z-bN~t5rl688~L|PN{*Wz7261{F?h!eXCAKVKAi`jQ#{ujw1i~oAK^3?FvI;xi|QeQhWcZ z0aO0r&l;>rt(dG~ z_EK)i!z#vD?U+jv`tXM4pk31pNANU;Cf6P{h4;Ede>T0?TnMyWU}#_!vle{XA^sT; zQLg4Po;kD!ak||-Se?wb!5d?4cT%yrbt!WlI;U7OrSt4M@R=y&fI}XDmPBzuk53;w zjJ^Krztua8p_odC8pnqoi)k@+vv7sv11W9EGK=xI+9pV5cu>wX6?N6IV~QO)$TebR zXw0mjBn|rgLkB#AV>(T5yA=Vq7Bsz0IFa-UH6Le(H+af>yE;j*KM~+@=`3C~gb#rJ zuVUSt??7o`<|cTY{%Xg)%!l$(KE;^GbN%AgH$20TQORlx1*z(PnS9LRydyI1++)n& zVim2}{4=vH0?8bn!^vu@LWYUQ3Zydj8MO|D8p!l%pcWz~^t=;(K^>EX6P2$=E4q|1_X4@s#?C&D=&^Yh!*oLwi}v;OFjIm!d`jOnT9f7Ib5#@f9-R zJYvQsRDJn~G)ErTUFaQmf}Ep(RG+&?Q70k%*V_W0l0nJ&xb-JhSiUN!LG1ZyZTlm; zJ2}6GP4R}0NF)c!u$buT5ueN{ZcS-S=`kiY&%lJ(gACh1W#7BOC`{n8qDAcx?XtX0 z235Sh5lF3ksAN-0!&|-yV!5akuGq{79+#CW&G3O1c0P>4O^oFT<_x3jX46*@>vsSKJMfmz}{4&L4nLxx@ zAT%@zs=K}ps#mEK4Sf~-M`@>BxAHmTBsE=^gTwjl{HYYsJh`2Jli1hxBcFQACtgsY zymqq%U9scCaM0e!_MC5HR)O>o-4ymXiCwhI+Q$svn$0gw?-W+8TFpKG`JRT=^>huo%U3-Iq2gP8Sp*HDh^o!C6)!_$X~@lV-X@ z+OjM`d8Q5(w9jB)T0=3tS;Ndh#^+kX=tc4(2q>PLON?bF{U!iB#CZG9PWBh=JK?ztnDD}%U#H_XjTR#Bt0sg#UE z#SEh|RwLxcA@+f1+39X&R){rRpWSdYbs#*yb$=uOE{Z7ZG_azLp)YLLZJ3g9jN;sx z6?tqEuzBJ5K6CWdyuVh>=7u~20Zu>R0QV}SbG$YDd*Faf4ml%zG-%dJViQpKS&*bY zSOEE3Y(@;+uI&5|3i_+Iqc)5kU~m#EasPLJl0}38MIw3^c=cpoInSc4XU<_?6~uBI z*#7g~q`l0qZfcO~FK7zBXyucQt>@Yev0UU&rCr8-$nfR?SKP}Eh0TQV&1q?e^d+Ap zZ#R^OR|CacP={K7B8Zn<8*AeL)!lPWxG6xw}(G!{WAv{O5SclY$2}QjG!Z^rL*P)E=Xr z-3~@2kn;I2kUs7=0=WK4@d~PGm{MuOk05%e+2A=ogYK9jmUHdcmcbpU_Q_({lVuP# zc>T+nZ)N_)7at)@rz$f015`8rFD)Ff%W;lj-fg=Vf!RouIxeRdfcXjDS#QtQJz3-G z=qsdu1@SJK^3mFJ7*9R)y*b(fjC}7^U7^MtXEThMq}kmrVdMmBbP1vGaMGk7~NN{ejT_e*Ew zbh>{8iD-*Cl$k9a=s9)g%sf7kMtbw7;kX1D`apAX)lwRs7$R55RhyR9Pgdop9D^N3 z(1&o3^%Y^Q$^Ro$BF&R`YG-^htwH7mrqCU{%kcE&?}IRiEgm*bWKNqCd|zYu2X+H5 zl}`w+p@JtA#Hw>(9LFmIa<`vKKm7256~qhCzK98_*~}-9Dkbm{*|Tfr4T+QLF~6;E zKg3>s#I<94RV)7szS-jpeO>;SoMiyMU8Fh6>D3>j^Tp4+|Jt*LlC@X+eD&_AFtbgSFI{WThmB>=*#GrU zU0raPn)ow$lU@2&mmeQqeof@EXz^QBQ`?IX;)@TjyCC4Sux7)D#6?lPkvUAGoQL(} zdy7~f4PT#|oILEszT+8fq0w#@F!^dOF7}T4i?$cheduUE;8uWO;bt|LLsBp0m&B~j zn=D2Xh)PC3OTO_E!gr$V<%bzzJIlQj){c#rB`%N(`#T+KJ$y7x$o zl)477e>Z#;LuATv_(mpDH6dr*y1FfW?or<5JrMj3IiXR{jdG27?tH6l;lj}duaI@a z9#C^>eMA%`7_E}_;G3W~`2KdHZnr{FyERyd`zPBd1};tUb7U6*|QaKl}Z2O9jjVqgw*XtaT?IO%{^RAyQU5SxuR8XDr1n z?G1D;CUtb@4)1pgA{!$@re@=V6bMa-*g!|bt@LdvjdzAUoa(H>Chl;W_{xmSB-LP) z1X7`cBt7Z9Jz)54H+5-D5e}DIcihB{ruvx=goFbtx}5qqIf^_1-=znJe{K&l8$b*P zQXnj!G;e$O_*Aew3%+U}dq?u&FSZq;1Y$Sv!e)>SZF1q50|688R6wlNlP5m^!Fht@PO6si5n@JOn;{YLo_cz4w-}PS^QvbHF~Rfe${%=TPSgb+S*_Zm5QZ?0;@x)9KGAj4Al` zJ=XWgxd9WVLO_8)WfpztsN+L^3YY^^4x098P1vb)(-Dx#qi*C3DyE#XXVki#Xg}eF zFSS<1;jXPPq!1i~IYiNa8EM?;Mff!j^3qx=%=n*D|J`L=BuUF~JXHM`h|50_Z-+WO zQu**OKCPd$=o@{=kL(3x=rL(mqm-M&RDt@rhG*>t=@Qs8CW%Kb_=@_c*88&c_MRT)GBC z?&l#e^>fuJ$+=eN`|Ll5G=1|cZg~I1@f?`2ckRqZ8>qa~H}dhS#b>a)56Zr+Km|~| z|5xHMQ=CuA{3GUpP%TvcS~jO<>)E#x=%xXDa{Kbi3&NjXave5%;qQ$K8V`kZL*1A2 zi=1!>$v<@vqJLHS$9m?0aEM`Zhb#(1C#yn&@2n&sTMAMMRxDwU zmeth9;r)}z=OE=uYoa85CpdVA@Xm@XOzz9c^PKW;IivU(d`iyy>slT3@k^%*(xFE*ep)J}!5Gya3&mHdmRO{osMwc+phVF%+g_m1+2 zfI*jPNSm%2J~#COt{!McY<3x^B4hub4cZla&rPTjYLCI^%&dqF?K!_ZW+e`cQ$u)0 z{sxupayh~gQ0C0lF|cBOG-R{*XS9G31mm$*-6Y@z)KYRkeY*&6*^HkL;PMg?s?XO~ zyhcd)#V!~g$gJlmi-}mz@)B&dj%^EatId?=8X#oLmKj%lIbt18gOU0hpSHGmz2A#O zEPI8plzdnL^XXTzd1#=d;9WP8aG83LaJVj_^>@dp8I??d-%gRSsAJWP z(LM4{m0C!yjK}2LtG%qMtKL8O&kpq4iS%w60>x_%F7`P5EwaL$W)kz0AI&DNZ;dzw zo7CvVeQVf`>^aY4HB2cTjw;#Ubwc9;d`GBmquyqh!md4hWC(ulFaIcQ`V1ZFy=S)N zxQ)*@iW%SsziNs9?)TI&e61{3`{m1(WM=}AVDk*Vach5#oqpoXaDn&N0l-pg=s^|3 zO^pwSLa3%)n;0OrPNU(akA1?LY{BMpjrHbq+h1e4qJNWVlew zI8|%+YtYlLQ?Te8qKv8XbDIreu+d%eXhqF#Kyf34IPvETKlAUP5hvUjdY4RZt$`Mi z@sI1KJ>@n1HLv&&(YRXak~Nt74NgnIrOfP^val#@^9|>pGJ8&n&j&9-T&!AygY?ht zMgKjhg5G;7Yv%Ggun?p4NoB%&el*fdnDUEbMl2MmATH11As`afa=gXA1*SYHjd>9+ zNaP^@3q`RtKRdYEqhZ+tw20d@`X=&bAJ z*qrXT-kdc!8Xbcqbr-T4Cq;Pd#J_f^eZK+Xs_7`{~m5CjkAf8>>OG^Xd0Xf@Z`nPaXt9NLEAQX0ASvV zE3hMVP3#aZo4mOEuhF*C z(S)lG!wIT6J`<8pCBxgk-NLaYFPI*^A}1Qcm@G?ZkcBHrX`|nsv7Tpl;%eWxyNf=+ z%{0+Mlkp+Ag9IFe54zH##HE~-<#Dge9S}oM*(3mpOi(}$zIl4(w{)UWhO-qAFIpO$ z3}!3HUB@gN3c0s|?O4^~qiudS%w|{vgXbXUa3+zy; zx3{y59<8+o7gcoK0v)|JGxoutfw2S~vKl^cdZk?#%w%`Rul(_dBBOv;t<2TS;&A-cy8aFYu(xDwIZ>Av-x*jD5-VGrc(l zQ*^DvmqGY@fi4Q7wB4M&Njz?(#5o3o0(bOO!(|%RqX1t1V^Mz)Lj2QIa;1Vkw~!0H zqm2Pc1AGYU2YeDxyW!TfxvMT8M?Gj3YY|z{-yKzN+t_!uWKIrnXw3kmJheFFU*VX1+f zczE{BwWi`ow`Ton0RR7qmk!~I&t%Z<9F$obN#q;42R-p|a=35O4AI8X%L$>rE4u?Ok(hALitiP46Yt*j7+Z+#S4ECCL zq|Jn47d?myJC<_lcR;Rc6X?k*4dxQEqkC<2=$fb?Wj8&a^GHx2g4Wpnc3c5Pi}J}b z6`euB_;Nl+wHbWQ(eso+u0ZrczgD57HV;=4BUiU}m1WK9>T6*rgE9V#Fh&eZi&rUr z1wScgrvJB%M?X!-aYdT7P<0ai11Lyjs5@A4A>_W5)(@SrtXH$pTqboo2v?RWXKtQ` z6La10F|0m+$wQcaI%_PValCyqobqUb1TMGk4>Z3`Jc zfFM6q9i15Y0Un-#{GgH9!8_zS4hO2mtG))oPkk%sk3|Uw_$bLh9CLaLP2B&mH0T() z<(GG967`UEuu~YqSNdouhmwW+hZjgEI7j9&+1o7oX^QT24Ab5K)Rn82Y5< z1-+>d`6*pJz4k{pnDC%3eKd5~ta+ML-5=dt?&m|+orQvf^@3pQc!LYinN>n~5hcs! zk>DeA!Mf+bj!rw7hGP0=N1JRM`d?nUpKqV<1QP0!{?IMHKcna;cCit;G!2nJaQNW}C^hH>%~QK+ z@Pz~~@VIq+VGFg;&;W7)d)Xx>{J{6z)9~E^lYpsk8+)h%f)tG?DfS897+i&X+6*Y$ z{f8T5DGR%jrI~HhxdK&6<2n5e2Di2C#sUOuFoQ8oTP5#Yk%(ePH{UW3tAwdu7i#fy z=!l>)T&DDz6dmBJ_2*M+$myZl8G@QO3AIGJDAuTLAfp46GkNDLXYt&01?$}lZ61wp zr$?I~BkjRUr&_%dKK8|{bG zH0uS8;g{m(aqw;d~o5CO2Tbf@tG#bm=x60j3H9JsJ$PN;8_tEV ziIfe{_CjGI{=hD^7WDwpKpQf*r{E!7b6RRkV@xB`uAMH4oYn~t+Lh-7)pM! zQ1j{HNeV_IR2dDM;P}Db{M=tHTuC^5QCGQ{N8fq+1#61Ji(wn0l5B_K8jBb6g^jaA z?A~hL!b3=G)$`n^dnmT?Lz@5YfZmTt*ip@xBLsxqm9K9J1 zt~wA4V#@j&mnunDW^=VfixDGOeL2`W6U%pjblHt+&ffXb<8$QlI2s*4OB5Q>d>7H% zYZwF1L>G(!4_One5yD$IjXHLGVq=eb3Nj$1l2;2StdU0hADXvxRBtRHN@)RL?vYLE%H7+i6djJ)%sX;SUqMSZrh9k3MBeO%4DzZ^0 z3+AD73ZNo4_cWBVCO%*^c>B%`r879^NH6dn5&(y8yNfODccie=4c@RGhCJcZzmVxQ zPwO3m_&SzaOmi5aX^Fzj`hQ0V3myQR7fgomHq|6o{0SQEVH9H95HcVqIbMkliYs|| z;qsK)sS`VXAbb@E%B%3+1dlZpe2V6;kFo~v0e8yGUb5wSgcs-!H=1Za^Ts%#`Zy$} z3~uX$@VY5$l68ej)kEVu0z}Y)-2Y)&i#hu?b^thxgx8_UNlUqY`urT%Ew-`^Y;XYx z9RVFnCzwd(tAa1>0b4sKioUCgA_LuU#F*87n?s}>PqbhZb%`JHzM)!;n^72>=Pb*} zE%z{~nuNG3=}Qz!kW^3Qn8V7s<52vIfWRIbfYopxYn@q2M#TIc4C|V&&1a-FsCD$x zU>Y`-c&MNbe~&1K6pN7(LT6+NZT0)7OHwi{GQqc0O;!WAJV#sp2{ZFnz{Q|(lo?vj zTAO4yc7wjyzuXBn{L9Q#ys!`j$9T)d@>0*N2qA~2bFASC5mqNHS&;A67_SSlGp|k+nD@FVIn{4x$dB!qQb#abL|Em zXJ|5t^HAqWITK)qq3JeW3|;vm;oxS8hJwPLiGOP9aPMi_$m#V7W{|gDec9x9#*W?2 zI+5l&aKM!ciYsChL8juawk$712d0MJCT~$&M&wyTE@_X!k(K=%b0cWjp=70u??}AwP`4<9VDDCf@?amInG{)axRfN4(BZ9?Cbl{3~J4_ z%gM_846wj*oez6?fuGM(*2+n82&6+DwF#P~(WgQ?RvK;%F2@|u`lD1Vpy}C)ROApt ztvrGGz%$5ptN!3@o#?|wOKdM_+5ui_cBgEsCnde!^n}tBg@bwb+q9*N7Xi24S~ZR;ZZ0@Snj%o zDcJ#c{FE~fQ0SY9+y4f8o0TRhL^I%9f{v#SpGihW?**SDiMwvfWK-Dh!Ff}B&#nN- zO7{e9nef=%&FPv7(8F&39OK1rgds0FiKl4-s@)lzL2=`kWG8puHz#qm$AvR%T9Z}? zVaBUvxC1EIs*|My7Xm}wAYOV8Sc#ygG`8Pu4O`w~>SmLnp0>!gNzJV0#{ej_?@23{ z(S6Q;{ti)DwdXlY+rks17_YlQjrPgn7Ee16WU2Hh>(}5~q{Y7x$v=9Yat`eiEHhs0D`uE2L?i+ASme1dpWv`EiWf>9awV#i zh>{f5M%KoC8Hnp`yNtMiboAh8m;=TVQWSG0esl5M~>7wm&yvY{AXPKcQIUqpA zoMp&?WYgHE&p31rK=y<^$QvJl#UHjjMUgeq5iKuxNg=&ADqn#}wTx40g616!Rq-WB zDqQsN$xdd=j_C?7e9D52?YcSL=tf;?C;2`G%2^T$Pvd9?;bJ_0QGgzjXH`$cSF~mL zW7J6E3c@IIia|jWyMB`dFEh+rR=fmpKnbpkr}`w&Ny1G&a;;#gz|OC61>p0TvuLMv zj4Xqc&KJ8M2s(MygxZ|+*WwH2(2`iQhTu*A;g0B$L5IAH#2?%A(yu)wFK>PY7pul_l~@3($rWR5mNt0(%D#ciGC(wn62mypQ~_F^?t2FuDJOyqXJ z1Vf4vidft=l91y(KFt)zR&FcJ$I8k_dA6{TXuxt{POdQxy(Ay1_FGIG?&x zghB=u(!}1bW%A1qFeu+}A{3UEPC%Qlt91A|K4=$h`X8u95xEGLqG9T&vEynZ{PJhC z(^zE}e|!|1qo9#9b9rVnb)6$urrESSDKkHq0AGMWrP$#K`n_Pi=)Jtx%H)lY#HK@C z4n8Ezb3@7qeu@)FWZG1NrTir-3t3-JAtLlq-f>v?t;rH$O~%Y zFM?)(VA$}@4EO9{$ox@30{RsPM@srTyg zpnA-zk z$Vou~wN0!ibl#!%aTJdxH-ju<`mfD%6f~H3KR5w(&9QNz6#5)Wp^2y7A<8I&st`rS zLQK(ex@y8#4aK`*sj^h=Ms^u>zF{rK19NyIb&2SANaCAhde-5~7f@*n0ox<7I?LnX zI|Q!%MgPZAt4|X3Z^SG}IeS1hTfw2~OoIbN52VWL6@^EIWK#_ z$bXq?r{pX4Mb@)Cd|i-xYWz{H`8wJxfw!-#Qlx-l>)dU$0czd#Whp}qA?9B^*zgl) zdn8dkwxZf3C$W1o2l&B!j2YNwQb$784b5}B@)b>$prwMU9t$HLlHZBuJEynqb=Fx~ zMJ`;jK-l=#US0wZvTY!H_8H1V(;pN@3_u7;n)0q2wE3cv*Mheo=BI|0H+sE^%T7ZP zqY|?a}0{pfvL-{Ke1``OaP@`VXj#q6wkrpsEBe~ z3^@t4+YvM}Wg)(s7!O0COGLjpj2dQ2p+UoY*B4~~HQ>2&tmEF%gTT-Nw2-kH(hZad zBAg6{nxJANg=5xd)dSzLJ10q?bht;Lh^*2@5~Vx#Q3VsU^+aX+%Njkem==%MaJFOh zJPS{aVcHQ`vL@qUdC+3zEHh7&dYM$~P(R?q8w7RiejF1P#9F5SeoM|PO%Yyz` z___+WRRxGh(&}(yA_OU{T&EQkyp7lu)NPYdR1dH3l?u_yfb}Vv7EiGNQHopaETU5a ze2(HEN%tl*=1_RG}|szH)-yR>RNH!t_f9k~m6xVUWtGN>zhT=<#|Adog=0%suya0rt~} zyZQs>CLG3U%-zvlw2@sYe>hHxk_Vn8z+H-kF^08Q2|h(VT?oDB^$_2<%D(1A+F}N9M zC(UQV6z&oc?qU)a$CoYR8nL2^F+G1<_WviC0Gey+k#85m=E zI)#*VUVDh(@e@u^l`4GYceZ37%GT3A|`)$my!({qkdA^dguW< z9rMFr#_2plhD)2FcyXS>!Vx~12?an+ymlEew~qZb9+$8iOQTkPLT@ApvXul-NZodi zoL)CZ8f->Gy!1N-4Zo3aMY9K&%LEKF=t0+x7xdgqzwzw9@O5>b9A7vI(i&YT3PiE7 zQjW?M*GBB@sDd|k!%1&ei^Fc^me1f+DI+oB!FFuZ)h8R$p+Rm-!RHUpr!RM#2-s?k zV}PICc*H#p`3RH%qu~{~G^<$}jMnsKNaCaS?TSf1VQ;^-8gEJZZ0a`KP_vspQ1Axc z{C`pRh#Yyx2B-(`CD8A*xIH8_^jW`49exKT+QVYHlgAJuJNYC8B^or9O;;-9n!!l) zk`ZjAW5C7ss8*+(*+fCs0lnj3B6ykb8A==nW8qg9;r$Qn#g;!BT*loPQ2x*H!0KBM zm9@h30C*=xpKRjjfK$Ti6u#os$`?fj--VSHYuuT+r0VF#jb#@u-D?;4jFx}DZ_$ry z_8wX)@d#@=6#szjN*gY_J2#n~;GDL>WirX*91 zmUdUS$s&_}j%!;L+%wB!;pwWoq$**QG=DX(S8#_9(LYIy=YrY8mFc5 zyF$ImHh%|MxvTW*HeNQlwm zwq6!YOkBxeiG5q^Jy(EI{>{vFdl#zMzaZ3fE+)=veorsX8e)xyzy~B0E;mhl^{cj9 zv}ij7K3~6AYUFR4tD2>#>bo2jUz6yiC2RmkC|o{}sv%!@BWEOr&L}LF!UV$>>7wJQ zGYAPa@icGb)LUs$``rkS8=(gkmcUoE&Ti2v&pVUi7Q1;Hobl&n;!}IpR*BZtJ;hu% z?U?hSjGoe6(f8DHZQwIzNrmHeQ{9J7a5=h5N(ViBoYqzeeIAkuvU~T=KKlLuBLQx+ zy)(jic|=g#CqwHiLmyr8PaaxZRoJ`n^<Q_R-X_( zu4ldLX1Gaug+$DxMD#JXspYY^x}w5QBLj(*12GnL!?0t<;=-`P21?xy_I5N)m%h*z z2-APr_0E$~mI&(v}~ zK|Y^$=H-mAGX305%keq$^$ovQYC2EdX41eR$2A)7``*HEL8O@9HWWYLUx@e3?5Ljq zaU;8!y3+^8$8C&bt#&54ez5Js1lNw@h8RLXaU*b=>vCjvMdfJz>DTGu2Uwpua`c^T zu=`+?ZZQv_U43I=TRWE!d3K_q$;GjNbTgP3NC{GB7P_gL0Dcq8bG|;ostz$cp6Z>+ z%4;#7g22=5U}4Hb+RJ#&DQ>VeF|8sH5wc9f?zOt(h@~I&3ulg$J=SkK0?)JL)xGU{ zn4dbjwo1QB+6Keh$Y77huCcc>yy!oE$85TS!t^sIM!Yi?0SVkn+qSKX$$Y~<*Y#Tt ze)?($`vZ>GM(deEC=coKH+!>V7b1+W)$u5)*C?Vhq7+;3MQTn~_%!dB;XSrp2tx?E z{AO>n?1DOc(B5Tpca}={rb>C3S&}|Bo#qu)Z%Bs@&?98B(SB`*h@%Q!9M@L04p7fN zxHHJFw~O$`P4r^tCH29qxMXWb=m%|-bT0_UB(22 za1f5@pZk)ytf%9cL<>ot}AvN)|tbU{)&%gyxgR+ zB9EV`>VrAYS}}X&3VWZ}A;YPbG;(JRQFhOL0$+&ngtT3;Ml3-&7t8i_(NR8bF zqP}A_SSYsH1E&A>_PBvKD3pRiX-Q`)H*jK>AIuU&j$4mrxB7}$+e5KQ88_eD1GZNt z*Rw%>hN*GiqsqK)*fKFOl@mD-SUH3#H?Hu|m!y+-9KXSiY-Qu5Q5Xc9ISju)^wsn{ z;+2f?Wc{_9R*-*lSU?;*6}Dp4xvCUpl9^wf%eg3oIdc> z8zY>+GmlbU4Px z8}&~=8cFj15sl-s6$7b~_hATQ?`%15OFFYskgJx7Nh_$WlA>+P&cR@%z;)@FL6@N=@74V%|60nS9c!vHLbm zMw}_tncH7fwjK2Gb2B20j~gXcdNY29I;?Vy^_ES0sY}t9-Aru=4JgtQ{)%i-#w*OP zLQ=}SarsT+GOLdp%|1|s;-KNTJl|-bH2t|DI`MfR!8O~xFJY#)Ki~>rdo2eW5I_Z= zn`j2J1WT6Y@o85^Z&sqnBJl)ECtg!EYvLqjy4m^ZZ9fWC)bgP2eC@+b>1&8(YS0NX zQd%nV@|XFUQO48!{wjYsKb12egA4v)Gpuxlb<1P~_Dt(3+y3#l=I(+*8#6Z}SA zzlVu~U%s$=HgUxB7h*QJ(#anIHC?1IbQUOkuH(AzM=wc*yW##1(hAoXF#D!Y!!aGA zyMa>AwbTIub&i*%oQ%q?WkTD3iqt208SO9vo;_GKW5m@~vxh`fVTAszdBRz3J}`9f z)24_c?qeRvdYizEhfdxx7sw?l+XbF@Nme;V^8CG*A%uQC2fPHwT*4283wWHSp=Jt|AW(pMn~ zod~KNzl)sK=Kee9DTZ_Z-Q%`~a9)BJOdP-|!F63m2z9r&li9DW()OV=^n`>0%j*Rb zZJkxG)D7;L{u$XEr4#B(Csr|Ugi1=xg$^Ljuh)fbrRffVPcib5R(wZZ%Wvk6pdi$2 zVEcjQZ;S0#F{Lh;OZT>*M&56qfxcx#?&mgj!#$7-Hbh?;k( zj7DmhXG{i}42JS@&s-#gcY3HPF_o2pubo7XgWz|LaFNcJ7qI0YLc=D$J3>X4vm?_B zbeByoLxFGZJ;4xq@F7(f$AV96sJcb#xW9ed%r~Zv7ZWu6`s3|Wp;r5V0KtvyR3Fe! zz{uvIh|$icUY+n?ZjH$~p6360Z_64%&pmd9CH5*@f93{0Ar2y4Z3*A~h6%Cg?L+Z3L3RI`o~4|HoZcFI2KQ*CD#a0EW8waFsR(J3$ut#budg{-Ow z8oN0Bhzu!+=wvdjb6>CT`V+nn@M?YJvre`OVBzSpro8WznhFRjUVQ?Dzd5(;eJ@%y zn-jL7ZFOjz7}(yp+0$$d9FbC*a|e+eVfhW$tGG)iBfx;aG`8w=EFjW@$Pj%EPbUrG z>H;MYbEL#(n3c!OPLmOAyO_hxsU(k=*2DL^$gbF|y?>IzFXcER9EZb&iOd3tll|M! zvu_nw+BG-gG3KldYdQIy-{D7UPpHypj;=Vgv)Pe7Ms)hG_p{dgPERgd}!WuUt(z;Uk9`q&`3S#;~?;NycAiQOgB5Hidcm49r%>AhF#HPwn8+8EM$IA-b!BfOT&|BV=oB`~ES=wL0!Z z@JJpl@Z$!CSMJ1m!Cj=Q_l`az(`FG|8e|1Xmm9?KzRV)6o_$y(T_5;5pOJ6EIH9r- zQoQ{|%Tf;yWs7g2D@4{tC9Ds2^Z5^6sc|!|+r@Fjp1R4H`A}$=d&>n$)g-kv1%;$% zThe7_8g}VM$aYWQB(l0zc9h5zd;OlA)QMFQj#MFI!zQ^X$U4$WgV;?RyavGr5?h4i z4`7G7=I8f29)hgHT>iXHeXCE7&zljS^e(Y*%+CqDiVwEOEbiVF2oK3Cq$7uSHLC%w zTe2jN|9Wh&#}*#8`v)zVJA;@Cfl(#hjHZVn#>wK59R! z+>A(hj31I6bnY$+ynvq;_3`z{YZvBg#H$N;b3UUTcL!f?warnNw(G>8Gv0jGX~w-P zx<&z2FxVajsa9Sn;>V%iAps>2n7v_@=1~hGgG{0alm=@d(pyo=K|bXIR-C$%y;dA# z+$2eTy`4c*f^mJxtl&+v;l9=8$Pk6x3A1z(cR#DO%RQU?Ug3##IA#TvS z#8Z5w_&Rvjx7g{8ZEuZeJ%-QL8np^Sz-AJni0lsd)Z1#?BNBW0I5jFZdEF}<*Cp!j zeACP~qwE{iIfOK|0Q}I2Kv_-CJS1M6Z44F$C6HR673QDb(Yh~(K#GYAaPD?QixP|A zF%op=eQ+4AEt*fTz}5V;%GF=sqVBA;N~l<*eZzLhBQOPLu}V(`8yh@OL7SD8)PI3X zydy8+nVdd&axuFZL1{WKE~nEnnTf#JQE~hMaQm3yzaXiz=GtX-F7dZ(!3=dl^KbT< zvR9?0kay!h<8Ox`b|?NUuOk2UVlt#w_|O0UPyf%7m?q*x)>IrmXL=M%)Y@{#7S{h9 H{NsNC{>N|y diff --git a/client/src/main/ParallelAssets/index.scss b/client/src/main/ParallelAssets/index.scss index dd99a9f..d891079 100644 --- a/client/src/main/ParallelAssets/index.scss +++ b/client/src/main/ParallelAssets/index.scss @@ -192,18 +192,18 @@ $asset-logo-banner-height: $asset-logo-top-padding + $asset-logo-circle-radius; kda, linear-gradient( 30deg, - hsl(325deg 90% 44%) 0%, - hsl(323deg 68% 51%) 14%, - hsl(319deg 64% 55%) 29%, - hsl(314deg 59% 57%) 45%, - hsl(306deg 54% 60%) 62%, - hsl(296deg 52% 63%) 75%, - hsl(285deg 60% 68%) 84%, - hsl(275deg 69% 73%) 91%, - hsl(264deg 80% 77%) 96%, - hsl(254deg 94% 81%) 100% + hsl(110deg 90% 44%) 0%, /* Deep green */ + hsl(112deg 68% 51%) 14%, /* Rich green */ + hsl(115deg 64% 55%) 29%, /* Mid green */ + hsl(118deg 59% 57%) 45%, /* Bright green */ + hsl(105deg 54% 60%) 62%, /* Yellow-green */ + hsl(95deg 52% 63%) 75%, /* Light yellow-green */ + hsl(88deg 60% 68%) 84%, /* Pale yellow-green */ + hsl(82deg 69% 73%) 91%, /* Very light green */ + hsl(75deg 80% 77%) 96%, /* Near white-green */ + hsl(70deg 94% 81%) 100% /* Lightest green */ ), - #ed098f + #98ed09 ); @include def-pa-block( From d5e5120b72836eb4c2a27b0173026381f6dfe25f Mon Sep 17 00:00:00 2001 From: 2ndtl <2ndtlmining@gmail.com> Date: Tue, 30 Dec 2025 13:41:15 +1100 Subject: [PATCH 5/7] removed factus from home --- client/src/home/Header/index.jsx | 58 +++++++++++--------------------- 1 file changed, 20 insertions(+), 38 deletions(-) diff --git a/client/src/home/Header/index.jsx b/client/src/home/Header/index.jsx index 50dbf39..d8572f4 100644 --- a/client/src/home/Header/index.jsx +++ b/client/src/home/Header/index.jsx @@ -9,7 +9,7 @@ import { FiCpu, FiHardDrive, FiPackage, FiZap } from 'react-icons/fi'; import { FaWallet, FaWordpress, FaRocket, FaHive } from 'react-icons/fa'; import { LayoutContext } from 'contexts/LayoutContext'; -import { useContext, useState } from 'react'; +import { useContext } from 'react'; import 'react-circular-progressbar/dist/styles.css'; import { RadialCircularProgressbar } from 'components/RadialCircularProgressbar'; @@ -105,7 +105,6 @@ function CellTooltip({ children, tooltipContent }) { } export function DashboardCells({ gstore: gs, total_donations }) { - const [enableFractusNodesCell, setToggleFractusNodesCell] = useState(false); const { normalFontSize } = useContext(LayoutContext); const iconSize = normalFontSize ? '28px' : '22px'; @@ -189,40 +188,22 @@ export function DashboardCells({ gstore: gs, total_donations }) { )} - }> + {(ref, tooltipProps) => ( + } + iconWrapClassName={`dash-cell__nodes-cumulus${suffixClassName}`} + small={!normalFontSize} + cellHover /> - } - > - {(ref, tooltipProps) => { - const cellProps = enableFractusNodesCell - ? { - name: 'Fractus Nodes', - value: gs.node_count.fractus, - icon: , - iconWrapClassName: `dash-cell__nodes-fractus${suffixClassName}` - } - : { - name: 'Cumulus Nodes', - value: gs.node_count.cumulus, - icon: , - iconWrapClassName: `dash-cell__nodes-cumulus${suffixClassName}` - }; - - return ( - setToggleFractusNodesCell((prev) => !prev)} - /> - ); - }} + )} + }> {(ref, tooltipProps) => ( )} + }> {(ref, tooltipProps) => ( @@ -284,6 +265,7 @@ export function DashboardCells({ gstore: gs, total_donations }) { /> )} + } > @@ -307,7 +289,6 @@ export function DashboardCells({ gstore: gs, total_donations }) { radialSeparatorStyles={{ background: '#181a1b', width: '2px', - // This needs to be equal to props.strokeWidth height: `${8}%` }} /> @@ -318,6 +299,7 @@ export function DashboardCells({ gstore: gs, total_donations }) { /> )} + } > @@ -341,7 +323,6 @@ export function DashboardCells({ gstore: gs, total_donations }) { radialSeparatorStyles={{ background: '#181a1b', width: '2px', - // This needs to be equal to props.strokeWidth height: `${8}%` }} /> @@ -352,6 +333,7 @@ export function DashboardCells({ gstore: gs, total_donations }) { /> )} + } > @@ -375,7 +357,6 @@ export function DashboardCells({ gstore: gs, total_donations }) { radialSeparatorStyles={{ background: '#181a1b', width: '2px', - // This needs to be equal to props.strokeWidth height: `${8}%` }} /> @@ -386,6 +367,7 @@ export function DashboardCells({ gstore: gs, total_donations }) { /> )} + Date: Tue, 30 Dec 2025 13:50:32 +1100 Subject: [PATCH 6/7] factus removal front end --- client/src/main/Header/index.jsx | 65 +++++++++++--------------------- 1 file changed, 23 insertions(+), 42 deletions(-) diff --git a/client/src/main/Header/index.jsx b/client/src/main/Header/index.jsx index 9bfbfb3..8788dd5 100644 --- a/client/src/main/Header/index.jsx +++ b/client/src/main/Header/index.jsx @@ -6,14 +6,13 @@ import './index.scss'; import { FluxIcon } from 'components/FluxIcon.jsx'; import { InfoCell } from 'main/InfoCell'; -// import { LATEST_FLUX_VERSION_DESC } from 'content/index'; import { FiCpu, FiDollarSign, FiHardDrive, FiHash, FiPackage, FiZap } from 'react-icons/fi'; import { FaCrown, FaWallet, FaEuroSign } from 'react-icons/fa'; import { LayoutContext } from 'contexts/LayoutContext'; import { fluxos_version_string } from 'main/flux_version'; -import { useContext, useState } from 'react'; +import { useContext } from 'react'; import { CircularProgressbar } from 'react-circular-progressbar'; import 'react-circular-progressbar/dist/styles.css'; @@ -140,7 +139,6 @@ function CellTooltip({ children, tooltipContent }) { const RenderedFluxIcon = ({ width, height }) => ; export function DashboardCells({ gstore: gs, total_donations, totalScoreAgainstSearchedWallet }) { - const [enableFractusNodesCell, setToggleFractusNodesCell] = useState(false); const { normalFontSize, enablePrivacyMode } = useContext(LayoutContext); const iconSize = normalFontSize ? '28px' : '22px'; @@ -149,8 +147,6 @@ export function DashboardCells({ gstore: gs, total_donations, totalScoreAgainstS const walletType = gs.in_rich_list ? 'richlist' : total_donations > 0 ? 'donate' : 'default'; const walletCellStyles = WALLET_CELL_ATTRIBUTES[walletType]; - - // console.log("totalScoreAgainstSearchedWallet", totalScoreAgainstSearchedWallet) return (
@@ -181,40 +177,23 @@ export function DashboardCells({ gstore: gs, total_donations, totalScoreAgainstS /> )} - - } - > - {(ref, tooltipProps) => { - const cellProps = enableFractusNodesCell - ? { - name: 'Fractus Nodes', - value: gs.node_count.fractus, - icon: , - iconWrapClassName: `dash-cell__nodes-fractus${suffixClassName}` - } - : { - name: 'Cumulus Nodes', - value: gs.node_count.cumulus, - icon: , - iconWrapClassName: `dash-cell__nodes-cumulus${suffixClassName}` - }; - return ( - setToggleFractusNodesCell((prev) => !prev)} - /> - ); - }} + {/* Cumulus Node Cell - No longer toggleable */} + }> + {(ref, tooltipProps) => ( + } + iconWrapClassName={`dash-cell__nodes-cumulus${suffixClassName}`} + small={!normalFontSize} + cellHover + /> + )} + }> {(ref, tooltipProps) => ( )} + }> {(ref, tooltipProps) => ( )} + }> {(ref, tooltipProps) => ( )} + }> {(ref, tooltipProps) => ( @@ -306,6 +287,7 @@ export function DashboardCells({ gstore: gs, total_donations, totalScoreAgainstS /> )} + } > @@ -329,7 +311,6 @@ export function DashboardCells({ gstore: gs, total_donations, totalScoreAgainstS radialSeparatorStyles={{ background: '#181a1b', width: '2px', - // This needs to be equal to props.strokeWidth height: `${8}%` }} /> @@ -340,6 +321,7 @@ export function DashboardCells({ gstore: gs, total_donations, totalScoreAgainstS /> )} + } > @@ -363,7 +345,6 @@ export function DashboardCells({ gstore: gs, total_donations, totalScoreAgainstS radialSeparatorStyles={{ background: '#181a1b', width: '2px', - // This needs to be equal to props.strokeWidth height: `${8}%` }} /> @@ -374,6 +355,7 @@ export function DashboardCells({ gstore: gs, total_donations, totalScoreAgainstS /> )} + } > @@ -397,7 +379,6 @@ export function DashboardCells({ gstore: gs, total_donations, totalScoreAgainstS radialSeparatorStyles={{ background: '#181a1b', width: '2px', - // This needs to be equal to props.strokeWidth height: `${8}%` }} /> @@ -413,4 +394,4 @@ export function DashboardCells({ gstore: gs, total_donations, totalScoreAgainstS
); -} +} \ No newline at end of file From 3b57aa6145973cf7bb9958d525d489c05eaa873e Mon Sep 17 00:00:00 2001 From: 2ndtl <2ndtlmining@gmail.com> Date: Tue, 30 Dec 2025 14:56:12 +1100 Subject: [PATCH 7/7] fractus removals --- .../NodeGridTable/CustomTooltip.jsx | 9 +----- client/src/content/index.js | 6 ++-- client/src/content/internal/req_helpers.jsx | 6 ++-- client/src/guides/GuidesView.jsx | 2 +- client/src/guides/NodeRequirements/index.jsx | 6 ++-- client/src/home/apidata.js | 26 ++++++++++------- client/src/main/BestUptime/index.jsx | 4 ++- client/src/main/MostHosted/index.jsx | 4 ++- client/src/main/PayoutTimer/index.jsx | 5 +++- client/src/main/WalletNodes/Projection.jsx | 28 ++----------------- client/src/main/WalletNodes/index.jsx | 7 +++-- client/src/main/apidata.js | 25 ++++++++++------- client/src/persistance/store.js | 4 +-- 13 files changed, 62 insertions(+), 70 deletions(-) diff --git a/client/src/components/NodeGridTable/CustomTooltip.jsx b/client/src/components/NodeGridTable/CustomTooltip.jsx index 4b657f9..e2011a7 100644 --- a/client/src/components/NodeGridTable/CustomTooltip.jsx +++ b/client/src/components/NodeGridTable/CustomTooltip.jsx @@ -1,6 +1,6 @@ import { Tooltip2 } from '@blueprintjs/popover2'; import { fluxos_version_string } from 'main/flux_version'; -import { gethelp, getreq__cumulus, getreq__nimbus, getreq__stratus, getreq__fractus } from 'content/index'; +import { gethelp, getreq__cumulus, getreq__nimbus, getreq__stratus } from 'content/index'; export const CustomTooltip = ({ componentName, displayName, gstore }) => { let Component; @@ -308,12 +308,5 @@ const InlineRequirementsView = (name, suffix) => ( {suffix} - - Fractus - - {getreq__fractus(name)} - {suffix} - - ); diff --git a/client/src/content/index.js b/client/src/content/index.js index 9eda8bc..609559c 100644 --- a/client/src/content/index.js +++ b/client/src/content/index.js @@ -1,6 +1,6 @@ import * as r from './internal/req_helpers'; import { fluxos_version_desc_parse } from 'main/flux_version'; -export { gethelp, getreq, getreq__cumulus, getreq__nimbus, getreq__stratus, getreq__fractus } from './internal/req_helpers'; +export { gethelp, getreq, getreq__cumulus, getreq__nimbus, getreq__stratus} from './internal/req_helpers'; export const URL_YOUTUBE = window.gContent.URL_YOUTUBE; export const URL_TWITTER = window.gContent.URL_TWITTER; @@ -25,13 +25,13 @@ r.defreq_wrap('net_up_speed', _reqsObj['net_up_speed']); export const CC_COLLATERAL_CUMULUS = window.gContent.CC_COLLATERAL_CUMULUS; export const CC_COLLATERAL_NIMBUS = window.gContent.CC_COLLATERAL_NIMBUS; export const CC_COLLATERAL_STRATUS = window.gContent.CC_COLLATERAL_STRATUS; -export const CC_COLLATERAL_FRACTUS = window.gContent.CC_COLLATERAL_FRACTUS; +//export const CC_COLLATERAL_FRACTUS = window.gContent.CC_COLLATERAL_FRACTUS; export const CC_BLOCK_REWARD = window.gContent.CC_BLOCK_REWARD; export const CC_FLUX_REWARD_CUMULUS = window.gContent.CC_FLUX_REWARD_CUMULUS; export const CC_FLUX_REWARD_NIMBUS = window.gContent.CC_FLUX_REWARD_NIMBUS; export const CC_FLUX_REWARD_STRATUS = window.gContent.CC_FLUX_REWARD_STRATUS; -export const CC_FLUX_REWARD_FRACTUS = window.gContent.CC_FLUX_REWARD_FRACTUS; +//export const CC_FLUX_REWARD_FRACTUS = window.gContent.CC_FLUX_REWARD_FRACTUS; export const CC_PA_REWARD = window.gContent.CC_PA_REWARD; // export const LATEST_FLUX_VERSION_DESC = fluxos_version_desc_parse(window.gContent.LATEST_FLUX_VERSION); diff --git a/client/src/content/internal/req_helpers.jsx b/client/src/content/internal/req_helpers.jsx index cf5a51e..04fc8d5 100644 --- a/client/src/content/internal/req_helpers.jsx +++ b/client/src/content/internal/req_helpers.jsx @@ -4,7 +4,7 @@ export const reqs = { cumulus: {}, nimbus: {}, stratus: {}, - fractus: {} + //fractus: {} }; export function defhelp(name, desc) { @@ -25,7 +25,7 @@ export function defreq_wrap(name, values_obj) { defreq('cumulus', name, values_obj['C']); defreq('nimbus', name, values_obj['N']); defreq('stratus', name, values_obj['S']); - defreq('fractus', name, values_obj['F']); + //defreq('fractus', name, values_obj['F']); } export function gethelp(name) { @@ -43,7 +43,7 @@ export function getreq(tier, name) { export const getreq__cumulus = (name) => getreq('cumulus', name); export const getreq__nimbus = (name) => getreq('nimbus', name); export const getreq__stratus = (name) => getreq('stratus', name); -export const getreq__fractus = (name) => getreq('fractus', name); +//export const getreq__fractus = (name) => getreq('fractus', name); /* Help Information to show on toolips */ diff --git a/client/src/guides/GuidesView.jsx b/client/src/guides/GuidesView.jsx index 91830e2..307fab8 100644 --- a/client/src/guides/GuidesView.jsx +++ b/client/src/guides/GuidesView.jsx @@ -11,7 +11,7 @@ import Accordion from 'react-bootstrap/Accordion'; import { FooterRendered } from 'components/Footer'; -import { RequirementsCumulus, RequirementsNimbus, RequirementsStratus, RequirementsFractus } from './NodeRequirements'; +import { RequirementsCumulus, RequirementsNimbus, RequirementsStratus } from './NodeRequirements'; import { Container, Row, Col } from 'react-grid-system'; //import { setGAEvent, setGAPageView } from 'g-analytic'; diff --git a/client/src/guides/NodeRequirements/index.jsx b/client/src/guides/NodeRequirements/index.jsx index 1e8e121..612d691 100644 --- a/client/src/guides/NodeRequirements/index.jsx +++ b/client/src/guides/NodeRequirements/index.jsx @@ -3,8 +3,8 @@ import './index.scss'; import { Card, Divider, Icon } from '@blueprintjs/core'; -import { gethelp, getreq__cumulus, getreq__nimbus, getreq__stratus, getreq__fractus } from 'content/index'; -import { CC_COLLATERAL_CUMULUS, CC_COLLATERAL_NIMBUS, CC_COLLATERAL_STRATUS, CC_COLLATERAL_FRACTUS } from 'content/index'; +import { gethelp, getreq__cumulus, getreq__nimbus, getreq__stratus } from 'content/index'; +import { CC_COLLATERAL_CUMULUS, CC_COLLATERAL_NIMBUS, CC_COLLATERAL_STRATUS } from 'content/index'; /* https://stackoverflow.com/a/2901298 */ function numberWithCommas(x) { @@ -104,6 +104,7 @@ export const RequirementsStratus = ( /> ); +/* export const RequirementsFractus = ( ); +*/ diff --git a/client/src/home/apidata.js b/client/src/home/apidata.js index 29e93a2..55698fa 100644 --- a/client/src/home/apidata.js +++ b/client/src/home/apidata.js @@ -10,12 +10,12 @@ import { CC_FLUX_REWARD_CUMULUS, CC_FLUX_REWARD_NIMBUS, CC_FLUX_REWARD_STRATUS, - CC_FLUX_REWARD_FRACTUS, + //CC_FLUX_REWARD_FRACTUS, CC_PA_REWARD, CC_COLLATERAL_CUMULUS, CC_COLLATERAL_NIMBUS, CC_COLLATERAL_STRATUS, - CC_COLLATERAL_FRACTUS + //CC_COLLATERAL_FRACTUS } from 'content/index'; import { appStore, StoreKeys } from 'persistance/store'; @@ -35,7 +35,7 @@ const FLUX_PER_DAY = (24 * 60) * 2; /* 1 flux every 2 minutes */ const CLC_NETWORK_CUMULUS_PER_DAY = FLUX_PER_DAY * ((CC_BLOCK_REWARD * CC_FLUX_REWARD_CUMULUS) / 100.0); const CLC_NETWORK_NIMBUS_PER_DAY = FLUX_PER_DAY * ((CC_BLOCK_REWARD * CC_FLUX_REWARD_NIMBUS) / 100.0); const CLC_NETWORK_STRATUS_PER_DAY = FLUX_PER_DAY * ((CC_BLOCK_REWARD * CC_FLUX_REWARD_STRATUS) / 100.0); -const CLC_NETWORK_FRACTUS_PER_DAY = FLUX_PER_DAY * ((CC_BLOCK_REWARD * CC_FLUX_REWARD_FRACTUS) / 100.0); +//const CLC_NETWORK_FRACTUS_PER_DAY = FLUX_PER_DAY * ((CC_BLOCK_REWARD * CC_FLUX_REWARD_FRACTUS) / 100.0); /* ======= global stats ======= */ @@ -69,14 +69,14 @@ export function create_global_store() { cumulus: 0, nimbus: 0, stratus: 0, - fractus: 0, + //fractus: 0, total: 0 }, reward_projections: { cumulus: tier_global_projections(), nimbus: tier_global_projections(), stratus: tier_global_projections(), - fractus: tier_global_projections() + //fractus: tier_global_projections() }, wallet_amount_flux: 0, fluxos_latest_version: fluxos_version_desc(0, 0, 0), @@ -125,20 +125,23 @@ function fill_tier_g_projection(projectionTargetObj, nodeCount, networkFluxPerDa projectionTargetObj.apy = 100 * (((rewardPerPerson + pa_amount) * 365) / collateral); } +/* removed factus function fill_tier_g_projection_fractus(projectionTargetObj, nodeCount, networkFluxPerDay, collateral) { // pay freq = node_count * 2 minutes projectionTargetObj.pay_frequency = nodeCount / 2; - /* ---- */ + const rewardPerPerson = networkFluxPerDay / nodeCount; projectionTargetObj.payment_amount = rewardPerPerson * 1.15; // 15% Native flux - /* ---- */ + const pa_amount = (rewardPerPerson * CC_PA_REWARD) / 100.0; projectionTargetObj.pa_amount = pa_amount; projectionTargetObj.apy = 100 * (((rewardPerPerson * 1.15 + pa_amount) * 365) / collateral); } +*/ + function fill_rewards(gstore) { fill_tier_g_projection( @@ -159,12 +162,14 @@ function fill_rewards(gstore) { CLC_NETWORK_STRATUS_PER_DAY, CC_COLLATERAL_STRATUS ); + /* removed factus fill_tier_g_projection_fractus( gstore.reward_projections.fractus, gstore.node_count.cumulus, CLC_NETWORK_FRACTUS_PER_DAY, CC_COLLATERAL_FRACTUS ); + */ } export function fetch_total_donations(walletAddress) { @@ -312,7 +317,7 @@ export async function fetch_total_network_utils(gstore) { store.utilized.ram_percentage = (store.utilized.ram / store.total.ram) * 100; store.utilized.ssd_percentage = (store.utilized.ssd / store.total.ssd) * 100; store.utilized.cores_percentage = (store.utilized.cores / store.total.cores) * 100; - store.node_count.fractus = await lazy_load_fractus_count(json.data); + //store.node_count.fractus = await lazy_load_fractus_count(json.data); } } @@ -491,7 +496,7 @@ export function wallet_health_full() { cumulus: wallet_health_entry(), nimbus: wallet_health_entry(), stratus: wallet_health_entry(), - fractus: wallet_health_entry(), + //fractus: wallet_health_entry(), total_nodes: 0 }; } @@ -759,7 +764,7 @@ export function fill_health(health, gstore) { fill_tier_health(health.nimbus, gstore.reward_projections.nimbus, gstore.flux_price_usd); fill_tier_health(health.stratus, gstore.reward_projections.stratus, gstore.flux_price_usd); // Fractus is parts of Cumulus tier - fill_tier_health(health.fractus, gstore.reward_projections.fractus, gstore.flux_price_usd); + //fill_tier_health(health.fractus, gstore.reward_projections.fractus, gstore.flux_price_usd); } export async function validateAddress(address) { @@ -827,6 +832,7 @@ export async function lazy_load_currency_rate() { /* ======================================================================= */ /* =========================== Fractus Count =========================== */ +/* async function lazy_load_fractus_count(benchmarks) { try { const storedFractusCount = await appStore.getItem(StoreKeys.FRACTUS_COUNT); diff --git a/client/src/main/BestUptime/index.jsx b/client/src/main/BestUptime/index.jsx index d26c155..d8f5457 100644 --- a/client/src/main/BestUptime/index.jsx +++ b/client/src/main/BestUptime/index.jsx @@ -28,11 +28,13 @@ const tierMapping = { name: 'Stratus', logo: FiPackage }, + /* FRACTUS: { styleSet: 'fractus', name: 'Fractus', logo: FiHardDrive } + */ }; export class BestUptime extends React.Component { @@ -67,7 +69,7 @@ export class BestUptime extends React.Component { hidden: false, nodeIpDef: node.ip_full, nodeIp: node.ip_display, - nodeTier: node.thunder ? 'FRACTUS' : node.tier + //nodeTier: node.thunder ? 'FRACTUS' : node.tier }); } diff --git a/client/src/main/MostHosted/index.jsx b/client/src/main/MostHosted/index.jsx index 09446c6..9bbc1f2 100644 --- a/client/src/main/MostHosted/index.jsx +++ b/client/src/main/MostHosted/index.jsx @@ -27,11 +27,13 @@ const tierMapping = { name: 'Stratus', logo: FiPackage }, + /* FRACTUS: { styleSet: 'fractus', name: 'Fractus', logo: FiHardDrive } + */ }; export class MostHosted extends React.Component { @@ -68,7 +70,7 @@ export class MostHosted extends React.Component { dataLoading: false, nodeIpDef: node.ip_full, nodeIp: node.ip_display, - nodeTier: node.thunder ? 'FRACTUS' : node.tier + //nodeTier: node.thunder ? 'FRACTUS' : node.tier }); } diff --git a/client/src/main/PayoutTimer/index.jsx b/client/src/main/PayoutTimer/index.jsx index e886568..b92e8ea 100644 --- a/client/src/main/PayoutTimer/index.jsx +++ b/client/src/main/PayoutTimer/index.jsx @@ -28,11 +28,14 @@ const tierMapping = { name: 'Stratus', logo: FiPackage }, + + /* FRACTUS: { styleSet: 'fractus', name: 'Fractus', logo: FiHardDrive } + */ }; export class PayoutTimer extends React.Component { @@ -99,7 +102,7 @@ export class PayoutTimer extends React.Component { dataLoading: false, nodeIpDef: node.ip_full, nodeIp: node.ip_display, - nodeTier: node.thunder ? 'FRACTUS' : node.tier + //nodeTier: node.thunder ? 'FRACTUS' : node.tier }, () => { _this.resumeAndShow(); diff --git a/client/src/main/WalletNodes/Projection.jsx b/client/src/main/WalletNodes/Projection.jsx index f611fcc..bc7d9e8 100644 --- a/client/src/main/WalletNodes/Projection.jsx +++ b/client/src/main/WalletNodes/Projection.jsx @@ -128,10 +128,10 @@ export class Projection extends React.Component { let earningCumulus = this.projectionValue(this.props.health.cumulus); let earningNimbus = this.projectionValue(this.props.health.nimbus); let earningStratus = this.projectionValue(this.props.health.stratus); - let earningFractus = this.projectionValue(this.props.health.fractus); - - let earningTotal = earningCumulus + earningNimbus + earningStratus + earningFractus; + //let earningFractus = this.projectionValue(this.props.health.fractus); + //let earningTotal = earningCumulus + earningNimbus + earningStratus + earningFractus; + let earningTotal = earningCumulus + earningNimbus + earningStratus; return ( {({ selectedCurrency }) => ( @@ -203,28 +203,6 @@ export class Projection extends React.Component { -
-
-
- -
-
- Fractus -
-
- - {this.formatEarningValue(earningFractus, selectedCurrency)} - - - {this.viewToggleStatusCurrency(selectedCurrency)} - -
- - Node Count: {this.props.health.fractus.node_count} - -
-
-
Total Earnings
diff --git a/client/src/main/WalletNodes/index.jsx b/client/src/main/WalletNodes/index.jsx index 160e02f..d9a672f 100644 --- a/client/src/main/WalletNodes/index.jsx +++ b/client/src/main/WalletNodes/index.jsx @@ -135,7 +135,8 @@ export class WalletNodes extends React.Component { switch (tier) { case 'CUMULUS': // Fractus - Thunder: True | Cumulus - Thunder: False - thunder ? health.fractus.node_count++ : health.cumulus.node_count++; + //thunder ? health.fractus.node_count++ : health.cumulus.node_count++; + health.cumulus.node_count++; break; case 'NIMBUS': health.nimbus.node_count++; @@ -154,8 +155,8 @@ export class WalletNodes extends React.Component { } health.total_nodes = - health.cumulus.node_count + health.nimbus.node_count + health.stratus.node_count + health.fractus.node_count; - + //health.cumulus.node_count + health.nimbus.node_count + health.stratus.node_count + health.fractus.node_count; + health.cumulus.node_count + health.nimbus.node_count + health.stratus.node_count; fill_health(health, gstore); this.setState({ loadingHealth: false, health }); diff --git a/client/src/main/apidata.js b/client/src/main/apidata.js index 4c31644..c40076d 100644 --- a/client/src/main/apidata.js +++ b/client/src/main/apidata.js @@ -10,12 +10,12 @@ import { CC_FLUX_REWARD_CUMULUS, CC_FLUX_REWARD_NIMBUS, CC_FLUX_REWARD_STRATUS, - CC_FLUX_REWARD_FRACTUS, + //CC_FLUX_REWARD_FRACTUS, CC_PA_REWARD, CC_COLLATERAL_CUMULUS, CC_COLLATERAL_NIMBUS, CC_COLLATERAL_STRATUS, - CC_COLLATERAL_FRACTUS + //CC_COLLATERAL_FRACTUS } from 'content/index'; import { appStore, StoreKeys } from 'persistance/store'; @@ -34,7 +34,7 @@ const FLUX_PER_DAY = (24 * 60) * 2; /* 1 flux every 2 minutes */ const CLC_NETWORK_CUMULUS_PER_DAY = FLUX_PER_DAY * ((CC_BLOCK_REWARD * CC_FLUX_REWARD_CUMULUS) / 100.0); const CLC_NETWORK_NIMBUS_PER_DAY = FLUX_PER_DAY * ((CC_BLOCK_REWARD * CC_FLUX_REWARD_NIMBUS) / 100.0); const CLC_NETWORK_STRATUS_PER_DAY = FLUX_PER_DAY * ((CC_BLOCK_REWARD * CC_FLUX_REWARD_STRATUS) / 100.0); -const CLC_NETWORK_FRACTUS_PER_DAY = FLUX_PER_DAY * ((CC_BLOCK_REWARD * CC_FLUX_REWARD_FRACTUS) / 100.0); +//const CLC_NETWORK_FRACTUS_PER_DAY = FLUX_PER_DAY * ((CC_BLOCK_REWARD * CC_FLUX_REWARD_FRACTUS) / 100.0); /* ======= global stats ======= */ @@ -54,14 +54,14 @@ export function create_global_store() { cumulus: 0, nimbus: 0, stratus: 0, - fractus: 0, + //fractus: 0, total: 0 }, reward_projections: { cumulus: tier_global_projections(), nimbus: tier_global_projections(), stratus: tier_global_projections(), - fractus: tier_global_projections() + //fractus: tier_global_projections() }, wallet_amount_flux: 0, fluxos_latest_version: fluxos_version_desc(0, 0, 0), @@ -105,20 +105,22 @@ function fill_tier_g_projection(projectionTargetObj, nodeCount, networkFluxPerDa projectionTargetObj.apy = 100 * (((rewardPerPerson + pa_amount) * 365) / collateral); } +/* Removed fractus function fill_tier_g_projection_fractus(projectionTargetObj, nodeCount, networkFluxPerDay, collateral) { // pay freq = node_count * 2 minutes projectionTargetObj.pay_frequency = nodeCount * 2; - /* ---- */ + const rewardPerPerson = networkFluxPerDay / nodeCount; projectionTargetObj.payment_amount = rewardPerPerson * 1.15; // 15% Native flux - /* ---- */ + const pa_amount = (rewardPerPerson * CC_PA_REWARD) / 100.0; projectionTargetObj.pa_amount = pa_amount; projectionTargetObj.apy = 100 * (((rewardPerPerson * 1.15 + pa_amount) * 365) / collateral); } + */ function fill_rewards(gstore) { fill_tier_g_projection( @@ -139,12 +141,14 @@ function fill_rewards(gstore) { CLC_NETWORK_STRATUS_PER_DAY, CC_COLLATERAL_STRATUS ); + /* removed fractus fill_tier_g_projection_fractus( gstore.reward_projections.fractus, gstore.node_count.cumulus, CLC_NETWORK_FRACTUS_PER_DAY, CC_COLLATERAL_FRACTUS ); + */ } export function fetch_total_donations(walletAddress) { @@ -216,7 +220,7 @@ export async function fetch_total_network_utils(gstore) { store.utilized.ram_percentage = (store.utilized.ram / store.total.ram) * 100; store.utilized.ssd_percentage = (store.utilized.ssd / store.total.ssd) * 100; store.utilized.cores_percentage = (store.utilized.cores / store.total.cores) * 100; - store.node_count.fractus = await lazy_load_fractus_count(json.data); + //store.node_count.fractus = await lazy_load_fractus_count(json.data); } } @@ -318,7 +322,7 @@ export function wallet_health_full() { cumulus: wallet_health_entry(), nimbus: wallet_health_entry(), stratus: wallet_health_entry(), - fractus: wallet_health_entry(), + //fractus: wallet_health_entry(), total_nodes: 0 }; } @@ -601,7 +605,7 @@ export function fill_health(health, gstore) { fill_tier_health(health.nimbus, gstore.reward_projections.nimbus, gstore.flux_price_usd); fill_tier_health(health.stratus, gstore.reward_projections.stratus, gstore.flux_price_usd); // Fractus is parts of Cumulus tier - fill_tier_health(health.fractus, gstore.reward_projections.fractus, gstore.flux_price_usd); + //fill_tier_health(health.fractus, gstore.reward_projections.fractus, gstore.flux_price_usd); } export async function validateAddress(address) { @@ -669,6 +673,7 @@ export async function lazy_load_currency_rate() { /* ======================================================================= */ /* =========================== Fractus Count =========================== */ +/* async function lazy_load_fractus_count(benchmarks) { try { const storedFractusCount = await appStore.getItem(StoreKeys.FRACTUS_COUNT); diff --git a/client/src/persistance/store.js b/client/src/persistance/store.js index 890615e..5329908 100644 --- a/client/src/persistance/store.js +++ b/client/src/persistance/store.js @@ -9,7 +9,7 @@ window.appStore = appStore = localforage.createInstance({ }); export function initStore() { - appStore.removeItem(StoreKeys.FRACTUS_COUNT); + //appStore.removeItem(StoreKeys.FRACTUS_COUNT); appStore.removeItem(StoreKeys.CURRENCY_RATES); } @@ -18,7 +18,7 @@ let StoreKeys = {}; StoreKeys.ADDR_SEARCH_HISTORY = 'history_addrs'; StoreKeys.PRIVACY_MODE = 'privacy_mode'; StoreKeys.NOTABLE_NODES = 'notable_nodes'; -StoreKeys.FRACTUS_COUNT = 'fractus_count'; +//StoreKeys.FRACTUS_COUNT = 'fractus_count'; StoreKeys.CURRENCY_RATES = 'currency_rates'; StoreKeys.GLOBAL_STATS_STORE = 'global_stats_store';