From 59db27e0b96b9d04cfcf408437371bc9c05fa19c Mon Sep 17 00:00:00 2001 From: maxcheremisin Date: Mon, 14 Feb 2022 20:26:08 +0300 Subject: [PATCH 1/5] fix Multiple instances of Three.js --- .eslintrc.js | 2 + .husky/pre-push | 4 ++ config-overrides.js | 14 ++++ package-lock.json | 64 +++++++++++-------- package.json | 7 +- src/components/VFX/components/SceneViewer.tsx | 2 +- src/components/VFX/scenes/QuestionFact.tsx | 15 +++-- src/containers/ConnectProvider.tsx | 16 ++--- 8 files changed, 78 insertions(+), 46 deletions(-) create mode 100755 .husky/pre-push diff --git a/.eslintrc.js b/.eslintrc.js index 4d3d6b4..19fefe7 100644 --- a/.eslintrc.js +++ b/.eslintrc.js @@ -39,8 +39,10 @@ module.exports = { 'no-underscore-dangle': 'off', 'max-classes-per-file': 'off', 'no-use-before-define': 'off', + 'class-methods-use-this': 'off', 'import/extensions': 'off', + 'import/no-default-export': 'error', 'import/prefer-default-export': 'off', 'import/no-extraneous-dependencies': ['error', { optionalDependencies: true }], diff --git a/.husky/pre-push b/.husky/pre-push new file mode 100755 index 0000000..e437ba2 --- /dev/null +++ b/.husky/pre-push @@ -0,0 +1,4 @@ +#!/bin/sh +. "$(dirname "$0")/_/husky.sh" + +npm run build:landing diff --git a/config-overrides.js b/config-overrides.js index 214f745..fe85b82 100644 --- a/config-overrides.js +++ b/config-overrides.js @@ -5,5 +5,19 @@ module.exports = function override(webpackConfig) { type: 'javascript/auto', }) + webpackConfig.externals = [ + (context, request, callback) => { + if (request === 'three' && context.includes('framer-motion-3d')) { + return callback(null, { + commonjs: 'three', + commonjs2: 'three', + amd: 'three', + root: 'THREE', + }) + } + callback() + }, + ] + return webpackConfig } diff --git a/package-lock.json b/package-lock.json index 6d86f37..33029c3 100644 --- a/package-lock.json +++ b/package-lock.json @@ -45,6 +45,8 @@ "eslint-plugin-prettier": "^4.0.0", "eslint-plugin-react": "^7.27.1", "eslint-plugin-react-hooks": "^4.3.0", + "framer-motion": "^6.2.6", + "framer-motion-3d": "^6.2.6", "joi": "^17.5.0", "js-sha256": "^0.9.0", "react": "^17.0.2", @@ -56,7 +58,7 @@ "react-scripts": "4.0.3", "react-textarea-autosize": "8.3.3", "redaxios": "^0.4.1", - "three": "^0.137.4", + "three": "0.137.4", "typescript": "^4.5.2" }, "devDependencies": { @@ -67,8 +69,7 @@ "@storybook/preset-create-react-app": "^3.1.7", "@storybook/react": "^6.2.9", "eslint-plugin-storybook": "^0.5.6", - "framer-motion": "^6.2.6", - "framer-motion-3d": "^6.2.6", + "husky": "^7.0.4", "import-sort-style-module": "6.0.0", "prettier": "^2.5.0", "prettier-plugin-import-sort": "0.0.7", @@ -2000,7 +2001,7 @@ "version": "0.8.8", "resolved": "https://registry.npmjs.org/@emotion/is-prop-valid/-/is-prop-valid-0.8.8.tgz", "integrity": "sha512-u5WtneEAr5IDG2Wv65yhunPSMLIpuKsbuOktRojfrEiEvRyC85LgPMZI63cr7NUqT8ZIGdSVg8ZKGxIug4lXcA==", - "dev": true, + "devOptional": true, "dependencies": { "@emotion/memoize": "0.7.4" } @@ -2009,7 +2010,7 @@ "version": "0.7.4", "resolved": "https://registry.npmjs.org/@emotion/memoize/-/memoize-0.7.4.tgz", "integrity": "sha512-Ja/Vfqe3HpuzRsG1oBtWTHk2PGZ7GR+2Vz5iYGelAw8dx32K0y7PjVuxK6z1nMpZOqAFsRUPCkK1YjJ56qJlgw==", - "dev": true + "devOptional": true }, "node_modules/@emotion/serialize": { "version": "0.11.16", @@ -14601,7 +14602,6 @@ "version": "6.2.6", "resolved": "https://registry.npmjs.org/framer-motion/-/framer-motion-6.2.6.tgz", "integrity": "sha512-7eGav5MxEEzDHozQTDY6+psTIOw2i2kM1QVoJOC3bCp9VOKoo+mKR5n7aT5JPh7ksEKFYJYz0GJDils/9S+oLA==", - "dev": true, "dependencies": { "framesync": "6.0.1", "hey-listen": "^1.0.8", @@ -14621,7 +14621,6 @@ "version": "6.2.6", "resolved": "https://registry.npmjs.org/framer-motion-3d/-/framer-motion-3d-6.2.6.tgz", "integrity": "sha512-55aEfek1N3UwXSjweK+XuAXmaPT1Gvn8Yi20QKPbhDggNqv25ptlNslCneMqK/anXm4wvbAFNLSEiKP+zHJdbA==", - "dev": true, "dependencies": { "framer-motion": "^6.2.6", "react-merge-refs": "^1.1.0" @@ -14637,7 +14636,6 @@ "version": "6.0.1", "resolved": "https://registry.npmjs.org/framesync/-/framesync-6.0.1.tgz", "integrity": "sha512-fUY88kXvGiIItgNC7wcTOl0SNRCVXMKSWW2Yzfmn7EKNc+MpCzcz9DhdHcdjbrtN3c6R4H5dTY2jiCpPdysEjA==", - "dev": true, "dependencies": { "tslib": "^2.1.0" } @@ -15424,8 +15422,7 @@ "node_modules/hey-listen": { "version": "1.0.8", "resolved": "https://registry.npmjs.org/hey-listen/-/hey-listen-1.0.8.tgz", - "integrity": "sha512-COpmrF2NOg4TBWUJ5UVyaCU2A88wEMkUPK4hNqyCkqHbxT92BbvfjoSozkAIIm6XhicGlJHhFdullInrdhwU8Q==", - "dev": true + "integrity": "sha512-COpmrF2NOg4TBWUJ5UVyaCU2A88wEMkUPK4hNqyCkqHbxT92BbvfjoSozkAIIm6XhicGlJHhFdullInrdhwU8Q==" }, "node_modules/highlight.js": { "version": "10.7.3", @@ -15876,6 +15873,21 @@ "node": ">=8.12.0" } }, + "node_modules/husky": { + "version": "7.0.4", + "resolved": "https://registry.npmjs.org/husky/-/husky-7.0.4.tgz", + "integrity": "sha512-vbaCKN2QLtP/vD4yvs6iz6hBEo6wkSzs8HpRah1Z6aGmF2KW5PdYuAd7uX5a+OyBZHBhd+TFLqgjUgytQr4RvQ==", + "dev": true, + "bin": { + "husky": "lib/bin.js" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/typicode" + } + }, "node_modules/iconv-lite": { "version": "0.4.24", "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz", @@ -21299,7 +21311,6 @@ "version": "11.0.3", "resolved": "https://registry.npmjs.org/popmotion/-/popmotion-11.0.3.tgz", "integrity": "sha512-Y55FLdj3UxkR7Vl3s7Qr4e9m0onSnP8W7d/xQLsoJM40vs6UKHFdygs6SWryasTZYqugMjm3BepCF4CWXDiHgA==", - "dev": true, "dependencies": { "framesync": "6.0.1", "hey-listen": "^1.0.8", @@ -27124,7 +27135,6 @@ "version": "5.0.0", "resolved": "https://registry.npmjs.org/style-value-types/-/style-value-types-5.0.0.tgz", "integrity": "sha512-08yq36Ikn4kx4YU6RD7jWEv27v4V+PUsOGa4n/as8Et3CuODMJQ00ENeAVXAeydX4Z2j1XHZF1K2sX4mGl18fA==", - "dev": true, "dependencies": { "hey-listen": "^1.0.8", "tslib": "^2.1.0" @@ -27727,9 +27737,9 @@ "integrity": "sha1-f17oI66AUgfACvLfSoTsP8+lcLQ=" }, "node_modules/three": { - "version": "0.137.5", - "resolved": "https://registry.npmjs.org/three/-/three-0.137.5.tgz", - "integrity": "sha512-rTyr+HDFxjnN8+N/guZjDgfVxgHptZQpf6xfL/Mo7a5JYIFwK6tAq3bzxYYB4Ae0RosDZlDuP+X5aXDXz+XnHQ==" + "version": "0.137.4", + "resolved": "https://registry.npmjs.org/three/-/three-0.137.4.tgz", + "integrity": "sha512-kUyOZNX+dMbvaS0mGYM1BaXHkHVNQdpryWH8dBg3mn725dJcTo9/5rjyH+OJ8V0r+XbZPz7sncV+c3Gjpc9UBA==" }, "node_modules/three-mesh-bvh": { "version": "0.5.5", @@ -31883,7 +31893,7 @@ "version": "0.8.8", "resolved": "https://registry.npmjs.org/@emotion/is-prop-valid/-/is-prop-valid-0.8.8.tgz", "integrity": "sha512-u5WtneEAr5IDG2Wv65yhunPSMLIpuKsbuOktRojfrEiEvRyC85LgPMZI63cr7NUqT8ZIGdSVg8ZKGxIug4lXcA==", - "dev": true, + "devOptional": true, "requires": { "@emotion/memoize": "0.7.4" } @@ -31892,7 +31902,7 @@ "version": "0.7.4", "resolved": "https://registry.npmjs.org/@emotion/memoize/-/memoize-0.7.4.tgz", "integrity": "sha512-Ja/Vfqe3HpuzRsG1oBtWTHk2PGZ7GR+2Vz5iYGelAw8dx32K0y7PjVuxK6z1nMpZOqAFsRUPCkK1YjJ56qJlgw==", - "dev": true + "devOptional": true }, "@emotion/serialize": { "version": "0.11.16", @@ -41546,7 +41556,6 @@ "version": "6.2.6", "resolved": "https://registry.npmjs.org/framer-motion/-/framer-motion-6.2.6.tgz", "integrity": "sha512-7eGav5MxEEzDHozQTDY6+psTIOw2i2kM1QVoJOC3bCp9VOKoo+mKR5n7aT5JPh7ksEKFYJYz0GJDils/9S+oLA==", - "dev": true, "requires": { "@emotion/is-prop-valid": "^0.8.2", "framesync": "6.0.1", @@ -41560,7 +41569,6 @@ "version": "6.2.6", "resolved": "https://registry.npmjs.org/framer-motion-3d/-/framer-motion-3d-6.2.6.tgz", "integrity": "sha512-55aEfek1N3UwXSjweK+XuAXmaPT1Gvn8Yi20QKPbhDggNqv25ptlNslCneMqK/anXm4wvbAFNLSEiKP+zHJdbA==", - "dev": true, "requires": { "framer-motion": "^6.2.6", "react-merge-refs": "^1.1.0" @@ -41570,7 +41578,6 @@ "version": "6.0.1", "resolved": "https://registry.npmjs.org/framesync/-/framesync-6.0.1.tgz", "integrity": "sha512-fUY88kXvGiIItgNC7wcTOl0SNRCVXMKSWW2Yzfmn7EKNc+MpCzcz9DhdHcdjbrtN3c6R4H5dTY2jiCpPdysEjA==", - "dev": true, "requires": { "tslib": "^2.1.0" } @@ -42185,8 +42192,7 @@ "hey-listen": { "version": "1.0.8", "resolved": "https://registry.npmjs.org/hey-listen/-/hey-listen-1.0.8.tgz", - "integrity": "sha512-COpmrF2NOg4TBWUJ5UVyaCU2A88wEMkUPK4hNqyCkqHbxT92BbvfjoSozkAIIm6XhicGlJHhFdullInrdhwU8Q==", - "dev": true + "integrity": "sha512-COpmrF2NOg4TBWUJ5UVyaCU2A88wEMkUPK4hNqyCkqHbxT92BbvfjoSozkAIIm6XhicGlJHhFdullInrdhwU8Q==" }, "highlight.js": { "version": "10.7.3", @@ -42564,6 +42570,12 @@ "resolved": "https://registry.npmjs.org/human-signals/-/human-signals-1.1.1.tgz", "integrity": "sha512-SEQu7vl8KjNL2eoGBLF3+wAjpsNfA9XMlXAYj/3EdaNfAlxKthD1xjEQfGOUhllCGGJVNY34bRr6lPINhNjyZw==" }, + "husky": { + "version": "7.0.4", + "resolved": "https://registry.npmjs.org/husky/-/husky-7.0.4.tgz", + "integrity": "sha512-vbaCKN2QLtP/vD4yvs6iz6hBEo6wkSzs8HpRah1Z6aGmF2KW5PdYuAd7uX5a+OyBZHBhd+TFLqgjUgytQr4RvQ==", + "dev": true + }, "iconv-lite": { "version": "0.4.24", "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz", @@ -46642,7 +46654,6 @@ "version": "11.0.3", "resolved": "https://registry.npmjs.org/popmotion/-/popmotion-11.0.3.tgz", "integrity": "sha512-Y55FLdj3UxkR7Vl3s7Qr4e9m0onSnP8W7d/xQLsoJM40vs6UKHFdygs6SWryasTZYqugMjm3BepCF4CWXDiHgA==", - "dev": true, "requires": { "framesync": "6.0.1", "hey-listen": "^1.0.8", @@ -51175,7 +51186,6 @@ "version": "5.0.0", "resolved": "https://registry.npmjs.org/style-value-types/-/style-value-types-5.0.0.tgz", "integrity": "sha512-08yq36Ikn4kx4YU6RD7jWEv27v4V+PUsOGa4n/as8Et3CuODMJQ00ENeAVXAeydX4Z2j1XHZF1K2sX4mGl18fA==", - "dev": true, "requires": { "hey-listen": "^1.0.8", "tslib": "^2.1.0" @@ -51645,9 +51655,9 @@ "integrity": "sha1-f17oI66AUgfACvLfSoTsP8+lcLQ=" }, "three": { - "version": "0.137.5", - "resolved": "https://registry.npmjs.org/three/-/three-0.137.5.tgz", - "integrity": "sha512-rTyr+HDFxjnN8+N/guZjDgfVxgHptZQpf6xfL/Mo7a5JYIFwK6tAq3bzxYYB4Ae0RosDZlDuP+X5aXDXz+XnHQ==" + "version": "0.137.4", + "resolved": "https://registry.npmjs.org/three/-/three-0.137.4.tgz", + "integrity": "sha512-kUyOZNX+dMbvaS0mGYM1BaXHkHVNQdpryWH8dBg3mn725dJcTo9/5rjyH+OJ8V0r+XbZPz7sncV+c3Gjpc9UBA==" }, "three-mesh-bvh": { "version": "0.5.5", diff --git a/package.json b/package.json index 83ad525..a89f9fc 100644 --- a/package.json +++ b/package.json @@ -52,6 +52,8 @@ "eslint-plugin-prettier": "^4.0.0", "eslint-plugin-react": "^7.27.1", "eslint-plugin-react-hooks": "^4.3.0", + "framer-motion": "^6.2.6", + "framer-motion-3d": "^6.2.6", "joi": "^17.5.0", "js-sha256": "^0.9.0", "react": "^17.0.2", @@ -63,7 +65,7 @@ "react-scripts": "4.0.3", "react-textarea-autosize": "8.3.3", "redaxios": "^0.4.1", - "three": "^0.137.4", + "three": "0.137.4", "typescript": "^4.5.2" }, "devDependencies": { @@ -74,8 +76,7 @@ "@storybook/preset-create-react-app": "^3.1.7", "@storybook/react": "^6.2.9", "eslint-plugin-storybook": "^0.5.6", - "framer-motion": "^6.2.6", - "framer-motion-3d": "^6.2.6", + "husky": "^7.0.4", "import-sort-style-module": "6.0.0", "prettier": "^2.5.0", "prettier-plugin-import-sort": "0.0.7", diff --git a/src/components/VFX/components/SceneViewer.tsx b/src/components/VFX/components/SceneViewer.tsx index 3a5613f..f4a5408 100644 --- a/src/components/VFX/components/SceneViewer.tsx +++ b/src/components/VFX/components/SceneViewer.tsx @@ -1,7 +1,7 @@ import { Suspense, useState } from 'react' import { GameEvent } from '../../../types' -import QuestionFact from '../scenes/QuestionFact' +import { QuestionFact } from '../scenes/QuestionFact' import { Splash } from '../scenes/Splash' import { AnimatePresence } from './AnimatePresence' diff --git a/src/components/VFX/scenes/QuestionFact.tsx b/src/components/VFX/scenes/QuestionFact.tsx index c7f1deb..eb7b8ba 100644 --- a/src/components/VFX/scenes/QuestionFact.tsx +++ b/src/components/VFX/scenes/QuestionFact.tsx @@ -2,14 +2,17 @@ import { Text, useTexture } from '@react-three/drei' import { useThree } from '@react-three/fiber' import { useReplay } from '../../../pages/Landing/useReplay' -import { QuestionFactEvent } from '../../../types' import matcap from '../assets/matcap_texture.png' -const QuestionFact = () => { +export const QuestionFact = () => { const { event } = useReplay() const matcapTex = useTexture(matcap) - const { width } = useThree(({ viewport }) => viewport) - console.log(width) + const width = useThree(({ viewport }) => viewport.width) + + if (!event || event.type !== 'question_fact') { + return null + } + return ( { fontSize={width / 35} maxWidth={width * 0.5} > - {(event as QuestionFactEvent).text} + {event.text} ) } - -export default QuestionFact diff --git a/src/containers/ConnectProvider.tsx b/src/containers/ConnectProvider.tsx index 589154c..9fac3f6 100644 --- a/src/containers/ConnectProvider.tsx +++ b/src/containers/ConnectProvider.tsx @@ -66,16 +66,16 @@ export function ConnectProvider({ children }: { children: ReactNode }) { publicKey: null, }) - const { status, publicKey } = connectState + const { status } = connectState const [adapter, setAdapter] = useState | null>(null) const [ready, setReady] = useState(false) - const [_tokenCache, _setTokenCache] = useLocalStorage<{ [pKey in string]?: string }>(`token_cache`, {}) - const getCachedToken = useGetLatest((pKey: typeof publicKey) => _tokenCache?.[String(pKey)] || null) - const setTokenCache = useGetLatest((key: typeof publicKey, newToken?: string) => { - if (!key) _setTokenCache({}) - else _setTokenCache({ [String(key)]: newToken }) + const [_tokenCache, _setTokenCache] = useLocalStorage<{ [pKey in string]?: Token }>(`token_cache`, {}) + const getCachedToken = useGetLatest((pKey: WalletContextState['publicKey']) => _tokenCache?.[String(pKey)] || null) + const setTokenCache = useGetLatest((pKey: WalletContextState['publicKey'], newToken?: Token) => { + if (!pKey) _setTokenCache({}) + else _setTokenCache({ [String(pKey)]: newToken }) }) const [cluster, setCluster] = useState('devnet') @@ -99,7 +99,7 @@ export function ConnectProvider({ children }: { children: ReactNode }) { }, []) const onConnected = useCallback( - (token: string) => { + (token: Token) => { if (!adapter) return setReady(adapter.ready) @@ -166,7 +166,7 @@ export function ConnectProvider({ children }: { children: ReactNode }) { } }, [adapter, getCachedToken, onConnectFailed, onConnected, setAutoConnect, setTokenCache, status]) - const signup = useGetLatest(async (pKey: typeof publicKey) => { + const signup = useGetLatest(async (pKey: WalletContextState['publicKey']) => { const _token = getCachedToken(pKey) if (_token) return _token From dfe59e242b011d88bfa757dc67f26d48ea1ef43e Mon Sep 17 00:00:00 2001 From: Vlad Date: Sat, 19 Feb 2022 17:42:36 +0300 Subject: [PATCH 2/5] fix: remove dontAlign prop --- src/components/VFX/components/MultilineText.tsx | 2 +- src/components/VFX/components/Text.tsx | 2 +- src/components/VFX/scenes/GameInfoSplash.tsx | 0 3 files changed, 2 insertions(+), 2 deletions(-) create mode 100644 src/components/VFX/scenes/GameInfoSplash.tsx diff --git a/src/components/VFX/components/MultilineText.tsx b/src/components/VFX/components/MultilineText.tsx index c303b0e..4b51cd5 100644 --- a/src/components/VFX/components/MultilineText.tsx +++ b/src/components/VFX/components/MultilineText.tsx @@ -8,7 +8,7 @@ export const MultilineText = ({ texts = ['Breakroom', 'Show'], size = 1 }) => { {texts.map((el, i) => ( - + {el} diff --git a/src/components/VFX/components/Text.tsx b/src/components/VFX/components/Text.tsx index e1627b3..9a231b4 100644 --- a/src/components/VFX/components/Text.tsx +++ b/src/components/VFX/components/Text.tsx @@ -65,7 +65,7 @@ export const Text = ({ } mesh.current.position.x = xPos - if (!dontAlign) mesh.current.position.y = yPos + mesh.current.position.y = yPos } } }, [children, dontAlign, hAlign, vAlign]) diff --git a/src/components/VFX/scenes/GameInfoSplash.tsx b/src/components/VFX/scenes/GameInfoSplash.tsx new file mode 100644 index 0000000..e69de29 From 123b49147d848c3b0fc95509d1d13d119ea91965 Mon Sep 17 00:00:00 2001 From: Vlad Date: Wed, 23 Feb 2022 22:18:44 +0300 Subject: [PATCH 3/5] fix: stars count & position --- package-lock.json | 96 +++++++++++++++++++++--------------- package.json | 2 +- src/components/VFX/Stars.tsx | 29 +++++------ src/containers/VFX.tsx | 4 +- src/declarations.d.ts | 1 + 5 files changed, 74 insertions(+), 58 deletions(-) diff --git a/package-lock.json b/package-lock.json index 79ad9d8..4609d5c 100644 --- a/package-lock.json +++ b/package-lock.json @@ -13,7 +13,7 @@ "@radix-ui/react-aspect-ratio": "^0.1.3", "@radix-ui/react-dialog": "0.1.5", "@radix-ui/react-scroll-area": "0.1.3", - "@react-three/drei": "^8.7.5", + "@react-three/drei": "^8.10.6", "@react-three/fiber": "^7.0.25", "@react-three/flex": "^0.7.0", "@solana/wallet-adapter-base": "^0.7.0", @@ -3683,9 +3683,9 @@ "integrity": "sha512-GGiIscTM+CEUNV52anj3g5FqAZKL2+eRKtvBOAlC99qGBbvJ3qTLImrUR/I3lXY7PRuLgzI6kh34quA1oUxWYQ==" }, "node_modules/@react-three/drei": { - "version": "8.8.4", - "resolved": "https://registry.npmjs.org/@react-three/drei/-/drei-8.8.4.tgz", - "integrity": "sha512-DvptFTpDODbeRbIA6miMEmIQSv7R+MTPliw92NIU/wwg+IvSNTTZSi8DBYR7qDQosAl73Cdj1E9qDfkv7+p5Gg==", + "version": "8.10.6", + "resolved": "https://registry.npmjs.org/@react-three/drei/-/drei-8.10.6.tgz", + "integrity": "sha512-G4RsL0W0CskcMTMYg8erZ/kJ31nFE/m2SA40SX5Ew33pqDDGMBK+ML0dnKiQMj8uD9bjka7TzmwEuT/n814hlQ==", "dependencies": { "@babel/runtime": "^7.11.2", "@react-spring/three": "^9.3.1", @@ -3697,10 +3697,10 @@ "react-composer": "^5.0.2", "react-merge-refs": "^1.1.0", "stats.js": "^0.17.0", + "suspend-react": "^0.0.8", "three-mesh-bvh": "^0.5.4", - "three-stdlib": "^2.8.6", - "troika-three-text": "^0.44.0", - "use-asset": "^1.0.4", + "three-stdlib": "^2.8.7", + "troika-three-text": "^0.45.0", "utility-types": "^3.10.0", "zustand": "^3.5.13" }, @@ -27243,6 +27243,14 @@ "url": "https://github.com/sponsors/ljharb" } }, + "node_modules/suspend-react": { + "version": "0.0.8", + "resolved": "https://registry.npmjs.org/suspend-react/-/suspend-react-0.0.8.tgz", + "integrity": "sha512-ZC3r8Hu1y0dIThzsGw0RLZplnX9yXwfItcvaIzJc2VQVi8TGyGDlu92syMB5ulybfvGLHAI5Ghzlk23UBPF8xg==", + "peerDependencies": { + "react": ">=17.0" + } + }, "node_modules/svg-arc-to-cubic-bezier": { "version": "3.2.0", "resolved": "https://registry.npmjs.org/svg-arc-to-cubic-bezier/-/svg-arc-to-cubic-bezier-3.2.0.tgz", @@ -27769,9 +27777,9 @@ } }, "node_modules/three-stdlib": { - "version": "2.8.6", - "resolved": "https://registry.npmjs.org/three-stdlib/-/three-stdlib-2.8.6.tgz", - "integrity": "sha512-0emGIVrJG3SGmDyU/mdd4fPOwkXrDCCCwSugHiQBkN5AruAtSTS85Y7zjvexQsQaDYb5RGlJsDefH41nM9uG4Q==", + "version": "2.8.7", + "resolved": "https://registry.npmjs.org/three-stdlib/-/three-stdlib-2.8.7.tgz", + "integrity": "sha512-qHqzk0k2zg4zNogTqNmZqyeYoyj1VbcczfAWEJcw5U3jwWaxeOGEDy3AHcIfwK35i3eQVdSz9DxWbPvMyPMPCA==", "dependencies": { "@babel/runtime": "^7.16.7", "@webgpu/glslang": "^0.0.15", @@ -28003,30 +28011,30 @@ } }, "node_modules/troika-three-text": { - "version": "0.44.0", - "resolved": "https://registry.npmjs.org/troika-three-text/-/troika-three-text-0.44.0.tgz", - "integrity": "sha512-YwqXczjXQ4yq2a2ufO9icOIjeJutE/ODS8PHmmt/WAzVFqoiqeemclp/Ewiqm0+sdI1KnWRm6lj8df/zmhU3Og==", + "version": "0.45.0", + "resolved": "https://registry.npmjs.org/troika-three-text/-/troika-three-text-0.45.0.tgz", + "integrity": "sha512-s/MhDYJm0+aiQU8fjO1TXl1UZESY52GMJgzyMB0HHnh2iADy+WY00oVgNsW6lU7XmC2g8MU81nV5egCDAS4/Pg==", "dependencies": { "bidi-js": "^1.0.2", - "troika-three-utils": "^0.44.0", - "troika-worker-utils": "^0.44.0" + "troika-three-utils": "^0.45.0", + "troika-worker-utils": "^0.45.0" }, "peerDependencies": { "three": ">=0.103.0" } }, "node_modules/troika-three-utils": { - "version": "0.44.0", - "resolved": "https://registry.npmjs.org/troika-three-utils/-/troika-three-utils-0.44.0.tgz", - "integrity": "sha512-gaEpqrlWnkrVU5UgUx+YZTC8NrhsA2Tt6zEIbn3WNuom7pLtrgjuHpAM72gif7DoYdOWEyFco3Zb6rpJh9Fodg==", + "version": "0.45.0", + "resolved": "https://registry.npmjs.org/troika-three-utils/-/troika-three-utils-0.45.0.tgz", + "integrity": "sha512-VJqEx8aww2El/zSbbnmjdhaAOQ4LM0CVJmKh385Vi/CzruhMmWEaunMRI/J1vh4MbbGo+dREu73FkMkr/PXypA==", "peerDependencies": { "three": ">=0.103.0" } }, "node_modules/troika-worker-utils": { - "version": "0.44.0", - "resolved": "https://registry.npmjs.org/troika-worker-utils/-/troika-worker-utils-0.44.0.tgz", - "integrity": "sha512-/ETcH1rUoO9hVBL6Ifea2WOoGPw90ncrk8b8SJKTLtzcQvEWRIZ4eUxlVCtU93fLechCV+DWPs1y8+Bjh1WaJg==" + "version": "0.45.0", + "resolved": "https://registry.npmjs.org/troika-worker-utils/-/troika-worker-utils-0.45.0.tgz", + "integrity": "sha512-pEO8u7+29dG5SbmGUg0wqXPEe+r+Hd0ibKf75tjH2aoR7ZPlRwUzRTvPURDlDNFF4KysDLvMCdHnyslG9IG5Hw==" }, "node_modules/trough": { "version": "1.0.5", @@ -33197,9 +33205,9 @@ "integrity": "sha512-GGiIscTM+CEUNV52anj3g5FqAZKL2+eRKtvBOAlC99qGBbvJ3qTLImrUR/I3lXY7PRuLgzI6kh34quA1oUxWYQ==" }, "@react-three/drei": { - "version": "8.8.4", - "resolved": "https://registry.npmjs.org/@react-three/drei/-/drei-8.8.4.tgz", - "integrity": "sha512-DvptFTpDODbeRbIA6miMEmIQSv7R+MTPliw92NIU/wwg+IvSNTTZSi8DBYR7qDQosAl73Cdj1E9qDfkv7+p5Gg==", + "version": "8.10.6", + "resolved": "https://registry.npmjs.org/@react-three/drei/-/drei-8.10.6.tgz", + "integrity": "sha512-G4RsL0W0CskcMTMYg8erZ/kJ31nFE/m2SA40SX5Ew33pqDDGMBK+ML0dnKiQMj8uD9bjka7TzmwEuT/n814hlQ==", "requires": { "@babel/runtime": "^7.11.2", "@react-spring/three": "^9.3.1", @@ -33211,10 +33219,10 @@ "react-composer": "^5.0.2", "react-merge-refs": "^1.1.0", "stats.js": "^0.17.0", + "suspend-react": "^0.0.8", "three-mesh-bvh": "^0.5.4", - "three-stdlib": "^2.8.6", - "troika-three-text": "^0.44.0", - "use-asset": "^1.0.4", + "three-stdlib": "^2.8.7", + "troika-three-text": "^0.45.0", "utility-types": "^3.10.0", "zustand": "^3.5.13" }, @@ -51298,6 +51306,12 @@ "resolved": "https://registry.npmjs.org/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz", "integrity": "sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==" }, + "suspend-react": { + "version": "0.0.8", + "resolved": "https://registry.npmjs.org/suspend-react/-/suspend-react-0.0.8.tgz", + "integrity": "sha512-ZC3r8Hu1y0dIThzsGw0RLZplnX9yXwfItcvaIzJc2VQVi8TGyGDlu92syMB5ulybfvGLHAI5Ghzlk23UBPF8xg==", + "requires": {} + }, "svg-arc-to-cubic-bezier": { "version": "3.2.0", "resolved": "https://registry.npmjs.org/svg-arc-to-cubic-bezier/-/svg-arc-to-cubic-bezier-3.2.0.tgz", @@ -51709,9 +51723,9 @@ "requires": {} }, "three-stdlib": { - "version": "2.8.6", - "resolved": "https://registry.npmjs.org/three-stdlib/-/three-stdlib-2.8.6.tgz", - "integrity": "sha512-0emGIVrJG3SGmDyU/mdd4fPOwkXrDCCCwSugHiQBkN5AruAtSTS85Y7zjvexQsQaDYb5RGlJsDefH41nM9uG4Q==", + "version": "2.8.7", + "resolved": "https://registry.npmjs.org/three-stdlib/-/three-stdlib-2.8.7.tgz", + "integrity": "sha512-qHqzk0k2zg4zNogTqNmZqyeYoyj1VbcczfAWEJcw5U3jwWaxeOGEDy3AHcIfwK35i3eQVdSz9DxWbPvMyPMPCA==", "requires": { "@babel/runtime": "^7.16.7", "@webgpu/glslang": "^0.0.15", @@ -51912,25 +51926,25 @@ "dev": true }, "troika-three-text": { - "version": "0.44.0", - "resolved": "https://registry.npmjs.org/troika-three-text/-/troika-three-text-0.44.0.tgz", - "integrity": "sha512-YwqXczjXQ4yq2a2ufO9icOIjeJutE/ODS8PHmmt/WAzVFqoiqeemclp/Ewiqm0+sdI1KnWRm6lj8df/zmhU3Og==", + "version": "0.45.0", + "resolved": "https://registry.npmjs.org/troika-three-text/-/troika-three-text-0.45.0.tgz", + "integrity": "sha512-s/MhDYJm0+aiQU8fjO1TXl1UZESY52GMJgzyMB0HHnh2iADy+WY00oVgNsW6lU7XmC2g8MU81nV5egCDAS4/Pg==", "requires": { "bidi-js": "^1.0.2", - "troika-three-utils": "^0.44.0", - "troika-worker-utils": "^0.44.0" + "troika-three-utils": "^0.45.0", + "troika-worker-utils": "^0.45.0" } }, "troika-three-utils": { - "version": "0.44.0", - "resolved": "https://registry.npmjs.org/troika-three-utils/-/troika-three-utils-0.44.0.tgz", - "integrity": "sha512-gaEpqrlWnkrVU5UgUx+YZTC8NrhsA2Tt6zEIbn3WNuom7pLtrgjuHpAM72gif7DoYdOWEyFco3Zb6rpJh9Fodg==", + "version": "0.45.0", + "resolved": "https://registry.npmjs.org/troika-three-utils/-/troika-three-utils-0.45.0.tgz", + "integrity": "sha512-VJqEx8aww2El/zSbbnmjdhaAOQ4LM0CVJmKh385Vi/CzruhMmWEaunMRI/J1vh4MbbGo+dREu73FkMkr/PXypA==", "requires": {} }, "troika-worker-utils": { - "version": "0.44.0", - "resolved": "https://registry.npmjs.org/troika-worker-utils/-/troika-worker-utils-0.44.0.tgz", - "integrity": "sha512-/ETcH1rUoO9hVBL6Ifea2WOoGPw90ncrk8b8SJKTLtzcQvEWRIZ4eUxlVCtU93fLechCV+DWPs1y8+Bjh1WaJg==" + "version": "0.45.0", + "resolved": "https://registry.npmjs.org/troika-worker-utils/-/troika-worker-utils-0.45.0.tgz", + "integrity": "sha512-pEO8u7+29dG5SbmGUg0wqXPEe+r+Hd0ibKf75tjH2aoR7ZPlRwUzRTvPURDlDNFF4KysDLvMCdHnyslG9IG5Hw==" }, "trough": { "version": "1.0.5", diff --git a/package.json b/package.json index 29a9e8f..4c27d67 100644 --- a/package.json +++ b/package.json @@ -21,7 +21,7 @@ "@radix-ui/react-aspect-ratio": "^0.1.3", "@radix-ui/react-dialog": "0.1.5", "@radix-ui/react-scroll-area": "0.1.3", - "@react-three/drei": "^8.7.5", + "@react-three/drei": "^8.10.6", "@react-three/fiber": "^7.0.25", "@react-three/flex": "^0.7.0", "@solana/wallet-adapter-base": "^0.7.0", diff --git a/src/components/VFX/Stars.tsx b/src/components/VFX/Stars.tsx index f3be10a..9560663 100644 --- a/src/components/VFX/Stars.tsx +++ b/src/components/VFX/Stars.tsx @@ -1,5 +1,6 @@ -import { Point, Points } from '@react-three/drei' +import { Box, Point, Points } from '@react-three/drei' import { useFrame, useThree } from '@react-three/fiber' +import Random from 'canvas-sketch-util/random' import { ComponentRef, Suspense, useMemo, useRef } from 'react' import { AdditiveBlending, Color, Vector3 } from 'three' @@ -21,20 +22,21 @@ export function Stars({ count = 40, depth = 10, size = 800, color }: StarsProps) const shaderRef = useRef(null) const particlesRef = useRef>(null) - const { dpr, width, height } = useThree(({ viewport }) => viewport) + const { dpr } = useThree(({ viewport }) => viewport) const pointsArray = useMemo( () => - Array.from({ length: count }, () => ({ - position: new Vector3( - (Math.random() - 0.5) * depth, - (Math.random() - 0.5) * height * 2, - (Math.random() - 0.5) * width * 2, - ), - scale: Math.random(), - color: color ?? new Color(selectRandom(colors.trivia)), - })), - [color, count, depth, height, width], + Array.from({ length: count }, () => { + const radius = (Math.random() - 0.5) * depth + const [x, z] = Random.onCircle(radius) + const y = Math.abs(radius) * Math.tan((37.5 * Math.PI) / 180) + return { + position: new Vector3(x, y * (Math.random() - 0.5) * 2, z), + scale: Math.random(), + color: color ?? new Color(selectRandom(colors.trivia)), + } + }), + [color, count, depth], ) useFrame((state, delta) => { @@ -43,14 +45,13 @@ export function Stars({ count = 40, depth = 10, size = 800, color }: StarsProps) const coef = 0.01 * speed - particlesRef.current.rotation.x = state.clock.getElapsedTime() * coef particlesRef.current.rotation.y = state.clock.getElapsedTime() * -coef shaderRef.current.uTime += delta * coef }) return ( - + { {children} - + ) diff --git a/src/declarations.d.ts b/src/declarations.d.ts index ef61722..968a8f3 100644 --- a/src/declarations.d.ts +++ b/src/declarations.d.ts @@ -1,4 +1,5 @@ declare module 'canvas-sketch-util/random' { export function onSphere(radius = 1): [number, number, number] export function insideSphere(radius = 1): [number, number, number] + export function onCircle(radius = 1): [number, number] } From 1e6df4b65954f12c8a90efb0ac891afe1014b31c Mon Sep 17 00:00:00 2001 From: Vlad Date: Wed, 23 Feb 2022 22:43:14 +0300 Subject: [PATCH 4/5] add game_info_splash screen --- src/components/VFX/Stars.tsx | 1 + .../VFX/assets/matcap_texture_white.png | Bin 0 -> 77107 bytes .../VFX/components/MultilineText.tsx | 26 ++++++++++++++++++ src/components/VFX/components/SceneViewer.tsx | 4 ++- src/components/VFX/components/Text.tsx | 3 +- src/components/VFX/scenes/GameInfoSplash.tsx | 17 ++++++++++++ 6 files changed, 49 insertions(+), 2 deletions(-) create mode 100644 src/components/VFX/assets/matcap_texture_white.png diff --git a/src/components/VFX/Stars.tsx b/src/components/VFX/Stars.tsx index 9560663..5c8999e 100644 --- a/src/components/VFX/Stars.tsx +++ b/src/components/VFX/Stars.tsx @@ -51,6 +51,7 @@ export function Stars({ count = 40, depth = 10, size = 800, color }: StarsProps) return ( + {/* @ts-ignore */} 7=Y=li_B-+TPt_x=C>9Y;q)*K%Ix@;N`}d0q2Y&_v%p0wVzc z^cg>HOfUe2KT^Oa@joq+%TMq>s>$P~rUIzxDE|_$W0xTw@hdSjJS{xH-!&#_o=tRY z(#$xUjCsj;G=Q6DMsjq_oVYa6%((c(`R-=lFIAX{5@X%X!iERf1tfdNB_xhpk`foP zWMXK{k~uLhv1XngBDV}zyuiG;v}jSryt(sJT{GOxde?QupOwG1H52s?Nt@$t=B3wzlc%={D((Hc2V*w)QSAF1B_Kwhj)~c!YK8 z;`wRO8P@Yt&HuB)n7GuKl*Ht;#H9Hm<%-cWlNP4An_*f19AaMbzst@~{YOz)Wwsg7 z$+q@3cFIHb4vdZYcUEkG21IY;ro($&$)%FfZ%&hF39fTY;OS&RRtp^i?j_RjxpD0Z9J=(Onn-@&mluCtO-=0)Qp zC(etGkF!mlA8#i5SCOvXNpq7@@Wxm=$6hG{0$j(>Pfd%S9}_ozjJp{=wM}ATtgEw2 zto?`)BV(-XXU>eVc5;~+Ywhe1J=_|*yhwbN`RmQO2CoDO|@Trebp~{wF3v;uie#X>OvZ*AHByW0d~wZWg07Y+S6_Kfg}= zKi0sXWz!Sl@S^`8=KeD*HEC8_dUQ&hS3K6%|AIr=V)1R2vH0gCw*SvV_Ws|0iQE4S z$6%oR_%9COAO1zMxcL~qQZP;hZ`)A<#E_5U$9RQiylRs3LUxTmQ?6On&Qk1}k;|4o zyZ>$7<(0-0$(6qP`S~riONpP_-)o$fe>-FvGI{&dslVT7_3fA1cK_ix#y=|T+3xL< zUCTVi>o6WXYMOOU`92Df{tNEbp%Ul6U24(j}{?^sN=&j%U`+=sH)@x_Hj# z*i`!?@7J$7u;JOJ9iDy)aZLUDS3S|e$5IUz76+er`RdiQJx8WAu#vmpM(r6tv~$H5 zcKeh1sacUbN6jeooKZOHW%#%+A;CMdaC05*`HbI4c)c(POT`ZS@FB( z{qB3V{p-AR1*?LmN_OpO+8<=0>vvAuV`8!5{l}`6pLOQfPCwxwf8N|+`?|8Qbn7vH zHZk=`#O;2$VYBP^O&p;==j(l9*-kpZLx7ai2!mtYcex+V8SG8S}oyW_c{gsoI$vHNrqUy5n@|#-7?ur|5~-6*c=v8WU13SH&W$L)Q#W({($Oj>-Z&j}OrvGNygfni*jQHl^Y+4$ z3b)-)uKv6~HDCz);P!zj@e`kY@|bsD@-m|5Vo66W-mO zY>dgxd-@+|Uqy9asF*ULv+(@m*`N10n23KI<-~fD&d$(nPVa$GW7+Ix>wsq4fH14h zLgNz;2QO(^oLc|2?Q#3=hNz`~^_yEiM7V17-nmD$iRFNo4V^giu=b5p%N6ZcN*t@B zr^}fja>e=?(s;uJDqN$^f`P}=cg&q@Shq6!f zCq6FpAV2V#@4o2C4oTsYhc6}Htd}`Q>^?!QUbNLdcHQW`BEXC3jlrgw-}54Bl)0kh zRaZ($hcOcb9n0x^{fSv`pAnBd$tMEl>8t4(?1H#MJB<96oouNx5UlDoz-F^|?D^7X zbWd32O~QXUZS}@WblMjk(h&YI$8+{9Ep;5ZV8$<<)s-PbzNXft%Q*iLKjp}tw>A4u zMDbKxPf1=+V+*I?eVM~`ay#BqVCs1SCA&<$K;tOW`I^uQy z(c9Yd57=K~^8t$4SpimRydWJ)kYH5i1z${!DO4pQ?t4%4tq)L35z;AbaIRI zZ+G&=deUGqRdix~-IksoigzClufGsg(D$DydhsUTclDn?WiQ*U_&8Nh2M+tft!Qu~ zb<>b8!T+s={NUN)+Z$gM^bZ``8D(Mc@h5Qe zl2+YPPF?8>llLD7MTXW83V$9lAHa%N^6 zt%DUJBd7p8a9?uXD0SLW4+gy6e{IE233{^p=C!H}brbM5BtW7Ty*gbO{+OIn#I z{%+;9y+4uCp1mZK3UUxcMuN@km?cfgi;tf1;)mV(2d!SFu+Q?|q%1(Qa=rBWaEiIv zE&QPKSyF#X=`oGs5uLLdu7CYdy)QhTbPDRE2iOZ)rDcC3ba`%iC6deI4 zXJ&Q-o4LD3l{aBi{I;AQw)7uJ^Sdjr*l=Dl*}?N6$;jaTbtpfa-FM3JpYEitF3ih= z%>B%OgXp9)^Rqi_{E5Kz{cQqf=34x5&PS>2x6h9ra@(Iz(N#K0>(m;j;={hk;Txxq z1vhN~Oy-3zW-mtctBLWos=?sjF>>IanSZZu8}Vt`bPee&L%QA^<_X8m)h(+f+>E)K z0*N>`vOs_;&1o#U7dFPykJB4&wLH>S?Eb44zC&f!Y@XgXwsXO#or+Eq`jZ{)RKsX_ zkQNsNO$FquDZ9v{1}LoJ>+jkgDhFFbnR5jWUqTubIogZh>2=u4%@#}~6P8kUOt=ph z!tQQ5#*cWa#vD8N*S1QXEd#RiDnr(&{E2zJF_jgn?fqPsJei3|D#|bQ#c^x52=T{e zr*nO?PYIYq-hw+z41)XwMH73aeY@?!;wDX>KS5DHrLg&swIoSHnrKKn@DJ2$q3?FZ z-?F5S`conkj>SfD$z&_2)HBW4jxl%ZV97U|_jRRzFs?JHlkF<|{WW9Ak>#zLynGim zVbee+a}Q@_sixD86|mA$I+sYupo(1SlJm1}{ScvE{cJv56v&mA23A#9oKJIQ(gnPh z6r*7meZglFIP-&IbzjKM!t3qPb011{56gYg{VZwfkLlcJ7u4>!ayMInL5cgXwy)1f#e;Q!@~U^%(R~uKVbu8H zeEOV*)SQ1H+33YQlj_l`ro=-^?B~oqkZF)VUSKg9w$@%5_oc~8{3XrQYQ-NDnHja5 zIM7p7Ra0(cyaWXoye^s7A{xCC+HMFBH}=4@VMIf1=ShyE0iQVsxu>b0RXkXU5DvmlA5Y;@Y1XeGg_0b&`Y@ z#TwHg!lD9BQ>P|*vz0GoE$kK%7Y?G?TxrDJsJ$E2T;DJiPbc-d&^^EI(2EM+QHLgb z@YXCeDp;n?v<`;mNp>}p#M^vf?IiI9UEwAuz}TaT<_Ho#H?QKjVNg$M`#2<-hTiO5 zG^i3$Q4{Wcn-Tg! zL*%BOuT8CeuZ2F_72h>SZ!C)MdqIPxXcSRAk+`sqa9W6N{`hpa?nmrGmG?yNDTms2 zg%w>FW(kLw0~Geiaj(tMYmaK5Rr{F@Ji<7H?wbdre(BWOE?;$8 z{agWrT6NmC>knSmd_v|(_Uh{Iz3hyJ)0gha`{*6#$h1T&eUY?O09R}o2P5zFS&H7xiYp&g3Ck{=Rw5S?7ztrf8y^w)GSj@*-%i6 z*@Dw;ch0mw&LGg2r~i87napd^r(UJ2lRm%rXp*dHlGx`G+UHMP$Ri^4Q0M9T1J4eR zt(ZSE{tx=i^pVWs6+MLq8ZB?15=|@U0xCI^vZ%L6MwX(y7+4iTe|i40Rh-8cK7Cb>(M30-3;ExQdy6m~(| z@0Ej{{jp%MM+PVDCtU)bj zvvL$AH$TDBhQ&OKDyQO8lVnFBd_8H-9k`pkXTlLhs?2s!Y4OWYmz9Egm3$F8FyfH! zf{}j?cWpX*$frw}>CvD)gvVpe^IObOWdNFKDb=g+y&8TBFLS`0dtVsm1iu!*!YGyJ=ao7Z_S={03~e8*4Kf(_UPi0 zO;5x>*|$3jo!#Fs@%p{d`R23ayZSrL2WlF!RP+3wzNqTpVydNpJgNnizDS*TvAwW( z0--vLV_juPug8U!c*G-gx_-r~_QSr@I$C-+JhPi3T1(TB z_XCamHokB*=SDjp>E`=4jrb%Vq)5N0eEbyl4n?lq_5fVVOshH~Vl zhT9Byca~CXZW9TIvae@QYZ7%k{Ndx@DX(!la4FmTxJ3{DXfn0K%aOcLRYCGSv zho_&IpA=@+8zZ)7bY?A8EnJ~Y0+Y|blCM{kaC!VeeBCDlq1l|a;}N4@aaY>I!sl@7 zObC6F3_8)gz0}z_M_I1Lt?eGUS2D6s&}Z{9Md=V=DY_ab zEx!#jCgc(P2ZZJbJ+wVcewS@Yi2KqMb+{vQ46a#=!W})gl(CaecNyLaPwtyTq^4!^jDVZYgZ|(EF`hh z;?mH#5hS;RFMQ>NGAPl#IH@7WP8)s3;udDEnY_1GLx=8behxv!oDbG2>j(37TL#i& z_A{8Om|a4}>Y*dJADmRAGUFHGFD}KK?NJ1-C*Hl*8n|2;lS7{rCJ9>8GX%mts#{YK zgWY2>B{t;RJo2$yM>Lu$&*pO~mBE!^1djg~S}T<*Zn)c%k%qiiU57!-s5P;s7Qysj z(r%SKN_j|(6fl+L2R2qbx%*1pW3o~SM+a^uF>{9%ERw~nnv|BhO_q}=4$WK4E_ipBA#G20Wo5H#GLqqt|oEiDk7n1ff zm6MuCvx&s2;VSe`zStVPu*?sL*J{iv&cMko2B==FwAjy=9jClm+*N2Z5d}h%u{1Id z>YF&fw~&G#1B<^p1f3v7o+{FI;}`wjxyX)@cE9(H?EET;*m?7?oe~@FvK{>+=Qp;W zA`%x!U!7k0zOt+9(rmW!OJQ5*{&k#;I)3OkU${6)yhFD-_=j%($4$&2Qx0RCeAOPp zh>Vvzo$26yAxSN|NU64&(>&Twwp=mdm5Jr2KK^c4tGTNZ>GSv={DD9CK_^$hvrA}n ze@?-$b{D&-ROWjBk0`3`FrSW^3>*Cv!9$MKbVQC-Hf|KR*wRgvkM|Rwj3vP#-!zh= z$%-hB?p*GAT<)VR>AC%kv+6MHWilgrG8Ekc=ZD#rWjwdoA#g#d;-C{H?WZQThy5Vd zE9IKIo{i{AI!XAZXao&XBoz*wyjt-=BYBFxhVa^0X-0qI+C<`MGx=DeZ5RXDdpOhl z0}1Puj=VP_*krq86I=h|p039crJdKNy(r!Lqwo}w8A!wz%vhy(HQNTBXar^TX=#Q* z+ORK6+MokZwx zW16AP#8|XulI-yzWTzr>Q<1sxdi-*Mf1h}+Mz80%O;CjSR&MHO>ebH08=mV`f>J9? zd3K8h31%=6d)=Uf7nahJjR*1cpna+0(^bS_0rTOP--#?H6qGwpm8b0(u2|3G{H(59 z)9qp`Q!C|+`N2A8}9ssL8p?h!6jZnt>pvN5} zYhdkGPh;56%nqhs*(^Vzh58PPfkaZ|sFFMY9AaQZD%0P9xUy(Em1eK})zeqI`n$Wo zx^~-DDMQ19Zr2ft6DHDo@;c9`DHa-NJocg&>!NiFoRq+NpO~|gb7&fMW0X?$;|Eo& zJGJvyN2ae57h7LwT6Y;dLB|?Rw{kKSYkc9VFFc+k%MYQ;w`Sj4N9;=c}lV`^EHEr!htmhrm;>=&B;D z84g=MF_{mD)usG|GcOI9Rj_Mv)wLHbdAkQ?zT2$y7|-5~C1QG)rV z31yZdcVz~oD~BUvLfW6xlBF?Bq7i=EO!_y{C#Ekzdo<16@0ywpyL|hT2iC*2!1`

Yw*rOd0by;1)@YE&1m9_l^G3^zfJZctMtJ$W5*VgS$3hk>7v_YA7_&1xvNB`*$z@4go|vCSB=`2_BQ4QShM zDBm)QUO>pwk!)=C{_%vRv+D6iBlw8Sw{xbH@f&>}xyby9B4?(%{@Z%XH|olG_;GXD zo$uX;wm{bA5 z7oYc`Z+=9Rtx2QeJ)Ave)2SyS93urwRyYgsYJ&4aPZz!mHx_kG8wFp@F|_S6X4ru! zLD0x}3yP>pdiO1GsLFm2tx*=OmCqO#-!&7}xQKW7(Ao1zd9^=m++k|cb>WhFK8+RQ zb$gk|=>nwE`n(ZLcXR2=fjG=@A~!%&U#5zUKB0MBap+4k>6y9Y2|n$}8>a}v5G)el z#G>c-o^9M1XKf-2v2SHb-niYIwsyXBp>DxQ?&eap1Zze&ztIpaPZi%tWpH&DP7OS# z`UK0gAwc@Tl&IBAAH-f5?w%79jRS8e)s@7|9MY#_^Ty83;HYR<*bl~IahcjBLeG`? z@lGl<#DIMj5p@9hdGL&%46gRL?L#jj?d;#U+dsMD?2);oScOrZDI&%*DlmM}r>F#4 zr#0*&`1L1-lF8v;e3g}TgAu17)sV9$R>P1C+7lq1LRL@LLzor(#GRUa6|CXlx{e_u zvqM`~b7BRw7cZy<^XH(e_6WDJ3(r@&sRXTckrfya>wnpj4tj7kKpMam9cjNly<1I3 z)(7k5VB%{{E1US?itFhxmf$P2METQcEnCh(V~)^`H)4g0_yi7#gb3=u5}ih63-!y5 z33K^ASa8AG*nWW{y4a40aCnk{qIe=5H_G3)LWAST#FT2UiiR z%lH;y5Nkjzeo48?KIt;!CMhHTSoA=^0k%rmHS*+=*3w5v+mnpc1Jg}VZ$iB&t>uo{ zNk$ABPkc7y$VTx-%o(L(x86lu?;_hcpFHTy%^wUp-qY_&`VTATt(S_Rh#t-Q4DBOd zKU{iTBWMWJ_9uGs$e6wfs<)uEiuhhoMTDr*uMA;C_D@x)8C-pgY_U0V^<;_WsfUUO z>JDB?=Ul0JRtvZuDY_i~(QX6ROvbT+%4m_DQ@;-o`*l?cO zskAJfGgV<+@WQwlJ96I`h~SFP;khf^xXHu0X_Kba#EA5j{#2;2tgfRu_v+yYnQYi) zjfF(32vSOf|-Y(Zh6> zelUGCkH{S1M=W;b9TIC*AK&9c+mOZU1EhQBk$R()#veaOaw=(BuBb1TIBp^vJzUYp zNks9I7gKli-~ehph&pb;wL;E@#aj8d1Eho+Tpt{iNZ5@hUaB&$vk&9q?u=`nJxa6N z=O|XB!Z%-Jdy|r`;cRx{>OM3?EiT2$-wEFee$i0qo63+o>E?;VuvG&=E=bBgs7jZ# zeXPx%jbVE8bE}Gtji%Y07w+T-HFVe)DlA3oh=kpoMf%7^o{JWJ9O5*L6nxiZro9S* z`dTs->+V@CreL*1EjE@#XDw^s*?Ovm2*+KnDKLP0qm3VQM#(*5bSxSM2Mr*K-MDts z6SVT#Y2x){(09mve?7d9vH)3WpvXAL4&$x)p(U${CJ5(Y@q(grF%VbAGcJP2b;R86 zaO#5@xaA_JT5{*JrE2$SjL2DUB^N6MPn4%OQEeP z=!37QwIMK|Kj)!7D&+(on&H-c`YiQPIqA5Xq}*bkWR(WwXfbnvnGS842a#ES&YD>ohS<@U3Pf6PF9hDF9EOCX>;Mc{asNci82mJB z)xtu{aEYQY@$U9IiLp>VG97N_!7562ClaoWBe-YPH@`Q2v7yxvn$1KQg$_e)>@afn zU^rE|Ol{pSL%Tv4SYnr>Lts|Z=&9HGYp8Qq-ghk~0{pfrRnTo*%nS~~AwFO}+2@-s zjY^q&OV!J!z)+3qsIb%|m5G`oVH~Cxm!HPIWDTARwB+7txF67wCidV2mFouO$3QHJ z*?!XkoyN@8opkAyJtSjo_x3hg%oSg*aO}LYtN(Fg6GoY`z^tqR$E2U50)=)4UG+AuMH}byx-+cp4Lw4>x&fw= z$!Rw5I1j>A*80$+bJ6Cxq`M9}BAZC8w1uh#>Mz1U69 zt38FhVgqEZN(7Bi5sl%29q_Cd!~Wk-{jD{?lRkGTN1~TVKSy9wlhbm>>3QZhar}d zzJv8-zJ=HA+Bc(G^pvMw4Mke$!>EaaVf8z*_-nIqL6f`e)NFksYa=FU=>p~$_}{G~ zUu%1EnPFi2ULPG`P?JcS156-VYpmb<$^1)aw~b!3@{t>hqOIp znHe}5QKESo1wpX+4QZ9EZb-@|gVAlU!I`l%X6Y>T8%l=a%}P7(P|`18&>GmrNA@Uq z7^N2Wp(Vm2?pUHjWd4(9trlf!I4K6OZ5`bw%4HxhB{uY>WI_@J zNXtiNU&P^LFXp2bd)bj57qK=mZZ}aN)IoI`#rD5dTJe@g4oHTy$hQUyA%LvLULHd4 zxuq;rRzy(;a8PRhG8640^UJtXFk*PB81Dgp6&o0TLXy!(Wd%r`9#vTVURF8G8I!QG zSBh=MoHa2T1q-$Ee+;fJahON0f|cp`sKTS5o}$VmB#o*ia1t{8{d?f^9o3gS0}30&_i-SVdMhPlAot{Ou?h zG?A_Ics*Kj_TC}(qX+T@Q?li^a|pO?z_g=m9cBwSpf?bh0}dO8t6Evy-!Y63mJ)`z z)A7BLk}lE;IspS$y~Ueteo}IZlFJ{n2URk&IpaprM)EmExI1Jwk?1Jnst`gwH0w5s zdGWK1SE>;7g2$dNU6-oagPhF2-cYT4dTe*pPb2i)MLd_>qJ^ra zRUW*+ot3WcJdn8Kp>li-Y!%@?9c>2FH)6A6cTYB=V6stH(moF~{OM&U2WA)sbqghIW*+!`f~TS&T1$yD&Zv^nu0=L|*$s zZ8hfXJyTKdh}If0=vV9&6%M1 zV7v2|)EQTDx?QYS$hK;s>|otWq5^nxzi)v!53OSpm9`IbDUgBzK4V6SL`3*% zpdo{jElmHq`tNTw^2t&Y3buqr1v#St68O2<1UUS zis!Jo>j@f0~HNQVT#6)%_DKn7|fElk? zF9Bmi(c$pZSZW6NIpkaAtD+)Gl&WKK5Wnk!0YsUziaLSd#$X(8)fZiVXkW&AKMfr{ zx3!hUiTXSzyp&xaz+B*kxe(c^llh%|dN3TgjTZ8mnJdZUn;7AKlGP_7z{W&`+a<4X zg7|`=@?^E=7O?P=xRDu&tT%K}GG+|y$|JntK39A)loY3_sgqJa7(AXU9_^2B_?WS< zu?y$pCLY1G%kr}o6~}ad!z)tQ_}N0#hTW9xi?QAO>`Atywh*22;EK0Lg8v5Mm^Mn} z(;1|l3Q=tZcO~rNEPaYkfP9kxP3#)El(M)2nWGjQlpOV;g}7rUtfK_@yfla)TMhe7 zRC9NmnX`}#n$pG2FzOmPk;t+-1)upb7hL|bq$j$pAMct7r0k2&bsx24(>_zO%kscMu)4to8%1b<2Jz_}j#5-1W|8A& zw++`==>_-vS&D2iU$^!aQ4mZ=G4* zr*AJhI%;^Vgc~@I-2Kchy-Z495YCiz171Oh&V|519b}~eM7}P1q)T9$i1%Y~@?mc* zz;4+zN0Pu54Z}3W@Eoh0;Go91l|m$@A1DH5&ZO8Pgp*IqS7^`8?eed?eV8exvT>gVFB&yV!;wMk)0 zYvBx7MgysjRItr@9q-SwLAGFfslWAxJ}ZU}fb5!zTo_ZM_-`Yykhpcw{IHxmZ8Th4 zrx+!mb?_Q1F{{AG{MUBaDIAG$ik*RT97X=P1Zzzi0uMf$I>J=}9rEAzR5m#M6y^Ay z?&@|SlB!4sKsaZ|`A*({S#2(X-z*%c)m#`Y!n7-*wXREp)|Y$3XkCQMTS$jw{;TEHe=C7y_A`7l`G#hoNvCtcawrc*z!LgD;aUN|L-GVO(bxE0h7yBqv zee)D3U!f>bqvvBclud(jZ+N207?(om=fXf(RA~jLA}R4BT#!?g)RdG4V8`5@f!|j{ zN7ql27q!_q3jCDOfwh5h;R*IroEd5l@R>RINXQ%eqh|=ra9f;=QFxeusCMtDbmkfF z;N0+HZ*rv~`H-6qAlv|v+aX6uVMbs*<8sgmyOi)aq-_boQQzF&>?5?K==4@oOHm9F zBB;}`G|GGl*P#a zof=Te_W2wo>$NgH4046&iHS7#bL;m&cs7TUW-G26plHmrx9FpIAz%Wa2&+4<&lCya z#3L3LDPHUdjTV#E?@{279Y4s3=uqaH&EsKqW5q-z1yGtfUzLtC6brB8Lp^xJ=G;5T z78r|+x~lY{rm-T0xN}Hyilonycf6q7#|9>RAcMTwXjMj+61fqEtKfz;Xc|$n#h+Fj zEHxKR=A&;dRX5e>#T4yXvx$#P*ve5_jV_0|RaYGKdO-zy zac!ayrFOMj!uWs$Z zD|W#^b}{Z|E?)%+xe7^%0Sw`Fob-qCmHs$vuX(;8zVrs72tJa<(}=8QGWoZlK$|Gq zE168%0pV~lU?~0rZ%#JKJ-)>ICOow!{XljrJlSBb67+Q zS-s-7qpi>fF4OZb&e#cL`V`Y18J?io(3 zbYyUu6SAF><|uaZnWQdUA)NduIl~oO8xn^0+Q=oH$T&C-20wm|REEH|)+!}l-(R<4 z)&ThUh+V1piz`#x4%N;~x@8xuttubMrUOxg+|pw`G4DJo!5pM(NE#ZuBeW4p9K?sI3RZxlV?wAJ{q(Wt6iB>6 zjupWuA?$EuFy|l5#%ZC_5u{zxFjz5@wCgK{$f<gJgUZMHH+6J5_p1FT4nd1kKT~$Nh3=Yi-H?hVd=dl;~9X z?rJqURobJ!R|P314}+T;)j}?l$ZIsnabz%>;H)<|9yL(1bqWkcmhs4zE8U}5VSxG$ zCNky^gttN%N;GDreZBj(g7@kh{(=ZBz~t+?r;|p$7gM+IF|xRTabfmnPh%p;1F!?w z{pHA%QzHD>Ya&s0hLbi}u3o$ggM8g7h)iTt)tFo{SDH5##s*VjXCKJHRXY3EBBIeu zh{|u5>hxxGO$!4u$hpVc3|wM6t+o5CF_c$v(GJD$j}r1VvDT4U*jnMeh?4q~b^%uK z(h3cuq?U3W0lh@A+7D*9sxrt@`?Je%LbTFt4(MA|Wg{XTyS-lJc%=-3)%QFVR&1;@Eq*!G~ zT}CcfUg5Jr@nAoD?=`E-frjY>MezOMOdh5?Ynz}!h}IG4rr_)A>BI^+phib@SG3}e znlAjB#{XSnOfq9xA%29OzY`;u zz)-3FraUYG>h3F^LWtZ*(E!+gP#f9w#lR#%q}}6}77+MNv84wG1?~r%)tmO?C9k`= zLhsy3q_zG55~Z5-pp9&I%3EG*-}y%b9NA&l`egRn51ksdZmEaFIKUpSc!h3t;7j;XGTc|RjBcC>+OIBop(UCtXi_J)0B@6o8uZYe*_2{`-<@s!Y)0# zbm9en3{I(ap)htGC4T4+D%c%xzxARB4#lHmWcAyWE7^);m_{ugNp6XN^4-OJFyBea zvrhDAo|T)*fEHRIzcZZHU(Zq!DRIOKh}}gT(njaZdvn$#qU->>VQkm)VbC7Jm43Rq z-gMLiA=l3wPc&aKwlvB&}B#F2AS-|Vwsn! z6!^j(0|T^p3Ng-|V|*Fb^)`@P}%zUD8JdUZ2r&Mq#))%T7?bn0ES==tQ<2|;4 ziXoQ?6s6H>dx5l=NhFMA?ROJ<&byL!iCGkr3kOQsIIir(I#72IFlu9o0?}?|m0CV= zCQ+8c^^bu5vA9gaFFOXn!KpppZ6Lse8FG#6@|H?INbU^>@da{C63=1-Sa@Z_AG2P8;q?( zCk{s5qe$e)IK`tYYV_GQ&pcRHsml0IB19L+wx*%-ZDT-yUrgzu)h@XGw)*e+c+xe` z25s0pTz)Kx?T&(o^8_@(`g(yOjvz~-xSX8T+r$%jvfft8A}WPwO!A;I;{exIW!tS_ zd{$%^ZmN`)_aA=SA)N=~S17X1vz29_tHWe+z;6SD^U+6hsNX}J7s6lW;6mCRm;pgfX7x!1oVNB;Gd4b=osNE)D*Qe`wjlx%P`#puf7V=I| z@Z3slOiH^2hR2{)O^sO^Ok{lZf>%xgX8&k>sGddR7lqR~exA@j<7K$Em8(VAg%2{|9s2 z@ocSnp~zdd8g;(SQ#ea^f@6u|$z4DH{sITQTEl-zlK$_D{o< z``1HuV};`L4-HE6JYE!^Niy z;XefQx-^48y9*OfcJi@LirkKnAV!t=IJOmT|A%lbs^T7NXy8v zHZUfP@#o4e=o5BV$hM6?)LWK5Hj)0VO1DwPn56$+hMWDuWgUkzy6c`0L)GX3Ae96( zvvxl{2N?mQ5p>r?O8Ua)NWw9K_|UE1a%{9O)ZX1iXoM+YU?rLVH+!KdZvrlY83Pu_ zTj{lCc6Rm&FLv*Fmh+HZnZ*guB*Qbf`P)pSmLxKV)-VQFG*&~1pkx(8Qak`YwFV9Z z<56@oC4JwNNIMWD*EE9o z=uTgm6)C*mS2p#rl{jQa6|^sW#Yb=Z%8ZGOVIq*{B^eY#xey)LddpV?S05^7=w9I9 zZh$egnx=KvwF68<(Og_{RSTe53$8gbeaWD5M<#+RJ+&zuPBuXw8s-Pku{L;sh!!?rrtR0PB!cDpfV7}xPq14`J+ZR{jZ zkVcao7jR-Xd$GuJPbP-NGXa%m(Bka)c%pqw3S3Mr(sxevkS|#ac zVd1m*0Z@NjabO`@-f8MgyL>inmb~pWZQy{>V3f;8d8*=0J-TM56}pp-x^O9B4qnrV zuOly!Duh@cy&=$nJ?_KIfUVR)>|n_#+;pio_2t>kX0H<;8rjqyTt`*!Vz2g*g--#! z7liAPc|41+S}>ZBz9EdN_3RvpMtyt*s`NgwMCFAas1HG>1oTx${9s#j4_E@pHWjC5r7TO@%pK zt2r5mSe>?`I#AM@*ORxAfHOUTYepi@bmGQEPFlZF^!Sr#{YO4C>?G>+;AC1turCZH zTVy#`1yX;^b{EX$lfs8z0=0R`iTF(WB0E;JNlv@Ek5vr8iyeodcQvYCoJ6Zc@O^#dSN68j#0JkgM?YM;H(|4LBAw2x9Ab~#DYFn$w!&yC8F=VTbc-Kf|;P9ILHCBi5 zw?ZjHkar|8CJSTUI$uy(;ZEYWGJ&|4uS%gY;5uL4E>AX~=-XcczqVCuhs?dhXt(Zb zg_{f;3opy_dNh?vnd?c+{Y{F_kQPNIQri+^!XlYF*C>o3JvqBV+vQ)+k@-FGEmmGJ zLPRAPbMccI;d!_&gM*B(KT}@BMpIGN^{Gzw2}sba}qp$F2qA&BgMnLiVp%pubQBZT%Qa zD>Q5Q3?dXqv@?mn>@PN3XAaBB>L$U9aq$zv)ON!g*FV%>1m&+;QX|<0lA&QQd#AC^ zw=3#vN77woVzGHdwMH9u^y7;!R8kAWHSi-K0S35r>7#PO;UpS|KP#}LNNWE zSg}FzmMeNncs%7p9*5>cerCsbd=xxV zcvlM*oJ5K49Q>4@idTAK@SN{aUZ8u9?KH-HQ5O?166_gWa=S+0u9{#3A~Kib-k%+Gu!dY(-5Q{M2;RUz&AS8qv%fu7ol4z6jP&Thoj>< zzDN!&O20ZtM-k3 zw4Lpo`9x7SWjCvuKpI*h!AHpr3gOuKD$T<^ePumRj9+WG8o)gh>F?j4?pMy>qbE(@ zeYy)LoX?26 zr_aaTuhqEwB?7Z%7Q;;zb;kg-cou)DI%&!aH|HoOuafkXvYeM}$W{W)B8!>Dq`D3h zP7FLvT2z~Z!zkMNArbmeg| zb^rg|Sz5IaBGqK8$YU%e`yFfc@d()`Yf+RnlJ1R&#}bONHABdjv7{opV~xU0(xTFo zN|W|X(`@&i-zq0`Vb|@ znbT@`?h^CtD8WLN@<;eC8+hkqU>jC_6;%C3^<_{$R0}E40x#u|Mho&&pGO-UWM-_z z2e}Wr3m2j+@-*|jaxh2mAM@M=k!-z#$#MPX(6ge^qwlGx2Q8=_7&HJ_)NqpH`UooO z*I|hRfpzXaGS@1|+!Hxd7geEP5FqP??bo!MDSINhNHC>q$h(Caz-d_EF7Ols7i_El zHQPnZ#k?6^qj;Dxb&Doop#k-O7Up0R0u{M}CY!)!(1p4!_8Fip!!BD0}41!0xRAFWN*6RoE)j61a?5AOJ6|$Q-u41-Zk#-Cshu>$`c3(Ov&=Ia z5XeeCz#5<2N3c6`Id~tA*Cldv_Hpp-!B%Y+FEDoh_R z$}nJ)LA1vh5W)lz`0l^;RHMDm|3;~= ziv>@*PwOJ=!Ai{Y7l<|mk!Kxkag1G0=7c-^>+{kWui;9jnt|^>fo%wP@hXEjimQm) z<3(n)f#TtS8$sGeWPWtU5a(<9YvB)t0cVI46UYuz#!{Sy;f>-U#*LKTKf<8&gim9P z!fKXVr0JNA@FG9xxYf^)?hbu%1RZ*j2!@X`4^9U?_Ezpj*C!==@vU?|_By3qJ#HHdhF@d&81sx+S9UMbetmwe^^uC^7}IH55p#fRB5 ztF(5BjNPju>S7Vq@terq{}I+%$qq+go>ff51Z>}I80}87UtnwYa~0N&eFUlc@^l3g|%Uau}K2Q93_@!z@eRZNc|_6 z7!CsYG7QvM2EO+qUs?$4_L2EKQ#V~C1w*K%7GRb^REBNi3f^E-Q#*L;YejanSFUkc zm4@2G_yuCB>GnF_b`M#s2l+}0ZlnO$aUbDJ%OI}(K5`;@(1Gw7jD-M!s9if7*&Nw( znvc2ymRlVV$1ok|sPY68}`z^2-Fq%Zk)E#~bYw{r8v5O95S zi+S*ppWV^|-v9PlgbgMMhDEmQO_OBHFw!jcP^IrkeMBD+pikQl^Tskceo7`uj^yp& zUJyXtQTws~2FRq(7JxXEzs8`9xM-4~iCg{nCc<^rq)uchc8mb17fUGKYC-BWLJV1~ z$z$_nDK6DxonQ}@ojyLDhHtNkQ*LI`VG*}n*ZaTDp+FfaHYA;%U?F%2n)|n(J<9GK&#t#3@32*) zW8~{^P-FCtCz<<}FwhtT=8Kft{w_V)$e% zbRe+%#I0`b(Jq?Esm9yPQl^8>a!3)Iqn#xKZPAC=Z|E&TLcm>xPN9rH0zi-%c{TzxUp$#f}V0xYWO3T>eEkEEoDUV1Z~0rGV&_ za{$L2{MNdYZ&zUI@1vkYh3(?!UV-m9Zn{ZK`RW*OGXu)+&WdCAc4k|Az#dqsgwNVN ztn?mh=>A)op!B6WUJX|=j19*21B!jD9w?BoJ{H(2(9W4+_wfwKegN)$BcAomJLU$4 zwZQrN3TuHl)JoNM+As~iP>Dhe_{9$8sK5AgYqZbE@z6oVC4V`{X15Rvz3MOm+DMb{68)#HZ^RZ?`RoPf18#WhG`K8}XDir^Z%sGo{KO<*+4SRhTh|e(Pm{Mr~P45?nT0fox@a z!IXsD50!R$KZB@N8}_aV?yVz60l`>6S_USVwuMz7R}t=a5|!D{P#{q)uOHlpg=((C z@dA4%2}W<%)9VyGb=yS4Ne$kKAN`9juof)q0X|xQJRn%|-VBtvlX)C>5*1I?eFSEH zV28D(psB6=%0YANPERzmAbims@vrZIQiTbP10}==HE*9b?=Icepyzku>m12rQ$RJ% zNj`5`J>jlp^|0%f)yOKg8dJ~ISxI_eA5lE+O{)6{==7|iT*(*25h}-+=%lydWVW}= zQJ>R`;;WNx5!@rxpEvm9ELd9ruUg91^zTdV5`i+cH*nj>`n<^0Aez$)OhwOztDx0l zGk0;Vt-^2SBtckVGf3}4*2PnypAi(CNetgZn%Uf$Q6_vHLXOfW^rQmR0aXUOfkuZN z2JseyM~haPZ;bzqk(I{y6bziS3_ORCrQcA>s5IeNxEC4eTB*on-RXM5(9w79t6A-h z^EP)ZM3m1gcI3jvh#S+osMR=G&v>%lMyr&u>kqts37m;_xAmzjkR8!6v$NUIV>>eFnX@w}Km{oGXH7O)l< z8ik}IsNzfoXZNvAZDy_5#$8;(3E$*J_Tac3V(ovlu+3IsjXLSwkr@wIXG;*uk)15) z@ec%rN^9EJiVQMs={q!U0b`Ef-M-`oASnYfi;XBjaTk|4$Xxa~$kNYyk=|{l)qSnW zxz(FIR*(0!t={bFR)FpImPjnujL=}+=6-OWO6&*E&4gRa;YGD{pCRpyQCMkCc8^hs zwgKRXn&eZKfkiHo=MJ*YNdmr#TE$D6nkWQkGOa8@99waU<2*M+aM|*mj2@VZcDTGZ z?O_S;guu4z|LfZWz^+dGg(LZ=KRB-9^sD7O+JZeoAMrU$waffYiDmW4dATk~t}Q%v zOMwk{3Qv6gPlLnm7z5jnxS-}u*Ty}gsh$fB%33{f)IhxK0kmtua2y2gW{vO%zfU9W zHmBcm(6a|p5+dBKYcYy=yQ7;&T$l^abZ^*6#{W9u7LE_oBNir(c(Vg0Z8Z97Onu(E z3mVRf>lk@{0We4X|6Pv=xICA2C$sNtbL7-}UQ1yU$XK&?7(Fjr%tD(hCYFdTf*)aQ zGThl8ps5q#pJD7?%xzefQEokp4QeXES9>z+$V7MY1jlV7D|{+y{^!h=&Y0#Ma`?u;=qU=R8O^>)9m3LuXca#@>-2%C@>` zn51S`_#e8u`R|J_WS@6ZjP6s2cYKq3zQwJ|;r+`Ma6=P32VVn_1Il`Ueks5q+qBC6 z8HK3#x#UGM-=4Bm$b!OOYRPdMsI}I|mtiA)$g5Xg)5|N{&M+?;c{SoO8R!|7BjMXD zuqSl|leT~jR=JaS;vUwDlVI|}{i)Tqi`yJzj;N=2ot1vHj9a}w9#MMZ$+gbMOR#=E zGHEa8ql<5<+D5D83C8ue2pjawH1y1Y1#tgb@Z!^X*mFFlIjrK8g_n8Aj0-@TrND;v zT7{|4&Ol9uIr@)Fz(aUYvrN>CUjC;ih-w2>eynDn>cLYud2@9KsLeL0lqv1cOf!gX z(!?zAdqX}%`{zGvpk@P>hwN7l_8^q2C^|SW9Uu}lEdo9qQkU9?%-8a-f!-0oMu=T> zvLAWeFNUdVM6B?>PYF1RwDlp-(Sh7d)lwg!y(=i02-+`i1#SqUIoDYPp<>-Tm*7|uz2!af2Q*X0Oc5iAjx2Br1| z@wR6Zhntg@XHR*bCH#!zn77Te*AJt^dOfd}npRJ|ae`mI z!uAYUZ~^}4NQ5iB+`z&{Wh8JL439VjCWF2ypmp2xzBj;RX6+~Gn&93m79n|w(lCkq zng%`!&ehL~676eK@y{D4Ji9@hE+mdVr3#R+r;l|MS`cAWJhT}34n8s9a@fn2-M++G2;`(y8%>@W6+Qh%U_sN_6-gM?UC2zksK zT=@X;(`kfH7M#%^+IYd#^~hg>kqyV#;I@Zsra4Fy0|bPRt9OtcX^EJz3fn{914ggA zb@zLo15xu1V2WyxFJ>LzEQs&bnse*vVG-2sn}(^vdxI3qYD5LYw0Fw_2V&!^3VI z*j#h^b05KBHn2rRS>=_OIh^X!ymV(1cu<>09trd&*P6YXubrP}jsoAkw>YBa3t}?h ztUTfzJh2x9o{0bwlu>JhKx7xmRU8HCN@|_1+IAh-RY?8IemRls@+bXlEK1E^MqQX= zDxns^{2-#wO}Nns`t%_)I+WqvFc1xvV)8bD>eF!;FgOGjE&^E_SY>-y+8efxO2okA zU=wB2?$}C7%)O(gE!`abM@9IK*V~OS`lD{_M~8G!E#*`WZ~cUCCxXDoz@#4dUx-9N z*-#qF6e8## zhi;27CPmYPeK+;-FH$#DXChV#2&j8VUABn4u!~hzYb7a1iUpTPz^KpO{Ffyu#D1ZZ zt`FLc|D%8UKKk%=_~aNd?>r(o&2>DewMea%TT zK);gUDsdvBKY}JQ^%2H^Ha+pjC|`zoroex5O<$w%8VK>_0d%rr4F;E+azg~-Ok-*MjX8M~A$yZR;Bc^%4H$Rw zA9LXBPFCEw45ms$;40? z41WgWq2)^2c2&Uo0iZpS^~0{1J;Y*>@CRvPEoBr=0`+wuPSL2j8MhaGMB2 zdn1pUlSw>T2WK&UA|@^r^V9)Z27`gM9 zMU%V|oq)sQ%Fdu!@VE+kIMN3#U}8EQ-yurvf^|Axs)pFd1f}*iZ3l%dm~7d?Nv1jN zf{JUN9wh%y;QB$%*!XS3L1G(-bdj7elX1Lv;=X!b+m=)um2hoAf~S<%Y&CDDfeJ-s zY&W&EoU6VL&Z)H>QSnc@PHtO^bMB6RiJ> z&qmr|#xEGVqXhzCI2&Abko91LORRPz1Y6-j-tSVCQ~QFHs2R0X28^D5g6&xdY#ojZ z%(N2GF@tU_e!U3)R4u*S9{>7}{6>vmny+;1y{3*C39R_`YDjbY> z4l*j);MRDouZq*2`d8oZ^>g+PEc+wW?gpAPu*$}B8|!Nu`^|FM7rpCqrKlEPp|`{J zyfD3}r9+B_PH#;y!E`-3@h9fwB}ej!9oUn!3kV`v$?crvua?!rX%C;0iifMfl8)&L zEH;Jp(MPtxY)-oDU%Myv;@)bXa2(e=o}d$BnL|g3H{0RgTaf*e8AdTwhEBX6Nz{FT zY(MM4!uOVs_F(;51E*lOH?y*bgA2XwYeu>u70hMW@dxx0VhfxCH?pp75L7+2J88J} zf~h-Ah}5F;cH!NN5V>1YdGJ;~d|-YFj-CV_5dS+#GxgSjb~aEu$O==yQ$*1tOZwJ6 zB*J{yHi0|IM?R#CbHh`lkV;TkkM}VSE@MQVK?Xdr3-)IP7Blis(0et|55LTo^#h*8 zz$AIwoNOZd>pZ621w)4X%NhT2GM6L8HYZ@zJ5d3>t`P5`w+n9fz1c2Y(L%&m;J5OK z7KG+pf(Mr68inFCqcEZ$8|0%Cq>ShfMj>4u;UFu%w}vxcCb$NM?Aeuls|d3idYJW% zTyaRiR-ZH-NaQD30An69GY$Be4pEJdoXfZeG9vLcB&KxUNer|m$XMRhZBqh3cd z0(LCp3ZAnqrf}zM6G-Ms%)1NXm{lt3R1NRx52fHDEX#nSnfvarwidJ}>sSh3S2HlC z6Hj>Y7w=;dzK!Y)#B9*W8dbIrQSG%`S>uJk-7E(w)w%T834%LL)dif4VKIv;seF2g z3HTdfJffjcyiREm@2n>#x5EDJ6T#Inp#A(dO!YKTLwsZdXC3b$My|ef89XdWm_!ub zM4r&<2qv!#dpVVxIETHd$FvFc4L7L6AK=}8Q14aWsB||zeYIdF{Lq4iK}ma(2QuK^ zGqAIs7=p&(UxXc*rn9(+4G;u?>Hr*(Gjm-==9UftysU>-@UfkEf254*#J?aKl=1rw+MCYyB`^MAq5RN{a`~UP z;aP*Q;CT>xA0xp8M5`?R*azx&6_H&?@M?Hz8p4V8D`FhWn8s{|7@NTK`E3f7yh^MZ z`)%4d?Gu133X_Ec!8TU*Dq$O)J{w%FC;FwZGPxE&8$6cAlk;$;hQ@8^5hGWr(RQ$gB(&^BAol4}V%?sB!wh&)TEVlSG z=)|S!7Wfzk&BKBGhdFps4v#F?@esNbiJf%;s&HqZ<>dkLGbel*(7P&^xPiPJZlkyu z)26Uq)*p6bAFdRhWY9FVL2Bw&PB(9{*1Ux%ZXrH(K}3^3?}Al-@vsr)a0Mv8z7I&U zLBAfLvZf!<7S#d)@~P=_U#V7u=ow}w&G!GtzFP!7l3ex4EF&6IvR*h6}NAPN*Lr zniMlg#Ot_7OjE}nXKI~{K3n0HLTauyub^3qz>y6Vc)ApB>j&40oqTxkbS;yl#sWLJ zlHY9L>PTi@X&`QzgBPnFCLKU)|EW}QA4HXBr4mcbs}EVtDI%TwBf)IvM?r`5*!XU1 z2@&-QBDGcTbac{1xwJIM1atKE`8H>h zVuGV&>WG#jhLfq(f?A$hdWI>MGvh*_+%gRwEr%y{EktXJ_{#Ou@ZwZhG(XW)|1<)D zS3Mv-Fl`d@aUeLLhC(87G&)Kqsd7b!X9>`u^W!gF66D^zFK@N_OyK&?yJ63|lTp}5( zSVKsocmVx;Bkrmq#3z}a%)bgo-1VKYJ7@^fm=H$!oR>P@PisNr|6-Y|IXE`4b*%z7 z05abp&;}KFEi(`RML379+Y5Z09;N%S-PkeHsZl7@ghax3j>Hig*iX)Us9?m?4a$cm z+^xzO--aPYvRx4J_jPRVfo7z?QAx}(?cVH5rWxUHBCXo*W23MyGhPi*@qcLJGrHwd zwT8X&(6+R+r=ma0iCs4#?F!HTU>ZY=Su2@_WxaLcX}67beaUY&Kv72^nN6hYn(m1} z@{6-#yG=yKacfx`J)9OL2AMBT#b&#M{)&?3tlDVNX+lBOm-BoIiOwIQuLYucMKI^b zE8?7n%Iy%H)`@lFJ8}7i-^6ztFshC)@s@3fxOGO*mNKPPnr|gIZ0KT12H9>(u~>2g ztG|G`yc2Cx3va=Nz4YC=>an-mg;6a8)d&w);1MVYp}jH)9^pzjI$kfVUue!rjP&Xv zE*1z{xYgl*?}0lJpfL@EI4Jf8FUZW}+tDSJsM?VbpH$S(LQzq>oe~|9V)2p|_$Z6` zZAq4QC>=RX@JAkB( zg`DY!hI-2M>yG1V)B%o$6PFpESRy!xNaqvWAB?DO8@%rXpRI->B+hJs=NpK_>%hHG zATc057E#olo6q$ofA+xU>;`s1>~gPZb?%a;>w?W9@eu=GrL?7seVL87iOknZ@-03s z3l1L744uRjJU0c(wK`rJS27W8rAez&D&GUa#wkVvJgRfFzS!$ZzCP(JPYWB-y!GZsp4-PrWY%pzraJ6!f(V?;9skyrk23L&_9C~<^XR3kV9d@4@QV!Z1F#c^V|^#+>j+)ond7un5J(y z$$ozi8x`|0Tj@gIQW0Z4^#Oh9(%wu@FdaQ_v zdj0}9`v_HU3D3$Iv+qp6F5`S!D}ASjyM7~3{rhwf$@@7X1r9^)vWa0rNMTYsXrIE( z-X^$bc?V?zz*7el95vik;N=R+njR~qN5?aHeVO&i^tJ8t;L!@`9}M$SV1FwD#s@MU z$y|vos(GwUe3Kszsy)G{q;qRQv~ws5aL3rj_Es=$ibdi=%QA}GQQ3Bwd2^ZwyG}&w z`K#4hD&$yUwpltX^Qrh6xZ!L(MfFE!3tj& zw@S>KUP1;Z3OcR3#x7Tz(_@S9qC%0&Q>v;0j%^M5cNJh<#BLwMdYakZg3u@m-jCD;}YvJWsG?HCz?(#4h0z#r41+gEm* zmnoW2<3BV~($uZ`OqUn()O-OVWmkM*B8AYJ2hS^+yTQh!ad2ZH!{5rpslcN)uH+dT zyuIdbPIAq`Djyru+aDflC6im(huTjR%yynr=#LgE)Nd=RV_8>@#D?DN1ou4VDe$%` zxg?0VwVW_hFx`*ou`jzI(}^D%Du)~d8cVv)JT%7VqkS`!8h0cFY(XII+W8>X*8YP( zIEpsmypOc&0EqW#;&P`<7-bv1iK%OAvCVo_|Q6%w`VX`DMY+&btvmBHdR&nmhPqE_cIhOfUNoW+*HWC#RE8jwx|wj zfeI54RD=H89#DqtJ4FXe>pJm)Xt6`KMkUVz(JrCh5^%uTvv!z3irVa7zoMtA?Iazj zo^QI`C|a+^OWK8*$jT@>uc7i<#9vwMS4Y7aPZ_0%X?PXL`023fiI`hH{B9)+9I%t| z_=Vp5)$plifkTibm->p$Okphz5jZ%MWqK-J4pWEJMh{d6g&9{D!W0foESm>k*6?&c zl#y7n&szF~hAQij2Imnc)1e>ZQNotVU8|NNFtGq_BP4!Yxu*y6_wOs>kb`Z9wD*?X z!DgcT^U*DOxGJqano`Lf4Z}v$6*J)kP4t*JVgrh7{zy(^2f^%tLolWo{cE!kLyMB4ZM(=9vKErI=fJY|aB6LGWdkrt8 zSiCt5<~YO7F-*=!glr!-h}PE;ho^uwNpLIW^#XVs(YvR=Jh*5CSZEH0{1Pm2a@)ar zIL2PwYm;%@+h5Tm)k$-V_isb#4mE$AcJ(8=Z2_Y95TDKtg-rvXi-!yR=OVmhI~f)& z04db~$r@k9zic2_1JK{SlCpdQrp=|+%>>CQtS1iBVzvq#cxCPn6f1EHm0SRWonU^W zXiH<-`)a;Ps&^#|_Rk_ptOYJKf4M;PgjR+cOAUG?#LDhOeb*u1;gv#IS*7bLcE z^~-KhGf=%MN@jFs#1Sj_c|siFjOx{3=s1zNH5|Sj%}i=qPa`57d8w1&+@7Gw#KSpl zd(>ik30y6Nvo5SQZzN|#Aps>0kYK} zMZn-aN7BuOoWbsWS+LVfv67*JFDYByP_(9{cW)Etp5bo_iA(KvHOsT%5t(7xpPI)ZWB$TW!UP!4~Pbxi=G zmri9${hiUS3mg-p-Q+g>@v!!mlh*XB577eHL(S(Q_DrnTmIlwMz?JhdVPgrTZmxuF zli*)ePquO;qftha6{b$v6!UHGDwGhe(b8`XSPp zn(TxOcqyLvR7V{9B|>e7-8InTnKJzrA!Gw+c?d|B5VR7FPV>da2ODpC#Ix^y1IYr* z>moaST$xs$3Vjrm3+>mJnL8Xe4&JNtYE@HFXr+u1XR>JVNFYCl)G=V`7`U54g3ElP zP}i3%v68hmuSN~hUPWE4xNBIoVOpIN;CZ^3dbP(NV8ovf_%anfNRJxh)!MWnEd)Q0 z${)?lzXtm+O@NIRlPJeb|KBdEkBy$t${+Q+fMk}QCY~!OBxlk3O*9T3XIR~-AwVAW?jgK< z3YJ?50xUc6bR?=m_vUmx1E`keY$B`7C^zJ5Y{g`3&L4y3MmlhQ;CKQX zwb1P3WNujq8UvSDVtzP=*|3#2SKSb79DCZhJij-cioR&Oo$fa;|2=&ElnQMjI*Y}~ z1M~g^Ar7fzbeAPG|0Saw2{$TDhOYHk@B^KATg#VM$eVfFL6)1sD)Xt9Su)Xjuj<^O zRy!y9u1Yjs<1ni;?;PWE6q)4=A%}Ec?=;j|@Y3A{9%|fa>OKpM@~3euofv*=Aa;0u zflEV}FC?0(Qz@LM=h0DIRsfR~=BSEfvCong?`YU)pZJ z2@3Q!dY!#aj3B;s-8`++(4ylP#; zFM_4+WGNaRe-CrEbxX(0H+|GP^qHt`*i8x5LEDTDAENV%40fZ@Fal=%RrVP#3)HVWlO23XmGym6=i5*_sVjjE|bvp~jV?#FF1_v>ad^EXGB zWCgWH-BxbkBXE4HHZGQ#@|C&xj5f(WK6Z)T*HWl7>k*Ne{0z>R3PwyoPkQ^l`va@J zX%`4w*x)Z)W@Dj3_`T$sHa%NxPG9h0<|_>Rmg+FUNjNls7#;>!r@{I&#OW7kI8`=t z#h01%QNhFyf>bT6#H*}N= zl~cb|JU;z*7Q7HgOutGaL1u$S*i}o7Xo8>qB7~12biCN?Oa&ArGwugWm%b9mMxOdWo?xY^*FuFG4DJtrqHgBgU=_O4dH)sLzpa?F= zqaNfDL2r<-_7nVGNW|*I*Uuch{+rmrISc3h`SEtZ2a|O))>d}SqL&?a?iGPxNBdyO zlV8yyRoE=p)Ong1q!*!r@)9dh2-n?!g|UQ!iP#Ps!eB-yj2puYQ0rkeDtqI@(2N^_ zPE5@GO`t(46Vd%7?yUBmUOMBBaPVgQ*_UR=FUw*ke)wn7uhqNopaPKv`q#r%q9C=h z;D^-MZuhsDzukbxGxLj?(r0u+h%sOq<3Z6%G_9#oG@nVk&(-lhpiewC{R_Io?6uA> zdcC>i8+qE(TOhSed}Z5gps%W^>;33!DtsEDJBsHviZ--6)`;D<5F10`{4iM84?gQd zK2(&z5VR38mBq>M91cE@0B9Vj8QKPtR)2BhFo9do#M_wb0x$-&Hq0jeevZ#K1^7gh zCjQ-WV#k1E#ODf_IxzxnG$w5}9nHT+Ap+cEnqfycNL~b((I{@B%+u@}t@%5Jn>Ygz zbQ7-=UWT0Cj`Z^ZP+8^#5lv@C3~dyRG5U9EU}p{@*iu5KFh@I-$q43UDLU0vK75_{ zJc@JnWa-a%8&0)h-Cw)?Q_bfTk~W>&?qN^dAN}|!A@~0KOPNob9qM*ccb{UGpC&Gs z#n09|t}@JUrA=_E3PA;5nDc2+be#^XWIS?A+qMF}E7HS#B^v4=6C`O_#L zuVW6bj84z>3en}oFwq-vt44e+_&uS7@wO05p_`5~fB8(>HQMKe@xo6gYaRXRDr1*R z%SSVYX>HoDY@PVKL3Ct$#FRQ>#|2-wJJaIMGYNQb%L07z7mRYUPqa+-oc3^(b26A> zQ{w+*DqlTmH`PyX?ai=})qXyHv{4z{B6O<}&!tYnx2xz&6^#4_k*R@)_ZvjTT7E&7 zsLCk3(rL;?zTOSQjR|0l7m&NI;SWJ#*RTgz9kOPypDYyI>ajQ{X1OAXjJ9fxH>2ln zz*TgCl)heW7}l4u+^z{A4DflIhEleOhkqatwb4hPvhIip;B>mx*wsI|Gm z8Q~8IBy^J1fn0CdbhB!9pnh8Zme=yyLj0NF_w57;d zYAi)PbRm=V38E6wu+YRM#At|%Aoc>hThdu^4n6oewQm_Xyx#=h_H_rm_IQI+w#ZBG zB_SF=P|^BsSGttPd|GF0yH5*W=>6Ze!u6X}2Fh-9AXC`E-^e32@lN3b*(IZ_RNdzElghSJOn)`pE8@vde*PVKNObc@3fj~{2=l1psCz&Ma~Lf0 z-(!m6Xl5RoRa}K8B&4?d6}BpQbqk!_E?LZza}SKgZ2Py@TPpXKU4+Ke!uhA%{5>4N`y%f*g@iom_ z_F5l?tvE+mA(_@t2Uf;dwr9*DYOG$`)TZ~B;47Ow-1Ht3v_pk(8Rj;?cii~&Vbr%t>WUE5K)0C7ru4w;YL@fI-ug^zY96C7Qp{H`_}x=xj% z3P+sG9GVSv-O(3!YqB^k5WB9S9)osg_-#Dn^_ZcCBLz*^K$toN`llxpHzGVUdz}{= zxh>h_v^a=$HfBjUULZUtC~r8-oKT1#bnu1HMkT$-`1D}T&w{l*VEAX|h6&ScJ2#o> zgF1%IjK^MM*8Td4oj9V^ip#GZs+fszNN+2$(VtvB$a9oUuy@S-{vbSVf$_76vU!It z-O@+QL>@HJ>vG<66-@EacV}p+U;~ckO{`(80=o(E90Pu*MST4f%=GCG5A8x)voM|b zg+F-4YTr$y-vzNZFxQ1hq{CJp{KY)EPF!jfKkt@?w3l|Mq)A`!s<*f%iHb#~%+w^f z293g698WYpXHadndJ|2cCgdZ$laI>sF5^lEOq-c=ejtK$5%?78%DH?+_8h60iudV# zvxy;NvPHi7kekE{1<~Ub6qpmAQej<<__nFsj^08n%Y+Sy&maoS=Jg+lmU75Q;kuq= z&6$G>%i+8aM8RclF(kIJ$>D6UwC%5&iFPqW1zEMPt^xyCgQLo}tO+_0}6($_3 zZSv8J&iqg&r34Xvhi=343RqHsd)z>mZJmaislS|HJ-S#vrw2N3$I9E#^ma~bf_&>B zbHxp;ipSZt2~DSw#~Yp~_?4Xvm(?~C&_)h&GIr&57m2hUAATsKuzu4K0$~U`29gnT zu$wO3Z_KK1d=;`pC&m#RF%r41>7Pr%SNu6KNg#8Q{GH|&V0Q10RSCR3Rna!3Uj9g# za1&`)f^HI22ro|voP`Gyv-{5&dU;0QFw^ieNUIRn^pgh|l9g_+B zoPoBP%4cX?mI5XKSoFLZosfwkRorOR8s<@BVc{DjrBX+dH zRd4B;sy5%hY<(Ku-L$j4bf{iB(73URA>NKMG#xaBd?eSH%oJqN{z!ef3Dqv!<)?}* zW%5_W-e|@zo8=SpYk8oDSyfY~qqNOBH_zy^B6RJNoTyf`5d%-a?Ofp%pd!k-uM{kJt+3H)v@F zE&ZhrD{2uJN}-)6O!)q}pb8E4%RI>FuC)NvS@d>t+sb-5Df#`7DN;> z9^0Y$R3;>wq1rmO=NN?4^U07wZ&{95uKFe*ghqFh;?Ak@ytDoLH zl&w&1tQCjXWj#>yy|o2SbdU`UUWJUcxSyW7l1j@d+TWlJ3z(nKA{Mr~!Bq4CmMT-P z>_xNCQN_RCYE%gjA-V!|v*{UOMsXp08P$n!v^*C&uUXokj_HKcOsq!_%j{h}i z!L`&%mVLc8?AgRHn6(Ieo%%KD%0y&lQv7ub+>FQ{0kJB5OgKJJ|92cyD}i3Bw(o}S z+)iYuF@MtSKh-$+2gB>N4F)N2U8ndQ@|_iTNV90+AhZd_F$ZUX%dT)bfgZ@kp5)p5FsUD$9Pp4uyBsl&b-d~Xn+UMnkA6yh2X zCe)3}(_h5HAEFFcyAAF>1^ZSpTPHJO&P+6x@%w%L7XJ2&IoEWLl2 z0Zu4~!ym$_2lvkiHzozq!~|2GdosFvHLxv_S_tl;ArA{SOCDLu%zuUawGPMm`kbI> zt0H)#56!nw5RVmmr!jn~v*G2Rzb>ivI|2XkhOE1BK*DpE{HowIalrK7ifd8KRvc5Q&dQ zM)D}Gn?HMb;w!T<+`{vKL-0M$@2U1r`^6qH_$cHBbhAo0wR!$GEx(tcBe%8aSBcbC zpR~f@kXI%5Vzrm=>wsQQ+J&c*sFB?20~RfCHfE0^;b}M(0kvwRfqr2sp~hm#2Y)Kp zm?*1Q5&OSja*>1Ev%}983vio`y$+ObYiSHK&6{zYhxCIs%nKg9eK>foCI*77>M(Tf zZy}5SpH9be6C3WHN0sjhgQ2LyJ_D<6@Zdj4&)1Xubgp$b;>B{lsgGQp%l^6`@LAxn zgZ3+m1y_47SA2IEA6oNE8nxUo?MSp$H=Iqlw(_m@sBJu;AZE0Td>JrFJ7A;M?{%}Z zO#_F>TcJfcG*;lJD}RY$!&t`>tgCc!AqtBd4DiGo4PLL2M`HbgbBfRmm?r8)1)OV>`SZCwS$`}({QS(b z(KdmjVv4h6S)ZTXi#4n)#B)F3|Ii6y{gUbMo(W@+_5D{Zs#Zx6j`;SE{NEo1qFpUS z`A@iZq?-4qga5Y4lt4EcvyOww-#x&TZs{#F=+qx1n8gN~f)JH=k@D6jtkLc|Lyyp| z>h9lz9y@|w+K+DN0sDnA>(?6j6AkkToi(DP&k)7dXsE}}NWDj2a^C~UUw}p*D|R-? z(IT$VjgT%^J3U&$`RK+bqvI=iQ}j9B41JVYRzwu;re>w%?o(y0w2Q^2`;J>5C5AwT$3qA$r~ptzSVi|BwM*+HAm&BHMv51o~Q$a}9{dOwnlILKG4dsC8*l2OHvx5`KEI z6m=V?F0olL%yv7HkMi258NVsy`Ls^On_i2In!^4nac!k^l_|a?Y-egjMqcM1xvT>5 zdx0np^I-lCSP=%Jg3B2K4Z7HBP;N0M?W1Ast_M(>&dVtvu0~fPo#+-J#&SCAcBYqu zrzg7|+nX(VOCMH<^{Jjko&4>Hkqny$&(FtGt)XYRG4&~pAJtHD4IGS8hk2L*S)5qt zyPz>|^v=lab0fhJber`y!A^(p1k5vLK&$w|h>oD0cp(`!O2rFpj@$J!2)rVQ5F)=X z-R*0bbaO*j+Cl^6caMfw7=zezE4<$iZV!dZ#Gi~#^q+=GGRh$ukeph77ms#%5QK){ z+l(sUuDm4skNekBFW8zct8S`g>vw14!RoYpW47Fo5;`JwLgxTWdTctq9_?WldT$T- z=qodOpKks}13n8ZD2FZFMrDDvE!?l5=pf=(uMl=UPfh((}c`D-h8+_1x+~*n0Q84oDuzTu@ z{_~i$K05Ipy%1SY)oZ}LSr4&6PqBh!lfQ+saxVz353x6nJTE;T@Jp`i`9eFFtuOLn zS~lXjGvGQEF>eAr*yxboES+nh>{=j#4zJy9fwD}ZZ*MZ>aXMPOu1}?ev21lZUDtOH z*k$wRfc+z%m_EG@k7#8NS}w^L8EwejDeBo>Ai;&d^PY6@d4`_-bj3o*4PaJ3pwHce zXdq=0OE3?<2p|^qd2YOQo0exA@Uyj|SMfX6qw#ziV#)k4F_QU3)E8Y4?y-uX?cjJnlnj? zqzILznM$&cv`d}PM$(3~Xj-I6nQ573rZaQS{oeEZ-amZ&<8x-5Ip?~s>$_b^rtNjn zEI(nN&v;G-!uVaaZ7^${m?rP!xyhnq$g_(`cMP{FRw|1f^1)}j#pNwr+G@24gkjY;vf7UmW1j9a@xPQTo zYZ9bE;(850&K8EylH+(!jifP!vYeIR|DBSgNu^o5O1~PoO+&oAo)-aY9m8(4r%~oU zMZR+rIM&BH&`i2DAbZ8gkDF5)lGyG`GZFLBfcj4;e?!~-(cD4e znx$gS8{Foy1QbzxPJw&9=zBlN8We1SVvFGjOEj$G;B#XNQ;8>7-F0Crfy1jYV4+y^ zJ@K@j@6p3wBbk#U%y9--19A$N7E3JQ&0XF_>-xs2RH?tsCkxWSv^Jo3?2PiNn<+=m z=8?ls;Ab_lp%Zh923M`IyiSLRVp*gdBy$CI_s4fG6Ai2!@wiWBIe_nCx(Sgr5xhO2 z1y(I4-P_5eBZTjK%7cZiU{?=T+X|)u-B3lrLHe7SMBwWb7;PL$-L$-{DzYp{^-X^Q zbv||8z%~bLo>ViMoSQ;>Qi&D(aBUIr&-7wEaYxV9Fvx{2a&XR+=$lyf z*KwRPTMP|At?)74@L(|-_Q`DB(Jd*Zndz5G^@HTV}G5U^2)p@Wbr`z94gXdkPBmuY%_r3eq{ztCRw ziIQVjK1*XcBRZFErz&m>M%x9v{9#@anPd;%Mq+m*tf156&SfwH0fn8*;9rhOKZLuX zX$~f;Y+WB3(6j~moK@A9!^K4j)$AC<`8U)$_L_LbS@|FvP#0}Wb+K_ z5+jw#7O(DWL>>KPe}3<;8i6ss;2^neSvun0!(q0?LnD#Cm>D=!BkE+D5)3WnHbNos z*^p8>RF~i)bE^7N_gR9v!*pinZzNNfOE60Ra#VUS81NQmWToN>Gg}^04U)@(H0ZlZ z^lr82UPS}X$8fkUt{o%pvE*Gd@IIS%#|u0ZGed+)cSzeS-$|bU(oOhMQYhEhP>IciSDv zVceA8&cHl-5Dw{b9LY~ZOW+$Kr5%Ehtbms~q<2A%ttM<m-T`O$Grid;@NE0QDtF+1`N^X`0YJNLKI{VIJX9g zV2*t67O<;}cD)vHpp(*i5^V#Q9us_n&m)|#e>t${#vu4P4fIX}P#T{1lyZo5Y1Ef3 zKM%S7gimEbfreA^RiY~D@J02^Y9iAfl~!U&KjJH@nXCKx1D{Z9+%ksLEEtC#e&mq^B(8-+{~`*+k~gWdH>oBEIczrNep9=D z%RXo3`R-8DZuc4@kc*L(*g~9dMI)Y>Dr)1%If~tv|5KnmpuEZl{%TyP4#|aDR`Y5J znop_rWh){nAIo2{X!HFS=NKZptFyGESzM4l7nj#6CLaQ7N(Tk)*W#-0!aVuF9miHG#ySD+> zbu{m|+_DXhxk6$bY*X`GvYYZaRVCM-GM+=hbZ$B6#9)Uiu*mK8^!kzJ%cM#Qt?P%L zsG7cjusx+{&lD1xD`d}>;*83nc-YM~_0k`L=(R$xJaBv!xi>)Ghov)tQG&neiv<^h5y4H{c{G`o&nSU6ec-7#!7cp2JD25qmiFq>Q&NmJWA~#{l zLE2F{(10`YIoLhzqRO21tH1)FQDlD5DBxCvmEEiNd+fsu+l?bxwnDv`M1?i-eYDhz ziw-k+6nhsbW5F7X>vsh7ahlH+yN|?sj_A{Xk zzV~^P*`G}7`6^4%msGRmruL>pZQ+)B-T;v{&GNW>mCRpA$z&kV#h`3mEY z#iU&~c`Xh-oJ||u&G=WqIMoZHD8CvJ*h^h3;auFLr-HRn$gq+|Aov2=HVA~qd;_m}K213}p|zL*h9-e|xs zE3p)C(~5{+T93KOygwZsMt=`7%by_x9hmr(C@YRq7c`gizy*1+p_yV~)R`FZuN7q= zv@+aZm^3JTwh@&mt0D*e71C%-*m9B81oN^3SQ3dHYCv6-Pw}XL0mltbDcI6SyqtPn z0>JWI;H%at(yBs7)$KDi_TQz9-)BG6`x--?&oK}mj^U``w{sQh^_(+5+;{eHe1A1x zCqwMPWf&eL^LRR>H};d!*1|v2+`@24!rtZrxd(H=7Zg;rlECA*96TR^>sagxi!>4t zt%SR5KaiE4tFxyrdeUZ%cQv}l$Y3Zo&SA4}MR98%6iaCoEHizdc zHk8UB>BA3b1B+q2=LR`aIn19e2H+;|r~%dUg05${{?HkfBjMa4v&oD6PPo65UMhF} zF=*RM{?eQ&pq(46vLZaB8>G_hyU*j4643YoB(6z+R3K_Q&~6Sk>g zR)rEIA8pJ7b1wDW{Y<_+r9qi!nV=jF7iQq7CxPG$TcYP%A*Jc6eb zOR7dYc{~Bq)I!IHTm^r@wHn6X+I~);6myWHKS~HR%T12F>|rcB1^$6jM_uzeb%SK~ zHJwW*)zhY`is^4|&5{P^Dl!|8?n;bbkJY3x(2q20yxCe-Q#yvJb9gzdY}#Hiri*7yQ+Qn=onDVyejaj7fcYIY3@Fd`WCH%a780AeO%CYpxa*((pBRu8 zt_&UgL%C$C&(@yyiDI0yS)>uhux+)+)=8D`S0niZ@~NsYD+GG3oLs=?2J~_XXP!2Q zfo6*DBok}C2CZ*!A&`Q8~ zN-hry#+YL7&x%!*tVPgxEM|mt=}jTr8<44Z7DK*U_B*Lgfc?&4yo?2Tu(YW|OvznI z7Zi&adXES+F`Hn{rvT$7cnZO^C&ircRmjt`6ct_b`-Uf1P^X$Kl~R%Ahc?c9xv;zf zrELuCEHxA71fh=w%p2o3n2L#)$S0GCH}znufX@^|i+a{^nfF2t*)kQF)sc34m&u=H z5J>&Gs;30=tsH|bEC#-n#Kf^CHBBz<3@>O1}Xecg-` z3y%uD{l={}qs5N%Cr(D@`!_BadsROOc?aS28!yj3H!oXT1&{*L**-WZ=nG~kbpt9go zJ?h)fUyoyZ9Kv?sdV!+8XLc<^@thX^RVdEJs{Zp!-Kt^ufNl8zxNemrPmB-88&ZA9 z>=z!Yxyh8F3C;KszY!*0%peX67{Mc& zkyuAMxN{FJJc(MKKZ&L+L4Ex}-w|@cYXVjMi-yAGaNqE%tlFsDy20Z!brZt$&8?}v zCgz5bY;mW;-AV`F_<&WSG-(PCqvJ;zA1kq{8w^9dZZi<{^ZTG%zJ!wsvp!CuQ*r@q zR~`tZb$mVpLZyHA$iI3P1pBfKSK zQ4;H5Bkaen!?8UUq?|;fmY@cCK(kHwTS?h6O5tPk5nE2mj?Jf>>Y?_@ZU$VV8=2px zhU%!llYbyA>S?Q_p&QWRt&FPA@%2&kCr})L1mVqv(ww?f^7I#0U^@|>es0V=pOV~w z9;FJ-WcvdU?>p}LPJ+Piz6hr)U$@^?mq}TEjw0}E<$LP+BdSY$H&?1XJi%t~euwKk z=iiqRj+lK7!vI?vP%j zK~(8UW&w)yE&OJNk?b`-qd8@YgDVlciOxRRVr^ z7ra~L?-=i3*S!+R4k>6Ay*%hMROA7$QO@WZ=C!uopGoxek$<8n`u-HJCDr$|&)=l3 zo)_~hsPv(*+*OO%sC@E+zX<5Y(q_J_*+|~?2u!Bxb3t=<1L_%ythkKM<`A`0D3Wg+ z*lY$W2K@div9tkC;&=%~@SVc3NU&12yv0F+^Uk!D_cb zmc#+o8F8Tdo^mhEV!T*NZtCZR{&h_os?&$E-~(bLc_<#Q0JCy|(;87ouhPMc{el=N zYj6n&#C@@Trxno})0ZiYf|F-&+Kun=RDT+KXKY3c#}J|9OJ;h@rjr zoLFQxwrvZz0d0HN$f~#F(PxJ-{x{CXBn%qK8^4p5uHd*lEA+w4)A0J^OM8yrJD@su zJNF>Vt89n1vp{3|EzvdkrZmpW7SUIcYaeT&m@{QFn)F%EzX!Tan(Fz1Ezlqi6>Rfq zL^OobSIaAkWt^iD_qIQEUDp-gI6fe&0o_`OCOWfvwH5B_o)+>skO4`isr_;(`>c8B zmbu${&)(2o?OD;R_xJS}H5ipRd=Snj^qb>1;)wa$guGRD;AIEaD8RCY^iHC2?x-om z?bg4IkRYv~=-Ypw{1*MUotFRZHsUr>w2cyOQ}yi3J9UgvgRNZmi}F%OyCWW?P(Z&w z-gS7)Xyc$0I#T5%V!$RjPz+WKe+LUNvFP|P8k2+h!mx(amGXfM0yX-JX2M$!Ri|r> z*@`kgYYG`~gNL8ZW5(DdX+Y z#Wh_(o`4reCaMs{n}GcNRWj+kBx!KO9ZINA{RIHN{x0zKkH}x!r!wT5F`M$OkxL!1 z=-jGt|Cad~TXXgB_2tY;;`w59=~m3T5-dL5D@BOa9JEA0O`cwRrCdbjL8)1=cdGUjThe~l{f zr;xMm?}pYfDVvl}Fa?{%{K>@adela2*-r%16vt?a2R-p*UEyg0yGBMs!F?7ggp6%3 z&qkTHee#SP0yQH2T3GXW5F7sbYl{^AcYYpxJ_W+q=F1~8Vl}A}TWYVh+d^9|xVm5# zi{9>fTQb}}hIkC|o(|J$t9g%p>D9fXyZECU`x)-CtQyFv`AM2jjb$BHGAY8uP&76V zv_VV#TlfL(1LS{{UD#fV&kDB0!M zf4nMS7-Uj%ql@tzY%lyz_{%}y)>eRSg|dUSHa&1w|M%6o;g&@i)a+#Yh1QQ|Sri`9 z6K-?Frb%t`p!$pOeqJ+^P`5!Ijg~@utsYu~j91HgbHz=goy_0g(b5u5OBd&8ek}qe zKZ9MI!D389O#3iMZv}z*AaTv1FaWu1TT{D-tC!mkI@qt9aYCf}N@ZESZB_VYL0>29 zI+gKs%xa(gKnT zc;A!aiuf?FCsC5JID;By5%8;4E$9|(_$T1`g_!+_i)}RPEL=H-2V0UU#}F=HE1M|# zZZX47F}g=EnDn|BJNFmB@J&|}rIaE*AKv}CpS|#!ufej>(Y0bt>I& z3_nxLvKCr8K_Ly&@Q_z_$2H;tLo^5LY6Q+E0>(NVG5JT#ht{85g5wPIuGW&D4v~&> z24p_WDJan+KHs;CVkooQpSnhzMm@5<^Rb^ws+T!Kdr^5=@!~z;+@%25cM!Fs^9P|* zQA5m`dR-3L{(mZ2Zt)1V%L@vAjyEs;Z0ygnqi`Lq?Rfte#SN$p=ko~#!pk4O3d zOMa7@oDOpwPcMN7cz*-?W(qsPQ2$ND`=AYBOTJ5g40^}m^F7m2ltMW&?hWVrbKFPb(K|9Oz9*)Yh1w4!U01br4L2e4r_+V?*( zi0^Uo)ky!^-j`Hk3(wlwsoOj6cZkQ?*;D2xsm(6+)+A<^*Xa^r9^uuI0qKo5s5@m9UcnNlP9107(?zb270VRxoz)zntQFnfX_E&k?nuUYAR0z95z6p`^pn)@6D7r|VgH#LR zKN7u0T6b>9e~}wr5KsE+fm`sP5oLJzKnuBOe+|d1l5!e?^Q+4gM=rQ`=Od+eTFQ#@9MTF+U4>KMPNFS6|T;Du7nPd-Gf=H zh^*)G+=sx+7x!K(%VhqImkO}K-yE1l0ihWr8NIKu|{i*?2 z`~{Y?qR=39^H>t@*beZn>_+eWmt_O17~j2DCm@m%cF1>RD@`0}e_2PiGGfm>_O#^J zr3>4WqFEL~F1XeQ(;dphazj=F!S+!jUf5=!d_q;97EViG$( zgIv%^0+^J8w*glXxz~$aLtS;`-cQEe?VlV~t7&Shw%eEJ{MzrZc;wDik&8a#?pU}3 z;{G+-ucS`&66L1Q9%R#8#Xv(W;*f+6>9-cQVoA2ubc40;b1(;G+2OzZpGwlzY;-Tx zEt7iFf@?nK#3}Wb)Xq&)o}x_`Pl(vEj{R7`b54{z@mLq@H5c36%$P>R+LAf+umj7L zr+S4GtG6Gke+@kU^J15E@?iSHr4mk(O6LLv)cn)>Pxbp1J@SVI8U7RGNrU%k7q!ls z@5f$H+B&b7dd<$^MO=>6pAEMqPkhI>og)@oBfsLn zj7@Q9O%&3YReG_ONUTToAF?RTrCJ~6-t$tERwAJo=V`C#jwEm+ih06`9`o68sIyio>%zdt8~a`x%nZZ z79wKA7?YfJm-y=!ctAl5kptM;wta*C z3Jc{?yU&WUG~)fyS)D;9F$@)apa{KuAA;i8@peA*x08ir&e`6AQ)1Wr5yoZmrzUC% ze_LD+9D-}dd%HMrRq5=zO0%6hVF?3vek#S#cPFqH>dv=YzNpOaJdHA}Sw{2;ki$^B zQ!rd-1~L2SJV{mfP%~2u_bdJLv`sOmk)-`8gsfz2E!he|j}vbdP;3EBxBrQ&cSvm1 z%C5tcSaA0Vf+!*GTMBI&g%5UaS&zGEODN z3h~`L<$zZWDKH)}svzIx9-7e_1%KoK7LIB8F=XVy1>FX1|Pv=|?%I}K6dO66n_YRFF2Y=)}%^JmXt$&`R~T7~!6K_*)Y zREE~*3bS&^`&G;WeQA?ZxFSR;oCvOBCBIZm)gz48kL~>zch8YHg^Q8(ibNN%>@xat z=TAa6RM|rOab|6VR~`NB*sCfZOl;ev>f=&&H~L~i#3HN0`R1&KN96s>%*^@X#9(Ao zYn3{&*Nb(+6p+V|d6{T-Fy<`apB`%7CPpp~#lz5lODkvu9pptT@g(DCP|3B2DtnWc z9CpfmpgVG%Kr_PLi~D$5`D4wB`RIO#(Z0URrfb>vUui65|T*P|u^gnJvP zL}KF&z=7WY+H)AS0>&D}ZaT%q7{IK;eM^-@FU;O~Gl$}?-r3jjDT<=y!~RkD>V~$@ zod}i7OS9VbCnS^{E0szp2^ zUzdw+e*C47GnKFcTSgv+tJU+DjT-Ig;h%5L>aV6RBV3akL9AgTxTa57O;^-jCy|C% z(k53~-@CDTk+MBcAroP&0(660%D>f(oYEa4&F#rWo(olnamvEmvi0_eo^*GfV!R%$ zGr~pt)4;hcai}B;@#{xZW5_-TiFx%~@;jO4aN#l4#~lhFAFqadCiIv$_~X1XnxKl2&O;zZatM#H?~OE&0l4YHCsy6 zN6TtiE{owgJlXYX$*JnsPEcIc96Di6X(0p6-L_gDqin&1JGZ4xNLCKzGbT(5x~Mbxa34kK{|z%*e#Gw-@Qn#? zn6t<6{HrJLq+1bHhUA4ZL-NWQr64>P2B58UqU?}1PnclupsQ~~h1;vs)bh?y9?{Ei zn>YIzuUlMOMOmA`BW0R-+H%s?yK=0Ywd$qfE?uD=MMh65!nec?r%_pJA%}vZ$ zsu*25IOICo!bh@k8v&eUVS4tcTIYFhFgO~DsH6qKqkjUE>w|Gfo z_Z-mq?eqkR_GDuGIC4A{4hrZj-1fjY6BFB9d&hv8=ZA3P37|dnU(wx*6@aQthUA~o z6g2EhrR-T5vE%UDpTRzme4me+n1{e1(WCP;g^^U^_X}Fgk@~ zj4Y97rGspJcm%oQdcFfNjD;hVH}`OqbzPIN{1yxjs{XMxX7}W^KxbbQCC@_tu}**> z;^rEig1d^`rI+Qr-}0>o$vy47sf3pevSYLqS}ZFz0INM|sF<8{P@b_G7fA=*n~D`XwoLa}3hhWWe&+SB*n&d^T&#OA+poBt(XTHp$Bp|h7Y!a^?8 zATTs1XPDMnt<-T}as^+uA%C06LLJh%U9l@ynlo_2Ugj-Wq!^v6fZ1ru3T@Op_^i}X zW$1KhzqGI5vBv%ywmgS&MMo`5?Q!>$nQ7fJCP#kinzVmSS<;>k;&z zCXqA`uL}^{J{@v>*TR4XnBA28M@|#9%lhB7-gXrmrm!FAlxf!Y^l6Q|1!CK4_~AU% zKuq5OHVd%RQRMYF@DEPQyiRDvDK3)p`cZ3Uf0pzezi}gojYiM(YXQ$O?<)f2iL1X& z1$-7PdovzvS1oj5yFq2q&hO*W*<)tLE5&_5SU_u*XEU0lOH4VzQn^k{rj4r;yPF`S z?ED_lgL3=7Ax1cA8ZNVZ*}~U?wA$k3FDcG&hw~=;6qnNFM#+18RDM}|{#EsLrdSO% zwkBDUgO^-m+Oeui;=6#JIG*jJ*j*>T?p)3~HI*!!fvXcqm&w@8fUa&HMb@cvUG~cQ zo>H#;(;@O(a99?7N_j*@|0zX@g?(8tTDtXAr4uV(Lo1o`H;0{}Qz)Z!Ot|DBFO5M| z@hL%Ah&btrJoW@@kr`Nc3{iJtxqJ^_GQ~p%T^VV>U=kj3g$%i~S}{7`HR= zF+`k(UiJd&uyblb5CZ$14i=ol>A8|BrkKA>(X$0i@8UqH%J~CQ;HU+IKSld&;1+8y zt+JNcTxlp=XID0frq*q4%uKb@T5*^`5ARBW;bpSqbBkH605e1Inib^u29RDu z8f)(eU%&vJ=WIeM4E}>EZhn?g~&qidu=2-qFiUa9k-nXJe9vo^A!67DsBhVZiTIM z{p!#5Hmbf8p%b*Go>5Mj zr~ho$^vCoI0_hjR9+p}-<7H)FhX$*d0>t}QQZgAmB0%eJk=`y@tT|lJ9*bRNvI1#D zo;J8YgIK&truhuX%ZHd~VaMc=9QZDr&X?Gfrf4VlmZiSXD6FPj(R;k>;>FgoEaN~Mr%PF}&f~oot=)eXY`!mx<3fHSZWrmm#j1`n9$jGc{fPGw zAS-d{T?Lh}iY4#OAihl}8v>=q&yWi+)$7N8W%qq(+^z0AWs^nceAPX6Zsil~yGEWf zrb{CuSqFu-a06pIO&`~6m3g;{X^V(H3smD67ks`AIyBMSP9RvF4cp2ev7omVBold0 z;$uZH-a_nS)oYWwOH~c>uR5J+_Nxbi^-)!ERTZ&kG1$_8#8jdVI6A9vkgrGFgE2|{ z2s@Lr57Ji|z_5#>;)LpcKt^K0xHlTfAWUK?idK(h5dS5J3cVECc%uc^K_mGVH)cwi zuJwHW-LcgH3?1C1h$awCmnNN2gu?nVeY|(|STBdXmxdbPoPC>s&>y{f39S}zf(FnW z0alfPt$B}tZ-(%u^5UIYT1{Gr6Xp6o?;wQqwN$&B%ud#sETvk^TY5IqM`u=_?Utdj zuPQ`W5LmLawTgygUYpTJm8c+_17D;E0-#&*h12}0pL4d~`#?JAh$kD*D1WYf=*s_3 zOz{mrQ*cqm=$xs3f_D8UHrsIjz`MO3o@X`gF${-|qYD619C2sS|1X`6?DiU)kzj;U{feF}}6)5^JrH@6}1ZPRAf_ zy0?dOg*4ve1e@3s;<^$^7945Ln<;KR^?hh$}{crw<5aj>>sNcoPS?>-I>_YqL{YDRvsCH&) zrv$wj$yhEHt$=HH$jl6|FBI{38j8S82VoN1`P3~e>j!F`Cr(QS=O{*YBmWqA-lm@3 z=XPkO>BjCqG?Bkbh^UZfg1;!@=n=dibh3a~GR&MTUr^f5`TfPX_l@fW9G#*?#FsmP zE+=3WiZE9-p<9(%Y&GBD5>z-cmX_=RS9UytXpWnk#)+`9E!wyCJA`pXG4dtlA}!)v zElbocY8(l%N3*sviq|7vFexXR+_n)oOjk6nm)$EK<0q2~BrHim$9Ed(n*p7k%3-7_ z@7&2s_|?Te#VwkO;#bhTr?Ef0?EQpJjfw^Q2V+04@MqvfMOfz&wCfHw2Oq5>&f3CN z?Eun{R)qWrzQ9h_<_y&)TV+|PByU2QTh)33vWJ&YNJKD@kffh#or5z2@V=4+?XNXu znsjUPPSx-G^iwQz%N(gbR7xnf0V>OnWdN`-r^fnAS-6S=)IfASE$k<7w zh5>=`U0z8O7b}7%c5z1XL9z82iZQg^-|l}~M~0+sXWMHW3bWs?T|H*sIK7&6bP;3w z)b6B9EGKwr6k1GH;qf*Zh)WOpjoHJId`bHDo^vsp)dMAVR$!}uF;Giy6M)*}l|Ya} zgkNf5^qGc#-)v6d*#4fFVQ-*oZbNPLrp_^`?@=AOTy|`RBg14#dtW50w_UX2Z_k?k zfoW2`*TZ!txO=Y9NX&EuMca@PhT?@01xh2YmT=&Lyb%FRZW(24Rc@+UO<3kB&Rv3m zFT$6Tt5hEOBq(y&H*_A3vu9epGP?3;4IJ#h5d+Oz6vt}eD^qu7T)qi(A4UhJa2(^% zM;G|oe}2R_-ryTHz`2RHnvk3QcYGRY1^d zI^?6Wovxbete-ord;(rnhz-0+{A7sl4a7og7_Q9>^U=gxHn>$h;iGKEG;<`;Fa}|Z z7>p-sZiYEP${+O5$E0DgPpl(lheYp=#fuqbC$^Z+HCZ|qG25A9n~pdB?&?%25{Ka8iad%l?% zQ{9fKtgs%6$k-lU_I1MS?~&`th2j!(nTdWBYmN|}?)=p7zG|Yhp3nFl4R82l`IShe zE?q+mE+r_}FfdModz*mjM4+f*$~1GZJu6l>x>!&c1yd8_!wfZj{8VzOvo@G?j!^yQ zy_%{z@5`&cJe|__C-`1j=k=yYvmB7c(weOB>8i;0#M196G+`xhc8f!sqmcXoyP6%K zHi>0-){F#a<@}9$P_FfTkZw5Ez$P~z2JZz( zIU>w*LQ@K{idVe;>nJA#@b1Fa z>zJh3y+p{`zDW6w+2~y;o!G1ffAktTd*KGH2cq#9*bLtez}ndKdOrMF8^6eJR)LmCmp|MIRlSRnn0*-Q{*g%I)x+sd}(8yJ(Cru90i6=2oZM;-gbyWx)jT3 zFs*i=sZ}SNqL`_A-hHF0Y`eYeKv{+6#oZU@`zJ-ndeb=Zaw1=`VI!Kp9@!p;;ujd# zf5a!B@~>PA14Z}yGE*{$zLGiHCt{0LbQ9~Bkr&c|xr z`zTBFu8f5USV84nhLyDVl;oiknpO!y4_`t5{LtH}jFSp(K(v%dDjzy7cJhb?YhTvEY<~uyMoJl2w?HnqR znr?S}G3qRKPaV%L8Jag!esmI%6h)5BMaz{LCCoEo?7=Ktlq)q->Un>EZImsIg-sWu zb~0s(Mdx9SEw?(K&SZ~#T)rst`y8& zh4)<{3$!)^;B7>>he&F+Q1r>8PhckPRJhVF^!MRqn)B7B8~-zVk?OInv+S&V&actx z);-$%!l(4uA^riRo|i0N&}28Wf%AA6Ts>EXc=T|rVBUb9<@kq^5x%^WnJoZ`nlKJJ z;1aq46K_&i;9(MIcFB;HZfy>amtjfTD@Qu~9Um`aCWNMYT%z*O6*>^iexV~)7%u6@3a>|fYkUG#AtTHCFQw>a7vwliRBU#$p$ zXXhaPbs7#s#Y3iKp|}0f`5NegGc4%3%*;YtOE|UhiNq@GoB5*n#miS0DVORcy+Y{ zy&&Mv#*y}h*{fu+N_qu`G}a_ugV6ZfoZHt`E}MFuRB=9G&q`foy|-R67N|WOY!7x& z1ER1ebJidT%;{4qDE|Lnaaf)kL$Dyr;!RaA|?0O88r;owzYb zygiUiZktJ7$s~ZR6>*KvU!~r80!6zBk!v{9!rVf2Q<(XxdG>$bWZNwk8Z#vWoh;0k zHdS1(YOn$d-+dJ}6|7tFia!s5V+n}J+V>X*dxdz&GmZ^O9X{0ZvO+$z%1xYQnz6vd zs=<9ua)ALmF|XzFZ`u>>$9E#Sow+O5s(rWh3b*K{|L6~4vo;G0W(?_O4!F*c8bj&S z^YNs3Vxu$ozy%Zm2F-9x<*BAm8qB1;GGcRzYv3|BC)NE*6T~)o49Cq zH^+R%PL4%8(@>l=h(n8ReH@Bqb1qIq?ZKvIa!V6d-AcQ9j{$d|84yk~%R{(rF~xH+ z<+eX%O8zugI(%ieX>1Rtte(wq38%IjUt)EzkfRV=schE6JzmKEu}81(MgAEr)es|( zPjtoa!0ES?z}4(N){K4Rz+rjfTA4@D_}Rs!0wj}i3nJgClw7_d{+&9-7`C#hpC(i6 zjFv{u)wPC>yLrpif(nyPgwN@2ZXPuLZ*Uk);bwSulj4BXXXUs_vTM^w_^ve=dgy% zeZcY)WOcJ%=DO||&=ba&IiR)KoK67-H|W}~m4+^$9O=i7Ks(ANz?)z%`f%^!|L*kB zC*Q6ZJE{b{!QQN1e?~wVw{QzG(btcZed>{Jc~#4(B5tmxISDN{f`5c{4(I@p+AZLf z4)biqa8uPBuS}E&L#j2Pe+ESd{+<`WrHij2VfequdQ16Q?Wnnv++KLPaG&T2_FQZ< zy_m`?S~YCrfNoJ{nm;Wj9afTyk0X*a^u`Uw1)P3U4nvb}Zv(X&%1jr(p#m+UFA9ZB zUWzX1ybT!XH1tKx#T|A%iN8oRWsFb{LQ#I%T9o{ ziD_l?8~CLI%w_#G55|`r9P237ehrm_OtFS6*}`$FG^ZuS?Fx;ikG&xJ_$X z*usSre#o7bFJE1R@bRsPRktX;G4hAybrXojcG?nr+e$JCZXm3hXiF01tbZDSW<4g% zty$!`*f98Ha1HZQeb?d_GSesqgk$?o-qk>L&DBB=$qGTPQ(C&f5KC+@1nw>yq&+R?9oz zsonQtS7>^wr}fya7_PC$G=(88{adYj%*^l{TXISTYnmu*>kGNgnLkNz5z=#F=lS6z z8|9HC!1n9r@$-(Kx1_E*aL=Vr6|v|X_Tq94%O-q!hnuGHFUean?B@E?l9n<2#Rai) zx>*Jm2;FNP%_}5xkdbFmWU)QCB^LE|!$eKEyQ=Q^-YyQNPiFI?8XWXghWybL84iUv z9L?^%tEQwFPM)k<7(o#Pzb>6SjJe3OKIr1}((O_k_%8<--IeJ1G}KE>J1`O*MOJ8_ zYp*^h9AvNqP55)-Y%9c(Zx6Yos{Sg`UX@Z-XkhbX1cs!zt=te05gORe@xg=NYY?A` zIP3o=+VxBnOWS37b0Ie;bp@pwC{!abbVxgO0_HT-lg7_1Lr8Dkp_eep^1{GZCfabGZd`f$(ky(F~X?g#7kk-@CGafhFomt@96Lj_uYd|VJ!%Ztk7^PFzkE)4j=E~Pe4+t-e9QWG>dfbZppkNaI%Yrh?zxV8#qz4E`z6>E9B~aRkcNRXsdOO;_W!|U#<=H zn|0YEHGNgzPsUY5K@oE2%SV!3gt$QmMR(KbAI*A1qAmF?ij2Lc@Oy|xcAyU^^-Wma zZBXQouJM2?ZZ5==1y(W8FK1)|N4F7SkvDY}QFtI;<(EZ*rK%0-#pc6#c{!JUU2dAj zNs#ApK`0a)no5&k25_xBsGPNDiDKERu_<;$bgp<5*4!k2w0oMOq63oa{(suOUt~h` zk)IOYd`;)qcJ@IHm0cGFy6^fY&YpyCx&pDRv0!jFxCWUnE-;adCCakm2{9y7ea(M9ZMAS)(r4?Q(Uzg2tHW{+iX!%k$ zS5LIX{D`fA42Aa!^wnw$_FJ`Q7- zvS}~G{3!-RNI*SSmC1STk1BM?ZUJ4u8KNwO!o)+V)&>+4lcBLyole?sY3qDeQGd`WH;}ha-lEKCUW#J#M$l2-6j7ejyY#rSG_y zs1hULD)D;cT{Z9H8&?P1yM_qOfQX%W2DtG>4j&5PCmpg8w#v6M;N=}(!nEP5YTTPD zcV{v<(_c)!q5W$8#A&ZgbM(q|#k)!kyN!J$kS=%lgqVxbEPbNa6hL|kR}#-1`$)@g zqn(%gJDFKY0^pJ@K;9z;jcC;i*qDX#$tw4YCgUpaCPvs< z4#&3{V6()by{wy$dhq7 z&(=DDK)%9JW?9(EL7}1qs=XJgjo#D#e(zJ+p8eLI8ER$=Z<(7PO_0aI<6z!!tOK@4 zT3n!rYqI-t7$hkK@s-#K0lx`~s<2grUjEO;D+sf{gc_lFC!?7KgT7V3eex-Ckf>Beq}2IMd&ExGE0;aaOn}Pz0&nm5|!q z_k?nPrs)3J>7!fIi?m;TWOMZr4p4PwnGLUY;83J9V$jccRjN8Z7J$AIh-^kbe3eP{ z<-;~31Lyuct2x<%-Tf7>OH6#J;CbLr!v5-|LlEMsb7?UAukWS!Cjlw9LlcuwfORlX$y+&m_>J*}u)@Lxo?;+o>lWwLEg0~oc` zTXcuDIc(V79Ong!yi?vITjT8f=airQ7v_7F_(YmI)~P%>@%w}3j~8WI%zOsA=|ZV( zwHm&$T%<-EnnlwVO7+FY8_^jlw2ZxoI1YWSOwz3S%A1M9ge7l1riPvD+4%uf#|ec? zh##Z`ep7K zl=ah$<+Ilw>VX@}&k5W=6GC4a{VhSOm5EHQoUh{wtQKB2m??wOd+|97n; z?j(kbX6}QdhVWUK=ubPsSVOs?9aFAiRG>YwL02K^IJ6)u{7TN$A)xWk%yNNyA)25;69$3@=Pi|hGKujq^(&N9hv zSckVN$%#|}T9}jhtoKb{CZ`~-pV89EoD45~8NIn?f3ntQWo=mbX!E^emmX?A_ey3b z=uDgMP&#va#EAAdv{F^Xa2EVZtRPZ7$em}23pU8~XDr8fV#^Z6(beL%Yh+vGL-chd zW13=duoyWBVSa_-<4I6TA&KAjD5%A8pN3e*E}2&TNBh)%x)#1tDYwdRcbzuody%C7 ztOrpwCtZ!jQkpcYMj`N1Xqw0kJftQ}5mx_>o+pkMKrRYa%{&-sx_bVDol5d;TEpf$ z+OMkZQ}tv!RZN$0vty2(9X3ADy!RrXZqrT69PjV-k>mtp{x$qLIDPVIgT@0fx96@^Bz_(KvhkYs=AIr4AWp20EZFI$bv8!TMurlW9 zL^H=m=o(GF6pJ#3MK)rQR|^!Z^mZoEap^jld|Cq-@;~~|QV3c9WRzUGrpMcGC*qi^ z+R^>gEAHho`RfzJ&Tg8`8G&UVJec%U@zHZcR6WC~n{&Lw{jh-V_siXcXih`s5y;6* zv>}qgY9_Th6pm0Zh7ZvA`BUFdh7IR~mXK#6#)JPO>Be~3&w?tHuYDhwoO7cpK zrCvofBqVAo71}6CS>{?Qv}r?9W~8DO+1E?9LKzZe8@mx^EW^y)nS1Yd=KcOR*Ik}- z&a?a$H|49qI9x;Xn(Lj&oan6sm;u`IXd^c$5RPbXxKyNK%b>lPAnzP+>f-Z~_?gTF zd+S*xM1ze2+ma2A_-ReiZZ5o!i^I5i&!vQfmOnC}>m~}2$TF_>m9QXgJ|r0zwRB|S zBx=Nf8|Bb^r=2M!Oe+=#AOSzK$Vr0hrv0QDqSGY6C((|45^gM>gzsaPS6TsQr#}Nv zUkIxo1EJlS!!!Nye}`8*K*ii{Id~m4uT?Y_ zUUuUtpvx`b~$Qod9JN5dR7Zx(P1h z5rlu{l6nS4dQ7U@$ZqDaDw^;HfW1F|DY*f1AGc_Fp=FJN_Sl`OMQ6m zl%BAnY&NgM_s)5|q7!cXu*-m}9v!CTkELkb06un?^yJkr*ygm2+1Au6FLFt`OeUHScL z30sdZ>{5NCCePZn6!w(r(1@n8&ya#)<_qDsHtXsPlE-Ll{ zP4stKpro+Cm_*F!^Fk&-e|%;@v%7_r6)Wx#o=;%FCL+|uRoUd%jlf?=Eo9eh{Y#m0*=d6yHIo4)^p^CDl8!4?R<%( zha|ArNZu#@qPH{Ipp4%+YqSSH_9WoM|8XGIQ9_;w}eSu3RF zIh(1CQkD?TA%KIg#7(HCFo3*2ETH|&_*e{vvG~yJsS1MkLkaU9mkFsPg|&O4EttZ) zlVL3j)3ziXo^Zd=&kjmyPH-Ng_)o?LiiL6aipLbjEIeKkY3Mi6Ky?wk40twv+gy?b zj8l&8)gYYEy!PwHH|uLgE6wFSmVKbcl&ZpnnVl2~1#{ zs*#MicLHJWE`2K&Q4vu(Mg6Ug=hjk-mt%1ZarepyfeuFk9Mf^SaXNnPG#%f51W5)? z%Z`HmjsjgcP!aDgK2X)DjzcOY zTaTw`D3TQ>m#&?{e{mChKJYB+oJ8Xc_=^nsu9&iO%JpBd2~N-taRJOV5zXwzrAu%o zmr31=lfR9_*SNqtTo(ikl=ruIK9j-ECW0J`bXfF2NzVv7Rkc@Puqe7yuK{&)@6d?B zxMxTfK>zebE5&s*HhrcA=u)i$^1%3+dpJJ~x1Zwe8D|bPg0RJ;28eH-QD^o&s<)D_ zYUy33dvIox)F(&67Wve9!6l{^*V0@#A4u}*YFLTZ#0k#@h~(4}UvIv;1R4^FfpiBb z8X}wyyJ1OZO_?-JQq5wYXit|Rsk$fHsNLw@|i- z`}=#gVMBM&r7$=x;LmgV>G-E4=W*Cd5lI#w8O+>A(AgUu)o+wx>mW0?9VU!^mYs3XqL zO?|21=GZqMQhq81ChYT)#~+9^*?xdo0K(Ku7{h|{6Gg-N$GsOzWO>V^IW8ecYBD%d z?iZ&UWo}mZ*MxPv3-@&Aw%?FtCHG@`0X>{Y3x>K#w>jq4BJ7$(mZsy2TW^B28U*AK z0kOZ|1L?0OV z{l$o>hM=iH)NuZ%H6RUqy^D!bi0iq$%BfhNpRfbMX|=ofw$Er%4k-|BKK5}X9Y33Y%iG7=&^7j&|j# z$a=Z;lIxB<(VECpht_b7MzJyL64Fv`Cpg*HI1Iu4pIS2i+Tpca{Hqqq?Pi9W()PG?%s<&XyR$A!8q(> zFBamXBw#K-@u{{pk}M?k9&i)FmlXR-@XM`}n~WB=PTzmj>@NS2aFVXUrI>{ala{HH zB)DT{!kRJabuQ8QHU=~l`szv5&!9dA3^(506ti7fyMlr zSN~0ikO8+#ah~o&Qa{`YTc+dq`)w%E^LpK)x@YJr0ac3KlFA;rAZUojR%+oj)>`;D z7{HrxDS^YuS9>!95IA5D4n<+&6A#WB_7!sd-hU7?hRSzD#Ord>n!Z(8ZYuX0P?g#f zy@d%k^4FRudE{;f0CaU*k`+&QP9TL!`H3hgy!kc4Eo%hxxd2tsLdFG>s%Gfp#aPl& z!t#IRtOko9G3w|;V2j(nEnt@?UaS5qb>-xA+w;g^%bFWuBjI&P5s8O$G6OR~lCS$6 z)k!A}JtDpbRt&WyPI>mBNr#9gKt2>ygQsZwPB*V9q5nm*haSgUB1yp0hmr3qH{0dNA;w- z^6dUMxOPWGH0C)@jDhL+m-&nR@stI39Rj@I5hPt@D{BzZ|H8c1+whX{IV1HR{q@*M zM)pmi(k_5z`nM+_3QMY~YypZtQMGW=bxNOjnrb_%pA$o&QD=GW+>*%b)Vb}F43<>V-GWtR%jo|c5qj5}D56(-$iFzm$Nkh~Iz0c> zr217hNCo@cNC3QDX@>*-^fhSj0vfvy?@FScoHqZ|^&&z^qWD9BO125BHe*qsp+v2A z;4R>>=DbUc)ol z4^KK>E^bjlhjub3cZCWW*5}2N`2j0=V@;yN>oIf_ate$O?QoT57M$_A?534K3Q&F; zjsi>>_qxalG+`!*#$-48@P&djrEi26YSVXY-{{=GCSU{tWz67K;f6bIffp_%qy%x z-D=U4t)w+t_(Cp`q6@zR3XOJn=Q}RGuDJ(xM-u#|z)ZRB?B!QpDgp1+BY&d5Oe??D zJS(bPBX^CcsI7nvq%GyWji)U`{DolfNcrclsY5d=>x2epz_n>aK>O@3B$}k-(O{p{ zM~j#fr5;DXM0u8Y4m$Z^SU7v(oP^{9x3VCP;=%j755~DFP=5|s8p}LMUNpzoqiV5u zjp&kmQAIi_WC%Jeg90IQ(82)V{ENEqK`z8IWD%W6w)ie!i1tab&`hx^8+G%M$cb2W zoVs>;&OK6%HK9IKY0Q1^w;=4Nnz5MrG1%4=qFy`>j_hkJk~Bh;Mq@y&b7Q`f1O##I z2(#zHMn685`e*0jJ%&;B8Zm0xl~$}gRoqK!u;{{qiiU|lJNbe@Xa_yiBZa3Bg~qg9 z@whh7fdvrsHb{#_6ep>Tj`Du6{fdR4ymVpKw zY%p?FjeJ>PW_op*-*SsacZKl7w*Kn|j4gZe@+!4J9~9Co27QCFtEl}C(eG{8-cFH` z5(+L(Yr>4U%+Rs$Uf&*WOT@I(P+JQwg$mz+wzT3FuWZ0_IpV#7h#l3n+uA=Wb+(rN z)U>_Peo68*ue)7yGcR6@qB+#nY$b8x`tvgU&7Ia>2h!jTT$PYt2@yj~Fxm2Ck?vuD zOsa8sfn$Rg1+RmaiX~)RItK>B0qU+@eaMyYznxMpk;EXVZ)ui!av_8EUH4$V?RT}?!L-vNBb zF(hHbe@k1dz50u^bQOC^|9lT!oAAq9bhubf~OXP{R@=?o96(rdu4mM zkmM}Ezd9rTz_v>0YE-JDC;QC^(E@Qb$6jnD z0d#5QZh2nagI?br;k=y|8e zdwfb0ZQkohyAColt_wj2U4o?&C46xN`w52PIjuB`i`Fxu&UPxkf*7{E~BcE^P^KJdPrZBnIJ&BzQ`h5t9tc z4t7B4n1lZi)9*WkJT!4Z0K6piArtg!tjepy{(_2c6B0`pJ~T^?u=!_onwVgqbL#Cr z;)=74K}zYJ*RCFo3eX6Ik3@whjs|bz>qb&#*_rmZhD!##Z?xe`Q>OnArKvpo{%`UL zu)5BVUk~ghqPPZ^*jsJFfDY(UrU4^LmC)DqBCKJM;GQi#6KCsr?wD%`^DcOEw7WvL ze9`JQYn^m>cMmPN8U})X4Pu>A&PY0?@-z%3Bz ziPV!CUXr7Kt2DgGUW8~^&M(tIjVyUW4Oys0%)#xq*>UJUBEU|`_St)C#GL)AwrZyY zm20@W11V{I&&TNb9`efhOZ$X5A!s~<;@U$inBhF(^LBEY!bW(!&j9=iHg%Ju-^iW7 z?^r(4d-W#j*TFS6tsl&vJpNWLz57eKbNszilXc6I?~7QTgCH? zqi7GPTk$O4MC_9!NwZ8gk861hfu?fu@lJhZ6twRE5gx!&f_ulNwsC!5<51WeXq9Ng z>EJ$$Gd>_IZBu%nk06zGpf`i3e%jj3~DmQamW^G7@Jl_7Bu~_dwI{d|$c4Q^qmX3c2rcLnx(m}=! zhoV8sWn zM)H}6fi=bUNF7ImoU6OOK$NsYp?xGH71lu;4JB5{`Hac_b;0r+*2saS2OnuWMOTtLp}P+7H2Ui!kldUIz<5?vcY*Z zcxgao=56-ET9$aT9GcaTraQ0ZY^+#qxNA=%O`c_yp0%0({v=GTV?MDfZuuAV=*hj4 z0EgF@1b@97(9ELTs)b!98?OGu(OWCe!`;E0BWsYRHr%+?9tN=ir-fb~gVK*-w?P+g zf%NhF;aOJ$vh-Rxab&AAFyyeYj+3!y*D zwPkbjut<}RmbIXsrKQJGk>?4S|6Oq%0$RZsny=uL7e`9Skq}4f3lN>pha8BploFWo~TPZA3F7uKXw-d z^!zJK_(15GQO`}%axQKn4&L{qCIdpI@cmpyOkTDSO8%#+;+r8bvgh7cVerJ=Di9y+ zCD7m#_#A`wdIETNZVRLC1Pa6BOydP0fnYxsQg-B%=MAu=zdWTyuAO z?1`!(zb*&YPRjYV&NZn0MUiVg_1RHD!3sfz(KgVq1PqN5;DWU`ZaG`7;eWu$w zvDR@jJ-2VV!%ek?A8_X0`vr~}3wa;$vEtw*+6(^abke`<5HKN95~laM5)?=6y-a{0S~7G=B|71i7; zF^}Tguyx?OJ+(fU)_N;6uQC^-!j2T?nNxD>SPOIj)G=Q46;Kv*bj1~=EM zFFxc$c)U^QWSP+Gpt$RQ>_r;2HT6)MY}Sl~`rg3hvMOdn2eY{zv}-X;b*^xXnv_J^ z&!8xx3hqM7bkamlz&a2f`*HL3I_ej3b`GS##M$%RHFulVf?a7}x!)^2DWdavnWbI* zdB<)Zi@*XwWu*57O)I8Vg401IbB1ie0W&ZA)#8KC0q_#Vi|UmbBUH$}CMT&%Mt^%c z1{$ZnUKF8y%E)HRK&8Xr*bVCa2P!(e$NPC*g`$t0!f84*phw!Vm6W>;O9cbQBSxv% z-Xipd^{i9HBoRb@=KEnwq5p+9iw=3O1!pOA;>)d~yF|s~GA>b-oouT5VD=EEA!1}d z7ruRIJ?Kw7A!e38K24Qgi3?bqmBPI&7^w0u9Hm)saf*0Haw|V`Y#~WHzDbV&T4Q&H zYS!&LGY`77^2@m+he-*1;C^(Whw~Jal9qIkn>x^E0uJCc;H=_h#G%fc0P!~lbMpvk zDtM}aCm$hf@Rb<#Z2j)O=(xOHc=nsOG<%V&cP(=jlKGoXOB2rLi^gNHXRV}HVguV2 zP`7+aI`^uZYV+TA7Pflhz9+G&xU=Kt>? zV9M#R_2ZGad=co8CV#^9&=9}7!UkXvRyZ+dqQZrmYQ7K$PUDkYT!Td#UCEg+ShgtH zh49W-;-Gf3*3uv4CqJ(6>w7v&+3@xlQQV>$*P#tugitCkDQ zM~XHFwOj*kTSQ*mvbj_C;`OJS_Dt(YRA@~E4O9lOip~S125IB~`F%c_&mtZkjZMXZ zv~UF!2+M50kM_jt{Z|zM&>8II7*{<4f7J_q>0^ z_QYJj4}_DdW)s5th=YSI(I9>kuEUfKe}_WqJCzV8aFA-@DkECBT`tYW4j*9PcogQM zQGgA&S!fowgGmK4Jn?dsdxkU^1(?f6&PL==t!M7o0XK-)EM|5tSV;+M=hXL4HmIX` z_j3%d0~urt=3-&ib{){=rW? z|6TZxSvqMZspSlp2DBTV@jlj5Yk~NW9sWuQI_b3l;PRD^Xy5+Zs?oNNZ(WNteqV~W zO|gpVHyVwfy)$SnH8W-d+kesD$>w#>s%WA2Ji-gx#Jza9?{~`uKuHqshfW_WAkQ<% zO~RqGQ#J3IlX~*ecA@m|#C25HV}iaFyb4tkksJ11u=$N>wHNk`0o%)?Q_Dr_W|+nD z2=|ku1TZ$kl?)ejOF$K>f{c9_1Nv1qgiRC2FO0fT6rT%x9O?sI9*mg1wvQK%F>vql z@1&mZPo{MM*JXq{n6ILQ+%XnB{3ha4=7GaJSd}enYBhn0MhuXti6T5Hy6=&>pS9m8 zQdVz~>xs=)5^VD4eroP^*oZ3}qJGIz+1p6_XDY*BI%7MVoPaIAhnpfqkmvon{CyFM zHc&URaMD^`c!LTWjWrbr#`KCcBpKV}PaUnuVm0y`B4g+8sKImE0gGphIJ|Ry0`+WO z$u4~H&?h|asv$Sz_gu!>xyQ?d<3Q3r?YBzZi){IEkOo2V8w48iao|$LOZ-MpGl%z( zFIX6XlJf{-tO0#lOO`;bcBhl#s4z&+E-{#T(=~a+`fc@4=wxQb>oF`iw;tM=j<-K# z29hJ9Fx|Hcskq_z9}{^SwtvnJ(Ys`cvqq6x()NO}543O|Ejf;#LMIW}A!OlGI&`Mr zA!j0+#5U>X6aC8OxP4{|W;oajnbZHpM)W^ifU3v>8Yb1Hs*$4wTjtl(+Sb()Lbbp1 zKGOqsgM_4|bKHD@I`&*;Z+oou2xkp9WH){v9R7Zz4PHZ}I5V*8KsC77F9#=Zi3jxX z#nK~ogtm!5p9MEqulaSHM1s~6N3Fw^&ftQ#{?E;D2?WBMA$x^!FX7wuBy|K&;~DP- zxY%q{u@UauVPYvI%!uwSZ{rS(<1_S0%TC((X%yg@eUvFdr{}ZT3xSlU{0Ta(;16iR z6uJl2X{zK8QE{`-S}lba+`XW?3Q;)=GN=T{w=i}oXR|~laFXc!(cB&S z&rs}c<7~O=_L1bTTFmY|OppC|3F+J$uyel_qDOmr$Z$vAW<<#st+9m~>+!&b3byuG zge@KniVFv`kKZ0%d|)h1KMd-NyUHV5p6hq)^SDVbNEZa`lIc<+aA3E6WpR zQn~YeM2 z?&3Q5Ox=1}XBmZJUNv&2n7m7LlTI@n@cBL2Sp)cZ0Tq89uSALGc0+^pxU;b0V!<8j zaUYUeI@I@&`Bc0HEC7KJpk2m#pNwmcN3n57NoDqURT|^)IlT zV%mnkKEG#uQ)d87s&ob-mCZ1D|Ae)UQLM)z0?zq~x^H4W$9VDfa1J#Sv({plRJ#?lDZ|>iS zI4|sOs#VhsV6{z)T#3I<$D#Ug&`;x(AzlGK9DV7?57eoT`>dd=HwRYuwK0^}2Fj)~ z=>|;o9Bcnq4JF^n%IL6t#b8fB_pHhDg#laKoy5vEnyX>(eM>m+FZG$%J_LEshBEQ7 zChU;RS|(}ZssH}xO_vtARJD{C+N>;hBc0sao9QkRYnhocTgaw|lQF`%+-$T_%!&fopIbpIap++-VmleTo||wQHz;zXHd}xE z9_gY(C=brxnz%bQtyg>Lb?2F1U-89=54v%1%zrK{k}AjcO+ff$;kDh6%q2Wd3#a34 z;=D-dSC=rE?kXSIyt!)P->*g=q;L0Xe*si`dV08IkN)48b5YdqJuTpiBrO=~A%G|y z3r=Ibd+65$&{lJi1rxQ!n{E=~7E3MtVjHw2a-Hg&mDQl>khO14g9H)*DB(Xc3B0lb zQEv=p1F3UW&NVPoGzhoBxR8 ze|kb*J)WzB9b#o3{@t>atuaXboCL-Cazp-1XZW;rJ^`pC&eftD-M|0@WEwwO@d+FN zs+88=B<$&&`Fmykl#7o+!G;?y<)=6?^RMHW%MrsJ=*R%|VLp)AAQkS0>h(xVjjZo% z!@NLCIef#lzNQtZeLT9WY$D+7H7b$ErKuC&GZ?8#|EgQb%F+4n=1 z{~P-?>R`L-+7FvL2CE~^4gx&WXb*lPQusZc^fU>M=*lc;W|4aS%uWs{|D8Jq?e5|y z-$x@c+u=vQfQ>rWPid*5#Iz^CB)mx@4c$7B6;1e~6;o+7;Wb$4l?vcoi9zt(m26+` z*c75fMxLFaZt$}93LsTz>>DEH5?`c)(q@%dmK~%}{bcz_9QkYkC2CY`h$`6athswL zJY)BSlQ93HTU0OhB+b_$exZ_r#GSot?P&m&nP>@{->FSpNIWmXi?oqgO<^@iH!1m# z0!A>A+B)Xn`Af*;snoAV-R>0;Qwk%&k!Z~#HMmf#5$~x;W(D8$++SYm# z8edSm+7`xW@-1p&5B_1llejsaor&9tUw0em?E*o<+Io^$vHGAJr$(z-AS2;?1PGVt zJA{5ZPC3!Iv^8eWZ8dhhA#)MWB22WE!OX0L$~rlCl>JXQ$6*)d~&|P+G6X!Gm zk^R8AExZ}WRN*>&K?UHuFqoZ>Xt$cl9j7TLxSj1l$Axzx_^ha`ma3Q_!tT|R-t7e? zf6N9Qf{wCuOTyx_Hiws5v6?N} z!~B@bWqcujxhyc@88|ARwrbq}b^?J-P-WhlKYfXm$TzctiENYdU;3|-V4n`!O7zYq zf&U{xiGPxy#Gb+DEGiSjNMjfzMGbI?tS%&UyXyId7dBUQDtU?sH6Hk@Th<~{W7L== zxH3OsC!%prNShMmHjDgLE+_+>`HKItYb*EJnz>8kQhU@SRnO{?Dy7dK*?Qu*$S%dj zT4_QHWIH(xiU=4FmzGdojQ~&XcAv@)7O6cgcWlh$MG7(D9+aI+yDW~h+vlcGr_Jl6 zwI{n$Gy@JKtv%^n+7`tR4P%w$ui%y{*_O!TO9n55LQv)G~_8yJ~N(30P`eGc# z8g3O;l+$6SAw21&I8^;av7lxo03ui9ebvZ4Ns`|yGy`LtjHd4?4qDYz7)=Ci=PSoC zEq=Dhq10m9*<2N<%RwF;PZF&&`+c%N)vKc^wC*De+RGV^ zk@y?ke)9-Y0Sc7T+Fy{uf@$hujoz2uhO`T$1ofF%0(#;y$-arSgG>BzWJcieA%#XC zi)i{hPUL2nJtDS(VP4K!Y3&~X>7&%OSc|*+F!LVY^5{DQuIYB6e+f0b|Iv^7H#U`cd80)S;XB3@A%mF+soUCK+(HQCsUGbVT&tJQU&LMTPgNzI3+w1ck9DoqpSpf4Pdh9-kX(-}Dh}8ux(F(wN&PX* z*$dn0gsyIdUgf>!%zS*ZmkHb55oQ3k{X&cpd>Dz3ChYPeT}|p!3E5(QR&j@LAh^Py zr3u+t49cn(V0_#&$*V@&jG@;o2%^s)@Nfb;+^H(4g%A%7dp`*m3NI^#nb`E<^Nh4`(0INI=r$BEC$7_#QMbjyvlm39H{h6mC{~L(a(1LQ$QfKA*t6SoNM`TS!!5_w z(m6MTOKSsqMvJ1Uc@I>I!8k|Q&G{CC`H7Nug8T10XlfEx9i~b+?%r?u@IFtu``_V7eEwoOh{ z%n%z2i44+WYPvRIrhTBkCp8KfgOp452ycXicIekdq}q^tGHJTQJ}GlL=LP0NnCcOr ze}j2@RNQb6Kl@c=ut%gTeh@FIk42ZJl_Vn@Ln6U0al6g8azmC`EJ8U9`KpdIBi!By z;rWEanKYB(p(k?#35aunNVCmagT>^r+)cT-5{r09oQ^QyzP}es7J@=FuYiYIW~nAB z*I&B+{^vLw+Uv4_`$Dr?69u%gghm?V$f4ictm|2vqKN=iUI=qe{ooMk<#oyp>=Ii; zM#ARw8ih4~CF5cv`DXN%7~ugcs@&k%0sikm;Fttn=&~Y_Od0m-aV0VczQ$t)PErNM z?;${f1wWUJ-1-U7@6-bcyW_ywe*G}hBZ0XFF-#SYuO4QRH?tsDO25O7xgqOGr*^)E z=Ul>Xl}1EXqak)Pk1Xa#X(X~zPAK%M4M&uWt*rHYeQLO>1S4R^k%wv-_E8 zno=dU1m|t@m&Wate@ISr=Q*mf;}64{Y)f_6HI=poIc;wZ6c9|OTy60MkVUt~VWmTu zc|-=hXApPUDSj~IZ#MJ+x+ZfbhCnx%IDTR+EkfDRyw*rJ>|jS`%bc_SyS1yb(NAe6)baLD%v37J{sfbT( zYulWL=ll|N>(3}g@WRGfz!fi3Sn12{G#%GEJSsO=DUUk10RM(6e^tU#kEtJ(%F(Gc z8x$MK5)p0eN}U;_NNUF!7-I9{F*i2AX#j)F-rmc-7vI7gxV~}1IgY?~2z;k@&+o7% zAsxJs@&YT<#iw}HJek839k$Ue>d_uf`UvMXh9(364~jcWQK=uIxb5K94P?xO?^Mpq zO4#geA8j|tNmFLuiLy4E@LB?;Zk!3bu<*X0TKxnH?aKW8C+~AR{_JR%{xvTAnt-Ng z;nl{-uF1@1v$@Y2hrkuS{p#TQxt@_}bX{w$GV&9E6lcnQ%qngZ+7D2FBthRpX=R&I zt*kQOTg9+28k&lSwqY(W#ks|`MUs(^Ah~Np3eTk86~3%fK-@pj;)Ob@0H$tvGyI=o z+UCFZ-Lu&rc>ZNWpZny1|6wy273sOUwuIT71TSrsjnSW`=t?Q}*b-7ej=nnbtr&mk zlSjENEXWr@a%jq#a4R~TwpaW+H9QV|k_X6()yGu{PeSAj4piynm94A{k&W2Yq3<-O zZY~@eqc$axE-;8J;-yi!dqDV*2v%*0g-xX1o%!|;6aw#N9PRUWjv~4+K%EVTwy=R@ zjmQ1#R$<4lHE4)+1D05^y-Kfx7QiEtfjr?Ie_!Cra!KY*14`VyVLW98qI3nBN=2=O zsI)Qe*p)e7*tEqYlMb)pdZ_XA{Y4aqAtEc`EoCWKAFUG3PvR&mxWQ_qEnJ62ROCWy z>a~8>W?kCKv|@9BM!_$BCSCk4fAbY2Y-Awa^NYgCM?P-f9VMj3(+J3mM<`MPri-NG zx!n#srqmZBat{PL{-TB*93`Zoz(o8{oXhe8s<~=U$a2W7V#-~<&rNJaF^&Z~I00_) zCWr7ETRd=3OlTOd1&hz1R9yQ|K%{k@3t+#nG|zOowt&C=eB|hzrQG>`YvmcGb>ZP+ zTB5%13+Qwe?=2whY-cg!Kf$}i?~?(21>n@A`dC|caK5Yv&e@!v))e7mMHRNKS?Nk!MH^egVgt zK+bWsC1S45`nfSAq(j;)=D#@{a=3STwgXJ;GG-F$NgFat z*(e$uw5D8I!lusszmlH^WPvOMX;0=$N`<51!%-&)();^UI6e9^Z1iWv8Dr=s3)g2* zoQ5cS2f^p`unN021cpF+6eJ^W=Pxz~BSXcLA(4k$q!6`Y&O`obI+Mr~Cpi&U^8UCJ zXOc)Kx*T*6IkWLQU{XSQw$iTxJr^Kz7u><_qYhx8FWdNaCYm1b1-V>H+#ohDjf#Vc zj@D9wnrK9{J0hLr)-yMq~8xoV&3P?+t*X1*lu~1x7NU}nY6M$v>%2a&5f5p=-Z<|Vs*hiWWK^7ow*oLBKzx+-gle&^b_R? z()7vs(>@o=VOP`7cOF=&49*P#>@~2?9y|cs!Gi#f^Qo6#N#!89fdJx^0v&68`N)mK4^ z8lo_@FzU+y;65((J~QOMM%bt=SjYE#zr2g{R$>lb`Lu>@XhV_bp>}ZQ8AzE|w5YIm zKa&~o4JCi^7XS!zkgb{cbeIlhfPJTL z;n7@$FT-4)`pE#^$@RUAJBOWqOm2ypAahD=VP#&>u81qIBc8}npZHQ4e24M3!())| znN>Suz=JmfIi4@w*pI_0eamN3JZXz~@o`|nQ&$X!z6qhvF90BRDcizac)El}7Y{!b z&{n=feEVZd+|u)f>^HhL!65mUP3iHYH#jMVH0w6qU7{yS;j^izamHv`__jQ8wb6Dc_VR@%I~ya zz{CPf`*>NO^Kk#=+=+h7`3UH*7Iq(dB%WO*Y;evlUGrki#mHme?Ju>xu&=@;VRnZq zNxrAZe{RkmI`DxODWqK+qRvWC$flL~K9#mF#b?kjkU9JrpIJ8Z5zGgAstr0)E|NCLz%V>>Jjw1MWFSGyK zu%~hdEKOO$6R4yWwSGIK$n}uD4*4Q;gI1pyE!qPolvmDEkZ8@;vgaK;mT;7N{HK25sx%04(WQ z!Q;#b$$z0!)P1dB=bQb?8S+{o*bP>InoqS;fJ5Ux0cOj5+dy^{dC;M(p+1|5slHg5 zZqX=%xQ!<~FL;~|88JZ8_vG2ii3<&h;!Hu$103Ql>qB&Jgay;H@9`(nA^v$!U%l@X z%>m=zqnZ8-O@X9y?Xho1T9$CfY;nT+h>RbiNKER}u-qB{@DhF3T?ji zsm`3XWiI3Gj>C8Ub}j#I@@G=zq0jV;vw959|*l#avO`G*7E1?*Ka@LcT=ga1Nd=>6Sffu>7bLPk3Zw6Sg z!Zp2r11hY3Ukw2P05IrVBP%ygcJ4OWAz~^^w$E?1|8L=e63XyRR3*vy4JbAXn-K&?E4NR3=Q;VyIm=_so#kNgB zaOm*^g6qHlF=^Il3%XDSx*8kyq7LRXtE^Wc8&06o-1osA$}^z6+sO-w6wYVh1qbP* ztt5l8vt=`!sgy0MGGHkwzOB4qypG<}PtXj0Bi9LV>JK+x#D_o$9`a++06VZDW!<5@ zN0VktED^V2GBx2FXPW?BA1%n zNE~_R58IAdjapre1X985X$LG}kXqa0@sV$Q7o%N;)17$T<-^(g5r_8u(1NJya+yU; zSVXi0A#`H3n;b=Z*;DhQC%wPfMnh)&?=_S*%9}f|hzB8mCy0VaoQ$QSJs%n)igv?i zdb7Qeuor~`u~Qf$nlJCohTp8JA`tYi;iK1@4(F~N`DpH|gFClx#L_b;Q*~5@UecFG z@Fp$v7jwGiD&%Ll`Z-j3zID-YLS#(OQM00-pPa()U1sKkdH60k|2uksgUxR#Wp=pX zaZ}^j6IY?XOpCvNR&-OrKk)^U@E31ryl`I_D#U6_0CKQ<))$UaNxN#WGiCJ-_X@ocq|Va_`50gY53gA_pqBj4u4R57&4_ z8dsSZ?o6^?=*pK^LFm72qIAwfX~Xsk&Gc+a|-t1jK&+AkMJOXYiv9cYu zyq>l?aXbH!$!0>;QFhC-k^;R5b>^!^^RoHxCRB&ra9$~mTjX0t8c+D9>6BNLsq9Et zL33f)QOhK)6#sR>+`op) zxQ-V?@2E4MF+2+SQ@5$R%P0+ccx(2|YD8H6q!`Yu??&H34of)G7bEV>S+5{Ol3)Y6 z-;I4Op@xY8mnKw_g$IjfRaT?7_P1uc@+OLh1IP&3Vjb$q56RtkEvj1-BSGMI*n@5J zbWZdo6CS1Y8XZt>D-v1X+RWbFP*Dv*CkqXg0dr zSo_*=Q`G%Mo&~s%hXHCwT2`K|Lu=DX?h~mmgm0#%9xg!_v#Fi0;jrzZoL=VqG5s$+ zEOl^M{wEcq@duq|=>fiMBO-bQ&*5=b+EaCV; z8q#}Y`t@V0yMEuF{(rw;pXc-WdcL0T&u5SAvoX)B&BdAcYm+z+W#wzP7)tthyv+>w%!&j3 z*rMloqF!Fio!AAiwAiXV4D z>a=ebYBKWkEZN~TpmIT;PCw16_}DQ!ZcV;*1`;~S#=k+p0_4yOLaTn z`y&ufBsCtKb*2N4Wrekj%zAu~C>NzVc}U{g&~^4jnGI}j5tC$2YDNKq`DUBK!f0=2 z6y>&D-WRWWS-amX_34NTbB&;R_RdMIOM}{1Ou4F}$}u2V4#Y&vUy3rHCI(Hq{;fE& zz8)JZ;?xb`ZKaqupH;_SC1i`WP>Pj6Wyi2isbfdxol0H5fQei;<+~)Z7EzPrq~0Nr zd zgz~gwtHa`pHz>!pLk2)PLv+rJs^rkJYZIF)rWk&7n+TxqciEVS20Q9T^-qV`{j&hw zF9Tm4zp1b4K`AC~iTbbB>VVQo7Px)r?>1PV^U%apg-0?aQ(HylGhQ-;6bv^CYM2Nc1RlK<<@S{c)4GiM6_S@1)2_`1#g`$b{aPJhX|t-}wP7VV#qDQ+->OxLqeqH27|N z9n%QxAw`vTf4IMbMc>sUH%4i)+4!CSs9_lMecJadUTmZi4bQ2g+*3(;I1*@1i&RCp z{l_Q!V*_;jX#uXTJow(EMQFKSh9IkH98D0ON$BC4I*R_bd>=(v1#(9-mL(Yp>ZONG z<~~t8ML}dXre0C)yIrR8sZf=Z!#*za-Id@fQczVFrAbJ&~HK``c$nMhiWp zl^lwgGWBr63%}{#pX0-v*ir6tRs`L z0pn_NCt{MXTyq$K&|MxIUXD1iQyRAoufi85d_}UM0g57Ygl0@Q+TEnHE%EIFta?Njr z#NR1Zq@|E|_A5+%7pMUpQ~~i=SLF>u<4vr*TmgSN}t_T|#La~15vm*P8tfKhEWWStAi`yCLV~xOPo!V}icxhr3d_)iM zfu=QEdJC359VEZx&I+jhrRmCHFrBlRez;iTKV_;FYZ1S0tfi%z22NLHs$dKGf?!}&VVgKzb}k`t1)|&kr-9@5 z~Pm(Y?Xn{X<$zL;u@fy zk%AOOsK`iBoQfT16tk2yXQ07cMW%q8H|;!2=lUF#fkP(U!A^f)4Q zzRb5cArJMNwJ21C`Yd=Y5Y(@r89k@U{I9Pqe~L6ifXdQ4lb4SXD@qwqHDh*&S|#&H zA)^S;YrqGZd3A4urRwK(w~JunLv!UC!7I09%0cqyLMmu6dU|LiINV*+ZqrTzL|QB? zHr&{@mCgLwAcgD9#^a@>P#;Cy-o4lFohV+z&)#PZ0Dhy`EH$=I_#8bPOcW&0WPM3w z3nGxOJGfA@P)ewtU*adG}eKLe7F}SdeDm630naX z*dWyJJ<48UhDebb9RRBT3J{pc&ARi+860lu!Om$M&{9N{WKDJH{R`bUV+Exsm8Y4c zv|AN*67HIw18KQ0#Gq^Uk9tpsFq8b4+PsH9shkk?^>i?W*I^s9}I+sKLM1AeMXK5M!=W1X$%fZjrX6o{s*ECB|&@ndM zUs}mTJD!)FD(nAQFb&HZo=>Ude;^n$X5AWP*BroK?Z7P^wvIQCyT2Nz1WJJ50dKbf z_bf}de*1Wrz@`UDDU;*_gb=)`E)pFjy7E0q>o5Y8lJO%)$)&!-NoP>B2jps4)`w=i zc(?QPjRIa*Q8PRNKbf!ZJsPkz+s#N0i*EN$>SgZMfCju1%dN#>X+&bwU**4;EF1e; zy`%~#oeBktHZzzlYgs7!u|GR1zvXf;RG;s-mfz;h&tmkrN?UjHSaeD4W2j0xz|{e> zk?5h{rQ=G71WyPP$=nL~RD`qYt(ksSC9n1Wx2%U{zC#vPckN{UVO_OS*Fu$3p*)Zgh6cw)g*GBJetk@NB*Qfed0_`ZwXv3yofiLvVoE#4gqpjr*Faxka zTZFfwSLl0;cq8Xcxzh3eWN0s9}yQu%5BitJ-TM~lWMX^I#B z62+ZZ%#IH(p;7N!DI6jU=i7FjW=iGj>ji)ltEHW&<7RcKe#T`W9^=(eWPW&}Wrx_4jx-wChXKJ*s z7>OS+cMvxom%5uQPK@6u%|qfJe3*-^JMyDT;T`9?txA#~`5Ph6Ykk*(4ED(LvlLP8 zJSGxT9`l09au%%eNB9FOnun`}++9-Kl1pgiqjWrTWm}KQN^eYC&)b;Mk1Qi!d(j`s zs3${OaPRe)!+oExIla1C%czEO4l(VfzLBn~PZWn@L|c>5e=5QkOox!H!BvgJhZ{#QY&dV!gfsJY<21=Xg4=o{2com}~xTN1sw&as3kc_B^yezTb_gvd{G7f$WeUDJfz zaMcs#u$hi&>TRB7rtcwd7L6sL9hKL4THCO%WmlN#hsfcgu@s}byR8uZ?TC5xCU}52 z*f5NZPc6DDJ7SOgzlJyUP=Jbo~V6Pi;F42C%G;9~#I*8krB03lu5_W%F@ literal 0 HcmV?d00001 diff --git a/src/components/VFX/components/MultilineText.tsx b/src/components/VFX/components/MultilineText.tsx index 4b51cd5..83c0c89 100644 --- a/src/components/VFX/components/MultilineText.tsx +++ b/src/components/VFX/components/MultilineText.tsx @@ -1,3 +1,4 @@ +import { Center } from '@react-three/drei' import { Box, Flex } from '@react-three/flex' import { Text } from './Text' @@ -18,3 +19,28 @@ export const MultilineText = ({ texts = ['Breakroom', 'Show'], size = 1 }) => { ) } + +export const MultilineTextPro = ({ + texts = [ + { text: 'players today', size: 0.32 }, + { text: '15,230', size: 1 }, + ], + textProps = {}, +}) => { + return ( +

+ + {texts.map(({ size, text }, i) => ( + + + + {text} + + + {i < texts.length - 1 ? null : null} + + ))} + +
+ ) +} diff --git a/src/components/VFX/components/SceneViewer.tsx b/src/components/VFX/components/SceneViewer.tsx index 8befd64..164a7b4 100644 --- a/src/components/VFX/components/SceneViewer.tsx +++ b/src/components/VFX/components/SceneViewer.tsx @@ -1,13 +1,14 @@ import { Suspense, useState } from 'react' import { GameEvent } from '../../../types' +import { GameInfoSplash } from '../scenes/GameInfoSplash' import { QuestionFact } from '../scenes/QuestionFact' import { Splash } from '../scenes/Splash' import { AnimatePresence } from './AnimatePresence' const scenes = { intro_splash: , - game_info_splash: null, + game_info_splash: , empty: null, question: null, answer_reveal: null, @@ -17,6 +18,7 @@ const scenes = { } as const export const SceneViewer = ({ event, offset = 0 }: { offset?: number; event: GameEvent | null }) => { + console.log(event) const nextScene = event?.type || ('empty' as const) const [scene, setScene] = useState(nextScene) diff --git a/src/components/VFX/components/Text.tsx b/src/components/VFX/components/Text.tsx index 9a231b4..b7e7356 100644 --- a/src/components/VFX/components/Text.tsx +++ b/src/components/VFX/components/Text.tsx @@ -4,7 +4,7 @@ import { useLayoutEffect, useMemo, useRef } from 'react' import { Mesh, Vector3 } from 'three' import { FontLoader } from 'three/examples/jsm/loaders/FontLoader' -import matcap from '../assets/matcap_texture.png' +import initialMatcap from '../assets/matcap_texture.png' const defaultConfig = { size: 0.5, @@ -25,6 +25,7 @@ export const Text = ({ config = defaultConfig, color = '', dontAlign = false, + matcap = initialMatcap, ...props }) => { const font = useLoader(FontLoader, './fonts/Blacker.json') diff --git a/src/components/VFX/scenes/GameInfoSplash.tsx b/src/components/VFX/scenes/GameInfoSplash.tsx index e69de29..37f3c19 100644 --- a/src/components/VFX/scenes/GameInfoSplash.tsx +++ b/src/components/VFX/scenes/GameInfoSplash.tsx @@ -0,0 +1,17 @@ +import { useReplay } from '../../../pages/Landing/useReplay' +import matcap from '../assets/matcap_texture_white.png' +import { MultilineTextPro } from '../components/MultilineText' + +export const GameInfoSplash = () => { + const { event } = useReplay() + const playersCount = event?.type === 'game_info_splash' && event.players + return ( + + ) +} From 864ddda38b2a7ff8cab5ae02be0dc4811a7c8b65 Mon Sep 17 00:00:00 2001 From: Vlad Date: Wed, 23 Feb 2022 23:21:46 +0300 Subject: [PATCH 5/5] update game info splash --- src/components/VFX/components/MultilineText.tsx | 2 +- src/components/VFX/components/SceneViewer.tsx | 1 - src/components/VFX/scenes/GameInfoSplash.tsx | 9 ++++++--- 3 files changed, 7 insertions(+), 5 deletions(-) diff --git a/src/components/VFX/components/MultilineText.tsx b/src/components/VFX/components/MultilineText.tsx index 83c0c89..1412816 100644 --- a/src/components/VFX/components/MultilineText.tsx +++ b/src/components/VFX/components/MultilineText.tsx @@ -37,7 +37,7 @@ export const MultilineTextPro = ({ {text} - {i < texts.length - 1 ? null : null} + {i < texts.length - 1 ? null : null}
))} diff --git a/src/components/VFX/components/SceneViewer.tsx b/src/components/VFX/components/SceneViewer.tsx index 164a7b4..9073462 100644 --- a/src/components/VFX/components/SceneViewer.tsx +++ b/src/components/VFX/components/SceneViewer.tsx @@ -18,7 +18,6 @@ const scenes = { } as const export const SceneViewer = ({ event, offset = 0 }: { offset?: number; event: GameEvent | null }) => { - console.log(event) const nextScene = event?.type || ('empty' as const) const [scene, setScene] = useState(nextScene) diff --git a/src/components/VFX/scenes/GameInfoSplash.tsx b/src/components/VFX/scenes/GameInfoSplash.tsx index 37f3c19..7e3e2ed 100644 --- a/src/components/VFX/scenes/GameInfoSplash.tsx +++ b/src/components/VFX/scenes/GameInfoSplash.tsx @@ -4,12 +4,15 @@ import { MultilineTextPro } from '../components/MultilineText' export const GameInfoSplash = () => { const { event } = useReplay() - const playersCount = event?.type === 'game_info_splash' && event.players + // const playersCount = event?.type === 'game_info_splash' && event.players + const prizefund = event?.type === 'game_info_splash' && event.prize_fund_usd return (