From 7d670532cc8bf5a532cd6837d86fe2eb2da92a96 Mon Sep 17 00:00:00 2001 From: FazioNico Date: Wed, 6 Mar 2024 12:10:14 +0100 Subject: [PATCH 01/74] feat: Refactor container components and routing logic --- src/components/AppShell.tsx | 161 ++++++++++++------------------- src/components/Header.tsx | 24 ++--- src/components/Welcome.tsx | 25 +++-- src/containers/DefiContainer.tsx | 4 +- src/containers/EarnContainer.tsx | 2 +- src/containers/SwapContainer.tsx | 2 +- 6 files changed, 96 insertions(+), 122 deletions(-) diff --git a/src/components/AppShell.tsx b/src/components/AppShell.tsx index c3fbbb42..d8497735 100755 --- a/src/components/AppShell.tsx +++ b/src/components/AppShell.tsx @@ -2,13 +2,13 @@ import { IonApp, IonButton, IonRouterOutlet, setupIonicReact, IonText, IonChip, import { StatusBar, Style } from '@capacitor/status-bar'; import { IonReactRouter } from '@ionic/react-router'; -import { Redirect, Route } from 'react-router-dom'; -import { useEffect, useRef, useState } from 'react'; +import { Redirect, Route, useHistory } from 'react-router-dom'; +import { useEffect, useRef, useState, lazy, Suspense } from 'react'; import { Welcome } from './Welcome'; -import { SwapContainer } from '@/containers/SwapContainer'; +// import { SwapContainer } from '@/containers/SwapContainer'; import { FiatContainer } from '@/containers/FiatContainer'; -import { DefiContainer } from '@/containers/DefiContainer'; -import { EarnContainer } from '@/containers/EarnContainer'; +// import { DefiContainer } from '@/containers/DefiContainer'; +// import { EarnContainer } from '@/containers/EarnContainer'; import { Header } from './Header'; import MenuSlide from './MenuSlide'; import { LoaderProvider } from '@/context/LoaderContext'; @@ -19,7 +19,7 @@ import { initializeWeb3 } from '@/store/effects/web3.effects'; import { getMagic } from '@/servcies/magic'; import Store from '@/store'; import { getWeb3State } from '@/store/selectors'; - +import { useIonRouter, IonRoute } from '@ionic/react'; setupIonicReact({ mode: 'ios' }); @@ -32,19 +32,18 @@ window.matchMedia("(prefers-color-scheme: dark)").addListener(async (status) => } catch { } }); +const SwapContainer = lazy(() => import('@/containers/SwapContainer')); +const DefiContainer = lazy(() => import('@/containers/DefiContainer')); +const EarnContainer = lazy(() => import('@/containers/EarnContainer')); + const AppShell = () => { // get params from url `s=` const urlParams = new URLSearchParams(window.location.search); - let segment = urlParams.get("s") || "welcome"; + const {pathname = '/swap'} = window.location; + let segment = pathname.split('/')[1]|| 'swap' // urlParams.get("s") || "swap"; const {walletAddress, isMagicWallet } = Store.useState(getWeb3State); const [presentFiatWarning, dismissFiatWarning] = useIonAlert(); - // handle unsupported segment - // if (segment && ['welcome', 'swap', 'fiat', 'defi', 'earn'].indexOf(segment) === -1) { - // urlParams.delete('s'); - // segment = ''; - // // reload window with correct segment - // window.location.href = `${window.location.origin}?${urlParams.toString()}`; - // } + const isNotFound = (segment && ['swap', 'fiat', 'defi', 'earn'].indexOf(segment) === -1); // use state to handle segment change const [currentSegment, setSegment] = useState(segment); const handleSegmentChange = async (e: any) => { @@ -63,6 +62,7 @@ const AppShell = () => { return; }; setSegment(e.detail.value); + // router.push(`/${e.detail.value}`); }; const contentRef = useRef(null); const scrollToTop = () => { @@ -70,97 +70,62 @@ const AppShell = () => { contentRef.current.scrollToTop(); }; - const renderSwitch = (param: string) => { - switch (param) { - case "welcome": - return ; - case "swap": - return ; - case "fiat": - return ; - case "defi": - return ; - case "earn": { - return - } - default: - return currentSegment ? - ( - <> -
- -

{currentSegment.toUpperCase()}

-

- This feature is in development.
- Please check back later. -

-
- Coming soon -
- - ) - : (<>) - } - }; - useEffect(()=> { initializeWeb3(); }, []); return ( - + - (<> - - - -
- - - - - {renderSwitch(currentSegment)} - {currentSegment !== "welcome" && ( -
- - {`HexaLite v${process.env.NEXT_PUBLIC_APP_VERSION} - ${process.env.NEXT_PUBLIC_APP_BUILD_DATE}`} - -
- )} -
-
-
-
- - - )} /> - } /> - } exact={true} /> - + <> + + + + + + + + + + + + } /> + } /> + } exact={true} /> + <> + + {!isNotFound && ( +
+ )} + + Loading SwapContainer...}> + { currentSegment === 'swap' && } + + Loading EarnContainer...}> + { currentSegment === 'earn' && } + + Loading DefiContainer...}> + { currentSegment === 'defi' && } + + Loading NotFoundPage...}> + { currentSegment === isNotFound && } + + + + } /> diff --git a/src/components/Header.tsx b/src/components/Header.tsx index 276de2a0..0393df46 100644 --- a/src/components/Header.tsx +++ b/src/components/Header.tsx @@ -12,6 +12,7 @@ import { IonSegmentButton, IonText, IonToolbar, + useIonRouter, } from "@ionic/react"; import { ellipsisVerticalSharp, @@ -26,6 +27,7 @@ import { PointsPopover } from "./PointsPopover"; import { useRef } from "react"; import { getWeb3State } from "@/store/selectors"; import Store from "@/store"; +import { Link } from "react-router-dom"; const styleLogo = { // margin: '15px auto 20px', @@ -49,11 +51,11 @@ const styleChip = { export function Header({ currentSegment, - scrollToTop, + // scrollToTop, handleSegmentChange, }: { currentSegment: string; - scrollToTop: () => void; + // scrollToTop: () => void; handleSegmentChange: (e: { detail: { value: string } }) => void; }) { // define states @@ -61,12 +63,13 @@ export function Header({ const [points, setPoints] = useState(null); const [isPointsPopoverOpen, setIsPointsPopoverOpen] = useState(false); const pointsPopoverRef = useRef(null); + const router = useIonRouter(); const openPopover = (e: any) => { pointsPopoverRef.current!.event = e; setIsPointsPopoverOpen(true); }; useEffect(() => { - scrollToTop(); + // scrollToTop(); }, [currentSegment]); // render component @@ -76,24 +79,21 @@ export function Header({ {!currentSegment || currentSegment === "welcome" ? ( - <> + <>{currentSegment} ) : ( <> -
- handleSegmentChange({ detail: { value: "welcome" } }) - } + + }}> -
+
{ + console.log('>> router: ', router) + router.push(`/${e.detail.value}`) if (e.detail.value === 'fiat-segment') { handleSegmentChange({detail: {value: 'fiat'}}); return; diff --git a/src/components/Welcome.tsx b/src/components/Welcome.tsx index fdae1508..91653165 100644 --- a/src/components/Welcome.tsx +++ b/src/components/Welcome.tsx @@ -6,6 +6,7 @@ import { IonImg, IonRow, IonText, + useIonRouter, } from "@ionic/react"; import { logoGithub, @@ -24,6 +25,7 @@ export function Welcome({ handleSegmentChange: (e: { detail: { value: string } }) => void; }) { const { connectWallet } = Store.useState(getWeb3State); + const router = useIonRouter(); return ( @@ -57,9 +59,10 @@ export function Welcome({ size="large" color="gradient" style={{marginTop: '2rem'}} - onClick={(e) => - handleSegmentChange({ detail: { value: "swap" } }) - } + onClick={(e) => { + router.push("swap"); + handleSegmentChange({ detail: { value: "swap" } }); + }} > Launch App @@ -127,6 +130,7 @@ export function Welcome({ (e.target as HTMLElement).innerHTML = "Connecting..."; try { await connectWallet(); + router.push("fiat"); handleSegmentChange({ detail: { value: "fiat" } }); } catch (error) { console.error("[ERROR] handleConnect:", error); @@ -189,9 +193,10 @@ export function Welcome({ + onClick={(e) =>{ + router.push("defi"); handleSegmentChange({ detail: { value: "defi" } }) - } + }} > Start Deposit @@ -243,9 +248,10 @@ export function Welcome({ + onClick={(e) =>{ + router.push("earn"); handleSegmentChange({ detail: { value: "earn" } }) - } + }} > Start Earning @@ -664,9 +670,10 @@ export function Welcome({ className="ion-margin-top" size="large" color="gradient" - onClick={(e) => + onClick={(e) =>{ + router.push("swap"); handleSegmentChange({ detail: { value: "swap" } }) - } + }} > Launch App diff --git a/src/containers/DefiContainer.tsx b/src/containers/DefiContainer.tsx index 2e265ea6..4629575f 100644 --- a/src/containers/DefiContainer.tsx +++ b/src/containers/DefiContainer.tsx @@ -34,11 +34,11 @@ export const minBaseTokenRemainingByNetwork: Record = { [ChainId.arbitrum_one]: "0.0001", }; -export const DefiContainer = ({ +export default function DefiContainer({ handleSegmentChange, }: { handleSegmentChange: (e: { detail: { value: string } }) => void; -}) => { +}) { const { walletAddress } = Store.useState(getWeb3State); const userSummaryAndIncentivesGroup = Store.useState(getUserSummaryAndIncentivesGroupState); const poolGroups = Store.useState(getPoolGroupsState); diff --git a/src/containers/EarnContainer.tsx b/src/containers/EarnContainer.tsx index 6efbcd4b..cc0459c0 100644 --- a/src/containers/EarnContainer.tsx +++ b/src/containers/EarnContainer.tsx @@ -31,7 +31,7 @@ const LSTInfo = () => { ); } -export function EarnContainer() { +export default function EarnContainer() { return ( diff --git a/src/containers/SwapContainer.tsx b/src/containers/SwapContainer.tsx index a46783c1..c780fdf8 100644 --- a/src/containers/SwapContainer.tsx +++ b/src/containers/SwapContainer.tsx @@ -26,7 +26,7 @@ import { PointsData, addAddressPoints } from "@/servcies/datas.service"; import Store from "@/store"; import { getWeb3State } from "@/store/selectors"; -export function SwapContainer() { +export default function SwapContainer() { const { web3Provider, currentNetwork, From c5d02a557e13b6d9bcba7bd990416a2dfa5215d7 Mon Sep 17 00:00:00 2001 From: FazioNico Date: Wed, 6 Mar 2024 12:48:22 +0100 Subject: [PATCH 02/74] refactor: Add isMobilePWADevice check for mobile UI --- src/components/AppShell.tsx | 117 ++++++++++++++++++++---------------- 1 file changed, 64 insertions(+), 53 deletions(-) diff --git a/src/components/AppShell.tsx b/src/components/AppShell.tsx index d8497735..b97ce693 100755 --- a/src/components/AppShell.tsx +++ b/src/components/AppShell.tsx @@ -20,6 +20,7 @@ import { getMagic } from '@/servcies/magic'; import Store from '@/store'; import { getWeb3State } from '@/store/selectors'; import { useIonRouter, IonRoute } from '@ionic/react'; +import { isPlatform } from '@ionic/core'; setupIonicReact({ mode: 'ios' }); @@ -36,9 +37,10 @@ const SwapContainer = lazy(() => import('@/containers/SwapContainer')); const DefiContainer = lazy(() => import('@/containers/DefiContainer')); const EarnContainer = lazy(() => import('@/containers/EarnContainer')); +const isMobilePWADevice = Boolean(isPlatform('pwa') && !isPlatform('desktop')); + const AppShell = () => { // get params from url `s=` - const urlParams = new URLSearchParams(window.location.search); const {pathname = '/swap'} = window.location; let segment = pathname.split('/')[1]|| 'swap' // urlParams.get("s") || "swap"; const {walletAddress, isMagicWallet } = Store.useState(getWeb3State); @@ -76,58 +78,67 @@ const AppShell = () => { return ( - - - <> - - - - - - - - - - - - } /> - } /> - } exact={true} /> - <> - - {!isNotFound && ( -
- )} - - Loading SwapContainer...}> - { currentSegment === 'swap' && } - - Loading EarnContainer...}> - { currentSegment === 'earn' && } - - Loading DefiContainer...}> - { currentSegment === 'defi' && } - - Loading NotFoundPage...}> - { currentSegment === isNotFound && } - - - - } /> - - + {!isMobilePWADevice && ( + + + <> + + + + + + + + + + + + } /> + } /> + } exact={true} /> + <> + + {!isNotFound && ( +
+ )} + + Loading SwapContainer...}> + { currentSegment === 'swap' && } + + Loading EarnContainer...}> + { currentSegment === 'earn' && } + + Loading DefiContainer...}> + { currentSegment === 'defi' && } + + Loading NotFoundPage...}> + { currentSegment === isNotFound && } + + + + } /> + + + )} + {isMobilePWADevice && ( + + + {/* Here use mobile UI */} + + + )} ); From 13ddb47ccaaee7e0e75859238c0b942fbb4cb612 Mon Sep 17 00:00:00 2001 From: FazioNico Date: Wed, 6 Mar 2024 13:12:34 +0100 Subject: [PATCH 03/74] refactor: add redirect to different routes based on platform --- src/components/AppShell.tsx | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/components/AppShell.tsx b/src/components/AppShell.tsx index b97ce693..1dd3cb92 100755 --- a/src/components/AppShell.tsx +++ b/src/components/AppShell.tsx @@ -105,7 +105,7 @@ const AppShell = () => { } /> } /> - } exact={true} /> + } exact={true} /> <> {!isNotFound && ( @@ -136,6 +136,7 @@ const AppShell = () => { {/* Here use mobile UI */} +

hi

)} From da84fe3ececc6c6a3c6b7d7eef004550272de951 Mon Sep 17 00:00:00 2001 From: FazioNico Date: Sat, 9 Mar 2024 09:16:39 +0100 Subject: [PATCH 04/74] refactor: build wallet page and modals --- package-lock.json | 15 +- package.json | 2 + public/assets/icons/bank.svg | 3 + src/components/AppShell.tsx | 272 +++++++---- src/components/mobile/MobileDepositModal.tsx | 121 +++++ src/components/mobile/MobileEarnModal.tsx | 168 +++++++ src/components/mobile/MobileSwapModal.tsx | 186 ++++++++ .../mobile/MobileTokenDetailModal.tsx | 51 ++ src/components/mobile/MobileTransferModal.tsx | 21 + .../mobile/WalletComponent.module.css | 12 + src/components/mobile/WalletComponent.tsx | 434 ++++++++++++++++++ src/components/mobile/WelcomeComponent.tsx | 38 ++ src/servcies/ankr.service.ts | 2 +- src/servcies/lifi.service.ts | 2 +- src/servcies/qrcode.service.ts | 12 + src/styles/global.scss | 18 + 16 files changed, 1253 insertions(+), 104 deletions(-) create mode 100644 public/assets/icons/bank.svg create mode 100644 src/components/mobile/MobileDepositModal.tsx create mode 100644 src/components/mobile/MobileEarnModal.tsx create mode 100644 src/components/mobile/MobileSwapModal.tsx create mode 100644 src/components/mobile/MobileTokenDetailModal.tsx create mode 100644 src/components/mobile/MobileTransferModal.tsx create mode 100644 src/components/mobile/WalletComponent.module.css create mode 100644 src/components/mobile/WalletComponent.tsx create mode 100644 src/components/mobile/WelcomeComponent.tsx create mode 100644 src/servcies/qrcode.service.ts diff --git a/package-lock.json b/package-lock.json index 51371d72..39a53d9a 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,12 +1,12 @@ { "name": "hexa-lite", - "version": "1.0.5", + "version": "1.0.8", "lockfileVersion": 3, "requires": true, "packages": { "": { "name": "hexa-lite", - "version": "1.0.5", + "version": "1.0.8", "dependencies": { "@0xsquid/widget": "^1.6.23", "@aave/contract-helpers": "^1.21.1", @@ -46,6 +46,7 @@ "magic-sdk": "^21.4.0", "next": "14.0.3", "pullstate": "1.25", + "qrcode": "^1.5.3", "react": "^18.2.0", "react-dom": "^18.2.0", "react-router": "^5.3.4", @@ -69,6 +70,7 @@ "@types/cors": "^2.8.17", "@types/jest": "^27.5.2", "@types/node": "^16.18.36", + "@types/qrcode": "^1.5.5", "@types/react": "^18.2.45", "@types/react-dom": "^18.2.17", "@types/swagger-ui-react": "^4.18.3", @@ -9357,6 +9359,15 @@ "resolved": "https://registry.npmjs.org/@types/prop-types/-/prop-types-15.7.11.tgz", "integrity": "sha512-ga8y9v9uyeiLdpKddhxYQkxNDrfvuPrlFb0N1qnZZByvcElJaXthF1UhvCh9TLWJBEHeNtdnbysW7Y6Uq8CVng==" }, + "node_modules/@types/qrcode": { + "version": "1.5.5", + "resolved": "https://registry.npmjs.org/@types/qrcode/-/qrcode-1.5.5.tgz", + "integrity": "sha512-CdfBi/e3Qk+3Z/fXYShipBT13OJ2fDO2Q2w5CIP5anLTLIndQG9z6P1cnm+8zCWSpm5dnxMFd/uREtb0EXuQzg==", + "dev": true, + "dependencies": { + "@types/node": "*" + } + }, "node_modules/@types/ramda": { "version": "0.29.9", "resolved": "https://registry.npmjs.org/@types/ramda/-/ramda-0.29.9.tgz", diff --git a/package.json b/package.json index f25860ab..c075bd2a 100644 --- a/package.json +++ b/package.json @@ -52,6 +52,7 @@ "magic-sdk": "^21.4.0", "next": "14.0.3", "pullstate": "1.25", + "qrcode": "^1.5.3", "react": "^18.2.0", "react-dom": "^18.2.0", "react-router": "^5.3.4", @@ -75,6 +76,7 @@ "@types/cors": "^2.8.17", "@types/jest": "^27.5.2", "@types/node": "^16.18.36", + "@types/qrcode": "^1.5.5", "@types/react": "^18.2.45", "@types/react-dom": "^18.2.17", "@types/swagger-ui-react": "^4.18.3", diff --git a/public/assets/icons/bank.svg b/public/assets/icons/bank.svg new file mode 100644 index 00000000..f8e80613 --- /dev/null +++ b/public/assets/icons/bank.svg @@ -0,0 +1,3 @@ + + + diff --git a/src/components/AppShell.tsx b/src/components/AppShell.tsx index 1dd3cb92..66bfdab5 100755 --- a/src/components/AppShell.tsx +++ b/src/components/AppShell.tsx @@ -1,68 +1,93 @@ -import { IonApp, IonButton, IonRouterOutlet, setupIonicReact, IonText, IonChip, IonContent, IonGrid, IonRow, IonCol, IonPage, useIonModal, IonIcon, useIonAlert } from '@ionic/react'; -import { StatusBar, Style } from '@capacitor/status-bar'; +import { + IonApp, + IonButton, + IonRouterOutlet, + setupIonicReact, + IonText, + IonChip, + IonContent, + IonGrid, + IonRow, + IonCol, + IonPage, + useIonModal, + IonIcon, + useIonAlert, + IonImg, +} from "@ionic/react"; +import { StatusBar, Style } from "@capacitor/status-bar"; -import { IonReactRouter } from '@ionic/react-router'; -import { Redirect, Route, useHistory } from 'react-router-dom'; -import { useEffect, useRef, useState, lazy, Suspense } from 'react'; -import { Welcome } from './Welcome'; +import { IonReactRouter } from "@ionic/react-router"; +import { Redirect, Route, useHistory } from "react-router-dom"; +import { useEffect, useRef, useState, lazy, Suspense } from "react"; +import { Welcome } from "./Welcome"; // import { SwapContainer } from '@/containers/SwapContainer'; -import { FiatContainer } from '@/containers/FiatContainer'; +// import { FiatContainer } from "@/containers/FiatContainer"; // import { DefiContainer } from '@/containers/DefiContainer'; // import { EarnContainer } from '@/containers/EarnContainer'; -import { Header } from './Header'; -import MenuSlide from './MenuSlide'; -import { LoaderProvider } from '@/context/LoaderContext'; -import { Leaderboard } from '@/containers/LeaderboardContainer'; -import { NotFoundPage } from '@/containers/NotFoundPage'; -import PwaInstall from './PwaInstall'; -import { initializeWeb3 } from '@/store/effects/web3.effects'; -import { getMagic } from '@/servcies/magic'; -import Store from '@/store'; -import { getWeb3State } from '@/store/selectors'; -import { useIonRouter, IonRoute } from '@ionic/react'; -import { isPlatform } from '@ionic/core'; +import { Header } from "./Header"; +import MenuSlide from "./MenuSlide"; +import { LoaderProvider } from "@/context/LoaderContext"; +import { Leaderboard } from "@/containers/LeaderboardContainer"; +import { NotFoundPage } from "@/containers/NotFoundPage"; +import PwaInstall from "./PwaInstall"; +import { initializeWeb3 } from "@/store/effects/web3.effects"; +import { getMagic } from "@/servcies/magic"; +import Store from "@/store"; +import { getWeb3State } from "@/store/selectors"; +import { IonRoute } from "@ionic/react"; +import { isPlatform } from "@ionic/core"; -setupIonicReact({ mode: 'ios' }); +setupIonicReact({ mode: "ios" }); -window.matchMedia("(prefers-color-scheme: dark)").addListener(async (status) => { - console.log(`[INFO] Dark mode is ${status.matches ? 'enabled' : 'disabled'}`); - try { - await StatusBar.setStyle({ - style: status.matches ? Style.Dark : Style.Light, - }); - } catch { } -}); +window + .matchMedia("(prefers-color-scheme: dark)") + .addListener(async (status) => { + console.log( + `[INFO] Dark mode is ${status.matches ? "enabled" : "disabled"}` + ); + try { + await StatusBar.setStyle({ + style: status.matches ? Style.Dark : Style.Light, + }); + } catch {} + }); -const SwapContainer = lazy(() => import('@/containers/SwapContainer')); -const DefiContainer = lazy(() => import('@/containers/DefiContainer')); -const EarnContainer = lazy(() => import('@/containers/EarnContainer')); +const SwapContainer = lazy(() => import("@/containers/SwapContainer")); +const DefiContainer = lazy(() => import("@/containers/DefiContainer")); +const EarnContainer = lazy(() => import("@/containers/EarnContainer")); +const MobileWalletComponent = lazy(() => import("@/components/mobile/WalletComponent")); +const MobileWelcomeComponent = lazy(() => import("@/components/mobile/WelcomeComponent")); -const isMobilePWADevice = Boolean(isPlatform('pwa') && !isPlatform('desktop')); +const isMobilePWADevice = true //Boolean(isPlatform('pwa') && !isPlatform('desktop')); const AppShell = () => { // get params from url `s=` - const {pathname = '/swap'} = window.location; - let segment = pathname.split('/')[1]|| 'swap' // urlParams.get("s") || "swap"; - const {walletAddress, isMagicWallet } = Store.useState(getWeb3State); + const { pathname = "/swap" } = window.location; + let segment = pathname.split("/")[1] || "swap"; // urlParams.get("s") || "swap"; + const { walletAddress, isMagicWallet } = Store.useState(getWeb3State); const [presentFiatWarning, dismissFiatWarning] = useIonAlert(); - const isNotFound = (segment && ['swap', 'fiat', 'defi', 'earn'].indexOf(segment) === -1); + + const isNotFound = + segment && ["swap", "fiat", "defi", "earn"].indexOf(segment) === -1; // use state to handle segment change const [currentSegment, setSegment] = useState(segment); const handleSegmentChange = async (e: any) => { - if (e.detail.value === 'fiat'){ - if (walletAddress && walletAddress !== '' && isMagicWallet) { + if (e.detail.value === "fiat") { + if (walletAddress && walletAddress !== "" && isMagicWallet) { const magic = await getMagic(); magic.wallet.showOnRamp(); } else { await presentFiatWarning({ - header: 'Information', - message: 'Connect with e-mail or social login to enable buy crypto with fiat.', - buttons: ['OK'], - cssClass: 'modalAlert' + header: "Information", + message: + "Connect with e-mail or social login to enable buy crypto with fiat.", + buttons: ["OK"], + cssClass: "modalAlert", }); - }; + } return; - }; + } setSegment(e.detail.value); // router.push(`/${e.detail.value}`); }; @@ -72,73 +97,120 @@ const AppShell = () => { contentRef.current.scrollToTop(); }; - useEffect(()=> { + useEffect(() => { initializeWeb3(); }, []); - + return ( {!isMobilePWADevice && ( - + - <> - - - - - - - - - - - - } /> + ( + <> + + + + + + + + + + + + + )} + /> } /> - } exact={true} /> - <> - - {!isNotFound && ( -
- )} - - Loading SwapContainer...}> - { currentSegment === 'swap' && } - - Loading EarnContainer...}> - { currentSegment === 'earn' && } - - Loading DefiContainer...}> - { currentSegment === 'defi' && } - - Loading NotFoundPage...}> - { currentSegment === isNotFound && } - - - - } /> + ( + + )} + exact={true} + /> + ( + <> + + {!isNotFound && ( +
+ )} + + Loading SwapContainer...}> + {currentSegment === "swap" && } + + Loading EarnContainer...}> + {currentSegment === "earn" && } + + Loading DefiContainer...}> + {currentSegment === "defi" && ( + + )} + + Loading NotFoundPage...}> + {currentSegment === isNotFound && } + + + + + )} + /> )} + + {/* Here use mobile UI */} {isMobilePWADevice && ( - - - {/* Here use mobile UI */} -

hi

-
-
+ + + !walletAddress ? + ( + Loading MobileWelcomeComponent...}> + + + ) : + ( + Loading MobileWalletComponent...}> + + + ) + } + /> + ( + + )} + exact={true} + /> + + )} diff --git a/src/components/mobile/MobileDepositModal.tsx b/src/components/mobile/MobileDepositModal.tsx new file mode 100644 index 00000000..5c9a78bc --- /dev/null +++ b/src/components/mobile/MobileDepositModal.tsx @@ -0,0 +1,121 @@ +import { CHAIN_AVAILABLES } from "@/constants/chains"; +import { getQrcodeAsSVG } from "@/servcies/qrcode.service"; +import Store from "@/store"; +import { getWeb3State } from "@/store/selectors"; +import { + IonButton, + IonCol, + IonContent, + IonFooter, + IonGrid, + IonHeader, + IonIcon, + IonRow, + IonText, + IonToolbar, +} from "@ionic/react"; +import { useEffect, useState } from "react"; +import { scan } from 'ionicons/icons'; + +export const MobileDepositModal = () => { + const { + web3Provider, + currentNetwork, + walletAddress, + connectWallet, + disconnectWallet, + switchNetwork, + } = Store.useState(getWeb3State); + const [qrCodeSVG, setQrCodeSVG] = useState(null); + + useEffect(() => { + if (!walletAddress) { + return; + } + getQrcodeAsSVG(walletAddress).then((url) => { + // convet string to SVG + const svg = new DOMParser().parseFromString( + url as string, + "image/svg+xml" + ); + console.log(svg.documentElement); + setQrCodeSVG(svg.documentElement as unknown as SVGElement); + }); + }, [walletAddress]); + + return ( + <> + + + + + + +

Deposit

+
+
+
+
+
+
+ + +

+ + {walletAddress} + +

+
+ + + + +
+ + + + +

+ + You can send token to all this following networks that + are available to this address + +

+
+
+ {CHAIN_AVAILABLES.filter((c) => c.type === "evm").map( + (chain, index) => ( + + {chain.name} + + ) + )} +
+
+ + + {/* + + + + Scan QR Code + + + */} + + + + ); +}; diff --git a/src/components/mobile/MobileEarnModal.tsx b/src/components/mobile/MobileEarnModal.tsx new file mode 100644 index 00000000..ca18da55 --- /dev/null +++ b/src/components/mobile/MobileEarnModal.tsx @@ -0,0 +1,168 @@ +import { + IonCol, + IonContent, + IonGrid, + IonHeader, + IonRow, + IonSegment, + IonSegmentButton, + IonSkeletonText, + IonText, + IonToolbar, +} from "@ionic/react"; +import { useEffect, useMemo, useState } from "react"; +import { MarketList } from "../MarketsList"; +import { + initializePools, + initializeUserSummary, +} from "@/store/effects/pools.effect"; +import Store from "@/store"; +import { + getPoolGroupsState, + getUserSummaryAndIncentivesGroupState, + getWeb3State, +} from "@/store/selectors"; +import { patchPoolsState } from "@/store/actions"; +import { CHAIN_AVAILABLES } from "@/constants/chains"; +import { getReadableValue } from "@/utils/getReadableValue"; + +export const MobileEarnModal = () => { + const [segment, setSegment] = useState("loan"); + const { walletAddress } = Store.useState(getWeb3State); + const userSummaryAndIncentivesGroup = Store.useState( + getUserSummaryAndIncentivesGroupState + ); + const poolGroups = Store.useState(getPoolGroupsState); + + const totalTVL = useMemo(() => { + return poolGroups + .flatMap((g) => g.pools) + .reduce( + (prev, current) => prev + Number(current.totalLiquidityUSD || 0), + 0 + ); + }, [poolGroups]); + + useEffect(() => { + if (poolGroups.length > 0 && totalTVL > 0) { + return; + } + initializePools(); + }, []); + + useEffect(() => { + if (!walletAddress) { + patchPoolsState({ userSummaryAndIncentivesGroup: null }); + return; + } + if (!userSummaryAndIncentivesGroup && walletAddress) { + initializeUserSummary(walletAddress); + } + }, [walletAddress, userSummaryAndIncentivesGroup]); + + return ( + <> + + + + setSegment(() => "loan")} + > + Loan market + + setSegment(() => "earn")} + > + Earn + + + + + + {segment === "loan" && ( + + + + +

Available Markets

+
+ +

+ + Connect to DeFi liquidity protocols and access to{" "} + {poolGroups.length > 0 ? ( + poolGroups.length + ) : ( + + )}{" "} + open markets across{" "} + { + CHAIN_AVAILABLES.filter( + (chain) => + chain.type === "evm" || chain.type === "solana" + ).length + }{" "} + networks, borrow assets using your crypto as collateral + and earn interest without any restrictions or censorship + by providing liquidity over a + + + {} + {(totalTVL || 0) > 0 ? ( + "$" + getReadableValue(totalTVL || 0) + ) : ( + + )}{" "} + TVL + +

+
+
+
+ + + {}} + /> + + +
+ )} +
+ + ); +}; diff --git a/src/components/mobile/MobileSwapModal.tsx b/src/components/mobile/MobileSwapModal.tsx new file mode 100644 index 00000000..bc22b0a5 --- /dev/null +++ b/src/components/mobile/MobileSwapModal.tsx @@ -0,0 +1,186 @@ +import { + IonCol, + IonContent, + IonGrid, + IonRow, + IonText, + useIonToast, +} from "@ionic/react"; +import { + HiddenUI, + RouteExecutionUpdate, + WidgetConfig, + WidgetEvent, + useWidgetEvents, +} from "@lifi/widget"; +import type { Route } from "@lifi/sdk"; +import { useEffect } from "react"; +import { PointsData, addAddressPoints } from "@/servcies/datas.service"; +import Store from "@/store"; +import { getWeb3State } from "@/store/selectors"; +import { CHAIN_DEFAULT } from "@/constants/chains"; +import { ethers } from "ethers"; +import { LiFiWidgetDynamic } from "../LiFiWidgetDynamic"; +import { useLoader } from "@/context/LoaderContext"; +import { LIFI_CONFIG } from "../../servcies/lifi.service"; +import { IAsset } from "@/interfaces/asset.interface"; + +export const MobileSwapModal = (props?: { + name: string; + symbol: string; + priceUsd: number; + balance: number; + balanceUsd: number; + thumbnail: string; + assets: IAsset[]; +}) => { + const { + web3Provider, + currentNetwork, + walletAddress, + connectWallet, + disconnectWallet, + switchNetwork, + } = Store.useState(getWeb3State); + const widgetEvents = useWidgetEvents(); + const { display: displayLoader, hide: hideLoader } = useLoader(); + const toastContext = useIonToast(); + const presentToast = toastContext[0]; + const dismissToast = toastContext[1]; + + useEffect(() => { + const onRouteExecutionStarted = (route: Route) => { + console.log("[INFO] onRouteExecutionStarted fired."); + }; + const onRouteExecutionCompleted = async (route: Route) => { + console.log("[INFO] onRouteExecutionCompleted fired.", route); + const data: PointsData = { + route, + actionType: "swap", + }; + if (!walletAddress) { + return; + } + await addAddressPoints(walletAddress, data); + }; + const onRouteExecutionFailed = (update: RouteExecutionUpdate) => { + console.log("[INFO] onRouteExecutionFailed fired.", update); + }; + + widgetEvents.on(WidgetEvent.RouteExecutionStarted, onRouteExecutionStarted); + widgetEvents.on( + WidgetEvent.RouteExecutionCompleted, + onRouteExecutionCompleted + ); + widgetEvents.on(WidgetEvent.RouteExecutionFailed, onRouteExecutionFailed); + + return () => widgetEvents.all.clear(); + }, [widgetEvents]); + + const signer = + web3Provider instanceof ethers.providers.Web3Provider && walletAddress + ? web3Provider?.getSigner() + : undefined; + // load environment config + const widgetConfig: WidgetConfig = { + ...LIFI_CONFIG, + containerStyle: { + border: `0px solid rgba(var(--ion-color-primary-rgb), 0.4);`, + }, + hiddenUI: [ + ...(LIFI_CONFIG?.hiddenUI as any[]), + HiddenUI.History, + HiddenUI.WalletMenu, + // HiddenUI.DrawerButton, + // HiddenUI.DrawerCloseButton + ], + fee: 0, // set fee to 0 for main swap feature + walletManagement: { + connect: async () => { + try { + await displayLoader(); + await connectWallet(); + if (!(web3Provider instanceof ethers.providers.Web3Provider)) { + throw new Error( + "[ERROR] Only support ethers.providers.Web3Provider" + ); + } + const signer = web3Provider?.getSigner(); + console.log("signer", signer); + if (!signer) { + throw new Error("Signer not found"); + } + // return signer instance from JsonRpcSigner + hideLoader(); + return signer; + } catch (error: any) { + // Log any errors that occur during the connection process + hideLoader(); + await presentToast({ + message: `[ERROR] Connect Failed with reason: ${ + error?.message || error + }`, + color: "danger", + buttons: [ + { + text: "x", + role: "cancel", + handler: () => { + dismissToast(); + }, + }, + ], + }); + throw new Error("handleConnect:" + error?.message); + } + }, + disconnect: async () => { + try { + displayLoader(); + await disconnectWallet(); + hideLoader(); + } catch (error: any) { + // Log any errors that occur during the disconnection process + console.log("handleDisconnect:", error); + hideLoader(); + await presentToast({ + message: `[ERROR] Disconnect Failed with reason: ${ + error?.message || error + }`, + color: "danger", + buttons: [ + { + text: "x", + role: "cancel", + handler: () => { + dismissToast(); + }, + }, + ], + }); + } + }, + signer, + }, + // set source chain to Polygon + fromChain: props?.assets?.[0]?.chain?.id || CHAIN_DEFAULT.id, + // set destination chain to Optimism + toChain: currentNetwork || CHAIN_DEFAULT.id, + // set source token to ETH (Ethereum) + fromToken: + props?.assets?.[0]?.contractAddress || + "0x0000000000000000000000000000000000000000", + }; + + return ( + + + + + + + + + + ); +}; diff --git a/src/components/mobile/MobileTokenDetailModal.tsx b/src/components/mobile/MobileTokenDetailModal.tsx new file mode 100644 index 00000000..095f64ed --- /dev/null +++ b/src/components/mobile/MobileTokenDetailModal.tsx @@ -0,0 +1,51 @@ +import { IAsset } from "@/interfaces/asset.interface"; +import { getAssetIconUrl } from "@/utils/getAssetIconUrl"; +import { IonAvatar, IonCol, IonContent, IonGrid, IonRow, IonText } from "@ionic/react" + +export const MobileTokenDetailModal = (props: { + name: string; symbol: string; priceUsd: number; balance: number; balanceUsd: number; thumbnail: string; assets: IAsset[]; + })=> { + return ( + + + + + + {props.symbol} { + ( + event.target as any + ).src = `https://images.placeholders.dev/?width=42&height=42&text=${props.symbol}&bgColor=%23000000&textColor=%23182449`; + }} + /> + + +

{props.symbol}

+
+ +

{props.name}

+
+
+ + +

$ {props.balanceUsd.toFixed(2)}

+

{props.balance.toFixed(6)}

+
+
+
+
+
+ ); +} \ No newline at end of file diff --git a/src/components/mobile/MobileTransferModal.tsx b/src/components/mobile/MobileTransferModal.tsx new file mode 100644 index 00000000..8b171ab3 --- /dev/null +++ b/src/components/mobile/MobileTransferModal.tsx @@ -0,0 +1,21 @@ +import { IAsset } from "@/interfaces/asset.interface"; +import { IonCol, IonContent, IonGrid, IonRow, IonText } from "@ionic/react"; + +export const MobileTransferModal = (props: { + name: string; symbol: string; priceUsd: number; balance: number; balanceUsd: number; thumbnail: string; assets: IAsset[]; + }) => { + return ( + + + + + +

Send token

+
+
+ xxx +
+
+
+ ); +}; diff --git a/src/components/mobile/WalletComponent.module.css b/src/components/mobile/WalletComponent.module.css new file mode 100644 index 00000000..450eebe6 --- /dev/null +++ b/src/components/mobile/WalletComponent.module.css @@ -0,0 +1,12 @@ +.header { + /* background: transparent; */ +} + +.stickyWrapper { + position: relative; + +} +.stickyElement { + position: sticky; + top: 0; +} \ No newline at end of file diff --git a/src/components/mobile/WalletComponent.tsx b/src/components/mobile/WalletComponent.tsx new file mode 100644 index 00000000..232a87eb --- /dev/null +++ b/src/components/mobile/WalletComponent.tsx @@ -0,0 +1,434 @@ +import Store from "@/store"; +import { getWeb3State } from "@/store/selectors"; +import { getReadableValue } from "@/utils/getReadableValue"; +import { + IonAvatar, + IonButton, + IonButtons, + IonCard, + IonCardContent, + IonCol, + IonContent, + IonFab, + IonFabButton, + IonGrid, + IonHeader, + IonIcon, + IonItem, + IonItemOption, + IonItemOptions, + IonItemSliding, + IonLabel, + IonList, + IonPage, + IonRow, + IonSearchbar, + IonText, + IonTitle, + IonToolbar, + ModalOptions, + useIonAlert, + useIonModal, + useIonRouter, +} from "@ionic/react"; +import { paperPlane, download, repeat, card } from "ionicons/icons"; +import { ComponentRef, useMemo, useState } from "react"; +import styleRule from "./WalletComponent.module.css"; +import { IAsset } from "@/interfaces/asset.interface"; +import { MobileDepositModal } from "./MobileDepositModal"; +import { HookOverlayOptions } from "@ionic/react/dist/types/hooks/HookOverlayOptions"; +import { MobileTransferModal } from "./MobileTransferModal"; +import { getMagic } from "@/servcies/magic"; +import { MobileSwapModal } from "./MobileSwapModal"; +import { MobileEarnModal } from "./MobileEarnModal"; +import { MobileTokenDetailModal } from "./MobileTokenDetailModal"; +import { getAssetIconUrl } from "@/utils/getAssetIconUrl"; + +const style = { + fullHeight: { + height: "100%", + }, + fab: { + display: "contents", + }, +}; + +export default function WalletComponent() { + const { walletAddress, isMagicWallet, assets } = Store.useState(getWeb3State); + const [presentAlert, dismissAlert] = useIonAlert(); + const [filterBy, setFilterBy] = useState(null); + const [selectedTokenDetail, setSelectedTokenDetail] = useState<{ + name: string; + symbol: string; + priceUsd: number; + balance: number; + balanceUsd: number; + thumbnail: string; + assets: IAsset[]; + } | null>(null); + const [presentTransfer, dismissTransfer] = useIonModal(MobileTransferModal, { + ...selectedTokenDetail, + }); + const [presentDeposit, dismissDeposit] = useIonModal(MobileDepositModal, { + ...selectedTokenDetail, + }); + const [presentSwap, dismissSwap] = useIonModal(MobileSwapModal, { + ...selectedTokenDetail, + }); + const [presentTokenDetail, dismissTokenDetail] = useIonModal( + MobileTokenDetailModal, + { + ...selectedTokenDetail, + } + ); + const [presentEarn, dismissEarn] = useIonModal(MobileEarnModal, {}); + + const modalOpts: Omit & + HookOverlayOptions = { + initialBreakpoint: 0.98, + breakpoints: [0, 0.98], + }; + // const assets: any[] = []; + const router = useIonRouter(); + const balance = useMemo(() => { + if (!assets) { + return 0; + } + return assets.reduce((acc, asset) => { + return acc + asset.balanceUsd; + }, 0); + }, [assets]); + + const assetGroup = useMemo( + () => + assets.reduce((acc, asset) => { + // check existing asset symbol + const index = acc.findIndex((a) => a.symbol === asset.symbol); + if (index !== -1) { + acc[index].balance += asset.balance; + acc[index].balanceUsd += asset.balanceUsd; + acc[index].assets.push(asset); + } else { + acc.push({ + name: asset.name, + symbol: asset.symbol, + priceUsd: asset.priceUsd, + thumbnail: asset.thumbnail, + balance: asset.balance, + balanceUsd: asset.balanceUsd, + assets: [asset], + }); + } + return acc; + }, [] as { name: string; symbol: string; priceUsd: number; balance: number; balanceUsd: number; thumbnail: string; assets: IAsset[] }[]), + [assets] + ); + + return ( + + + + + Wallet + + $ {balance.toFixed(2)} + + + + + + + + + + +
+ +

Wallet

+

+ $ {getReadableValue(balance)} +

+
+
+
+
+ + + + presentTransfer(modalOpts)} + > + + + + + + + presentDeposit(modalOpts)} + > + + + + + + + presentSwap(modalOpts)} + > + + + + + + + presentEarn(modalOpts)} + > + + + + + + {assetGroup.length > 0 && ( + + +
+ { + console.log(event); + setFilterBy(event.detail.value || null); + }} + > +
+
+
+ )} +
+
+
+ + + {balance <= 0 && ( + + + { + if ( + walletAddress && + walletAddress !== "" && + isMagicWallet + ) { + const magic = await getMagic(); + magic.wallet.showOnRamp(); + } else { + await presentAlert({ + header: "Information", + message: + "Connect with e-mail or social login to enable buy crypto with fiat.", + buttons: ["OK"], + cssClass: "modalAlert", + }); + } + }} + > + + + + + + + + +

Buy crypto

+

+ You have to get ETH to use your wallet. Buy with + credit card or with Apple Pay +

+
+
+
+
+
+
+ + presentDeposit(modalOpts)} + > + + + + + + + + +

Deposit assets

+

+ You have to get ETH to use your wallet. Buy with + credit card or with Apple Pay +

+
+
+
+
+
+
+
+
+ )} + + {balance > 0 && ( + + + + {assetGroup + .filter((asset) => + filterBy + ? asset.symbol + .toLowerCase() + .includes(filterBy.toLowerCase()) + : true + ) + .sort((a, b) => (a.balanceUsd > b.balanceUsd ? -1 : 1)) + .map((asset, index) => ( + + { + setSelectedTokenDetail(() => asset); + presentTokenDetail({ + ...modalOpts, + onDidDismiss: () => setSelectedTokenDetail(null), + }); + }} + > + + {asset.symbol} { + ( + event.target as any + ).src = `https://images.placeholders.dev/?width=42&height=42&text=${asset.symbol}&bgColor=%23000000&textColor=%23182449`; + }} + /> + + + +

{asset.symbol}

+
+ +

+ {asset.name} +

+
+
+ +

+ $ {asset.balanceUsd.toFixed(2)} +
+ + {asset.balance.toFixed(6)} + +

+
+
+ + { + setSelectedTokenDetail(() => asset); + presentTransfer({ + ...modalOpts, + onDidDismiss: () => + setSelectedTokenDetail(null), + }); + }} + > + + + { + setSelectedTokenDetail(() => asset); + presentSwap({ + ...modalOpts, + onDidDismiss: () => + setSelectedTokenDetail(null), + }); + }} + > + + + +
+ ))} +
+
+
+ )} +
+
+
+ ); +} diff --git a/src/components/mobile/WelcomeComponent.tsx b/src/components/mobile/WelcomeComponent.tsx new file mode 100644 index 00000000..ab11c17a --- /dev/null +++ b/src/components/mobile/WelcomeComponent.tsx @@ -0,0 +1,38 @@ +import { IonCol, IonContent, IonGrid, IonImg, IonRow, IonText, useIonRouter } from "@ionic/react"; +import { IonPage, } from '@ionic/react'; +import ConnectButton from "../ConnectButton"; + +export default function MobileWelcomeComponent() { + const router = useIonRouter(); + return ( + + + + + + + + +

Hexa Lite

+

+ Build your wealth with cryptoassets +

+
+ +
+
+
+
+
+ ); +} \ No newline at end of file diff --git a/src/servcies/ankr.service.ts b/src/servcies/ankr.service.ts index a1e15b5f..d7e992e0 100644 --- a/src/servcies/ankr.service.ts +++ b/src/servcies/ankr.service.ts @@ -67,7 +67,7 @@ export const getTokensBalances = async (chainIds: number[], address: string) => params: { blockchain, walletAddress: address, - onlyWhitelisted: false, + onlyWhitelisted: true, }, id: 1, }), diff --git a/src/servcies/lifi.service.ts b/src/servcies/lifi.service.ts index 13afe431..72e70c99 100644 --- a/src/servcies/lifi.service.ts +++ b/src/servcies/lifi.service.ts @@ -802,7 +802,7 @@ export const swapWithLiFi = async ( export const LIFI_CONFIG = Object.freeze({ // integrator: "cra-example", integrator: process.env.NEXT_PUBLIC_APP_IS_PROD ? "hexa-lite" : "", - fee: 0.005, + fee: 0.05, variant: "expandable", insurance: true, containerStyle: { diff --git a/src/servcies/qrcode.service.ts b/src/servcies/qrcode.service.ts new file mode 100644 index 00000000..0dd931f3 --- /dev/null +++ b/src/servcies/qrcode.service.ts @@ -0,0 +1,12 @@ + + +export const getQrcodeAsSVG = async (value: string) => { + const QRCode = await import("qrcode").then((module) => module); + try { + return await QRCode.toString(value, { + type: 'svg' + }) + } catch (err: any) { + throw new Error(err?.message || "Error generating QR code") + } +} \ No newline at end of file diff --git a/src/styles/global.scss b/src/styles/global.scss index f54a9051..08253004 100755 --- a/src/styles/global.scss +++ b/src/styles/global.scss @@ -693,4 +693,22 @@ div.MuiScopedCssBaseline-root { } .opacity-100 { opacity: 1!important; +} + + + +.plt-mobileweb, .plt-mobile { + ion-grid:has(.marketFilters) { + position: sticky; + top: -20px; + background: var(--ion-background-color); + z-index: 1; + } + div[id^=widget-relative-container] { + box-shadow: none; + } +} + +.mobileConentModal { + --background: var(--ion-background-color); } \ No newline at end of file From c37e30ea721cfd43425abc0252114b071cc14be5 Mon Sep 17 00:00:00 2001 From: FazioNico Date: Mon, 11 Mar 2024 11:27:27 +0100 Subject: [PATCH 05/74] refactor: prevent overlap error with modal hook --- src/components/PoolItem.tsx | 7 ++---- src/components/ReserveDetail.tsx | 14 ++++++------ src/components/mobile/WalletComponent.tsx | 17 ++++++++++++--- src/servcies/ankr.service.ts | 26 +++++++++++++++++++++++ 4 files changed, 49 insertions(+), 15 deletions(-) diff --git a/src/components/PoolItem.tsx b/src/components/PoolItem.tsx index 7bac987b..c47b370f 100644 --- a/src/components/PoolItem.tsx +++ b/src/components/PoolItem.tsx @@ -1,6 +1,4 @@ import { - IonAvatar, - IonBadge, IonButton, IonCol, IonFabButton, @@ -85,7 +83,6 @@ export function PoolItem(props: IPoolItemProps) { const { poolId, iconSize, chainId, handleSegmentChange } = props; const { walletAddress, loadAssets } = Store.useState(getWeb3State); const poolGroups = Store.useState(getPoolGroupsState); - const modal = useRef(null); const [isModalOpen, setIsModalOpen] = useState(false); // find pool in `poolGroups[*].pool` by `poolId` const pool = useMemo(() => { @@ -232,7 +229,6 @@ export function PoolItem(props: IPoolItemProps) { setIsModalOpen(() => false)} @@ -240,7 +236,8 @@ export function PoolItem(props: IPoolItemProps) { { - modal.current?.dismiss(); + setIsModalOpen(() => false); + // modal.current?.dismiss(); // reload asset if user have trigger an action from ReserveDetails. // Ex: deposit, withdraw, borrow, repay if (actionType) { diff --git a/src/components/ReserveDetail.tsx b/src/components/ReserveDetail.tsx index fcee47d9..7989ae6f 100644 --- a/src/components/ReserveDetail.tsx +++ b/src/components/ReserveDetail.tsx @@ -128,6 +128,7 @@ const loadTokenData = async (symbol: string) => { export function ReserveDetail(props: IReserveDetailProps) { const { pool: { id, chainId }, + dismiss, handleSegmentChange, } = props; const { @@ -146,7 +147,7 @@ export function ReserveDetail(props: IReserveDetailProps) { >(undefined); const poolGroups = Store.useState(getPoolGroupsState); const userSummaryAndIncentivesGroup = Store.useState(getUserSummaryAndIncentivesGroupState); - const [present, dismiss] = useIonToast(); + const [present, dismissToast] = useIonToast(); const [presentAlert] = useIonAlert(); const [presentSuccess, dismissSuccess] = useIonModal( () => ( @@ -217,7 +218,7 @@ export function ReserveDetail(props: IReserveDetailProps) { ); const { display: displayLoader, hide: hideLoader } = useLoader(); - const modal = useRef(null); + // const modal = useRef(null); const [isCrossChain, setIsCrossChain] = useState(false); const [isModalOpen, setIsModalOpen] = useState(false); const [isModalOptionsOpen, setIsModalOptionsOpen] = useState(false); @@ -491,12 +492,12 @@ export function ReserveDetail(props: IReserveDetailProps) { return ( <> - - + + props.dismiss(state?.actionType)} + onClick={() => dismiss(state?.actionType)} > @@ -1021,7 +1022,6 @@ export function ReserveDetail(props: IReserveDetailProps) { { setIsModalOpen(false); @@ -1077,7 +1077,7 @@ export function ReserveDetail(props: IReserveDetailProps) { text: "x", role: "cancel", handler: () => { - dismiss(); + dismissToast(); }, }, ], diff --git a/src/components/mobile/WalletComponent.tsx b/src/components/mobile/WalletComponent.tsx index 232a87eb..f265452c 100644 --- a/src/components/mobile/WalletComponent.tsx +++ b/src/components/mobile/WalletComponent.tsx @@ -20,6 +20,7 @@ import { IonItemSliding, IonLabel, IonList, + IonModal, IonPage, IonRow, IonSearchbar, @@ -32,7 +33,7 @@ import { useIonRouter, } from "@ionic/react"; import { paperPlane, download, repeat, card } from "ionicons/icons"; -import { ComponentRef, useMemo, useState } from "react"; +import { useMemo, useState } from "react"; import styleRule from "./WalletComponent.module.css"; import { IAsset } from "@/interfaces/asset.interface"; import { MobileDepositModal } from "./MobileDepositModal"; @@ -81,7 +82,7 @@ export default function WalletComponent() { ...selectedTokenDetail, } ); - const [presentEarn, dismissEarn] = useIonModal(MobileEarnModal, {}); + const [isEarnModalOpen, setIsEarnModalOpen] = useState(false); const modalOpts: Omit & HookOverlayOptions = { @@ -208,11 +209,21 @@ export default function WalletComponent() { presentEarn(modalOpts)} + onClick={() => { + setIsEarnModalOpen(() => true); + }} > + setIsEarnModalOpen(() => false)} + > + + {assetGroup.length > 0 && ( diff --git a/src/servcies/ankr.service.ts b/src/servcies/ankr.service.ts index d7e992e0..c976d636 100644 --- a/src/servcies/ankr.service.ts +++ b/src/servcies/ankr.service.ts @@ -37,6 +37,26 @@ const formatingTokensBalances = (assets: IAnkrTokenReponse[], address: string, c }); } +const getCachedData = async (key: string) => { + const data = localStorage.getItem(key); + if (!data) { + return null; + } + // check expiration cache using timestamp 10 minutes + const parsedData = JSON.parse(data); + if (Date.now() - parsedData.timestamp > 600000) { + return null; + } + console.log('[INFO] {ankrFactory} data from cache: ', parsedData.data); + return parsedData.data; +} + +const setCachedData = async (key: string, data: any) => { + localStorage + .setItem(key, JSON.stringify({ data, timestamp: Date.now() })); + +} + /** * Doc url: https://www.ankr.com/docs/app-chains/components/advanced-api/token-methods/#ankr_getaccountbalance * @param chainIds array of chain ids @@ -44,6 +64,11 @@ const formatingTokensBalances = (assets: IAnkrTokenReponse[], address: string, c * @returns object with balances property that contains an array of TokenInterface */ export const getTokensBalances = async (chainIds: number[], address: string) => { + const KEY = `hexa-ankr-service-${address}`; + const cachedData = await getCachedData(KEY); + if (cachedData) { + return cachedData; + } const APP_ANKR_APIKEY = process.env.NEXT_PUBLIC_APP_ANKR_APIKEY; const chainsList = chainIds.length <= 0 @@ -76,5 +101,6 @@ export const getTokensBalances = async (chainIds: number[], address: string) => const assets = (await res.json())?.result?.assets; const balances = formatingTokensBalances(assets, address, chainsList); console.log('[INFO] {ankrFactory} getTokensBalances(): ', balances); + await setCachedData(KEY, balances); return balances; }; \ No newline at end of file From fbf94250c17128ac6d76df22c310520fbbf5a4cb Mon Sep 17 00:00:00 2001 From: FazioNico Date: Tue, 12 Mar 2024 17:46:45 +0100 Subject: [PATCH 06/74] refactor: add more ui improvments --- package-lock.json | 67 +++ package.json | 3 + src/components/AppShell.tsx | 153 +++++- src/components/ETHLiquidStakingstrategy.tsx | 439 ++++++++++-------- src/components/MATICLiquidStakingstrategy.tsx | 51 +- src/components/MarketsList.tsx | 9 +- src/components/ReserveDetail.tsx | 216 +++++---- src/components/SymbolIcon.tsx | 2 +- src/components/mobile/ActionNavButtons.tsx | 120 +++++ src/components/mobile/MobileEarnModal.tsx | 50 +- .../mobile/MobileTokenDetailModal.tsx | 90 +++- src/components/mobile/MobileTransferModal.tsx | 394 +++++++++++++++- src/components/mobile/WalletComponent.tsx | 81 +--- src/styles/global.scss | 46 +- 14 files changed, 1312 insertions(+), 409 deletions(-) create mode 100644 src/components/mobile/ActionNavButtons.tsx diff --git a/package-lock.json b/package-lock.json index 39a53d9a..d2bff43c 100644 --- a/package-lock.json +++ b/package-lock.json @@ -13,8 +13,10 @@ "@aave/math-utils": "^1.21.1", "@avalabs/avalanchejs": "^3.17.0", "@bgd-labs/aave-address-book": "^2.19.0", + "@capacitor-community/barcode-scanner": "^4.0.1", "@capacitor/android": "^5.0.0", "@capacitor/core": "^5.0.0", + "@capacitor/dialog": "^5.0.7", "@capacitor/ios": "^5.0.0", "@capacitor/status-bar": "^5.0.0", "@cosmjs/stargate": "^0.32.1", @@ -41,6 +43,7 @@ "ethereum-blockies-base64": "^1.0.2", "ethers": "^5.7.2", "firebase": "^10.7.1", + "html5-qrcode": "^2.3.8", "ionicons": "latest", "lru-cache": "^10.1.0", "magic-sdk": "^21.4.0", @@ -1441,6 +1444,18 @@ "node": ">= 12" } }, + "node_modules/@capacitor-community/barcode-scanner": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/@capacitor-community/barcode-scanner/-/barcode-scanner-4.0.1.tgz", + "integrity": "sha512-acuhDU2mqskSeCIQMc5TGNnDszXXs4IqEES+3C2JDiq+MkJMTr+B2Dhq4k55hlkRFMOumMhlnbr2R9G6qyFPhw==", + "dependencies": { + "@zxing/browser": "^0.1.3", + "@zxing/library": "^0.20.0" + }, + "peerDependencies": { + "@capacitor/core": "^5.0.0" + } + }, "node_modules/@capacitor/android": { "version": "5.6.0", "resolved": "https://registry.npmjs.org/@capacitor/android/-/android-5.6.0.tgz", @@ -1489,6 +1504,14 @@ "tslib": "^2.1.0" } }, + "node_modules/@capacitor/dialog": { + "version": "5.0.7", + "resolved": "https://registry.npmjs.org/@capacitor/dialog/-/dialog-5.0.7.tgz", + "integrity": "sha512-lWNBHXOtt7V+Jk4YiShvnb+/4Ouo+yF1NKTOFpQXfVbsjrmmlXhd3ZSXSgMukEtyr0wr0phFUKDyamY08cYBOg==", + "peerDependencies": { + "@capacitor/core": "^5.0.0" + } + }, "node_modules/@capacitor/ios": { "version": "5.6.0", "resolved": "https://registry.npmjs.org/@capacitor/ios/-/ios-5.6.0.tgz", @@ -10734,6 +10757,37 @@ "resolved": "https://registry.npmjs.org/@yarnpkg/lockfile/-/lockfile-1.1.0.tgz", "integrity": "sha512-GpSwvyXOcOOlV70vbnzjj4fW5xW/FdUF6nQEt1ENy7m4ZCczi1+/buVUPAqmGfqznsORNFzUMjctTIp8a9tuCQ==" }, + "node_modules/@zxing/browser": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/@zxing/browser/-/browser-0.1.4.tgz", + "integrity": "sha512-WYjaav7St4sj/u/Km2llE4NU2Pq3JFIWnczr0tmyCC1KUlp08rV3qpu7iiEB4kOx/CgcCzrSebNnSmFt5B3IFg==", + "optionalDependencies": { + "@zxing/text-encoding": "^0.9.0" + }, + "peerDependencies": { + "@zxing/library": "^0.20.0" + } + }, + "node_modules/@zxing/library": { + "version": "0.20.0", + "resolved": "https://registry.npmjs.org/@zxing/library/-/library-0.20.0.tgz", + "integrity": "sha512-6Ev6rcqVjMakZFIDvbUf0dtpPGeZMTfyxYg4HkVWioWeN7cRcnUWT3bU6sdohc82O1nPXcjq6WiGfXX2Pnit6A==", + "dependencies": { + "ts-custom-error": "^3.2.1" + }, + "engines": { + "node": ">= 10.4.0" + }, + "optionalDependencies": { + "@zxing/text-encoding": "~0.9.0" + } + }, + "node_modules/@zxing/text-encoding": { + "version": "0.9.0", + "resolved": "https://registry.npmjs.org/@zxing/text-encoding/-/text-encoding-0.9.0.tgz", + "integrity": "sha512-U/4aVJ2mxI0aDNI8Uq0wEhMgY+u4CNtEb0om3+y3+niDAsoTCOB33UF0sxpzqzdqXLqmvc+vZyAt4O8pPdfkwA==", + "optional": true + }, "node_modules/abbrev": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/abbrev/-/abbrev-2.0.0.tgz", @@ -17800,6 +17854,11 @@ "void-elements": "3.1.0" } }, + "node_modules/html5-qrcode": { + "version": "2.3.8", + "resolved": "https://registry.npmjs.org/html5-qrcode/-/html5-qrcode-2.3.8.tgz", + "integrity": "sha512-jsr4vafJhwoLVEDW3n1KvPnCCXWaQfRng0/EEYk1vNcQGcG/htAdhJX0be8YyqMoSz7+hZvOZSTAepsabiuhiQ==" + }, "node_modules/http-cache-semantics": { "version": "4.1.1", "resolved": "https://registry.npmjs.org/http-cache-semantics/-/http-cache-semantics-4.1.1.tgz", @@ -30081,6 +30140,14 @@ "typescript": ">=4.2.0" } }, + "node_modules/ts-custom-error": { + "version": "3.3.1", + "resolved": "https://registry.npmjs.org/ts-custom-error/-/ts-custom-error-3.3.1.tgz", + "integrity": "sha512-5OX1tzOjxWEgsr/YEUWSuPrQ00deKLh6D7OTWcvNHm12/7QPyRh8SYpyWvA4IZv8H/+GQWQEh/kwo95Q9OVW1A==", + "engines": { + "node": ">=14.0.0" + } + }, "node_modules/ts-node": { "version": "10.9.2", "resolved": "https://registry.npmjs.org/ts-node/-/ts-node-10.9.2.tgz", diff --git a/package.json b/package.json index c075bd2a..df9d5907 100644 --- a/package.json +++ b/package.json @@ -19,8 +19,10 @@ "@aave/math-utils": "^1.21.1", "@avalabs/avalanchejs": "^3.17.0", "@bgd-labs/aave-address-book": "^2.19.0", + "@capacitor-community/barcode-scanner": "^4.0.1", "@capacitor/android": "^5.0.0", "@capacitor/core": "^5.0.0", + "@capacitor/dialog": "^5.0.7", "@capacitor/ios": "^5.0.0", "@capacitor/status-bar": "^5.0.0", "@cosmjs/stargate": "^0.32.1", @@ -47,6 +49,7 @@ "ethereum-blockies-base64": "^1.0.2", "ethers": "^5.7.2", "firebase": "^10.7.1", + "html5-qrcode": "^2.3.8", "ionicons": "latest", "lru-cache": "^10.1.0", "magic-sdk": "^21.4.0", diff --git a/src/components/AppShell.tsx b/src/components/AppShell.tsx index 66bfdab5..d304177e 100755 --- a/src/components/AppShell.tsx +++ b/src/components/AppShell.tsx @@ -14,6 +14,13 @@ import { IonIcon, useIonAlert, IonImg, + IonSkeletonText, + IonFab, + IonFabButton, + IonList, + IonItem, + IonAvatar, + IonProgressBar, } from "@ionic/react"; import { StatusBar, Style } from "@capacitor/status-bar"; @@ -56,10 +63,34 @@ window const SwapContainer = lazy(() => import("@/containers/SwapContainer")); const DefiContainer = lazy(() => import("@/containers/DefiContainer")); const EarnContainer = lazy(() => import("@/containers/EarnContainer")); -const MobileWalletComponent = lazy(() => import("@/components/mobile/WalletComponent")); -const MobileWelcomeComponent = lazy(() => import("@/components/mobile/WelcomeComponent")); +const MobileWalletComponent = lazy( + () => import("@/components/mobile/WalletComponent") +); +const MobileWelcomeComponent = lazy( + () => import("@/components/mobile/WelcomeComponent") +); -const isMobilePWADevice = true //Boolean(isPlatform('pwa') && !isPlatform('desktop')); +const DefaultProgressBar = () => { + return () +}; +const DefaultLoadingPage = () => { + return ( + + + + + + ) +} + +const isMobilePWADevice = + Boolean(isPlatform("pwa") && !isPlatform("desktop")) || + Boolean(isPlatform("mobileweb")) || + Boolean(isPlatform("mobile")); const AppShell = () => { // get params from url `s=` @@ -159,20 +190,20 @@ const AppShell = () => { /> )} - Loading SwapContainer...
}> + }> {currentSegment === "swap" && } - Loading EarnContainer...}> + }> {currentSegment === "earn" && } - Loading DefiContainer...}> + }> {currentSegment === "defi" && ( )} - Loading NotFoundPage...}> + }> {currentSegment === isNotFound && }
@@ -190,25 +221,109 @@ const AppShell = () => { !walletAddress ? - ( - Loading MobileWelcomeComponent...}> + render={() => + !walletAddress ? ( + } + > - ) : - ( - Loading MobileWalletComponent...}> + ) : ( + + + + + + +
+ +

+ +

+

+ +

+
+
+
+
+
+ + + + + {[1,2,3,4,5].map((_: any, i: number) => ( + + + + + +

+ +

+

+ +

+
+ + + +
+ ))} +
+
+
+
+
+
+ } + >
) } /> - ( - - )} - exact={true} - /> + } exact={true} />
)} diff --git a/src/components/ETHLiquidStakingstrategy.tsx b/src/components/ETHLiquidStakingstrategy.tsx index 6d58718d..febd9a38 100644 --- a/src/components/ETHLiquidStakingstrategy.tsx +++ b/src/components/ETHLiquidStakingstrategy.tsx @@ -1,4 +1,5 @@ import { + IonAvatar, IonButton, IonCard, IonCardContent, @@ -43,7 +44,7 @@ export interface IStrategyModalProps { ) => Promise | undefined; } -export function ETHLiquidStakingstrategyCard(props: { asImage?: boolean }) { +export function ETHLiquidStakingstrategyCard(props: { asImage?: boolean, asItem?: boolean }) { const { currentNetwork, web3Provider, @@ -217,211 +218,248 @@ export function ETHLiquidStakingstrategyCard(props: { asImage?: boolean }) { return ( <> - - - - - - - - -

- - {strategy.name} - - - {strategy.type} - -

-
-
+ {!props?.asItem && ( + + + + + + + + +

+ + {strategy.name} + + + {strategy.type} + +

+
+
- - - - - Assets - -
- {strategy.assets.map((symbol, index) => ( - - ))} -
-
- - Network -
- {strategy.chainsId - .map((id) => CHAIN_AVAILABLES.find((c) => c.id === id)) - .map((c, index) => { - if (!c || !c.nativeSymbol) return null; - return ( - 1 - ? "translateX(5px)" - : "none", - }} - src={getAssetIconUrl({ symbol: c.nativeSymbol })} - alt={c.nativeSymbol} - /> - ); - })} -
-
- - - APY - - <> - - -

- Base APY (stETH) -

-
- {strategy.apys[0]}% -
- - -

- Total variable APY -

-
- - {strategy.apys[0]}% - -
- -
-
-
- {strategy.apys.map((apy, index) => ( - - {apy}% + + + + + Assets + +
+ {strategy.assets.map((symbol, index) => ( + + ))} +
+
+ + Network +
+ {strategy.chainsId + .map((id) => CHAIN_AVAILABLES.find((c) => c.id === id)) + .map((c, index) => { + if (!c || !c.nativeSymbol) return null; + return ( + 1 + ? "translateX(5px)" + : "none", + }} + src={getAssetIconUrl({ symbol: c.nativeSymbol })} + alt={c.nativeSymbol} + /> + ); + })} +
+
+ + + APY + + <> + + +

+ Base APY (stETH) +

+
+ {strategy.apys[0]}% +
+ + +

+ Total variable APY +

+
+ + {strategy.apys[0]}% + +
+ +
+
+
+ {strategy.apys.map((apy, index) => ( + + {apy}% + + ))} +
+
+ + Protocols +
+ {strategy.providers + .map((p) => { + // return capitalized string + return p.charAt(0).toUpperCase() + p.slice(1); + }) + .join(" + ")} +
+
+
+
+ + + + +
+ +

Staking ETH with Lido

+

+ + By swapping your ETH for wstETH, you will increase your ETH holdings + by {baseAPRstETH.toFixed(2)}% APY using ETH staking with{" "} + + Lido finance + . + +

+

+ + The wstETH price increases daily with exchange rate reflecting staking rewards. + +

+

+ + You can also use your wstETH to earn more yield on lendings market or swap back to ETH at any time without locking period. + +

- ))} -
- - - Protocols -
- {strategy.providers - .map((p) => { - // return capitalized string - return p.charAt(0).toUpperCase() + p.slice(1); - }) - .join(" + ")} -
-
-
-
+
+ - - - -
- -

Staking ETH with Lido

-

- - By swapping your ETH for wstETH, you will increase your ETH holdings - by {baseAPRstETH.toFixed(2)}% APY using ETH staking with{" "} - - Lido finance - . - -

-

- - The wstETH price increases daily with exchange rate reflecting staking rewards. - -

-

- - You can also use your wstETH to earn more yield on lendings market or swap back to ETH at any time without locking period. - -

-
-
-
+ { + const chainId = currentNetwork; + await displayLoader(); + if (chainId !== NETWORK.optimism) { + await switchNetwork(NETWORK.optimism); + } + await modal.current?.present(); + await hideLoader(); + }} + expand="block" + color="gradient" + > + Start Earning + +
+
- { - const chainId = currentNetwork; - await displayLoader(); - if (chainId !== NETWORK.optimism) { - await switchNetwork(NETWORK.optimism); - } - await modal.current?.present(); - await hideLoader(); - }} - expand="block" - color="gradient" - > - Start Earning - -
-
+
+
+
+ ) } -
-
-
+ + {props?.asItem && !props?.asImage && ( + { + const chainId = currentNetwork; + await displayLoader(); + if (chainId !== NETWORK.optimism) { + await switchNetwork(NETWORK.optimism); + } + await modal.current?.present(); + await hideLoader(); + }}> + + {strategy.name} + + +

+ {strategy.name} +

+ +

+ {strategy.type} +

+
+
+ + + {strategy.apys[0]}% + + +
+ )} ) => { - console.log("will dismiss", ev.detail); - }} className="modalPage" > @@ -458,7 +496,7 @@ export function ETHLiquidStakingstrategyCard(props: { asImage?: boolean }) { fontSize: '2.4rem', lineHeight: '1.85rem' }}> - + {strategy.name}
@@ -466,7 +504,8 @@ export function ETHLiquidStakingstrategyCard(props: { asImage?: boolean }) { marginBottom: '1.5rem', fontSize: '1.4rem', lineHeight: '1.15rem' - }}>{strategy.type} + }} + className="ion-color-gradient-text">{strategy.type}

diff --git a/src/components/MATICLiquidStakingstrategy.tsx b/src/components/MATICLiquidStakingstrategy.tsx index 0a779692..eef85301 100644 --- a/src/components/MATICLiquidStakingstrategy.tsx +++ b/src/components/MATICLiquidStakingstrategy.tsx @@ -1,4 +1,5 @@ import { + IonAvatar, IonButton, IonCard, IonCardContent, @@ -46,7 +47,7 @@ export interface IStrategyModalProps { ) => Promise | undefined; } -export function MATICLiquidStakingstrategyCard() { +export function MATICLiquidStakingstrategyCard(props: { asImage?: boolean, asItem?: boolean }) { const { web3Provider, switchNetwork, connectWallet, disconnectWallet, currentNetwork } = Store.useState(getWeb3State); const [baseAPRst, setBaseAPRst] = useState(-1); const [action, setAction] = useState<"stake" | "unstake">("stake"); @@ -203,6 +204,7 @@ export function MATICLiquidStakingstrategyCard() { return ( <> + {!props?.asItem && ( @@ -220,10 +222,10 @@ export function MATICLiquidStakingstrategyCard() {

- + {strategy.name} - + {strategy.type}

@@ -404,6 +406,44 @@ export function MATICLiquidStakingstrategyCard() { + )} + + {props?.asItem && !props?.asImage && ( + { + const chainId = currentNetwork; + await displayLoader(); + if (chainId !== NETWORK.optimism) { + await switchNetwork(NETWORK.optimism); + } + await modal.current?.present(); + await hideLoader(); + }}> + + {strategy.name} + + +

+ {strategy.name} +

+ +

+ {strategy.type} +

+
+
+ + + {strategy.apys[0]}% + + +
+ )} - + {strategy.name}
{strategy.type} + }} + className="ion-color-gradient-text">{strategy.type}

diff --git a/src/components/MarketsList.tsx b/src/components/MarketsList.tsx index 0e582adb..e0fd8e6b 100644 --- a/src/components/MarketsList.tsx +++ b/src/components/MarketsList.tsx @@ -97,7 +97,14 @@ export function MarketList(props: { return ( <> - + { - // check if have localstorage data + // check if have localstorage data const localCoinsListString = localStorage.getItem("coingecko-coins-list"); - let localCoinsList = localCoinsListString ? JSON.parse(localCoinsListString) : null; + let localCoinsList = localCoinsListString + ? JSON.parse(localCoinsListString) + : null; if (!localCoinsList) { - localCoinsList = await fetch(`https://api.coingecko.com/api/v3/coins/list`) - .then((response) => response.json()); - localStorage.setItem("coingecko-coins-list", JSON.stringify(localCoinsList)); + localCoinsList = await fetch( + `https://api.coingecko.com/api/v3/coins/list` + ).then((response) => response.json()); + localStorage.setItem( + "coingecko-coins-list", + JSON.stringify(localCoinsList) + ); } if (!localCoinsList) { return; } // find coin id by symbol - const coin = localCoinsList.find((coin: {symbol: string}) => coin.symbol.toLocaleLowerCase() === symbol.toLocaleLowerCase()); + const coin = localCoinsList.find( + (coin: { symbol: string }) => + coin.symbol.toLocaleLowerCase() === symbol.toLocaleLowerCase() + ); if (coin) { // fetch coin data by id return fetch(`https://api.coingecko.com/api/v3/coins/${coin.id}`) .then((response) => response.json()) .then((data) => { console.log("coin data: ", data.description.en); - const { - description: {en: description}, + const { + description: { en: description }, market_data: { - fully_diluted_valuation: {usd: fullyDilutedValuationUSD}, - market_cap: {usd: marketCapUSD}, + fully_diluted_valuation: { usd: fullyDilutedValuationUSD }, + market_cap: { usd: marketCapUSD }, max_supply: maxSupply, total_supply: totalSupply, - circulating_supply: circulatingSupply - } + circulating_supply: circulatingSupply, + }, } = data; return { description, @@ -117,13 +127,13 @@ const loadTokenData = async (symbol: string) => { marketCapUSD, maxSupply, totalSupply, - circulatingSupply - } + circulatingSupply, + }; }); } else { - return + return; } -} +}; export function ReserveDetail(props: IReserveDetailProps) { const { @@ -146,29 +156,29 @@ export function ReserveDetail(props: IReserveDetailProps) { | undefined >(undefined); const poolGroups = Store.useState(getPoolGroupsState); - const userSummaryAndIncentivesGroup = Store.useState(getUserSummaryAndIncentivesGroupState); + const userSummaryAndIncentivesGroup = Store.useState( + getUserSummaryAndIncentivesGroupState + ); const [present, dismissToast] = useIonToast(); const [presentAlert] = useIonAlert(); - const [presentSuccess, dismissSuccess] = useIonModal( - () => ( - - - -

- {state?.actionType.toLocaleUpperCase()} with Success! -

-
- - ) - ); + const [presentSuccess, dismissSuccess] = useIonModal(() => ( + + + +

+ {state?.actionType.toLocaleUpperCase()} with Success! +

+
+
+ )); const [presentPomptCrossModal, dismissPromptCrossModal] = useIonModal( <> @@ -489,29 +499,26 @@ export function ReserveDetail(props: IReserveDetailProps) { // setTokenDetails(() => details); // }); // }, [pool.symbol]); - + return ( <> + + + +

Market details

+
+ + dismiss(state?.actionType)} + > + + + +
+
- - dismiss(state?.actionType)} - > - - - -
-

Market details

-
- -
-

- {pool?.symbol} - - - { - CHAIN_AVAILABLES.find( - (c) => c.id === pool.chainId - )?.name - }{" "} - network - - -

- {pool.usageAsCollateralEnabled === false && ( - - )} -
+ + + + + + +

+ {pool?.symbol} + + + { + CHAIN_AVAILABLES.find( + (c) => c.id === pool.chainId + )?.name + }{" "} + network + + +

+ {pool.usageAsCollateralEnabled === false && ( + + )} +
+
+
- + {walletAddress ? ( <> {tokenDetails && ( - + Token details diff --git a/src/components/SymbolIcon.tsx b/src/components/SymbolIcon.tsx index 9feaf415..835bc67b 100644 --- a/src/components/SymbolIcon.tsx +++ b/src/components/SymbolIcon.tsx @@ -18,7 +18,7 @@ export function SymbolIcon(props: {symbol: string; chainId?: number; iconSize?: ) : null; return (
{ + const { selectedTokenDetail, hideEarnBtn = false } = props; + + const [presentDeposit, dismissDeposit] = useIonModal(MobileDepositModal, { + ...selectedTokenDetail, + }); + const [presentSwap, dismissSwap] = useIonModal(MobileSwapModal, { + ...selectedTokenDetail, + }); + const [presentTokenDetail, dismissTokenDetail] = useIonModal( + MobileTokenDetailModal, + { ...selectedTokenDetail } + ); + const [isEarnModalOpen, setIsEarnModalOpen] = useState(false); + const [isTransferModalOpen, setIsTransferModalOpen] = useState(false); + + const modalOpts: Omit & + HookOverlayOptions = { + initialBreakpoint: 0.98, + breakpoints: [0, 0.98], + }; + + return ( + + + + setIsTransferModalOpen(true)} + > + + + + setIsTransferModalOpen(() => false)} + > + + + + + + presentDeposit(modalOpts)} + > + + + + + + + presentSwap(modalOpts)} + > + + + + + { hideEarnBtn !== true && ( + + + { + setIsEarnModalOpen(() => true); + }} + > + + + + setIsEarnModalOpen(() => false)} + > + + + + + )} + + ); +} \ No newline at end of file diff --git a/src/components/mobile/MobileEarnModal.tsx b/src/components/mobile/MobileEarnModal.tsx index ca18da55..094df6b8 100644 --- a/src/components/mobile/MobileEarnModal.tsx +++ b/src/components/mobile/MobileEarnModal.tsx @@ -1,8 +1,12 @@ import { + IonAvatar, IonCol, IonContent, IonGrid, IonHeader, + IonItem, + IonLabel, + IonList, IonRow, IonSegment, IonSegmentButton, @@ -25,6 +29,8 @@ import { import { patchPoolsState } from "@/store/actions"; import { CHAIN_AVAILABLES } from "@/constants/chains"; import { getReadableValue } from "@/utils/getReadableValue"; +import { ETHLiquidStakingstrategyCard } from "../ETHLiquidStakingstrategy"; +import { MATICLiquidStakingstrategyCard } from "../MATICLiquidStakingstrategy"; export const MobileEarnModal = () => { const [segment, setSegment] = useState("loan"); @@ -87,7 +93,10 @@ export const MobileEarnModal = () => { {segment === "loan" && ( - +

Available Markets

@@ -162,6 +171,45 @@ export const MobileEarnModal = () => {
)} + + {segment === "earn" && ( + + + + +

Earn interest

+
+ +

+ + Unlock the full potential of your assets by earning + intrest through Liquid Staking or Providing Liquidity to + the markets + +

+
+
+
+ + + + + + + + +
+ )} ); diff --git a/src/components/mobile/MobileTokenDetailModal.tsx b/src/components/mobile/MobileTokenDetailModal.tsx index 095f64ed..c7f57337 100644 --- a/src/components/mobile/MobileTokenDetailModal.tsx +++ b/src/components/mobile/MobileTokenDetailModal.tsx @@ -1,18 +1,38 @@ import { IAsset } from "@/interfaces/asset.interface"; import { getAssetIconUrl } from "@/utils/getAssetIconUrl"; -import { IonAvatar, IonCol, IonContent, IonGrid, IonRow, IonText } from "@ionic/react" +import { IonAvatar, IonCol, IonContent, IonGrid, IonItem, IonLabel, IonList, IonListHeader, IonNote, IonRow, IonText } from "@ionic/react" +import { MobileActionNavButtons } from "./ActionNavButtons"; +import { useEffect } from "react"; +import { ethers } from "ethers"; +import Store from "@/store"; +import { getWeb3State } from "@/store/selectors"; +import { CHAIN_AVAILABLES } from "@/constants/chains"; +const getTxsFromAddress = async (address: string) => { + let provider = new ethers.providers.EtherscanProvider(); + let history = await provider.getHistory(address); + console.log(history); +} export const MobileTokenDetailModal = (props: { - name: string; symbol: string; priceUsd: number; balance: number; balanceUsd: number; thumbnail: string; assets: IAsset[]; + data: {name: string; symbol: string; priceUsd: number; balance: number; balanceUsd: number; thumbnail: string; assets: IAsset[]}; + dismiss: () => void; })=> { + const { data, dismiss } = props; + const { walletAddress } = Store.useState(getWeb3State); + + useEffect(() => { + if (!walletAddress) return; + getTxsFromAddress(walletAddress); + }, [walletAddress]); + return ( - - + + {props.symbol} { ( event.target as any - ).src = `https://images.placeholders.dev/?width=42&height=42&text=${props.symbol}&bgColor=%23000000&textColor=%23182449`; + ).src = `https://images.placeholders.dev/?width=42&height=42&text=${data.symbol}&bgColor=%23000000&textColor=%23182449`; }} /> -

{props.symbol}

+

+ {data.balance.toFixed(6)} {data.symbol} +

-

{props.name}

+

+ $ {data.balanceUsd.toFixed(2)} +

+
+ + - -

$ {props.balanceUsd.toFixed(2)}

-

{props.balance.toFixed(6)}

-
+ + + +

Networks

+
+
+ {data.assets.map((token, index) => + + + c.id === token.chain?.id)?.logo} + alt={token.symbol} + style={{ transform: "scale(1.01)"}} + onError={(event) => { + ( + event.target as any + ).src = `https://images.placeholders.dev/?width=42&height=42&text=${token.symbol}&bgColor=%23000000&textColor=%23182449`; + }} + /> + + +

{token.chain?.name}

+
+ +

+ {token.balance.toFixed(6)} {token.symbol}
+ + $ {token.balanceUsd.toFixed(2)} + +

+
+
+ )} +
diff --git a/src/components/mobile/MobileTransferModal.tsx b/src/components/mobile/MobileTransferModal.tsx index 8b171ab3..8cf5dbc2 100644 --- a/src/components/mobile/MobileTransferModal.tsx +++ b/src/components/mobile/MobileTransferModal.tsx @@ -1,9 +1,336 @@ import { IAsset } from "@/interfaces/asset.interface"; -import { IonCol, IonContent, IonGrid, IonRow, IonText } from "@ionic/react"; +import Store from "@/store"; +import { getWeb3State } from "@/store/selectors"; +import { + IonButton, + IonCol, + IonContent, + IonFab, + IonFabButton, + IonGrid, + IonIcon, + IonInput, + IonItem, + IonLabel, + IonList, + IonListHeader, + IonModal, + IonPopover, + IonRow, + IonText, +} from "@ionic/react"; +import { chevronDown, close, scan } from "ionicons/icons"; +import { SymbolIcon } from "../SymbolIcon"; +import { Dispatch, SetStateAction, useEffect, useMemo, useRef, useState } from "react"; +import { CHAIN_AVAILABLES, CHAIN_DEFAULT } from "@/constants/chains"; +import { getReadableAmount } from "@/utils/getReadableAmount"; +import { InputInputEventDetail, IonInputCustomEvent } from "@ionic/core"; +import { Html5Qrcode } from "html5-qrcode"; + +const isNumberKey = (evt: React.KeyboardEvent) => { + var charCode = evt.which ? evt.which : evt.keyCode; + return !(charCode > 31 && (charCode < 48 || charCode > 57)); +}; + +const scanQrCode = async (html5QrcodeScanner: Html5Qrcode): Promise => { + try { + const qrboxFunction = function(viewfinderWidth: number, viewfinderHeight: number) { + // Square QR Box, with size = 80% of the min edge width. + const size = Math.min(viewfinderWidth, viewfinderHeight) * 0.8; + return { + width: size, + height: size + }; + }; + const cameras = await Html5Qrcode.getCameras(); + if (!cameras || cameras.length === 0) { + throw new Error("No camera found"); + } + + // get prefered back camera if available or load the first one + const cameraId = cameras.find((c) => c.label.includes("back"))?.id || cameras[0].id; + console.log('>>', cameraId, cameras) + // start scanner + const config = { + fps: 10, + qrbox: qrboxFunction, + // Important notice: this is experimental feature, use it at your + // own risk. See documentation in + // mebjas@/html5-qrcode/src/experimental-features.ts + experimentalFeatures: { + useBarCodeDetectorIfSupported: true + }, + rememberLastUsedCamera: true, + showTorchButtonIfSupported: true + }; + if (!cameraId) { + throw new Error("No camera found"); + } + // If you want to prefer front camera + return new Promise((resolve, reject) => { + html5QrcodeScanner.start(cameraId, config, (decodedText, decodedResult)=> { + // stop reader + html5QrcodeScanner.stop(); + // resolve promise with the decoded text + resolve(decodedText); + }, (error) =>{}); + }); + } catch (error: any) { + throw new Error(error?.message || "BarcodeScanner not available"); + } +}; + +const ScanModal = (props: { isOpen: boolean, onDismiss: (address?: string) => void }) => { + const [html5Qrcode, setHtml5Qrcode] = useState(); + const elementRef = useRef(null); + + useEffect(() => { + if (!props.isOpen) { + return; + } + console.log('>>>>', elementRef.current) + if (!elementRef.current) { + return; + } + if (!html5Qrcode) { + throw new Error("BarcodeScanner not available"); + } + const scaner = new html5Qrcode('reader-scan-element') + if (!scaner) { + throw new Error("BarcodeScanner not loaded"); + } + try { + scanQrCode(scaner).then( + result => { + scaner.stop(); + props.onDismiss(result); + } + ); + } catch (error: any) { + console.error(error); + scaner.stop(); + } + }, [elementRef.current, html5Qrcode, props.isOpen]); + + return ( + { + import("html5-qrcode").then( + (m) => setHtml5Qrcode(()=> (m.Html5Qrcode)) + ); + }} + onDidDismiss={()=> props.onDismiss()}> + + + props.onDismiss()}> + + + +
+
+
+ ) +}; + +const InputAssetWithDropDown = (props: { + assets: IAsset[]; + inputFromAmount: number; + setInputFromAmount: Dispatch>; +}) => { + const { assets, setInputFromAmount, inputFromAmount } = props; + const [errorMessage, setErrorMessage] = useState(); + const [selectedAsset, setSelectedAsset] = useState(assets[0]); + const [isLoading, setIsLoading] = useState(false); + const [popoverOpen, setPopoverOpen] = useState(false); + const popover = useRef(null); + + const maxBalance = useMemo(() => { + // round to the lower tenth + return Math.floor(selectedAsset?.balance * 10000) / 10000; + }, [selectedAsset]); + + const handleInputChange = async ( + e: IonInputCustomEvent + ) => { + let value = Number((e.target as any).value || 0); + if (maxBalance && value > maxBalance) { + (e.target as any).value = maxBalance; + value = maxBalance; + } + if (value <= 0) { + setErrorMessage(() => undefined); + // UI loader control + setIsLoading(() => false); + return; + } + setInputFromAmount(() => value); + setErrorMessage(() => undefined); + // UI loader control + setIsLoading(() => false); + }; + + return ( + +
{ + $event.stopPropagation(); + // set position + popover.current!.event = $event; + // open popover + setPopoverOpen(() => true); + }} + > +
+ + +
+ + setPopoverOpen(false)} + > + + + +

Available assets

+
+
+ + {assets + .filter((a) => a.balance > 0) + .map((asset, index) => ( + { + setPopoverOpen(() => true); + setSelectedAsset(asset); + setInputFromAmount(() => 0); + setErrorMessage(() => undefined); + // setQuote(() => undefined); + console.log({ selectedAsset }); + }} + > +
+ +
+ + {asset.symbol} +
+ + + { + CHAIN_AVAILABLES.find( + (c) => c.id === asset?.chain?.id + )?.name + } + + +
+
+ {Number(asset?.balance).toFixed(6)} +
+ + + {getReadableAmount( + +asset?.balance, + Number(asset?.priceUsd), + "No deposit" + )} + + +
+
+ ))} +
+
+
+ +
+ +

{selectedAsset?.symbol}

+
+ { + $event.stopPropagation(); + setInputFromAmount(() => selectedAsset?.balance || 0); + }} + > + Max :{maxBalance} + +
+
+ +
+ { + if (isNumberKey(e)) { + setIsLoading(() => true); + } + }} + onIonInput={(e) => handleInputChange(e)} + /> +
+
+ ); +}; + +export const MobileTransferModal = () => { + const { walletAddress, isMagicWallet, assets } = Store.useState(getWeb3State); + const [inputFromAmount, setInputFromAmount] = useState(0); + const [inputToAddress, setInputToAddress] = useState(undefined); + const [isScanModalOpen, setIsScanModalOpen] = useState(false); + + const isValid = inputFromAmount > 0 && inputToAddress && inputToAddress.length > 0; -export const MobileTransferModal = (props: { - name: string; symbol: string; priceUsd: number; balance: number; balanceUsd: number; thumbnail: string; assets: IAsset[]; - }) => { return ( @@ -13,7 +340,64 @@ export const MobileTransferModal = (props: {

Send token

- xxx + + + + + + + Destination address + + { + console.log($event) + setInputToAddress(() => ($event.detail.value|| undefined)); + }} /> + { + setIsScanModalOpen(()=> true); + }} + > + + + + { + if (data) { + setInputToAddress(() => data); + } + setIsScanModalOpen(() => false); + }} /> + + + Send +
diff --git a/src/components/mobile/WalletComponent.tsx b/src/components/mobile/WalletComponent.tsx index f265452c..2bd48cfd 100644 --- a/src/components/mobile/WalletComponent.tsx +++ b/src/components/mobile/WalletComponent.tsx @@ -41,18 +41,9 @@ import { HookOverlayOptions } from "@ionic/react/dist/types/hooks/HookOverlayOpt import { MobileTransferModal } from "./MobileTransferModal"; import { getMagic } from "@/servcies/magic"; import { MobileSwapModal } from "./MobileSwapModal"; -import { MobileEarnModal } from "./MobileEarnModal"; import { MobileTokenDetailModal } from "./MobileTokenDetailModal"; import { getAssetIconUrl } from "@/utils/getAssetIconUrl"; - -const style = { - fullHeight: { - height: "100%", - }, - fab: { - display: "contents", - }, -}; +import { MobileActionNavButtons } from "./ActionNavButtons"; export default function WalletComponent() { const { walletAddress, isMagicWallet, assets } = Store.useState(getWeb3State); @@ -67,22 +58,23 @@ export default function WalletComponent() { thumbnail: string; assets: IAsset[]; } | null>(null); - const [presentTransfer, dismissTransfer] = useIonModal(MobileTransferModal, { + + const [presentTransfer] = useIonModal(MobileTransferModal, { ...selectedTokenDetail, }); - const [presentDeposit, dismissDeposit] = useIonModal(MobileDepositModal, { + const [presentDeposit] = useIonModal(MobileDepositModal, { ...selectedTokenDetail, }); - const [presentSwap, dismissSwap] = useIonModal(MobileSwapModal, { + const [presentSwap] = useIonModal(MobileSwapModal, { ...selectedTokenDetail, }); const [presentTokenDetail, dismissTokenDetail] = useIonModal( MobileTokenDetailModal, - { - ...selectedTokenDetail, - } + { data: selectedTokenDetail, dismiss: () => { + dismissTokenDetail(); + setSelectedTokenDetail(null); + }} ); - const [isEarnModalOpen, setIsEarnModalOpen] = useState(false); const modalOpts: Omit & HookOverlayOptions = { @@ -174,58 +166,9 @@ export default function WalletComponent() {
- - - - presentTransfer(modalOpts)} - > - - - - - - - presentDeposit(modalOpts)} - > - - - - - - - presentSwap(modalOpts)} - > - - - - - - - { - setIsEarnModalOpen(() => true); - }} - > - - - - setIsEarnModalOpen(() => false)} - > - - - - + + + {assetGroup.length > 0 && ( diff --git a/src/styles/global.scss b/src/styles/global.scss index 08253004..21c28291 100755 --- a/src/styles/global.scss +++ b/src/styles/global.scss @@ -194,6 +194,11 @@ ion-alert.modalAlert { --border-radius: 0; } +.modal-sheet { + --width: 100%; + --border-radius: 32px; +} + .ion-accordion-toggle-icon { color: var(--ion-color-primary); @@ -707,8 +712,45 @@ div.MuiScopedCssBaseline-root { div[id^=widget-relative-container] { box-shadow: none; } + + .modalPage ion-content { + --background: var(--ion-background-color); + + .widgetWrapper { + border: none; + box-shadow: none; + -webkit-backdrop-filter: none; + backdrop-filter: none; + background: transparent; + + > ion-col { + text-align: center; + } + } + + } + + div[id^="widget-relative-container"] { + border: none; + } + + div.MuiScopedCssBaseline-root { + background: transparent!important; + -webkit-backdrop-filter: none!important; + backdrop-filter: none!important; + + >div[id^="widget-scrollable-container"] { + -webkit-backdrop-filter: none!important; + backdrop-filter: none!important; + } + } } -.mobileConentModal { +.mobileConentModal{ --background: var(--ion-background-color); -} \ No newline at end of file +} +// .reader-scan-element { +// video { +// height: 100%; +// } +// } \ No newline at end of file From 1eeb437f086f298ce25fe12529214cb7692f6532 Mon Sep 17 00:00:00 2001 From: FazioNico Date: Wed, 13 Mar 2024 11:20:26 +0100 Subject: [PATCH 07/74] refactor: Refactor components and Containers --- src/components/AppShell.tsx | 32 +- src/components/ETHLiquidStakingstrategy.tsx | 112 +++-- src/components/Header.tsx | 6 +- src/components/LoanFormModal.tsx | 1 + src/components/MATICLiquidStakingstrategy.tsx | 111 +++-- src/components/ReserveDetail.tsx | 1 + src/components/base/WalletBaseContainer.tsx | 170 +++++++ src/components/mobile/ActionNavButtons.tsx | 144 +++--- .../mobile/WalletComponent.module.css | 12 - src/components/mobile/WalletComponent.tsx | 388 ---------------- .../DepositContainer.tsx} | 4 +- .../TransferContainer.tsx} | 155 ++++--- .../{ => desktop}/DefiContainer.tsx | 10 +- .../{ => desktop}/EarnContainer.tsx | 4 +- .../{ => desktop}/FiatContainer.tsx | 0 .../{ => desktop}/LeaderboardContainer.tsx | 0 .../{ => desktop}/SwapContainer.tsx | 8 +- .../desktop/WalletDesktopContainer.tsx | 326 ++++++++++++++ .../mobile/EarnMobileContainer.tsx} | 8 +- .../mobile/SwapMobileContainer.tsx} | 24 +- .../mobile/TokenDetailMobileContainer.tsx} | 24 +- .../mobile/WalletMobileContainer.tsx | 422 ++++++++++++++++++ .../mobile/WelcomeMobileContainer.tsx} | 11 +- 23 files changed, 1281 insertions(+), 692 deletions(-) create mode 100644 src/components/base/WalletBaseContainer.tsx delete mode 100644 src/components/mobile/WalletComponent.module.css delete mode 100644 src/components/mobile/WalletComponent.tsx rename src/{components/mobile/MobileDepositModal.tsx => containers/DepositContainer.tsx} (97%) rename src/{components/mobile/MobileTransferModal.tsx => containers/TransferContainer.tsx} (78%) rename src/containers/{ => desktop}/DefiContainer.tsx (98%) rename src/containers/{ => desktop}/EarnContainer.tsx (95%) rename src/containers/{ => desktop}/FiatContainer.tsx (100%) rename src/containers/{ => desktop}/LeaderboardContainer.tsx (100%) rename src/containers/{ => desktop}/SwapContainer.tsx (96%) create mode 100644 src/containers/desktop/WalletDesktopContainer.tsx rename src/{components/mobile/MobileEarnModal.tsx => containers/mobile/EarnMobileContainer.tsx} (96%) rename src/{components/mobile/MobileSwapModal.tsx => containers/mobile/SwapMobileContainer.tsx} (92%) rename src/{components/mobile/MobileTokenDetailModal.tsx => containers/mobile/TokenDetailMobileContainer.tsx} (83%) create mode 100644 src/containers/mobile/WalletMobileContainer.tsx rename src/{components/mobile/WelcomeComponent.tsx => containers/mobile/WelcomeMobileContainer.tsx} (74%) diff --git a/src/components/AppShell.tsx b/src/components/AppShell.tsx index d304177e..c40e2319 100755 --- a/src/components/AppShell.tsx +++ b/src/components/AppShell.tsx @@ -28,14 +28,10 @@ import { IonReactRouter } from "@ionic/react-router"; import { Redirect, Route, useHistory } from "react-router-dom"; import { useEffect, useRef, useState, lazy, Suspense } from "react"; import { Welcome } from "./Welcome"; -// import { SwapContainer } from '@/containers/SwapContainer'; -// import { FiatContainer } from "@/containers/FiatContainer"; -// import { DefiContainer } from '@/containers/DefiContainer'; -// import { EarnContainer } from '@/containers/EarnContainer'; import { Header } from "./Header"; import MenuSlide from "./MenuSlide"; import { LoaderProvider } from "@/context/LoaderContext"; -import { Leaderboard } from "@/containers/LeaderboardContainer"; +import { Leaderboard } from "@/containers/desktop/LeaderboardContainer"; import { NotFoundPage } from "@/containers/NotFoundPage"; import PwaInstall from "./PwaInstall"; import { initializeWeb3 } from "@/store/effects/web3.effects"; @@ -60,14 +56,15 @@ window } catch {} }); -const SwapContainer = lazy(() => import("@/containers/SwapContainer")); -const DefiContainer = lazy(() => import("@/containers/DefiContainer")); -const EarnContainer = lazy(() => import("@/containers/EarnContainer")); -const MobileWalletComponent = lazy( - () => import("@/components/mobile/WalletComponent") +const WalletDesktopContainer = lazy(() => import("@/containers/desktop/WalletDesktopContainer")); +const SwapContainer = lazy(() => import("@/containers/desktop/SwapContainer")); +const DefiContainer = lazy(() => import("@/containers/desktop/DefiContainer")); +const EarnContainer = lazy(() => import("@/containers/desktop/EarnContainer")); +const WalletMobileContainer = lazy( + () => import("@/containers/mobile/WalletMobileContainer") ); -const MobileWelcomeComponent = lazy( - () => import("@/components/mobile/WelcomeComponent") +const WelcomeMobileContainer = lazy( + () => import("@/containers/mobile/WelcomeMobileContainer") ); const DefaultProgressBar = () => { @@ -100,7 +97,7 @@ const AppShell = () => { const [presentFiatWarning, dismissFiatWarning] = useIonAlert(); const isNotFound = - segment && ["swap", "fiat", "defi", "earn"].indexOf(segment) === -1; + segment && ["wallet", "swap", "fiat", "defi", "earn"].indexOf(segment) === -1; // use state to handle segment change const [currentSegment, setSegment] = useState(segment); const handleSegmentChange = async (e: any) => { @@ -191,7 +188,10 @@ const AppShell = () => { )} }> - {currentSegment === "swap" && } + {currentSegment === "wallet" && ()} + + }> + {currentSegment === "swap" && ()} }> {currentSegment === "earn" && } @@ -226,7 +226,7 @@ const AppShell = () => { } > - + ) : ( { } > - + ) } diff --git a/src/components/ETHLiquidStakingstrategy.tsx b/src/components/ETHLiquidStakingstrategy.tsx index febd9a38..d93512ca 100644 --- a/src/components/ETHLiquidStakingstrategy.tsx +++ b/src/components/ETHLiquidStakingstrategy.tsx @@ -1,11 +1,13 @@ import { IonAvatar, IonButton, + IonButtons, IonCard, IonCardContent, IonCol, IonContent, IonGrid, + IonHeader, IonIcon, IonImg, IonItem, @@ -15,6 +17,8 @@ import { IonSegment, IonSegmentButton, IonText, + IonTitle, + IonToolbar, useIonToast, } from "@ionic/react"; import { ethers } from "ethers"; @@ -176,7 +180,8 @@ export function ETHLiquidStakingstrategyCard(props: { asImage?: boolean, asItem? }, hiddenUI: [ ...LIFI_CONFIG?.hiddenUI as any, - HiddenUI.ToAddress + HiddenUI.ToAddress, + HiddenUI.History, ], disabledUI: action === 'stake' ? [ "toToken"] @@ -435,8 +440,9 @@ export function ETHLiquidStakingstrategyCard(props: { asImage?: boolean, asItem? }}> {strategy.name} @@ -444,8 +450,8 @@ export function ETHLiquidStakingstrategyCard(props: { asImage?: boolean, asItem?

{strategy.name}

- -

+ +

{strategy.type}

@@ -462,51 +468,75 @@ export function ETHLiquidStakingstrategyCard(props: { asImage?: boolean, asItem? ref={modal} className="modalPage" > + + + + {strategy.name}
+ {strategy.type} +
+ + { + modal.current?.dismiss(); + }} + > + + + +
+
+ + + + + + + + +

+ + {strategy.name} + +
+ {strategy.type} +

+
+
+
+
+
- - { - modal.current?.dismiss(); - }} - > - - - - -

- - {strategy.name} - -
- {strategy.type} -

By exchange ETH to wstETH you will incrase your ETH holdings balance by {baseAPRstETH.toFixed(2)}% APY from staking liquidity on Lido finance. diff --git a/src/components/Header.tsx b/src/components/Header.tsx index 0393df46..474e29d4 100644 --- a/src/components/Header.tsx +++ b/src/components/Header.tsx @@ -110,7 +110,6 @@ export function Header({ mode="ios" value={currentSegment} onIonChange={(e: any) => { - console.log('>> router: ', router) router.push(`/${e.detail.value}`) if (e.detail.value === 'fiat-segment') { handleSegmentChange({detail: {value: 'fiat'}}); @@ -119,12 +118,13 @@ export function Header({ handleSegmentChange(e); }} > + Wallet Exchange - Earn Interest + Earn interest - Lending & Borrow + Lend & borrow Buy diff --git a/src/components/LoanFormModal.tsx b/src/components/LoanFormModal.tsx index 6683bbc5..cb305563 100644 --- a/src/components/LoanFormModal.tsx +++ b/src/components/LoanFormModal.tsx @@ -62,6 +62,7 @@ export function LoanFormModal({ const readableAction = actionType[0].toUpperCase() + actionType.slice(1).toLocaleLowerCase(); + console.log('>>>', userSummary) return ( diff --git a/src/components/MATICLiquidStakingstrategy.tsx b/src/components/MATICLiquidStakingstrategy.tsx index eef85301..59eabc52 100644 --- a/src/components/MATICLiquidStakingstrategy.tsx +++ b/src/components/MATICLiquidStakingstrategy.tsx @@ -1,11 +1,13 @@ import { IonAvatar, IonButton, + IonButtons, IonCard, IonCardContent, IonCol, IonContent, IonGrid, + IonHeader, IonIcon, IonImg, IonItem, @@ -17,6 +19,8 @@ import { IonSkeletonText, IonSpinner, IonText, + IonTitle, + IonToolbar, useIonToast, } from "@ionic/react"; import { ethers } from "ethers"; @@ -171,7 +175,8 @@ export function MATICLiquidStakingstrategyCard(props: { asImage?: boolean, asIte }, hiddenUI: [ ...LIFI_CONFIG?.hiddenUI as any, - HiddenUI.ToAddress + HiddenUI.ToAddress, + HiddenUI.History, ], disabledUI: action === 'stake' ? [ "toToken"] @@ -422,7 +427,9 @@ export function MATICLiquidStakingstrategyCard(props: { asImage?: boolean, asIte }}> {strategy.name} @@ -431,8 +438,8 @@ export function MATICLiquidStakingstrategyCard(props: { asImage?: boolean, asIte

{strategy.name}

- -

+ +

{strategy.type}

@@ -452,51 +459,75 @@ export function MATICLiquidStakingstrategyCard(props: { asImage?: boolean, asIte }} className="modalPage" > + + + + {strategy.name}
+ {strategy.type} +
+ + { + modal.current?.dismiss(); + }} + > + + + +
+
+ + + + + + + + +

+ + {strategy.name} + +
+ {strategy.type} +

+
+
+
+
+
- - { - modal.current?.dismiss(); - }} - > - - - - -

- - {strategy.name} - -
- {strategy.type} -

By exchange MATIC to stMATIC you will incrase your MATIC holdings balance by {baseAPRst.toFixed(2)}% APY from staking liquidity on Lido finance. diff --git a/src/components/ReserveDetail.tsx b/src/components/ReserveDetail.tsx index a7bfb172..e2e79de5 100644 --- a/src/components/ReserveDetail.tsx +++ b/src/components/ReserveDetail.tsx @@ -249,6 +249,7 @@ export function ReserveDetail(props: IReserveDetailProps) { throw new Error("No poolGroup found"); } + console.log('>>>>x x', userSummaryAndIncentivesGroup) const userSummary = userSummaryAndIncentivesGroup?.find((group) => group.userReservesData.find(({ reserve }) => reserve.id === id) ); diff --git a/src/components/base/WalletBaseContainer.tsx b/src/components/base/WalletBaseContainer.tsx new file mode 100644 index 00000000..4dade31e --- /dev/null +++ b/src/components/base/WalletBaseContainer.tsx @@ -0,0 +1,170 @@ +import { IonModal, ModalOptions } from "@ionic/react"; +import React from "react"; +import { IAsset } from "@/interfaces/asset.interface"; +import { DepositContainer } from "@/containers/DepositContainer"; +import { HookOverlayOptions } from "@ionic/react/dist/types/hooks/HookOverlayOptions"; +import { TransferContainer } from "../../containers/TransferContainer"; + +export interface WalletComponentProps { + modalOpts: Omit & + HookOverlayOptions; + walletAddress?: string; + assets: IAsset[]; +} + +export interface WalletComponentState { + filterBy: string | null; + assetGroup: any[]; + totalBalance: number; + selectedTokenDetail: { + name: string; + symbol: string; + priceUsd: number; + balance: number; + balanceUsd: number; + thumbnail: string; + assets: IAsset[]; + } | null; + isEarnModalOpen: boolean; + isTransferModalOpen: boolean; + isDepositModalOpen: boolean; +} + +interface demo { + demo: string; +} + +export default class WalletBaseComponent extends React.Component< + T & WalletComponentProps, + WalletComponentState +> { + constructor(props: T & WalletComponentProps) { + super(props); + this.state = { + filterBy: null, + selectedTokenDetail: null, + assetGroup: [], + totalBalance: 0, + isEarnModalOpen: false, + isTransferModalOpen: false, + isDepositModalOpen: false, + }; + } + + componentDidMount() { + this.calculateBalance(); + this.groupAssets(); + } + + componentDidUpdate( + prevProps: Readonly, + prevState: Readonly, + snapshot?: any + ): void { + if (prevProps.assets !== this.props.assets) { + this.calculateBalance(); + this.groupAssets(); + } + } + + calculateBalance() { + if (!this.props.assets) { + this.setState({ totalBalance: 0 }); + return; + } + const totalBalance = this.props.assets.reduce((acc, asset) => { + return acc + asset.balanceUsd; + }, 0); + this.setState({ totalBalance }); + } + + groupAssets() { + const assetGroup = this.props.assets + .toSorted((a, b) => b.balanceUsd - a.balanceUsd) + .reduce((acc, asset) => { + // check existing asset symbol + const symbol = (asset.name.toLowerCase().includes('aave') && asset.name.toLowerCase() !== 'aave token') + ? asset.name.split(' ').pop()||asset.symbol + : asset.symbol; + const name = (asset.name.toLowerCase().includes('aave') && asset.name.toLowerCase() !== 'aave token') + ? asset.name.split(' ').pop()||asset.name + : asset.name; + + + const index = acc.findIndex((a) => a.symbol === symbol); + if (index !== -1) { + const balanceUsd = (asset.balanceUsd <= 0 && asset.balance > 0 ) + ? acc[index].priceUsd * asset.balance + : asset.balanceUsd; + acc[index].balance += asset.balance; + acc[index].balanceUsd += balanceUsd; + acc[index].assets.push(asset); + } else { + acc.push({ + name: name, + symbol: symbol, + priceUsd: asset.priceUsd, + thumbnail: asset.thumbnail, + balance: asset.balance, + balanceUsd: asset.balanceUsd, + assets: [asset], + }); + } + return acc; + }, [] as { name: string; symbol: string; priceUsd: number; balance: number; balanceUsd: number; thumbnail: string; assets: IAsset[] }[]) + this.setState({ assetGroup }); + } + + handleSearchChange(e: CustomEvent) { + this.setState({ filterBy: e.detail.value }); + } + + handleTokenDetailClick(token: any = null) { + console.log(token); + this.setState((prev) =>({ + ...prev, + selectedTokenDetail: token + })); + } + + handleEarnClick() { + this.setState({ isEarnModalOpen: !this.state.isEarnModalOpen }); + } + + handleTransferClick(state: boolean) { + console.log('handleTransferClick', state) + this.setState({isTransferModalOpen: state}); + } + + handleDepositClick(state?: boolean) { + this.setState({ + isDepositModalOpen: + state !== undefined ? state : !this.state.isDepositModalOpen, + }); + } + + render(): React.ReactNode { + return ( + <> + this.handleTransferClick(false)} + > + + + + this.handleDepositClick(false)} + > + + + + + ); + } +} diff --git a/src/components/mobile/ActionNavButtons.tsx b/src/components/mobile/ActionNavButtons.tsx index 8b8b1a79..bfc459e9 100644 --- a/src/components/mobile/ActionNavButtons.tsx +++ b/src/components/mobile/ActionNavButtons.tsx @@ -1,12 +1,14 @@ -import { IonCol, IonFab, IonFabButton, IonIcon, IonModal, IonRow, ModalOptions, useIonModal } from "@ionic/react"; -import { MobileTransferModal } from "./MobileTransferModal"; -import { IAsset } from "@/interfaces/asset.interface"; -import { MobileDepositModal } from "./MobileDepositModal"; -import { MobileSwapModal } from "./MobileSwapModal"; -import { MobileTokenDetailModal } from "./MobileTokenDetailModal"; +import { + IonCol, + IonFab, + IonFabButton, + IonIcon, + IonModal, + IonRow, + ModalOptions, + useIonModal, +} from "@ionic/react"; import { HookOverlayOptions } from "@ionic/react/dist/types/hooks/HookOverlayOptions"; -import { useState } from "react"; -import { MobileEarnModal } from "./MobileEarnModal"; import { paperPlane, download, repeat, card } from "ionicons/icons"; const style = { @@ -20,31 +22,14 @@ const style = { export const MobileActionNavButtons = (props: { hideEarnBtn?: boolean; - selectedTokenDetail: { - name: string; - symbol: string; - priceUsd: number; - balance: number; - balanceUsd: number; - thumbnail: string; - assets: IAsset[]; - }| null; - + setState: (state: any) => void; + setIsSwapModalOpen: () => void; }) => { - const { selectedTokenDetail, hideEarnBtn = false } = props; - - const [presentDeposit, dismissDeposit] = useIonModal(MobileDepositModal, { - ...selectedTokenDetail, - }); - const [presentSwap, dismissSwap] = useIonModal(MobileSwapModal, { - ...selectedTokenDetail, - }); - const [presentTokenDetail, dismissTokenDetail] = useIonModal( - MobileTokenDetailModal, - { ...selectedTokenDetail } - ); - const [isEarnModalOpen, setIsEarnModalOpen] = useState(false); - const [isTransferModalOpen, setIsTransferModalOpen] = useState(false); + const { + hideEarnBtn = false, + setState, + setIsSwapModalOpen, + } = props; const modalOpts: Omit & HookOverlayOptions = { @@ -54,67 +39,54 @@ export const MobileActionNavButtons = (props: { return ( - - - setIsTransferModalOpen(true)} - > - - - - setIsTransferModalOpen(() => false)} - > - - - - - - presentDeposit(modalOpts)} - > - - - - - - - presentSwap(modalOpts)} - > - - - - - { hideEarnBtn !== true && ( + { - setIsEarnModalOpen(() => true); - }} + onClick={() => setState({ isTransferModalOpen: true })} > - + - setIsEarnModalOpen(() => false)} - > - - - )} - + + + setState({ isDepositModalOpen: true })} + > + + + + + + + + setIsSwapModalOpen()} + > + + + + + + {hideEarnBtn !== true && ( + + + { + setState({ isEarnModalOpen: true }); + }} + > + + + + + )} + ); -} \ No newline at end of file +}; diff --git a/src/components/mobile/WalletComponent.module.css b/src/components/mobile/WalletComponent.module.css deleted file mode 100644 index 450eebe6..00000000 --- a/src/components/mobile/WalletComponent.module.css +++ /dev/null @@ -1,12 +0,0 @@ -.header { - /* background: transparent; */ -} - -.stickyWrapper { - position: relative; - -} -.stickyElement { - position: sticky; - top: 0; -} \ No newline at end of file diff --git a/src/components/mobile/WalletComponent.tsx b/src/components/mobile/WalletComponent.tsx deleted file mode 100644 index 2bd48cfd..00000000 --- a/src/components/mobile/WalletComponent.tsx +++ /dev/null @@ -1,388 +0,0 @@ -import Store from "@/store"; -import { getWeb3State } from "@/store/selectors"; -import { getReadableValue } from "@/utils/getReadableValue"; -import { - IonAvatar, - IonButton, - IonButtons, - IonCard, - IonCardContent, - IonCol, - IonContent, - IonFab, - IonFabButton, - IonGrid, - IonHeader, - IonIcon, - IonItem, - IonItemOption, - IonItemOptions, - IonItemSliding, - IonLabel, - IonList, - IonModal, - IonPage, - IonRow, - IonSearchbar, - IonText, - IonTitle, - IonToolbar, - ModalOptions, - useIonAlert, - useIonModal, - useIonRouter, -} from "@ionic/react"; -import { paperPlane, download, repeat, card } from "ionicons/icons"; -import { useMemo, useState } from "react"; -import styleRule from "./WalletComponent.module.css"; -import { IAsset } from "@/interfaces/asset.interface"; -import { MobileDepositModal } from "./MobileDepositModal"; -import { HookOverlayOptions } from "@ionic/react/dist/types/hooks/HookOverlayOptions"; -import { MobileTransferModal } from "./MobileTransferModal"; -import { getMagic } from "@/servcies/magic"; -import { MobileSwapModal } from "./MobileSwapModal"; -import { MobileTokenDetailModal } from "./MobileTokenDetailModal"; -import { getAssetIconUrl } from "@/utils/getAssetIconUrl"; -import { MobileActionNavButtons } from "./ActionNavButtons"; - -export default function WalletComponent() { - const { walletAddress, isMagicWallet, assets } = Store.useState(getWeb3State); - const [presentAlert, dismissAlert] = useIonAlert(); - const [filterBy, setFilterBy] = useState(null); - const [selectedTokenDetail, setSelectedTokenDetail] = useState<{ - name: string; - symbol: string; - priceUsd: number; - balance: number; - balanceUsd: number; - thumbnail: string; - assets: IAsset[]; - } | null>(null); - - const [presentTransfer] = useIonModal(MobileTransferModal, { - ...selectedTokenDetail, - }); - const [presentDeposit] = useIonModal(MobileDepositModal, { - ...selectedTokenDetail, - }); - const [presentSwap] = useIonModal(MobileSwapModal, { - ...selectedTokenDetail, - }); - const [presentTokenDetail, dismissTokenDetail] = useIonModal( - MobileTokenDetailModal, - { data: selectedTokenDetail, dismiss: () => { - dismissTokenDetail(); - setSelectedTokenDetail(null); - }} - ); - - const modalOpts: Omit & - HookOverlayOptions = { - initialBreakpoint: 0.98, - breakpoints: [0, 0.98], - }; - // const assets: any[] = []; - const router = useIonRouter(); - const balance = useMemo(() => { - if (!assets) { - return 0; - } - return assets.reduce((acc, asset) => { - return acc + asset.balanceUsd; - }, 0); - }, [assets]); - - const assetGroup = useMemo( - () => - assets.reduce((acc, asset) => { - // check existing asset symbol - const index = acc.findIndex((a) => a.symbol === asset.symbol); - if (index !== -1) { - acc[index].balance += asset.balance; - acc[index].balanceUsd += asset.balanceUsd; - acc[index].assets.push(asset); - } else { - acc.push({ - name: asset.name, - symbol: asset.symbol, - priceUsd: asset.priceUsd, - thumbnail: asset.thumbnail, - balance: asset.balance, - balanceUsd: asset.balanceUsd, - assets: [asset], - }); - } - return acc; - }, [] as { name: string; symbol: string; priceUsd: number; balance: number; balanceUsd: number; thumbnail: string; assets: IAsset[] }[]), - [assets] - ); - - return ( - - - - - Wallet - - $ {balance.toFixed(2)} - - - - - - - - - - -

- -

Wallet

-

- $ {getReadableValue(balance)} -

-
-
-
-
- - - - {assetGroup.length > 0 && ( - - -
- { - console.log(event); - setFilterBy(event.detail.value || null); - }} - > -
-
-
- )} -
- - - - - {balance <= 0 && ( - - - { - if ( - walletAddress && - walletAddress !== "" && - isMagicWallet - ) { - const magic = await getMagic(); - magic.wallet.showOnRamp(); - } else { - await presentAlert({ - header: "Information", - message: - "Connect with e-mail or social login to enable buy crypto with fiat.", - buttons: ["OK"], - cssClass: "modalAlert", - }); - } - }} - > - - - - - - - - -

Buy crypto

-

- You have to get ETH to use your wallet. Buy with - credit card or with Apple Pay -

-
-
-
-
-
-
- - presentDeposit(modalOpts)} - > - - - - - - - - -

Deposit assets

-

- You have to get ETH to use your wallet. Buy with - credit card or with Apple Pay -

-
-
-
-
-
-
-
-
- )} - - {balance > 0 && ( - - - - {assetGroup - .filter((asset) => - filterBy - ? asset.symbol - .toLowerCase() - .includes(filterBy.toLowerCase()) - : true - ) - .sort((a, b) => (a.balanceUsd > b.balanceUsd ? -1 : 1)) - .map((asset, index) => ( - - { - setSelectedTokenDetail(() => asset); - presentTokenDetail({ - ...modalOpts, - onDidDismiss: () => setSelectedTokenDetail(null), - }); - }} - > - - {asset.symbol} { - ( - event.target as any - ).src = `https://images.placeholders.dev/?width=42&height=42&text=${asset.symbol}&bgColor=%23000000&textColor=%23182449`; - }} - /> - - - -

{asset.symbol}

-
- -

- {asset.name} -

-
-
- -

- $ {asset.balanceUsd.toFixed(2)} -
- - {asset.balance.toFixed(6)} - -

-
-
- - { - setSelectedTokenDetail(() => asset); - presentTransfer({ - ...modalOpts, - onDidDismiss: () => - setSelectedTokenDetail(null), - }); - }} - > - - - { - setSelectedTokenDetail(() => asset); - presentSwap({ - ...modalOpts, - onDidDismiss: () => - setSelectedTokenDetail(null), - }); - }} - > - - - -
- ))} -
-
-
- )} -
-
- - ); -} diff --git a/src/components/mobile/MobileDepositModal.tsx b/src/containers/DepositContainer.tsx similarity index 97% rename from src/components/mobile/MobileDepositModal.tsx rename to src/containers/DepositContainer.tsx index 5c9a78bc..17dacfef 100644 --- a/src/components/mobile/MobileDepositModal.tsx +++ b/src/containers/DepositContainer.tsx @@ -17,7 +17,7 @@ import { import { useEffect, useState } from "react"; import { scan } from 'ionicons/icons'; -export const MobileDepositModal = () => { +export const DepositContainer = () => { const { web3Provider, currentNetwork, @@ -76,6 +76,8 @@ export const MobileDepositModal = () => { borderRadius: "32px", overflow: "hidden", transform: "scale(1.1)", + maxWidth: '250px', + margin: 'auto', }} dangerouslySetInnerHTML={{ __html: qrCodeSVG?.outerHTML || "" }} /> diff --git a/src/components/mobile/MobileTransferModal.tsx b/src/containers/TransferContainer.tsx similarity index 78% rename from src/components/mobile/MobileTransferModal.tsx rename to src/containers/TransferContainer.tsx index 8cf5dbc2..902ca0b8 100644 --- a/src/components/mobile/MobileTransferModal.tsx +++ b/src/containers/TransferContainer.tsx @@ -8,6 +8,7 @@ import { IonFab, IonFabButton, IonGrid, + IonHeader, IonIcon, IonInput, IonItem, @@ -18,9 +19,10 @@ import { IonPopover, IonRow, IonText, + IonToolbar, } from "@ionic/react"; import { chevronDown, close, scan } from "ionicons/icons"; -import { SymbolIcon } from "../SymbolIcon"; +import { SymbolIcon } from "../components/SymbolIcon"; import { Dispatch, SetStateAction, useEffect, useMemo, useRef, useState } from "react"; import { CHAIN_AVAILABLES, CHAIN_DEFAULT } from "@/constants/chains"; import { getReadableAmount } from "@/utils/getReadableAmount"; @@ -232,9 +234,9 @@ const InputAssetWithDropDown = (props: { { - setPopoverOpen(() => true); + setPopoverOpen(false); setSelectedAsset(asset); setInputFromAmount(() => 0); setErrorMessage(() => undefined); @@ -323,7 +325,7 @@ const InputAssetWithDropDown = (props: { ); }; -export const MobileTransferModal = () => { +export const TransferContainer = () => { const { walletAddress, isMagicWallet, assets } = Store.useState(getWeb3State); const [inputFromAmount, setInputFromAmount] = useState(0); const [inputToAddress, setInputToAddress] = useState(undefined); @@ -332,74 +334,85 @@ export const MobileTransferModal = () => { const isValid = inputFromAmount > 0 && inputToAddress && inputToAddress.length > 0; return ( - - - - - -

Send token

-
-
- - - - - - - Destination address - - { - console.log($event) - setInputToAddress(() => ($event.detail.value|| undefined)); - }} /> - { - setIsScanModalOpen(()=> true); + <> + + + + + + +

Send token

+
+
+
+
+
+
+ + + + + + + + - -
-
- { - if (data) { - setInputToAddress(() => data); - } - setIsScanModalOpen(() => false); - }} /> -
- - Send - -
-
-
+ + Destination address + + { + console.log($event) + setInputToAddress(() => ($event.detail.value|| undefined)); + }} /> + { + setIsScanModalOpen(()=> true); + }} + > + + +
+ { + if (data) { + setInputToAddress(() => data); + } + setIsScanModalOpen(() => false); + }} /> +
+ + Send + +
+
+
+ + ); }; diff --git a/src/containers/DefiContainer.tsx b/src/containers/desktop/DefiContainer.tsx similarity index 98% rename from src/containers/DefiContainer.tsx rename to src/containers/desktop/DefiContainer.tsx index 4629575f..7e5f7f87 100644 --- a/src/containers/DefiContainer.tsx +++ b/src/containers/desktop/DefiContainer.tsx @@ -17,11 +17,11 @@ import { import { chevronDownOutline } from "ionicons/icons"; import { ChainId } from "@aave/contract-helpers"; -import { getPercent } from "../utils/utils"; -import { CHAIN_AVAILABLES } from "../constants/chains"; +import { getPercent } from "../../utils/utils"; +import { CHAIN_AVAILABLES } from "../../constants/chains"; import { useEffect, useState } from "react"; -import { MarketList } from "../components/MarketsList"; -import { currencyFormat } from "../utils/currency-format"; +import { MarketList } from "../../components/MarketsList"; +import { currencyFormat } from "../../utils/currency-format"; import { valueToBigNumber } from "@aave/math-utils"; import { getReadableValue } from "@/utils/getReadableValue"; import Store from "@/store"; @@ -47,6 +47,8 @@ export default function DefiContainer({ null ); + console.log("userSummaryAndIncentivesGroup>> ", userSummaryAndIncentivesGroup) + const totalBorrowsUsd = protocolSummary.reduce((prev, current)=> { return prev + current.totalBorrowsUSD; }, 0); diff --git a/src/containers/EarnContainer.tsx b/src/containers/desktop/EarnContainer.tsx similarity index 95% rename from src/containers/EarnContainer.tsx rename to src/containers/desktop/EarnContainer.tsx index cc0459c0..a7560a56 100644 --- a/src/containers/EarnContainer.tsx +++ b/src/containers/desktop/EarnContainer.tsx @@ -1,6 +1,6 @@ import { IonCol, IonGrid, IonRow, IonText } from "@ionic/react"; -import { ETHLiquidStakingstrategyCard } from "../components/ETHLiquidStakingstrategy"; -import { MATICLiquidStakingstrategyCard } from "../components/MATICLiquidStakingstrategy"; +import { ETHLiquidStakingstrategyCard } from "../../components/ETHLiquidStakingstrategy"; +import { MATICLiquidStakingstrategyCard } from "../../components/MATICLiquidStakingstrategy"; import { ATOMLiquidStakingstrategyCard } from "@/components/ATOMLiquidStakingstrategy"; import { ETHsfrxLiquidStakingstrategyCard } from "@/components/ETHsfrxLiquidStakingstrategy"; import { MoreInfo } from "@/components/MoreInfo"; diff --git a/src/containers/FiatContainer.tsx b/src/containers/desktop/FiatContainer.tsx similarity index 100% rename from src/containers/FiatContainer.tsx rename to src/containers/desktop/FiatContainer.tsx diff --git a/src/containers/LeaderboardContainer.tsx b/src/containers/desktop/LeaderboardContainer.tsx similarity index 100% rename from src/containers/LeaderboardContainer.tsx rename to src/containers/desktop/LeaderboardContainer.tsx diff --git a/src/containers/SwapContainer.tsx b/src/containers/desktop/SwapContainer.tsx similarity index 96% rename from src/containers/SwapContainer.tsx rename to src/containers/desktop/SwapContainer.tsx index c780fdf8..3788df25 100644 --- a/src/containers/SwapContainer.tsx +++ b/src/containers/desktop/SwapContainer.tsx @@ -14,11 +14,11 @@ import { } from "@lifi/widget"; import type { Route } from "@lifi/sdk"; import { useEffect } from "react"; -import { useLoader } from "../context/LoaderContext"; -import { CHAIN_AVAILABLES, CHAIN_DEFAULT, NETWORK } from "../constants/chains"; +import { useLoader } from "../../context/LoaderContext"; +import { CHAIN_AVAILABLES, CHAIN_DEFAULT, NETWORK } from "../../constants/chains"; import { ethers } from "ethers"; -import { LiFiWidgetDynamic } from "../components/LiFiWidgetDynamic"; -import { LIFI_CONFIG } from "../servcies/lifi.service"; +import { LiFiWidgetDynamic } from "../../components/LiFiWidgetDynamic"; +import { LIFI_CONFIG } from "../../servcies/lifi.service"; // import { SquidWidgetDynamic } from "@/components/SquidWidgetDynamic"; import { SquidWidget } from "@0xsquid/widget"; import { SQUID_CONFIG } from "@/servcies/squid.service"; diff --git a/src/containers/desktop/WalletDesktopContainer.tsx b/src/containers/desktop/WalletDesktopContainer.tsx new file mode 100644 index 00000000..3dfa3852 --- /dev/null +++ b/src/containers/desktop/WalletDesktopContainer.tsx @@ -0,0 +1,326 @@ +import { card, download, paperPlane } from "ionicons/icons"; +import WalletBaseComponent, { WalletComponentProps } from "../../components/base/WalletBaseContainer"; +import { + IonAvatar, + IonButton, + IonCard, + IonCardContent, + IonCol, + IonGrid, + IonIcon, + IonLabel, + IonRow, + IonText, +} from "@ionic/react"; +import ConnectButton from "@/components/ConnectButton"; +import { getAssetIconUrl } from "@/utils/getAssetIconUrl"; +import Store from "@/store"; +import { getWeb3State } from "@/store/selectors"; + +class WalletDesktopContainer extends WalletBaseComponent { + constructor(props: WalletComponentProps) { + super(props); + } + + render() { + return ( + <> + {super.render()} + + + + +

Wallet

+
+ +

+ $ {this.state.totalBalance.toFixed(2)} +

+
+
+ + {/* send btn + Deposit btn */} + { + this.handleTransferClick(true); + }} + > + + Send + + { + this.handleDepositClick(); + }} + > + + Deposit + + +
+ + {!this.props.walletAddress && ( + + + +

+ Connecting your wallet is key to accessing a snapshot of your + assets.
+ It grants you direct insight into your holdings and balances. +

+
+
+ + + +
+ )} + + {(this.props.walletAddress && this.state.assetGroup.length === 0) && ( + + + {}} + > + + + + + + + + +

Buy crypto

+

+ You have to get ETH to use your wallet. Buy with + credit card or with Apple Pay +

+
+
+
+
+
+
+
+ + {}} + > + + + + + + + + +

Deposit assets

+

+ Transfer tokens from another wallet or from a crypto + exchange +

+
+
+
+
+
+
+
+ + +

+ You are using a non-custodial wallet that give you complete + control over your cryptocurrency funds and private keys. + Unlike custodial wallets, you manage your own security, + enhancing privacy and independence in the decentralized + cryptocurrency space. +

+
+
+
+ )} + + {/* wrapper to display card with assets items */} + {this.state.assetGroup.length > 0 && ( + + + + + + + Asset + + + + + Price + + + Balance + + + Value + + + + + {this.state.assetGroup.map((asset, index) => { + return ( + { + console.log("asset", asset); + }} + style={{ + borderBottom: + "solid 1px rgba(var(--ion-color-primary-rgb), 0.2)", + }} + > + + + + {asset.symbol} { + ( + event.target as any + ).src = `https://images.placeholders.dev/?width=42&height=42&text=${asset.symbol}&bgColor=%23000000&textColor=%23182449`; + }} + /> + + +

{asset.symbol}

+ +

{asset.name}

+
+
+
+ + + +

$ {asset.priceUsd.toFixed(2)}

+
+
+ + +

{asset.balance.toFixed(2)}

+
+
+ + +

$ {asset.balanceUsd.toFixed(2)}

+
+
+
+
+
+ ); + })} +
+
+ )} +
+ + ); + } +} + +const withStore = (Component: React.ComponentClass) => { + + // use named function to prevent re-rendering failure + return function WalletDesktopContainerWithStore() { + const { walletAddress, assets } = + Store.useState(getWeb3State); + + return ( + + ); + }; +}; +export default withStore(WalletDesktopContainer); \ No newline at end of file diff --git a/src/components/mobile/MobileEarnModal.tsx b/src/containers/mobile/EarnMobileContainer.tsx similarity index 96% rename from src/components/mobile/MobileEarnModal.tsx rename to src/containers/mobile/EarnMobileContainer.tsx index 094df6b8..1aadf67b 100644 --- a/src/components/mobile/MobileEarnModal.tsx +++ b/src/containers/mobile/EarnMobileContainer.tsx @@ -15,7 +15,7 @@ import { IonToolbar, } from "@ionic/react"; import { useEffect, useMemo, useState } from "react"; -import { MarketList } from "../MarketsList"; +import { MarketList } from "../../components/MarketsList"; import { initializePools, initializeUserSummary, @@ -29,10 +29,10 @@ import { import { patchPoolsState } from "@/store/actions"; import { CHAIN_AVAILABLES } from "@/constants/chains"; import { getReadableValue } from "@/utils/getReadableValue"; -import { ETHLiquidStakingstrategyCard } from "../ETHLiquidStakingstrategy"; -import { MATICLiquidStakingstrategyCard } from "../MATICLiquidStakingstrategy"; +import { ETHLiquidStakingstrategyCard } from "../../components/ETHLiquidStakingstrategy"; +import { MATICLiquidStakingstrategyCard } from "../../components/MATICLiquidStakingstrategy"; -export const MobileEarnModal = () => { +export const EarnMobileContainer = () => { const [segment, setSegment] = useState("loan"); const { walletAddress } = Store.useState(getWeb3State); const userSummaryAndIncentivesGroup = Store.useState( diff --git a/src/components/mobile/MobileSwapModal.tsx b/src/containers/mobile/SwapMobileContainer.tsx similarity index 92% rename from src/components/mobile/MobileSwapModal.tsx rename to src/containers/mobile/SwapMobileContainer.tsx index bc22b0a5..97d7fa26 100644 --- a/src/components/mobile/MobileSwapModal.tsx +++ b/src/containers/mobile/SwapMobileContainer.tsx @@ -20,19 +20,21 @@ import Store from "@/store"; import { getWeb3State } from "@/store/selectors"; import { CHAIN_DEFAULT } from "@/constants/chains"; import { ethers } from "ethers"; -import { LiFiWidgetDynamic } from "../LiFiWidgetDynamic"; +import { LiFiWidgetDynamic } from "../../components/LiFiWidgetDynamic"; import { useLoader } from "@/context/LoaderContext"; import { LIFI_CONFIG } from "../../servcies/lifi.service"; import { IAsset } from "@/interfaces/asset.interface"; -export const MobileSwapModal = (props?: { - name: string; - symbol: string; - priceUsd: number; - balance: number; - balanceUsd: number; - thumbnail: string; - assets: IAsset[]; +export const SwapMobileContainer = (props: { + token?: { + name: string; + symbol: string; + priceUsd: number; + balance: number; + balanceUsd: number; + thumbnail: string; + assets: IAsset[]; + } }) => { const { web3Provider, @@ -163,12 +165,12 @@ export const MobileSwapModal = (props?: { signer, }, // set source chain to Polygon - fromChain: props?.assets?.[0]?.chain?.id || CHAIN_DEFAULT.id, + fromChain: props?.token?.assets?.[0]?.chain?.id || CHAIN_DEFAULT.id, // set destination chain to Optimism toChain: currentNetwork || CHAIN_DEFAULT.id, // set source token to ETH (Ethereum) fromToken: - props?.assets?.[0]?.contractAddress || + props?.token?.assets?.[0]?.contractAddress || "0x0000000000000000000000000000000000000000", }; diff --git a/src/components/mobile/MobileTokenDetailModal.tsx b/src/containers/mobile/TokenDetailMobileContainer.tsx similarity index 83% rename from src/components/mobile/MobileTokenDetailModal.tsx rename to src/containers/mobile/TokenDetailMobileContainer.tsx index c7f57337..eb53a019 100644 --- a/src/components/mobile/MobileTokenDetailModal.tsx +++ b/src/containers/mobile/TokenDetailMobileContainer.tsx @@ -1,7 +1,7 @@ import { IAsset } from "@/interfaces/asset.interface"; import { getAssetIconUrl } from "@/utils/getAssetIconUrl"; import { IonAvatar, IonCol, IonContent, IonGrid, IonItem, IonLabel, IonList, IonListHeader, IonNote, IonRow, IonText } from "@ionic/react" -import { MobileActionNavButtons } from "./ActionNavButtons"; +import { MobileActionNavButtons } from "../../components/mobile/ActionNavButtons"; import { useEffect } from "react"; import { ethers } from "ethers"; import Store from "@/store"; @@ -13,9 +13,11 @@ const getTxsFromAddress = async (address: string) => { let history = await provider.getHistory(address); console.log(history); } -export const MobileTokenDetailModal = (props: { +export const TokenDetailMobileContainer = (props: { data: {name: string; symbol: string; priceUsd: number; balance: number; balanceUsd: number; thumbnail: string; assets: IAsset[]}; dismiss: () => void; + setState: (state: any) => void; + setIsSwapModalOpen: (state: boolean) => void; })=> { const { data, dismiss } = props; const { walletAddress } = Store.useState(getWeb3State); @@ -63,7 +65,12 @@ export const MobileTokenDetailModal = (props: {
- + + props.setState(state)} + setIsSwapModalOpen={() => props.setIsSwapModalOpen(true)} + hideEarnBtn={true} /> + Networks - {data.assets.map((token, index) => + {data.assets + .sort((a, b) => a.chain && b.chain + ? a.chain.id - b.chain.id + : a.balance + b.balance + ) + .map((token, index) => - + c.id === token.chain?.id)?.logo} alt={token.symbol} @@ -92,7 +104,7 @@ export const MobileTokenDetailModal = (props: { /> -

{token.chain?.name}

+

{token.chain?.name}

diff --git a/src/containers/mobile/WalletMobileContainer.tsx b/src/containers/mobile/WalletMobileContainer.tsx new file mode 100644 index 00000000..b011b09a --- /dev/null +++ b/src/containers/mobile/WalletMobileContainer.tsx @@ -0,0 +1,422 @@ +import Store from "@/store"; +import WalletBaseComponent, { + WalletComponentProps, +} from "../../components/base/WalletBaseContainer"; +import { getWeb3State } from "@/store/selectors"; +import { MobileActionNavButtons } from "@/components/mobile/ActionNavButtons"; +import { getMagic } from "@/servcies/magic"; +import { getAssetIconUrl } from "@/utils/getAssetIconUrl"; +import { getReadableValue } from "@/utils/getReadableValue"; +import { + IonPage, + IonHeader, + IonToolbar, + IonTitle, + IonContent, + IonGrid, + IonRow, + IonCol, + IonText, + IonSearchbar, + IonCard, + IonCardContent, + IonIcon, + IonList, + IonItemSliding, + IonItem, + IonAvatar, + IonLabel, + IonItemOptions, + IonItemOption, + IonAlert, + IonModal, +} from "@ionic/react"; +import { card, download, paperPlane, repeat } from "ionicons/icons"; +import { useState } from "react"; +import { IAsset } from "@/interfaces/asset.interface"; +import { SwapMobileContainer } from "@/containers/mobile/SwapMobileContainer"; +import { TokenDetailMobileContainer } from "@/containers/mobile/TokenDetailMobileContainer"; +import { EarnMobileContainer } from "@/containers/mobile/EarnMobileContainer"; + +type SelectedTokenDetail = + | { + name: string; + symbol: string; + priceUsd: number; + balance: number; + balanceUsd: number; + thumbnail: string; + assets: IAsset[]; + } + | undefined; + +interface WalletMobileComProps { + isMagicWallet: boolean; + isSwapModalOpen: SelectedTokenDetail | boolean | undefined; + setIsSwapModalOpen: ( + value?: SelectedTokenDetail | boolean | undefined + ) => void; + isAlertOpen: boolean; + setIsAlertOpen: (value: boolean) => void; +} + +class WalletMobileContainer extends WalletBaseComponent< + WalletComponentProps & WalletMobileComProps +> { + constructor(props: WalletComponentProps & WalletMobileComProps) { + super(props); + } + + render() { + return ( + <> + + + + + Wallet + + $ {this.state.totalBalance.toFixed(2)} + + + + + + + + + + + +

+ +

Wallet

+

+ $ {getReadableValue(this.state.totalBalance)} +

+
+
+
+
+ + this.setState(state)} + setIsSwapModalOpen={() => + this.props.setIsSwapModalOpen(true) + } + /> + + {this.state.assetGroup.length > 0 && ( + + +
+ { + console.log(event); + this.setState({ + filterBy: event.detail.value || null, + }); + }} + > +
+
+
+ )} + + + + + + {this.state.totalBalance <= 0 && ( + + + { + if ( + this.props.walletAddress && + this.props.walletAddress !== "" && + this.props.isMagicWallet + ) { + const magic = await getMagic(); + magic.wallet.showOnRamp(); + } else { + this.props.setIsAlertOpen(false); + } + }} + > + + this.props.setIsAlertOpen(false) + } + > + + + + + + + + +

Buy crypto

+

+ You have to get ETH to use your wallet. Buy + with credit card or with Apple Pay +

+
+
+
+
+
+
+ + this.handleDepositClick()} + > + + + + + + + + +

Deposit assets

+

+ You have to get ETH to use your wallet. Buy + with credit card or with Apple Pay +

+
+
+
+
+
+
+
+
+ )} + + {this.state.totalBalance > 0 && ( + + + + {this.state.assetGroup + .filter((asset) => + this.state.filterBy + ? asset.symbol + .toLowerCase() + .includes(this.state.filterBy.toLowerCase()) + : true + ) + .sort((a, b) => (a.balanceUsd > b.balanceUsd ? -1 : 1)) + .map((asset, index) => ( + + { + console.log("handleTokenDetailClick: ", asset); + this.handleTokenDetailClick(asset); + }} + > + + {asset.symbol} { + ( + event.target as any + ).src = `https://images.placeholders.dev/?width=42&height=42&text=${asset.symbol}&bgColor=%23000000&textColor=%23182449`; + }} + /> + + + +

+ {asset.symbol} +

+
+ +

+ {asset.name} +

+
+
+ +

+ $ {asset.balanceUsd.toFixed(2)} +
+ + {asset.balance.toFixed(6)} + +

+
+
+ { + // close the sliding item after clicking the option + (event.target as HTMLElement) + .closest("ion-item-sliding") + ?.close(); + }} + > + { + this.handleTransferClick(true); + }} + > + + + { + this.props.setIsSwapModalOpen(asset); + }} + > + + + +
+ ))} +
+
+
+ )} +
+
+ + + this.setState({ isEarnModalOpen: false })} + > + + + + { + this.props.setIsSwapModalOpen(undefined); + }} + > + + + + this.handleTokenDetailClick(null)} + > + {this.state.selectedTokenDetail && ( + this.setState(state)} + setIsSwapModalOpen={() => this.props.setIsSwapModalOpen(true)} + data={this.state.selectedTokenDetail} + dismiss={() => this.handleTokenDetailClick(null)} + /> + )} + + + {super.render()} + + ); + } +} + +const withStore = ( + Component: React.ComponentClass +) => { + // use named function to prevent re-rendering failure + return function WalletMobileContainerWithStore() { + const { walletAddress, assets, isMagicWallet } = + Store.useState(getWeb3State); + const [isAlertOpen, setIsAlertOpen] = useState(false); + const [isSwapModalOpen, setIsSwapModalOpen] = useState< + SelectedTokenDetail | boolean | undefined + >(undefined); + + return ( + setIsSwapModalOpen(value)} + modalOpts={{ + initialBreakpoint: 0.98, + breakpoints: [0, 0.98], + }} + /> + ); + }; +}; +export default withStore(WalletMobileContainer); diff --git a/src/components/mobile/WelcomeComponent.tsx b/src/containers/mobile/WelcomeMobileContainer.tsx similarity index 74% rename from src/components/mobile/WelcomeComponent.tsx rename to src/containers/mobile/WelcomeMobileContainer.tsx index ab11c17a..8f34b968 100644 --- a/src/components/mobile/WelcomeComponent.tsx +++ b/src/containers/mobile/WelcomeMobileContainer.tsx @@ -1,8 +1,11 @@ import { IonCol, IonContent, IonGrid, IonImg, IonRow, IonText, useIonRouter } from "@ionic/react"; import { IonPage, } from '@ionic/react'; -import ConnectButton from "../ConnectButton"; +import ConnectButton from "../../components/ConnectButton"; +import Store from "@/store"; +import { getWeb3State } from "@/store/selectors"; -export default function MobileWelcomeComponent() { +export default function WelcomeMobileContainer() { + const { walletAddress } = Store.useState(getWeb3State); const router = useIonRouter(); return ( @@ -28,7 +31,9 @@ export default function MobileWelcomeComponent() { Build your wealth with cryptoassets

- + {!walletAddress && ( + + )} From e1a93b1662ab2480328fe16f354ef2db283730c6 Mon Sep 17 00:00:00 2001 From: FazioNico Date: Wed, 13 Mar 2024 14:36:01 +0100 Subject: [PATCH 08/74] refactor: add LightChat to TokenDetailMobile --- package-lock.json | 14 + package.json | 1 + src/components/MarketsList.tsx | 4 +- src/components/PoolAccordionGroup.tsx | 4 +- src/components/PoolItem.tsx | 9 +- src/components/ui/LightChart.tsx | 85 +++++ src/containers/TransferContainer.tsx | 7 +- .../desktop/WalletDesktopContainer.tsx | 300 ++++++++++-------- .../mobile/TokenDetailMobileContainer.tsx | 246 ++++++++------ .../mobile/WalletMobileContainer.tsx | 9 +- src/styles/global.scss | 17 +- 11 files changed, 447 insertions(+), 249 deletions(-) create mode 100644 src/components/ui/LightChart.tsx diff --git a/package-lock.json b/package-lock.json index d2bff43c..64ebf5e0 100644 --- a/package-lock.json +++ b/package-lock.json @@ -45,6 +45,7 @@ "firebase": "^10.7.1", "html5-qrcode": "^2.3.8", "ionicons": "latest", + "lightweight-charts": "^4.1.3", "lru-cache": "^10.1.0", "magic-sdk": "^21.4.0", "next": "14.0.3", @@ -15700,6 +15701,11 @@ "node": "> 0.1.90" } }, + "node_modules/fancy-canvas": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/fancy-canvas/-/fancy-canvas-2.1.0.tgz", + "integrity": "sha512-nifxXJ95JNLFR2NgRV4/MxVP45G9909wJTEKz5fg/TZS20JJZA6hfgRVh/bC9bwl2zBtBNcYPjiBE4njQHVBwQ==" + }, "node_modules/fast-deep-equal": { "version": "3.1.3", "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz", @@ -19737,6 +19743,14 @@ "immediate": "~3.0.5" } }, + "node_modules/lightweight-charts": { + "version": "4.1.3", + "resolved": "https://registry.npmjs.org/lightweight-charts/-/lightweight-charts-4.1.3.tgz", + "integrity": "sha512-SJacmEyx3LmT2Qsc7Kq7cEX7nEHtQv0MOlujhRlcDxhW62pG6nkBlcM52/jNqkq8B28KQeVmgOQ7zrdJ4BCPDw==", + "dependencies": { + "fancy-canvas": "2.1.0" + } + }, "node_modules/lines-and-columns": { "version": "1.2.4", "resolved": "https://registry.npmjs.org/lines-and-columns/-/lines-and-columns-1.2.4.tgz", diff --git a/package.json b/package.json index df9d5907..a09a87bb 100644 --- a/package.json +++ b/package.json @@ -51,6 +51,7 @@ "firebase": "^10.7.1", "html5-qrcode": "^2.3.8", "ionicons": "latest", + "lightweight-charts": "^4.1.3", "lru-cache": "^10.1.0", "magic-sdk": "^21.4.0", "next": "14.0.3", diff --git a/src/components/MarketsList.tsx b/src/components/MarketsList.tsx index e0fd8e6b..f4a5fbb2 100644 --- a/src/components/MarketsList.tsx +++ b/src/components/MarketsList.tsx @@ -255,7 +255,7 @@ export function MarketList(props: { } }} /> - + {groups.map((poolGroup, index) => ( )} {groups.length === 0 && totalTVL && ( - + diff --git a/src/components/PoolAccordionGroup.tsx b/src/components/PoolAccordionGroup.tsx index 4e696ad9..5453625d 100644 --- a/src/components/PoolAccordionGroup.tsx +++ b/src/components/PoolAccordionGroup.tsx @@ -133,7 +133,7 @@ export function PoolAccordionGroup(props: IPoolAccordionProps) { size-md="2" class="ion-text-end ion-hide-sm-down" > - + {poolGroup.topSupplyApy * 100 === 0 ? "0" : poolGroup.topSupplyApy * 100 < 0.01 @@ -143,7 +143,7 @@ export function PoolAccordionGroup(props: IPoolAccordionProps) { - + {poolGroup?.topBorrowApy * 100 === 0 ? poolGroup?.borrowingEnabled === false ? "- " diff --git a/src/components/PoolItem.tsx b/src/components/PoolItem.tsx index c47b370f..75b6e441 100644 --- a/src/components/PoolItem.tsx +++ b/src/components/PoolItem.tsx @@ -49,14 +49,15 @@ const ActionBtn = (props: {provider: string}) => { const { provider } = props; if (provider === 'aave-v3') { return ( - - - + + ) } return ( diff --git a/src/components/ui/LightChart.tsx b/src/components/ui/LightChart.tsx new file mode 100644 index 00000000..b8e2a1e9 --- /dev/null +++ b/src/components/ui/LightChart.tsx @@ -0,0 +1,85 @@ +import { ColorType, IChartApi, createChart } from 'lightweight-charts'; +import { useEffect, useRef } from 'react'; + +// Generated by https://quicktype.io + +interface DataItem { + time: string; + value: number; +} + +export default function LightChart(props: { data: DataItem[] }) { + const chartContainerRef = useRef(null); + const chartRef = useRef(null); + + + useEffect(() => { + if (chartContainerRef.current) { + // remove the chart if it already exists + if (chartRef.current) { + chartRef.current.remove(); + chartRef.current = null; + } + + // create a new chart + const chart = createChart(chartContainerRef.current, { + width: 400, + height: 250, + layout: { + background: { + type: ColorType.Solid, + color: 'transparent', + }, + textColor: '#d1d4dc', + }, + grid: { + vertLines: { + visible: false, + }, + horzLines: { + color: 'rgba(42, 46, 57, 0.5)', + }, + }, + rightPriceScale: { + borderVisible: false, + visible: false, + }, + timeScale: { + borderVisible: false, + }, + crosshair: { + horzLine: { + // visible: false, + style: 4, + + }, + }, + }); + // const lineSeries = chart.addLineSeries(); + // lineSeries.setData(props.data); + + const series = chart.addAreaSeries({ + topColor: 'rgba(0,144,255, 0.618)', + bottomColor: 'rgba(0,144,255, 0.01)', + lineColor: 'rgba(0,144,255, 1)', + lineWidth: 3, + }); + series.setData(props.data); + + chart.timeScale().fitContent(); + + // store the chart instance in the ref + chartRef.current = chart; + } + // clean up the chart when the component is unmounted + return () => { + if (chartRef.current) { + chartRef.current.remove(); + chartRef.current = null; + } + }; + }, [props.data]); + + return
; +}; + diff --git a/src/containers/TransferContainer.tsx b/src/containers/TransferContainer.tsx index 902ca0b8..43beff85 100644 --- a/src/containers/TransferContainer.tsx +++ b/src/containers/TransferContainer.tsx @@ -123,11 +123,12 @@ const ScanModal = (props: { isOpen: boolean, onDismiss: (address?: string) => vo ); }} onDidDismiss={()=> props.onDismiss()}> - + + - props.onDismiss()}> + props.onDismiss()}> - +
diff --git a/src/containers/desktop/WalletDesktopContainer.tsx b/src/containers/desktop/WalletDesktopContainer.tsx index 3dfa3852..01cb08ec 100644 --- a/src/containers/desktop/WalletDesktopContainer.tsx +++ b/src/containers/desktop/WalletDesktopContainer.tsx @@ -1,5 +1,7 @@ import { card, download, paperPlane } from "ionicons/icons"; -import WalletBaseComponent, { WalletComponentProps } from "../../components/base/WalletBaseContainer"; +import WalletBaseComponent, { + WalletComponentProps, +} from "../../components/base/WalletBaseContainer"; import { IonAvatar, IonButton, @@ -10,12 +12,16 @@ import { IonIcon, IonLabel, IonRow, + IonSearchbar, + IonSelect, + IonSelectOption, IonText, } from "@ionic/react"; import ConnectButton from "@/components/ConnectButton"; import { getAssetIconUrl } from "@/utils/getAssetIconUrl"; import Store from "@/store"; import { getWeb3State } from "@/store/selectors"; +import { CHAIN_AVAILABLES } from "@/constants/chains"; class WalletDesktopContainer extends WalletBaseComponent { constructor(props: WalletComponentProps) { @@ -28,7 +34,11 @@ class WalletDesktopContainer extends WalletBaseComponent { {super.render()} { {/* send btn + Deposit btn */} { this.handleTransferClick(true); }} > - - Send + + Send { this.handleDepositClick(); }} > - - Deposit + + Deposit @@ -79,9 +91,10 @@ class WalletDesktopContainer extends WalletBaseComponent {

- Connecting your wallet is key to accessing a snapshot of your - assets.
- It grants you direct insight into your holdings and balances. + Connecting your wallet is key to accessing a snapshot of + your assets.
+ It grants you direct insight into your holdings and + balances.

@@ -91,7 +104,7 @@ class WalletDesktopContainer extends WalletBaseComponent { )} - {(this.props.walletAddress && this.state.assetGroup.length === 0) && ( + {this.props.walletAddress && this.state.assetGroup.length === 0 && ( {

Deposit assets

- Transfer tokens from another wallet or from a crypto - exchange + Transfer tokens from another wallet or from a + crypto exchange

@@ -181,125 +194,148 @@ class WalletDesktopContainer extends WalletBaseComponent { {/* wrapper to display card with assets items */} {this.state.assetGroup.length > 0 && ( - - - - - - - Asset - - - - - Price - - + + + { + this.handleSearchChange(e); + }} /> + + + + + + + + + Asset + + + - Balance - - - Value - - - - - {this.state.assetGroup.map((asset, index) => { - return ( - { - console.log("asset", asset); - }} - style={{ - borderBottom: - "solid 1px rgba(var(--ion-color-primary-rgb), 0.2)", - }} - > - - + Price + + - + + Value + + + + + {this.state.assetGroup + .filter((asset) => + this.state.filterBy + ? asset.symbol + .toLowerCase() + .includes(this.state.filterBy.toLowerCase()) + : true + ) + .map((asset, index) => { + return ( + { + console.log("asset", asset); + }} + style={{ + borderBottom: + "solid 1px rgba(var(--ion-color-primary-rgb), 0.2)", + }} + > + + + + {asset.symbol} { + ( + event.target as any + ).src = `https://images.placeholders.dev/?width=42&height=42&text=${asset.symbol}&bgColor=%23000000&textColor=%23182449`; + }} + /> + + +

{asset.symbol}

+ +

{asset.name}

+
+
+
+ - {asset.symbol} { - ( - event.target as any - ).src = `https://images.placeholders.dev/?width=42&height=42&text=${asset.symbol}&bgColor=%23000000&textColor=%23182449`; - }} - /> - - -

{asset.symbol}

- -

{asset.name}

-
-
-
- - - -

$ {asset.priceUsd.toFixed(2)}

-
-
- - -

{asset.balance.toFixed(2)}

-
-
- - -

$ {asset.balanceUsd.toFixed(2)}

-
-
-
-
-
- ); - })} -
-
+ + +

$ {asset.priceUsd.toFixed(2)}

+
+
+ + +

{asset.balance.toFixed(2)}

+
+
+ + +

$ {asset.balanceUsd.toFixed(2)}

+
+
+ +
+
+ ); + })} + + + )} @@ -308,19 +344,13 @@ class WalletDesktopContainer extends WalletBaseComponent { } const withStore = (Component: React.ComponentClass) => { - // use named function to prevent re-rendering failure return function WalletDesktopContainerWithStore() { - const { walletAddress, assets } = - Store.useState(getWeb3State); + const { walletAddress, assets } = Store.useState(getWeb3State); return ( - + ); }; }; -export default withStore(WalletDesktopContainer); \ No newline at end of file +export default withStore(WalletDesktopContainer); diff --git a/src/containers/mobile/TokenDetailMobileContainer.tsx b/src/containers/mobile/TokenDetailMobileContainer.tsx index eb53a019..50b87b66 100644 --- a/src/containers/mobile/TokenDetailMobileContainer.tsx +++ b/src/containers/mobile/TokenDetailMobileContainer.tsx @@ -1,12 +1,15 @@ import { IAsset } from "@/interfaces/asset.interface"; import { getAssetIconUrl } from "@/utils/getAssetIconUrl"; -import { IonAvatar, IonCol, IonContent, IonGrid, IonItem, IonLabel, IonList, IonListHeader, IonNote, IonRow, IonText } from "@ionic/react" +import { IonAvatar, IonButton, IonCol, IonContent, IonFooter, IonGrid, IonIcon, IonItem, IonLabel, IonList, IonListHeader, IonNote, IonRow, IonText, IonToolbar } from "@ionic/react" import { MobileActionNavButtons } from "../../components/mobile/ActionNavButtons"; -import { useEffect } from "react"; +import { Suspense, lazy, useEffect } from "react"; import { ethers } from "ethers"; import Store from "@/store"; import { getWeb3State } from "@/store/selectors"; import { CHAIN_AVAILABLES } from "@/constants/chains"; +import { airplane, download, paperPlane } from "ionicons/icons"; + +const LightChart = lazy(() => import("@/components/ui/LightChart")); const getTxsFromAddress = async (address: string) => { let provider = new ethers.providers.EtherscanProvider(); @@ -28,98 +31,159 @@ export const TokenDetailMobileContainer = (props: { }, [walletAddress]); return ( - - - - - - {data.symbol} { - ( - event.target as any - ).src = `https://images.placeholders.dev/?width=42&height=42&text=${data.symbol}&bgColor=%23000000&textColor=%23182449`; + <> + + + + + - - -

- {data.balance.toFixed(6)} {data.symbol} -

-
- -

- $ {data.balanceUsd.toFixed(2)} -

-
-
-
+ > + {data.symbol} { + ( + event.target as any + ).src = `https://images.placeholders.dev/?width=42&height=42&text=${data.symbol}&bgColor=%23000000&textColor=%23182449`; + }} + /> +
+ +

+ {data.balance.toFixed(6)} {data.symbol} +

+
+ +

+ $ {data.balanceUsd.toFixed(2)} +

+
+
+
- props.setState(state)} - setIsSwapModalOpen={() => props.setIsSwapModalOpen(true)} - hideEarnBtn={true} /> + + + .....} > + + +

+ 1 {data.symbol} = $ {data.priceUsd} +

+
+
+
+
- - - - - -

Networks

-
-
- {data.assets - .sort((a, b) => a.chain && b.chain - ? a.chain.id - b.chain.id - : a.balance + b.balance - ) - .map((token, index) => - + + - - c.id === token.chain?.id)?.logo} - alt={token.symbol} - style={{ transform: "scale(1.01)"}} - onError={(event) => { - ( - event.target as any - ).src = `https://images.placeholders.dev/?width=42&height=42&text=${token.symbol}&bgColor=%23000000&textColor=%23182449`; - }} - /> - - -

{token.chain?.name}

-
- -

- {token.balance.toFixed(6)} {token.symbol}
- - $ {token.balanceUsd.toFixed(2)} - -

-
-
- )} -
-
-
-
-
+ + +

Networks

+
+
+ {data.assets + .sort((a, b) => a.chain && b.chain + ? a.chain.id - b.chain.id + : a.balance + b.balance + ) + .map((token, index) => + + + c.id === token.chain?.id)?.logo} + alt={token.symbol} + style={{ transform: "scale(1.01)"}} + onError={(event) => { + ( + event.target as any + ).src = `https://images.placeholders.dev/?width=42&height=42&text=${token.symbol}&bgColor=%23000000&textColor=%23182449`; + }} + /> + + +

{token.chain?.name}

+
+ +

+ {token.balance.toFixed(6)} {token.symbol}
+ + $ {token.balanceUsd.toFixed(2)} + +

+
+
+ )} + + + + +
+ + + + + + + { + props.setState({ isTransferModalOpen: true }); + }} > + + Send + + + + { + props.setState({ isDepositModalOpen: true }); + }} > + + Deposit + + + + + + {/* props.setState(state)} + setIsSwapModalOpen={() => props.setIsSwapModalOpen(true)} + hideEarnBtn={true} /> */} + + + ); } \ No newline at end of file diff --git a/src/containers/mobile/WalletMobileContainer.tsx b/src/containers/mobile/WalletMobileContainer.tsx index b011b09a..22afad89 100644 --- a/src/containers/mobile/WalletMobileContainer.tsx +++ b/src/containers/mobile/WalletMobileContainer.tsx @@ -134,10 +134,7 @@ class WalletMobileContainer extends WalletBaseComponent< { - console.log(event); - this.setState({ - filterBy: event.detail.value || null, - }); + this.handleSearchChange(event); }} >
@@ -412,8 +409,8 @@ const withStore = ( isSwapModalOpen={isSwapModalOpen} setIsSwapModalOpen={(value) => setIsSwapModalOpen(value)} modalOpts={{ - initialBreakpoint: 0.98, - breakpoints: [0, 0.98], + initialBreakpoint: 1, + breakpoints: [0, 1], }} /> ); diff --git a/src/styles/global.scss b/src/styles/global.scss index 21c28291..951f05b9 100755 --- a/src/styles/global.scss +++ b/src/styles/global.scss @@ -200,9 +200,13 @@ ion-alert.modalAlert { } +ion-accordion.accordion-expanding > [slot=header] .ion-accordion-toggle-icon, +ion-accordion.accordion-expanded > [slot=header] .ion-accordion-toggle-icon { + transform: rotate(180deg) scale(0.6); +} .ion-accordion-toggle-icon { color: var(--ion-color-primary); - transform: scale(0.8); + transform: scale(0.6); } ion-accordion { @@ -749,8 +753,9 @@ div.MuiScopedCssBaseline-root { .mobileConentModal{ --background: var(--ion-background-color); } -// .reader-scan-element { -// video { -// height: 100%; -// } -// } \ No newline at end of file +#reader-scan-element { + video { + height: 100%; + width: auto!important; + } +} \ No newline at end of file From e17e3728734d1a89981e32170d24db5cd09cd42c Mon Sep 17 00:00:00 2001 From: FazioNico Date: Fri, 15 Mar 2024 11:55:27 +0100 Subject: [PATCH 09/74] refactor: add token info on detail page --- package-lock.json | 15 + package.json | 2 + src/components/ui/LightChart.tsx | 10 +- src/components/ui/MoonpayOnramp.tsx | 57 ++ .../mobile/TokenDetailMobileContainer.tsx | 566 ++++++++++++++---- .../mobile/WalletMobileContainer.tsx | 16 +- src/utils/getCoingeekoTokenId.ts | 15 + src/utils/getTokenHistoryPrice.ts | 33 + src/utils/getTokenInfo.ts | 71 +++ 9 files changed, 649 insertions(+), 136 deletions(-) create mode 100644 src/components/ui/MoonpayOnramp.tsx create mode 100644 src/utils/getCoingeekoTokenId.ts create mode 100644 src/utils/getTokenHistoryPrice.ts create mode 100644 src/utils/getTokenInfo.ts diff --git a/package-lock.json b/package-lock.json index 64ebf5e0..64467e18 100644 --- a/package-lock.json +++ b/package-lock.json @@ -29,6 +29,8 @@ "@magic-ext/cosmos": "^16.4.0", "@magic-ext/polkadot": "^16.4.0", "@magic-ext/solana": "^18.2.0", + "@moonpay/moonpay-js": "^0.5.0", + "@moonpay/moonpay-react": "^1.6.1", "@solana/web3.js": "^1.87.6", "@solendprotocol/solend-sdk": "^0.7.6", "@types/jest": "^26.0.20", @@ -5385,6 +5387,19 @@ "node": ">= 10" } }, + "node_modules/@moonpay/moonpay-js": { + "version": "0.5.0", + "resolved": "https://registry.npmjs.org/@moonpay/moonpay-js/-/moonpay-js-0.5.0.tgz", + "integrity": "sha512-Q//d9kfGEQYOAxHIdXvnDrBONMR1uc2b/R48UP8uM//9f6tmUOOe5wXKnWJtK1Fh1/w3EDzigtYf8FNFiSco/w==" + }, + "node_modules/@moonpay/moonpay-react": { + "version": "1.6.1", + "resolved": "https://registry.npmjs.org/@moonpay/moonpay-react/-/moonpay-react-1.6.1.tgz", + "integrity": "sha512-v2cx7W1ESrvzBf8Wj1If+poTiTX7OwZYUY0PLfDMuiCnu+di++GyI+R6VeAWUaH20KAQGiD54pFaoE7naNZrew==", + "peerDependencies": { + "react": ">=16" + } + }, "node_modules/@motionone/animation": { "version": "10.16.3", "resolved": "https://registry.npmjs.org/@motionone/animation/-/animation-10.16.3.tgz", diff --git a/package.json b/package.json index a09a87bb..f70c4e99 100644 --- a/package.json +++ b/package.json @@ -35,6 +35,8 @@ "@magic-ext/cosmos": "^16.4.0", "@magic-ext/polkadot": "^16.4.0", "@magic-ext/solana": "^18.2.0", + "@moonpay/moonpay-js": "^0.5.0", + "@moonpay/moonpay-react": "^1.6.1", "@solana/web3.js": "^1.87.6", "@solendprotocol/solend-sdk": "^0.7.6", "@types/jest": "^26.0.20", diff --git a/src/components/ui/LightChart.tsx b/src/components/ui/LightChart.tsx index b8e2a1e9..58243481 100644 --- a/src/components/ui/LightChart.tsx +++ b/src/components/ui/LightChart.tsx @@ -3,7 +3,7 @@ import { useEffect, useRef } from 'react'; // Generated by https://quicktype.io -interface DataItem { +export interface DataItem { time: string; value: number; } @@ -14,7 +14,7 @@ export default function LightChart(props: { data: DataItem[] }) { useEffect(() => { - if (chartContainerRef.current) { + if (chartContainerRef.current && props.data.length > 0) { // remove the chart if it already exists if (chartRef.current) { chartRef.current.remove(); @@ -66,7 +66,11 @@ export default function LightChart(props: { data: DataItem[] }) { }); series.setData(props.data); - chart.timeScale().fitContent(); + const now = new Date(); + chart.timeScale().setVisibleRange({ + from: new Date(`${now.getFullYear()}-${(now.getMonth()+1) < 10 ? `0${(now.getMonth() + 1)}` : now.getMonth()+1}-${now.getDate()-7}`).getTime() / 1000 as any, + to: now.getTime() / 1000 as any, + }); // store the chart instance in the ref chartRef.current = chart; diff --git a/src/components/ui/MoonpayOnramp.tsx b/src/components/ui/MoonpayOnramp.tsx new file mode 100644 index 00000000..646908ec --- /dev/null +++ b/src/components/ui/MoonpayOnramp.tsx @@ -0,0 +1,57 @@ + +import { loadMoonPay } from '@moonpay/moonpay-js'; +// import { MoonPayProvider, MoonPayBuyWidget } from '@moonpay/moonpay-react'; +import { ReactNode, useEffect, useState } from 'react'; + + +export default function MoonpayOnramp(props?: { + walletAddress?: string; + children?: ReactNode, +}) { + // const [visible, setVisible] = useState(false); + const [moonPaySdk, setMoonPaySdk] = useState(undefined as any); + const element = props?.children || (); + + useEffect(() => { + if (moonPaySdk) { + return; + } + loadMoonPay().then((moonPay) => { + if (!moonPay) { + return null; + } + const moonPaySdk = moonPay({ + flow: 'buy', + environment: 'sandbox', + variant: 'overlay', + params: { + apiKey: '', + theme: 'dark', + baseCurrencyCode: 'usd', + baseCurrencyAmount: '100', + defaultCurrencyCode: 'eth' + } + }); + setMoonPaySdk(moonPaySdk); + }) + }, [moonPaySdk]); + + return ( + // + // +
moonPaySdk?.show()}> + {element} +
+ //
+ + ) +} \ No newline at end of file diff --git a/src/containers/mobile/TokenDetailMobileContainer.tsx b/src/containers/mobile/TokenDetailMobileContainer.tsx index 50b87b66..5308d29a 100644 --- a/src/containers/mobile/TokenDetailMobileContainer.tsx +++ b/src/containers/mobile/TokenDetailMobileContainer.tsx @@ -1,13 +1,36 @@ import { IAsset } from "@/interfaces/asset.interface"; import { getAssetIconUrl } from "@/utils/getAssetIconUrl"; -import { IonAvatar, IonButton, IonCol, IonContent, IonFooter, IonGrid, IonIcon, IonItem, IonLabel, IonList, IonListHeader, IonNote, IonRow, IonText, IonToolbar } from "@ionic/react" +import { + IonAvatar, + IonBadge, + IonButton, + IonChip, + IonCol, + IonContent, + IonFooter, + IonGrid, + IonHeader, + IonIcon, + IonItem, + IonLabel, + IonList, + IonListHeader, + IonNote, + IonRow, + IonText, + IonTitle, + IonToolbar, +} from "@ionic/react"; import { MobileActionNavButtons } from "../../components/mobile/ActionNavButtons"; -import { Suspense, lazy, useEffect } from "react"; +import { Suspense, lazy, useEffect, useState } from "react"; import { ethers } from "ethers"; import Store from "@/store"; import { getWeb3State } from "@/store/selectors"; import { CHAIN_AVAILABLES } from "@/constants/chains"; import { airplane, download, paperPlane } from "ionicons/icons"; +import { DataItem } from "@/components/ui/LightChart"; +import { getTokenHistoryPrice } from "@/utils/getTokenHistoryPrice"; +import { TokenInfo, getTokenInfo } from "@/utils/getTokenInfo"; const LightChart = lazy(() => import("@/components/ui/LightChart")); @@ -15,170 +38,475 @@ const getTxsFromAddress = async (address: string) => { let provider = new ethers.providers.EtherscanProvider(); let history = await provider.getHistory(address); console.log(history); -} -export const TokenDetailMobileContainer = (props: { - data: {name: string; symbol: string; priceUsd: number; balance: number; balanceUsd: number; thumbnail: string; assets: IAsset[]}; +}; + +export const TokenDetailMobileContainer = (props: { + data: { + name: string; + symbol: string; + priceUsd: number; + balance: number; + balanceUsd: number; + thumbnail: string; + assets: IAsset[]; + }; dismiss: () => void; setState: (state: any) => void; setIsSwapModalOpen: (state: boolean) => void; - })=> { +}) => { const { data, dismiss } = props; const { walletAddress } = Store.useState(getWeb3State); + const [dataChartHistory, setDataChartHistory] = useState([]); + const [tokenInfo, setTokenInfo] = useState(undefined); useEffect(() => { if (!walletAddress) return; getTxsFromAddress(walletAddress); + getTokenHistoryPrice(props.data.symbol).then((prices) => { + const data: DataItem[] = prices.map(([time, value]: string[]) => { + const dataItem = { + time: new Date(time).toISOString().split("T").shift() || "", + value: Number(value), + }; + return dataItem; + }); + setDataChartHistory(() => data.slice(0, data.length - 1)); + }); + getTokenInfo(props.data.symbol).then((tokenInfo) => + setTokenInfo(() => tokenInfo) + ); }, [walletAddress]); return ( <> - - - - - - {data.symbol} { - ( - event.target as any - ).src = `https://images.placeholders.dev/?width=42&height=42&text=${data.symbol}&bgColor=%23000000&textColor=%23182449`; - }} - /> - - -

- {data.balance.toFixed(6)} {data.symbol} -

-
- -

- $ {data.balanceUsd.toFixed(2)} -

-
-
-
+ + + + {data.symbol} + + $ {data.balanceUsd.toFixed(2)} + + + + + + + + + + + + {data.symbol} { + ( + event.target as any + ).src = `https://images.placeholders.dev/?width=42&height=42&text=${data.symbol}&bgColor=%23000000&textColor=%23182449`; + }} + /> + + +

+ {data.balance.toFixed(6)} {data.symbol} +

+
+ +

+ $ {data.balanceUsd.toFixed(2)} +

+
+
+
+
+
+
+ - .....} > - - -

- 1 {data.symbol} = $ {data.priceUsd} -

-
+ .....}> + + + + 1{' '}{data.symbol} = $ {data.priceUsd.toFixed(2)} + +
- + + + +

Networks

+
+
+ {data.assets + .sort((a, b) => + a.chain && b.chain + ? a.chain.id - b.chain.id + : a.balance + b.balance + ) + .map((token, index) => ( + + + c.id === token.chain?.id + )?.logo + } + alt={token.symbol} + style={{ transform: "scale(1.01)" }} + onError={(event) => { + ( + event.target as any + ).src = `https://images.placeholders.dev/?width=42&height=42&text=${token.symbol}&bgColor=%23000000&textColor=%23182449`; + }} + /> + + +

{token.chain?.name}

+
+ + {token.balance.toFixed(6)} {token.symbol} +
+ + $ {token.balanceUsd.toFixed(2)} + +
+
+ ))} +
+
+
+ + + {tokenInfo && ( + + - -

Networks

+ +

Market details

- {data.assets - .sort((a, b) => a.chain && b.chain - ? a.chain.id - b.chain.id - : a.balance + b.balance - ) - .map((token, index) => - - - c.id === token.chain?.id)?.logo} - alt={token.symbol} - style={{ transform: "scale(1.01)"}} - onError={(event) => { - ( - event.target as any - ).src = `https://images.placeholders.dev/?width=42&height=42&text=${token.symbol}&bgColor=%23000000&textColor=%23182449`; - }} - /> - + + Categories + {tokenInfo.categories.map((categorie) => ( + {categorie} + ))} + + {tokenInfo.market_data.market_cap.usd && ( + + Market Cap. + + ${tokenInfo.market_data.market_cap.usd.toFixed(0)} + + + )} + { tokenInfo.market_data.fully_diluted_valuation.usd && ( + + Fully Diluted Valuation + + $ + {tokenInfo.market_data.fully_diluted_valuation.usd.toFixed( + 0 + )} + + + )} + { tokenInfo.market_data.circulating_supply && ( + + Circulating supply + + {tokenInfo.market_data.circulating_supply.toFixed(0)} + + + )} + { tokenInfo.market_data.total_supply && ( + + Total supply + + {tokenInfo.market_data.total_supply.toFixed(0)} + + + )} + { tokenInfo.market_data.max_supply && ( + + Max supply + + {tokenInfo.market_data.max_supply.toFixed(0)} + + + )} + -

{token.chain?.name}

+

Historical Price

- -

- {token.balance.toFixed(6)} {token.symbol}
+ + { tokenInfo.market_data.current_price.usd && ( + + Current price + + ${tokenInfo.market_data.current_price.usd} + + {tokenInfo.market_data.price_change_percentage_24h_in_currency.usd.toFixed( + 2 + )} + % + +
+
+
+ )} + { tokenInfo.market_data.ath.usd && ( + + All time height + + ${tokenInfo.market_data.ath.usd} + + {tokenInfo.market_data.ath_change_percentage.usd.toFixed( + 2 + )} + % + +
- $ {token.balanceUsd.toFixed(2)} + + {new Date( + tokenInfo.market_data.ath_date.usd + ).toLocaleDateString()} + -

-
-
+ + + )} + { tokenInfo.market_data.atl.usd&& ( + + All time low + + ${tokenInfo.market_data.atl.usd} + + {tokenInfo.market_data.atl_change_percentage.usd.toFixed( + 2 + )} + % + +
+ + + {new Date( + tokenInfo.market_data.atl_date.usd + ).toLocaleDateString()} + + +
+
)}
-
+ +

+ + Datas are coming from Coingeeko API + +

+
+
+ )}
- - + + - { + { props.setState({ isTransferModalOpen: true }); - }} > - - Send + }} + > + + Send - { + { props.setState({ isDepositModalOpen: true }); - }} > - - Deposit + }} + > + + Deposit - {/* props.setState(state)} setIsSwapModalOpen={() => props.setIsSwapModalOpen(true)} hideEarnBtn={true} /> */} @@ -186,4 +514,4 @@ export const TokenDetailMobileContainer = (props: { ); -} \ No newline at end of file +}; diff --git a/src/containers/mobile/WalletMobileContainer.tsx b/src/containers/mobile/WalletMobileContainer.tsx index 22afad89..4021a85c 100644 --- a/src/containers/mobile/WalletMobileContainer.tsx +++ b/src/containers/mobile/WalletMobileContainer.tsx @@ -101,7 +101,7 @@ class WalletMobileContainer extends WalletBaseComponent< > - +
@@ -128,7 +128,7 @@ class WalletMobileContainer extends WalletBaseComponent< /> {this.state.assetGroup.length > 0 && ( - +
{ - if ( - this.props.walletAddress && - this.props.walletAddress !== "" && - this.props.isMagicWallet - ) { - const magic = await getMagic(); - magic.wallet.showOnRamp(); - } else { - this.props.setIsAlertOpen(false); - } - }} > { + // convert symbol to coingeeko id + const responseList = localStorage.getItem('hexa-lite-coingeeko/coinList'); + let data; + if (responseList) { + data = JSON.parse(responseList); + } else { + const fetchResponse = await fetch(`https://api.coingecko.com/api/v3/coins/list`); + data = await fetchResponse.json(); + localStorage.setItem('hexa-lite-coingeeko/coinList', JSON.stringify(data)); + } + const coin: {id?: string} = data.find((c: any) => c.symbol.toLowerCase() === symbol.toLowerCase()); + return coin?.id; +} \ No newline at end of file diff --git a/src/utils/getTokenHistoryPrice.ts b/src/utils/getTokenHistoryPrice.ts new file mode 100644 index 00000000..63923370 --- /dev/null +++ b/src/utils/getTokenHistoryPrice.ts @@ -0,0 +1,33 @@ + +export const getTokenHistoryPrice = async (symbol: string) => { + // convert symbol to coingeeko id + const responseList = localStorage.getItem('hexa-lite-coingeeko/coinList'); + let data; + if (responseList) { + data = JSON.parse(responseList); + } else { + const fetchResponse = await fetch(`https://api.coingecko.com/api/v3/coins/list`); + data = await fetchResponse.json(); + localStorage.setItem('hexa-lite-coingeeko/coinList', JSON.stringify(data)); + } + const coin = data.find((c: any) => c.symbol.toLowerCase() === symbol.toLowerCase()); + if (!coin) return []; + + const responseToken = localStorage.getItem(`hexa-lite-coingeeko/coin/${coin.id}/market_chart`); + const jsonData = JSON.parse(responseToken||'{}'); + const isDeadlineReach = (Date.now() - jsonData.timestamp) > (60 * 1000 * 30); + let tokenMarketData; + if (responseToken && !isDeadlineReach && jsonData.data) { + tokenMarketData = jsonData.data; + } else { + const url = `https://api.coingecko.com/api/v3/coins/${coin.id}/market_chart?vs_currency=usd&days=30&interval=daily`; + const res = await fetch(url); + const result = await res.json(); + tokenMarketData = result?.prices as number[]||[]; + localStorage.setItem(`hexa-lite-coingeeko/coin/${coin.id}/market_chart`, JSON.stringify({ + data: tokenMarketData, + timestamp: Date.now() + })); + } + return tokenMarketData; +} \ No newline at end of file diff --git a/src/utils/getTokenInfo.ts b/src/utils/getTokenInfo.ts new file mode 100644 index 00000000..53d97ab2 --- /dev/null +++ b/src/utils/getTokenInfo.ts @@ -0,0 +1,71 @@ +import { getCoingeekoTokenId } from "./getCoingeekoTokenId"; + +export type TokenInfo = { + description: {en: string}; + categories: string[]; + image: { + thumb: string; + small: string; + large: string; + }; + market_data: { + ath: {usd: number}; + ath_change_percentage: {usd: number}; + ath_date: { usd: string }; + atl: {usd: number}; + atl_change_percentage: {usd: number}; + atl_date: { usd: string }; + circulating_supply: number; + current_price: { usd: number }; + fully_diluted_valuation: { usd: number }; + high_24h: { usd: number }; + last_updated: string; + low_24h: { usd: number }; + market_cap: { usd: number }; + market_cap_change_24h: number; + market_cap_change_24h_in_currency: { usd: number }; + market_cap_change_percentage_24h: number; + market_cap_change_percentage_24h_in_currency: { usd: number }; + market_cap_fdv_ratio: number; + market_cap_rank: number; + max_supply: number; + price_change_24h: number; + price_change_24h_in_currency: { usd: number }; + price_change_percentage_1h_in_currency: { usd: number }; + price_change_percentage_1y_in_currency: { usd: number }; + price_change_percentage_7d_in_currency: { usd: number }; + price_change_percentage_14d_in_currency: { usd: number }; + price_change_percentage_24h_in_currency: { usd: number }; + price_change_percentage_30d_in_currency: { usd: number }; + price_change_percentage_60d_in_currency: { usd: number }; + price_change_percentage_200d_in_currency: { usd: number }; + total_supply: number; + total_value_locked: number|null; + total_volume: { usd: number }; + }; + sentiment_votes_down_percentage: number; + sentiment_votes_up_percentage: number; + +}; + +export const getTokenInfo = async (symbol: string) => { + const tokenId = await getCoingeekoTokenId(symbol); + if (!tokenId) return undefined; + // check localstorage if data is stored from less than 1 day + const response = localStorage.getItem(`hexa-lite-coingeeko/coin/${tokenId}/info`); + const jsonData = JSON.parse(response||'{}'); + const isDeadlineReach = (Date.now() - jsonData.timestamp) > (60 * 1000 * 60 * 24); + let tokenInfo; + if (response && !isDeadlineReach && jsonData.data) { + tokenInfo = jsonData.data; + } else { + // fetch data from coingecko + tokenInfo = await fetch(`https://api.coingecko.com/api/v3/coins/${tokenId}?market_data=true&community_data=true`) + .then((res) => res.json()); + localStorage.setItem(`hexa-lite-coingeeko/coin/${tokenId}/info`, JSON.stringify({ + data: tokenInfo, + timestamp: Date.now() + })); + } + return tokenInfo as TokenInfo; +} \ No newline at end of file From 2fd7894a86297358b0bca9d556ba7bffbe3cdac8 Mon Sep 17 00:00:00 2001 From: FazioNico Date: Fri, 15 Mar 2024 16:50:27 +0100 Subject: [PATCH 10/74] refactor: add token market details --- src/components/ui/LightChart.tsx | 2 +- .../mobile/TokenDetailMobileContainer.tsx | 232 +++++++++++------- src/styles/global.scss | 21 ++ src/utils/getCoingeekoTokenId.ts | 6 +- 4 files changed, 165 insertions(+), 96 deletions(-) diff --git a/src/components/ui/LightChart.tsx b/src/components/ui/LightChart.tsx index 58243481..644afdf6 100644 --- a/src/components/ui/LightChart.tsx +++ b/src/components/ui/LightChart.tsx @@ -23,7 +23,7 @@ export default function LightChart(props: { data: DataItem[] }) { // create a new chart const chart = createChart(chartContainerRef.current, { - width: 400, + width: window.innerWidth||400, height: 250, layout: { background: { diff --git a/src/containers/mobile/TokenDetailMobileContainer.tsx b/src/containers/mobile/TokenDetailMobileContainer.tsx index 5308d29a..c90e1520 100644 --- a/src/containers/mobile/TokenDetailMobileContainer.tsx +++ b/src/containers/mobile/TokenDetailMobileContainer.tsx @@ -1,6 +1,8 @@ import { IAsset } from "@/interfaces/asset.interface"; import { getAssetIconUrl } from "@/utils/getAssetIconUrl"; import { + IonAccordion, + IonAccordionGroup, IonAvatar, IonBadge, IonButton, @@ -17,6 +19,8 @@ import { IonListHeader, IonNote, IonRow, + IonSelect, + IonSelectOption, IonText, IonTitle, IonToolbar, @@ -27,7 +31,7 @@ import { ethers } from "ethers"; import Store from "@/store"; import { getWeb3State } from "@/store/selectors"; import { CHAIN_AVAILABLES } from "@/constants/chains"; -import { airplane, download, paperPlane } from "ionicons/icons"; +import { airplane, chevronDown, download, paperPlane } from "ionicons/icons"; import { DataItem } from "@/components/ui/LightChart"; import { getTokenHistoryPrice } from "@/utils/getTokenHistoryPrice"; import { TokenInfo, getTokenInfo } from "@/utils/getTokenInfo"; @@ -101,19 +105,16 @@ export const TokenDetailMobileContainer = (props: { - + > - +

$ {data.balanceUsd.toFixed(2)} + { tokenInfo?.market_data?.price_change_percentage_24h_in_currency?.usd && ( + + + ({tokenInfo.market_data.price_change_percentage_24h_in_currency.usd.toFixed( + 2 + )} + % /24h) + + + )}

+ + + + + +
+ +
+ + + +

Networks details

+
+
+ {data.assets + .sort((a, b) => + a.chain && b.chain + ? a.chain.id - b.chain.id + : a.balance + b.balance + ) + .map((token, index) => ( + + + c.id === token.chain?.id + )?.logo + } + alt={token.symbol} + style={{ transform: "scale(1.01)" }} + onError={(event) => { + ( + event.target as any + ).src = `https://images.placeholders.dev/?width=42&height=42&text=${token.symbol}&bgColor=%23000000&textColor=%23182449`; + }} + /> + + +

{token.chain?.name}

+
+ + {token.balance.toFixed(6)} {token.symbol} +
+ + + $ {token.balanceUsd.toFixed(2)} + + +
+
+ ))} +
+
+
+
+
+
@@ -152,84 +247,25 @@ export const TokenDetailMobileContainer = (props: {
- + .....}> - - - 1{' '}{data.symbol} = $ {data.priceUsd.toFixed(2)} - + + + 1 {data.symbol} = $ {(tokenInfo?.market_data?.current_price?.usd||data.priceUsd).toFixed(2)} + - - - - - -

Networks

-
-
- {data.assets - .sort((a, b) => - a.chain && b.chain - ? a.chain.id - b.chain.id - : a.balance + b.balance - ) - .map((token, index) => ( - - - c.id === token.chain?.id - )?.logo - } - alt={token.symbol} - style={{ transform: "scale(1.01)" }} - onError={(event) => { - ( - event.target as any - ).src = `https://images.placeholders.dev/?width=42&height=42&text=${token.symbol}&bgColor=%23000000&textColor=%23182449`; - }} - /> - - -

{token.chain?.name}

-
- - {token.balance.toFixed(6)} {token.symbol} -
- - $ {token.balanceUsd.toFixed(2)} - -
-
- ))} -
-
-
- {tokenInfo && ( @@ -240,20 +276,22 @@ export const TokenDetailMobileContainer = (props: { > -

Market details

+

Market details

- Categories - {tokenInfo.categories.map((categorie) => ( - {categorie} - ))} - + + {tokenInfo.categories.map((categorie, i) => ( + {categorie} + ))} + + */} {tokenInfo.market_data.market_cap.usd && ( )} - { tokenInfo.market_data.fully_diluted_valuation.usd && ( + {tokenInfo.market_data.fully_diluted_valuation.usd && ( - Fully Diluted Valuation + + Fully Diluted Valuation + )} - { tokenInfo.market_data.circulating_supply && ( + {tokenInfo.market_data.circulating_supply && ( )} - { tokenInfo.market_data.total_supply && ( + {tokenInfo.market_data.total_supply && ( )} - { tokenInfo.market_data.max_supply && ( + {tokenInfo.market_data.max_supply && ( -

Historical Price

+

Historical Price

- { tokenInfo.market_data.current_price.usd && ( + {tokenInfo.market_data.current_price.usd && ( -
+ + (24h change) +
)} - { tokenInfo.market_data.ath.usd && ( + {tokenInfo.market_data.ath.usd && ( )} - { tokenInfo.market_data.atl.usd&& ( + {tokenInfo.market_data.atl.usd && (

- Datas are coming from Coingeeko API + Market datas from Coingeeko API +
Last update: {new Date(tokenInfo?.market_data?.last_updated||new Date ().toLocaleDateString()).toLocaleString()}
+

diff --git a/src/styles/global.scss b/src/styles/global.scss index 951f05b9..c3b7d0b4 100755 --- a/src/styles/global.scss +++ b/src/styles/global.scss @@ -630,6 +630,27 @@ ion-accordion:not(.faq) { } } +ion-accordion.networkList { + &:not(.accordion-collapsed):not(.accordion-collapsing) { + background: transparent!important; + } + &:hover, + &.accordion-collapsed:hover { + background: transparent!important; + } + + *[slot=header] { + cursor: pointer; + } + + *[slot=content] ion-item { + --background: transparent!important; + } + // &.accordion-expanded ion-item[slot='header'] { + // --color: red; + // } +} + .verticalLineBefore::before { content: ''; position: absolute; diff --git a/src/utils/getCoingeekoTokenId.ts b/src/utils/getCoingeekoTokenId.ts index 515ad183..e5006fa8 100644 --- a/src/utils/getCoingeekoTokenId.ts +++ b/src/utils/getCoingeekoTokenId.ts @@ -10,6 +10,10 @@ export const getCoingeekoTokenId = async (symbol: string) => { data = await fetchResponse.json(); localStorage.setItem('hexa-lite-coingeeko/coinList', JSON.stringify(data)); } - const coin: {id?: string} = data.find((c: any) => c.symbol.toLowerCase() === symbol.toLowerCase()); + const coin: {id?: string} = data.find( + (c: any) => + c.symbol.toLowerCase() === symbol.toLowerCase() + && !c.name.toLowerCase().includes('bridged') + ); return coin?.id; } \ No newline at end of file From dc82fe31f1d144fff077b443d0a463d84c3b1dc2 Mon Sep 17 00:00:00 2001 From: FazioNico Date: Sat, 16 Mar 2024 00:28:04 +0100 Subject: [PATCH 11/74] refactor: improve wallet token detail --- src/components/ReserveDetail.tsx | 6 +- src/components/Welcome.tsx | 4 +- src/components/base/WalletBaseContainer.tsx | 24 +- src/components/ui/LightChart.tsx | 4 +- src/components/ui/WalletAssetEntity.tsx | 98 ++++ src/containers/desktop/DefiContainer.tsx | 22 +- .../desktop/TokenDetailDesktopContainer.tsx | 553 ++++++++++++++++++ .../desktop/WalletDesktopContainer.tsx | 196 +++---- src/utils/currency-format.ts | 12 - src/utils/currencyFormat.ts | 14 + src/utils/numberFormat.ts | 6 + 11 files changed, 778 insertions(+), 161 deletions(-) create mode 100644 src/components/ui/WalletAssetEntity.tsx create mode 100644 src/containers/desktop/TokenDetailDesktopContainer.tsx delete mode 100644 src/utils/currency-format.ts create mode 100644 src/utils/currencyFormat.ts create mode 100644 src/utils/numberFormat.ts diff --git a/src/components/ReserveDetail.tsx b/src/components/ReserveDetail.tsx index e2e79de5..ad31c732 100644 --- a/src/components/ReserveDetail.tsx +++ b/src/components/ReserveDetail.tsx @@ -58,7 +58,6 @@ import { import { useLoader } from "../context/LoaderContext"; import { getAssetIconUrl } from "../utils/getAssetIconUrl"; import { SymbolIcon } from "./SymbolIcon"; -import { currencyFormat } from "../utils/currency-format"; import { ApyDetail } from "./ApyDetail"; import { AavePool, IAavePool } from "@/pool/Aave.pool"; import { MarketPool } from "@/pool/Market.pool"; @@ -75,6 +74,7 @@ import { } from "@/utils/getPoolWalletBalance"; import { initializeUserSummary } from "@/store/effects/pools.effect"; import { ModalMessage } from "./ModalMessage"; +import { currencyFormat } from "@/utils/currencyFormat"; interface IReserveDetailProps { pool: MarketPool; @@ -818,14 +818,14 @@ export function ReserveDetail(props: IReserveDetailProps) { ) > 0 && ( <> - {currencyFormat( + {currencyFormat.format( Number( protocolSummary?.totalBorrowsUSD || 0 ) )}{" "} of{" "} - {currencyFormat( + {currencyFormat.format( Number( protocolSummary?.totalCollateralUSD || 0 diff --git a/src/components/Welcome.tsx b/src/components/Welcome.tsx index 91653165..35047792 100644 --- a/src/components/Welcome.tsx +++ b/src/components/Welcome.tsx @@ -61,7 +61,7 @@ export function Welcome({ style={{marginTop: '2rem'}} onClick={(e) => { router.push("swap"); - handleSegmentChange({ detail: { value: "swap" } }); + handleSegmentChange({ detail: { value: "wallet" } }); }} > Launch App @@ -672,7 +672,7 @@ export function Welcome({ color="gradient" onClick={(e) =>{ router.push("swap"); - handleSegmentChange({ detail: { value: "swap" } }) + handleSegmentChange({ detail: { value: "wallet" } }) }} > Launch App diff --git a/src/components/base/WalletBaseContainer.tsx b/src/components/base/WalletBaseContainer.tsx index 4dade31e..b705c203 100644 --- a/src/components/base/WalletBaseContainer.tsx +++ b/src/components/base/WalletBaseContainer.tsx @@ -5,6 +5,16 @@ import { DepositContainer } from "@/containers/DepositContainer"; import { HookOverlayOptions } from "@ionic/react/dist/types/hooks/HookOverlayOptions"; import { TransferContainer } from "../../containers/TransferContainer"; +export type SelectedTokenDetail = { + name: string; + symbol: string; + priceUsd: number; + balance: number; + balanceUsd: number; + thumbnail: string; + assets: IAsset[]; +}; + export interface WalletComponentProps { modalOpts: Omit & HookOverlayOptions; @@ -16,24 +26,12 @@ export interface WalletComponentState { filterBy: string | null; assetGroup: any[]; totalBalance: number; - selectedTokenDetail: { - name: string; - symbol: string; - priceUsd: number; - balance: number; - balanceUsd: number; - thumbnail: string; - assets: IAsset[]; - } | null; + selectedTokenDetail: SelectedTokenDetail | null; isEarnModalOpen: boolean; isTransferModalOpen: boolean; isDepositModalOpen: boolean; } -interface demo { - demo: string; -} - export default class WalletBaseComponent extends React.Component< T & WalletComponentProps, WalletComponentState diff --git a/src/components/ui/LightChart.tsx b/src/components/ui/LightChart.tsx index 644afdf6..209f9311 100644 --- a/src/components/ui/LightChart.tsx +++ b/src/components/ui/LightChart.tsx @@ -8,7 +8,7 @@ export interface DataItem { value: number; } -export default function LightChart(props: { data: DataItem[] }) { +export default function LightChart(props: { data: DataItem[], minHeight?: number }) { const chartContainerRef = useRef(null); const chartRef = useRef(null); @@ -24,7 +24,7 @@ export default function LightChart(props: { data: DataItem[] }) { // create a new chart const chart = createChart(chartContainerRef.current, { width: window.innerWidth||400, - height: 250, + height: props?.minHeight || 250, layout: { background: { type: ColorType.Solid, diff --git a/src/components/ui/WalletAssetEntity.tsx b/src/components/ui/WalletAssetEntity.tsx new file mode 100644 index 00000000..905d9666 --- /dev/null +++ b/src/components/ui/WalletAssetEntity.tsx @@ -0,0 +1,98 @@ +import { IAsset } from "@/interfaces/asset.interface"; +import { currencyFormat } from "@/utils/currencyFormat"; +import { getAssetIconUrl } from "@/utils/getAssetIconUrl"; +import { numberFormat } from "@/utils/numberFormat"; +import { + IonAvatar, + IonCol, + IonGrid, + IonLabel, + IonRow, + IonText, +} from "@ionic/react"; +import { SelectedTokenDetail } from "../base/WalletBaseContainer"; + +export function WalletAssetEntity(props: { + asset: SelectedTokenDetail; + setSelectedTokenDetail: (asset: SelectedTokenDetail) => void; +}) { + const { asset, setSelectedTokenDetail } = props; + + return ( + { + setSelectedTokenDetail(asset); + }} + style={{ + cursor: "pointer", + borderBottom: "solid 1px rgba(var(--ion-color-primary-rgb), 0.2)", + }} + > + + + + {asset.symbol} { + ( + event.target as any + ).src = `https://images.placeholders.dev/?width=42&height=42&text=${asset.symbol}&bgColor=%23000000&textColor=%23182449`; + }} + /> + + +

{asset.symbol}

+ +

{asset.name}

+
+
+
+ + + + + +

{currencyFormat.format(asset.priceUsd)}

+
+
+ + +

{numberFormat.format(asset.balance)}

+
+
+ + +

+ {currencyFormat.format(asset.balanceUsd)} +

+
+
+
+
+
+
+
+ ); +} diff --git a/src/containers/desktop/DefiContainer.tsx b/src/containers/desktop/DefiContainer.tsx index 7e5f7f87..d2e008d8 100644 --- a/src/containers/desktop/DefiContainer.tsx +++ b/src/containers/desktop/DefiContainer.tsx @@ -21,13 +21,13 @@ import { getPercent } from "../../utils/utils"; import { CHAIN_AVAILABLES } from "../../constants/chains"; import { useEffect, useState } from "react"; import { MarketList } from "../../components/MarketsList"; -import { currencyFormat } from "../../utils/currency-format"; import { valueToBigNumber } from "@aave/math-utils"; import { getReadableValue } from "@/utils/getReadableValue"; import Store from "@/store"; import { getPoolGroupsState, getProtocolSummaryState, getUserSummaryAndIncentivesGroupState, getWeb3State } from "@/store/selectors"; import { initializePools, initializeUserSummary } from "@/store/effects/pools.effect"; import { patchPoolsState } from "@/store/actions"; +import { currencyFormat } from "@/utils/currencyFormat"; export const minBaseTokenRemainingByNetwork: Record = { [ChainId.optimism]: "0.0001", @@ -183,7 +183,7 @@ export default function DefiContainer({ size-md="4" class=" ion-padding-vertical" > -

{currencyFormat(totalSupplyUsd)}

+

{currencyFormat.format(totalSupplyUsd)}

DEPOSIT BALANCE @@ -205,8 +205,8 @@ export default function DefiContainer({
- {currencyFormat(+totalBorrowsUsd)} of{" "} - {currencyFormat(totalBorrowableUsd)} + {currencyFormat.format(+totalBorrowsUsd)} of{" "} + {currencyFormat.format(totalBorrowableUsd)}

@@ -216,7 +216,7 @@ export default function DefiContainer({ size-md="4" class=" ion-padding-vertical" > -

{currencyFormat(totalAbailableToBorrow)}

+

{currencyFormat.format(totalAbailableToBorrow)}

AVAILABLE TO BORROW @@ -374,11 +374,11 @@ export default function DefiContainer({ class="ion-padding-horizontal ion-text-end ion-hide-md-down" > - {currencyFormat(+summary.totalSupplyUSD)} + {currencyFormat.format(+summary.totalSupplyUSD)}
- {currencyFormat( + {currencyFormat.format( summary.totalSupplyUSD * summary.currentLiquidationThreshold )}{" "} @@ -393,7 +393,7 @@ export default function DefiContainer({ class="ion-padding-horizontal ion-text-end ion-hide-md-down" > - {currencyFormat(+summary.totalBorrowsUSD)} + {currencyFormat.format(+summary.totalBorrowsUSD)} - {currencyFormat( + {currencyFormat.format( (summary.totalCollateralUSD * summary.currentLiquidationThreshold) - summary.totalBorrowsUSD @@ -415,8 +415,8 @@ export default function DefiContainer({ class="ion-padding-horizontal ion-text-end" > - {currencyFormat(+summary.totalBorrowsUSD)} of{" "} - {currencyFormat( + {currencyFormat.format(+summary.totalBorrowsUSD)} of{" "} + {currencyFormat.format( summary.totalCollateralUSD * summary.currentLiquidationThreshold )}{" "} diff --git a/src/containers/desktop/TokenDetailDesktopContainer.tsx b/src/containers/desktop/TokenDetailDesktopContainer.tsx new file mode 100644 index 00000000..2f0ce455 --- /dev/null +++ b/src/containers/desktop/TokenDetailDesktopContainer.tsx @@ -0,0 +1,553 @@ +import { IAsset } from "@/interfaces/asset.interface"; +import { getAssetIconUrl } from "@/utils/getAssetIconUrl"; +import { + IonAccordion, + IonAccordionGroup, + IonAvatar, + IonBadge, + IonButton, + IonChip, + IonCol, + IonContent, + IonFooter, + IonGrid, + IonHeader, + IonIcon, + IonItem, + IonLabel, + IonList, + IonListHeader, + IonNote, + IonRow, + IonSelect, + IonSelectOption, + IonSpinner, + IonText, + IonTitle, + IonToolbar, +} from "@ionic/react"; +import { MobileActionNavButtons } from "../../components/mobile/ActionNavButtons"; +import { Suspense, lazy, useEffect, useState } from "react"; +import { ethers } from "ethers"; +import Store from "@/store"; +import { getWeb3State } from "@/store/selectors"; +import { CHAIN_AVAILABLES } from "@/constants/chains"; +import { airplane, chevronDown, close, download, paperPlane, repeat } from "ionicons/icons"; +import { DataItem } from "@/components/ui/LightChart"; +import { getTokenHistoryPrice } from "@/utils/getTokenHistoryPrice"; +import { TokenInfo, getTokenInfo } from "@/utils/getTokenInfo"; +import { numberFormat } from "@/utils/numberFormat"; +import { currencyFormat } from "@/utils/currencyFormat"; + +const LightChart = lazy(() => import("@/components/ui/LightChart")); + +const getTxsFromAddress = async (address: string) => { + let provider = new ethers.providers.EtherscanProvider(); + let history = await provider.getHistory(address); + console.log(history); +}; + +export const TokenDetailDesktopContainer = (props: { + data: { + name: string; + symbol: string; + priceUsd: number; + balance: number; + balanceUsd: number; + thumbnail: string; + assets: IAsset[]; + }; + dismiss: () => void; + setState: (state: any) => void; +}) => { + const { data, dismiss } = props; + const { walletAddress } = Store.useState(getWeb3State); + const [dataChartHistory, setDataChartHistory] = useState([]); + const [tokenInfo, setTokenInfo] = useState(undefined); + + useEffect(() => { + if (!walletAddress) return; + getTxsFromAddress(walletAddress); + getTokenHistoryPrice(props.data.symbol).then((prices) => { + const data: DataItem[] = prices.map(([time, value]: string[]) => { + const dataItem = { + time: new Date(time).toISOString().split("T").shift() || "", + value: Number(value), + }; + return dataItem; + }); + setDataChartHistory(() => data.slice(0, data.length - 1)); + }); + getTokenInfo(props.data.symbol).then((tokenInfo) => + setTokenInfo(() => tokenInfo) + ); + }, [walletAddress]); + + return ( + <> + + + + {data.symbol} + + $ {data.balanceUsd.toFixed(2)} + + + + + + + + + + + + + + + {data.symbol} { + ( + event.target as any + ).src = `https://images.placeholders.dev/?width=42&height=42&text=${data.symbol}&bgColor=%23000000&textColor=%23182449`; + }} + /> + + +

+ {data.balance.toFixed(6)} {data.symbol} +

+
+ +

+ $ {data.balanceUsd.toFixed(2)} + { tokenInfo?.market_data?.price_change_percentage_24h_in_currency?.usd && ( + + + ({tokenInfo.market_data.price_change_percentage_24h_in_currency.usd.toFixed( + 2 + )} + % /24h) + + + )} +

+
+ + + + { + props.setState({ isTransferModalOpen: true }); + }}> + + Send + + { + props.setState({ isDepositModalOpen: true }); + }}> + + Deposit + + + + + + + +
+ +
+ + + +

Networks details

+
+
+ {data.assets + .sort((a, b) => + a.chain && b.chain + ? a.chain.id - b.chain.id + : a.balance + b.balance + ) + .map((token, index) => ( + + + c.id === token.chain?.id + )?.logo + } + alt={token.symbol} + style={{ transform: "scale(1.01)" }} + onError={(event) => { + ( + event.target as any + ).src = `https://images.placeholders.dev/?width=42&height=42&text=${token.symbol}&bgColor=%23000000&textColor=%23182449`; + }} + /> + + +

{token.chain?.name}

+
+ + { numberFormat.format(token.balance)} {token.symbol} +
+ + + {currencyFormat.format(token.balanceUsd)} + + +
+
+ ))} +
+
+
+
+
+
+
+ + + + + + + + + }> + +

+ {props.data.symbol} / USD + + 1 {data.symbol} = {currencyFormat.format(tokenInfo?.market_data?.current_price?.usd||data.priceUsd)} + +

+
+ +
+
+
+ + {tokenInfo && ( + + + + + +

Market details

+
+
+ {Boolean(tokenInfo.market_data.market_cap.usd) && ( + + Market Cap. + + {currencyFormat.format(tokenInfo.market_data.market_cap.usd)} + + + )} + {Boolean(tokenInfo.market_data.fully_diluted_valuation.usd) && ( + + + Fully Diluted Valuation + + + {currencyFormat.format(tokenInfo.market_data.fully_diluted_valuation.usd)} + + + )} + {Boolean(tokenInfo.market_data.circulating_supply) && ( + + Circulating supply + + {numberFormat.format(tokenInfo.market_data.circulating_supply)} + + + )} + {Boolean(tokenInfo.market_data.total_supply) && ( + + Total supply + + {numberFormat.format(tokenInfo.market_data.total_supply)} + + + )} + {Boolean(tokenInfo.market_data.max_supply) && ( + + Max supply + + {numberFormat.format(tokenInfo.market_data.max_supply)} + + + )} +
+ + + +

Historical Price

+
+
+ {Boolean(tokenInfo.market_data.current_price.usd) && ( + + Current price + + {currencyFormat.format(tokenInfo.market_data.current_price.usd)} + + {numberFormat.format(tokenInfo.market_data.price_change_percentage_24h_in_currency.usd)} + % + + + (24h change) + + + + )} + {Boolean(tokenInfo.market_data.ath.usd) && ( + + All time height + + {currencyFormat.format(tokenInfo.market_data.ath.usd)} + + {numberFormat.format(tokenInfo.market_data.ath_change_percentage.usd)}% + +
+ + + {new Date( + tokenInfo.market_data.ath_date.usd + ).toLocaleDateString()} + + +
+
+ )} + {Boolean(tokenInfo.market_data.atl.usd) && ( + + All time low + + {currencyFormat.format(tokenInfo.market_data.atl.usd)} + + {numberFormat.format(tokenInfo.market_data.atl_change_percentage.usd)}% + +
+ + + {new Date( + tokenInfo.market_data.atl_date.usd + ).toLocaleDateString()} + + +
+
+ )} +
+
+ + + +

Description

+
+
+ +

+ {tokenInfo.description.en} +

+
+
+ + +

Categories

+
+
+
+ {tokenInfo.categories.map((categorie, i) => ( + {categorie} + ))} +
+
+
+
+ )} + + + +

+ + Market datas from Coingeeko API +
Last update: {new Date(tokenInfo?.market_data?.last_updated||new Date ().toLocaleDateString()).toLocaleString()} +
+ +

+
+
+
+
+ + + ); +}; diff --git a/src/containers/desktop/WalletDesktopContainer.tsx b/src/containers/desktop/WalletDesktopContainer.tsx index 01cb08ec..6499d2e7 100644 --- a/src/containers/desktop/WalletDesktopContainer.tsx +++ b/src/containers/desktop/WalletDesktopContainer.tsx @@ -3,7 +3,6 @@ import WalletBaseComponent, { WalletComponentProps, } from "../../components/base/WalletBaseContainer"; import { - IonAvatar, IonButton, IonCard, IonCardContent, @@ -11,17 +10,17 @@ import { IonGrid, IonIcon, IonLabel, + IonModal, IonRow, IonSearchbar, - IonSelect, - IonSelectOption, IonText, } from "@ionic/react"; import ConnectButton from "@/components/ConnectButton"; -import { getAssetIconUrl } from "@/utils/getAssetIconUrl"; import Store from "@/store"; import { getWeb3State } from "@/store/selectors"; -import { CHAIN_AVAILABLES } from "@/constants/chains"; +import { TokenDetailDesktopContainer } from "./TokenDetailDesktopContainer"; +import { currencyFormat } from "@/utils/currencyFormat"; +import { WalletAssetEntity } from "@/components/ui/WalletAssetEntity"; class WalletDesktopContainer extends WalletBaseComponent { constructor(props: WalletComponentProps) { @@ -50,7 +49,7 @@ class WalletDesktopContainer extends WalletBaseComponent {

- $ {this.state.totalBalance.toFixed(2)} + {currencyFormat.format(this.state.totalBalance)}

@@ -197,11 +196,12 @@ class WalletDesktopContainer extends WalletBaseComponent { <> - { - this.handleSearchChange(e); - }} /> + { + this.handleSearchChange(e); + }} + /> @@ -215,129 +215,89 @@ class WalletDesktopContainer extends WalletBaseComponent { > - - Asset + + + Asset + - - Price - - - Balance - - - Value - - - - - {this.state.assetGroup - .filter((asset) => - this.state.filterBy - ? asset.symbol - .toLowerCase() - .includes(this.state.filterBy.toLowerCase()) - : true - ) - .map((asset, index) => { - return ( - { - console.log("asset", asset); - }} - style={{ - borderBottom: - "solid 1px rgba(var(--ion-color-primary-rgb), 0.2)", - }} - > - - - + + - {asset.symbol} { - ( - event.target as any - ).src = `https://images.placeholders.dev/?width=42&height=42&text=${asset.symbol}&bgColor=%23000000&textColor=%23182449`; - }} - /> - - -

{asset.symbol}

-

{asset.name}

-
-
-
- - - -

$ {asset.priceUsd.toFixed(2)}

+ Price
-
- - -

{asset.balance.toFixed(2)}

+
+ + + Balance - - - -

$ {asset.balanceUsd.toFixed(2)}

+
+ + + Value - - -
-
- ); - })} + +
+ + + + + {this.state.assetGroup + .filter((asset) => + this.state.filterBy + ? asset.symbol + .toLowerCase() + .includes(this.state.filterBy.toLowerCase()) + : true + ) + .map((asset, index) => { + return ( + + this.handleTokenDetailClick(asset) + } + asset={asset} + key={index} + /> + ); + })} )} + + this.handleTokenDetailClick(null)} + className="modalPage" + > + {this.state.selectedTokenDetail && ( + this.setState(state)} + data={this.state.selectedTokenDetail} + dismiss={() => this.handleTokenDetailClick(null)} + /> + )} + ); } diff --git a/src/utils/currency-format.ts b/src/utils/currency-format.ts deleted file mode 100644 index 37cdb071..00000000 --- a/src/utils/currency-format.ts +++ /dev/null @@ -1,12 +0,0 @@ - -export const currencyFormat = ( - num: number, - ops?: { currency?: string; language?: string } -) => { - const currency = ops?.currency || "USD"; - const language = ops?.language || "en-US"; - return num.toLocaleString(language, { - style: "currency", - currency, - }); -} \ No newline at end of file diff --git a/src/utils/currencyFormat.ts b/src/utils/currencyFormat.ts new file mode 100644 index 00000000..6bfe3278 --- /dev/null +++ b/src/utils/currencyFormat.ts @@ -0,0 +1,14 @@ + +// format number to US dollar +export const USDollar = new Intl.NumberFormat('en-US', { + style: 'currency', + currency: 'USD', +}); + +export const currencyFormat = new Intl.NumberFormat('en-US', { + style: 'currency', + currency: 'USD', + compactDisplay: 'short', + minimumFractionDigits: 2, + maximumFractionDigits: 2, +}); \ No newline at end of file diff --git a/src/utils/numberFormat.ts b/src/utils/numberFormat.ts new file mode 100644 index 00000000..b7c132b5 --- /dev/null +++ b/src/utils/numberFormat.ts @@ -0,0 +1,6 @@ + +export const numberFormat = new Intl.NumberFormat('en-US', { + style: 'decimal', + minimumFractionDigits: 2, + maximumFractionDigits: 2, +}); \ No newline at end of file From 32bf868a6173fe3a3ca220e149de1be6aa639b09 Mon Sep 17 00:00:00 2001 From: FazioNico Date: Sat, 16 Mar 2024 02:04:04 +0100 Subject: [PATCH 12/74] refactor: improve ui and add Haptics --- package-lock.json | 9 + package.json | 1 + src/components/base/WalletBaseContainer.tsx | 10 +- src/components/ui/MenuSetting.tsx | 74 +++++ src/components/ui/TokenDetailDescription.tsx | 31 +++ src/components/ui/TokenDetailMarketData.tsx | 243 ++++++++++++++++ .../desktop/TokenDetailDesktopContainer.tsx | 236 +--------------- .../mobile/TokenDetailMobileContainer.tsx | 260 ++---------------- .../mobile/WalletMobileContainer.tsx | 89 ++++-- 9 files changed, 460 insertions(+), 493 deletions(-) create mode 100644 src/components/ui/MenuSetting.tsx create mode 100644 src/components/ui/TokenDetailDescription.tsx create mode 100644 src/components/ui/TokenDetailMarketData.tsx diff --git a/package-lock.json b/package-lock.json index 64467e18..bb228caf 100644 --- a/package-lock.json +++ b/package-lock.json @@ -17,6 +17,7 @@ "@capacitor/android": "^5.0.0", "@capacitor/core": "^5.0.0", "@capacitor/dialog": "^5.0.7", + "@capacitor/haptics": "^5.0.7", "@capacitor/ios": "^5.0.0", "@capacitor/status-bar": "^5.0.0", "@cosmjs/stargate": "^0.32.1", @@ -1515,6 +1516,14 @@ "@capacitor/core": "^5.0.0" } }, + "node_modules/@capacitor/haptics": { + "version": "5.0.7", + "resolved": "https://registry.npmjs.org/@capacitor/haptics/-/haptics-5.0.7.tgz", + "integrity": "sha512-/j+7Qa4BxQA5aOU43cwXuiudfSXfoHFsAVfcehH5DkSjxLykZKWHEuE4uFJXqdkSIbAHjS37D0Sde6ENP6G/MA==", + "peerDependencies": { + "@capacitor/core": "^5.0.0" + } + }, "node_modules/@capacitor/ios": { "version": "5.6.0", "resolved": "https://registry.npmjs.org/@capacitor/ios/-/ios-5.6.0.tgz", diff --git a/package.json b/package.json index f70c4e99..895b95c3 100644 --- a/package.json +++ b/package.json @@ -23,6 +23,7 @@ "@capacitor/android": "^5.0.0", "@capacitor/core": "^5.0.0", "@capacitor/dialog": "^5.0.7", + "@capacitor/haptics": "^5.0.7", "@capacitor/ios": "^5.0.0", "@capacitor/status-bar": "^5.0.0", "@cosmjs/stargate": "^0.32.1", diff --git a/src/components/base/WalletBaseContainer.tsx b/src/components/base/WalletBaseContainer.tsx index b705c203..e01f0c76 100644 --- a/src/components/base/WalletBaseContainer.tsx +++ b/src/components/base/WalletBaseContainer.tsx @@ -113,11 +113,11 @@ export default class WalletBaseComponent extends React.Component< this.setState({ assetGroup }); } - handleSearchChange(e: CustomEvent) { + async handleSearchChange(e: CustomEvent) { this.setState({ filterBy: e.detail.value }); } - handleTokenDetailClick(token: any = null) { + async handleTokenDetailClick(token: any = null) { console.log(token); this.setState((prev) =>({ ...prev, @@ -125,16 +125,16 @@ export default class WalletBaseComponent extends React.Component< })); } - handleEarnClick() { + async handleEarnClick() { this.setState({ isEarnModalOpen: !this.state.isEarnModalOpen }); } - handleTransferClick(state: boolean) { + async handleTransferClick(state: boolean) { console.log('handleTransferClick', state) this.setState({isTransferModalOpen: state}); } - handleDepositClick(state?: boolean) { + async handleDepositClick(state?: boolean) { this.setState({ isDepositModalOpen: state !== undefined ? state : !this.state.isDepositModalOpen, diff --git a/src/components/ui/MenuSetting.tsx b/src/components/ui/MenuSetting.tsx new file mode 100644 index 00000000..3b7987a3 --- /dev/null +++ b/src/components/ui/MenuSetting.tsx @@ -0,0 +1,74 @@ +import React, { useRef, useState } from "react"; +import { + IonMenu, + IonHeader, + IonToolbar, + IonTitle, + IonContent, + IonItem, + IonIcon, + IonLabel, + IonText, + IonItemDivider, + IonButton, + IonModal, + IonFooter, +} from "@ionic/react"; +import { radioButtonOn, ribbonOutline } from "ionicons/icons"; +import { getAddressPoints } from "@/servcies/datas.service"; +import Store from "@/store"; +import { getWeb3State } from "@/store/selectors"; +import ConnectButton from "../ConnectButton"; +import DisconnectButton from "../DisconnectButton"; + +interface MenuSettingsProps {} + +export const MenuSettings: React.FC = ({}) => { + const menuRef = useRef(null); + const { walletAddress } = Store.useState(getWeb3State); + const [points, setPoints] = useState(null); + + return ( + <> + + + Settings + + + + { + menuRef.current?.close(); + }} + > + + +

Wallet

+
+ +

+ {walletAddress} +

+
+
+
+
+ + {`HexaLite v${process.env.NEXT_PUBLIC_APP_VERSION} - ${process.env.NEXT_PUBLIC_APP_BUILD_DATE}`} + +
+
+ + + + + + + ); +}; diff --git a/src/components/ui/TokenDetailDescription.tsx b/src/components/ui/TokenDetailDescription.tsx new file mode 100644 index 00000000..ed677f49 --- /dev/null +++ b/src/components/ui/TokenDetailDescription.tsx @@ -0,0 +1,31 @@ +import { TokenInfo } from "@/utils/getTokenInfo"; +import { IonChip, IonLabel, IonListHeader, IonText } from "@ionic/react"; + +export function TokenDetailDescription(props: { tokenInfo: TokenInfo }) { + const { tokenInfo } = props; + + return ( + <> + + +

Description

+
+
+ +

{tokenInfo.description.en}

+
+
+ + +

Categories

+
+
+
+ {tokenInfo.categories.map((categorie, i) => ( + {categorie} + ))} +
+
+ + ); +} diff --git a/src/components/ui/TokenDetailMarketData.tsx b/src/components/ui/TokenDetailMarketData.tsx new file mode 100644 index 00000000..dc7cecd0 --- /dev/null +++ b/src/components/ui/TokenDetailMarketData.tsx @@ -0,0 +1,243 @@ +import { currencyFormat } from "@/utils/currencyFormat"; +import { TokenInfo } from "@/utils/getTokenInfo"; +import { numberFormat } from "@/utils/numberFormat"; +import { + IonItem, + IonLabel, + IonList, + IonListHeader, + IonNote, + IonText, +} from "@ionic/react"; + +export function TokenDetailMarketDetail(props: { + tokenInfo: TokenInfo +}) { + const { tokenInfo } = props; + return ( + <> + + + +

Market details

+
+
+ {Boolean(tokenInfo.market_data.market_cap.usd) && ( + + Market Cap. + + {currencyFormat.format(tokenInfo.market_data.market_cap.usd)} + + + )} + {Boolean(tokenInfo.market_data.fully_diluted_valuation.usd) && ( + + Fully Diluted Valuation + + {currencyFormat.format( + tokenInfo.market_data.fully_diluted_valuation.usd + )} + + + )} + {Boolean(tokenInfo.market_data.circulating_supply) && ( + + Circulating supply + + {numberFormat.format(tokenInfo.market_data.circulating_supply)} + + + )} + {Boolean(tokenInfo.market_data.total_supply) && ( + + Total supply + + {numberFormat.format(tokenInfo.market_data.total_supply)} + + + )} + {Boolean(tokenInfo.market_data.max_supply) && ( + + Max supply + + {numberFormat.format(tokenInfo.market_data.max_supply)} + + + )} +
+ + + +

Historical Price

+
+
+ {Boolean(tokenInfo.market_data.current_price.usd) && ( + + Current price + + {currencyFormat.format(tokenInfo.market_data.current_price.usd)} + + {numberFormat.format( + tokenInfo.market_data.price_change_percentage_24h_in_currency + .usd + )} + % + + + + (24h change) + + + + + )} + {Boolean(tokenInfo.market_data.ath.usd) && ( + + All time height + + {currencyFormat.format(tokenInfo.market_data.ath.usd)} + + {numberFormat.format( + tokenInfo.market_data.ath_change_percentage.usd + )} + % + +
+ + + {new Date( + tokenInfo.market_data.ath_date.usd + ).toLocaleDateString()} + + +
+
+ )} + {Boolean(tokenInfo.market_data.atl.usd) && ( + + All time low + + {currencyFormat.format(tokenInfo.market_data.atl.usd)} + + {numberFormat.format( + tokenInfo.market_data.atl_change_percentage.usd + )} + % + +
+ + + {new Date( + tokenInfo.market_data.atl_date.usd + ).toLocaleDateString()} + + +
+
+ )} +
+ + ); +} diff --git a/src/containers/desktop/TokenDetailDesktopContainer.tsx b/src/containers/desktop/TokenDetailDesktopContainer.tsx index 2f0ce455..0bfbc539 100644 --- a/src/containers/desktop/TokenDetailDesktopContainer.tsx +++ b/src/containers/desktop/TokenDetailDesktopContainer.tsx @@ -38,6 +38,8 @@ import { getTokenHistoryPrice } from "@/utils/getTokenHistoryPrice"; import { TokenInfo, getTokenInfo } from "@/utils/getTokenInfo"; import { numberFormat } from "@/utils/numberFormat"; import { currencyFormat } from "@/utils/currencyFormat"; +import { TokenDetailDescription } from "@/components/ui/TokenDetailDescription"; +import { TokenDetailMarketDetail } from "@/components/ui/TokenDetailMarketData"; const LightChart = lazy(() => import("@/components/ui/LightChart")); @@ -297,239 +299,10 @@ export const TokenDetailDesktopContainer = (props: { {tokenInfo && ( - - - -

Market details

-
-
- {Boolean(tokenInfo.market_data.market_cap.usd) && ( - - Market Cap. - - {currencyFormat.format(tokenInfo.market_data.market_cap.usd)} - - - )} - {Boolean(tokenInfo.market_data.fully_diluted_valuation.usd) && ( - - - Fully Diluted Valuation - - - {currencyFormat.format(tokenInfo.market_data.fully_diluted_valuation.usd)} - - - )} - {Boolean(tokenInfo.market_data.circulating_supply) && ( - - Circulating supply - - {numberFormat.format(tokenInfo.market_data.circulating_supply)} - - - )} - {Boolean(tokenInfo.market_data.total_supply) && ( - - Total supply - - {numberFormat.format(tokenInfo.market_data.total_supply)} - - - )} - {Boolean(tokenInfo.market_data.max_supply) && ( - - Max supply - - {numberFormat.format(tokenInfo.market_data.max_supply)} - - - )} -
- - - -

Historical Price

-
-
- {Boolean(tokenInfo.market_data.current_price.usd) && ( - - Current price - - {currencyFormat.format(tokenInfo.market_data.current_price.usd)} - - {numberFormat.format(tokenInfo.market_data.price_change_percentage_24h_in_currency.usd)} - % - - - (24h change) - - - - )} - {Boolean(tokenInfo.market_data.ath.usd) && ( - - All time height - - {currencyFormat.format(tokenInfo.market_data.ath.usd)} - - {numberFormat.format(tokenInfo.market_data.ath_change_percentage.usd)}% - -
- - - {new Date( - tokenInfo.market_data.ath_date.usd - ).toLocaleDateString()} - - -
-
- )} - {Boolean(tokenInfo.market_data.atl.usd) && ( - - All time low - - {currencyFormat.format(tokenInfo.market_data.atl.usd)} - - {numberFormat.format(tokenInfo.market_data.atl_change_percentage.usd)}% - -
- - - {new Date( - tokenInfo.market_data.atl_date.usd - ).toLocaleDateString()} - - -
-
- )} -
+
- - -

Description

-
-
- -

- {tokenInfo.description.en} -

-
-
- - -

Categories

-
-
-
- {tokenInfo.categories.map((categorie, i) => ( - {categorie} - ))} -
-
+
)} @@ -541,7 +314,6 @@ export const TokenDetailDesktopContainer = (props: { Market datas from Coingeeko API
Last update: {new Date(tokenInfo?.market_data?.last_updated||new Date ().toLocaleDateString()).toLocaleString()}
-

diff --git a/src/containers/mobile/TokenDetailMobileContainer.tsx b/src/containers/mobile/TokenDetailMobileContainer.tsx index c90e1520..533d9cf9 100644 --- a/src/containers/mobile/TokenDetailMobileContainer.tsx +++ b/src/containers/mobile/TokenDetailMobileContainer.tsx @@ -35,6 +35,8 @@ import { airplane, chevronDown, download, paperPlane } from "ionicons/icons"; import { DataItem } from "@/components/ui/LightChart"; import { getTokenHistoryPrice } from "@/utils/getTokenHistoryPrice"; import { TokenInfo, getTokenInfo } from "@/utils/getTokenInfo"; +import { TokenDetailMarketDetail } from "@/components/ui/TokenDetailMarketData"; +import { TokenDetailDescription } from "@/components/ui/TokenDetailDescription"; const LightChart = lazy(() => import("@/components/ui/LightChart")); @@ -268,247 +270,25 @@ export const TokenDetailMobileContainer = (props: { {tokenInfo && ( - - - - -

Market details

-
-
- {/* - Categories - - {tokenInfo.categories.map((categorie, i) => ( - {categorie} - ))} - - */} - {tokenInfo.market_data.market_cap.usd && ( - - Market Cap. - - ${tokenInfo.market_data.market_cap.usd.toFixed(0)} - - - )} - {tokenInfo.market_data.fully_diluted_valuation.usd && ( - - - Fully Diluted Valuation - - - $ - {tokenInfo.market_data.fully_diluted_valuation.usd.toFixed( - 0 - )} - - - )} - {tokenInfo.market_data.circulating_supply && ( - - Circulating supply - - {tokenInfo.market_data.circulating_supply.toFixed(0)} - - - )} - {tokenInfo.market_data.total_supply && ( - - Total supply - - {tokenInfo.market_data.total_supply.toFixed(0)} - - - )} - {tokenInfo.market_data.max_supply && ( - - Max supply - - {tokenInfo.market_data.max_supply.toFixed(0)} - - - )} - - -

Historical Price

-
-
- {tokenInfo.market_data.current_price.usd && ( - - Current price - - ${tokenInfo.market_data.current_price.usd} - - {tokenInfo.market_data.price_change_percentage_24h_in_currency.usd.toFixed( - 2 - )} - % - - - (24h change) - - - - )} - {tokenInfo.market_data.ath.usd && ( - - All time height - - ${tokenInfo.market_data.ath.usd} - - {tokenInfo.market_data.ath_change_percentage.usd.toFixed( - 2 - )} - % - -
- - - {new Date( - tokenInfo.market_data.ath_date.usd - ).toLocaleDateString()} - - -
-
- )} - {tokenInfo.market_data.atl.usd && ( - - All time low - - ${tokenInfo.market_data.atl.usd} - - {tokenInfo.market_data.atl_change_percentage.usd.toFixed( - 2 - )} - % - -
- - - {new Date( - tokenInfo.market_data.atl_date.usd - ).toLocaleDateString()} - - -
-
- )} -
- -

- - Market datas from Coingeeko API -
Last update: {new Date(tokenInfo?.market_data?.last_updated||new Date ().toLocaleDateString()).toLocaleString()} -
- -

-
-
+ <> + + + + + + + )} + + +

+ + Market datas from Coingeeko API +
Last update: {new Date(tokenInfo?.market_data?.last_updated||new Date ().toLocaleDateString()).toLocaleString()} +
+

+
+
diff --git a/src/containers/mobile/WalletMobileContainer.tsx b/src/containers/mobile/WalletMobileContainer.tsx index 4021a85c..63d06fa8 100644 --- a/src/containers/mobile/WalletMobileContainer.tsx +++ b/src/containers/mobile/WalletMobileContainer.tsx @@ -30,13 +30,19 @@ import { IonItemOption, IonAlert, IonModal, + IonButton, + IonMenuToggle, } from "@ionic/react"; -import { card, download, paperPlane, repeat } from "ionicons/icons"; +import { card, download, paperPlane, repeat, settings, settingsOutline } from "ionicons/icons"; import { useState } from "react"; import { IAsset } from "@/interfaces/asset.interface"; import { SwapMobileContainer } from "@/containers/mobile/SwapMobileContainer"; import { TokenDetailMobileContainer } from "@/containers/mobile/TokenDetailMobileContainer"; import { EarnMobileContainer } from "@/containers/mobile/EarnMobileContainer"; +import { MenuSettings } from "@/components/ui/MenuSetting"; +import { currencyFormat } from "@/utils/currencyFormat"; +import { Haptics, ImpactStyle } from '@capacitor/haptics'; +import { TokenInfo } from "@/utils/getTokenInfo"; type SelectedTokenDetail = | { @@ -58,6 +64,8 @@ interface WalletMobileComProps { ) => void; isAlertOpen: boolean; setIsAlertOpen: (value: boolean) => void; + isSettingOpen: boolean; + setIsSettingOpen: (value: boolean) => void; } class WalletMobileContainer extends WalletBaseComponent< @@ -67,6 +75,41 @@ class WalletMobileContainer extends WalletBaseComponent< super(props); } + async setIsSwapModalOpen(state?: SelectedTokenDetail | boolean | undefined) { + if (state !== false) { + await Haptics.impact({ style: ImpactStyle.Light }); + } + this.props.setIsSwapModalOpen(state); + } + + async setIsSettingOpen(state: boolean ) { + if (state !== false) { + await Haptics.impact({ style: ImpactStyle.Light }); + } + this.props.setIsSettingOpen(state); + } + + async handleDepositClick(state?: boolean | undefined) { + if (state !== false) { + await Haptics.impact({ style: ImpactStyle.Light }); + } + await super.handleDepositClick(state); + } + + async handleTokenDetailClick(token?: any): Promise { + super.handleTokenDetailClick(token); + } + + async handleEarnClick(): Promise { + await Haptics.impact({ style: ImpactStyle.Light }); + super.handleEarnClick(); + } + + async handleTransferClick(state: boolean): Promise { + await Haptics.impact({ style: ImpactStyle.Light }); + await super.handleTransferClick(state); + } + render() { return ( <> @@ -88,9 +131,18 @@ class WalletMobileContainer extends WalletBaseComponent< fontWeight: "normal", }} > - $ {this.state.totalBalance.toFixed(2)} + {currencyFormat.format(this.state.totalBalance)} + + this.setIsSettingOpen(true)}> + + + @@ -113,7 +165,7 @@ class WalletMobileContainer extends WalletBaseComponent< margin: "0px 0px 1.5rem", }} > - $ {getReadableValue(this.state.totalBalance)} + {currencyFormat.format(this.state.totalBalance)}

@@ -123,7 +175,7 @@ class WalletMobileContainer extends WalletBaseComponent< this.setState(state)} setIsSwapModalOpen={() => - this.props.setIsSwapModalOpen(true) + this.setIsSwapModalOpen(true) } /> @@ -155,14 +207,7 @@ class WalletMobileContainer extends WalletBaseComponent< {this.state.totalBalance <= 0 && ( - - - this.props.setIsAlertOpen(false) - } - > + @@ -275,7 +320,7 @@ class WalletMobileContainer extends WalletBaseComponent<

- $ {asset.balanceUsd.toFixed(2)} + {currencyFormat.format(asset.balanceUsd)}
{asset.balance.toFixed(6)} @@ -307,7 +352,7 @@ class WalletMobileContainer extends WalletBaseComponent< { - this.props.setIsSwapModalOpen(asset); + this.setIsSwapModalOpen(asset); }} > { - this.props.setIsSwapModalOpen(undefined); + this.setIsSwapModalOpen(undefined); }} > this.setState(state)} - setIsSwapModalOpen={() => this.props.setIsSwapModalOpen(true)} + setIsSwapModalOpen={() => this.setIsSwapModalOpen(true)} data={this.state.selectedTokenDetail} dismiss={() => this.handleTokenDetailClick(null)} /> )} + this.setIsSettingOpen(false)} + > + + + {super.render()} ); @@ -382,6 +436,7 @@ const withStore = ( return function WalletMobileContainerWithStore() { const { walletAddress, assets, isMagicWallet } = Store.useState(getWeb3State); + const [isSettingOpen, setIsSettingOpen] = useState(false); const [isAlertOpen, setIsAlertOpen] = useState(false); const [isSwapModalOpen, setIsSwapModalOpen] = useState< SelectedTokenDetail | boolean | undefined @@ -396,6 +451,8 @@ const withStore = ( setIsAlertOpen={setIsAlertOpen} isSwapModalOpen={isSwapModalOpen} setIsSwapModalOpen={(value) => setIsSwapModalOpen(value)} + isSettingOpen={isSettingOpen} + setIsSettingOpen={setIsSettingOpen} modalOpts={{ initialBreakpoint: 1, breakpoints: [0, 1], From 345d53b395ae2e7d562ce6bca450aeff65a42ffb Mon Sep 17 00:00:00 2001 From: FazioNico Date: Sat, 16 Mar 2024 02:25:38 +0100 Subject: [PATCH 13/74] refactor: handle state and redirect --- src/components/Welcome.tsx | 4 ++-- src/containers/mobile/WelcomeMobileContainer.tsx | 8 ++++++++ 2 files changed, 10 insertions(+), 2 deletions(-) diff --git a/src/components/Welcome.tsx b/src/components/Welcome.tsx index 35047792..bfaf8513 100644 --- a/src/components/Welcome.tsx +++ b/src/components/Welcome.tsx @@ -60,7 +60,7 @@ export function Welcome({ color="gradient" style={{marginTop: '2rem'}} onClick={(e) => { - router.push("swap"); + router.push("wallet"); handleSegmentChange({ detail: { value: "wallet" } }); }} > @@ -671,7 +671,7 @@ export function Welcome({ size="large" color="gradient" onClick={(e) =>{ - router.push("swap"); + router.push("wallet"); handleSegmentChange({ detail: { value: "wallet" } }) }} > diff --git a/src/containers/mobile/WelcomeMobileContainer.tsx b/src/containers/mobile/WelcomeMobileContainer.tsx index 8f34b968..3079edf3 100644 --- a/src/containers/mobile/WelcomeMobileContainer.tsx +++ b/src/containers/mobile/WelcomeMobileContainer.tsx @@ -3,10 +3,18 @@ import { IonPage, } from '@ionic/react'; import ConnectButton from "../../components/ConnectButton"; import Store from "@/store"; import { getWeb3State } from "@/store/selectors"; +import { useEffect } from "react"; export default function WelcomeMobileContainer() { const { walletAddress } = Store.useState(getWeb3State); const router = useIonRouter(); + + useEffect(()=> { + if (walletAddress) { + router.push('wallet') + } + }, [walletAddress]); + return ( From bfcf55f8fcbd4582eac8cb1473319c6a540c1477 Mon Sep 17 00:00:00 2001 From: FazioNico Date: Sat, 16 Mar 2024 02:50:44 +0100 Subject: [PATCH 14/74] fix: rmv toSorted that thow error on old safari --- src/components/base/WalletBaseContainer.tsx | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/components/base/WalletBaseContainer.tsx b/src/components/base/WalletBaseContainer.tsx index e01f0c76..aa06658d 100644 --- a/src/components/base/WalletBaseContainer.tsx +++ b/src/components/base/WalletBaseContainer.tsx @@ -78,7 +78,7 @@ export default class WalletBaseComponent extends React.Component< groupAssets() { const assetGroup = this.props.assets - .toSorted((a, b) => b.balanceUsd - a.balanceUsd) + .sort((a, b) => b.balanceUsd - a.balanceUsd) .reduce((acc, asset) => { // check existing asset symbol const symbol = (asset.name.toLowerCase().includes('aave') && asset.name.toLowerCase() !== 'aave token') From 20407b7afa7540e57f5752c08f8f384c6b0c52ee Mon Sep 17 00:00:00 2001 From: FazioNico Date: Sat, 16 Mar 2024 03:13:00 +0100 Subject: [PATCH 15/74] fix: rmv haptic that thow errror on ios --- src/containers/mobile/WalletMobileContainer.tsx | 13 ------------- 1 file changed, 13 deletions(-) diff --git a/src/containers/mobile/WalletMobileContainer.tsx b/src/containers/mobile/WalletMobileContainer.tsx index 63d06fa8..8432241c 100644 --- a/src/containers/mobile/WalletMobileContainer.tsx +++ b/src/containers/mobile/WalletMobileContainer.tsx @@ -41,8 +41,6 @@ import { TokenDetailMobileContainer } from "@/containers/mobile/TokenDetailMobil import { EarnMobileContainer } from "@/containers/mobile/EarnMobileContainer"; import { MenuSettings } from "@/components/ui/MenuSetting"; import { currencyFormat } from "@/utils/currencyFormat"; -import { Haptics, ImpactStyle } from '@capacitor/haptics'; -import { TokenInfo } from "@/utils/getTokenInfo"; type SelectedTokenDetail = | { @@ -76,23 +74,14 @@ class WalletMobileContainer extends WalletBaseComponent< } async setIsSwapModalOpen(state?: SelectedTokenDetail | boolean | undefined) { - if (state !== false) { - await Haptics.impact({ style: ImpactStyle.Light }); - } this.props.setIsSwapModalOpen(state); } async setIsSettingOpen(state: boolean ) { - if (state !== false) { - await Haptics.impact({ style: ImpactStyle.Light }); - } this.props.setIsSettingOpen(state); } async handleDepositClick(state?: boolean | undefined) { - if (state !== false) { - await Haptics.impact({ style: ImpactStyle.Light }); - } await super.handleDepositClick(state); } @@ -101,12 +90,10 @@ class WalletMobileContainer extends WalletBaseComponent< } async handleEarnClick(): Promise { - await Haptics.impact({ style: ImpactStyle.Light }); super.handleEarnClick(); } async handleTransferClick(state: boolean): Promise { - await Haptics.impact({ style: ImpactStyle.Light }); await super.handleTransferClick(state); } From 8f7e66860a89c6f40060dee75f2dd0a9f9f65e73 Mon Sep 17 00:00:00 2001 From: FazioNico Date: Sat, 16 Mar 2024 10:25:57 +0100 Subject: [PATCH 16/74] fix: sorting imutable --- src/components/base/WalletBaseContainer.tsx | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/src/components/base/WalletBaseContainer.tsx b/src/components/base/WalletBaseContainer.tsx index aa06658d..9b0a9c92 100644 --- a/src/components/base/WalletBaseContainer.tsx +++ b/src/components/base/WalletBaseContainer.tsx @@ -77,9 +77,9 @@ export default class WalletBaseComponent extends React.Component< } groupAssets() { - const assetGroup = this.props.assets - .sort((a, b) => b.balanceUsd - a.balanceUsd) - .reduce((acc, asset) => { + const assetGroup = [...this.props.assets] + ?.sort((a, b) => b.balanceUsd - a.balanceUsd) + ?.reduce((acc, asset) => { // check existing asset symbol const symbol = (asset.name.toLowerCase().includes('aave') && asset.name.toLowerCase() !== 'aave token') ? asset.name.split(' ').pop()||asset.symbol From dbfda9397b28ea026688f92b675bd6ce9d3cdd73 Mon Sep 17 00:00:00 2001 From: FazioNico Date: Mon, 18 Mar 2024 11:46:30 +0100 Subject: [PATCH 17/74] refactor: hide scrollbar y --- src/styles/global.scss | 12 ++++++++++++ 1 file changed, 12 insertions(+) diff --git a/src/styles/global.scss b/src/styles/global.scss index c3b7d0b4..a9f67450 100755 --- a/src/styles/global.scss +++ b/src/styles/global.scss @@ -33,6 +33,18 @@ p { color-scheme: light dark; } +// Hide scrollbar for Chrome, Safari and Opera +ion-content::part(scroll)::-webkit-scrollbar { + display: none; +} + +// Hide scrollbar for IE, Edge and Firefox +ion-content::part(scroll) { + -ms-overflow-style: none; // IE and Edge + scrollbar-width: none; // Firefox +} + + .header-background { -webkit-backdrop-filter: blur(20px)!important; backdrop-filter: blur(20px)!important; From ee6620b3fb12cf653866f25d0e2b3bdd8c1cec82 Mon Sep 17 00:00:00 2001 From: FazioNico Date: Mon, 18 Mar 2024 11:46:48 +0100 Subject: [PATCH 18/74] refactor: fix sont size breaking rules --- src/containers/mobile/WalletMobileContainer.tsx | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/containers/mobile/WalletMobileContainer.tsx b/src/containers/mobile/WalletMobileContainer.tsx index 8432241c..33b38915 100644 --- a/src/containers/mobile/WalletMobileContainer.tsx +++ b/src/containers/mobile/WalletMobileContainer.tsx @@ -109,7 +109,7 @@ class WalletMobileContainer extends WalletBaseComponent< display: "flex", }} > - + Wallet Date: Mon, 18 Mar 2024 11:47:10 +0100 Subject: [PATCH 19/74] feat: add copy address and switch network features --- src/containers/DepositContainer.tsx | 88 ++++++++++++++++++++++++++--- 1 file changed, 79 insertions(+), 9 deletions(-) diff --git a/src/containers/DepositContainer.tsx b/src/containers/DepositContainer.tsx index 17dacfef..3de27ddd 100644 --- a/src/containers/DepositContainer.tsx +++ b/src/containers/DepositContainer.tsx @@ -1,4 +1,4 @@ -import { CHAIN_AVAILABLES } from "@/constants/chains"; +import { CHAIN_AVAILABLES, CHAIN_DEFAULT } from "@/constants/chains"; import { getQrcodeAsSVG } from "@/servcies/qrcode.service"; import Store from "@/store"; import { getWeb3State } from "@/store/selectors"; @@ -13,20 +13,82 @@ import { IonRow, IonText, IonToolbar, + useIonModal, } from "@ionic/react"; import { useEffect, useState } from "react"; -import { scan } from 'ionicons/icons'; +import { copyOutline, scan } from 'ionicons/icons'; +import { SuccessCopyAddress } from "@/components/SuccessCopyAddress"; +import { useLoader } from "@/context/LoaderContext"; +import { SelectNetwork } from "@/components/SelectNetwork"; export const DepositContainer = () => { const { - web3Provider, currentNetwork, walletAddress, - connectWallet, - disconnectWallet, switchNetwork, + isMagicWallet } = Store.useState(getWeb3State); const [qrCodeSVG, setQrCodeSVG] = useState(null); + const chain = + CHAIN_AVAILABLES.find((chain) => chain.id === currentNetwork) || + CHAIN_DEFAULT; + const [presentSuccessCopyAddress, dismissSuccessCopyAddress] = useIonModal( + () => ( + + ) + ); + const [presentSelectNetwork, dismissSelectNetwork] = useIonModal(() => ( + + )); + const { display: displayLoader, hide: hidLoader } = useLoader(); + + const handleActions = async (type: string, payload: string) => { + await displayLoader(); + switch (true) { + case type === "copy": { + navigator?.clipboard?.writeText(payload); + // display toast confirmation + presentSuccessCopyAddress({ + cssClass: "modalAlert", + onDidDismiss(event) { + console.log("onDidDismiss", event.detail.role); + if (!event.detail.role || event?.detail?.role === "cancel") return; + handleActions(event.detail.role, payload); + }, + }); + break; + } + case type === "selectNetwork": { + presentSelectNetwork({ + cssClass: "modalAlert", + onDidDismiss(event) { + if (!event.detail.role || event?.detail?.role === "cancel") return; + handleActions(event.detail.role, event.detail.data).then(() => + hidLoader() + ); + }, + }); + break; + } + case type === "getAddressFromNetwork": { + await switchNetwork(Number(payload)); + dismissSelectNetwork(null, "cancel"); + await handleActions("copy", `${walletAddress}`); + break; + } + default: + break; + } + await hidLoader(); + }; useEffect(() => { if (!walletAddress) { @@ -60,10 +122,18 @@ export const DepositContainer = () => { -

- - {walletAddress} - +

+ Wallet Address
+ + handleActions("copy", walletAddress || "")} style={{ cursor: "pointer" }}> + {walletAddress?.slice(0, 6)}...{walletAddress?.slice(walletAddress.length - 6, walletAddress.length)} + + + +

From 588607560eab630ecc6a7312f1f028ae2e031969 Mon Sep 17 00:00:00 2001 From: FazioNico Date: Mon, 18 Mar 2024 12:02:48 +0100 Subject: [PATCH 20/74] refactor: use thumb if exist --- src/containers/mobile/TokenDetailMobileContainer.tsx | 6 +++++- src/containers/mobile/WalletMobileContainer.tsx | 10 +++++++--- 2 files changed, 12 insertions(+), 4 deletions(-) diff --git a/src/containers/mobile/TokenDetailMobileContainer.tsx b/src/containers/mobile/TokenDetailMobileContainer.tsx index 533d9cf9..71d2e6ea 100644 --- a/src/containers/mobile/TokenDetailMobileContainer.tsx +++ b/src/containers/mobile/TokenDetailMobileContainer.tsx @@ -126,7 +126,11 @@ export const TokenDetailMobileContainer = (props: { }} > {data.symbol} {asset.symbol} { From a00b72b21ba79ce20c22720ae396357e882509e7 Mon Sep 17 00:00:00 2001 From: FazioNico Date: Mon, 18 Mar 2024 12:30:25 +0100 Subject: [PATCH 21/74] refactor: desktop ui image and headers --- src/components/ReserveDetail.tsx | 26 ++++++++++++++++--- src/components/ui/WalletAssetEntity.tsx | 4 ++- .../desktop/TokenDetailDesktopContainer.tsx | 8 +++--- 3 files changed, 31 insertions(+), 7 deletions(-) diff --git a/src/components/ReserveDetail.tsx b/src/components/ReserveDetail.tsx index ad31c732..66852971 100644 --- a/src/components/ReserveDetail.tsx +++ b/src/components/ReserveDetail.tsx @@ -504,9 +504,22 @@ export function ReserveDetail(props: IReserveDetailProps) { return ( <> - + -

Market details

+ Pool {pool?.symbol} + + { + CHAIN_AVAILABLES.find( + (c) => c.id === pool.chainId + )?.name + }{" "} Network +
- + + + +

Market Details

+
+
{data.symbol} { From 5b754b1640e32278bc9a49e251e00c227fa7d716 Mon Sep 17 00:00:00 2001 From: FazioNico Date: Mon, 18 Mar 2024 12:43:05 +0100 Subject: [PATCH 22/74] refactor: lock pwa ui --- src/components/AppShell.tsx | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/src/components/AppShell.tsx b/src/components/AppShell.tsx index c40e2319..6f6035f9 100755 --- a/src/components/AppShell.tsx +++ b/src/components/AppShell.tsx @@ -85,9 +85,9 @@ const DefaultLoadingPage = () => { } const isMobilePWADevice = - Boolean(isPlatform("pwa") && !isPlatform("desktop")) || - Boolean(isPlatform("mobileweb")) || - Boolean(isPlatform("mobile")); + localStorage.getItem('hexa-lite_is-pwa') || + Boolean(isPlatform("pwa")) && !Boolean(isPlatform("mobileweb")) || + Boolean(isPlatform("mobile")) && !Boolean(isPlatform("mobileweb")); const AppShell = () => { // get params from url `s=` From f76604af5f722c9fc6b92bc3270e22e236fd93eb Mon Sep 17 00:00:00 2001 From: FazioNico Date: Mon, 18 Mar 2024 12:48:17 +0100 Subject: [PATCH 23/74] refactor: handle filter empty result --- src/containers/desktop/WalletDesktopContainer.tsx | 10 ++++++++++ 1 file changed, 10 insertions(+) diff --git a/src/containers/desktop/WalletDesktopContainer.tsx b/src/containers/desktop/WalletDesktopContainer.tsx index 6499d2e7..a3715a4b 100644 --- a/src/containers/desktop/WalletDesktopContainer.tsx +++ b/src/containers/desktop/WalletDesktopContainer.tsx @@ -277,6 +277,16 @@ class WalletDesktopContainer extends WalletBaseComponent { /> ); })} + + {(this.state.assetGroup.filter((asset) => + this.state.filterBy + ? asset.symbol + .toLowerCase() + .includes(this.state.filterBy.toLowerCase()) + : true + ).length === 0) && ( +

Assets not found in your wallet

+ )}
From e2846d6b66e3c3a61762991bc005e3d66efaf908 Mon Sep 17 00:00:00 2001 From: FazioNico Date: Mon, 18 Mar 2024 12:54:45 +0100 Subject: [PATCH 24/74] refactor: disable action if balance <= 0 --- src/components/mobile/ActionNavButtons.tsx | 14 +++++++++----- 1 file changed, 9 insertions(+), 5 deletions(-) diff --git a/src/components/mobile/ActionNavButtons.tsx b/src/components/mobile/ActionNavButtons.tsx index bfc459e9..9a2c8570 100644 --- a/src/components/mobile/ActionNavButtons.tsx +++ b/src/components/mobile/ActionNavButtons.tsx @@ -1,3 +1,5 @@ +import Store from "@/store"; +import { getWeb3State } from "@/store/selectors"; import { IonCol, IonFab, @@ -31,11 +33,10 @@ export const MobileActionNavButtons = (props: { setIsSwapModalOpen, } = props; - const modalOpts: Omit & - HookOverlayOptions = { - initialBreakpoint: 0.98, - breakpoints: [0, 0.98], - }; + const {assets} = Store.useState(getWeb3State); + const balance = assets.reduce((prev, curr) => { + return prev + curr.balance + }, 0); return ( @@ -44,6 +45,7 @@ export const MobileActionNavButtons = (props: { setState({ isTransferModalOpen: true })} > @@ -66,6 +68,7 @@ export const MobileActionNavButtons = (props: { setIsSwapModalOpen()} > @@ -78,6 +81,7 @@ export const MobileActionNavButtons = (props: { { setState({ isEarnModalOpen: true }); }} From cfed24beaee4431edf53c0dbf59b8f517388eb38 Mon Sep 17 00:00:00 2001 From: FazioNico Date: Mon, 18 Mar 2024 13:42:06 +0100 Subject: [PATCH 25/74] refactor: disable btn on click --- src/components/ConnectButton.tsx | 11 ++++++++++- 1 file changed, 10 insertions(+), 1 deletion(-) diff --git a/src/components/ConnectButton.tsx b/src/components/ConnectButton.tsx index bce9a99a..49cc44a2 100644 --- a/src/components/ConnectButton.tsx +++ b/src/components/ConnectButton.tsx @@ -2,6 +2,7 @@ import Store from "@/store"; import { useLoader } from "../context/LoaderContext"; import { IonButton, IonSkeletonText, useIonToast } from "@ionic/react"; import { getWeb3State } from "@/store/selectors"; +import { MouseEvent } from "react"; const ConnectButton = (props: { style?: any; @@ -57,7 +58,15 @@ const ConnectButton = (props: { expand={props?.expand || undefined} disabled={web3Provider === null} color="gradient" - onClick={handleConnect} + onClick={async ($event)=> { + $event.currentTarget.disabled = true; + try { + await handleConnect(); + $event.currentTarget.disabled = false; + } catch (err: any) { + $event.currentTarget.disabled = false; + } + }} > {web3Provider === null ? ( From 30d2119901f41d122700debc37f8cb746bb6a21b Mon Sep 17 00:00:00 2001 From: FazioNico Date: Mon, 18 Mar 2024 14:22:04 +0100 Subject: [PATCH 26/74] refactor: add more item to setting page --- src/components/ui/MenuSetting.tsx | 120 +++++++++++++++++++++++++++--- 1 file changed, 111 insertions(+), 9 deletions(-) diff --git a/src/components/ui/MenuSetting.tsx b/src/components/ui/MenuSetting.tsx index 3b7987a3..39c789bd 100644 --- a/src/components/ui/MenuSetting.tsx +++ b/src/components/ui/MenuSetting.tsx @@ -13,8 +13,9 @@ import { IonButton, IonModal, IonFooter, + IonNote, } from "@ionic/react"; -import { radioButtonOn, ribbonOutline } from "ionicons/icons"; +import { open, openOutline, radioButtonOn, ribbonOutline } from "ionicons/icons"; import { getAddressPoints } from "@/servcies/datas.service"; import Store from "@/store"; import { getWeb3State } from "@/store/selectors"; @@ -54,15 +55,116 @@ export const MenuSettings: React.FC = ({}) => {

+ + Connected + + + + + +

Gouvernance

+
+ +

+ Snapshot +

+
+
+ { + window.open('https://snapshot.org/#/hexaonelabs.eth', '_blank') + }}> + + +
+ + + +

Source code

+
+ +

+ Github +

+
+
+ { + window.open('https://github.com/hexaonelabs', '_blank') + }}> + + +
+ + + +

Terms & Conditions

+
+ +

+ PDF +

+
+
+ { + window.open('https://hexa-lite.io/terms-conditions.pdf', '_blank') + }}> + + +
+ + + +

Wallet key export

+
+ +

+ Wallet Magik +

+
+
+ { + window.open('https://wallet.magic.link/', '_blank') + }}> + + +
+ + + +

Version

+
+ +

+ https://hexa-lite.io +

+
+
+ + {process.env.NEXT_PUBLIC_APP_VERSION}
+ + {process.env.NEXT_PUBLIC_APP_BUILD_DATE} + +
-
- - {`HexaLite v${process.env.NEXT_PUBLIC_APP_VERSION} - ${process.env.NEXT_PUBLIC_APP_BUILD_DATE}`} - -
From eefa40747888b7abee37046b330a71ddefca231d Mon Sep 17 00:00:00 2001 From: FazioNico Date: Mon, 18 Mar 2024 14:28:32 +0100 Subject: [PATCH 27/74] fix: bg color container --- src/containers/mobile/WalletMobileContainer.tsx | 4 +++- src/styles/global.scss | 2 ++ 2 files changed, 5 insertions(+), 1 deletion(-) diff --git a/src/containers/mobile/WalletMobileContainer.tsx b/src/containers/mobile/WalletMobileContainer.tsx index 3cff88b2..92cebeb4 100644 --- a/src/containers/mobile/WalletMobileContainer.tsx +++ b/src/containers/mobile/WalletMobileContainer.tsx @@ -109,7 +109,9 @@ class WalletMobileContainer extends WalletBaseComponent< display: "flex", }} > - + Wallet Date: Mon, 18 Mar 2024 14:33:22 +0100 Subject: [PATCH 28/74] fix: change conditions --- src/components/AppShell.tsx | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/components/AppShell.tsx b/src/components/AppShell.tsx index 6f6035f9..48f070c3 100755 --- a/src/components/AppShell.tsx +++ b/src/components/AppShell.tsx @@ -86,7 +86,7 @@ const DefaultLoadingPage = () => { const isMobilePWADevice = localStorage.getItem('hexa-lite_is-pwa') || - Boolean(isPlatform("pwa")) && !Boolean(isPlatform("mobileweb")) || + Boolean(isPlatform("pwa")) || Boolean(isPlatform("mobile")) && !Boolean(isPlatform("mobileweb")); const AppShell = () => { From daf4ff270f7eceab4caeb2ef166bda1b3ab58a0a Mon Sep 17 00:00:00 2001 From: FazioNico Date: Mon, 18 Mar 2024 14:48:11 +0100 Subject: [PATCH 29/74] fix: prevent viewport scale from mobile --- src/pages/_app.tsx | 8 +++----- 1 file changed, 3 insertions(+), 5 deletions(-) diff --git a/src/pages/_app.tsx b/src/pages/_app.tsx index b5fef242..0648c904 100755 --- a/src/pages/_app.tsx +++ b/src/pages/_app.tsx @@ -58,11 +58,9 @@ function MyApp({ Component, pageProps }: AppProps) { - - - + + {/* */} Date: Mon, 18 Mar 2024 16:21:08 +0100 Subject: [PATCH 30/74] feat: send token implementation --- public/assets/images/0xFazio.jpeg | Bin 0 -> 33337 bytes src/components/AppShell.tsx | 2 + src/containers/TransferContainer.tsx | 9 ++ src/containers/desktop/AboutContainer.tsx | 108 ++++++++++++++++++++++ src/network/Bitcoin.ts | 3 + src/network/Cosmos.ts | 4 + src/network/EVM.ts | 18 ++++ src/network/MagicWallet.ts | 1 + src/network/Solana.ts | 4 + 9 files changed, 149 insertions(+) create mode 100644 public/assets/images/0xFazio.jpeg create mode 100644 src/containers/desktop/AboutContainer.tsx diff --git a/public/assets/images/0xFazio.jpeg b/public/assets/images/0xFazio.jpeg new file mode 100644 index 0000000000000000000000000000000000000000..c348698de1ae62c49f77be6a00604700a1751934 GIT binary patch literal 33337 zcmbrl1#leAvNbr8EXlG(V=<$}j22tW%xp0;vt(J!%*@Qp3>LFSWHB@Ij=y{FyKn#4 zh>eZSj_E#=)p@46CcCOKtNVTF{SN?HLPT5y00992K!7*E`xa!jxS*h}oPw-~xRmfe z1(4B}238Iq7ytk(Ye#zpQ2|0Vbqzwm{}Md|2U~tQIjR4p`aj^^!e4d(V3zhT*Z)!Y z|MvB>p^<|DxPl+SCw?=qwRZ&L?_ezB;%NI9M}sk{fvKJ$80UjAjXk)6U_A9#um3N+ z^B0@^3qSnD_DTwZ001OB7!#WO3)B3?`v1azuZ7US)ZPkwjwKkAT3I@Q>+p~Ky%KmM zYh^|75%-^u13&>F3J?Gg0`vh+05gCkz!5+TK3ap@?El%0=^r~8fDPEj0KB&axB=|J z7A62wuq_Q(>jZEB7=e$*V7(D|vjm?3mjAZ>f7{f-nE5Xs_>$oz008Li_xEcm001@( z0C)|0e}B$>e}Byb0HBrtfbRJJ+S|l~oAV5;kN&TYGy?!Y@&^DKJO8WGF8~0Vz-^4V zZmVan_s{P@f%lNc#sI)o5deUo4gjEl+xnB{|KIX|wKtgiFFzn}5dcu~005-M0f3ZL z0Duhqdq`UED*!I5miJx&@FPStL^Kox zF#r+>0R@D3?*}^s1OO5W;_n^xAAyE}`Tz?F@ey2#4c7nP3jq+2P#>US-a!C(D6l0m z6f*d4tO>RC{c8m-E??FPlUZ)<3x)%;J>j>=Z}LG0OnrB>AT zXe%x>)&b5n5#PH1A;o>`YYSW^rAnHl*JbJ=`c~*5=#5XT7eQ0JVL?wvKtR_S%WxY)XQo8R0u`42Y| zZ>jiWbLoYX4)fut11Z*(oy_9s3EIk%Mdi+mVaGizWlZ%lMd4}#+hZ=Vt}c&UT#S9} zFLBc~iPBN+j)<$JF)uu8H=G}*>9aI#PXrb#U$8v?nC<_={b?XGM{}9OsBaQOx@Z9Z zceu8>j+tW$Jfntp+CY)9W`*EsI@#qOr*-8g-PkU#Jq>NPL3KeOWsI_*;Fpj zQ?B3qjV>@vjhtS28A@+vTVa+hb|FOfnx;D2SdL}N6rD9+>NjMw2#ih=0C2b znFhtS8;tkMIIh;cbgxnL&8!!?qbZ`bNrGMW=Uv=X^}2M{U`+OS*`^Mz|6v6H<|{Q7 zt*m0Hb(aUE`+PFkLT0aS?vGlT9A_0-q!$bjZ_$gGXUgI`!WNv_=ORjwrVW(Z+h4tV zBA2dIO5=2LCb-v6w%4k@GU<~|7PKvIec1aqF@Q>CX7x(aSdveKT}K8z)$+8*HF*(a zVed{LYscqYPfA%So9uMApE;Krypkj$KwzBu+j5axWsSH<`Y;0*C(nlEKTH6m_~Qhb z4j#O!u6++>Z!eJRy$F82%ggnhs3&N|-Dqv~*WT&;brPRR#u0t3J@s}+(Y|O_tw0Z2 z9AfdI*cfk6%;+ z3`!5w8+Ut#JVXhJ^WUU5mygKZ@ly|_RXMYYt{(?GUH^v+LApl1rCVt8=$2|eh@8O5 zxoRe<2!CKXc9(rQUR?CiW8JJRx=w9`(mhjk-fyM#)>c$g`lVXwe+U4mX9Z7ocC+w2!h@`BTcnV{|qkwvAr@I6gK+Z>D8gT ze+DX0XRj}?Fxe32sHYd4PA*%j*;>Tqp$}fIU0j&=_R!&Qbgy_g(u&o~((gz0K7u)K=s1g)6-lPYwE*y6uJz%$PKNf^#L`@(}EuK0#69_?)Zq za@2RU?*G^WV7TK$>V;Kj*6_cQxX^NvC#QJ2HlAX6Afb2KJKi+EJaO|(&8YL}@>Fsx zyEP^h4M_^!+lq;dy3KS5D26&&Rwn?H|3d~Dz#(j*Gt!mA^*ZT4zHOjkprT=4{T$fe zPR6;?B{*XBn3>L7k*AE^{`5F}KZNUG(-gKI=y?~o9t0XPR<=^VhWs}ba>#1l!K9+O z)}T7(ERX(cl`8$?TuG`1x(Er`ZS?f&ZyIa`AMuIt$JWE4<;CpWo0g`4d~<7eTrB37 z`9+>^Hm*tT**dkOl*Qe}q%oZith^4-e>XfP$KINE2L>J=M_p6;rTo=_-JP^ng?O#V zW`|=*6MRyt=n4&6pf*BVC%Iv9sbS;sJ_|htk7PfFQsqs#)%O9Tp9*X0Qwy3H-wR%a ze;Q=mNY}s(|5I(xXUJ5U`n3)GQKlj7WM%i)k4G9T;VEMiL8}%e+PqShBDkeE(8^DyXEj z#4J;2e`QA)B~w!?Q(OUZhdN`Q*Z=T8(5kJ`m@HXtW!cWMR)LZ@>}`z%8pr2ao9L>f zvbThlTS7-R4iwPh23NSfmI>RNHZbeusXjHjwbZQ4rgp+_ zH@+-+5j-)s8RARXOQXsd)}8VjZ1{<*@AOXB9?-AaesMRaJLR{M_twHXBYw zJ4?<-2VypRV?^>@QESfe!uePfoZDxZ)$C&M1PeT%(<6gNdjJH~2M8!A=zr!dU52HWDV=roRIR-&K7FlAC@5A(oZK|!trfirzsf9duzUr^Azn67)d%my#`a7X z4qmc9j2W@NVTh{a5W6|(SGKz*)$f|SO9^K?rn@|D8CM?ZnKdcbK7~+eM_AFkba0V= z-H?vDu;%O=+bShpmgBh|hc=yJO0Jj95fzA_9up71h-Sp-;^m1o-BcA;xLJDiyqnpr z&yo$TCiA~2j16^WwjcIjNFd=Uv%u`J}`{XIN_AY~!5WTpsmNTL;M!wVU zkh1E@=IrJ2<+1#%n%#}vdD@lrmrqpHXgtDo-E)4TVwzMS6u{8rh(4+=476al)@BZK zBU8mOrB=yXnBGdJfSC_2H#d%yp74{oXPd?7-Vwd|$q$@MS05euXt)qK@cNiTIh zOe<6gaO39O)6sp`b<;L05;y%nup^yn^!NAa_AgSpKi*R7LV*&k8SMvC-_qzN(n27~ zzER!l+AJr%C8m3v;6@XY@L>p$H5R`EY7?vcRTY>wuum*eB#j5N12isAO4Nn09}u&3 zE)x?dVqWN0*D;_V7z}&&h&-W|Y=Nn?-{+lg53g@olil5YC?t?(OYy3EgUb{`JMy-& z*0{uPc@sB(U}F<=FhhaXrNst`yrs!vuc|+}X-v&}KYa+k3+z{BPMh-op+P)7Q%I>? z)>C_GP1Dv@j+vywmfJ7^Vilb=OfHh7N6|?YO*kCeu>D09zy>qrI#S%sUBKZG@catv z9$=l7KWH*@#6L6Npg$k}3YcN!+GARi4bi+cdCKot6jCOU$pMBgRDb=fv*s&31R+hz zRO?$9m{A~SGU@k2pdZ5Qm8M$G^aBY}k#d9P%KiNwQqv5{x_f*kuIdci~~# z{)}@4RtJWrHsonpc5%3W%yU3#RelGUl-dvwshH|j%4<1A9?Mn-B&bvK$+3r5P{%9f z+=~5{*j-Ir6PBH=JvZ2A0dQ8o?mTiRAt+x6y?JI{AfSCTW*XJfvu{fQ0_&2vUoGgf zDvj)%6HT77)T~OwLC_w$up{2f z%Y6WSp4{mlwSV+izC))d@~BC<6wnXaT~GGj22Uz`#R)_`NTKa z;HNeh;Sj2w)jf+aN*$cMW=v}>GYJnzlKfUCr6<)jccgQsCb9C~j$wFlYGC&&JmGe$ z-APlaP%%HtZl=q2Z-SKzT{XI7kcyv2DwLMoF~vF3mR?NUvZ`EqoU_)*5qGDm0?qwK z8~^&l8N2Z;?dOMOx{TvW+b~_#9n$J;&~3{8^$u?9^zvE>j7TJHIY+Mh(DL$s#(ZpV|P z4jXYmZfzetD|_^zCJVO}3k0iIWR9M|hMNvbZ#e8P6Vwn?ztW=4q=W`>mpz1G%?JZ! z%#4(MA!%h~_hTdmDl=M?;m%5pQuJl0J}s2ci!+C13se%g8N}L5Ccfyl)|<{JR;R== z-fI;3JAHPcKg`j^FQNsSp3;8f%3Satrx2y_7`jvh+Oza2hZZ7&maaWy-AF<{-fgRX z6|+OUn+Wk$T&KKeJ4KZz3HOdj+pegbk}bq>5zU5XDf7vctru+?rBm<$I+LtIhkllz zlaQv<)EtvQ?3f;IGUfF8*4%ln;ByIE1M{bFfq=8dT`F=xtA>%G_;siMa%SOfH-fB_ z&1Rs8@48r+*qr(c%fJ#_)wyxVvpD+KBs2g)>k`%Iuv}<+8Af1BZA~(7pd5D9!2rCr zwx1MbvjtSqI`_VDY1ECA9I?aC1`()@+N7p>yeN+!d3x^v-)W_QPO>^k{ltpnS1)Oa zKDecf#wnK#y9E=P#{^Td!~J7wllqM>ztzp&0Z_@Gm_yl?N1EBXt=$?zB#<;L9B(W5 zKI?}03pw;E6cmPH$e0L?OSD+V{QMH1ad)ObgH4BYK_hGa$dWRe`zJpE|M%Xp*r+s6 z{^2f@<)}>dx9zIxu1dZkR0Q5GrA&C&6P**ilLPbI!`wRnI)|s&#GCmQ5s2%qb2P?Y z1eC@S(=9j49MJ2EdqUAAt1azOAKPsTA<1-N+DEjfhf4uh(L&gwqPD&=t-F-U3_21H zgu1TKM5INGN&jTvSd0nX>Of_fK@(6=nZ|m)JWpYlgrUC-qCPN&s5RxuO;8Wt%b&i# zb?lGAvrF8YW`x|s?)sV*;GCuBu9ry(LN0+*T^`r_1yvf}Um%tbau9{GlnvklR(u zPe{T;>g7VBUkDrz%lRmKR(`9PP4;((EFYQ=T0*TUj=h-6MdP8X5!tbu9HRA$I0gCd>_U zVv@TpYvs3#qJR5r!dI)q(}V903V+ zYfN9>duPcruaAEeZwQx^ZnKhdO3QCFZo(kFtv;t4T(6sUjKX$6TzS-E& z7xuWN;SaZn)1uMf+2pmFVUv_Aq?j%EfmHmGUncCYJ~WhUu~ElX7at2-n`|V0rDVNS zGM>-JxNX?$@gNr=(wy>2-0#MM`(56#{ha_WXJ)4>G+Q-er-DY{DYgMwC(GGZC?}EE z_Dn0vR`cK%k4rc{DK5Zt-Ep~$rCv^{p~Bkg6YY21>XfGQCRTBYnb~u4gdQ82l%)pi z=fwPdcG5(fZ7u0^XFT7jaR%(Mu_xq9Nz6|1KQ`O6)QOT##B+s%(0;-mhvQ*#h+cT+ z3(Lu^FaaH;1({ULYF`xwpinf@u-v1*X~#D{=8xN#&{hTOq{Ucfr$IzJ#nX;Y!`{1PsasU4`*g^wfi2~lCR;^?==scu(pDu z9wu-eVMns8J?|b=vA$xxL{_2CbCF%vogdEV!!vdu5)^aRDTov?DCr-?8=^ivT4TNP zPvH6E_%TBN{^qtDuIX^i6zkZ*LRCGl;1l@vrnuP7(O)9}1Z%x-v;8;_KN)B#7v0{~ zxA|qEpo00{Nr3lTB{BR?Su@pmR>c|BAT0fm18M{wep58@)mZ z@q#LAQhPu(FDp4GYZs6+3;sSvIj$N3mdgY<#kIGHypMLiJ); z8${wg2u0+lh*yb^WL<1`l@omPOCJZ}5ltQ@F(kYO0Ei@6icIo5GOS9%TI0(Qx4{zA&kA8^bZ%AZRyYPl9sllX&;DK4T1+#5e^1xWMr@2+>c|h%pQj5Qu8KD z6yE4@r)_D8z*ge8GhXgMTp2Rh91-&j_08>0=mCvTLI`15ULyQ{EQo;S)bQtVxMQ#y zm6KZD|Mh3TyZ~BDrk2zFhP*L^E&`XL5*dL1nwho=Pn)_ULV9CB8cVadH;zlL*gZzO znhyFiomN#Ke7CKEAzDx5bJTYdfwVT)g_fYPlJ9V>DD)MVQ$Dt-X_YW3o*RarnQau@ zAs|P61*o$bGSiHew`&8#jnkemG0N}>y$Q{eY)Ab=Y}2;u!qwAk3SP|jHny1NbdnbG zLiy;yj>!0rBSLYRB^AA-)sI+L9FPHXH6tTS(bn_S$s_XQ5#@Jot%MJlS}sRNE`j z@;CO246(JO0tq>WX{y4tkW2`DdqkFCe^ZydT}sZ}=Cx~0mtKE|DlwCtb4bD05}>vZxN^UMUwZ>ncRaVL@(_Cq@?mcdS`Hz9>2LHw({JfcnxIQFT5pAz&s zzc0VSW3F)-?gw)4#&TQ^Dqq+p6~2k@$bC&!VAMM&>SEGK;7(y>Qe91)Sk(VUy6e>` z+*|S(Z*$FLc;PH3)LcSQfrDjlQ78@)5%maFjbRh{Q>mN1o`;CN7BN$Y|7MdVqASVB z1N<6NnE{W>o-!)Ji+?zIqtzAsM z`qB7Fs6@2@KJo+8PFgN=RA?vcRHkr*wd_;Y>T87bn^1y-R`o)FR{pIty=-upLLLSZ zT?ZlwcHlu@e~Um{?8tMlrscPh&cF~)1lGx*g#Hm8sh&I%l9dJ!1ede7>ms^Nvy}~_dlV;RxmQ0 zn`TN=45l6FN6_mf5!i7W+K=E9zXMPuNegOlvGYs=DNEG3<$hDQ68X^^#GLRj9kDFx ziAQ)Q-xk#*u~dl%VSC#cC0Ht=%*cp4lO%mPp^5PtTRI;z2n%<)qx@oE)rL};>y>=T zLUAU5jZq^RziDvAGs1;h+}+Q5qDoij`Y04Q%fRUoY-+L4irT_LY(70}ARowf61q#4 zRJy}PE*7aoJ{tajvj+69MV_sh%GBdRsq9SuCGQbs$B8-#M4~z|ceY@X4mqKi{%RT} zD?TPO{M$k1CAKz|W?sn1FaybsPGK2y*E=!QBUR`iNr0=<;b$8zJFaCZ&`9lGh(vbA zCRXf-wq-Yg__#PD-ZCPrhBk-_rK0D}8?6h?k| zWMU>gJ7^LCznGkwX;kL#3OyHuf^z!yv748qEI)J67!)094dP~4fB5J3{yTXH!v{_t zp78NdjNgkCR_&aVGsqy3V|RXCCmPGHzWanS5c*T;tZB4sRKP2X(=@-En&A(k;CUGm zDdRifYGLFh{^%v_9Uy_MuOIiBZ#7!;PGrVq^cx~sT@QSu%-xaW)Sls87E$(#R-AW{gdzYTM>6^?3W@x{2MF=q~g(A{7SzQ|%)DWdY|_ zdjdK!N%nH5ipc#`@1qPyZj)Y$%+a-4@W`$Q!IBB|&bASOI;-@rSF_{6eb2DLI(9=x zRHH5z&L{X&H#sNFCyQ%5G7eNGwqMwB@TV@n4rI}|qBf7RS28?kM;jIBCiD(6dA5@e zJe9Cgu~-v<-LIQhWo+sOR{iqY>GoB*i_6t7>@FVEFKoPO&^J;Fw^lC#+ne7X1)=sP zkM-wGr9T@h-rZj5pgs;g4L+Ai!b|?(xgpgWzD%DUW-qBoFD1$FknFyXJd2?*AuTCQ zrP?N)J|wn(%b<+vD|A*`9`16pU~y?)FLEufY$EtHWtI01aD9ApnIeh6(l-v&p=tLN z#crhI&U-60&+KZuI4>)M!J8Y0ELC%wbJp$mW)1Iqq9n`8QeDYUxhL$94Np?fk5gRh zx-2-D$PmX+CUMOR7@(8-zBbA~=Gp4J1_=n-d0^8eANPMa=9VkmdW_R^Bu7BI0EDg z2Gvo1a3C=3dt^ndZ8Ui!nCxwQ5E}ahLCU_)5%~lX5{Ggn9xIB$W9wAK&Wkv5TTl-u ziYg;K-`|{Ro(A=$4?TDhojiPMK0Hc~BiA6`G5dPc#2zJBRL~(y(mf-wRx!S<&U@>H z_f`?H%^kJBv0XGnb~MDoHoneRotHrFgtJ5zk7>;rH8svsf_cuO3Kh_=AH}Lk-`Ki> z`zhufVE3k+hCMUesz+olMv$D04JI(p5FB5fZ80$w7TbFeK@G%tl2HfJ?E-o!q;9O#Y{% zFC~wNba*}OXs|sda6GGu`oSxlA8Ap>o_xzpFWi(p(>T+Z4PkF{))i;6`~{k4ptN5L z`-%Q2t(y06ce88BqZM!P;pvU7z}EU>Gxw9-gN?Wy*6C{B^NmTOP=s4egP}h!mCR@C z%e+viH|$>!T@_Z|CJEf%9yWk)lZTw; z{pzM$@TNT|u(~8254Jj4!{933ys$LrJ&U!bU+tKqNs+TgGq0|ZBGnnPIlLq8UqZMg zkJoa7RX{>?e5B8m$$dKFW~LxQ^)P>M%j8=-rLTTNFWWNEO8I$;eCU1Ix1niTpNL;w z5aYto!I{yoz#rZZ9ZRf8cV)FEc)%+?pzn5Q6L2tu6caiOeRBR_CW@N;Q8~B<1N|K^ z8i=i>_096R_JF5z(ln2Zoq&y~BMWB^62f#>MS$zn;~mhH3sa zHoK0Khi3`dt~C7&TLP+H?a*P<+ZPtCZw6%uO6>X!95e3#7dw+@zr)8 zp1CEPuR6F4Y;nl058hr0nEW@ZYCN`}H=hb^!rt5qNrDW~-H#&T#L;jHubJLuo}6Di zmU9vaUN<&!v0Mii?|~0DRx&$t56V5wtS}^gT;vyA9d`sr2eEu&>QR1ggJHYvVWlpq zT4YeihIr1;^`*iS*X!=~B0jzS3$h#52azwQ?RILD1+|D1RzA9zpT3VHN=c0u>0b2$OT`%Y_#qFW$_Hfa zIl&!^ro_58=g;_%1})B6pAv2I8%B+(xY&wqN6=?3!I28gd|eXD64^;6wIBxcen`D# zXOvg*c%xRfZr8Hhw%sTU?w*m#Dyom2CQIw4-4FsL9*m13F3V$Lr$k!IzNq~KpTH}}E2Q={4aZ0d zefWV^(0LVCl+oLVw>hDu6wuy&mBm7SQ`kaH)Sfw3ZkHd6DiT1B2NmZSd~-+huNTD} zxD~JoVX!>3csB}Wh*G=rjha%NY!v&r_(;{U?S9BoCTX%(FtkyB#{VLUQNJm6#s>QN+!LP4j{TX((a_$^uqT<$etMH~R2` zLWyxGe{i-PO1h0)>=Y$qRP$JOb=Hv)rK})SKk;g#UK;SLPbja#O({wSMvc=Ky54_M z?pX^v@3M;Wq3R^8XNdFkkMb>+Cyr2S(hSqg&@s`y#gS(~qe7^ErD1VX&dEGpujouO z&T*)5J}1xRBi|^?k6U_TpWQ#ox$kLuTHLF*YIf8Jhr5ld4)Jn~sod2>su^C7MebXf zZd4ijSo`4Ug@VX=n*wv8MUI=_5W85*hin2l{ER*estKM>OpZ;>hE)bK=2^J`bmi)7HB z#Y2>w@(8!p;-ImCj&M^$oKzV3Co{xEEFFp4`74oKn~MwqN*{8;SA1Nrx1+YB?NTo- z^Oq-P6%0f!2Fipkq*__bbwvr$R7YexB|PIZ9t@lb|G`W$r>My3$pS&>(5K%&AyxSZ`z>nbN)l@(cOl+(LDP`0x!z&ljsk8d)B+fR15=9O!Mpz3gltlb-DG- zu8PGl{lNt<@jN=-Z3J65pKryRW3wl>bU{ya8pL&Z-Km~lo?DS7ct#9i7vtAgYVmTz z3wj6ep!sA(ZRl=Z0wrH)eP&$qBk=$1jxl5jQ#8 zm1wcgzVUYYK@AL6;>e9-_PzpE^=8L-pp;5GTIZX^kE60bW&A*}S&Bv8LFCm$R$Wc(ZIs4PeEtDIDulVSbaeg(V=ECxgcag7Xo2ee80iG2-wt8{8q>KNMAN)YCyd6gk3A@Hz!RyxFNQzOtT_`Hjh zmj}*eTBPkhUPQ7x1}tVKotF>vT@kMTq#+flaHLcm;hrIGXp}C|xe(SP9`l@SM)bX! zNu*h>7z|f~Z^dC5Z=0WJeMr~ze_n>IlNgUj85^}xRmbxQbS@*K@^G-MdNs8|K_c9u zkuQe3h$GRRs*B2Mt*s=ZaI-qgY{R>m$?rqqa^7twe?km5@AS(b>sUk;!k44-cb-)| zFYi?9Y0-VEiHiCJ(koEMXbbw@r#G1yzoUyShGHLO1A0rqg%o@m?rF5X+>p1dX|u%X z6sXHKz_Hg;&l<7i(p3zMAGF#OfxXI#zd#(^*b>ouyq(h&>3ft#_}Z^-NNsRl(40vz z*I3|C(E)UiLJD%ErFz_pXd_9g{PoM{;|{e5;lizrvePzi>8a*mtr`Oh>8};K8v`fv z1Qb(Z)9aJZcc0RSbmhz50UY_yR zk5ix@22FVBO?(iVa-==d_s_hq>mV#+X;n6hi@aSp^kEn^h~0tC6*409+1w3=ZS#u(PEy=_kEP@q8RrdwdYAjgDzS9V&TNFhg)Ya`OV6^2mXxGf9 z(W_m}{4yh&ZE*i-#Z)CzQ8jLny@oNi1{BoHah)hE>g);wHj*P*T|+7r7+jy*~>Jt)mph_O!)k ztYLuy%!4TMLzNjY>?cizi}FF0ZQos0ET2BD=3i7!sy{2^N>~}uc=8d)Dh4alv{cl- zHR!{tvYi>ogi-BPl@W}qj5cjA6uAhD#DY{5tI|eNSFX<90mD&p&yI=^^Zg=n521J< z#|e6iL9D95#dpB=v_8F#)for&?^@XI#knP<^}GZY)ESONw?cF(V|?3{I)bsYyJ=-~ z$OXuXw5m+GzV0wjY1F8|r^bo(QV^=9Jxfiwv+;(ta(v`O63+3Lj{G`?{WSY5oK%Pi z5GboLKQneTz^jXT&bH=wY@hG~aHJLZE z&KM#OnA(aPw(ZjguU3)g0@==L*Z7bm zX!z)K(}eDaMEpkldUyMN&os0OoB8R(_9QvnO^O2)97e|i-MWE!ZMsn+Xt`27I2Ba^ z_9QM&!0J#tuRZWe$5d)$RCbHj-P~O7fFGj4eN5$-*Q}%@rt3Ja$TVzrfloa63%0unB%xvexd4ccAKK=M~odRNKC6nBm>E(5vQ~GCweBvU? z#zjRgm!44~V}141Jy2Wxq5ziZ_eEiyV2t6g#{Qx?f&r=jj5k4bUZhty>BO6LMp z?#Lk$P|yhe8sDxmbJm=LfkD94%A~7X4y12ux|;aK=dE=6Hw0H8n#DVy(&wp6&@3uc z&&wvL<{tlNBpvnP5>9%TI>EXI@R13x3}}D4tRe21!#gdvrv%x1;};RusC?P*4)}yG z*~^~kWoXk}AKgz=O2elowi-VN#Y~q@%@A(_xGf0Qm07( zQf07`mcaldcL+(exW%1U0wOHl4xBzHY;^k87x$@k&gbG$@!%>V4bWKg$EhN&`q*F3 z>!uf1kws>-4aJZ=ydRT=!AIeJ5)%C?FAI26Lqq)uyFE{F9yYiI(d+O zQMKBEx#Vty7tozLi0hl{?}4tMeGyiE15js6yQ#oCVAqh>DsqRGR?=y(yqc-`ZLVD>^d3@ z0g#GwbHvHR%c%()F`}-YT%TVWew&PpmK2;p=^nAX2IhJmJ%rHl{y7PqQwVLV*osp0 z31CXT5(uKEDy+?Xlf2BU{_V7$8@eIit|&~{%zA^XlJAUjUSX_QBvDDiV!o13QsS+; zDNA$3PrM?DY@=x@gT~C2^xc)73i7ikjkc-SA5(G5O3upm)VzKnfzhlp9m3ZxGUtTA zOU#Z^vu;Ah?dc-(7)7UB?&3boYm1I5%b}3sJ2%d!+*l<7Xo8S}0XU66PL|mgzgI+* zoXvFlW6j5CEU2B-%){ABvKeEVn~oKgZSa-Lr=P7Z%gPg|C5A_=_)8dP^b!OcHU-!b zz35q-mq$D7p8KL!t_By(aOk~SxkW|Ko|H!40V=OXP3uKZLS`k-O$em zScFe3)NIO0lGf7oyKS&oZJCk8k=c)lt@e0Qa|eH>+a4`wInB1|ZCF*g+f{&2$)4U| zN{if9jTrQBN(z3qL`EF@m3Zszcb22Wnv^}%ebhh$>ueFFds`SsXJK0q#-T`_D{{FZ zY#0f@&@x768bj-c=jZUaCR`hhBf)%7D>#(AtDaWBa+sFps5Pg!9H_ELxUgE%sP0d9 zt7mXG#_Ur4psMEhuwb;-uae;2q3seOEJ!iSC->$lY&??Ajx<@DXXRjo%Wkv1(ODp( zPnuNDR0W{DuE^adk~i?`#uIBPL8cJmFMVBu?!p#>m~A3_kmq*!baAkYc|RYZw}UZ% zg@56_V4%xGzovsv)>!qHfD^AAT($P#s2e0=IJI!hPSv1g&6?u2(Nm%=J$NZjh)(^8 z*1#D}(=ku3^w{UJ==~1JFp`64Qg2=vEa=Z#V9Ug%mKk1CDesKJt}f3uwifu+D^*Kx zA_=Nj*UI2u_`LjBGi zqdKrr*YvU|y{^g~^;~gA+Em3U(}+WDbr;`shXWpO!Cr+f4K$m|N-r&<>73qt^25gG zwm5f56^{m)j?Z?r{;FXQ-r^lkfN@)LQcZHpBN^6^p)+5$*;db88?6)jw2Q4%3z1qo ziCJ?~2Q+^N!2HfSGv=IT^v8)fR*A9Fa7s!#xJ76y77SN7yg$sHq)k?fuSjIHnQU3)|YDz}_SG3DCh4bx=*4!50iL)P6ZubkOu9v?`)@(j2VYrRd&u z;tjJSFf_|&69&h^AuzRguxq%`qT~g1`HmJv-(yyn&LH!KH7h*UD=9=HrvncucAVnz zmSqQ9lVGai*e@2|0rHi~g$<<|wHdNh?*KT|VDH;gl>rI$qztE|W$g+M6(t2|ggkWb z)4A!eCF>425)QF42^F@j3LTU3*OdS#IS;C5t;c3v;S!9g0nv1eL%N`~JK^5QelHW; zl>h*a7yP)#XO*XxY!<*w+WM>c@ezkSdV@xV`I^C)@?yoNj-Ata1!gFElF!)`sLgMq zsI}2fE$9kx&)bsNHVA==atzTG;=CuR1*_00>sKX7x631If4qaUxNpOsu+j)2%J7> z_lAvysy_gG6V;Na8iNMQDM9=u?&Q9f>v^&`D06F~%<8hATFRI;!e=GQFwe{S!+T$( zOTiCYUvd4~m`Nn@q-m$W&Su^xnb(e!qzR})gvzVWKv*WRpi$FAWzv}+sjH(d~T^#G|>h&QGB$k=X<(Op} zUFb|*5QXBSb5sY4`c_CE@I6T*ua&7il^Qo@_&vPgK|ZCDB^YWN%WZduMaKLbV4Zu_ z#K)Wag0f{{L~r4@FY^+h%b_EV2q=3eD{P(9f}{8fGZdB2 z^d06*aSPPM-)L?+9VojV?@uv=^JQA0HuXkZ$Mk;(PFZQ9z5`SP zbQZ8ZEl9KoM1IyenG(oXm`mrw$n^NS+1Sz6@zo!m6~>CtoLGx*^J6SZ zoIZ82^|h<0gs^!wFD^K7v*yB^LpLqdD~s3!I2Wr~j5ZdC2HYM{J^9jW0H6*1eb#fw zET~OYeJY#$HC3inUEE6AGiBx5Pk3Qn@4yr8zt4&wgWnr~f`a-0^`93AA%FlP@Dk$R zWqIVBnv3r}(}Z%Hmkj^&k^vtP*zc_f1r{?mK;ORf;C+#MEDH}-+cP8%9jX?%wecf0h$CfXc@O@M1bBDi~AH0dcpsc4q;hXy|DyRLkK&mNX-B4%UG(T`uv0Tsb zdNTJHE%st>yPe(TOwG%1xwR8z4^t<~S=xXuUf>_6pT}hNsf~o{)7YQaD0r>j1Rj!f zT`$UdiI>uJrHSxNAc)3<7iySN9#zbfu|3t5j~gQG8Xa2tB8UPFs^J`7kM&e$MTi6{0iIJBjH?A zuJU*sz1VL?{nuf7Xt8rPser~9H2`7U zYZ2{Q6KgAon^sNKA1Yhx)j|bTkrbBpr{IrEb*Z4`*(n?r+={@4Q05@V*}dhm6*EKC zLJG4lfbU92Qlfm0&p*z5i`?h;BxyhR`GV7jK@MUIvlre6K~N**4J1a?KovZ%uoSYL zT_Bl*)YwN+1cC83awbH6C{c0f&k4Rz*fASupWBw$Z|r0>_CNZP59RsR3?&w7?!>Zb zze>YuMYr^c7+!tLE<81wlspWyavIO zs@&4dwk>N)+$*DtYzp>olL8pu%E$t>vA-U7M%L#N^1irR#(>`+w!U?UXWPg&dyx8s z-rs|#5ns9$v!Ae!Mo=&*6uWJQx$gI42RD4o9zReKo;H?B?Q=`iK`8qd#T^9SYTRP6 z!4LwZba^)(LhkWw!^Zr?ALS4ZoY(}yEGrktHMDb??G%QwMW#esP&`>eg#mggH-V(W z^_E?AY@m?jFC@kllyh?CYo~}+A`$gstFV)yiTs8qX0tLkP*oo}jkW9SV&zyRr0`oKiV*k;Vs6J-6uMY@1^04}5q@fOgY@Lwl(brr!Fz5;ac81fwGOutm`S1Q@6Qr zIAT&0Wj`l7TRnA8vUp*p@RHz`v% zYvyRF=~iX4_n;Zy$%;LHec^EyvN0;AIsDi|VG&^_w1kKNe@5O}|4FDR$>uSLtR94b z(@wtA1#FPD_gp^9X4+X0!01veknrUCytd^F2_>OP#@dXjhHX9d&500t5yFxsKVPgY zgzByB=ANxGlGr|@?Bg&(tYUHBbc5)zxcx=ujR5pC;gu?&T)K>t-(R6Dsu(-RsySpv!uEE_&fCP89u($*Xu0eyldvJGm z2=0*l`@Qe|?)|H#wr0BKbkA({bf0tjd7j4b3cNu7Dsd%?F>{x6(GBbT`&aJUWaYF( z+!gQ6>YvT7o)3uSSf`fB0|6v%KI;2V>bi<@IKftpY^6~TN)t?-$V^LSi7Ss~cs;>a zLPF1Zt9c2i zPu~iEd?>yu)SAub7~y$wx7*TB&9-`cF4Jt~R3&BQQ23)YqGm@C;f^5>wpBz}!(0#x zMNAurf;uSF@kaYdW)mE417q*HHWOrBWU}I~6EGv@h-z4b`Q%Dxx&n38mE^P?8fkpr zoc}>yt!XYdJ{mSsR}-o8618kdhhhPeC*1@S)@C?L7A_8rg%Q>s#e~lHj4NTV^mMaZ zzc|zt7?M$MHOfx^D%MJPf1M7)H8-Q}P@czBr%FRqvOmHkGH2^Wvms*CK-|;|90ej3 z(}~IyR})e&*On5yolXiRX6}RiX-$xEGzZ)V_F62j>F_L2HFqvlvhoxsQVl&u8zG_^ z9GZ0c&HNl5CBqEn@(bSGX&HSS75z%nY2*Y1d+1ulOr2T3?KKu7VQ~D29hcr;ojO^| ze8scBl4#lz4FX zB!Mf3Vfd8gar=2rqu{E%M?dHyZ$K6zFZ+CuE!6vk{tDKX=d~eaJsNng7$w$q3ouRE z78BT&god7(kIBl8*XT~SU*QyRrrV!J=$!|V_0Zr5Srl#~^eDyvD@o-#NWDLlj9lMp zjQkOPQ^ zpUPWQ^*4)e)x;af_ez)m;o6u6U#X_H{z`rMn)6OOVbS*U4%IVeYeTp(kZt6KR-_(& zvj8K5FvI#ay2c+@{VY`Bd>+WqcU2;!eaeNo%ru^Eij#RGlZBPNsls5TO_8PNZ;0J$ zsP7u6*mixG!`A#%NcgPt{cut1utf3vqbczRn4@TrZ>-<&_4 z7%i#sQ6~&1svZ}1)#Ud7PKX$n=re~!C>v`&D1*+~#(Ie@aXy5==m#A!oK$kgn}d#% zHZe?5KBW`!NwHT53fcZvHq%#DRpmvKwN0+LL#4W@h%k$PXfp`3p$Njkw-VtiTOE;3 zuiLFM!{QK0i0*%`4AMY2`+$b%-i5qb1j#l8qupmuzRb7w{FXBD(VX6N8HMi$VJtLi zdh_L5due>6`}rf?bu_K$R=2P{DE1J^CT6Jt@%B}tPybsq9bKKlemPC=>Sg|@@|gau zWWM(-cp>&ZCeZ|o%Vcr#sZeieo^7f*@9^z{2J=j58A)AeOFMvVPbc7e!aC8F>;^O`HOwb=s?efL*!FP8*UQ6ORz4H6r7-U|U6To{zdqyC zpKx-O|AG-ocH7A*v7hdbuhYvmi%Kcm(+AaS`DaO&$848&b}2VU#mz8eXr4o>`E4Oc z;a4O4Db1H3?I{d)7$)l0oi&k1#3EUH?`0@KHUnT9CSr#}PB-^bjM=-8uZyQ)LE|66 zCQF%s5CO$z4{sjB@Ngh-gXdGq2RZYabqCP2r8VK%H5|G$j)2{d&)L~IGsWdJRC(!F zOacv58jhf+{8b-~K(+@5Xr2aA9OLxZlV@&7WpYSb$C#s=wnb z2!EL$e|ai9XdNdGk7tV}{M@v9)E8C}Up8$C`-dd{Gl<&G3AG6g;VxH_>e9`^k8v}a zZg;eTC=v}zATd{`4CQTFF|2pi^Yt%)K^N+SQL9ncu--fH8in_5FhCK`t+o!%ognZH zppp`isB98)fcFLc>;$wk3;wG3&7E3ucV#m?DfS08+b_`aF{7E7 zT-&`%B7Xq|omN`ketlL#ROfK6T8to=OFoSuGCqX3=b5StQg4O31#CN_i>(X2g7f`l zk?~R?ZCYmX1r`&{DB`?W2Up`n*J|rr3D<2)?$20KePygDXg9Zi;>!AiQ^}Y=>|W9~ zs+ykYoLF;Rd4F+dIOIl#G+7Zx3gR~YLd_E*L8@qUkg`GNUlz}+Tk@rO9SPA7PiOH& zY(5`s!>&HbVa&EzcUYO7@-2I+b#G?lb&|z+a31Y=Q9Sa6pIhvz0QiEgtGKF#{+z+0 zdWQdQqK*SRX=nC`nfeO=j8|l(^eoO#4Q}Y00TpRu@k|~vKORB_Me)b7&3!3kKxIkc zq?1_ETTs1IT2;y@V@zVv!jDNToVC+bB~U48!M%S62hNxbje#`v&nzUkYd-NzuW;0s zEwi@EW%b64qWeCSTjEik!kjrQ*yss??Fm_8H^$@JXRpyu%D*s9%cuzm2H1fd`Y5un z>io3JFa#oLa8Hyk1QfUj>PsHWN@6I`uvLlpiWyXUW|f;~Q{8`?o&VNT`-Qfy_5u}6 z7qhrwr_)HB=1cTgqRT2FjEl#5jIWjqYBQT5Elm=Jwi!ngZMWBt^=eh8^B;DLYG8Tz zGrXxfVp7Mwc?xH2k)mdxXGgT?6s}i*chI;QF0(C(D#Y_iS(urY%CfIT?IkXE$|pgt zB_kiEj2i&68y4LudR2#kwI{_(dnB`n z{<|yKqbwp>`o{_C+U48h-fhVBh(0s)4ssxTC&1$8t3~#mW2=U0x{So{GD37Mw~VjE zUZG0jjWY$_B_jzH#T@*35lh#<9 zjaYVbc*0w~a5F-QI2MV9gX7e)Tp4LB)VEu0`nAQjEdn-zvKWF2l9=Q zGk<}=ZGcsQX_@d(Ow~lXEn2x}ZzlMHEaNo23+9=PS_@)OqT2 zHQw}UBIl#yprucP_%!7@{1Zg{Y9AaWDkhm5LQ!L-w+ zJi*|BOVy@pJw8vZx@INQP*f z=$vVR;=p9U^{ygg^hj!2T4O+WQ_VA-hx|jKaX(?2(&wm?GqmJWb=Lv3$vk?DVA5Xz zSz;b8yzP1Sv%yBb`(vgQFd`N`v~vSdQ%za`0A#5U-wuSO=`ckXnLw zSaTQ@vCB1^0MDc;4GdSo~VX%gpLD z;JrL1;aAgD17{U3Lehp=f$5dlHctm5C($+xvZ)u8YJCaG~dC}B73Q4DaGkeOxMS=Fp zoDorF>OPPm=ZJkbdu+#|h8C__i~$9Q+o`p+02ksqebP12cZF+&}8e-X&T>Y{` zMK+#CYM14V8uJ!;RZ`6DOli2+mt&m{W+3b%6L z5!yQorfWpfwtq=t2)^dQU4!q^;6hXj7HI&En zV?>Y(M!7pxKf7Yoxl7oGTxnoaT`n(4&d>yrMh_!L4lp@H0dHM%Om04JcS@P##ZpyX1NE&Qnah(#s)*xx_bcuC2 za%H^A@b82#&m?5KUPZxuc)ss^cd!^+&08_>pmaF2R1tDkE-$-yIee$H&Nt@=6hKk` zwdT#|r&LmoO842)PH(Hgl&^vX*2aM8B5UTU!WAi=<@5qGT4P5|o)Uuh!4FCp(NzRLusQ7%6%KwLsjb}2U}tZJskf-bI()F&Mv={p??4dlS$7MKc^&7ZzY>zLri z>Lrw!;!&BGPoXi-pl+Y_s@g8HS4~=N7e*}H#~Q~40JhcZHkiDZ0LpU$5AhFGN2&%c5%@pJWd82xLPd-yx zDk2@#tNDj%o$08;$W*zQq|!!=*FVrfKcE!nS>Q-WZ#Cu{nskZ}PS6f4U~0s`h#Cm% zY4-JPuBaGwsh!4fHC3g&fha6wfLy9|7)JOZw zAl8Mv}Y0Xzn72`-N21I{OL=x|J?uYA@vt<{TF~d6UY^c z!nONv8S1yU=I6i|Y1(au`;32XL={`~MapR12ozJ=PXYXEI^a*Eu-{6%_ZP5p6BGK6 z0Cy-^W0uz>1r+ z;&l1G{NEB3j>Y$$QryKwcZ&acRERlZU~H$K-OBX;m7sExRJ{Qr^P&Hz^8c6*;4Exu zVp{%xCH;oT8oEms|Jxi2M;}eL-F_>>;{R3N7bnFSa2E0J3;$y~{R`Kxr0u4l=l_~> zEcu*jjCzQ^#_~VU*%vT@GW?Oi6qlabBJ|%D4XU#UWBvWTcPnAb{w-0}6l{Zpo{5A2 z7&7I53{kBbne<-9fHD%kVvAJ&)Xzmm;TSTFrX)5OQRu1wF+_(fjxl0Fq%)xbFbELk z&42l;PykFyP7Vmcj^aP-WBGNUo!*(N>;I)uV{Ah=NdFc?@ljV&8}MrgVi4wE^TYXc zrI_FKn$3~zs;tI_*o1B80eeWu@lM^XEhVvtWD$0cV>Dj^im_qJls1YrJ za4LJJ*%v7uCClWadj#k079q-L_4M^=>;wtguh*!VN}Nac+&6t*Ay+yCys*}Xq>(03 zdXf()9^o84Wj&sOSP7|n>FZuhS)odl7YHlR$Lr8J`6UE)&lw6Q>11I5txYdcE6t* zfP$Ulgs<-dm_tk3;0-*d`$<95yLY8? z*P$%ROsjPvf{hXzRoc^lgJp0>?IM_0H;e}B+{ zsRy^r+g|{;S<#X{@RF5mrgiQfk}QR{MA$CG%!pWcP2m?=<<9+|zp`oCGaQ`b7`%j0K;LtEnbPdk0>%GDN&FoP8 z+oAtM#Kzb@7e4U5fOY6R%o9%5Mn5$n^OoBk8an(7@TW9WG@jl{PM%-Oww<=+-#*zy zC{kg&y0d#o3o2=d`wI|PB3QtsZNK{q*pdazQ;O~-zgaNTQL6=j-(MB?yWSTOaHRq- zAFO|hirLs{4cFpMgW;twW(^SY$!yt5)$A%p<&ntUkSc@s(bcZg_)Jy1mkErqFN@k( zu}K5>Otpb9s&7dnJm85C8c5PL)YF_ecCUz9vipqg973U;)L|68c=oiIOA z@CbaXp%24a7Q~G1$gA*`Bol~P-8!E4Gn=&$1-vT@?m z$ddO<5lb_t^nF6mWT41E_}0tYZ_ET-v@Rl#fHAVH^p>rcNikWD;4H%$<4FCgfJ5C^ z@*D8eP|`@9p{$KMEm`zXiJ~o&(bFy3bqO9jR4>{pQUs&{TR6<5%?tcFz>2vMm61VR zRmAXB%8Oa1Pl*!e1cMAS2IWH#ZwAFa1o1@}W&%_KEdW0J1(^Pe+W61R1Puj*{znuV zg5mftY6Al@ErB2(vig6%S44h=LYa#QF!xxMyjj7q zY0wX{0(nMD;5Agpy)ht{>B6%d2qQvO_ky6}&BJy@K+L83GqAku(vM&{?plga^(xPy zXwyQ~t2=Zmv(UxPO?E}RL~_YkSm=lhBm{ZB0i>B_htzQAuOO1=MP|YeqvB z`*L&&k3rP?x%YnoEr)-kp`qU*vl2D#h2P=~i(Ih3#M-Obp|wj)Qth?DP`5FR?F1)j zezTJ&y^$bdEv#5`<0Z7oVzs=vzRVQsB5AoDa_<%o32O%cRvs(?!03?8h}|&aT;Zqm zE*+F%Bf1vFx&lBqV7JxV6XJ1e*9<<$;0rJuzX9joq&CYWmvW@%+f_r>Il3@4IcsGjMeL`L;O00`^p`52^Fr#)wzp_V!^wvs1;{={`5b#i?o%@5z1;yB`^QNLBM-t?8nJf(nrk%DlFn6Y_mr-gkBJP1dkd4f)Fy z$REW>qx@z1h4bndh8ay!(hsjj#+6_=?k#FC2){Cu1S5#YHO3MUj{d%`$5S5?oX4VG z5NdSzLc)<~?o(S42dcqW7FHrymqA^p={WUJ4>0Ri=^%&-k96FEw~uUSkXnVtqYFdo z@mSrDo{G1|-y(pQXMhKg5Vk;XtG)>G_b#plBj}*0np!WBe|4fgxsnQgS} z37v-jo^YRyjUpYO`3J#;pbPIZ3T69vThhz>vm$)qBts0k#4Pn_m>~4WqOOWgXpK9G z@w^|ZEZd+?HW$U6Wi3;>m!r^=p8)s%7+Btrc)!bQf86L3_6>L6~3!<0w7kiNjyNHe}GBjPzNKm~OF$HT2&7 z@R$++utRY?l>{7^eEqRmBqqX&`D%bI0t^?sZ9X^{46oS{U&-40*>^g{gVt{=5(rD_ z+yY&32S;QYnV6(7g(Otf8w$Yj>O%(4R?yVrL9^+KNf2!#G~T7)KZ1~Wj0a9n z>0yva)E*>a|Mi_sB*+7U&(fwloPGN=9_r^cjD&DcrP1wzAenso$H#nB6pR!WSm{}} z{0P_umxy&f=nHC2T~uwu#9KD|AetZ*v~cb`v|)I*4Uag-QrsVUPTvkHvVdeGs5g@P z@5RLuk~L7Zc|*k(J?KnOR*Ym|Zb@A!RE7dYAelQrk(MNOA_DPA{jy-umoForWGh!( zPOKDex=o+Psqi}{rsB2-m76V!Ar_}!{tns3Hs+T4STiadWq(Fz;y~Gtp#jUJ7YYp{ zjnOt05}jcnzVx{5`xlXJIoa#g1rjr@q%?H;T9-18X$&9oJ;2*C96X{6tWb(Co^4sGfxh^XW8#3O*U`$D3GZw;c@?e_Yj2s}Qq zig43XtCxCa)_y4CF!;^PJJ58DG(d5LxgM#=)J?^dq2sH#*?o(w+MgYK$4G^`%^?6K z17_1i=M=Vl)UKSu?BTrXDXmr83%zQkNSOxG=-0V|`hNN2e$HbDI=MFMyJrc^&2>^s z?@N32sgGg=_9NZrli68X!#((Ol?4MN_1UHijUtexRPol|v)Rj8i-bmFa_O5+-@NX!mU_hl4B_SGAOa-xB1ujCsq!jFSe+cD1Y8&-lsEf7;T&S$c%3d?w@&gLWelTwL5faKqM<$8#5_?R) zX9o>2$m)muEVM%=&@y-aNQ)|EhZ`(8$0OteM%_2uj0r+n9FCQAziAOV`i|V1hf3)E zd!saupgey3LmCR`MP7gm)}FyTF)W+_mbJ=-b!~=s65yc^v8AH^>BQNy_xsyms?o2V z8TEW9m}XH#96w7btRGG^NYn9MrpTm#p1NQ{+tOfU}<*>H&DE!f)EGTev?Gg=QJN*`K>NaAgMago5bL3(ZSVBTE9 zCeA?Ar&Xb1*oSsAQ{HWuW@gD_?t#sZJMnF!LI*{b-=Up?`uED(g|iCWy|BeUI8wfd zN8q|@F`&U4?ayOLQ_YJR#=&HuPbU?dtpHC#btP#HgMUrR>)1g=Rf`+M*fX_ovJ>5) z!jpQxYsU~riul*tk-~vQ^0ep@3-lEe?q6U!Xhf_wWiox1y=N`;-2sSs)I~u}V%~NH z(^Tb)Yd%TeYVk@he7bUoBh2i}sz zsX!SidRgQmCwsf(+C>q<2S$-M(uRJ=B@e=f=gL-UFwL;p9?k_|CD%!`|R5b9npu;Yo&7Fr^kLwz>%*dGZTG! zw-HQ=BsA6JUw@Gf@$>diPzn<8PIYriFeTi=^}p-#Jnq3A;AGb=SvOU~ za596ZnxNc|=EH*urXp=EertCzVg^VBIF@2JOI%6~sJy&dcefVs?t_A0?4ewO)S-T? zPQjN}RNsiaWQU~PUss8Od18ZOc0WhewD7C5%q03F?mR$SY$7pR!D^TdJa80I=>K%$ zgF)FbM#>~L z|0lnPvZPp~hI!4jka%mC{Wdm8g-o#q{Ar6o2=~{pg}r&TYFNaXJv;kg3Wb!gX96)nnyO+Fpjp)ri26G42)MdHtTTTjGw%{ z2f|$nFX7+!;Oh16$+rCb4n6ga z-_%X4Blv7tR2S&b1vPNW52%C-0ZcL^f@?8&V9u3iPc}hN0ceAffn%s|q)@$U@}BXB z>|}|lh+mux6oN(>5RGAB6%5sPMNK6U7`Mb8%)DlN%*a!XDVe9(xlyurBJ{0HBc&5NT$pbe*wB}tv! z*1nd%CO0ms5)Y zU#R%Wx~Fy!ccVamR34+Si&!{2_zJSlHLHb0M|GZL&GCS}hJ@<-JfOdTmav`y2r1Ra zmRKGRIdt{*IzzK5zP>5^-pztF-yP0^Khg_3@&$>ta)-!mLgRz&vby>ZgI0_;2e36e zj%FSty)UQqHXJP_oQG;>ITGe$>_%hoJ#in}k{-e*4vOp5m|k1eZ%jswrexdpT#hz3 zfU7-*cykz6p|W;Skpke`2I@sj8hIh8>mhrkr%#uHGpDYipa-a(YwqM{SceXv)Ald5=pZA^+ef)N0B0JUiD1R5ByE**xUN$V-x6K@maWX}BRt>CfXu>s_{? zBXkicIGA#=UW8?cZV7{B_P!agfN0E1OmP6bQc}UjuBD)2R)r@Mw;ec|SX)C>a6MA` zHTToy9)aEa&e3)+&|?gFtkoX}-Fe(JG&2-q2_#FnyG$d=CPA>)I;V*K(%`aIIBoYRk~W?x718!+g-%O5&AF z7$g>gs@19Yv0!`c&Y9DV}?Im4&>Z1DgjYRSXX#Q{ao@aEuQthwTVA z9T&^101wNbYm~o`NU>BlP`SV}qs6#>e|sZ5SWP_|PrGJ*44A74fbbNl=t=doct>PR zpP+E<% znb5tysXY~_!7w(6)$nYlSIo#+*}oc<`RUdn)D(b|$L{xZH|8H>&_fj%R1TC|xWhc! z+>sI!LSk>S`%9*ge-k?R7m#Nnyi3GBnQxpU}4}D$Y@TCyy~^ zEUP-tY@tDwE=+i$u=^O2T;D(WDK>a02-dp`jg3qJG+1wCi^gBjL6k!NS#D!UqNuc- zm7ZitXb;)B0!ejc7WXoekT+^5`a5q8r&K*Vp{s}26%+g$IYQqvF))bf`(j|APTD;i zIhB)t;*j3{JidK{li(evza?~{bctu%nd}#~FeJ)4VqJ^bX@VvROwvgd&qV`JQqiTN zMi?&P*KXTy2$&yXI<--M{|SxTN0#RH*})R9s4%PAvezk*;jb*=(HB-_QGKjEiQ1o*7z%BW!?m$?jK`m?Tb6e0Upuw>z7hCvZNLjq+*HmNeb5?p!6U zo_oz4ONJo-3x)<-4f&Z-duj6+eVm1tX$$L%`+(`uNH#aL)^2>N&$-Kl=&Rz|s_}Nx zC#4i;n(oT<*J8!95A4!&-duq$ixV9&7%Q-?m@kr;B~b@x!hZ(&x|ITP_ID--XLAvS zrV}=4Q?KMFnkbpjgzJYIPH6_ws%HTvMUoo zaW)FP7s6pl!cukaXm@Lp%E=>{f9L1QZm_mAKRq?By+)X2~hRQCHc2R^w88TK&FD=-nhW)_T+)LNQ`27VKX@)Ka`I*lci^0kMIQGI_x~HL+@E*E5RudzqBLzxJ)esHB4IXsR ze@a(X#fGLz?Kzi*Y(x-*9yT2Y0sT69T82$GdBu2l)O=K9XxuyE|0%x(Cf|Duwixxl z4Wo`43x(>OxDwNyd_04bnQ~c;UPf`=cVu1nHWM}m7MZ=z=unO^@^B+r3 zs8Eoty+Xgi*$tiT;3)OWnOE~HQxwHw3kEBsKDa z`(?)^4)u0$hEcChG-){gZZ5_9JHd356DMJboWLpqu&gdlPjCYfhzb9QR`4C7W?4ld zgXO&LFe7;7FG1hPNpS)?iV3*Emi|heqkSiSNfjxc++B#td=e1Ydb6k4HxCXvwN%!` ziMw=nfz|8XA~3w=ardCerB5&qn3cXqAT7hKfgS2&3&w@yo7wyb7*3Z>kgLh0Pq3{t zFd1i|XExl=!OQ;6>G5iL?^}Z8y8)~4*LS&*dH|&;m{ASt`XA3kjE&e)Wv|Gu;@?Uk z`?^SMiQd-;z1bb871oO?mr(RK*x9{BeD1xSa%)lam&UYNRTv6C_3#D^kj<!CL68T;dzEfwXRNNerf00Z(a#VpksO$5F@YSB!^k`fx;vYUNw z(17Sn{MM_0*c0rivu_{DrKb;sVu}I)arg-4chmP?jIc<*MXMLYi;CC^aS#T3DQ-r! z(ftL)w=h6amo{#=Ik20@ZgI#GTVbm3Y)hXCVP?b0z@lo7W*L|`qG0)pKn#?3uAMzu- zpN*uHejX>o)P5=oW;+~MZDD|e&k7i2;`BUM(?S)1myi)@Pb+%tW)ZTbX82Hj zGBUC6boi-voK{g^{`)#8wBI$i(1fcVB9G=wP_@eK3Svr$#Gc80!1 z%l~E#2l#0p4;!Ehp3PcjB7vd2!q&s(m#|K=C zwP~_d0wIg-u6HHV@j0JMV_b)sXTqT4N6rJp2~LWql~R($c5VW{(!80y6Jl=ra$o@E zqf3dMowMMlB7{L9>hlYJWzB}X6LO+0UQDjl0xpj|`3z*4jy-C06uU_pU>VQ-+nUw{ z=-8$7$6%llf3^+G)qAzm22lU5%g`|YbT6$;O?!9?pXM>+m2bn*l)DfiCy2%8@y{Eh z@577{wBM#$`*mvty_&7nUB`fLynpmC`GBxJdvA}oF4SrS9%PYU;-j4-tybs^H7)3< z&Ik+Zi7uIkrQ^nGmQ41DfDJ}g2R%}2=w;yNoz0y*nLg2CW1@&H?E{er#oP_`l%P^| zp80l)-=k1HexrNyx&_UldSuGwB^_2L!3}!!Br5ViyoL+xqzhg+M{(9TTD9U{#f@P2 z=*3ME;DUT8oS|GgnCtQb2)*VIcI6y1^Sk!GS{3 zBQnoXH)bX!1oHP+BP4fF(hI4_VK6)Z#8%=0YR50dEUn@I9WTlFXA9y5FUPn31t@{( z)F4Us1B#M5}JNGk!&=*@9Np>2-JHoc@DzdAY6Za2_9jTJa8O;rg@E*SEl%>=bSG*G*Cr9{OZ(y|NpqW(bKf zjlm}Uy8!>wD0-o?y(t3fbBDvbhmju-3l6dnM;QT%SeRivW zNN(;Ajyy1n-h((AS6a*#Z`?b{=RUIY@7K+)NKyFvJm0&+(!pNsTt0BaNalIr_4?)q zyalpRnFcj${UN5Sw0ne1Uet<`5deINq&{joLa%K8-B*1boBaAf)N0))~D@(lBsK4<%}mrL}RsAzvKaaXg4Y_i&9 zjV3SD$+Jh_nCHIsE7p_nv>DgkP(?H3!h_5v29l`=C)$MDn}E7`&q4alOx~j^{B-oi z&*CH6glgxGY^Y{#LZA)wEEJi-FRs!Y6ZFtZ-E@}=*t?|%4u|0`rm0Bhi@0R}QEbzV zTnLUr5?$J4HMyNV-=cmc`yN6-QXDo1JWyWEC64gPF&^=C3W)*_j64XOlr{34OYU^r zoP`IaB*G{T;B8IRR-L46(M^Avr<8Q5!EUW&hbCUSVw)bZ$u$BLrhSLmjVih&B1+20 zovcDQ8b5V6PycS)4vT(r3Er8|+rhq!il*qh25z=bE)V#WYoLBN|KQ%d8Tgd@+Jgnh z=2V{#Z)oX~+Xp-hnK*cbd6={fp{s*EO}yuwnqEtkhHNVl8a#Y46vc#e{Cs$cimA?O z8CYv!wPz;x>%PlWKc<;bn`#piy$Kd$7fsZ+Urqr>PB;4XgKHQ?s^%R|3e>$aO~g(; zg=RyFW=S|KHKCl5xxFo7-E@%vW)7BX2bVJ`I?ik3cK-`36+N0A;>J&bz-#o9x?kl1 z%6dX$@o}xc4vGb{E}6!@N?hy#s6JU9{ROz_cZdJEIx`6_+iiv_iv19kd zox|b5z?R%>E6fy~sHe5xGt@v7tSu+m?$eX-1D#MU91^0nDgTDm;SCHK>-juFo)~?kZ>o>239LJ-TNe`ENhvALc!q$gCvF|ulcc8O_fwWi8S!Z2r(Afv`-}f zg|JxiuuUMRg%DKbIS`n;sg*-0ZC?g$4J`y#%m8zaH7JIDA}GdD2HGD0jh8>*RGX04 z{L<~Kz*+e6NLCPqsPDK9NxoedtcK0y33c4ieKavjG|I^L8(?pZ#W#xz=>Nkx;gtMV zv8UL(kMTw{f)fi}?J^qi099B%^-LI`A#q@bP!h69==w=va+-eC!cI{K<30HaO<#<` zU{MNBhKd5cmVWICxQwd{b;Or3%_k&waB)VIq{D>7c#jmE$SiKyb5lqOi_2o@fHZ z5%+mawpIohFBA+j+U9<@pUti za#^#)ekVj`DGA)r@tx$)r0~0i0apsgGvg&*s#^l5f{RJZXK%~v+wb-b2$s9k^IZT> zpCM@bvZg|?Q1c>|R$P;{i^0=6|Fzdp{h%43ueTwG{P1;eaNo5lUMJjOheTz5!6&Wp lj1t5{`iJvI2Iv;R6QH$;w2QApC_;k+k5mJZ9sIlU{{SdcDJB2_ literal 0 HcmV?d00001 diff --git a/src/components/AppShell.tsx b/src/components/AppShell.tsx index 48f070c3..0e97b4b7 100755 --- a/src/components/AppShell.tsx +++ b/src/components/AppShell.tsx @@ -40,6 +40,7 @@ import Store from "@/store"; import { getWeb3State } from "@/store/selectors"; import { IonRoute } from "@ionic/react"; import { isPlatform } from "@ionic/core"; +import { AboutContainer } from "@/containers/desktop/AboutContainer"; setupIonicReact({ mode: "ios" }); @@ -169,6 +170,7 @@ const AppShell = () => { )} /> } /> + } /> ( diff --git a/src/containers/TransferContainer.tsx b/src/containers/TransferContainer.tsx index 43beff85..4ca67892 100644 --- a/src/containers/TransferContainer.tsx +++ b/src/containers/TransferContainer.tsx @@ -334,6 +334,9 @@ export const TransferContainer = () => { const isValid = inputFromAmount > 0 && inputToAddress && inputToAddress.length > 0; + const handleSend = async () => { + console.log(inputFromAmount, inputToAddress) + } return ( <> @@ -357,6 +360,7 @@ export const TransferContainer = () => { assets={assets} inputFromAmount={inputFromAmount} setInputFromAmount={setInputFromAmount} + />
@@ -408,6 +412,11 @@ export const TransferContainer = () => { { + $event.currentTarget.disabled = true; + await handleSend().catch((err: any) => err); + $event.currentTarget.disabled = false; + }} >Send
diff --git a/src/containers/desktop/AboutContainer.tsx b/src/containers/desktop/AboutContainer.tsx new file mode 100644 index 00000000..368419f7 --- /dev/null +++ b/src/containers/desktop/AboutContainer.tsx @@ -0,0 +1,108 @@ +import { IonAvatar, IonButton, IonCol, IonContent, IonGrid, IonIcon, IonPage, IonRow, IonText } from "@ionic/react"; +import { logoTwitter } from "ionicons/icons"; + +export function AboutContainer() { + + const teams = [ + { + avatar: '', + name: 'Fazio Nicolas', + sumbStatus: 'Founder', + post: 'Chief Executive Officer', + links: [ + { + icon: logoTwitter, + url: './assets/images/0xFazio.jpeg' + } + ] + } + ] + return ( + + + + + + + +

+ Built by the community, for the community +

+
+ +

+ Our mission is developing products and services that reduce friction and growth web3 adoption. +

+
+
+ + image + +
+ + + + +

+ Meet the team +

+
+
+ {teams.map(t => ( + + + {t.name} + + +

+ {t.name}
+ {t.sumbStatus} +

+
+ +

+ {t.post} +

+
+ {t.links.map(l => ( + window.open(l.url, '_blank')}> + + + ))} +
+ ))} +
+
+
+
+ ); +} \ No newline at end of file diff --git a/src/network/Bitcoin.ts b/src/network/Bitcoin.ts index a0ed82c3..376ad220 100644 --- a/src/network/Bitcoin.ts +++ b/src/network/Bitcoin.ts @@ -34,4 +34,7 @@ export class BitcoinWalletUtils extends MagicWalletUtils { throw new Error("loadBalances() - Method not implemented."); } + async sendToken(destination: string, decimalAmount: number, contactAddress: string) { + throw new Error("sendToken() - Method not implemented."); + } } \ No newline at end of file diff --git a/src/network/Cosmos.ts b/src/network/Cosmos.ts index 6f43031a..ada8de3e 100644 --- a/src/network/Cosmos.ts +++ b/src/network/Cosmos.ts @@ -131,4 +131,8 @@ export class CosmosWalletUtils extends MagicWalletUtils { async loadBalances() { throw new Error("loadBalances() - Method not implemented."); } + + async sendToken(destination: string, decimalAmount: number, contactAddress: string) { + throw new Error("sendToken() - Method not implemented."); + } } \ No newline at end of file diff --git a/src/network/EVM.ts b/src/network/EVM.ts index 363aa58d..1a200591 100644 --- a/src/network/EVM.ts +++ b/src/network/EVM.ts @@ -55,6 +55,24 @@ export class EVMWalletUtils extends MagicWalletUtils { this.assets = assets; } + async sendToken(destination: string, decimalAmount: number, contactAddress: string) { + if(!this.web3Provider) { + throw new Error("Web3Provider is not initialized"); + } + try { + const signer = this.web3Provider.getSigner(); + const amount = ethers.utils.parseEther(decimalAmount.toString()); // Convert 1 ether to wei + const contract = new ethers.Contract(contactAddress, ["function transfer(address, uint256)"], signer); + const tx = await contract.transfer(destination, amount); + // Wait for transaction to be mined + const receipt = await tx.wait(); + return receipt; + } catch (err: any) { + console.error(err); + throw new Error("Error during sending token"); + } + } + private async _setMetamaskNetwork() { if (!this.web3Provider) { throw new Error("Web3Provider is not initialized"); diff --git a/src/network/MagicWallet.ts b/src/network/MagicWallet.ts index db6b1bed..d56e3148 100644 --- a/src/network/MagicWallet.ts +++ b/src/network/MagicWallet.ts @@ -32,6 +32,7 @@ export abstract class MagicWalletUtils { public abstract web3Provider: Web3ProviderType | null; public abstract isMagicWallet: boolean; public abstract loadBalances(): Promise; + public abstract sendToken(destination: string, decimalAmount: number, contactAddress: string): Promise; protected abstract _initializeWeb3(): Promise; /** diff --git a/src/network/Solana.ts b/src/network/Solana.ts index ff0628a2..300f9f54 100644 --- a/src/network/Solana.ts +++ b/src/network/Solana.ts @@ -42,4 +42,8 @@ export class SolanaWalletUtils extends MagicWalletUtils { async loadBalances() { throw new Error("loadBalances() - Method not implemented."); } + + async sendToken(destination: string, decimalAmount: number, contactAddress: string) { + throw new Error("sendToken() - Method not implemented."); + } } \ No newline at end of file From 2003c430ea25c6e65831c9d9fd9fb21ebb5f5200 Mon Sep 17 00:00:00 2001 From: FazioNico Date: Tue, 19 Mar 2024 15:00:15 +0100 Subject: [PATCH 31/74] refactor: add force loadAssets --- src/components/base/WalletBaseContainer.tsx | 12 +- src/components/mobile/WalletAssetsList.tsx | 158 ++++++++++++++++++ src/components/ui/MenuSetting.tsx | 24 ++- src/containers/DepositContainer.tsx | 30 ++-- src/containers/TransferContainer.tsx | 38 +++-- .../desktop/WalletDesktopContainer.tsx | 8 +- src/containers/mobile/EarnMobileContainer.tsx | 18 +- src/containers/mobile/SwapMobileContainer.tsx | 45 +++-- .../mobile/TokenDetailMobileContainer.tsx | 13 +- .../mobile/WalletMobileContainer.tsx | 43 +++-- src/network/EVM.ts | 8 +- src/network/MagicWallet.ts | 2 +- src/servcies/ankr.service.ts | 17 +- src/store/effects/web3.effects.ts | 4 +- src/store/index.ts | 2 +- 15 files changed, 343 insertions(+), 79 deletions(-) create mode 100644 src/components/mobile/WalletAssetsList.tsx diff --git a/src/components/base/WalletBaseContainer.tsx b/src/components/base/WalletBaseContainer.tsx index 9b0a9c92..a90d9397 100644 --- a/src/components/base/WalletBaseContainer.tsx +++ b/src/components/base/WalletBaseContainer.tsx @@ -20,11 +20,12 @@ export interface WalletComponentProps { HookOverlayOptions; walletAddress?: string; assets: IAsset[]; + loadAssets: (force?: boolean) => Promise; } export interface WalletComponentState { filterBy: string | null; - assetGroup: any[]; + assetGroup: SelectedTokenDetail[]; totalBalance: number; selectedTokenDetail: SelectedTokenDetail | null; isEarnModalOpen: boolean; @@ -141,6 +142,10 @@ export default class WalletBaseComponent extends React.Component< }); } + async handleRefresh(){ + this.props.loadAssets(true); + } + render(): React.ReactNode { return ( <> @@ -150,7 +155,7 @@ export default class WalletBaseComponent extends React.Component< initialBreakpoint={this.props.modalOpts.initialBreakpoint} onDidDismiss={() => this.handleTransferClick(false)} > - + this.handleTransferClick(false)} /> extends React.Component< initialBreakpoint={this.props.modalOpts.initialBreakpoint} onDidDismiss={() => this.handleDepositClick(false)} > - + this.handleDepositClick(false)} + /> diff --git a/src/components/mobile/WalletAssetsList.tsx b/src/components/mobile/WalletAssetsList.tsx new file mode 100644 index 00000000..bf933ff4 --- /dev/null +++ b/src/components/mobile/WalletAssetsList.tsx @@ -0,0 +1,158 @@ +import Store from "@/store"; +import { getWeb3State } from "@/store/selectors"; +import { + IonAvatar, + IonCol, + IonIcon, + IonItem, + IonItemOption, + IonItemOptions, + IonItemSliding, + IonLabel, + IonList, + IonRow, + IonText, +} from "@ionic/react"; +import { SelectedTokenDetail } from "../base/WalletBaseContainer"; +import { getAssetIconUrl } from "@/utils/getAssetIconUrl"; +import { currencyFormat } from "@/utils/currencyFormat"; +import { paperPlane, repeat } from "ionicons/icons"; + +export const WalletAssetsList = (props: { + totalBalance: number; + assetGroup: SelectedTokenDetail[]; + filterBy: string; + handleTokenDetailClick: (asset: SelectedTokenDetail) => Promise; + handleTransferClick: (asset: SelectedTokenDetail) => Promise; + setIsSwapModalOpen: (asset: SelectedTokenDetail) => Promise; +}) => { + const { + totalBalance, assetGroup, filterBy, + handleTokenDetailClick, handleTransferClick, setIsSwapModalOpen + } = props; + const { walletAddress, assets, isMagicWallet, loadAssets } = + Store.useState(getWeb3State); + + return ( + <> + {totalBalance > 0 && ( + + + + {assetGroup + .filter((asset) => + filterBy + ? asset.symbol + .toLowerCase() + .includes(filterBy.toLowerCase()) + : true + ) + .sort((a, b) => (a.balanceUsd > b.balanceUsd ? -1 : 1)) + .map((asset, index) => ( + + { + console.log("handleTokenDetailClick: ", asset); + handleTokenDetailClick(asset); + }} + > + + {asset.symbol} { + ( + event.target as any + ).src = `https://images.placeholders.dev/?width=42&height=42&text=${asset.symbol}&bgColor=%23000000&textColor=%23182449`; + }} + /> + + + +

{asset.symbol}

+
+ +

+ {asset.name} +

+
+
+ +

+ {currencyFormat.format(asset.balanceUsd)} +
+ + {asset.balance.toFixed(6)} + +

+
+
+ { + // close the sliding item after clicking the option + (event.target as HTMLElement) + .closest("ion-item-sliding") + ?.close(); + }} + > + { + handleTransferClick(asset); + }} + > + + + { + setIsSwapModalOpen(asset); + }} + > + + + +
+ ))} +
+
+
+ )} + + ); +}; diff --git a/src/components/ui/MenuSetting.tsx b/src/components/ui/MenuSetting.tsx index 39c789bd..5a521790 100644 --- a/src/components/ui/MenuSetting.tsx +++ b/src/components/ui/MenuSetting.tsx @@ -14,18 +14,20 @@ import { IonModal, IonFooter, IonNote, + IonButtons, } from "@ionic/react"; -import { open, openOutline, radioButtonOn, ribbonOutline } from "ionicons/icons"; +import { close, open, openOutline, radioButtonOn, ribbonOutline } from "ionicons/icons"; import { getAddressPoints } from "@/servcies/datas.service"; import Store from "@/store"; import { getWeb3State } from "@/store/selectors"; import ConnectButton from "../ConnectButton"; import DisconnectButton from "../DisconnectButton"; -interface MenuSettingsProps {} +interface MenuSettingsProps { + dismiss: ()=> void +} -export const MenuSettings: React.FC = ({}) => { - const menuRef = useRef(null); +export const MenuSettings: React.FC = ({dismiss}) => { const { walletAddress } = Store.useState(getWeb3State); const [points, setPoints] = useState(null); @@ -34,15 +36,25 @@ export const MenuSettings: React.FC = ({}) => { Settings + + { + dismiss(); + }}> + + + - + { - menuRef.current?.close(); + dismiss(); }} > diff --git a/src/containers/DepositContainer.tsx b/src/containers/DepositContainer.tsx index 3de27ddd..5c64b96a 100644 --- a/src/containers/DepositContainer.tsx +++ b/src/containers/DepositContainer.tsx @@ -4,6 +4,7 @@ import Store from "@/store"; import { getWeb3State } from "@/store/selectors"; import { IonButton, + IonButtons, IonCol, IonContent, IonFooter, @@ -12,16 +13,19 @@ import { IonIcon, IonRow, IonText, + IonTitle, IonToolbar, useIonModal, } from "@ionic/react"; import { useEffect, useState } from "react"; -import { copyOutline, scan } from 'ionicons/icons'; +import { close, copyOutline, scan } from 'ionicons/icons'; import { SuccessCopyAddress } from "@/components/SuccessCopyAddress"; import { useLoader } from "@/context/LoaderContext"; import { SelectNetwork } from "@/components/SelectNetwork"; -export const DepositContainer = () => { +export const DepositContainer = (props: { + dismiss: ()=> Promise; +}) => { const { currentNetwork, walletAddress, @@ -109,15 +113,19 @@ export const DepositContainer = () => { <> - - - - -

Deposit

-
-
-
-
+ +

Deposit

+
+ + { + props.dismiss(); + }}> + + +
diff --git a/src/containers/TransferContainer.tsx b/src/containers/TransferContainer.tsx index 4ca67892..48b92de7 100644 --- a/src/containers/TransferContainer.tsx +++ b/src/containers/TransferContainer.tsx @@ -3,6 +3,7 @@ import Store from "@/store"; import { getWeb3State } from "@/store/selectors"; import { IonButton, + IonButtons, IonCol, IonContent, IonFab, @@ -19,6 +20,7 @@ import { IonPopover, IonRow, IonText, + IonTitle, IonToolbar, } from "@ionic/react"; import { chevronDown, close, scan } from "ionicons/icons"; @@ -326,8 +328,9 @@ const InputAssetWithDropDown = (props: { ); }; -export const TransferContainer = () => { - const { walletAddress, isMagicWallet, assets } = Store.useState(getWeb3State); +export const TransferContainer = (props: {dismiss: () => Promise;}) => { + + const { walletAddress, isMagicWallet, assets, loadAssets } = Store.useState(getWeb3State); const [inputFromAmount, setInputFromAmount] = useState(0); const [inputToAddress, setInputToAddress] = useState(undefined); const [isScanModalOpen, setIsScanModalOpen] = useState(false); @@ -335,32 +338,39 @@ export const TransferContainer = () => { const isValid = inputFromAmount > 0 && inputToAddress && inputToAddress.length > 0; const handleSend = async () => { - console.log(inputFromAmount, inputToAddress) + console.log(inputFromAmount, inputToAddress); + // Todo... + // finalize with reload asset list + await loadAssets(true); } return ( <> - - - - -

Send token

-
-
-
-
+ +

Send token

+
+ + { + props.dismiss(); + }}> + + +
- + diff --git a/src/containers/desktop/WalletDesktopContainer.tsx b/src/containers/desktop/WalletDesktopContainer.tsx index a3715a4b..a3fe6a62 100644 --- a/src/containers/desktop/WalletDesktopContainer.tsx +++ b/src/containers/desktop/WalletDesktopContainer.tsx @@ -316,10 +316,14 @@ class WalletDesktopContainer extends WalletBaseComponent { const withStore = (Component: React.ComponentClass) => { // use named function to prevent re-rendering failure return function WalletDesktopContainerWithStore() { - const { walletAddress, assets } = Store.useState(getWeb3State); + const { walletAddress, assets, loadAssets } = Store.useState(getWeb3State); return ( - + loadAssets(force)} /> ); }; }; diff --git a/src/containers/mobile/EarnMobileContainer.tsx b/src/containers/mobile/EarnMobileContainer.tsx index 1aadf67b..fc882be0 100644 --- a/src/containers/mobile/EarnMobileContainer.tsx +++ b/src/containers/mobile/EarnMobileContainer.tsx @@ -1,9 +1,12 @@ import { IonAvatar, + IonButton, + IonButtons, IonCol, IonContent, IonGrid, IonHeader, + IonIcon, IonItem, IonLabel, IonList, @@ -31,8 +34,11 @@ import { CHAIN_AVAILABLES } from "@/constants/chains"; import { getReadableValue } from "@/utils/getReadableValue"; import { ETHLiquidStakingstrategyCard } from "../../components/ETHLiquidStakingstrategy"; import { MATICLiquidStakingstrategyCard } from "../../components/MATICLiquidStakingstrategy"; +import { close } from "ionicons/icons"; -export const EarnMobileContainer = () => { +export const EarnMobileContainer = (props: { + dismiss: ()=> Promise; +}) => { const [segment, setSegment] = useState("loan"); const { walletAddress } = Store.useState(getWeb3State); const userSummaryAndIncentivesGroup = Store.useState( @@ -87,6 +93,16 @@ export const EarnMobileContainer = () => { Earn + + { + props.dismiss(); + }}> + + + diff --git a/src/containers/mobile/SwapMobileContainer.tsx b/src/containers/mobile/SwapMobileContainer.tsx index 97d7fa26..a542dffe 100644 --- a/src/containers/mobile/SwapMobileContainer.tsx +++ b/src/containers/mobile/SwapMobileContainer.tsx @@ -1,9 +1,14 @@ import { + IonButton, + IonButtons, IonCol, IonContent, IonGrid, + IonHeader, + IonIcon, IonRow, IonText, + IonToolbar, useIonToast, } from "@ionic/react"; import { @@ -24,6 +29,7 @@ import { LiFiWidgetDynamic } from "../../components/LiFiWidgetDynamic"; import { useLoader } from "@/context/LoaderContext"; import { LIFI_CONFIG } from "../../servcies/lifi.service"; import { IAsset } from "@/interfaces/asset.interface"; +import { close } from "ionicons/icons"; export const SwapMobileContainer = (props: { token?: { @@ -34,7 +40,8 @@ export const SwapMobileContainer = (props: { balanceUsd: number; thumbnail: string; assets: IAsset[]; - } + }, + dismiss: ()=> void; }) => { const { web3Provider, @@ -43,6 +50,7 @@ export const SwapMobileContainer = (props: { connectWallet, disconnectWallet, switchNetwork, + loadAssets, } = Store.useState(getWeb3State); const widgetEvents = useWidgetEvents(); const { display: displayLoader, hide: hideLoader } = useLoader(); @@ -64,6 +72,7 @@ export const SwapMobileContainer = (props: { return; } await addAddressPoints(walletAddress, data); + await loadAssets(true); }; const onRouteExecutionFailed = (update: RouteExecutionUpdate) => { console.log("[INFO] onRouteExecutionFailed fired.", update); @@ -175,14 +184,30 @@ export const SwapMobileContainer = (props: { }; return ( - - - - - - - - - + <> + + + + { + props.dismiss(); + }}> + + + + + + + + + + + + + + + ); }; diff --git a/src/containers/mobile/TokenDetailMobileContainer.tsx b/src/containers/mobile/TokenDetailMobileContainer.tsx index 71d2e6ea..ed050722 100644 --- a/src/containers/mobile/TokenDetailMobileContainer.tsx +++ b/src/containers/mobile/TokenDetailMobileContainer.tsx @@ -6,6 +6,7 @@ import { IonAvatar, IonBadge, IonButton, + IonButtons, IonChip, IonCol, IonContent, @@ -31,7 +32,7 @@ import { ethers } from "ethers"; import Store from "@/store"; import { getWeb3State } from "@/store/selectors"; import { CHAIN_AVAILABLES } from "@/constants/chains"; -import { airplane, chevronDown, download, paperPlane } from "ionicons/icons"; +import { airplane, chevronDown, close, download, paperPlane } from "ionicons/icons"; import { DataItem } from "@/components/ui/LightChart"; import { getTokenHistoryPrice } from "@/utils/getTokenHistoryPrice"; import { TokenInfo, getTokenInfo } from "@/utils/getTokenInfo"; @@ -105,6 +106,16 @@ export const TokenDetailMobileContainer = (props: { $ {data.balanceUsd.toFixed(2)}
+ + { + props.dismiss(); + }}> + + + @@ -139,7 +131,20 @@ class WalletMobileContainer extends WalletBaseComponent< fullscreen={true} className="ion-no-padding" style={{ "--padding-top": "0px" }} - > + > + )=> { + await super.handleRefresh(); + setTimeout(() => { + // Any calls to load data go here + $event.detail.complete(); + }, 2000); + }}> + + + @@ -186,6 +191,7 @@ class WalletMobileContainer extends WalletBaseComponent< +
)} + @@ -371,7 +378,7 @@ class WalletMobileContainer extends WalletBaseComponent< initialBreakpoint={this.props.modalOpts.initialBreakpoint} onDidDismiss={() => this.setState({ isEarnModalOpen: false })} > - + this.setState({ isEarnModalOpen: false })} /> this.props.setIsSwapModalOpen(false)} token={ typeof this.props.isSwapModalOpen !== "boolean" ? this.props.isSwapModalOpen @@ -413,7 +421,7 @@ class WalletMobileContainer extends WalletBaseComponent< initialBreakpoint={this.props.modalOpts.initialBreakpoint} onDidDismiss={() => this.setIsSettingOpen(false)} > - + this.setIsSettingOpen(false)} /> {super.render()} @@ -427,7 +435,7 @@ const withStore = ( ) => { // use named function to prevent re-rendering failure return function WalletMobileContainerWithStore() { - const { walletAddress, assets, isMagicWallet } = + const { walletAddress, assets, isMagicWallet, loadAssets } = Store.useState(getWeb3State); const [isSettingOpen, setIsSettingOpen] = useState(false); const [isAlertOpen, setIsAlertOpen] = useState(false); @@ -450,6 +458,7 @@ const withStore = ( initialBreakpoint: 1, breakpoints: [0, 1], }} + loadAssets={(force?: boolean)=> loadAssets(force)} /> ); }; diff --git a/src/network/EVM.ts b/src/network/EVM.ts index 1a200591..9d27bbfd 100644 --- a/src/network/EVM.ts +++ b/src/network/EVM.ts @@ -4,10 +4,10 @@ import { getTokensBalances } from "../servcies/ankr.service"; import { MagicWalletUtils } from "./MagicWallet"; import { getMagic } from "@/servcies/magic"; -const fetchUserAssets = async (walletAddress: string) => { +const fetchUserAssets = async (walletAddress: string, force?: boolean) => { console.log(`[INFO] fetchUserAssets()`, walletAddress); if (!walletAddress) return null; - const assets = await getTokensBalances([], walletAddress); + const assets = await getTokensBalances([], walletAddress, force); return assets; }; @@ -48,9 +48,9 @@ export class EVMWalletUtils extends MagicWalletUtils { } } - async loadBalances() { + async loadBalances(force?: boolean) { if (!this.walletAddress) return; - const assets = await fetchUserAssets(this.walletAddress); + const assets = await fetchUserAssets(this.walletAddress, force); if (!assets) return; this.assets = assets; } diff --git a/src/network/MagicWallet.ts b/src/network/MagicWallet.ts index d56e3148..c8384dd1 100644 --- a/src/network/MagicWallet.ts +++ b/src/network/MagicWallet.ts @@ -31,7 +31,7 @@ export abstract class MagicWalletUtils { public abstract web3Provider: Web3ProviderType | null; public abstract isMagicWallet: boolean; - public abstract loadBalances(): Promise; + public abstract loadBalances(force?: boolean): Promise; public abstract sendToken(destination: string, decimalAmount: number, contactAddress: string): Promise; protected abstract _initializeWeb3(): Promise; diff --git a/src/servcies/ankr.service.ts b/src/servcies/ankr.service.ts index c976d636..34494111 100644 --- a/src/servcies/ankr.service.ts +++ b/src/servcies/ankr.service.ts @@ -37,14 +37,17 @@ const formatingTokensBalances = (assets: IAnkrTokenReponse[], address: string, c }); } -const getCachedData = async (key: string) => { +const getCachedData = async (key: string, force?: boolean) => { const data = localStorage.getItem(key); if (!data) { return null; } // check expiration cache using timestamp 10 minutes const parsedData = JSON.parse(data); - if (Date.now() - parsedData.timestamp > 600000) { + if (Date.now() - parsedData.timestamp > 1000 * 10 && !force) { + return null; + } + if (Date.now() - parsedData.timestamp > 1000 * 0.5 && force) { return null; } console.log('[INFO] {ankrFactory} data from cache: ', parsedData.data); @@ -63,11 +66,13 @@ const setCachedData = async (key: string, data: any) => { * @param address wallet address to get balances * @returns object with balances property that contains an array of TokenInterface */ -export const getTokensBalances = async (chainIds: number[], address: string) => { +export const getTokensBalances = async (chainIds: number[], address: string, force?: boolean) => { const KEY = `hexa-ankr-service-${address}`; - const cachedData = await getCachedData(KEY); - if (cachedData) { - return cachedData; + if (!force) { + const cachedData = await getCachedData(KEY); + if (cachedData) { + return cachedData; + } } const APP_ANKR_APIKEY = process.env.NEXT_PUBLIC_APP_ANKR_APIKEY; const chainsList = diff --git a/src/store/effects/web3.effects.ts b/src/store/effects/web3.effects.ts index 48e543ed..8030d050 100644 --- a/src/store/effects/web3.effects.ts +++ b/src/store/effects/web3.effects.ts @@ -35,8 +35,8 @@ export const initializeWeb3 = async (chainId: number = CHAIN_DEFAULT.id) => { switchNetwork: async (chainId: number) => { await initializeWeb3(chainId); }, - loadAssets: async () => { - await magicUtils.loadBalances().catch((err) => { + loadAssets: async (force?: boolean) => { + await magicUtils.loadBalances(force).catch((err) => { console.error('[ERROR] {{Web3Effect}} load balance error: ', err?.message ? err.message : err); }); setWeb3State({ diff --git a/src/store/index.ts b/src/store/index.ts index 5250c7b1..98c5b51c 100755 --- a/src/store/index.ts +++ b/src/store/index.ts @@ -14,7 +14,7 @@ export interface IWeb3State { connectWallet(ops?: {email: string;}): Promise; disconnectWallet(): Promise; switchNetwork: (chainId: number) => Promise; - loadAssets: () => Promise; + loadAssets: (force?: boolean) => Promise; } export interface IPoolsState { From 6bef92e8e57431768c6a192a4b240db8a43bdcf2 Mon Sep 17 00:00:00 2001 From: FazioNico Date: Tue, 19 Mar 2024 16:34:52 +0100 Subject: [PATCH 32/74] feat: add transfer native token --- src/containers/TransferContainer.tsx | 68 ++++++++++++++++++++-------- src/network/EVM.ts | 47 +++++++++++++++++-- src/servcies/ankr.service.ts | 16 ++++--- src/store/effects/web3.effects.ts | 12 +++++ src/store/index.ts | 12 +++++ 5 files changed, 126 insertions(+), 29 deletions(-) diff --git a/src/containers/TransferContainer.tsx b/src/containers/TransferContainer.tsx index 48b92de7..84078cd2 100644 --- a/src/containers/TransferContainer.tsx +++ b/src/containers/TransferContainer.tsx @@ -142,14 +142,17 @@ const InputAssetWithDropDown = (props: { assets: IAsset[]; inputFromAmount: number; setInputFromAmount: Dispatch>; + setInputFromAsset: Dispatch>; }) => { - const { assets, setInputFromAmount, inputFromAmount } = props; + const { assets, setInputFromAmount, inputFromAmount, setInputFromAsset } = props; const [errorMessage, setErrorMessage] = useState(); const [selectedAsset, setSelectedAsset] = useState(assets[0]); const [isLoading, setIsLoading] = useState(false); const [popoverOpen, setPopoverOpen] = useState(false); const popover = useRef(null); + setInputFromAsset(selectedAsset); + const maxBalance = useMemo(() => { // round to the lower tenth return Math.floor(selectedAsset?.balance * 10000) / 10000; @@ -213,6 +216,7 @@ const InputAssetWithDropDown = (props: { > { setPopoverOpen(false); setSelectedAsset(asset); + setInputFromAsset(asset) setInputFromAmount(() => 0); setErrorMessage(() => undefined); // setQuote(() => undefined); @@ -249,6 +254,7 @@ const InputAssetWithDropDown = (props: { >
Promise;}) => { - const { walletAddress, isMagicWallet, assets, loadAssets } = Store.useState(getWeb3State); + const { walletAddress, isMagicWallet, assets, loadAssets, transfer, switchNetwork, currentNetwork } = Store.useState(getWeb3State); const [inputFromAmount, setInputFromAmount] = useState(0); const [inputToAddress, setInputToAddress] = useState(undefined); + const [inputFromAsset, setInputFromAsset] = useState(undefined); const [isScanModalOpen, setIsScanModalOpen] = useState(false); + const [isLoading, setIsLoading] = useState(false); - const isValid = inputFromAmount > 0 && inputToAddress && inputToAddress.length > 0; + const isValid = inputFromAmount > 0 + && inputToAddress + && inputToAddress.length > 0 + && inputFromAsset?.contractAddress; const handleSend = async () => { - console.log(inputFromAmount, inputToAddress); - // Todo... - // finalize with reload asset list - await loadAssets(true); + console.log('handleSend: ', {inputFromAmount, inputToAddress, inputFromAsset}); + if (inputFromAmount && inputToAddress && inputFromAsset?.contractAddress){ + if (inputFromAsset?.chain?.id && inputFromAsset?.chain?.id !== currentNetwork) { + await switchNetwork(inputFromAsset?.chain?.id) + } + await transfer( + {inputFromAmount, inputToAddress, inputFromAsset: inputFromAsset.contractAddress} + ) + // finalize with reload asset list + await loadAssets(true); + } } return ( <> @@ -365,31 +383,43 @@ export const TransferContainer = (props: {dismiss: () => Promise;}) => { - + + +

+ + Currently only support native token transfer + +

+
+
+ + +

Token

+
a.type === 'NATIVE')} inputFromAmount={inputFromAmount} setInputFromAmount={setInputFromAmount} - + setInputFromAsset={setInputFromAsset} />
- + + +

+ Destination address +

+
- - Destination address - Promise;}) => { { - $event.currentTarget.disabled = true; + setIsLoading(true); await handleSend().catch((err: any) => err); - $event.currentTarget.disabled = false; + setIsLoading(false); }} >Send diff --git a/src/network/EVM.ts b/src/network/EVM.ts index 9d27bbfd..3ddc93c1 100644 --- a/src/network/EVM.ts +++ b/src/network/EVM.ts @@ -60,12 +60,43 @@ export class EVMWalletUtils extends MagicWalletUtils { throw new Error("Web3Provider is not initialized"); } try { + console.log({ + destination, decimalAmount, contactAddress + }) const signer = this.web3Provider.getSigner(); - const amount = ethers.utils.parseEther(decimalAmount.toString()); // Convert 1 ether to wei + const from = await signer.getAddress(); + const amount = ethers.utils.parseUnits(decimalAmount.toString(), 18); // Convert 1 ether to wei const contract = new ethers.Contract(contactAddress, ["function transfer(address, uint256)"], signer); - const tx = await contract.transfer(destination, amount); - // Wait for transaction to be mined + + const data = contract.interface.encodeFunctionData("transfer", [destination, amount] ); + + const tx = await signer.sendTransaction({ + to: destination, + value: amount, + // data + }); const receipt = await tx.wait(); + // // Load token contract + // const tokenContract = new ethers.Contract(contactAddress, ['function transfer(address, uint256)'], signer); + + // // Send tokens to recipient + // const transaction = await tokenContract.transfer(destination, amount); + // const receipt = await transaction.wait(); + // console.log(receipt); + + + + //Define the data parameter + // const data = contract.interface.encodeFunctionData("transfer", [destination, amount] ) + // const tx = await signer.sendTransaction({ + // to: contactAddress, + // from, + // value: ethers.utils.parseUnits("0.000", "ether"), + // data: data + // }); + // // const tx = await contract.transfer(destination, amount); + // // Wait for transaction to be mined + // const receipt = await tx.wait(); return receipt; } catch (err: any) { console.error(err); @@ -93,4 +124,14 @@ export class EVMWalletUtils extends MagicWalletUtils { ); } } + + async estimateGas() { + // const limit = await provider.estimateGas({ + // from: signer.address, + // to: tokenContract, + // value: ethers.utils.parseUnits("0.000", "ether"), + // data: data + + // }); + } } diff --git a/src/servcies/ankr.service.ts b/src/servcies/ankr.service.ts index 34494111..bd82c9a4 100644 --- a/src/servcies/ankr.service.ts +++ b/src/servcies/ankr.service.ts @@ -40,14 +40,17 @@ const formatingTokensBalances = (assets: IAnkrTokenReponse[], address: string, c const getCachedData = async (key: string, force?: boolean) => { const data = localStorage.getItem(key); if (!data) { + console.log('No data in cache.') return null; } // check expiration cache using timestamp 10 minutes const parsedData = JSON.parse(data); - if (Date.now() - parsedData.timestamp > 1000 * 10 && !force) { + if (Date.now() - parsedData.timestamp > 10 * 60 * 1000 && !force) { + console.log('Expire cache 10 minute') return null; } - if (Date.now() - parsedData.timestamp > 1000 * 0.5 && force) { + if (Date.now() - parsedData.timestamp > 1 * 60 * 1000 && force) { + console.log('Expire cache 1 minute') return null; } console.log('[INFO] {ankrFactory} data from cache: ', parsedData.data); @@ -68,11 +71,10 @@ const setCachedData = async (key: string, data: any) => { */ export const getTokensBalances = async (chainIds: number[], address: string, force?: boolean) => { const KEY = `hexa-ankr-service-${address}`; - if (!force) { - const cachedData = await getCachedData(KEY); - if (cachedData) { - return cachedData; - } + const cachedData = await getCachedData(KEY, force); + console.log('cachedData:', cachedData); + if (cachedData) { + return cachedData; } const APP_ANKR_APIKEY = process.env.NEXT_PUBLIC_APP_ANKR_APIKEY; const chainsList = diff --git a/src/store/effects/web3.effects.ts b/src/store/effects/web3.effects.ts index 8030d050..9f9f89bc 100644 --- a/src/store/effects/web3.effects.ts +++ b/src/store/effects/web3.effects.ts @@ -44,6 +44,18 @@ export const initializeWeb3 = async (chainId: number = CHAIN_DEFAULT.id) => { assets: magicUtils.assets, }); }, + transfer: async (ops: { + inputFromAmount: number; + inputToAddress: string; + inputFromAsset: string; + }) => { + const result = await magicUtils.sendToken( + ops.inputToAddress, + ops.inputFromAmount, + ops.inputFromAsset + ); + console.log('[INFO] {{Web3Effect}} transfer result: ', result); + } }; console.log('[INFO] {{Web3Effect}} state: ', state); setWeb3State(state); diff --git a/src/store/index.ts b/src/store/index.ts index 98c5b51c..dfc14e44 100755 --- a/src/store/index.ts +++ b/src/store/index.ts @@ -15,6 +15,11 @@ export interface IWeb3State { disconnectWallet(): Promise; switchNetwork: (chainId: number) => Promise; loadAssets: (force?: boolean) => Promise; + transfer: (ops: { + inputFromAmount: number; + inputToAddress: string; + inputFromAsset: string; + }) => Promise; } export interface IPoolsState { @@ -56,6 +61,13 @@ const defaultState: IStore = Object.freeze({ loadAssets: async () => { throw new Error("loadAssets function not implemented"); }, + transfer: async (ops: { + inputFromAmount: number; + inputToAddress: string; + inputFromAsset: string; + }) => { + throw new Error("transfer function not implemented"); + }, } }); From d879a1248930fe2d2615ac576b3775ec41c35d52 Mon Sep 17 00:00:00 2001 From: FazioNico Date: Tue, 19 Mar 2024 21:43:46 +0100 Subject: [PATCH 33/74] feat: onramp integration --- src/components/AppShell.tsx | 25 +- src/components/ConnectButton.tsx | 5 +- src/components/Header.tsx | 2 +- src/components/base/WalletBaseContainer.tsx | 77 ++- src/containers/BuyWithFiat.tsx | 39 ++ src/containers/DepositContainer.tsx | 20 +- src/containers/TransferContainer.tsx | 587 ++++++++++-------- .../desktop/WalletDesktopContainer.tsx | 30 +- src/containers/mobile/EarnMobileContainer.tsx | 14 +- .../mobile/WalletMobileContainer.tsx | 40 +- 10 files changed, 538 insertions(+), 301 deletions(-) create mode 100644 src/containers/BuyWithFiat.tsx diff --git a/src/components/AppShell.tsx b/src/components/AppShell.tsx index 0e97b4b7..56d90311 100755 --- a/src/components/AppShell.tsx +++ b/src/components/AppShell.tsx @@ -21,6 +21,11 @@ import { IonItem, IonAvatar, IonProgressBar, + IonModal, + IonHeader, + IonToolbar, + IonTitle, + IonButtons, } from "@ionic/react"; import { StatusBar, Style } from "@capacitor/status-bar"; @@ -41,6 +46,8 @@ import { getWeb3State } from "@/store/selectors"; import { IonRoute } from "@ionic/react"; import { isPlatform } from "@ionic/core"; import { AboutContainer } from "@/containers/desktop/AboutContainer"; +import { close } from "ionicons/icons"; +import { BuyWithFiat } from "@/containers/BuyWithFiat"; setupIonicReact({ mode: "ios" }); @@ -96,6 +103,7 @@ const AppShell = () => { let segment = pathname.split("/")[1] || "swap"; // urlParams.get("s") || "swap"; const { walletAddress, isMagicWallet } = Store.useState(getWeb3State); const [presentFiatWarning, dismissFiatWarning] = useIonAlert(); + const [isBuyWithFiatModalOpen, setIsBuyWithFiatModalOpen] = useState(false); const isNotFound = segment && ["wallet", "swap", "fiat", "defi", "earn"].indexOf(segment) === -1; @@ -103,14 +111,13 @@ const AppShell = () => { const [currentSegment, setSegment] = useState(segment); const handleSegmentChange = async (e: any) => { if (e.detail.value === "fiat") { - if (walletAddress && walletAddress !== "" && isMagicWallet) { - const magic = await getMagic(); - magic.wallet.showOnRamp(); + if (walletAddress && walletAddress !== "") { + setIsBuyWithFiatModalOpen(true); } else { await presentFiatWarning({ header: "Information", message: - "Connect with e-mail or social login to enable buy crypto with fiat.", + "Connect to enable buy crypto with fiat.", buttons: ["OK"], cssClass: "modalAlert", }); @@ -190,7 +197,9 @@ const AppShell = () => { )} }> - {currentSegment === "wallet" && ()} + {currentSegment === "wallet" && ( + + )} }> {currentSegment === "swap" && ()} @@ -330,6 +339,12 @@ const AppShell = () => { )} + setIsBuyWithFiatModalOpen(false)} + > + setIsBuyWithFiatModalOpen(false)} /> + ); }; diff --git a/src/components/ConnectButton.tsx b/src/components/ConnectButton.tsx index 49cc44a2..f5b68e75 100644 --- a/src/components/ConnectButton.tsx +++ b/src/components/ConnectButton.tsx @@ -64,7 +64,10 @@ const ConnectButton = (props: { await handleConnect(); $event.currentTarget.disabled = false; } catch (err: any) { - $event.currentTarget.disabled = false; + console.log('[ERROR] {ConnectButton} handleConnect(): ', err); + if ($event.currentTarget) { + $event.currentTarget.disabled = false; + } } }} > diff --git a/src/components/Header.tsx b/src/components/Header.tsx index 474e29d4..ea35f474 100644 --- a/src/components/Header.tsx +++ b/src/components/Header.tsx @@ -110,11 +110,11 @@ export function Header({ mode="ios" value={currentSegment} onIonChange={(e: any) => { - router.push(`/${e.detail.value}`) if (e.detail.value === 'fiat-segment') { handleSegmentChange({detail: {value: 'fiat'}}); return; }; + router.push(`/${e.detail.value}`) handleSegmentChange(e); }} > diff --git a/src/components/base/WalletBaseContainer.tsx b/src/components/base/WalletBaseContainer.tsx index a90d9397..f23cd282 100644 --- a/src/components/base/WalletBaseContainer.tsx +++ b/src/components/base/WalletBaseContainer.tsx @@ -1,9 +1,21 @@ -import { IonModal, ModalOptions } from "@ionic/react"; +import { + IonButton, + IonButtons, + IonContent, + IonHeader, + IonIcon, + IonModal, + IonTitle, + IonToolbar, + ModalOptions, +} from "@ionic/react"; import React from "react"; import { IAsset } from "@/interfaces/asset.interface"; import { DepositContainer } from "@/containers/DepositContainer"; import { HookOverlayOptions } from "@ionic/react/dist/types/hooks/HookOverlayOptions"; import { TransferContainer } from "../../containers/TransferContainer"; +import { close } from "ionicons/icons"; +import { BuyWithFiat } from "@/containers/BuyWithFiat"; export type SelectedTokenDetail = { name: string; @@ -31,6 +43,7 @@ export interface WalletComponentState { isEarnModalOpen: boolean; isTransferModalOpen: boolean; isDepositModalOpen: boolean; + isBuyWithFiatModalOpen: boolean; } export default class WalletBaseComponent extends React.Component< @@ -47,6 +60,7 @@ export default class WalletBaseComponent extends React.Component< isEarnModalOpen: false, isTransferModalOpen: false, isDepositModalOpen: false, + isBuyWithFiatModalOpen: false, }; } @@ -82,19 +96,23 @@ export default class WalletBaseComponent extends React.Component< ?.sort((a, b) => b.balanceUsd - a.balanceUsd) ?.reduce((acc, asset) => { // check existing asset symbol - const symbol = (asset.name.toLowerCase().includes('aave') && asset.name.toLowerCase() !== 'aave token') - ? asset.name.split(' ').pop()||asset.symbol - : asset.symbol; - const name = (asset.name.toLowerCase().includes('aave') && asset.name.toLowerCase() !== 'aave token') - ? asset.name.split(' ').pop()||asset.name - : asset.name; - + const symbol = + asset.name.toLowerCase().includes("aave") && + asset.name.toLowerCase() !== "aave token" + ? asset.name.split(" ").pop() || asset.symbol + : asset.symbol; + const name = + asset.name.toLowerCase().includes("aave") && + asset.name.toLowerCase() !== "aave token" + ? asset.name.split(" ").pop() || asset.name + : asset.name; const index = acc.findIndex((a) => a.symbol === symbol); if (index !== -1) { - const balanceUsd = (asset.balanceUsd <= 0 && asset.balance > 0 ) - ? acc[index].priceUsd * asset.balance - : asset.balanceUsd; + const balanceUsd = + asset.balanceUsd <= 0 && asset.balance > 0 + ? acc[index].priceUsd * asset.balance + : asset.balanceUsd; acc[index].balance += asset.balance; acc[index].balanceUsd += balanceUsd; acc[index].assets.push(asset); @@ -110,7 +128,7 @@ export default class WalletBaseComponent extends React.Component< }); } return acc; - }, [] as { name: string; symbol: string; priceUsd: number; balance: number; balanceUsd: number; thumbnail: string; assets: IAsset[] }[]) + }, [] as { name: string; symbol: string; priceUsd: number; balance: number; balanceUsd: number; thumbnail: string; assets: IAsset[] }[]); this.setState({ assetGroup }); } @@ -120,9 +138,9 @@ export default class WalletBaseComponent extends React.Component< async handleTokenDetailClick(token: any = null) { console.log(token); - this.setState((prev) =>({ - ...prev, - selectedTokenDetail: token + this.setState((prev) => ({ + ...prev, + selectedTokenDetail: token, })); } @@ -131,8 +149,8 @@ export default class WalletBaseComponent extends React.Component< } async handleTransferClick(state: boolean) { - console.log('handleTransferClick', state) - this.setState({isTransferModalOpen: state}); + console.log("handleTransferClick", state); + this.setState({ isTransferModalOpen: state }); } async handleDepositClick(state?: boolean) { @@ -142,10 +160,19 @@ export default class WalletBaseComponent extends React.Component< }); } - async handleRefresh(){ + async handleRefresh() { this.props.loadAssets(true); } + async handleBuyWithFiat(state: boolean) { + console.log(">>>>>", state); + + this.setState((prev) => ({ + ...prev, + isBuyWithFiatModalOpen: state, + })); + } + render(): React.ReactNode { return ( <> @@ -164,10 +191,20 @@ export default class WalletBaseComponent extends React.Component< initialBreakpoint={this.props.modalOpts.initialBreakpoint} onDidDismiss={() => this.handleDepositClick(false)} > - this.handleDepositClick(false)} + + this.handleBuyWithFiat(state) + } + dismiss={() => this.handleDepositClick(false)} /> - + + this.handleBuyWithFiat(false)} + > + this.handleBuyWithFiat(false)} /> + ); } diff --git a/src/containers/BuyWithFiat.tsx b/src/containers/BuyWithFiat.tsx new file mode 100644 index 00000000..285f3acb --- /dev/null +++ b/src/containers/BuyWithFiat.tsx @@ -0,0 +1,39 @@ +import { IonButton, IonButtons, IonContent, IonHeader, IonIcon, IonTitle, IonToolbar } from "@ionic/react"; +import { close } from "ionicons/icons"; + +export const BuyWithFiat = (props: { + dismiss: ()=> void +}) => { + + return ( + <> + + + +

Buy

+
+ + { + props.dismiss(); + }} + > + + + +
+
+ + + + + ) +} \ No newline at end of file diff --git a/src/containers/DepositContainer.tsx b/src/containers/DepositContainer.tsx index 5c64b96a..aaaa5e6c 100644 --- a/src/containers/DepositContainer.tsx +++ b/src/containers/DepositContainer.tsx @@ -25,6 +25,7 @@ import { SelectNetwork } from "@/components/SelectNetwork"; export const DepositContainer = (props: { dismiss: ()=> Promise; + handleBuyWithFiat: (state: boolean)=> Promise; }) => { const { currentNetwork, @@ -54,10 +55,11 @@ export const DepositContainer = (props: { )); const { display: displayLoader, hide: hidLoader } = useLoader(); - const handleActions = async (type: string, payload: string) => { + const handleActions = async (type: string, payload?: string) => { await displayLoader(); switch (true) { case type === "copy": { + if (!payload) return; navigator?.clipboard?.writeText(payload); // display toast confirmation presentSuccessCopyAddress({ @@ -88,6 +90,9 @@ export const DepositContainer = (props: { await handleActions("copy", `${walletAddress}`); break; } + case type === 'buy': { + props.handleBuyWithFiat(true); + } default: break; } @@ -196,6 +201,19 @@ export const DepositContainer = (props: {
*/}
+ + + { + handleActions('buy'); + }}> + Buy Crypto + + + ); }; diff --git a/src/containers/TransferContainer.tsx b/src/containers/TransferContainer.tsx index 84078cd2..1a754cfb 100644 --- a/src/containers/TransferContainer.tsx +++ b/src/containers/TransferContainer.tsx @@ -25,7 +25,14 @@ import { } from "@ionic/react"; import { chevronDown, close, scan } from "ionicons/icons"; import { SymbolIcon } from "../components/SymbolIcon"; -import { Dispatch, SetStateAction, useEffect, useMemo, useRef, useState } from "react"; +import { + Dispatch, + SetStateAction, + useEffect, + useMemo, + useRef, + useState, +} from "react"; import { CHAIN_AVAILABLES, CHAIN_DEFAULT } from "@/constants/chains"; import { getReadableAmount } from "@/utils/getReadableAmount"; import { InputInputEventDetail, IonInputCustomEvent } from "@ionic/core"; @@ -36,14 +43,19 @@ const isNumberKey = (evt: React.KeyboardEvent) => { return !(charCode > 31 && (charCode < 48 || charCode > 57)); }; -const scanQrCode = async (html5QrcodeScanner: Html5Qrcode): Promise => { +const scanQrCode = async ( + html5QrcodeScanner: Html5Qrcode +): Promise => { try { - const qrboxFunction = function(viewfinderWidth: number, viewfinderHeight: number) { + const qrboxFunction = function ( + viewfinderWidth: number, + viewfinderHeight: number + ) { // Square QR Box, with size = 80% of the min edge width. const size = Math.min(viewfinderWidth, viewfinderHeight) * 0.8; return { - width: size, - height: size + width: size, + height: size, }; }; const cameras = await Html5Qrcode.getCameras(); @@ -52,39 +64,48 @@ const scanQrCode = async (html5QrcodeScanner: Html5Qrcode): Promise c.label.includes("back"))?.id || cameras[0].id; - console.log('>>', cameraId, cameras) + const cameraId = + cameras.find((c) => c.label.includes("back"))?.id || cameras[0].id; + console.log(">>", cameraId, cameras); // start scanner - const config = { + const config = { fps: 10, qrbox: qrboxFunction, // Important notice: this is experimental feature, use it at your // own risk. See documentation in // mebjas@/html5-qrcode/src/experimental-features.ts experimentalFeatures: { - useBarCodeDetectorIfSupported: true + useBarCodeDetectorIfSupported: true, }, rememberLastUsedCamera: true, - showTorchButtonIfSupported: true + showTorchButtonIfSupported: true, }; if (!cameraId) { throw new Error("No camera found"); } // If you want to prefer front camera return new Promise((resolve, reject) => { - html5QrcodeScanner.start(cameraId, config, (decodedText, decodedResult)=> { - // stop reader - html5QrcodeScanner.stop(); - // resolve promise with the decoded text - resolve(decodedText); - }, (error) =>{}); + html5QrcodeScanner.start( + cameraId, + config, + (decodedText, decodedResult) => { + // stop reader + html5QrcodeScanner.stop(); + // resolve promise with the decoded text + resolve(decodedText); + }, + (error) => {} + ); }); } catch (error: any) { throw new Error(error?.message || "BarcodeScanner not available"); } }; -const ScanModal = (props: { isOpen: boolean, onDismiss: (address?: string) => void }) => { +const ScanModal = (props: { + isOpen: boolean; + onDismiss: (address?: string) => void; +}) => { const [html5Qrcode, setHtml5Qrcode] = useState(); const elementRef = useRef(null); @@ -92,66 +113,80 @@ const ScanModal = (props: { isOpen: boolean, onDismiss: (address?: string) => vo if (!props.isOpen) { return; } - console.log('>>>>', elementRef.current) + console.log(">>>>", elementRef.current); if (!elementRef.current) { return; } if (!html5Qrcode) { throw new Error("BarcodeScanner not available"); } - const scaner = new html5Qrcode('reader-scan-element') + const scaner = new html5Qrcode("reader-scan-element"); if (!scaner) { throw new Error("BarcodeScanner not loaded"); } try { - scanQrCode(scaner).then( - result => { - scaner.stop(); - props.onDismiss(result); - } - ); + scanQrCode(scaner).then((result) => { + scaner.stop(); + props.onDismiss(result); + }); } catch (error: any) { console.error(error); scaner.stop(); } + return () => { + scaner.stop(); + }; }, [elementRef.current, html5Qrcode, props.isOpen]); - + return ( - { - import("html5-qrcode").then( - (m) => setHtml5Qrcode(()=> (m.Html5Qrcode)) - ); + import("html5-qrcode").then((m) => setHtml5Qrcode(() => m.Html5Qrcode)); }} - onDidDismiss={()=> props.onDismiss()}> - - + onDidDismiss={() => props.onDismiss()} + > + - props.onDismiss()}> + props.onDismiss()} + > -
+
- ) + ); }; const InputAssetWithDropDown = (props: { assets: IAsset[]; inputFromAmount: number; setInputFromAmount: Dispatch>; - setInputFromAsset: Dispatch>; + setInputFromAsset: Dispatch>; }) => { - const { assets, setInputFromAmount, inputFromAmount, setInputFromAsset } = props; + const { assets, setInputFromAmount, inputFromAmount, setInputFromAsset } = + props; const [errorMessage, setErrorMessage] = useState(); const [selectedAsset, setSelectedAsset] = useState(assets[0]); const [isLoading, setIsLoading] = useState(false); const [popoverOpen, setPopoverOpen] = useState(false); - const popover = useRef(null); + // const popover = useRef(null); - setInputFromAsset(selectedAsset); + useEffect(() => { + if (selectedAsset) { + setInputFromAsset(selectedAsset); + } + return () => {}; + }); const maxBalance = useMemo(() => { // round to the lower tenth @@ -179,202 +214,236 @@ const InputAssetWithDropDown = (props: { }; return ( - -
{ - $event.stopPropagation(); - // set position - popover.current!.event = $event; - // open popover - setPopoverOpen(() => true); - }} - > -
+ + - - -
+ background: "#0f1629", + padding: "0.65rem 0.5rem", + borderRadius: "24px", + marginBottom: "0.5rem", + }}> + +
{ + $event.stopPropagation(); + // set position + // popover.current!.event = $event; + // open popover + setPopoverOpen(() => true); + }} + > +
+ + +
- setPopoverOpen(false)} - > - - - -

Available assets

-
-
- - {assets - .filter((a) => a.balance > 0) - .map((asset, index) => ( - { - setPopoverOpen(false); - setSelectedAsset(asset); - setInputFromAsset(asset) - setInputFromAmount(() => 0); - setErrorMessage(() => undefined); - // setQuote(() => undefined); - console.log({ selectedAsset }); - }} - > -
- -
- - {asset.symbol} -
- - - { - CHAIN_AVAILABLES.find( - (c) => c.id === asset?.chain?.id - )?.name - } - - -
-
- {Number(asset?.balance).toFixed(6)} -
- - - {getReadableAmount( - +asset?.balance, - Number(asset?.priceUsd), - "No deposit" - )} - - -
-
- ))} -
-
-
+
+ +

{selectedAsset?.symbol}

+
+ { + $event.stopPropagation(); + setInputFromAmount(() => selectedAsset?.balance || 0); + }} + > + Max: {maxBalance} + +
+
+
+ +
+ { + if (isNumberKey(e)) { + setIsLoading(() => true); + } + }} + onIonInput={(e) => handleInputChange(e)} + /> +
+
+ + -
+ setPopoverOpen(false)} + className="modalAlert" + > + -

{selectedAsset?.symbol}

+

Available assets

- { - $event.stopPropagation(); - setInputFromAmount(() => selectedAsset?.balance || 0); - }} - > - Max :{maxBalance} - -
-
- -
- { - if (isNumberKey(e)) { - setIsLoading(() => true); - } - }} - onIonInput={(e) => handleInputChange(e)} - /> -
-
+ + + {assets + .filter((a) => a.balance > 0) + .map((asset, index) => ( + { + setPopoverOpen(() => false); + setSelectedAsset(asset); + setInputFromAsset(asset); + setInputFromAmount(() => 0); + setErrorMessage(() => undefined); + // setQuote(() => undefined); + console.log({ selectedAsset }); + }} + > +
+ +
+ + {asset.symbol} +
+ + + { + CHAIN_AVAILABLES.find((c) => c.id === asset?.chain?.id) + ?.name + } + + +
+
+ {Number(asset?.balance).toFixed(6)} +
+ + + {getReadableAmount( + +asset?.balance, + Number(asset?.priceUsd), + "No deposit" + )} + + +
+
+ ))} +
+ + ); }; -export const TransferContainer = (props: {dismiss: () => Promise;}) => { - - const { walletAddress, isMagicWallet, assets, loadAssets, transfer, switchNetwork, currentNetwork } = Store.useState(getWeb3State); +export const TransferContainer = (props: { dismiss: () => Promise }) => { + const { + walletAddress, + isMagicWallet, + assets, + loadAssets, + transfer, + switchNetwork, + currentNetwork, + } = Store.useState(getWeb3State); const [inputFromAmount, setInputFromAmount] = useState(0); - const [inputToAddress, setInputToAddress] = useState(undefined); - const [inputFromAsset, setInputFromAsset] = useState(undefined); + const [inputToAddress, setInputToAddress] = useState( + undefined + ); + const [inputFromAsset, setInputFromAsset] = useState( + undefined + ); const [isScanModalOpen, setIsScanModalOpen] = useState(false); const [isLoading, setIsLoading] = useState(false); - const isValid = inputFromAmount > 0 - && inputToAddress - && inputToAddress.length > 0 - && inputFromAsset?.contractAddress; + const isValid = + inputFromAmount > 0 && + inputToAddress && + inputToAddress.length > 0 && + inputFromAsset?.contractAddress; const handleSend = async () => { - console.log('handleSend: ', {inputFromAmount, inputToAddress, inputFromAsset}); - if (inputFromAmount && inputToAddress && inputFromAsset?.contractAddress){ - if (inputFromAsset?.chain?.id && inputFromAsset?.chain?.id !== currentNetwork) { - await switchNetwork(inputFromAsset?.chain?.id) + console.log("handleSend: ", { + inputFromAmount, + inputToAddress, + inputFromAsset, + }); + if (inputFromAmount && inputToAddress && inputFromAsset?.contractAddress) { + if ( + inputFromAsset?.chain?.id && + inputFromAsset?.chain?.id !== currentNetwork + ) { + await switchNetwork(inputFromAsset?.chain?.id); } - await transfer( - {inputFromAmount, inputToAddress, inputFromAsset: inputFromAsset.contractAddress} - ) + await transfer({ + inputFromAmount, + inputToAddress, + inputFromAsset: inputFromAsset.contractAddress, + }); // finalize with reload asset list await loadAssets(true); } - } + }; return ( <> - +

Send token

- { props.dismiss(); - }}> + }} + > @@ -386,83 +455,93 @@ export const TransferContainer = (props: {dismiss: () => Promise;}) => {

- - Currently only support native token transfer - + Currently only support native token transfer

- +

Token

a.type === 'NATIVE')} + assets={assets.filter((a) => a.type === "NATIVE")} inputFromAmount={inputFromAmount} setInputFromAmount={setInputFromAmount} setInputFromAsset={setInputFromAsset} />
- -

- Destination address -

-
- - { - console.log($event) - setInputToAddress(() => ($event.detail.value|| undefined)); - }} /> - { - setIsScanModalOpen(()=> true); +

Destination address

+ + + - -
-
- + { + setInputToAddress( + () => $event.detail.value || undefined + ); + }} + /> +
+ + { + setIsScanModalOpen(() => true); + }} + > + + + + + + { if (data) { setInputToAddress(() => data); } setIsScanModalOpen(() => false); - }} /> + }} + /> - { + disabled={!isValid || isLoading} + onClick={async ($event) => { setIsLoading(true); await handleSend().catch((err: any) => err); setIsLoading(false); }} - >Send + > + Send + - ); }; diff --git a/src/containers/desktop/WalletDesktopContainer.tsx b/src/containers/desktop/WalletDesktopContainer.tsx index a3fe6a62..1259aaba 100644 --- a/src/containers/desktop/WalletDesktopContainer.tsx +++ b/src/containers/desktop/WalletDesktopContainer.tsx @@ -122,7 +122,9 @@ class WalletDesktopContainer extends WalletBaseComponent { {}} + onClick={() => { + super.handleBuyWithFiat(true); + }} > @@ -132,12 +134,19 @@ class WalletDesktopContainer extends WalletBaseComponent { -

Buy crypto

+

+ + Buy crypto + +

You have to get ETH to use your wallet. Buy with credit card or with Apple Pay

+ + Buy crypto +
@@ -155,7 +164,9 @@ class WalletDesktopContainer extends WalletBaseComponent { {}} + onClick={() => { + super.handleDepositClick() + }} > @@ -165,12 +176,19 @@ class WalletDesktopContainer extends WalletBaseComponent { -

Deposit assets

+

+ + Deposit assets + +

Transfer tokens from another wallet or from a crypto exchange

+ + Deposit assets +
@@ -315,7 +333,9 @@ class WalletDesktopContainer extends WalletBaseComponent { const withStore = (Component: React.ComponentClass) => { // use named function to prevent re-rendering failure - return function WalletDesktopContainerWithStore() { + return function WalletDesktopContainerWithStore(props: { + // handleDepositClick: (state: boolean) => void; + }) { const { walletAddress, assets, loadAssets } = Store.useState(getWeb3State); return ( diff --git a/src/containers/mobile/EarnMobileContainer.tsx b/src/containers/mobile/EarnMobileContainer.tsx index fc882be0..f0bd1352 100644 --- a/src/containers/mobile/EarnMobileContainer.tsx +++ b/src/containers/mobile/EarnMobileContainer.tsx @@ -39,7 +39,7 @@ import { close } from "ionicons/icons"; export const EarnMobileContainer = (props: { dismiss: ()=> Promise; }) => { - const [segment, setSegment] = useState("loan"); + const [segment, setSegment] = useState("earn"); const { walletAddress } = Store.useState(getWeb3State); const userSummaryAndIncentivesGroup = Store.useState( getUserSummaryAndIncentivesGroupState @@ -80,18 +80,18 @@ export const EarnMobileContainer = (props: { className="ion-padding-vertical" > - setSegment(() => "loan")} - > - Loan market - setSegment(() => "earn")} > Earn + setSegment(() => "loan")} + > + Loan market + - + super.handleBuyWithFiat(true)}> - + -

Buy crypto

+

+ + Buy crypto + +

You have to get ETH to use your wallet. Buy with credit card or with Apple Pay

+ + Buy crypto +
@@ -231,16 +238,22 @@ class WalletMobileContainer extends WalletBaseComponent< - + -

Deposit assets

+

+ + Deposit assets + +

- You have to get ETH to use your wallet. Buy - with credit card or with Apple Pay + Transefer tokens from another wallet or from a crypto exchange

+ + Deposit assets +
@@ -368,6 +381,19 @@ class WalletMobileContainer extends WalletBaseComponent< )} + + + +

+ You are using a non-custodial wallet that give you complete + control over your cryptocurrency funds and private keys. + Unlike custodial wallets, you manage your own security, + enhancing privacy and independence in the decentralized + cryptocurrency space. +

+
+
+
From 06d2608e0a14da698f9f4e5ec35d4fc2fa7a052f Mon Sep 17 00:00:00 2001 From: FazioNico Date: Tue, 19 Mar 2024 23:43:33 +0100 Subject: [PATCH 34/74] refactor: add install modal --- src/components/Header.tsx | 344 +++++++++++------- src/components/ui/WalletAssetEntity.tsx | 15 +- .../desktop/WalletDesktopContainer.tsx | 16 +- 3 files changed, 231 insertions(+), 144 deletions(-) diff --git a/src/components/Header.tsx b/src/components/Header.tsx index ea35f474..a1edace3 100644 --- a/src/components/Header.tsx +++ b/src/components/Header.tsx @@ -1,17 +1,21 @@ import { IonButton, + IonButtons, IonCol, IonGrid, IonHeader, IonIcon, IonImg, IonMenuToggle, + IonModal, IonPopover, IonRow, IonSegment, IonSegmentButton, IonText, + IonTitle, IonToolbar, + isPlatform, useIonRouter, } from "@ionic/react"; import { @@ -62,6 +66,7 @@ export function Header({ const { walletAddress } = Store.useState(getWeb3State); const [points, setPoints] = useState(null); const [isPointsPopoverOpen, setIsPointsPopoverOpen] = useState(false); + const [isInstallModalOpen, setIsInstallModalOpen] = useState(false); const pointsPopoverRef = useRef(null); const router = useIonRouter(); const openPopover = (e: any) => { @@ -74,76 +79,141 @@ export function Header({ // render component return ( - - - - - {!currentSegment || currentSegment === "welcome" ? ( - <>{currentSegment} - ) : ( - <> - - + + + + + {!currentSegment || currentSegment === "welcome" ? ( + <>{currentSegment} + ) : ( + <> + + + + + + - - - - - { - if (e.detail.value === 'fiat-segment') { - handleSegmentChange({detail: {value: 'fiat'}}); - return; - }; - router.push(`/${e.detail.value}`) - handleSegmentChange(e); + position: "absolute", + top: "50%", + left: "50%", + transform: "translate(-50%, -50%)", }} + class="ion-padding ion-hide-md-down" > - Wallet - Exchange - - Earn interest - - - Lend & borrow - - - Buy - - - - - {walletAddress ? ( - <> + { + if (e.detail.value === "fiat-segment") { + handleSegmentChange({ detail: { value: "fiat" } }); + return; + } + router.push(`/${e.detail.value}`); + handleSegmentChange(e); + }} + > + Wallet + Exchange + + Earn interest + + + Lend & borrow + + + Buy + + + + + {walletAddress ? ( + <> +
+ openPopover(e)} + > + + + Points + + + + + Connected + + + + + { + setPoints(() => null); + setIsPointsPopoverOpen(false); + }} + onWillPresent={async () => { + const response = await getAddressPoints( + walletAddress + ).catch((error) => {}); + console.log("response", response); + if (response?.data?.totalPoints) { + setPoints(() => response.data.totalPoints); + } else { + setPoints(() => "0"); + } + }} + > + setIsPointsPopoverOpen(false)} + /> + +
+ + ) : (
openPopover(e)} > - - - Connected - - - - - { - setPoints(() => null); - setIsPointsPopoverOpen(false); - }} - onWillPresent={async () => { - const response = await getAddressPoints( - walletAddress - ).catch((error) => {}); - console.log("response", response); - if (response?.data?.totalPoints) { - setPoints(() => response.data.totalPoints); - } else { - setPoints(() => "0"); - } - }} - > - setIsPointsPopoverOpen(false)} - /> - +
- - ) : ( -
+ )} + + {/* Mobile nav button */} + + - - - Points - + - -
- )} -
- {/* Mobile nav button */} - - - - - - - - - )} + +
+ + )} +
+
+ {!isPlatform("pwa") && isPlatform("mobile") && ( + + { + setIsInstallModalOpen(true); + }}> + + Install App + + + + )} +
+
+ + setIsInstallModalOpen(false)} + className="modalAlert" + > + + + +

+ + Install to enable all features! +
+ + Earn strategies, loans market, send, deposit and buy crypto with fiat. + +

+
    + {isPlatform('ios') && ( + <> +
  • Tap the Share button at the bottom of the browser
  • +
  • Scroll down and select "Add to Home Screen."
  • +
  • Tap "Add" in the top right corner
  • + + )} + {!isPlatform('ios') && ( + <> +
  • - Tap the menu button (three dots) in your browserr
  • +
  • - Select "Add to Home Screen" or "Install App."
  • + + )} +
+

+ Enjoy instant access to our app with a single tap! +

+
+ + setIsInstallModalOpen(false)}>ok +
-
-
+ + ); } diff --git a/src/components/ui/WalletAssetEntity.tsx b/src/components/ui/WalletAssetEntity.tsx index 87025a1d..c4c5147f 100644 --- a/src/components/ui/WalletAssetEntity.tsx +++ b/src/components/ui/WalletAssetEntity.tsx @@ -31,8 +31,12 @@ export function WalletAssetEntity(props: { > - +

{currencyFormat.format(asset.priceUsd)}

- +

{numberFormat.format(asset.balance)}

- +

{currencyFormat.format(asset.balanceUsd)} diff --git a/src/containers/desktop/WalletDesktopContainer.tsx b/src/containers/desktop/WalletDesktopContainer.tsx index 1259aaba..23a6e0e9 100644 --- a/src/containers/desktop/WalletDesktopContainer.tsx +++ b/src/containers/desktop/WalletDesktopContainer.tsx @@ -248,7 +248,9 @@ class WalletDesktopContainer extends WalletBaseComponent { @@ -256,15 +258,21 @@ class WalletDesktopContainer extends WalletBaseComponent { Balance From 0776e10b16c0c26b3052b2bfd462b7cb00607eac Mon Sep 17 00:00:00 2001 From: FazioNico Date: Tue, 19 Mar 2024 23:53:47 +0100 Subject: [PATCH 35/74] feat: camera selection --- src/containers/TransferContainer.tsx | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/containers/TransferContainer.tsx b/src/containers/TransferContainer.tsx index 1a754cfb..686a6917 100644 --- a/src/containers/TransferContainer.tsx +++ b/src/containers/TransferContainer.tsx @@ -65,7 +65,7 @@ const scanQrCode = async ( // get prefered back camera if available or load the first one const cameraId = - cameras.find((c) => c.label.includes("back"))?.id || cameras[0].id; + cameras.find((c) => c.label.toLowerCase().includes("rear"))?.id || cameras[0].id; console.log(">>", cameraId, cameras); // start scanner const config = { From afd5b13b6ab293b516cf08e7c4ddae6687b2b40d Mon Sep 17 00:00:00 2001 From: FazioNico Date: Wed, 20 Mar 2024 00:17:45 +0100 Subject: [PATCH 36/74] refactor: fees % --- src/components/FAQ.tsx | 2 +- src/containers/desktop/SwapContainer.tsx | 2 +- src/servcies/lifi.service.ts | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/src/components/FAQ.tsx b/src/components/FAQ.tsx index cfe09714..6654f150 100644 --- a/src/components/FAQ.tsx +++ b/src/components/FAQ.tsx @@ -61,7 +61,7 @@ export const FAQ: React.FC = () => { }, { q: "What are the fees for swapping?", - a: "Hexa Lite does not charge any fees for swapping. However, the protocols that we integrate with may charge a fee for swapping and on-chain gas fees are applicable according to each network. That's why you have to get some ETH to pay for gas fees on Ethereum network and majors EVM network.", + a: "Hexa Lite charge 1% fees for swapping. However, the protocols that we integrate with may charge a fee for swapping and on-chain gas fees are applicable according to each network. That's why you have to get some ETH to pay for gas fees on Ethereum network and majors EVM network.", }, { q: "How pay on-chain transaction fees?", diff --git a/src/containers/desktop/SwapContainer.tsx b/src/containers/desktop/SwapContainer.tsx index 3788df25..e22f94ad 100644 --- a/src/containers/desktop/SwapContainer.tsx +++ b/src/containers/desktop/SwapContainer.tsx @@ -105,7 +105,7 @@ export default function SwapContainer() { // load environment config const widgetConfig: WidgetConfig = { ...LIFI_CONFIG, - fee: 0, // set fee to 0 for main swap feature + // fee: 0, // set fee to 0 for main swap feature walletManagement: { connect: async () => { try { diff --git a/src/servcies/lifi.service.ts b/src/servcies/lifi.service.ts index 72e70c99..a4f26556 100644 --- a/src/servcies/lifi.service.ts +++ b/src/servcies/lifi.service.ts @@ -802,7 +802,7 @@ export const swapWithLiFi = async ( export const LIFI_CONFIG = Object.freeze({ // integrator: "cra-example", integrator: process.env.NEXT_PUBLIC_APP_IS_PROD ? "hexa-lite" : "", - fee: 0.05, + fee: 0.01, variant: "expandable", insurance: true, containerStyle: { From 89204922ed6aa782086f1b4c7ce9d67d69758f9c Mon Sep 17 00:00:00 2001 From: FazioNico Date: Wed, 20 Mar 2024 03:09:20 +0100 Subject: [PATCH 37/74] refactor: welcom desktop ui --- public/assets/images/preview-app.png | Bin 0 -> 905047 bytes src/components/Welcome.tsx | 65 ++++++++++++++++++--------- src/styles/global.scss | 57 ++++++++++++++++++++--- 3 files changed, 95 insertions(+), 27 deletions(-) create mode 100644 public/assets/images/preview-app.png diff --git a/public/assets/images/preview-app.png b/public/assets/images/preview-app.png new file mode 100644 index 0000000000000000000000000000000000000000..614c68c4442586fa1afccc85b57b8a0adf798082 GIT binary patch literal 905047 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

; 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

    saUdDge5zl; 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%0DQ=V|3dV+#s!KaU6%k0b3|q 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 - - - - - + + + {/* + */} - -

    Hexa Lite

    -

    Build your wealth with cryptoassets

    - - +
    + + +

    Hexa Lite

    +

    Build your wealth with crypto assets

    +
    +
    + {/*

    Buy digitals assets with fiats, exchange at best rate, lend and borrow money on DeFi protocols without any intermediate smart contract or third-party to enforce security and increase earn interest.

    -
    +
    */} { router.push("wallet"); handleSegmentChange({ detail: { value: "wallet" } }); @@ -66,7 +66,27 @@ export function Welcome({ > Launch App - + { + router.push("available-platforms"); + }} + > + + Available on iOS, Android or Desktop + + + + + + + @@ -75,6 +95,7 @@ export function Welcome({ class="rowSection withPadding ion-justify-content-center ion-align-items-center ion-padding" style={{ background: "#182449", + boxShadow: '0px -60px 60px 0px rgba(var(--ion-color-primary-rgb), 0.15)' }} > @@ -113,7 +134,7 @@ export function Welcome({ lineHeight: "2rem", }} > - Frictionless onBoarding + Create or connect an account
    under a minute

    Hexa Lite ensures a secure and reliable user experience, diff --git a/src/styles/global.scss b/src/styles/global.scss index 5775e98c..c6e0d525 100755 --- a/src/styles/global.scss +++ b/src/styles/global.scss @@ -303,17 +303,64 @@ ion-card { } .welcomeSection { + + .logoTextContainer { + text-align: left; + display: flex; + align-items: center; + flex-direction: row; + + .homeLogo { + min-width: 116px; + min-height: 116px; + margin-right: 1rem; + } + } + + > ion-row > ion-col { + ion-button { + margin-top: 2rem ; + } + } + + @media screen and (max-width: 991px) { + + > ion-row > ion-col { + ion-button { + display: table; + margin: 2rem auto; + } + } + + .logoTextContainer { + flex-direction: column; + text-align: center; + + .homeLogo { + margin-top: 5rem; + margin-bottom: 1rem; + margin-right: 0rem; + } + } + + ion-image.homeLogo { + margin: auto + } + } + h1.homeTitle { display: block; font-weight: bold; - margin-top: 2rem; + margin-top: 0rem; letter-spacing: -0.1rem; font-size: 4.8rem; line-height: 4.2rem; + text-align: left; - @media screen and (max-width: 428px) { + @media screen and (max-width: 991px) { font-size: 3.8rem; line-height: 3.4rem; + text-align: center; } } @@ -336,11 +383,11 @@ ion-card { line-height: 1.4rem; &.slogan { - font-size: 2rem; + font-size: 1.4rem; margin: 0rem; line-height: 1.8rem; - @media screen and (max-width: 428px) { + @media screen and (max-width: 991px) { font-size: 1.6rem; line-height: 1.6rem; } @@ -349,7 +396,7 @@ ion-card { } .rowSection { - min-height: 100vh; + min-height: 90vh; } .withPadding { From d9de4f8f9a0c91ab26630112e5465ea07fe58697 Mon Sep 17 00:00:00 2001 From: FazioNico Date: Wed, 20 Mar 2024 12:51:46 +0100 Subject: [PATCH 38/74] feat: add About and Platform page --- public/assets/images/responsive_undraw.svg | 146 ++++++++ public/assets/images/undraw_code_typing.svg | 9 + public/assets/images/undraw_devices.svg | 1 + public/assets/images/undraw_in_sync.svg | 1 + .../assets/images/undraw_pair_programming.svg | 1 + .../assets/images/undraw_real_time_sync.svg | 1 + src/components/AppShell.tsx | 21 +- src/components/Header.tsx | 50 +-- src/components/Welcome.tsx | 60 +-- src/components/base/WalletBaseContainer.tsx | 25 +- src/components/ui/InstallPWASteps.tsx | 51 +++ src/containers/BuyWithFiat.tsx | 4 +- src/containers/desktop/AboutContainer.tsx | 348 +++++++++++++----- .../desktop/AvailablePlatformsContainer.tsx | 86 +++++ src/servcies/github.service.ts | 28 ++ src/styles/global.scss | 13 +- 16 files changed, 676 insertions(+), 169 deletions(-) create mode 100644 public/assets/images/responsive_undraw.svg create mode 100644 public/assets/images/undraw_code_typing.svg create mode 100644 public/assets/images/undraw_devices.svg create mode 100644 public/assets/images/undraw_in_sync.svg create mode 100644 public/assets/images/undraw_pair_programming.svg create mode 100644 public/assets/images/undraw_real_time_sync.svg create mode 100644 src/components/ui/InstallPWASteps.tsx create mode 100644 src/containers/desktop/AvailablePlatformsContainer.tsx create mode 100644 src/servcies/github.service.ts diff --git a/public/assets/images/responsive_undraw.svg b/public/assets/images/responsive_undraw.svg new file mode 100644 index 00000000..c3d23bc9 --- /dev/null +++ b/public/assets/images/responsive_undraw.svg @@ -0,0 +1,146 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/public/assets/images/undraw_code_typing.svg b/public/assets/images/undraw_code_typing.svg new file mode 100644 index 00000000..9251ae22 --- /dev/null +++ b/public/assets/images/undraw_code_typing.svg @@ -0,0 +1,9 @@ + + + + + + \ No newline at end of file diff --git a/public/assets/images/undraw_devices.svg b/public/assets/images/undraw_devices.svg new file mode 100644 index 00000000..2ea33052 --- /dev/null +++ b/public/assets/images/undraw_devices.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/public/assets/images/undraw_in_sync.svg b/public/assets/images/undraw_in_sync.svg new file mode 100644 index 00000000..58fb77c8 --- /dev/null +++ b/public/assets/images/undraw_in_sync.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/public/assets/images/undraw_pair_programming.svg b/public/assets/images/undraw_pair_programming.svg new file mode 100644 index 00000000..578eab4e --- /dev/null +++ b/public/assets/images/undraw_pair_programming.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/public/assets/images/undraw_real_time_sync.svg b/public/assets/images/undraw_real_time_sync.svg new file mode 100644 index 00000000..6594d7ae --- /dev/null +++ b/public/assets/images/undraw_real_time_sync.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/components/AppShell.tsx b/src/components/AppShell.tsx index 56d90311..cd6afcbb 100755 --- a/src/components/AppShell.tsx +++ b/src/components/AppShell.tsx @@ -34,20 +34,15 @@ import { Redirect, Route, useHistory } from "react-router-dom"; import { useEffect, useRef, useState, lazy, Suspense } from "react"; import { Welcome } from "./Welcome"; import { Header } from "./Header"; -import MenuSlide from "./MenuSlide"; -import { LoaderProvider } from "@/context/LoaderContext"; import { Leaderboard } from "@/containers/desktop/LeaderboardContainer"; import { NotFoundPage } from "@/containers/NotFoundPage"; import PwaInstall from "./PwaInstall"; import { initializeWeb3 } from "@/store/effects/web3.effects"; -import { getMagic } from "@/servcies/magic"; import Store from "@/store"; import { getWeb3State } from "@/store/selectors"; import { IonRoute } from "@ionic/react"; import { isPlatform } from "@ionic/core"; -import { AboutContainer } from "@/containers/desktop/AboutContainer"; import { close } from "ionicons/icons"; -import { BuyWithFiat } from "@/containers/BuyWithFiat"; setupIonicReact({ mode: "ios" }); @@ -68,6 +63,9 @@ const WalletDesktopContainer = lazy(() => import("@/containers/desktop/WalletDes const SwapContainer = lazy(() => import("@/containers/desktop/SwapContainer")); const DefiContainer = lazy(() => import("@/containers/desktop/DefiContainer")); const EarnContainer = lazy(() => import("@/containers/desktop/EarnContainer")); +const AvailablePlatformsContainer = lazy(() => import("@/containers/desktop/AvailablePlatformsContainer")); +const AboutContainer = lazy(() => import("@/containers/desktop/AboutContainer")); +const BuyWithFiatContainer = lazy(() => import("@/containers/BuyWithFiat")); const WalletMobileContainer = lazy( () => import("@/containers/mobile/WalletMobileContainer") ); @@ -95,6 +93,7 @@ const DefaultLoadingPage = () => { const isMobilePWADevice = localStorage.getItem('hexa-lite_is-pwa') || Boolean(isPlatform("pwa")) || + Boolean(isPlatform("electron")) || Boolean(isPlatform("mobile")) && !Boolean(isPlatform("mobileweb")); const AppShell = () => { @@ -125,7 +124,6 @@ const AppShell = () => { return; } setSegment(e.detail.value); - // router.push(`/${e.detail.value}`); }; const contentRef = useRef(null); const scrollToTop = () => { @@ -177,7 +175,12 @@ const AppShell = () => { )} /> } /> - } /> + }> + + } /> + }> + + } /> ( @@ -343,7 +346,9 @@ const AppShell = () => { isOpen={isBuyWithFiatModalOpen} onDidDismiss={() => setIsBuyWithFiatModalOpen(false)} > - setIsBuyWithFiatModalOpen(false)} /> + }> + setIsBuyWithFiatModalOpen(false)} /> + ); diff --git a/src/components/Header.tsx b/src/components/Header.tsx index a1edace3..b54fed2c 100644 --- a/src/components/Header.tsx +++ b/src/components/Header.tsx @@ -32,6 +32,7 @@ import { useRef } from "react"; import { getWeb3State } from "@/store/selectors"; import Store from "@/store"; import { Link } from "react-router-dom"; +import { InstallPWASteps } from "./ui/InstallPWASteps"; const styleLogo = { // margin: '15px auto 20px', @@ -89,18 +90,20 @@ export function Header({ ) : ( <> - { + router.push('/index', 'back'); + }} > - +

    }}%PhsVL!|BdH17Y8 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�UuJVaP25$1Y3VPZ|kF=>sJkJ@!MfJxWPUq*KIb( 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%0Ab;A6 zOL9DLSJY8zlp6xPv^?WQ49lt9JYjepw-o(1@ni?*8OGg&IwvU_IsTb%dEc`tT2V#A z==8@L!ybh8{+|{gfwuU(% z?GaNX@0fhb8fL*3#rT3Jtey2hwl(W7+TA=uZgsjq)(@H)65&4 zs5Km4)Cn)~M~CZ6l;$p_n?bvht_@fdWv?V|J#=7n-K03+XrEM!bG~_Lhsup&{#vKp zr5V&FBzNR9a92Ld{=wNbcsniDJ}DEsLA)U3n-qu0E0fYxFoa{M;FF~>mXyb8%T#y- zU?36JkNuz4_jccX)G-{q#t)XmSgq(RYHizz8|5Q!C#G!jAk&D%WaG5F zHwavx1$WbT%j>9EjVpxz)};E)c;9s8I{$U@Hc_k+Dh?)rVq^^tGIDu&V)RC@>uI=% z>|CUN5`?HYxbc+nk+T()3r@JB3!ZKAiU)YU9&9kElC^6tslp>qZ_CG~^eKDYqKuEC z6UlxhNi#;|wxzN|3`by>Usl1Aad?zT)jK)t{yP;&@YC=Il??Zy2lAZgg2DUgPBXS9 zXmvIx#-p<8YZ+iOB8@ZIDjOCkx#tcC947{ukDX(;I@23g?t z9ldBnA$IWk^ib|8Q$F`ycfy2V2@{EWBQgAsGWU#}uF?=~@`D_-=|gtM*X!(6bykbh zY>DnO+kMiA1jrmhVPZ~9Cx7~A!KI~5Wpuc_F~zc>>?}6}@n-1n*TyyonniUJM4mmE z!`LGIH!9@7nk=iUz#`zwaq}Z}O|@HlhJdE4B%NQ>20hK!mE@nd5k(Rzame21DT0ek zzCeB}H(m}way*R{p(ulSX?&+O)P81)M76E2Nhn-V%0hBX|2BErFb;=nK4t*$jd>sK8Sl|Pcj*7kF_keN^L{nxXerg(EK5BtgglYb3*wGZeW6t#$;U|OS;lft zUj1V^SVH`G6?|NJ4jW5exlxa@e)X4z=3aNQ??Kq`91*w=3%MYucow{e(tMP)?6ik( zPyD)HBi8&b{}&dhq)VO61^dGiXZjiyZ z%$8I>Awqer)dgHc9|D)VwmNy&H?=dROP*Y{ zbZR9vQ$DXKwK7L!J~y{C{eD(F|DBQ~P^=&6nm4_}zv;#L0rd$F3}K*$6QzU+0Jcc1 z<$f^SX7W?7&u^T3q$gl=i6}$C<*Wa;5eYK);TAKJKJxeS0v&l6U zUL37Vq^+{M+(d=y2&HCx%YTY6HChihtvomX8jZrbOPnH9tZXMdcXAkrH{Cr^KQ0$^ z?4Fr2(`NZbH{gu^>g?zFvVX*Y{e$s|5K0CMjHaA%!5g`!fRTj7kAO{7mKb9?Y1_3< zg~udTvbY@$|6k(J*WDD$$Zwc=V^i#HqBe1Xw0+$#E>FAWMAD=ii4Ro9gRvgW#BlB# z>)*z$#W8B*$Ag1$+;Uc8LE0o!E_u`WOfe3qi|1@S9w*5&?*i^hY+{_a&HZE7X(UIQ z3(4S=zMXy7fqW==HTh()VP8bHVI07+bPHsr{V553*DZzF3m*Lf0PHC-ZJX*ljHgnKM=wwfQR11xEbF-6l$ zC|X1&?ZMI7)17mW}|=epQg=xDybr??W{8SK=!j84b_dVAj6qlwXag8~^X zZ-!Z4&Sxr#emOAq2Cr*&W4;n*l`WUtg78KUmQG6QON7N=ylfcz*PQSOb9F{B8j2syyehCaHl#CF&pYZS*Gin^sgV1swWI`sbxywCOD z(G@@0T696i$!KiHgL={|rb9Fe5O{dtzA=`6kIJ^#>OUDipK6-hvU(L-=P3$mf;FYW z#2MSZeZjzSi2_OGM<m8_rZ8~ zegUr*e!US+QGZNo?odq}-}UcU^3qbNu?n|9AB)kN5}Z+7V>zqdHvM~sRyEfZZV6SW za>e4w~$Q&jwlq^GWK5CKKh{?SFF-;0;~f_p5Rg(Wd-HIi7-)f zbB}1MA8#uk|kp)j(wpyll=Y|y?(2io+`l@IjMiMx(5AG zTfaCAHw1T(+aA&rk3O@sxOqt+stYx}zcCJdEe1Hpxz?0D!P5dn5{k zF0#7jkNs&rCqeNyKW3hbBP$Xv$Pq`!?sSYezO*BCWghV9Y<`i7QT-;m!lx>dcc|3r zegAhat6JRznAUpUuGl?-%nMJfUbalF4o=CQw>@J$&eH38@5cmxrZ8|c+_dK}j06%l z4wajGhUwU$DcM!kO=}!ZY-?R>6t(VKvdcUw=;bM=c(DqDalT)CE(%TP+dyLkVU!_4 zwwa=c;7`j$KsOhUn=87hU<+}+fkQoNso#J*F{y~s-9>%&^0d8Wsr$;0GxYJKsyy2^ z&LqNQ*Lz4umeq_`gpi%|{1Nwt>?))YL%)W<#>SC#KT=9{o68ba z1=t}6wgVN`5Q0a=yZJffiWS5CnuLBrUg_y}iLFhHm*+Gaj4_7e(5O~I*sw7}jE?TT z{1CCSXC8h2MUxHwV+?PyBBQsL`Ch7v9FSKrfWVh+3vxvSYyCvR*l*7xhy>xAF<{QL z?!=l0FMlo&Z9!LQ)|MI@S^DlZNEVj0_N0povqSeb%Tm_!7FDz}MxAf@mG3r=(~wkL zEr9QGcc@_>@PuRm%1pl)c(z_|X?XK4`=9zgA+ppM4h}||EKlrtScaBhgIHLStPK}y zj;v{E%z*#r=9khy#$@I`u-vn~71=)J-Y?68aCv?N?&5l4&&qe7t#dkJ3AtJRLJqld z{pVjBRUv$&w(VFzPlsb5^ST}>3KdbD;k}r3)%)3}Z3hlhdSjvF+|VccO;ANfm!v+A zOEOw!Q3%D8!S{pAe#hgx2x)~A8EbD&PvzwN{0O|08c#K}C5a6*jv?C7LuPP}=nrH) zWjiTbQ{wkNo*au_gl?n5qyGsTf7qCo*S>!+;)>|_#TaRa9@utkaTL4}qnS5^g~yX9 zhLT6FtkHyeZnU(x^BXN$j>h<5>-a!48y_7JOT_hSLqA>n?hGfam$)v`SF)v_ht_38&~8 zsJS@B`U@YIwES1Rtak|*Ard@r@O($p(o-V89{L;916wZ8gvyyOjG8wnv-|KrgGKd_ z1DXCvY#a0cvKG#rmut3S8-XujNPKrYo8gbA2iva@>A*Fyn#sca@5CXMhP2X~Rm1_q;!jOd=Q{2du9&|2V-Qvz@v zGWhGkFE>PY!rB6rp>stleV-V<4Wl|mNjAIf$ci7aIhr*`IG|946LtJgaw_jw-k|rd z@K~=xUxTOLj`sCV^F(8eY>PEQT}%6iUcEM3nsi6b$u#?R!nus#hDy+jNyDljzEw;EQ-w1bSwj_H0(V-Sq2N5oL z2jg(ccDLxlN6C{$j-gC)pA59pr8tP45K7IYj`c<0VeP1|Ws;KsPWQ7TrR;V_z4(s$XEOM4_l+GR&P5HBv~ z{*skKDjq9V6w|Bs@_VRmc3R{lUq5RHGAMI`1CYmDW2DyTQ_JHyE~H~Ncp3CwLmNJr z?{(sJUIc(Ydw(V3ED9b<=AeBh=9;`n6T0;aoLc(#OZO(NRPN|xwl0l z(s2l+_?2%ptcdu)a++zWIV(jp7}-*anl56TTcMB{hJLG~9Hr4io~FUPHKqj`vDf7qgQ*IlBy)zs>GLRWZboL!|#@urZpE+8= z3N=^nBQ0RVTkB_R%1!UiU(d5H_ZWA%%BMW`U_`UUj_G(!Kpal=lk-iXg{hUqimx2y z9iA8+!*{?=Dj|26OH2CYs4y@V@Q|wZg&D4~Zou#j}&o{cq1R;YW+2X(=wo7VGHXSo7GSn4eD` zz@%)(+Zl|r2vP6VkC!YZhRcz;Aw@RkUMKx8XhiLukZ~cq}sJb8cz8ykVUNug4zQ?23C2mPr^FyfJKl^Aijwv+$H~k02R! z<_&=rbX{%K>}XRcj4|R7CZ^l6b{c`9$%4C^opfV04>#xT?7iGPqey%C##~}c-S2uu zxF`6Oi=$I_{Tn2fOBz%evYJdDbn8c@e#DD0!CHDXBgea^JtU%%3+U9TWIHZ$H+n#( zx&+;|^S?&v;w0sNS6x_q-D~T^EjjO&EFMeff^Q@$Dw3 z4?9z|^tClLF(_qX;oT8)I+j0BO(Ke=M?S<3Ar3dk>TSL@1nx?w3RGyav}HdOfGbXv zg`@VRVmg&EdckTI|2;c*B8ef&mJM{!2Qf zyUkr$(k8)A1XNCahoar?l@);H1nZwXg&7!<6Yy8T25%4y$3)rczJktNk?Om}wv{QE z^?XE@SZ%PM(^(*bBVm~MY=r|H0w;h+&F?XALF_|jLZ(4^?Zxh8V7MPhjsYRW^T$z0 zIFYlR!vBABPsewg{y^ddQr$k^T;nS3rTC-41cTP8vXs6XvDb1j{j)PJ)LI{+3>Ga? z%b5h3>*>9TBq~hWIJu{m1Tk3R~$rM?^KTU?%&k&vFJrW$vcSxjmL#1$F!x9xl#ZA1nSH{cKZHZ$Lk!NfE zfFXs#z8YbEcPt*OJ!Yn-)D&C;%>`r8e9Z-4om}cHi${L(2{A|N1s>~sBO7g#5kz-* zqcz!%sdyzZLk#Dk_4>Z-a+qP8qR-mSV{N3=$tP)}+Crq}Yhs!ra$p_;1?TPP^D4j! z7~fFb?i%~Da0Y~3v0R~Q~Ybs+B$>twneov@_L{{dDYqT)$W4ruskyymcG%Y!$|9p?=hdG=bE?r$>N9{1d~~A zQ~p#Ah#fMO8AYf%mHi>iO8o05#LGRc!)p1#^wYJKsp-mo#?{J%TXzryXOt-JK^%eL zC>;ZbnLn>o6^%tam_=Bx+BQVLn$6oi8btC6GcpqN-P|eEA~Dt3@Pzk$dZb@0)W+R2 z=xw52CL&cB#{-f(&0yOl7?;y!#d=naTaWQaMS9NZpEqa|PT<~F;Cqa7qr(j;#$fC} z1P@CNJI|Yk(Y4nQXMSH&5V98t__wtDXF5rKkDFb)VnW|O#26VzcC6xj_EUfxhRm8* zsJY%NV%b4>#x{#~&m_W+U#AS|@q7X)>0vWO_!w<2a#|sE%wPu7ch5eT>CLgC_fdfb)u)8`wu>Z$5{n1j`SpzOZ zFxoKL+ef|CA^!hK(WZmZrkPoVAb=}{Nn=qS5OVa}-DL&|8>=}2`SDrY*3p(Yqr#Im z$$VCaEmz;DY4MJ87VjKDRK`mG{&#gZ@y(!mTkcf7D4A{bhD&S!b8^Z8NXmlS$h8N# zVj6hHxqY5+@&oVo1k+I0tqO+V;|N9_dsDML8f zZK9Huh7H}%_or5OXBPw|3hR6fdm-Qd@XOJ*vp$5}SQX1gl7su;6H&&XvTbCkB|8)0Cl7ZAl)O=;;&i){Y3y!k2DR%zg}q>pZffulp7iu+ zO|kaiktNUF`X{#G=634@QKPP6&AY{Dm-X6qGfBiBtufL%LIctfX(+ESp}E9xt~@$q z-kK%ij+&}p7L>X{_uigW2GZKvHb+8)@~h`Ea|qE`<^ra(wB{%%aR%V@tPMuxeiW_P zzZA6;2Hk4(xS1d7_6h{@ocDdnBH}NTHH4DmIEQ&kq-Fe`GvmY5d0-=38+xc=>W-~~ z2_+K#iYT@tXv_>1Bg{!AKsa3>P41UN3)V2@v;y74d6(?SsYE8eU_hftNfl+knY`w zNX2j#8)Y=cI)2&-?PS|!dq*6r88a+>=>cPXOMe?dm9%zqZYl>%01Xw0zA2qiCL}+B zE2>(r-Rb7Wm2qV<#ZhS8j#b5+5q4O-E2SS-~?23G)4-M@>#ri}ZKT0g5vU-oNt z-*zha1%W05?7?OR*7xfhT$mvC?bDx@R611iF00k%W~$IGEwm`-rMbB=Xwd(S<*6ZH zNNR4e{}(RIc@i>NmV(B_05+s;+%V37qeekAC`LXKghzexhO^&}55*i2dJ-J$$m44E zLE!9nDiR^9{>7zACcm-nXGwVw)xa2CUrJV1roj7~Z~57oA4^_e#)km)5S&c3Otp9i zQ#q#fXBiurBR@bBNu(fil~O+T{~Ntu9_Ti+_6xa%+geTkplD$Al8V~_!Nv!)A*K+# zZyu9EL_+QbhyZs@#r59_8Odw#`D1}Kr&4>-mns;0=r^jNISgx(96O#!(s{EKD`o6)1WRow`at%21Bl@8sVslP!Xo1ThYb>!9Rq=d{Xs?t2Pt z@Lhshj9oVreY^mL$K&to*0``kz1YqL!s~YqFa`G&A^Hp!iRct2C`F4oa(uj>EjQDo^-ZBxrrT~j zZ)66BDZYv4dyb1qh8s&u+mY~B)|>ESTk;}8q%lUqEJO&KT^U#^%=oUQR9VC#q#u8} z%~3!%V4vl1t?5hP9TKC`2O`*f1bL$=cafvCsv<-ZTxu)<`AgSn_Uf?Kp!H10T$ZL_ zSg`RY6Jl#V{G>mLbN4A2g^Ha5#t4OnpfV?yjL;E=;QgrfiqaUlmp?6I=(jt85BmNd z|GcM%Dp(T12!zRoVN2K&!Bfm?%uy8e6;_kOtNx!B01PMp9J4w;RUSkhNk3szbERea zc1de=5$rYnC>(hTl-3ASB;=er3 z)5pA5qDoTSV!3>EcV8whG9&}SOc^puTi_t!>bRP^`JCCl4U_u9L;_Bs(zo+e3Yn6p zWUiXS=+#DlG}VuO^ZtQeGu;XQ&Adv@*=~sNtabWmIAPcE#5 zW(FBRHJ>d?dTQG~#{ITZYNf?!zlw9IpvHPH7s!~%FG|5hfG_-Mdg4t*e^ ze}u-Pc@HjW5;a4ZF;7=evtT%Z5wpB8L&Cs1bJ6Nv8nuz#cCoE@_SP-9cqv$w>%Jdl z;te~0<8---*vY3jPS%#Wu#oH12%sMWI+mI(uC1>nM3Va^kf+P%N33x1_obKRdjUc+ z-p1D`=B2|MunwHn72x61mdMTu0_P=F%+A^c*Pf ziSR+*s&b>=7Q3qR!QqP}(bsCQ6g3R@PX43^0MB~e3mzGxLnb8ClnONgi@VoNQ181+ z;d2+GMGmy_9EpDdz$wz%ObGM&Gw_Bdp9&DlFHfqrQn!nInx;bOG@-+U0PgEu`qW~wvrPc((V?dl~QZe#Bzm5!`D6jeKGsjNSlnv~r6Sba50E->b#FU#0?y7QrExG*!a zcz&cD>o;!31U_aNR>T1a-%(o7iP`H_jZx!$yOTW1=cb}mx6%1_!@%oZ3Egv68 z4)Ggh1`N{Ck6+_3t$$N{#aO-(+E1{-VGc<+$E{&@eakb)nmKURqGoA!o+yHSi3`($u{FSQAEh)7#dGbehNjV38WZZQvv z#y^t?Kl365vZn>|o%+N{-3)W5y)w|59Miu~n$sr$s9cQuyN@V>R}v(BqHpTNAL}8G zsR*;mLNZoEl#xBQ9f-rcGCV4ro#|eOgRSWQjzV}}$)lIgs=mwcWd?x%g^A_;p?FI~ zYh~iEgQ!48)nGiY_^lE6wvq>w_koeh3{f+^V~_iQ{3?BvL>nV?l<~a42BcdziV#sV z+I9rwt&Y#Kefaf-t*d=$w;*YbycHYC9*YS6BAoxAeDzjkFJ&zJe#WDGRcQS@$U~U+ zXAsUR#~tS^n=}nn805wRmU`4qkEZRfK_)DHhlCS!o+wJ+SbQ;DgjZGnADR^~l|YZW zRnFLN_rAZI5a#|LurF4ROk)TPce51httBBwD0jUhY-wWLVRZhAKDRsMhcXUA5P;`y}Db=%07Vjw`2zCORWFXjDd2efX4wCZQTDq`Z1A6S#~G3<%UGk$;B z@{4tF>?WFf2g=1^{3PkGJ6Y9J>VEo!RFpS+6hN6QSPCcynr74>2;ZCsK~SrF5xEXf zUK+YCMc%L*-OU01KoeEO5VF+m%>pnimjaX80>Q*{Mh4nlZGu9D328OqfuNZ$0muNu zK@kY<*04!i=E}dcYKHTYef&QEKG+ZsqW1LU+*mb}kxC7AqfH7cot}GzK85$@`%$52 ze%CD?%%=~vx|=Fr_OC&)2ll9eVjk@H#tZ>AEJes2Hl$`DKp9Cq&nxY|@#c~9scec$z~Wy zkOEsKfS1R}h9Dc|9`928$t$Y~?}c8av8dA0V{F}dZ{Exq%zWcX^z}bSNfOi=dOb-!NEHZ&+6fyTKuu-yaC3)2{_R?y53+ABJa3Zh3 zGJWGBM5Kb~WfP;^l${V__;Ysh$#p+9T{Z;V%h_MDt3QXq=XO!d>Nv}Zk(3r;ZI$7^ zd{_U=Z0zSP)oD0OoL}-j?gYu@!>S(Wh(yE=5iaQRz3$h2po_lcc|uKvm+vMk^u0<(gNTt1?toxuQa@}J3!!~M_rtADLyoK!8PZ9hqJ zpzfCo^_u4s&U45&8*%iz@p==pdO39+njuK&as~0-tx=*-%~Tz2=m>0t#u4-zEY<0H zG>s_{O{7Oi>aT3ovR3Q=sAw_dwEW6&)aqQbjbk9DXgS?-E_1d?j4!dex5C39F;9iX z@*eT`>itJ#!U+%28#ck!RivkjMA1P^Me~iXcrVvI6gJQ z0{_-p%>HiTi~GCtLBXYV$m2jc)r7<+sk}v zqA|S4aPtlN7uWJwQ(6vxEo=2B-E#FVces+J_2T-C2oZFClafP)yNL(Upx?5`auM^D zMfq`5OQyYjZ^XZ6WN%U4DYB!@TBqwYdO-nHQsEB`+9T3V|1Rak{-#vT_x!#bY~m3g zZ?`Z3w%|o2!`Gjd>yzII{A#taTXdv@5fw?Jef~}s3iOa{d$PG8A>E{K{s#vDTCo91 zA)9d`EUwn~zr;`0Tar9*5<5nyWJ!e}sLjzYu^YN$MGvITH>OhcR^^hksG}14fjKv+ z>N~RJfL>rM88!^HdIiJ!h%%FODA3Demks!}6Ti`qM7}*{1cs-u6;IPBW4oF!ql6)@ z!|_yr#~T4MB9Y%CZ%_}oM~Oz#ZNIG~D;AP`l0VkwavodoRobZwRWt(>uwCl_kXXp8 z-`~R&mPZ0>225?Y^5&9uW$c&`@c&}SD2zy;^I@?lO2Ba^+)yIQknPL~L0vtMeZ*=< zx++av7PE=T&!!h~-<fdzn`xBzt$berf;eTanM2&KGn49RYGW!m<*nSp<^0oZqEw zZu;uO97$_ROX=h(yIIxs8`q-eg+??dHf8StgE@IXuLwGu_W5NQ*bpy*gOx?-mr3$i z>Bhm57x|I3^4g10u2E%dA_%^Vz>KdfsP?Qjh$uo*>9T+**p+;P1H1c!ZTu;LCPMf^ zZBfmS|C*TiBhuN-k=uhDs>?P=s$*~joJkv^{-CzX0ip{17KxHte1ky?mD2%DC1pHtaZ53N&YXV<1!?vO!(i+`&I8& zYAAwYEe%fWPyO#)i_0^1ytVly%dsSUxc&p|)UxwL{xKw$G#ZxgLzXq-H`Z>rFN1&u z5%`(v;1OwK?Yz$vp>+FTd$#U>=J7kQ^WawWmyy?N1Bc^AOg3jr!!cpZe46S~o+7g z1+v)~1vC79!zx9sa61$@!-%5e?;R_6m&w?6dFiMT?`g%2Th}7f=MtQxIo%t;;=m)Q z(8!I*JoZ7DVh^!NCe9nr(BS*nMEtsL^3fNP0+G!khvoYGUtQ1ZDK7OPU}HrUNP&ur zx--4NR|Nv<>`Xu2@HY!TKZ%5blXT}7NT94)hSO4S>+L0*-q@1X>GgdKzq={&pV6!o zXl+gnW2C>SVPhK^bR-#%&cQy}M|xs3k+-swt1?S}gsV+0?67}1z48x2 z&ReOr*#FucVD>N>b9^TI+%D6aTNdj2Z@0g)s9gwg-M2k8UcgnN=a0m!dL`EX$J18@ zwbi!m;sg&A*HCD2cZX2i-5pxoy*L4id-3A#?%EbD?(XjH@aO$z_MRMNCI>5%wVvGf zr3ubKQQF}P?88lziu59}RrHG$qf7#;?Ha%)&cpGKnb5gq1nR&Ku@r#_5y=%EV{5V6D67a za|^k}(kFZYPDB;0CMa%SDjV;@u3khEuCK(*i}^DmB`jF>^doF;X8EF&w8&7iIHhDh z6aoUN+jK^t?xHPu?Pr;ZE`&BM9wpRZ>_=eP{e^?72fn+nb$C5^W{4nnqzw* z@*8b024A7;!K$N4J(CVzSQlaH<`Ze0>?ak~1j%`3jgkslwRZLN3_WE%z1ZFIvdNhe zyq=H^3K7StR`qq9ztgeHDAcNxyG873i;;BANZdLF(mI(k`7Xt%>Ke&Z;`H12275$dC*ctVI$lDetDx>}euno<vW5a8LVL8`|sheKX>9FU2Z6nN&cWk;=xj z0ZVC>f$Ad3B0JQFPj*$%Kf%`&B(Uc@qV3=1)WDW$(XIDPC;k0rAhy!d%g;+P>+X6F zQXco?%NdU}T?f{-GhgO}Pk3XL!_gfru;j@ z`LKi|%ymjJVYt&9gA{RlHRza19D`7Oh6|aMVDk=fjH|Gr0 zRkp;1tn?#-D&DSae7=teNtY=n)+K%RD8V6W^3@Qe z&J*&MvQAU}4^!Bfz*f)_UQPFo@UW}4_vtvdfck^C^!MXVtJI7AeY}gvB}!SE#1EvW zYinO0J};QGGu1A}y&Wtyevp;rK<&a7%oT2SU8MJUdi3zze?5FKKjQJii%{6ER7>hs;X6t zW#-*nc)jsF^n&nfXy$wyKg(SnYHBcE5mGWex*;n2^(e8cU;WL4)c23!aBd1UmKkyf zPANjyFE(U<-z^QqU#%E8GeVEe$T#*LYmuIq$X%6eIw%Rsivg@W(hwlFT2|85RIVa7v81w`EHM-! zhMz`ayq(%#_c9#d0&0|ZspSQR)NdrKIz&_t8}yW~$NW>0$AiFLV?E$e&$)t#@>j=+ zZrLOTt|=VKvwV^&0nJ)b8V(l?Sa`@u(&*bNDk~5FlF%`p-TrMYAflU$Quu%@2edK zRR5-3m$z673pokEa*$#V;W4To7BhTb~%lc;3+F{8mWzA(z3zQa3r66YNIYE}j&mY>#OP)2;b(rApfG0(>>2EeD5 zNpbI*s@Z+_7kv2EKuGHsoUA)xiciNF&TdRIozOPQm1eI&_HEi(1qB!UZj$)^Rw`BL zPdE?zC-{t|X0xTOSi;Txu?$%CT)y75yBh{KgHO1_Nt=$+djp24@p<+f zkHQ#gbHtD_iO1VQ+WxVC+zk?4m+;x51M3BZRqM#8QGStat><}#g_GPp zKHL1!BMrau9j|xLYOjAa+a%5T;{J>xjfS?3@|Z{oQPi!6%%C;EMuQ`#LT!e{q=mEm zJ6;UY0RqlJ(c^e}Ia&B|F1QlCxucVp3{9f8fp>bM^w1g)!|G;go(;Z)7j{miDN=n) z4t`(%zY%!6TR*5+%?INGf|P%yjP;`W!TIeR#|OkgiFC_?6pF9vFn!u$3!z7`uqGr? zjYVOKS^T$;kJtO>zXRfWa}Xd1Pul;T_xRaK9C5in*0Dc<3J{Oru>^BwaHvaffA6q? z3a%Bhg$-6?^bzFBSO{jy%=#%M=Nq23&pqN0EfYYgezO)do8JU52x3ot0yCG`@K<_E zf7|+9T&D1zCoJQkN1|4j(&R#d2uW-wJ`lw45mPlSY2S7~J%tK-#ED9Hm8!OPzV*|z z-2Duzwf$?2_~MglWS|v$xji<3xon&3+}@hS)8;c1_L^0Uz|s9;jW3z)Uyf2qNZQo; zZ&ZP4!7^W%_Y@Lb``V;eq5zNJm`CnvrAsrRs+-W;Co$qQVi3EXJao?BIrEG4*J-IP zaV$6K1e%$m0GuAy`WHID^)ewX3yTK*aPwM5jNZ97I>$FAW#Htx)gO!8r&Y_}YpJg1 zh5ch!23WU9Pfk7Jxs zt&W+Uzd|z%E)V{UB%3zof9y>d5{VK%G`8h1Rhy-- zJ|+gc&&A-<2I%PO2Bkp{&Z7*9{vCh+A5lTq>`7{H;z+l@jVM~cr#rT>r_w{xk)mt* zRAhXvMhJ*>9kj0nh$d_SaRiB+MY!+)FH8&31Ba6M$laW4dRQdLVFRXDA&s$=?$z1& z#bVPAv(3!IobltgtfV{`?wx{de@wDkfr%9tNN}s|b?1at$~I(p5E9i8%HD)ZJMd+U z4w0Z>YU0&i3?@Se##H}@=v^ww5{Vqf9!VRcJ^vftxcO~y9@jh6pZ`GO{< z>WtKw(EvjlBj`zD0SW{M;HXg2eNIajTeL zaj|EY$;Pmgn8Try1Vip;UB&1tr`rjGq@BU@s!&;1YrJ#kkQp40kswH&YkK8JUG8(f zbA~uNXWju;-a64lF-b-1H|)N|42N<`h=jH(#*XI?H@n~Nh+{^?#uRPxZKQm&)p(#N z%P>@=kbctcvCf)Ac2`SKf#r?UkU9>7$P2>y`gI(VFcwMs{WPNq z@HtzY`ultdgwrXzLkHSkk1rKst#0c5?(}`WZ+Dh`I55%URJ0SE&QbW39_?UHHh?!c zsqxTqLAnuZ0e5R%^J{v4;@iZ2(>$63Oh{FVL{KO=r4as<}uP2PFh`(8E^L$}0g zhsWep1#GT?IG5^%oCkU^?-X<)@cgu zvB7vMHp>an?y|oE-#vj_NYvoi&B*?!n2Q)@BNRU$-uQw{Q=P?}r za#}R`4DQpv&?LauJZKXBpE`??TJs?s=pro;jo?Ms@`LRqkSuDq!);z@Y?094{W?|3H~Yrj!UGM82$ z@QW(sqf3_EAoy+@xlY!J<$ZgE9U%QUHo^)CmNZ+=YDd(r~QnBP_&S0a{c8(Z+TcwKS{Bl$kt5;2Il-S4Ktg|eb z`J*F#!IuR&&!_Y1^0-piDO34USaS#Yj_Z4`bDA8l zajX@*us3TS*YhQr`ADnSH+wt3>|(8r1E3#KQSL*%xmNwK04`#_aadgE~u${2mKYrxV}5;`~1?0F!u> ztiZL<2k4*IFyEp`b%xq4I2p#IsiPZpzHCN>+|j9P@u2J5Iv27mayk!nL!;Hj233Kt z#Eri{>^Ki7bktfZpwe3`=g@O+s0!0F&t`lnXv)s8lG?zwbTT0hP1{)E+>L^pSM_0DA9u}3~7*N2H%@%MktA4+p@Ar#TU=#~7OHL#T^D%39G ze2C-99ig&X927926?FJCe`g}%1s#vjBjh-G{Gcg_U!{px2(wjdNB>$;x_1I`aw$*NGWb>z|mXk7(c@paaxPC;v1)EO#(o+a7OuQh$vkVT0GG z#7CWNLjYg>1`_>XO*pT-SGQ;r^@64`pE4@X5gFWd0uIaE{`GwkB_ju>1|oo?+Pd(d zjTlgrs;*TwzRVf#>tw2h#Am7RuF3c4=3xRaq5Z)ps*_dnW4_C_b?q_P~e(keVX1OWBZ6$cp5VVJz$K zvc=E3>jZuhLJse3u;T-i5>mf;-%g+pbD(qx79)P^STdioh;S0Uah+fne;`xM557JIR-v7FyqQ`(CX+D zTJ{_APX#};aCOP@bNFqZb3xW~mp3sB6GeRbBib6{ALPgIW+rR3Y`h5zwc1ri9gXri zSr7Zk{`*2;R?Nn390GL zz!Ky8_-YCwB;{8?788h3Fv;oJ|2}x!@$8d{=wOV0#D;4>UD#%TuRBgzeP6rAVgODm zkk)HslYsSdlR!n1@*{>hrKsn;0s??1771c#hXA|D%gM#18y4ABjKKcMD$}DMd%>kS z8;RU6GSJ5d^E6d)%gDh8GE)7^lIGoXOvM&{iUb#MVc~d2L{+)|*WjTNl!xdeN@6o>_gY$f0qq1(a*y?jFek(}|Xd3set{G_`(#bLbW! z+kbhx1A=@!`wB~FS&X*BNSa7qsh=sFZ_X=&;?}6#%yo3=#`s25}65O&G`60t#WcvWA&-z6(ovLX%6&Q4x=Q~4*l^??PzqD~DC-x~! z1SOrtUZG5F#lvi7^0_FhspWUkoc7qo9>wD)-DFjFJ)wH6`+A6pN)Lvt5 zkfDTCi7HUnq3Swr_qO)2OXw>ccIIgFCxQ8(^Xqn-nisW@=r!Zs`G}2>sy|c9wquDl zR$_}auajQS@nfa7N$%b`j$`XN^b*}H;uuHUw;mO-8oWOmab!}I`5LbGK-Bvp$Vb!N zT1hZ^u1cng3i#L7wE9&o+ydpTf`VUmM#U^aG6g}(s~WT-Xd!ISA z)SkKT&H9EeeWi9OX6%^ytSVRz&&9(1SR5<*KE0h3zBi42X-Kg}Q+<`pIX3)83zxqK zlhG|F(8E-p!wov_!b7A~f-O@_RHm;v!;?WjNf*@!r!~!aMQtqWz_@K!FD14~zpLv& zd8lebEKjc+jC(h1V9*pP`#Kmf(ZGio@kJQQ5+zUu*<`HvSe6ZO&zSY!Hs_lJqHrDV z2vJ9~yQXM}w7HW}#UXKV*ZdA>F_DYSE1&ALdCKIZnKc#$$-B)ZNGvMFitg@xPw%n{ zDB=r)``EA9OA0}RBH3M1naeSn?Wu>8qKC15cOEzDD|y)o#X?>%TSh ztJN6&;k|q2vq61LY?!L>G&7wE{XCDb*e95Om|X$-mk<;;5Cta-)*X)zg3=VK3Lq(N z-TQc#1nxvA_eI}u`Huu~Ha%Osc+$gio5*f!4i)^t^rn%H4RnJ+@J^<;f!qYcVnHi` zBIMFv{U2&L_YY1O#JHoD&m}+pOUUkr3I%95Aui}*kSbOk6|6{+uc>3m&-H5{+@Yd= zjDL7w8y=jV|JVXRG|~AOKS+RTKN@vS_0shI<(;bI@B1&kbasnj8#H{zg;8Y44UZe@ zm{`lW@N-GX0d$6&5rGy6o+Pbc57Nn^%{-sAD`m;Sfl-(bJeMx-4vVw#EeOwMpbb`e z|L`bo;I%=hz^9aGRe?#iM;J=~cj$@s$Lkw;p}HdJxvo%z-jBjq^(w)31tw3o?~DN> zRb3Q`>kryO8_*rO)J8cV?h0O#NjHD^6c+-0rpI3n<%x^49Dy-{u1YgAbBMzy$+9m* z?kCqV6sXDG&z(w}n*)Z1X0&)^AGSFu-1@2=|MZGzZIi`XyiCK1ZVQe!A1bA2{T5Wk zj%j~(;^an3j3X!qB}K-W!cx-pNaM}_OzBRot3mC_SL%pzx)%&_Mohfz`+*B7XelqD zbx`w6@|oXse_5?~0iD1MX3?5`SN}Br)?E%4S3=C{ty{hF zHE_8W_dF>bLPeq%<+X$tbY7=W7s8ISJ&qicb0HXYsp~wL=!kx}YhOHQfAgj3pe#x^u5d**W=S9FdjY2i;w~3?+|69Iq_;mrtf%C>L z?ct;n!8G)zLk?ElgAr7XIcJr=!2_v=7r^GK`O55j!H|~?&)w&rjl}F=$iS)PMaD8eHYAJJutj&Wfbacle!j9aUZRCo8sAR}-5(DRy3{*~z9Szk zfc4Mf*p1TE;B+%QZzXR({r*^%vH65f8>Zim4k2ue8|*c%5;oxMto=GPl32S@x*s=K zfcR+ooUR;$kAC1CXBO!z-UqVpP*Go?Z~((A@ZOlm0o(j4uYd_-rOQYMb@zPIKh;z9 z!>h0suEK?FpR-%zfl(vnAlDuqe!-GJY3B}Qq-j~cvh2^^%-a|UMcpn$@S7@~S4(j< zq{6DU!nEATCU82`(^ftrZ(t)8tx<&<+p`AdW~~(% zXP^D{0crDSP4^6!O&sp$#~+Hhl)@OA`ot`y_WG96p+&9nha`p-x-L9_5RfXs;{U z7Ol{Pl_RwoNhUC<2upS$MDhm2Z8Q?!P4xRdnUD#cR$!R!y+rf7fgwK>qfz=99e zE_n{5c0uOdkqDvCRHKsom^w;HFU&i+k&D;|BEb%bx0P93HeT-MgdDjGU5 z%vt4eiZmJzYDi))2E+pREIKju%xwlCvZsS#`fY20&u5T&NwTUO6~~uJas=;eaL~-m zOm15dzJ^9}**{lCJD<4S*+>9};W^tLl+HUy+lRMJIyuv=F?p)kwEd*z{J{1#M5 z-&}|Yfkrki!%{AfIqc6E?u}){T4npi`1#JOxlk|>L)qDDD=4OYr;+}_0<#b0!)N23 z0N6Vq1^v{ek^d{#*U@x5KGl$Yja(4pajg31Xo%xM+w&ATN4OW9qQJI!{mOt|C*Cyp zO0IW_^;8?#>=#3XK4j_j&@t(aNr@JG)VYYCWZ#6$uf_~MwZQY$-NWXX|H>;~Y#~yL z49LRb(hXN91j-^(8i{XkB~B01n-ri9?+~juGpa|Bsxrd>^fZ9{fI_lq(bM_$jrL=E ziMom}zrRP9W;*|AiUodVPqtfgfV#$EK!Yqx>9@qHU2U2WVCgMV{x!?E7`ukGGxpJ) ziFnkMk*3amPj;0J_D^*@2}l8#fBQiOziW9@tgxcEp$RHVxJFi5s6DPoNKbv8-xt7d zW6RzgYvuAV(!nb{2r=vgL*(8r!^LTIbADl)W{TXO01dNnx-vh#nP#_t8TSuGk82g! zc~9*AeChuznbOj#8O@E`dPSv3O|GVs?OX`ULQjMB<+y=hZ3e*TS6m{~BxaLm9c2Y# zfC7m!+&(O%k`_>kZky1b>2%ec2ikFLx)DP2(^Ele+jgzSut&{}Zx&Bkg^q2c4fHhf zj_^{Hh?EAVuT?z{M&>n!t-z1XCS^}zmZQYRp5MIvS-S-l4B|z!jqDb+zy@ zkhPP*Qf>vhTh!voEjta8?N?FE)FBUlI+LRVU_g}|hE~D_7)F(J03u*rPz?~2lriNa zsx3z;nUQ`mt|ihVV)#hN#0LFf#1>TYQNe|lI$+ayR#k3eIgPa3s9Eyxrxx)oRxhU! znD6slFm_6i&vt>8B%Xe~{}(tw*?xm&9j%iPm=GJbXAcK~wk#z5AYGJui-I+ICN|X5 zhd*rxzcASZ(y0}7G(xSdr=`76z$BZo_!AAot0Ly;>)o;vpEVIsRa)7d|A}%v^=IPn z4;ac_rM!D-2}-hzqfKzggIpOfAIjS@m3@6^V*@b`>tBkA#32qMPv+}=OG=JRHQA#~ z${9&c$^3!wR7HSFm&)^p*16@nzrJ>NFW5Gf=vLGrNv*K(ljr&G!_y?Ltfot z*=xsbolAkF5JfR*ZP%it`?stY;l;bqW%Azo@$S;A*2=?3v9*mrU#IocedHDGsebcpEa5l(MbEpH zzo^p5$v>fVY8CJ0!fWm6Tt;qgE?vP%0h`lq8F8ljnL;YZw_0a}diNmP371v-T)iCc zr=bf4$GOrlx>(Hp4+V95Xl$}HL*`T39$8hD8Gjo7+A>F$vj`xP+@0HX|K4WLI<9B= zx)p_HuYtwJeosv%Z=qZL?LO~HtPF#?l~Iz+ALzbjQa%wBRV7p7{qNl2_X=NRrA^9_ zcR3UC)*Z>1=Cu;8`R8Xvzile{)Ehy37TuV(P|2i}WYgd-A*Ws)DU(FX*W`3Her15A zdsSJ_?)*w@xA0^7SZ|7qS?90SrQO4PD-nN$x3=KKveM`p^RNGYR_O#w@6BN7ohSAzy*p_xUcm!t9qg9WLEIC<$58u5Ho+ zj}I^nH7JZ3ZpOrRa0?vhYIroR@sDC-8@8KvkvOtS1t4NMvx8i{i{LQ7I>-Ff%)4Iu zmfvu1%ph5d%5=5_2PcbY!n=|UkuIu0$62sCekD@}BAI9aajd>I-&GE?CiSx!L3M60 z0MrOTVSyUZ+pC;VIKiW<6uX{A9(>!Ngs1JoBGzI1;X}_L`5+IAIjPr?VG~X^Q%N@w zz{OL_2p-4s;}+H|aze?%C9k?|TRmDi4UCEQD;_$L&EwBDvRqa6ZaL9G(VrS}_+V7T zTsyh4tkyf6LclD1Jd&o$?#6iP`k*_pDv+4hN-Ta6F-Lr;sAi+|TkTEb{AvqjFGUCe z*L`(A1&64%J#J1VTmeI((-wa>#W9=QbfM2wB`s|QNwCY6+`qU_b0|sbInZ-k9D2(V zvxfFmoGJa2;?*x&wBcEssap{%KZir2;kRpG-@FY# zsJ}e&rE46JXQS7?1-i7bg;rY>xyJ=5SASZ0Fy9nmkO{HYzgNf-z#bhS zX;}M8wcKAmc0#X|7TITs$ODfM>M+|cA-<2bTNhj|-?cxEb@e@AIB?WdJsE5tf#Dl1 z669|M)wY=_TE!={3uTG%!bZ1Sn?w3bE2wj#%_)H_c*X%@36ZjcUC7AoDya(}~=!pmsVAZ_O zEP(#EQ7a0p=E94M7+5Cb|4Q?A^)O;-Jyj-fS}{&XD{ftu=>I)nSZ|PJvDw<@*y&1V z-fZq3E!jEZv!W4Da{pwh5Oups&e~a!Ef=i|_x^J7Jnv z9tnk?b{H(+gB0u&VTA-!HczHwdsyxkGzI)-6pc@Ba?RFXH(a9lpCw((%CxtY^UWDh zL%e%ajm*x4nxY{IBPrGWs~@s^N2)uk!OGSa4VYB27W51Zy=NjMfzwKY2w4JJNJmL; zp!T=xS&z$Nn|D%W|D%uydC#xbwDCP-%UFN2nT1s74kKV8wtChqn*8zAX4C=0!_JvJ zPk@ug=cZv3AVdnq=WF<~nmf{r{CfPuc6 z1_xT-DO^YTmLX3aJ494HXT^S*f~cYI1YU1OpF8depTUqbj4j0K_+Wyu{gN*v_gR{FD5GK#Ac2=FZ969=Uk>a#s9{<58EFa=neXBBX!L ziyfKC!k{G9;kmR*t#|$^gTrrYjzR*Ww73v*X;bCmzyP%wlG6&d!g+vHy|)J)HYJNq3*+V3iU%cvG%{G;TWR=`-Ew; znllZx!LRXWBBWU!LgeAD;c9B%b7?9AWQqRjhlxL?Z|$l9bwvl!lg14Sg5q?Y6Wa<@ zGT8s1H{e~jDl^xCW4!d0i4K-h;Cm$>Y|j`>`aD_uHa{_XpIK1TWmfnOMVP~<2KJGP z>l`%{%AayW&W`m(|HrIDw20nyZ=W# z2={vqGX+`wQGRLa{h(S-8&*tAQ#^_GIJAYwD<2y#F^jEDq!XE&Dy{Xe*M#JAk!&2Cf2%_Y$Jtt zXnJd1$W1Eb-QZWGb|mt;f=!5x2r@^c&w9ic0^yb#IFH5`e#9 z5}t=Y%hQrsC}NDgCHEKq;Zi5(jDd583F`vTxP)tizMnlC;8Et$uC_{gv0K*Fv$pSS+7*b=DVx=1+`gnzWXWScC;Y!BqXB zV)*bhrho*W8GLcpey%y7ihLzN5{4G@m%QEHY*x?5APDON zjZoP4&u<1HNm1U|IY&#as5}N7ZM32#;~460^aHh0XVFF!T`6!h>UVrD1eHO@BhZQ3NYy(SIDMX6vR1!xDKKhMNQnnHHahZe2yjvJeCDm)lF2 zOYJ4I9vDddCdhN0Qs-3B2$+8V^>4#6^5p> zBa#1d_?WyW<6K@XS9mw_84-42{q?H|sryFNk(qTpM^{#`3rnYX;AzR~{0h?d%6W{$ zvrgRAb~j8~0u+F%0RQF9vHIYGXA0&BY0Nd~W^- zcApBU(TB=J1*d#jK~YQcqWfE{t2@+BC-vj%n0?XQON0F3=6bttV$f{RD5TtK=FazD z%;lQEy#@E9#p%f=E$%-ALeeNC)|&2iK}n)Rvmq7Zb9j)idFDtd#qu@< zAoIdBSW@&DZKh<>*ky)KE z;$zwBoXJ40r>y?I$E-hO@FZ(Zi?@~8ECrP3L^NcX%am`9^c;^?=5YH|hX#hlh5RDe zWc9-W$y0=Ek|LA*Yb2OX<<|@}I*jdQyqL(T7(wPe;~V2EMy$xW#X#|~--6kf8=2INT&DZiC*p=|offc7?&l=T zRRRqWKJD>Xa4pHOSc!0o+wKOni=#l1_cklfs*f@o>(B3A-^8;el72U-CK_QFNlU9msf7o1v(7x zp!|IOJn$8F6zbelO=K*Ull0Z4XD0`X06=4^rguhi=)a(W(+Bc zyt=vpDvR?;lRAhp@E{Fc)Gg9u3Q%(ad|!|Tg+C#bVW@=(n~k}~dIRmnuv~SU!b0;t zA4L{$3$gqEe=Yzg76&LP9?RDV=T*V9B%VsjbUT`d8!qAkiHx6x0U!f2+wS3jXE>t; zoN_vu-ds0Bgs#Vy0)i5!?aD7q0kD)|ACghQNDy{p${~9hF<$>SpJlc@7)m!JRaxZ) z)iJSyFv4944l=o(%V{N%(c`FCJZK=(tB4IO>X1%CZ)Y<;GN4q%^-w=tuSy91mFEC& z;V^F|td%r|?@{(&RyQFZwj|rI@PC|QMm14%g!5AEktl3PYv$Xc2k+aBje6?e5`sX? zVGQYY7D+Mb{f*iHXLMD}*2Gu=0l+-I9Npz#~M&l|Wxb_l_C4Q>{;ArPO+>m|s(P-ix)bHjml#%THphx`qN5CAya!$ zSTzK*kk2(3gB!3~mnn|63%Xfm{Ju{Lx)F~$a(GZ?RffUZX~4jDzhGx6Al{g|aO1^F zYY(nz`q%NH1^YUTGA~@7i2v1;bNI>raAl_7pGY|qf=jp8hD0qpP^AV$niZs!YHYqv|s7Ap@dI!no>; zQQ$3lx#23=VO`xvL!M6<02#3b+zFAr$Tc7$z=9K?Q3-t_18P!%`SeNt+~uU%H(46x znt?Bzx3{uTUxe(3vf2}u)|`5P;-RCCto>I zyKvCjM6UR3=8!OVH?Aw=Xf6T(8H?N&HaA-_df(DDXbEygHs#->Y=NVAjigD~wAj&U6#{ zI;NX5-2It_nC0`@6sN-2BuUGIqNr#Hjiu*QUGJ`UlGVwj_ z_}bzAD&%jZWylD#@P9XK zxk~teyK-k_KHe>SOW!YYk%^hLOs_E<_%Z#>G`3PjS2YLDcPtt z9vXb@snBCUfvwrFip1nz-rW%}j+xi&N0l@5 zBZ|!ST0;X4;QifD;*U1?Bpa2(NM`G|Cz{X589}$NzBiFfx->0;I)nFn%p4vY99<8? zIhBZ|Jc(g&Cxn&8+zDp_c=a(;DU;X4IK10fk}}5xZ0`-RS*x{6Xg8G&k z5q!hVR;~i5pDcDraqx7TlzmBfznC=7lLgp6XGVVE-=33@6w`)&8LXvHTnJ-}ZE#SW z{EYNdI$0wA|5_oRmNlQNm%dQf?ILnu|-C+7lxO%2MaaLt(s3 zO3!{)&rl0ncYKrq9E}Je4F`2aO=zcRJsHx@#wijK*X!3Cxa;$FpUQ+WV3LZ^p_PMd zy;{N7>tzm+j?;c5IcGUX1e@FDnm4$Z5u&DvRB|DVW*Csk1?R zKdTfRIY(~$PQ?@jOs{@qO6j)#LWJ0N#n-38L#nbQq005j?88@R!@X*%G86`L9;V~A z{sQGS9<2v2WndCuC|~n|cMW0!nn3*Nv9145Fd?)H*Dq$G1_r*gStCpB&OUok&!|1x zASuK-<|ZGT9aJC~h`T2+eEyM1g8q#vhPN-2(84IvLE&y3>c3hl5O?7j-9(3~%T!Ro zSC_U;i(j2E`?xuw{?DdfZ5wY(VbMXTTEr8I&C!a|j`W(aKo{>ZaT!4iWM=5kMXRq% zZ-AL(2c6!y><}*R=c^Ex005Lc^d(2%6~FC8R0uX}0l{t7aD=nq%L6oKc&Qc3G{dCwH@=max-!P@;!a)99gnFyDu4jvcYlr${0Fw^v@tYVVE>QJ^*|?ypZ2C{c?1J{dYkR3H8Kl?Tp}j*>9G=cn#E< z!9oke8Oe|30i>1Tp|)Yn?b!ieidIUj^I&tU3FECr(4wQvR3C*a;k8N-m>#APvEaaI z@54!a6wp#0s2AH2%rDuliwAjl zpPrCjpYR(pjijcLqYW4{6fL9-7FZ$$CpB6|h0o zAlC@8(mSd+ah7yU&Or`~2IZgQ`vHMX(RA6RG{~^Q^ix0xz7IDlrj93Q*36YJUpsG9 z0t0Q&Y;5(zM2Anv(DL4F;L(!gYw=P}eqvM67g`~n2d9)|9EEPhyd(aJcq*iD$6u2r z7`b^g_{U#kGHHx z!9dEO9c2wmx?PIqaASqA-WP*#cLd$qqC;}9n_+iqwnm$4F2cX5qbtI>e1*Yj`gxmo zP-oYYyR@Gx(twb#zwt&xT(LN8@+=U0OOB9qvRH;VYvq&rkMhBV-pIP`eDC0<{zDw& zaX~=IKSUdiW~3#jDsl35jb$q=(7!|i%^0RlV7~6G-GDSp2kUBK^~D^Y`050yI*^@u z&Za({rMv$nj9k2_N*Fkx?>_wSqN8%|kC6ia_03`6oQzcyV@c+s9q5msg-pb=BGQ0XGbCo2D z&=ExR4GJ@D+erWCIfs^G{O2P@02p~bQZ>di>DrO8x%NB!#s9%HVFCq}BDob3gIN9k z_g)Mi2sNdHe%-LeXUD)$j`lj|`>4xEqq{w9hM6TQaMKZ*CV3$<0IqjIJKLTy#oJKB z`W-hAzOQMyVs-stCs9dQr@?YkQ-xCUQ0Pf20$CL}1x_+uPF$*n&Z`1&A*wc(mda4S zs1Sc_chBw^c)|%9;~V&VL6+gnR;m606=;t@EteF`0ll1u>ITsaSQ8xhr`tXQp6q-W z%yVT*RuvVMP!W+UtQF^dvr2eyLLJSAmY2MB(-g9>NPSz~v}V&?YeWD63mc}$xaX-B z5J~BefQN3d*o~LC_y_y$OU9@L>unGqkJJk-Ws8RHRv-tn~5VYpnDl0ivm(|BfX z7VY_{hN5}xmiL$E-uj?vQVGAhfIMV68a4Yv*I4uNg^ zCDgXn#vo<#`^~rF`ycwjxZfO5rRwsTm+T@xy$`tdu2803tyosy^KNp%VxST?DW4#A zapvdRWvPRP3|+O{>8~X=F%e9HCEZq9&J!aV!@##!Z$w-OXZEOG4K7WV zQx>Yu^4BmFy5o8sQn!Wi%V!t={H1brngsUS2%FDaiv(}M(a3lGQ1Gk@nwu-p>ikd> zbn$%NttHTLxO;AHCIMn1M*&WCNC!Cn#^6C;;r5U9oBB%nKaE(!z=OcSP6}NZd8g}- z$v0`4#wb2k)LphXOA6AcvPN#W-=@sAT5;IOax8T!z|dH0AyP`dpCe)Ck%|JOMb0yH z7w5estFTKYprn}XIA@7vmJMF+`M6C5K6!KP)`PzPqv;&{<9eg59~%?fHX7S(?8Zsc zq;X?&qQ-4(+qP{xP10D6t@r%yeeYjz<})*AKhNHKt?!z7VrSxnH!TR70aq*10<8#d ziuZ-DRcR%+C%mw351gY5eM=XX0>vUy6d!d8^4Oo8$ErhW`w)_2wu3-$E+ly#cS8et z{SLc}wpa_N=CZ9rD5AItIYe$C4sa4`@9O4EG_$Nj=##5+Xd{q@ifUXAX*7l6d}Tee zo&QUd;=LusRW?E)F-cco%NR?x3x$XS(~i>mFO_n&18ii0>qB_k8!Or+wa{w3g)4CB zen&!{D6y*I7gAPvpZB;vqzm^W+y`7{;Yq=O!--io>&Aq@&*&87gnlsd6{fZfj1j;N zlK@tT(<-d{)A}RXpRrM;~IiRW4H&sbmUCZhLOEtw$@Z73Lr)`w=s9~N%tZ6XB;h^dG4vTlm4cHgK zyGCk*%IZRRX~EAms*%?C6~hvUQ4DAP^K*qMg74E-1|18wZlE1VsNI&FcI&FS6BWzn zaDH;t#Dmzp4xxjI+u)Olxu+6WsrTdFCGKfnr%}@)%m;0Da0!XiAj#Nj@n9&v-9mlT z3JCA6LlPo(0eKI3M-JoK`&JMDVc$_QAbdBRI=v|oJiNTe{u8B%0t0VjZ4IC!!io-P zJ8n;2JhC866;TlMzw=)W1B%n1upVR9*0wU{SklJf#{UVwT*6^bx@06XartY|6`wVc zAp0alT7BY%1er|6SVMg z5kYP!A}>Ib&2i{{yVoH3uL0~Bq1mT^mhhUM7N^G>f+3+HzctPALgC)Qc(P>F$b~ee z#DeZ?iTHT6;#_* z*?jF2Ei}|&uIjHFT;?GTpl+B$3vYymZN@->D{&Wy#d67c*S|sx8Tu!MWTUauT+Jr1 zX&p_M@zB3el9gZ~8n`~muYC7Lt)t$~oryR1^B3%TwboYShkknHQoc86CL&FBB%nuO z?)JdAy0*FaJ6BGd*U?ar!&plNLBST|Rke;|&L&Jignn%KZxB4dsT>ts>=$x6EF2^q zsgqOH)O(P}ER%bNp)8o#LtujDWbID2J{mH~<2L zv=O~QgJ;A=hfO}AjUq<74~%{K!eky742amq{H{@?eJOlY!5-uvsgGV5vK|J#y`HAZdIt$BUt$iv!Zu~EKtoMm*aplP)9XDbA~CW z@QLiK*x8!7HIxh~&0_&^9Y}q|X~}HEXM+DEZvGZ(ACojSxWI)S;=RRqh&t_)?W-oC z26pc)s)&Sx7EPdL=)Ht;x-@uP*j(0rP&={kQ>*9Qjwu_Uhd6^cKO-?9ghh6}3?o8YoViaLZerhwrDSdQ zYk~t;A5t<@R9^{`J}SjTpT*SM&@R++;a66qR|1m(iDoI~5Ij3IH%?Xh*r1vHI+VWh zzx~RLwd90{)58zV8@bn!bxvcw;y`&`sZ}mJ$cd+0yl(UHt4uyy?r`q;M;{)S)ym#) zcC~-!_G#`g0ejy5h`j#5NiV^{7gQGdG1v3iIkrqCrFQA(A^s5#fthCXXxoL%A-T&~ zPaY0B)D*T6)(>w6A6Sepw$N(*Sqo5JEk7Wc zW#zxECLV9xU-`Bn5`;5tX!Nl+5lDMMhNtZ-^EMl0&Yz5@N<8;$mKRZQm;mfQC6p3DE6dpdhrnoqqu;p`Q%pAvHgVJWw4J*8*hH zDHz~)ZrJ=EsbIjcOCFWYKOe(^<|-Vv;HWjX3rKQ{`QPFb2Ma@<0Q5(J7*C~ERH$}y zrYZETLChGnG5u(Q%xvU)=DuRUPzdO?fSZhv56a8n5gpTi%QW@XVimGZeIdU_>%b-< ziYBkR$ACWE$H(2+VrHWb4=bSYWBK;5J=dax>PQs|~DH#i(a-6qoswHjiy;I2M41apbNGd~V#QrXja_+I>D__27=(oP!$^*CBX z(Q@8aAE!_ZHIsSJZkhGM%i8G_6jUh*2P`ZBHV+P%3*8Txs*MHiPP_WJa}FFOFlYdl zssZ5Qc_?M?{ps6;YJh4C-u3$pRNpnEHI;borVFIb=dh}oHOD$0NQw2iNwz<(Fx0A^ zoltByyxo%pYYtuu9-M_GE62+v8@86zn5CeOStN;FRqezblUx*zvJ-XU;zcpaj)I#O zZwi^z+EIfL6zJgPMYC!X1PN{4C(qH0F{#9fJ@N%-jrm_Rx|cJOCFxg{YG}`)@ge)u zLHF+dh!FHA%lxL%c~lwds@Z&wUw#BNK}eK+1hMOS4>*rfkA=QrYUy8uN&VyrWO4M>ux@hwF9^$Kw zb*<7FPB_6suf#jodV37=nib5G0&4Y-FJPb^RDHjW2z(LC^GYu6W zP2rv>jyeZt&qY}Zt<+VJ7=`9<`Gx7U5ZG9upGC09S||qVueP0^Ak0F@C-aFF)F0kd zKbo-8V`1*%#ZC6!-CAT~4tG>%)4rtISF9y;(H&-RKa6}aE2ZRmi;=k0dA&8!v~7jQ z9E~CwZ|vNcL1`usYxd+Q!c7mJLFcdzodCMyQuFm@DXZP>Z|KPm>JL{YhVwG9(y^k! zYi!*T68m@GRvBX}^Vk%Qiv?m?8zmo6d@ap27{k@h9{VfqhSewcrg!kyIKCpGY zbS);v>kXS2B4k?%%6HxpZz{Z8OIS97L6D8Y&lSt^k%s*Lx+iU6`poPm0~p&$uXKRE zZjAu?PiF)uJueHFMS7gsFvu64%69)}+$@>_duA@h6ZRY$%JYQd*P=e8^CcbEYB~RO zjd>>aXrpzldPcWfCejrz1t*^2TH^DLnpef*XNfY^8CAlI7uyla+ATO9jL}1 zs-|}^X`HuUp_p80ebdiXy7905+{ad^B^y>nh;}Nq9U+X^`4}Avfx#Gia~IWIr9UTn zso73ysk_5r?1wy0*43uLXOBz%j;keXn; zjo$YolCL&Ix8TmpqF!UZ?0*lV4IDO;sGsR@UHTrjvmADggS1mn1-Z>z95r}5ZJD+q zWT$Vhnl11U75{j*A;1y+_KV6Pc|iyjO?6SGIShiH_(-Il z9^I|rWHz?hZ6sS)&*RnZY_)N>s%y=B_z=K?=$gzQhCkPxqmTh8AjwNS%o)Y>dp0%s z6?bl!ht8odiy%^q2zk!k@r-@qZ2-c%kC$^q_R)sd9 z>kd+7Qpca#hX+HEI^`#U6pJmqvx6~+3KtGa_A{P7hMtbRP?t31!L*YkHWTEnoiox!8ff?i z=$|AsjWK32V}XQ&y|2u`3brjd0i&U*;5DS-De9g7KiUI>zk31XUtaV7+%}51+e(aj zW1=fL&WZnP4-^;z?12e4W$1{<4r_Ati`x3qP*Qr7W+XtqnN&GH!jl&c4$jePeew0p z%mJyf_{ck(K-OzD0E?>H^0}E5yaW7bZRQnMyP}FK>6g3RhaV2^k5|LyPK0Rx#|0oO zCk8k4B$%)xfz&AoK&*OoQi-cNKOHS|(Ru>nu)z!beDJxiXoj+k2)>e149v{r0PeLg zA($QT-}u{zU4`g3ixELm+@S|4tw*iE>{baQE5WrnZskoUSL;TXJ7fU#{j{IgbtWx@ zUJ3U0)AIVZ(4i0C70vM%bS9l@Ga=U2S#Ed| zz!um81mAs^xdQ%_v9T~`xU5DoZ!s+pi3;K=-J>qxptvd>`G89mAe1o&RRS;4N#Tei zQ6i9M`#mgc*f`5Wt1;aSI9jUP&ZN%T>NS|IA0EG`?eZ<2D^_>LreAn`-oL(aCTILa zFl=V%8w?e%#+Idm;Piff)X8xI4u&2Rc~_>*>@!#C4z1<=j1(fqav*YyKc@JUjF_Ce z1=m?AtH<_=`5!fnZ@+>_(?9Pa6y?lLGD;l{kW@5`r#pkj+%UmS4BTvUdB1t4vN5)z-7T)>~D#G6F;UAxrhk>C zYU+aBAftUp6ixx^REhojuw17jQn`ZfLT5h_g6NekY5xBh3OwCT7tweUyFoPmpK=VL1X-dmcWv# zN~N5qKFbeJK~u+X=Xqfmzvt`XSE0DJ>4bJsM)=&))3cLB-Nz$i)rY5KBoD#9e$<&> z;W2ruLoO}*HJ|Mv``_WL%vir`=+a1WR#&ABaWoFk5-f32Inn79s6o~VJSU{|s^7K6 z^U6qM^2~NgAjjP8O%0{cB&z+_Gty8FeyV}2-}36r6)7WSKHaT$k^Mj;@mjgnrmwzuV1j8YelSiJ`-$zK48cJ`Y>gIRV>a%?)^6%r8 zD5y=PPQGOQa8!C^H-#Ugnq|-IvtGto(qx`(xp9v5fS+7K0xZt@Soj9~GC6#1$ep;B zJJ776QIGw|@-J5Zj$gqWeyKaPW04p%V~{K{!s>U6$TgK-eQkH*SWq`Ack@R{Q+b}{$fyTc|z->R0BienmPoc!OUM*WxcJqDK~Aig=M zhCd~keda8>FLvpB!%ieN80Pxb{Lul8gAoUOk~*_TdD}gFDh$A8yyAiV7!^FtlZzRw zY5csLkFITCqX}>{HUuW*9SsCHvf%TJ?0;0i0zG&k8`$qKnhOS@u$y6wP9|4eHilRp zsT)|E**e~f&Tc3N#PI~qivrjM-FxKO#+0xbZ@{yoKhNUUy4+MhBrE%6J3m(B*=6(> zO?orU0DUPugJli?rJU^(lH+8c6C0tBDW!@tU&tmV0AV_22)J5X%@Q|42jI?V{&A7F z$OvY)U;cQ*wW1;~Aey^mj#zgf1|}k#a&MEqfiDDif%5*I7;Ih7q}mk~+7KZNCWh^9 zeH1|5=|^8P>>Os4z*}fh3dO;X)U>rYw*L#G!+3#N^Dw(dH_{J*dk%V}jgMw7+sTey9F&p*N@} z8fVb4g|jqvA^PL#(Dp+ew~4p0)~1>dR`8r1o4fH&AzIEgU7-kDb-dU~%MPN41S@MO zACLc+n4h`9w_;|{@$MU?l9xCBZMa43-#X{d3SG?TwqB}Bxl~%Tl6Rr% z$%%G#pBS5k5k@}``AnIb(zKu+HH}!I zs`0Bd-XL}mkAkF@&y=f88MQ!mMPP4{;Y?ee+p`O^_dhbLFV@e^@{A*=KMK*fdUW*r z=_PUazS3m>G1*h)ATnOgo_-m0!-XUyNnWd+coZp!0o+k{zAN`hYhs%Vp zK100rp0E=7dpHb^MO99Gq)Ytd=HU?J6eMG?|cOa!3-&SV(W!p4%lKqFGtNDEr~pS-ab$Z}K?P8y^GL zc2(V-8h!KO$g5pdX74&owK$*EZkJEYhK$Rq<(RmpEG^COeEUU~!PI^AM~iycT*lvS zdLL%UQMRskqeaB-uU3Fo^_lG-biu}k^K$lfUwy3FdDiIyBeFC9!s60yT{*4EH4#}e zgHIW=A^?1S{BdZyGDE?rlkfZrfsDu2|DV9I<4IAe8=8l7fi5mM4mbKXwu{%{j}R=v zP5)ED7a>k^pUYl&=zy7QSwsQ9x4UJ)vz#z5Z_ldQO#}-p82)=cYARTxvNEQ1gp^vy z*6!H!spKoEf1Mz=F`LRxNN|eZofi14L??6Unt{zS6&9^PWRzmllDv)7k!LQ^FmC*W z-Bo-)83tjhmrWAGx=1)l|Q@8o5sF7F@seMJh zko6zX#l9LC5x|pCnzw`8e>w`o6Sr{EnL@yO#<8K3bKxR4_r!Iqiw3GI)_Qj{hdG zw+_mcg;t%3#=vDB1Le=W5wT3_UN;xlK1cJ$lOL7xoa2v}U!+&#pbc7CSO=c$8?g>U ztHrySMN}CW!rQB&MiapOyh$NWQ~PW<@*2ERY4u6PeiA5;od0oT=?&F>j0eacpP8b2f z!eb#vMjg$91tVZ)Yh-lrn;0Kp22Qk>?%Hz>hXLoyMAz92_#jD$poidFh_yKFkLil* z-fm!!;p>~6>xxBxJMeGlO~@kp-*FL%6(l5r9?p>i+VW`)7!&vI-)8$FDBtA_K&wCj zt9l=uYgV8C{*Gyp-<6Aqqx&BPv|wb`I0PE@h0 zvjiZ+@S>sqOIAKs&&&@p+W0};le2{gQXc`#7xW|<3!ZZEa=8loP5QK~1S7?-s)H+ZC6lR?_$3GRLX83og$;+&c_Hw@2d&5l!E6rO(X;+FYvoc7IpF zgk;=a_}*`X@ZG%rUJ!WnBntys5~^gQQ|=X^m=jGH+Zarkg`U%!C?IT!T9x> zTz6}IWc<5>-j@#)%UIIyWM3Zr61$m`2f2BL!H4fpXbOsX&YESGWJC&yK9=83n)GMy z4sTVtTp|M>=V|CnGD!`g_j5!Q6csNwA|1@m?gVa&S-Sau^)Q`xC9olXe5qUU9L{Zd zI{CB!1Zy#=dXiOl-kAzLCgUakRA(iPJYFEIfTn69jDr8ywURVAC0R=S{xs&@;&SH8 zgTm-56L8s*e=j!e+7^fn-fVN#$fY~_qz-aIljzR;u}%lXtQM$d=Mim ziQ;)o42_svuA)Wfqp{<;;W7@SgeHpWCC{(kC!=~Z6kNU{=p<+9#9Z#nlrUnj$1gw0 z76uY76k?(uBHyt0bXm)#_NTCaIqFj@j%R50l^|wbEc!4MkRpa6Cy?qPCP0~}xr~&iL%PZw}VxE=?G3~ ztLFQeE`OrNjObz`FJsdS&e*eEuBqab+^fWnq0)+iM)%J`PK5gfe**+<$g(+_05~t& z`ii0bhIwC|jdUvwA+!-^Yj)dbch+(VI5z)x{ssS=X!V#A>7W3LJdwf>W~IL#NtpC& z{3(l3MXYO@Ta|Y|W|wYIPJ1g!d%X_)rp&Y3?Cz!mO<{j&Ip@@NAngNF`)j2p$-08i zwh+3|VkxqVEW9BwL!N_221dGCO#mr4mc+{#GL}g>@K1*eqITCcl6CRtPYS|IClNn6 zf`cM?tl4u&rjGI2Bodrv?#Ned8=_qwz1r!>FH$a|Th)k=&sx+6JTPXXHgJMM;=&YM zZ5&Cqt41FHp7UE{VK;6usxg3N{~!PZYctH91r3!&?l0s6^vORVC^C&15h4*e#uoL# z(!0QPZ2;FQ7=p0@x#O>E*G^p20fYuq#w|xv$UgVT?RIn4szU{b(QM1{fRU|8y?8*9QgUjJ}wk(uH8H5)Ul2P$;VLwt09?kI ziGFmT8pj=g9FuRn$!fOY5EuV#yc0<5c8N7 zWB|fKRK_@Nhak%@{uI~if3!C(pXkwR;r_Q1KwD#JcfEYa0V!t(&K|}}{vPX|Z8G(K ztm$p}o41QoG2U$D_cwL4#qw`G?Yp~aIo?*16Fm#lVE%(~)xx)HX&y?Nl~lZ_{=d@W zI6{*T*Xu+iitn6Iazyv1c97752;Y2o@nlIpWMRwmdZ@A;{&T6};AQ7b4MyS$bTx1V zk5{MVXl7&oY)pCAAEDjbwz9Pynx%T^lOHBAsiw(YPIpl1ee!QnjNU!>k2m~P;$YRM zENB}cn(?7u=(K-7+LTjA?0%wK*z=oc<+!aNh&nOnBhRgV*G<2~P0G~OLV~gjJtz`g z=vC-n*T;oI;F>mH$sw0;b*A@_9H27F8ngHDv!*Oa5V{G{|4+pY(`%9ij|h5Cg4k)> zR5LRA21zmL?tCy&i`2)yu;7>hxpR9wk3)X8)$RY4dq!AIKSCXJP}vLs#Af8bQB5{> zpFnTfu0Q5<5iSNqet&F(qa4dD7WH=cB!Fb}hnV`tD8kXjeg-#+AyH;DfJL=&-jrU? z9XbG;-r9Fy2a+56@82(X;Xri3cHGsXlQ+sfc@#h(fDG!Yf=0mvG0upkbIyGS3=cKe zlm4c6r@v=AoV3`p4G;)xDx*8k(J|&`TM`LGb=&J|=6r@%1v3^I4Kgb$|6~|uzK%Iy zK9N%l)1gkF9iZFmz+pP=(_qOxY=CeCiKFUJd0^=~n3-nz1}Y%=;`tF!&we0Lg?8ql z*{#QFli_HByjqa~tP*`*G)NMBj9vBd8&rmFKIv}Piaf`-{U7JWrpIs)FaxKqRD zx6BH5tLd5T`6W}jg@{fpN4brRP&<3`Za795v`YKQl^z!!VcFxQQqkNGORax5zfi++ z&DP)IkN*%^(T1dk(lwEGs%BGoT)2`ADl3U<=_u@}I!L&|Kl=d+@c48tMxgz`q9JIg zFpALn@Iqa5=ngRm);u^23nokp5BLQ~d&PHpA|&)romGQB!+L;8>(&tYaS zci=z!E(Un3cVX4jI{(NE7&sf=Tvg-kUfqzS{cf#vCCW`3Nlklykis(xR9&0@d}pcR z`W1i4-T^?ecL(5wQKKO^;7SMy;2N7O9kdiNsZ`?mVOZf~$62?yn6$>24xbPtWbyNP ze3iQ4+k6BX3|S(a4LH9d|;tsuM~~*>2OuXOVWeVb9VD z7FH864xT56N)7E=jV(a9XzTuAqbNKuJcRq0T^9i4f=?>-xgWmh(5nCdcOezU^jUW~ zaSuQ$$s{I63_dj3YC`!ycpN1L17sOQ`d?e$R%%Rv3&3g9U;nbHrR{HmW|g&Y$sb$K zjF5eUk$4XKhvZRE-~|i>5avXFMqu6UXr|NWvBIFZ3I!55Hv^+H1+gPGuYJmOk+D>1 z_k^GsR$5AJnzIy*!vrFk!7Wbf2vjvHchR2*6w`Fs`ezhQu6T`OwY=0>-V^REKJk@m z0tRQ3EhK4bB0}u}m`n`*vc;W69%%Eyl^*yvwx-jjNQ7%Ngg>_8w|3~zzW*+HxXz62 zrpqE*)W>j5Zk~7-mfHN?;g{u&wh|vRdJxAjx&24~2D;Cgl_y{ZELdl!n3zq9hV^*7 zl>T>N*FPj0{y_sv+xZheR}hleN8m!*V95}`NnmO*f1O7XD@oo;k_x60TWM4*L`vt+ zF?Lw4K=de@e{^|9$@uZk2S8f)?4GU(MDjMdxSQ!|mS_%1BJaG^v#LyJZj^UrvwdK9 z$sPsM^c&`B`z+2B#y-hNZN9vPu_nvY{TS!Yht8$c;2@4y2Zwh4E2M6 zV0B~*BXhh|38W%&O9v|)?547P{!nB(5z?GrF#*vh1KW0j)|by;WU+np+?}_%Ft9K? zr9VnYuvVrLa-6~>Ra+OU6axFoM9V=Oct~Zkz--ncTx}=r;4h&?#Kd=e7%Y@*KC)!B z4C=s8hwk1w%WSFsiBu%on%kAi@z;31F@EAI7XL9V50>IZ%&7N(b|8&9AjeqsqPyA zYJ`FbyCz}$bj97lp6rFmjl@YWZ8e|wr2F*Ox#VfjoLW)A_QHL8+Hcfrl)LMPuTXBr zQu0lV6=BbD&#|&JZ1M#10Lk)aJ8>#0-!Ez1^n3Qm znEQsRU2o#_AO2^)@Eh6E@gJ{$(s(<6#Tgy3PzU@B!{HZ(6&4mkwhR_5j4)*O@BO2u ziY;!NGr~}u(V0OaB?lEs%L0;!7sFKe)tvlc`OV$U($YQq@TrqQ&cl!JkMXMI_{7=S zKOgsR_qz5Sh|tv{vqg6YuB2ed5(jw6@e25+P!kw9+Y}9GiPR-%6NM%7UfRRbF{AFs zjZ601O;>oK>)mnF?XH*4#teJSJHfkfh=n3zwG;LKa;91ik1{W@ohu@AGyZ!1ZC^-0 zzyIAA$(}XPKd6 zN6lx#0~{rnd3i)){a>(Ifs4WjvOaApOn4Q7e931$TNh!nepjE4y3cv6N)(Nz1Xn~0 zuqn3GIkJ8pSlk@)b?K{SI>D#uc-%)x&N(^L$`6SN2g@F?-V zR*eg*s%F0Sm;o^6i%z7_F!sI>LzT0Q+2rjSmdxO|^<+2nd-AUVaSf9-kPqs~3{QG6 z2(^B<t+e1m}v+?{Cxb;O;d6G8GP9joRWoA-Txhpi&kMs8>#SRDlNSnVrv)VLump)g% zC%Cp%!3!kQdD>Rz8Rvcaq5J2!9ZFAO6fPT9gG+ui>-^_;12%JM9w@wD8_-3*-tXF$H+S^es%B^VN{7WH4W7@@H_7>7b>Up z)xD+2!jFbX+@dz~f-E;S27F4;gvQn1w{kg$9v z4h%FCbl{Lgpuu=X9u(Zuq+mj7sT!yoLNj{q`%t+}m*3m)1eWV<5N%1SXnjpfO(WmM zvN-au=p?cboW)dy-2bV1hiuQ~3t3&F*ZFPo`o71J%)nFr>1cgZaa2&J((0y};vWg_rmVVNH=5LLzbJxC|k!|{mC`>5)>rir?{N8h)=90^g$Y?I1FP9|~ z!JvLC1@yiEWqeU@M}(p1b1+r5Gk(Wjh-}X70vxo#~OAc z6l@$Tbbw)@Tl57h<1XYPeg`~EwJ)dO;o`;^=YBvl_efIwF4*zcLRNhR-KggHQW(l{ zh^`yXzs;<1a{fR+@~a^+52(g#jKaJBQ1mLvM5C|m3SRUX+UEdytI#pcMQ)mYk24@n z2mxaQ2V<*2B>YxaLDXbRpM82Cq2q4Ad}qt(*>)_OmRGx^Ki2pBBN%?kAxL|y(!$t` z6;@!xjk<7sgvj|TjL~%-)wb`256kVnR~uC{$nkxn6-c%o-5aj=Bkb?jK_()v2(v+a(ybWwG5ax`4^s_?a$|P)H(cnIr{c&z%Sc< z2Yn~<&=}6VO<*%H0isX%0MJFZD}_{X-~*A{;1<>@!}g@>o9ncqL#pa*k8#_(lf}zP z2R|%amcE(B+`W+>)q3@zCyV5H#La9DQNDm?zkz2Z^38&)?B3fR4o`@LIj_v137FbD z)w4=O$Srlss!8m^XwjVPR|Eb)=p5G}pCf^7grl`nkX1TYW*_FS<)63s3Au-SFw|%f zAG15P6aqp2rvwrSaS^d3JEH*D!9KXeZ#J1B7_IATj7{$SFAtwQo z9O;q8lQ@Z!883)nAvgQCAk|$L5>q)tsv{+qyw?8h>|EN&lw$@C=w6+30~E_kj|oo3 ztzE6%YCi9R5qRJy9%2?i_%f`-enWIxL+UbN85W2KjH=w=IHa1-;Jxz&^lIOdvciO9 z#&6=gNRQfgd5(-cxo`h?eS$a;$GqWA@pjYo8#j3zZ;KoGg~*b2z2+uXv}+u*>U1a1 zF8Ji!_;k*1e;Q3GIbtZZ1%=Ee1D7lr8kTFZW{Y2cpEW@-Qwov9p(;gcJ)2(_DTB*V!=Cc_WKOuNzG87T0GzgpP{!X_wjEU&M!Q8~h4xlt$b>;RgEhtG^QSzR!M|y_d>Z zRj^RY9M;{EUvpfyPJ#5J{oW@E1Cc?VQ#H+!e1gg1o2?t9;d77|FC-TlI$rfu7*Hb> z48yXyu|p%yipdBiAexnLsF2U^w-&}B4JT7yYRnC5jbv+ygbe|1qiML>5omQeo*PNZ zTQ)V2GBXqc0gLP|1EF~LePi`({SiL}YQ`%mT?!0>YnTR{3Op!A4`pT!BdnKcjbu!z zWJO4-IeK77YK!qF4{aSOT#l0ij@Tgr-td^ss7#(WqhC zT43>GiMzGBi4!T<3>tq^=JR=$^R-5U{)C;;Y;a9J5ZQW99tF}}XB`s`Qp2K)3Gu9V z5B@$+t5)(k!^ZoZ1Mhv`Q-!LU*4GLkflOCezy9_po&L$+5g>Nr?>U+1Js5%fL)h!oVA`v7X_uMd5Ps* zN&1u_xwC88F}uI@Ti~EQ`HgVu{rbUlV}%v#+k!}X=O7XU^jq*{((l-i50Akc2HDI4 z(UZCQsW*qmS(R$`9r1nLh2v@z^4DXw>Y})MAzDx5B+bBPheEb*OlfBLmCIe%PuSly z5AwNk44E>Xr>6VMy8p;Pm^y-((#R@)gWrJ&7r2}G>^4!K9SsMXYB71L+n*hmf3tg* z+1@<^q;o2$ggq<8rdQt{3}MLpwh(JPX3r2*i}jbNs4m~g-f^ei=N?QEoDpbxqfdyS zZ9f2yHj~h4xP|zJR|TH47O8t5yy=@{EXz=jLu@~y(>UIF zT{PfI+`)Gf?cf7_FrA%!#ua?z{>PKfla?@(B$YTpnVol)9)71KL>|3wVNRV3Rq0Uu zAnK$cMxm^+xTS~@+2k{xPVw`o4@x)JX6?b>uUghW8qoxbN^+IP2foiV-s;V`_I%3m zy+%P2{^>b6qAUG#dCELpaYpZ(r!Pf7oKhwOy2QF{vI=P2(URk{A@pX6=~pWVFNbzS zo{y{M8UI6)y>qLBp8?l-t^My7SxZADm2{oSq1%Sm7rXdz>;~|6wBX*K>Gjh3VLaM# zBH2muSjm3hl_QmlJSHf(^?0NRjIkL1np(L;^NQ`vS&9$ewiaPgAv~o-BL%~|bPn(5 zHgpcy%Mp-c-k9x4##+zx1_q&As{74iKtp{z#m>Am6Cuj6+gmZGG8=RRVrp|Xzefm> z#K2`)8fn@Z4zQw;rPP?&_Z!YEaFRLAjxjt?m($=cbkV+*Ab)UkHj`V-oG4MGsG^BBF?dIGBP??+s zP6ynV*27e*O|NxSCK+RrbKTXsm!gvpdV>h{s5e1-ySPVP*D5e@ zyrG~J+$`T1Mo#$RtItKLeFbr*(wSWxM*VP<30zp&opLMc-)knF$C;h7UaFvX^duZL zt~pxg@a%;ru<{bE1eqj{PMqu)@=*Ww|)`TB-iAxgN$p)^Ead1N}i`z6O&VdDxYcP#Z35b zT061l)iv0!NE#_p`>g2)>Fv`G8AZ$SJ{F9myk82xDm+l>ROgt^ky2)9So3FmL;M2Q zV^}8Iw#7g?a?!9!U9aJ^UFo$HFJxdev7F~W%NMy<5OhX!nq0?Z5tyvtDU)<=$%8ZM zEIMvn#`2U-BI)2@ymSyx<@)BU6qp8uL!ToNHRh@%3dqnY*Fj$IKf={+$@dfm?8nwi zREVRMputC@-DZP7CD8i_$$`U6i@Nn8vK+CAX0lmbR2*Bk(RvY;h{u*M;0E+E11f&j3hK}DGJvQfztdb)B@)W_q(C#SAX zJ1`*4`&$})W3^A+EIywO|8CH9JaI?Gjp_tnxbf)Zifz}h_vxhbB}Fj2M2U)p##qc@*n@x}-JDx$6biub;swjj&BE}bx`w6_J-67RK z_OHIEuUOOtlQ~6{=`U^I8w-o$lS);*XGQ~QzXj5jo0b_ZM%7~L=m_QuU`OcZ`USqCBm4%|{Z5W%MH9@m6k(?A@?R+QK)Z^c$@eQ-bn>EGWkwdFkR zMKqDh-H$&>4dUUHXnkkxJX?kt$vZTLqARbMRZ6F-`8xa0@k(bpfFtuDDAG6*!tW*w z=d$V{TlPlKU>@Q#THm1>!a}WiyFs{G0u#*jQ;F z=zSWZDe;sqY?7Hhr{DX-@a?!MWH!tHvQ}iIC}|d;LRBQEmE>It)GkLI+taxS_znJ{ zsv|mf%&+S=6Hk6#M__^EV$mp)Jj@!8mff*;&TX_2;_}GSBa?wcF75Bb8ud)8VYOtV zLZ&wj?}Z4+tDI$zx_#*H=|>me%4`;YFs=@SgaKr_5{ARSLuzxGYghv*X)PwGKcd-j zZ9w8o5#Si4)Wr3T744Mb$ldl2?>wHZd3k= z>I?8eF-lwg$1132U*vGR@?6rAIWL6=W^SAjDk=B!)-f`~JwT_Gmb zBoM6i_-%0>B2aISMjqF2)0jQXOTM?d#AjiFVWa_Fg7$$~-BsY;J9K=7-6y$?mY*fr zu<&|Cb|Tz_RM5r-k!4E0b_4R(!5weutphc76uTrB>Kf{dP@-@eb0-I92R*mkP#U)0 zemrSBj#-US=`ePYXyB?&w9uy18{n5A=CUmabM#w(3%oH~=pdV#1_rMoP>xd77 z423t{-ie;+zE?gn>_mbC!N^>w;wdK_mTHhn#L`!bGoIWDM1MAby8NVl{pBdKB%#rshA0W(|gA?rY zJpdFPsf!CK;d4b(#~A<;mp&E`w?qeOZ|fa-f>-JmJc)c%-2^M9ebis1+cblL5zSSD zw^!dOH_D5alAB+G<6tPz{pWk>he**=&S$5VD&u>-2HXr&y+p5*+E# z(mn(4XK#I8HXMe#R2Tt`U2Na7fk@(PF5%6`5DvL9hfj4We=|3}?Cr7sy1+R4cU*ph z&QsZQ3U7_1nG-2FOov#k#QX@0Z)Q!w6LnT2?~Gx(F*j*qjg`7id?29KfH7uYHWp6h?zIyw*_^zI+qTcM<3?8=+pcuG6imd= zRt{XKj!n+tjtMV^%Yb~ZFQ)ho?>tY|b~ZhNTdxWpSIF5reY%&u*cNt+#ttFP9WTgx z7&47`+!P*S6f)%=AnO3t+id%$sT344;oWYNtxi0F%cwR}75ox5znhoD%VRblJTLE` zSf0t716=8l^MM&}@Zak#Y+(PlE7iG;Xy`hy1K$_+#~mufJu#PAP;h-GnCycP zK;h51Mm({&q8-cMVly5I-u>`EnDV)}y47X*`3pB9yYVRC4P{08a=~V8TS2P{?a1obC6Hh zn+NMW;eJ2ZFy#04x~$VXEaF`Yi{si|keIVZO+-i^s&#XvyHTPyhsOWIL|$r^ygIle}A>DP$rcBz%+s4Aae4b;Pw3 zYHHmT=Jd)cdk`rYmz=t`F7~S}0YRU9q&)YUOkvu$X&^=enKty90S`PE47TN$Z>Mj$ z6ZayEK#U4N^}=bIUWFDoU=F=sRm?G8V}{<_CYG5Aa0;nq!*HL0Qk=q?1g9TZBAntA z1m&{CihaDD=J;=BvO7Ky;(J&DZU3q*cEP2Ssdd^LVzAdY+ds>aGaH>sH@!aPe&Z1l z^#SdAhDzb!3fjRiJfT)vP0LPW=1fyLMk7NECMP&*T~QF^19%IDH!6zA zr91wg*ObYS@Sr`sboS+({lo+GeIzVWnY2T*aEj`}dsU8h#(>~DB8C?uzk~9S_^aN6 zz!h6<-#0U(R@MB7kfl-AxE9szpG~A$7bJ!Wv2}J+lve4TFl&~RVNIi-a$p0A_bA@T zmic_9JbLu`$lzvnu-i@8YzeZ=C5)Ma_}So55qv&?Pc)qg)IT)*wFV3suQt@nEy_S~ zXp^5IzjbE7e=%QoQ4^st5_#kdsS*AkO=lI<=J$1BoZvwU!QI{6t+*G8yA;>r?(SY3 ziWj%yP~6?!-Ce%?{xjc2E;6}DW^&$h_E~$aXM-q&Ehoyp>)beN(@G%nL!J)tT5+@O zD0z#kG?+dQ@zkYZ{K1*_iZ)l);ct*nN3LSWNo2Cm>Hw_#zA$(4mbzWt19GF?7(~sY zcO^`I%T1ErB|)}dM}9xO4D0c_pz;yAn+jrC>zF^nN!X-X0?#o~tZLy86nl^cwU{Ru zc4_xnmyNEkVewKgM+u)nTSKk?0!8Qr-1*0B>}7nh)kz!^W$7SrKc}Xb9HILmx^Y@82!P-I^z9mf z3SJ0enVuY?${+puQ3OZlq3onTQpc_($9BkVlsi1HwjWKS;hy21@}ZxvBudyyS=^A1 z2&?K%x2qTOLoSMgovP<>Z&`a$$bK^HO_vT>M{`H^**y7?^*MvFH?W1;^PpXAKP&`N}M<8Rt0jzW9p)b08NKYt0 zkqGR?i7wy3+8a z9?u}@eY7#6<3j6f*3T;;K=jWGE`U%rNSC4XL+^|H*Wx%XVk9izb$<&y_2 zlq3q~?&06?BMMOAgEzVs9oXyVJuvt{Q1lyh#1fP0bWjv}Il^||3}g1s`Y?A&3i;Vw z#VrgvFmVbs!B_P8DpA}ziBcl!z7WOK}3g6w6<&DQ^%LZ|RB`W@cqI+9FLToV+UMJvwN6Y<5#*D;8$=>Kz)*E_imsl}q5N zdtl4FG5=55<`JF$aMEB8wU9emOu}GT*RH+EfJ^uCp+4f~d+w&{bF!$&O(lRt;C9y_ zDAy=l1z%Nmf_RLwWz{ZeyT2NisB@{4T=-x-1M)EE-VITW{+_q< z^7uT&&u={gORD}0O3V(Y?;6N`8Yu@=_~TznjhQnuWajl~mbO-^&|@vP8kmhEmLYBb z56$Q1^r~XB(!nY6?iBnie0+$e3tH28zm0MCh{7``&|`o_8o$ClOyzJ zlnVLj0yco1flCj(;Yo5t;GwzhDe)SNy}&tp%}2h1ZAB`jp=rK6+3)a#@?pXtsi-k)et@l()M zu5a#^#{|%f0D^)?Txq<4DI@V97Pcv*z78ED_fr#=yDO=q4tvJCO%EjGs;=A{!~%5O zj&u-3Vs`%HTQ0?@y452q6M-+eP+4=%`T@LE9!fddUIBuKlZkAw#%P@|EPPaq#0~E? z<)2zN1Cs$tF5x+9`42vbzN7C;(+G@un0c-nL{qHxN=G7>y$DJ9W@kK>xU;Z~=Y&{d z@&2Uc)&NFD(|Dre)6o2?EF16`cMfj}JXQt_hSx1kVap&PLr zq>7`-SjQZHlB`7<`_m8RV%ggi>vy}=Jm&qfOx%0QX_m5!CUqL(C%xs!_z0oSkC!J! zR3yF97eTCDrc5VuTbI7ngSo@|Ws+~!i)ESBMeTCd30NsPhhyBO5|LZv$=saUP&5(? z%ZG&SE8Pr>wgVl7#=ehYNhH0T_4V7xi2aU<6U{tK59a|FG)r ziwGk>+J+=tFtXeYQ5}g-eO{~@9bG=+>zgDa=4^soDOBqt5d@O=idj#aMpA~ZdYo3^ z4`HVB9BJ+`|ENn=Km}}|-*Q77Yb0mPaP6sZq5i}hHN=wV>7rT=a~$eR4+4ruBl@#M zv!Uk*mO}*}!G^<0gJsw(fPpO1?;2jUDakSU@agWL8q?Ln;~k;H-%<|=M`7}W7jOEl zF%E@VcJ*Z&k_(^SO_+Ej9?KE#3L$Jz8H8%yp`7$mNpA7F?>&#lF^#`&CmDIuf&sOeyx%G+J@16vo|SxsU4TO3F(ACla4QASQ!nQ=Zns0G2O$n}j>6 z*+g0{J72LquXeQqT(^peb%Um(48Xru{h!$qT)5wIPz@X)D=C6br|aNHrJMzA&5!x= zF59&h$J}gqQs1~h@4IQ~St@m~ANMsUCfUZ&{HHcYuyHsN7}fp#0_X)S&?E~3na$;L zcQ#Z~+pRPEc1-`Zcd+&{OIE7r-2GK2#tNjT$?jj-J#r%4UCC}4`EU1dZSBMQ%=th!f>OlJ*{=-6^am;xs5gc6DRz?^x08F3)0a^aq-PdiYt&dQp%cVv^V4%~2X%WNCSMTL1u- zF2J0~&J#{_=A~#te(Z05^c6^@a2T}W$F@hU!GEgtVm0RhVxxZOMv%E}H`}?%Aw;wu zMAf;i-HE1h55kws0{3OUl+qHLU*Sx=Hc?#6mJHWwhfbM7V)c*8Ci817gr9BS-l&3wG^tHeY#WAWhYqNJu@=5^TO-VpigalDo)m=&)itcc78h{Q1 z6OqjI$TBQNAVyx)aCf5SUEu3jsm9MSp>ZGr!*1g_)0#^owEZZ-y za(K2bA~e+H@IuCN#ba^?M&3Ud`Rj1IEmVB{&bD9yjC-Fzkw7vzR%_T&_Q3=;&&*QK~L2v3L?4_~C5)8}6-dYF_L7G-w=4Qx9j_$!HR@y?pJ ztWUcAdx^X`nLoZ~d>y+CtRuC|jcfp(+M~e*e|b%mnsBEjnWomWJLK}PX%;h)$AN5x z`6#rbRuYY>OJK4PX_>rQxxlo{Q3=;}Vn$}lgn3!Mp(4pmvHtBi-hcm+mhu-0zE2}y zkntd$Bt!*z8}nF0d4XJPqK3%o+kM(e0-67moYO@MUNy4se1TvQ1VF7j?*kRGcYic3 ziFLYkqUH8Xl*i}Ah3DgG_ZK`VIMPej-^S98i%0E>+PnGoq1}=#7JVQH*ez3a`zHUM z<6AP~(JqU7VZv@ET_61PW%ahiDGR|!MzG>sZrMkf9lGW(Gy8$gN<6MvK9&9_Z#!Uz39@*v-&*L7sJ~US>j&Z-*3t(S z=(rOF?uCdoQ%vf(_HrMO9y~?po%*MhK`3ayG_uauF0M9=KqUO$0T&M77$ZGM|K@d+ zAEubgPy-H0=908R zK`BxvWRY8Yc9)<-2r)uqbzvQkAe?j;Ei7rrdir^fQ*<*_XEqy6yCMy4sb>_GMz=^a zW!; z1lQBh>nA3v-$}r95BlL&ilzaYh4-D<(It0&^ho>Sox2n)a7EJNr6J;K<7Ycujwemq zVOF;H8=JorQl;)a_tPEkW{5(Z9YRcH9XToeuz6TM5p;JUB#Y08g!^s8C)}j(fYZpA zF#c!8_4TWyTmuA)+@Bdp?HAZjANyTFSs!jVcMk>J zt3a2AW)Uw7euA1yWA}ffInYY{;IoaKESEj(8J*`eYBOZi&kfe4sgb(SM|KL*tii+I z0dO#p0ek85>gaGK>ZK|iZ|~RQ#Hss{B-~roya_G1-Z3T2BEiw;ovdfVXLQ+d(08hT z55?p1+*$NUo){P1o!0pR-SRYJpyDoXl5Pp6VVGo$xs}EXZ01JOgv~+l6kU1a~i|MRP@T5?FY+!T~+V{{Uu&N=} z&J#owe0!MnR`3Fa0v((k1TL2q>&XF8f0}CRAqN>~-A-n&S;;%(=B#xZ8WoMl6`1}s%qQmvz}q`A%;SWsi5Os_dqv^o_P3%C*g zc!D~q_^P|16i9u^V6eU{U~~u0v=}?GRNYocV8=r%48`|6zM)N|ej`b>Ql##5eOC}P z;veuv{l=$MWsEa7bt!yNx095Pk?=z$?6Fkbj@#y;255&ip%8_9kvA+0IxL@Ylm zPvP(KH2q?v7V9!jQja%f*!uEyHD-*0t&C{68h!DIs_g5;M%hZ*xb^`gJ~IM4hPssdvK zZkXiSQ>tv#nn7!qi8ktGG~wQOEA7~xm+$Pz`O?iSUq@~u*8YI8sE<~jmqQSwp+&;m z!I(pCiR{Y8X-@@QP{E)LWJs|)-|j9@4+3N_@rO68A*#ddKVz@ZuA1}(l*)kUJ&;Z) zvz7ar00j0VZWk4msi#Yn_?3DsBgq9?THN3_32K=rfpt!rTqnpQ&3^yiM<`1I#ON0#UyzMX#LY4`Y5oa^{v|Nmdg`U z`fGn%BRrT=HDWEeOZv2C6h_G9+#8I5CRFCJ)W7v}%q}kiRUji0oOV4qh{5N+pobL8 zhyun8hDV!(t7H>^*ZUnwGKUE{3!WIOI-DnvY$!bUnbN+ORb+@L*h&1?ip1?t#wxw3 zBW*G#;7e5nhuP4$1gd`QV(@y5~UO zy4SXPn(_5pq6zXBM*?8&q-EguIebFnZ`)ozlL^%Ls+}oNu*u6T&z@^Q z0yf_+oQLGnPkSB)m5u_@+D{u{vWGpG(0ZRf7FHK~4#ssPk7kwG8uC&6&d>4v*@Zt` zp%9jb!nZcc?7eZ@PnHTxp{$fd^;|As(|Ra3Ut!%;6kLz8KTtaUk`3w$7^GhKVY{qm2Qi=P};Mc1|YrCRO)H{M0OPHI^IbJ{zu+UHdM6HAepZjq&T(c>JB*`R#iHd|0{rKqvz1Df4zf^OLP8XNY z_Nc`HkIl41$j7ftjE^SFYYyXb>1PPtelKX?kAhD`?!kti$K`%#^(WZR_d-q3plTY+ z!{2tT=|JDzvX6XfeH{sN;AhWUE4$I8;6YFD^=_r(KRitDLKYSd7<-RL-kO(CPO8Ox z&I6NXq3a&*o^2)G?i)_9yc2r9uzC^7sN=ZeS}J!U zmm8DmZReN;x9`u&iV78At@FYDs-)SsiDa_)nnc3ip&3^Vf#zQgW)hWx6RDIlQScHL zbTG*L8r!n_SF5qa{Jf9SlC(}$pKmm3T;wY%oLypQg*XAY)}tZ5{hAItabTQG_#8W z-`Bqw6wIg|0LdQ$$&rqFOD>{Iq&UbnW`B@FMQYQ5|&$(X1mHm#Ju$-jhmDUOhdkkFXE z2H!Ba2r|48OeHZtieswv;BAS-U~Ev9L*L9B z$L?(*_HG>Li*szb5+lByC4%6@uAG8dH3Py9B1lSi%FsWZmssXE<7t5RK^fGY&Y6hR z)a_DoPupz1k*&2SZjCdO?jw}z&I!Be5^5Uk97f_nqV>2;tC0#pQkW;@1u8|cx_1PF zI9l(<>j#v0kP!#KCnClcdnIV9!AdOnh8-CgODs&JC~z&Y0uFwZj|C}11zUO<`Cr`_ zR0ijZo{D}gnp7$$bC8AN3SBe;PXgJ%&JwxySYL%V#n+g8@};|h#pu%_N_y)Msn4WF zbgI$({B@tuHH86ftUxRFdyz7Ctf4-y`ur#QxbaG+(AA^lo5E*mp(791`foBmIG^Nc zGrB9O)tJDjF>gm^R)d||klme4$IhL9^Di1|c_rPb1tOPtN2eQG0_V=w%uN%dQeX-j zc;iADs7seZf$R-JbCv=%w zJD&Z$*&I|_KdQl>so{`D-aCN@gbD@=t4lbr#62Q!qo0ui09FbbJXYM4G^7d`z%}-& z$KfyOji58pulUGbB*vHUsH~Yc2UDej_TZL)kx4WpVA^t&xhwxRtUIrYPWMS|$G{1vvxvjyj zCw33;*cIGJi-c_8(UiXo=3ozRE*}c^#G}Wq1FB(qKfb*-^zV*Wf{|D0DCYfl>ww3u zQ&)#MXVm(fpiph?19`%1iHgi7anHNEyWS{+XZ?}5!9iV^-<_}b>_$Cr>w1!v>{Ipb z<11d<{mnUG8@b#^=}qC|bmx zak^a~f?B%Ja?X8pQ)i<$OE~_F{!Iu&?CnSNpM~sGj8yG9Gb39q#g`dnbnB>`SovewmZYyAbl=zbk?ddTHnNk zTOwr9DA;fuFgQe96vq`jwZh5PZf zDF}~1V~5*OPB(OyOg3@GOJUcYd!If=(|f>LfL81e**YoRp((eSf)cPIoI>SGV9gU( zK|M#{m#2r;n!+aG;pzi7wzHeW)KPN^$}OqxzihmM9GxbynI>{BhJO;g3H}{TlxYZEKu_^;*E~XKWn+771@swCtZJy;yEl+_6g9 ziaU3G&bO|B9y_B80+O?Te=K}8AE`q=WC8{|FO4hUW32r%K*@vgrpmXs<&tvN!lp;gcTIk4D}_E;l){4HVkcl4A*OhY6-)bwVC7*oe_>W})0J^^aQ@-i#h zd>+}oG3wKLRVITcRhi$X;qE1c>;>EMTY-gTZ_?n~=f5-VuIKTK<^P~l_@7{^K>++V zv3L0N94rMD{``J*a4CBwZpdT>-B)x$V%=_<6-ui-wuZ&M1(6?0^6bM8f%9C6QU(k3 zc)VWYUc%80&Ha-kpM^UGpH!29(N))v z9y;}k(K##-B`lW6(LqC<-xgjp7yr3vI$hi*m{a@yxY;!olsj48q7Rlj!6+h9DDa&p z-quj783vHXq{n9uhWJ0mI^8L?4Q4K52pxylcfjky0ND(~yK}}w!wqx5zSmskr)y$7 zv1z%Tx7*3zladgm1@}jyrQ8b*MmseOP5D?NL(hwQR0W7t(KXL3xMoP5wBtI(bc}nW zd)&toR%h{_Ym?nut4qn`i|mMPR*moN?4H z1fC-)%Uccsk>F+;>cj^HR50n&00gNg@B!^^HXp9zHP&aiek*!*6GG>&*RKF-_%lm~ z^5j^Esr6ZSX8sEwtc#>#B(w?P=Z)V+H$~Sy3c3rFakd+Xf4pV~4R`zER(3U8`jO+1 zF&TxyH&esux8*%6>igIQ;gZ~eTg45&-bcVtmEV=o(~(6N?Bd70+soOZR6y-AHs6jF zd`}o6L~ri<4fB*N1ZmSe)TGaW6VG|S3HX~3L=9RLJkZ4-bT;b}8@jFvi2Is9Uo`^~ ze!9B@Q27iI+IJf?dx@eBzT1xipNgB#j^$@4;lfbX2V9!^{`hqv3i(X@G(1fu!tCwA z)71AlQ*l_48N|pP&L_nuVvOcDkPMBtYhH8XZhuO-B+U?27D}fkC*S+-KD;;?%=>rJ zfqQ((wKPrVnY_palS~YLurM?Igcz z#2qo$r9v?Uxy56cnTp3oI)84rWpT`?ZSQE4Nm7)X*`rr1YiWdEhj_}LG?)sTAjL77 zpUS)|u1^YSF^I3oroRx(caP8o-LuJzSCM=1GSt3C^;4N?FSN@LI6HBB)X7TK3LKB8 zd1^Jqbo*b0Q|OJV;=N=9i-chOAm{nUVfM~{!$a+E#4ND)JK&n4sBtaOBS-GQNv1Ru z#z8`O1w&O-%Cn-^chMsf7TbK*w*E;)Jt!bw)b;o`6d}^WPy>@n-Sz{W({Fk+64swd z>vX3Td2YshUyjR8qGEPnef9=sVqU1v_#dNF@CW%(5f}@ZSuT4m^ID4;X=zoPf?H}G zR4sKqkF6__OENcu+HfmVnmN{V_dPBJrS8X2IBs#|&~ zp3Y6ROG-Q_PMX%@KVshWb)2AjL~*yvWcgh)GNCwOGxNG>AjKX?_EPWoqOEB>ffvoh zB{H&MAj%lS$xr}rB1e!P0cgy7EJ`CDO$0{vAeAWo`XMGf|3?)u`4^KceJPUqZ?HqZ zAE75-ic=)qaO36v^w(ji+jt65Ft2~S*H@29ZEc9%_X1LmFNrmg@cHn7R&(2;?Y<-q zxbURVufb=iNDqK~d+g!e`gXq&=~(sWrBZ5cP??FTJO8MS!W(GMoNW!}Ft*6oBsp8Sn^QZd*BVb8n&gXA#XaFvpZWMUHh&z4P$%L3uOmIR&Yt&=IF+f6 zG`{ye(q*V1_9P>K^@jjJ@Z5EC93>sCd1Y73^xLA;KS~ue!do55|+ zbl=&GeKsW0fd??j@@p%q&USUR_-9amDR0FG#h_3aI44RcJm?_?qC&DT-LfMeo&ggSJ^6D1-Wln$!ICh z;%zp-;ox|%@9A3ayL|_i*?0TD%1DeTPYaa7VMv`HCYF85xid(Hrs*`zh9B}zYlDg* z9?s@cyq_Z?0uKZIo-FOhUo@*i<9rXumfDy7g9hBK8JPe0+#_wp{PAP;XvCT4$6FSg zda!RU0n=`N5DHL}9m*6n;&<%?V)!9|lCKLo%f-Mq7OGLXD#93OkH3z9+u@_+&~A z->=F3O1R|nKlXXVp`kT5Yt@Sn9jfA1<-DCNa)eMeBUyr+pK@1pw`zC=tjMyLrD~*B zA(53V8ao@54~+qu6^o7mL=In;4+)>|6(^(;^EX3g$TdYPbWAVgwoTK%sc6UBcvXKd zD(A4fy-XmxFN)9UY4}rDigTYP?8U^sXrf)-3G+6@K4_rTIE?5a#;d8bNtVPq)L6<_ zz!9CIBFr$kF;`CBdgiC3!raJclsF7c9|k&ay`%#*@dEDm8Qyup^QtMnj+wv#SktCu zsDDZ9f+IJ)k;Bor?7EihciP?Wlv0;Z=fr=&D)tCOKE)3)56X5Jl*Z&hlsk;s*||ae zsao6qW@=jsx2BeF$?6n&y309dI@NL7L;_)rsaGbPD8hj~v92bsZWdZ}73TC0IbVJR;r$HoZiZJCBWwbR_SR`m-W1>%XOU~E2P)TcCPB0M8z|PzE zLs75ZAZ4zY$ZJYzV#wcJ_bm`Dd5qkF7J@!k36tKKAMXF|BfP!F(E^=;Ik&^JHcyIP z5PQHvZj(4bRJq^Pt6!ljp1IS@8FLloJR7P(;EV-xb~gz?_?bv|dMMVOa=; z15IRVj|)wvAUUR2l;mT;oU2-id@!c|tr*VGQJdfls-(e3KLi)vqIrrTNIx5L0sv9%n8ysMi_cSddt(Dz}qf_$R@ey;~~L0$LhxUI+vyJ)chHWUDW5HD0FX`q)r zP7vc`zqHTjWlm-yDe?T*%*FAsDRL}G70VgR_Y%G<;L_j&e*fOGw|4u~^^dPm`!x!) zqyM3$Wri0Vw;3FXfZz=Y$EiBL_W?O|4?C(b2o6RhVoNZv`_larXPeuvr3u&~4;kEI zB~gghW}b z-R$9s1ER<>Q%&gTn{Omstyt@7Kv>Mc#K`9vy|9NLsMEcd!o$+~);hZndu}>+z*#ty zoy=p&V&Qc259#jjM?_4YsLmUyusIyu{w75Rg#uC<;VpRjlmc%>;b_s)9tVcvFe1Fnb4!n3-_$YG(N^n1>G5Y&~SH-$*J3|VBnf&)#i4B&l zioZsK+d6xk%wq?(Ol>eZu#~gwMnZ}6)j?3tN_F2f^z$ZoK1sNOLM7`jm$2V8InYf7 zhLc-UXiY~Pm*)I)Rqo3kl0`YWvy&BCU5Kom|D5Sb)se-s%s{yLW*zd%24~?k$p|B- zgt09iLS1eZoj9QcXTZfUgbEp|7T4LRWqdXGTHihiX_*Rp(Gqr_t=Wn~dU{`y8zj^8 zU3q;|dMnC6OevfSX*t{2st1~{*-*et@I0}AMy%&shDTrAI?DQ^z6=EE^x(~R{UIkG z5N^OURIs-r zZD8yGSC=RtW|&1;^{pU1%GSFBrXIRO`v8fD4q}jNZoT) zj6tGXYYZ#!a#T3+J;2ru{Im}QmOsD{>>U87=RkH?HL0qYuhO9XZW$sD{~Q7O==&6U=N=e%tZb+R0o9L zO%(n1t-(v@c$n4(apj+mD%b~IHndp28y5G0*|gpC~h)3J^SRj1<&)$4qY* zZ1Cd(IECD4#K8p>Vm>eA2`CVa2(^!&%zKYnbUT!i$; zR;3V72JcwPzBY<40YLjjupx%5I~%pfeHz&QTt+IDL>$;>M4@VfM( z$@m*52#9-qEZmB*cdvy!YN{syrjm5A#q|sc&qTu^w#zjt03^CC4n}IEQuha12A!fp z&2d>sF^))i#q$Tyw%=rIknE+*KC6wJtUZAd@Q5k`+p$}RvM?A_B?^R; zMt)Rm8)rOMcA+BwTTA4o8*B`>msQVUO)qaZ9`PsKp>GoVF6AT>DN3mwineQpaD$eo z$Qo=qYUsnOJGq~?U^MP3jY~5I8OY0oJ!EHkh4bz@UkplkicQ5K`stk^SuJEfPJeY1 znTl-p$D43YJ!)ASTS)(oez<<>azvSd)tarlCIRyyiggS5{bz6h{;5iOcZAsew*sZ? zL(&5QDgSt8kz!Yo+EDte=p_s1+6b#2=UFSzPIIaXD>dWB*?^_9-=T&lO?!S?0(?b_ zoO&Eqs7jejrN~92?PooS5e+`;;2HOg#|gO?W=Wr!`7f`tbSJtA6kePH_JW9+K}0l; z0{bUAUY&+6HgDy&bfMHqTLiwu>|-P((ND}owPJ);`7d{)QHklz1@F;CgOzGycpL2# zP{BSbZICCKZFA8B;$Z!Q>&u5iE)KYJJX!!x`jK-(VhU7+3Re5A7{aL2G$m=bE6M}W zRSYcT6yc%!qAIMemS=^SE(on(BIz##d%~?}_71iPXF^#aQiw&LaHbrRfV(CKS?5eQ zs%YH)ljKy__MZ>-d$!@}fKJn3as5s31$!d`EJM9S@d6wf%?(*#flLOS-otytNtcz& zIx$ch%^~wYD&)SX`h$59U>DjT1Q@n92d2XDviwZuoVzVDf~NKa=7966rUFvHKCj)U zT}@mO8u)HZtIS?0>B;%R>(d^a^{ z=v7(rGwy{y21hC(8$oZqZmb+;UeaFiaV9#eX_J^&i~K-!TJEj?j0#$vF3dCRntFII zSsefG1#l*RJD%hQ4kbYujl6_NwMAeK^g_Ne1)9k{7APkG@QkYeNfRw2SJ<}`R(E{3 zEwvo8T3XwZ8=_m)F+z|+*&Ny8sr`k7PMV9Z^4Bo8#`?|OND0c)V>Xq$ouEF#WKbwGjGrtw)KaO#_rP zT_*&F?{yR_d2Cxz`-_#|!IP-IWA7R0r+IWp2}+?Dv&@|ifI#BDZ z)2xDJ1!=zWxyl8sfHFp4bm>1@dewk37*Q zZ{uOHzGB5bO}3 zF;N69N$BW6Ur#R0^r1N)+?<)&@CVktVqw!qjpx?9+Nre-RvPMnoc_IAk%U7dk_Uu^ z%pc`r%ZY4GP$$Q8!7fi9MF)jP;x6~VFF(*aj}<`a^KfV980L@57(LEn7A#l4q&j)2EFYS9#v zhHJ{~02Aldpfd|N)Xg!m6WV}GvbXg35{iuIgDdhij2S;x94eR%Sv!)6Q{>5AR&M>l zl4c8sG4Vy>3)P%S#x5@Ob*s>xT~Tbwq^~a?bBA}A!uibTPwCBcdOT{+Y~GF;%i8Y2 zBN6`2)+laB)@W+NqiO!>ld1(Nq=2}pssVm;oq*-Kag@`}Iyd>Qn8Tdo<`jOfk$g`Z zd6)Xu>wLkilrK%sU-4kw*zKa+1B}#emsrK=0qKR@C$TBy(a@KI%J)=ki*Bw&5MWtB zU__M1?gIyhgzf)leT_n9Zm~c3 zGihbJc%|;I!mBIT(49EpFJgwU{t)QCjL1w)m%x$0Yo=+Am3DBO`R-quT4vO&(G)!UWehKHjLGj-l9aXd+L%_u(iG&H6jPcG?m<8gU(9y|BAb8~OvYx}( zug@ZQ(t}nhG%)h->Ze~@H5_2{i5*#(;<(BHnsYc744j z!J5&D2Mn;F)?y@i7(9Fi7I;IYp`Y1vk0~B)Oz?W?eaH{4rQvAbqO8flj&ITQHq*i` zc6{@sAmD)JHHp0KsFYC$WA7?5dK01hnq6R@Pwg%R1|Z6cPF+tT@xZY6e8IJ#xJ&^G zB7a*5x%uF{ejpjoY0c00O>)oxDJ%z)Q_sRFVw_G@BvK{-6l#JdI4r=3tc98mqX-!> zu{_q80JSRyCdny#o*9?oi0*AZ}d(p*m5Wf2IZs^KY1+YYgs%u8MJ(l!6*UoGEd)c? z9r}YPU4xSswY4NGV|yD*ZVqZK7?jYyJv7<%GQ_;WKk2Zk*JzVEkt)p3REC`mhF@YN zbrnoJu<3SwQ5Hl4(U(!ZYA>LmAi~X55T%kzHMW$1qih1nVAlu)sZ^Q>vp6^i;1z~y zZ{8$le%`w|#lvegL$TE6N^i5$5J9G%r+4`1_d@@+MZE}i*JLeF-$R3?ZVV=P0 z6gZkO%m3e=Ng#o3jFl^+Bqag*zAbQR;BEy~00e1ZL`!TPisa?Eqt66naE0cdP_TnN zcfnym&V78~p0G=&)BAa6IEi|*5t_C^PDAg0u2v4^dk`V3cDCTx-xvXaGlWq~wU8oFu-U-U*~KNXkq#&y`57S|vPudbC-h+d z=DVgy1=JK(aBPcV0n;*JlN@{wYrZHyTQ-&B7S(e_^!&eC2sI)>8$+}J#=h-nl`!AA z1GA4=}=z;fJX99nFlA%xN-pXeLJ(gqM4RV z#^lFv=OT@q%vkHQ9>sM9T5?LQcAAJgC&+daK@g>!n%btH#j1KZ?7@ko@789g5OO}z zgF&PksUkyhTnrF@d_P(+)S`xwVVWWL7kvI$NyY+Y$!YCndG_d=>D2g@ta2H=kz!KqI5eaf2hWbLa$wMn;Klot zU0_-{I!Qm0nN5<6WRoF3GIX#zt=H~A%+%~GQcw^yc;;Ier^wP7nOfQ(+9?iL0udeo zD4+Lttl{6j^WcrA2AX#2FWie4mn!rPhQi5>0xHQ|n#a|51mMAf!2q)Zic~gCk95Pb ze6G+hk$?F1?Fme_yHNoWzHz7gE4DxUYj~F}-LjT+&s~rGp)?@CJrYxYVA9W>E;9dk zl%OrYd;0)yG0aJe+fJfi&{T}`2(h_YaxOe+XVg)*Sb@$#Q^Z$ z3V*O1`O2*6ZmRB7db>N4gn|+;N#&DY$xw#FQ#A0cy?u1hg)fe)4)vBXk zr^elTt#}V!@TZLTvdsD?G!67}TB?a zG({=PYjlzN+k(Dd!bFcHOHbki{E=f_NbYNnCWdRw(fBA1=6?R-IW9^X3LjGWRkR4b zIN6kd%Wgge%i*00PNu@aZ9QsMh7!L$ovZ{o+##v_rzs&~v8(`HXSSxMFoh5mLm(F= ze;^8cU;!cWQK8EhzdbZaqltO2^21W?P~zW_2pr`F9R;FxE-_JF1CG&$cmd$`+_~m? zT6L%7iDoQlvni^h{NJIAzQQyZa**kLld2d30{6|r19#0I(oJIXWx#oDWT2BJl3?qI z03c%pgQTC2wcm01u}% z0;W`qifB$9xu3f0&|)0Fx}5IrUql^1u537kwOalT?=U`J-b$-)+zX%k}z>L$p~dFu@p^f(8oyNh~rDBM%r7^n=03W`YHC zqrrWG)!ht0l8^g2ob|>TB6m=qn*X)r>DhJ)saXE74Uz&cT6WHlOefsi^UB%mmhi!F1>i!2PJ zFZ0NnM=1_e(fc$#RF-8feO72`h6=}26F!q4_T2gC!gzr zQqsT157=TGt2Y3!<&`gTi0#8c@{b=?oTiew5=l5>OQ8Ptx1#U(7yi24k^~&jYj8Sn zv!y~nWodu5JL)`?1>qgBi`X9gd*xW0WHji^X41p_hk*vxJQ*zVcd@~VICgK_Sh56|MW5bcqjya z6Vq1Q&2%#qL}Q5?l?6e<7;QIbsHDd^oYf z7c}WywqQWVnP@3^;9~8K)VEO3KZ0N!1MgZS){#(3LVIvaZiYPJba8-&11k+WI1^LB zW-=2B;7nj&&~eVhv5326lBl5V6yxt9 z@!cVkus2EyDQJa*?eU!E*~FNgn`t_73MWug%M6J?J>iWhVjXuXtVPceLWXL%k0Tk@ zh%#Yt_YWwH*k;KGQ>t5e3rmJ>_Z0io);%>-YjSy^^rbm1I%^20L;SbZp&QNiKK12~ zUXi)7H7%MUbruRbnOP`kciRGcVKjIWu*M!^Efd_*qKXAWhQaa8z9oD<>ML5*a-E4x zz2hOAsUG*C|cUBh6(P&?b-hn9`^H){i9^92SO<4f!gxhhfT>g zdgF>2)hyMvx~Ja1O-$mq1%&Mpbm15rnItj5n>_HW2c3 zn9)A_a_WbY%B;7+`<>GrIUL&lbiHT8v*2r9*D+PSR+h3>UIEF;-e!eI&8? zRl%sj3GYLd;Gv72*w!fyf%k!NHTPV)e84T6WT87YrNBXG#oFQX# zT#*iD{h|CxoF-ztArc;@cd-IWHPqQ`&S|< zf%yX8^pDR-r%df9vR#31hKG6mzk(J4X+l*RL9jQFB z4ccJ9p{qu7Q4ts1n1V zYHPmlatgcf93hn6C^-y6JmMO{S~y(bkAN9%Bg~8d{*D5aQi}H$!GV2EU0guVEi@G+cE7B9Bd_Eh5L5_FgCrl@fLEY;`YDhx zHLG?Fj0*cMfIae6&w9zDkQI{q9&w zM7r{dXaaQ#6o{*a!?ZGOPSRQQH+;1(0&lXqS(A)nA83w^<{iKK2z|~#SgGjSY^wUy<)i6$Y?cClXGjP0 zZAPQjyKU;~4MQ1=3nGSik^n&(dMshRbe^UgUp|Tz$80?Y&jDJ*Frxah;MYQ?__a7K zMdObdyFGXG^dH0Oid|{#Fx|nvikRyDsQUVo6+o7z;;JT5ruQ>{YrSs%T7xAXplH7jg zU|&SSb1J?CWA?ti*VTrYVx@3B2gAxn^(ErJ@y^~b$aHse6a6pI=8HHS62$INJiv*7 zVvF=;X%vPbf<0ILJ$nRPo}__cbVLNdSAG{5KkM@-{NYH~>p(NN#pPErqvt82!ZD7r z!|Y}ct3(1BKNuOT9#2Fos|GksB3!A(`MJ5J_J&^i#o94|Q~$)%#c zVy0iLfZ)FQQDSHP#Q_P65%a)QESupSwS}O*ii+z07DM1PbSw%S6^kIp^M9i2Tflw% zNe*E8E(_E0?C+GU*Cf1vq%%pA+-8sJScO~W>U{8jUYF;Kv`&8Dakc@gZqJ60z`-1) z68WaLiKCENF(EscxA;G-7+u(Z4tJ$9pldl;w+_kT4^mkSjePj76yTACWWibyRT+~I zZI~!H1yw-eW?*bdICvF|miaS9H=kw33fpR%dYxB;xJ4s9nS@u*k4nir0&XYbKtdun zYl5o`4%|j^Ai$H_{|cQEGLDFwJ2sLs~`-lnL89&*`N1inefUQc{eJ1ryN*{Hm`>kg+@;IwmpIV zMwFFM!6&qEC@^q<@QyrhnKc}x2U(PjD+ypkmALkiB z|LkKR06s5IZs*+yibv*``8B7T^D=sc&qk!W=Y&Gd|#eogv98f9*1K|$E%3o1g zcKN<9)nah8*v&BA0*!^3m%HPtJ7?R9yntD zaKw=H`f+1@C*@<$-%y!-Zb!$K<}L0*dP6y(xYkIxm{0#2SEaXf8p>DXnjN+dE}q{> zSCwUFwg{luafolWSCxMb3L^(GlG}l&q2X*EQ8NcxY=-ZXn03n{%}B_*`+`3hLXF*R zYCnzDJ}Rtpz=3)zNJNpvm#JX29Sa4x__^^v*TfWle#Kv%+W-G5_!UG}S*h-4 zY6`x0B!z2dWki7{s8Am`c8qbp^^TRD3$hv-Pjc+Wc@tJ@bd8z23=ih(|LfC6Zoj{{IFb_Dz9PyuH0&Ig-S^Eb zL1h_=EH=^j@>dBAiBg-XPtwlF-cuReClyccfUf=d2E%sqctw4o+wgm`E^@o~DhAZ! z0frESL$^H;MZlBPaL1HEQuF}4a^kuXNuRhZ1q3B~&}>UY$jIZGy9dHzG_ZQQ*NrwV zjI`gE56|Gu>EW3MLUz5K*<`}z^;l+)r}4ZJH39N_Ay_Sp&?=k`Xl)ty^bwI6@3e>$ zNxi_YucGtxCOed=RfP}9;&Y}$saRPtZu1mtfs_@wKsL$18LX7E7Wwiw-d^zHOo=2_{1DS8gf<(W)-o(=FQoN!sN?>~(=x06^ zww7y4@sn^D&dN4?E`n=z;hA0K&Hizhz^fmV$I_8tSPuWcJmgE}wLxAVN$M@-=wTfj zVVFK5RL&(1m60Knoq`V`FrW?bjer1mr;vW@1x{eHj)%eP-#nHDNyw6tlO4_!3%L(Z zEvLf478uwMN`j);uMg2kV;IN%(0IO2bNm!EoErX|Tgob~H4N3%P<|JyG~5pl`4iao zX)g>#_g(rv$y9C(m|sQKljEG2{0KeEGEn_@Xt%}q@Y#svZR|f1VwuysZViNvUNs!u z7-WUb750MZ$5%rA(e7kuuYNrV6R$BqN(@)GZ<;xgVugB;v%lBl3VDZ%+R21bIj{<$ zHhr{P=E|HhnO@uVz%#r9z|T=Z_ThJbC8gh+;^?_RUO6j`*u3ICH6K2VZ<9(;MrWMG zEHNwXU@?+}#7BEI$GB}0>{HY&Wjqiz!dQ@<;x_uryc%ENsT(vXF*_(_e)r( z*`OCUe<~nWd*xgy{~K9$XOrGO#n{DOTGMK z6(hSH+8_hJzds$R+5dP(dNpylkZvp$qiacn;Yz)4Yk9#~Xn$;Nx$=$DfplO$h@I1>UpwsNUxIZ)p)$vmynQl=%23QqV7g4nqtTIcR zjFzqXADXbX4k~JlANC64SWVd>d_T%aL!jo#a4^KnC=e{0;uc#nhAQf_z{_jWx#*k? zkQxQ5g;Q)R|9CX;g@{%cX!05V53+JB2t)wG8@`cNO{TtD zpx6z-<(-{iXAr0CR=P0PG>v`GgYMr71=ZY|BYj3Id!7n2x%01We&1K1<)FC@_qD5L z&}&baMR}GxY!k%3c**}!!$$Yrk=ll3%PKbkoD$B8#Iw_%$rzE;N^92VgSLOuMTy9( z>7qT7YB5{_GK>hR;bUA{UK3^m#iXy+EJZGtnsisZVhn#A<$08&Uj`L-SoYx72ct4z zoRjJ^V*bPU!(O`EP4=4)9aUGdF2RG+(GP-e9QG{m8@pUWg;T_ns`zU>NE%_I4bN+c zR6xRLHF^6BQg}NDF78jb_-?5y<0RoaVQAjO8i?pm>c>c@hBE zsFRPpic%j3bgM^O7?}w(?1?KJvwEU3QSW{yKlYz=vyudk*2!6P~r&`1_8R_Op zZ-;y3CuM+E-Fb`6cDU9li7j%a{LOm2!<1g#GR>*v;Mz5f4lv{|@yr^2I{}vP4B)5v z#r>Pmjn1P8Ymoz>)}aAhbyX;U**VN7B7%9=!cW>3g4wr47@Qdaj6z6J;o!r|`VA1W zPmEoW%Nz~Fq3`COm4#V(e6V|{&F&i*17Dy%AaxBuZF_YFF{=>4Z>tSaSMSC=3rItJ zsF~d$CAXGMMj!0REB?@&oVh{0+(&-YSY_+!C|vZ zS>zTjaK&CF;7|%aomlPiZr0Y+>TcRf ze_j7Z!N&SpGi$xV1!c6B(Cz*_NW_HzJ*bg%Q5;XAvD<%@qd@{d0nGhO9|@(Z;^-ni6iut%q{774Let)T3^7FASybCWRNPrH8Xp=6%iP(FKD(w(dE zPO-zQ)k2qHsw->6TPwtJrC7ukfpzVnEqsdn=}+tY8~s$vn}0;yqZ-x&gHZ?2<16hE z!+tEG192{UAlR|Upgrg>OH!~J3BzRdr?i2I0D$wnC3NIiApevLgz>GuXaH=+f+22@ z>zm%!_JOrg4Kr4N-aipuv|qycwAyXRBe}2ibp>Os8)N)Ag{3ge92o=hVpT*cd#iLa ziGF7C@2?3XjTbQbs1T~#h}_rySL*Q4_hbWqZ{sDg1Ompg1y<*pL*{u5Dw;G`cu+dO z$pYEL?+b_iLAm=Do!ERPqru!#TG=9CfouO?nsAue01tcH#)(21m&Dhc9vlw`Qx0Zl zjyvbCl#DrXkS|;O{|p%*GQqat*J|r?Y`OJ-s{U*jn@8%M4LJq<~{E)8ANn?8}K4Gl&G0Inz+rV=A5ASWZa)&qr zKVKfT8Q$l{xn!qutlnCpGkyJ<-ig$UF6-;Cv6e$01uJ+`8Jb}?@}Nfk6zbPXlQwn} z1o1H;-^E>~oE)egzm5_zw8Bc2Kkt>qt>-imb!+!3<-332ga-0ljr{g~|KxpjFA4wa zIV>pmcg_HG9s;MbB{WK=Xd#9-*2ownR$@E23GLz$cu)3(FhxfPK7>mfU{9tZkf4rh zTM2#aQEh+X{b#C)$edN{T8T=;h$;dh_H_9_T0b|AJ|!8Ph&b}cGyUlIPxOz5bQhf{yk{Kru*r%L zAp9L65y+bWQ`b7$u{rWN^U&CungSN;80b?Mdh&L(BnB0l)9H!!E$gQ&(>` zkpsu(qN>lE9KlADVAY*Wol4!ho%Qh7#v`VtSQIY~m7y$1C^;NVY5-6?IU9S|19tMA~$y_EK0Fc&+76so=(sv3A%Lb`CX;K?bZu%m*yjp(_f zuPCy4S+F5g|6Gn|^1>0pH7y5BXdEqG=Npz_9es2IgZ1l0=dVj)&1uN^XKssg%@fd0 zkiNeDv4!1(wk5uD3rISlQOgtdyOM7r{3pC2?QfLWcFWrIbkb^3$Ip1un%C~A0ov(a zK?BBkB&?33EF_vytT;tU{YJU%qaPI$cvGzSOR{dTrSA6NM8LMnG6567ez>2konsDl!>n2)@fX{L-a(^N61}uGt8$$qR2Db&*EQY;e|>j&`7V-eQgfzE(2>* zbs`S9md9<$R#0$s(ui1nyd@S-*s_ToQt8%k=1%R!5gpr^Wr2UH3PY8gBN*MK! z{yz&udZQr<0GNPhBC# z4?oR&^c6d_BX;pPwz1X66F`IA{4x6nL4n{5UH<;$^(C>q<8hASQU?MHHfYRA)03fYs>i&{4;AB ziDT!)^TFDGB0U`duD1vUhh)HH2~7o}*k0PO1|^_j)x6Vd(F=P-lmH0A9+}qi&wU2- z?CBrS1cS24UaYLzc@I#jJV@|p6WI;`0FBiRf)C;G{|~>l#k09uMrt<@5igz9Y$l-A z=?3DaSZ2Qb6a=E8Ky3c|iex~l0yHpr8^|FzFudl2Kol1Xk zydxxk9wS@$mGZ`U8DM6Or-I`zu{q^{1JvZUhj8j0F4F7XASzf6m(#`#4u$Z)$4j`w z2|$tX35b~?rm$47v9Jax>D^y)%la>@FAq{9AJT{I3FfAEWVNTlUcD8V;`}A{7)oC_ zk^19as~)Z`e783D&Y*w zu`xt=3NQ|@`U zF0^sZ+}z2ALAJETG4od9zSs?0g7fBN$efc3o#vr}3Ml%d>t#Vz?eOUP;lehIE5W>V&xhsn61Z?E6r$0 zs$fl<8tNfHu9qxaAqQu<`QhdaU{Q{+AU@<0tx7sY~gBZW9W zJLs*U2escnSsrm+Ude-1`DVF4Dk3I7=wT-H0i&0gVB( zQA@*gFr*F(;8n>(yfU&5{~R^~{HYT_lL<5KQ1$6IK3`IEJW&1{Pn=o%)trhdXIi_XJXpR8T;d)5uJ~9`Hi7_( zC?;vwHpCGQW&=b3k*mH&20OQ$yJoVRRsNCyWA|`a^oNj#$oa)$BZRnq1kz~&sX#q| ztdJTR!r7?{hb#^rmlBHkv1LCUc1>W3-IHm~QM+DGXx2X|7tz@-W8qm(ySR0r`7lSr zkUP*hj3tZogqAhixpy;f(8UXWS6@J9nPToE^0(rTQNSyOiYUswS2P5q@l7F9olR`4 zppaGf^93s(9;+_iZzL4rYFeShmTYVlZ!<*DGurYbZhYxX=7ge~p~N4FzzuiMGbUGA zMZph!`RNgt&)$jJb|b`6II7t4>g~cS#N2Lc#4)n)tIDE*!0oc&(~Y@X_8wnscS^#Clr02dkCqh)HSUi3>ApZ zz6zyG@NXzX7nl^>xS;beD>)+CbC~w(=J|T`gGyXku)h2)kXOlxgYgjt)m!%^4awl zT@q-$NIoeU#f+4~Fl`qor}#-$WE=VyE<{0-0WVn@MIBC!@7fViX!%AU*IEuG{<8;Cto{vu{ggYvpFl0z zPrCUeR5EDL`r){L47k7pKY|dAKtLucz-He@#$iubV8a+HKwu64`C3?)0~&761Ay>K zYo`t!LpCBGJa3@`*TA#%#NzDqmsxbhvfKu(0#Wrr`nGn1eI#HK~T5qnTr#Jxrq#><@_m=dfLE9 zM#jDkgQN|$)ifI;I6!Hvpc&Hh^q4Xz6wwfk#y7n|9@|d3VK)Fv<_p3QaBdh;)aw;M zzVkHNE#;1k$&qD|F*41|aHH|DbGy>4CcbBR`}EkZUDM9(6=ijr#T@y|2!Xou+wC#Z z5smS{>0-22c5i*rR!sM|xr;$(?e1*m3;HeXMrYS9%5=R0tO28|DFTd{_@AvI=Z)Tk zGT!(J^*l-^JHFFwM*U9nIHzFU=4kEd@M- z&ucw|7q0<3hxc8^M{8_Ya`W9z7SO13Bw=%glD{6T$c{^|q9sTtOt97+m|J_;b~Yv0 zA_SN_+i2-OzS$LrN9keUxB4R6vD=lf9S8y+lZIRe9HDWPyQ9it!Awcd zDEb0ohnHBfVF84v2ozFSusJ6Xq$d~{zJrwd?1}S zZUMo7c*!k^2-Gf08AsYQ$(SB{2%xRuh#Kl854kp*+m^5ipNyALb>bVB@Upa`t`Yg) z2`T#tfwNHe<41WT6@eU4Uh%oPIfxGg7UT|yydM}%YP(}EXDZ(Q{^GeJ@3u3-;S|4^ zSMa8<)IWHPyB)v*V28|11diB`42E9<=)v4Wris5+=~#TbBl?dLCJ8w!%n)S`R;fy9 z(F$#Q*hJY{)8{#k3Xr+y9w=?-xu5rMxUqW&Kf#&ib*innm^r==msn*vApc z`|*lVp59KYUjdE@>8cM#RB+#gAA{K#WvrzsqlN0FNP$ABXwt`LBsai`7=jp&B&;Tk zx(BX!yXr=kxVq3AgEA-Vj;L1l$|rf7d!B#v2)hMmsDNiWAHgEtTAidu+Lbv0Wx6^# zvXN5p^q#2h%@{h*h)*T$9MLazj=>wk=~woW(BGJ*Jr_1xcjVQ2VF*d-Wag{{@WTPk z;#wHOD8Ui+K1Z0yQdNhma|TRjh*5o9$*Krv7`kjy40yJD@vjE)E<=CQ>0{05D~(F4 zzZY7=#vm9JOZR3bBme32mK_;fagKK>A0PYK>z5VtPKsvTADK7xmE1$z@x|wJJIV9W zpRMH@66b`{4Rb%)_3qSi%5se$*PFKn8u}!)R5D%6Fxz7?B`|9|WX-$!(SH|Ssk*@> z6G%dypLA*x<^OZQFi?n!cG1Exdjpjl6faoz^wkgHMndx5T+bjHdE1)=^?r|iNE)); z9Z)#Xp{Nf6ueXEFRDFO(DO!Y(+T6#huVUICa68(nuG7SCHgb8z!Es0+ASuvg=HRdU zECSn(0QfgyPMg$N&UOYSs0(Q?oL4Xs_-45n+#iA+e z1LnJ?do2(XVm@`&$sHK)2Dh+A*1FVVe|EOsi$)PNykJN(g9OeM1--ST~-f3gj8bB!0Vy5r7GlwX#EDsoxJ z0bm`=+p@=r+lGQk6=w+lQh@eg4>iZigt_Xh7EC|z|B(6M*-cBGWAv*@)OHi5q6}9A zw>LP9b0N!RcSVPbXE^>Uk^Ehgk#{CR6s*A?mf3Ft0n zZmgv8nXJQ4^jngY*m|*F_l9b61)jNG=f`!(3SIn?{9mWN4mxRK$37sLQFc*m4WQZC zB!6DV#3@ZnBv%5ZW_dA*;8sQ=QbOa{V~epqzUj7W4KBx&(A{&SNyS8fqCydcC7y^u zpITxA!&3=M3_WVEsZq=>27Y?0E3P@&SK_X}?k@F#3|g9MC{z^|9lm!BWqjJgAKW8k zyZk>bz}pct527~&JWe}9(ZNN67_Jbk`N>Lqdaj#b2GZ)F7Lq4xq_(;KzP3rFD4 zDUz`i^>d?mz4jJC=d~z{XRFph`OH8<|JRx$7GfM#^N~0+Pf76v__PazvPDm;$J=jd{VVTu?y^; z;DUd*t=^F$2P40&r<7OqRdD;`(BWX90QOtZphe&W(r1N0m!DDi?x*cHOo0%qZ5Dw5 z!iQrZU`-Z8zCExTS@Wom77#eW%`4-1o6@ZeeOp{7Y#^uZ2=Bfwp0EBJ)a~vJe>>py z8AXC))@A?%uR~@#4zpOU^1^eBy!DH46n+L`&&iX^}O7PC@?Sk&0VKkZ_h!;p({yn zo!iQ49ljJ22yeaA7Sl%(%Yzur*nbGq_@fXQd>Dx&dQ5>+i~Nn><%Cs3(EI18I|bIl zPr%SKOb32jrd z;jf6FjUI7^W%y@F+af~sw|U|F<%u*eBW%?VE43+o-{6!@EJ(VfkWI>BHCWJyxW=~+ zF};D#;0nJ@)hUxM^qr3d3F-;=lDgL{=zrQ4j{8v2)hlXQf0d}Z<|qEv+)gUk_~}#o z{jd?&0(S5!C+637Pt<2?pVi5MzMG}Ds8??`%)_)D`A0sVtJsa{W=S_4c(twP6@5oN z_$%uR0kDGVgcP%}_-Z7|VTVAq)N^k@-ho8up)|jN{u_8%8KYxBQjt;ifATm_8r{_V z5&?f>^YR|bMkpgydutfH4Y#&tdLW%U&2$O>vfFA62T}Cdl$*Q?Y{WpUf1*1;p8E#2AD!pfX4JW?1rKi+l$;>%(%_#Tue1r^eNS@H8m~HjpCRl z{?Y+YpcZI17)8M*&pw6+!}YBDGJMB?^mq`g1mIA(Gge|isIX4iKHe#6qr~Ls!NCM< zkJ)X7C+#muLkbyCy|rI{p)FE=K~g}F5?;P}z60D&tDWa=XcP`kP8xS+F2UJwFvBLZ zLhJyAP{4p;)a+Ue4>qEd@jkT*bXjb49NSvtWKMBX9O#jZP`3kQ^dEM5%gU2gFgIoH}ECk<`S z`0hk1`Ic>zu$*IbeGL{_6n9%?f4nn1|BjXFOxWLBbY9(Egi}1sm1`-e?mB+aSKW6F zee=qMCmZm_-?Pzbg)oSiM1+EO4`8qfvR(t8a)Eo6y)5uw#&z6aT89UeGpH9x&?U^$ zmak9dCd!SJ(}f6Knt4gJ?k3;Rhx+_I>M9z268@N$&H<6mzr+*WZ<4c(x`~aY(UGN1 zcnT(Q$KHeZcHZ*O5h^W+9Dabd`mP)@HEAffx}roE7FeJ3L#ak8wLING-pE6%u+_dj zxu^OTjX@-}Zs&Y~aD?J3NNT=u+-Mj*mxpg_wcKs}wtluPS(&C(dHiD+s z*n8~ltL4VaBd$W0f^`NQMdcXYjG;Mkf#)sjM0Rk-E<{Lk%00IR7ZIF;_&;zC6-gUu z<4;?wdg5Z^aKSOy$9{Kn596a*N}BLapmtoD7ba}uNz<*MW=KO@B3=lYHxMde zSUqr|bVc1H)4+!e3qY2Q(_5(SVp=JSB~Pp$eGAHQ8mdIN5%Qp&W#$)CcgPwWCG z#v~X#m<>855mCJ$yxiO&0^nXz#57$fg;YkCb4Nyed8i|2$KI=3a`F(sx~*x9Ui%w( zC$LhqHGB|xT7MQsS+7kic>I}-z=0(tF!{dwYmKuh^ucTF&W+do&bb9say;ryX zNprpm#IPp`l#jlb)BxH-5RY&vn$w);7?Nfal2Xp#lwJoy-r#kmA||Dy37%a0V~E6v z-kV&aeU2HT+pWk#7?ki@>k7gexd!wz=n<8`?v2G@-|ZO6u8n%qQxJ z2~@!sz)AneQUw`n8jNKuL3sG+;lJfu?4O5oNy_r z3i>(7o|rJ;s-3W zzh)a+iFPoqE7^c`E9wJ=FIcAkoLb=O){vdcy#&dyuM(ff7P%;1pAL)IUeh0FCugJa*7 zO}`ZUc^Q_~L%koVlf;J&PBgK>(P2e*2{PYmI*RVHd0+otaIYbH)G0R14+zmEd5=}X zE&BRtmwjrVG$if!?R6a*1*up-+pnMKRyfV@Nlu}XLw#a~V{qax-i~lkJ{hZ)QEFLP z{>|z~vDDy+l`LviCNhnNYAc^cU^OaZnm_oWFKfY4^T7|ZqT|k$0KwYMO}2DgFRcc{ zC&VbF{ZmU0$!csvbbYGgiNSGnE<&I3fxbpKTmH#W#9EXAZVfmiiY)J$AMea`bQn=IF~n4S`u zJMrU5O?y`W3?xWF4%c`}JtF_bO9dX#|Lw378DN>~^nR!Bksz2V3^#Y_I-HhmsoL4a z;R|hWU|82TOT>Zi-&f-fldccU(Di7r6L)Tz4$zdzG?HneGf-Ia6Q`|cLQl(14T8z6 zGn++`qElMaOK5!v2yJq&8TIfDB&A9xN&_&f>0$9Ijs21_3RrXGXgCyzx7M=q8=gcI zAOh7%j9J5lxsh6j}|<GTmt6=*y^+0SHagB=i|m*zdJ~In%f(S;l8R$WQ~ZH3%JwfUna+m2E8VzRbP29Y14So6u0tfZ<217a(0W>a+9@>)%h$b0NB?d7cZW#LZpxY91q53oA zZyqz>>&L{LNlT33K5+}!wq!ktXk(swEZ|Tw%1Dz!Ct8>6f_R5j4!)+_Kk9O)E?a9p52y&X9eR zNVYt{&u93QT+ciZ88>RE*r1yk)e!eC&6d_*)CR5SsQG#4xw*eQs;F_Yg^Vhq^nap=N^l=t`m~xreCj#cx^3}~5RspSlV!ez`Jk(Mzhw9be zvX5CUwUI{jIF!V$e?1m}#jIRaZ3COhBfG`GXYFN>IJo#Xek1&9T~Fk&0B~cCi`?*w zfW7~D0Q(8vwoRwZ(xW-2_#T(SJ5C)Pdu3sb!o$4H2)lIIybCQIo!Jt{cxAuV@}3-y z20pS@l{9jiHX29Gw+s5!zYL61ht7rl;g6>ZWaL#UNH|dr(z@(d0yVe8mQ^a~`iBv7 z1M-dIZ48@cQSzT}nb*%KVu-(CetgfV^?#^eX5}(r8rigHU69Vp;x7m5OhR6|V9vBLXLB4~NWD@rhCPKp0=3YFK7OC@hbjZo z-x~0$K|hQZaJIiFtVgGsg5yq_9tB&n>c8Hnn*GuGdl@J;^UIx~SDnQU3(1?f5HT;) zNo1hj3)f)7H1NR*v^?E5`gzXP-hO|KlF<0Z49loduk=8gBtN{;nC7;wf@~BO6LK9v z8gj6R7S7BwFpmu0))Yda#E8CqJhB!;2fQ6W4mrsdCFztii+bj$i}dgS#l5lq123?U zXdiHX8aB3Y4Z6$sW!Zj1>_5x+Cpp~Rdxmzz?Tf%lhnwQmozWC@m8?Lt`H1;^Y3`is z-E>WaYW259TZ;r>(n+P(EYtO%Y|5#t(u^7_5RTzTE>%%9eCh<*$nx2QRh+uCq z%SZ9XCeKsjmg|)B&j}G`73P^!N9r$^w|n5 zVsZR34grD9iXM9iJ50AILg0V(E6>LAF8Lr71l*pjO9et`%v_IG+6~}B9?yeJ^tHOAPq4`b+V=p8@sFZb6P|KB_&Ob6mx$J>$Z<7VrRxxA}w^%PLc@y&+!r90l`*}5hB@yyY)9nHttg%Wdb zpv>{q+g?x1`s~pGXH~;x?d`Fd#J~ZH@ZyWW5&<7S;rfz-#E$akd~d}T#neR=02foxf4M%EW+zoT4W<@a%6}7XxPMHh%k1TvPgb`h z(Bh9}zxk+Bc2!Iu$ITY1xxlkRy}!VI@a={QOL9Oz#$Lo4iT)^DKf93q(~wPkRXeHt zcy|#h?biXhbSKAy{>sZi`Ig(F5u-F@%H90EAJ9|=ExKJqTx$GJXdOtAZ*b&P7tngO zV~aZfv{F()r;n#@v`-~NReZ^lhf|k`sv{efe6}RugQ@p5nSbZ}l*_G;?>|)`hFp1PtAM=9gf#p~UU}5%Q1;xPLp&&vXE_2UfjyuZIJ!GPB(Mg98m-5`6QkI1qSP zt1S7;vtEZA`pu%pO2V7gI*mxKOhLXkHyaUlzC;P%6pTl%k3;0GYl=Mmu3A!gya_yi z>~^HvUPQl5D1D&JohBM|#67E#-Kl(ErP^`sIx4-&&mLRn$()(w0A@9AWla?FW<%zX zDbz(wyvMufW;lKQt;o#}2Q&V-qvJV*eLaJ>vrX-V)$ZL6M1m9$3%TN)ew&kgW$u2y z@w0B2^IG)reBkwOz^A1MK++wv!SRQHogg6G0edZ2pQ!x{EuO0T?OM zJrk)$SNA=9@1fL$t3|S3E}Qv_<}8Sar!!XaDw7E}*Sal++R&^9TfV#_D~~1dgHiLe zlfk1x!r+{;u=Q~u(@EV^rSpKGnGlzZ5RglQCY;c^w>`tA1@v`u)K7hacBKF zE$Jn6yj2cQkX>mkQ~2y2nv*3Kt@y6sYi|j!m9KK|n60G8Kbwl6+0^H59-dJ!1n>!~ z7|BN*-QlAJ>E+&MI=i7f#a|Ba{8Iu&#-@_f<43;}>PyG?UJ%Zv>-qm^I>+$1-nVN{ z&=`}(P8!>`?KHO0*iITYZrs>LW81bHHCAKm-M{~PJl|)&%rX1k*S)T_&h?3*18dzG z(GhGM7rQ)d0_^*{z61PNbjXkqG^lqdl91~WpI@1~0B7_&a>oNMNhY61^;$;E9mxt} zZMZ*>T{VtSS@%(%ii_BS2a(p$U1MZ(E8C;5sSxX~Lyb195s^Aeu6V4^kuGalM`JDf z5ELKGo@UsYmls>W(wQ7@e;yuSa6HgBfmb^&WUB}1I>Z^t`zd(Gob?y6(2dqHEowdQ zBDvx2e`gqh5`uPUxnBNplFVO{aPXNxL}e{rhHzw;Cx!B)clHZ)%92qBC(uTQ4l+LL z0Ds4TpI}a}%7$ru&%oeayZxbfqP6OG=;Z9Q@-O&xT_Lb~QpsTjkH0sJr89HGrA|k~ zV873L*4%~qBp8`eiw71ePVk`8mXGDD9=t){dKC`pp>3u>6@K+EN*Q(PDY?X-U5C{y zaGD?`a$}!RxKpFlVQHVwMh?PCJ=}M(Mqf@FV^`((t5M4=*Jbf&@4N(Hi@IR^{+-oN zYc!!f)e68tTAc92JP*-~=<$JBf5O>-JX@tf32c!woH zh)Ya9+KT1q$op>7zPO~#XtDIY>2wuaH!h@-2f4dC1}BzRSInv>B*_}cmTe_f-fa!q zCx)$(J2AuA?mBFrey`{#UZg%=Y4i|hJJX2GXf@G~Q-H5Pvd_sq(^!EoWyxLZ0Q{+h zX<8_)iEMA$1%-eI1sE7QEZV*SyPx~SGPM%g!1&H9iY5{}(+C?tKswCwAnGm1$!R6X zzeMuk?U8x~RutDHulqnHhQIS(n&aOE{si>tAN@rtCuPWB(MSFN#$9G)5@>C}CqDL{ zb`?_i2Z+99n#q9jV`#8E-#Hl24(c&(o9Y=C!ZmO=4f<4fj?J)Cr|EAAuo8 z%I}w;XH8(=gImk5*=_!;Z{U6ap-Ww!AIBI!@_SZ`L|r;ot7uP~&X>`Q#+Qf)L?FvX z+%!>dv*6>^=MgLC7`SbDf6QyHC#H?gzV;Qjr=s&6CsC0IQvRsb^AJj~(}jqsFCi8ojSEcGeFrMhkohEki>w!0dScz)IwHB! z`IQqw6%_exOvOgAn0;pl+~zqkcb8awPw-_pmhj5bQt|yT0PV&xrZdx`Jr;oro{Pk! zI|BM-ieh79XL2X<*pmo!dEoqZI9lla`=}#=?e)izXd9*wL|ysRnU>p(?Z^7+_Hd!cr4BQcWp0y8F|YwksfB9c+?jtZ@5@ld0OJqFu}pkuc{iLol7C@ zvIL!Asn$wwe~q{A89%QixP>hsc^7X;{*d`3T&Gim3EIelxyP+ z*US9i(5y$v=_FO3<*_hy&R2*6W9zGiBydvmvti*FQWacKbV?_J|-z)S+s$cZ6(qE+Be*ErRt5v)+2{wuF z=$jRoiwVBpitY09_kT~_SGc@TkPn+%K=$M9Vz~>NORcO8$fJlEq5_UV?mGq}*Vd?k z<^^?@Nwoj?5G@+-LZI;VIlmh6Bw6=ska3R0o1377@_$C}f9Ue~x03NYv!F?V-mJKE zvT>MPUOhwbkiukk%E;O=LlzY`0td4!6tb;^aK zbPS#+7!t6Q05&!Pvk@DHy)pgB$_qzw_|LMr>RtK<;jyk1&zPEo)feVGB~3>U(ATof zHFl|e6kf@>@uaSE3yJI2SA9GuB)5OZ@sGB94g543*KgkJ;-W~odx;r|RuH`VAOn%~q8HlY_x>Vk{o+XlQ*_`kp$>Fh%NKA~gj{Cw}xlN(cs8#m| zF$}=(VpMFoU8+TCj=k1<{^dooW+2ZaA|l>OCm$ZwR8qxVZi_d6b74T}*Vp`p_xZV8 ztRBhJC7%G5kA)x3p-wc~glX`7kO!_8Rx(67pJldJ*uU-%|2hG<{{3226*pk# zb^U8SgBb*;YpGo8*3`vit8@Crt7#d*)bVWaI1#s1v{ty0L!!KbMzywB5`T-^d!^JS zNe2IS$px9YO3StjXw)xPHJWKXlD!=(xTtQF zxHgj$aWYC$+fS;FdQpuI{Sy;k;}SH^U$i-C)SNEMNl9(%XlYG$H7<&;II9d8_JhSn zE(GN-yn;iLIC@2#rStHdtLW<=ip$E2?*_R#tog5Fgt}9UHcF9wB;3o^B{71_M{Wp- z%qaePh;>PdO|eDjeG{6Rv8T;)wu>*f>obl-Z6T`fCT2`Yohcz%fKJM=ZX?a|~1}`GX8gL%=plu6_qKM*41y=1BCMxDr$fe-Clp>N3P~d|A zcNE~5DoqLQ3I2~cgFpiP&)5rm0NSBO_WOGBLfz=qrvW@`Hkc+0z%Fw~;!2={sJiRf zhC>FdlLY8tsk-Ye@I{!-d(0~SS5bywe96@tk+$nP*qt`FQ&F;_bCuqJdR63Sc46-D zQf12!oV)Li+LEhoDAFK>zIY#vG$E#Ks-!5KnZ$j)vlB6_A_jQ+k!$~iI`U_72b)Z< zp>J*fPRyZq&jUU-a;y)lp?Z;bO408XHasiw(f*3v>R)eoN`;VIL0Tt-%kZOS4~iO+ z(_}Q6WDYfx|GFjoUN=%J=Y$>J;pqSL{N)K}0h8#9-TSEEGm3Lpuy{g#w!~7R*)m7! zdGILn(D3bvTX?xlk^uH(b$_9P?i&Ao*Vl3M96RnRKeU6<AwKQN_I1}hED3R;N)%6sz{5ATtMLZW*0zPRu26 zLV!`9%kL8wm=r>+>*Rd1V8z0Q$UlL!HLW#U$^d(Hf6Ik?d|9{Q9ZS}v3z z;S&>|Cfksbkt}UvBXHQVSt`Fr!Dq5*`M2?Fsi+M~Pkog- zUOws1@+mj^pMSCMd!OgD-m28WL**E;S^O9hU(y&)+QeIJr6^HFm)Z+q^YG%fLG(;Y zY{C(iAUFt0R$;5);8FncKjN~nu~7x&5=FG~Qw{tx{&g^c{u|_)jI~wt!rEijT!t*n zlxyY`DzYxB;SX%54FvTQXTJ_*lUoNCD%^sspYOe<60{n8;s1A~F2!frI1eFlf^ zQd}Hzm|t7jNTH2?Tf66(G82SotP2n*?yCofP104jeCK}Rh@G*^jyy znn4dDbq3s^jzEaX_>b?pGC73kXuyGk@8nF_WE-%tIi_qN<7qlla#15(TwIK__}*%` z@p+qaUORlza=onrBR6eb_ays})wjIdG+Tf%--L3RJ}@#=&K z?m?}yh&-<-g;aS%FhVhEX|Ha((&Du$6VBsD5QNmb2r)+_4DQ^LMkKkuD36+?{85xf zlVHrZ&{I|4A?fWA7LS!gI`fEKoM6@e|$iT8{-g&?%oa6NQnTpwYbXpLEK7O7-}x&JlFBP73FC!#hxHKV<*~ zb)6s_g_K{j#xnKU2W#l-*BQOco1RWoPM^qmxRLr(0FHXagFb=9Xu1x;n9^#A8|2gdH;;S%&?^nRE`@&Hq++Od=xqBq1|~-p55Jl6W8?@(XBbD{b{1hRbczlOiebSg|AgJFAgt8C-i679@f3^{ z)W;SXgL21<-*xlu+!|eby-MZ=51EvgcZqy`IqWb~Zf*}W ztx|-7;Q7YYK=KJOPs3O{+hX{0Q}x<6SQIr&%eaKQwe)oP&xE)$3CRJ-|FEq}EBlF- zxE54iRti3yZvubFUeuCP-DIR%S}MGE1> zU7Z6L9KyGMrD zD%E5}Q{6gGh^c9w1ha)KAxMz;;W9GP)gP(;mnQ5O9eOoF74;+#e7l{$?SVp_$>ebn z4P@rugOQZ0^ugz{SI?8vZ=O(?!3wVY7zBx?QYfM%^tV{Y?)=o;`mMpvu~_zWa8glB z6%@N5XqGhg8-6xrnl`gmwjeE4F$Z^jBVv3hD1rZcKk30q;eudCA$sT50{TLoOzj@> zzimqvh_ZDtVVc}&Fq(Zr!>JL&y|08xt94%0VHEoA?haKoz*?F# zN>F(wQ|(!z{glzWQI8^N&yCvnI8sAp;Q$uS&k|QJDeM9Aj5N~TV0eIM?4BfK=O>dx z`^kP1-DeVZez-UQ=W>S>-xWR}M=SBhyaMFty(W;l{Y7K47l4F4G=hjLh`)7oRK}Eyc~^EUpjM+Ke-59~!E=hJrH&-dII0m?Wfx z#D}fNF>31y9p6YwDm=0uF%VqJ4HA_n^8L0;`91^;$cx+{2)}{tez#Y5b&cR4FZCZMFYIGV>3Eg=i5mvRZx+?HjH$b*4*;v{KPBDu=8!KB- z?XChPy9ac!jmgU`z9Hae^SbG2%XTg_Q&mmla}laZyD+1r#8#}3JBVm8AAOuyn%5L- zV-tm-45i%Ua6zi`Fs0%BvVq!vb>lN^&FnljdLDAwSTd0#8FS}`kon00LJ+FQ*KR}7 zJ78XFVPm6axIwl?G?gHha9!RqlQ$TPDNT%FGNxQX8j63%`}uj%vvTWqC<@WZS3j4a zF=|wvwv+36>#54budNd*?vSVx3cBvIIoZBn7YllRq7i&A*YBQN3R9*TcSLM#R`Qu9 zoF;|`b8>K&uWx|hNaHR^_5f$Xy1kYd^P$Q+@HbNj(r>V&7v0p;AkvF*)q8V%Z^0vu z>MpkfX0d3L`8l3Gh?)v0ZY`z*P0oI=#Yx_nkQ9g&^RgslwI$9Y z=1>0Ww%?;$Rug`7G!C$pF6GYfw)*OEt;J)>(l_(pd~(?fJK&3^zKAcjte8Z_>REbr z&OUL3W`;(y2>jGf12L_^^bsWb#Olh!Dg9-j6d4?LLlQv= z1+3B#L`y`5fs~Hk_7dQ;ZUFAU{RAN`neh}2B?rx3O;J^cn_vHpc;*$^smL@T17?h4 zx%!MpE0;C7%2V6^D!v$E>*>V*N`{h_vVDo}SDQyP)mEw0vCteHdH6s6^Ko6mJNF>4 z;GJ0Y7U7pkfwlTiQ8;yMqc*s=qSVw_pMQ`PBCb5o?bJPD)0+ zE=y6etQNf!@1CRqLbR(EM%V-ZM>SZ@ekt-4y*vjO$R=YXs(6DTrGWwZSMZE72ITDq z44jwh`jFrGK6GH7JWwm~@3&~QY|%Gzg!FMfI&BpN%?=X-d3YEP`0ud|N`gvk_F}~Q zX2N&^37(rP%2KKNo|FvyrdW&1%b$d^;6h9H#FiZ|mAN|a4*jumvI;3m5JCjdr-Kg8+w?ZMaI;|M>8_tk`B4#9KIPoFe4%FYsx3{iUsZ&BP>if8dh}aR=8ylUsCm9)5lXO7Ui#-W1GLjrGb?;>? z3;*sdt~xO&fm9y?Yw*s4h+lrX^AW4F(>NpX5C`A$LH}u$0s*O_s*Hj_F<1m)w~KaK z_RF)?p`iD5>$26$lwU14)0=@>+0PGI-?jJHb?JNTHVk8*?6KgDH$--7_*jF_g^2gT z6PML#xKE$c%_t*rTFet!PeuK7y3}Eg3qp*o?V_7@Pl|nxx^zyep-;|I$F=|2-;fjq zPzc9uG80pQmrJp=!|#v{#jsLy@WYz|-_bu<17++lNp+w32B<(ye~nJM6>RW7$*=Sd zRw$E>gOKv+_du=qu@75Hv3I0 zNfgpj*}D_0AMRdb$2xe;6B&#&-Mh3TsWf4=8lR>IEd6t&(a&yvxAKDgK3!PPxuv~ zl35mUU<3i~-KHt%ERw)eqdrTu?YK3s*TONx-oL)1)dri$E6VGkQ+te7$_4r(rgnr? zz6Rf~QBVjdW0{v!;Q3^r%}KAy98W-u7EL-Mt}tX- zAzj!Xd6Li=)6iA4Sg_n?H9Vra3H%zWxLN%ZWM-co^r!RhHaC;!`(vKhWbrcOn{aE{ z)aP>woe<7BCE=bPuXI!DhZWvqoFgC|JEVGL65n3EfD}_E6j9)eL~2&>j3v|HLl1d% z`#)aZi;kPmK%NBaMbVQVNnRU2La{_ zGFXOpr*md;vFMKlS{GywagqY=O)3>WhQ@1uh=?{Q#Lmu+1y%I;4OBC5ce)%7qgK?S zWsFM(2H=mEB=lck^H6B494`5*o4#WaLf8MuP%4|!sZkPsjqVKJ#4+(_YN5(U&Hx`4+mM{=M2V=(zk>=EUAXBl={9qzkf`j zxJ<`X-C-6vyM36Nb`*@CXmA~nTEX$jju!1#6{*U@m80w-Eafz` z)4l2GkaxGY6ANz<$(P|d7)AE;KKiKn2$>0)G zJAH+u^^*J-_d{aMnI=>>ZnG`lpSA%j7V%V<`Q|0F*K#S!hTX9uD6Nv4Y|-Ie9O`mV zP-5&D1YJ=a5;{+F-rnx}yb`FyM;t3svawxH$x+7*YQ^(2@qmTGjha=f6hG1g#aO}b z`DyvMD0NGvEP&At7=Cr)7bk4c4F@Gu)YtA?7s@B^> z>+{0VEM(&J3f`MJ1u5tC&61`wt0MA*=?2Eo0W(Ic1Y#eC7^&le+-2)-Q}4o;QC6q4 zVU&(CNvc~C49TZ&8S$d=U!mO^j@aO;rq=@%+C$$3r`7o*lVfL(Fq;J zU+J(Ey?$FU7ys}jMV~__Q#%(+LCr;8S|Kt?7+i!3=~&XOY8&wYb##60^VBa~UD~w# zGfK^FOA=ojnCuLL=L_D2BoXwFd6#q9(})BX3=x*2aIk7slsoTuN{7l3c@_)$vDDCZ7cML z-g0t?4BB-e>FMd;DHt|ke88;2aC`_;Nt`&nmUx1uyO4PA5I7+MpM;#6zJhiH=oVYQ zW=VbDED2)r4oP78({}bn29#!}8*g`cp|eERBRhpH6F0871J!%hw!anoRVPki#)CL! zmiM4r-FjXZnb7@BrY9rLvP-bVlVRE1D<-_VdD$jMLGD^@EWDCxl;{B8RM&peh3-Q9 zpkEC=9J>0aDn>89KaCo^V`o_rwSq{3oI1m%0bl#aCHmf+)4XfraQ<%bZjQK=MvcMS=KI^rVf}D!Rus4| zU?&uN4xp_7R%{?RN07VwID(uIvjZfJ*kL-5A;7VOd`p+NwVlMdGk`HW;X4C_Sdto1 z2!wD1r~a5`g6M&osQ#|erW<=uDtXaDQN)$gv{XiwItA{LHcJw_rHZWix;x>09*K-f z-=k6ne|FbP%swxYWu9*SUFYOSv-_QD? zRw0OqtjXG!{-I^cfSmm0$GYJ-8H#`;%6H*^Nh{O#x*0m+mzX>%*=;-T){kZ+y`F@X8UK6TWc(0+`V1(tj6X}9E4&m!Ybe8Y2xuuA| zxg{d7;Ws86;pgWu(vN%J5(%UQ_PaFvt!6x-j2jxo<*$K;_L|5W2N)z&m|IV^nZ7e zvl{(%)A!Wj^5E}%nq}8;*B^%&0qYImXvE~Orc^dFcn2tEn+Sc5|G{Q!f^bE{AX`LB z7i)a4MAJFlOgwMgZk9G~m-uv#3pQXeK-y}$VpK|aa)%5&63M3VyNzzdGh|8~`LPkD zh{OwsMvs3Hv7q^x=H93JZ-<^I8=S@&PfiJyZ!_6zW3U*~#9S*mW$my)*Upl44~xAG1R zbV`t``X-Et=k!md)_SF{`y9Bp-IRRfuO*&K1?>82_ouSspo$XG>xW-}bMYq`O!lo7 zBG@EJ0M5J)Fn~kDeY_qD%>z743`7>2i##9^9XR7br-)aMU}OJ-AY}MAENNkNQJJDw zF;zeIgg~C?TGN|N=#=6>UzlVzsDBV)0+}yEQ+>#DfRVf3o-r92hB-m!84hE_A1Pv~ z&n$k1Ty-g@v#KFhlH*e?{Ja5N!;<`97+1tsO@UYJ86VUR9Hf}(VCHXZp8Da@Np396 zNluk@Q*yAadF~g`Zu$2G8#B`^=%6xc{lpv8bRWiGmd`L(3mJJ4{`2*ZtJ3jSLp;H% zYxO}HkF;kA@E}x~OCti$=xM`YIO(eqS}2sV7?rcVUxrwI{7#HJD8=o-L*(;?p!{!g zj5qJj1XBG53vz$+XU_?cSqGDa(CrP}=NRg8WzA_}9Jj&xFF5**mw$}#Kv#DYpLz?W zbKK<8t4Z~8)lr;tVDsWCE=iI=#@w3X9R>i$H%Aavl%u29E9v|TFsb$ABCxE@qk}>m zW(glUav2ZnVDrX{je=!#LSBWlHl$wi^P*rGduCyx*i+|&WOB0lKIx2gG3zs4My@xF zQ>{jxu@#-Z?w%B!S%zs_U6LbS4*6}n6iqAc<2}&7%0dzs2#|DH6lF=+kt}?QZX4=P zI<~@yu6O&+RT5Pl5l(p-F}@0dLuYz6!(Hf*|IhMAwhN#lR*$7MsLx3~W0n7K3R|J~ zfOY`lX#q$y(6{4o&4mb%cc5@GdELqpSjLD#Xerbkm_U770Li<6qLuVy7r%%wBzKtZr5BEAD9^&kExqI zVP*R8Z(}T&S$#8P8H%n)^;Z*ws3wZ&XkUwS(vJHc8V*!O>`zXWL0r#51)eQf&zs3p zred`NQZtiK!Oe9U4}sqaC`4x}Jh##mwa=&wv;EuUE!r^f>{pxya9LInQR#Gw~e!H)>wElQ!gd%XIY3hnyM-;HKa&X8a z_ItR25q=yBt5VlgtB6fNA8wv|aL}t3b%g9$^Vud5xID61>xAXOoJ`5Z%V7S@-cF2h0sNcSN1ZxZ)l!EQ zJ*QO@-j~WJ$Jv6p8Ip~c9@@2zbJHvzC#wj?mkH6f$M2y#-q(N1-ELF4ILj>4rG7q{ z$?KB&y{$!AUCZo#^#VzKyv0&kZ@n|_I|m-1mETHjwW@mk6FGgnnq8yT*EHES$ZE=*J+k~4g}4yC215AS+=>!h<9p7Mi8D;`!F*E3`NF}VflERb@X zf1^|)CsfZovD13r_;7T5xCz(SDm!nO{)^$H$l-jnj`Av90B6M0j+v8yliRC`gGw^s zBXFv_lwTZT;PkR>0y9g8rGS(>Djw<^%2?iF-I!nc@u1O!Yb;quANvXK--;TT4YwRD zrc8yc_A6&Ru4)DSNMU~*PjEhxXwY>w-7;y{Q6E4c)73q$9VRLWC-zU9Jc$DTpBLa@ zI_Cn(8j45C3x%cJBCR0!U>|=YqiqRS1*Ojv0Ag)_;Dlg(B@S=o9SqF!D%58sy>V-e zp6*`_Wbn2#t@G*~Ufq>f!9stryP-dm!bB%yGu8jJ+o@PR#mV-98K}*%W2;eq!*$HHF$te(({TMk6BEP9_qXAOOU019bRUxp4Q-j129RfDq2dLe?)TeL_mql>dw`;TpsyZe;B z(B?-nrM|G;Ek1m z#>erN6D8eWaqJ3Yrz%a&^UvGeE5EAVZRE_YnK*^m3Il$+npqdH=m33V z8YBp5NxMw}A^dm>u=VzcLJCMgQsbg52!;O76?k;e)Dly9w$$tiggrgE`02H0Xpo_hM{VkSO_wzNNRB&Am=>L@=3b6+5lmryU zP7;ya?!|R|c-auI=U-0<-1OnoE)xl3cz)G)S@aq+de7j?Db|NrahofwJ;AzrpJLoU zPQDK^{u`y4EfzJER&Y|4H10YrR&n$;$yZh?$`w1605RzB=h5PM)&p7?Cj{q{a4Cvu zC?taccT|dDQ;4_EGiKW2;{3%K?9mBRGDe{HNryE8(rSkr)!V_8Woc`fAawIK3*2wi zS4iQo%|A{TF0=vJH4fYTh47|FFI(a`)7}#6LkxV!?@|V;q|y~n>;{9!pYd!AYrs^CYQP38NiFLL4VCl7BJVkas!M{WeF6k-Sg!gIX| zs`ZoG2-RT0HaX;`an{q2rl458rQ%X^93AHK{<+dj7nJ@lBPw-|{>Gd@U0i7~)vGyFN@EkG*3ig5MzvL1arJe=}DUjRTu6E8$h@|5R>nBQUh~ zxH)u=Ko8@1bj?{|Q5mkrncpg^saOv7ei$KgT)QQg=ks*>fB^w6`=RR*NjBiZi-C1v*AU!mY2b z_babwaN4OF5kDW|sh!n7hWlav_a^1zlFC~yp{F~jXw#qbbC2*46%G= zw~vyK8Fl?KNrisW5pR;ZqC3o7_nK^Sk2CY9YiHt+e9j;9!kTJKhP^pe2~Yvd3m+uNA;zah3}V+JbfMWNcSHcxiE=rbZB(MM(Bij4V(v;&0uo^ zW$YPK=aEfXUq84*HYo%YMA>YKZYn#GTDy_Kdv?mp^aM_>7=j<}#_c<_Lqb7<8R4A6 z`ur%%(ujZ-iNt-_6BU2sM%SrpK>a%M|)-q!=U5>#>7rl*5=ok{(m}Jp5l+( zp$!+2D4-K~fcmt_T^k59vjHhu|NL)M-!h!^ZOq%@_{nlj`&^WvLN+8LX4wOo6$Y*k zd0-V?QJ9Uq^2K|3W{3GMK1u?iu!M1r9cN>wd>FnlI=cS{b3tm4>V(~OD3k)o51S@*MH(u~XFi5u zUO8~iE)Pk55pucPkFKPM2b7uqVe-F1baR;k8dP{M1^D5BY%NFY6CXUaN&YfNgGydm za4F!ON3aqSecP|Xe`m8vYmgnE%x}4V~J03#hXF89;2W0t5tjg;A*t zxpGYWYFD3(_Oc!XYeds5MEky%FA^|f9Zj%Vl*i}6qPW^la}2{8_9tH8FB{6w7t53E z{SiAFAI^D-8iOiZLj3|vSB3RhZZoH+oTtAlh;p!TKx;$nvvFN6pEx)dfEH6!U?5uL9r%XH^;gQpAa|!%HYi1je!lyhdUi!8pSY%`#Le-&N_2(< zmpK*%M1o{LWXN1Cp9*~BPYNps#t(0pADph3$5)*k4e!722j(Snj7vWyBS6p^&PlrV z?~x{3x+qxwBwAG~OqXB$B)K6Q#E7R^Oh=ir=u?4$aa`tiZ4%s78~Y8z)RykH)7o5z zwMl;emrJSh=+^~q3nUH>4mF<_ZnsgG7edjXv5s!{4^RZet=JP)wx?()@OrQczdaBD z&@;}cjSu^9j-R0DQAL56=hFTxW>wOfBWYe^qe`VzZ;v^i&@v>Jbmf>-?mn7OFE(aM zOT@SW9BzJU4)w1zmr=rJ6##8(DX8kZ)si!nS#3_5E*ST|@ z|5i}WFghzk6C~JWA?hZ+F-!aXHF(WuGsV^E=itt-YP!S@ICNf^Y*h^xoz~bcB!O~O zY)I2cXJiX$C&WTyRIc%h9AndF@}j5y6*N`~lM<%CIIWgdq*qmB_vz!FU49Q#CR_me z!_cguhNQGR7$$3n&aOiyx>i3`;8il@bcT&<+f~8`<)qjPdeWBip0oJ8N@Y|O7#V6WLsC@Okb?gqLJ*bQtyMXjYh!f766Jc3e>yoULa2!J9W1O8U`y^>@r*f~W zL2RynYmF692sDCcvpvE)El#^hf8n7DQAv{i^!cRGpNT}s+>aZ+Cn(1e(k89DK!ltG zqJ?b0#WnP95vYpolYC1D+_A^7E$Ei&af(VTOP7>TEo{Y&zakqYy!V+d=1rA4%X^rC zs-*v#-!1ZDgNjH0)1>V?^hVM5AOc4>P&>dw0n4lj|9&MGO#+s+Wip4z=Z;Lr+(l9@ zY_#jqAjOd3*Tsu$B(Z2n4Bm%IuiK}6x#XSF=9(P)&bJ@TOa-VoJ6=l*>NOp3>pB@p zPA{up9p-K-HuGVUYv|U8SEQ4}lRx@FJImECNRyfF39Ns*AFpA&|NdGo?Nap7cJ>3Q zqJ=FE6DOGiNLM`{bxKNTQ~Yigo= z-sBRLV^D}e;P-ny*0i3ixG1|)d=5lC-%USm-+Cly{R7P9bQ6z^LP4T!LD({wQhSXNh8~Bi!K~V26;%7ST1onR6`jEPx`4HvCC9El z`_Tr2czdx~Q6h9squi;pRxyvCjD$hEpiDo*goQHWwL9ios-El6VW5QXgMbU_>v@T% zUC@zpy-4^xX~U@YU=-AKr6XW>0#A*wM2th95%uYr$uj9E;YzIhJuC5Ww%A2bX)uMe z+yTIoxbLGyG$H|$J>V{AJ^dl@E?W#|%U@ZnwSMSi#D#R7-Cs;&!RW5a@)t&70o5=L1`jd*xF zY-vS_czE0Mk+O#na&nbXbCXA`!Y{k0306$CtE@f9IvGuu>gG;vOD*o?QhI@keEG)n z)q_KFW~l_@)bY(~1|3DRu5_!fu6*?A*QzJJdtu>0MyTO>yM#jLq_OBEV3qejBnU+td#bd>2gHS3uX`%&+6$#3WdZ}4` zb*s=Dd(xMw<-raoy}^!DclNp>!BCx~QhTd27U+j014>^1fHdk+*l(Bru@yn2NEuz= zf^Sqi!0n1aJc8{Nz{y&lSKvDbIu7{g8T9^`f)MOCnbfdm6~`+?&*Jj>a6$1k0n*x% zPy+3cgt~_JZW3R_Az9cU3lX6dvSt}Fv6R3EbX%RxV!7RVvqMhrCepV`v)~6Asx0yU00CpP zCV%Q-Nx{xAC*SIDNyN3~>v8~{5<%}40&prB{J11>O?FZ+Nj9wPiiuPpRHs>>zNmP0 zx#a;B9s2+`jmb<-nL|w)1*-B7eN+%@n8k_b~$Pfp#3m0`F zS~Wj0!ngZ>me%tJ`sEIQ!XhQ~I+aZOYUSrgxZ(C83pkDJet_~+p~uXhPl^4048_=~ z+*SJT6MB0OX8b^@m{1DAK2PJ&u5!p|{+GXg;V-$LEB``$+0c~I<$WH?ZaFl1B6}as z=RSWP;5l^)F+2nq@`q-)s@p>VPorv)YO$Dp=WP!eQ`zt0ey41?0*-YTyXrC;j3Z)2 z+`=~N|x{Qlri&pBIV1ym1MrA;{dFeaMy8J5Y%7ksh}&%!_7Z&GvskOr*Z zRTy1qUSl#|ditUuf|B=H6wtStr%JHzPxrtB@~2LP28V?mY^$P(M&}!N$z>udU1jVZ z1%OQ&I7kPqB8N3OdGP$piidRESbFr32(zW(Ph=ifHh_~On&kxzX9QW&omv*xkj>p2ho8Z3s@xUfepeDL0qM~VQYB>ob z9qJHR_$+p7AXE2bIzAm~O|Zi`!H0fJ6+qhEWRz*N$oc%EQGL2DO}OP`y5Y)uU9lfJ zQ}Ra3PK6;7uYX($n{$7jv?_GFFK6T-0}soUTR)YM^B_b`4sR(MsE$aX3tILZo1x>? zyXjBb_>I+GO6Fh_VGS*8$N46oh*lv8VHA~1s`hDtZCTtUp(g+8MPo=7i;|413D;z^ z`Mwpj$_&Zl!Y`f&sgsd)JtPkjq$j{_+hG1b3tKpVB=Hf`t}NOZhJ44Sr@k zDkT)UBzc`n?GhhPVNiQv5oG<2{y<=Uh1x>`6{4@NkMIHp8UF)}(D{Fx2%=T@y*Mag zfi9Y>SzudN>?lZX{aaj1B?LQ^6)~8?zEmbK9#eh&ks1Ps%K=`x8Jjx#4@LnvyFEiy zTOlanQlQZ?CZFkpzz;=OoA)MK+jV1cd?ALGfU(`@`FL@8OEYqT0z0#eKlptgRS6x` zSGfcEGwK2;1)s00SDKfM6cxeM^nQVXrJn;?z3G z5bai^CwpK^M(pp?di@(3=*D@2^1dC_1grsygy5h3SHRFfpT%CLAH={^y&-@16YV-=&ue{-uQo*O zqu*e;Tf=pcE2?M+``gqqV*&iG4rbtYf=HzrU$syrg_le3rq{Va*B!4C+a6!X`1j*O z)UwQst}82RyTa4%-_aKG8HEs$&Y?u_H#$1q#ufKrNEq?t%)Bv8JN%aYl%lThscbN% zHS)I}_$Nn`V!c>dXsy5^*N+AnNx4=vFTg-K|7Lx>p|(Oe;6ahl?j#23Thy@nkx&+= z^gQ19ZO=cQXVi=3xp)NqjISIthWLxxzvQhEn)G+l}ckC?=z2%D)g? z=NCwyiTPy5xF0J}ZI3@z_2k?nyr#3@dcU7WetIsMmvcQ1A$|6^Seg}Rk8E&Nfqh%_ zU@U2B(y+1mmhW_aZo?G%rPXeov&hv%zV>0PQ^6Z-vIW@vJi%)`a9;A-jCw>N)lSRK zr5}rpQ@P)7N#qCF>tcHy$r;~cr-Y8uec(fQ>DLY!Gi47mdA@of^pORjLZlV66oQDp zn6Y>GLn!2iJhy8Vb^>U&tK^K*`if~{=Z5ru7JqAr&mDg;e+_^}E(7JMF`wy_A1^qL zTO?B%3oI3+IwDFy{s@Did6y;(89-@`K0h9xXI@L%xUU=Ixb7#6v)PP7$4J{N3%uh! zvrl4D^e@tNe!`&%Wg-_(y_|sM>oDQi^BJH{AmRg8`S=&^By_kO`wm^b&Rjis1t9kk zAjVIHjhK7%dyC7P!dQtJg=XcHw}Op+RLR|+3yK$vm=h(`Y<^a@&MoW^d100TUI2M333fb{=coTZY$*#$hZQD&YC)>9Dyg%P({rUr1_iA-t=bXLw_1aDL zYdcqXM7-<}*lpJ+YL1K1qdQe2udiCvhzOx(S^8Tyq`vo#B^)hT=db}kJxIYy1DC{( zRU`W?u3N_Tlx9OW+h4g?TY%ut-8Ouq_w-*G+g45vEf8XRUYI)1$%UiYT}bC-XuR&8 ztAtdv+|iuSP^|-E4!3A1l&|}J8tO1(3}nG%xtem6* z!ciOM1-jR+@0qgkEi&ck2!k0sbRJh zfv!^W*PWIWWg6jS4ERRJJGu6=Ps~o+K&a$#`%M+VHX9Kt6-!QxF>(B(Y!r$kU5k2K)=B7=H(#cA5BiSh>YUA(z_Rg3j91_c`o~a{~4iim5QY_5rqxWADQ+LH7%zLH9#> zIIp9xTBihH7KuOEW-#^w;bwttvlHMdr9dq8W$BFnu~apfi@%ZbR)9L4w{@pQeSgLx z{ZCK)erV^%MrU`dS12{B$paq*%rxa}(O%f`R=2kN(-nQ`dYQl{ASjsG&;TNs;@k6$ z7?LpXt}2F~j-T#+F9jiLbbw!XvYo`fGByEyl?3y*8*6Q|qb=Y|ZXbDq339T?*lg zF-lrD*y{_{?=#h;?CA9q4HFxPaP1R=B$gDDa5Y^zBZH*_OG75Tk8~unn|gy zX-?;B3`Q4iXK@~tPpn(Ro7m?)bz20N*fU4CC$l)(ayP}svyISeBrb<(;i>;>@|l=M z4yri?kIyLXS(jB(Xf=gpWw~QO{B8C~&q9In1|GL?#SY%nP+zF8bCd#xFH>;f3BU_& zxQNcfkm}q!2)w-BR6qYdbI~4Y{deEV0fDYWDL55148b-n53mLq0HC2;fs(EK&jcWZ z-YCU@ycY`U9djWRF1-!VXxo_+oV>6%hUD&7o9(wgSGv5P^zjIZA-yVZPPv3skzE9{K@_1=H(chJE=?EgvL6 zPtHv0s5Z2@6!JiTVH|SU4Q2;2FAe|MJ3ubyI$R}<5`Wipc&h9Ek>~%%eYS}M)cI>g zyf=KW&T@)w_SX6e8(>bZcf`FdueyU+6>#!X4#ocPn}TJrT4tuC8wEnWLLYC2>E~Ci zxgn3I@o52XI>UVD)QN&|2JQUlX>OeZxz|0CivCO|$}oqluh-&=(mYVZd+Ph`J?oPy z_hwTluDr%)UZ#$S4 zd*t}PRQ%GWhK9J?cm7PzRAN(D2I+(xW3~v$y&>bdt!u_v^}Z#NH_f)#w?_ZLiGQjT ze&TJ6+}vtpx$^+Y)bUuAc|B#zQEWjF+Oxm%`qO-|jEjpLzXc?T1wJp6SzX5<_{;?j z>vBEd+k}waFHQ>4D>e(C*v(1`PC*?zK^o+Y6OI>Iq+QIk(?1_Cyu7^Zi6QRloBu-7 z1Y_XiVC4?s?BC<&zR;l`;CsBq;<(D^grVMDZ%tqq5>8+hs&iW(m)Khx(9-}+(WyqU z{H+|-e8~q>uaXLhE&qmCB;@a9#<~t?U0A^>tZ#WDGO-mTuSbwUjV9;uxBTxFuC9&U z<5Rk&2gp8sJX<+>#b3615qdltgWB_SjYlA;5(71oyaGn0mG5xeHPTlsg~J)+=Ub#bYl)W-fKmr zX)tarZJg5PMRa_kz}Rg?UWnmc~+=UnboTsgD?Em&Xx zilVnRNmh>qch)LX;Okpc>d{zg%UnA$KT>)=zR~|>0fZCHvOv|^WO(H`vO2WfakC44 z4>^a?Eg)wiH`J8X6pbflpi0Wf2n)`yNt3NS>dWBES2H;aeFz`!7R;B>emqJj>GZ0W z!stl@SG;cy7?57*iA-l?0fqthp(RSu!&Yp_ug3ik38ckF=R$~-C8rhfT2~8$>_@{) z%c?Q{3N_y$#eO$_PQIItusJt5*`g&XblYFgwYlatO7m|J1p8qloGQdL;F_%JCF^8h zHX0GAaln#zwmhL_L{CU}402@LY_k2@a;CpNk#R(1>^VpR=K#S{?RS>)L#60XA=`{_ zR11dA1B0=3_@jzJ_MO&xF~4`RI6CSuB}~njGEK>UDkNv#zJ8NP*PoN!l2&f5J80h+r$RUws=06Z;syt zck)ESfZ`$mX6w81Oe)t=uobnJI|QtM^S0Y>bu)kv4G2)?FzU4P!Xz^j<~{<*dB89I zwCj3M!{M;Y+*#>OoQFmUJxbU<%w~l3p(%En{4`j04U~2I$PxHjHJ<^-)whC_l-IUbTWlw1`%Qp?@ z@OdN85nk#`@@>RAI8dGA&;_6f!Z;!Mz1$s@cX}QZvZt+Gd8Is_^A*PBfeLcl>9Bn4 zd#hK>xN$;!-pnrCe?s$=!ys$rtu&C&xAb_G!JWVvoJ_r`Q7XU_c#?b=tUCx2mM5Lu zN>AtCrDW%qi}DcqHm3T04Ih>D2za+5@?F8JsOyX9_gu2DTEC9&h<(hBUqS4sk_dtX zXnT9Ze=Iyz&*}L<=KH=O&3^cMMewgSZNYp*ddQj+RA3E%WZwGnyP3kR~)}?@J-LfX1%dAd~==1a%T2DvK}vERZ#M2f6K!>-gt87 z6cY2m*7IEX&h1f}frNLe=7~qq9GCZkuWUK?4^{ta`$6cWIH@iK!2TlN2dKr$G z5Eg61ab#r2jJn10?wM7h>3IXh{xDHQyp+w?R-B22>Gn z(N_YvrNYs-{E>W^TrdE{LVTm!1YkTPqD&PUt(}9gCYLW!RE9!^8USaoC&O=@nzSvq@(7ZZQ6EB}AuPoabH+#j}Ilaf7(;IarnVca==Vj4O-P^|=5maRqDy}BSEN|{&eQ{1tBw@hK zz)-K1F!oakVk^YS^i6rEUcoXBtl0TB5)_1|&0aL{2b7pZfhd*&VjDT^3(Zh)+v8!BL+*-Ygi z5B8O4@-Q$dt(43~gb~_W*OJfU{E){&RUzfE(2_)9ye_`oR+a2LVXPT*;e=4Mz}ATo zY}T>UQp}`TkdNVBAv}*pD#*m=*LJ;2M6=a6CO{KIw=6sil4iQncW06vR*ZjRnA$V( zcZZefASJ?+A{g#%*vv)c)?@;Kkp>kkJw|d-$S4WKte(wwj*(c48#o?H+Bnv1^QL&P z@r)e{;?8lI8$J@U$nggZ33@q_fl>zOyx&*}ejvc3i@1d?I`Ntmk23i<8JIOIVA(ys zea-<-Afh3{jfL-t|5a@<^#y+0Cqh`Dw2m9@2GWt3Iu1g>4&7~dJutuAGJ>FyaX@yc zN-}RVfP41mHrCE^$)9M}@!pbl=N$6g9N)*4IB#!n3L&8oiXcQ3YLY*YpUB|>GpEcQ)02X}ep;0z7agul(YE4fHlE%rh8~?a%Y<;qU+^kF|SiN0< z93A6whg?(KzN(e%eHl2cHqUcqJI#vRNR^l0TWGK2AJL8vu5hh?>7^A|##R9EjM2IM zPs;AwqA*WT1R(Rf-jL?6E4qoK}=d8A~0hdeaqMN0U_wPm!eB;$hjDNb76e^UUUbny;2$CgB1CBKe04gyPJEY zJx<~@dIKp(G=LY9fYr%Es3ED{d^yES00JYQAs`zAy$Yq<(_;^5y9#zCz+nJyPo8y! zkPAtL0!HjLt;rk5?|qZ5q8!8+CK`t1K7ZlPClZE4ycO{{!RM3%_n;1UpPU#9sM0jE zk-ls$0g4s=UuUxTb$7zP4j1 z8_d?>R`BSrXDz3egMM@_Wpvax9rQI^x5jLHz2GE4X(S4mBpa_7;A*p(+x0Rh4JQ zi)J9;2kr4zQ;a-Ih8k+&aL9|(c`Q|Kk1sMgDGLV>zAUcDp>Goq=vx6@9$?w@^GK3bF72b!g5aSy)Bw8k3T;=Yd)P*CD``??R_$fPDoi3 zD&x$^0$(t-&2e6|j2bVF{`RAo=a!LpozX<>zz6YkDl&1P#O}0mjMGjts)(hZwR3o4 z6^T;52h^{QA5I~CC&FrxTAv|PN9syy!MbSH?{uaRV}zShHA&h+8ANpzc{s_O&U-b3 zzB|oX6I*0P1n8w8s1fNR!0oWua6A~Q_$4%zA1|9FF2nzL&3soI`Rl!c$#WN-tbTJ| z()njB+{;MxHYL6uYnu+nlvefy_Ry9dTPymN)sOrJtDOnnHrIvUlGsBG<+@&#Qq++8 zI$3oi^Zt=sg?iJyl-hWMH05&Q=;U1At|`fa*bs0Cw4u{kfNvBfR2)=Y(bOkhlg$@yZ zJr7f>MqLPvJnZrTsUdt+pknl*4`ipJrc1hItLfJ|CR+VO&wt5o)C_P#w9LQ6rqiPW z{}q$qk>J6A2on+zm$?9^($w`c(v<8qkqj8j0VF;Yj4nYi@C5X#|1H!-&^2`X=N-@E z^`ztt_&LkV{lSU@BD`(|v%0gO4vL_{DekQuKRpu{ES2?%J+Hs$?6 zBs${2kcyhCpd%{EW2Vz%4D0qe;IcYze|xo*k#@G|4Z`aJ4E0x_{&kv?r}|#YW^0Bk z50usE*pAf+DqJF<=*xr@kE~1RZ#6$Ropu~b=|&?pK891 z3%-g*Iao72m;@h}UkB~X!u`UIzTKG)rEuz2t2Pb5YF|fK=yYE9>Czpj11>o zX4yNe0vMBpZ6`t2y@zGcFwx7s1_Ped>;^(7-{_9wsiDU|3kcU^=f0yS8ohX1*O{*6 zRUQbnIc9OXabEUV$JS0*H2A;1I2jh|#tf92Adr{_T$$w#P$!%NqZUgremnhB9h+@U`F5X zy1#rr>^fVllot&gO>4e`!bnHK51!qvuH_i7P4#OwFlknop;|j28w+!9KQUx`Vm>@z zHh`l>Uyja4&Qrwo{=Sk)^%G^^)xPo%e8_lw;;hP^Mx$~mGV$$x7C;f^zMB`QyG^+2^UOS55`FC(2A4yQ4i4{eTm*Q`~++Y>URQ^Sc zTMyOi8Z+fLKoABC?i{%0Q@&Wo7Ac-ogtC8?Vn6QJ%1xwck^)f#E zhZAVALxbal(k?uv{@tp-cI}lqcX}ley9L%FNZv|<-S1gd)HG-5#_;EKWbj>{_;PmpR_fp=qRkKJUb@a@;RF+{|I6j*)| zD;c&QaUkR|svU`K5b9oT*WVRuhmQ2Rq(?S_05zeCWO7PoN8;TSsr_M;8Qj)8sm(`8 zQ7;ayn#T*U5S< zOFY!$6MhA^7eW8>Q`CAi2u+VqP?PZa&|YV;PECA5Mvxrt;`;-9B@_Y6e|T+XV;B62mn}J#8$ z(zzrMRvhm{D#r8Eh}DWuVexP?>P-MYXoerA%op#E&0vg3QoI0Kre7-cQ|2;Xl{qr1^~@;S*)M}^Cf-tx86gr znE>yA(#~+x9xPbvB4TUptU15N$zC#VAwzG)ANRNJdsa~Jv?BZ$fDtW|&`*0>D>;(O;g7Lh zYkrxV9h|pZ`#J*Y!)<||cjWdvXI$?vDXz83_V#2Gi^2OL!)jMM5=~@qoq?&gyWU1# z29rezMophiMNiHx;{S5~*6LEm*5xA&*J`@yvCeG%t8ioaUt~$P=aylMsX&$vm!JfO z5}dDB>Rv<`W^SQIps$OK|Md>JPrX}7r2B!y^`9y+$x%XHFPhg!`qVgepH}P~zq$_b zfPb>er?vNw8T-MMLSew1!UgQMX>L0`6^0)?&O=Gu>z->aZDbhgt{#UWs+{Koum}~2 zS=rrTUt1k6b${5mvyAVQk0AU*7K23V9-tilZ;CD!=kg#hC zS%_t#)pb}LJw`x0ZS5vfQ2dsXkqUUQVeAj?u;+f%BM2BOCT^nvn3kRl>oNikLj+-8 z{p%z=cx>>Ys@3 z4RL!e(%Esd<^q=LygF8oedT5l_%QurbZ&8KK|Fm`k#`t!d0(YvfoO5Ygb>&DHj(b> zK)w-n4$oHjgZ88G(&t|N=dq#%xR4=DF5%gjU(7`QXnkimwrHBmK-w_p1C|nvw0=S_yM<>J_$i@2j zR~B~>>mFOa{&InCj4T6w9OTLUp&&O7kq#s(QDfHcL%kS~og^w{QTBf(gvWfDpEY*F^0`p2bG94sJ5v|b$?PzODhkgPZt;-sx`iC5Z#j)Gac6D=s$Zt@2c4iwU@A6W3N zz7#nm(f$?$Ohkf3Ky7t3Jv545!DYfA`xnkZk~Dc0B>(ev(BH^8`LYG*Nn!sv3M&W^XWML;8tf&Btiobo`-T%It7tVK5U zSss&~JxYfh+sLh_&YIg(nC((ustR~~ySeX_ZFPq=Af|c^a07u;tso>;P;jWqIgP$M5AqJ% z+hx&~-WgyLoeknW-tbTlS9FfVEtkB}nEG#`SXC=JNw8f{Q<`&6D+Ec9A4mF~u&+?w zfVk`Vjfiy5Y3QG#QjKy6?)3zG#e(JOnHN>SH6|(#V}Uxy=asML^JD~PWYSm-%Tt3~ z(q;6J1goG&TLJC`KD8Toh?>9BMu-6ZYDlaK+!;OTwWJ6hW_tiAWN+W5Zkoa(UGAFy za_T@-$u7~20#`}j8|+;k?@5o$ac^{_U1lp@|6azeV?Lr1KL$7UlXNtHCowX*=jlS6 zuZ709>(_fX(mg6X+nBu?w?jke0x){dZ!qV{nEe9L7rhgDw1n4*7oHl@;E+Bq+&W*$TWV#o@USASksas@P5BV4JPWBoS@9DKp${ z;*W0|vkM{4h%pwe|AMQh>{Qf}^6jsf(J&9;rE`{6W4v!xhWO~ik5{SwQGJ*;+2e%S zs@5lTD38)u;XLU=HTMKLo23&EhkE%7(utDYMQ9IjbR(ZpWo z=(O<=3UoEZUuUY7nbhOz$NMDEF-R6?h}I0GR2PP1yS-akWOr$X9GS{Ss$@{Jo}W8e z6$|tnw%bF27jvW8gWqFf&Iwt_K5?p#wF-?dn}IG6r663{wfaKQn3UyCM@L~0nHQZ# z`kZSc^>^oDdTZ1N0D=0&;{PCUNLCmZ@@%NS>{FI z$&hdJDv9ofD$~bY{^w~$&o4ob+7iwqIFsxY7do*#+BG=@VJ?kwKnz)t9L&7cWFLxNdG_oK#ESj+=~K_&_hBRIk+C>29B!B8g9 z0NTgspwKl|iWTg>;fi@Ul|>^+SW_Es)tPF|4%#Oa1U1?KOr_WHv|baGLn9Qu4E}^c z+{va<%2X*YcpspjqL1hw2(f(0jk{FzZ)_~c{S&NU7l-deK0sW;L}g^J39qy zvRF0^DXYRWqzi?{A2FfC@IdYDgMpn$2W8a_aw z8PEtVRE#XJ5h~BWMkN#HBB({Z5Ch2}KQPHMJPQBt0x$b~!mu>~_fM%rZTC6o$`|_M z_3<~B+Zo4If4%#n6hfDbd3eDq_&AT_yTf|ZF*%zVY^;mhPE!m2@TTu@gIK$aLY(7| zqY13N?B=|?$0Ae0z4sS0Dlzha8M=y{+3nDP>2I_d&hr*N=9{Dm;Dr^2gJBuLFYaW_ z6)p5>!EG!WUd6FRNLt+yuVt&)DiSj=7#IGtT5v0efh#fbJZ@BeFM5`BnUmax> zv|I^{ZNU0)UN7!wW>>wsz>8=CuFX-o8B6MMzfAoJ{5;o@QRYB@Qcd<$U-Z`YC80(! zFIQ-F1bo?2I8?T23pQ)Nx$IpHyM^nV%nv6%r}o3Lx+a8_w5#RtZu?iACB02GgZp>$ z5qA7>X@OrOC{1nYcyrzR!kH)T-R&We+|`dG4Nfl|7V<;z@RH&gN_N@1gLmX@rXoc5 zOd^wob-vmBqQQ< z;i$}6eHu18{kMin0=4&Y_zenpAYKhEhcac;9dTlcNh{Mn2Cf|~8o9_47LI&=mz$o{w&^FxtQ5E!Q*J=$q8W3T2bSBlIYfu>4&+n2T9Cx$G953H7IQ9NrC2b| zacr?&`1wE$@;eXQ63}?ktb2DoQ5hX=n%1x1>*XC+L17xIM6pEoa1mE9s95`HZL*j? z7}JQ?R&_6YC$xi5#I(ra3<98v5ekLjd^m9SR)pwSyGz}`yZhSTu+)d{sZWhUFk|e{ zuQIalwHi!b9T1N6$_?^`!)E7kI-L4WiFwwkCygA93y1P^jX1)tC;2sn8{97aeDQZ&s{u2)(dqb;1(_O4r@46qRyn%+0awM6KafE z-x!Eys*ix)5R8^BJ{~F5pyXRm%gsu~Xwk)}yN z5$AAlj6Z&m2Qii_kZTKr^!YR=EGhC*{R8X1A%~nh4R1p^u%H>lzQ!7 z#D~5)&B!56m&i}7?4Rv-_?k<1N=nM8)Bo~=oMNMdopV`oKa}rV*EF8pSc!p;nS4I5 z-x4`H0Pg#->1Og+!Sx`-p}+bH2W0S;ds;fSE7w}ZcQ=2IMy@_!u{XlS2{fXVUD_qw z_&mf+*V?Kdwz@|vs&xl;d(*j{^Z!Xfv@9;dwCMhtYPVzs*eAO~+g$#6-xxYSnMQ~T`}s)NC}sN_I#pFo zpLd?@ll$S{y{`iIJWd|ib_I@4%(4%vtFXfbJUsFOenptzG0^D;;djKEK;Tl{akSep z0!kYDZg}AAsGi4z@i~vj_t9WbC(eh_&_GG-&9}?6n6gCcBKkfeAIB!A6rCk$&|rUo zc2xKKvw`VY@|!O_2{`F#9{Z|7A%E^X@PhI71el+N$`+@QKu}$oa|R*e?n!=++d;jD z-o{>LI}p*t%nR9ya5^5$U?tiuLjHLxmh?IfI^EslT?EYK)mQWXvH;1DH&}lBb>OJu z?IAg?=T17k5-lGm7QcSOPDYi?Y@+w?EONr_QoWygfK6vgZ2Om<^drmBF zIz{oebeS=HX{2YC*F()y?UiNLYVnK41!sbo`VuWn3f~U*6+f81iVZF7ulh0wulnnh zQ+)BNWj^L+UeY-7-= zv<^XYGiZHR$RgzBvb3gd0(P~~yg$MAU9m~u8OP&63t>dA*M}P_q>0Y;_f;%}{m5Bl z4vdeA|C0EnBBddGO-ahe|M>8Jth&nZj;U|^;C6{l_g1J;v6MYmSvT8m8&B&Pz8ksn zqGxxmJu4f>m(P$qZs_!nMc#-EaRty5(_=Hujinqd&`ar*xm<--mwvk4EOtae z3PvcmXsHztM8DSgQ}WAdsnP4W)7qdQ#l!EaGTL;VOmV)r&6r_6K=MrNLz1?)*aeRt zF^%OIL4~EF0cbFpn5}`r*ChD*{cK}nBTP_jnIsF0Gl-!YK99Td6c{na%$p^_@5^Ha z$318DDKIYhbs`K0Qn80W8PzH};!OjkZI7$gY)dLecu81UT+YQH!SA$@LL*ngw9s-HAuZKTROV1qqC*VN@$Xen3J3 zF6aikJs)d5dFnNKc_4X4I%FY2rDS5JB-vtSNhe37Vm+^R6~VDrpS$@gL=05qmCMd5Ip6g9{_lq_k$@2qx!0x%#}}P}I~?wgZct865=e)l>a0 zLisdaW)}%Y6(n8=wE{ptyd(=E8&9v)a@*1aulgCfyP1&|fgRjmh9a+$pL!Erg*fRzD7(cNtinc(3rXQrs<8Y#>!Cx#})3o@{ns-P5G9}lFv3Fgs=M#ncq0g`{*K$AYgfr`iR^ih0%MS|7FYFyyULW^W^mt^Tp6HO zLLVZH+38v5!UMb8xvR+Cc5!Zn-Tpo4C4~hpd#0r`@m-opI*xl^%{@MP| zjc6rB;pH11H3`RkT84>|zI!1@xk}|yC-L936oq9n2#imM55h(z}`G)kp znlL(X{3da7@F5{gX+%TijW?ErttKPaB)6xHkg|k+T+ST+&J>4t-AMmD2SUvPo{ygs zQ%Y}@h5^AI_9PYUZqWVgzBxU=QX9GX_@Yl!>_q4BpcmG1Q)Ife5_ESEXMUY9w!6r+^nWH#ohNi$m72MrO z&#q-2W!3X$m0=;pz(SC-mHA^=d>cIZ(=dx?vc1F!kr}%GQ1%KW92)bj7*00?g-U5_ z*$F#16+b`${}HCD+H+eFS+8KH;Lv?b!hKG`SQ0<&e(&Ye@3$2{6@oAeRNl(cxw{%z zuyToVXBejx|}c8`g`wLdrIlKpCs{)b&Mo>FV~ z6@q%x%s#;sp!PQev|ZlvWrK)Zj%gB^2jY%^i2={u2t{2jKLLYY5Sc%$qg8^-fmVJ) zZ1>sTmyV#qD~X|GoVQ-c6)ZUI0cQAej_sZ%ALQ>d$SjttOZpXoti>=KYU5%^t<&bB}tf*mA1=@ z0=U}7aFDHmb2?-#ClVb4wQp-PqWC5-f% z9JhCg2E4;fXHV@bCtma4#@p+o=~CAQsqmnhk?_|sw>rMeG><(F4#;lCaII@?hZ8DS zJh*jNy-o*kXkAUDERBcujJ5STmwzWznWRoP=h-!Mq{s{xIDkxX-~}q!N?0CjR~upV8FMXu656h>h($D^js0fg z6=(t{k!rtQzu|qK+=TcIYRj6-3Cb%F^5nXg#Ujbu##a^~I-FnpV2{2K};T@6dZqPhf+2EuTZ=)EKqH&E!9 zb5ll3T8agRWf=2t=2BHFVE8JXl5!^d!~ABd1UlXTWQ_5B+^u@`SQJOx@{7O7!(rCK zvOb1KerGR6oGjE1O#%bMdB&~LS?}eui=&`iK4juskEbI#4n2EO76q66WIDf;Mhe6_ z|BF#7km!YE8JpJk+%A^CVosnS%N=2>Eh|HRKun$aClm1xfyfY!l7>q7N{@_^ib_;S zh<}y7rJ(G98Hb*=pst85sbs`83|hbSP^a_Xuc#QhQc9Yk+|Oi6disHt&?ruy^UAop zk#228t>|+811IFQ_^HV|%nVWjV`=RU5C(dL9b*(FBi4|kRR75N2TVnc_^|Ts1K^hk z>FEj2ak=k&pUSpI3*dl})gqaFfEI5{efUsRPzqgHlwse?kRQUW&srt9gr|wlGKcXf zE-|H9AQCe|qBia{S3ZsI{VCC5nrKG~k+#rpX?JTSPlhl=gpo@_eQ2q+f^BO^AJARB z6vY4Cu>vu9g>Nf++N8_TgrdLv+d|O0tko0Wo_0k=+Q(S7IQUjN_4ho@w4yt!>_wD<7fN6H#|5llZ+CCGEL(HA&1+~ABuKnD#K#GWSAT89w)++o)2K$?`%XVq zR!hOKo}Ep-Z$=1}YP2#P%|uh^o)%lXgi^Xy_UIAg_k|byS!ou6%IkWn_a)&aVh1oY zgn|}5B^CkkUl}08PciRx_50jD&1@hk?QPzx7Eqy1MLc@|YFqZ^0$Z7qZ;BGx&!qKVWVs|2ap7z_`-q77sLq zNcp36eK{7x=~B39YJ9_2-Pnl2QW7&1T}A+YI56t$@%bP>v$|_3*6@Xfw!f3owg(w* zZGF}|oO3lmFf`9nXuu2_>?LHV<-WxPULcO37$rj;QpJM=i^|+pG2nTi@+M0tAs%+Y z*D~FkBuTO!62)AQQ?o_q_<9U-_!9&2LT<)l3}Q^K7)5@-VOIq_+t;uuK<`min-3%! zR6`>^&NocX;DKVTsERc))-(_GAm9&tBORvYLJ05FNDc%bW`;3zOoLDJK*( zUiN{Hn3+CJO4kP$5UU}^;ziqanj2cGBgvT&wOgY< zgFjz19PS{ZOYsAWhsHI!%y5zL_|fB$O+SFY5iaU*S(;jBvzcetIkr7>ckK0PcQSUoux9pk3S>Pp3lcPU-S~%ObvfxFem&&ebv%P@AJ=?L4phY+_eDn zZ_$^GroL51IDj2XE}o&>&`mC4L7z-g03p7fYjl&Ly%-8Zgyn4ooRiZ`Fv=O8d@K)B zFP?BJUq_};fvxPYL%Bij-N8;O(^voK^WM2~J5cE_D{}%hcFvMhd~F08FhBl0{Ib(; zoG$bDl+-mSf+1%V_@cmR6U@6&wItZlH3CB_IP$jTeZ@zs-HZV6-8oqg-<#~W_$Af- z&5E%PgLhlg7yV(_3)Glg5Zd$+u{@3SzKT~V$0X0j=PfaNP}PeHJWI*fw|}Y7Mu9se zV*qz1aFjov3N>;KIAZQq}y={4|7~Wb0<5k7jTujbK_D z9 zNtc<7UZnvE5J!}JRc}9z>gagl49==aLcxE6dO)D}xKHCHrDE*eAx1AP|AK57CT0)_ zd>8%B^MpUlQ^65+!8x6bhH3Da#GNojPd(v`l^e-6!j%&y-M!pN*nynw;*B|8YJ?&; zFu(*y^!{ULP zY4{7$am>Z&+1cZ@x9}G~uQ%%9tz(Or zNf`!m>yQ#QC_G?0Pbr>dUM8QMpH52i`z6fAQ`@SNBVS*S6?+BJ2R#`)>sa)0(GuDg zSygA>b2_fud!;Iejg+V5hOpuIx;ebsfHpt>UE#$-EH+Y ze!mSgOg)}pHdFv5$hDQNiG2+S)Ki&wpo>AAgqYtjqbv+v(0l6H4#pKOgJ;X(hcLn% zVa+xjnUS0vXE?XEzhDOjuGMQ&ufOy zU50h6U}j7ne$)o6?-cyWzriimjpw)|kIbxTG*d4CpNM^4{xUlgQkXV($?r0GL5R?M zV>+Gge=@5QAhQ~_*I#D=1@cP3(cn_g> z?&!P;?<+yb1k5C172#2`T|N{qZKA-V(k7rVCa~%Pl4`F7xNka$@Lgf%3ITVPi67VQ z&nAh%?-Bzn4G2!QUbb|-m@QPO<#qRu*kEbbzEvGGAuLDqJ2SKMlngXOY3;wW3-|+{KFwz)ju~#TM{X`u>Oy_KH+G}^9GRxG*~7o zcRwqt*w}=wsaSPY$09a|H;i3eig|AAhX{6mHJ^B`d*4qxj~H4ipow2kj3A>f50A#iFo`Y4gALro^QTprf~7ht2$Yz~683273x>KTo63A|l~s_v3I1KsLT9eABDf8hL7 zQsY{9tFuqVtk9}rW`LM$~iT+vlHRx&k*{c_@V+d$}B;}3^_VLElK?^*4Wh4lz<@o z$OOdHj8wFVCSZ#et>NQ`D-(HWVa&2|JB-I=~#`F2uaOLy^PDcEFvkRdIIMeQb%d~>c zE6WKY4sUeI_zuw^MhLd}_#^VypvxB>aWD$zgyq|ru4n5JY5Zl2d}x0k0-dQe z1G&H6-+678y+A7XH|Pbkxm~h^H7$t=+U&C#!CEf3e|#@zHXo+6#~HQ*3$9?7=4w^j za9vYDz+c8R;TiGxz8Fkh&{v2Sw4bG#0imN}M%-VE8U^?ug-p>xFqJPxn0AITyGc?( zZ!njV3!8Pg5hlV|5z}3-5tVDy_(%J(P-Ezk2RbKsH|b`(24~icQnH7Jp3mJ5cGq}I zdXYlIT|KM>j21!q1lQ*6y;*$9lnuk+iiPr4n$kI06YZ1ja_L%3_ue^`d9bvl9b9Ow`pI4|r?!g=r45>R9r|f9 zzIXgvehF?aGd(^Sms@16hlA{b*i}ZoUWx-te;Kqug_AI*Pjp0ItFa_mFChL! zj=#N&2Zw#JKGmR84qV^CfcPU@y1|vOmo%BS$~UO1zB!lJrcztspP5z>18Mq`Ztf6j z{Tv|$l2v>3J_urQ|9Q*$e(1VG!on- z$Lulf!^UB{;HXer{>`r0YbI;u^L{LvG$Z0->mnwt>No}|nfoC*cz;;Xm1GHkV4CafnD~hGnVQE=S1$X%!@IGZ!vulxuKk)e#NBV2pn@1@jHOBzAQ3!XLw?P4!0Xg&CjN&WGFx zo8@wTjl4<-)qT%Q<$ghmPfPSh#vhihsroj`phu21u|*~AQ6gaxt76GL$NVmbm$4zo z3k9uUW7ig)s;5u#y~L0yCWZb_>?kVwUMwcXE2h4F5O|oJCp@Il@j?fd|NFpqPpX4y zYkS|&Ngkv&rte3S*kK_Y@}jAJnyyAa$~gZYO>Y?$_4j^%4?T1V3_VD9cZYOKcO%^; zA;<`VG)Sj3(kDNvMniFUKIDZU_(S8ny`_VvkoER@k|(UJ1n=kH;+@#d@;z8`*qeopCJa)Tl%$qegbQQ`-6Fv8%zV#D$O5>pA*G1~N{Ql8i#Ic-ZM4%r z9i;;gZy6Zmx1O*^2VEP(s|5&xE0&j$eDz}5XjHSr*iR)vQ~PZ`TTV6WYmH`jd!rC$ zRR__SKbfVeTta8bw>ULb9j)#Nb52W?jBe@CPW~TbW4iz5nVN6tdp zwK5zzK95y$_ipMvzoe?N9L`6?IDa3g+!J8)0=@iw4>3;f*>%q4iSJ>Lp}owxrAKny z0Nb5LZuZ-ery8g>%A&bsDQtXN`)=#X_rqb>H?)%<)DzCXm!~_unK*Qzlvlw__czaj znV4E7B=0H1@<0ls;oa(x8iRuN0ORxPfJmm}d$%Gz^aNrTCbi9Vy2d;f)Mw*)y%o<1 z3$3J-$UX*gfhb0KLoy-HA+N^;+BpP(V_vKG%;9icv>yW^0xd zlktt;`r~!EFfMEDLs3aG2YXg*m$q$XX%hGv$yT;Ldjyk<3lD{0u0X_Pl~u%c1lE+k zefwizA)sn)g6bwfNJvA2Z2nGxN;S)=@5<%D66cYugT!YNi7((fgu;qA*IS-_rQJ0N zq{KW&(UTpDiTCLb{Zulct5zE0bMIw#5yN3-SE$c;PuFWZZN+aVrv?8FnwV^n@W(o$ z$&bIJtzta=e;e&2nc5C&biWQcEW|Ob_&j0sZKKwkIQQ#Io(V@k(naR zLw`g{V_ds_Y>#aAx7q#;*Pew3(AYj9jb}Q@h~TDp5>Dg<4_p51_g+%9GS?hP(=2(1 z^Z*gb<#$dOfwwAhKh00*5|Tp}st&S$GMOS(AjC#;c6;}JcFC^3N|$dr>x>ee>x|l0 zD+tKxI_$j03S$w*CsbGa2&!j7NUN|WrHBJ&T=*vHaks;~2UUh&FN zt>q7V)ctJL3j&mo?~VR?kEI%P4&rW$pJAtgZcFi0Y5G1^oJl=p1TB<4%*FVaKb`t0 zdU*N>l7@5aW#GLj*fvUpn`@h@_J4sbmfq2moT53Hxugn}FC7relZ$}ofETWPUFssilOI%$S zrcKCg{s$Ma!^(E^<0=zsze!ncK@ryeB*JwKJ`!KA|9o4 zn8MM~F=?MHV#+iYxZ%V3Q+GR(`+pr(+|Ad{@tfu8RvIw^inMDtOG9mK+6}C2G(6~^ z40C@8_iCK#Z4Y|YOc0#Z=WmZe#@eSmdoNbBz>igJNjawP{_3-GrsE)Qf&uI~asKd1 zFyZS*qG3eTVT@G4z@)w%W>!Y`F0A|@D+EvP?UgUGj;n4EQ^yr%WmLb_XxGfRQ$D*D z*LdfXr-nl}TbApFS1kG{RC z98+8~9GzRX?$~U-w=v4_d{rF}#C$Ho3<+`NRmk8&5fzj;SObfa%3R-IjuR#bwzrUb zz{?Oa};4;n1 zL<%HR%UA1W_GR|l*xiZJ&+79HM!4#rzxk~)-h4FKE(2I%8cEM|r-S zWMip3l3H(jgN7HwEQnO^J?OgSj!`v7f01G7RzE}x|JjQX4*btt8Rd+85)(d1TsXZ; zob1mw^~+ocM$djRBl4!)KECgVP&i--gB2X)*Oh~H-s2S5GDY7>iWKv&g&QgJ{Oe{N zy4&;2Ce3Zr#fM1vIz8RF!%_uuh<17p_aL5czUQ0Qi>YOG4U@fr|0IcNK`Z4<5)0p$ z^E0HBfQ>yM(dNG#Aazk66zhWineZ^C3ytf_XG(xyag1AXuot@99%3dB^JTOqCb#YM z78lAE8WZ9wGH%L1e$$b8_H)r$tZNd)W@P(g10_a;Dnk`Ag*+)c;K>LlHS)n;U#b|n z$Z~~Pa99Qdn~fs;HBf1CdMN}DaCGnTc}ct@?spY4oDSHsY-qwsS1-!L8Z4R_!0cLK zltzLESl*aq3LMu=swCvZBo>pGXjFc{Omvl^W_~^E=g(`am*>3AY=|F^2t$wVp%eEm zlhpe=R*^JVU?6QI!LwJPJW_)<*#6DdY$&&*M=Z#H7WqWfb4d_!vsp~W{TC=!oP(0K z|H~Gl-`Q-e+p9(0we49QMY{_{7)F7kzHqkRu5_kw)j>=ogQHZ>FD) z$9sFg1sFa)Wu(@$h+r2NQqyFn=Q{d+Zx>S%f|q zI$hV>GpWU|6LY6`t$pAohknuu%{qUj*#WWc?;KPk4P&y9}UZ(z-AnUVll0R zwllw|!l~i@oi$fVo_IaeG>Z{hChUG5^E~x_|Dqju^j((~OQWI}!F8l`T^c#B>a!|& z&lZtA#vBq>FUxigcj(UoN-DI^eCFJ#nMhOUqKB07b$*w7#mUJyOPt$!1&_OZ z7BhW`s$=rgtUSDD!O;I*{<@AKjlkuv0Wwcze^*s!6#FX%ug{Xq4FCP)U8=)R8$h4A zlSdlpI(W71cg)vGz1Cf?k6hUepktGy#R9zhzTyf7UyyhuG6&K(%P#IGOc6pu!1B`C!I_S@THIl(H)p@P+8AwN;<-*&=BY#G3T zxkC_s>9hwCsymgEjYh@tJGy@F6DH9R1^p+`lkt88pS1?k{r!7YZT%F) z;_q(^oih$H!RrmX_0W$kR?SIlgK;J+=BedyU00M(KF3m!e&@4qc15)vPmNLHCPsNi zq(Pq9kPK9xErx%2Os0yLM_c}kmty6{!>75Y=~qJySE`56&J=mMF}(<(39hwo@NOI?9^{R54Cw#2UyBtb~jH+PfkvL^~$)7AkUZJuTzWXPEuEuigNa~_=q5h`+E4F9Lhm-%s;$5lHCnM#e;*s9{aDqaP z!ZuQ`ew?}02dr9D%Y^{Ou=l6qZ_EVzA3k(GJBtW$e2IB;aS|cGc41~KKRVpif@miD zj(;SPG4uGV`RNydzgtDZ3bWetcE09lGt63xU^a>tjPg#%U#M1q1?U>fr2S#Nk zr4T8eWA;7{`vBJ03r_LSxM0dBEr`SiipVLvd{2gW$@@7&7X=I{XV?CYu(mh+1x6_< z$a$zZOQhybfvO7+w7t0ORhQLv6Z`8xAQE{FoBD@p_+Ap~QL3^KMadjZ_XQbla4(uw zOQZh8`Dpn7Oyk8$vE*Bm%h3-`zScMv8uL zJXDV|z`PWG;RR!)CFDys%Vn#<1v3BUa5$0|bnIRDo?f90jSJTqGNA`F##1v3EyoP1 zvpGb=YTI5&+JPgN0RD%8VRSJ2W$(=%0iq$Orm$?k#WemP&gYFg;;dT+9O61S)s~^Qsl+`%T)nIl=l6T zwL`&)fsPSq+*dg@Q5yO7yX~6(FWluj3VhH6fEJth850|Ro*nwC-3~lXVf!Y=p>vJi z@jG-90(Rw*#I1gV=H*6pDg$5oY&5Xh)tSw4a7a6mpWt)O@$ipz zNx#;fb;OTe#C4%_t+*RJ+YFg>isUss5FE0RU7B^Jm|;0Br#r=1F5po5qPE^L7nE=N zac%t*>-I=56H-bqiKYqnpt{i*VsXIx3KUh8RNu6yly2vA8WOCJhhoX^tbZ`sW_wP3 zEfAJl#I_zE)E@MrTdaOFI#jY(QX}h~-iyB3Z1radgS12IWD+l53^Fg2_Xc&XCD93D z<#0V$zdg-XlTO|PfoZIMy#jTMB}zh&asG0jUESxyNwLc1#7N2q$1xFj%G(E5x95|S z@|^+(h9-kQAA9aTrwIj}Jpp!%Kthf?LX*@emmG3;-v8tw_C^vqHrur8*QbD+ zqNuN=wTcsK<$@S5kAc&k3#_uz6BH931jZTJd`(UUCh%E8Dn(BBUL$-daKsfL8nhM2>6x8;oV%_aFFDGw0K7&n`QGcEW}TPH&;3YYqC0pbRfF`!)$WZ zzDQQTE2+=&R(h%2CvE*@(5)$lf12Q^TWTa;KYBi}#N2iH}`eA_H`p-Z&9^$ro4O#kt^s|wm zH?i><1Xgwi6%{zTMz+ zv%3l^=SUN^I-^eshi#Aj4gr$Zk&$*r;iN)wBf^)bZpk}UlopKSXnk4>MsqgJAg%q< z89JF>y)X6JCgr66S@kK!8o|5Pg$yiAGC6DQ@3?r-pnqu9%d25znSfg9bEp+=Iw$zl zE9vfhu?|HphHSVjqvW-cR@Q-xS}3+CLzz{)F)eLE(v|~dhk{v!cb`NH-;|8i7^@#z z@W#sbA7_GgD0aId`sFI^_J0nnLk|_bM)%kuHKzM%KYmf_)k$06r>3W z#mktFXm4`(=N8cBTuhb>?UJ2z8Q8&16?bTpkLb8P+h1sWD#=l?Cqp4#>BPfc<<(71 zU%n&jeWG-sGu7qnBC~nBSY%||3g#N=7?b42m44?}GxU`Zu=q^Yd~BJo{aPE-GL^!^g}0qQ5Ss#*(?*Np(U&&1zu(safCVtzDDp+3+vh?=$_@NewcOj!8r zF}n4D&uOmQz#+MA@(Z^WI}_vU2gObV*Fn}qPWwJ+{M*2rQ!fFp+t19L zQm`l)(m;4Q@Fhpz&p;X*3J|m107AIzhk-oaD6b={`h=Nck82RWt)pHq&k%)<^~_b{ zU|hp#KH5f84C?6ppx!}}1q*Vcs8cS7ySuAHnbJ1qGtZ2k_f_$-?CZ3`qJ?76cguJt zVm1j#S!jvcdp*_zq--D^d-7GkjZOF+2AbDGT-?0#5ou0teia#=t5piriO5TmJfp`6 zBlIg%T5_Y3b7OJ9e%YE(=lw#;?W%V>E3YawsuSYB%$@j|cK0+|47;9cG=Z?Iif>qD zm5*%{#pwzVXS)>0zIjCl?YKS@LXMy1oI{{T1mAIX<;&_)3)dQ<{D(iHWf>Wq)TMjV zeGnLV66A)BJF{B1vBbn;9L@kubU}8L`mLk4mrgLCj=OTcG9CxiaiQvan>aUQ_|Rv- zFM9&GBb>to#crOM16hEMi3OPp!soaaYAV{Kcp6%{*U$1Zjq^Xj^Ew9lfsfuJHyCGc zV4OeS*rVY-Ouq{rd)I>=8 zZ6ND6{%nUFJGTB@B%KNaTD<%u?}Ge<3^hXwt;S)j$zuL8ps3`C2T>Ky_OOZlq?N6M z1K*et(Hmev+ss>8`L(xYv3uKnM&ArB&vZV4=+%syH3@z*R~B0=^s5^s#EO4(jPFBu z3V2~_tFxd^SpVGoos7QDHfmt&%lj$U4%~_MHWEzCse}Su$Agv7btCkGlGoIpRLza` z*dvMc=QlxZtd#!gGlJc3>b_(7KK;4kpI0xl`AFVor^p&~e_)Z6^8ITRi)EiH`R<(+ zPI__ASmF*@ossQLi<0XkGPnVAOqx#@3x_E}L+yz}1^wnv-P+8P7Zn*h9WgAO)v=co zZX+0^ql@OlS|U9br|33VW#R)7zRkwn%V^thIIl5$ho9^%hH*HzRQhqEM+k$o086<2 z@0u!E)xJ?#w#WP0*O=NOR8Pc0bb{}RW;sD2jEv)Qr<1QGKPkSZZ@yTs%a}!VEv0)2 zUtYEt53$StICZB#(+|KOh^3$l*PnA)4M!)+K&-E3U;5&n%Uv9mbRCl|5URUo{L>8D z`<``rg)vvx50!~YQKBd?$OInAFDg-=r3Q}i#_wRkuB|!~qo<%3s>KQZ7K#34_wO6RS|IN;3U?k?;9k;hanF1bb!G{D&o*WXUUhxL`1NRKuAc{WCXB|&(#li|;$uq1{cFps^_c!AI9 zc@S^;@Ck?DxK4h4e)I@M1Q?LZ(Mcit(Ua{z{Dzo*`?k^l;Wt3U|9t?Q)T^qF*_+Tf z1>osBK0XHA@q4^ck|pQ1=~0pp@5A@rAI**+u;I^Wec#;i^7$>~=$Iopml2^+gO}GH z=i7fuuXM@w&+Lx{90ooBzT#Q|ML-zFWYo6c-k=b~nhgk&`Yf^8B(&Gj0v`L>%8lB0 z6~D`L65fmv{Qaoc<%U$GS;D3<^~;-oFqiuCQg|+JUDydV7q}|f&0o~sQ*`DUB-IaP zVP=hoz>+@w2>p5mOplBVe-%x|kJ>6XmZ0L;|F@T#jiLA89<>Ez5T0Y0HI>EfVNBs( z7!QR&yHUZ3v|7s-9Tei77TRda8o;Ydp{qo}f}sSJDzLy2!jK~GVJU;f_|)3CA`y;} zhqPIdRip^l1k6%o+I?`7=uuWCAorbI4y!GBPUH7tpo=|YFP{sPBe_^BMtRda%czEJ z)UXLr{hBD(kU^rsw8w<4)j!!(OIBALEoD3=@sP=R7j*U4o~NNcGHJo*Je^wNt$qOF z-@aASn!35bxU(QdUGdIe$o>$yT5-{a z;plmKhgo`#Sq4Oe${21l^ROU6buu*hcj=}f1mh*}t4e55Emfo|bedHT@|bc{UP2$5 zdTmR7wZ!RvTPoi^4N_dBN%i`4Mf5vXtzyjQb#ZJfCFJT0 zH*T3eZ(EQUDWnOuMxGEAv%at0{jWgKh-Z1q>8xv`cF;CfUEv!Rar^6oZ3jc}qfb&{`F(!RNTv@gpP88tIU{&MgOuk zN$@cVth?jymgUrS>AHk~BQ!Fys<7YRov(}kgutu-M_HT$XH~VdP_10V;3@?6++JF$ z&{Mq&fz5aL7p(6aKRvrM%IZlVz=V*gh+)rJ?zzC2zG%K^EdxVpO({4oLw7Nml)gnp zjxH_Cu+b5fRe?q#)ilHxIH)(row|Rqc9X)Kln5nJ3%e{NEVr!%RmgvoxW9~?7mN~( z3f2vn-Kyl*0Au6w=MN5aD$~a%MeNiFjc}H9YaUO^9CPIQnfs*aK;MvJ{_LVhk**@c z_)ZmFVO|42lZHoPVRe?ZE2Ld4pjR2cB*uiuR+&76Qba030}03drJyc+zQ%G;<~5=b z6}?<#SiQ0#i6(GA%cnZv!CgyN_sIe${rK&?5f^w^nFo7IMnR9!T@Pb;%UnKbw%~iM zwln*UOZ`FSI!4F6tR3l!JK@u-a$Y$MFaIrKh2|8CgfWf3WP}D5e+)4`viV*?H@qr8 zUz7R6i0FrAU;Pl6jo;{XYWPgnmgyL2~7fnK`)kmbXXm2F~Yi(&D(%q9*i=f>Bb&C38mHIgHk8?>f595a_M40uL$| z@eop@MyLmmr`G0n2d-!Bh&4Jg?FU_7HSy;h7g$e~T`iwW@&KI%Vg$lyYH$)~`=5ok zqr#sPoDh+5rB5&5dajiRf#uG9Q7@F|_`PrxXcHqsu+@ASuH3*99+o^a`yGuZH&_oW z(d>w+n$ya_B72o^8K-EzNrnv#*afQJLwJ~IT9#+1a8?ohQ{iM&Ce8*8lgcu8&S3?k z)8h4lCJPDUmw}7^0IE?*Cpw2VgSud0t64wTfmDlTsAx^ztQN`pxPQi(>oYk-hia54 zT=4W9tx=18A9FtTUbz&vm552=9K0QIJ+h?6%C}Ub$H2aoQ< zUtHqadhdkS;Ig^@mXpcRNN(j1SA;0}lC<_b-Mhx@KZ_y-Rw+F8m|&I*`G!o{-+9=R zi{|j9q0V4^mkK$d(=wW8j7gH@}uYPH~Dn@sm|jo zR(wIGu4k{Or+1{|M$_qEP>;~_Mf|e*o_v%&GF2x(G3?PQ`7a?aR@UAL=kd$NhGFm6I8QIY#`>e~nMSD^OhT$tGPfM{34$uBy5}>P=0F znK1%M{V+XCD(uD}&*VA?vuYEW`*gWN5><9a&DO7^l2Y@xPFlcZ{h;9c_!WCA;6&1p z#JeiO>_15F=ozr=e6{MubzFRZeih|l`*~u@`O%FV10FsFm7a}SlJ)i8#!i?O1(e1e z$m5*NsdLood}R`F|9}Ozdv45w4|D|txjT2i#kx1~Z4n1CKr~p&d1AUmA&Ms2flR>g ztVv!J6*;KJi_-f%*w~gk0B!JlVq6WoTvZfCz5)If6!r*l+w79|O)jt1F;lQZr zL$6)ta#&|oG_s8NE&nDJ+Wwvi5m4*azo}>#S(Ql*9E^u#sYOg}YI>XFWVb^^GJ&KK z&)2rcTZ7E9&fJozpz}7jxFHbVXr-kkz4?Y_Dy8_JL6=$HQ5Prw9&Rs7)6P2dpPgC} zLrr05RVcM->a}oX503=|@5hyIRO-W2CH^!}czedQt zSceMO)Ey*ZI}1bPk$&$WQd|GK-NGhGgTcwz5byXaoh{Bg65l%OJDyH|=JjsXCleOF zHPY!SSoo9ssWr)CaD~o;#Uh*M>Jk&q!BHV+_9|11ELW218*3_|)<{oG5MH{IcD|WT zpcg@4?{akr>U5zX9bUbbe6P*N{lCk+LnPPq#B4d`8GL43=WWprOvCJs6mjg=2(lY? z1D-L1J8`iVI3L|$FLh~Yt-Nk6_=eTd@Cn25A`-3M&#lXFVBOrhc3##{b^c@@f znNMAgY{-($a^qgQ@&auKDQ~$6A$+jeDlWj{#1F!^leD_SJ|$8>Qg-wp7*KG0Y% zb-j`i=-gi_Eo@I=HKb#aV&x=he89BCNzcvk`!VhmtG8l}qxkv=q$@3%&3R8eydOz` zSBylDPf?4|IF;&J*z~HerTAZN&k^E=| zCl(TtLfhr*N5|#BK7^1{az2$J(}FE4W=8s_Q3dL1vvEXoOs>@l{xgC@HU2X)!?(E7 zoofX5XIUNvSy<#hQ|><@`T0%fj3}aAF1%c67#ZbS;8ZR-RzGUVwvT+fyhmt)va`nk z=%M?u-;`yyyrL5pCc6?gqrF_g-;DpC7N8c73BS*E?}RqZ5-9N$QU#Jh=4k9JPg)>= zO+pf6&P!L{_o3lBLU&z1{Qb>7Zi`45ocbE*@1wba`Y>F~iG+9F_UH#P^yj$cUQmyE z+~{B3@P`T7_P9&iBKqKz!5;3`CQw<2vy0!W*8_Q%{`$`vP?MNg?i5F))BBh2yZb(p zSfZnz0-UoEMl#(4*FTDWDd(oVv?F^O?SyjrzgOq9Ssh-|sl%wsWaKZk2uoL{|Ho}2 z`0--IadXAy+amYRPLHR~1}G$lvG>##OKRV{bzSymDlV)xFT0EN3{z-|VqxgSR=1t7 zXn4LHCfJB@^_w7RmBlC7Tf0939<^PD>-)gKzn;fXmmxX%Z!KeH9AIh2*YRlc_tl@G zAoT}Bim*UjFK${{wfx-;6gZ$l6)m~*K?E18WFW)CY+eG!tmT3AdO@U2YF~-L+ZT|z zwl)D6M>Adl4wki0Z_OU`a1v>R(esnyH$YZ%B828nCVvyZcXGHj3hY!R1ey+~PvIu9 zV-T1(!B_*p*i%Yj>u>YBnudodhv!0HcoC2>;?_w?N#Ff<1BYW%zK*7HT4vu1rQOJ~ zIuyO^M;n~E82xgL&~O$L1ozO$0=*gVkW1YEHhrxf1lF1&;iocV{m|zDuU|%A{s)+J zaD>Cenywlq`stF-^9`t(tm1)g8v)j)yF4T!(hGq-nvMUg>WK7N4@}`AsO&3wA>%KM zl9Z2_DrtBh5Qk-HnnxGY_u%%yri)fy_N5KybJErsxMfOlPg=) zq^3B+`F;nNncTkyULj7}+x?0%?X1R2V(^qSnW1KfjWmM{u-AD}LLcvv1ytBOUj%O{ zg=iTcP?i? zw627ttm}VEyurkR7N{fFSo3og=jsShP@SRfL0oZpk( z?jvpHn9(j3&Tsgq8}PZ)f^~=;yLQUv4C_n<9{QkHsKl@k=7QA92P<`bwfnec7L({Y z4zInVM|{paDpE)k{3m$Vgk&22Lh|U>j8Yqo2m9K>r@+YIh#6B_cHWCWo+%MjwwbgX z3od!LXj&rW`7H=)Vd2=%4ORiOEmlpPwTgcxFX-fMGW>E}CC5at_i$0) z2xA^SiA7mC^5=R`NX|!3C}Bv2OCC_DqI#zCh{|_Fo=8qzy>AiJUskrjd4%g>NYe;X zrKN+1C1EyLPhJ~TrD0i7s9Pj4;UPXw4`tYFsH4*VpBgOME=2E%vz|96?rx3aQ{pd*D}Qce^CWk`hI-z-jWwDhZfYgvXWa`e zI1dAs_z_b;>?#1pA@RylK1Z8p$S~qcW66b+8nXg6W^|$IE(Q%N3^PF4m~BNZF%(_n zo!OG{Y5$LqIDK5R*Rjrd*5H&ZXI9bU@65grMajPdbLu4i6C4LT5KhMY(<(D0yEnhO zOEE2D=a*|AAIsDUr&PD#fdOYxLn!dNXwF6uXmkfC3r2wI!2HAFln< zOFLDhNStW|&A2PRi}J}%4rQ0CmDa}jt!g80p<)uu#?YVsXo7D$A5+dPuLcueR@?k6 zse5Qb3C$r|xo7N26`kW?fHwi{-g+8-&9K*W_y=B8fZ4DkT*v*%RHALo)^>%!r&9ec zWZ`kD#rPSzsIGE5>i(;MO-=l4zXxegPcPKTl&}46>j`NPk?JN;{?9qb{+RYb@_~ZJ z$^@5Ir!z!l5>x7TMrVDTJCt=rQGIP`+kM0LQ%hO*7FR+16b0Af47cl|--`0p&fV>( z;~~bkjA&?oY1kF}#Hc{#R5Zw&WhzVqKN{nEohgmE!AdR}blZ6~r3AkLSR^omh2;IP z(44CQC|kEkiIT*N#!oSu(cei6D*+A9lqC+^zcfH!}pv^=dA-4>WpR5+dbvMxhl ze5db(vqVwaZ1qHgum7C@4GV{3oB~C1U%^#8H%AXH!Wag+rF9x8qzX$lB;y5k{0z*7fB^*!S@t;mzn*Ra|xO z`2(FyR>9q&pj@&pba=H3G2oN8>2(wO6zfUmF;ugcf><15bs7 zkq9F+2B0VEc=?-+SgPN;@q~Xp@~Do@VP?ejie1s=Ybl8uV0D~xflu3$=h?qwlmNXZ za-O|2J7qh4fif{%k4gK-;ckxC)F->;UqDhRusXJxKHq|e8QyKCOzZ%9$o=~jOhI%3 z!bv$rhKlv?-^5doi2$@rGvNpEFmDtn4^RyHhMF+*hPnc9^$rA~kiaVZ(2Lt;m%-0S z=x>Q(dwCQ9Fd39L{2y!k^#&+xJ^pJ%*%h0pTakzN6NcvC5y6LjG;f^&$CiXVT1CV{ zMrYz!mo20(GPdkgusIW?xIF^ z!g2MQGluSm#WsDrp^}*5S|EoDt7hECG!E^<47&r920BE zdwvL@Lc;S#sv@9t>DC$fYA+}UYLI@~UhC(6V>Y$;W%Vi6@-76w8357PPdE7x)5Q>n z0W_Nk&x6ZE+sh^YV;Rk)jkOC&ZQp~lUt6h;4h}>SQwVZLv~)`P3Y=k>N1>(os4QF( z{uF<&u3Qfe?Ak5{_JO~ePZJ0hDR}?_CVY9;OpP~L=*5cd;88xlCX1`aP+-yd*1%v% zT}vw%cNT%e?T`8n!A^vz$)|JlOd)^C)Ufh(Cq(c}Ka|IU0~jXW{OCJCRg7wJp;+{8 zO{ zy-PQs#?XH&EK2^v`J|2Ex*yqNHqeTkq4NhfW5KEB;&l^?$+s-S&!rFkF}+@V0y$F; z$FF7?tmV7yX>%v_ItZlLHj%Nmdv-pF2SIjAjCxfZne)g$;mc)269TN8^5;u0_u$+4 zY{&d`US~R6k7_6;Ounxqm+ zqYRz&4mj#$W@he|UICV$;-#g(h_lFn!qv+K3wmT+ebp87+F{xmG=vOo^SyivBm#a0GGx#I#nN75w2bm+G16N6 zht4r58K2|A`9KW$)4}{iGrvhhoiBdNCEAM$OFZyP0di+QHnp#^;(oSZ5E8$UPLZ^&jMTNL2q9kcxN>1Nk8&}#bnxix{dH?BDw zWS)zlw>HLr5js(*$-v5rcfoZ0TUMi@`<;H88zh~)ypr7v~aAYg)_ia zeB~jl6dsX_vX;aS<#RG3^>C3@P!eS!fBN{0+Wh&zKIt9e-=e<#0?uBy<2Hq@=5Zw& zSW4gfskXo9e~tLo7d?nB0j1OAnxxK8rZ+jJ0zUB0={!RlzuR+sEZN#6~cHG_7I>DgNze@hKXu`?49@=%m( zH{z@$Uki#TbcI~K3C8pCC0N!|tkR3Vn_|=&->1)iQi!&p*<$|PC`*bB068~tP#gXC zLxYb~Fh|DR?~C*V%su?{v6RclL`Ll5i^HjIoJBFtYW%B-h()_@b?5I{SY}}oqgrLI z9%(fSSfyIX|vD$VFdE%{^g%mvrC8jJnUDpmu|?~*w~@?{9W{O0*TPEY%wr2!(C zH}qoVmj@If{&;_{!v9h$MsguBjmzh}X$3x$vH9N~q~2t#V>fwNTO2_A{DwEMNGb%p z1ssi{^V*+%NuYmxL&pa80cJKJEG7FY`N8tdN6bc`iiBDzZvX`*&_6o-ajHBJy(HPq zQW~fZw!x|0_K+q8HZp;O?rP8df&bYrfvr2jZ?ZPQV2=6I{~A4jCREjl#3M13n6j>8 zM@R$(%1810*9rz7;39AVXwE=Lri3!FN8nDn(qt@(gNffRLEFFACphH1;Q@X)soS@w z0bFoWZhpV&F$rW;0e~d4L`i$VT;q5Fq0GaUGP3zVp7{=bu8?ns1@&)I;h^}w|h%S~q22T4s{7OG$S#A1I_Pr9b_o;AxI=c{sTDEf+ksB=%4qCl=g&JnkiCdO2hjiU^3ybnDBl5o znBYkpU>$ccDE?Y=ugY*m?j6U%4PdFpmTv)YdSz0txFDZa5#dPSKc}W(F`Qme>xsEb zm)2ePn+g35=4y#$4bS@Qgs5N6N6e#l<_NIc_PzBeD*51xWJ6~+U}ZRGCYDbO`)}6K zyQ-xJ)Lwkza6JIo%62e{`08HQEX&0xdGTbl!|i(qF0&Op3;@R;ssqO(t(Py8F7#q& zI1wr_G~;yJ{^%ma??*`t(?FO*esjp7xTgy>F+%Ud`-%dew(^y5?EC+o4|l?Q8^d6a zn_ZV0o^Lsl%?waZ#V4Rw%+Mz9)pg;zNgq+6n>T=uj1s>Gsz=NFi_H$`;!<}XPji^2 zMbhC?@s?wnMuVG!a z^?uxr$#6h=Q?Rl>Cwg=5JEH+tbdorz@ea!ab!JK*V5E%v#k)Q?4C(0!=)-rbZ)n_J z>9>iyoL^e2+`_lXo0TIT-}(Wsb;BrUr;#VJ?An1kR^h~@BZ}R){-K4vh6VBD@tTQX zI~H;TC>d<;lujXMt{Ewn$v>1ErQ~04Je#9VIor4 z0%s^P!oaP2W^+7*26jD(I2T;NzkX>IsNHb9-rz8AdXwY7=IKIi*ycZO+FNPdT6Wvn zx#X_|{W8IcXbaKX*DDC;rO``lDvkAV&9Qhp&G{=Nu6OtENZFX=ff$}<#3w9=^;g^( z(ys3~?;13#5!ZhB9gjQ_%P=FAdL>9~+MJfY8Md|23hLwfQ{j1lPwLuV?e1?y@~)|> zCY!s&rG^vPn~JUQlf^`y)GA$xIZ;UR`1T|dEm&Dz=W&=TTp`z0WUNAs{N7XM0~fv* z>z5xMbUG5E2~DRssYC{3}RqbJq*IC*Q`-Z}@q?^?&j22;kyRMU8~> zq$pshk%5uT{{2T%Yf`oCE}_j}Y)-}aL|;$Zpu=>Lt4&GY-S4_|DJ9ga7Cg1)Ew~m* z`%pk1^MO+$$Z$7wp>Nu5;PKv5IBrAcXP=l4@R`-b&2l5|99M;DV^O4jjzh zGBz{#0Qp6&M9Q~4&{bGz00KDU4<8l}@CB?+py!e&V}zayxs*OZ(PMX}4*^$=O(rhh zrz_58I8sKPt;9olt)8R-Ag0-CK?-@0|=qdvV~o)}{1XRfS_8bfFE zi}|(p#NI%~5BK$@)AS+v;h0^th3>G)J@}uYmmih_cF%boH+6gm`WmOg%- zX|byQV{kNKm_2r>op=`vZChnwr?A9Db(K9j1wq@6%6^uMrDjfbU=a)9u3Z#mIM)h6 zrJ}Z^8I7BL5ML_7Azx57`AH=7R)8yQ0FDT@5Hv6#d&po)=3wMN_JK^GkjzXFEErsz z)h!^-h(d)e$Mkzk7}PW0aoZ4&l9#MGX3t3hMZ5s2^r=WAL*WU=k^MbL`DvwPV#z}bb#e?&YKIU}!uNL3R?b>*WI{R$j}`ABWmBMh zzAw3M)bR@H2)`mQ34FPZ2ukc(L*)70KO}>2&OU{VNq)u2zq<06`$jQ9k?FI3KfqsJ z6D|Tqg%&96fHrfUhja9TFKU0YDT#nfMc`mb0NP*iIWy+X=G3SHn3F`+(^$;EUbKX8 zxygwW(3*_@_O|%NQW8thxUwY`dAc@NaPfH`j;5{eGwgolRTpJ+9!td9kwZ(rhs zeYe#egCHvIg#j+RgZ%m=4Ogw#teIunq~|URt!T&hCx+44hxX9iN?Lsl>iZt-0zY1foSPy&Eh5XuUx8nTzz2ZIL_Gq8)zQq-o@0P-x>3JYZKn| z)!2gDyJD&nyE}7dV+<*G&_8U}oBT2s(;%rs$pb0-K~Nq~kS3)Sb4c{=ipNBQ`B=wQ z*0~-#axj_cqdNlFp>a&7$SoKoWu)9Ixb|tP`0}S)uG>bEhXe?gKoLXxfl7Axkl~>E z6$#gt0o0Syeqw#A+%Ja!o)SA@uUz2`0HztUOK_RWP$&$BEkE8(9|+YQ#Hl>}cLce8kq6!1;D6p_*{ zFF#;k@;<=G)`dzo1H%7*H=-0)T&cCW+teQaa!C%E1Q=Ti1iOc#P@`vt2nmXK=M-=hic~VFIMJW1c%uJl z7rJAyLk%bI{XB*U4OlxeAwhs^D=G->fM|JA027P=Za)EoQOoiw`mbI=70M7aTEbU2 z5OZ3Iiva?3*lT$nqU9Q2YJRJ=dnF;95Z7bZAlSQ^SF zXc{E?V{Ku)%;cZDJe(lEXN(_w?d}>rU;H6`4wz3fo5o#up#bAoz1?GSrPy+}G$NIL zu8TR*``eB4cC$!X{Bv!X_4cu8Mn=&Qm+iZpiu=1SZtsRd&?ljUjY6FcqAf;sZGS4m6dc1RX!bT33kfj?O&K z-RuWagx8d*I3Zfz#ICr*94is z!eih!&OsS8kTStNea@fqOpR|&nCZAFb9b59*S#19anhO}=<&ZbI1bx~!qK+M?CS^r z&kJz%;kFyM=Rls@Z!CLgWiEL=rQAzwwwueY^Qg9q0|vHWyoDnFL!pA1hO%>bHh+^9 zsT)AFvZlk0mXz|oK8))gQ<9;H5^|AG6uV|DYZAAV6y~0*p#FEP!A|P`D%1uQ&Brz) zJ}-DWC#4(j5vb21T;Anf=zwU<71oEKOC1rk8$i0wo(dQ;3cBB2P-k$-C-`?pj>_1^ z2lRIp1bO^6gHgN&9-6TD<&WSwL?j7rZ|4I3rd;c8v{0~`Vr!S+^+$4}@aR@c9_$E> zzu)AP9UTLSJF->xq|^(0*%T@S4i(Ea%?S6WG;OQu%HZtyGf}G<3@=$9^VOpo4-^o> zSzdi)!XZbcrg&Z>HBU+FHW!Lxywsqpqvx-;DMAky)~{E^a%2Iv6&CDRVL84T{FrBp z-tdQ0x8U{Y<*4$$BsVCJMarJ|;u8d;E4hN;yIUnvo=?cngz*HPkzXR+w%D~thJ|@C zlqi=}_GV_gEW55?`0G3^&Uy^UaQw{s6|CL`@9a}u!&nPNjIOV1u^_3T)bD{F_j)zQ zj7Uj#qKc;yH@iPO+~qt&B`u0caj3pVgb57^)L9xyuG8N&C%VKgtt7$Gwm)7>O996kh_;_$9XNTSy`FXKEZjm&-Q{Dj z+V-2(e!_l!J{(8DhK|o*=8m1Nbxow}n%GUfO5hyk*>FGr<5G!P&ed;mID@u4%WUXY zMm?2mYeJF8VNvxq5(6w#MFT`Sg$M17Xt@2i-TRUY0LFr^z9F%~i_u1emvVSap*>Sb zfNk0&H`aUdfJFf}b^w1l?)tx1tQV z{H*Bf15pl1@}JjQ1NLHWw8kb<>&#QI)?8rh?+%YUcl~f&ewR)D%U;ZbWxj(WE9K1T zXko&7<%t*#vd0m~H($B1iX2!cxNV7zOF&sfxXnvaRaf2=J%*(|He&nX9mUUez78+6 z>%}9Nuc#8$N~R5snt1amadnPuiaST;d~=CBn`7t2#w#&j)=D^NY0M5}5$JmM)jt~` z&xF-~wPm3iz!%n^TBQ8j?8F38SzoLoI1%w;z>2LRM*AhfMQ_(Oh%m|)yXw5kFy0GG zaO?QPd1*X;QCYn#IU6VR#Zz^w%D3J`#fQw#G$=lL~#~Er|Dys1UO z{h$-e))kG_!N?Rkbyj|RaSMK_8{EBvuzWN#JGBLntT@JC7$joQyZa}V(6~h3D}~*A z6rTA^T7|8_X$i0j|Lg~091$GX5Xf0Qh3IRA)aap5{%|CGXxct2O(Zh71+t+{1KM&h zxgx)c(d{lika?*=kQ@dH24b7rvE0wYu_o8W1tMBLeqwVS#PKJd)Qe<_6tZ!eII;|j z3IYCz;4-wLahWK0!!~D5KgfI5f504`r!P@To{meau+Qxx3Z4=fu}A&~z^a*XrpMlN z`Ho0}jiYAr#l5rc??wHUPyxhme182CRHUu#7DOi}JZX%<>$hZ;87^kz1vtjX_z5DJ ztY{SwAUAMJWD)c$opdaRRHn z;%l@i(aO;}nPf$^6JaxKWjnZ~wdzvL_YpQ8p);yaQ-Q6b3Tl1TyuKvssm@3i4N6E4 zN6v)pUW$7M{VDoJ$5%V7zL1Ps=ruZW@X$(;20a?B1XwF1Da_l51_|c#{f#c!Q|?%( z9IZkkjkNQNIOP!ah^&e;;2L|2cb^J^^oN~0=Z2jpWQ5h*|FjDiVndT9%xmDq#H0{^ zJ*1ExDs;-9h=dH8?HEz~EQx&4H7=uv2zF`TLiPClU6&$nP)C}Wb@rU%95di;6OfDJ zI@pxxJt&Tqde|oEyL)Xz?X4yqqr&!dsCXe(76p=pi-)CPATbjobpHuSntPub3xJ)# z>lwv~nznU&m$s2X`3*)G3(;HiI_=I}v@J2BZlUU-P@q_2kgnZZ+UqTKbaba!mMdO! z_(GmHZ+oUchq>-2oLH~4`ud}8Qx1wUA;{WrA4xnNyvLRRyL6ohc|4x9tx&>u!nq~E zZVuSA3dt);!2&2hzK4^H#bvMENbq+ZHM06{vJV+zFJ*^pbp$Z9 z1XU}g2=Vi=SFv+(=tr52w5EYE-KgR4?166ffxc2EqV-`SZR%_!vv!vZhmwsj_0}VX z9A*bbvJ1lK^Em;pgyeMF#9w+5Gh!)K#r3^xR-ev9XwTUU^aGKi$gi#$S4vv{YN&B= zSGI;fplc}AuZ5FoBD~e@`DvJtV%ee;pr+sJmZQQejQ%D6_~*>!uTP=@o?ptguR~~W z8D1$6g}<6SIdrdJJNZVYR4@HC>>SqC13cfXp4zyPpVxaJ|bUu@{O2y2Q6gZXr)eZVB8Rj>jw_6t>GN z>Qk;b*9dR{0qXGc?yJcrS_J}09iI!}pFJGa2``%XJAuG0Y4#$K7c{Q;aPDwU)casJ zrASaeCU^I_1-I{rO3*Qu&2KxIASDZN&Zt$e90*!U3Gebc0d`u!O(RIt6<#X;h^B;t zz%CuT0OO#{liW?y`@6;^n>+Y^49`#rVZr>q!~_W}{GPCt_aA+hcS`wrjOfOalvW4N z!U-uD5#~b#>eofVm0dkYg+<|pNWi;3N2aObKxCInV?}BH94K0MxR-&{~T4F z%tn)xF?G1K`cO)Q{af|27@i8g1#ioTK%On5^iOXp*I)E}lg$(b24z2=p9gBYNnIK< z$M=6iKu;;h5B_nrJ+FQ44)gY#k)ku_?&q0hc`DPZ#T&^JenstoKZABlRHDVX#%psLr6qR&itiK0&QV#ZAwx451TM@4(w3 z-LFzH@k+^yAU@gaB=l-##Nxd#n zR4O!5mjCv1@u*KgLZY-;g4B67GIadV2pQ5ZBpV?wPGYgsbX_%LN*K1-|5|vBa2F~k z8l^GP84hJ&jRU~y?A$uW=6RSB&0L5%ukr6wP| zTo_}kHtA|OQ&7=1HJ~bVD63re{;l@3CP)9rI3{=5qUxFqdJds_0(fPZl8&Jb75?y` z#30;=sThX$ivJdM$2LWfHX_-SzxFNXDtlQSZl@Qe1>Cm!x1)i9$wj8*PWRZKj}8n@ zlUKgjTKPyZvrOOD7x!dHU&|@rr1KZO^w35#eXzg2Hr#eV*ZPFwxl2ZvfzS0~n&dKT zE=qGq-BPpL$WCU*9n-!`W@C9+BYQ)-yQD%MA$>VC`ahd~dS>Wy38~zzkKbugC?Ee%6a~{&Q zIm#|3XiMR5651AS;0ES|+F!YSnW!rQR62=ZV6kbcYZ2w~Pf@V+O+#Whqy(7_Khc-U z2SVq`N|x0Ae%z(GtCOBTCmRtaGEids`n`<()(^)GAsZpXq-o(w(!3_)H};wM$4Mt| zgtUaWOB-mBJ{=X;Y7bU2-9Vd{3$}T`Z|pPVxq^xiXXRdHm0EEoSSK_Qbyw%6ebDUS zeR=q9qs-U1ifRh-XpMR6+t17AkSu1(2lho%`!oa?AoZG^d^ z(skP|{A6W!PIuSTAD{5R$|w&g9x@ss2eER)*LsgX=O}gmX0uJWi{uUnObzhX-m7J? zYOAw!7(Jm`laqUqzV0a@Y-XD~C;8=>K2icQp632#KmTkp)VsPb@6M`XMYldvz}nKu z@8#o1)9B5mPyf36PW7G<#qnq-h0A1ilt7B(5R_f-spgh9T9}ZO=RrWg=dn{1AlF|5 z&SQ7Thj$D5fQn;voEQI12o3*v7epJEdTw41j2)ro5f0wGAvX7%*mrVx+v5Q`0s~)7 z-%jWHen-5^A6J0Z6vKT~Kz&5-e!4l^pz%FHs{sb{u)XLl%kxKk0qY@w^#tDU`oo)idKXQaTj`9REYHp8i$GiS9dSl zhkg%xkBQrl4;x+!{fB)>dWE|G!#?kkc4VUJIXcbu<4A|*qe?w~MgE-uYNhwkpvhq$ zhhMnudqnVZZ(!F+Bodr&faTZECwOsmtZ4Alw_wLpz%c6pplJQC$pOA){I|W2r%fPQ z-Lx{rAe*!t-V!nrb5AE~IN7@sxUJhdM1s%yU%%x%X1y=N6IvtqN=Q_$!MYS$T7K{` zI>v$J+@2FDJFWa#YHroEyPy$IvYZVU(wT8dd`4%3Im8;u%(2kEoWpUo`26|XfxjHW#83ZQ6nf+`Wnd5$^1=5 z|M1#s^!EP4$skdzZ0Km9>dPc$Q-x7PL=#?Lxv0Gs1CZ%1+kOXHbfdG>V}Am%*NNUW z0j$%%dN?NH(*vi6ukUxtCedoD;r$_cvsVg+4F1OPKa6>U_YRugh&HsIz2TR7C>8bF zG^GpLnBdY{eaOF=h-rbOSUPpj}Wx(}V~QJUq?FX^)F6gmC+#y&rYl z!rVi+I=25{fXp8MQ{>1fr$Mq4{?i|RR8{pEj2g#{9{UTBL^glW}}pJ2zihMdNXi?%t-nmGavZ z&P;}1)o+z(Co9}b_S=aQ4YIg=Unh^cPWaGRx`v@kK`!Nv7+)(hAsz z+X1^H|EIsTbm1Gi@FilJ+=~Wg0Ba^L!*1|EVIVL9VP}nCStM5SG_Fhcg@V7*s|eCE zK1%4kY#iOdlBB8c^y*XOM3^h5zj{?yujuq8ZtdB{W9-V2A*Y=;J;p6!6b-(0PAFosu4&0yLB7`P^DT zac}3gbzrS8HWFUid?Zbf2qL(HFIH$%GAfA(8M5xXpT9S&!j1jTcJGifTys0v2Q;EQ(Y}94)!a9C+FK*+bU%Q>xg5x@$gOE#(ApedA_^U|`lYVQ}0wgajnMv`) zADP7!TAp$9CCx5FwFXbdNiNYc3y1%AY6i_)^c%3k5f9-h>Zch#^uYIi>8pa6zPra4 zlN}?ymc12wRQaN=umrm8j1xcXe!VZnU`tZ}5Y(a|rd1vD>Gxr)ywbKt4W4%{28b#k z$~-EBankJFbgQPu_cTv=$i3;7YFjl=tSfSznw{M#qTr;fLd~aQnI${t|aPMHO%-FzX5$tX}&$a9W9e_5j*57OcD-nPCLk-ueRt3akvCn0^RG2*kNZ zLV}!ib~WrASbEn0vNRtiq=sNa9c5SkN51_f3ggz{x#4J@=9o zmd_etMh358*|XN-&svO95(s?df0M?e#@C1dfN;Ha3pp!=^MN0S!NZ{{_(R+33Rv15 z%z_=e^XSuJRktT_zN53HIZbLTd>| zUP5A()DJ7}?g?HcN{b%NZOapjp>ty@?8N8w(!3R8K7rR0sd`FLl57YgBas948Mc*& zaioO^H{uaEM z#g;N4loJcvdWjMO*}$Ww1krw$$@@lP;sWV@)LytFjpH9 z3crk&59xl73`q%14TFQw(4lfm|0rVAi;Lau;?95Ch&tQo6A;tyvpZU{_FB2B@wG!m zo%;U_F+dd;>1*oD>E9*x{q3qo+e)B1haS5_wkeSLxST4E4WB&!C~C`jX(^N5A5UU zycxRQ7jc>0O9bVGF}b=9h{1;J%Wr|j6K@GL+L1UHVb7P% z4poWLN8%cm#!KZS$1ia-ab?%T1XQ=h>12;L`lR8&9dwx@7!+xi><&pmqwSNJINEj@ zm3cWdLazu=G&x-W{FM77SJlib0x90CPM84X_WpR@Q=!qJ(BGdCK=4>a>emv-EloaP z7&zn%U}xH>;UcjkVWyWrR|cFWzqa}S=<<9>q-%5$@%!_cmSn`1%R)uY_Pb?iG%y|- z4M5{QAzZ(RGe*2SAf{xk1K#>*?`_Xniy2?3J7%kfF`RRk8qT*vF6?Jd4c9iAs@4#e z$<|#^@9>x0VhV3}T9@YD=yA?7+2*v1i-(o*$otT~cKMrmrzcF2nm)Vtk|I^XyH-&X z8hObiR_N*R@;8(bJ4a%7N9$^G^TbZh)F!8+O?~;J%2Q{!=uMtR^~QJV8*6wvfO}-Y|rB! zXYfk2^??ar9EKDp^;6ip*>#xXV`{5PMagc=yVfE-`)^E^oyUA47Lvdb^!8ZCweC=% zEXC_gVBlF3KOc8(DI1?cxRszM5p`1nZ{^SVT{?HBg1Nq?wh&~&Y@8NPGW<+Fr%@ID z^tL-w@!7sDvmGM6n>>Bx&fcv`Q_M<{Rkdl3x*;9QrRr5Ux&`{)}G<<}T&}eCYbwEl00YorS z;xY;atdSY1m5OotGf~?46ll6k!kGGaBjaILz#EN$O%|E>I#x=>xw<)4{vCAsBsEVrNLmy`RH7(eVQjKmvH8c+JL-{<`7&{o$9 znx%St!VJGDE*^b&9D3n8^9<4GV8z zn~q?z@Zd73e;wLJ;ce_==bZNt+~`5hro-(|T6&e~bUG+*B4}+rl(kEgslw?b98n?; zskkDH_1j8iAS=S@_S*9JY(3mO?{0X`)>YBj>mNxb$?=;;8W@0ejje@upO#vD_US%K z)dY`zad%V2op{*^{$L*a@dnGv-_7@A;7C`qs-c?1HH{$K_^B7VlGxlUKwRNs?f9B; zyQoDyg;puLwS3@7ul%hP>%f5xeMpkQd`SQOy{|)_T&2bXz<8ep?2D&T!r9Ig=*?!6 zUH{Jua3sTmAWLC>U4@&o5&YL?e0JNtv}EkIZrS_C>LX%}f@!TrvbN&_ppy@`ZGT<;q**IXfi#Vz9E?o)0 zjDl-q`^|4WT)?Mhp?#vTtSe}mGOKWJ=4VXo`fcS`sznQFC3-S(p{ypo3NlqFTFoRN z?6gBI)UM0gG}OsmP*+|GJCV#%-%UPu#408*Xwkw$jl}a?Pa!1uF=RE*XvZ>gD!Wwc zW)ZF34zm}vJNhwABC6-oz3^k2jHzX>vF3k@+V=(8y-J$9h zUBB$fo;3Tnrb;FPqOK<%TAKT7E6igl-Z@zNA$_wdRPh$?y6ruLn-hP+Ortb#Anv#U zlj8G{6;hK1@Y2qc)|EJ9@UDK87&7F>7uzewgA+E~O;bucH?*yR_0a(zp7*X}!JJKu zn{@46m~v-M$vtZXZuPY%`U|ScOJxe{ckgr?s!rKv>+);#+kGt8yqZNvzA$w7=Bw+8 zoDHX|4C%z@d?*Zl?UjNw_HAHZ-A#&{Af|4TYQr@pmy=8KJpzTv08Z|3WM5j*L$Og7 zQGfW51Km>->-3k9tfA9@)1rLr4&>>PnVggCmgj=2PZv{^PY&>?`BMAMznTQ{sh*yXwV=YA4gQ2 z=Y&}-{b{!Giq(>X$zy%?;;XHr?Pc=pY1;2ijH^HXO4X%T67v>ZzIcMLGgvK?E{IuP zjumgjK4z7<%hWos2)G{tYEZy#(O3!!AUH7HjaH$B@@1)qatMT0Au}^`T({Tj^V9mH zloK&==9=Y$8jkA`(xsT{;eEzCobn^-+ey5+A>7SVNg+j=IzuFmU7cKO{?Q)H`hT+!T9}h&I zC15F+EPF~yssfO~i`T(sBQqbIw;guy`qg3YOw7fbmv31b%lA;V z_fiY=nnz?$Qw@mY?_Qw((9MVho!lHu_mD_oqTFK86|mfZhl>KgX+kRrW#E-5R?2;QH^1$ zT!t;pem^H8i_pS~AI^M3fOjDcSy}7jt76)4;FlF@`Q4V`f%9&uoc0zsr2w64L2f^Z zIeABCH0PO^)RZvEffG*{!@=N345W2-GUM8|71(;wIX>(K%?ZW7k0?G5-@gHHjeuB)8{h40?sQYENo+CWU|-Tl_cy*4J@VV zJ~BRQ^rN4W$>O(1d^y1AOv+ynaH-^R{KKsYIpn+w*Du6%WcLf9(EEASb42438gtRO^;=UywEq@wiU6Xd>_c=RQG^l|(eOK0TsKMblUB`Ig%7zeeR z7j8d&zX`V|es)-rI8^?z8JE}Zq-8Njx98WJn^(IDDo^i)^0(@jpaU#C`0!g)SbKZB z?Ge!Ch6A*lGTob!@2@{rExe*Z0~9%|Ty?1iFks8%eCZG4f5CtTHmgU5-L39R31fU@ zGWJaVN3y9jy}vQD1blTyn2_b8F|Cvwa>j`Ha!QD1v8g}x!-?R*4pFPp!~AIujuSI( zc^Ri2h=lc{Xow?=3tmsodqeSz(V?{TI%nUA)g>|6}4DtgrC zyLnz${ayA_=H_MmV8@+aCYI7Vi|K6Y?-M~%wVR&4Ok4NpzHp8NSWA1yp5}9bUyO?) zPCpJ5o`Nyur)k~dN-BZ2^-b!A7w~le<{cftt{MXQT(YJm?}I(*xkxiPp6!m)-^&xB zl|S;4YBL$ZG)H@zp9R}n_&aTQTN-7QnCrMGOonu5&is@_*ejY}OuwbC&bQWMbnLU+ z&1+diL~TB+;ejEY+Bjz=Vi(S#y`)LyunEaXH~kANOEauTDy;O5?F)VtEumyK)qT*AQi@(vN1vX5Yz)ANx~?NVA7M?5ar?(hVyL+hDG@eCawiX-6eA{US1L)T|d?8`>yGcwiI;Q^|ajsLo*uM|X24;(Q3^~jLzan$oEoVxfiK)5Q(<|sM}8P|Y4~li729R9 zY_F2BKK8JZ9oJfPmXIScpHOF-;rXC)R-C#_<4A4RB}EPs@q9M89}3kP0Xl5VNE#dx z2LXSK8DRmmf7-Og*En}v+245=nVq+%YYx2lBI<4-t^ltW49HBq*Vq*)YDZ;fwD#A2 zWLI{gIEdhpe-^CvwepT@b0{)|4k+)8VHuz2`+epEsnHZgXgB^@$NmQn8WF$5n~^YA z>u2{z*^lc31Q#1Buc$v!Vsp~;AX}QxspSscg&z*ENi%{Je(G}Kj9LBZ^opzI*@jlu+XOMWGmXvK~o z#5Fg&pr9$!5@?x~f4#t!Bt(GE7}!w5S=6ZE$dJ+8Lx5uTKkK>ao>)_^xFY@we3Ey% zSp@ZtrN4y17%vZ!hm7>0LYNm7#T!Z^FRSbRESOK=sA=otf7%bF_^kD=lR~xZQ%%B) z+-CwXgjk8{eY5r}TW-vy7f`g{1O&XVb9#PWtp~=kzR4=&AXCIAJMkE6MuRqk;>Vu{ z3&FIJW$!X{fBjA>o?FrrJ005b`Z7bw;!Kb7AW1;293X|l*h^a_|JbLit1~gn*GKvF zOZE8s6VnewUo(g1q?V>Q^J-OR(kNptvr?#p-c)nDiog3U{}$5l_Hz!gp+i5dbc@~C zsumuJO=l@`z|Cw^7}p!0d-M+Wz!7l%8JEq#iT3e}rG)#Js~hgphwIszt7*4+W$%&T zMsX>lK0k=S-Q2GV6u5gfI=Iq$T5_z)kV?)au-+HtjgD5MfR%1#KM`k#O&?ms1!KV4 zySwuaVl4?mC6UFp^lkF3CdJPrFdb>cknb3~cf<1iIb{t3cYVW~rAEbE$`)F7aF236(+Z!;e89^X%*FEF6j~U~9*D z9s%uMnPp-vyZjvEGxN*^1Y^+(R{}%4Z*f%X8S;fD5_P}r-N}wg4>L0W0?4L!Zo$Ka z!^F+W%6O~O6)|)G+x<``>TDJU_aG*5R5t-4-j2l{Nt5buQk3(`UOE2~t;MMjN;uNw z%m|7{JjE*?`U70w(Rjp+#P^#BOotCeO!2BeRO~fs;=YpJ?u&3 zmVdUuhb(D}s3_A)9LdXZvocer3e2H94O9J?u%#^LE$~-=r}hi!8xUs6H!^SpiaMH)HS8oR@%SdJ!l6Zt62bbz z2=Ij3i%A7x%hzOMsct!1vXb6atOKS5W=!tL*OTK{}N@^ZXuDRC?+$J6z7nV4)ryiBhvVBV1B7p4;rA( zR}^CLj($x=yaFWvDv5|T0u5~lWdGuWq`%a=K_cDmoAK@AL!}e-lhbR;L9xOZkSqWz zWaHeC7$d6wflmzFeoENOSUe0Tu7S$ytW8=48^b5I0R`C0M zcm7V-bo-(z)W-Fu9;}X0y>Bduy9mIi-Krit1mPXSnr->@pdq-4!USsyzfXuIfBXI5 z*w@X<(z=L77)cO7^-uh^j_$nkT*GUKmiQt>IPEVdK}tp$Qd7Jd-{5!$ulZTp{B+jO zhHA~BFD&hp;T92#J3lTs8+S31zLv9I_R+#OfV}VxO8{3_KEp8=`GU;AP4DjvYmHNO zsQSuOi+ghxpFdZ@M*YSeO~+y?P2_6IyxGTqO*6KZ7Q+TR+kA9{qs~ciEoGfclLXRa z>{#R4&C*E^a)QD7^<GFlBDlsUNucvj|O{9r{LLf1R8Jvdi(P-7(L2%b1Mm1^o?~LKP|G5CFOdfqU zY$HLkIAZpr{JtuBQ$saVZlYjCekn>NJGmGXx(eHQHYlT&N^1!#TVM=vT|p6Rh$aSS z7~!|oQTB7XL(_!Fp0EpVn|G~#dtrUU*6H781FoZ^D)@a#S{i?`F`aoVKebZ_;kjPM)?eS>2Dj5rXI8J#qdLjI zK<+KxGWQrnWJB%G^egD#E9N1ruEoQxe>;bBNgu-82=;}AqL44XdFU1!cGPuW(Y)|j71prB)NzZw3pj9d!~;!MjQy%^=%gk)S2Mj#ajm(Asu zF}L5(tP|gRyB~aW&qdJCoN-fU-_ZTU(A1``Fo=&o^&%bzrFSN5Kicyib1O1(qH;$T z8R1`m zGX{PS`XD&%zbqW)nDskK#VYWhh2C$qRvsS~{B=$=Kb_QBzbcLkSS-D2%R*}LoX@bG zoKZfD6I3Zo46gor{Mf9`*!&`|^?cTcpeLs9sWCF8HpgpM+_4;|cvJ7ZdzYr#Sii>T z=V!aG2sn^Smhe0nbpyo45*wC<$;)<&p7$N@3zWV1=)W)*08?&H0SA;;N>&TCn-*P( zU>GG_&lOOlurd=RZ}b3A3bCVv1^_Pg8Z_GeD!bTBLL-2_DSkGh^*W=Sgz|OmIs&ZA z{b@Y%--3>K;gMH5NDfAkW^Jd}r93M$g~$aFcXPvgsKt zq3r5iO|oCI^51`aKlNGK>;Lj7^=&Ikx95)3N!GjVzw(3?I{IjlKmy<|%o-g&9XtWa=*1G4(1`+z( zp6>*$zj=Y+0GxrF0WSR7=Ftq-J%B|59E^N`b!7DNK_ruPpi%;@sYpPf=^vA_M2P^m zg#9Gs9ow94vf2#Nu)~>b8|^P&l9l&|(wv=Rn=I6iv1fL%7A=1-zg&_*f3%ZU(KoXr zJG;<}T27;e_n;asM?Lrm=hgLelX7S=fF+4M7>IAjwk%???|B30oLmyj2Y0zX)VJKP zNAFIADoi-PQq{!B&=Te!$NXf|_R&GbSSulx_k^1I)`9;#-OzL7dlp`q{C7ASZIG!k z6@?GPOI7s3gzid&NePfha27=cYVqjLtDA{qW%Dnk$aA#i#GLJ0f0hcrn~k>awIf_Om~(RRNzF7+IG?$DlH{8XN$;Bt#aUm?M8zA6qzOxNrO6-1 zqaL5!AKG#I4EghgYgZom3T5c_1^pWsQmzVwm=M8MaIKjjTv%3<83YCnR1dNo)-dW< zh|-Yz01Z)ZDpHrcgu-QJ5#Zm(XB)?4?jGBMmMKk*u4^mP`7&8`eyb`{xSk#movD1i z{hZK#+!Zh=u8+;Ey$p{JaY9+g?Cab8b%C>$TKdsi6wF7k^4^jD>zt*;s7%r^WABN9 ziQI2yQVQ%hH)vBbZN2uTMd|;NSR(l%Py|`u8}~=F=ZH*6kgTsvS!UPZ4?68hVOA!lv=64;~JA{mQGB+8QCu)ASI&ty6^+9~HoL=?1fj1zfk|n12Vm=*= z4n24;3JZrYh;?4JQtu^S$&;pwa=&kbQld>ou^%hch@yMmm(-$${JG4Jep34 zx25TSEVaRgbY#w9k=Dk`BnUdsUa4(`k>kHYIKGpJAdxd0i?X6m7k@Ul`jtf?#-vJSbyC9rP{Ti= zCu4g#{gC4jW`_Mf68aOj)~yG{bDF@(S$R=1T4Wwt(WqGSHJUgt_clqK7FqX=7}f{w z5u8Fhwu_S#ORd}}y&g@$BZ2U@h+=71;+UVc=X8o+%%1kyWJbQ$Mo(@k->RcT!J}0Q6**S zKFNq{YKCi&=ciK@r|`WARrGb@K(xM))1{`0aMJt~+wZo% zTE9LC&V2(C477LR-lxq)T!nE#fMg~V)ex(O4wZ1-3<07nhSl2`Q|Jap0eB^^L2y%m z5z^*{*}=-P9)Xl@w$d-VvxsGf@K5b25&Fmj2fgL~eY+Ss71QZ~bOHoM1z#F0)zQ1( zt>T0rW=AoI5RZgxmubIHS+xlo&)Xm`{9$9h83=zZ%hK5zSV#M<&|Fcgy1UcmsfCwU z9ezWJvMk;$6q&-DH?_=E(UZ60u9>atc)3hDL*@4o;;?Da>OyDGt-EhYcZ;8K%>RC* z!->1@wPL*sG&ZG-~iZt?#CX zJP|eg4)>oigZp`#dmd6!8TMdHKn-tCBFLz|ZDvNvFdhAZNEUA|8}~3GZDz29Zm+je zx+|kgn?0*D*k{AKcpc%ala|l;B1$4EfVbi4-P_>;dpD6m#JZm^-iQtWqpR#(5%-(T zCod~JQ3|Z^I*ORC^j=RRqma?Osp~3E+JD^HLhecVV#7I;evkX2LYP`Xh~;G3n)z*I z4SsiZ!08~ve&IaHUFX%%TsGb%am|mXu+tY6#nYWT5gKLC5h4@uS->ddELoReEkkU(opNYLB5TU>yQ5qdIK}t{?5DkxDX7*vO1a-*5zO4*_b;mk zzP~Q8DI1XnPsvAVkdyamAIavU(wO&sZ(OY$8JdZ2v~WvH*XUR~q==S4Blu!=T(u;s zi5@kD?$)j#OlGS-p1Q*2OJjZ=s+PSwXo1rAdhvO6HE*dexDN$GiF=NYW=r^oo^$6R z6GdROJEYTjjg8(P>3d{+1W1;Y8J9-N9HGB1=p^Jm-w+J-e4Z3dxX&q^)7v zQ-N<{cU5Ld?S6vv6-EW=o^TH149gT8lw1v*K5K4N{n1{wd2Ur`!w<~CTnO^CY(goE zX8V6ModsJ|ZQF&15Jss%k?s;fO1ewBK?UjV?hYA3y1QGDP`bN^M!Fm6jv>Cy^BwOW zfEn2Ly{}m7T)MWO6_*G%a}ADj8_6R1SGVzn~lHXPlgxTZAtr<;h75VPJTMG8mJbZZPOjk zwrTCDj^qBlAwaV@qWipF40!@wtcke=Taj6>#&Yt5_3JveGT&u+O-w((Eg9Z%%r856 zT9y4I7RD4!+aE=Of@36jz&Xva_9|ZspQ~Ljz{-In+>eJxAT|I;$lh3TT_MTZCml#4 zg%Apxkx(YjTfPP7bYC_%IXxuik6M1>cqQ}2S8F4frv86g0JN>Vq#)?4K*23O&aCzH9l3gYs-4w?Ca@T@jl0C z@AiJESulJ%(K4(c&>eNlt5Xz@EJzNfnR%K{?Kk`=aXX!}1pP41xGQh;BT%e|`-K1F z&_JCu)2mN=u1JGT7(o<@C+GFCLXpD-+wo)!SQTbXrZ57l>bPF3!jjH+)jnFw}carfAhmV684j9_oJ6TabkqGmLJ=h7;PG`6HYK&H! zsfb*<*^JlbnV=m_fE3`Tu@S>K@0%~B5~)+?#h*+sv`G7_>v|TnrVW_x*2i%Y6Eh?g z>U6IlU)PtiS${w9*nJ6?wXXOCJ!}3<6TW;(p_8M%^{Mat&%bPcAZgvb^UqY_U!emu zaXiz1Mqz4m5_hgd^P1w~!{W6jHtzFk%B}l3LnI9DWq~h_HfXHNa7)(~(#V`sef zIFo`u8lFC?I@?T;8i{kM<;A-981RVT64e*{z~JTo`VR{x0)DOkhQcp84(7~pN5qNy z3gCHBj98ne1I9=YSpWW$6dOL*T2EzVr5P#rN%8GX)C&u>AGd6EL9JzuJ@|0@R()#Y%6)pX{o-g7H6tc*%DA8g^ypy z7XKEc`bj3EyMmJNJL05ajs4xlP;lluqlJN=0`r-1heb}~JVkLoo1);qE0`l?9C&|A z(Wnw481O!mjxd<}ihN7&xQP-C z&*f*@TLsSc^MHDip}c+_qX=zu#E6$(S9)ZVB9oxH>)E~OKyf(xyK7r17m^neHHsjL zc+c|jC1lxSzsyD1VJnfWe=`A)OdrVukOl-5jn#=D{FcQfp@8k5ZFNqtBev}efjEtX zr{z-WvyU{5^xYH)OVxNrf!UN1p)O=Pq>fIP7WyxSBL2lpgTmIiHa>I>)N z&h^2G+u8Fm%B-ZDXj9|ye*7q3HXrmhPby0Ze$^0>h}q%_x2MsLH>1?~BY`^bPuL?v zVoclBiR(iI0W%pFir?VDG$emCc3Dg)^*3|-@(qg)zfDZfcwqx~H#J9>Zsc^MFS>fg zKf$hB>z$F5IX&_~iX3l)=jt_->`rHcAG}lc+$Ylg|uCj)WkanvP&;5FVfnv}0t2F7XwR!ZK?_$ff^6!vYF%?PtI z{Ti{D$7whE5)gz0fy*AMxB2Eh zQ=efix3z|C-zQz4asHhTc((?OWMlkw&SAIxea9?Mr@rv)7Omg)%|<>K7!~YoSGGPQ zLBdPF4VRnutlKP(TAuXT-mI(qk*ytQdiu{BD0l*Iv$)c-i%eN!w|tCRffqMi24sD# zVq+sYnY3w@&6mz-wFU_TAIi+g9KhXI^OK@VXqVzv&!gXFnCpiH;(PZR|4w0dn z@#J*WH9#I#CYFE0?XbGtIc5{MZ@MYlBCh^m5&T2~xTh~j;#8LBBI0J(=Q+ZsdZz`_l-vGiZYoB>JxEVvS$f zu(MG7ueIEQkVDb0m7%;omFWWKCUz-KQbLr1nW2~%EF6Lvu(o4PsB5VeUOHnzS$?pB z>y@3S|f3?3r^W`mS%pVb)pqXy<89dtz4~ko;~H zb*~-HZJ*NWQVM!#khE`$o=SDOuDv&~IhMi?2(4|hve=Gq4|P8_jrx{zOgtWW+Oqjx ztc}jg+Kyjo#sB!KCuZk&k&64mR7}p5X!CAc7}zsa2dwgeME%^rtb>P4v0{K52Vg-} z`H}H(UjqJTYpsK?piZHc=Myx2Etj4?UM9ZJ$Ae=Ntpg^9wj%+6DP(_lz?XOcSjzZm zRz*V6tUvlNzpq#NN7qev{b|#8Vdkyxx%TC=(;X#dkP`+R;12(oOX9`G<2H6a-7Cl5 z5zwT;XDxn$Hu5FEw>mcGlu^6vLK4b!a#d@Vvw zHm{%hrJ%&Xrj347{*ZDMOj?OfUaep9i{SNB`5nJlIcla@PyjV?W!x%BTMkjU9&DwS z?PcE@>*SxSP19`B4v_oa?~SMc%b-q&a0m2qu2&@C&D^AZ=d>Ej~-jtUZ#3JNh z@Et)__u&-bJ0(pNgn_n~jm5@!rnI_!OX6Hu2`Xk5Lw!eF@}b(gq!6foChpR|*>Ka< zK*5itdgCQkU7_K6zr2Nb$y%eDOFp#Sdzqn3g$PPY)q}*g0`Sy#z!GWVATA`^S+}J{ z53s6U0!+WVBGr!|j=Ni!Dhe6j$iIL0J5vy_l>7N%-Nry_d$dzLHMJSJ=-NfjvGZB_z_%A*sDc;fmZh>PA}(Pt173zuY{em}auhXgNj< zAVBY%6G@@{0)R>Q2Jh(*Sh^uVRbTf|XspCHS^>L$;B>|-B7(_04_MQnaX6wrVwi0r z*gd{VLC-)OPA|!CZU8b^R#ztcpxIg_J?CbPwtc%{CpiUZ&#Muj@*za1gs2KEs3s#V zi|Lm^x}0ojE-B*&w2qste6Vr8r#E$oXjoLHi@^;J&g>tXbgpGhj@EsRdP^BhZu^Cj zO@*!)dWpR?Hl2Ao0@TIMFAM?~+T3z%nOEPlQ31&D3Rb`Zz_w63tjX+w9|R`PKUWR< z)qY$bkK_m88UaQuXu3Dw8vtx4pwk#}6`RgWe3}b++|GY-Ue~0~*jF&Pw^HC-^KW7jF@N zc`(O-HtktHkb?aTcL-Lu`jBG!^Zv24P$w5C?o8FZ@wDX~8BmNC*bX6Y(S-XgVTNBa zhBg1j96dkR?{XT189g>(y+0gmjLNG;%0^nvl$oGx|s#R5| zE6|Mu1L>KPPBz9Se{L$J^M1!N%#ZTfn=?H;v`G>_d9A9F>-AFPlm|&mFBb_ zahJVTgM@DHeB;Oq%8q_pH)A@j40H)aN}Ef+`;aa^O4WGlSRL#Xpx_ezO-F-+q1121 za9|Z4t-Jc$)9CL4qp}ijv9f}t()3JgRc!$X8lh$nHxiHm3nPV4`XGO`mukXG*$er# zmKFs4`GNRIB$=igO@9{Et~{2F{kSQ}r^f4m2mf5_DD<=i6XWy2)w|ZL+p6M)`3J1( zJ?ZtH>*XIiujdE!<%qNicjK-RF$xM|`SC0%Lm5lMHO0U6nRwkxJKm?cCifVkhJh$F zGSbqjmeK0%v=PBEVkbMkk2{_SqD7Xx%K&ezS9%In-EH?o`F!Z<0S=pHbTn};V4?wC zz^NpozC~LvEPh=|8%4WQY`OireJFIU2s_YJ7>aNE)IJhy%mfi*sWz%3Y(=MA8!<^ZST-|fE@ zJ~aZeKYzL85RF1KJ_q5y;0{S|-^ucQEGln48=T3M5iCn;4KA73H(o4S;s(^8?hs0^ z7dU{h9N3I4+VGqLKWosuSAGwWSu^=VKPQQX+hlr{r=+yOmTCZop7}eWh-|#Or{-l$eq#21^-rp%XT8K73W`yKL36OK-`kBX|bo z@!GLXE0BC#R<|u@+Z5|vO4$0cFET6m9zchG!tAVTJtaiLTo=lG)}fr8$7MOv_(fmK zTmlWn;v%x58Wv>asBsE5V)bYG41zKf5Qs1ZUbg!^Lwp?`r{l1w8E)ZxA_4rjlOho6 z`YjdNOsZB^wZ+HFc!h(kE=VAoa#M>^Qlzd+6-GYJ1rs~CA1?H_oCx_kscp?{xTV%b zr&!y2)#|t-;aMyNi|1%?RMg}Cyb&Fllg#0-65Pqc8l0DX>K*=g3;LCAaW7J=a!9iw zpfsw91ZQ|4Qtd%SXVc_kf7xnPCJ+{sSq!LscVf*;i~g8gsJzaDECl zOqwt~^zZ@OIpuP;pts6t>4o^K-}RHGi7-+tXO5aS(%{SDEKY6W*tcG9;nduEE+L6& zqV+_SM%k$RDd=PIb6NZ>X2$jsZhWy|yMvG+1+GgRR?hh#;(mf-xlfKD419>>Ih2Xl zRvi&h(xkWI$5?*R62fhHj{=IJA}f<&3_1$)1m@yuwZDfODLJedbL{u&>4U{^aDml_ z>yiDy=c)X7^E&Rx-VZyC3$+ahP~30A&oml8_mDVqj~>M>E&FVVc3E4LK>o<_~| z5yyt#c#4Ng)X+Il{Zp~mSEl<$Q!i9vXp!hTe0TP_gtu1YmNzRKOkrlu6MexB#0VXC1R5A^7Kc7YHVWPOMoaY zBnCx_wfm_&`=1ql5m_uU0J;YMU6#*w_U%mDnNF4aP@xF6&|*Vbd15yX-bF zZP_T2M3Y@Il9c1=faEF9{o;3#hxJExlY=}Aa;@`@F+%)KgtmmWaCLRFB(31e@&s#Q z?j`Pa1W|6xEn%TCMg&noTp!F0TdhC9Dr!ZB@2%I7tRx{`43o(myvS6-ALAtQc6zuE70_!`m5O%QxON6P6&=sb$8>9>Bg<9&>S6SVRVkgM1`sfrzQr-ya_`0 zE!&JB@D7P^h>|jxAkY`Cd$WE@CrE{Q= zLiw24*wXl4L-;$uaXwrQGVzQ)Zbm2e4~eOz6CYO2YNQ}6tzXl3XW%3j@6c0NkHXT z$yw+b4x3sD;8h^7*f~4OZ04GulrRpN2D<`Q@i_MnIh&osl!U%P;A5R%&*{DN z#B3IUWnWulAVNFZEiysam(x>6I>Vre#hcbcV{TuxOrz-j>g>F&7*uSr3n{Eu2EM0B zd#@Lm$Ie7fK=-e&qVd)|*^;?&j!IH&2Uv ztx19A$0l^K9O;@o$^u23v2Yu>sd7nmmqHBU$XF+-A=!0*miK23S#^fej(|!m@=fJv zpsTsy^^`NY>o^`2g#QAbt7tRO-KO!!62%;L9^sqKI7JO201lYtz8!trqw5_t_s960 z+^^E42vOeFbKeriyf}*hwe{Wcr9*^Hxd2e}`o%%HI3%ZUnAjl5iz07ApwJr8!c@W( zEtSWK9Rc(#PE3}jEF+)ObAX71)R|`5Rg%=Y-^gJ9q!VH&U^8g^^JM~7xS(mtI0VR1 z)_aL;iuBjWN3q=@XD`IiB0ZnQS(u{r%PRa{%M^dz?@#-NpEm^KvFDV4Mk}pWun%Tq z3E<1Y&-Bc6Im~dFoAJ2S?a@ALMD5X$Ep;ifesFuY#WmS5t8FekN$bWKj@afLJoi}Q znsO`aGZyq#o98N?$EnXYWh?k;IeBi_!ml!pCsxE;*(@;zU_FMZa&e;PZm~1L{u7JT z0Q38Fj5>K>P}~tr>e0V!vLQj{vn(C=E$cra&&zWc)T$dB(he= zj5EWzAtmMT)PTgID@^g!hLJ9ZfMyKeef_r!@AB?#0XIvrzJ%o$dYbwoEc=KSDWoPY zuc3Qw^TTD%2nzi;Dgy3AfZ9liCZ7f-x1)(5H~KY@|S!_t)gtq!lM`7{=d9sc`;= zeWPY}?az3(O`Ro2q4>33R;3H;j}v^N?x9@y8gJB}oxVKgVL$&kgv42aAg=M^e#|4gl+q=S>qNZwO5i_OE0JYw21fWc&es zy%46mbSKpZ^$rL4(IZlKxm$#21d5)dsNnbAbm4LDh{*3vkMFUze*+4>h!zAW%@6a@ zqCte(@w)o})h#Q_U(Zr*z3L0=D!0wG=sYghJ(TV>2TrENRdm{e?}GqEsKVoKDGY;a zQLp88Z*kcDw95nuOY}Yr$0|Oc5&=5-HjILB)ydPQOdK$UQZ$3yLzHo*A>K70WxIggzjqT{Ax!L)#A zp&^E$lm1jzD!?G)up?6JUEjmXX0#Mg$(B!1r;mGs)^JRZUiKKWlj(=O{gxnGWFjocITim{1a-d#u0RjJsKi5Y@sO$`er*LXCjAcySNEV8YphQKPyS-BQ-Vs z!1(8}I(}J7JISgQhT-mPy_Y0ov@{IGOY_<0;6#T4OoBhMtA)jb1r#HEvjn#r^xt0+ zTK4t+itIHpIanm2F`M>Q%%>2Io~&#_U(w@16*HUSrZ4J4*s!ayFIL#8r514GASV|J zYOP5dL_!r+C;rOEGPtm-<h7Yi1BVj!1j;^Jxeh@pk%$DuwFi2Q+WG6R9t$8Qz*z`WBr_z2V8RY1Gk6Y{NobU z0!e{Y?Q8cFj7pw^@n7_qmyM3^?Ts)P*+kx720`-B6jL`)Cje|#`^GTfgPzD+J6Y@E zM5VBLcY+Kp3nb#$3!iyT|M(PA6%ZVm{B*an|c)G;z}t zljBYK3MMNJx!vO1Pgw!a4r(#$M zCVS+&8z+fD(a;9;1+p=+X zf?W@0W3<*|GSPYbqII)#PE1(B0ip_eEU;V66Dh6|3y$LSt5osO`0YG`@M`#|3z`H9 zbRLO#Ci}5vB6)*ysy%@s;id^0(t4IqQB5HM2a;_tjzmJvxC88QHz+%Ace0*L;a5ln ztn2^N0vvii5R4v7>Var#4%o@<4WqLGPpmL_>up#RZpxS2mX4QP^Ofq5uZJC|WbDVj zPjG8D4txoBexG$penbES=54P}!OmSbu)*R6vGHu>&>Cjvh)x7owhlt- zy4GDlGb-eh1~>+);NxdGeXzm|Pew?+!-2WuuA{GBV(V#=347B|M+RQ)US%=VEi!hh zs_N$4ps;dt6RP+<(eT#(=B)@dfJ`^)KH`XuF2>Df&om*4HVM=fg8QCIfyJdZXPpzkf z@At)T%)*dl${?cIO7FsLEdNjEU&`E+_PPA)OJ?id7*PTPy-?ig6T)@)MxhtUqJej% zko7l2B!c2~A2M-Hk27hxv$YrAiyXKCP9*B}7QHB>4Oegc7vIPgkLnJt%CsFcM#mO> zt+C&Ap5Ry&Rz&gkfV^A8j>dSe`pcj7^Y9;2cFsP$L=qwQ;!iJ;RSJG|OKIZFZ}#_c zuzw8r0cGM}m2;O!pebNhM%b~~$VYoYVNPNi3Jpm3HgYmDk>_+A`O5h3K$)1nbmN=5 z^bC>QW~Y}G2ED!DBkm40cKa2{o1o^YpP=uJ-v9uyu9d~Oc(UaA>i3gL zgD-Wjk6Z{wF!@BCZ8rYSye;|m>5r=d`DK#%JKkAYzRzB6;drfvxR{GNFCd~%02=LZ z5sZa$=d(LT;Rs0ZBmgE4wLnFiPM@&#a5o8^W92&qp6i8m=EDOPG{_>@1VMTKDtEm8Z8=JKr5)g>&D|7r0hT1W$4l z7tGYY#NY(Uxiff5IQsE}PnplKIB&W0imI?zxb?V&rIcTB)IxM(&{zjY(b9caZbw{U zL%NR+=Tt&xRGdb1g8VS9;{X<{SFC_^AAnhD*>z+cFVr17TQ^RR_!C;&9kx{Ch7yB> z&HU?!(=h&HAGPz-WmW4Li4i}S;2BK3(Mpsd80@rv$dcexP=FT3!&ZTsU0ykXRPd>a$L3qUumF;IpSxoC?g%|;B$udl=U`o=;e;H4 zx$o`=EE;AJX51V)Bmq;VT+8W2Vh0E3T9pe;%UJwiQhcN7S)0c4mV{Uo5^VxK>Kzis z7+4H>^*8>Imf|G`Z^1)>;!!TsKOHQ}Z0WP~Iy?bG>o6M!yyzSh0c$#mhY&^pDKoiqu*^;~UJ=d}$!F z{2I$(v`gL6(mpQFtfkXR8Hgbx?Pz#?X3tan5w$%hrOcbuOkFzOD z-zoi+P(inkhaREuH%iHAXh#+AYadP)@p8?NSDiJQ?un%YP;2r&6n@D49vg$(tXK0w zDb|w^`~CaoW}Me&;g@ZW#^N9U%$7apthf>56&k`(w3D|%R`?^ zi-T*)DXu2Nj0gPlgFX5k&0wb?!ZI2N9|6L|T#@>89@VA?fDajwC_xHezruW5;Rscg z_3Dcwg)bpYjErfFXjS2D83h8yyS_I2xaWDcZh^y>7%f1qOpp0OsLR z@A*{&*pU(mGsT~eA>RfEbE`!=1SG=51j`UcKBS4C?&q04u#+J5NG4Q#; z>L-2}PQez%4V($DY<-hgxoW;56C(U|I_t9iq+<}4llS*#?~OGpvK4V?QHFXV${mKWwT+- zgaui45+<#l+{RX!P{ezVn*cF-YPWyIRdYN))iR|qzZr(G&KKnqRu`!;V&IXQ)jDsY)tTP#85an~r-&td z*>Hp`+av-hMKlOG^-Jz}R}5F$NMPfAK(W!sx2(@>BI_4jhXH>HpwC^A-65S)0E^%4 zG57d^lt@A_skOjzG&vv`Gp(-eoC_wz|4335N~9`~WsV3Pk{zlox@{;E=S7nC5sYH~ zFpsvI26O?ldR!+Pz_uJo(TC{HW2-$Ml+(?~?F+<+?dx1O_6Lkv5Qv%rn>8ygyKD>4 z+K-s}m(?|I#QG&{6Q0`&uOr7S%LI7<1K*_$si313#2u)$UVzQCJvuw?m(>y0FN+Q& zkf{_RK%P^Tu6|#HNBdFC*S2rn^OzI{;xFwQ%=fNv+sW`i{NJ&q!M2Bd`mN^91x(i3 zS5melAB7|r2+%Qk@0M8fLdYL|}vkZ*5Oa-4mE$47b>W&Ls0?l=Sfi_VxGl_C#W*U;P0rBWqi! zhkiee7CRs?>k|S!_S&R3|78_@23s>%Dw_h{=dS#Q-lyjic4JFf?+6ft=>ER%?BRd2@x zMDE3tvbFL{RvA)s5ZLv2 z*}4U>pe0bZQiAU}6?H96QP3Qdl;3PWr|kHJFt;iaByu=MEO=PRcjn2c)%z7lbc`2G z+o?TXxKC628%OEJUlhn68eU=Tin)%F`;VmLP`eJ#Xi0XybJQ7$G44uM9wj75>_dPj z7bk_y@MSA2k3Z*RyAm ztDT3PUuT2{-V57S{bk-F)R;JB{cCr&k3$R$S6e0CXT;=Kot8RR2Iq-n`v7Gak_ZI< zl=64)N($X6?~AyNi{t%dt^v+C!0O?vjEYJ2*z&~cybT*J)J`gN{&=O#{?mXar&+Q? z2A6ag<^2ajWuZ{URI|OHIRvz3H_}%_F#Ykf6jnP6epR{QDF#J-T-F*q@woeA3Bq22 ztMswB6ZCKaLux#yir*Y1TNA>hy~Qcrd1@?7JzeO%TD_EKb4eVCz7OzhOq-m@bIb#R zNN*HdoE_GZx6VW2ZnX5vLEi{piW%l_hKFvx7__Tf_1d0y$ox1E@H z*wpD0W9ga`hg4v1PUripKkc!jd8Bnhkn?^_zPjFG7gaV!{XOE`9IYz$L0 z{I&2+_Z!7o7E>0b@2eZKY@A=@o-k-#dEosq8{0yU)2PF)nZ3yl@4n|b&67gYIEPc) z;Be33oB+vC@*HgyLqks6Iji#dYf+;4GIz+d^r^&$x0I;(hPZf1nyKLtbja4Q{YWIX zp{TULt`+nh0DRtue(vUj-n4h;8Q3pe+0(ZrQsD>a_LV*L3MHBZcZ|%7-XxRNo{yK%P?*j^64*cd}QC zF$e1)dGf;l?StN77GIUJEjf;{B_ANOd?tr!z&Clu0`a|L-1mtpegh#t&-z`a`PGA5 zVyIKlpe!qZap~m&bu#;$hHV3RG3Y>$>EbFZ@OgG}x5@u<$$b#inUR#5BLAZOJC@p8 zCmYCB&c0hly8q|-tol5{z)R{r47lx1f}Z>8!j_KXN3tx&^>daNaPrY$x{22>{-o@D z?fcAG%(D54ifZm15AEkMC%!~yQh%f5Ls%A*uCmlv{|;?R5hW!JdPsKm%pZYUPDtus z`Ah9C=LbnD2KKoGXHk8T`bsleG8La6c2NqkZ=vq;RQ$YMEu)tE{y#!$&9Yx_8Z^_l zh~HKgx@;EwL9ARWymtH1hq2`sPM==HjX^kWTp?FB_sCN6LGEC7wx1?uxLJWeEbqq_ z$x4W9!@!!T&b-t|u;be=9!DY#HJYL3%(b5Efj!Q?3BqM3gKDoMC(grJ93`(F4?B+C z=bLfixTZ)9qiJDL&D_U&^JQt87)SI!bX0=3DCKO4g~{}gha9^l*J0y1p(=m+WSP)s z-TwSZwG>mLPcbG-x|`uG;GGrjGig2{sX7^67+z;ZoCHRF&2LE!ruOtnF!&Q*UGU%& zJaf?l`sGtmDQd$0j0N@wKuFP86exo!(Bu0e8B=xd|E3Km4yVCnD2(W8zP)0U*?KOZ znV3>C7IuKw=+O+U<=WK)NWBPrbUm6iS-$pcGjPdz(yB6dsof&~H9y0pL(zzgWINgO z3`Tw_Omy0~3A!fVRFHD2wE$+i*9<_o|i*6f99MFo5rN zV-f;_YUtCO=VY)%ltrK=Nm!{<(AB0c`YopQ`C$Tz=oI8VjuLlM)sI3G_M_fF@= z=<_;ApJ`OiOBQpwlYmW(6k4S{Qm()FA>}=4ZEv;E4-$>Q)({hP0MhI9v0C3SLo4Qx z>roPF=@fM$Q@0P+E54H3H3zyR!)y)Z#>? z3ZrnIWV&~iXRePe`|13MKlzUA|80B5YekQ3vEiY71^etuooVLPDR95CqoJ*r_5Nv-xGw4~h!rRfX#+D34T?|Js0Vmb{vHPl;3J z%>Jp)XpAyvu{M(rPPIqLGAdDwFnHqSQZ%p8wgk>4QyGi_S#2SBX_gx1tUz3XlVzx#k?4=Q-z zZ{lkgKv7;11kjYdIr#|#2UZ_qV@m_^6F?LMVnEHD+HlnjG2wG4n zHo12RvkpXpGIj5MMY~v|={M8#9tn-2MsH#S@$u%j43O3*J^*npIIZ?I-P(0Kx&gn z1LUe73WK89R zbgE@}ih;DCMK9XVh_+!W7{?@{ML+XP2eYER%J2iZtNQ!aBX_L^b~s^3a{d=|QY#tD zhWg$V<-&C;pO?!&IKrwda{gq5G8Wg<>|c{ifSZFvBLLp>+Smaizsof1QV$pEh(J)^hZ*0ceGzb| z-SoQENFZ*6ucX-^5PJ0lB=XVvRhqez(7L^y&$^&A8lmaBdtLBm()DBYt9A9Xi31H? zpa$8he8nhEA?c0(b>UOF&IqEeqJ84&-*six%GYIaM%Vs+3Gx;jLj-%5?xw4H?0{f< z^CUMA`uQP<_?r=|PFS>U2UUElM!n#;&||#Pe{W8(Xiqjd4s{e2KHFd*K8NYKUFBOc z@FoJ4*qP%5O|ZYMsj+i zw?QT?le~oRuG&{R7mVJV&9iJD%W=#`t-kHen&~XX#iZC*9qjj6&hA)c=v4r-v!Cuu zs`PKTM&0+4+_#%$w)@oNsj0f>TrwJ!#lv`8&^kk8ir%x?`#VV>^js+<`WsoSq~r;_ zxfEM8VZGb6)FlgCiVmjv!ViX9h>Ze#a#Zlo=BYWoHyz>!u5Iw8?I+V?`D{jplBQGd zWAF3*)0QI>vs4irR7fR}G0rDq5H`Ulc7-2oBIn}czLb&0$cEHE2-lN}>A<&?_943K ze(ZN@amK0Eo7&Hid-! zcOZe5wwTxTBNq6s>4bcdx##z;Q-}X|Bt}5I|ouEoGYpHt0UQo`6NC+v^ zacAUr#cGT6sfo0kO=!^?iPBj+I(pO0`leX zCwOcLxITO=qfelW-fB<$MlK?Xa#o~{E+z#)u~2Q=PPrOWw?DN<1VvWcl6n0N!T0(JTTaO60m(!-6(e zTYTdSF1;X(G;^EE${(bkDZTXs)W2sI+V}Ssv#yEE`cGA=#X_PyihZW}LyVVg-eWsV z68xBY>k#{Q5~Y|c?T){b^(CIvEJAd?=6W2og7I@s`X|Bak+DO~*e{}jUwiw5NSPW) z#~Q^Pw$x+g`K)1Py~?CA(tUztqVU7n#wp?VCf#GfmA+)apK* zW5~eJYUJr%oKHEF0i?GnAliIKXQ=5NxDBt>-=s z+ROWerxF~l`mp`w=;+H3dQA3Bo?XwVVXvG_tiIG83gguZfO)Bz8M?#C2dONU)-3D!iuG}HP+x|4eZ5d!~Y^!q-g#Ip>@5AljSOX zqYTBER~=4ai@)-_s|u|LiDuzZAV7zbm=(30c8*t9@YmthlL`T9ZFhfhg{8Lg@q~`% zh{?NUdGU{ku2*})@bXaCO8?xc@Q(uSjvB_M#@tUu#L*NItii9pJ8ITiDZi{f?Gnph zbA78*ruFsI4V&Bxc)8;UhZGAal9%8zey)tLj|;}9@sK_(@IdpcoQ(Of%)qT=m%S>C zO3VVHpwHeFpqn|tv{>BH6(MQTqVGy6BEhh&KXDopUhx}zew2&ZZDuP)7>;0QS;6={ z-iglvQ#r_B^QZ17`!?+s4`%?yz3;%PwRdcc493a;cqU2Mo`hZdmA-u=c6Sv1ly|;K z&dcex#F+$ts;{k+>}UUd9kVY*Y91)Ni!D6fU|M^*fD1R-z=pQ zF2dL~reZfiLHIo{1A)k}oE{H8XUX51nB1FuM`7LA_Z=xk&lySN z-9*M4=Nc4j;G zXKXYn4iNn?5+7|oCXa(3?26>wkXLMXYl@ zBm?5p#iN5g{-R;nUh>hU*?n3C{aa3sL6iM+=@{#(sm`zgwT?RWuiuW*s?&|gB@W`Q zk0(D^IRD)5{+|{glXVAAn>y)`1a>t@h1L11f%2MpJ?QV(Y8>q5QB6)z<{~ctdcN5dv%D}zCMSGjj!2E{58X=-DiH^JNlfJPRhOQa%aJeJJop^8k4m65reYiQmo)>k z0W8+@s=zFXT7*1n2nYig!)kwSDt5iI!^3YV9yEbR*|phA!g$;h0V5s9;39wwj&gC~ zQtJF+^j){`eJxiD;o}UP$$wygFkDftJxj|6!)m@7NoMPSwWpXGuXVe?ZcB2x+%K&m z;Nhg#)$3I#G1Oh+Ctcd0KjkY03i2Q%izW6n`{Ud${gaR+;T3;Lk(tF?(3XuEN9kC4 zvftfu8O!fSrev>m!54(K806%5YS&qH4(>$u79s9?ssRL zg*+np2|Y4>`7f9RaOh`)k8J2_QpZXZM6Hderbsn0RI!%O4qNh+N(f!=Dc^)JKJd&@(R`=&mn>o93XWx(|f& zO)jJOO@HX=xoSn7<#g+N(GJRo#;c=FiJ`AGqe-FQlMIi4Kka}zoSGlFb-$#B+lPv# zVMxdTa!+JPE`X}++!{*4BZYnoAUNUIECmzh8{(f+HLk-be2(ZbzP9go1hKBouI+py%PxT5Zv9}-8}>i z5FCQLySsaEcM0w=_x)z(AB)A0W_9;HXV-qJN^ux?2~5B?LMFwU#P?xqC`f^>>PY~s z^$r|BB*8wv_sKF0ILDQBtTF4L5iLUZE4^3(>>XtBQi96I)d**VvSj^RiPyM6L73)W z^Hn|c6)qUeZYO)13JIQdXvO86yCm7zsY{PdEA&|V9ei6-Ya5#N-sLiBSle(3|Lwe( zDms(0$~0If{L$Sl*||lDD%m<6>qSuGdQ-laSO44_X)672BW154slgIR7;p4-fI=A> zSu64plpd2DGvT$eb=!i}Z2V=y;cq9F%18;*9iGZgFGSAs`+g~}rbPR7)DzA}5yyBw zxI*{+#OU3H!O5k(QTQLtn{t{G6!O}$+-qVPiL)(62B2-3`>i``Y*wFP|59u9*d^0R z53gGqZ*ErGeGu>dSp)RhoRf06z_SdF*u4GJz)^1W@lA}_LTerW8OdINZ zDb=qys7lE@ocvd9Nh_GwWMy)(1VL5;X-xJpP-1Nl1x1cBFfTD;8RR124Ik0KQj=eR z_;281DFNWcFo-nNg`1NVFJ^~l=Lk31NU!FE&U_m{2&sZC&R!-f8jF9GCjAw*h z2*)vt{T*p6J-g`W1n6ZSK%vF3kD-`ywR6)F;;Sfmj6 z9-Y;*HOhNpwQK_~v);Z3_*KZass(x2`O%~3xd)VZUHo?Iy6b!gL7jImeMoR@g8-|F zR_1Z>uTbPbUE=Fvz5MK(*VQmhFOXM_tgNhzvrgXqrH5)N2z+nE5SQX?&n(W|14A~( znvMSz!rA=Gs=8=+_&?J6jAJY(xTn+O+LXSpNb@`DRG43$!^eOxaEPQHyBKC@VwOLm z(}~E&*u;SET1XcTZ~`gV>nHPyfJ%SfWz&k)248AH2k)`9ozCHQ5i$wDB0N2-G}(-y z2jSW%SZFue{-%SFJmi-tAp;jY@ETBsgG=PPWN`d5M#cQ-IgQf_U=hxTy*uY^SkZet z!XV8vN2ro=ZZ(6)}twT$x)#Vm6{88x199JA-y%>+^W zghG!{c}KZtZFF~@>OdF%c9S?S>$l(c={m-a?IJtPYgcbp4q-T^N+ycwgA2F>_swm*wdCmJ>ASbR9pJ!yjz(FxNOcb*IYb<0)J=~z)(PwU>KdM5kIH+%te;|ML_E0>W zTZkyq+?7!^?Prs)1!RD=t&c>X&g}xV4OQ~1jOZ?^)ll_4MF)ALnz8w$_QyW@&-h;0 zey4{n9LXNXW-ubnD8tHHN)P}Ns)R!YQ+IP0mjZf|?E%@3xU{Yd#DC->024Mcs%KpG zg%A}w7%vkmPavlvB5S?FV`_fQ7W-fkJfp;Hmh4zv+MH zJfkjFGQa)vgq;Ph6Ia%9tp%l*`HcckXbaO{>8qX#y_LSg5ta$Vy!e=$-7sQRjBOyJ za1+6?*5XdL&_hW?=`3Z`+N1{tO6OSu)R}49?T&ArD&5j;0-?b%?nW49CH*$5;D_b`yJx~9sSOt} z1>K2~i{p#9pIq&YPG%MhT}BNBiJ>z*j>MyB1$(!IdjmbjP`h70&=9RHg*x&wSdU=v$& zf^mBYrpynuT>EK$1BXne$1(CICN!W<_S_cP*Zxq{-sz z)BwJs>!(Pg<3?vz$I`^W(NgG{Y~Y_1M?vMQIaq@du@|HHb@q8A3t?$XIs6}{{yHlo zFC?s`$UZF`HkBpj*SO6D&Wbj*!@8W>2JBEns<7;%@%SU{K@}b}Jy%jR!tI~8%&wPz z4J_B24x>MI)HCfFjfZ5gI|OVLu?u@wNh)aL6r|DkC*>x(zqn;=lMnDL?m7*JQE+^I zluTM%b^ z{<^Z!7|Vl^Ww8tw+^P9eP*GT0K9-!E0SC8H9>JokmJSv_(E6;xqoAG$;v|(Bs6e37O!dSN7a2tdDeD=sMM;n!gs|eSj2x zA(tQwMWgly8@S!V1TA!z!dIHba;f)Qc0<4L=a@i|g;E zb;6})D2UL6Qs~^gb^5;@2&i8gOqRbxd->hK_6LR7dC`pVZhiSW*%x%*+raEAq~vq! zkPWvN0;$^VB@J9R8O74ks%%9oJa3Z@WAh;pE*MZN0zzRb63y!Fm85V1^yJ<`J=Ja% zG9B~}*f2!>w{l8sM#jMH_Jae<$;p)v^&ASC14;(e7RvCK1~pa)D)xN7Qx`mVyKkw^ zLb)gC2bR{0o+r2kN-VAJL0FFAiYyW9G6Kl3sOT^_Bydlz*26MX9&-9m-GT?1M#GK; zf$em09znf4gwVnNQwBDjvFWg!z}xVI9NXD5;k<|r!aD+c)z=tgefLw@H@`2uLI1Ug z7kJNv5TRjiZ!{e|0So4NS8Lz4E%g9Lzdz*Sd78bcKUJkPKMJmRpezT&N>`K&d&`gK z8=?Rmg&M!p&Yfg+jB(;tRq!r;cWJlq@=0Q=VNOhHw~y%9fIKtMhuK%1G|&0XsmnIn zdWjSq+RDpPB!5sG5%uS*s!slBW5_imqAAVy&FscapFe_%v1Y*_d$f1-j7!xfRJ=p@O~L7q_mHD1Pu2v;y)N$abiFGy~E^FR}uLyhBo zf#wD+KYsq+X+ZfAV5qbvLWKR^)3fw;RLEtGLX*TOtG;<99Fvzd@P1$}5Ix2fcHK5Y_7N-fQPC>%{ z=*d|cyZzWP4g^fHB0=doGYUP^fTVN;?T4%?0s{&LEq&mfUeA0nxn6e(0ESr81NRf{ zcYJL`>4^>)ge<4XJEkwt$1qC|XY|<}kJA_RF6 zc&FZblylZ*JSqS?b;%pZ_v%F97r(sKk0i{w2Ae<|y(hdn*K>ciip$iXs`sU#*^MxszEb#IuKu+SV%UT6xv2M&(LSdmu6unLOU;DW5j zwvtj_AtXZKD^dU9;i8LjO;nth%N6}C-bzK0y-dA#B-gju#YCE&Ss!{>=$@yCkCqv< zpd9(0cxE`TxMx|f7eLKqI*xn>$h0=wjxb>Sl^NcLLX08`X0JOnwt{D$Q&5!U1M!H2 zbFZ^}A&^4^<}bUt_-RZUBsokD+uZ4^|LW|d);~J|U2omMwxfh7n8PB1O*ix{77~pH z@z~UeaEo+c{J(--cYuXs*Aidk6vN}gH>j;qJx>&E$8PDI%0-0#tXvDnNE!j1PUt;a zw#{FmgPX!IMTYJNIs93Uc)#VaUcm&5CNJ8Hdsv5QKPD75{JQxOf#|Y?wX ze3lW#6iPTEND_P`T~gXncej*Hn>{;w(#J>Gg27H*)H41xy3WA_Xh~1V`vpa=7NJP4 zdy|VRs);7X**apf1eEvyaro0IQ}hbDv=nbjhzeyNM}hq*N_^;rV6y|^%gbVE&a^fB z0eG-Y8@*BklrXPJJ>|9u4XLs|!b}=PR>lx$GZmDXuh~#$u&p;#h6i4Q z_@ZYiTjAEO(Sl7XpBbFT1&4ys;g=q=)O(kVIs=so2DK3s4Scfif8=d#N(&>OseKJH z)S+6sdY$Z^GjelA12yayzIw8irqv!?&jTWL(krCa9Nx$v&1%7{{VV~irgEM zKiCN+IhhC!q;uKG$4yQ`A!W04$*dP}Y-by$WS0efa8r;vv-()I8#yVu7#K2wjOm0K z`}QszBFO!kaCLRUx6AVVr8`d4L?7z7)wQd^O1M-+9PTrH6nb!w&^>(7jVt{{muyxG zrlwZIq5hw7>Ki6KG-;uKW(r3qAy0SZELV$usN>@lv)2`;&cP>IIjon#o`kFj7T238 z7WSRr+uVUN7P0g0$~p=Ma(L#$4A*4~fJf`rXm(8bKgD`L$-kAgt z`H5BDz3@xk$GE@G9qvQH1oK3AdU_^`MUj9Xh=GF)jx0sTGaVKPZ~$L_T63P2MXGnh z=a$45M;B8MpXNaCIq!fWV=!*q6#4H|tnG&8`<|l|JiHbqkN4jz-wZWOx6&qU0W6gY7417M{IVDlP@=k<4r#2Z%K2EQZI6 zXy!3X*ON>K7-n6zo9FvZi}RS|ENAn5b9>jD1H{oXmq~~$PHWd4u`)tB_JJLjSVZ^JSQ&&N10DkoHnqim_e)Cq)!IbGgT5-q7*Reu zitPS0i&~hqQXD)6oDicuZAlcA#_QRsS}}pjKNb8HvOemM-^>v#Hxb*lr`&CPYEp8r zer++2cE^_nmJ(dXYC~o*w=~+qA*(ZbOzVy>68!Bgg4>28#4stG^}jYp5L>upGdn)|6xw+lG}Hm+yYK5rn5b1+Jevl*cYoFoKV93h%vOK;6xq zj)x7Nfs%SezQpAA0NZYK5Z|3nlZ*S^FMa$c&;5c@!uh+C?=bIbr{Q<=uMB!6jxj2c zI4cY5am$1iQ;4L>bI|46)P>cru6vJ%rm}{pgJ%|y%#dXw@{Iyx?&fK)(eLScsdw+x z=M462l_RzFz;aX6yE2UrXT{ZsH_9jC%_us^XrU%{?_TDRMl_Rk_^PA*&fw*N`DW-I zbH?K=Sjfc_{h>ykOo07frtQ*WJ9F=@-#a*T<5uI4e?Q+DU2N6P^LcAi{*68Hi34xR zl2iYAu`=MPw-gHsubB35cyS(HTIfoBs(qL2H-B|2vg_LcBg&JkS5#ii`^9W8BU;&2q0B=(flY~Uv8Fr8wq3OdR>fM&8 z7XwK|IpD%C+_yla$u>N3-3p*6YCvuM`}c1In_jKWks63VTEr;fJ-_fyyL}6T37)|l zb^_icOh|O02N(#NfJ1!DPue8Qif#hyhfhmwiSnE{D*SIS?D8FePDVy-rD|L4 z0=1%5H2Rw2eW_ws)yv9F@bU7CL%7WKPuJ;SKr9!)VMS?>?y=H3@HLGU-xKm{;R5Aye zif1!qjwOWUYIVcHvdiM#{_fLxeR>ol5k}A-E>wzDms%^UK{O-(!_z}g3=T*^0NF{B z7?r??tj@_17*)v6wKw^x-Bu(2;HnhMM*%yB>YNGkr7kdmrG7gakO7GkB#(h}C+R$2eUHeV+0N8z^ zsB5_1eFWHDKSUpTbCi9561Rj4X3tXNE-^3Ro|>RZepoc`aZt`Y-RI3x-g*$1@Ad0c z+Um#SpPAX^?>Ex=Z=)M1XKIiDkA%2Y=+^gJyXJRfXE3XH}oM{>CNL2b`dTyxERc)U6pxboHh!@6TF3Mb z!WCYH4Fr@C)TV#{Xlz3)XfdfeS>i2mX`qUY6emVZN@Y$q07(AF$B4?E{%;7oa{-iF za670LtJ3E;vBwiGFo$(2KnMG@3tBQ$0&f-1$wGN;v_PBh>N_GCC3+9g>huwfcNa_# zBHxg11{rvlY7)jbu@Mp$h(U|}y+(m}k%%{sn5t!!lTgQ0yF$=TLy7U5yAxAR@qQip zQ!LrGEJh@zxNB4WUe&a2@9!{X6Z9huEKSVAhT8qMh(qI&>8Tx*#i$hUifgXTA!w z#`mYNlqdrotG0GDeI0)eo~-$*v}`;LUp|WZ(@aUIW{SniL{1}!-Q>3bh&U*9iG|2# zH#W?oG$2gk zciZk8cJotYe`1l_Si%@J{!rSXoa42*{8`}f(~7@Xv>_V(JVgFY01h!u_{}{jif?>0 z=0AvEe4G6e9az2W?fQgMX~ByKlcw8x-Pw zJ;uaJmb;Izdl^#n*9+`| z;LUy`mx~iy5^{GP#`!`O1VDec-=dmo*AIY!b9-5N52${BaKrYjzsOI}ziizo6^oJ+ ze1x-pUa`ulcS^aSR$T8sDry@IQaF#B3HkvgrcR>2+{*f;ksg#o|IWN14@EAn4LoT! z{($pBKn4n*2Ey$57uA2|U zjw#MnsTIgo#_Hc?#-GVrG-07KQO6;lcYR~&NvIoCF?g8zn`pehT0^Bas058}cfWo# z(pHr_riGtCXErlBX6S?sl1;4t^YQs-&BTC=YF3{7gC&Usv&1}8tv6HUf{aj$);CQ8 zfj*OkEY+@Fc?eEGBHjCD-4)K`0OOgPklt&l&RF-0!1ijRIt8Xm55|XbaTaRvVdr9& zUn;k=SPrPt`+*b7tbS5M9L?k4B}stG{(hEGePRe26}nKb(c-e(K2F&B0x=V-i)&@V zRp7=p`X1XscHyYw#Dw$3OOfE^g5Z?pSHy-h!`%$AsxIE;c|sL5J?r&0<#Av5woxRBnlw(!>o( zsw=c9wMmJ}22#C)jr`VgULWcq?|J-Tf2E}B3B?1yCsZzI3s_YVdVohbEauQ_{$_)O z`2bP_bbrwkWKS)@x1em+v5-5kN+g0VmSG!I6Iq=y?gaWckLw%{RYXgh`P4 zsQj1zkb_Rf9jdhCk|7QWv#%Pqv|5Ntx|J)j@ z;7#(q;<@+2n-#s*c6KtuAYQ8Bdw``1k`vYbyAb>XbPBFjz}8mfe57PXqPLpoAP@Yu z_)n&iR}sBiWjRU$Xe&n{(+y9h4T}6$Amx!IU8k*OE}>?$ictN6y+R7636)heqtVJE z=GVDxtGUV!kwL*~9>WpuP_aT;77;iYeSi)#Rv}5 z+DED|p|83_MWKV;XIrP?;65-8w#4$w_#|kf;B!FZ(O{U&sN^g289$7SEQ; zn@J@RAL!f3Uss(4C8zke&<-?nhYaYcu$ZPT+DY2H-Q6cPQv4NSFJnp!);k@O!SHY; z1G;IfW5+$eg8_^Ya+vkNK?;W?%f35LNfB|s+HTheEXJKylB_Eb+ealRN|aA zrrEb-1PL%P`ZvlLfSEQk-p>XZsQR8M?V0Hq0r4W(?mYjNe*U$G+|Qvc#CWhCZaL?R z&Z#0tmCL8;RLFvRYS!uuZ{IU3P~TNM`+AYw0=94>mQePNa2+X=)ZWY3r-PFK)dvqw#jH>}H?VE3q$7 z_M0~;-P^*xAdvzT<+#d_@Y6y`=FU>kYdP520vgQ7eJE!Nf-rWgUvmj+5IvbI{xedEJGg8Uv1WQhrnzQoTo6r9Z50CVZG(JRSN{hq6mKG3URBfDSM~yPjm5`++?@Z-H4rofrc%$moHp7>dBECF=DmkMNaqi>OGHJvkpL<+ z|8pOVV5_VOvl3y$1aCYoG;Vf0pI>`|XEGy5f)Cf^vpArX@EN4BY3~m%$xseN?T4|Z z#1`Wi)eefSLes7sygL4|rh#2&A*eVCePP2n}}^5R{=-7)1%BokF>zr9i&>n?hY z%QmQ%DZc;AYxbrXp~JEHarVofJD}BKk`$h7WZD$r4Ug&)mTA>i__uGG+uCU?{T*jK z6bBr|Z?>~&o@hoy!@}9hA1=WznqKI~)y4BW(lL*_J*sK9qZ%6DXf$FuGQC+5-BX~V zb@le#KVp~EJsBQcteozJ4pZs2`VKcPg=Cjj$-U30>P+~@XY zTb)-Sz>QMDN5%*}urE2Rs6!LfZx*h^@S$Y9A*9}4HPR}eLAO=6`oehmxf6>Nj0W#9 ztdNUq$rgB>KMkX@JVss6rx^-=?_(rnv0wOF^^emo^d}6*%JKVtpKhw>6>E{*3W|=? zf!IZkgxGy9Z1megD5ht9c?T}Am8plC|4j3(==74>;?Hv26d{J-{{BP=tgr+24TA>C zxF%}DTW?DCT^B5rpdicpxE~zEEUO&yC+($G;q&LX9%A8#PL`+2Mko%9BIl#b?lKuh zT4=EkNLLq4VcR4Tx-Sp>=fL#zk$FiWT=86#mN=yfEixlKrD@tV2uhpuFkB>-~H#} zSK0_k(+?Y{-}Qv&2S4S~tkLr;d4AVox0sE7mVRAuzPzlt{&EDHREqALTIVr#%*i{! zK$5z#TW4b$e zJZY9?{r#6sDzSjEuRVVCLAJ>i+i5f^XZ&f}iy5UbC4Jkd<9N7I8;>!)$^t`+&*CHF zW0GjcHdt?3lWbQos*;W_4b+*-uQ@(|74B$w`;fr^Bc zgrV7V2;K%G)Rd1F^~C(4vCL3fdV|K0nImz&c>jf3EqOYI9dQ6$0g%p$at z91*k~b++)!f@~?T__RNG!Xnred)Vht>fe|ftcrB}1CA*H$U+jJt^9ovQvwukt^EKjwO<{kGdM@(fk@lb6@b8Tmyt+ZxYGiu?GVPnp(wvKsKO!r^cx#V&c0F^Goyh)B zIndevG!|?1prSTBs1m)NU77+M@u}4|;Jx0j^|G675`0O!hq`&E{APYtZJtKu%+2QA z2AwnEz0Q{dPl*i`lF(nI8D(p0EY5$Q4bCHR>9d^|W0NL>w%Qr*7F1j&5m}i$Zi6H4|U?c!@&e!dK#`Y z9l4=kcy33~^uXh4Lm3$vc_wi`^KXRtkc$Hs4WAXLU}3##!+wq0zQEU#Ww4E1r{NI$ zyapVi!zX>T0s$y;Kqo=(0qPG}F$_7Bp2ty};^X5H$#!2|WSz~z6?4eG9*{|_BY5mq zEgK0TYj)QNcLdQfAF!eRGlGOh^s!wn4HB&Q6WmV!C^D}VNqT54?^;6(boad0so9)>uBjK$~~B?&{V&K##dEs9MbYkOVl z?_FW~72f3w2fG4!p4`Ajfdua93E++!+knv(I@t4tg(Imv|B5KM$IRKI-|2Pyth{W{4|tEpPlmf`<}fq6|UolxTWDoZWnP9kKb-I&*NpO!KTg{t0KSX8Dwi! z1goDap7+x%VSp z(|%xe+|!x`e_c66s3L1NV*=CnuN^vu^AhWp#z(8#3r>8w z(kKn9WXkT_P3BW_0dipHEpC4gwf>F#_c z{&0LN98#ww*Axxa zm79*y)hX5FVFuIRSTFI1Ngqd{QK3KOcW?DweyH7Up|bP1eLvIcNd|GZcJPO77|$K* z&4PCGG>Q8@oh~DrV@vLo&N&`MuNHAbQ*2>ny{5o=mX{%3L^X{3NzwL`RyaNi3Sw$T z@I?1)XeL_=9sWZST)y#|IB}8UiUId`wFq(%H5synypCS(3GsN8weg0dCT&&UBcCh& zPcSV8e$t_~KU5cP3y1YO$I{RN2eHn>>b zm$9IK2Y?;T&!ku-EdsXxjX%CtW$HDJUEb*cNcr+)&%TO4kbBY3q{x8cX*Tb%&oj;l zvWHqI^MIS`iug!F2{OpfXUQuZEx=tlJJ*8S3!oUIZ_p6#z_(y$R3nKIU3kfUuWesB z6#vN#lHRrG6)3dM?&8|+_xw=~^HoZDyN+O%X*?iNoq}ChM(Vea!}bU(vk|?Sq)Cz& znL|rHX7Py(-J%dUft1xlC?3%}x{cF_a|U$v&!MoxA+EUYGd1?q+|d&G#tumnI&Ags z(n~_!!>%7!3V1>SH%rH6r3T~vbMfgQNrQ9Yzgym8FBp62iNWs(4>q!|^u!F0AH+W= zSdUkkBvg_+jQ?^a|t_v0XXo`x?`t-EeKIaYt zc#PI*SE>wxbm0ZLXa1uA9u7rmp?kjdMCTw1B0AU=R^dy9{w+6pCZmKFb27iwc||pW zZiK3G%Ls+O78rg0RA*twi!N)CO~n08p4RP9tYp|o>>PzVDqF2t>1qS!3T z033^7nK?_s3;i=9Nx1HWclZYe=FbfF&U~~|kD*nB-l6e$x46>yWs=Q)*bD}J9+(*X zMP{+Pa_a@t;f|Y4*0!YNuGQ_)!Ei5>h;$3jmD=6t8xRLwgQn7TA+GV{EFwoT*$H-M z@$3~|v;h0quvm>UV$z|Mp?lfE)uzEbmBmEz`eCj?*{8445`CO7$lvkDd2=MUI;dE# z^5x7eOpm3#_X5{(g&g6ESY?J+*c(1famdA{ndbVeZ&}BA9T27;y0PA}^V&93j?P>O zj8&^`*q;7!&P2woN#51`!AYZC3d$q5ISP*qVM6hC*&QZ<6+mo{()J8jR6k_90klUJ zO3)S%w6*zq;n#WPE&{Y#tM4^ci9C_$3iZ|;*88s`d)=9%_Y9J3Aih7uWC7#_BP`go za^-iDLhp8@|3r$SRhAT}eRpIEUvoDVdHyyj)czo|{=G+8N=V+m)eSZ0Abl9V`UqHmKxV`_vIuHe~Sr$q6Tj25h9&DFx>#aBrheV_`Z9$U)xS`BG zGe`?HX|m70@>GRtPKyt}^-FCWt->^#6N^(#Dz;%_Vp0&8hVVa7^+s0njeo%o zAlnAg;A&ZktG6YQGJGDl;jj!$62&(f>ua8H=4yQ-e=uH>s zBhO8ju=u!VJu>S0LVdfVDipMx<+Rd%-I+;N=}t(NUql^jLT9b~H6KV%b9z^yEs~V+ zRRmht_h0p#T|X4V0nugmelhCdGTTKOscY8Ri{tf+<2!68P;3!!a# zs(en_!e-{j(e-n?~Ss8b~% zsEuay%Sj46GIFi{=w0nbn$FTO+5An;i$r+GF=w&h(A6b)Bs>6(XuAn-F|%p0VjSJ^ z&N`=K4gp&i>pgQl?1|DUo(Mgav_iB-cl6)`wz`=Yc)%;TJn2ZuQ`LpQy>@r9R;77S zfOUw;)dLhd93MPhtjSsS67|Th(6B2=kQGbN_)~_l`yg4suH}wNWBuw-5n^``S@$<# ztuwWsL(jUflz`#Qc-Wf6w1ub3Q{Th4rl}<(o8hq*hg}oEsSDeeO(wl$lv)T2NhHvF z1iMLqW7B-@Q)q}$O0&W{Bz*{w64A{0Mg4z#lAYquUy<~m8WH_o`q}>JiMkA@$(>dL8y%{youW6 zbW%_tU3csoVJqG`EdYY9W^KUdTC<0*!?0$DBHv$!*a^85o*#2c;|~Bvpsjya%t2~- z6;AjiCKE&C@MhT?|9o!Ko7pNyET$X=xhq4D(^_-byrCH0qAEoS2qB?{&0I3&UU;tF zk00p<$!0#Q-*r1N1?F78BWhB+88){fH~3zUD!gXt(LnKcu;t1cPG|WbBIwn@jOgf8 zU4u44+J#>_awY0#7eS*PPpY(~u7v;Ql1PIV3dfHqPUn4hw=m&HlunUl-!87p05sI5`0I5vGQyBUgs^_nkm011A-@NQ14F`Wm zaBdC2WANa!L~DeD0OyzwkVmJAMkQ5Ojs;y!wzDf{@&GO4Jz}T#OXRHL>X2@AHjX5C z5;M=F6x}2AXW04=1D>9f2)l5T_8mLO9l2lDX%%^c`==EHQv|n0gv;VY$5D=bN6pB^Qcw9R!bAPYAH%?(K#6xX^P;%HEv*I&qP3t>z|1$yL}KCByl#8Ef8g z+A8TeM|82XLx0FjZ!kx0SZb*$?4cH1`KZLkNsbYSi_wOugSq)pBY5Q|(*ctR_bqJ> zgNe*zA*Af9q@383En>26)X&d`OvcECsn}S`y!IZBi@-bIn$z&cRU~)HYW4LAA0{Sj zR}@dNZ=d5e^oa=Y;fE`>XvcVx;Bz*29Ks?>NJv0;$Jd{5^$2^v4gw_GhUb9S_#h2> z<84~*;XG4EF-PA4&Z5WH8IdkxJz2x$(@}MCTpZkA5Kl4Z>uc_NaH82f$BMMMmx|do zk;H88znR?Oc)O|jOdlN7M)jlm@d=Bi2w5`81g(Y_*OFZ#r(vA81Oe1~=#>|i=+&za zdpd}W#F=&XL%7|W(`I5m7p{1n*I`qcM6*zoFu^o!2soMdOy-MP2xJ_NqZixBw?f*- z$4YWcKwOJ~42C;o-24F554B$6JYZ&10Pn49e#&jiU{ou=sKbxNthx}oB*2AlO zw}3^Qr6hKMb#@k;6uBDsLln4RI|v1&w$JVL1-oo!#z2wlB4%Y|sE`D^;}bF8GiW#c zOQFfI@1X}gvqzN>jkLWREm}*&Z75IhwlP4KB?e8wgO6cZJFPhcd%Y;9ic>|m>u-Ok|yrdp#OaRL`sC)Tv&Z;o=y z?3s5${E^V*BN0Lxyp%da9~v_qe-``IvJ`f!N-@FxTb<-t;3bELo|m&?$xAT;Q{{@_ zRZ82S(~9I|qm~O;{aTNgnoH8Ed64gza7Saz@ipZf^GGUR$9XQ&J>oc} z)l>tPJ``+XEa~qiKo@l8Bo_1Iu8Xj~&SNJY?DD%(a>>rJb1jsQfRpbDe92U4z1SCj zt&UjBNh%PSi6?F2F11ZJe1G<%(APgLE1sdjc&wea(~TPcx#Tw}-I4Vc7y7mfp9|%jJzzKIC1?*s1%iM8kjsyPh^&5q=m#)0 z%JysAzT5DKkck^|6Gzqw_TgLm)(MF_l+nULK?;cZ&F=!$^oS_YbAsBVS^A*P&KBK8 zUheZ>8%E4!J{?MbyYz1QV7B=|8amn|(iD{x;}t#kpW8MyzjS{9in=;wO!N_x+wW$l z*l!rxF-m`oD+9;?8lK;kkh$D>sFEA$4T(MFn8!N40zQ$_Qqyo0;zsE7yC_R_ zejCDbEFT7r&OZa%ThtOxtCw!Qp7ZyIpD^=t{60YnB-)!AliTTE%GExGZaf$q>f90i z{#cDt^_(K?Kg@3%qNL7UcYg|1w3xkC1bH8w2+Kjodtaz(8q(P2g;+2*pbppAw3A>1oFRz-CaO>{jRPXJxsm9KlK&FQm}IfH>*> zuY0KJGYtdH9JZl~UeOgTuNw0;T`cq-F-Ru8x`NMJV&sQV)iV1E8pc)INTV9C_9tL? zl)tKy+e_dufwh3%`7twp`UH6}zSI0{_OeQ(D=R*Hbjw|l5%=*mO|7xio1l0$n?2>! zv_9c>mBxu_$5Ty5WAgO{Nh{A0Q4x$DGEJp?bu%tKwl?(`vqR*wG#EKR5 zt1UN}C_!_zjyr4Fi&I$O&G6vhD7#i&<7O0K(LLkE^=d4My>?&VLVZm(!89k&vvScp z&^fww)+1;$Agh!0=TO>pFnzg#N^aG6jezWXwo;!$LE$gaR1|_!>UekV68n#f3@DHn zU)gXV+L>kzOd8L!L8m{4IkiZ;xy7*>8sbgVNq?MuL;+3QMq2YrH7Xh_ylrtx><)>? zN?f1&lx;cHCq74i^8M)cV9aYY9Z_W4aDDlQ&!F)8KxNFi~@>`b`tIo>a$0GvYMt*J;+U5&# zep;@>+&N?NqWW)IDj=8ie_A-#-6kwH5nrG8bxIS$U@0q+xdZr1$gZtNyZ^4@+*m zpPsiQ=|w!w2x@`qtoz?P?#DjCGMC~QaX+)0u>iEfV^00kGCe74&U(D+Bg$2PEAdU6 z4r+6dhz4FD&3hjdzn8EsZ^yM#=RgXie~eSWB7x@mc$qRLq&6}Eo&NYYfD($BK!Rj` z#mCbedsqA?Pj?g;fy6(|kPK`GTIe;_!z9FjvfHX!ZakKR2lwC91EP#aoBU-K+ps?j zn0;_M-KssUwwq7Eebr1hgskX6g2UoEK9GBeLcYzh&+8oZD{X7LNR8{3Zk<@m&ZAxw z`AQ+CXnI?0pe1PbOM#+GK0|x43*TI@EF0q32vbn8#LDR=h3ws5*MH3DeRDgJG^F@gRVWO_2X-A-5B>D-9<{Pff-=59!9rph0^^dN&>M{7|u5^&u^N_mm+n zAcGZIg@jT;IJ;D9tn8yz6j@7y%J(kji-XH==dx~i+9d4d0_ck-{$>GsZYdkrZxP)h z;Iwai!@DUR;qf5IjsyabMxA2(u-JH3E0-Rs*Ff6#s|5N^jDuKaR(=Tx>&MG}Il32! za2lU6_jj0?JR0AVn%%!1oY!Xd@Y1wbP3x z`YaV-eI~9pJI_m9_qBn1C7{mG$n6(J*weaj<(JBL)H~ug?D}pCqB#yO^9XR}eKc7)$MvK+%}2v+f=8&et;meV4w%ar>O0`rP{W;*Kq6T!`GO zrm>l+L;u!w8|wE#!vcr*XEEGY(I?WSEldkq(@9cL=VSl0z=;;~wL2~uJ@cm&fY`IlFTiB$yRSRcZ6JT zS^bcFjqY0!csiE*EIc-`uF*2`(h@snK_PAk-E46+02M*@kyT1yjFFNvxv=j;NlfKb zoBG6W;@9@T!IcKk`qB2Cpny&M&w9BfB%BIEa=kFB)`UT4GD0Fy*Pv?9D+-A$gO@gn zQ9lehvY3R{kU{t(`4|j@A3vj`z@kd3CC&#JhLDjGJW)V1Zq`n+FkSs$fxt7*(a&NbR}nAb;%=gUFBT60pp}&##~zs#V<(A!;MLX z(euCSxEM8;g!Z(yZu>qNjOj1XG6~jX`B~dgSZ*@*JW?=+^Dg@vexwtdOk_9WZ1rSJ zdj6CZR!go~BzqT|Hzf9TlcbA5F}uw{X7n!fF7?#(Y;X+m7y#wp6-ztg?Lel1sgbe_ z1evlg{atepNwGF@f)l6WKqd%r0lY{jXq5e!R%IvN(gL#w55>df+_VbmtJ(3NnX|Q?h~<8 zBUae~uoWk{j%nP%*!LiSY^?? z>&;aU0IE0Eu^?N%iR+?WczAnT-zObQ;^6#gR)chg(9jgx)H>vB<}-ZFH{89Jl*lI{ zZZq|Ira*j<&dW}$SLGWSYVj=*)f&~$s~WF~8ncy)QFv#!p443COXxl|LW%8rvd)ga zX_}HFeLPEt0Gv&SXY_@{{Bh1N+_!yU#>W}RSSEK)d*X+o;}x-;dsWZGWpR&;f;E8b z)a4I)?oGUnL)E1wr9$A9Y{`mi2H}X-MP4zfZEFL*q1a88BuRK;AdK%Lj*0k?Gs448OfwJ7l;W zev%7bFZUAAfgA%=QV8q+WV}^=%LnYO43kd!*|xNO+V=m>NNOxW;OG7}zfKq`z_8IN z)GU1+vCv6&p_h3s`b#8wPIN5@`&AUssf464;d?44#f(ifMn0pVqZ3O3hzg~_WGm=v zP2e~Fu>n0;MsFn$;l>}MbCv>8l3epd3i>cfxzxXC-a(slfZC0Xt~RQBeDx*8hj-Ax z`%m~R$~H^~woE4|kuoGfX?fhD2ZAF*n%c5bh0y!r_a{8)xK(-SxtSL#a=bqzn{lPc z!}Cx&ehUe`Pt0;n-Ruf3nQrRYtNF<$p~!=4A-$R&} zH-9D3!W&6!o-McG7T$hB=K)KoTF!f3zGo4Ow?9?vNX~lnP zy@d1Z0k_*N^H6=_{#zi%Ex_W*bDYO zgsQl>4(Y$O(Kj?YKWCRRRuZ+5x6z+!KcM;|mTmur7H2;FRj#K@RJLn7uS)o`=$y~* z*6bYNO?H}|dV!KlT;*`VpTc3pwb++No*?1fZRW&-*5SLfIurOfgp5coI;7O<#-ZMD zYQ8^2p`7^=y$`W{r=CKGIk_dr=By^iZv_#0e5^wg@~iY!$$L}0s|kE&ud7mRDmUCo za>JQd+yE@fGU(KNQEt-RCrs498s5s!p9>hn5WL+#)>#P|6-Qd_{E*IJJ68^Pw!@DL z!)0%lP@(%rQ)_EmfO6jvetnJ4tkX<1KJT>Nv?^{sJvn19gVlx_bvlJR_zPqv3PFGcn*TD4?B&bUh3y9S?-h8E0+BnESO8>AB0Y!zCwWbW_q-%P zsPm!@|DiRR!gH!=KtxKqC`i%lW#F8AF|>;?C`?=C&g=J^RHR)E3l8fM9UDHEouVHH zIooB6y?$DH79&Pcg6I`g9tMzV2gkyf><0zMn^hHWng3{*8eKLsX5@xkKyctH^O=)< z5ivRit_7cvxw1aI{^2;2CE@b`LG)I@+x;qEL7=p=D>G@O!aQ|=;`hjWCNxufNUS8)gnRNiAIApm0 zo2?;6B={|!_$gpV+zzBAbo4*QON6h&xqQLrE~{dEf~zVF0I~r*nh}Pco4}H46Gl=v zZ^`|A)MM1*Ib(Ju^F2<|BBJh6Fh}?JrW4nik6pXu2tCd?uh*lp9}}@Hj!i_ zZeEOGM_ta4=DwuA@wua0P4!!8+cYnn83Ymikr{;{!&VB}jbzn%S=&Z}TxHWikvJw+ zJgm-$hA5dQU(^Tg{+Oxg*L=2-alIHy41^_4pu2b7w(T0Tp%s&H85Xc~`K$50M151c zn}gOQBQ2yZ{erVpD~U~3&iyu%aj`{ZN9O@$Tt3K)y+^kp0^8MpBS~&aTe8pW$1LSw zVm!cmQi{|U|A3S49Lhe$T3v~Y)r!$&I+&}ZwP^2XQvN14HYi;F0E_L>#9aOCwQWwV?G%mA< zT^KfZ&t8cqq7lH_Evdz<>p}xwa^1Z8$~T!e04^!3GSBVBR4Ifmw~15+OH66Ax0#L+lr2O zV_3l9jbD1kcP(@9ulXopYMj9I)?vFN3NK!3>zq)zbg5k#n%3$U#RRJXzo&Z6$I*U@ zb;%QD23>hcvRQ;EkZ}@qkJsmMr|&x&l_CItvWVz!nt_J6edn65sYDpT_&XMs66B$1 z#8G=d-EZk3F^gWHc!l_U_Ljz=fbO)U`IAFr$H_N)Zn;uJT~@L#zSR~3t3vTHN(&;c z39u9yho=SJ4xIv5^B(;+IFwcoq=f;_`-L{_yjZVxv>1xM?x8T(hC1RHBmce$5KA-+ zH>?JCQWSpbAcB%ez?OU{=CM=w%K2{m zZ|L;FzO(IzkfoAtDQH zim#1=0YE!M81#^$h6fqhh)>#;yBk3&<#_!NQXM{@^*GxtH&~H{BIacvJHWtRA-*_H zavjU~i9Gfzf;_?uU&;Tk>{9r@; zkpzU85N;9E91Z+7yz{`xF23UTk9m5d@*Muv##JrT1n&uRzq`a}qoGf}#?)m`+$5?? zH$X35el3lG)2z5g&Q&~O zrBod-cO~VDRpcyac2M zgsT5h`?a>%l+g;UL=ZHkS7p}LtcMD&lFAw5$OJfAH-xXPfQ|Cimh|20%#oC<+ z{kI)}vP4!K4$kEEalp*7?nh1eFV%a>Z@YvDWruxwFgvAQrdnV6{|VOhH1avSb#i(s zm%9vWw=}_ZH}T-)```>Smi&t;RkMBt$Dnz(MV@lNJP&K2KIBiDfXs@X?n{QPbZ6la zc06!s2c9_(Y4zV|G>gNKm&K!O-lND(97N{*IaM>zrSD_4GPGVGH^RzJiqj{rPJQ?@ z5WDxbawScHW_?LhqxBSh46!}%xzp=i$Dbf9$kqeNQ_KNx*lM3R4-urtE!D^^@*Jdn z&~|6TVbeEE;EHz+0j_;dTE9|vCZN@2z033~P?4%)m-(b_%5EdGm?=U0;DeKkK-V$T zCl1o+?0r@p-YNu&ew-<)QiV**Xra*@SA)S z2PEN%K_olf?Yz2I9Lu<&C6h+;vjRhTCi=wcnU7BLxvx>vzQ;1nh)_h4Z|6i)99#H1 zsu#3*dytLKAJfCrn;vbcZH-N=NbsomP=^Vwx)m+M9A6wZsCi!%gSD<`W9<^sr)9oqW=^14(KiQT07dn(w1- zN$iOL*ULE^rw*wTBtDUMfD6Xoa5RN;$jA^NWCXTnLd{;-Wm;MyJ$r(x5gLWgKlr*1 z4;OeJ*@gCq^_Z&?IoPT~_fu98lkh?A1@Uf~-;*|ri;rtXRU+?oyqgjAJ^q?Xjh&iT zZ(aw&2Unla5D;a_&)|)ti=iYV!hZp2DOe!xBE8mBk53D|03bp>jk>W(S*jEk-&?7^V24#pL=Z$-M2UG1+BrE zHg^1f7NO}KWIG*yx}kqEuv!97@y7LUa;_ognU;6y>s!dCNj)iQ+s5_8HD4M@a_x%g zFX|PsvU9cK^eFf1YCrl@97vzp|6@FL2vWIhL$pXCx*Eg^;TSpq-T) zV5tq2n*qjDGlkug%%`@c$^JYuuAB@Eyat-e{3uI5l@QDYv0hP7$rO>T{+o`&1PJ%9 z-F{MG0$fp4IpT_;exTrN`f=yXW!=2K<_n;@Us7KFn=sX3 zm5Mm2GHEkB`lYRxPMV7*^^azNJ#>MqMH9z+j{jlA>gyNOOsmrdf3%sNXmvFnqqd~$ zE0@1}f}1%W_2$Bzh&v0!rdj9Y`%Q>$&3(UvXi)L=KyGWcV>T^Cc}nkklSfGE3*V&D z?3nE-!n8b?UsrOsbV>VGIO5vKikE#iU$M_D!=S;ssP7>{`SK&ACgCGDOXX`KEW$tO zRxDc6Oq@R`Y;FbTA~0#zABVk!!I7NXBYK6I{9d9 zBu4oZS-(lWKvZ`6qFkNix!m!tpF{p+_w#!O*$<8q3Q^=(q16P-e;`^i0s5{Rkn`u5gHCTZWMBUTE z{6XN!ZToYYB+??50|8VMPIVJYehb(z2&JVfa$xjx_LS3M=lY-e*&EpBJA%Q-wECE4AlR0iR{})ghx%N||r<(ZM0UI8_YAo-b zRdDLhC(?Wrpixa|QF{u>q%%+zrWu7|$@71qvTayQPG-{+fSw9VMG$WN!v>guzk%)a zUyc1M`uq}Hbp#Mmo3%dqFrbL>s;2~RV%H>m6qswDwu-gW0L)7My_V{@~X4 ziN9^rOW!gOgP>t-9_0Hrg#D4C8PJ<lH5#`1`~#7I0{kXukrbv4 z6ftV=m%T_;@2rNYA@MB#1G}Nf$74pRnxG&w++9#&K#@x{l7E*Kjsc33)fUvfZT84cC&aK|XiG*qTa7Oh7;ux4Ujl5Yf(J@ajLzj5FYk#vsF+*@(aO@TPO1 z#z^48L}Ytr+JV>8%~H*HD9rCxlraPdSrH%fRmaweLxHwN8pUdFU*E4lq<K_>0Xf-<$JU`!0Ct~7?QlLBa@0}tye{z;Uj@Lwj%lPj= zj6yd-$L1@FlGutt!0B1Wv2)rSlh1m1isA4Hk$biu$^*lkzJ%r|49#;Z?nZ7cX` z;E0C{sZsH%FT+6nF0cnWiDoVwn~78y@)s(=${8uhE;q{+&lrFPvYWOqHRp7np%xmX zC|5hoaq1jzM04o|(Z;2a*-SZIi@gdgmYgeK-M-P%jr! z_C#lctzY#p!y>hrwk2KxHpK`OfK zkCEe}x&nvhebDQChnP&QM1PU#;l{YF!6eVPw;I;x3wz%$f@vgV{UqAaRJ^%cG!^N8 zXQD_?F1gD&aq0YK_tYb_kGL3&i!?4VBSpKFe^DxCo76sjJ)*hn;mgyrrryI&fT*s> z2pQD>WQ!MjZ3cqo~Q`6$GxW3V<_o)AG(-xz`$M1Uy z7K5B!r@4&keCd1QwCRChHZKeeO(~`0#vJ!!;g!vbsPPxa1}`(*-%tp4>=|20{f>!NRcId>3!d=1@+5rycO=q$-RKQ~z@^IUj; zE=>0H1~Z~_IW28V+a6fC8r0^RX&3%8F2R>##z}gF@wX2m%3Mk;)hO;lj2Z%X{qG!p zBjh5n`Jofzvz}y^pX^U!RJNs?__gtWYcPsn;Cdk9U|vx49QcUZ>2)PlI*C=ezhWgJ zSG8yU@CztbeSApc2xZoLX{#2~J^oe#3t&z^@*m0o{>#2m7!{tu`i+D~Zvt<%ZqB(b!rxV5)!bwv$c!+2^7A=k z`R7Tnx+BE|h}$NW%23bt6%f{=h}qWiqB)}g@f(LmsY&7IF7DH8EQp*9Yhp+>0?0;+ zs3sP|J1(aoPl7J+eu3|FTox||a9@}Cl$VgmRzc)Mbg&I5ga3iyjGfQkW#B>NtjRj% z?q4GpYs#q!O#*HT6m1(m{|Alk0t^w@P|D9k^|72S16fKDyD(etfpxm;LR~{}h`Wb* z#YmO`7trTs^*#4@uw;q1hiv~-qy8KHC8UA(ylD=N^*bt3%V;&Zbrnqu1QRcEGUHL9 zZ8uGUUhRKhPk5D>amL^q@=*`zMW1zuc9poXeF5JO_w<<3kF(++o5m^xO^ZZ)mCfXLh`2B4&CvJp+5hVA@9~AlMK=H==f>8`) z8N^K*U1Xg06GwNVR(@7H=RT`z91Nwytc+Z_PWT0co$B#}|jNmDa?HtDP zmMB~d;l+O3UT_cso$)tDzi8}?*QuodE_lJ59ok3yN z%UPPCuIxAxnVi&wm=6*nnNGYd%b5fqe_Gvp+dt4ivf`jpXHYFarR~oyWdsTw_c%`6 znkYV&TQ@iCu+=lvy})B7?z=TE^IflRy8b_Jl#PvjKjwe$RSDYrJ*hL{qeY3s%#aqr zXGxoIGa&0o>X%7kG0l#7ljPw+_6oGc^6eG7wG(?S1uRp63Xf= z{1;Q{fNMi$S?w^viJXgXCdVu6J zAc78xY_VE;fhV&XBT{G&z}x?FB*~xr%MxkSxMba+mFAws)ZSuuTseUH92bIR>RzTv zhK|MuBp)hly|b;vH-^F>9|yn;2&hoO0iI*GVlIqL(i`08x6INChOdLPbfI35aVNtzrxA8sY9NQ;`TzCeS-Q{7nn5;QB=yg zYZJG#lG0~P9av;!rf7W{D(~R1UFyJq3X&_iM23EHnCW?GT)!)AME?hfvT;qZ^S;e5 z%Wbgs7$IVWRuYGxE8ayCaRo`jYfG_^dz%J}IP|)Mc*2WB!PY{DWmhHXm2WQxKTNaU zW-6+RUkLLGNl+V<*wr!@EJV`A=)EteT5%iVWrh7Fke2Pe@B$CCFR z%r|&4EheGCshN1oD!3sFDRtaFC+{)+9S)ZfXXbJi*wO;RoB^;eyB&NL_;R_2o(EWW~w{^h0a$*5(PxQDDdi+N#Xmk3hL-XP7 zGu9g|v24Q!gxU{Ivk1=4l9z33FPLwxJGZ(!LT7uJFWc8%>`80@Pr>2gU0U-=M^4=n z3rAEo#20DUXI3*erw&aP6#PEBo>fptM6^B)0G` zLr%pKT~sdn|1j>YR5@Zejqq8@7%IBi^ZMGrB&ML#%$nG6EF!7-N->b@GayI-+?q|u z+vk*mPVWz@^!ylB)ER=HGy!MSmyn**)my=57i(c$jK9zG54g<2QRN4McJ8ystTrfJ zDAq5224i=j5IR<42>cfQ7`tk-3985FGt2n&BpQUlxM&9J>@)ie#>|leGas`$s`Iw+ zUSz*rt}1RW@-4Eld2wX#Fgjsyr0(T8Q(5*+?_~BPo_ZQMRGCSu+BZrKyno++6yq5% zRU*Yh;Dvf{zeM88rC8mb#J*xRrZ{ZMjd{JQUF;_9I)H<$3&RZPlK zc>k$#b$PSW%*6-oee!;`%3hNZ>pP!2_onU*l*gsdJKlPI#_Dg9xvno&Z7!@h9$V|=Ij)Sfp}U&3(t<66r1z7 zNJo2P)X^{(oKwr<3rlH|u{_jLTu0g~?7pobZ6R(2hN@^?u%-_Y+2P)6D4Gsm%+tE; z^LjpQloxy=9W*VQf4zU=*ezk1?XB}u?}%6Ow;sMoAk061*>Xcpn)0gcsj-R*UXrE? zE^_>Ssocplxw4`@APri@I42v#MEhN2S0Cno{?xi`t`3HWqypR3kWJ zz?nKGiM;KuWT4^^*Qzt2g|{AhsmHxcnZ)5H5jlS_Y@PmKO)Ur*9xu!ie3p+4X4c`j zC6jNk8IuNW)Eutmm+Z@C1OHMRWT+y9R7qLRkGVO3#q;rilVbjRBt?e@Tc~18-T6aT zwly0qazeFG1flUWTHWJzKT#0tkCLPzk}Oqg_qal+H9smWWdrx-+UvOBSnpZg8a)6W z)u&o;Y(1v=u&k$1T?-?KY)pX=36ds5d%y2$-oZ9mCKlC?o^O%mQ=c-B^7|(CxJ3GlNDSiXFYCnHL zw@_7c$@rP5q%41Eb2RTWGKpqmYZpC!t{95a{G{sFF>x8<@N6mhO(v~=$>aRdz$Kk( zqff$ZG6m!7P_r%;=X1Orcuvzigqs~d9z#YK#}6NVnk`k)gDEo?t5_fR5_Sr>w-Sao z_eLSqHJw|SA0sCaY6uX*g$j^g(#;<4@9*ydeZzPLHQcVp@H8$$&gcF#0viT+JFkDEd-n=`E50$Pe`xe8J z5K{(Ta1V@6a}7u`gREr|=1hzuCRFK~IW~ovsYp6MM-nlABfVNKmu%@NyJXfTrQl^k z4V@%(A|E$dRts@j;{0P;Dj1@`Y0v>RK2lsf75&JAKwP-yzd<6;+xrv&xDv$JYMtbX)~q@l%IHS z6L)p&QwlfUsNJioGqF|bsdD15$O#@E@7nD<>e2E3P{Mq1&%E+IJ+F=0j?4PD(qI7g zyt|9~#%Zn8Y_gY-4&Hp=V*PtUl=UPQty&bi)$B;fC;9x#Z)3pQwuzhP+8-FrOqIhC zXDZv4kz#OCbc--UeXdmY)}yA z@LTRz;3Ffd9P{L*>r2Po&zSbNBm6SGphAn)=2SUR`pui-4U7kj8Pml?FX)&&ZviN#aG2hUT? z^CXK7Bn%FUShLStBii6_9O4FHqoYiN^S|J({0y9&pJ(p!zfdG4Fwgt38wBA4dlYzgy#(5d_||Fl;1$225ImPVKdOgY-{AM8{i>RoB44r7aE~hF*vn_%u@L zGtwa0%lnl=ebZDTDZ@a~L$UwHdX7G$A|puVRxUoo<$P<969y#}M|v~O0+I%Q3mh|z zn3z06pK9FfP$E*sheN7QZ!l;dA|W+-9F(?;Q*&A#52COavL>B*VWrdFhkB*n(^eCw z?L~F9SLV9l1r+n@w0cQb>Z{grI?$VY5*<|_v~?vF7ipiq$b-WiVbvv>A0+%JJ%b?Z ztaO<2wj&05P>pUYian?Nlw#-H6)%%IHzu@hqHkrz8ccy|aB5Wd+12LIbRK;886xY7 z7yeA(;oGDL#nQX$Dh>Z#G<;(QeN6@H@J!Y9A+-J5-IIv;@VI!(SFa=6ohYvUu$6jb zqfWQ%``F(daIwqaB0yg3CLxy|S3DE%_w5z&PoK?m@Kt|g&}cP@gRQhO{muLgbt}Ch@WqbZGAyL8c3TFSAQ;3j5i4a9R5_HcQSf=Aw2_TAzJGA+4~k zLhGcxIE{Y7z`U%~?AinT+<{u;lIsyJt;Vu2i(ix_+p)BS@*FnacdxQ@_VXp_24>qE zQnd~~3TphQ(E-NIC(+Xekj_g z<^r&IcW@a_YNX6#M_pYquEedG$U#MooHGA)T}d8utUZVpn+Pt1(jyE?2G(;_B*erH zrZIdQP?s1Yd(RQ2pcA`s%{w(bG;xqjrgwQ&6{!M8SFi<=etkT#gRw6A&&F*kIGf%# zB9!&pv(37PKPRl9MWwNRPosM)4GDugP7 zEuP>o@BtG@rsO0SqCF>kS6TrF-}D9SH^|_2}hnCQ4ZNu9Hr*8e3ED(`Sj3 zAdWuQ0=W>mp6GMr*a8hEe+{s=C~Zq@vz{c=jQjvKiv7_1eZUY(Vz4E#&?a%i(k>YgTcE*A6EI}S-5ba-%90ar8 zp1#^@lZ8R#h^VqCfA3Z|bpcO>Y!p<2Df7E3ZUgHHu5KuI;V=Xo_tG#EkMFRzIBgh3a_4q8D#^l`i4gE29G$kz1y zLM--IgvCPO7ib4exC?816d)NNH7()`Rj>sPs&pd&n$GRo1?P(}%tS-Bt{ao1e!#|o z_4B%^Y4zWgWPw1R!9KY?>twQE+%XfrIswq36AG|ioft=5!yvUX3i}|*Z{*XcQ1B26 z-GkuP!Z6Bufl}fmFi1cy0t3^Ho_fIr9UPoVafdp=aL}uT8lRV_4268_K+Z34qxWpT zqT-i)a6n1&NX#Ahofe1u}SDt8IVUU7Qt^0Wci?ViU2ucx-MnCg)n1dNZ2C`3)L}h5hgICUG68LC}fXkkac`XU!jhL53&IQTKus z`7TfT6rK}!%ur2*qqrsYHkB+Tybzo&UL&~})21+)e2UV8KMy6FgW|=I9&V{;#r!`3 zealbpxW{;bH2MJ#=?4s4+Rszj;VlXIJhjxM8?ighCSDhI`t<(&`;F$QHX5Z%WF_WN>BvrSsQhuxbRz&RaPL2ZvwfRqYE=!Epr{Kpszq zWrjd;62c;pkV(}wa9<5!%G8+v-{+a&`7tH<#{|W^#Df(T_HJNnadjskBuLr}g??>| z_63EMEy-Ja38VyO{lqU2BmYZBd8Qbix z+g$m(I*u&T`ZWc{y`Xr~wkjvMv|}p02S5v3 zGrNfM?Yc@=i=n+__6BZvb?v?l(37Tx$nM26A%3bS>$3Zw3DXVMYKFL7jwrbU(#+vx z^0-}Ne!tm;amo%4|s#Wj(Ic%9I)OEL(YF z`kn=ppye{+fgeDWTL1T`f#~gDE=+j$F`_x)m%3e3X?d;dV&Gs`fDbR^-O+S>K*Q9V z)+nif`K}r&zrQh(N8BQ)y)gTY%c~@vR`B(PO&G*=$0A?0Z@Wkvpo)B8@+MTK_ZI}j z^s8XuO`smL^xKox^!rs)+4aZ==+oUZn|4y=&63o_OqHQrL1sTbyEU_19jU2$p_Yy2 zE{!(WZD!*PxB>POXow*{2c#h2Ri!86gI-Z!9h!Nq;_bERcWa&oncgO-HHk(q9Z*ZK}j{ z#gkil028Dt0!P*%_XKv2AQ@GHFObV2;B8%#3VrnnoL`2>PC5Qay${!NgM!hNi=d#e zFXa58f4sG#{<{W(&0ySL3epB8_2UEjX+)?nColx0BkI6bwCbtB5V=N79qAH^GJV-E z5Wr|AK2TrQ8Wuk%``B}(FNy#6ZA{^qI@pOSkQM|#qJk?(>&M3mhW?paL&X_37+9oQ!S~ePk5*MYmlhQ=2l?7H7K^CF{&_#whV8h5LDo{*qaoI|% zRSE%Fqng8D`NiWUV~<8#B#wTMBvG6nKO?P2IFv+Pqa$hi{e4qvyAd$mCiWG=z6gM9 zD(|^M>3g+#j?5Bns*gHXq0eutnj%H?A~f(|)y=W>Pm<9PBDr_=yiy5+yrsvFCs9k0 z9ID{htk?ORtwviEj(%&5`){waJy3HYpl z&C+H!^x%jFXy9DSH}H}PzZneNlRf%|{^4~RL~QdDFI7A80cs=qj41;l+zl7VqUGh~ zxezfPFeq&b%Lf-v_G$~mjLu1q7@ipdw(iClq*K_|Ulp^Hy8R9VHzk5CJT`hFVM=6S;DIrHUUfy45q3vna*i}j<1RrPYcs-o|f{URv2OK&Q= z`tMl?;mx-X-dR^(`H+#0Vl|9^uhpqM!ilkH>jyD)C~aEYe>aq;;X$h44-s#tZI$;| z!7&(g3c$rtzkORw-xFMwl0wqF^;yNX3ywjr`h~Mq>^QV7Vi&jt$q@fQOJ3u^;Z^@F zh*(4)^)rVu3rJ5BqNz$Kc`b`Mr(T$KW0G6MR8^OlGHhiV^cgYFwKyP7xsOJ5Vy6MX zsAEKF#}$6Jc}#=#Cf8mxiI!OQZhp2TF&9v=yX@yI{_Ogo(I3TR+fOJ6T$aV&1t&?Ou zKcovZ-!`|={4K4h2{BUr$|WxKb!@p%58QqyRwrS$3xRW(>dND!E=%S9VBPn5VzCdr z)yw;eD9TvE(8E@h+dTFNr=N+LZaZIH0Ox-l{;Rb7+#0<2wtQQ>b6cv%7KC~*8hPs;T@N2vxk0AF)$ zkLSap1~{O8MvEH@%}xxAcSfF0=O;g4|3(o#0Q&`d3>o1qayPJB#6%JyFR_z0twn9{ zXL&*#Y5fRXLF<2u6ay|IVS3@I@hHmrhULz9zeE`mNYH6%&rtIBV7C?REEEjq764AR z#x1&J*(R7WOLzpX7dyY|J6 zS-O_oq?Be$n=#Xw5yIO}pr+2nYb93MVc&{)qz9ByW`0Mkx|U#Lh5?W$?ik3{!S5`~ zMSSx^*N72f3qF!U9Ln^)<_y{iLO8vB0kJ@h$73ho@vXBagb0!l;xgst>T5Bbo1NR- zR6Hr=CCV@9jts1SKdPxK(U_PMBDA*KX^X=0JES^YFs}G3>p)#{GFw-aehYD>B~DbH zZC7IN{T>Z97^gjN+r3AyrNL;?!zEW8UYZYVfy8n|L|!bg(+~Eh=Rw}@1}}Z4y@$M* z!JK*Z&ns$2T+2-RLFd5XRxUHD@8k_m@y9sW%a^d%j(;t~!1=I4`lwG?>Q8DXLi!+1 zE~=u1sdlB8TDuxI=fx#Ykr}QP>eG@Fi?W{euxhWFi|HX@kVdo|jP=bOK{BoXi{6Lk zlA|g;jpzGhda7cfv{cmySIy=;|MqP%?(Tj2eM$y3ag>8kxNRf5n~HWBNj*^zCT#FHlLmutj?;_nxOe%EO*u#QZs zd_E&=73wRS-VE$0`H^^}OMnc6cj$uKd4KPVFQRSYHFI!EJ!{Gc@`N!bn*qfcq3M`| z+>KN>aJwxVD8GdwuB{EI4B-aT93LJ!dY|=@Hr&yHG>i=|Wq&2bdrE+U&`;qD7Ut4MPfjN zp&N#flx~oip^@(H5KttgL0|}J1O%j{yE~;MrKDS05u~KUZ?T{E^XLAd`?zPtnb)F- zQ6|T7|0osZzn9nZ^&zn^25poa6xo(J$m%;qgF{o6&Bce8Nhl1NEz?hsg$`wNROzgf zLy;y!*L*=-P##*@uuS-4&%cf)}()T;olhzFACx6@tBhQ*- zUVRGfyz36+6k-DZ497;#Sj{r}mlqBWY{qUAGNWtu4J2DxW#ABkP!RYNr^2EFVM{d$ z{v>jgkykx~Er`Q)gFF2o}-e78?yxv(0?uX->Sa-Yjau z5sJ1n3Q1vE@W32=ZpRi~@ttBADm>gFD4L-7Ed4;esV(%%uu)^t)F1x7;q|&#VptGY zH!6VXa421r30RH)mXZiL*a(`=+pif<+mG5k9}uTl2jC^P5Iwk z@CC&k^q&IW6TLq?I}plO0VuL8JVmqdQzTGf9tOV)e!vE?|CKLJsY8AK`! zS>0?$aGa`#UPwNp%?NQ`PbWg!hpU^gdEFX=M``rr+-Xa{FMh@9Rv?U;Qd3KJ6rcgC z5YTlV=#O(7y3Ega4+$=9t^T&y<-n|P$ndO;5Z?-YgvAo6)}vR9@Z(P*`TUiu8)eARMK zlu2h~k$hCHEd9ujkhzlB9sFOaKM4C9FoE}@5for_>%e(ugV z?YoB`F%_L}rj87EWuYU{ElY0EZIk?(aF(0XcjS`}*n_$2K)u?5fMyIhQebfkaON3K zmMFd(b~Wf|hNv!^>^gBN&>Y6G3(jfknFMy#+%`Y3V?Ra5R&+dOetFP9e#pXxRri{3PVyrbmC+ z-x}vaXx0_oXF*4kaJd=#fB?xvEt;$%hDR$aMJIucGY3oNj8euy!wODHdUveg0$x{# z{iTCgGvWQ|Cy$^+f`y5iZ9f&ECP&x%lL3o(I^z2O)Ws-5)Qb#AVGd=BS6i&W822 z?+d`^mWZ;yI0{Euybp&IvMk07-svnH4ydv;xVFncGtI(C{jh0e*@NOFfcm30lCD|w zYAGw!_5^7%VZ4~|Oq%SUVj_{-EPGV%9 zxe;)0zkr>#pGM4a>Hlhd9dtM;k^i0Sanbn*Nzv(@DFiKh`kAPlDVKD--?sW?cS6z2 zC2TxmZ8Kt;&w7)sIZH#hnF?Pm3pHntZHqTnN|^^}Wydb5lSa~2GhV=|XM;Ggl za0^QkIC9mTF;B|_5*DbNGMP0HxnDdpJa0y?17vR5Oyu#9$;JxtB?b#;*EAEIEwh@Z zycsKGej6;t}_`e22;XY3G6m)jab7 z@%mdRva;=1kuAYbzQkBpcL$0j{rl?k5IWOcC5S$TPZ$v*Tds!lXwy@BEaE zn)L|cdvu>drfW3I`B2T*yq6NKfM$-(hPro{YGsv= z%81mtl(N?q1MQzLC?r;CO?QVPb#V^lnJ;#k)YW^$30YYSf5w~=E;qz{s5Y^Gen+9z zyc!0iOoN51@NyWc%u6;Q$*7Rhezl{NTV^c-nd-B0!o`+P_r$?Jwt#Uvmf&}+qc`sd(!Jqt#uG-DZxfqdtim`$>8{h2O=He4!0sxt)$ zcCmzPR}Je?nRH#`hg%&E@%XXovLTUgtBW#(v&io_A!yw1uYTw=BxVUvu==C3knQK9 z9^(+hpQI9g38RydCaRx01l-?hCyRr^3TM84 zJ{3Gs6BPGllB&oCjW#i~Fw4JXfF=C5@OnZUvH5Kh5x}M+SO{qY;4hPqa2R>!(LzpW zl0#wNXnNXS{GddV-l*{opwgztsX^CsAHQJQf%)E^&i?w-dN2b}?-L__jBLx41?=`E z*wi31(A6#er>h6y{Sf;M1f@AR4ASisuJYW5Bg17qTZ{00_~fz@6yOO;u~(=koH30Fc?MN z$OXZo`d;=F*tGoV3oB|Iql;dmd2#u!k%saO$4<$n4Jk7tUF4n zRNL~WQJ{y&Tm$FU1a5|g`tWH$x<|EVsEpdLo^1@&hd;6W@TGkuYn-X}&*t4{PoE?p z)kF-=g?}1YCGW>?3LG|~U^tQ`zez~hbu~(v@6AwiRkRML3{@)dzFEF~^`cz9Q%#;= zKVs3Im|FLE^+<4nGUOGQB5I_er6j|DFRmwP(hlUkhtA?kR| z{iN-rK#k*11Fn#R&(bG%-^Of5YAYxy&pq55QipWu!Z2u$ABY}kP!6cA=qmxqca2H> z2s0b76}MpwAK+&n&cCDSBF6^)inFzKzB-inWiL>-B_+2tm3(}BmWMgNv}rOz@aUfO zE`4M-?Cne@Le>P|{}+qDoB@}SA7NIxsAH0I8c2CfsR$9-n8a`3rJIpL+mZHrZ6;i< zb4Aa5%=Q?U_$}W6YBm^$gsIuA4DEjZ2rXL)I>bQpFH0(FeTT|p2@YP3p2SDCiSH63 zYcyrV6l@Vu#0_K0cK>NS@J?@djD*10YbgY>t<|V?vCc)j8 z*Kz7lv~@fz^Z2HMO5px>P6BH?uz*oYMtxq7Ha}1|28bhV+ z4$Sh}PBlQw-qY+Nj|xybwA{A=A6=jcAGDL4Hu`}d+T$|*lpp-5(5ucN3#NWVjm}O8 zO)-PSGO|IOqo3mGVeiW3ak7x*c9dpU2z#^|2ryr z07UX#b8_HX;Lu-cIkoT(F+(2DZWJ)w(?300Gd4(kEd{xz-ei6t(6 zU0h65;8eMP5783e=|SKLjZedGDP}YRuHVL!)V$ndU?rEx`0)NA`O7!iA0_VYy~gsk zu-58_Dun5GLQle-Dz+`b4HdV|5575MTo-VGH35Yp^F27pkcU|=CAcl+dUxLM_> z0>{vvhbltB3zyMgZ3nw}RB)n|9Ixnp16Zt&)40Vgp#;{OcmIH`6tpDUi>ulyX#7pM zI#SlK+Cs*F8PoVBCV_?90mYjFnfulFM+%mt)4NIYjBi&7>i>7H*==ZDN+v~(@?)Sm zRzEaqC(7Ruod$T!qN3%pPB#MHi?1l1fF z^pt=_Pb-bsB6mC`<@g?`26w8#-w}aUrSt1g$ZQQ&P2Brmp@FnG&tN5 zk7jota$Jf-k@sG8BxlE50uYcc-wA|~qQS!tZSD=N!_@-z#b3#S;%&b%yEi%%ldh@Y ze##Cne@jU~H{;{oo=jJ#HJe!Y0kTpP(yuvBE2o)Pp}tvEhv+cKR!*p9mRU7@kui3Y zgg#T5!+_{2an|#&J`u*kImX4ohT>fRr?_&}KnK9Ufv5i@54qt3%+^D2&v7`$1e3(2 z0!W0Wk9drR-M2OORcxnR1g^CAY8WK96yxhfuB+NE1o2j-L`5~G2>5FikDBLJCg9aY`LH@j_g{!g2kZV$j#ZFiA;;&O z76rcX`rwvT?}vj}w@Y>vWZe*k4NNR8Ep@9e&00JgW>~s28Z{D%x1s`?s}!7*odq7u zaq@bpq#l+p)mM6WsBl;5xD6^60e$$#gw4CF3_PE zWhGfC(EQaZ+LRb-3{X%RGAURq3auujBal5Rbidjt9I@_IB5V{NVU#l19!QK68EK$nLkX8Td*TC&?kM2Ft zlcktM-qiFNKN!gj9Bn{1Le-4z{#j_-Ecb)xxsT>zZztSzIDv zMD=^;G#mR_b6ed}>Jv>nx{{6IRHh*#rC@`M$0B8W4s}9GLq>kd4zM1WPFTvg~y65|HrDUr}`*;x^lbWAyx{?eGEn{Mv`knv3k@a zowD5}#0{%EG!*?4uWby$`r-@t+`@t)%|$21&zqC6b7d&q5W&pF%8E%fdN5`0g0Zpj z?NSih1mLb4ZuCmmpw!WYo`Yz zSDkMGR)AnZ+-rsimcT7CQCon0e}3iBclyukl}R}0<;BNnSL~~XkY>mgW_lJS!~*Kk zY~*Db`S0ZFy)VB%CZa42a_^s4PPWa|O5%K=ve2S~xV|o$J>{``dLqP9`O)Jii&m7! zU6c5Wfr>iTfpdE756a120?`VOv&NiN6tCMl)Z%uBChFNAp;^_wCs!ily{0u-=Z=;e zk<1&~ddZp@^4)bcdurtI*xv2)iz|^aHwXuXRBUxZJ%>F#PyK}Lwco~v4bRo2jYg>T zb)Ufrbp(^rT^HhSATYGJc<=_4;gH4QH#mqnzr*)N-oNsLU|RG7gZ_Ao5D@eU=LM5h zTOr-?^XCQAKI9Kq7<)042-C%uNwzP+j}r236`D&~j)}Uq)a=R|dI17Iff&^CSyxkq z-(8>uMr1mA&ZF=-kTaa|WQ4$REW|3x%0T!fMG|JlQu@ty96}o8G(JxBrw_b#ucB9D zH7E-(8U7<272sAFX$NbMhUA5UTL5rnZP_fQ+3k_ENeH4@$&su=?vkmqW_9ab5;pAkHtON0MD_br#@R0|*>sy}chv7MgKwl&=99mlkox%=7`{efka z_i3<;Sa4VTfi3N4CY%qRYFiTN9aW2T{sY-snCAN*6u=iG9d1O?{&WL}H|1Wbx+$1lRS?v{lrbK!!!}4wMzI6;-Fm4?#Sa0;q4yN+Vt>3jE$m zEmwHi2r1fZU&(O3Wx32Iu<;vhM{fTE^s=2RMr+HF9>-9q)V}s|JPQVGx)2vN5EF3T zTTrBP@l}U{h}S4^766`q@tC^=-x~%=OH1P=A7J?m8uQ(fd9tL9tj$k7BKGD~Wyloq zd@JMwS?!8syT0Lnouv8{@jj36Jp;B|u}iUhoFj_r(?F+4`xie2FkJ!;ZAz-rUH*R- zK=Nx4nFN*B$2&of0iC4HwHjlL9ENq}sl}4ET5jiXo;$-5=#d0tYg;(MGGoNiQAyTs zpXS&t5&6w>MJ1p4w=u3$!2?P3T20qoSM1ZWjX$*3mKgqs_&sY5XS?p><578?w#;Ny z$cLhC!KRI(|MaQ*Yc))X!bociJuHl}-zR+EO`BK948LD|KTjZkDYjpFK#B>kDf>-BP=@yxd&2qFc2jM0T`{8{G>>q^L^}`Qq-+ zpShSgA4^CY0drMKCdNqUOJzu;`fUvEn6{uF``k z)S+r393)2&eT-nSK!Ln;R8QcvqL_gbc~VRIz3VJ{)Xb9uTd0Ev*Cc zi%U&j6u0=O=9LNob%IeMljzq~A6|#0@R8X_19gW3r5PWFZ>DBu7^klF zf<;9|zjo+~f2ODT2||-t{yI=cFz~Ew@j_Qy`?R||`D~%$;c+*V_Lw7o;qZsv0aD4FZeu!*&h=WZ^TFE#PfIw8bFZ(G-Fa7?!U!ljJ~h z2zHuyyO=D90;k8t^HH5l5y?cD{3V}j88`sq*m7- zymxF^p}1g8CsHT2qzRn-~`&IqtW4X}4#se=hyGXQroBTY2&1 zj|=FcNk0zQkNN9Xm>aotNxe>{>1H#OupwWa-~G7nQ^}q1n|J#6<0B*Y=bq8Hm0y?$ z6uKXhNkOmtcvF7gvkF0!JD^331q0@gMOXSjTLNoOBF@)IMJ4mO{tM{wEu{wa9kFWA zVP9Bu&^Y#LJH|twgdoTR800@ofYc76#~CQumUPv+a`ar1K9??x)Lmw8LJ|XQ4ZIuw zg2c!v@CCd`w$I#|aK@Yw(iIE)lt2r4EWzkUfE=^}K^)X?c;nsY58?2O?=LvP7G*^T zQS0(@A}sXYzA!hPOtWLzGzA&bvdS-aBFnC0VnMK8tF=LfFx1Z8AXYpa75)HxQ9<^? z0)9TH=s|eXW07S-JFqqPrXd4Cn42_w+4@+k%X$TLYtRh08()!M7cxP6rA5pn7_UC} zV*Izge;1d)+O|F#eh1iL=BLyW8v)X!a8gsH*eytngLkC3lKIX>c4TF|lp#LL1zn1{ zNy}9nA}n!w*kZ$Vdh%@e(N5Qog0sR4F)2@7RqQ=ImHCC#{p)nDj|6)xfBIH(_3a3eXygnXnB6F1V}!Zz&-wY*-$C~CN*rA*%7C;EWX7YGz&q+N$kzhnW1-p! zRstj#B1{5Ue?!-RJ0OuiI0F$6N->UBqEFMH4*Cx% zdeK@akzC~2FmStrIpXF)I?-XAY!KnzmzI{f18MoggXkC&V1PnzG5?(>)sN~s6+(zC zvzEyFxL`HPrLJhjrf6ejo}WLg3;heAM!`Qn?ln4T5R4=>BN2bS<1BkF7=n(Unw3>3 z;o_B)XUSz8mj_>!A(E5ZHC>y!8Pk!*X+5ulJNSA$hnv44J|=DSJmwa3@y)wCrsR5; z+gY^pIH-lC7siFalV^fhYk$Te1o>+WgKeFm<)@X=RsVjNp~8jyuH43;x#|5}^l;Dy zlZ6W*`hS|ty?PJprPZyCISBE4^~nl45b-V(_H9$J)BBfT?@K^1a&6JOo0e|CsG1>38Vs%D<7Zu%cG zP=I*~hf`pi&|IEhVW&@iGpQgg+1qc=7G-b{q*>{~aSrTZsVE?Oo2Y%|GW?xN_n|Hh zBEw}Bm&Xe)T>L#xb9s~|eA=Gl^PXqEKl#DNr)8DQ&G282m07sozH3gmFoYO9ZM8=cn{}i=gDUf^jNw3u|3D!6>hk^F~eC^jjhr0m= z+J8^p(%d`)v-vPbQn;lk2XtJaLjqJo@4ld6p;OW&xI!HlUa>%YuA_pSoNizJAyUxA(^I#B(!$90|;hppikQLb; zl9*pb$$ByXf+IiV-tNuO&b*F83cx+xV9=^W?QPzdsMv6!mp`#QEFBzvZ|a(OZHZ~a z!0j;*R1OZF5-MSh?IJL2*RL3$K1EkC&K;X?dCZ8)-uAQo7|T z0IyYow7_i83QM}AKD*uHv0kw600%vUot|DW;QmR&b+x+l))mje!*Bz3qj1e48VoJToRyTOb2x1D9)wGZ=nQL z)z@p^1iQLSe%yE4e?!BAy5>lVw~g0I{g4qt5FTU+l9}F}BLvteQuu*xXtbUWmjfv( zI!NFHclaGR)-a50MW{Xtnl#nUH^IJIJTiahq(9UhZVo`WsacntZFV0g((Ad+(o ze9!naGkYQW|1a?9ASWSQK248%Zr(`SnZ|}B;lIT2c(Uh$)19CSlrEuW9esV4^~q9U zNIN3xN*lU<2gYXEU~})9sDh|(egX@$q5#HPE^?`TQ1#a*JG>%&SY3hO^86JND@@7* zKY5V*slKvRJY+$2q4ssXdBe^&&o`c=t#e_QFTeh*eev@8XMB#Up`QAv_A}KZlh;nW z6=xaW-=t<9kYl6|j0O{)1vk$&#a$bFM045fN8bEMvfHzzuuScPH~1Lu4{%XG?@vg4 zHf~obwz}yNbCEDbQ@q^L8oCs4Y`X7aWU0WRy5h?4VM+qzkDJ|En`eNer-l~?>3-SB z_P2FZ;TPEZs!|-rKp@0N{;~dgoLdzHtkU#6HO|g1%#i7A_K!hTg@QIM<1nrpyeef3 zJhc9@jh-(O%8#*8f)T)a+MUtlpcdzh^HhTtG?4sxB2l@lClMbE#p=$?q;?h#Bh_xk zB$kE4!v|Dh=-KNS!ptm?*e9qc?ZNgX%`DTV=#gTv4PObh5Jr>@m2BoocetEx-Bd2lI)O(}@^`r9@V>1}XMkl-`Q@^dl zZ>F9aW^GM!3fx@;CL|wU^JiI%v^%0c3*u5@qLGMI5iyUiB?i3*O9C(~`*Y+^m%*+P zj8}?^ioFYwl*l*jryn6S`H#U?Cpve+K`>z#4)DJej=M+@sjq+{yUaehsEDssh}Lsd zu8mgJXR-Vn{axeOW-YQ`7{k_#v+HM4c;p^1riIg}@CUa(K)ONp$Z;l)5+5({;A>(s zw=*6ci-zJKrs+SN`^{5SPVk5w@VC&VAeO_}mr<&)qX-;VNQHNSr2p=rsM zz^W>B@oT$9tpNtl^1-L9w_o)4>$o*GaDC?J>@1~t(Kjzs_A_WVhEG(f58its zkfi+omtyj~rvkcOo}5G^B=@=3bZBmi2iYAu4c4&&J;oX!15~S+uf!TCtW7cRVjsz@+GrozF6QQuS^LT>UjE`?-ZQkL1!lqLMZT@bDW;S&^84FC@D>PJk3kWe*DY9FH~L2%hcI7JV3<3wYz{srj#ZmWLh z6QCJbe{ROp(+slZ);a1NrUIeP(QNnqg={jR`HRB+V2yx*~>^bZfUh^VedmUpac z*3=uG4i|~0zI>FFWcCb9-C6ShGe=DZK3>CBTXNmq;mIur&AyiPuos|7 zWGd$Lu^-NuzI8Bl8!|L#A6mMfXuaccwIW|0=D7R2$&{L@G3zRbaZ@sUr-eqTsTIQh!a9t?FPdeQc%r=r9vhID z=LjLDl9MWV_)4nkl1)OLa#9n`GZh=2tr4R+>Q6bANmICHn0X!^F(Zn zALm4*BH7019Z(GOi_VWd405%DV@U+;+_knVc?I&dzw5iXYMB>A8_t_dGmF-?yKYwh z{Fds5PrW7+?d^Z~JFWRX2UTU#{cyL?bJie20SobFvKKtNW;;p=hw{u9(qjtu{=C;Y zpvbD7O{gvFy<)jWQSAaX0Krhhh6(;J)rcsAFry`L+)A;;QmP?wwN{dN0jUaWc{J&j ztV4~0E6PNl^evTI!K6mvigv@$c87+g;TVa5QflfuYGY%gVS$hI%Bglx>q8=;*IG{B ztW2r~e`re-|6cl9bjQ8?RC|>&4wRQ4f9 zd}&O}=wtq`A~t8DRJ}C2HZ&P?jV;iUPq_W0etBp9xy`8?{Po5>1FS;%E-N!DDbA&ivr0O zBjlpRUH0YeI`XVwFd-&_88TvfPWK}@Z@#^rN0s-U_x?S{B|W_{S?(!tMh{#LlvISz z(bOX1tgqjJw&=JjPItLsBR-`2*JPn6UYZ+@+Fazt56OApwIicJ1cow+Lhy~N3$zVF17zMe& zxDxhjcWohe@Q#UP9O)Xpd#eGYN z$*PG<4!%rdj2Epm87=apN4m#%iU#f#FwDWw6m8HR_Squ*y}4$FV! zMmj$FCod-#HUPgERQ1<@`t3fXlKm*7t{3JUPVt)y0aV~#)v_*tFjdD=c|r65jWi|{ z_Uu9UCGkVFwHoVTa0h~yM#^A`Qc=g79~7Q5f}T@0M=!Ig%01Wm)rO#P4xf-$pnv)* zNKJrF3tz_Lld}8La9^7Jg%z*=_kpMLbLs=#uWoZb2-L)vkk4^!DDtc)_P44$5xKC> zN!aah9nu((pM5Vr5r3BbcKMeiZVkfrqB-hi>|}_&sjKm3*1XflFX!Q`+t9uW9fOJFYk18%+fVj6W(8!}8V1H`TP`=~7Ok+w z?l{NP-6!*69A;5+GmTC=CmhPWN0|EL7{ew7v=p;Nx>Xw$l6D#^Xr_+J@C)bkXaj;T z_sCJTg1Eq|=Q1+QLd}c>NTsD>ra^r;1gySa<&7(fK(?A?g-oD;BAgzpen@5L_6xF} zPte>}bR5l+|LFW&Eo3edCQ5w%%KF>ny#cot+xdeK=oStR4wKzqhCMITp$0zGY!(FK z03q!#P^N>T=v7)+(IP;h^sz?Q5>)X1YoD)UpU<-QeALgCj%jT;5$dglIyloqs2Q`= zI{ppbp@w4EyQfMM4U{*6sb|$3Ut(}qBY(fE#@KENo}E7{PVJZ#)ASF0C#4}-a;-hB zo5bQx6iaalYw+&WVGPsG;Y*dg>uM7I$$Mj(Q-FpZ2&aovf!b(7yYKq%5t^Q$HBpDb z`_WMqkst3K{oJb^15vNKm9UvWM;#Ca!tM^Q1$|}Nqsp9|^~)X{(LG>GL8+`PM_vn{ zgu*CMq~LN;L>Ctq*N-81%6pi!k}r}}8_XNX9^>kQHn^ScP8*=nQgq)uGm0gF|4&O~ zN6QX{O_KTR=xbcTFdZ@i*GYNwu{RKIspMyf*O~>kFBKHG(32!5AsdvU-|Ee)0@M|z zU!5il>t^MDth9KuxLp$c3u`Q!-pieWn5rwe+_aXg!sPVazHs*9TWI#%grpw5F=Q_+R^WsgeIeeM7F=Y@d?ll&Vj=ljdR?rfKE4pnY1~%IjUv ziRi4NL5ZJ*q8NTpfUud)l_ky^Li+U~#pZDc_zqHDR0+7VT-jm#(U<_^$;fK}pkA3( zRv@Pj6d(^mb^yhR3DX~CZJLQVneSU)db_mC@@2gVq78J%q}26ci|KP`#U!_>=R;i zF4w$A=6?N*>V4twJtd!KXJk&IQ>(m}9#gi~4zb=Ty34jFwc0e{-UB)nxg>YLJm+Ja z^J%ukYFZ?|%}`hR@Lnc8zje@PZ@Zcv#)vC^!qcaQmFn&r-j1W}j*Zev6u5+ms00|* ze&gK;&@S0rpnwa4<*NaRdQ)Rf&3ABykW+v&1R8fq_$bKf@^}jY;6G8!h!QF-MS~|} zdRmhz5Q>`Uh%2wm(KErhVkg9T3Zs}z`I)`$owKe$h$F??<`5P=IzBjCG*TF#70gF( z9v2)@uI4^uvvkd`cRR&I!JWIvWmTGGDmAToi{+)Z4T0VZQG2C02RyCz%&5*q{yVXQ)-t-!qU9w zz(bM}VIk6BZQG5wnz7}uzpXU$+CFAqd}`HdYYS*(dv5 zXLlQTKNQc91ieye^N8V*@PIHR`I$Z<;P$ua*Fk|KSRzp%^9c~~-BiANkL(dRcRi#|bVC4C5Tg8Fi|6OKn^O4rs@ z@SpA}kHrZ==dJA!@kzwJBod~T)nyIFARMrxnKRwHa5e52#JYZ_4+o@NAw9y1J1Caj8Cd?0kK;zj$s8LIDPG!4TtzXtadTxHGB!FwD>7y-F9( zINdchJYd2AYIYVSvQ($sCB>JYFDzY`MXdLwBUbk-bZxMEd?y9bS|su3ePn(wjah|n zndKc#J_dl|f-vW~4@@{u`E8y{E1fPrvtdgAQf5c8u~<0w&f`F1?TWvLM*V>mD`*r4 z`f#!((cV_QNHZEz`Mh`~{Zb2#0nCSj@FscYrBnbyph!I_uUoBIb<#pTkF~=t1CPbm zjhKjd*9XH%Yf>UjDnN)gCKqNFC5{T>D)i?kp}0Rgp@C~z0afFD?`)ZB{2sZ7<}0ag z2`y%beOV-L6Q!`utWT!>tPAz#|A5&IwnMnlRO%W2J%hfN?D|)8M3|4BokhbK#KK5J zuEsT>vUV>fRa*KOA;Ax&@#cqHXlJ+gYT9ia!%|$!1x&L_16cQkTgz@g5ffeL?^&Y4 zQ&@)P%&Pg%?-k4*G%#ENlsEp2KWUUFvCwj4Umd>hwBH9gj8Lt0Sw^q|dW8>!y6|5oBL5nStFzK9FV6!yWX#!}OI66D^%_Qh3B;p%FZbIgPg zkz-+o6)Qn)f*zoAo1m_Jkj=5!ybqV{jb4jY?|(a1l0et$bI3csP26htiHC?(%3szL zIL1wC8Oj+`_?{&dv~^L8i)W=eIy)eiT=eZz{WI6x56n!k{WEQo(+J4elS_-=a9Bi?{k(sCD*R1Xmm<61Z5Zpol3_3z$>rZKr_YO;2TBh8|ucpPI zHr%-qD(Q$yYY-c33RvRXbkeKoj{lzpphTw@PcA56Z21xN_+?)d*+RJTt1nfq_!vV= zsM-0jr8a9(W1o$lscEXya+uOVG5nA2^Yg&eGyNft=DnxvuQOubZhxni@cH@ow)kzG zgLc9YHQ&xziI3iLLeg!^h4#i+SFMb5ixvGcy9)6lN1wc}Q0_PVj1G@lhlcF`}oZQF0^_VFOtpnZsDoW7W@t9L_8% z$XyK@rSmH2UU*0=iZGMgAHi#f*{A0>9%qEkTC2`W=*~^WoOE7MF{j1=~+nUq-Xf`X2M@X9(NA`OecWQKz@b z!^uyik(GRQLrDEHP1x&Kq2@_zC=oD&O(cPjGCOvB>;gpd=L$GUJ+iF#F;&lvXu*i8 zm4Sy*!Q8unlrMh8Yd~wdSjX6skc29U?V#+nT~2i+^#hvo;12DO^GBI`cL9`kVk1#r z@86*x7c_@~W4Lm7Wcfav0+oT~M?|Kz$>?9n7tQw2w%ja|jN{RKQkG~s_W1kv%SVuz z3XgfMSuXZo(jS#}Ph31D|4*PKLpKx3f0nER&0eim`))nYeX-Fq9=#8Xdx17R0S2kO z+?Tq7<~Hxqmp}Qi7!dc%qnxH^%={a6n6!EEmVvE%c-|#3U$%L^U&X0uh?3@6*WG#a zyf2n;l&#kR3xU7?jbugt+@_6=1b)Kjw>PR^<;cZ^d6_kpU?Fg>-^(3~K?*}D zk>@KuoLx>^KF>rG6d2j0(dGNWyA(p9q?z=*r^mlUl%zpEP*UqTz?}2pmh?}pr}T%Y z@A3v?C*>muFY|e?tmp^4js~m;WQqIv>g4Jc$Ls9#K4jb9ri(Z=<aTT`EzScHZN7 zA=Pc|?JsaFEAX8tnD2>ThfWLAa!TDoUXT1&1?tBt6iLcbA{9FGCN#pF8N+7U*B@V7 zPSC8Jx@T@wrz+I1at!>@^`b0nS>k`Ep*;SBqfwPH#+qP}OzhPUSCvPzq#L8-b?UV& zb!SX7o^=uN5JBrn*m?9)fKg~^ET3infdjiW=}*Y(5gQOOtbHxbzgqYuU~j>O6k`-p zb(FAEUh(AkMk535xvtwmvosHjfX?pHVPs+RC=Ch=TDA<-q8&JY&}>L+`7oS$jH)cm z2?~E5{_o#eKdb4MAM2}{c11fC$7Z5<`@%V zhp@YFLn%L=1XovYiwP*|cuIbmD%|r_^6|K!IJ48Oz74&4pzF1?yJBen@Q;B0YQYet zRsOfv^tcbNGs5b}Hrc;>e5nuBTa)JgSJ`x^;(p{3{D{KV`&rA}!7sA&4BC3PW zNx86u#?DTthxyh>J<9qYS%|%e5W)EBT6T3sR@?0_&ma?H*Fhc7b9-#EP|ER2>W4{U zU`>iAKA!iUShtxe^^%HP7EuTBzq0lKW~*pn&ekch7@k+_d`Sr>+_(*YR?hQxVBgNL z=iF;;$5cRuY!uB1geGjoPsp-i$R0eQpNOdA_9}MJmTX#Wc4evu5H{*NBQskP1sfLP_H^x z)-ok~a;a!k{!y;?(W|6PEUA<(9X&};JtHx}tKsu8d@5(&5PahOeRk!1aUV*9_tyS`WNB#4chibwNAw;o0iJ39tB9A?KmPzYZ_|=4p#Kd|~ zZ?3bM0}2Y z&7Z^tG*b!@>ARHdFP~CMY;RhRzAzsZ1TrDz$A@475~9qbO?FV?D1ZtMv5o%}488s4 z7wrQk2C9IGtiw&A1%1O#43Mu8h(NUz#bG&hX$ui?4v-7&VpydOi3s&#$Hc`TVkl)z90kazHwb`eXxMzf=zoQ)@C^~CtLPlLZ8}e<)_gl zr8zSV919)oNi%Qe6#e|Fv4<$rxSpWfEzNnW_lK(USG_FG&ri5-U@dyo*)Vv_Z{vn^ z^ZD;FlP?P?PGuJgDzcaF|Gn$8+1=Y4aW>xw3L} zBvgA5n+EHZFchiA4SOaAq&Mcbk5Y8cB%nwqwIE45J3D7E!4(ccS@6mX{j7N|J>&Wu zr^kMva*F!WquDO;M&5npxNva;1JiQO1kaZ~OBTc6D!7o-R*Q^-{t9E&fUBTGf z3g5~-SM^)wh4wVJPJwnDmerUI+#fA3d=~kvvoviR-^kC(maD$Yihrn?+$jAtTsufD zvG6>8&^XY-f;%B#{GaHMksWl-5U=X|^!?l21K(jyIP;>np2V75s;EZ=sMr2xg>)Bd z7Jh%4Y=nSaZJr9AUe&I+R9TzlMp26yP@){{@4F+S5Z|;w-fs##R2Z{p=wsp0P%6oI z{-^AC<-80;VXO(c^v!;BvqS){vFt&^FCc)`qkUThq?%U8>u)?S=O2K#Q^_X1(tY|Wq$z~J# zibVJ+e$~%!56cUta*m4$Hg(LjYvzPC0?f&7L`x|JFaJoeQPbMrm+5QDhE85Y1EkV& zN``2qIz^|Zaczy^n8hy1Zr+!+ogi+6Jo&~&>sJFZi-_b!H!i-4Cfc#=tEgFlD6?)2 z&k%g2eDQoM40QeI=}3mv-hA6u9zx-XxmI|6?M466;DVXzt*7zrp+u$cihU@q&KF#d zhmbX9ps8^Jv%Txjl?O|3PT2f9cvqDGZ|sN@DH#Fyk7_U=Yaqo&LDbU~pGfa_9Z)!d zTs!%$%{XgoLjG`Rr4)skT;O=I!iX*Zs6hArAm4C(fwV&;_j?V-G#xp?LHAA4_1{)U z6kdD7Pw>@t*({`(6cK0w6Mi1s1jRKu31MMW?;`uSN_LtI99qS%k8E7F%CROb#tl9e zrrmY5swWV}kF2=|SG2#dc}*wfF|&2RZqmg90<*!-d%GQlbB0DTQaWjE^V(!puRIU4 zTH;dqeb~BfCqB&wT7KD2VRM3!_}GmXc`n0YR6^*w7wbZ0|Vy z&yUEls|NZP1+3>|@peq%y?(~h)(NpKOO@TBcxg2`xoS&hF@ewLtNrCJb8Sjf)32Um z8ld>*qTRBfo9y2cB0tP2cnr$kdV}HD0{kB*!kPDO#6_57W%?zwllW9%w@0Hs^wWjn zO({F0zbIwp*F&_v8u8G{_WQlqpsYNu|IYa&*1V#jm9RFctdJ>i%pkNA;t|-%!p4Sk zXvZ?EWNT}X6Ll;8#IAcgE*3h<&9Gc_#sZW`Y zi@blQtkPfDpOE%N9~f5?sgTLyq~USe;h_RHvn=$)pozC+z}&R-;Qs~(fO$nXAJq~GFr`zSMt;<*?MXf}{u%5+2w6UV>$Pd+L(oN%f+JYX=F{G|!g~!;B zUPg1iO1L>Pc4c9u^h$4$(u zb$_gro@?NnQepwx8d&VA>32)N8v_~243pu(5TFne2o3ckrNZF1ov-RbT?ybXJ>awfrk-=foXLBszg9zPiEBm6A!6XDzFeAFa9M%z7r=8Zf21y zmbU7R8z|;qu#5i`BuHyUi_EPUicXg~9R*#TAb}5Mc9DuaYf~GwPV(dw|Ha9aoX~A01 zUax66IM)!A{mU-~YxMINDFFh=F4HW5C+ksGKa)U zx?=6lb&J*E4=n~lkX#77yr$Dd_FVusq5Mx_`$w^^1@^SZAsA`;#P7wbCUTD>ahJXs zzdUxI6I_?^f#`FWqVBFydnxQ@r3MN5_^V-?(tTm^W+_;S%*1@(qm=wr*GM)6mkGeDD39fmdE3ytsj1KINbfc=UM`(tg1bxr>DB!D{dm zIoXP~OvCeoUZ6v_{>wo_WuaDbMYaPWDEHRuomn@E_n*z4Jqz)>vPSYeqNJA9cEazH zP~FQ}#O6ITaomne-2l;jtquo#1NT)K#<0U~KyR~2|Ipsj5{$TsQo_QXzw~m(@O;64 zEA*u>0{!pb0Wu%t=O>xWT!%qa&M>D*-?9#6YB&X7ae>1%E6>3>r~c zQ-gCZhNQXIk&$5-Af@KaY;ciZYWe)A$ABY8Hrf>z&Uw{B(xEU-7wsII=F|b@45@pI z_HMQq0P6Oa!~G--Rv^f3eJ%Y|$ha$q42yG#GknS@5(Xz$6|{qvA0ppl0_+&Ve()mz zaf;0O(ZqT7@Zf0m-k!`8a>5b{(bU4(XR!L2c||vD`<~JYW@4!&Tj-;z}p5H$2uo% zR*PNc(YcLJQA)kIe=D(xkHQvghyNSK_`wA?+d_j2Et(}iw6L{h9m^D7Q&~OK4Y>v^ z(k#Z)D#9Uu7sTcz58uI*$-B+VDk}Iu#sNQ6#WbM-C7;6pc;%q9vf@WBPT}f% z@a)_i8Z|KE9ic2Z7Z3qNv9tr$gjb#LSRwOw9GV{RiB50mzQf~D&ZR)EoPz-@L+)uo}T^)U7%^~gk({5B4Ttu+&dl-f-WT?Qebikdh(X{3|J1@KLDQub)t(q z)Va{(5AkH-cjAC390@S=O-z?xPJROJfKTPcX6Mf8RIK0#bmKq{XqPfJZy;P$zAb?!bSGC1rTMyB4(MI7 zurEa7vdiOXwj~wTOuK|+delUaGwSD`}-;OH`jX}(}xe)pL%Z@ z#PN>_1coTQ8?473UAB&~v_ZyPa&AvI!Y=DC)3E04-$orthIgl^Mxc$>g~zEG@#j_t z26nxBKA%f3epItOMX>p$w3$uwy)V0r|1R$hnzU%<>O#u<%#J(Lt0rJHBEeDlUi9hq zb&^wNl;Gdf%I#}>N$K!@Pw-fQ33QKsKaSlIR zXuEmP_1xG_gegbP%;51HcJ2qNlW6F%a(FxyC--ik#@MG7axB%t$=#$^W-=#4`S_?T z*0)6(x?9nfyKmWApB@#Qo09BN1Hk2_#l*WWT1rY31{d3sM)TMn=_9hVJ_q|4oC*hlTHD!52(9%CKfN|6*cdW6Wte@d~SG+F&0S@n<~`_^G!4 zE7LcF_`v2nHQMl~#Yy z?;t{?$5Vctzm7fqwpT}&3RWviBvzjx(8rG?G8AIom}6<2D(fq&tBOXi9cz;{c!Wlb ziHw5_)M6sZC60GeI{qHELOX-^JdasKCf<~%tNa~))a70_J#3;+?_~QKR@*-P;~f8h zd6{B?K$(_cEoN}W4{3lC4d7c*XGL!?1~UHPPq)xtcE1X# z8UR<}!RTJs$q(ONeg+_5NkEi)q03xZc=1AR!!8j~bD-3o;X`9-X<<>Qd`dmq08F-D z3p@OS13V(CNKm`UgujJM=2ewiTU)qzC=j^I~rE${|SO4bYU{_ z@#Z7hqGe;c^NwNd7sJd~a~&^@Az$d-U8}<4l zNRZUzsvy-42g%a?IgzZa#<9hu50xG%`zsiLV-R%TgB<{EvURf1l+!T{!}Tx|u~mPU zh4R+j!aH;V!HsGk2A&JLNYan2SosjdhW1ySwz^H|!J!p)Sa)^-UBZ9rD7T}px$I99 z?8W)z3NbE3;%{+KNf;#Gzo2-@H%YIFZrZ{rgk4|tR_-J=BL$C>4eDnb^A6fs(k9PYrReZ>ngFW=vgm^>{5zhvccC?`V& zG-_Qr#QYzQ1D7kAo#{mJM)g*kHSM;HipB@5 zz%)G5cNW}%Z?i!k+_%;6DcDv={F)yrT#hSGu|bp{(Z0@y@K=MT z6KWKgU+0|!uh@})XTI)nLBF2NPe~{HTocD$Voh{;J@y~I1Y;UF_$wa;pi8IhM^&iH zermnl9bb&DXuAkk*VUzQ=%I|H&-9pCbvv}csXE#ZMUD9M`g&x5l<=-^u??3Gi7PIb z1_2t1_VCUbbE1p^QTgq4sF?E`T$A_ExD=m)*Pr0g31l3Msuo#%+8!LfT@D~?O_Wz{ zdI|TN8z1yqko0pyOY?!ItJbyK;p*uVZlA!N@6>7cHz983xzaZlWX0n&O$unLrmbJQ z4X{RW%|0~uCkMrVC=;s_y^IXP zi}7;<-obidj^G)SzhRJsZTUG`Zm28*2tM)19td;e_uZ1}Os=8VzjoTPEv;yheoqZ1 zhnoTHD>cGt085=f=ORxB%p^f%`{sQ*?B5&4t68i~Sd986nB6HUgbwXHPl_h7sl;({ zaqWa+-giwKbqbky=x-IleE#RvUbiP=`}_NcvNw*M3J8=G;9^KZxEpoUjvU94&N5f0 z+zbdsVh8edt-TF`w{491nd@`2@3UuRpJmqNoihdSF^#?c_nUG`v#=+Td3ZqH6q@Mr zR^fHc`xKRdXQN#Lk1l@UD$Ic~bzJeV9a2~t1px7^?9)~9;=&GEzh>k{lEPG>^Bl+$ z*t*UwQ>_~8r14ycj-llnPKiX;VtvD{Ol{gLhhH)YZ=HhbbMKp4V(X7+|9!E=&689d zu8=3`7M%MCJ`s+ItZopC4AN=Z&_5vvsiQI`A~c_T7;C!Cm2A;uU}Pi+OEU1fK~guD z`wnva12WcL$x;fVfur-XWe%i_Yq0rh=9qCXU5d7v;@qKp6T41DDIGpEKtUWnEsfdR z7QeFr7~tcjqDKkj2-cr2ho|iAWu3NX2Ss(GsoCRxQSEPM(f7KH9~>Pn#?eu`UpbK0 z*Jo+JJ0nsEj3IHV=-46E_uPx8$@Wx*P&YsGFz zQ~~J-DK(A!grKuPfrtn`W+D8DpH6t_Z3n}yO>iPH1#YYIH%QRsY|mm9Xj7Z1%;(k~(~5akw2Z-yW;EmSsq z%Idec6gjJO9bg%6P+nQe4oV=65PJRW;~LmrDV>!~sVo|(Tt}F=cCQIoy(o_t{+Ilk z3{l_xENGvK2m6r=82KabcbyfJm(q6-;M%&WoMBVvz9ZOe!qbkitnv%; z^-YhI7L+;*+tLB~4q3u>Ow}zt7YAnH!6I#jDPdP@yl#GbvXXR@lZGqU0UQVH9Zxm$ z36g=6z}1ZNy_JrYbxaBH{Z{&o)03h`LJpOcGTk*S%u%T129w3_5y+y`?^&N1FPvD? z!^gZAOr)97Hi-2v!2kcX01s!sb87{V{3;AWj#K@v!VpT-%=2VS%>p^lOl865PP?WI ziVAy+go60!fmNoDvw;v&=f~;pZ|n)Kxpc^qTcs042q2OAFQk6DqV|!ej_Rw5Ex2|h zXD3K&CX3;x;iLsj(7WpfW>K0bg&5x-ixn5)2?E@H8{rc#Xg;3bu%U4SnI34Fe!odM zrx10tR`eZO`Pjq|jSzv{7dMv)YT?b(axW04xtO-uj(Xbla=Ji?8$oPp;eOGYhABCR|cKU@%qml{B*f$!PGJFdj6&TB6ROU z12Fp$>BJr2*~CsiRC6A0Fjj8-W>41L@qQQ7ZTeGaYkx^<#d6DP73;>F(SYlszLYX{EJTphyzKZQQD;8*#BVG&Gc%mzSrnZ_`O8 zE$nw-ZL4MDvBS6~nx<-~jzRr{+-tAHUv@qjjS{e)fj)fAG!>n0$wgXYegNbP2 zM3nRu9iWjiFznGHyJB`r8W-*JS%P@r>H_@f!F`>CZqYUfQnvp3O&_f|JzsQ!MDcUe z(124P5UnsrW)(x%i-iBEhfe`xHO2rhm53~HnVui0%sTLk^qrdx7*#?pB+Oejs6u)- zqp)kc?tny{odDO?XJ;lb!84XOP$WJWkqdi0Y4$3gX zy$Ogfr)hYPyRGAA(^i^m`_`6j*8BA`@k<1KQ@IFMuZkN`R1cn`+XoV?UQtvP8zAjP zabEX*Ucl+ieDS*CJ8>05LibmqNfQ|nDKR#){WYOV0? zrXX0RNPQ4j?AAUQd_Y~P~BiOqX|%HIjL7e(A*9UWut-JVnI z&S*pG)y^?7B6n&%f6|#y{P5Z?6ZRDH+vsPshds-?n-f=8*}$r@T1c6mlL7zd&NtY3 zJe7}s;oQmjV`Cvl(}mF#PzL_*a-{!Wx3;#rBIjwMihZ-Bh~=i+h>*@n@nH9Tx==z* z_WgKb95|CSc!t}rVV1J4)2>s5SJ$`MS z2x2yz(Vnlpwxhst{<#=(r5(|p92e*0>O<+uu%d+v!^q;-2#m3Q50o`8~S&+-@YD3>Vb((r@ zEDQ`#v+)rZ+q}HHuauW(MjFIQbPKkV0b!qw`r&Qk6`gsH%2ZuR8zd~JK=DW}C&^|? z!!0LfkG(iePmmh_b;k-&ZWAu^TamZlza&o%+oWP7r}$ zOaA+i&-8UFPW@;pQ)fHvd;<&%_!c=5wR!rp^sI@V9(mJRW6?Y!^)5{rlWT1yLBN#*Hdh^&E`7&^K@e=(s;s_zzq zY$hhbL}=gYTB2;NOIEfN6X0{USoWx_tNFve{T0tmT!fw`3B7TJ``kLB`O2jlWw#>O zd?VG~@4Pg=8anU;)<`Jgbb2jd`wvnb^h5wtLN$?3+!+2r9KHz`{EI&VgzJ(okVk|9MUlBZe<1o2BhX|K}HCN-5F4M@j zK4WGLBBqDSMv-uCY2@S3izsm}63KLCO3x@-r4aSxxwyRSt5hGCT*;!AllU2=3>?Wq zSkSwhvyGlg+cW|GGF_X%s<&4I8KPcMhHakL6f{UdKm-t^NIcK~h4Z>FSl=7Hnex!d?kX zLRIM8Cg1U4xK!EFtQe-dW$TIl-wwyqoG3S_ONK?-z!8!B>9(%h3Hmwp03ohr`E(v6V!*G>g8Qj{@bsa=Ch>x|E?;A5q}mm!(KHoa=ZwWl*? zCnu&|P?=mNh!h@h+JV*J*s%OPoc~rz3KJQ4`WP#_{M#a08GLgvGs13bE2S?aDh(^zG{cU!Se4i_k^#ICVF!|fM6APlm z1F|C>f(B^^sR^NjHkO>kxVY4fn7XhLQka~aoP7aMiL4c^+h!$}dt4O+@Rf0D*Z{?` zkE)v5oMV-9b;%ASZ!uaJb-TyJaJ>Z3fwCJ#MT@^^yKkkkN^ip@?{ZffYamPb5`I7l zS4j`5;*4ZA(2Dez&WZw`fnm#`6-*NcdnduiwymHI9m!5o7&=!RVV)HK>&`e24s1sf z$MZ=K*n(-m#2ea35#SQ1cay8XT%q$D@POp{{6z}<5Ga3L32|u}o;u#UoGg9KcW7a1 zMS-&^AbmIDuHNV`W{}HqQbPy9x>oQ+ksn#UGxxy0vCs(Vbag$YKF3c@J^J)?ewaGn zzVFq!gIr!)oL|`e5xnycFXRog1}jtzyy#z6CSuG^z~WAVf?(W{+Z;OU_t;Z8-|lR5 zwk`}Wfrqy@RWAAi>zEmNRKqH@Hn1wGe!BV$jK1;#)dZY4el zjOSnbX(!f588*>j_=A7-UZUvDPp3c-OlaUNZ8x(S!y;Yiud@AuzeaKD*}~k&2jAB5 z^r+5!f~a@*hj$q!Y$8kxeD(`g>G9(^ax=8Z+bzFt$@q5w<#f+?6On(r1jc_Aqr*jD zB1ISUL~f%~E3kuyU#S_LQR)5Wsqc|EKSwp}X0+lJMv_JV=6w;(`zU4irV1EBeN__q z2z%7GhQXH;VulRGbGGwgQ(GCZB|J|E$=bFZx!EnCNjwy&mgRzIt#+n#b_9R!ZG@A_0@M`C=)EU8cN2r>g7 zPn!|*&9>bgPlDa=$G*#kV0{8REdxgQ)$aFwEeJ$sUG(DXL%T0(RvD1&5$A{7L&|>D zj|s*GBc5@CdEXC2qeuJNeRND%W_OGkkomJ~1=#<2QV~KKOc|WU=vbwR(tr}6A+xVY z9({N>MttiBmtC)U2dRkrq$D`$vr<1aHb|Kn*~Xb>uf_)9?N2}D(Jkpw6$;|Fz`E?b ztE%fd8HQS|nvamS?I`j*b<`4Sbi9_oj0q?L3%`#py}MhY(k94-Ax0EpfJL;+$&4%q z_IwAc%+JeD%Y)(rbX6kuw#`Ki}L_>>;2m=&-Yn_ zq%ay}D^4b$Lv>KZ2;urHAFfg?k$`4ix)LE0j8zN;e>>BT*)yJ2?vJVn22dvDSL8uA z`n8#zG~R2Y7Rd%gu|NloaS_)L{sEe4hgJC;}Cz9MNVj+8+*8pZG< z(b3f#Q8sZ?O+W-IUzsd3e!UwFlHXlEh}Mi3jmQ1mO^s6R$Bg(yZ$O((A3xe-M+KI6 zActUA>iqEF0N%O-$#9n$^J^!3^ce2jl=r8hgJ9T7-$2~p9GLEXS=-1lj$jcFl#tHy zfrm&Ke5w^?;{%fM7jQjZ#w190gOf%VMNAi}zbWv7=+v3c`Faby$~@g}or3nMci%C= zKa#ItRJOWDD`&?3^Dw?ay1NRem1yg|rAZuM{l(wK%5NB=z$PH4{^c@>jOvwQCT!#D z-y$}sWox)CP+`S8+}diPc87e+i59sh#%I+zwxz}!wjcL-BN}}a0*~bEu#FL4ZSPlK z!8-0E57qO`hCqz96a#GtH!)tTF&%VEzQZN5DlCXE~m5$>a^otVxY}}0%)b23W z(}ppvZ46u;{}`Yk4Uan3%kDnz_Y;3Hyb34&yxV;C(o)f9MiBY#Sii-W*?jy_Tf3)* z!b2Hb{>YBdHL5YmdJ@I$Q%_~-EYk9N*QK`b|b%s;liN@XKr zSa@sPJ}ct|#@w#!R{6cYnEX!0YhpSymIAsm&GJ(8Pc>!p^V-$esk>7q35TO`I7XP= z%Ob#`-TYiuSxN!w<%X-Mz7{bQ7tK1g4)E8AGsRF(rv|4$(0Ljzb`^i|U<)D-sTCbk za?8mg_!fRjcL0#ZCZ*a2edG|2l_6Q5~c>rw4$T>keO4(!V;(1H56>mW{8`~++pFR78o(2Vc>>@mCV z_!dogT2KC3SOFbwFdiHt=lhxudcXhL4wT~O0!OJf=z9@q0)FmQz7{ZNMp1&MKHlQ! zi0F6&IF=dDRTuy`?F>T6ub|0RY#FNcrAak$R0)sQ-hyL}tG`GaE;W(;R4oMoB1WkJ zXfpj9Wm~u+f+qkh)7srQP3DynW?FgtpxmI;!;=&gf2!m-1pYzP*c@W z&oX|#kc%0fN7--{Cgh(; zq1Cu1Iv!-Zzf-r(?Qme;yK)GWTRgRdK6bN(gG0<0-5M)52ZuaxuA%#tplkq{3K7zp(j5T4Vg6-uoJ2%K17*5(Op$0BY$CY9d)E13^X{bM3l?XK0<@>JU>F6Imtva3LjAF|gbNv7&A!Ht%z*0Di_&7%E%rn}!TBRX19;x?N!A@>X@5=jTr zfT!%Mo*^udY7_i(EUVY~u>aNg`ScX^>)`{?SncfKZRXF3Ng1}sDvch*m~MVH$NV$* z2Y+Hv&fN9G56BT6@`%o*SXVQKADW)HD^j7SQ3d=$fuX1n%C)>pEpF*FzfJg5Gr4x; zm9Nv+!!b^cz4y9w!emstOIujceO7=E&8yf8d7GDu#2QeQ?Q-(55pU6d>iLss145Dg za~$thupTly7L#n`KT??*0e~FL2!`5dILa33d>>4A_<$rr5ZUfGDqOS1+>2wY&VPW!T zv#m%7)q_pPe{3lF>&d)I>o&fhwlcE`BD}Ug%U7E-vojAkbH9d1<3BMx(A?1xo08kC zRnVG?abu?o*99zXOB_(7I-XLqqb#Y9xRozOCb6b&ya>w}Pgb{qNk~}vcm$95x?1kl zx9yG=0ha8VKcTZ1rFgxiYdamIb??3?HU+sGx zQ|P#bd24jT+UsHt*1t5{C)T0QamcnyJOh4f?jQdNFE{&O*`;u3%ny~+H)^<3No45a zAy6I;xufF2B7#AsxD!h)Zk2<69|B|K-xIyz)sm0<4_OI>q&+h_Iq^aXYb38xFi_u~ zkK>;H=uDj>R{!p5#sfzjAS3~)?JH`cN|OZEe?)vrVvtk16apoy^b9FXlgW2A$Sn32 zBGc`WLgGmn9t$!CaQ-C#=kKVG@)yjr{~ylZrVg$EI_yYw@GvQ?q|dSu6=1$-e%sZ- zM`4+AAY}jKNWh}j0T2p4|A7D3N{fI*K$JnAizelEEdvnbT!#%oNrxTApbwpjIIvM% zNpUYZu+xj$kXTc$B9L~~?L3|)2(TCpT2M>6mw6#Wi+sqx)6tfdh|9xZ$d}cwZ|Q22 zZhIJ2!fDv_(?u>#`)?-4cwgtmWqA>pxS=9!LMB{ax)g zV2^FDRfPSO4*B+YqT6+=VEw&$#he|FGEwi)3CA}zL=hS7qWQC(<;SUNADe`P1k=%D zCDXZ+XG%QX-r)N-S*{O)q>cMV6DC77JRkZ#AQY3Jbfab?dTbQyNoAD%<@K`; zUpbA$`K~cqU(av55}h2V`RIr#IxcAz$)`xYZq1B=Pq4n;m6l~?H1jar^wXwRfsHiO zFR}$xE6mEs)`#XS);WNN|2^N|RPcDQzSk6MHN^Ds8hmSXzoh%o_W%QMI%TyZDpGQ1 zJvM&4*$*>)y#3I^$NJqmcw*ecA_`1XHND>{8Ql@a{@Nh&@3V=A%Itzjxn$T(g{ zIbL3k4vHmP$eg0j6@Hq>u=087|3mXA<#g*vH}7T@u-5l-n^98#mfCxNoZmuJ>Lsa> zd#eNn8NWy;B>fBCmIab9&7OKojPd~VB^sckXaNsW&4fb?!Eax()HJ~6=H{s3Q=6M6 zl28CHIdH3KugL(P*=kRd_#70YUD@)&Vc-WG;KG8Cux>_j4LmTca4#)@gmcbsN7~{D z*&e@nD>Z;kc}tI{(`qx(vv2IKcG=1Z-3$1Svni zQ2{!RGVQlGFx#d2YoK%1ca0sn)Y700ZakTFW2g z1fBZ={=qN`szgiz4a@=)e0I2!8!B`3o>$-{sk~fsD?e zh=>S(REg_f&2-2r-4W21vg2u*=H zzHdhjvha=OoBCffU6!d`u6X}Wy4cs0q;weLf3xIV4aGj=%GdScwKE1+L|FamD1O* zP4Sb%Z09)api;_8bP7M6s4!UE4C1H2&0A{_e-3*j_ZUjagnus!caVo0)dw&R)O13` zMm{a100_#@BB4|-*SgEZB*&MaLu}WV z)Y-+26T4jJmcXvVLg)gmC+^ZN zj@tv8stz<%RL6et*U0YfP5-UH+brIj0ekU)ow2xT`YlLBvoV*G6B^UDj3&Ixiw$wy zFFc@zODE*pV}LqDwH;f1ov&@1HT*7yK#9^l*+2;u0B8jso7u8I0_vGWa$rNZ6<0tW zco9N^Z+#)C@t85k^@-XU4Dho2{8)W`QuA&Ql8Lcjm3Xl17MaW`W$=2xoRYzn$f~lC z)SM*sWDK~796H#P3`7xm+tg`pPsoD5?f;Pi!_?s}lmRkJrh@i6LQ4-NOgUod9Ufk& zNar&8Cu4P0)jti4jEsf+G*`qn2Ho1`yt4(o8J=p;lwZG^|Le8utZDH}0P^ax#3^*$P&1~7L z@sZ}PWzr%O%rvwK@<8rSME`&Q2#)Qv!9F@?)M13ew6!lp(lLC)sX=Gk$wv6F9CW7Q zTh*Ws=7Ez3B5Q45s}^!UM<1f6ayO}hEBKVDjc1RGoF{EM&9EEr&Gc)eaD`9WD^PyX zPH)B^KTK!ZoO_g^~hUNl_Jtw;D>b0c9G zWQ^ax{J?{0z9aQPRD}d&%!3DmV%E#y!ZZj$59$H_-t7kJ6Iz7${SQ^r{?3YrKoJxh z%Q)y+0{f4D+4xUAk$S3`<282^=x!C47P6*k-)Vp~j*rS(I2{$e>Wf3RSSO+4h*HsZ zFZa}BR!AHBfna}wOI+h==~xO*j9O42$K(>TCAtpwy z7>5JnI^X&p&S5$pOqFcKp(oRBzv^*qe6_!TASKmD=(by%bq^{oqYmZswlsp4tlW39 zJXPJfeGp7vb+oLduX5!+bY2|na=*)%>i(AK>J5NIcN33BXb9dAuF=ju57Spl}L*1xw>U#)1~X+_ZY zNSxF7NGd17!=9~oS!=h4ywf-JR_yd>i*vvIu=7K#kxv7To2UR$Di# z5`;W&(8MsdM6=`09bi$>J_?l$;=>tJt4w zBOUP@?y6AhggaJCy+SnJ??8BvySu2?<+mY05>Kh&K%2D#n`1(^#_R?>c%>MQir@bm zs3CSx-Ie;?SA<@mlWBB|pId!C7VESq84{&{|90bZQj!K4PVZ9~H;%)f&qf*4x!%m- zDyGj+Gvmb_oIG2W?>*Q}*OE6c;?++}^q(7qOBN%nGb>TLttAWDMgD@%ic%t;tlF_2 zB+GyD+G6d-`9%==dz~~APqf{U`|7vq&dYIOWmgf3T0u@SpSZ+cJ&B~z59t$HIj20~#e`r){ANxEgHdbC=*gwzxnsXW*d$^M{<-CBIN|9(sw^00w z4EoswWtD;-Ya_*7X>sj5+NA^L?C1tZSbIBwpZ?`dWgVe5|NEevFH2&{E_mvc>v2ib zDtby;E0}`-C@?tAUw+Cet{qhq1Mb?&Vcfyn5ry_Lw-sc{`l?}%bR94==2`b3ckieP z0kfh(tRY{@t|LD})7=Zdj0mKYX3dC9@!1#Jkg=Ri)yCqO$mMsZZLWa3mXm?oDCdAX zU=7Xti$%F#l?E!{d1ZNZva)2u$t0(J-G(0m`Jx>E;Wi*>!TsC#t}ax2nxLS)9TS^_ zPvcB<^cH@u;b9WsqIuxVL0|C}7{+vVWxyqH)UM^!DBS_@NSaj0GnaSv03#82wv%dq zL;c?lN$UWL7}C%Z2#v}huZD?rH|I)ET<{^e)tk;-M9>_uJ z7u{1$?V8F9v^_njZ;K&cCV$-fU#T=8Yh%OG(B#g(m;T3k@AhaJ`QQOC@HLQ1SsvRZ zAsAecpO3QU)il&!GSe>Qu)>HOc~7$UckA61kpR=?Y$`g9%i(%wqe3c#F#r?(0O!vy z2v3zG+Vy&Jc(}6i(eIOz6U+11x^GV}(`fSzHh4!->r71tt0Ue9rnQ7KsNJ&H?QAkW z^kIc-=D1<>ZG!!tU%|<<<*8fOI=34kvx>3FMiGn?&q#pCUAI*{GtGtj6Nw=5tr!=9 zf@T@^zcK%I(e((Y^#y`80-7Xsw_58N($lsFj$izW_)Q;o+p59#ZMS$~;gL`NBBwy3 z{aya#&UhfJTZ8f_&?9-TT<13HoadEVzw&q@BGbRBs^aOyLR%l$ZoTh zy+bcxNX_u}D-cbC6s5EuTu8SPSj2!tr{p6Up@tKx>LZ_%@U2pfyh$#hD=jSglMg(_ z_-nPiAbRNoT_VU>C)5~Ch~NSI0sx!hEFSpe;Yctcdte@q zfuMu>vPe$nn|cbd@kTqY_$V4$&t8%5pQ%2#PB&Qvu2m(j24Cw5`ndhyS z(^F~dnH^-#0-BXS0Y*O8iK*eA#ALmTbQ|oBEjXD7O3mvHHNb3o_2_8$EXYNWgf7Jr z9H34!EB@GC5)(tA35Y--fCxnL|CD;N5(TZxw1F%SMS36_sC$=AkmF9VI+!>Wh&QtY zd`S`Q^7@L1&s6va99APEBk=-y00k4ucK}5go=qVrQU8xoUyiI`dh$VAZwB5MI|QX) z4c(Es!qy0h@SH^UuPHm%qRC#1ok|M$2xP`KM-OUy0e^^*ApWyvgzQ&UzF`*#w<)~u z{l?Fbd9NSbp3K-VKmxaNR~Ym2Ckeisg#O?4y88?Ok4`h3-2E#IIIVI9hUdAK9v%0;2PGP zIPIEGL>zs5p_~;Y{0ONp%ap5Af$t-tyOJry!p#-qtBj}lmN|@>!otvTY6fD-U~v^P z4L6&f86B2ZC4r?xqG?z%LV zy#7PQBHS}MDamxDzkI&YLl|IEut`XQGFF7M{5q%+hDMvhJh&;+ADRXDxoj{FEsBLu zC4k)!A9Id=iD8CuHSP*Vm7!mx49U;XF|7 zQ{04#_u9zrr2TiR02bl)x4!5SQY`ghLR!{X{- zuDA3*9T(FbtC>X4X^ZIzn&Ti}I9$#*`?MP!DF08R!f;3fpQbhaKWu&;5}9S!MC~oGxLJl4W)9BTnYss<*<$>OPUROf}aO;gqrj7Zz)*6 z9Iz_#^G1=cYQ7PGRR3)fkGG;h2js788f%bJgFUI$220_(( zx5Yr#dKEiJsU1m01qB;zo(S#RdP25i;}g10MQzY!1s5!FFRa!iL5na+YUf%eVfsg3 zY53Xhx48YC!_rl!YRsCY>Zik@!J%b3)S@v6?Fc_E>>feNeY<=jCS6TgPQcU-n{sG; zypO$u1pibMpjt}BFt6~gVQ<#Z$i0p|OQ1m=o^Xl{$cc*+xR|o3+BJGPxY(?8vrbqHL9d79^c(}XJk0;8dp~_ z^i^3+>x5VMGPfQj=``k=>Ry3aU2tOPC3o@kKf>kW znV*VjF~Fb&3lL8hhBfPweSM@Q$biY+8brs%ab=gJT@TZ{Z>6(8?`UyG9r1l6_4}!e zd*O?o5u27MFIP{=N2eQ8cPnxc2dNwVM>N2ANu+8#+>f7Jh29|ZY{kG*({gSzBPG0`e|I}6y8vTHuIVL6Y^mW|2e5*4aHCM|q>crJbp)GyAZ6Fa z&iP5ow{qH~R;}<8A-^4I8L~u1p%Wn!R5n=3?o0)_+elSam91{!>k`(OVNr{wRbbUg z6{dUP^W!Z&kh)^ul+7YtE-P~KL7i0^pw$!JDu@-SLJ3F771@Y+fSwC6q#_WYVi4Kw!y~3P1)aku&T_?2rSH;eTY%16)+bva~!KT_Pk+)Qj)tWaSVjXv1~c zJjVcK@QDj=QEzAQipnF1GCv4!n|5#YR^&?T2DMTDM^0S_7ZJ*NVIi^#z*4`YNddB#2 zxuE8cy(IKSD%_j^sz@xN)zu)sp6Zk|C|7u6%MIP(PamXgzt$IXj>Lq7>FgQN9);=z zfZ?0F6L;Nv&uqFHXd-RUx9FptPBk#no0qNir}KseBoPp2e3)jkSEM_cO2pWR_mQXP zp;av;*i7*L?XQx~wBEuezgqeuG}khcDLm!_!R2~$ENk1n|B1M6fzz3x&c~ga z2T2#^ahq=8{JUTC%!CMSxr7F9)BPh9dXHo`izXiT<^HSn^esA%&87P$&AF%q2b>+4 zhWyqRa3EczvnhV*@0B(0n+gDor|zM83-=CcZYeIm+Ucjw9?us6+wa~Sf2YReb9XuZ zoLaF}Zk+7KP>p-Rb!5raZo}Yxe#kH*!+T8s&$Clc`S+*?Tk8jP_g59TW$vMmM94`p z{80WEDaI^c{H%mhOD61Ywb;tO??gNmZ;L( zXmuQL1Oe|2mYl!U29Awe15c-mub*JJC1GcZk5G^qV=LZu+Cs(i*mCi0;vjPh&}~P8 z1HALt>G@vpJt9*rALUsgq8`7ZK!9RzddS3F(n#(5%D$x8KletF6PEE~YF6l`($ZZC zYu#aqu*C%!+(9N8+xhKEIQbN5Nt64|7#;u;e|BajFx(WvKDTpXN(_qKanL~B|BVpm zGe7`*cL4TLp{9uifd6)xY3oQ9J}$ozx}QNaHK){Q8UuPADMxzPatYl|%*&Uh(}Huz zL#b$MvJ4P4GKOt6!ziTyZ=f4rO(`ai8+ugqZ1diF^b-K-=QS14b0vRTquBs1YJXkl zwmw!LCxk%n$;`tHsz9 z%|U+LryoV3BqVIXf9hBGj0;2GsD5I7`^VJ1%J;(Nz()5ajUY@rKi4-aF9VO?IV)=B z+o!dadgCB}zvhiSl4Y>Gfa^Kjw30<&st?a>Oa%i-Wbo_awL`av2-jCTDRZqbNR5hK z*i;%x%xZr&emhw7Aj(RU*m+(a{q<1KP*FGRM(Cs7f&!MO zoV5uJ`}=$K=i@^^G22)dZ~JdvFTRjA(`}21aGdZcl`k0f|MHeyr{LeE zH98eNB}EOY<2(cMXgV2!t#V{&@VURgX~7wt?h))Az;MhQ{ycVPa_a_{^T$@(*f?56 zf!|o`rbXIW(P;YN3^h{=XG509u)uqW?Vm5uFirYfy?^Q<45sk9)R~qO0Cu>X|N0f zWT%6A3vpbrIR3<*rp0nWBlLPD2s#y42UJyW4vN2oN0d=E=nBE&d0!RjM;XSK@RHt~ zf2TVfFM=}o6u$PXFl;v3VtG2!_2KwSP7Q-vA+Oyj6gz#+M!i`g4K6p(m{=odIzRxc|XAF{DjptqZhUMR<0TbOvan0Y(`gmV6!~w1rR1 zOW&4k3riGa!?-SJ2KvT_f2^6sRJxFV85cQ(#!*;+x-~q$n2T0+gU83tcI0{1N#U{| z5%RkOSkr+0@6mOXGJBL8Zlor`i}m|1tM9*3+k2y^vd?t^g`Vh<1@+qEZ1=B%`HXZ@ z6n(IoEl#)m+|^j@*Y&JewCh`0>S>LbT3oPGy(gyODE^6`r$zn6)#_+}g=4=-RO_vQ zh2@SH&uh_QzV?B?y7jH4FJ<5VzAdZ4G118g(_9%6tfKCDZ_bpl6Kx*yBm%caQFO*d z$alb%^+<7=>gG_?oVvVG#j|09C8@X2>&C5mE)W^DYY49J(u)-m`)r>jex8vM&??e( zl6-txXaYEqA6!-gb73PxGsO987bOzq68OM`*;dd%CjCEYA`FUB4A7?FIM*Zqc7R%M-O#_H3+%|M&t1?3p-LbsxOp?cA!MeFb62`UREg?3OLYY{`igF<5}YLT3T8G zpb$v{kC8MoSm~&fj_YM^%cJzNc567*{O;!3A6wd8N|6?m|M_I`#%`lJ zG%-D5>U1!EhotGx!aM<-fmfpF1Y=(y>YtT`?rQ(54;qHuHOw_+99&$T`?5dc8w0fF z1YHEkz8#(>Bz!N9un`loSQUI0`a$AgwU|;3cdlV@44Y!frt%Pb=4+MMjIt3XjFm|V zEvZ`s;YS%FqrEwI6n>(QJoAR~y}PrY>c(@aC@rC$MUoErG-z zpZ_(TAGxgXv^9)gS;)0hCHOP8P}U)knjN#}F4@E8?7yw^IJBuQ_twN|qVeAa8~5Mh z>feWv#~WbU5Ze?K&<+bP854N)Enxa@9ITXOj)7gS`(q+0MLco-{=Y$A4kARe$8q2J z>?@j^7HBPYR?5}Pp>NNoq7zQs%Kq)v#q5h6nTyF7ke z4BPZdfZ=|Ion?PL2!&b16j0yZM`ZOIMV*|iheItL`qAk(Trd87SNidl`N@paJ9_Ks zP6v{AM{M#YK{#w+ueZo@%!R!0B!fwXAvKNwrx20&r_sH>fapXN-v12dFil;KmzqxWTMokRD0 zR8b6&>gsCQz{H{FtjB=Wk;05C(`7{Kq1+r)F4=JvmwJ%gyoPA&z~^dgwQ$M#2ga$F z#W0nDf3!b_6bO5F|Mpxa6sz+)Ppk<5pI_Rea(cb^q@=T90EUlM{dD-)BxD~dHJwi( z(45^ij}o-h?C~loCFLSQ8=7#K@2krSxfXh?NbsQ|DeN=f69fS4q|yZ)Z``28vk&^Z zlNGl$hhWzLm?_VA&+;W>%gXX zR#$0$v!yc0P+4VZt4J1?`7$VzY>S13_weZOolweW;{2MZec>D(E#~<;w;bC%V-{?( zXzm8|5d9G@w-DWYS;oHWX%XC(qbv6#X$PfSC?4ji`Q8J{Sjd64DH=nwnafUKUxF7V z-Pp(Uq8o*e5@+mFoq_*Oa&mH{QT}(i=93JaAEMKv=T+j`l^-a*7#AHh`G)tKiW=LL zb?^(7@T60~t86sXxC1jtcfh0*&p9=kT;>YwIz2 z-IzMkZ+7?lrw63Sy~`n+FvpDZ-2cif3awOdg;;<)Yp^Z$qvX6@2wp(nbs{jJ zZS>{lV8!QG1*o_)02;hYY0lb)NebE%%*f4Jnxs8R+ttsMs z?-siUeXS_UNUK>PCfSsEg$m7ih!pTFV@E__Ap4WU#_NdmZ%^5UGbVMoWL`b|1rgDKzOhQvFXu@1pHSeU$oV$>avPX_*Bw&S zWA|^l>1JMDiWMT8wT2Yd)W-KR%J5s5r-V7@q6`xtte)5XG}9J)nuWx8KdP?+mKHp^ z1ackl8qR#yE|>V9$L7vu!lRHDW!>P9r}u9P-RLJX6*hhkp%5+*I%rI=`dBAuhb@DK zUG!MeV_yN3u`;+gxc?RuUwon+Cq8&uTH2K|!18|1o7HTissk}+e?=eTA(#}4r>3Sn z7~w1rIQ~b;h#4ZcpkmIz>(v1y=JIQ>+JU`&|;#;gfEgV$iJIu@4!l3Jq}PF zia}pYU>Ge!#OH4Y`{jJCXb(ELzQK^5GS>vZ|LN(1xq;sYeeZ1VhpZ~uLl?k#3s3*_ ziPep0DAU!=KPA%O{<`J@xH5M$H2#o!54DD?IoYe=eG;cfExilZc#pF?OOIXu>ZeSS zY{n^$u{1{m*N=gE#onA_XlOGrS}qsTQQlE%cj(2p%-xCkh%_4tR@TJ|QHLv2OWJo9 zE|~6dfwjpy1u)u2=%%`Ta_sjP8p0Ws=R&aaOaYWIe3WMu`t_NPEtcRl5WayHe&}VH ztfYf{Q?PJ?4i5};2+SIV0E#`_6K5R9!nLoe$mq3H;*KX)R{{a077}NC%V1d8hi;(5>I5U&<1+SFci%YVx{qZ2vL23yCk#e}i1{|S z^Z&E}g1OY%s90h0|0q=17~xmr?xE{7@%>)YfgmHn{u`(8bpR+C7RNQVKM<*YV2^am zPO+%{7N;91oPcj%s)u7q!%HVIRUDLsI+EN(ubr_fr|W}~%2@+|dG8tiQ){u{IpG9v zyjKhcDYRIE$9|SnzPGlAtaZ5tPbhx1=008DI2_<|p{1`zF%V(sMh@!^__=G1n#T$e z?^Pv~4cu5ho@6`r9 z`(I_XBSW_3G1N?=n4qFf3!d=I)WP$Lhkcg)S*Vde(d^-jFIuSy`dcFGGb8!NV{V+%H;s4RnozRNr6ZKE^mESSQOY8wl5X0;F`}MJ$ z-NB$eWl^B%VHTU*65XgQ{b7{ZJEh10OnYofu$kZ5?^TYsX18 zW}7gf#Ua-S13!cavH01%01PDsHKfUwA4%HwUHM@GkWXg8m8}ioRQlv|C`g*7a(cw zPz;~?6Ay;Fzn90cz}*;GoALKfOGxI&7l-5JRyxcz4SA}qQTPDwCQbV_xs;I+<+FE( zEDpQ3SY1Ys;rgpf2O0|vyC(uD({L#XNxJ)-to{JmLxoDZpg(awQ}A#0^wAVQ{kN(d{6M5si)5!0xd_Jp z=!dh1K@ZsqG3&{UvUx-!$Ok87#iSiyX?n}X08$pJHK8XSV%d?Hjy#6bCeu3)U_}@m zN}pM8cywwCcu^$&rQJfGP`!^FBf};@;Du>z!WbUz9owO_AVNjNU48KdbSz8!<)It^ z13zxbSL5;*q2)dcE8Z%(ulq>^=xY*cftZY8KbcqtES)V~%LE1SZ0xSWG#OmUQwKffUqb(UAYz(=(MWIHv ztafrm>=x8e`H?H^82*Ob8c+m0Ld5pFHS7GsE6pMh zVq5Muyhto-T$n=@&cbKsxUYrkb{}o%|3T<}#b=N=HnXJVTWYD6f_%9fpSo89weFM+ zE7?wWx4iDZ__t=O|J)S4Y1MTq`?}Yj_e*!0o(CE1EpPLxc&1~?C#TiWG2G6ynq(Ph zl>L4BkFd&QdG<~8$DXqdEtPSRgKa(Lw<_gl5gK23Oh#_$Ld){D`Al4h%?Dq;(xORI zFgx{8{>51MhNggKs3=SCU!4Rqik~x>!B^wtV3g>&$8W8n2viJQsC}c-v5+P8x|b1s z0!-}hZvJ}$bw~ z9t0RMz=5}^+^?52-N9TIk;Po`ixFE)CNjfEr%H)HT=y~_*_XnG=TqPs=%HzIUxK+y zUTl2Ck}h%LV@KOCJKCKeqt!;JJOMt?v4Y;PUdt*AIP{AbAtFfbed=#+CDsxbddZdO z8#;f&!izjzZ41i;Edqp>foSE`sShrCE`u7b)U9^fy1Z4hoSN|{L+*!0c-M7eeX@da zIqwhonX9GoSlpBN_X)U~NBXV5pPF|!-zAC(v)$(rUckKR<;M?^4t?i|?D*MIdMsATbbq0^f;kKw+ePY_*9QGCfG zaDM0rVCjPZDh95es7PM;88r6hT$d+0~X?2rCvpPPa?#ZmqW2Aio1VI z8m~Dwx0+Yo7G&bOoKi)`f}@{G`X#3J3@o};#rqwx2Ag68S3%j6EANg-Fq7( z*tV(u!8h|K)#2=3q|fypDlSWr)C$*>)Jgv{z4a}d>_}>3G&Y>?yj3R?HQF&5c8T{y z%dd+=&7?db$f{Q%$H%jID38OWO^wx>sMd&4dYXB)n){Of*Sd}u>m{~!%t~`da7VRW zY$GsA)0B=+U&hza)O7`JKKnBb5|Nyje|XG5D4ihMvTy|l6nw<8MgYl31FIzC%Mr982EXhxWV#d3Q? z54X|U4}qY_peygIY>C+>hfIiF0;ojwx$GTB{i5cenRYaV!Z~bbl|DvTTHh}!cV(!xWcI%KnCB5w*dto+@`ER zl84S6`Yv?z<6$ZebH-gQodK({b#?b%cwbH;Q=aWGHT8G)jPJMOYZEci$n&*sW;@H+ zNhy4fAG^pXhrzHH>RhhAlX!FL%rck+S1d}tr%PL$pnpbBrf;+_=VXGeq|~c~I;r8r zuTr=1It7PFOf89u+R{3F+F`DGgQV1u9~I9!%C(j#-tI=4W$|Xpl4)93cmRE$L?_cm zwpZ!V7rp3h+iwPpOb4%JrHjwCgrXIvx@dz-=WRHLvHR7}u`orQ7lPxGwgqQ4joJPw zF$zyVEBw$eMOu7o9MPe7B+*Uz(o}r*L%O`q0!?W)O3V`X-;mjp=SC$vCA{Cy8z0Jt z3Ybf!Z4JJ#;!jmwyMy-%Xl%Uf+HAZy#}h>$^3mj$MF3KM4tm0R&@mjKE94w}Y$QM{ znrJdJJA;mL(#T`vQu9R0_;uMaU@i|Kb4%AOg9gXeosQcK78DQpb?(=EP8GCpPvB0* ziPW&=vdjA6#d+_-$t>R$y#(&sm}#yQW2abHSjwS~Y5YHoT0NOW_tT~U5skVu&Edw4 zfV#B*{{8!1x3TR__bP)s%cR*GFx#&myFj}B4@ZY{$bnQC-N>VT0>m=`#h%bGPK5^< z8w-SGCe9K-@|Py@XluPYUstCRV`N{vsnO@>WszZgaD4{fYhE+CDbCBlA}Aah@Waq( zJ@SgMrAs<|S%N1pqr&#xWV)#r&@T!agr$5f`?OM;+`kJU?DRdyXnhso@{Z4{4M- zd+F(kc)pFuQKbnZL@;QTP)3al!BL1T>dXZ^pCRF58zne|r}sO`*2A z_B;64+K} zot2f76{CAg3yW0{YE2BdC1h~O*GPERFJ{O1h z0=4rN`2a4)mNqfB1PiF*!KCgl0zo~>;ks?5gyN|kGeep%OyL+3Pp3hgh-+?c;Et-#H^HAx)E;cpvGtB#urD-7UOr!~p0w0NFKT5r`9syTw%46w-4~gj zre3S(f2;H=PLCN~gfnt;ij!CL!fdd$>&>IZdwdYJR_-{*lDZ;egaR`$DF+O%9^8{gf9w$-M2IZdFk}@!mWjtwV+y8uA0xrS) z4rn9TU9W3F;;Ec(t{a~BSkdCZ=#&j$MxYdqQ4PV$H$2X}DR}AtmyXoHE>r-)1d||= zulIQv9+hqN&o_73=UkBQuV5Az%EiQih$S}%n?J1Tt?*^cnfyd~vkAyH7Izb)| z$4e_Q)teG`3RtR@rjA_ z+pim|b(ab_Ng6=12nSIHY0{iaR*du;GoPddLr z;Wpc_(x~>)NGY;QkGUW$J%){4`g~W|@Ov76j-DX_#(`m>?F(X+qunI|a;kaZ_e~SM zTMdr@#S4d$vv%g037udYv78?oe2A>h_3>f$_Q;+85d#4EtLsZT*JvE4fyL16c%pDM zT8%YUuFm7guk`LKa&u|yllz6VwB|aWv!l&9l4uV1im^Mj+SQ8Md>mowS|zh~?aqr( z_g4&4CAC43oLZoG3ZFs4(cm@(!keGsU5N=041^%LHab(mZK4!*MgVd;28M>F(bjT> z&hWkwd$CW5+#m3hh3U@j&j7OW2{IeHDL0Yi5)|_>H9JBs$cz!RkYE>(!npkK=PdNM zuVB9e9{#7HbnpTF$L4|&5rF&v!ZH+8_!9&^Qso!f2{V2HfpbZ#;5Zx|rg2@6(RH~V z(rfH?(~ar6_q{;B;&ssP?b;Kfo#%a+k!TMXdTZ7VJKsb%8&=ou)rE^r2(0v};9u|m zp7I0?sxDEQHn-&PatgNZnWoca&*N=^tt#?ISVsOIMEVzJK9_iiWJdo~&%9fk7T^<% zRMQ1V(?ir*@pKfn#=rmg@jjT_C>ZodA0v{v3}P_5(xogqk*pIKuJxQ|5x>anSDbd1 zDXhodsmok=<~nRSXp?Egw_!5uaP&znFtOsKORd?XJg&cA6cO#1*Q zQ5s&WeRA}DETT<3Z<1k>)!9ix{%~H4ye&S(kQ#{&BU1X%WLxmeFdLP-NEhy-9bUzQ#UaTb%?OQ@~ zaNAHnHY+?qycHWbKLWr34@v@z{prx3NMp2MAfeb}GA%HImMf~^NjJSvK&KV5QjXMc z{|T^GQ22=RLmxzRb)@1^VYVU8O|#S8y(&KQYbBi?X=OQbIYBV!h}qN&Lf&O*6SILh zT7Rea+i4LD5OD9@1sA{5a-Ap+LU>w6MvEu7H89T*Sxhh680Zm|cKQK{F6wW(w|g;E zqGhUTY60?wQQw!NL?DW|O2HG9i@3lV^E zi?l07WE*`RS^~G~2vAV*81{UcAaV6b( zKk*-<)el$TW53b2JWt&5MpOmci+U+ga*EQ!H>WBW919CwHZIQ@^?#ew;#u&8MNp_V zKN4>S5fAYi`q%PUc-sx?>bsRskSF+mh9b9`!@J^(rA^g#F;cz~ZIl~tEx!oK%YN|@ z^O~;_qL)subU7DEJy%U!;-5up5!I!s>1bs9&8;r1Z`d zd61rtZ|VG#2wu7%EtP@oPj$K2V2hqYu=@W54LN1d!m|H(h$cS&D(4jmXFTa-7(b@C zujSE; zSPGroVWhQ`Duq{h3l|=W3HcjqMP>VQ5e!LhKYpQ9k>4;CUB$c6Vx{=*?2t0L>?k8V zqSC9^kAYmsk*$|2AjvcQVpVxk>YB`e<|`lZfnIA^`)q*0TZR&;DDB4IQkG%LCUSXB z@htRD>km=~+MM7X9za{ZnASQbya#km$G)W>n^4_*GM?1?6X7>d8j#G9Ob z=+D!#Ijm^8m7Fel50OF~r0mJqgKe!om)Pj0D{X$@Zl1)0pA0*k$PGz_oehIUQ4)BR zBd1Pw#ZErwZ^?rO=sQ#pq2~Ht1|qC7CP@F+@&RvG0^9ue-hxW2_JPg@4k`-SQCkz? zfQ0&--oj`1pa=5KFp1!psKtQfX`urU>%Ef*qm=M%01?R^)&qPXU5X%YUJ_&j9L;|H z`n6qEng4mh_7fI2Zfuz#TVgiLNZm;B43Jlz zYv^#+Pgv3h^dgVH78H1aPLXau_37V{w|mc2Q?PpY$s#Ae?J^nAy_1X;>N`tFR?kew zqTzNd4A^@*z2JB0FZ{B*IEEFrq%WumA3j%r$K%ih=mi!O$?^*lAw%jP?f!g<-G3e< z_k#aO@loES@ZwyyL6CC_QPrE`67X`QGnvKJ_vWC}~k2a#Ks@z%!&*OeMED1kAKrpy|LiO@^ zv|@C0VGqrYksBG{r5oo;`}EqU-QC^6TIGXppjN7H)9^dXB$b7NUVQq*DlUmA`wbBHG1Y_(PkvD)Lg;9S^9MRj={zWw@O02VyL}MNA7WEC$^B+PF0BWMF(&NP z3?a&|S({o=P-R0YY?I!f8cK>NHbFd*bf%?sgmTfXWt_Mihoo73XK^#u)KKw$R?SG2$ddJbR1^+NivPqPinft*ZjBP)Z`*w$ukU1 zkxv08)6aCzZ=|kt3aI0ozFsN|NBNiUiQ9X(>a5Jxyohx#zoEuDZ`fV2M?;Zl)Bdv1 z@Uf@mt?bWL(>>>fv(^YGqmn@-f+q&xHUJxR>0XV+#r-JM zIq*mjd@2~$O5O1Atay~r*ML;7CEWo9y+7)@smu-Pt$ETJ&DlCGb8OCa8Rs4(I{X0> zTVViM_#Z;pNSJq0`S0L4gh5R$fW)VxlAc_@?`7fSJRJtRtp#`1H#a>Qn0g|jMGbzUo1uPN z{5a+_S@(=}C=K<>Bsw+{Uukx6QTq6Xex-7xm578SIJ~YG{m#7u^y~<5E^IiG3It{MvmeXk-PC>&PZlQV*8T4bVf`Y>J zIi)tzpEd`fKYTA*QE6&0teU4ik;>JSqMif@KdxN9M(=fbcG$N}K*94CvDnkyT*W@~ zbSgAk{RsOEWcs8KZlSe=%{yyjTpY}*H7L5=xJcCP>lMLT{_dCbUNbT>E>kMFm8HxM z*8L$TK-`E3eE^=0rq<%}5-l__Y-v689~Mcod*9AS|I#|0?c8y zj0!B$3G9+KZ)H-He%oqRdV0A27)$zu8a!-AB`+0U-3VnB%FjVT7H@(oo_rRiGn3Ls)rPU7_rPTxIPxqZtnln z0wk)=%syb8(Im)>m*l9DIzJ7TJSmob+m{g_zGir`e>Mizql80qe=?DKkS);oBsxf5 z5z55OjL85oASMEo32tbDk<`LLhuPH2$3oE5IRg4I-v?;;$`ulCGDoGNvE``8oDbZN z$wQlF33P2BB$%a~`&ZHW=>74sUMP+K(+iwWp?>aLGPGiq$c-NtD$WkVOzY*@$Ore6 zNS6g1)XdB%|DGL&_aI0&w@7@h#2JN$1M3!|YY*xpVU;(9is7+vTU(J2%1S^mgS@aT z|E|N}>*JpB;o0@s6`{^OEb1^l3cr;9l3>N0Z!p#xro-fNm>_Y5O*eT@CJKJwo5jGM z64OwGShhQL)JuN57@NJpT&bs56UOlKek1kbO%g2c1RJ~Z&6anm>b>%z46W@_r5~G- z*B?nShB$ate4x)!=Dq1cjGu|-)1ked3Ai{<#eIC9gQ3-F>&@i_?#*%k^uX9tNV9FJ zPo$Ni@E*cnxXNA>{>AlFL01(yrBpu*>@4{E^yp>1U9d)KmPO%TaSPh}+diKa(^;qP z_#CxyJmKRJ+CEC#lV##l;UnZ>Htze#t+^&Y8vX6)d{q+3)ASwLG9GgpJjL;qA9br? zy?g7{ob}3a-PxCsS0cTIkyiKZmK||s&2SB};VdLtA{8oF5>=AV-X{Tj#7=`n#NNN^icIwG z!b!w-tg^!e$R2}!jCA>3q0Do&sjNYQn>{aVR6ee3#CY3$uqE4UWG!6Edsnglbzd*Qwf=7C z9K^?wuGsvpdD>^Y&rL8vTq}iQqdj#ROsYtR)x#R}Y5tkfyH4S=>^HxtqRz<}a zBE@15tr+pgjQx209_3Z(Pr739F9B-6NzC%*I3Z~LyBqR{1c8C30q@1LBkGphm1OCd zRA1+eI1h1h(u|`(H5u&PIa-~-%ItviOq-CXzU_trs&_PLd51qm_AbN*%QOM(>lXTF~yzLIIf3LOt$C1~W>&>_DcieJ~QE$;DQ zEyryj@ZQjF!ES1?)9rC8u5^kuIazQpCLSg99R(`XJ5$kl>yv!q=}g^IqNI*rOU=%A zAhP0aln-?eu3n_NvCPEtD-*B10xGgfXvjyk&+URuE z$KOVMfB$<=%SJ2kBqQ0|S+b@U+xa5}qlY)+pb~9Wdnwl5xQB zpN#ns+U|*y8>g4Tu1H^x3=THzCA?uo6v;YHAWP>?MM7OWPRfTWt=s$D!Yi$-{O;H} z#(H-mv!!)pT_Y|*O75eT-uUuupJeWzM!00oz7ioaZvJfE zUxs>h8J3;bl7~GKs2q5_ekzBvP4N+NN)o`RA3lZNuo6e*F-r86zV$ip-POGBCiMWx z@$| zTis9-%Bw0iM6y8rd(i`O=?G2bC5>-6wz=*!Cy)m>pZMX1=Cs`n*#>7`elIz#uwJ3% z!MHPT(DADD=Vb`Xn4sCo7SWu#pYdV)b2KBK2WkIGsXb0`5l?GiJt~Y!_2Wl{!`3tQ zyDJKwnKQg16m^T{13|0Eab=|;S#iJWrnRc$=;wxpyvttqPkhfu1(BDlR{r+-fBwR> zu|ND3!hJD%DbeTg@>0N{2Boz%6a_H?F9f@{TSH!hyZb+v+w)m-fStX=lPKGvSDFA^1bMPmVckIN1S@;@%r9@QmURM+%ttBujb9?+UI@_OSW9TUyf>~S} zH@`DI-5#xT)zVATu{0#teWLjQ^h7_hOf2eB_lJV z*nKl zi7VZimSPQcb9h@TF!1ahL1;`Hz69@K@ZPUaW*3mF(WV?!rYMCvQdE?Q^;mBVT8>)j zkC(^?^}6dNDmu|l&uliJQJuAH0kM8RvmsUr%Eqix4VM2TZZ=*G_mIBT)wyl@9kHm6 z`tP#q+iWI>bi|nPSuzs;HMItE7g32IEGE=cL?I0EtN89~tikB?>rq)hPySj5eybPC zgWqf1lN6-3X)IXe`|t!)gW-huC^NOn#g@_jsp3KN7XxE!otSYe|PJZcDvw_Jh2h&t3GlhhoZt1 zlvABG*N+7iH0b?8M~_S&^bQuJ4}$Mv@=y?}JLG&S!3Dp3Iy^jFnEm$hlHhsN_w;D$2lYHiA>shH zNh7+w;S`SU7Ozt@9X-oNg->O^9q*2pIgq*(KD7HnRPeg`MoJrJK_6P(O%3dYtcz9_ z7tec|)a79%BdrmU#F8M1UdQ^B;qv?iG6abFq%vNY z0+MNAcnq%8fJ9F}v-w=Z!UUgv10;61geO;gtKmv4uEu3YhfLUCD%jXrSPF6|svjBK z&MwbQ^(tRC))&vi`JR+QB0$HKTd>%0T&M(Tt&U2>b7N^MxH50SaMKWMln$MmVmKS# z4+W8W9MbFGZXEKFFm1Ud_OARJZo07Oj%SL;1@i*hsTCAe30{y@8GYsp=0_M}GSL7J zG~#TEkmv6CwQQFs=eY>4+dxw;-19yN<;`(ckm{Z-OG%;3uRGrfPseYl`FB29R~JST zn=}sN)hmbQJJ)B6w%Ae)yUNHiuih+^Mu{JJ`rhnejQraje!VPlklB0B$ME#IIG@_` ztNTX6=1a&Q*G;G@l$PB)j1AlmvzjncJK6j0^m^qstDZOnWBw+lOu%HwAwaTfA6e}hrSuZpy z-raTm&#lXJL1NGHpY>syrchiWF9xo3gjN`3$hGp!>+9lkTKB0b9Oe{CM9QxxTyEH! zB-%d%z1tb206C3DNY)rp_2vT%|7j1)@kW;TzxN*Mn!2{62$fc(7k<$Rfu52`>$g^v ze&mcw?$z;9%}G-1xYEC}Yx1M0#SOV3I@>wLY>I(#xLpfQ%^Ya3q<0k8iT}zi&YtY# zeEV8e^&Lz{HRRFnb3UR`DAxifTbt$4d~JZ4m@#V!5X^^KK*5+Jw0opgUQw+5G8x|B z`NypD0oN-IWyFG70sS#FKjDInM&fIC+#sBE_{FCxITSe*M-`Oszoi$%kfq&gsj)!m zpBnu7K|ETC{!;DPqC%j0Rf{&G4klzT{1i|oqT8^k%Si=X>Douin(`R1B#a=u%ztL< zUa|8d{A6FME2|Z@{-lj~E{gD>77a>F)D@v3l68=MuUyHLhB>Nj%(d&6+rJ3gohy{|k-Ab8@^ud+ic&LJyo z=dhGT?>*o*js@FXelk>*vi&%6bkyU|BfhV>4Gol_ewUS?a%4KoXFP+X`Z>2CVGLH4 z6k|Wm9Cgvdeeb<7ZB1t#AaQpyi(Xh(#??RL+)kSWXF--OdhQZsA#kxbO~fX#6ppSu z3zOhfMSRsAKhTuSUAs>>j_%#X52ftC6xw+LM!g6J46S6A>%}Ey z1R^+tujB9}?C=<3UZEgreppyqMtDD_dS<}`86K(x02_qIa3<=-kd-&CO0A;-N>moX zRJ(n#y(4pFotOom;6vs9k{l?h{-HQeg?7)7uJXz`>D4Yu^;+(nfN2WK^i2{u>pKjWXlrwsxnbCK57&=zCsXUWdTA zTrQgiZSi@A;IVAq-wdeIp`<#<(q6EN#~A+Y1MsUQkCmTDxeFm|L}sj=Afbe0MXSb| z6Z}dK?SvjVsF2&j9O=a`r?MIPAn(8lY@VUp2wJeAvMVo-4&O{09m2@XLS@B(nw`tK zJ@WAh4`%M7JU}r+X^Tqbtjwv%0w?y_?x*uSRy0Tjf9dx0GGcR?9R#SjXNm}-r)K}` z#JHEZZbA{LB`*H`Q;2A;srgS%6I%8DzTNNh;#8N{<9gB0DJX>BU_qCCM-7BCULoG5 zSA|eVcVeR=_w@b)iwo~=apX=x^h}Ici`q{hLMIhbXDFSy(x|&bLl<`h$(S! zee`}a+!4%ZFXM%RsJ41RlzRqIDqBg41{Y4yK7vMHUaTIRFBtN(+oQ@lI@wzia9?A- z{E4WE|JA_r{}J`w;Z(=%|A)vqSqItckQHSmn~s^4EhI9t_sSMW_R8L5@0pc7G9$7H z*(-Zw|K6VG`Ch-PKccQH^m%{Y_kF+C4INJ5MJMXPC5Ry0^V$#oupqw}Cb2i&90M7y z=W9B=c*&pIlUn|o%%1OlR!T3K&C$$ez7evOMyp*o2)h+(pBZ;%KfChnGE9~^l*%6r zmVR}&)vCTO7v1*Gn{z6t__dQj&GoE`f*R4UFEMZ2;YwRTAAX};JY>0wUJa2d25x!tE%jWybtHG^I0a^HK-!x%pv)+46-8d)z zPsXiwursAgNNUi9l<#4x`6Dj3Ie6uI)7eLlq3?Nb@)RKk46^|k;QSZi=`{|Ty@-a; zk)w>X4JExLkN*#h;`uDH3Q|{mk4p%i1w&Jho|oz zohyiDW+pwJcZCYfE2P-Mj{sjN>1WW$CfCp0~(-*x_t=apb=nD`NRdy z)mm*N1RcK6Qs@uA~?vYh{;0o#%QERtgkVA6lrmYUt2~D zr!YK@h5JT%(4&b9PWQfT+@i^U28F@@GpZsbhxv5H;y&?Ai1|h}nC4VR#8j4f?_n-2 z#Vjh3L*9A1SG!Mt`=N+X4s7pa@6OC3#SAZLSGEoxhxqS&NnwB0vymk`C$S zsg!;xz91%&&IpnM80fF@g=t;W`fqF;X)F$M&8HXiRQ&2emZqs6>6ni@FOOc3nvlPV z1eC9=85Q>*DWkM=7d_E7Ve9V#d1>W-@5x*6;6vADU#GGYJNH6DnI9k{_A0+_yF%~t zwsW_%=Dq8s^1T=3h`{&pa)hz6mRz}3LQr!zi9UOC;AC0+(|`CdesP?SBs(*+>x8;* zeX+w)+Guo&POH{JWIp3I;KSKg!g!?d9QQVr(@tW@LhBVB9@UeYkBw$H;%g6@uD-y& z2zM&F{+&aE1;fyxUY9S5D{hhL)EDX2)l?tl1#{pEe`g+3Z&Ir&zkL(YKDbd4ghxZ_95?`1uTF=pWb2D@Tsq#B@I)8(}4slh5^Eld0&m?f!bJBB^EUvCJ}0 zY}Ns6>LZ>l4+`r?#u%T)3T70KZ+hX`#_)9atwLVpM$WBlnhF*)R9;S*9U{&RT@Z7V zT2A|tEN7EP^9XIWk{-!C`6h;`^9k(kYE5KZEM^mPK6r1x>)fb*8A60C_?)tGeHG@C z41z(H(mi$w>aq6X6a_8Du;hm;JHo1(0C&m5ZG6B6`9m(6F-)apnEvM{C50u8h4Imv zi<~}4R;Vl2{q}kVXi}#O)tFPn>P?4fgt`id-jv@16SWM3-r7@j5%$$iDPOx;Uiav4 zO08(nA2U2)DCH!Cj#lWC%Y?6+Y`-CJ#}f~ImBD)W@3XATFpuE0O!wGh(wk9azl##rhWy1l*!W_DAG0LAU#hY{&3#r>zgKMz-E+(#h_t#*FB^7Z-$njMhA(BBw zhab@3+;t<(b-FAQD_|O{2p4`UTe5u&>*UtQux97}qk4el-3iI5XS&2&P<$ zm>&H0Lk-IP1-FcE=qPjZzWT3dkgU||Cn0kE`)fjM6&z<3 z%cEJIFH^Z?Ry5~opJDlUSO!D0N@ppO-G6s~_K)&Xkq9gD`gOvAj%sLVpzmTKM{#!* zjNPi+jRcGJ$`JC{#V2SYTyG78PdbD?iA{~g*ltpOU+~C%UVH!O<0;!m zGe{OIIWZ!P#4z@fnf&9~yaz{rf5`@vkU@QWWxf<0)ur$uA|67w2lfSM3m9~u3c;B@ zBzvam&-k+{zUaPdwe>>1-k#B0_f-Ir27y#Uy9ICqxFSVB>xr()ERXA=%itA zLhW^lN4T$4-PH-9EJZlt)J|i!Wy4~LCgNeWe@)D!O&RnVGG&oX`2Nx#KJ8lCJPJzk zonioY<|b+QJrMJ2H|tbIhaGiSrofL{W_9QYgMSwIcl=Aq104!h2s|P~jq2x|2|Ce& zrmGKO<>sqAevgn)&F*SHsaNp5p-ckhy+!Si`<#X{gf@)~)NCz9ZJ#;%qa6!KZthzo zx}-~@+u(%W{HC`$zpx$~(>nk7hQj!(b3r2nK-hosEQbiCXIgJ9$vvUCUM~%LZ)A1< zPN6m150q3_F8w;8$3pbHM1Z-5BiT1#U_!sU2v-Kmt@7{M?U%ISQhf}-;@9X~GatJC z_N3`mj5Rnu{+gNykK|jpB-`fQY5S_FC{>=GCaLwUs;d7HQ~6Z-d$q=KSwt^gqzKz%9iW5g9i&oG{rjl$H4Z$8UkJlD|Hyo#}qBp%3`O%CbTb zUpYwRJvX-BdkN~p5l1Vw!PGW-Je{;s20zYvhBL+M^4}qKx6PwmILtj#E_`SmjY#U7 ze-sj7@osor7IoC>NbPrb$jPs9(-6~xuY9CN?}iL?u%a)&tU?V1{27>;mqJ3B7XOJQ zY1Ld&KG8l1uO-Eh9Gb1p$Lr};yPs9k1UjaFCqbE4htsqg(JcDwkOTyy5{jprz(2ETT>sL=Vob>-soD%#|?ncCEc9;c74}-Q@n<^)=Wqhi_-yx{Nc$M)+FElr*N(e@~RL601`mxQ=#AP2fv?XJ@w%G`O-b< zQ-nlVzgA0CnB46+ISOX34NU|(Zh^mfci+~>3HFbR9x>_D&oQ7n9zL_$w_{YOd?n%T z`1)g+#9mI5vXz)o)!N>`7s}k^k4qSFqN61WMYy~~0Y;`%-(;5+JLEZrC5AqF&iV8N6qFUU`>gvIY@(Ka zuVCMp79IxTk$x$t$Ek+GPd88tt-_?laVHAjr4`B>zEaEkwuKoC*DYiI43mh&fXnsJ ztbKpv$o}{-+I3Z<(aPg{U_GUurrtY-4!^??OoVao-(R2bzhjz)6YhUt&Q|{n`{=;Ys{qtylBn!V zC0NkCSN_d`HDYst==SPN4vfTXlMZ~avJDoIRrys_YI^1pqCfN*n64vIUNwx2o1xLSEy{; zXv)Xrtv3Yk=ilA|57OwBa%}*--d;&BMn~D0y6zS_RnYnG?|$3EGuSU)w;)F3>~YM0>ei)x=rJQA}8Ai*c|1PYYncrp2CzefRx5WkBmg ztYr10v@GeedVYpIfTwd6ri;m(W`g!xRPKk^hVhPp8#s!Kp%~B;5f%3u0>t3(aHQE_ zF|G7A8q~TcqaFiC@SOWt=+vo;k>QO!Di#i-Z>+rd}vPI>@>RmPVHAK>-}uf#XZpYA#q$M?K)`$PIXywNV*6&M!gxNgG`SluOJ(v{*3&z zNt@~i9U7mna+9sUmA&7GCok;lsX4|-UaD;;02#mK8USMBTrChtBAQDbdjVJ z4auKdo&$k3zOgpyMg?Y7lg~U{yJv5;KR#dBfslJyv^rPV%*3kMeMcG4J8cOOB3ATh zq5A#cGj$6M=hEKXdYfO0Jx%_q9fMeI^GT1mOs>-s02;z^_s(5hfVGr*;C0s_HH#CML@hu&+JYKk&i+vF*H=fl31! zRL4*yk@t%{k{gN^Jv=@j#O|J(hq@#3JYsw?po}yGeFl@@cJ(M=<%7YwpU zH-(E(Cr1Iwu(y}jAMz&&l==`2i?aLjnYm8i?z>iq%mIAn%b%Z}V%WZbXM5oyr)WsB$+Pb`#HVPpM^$+f;IIX3(+gu6 zG(pbD98zA852ydhW*`zX>2u_tTQJ+PzXu(sEAB7qM~rp8N3s1V#X`g`M|X;;2fut! z;xzpp{oCIqh&H$N@O407KG5?rs??{fx{j}(gNPUY+VuKKj=Gu`Ft+gf zNl@N&D3^LSM)`})ydAs9wStL$7VF*HU;$*ol^?zE(d?PszMZ{%P*;rs16&uKo*^(d zJDG=kq}xP}3`Pdymq%hjvp2D8itqS6Nw(O8My!Da*lzTc)1Al6CSeadcEz&p@iopqSaJt{tAM zSU}tvr|{-dcPN+7jVCC!Csc zCt;c63RC39h8V?YdmY%{DUZg|bxJEIvSKygSu{qg(!8~fR2GoVKM*)>{~VfIzxl~B zKdbjt0%ugQ@()i#;Muc8^{4S}`=Unka)PDdkEUr=&HSYG1UQy#>qMU$+>X0xO#1VQ zy~!ODaCsv?(sDK*&zQ5ABta!y!gicAFXMGyn#@og9koTniYr2hhz(gw6>!8Tkm-Ky+#fxhNEJ$B zsQ&xi$-=o6)h1BBQ)vw|pWVL6aoUK;%C?oPOJ|00DvAy~JrJDu_?6#>>h$jg6{Y4a zX54DP{`s<0#v6K6Qi8Kw!^w}Gh*?{H%_e-w4}5|3oyJtH$A^IcaMNm1y-)Lt(sj-* zUH`M^zY&Yd+5$~nN{1(9O~zj!xCy0iNeK;)JxtS>$Y@%xe_f&@Vv);I>ycu0L)4g# zC{1VQr&VV(T>!A?xw(f)kF$w8nfh2f?B;ZsHuFmditL2DE-$Pa1FC9Q3gD+q0R}iO zBKC4qKqd7a1G$x`3Q29 zr_ZJ!iXtFba0z%8I6eREbNVXl9*rVpeL30K-5+CewvCNt-T`mXWsQuoLM}Yt<_-oI5-})R|@US)}r>cGa%d3fX4Uwpm@U zA)DH+3WJ7iw%U%oX9NuXKMXLFj?jz+*?XBi){lU?yaXohTdK}b zfX#0^6An~I;nRGS;%1^>1<6Mgw4CUu1+TNTzve8oT7?_MZ3g`QoI~6}m_+%r{vpS8 zH@XFR#FE8h_$H<8tLE7Rgi{X++gP6r@H4_<{uW=uCzJ%D+1jG=a&WWL z@yX`tlW7uN9JO!5ruZ9gyzSh-$DIXh-F$=;y$bsJy1^gYms5b?8GE{KVT=-Sx`pvCqW$bc zEugacj!?(yIGmG6gNPHu<2|x@+Ddf4kpRn~!{B%}#b8PE*Aq09DlL4lA4$EmOgLiN z_TiXP7hpQSXHgMLDwFWnYDS&esAIr1hhGYOH!?Hj>x_3 ztro0j0|6v|VA6A}o@)1&$>EID@NC|H=~)@a+64W*D21rhYd5;>LfiLz$6M1dNp+wHYl6Cm(k%HRA~Nr=p613}F6%@0}yb zeY_3E`Qp~|UzdKl%<~H$A@`5BKVkz!2dr+ut_VMW*QYSJk;s~!G24_OA8D4U|1fA&#_>%zG&L1orN^2FFL-Pz_(@-0LFU*W?z22nCq|aYPIA((+SZ z<*)7Ea5Y723k(F+=Va!#^D<`;(H&Z`K`K0U3KN#Dibf)WUnyt)>^I?Ez~tIypBJUbo(AaZzwW&dNe#7 zwr&!Z@&=nY0rDp^|jm-FQmX*S}-G7v!)++!T2eEW$k_scmj6+T#NQ3Lsj@4(pF zsm!xhH^uD<;-9#$9^YFG-TS%KmV9xh3bBV3Zv670iV*k%Q2Nw>WDAM`aqR%!DVk2I zZ5?Kl#~ok0yR&obXlrdh&tTSr?Ds+dyZGHFy zrAP9kyO|Kvr*4`8#__PKA5Na@DnooIw25l*`zn*`@8bVd$N_^WI+Om42pywSNtDF& zm4F5$)$r23{mq8e;ddcg>_C$Fl(=bJoWNJo7hqfr?sR*)ok@%BAGQ1$LYK`|_(|Gw zpmd>mQ@`1DPmjRR3Aj$gZ(|@?V|!yFu^D|-s4;^lz7-g8am4(on!f9LV-Rs>WdCLZ zw$03mDLf(AUa%Z%8(ZMpR&+YmEY8qG1O%a_U?-n|Z$B?A0<5d^$i298&(b+#v z>a-3&NFFY=l^pkrW?HN(ymC>oek|wH(a(CCq4k$P>qvc1=xyYlU|M9HY`lcV4$Gl- zZEogCc~Mbg_f$)%z7Ch}f0S^BFd5&U@{$C*4Pi?UA9oeZg~H%2yL06D!u!5vP>d!l=LCIAz)p<>fMtEKMl)u z8d!{}XFcIhQdcHy4v1(93G~)$Rz?zNjE$ z+HzN&G?tN3DUBR0=99E}F!dT=ODo&;?e-hDI=ASf(*8l3{CoD3+rj~*jDe=IwrWGN ziK%Jn_N$mieF9ETrQ4{asv`y|awD5sYxD4)Gj%1eUzadq7eW4P5-AbmJ(tM3z&L=@VeGUYDidva~FYiXDX|-TR*HdaJVW zlZ(jyppO@k_u?{|>=T{K+jl?7$RQRMtjenOSeGs(9qH6;DmrR-tuL||6NXe~nF=P$D&Wk%RY_ zcw^}YrK!GJXcHsTcWf7W3DKC79yAqNf=f(cxyTTl#H7i*eEuh=Sog$B2HA7`@ZXhaY^-`_Q~K+JvnRuWpRTvZV@^D*=xpC021h)}pHuSOzT!9l zMHaqoK>a}&$`DJSfv;EZ#wI5v&8mL7kQ^8rnD>YzI^zOd z-=`V^5ff1}rltXWWAd-!9Gkyv3M?}J4edkDo0G1I#Us(GGzxd?RZcl zYF2je9478fz2=z1OVPvsO}9LXRBWy;dYSe0;L}=(Q?gLL^D_VY%eCIjH@!!TG}BUJ zYc4EDg0k`asqHT1ht^iK$L9t&VnoT^+c>pW0xt@|A`FAdi*b*5JD}P)50$vB^C+`%;_N!D{qhc>mGI z%uypWe1PsNO)4nO#A7&B3{Urczf4SP>ooH8XIxXO0Ua~8*g>pu5(_iKuS)^ zXYmnq5ea^~H_%+^VCPg2>YR!DWC4Dk4oKN>#4mfZ(e5a|`qLRpE~ky3QB)|!3n~+& zzv=t;dDMon_lJNbj!HB&(A4{k-2wlhK*Z=K)dbw0KP~WgDxI^PLQTGaMPu5xrqid% zx>8sTR*<1?gSW!A?cc3?O#j+Cvon6k7g7zJc_jWwK#C$|D|R-jbl6={yz}(CMW?d0 zS@^WiG;s@&!b7U^;_29DfMK@#>`R2)$WtqT(52a>_RD(t0S^CR)8+0r35fXkTF*l8 zOYm3L!sFxPbac`H0(7zj=-4aff%}syU5Ff2`O{9ojHB9B(NV1E!wch7a~`zL~6?`DTO>94s%@jO*RF zC;IF#g65Eqo+jr;1x#d4+P{3QnmsU8nx-`qnOE;#$VQ>Yw#2WSSYT6#P5HDMIwB*{ z#z_5B9gn5V!PTI`EjnwqUK}#R0!d2{6i*jQkVw$WqYKQ@T7UfdG-J|q?tqipp9)C4 ztcLB&t&<&|KKf|q%c+P;+ZZd1fk4gc>5#qhKO`QV2>{YFpYm*Wy4n=mpC3(}IiISq zf)Ft{Fc3;%IQF??1O|W8|LtV0sJK`vv-ZJ(?B>SU37M13u%!DWn#}M<_)09hjKZ#O zeZ6EQ!Nl0>ti~^7tHgmSZ!7S--KJR{&xHDQ3aRL5p!>X~_q^dZEf0&==FKC%W0hnG zq3C!#PuyY5#wc^Zq3SdIOeF;1#3Quy8fQ2HXxvN|oT6gB%dc_L`~PG^_Ig|#ZxW%y zKlj<~E7PRoqN51?j}4jag<_r`d%oM#+FJa#6)Z;jJBvTQ!3F)2UMkD}VrV;Q_5_Ej zGl^s7T=RLVGzKH(RGzbivg$d%WhOe~2cZH^lu1AJCqg(6!b(c0`vpi9cLqu9?sP|0&A(ytqGlRl-2CXqtx4U z49S5ePqqu_j3Qi=YR+xUZktL1K27{}%1Ag(oe0?WKqUHbPOMiy?lInSNPvWMKJE*y zUs^gygKI($fr?Ha4+4twu zCi3tEKnv6_g|JD=s7im%v{}mGkUK@UW(PqEcqZ`I8gv{Sw7_toNaoKu@vQz~!mOM0 zi}H>2I<1|1HtQ^L4W@Z~^rO2k~V`$-42>zqO0zj!xjZtUtc z2J}3Vfpy0GEg8!6(zE6BDWAkEAwzH)N`)!aX903_v%X#4>irs*tG|0Vpw)7c{ZBg^ zEy+2u4=W6xCQgHXGnAC$yB{VthQ=h&v&X&vL>h-99%oSC&q!EmdI>AkCP9*s;$W@8 zBWeWVnE2Xhf_Wdksv`BJpP{eZu0X$d$+nwJ$+{KZj{XHR;b)eCbNz8);d<8Nl?~@B zt_1A<%)*|X8GJ?{&iAsG;^WcykQPrxxDd(2BQGx}TwBY4_OXU7zoE4<{*hJW4 zH=pNfXQA~SnS;7S-P_PPd|*iF{OLF>!fZHGjmNweW=!l2tS@Ca9d?V`8%FT&yx3@_ z51N~wJ$CzKR6G^S3occDLPF>k6;64npbS-TSt4&ZMi}_zKfXHTaRAV@*F&p?)7+~B8RyH=Udp9Wm-9OS(+8XgNUZyHV`N4l9ADD<7V7p3O z)9lH}%%?7Elb2h@uEFi>ZO=-kds6h#5?RAAW-9N#2<$j!DXUouXkM$eE)D8MQZnps z86HL9h|j!Rx!GPxeTvor#p#FxDdB?PDi42GFftPOz0SZQh#n2-I#wP{fes%0<{yR3 zqA*n7c-j7;$x{nBT_AK4VSxD(*dmyY6NNL+vzMjSB<`p3@ zEaIB4{hh4TnU9=Dl@}ve!7Sdab8 zbK&b9)=!7zHyxs?bXBb!7nxdV88`#fXJdHFjn~)&TE`>4+dPxId-eTiB&49M&^)jI z)z|+LxbuvQ#E97Epek=2jGZ`L-X9>`F(PwEN96-#^O3)DbL2%f5O-Z39UWQwR@B#H zfLDxTXFg%iOJ7bl>sbf$7tW0YO106iS&P%mp9wVQXPXwIO+@U%CbA_v59v8KH+pUk z-@c#iz7qZCMN-XRSf=P|(yVPQ9bWaS3xXkt%b`q)dUR>lpdf)aw;m^5EGLl_H&VOiYZX zVk-X#D9jZ>phjbeTY(+e)6@7sRk^EaEDYb-o~q2|v^x|tz!Qg^3alzG`M<=}MCj4f8=+neV!6gOvS-6Grw`t;3wP!zcUd~5J*pwU*Za*V1 z53{izP*eZ;s}E?>`vXRgouv!`!lBF!O$$T3jhq8;zRet34Hio`_a`yUhrWJ{|n z#zYrMXwVezwO8SHPYv)Q0~K1csjm_n|NBk}%eKJ~U^jJ@csZT)Z-_Wdv@k8^?xT*+ zpH+pAzPUy>Un(o};S8gZSywnHgiXYPHG_v4ny=p|E*T&UP}Q^p*q6$jPZgw0G`jL& zC5%iAlDm31rmxcf6kAyMeK%$k_7WEtUYe%8pSDphFR!V)3v05Mm!I2?Oi6$^X?RJ`iG6ba{zc|wCXLV zAhw_e-p`}@^>hymqIZI(@*bfUn$p^2|EC4`79EWXE~^rM0hBh@p8S6mUKpRqo`wn{ z)DT}VzF4P7dp<>c1Su(3A38tbw#MG6uROJYZe`~aPIMk?@ZIaATV))q5C7~AWDQN4 zqWXjgrw3fDfkhJ>IYp9(CgL7*vLpN-I}MPE>q-^LRm{*zs-E! zn;ATzS{&*^427pcwe3=9-#8nL2*;o5IlirSDOx# zP=DzR$77MhOnA|U5C(9jb%p&=M6EQ?DS!V_)i4XnV`eu4e2&swtAzOe>;KJERN62& zqJ(Xh-T^M{+W!Cx8o;y$UwT3T4ibCsWg*{t6B8J9w82i2M6f`~`4P}P`%{0zYgm&$ zCKStaTz3+_-k>IPvU;~OljfhY=l)>)`PW@%L4{Wu8qd?+uGqtW?ZB8l7iEWzhP4Ov1n9M)o2jPggS;mszxwL(K3f(r1c5# zY7nDtE*wgKrJ0c^T7$GBC$I8kIF%h#O15#_=+qB4BdY=DjruoIsUCU_@P>O#?$ME1L zgYlBSs{ju!x13Y7c<9PnWP#UlezYEHoB^&BZL9$yE~o~hmSWHoCCo<{;23aFs7vqk zjV1CM9N->*$Szu9canN#Q1i_ArB+qr$bzif1AfjV2JAs|9QSV)X>_dvqFBx2D`YG6 zR2PPB*?os%kZ;b#8_-m~QpA=hGRHA69dTxZJM# z{9Y|&Nl<|QCv|n>Kr)Rp{_&JoCUDX7m6(q0WIVnqg$*Mbc!oS^!>lw4#(*HbQ8Rio z?M?x~juzwdv*bUj;R$*my(wWCIKznDq?6A5D~Sawd^Xzlp_^D!A0U1%K`Lp@h-v>= ztnHz}!H3rfB#R>)(06|hOcx{-ZCXqYD~3@;uR2$)9xFi5z+xAJ361r|vRQVb^)p=$ z2d?ef9%Wr>Alj*J=#L@_=e~Lmxfl7@U(@H7laOdRAnlJoX7T>iFQ1PY1|kx%Z{`Ww zVqy7<36XQVgX%c(XXj6lih34$wz^7rVcsWm?+*6PG&_LkX7Ts!{0pMVcV42s?*|9i zx}57oXdb{VOa%#=Sw-<&=N(`}FFdFOO>%VH8{qlRADs4ulxg5Y9Q9oGM0_W28z8ry zu7&#ShfEn6E)PgKRnv;i;#Kmi?SpXT4d50=ReyQec^~9E+D(DA&q zCl0MryzdZ^8gJOYEjbmns%awssJ%zh?^S^iCOnGwVIKnE+V``z!k(s;Yh2=niKB4vf21tsRVVT_&S#u6yi<)H3)1d&Ab2<9jzQp}0ERK{TLRJ-w6VbU zJAL5od_PNa)D3@6w*quYflvm$H?@krC*Fv)~s+c{;e5yD{@J(kp zFMfZj5bI7fMB}-wAGeatu*%fiZzY(M&MS~Bfv>sMiK!C_JE4LJ7s8uZBA1uY;c~By zQKV`!b<$f=D{DcNg~nv)Q;GbuPxnuyJvkagsxRC*(-U5H?^58wzhmdd9_$nf14R!I z*s9mwg!RF*pA1}|CYh!aT$c7D)F&&hynqF-cVM7;;m^paxX&Gb(9=emvDR1btPWjp z8oj%8t!0tZSmBNev&nCsQ9SyXt&NTWy(XS!VH4UgCnH4UR68?Vg9w6O`AVdaESjak zaAz6cD0jvaBzOi2*H_(^`@^>-;(mr~_Cm};Uh~bC%uUBv{u|@PDUhQo*Hy!bzmZvu zMbcBsJ2&-d0g$ZDn;oC>9!63HF^#Xp>9GdNHd z0TkKdUyQUJO{^uGJ)FCTeViUCQhNJAh^N{7JTc@4*jQEcR00k|9^~Zb(gVq3;bYnT z%Vj^`ELzxsH!xw-{=w(C#WGoq|1)hax~i47^IUjVPDW*}c$V!;>Tp1THK$s0>-^)l zuHF-qmIchS-3da zrq#IX%Z+;<009}fovK42O4fHjJ5rPoJP|{6zEL77uz$}(X4FPNPS?!=hs&bj`*@FY zB)n`m=D2B&7Djd4@z!x$hQY31ZQVaW*guRQ(OmKGW@Z}Yw}DadP9kfMXzPEEyNmL< z9Ku;`1Gvb)I9XbPaUu#ZMm_A&>}l2FE&LPFe@ma?pg(w2r>rn=*BhoY zwz-m?z4%{mP;(#j24UrMfuBdc%6_Y)F%-_?Qt~SB>j>qVM#sSsIYddoQM60{_i1Ac z{hk5k9g#Y#U*JZJP}rM-z4+Jq0>R8zPSa+;RVn;#)-G{X@;a1u!PhY_ocK@L^hB91 z!0>8cs^}VBQy)A?kG?qFj7WHQ1ylX?**{DGJ+$qJqb0btxj`AVuFeth>?tGcw}(?1 zRyq}h`^JqWr^CMkeeW3&0jz_4j+>y6q9V>HW&VImPkzsOC}ZyHoI1e5hl=qZ2~#3c zooAOp1lO-+sbJA#Ak@jY{l|nOw5dg)7Z)vZco@1rQZ@c>DfHD;d^0H{&XR2xL zRhpH0#3>Ud70!$;bZlZ`qW&|JPN$>w#T^J`=Olvw&SB3$`TJQQ9Q;g4;7tP z+ui0fy^kLIde8B*saDp8xyr~fi3JPyU%|~;pLCyU4+ywM-0~I6Bcjg+7D#3HO zibc|PhJhq36_&4nBC3p7D&C!M(BHhLs@Y-T#SYGO?*B&6^UWZ$Rl3jyOIHl zhAIq0#1a@{*wScobp(;Uc9IyEP`HCqENJ@4P*;E=HTh8R?s`kJ!~WCa7vkDp($BO~ z6cJGP+PY3wnNzv(c!BZXT)O2y(XEo2G3|7UpLhgZ_L|eVIl=my5lKrfb+k0z_LOPP>>3nljD%IP6 zBF&0V4wvUgGQ>G_59%XM}47>ws{?{_`(X>XUnM5j`}2Nn3CVj@MXNX`q_))v{n znbVMwle6Mm%#3;o-+8WL_eI2Q&EpQqEhh}ZfNx!+bNxN{Ab7AZtJbL5LN{q zyeiURcuDCKUVdrdzaR=j9y&UM^Oe4s{0mRfK@!hdUi?Z8coen`#e8vA2FJ@>Z@rhan<;8 z?$*WM009=s?3H-qW3DRJA140={I&kq7;B?WViRV+X_&ylkKdBuphSNesX_#7+={$S znwZeln{41xMNfca8N)-&0)vCWt+peHwRhGs%d6s_muv?!HZ^@w<$Zkt2AHT&J>dR5 z-LVJc<5P8Ile-ZdI0~s5az>j>2I7J1C5A8k_{lR!mUiXcdjXP6z8@VHBwN7XdTyH- z?chR}fg3#C(3Osg#1Vgvm4!oDv}?3c^|%|n|t$;+8*#124HG3Q0222T@&{O`Q1RZ zewBJkxpwa1F!b(V*fk-@K`{Y?&f{#uPxEGuN1T_YM)ftT~!0?iY zSBXEY^zbcx#?A|ZvItc<+70L`Eggm`^>{6`qJx>9rM#f)H~vuj1ofq%drut(vX|GU z<@C+Veo#ZFw4a|*f&xh8Ojv;?zU=14Gnm$oNac4)V;ze^*t^(+v5@L#Ybj~gpBl&PTvJFI%L@8i3Ixq~}P%sgH(?xr~2(H4{ zcaP@l5qPN7ovHU<`f~E|kv@Ar2#3%;;w#({qc;0uEeVhY0RS6ny?!0>O6SyYVh|e> z>AImzx9hPnIn}^6sZk~?3;S>wJ9M2z$# zPJg4+yS`QeaXLlN;`7mgy+6a{&5>ogqX+qY()-`YaU$mUQ%i{28PNqcU zycPIFn%;t+AI>jUfyrkx|B-SpM{)OT=9L=zhfk}byT({N=-dE5194747`=#+r`Nm; z0ZBSQISuwfY$CFSEP7i3dtCSlN1S{~rwV#fV_~HPBx|obTvIWieF%`>@aC>(dFCnl zPFLc)*=}J1sAM|r7E>VaiU{m9z6ho;tO0{2FOua5wq=E6&G+0lgN9?ki_+Twb|xnN z+`QTXsv%`ahAP$nn8^O0jwK8O{q-U}kzuJx*YBy<7|6uWsABfCpkSlGAb2*w;vVAh z&Jlre35$*+Uzlg^MFT#_l|ud-Q&S37R(B6li8C2)2JEVhL9uv`2^lIp&D62=t~x%G zM?m4pSN=bqn5s43{lOq%1*C)OVZtu)qRJCG>9j;>)jf<$2L}fXuy>iOpS$rI<@0L| zIMK&$!MVbTJRK0QUE1u~6KgG*r=MT`cB>na?|m(}v`l8f<1}@3c~#wWH)$~pQDJoK z-j0-Web6V_Z9H+vs&+?%K1EjJ)%~_3uxZ^SRM*hJezf(q?gky?8w6Fv;NR+#w73p^ zI5?m9>tQz@9vNi+!6bx_4=JPVv^}E&NgeEwVOq5;AMVC(^`Y#0Jby`k)L~)ChXJ~+ zf&VWme9W-;&~U6&Z(#_xt%|E7zGHp3>t6uUkoUp?fexHIjg$KohyLA!8~*9qww>tjjQvcO0d+JU?Aaa zBi+^pM?CEy^Lr~F#6WGZqOkLB?j4s$d~jcnOxB;De7&&lG7r%4LJTO#(}5X5;cxV5 zJC#7+)1Q4T9pjPtkn)TV#;Pjob=b!oz&+rROWL6Res#Y19(ZQFl5U?!b9++y#HNNc zi^y9*Qk zu7jK!Ip%96LDWGyIEEooAO7td{0Wkl05IP>;S<*|GH*hf##@Si*Y-fV+IIcI9c`O; z7i!R;O;Q<4f8JdY)Gd7AvS~dhRD#frE3_^YZMzN&`x;%G z5&V6kQ+fZzzs*qet`#lC41Ox5tDV=E?dK!IdL5sMEm1=|s}_pBQN89S&bZ&h1qp_Q zz4?}imQ*x#0$*mh6JwM37?7d#m{_!=(_bpww3DIUhfshkOET_`OZ?RgwCqe_z@e{D zPaE@5sb?39){_(9iuCN85IV=Z&~^+GB0|DM|DT-D?4kF^z#$!e0{qOXF(>DSPlsQcGhX^*5SQg zgt{{axL*w342zWFDWRhh-Z}(xzAu8%4Q%ofZg~nK3)T>xOVfPH%Id){XmO0p83pLS6f%g(SySV z_s)7u2J00f7=2M062M8D87cE}LO}T@<|dG$EnpN7kYOJ10U|EPNuh*0k2rwOnHkzu zG2;{EO@9B&fW@mJ{WSzpSw$tpd6e`^ub)>`oTlpsW*{rHKiitsh9zb-7{vv|QOLow zFB$*0aKO^V0XEc`B%5n|qoflDco+a!P%jI^Dmn`J-HU)D1jbv}{==e%Lh(G}n}sO_ zAOP=x32Ixa#R}{o!&g5{YEF0p!Edxf(7_WW|KJC2AWKc|6=X6?dxm-WfZ-A|f&dF* zB3ephH(!ke3`?q4@m&ALuLDLMfM(Y2d{7R9M<(TPB(1wD?h<`T_H-66Z;0fw||`Y~Xdo0ba)l%*CB) zgC!9}W9ffpj4=`#ur)A;LQJ+j`abh}ML#W!+Ev?0w{3JsVMDy!WKL?`2A8mxv6YDcu+bxg232U*)l3#7lG8-l-I z)3?vVgd089ZFJFDDA?N@9XZbg^Yah!>FF>!KR3ai zOt*yF7=E}DF9+<%$U!4yR5W_GlN8*cAuT(E?D#qtM%T@T3f4!nSKf9JGc%rzoCIr*{2(WDpZ~sG?L<1`AzT(2f3KcP|_N-FK zRtS;!b%4Y7(VYwFFZLRoM2iMrmPL3xx#cZ^q$BbjRwCf)2N!S{e*5`jK$+0z7FdD# zYEys!I{mwUwJ4~`c9G|l;k|T)8ySlo@2 zdqZNGK>`3-WGgs0P)mg-JS4W_PqJh|ls8M&)g1pO)*9i&0M`_-$}mOpJwUO zYR+Kbo6!EJnJ%U){gbeHXanQG1s%;^6O{54-%W_Y5EFWidZ*@Cx74L29fcebGHRI^ z7eG_kVV#2O1b%h2Ik4pcLuxZ~s@A0Wbjp{{&_Ohw{xsN=@pMw=CA#cqS}4lNR|Xq4 zlb7X(v5Q-?Cmy)n>6xA$py~HVXI8yVq_+KU)KAmgR6A?SqG`d*i#JwAXL;4%Nn(Y4 zsDU_1(r|Mb$Ou8S7#Q-w3KBO`lRrRtS;40?LKnBXR5*NBS2-{HrarYMzsQche_`IE zrBGaSbh54ZsvayaJ~%bGiSb9xf@Tba){O_;()I$@iDI(R;=f9PXZ1#j1N8(*?%{6t z(!wHD$F>1v(t?+4A>d9wkp~nycFPHxP$F*pedM7kuP8vZVQ4S@tqTw1dVfywC0TN^ z-vSb>EHnAZG#R}ZxLg6Ks?XzDZztb(uc4~gguC{zsQ)@rfbi+X7O<-P!KCnYo!kE! zZFqtJ-@hlj>q&}-94)@zj&@q)f{!b$^1wXo3 zDb9eEEY{b!rAOKi`h%*3$xf2$6zv_Za&@)m!lS;@g=;RoQnpR*IC0)QV~(?Qj)9x1 z{W2v{o?%v6zo;w-7^9zhGI9s^z_$Khe>vn+dPyi$SNjO>{2S5elin-8zB4I5BazRpdBN!t96WD%2 zth~QIV!V7$LKhVoDOtjqCn54cdws-OYs<2uK=wt(&!<2+vv2)jHK&EXGYngRRz5T1 zOeIpX-^F}DSmLAQKlR5| zA``Egs+z-+_NgQ>Ahs84`&D5)fQ0E*yXCltRNX{`pKv0gEu%nKS_mJ{&`_t4u>L5r zz7C2|P};rFT$A#JQ`@$Y?*Ha5W;-ICcMJ44<$jWD*Q#X8)6|;&A$b&y1y;<7268vR zbH0QD1ba=y7#Eaj@8M9q<*o{P21Y3Wsf7= zbh)t{!IxPk9fSApaun&5*EA2=X4g%Mt6lj00yonCI*zpdv!(w6(7oad$|kia%YOm( zkcN(92nhA7j4}|jR??rmg{CDZzfH3hfZhTbqmlhjB=GtB_wU<*_a}&x7MrjgOTrQ_ z+SnhPoTVKBNIwMKw~$AN!Xw0F+0KHTd)Loin#hWZwg4_iw|N<_L02)^>D^Px&k`Mx zHXH`I2&yEyhdX() zD{eFV1&Mm?Gf&sdlFB6SzhYX!2l!SfKfLKGI#@}`kiad8I#`7JwQ)~$6*0`pMck1T z4IY5wHM#5s0lDKSHv2oW#v^J4wy?@(86;H89ZHP&oz(8`?&L%|C9`l9cl-;BSC6>+ z_O-@Oxcll4R&GFm*S1t^IT;Hi3|tN$RRH@wU8U0daCCB@5>Ri@0nemaEeV3Dfj1H8 zUw)|DQFf$20Y($*K*A2TA7zqj)vE<|lRglUajQuH zLsAZfx25BfX9SyJxB&^OhMt=MZ8$0Htg|e7fHql`#J)u6{YJ1I>H0G*fFFMF9?9hI ze3f}9;kv4pye3O2{mFr?J40B6_>AER9DZQIZ@8O%W7nQqP9_8D{oI393qDyjc&is6 z`mG@f$;1gEY09s}_IIGR;@_M_Up?sCCp}#jyC-KWRg@-|yWi#h-}v1TcBTX_f2~~! zeq-k+{*pP9o#EJT$t<;>b6AG$4yA^=^u|Z3Ef=9N}2zc zfs^n~Q3h0IQ3I4o18awa{GC^)oWcLvL?n1tUAy^-m?Ld^nwxI{@;joEFQ;Vv0C4z;6PGv?5IR!GC_Ls%-gkS+MB*2HLhQH*0NQsgWXP zFhU0G=d0fWv~;F#`41l(teBu__!{I~;mDSz<TUpghnN)G&K1Nzx+P;IJ zcBZ@%3Lro5xAfb-EV!O@Xndk=m)O{!`Ke)2M&je@%BS7*$#u+yRubOF7g(o_NcnF@ zOKGZLiktv!vWY`*ff{N5zt#Sk`#vBpk~Vn?FvBVG&4P8*zP#Vp+wTU%5^UGlpD#nP zfcKuJ*fg(amEVOTc6;kh1pBuNqmaeB}jkVp+=8I-*^;<>R}j-Ls`t}L}}2(%yX zF&5=wiPrdb_Wh>B`2abAzrWiyrukaKpFIDn9}5!W`bEZT<bxeM%(6w?zJlcPA{2VG^Ci^Bi`O|O9nY-T`+wyBSci^2H;%c7D0mm1^Q^RvO5?s4A=q=?RH0m4ufv3a+XfFYz z*Sr2tvb8H84(9S04_rdd!Y|v_hb!#lm z1;MDdKG9$2V6%0$i`feR`us%z4)!j1tRGcwD+PxFD;*J)kXef+&h<3}pSAOER0s|= zT<5>paFt^bXW&j?CC%7L?ZzLyjhkyf(C_%H}tuOhZc(K9-*#_E}ju07y(0J;aMtvAF--kliQ)=E;va zKId{(Isfdk9~rUO0A%0mP)fS4;75h!3SY+|F+Nc1E%uCXJcymak1jNEaY_64Dg>y{4*@xq$jpY`^Ew@yNz6K zPuHk^MU9ZF*;4%oZU?wkZ-e7vOkFr8C8FPx(Nj}n#R|C~AY=DQYI-7(``&;0v091n z{QExXjUM1C?Q1&uN&MSz+cSt;UFTz{|C2WZ&`SkFNXgI=KX~0Hcr#S>FLT4auC4ry z=)Uy8b-hXIHhd*R%*7k53;?`VeAw+;kHv9gxJ5*;`Os@BXs*FSbX1y@s)VOm0@v?DsMGS2jhtRYs8vixG`R^qfr5Xc?UbKgR&}^>;pG? zV2IG*&PB3^CTnqY6CzM#LRaqvj+Eao&x`FaizFJ^wD@>Rs7R>LBB0uNfHu2|-hDq5 zc>U>Xu*30E!{<61;yw|;cQL)DIgm&J^!!X$zuTx315xU0KYO^eJ=v-e9?SIa`{#Nc zpx;`R1qa00&08S78ZU0l6<+u?jY?BQ+1hJBgPjgb3Va1lof)S({WPuhyea0OOc-oB z`cukQll^;?ld`7;-Tu2MT!Un0PBbq#S2)s()3h!&f{W7xy$qYIx2n&ys|7RIV_@w{&vjqa| zK2MWlAFxd$T~zgwzq*l+<*kxu!1TGh0Y*N><>c5S#C{xiRZsIheFaevMsB^WW!sL~ zna#$=N7O&d_cu&x&Q&&sGtL~4Zdyf)v-qIhgaI|m63MU_JVU?aGRl%^p2j%c`xP5+ zGNJ6rec8I5pph0dDS6OduE)Az|D8k8_w-h1Cj2oN3)-Y@m8~H7U-9)bysIoGJWP+r z9;mcVJpsqHa2)dB|65UwgIg3Pg53m0{9E@qI*eMX<)ic z_IG7gh#AT)&A`wW;WR*fYJ2v-ZbcZ0`EK*_wc*Kb^#e~vHWUIaDGiU41fxM91o(e~ z?lmhRx*h0<@b9F~UTvyYy?hdg&!;C6fYH>}E^~e4?YFC26}fn6*%|ukZFam=%{;%H zd57zEv+|X5r+H^6(|KjbH~Z$;n%(b_NWHr)+Y@Q^`B~V8B8UCFt#^;SUlJXIFf$-$ z`JA~9Or?DE&HV|<-+#C5(7nRg9|WuRKS-_DjoFA5&J^_Z70}abC7E4yqHsI0G=}8) zRyJ@722Kd^SUy@j?k=zzT%*aXx3&qzbV>!!qnd zSJOkQB~}q$O5}8k6-uJxyPY^EhJh>WLvVTi?)mVI zCC$w-)Mt1wyzPv1sIFy*Zn$EQJG=P>M?nO0jsF5Si~Ut=HG05G@>l%zMc#s)Uprv^ zGdyqR*%6bMb)pe(Tyr+AOTCC8?-v9~#$brsGO52Zf z*?dYh)WV$dgxt1)f&eMhQZ>K|^wrS!b?qR9os%*-fhQiJ=paN6EznvS1_6^tTd`$U zuzh^IFA88P2z-7G0?23T8XBB&u>={~^>(hC5El&%5Ns3E_i`MVQ4_@~-~=An!3b~w z?%7=b+Rv}Unseidq#xe0f4^hfzwi$tSijr-==}y)`-L>&jegL4!{Uf8FJhxXw_2c7 zDG{O^B=|pkjxweFkV?UDQ~R@{t0P)LAVGVTO3pj9+i+)Z;0SK2Xr@^ z+VUqp$WR11&pG&~*p1BJC4>XbV#4esxD7M7-LxZA6pEkdkwfPVtC0DpLR5q$Y7->g42^B_>Ve>-5pD z*VYd6?tUW#2zsE&XAr8?78)o^paE`H{{~4x)P|#m`D$`xyTxOFPovUjOUq`V8e>`5 zajXFmqOLAUEa-fkS>VuP>8zsrDMsyGu)$dD+xjOs9Fgm#J|vVokSfTqzd%3B1H#lk zGhZCo*S#@z+F{>CSPHYW4I}QUu#|PJH}0)y!=zqG&WOyHE&9rcLVMX*MX!D8C>fK9 zBK#5gOJJOf`ykNMm|aZSVo%tprxTe?m=ho!EzY__U3BxkOy&=YNNBYtokV>*|GU_| z@^NmpY)eR$^&5egE4KBDw!Wkp*dv|y4hlTI=!1`1>j~y9<3L_K4HqMV?5|(>M^#~C zPourWi{oS${i#>9-$m}^rm`=@EZ{^1vi-@K-B&Sa@E({yyn=(7*$5}XF%!VzV#WIE zG7_>vx=RRym0QC|g~Vt3K$HxiKF}Ia4IUliDnEiopT)Zt`R!|1P2zVJ8tDjMS3E$X7*&%JFL0D@7(dayWde zRtQz1BGh8aB<-t>qC$2WTg36SQo&BhOR%&p1a0c6q)fN@^?o$2EgZ&_tenCT?(z!m z)Nh>twt#^Frr@~Ge!w}qNb`!R_fUGb0YkV4&sD{G#YGMsv za@h5M#CZ1BBeZW3^u@EYoP**evj())2DGKK3Yc=491NJ^Ou;DtF&jP?2`c+e_6{U| zo;OBvCP8rz-X6|KMF0=jzCI8>p9Vu^QP@%CN`pYWS`sV`8zcB?P2r)bXgktM9b~Uo^cY&eSkXT|> z%7<(B#-`VcCryZE%}ui)N^8B}q}(};1bJwaM?~+P9IYh74R1J!hy(ASXt|TzF3pwr zy7DK^@XiWfQJ|l&_FHesU~~#wem0GvazRcF^6<#S4Pv#FiQ)%c{*t4UF9GDam+wiN zaYnsa_uIVqha@v~-z-ic3jdYyILGfn9x6K9mu~o~ql^ zK4PNH2n?%4Vbj+7I($vYsAUFDfd_w#;~6gH>TMh)?BFpWhrgkheHdV@aA89=ou)fG zCY1OLc#;0b3wvMB;T4GFocs#GAoPR6!Jho*Wd175`xhLZ;PKckdF%iYSF2o;@8tH@meVYgsUeNAa_II4ff7TWFh<63OWWBS3JGQ_psa9d6R$bA-A@~TDctcpCs#21 zmnlzEr5L6ujP20N2HUHTmN-<|63`00uPLYRStgdf4Qaf8kJJV40c45rjd$rZy(3VM zAs371TpE5W@e9jvd+%4eqmQI!y>@~)`6M_G54J82E3qqy?_U0%9(W^zr6q1RWx~Zg z@U_D~(xk@$fYQ9QUUWDZKEL0?QGE^4yWuXEpBkVqnBW0LI#0imUdYs=ijuOV+cO~o zx)Uky+v@GPrDM3wi1TiDr@IiRO@1gTdE=giwm)3cM-VPAMDx9(Xg$_uo44^p!f0}V zHPc38M_nsO{_Sd8YOJgNe!>ZXo-5O92$L(R*Ycw8YGCE3yfdZ&RwT(`cf~4!?WQ(* zC27V#&VQ#G4a*s@6@sM;5f4szWl(&N==Q6WM=-32%H z6(e&-?57ppCSuqnS$|@}J!1JA6m&@Qt!mV1@@URzz)#!7^s`dd<@Py;CEY%{@6HLvVMWf z82o%X$YU7g^5JfRT&K z^(J3z2xEAVdcG;8&jBOFpHd97f_x#X^1(Z+l!3Q$YUxc&)(U$L6B%E9kOtC4Ea54jg3g0E|h z9_$~G!Reua=QzFyTbxSf=UIr)^ z3QNaHrg&lq`t>SrPbdf~`K)=Mvpp&M%U;T-Yf$!wKeF_J`ZJy(|3Ok$5NmMA#x#t< ziBI}FxI~on*^v`W;?C#u>D6BhjbJKA#6%Hm;WEU7EroFw{2~bhgGOUsjw)HH--((Lu8*mskBQ8Dmca`f&@lcuI&mG@hr>sSnAH zVC{C2v|1t+JnJrdQq+J`Rf?~%HvoB$K{j+-(rG0Q5uZ%Y)51aoKbMOA8Ypt)jO#FM zOV$q|C4Z7N;+l=5LRq8iLjgxxM+TzUfmtbxSt_Q8cI6UQQ=p3mLA_U~y41;+EVl+@ zhy`&oW#SuxC1J%GtG$USSPjN5*n0DM7T-Jc);Qf1CCc##dHati#~^Lf@wT;~p9w?U zrWz9gu29^yswo2oJ@C04f%ip0#W0Z&`tg2uToT%O73L*PT3teUIxg=G@sNa?}&=XBZCz=mJRnldPnzkOC5rKyhvKZO4 zr_97OgYt|&7^Gv~3R&HoWS%{H@;#?nrg2!3KKeyxz_}#}emY^_g`8@SZ66=xHmQo3~dOl97f9$VKD1?pCa z24A?E{(+XB}MB3hd z_q8<(f)}4$FgA6v`0$Qs?EXz#4lcvO%LT<@)5*;b=7)#BpfxX=L^QVpaqmzcP~NPL zLMtI_go-1MBk*`63{V9|0=}>a6#=DLSKxe(wJU?xK*ZIee^4V-h#@p6bnGOs?h*se zO2PzKXA~(+a?5u;f{q9nUrOp_u@uDwcZ&-JPPBAgUov6q@r9>L%8E=t+%$gctC6q@ zDs)~obGSbkZ%RLt z{mv^sX6nf(u5!FnvrkC8wb5JxqLN`pUcHv>Ph zc1VeWTXii*yC3?-&LB$B9b253sc96DFrn-INevV7ddSI8PAU>e zh~C1-di^V3Ofa0$HvUe(zxLB%+GkzUh;}S?P3;{oIInf}p`HYzb|ZYWasx%2He4(B0^ABjf^ z2h>>L?wL9GVU^N)~p}R&``mYFCF=T&B8W}vB@$OTZGx^ zli)h<bVTmV|77;7!*53S$?&zU3Yjv$yGoKa8+Eds2z zb?AL`k3;V=PJyGbbI!2j4OW=khsd%+FwyMz{81W8gxroXp1VQ2p|=e0LlbY9g+3pt zBv&WGdWr9{Fgs1+rm6$^rLU(ZtOldMAg-V7TE7%Um*NWydb9D}GheqT1?qRfmv3rF z%FzH9rj!xxXdEu}F;v+5#&Gu7_j8jSXWj8!l!s7+1(%LjN7tjmjQd#bgbC(F3~A}~ zw_34hNKe*{1nf=Bx3Pb!ZWKxs8-95N$M4kyaNP}H6}s7UXE(JD7s-BjB~2B&Q1J*FFEG0xRKlGP50XRlz3@6PAcdeB{OzjiJl$mgi&0R-ed+ z)Dz_E3KefQ()Ivv$RmT^Gv0kPkbM%l&YPyP(~1nQZYFL#SsexN-8}Nu2`{E1>jm%c39xU!K`O~81kd;Q3%u1#7oE9*a0o=@oPxniC~Fw zgY`8hc@qzI)GfDu)@(l@JhkM#FlL*VDDTqOi~YM>imDcE=!qt!CW?Ypo|>h|+94cX z;ZG3JvlBmmW5>g~Y(V56p4^|}$%I4EUx}Qj5gpX##sQybM#bkQ@c2uWiP%>DA$>YW z-rR(G?9Rlp&?uTL?Rd$S9qHz*Kk5plEhZKhr_|nl^#b&n@t~3Ro2SY8S+wDMdRlk3 zSJ3x%wOoy>Uhq}PIH2Y7fMN$S=dd{CZ3yv@7w>a<^>n>U&P4k9a@J0+z5 z&N{tJG$uH5^^cJ%8)|=l4KPgmn@Ao)WdRs5+XMZ{AI)kKnjmx1QQ^(NMk311w+FP^8mw#z zk>WME>fdbT_5b!6tB}7OuP#To2Kmm1mDDetse8Ra7k;2orQ_N7Q~q;A8PJ%N3HZPS zY+!|BN%Psd#{)qsM#0`;|K-E}=7kgjY<%13`a6sK16wB~no*iJIS!=Y;AD2mMfvJ4^E7tYlQcQ90d>hI}y}*a_UZeC&y?#?l4U@ zR-ocnYL>sHBr5TkY@VlLCq`u_d%}@`G5zj)+RMjHRj$Pw_BbVbqNw}9Rt$fsw-aQx zb5DsB9dk{oRrpUEJ;sM$>c#1PwR+&V>9}(v;85<5N@JL@<0q zI&!Ug;%@k|6TE`MFX*d3VmY+xm5SaWub3;M?ns^tnAsbb4QM6>fmz1c{g2;KL7vK_N6k#od4>%tc z(C3B*G&WN{6mgWKN#cCeZHiy2CzEz(L_qtHC^Itl1zCaRM~-yOLEawf%m*=(&Z;pV zO7DUWx=^kJZ=U=MQTI-ZdH4^jZC;B{Hu;S{e4pFl(Ny=M6F$Gee%kt8074bL8o%Rn z9Er!AqYj7-GNGRf1&KTT-E<}z3rhT%7h)zOgJRdXM+<(_h7a^j6dkk>^eBeO`61_B zaj>F3pYhhe0+9~=OwiP}i|ZP8aq5G+Ecm#dEzVMtj@p5 zK@IuqzPbN*qW&GI_s8Ngvok>e_K?|!42XFHlo1sM|EAJU18Tw}ixalEV>W%_Gi}=- z4DHoi;{-BlqFnJk7Z{Yc?`#^Fz-&-1rIsF@z+9}jq(t!7Pv}+Nc$m?8SSl3bj5NP= zBx~;M6er$pG4Q-VN#==o^)G*=tNtpDv{W4QH>toDXYI_aG{?w%Fdo|#BO!K zcgb;)=N!7`*+nEDK*8l07*O`#!T}Qrhu#^uzpVGl{?zIi_~Q4MDf)Tog-w}bx|&e1 z&6htFXPRru=Pas(&s5~0=_tZK_bJwY;lvY#?1Ld*!2!{r(ooG^D4ub&OhI(=$@RCs zXWSmGlVdZHG{6A8WCm^wR#^&UD8!S>rJ9xk0TTD>i9SEjTv&q-oqGw>0i>OJ!#4Ri zIPnDHx6FEQV7t}U<-p=53MTl|KHT?CR!YKG_=94yvyn(uIt@mkydgz=)+s-BR3vE0 z!&~K1qjKC|jX$v0s${5?r$Ngy)vtVtj0K$|J|51-%U$OJqdB@)JrH|ZkAy;Xn@^>9 z4*YI9pBW&%6_P6SjW}LX!jBuVVlMX&f8TJwezqVU;#v!tw-A)UlH*-0EM-KXPL?cg zO5Qq=cRvb=Kdk#4z|Uzh|C?sun9VKgF*Q$vSAm6~Py-CW9gH;!QYl z(mDb+9jxGX9dJ1)=Ae3wUDbmJyqOk7!MS(T`4PaSkSSa{226+{D8eUZ2@qPljL(vU zhZOSH$90!96BRpobwNzx16tX9#w9@dut9t++*u=*8kGDNs*5?oPT+-tw~WaQC>ajdjStyIbr<)0Bz}kZ2VS!@44jj<#CnHpp6YQf ztYkX_5Dc8kc+G@{XfBmvjNBuvxgF1+OZ7+r6!Ww!4dXU1kx)vzQ5)~y)96F7`h$A!|Kwfw{1PTVLBZirGOc`Ev2_v;LHzt=CXawL3}?H*@VZ5i>)gk!5ple-{&Uo?_;F4GgZQ>1AtF^+%KqO zfb!2q18@wP;LLRx>Ptk1m~5a44ZGKb936XDfdL!e%Kb-d@$)8yOul%e@OW_~q||X& zc!JYo zD)O8<_@VDQA`dm&@E-g;sV^J7Bo*~w)%2S=md{XhIXgS;_5#zO*GAb_7J(UY9L|HVhM!EQ96crIcx844~jcQ?T~{uiaRs} zv7TkQ?HS?x?JCt0&e%8^OpG4lj#t85WH=uz3%z~}sm@R@XV3}uT5eYt&))bp&??bI zRON;-e%+*p>tVvpgS_W3GkMdfAr#cDEpJ$y_*On0^T{#K$|IM_K;|nkaw5^E-qRW= z0YnJt!i*wBnSKzsr-A4WXlTrq*t%2Rgy3U}$79T45k<8vgA5(ZfQ?p9BkjuAC)PUh zRbPp~a5Eq+BT(%zTVeyVKB>6IRI_qaeqqA*IM5DPKdR5burAcij-L?n6~p3OX^A7l z=I0>wEA2jPJE?%YeDGLCD_%g3#f$R6&EW($A!%x_dn=E(aN8dzIkS#W_R!Wi-x`qD z@n`4SKU!U-kHIa(<@-9OaHfF>#&Bp5CNc2@A2N>MF$~f|{;ZjZCby%`e^o({`1>RA zoWTRBwIBF+=D_{Hfd(lgeeaTG1SU_5cT`@TPVbe|Q$uPXpQ1MG#;wK+XVBJjCMG~32U$83a(j(Nq`8?+$gK@ng z(eUJP{JD!u`69$x#cwDA^ReK@XD8Bh*KaSUbsc5IFBb+a!L6YNeF0JwQzvJECBAd6}bMIZhbJtdHW-NG6FJ%rFET5U18nc zH=w7Ne-7BY0jGyR56A1G$x)FLtmv^(?b5*uO#`5GU0)7ta*nk$nuQ-j|CXMd=PNDq z0M$;h0T>T@JH$D<34)#H2NL`~n62mqL`I_TtdnlbQ5bHv zwq-XBQVmo;#}ZZ{CJI9f(Vxe|s61}PVRXYm71ikJ1P0FdIkwFdGRwWcUO1PJWb14t zzF+AQ^(z+ZGZVRL_A0f0M6Q{BVqK(_w-Aw}88|kCB;tI1n`g zXZt_jrE!{L%O6qAM0TF6v!sGL&o+8%xR`6P4|jJZIle-blrY^_E>NXuf-3{&0!cDZ zdf=-Q)H$RYrl#_k*j$)$@4C`_I+VaAUx%(ge3hhIc^WK|b>-n)Edrr7bX$lL!;sRM zvtLch7OV#is`x#^52_5nwYIdiz?EK=d5|#POWx#dmx)5>^JJVMO0#2E*Nmu2{G`tV zRu&x~<7*Wy`gC*pUx|H$@-(puN_1|^_qs$)?)?3jTU#a1mxL;Aoi>OAjA=@OlanDo zXZ6G%^j{EbYF?cJUWkc7WxpjfrUJFW37PS;Z=zz~9*RD);h|Y1zdm$x5n(6dZX10? zL9`nW1?3TIk8aD>h0s?zp2DN;W5l|itinz*EVlK^G8Xl#X1 zM%Lc;xhnl4E^h888vwPn3L$_5`d;S7Ns>qvq9Ic*w+~YlqC`POA_J()^%IDSNMUvn z<3Kp1;YWL>`Qi-rBT6Tyx5!~4{t}$q>VPC(fMZ;p=vA_$2p!f7e=J8Fu3)zu?%vkG z_1?+pw%D7vW0e$j2I8*Nr*1j@lfQ@xU;G>!El5J6WH4xq z3;l5re&T}x)V%Pd7v1bQknpgLDx$~o=bK;%W8LIx{Ar=)qJnRwW5ppvP$^G-03b8G zEfsl8OOSWC8-IcP@nzDJhW$NgE#a;F+^QZw>Yt!FEbxFBPiN$a0XY^)B2g9~y@kM| zhV6VVxLeTRC-Dks-&mVR{$ybZ=|v!5sK<;#QWhU! zAiGeiq1la{OUo_CdPRkiEs2f3g+4J1A4a`_dEAh;{o%X=4DDMr)!`oh5RHc^UhO3E z-;Q0{IQvax`I;jLeuDpRh5Nj(d=nE?FM8PM{Ns_pcqM=Z;+2xn z8i3g`6CdlWtE!4;N8NLu&tvdQ-I4|{lv}C>yRI$f;1N8KA*+xT=IMAI${=w51C*E5 zZu6&YRR4y5HZVv>qn-~jai%sZdkL9J*@AK)4-@`vh%DT!MOe=BaWvcNrY3>(hgp$a zHuj(Ll7^ga@}JH|hg9T~pN8-~#NQcZ#*!T<9TX@uzxsMiP`KbuwY-c@JuW4i|0mmI z4*=+2^N(#aDwE@Uy42u-2w3v?#G{+>n$e{jFo=IMCTvW3!RnuWS@#{jHxgA>S+<(f z4){V0Vo3IPn7an9Cf55oA6j-2)LSy3{L`ong4O;_B21gINME&hE^H3D17h>>FoJiI zTR%Qm1!b{r8`THDf6idJK*~RrDy}Alp+iWsyS`jmLb#$$hQq#PeJZ~RM*0y#vqi4f z!T!*(vQO}D8$Z=Tk)MBlXfXmObngN@xH&-<3Mf6m)6VhbS$SBwS->mMI~1$(O9Hwy zu?zjtA&2HS-v_6(bAQm9S?44Yeg!>D&x24MW0wJE0-8HZwu_J zrM79~SJ|4D$g`pg1fAk!sFTlw%)Fy3d!7J@H5 z{Eb!oj~tyC4pQEotDV@#7umPt&p9voM>zgw2Ac-b6;@`XUitAzogTPRn=uK*Fs@z> zRZl)kq<@!fH~FOzIPyS>m;)*+LXLh~M`TtKFTSEbfQ_;O-wn~J zw_E0gb|pF^f+BAIjKDmb9TeMg zj$-m#@IB>r4!7rRzU%3S?2ta(Z&YmCY`1dxEPuWR%rLE!SP=X!A!hq%S=e+9srrVt zH?qu>lRHv4#CO{Vt%56k3ZytFnu3}oB@}AU*WL-SQmWd$hOm!*m_M610U|88l${C2 z$l9cbQs>ZYBxK)ac}(1_*8F;V-!Bu=?5 z02v{0lf}i&ez1S`;AcJP9C+rgv-)-bcqh%kh`<38GMF||?w}>jRK4km$^}a<`W^C` zGC4bn*fNu{#1@4R>b(~cx60%bk#|qMisP=F(Cd%Ny)pjFf!Dk#)tUZAPjVp1yK!@a zp|9Pf1^Cz^g^k*kPb;iW0m?UGHyH5HlfUSTCr3E>`>!-J;fxX1P;FeJT-u_|Zfm*g@- zvyVfoKTv|^o)!h;J?{7!Lz1QfXIu}xF!%~`3V!}Z-s&Ysx%IWsy+;*z?i6e5>!&Mt z9@MWhRcV_25qf+<>9vWwRBuZ%=en2`-c}c>yC^81EK-RIxqO>J1eFa7uH1Ong9VO! zb_j-XKs^A>K9ELY8IJF2O1KVAehkrtYDZn!CeT=dZ1)!4J%yZDPzst;1q(zv0 z0YZojUi&&?*s*gn5iIbWf$gCalIhtB42kI)E;rTRwf|Y)Z-=;5ZSjNKBO3Uokv{A9fL#ve0iBPO8j z8TFR>lg+tdTCUV5cT5Dw3kCGA9)c6g55HY3X7z|liCA+?F$z{ z?(X;w_ulUptobo(%~|i+@80{V&r{5=44C(J!j2rZ1IV1bNm_epLdD*^4N5Ait!fXh zgagoNvt^dzWALY%&%w{jii$cA*uMif=a_cDLLzHa=P;aS*btP}TTXwcyJ*!U4q6>K zbS1D#`HF3&TilO>kD*n_-OxYFSy)}P38{w%!ltwo1dpVz`=xnAOJgEUmKWX`<*t34 ze}BpoC{5+NUE_Ms)Bpa5Ql|S7H~Nm0@s+t#+X;cD#oq4@kNowMQnG;1>Nfu>QU-^W z$iC25V<&?KW7YdKhqf28s;2a71#gaw)zj?3Fo)c34BqkCv%QzHrTXBZBl#4mAOB`g zNZgl{OLUS)A4K*a7Hr4PG8oW*`mY^Kt9aeghBt0ImZVqyshxFPi1PV{AT1biyH_SL zHzvbF*f?zP zj8V(~Uaxb`(FxElmFYD)G3kF>MMmKq_gfPo>HPqrj!O#U?((H<_W?uh{w@<)L~mhD zJV4Zy4a3E~UD;gh8i-{~Dd~LF_ms|?Z%DrHWta(|zxEz2lhjZ6E^MR~6%=CxN+&Ay zv7IFF$JT|9UYo3xmj(O`2%+lCk(KmeheZ|aAnBO9%}0NBCoZf@>+KdQ@$mJm@9VHL zt6P4JRMeAYz57vR&4eL^(@%Ym$m#6`K1r!==8bP1{a%M5-PE7Iy0GTGhE$*aj!Ab6 z>`} z!@{hTce|DIe4A!8u6uiwG4O_BiPZ$V`wivbbhtVPL< z@uN6zU`Z1G+n5?|r}!_@$VgSAZ`BH1W|`HI`PQ8Bv2}HUTjR{g2COJi;fC-k-5pU@ zJAx?-*WUM``eW_+`%IjDp2svSO1y!QBN>;8f!VubyhE0awKSqWziKpxICm1d5n4yd z0aeGAm2Ve5T=>E`6E%8=d@z>Md zY!;8Q_9?VRnva{0_9%7FTG`e%Mgq_A^8SXhJ5e}ofVyTRJ6rMkk8=ADmNK96A~I=Z z;$&|(jPaDxk4=q%mGw)3D+Pkz@7piQZ6zBkLzejM&Q*VW`-dY2H!sRVUTE_|7P6=~ zW#bA_HHLn5*}_zHF<3{0ENua!*NshC!x}oOpUSmL_iG0j-zr5MS>U~3Rd+$z-hjnO zdP_l7)psGU$uSEIMtH@@Px1x~a&q#g`pU|a;x8yPY<%@L3!7Rc=s~$aF<jGZEJ^b{ z{?WA(rjD5Wn-ZTpt_Gf+*n}g?XA2uiiK4A_6@VVCCy(!YH&dBeM=6qd5QEu1qP3Xg zi3bf!7t;t?VS;`}lv* zG(n6<=mmdutIeGPci^y@3*FQ?g@p*Z11TGa3=9l}>`pCKz%N%G$V4^bEYRgd4GIZ2DxlVU zO%@o5j0F4k7wcH&vyqO#lL84lH2PyE5+)u<#zWL?jJqIu0DkMa{l$aOohk+_e#lW% zyYlf+9&kddnMYAKuzM+vkNxikSx!lmRN@Z5P3(RuKNC4vGWy-GjchX@_}+B9;OTM% zmx3pKdE!Xo&YMc2=i#YGjjT`q^R38f`jydSep|npf}HUr73@rppXO$`$k$VXsd|^a zg~E(sFtE(Z(sTQ0``fjc$d=0Cq8$mow=4fSJfo7N-g8TbM98JmVwvCm?W<*Hp>VC# zrK=?lPb_m6Ydf$w3u=~T&f*V5WZjW8A%2;dz6cZOT@)u^Q_>g;0Q<))N~Nzhjc`lo zK;nXl9&h9PqRVLDcGD%=Ko zg=Q!NiTQi%)*o`)8nC$QaC|Af15n6SzEXyqrTXvz%|f$GQc+7)dv67dPbDg$DHW>} z`@d%~%hqQcEWRrFY&|nJI%-%f(16%oFoZz;_H2-c)GwMM?kzt{q5+YWz+9mmXmz&I zgj7X#PZ|Lp-#Md;8AY45rCQz>;d2LjAVX3%F!s?9Wk?4oimQR}WxiJin{rZNafl@2<*$I|lb-zmTW=3%g0LTRfy5B}2%|A;O)=54_8#dOvJR zUELFRRlP0+3Lbg`Mm+?L756HyE_IEZTrBqFZoV8fyznXdY@Tu;dW*}QQpX7&^}gm+ zXf)$eFoxFEn=HIc1b4rpq;F#|f$D&=j@{R-C~6}-IG+&_uy{H3i`xF@zh0(Cp^*!~dn4;- zAR7)aKA5%MTGlk=SwRY2cpx_e1I7m09FqL7?MHp~6t5$Gzhi$KEJ~QA?yS7N498$m zWw62eJy#yMdHt{!gQ^Pyr7b1S}bV#?vm_ zCwEeE?xGz^Z33?9jZ-Hpj7*c=pMyJD@PwP{wmO!Uld$_^p7SiflL@ zjFAU8w4e0x!xWPxLS8e{OYgYd4u%QK&PV*!;W@U#1d zBcS1K=3`_9*3~Cim)X|SPc&Mv)UbaprnrVaYd}->L&p6XKcePfxk|S}(b*dlJSnLj zu5yI-GwCg6W*b5QcIbNb&0IO{l`8X231eeT+#XT zYpg~C4|v`;V}OP2?1o2#vkZqx4~amK9W0nbA1%^ z_X60+9W2!D3Wh(+{k8LpEDx45kP1B_7HCuD# zFtKkN@tWM1)XERBOBoG_&IJ^}VrMyUm>4hTLnac~pQ@m+kY=k~@YV>748837hUmQW zCxYC&&U`4@7LctxEnwX0r0xNhgKGRJ4gwh{At(&d|7eOleL#OV|c)yWD(xqbQeM%hHVbCfVZM_t#(8G>I zZr)DJ{4a)v1&p-OLv z+$t6+O|rf5o5;s52009CzHGMaWbv2nyB=%9n$Mok>GIV%83zZ(KU!nxFu)MRgUO!J zzAR4wiwpQFN+w~T(15*wn76N-kR=7Dx|j-(cqqk{F%EihKdbl>RRCpD5vX%jbX^?- zXn0GJ31Dxmo0K#@YOhe&!*+nmUe7@e(!0z<(sKEYm29R(XE;aJ5mJqrdU%`t>xH=KSiYzjs=8+9nm{Ocx z6sCXJzdm@$NeZ)!mlCTRW1jRrG~XUmWfi6Iu{;?n9zC5Q&&2KGj1@DzBn7atdPAok zBON4cowHq}L)>g)m~d)^bn;5eOj(Os0t&FIMG!9Aag1DTMWq@^t2)gldQSo zgwV*gI+9StoxksALa4?(%uoZT(g+iQ!!!ts2hx}Cv6qxZ4hExUuk_EG zs|esKe+U3SXk@g|c?a=q2Rp|EV&!0bmLvHY776Uv^5wh!(Z*OIcc?aUw24V6QijgXA4V13y zxWGBZi3CI|V~)OJ4WA}neP#1TJ*{ev1m?CK5r;B?t0Uh+hQIR;(y$#KcD11aoZ$BB(GQ)xt1ap&K+LTnDkZQfTbY{O&t49{z5=IVf3#@y7{ zCSkfJ+R|YQ>@+o^r}0N(WJ1aPvj3{Zl!GOTrpE`a^69vi;X>(`4@J%jk3YgCWOEZuW(-YB3zzt$V~cpCVT9+_in^NoiL z5o4N6GT2I1tg3u1BSO!1yushT?%`-~Ndk3h=jUwt4j7$xv;Lu4sC9Iy{7q7GL#`mF z&IwT@*`e3*@mXRuSVcn;rWeK9t4B@$}kI8f!)@}*Xk7B zZ(~Kw>Wpp1GlP7$zinvL{B`CZ)bdb4?SjdMyRBl;4=MhaY=i>2p?pbK*kzw8ULfiU z_Wyt_{>*P@{C|EsAmS8Y0f>4aaW_jKPhxenGm(m&A9lUshqD&1sc$r?%P*|?hM#H8 z=Hd2&&rijJooJH#mV;87nMFke`KLZARSQxJ_MxYp)H}=3DAA}s8*W1-5Pz=R(Bs!a z(W|0)hZ0n+8j4-$Blx$wMIU&yR z8dE^5=C5;*?E1|@8~X|C{*X^#Fi0101Xq1x=rRyaK=k>ZTk?~9TjvpETz(&-SZ5u6 z242qSxm;=Z5MC}`_uYOg>kFZKZ?b%{S;3VC+66vnHJ?K(c#bEZjsUYN;1wGslch8# zo*K3uN^IwD1AFE8!V)uTIES{3C*(QlGZVriSn4N`jAQ-62g(r;W`8kBT7jiN3 zs|GM*U>ac@e@cEb*r1~5e34i56VQ{b82OBY#7XakHh-9Knh%l$seLE*tN8Vcw43_v zM%;T67^4F;^mVqbxjG7jsUq9~h`Ng|YdNF*PO^l9DV`Vne*Ass)t!T(Yx+Q7jBq@< zlAK<-64@G2ru|3PdsNlCzZizTJon?mX|p$5EQWvFDU7Y1zF3})6$oFUTdqRzhEhgv z+u2|)_;+xy8|*H) zNF#Xc#v;plvu~76b$cDdVuqY^f{8xGCG+2M6m8|b>t*X|yLnku%#ZJna_>1eL-#V@ zdrAJVeB4o#wVfN>TWgfQW*Jg}P7!+{#51IIx2yg!SI8f&+;^>cYHI_B5ac&vW*Y!J z``k;cuZbru!vN!0zC6W@w7&(3}ww=|3+z)np(olzvEI?TipU^T#I+zJw z&~yvmSS|FuHLZ=Kf7=p`#^3)6E_++pr71$zp&CT3#e?lu5sv6_NpD0QyDj~*32SFq zPuAs7?A0_jPi##EM>3Q(bA;=Qwf}$#uUxw&HZ61g*q&;f4b9KWk{6D)uXMHI*sM1j z^-*?8mTf=@gsFr%Yk3YT<0vzdR0FW|X2{j;$GCrULCvq{4x_F6WAqDuRh6<{GAM>O z4#QSdx-coh-RxtAI-UuOx9E)qw>;s((tgZ8^4M^m5htx`bcM>0p!5^^>u(=Tvb(-O5wlecFRQKzfOW@))zLr2ob<)uA^ZaHKx?GchTK|GE(kdp8AXTD7nYc_ z@1Rbek+=AOTZAFD%xOk1lV100ap!C(?7G@r*4WAY3+S_4N5Ubsm8MPJgZi+3)UQ{p zoC;s%8u;HIdg`=#s?ktIK|H>q228v@kIK`Dxpc}V{e2mH*~+O5Dkmgiy~nL{KCM-q z?Y1&t^w6Ihc1FQjD5L+h%<2+!@A)CJ|F6}$n^Q?kk$W5ak?omqXIUlPZTcyWTf{`n z<13W|a#AA0a>NX(WP|Thxt?y!2@|l#?UYfvjZxZoPQgoVzKpc;DD<2v1bXE8u&%E> zDV(urD7>49mj&uAUwJ)p$X3b={D~l)vfVLXmLe3+uzv_IEiUUZjuA}pKn-WO8S;#( zxM!`Xm20IINKGml$sTXVJ|df5QIgo$EY1|3aRzt1UBt@?aJW-@0REo7WuA!ziK~5S z+^-s#T^yKdY3K|&UI_lB*?hOVw`Y?l1za;q>Av4?~;=3X> zb1JH@s}T>xv+)Hfjm(r;PE9v$Jo;o7l?yws{0Ej6f8?eCEQ>h~*(7}%w)A~>?TE@8 z9!u^M5}dEPB}dyDIexoexNWSH4Lh-9I4h!!h1Cv(Vl3x;owmM^^id9+3~-ohxcI22 z_We*C@28V?u%h*5m-!gHhkP7gj+Fr9b2IcH(GsQHzrXowoD9uC>l-Q=S|ktI|4DCU zLHez)GvKoO)7+Ag1(#Qe2tGUtlNqq>);4gTujmPx-G*E%Cn!6EHq;gZN)e~uIZ-a5ImXxP$q4#*LTj@V(zuan`+MUs_4$MRA0C^nEzY+Qr&7 zf z6T#%B7HmXwj2#L6}wo zi6Q}OfXWqmR8d5-U4w!PZ_R77VU6D6F&m@g5$^xh)lL$(1 zmA>y-V_(#!)Bw@NaSiMfrnqZ43{(6&0-=>BM-PXOXD)9gkWa<>v4Jy4jPa6uP3Kmw zHTIbb1+qaWaFh-Idq?u2d?6j{v-6Qvw^s-WdyTt=zC#qq=IZYR3*&qA{o$X)eQYci z%E?O~=kUCI1G-q^v69Wa$Y%aV*hZAPRj=5#MpfI(C35s#y7XRL6u4uryz}BfKrRq5 z&S1aO{^$kK*EsAsokwkKORO(4#$mgBifqYYfv0=uHkW?P3S}bQnC0EmcV1YoG$5`c z*r!QU9{6k3bO(kpE1oqZUdgtI10z-|a+L_9rd}8genJ=XmM0B`YdZGS_+ZdX790qyh=?%A4w41-7rir6QvpC~-MnGOOm+}a zf&chK8?ZQ!+W-WL`NS~Goijla|241^TyuO)i4)=na7eW9a@LIEi3RkP+;j-I;nCpN zziyPQ&68_K`&ZlKiuo@ch+@S>$azv($OSF@-c8>)31HM17Te!)AP!M&Vw5O^?g;J) zRw8*ew@xF>R*uH?8}Ge#UxTiE{>r_&+(Z;IPOIZ_ghFJ)s`0t{M`pKhHU5X`&&I8I zUx$!a*9FbRq`)PWjocB|wilW`uY6v|E;9|R#xA5Bu>M(Lap=9aPZ(pGi?j%Fs+9ko zJG4OCF2l|wL}vDWt6h_CJ^_E@UxMWgnp5kw5dF*}xh%sEdA0?3aBJ;LIfo=SzJNAJ zCL^Clq`5AJtA(hxMMHYQdpt07<`0nvs zX%SxG;y1fXY_=w1>dar%E?8fW9_`f?fm_x@Yc&x8)gn2PVuC7TvVYa z>r;lnEAsLJz^=ScAzZKE!en8*M*s{BTZ`cT+nYTOcoM8z>-=(fiAc}_>RkNY2vD%5 z3sh@WiQZhZ8kVCfR@^B6k9F16gYXNpQ`|Yf_5~NDCxUzng5o5k4J_MvhTn97q2q$X z2adRV!oYvEHDBoAoJk5*HJshl1Okv3cQB^t@1U2$>cf{mciu2%ojjDb@W-ipUW@b- zM(?Zn*zeme?u#Vy%wzaVaCRbmj?iL2Y~DX81(mM1R5ovMV@XDd5SsOHh!@!~%x7F9 z4=RKf-c(3{zER%s;cD$-3x3_lC#Ay$Roe9Oo8%hhevgyvM!>ATgV~Gn|Jd2!k43De zqq@cvkNrtk=Y@>-)UvE3K^s+C;_Z7CEzSCB3AH-N^x)etCx0~aWm_ct-&;^2aqkxP ze%*sj0$V)#@Ug37VKR0&GR0AuzOOZ+njfOQ@~<@k#yr$_?l7`lz2Fp}E0*P0`QD0; zDGr9ZrD+0m05_K~ZU`NX0oG6x5IALquJXZCUl>TDQkvi`wSp?zs}PieI%!6S019hc zeqmvVTsR(iG>Wi~hkp?UeDr~Oe7Q#JB>N35XY9#&kYq&2l>-;CF4*Ni1CU)kBBaY5!Pw@i|E$~s@pMzqkwUg zL(R!3cYaaC^N0?qg=>|Mx`&XQ@BUYKMKHU~@sFJPKdje>zC)wV$`6 zmmYaS;MJ2jb8M5czFWZ7ZW0$k=2(&an{Rd%b?@~>I?W_X5?#=2io|o8@K|#y`yj6^ z=j^~+V&-9Z#p2V}5#tE2%1Jtg%3bRSb)`GT*S{{LHN2=0vlK#fl#6)=^Q(TcL3N6a ze1q^6f4b<|d%niR2hk5+BCx42F~(&H?4p<6-c$K)VO2ZTW53o!x807h)0+mJXU)`( zkGD?>9((ySQM&&d5am;-k$#ILX=KqP~5SLu#DgQ6_vhsh=XO@Zx z;K80P&0tVF0bGBo^Di&C35=)!8?)D4?Ec;LiBU>OJHV=_U%61dKgN$Uwy)Xkb|;?& zZU;i~{~ywnt%5BM%#uQHes=;kG4#>LSwWPYR^=_5KpIvpiUDgQxU)Ho2F}I3ZB$F@ zpU_?Kkm(NRoeM}oSw7hU({t@IA?-F-%hE3qXATtO>~~Lc50v}6y&?MS`Z*n^VPO8Z zu0zdarJ8J&Iz*7DSR%`vu(3`{G!EfVz~;v?(H8;r*65>@gX;kWb9_AJXz6dAXu%3^ z6YOQQ^%WFNs$M4J$Q~|*MtU!Ts!cSNhJ)8u*hD2F>&_{Hq`uz}k=ydUTqcz2*V&_C zVis`$nNpsnpPJgpF!XPo`0h7j{uKiS$T(#ws*2dn>2X{&y;{B=oM*bS`A2z#PR)9u z$XhcqzzrcbJlxNL9^cuZWCddq!_xPUaZLg?`I998UBKCwUmHZPoL9}Ep*Qc5<{>CX zB7Hb>pIKi6NL|n+Os)1k5lIJ8v|kctzpL@a6-kHU2gUc#&Sa`Y+iBeeAP5s`*1n}v z`JCm0%(LWX7X@-Az_IkLyeh-$SI+zTqOmbu>kSg*hH0 zxvoiKM+vQ&E>#X6Qd1wZ<62s0L}E{E;uS^FF19>Se(It7>CbGyfIBakG}c@9U(Hi_FVvepCDb8!VuSSM4@2!U`Wi;e2p ztEVqPL?I4^S~IJEiyOs;C<4Qg+}&)RJ`0j=FEf<9i(jjt0R zk^X&i>YhAa7_+<)%2H+r@;_{+JfZxVfdJ@8I){gq>dLt=CBXiOyn(kL$xgU3+R(jkxpu)EG;iK8E0LA;;)shS8^_Kn{ z_cUc3JrOvkZPTwZg!6wRK0i^>?UqhEkbH+2+OzMsyv;VLT9}cC^Q=hG+PmX+&IHFd2bQ4T3Y|NfA;#>oev)%X2$837y+l-oaUnCxvCoK z!1PbPzgMl?LYrKmfW5WK)L#0rbSCK#p-u z0zeo#f4@#$1MYOE>JqZ5->?yx;(EKuIho`J0@bUe4t0T2d|D{hib@&J4 zNz&yS5`Uab_aSae5%gX5)m}s>cY;1gWV5>(`X(SV;o;|mS6Ez}&AL2&r+`-w*E^)j z`*cnbSeK0*v z&O$4*S}+da=fojj1|dVJC-EZ`=Hg@FOk& z2r-gHfW(u&u!shqHvzhr27r1EZ1wx2odN%k%7&M4yMY9@{dwa^gjFr91m%FNna(X^ zXn*O6Z@e`;n$0xSK2Y)#!t9#&mI1;=S+ftBd*0vpWe$w-4ZoKgXQ4BdlTBBL&1xg; z`fYzXLGN0u9?w$YUk+VQXHTSxRQN80A?gv89W=VXc$PxSG~VIrKJvF-@G_oU`*;e6 zHsSQK!7tt<&iftOPZ&g3@n1R1*yH(iK6tU3eJp;ar@n!abXbU1LLJR1jkc(Bk*0YW z`1tvSK;p?q>&-sEwVcZw{4A8#ON{}ujBW`jHIoMH?SRW@uB41aadYP*w5$ICv@k~rb}L0|br!;c#rzwwgk_P&{Oo@+bEE9+i4GtSlCn!_kD zF5cb03IGR)Z^XGpd2A6{Io2Im2SwN0w6ONnIk!@7ZV;mC+?tSUF60)yIokW8JKXEc zMc|llC)G-9Fd@wtTqOapOux`7Tvzoiqe0I}x4r(!IklY&S?(YySRJYDld3LX4I$+D z`src5?Qr<0fE@a3Tb6KA;`$x-91DM z3E*=gxvfJjTPym--b|vz6h#3oTs@5MiF(MJ*>((a^kwQT0CHPCgWRX-;+zmB&CL7Z zoYxtk;B5jsM6@4JxZR)HArDC}|2DRH^;hsm_d(5OZx#qg$BMbks%zmw=)Ytw(Vcqxs+1#w+y zznY0V8ZqWZ4^gT-+Vsrr3UUh$WqWHB zN@HYE^Em4Y5NseqUx*&co+A+BFi=xdGduRL<~mnEaWLats1lh8FCsVlOY4n!-8R9# z+guDi-wCj~K!IRL*|VS+eex_EeqI2PP+$Zr^nHko?D!SJtnuG>a}@BGidzhbEOYsV znfrUuVOeQEUlMQ+qIP1D9R(11nluK4e$&i|VPZ^i=0x8TKm^)P?Q{@zPiUfIKih{% zzi;_5(5Z)gI-FG&$^Q?9?{=K4!in_6gRDz!ro{sJ_S~sp|IhT`l>#PUcP=&4XhE_f zi7v3g^LON)XNg>2`t$NME87@CQ9rgQX~#U8?BSgMq4UVeijAVo#y*bN88UR?To6xa zx@zR0w%n-QfQM-8)7eUSN_XySp31NEb*0kQT@LDlBIK_zM7Daxeh^cyPrgBVMd5Qy zQ@v75HuNJ*dPIc&Yl)2ULosJ8S75S~MFy6EHu9i4!q`9Mpti3RYVP&4m&4pB>1LM) z($*JeqnOyK$+-oujRZR?z;O=?NqS2W~q`k<6;BppEr8buh`Ulwo4{5gL1a@PpGJ4 zrLTVgu()Ul7xvIFU-wLF;N(x2Z-!Ot-D@XjuWD3Cd_MKizP(_y+|aSkkObLYj`7u@Q6UAQN{S~_t(4Q*FeKkB~tP_+zxpZGF z&%GmH{sp^}=SZPF!F(nyuLV!cp#+e<()vVDnix`_c~H0z<9g-1?E}G-2%Tm@35-Wr zBVy^Y0Tvcsw!Jwo!;hMCr_~k`M#@evep@StiqH?Kd7KyV1o|MG!tDUF#<^5!Ln^TU zvxY=vSgcpSkigZtF9Mjb@p6y=55Z`nw5t0$a(X8o$h(+t;}5Dp4}AHqBT*NqHNNit)*a~KPKFzJz4wixz-9Y}^Zt;mde((sCUp*He2n@&vd z8c%)_+#P8lGMg~ZGP&U1_cG-=hXwbADK)PvAES27-enkMJxrlyqIOQ#qR>t#OD|=Y zOI!ub>1&(B)V#vviAevW8Erimm>eq_V+Q^C{q6kpKh6luesgy5i#rbU&t%C_2zF?w zIdPOIYeLBtM_E*K6Vu_h*@09{*iM7EI3M7QKP?h=KWyrV#Wi>rGHse!edzfemXQXzRw?1d3SXUbv8pEw&%7mZLTX5{Z!@J7fsY*}fm4)C4$r#D1gh8(Vo<%Ai$L z?Q`9}poKY(D3z16`}YLlmB7Wb(hd3$!{Zwx+h?D*{JDY$#q~d$|SrSJW_c0X3vW9C^E;O26QsKwW zn@0URAw1hBMA<)D{@F{fA4*LMXRf9Kt8C<%=rY*c5%DhbL~k9IJ#1Jye*QF~Ev289 z-zhY*j|9ScDxye$@n`&_Jcf)h6kVGshH(K4sy1x!y-=(98&`^Z%jp^5e_P)6DCmgZ z*C7~bw9|`kA{Q==eoFxT>)x1BiWOCxBvpuurV_Z)%yOZOvwm^Q-uG;E8TZdLo(| zD+vAl?mt0iBG}dqD23On*)8k7oO}{j2Av=+kV2Yt>%C&HDi!=u)eU8^3bFM z^gb(5A801+NDv4wIMw8~y+n3w8>B^TuS(h5>78Bt?Nt~L~&q#l$unlVPe#QijP)W|DjAWnL)^q>K06}sl zwz3^JCbr#Hu*=ADcNj$SEf;Ug5|cIJwm zI?ZP|srkiM^y43paxQ+bjR%H#kH~iXYlvbJSXgIxHmcOS2|t8CeQQu6Ii<_2;Mcai zKaKzyQua?5Tba*2um1d;{47n!?J5Wuz?#1rA_)cFP~;cNkJ?~=y8RdV$vLc?acrZy z@MyabAj*TwAUq|6V_xoz3G6>+NdTm~NnyhnM>>tp|axTHdU14XiOsKK8|tUOSbMxId2 zo6~HORxQzZU(%-KpijH{o7IvFSBBd3Oq?tW<>(~wAihtkf$9VN+8hy8662~ zrj-Izlu=s@AaO$-+S2s#@z5)=9Q}X$UTci=1Tlbyf)~wz(A7Ns8R>FN(0(jiDqKvK z+CYTK92Y9xo@oemfLFXYk)#OuM$vYCq1Ig6$P15#m%WH`ghyW{kA?7X9WGjB(ZJL7 ziYvF03}~muFnQ8^H?QbaxKMJGT99Jwc}OY<7Jd;4Q9X(*)C0};WY_H3q)j?#b=$E_ z>?Z4MlnK-cLWMARY+Q}{nPE~}dq?m!ccJ;^$%eRYNwpt# z?|oT@C{o1ykk0>7*oQ!8TdK%dszL>s)r!OFsIk#FhmrAvdNTT@zTIzMWY# z`E5hcPRq~4B!#=DVNXW}Tm8SLuN3gU+bt^((w`lAUU}8G9xXbyVw$Eq@O*EgU=nxy zhEZ=4L<9R6wWl*FJ_WKGE+SzWe2JFhOGe8%;C^hv5zJqOlQDi=_s2|Sy-wWV?3C*$(#-$Cy z!&kRxSI)9L=5QEq_7$%O>Hs>{%ND9G3& zmWB-OthJg!N67*%uiW*JnuCRURD)e-lq}pq9&U(0LofCHLH%-fdm)x4J*DIY{NfhTK-j2-e^ ze${@Iz1felDUq%nQ~F~e#ZvrhY3)IH{>->C;%{xyY>+hhsSw7rVQqVo7;xJsTljrcK~-Xt+q1igp#buILZO zHEeX!zLma@+!LvvN=F|%Nh=sEI$IoH*S&*tHX%BUr1(C7AwrK2R22g6E06YwRnHe> z){+W?BE^f}+u~Et9Y*En7!N7C4T{@$O5#7wO;nBDj_*|D*M(z4-GpU#-Dv@AiW*)n zOa%;H^8s!TB=5(!#+HjEPH=2|nYPOrrKSm^sDEw2)JyIuk*S6;xwd-itXzLf$R3VU z{q04u`O&=%BH(yL&pXQy?+*?eb-0!~ zZj@J*++5+nki--N%bxas3gR;{$4Kn_i<4ep3^lKpC~i{>5N<*K$nqHETW_)JoaMos zr!E{XOX|k16W&T9qDgwX`~!VCQgKvmBF6cmMb{s#1o2gHw*`m`Q4dGujC`;oF zQW8!)k!wZD5pR>r5ubecqljTUJXRMt1m$GxB7lI7Q{-++Zg;9!v#kkW&|pM7pPGV< z+tSb%w5Y*I5Hw~yAi@yH97l~D!!=BJ^%B60xW(GXGR2mc-{#2mUqZkpU zaNJ9x&G6H~-Z*Y5&^Y5ph{?jE@p58Ji#tn;>7`R-Y~RK2lv8pX24fl zOV`jF)Cv4TH0r2F=s(KQ?UMD!s5?nC=!Xv<0x9CmmqQ|FEIVDsvm{VYVo$U0Wj2ih z1_HK>&7kSrxO_qETso~bNruPHZ*9>jNYhlRHp%yIcRyLuQU)50^nd&6B|4wx%C9E) z0&!;ewFYMAex#-MqaU0Nt%*pB2eOdLg4wWH6T zO2Uts-a~5mTKapqo&iB$84zl7el-lk)y(?cex~xv0{?5P5e*laH4q0b9WplXvnwVE zqpgXcO!3|7-v)}q1FMyV`T+1+mxQY&5@aC8`FEG>&THrf5=8U|yD2O{nTZay)b^Wr z1!~wMKh*|?zE485v0BME++WhvK$vitFHN;^odpAatVO_ai`V*MFPdx37z`uw=E2zz zebD9iZZA&^8yWl*RA*uyrUUdb;bIL(|AsA%45;=5(Z_zKdrU2Ma)kl$t;%@U0J2q>wn0cuetsKGr!7v8u-E z2>x#wrBMLg983SnVsXYFsNXSXji@soG*qmCAd<*t?4;z*NZHEIv#r(det8plSy&O2 zH4^lJAwn$7D`#~+J?MaHx%^!?3Rs*Q;xYq*{sg?q5n+~&+5Z$ZfDmPB`rhfo(>Yn| z3DTF|9$`Rf#kWTp$}%RI;mEs!)(G0-EjIB@L!i4hgz#z!1Jg8np;Wd7^orO)v9^2! zLh{6{>jBMGj;#HH$6>`xB~%ENxI?*EftDEXKEo^r4t!FJf1<6hKP@ZgILyu5`ka4$ z(G^uvoKKtOXb{K#X!{z@xe=YS!ouXw#w0gcZ8}%a_;@UL63GD*DP)wc<3;iHs6AdcBNKno`iemJCPNfz21@*_M@o_v)KK?>7vUgoa!S8_bLm%Ej;%B!% zTS@cWE|{frw_p-W&=P>fDYvsE-+(&}lcf+*vENF8{ZFp2kfDEUyBZv|s?CRVff&dZ z{}pO&oIfPMiyx2p5|E7f{01O3%`h>`fOc|H{}^;zig1rIo>KDrI)&MT+dph|VIUe( z|G2zhwt&WW+L@|a?dCG_TRyam%|CHv6O(hn?PzgNCs_U7$%x+CUYw)fau{ow{o|3v zPf!u%jZ2d*plDEi*D*T^Pb5-*G+9MOWJE1Tw!D8b+>l?9a(^=JtxcihV>~wVyfJ?V zsd>KyCQUPPkqzZCqZsjGNIm{7A!vOPD2xLjo(yClOB)$V>2Xm0xrBA}BdZ}2q}W)& ze`c71GEX@}1Tb-T(dkQ-3mJ={lQHfN#x>%Cn0ZNiL(Wz^xDlf63wx+p{RcJz2Q+*v z^l$h-tlN~1?e`trVYqvRKqRo&;8b;SnDm#F;p>z=kPjKc0(#x^ zjz@E>^pc);b$g1|0A0nHce$Oqrgq0S)yfCHscJ4OkQkA z!7JX|ni{+&^?~Eu*nSslAdBRC5#xB^If@sna=eOR$M*Pvxu2}a5HVG0eeo?;U0s@L zGfXa=FVR(TN6YGprMlo`A{S_=mf&uHTi6hZ# zurn&9mo~eglZ*H>LJb7^{vT0q85d>OwGR(HNR8ysL$`EyBSO@iw$wHZSOl-8RUT6_9wJ1np&}>$< z-1g{Yekxb4{?nz`Glv?;GtH()nmX`uh;Pi^{*CdY(c{MmhAVr8-lOOZ75VmzZxo7o zF$ChwUS;yTF=ed{9zG|NIZ|!8HG?4!MqQL5u~TK4*7Nox;~EJcfR6&%15s@<&`Kz5 zWASHq--NoZzedBEaBgB_WNe-M`8F;igF@Xb(LD3f=5(zq8w#(OeA5LaDk$zz{A-N< zR0hY1Dzv=Xtoi%nzpXi=_-qgi38?SeJhHs}HZVkyGK`oO_}71gkLAjn0~=1ig0cmT zk4S|*4;Zn(YbHPgHWQ#wIIzclme-zu6P%2`nTl;K4u>DSVw}Gq_4F6x{@jCNK2`w{ zd08+U>o@$U@O~QSh}`Z25cuv~J1Bd9ULc_~*t&FVBzqdKiWOX#9~!tV_BpRsRK40C z;p&yQ6v%89H<$ebrj!6~tj8H!?~eG3j2zLKQx06zod44TYzZJUM}(^L|62HDU|u=$ zEx1~Yp}on=4HHx9mxo4DSP60P)|(HaG-!Q~s5FO#6YxQ+F;&W}i+isNuM@zzZvjcA zl|xEoZ927`d8?mgzpD*Ao}B6<9I%7{Dp8DCZBaydIX=bY06a;v3yj2|dkVb_e!|z} z*dYu-3@^6C(U0>*T8~C0+l4^js!}d4uy)(mjPPQ+BUvd=yTn(I=(6V-nBArq`^>WT zZe>K#!=gYJYXRd$qIpR?AFYPD3XmK~BviCMA;LAxChMX}#FLYf&}&!I zy_T40rGeMmbZKto&u~keg6t;4l2aQDIHu$m%)o>f@^XF1>~in#af$x#BShfb)~5j5 zPZ_I(y^b(Z1_?=y`1HZ*+t!Zn1j_|LbfFv?m{RqU`JFpo+4QA2!9$z;A3mNU!3(6S zfKr)ZUiG5c>Oo(5Ssr6SYl6G;=#@7i>v%w1Gru^$p4fQKy4kzM#-bcwctWI9mYB8*T8YB6jFL>9k7eZ)7lV$A(z_9gTo)v3nfpo#4M= zi~7(vFE{a?FmrjuMvMNRSP1B3r3hhpi7T_=Yw<(sN^Fu6Oq~6qX=7ey$mn#Tv7F#A zEK=0u0fKImm5xX%y_*zUFl78$3f=FQY8?y9>aS6A$gBI@EiOd>fsq2V6#E+L1qbV8 zGFP12?c1fTwW|49{u9&)WDzW&8CgV$`az#~evs9U+` zcW~#T;^9o(JE|$wSqSvLBZe1zhJkemlt%OpF{sIB&T| zQi3O!7;-FTlNp~bbRRiM+RY%JxWVXrzHxz54hrIHv^V|~2ai3XCk{^?t<;l{le#$f zcHLgGfEsUccKs(&#icZKHbJbw792MA2DG0|(Xyv&?CN)`c;z*F!CFCS*nVcr{+o0& z=lzB!$BXpAx~m*f!15)a_9aQyajL>OZC%=i6o8t6XvBXe9!N|e?vJf+7Ef_Kx*sA= zhb0))KskK1__CZK>*je$?sWSFEK=xYA?d$waBmQi_jP0{oy@H;x+>5KU;@=$6B?iW z*&GN^R#*50yvIJRX?Ar64J9C{d?f`19UkwKl@^=S+NxpZz*wt1P`ljdi3Ow-IO(`T z%z{~rF>-{V$l%#sA7WyNYpioFGeUdN(|P6%07)Q+j_#MZej;W1^M-*=E{f}Y+(pPb zDi}wYmywg%V_}Gug{4-zx<%IfdrC`8Cw8Q}vBUE#VfE^5xj*b04AsB3Lu!Gidx|%W zgJgZ;CV+fiE?6m5fY(OpJrE~`6dU_D4w0KGHnsqU)a;tbc8h=1b>4;X{o6as!4GmA zEo76jU_|)$<#!KlThn+z`Vt**%%7c6sixm%u+p3`kc-G!9Y{$CRq- z{D=&W;sn!_WJ>U~+z?R?Tt}uhRW-9y#+1SPPD_c2_f`O&%fLbMZbhCZnn7yIsACGVfd5$7Hq3@3{vY#m@i9}S-$zJNs9_SAQvgJQ4sD4bm z>=n9_nn~d9^!xdW(>D{;4-T}%sYgwb&%|o!iTWT*nQedgyyBJAp7AwmFocM@eq!~c z;Y-DNW=w07UCHM%1}OX!6fWB`6gHH?+FGw=z5H?Gl|0RgTkg(vjC$>!{LR3NEJ3`u z(Lcg^-<_#&=iJc{n;Ajb6sjDTb#8HilRp`CFNm4Xp28$-o68eK3qxgsyHZ2cAx&(y2DW${afEOO;r9JY5IWNb(LyMk zQyFQG{@+(7R4L(L4#6EU!IXO9=?^0PLPIC_I+i*#){a*tt z5a1r8TL2b^MAMzt1#B2x(rpQRl*RlyBqjQ5`x(ui^|=B-~c zF0p+`_;MU|ia}D@x~FSOnB_Jp!oZBj8-URZg=?pQq|7m;5aF)m39SBtp1`Y$n=69; z1lUw_G>f!M5AFa7lxoz#+g+^+hhI}htw(P{*nW`m=;PY!Ijr6AJ@RSr{`XLOW4uFv zL+mn{66HIH6hzhkCrl7$gUK)%?ytUDCe=W!6#8ZvNu&^5ZrI?7c#xnCtTx~RvoJGD ztz<3Sr)<97Ei%QFI(ml2goh0jqLx*CfWk1`7dCj+Ukh%?+Fcr z&&nS&ufsr6`Whs2=^i-oZuhO*moPQm7cJ9RLn*~!ea>@n&+Gb(cbiB6ir-r}OTOd1 zPCELXY36!}h4Cq%Irb^9Dc#{u_TOEv_LN!dKvlYjBitKN0>rE;y5DfC-yLu3@P>;G zfZwrWI4D+fr$P*7=LTEPvx{|^v^}|RI!PvI*EWKK9?Ap z5F;^^zA&;c5sj4UC)o%vd{Q5ATx`ma!M9~$TMF>y^$#sM_$Pi{$F-A~F3v<^lm|?^ zLJ~Jm=A-d%Wrcq?UN{0(_H?aG?QSe#Z86=$%Uv8%cY7IIUkcYiUn_T|#5TAHU#}?I z#%;npNBHpm#Mb-kb5=p0W0=;oIHtTDz2`^@;&EyhAt%_6YCoc3mN@qLD)%H-QXv)( zVP?)tdh3>-is^US4e9aAad zq92R%6$z^W9+p&6`{sN^d>J?_haW9OoMWNpkfWIjnm542A6hxHP>7qpt*RI~g&(Sx zKQu7V0fbLTtBj_8PxC;6%nenPkcRx#e3^*y-WDMq{V|ZX`sm|iDN+}cB9>-+ORBQ; zW-}J!?a2Dc;e4S|{3uJo47`TNoqUNx#wI}QQKtM)YBEZlr)3^PC}{O%7&&6WL`Zct zk4x{T{k2lV1}R|XYUR%aCj;5C8!3DasQ~D1%bOm)2Q)Pw!Tfpo=}WsTR;C{;r+j&10${9at{>YEW{9<(C*RuR=xBm96zoI34C)?j&cu{5lw z2rdibTUfj=MRY{c7xk023&;umyk2ASHO1!(Q=*QP*{>NEKokb-TU3Mk!(W3uoO)3B zp>US_=`~}Z6QMoeXYErs{EO4|C5R9=muf0=ISl?J9qV(2RZcgf-fSxxv6O+3mzO>C ztp~aA_jQN$s_q@RiJQcLZJ1V&A9Oep{~$1cUZjX91tdlKJ>8G${?}~Ax zk--Z*lV2m#?@|CD>Muv*HBfGL*=9agE;oN*aH7(SPC>N}J7Ro#V0#%Bd!?QXOaQ

setIsInstallModalOpen(false)} className="modalAlert" > - - - -

- - Install to enable all features! -
- - Earn strategies, loans market, send, deposit and buy crypto with fiat. - -

-
    - {isPlatform('ios') && ( - <> -
  • Tap the Share button at the bottom of the browser
  • -
  • Scroll down and select "Add to Home Screen."
  • -
  • Tap "Add" in the top right corner
  • - - )} - {!isPlatform('ios') && ( - <> -
  • - Tap the menu button (three dots) in your browserr
  • -
  • - Select "Add to Home Screen" or "Install App."
  • - - )} -
-

- Enjoy instant access to our app with a single tap! -

-
- - setIsInstallModalOpen(false)}>ok - -
-
+ ); diff --git a/src/components/Welcome.tsx b/src/components/Welcome.tsx index 9250c492..32580cad 100644 --- a/src/components/Welcome.tsx +++ b/src/components/Welcome.tsx @@ -38,10 +38,11 @@ export function Welcome({ */}
- + alt="Hexa Lite logo" + />

Hexa Lite

Build your wealth with crypto assets

@@ -60,7 +61,7 @@ export function Welcome({ { - router.push("wallet"); + router.push("wallet", 'forward'); handleSegmentChange({ detail: { value: "wallet" } }); }} > @@ -71,22 +72,23 @@ export function Welcome({ fill="clear" size="small" onClick={(e) => { - router.push("available-platforms"); + router.push("available-platforms", 'forward'); }} > - Available on iOS, Android or Desktop + Available on iOS, Android and Desktop - + }} src="./assets/images/preview-app.png" + alt="app preview" /> @@ -125,7 +127,7 @@ export function Welcome({ class="withPadding ion-justify-content-center ion-align-items-center" > - +

- +
-
@@ -192,7 +195,7 @@ export function Welcome({ style={{ padding: "20vh 0" }} > - +

{ - router.push("defi"); + router.push("defi", 'forward'); handleSegmentChange({ detail: { value: "defi" } }) }} > @@ -228,7 +231,7 @@ export function Welcome({ size-md="4" className="ion-text-center ion-padding" > - +
- +

{ - router.push("earn"); + router.push("earn", 'forward'); handleSegmentChange({ detail: { value: "earn" } }) }} > @@ -284,7 +287,7 @@ export function Welcome({ size-md="4" className="ion-text-center ion-padding-vertical" > - +
- +

- + - +

+ { + router.push("about", 'forward'); + }} + > + About the team + - + - + - +

Earn interest with your assets @@ -692,7 +704,7 @@ export function Welcome({ size="large" color="gradient" onClick={(e) =>{ - router.push("wallet"); + router.push("wallet", 'forward'); handleSegmentChange({ detail: { value: "wallet" } }) }} > diff --git a/src/components/base/WalletBaseContainer.tsx b/src/components/base/WalletBaseContainer.tsx index f23cd282..6c07423d 100644 --- a/src/components/base/WalletBaseContainer.tsx +++ b/src/components/base/WalletBaseContainer.tsx @@ -5,17 +5,18 @@ import { IonHeader, IonIcon, IonModal, + IonPage, + IonProgressBar, IonTitle, IonToolbar, ModalOptions, } from "@ionic/react"; -import React from "react"; +import React, { Suspense, lazy } from "react"; import { IAsset } from "@/interfaces/asset.interface"; import { DepositContainer } from "@/containers/DepositContainer"; import { HookOverlayOptions } from "@ionic/react/dist/types/hooks/HookOverlayOptions"; import { TransferContainer } from "../../containers/TransferContainer"; -import { close } from "ionicons/icons"; -import { BuyWithFiat } from "@/containers/BuyWithFiat"; +const BuyWithFiatContainer = lazy(() => import("@/containers/BuyWithFiat")); export type SelectedTokenDetail = { name: string; @@ -203,7 +204,23 @@ export default class WalletBaseComponent extends React.Component< isOpen={this.state.isBuyWithFiatModalOpen} onDidDismiss={() => this.handleBuyWithFiat(false)} > - this.handleBuyWithFiat(false)} /> + + + + + + } + > + this.handleBuyWithFiat(false)} + /> + ); diff --git a/src/components/ui/InstallPWASteps.tsx b/src/components/ui/InstallPWASteps.tsx new file mode 100644 index 00000000..e0c830ce --- /dev/null +++ b/src/components/ui/InstallPWASteps.tsx @@ -0,0 +1,51 @@ +import { IonButton, IonCol, IonGrid, IonRow, IonText, isPlatform } from "@ionic/react"; + +export const InstallPWASteps = (props: { + setIsInstallModalOpen: (state: boolean)=> void; +}) => { + + return ( + <> + + + +

+ + Install to enable all features! +
+ + Earn strategies, loans market, send, deposit and buy crypto with fiat. + +

+
    + {isPlatform('ios') && ( + <> +
  • Tap the Share button at the bottom of the browser
  • +
  • Scroll down and select "Add to Home Screen."
  • +
  • Tap "Add" in the top right corner
  • + + )} + {!isPlatform('ios') && ( + <> +
  • Tap the menu button (three dots) in your browserr
  • +
  • Select "Add to Home Screen" or "Install App."
  • + + )} +
+

+ Enjoy instant access to our app with a single tap! +

+
+ + props.setIsInstallModalOpen(false)}>ok + +
+
+ + ); +} \ No newline at end of file diff --git a/src/containers/BuyWithFiat.tsx b/src/containers/BuyWithFiat.tsx index 285f3acb..9e5eb51c 100644 --- a/src/containers/BuyWithFiat.tsx +++ b/src/containers/BuyWithFiat.tsx @@ -1,9 +1,9 @@ import { IonButton, IonButtons, IonContent, IonHeader, IonIcon, IonTitle, IonToolbar } from "@ionic/react"; import { close } from "ionicons/icons"; -export const BuyWithFiat = (props: { +export default function BuyWithFiat(props: { dismiss: ()=> void -}) => { +}) { return ( <> diff --git a/src/containers/desktop/AboutContainer.tsx b/src/containers/desktop/AboutContainer.tsx index 368419f7..0df29f22 100644 --- a/src/containers/desktop/AboutContainer.tsx +++ b/src/containers/desktop/AboutContainer.tsx @@ -1,108 +1,282 @@ -import { IonAvatar, IonButton, IonCol, IonContent, IonGrid, IonIcon, IonPage, IonRow, IonText } from "@ionic/react"; -import { logoTwitter } from "ionicons/icons"; +import { getContributors } from "@/servcies/github.service"; +import { + IonAvatar, + IonBackButton, + IonButton, + IonButtons, + IonCol, + IonContent, + IonGrid, + IonHeader, + IonIcon, + IonPage, + IonRow, + IonText, + IonToolbar, +} from "@ionic/react"; +import { logoGithub, logoTwitter } from "ionicons/icons"; +import { useEffect, useState } from "react"; -export function AboutContainer() { +type Team = { + avatar: string; + name: string; + subStatus: string; + post: string; + links: { + icon: string; + url: string; + }[]; +}; - const teams = [ +export default function AboutContainer() { + const [teams, setTeam] = useState([]); + + const mainTeams: Team[] = [ { - avatar: '', - name: 'Fazio Nicolas', - sumbStatus: 'Founder', - post: 'Chief Executive Officer', + avatar: "./assets/images/0xFazio.jpeg", + name: "FazioNico", + subStatus: "Founder", + post: "Chief Executive Officer", links: [ { icon: logoTwitter, - url: './assets/images/0xFazio.jpeg' - } - ] - } - ] + url: "https://x.com/0xFazio", + }, + ], + }, + ]; + + useEffect(() => { + getContributors("hexaonelabs", "hexa-lite") + .then((contributors) => { + return contributors.map((c) => { + const main = mainTeams.find( + (t) => c.login.toLowerCase() === t.name.toLowerCase() + ); + + return main + ? { + avatar: c.avatar_url, + subStatus: main.subStatus, + post: main.post, + links: [ + ...main.links, + { + icon: logoGithub, + url: c.html_url, + }, + ], + name: main.name, + } + : ({ + avatar: c.avatar_url, + name: c.login, + subStatus: "Github contributor", + post: "Developper", + links: [ + { + icon: logoGithub, + url: c.html_url, + }, + ], + } as Team); + }); + }) + .then((teamData) => { + setTeam(() => teamData); + }); + return () => setTeam([]); + }, []); + return ( - - - + + + + + + + + + + + {/* all devices */} + + +

+ Build by the community, for the community +

+
+ +

+ Hexa Lite is build by the main team of{" "} + + + HexaOne Labs + + + , a Swiss-based organization focused on innovation in the + decentralized finance sector. Our mission is straightforward: + to make DeFi accessible to everyone by developing products and + services that reduce friction and growth web3 adoption +

+
+
+
+
+ + - + + +

Meet the main team

+
+
+ {teams.map((t, index) => ( - -

- Built by the community, for the community -

+ + {t.name} + + +

+ {t.name} +
+ {t.subStatus} +

- -

- Our mission is developing products and services that reduce friction and growth web3 adoption. -

+ +

{t.post}

+ {t.links.map((l, i) => ( + window.open(l.url, "_blank")} + > + + + ))}
- + + window.open( + "https://github.com/hexaonelabs/hexa-lite/pulls", + "_blanck" + ) + } > - image - -
+ Become a contributor + + +

+ by opening a pull request +

+
+
- - - -

- Meet the team -

-
-
- {teams.map(t => ( - + + - - {t.name} - - -

- {t.name}
- {t.sumbStatus} -

-
- -

- {t.post} -

-
- {t.links.map(l => ( - window.open(l.url, '_blank')}> - - - ))} -
- ))} -
- - - + + +

Be a part of Gouvernance

+
+ +

+ To participate in governance using Snapshot, follow + these simple steps +

+
+
+ +
+ + + + + + + + ); -} \ No newline at end of file +} diff --git a/src/containers/desktop/AvailablePlatformsContainer.tsx b/src/containers/desktop/AvailablePlatformsContainer.tsx new file mode 100644 index 00000000..84a66283 --- /dev/null +++ b/src/containers/desktop/AvailablePlatformsContainer.tsx @@ -0,0 +1,86 @@ +import { InstallPWASteps } from "@/components/ui/InstallPWASteps"; +import { IonAvatar, IonBackButton, IonButton, IonButtons, IonCol, IonContent, IonGrid, IonHeader, IonIcon, IonModal, IonPage, IonRow, IonText, IonToolbar, isPlatform } from "@ionic/react"; +import { logoTwitter } from "ionicons/icons"; +import { useState } from "react"; + +export default function AvailablePlatformsContainer() { + const [isInstallModalOpen, setIsInstallModalOpen] = useState(false); + + const teams = [ + { + avatar: '', + name: 'Fazio Nicolas', + sumbStatus: 'Founder', + post: 'Chief Executive Officer', + links: [ + { + icon: logoTwitter, + url: './assets/images/0xFazio.jpeg' + } + ] + } + ] + return ( + + + + + + + + + + + + + + all devices + +

+ Available on Web, iOS, Android and Desktop +

+
+ +

+ Access Hexa Lite seamlessly across all your devices. Whether you're on the go with your smartphone, at your desk with your desktop computer, or relaxing at home with your tablet, our platform is available on iOS, Android, and Desktop, ensuring you never miss a beat in managing your decentralized finances +

+
+
+ + setIsInstallModalOpen(true)}> + iOS & Android install + + window.open('https://github.com/hexaonelabs/hexa-lite', '_blanck')} + className="ion-padding-horizontal" + color="gradient"> + Desktop download + + +
+ +
+
+ + setIsInstallModalOpen(false)} + className="modalAlert" + > + + +
+ ); +} \ No newline at end of file diff --git a/src/servcies/github.service.ts b/src/servcies/github.service.ts new file mode 100644 index 00000000..ae367c54 --- /dev/null +++ b/src/servcies/github.service.ts @@ -0,0 +1,28 @@ + +export interface Contributor { + login: string; + id: number; + node_id: string; + avatar_url: string; + gravatar_id: string; + url: string; + html_url: string; + followers_url: string; + following_url: string; + gists_url: string; + starred_url: string; + subscriptions_url: string; + organizations_url: string; + repos_url: string; + events_url: string; + received_events_url: string; + type: string; + site_admin: boolean; + contributions: number; +} + +export const getContributors = async (owner: string, repository: string) => { + const response = await fetch(`https://api.github.com/repos/${owner}/${repository}/contributors`); + const data = await response.json(); + return data as Contributor[]; +} \ No newline at end of file diff --git a/src/styles/global.scss b/src/styles/global.scss index c6e0d525..4275fbdc 100755 --- a/src/styles/global.scss +++ b/src/styles/global.scss @@ -337,7 +337,9 @@ ion-card { text-align: center; .homeLogo { - margin-top: 5rem; + min-width: 148px; + min-height: 148px; + margin-top: 6rem; margin-bottom: 1rem; margin-right: 0rem; } @@ -712,6 +714,15 @@ ion-accordion.networkList { // } } +ul.baseList { + list-style: decimal; + padding: 0 0 0 1rem; + + li { + margin: 0.85rem 0; + } +} + .verticalLineBefore::before { content: ''; position: absolute; From e415d68cd0fb1959e885de6d0e44a2d74480a66c Mon Sep 17 00:00:00 2001 From: FazioNico Date: Wed, 20 Mar 2024 12:58:43 +0100 Subject: [PATCH 39/74] fix: btn alignement --- src/components/Welcome.tsx | 44 ++++++++++++++++++++------------------ 1 file changed, 23 insertions(+), 21 deletions(-) diff --git a/src/components/Welcome.tsx b/src/components/Welcome.tsx index 32580cad..538941da 100644 --- a/src/components/Welcome.tsx +++ b/src/components/Welcome.tsx @@ -58,27 +58,29 @@ export function Welcome({ */} - { - router.push("wallet", 'forward'); - handleSegmentChange({ detail: { value: "wallet" } }); - }} - > - Launch App - - { - router.push("available-platforms", 'forward'); - }} - > - - Available on iOS, Android and Desktop - - +
+ { + router.push("wallet", 'forward'); + handleSegmentChange({ detail: { value: "wallet" } }); + }} + > + Launch App + + { + router.push("available-platforms", 'forward'); + }} + > + + Available on iOS, Android and Desktop + + +
From 1f5a527c17abd5de05e836ec1437f1c5a2ea2104 Mon Sep 17 00:00:00 2001 From: FazioNico Date: Wed, 20 Mar 2024 13:03:28 +0100 Subject: [PATCH 40/74] chore: patch v --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index 895b95c3..75446452 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "hexa-lite", - "version": "1.0.8", + "version": "1.1.0", "homepage": ".", "private": false, "scripts": { From 05f1eaf76ae2b101cb2fce227d77ad8d6aed88d1 Mon Sep 17 00:00:00 2001 From: FazioNico Date: Wed, 20 Mar 2024 14:12:48 +0100 Subject: [PATCH 41/74] fix: alignement btn action --- src/components/Welcome.tsx | 2 +- src/styles/global.scss | 14 ++++++++++++++ 2 files changed, 15 insertions(+), 1 deletion(-) diff --git a/src/components/Welcome.tsx b/src/components/Welcome.tsx index 538941da..7ccedb12 100644 --- a/src/components/Welcome.tsx +++ b/src/components/Welcome.tsx @@ -58,7 +58,7 @@ export function Welcome({ */} -
+
{ diff --git a/src/styles/global.scss b/src/styles/global.scss index 4275fbdc..220193ee 100755 --- a/src/styles/global.scss +++ b/src/styles/global.scss @@ -317,6 +317,12 @@ ion-card { } } + .homeActionBtns { + display: flex; + align-items: center; + flex-direction: row; + } + > ion-row > ion-col { ion-button { margin-top: 2rem ; @@ -348,6 +354,14 @@ ion-card { ion-image.homeLogo { margin: auto } + + + .homeActionBtns { + display: flex; + align-items: center; + flex-direction: column; + } + } h1.homeTitle { From a5aeb9663b889f48f86bee5a64dfe05e752e2d47 Mon Sep 17 00:00:00 2001 From: FazioNico Date: Thu, 21 Mar 2024 14:34:53 +0100 Subject: [PATCH 42/74] refactor: clean small ui feedback --- src/components/Welcome.tsx | 11 ++++------- src/containers/BuyWithFiat.tsx | 2 +- src/containers/desktop/AboutContainer.tsx | 16 ++++++++-------- src/containers/mobile/WalletMobileContainer.tsx | 4 ++-- src/styles/global.scss | 9 ++++++++- 5 files changed, 23 insertions(+), 19 deletions(-) diff --git a/src/components/Welcome.tsx b/src/components/Welcome.tsx index 7ccedb12..b109440a 100644 --- a/src/components/Welcome.tsx +++ b/src/components/Welcome.tsx @@ -141,10 +141,8 @@ export function Welcome({ Create or connect an account
under a minute

- Hexa Lite ensures a secure and reliable user experience, - enabling everyone to own their own assets. Users can enjoy the advantages of blockchain - technology and DeFi services without the need to manage - private keys or seed phrases. + Hexa Lite ensures a secure and reliable user experience, enabling everyone to own their own assets. + Users can enjoy the advantages of blockchain technology and DeFi services without the need to manage private keys or seed phrases.

- Safely deposit your liquidity into DeFi protocols across + Safely deposit your liquidity without any restrictions or censorship into DeFi protocols across more than 40 markets and{" "} {CHAIN_AVAILABLES.filter((c) => c.type === "evm").length}{" "} EVM-Compatible blockchains. Earn substantial interest @@ -268,8 +266,7 @@ export function Welcome({

Unlock the potential of your assets by earn interest through Liquid Staking.
- Stake with DeFi protocols without any lockup periods or - restrictions. + Stake with DeFi protocols without any lockup periods or restrictions.

diff --git a/src/containers/desktop/AboutContainer.tsx b/src/containers/desktop/AboutContainer.tsx index 0df29f22..0c0f7f58 100644 --- a/src/containers/desktop/AboutContainer.tsx +++ b/src/containers/desktop/AboutContainer.tsx @@ -108,7 +108,7 @@ export default function AboutContainer() { > {/*

- Hexa Lite is build by the main team of{" "} + Hexa Lite project is starting by the main team of{" "} - HexaOne Labs + Hexa One Labs , a Swiss-based organization focused on innovation in the @@ -147,7 +147,7 @@ export default function AboutContainer() {

Meet the main team

@@ -171,7 +171,7 @@ export default function AboutContainer() { sizeMd="6" sizeLg="4" sizeXl="4" - class="ion-margin-top ion-padding-top ion-text-center" + class="ion-margin-top ion-padding-top ion-text-center ion-padding-horizontal" > diff --git a/src/containers/mobile/WalletMobileContainer.tsx b/src/containers/mobile/WalletMobileContainer.tsx index a98d568c..2a95bcc0 100644 --- a/src/containers/mobile/WalletMobileContainer.tsx +++ b/src/containers/mobile/WalletMobileContainer.tsx @@ -382,9 +382,9 @@ class WalletMobileContainer extends WalletBaseComponent< )} - + -

+

You are using a non-custodial wallet that give you complete control over your cryptocurrency funds and private keys. Unlike custodial wallets, you manage your own security, diff --git a/src/styles/global.scss b/src/styles/global.scss index 220193ee..8578ceb3 100755 --- a/src/styles/global.scss +++ b/src/styles/global.scss @@ -360,6 +360,13 @@ ion-card { display: flex; align-items: center; flex-direction: column; + + ion-button { + margin: 1rem auto; + &:first-of-type { + margin: 2rem auto 0; + } + } } } @@ -404,7 +411,7 @@ ion-card { line-height: 1.8rem; @media screen and (max-width: 991px) { - font-size: 1.6rem; + font-size: 1.4rem; line-height: 1.6rem; } } From 9523ffe75f3f09cb4feb82c7bce13c755a35691b Mon Sep 17 00:00:00 2001 From: FazioNico Date: Fri, 22 Mar 2024 13:33:27 +0100 Subject: [PATCH 43/74] refactor: prevent unexisting summary on error loading --- src/store/effects/pools.effect.ts | 16 ++++++++-------- 1 file changed, 8 insertions(+), 8 deletions(-) diff --git a/src/store/effects/pools.effect.ts b/src/store/effects/pools.effect.ts index bad08fe0..194184d7 100644 --- a/src/store/effects/pools.effect.ts +++ b/src/store/effects/pools.effect.ts @@ -123,17 +123,17 @@ const loadAaveUserSummary = async (walletAddress: string) => { market, currentTimestamp, user: walletAddress, + }).catch(err => { + console.error("[ERROR] {{loadAaveUserSummary}} getUserSummaryAndIncentives: ", {err, market}); + return []; }) ) ) - .then((r) => r as IUserSummary[]) - .catch((error) => { - console.error( - "[ERROR] {{loadAaveUserSummary}} fetchUserSummaryAndIncentives: ", - error - ); - return null; - }); + .then((r) => r as IUserSummary[]) + .catch(err => { + console.error("[ERROR] {{loadAaveUserSummary}} Promise.all() getUserSummaryAndIncentives: ", {err}); + return []; + }); console.log(`[INFO] {{loadAaveUserSummary}} done: `, { userSummaryAndIncentivesGroup, }); From c1451f4703d1ad47af24ddfd27947793c8869001 Mon Sep 17 00:00:00 2001 From: FazioNico Date: Fri, 22 Mar 2024 13:54:54 +0100 Subject: [PATCH 44/74] refactor: style buy modal --- src/containers/BuyWithFiat.tsx | 12 ++++++++++-- src/styles/global.scss | 4 ++++ 2 files changed, 14 insertions(+), 2 deletions(-) diff --git a/src/containers/BuyWithFiat.tsx b/src/containers/BuyWithFiat.tsx index 64eafccb..32e55419 100644 --- a/src/containers/BuyWithFiat.tsx +++ b/src/containers/BuyWithFiat.tsx @@ -25,13 +25,21 @@ export default function BuyWithFiat(props: { - + diff --git a/src/styles/global.scss b/src/styles/global.scss index 8578ceb3..fd4f8145 100755 --- a/src/styles/global.scss +++ b/src/styles/global.scss @@ -147,6 +147,10 @@ ion-popover.profil-popover { } } +ion-modal { + --border-radius: 32px; +} + ion-popover.points-popover { --width: 100%; --max-width: 350px; From ac4b0416c0ef50bce87362259c6fc2a965cc2111 Mon Sep 17 00:00:00 2001 From: FazioNico Date: Fri, 22 Mar 2024 15:50:43 +0100 Subject: [PATCH 45/74] refactor: base for light mode --- src/components/Welcome.tsx | 3 +-- src/styles/global.scss | 5 ++++- src/styles/variables.scss | 26 +++++++++++++++++++------- 3 files changed, 24 insertions(+), 10 deletions(-) diff --git a/src/components/Welcome.tsx b/src/components/Welcome.tsx index b109440a..3e49be2f 100644 --- a/src/components/Welcome.tsx +++ b/src/components/Welcome.tsx @@ -96,9 +96,8 @@ export function Welcome({ diff --git a/src/styles/global.scss b/src/styles/global.scss index fd4f8145..2771ddbd 100755 --- a/src/styles/global.scss +++ b/src/styles/global.scss @@ -5,7 +5,7 @@ $font-family: var(--font-outfit);//'Outfit', sans-serif; html, body, ion-content { font-size: 20px; line-height: normal; - background: '#182449'; + background: #182449; background: var(--background-gradient); } ion-content { @@ -426,6 +426,9 @@ ion-card { min-height: 90vh; } + .shaderContener { + background: var(--background-shader); + } .withPadding { padding-top: 5rem; padding-bottom: 5rem; diff --git a/src/styles/variables.scss b/src/styles/variables.scss index dd5085b0..4d2c5c84 100755 --- a/src/styles/variables.scss +++ b/src/styles/variables.scss @@ -28,12 +28,6 @@ --ion-color-gradient-tint: linear-gradient(270deg, var(--ion-color-secondary-tint),var(--ion-color-primary-tint)); --ion-color-gradient-text: linear-gradient(to right, rgb(var(--ion-color-primary-rgb)) , rgb(var(--ion-color-secondary-rgb))); - .ion-color-gradient-text { - background: var(--ion-color-gradient-text); - -webkit-background-clip: text; - background-clip: text; - -webkit-text-fill-color: transparent; - } --ion-color-success: #2dd36f; --ion-color-success-rgb: 45,211,111; @@ -77,7 +71,14 @@ --ion-background-color: #f5f8ff; --ion-background-color-rgb: 245,248,255; - --background-gradient: linear-gradient(125deg,#182449, rgba(61, 158, 255, 0.2)); + --background-gradient: #ecf2fe; + --background-shader: #e2e9ff; + + --ion-text-color: #180d68; + --ion-text-color-rgb: 24, 13, 104; + + --ion-color-dark: #180d68; + --ion-color-dark-rgb: 24, 13, 104; /* OnBoarding */ --account-center-position-top: -3px; @@ -103,6 +104,13 @@ --ion-color-tint: var(--ion-color-gradient-tint); } +.ion-color-gradient-text { + background: var(--ion-color-gradient-text); + -webkit-background-clip: text; + background-clip: text; + -webkit-text-fill-color: transparent; +} + /* * Dark Colors * ------------------------------------------- @@ -178,6 +186,10 @@ body.dark { --ion-color-light-contrast-rgb: 255, 255, 255; --ion-color-light-shade: #1e2023; --ion-color-light-tint: #383a3e; + + --background-gradient: linear-gradient(125deg,#182449, rgba(61, 158, 255, 0.2)); + --background-shader: #182449; + } /* From 361ae6313d78441062c5a10dcdc5cdde4236a986 Mon Sep 17 00:00:00 2001 From: FazioNico Date: Fri, 22 Mar 2024 18:57:50 +0100 Subject: [PATCH 46/74] fix: missing update assets after actions --- src/components/PoolItem.tsx | 2 +- src/components/ReserveDetail.tsx | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/src/components/PoolItem.tsx b/src/components/PoolItem.tsx index 75b6e441..3b5021bf 100644 --- a/src/components/PoolItem.tsx +++ b/src/components/PoolItem.tsx @@ -242,7 +242,7 @@ export function PoolItem(props: IPoolItemProps) { // reload asset if user have trigger an action from ReserveDetails. // Ex: deposit, withdraw, borrow, repay if (actionType) { - loadAssets(); + loadAssets(true); } }} handleSegmentChange={handleSegmentChange} diff --git a/src/components/ReserveDetail.tsx b/src/components/ReserveDetail.tsx index 66852971..e16583ec 100644 --- a/src/components/ReserveDetail.tsx +++ b/src/components/ReserveDetail.tsx @@ -353,7 +353,7 @@ export function ReserveDetail(props: IReserveDetailProps) { // update userSummary & wallet assets after action if (walletAddress) { await initializeUserSummary(walletAddress); - await loadAssets(); + await loadAssets(true); } }; From cf263d61e0c431c5238eb6cd1bab55b18c68e697 Mon Sep 17 00:00:00 2001 From: FazioNico Date: Sat, 23 Mar 2024 03:10:56 +0100 Subject: [PATCH 47/74] refactor: add light mode support --- public/assets/icons/medium-icon.svg | 4 +- public/assets/images/logo-colored.svg | 4 +- public/assets/images/logo-uncolored.svg | 6 ++ public/assets/images/x-logo.svg | 6 +- src/components/AppShell.tsx | 17 +++++ src/components/AuthBadge.tsx | 11 +++ src/components/FooterComponent.tsx | 19 ++--- src/components/Header.tsx | 29 +------- src/components/ReserveDetail.tsx | 2 +- src/components/Welcome.tsx | 35 ++++----- src/components/ui/AppLogo.tsx | 51 +++++++++++++ src/components/ui/MenuSetting.tsx | 20 ++++- src/components/ui/ToogleLightmode.tsx | 41 +++++++++++ src/containers/DepositContainer.tsx | 3 +- src/containers/ErrorBoundary.tsx | 40 ++++++++++ src/containers/TransferContainer.tsx | 18 +---- src/containers/desktop/AboutContainer.tsx | 16 ++-- src/pages/_app.tsx | 5 +- src/servcies/lifi.service.ts | 12 ++- src/styles/global.scss | 89 +++++++++++++++++++++-- src/styles/variables.scss | 8 ++ 21 files changed, 339 insertions(+), 97 deletions(-) create mode 100644 public/assets/images/logo-uncolored.svg create mode 100644 src/components/ui/AppLogo.tsx create mode 100644 src/components/ui/ToogleLightmode.tsx create mode 100644 src/containers/ErrorBoundary.tsx diff --git a/public/assets/icons/medium-icon.svg b/public/assets/icons/medium-icon.svg index b7e4520c..84cf2197 100644 --- a/public/assets/icons/medium-icon.svg +++ b/public/assets/icons/medium-icon.svg @@ -1,8 +1,6 @@ - - - + diff --git a/public/assets/images/logo-colored.svg b/public/assets/images/logo-colored.svg index b41bc461..e0debc46 100644 --- a/public/assets/images/logo-colored.svg +++ b/public/assets/images/logo-colored.svg @@ -1,6 +1,6 @@ + class="app-icon"> \ No newline at end of file diff --git a/public/assets/images/logo-uncolored.svg b/public/assets/images/logo-uncolored.svg new file mode 100644 index 00000000..ab1401c7 --- /dev/null +++ b/public/assets/images/logo-uncolored.svg @@ -0,0 +1,6 @@ + + + \ No newline at end of file diff --git a/public/assets/images/x-logo.svg b/public/assets/images/x-logo.svg index 437e2bfd..1c9b75f3 100644 --- a/public/assets/images/x-logo.svg +++ b/public/assets/images/x-logo.svg @@ -1,3 +1,5 @@ - - + + \ No newline at end of file diff --git a/src/components/AppShell.tsx b/src/components/AppShell.tsx index cd6afcbb..b3bdc30d 100755 --- a/src/components/AppShell.tsx +++ b/src/components/AppShell.tsx @@ -135,6 +135,23 @@ const AppShell = () => { initializeWeb3(); }, []); + // useEffect(() => { + // const prefersDarkScheme = window.matchMedia("(prefers-color-scheme: dark)"); + // if (!prefersDarkScheme.matches) { + // document.querySelector('body')?.classList.toggle('dark'); + // } + // }, []); + + useEffect(() => { + if (typeof window !== 'undefined' && window.localStorage) { + const isLightmode = localStorage.getItem('hexa-lite_is-lightmode'); + isLightmode + ? document.querySelector('body')?.classList.remove('dark') + : undefined; + } + return ()=> {}; + }, []); + return ( {!isMobilePWADevice && ( diff --git a/src/components/AuthBadge.tsx b/src/components/AuthBadge.tsx index 40bcc006..41edb117 100644 --- a/src/components/AuthBadge.tsx +++ b/src/components/AuthBadge.tsx @@ -20,6 +20,7 @@ import DisconnectButton from "./DisconnectButton"; import { SelectNetwork } from "./SelectNetwork"; import ShowUIButton from "./ShowUIButton"; import { SuccessCopyAddress } from "./SuccessCopyAddress"; +import { ToggleLightmode } from "./ui/ToogleLightmode"; export const AuthBadge: React.FC = () => { const { @@ -137,6 +138,16 @@ export const AuthBadge: React.FC = () => { style={{ cursor: "pointer" }} /> + + + Dark mode + + +

diff --git a/src/components/FooterComponent.tsx b/src/components/FooterComponent.tsx index 8f9fcb65..4ede242f 100644 --- a/src/components/FooterComponent.tsx +++ b/src/components/FooterComponent.tsx @@ -4,12 +4,15 @@ import { logoGithub } from "ionicons/icons"; export const FooterComponent: React.FC = () => { return ( - -

+ +

Open source software by{" "} { > @@ -55,10 +58,10 @@ export const FooterComponent: React.FC = () => { > @@ -69,9 +72,7 @@ export const FooterComponent: React.FC = () => { rel="noreferrer noopener" > diff --git a/src/components/Header.tsx b/src/components/Header.tsx index b54fed2c..d13866da 100644 --- a/src/components/Header.tsx +++ b/src/components/Header.tsx @@ -5,7 +5,6 @@ import { IonGrid, IonHeader, IonIcon, - IonImg, IonMenuToggle, IonModal, IonPopover, @@ -13,7 +12,6 @@ import { IonSegment, IonSegmentButton, IonText, - IonTitle, IonToolbar, isPlatform, useIonRouter, @@ -31,28 +29,8 @@ import { PointsPopover } from "./PointsPopover"; import { useRef } from "react"; import { getWeb3State } from "@/store/selectors"; import Store from "@/store"; -import { Link } from "react-router-dom"; import { InstallPWASteps } from "./ui/InstallPWASteps"; - -const styleLogo = { - // margin: '15px auto 20px', - padding: " 0px", - width: "42px", - maxWidth: "42px", - height: "42px", - cursor: "pointer", -}; - -const styleChip = { - position: "absolute", - bottom: "0rem", - right: "-15px", - transform: "scale(0.6)", - padding: " 0rem 0.5rem", - margin: 0, - "--color": "var(--ion-color-primary)", - "--background": "var(--ion-color-warning)", -}; +import { AppLogo } from "./ui/AppLogo"; export function Header({ currentSegment, @@ -99,10 +77,7 @@ export function Header({ router.push('/index', 'back'); }} > - +

>>>x x', userSummaryAndIncentivesGroup) const userSummary = userSummaryAndIncentivesGroup?.find((group) => - group.userReservesData.find(({ reserve }) => reserve.id === id) + group?.userReservesData?.find(({ reserve }) => reserve.id === id) ); const pool = poolGroup.pools.find((r) => r.id === id); diff --git a/src/components/Welcome.tsx b/src/components/Welcome.tsx index 3e49be2f..06b33cf1 100644 --- a/src/components/Welcome.tsx +++ b/src/components/Welcome.tsx @@ -18,6 +18,7 @@ import { FooterComponent } from "./FooterComponent"; import { FAQ } from "./FAQ"; import Store from "@/store"; import { getWeb3State } from "@/store/selectors"; +import { AppLogo } from "./ui/AppLogo"; export function Welcome({ handleSegmentChange, @@ -38,11 +39,14 @@ export function Welcome({ */}
- Hexa Lite logo + /> */} +

Hexa Lite

Build your wealth with crypto assets

@@ -88,7 +92,7 @@ export function Welcome({ app preview @@ -172,6 +176,7 @@ export function Welcome({
login card
@@ -333,13 +336,8 @@ export function Welcome({ width="256px" height="417px" viewBox="0 0 256 417" - version="1.1" - xmlns="http://www.w3.org/2000/svg" preserveAspectRatio="xMidYMid" - style={{ - filter: - "drop-shadow(0px 0px 60px rgba(var(--ion-color-tertiary-rgb),0.5))", - }} + className="dropShadowedElement" > { window.open( @@ -467,7 +464,11 @@ export function Welcome({ {/* Partners Section */} diff --git a/src/components/ui/AppLogo.tsx b/src/components/ui/AppLogo.tsx new file mode 100644 index 00000000..0320681f --- /dev/null +++ b/src/components/ui/AppLogo.tsx @@ -0,0 +1,51 @@ +import { IonIcon, IonImg } from "@ionic/react"; +import React, { useEffect, useMemo, useRef, useState } from "react"; + +const styleLogo = { + padding: " 0px", + width: "42px", + maxWidth: "42px", + height: "42px", + cursor: "pointer", +}; + +export const AppLogo = (props: { + width?: string; + height?: string; + handleClick?: () => void; + style?: any; +}) => { + const { + handleClick, + height = styleLogo.height, + width = styleLogo.width, + style, + } = props; + + return ( + <> +
+ {/* */} + + ); +}; diff --git a/src/components/ui/MenuSetting.tsx b/src/components/ui/MenuSetting.tsx index 5a521790..b0088e27 100644 --- a/src/components/ui/MenuSetting.tsx +++ b/src/components/ui/MenuSetting.tsx @@ -22,6 +22,7 @@ import Store from "@/store"; import { getWeb3State } from "@/store/selectors"; import ConnectButton from "../ConnectButton"; import DisconnectButton from "../DisconnectButton"; +import { ToggleLightmode } from "./ToogleLightmode"; interface MenuSettingsProps { dismiss: ()=> void @@ -70,7 +71,24 @@ export const MenuSettings: React.FC = ({dismiss}) => { Connected - + + + + +

Dark mode

+
+ +

+ Enable or disable dark mode +

+
+
+ +
{ + const [isLightmode, setIsLightmode] = useState( + !document.querySelector('body')?.classList.contains('dark') + ); + + function handleToggle() { + if (typeof window !== 'undefined' && window.localStorage) { + const hasData = localStorage.getItem('hexa-lite_is-lightmode'); + if (hasData) { + localStorage.removeItem('hexa-lite_is-lightmode'); + } else { + localStorage.setItem('hexa-lite_is-lightmode', 'true'); + } + setIsLightmode(!hasData ? true : false); + document.querySelector('body')?.classList.toggle('dark') + } + } + + useEffect(() => { + if (typeof window !== 'undefined' && window.localStorage) { + const isLightmode = localStorage.getItem('hexa-lite_is-lightmode'); + isLightmode + ? setIsLightmode(true) + : setIsLightmode(false); + isLightmode + ? document.querySelector('body')?.classList.remove('dark') + : undefined; + } + return ()=> {}; + }, []); + + return (<> + + ); +} \ No newline at end of file diff --git a/src/containers/DepositContainer.tsx b/src/containers/DepositContainer.tsx index aaaa5e6c..d59c1ec8 100644 --- a/src/containers/DepositContainer.tsx +++ b/src/containers/DepositContainer.tsx @@ -156,6 +156,7 @@ export const DepositContainer = (props: {
{ handleActions('buy'); diff --git a/src/containers/ErrorBoundary.tsx b/src/containers/ErrorBoundary.tsx new file mode 100644 index 00000000..2bd25a7b --- /dev/null +++ b/src/containers/ErrorBoundary.tsx @@ -0,0 +1,40 @@ +import React from "react" + +class ErrorBoundary extends React.Component { + constructor(props: any ) { + super(props) + + // Define a state variable to track whether is an error or not + this.state = { hasError: false } + } + static getDerivedStateFromError(error: Error) { + // Update state so the next render will show the fallback UI + + return { hasError: true } + } + componentDidCatch(error: Error, errorInfo: any) { + // You can use your own error logging service here + console.log({ error, errorInfo }) + } + render() { + // Check if the error is thrown + if (this.state.hasError) { + // You can render any custom fallback UI + return ( +
+

Oops, something went wrong...

+ +
+ ) + } + // Return children components in case of no error + return this.props.children + } +} + +export default ErrorBoundary \ No newline at end of file diff --git a/src/containers/TransferContainer.tsx b/src/containers/TransferContainer.tsx index 686a6917..ef42af0c 100644 --- a/src/containers/TransferContainer.tsx +++ b/src/containers/TransferContainer.tsx @@ -215,15 +215,9 @@ const InputAssetWithDropDown = (props: { return ( <> - + + className="ion-align-items-center">
Promise }) => { >

Destination address

- + - -

Meet the main team

+ +

Meet the main team

{teams.map((t, index) => ( @@ -184,14 +184,14 @@ export default function AboutContainer() { {t.name} -

+

{t.name}
{t.subStatus}

-

{t.post}

+

{t.post}

{t.links.map((l, i) => ( window.open(l.url, "_blank")} > - + ))} @@ -237,8 +237,8 @@ export default function AboutContainer() { style={{ margin: "auto", maxWidth: "1024px" }} > - -

Be a part of Gouvernance

+ +

Be a part of Gouvernance

@@ -248,7 +248,7 @@ export default function AboutContainer() { -

    +
    • Visit the{" "} diff --git a/src/pages/_app.tsx b/src/pages/_app.tsx index 0648c904..6575c043 100755 --- a/src/pages/_app.tsx +++ b/src/pages/_app.tsx @@ -21,6 +21,7 @@ import '../styles/global.scss'; import { AppProps } from 'next/app'; import { outfit } from '@/styles/fonts'; +import ErrorBoundary from '@/containers/ErrorBoundary'; function MyApp({ Component, pageProps }: AppProps) { return ( @@ -124,7 +125,9 @@ function MyApp({ Component, pageProps }: AppProps) { --font-outfit: ${outfit.style.fontFamily}; } `} - + + + ); } diff --git a/src/servcies/lifi.service.ts b/src/servcies/lifi.service.ts index a4f26556..34d065f5 100644 --- a/src/servcies/lifi.service.ts +++ b/src/servcies/lifi.service.ts @@ -817,19 +817,23 @@ export const LIFI_CONFIG = Object.freeze({ }, palette: { grey: { - "800": 'rgba(var(--ion-color-primary-rgb), 0.2)' + "800": 'rgba(var(--ion-color-primary-rgb), 0.4)' + }, + text: { + primary: 'rgb(var(--ion-text-color-rgb))', + secondary: 'rgba(var(--ion-text-color-rgb), 0.6)', }, background: { - paper: "#0f1629", // green + paper: 'rgb(var(--item-background-shader-rgb))', // green // default: '#182449', }, primary: { main: "#0090FF", - contrastText: "#fff", + contrastText: 'rgb(var(--ion-text-color.rgb))', }, secondary: { main: '#4CCCE6', - contrastText: "#fff", + contrastText: 'rgb(var(--ion-text-color.rgb))', } }, }, diff --git a/src/styles/global.scss b/src/styles/global.scss index 2771ddbd..d6698560 100755 --- a/src/styles/global.scss +++ b/src/styles/global.scss @@ -8,6 +8,49 @@ html, body, ion-content { background: #182449; background: var(--background-gradient); } + +body { + .AppLogo { + background: url('/assets/images/logo-colored.svg'); + background-size: contain; + background-repeat: no-repeat; + background-position: center; + min-width: 42px; + min-height: 42px; + cursor: pointer; + } + + .shadowedElement { + box-shadow: 0 0px 50px -30px var(--ion-color-tertiary); + } + .dropShadowedElement { + filter: none; + } + + &.dark { + + .AppLogo { + background: url('/assets/images/logo.svg'); + background-size: contain; + background-repeat: no-repeat; + background-position: center; + min-width: 42px; + min-height: 42px; + } + img { + filter: brightness(.9) contrast(1.2); + } + + .shadowedElement { + box-shadow: 0 0px 100px -20px var(--ion-color-tertiary); + } + .dropShadowedElement { + filter: drop-shadow(0px 0px 60px rgba(var(--ion-color-tertiary-rgb),0.5)); + } + } +} + + ion-content { --background: var(--background-gradient); } @@ -303,7 +346,11 @@ ion-card { -webkit-filter: drop-shadow(rgba(var(--ion-color-primary-rgb), .2) 0px 0px 50px); filter: drop-shadow(rgba(var(--ion-color-primary-rgb), .2) 0px 0px 50px ); - box-shadow: 0 0 12px 0px rgb(0 0 0 / 25%); +} +body.dark { + .widgetWrapper, ion-card:not(.ion-color), .leaderboardPage ion-list { + box-shadow: 0 0 12px 0px rgb(0 0 0 / 25%); + } } .welcomeSection { @@ -643,7 +690,7 @@ ion-accordion:not(.faq) { } ion-item { - --background: rgba(0,0,0, 0.5) !important; + --background: rgba(var(--item-background-shader-rgb), 0.5) !important; --padding-top: 0.4rem; --padding-bottom: 0.4rem; --padding-start: 0; @@ -660,15 +707,15 @@ ion-accordion:not(.faq) { } &:hover { - --background: rgba(var(--ion-color-light-rgb), 0.1) !important; + --background: rgba(var(--ion-color-primary-rgb), 0.1) !important; ion-fab-button { opacity: 1; } } &.item-disabled { - opacity: 1; - --background: rgba(0,0,0, 0.5) !important; + opacity: 0.8; + //--background: rgba(var(--ion-color-dark-contrast-rgb), 0.1) !important; pointer-events: none; ion-grid { @@ -794,7 +841,7 @@ div.MuiScopedCssBaseline-root > .MuiBox-root > .MuiBox-root { backdrop-filter: none; } -div[id^="widget-relative-container"]{ +body.dark div[id^="widget-relative-container"]{ box-shadow: 0 0 12px 0px rgba(0, 0, 0, 0.25); } @@ -879,4 +926,34 @@ div.MuiScopedCssBaseline-root { height: 100%; width: auto!important; } +} + +.ErrorBoundary { + width: 100vw; + height: 100vh; + display: flex; + justify-content: center; + align-items: center; + flex-direction: column; + background: var(--ion-background-color); + color: var(--ion-text-color); + font-family: $font-family; + font-size: 1.5rem; + line-height: 1.5rem; + text-align: center; + padding: 1rem; +} + +.itemInputContainter, +.InputAssetWithDropDown { + > ion-row { + background: var(--item-background-shader); + + padding: 0.65rem 0.5rem; + border-radius: 24px; + margin-bottom: 0.5rem; + } +} +.FooterComponent { + } \ No newline at end of file diff --git a/src/styles/variables.scss b/src/styles/variables.scss index 4d2c5c84..bb4e76e3 100755 --- a/src/styles/variables.scss +++ b/src/styles/variables.scss @@ -80,6 +80,10 @@ --ion-color-dark: #180d68; --ion-color-dark-rgb: 24, 13, 104; + --item-background: transparent; + --item-background-shader: #e2e9ff; + --item-background-shader-rgb: 224, 232, 255; + /* OnBoarding */ --account-center-position-top: -3px; --account-center-border: rgba(var(--ion-color-primary-rgb), 0.15); @@ -190,6 +194,10 @@ body.dark { --background-gradient: linear-gradient(125deg,#182449, rgba(61, 158, 255, 0.2)); --background-shader: #182449; + --item-background: transparent; + --item-background-shader: #0f1629; + --item-background-shader-rgb: 15, 22, 41; + } /* From a6283d90a3f3760a99b9d7dffea5ef7261a3b5d7 Mon Sep 17 00:00:00 2001 From: FazioNico Date: Mon, 25 Mar 2024 13:47:57 +0100 Subject: [PATCH 48/74] refactor: many small clean ui --- public/assets/cryptocurrency-icons/eura.svg | 1 + src/components/AppShell.tsx | 9 ++- src/components/ui/MenuSetting.tsx | 75 ++++++++++++++++++- src/components/ui/WalletAssetEntity.tsx | 5 ++ src/constants/chains.ts | 31 ++++---- .../desktop/LeaderboardContainer.tsx | 12 +-- .../desktop/TokenDetailDesktopContainer.tsx | 70 ++++++++++++++++- .../mobile/TokenDetailMobileContainer.tsx | 70 ++++++++++++++++- .../mobile/WalletMobileContainer.tsx | 5 ++ .../mobile/WelcomeMobileContainer.tsx | 13 +--- src/store/effects/pools.effect.ts | 5 +- src/styles/variables.scss | 4 +- src/utils/isStableAsset.ts | 20 +++++ 13 files changed, 279 insertions(+), 41 deletions(-) create mode 100644 public/assets/cryptocurrency-icons/eura.svg create mode 100644 src/utils/isStableAsset.ts diff --git a/public/assets/cryptocurrency-icons/eura.svg b/public/assets/cryptocurrency-icons/eura.svg new file mode 100644 index 00000000..d828463c --- /dev/null +++ b/public/assets/cryptocurrency-icons/eura.svg @@ -0,0 +1 @@ + diff --git a/src/components/AppShell.tsx b/src/components/AppShell.tsx index b3bdc30d..0906c472 100755 --- a/src/components/AppShell.tsx +++ b/src/components/AppShell.tsx @@ -34,7 +34,6 @@ import { Redirect, Route, useHistory } from "react-router-dom"; import { useEffect, useRef, useState, lazy, Suspense } from "react"; import { Welcome } from "./Welcome"; import { Header } from "./Header"; -import { Leaderboard } from "@/containers/desktop/LeaderboardContainer"; import { NotFoundPage } from "@/containers/NotFoundPage"; import PwaInstall from "./PwaInstall"; import { initializeWeb3 } from "@/store/effects/web3.effects"; @@ -59,6 +58,7 @@ window } catch {} }); +const LeaderboardContainer = lazy(() => import("@/containers/desktop/LeaderboardContainer")); const WalletDesktopContainer = lazy(() => import("@/containers/desktop/WalletDesktopContainer")); const SwapContainer = lazy(() => import("@/containers/desktop/SwapContainer")); const DefiContainer = lazy(() => import("@/containers/desktop/DefiContainer")); @@ -191,7 +191,9 @@ const AppShell = () => { )} /> - } /> + } > + + } /> }> } /> @@ -250,6 +252,9 @@ const AppShell = () => { {isMobilePWADevice && ( + } > + + } /> diff --git a/src/components/ui/MenuSetting.tsx b/src/components/ui/MenuSetting.tsx index b0088e27..8a0303a2 100644 --- a/src/components/ui/MenuSetting.tsx +++ b/src/components/ui/MenuSetting.tsx @@ -15,6 +15,8 @@ import { IonFooter, IonNote, IonButtons, + useIonRouter, + IonPopover, } from "@ionic/react"; import { close, open, openOutline, radioButtonOn, ribbonOutline } from "ionicons/icons"; import { getAddressPoints } from "@/servcies/datas.service"; @@ -23,6 +25,7 @@ import { getWeb3State } from "@/store/selectors"; import ConnectButton from "../ConnectButton"; import DisconnectButton from "../DisconnectButton"; import { ToggleLightmode } from "./ToogleLightmode"; +import { PointsPopover } from "../PointsPopover"; interface MenuSettingsProps { dismiss: ()=> void @@ -31,6 +34,14 @@ interface MenuSettingsProps { export const MenuSettings: React.FC = ({dismiss}) => { const { walletAddress } = Store.useState(getWeb3State); const [points, setPoints] = useState(null); + const [isPointsPopoverOpen, setIsPointsPopoverOpen] = useState(false); + const pointsPopoverRef = useRef(null); + const router = useIonRouter(); + + const openPopover = (e: any) => { + pointsPopoverRef.current!.event = e; + setIsPointsPopoverOpen(true); + }; return ( <> @@ -71,7 +82,69 @@ export const MenuSettings: React.FC = ({dismiss}) => { Connected - + + + + +

      Points

      +
      + +

      + Rank to the leaderboard +

      +
      +
      + openPopover(e)} + > + + + Points + + +
      + { + setPoints(() => null); + setIsPointsPopoverOpen(false); + }} + onWillPresent={async () => { + if (!walletAddress) { + throw new Error('Wallet not connected') + } + const response = await getAddressPoints( + walletAddress + ).catch((error) => {}); + console.log("response", response); + if (response?.data?.totalPoints) { + setPoints(() => response.data.totalPoints); + } else { + setPoints(() => "0"); + } + }} + > + setIsPointsPopoverOpen(false)} + /> + + {asset.name}

      + {isStableAsset(asset.symbol) ? ( + stable + ) : ''} rpc.primary - // )?.url||'', - // }, + { + id: NETWORK.avalanche, + value: 'avalanche', + name: 'Avalanche', + nativeSymbol: 'AVAX', + logo: '/assets/cryptocurrency-icons/avax.svg', + rpcUrl: [ + {primary: false, url:'https://avalanche-c-chain.publicnode.com'}, + {primary: true, url: "https://rpc.ankr.com/avalanche"} + ] + .find( + (rpc) => rpc.primary + )?.url||'', + type: 'evm', + }, // testnets // { // id: 5, diff --git a/src/containers/desktop/LeaderboardContainer.tsx b/src/containers/desktop/LeaderboardContainer.tsx index 20bc57aa..880a0a17 100644 --- a/src/containers/desktop/LeaderboardContainer.tsx +++ b/src/containers/desktop/LeaderboardContainer.tsx @@ -19,8 +19,9 @@ import { import { FooterComponent } from "@/components/FooterComponent"; import { getReadableValue } from "@/utils/getReadableValue"; import { getLeaderboardDatas } from "@/servcies/datas.service"; +import { AppLogo } from "@/components/ui/AppLogo"; -export const Leaderboard: React.FC = () => { +export default function Leaderboard() { const [datas, setDatas] = React.useState<{address: string; totalPoints: string;}[]|null>(null); useEffect(() => { getLeaderboardDatas() @@ -56,14 +57,7 @@ export const Leaderboard: React.FC = () => { class="ion-text-center ion-margin-top ion-padding-top" > - +
      diff --git a/src/containers/desktop/TokenDetailDesktopContainer.tsx b/src/containers/desktop/TokenDetailDesktopContainer.tsx index 7e0346cd..1d8ab651 100644 --- a/src/containers/desktop/TokenDetailDesktopContainer.tsx +++ b/src/containers/desktop/TokenDetailDesktopContainer.tsx @@ -17,6 +17,7 @@ import { IonLabel, IonList, IonListHeader, + IonModal, IonNote, IonRow, IonSelect, @@ -32,7 +33,7 @@ import { ethers } from "ethers"; import Store from "@/store"; import { getWeb3State } from "@/store/selectors"; import { CHAIN_AVAILABLES } from "@/constants/chains"; -import { airplane, chevronDown, close, download, paperPlane, repeat } from "ionicons/icons"; +import { airplane, chevronDown, close, closeSharp, download, paperPlane, repeat } from "ionicons/icons"; import { DataItem } from "@/components/ui/LightChart"; import { getTokenHistoryPrice } from "@/utils/getTokenHistoryPrice"; import { TokenInfo, getTokenInfo } from "@/utils/getTokenInfo"; @@ -40,6 +41,7 @@ import { numberFormat } from "@/utils/numberFormat"; import { currencyFormat } from "@/utils/currencyFormat"; import { TokenDetailDescription } from "@/components/ui/TokenDetailDescription"; import { TokenDetailMarketDetail } from "@/components/ui/TokenDetailMarketData"; +import { isStableAsset } from "@/utils/isStableAsset"; const LightChart = lazy(() => import("@/components/ui/LightChart")); @@ -66,6 +68,7 @@ export const TokenDetailDesktopContainer = (props: { const { walletAddress } = Store.useState(getWeb3State); const [dataChartHistory, setDataChartHistory] = useState([]); const [tokenInfo, setTokenInfo] = useState(undefined); + const [isInfoOpen, setInfoOpen] = useState(false); useEffect(() => { if (!walletAddress) return; @@ -173,6 +176,16 @@ export const TokenDetailDesktopContainer = (props: { )}

      + {isStableAsset(data.symbol) ? ( + { + setInfoOpen(()=> true); + }} > + stable + + ) : ''} @@ -322,6 +335,61 @@ export const TokenDetailDesktopContainer = (props: { + + setInfoOpen(false)} + > + + + + +

      + Informations +

      +
      +
      + + setInfoOpen(false) } + > + + + +
      + + +

      + What is a stablecoin? +

      + + +

      + Stablecoins are a type of cryptocurrency whose value is pegged to another asset, such as a fiat currency or gold, to maintain a stable price. +

      +
      +
      + + +

      + They strive to provide an alternative to the high volatility of popular cryptocurrencies, making them potentially more suitable for common transactions. +

      +
      +
      + + +

      + Stablecoins can be utilized in various blockchain-based financial services and can even be used to pay for goods and services. +

      +
      +
      +
      +
      +
      +
      ); }; diff --git a/src/containers/mobile/TokenDetailMobileContainer.tsx b/src/containers/mobile/TokenDetailMobileContainer.tsx index ed050722..4acb4854 100644 --- a/src/containers/mobile/TokenDetailMobileContainer.tsx +++ b/src/containers/mobile/TokenDetailMobileContainer.tsx @@ -18,6 +18,7 @@ import { IonLabel, IonList, IonListHeader, + IonModal, IonNote, IonRow, IonSelect, @@ -32,12 +33,13 @@ import { ethers } from "ethers"; import Store from "@/store"; import { getWeb3State } from "@/store/selectors"; import { CHAIN_AVAILABLES } from "@/constants/chains"; -import { airplane, chevronDown, close, download, paperPlane } from "ionicons/icons"; +import { airplane, chevronDown, close, closeSharp, download, paperPlane } from "ionicons/icons"; import { DataItem } from "@/components/ui/LightChart"; import { getTokenHistoryPrice } from "@/utils/getTokenHistoryPrice"; import { TokenInfo, getTokenInfo } from "@/utils/getTokenInfo"; import { TokenDetailMarketDetail } from "@/components/ui/TokenDetailMarketData"; import { TokenDetailDescription } from "@/components/ui/TokenDetailDescription"; +import { isStableAsset } from "@/utils/isStableAsset"; const LightChart = lazy(() => import("@/components/ui/LightChart")); @@ -65,6 +67,7 @@ export const TokenDetailMobileContainer = (props: { const { walletAddress } = Store.useState(getWeb3State); const [dataChartHistory, setDataChartHistory] = useState([]); const [tokenInfo, setTokenInfo] = useState(undefined); + const [isInfoOpen, setInfoOpen] = useState(false); useEffect(() => { if (!walletAddress) return; @@ -180,6 +183,16 @@ export const TokenDetailMobileContainer = (props: { )}

      + {isStableAsset(data.symbol) ? ( + { + setInfoOpen(()=> true); + }} + style={{marginTop: '0.5rem'}} + color="success"> + stable + + ) : ''} @@ -351,6 +364,61 @@ export const TokenDetailMobileContainer = (props: { hideEarnBtn={true} /> */} + + setInfoOpen(false)} + > + + + + +

      + Informations +

      +
      +
      + + setInfoOpen(false) } + > + + + +
      + + +

      + What is a stablecoin? +

      + + +

      + Stablecoins are a type of cryptocurrency whose value is pegged to another asset, such as a fiat currency or gold, to maintain a stable price. +

      +
      +
      + + +

      + They strive to provide an alternative to the high volatility of popular cryptocurrencies, making them potentially more suitable for common transactions. +

      +
      +
      + + +

      + Stablecoins can be utilized in various blockchain-based financial services and can even be used to pay for goods and services. +

      +
      +
      +
      +
      +
      +
      ); }; diff --git a/src/containers/mobile/WalletMobileContainer.tsx b/src/containers/mobile/WalletMobileContainer.tsx index 2a95bcc0..c12c3ffe 100644 --- a/src/containers/mobile/WalletMobileContainer.tsx +++ b/src/containers/mobile/WalletMobileContainer.tsx @@ -36,6 +36,7 @@ import { IonRefresher, IonRefresherContent, RefresherEventDetail, + IonChip, } from "@ionic/react"; import { card, download, paperPlane, repeat, settings, settingsOutline } from "ionicons/icons"; import { useState } from "react"; @@ -45,6 +46,7 @@ import { TokenDetailMobileContainer } from "@/containers/mobile/TokenDetailMobil import { EarnMobileContainer } from "@/containers/mobile/EarnMobileContainer"; import { MenuSettings } from "@/components/ui/MenuSetting"; import { currencyFormat } from "@/utils/currencyFormat"; +import { isStableAsset } from "@/utils/isStableAsset"; interface WalletMobileComProps { isMagicWallet: boolean; @@ -330,6 +332,9 @@ class WalletMobileContainer extends WalletBaseComponent<

      + {isStableAsset(asset.symbol) ? ( + stable + ) : ''}

      {currencyFormat.format(asset.balanceUsd)} diff --git a/src/containers/mobile/WelcomeMobileContainer.tsx b/src/containers/mobile/WelcomeMobileContainer.tsx index 3079edf3..9da7a9a0 100644 --- a/src/containers/mobile/WelcomeMobileContainer.tsx +++ b/src/containers/mobile/WelcomeMobileContainer.tsx @@ -4,6 +4,7 @@ import ConnectButton from "../../components/ConnectButton"; import Store from "@/store"; import { getWeb3State } from "@/store/selectors"; import { useEffect } from "react"; +import { AppLogo } from "@/components/ui/AppLogo"; export default function WelcomeMobileContainer() { const { walletAddress } = Store.useState(getWeb3State); @@ -24,15 +25,9 @@ export default function WelcomeMobileContainer() { className="ion-text-center ion-justify-content-center ion-align-items-center" > - - +

      Hexa Lite

      diff --git a/src/store/effects/pools.effect.ts b/src/store/effects/pools.effect.ts index 194184d7..d79cf46a 100644 --- a/src/store/effects/pools.effect.ts +++ b/src/store/effects/pools.effect.ts @@ -2,7 +2,7 @@ import { IUserSummary } from "@/interfaces/reserve.interface"; import { AavePool } from "@/pool/Aave.pool"; import { IMarketConfig, SolendPool } from "@/pool/solend.pool"; import { patchMarketPoolsState, patchPoolsState, setPoolsState } from "../actions"; -import { CHAIN_AVAILABLES, NETWORK } from "@/constants/chains"; +import { CHAIN_AVAILABLES as ALL_CHAINS, NETWORK } from "@/constants/chains"; import { MARKETTYPE, getMarkets, @@ -14,6 +14,9 @@ import { getAssetIconUrl } from "@/utils/getAssetIconUrl"; import { MarketPool } from "@/pool/Market.pool"; import { PublicKey, Connection as SolanaClient } from "@solana/web3.js"; +// temporary disable Avalanche from the lending available networks +const CHAIN_AVAILABLES = ALL_CHAINS.filter((chain) => chain.id !== NETWORK.avalanche); + const loadAavePools = async () => { console.log("[INFO] {{loadAavePools}} init context... "); const currentTimestamp = dayjs().unix(); diff --git a/src/styles/variables.scss b/src/styles/variables.scss index bb4e76e3..12170d01 100755 --- a/src/styles/variables.scss +++ b/src/styles/variables.scss @@ -71,8 +71,8 @@ --ion-background-color: #f5f8ff; --ion-background-color-rgb: 245,248,255; - --background-gradient: #ecf2fe; - --background-shader: #e2e9ff; + --background-gradient: #e6eefe; + --background-shader: #dee6ff; --ion-text-color: #180d68; --ion-text-color-rgb: 24, 13, 104; diff --git a/src/utils/isStableAsset.ts b/src/utils/isStableAsset.ts new file mode 100644 index 00000000..cfdeeae9 --- /dev/null +++ b/src/utils/isStableAsset.ts @@ -0,0 +1,20 @@ +export const isStableAsset = (symbol: string) => { + const stableAssets = [ + "USDC", + "USDT", + "DAI", + "BUSD", + "TUSD", + "sUSD", + "USDbC", + "FRAX", + "LUSD", + "PYUSD", + "crvUSD", + "FDUSD", + "GHO", + ]; + return stableAssets + .map((a) => a.toLocaleLowerCase()) + .includes(symbol.toLocaleLowerCase()); +}; From a00a4377b4962d9ced69779040488f465965f422 Mon Sep 17 00:00:00 2001 From: FazioNico Date: Tue, 26 Mar 2024 11:16:52 +0100 Subject: [PATCH 49/74] feat: add Medium articles Closes #41 --- src/components/Welcome.tsx | 171 +++++++++++++++++-------- src/components/ui/PublicationsList.tsx | 53 ++++++++ src/servcies/medium.service.ts | 41 ++++++ src/styles/global.scss | 24 ++++ 4 files changed, 236 insertions(+), 53 deletions(-) create mode 100644 src/components/ui/PublicationsList.tsx create mode 100644 src/servcies/medium.service.ts diff --git a/src/components/Welcome.tsx b/src/components/Welcome.tsx index 06b33cf1..ba152452 100644 --- a/src/components/Welcome.tsx +++ b/src/components/Welcome.tsx @@ -8,9 +8,7 @@ import { IonText, useIonRouter, } from "@ionic/react"; -import { - logoGithub, -} from "ionicons/icons"; +import { logoGithub } from "ionicons/icons"; import { ETHLiquidStakingstrategyCard } from "./ETHLiquidStakingstrategy"; import { CHAIN_AVAILABLES } from "@/constants/chains"; import RevealComp from "@/components/RevealComp"; @@ -19,6 +17,7 @@ import { FAQ } from "./FAQ"; import Store from "@/store"; import { getWeb3State } from "@/store/selectors"; import { AppLogo } from "./ui/AppLogo"; +import { PublicationsList } from "./ui/PublicationsList"; export function Welcome({ handleSegmentChange, @@ -29,12 +28,19 @@ export function Welcome({ const router = useIonRouter(); return ( - - + overflow: "hidden", + borderBottom: "solid 1px rgba(var(--ion-color-primary-rgb), 0.5)", + }} + > + {/* */} @@ -44,12 +50,21 @@ export function Welcome({ src={"./assets/images/logo.svg"} alt="Hexa Lite logo" /> */} - +

      Hexa Lite

      -

      Build your wealth with crypto assets

      +

      + Build your wealth with{" "} + + crypto assets + +

      {/* @@ -66,7 +81,7 @@ export function Welcome({ { - router.push("wallet", 'forward'); + router.push("wallet", "forward"); handleSegmentChange({ detail: { value: "wallet" } }); }} > @@ -77,24 +92,26 @@ export function Welcome({ fill="clear" size="small" onClick={(e) => { - router.push("available-platforms", 'forward'); + router.push("available-platforms", "forward"); }} > - - Available on iOS, Android and Desktop - + Available on iOS, Android and Desktop
- app preview + app preview
@@ -102,7 +119,8 @@ export function Welcome({ @@ -128,9 +146,7 @@ export function Welcome({ - + @@ -141,11 +157,17 @@ export function Welcome({ lineHeight: "2rem", }} > - Create or connect an account
under a minute + Create or connect an account +
under a minute

- Hexa Lite ensures a secure and reliable user experience, enabling everyone to own their own assets. - Users can enjoy the advantages of blockchain technology and DeFi services without the need to manage private keys or seed phrases. + Hexa Lite ensures a secure and reliable user experience,{" "} + + enabling everyone to own their own assets + + . Users can enjoy the advantages of blockchain technology + and DeFi services without the need to manage private keys + or seed phrases.

- Safely deposit your liquidity without any restrictions or censorship into DeFi protocols across - more than 40 markets and{" "} + Safely deposit your liquidity{" "} + + without any restrictions or censorship + {" "} + into DeFi protocols across more than 40 markets and{" "} {CHAIN_AVAILABLES.filter((c) => c.type === "evm").length}{" "} EVM-Compatible blockchains. Earn substantial interest while retaining complete control over your assets. @@ -220,9 +244,9 @@ export function Welcome({ { - router.push("defi", 'forward'); - handleSegmentChange({ detail: { value: "defi" } }) + onClick={(e) => { + router.push("defi", "forward"); + handleSegmentChange({ detail: { value: "defi" } }); }} > Start Deposit @@ -268,14 +292,18 @@ export function Welcome({

Unlock the potential of your assets by earn interest through Liquid Staking.
- Stake with DeFi protocols without any lockup periods or restrictions. + Stake with DeFi protocols{" "} + + without any lockup periods or restrictions + + .

{ - router.push("earn", 'forward'); - handleSegmentChange({ detail: { value: "earn" } }) + onClick={(e) => { + router.push("earn", "forward"); + handleSegmentChange({ detail: { value: "earn" } }); }} > Start Earning @@ -318,10 +346,10 @@ export function Welcome({ Multi Chains

- Hexa Lite support Bitcoin, Solana and +20 EVM-Compatible blockchain such as - Ethereum, Polygon, Binance Smart Chain, Optimism, - Arbitrum, etc. without have to care about how to manage - networks changes. + Hexa Lite support Bitcoin, Solana and +20 EVM-Compatible + blockchain such as Ethereum, Polygon, Binance Smart Chain, + Optimism, Arbitrum, etc. without have to care about how to + manage networks changes.

@@ -409,8 +437,8 @@ export function Welcome({ { - router.push("about", 'forward'); + onClick={(e) => { + router.push("about", "forward"); }} > About the team @@ -464,11 +492,11 @@ export function Welcome({ {/* Partners Section */} @@ -656,6 +684,43 @@ export function Welcome({ + {/* Publications */} + + + + + +

+ Latest articles +

+
+ +

+ from Medium blog +

+
+ + + + + + +
+
+
+
+ {/* FAQ */} { - router.push("wallet", 'forward'); - handleSegmentChange({ detail: { value: "wallet" } }) + onClick={(e) => { + router.push("wallet", "forward"); + handleSegmentChange({ detail: { value: "wallet" } }); }} > Launch App diff --git a/src/components/ui/PublicationsList.tsx b/src/components/ui/PublicationsList.tsx new file mode 100644 index 00000000..8e4ddb96 --- /dev/null +++ b/src/components/ui/PublicationsList.tsx @@ -0,0 +1,53 @@ +import { getPublications } from "@/servcies/medium.service"; +import { IonButton, IonCol, IonImg, IonSpinner, IonText } from "@ionic/react"; +import { useEffect, useState } from "react"; + +type Publication = { + url: string; + title: string; + imgUrl: string; + dateTime: number; + short: string; +}; +export const PublicationsList = () => { + const [publications, setPublications] = useState([]); + + useEffect(() => { + getPublications().then((result) => setPublications(() => result)); + }, []); + + return publications.length <= 0 ? ( + + ) : ( + <> + {publications.map((p) => ( + window.open(p.url, "_blank")} + > + + +

{p.title.replace('Hexa Lite:', '')}

+
+ +

{p.short.slice(0, 150)}... [read more]

+
+
+ ))} + + + + SEE ALL ARTICLES + + + + + ); +}; diff --git a/src/servcies/medium.service.ts b/src/servcies/medium.service.ts new file mode 100644 index 00000000..71a57260 --- /dev/null +++ b/src/servcies/medium.service.ts @@ -0,0 +1,41 @@ + +export const getPublications = async (): Promise<{ + url: string; + title: string; + imgUrl: string; + dateTime: number; + short: string; +}[]> => { + const publications = [ + { + url: 'https://medium.com/@hexaonelabs/hexa-lite-transforming-the-landscape-of-decentralized-finance-c5ba5079c021', + title: 'Hexa Lite: Transforming the Landscape of Decentralized Finance', + imgUrl: 'https://miro.medium.com/v2/resize:fit:350/format:webp/1*o_hhgfFIZNQcGeQrFZm2rA.png', + dateTime: Date.parse('01/17/2024'), + short: 'Welcome to the future of decentralized finance with Hexa Lite, a groundbreaking platform that opens the doors of DeFi to a broader audience. Designed to simplify access to decentralized financial services, Hexa Lite pushes the boundaries to provide a simple and accessible user experience for all.' + }, + { + url: 'https://medium.com/@hexaonelabs/demystifying-defi-how-hexa-lite-makes-decentralized-finance-accessible-to-all-dd62dbe06410', + title: 'Demystifying DeFi: How Hexa Lite Makes Decentralized Finance Accessible to All', + imgUrl: 'https://miro.medium.com/v2/resize:fit:350/format:webp/1*0fw1ACIj4zvS-FYhwp8TpA.png', + dateTime: Date.parse('01/24/2024'), + short: 'Decentralized Finance, or DeFi, is undoubtedly one of the hottest topics in the current financial landscape. However, behind the technical jargon and apparent opportunities, lies a complex and often intimidating world, deterring many potential users.' + }, + { + url: 'https://medium.com/@hexaonelabs/the-benefits-of-liquid-staking-with-hexa-lite-maximize-your-earnings-without-compromise-2e3852ead822', + title: 'The Benefits of Liquid Staking with Hexa Lite: Maximize Your Earnings Without Compromise', + imgUrl: 'https://miro.medium.com/v2/resize:fit:350/format:webp/1*ClE8BjpiHl2NYF4Gu69JNg.png', + dateTime: Date.parse('01/31/2024'), + short: 'Decentralized Finance (DeFi) is a revolution, but for many, liquid staking may seem like a mountain to climb. In this article, we will explore the complexities of liquid staking in DeFi and discover how Hexa Lite simplifies this experience, giving users the opportunity to maximize their earnings without compromise.' + }, + { + url: 'https://medium.com/@hexaonelabs/hexa-lite-your-gateway-to-seamless-authentication-c7f7feff5281', + title: 'Hexa Lite: Your Gateway to Seamless Authentication', + imgUrl: 'https://miro.medium.com/v2/resize:fit:350/format:webp/1*P89ZVTGsO0VWWw6jtZdEwA.png', + dateTime: Date.parse('03/26/2024'), + short: 'Experience the next level of simplicity and security with Hexa Lite’s one-click login process. Say goodbye to cumbersome account creation steps and hello to effortless access to our platform. With just a few clicks, you can sign up or log in using your email address or preferred social authentication method.' + }, + ]; + + return publications.sort((a, b) => b.dateTime - a.dateTime); +} \ No newline at end of file diff --git a/src/styles/global.scss b/src/styles/global.scss index d6698560..f104e3f7 100755 --- a/src/styles/global.scss +++ b/src/styles/global.scss @@ -956,4 +956,28 @@ div.MuiScopedCssBaseline-root { } .FooterComponent { +} + +.PublicationItem { + cursor: pointer; + transition: all 125ms ease-in-out; + overflow: hidden; + + ion-img { + position: relative; + } + + &:hover { + ion-img::after { + content: ''; + position: absolute; + top: 0; + width: 100%; + height: 100%; + background-color: rgba(var(--ion-color-primary-rgb), 0.5); + } + ion-text { + opacity: 0.6; + } + } } \ No newline at end of file From ae2a69bcd0e13930ab1d07b79971055cc4859d19 Mon Sep 17 00:00:00 2001 From: FazioNico Date: Tue, 26 Mar 2024 12:08:29 +0100 Subject: [PATCH 50/74] refactor: update partners and integrations --- public/assets/images/mtpelerin.png | Bin 0 -> 1583 bytes src/components/ETHLiquidStakingstrategy.tsx | 4 ++-- src/components/MATICLiquidStakingstrategy.tsx | 6 +++--- src/components/Welcome.tsx | 10 +++++----- 4 files changed, 10 insertions(+), 10 deletions(-) create mode 100644 public/assets/images/mtpelerin.png diff --git a/public/assets/images/mtpelerin.png b/public/assets/images/mtpelerin.png new file mode 100644 index 0000000000000000000000000000000000000000..47b92a6e36b4710bfcf49c80f9acc897ca67c493 GIT binary patch literal 1583 zcmV+~2GIG5P)Px#8&FJCMNDaNWy0rT!{}zh=3d3@UB>WT#_wLn@L9(4 z7+s8K00008bW%=J0Q|4pg)vwdoOWs3000G^NklwRM$-bvq{hR;qVW!fdQBDBqy3+=qVYP2I?Y$esMJMcD0Mz2H6E0W zLDYk1P>(^>`~KALKoOCm+`jXQ421-3Fseddejn9g<`7X$(l+^!TP}*LV)bBym zlj3XH0j2G{Y`cl2eodL236{DXM3Orzof&a*2>3*I6MAhW3lO#Tr0az5ok9I*)fLJp zY6BmmsP)3m-t@MNC)i~jMWyZJ8&t=azlBkkiSPI{)+V0y zP2o__49vh+pG>vkE=l8^zXArO+Hh6R%KlO|%iaR1PxXj*Z%FZs_8&fHvh$>~)o&?$ zs#pEdAMM_e^t9x^Lr);)t7F2@z;?{q%Fflt_L0$!2f3;X4{3VTzP@xoNb$FRlWj)4 zHC7o`E#6?MO}MZ+O*OBa_{wxTS%9f^U9J6_eu5hNB9BX z_~+G#K0V|QKUBYtmvHLJj8@Zq{3Mm2@;)>C8Jwk-`=r*j@0OVqJN`ts^DNnRqK2^5m+EIax%E=o)f$z{zZmUyXPb@#3_7ycfL8_w9z3?JilzyK}CO z8JTS;(um}5KI+e^dtJX{8}hmnZyItg7w&Fdd7f$?p1IsyK78bMS|!t?0$c6|lI`$N zJ2s}&_DN||@%fRvUndtVot``mx{I9ZbW+h__s^e zh_o{AEcw>pYZRZ6S4Y^U6M%aL$l#I6DD4hKssJY2U^B9|l;I86NwYd%tIfWg2l{+n zjdy!8Wx$kGsB$R>{c)SZ?q8G)(tss{WRj$clsALMhijxf;2KA^(BxfdInoU2$7i&? zL2s+b%&>1hd;>n!z0Sfo9^hnuqF!`e!4u+hYF-L|<1?cMKRSrQ*_pZB>)(mZt`581 zGuN|(<%+)36uik5yua3?NV>J($KKj|Xcc0xR^bnCg+>mdj`uyz6R{ zw0f434~tpUvp#V+?2b|J^r3ZRl+~pTJOQ6HCDpS6=WD^Nf`2Y$6GnY1mq8NDn~jLs z!T~;8Smj8229hC1Dw!F+^~#4s)tn|Z+`VzmSyUnuBO@gk8CX4gDtF^Ekh|xyw|lMK zHgeAFJ(gPVPSf5js-BzN9Db8azQ0yzwX)=`Jz1-;8{u)4wsCVSG#=?v9FY~jF2z;j zWUd-#!mh?~yKOZ{hjk4SPp6~kQcQUzsW@_07JiHPFr1_!!~KB!iIk2s zivAH(&vt2scX_Ghl+tqga5+`HU@gE+e+9&n%bz^1`&gk~_rX-`@}%0O=;3{>+J&j` zV^pj0aoqK1_8K3#%BIeGt`Ds0**hDDKRpB7TLmkA&yMZ!VyEHbwstSUt7mORV&iO{ z^HnU~_S9)cY;~IUeErL-Q>}Wo)rz=ka;x$F^_9qTpZaTP$RJpCE?8?X_`-mBSE1(! z`vspa6nsrW@C^;Us{8ZY_?JV-@1@*usb|Tr#NgGl{Q(I4Z5+Wn&6lj66?yY&F89)x z-1}yNx)i;vX{LjH%T7>(WRzD+5BKvj)w3XKac!a3d!#UGxmQ@9^Y-j^6c7*)5D*X$ h5D*X$5D@T!@E;PpTS*0jcRK(8002ovPDHLkV1gs4Ad>(9 literal 0 HcmV?d00001 diff --git a/src/components/ETHLiquidStakingstrategy.tsx b/src/components/ETHLiquidStakingstrategy.tsx index d93512ca..7cdc160c 100644 --- a/src/components/ETHLiquidStakingstrategy.tsx +++ b/src/components/ETHLiquidStakingstrategy.tsx @@ -244,8 +244,8 @@ export function ETHLiquidStakingstrategyCard(props: { asImage?: boolean, asItem? {strategy.name} - - {strategy.type} + + {strategy.type}

diff --git a/src/components/MATICLiquidStakingstrategy.tsx b/src/components/MATICLiquidStakingstrategy.tsx index 59eabc52..459f237a 100644 --- a/src/components/MATICLiquidStakingstrategy.tsx +++ b/src/components/MATICLiquidStakingstrategy.tsx @@ -230,8 +230,8 @@ export function MATICLiquidStakingstrategyCard(props: { asImage?: boolean, asIte {strategy.name} - - {strategy.type} + + {strategy.type}

@@ -483,7 +483,7 @@ export function MATICLiquidStakingstrategyCard(props: { asImage?: boolean, asIte - + diff --git a/src/components/Welcome.tsx b/src/components/Welcome.tsx index ba152452..519ed912 100644 --- a/src/components/Welcome.tsx +++ b/src/components/Welcome.tsx @@ -661,9 +661,9 @@ export function Welcome({ MAGIC - {/* + @@ -673,11 +673,11 @@ export function Welcome({ height: "65px", margin: "0.5rem auto", }} - src="./assets/images/onramp-logo-emblem.svg" + src="./assets/images/mtpelerin.png" > - ONRAMP + MT.PELERIN - */} + From 9ae16145a4b52ef2eb1d35f9d83f7194ad62940e Mon Sep 17 00:00:00 2001 From: FazioNico Date: Tue, 26 Mar 2024 12:28:40 +0100 Subject: [PATCH 51/74] feat: add feedback solution Closes #42 --- src/components/AuthBadge.tsx | 35 +++++++++++++++++++++----- src/components/ui/MenuSetting.tsx | 21 ++++++++++++++++ src/components/ui/PublicationsList.tsx | 3 ++- src/styles/global.scss | 2 ++ 4 files changed, 54 insertions(+), 7 deletions(-) diff --git a/src/components/AuthBadge.tsx b/src/components/AuthBadge.tsx index 41edb117..a9d543e6 100644 --- a/src/components/AuthBadge.tsx +++ b/src/components/AuthBadge.tsx @@ -4,6 +4,7 @@ import Store from "@/store"; import { getWeb3State } from "@/store/selectors"; import { IonAvatar, + IonButton, IonIcon, IonItem, IonLabel, @@ -15,6 +16,7 @@ import { import { checkmarkCircle, copyOutline, + openOutline, } from "ionicons/icons"; import DisconnectButton from "./DisconnectButton"; import { SelectNetwork } from "./SelectNetwork"; @@ -142,12 +144,33 @@ export const AuthBadge: React.FC = () => { lines="none" button={false} style={{ "--background": "transparent" }} - > - - Dark mode - - - + > + + Dark mode + + + + + + +

Feedback

+
+ +

+ Send your feedback +

+
+
+ { + window.open('https://forms.gle/Dx25eG66TMxyFfh8A', '_blank') + }}> + + +
diff --git a/src/components/ui/MenuSetting.tsx b/src/components/ui/MenuSetting.tsx index 8a0303a2..462e41d1 100644 --- a/src/components/ui/MenuSetting.tsx +++ b/src/components/ui/MenuSetting.tsx @@ -162,6 +162,27 @@ export const MenuSettings: React.FC = ({dismiss}) => { + + + +

Feedback

+
+ +

+ Send your feedback +

+
+
+ { + window.open('https://forms.gle/Dx25eG66TMxyFfh8A', '_blank') + }}> + + +
{ ) : ( <> - {publications.map((p) => ( + {publications.map((p, i) => ( Date: Tue, 26 Mar 2024 13:07:27 +0100 Subject: [PATCH 52/74] refactor: add latest article --- src/servcies/medium.service.ts | 13 +++++++++++-- 1 file changed, 11 insertions(+), 2 deletions(-) diff --git a/src/servcies/medium.service.ts b/src/servcies/medium.service.ts index 71a57260..4aefbc79 100644 --- a/src/servcies/medium.service.ts +++ b/src/servcies/medium.service.ts @@ -32,10 +32,19 @@ export const getPublications = async (): Promise<{ url: 'https://medium.com/@hexaonelabs/hexa-lite-your-gateway-to-seamless-authentication-c7f7feff5281', title: 'Hexa Lite: Your Gateway to Seamless Authentication', imgUrl: 'https://miro.medium.com/v2/resize:fit:350/format:webp/1*P89ZVTGsO0VWWw6jtZdEwA.png', - dateTime: Date.parse('03/26/2024'), + dateTime: Date.parse('03/25/2024'), short: 'Experience the next level of simplicity and security with Hexa Lite’s one-click login process. Say goodbye to cumbersome account creation steps and hello to effortless access to our platform. With just a few clicks, you can sign up or log in using your email address or preferred social authentication method.' }, + { + url: 'https://medium.com/@hexaonelabs/introducing-our-new-mobile-and-desktop-application-interface-try-it-now-7e0df3c1fdcd', + title: 'Introducing Our New Mobile and Desktop Application Interface: Try It Now!', + imgUrl: 'https://miro.medium.com/v2/resize:fit:350/format:webp/1*hTGoxycGxTQO6Iw94Y4iUw.png', + dateTime: Date.parse('03/26/2024'), + short: 'We are excited to announce the launch of our new mobile and desktop application interface! Our team has been working tirelessly to create a seamless and intuitive user experience that will make your journey with Hexa Lite even more enjoyable.' + } ]; - return publications.sort((a, b) => b.dateTime - a.dateTime); + return publications + .sort((a, b) => b.dateTime - a.dateTime) + .slice(0, 3); } \ No newline at end of file From 4f0a639910516ede25cafdf56913caaa589cb7c3 Mon Sep 17 00:00:00 2001 From: FazioNico Date: Tue, 26 Mar 2024 18:00:00 +0100 Subject: [PATCH 53/74] fix: use correct params to display 4 element --- src/servcies/medium.service.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/servcies/medium.service.ts b/src/servcies/medium.service.ts index 4aefbc79..766748e6 100644 --- a/src/servcies/medium.service.ts +++ b/src/servcies/medium.service.ts @@ -46,5 +46,5 @@ export const getPublications = async (): Promise<{ return publications .sort((a, b) => b.dateTime - a.dateTime) - .slice(0, 3); + .slice(0, 4); } \ No newline at end of file From 586cc701ddf5951b51e7145d7a69af0b0f72f4b8 Mon Sep 17 00:00:00 2001 From: FazioNico Date: Tue, 26 Mar 2024 23:32:58 +0100 Subject: [PATCH 54/74] refactor: typo --- src/components/Welcome.tsx | 20 ++++++++------------ 1 file changed, 8 insertions(+), 12 deletions(-) diff --git a/src/components/Welcome.tsx b/src/components/Welcome.tsx index 519ed912..6738bd56 100644 --- a/src/components/Welcome.tsx +++ b/src/components/Welcome.tsx @@ -161,13 +161,12 @@ export function Welcome({
under a minute

- Hexa Lite ensures a secure and reliable user experience,{" "} + Get started seamlessly! Connect or create an account in less than a minute.{" "} + Whether through social login, email, or your existing wallet, our platform ensures a{" "} - enabling everyone to own their own assets + smooth onboarding experience - . Users can enjoy the advantages of blockchain technology - and DeFi services without the need to manage private keys - or seed phrases. + . Take control of your financial path with ease.

- Unlock the potential of your assets by earn interest - through Liquid Staking.
- Stake with DeFi protocols{" "} - - without any lockup periods or restrictions - - . + Unlock higher earnings without locking your assets!{" "} + Liquid Staking offers attractive interest rates on your crypto,{" "} + keeping your funds accessible at all times.{" "} + It's the perfect balance of liquidity and profitability. Now it's time to maximize your returns.

Date: Wed, 27 Mar 2024 00:40:20 +0100 Subject: [PATCH 55/74] refactor: use third-parties from Nextjs --- package-lock.json | 22 ++++++++++++++++++++-- package.json | 1 + src/pages/_document.tsx | 4 +++- 3 files changed, 24 insertions(+), 3 deletions(-) diff --git a/package-lock.json b/package-lock.json index bb228caf..bae2d402 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,12 +1,12 @@ { "name": "hexa-lite", - "version": "1.0.8", + "version": "1.1.0", "lockfileVersion": 3, "requires": true, "packages": { "": { "name": "hexa-lite", - "version": "1.0.8", + "version": "1.1.0", "dependencies": { "@0xsquid/widget": "^1.6.23", "@aave/contract-helpers": "^1.21.1", @@ -32,6 +32,7 @@ "@magic-ext/solana": "^18.2.0", "@moonpay/moonpay-js": "^0.5.0", "@moonpay/moonpay-react": "^1.6.1", + "@next/third-parties": "^14.1.4", "@solana/web3.js": "^1.87.6", "@solendprotocol/solend-sdk": "^0.7.6", "@types/jest": "^26.0.20", @@ -5963,6 +5964,18 @@ "node": ">= 10" } }, + "node_modules/@next/third-parties": { + "version": "14.1.4", + "resolved": "https://registry.npmjs.org/@next/third-parties/-/third-parties-14.1.4.tgz", + "integrity": "sha512-e/kpEFq5/ZPhHkxpJkvhMfLp3OC6KCBou0/BV8BvgjXAPgEo6sa0ZXe0l4ZEb3wcA7NIEHIpqCmjU5Z7QAHcKQ==", + "dependencies": { + "third-party-capital": "1.0.20" + }, + "peerDependencies": { + "next": "^13.0.0 || ^14.0.0", + "react": "^18.2.0" + } + }, "node_modules/@noble/curves": { "version": "1.3.0", "resolved": "https://registry.npmjs.org/@noble/curves/-/curves-1.3.0.tgz", @@ -29904,6 +29917,11 @@ "integrity": "sha512-N+8UisAXDGk8PFXP4HAzVR9nbfmVJ3zYLAWiTIoqC5v5isinhr+r5uaO8+7r3BMfuNIufIsA7RdpVgacC2cSpw==", "dev": true }, + "node_modules/third-party-capital": { + "version": "1.0.20", + "resolved": "https://registry.npmjs.org/third-party-capital/-/third-party-capital-1.0.20.tgz", + "integrity": "sha512-oB7yIimd8SuGptespDAZnNkzIz+NWaJCu2RMsbs4Wmp9zSDUM8Nhi3s2OOcqYuv3mN4hitXc8DVx+LyUmbUDiA==" + }, "node_modules/thread-stream": { "version": "0.15.2", "resolved": "https://registry.npmjs.org/thread-stream/-/thread-stream-0.15.2.tgz", diff --git a/package.json b/package.json index 75446452..19b3071c 100644 --- a/package.json +++ b/package.json @@ -38,6 +38,7 @@ "@magic-ext/solana": "^18.2.0", "@moonpay/moonpay-js": "^0.5.0", "@moonpay/moonpay-react": "^1.6.1", + "@next/third-parties": "^14.1.4", "@solana/web3.js": "^1.87.6", "@solendprotocol/solend-sdk": "^0.7.6", "@types/jest": "^26.0.20", diff --git a/src/pages/_document.tsx b/src/pages/_document.tsx index b3290c8b..1e89955b 100644 --- a/src/pages/_document.tsx +++ b/src/pages/_document.tsx @@ -1,5 +1,6 @@ import { Html, Head, Main, NextScript } from 'next/document' - +import { GoogleAnalytics } from '@next/third-parties/google'; + export default function Document() { return ( @@ -8,6 +9,7 @@ export default function Document() {
+ ) } \ No newline at end of file From 01d7c25c56b68fa710ccf1de13ba2ed31f519ee8 Mon Sep 17 00:00:00 2001 From: FazioNico Date: Wed, 27 Mar 2024 01:29:39 +0100 Subject: [PATCH 56/74] refactor: mv to correct place --- src/pages/_app.tsx | 3 +++ src/pages/_document.tsx | 2 -- 2 files changed, 3 insertions(+), 2 deletions(-) diff --git a/src/pages/_app.tsx b/src/pages/_app.tsx index 6575c043..915204f0 100755 --- a/src/pages/_app.tsx +++ b/src/pages/_app.tsx @@ -22,6 +22,8 @@ import '../styles/global.scss'; import { AppProps } from 'next/app'; import { outfit } from '@/styles/fonts'; import ErrorBoundary from '@/containers/ErrorBoundary'; +import Script from 'next/script'; +import { GoogleAnalytics } from '@next/third-parties/google' function MyApp({ Component, pageProps }: AppProps) { return ( @@ -128,6 +130,7 @@ function MyApp({ Component, pageProps }: AppProps) { + ); } diff --git a/src/pages/_document.tsx b/src/pages/_document.tsx index 1e89955b..88195dd0 100644 --- a/src/pages/_document.tsx +++ b/src/pages/_document.tsx @@ -1,5 +1,4 @@ import { Html, Head, Main, NextScript } from 'next/document' -import { GoogleAnalytics } from '@next/third-parties/google'; export default function Document() { return ( @@ -9,7 +8,6 @@ export default function Document() {
- ) } \ No newline at end of file From 29e75666ed04bdbef2e7ab27dd352e7dbc2fb926 Mon Sep 17 00:00:00 2001 From: FazioNico Date: Mon, 1 Apr 2024 14:28:42 +0200 Subject: [PATCH 57/74] fix: use default prefers-color-scheme --- src/components/AppShell.tsx | 25 ++++++++++++++++--------- src/components/ui/ToogleLightmode.tsx | 19 +++---------------- 2 files changed, 19 insertions(+), 25 deletions(-) diff --git a/src/components/AppShell.tsx b/src/components/AppShell.tsx index 0906c472..b37d421e 100755 --- a/src/components/AppShell.tsx +++ b/src/components/AppShell.tsx @@ -96,6 +96,18 @@ const isMobilePWADevice = Boolean(isPlatform("electron")) || Boolean(isPlatform("mobile")) && !Boolean(isPlatform("mobileweb")); +const setPreferScheme = () => { + const prefersLightScheme = window.matchMedia("(prefers-color-scheme: light)"); + if (prefersLightScheme.matches) { + document.querySelector('body')?.classList.remove('dark'); + if (typeof window !== 'undefined' && window.localStorage) { + localStorage.setItem('hexa-lite_is-lightmode', 'true'); + } + } else { + localStorage.setItem('hexa-lite_is-lightmode', 'false'); + } +} + const AppShell = () => { // get params from url `s=` const { pathname = "/swap" } = window.location; @@ -135,19 +147,14 @@ const AppShell = () => { initializeWeb3(); }, []); - // useEffect(() => { - // const prefersDarkScheme = window.matchMedia("(prefers-color-scheme: dark)"); - // if (!prefersDarkScheme.matches) { - // document.querySelector('body')?.classList.toggle('dark'); - // } - // }, []); - useEffect(() => { if (typeof window !== 'undefined' && window.localStorage) { const isLightmode = localStorage.getItem('hexa-lite_is-lightmode'); - isLightmode + isLightmode && isLightmode === 'true' ? document.querySelector('body')?.classList.remove('dark') - : undefined; + : setPreferScheme(); + } else { + setPreferScheme(); } return ()=> {}; }, []); diff --git a/src/components/ui/ToogleLightmode.tsx b/src/components/ui/ToogleLightmode.tsx index d76f51ca..d620a6a2 100644 --- a/src/components/ui/ToogleLightmode.tsx +++ b/src/components/ui/ToogleLightmode.tsx @@ -9,29 +9,16 @@ export const ToggleLightmode = () => { function handleToggle() { if (typeof window !== 'undefined' && window.localStorage) { const hasData = localStorage.getItem('hexa-lite_is-lightmode'); - if (hasData) { - localStorage.removeItem('hexa-lite_is-lightmode'); + if (hasData && hasData === 'true') { + localStorage.setItem('hexa-lite_is-lightmode', 'false'); } else { localStorage.setItem('hexa-lite_is-lightmode', 'true'); } - setIsLightmode(!hasData ? true : false); + setIsLightmode(!Boolean(hasData) ? true : false); document.querySelector('body')?.classList.toggle('dark') } } - useEffect(() => { - if (typeof window !== 'undefined' && window.localStorage) { - const isLightmode = localStorage.getItem('hexa-lite_is-lightmode'); - isLightmode - ? setIsLightmode(true) - : setIsLightmode(false); - isLightmode - ? document.querySelector('body')?.classList.remove('dark') - : undefined; - } - return ()=> {}; - }, []); - return (<> Date: Mon, 8 Apr 2024 11:08:16 +0200 Subject: [PATCH 58/74] refactor: refactor: rmv btn from Desktop Authbadge Closes #47 --- src/components/AuthBadge.tsx | 2 - src/components/ShowUIButton.tsx | 69 --------------------------------- 2 files changed, 71 deletions(-) delete mode 100644 src/components/ShowUIButton.tsx diff --git a/src/components/AuthBadge.tsx b/src/components/AuthBadge.tsx index a9d543e6..b9061c73 100644 --- a/src/components/AuthBadge.tsx +++ b/src/components/AuthBadge.tsx @@ -20,7 +20,6 @@ import { } from "ionicons/icons"; import DisconnectButton from "./DisconnectButton"; import { SelectNetwork } from "./SelectNetwork"; -import ShowUIButton from "./ShowUIButton"; import { SuccessCopyAddress } from "./SuccessCopyAddress"; import { ToggleLightmode } from "./ui/ToogleLightmode"; @@ -172,7 +171,6 @@ export const AuthBadge: React.FC = () => {
-
diff --git a/src/components/ShowUIButton.tsx b/src/components/ShowUIButton.tsx deleted file mode 100644 index ce1f3daf..00000000 --- a/src/components/ShowUIButton.tsx +++ /dev/null @@ -1,69 +0,0 @@ -import { useEffect, useState } from "react"; -import { IonButton, IonSpinner } from "@ionic/react"; -import { getMagic } from "@/servcies/magic"; - -const ShowUIButton = () => { - // Initialize state variable to decide whether to show button or not - const [isLoading, setIsLoading] = useState(false); - const [showButton, setShowButton] = useState(false); - // Define a function to check the type of the wallet - const checkWalletType = async () => { - const magic = await getMagic(); - try { - setIsLoading(true); - const isMagicProvider = magic.rpcProvider.isMagic; - if (!isMagicProvider) { - setIsLoading(false); - setShowButton(false); - return; - } - // Fetch the wallet's information using Magic's user.getInfo method - - ///@ts-ignore - // Determine if the wallet type is "magic" - // Set 'showButton' state based on the result of the check - const isMagicWallet = (await magic.user.getInfo())?.walletType === "magic"; - setIsLoading(false); - setShowButton(isMagicWallet); - } catch (error) { - // Log any errors that occur during the wallet type check process - setIsLoading(false); - } - }; - - useEffect(() => { - // Call the checkWalletType function - checkWalletType(); - return () => {}; - }, []); - - // Define the event handler for the button click - const handleShowUI = async () => { - try { - // Try to show the magic wallet user interface - const magic = await getMagic(); - await magic.wallet.showUI(); - throw new Error("Not implemented"); - } catch (error) { - // Log any errors that occur during the process - console.error("handleShowUI:", error); - } - }; - - // Render the button component if showButton is true, otherwise render nothing - return isLoading ? ( - - ) : showButton ? ( - - Wallet overview - - ) : null; -}; - -export default ShowUIButton; From 730e3126ed2eec4b1297d9550264c0aa6c96fb53 Mon Sep 17 00:00:00 2001 From: FazioNico Date: Mon, 8 Apr 2024 11:11:15 +0200 Subject: [PATCH 59/74] style: formating file --- src/components/AuthBadge.tsx | 53 +++++++++++++++++------------------- 1 file changed, 25 insertions(+), 28 deletions(-) diff --git a/src/components/AuthBadge.tsx b/src/components/AuthBadge.tsx index b9061c73..a1fc8bcb 100644 --- a/src/components/AuthBadge.tsx +++ b/src/components/AuthBadge.tsx @@ -11,25 +11,17 @@ import { IonListHeader, IonSpinner, IonText, - useIonModal + useIonModal, } from "@ionic/react"; -import { - checkmarkCircle, - copyOutline, - openOutline, -} from "ionicons/icons"; +import { checkmarkCircle, copyOutline, openOutline } from "ionicons/icons"; import DisconnectButton from "./DisconnectButton"; import { SelectNetwork } from "./SelectNetwork"; import { SuccessCopyAddress } from "./SuccessCopyAddress"; import { ToggleLightmode } from "./ui/ToogleLightmode"; export const AuthBadge: React.FC = () => { - const { - walletAddress, - currentNetwork, - isMagicWallet, - switchNetwork, - } = Store.useState(getWeb3State); + const { walletAddress, currentNetwork, isMagicWallet, switchNetwork } = + Store.useState(getWeb3State); const { display: displayLoader, hide: hidLoader } = useLoader(); const chain = CHAIN_AVAILABLES.find((chain) => chain.id === currentNetwork) || @@ -91,9 +83,12 @@ export const AuthBadge: React.FC = () => { await hidLoader(); }; - if (!walletAddress) return (<> - - ); + if (!walletAddress) + return ( + <> + + + ); return ( <> @@ -139,16 +134,14 @@ export const AuthBadge: React.FC = () => { style={{ cursor: "pointer" }} /> - - - Dark mode - - - + Dark mode + + = () => {

- { - window.open('https://forms.gle/Dx25eG66TMxyFfh8A', '_blank') - }}> + { + window.open("https://forms.gle/Dx25eG66TMxyFfh8A", "_blank"); + }} + > -
+
From c7e5cb0f7ad479c178e1fe598916864d9f83b71d Mon Sep 17 00:00:00 2001 From: FazioNico Date: Mon, 8 Apr 2024 11:35:46 +0200 Subject: [PATCH 60/74] refactor: ui alignement Closes #45 --- src/containers/BuyWithFiat.tsx | 90 +++++++++++++++++++--------------- 1 file changed, 50 insertions(+), 40 deletions(-) diff --git a/src/containers/BuyWithFiat.tsx b/src/containers/BuyWithFiat.tsx index 32e55419..ed972fb1 100644 --- a/src/containers/BuyWithFiat.tsx +++ b/src/containers/BuyWithFiat.tsx @@ -1,47 +1,57 @@ -import { IonButton, IonButtons, IonContent, IonHeader, IonIcon, IonTitle, IonToolbar } from "@ionic/react"; +import { + IonButton, + IonButtons, + IonContent, + IonHeader, + IonIcon, + IonTitle, + IonToolbar, +} from "@ionic/react"; import { close } from "ionicons/icons"; -export default function BuyWithFiat(props: { - dismiss: ()=> void +export default function BuyWithFiat(props: { + isLightmode?: boolean, + dismiss: () => void }) { - return ( <> - - - -

Buy

-
- - { - props.dismiss(); - }} - > - - - -
-
- - - + > + + + + + + + + - ) -} \ No newline at end of file + ); +} From 0075bb988669488f1bb084dc7a9b24f8a0893e75 Mon Sep 17 00:00:00 2001 From: FazioNico Date: Mon, 8 Apr 2024 11:47:02 +0200 Subject: [PATCH 61/74] style: close all warnings --- .hintrc | 19 ++++++++++++++++++- src/components/Header.tsx | 9 +++------ src/containers/BuyWithFiat.tsx | 10 +--------- src/styles/global.scss | 15 +++++++++++++-- 4 files changed, 35 insertions(+), 18 deletions(-) diff --git a/.hintrc b/.hintrc index 798957b2..d70b4f48 100644 --- a/.hintrc +++ b/.hintrc @@ -3,6 +3,23 @@ "development" ], "hints": { - "apple-touch-icons": "off" + "apple-touch-icons": "off", + "compat-api/css": [ + "default", + { + "ignore": [ + "backdrop-filter", + "scrollbar-width" + ] + } + ], + "compat-api/html": [ + "default", + { + "ignore": [ + "iframe[loading]" + ] + } + ] } } \ No newline at end of file diff --git a/src/components/Header.tsx b/src/components/Header.tsx index d13866da..acf6818a 100644 --- a/src/components/Header.tsx +++ b/src/components/Header.tsx @@ -69,10 +69,7 @@ export function Header({ <>
{ router.push('/index', 'back'); }} @@ -122,7 +119,7 @@ export function Header({ > {walletAddress ? ( <> -
+
) : ( -
+
diff --git a/src/styles/global.scss b/src/styles/global.scss index c22f9d3e..11b3e612 100755 --- a/src/styles/global.scss +++ b/src/styles/global.scss @@ -864,6 +864,19 @@ div.MuiScopedCssBaseline-root { } } +#onramp__frame { + width: 100%; + height: 100%; + margin: 0; + padding: 0; + border: none; + position: relative; + bottom: 1rem; +} + +.flex { + display: flex; +} .transition { transition: all 85ms ease-in-out; } @@ -956,9 +969,7 @@ div.MuiScopedCssBaseline-root { margin-bottom: 0.5rem; } } -.FooterComponent { -} .PublicationItem { cursor: pointer; From 39a445e6545f03e510be1d7baf80009a6d04e11e Mon Sep 17 00:00:00 2001 From: FazioNico Date: Mon, 8 Apr 2024 11:49:38 +0200 Subject: [PATCH 62/74] refactor: alignements ui --- src/containers/BuyWithFiat.tsx | 16 +++++++++------- src/styles/global.scss | 2 +- 2 files changed, 10 insertions(+), 8 deletions(-) diff --git a/src/containers/BuyWithFiat.tsx b/src/containers/BuyWithFiat.tsx index 5d1eac5f..b5ce130d 100644 --- a/src/containers/BuyWithFiat.tsx +++ b/src/containers/BuyWithFiat.tsx @@ -9,10 +9,14 @@ import { } from "@ionic/react"; import { close } from "ionicons/icons"; -export default function BuyWithFiat(props: { - isLightmode?: boolean, - dismiss: () => void +export default function BuyWithFiat(props: { + isLightmode?: boolean; + dismiss: () => void; }) { + const url = `https://widget.mtpelerin.com/?_ctkn=57112584-7191-4d1b-8d90-28c7c800f3ea&type=web&tabs=buy${ + props.isLightmode ? "" : "&mode=dark" + }&dnet=optimism_mainnet&bdc=ETH&net=optimism_mainnet&nets=optimism_mainnet&primary=%230090FF`; + return ( <> @@ -33,14 +37,12 @@ export default function BuyWithFiat(props: { - + diff --git a/src/styles/global.scss b/src/styles/global.scss index 11b3e612..12845cd2 100755 --- a/src/styles/global.scss +++ b/src/styles/global.scss @@ -871,7 +871,7 @@ div.MuiScopedCssBaseline-root { padding: 0; border: none; position: relative; - bottom: 1rem; + bottom: -1rem; } .flex { From 2b48c96d4a345413f6b4e51c9e25e368d1998f8f Mon Sep 17 00:00:00 2001 From: FazioNico Date: Mon, 8 Apr 2024 12:00:32 +0200 Subject: [PATCH 63/74] refactor: add darkmode support to onramp modal content --- src/components/AppShell.tsx | 4 +++- src/components/base/WalletBaseContainer.tsx | 1 + src/containers/BuyWithFiat.tsx | 2 +- 3 files changed, 5 insertions(+), 2 deletions(-) diff --git a/src/components/AppShell.tsx b/src/components/AppShell.tsx index b37d421e..d98342a0 100755 --- a/src/components/AppShell.tsx +++ b/src/components/AppShell.tsx @@ -376,7 +376,9 @@ const AppShell = () => { onDidDismiss={() => setIsBuyWithFiatModalOpen(false)} > }> - setIsBuyWithFiatModalOpen(false)} /> + setIsBuyWithFiatModalOpen(false)} + isLightmode={localStorage.getItem('hexa-lite_is-lightmode') === 'true' ? true : undefined} /> diff --git a/src/components/base/WalletBaseContainer.tsx b/src/components/base/WalletBaseContainer.tsx index 6c07423d..c3d42b97 100644 --- a/src/components/base/WalletBaseContainer.tsx +++ b/src/components/base/WalletBaseContainer.tsx @@ -219,6 +219,7 @@ export default class WalletBaseComponent extends React.Component< > this.handleBuyWithFiat(false)} + isLightmode={localStorage.getItem('hexa-lite_is-lightmode') === 'true' ? true : undefined} /> diff --git a/src/containers/BuyWithFiat.tsx b/src/containers/BuyWithFiat.tsx index b5ce130d..6a720aea 100644 --- a/src/containers/BuyWithFiat.tsx +++ b/src/containers/BuyWithFiat.tsx @@ -16,7 +16,7 @@ export default function BuyWithFiat(props: { const url = `https://widget.mtpelerin.com/?_ctkn=57112584-7191-4d1b-8d90-28c7c800f3ea&type=web&tabs=buy${ props.isLightmode ? "" : "&mode=dark" }&dnet=optimism_mainnet&bdc=ETH&net=optimism_mainnet&nets=optimism_mainnet&primary=%230090FF`; - + console.log(props?.isLightmode) return ( <> From 9e26cb2ab03b358dfb278003d7cfa58ed05d8259 Mon Sep 17 00:00:00 2001 From: FazioNico Date: Mon, 8 Apr 2024 15:23:17 +0200 Subject: [PATCH 64/74] refactor: add Error state management --- src/store/actions.ts | 6 +++++- src/store/index.ts | 3 ++- src/store/selectors.ts | 3 +++ 3 files changed, 10 insertions(+), 2 deletions(-) diff --git a/src/store/actions.ts b/src/store/actions.ts index 6c1e239a..367d0b4f 100755 --- a/src/store/actions.ts +++ b/src/store/actions.ts @@ -31,4 +31,8 @@ export const patchMarketPoolsState = (marketsPools: MarketPool[]) => { }); }; - +export const setErrorState = (error?: Error) => { + Store.update(s => { + s.error = error; + }); +}; \ No newline at end of file diff --git a/src/store/index.ts b/src/store/index.ts index dfc14e44..8debf2e7 100755 --- a/src/store/index.ts +++ b/src/store/index.ts @@ -31,7 +31,8 @@ export interface IPoolsState { export interface IStore { pools: IPoolsState, - web3:IWeb3State + web3:IWeb3State, + error?: Error, } const defaultState: IStore = Object.freeze({ diff --git a/src/store/selectors.ts b/src/store/selectors.ts index 2b18fc79..23c31558 100755 --- a/src/store/selectors.ts +++ b/src/store/selectors.ts @@ -185,3 +185,6 @@ export const getProtocolSummaryState = createSelector( return summary; } ); + + +export const getErrorState = createSelector(getState, (state) => state.error); \ No newline at end of file From ae6c3f43a5c94d8ce43d8775e1b60294083d60d5 Mon Sep 17 00:00:00 2001 From: FazioNico Date: Mon, 8 Apr 2024 15:24:06 +0200 Subject: [PATCH 65/74] feat: implement error manager use with loadBalance() error --- src/components/AppShell.tsx | 24 +++++++++++++++++++++++- src/store/effects/web3.effects.ts | 3 ++- 2 files changed, 25 insertions(+), 2 deletions(-) diff --git a/src/components/AppShell.tsx b/src/components/AppShell.tsx index d98342a0..a76872b4 100755 --- a/src/components/AppShell.tsx +++ b/src/components/AppShell.tsx @@ -26,6 +26,7 @@ import { IonToolbar, IonTitle, IonButtons, + useIonToast, } from "@ionic/react"; import { StatusBar, Style } from "@capacitor/status-bar"; @@ -38,7 +39,7 @@ import { NotFoundPage } from "@/containers/NotFoundPage"; import PwaInstall from "./PwaInstall"; import { initializeWeb3 } from "@/store/effects/web3.effects"; import Store from "@/store"; -import { getWeb3State } from "@/store/selectors"; +import { getErrorState, getWeb3State } from "@/store/selectors"; import { IonRoute } from "@ionic/react"; import { isPlatform } from "@ionic/core"; import { close } from "ionicons/icons"; @@ -113,8 +114,29 @@ const AppShell = () => { const { pathname = "/swap" } = window.location; let segment = pathname.split("/")[1] || "swap"; // urlParams.get("s") || "swap"; const { walletAddress, isMagicWallet } = Store.useState(getWeb3State); + const error = Store.useState(getErrorState); const [presentFiatWarning, dismissFiatWarning] = useIonAlert(); const [isBuyWithFiatModalOpen, setIsBuyWithFiatModalOpen] = useState(false); + const [presentToast, dismissToast] = useIonToast(); + + if(error) { + presentToast({ + message: `[ERROR] ${ + error?.message || error + }`, + color: "danger", + duration: 1000 * 30, + buttons: [ + { + text: "x", + role: "cancel", + handler: () => { + dismissToast(); + }, + }, + ], + }) + } const isNotFound = segment && ["wallet", "swap", "fiat", "defi", "earn"].indexOf(segment) === -1; diff --git a/src/store/effects/web3.effects.ts b/src/store/effects/web3.effects.ts index 9f9f89bc..209080e7 100644 --- a/src/store/effects/web3.effects.ts +++ b/src/store/effects/web3.effects.ts @@ -1,6 +1,6 @@ import { CHAIN_DEFAULT } from "@/constants/chains"; import { MagicWalletUtils } from "@/network/MagicWallet"; -import { setWeb3State } from "../actions"; +import { setErrorState, setWeb3State } from "../actions"; export const initializeWeb3 = async (chainId: number = CHAIN_DEFAULT.id) => { console.log(`[INFO] {{Web3Effect}} initializeWeb3() - `, chainId); @@ -14,6 +14,7 @@ export const initializeWeb3 = async (chainId: number = CHAIN_DEFAULT.id) => { if (magicUtils?.walletAddress) { console.log('[INFO] {{Web3Effect}} load balance...'); await magicUtils.loadBalances().catch((err) => { + setErrorState(new Error(`Load wallet balances failed. Try again later.`)); console.error('[ERROR] {{Web3Effect}} load balance error: ', err?.message ? err.message : err); }); } From df9f23332aa691a513f6cdcfc727c92a480742fe Mon Sep 17 00:00:00 2001 From: FazioNico Date: Mon, 8 Apr 2024 15:35:56 +0200 Subject: [PATCH 66/74] refactor: upadate stat on close toast --- src/components/AppShell.tsx | 2 ++ 1 file changed, 2 insertions(+) diff --git a/src/components/AppShell.tsx b/src/components/AppShell.tsx index a76872b4..55729bee 100755 --- a/src/components/AppShell.tsx +++ b/src/components/AppShell.tsx @@ -43,6 +43,7 @@ import { getErrorState, getWeb3State } from "@/store/selectors"; import { IonRoute } from "@ionic/react"; import { isPlatform } from "@ionic/core"; import { close } from "ionicons/icons"; +import { setErrorState } from "@/store/actions"; setupIonicReact({ mode: "ios" }); @@ -135,6 +136,7 @@ const AppShell = () => { }, }, ], + onDidDismiss: () => setErrorState(undefined), }) } From c35fcde2e804d74d31c67fb0cf1eb60c7efbd8ac Mon Sep 17 00:00:00 2001 From: FazioNico Date: Mon, 8 Apr 2024 19:06:39 +0200 Subject: [PATCH 67/74] feat: add app settings state with hideAmount param Closes #38 --- src/components/AppShell.tsx | 12 ++++--- src/components/ui/Currency.tsx | 17 +++++++++ .../ui/ToggleHideCurrencyAmount.tsx | 35 +++++++++++++++++++ src/components/ui/WalletAssetEntity.tsx | 5 ++- .../desktop/TokenDetailDesktopContainer.tsx | 7 ++-- .../desktop/WalletDesktopContainer.tsx | 15 +++++--- .../mobile/TokenDetailMobileContainer.tsx | 7 ++-- .../mobile/WalletMobileContainer.tsx | 18 +++++++--- src/store/actions.ts | 13 +++++-- src/store/effects/app-settings.effect.ts | 13 +++++++ src/store/index.ts | 12 +++++++ src/store/selectors.ts | 4 ++- src/styles/global.scss | 3 ++ 13 files changed, 138 insertions(+), 23 deletions(-) create mode 100644 src/components/ui/Currency.tsx create mode 100644 src/components/ui/ToggleHideCurrencyAmount.tsx create mode 100644 src/store/effects/app-settings.effect.ts diff --git a/src/components/AppShell.tsx b/src/components/AppShell.tsx index 55729bee..7799b6f8 100755 --- a/src/components/AppShell.tsx +++ b/src/components/AppShell.tsx @@ -44,6 +44,7 @@ import { IonRoute } from "@ionic/react"; import { isPlatform } from "@ionic/core"; import { close } from "ionicons/icons"; import { setErrorState } from "@/store/actions"; +import { initializeAppSettings } from "@/store/effects/app-settings.effect"; setupIonicReact({ mode: "ios" }); @@ -92,11 +93,11 @@ const DefaultLoadingPage = () => { ) } -const isMobilePWADevice = - localStorage.getItem('hexa-lite_is-pwa') || - Boolean(isPlatform("pwa")) || - Boolean(isPlatform("electron")) || - Boolean(isPlatform("mobile")) && !Boolean(isPlatform("mobileweb")); +const isMobilePWADevice = true + // localStorage.getItem('hexa-lite_is-pwa') || + // Boolean(isPlatform("pwa")) || + // Boolean(isPlatform("electron")) || + // Boolean(isPlatform("mobile")) && !Boolean(isPlatform("mobileweb")); const setPreferScheme = () => { const prefersLightScheme = window.matchMedia("(prefers-color-scheme: light)"); @@ -169,6 +170,7 @@ const AppShell = () => { useEffect(() => { initializeWeb3(); + initializeAppSettings() }, []); useEffect(() => { diff --git a/src/components/ui/Currency.tsx b/src/components/ui/Currency.tsx new file mode 100644 index 00000000..534c2d1d --- /dev/null +++ b/src/components/ui/Currency.tsx @@ -0,0 +1,17 @@ +import Store from "@/store"; +import { getAppSettings } from "@/store/selectors"; +import { currencyFormat } from "@/utils/currencyFormat"; + +export const Currency = (props: { + value: number, +}) => { + const { value } = props; + const { ui: {hideCurrencieAmount} } = Store.useState(getAppSettings) + + const data = hideCurrencieAmount + ? '*****' + : currencyFormat.format(value) + return (<> + {data} + ) +} \ No newline at end of file diff --git a/src/components/ui/ToggleHideCurrencyAmount.tsx b/src/components/ui/ToggleHideCurrencyAmount.tsx new file mode 100644 index 00000000..3122cedb --- /dev/null +++ b/src/components/ui/ToggleHideCurrencyAmount.tsx @@ -0,0 +1,35 @@ +import Store from "@/store"; +import { patchAppSettings } from "@/store/actions"; +import { getAppSettings } from "@/store/selectors"; +import { IonIcon } from "@ionic/react"; +import { eyeOffOutline, eyeOutline } from "ionicons/icons"; + +export const ToggleHideCurrencyAmount = () => { + const appSettings = Store.useState(getAppSettings); + const { + ui: { hideCurrencieAmount} + } = appSettings; + return ( + <> + { + patchAppSettings({ + ui: { + hideCurrencieAmount: !hideCurrencieAmount, + }, + }); + localStorage.setItem('hexa-lite_app_settings', JSON.stringify({ + ...appSettings, + ui: { + ...appSettings.ui, + hideCurrencieAmount: !hideCurrencieAmount, + } + })) + }} + /> + + ); +}; diff --git a/src/components/ui/WalletAssetEntity.tsx b/src/components/ui/WalletAssetEntity.tsx index 1042f64e..2d55fe90 100644 --- a/src/components/ui/WalletAssetEntity.tsx +++ b/src/components/ui/WalletAssetEntity.tsx @@ -13,6 +13,7 @@ import { } from "@ionic/react"; import { SelectedTokenDetail } from "../base/WalletBaseContainer"; import { isStableAsset } from "@/utils/isStableAsset"; +import { Currency } from "./Currency"; export function WalletAssetEntity(props: { asset: SelectedTokenDetail; @@ -97,7 +98,9 @@ export function WalletAssetEntity(props: {

- {currencyFormat.format(asset.balanceUsd)} + + +

diff --git a/src/containers/desktop/TokenDetailDesktopContainer.tsx b/src/containers/desktop/TokenDetailDesktopContainer.tsx index 1d8ab651..d6468edb 100644 --- a/src/containers/desktop/TokenDetailDesktopContainer.tsx +++ b/src/containers/desktop/TokenDetailDesktopContainer.tsx @@ -42,6 +42,7 @@ import { currencyFormat } from "@/utils/currencyFormat"; import { TokenDetailDescription } from "@/components/ui/TokenDetailDescription"; import { TokenDetailMarketDetail } from "@/components/ui/TokenDetailMarketData"; import { isStableAsset } from "@/utils/isStableAsset"; +import { Currency } from "@/components/ui/Currency"; const LightChart = lazy(() => import("@/components/ui/LightChart")); @@ -107,7 +108,7 @@ export const TokenDetailDesktopContainer = (props: { fontWeight: "normal", }} > - $ {data.balanceUsd.toFixed(2)} + @@ -155,7 +156,7 @@ export const TokenDetailDesktopContainer = (props: {

- $ {data.balanceUsd.toFixed(2)} + { tokenInfo?.market_data?.price_change_percentage_24h_in_currency?.usd && ( - {currencyFormat.format(token.balanceUsd)} + diff --git a/src/containers/desktop/WalletDesktopContainer.tsx b/src/containers/desktop/WalletDesktopContainer.tsx index 23a6e0e9..02ec8382 100644 --- a/src/containers/desktop/WalletDesktopContainer.tsx +++ b/src/containers/desktop/WalletDesktopContainer.tsx @@ -1,4 +1,4 @@ -import { card, download, paperPlane } from "ionicons/icons"; +import { card, download, eyeOffOutline, eyeOutline, paperPlane } from "ionicons/icons"; import WalletBaseComponent, { WalletComponentProps, } from "../../components/base/WalletBaseContainer"; @@ -17,10 +17,13 @@ import { } from "@ionic/react"; import ConnectButton from "@/components/ConnectButton"; import Store from "@/store"; -import { getWeb3State } from "@/store/selectors"; +import { getAppSettings, getWeb3State } from "@/store/selectors"; import { TokenDetailDesktopContainer } from "./TokenDetailDesktopContainer"; import { currencyFormat } from "@/utils/currencyFormat"; import { WalletAssetEntity } from "@/components/ui/WalletAssetEntity"; +import { Currency } from "@/components/ui/Currency"; +import { patchAppSettings } from "@/store/actions"; +import { ToggleHideCurrencyAmount } from "@/components/ui/ToggleHideCurrencyAmount"; class WalletDesktopContainer extends WalletBaseComponent { constructor(props: WalletComponentProps) { @@ -28,6 +31,7 @@ class WalletDesktopContainer extends WalletBaseComponent { } render() { + return ( <> {super.render()} @@ -45,11 +49,14 @@ class WalletDesktopContainer extends WalletBaseComponent { > -

Wallet

+

+ Wallet + +

- {currencyFormat.format(this.state.totalBalance)} +

diff --git a/src/containers/mobile/TokenDetailMobileContainer.tsx b/src/containers/mobile/TokenDetailMobileContainer.tsx index 4acb4854..7bc21111 100644 --- a/src/containers/mobile/TokenDetailMobileContainer.tsx +++ b/src/containers/mobile/TokenDetailMobileContainer.tsx @@ -40,6 +40,7 @@ import { TokenInfo, getTokenInfo } from "@/utils/getTokenInfo"; import { TokenDetailMarketDetail } from "@/components/ui/TokenDetailMarketData"; import { TokenDetailDescription } from "@/components/ui/TokenDetailDescription"; import { isStableAsset } from "@/utils/isStableAsset"; +import { Currency } from "@/components/ui/Currency"; const LightChart = lazy(() => import("@/components/ui/LightChart")); @@ -106,7 +107,7 @@ export const TokenDetailMobileContainer = (props: { fontWeight: "normal", }} > - $ {data.balanceUsd.toFixed(2)} +
@@ -163,7 +164,7 @@ export const TokenDetailMobileContainer = (props: {

- $ {data.balanceUsd.toFixed(2)} + { tokenInfo?.market_data?.price_change_percentage_24h_in_currency?.usd && ( - $ {token.balanceUsd.toFixed(2)} + diff --git a/src/containers/mobile/WalletMobileContainer.tsx b/src/containers/mobile/WalletMobileContainer.tsx index c12c3ffe..69a5d454 100644 --- a/src/containers/mobile/WalletMobileContainer.tsx +++ b/src/containers/mobile/WalletMobileContainer.tsx @@ -47,6 +47,8 @@ import { EarnMobileContainer } from "@/containers/mobile/EarnMobileContainer"; import { MenuSettings } from "@/components/ui/MenuSetting"; import { currencyFormat } from "@/utils/currencyFormat"; import { isStableAsset } from "@/utils/isStableAsset"; +import { Currency } from "@/components/ui/Currency"; +import { ToggleHideCurrencyAmount } from "@/components/ui/ToggleHideCurrencyAmount"; interface WalletMobileComProps { isMagicWallet: boolean; @@ -114,7 +116,7 @@ class WalletMobileContainer extends WalletBaseComponent< fontWeight: "normal", }} > - {currencyFormat.format(this.state.totalBalance)} + @@ -154,14 +156,22 @@ class WalletMobileContainer extends WalletBaseComponent<

-

Wallet

+

+ Wallet + +

- {currencyFormat.format(this.state.totalBalance)} +

@@ -337,7 +347,7 @@ class WalletMobileContainer extends WalletBaseComponent< ) : ''}

- {currencyFormat.format(asset.balanceUsd)} +
{asset.balance.toFixed(6)} diff --git a/src/store/actions.ts b/src/store/actions.ts index 367d0b4f..1fb64e9c 100755 --- a/src/store/actions.ts +++ b/src/store/actions.ts @@ -1,5 +1,5 @@ import { MarketPool } from '@/pool/Market.pool'; -import Store, { IPoolsState, IWeb3State } from '.'; +import Store, { IAppSettings, IPoolsState, IWeb3State } from '.'; export const setWeb3State = (web3State: IWeb3State) => { Store.update(s => { @@ -35,4 +35,13 @@ export const setErrorState = (error?: Error) => { Store.update(s => { s.error = error; }); -}; \ No newline at end of file +}; + +export const patchAppSettings = (appSettings: Partial) => { + Store.update(s => { + s.appSettings = { + ...s.appSettings, + ...appSettings + }; + }); +} \ No newline at end of file diff --git a/src/store/effects/app-settings.effect.ts b/src/store/effects/app-settings.effect.ts new file mode 100644 index 00000000..47489830 --- /dev/null +++ b/src/store/effects/app-settings.effect.ts @@ -0,0 +1,13 @@ +import { patchAppSettings } from "../actions"; + +export const initializeAppSettings = async () => { + const settings = localStorage.getItem('hexa-lite_app_settings'); + if (settings) { + try { + const parsedSettings = JSON.parse(settings); + patchAppSettings(parsedSettings); + } catch (error) { + throw new Error('Failed to parse app settings'); + } + } +} \ No newline at end of file diff --git a/src/store/index.ts b/src/store/index.ts index 8debf2e7..41eb5011 100755 --- a/src/store/index.ts +++ b/src/store/index.ts @@ -29,10 +29,17 @@ export interface IPoolsState { refresh: (type?: "init" | "userSummary") => Promise; }; +export type IAppSettings = { + ui: { + hideCurrencieAmount: boolean; + }; +} + export interface IStore { pools: IPoolsState, web3:IWeb3State, error?: Error, + appSettings: IAppSettings; } const defaultState: IStore = Object.freeze({ @@ -69,6 +76,11 @@ const defaultState: IStore = Object.freeze({ }) => { throw new Error("transfer function not implemented"); }, + }, + appSettings: { + ui: { + hideCurrencieAmount: false, + }, } }); diff --git a/src/store/selectors.ts b/src/store/selectors.ts index 23c31558..bead6c77 100755 --- a/src/store/selectors.ts +++ b/src/store/selectors.ts @@ -187,4 +187,6 @@ export const getProtocolSummaryState = createSelector( ); -export const getErrorState = createSelector(getState, (state) => state.error); \ No newline at end of file +export const getErrorState = createSelector(getState, (state) => state.error); + +export const getAppSettings = createSelector(getState, (state) => state.appSettings); \ No newline at end of file diff --git a/src/styles/global.scss b/src/styles/global.scss index 12845cd2..adac5be2 100755 --- a/src/styles/global.scss +++ b/src/styles/global.scss @@ -886,6 +886,9 @@ div.MuiScopedCssBaseline-root { .opacity-100 { opacity: 1!important; } +.cursorPointer { + cursor: pointer; +} From d6dc80a601233756179aecd4d1f5abcdb6404bb6 Mon Sep 17 00:00:00 2001 From: FazioNico Date: Mon, 8 Apr 2024 19:08:10 +0200 Subject: [PATCH 68/74] refactor: enable checker --- src/components/AppShell.tsx | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/src/components/AppShell.tsx b/src/components/AppShell.tsx index 7799b6f8..5c78a065 100755 --- a/src/components/AppShell.tsx +++ b/src/components/AppShell.tsx @@ -93,11 +93,11 @@ const DefaultLoadingPage = () => { ) } -const isMobilePWADevice = true - // localStorage.getItem('hexa-lite_is-pwa') || - // Boolean(isPlatform("pwa")) || - // Boolean(isPlatform("electron")) || - // Boolean(isPlatform("mobile")) && !Boolean(isPlatform("mobileweb")); +const isMobilePWADevice = + localStorage.getItem('hexa-lite_is-pwa') || + Boolean(isPlatform("pwa")) || + Boolean(isPlatform("electron")) || + Boolean(isPlatform("mobile")) && !Boolean(isPlatform("mobileweb")); const setPreferScheme = () => { const prefersLightScheme = window.matchMedia("(prefers-color-scheme: light)"); From fe04b2992b4822c915c28d7ff330135ac6e28291 Mon Sep 17 00:00:00 2001 From: FazioNico Date: Mon, 8 Apr 2024 21:54:27 +0200 Subject: [PATCH 69/74] refactor: chart styling --- src/components/ui/LightChart.tsx | 13 +++++++++---- 1 file changed, 9 insertions(+), 4 deletions(-) diff --git a/src/components/ui/LightChart.tsx b/src/components/ui/LightChart.tsx index 209f9311..d2ab6481 100644 --- a/src/components/ui/LightChart.tsx +++ b/src/components/ui/LightChart.tsx @@ -37,23 +37,28 @@ export default function LightChart(props: { data: DataItem[], minHeight?: number visible: false, }, horzLines: { - color: 'rgba(42, 46, 57, 0.5)', + // color: 'rgba(42, 46, 57, 0.05)', + visible: false }, }, rightPriceScale: { borderVisible: false, - visible: false, + visible: true, }, timeScale: { borderVisible: false, + fixLeftEdge: true, + rightBarStaysOnScroll: true, + fixRightEdge: true, }, crosshair: { horzLine: { // visible: false, style: 4, - }, }, + autoSize: true, + }); // const lineSeries = chart.addLineSeries(); // lineSeries.setData(props.data); @@ -64,7 +69,7 @@ export default function LightChart(props: { data: DataItem[], minHeight?: number lineColor: 'rgba(0,144,255, 1)', lineWidth: 3, }); - series.setData(props.data); + series.setData(props.data); const now = new Date(); chart.timeScale().setVisibleRange({ From bc4df2c10502ee631015a8dab1247f86e6b4b635 Mon Sep 17 00:00:00 2001 From: FazioNico Date: Mon, 8 Apr 2024 22:09:27 +0200 Subject: [PATCH 70/74] refactor: font weigth --- src/components/ui/TokenDetailDescription.tsx | 2 +- src/styles/global.scss | 3 +++ 2 files changed, 4 insertions(+), 1 deletion(-) diff --git a/src/components/ui/TokenDetailDescription.tsx b/src/components/ui/TokenDetailDescription.tsx index ed677f49..1b28aec4 100644 --- a/src/components/ui/TokenDetailDescription.tsx +++ b/src/components/ui/TokenDetailDescription.tsx @@ -12,7 +12,7 @@ export function TokenDetailDescription(props: { tokenInfo: TokenInfo }) { -

{tokenInfo.description.en}

+

{tokenInfo.description.en}

diff --git a/src/styles/global.scss b/src/styles/global.scss index adac5be2..ce751f5b 100755 --- a/src/styles/global.scss +++ b/src/styles/global.scss @@ -889,6 +889,9 @@ div.MuiScopedCssBaseline-root { .cursorPointer { cursor: pointer; } +.fontWeight300 { + font-weight: 300; +} From 1109e7f8d40c203ae40b07d85c6ac436b5375dc1 Mon Sep 17 00:00:00 2001 From: FazioNico Date: Tue, 9 Apr 2024 11:18:20 +0200 Subject: [PATCH 71/74] feat: fallback wallet token balance USD price with LiFi Closes #44 --- src/network/EVM.ts | 24 +- src/servcies/ankr.service.ts | 109 ++- src/servcies/lifi.service.ts | 1372 ++++++++++++++++++---------------- 3 files changed, 836 insertions(+), 669 deletions(-) diff --git a/src/network/EVM.ts b/src/network/EVM.ts index 3ddc93c1..dabb8b1b 100644 --- a/src/network/EVM.ts +++ b/src/network/EVM.ts @@ -3,12 +3,34 @@ import { NETWORK } from "../constants/chains"; import { getTokensBalances } from "../servcies/ankr.service"; import { MagicWalletUtils } from "./MagicWallet"; import { getMagic } from "@/servcies/magic"; +import { getTokensPrice } from "@/servcies/lifi.service"; +/** + * Function tha takes wallet address and fetches all assets for that wallet + * using Ankr API. It also fetches token price from LiFi API if Ankr response contains + * token with balance > 0 && balanceUsd === 0 && priceUsd === 0 + * This ensures that all tokens have price in USD and the total balance is calculated correctly + * for each token that user has in the wallet. + */ const fetchUserAssets = async (walletAddress: string, force?: boolean) => { console.log(`[INFO] fetchUserAssets()`, walletAddress); if (!walletAddress) return null; const assets = await getTokensBalances([], walletAddress, force); - return assets; + // remove elements with 0 balance and add to new arrany using extracting + const assetWithBalanceUsd = [], + assetsWithoutBalanceUsd = []; + for (let i = 0; i < assets.length; i++) { + const asset = assets[i]; + (asset.balanceUsd === 0 && asset.balance > 0) + ? assetsWithoutBalanceUsd.push(asset) + : assetWithBalanceUsd.push(asset); + } + // get token price for tokens without balanceUsd + const tokenWithbalanceUsd = await getTokensPrice(assetsWithoutBalanceUsd); + return [ + ...assetWithBalanceUsd, + ...tokenWithbalanceUsd + ]; }; export class EVMWalletUtils extends MagicWalletUtils { diff --git a/src/servcies/ankr.service.ts b/src/servcies/ankr.service.ts index bd82c9a4..955ef635 100644 --- a/src/servcies/ankr.service.ts +++ b/src/servcies/ankr.service.ts @@ -1,3 +1,4 @@ +import { IAsset } from "@/interfaces/asset.interface"; import { IChain, CHAIN_AVAILABLES } from "../constants/chains"; interface IAnkrTokenReponse { @@ -15,7 +16,40 @@ interface IAnkrTokenReponse { contractAddress?: string; } -const formatingTokensBalances = (assets: IAnkrTokenReponse[], address: string, chainsList: IChain[]) => { +const fake_data = [ + { + blockchain: "optimism", + tokenName: "Ether", + tokenSymbol: "ETH", + tokenDecimals: 18, + tokenType: "NATIVE", + holderAddress: "0x475ef9fb4f8d43b63ac9b22fa41fd4db8a103550", + balance: "0.001942681537656218", + balanceRawInteger: "1942681537656218", + balanceUsd: "7.097286526117426483", + tokenPrice: "3.282317948340073075", + thumbnail: "https://ankrscan.io/assets/blockchains/eth.svg", + }, + { + blockchain: "optimism", + tokenName: "Aave Optimism wstETH", + tokenSymbol: "aOptwstETH", + tokenDecimals: 18, + tokenType: "ERC20", + contractAddress: "0xc45a479877e1e9dfe9fcd4056c699575a1045daa", + holderAddress: "0x475ef9fb4f8d43b63ac9b22fa41fd4db8a103550", + balance: "0.000408917159923751", + balanceRawInteger: "408917159923751", + balanceUsd: "0", + tokenPrice: "0", + thumbnail: "", + }, +]; + +const formatingTokensBalances = ( + assets: IAnkrTokenReponse[], + chainsList: IChain[] +): IAsset[] => { return assets.map((asset) => { return { chain: chainsList.find((c) => c.value === asset.blockchain), @@ -30,38 +64,37 @@ const formatingTokensBalances = (assets: IAnkrTokenReponse[], address: string, c balanceUsd: Number(asset.balanceUsd), priceUsd: Number(asset.tokenPrice), thumbnail: asset.thumbnail, - contractAddress: asset.tokenType === 'NATIVE' - ? '0x0000000000000000000000000000000000000000' - : asset.contractAddress, - } + contractAddress: + asset.tokenType === "NATIVE" + ? "0x0000000000000000000000000000000000000000" + : asset.contractAddress, + }; }); -} +}; const getCachedData = async (key: string, force?: boolean) => { const data = localStorage.getItem(key); if (!data) { - console.log('No data in cache.') + console.log("No data in cache."); return null; } // check expiration cache using timestamp 10 minutes const parsedData = JSON.parse(data); if (Date.now() - parsedData.timestamp > 10 * 60 * 1000 && !force) { - console.log('Expire cache 10 minute') + console.log("Expire cache 10 minute"); return null; } if (Date.now() - parsedData.timestamp > 1 * 60 * 1000 && force) { - console.log('Expire cache 1 minute') + console.log("Expire cache 1 minute"); return null; } - console.log('[INFO] {ankrFactory} data from cache: ', parsedData.data); + console.log("[INFO] {ankrFactory} data from cache: ", parsedData.data); return parsedData.data; -} +}; const setCachedData = async (key: string, data: any) => { - localStorage - .setItem(key, JSON.stringify({ data, timestamp: Date.now() })); - -} + localStorage.setItem(key, JSON.stringify({ data, timestamp: Date.now() })); +}; /** * Doc url: https://www.ankr.com/docs/app-chains/components/advanced-api/token-methods/#ankr_getaccountbalance @@ -69,33 +102,43 @@ const setCachedData = async (key: string, data: any) => { * @param address wallet address to get balances * @returns object with balances property that contains an array of TokenInterface */ -export const getTokensBalances = async (chainIds: number[], address: string, force?: boolean) => { - const KEY = `hexa-ankr-service-${address}`; - const cachedData = await getCachedData(KEY, force); - console.log('cachedData:', cachedData); - if (cachedData) { - return cachedData; - } - const APP_ANKR_APIKEY = process.env.NEXT_PUBLIC_APP_ANKR_APIKEY; +export const getTokensBalances = async ( + chainIds: number[], + address: string, + force?: boolean +): Promise => { const chainsList = chainIds.length <= 0 ? CHAIN_AVAILABLES : CHAIN_AVAILABLES.filter((availableChain) => chainIds.find((c) => c === availableChain.id) ); + // return fake_data for DEV mode + if (process.env.NEXT_PUBLIC_APP_IS_PROD === "false") { + console.log("[INFO] DEV mode return fake data"); + const balances = formatingTokensBalances(fake_data, chainsList); + return balances; + } + const KEY = `hexa-ankr-service-${address}`; + const cachedData = await getCachedData(KEY, force); + console.log("cachedData:", cachedData); + if (cachedData) { + return cachedData; + } + const APP_ANKR_APIKEY = process.env.NEXT_PUBLIC_APP_ANKR_APIKEY; const blockchain = chainsList - .filter(({type})=> type === 'evm') - .map(({value}) => value); + .filter(({ type }) => type === "evm") + .map(({ value }) => value); const url = `https://rpc.ankr.com/multichain/${APP_ANKR_APIKEY}`; const options: RequestInit = { - method: 'POST', + method: "POST", headers: { - accept: 'application/json', - 'content-type': 'application/json', + accept: "application/json", + "content-type": "application/json", }, body: JSON.stringify({ - jsonrpc: '2.0', - method: 'ankr_getAccountBalance', + jsonrpc: "2.0", + method: "ankr_getAccountBalance", params: { blockchain, walletAddress: address, @@ -106,8 +149,8 @@ export const getTokensBalances = async (chainIds: number[], address: string, for }; const res = await fetch(url, options); const assets = (await res.json())?.result?.assets; - const balances = formatingTokensBalances(assets, address, chainsList); - console.log('[INFO] {ankrFactory} getTokensBalances(): ', balances); + const balances = formatingTokensBalances(assets, chainsList); + console.log("[INFO] {ankrFactory} getTokensBalances(): ", balances); await setCachedData(KEY, balances); return balances; -}; \ No newline at end of file +}; diff --git a/src/servcies/lifi.service.ts b/src/servcies/lifi.service.ts index 34d065f5..651f294d 100644 --- a/src/servcies/lifi.service.ts +++ b/src/servcies/lifi.service.ts @@ -1,74 +1,74 @@ - +import { IAsset } from "@/interfaces/asset.interface"; import { HiddenUI, WidgetConfig } from "@lifi/widget"; import { ethers, Contract } from "ethers"; export interface LiFiQuoteResponse { - type: string; - id: string; - tool: string; - toolDetails: ToolDetails; - action: Action; - estimate: Estimate; - includedSteps: IncludedStep[]; - integrator: string; + type: string; + id: string; + tool: string; + toolDetails: ToolDetails; + action: Action; + estimate: Estimate; + includedSteps: IncludedStep[]; + integrator: string; transactionRequest: TransactionRequest; } interface Action { - fromToken: Token; - fromAmount: string; - toToken: Token; - fromChainId: number; - toChainId: number; - slippage: number; - fromAddress: string; - toAddress: string; + fromToken: Token; + fromAmount: string; + toToken: Token; + fromChainId: number; + toChainId: number; + slippage: number; + fromAddress: string; + toAddress: string; destinationGasConsumption?: string; } interface Token { - address: string; - chainId: number; - symbol: string; + address: string; + chainId: number; + symbol: string; decimals: number; - name: string; + name: string; priceUSD: string; - logoURI: string; - coinKey: string; + logoURI: string; + coinKey: string; } interface Estimate { - tool: string; - approvalAddress: string; - toAmountMin: string; - toAmount: string; - fromAmount: string; - feeCosts: FeeCost[]; - gasCosts: GasCost[]; + tool: string; + approvalAddress: string; + toAmountMin: string; + toAmount: string; + fromAmount: string; + feeCosts: FeeCost[]; + gasCosts: GasCost[]; executionDuration: number; - fromAmountUSD?: string; - toAmountUSD?: string; - toolData?: ToolData; + fromAmountUSD?: string; + toAmountUSD?: string; + toolData?: ToolData; } interface FeeCost { - name: string; + name: string; description: string; - percentage: string; - token: Token; - amount: string; - amountUSD: string; - included: boolean; + percentage: string; + token: Token; + amount: string; + amountUSD: string; + included: boolean; } interface GasCost { - type: string; - price: string; - estimate: string; - limit: string; - amount: string; + type: string; + price: string; + estimate: string; + limit: string; + amount: string; amountUSD: string; - token: Token; + token: Token; } interface ToolData { @@ -76,669 +76,701 @@ interface ToolData { } interface IncludedStep { - id: string; - type: string; - action: Action; - estimate: Estimate; - tool: string; + id: string; + type: string; + action: Action; + estimate: Estimate; + tool: string; toolDetails: ToolDetails; } interface ToolDetails { - key: string; - name: string; + key: string; + name: string; logoURI: string; } interface TransactionRequest { - data: string; - to: string; - value: string; - from: string; - chainId: number; + data: string; + to: string; + value: string; + from: string; + chainId: number; gasPrice: string; gasLimit: string; } const ERC20_ABI = [ { - "name": "approve", - "inputs": [ - { - "internalType": "address", - "name": "spender", - "type": "address" - }, - { - "internalType": "uint256", - "name": "amount", - "type": "uint256" - } - ], - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "stateMutability": "nonpayable", - "type": "function" + name: "approve", + inputs: [ + { + internalType: "address", + name: "spender", + type: "address", + }, + { + internalType: "uint256", + name: "amount", + type: "uint256", + }, + ], + outputs: [ + { + internalType: "bool", + name: "", + type: "bool", + }, + ], + stateMutability: "nonpayable", + type: "function", }, { - "name": "allowance", - "inputs": [ - { - "internalType": "address", - "name": "owner", - "type": "address" - }, - { - "internalType": "address", - "name": "spender", - "type": "address" - } - ], - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - } + name: "allowance", + inputs: [ + { + internalType: "address", + name: "owner", + type: "address", + }, + { + internalType: "address", + name: "spender", + type: "address", + }, + ], + outputs: [ + { + internalType: "uint256", + name: "", + type: "uint256", + }, + ], + stateMutability: "view", + type: "function", + }, ]; /** * Requesting possibles connection - * @param fromChain - * @param toChain - * @param fromToken - * @param toToken - * @param fromAmount - * @param fromAddress + * @param fromChain + * @param toChain + * @param fromToken + * @param toToken + * @param fromAmount + * @param fromAddress */ export const getConnections = async ( - fromChain: string, - toChain: string, - fromToken: string, - toToken: string, - fromAmount: string, - fromAddress: string, + fromChain: string, + toChain: string, + fromToken: string, + toToken: string, + fromAmount: string, + fromAddress: string ) => { const integrator = "hexa-lite"; const fee = 0.005; // build url params from input const params = new URLSearchParams(); - params.append('fromChain', fromChain); - params.append('toChain', toChain); - params.append('fromToken', fromToken); - params.append('toToken', toToken); - params.append('fromAmount', fromAmount); - params.append('fromAddress', fromAddress); - params.append('integrator', integrator); - params.append('fee', fee.toString()); - const reponse = await fetch(`https://li.quest/v1/connections?${params.toString()}`); + params.append("fromChain", fromChain); + params.append("toChain", toChain); + params.append("fromToken", fromToken); + params.append("toToken", toToken); + params.append("fromAmount", fromAmount); + params.append("fromAddress", fromAddress); + params.append("integrator", integrator); + params.append("fee", fee.toString()); + const reponse = await fetch( + `https://li.quest/v1/connections?${params.toString()}` + ); const result = await reponse.json(); return result; -} +}; /** * Requesting a Quote - * @param fromChain - * @param toChain - * @param fromToken - * @param toToken - * @param fromAmount - * @param fromAddress - * @returns + * @param fromChain + * @param toChain + * @param fromToken + * @param toToken + * @param fromAmount + * @param fromAddress + * @returns */ export const getQuote = async ( - fromChain: string, - toChain: string, - fromToken: string, - toToken: string, - fromAmount: string, - fromAddress: string, - ): Promise => { + fromChain: string, + toChain: string, + fromToken: string, + toToken: string, + fromAmount: string, + fromAddress: string +): Promise => { const integrator = "hexa-lite"; const fee = 0.005; // build url params from input const params = new URLSearchParams(); - params.append('fromChain', fromChain); - params.append('toChain', toChain); - params.append('fromToken', fromToken); - params.append('toToken', toToken); - params.append('fromAmount', fromAmount); - params.append('fromAddress', fromAddress); - params.append('integrator', integrator); - params.append('fee', fee.toString()); + params.append("fromChain", fromChain); + params.append("toChain", toChain); + params.append("fromToken", fromToken); + params.append("toToken", toToken); + params.append("fromAmount", fromAmount); + params.append("fromAddress", fromAddress); + params.append("integrator", integrator); + params.append("fee", fee.toString()); const reponse = await fetch(`https://li.quest/v1/quote?${params.toString()}`); - const result:LiFiQuoteResponse = await reponse.json() + const result: LiFiQuoteResponse = await reponse.json(); return result; -} +}; export const fakeQuote = { - "type": "lifi", - "id": "14c2de39-e6ce-4e9c-b438-bc68977912f4", - "tool": "stargate", - "toolDetails": { - "key": "stargate", - "name": "Stargate", - "logoURI": "https://raw.githubusercontent.com/lifinance/types/5685c638772f533edad80fcb210b4bb89e30a50f/src/assets/icons/bridges/stargate.png" + type: "lifi", + id: "14c2de39-e6ce-4e9c-b438-bc68977912f4", + tool: "stargate", + toolDetails: { + key: "stargate", + name: "Stargate", + logoURI: + "https://raw.githubusercontent.com/lifinance/types/5685c638772f533edad80fcb210b4bb89e30a50f/src/assets/icons/bridges/stargate.png", }, - "action": { - "fromToken": { - "address": "0x625e7708f30ca75bfd92586e17077590c60eb4cd", - "chainId": 10, - "symbol": "aOptUSDC", - "decimals": 6, - "name": "Aave Optimism USDC", - "priceUSD": "1", - "logoURI": "https://static.debank.com/image/op_token/logo_url/0x625e7708f30ca75bfd92586e17077590c60eb4cd/edbff4857cf186c17bfdac67f2b0e6b1.png", - "coinKey": "aOptUSDC" + action: { + fromToken: { + address: "0x625e7708f30ca75bfd92586e17077590c60eb4cd", + chainId: 10, + symbol: "aOptUSDC", + decimals: 6, + name: "Aave Optimism USDC", + priceUSD: "1", + logoURI: + "https://static.debank.com/image/op_token/logo_url/0x625e7708f30ca75bfd92586e17077590c60eb4cd/edbff4857cf186c17bfdac67f2b0e6b1.png", + coinKey: "aOptUSDC", }, - "fromAmount": "0.2", - "toToken": { - "address": "0xa0b86991c6218b36c1d19d4a2e9eb0ce3606eb48", - "symbol": "USDC", - "decimals": 6, - "chainId": 1, - "name": "USD Coin", - "coinKey": "USDC", - "logoURI": "https://static.debank.com/image/coin/logo_url/usdc/e87790bfe0b3f2ea855dc29069b38818.png", - "priceUSD": "1" + fromAmount: "0.2", + toToken: { + address: "0xa0b86991c6218b36c1d19d4a2e9eb0ce3606eb48", + symbol: "USDC", + decimals: 6, + chainId: 1, + name: "USD Coin", + coinKey: "USDC", + logoURI: + "https://static.debank.com/image/coin/logo_url/usdc/e87790bfe0b3f2ea855dc29069b38818.png", + priceUSD: "1", }, - "fromChainId": 10, - "toChainId": 1, - "slippage": 0.005, - "fromAddress": "0xd2b2A35039270d8fDcA84E7c15E1461daD9F3Ad7", - "toAddress": "0xd2b2A35039270d8fDcA84E7c15E1461daD9F3Ad7" + fromChainId: 10, + toChainId: 1, + slippage: 0.005, + fromAddress: "0xd2b2A35039270d8fDcA84E7c15E1461daD9F3Ad7", + toAddress: "0xd2b2A35039270d8fDcA84E7c15E1461daD9F3Ad7", }, - "estimate": { - "tool": "stargate", - "approvalAddress": "0x1231DEB6f5749EF6cE6943a275A1D3E7486F4EaE", - "toAmountMin": "2", - "toAmount": "2", - "fromAmount": "2", - "feeCosts": [ + estimate: { + tool: "stargate", + approvalAddress: "0x1231DEB6f5749EF6cE6943a275A1D3E7486F4EaE", + toAmountMin: "2", + toAmount: "2", + fromAmount: "2", + feeCosts: [ { - "name": "Integrator Fee", - "description": "Fee shared between integrator and LI.FI", - "token": { - "address": "0x625e7708f30ca75bfd92586e17077590c60eb4cd", - "chainId": 10, - "symbol": "aOptUSDC", - "decimals": 6, - "name": "Aave Optimism USDC", - "priceUSD": "1", - "logoURI": "https://static.debank.com/image/op_token/logo_url/0x625e7708f30ca75bfd92586e17077590c60eb4cd/edbff4857cf186c17bfdac67f2b0e6b1.png", - "coinKey": "aOptUSDC" + name: "Integrator Fee", + description: "Fee shared between integrator and LI.FI", + token: { + address: "0x625e7708f30ca75bfd92586e17077590c60eb4cd", + chainId: 10, + symbol: "aOptUSDC", + decimals: 6, + name: "Aave Optimism USDC", + priceUSD: "1", + logoURI: + "https://static.debank.com/image/op_token/logo_url/0x625e7708f30ca75bfd92586e17077590c60eb4cd/edbff4857cf186c17bfdac67f2b0e6b1.png", + coinKey: "aOptUSDC", }, - "amount": "0", - "amountUSD": "0.00", - "percentage": "0", - "included": true + amount: "0", + amountUSD: "0.00", + percentage: "0", + included: true, }, { - "name": "LayerZero fees", - "description": "Infrastructure fee paid in native token", - "token": { - "address": "0x0000000000000000000000000000000000000000", - "symbol": "ETH", - "decimals": 18, - "chainId": 10, - "name": "ETH", - "coinKey": "ETH", - "logoURI": "https://static.debank.com/image/op_token/logo_url/op/d61441782d4a08a7479d54aea211679e.png", - "priceUSD": "1573.41" + name: "LayerZero fees", + description: "Infrastructure fee paid in native token", + token: { + address: "0x0000000000000000000000000000000000000000", + symbol: "ETH", + decimals: 18, + chainId: 10, + name: "ETH", + coinKey: "ETH", + logoURI: + "https://static.debank.com/image/op_token/logo_url/op/d61441782d4a08a7479d54aea211679e.png", + priceUSD: "1573.41", }, - "amount": "3358382275654522", - "amountUSD": "5.28", - "percentage": "2642056.1282", - "included": false + amount: "3358382275654522", + amountUSD: "5.28", + percentage: "2642056.1282", + included: false, }, { - "name": "Equilibrium fees", - "description": "The fee paid to users who rebalance tokens for the stargate protocol", - "token": { - "address": "0x7f5c764cbc14f9669b88837ca1490cca17c31607", - "symbol": "USDC.e", - "decimals": 6, - "chainId": 10, - "name": "Bridged USD Coin", - "coinKey": "USDCe", - "logoURI": "https://static.debank.com/image/coin/logo_url/usdc/e87790bfe0b3f2ea855dc29069b38818.png", - "priceUSD": "1" + name: "Equilibrium fees", + description: + "The fee paid to users who rebalance tokens for the stargate protocol", + token: { + address: "0x7f5c764cbc14f9669b88837ca1490cca17c31607", + symbol: "USDC.e", + decimals: 6, + chainId: 10, + name: "Bridged USD Coin", + coinKey: "USDCe", + logoURI: + "https://static.debank.com/image/coin/logo_url/usdc/e87790bfe0b3f2ea855dc29069b38818.png", + priceUSD: "1", }, - "amount": "0", - "amountUSD": "0.00", - "percentage": "0.0000", - "included": true + amount: "0", + amountUSD: "0.00", + percentage: "0.0000", + included: true, }, { - "name": "Liquidity provider fees", - "description": "The fee paid to liquidity providers for the stargate protocol", - "token": { - "address": "0x7f5c764cbc14f9669b88837ca1490cca17c31607", - "symbol": "USDC.e", - "decimals": 6, - "chainId": 10, - "name": "Bridged USD Coin", - "coinKey": "USDCe", - "logoURI": "https://static.debank.com/image/coin/logo_url/usdc/e87790bfe0b3f2ea855dc29069b38818.png", - "priceUSD": "1" + name: "Liquidity provider fees", + description: + "The fee paid to liquidity providers for the stargate protocol", + token: { + address: "0x7f5c764cbc14f9669b88837ca1490cca17c31607", + symbol: "USDC.e", + decimals: 6, + chainId: 10, + name: "Bridged USD Coin", + coinKey: "USDCe", + logoURI: + "https://static.debank.com/image/coin/logo_url/usdc/e87790bfe0b3f2ea855dc29069b38818.png", + priceUSD: "1", }, - "amount": "0", - "amountUSD": "0.00", - "percentage": "0.0000", - "included": true + amount: "0", + amountUSD: "0.00", + percentage: "0.0000", + included: true, }, { - "name": "Protocol fees", - "description": "The fee paid to the stargate protocol", - "token": { - "address": "0x7f5c764cbc14f9669b88837ca1490cca17c31607", - "symbol": "USDC.e", - "decimals": 6, - "chainId": 10, - "name": "Bridged USD Coin", - "coinKey": "USDCe", - "logoURI": "https://static.debank.com/image/coin/logo_url/usdc/e87790bfe0b3f2ea855dc29069b38818.png", - "priceUSD": "1" + name: "Protocol fees", + description: "The fee paid to the stargate protocol", + token: { + address: "0x7f5c764cbc14f9669b88837ca1490cca17c31607", + symbol: "USDC.e", + decimals: 6, + chainId: 10, + name: "Bridged USD Coin", + coinKey: "USDCe", + logoURI: + "https://static.debank.com/image/coin/logo_url/usdc/e87790bfe0b3f2ea855dc29069b38818.png", + priceUSD: "1", }, - "amount": "0", - "amountUSD": "0.00", - "percentage": "0.0000", - "included": true - } + amount: "0", + amountUSD: "0.00", + percentage: "0.0000", + included: true, + }, ], - "gasCosts": [ + gasCosts: [ { - "type": "SEND", - "price": "55972628", - "estimate": "1586508", - "limit": "2379762", - "amount": "88801022103024", - "amountUSD": "0.14", - "token": { - "address": "0x0000000000000000000000000000000000000000", - "symbol": "ETH", - "decimals": 18, - "chainId": 10, - "name": "ETH", - "coinKey": "ETH", - "logoURI": "https://static.debank.com/image/op_token/logo_url/op/d61441782d4a08a7479d54aea211679e.png", - "priceUSD": "1573.41" - } - } + type: "SEND", + price: "55972628", + estimate: "1586508", + limit: "2379762", + amount: "88801022103024", + amountUSD: "0.14", + token: { + address: "0x0000000000000000000000000000000000000000", + symbol: "ETH", + decimals: 18, + chainId: 10, + name: "ETH", + coinKey: "ETH", + logoURI: + "https://static.debank.com/image/op_token/logo_url/op/d61441782d4a08a7479d54aea211679e.png", + priceUSD: "1573.41", + }, + }, ], - "executionDuration": 70, - "fromAmountUSD": "0.00", - "toAmountUSD": "0.00" + executionDuration: 70, + fromAmountUSD: "0.00", + toAmountUSD: "0.00", }, - "includedSteps": [ + includedSteps: [ { - "id": "6ae78e41-66a0-4435-8e66-a5fcdb92c785", - "type": "protocol", - "action": { - "fromChainId": 10, - "fromAmount": "2", - "fromToken": { - "address": "0x625e7708f30ca75bfd92586e17077590c60eb4cd", - "chainId": 10, - "symbol": "aOptUSDC", - "decimals": 6, - "name": "Aave Optimism USDC", - "priceUSD": "1", - "logoURI": "https://static.debank.com/image/op_token/logo_url/0x625e7708f30ca75bfd92586e17077590c60eb4cd/edbff4857cf186c17bfdac67f2b0e6b1.png", - "coinKey": "aOptUSDC" + id: "6ae78e41-66a0-4435-8e66-a5fcdb92c785", + type: "protocol", + action: { + fromChainId: 10, + fromAmount: "2", + fromToken: { + address: "0x625e7708f30ca75bfd92586e17077590c60eb4cd", + chainId: 10, + symbol: "aOptUSDC", + decimals: 6, + name: "Aave Optimism USDC", + priceUSD: "1", + logoURI: + "https://static.debank.com/image/op_token/logo_url/0x625e7708f30ca75bfd92586e17077590c60eb4cd/edbff4857cf186c17bfdac67f2b0e6b1.png", + coinKey: "aOptUSDC", }, - "toChainId": 10, - "toToken": { - "address": "0x625e7708f30ca75bfd92586e17077590c60eb4cd", - "chainId": 10, - "symbol": "aOptUSDC", - "decimals": 6, - "name": "Aave Optimism USDC", - "priceUSD": "1", - "logoURI": "https://static.debank.com/image/op_token/logo_url/0x625e7708f30ca75bfd92586e17077590c60eb4cd/edbff4857cf186c17bfdac67f2b0e6b1.png", - "coinKey": "aOptUSDC" + toChainId: 10, + toToken: { + address: "0x625e7708f30ca75bfd92586e17077590c60eb4cd", + chainId: 10, + symbol: "aOptUSDC", + decimals: 6, + name: "Aave Optimism USDC", + priceUSD: "1", + logoURI: + "https://static.debank.com/image/op_token/logo_url/0x625e7708f30ca75bfd92586e17077590c60eb4cd/edbff4857cf186c17bfdac67f2b0e6b1.png", + coinKey: "aOptUSDC", }, - "slippage": 0.005, - "fromAddress": "0x1231DEB6f5749EF6cE6943a275A1D3E7486F4EaE", - "toAddress": "0x1231DEB6f5749EF6cE6943a275A1D3E7486F4EaE" + slippage: 0.005, + fromAddress: "0x1231DEB6f5749EF6cE6943a275A1D3E7486F4EaE", + toAddress: "0x1231DEB6f5749EF6cE6943a275A1D3E7486F4EaE", }, - "estimate": { - "fromAmount": "2", - "toAmount": "2", - "toAmountMin": "2", - "tool": "feeCollection", - "approvalAddress": "0xbD6C7B0d2f68c2b7805d88388319cfB6EcB50eA9", - "gasCosts": [ + estimate: { + fromAmount: "2", + toAmount: "2", + toAmountMin: "2", + tool: "feeCollection", + approvalAddress: "0xbD6C7B0d2f68c2b7805d88388319cfB6EcB50eA9", + gasCosts: [ { - "type": "SEND", - "amount": "130000", - "token": { - "address": "0x0000000000000000000000000000000000000000", - "symbol": "ETH", - "decimals": 18, - "chainId": 10, - "name": "ETH", - "coinKey": "ETH", - "logoURI": "https://static.debank.com/image/op_token/logo_url/op/d61441782d4a08a7479d54aea211679e.png", - "priceUSD": "1573.41" + type: "SEND", + amount: "130000", + token: { + address: "0x0000000000000000000000000000000000000000", + symbol: "ETH", + decimals: 18, + chainId: 10, + name: "ETH", + coinKey: "ETH", + logoURI: + "https://static.debank.com/image/op_token/logo_url/op/d61441782d4a08a7479d54aea211679e.png", + priceUSD: "1573.41", }, - "price": "55972628", - "limit": "200000", - "estimate": "200000", - "amountUSD": "0.01" - } + price: "55972628", + limit: "200000", + estimate: "200000", + amountUSD: "0.01", + }, ], - "feeCosts": [ + feeCosts: [ { - "name": "Integrator Fee", - "description": "Fee shared between integrator and LI.FI", - "token": { - "address": "0x625e7708f30ca75bfd92586e17077590c60eb4cd", - "chainId": 10, - "symbol": "aOptUSDC", - "decimals": 6, - "name": "Aave Optimism USDC", - "priceUSD": "1", - "logoURI": "https://static.debank.com/image/op_token/logo_url/0x625e7708f30ca75bfd92586e17077590c60eb4cd/edbff4857cf186c17bfdac67f2b0e6b1.png", - "coinKey": "aOptUSDC" + name: "Integrator Fee", + description: "Fee shared between integrator and LI.FI", + token: { + address: "0x625e7708f30ca75bfd92586e17077590c60eb4cd", + chainId: 10, + symbol: "aOptUSDC", + decimals: 6, + name: "Aave Optimism USDC", + priceUSD: "1", + logoURI: + "https://static.debank.com/image/op_token/logo_url/0x625e7708f30ca75bfd92586e17077590c60eb4cd/edbff4857cf186c17bfdac67f2b0e6b1.png", + coinKey: "aOptUSDC", }, - "amount": "0", - "amountUSD": "0.00", - "percentage": "0", - "included": true - } + amount: "0", + amountUSD: "0.00", + percentage: "0", + included: true, + }, ], - "executionDuration": 0 + executionDuration: 0, + }, + tool: "feeCollection", + toolDetails: { + key: "feeCollection", + name: "Integrator Fee", + logoURI: + "https://raw.githubusercontent.com/lifinance/types/main/src/assets/icons/protocols/feeCollection.png", }, - "tool": "feeCollection", - "toolDetails": { - "key": "feeCollection", - "name": "Integrator Fee", - "logoURI": "https://raw.githubusercontent.com/lifinance/types/main/src/assets/icons/protocols/feeCollection.png" - } }, { - "id": "10c780b1-475e-4cf7-b671-96ae464f3419", - "type": "swap", - "action": { - "fromChainId": 10, - "fromAmount": "2", - "fromToken": { - "address": "0x625e7708f30ca75bfd92586e17077590c60eb4cd", - "chainId": 10, - "symbol": "aOptUSDC", - "decimals": 6, - "name": "Aave Optimism USDC", - "priceUSD": "1", - "logoURI": "https://static.debank.com/image/op_token/logo_url/0x625e7708f30ca75bfd92586e17077590c60eb4cd/edbff4857cf186c17bfdac67f2b0e6b1.png", - "coinKey": "aOptUSDC" + id: "10c780b1-475e-4cf7-b671-96ae464f3419", + type: "swap", + action: { + fromChainId: 10, + fromAmount: "2", + fromToken: { + address: "0x625e7708f30ca75bfd92586e17077590c60eb4cd", + chainId: 10, + symbol: "aOptUSDC", + decimals: 6, + name: "Aave Optimism USDC", + priceUSD: "1", + logoURI: + "https://static.debank.com/image/op_token/logo_url/0x625e7708f30ca75bfd92586e17077590c60eb4cd/edbff4857cf186c17bfdac67f2b0e6b1.png", + coinKey: "aOptUSDC", }, - "toChainId": 10, - "toToken": { - "address": "0x7f5c764cbc14f9669b88837ca1490cca17c31607", - "symbol": "USDC.e", - "decimals": 6, - "chainId": 10, - "name": "Bridged USD Coin", - "coinKey": "USDCe", - "logoURI": "https://static.debank.com/image/coin/logo_url/usdc/e87790bfe0b3f2ea855dc29069b38818.png", - "priceUSD": "1" + toChainId: 10, + toToken: { + address: "0x7f5c764cbc14f9669b88837ca1490cca17c31607", + symbol: "USDC.e", + decimals: 6, + chainId: 10, + name: "Bridged USD Coin", + coinKey: "USDCe", + logoURI: + "https://static.debank.com/image/coin/logo_url/usdc/e87790bfe0b3f2ea855dc29069b38818.png", + priceUSD: "1", }, - "slippage": 0.005, - "fromAddress": "0x1231DEB6f5749EF6cE6943a275A1D3E7486F4EaE", - "toAddress": "0x1231DEB6f5749EF6cE6943a275A1D3E7486F4EaE" + slippage: 0.005, + fromAddress: "0x1231DEB6f5749EF6cE6943a275A1D3E7486F4EaE", + toAddress: "0x1231DEB6f5749EF6cE6943a275A1D3E7486F4EaE", }, - "estimate": { - "tool": "1inch", - "fromAmount": "2", - "toAmount": "2", - "toAmountMin": "2", - "approvalAddress": "0x1111111254eeb25477b68fb85ed929f73a960582", - "executionDuration": 30, - "feeCosts": [], - "gasCosts": [ + estimate: { + tool: "1inch", + fromAmount: "2", + toAmount: "2", + toAmountMin: "2", + approvalAddress: "0x1111111254eeb25477b68fb85ed929f73a960582", + executionDuration: 30, + feeCosts: [], + gasCosts: [ { - "type": "SEND", - "price": "55972628", - "estimate": "518508", - "limit": "777762", - "amount": "29022255399024", - "amountUSD": "0.05", - "token": { - "address": "0x0000000000000000000000000000000000000000", - "symbol": "ETH", - "decimals": 18, - "chainId": 10, - "name": "ETH", - "coinKey": "ETH", - "logoURI": "https://static.debank.com/image/op_token/logo_url/op/d61441782d4a08a7479d54aea211679e.png", - "priceUSD": "1573.41" - } - } + type: "SEND", + price: "55972628", + estimate: "518508", + limit: "777762", + amount: "29022255399024", + amountUSD: "0.05", + token: { + address: "0x0000000000000000000000000000000000000000", + symbol: "ETH", + decimals: 18, + chainId: 10, + name: "ETH", + coinKey: "ETH", + logoURI: + "https://static.debank.com/image/op_token/logo_url/op/d61441782d4a08a7479d54aea211679e.png", + priceUSD: "1573.41", + }, + }, ], - "toolData": { - "fromToken": { - "address": "0x625e7708f30ca75bfd92586e17077590c60eb4cd", - "symbol": "aOptUSDC", - "name": "Aave Optimism USDC", - "decimals": 6 + toolData: { + fromToken: { + address: "0x625e7708f30ca75bfd92586e17077590c60eb4cd", + symbol: "aOptUSDC", + name: "Aave Optimism USDC", + decimals: 6, }, - "toToken": { - "address": "0x7f5c764cbc14f9669b88837ca1490cca17c31607", - "symbol": "USDC", - "name": "USD Coin", - "decimals": 6, - "logoURI": "https://tokens.1inch.io/0x7f5c764cbc14f9669b88837ca1490cca17c31607.png", - "tags": [ - "PEG:USD", - "tokens" - ] + toToken: { + address: "0x7f5c764cbc14f9669b88837ca1490cca17c31607", + symbol: "USDC", + name: "USD Coin", + decimals: 6, + logoURI: + "https://tokens.1inch.io/0x7f5c764cbc14f9669b88837ca1490cca17c31607.png", + tags: ["PEG:USD", "tokens"], }, - "estimatedGas": 518508, - "protocols": [ + estimatedGas: 518508, + protocols: [ [ [ { - "name": "OPTIMISM_AAVE_V3", - "part": 100, - "fromTokenAddress": "0x625e7708f30ca75bfd92586e17077590c60eb4cd", - "toTokenAddress": "0x7f5c764cbc14f9669b88837ca1490cca17c31607" - } - ] - ] + name: "OPTIMISM_AAVE_V3", + part: 100, + fromTokenAddress: + "0x625e7708f30ca75bfd92586e17077590c60eb4cd", + toTokenAddress: "0x7f5c764cbc14f9669b88837ca1490cca17c31607", + }, + ], + ], ], - "toTokenAmount": "2", - "fromTokenAmount": "2" - } + toTokenAmount: "2", + fromTokenAmount: "2", + }, + }, + tool: "1inch", + toolDetails: { + key: "1inch", + name: "1inch", + logoURI: + "https://raw.githubusercontent.com/lifinance/types/main/src/assets/icons/exchanges/oneinch.png", }, - "tool": "1inch", - "toolDetails": { - "key": "1inch", - "name": "1inch", - "logoURI": "https://raw.githubusercontent.com/lifinance/types/main/src/assets/icons/exchanges/oneinch.png" - } }, { - "id": "b1342367-306c-49e6-b568-c0b8d363b20d", - "type": "cross", - "action": { - "fromChainId": 10, - "fromAmount": "2", - "fromToken": { - "address": "0x7f5c764cbc14f9669b88837ca1490cca17c31607", - "symbol": "USDC.e", - "decimals": 6, - "chainId": 10, - "name": "Bridged USD Coin", - "coinKey": "USDCe", - "logoURI": "https://static.debank.com/image/coin/logo_url/usdc/e87790bfe0b3f2ea855dc29069b38818.png", - "priceUSD": "1" + id: "b1342367-306c-49e6-b568-c0b8d363b20d", + type: "cross", + action: { + fromChainId: 10, + fromAmount: "2", + fromToken: { + address: "0x7f5c764cbc14f9669b88837ca1490cca17c31607", + symbol: "USDC.e", + decimals: 6, + chainId: 10, + name: "Bridged USD Coin", + coinKey: "USDCe", + logoURI: + "https://static.debank.com/image/coin/logo_url/usdc/e87790bfe0b3f2ea855dc29069b38818.png", + priceUSD: "1", }, - "toChainId": 1, - "toToken": { - "address": "0xa0b86991c6218b36c1d19d4a2e9eb0ce3606eb48", - "symbol": "USDC", - "decimals": 6, - "chainId": 1, - "name": "USD Coin", - "coinKey": "USDC", - "logoURI": "https://static.debank.com/image/coin/logo_url/usdc/e87790bfe0b3f2ea855dc29069b38818.png", - "priceUSD": "1" + toChainId: 1, + toToken: { + address: "0xa0b86991c6218b36c1d19d4a2e9eb0ce3606eb48", + symbol: "USDC", + decimals: 6, + chainId: 1, + name: "USD Coin", + coinKey: "USDC", + logoURI: + "https://static.debank.com/image/coin/logo_url/usdc/e87790bfe0b3f2ea855dc29069b38818.png", + priceUSD: "1", }, - "slippage": 0.005, - "destinationGasConsumption": "0", - "destinationCallData": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", - "fromAddress": "0x1231DEB6f5749EF6cE6943a275A1D3E7486F4EaE", - "toAddress": "0xd2b2A35039270d8fDcA84E7c15E1461daD9F3Ad7" + slippage: 0.005, + destinationGasConsumption: "0", + destinationCallData: + "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + fromAddress: "0x1231DEB6f5749EF6cE6943a275A1D3E7486F4EaE", + toAddress: "0xd2b2A35039270d8fDcA84E7c15E1461daD9F3Ad7", }, - "estimate": { - "tool": "stargate", - "fromAmount": "2", - "toAmount": "2", - "toAmountMin": "2", - "approvalAddress": "0xB0D502E938ed5f4df2E681fE6E419ff29631d62b", - "executionDuration": 40, - "feeCosts": [ + estimate: { + tool: "stargate", + fromAmount: "2", + toAmount: "2", + toAmountMin: "2", + approvalAddress: "0xB0D502E938ed5f4df2E681fE6E419ff29631d62b", + executionDuration: 40, + feeCosts: [ { - "name": "LayerZero fees", - "description": "Infrastructure fee paid in native token", - "token": { - "address": "0x0000000000000000000000000000000000000000", - "symbol": "ETH", - "decimals": 18, - "chainId": 10, - "name": "ETH", - "coinKey": "ETH", - "logoURI": "https://static.debank.com/image/op_token/logo_url/op/d61441782d4a08a7479d54aea211679e.png", - "priceUSD": "1573.41" + name: "LayerZero fees", + description: "Infrastructure fee paid in native token", + token: { + address: "0x0000000000000000000000000000000000000000", + symbol: "ETH", + decimals: 18, + chainId: 10, + name: "ETH", + coinKey: "ETH", + logoURI: + "https://static.debank.com/image/op_token/logo_url/op/d61441782d4a08a7479d54aea211679e.png", + priceUSD: "1573.41", }, - "amount": "3358382275654522", - "amountUSD": "5.28", - "percentage": "2642056.1282", - "included": false + amount: "3358382275654522", + amountUSD: "5.28", + percentage: "2642056.1282", + included: false, }, { - "name": "Equilibrium fees", - "description": "The fee paid to users who rebalance tokens for the stargate protocol", - "token": { - "address": "0x7f5c764cbc14f9669b88837ca1490cca17c31607", - "symbol": "USDC.e", - "decimals": 6, - "chainId": 10, - "name": "Bridged USD Coin", - "coinKey": "USDCe", - "logoURI": "https://static.debank.com/image/coin/logo_url/usdc/e87790bfe0b3f2ea855dc29069b38818.png", - "priceUSD": "1" + name: "Equilibrium fees", + description: + "The fee paid to users who rebalance tokens for the stargate protocol", + token: { + address: "0x7f5c764cbc14f9669b88837ca1490cca17c31607", + symbol: "USDC.e", + decimals: 6, + chainId: 10, + name: "Bridged USD Coin", + coinKey: "USDCe", + logoURI: + "https://static.debank.com/image/coin/logo_url/usdc/e87790bfe0b3f2ea855dc29069b38818.png", + priceUSD: "1", }, - "amount": "0", - "amountUSD": "0.00", - "percentage": "0.0000", - "included": true + amount: "0", + amountUSD: "0.00", + percentage: "0.0000", + included: true, }, { - "name": "Liquidity provider fees", - "description": "The fee paid to liquidity providers for the stargate protocol", - "token": { - "address": "0x7f5c764cbc14f9669b88837ca1490cca17c31607", - "symbol": "USDC.e", - "decimals": 6, - "chainId": 10, - "name": "Bridged USD Coin", - "coinKey": "USDCe", - "logoURI": "https://static.debank.com/image/coin/logo_url/usdc/e87790bfe0b3f2ea855dc29069b38818.png", - "priceUSD": "1" + name: "Liquidity provider fees", + description: + "The fee paid to liquidity providers for the stargate protocol", + token: { + address: "0x7f5c764cbc14f9669b88837ca1490cca17c31607", + symbol: "USDC.e", + decimals: 6, + chainId: 10, + name: "Bridged USD Coin", + coinKey: "USDCe", + logoURI: + "https://static.debank.com/image/coin/logo_url/usdc/e87790bfe0b3f2ea855dc29069b38818.png", + priceUSD: "1", }, - "amount": "0", - "amountUSD": "0.00", - "percentage": "0.0000", - "included": true + amount: "0", + amountUSD: "0.00", + percentage: "0.0000", + included: true, }, { - "name": "Protocol fees", - "description": "The fee paid to the stargate protocol", - "token": { - "address": "0x7f5c764cbc14f9669b88837ca1490cca17c31607", - "symbol": "USDC.e", - "decimals": 6, - "chainId": 10, - "name": "Bridged USD Coin", - "coinKey": "USDCe", - "logoURI": "https://static.debank.com/image/coin/logo_url/usdc/e87790bfe0b3f2ea855dc29069b38818.png", - "priceUSD": "1" + name: "Protocol fees", + description: "The fee paid to the stargate protocol", + token: { + address: "0x7f5c764cbc14f9669b88837ca1490cca17c31607", + symbol: "USDC.e", + decimals: 6, + chainId: 10, + name: "Bridged USD Coin", + coinKey: "USDCe", + logoURI: + "https://static.debank.com/image/coin/logo_url/usdc/e87790bfe0b3f2ea855dc29069b38818.png", + priceUSD: "1", }, - "amount": "0", - "amountUSD": "0.00", - "percentage": "0.0000", - "included": true - } + amount: "0", + amountUSD: "0.00", + percentage: "0.0000", + included: true, + }, ], - "gasCosts": [ + gasCosts: [ { - "type": "SEND", - "price": "55972628", - "estimate": "525000", - "limit": "787500", - "amount": "29385629700000", - "amountUSD": "0.05", - "token": { - "address": "0x0000000000000000000000000000000000000000", - "symbol": "ETH", - "decimals": 18, - "chainId": 10, - "name": "ETH", - "coinKey": "ETH", - "logoURI": "https://static.debank.com/image/op_token/logo_url/op/d61441782d4a08a7479d54aea211679e.png", - "priceUSD": "1573.41" - } - } + type: "SEND", + price: "55972628", + estimate: "525000", + limit: "787500", + amount: "29385629700000", + amountUSD: "0.05", + token: { + address: "0x0000000000000000000000000000000000000000", + symbol: "ETH", + decimals: 18, + chainId: 10, + name: "ETH", + coinKey: "ETH", + logoURI: + "https://static.debank.com/image/op_token/logo_url/op/d61441782d4a08a7479d54aea211679e.png", + priceUSD: "1573.41", + }, + }, ], - "toolData": { - "sourcePoolId": "1", - "destinationPoolId": "1", - "router": "0xB0D502E938ed5f4df2E681fE6E419ff29631d62b", - "layerZeroChainId": 101 - } + toolData: { + sourcePoolId: "1", + destinationPoolId: "1", + router: "0xB0D502E938ed5f4df2E681fE6E419ff29631d62b", + layerZeroChainId: 101, + }, }, - "tool": "stargate", - "toolDetails": { - "key": "stargate", - "name": "Stargate", - "logoURI": "https://raw.githubusercontent.com/lifinance/types/5685c638772f533edad80fcb210b4bb89e30a50f/src/assets/icons/bridges/stargate.png" - } - } + tool: "stargate", + toolDetails: { + key: "stargate", + name: "Stargate", + logoURI: + "https://raw.githubusercontent.com/lifinance/types/5685c638772f533edad80fcb210b4bb89e30a50f/src/assets/icons/bridges/stargate.png", + }, + }, ], - "integrator": "hexa-lite", - "transactionRequest": { - "data": "0xed17861900000000000000000000000000000000000000000000000000000000000000600000000000000000000000000000000000000000000000000000000000000220000000000000000000000000000000000000000000000000000000000000076098db3c9bcf693438ae393a90b6b853c20c5e32f5d71f51e2415bcdc5ee66ec0d0000000000000000000000000000000000000000000000000000000000000140000000000000000000000000000000000000000000000000000000000000018000000000000000000000000000000000000000000000000000000000000000000000000000000000000000007f5c764cbc14f9669b88837ca1490cca17c31607000000000000000000000000d2b2a35039270d8fdca84e7c15e1461dad9f3ad70000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000873746172676174650000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000009686578612d6c69746500000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000004000000000000000000000000000000000000000000000000000000000000001e0000000000000000000000000bd6c7b0d2f68c2b7805d88388319cfb6ecb50ea9000000000000000000000000bd6c7b0d2f68c2b7805d88388319cfb6ecb50ea9000000000000000000000000625e7708f30ca75bfd92586e17077590c60eb4cd000000000000000000000000625e7708f30ca75bfd92586e17077590c60eb4cd000000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000e000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000084eedd56e1000000000000000000000000625e7708f30ca75bfd92586e17077590c60eb4cd000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003ec627be9a3c1f30ef5fbf39609d2d6ab947e37e000000000000000000000000000000000000000000000000000000000000000000000000000000001111111254eeb25477b68fb85ed929f73a9605820000000000000000000000001111111254eeb25477b68fb85ed929f73a960582000000000000000000000000625e7708f30ca75bfd92586e17077590c60eb4cd0000000000000000000000007f5c764cbc14f9669b88837ca1490cca17c31607000000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000e00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000022412aa3caf000000000000000000000000b63aae6c353636d66df13b89ba4425cfe13d10ba000000000000000000000000625e7708f30ca75bfd92586e17077590c60eb4cd0000000000000000000000007f5c764cbc14f9669b88837ca1490cca17c31607000000000000000000000000b63aae6c353636d66df13b89ba4425cfe13d10ba0000000000000000000000001231deb6f5749ef6ce6943a275a1d3e7486f4eae000000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000004000000000000000000000000000000000000000000000000000000000000014000000000000000000000000000000000000000000000000000000000000001600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000009a00000000000000000000000000000000000000000000000000000000007c4120794a61358d6845594f94dc1db02a252b5b4814ad002469328dec0000000000000000000000007f5c764cbc14f9669b88837ca1490cca17c3160700000000000000000000000000000000000000000000000000000000000000000000000000000000000000001111111254eeb25477b68fb85ed929f73a960582000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000bee6e4e8f737a000000000000000000000000d2b2a35039270d8fdca84e7c15e1461dad9f3ad7000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000001400000000000000000000000000000000000000000000000000000000000000014d2b2a35039270d8fdca84e7c15e1461dad9f3ad70000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", - "to": "0x1231DEB6f5749EF6cE6943a275A1D3E7486F4EaE", - "value": "0x0bee6e4e8f737a", - "from": "0xd2b2A35039270d8fDcA84E7c15E1461daD9F3Ad7", - "chainId": 10, - "gasPrice": "0x03561314", - "gasLimit": "0x244ff2" - } + integrator: "hexa-lite", + transactionRequest: { + data: "0xed17861900000000000000000000000000000000000000000000000000000000000000600000000000000000000000000000000000000000000000000000000000000220000000000000000000000000000000000000000000000000000000000000076098db3c9bcf693438ae393a90b6b853c20c5e32f5d71f51e2415bcdc5ee66ec0d0000000000000000000000000000000000000000000000000000000000000140000000000000000000000000000000000000000000000000000000000000018000000000000000000000000000000000000000000000000000000000000000000000000000000000000000007f5c764cbc14f9669b88837ca1490cca17c31607000000000000000000000000d2b2a35039270d8fdca84e7c15e1461dad9f3ad70000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000873746172676174650000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000009686578612d6c69746500000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000004000000000000000000000000000000000000000000000000000000000000001e0000000000000000000000000bd6c7b0d2f68c2b7805d88388319cfb6ecb50ea9000000000000000000000000bd6c7b0d2f68c2b7805d88388319cfb6ecb50ea9000000000000000000000000625e7708f30ca75bfd92586e17077590c60eb4cd000000000000000000000000625e7708f30ca75bfd92586e17077590c60eb4cd000000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000e000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000084eedd56e1000000000000000000000000625e7708f30ca75bfd92586e17077590c60eb4cd000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003ec627be9a3c1f30ef5fbf39609d2d6ab947e37e000000000000000000000000000000000000000000000000000000000000000000000000000000001111111254eeb25477b68fb85ed929f73a9605820000000000000000000000001111111254eeb25477b68fb85ed929f73a960582000000000000000000000000625e7708f30ca75bfd92586e17077590c60eb4cd0000000000000000000000007f5c764cbc14f9669b88837ca1490cca17c31607000000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000e00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000022412aa3caf000000000000000000000000b63aae6c353636d66df13b89ba4425cfe13d10ba000000000000000000000000625e7708f30ca75bfd92586e17077590c60eb4cd0000000000000000000000007f5c764cbc14f9669b88837ca1490cca17c31607000000000000000000000000b63aae6c353636d66df13b89ba4425cfe13d10ba0000000000000000000000001231deb6f5749ef6ce6943a275a1d3e7486f4eae000000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000004000000000000000000000000000000000000000000000000000000000000014000000000000000000000000000000000000000000000000000000000000001600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000009a00000000000000000000000000000000000000000000000000000000007c4120794a61358d6845594f94dc1db02a252b5b4814ad002469328dec0000000000000000000000007f5c764cbc14f9669b88837ca1490cca17c3160700000000000000000000000000000000000000000000000000000000000000000000000000000000000000001111111254eeb25477b68fb85ed929f73a960582000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000bee6e4e8f737a000000000000000000000000d2b2a35039270d8fdca84e7c15e1461dad9f3ad7000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000001400000000000000000000000000000000000000000000000000000000000000014d2b2a35039270d8fdca84e7c15e1461dad9f3ad70000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + to: "0x1231DEB6f5749EF6cE6943a275A1D3E7486F4EaE", + value: "0x0bee6e4e8f737a", + from: "0xd2b2A35039270d8fDcA84E7c15E1461daD9F3Ad7", + chainId: 10, + gasPrice: "0x03561314", + gasLimit: "0x244ff2", + }, } as LiFiQuoteResponse; /** * Sending the Transaction */ export const sendTransaction = async ( - quote: LiFiQuoteResponse, - provider: ethers.providers.Web3Provider, + quote: LiFiQuoteResponse, + provider: ethers.providers.Web3Provider ) => { const signer = provider.getSigner(); const tx = await signer.sendTransaction(quote.transactionRequest); const receipt = await tx.wait(); return receipt; -} +}; /** * Checking allowence @@ -746,58 +778,128 @@ export const sendTransaction = async ( */ export const checkAndSetAllowance = async ( - provider: ethers.providers.Web3Provider, - tokenAddress: string, - approvalAddress: string, - amount: string, + provider: ethers.providers.Web3Provider, + tokenAddress: string, + approvalAddress: string, + amount: string ) => { - // Transactions with the native token don't need approval - if (tokenAddress === ethers.constants.AddressZero) { - return - } - const signer = provider.getSigner(); - const erc20 = new Contract(tokenAddress, ERC20_ABI, signer); - const address = await signer.getAddress(); - const allowance = await erc20.allowance(address, approvalAddress); - if (allowance.lt(amount)) { - const approveTx = await erc20.approve(approvalAddress, amount); - await approveTx.wait(); - } -} + // Transactions with the native token don't need approval + if (tokenAddress === ethers.constants.AddressZero) { + return; + } + const signer = provider.getSigner(); + const erc20 = new Contract(tokenAddress, ERC20_ABI, signer); + const address = await signer.getAddress(); + const allowance = await erc20.allowance(address, approvalAddress); + if (allowance.lt(amount)) { + const approveTx = await erc20.approve(approvalAddress, amount); + await approveTx.wait(); + } +}; /** * Perform the swap with LiFi - * @param ops - * @param provider + * @param ops + * @param provider */ export const swapWithLiFi = async ( ops: { - fromChain: string, - toChain: string, - fromToken: string, - toToken: string, - fromAmount: string, - fromAddress: string, + fromChain: string; + toChain: string; + fromToken: string; + toToken: string; + fromAmount: string; + fromAddress: string; }, - provider: ethers.providers.Web3Provider, + provider: ethers.providers.Web3Provider ) => { const quote = await getQuote( - ops.fromChain, - ops.toChain, - ops.fromToken, - ops.toToken, - ops.fromAmount, - ops.fromAddress, + ops.fromChain, + ops.toChain, + ops.fromToken, + ops.toToken, + ops.fromAmount, + ops.fromAddress ); await checkAndSetAllowance( - provider, - quote.action.fromToken.address, - quote.estimate.approvalAddress, - quote.action.fromAmount, + provider, + quote.action.fromToken.address, + quote.estimate.approvalAddress, + quote.action.fromAmount ); const receipt = await sendTransaction(quote, provider); return receipt; -} +}; + +export const getTokensPrice = async (tokens: IAsset[]) => { + if (!tokens.length) { + return []; + } + const options = { method: "GET", headers: { accept: "application/json" } }; + const chainIds = tokens + .map((token) => token.chain?.id) + .filter(Boolean) + .join(","); + const url = `https://li.quest/v1/tokens?chains=${chainIds}`; + let tokensResponse!: { [key: string]: Token[] }; + //use Cache API to store the response + try { + const cache = await caches.open("hexa-lite_li-quest"); + cache.keys; + const { data, timestamp } = + ((await cache.match(url)?.then((r) => r?.json())) as { + data: { + tokens: { + [key: string]: Token[]; + }; + }; + timestamp: number; + }) || {}; + if (data && Date.now() - timestamp < 1000 * 60 * 15) { + tokensResponse = data.tokens; + console.log("[INFO] Tokens with price from cache:", data); + } else { + const response = await fetch(url, options); + const responseData = (await response.json()) as { + tokens: { [key: string]: Token[] }; + }; + cache.put( + url, + new Response( + JSON.stringify({ + data: responseData, + timestamp: Date.now(), + }) + ) + ); + tokensResponse = responseData.tokens; + } + } catch (error) { + throw error; + } + const tokenWithPrice: IAsset[] = []; + for (const token of tokens) { + const index = tokensResponse[token.chain?.id as number].findIndex( + (t) => t.symbol === token.symbol + ); + if (index > -1) { + tokenWithPrice.push({ + ...token, + priceUsd: Number( + tokensResponse[token.chain?.id as number][index].priceUSD + ), + balanceUsd: + token.balance * + Number(tokensResponse[token.chain?.id as number][index].priceUSD), + thumbnail: + token.thumbnail || + tokensResponse[token.chain?.id as number][index].logoURI, + }); + } + } + // console.log("[INFO] Tokens with price:", tokenWithPrice); + return tokenWithPrice; +}; export const LIFI_CONFIG = Object.freeze({ // integrator: "cra-example", @@ -808,7 +910,7 @@ export const LIFI_CONFIG = Object.freeze({ containerStyle: { border: `1px solid rgba(var(--ion-color-primary-rgb), 0.4);`, borderRadius: "32px", - filter: "drop-shadow(rgba(var(--ion-color-primary-rgb), .1) 0px 0px 50px )" + filter: "drop-shadow(rgba(var(--ion-color-primary-rgb), .1) 0px 0px 50px )", }, theme: { shape: { @@ -817,24 +919,24 @@ export const LIFI_CONFIG = Object.freeze({ }, palette: { grey: { - "800": 'rgba(var(--ion-color-primary-rgb), 0.4)' + "800": "rgba(var(--ion-color-primary-rgb), 0.4)", }, text: { - primary: 'rgb(var(--ion-text-color-rgb))', - secondary: 'rgba(var(--ion-text-color-rgb), 0.6)', + primary: "rgb(var(--ion-text-color-rgb))", + secondary: "rgba(var(--ion-text-color-rgb), 0.6)", }, background: { - paper: 'rgb(var(--item-background-shader-rgb))', // green + paper: "rgb(var(--item-background-shader-rgb))", // green // default: '#182449', }, primary: { main: "#0090FF", - contrastText: 'rgb(var(--ion-text-color.rgb))', + contrastText: "rgb(var(--ion-text-color.rgb))", }, secondary: { - main: '#4CCCE6', - contrastText: 'rgb(var(--ion-text-color.rgb))', - } + main: "#4CCCE6", + contrastText: "rgb(var(--ion-text-color.rgb))", + }, }, }, languages: { @@ -842,4 +944,4 @@ export const LIFI_CONFIG = Object.freeze({ }, appearance: "dark", hiddenUI: [HiddenUI.Appearance, HiddenUI.PoweredBy, HiddenUI.Language], -}); \ No newline at end of file +}); From 0fbc2ad4640087db09b5bdafef00f15d17f40168 Mon Sep 17 00:00:00 2001 From: FazioNico Date: Tue, 9 Apr 2024 16:51:57 +0200 Subject: [PATCH 72/74] feat: add timestamp tracking to utm Closes #46 --- src/servcies/datas.service.ts | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/src/servcies/datas.service.ts b/src/servcies/datas.service.ts index 97a81b87..3efb51ae 100644 --- a/src/servcies/datas.service.ts +++ b/src/servcies/datas.service.ts @@ -169,7 +169,10 @@ export const addUTM = async (data: {[kex: string]: string}): Promise<{message: s // Create a reference to the user's points in the Firebase database const utmRef = ref(database, `utm`); // Use push method to add the new task object inside the array - await push(utmRef, data); + await push(utmRef, { + ...data, + createdAt: Date.now() + }); return { message: "UTM added successfully 👍" }; From 6630f50bd4d3c16c73959db2ae5c2116d514f500 Mon Sep 17 00:00:00 2001 From: FazioNico Date: Tue, 9 Apr 2024 16:59:50 +0200 Subject: [PATCH 73/74] feat: add lates articles --- src/servcies/medium.service.ts | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/src/servcies/medium.service.ts b/src/servcies/medium.service.ts index 766748e6..ded85ef7 100644 --- a/src/servcies/medium.service.ts +++ b/src/servcies/medium.service.ts @@ -41,6 +41,13 @@ export const getPublications = async (): Promise<{ imgUrl: 'https://miro.medium.com/v2/resize:fit:350/format:webp/1*hTGoxycGxTQO6Iw94Y4iUw.png', dateTime: Date.parse('03/26/2024'), short: 'We are excited to announce the launch of our new mobile and desktop application interface! Our team has been working tirelessly to create a seamless and intuitive user experience that will make your journey with Hexa Lite even more enjoyable.' + }, + { + url: 'https://medium.com/@hexaonelabs/hexa-lite-tech-roadmap-transforming-dreams-into-reality-90a3d75b13f1', + title: 'Hexa Lite Tech Roadmap: Transforming Dreams into Reality', + imgUrl: 'https://miro.medium.com/v2/resize:fit:350/format:webp/1*hTGoxycGxTQO6Iw94Y4iUw.png', + dateTime: Date.parse('04/09/2024'), + short: 'At Hexa Lite, we blending cutting-edge technology with a passion for progress to create a financial ecosystem that’s as dynamic as it is accessible. One of the pillars of our success? Our commitment to open-source development.' } ]; From 2406a1666d34bb40d6bd3911d4fee77ac9c5a692 Mon Sep 17 00:00:00 2001 From: FazioNico Date: Tue, 9 Apr 2024 17:32:38 +0200 Subject: [PATCH 74/74] ci: add deploy task to push tag event action --- .github/workflows/firebase-hosting-merge.yml | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/.github/workflows/firebase-hosting-merge.yml b/.github/workflows/firebase-hosting-merge.yml index 80b4d699..3383b286 100644 --- a/.github/workflows/firebase-hosting-merge.yml +++ b/.github/workflows/firebase-hosting-merge.yml @@ -1,10 +1,14 @@ # This file was auto-generated by the Firebase CLI # https://github.com/firebase/firebase-tools -name: Deploy to Firebase Hosting on new Release +name: Deploy to Firebase Hosting on new Release & Tags on: release: types: [published] + push: + tags: + - '*' + jobs: build_and_deploy: runs-on: ubuntu-latest