From a7b4e539df78412fb2b859f99bb018c613654e48 Mon Sep 17 00:00:00 2001 From: William Tran Date: Thu, 11 Mar 2021 07:20:20 -0500 Subject: [PATCH 1/7] Adds python file to setup database --- .gitignore | 3 ++- backend/setup_db.py | 35 +++++++++++++++++++++++++++++++++++ 2 files changed, 37 insertions(+), 1 deletion(-) create mode 100644 backend/setup_db.py diff --git a/.gitignore b/.gitignore index f5e96db..9069f18 100644 --- a/.gitignore +++ b/.gitignore @@ -1 +1,2 @@ -venv \ No newline at end of file +venv +links.db \ No newline at end of file diff --git a/backend/setup_db.py b/backend/setup_db.py new file mode 100644 index 0000000..b7ff457 --- /dev/null +++ b/backend/setup_db.py @@ -0,0 +1,35 @@ +import sqlite3 +import os + +DB_PATH = os.path.join(os.path.dirname(__file__), 'links.db') + +con = sqlite3.connect(DB_PATH) + +# array of links to store +links = [ + ('http://csclub.uwaterloo.ca/','CS Club Website',3,0), + ('https://www.instagram.com/uwcsclub/','Instagram',4,1), + ('https://www.facebook.com/uw.computerscienceclub','Facebook',5,2), + ('http://twitch.tv/uwcsclub','Twitch',6,3), + ('http://bit.ly/uwcsclub-yt','YouTube',7,4), +] + +# SQLite setup +cur = con.cursor() + +# test if table already exists +cur.execute("SELECT name FROM sqlite_master WHERE type='table' AND name='links'") +if cur.fetchone(): + raise Exception('Links table already exists.') +else: + cur.execute('''CREATE TABLE links ( + url text NOT NULL, + name text NOT NULL, + clicks int NOT NULL, + position int NOT NULL UNIQUE, + UNIQUE(url, name) + )''') + cur.executemany('INSERT INTO links VALUES (?,?,?,?)', links) + con.commit() + +con.close() \ No newline at end of file From d12bd73eb21007b23ccaf8c35b76a2a6bc9e1a75 Mon Sep 17 00:00:00 2001 From: Adi Thakral Date: Mon, 15 Mar 2021 00:21:25 -0400 Subject: [PATCH 2/7] Add default vscode settings --- .vscode/extensions.json | 7 +++++++ .vscode/settings.json | 19 +++++++++++++++++++ backend/requirements.txt | Bin 204 -> 338 bytes 3 files changed, 26 insertions(+) create mode 100644 .vscode/extensions.json create mode 100644 .vscode/settings.json diff --git a/.vscode/extensions.json b/.vscode/extensions.json new file mode 100644 index 0000000..0567381 --- /dev/null +++ b/.vscode/extensions.json @@ -0,0 +1,7 @@ +{ + "recommendations": [ + "dbaeumer.vscode-eslint", + "ms-python.python", + "humao.rest-client" + ] +} \ No newline at end of file diff --git a/.vscode/settings.json b/.vscode/settings.json new file mode 100644 index 0000000..e2e1b58 --- /dev/null +++ b/.vscode/settings.json @@ -0,0 +1,19 @@ +{ + "typescript.tsdk": "frontend/node_modules/typescript/lib", + "eslint.format.enable": true, + "eslint.codeActionsOnSave.mode": "all", + "[typescript]": { + "editor.formatOnSave": false, + "editor.codeActionsOnSave": { + "source.fixAll.eslint": true + } + }, + "[typescriptreact]": { + "editor.formatOnSave": false, + "editor.codeActionsOnSave": { + "source.fixAll.eslint": true + } + }, + "python.linting.pylintEnabled": true, + "python.linting.enabled": true, +} \ No newline at end of file diff --git a/backend/requirements.txt b/backend/requirements.txt index 131a0a98eebe1192605f97fb137b56b2b3c37c40..8eb46bcdad6215e3d7d6bb3f14f3170d613fc79b 100644 GIT binary patch literal 338 zcmYk1v2Md45QcZ&#V5dZGO>23)G0&f3#Jw^0R&iy{q#9(qIUd0j{E+@TvD*3QW6Fb zOgpP*rOqHgvQLMZg4l!2Ar++tI0I+4@t1Istr@husop~1HvkjhZ>JR%a{4r_X%rfmgNbr|wHRVUbNQKEwx3d=< CaAsHl literal 204 zcmYk0Jqv>{6h+Tm@UMubgHzWIf|EmM@uOIaiftBueA}CcQVAiCcP{7V`>A=-Q!{YU z$%sjH9T6w4Vim8Ah5euPyhR%EkvlC56JDEO*^`M`a`{IdN;;#?JRx&7UWhE}@XVB& XJK2tw)KWL=7+CdsHSUSTY~i;*-##6v From 4e8efcf56f6dfc1ea4cfcaa3856e3042b6b239c1 Mon Sep 17 00:00:00 2001 From: Adi Thakral Date: Mon, 15 Mar 2021 00:30:16 -0400 Subject: [PATCH 3/7] Add a setup script --- README.md | 23 ++++++++++++++ assets/client-server-interaction.drawio | 1 + assets/client-server-interaction.svg | 3 ++ common.sh | 30 ++++++++++++++++++ dev.sh | 33 +++---------------- setup.sh | 42 +++++++++++++++++++++++++ 6 files changed, 104 insertions(+), 28 deletions(-) create mode 100644 README.md create mode 100644 assets/client-server-interaction.drawio create mode 100644 assets/client-server-interaction.svg create mode 100755 common.sh create mode 100755 setup.sh diff --git a/README.md b/README.md new file mode 100644 index 0000000..dfe748d --- /dev/null +++ b/README.md @@ -0,0 +1,23 @@ +## Architecture + +![client-server interaction graph](./assets/client-server-interaction.svg) + +## Dependencies + +1. Node.js +1. npm +1. Python 3.6+ + +## Setup + +For setting up the frontend, `setup.sh` will run `npm install` in the `frontend` folder. + +For setting up the backend, `setup.sh` will initialize a new virtual environment and setup a dummy sqlite file for testing purposes. + +## Dev + +Run `setup.sh` and then run `dev.sh` + +## Production + +TODO \ No newline at end of file diff --git a/assets/client-server-interaction.drawio b/assets/client-server-interaction.drawio new file mode 100644 index 0000000..75995a7 --- /dev/null +++ b/assets/client-server-interaction.drawio @@ -0,0 +1 @@ +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 \ No newline at end of file diff --git a/assets/client-server-interaction.svg b/assets/client-server-interaction.svg new file mode 100644 index 0000000..b308b42 --- /dev/null +++ b/assets/client-server-interaction.svg @@ -0,0 +1,3 @@ + + +
Links editor page
Links editor page
caffeine
caffeine
Response /srv/www-csc-links/index.html
Response /srv/www-csc-links/index.html
GET /
GET /
Links page
Links page
GET /links.json
GET /links.json
Response /srv/www-csc-links/links.json (does not include click count)
Response /srv/www-csc-links/links.json (does not include click co...
Consider / to be https://csclub.uwaterloo.ca/links
Consider / to be https://csclub.uwaterloo.ca/...
ONLY when a link is clicked:
POST /api/click with { "url": <url>, "name": <name> } as payload
ONLY when a link is clicked:...
200 OK
200 OK
Backend
(python)
Backend...
GET /editor/links (authenticated)
GET /editor/links (authenticated)
Response /srv/www-csc-links/editor/index.html
Response /srv/www-csc-links/editor/index.html
Dynamically generated links with click count
Dynamically generated links with click count
GET /editor (authenticated)
GET /editor (authenticated)
sqlite
sqlite
POST /editor/links (authenticated) with updated JSON recvd from /editor/links
POST /editor/links (authenticated) with updated JSON recvd from /editor...
200 OK
200 OK
Viewer does not support full SVG 1.1
\ No newline at end of file diff --git a/common.sh b/common.sh new file mode 100755 index 0000000..11c8e58 --- /dev/null +++ b/common.sh @@ -0,0 +1,30 @@ +#!/usr/bin/env bash + +PURPLE='\033[0;35m' +CYAN='\033[0;36m' +NC='\033[0m' + +function prefix_stdout_stderr() { + exec > >(trap "" INT TERM; sed "s/^/`printf "$1"`/") + exec 2> >(trap "" INT TERM; sed "s/^/`printf "$1"`/" >&2) +} + +function run_frontend_backend() { + $1 & + pid_frontend=$! + + $2 & + pid_backend=$! + + trap_ctrlc() { + echo "" + kill $pid_frontend + echo "frontend exit code: $?" + kill $pid_backend + echo "backend exit code: $?" + } + + trap trap_ctrlc INT + + wait +} \ No newline at end of file diff --git a/dev.sh b/dev.sh index 6dfb557..06b2b59 100755 --- a/dev.sh +++ b/dev.sh @@ -1,15 +1,10 @@ #!/usr/bin/env bash -PURPLE='\033[0;35m' -CYAN='\033[0;36m' -NC='\033[0m' +set -e -function prefix_stdout_stderr() { - exec > >(trap "" INT TERM; sed "s/^/`printf "$1"`/") - exec 2> >(trap "" INT TERM; sed "s/^/`printf "$1"`/" >&2) -} +source ./common.sh -function start_frontend() { +function dev_frontend() { prefix_stdout_stderr "${PURPLE}frontend: ${NC}" cd ./frontend @@ -17,31 +12,13 @@ function start_frontend() { npm run dev } -function start_backend() { +function dev_backend() { prefix_stdout_stderr "${CYAN}backend: ${NC}" cd ./backend source venv/bin/activate - echo $(which python) - python main.py } -start_frontend & -pid_frontend=$! - -start_backend & -pid_backend=$! - -trap_ctrlc() { - echo "" - kill $pid_frontend - echo "frontend exit code: $?" - kill $pid_backend - echo "backend exit code: $?" -} - -trap trap_ctrlc INT - -wait +run_frontend_backend "dev_frontend" "dev_backend" diff --git a/setup.sh b/setup.sh new file mode 100755 index 0000000..94424eb --- /dev/null +++ b/setup.sh @@ -0,0 +1,42 @@ +#!/usr/bin/env bash + +set -e + +source ./common.sh + +function setup_frontend() { + prefix_stdout_stderr "${PURPLE}frontend: ${NC}" + + cd ./frontend + + echo "Installing dependencies..." + npm i + + echo "Done!" +} + +function setup_backend() { + prefix_stdout_stderr "${CYAN}backend: ${NC}" + + cd ./backend + + echo "Deleting old virtual environment..." + rm -rf ./venv + + echo "Deleting sqlite database..." + rm ./links.db + + echo "Creating new virtual environment..." + python3 -m venv venv + source venv/bin/activate + + echo "Installing dependencies..." + pip install -r requirements.txt + + echo "Creating a dummy sqlite database at 'backend/links.db'..." + python setup_db.py + + echo "Done!" +} + +run_frontend_backend "setup_frontend" "setup_backend" From 6a3c29da66389dba328d4d53616f416427cba18e Mon Sep 17 00:00:00 2001 From: Aditya Thakral Date: Mon, 15 Mar 2021 00:41:06 -0400 Subject: [PATCH 4/7] Fix error in setup script --- setup.sh | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/setup.sh b/setup.sh index 94424eb..efa25cb 100755 --- a/setup.sh +++ b/setup.sh @@ -24,7 +24,7 @@ function setup_backend() { rm -rf ./venv echo "Deleting sqlite database..." - rm ./links.db + rm ./links.db || echo "Nothing to delete ¯\_(ツ)_/¯" echo "Creating new virtual environment..." python3 -m venv venv From 3025ffce5cf6bac6f667ec3e4271bd719b728282 Mon Sep 17 00:00:00 2001 From: William Tran Date: Mon, 15 Mar 2021 17:33:18 -0400 Subject: [PATCH 5/7] Add a function to generate JSON from the DB --- backend/main.py | 21 +++++++++++++++++++++ 1 file changed, 21 insertions(+) diff --git a/backend/main.py b/backend/main.py index 0f45f9d..49e23da 100644 --- a/backend/main.py +++ b/backend/main.py @@ -1,9 +1,30 @@ from flask import Flask app = Flask(__name__) +import json +import sqlite3 +import os +DB_PATH = os.path.join(os.path.dirname(__file__), 'links.db') + @app.route('/') def hello_world(): return 'Hello, World!' + +def regen_JSON(): + """Gets links from DB and outputs them in JSON""" + con = sqlite3.connect(DB_PATH) + con.row_factory = sqlite3.Row + cur = con.cursor() + cur.execute('SELECT url, name FROM links ORDER BY position') + + links_list = [] + for row in cur.fetchall(): + d = dict(zip(row.keys(), row)) + links_list.append(d) + links_json = json.dumps(links_list, indent=4) + + con.close() + return links_json if __name__ == "__main__": app.run(debug=True) \ No newline at end of file From 08fc9eb3ab9574e3a89f650bf003a4db1bd77629 Mon Sep 17 00:00:00 2001 From: Adi Thakral Date: Wed, 17 Mar 2021 02:33:12 -0400 Subject: [PATCH 6/7] Add frontend and backend integration example --- .vscode/settings.json | 12 +++++++ assets/client-server-interaction.drawio | 2 +- assets/client-server-interaction.svg | 2 +- backend/main.py | 2 +- frontend/next.config.js | 29 +++++++++++++++ frontend/pages/hello-world.json | 3 ++ frontend/pages/hello-world.tsx | 48 +++++++++++++++++++++++++ frontend/utils/api.ts | 4 +++ 8 files changed, 99 insertions(+), 3 deletions(-) create mode 100644 frontend/next.config.js create mode 100644 frontend/pages/hello-world.json create mode 100644 frontend/pages/hello-world.tsx create mode 100644 frontend/utils/api.ts diff --git a/.vscode/settings.json b/.vscode/settings.json index e2e1b58..bea748a 100644 --- a/.vscode/settings.json +++ b/.vscode/settings.json @@ -2,6 +2,18 @@ "typescript.tsdk": "frontend/node_modules/typescript/lib", "eslint.format.enable": true, "eslint.codeActionsOnSave.mode": "all", + "[javascript]": { + "editor.formatOnSave": false, + "editor.codeActionsOnSave": { + "source.fixAll.eslint": true + } + }, + "[javascriptreact]": { + "editor.formatOnSave": false, + "editor.codeActionsOnSave": { + "source.fixAll.eslint": true + } + }, "[typescript]": { "editor.formatOnSave": false, "editor.codeActionsOnSave": { diff --git a/assets/client-server-interaction.drawio b/assets/client-server-interaction.drawio index 75995a7..cb756fc 100644 --- a/assets/client-server-interaction.drawio +++ b/assets/client-server-interaction.drawio @@ -1 +1 @@ -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 \ No newline at end of file +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 \ No newline at end of file diff --git a/assets/client-server-interaction.svg b/assets/client-server-interaction.svg index b308b42..0784156 100644 --- a/assets/client-server-interaction.svg +++ b/assets/client-server-interaction.svg @@ -1,3 +1,3 @@ -
Links editor page
Links editor page
caffeine
caffeine
Response /srv/www-csc-links/index.html
Response /srv/www-csc-links/index.html
GET /
GET /
Links page
Links page
GET /links.json
GET /links.json
Response /srv/www-csc-links/links.json (does not include click count)
Response /srv/www-csc-links/links.json (does not include click co...
Consider / to be https://csclub.uwaterloo.ca/links
Consider / to be https://csclub.uwaterloo.ca/...
ONLY when a link is clicked:
POST /api/click with { "url": <url>, "name": <name> } as payload
ONLY when a link is clicked:...
200 OK
200 OK
Backend
(python)
Backend...
GET /editor/links (authenticated)
GET /editor/links (authenticated)
Response /srv/www-csc-links/editor/index.html
Response /srv/www-csc-links/editor/index.html
Dynamically generated links with click count
Dynamically generated links with click count
GET /editor (authenticated)
GET /editor (authenticated)
sqlite
sqlite
POST /editor/links (authenticated) with updated JSON recvd from /editor/links
POST /editor/links (authenticated) with updated JSON recvd from /editor...
200 OK
200 OK
Viewer does not support full SVG 1.1
\ No newline at end of file +
Links editor page
Links editor page
caffeine
caffeine
Response /srv/www-csc-links/index.html
Response /srv/www-csc-links/index.html
GET /
GET /
Links page
Links page
GET /links.json
GET /links.json
Response /srv/www-csc-links/links.json (does not include click count)
Response /srv/www-csc-links/links.json (does not include click co...
Consider / to be https://csclub.uwaterloo.ca/links
Consider / to be https://csclub.uwaterloo.ca/...
ONLY when a link is clicked:
POST /api/click with { "url": <url>, "name": <name> } as payload
ONLY when a link is clicked:...
200 OK
200 OK
Backend
(python)
Backend...
GET /api/editor/links (authenticated)
GET /api/editor/links (authenticat...
Response /srv/www-csc-links/editor/index.html
Response /srv/www-csc-links/editor/index.html
Dynamically generated links with click count
Dynamically generated links with click count
GET /editor (authenticated)
GET /editor (authenticated)
sqlite
sqlite
POST /api/editor/links (authenticated) with updated JSON recvd from /api/editor/links
POST /api/editor/links (authenticated) with updated JSON recvd from /ap...
200 OK
200 OK
Viewer does not support full SVG 1.1
\ No newline at end of file diff --git a/backend/main.py b/backend/main.py index 49e23da..3ceebe7 100644 --- a/backend/main.py +++ b/backend/main.py @@ -8,7 +8,7 @@ DB_PATH = os.path.join(os.path.dirname(__file__), 'links.db') @app.route('/') def hello_world(): - return 'Hello, World!' + return 'Hello from backend!' def regen_JSON(): """Gets links from DB and outputs them in JSON""" diff --git a/frontend/next.config.js b/frontend/next.config.js new file mode 100644 index 0000000..b5619f4 --- /dev/null +++ b/frontend/next.config.js @@ -0,0 +1,29 @@ +// @ts-check + +/* eslint-disable @typescript-eslint/no-var-requires */ + +// eslint-disable-next-line no-undef +const { PHASE_DEVELOPMENT_SERVER } = require("next/constants"); + +const devConfig = { + async rewrites() { + return [ + { + source: "/api", + destination: "http://localhost:5000", + }, + { + source: "/api/:slug", + destination: "http://localhost:5000/:slug", + }, + ]; + }, +}; + +const prodConfig = { + basePath: "/links", +}; + +// eslint-disable-next-line no-undef +module.exports = (phase) => + phase === PHASE_DEVELOPMENT_SERVER ? devConfig : prodConfig; diff --git a/frontend/pages/hello-world.json b/frontend/pages/hello-world.json new file mode 100644 index 0000000..c4040a6 --- /dev/null +++ b/frontend/pages/hello-world.json @@ -0,0 +1,3 @@ +{ + "greeting": "Hello from JSON" +} \ No newline at end of file diff --git a/frontend/pages/hello-world.tsx b/frontend/pages/hello-world.tsx new file mode 100644 index 0000000..a21debe --- /dev/null +++ b/frontend/pages/hello-world.tsx @@ -0,0 +1,48 @@ +import React from "react"; +import { GetStaticProps } from "next"; +import GreetingJSON from "./hello-world.json"; +import { fetchExample } from "utils/api"; + +interface Props { + greeting: string; +} + +export const getStaticProps: GetStaticProps = async () => { + return { + props: { greeting: GreetingJSON.greeting }, // will be passed to the page component as props + // Next.js will attempt to re-generate the page: + // - When a request comes in + // - At most once every second + revalidate: 1, + }; +}; + +function HelloWorld({ greeting }: Props): JSX.Element { + const [greetings, setGreetings] = React.useState([greeting]); + + const getMoreGreetings = async () => { + const greetingFromBackend = await fetchExample(); + setGreetings([ + ...greetings, + `"${greetingFromBackend}" --- ${new Date().toISOString()}`, + ]); + }; + + return ( +
+ +
    + {greetings.map((greeting) => ( +
  1. {greeting}
  2. + ))} +
+
+ ); +} + +export default HelloWorld; diff --git a/frontend/utils/api.ts b/frontend/utils/api.ts new file mode 100644 index 0000000..771e2ac --- /dev/null +++ b/frontend/utils/api.ts @@ -0,0 +1,4 @@ +export async function fetchExample(): Promise { + const response = await fetch("/api"); + return await response.text(); +} From ab544fc759f5d3af72645ae275c7c05af743706c Mon Sep 17 00:00:00 2001 From: Bonnie Peng Date: Mon, 22 Mar 2021 15:35:13 -0400 Subject: [PATCH 7/7] Add the Link component --- frontend/components/Link/index.tsx | 7 - frontend/components/Links/index.tsx | 43 ++++ frontend/components/index.ts | 2 +- frontend/package-lock.json | 315 ++++++++++++++++++++++++++-- frontend/package.json | 2 +- frontend/pages/_app.tsx | 12 +- frontend/pages/index.tsx | 77 +------ frontend/public/csc_logo.png | Bin 0 -> 97816 bytes frontend/tailwind.config.js | 20 +- 9 files changed, 377 insertions(+), 101 deletions(-) delete mode 100644 frontend/components/Link/index.tsx create mode 100644 frontend/components/Links/index.tsx create mode 100644 frontend/public/csc_logo.png diff --git a/frontend/components/Link/index.tsx b/frontend/components/Link/index.tsx deleted file mode 100644 index 230046d..0000000 --- a/frontend/components/Link/index.tsx +++ /dev/null @@ -1,7 +0,0 @@ -import React from "react"; - -const Link: React.FC = () => { - return
; -}; - -export default Link; diff --git a/frontend/components/Links/index.tsx b/frontend/components/Links/index.tsx new file mode 100644 index 0000000..9750d69 --- /dev/null +++ b/frontend/components/Links/index.tsx @@ -0,0 +1,43 @@ +import React from "react"; + +const styles = { + fontFamily: "Karla", +}; + +interface Link { + name: string; + url: string; +} +interface LinkProps { + links: Link[]; +} + +const Links: React.FC = ({ links }) => { + return ( +
+ CSC Logo +

@uwcsclub

+
    + {links.map(({ name, url }) => ( +
  • + + {name} + +
  • + ))} +
+
+ ); +}; + +export default Links; diff --git a/frontend/components/index.ts b/frontend/components/index.ts index 3e28826..a6f1ea8 100644 --- a/frontend/components/index.ts +++ b/frontend/components/index.ts @@ -1,3 +1,3 @@ -export { default as Link } from "./Link"; +export { default as Links } from "./Links"; export { default as EditLink } from "./EditLink"; export { default as Preview } from "./Preview"; diff --git a/frontend/package-lock.json b/frontend/package-lock.json index 989270e..fbaeb7e 100644 --- a/frontend/package-lock.json +++ b/frontend/package-lock.json @@ -677,6 +677,182 @@ "unist-util-find-all-after": "^3.0.2" } }, + "@tailwindcss/postcss7-compat": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/@tailwindcss/postcss7-compat/-/postcss7-compat-2.0.3.tgz", + "integrity": "sha512-R43aiSzwlybDMhDld8vkSIKPSLXxbbmotZ+I2GIrX+IzFNy9JAByC7Ncf9A81Dg0JLBWHY5m769lBbBnJCF8cw==", + "dev": true, + "requires": { + "@fullhuman/postcss-purgecss": "^3.1.3", + "autoprefixer": "^9", + "bytes": "^3.0.0", + "chalk": "^4.1.0", + "color": "^3.1.3", + "detective": "^5.2.0", + "didyoumean": "^1.2.1", + "fs-extra": "^9.1.0", + "html-tags": "^3.1.0", + "lodash": "^4.17.20", + "modern-normalize": "^1.0.0", + "node-emoji": "^1.8.1", + "object-hash": "^2.1.1", + "postcss": "^7", + "postcss-functions": "^3", + "postcss-js": "^2", + "postcss-nested": "^4", + "postcss-selector-parser": "^6.0.4", + "postcss-value-parser": "^4.1.0", + "pretty-hrtime": "^1.0.3", + "reduce-css-calc": "^2.1.8", + "resolve": "^1.19.0" + }, + "dependencies": { + "ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, + "requires": { + "color-convert": "^2.0.1" + } + }, + "autoprefixer": { + "version": "9.8.6", + "resolved": "https://registry.npmjs.org/autoprefixer/-/autoprefixer-9.8.6.tgz", + "integrity": "sha512-XrvP4VVHdRBCdX1S3WXVD8+RyG9qeb1D5Sn1DeLiG2xfSpzellk5k54xbUERJ3M5DggQxes39UGOTP8CFrEGbg==", + "dev": true, + "requires": { + "browserslist": "^4.12.0", + "caniuse-lite": "^1.0.30001109", + "colorette": "^1.2.1", + "normalize-range": "^0.1.2", + "num2fraction": "^1.2.2", + "postcss": "^7.0.32", + "postcss-value-parser": "^4.1.0" + } + }, + "chalk": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.0.tgz", + "integrity": "sha512-qwx12AxXe2Q5xQ43Ac//I6v5aXTipYrSESdOgzrN+9XjgEpyjpKuvSGaN4qE93f7TQTlerQQ8S+EQ0EyDoVL1A==", + "dev": true, + "requires": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + } + }, + "color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, + "requires": { + "color-name": "~1.1.4" + } + }, + "color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true + }, + "has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "dev": true + }, + "postcss": { + "version": "7.0.35", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.35.tgz", + "integrity": "sha512-3QT8bBJeX/S5zKTTjTCIjRF3If4avAT6kqxcASlTWEtAFCb9NH0OUxNDfgZSWdP5fJnBYCMEWkIFfWeugjzYMg==", + "dev": true, + "requires": { + "chalk": "^2.4.2", + "source-map": "^0.6.1", + "supports-color": "^6.1.0" + }, + "dependencies": { + "ansi-styles": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", + "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", + "dev": true, + "requires": { + "color-convert": "^1.9.0" + } + }, + "chalk": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", + "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", + "dev": true, + "requires": { + "ansi-styles": "^3.2.1", + "escape-string-regexp": "^1.0.5", + "supports-color": "^5.3.0" + }, + "dependencies": { + "supports-color": { + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", + "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", + "dev": true, + "requires": { + "has-flag": "^3.0.0" + } + } + } + }, + "color-convert": { + "version": "1.9.3", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", + "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", + "dev": true, + "requires": { + "color-name": "1.1.3" + } + }, + "color-name": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", + "integrity": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=", + "dev": true + }, + "has-flag": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", + "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=", + "dev": true + }, + "supports-color": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-6.1.0.tgz", + "integrity": "sha512-qe1jfm1Mg7Nq/NSh6XE24gPXROEVsWHxC1LIx//XNlD9iw7YZQGjZNjYN7xGaEG6iKdA8EtNFW6R0gjnVXp+wQ==", + "dev": true, + "requires": { + "has-flag": "^3.0.0" + } + } + } + }, + "source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "dev": true + }, + "supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dev": true, + "requires": { + "has-flag": "^4.0.0" + } + } + } + }, "@types/json-schema": { "version": "7.0.7", "resolved": "https://registry.npmjs.org/@types/json-schema/-/json-schema-7.0.7.tgz", @@ -1579,7 +1755,6 @@ "version": "7.0.3", "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.3.tgz", "integrity": "sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==", - "dev": true, "requires": { "path-key": "^3.1.0", "shebang-command": "^2.0.0", @@ -3197,8 +3372,7 @@ "isexe": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", - "integrity": "sha1-6PvzdNxVb/iUehDcsFctYz8s+hA=", - "dev": true + "integrity": "sha1-6PvzdNxVb/iUehDcsFctYz8s+hA=" }, "isobject": { "version": "2.1.0", @@ -4266,8 +4440,7 @@ "path-key": { "version": "3.1.1", "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz", - "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==", - "dev": true + "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==" }, "path-parse": { "version": "1.0.6", @@ -4326,12 +4499,12 @@ } }, "postcss": { - "version": "8.2.6", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.2.6.tgz", - "integrity": "sha512-xpB8qYxgPuly166AGlpRjUdEYtmOWx2iCwGmrv4vqZL9YPVviDVPZPRXxnXr6xPZOdxQ9lp3ZBFCRgWJ7LE3Sg==", + "version": "8.2.7", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.2.7.tgz", + "integrity": "sha512-DsVLH3xJzut+VT+rYr0mtvOtpTjSyqDwPf5EZWXcb0uAKfitGpTY9Ec+afi2+TgdN8rWS9Cs88UDYehKo/RvOw==", "dev": true, "requires": { - "colorette": "^1.2.1", + "colorette": "^1.2.2", "nanoid": "^3.1.20", "source-map": "^0.6.1" }, @@ -4391,13 +4564,41 @@ } }, "postcss-js": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/postcss-js/-/postcss-js-3.0.3.tgz", - "integrity": "sha512-gWnoWQXKFw65Hk/mi2+WTQTHdPD5UJdDXZmX073EY/B3BWnYjO4F4t0VneTCnCGQ5E5GsCdMkzPaTXwl3r5dJw==", + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/postcss-js/-/postcss-js-2.0.3.tgz", + "integrity": "sha512-zS59pAk3deu6dVHyrGqmC3oDXBdNdajk4k1RyxeVXCrcEDBUBHoIhE4QTsmhxgzXxsaqFDAkUZfmMa5f/N/79w==", "dev": true, "requires": { "camelcase-css": "^2.0.1", - "postcss": "^8.1.6" + "postcss": "^7.0.18" + }, + "dependencies": { + "postcss": { + "version": "7.0.35", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.35.tgz", + "integrity": "sha512-3QT8bBJeX/S5zKTTjTCIjRF3If4avAT6kqxcASlTWEtAFCb9NH0OUxNDfgZSWdP5fJnBYCMEWkIFfWeugjzYMg==", + "dev": true, + "requires": { + "chalk": "^2.4.2", + "source-map": "^0.6.1", + "supports-color": "^6.1.0" + } + }, + "source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "dev": true + }, + "supports-color": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-6.1.0.tgz", + "integrity": "sha512-qe1jfm1Mg7Nq/NSh6XE24gPXROEVsWHxC1LIx//XNlD9iw7YZQGjZNjYN7xGaEG6iKdA8EtNFW6R0gjnVXp+wQ==", + "dev": true, + "requires": { + "has-flag": "^3.0.0" + } + } } }, "postcss-less": { @@ -4444,12 +4645,41 @@ "dev": true }, "postcss-nested": { - "version": "5.0.4", - "resolved": "https://registry.npmjs.org/postcss-nested/-/postcss-nested-5.0.4.tgz", - "integrity": "sha512-/dimXVqdUAVS2ZiIX0uvyk9UCI825y6LW4TnjG51JTKF89CcorHPAjTUGPF70k2wlQYts5OzfnhYMgfGfHCClQ==", + "version": "4.2.3", + "resolved": "https://registry.npmjs.org/postcss-nested/-/postcss-nested-4.2.3.tgz", + "integrity": "sha512-rOv0W1HquRCamWy2kFl3QazJMMe1ku6rCFoAAH+9AcxdbpDeBr6k968MLWuLjvjMcGEip01ak09hKOEgpK9hvw==", "dev": true, "requires": { - "postcss-selector-parser": "^6.0.4" + "postcss": "^7.0.32", + "postcss-selector-parser": "^6.0.2" + }, + "dependencies": { + "postcss": { + "version": "7.0.35", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.35.tgz", + "integrity": "sha512-3QT8bBJeX/S5zKTTjTCIjRF3If4avAT6kqxcASlTWEtAFCb9NH0OUxNDfgZSWdP5fJnBYCMEWkIFfWeugjzYMg==", + "dev": true, + "requires": { + "chalk": "^2.4.2", + "source-map": "^0.6.1", + "supports-color": "^6.1.0" + } + }, + "source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "dev": true + }, + "supports-color": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-6.1.0.tgz", + "integrity": "sha512-qe1jfm1Mg7Nq/NSh6XE24gPXROEVsWHxC1LIx//XNlD9iw7YZQGjZNjYN7xGaEG6iKdA8EtNFW6R0gjnVXp+wQ==", + "dev": true, + "requires": { + "has-flag": "^3.0.0" + } + } } }, "postcss-resolve-nested-selector": { @@ -4728,6 +4958,25 @@ "glob": "^7.0.0", "postcss": "^8.2.1", "postcss-selector-parser": "^6.0.2" + }, + "dependencies": { + "postcss": { + "version": "8.2.7", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.2.7.tgz", + "integrity": "sha512-DsVLH3xJzut+VT+rYr0mtvOtpTjSyqDwPf5EZWXcb0uAKfitGpTY9Ec+afi2+TgdN8rWS9Cs88UDYehKo/RvOw==", + "dev": true, + "requires": { + "colorette": "^1.2.2", + "nanoid": "^3.1.20", + "source-map": "^0.6.1" + } + }, + "source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "dev": true + } } }, "querystring": { @@ -5143,7 +5392,6 @@ "version": "2.0.0", "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz", "integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==", - "dev": true, "requires": { "shebang-regex": "^3.0.0" } @@ -5151,8 +5399,7 @@ "shebang-regex": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz", - "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==", - "dev": true + "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==" }, "shell-quote": { "version": "1.7.2", @@ -5904,6 +6151,25 @@ "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", "dev": true }, + "postcss-js": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/postcss-js/-/postcss-js-3.0.3.tgz", + "integrity": "sha512-gWnoWQXKFw65Hk/mi2+WTQTHdPD5UJdDXZmX073EY/B3BWnYjO4F4t0VneTCnCGQ5E5GsCdMkzPaTXwl3r5dJw==", + "dev": true, + "requires": { + "camelcase-css": "^2.0.1", + "postcss": "^8.1.6" + } + }, + "postcss-nested": { + "version": "5.0.4", + "resolved": "https://registry.npmjs.org/postcss-nested/-/postcss-nested-5.0.4.tgz", + "integrity": "sha512-/dimXVqdUAVS2ZiIX0uvyk9UCI825y6LW4TnjG51JTKF89CcorHPAjTUGPF70k2wlQYts5OzfnhYMgfGfHCClQ==", + "dev": true, + "requires": { + "postcss-selector-parser": "^6.0.4" + } + }, "supports-color": { "version": "7.2.0", "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", @@ -6254,6 +6520,14 @@ "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-4.0.2.tgz", "integrity": "sha512-YQ+BmxuTgd6UXZW3+ICGfyqRyHXVlD5GtQr5+qjiNW7bF0cqrzX500HVXPBOvgXb5YnzDd+h0zqyv61KUD7+Sg==" }, + "webpack-merge": { + "version": "4.2.2", + "resolved": "https://registry.npmjs.org/webpack-merge/-/webpack-merge-4.2.2.tgz", + "integrity": "sha512-TUE1UGoTX2Cd42j3krGYqObZbOD+xF7u28WB7tfUordytSjbWTIjK/8V0amkBfTYN4/pB/GIDlJZZ657BGG19g==", + "requires": { + "lodash": "^4.17.15" + } + }, "whatwg-url": { "version": "7.1.0", "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-7.1.0.tgz", @@ -6268,7 +6542,6 @@ "version": "2.0.2", "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==", - "dev": true, "requires": { "isexe": "^2.0.0" } diff --git a/frontend/package.json b/frontend/package.json index 38cbfea..49298d6 100644 --- a/frontend/package.json +++ b/frontend/package.json @@ -32,7 +32,7 @@ "eslint-plugin-react": "^7.22.0", "eslint-plugin-react-hooks": "^4.2.0", "husky": "^5.1.3", - "postcss": "^8.2.6", + "postcss": "^8.2.7", "prettier": "^2.2.1", "stylelint": "^13.11.0", "stylelint-config-standard": "^20.0.0", diff --git a/frontend/pages/_app.tsx b/frontend/pages/_app.tsx index 9f42e95..6229aa8 100644 --- a/frontend/pages/_app.tsx +++ b/frontend/pages/_app.tsx @@ -1,9 +1,19 @@ import type { AppProps } from "next/app"; import React from "react"; import "styles/globals.css"; +import Head from "next/head"; const MyApp: React.FC = ({ Component, pageProps }) => ( - + <> + + @uwcsclub | LinkList + + + + ); export default MyApp; diff --git a/frontend/pages/index.tsx b/frontend/pages/index.tsx index 545b3fb..22b6188 100644 --- a/frontend/pages/index.tsx +++ b/frontend/pages/index.tsx @@ -1,84 +1,23 @@ import React from "react"; -import Head from "next/head"; import { GetStaticProps } from "next"; import styles from "styles/Home.module.css"; +import { Links } from "components"; + +// TODO: change +const API = "https://api.thedogapi.com/v1/breeds?limit=10&page=0"; export const getStaticProps: GetStaticProps = async () => { - // TODO: Fetch links here + // fetch data here + const data = await fetch(API).then((res) => res.json()); return { - props: { links: [] }, // will be passed to the page component as props - // Next.js will attempt to re-generate the page: - // - When a request comes in - // - At most once every second + props: { links: data }, // will be passed to the page component as props revalidate: 1, }; }; const Home: React.FC = ({ links }: any) => { - console.log({ links }); - - // TODO: Remove starter code - return ( - - ); + return ; }; export default Home; diff --git a/frontend/public/csc_logo.png b/frontend/public/csc_logo.png new file mode 100644 index 0000000000000000000000000000000000000000..a751f0b8b42a70408b027a3d0b0bf00ecadb2c58 GIT binary patch literal 97816 zcmYg&Wk8he^YyYWjnb{;64Ic6(jqC{CEZAfbc0BDm$Y;*-AH%0Al=;!{~LY$z3&IV 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 EB*2{=H zl&@YxpRw;Dsx4{gsEP~NNxax{;23AbMoNYl!psZj(WA>9nA(S*3gHOHTbnmx-+}!I zYurfI2-n!NE3yZgKa#jy8Id96By9qc|2~WvFAqoGrX+1<<@$#?||S zl1tb%elT}gXDy~A??Moo{zusZP0 z5pN@)X%o16c?*@3wsv2#1TYfClAoiMCd^OIKwNwrRzA$P&2i>~^2Oei1PuRh7NXm? zWun~toAW%XQ*^;HFvp(;)}wn&dPe&kehkrB^u709Ozi1+ z&cw7|c4EW!?TBj8Tvdyug*7>zHEP_IowiISv8Ijc88WM}_(B5yoHbwQR=`Kbobh0J z_JPH-QB+!rdSQG@n|{XzAT(2iD#F;{T_%dfUY{FTmYs{>z(D-))LYI(YLW?bGnq^U z9XodHc<|uCM2-Yqx^%hi_uqg2%WAcHn8+kj2Oly{fec9xe)8i!G>MNvxtZ;`VqfJ+ ztFB-mb)H3p0aR$Id|ocE#FfjJv2*N0ykFp)T^UpY^5TkLkerc)pdday$Woh)o~WF3 zq0=%a?lLa4Z-8jiIzsz`+#G~OgyYMhE@0@H?d9Dk&Vzqs3_RUPD-s4>i6Sjmq{ac3 zLS8f?S!A6vPaMIIQ^z6Lx8~LW-6(BNbxcBjAs(AHlk42BY>6SCxTk$*#+@t5{W8iTpFC@aMb_xEnZ%6URPhmr?JcZhRa(Yt^bohM{^ooRJ1mAMt5I5=}XQ ziO&whgUwqx9RzbEhM^gA~Q$&J!FaDOe@xUJ2aND>4R+jb^FvsXA{& zn!R2+dlA1*S>Q|qpsiM`)nqc6D(|`Hp4<2A*>i*=MR0I%ubiBmZC0z*Vlp{T|N18v z??FLX1(zP=8~@3>DH~I^#G_F}LzS_9jn22kvrI`!#7hs}ga6$g=P-)T7){h?$+oMH z{TRW~aqw`LMj?oJNoc1mPW)gSwhDBmGew1XH4|}EK{D|{D4-ybl;l%KvFNQ~Xcxuz z*>UEmA$`AH=Th+A(v^sA(Mr44P!+}ENoRL#3qxT&-XQcPDcKgynqtwQ-q*`Q4*9!@ zTX$jCU;7c-u%X5dW!ot#T_;Y95*kq(uBqs`bLe|-SBH#V(bpWa^(Xwg?@xp@inrMp zOPfLLJ72QG5QQ=)G|Wv)LyM+Ov24&|68LgRZmixz-}m7Zl)?(Xpg_(clVK#A-Q1=7 z7}6h{UYGAC^ziUN(!ryc{M^fUsQIl<18gaV3JD46otvAxoqP2oM~*z+wr$&0RaI4H zcXxM(9`Z~L&b7)a^qKrU!ox$k-GeN+(n9C9SyMxZHEJZddk7c5Qf@|RSt+)UdXN`d zCy!pyS#0YMCt~6H?TCowL8a=DfmJ?D$ffp}8EdjElpvf&R0pAb@uf>}_wvD}R|UE| zdN|g|ivxIj{capTa|R8~09E+R>96n)Bq;@oCfpeK1l77dA^aj^T;E5U+ZAf4gQ1Ij<05v9ePOLd#k zDcNG!;9XJgXru|RmE&q^CicEBG#zyUXPCiIBTXjL915`J0(i$_u~fOaxjB4`2EuTo z*Br*d3mJ$Ck_u0iY+%!K*J2<$-D@c@AYNE{N;0-h9ts~%cc&Lv)^qMP;~Uhj8-O}o zb5YwV5*A!>U`wwvvqDJq6iQj88CMH(v3>k=f)7mlxmQ;OImY>v?uiA(cyh)^h-%SB zKTRdjP+JumG43o)r1Ob!N;`WRuRk&nkKRg}Y&v&JmW==`-G2y6)^9*;>oy=YCHjZ4 zRH31Ci(mptfH3vQ5v-py5m5pD4oi2+FK2Rd@z~V&#qRF*B3P0tHqx$vt_<0Lq#j-5 z;pu_Qa~II1LkE1&Z=hoc{|$P|g@65mJ6TeJGvp#@PcaHV zqpPiq5HONX{w%Gi#AO#MZf6DcvCp@ou(%k3_3AMmy_&u<*%JYm_E=(3$ZXVM5l~xH zR0v-`f2@7c^$dNVnV-U|PF?uauB{&-WPqwZys|F~ERf*(yq!FbIWIqpyW*oA-q0IS z=(PT7_k~1^TlOU)nv-a)vIUIZl_cY$e=m(SU@RKp_42YZlxJmN=g1r0ng9SG07*na zROCrc5p7|0$lYT{p-yZJ*Rp{>s>hS+E#EAqrJY8~@&&@n>8H-(%|{-^6K(k+)Q${V zjqoyk$NlNacxk~bM6_+m>ur^tw4TnCj+~39sk30N1R7lMhEBZ`ZiGT*d@b+|5L=KHYT0xLa!vB>!3w1yiR|j{q%%fD6DB@!Tzc`*UqJKupReR?{){!qTa zi$AQxi4!Lg92+A>!R>9n(Cvn=NgcMqG38l4nv$Q9fta{>eDiS49F~2f7n_yWZj(pC z6w&~->eLo*BbYT6$klH^YQs5TOFx)yXGCvgo;-&!k3WrvZ|UIh?HU*imE5>-<7TE2 zBSwVIo;~}B)oKlONh9;&VMDrHeDxkJIGX^rqJVe5jNY(zvw;j70V zF!B?JKZlL93|g{+i&XoO_6(9qvh$AWGwr#4>;=iWCK72mejFda@fz9-JMNqz(n1}E zLmBCKasCI0Y|~n|CziG=tRI(^FA9I2vKo}okff_T%C6$)5#yX9GFTmfoBYdWY}mB} z(JfoRY_4S66pL`kHqg}qSHcspOT*}J;--;l$XOSYad*etF~9dC)p_KadM<4?nmuyl z$abcI0|&NTzkdB*i^bya=H|xgked1en$JazYTo5*cxc*M#K*CHm~5x1_zN2G-i33N z$V-s;(h4(5ORr+v==%i$mHJ{i6fvvuu+$4$wEF}$>^X?ANLqiT09Xo|siCS=ccsel zvp`EB`doUjARl3&q4;8Gk7_)*bDTPE;~wlkaS{#4cpMw)YZ-qFO-Hp9CM`kL+m1kG zg$&BgO1yxV9_)w5+PlW?LD>wwcg7&7c?-CC(5^N{^oLx}sGU5@liJrJYKEi-D{^zN zW72z01p-*w_MAKsroj5}@vAFTWAgOS=2y0js7@9_ChFSJbPl|dHZMnxVdJE!h^Xth zJ2R`J*{Iz-m!E^j=T1gQi)Lb^LJnE0&)?#6u*)I?SbQh_D@DcdHF;pmD`N#q?9jWv ztrm;L@TQ}NN}zlHiM$`mYfNUNkeNA1&X<&L!^_(>x7QZ_1sq4qN zu^ji24FKG}88x@+?HZtE4k3m{7ba25-)kDS7Rxu0=kz8qYaP=Iyq;fEjYX&NwK zK;I1;Hf%DR&F&r^9u6PD8nOCs97)VYWCPv<(Th&$t3xA-Qhg3FE=frjG2_{OxU+Gv zOQZ+cwitcqtc826+VHRCX}=W%vnui$AVHw@fR)Id)T0F|EmjnyC*!C0UPLVy=s89~ zCvD2wed2u74UdAC2cf$?-er7JVK<>(x`jpywCXL$XID!v!&*^+&2JBLsz{10U`x|j zGj{I5reA+Ucw@dPrPiUJa<%Q&Y5k5GGR~PeeF~GGc^ZA1H4*FZjDqo+ex6uvke!90 zGp8f=HZnp*e<*o%(yQ`!=hr}tAPRmmH}WYp6?fg%9<%!Nuj%Bv;m7Kh;oUmrb*PhT5_JEHh;Ne=9+S@}&1S2Ihlj%#3_beE?jQ`w7(;OifNHP83G z;R>gwUXarLa9S?j`D_J(;~J}@hPr_$VI6d56H=E%AFL6&=cK2iZHpH8aFFvAT5GL4 z>v=x6dIJ)ZlMxsi#@7kSXlVrGN_P;Ayvh|+U&mrLqc}MUYe$bnux}lw+f=}&342U> z4<4Z*@UFwZC!6Btjg-C7L-x{z0?3krSzHRTq^Jl!6=wYO?wFb?{x|%&s;m~co7}K3 zEfFs*n2qRmr2dWH8Oyk2s(;BIL`H5qG9aQ1-X$dW&Q3_efP1@R{9XMV9bmz1Hd{PA zJlqBi8Z^{2WXO;g)~s3c8U65vuij0#AT4kwi`8r9b_Do(!^g{AQC4LnW@Vc(*zUo+ zj0>~aOhEqSa`@Hq#COB*y$NqzGj2f(t^Y{K#^@#AA+~7?b)mKRsM7Xd`VsX_wbCNI zha`x&JP#oDQ{fDKMmp}h<5s-g<5q_kOrxtx`v$E!d=?+A+l0tQO{>=`fN`U=I9@M_ zPM?o!>U!}4UL0^A9&g{$MWVIRe7b&f7sBdY3qIUfBEbm|&5^W<_Pu-_Bq-Tiyn?t8 z{3=yky^8XzOzfOIk-wW0H^UsZ{yUr{qjMtVqjUHkNw#9O3`g6VydkU?8^t1urM#>Z zmDzdNJ#nhj)0pxZ8!@_P(!21A2!*##Eh$YXnmQeam&dz|y|w3Lu#HDa9hMvN(=!nj z6OFZxylhkr*4XnXmKri-$V;Zyty_;ccI?<}v)OF+AS13F@SqHmR#=9|=4?QGLsE;Q zd=cdbdLEDg^sN{>PMZ6tW#?i@mzH?BTQdiw;PpK+rTdaSr||8Ly@-ixgbH(&jf>If ziLI{g6t^nYL8DNTOPQQIg-_pp1}#GCy9~ghbf2+(AAa7uA5n4fsI0Q^KD~12s-`2) zf&zZIw7FjUQ*w)(3um$XomUVS7~m3gr!=o1ov+^+gQ&K*$_JF&prTqJB)ZzxHqy5Q ztX;~>Lr_QvRzLZ_>l0W9_!Xt|_a~2I);C`xym>R5r5?&xvIoDo^J#RP#$<$47$-Va z7UY~hi&Z1Xph*KVPt~E*Rn=bchgK{?UVa|@LxP!Rul!{U(N?@83v?A56vS{ae-7bo zuHk4|CAPi&zQY4silth$YBj=?pPxT9FfeeO)oL}HOeTj0SUXN;V#>F_Aug65^lMA8 z(eKn}@vATPyVjeJM@^E6Y&A6@G2uKud}RP`jR|x)p?qh}A2@k26+uA_bZb(iwNL{m zv6f40LasAkOaZdUn1`aQ4D6cp0(W^=P==yz0x)dV&q(JwxCaURZoqR?0s$MTLcKUa zRaF%VFP_7%Gsio;GBj#|#QLDD91Qzl0is&+Z3M)FNqey7Nc;Ns6EFNcVrd1qenANr zFsOTXyxa9IqmS)y=TSOeD!+!VBi=!5hxS|@7Jujfe$_WNH^lwh0vyML>&j=Gxx-UNP8yz|% z(fK57e{VJdYB_c%eTtyF{eAO(fSac${A+m`EVQN?O+kIZNQtRI z8;s`WWAgH@Byq0bsqk>TjINC_;F>+IG5HYgPTQ zX=DQ)klghr7E88(!!8Fu8`ImugaaOj!Z{1|jek_ekhgmGI)GnCqxbZ7F=r z(NxjZodB$yj8t^FwKXQ)f4jpdvVZ!Ztm3(QsFZapz9bQx^C}o+=>Iojw3jV9}UFwvvO7KJ81kbr1Ru4E%o(?p2<3M8ehEq zCYlEaIo%FIEx8!>{TiG-cMd^Ok%}mm+M26BF|Y=l9+D@%2!9u5XCpQ?7AuFiMn`u- zd#YE=77IvMcb~{GZd?&{veeY%%M3V>EAI3ZR#99GNrx--x47P94LE<>4Vh=piOY|=bblnuTuF!fo)-FIfi_&8i65U@Zh@Et3^@eIdX6EHPdCYiS`2U+Zjuu%fJ18M>p1)qBE zEQUYy03Pq)8U^kw4TdcL28DTfs238#rDa80$v_sRE&r{yRIpdIoopd7mdeUXlx3u2 z{pb~dwQPe= z`aR}2gwuXf8o^pi0M=Fjy$Of~KR?kQy=U)$Z!J&w*7DE+SaPpXuHyKA=@}Po zqVNDKBd-wM+BC%2``b7=@;1Eo)X@Kxn1eCPHzGWyAz-!G?Zm|2fQ|7frFXW5aSuYd|(0OUAsl z+YlMcH;6Mfa>zc=r4Pc^y0HkD442MJy@+3@k@7+3-m=av3Z?t!e;&iCpLZjyA*H*P zyP#N3l@^pzTzaaIRixzSB)U+PauMH-d<`Lfj$Mpul-b$zN#7~6;1d!KPj6Ch$R9GY za%mIWjRdrS04ov7Wg-Bpq@Vz`-Q2M8O`hMK`JnVJDKAHl@naBnOAClV3=FbJLu)`b!t zFTGR(&r7A)F?t5C(;YW*NCDQb1YrFQ;5J7GSP3~-Fzn;)h=~X`5Jj;Mu=oYG&qO3; zl9G~&4_~+sZKGW;lCp6339SG1FGR=2ajgRW3Bb~(wy>j+tOXOCDJ?gny!0}*j^wwj zJF`d68dItS-`n&%em`^sq0v037bEU;S0MM9307L~rfFXoigUlSZ-gq#ui;8|CU(C6 zuFKG!(mb!U3(tr;HU?nCbVDrQ$;9uLzWrUGZbHa}Y zvG2q=goK7xt6zTm`bx7@|l^FP8x3N^B8E49+3kyl2GUU6wyj-+y z5{J2i?sW8UvN5Zph|&%D{700Q6v3|^Z+O%PyGn8pCAU&c^h5>@e7|F-yKcOv_fF)rNeuMKI&6^%uF)$lKdCS)|Wi`nj`s=aC^8 z(x#Qu>ll`EpIi4GE+i%*FpPKLlmJUF=E||F=)2hf0tzRCoJo3NB^^127X}T+E4Sb2 zasZ3auIrRh@C*$WI=bseSPf+?D2+8h6}zCM+$QD734HqcDBKy<2()#C5ecec=TH_- zBmgS`K)j;@EUNsL{(1pl|8fd35kk{NU1Oo+;p-%~Y}Hc`#d^8i471sSO>YU26er%@ zqx7!HzaL+^6GfM!uDjf{^T!GhO^%VEE<9h!#NNdN&Hz;gFM+L<$WsAn&Xy@%K9u5hsWrT^kND5)xkZ@qe& z4xDBr(H4MWd0Yn-dw7v1uZJ-G`PcAZ(>Bfku#ySD$^{VQr~r#H{)|nhu;XY7qJv3M zB0s2-b1iMwQRyo{TbP|SVx+j9(Id?|nL9TJ= z@{s=%V4HIE2-Zy)hnRW+F3|&v^7{O}d$8)KEr@N|5@vIys8x;VXGsNDC!)^Ryyd2* z;kMSTvFL$8POQo0uf|3WA6vH!$;l}Q3=7d|I4Xy_%CwojQZ(`VYdZ z9qx7HNG&C0ApuxL00JBxV2xXQ1p6=KAu`Zc2;bXZP@W0c^EBoYD(h4j&f#h!E|np= zfiFIP#x+w_eP*vktvbG_LKx{TbKz6kiB_(3hdt&G)EF?Hn%L^f}( z8%Z%{=#59Qxak~u`3MdS#M-BxcPW5H=|1t7E!h0qE<`qK0<*@34vHXnstUB_4S;~B zwCJs99IZHo0Na9$Otfm&983BSb!4?7i(pj%@O0$2AgXgi{QPo&^%+8=8mbJfTmvj z?J|a*0xZ((v**O62#Smm#^lHeBnh8=rKW7bBpP_Zk!PVVS<{@<6fAgY2wH}_UhlCj zClfJe^#+8-HRcqV{eEp4JZ>vZDAZ`Nr;xuZE6uo)lYtGRhr`#)(EJr`KY8`U3 zvJnsz#Frsxs7`iApKbJA|)aWeRcO0v>{)&*8SY3c6tH)9d*Oq}<8Hy5`xze@+%)*n?%CDB8 z{K^$<9mRW>u8^u?d4KTIRVXPbLEZX%j~+Sbmk23-C1y{nBLkdUD7HD~(k9v22#tuq z>L(s?bbDj?`6;g-%1FoXj~61ec~cdhm8hy6!BXGM*g9~diLP9M`;}7sJYt+n@j3-q zt4|)n-0xN)teH`OrG{Mki!H2!!pS2Ur_#%p;8R|OpWmG56wZW011vF&4xq>M9SEr7 zg*x6mz~T;CTxYjTLTJ|QWPhfsyG_d` zDmrAj*(NHLdQ4_!0JA2 zE9&|A@Bm9(bp|QhRWcTo0W|rceTdL-I}^g1d9q`Zpl?VGWQ#VN5!a= zpB~M`Wl(N;69rCMD7`R00a*E2Y53x`M_m$NP1^DY_8vKopzug8e9v>Pkyx!nQT;JG zlFZPv`ML@dt`rx+-OUY~-gwHcG&$o5WYF_fvsn(XH278(Ary&W1Z2t2A&v`4hj;DR z0aJUsPEV%l04&j$zD^LUJ5@7vs_86vqy_^A9+GQT{OppCy1<{e# z*z!#7aILHimFYRyGkO011FZjAiLwza4q*8T0892@MnRUo@{==WB#SMA_L*R(-?5MzQ3DlYENMl>ydE-|oQ0k!6LNPb9a?=G_nrVCd&$J zIlqJhSQ)w4^Zva52U!2Lf~^+7qHd1vL+dk;o=B6{1Sy%h7;;xjmjqb(SFT~m>{SSf zP}g9|&4~UELb)TOUIXPP6l~?Br(o%8kD{Rqr3fkOKDK-l3iI<(FR%fs$nH!dh3?8o zimL1r@S0W5wo2;DO- zoX7Bi1MtLcZCwsv{gs-6H$MFYVNILz&2bfnEN3$CRR91W07*naRLW{#yNAhSg;m~V zS9MJq!Mc`_g;nT=T2bK*Ix)l?hL?E&4p6zy65OCjRLkAwvfh6 za5VmZfc2lKHT|2i0IS>NpHSbwj=Tnou9{*Cy6r2Ao zzPlA(y4Q7TuqeQ)Fk8_3{pARaisq*h2?skmL@t)q2p?-91tD5swOWvyk%mu)Ka3{a zXe8d#cjkljpdVQ9EjP@(jxU-2NV`lMsee##vYv&Z6{iGU5sy?b^f{@?7p-#`+yIBgVkc?b`o+XLB$Kz z0a`pAD8R7v}3g$dF0Jp^iyM)o9fTpPI8V1k&3;|KGvgWRAn#wlRH2?y*Q<(Ei zfSa2el20DPf>(#(_E>&Yj4J`GYi2Y0&zOf=4T9lS%SQ!hZP8y!(bAQ%2dtPCv|5mT z`V{uen#K(|cNMx*fVF7fA6Wk5kBDvE8se@W6>d(ih8bbGyynF=u2jGWi z-ZK2mHSk1g=$vQR^GjbGKx*L?1c{?^lsR_RVAu-L>nlIyH>5XEdTu`MXcmJhE;TBL zr!6^p&iEGo0rlbS;bvfyG|zWD^=%m$+Yv0T@HgrI*!vFXDyr@M@22-2(g;aN=+Xrn zDk5MSU`FWC8Ur-dLyLY@?U3W&diy1XM!NP zH~(4dttU6<&Yjt3pS{1`k73*$H{yn#$!!AIQpK8Ac?x$-e-9nH_f!qPRr;!A4k>xT zj_CK22`8l&kxD}WU}f*$gN2ixMQUVNo1i(N4W)a2^(ovn_iaQZcZ7$hr%I+%jwMOd zB8*a51}y_vWILJ~>d{bCh;^^>7JXX*Sd>x|SFggRZQBsvDGg-kwH#o{w?Q)BCk z_S$lWE9fXHMtuABSac^p6OZ1z6)N*{@<{((u@Jit9zeSee6Ky}a$+R2GKTcT5{e19 zZ!mvj#EMK4SUfDKEG$M+QWCx&&Ch^z(TftveTF?h|J^Pe$ge_tn7_mjs*@#D`WQk1 zQC!MwALXY6V3A?ZJvu~V{@8&o$_p)jY&JxA{aY*G<>iGCe|~g|-X(2?S?gV~jya&D zxFA0(1CQM@40jCZ+$NMgRjhwz6=3{F-yo@55AMC?D%-5}uCoUk=Y`y#2t=#hj>;2R zSUT}3ga`Pw8AWe%IJofW-hv`LI{!U%=phHTEWfi}EK!M&q<1!Dp#@<=E@V<&1z(39 z%bsaFa|l^5^Vm;Iap>4lM8)%7Q?VnZa<&!&f(X5Z(er0y$Z-W7dHLwoqdPvlc}&X% zq>FxorTguRK1D%6KEh*TGysi}Wn#>*%kcP>yux$$a20*WMLUn+!=G0n zz9Si70QNu$zagh1tKgk)ffM>` zrog)#9o4=mrODCKs%3IlLifU~Y+QZurI>Ne^@h^ST^6usdc-Ghpt_+R!I2Rfo!PbZ zqn0!>q(8TX{5Q#P@BAajaNi9#v6*ZB#)j>?5S^fO-BWs+hgsrIX;l+4 zf{%DoPFGjM%f}1Lp17;cD0-Gd-`=tfi#KdWd`gP0ro~tu=WAy<*ERST9`j<&A|u1>_DfKL^N4#9L2S((De_ev`sQL(F_yP z`=4%TMuXLkRnPGUu`K{BmYpa4-{07NI2*C;qPYX1v?;aoA55Vu%|lGS$+_@LiqSnS z3G;7jJ3W~Q-Je{%0U24@h-jyD-BYnA(U#KwpY8zx3sn_m2#t)w;`?uDlK|_nCBGme zGZW#lv1*H6QGF@)i4&{{-q|9|Xlo(BI+=MKHxIrN6NX$NCLp&ub#j&;hy_>!pMMT9 z-MhiVn{U4(ci|Z+c{6fGy@pftd-me#+wZ{r{V!@Wbf>!XbW~r=&rMTR?hkDNFEBw z$=PtI2(Ny#5osNhK~htk51dqkEVGG_N_&TV??hfMHoZQUQ~YfqTtzmOzUMm|4&eWO z+m7Uv6p+4H%ENe8dty=fY5}TG*TK)<4@)1tu1zWYo8MoI=Ei!2gehG20t0KeYtYJY zS6lA9RiebTe6?(8K>>Pq>w-6LZ95h{E4)U${Rx^JKv0;x$*7iqQ~D59hMp`;sP7Hn zLRA^Z@YLv$xT8-m(0s6SE>zF+4^Y{1q_hP0&6|t3?mZ;A!gyA-nvSy6G!ur^^2BgO zG>4C1+5->anzSyi>`7_SPExubC@#P~^QIxOPcJ89a-4%#)1E|8-Zj z3eqBYgPnv8UGSnU*@~L-60CpaejZ@C zacEXnR4{J=ynOu-5J-A4>E)m>UMz*>D0;PoF*saKqS9f@dI}uGV+fEYqob}Ggr}~& zu+8u|>q!|h=`{qC))>CN&V%3rmgO;&POYp-FBb6}79Bl;cb|9+{Sx@OlWjt_2!#bp z4<5jr?-wGzOBZk>&8c62<5w!fjq|XK6*PNe-XttOaugpv`7HXzC$t&5Q~vsT?>4;i z(+|v;96bu^dl0!@VZak-yK%CJMwaB?B{XkpXhdUS2{ule?dmN_D8SlG0M=>%*SIRc zqD)a#-GH(4*CRGM4Bj53Wq>n;-4cN1>;UuOsuTJ7n10U?T-K>=^kiZ^Sbt}gVB&&b z5Z|GLsHkZbkJ_81)%4Ox{Hgbmd}6mdP@J2MHB%pfua~D=3qi``1XSKU=Tihm#lY9g z%Yegqy0J;7&b+j`$*8171Avp68F=B2TQH(0pIqM-6g_><%(6;6F#iKYb?gXm7PWEc z$*`}!2(p~q%Wg+u`a!IjHWeX$zHNr?)KfQY!+NaP@*CHS$=Yny^sY)?EQz}{LsW_$ zee$y)|Awu(8K-hiV8x^<2qQhu+DI37Dv2Liu@L(X>_@w#4o)k>ot*<278cG6A1W7f z+GT>DI6vx6oq|_&9oD@#T`*5{`^p+Ajr09?3b57?fVCI^sYNA;OX>zM=lf9&eqThy z1SQVih_C=J1o#kz%YRXK8i;5CIr{;9gf8$3hsyJcigDNAUU=||wx@jZD^KITx0fP1 zE}je3QoEh%53`PBr-O2}dXbaxNp2QqKQIylllgokcUAgS;T$clz@u+}f!MSzPD9|5 za8p`|Jg;j(R(b}=GGmUbEBZ6i-lM*H4<+U02#bjpg@t||mR^P@|G9DxWFB;8Tlk9E z5<~@sVA;bjoY8Z)qAyV_wZvkx*}m}b@E~y(*92HhW8a(J_zj*O4ul1eo=gVhrfmQi zcfGb1uLH6Kyb*?9e{#YpPfUAI+$lJ16{6cgSU8yqM!wR%uUrr^RZ+hSM}}?NK1Vo`saaP!_&PAepZ__hmdU^Z%(ke z+$xstL#Dk1&zMN~2KYNka;L9IH%24UBYedFpTgLaH6dS`(@8Ya|-1Y#+*))SCfh5+j8>R@kdz%S1~ zASimiVXr%1EPvlL|6^D^JP;VdCb*mP&B|JmXl<1$RLC#lDrLFCg06UH|3z62bBNmJq>&`4LdpDX;ex$4z zW2U`~lmY#?By;xCp26YVNS1)H^Yg+P%ttfuM8aYUo{)ejYt-)OYjQC@utYbV~s zg;Uy^h5zKjKar7Fh<1^r7nVdTHW$meBiV@ljI|^nWFiPFs!t&_Bp8bxCMksOZ{a_@ za1HYFPa-rbN>Dn^0(;bIl-6*{S#M;H&aFrVVP$D4;^X4*U| z?R)f)=K(2cN9BzU^3)5#YD*l_wci5;$Btpl@M|#ca^7HW3m2vPm%IPMJ4+WMu{&Qq zX?&S6kU8n>)K^XhOlNN0iEm$;ihgk&T)Bdf$Yu^pm6w-Kvs`e&1uq;paA2<0YPEWi znI|rIQRet*M;_i;z5^+Vaa<1#-Ag>AwDe5h&B@<`+Orgp$tQ@D+@s^ij^fk*jYhZl zwv(emmC*Ye58|iab|F4d%9YSdaMy4oo8&n4K_(!YB)V^&&JSdDM_|i(Qm&o(DSU#% z5D?&J(1t`Jsg&=d9>h(ZP<%5$0TC#~AnBT)pOcNt`}f7Po7zs#G0ICDGqUl@=U*ef zYd4O+G(F&294sv4xK{84a_5C4TeDLNbO09LDj*%N{O2BA-?ej_Y0*GQ`O2DKv0>Xb z#5if}%B|(-$I1pt!pNnzIUwNW?S;(kJ22zX$8iG}inoI(|F&}7x%dm@=H()S8<9i$ z8uAQks%T8n<3+wJ{2jDBiR7r*tu~aVXJGBCa}ePl=+d&BVyWJ}dylt_9zFWeB}=iCyTSY;~CcmGl7fVuDL>T53m14}G z?)dMJE-psBGk;u~8?-*X0Ix0h8OdF`@}5H>Syb;(YJn{0z8Lz9$~e9SdB+dqt^eMM z{z>jx!AW_$rlAS9%=`#p?UT3?W=^*lw8Sv7-q|Q0A5v#_LHJMN!79u;j>m4k4tHMI zz3nObRU5JC@9l_7>8MjtrJ=Y**SW;Ex|0iJo)^i`v)inw%*w>V@y{V4lpp`)u089iu_2CDotgk~@RFpcwoux0!w+b&7Yc?xEf?iP#xkcfjbbK@JMRbWGy_on}llYUIL=S;U5?%=ud@Qa7qaES&(;@eZHEPs7OP4PF+8qE^L$e(>%vytX5h3vP-xK;5~3h>s1yw-McBJZ{t*PUXe2psArAwYev-X~tAu;k1DYLaCE@ z6Rw>y8R2QE@bLELNvVZUO~`OIVSzQbm4J(?fQI@yG#3_Q>tyYVdmlq3WT?RO^)it-h^9M-3pvYh!&=9f=W+@{fGAM2I%Gw}{+@h}8hN@Gi zvHm3?A=Ql=Uy2qdBlNGGy%c_dfe7-I_h({5RL&jEEbHmG^Vz);ET4)~HSqEE!?Gvb zJ3r{9Wxr$F-u;M4Oj3AKoQFPGFP0G$)0mx$=4LCZ^RlsV`nWcuaHyiMZEV8TFHT1L z-u;{>T62`qr!H?iIN2wK7mHZ*H5C;I4h+K5NA5EcN^bLaO84Khv+>mYx6tvz{_0c@ znfFSRMErl~IGW@TK?u`oWCRhqpDHUyu#Xp(KSAog+Sc{PUmNhs{T5a|l?8dqnrIgwn6fgd*KBv7EdK;nO@0Xe-tN_KlrmO+A(`U;c;PZVz(@ zfc4ey*;ugg5Rzjf#W_mc1}lJ-?BAxnSo#dcuo5(T{IfL{t;z`g@}mJ9;_`t|#!*bD_$paUGDQG|-d@ z*QA0lXWu@|c=%CV*M%=?aQASy=&fyT!c~)=M`X87@FY_r6kb(1?e+3G^bI~ayDR=> zv!Q5zI=0S!AAVk>howu?-5~(1su3eb46=+HH!gP0oH=_O4o9qoWX-y0=#y?rZh0N< zn!6lnDKwPgWFD9dY*PzJk9pL}o&AJ-tG3C8>Y5s?f9a++XYKFEDaCW|FG5Nep$R5) zK(%&2&)?#-UyU;7LI@Lf>%S2(85B;~EcCB?XB)+{9U>BI24Tycvzn<|mqaxa$b;mByB zgNLwc>U2a0x^^X-DWWrxpD%ZB!~8|xAh~aESZ!97^e_jov~?u))Qaks$w?#twx+TQ zAs${>@%W4Gpf?>3hr?pASV|^Ln9$#nmX_w5k&$r(K(fQ(uv;uHI=-4gy+dcNM?{bx z{Czyc=18>hsBSJEhb_%s+IXCRgWSA4y!G&K^i7Iv6JbKp0&22i#LR_=iiv|4$@(_{ zSlX0koyq2aE?L!Rv!k-804pcm4?i~v6S9`hh<6u*RFwsX@YQ7M%h-dZwBA{lEn z0ua)9*x^8B&T)M6{G&(+Ya5E5^7F5Uk7LSb3y|EaxAT@S;%4aVfp8AkhKoFB3;fNp zxo~XiYEHp%x(2H!@*_jqLV`Ob9878ZNsaxy^(LS-Ow@a4l-<8xR>B$R`CW=x7|n*LN|isV#j%dNpMo zIfN%~yAiiv=<+dq?!~C0KT&ZCW2e7^4n6vCG}We%vC!jJ$k);1pf)=Ab&U-Ts4FkQ zy2(!q3WpE1w}orWmy1wUT8^-G(FOx=DK!k{6Vh&a&MFGYU~SSsx2O;uQ&RBRZEYhD zh?ODNOnV)UurLG!hj4ORHEF;|hKo$C&!t*&h|s+xHxJ#qcERVj-q99VT$C}TwWl%s z<>!&mpO-Q85?kXL84)UKspSzHEaH|^`-1d)JD841_dJNv-TChEBvk9F7lWbpTP&8| z6kx3ZFx-^^7TFM5(*D`zH_B--$bW_iYn&r!j$+Gd{MgZ%qhhSpZtWx6yA#@ zS}IN|P!tgoVWm?uRUoC}5L-yH`w@IQ{(f|baP4pw8xk7!+J^{;ih;kckBKTCGoCDS zLXvm|v(pdY$=hzh*bBS6yx=o){>19R?fdZIPd_8EEC1f?BnRg*grUEpa+wGsEiWQ@ zE_NwV^tt=?VDT#xksJ}$Cg@K0X3Dy?So8buh)ZMShiu~*nL^!Onk=vOp0f~`8W|kz zsTF7e@^|gV##!?a>gVV7bZ2GEb#J_mMsH69MribUQ>iXv8RM*FgUkbO0ctC%5C{*f zeCj1_OlRicwxTr*hFWN`Sni?#iyQdt>Hv!^Yacpu1HuEn5$GdWpj@JxEZu8rX`CT+1JY((|{Bd`$ZEJ0y0!z_?u9 z(8FR*!Lxi`lyMlJJ^u(gMMt=OJ|P>Xy7A4AVDt18s@SNVU>xA)4GMWPT+zr7*i{c? z@j%Oh`kGU)G}K|`xM$r$;TUm0OZUMOUqnDs61@HWF3%6-KmV(buthCnK>05FTRk=HRR~Sb{V04BSmtW1z3z^XKu)vcbwPo zSO%`U{3=Wzdb1I$xWwNX4E2V^VtIiAEYd}Aj@@pzdU$xaRM5HS>u`v)7vPVyu7Ve(nw=O6khZ!x8Tm;rW)GSXeDYI3y)okd z(`q-;IQMi7Y>o9;HU42?H~0pP?t0Pmf+Hnm_|KgAXn#R(k>;$&!}tnQHI{%SllsJlysXT^3Sl{L6$<_C!D(u41PWva^6 z7-Y$5DOs7yFjaX`0eW`rj5kNMtwxuRFZl)OM~@)7y|QDz9uF$HS!WLz2Ir&a{5mDw z^9~=x^LO5X+xif%rF-XJvEHlOzx)D4#l?t>k7ud}<+N2Lyemkr%H!0q2iV=Az?oO{ z2QdH1r*T;lnPcnTbeBdFHR6i#&mgW(Pk4BGh@e&J#gf}q#xjQA7JUPm-oL4?0d*(x z@aMF*`ER(vI4Fvt_U_$#ci+B!zvEc2UAuO}i;IibxN@5YQROn>xWQAFBQ81uKFkbj ztz>ulT@kIbrSMLTcGlr3S6$6E2Tm5`VaxQpxZAgtLt9bXh>_F2L}JG@T^mywD%1m4 zTK(R6t;9I6n2-PgV^yb50~Qage1@;Ua@Fwc!{4q&PIfk;;@eAkK&Bi>&IKULrPL#( zv|EWqf8xkNOnq=HhIL7Hd)}pjot)9ZZ^o*huyz?X{_#8Fx}*t3Nql%))M{*VZkg%r7BUU3Y#i&r<|(o!6IKFO&W9Z3NUI=FFZZGn;Cw0={2l1dh>g$$-qm5 z2l@%#7x}B14b~cm3DuSomn3{F9j`tx8biAB;KWs`u;{a%tggjvuf2n~t{3pnF5^jF zr0IuAlr}o6(k0tcFAPrDKg|H&bm{Ocxc_;V}bnbA0M@ZS>a zUFS(;6D6ekk$tW#D@9m%IF>$mH?Qbjwd->WH{qG(%dun6Zp3!%D2z8#04y=I%HCK3 zpj56Y=KzZ?C&olkRyHo|*9Y(3G^&M9?t07FvwZOjPa?ESDt!C}IW2OXhIC*6mQl!D zPs zVzH2fCD(04!GsCd>@UQ$@3){+N(U}Fp&apP9BPbLCWE$EE8imNSFeLG2d9{zU-K&U)*8Ws;PtbCSFoOCt1 zKlJTdoXE~WRD6QG8dK3*OdDjG2LWpTtI&t3v;;A6arow5et@<+U#!9z_S#(dN4JBI zUx03o4^{o9@_=-@8p}Nd{J#jmI+>Y)(L;yexhpT@!em7GyX(c$ebD&v2=Ckpo<2U} zP;7lJ*7%F2crXT7qs6Ua9Kc~%iNg1s}Y`eqZ@UU1crI%cC$-r&fw&ieS8#881 z(Bj35_X0>I2CJ(BEcWnTHT4(7Mux%1n{;*O)GdS4c@vSvQ*y$Y$;Hz5ViBQvA}=4e zU)2Zy9n!T$2f!5;Dz`{m3=-mc?cv*T zRc9Wgw018Rea6D-T8x=GAMJ(4qLdHB{1Zc+Yl2=3bIH7kq|qfTC?K;PM_!My1KLJ= z211T+cI?OdKQ2XwZhY=jixj-pVWm^YbcRH;<{kxDdHeQY#p{#NE~sscX(8|Z>biAU zwQ(cbcjIUOvGQ3d4`jxa#R3c6C*6hmAd4EoP4)F?$j`^7*Jp})!SIN=qHtDtq6feH zJiOb-!7ngKHx$mzBV=#-MEA12g2Rb~K|HprrE#pMJQ z6yl0LX_z{)uiKwrO7|~*Ka8(_-GY?VPC}auWkQMMNmP3H|4E3D5}0_ga*rLx!y~W7 zJr{Rr)pVyc+h0(IC*JxLiQRjNyef|}@igNm66gSXGx-k^$I5fL2(MO^l_0WR48HqM z+ZkB?&CdOJfALS~(4Fl!#?x3kINcI}rO$fw1bBIQA@|ThjJb9=o*#T!tLD|S`EXO$ zug9uQ8 z{JD{4TFd41=OWdN^{n*18uNto4RWi-`UceJlm6i2#YHBL! zv*JnKmjhUpm6h|t!or?+7l6fDfWu~PK&Zbrg8aQihSIDi6c|aR)J*w|)tpLs(rR}g zKQ9-nrrd!bU-$M3(8EHi2}e!;8Zk-9@a6!4aLH(?oUOt&M30I>$t$*o4Dv2HdIUdBo`{%W_YMy# zy;o5^dcf1$Tfxr?fF%fITIDTe1TczQF$PT=U`Z}60A@8{hz+#c{o2w3E#rES!j+15+(!?v38dAlo%y_XV zl+p%SB$2Y9vWf5CG-Qdp_HM(#lha4hvC@&S5#2dJ5=gEERRtoXWL8 zftd6MA`FW1^U$|vSIoOrpnEH=%v!kP2tHoA5(%B;*1R@<>gNWky?@SS1*^(PL*B}q z3~Zh;zSRQKGm?BxzBGINpIEW^H^iq2bJ!H)w55U!C4^_Kay>3pgMO7AK*HIj#Rv@z z#ZQm8Pr14l$r&dI9$vZ>=?4!YCWY@iCBL-gsB(>F1-R1IV)HW@^hB!I3XUGZ=;7C3 z{1sQ7ZMJGv_mdSAOnepr$sOPm;BVp?rBI=`SQCL78FSL#3EfZZ*o8%trlET@-`upd z=f|2L6t{$8r&Fg+Jrx=n`koA6IUEi$C3m$u0<5aKCXAS|97*wU(p*4J6KOCIp%fd- z*EyhSqD%e&Rut1u2@_>z9>*Jx-iV7j@<7jB7)wbD`fjTa=3>UTE0L6{7$T}7o}}ir z!-Yl%m>H3w2zJBRZq(+Cfs*x{jKHlJ$<|C|q2l)H=@E$7Rm9^fSQ|G2k zZDYDo$`f8JJDHEPv^0El$8fVU#UABwrC-0su1eHh_7#(p!>MhKV#D$zazdYk;isE)j+2RgLOd2fUHXH=<~SJ*dxDJQ&xdM zSg`7um)*{YW3bar7K`N<8NfefZ~`@dR)yqqkwYu`a-&5H^~;1k-Z zfoo2wbD4MDONz?kVL?Iq0nC5;A@om-X;nbma*dNDA zF>%2rq$MXxy_p0NN|X5XRTeGjF;eo*UE8$z=+Fzh;^h&&&nF}NYrj2f)gG+haR70o zrxR@x%z#QQG0OHBYFWsOp}+7&@(H1P-ti;2@v6%)Zg}e|G+2|KgI7QP1}VM!3w$Z( zp_cIE8TZ8^`D&-CVY4=4)e8^&YrJtjf9S8Ad_4Q+dr0nkACBZ5Mz*0S|kt|?u zC>e6%7y_XsMo~^SF74kRvu_%9KFM)Tf1C9J-u33l-I#8BpukqHmsE`;tD59IFIgEyXh8iPBgx~=z$rTb0q&qGyREyCksnaL2cuD9Ae zzr&fW@u49|1< zURa_n%9J|~ov{wV{yqo|AY(B25Ftku@nG^Nl4m6Lbn*=3ta^+8J#9u~KP60cA~OSD zzAy%zV))!7cMJ)z$?i8#{S@s}yYS&z_S6fTq@U-)o_V<^K;OO1{(wYztHXhU!~605 zE03c?M9_JqJL}=Q^2K=wOG-n4x4@Gu4>2H-=Re8I$`R6(_tRMTk$uTKnvQ#Kyata9 za^KmR>{%N!X$F_r9zeV(Iu^GmLpTSt9^lgcw&q?bmU7|2J-e`E>LetEg`QWQJf{dt zxcL`5c4Gb)U!c>amk3p|M!cyFvP>IY8UTw+Zm+I_*XdgPI#CEywbH!Iv$ZGhZrg${ ze*6K6eR^>`W@I`@)`l=QM=O*llRZZJ$b;I#V;LB7*&xgr?v@?%Z9>7|o|Kf7OLKB^ z8U&Hek(2hq`W3*n0IUF9dgwFDoV3IE;%z7J-Y+|mn#c}-mI48?Fd-W3(N=@I3 zMMH&Ebz#@_#*pORZ@(o zm^duDZ_L>|ZmsfO$I8lZ`^&GO!@vQsa9x1pu_$dWmd>$mu8^r*I0-6q?OXOAzyqUh z#S@pfZ%YiD!w%AKDz~~4H%|B;5(oB&g;r~dq<6x*iZ#^VpzXzSHoA+aJuxQocI?5= zug*qtScE%PC{xVztHoluo?D? z5t2L6Zp~_w(b@Q%e+sZD%pjq{g6u5x?bQQs-gY@p_w!`EF4%eqpDq0bN!@$O`mW2#TZ zGXq$J7qfQn!nDU8#jeMc5IDF1iQ>{RAS7s{Ep?@SSSAcF zGG~(;(UObJGu(Huv&>UFWdiJ>AqZ*5RM7JlEb9(80OgX7q&dT!IyC9U;tFVT^O2C) z9zWjwc&ju3{^>(e%(QOZy7z|lGOi}HH4B9&BTx~2p_-Ek5y2Lwsy0Q{pb{l?q{t5msZsx^imHdde-$r$9 z9U^7L1UfWR0WE%=GYT6v9TmF;922j)`W&3>^M6a0k8c0r3uGNkM|_t~ zoX5zFoRO_jda@og$*S3Put#bf=4ArnPI=K6A}A*Stgf zi^>32X=&*VQBhI9SglrvmzS4eFwB(*B&%Y1`Tvj*7Y!dT59f_X^%S2efThoR^y^Jl z8}f59@$=-n5f$v7rNT5kyEU^I<3C=4QWed4<1 zSh;c)QZDQV5-y|{ZPqHz7?h>I=q0`LiOe)iOZP~;mw0z=8B=kx5V0|_Sb8sSOt|Ak zF;j7I@zB`V*bT}MA(w;IvuDqa`}glZCZI2OqyzU(vsWC#uRAl*F(H}{&j{{Pc~F3P zeHm6dvx-73;Xp!#<)<4_M_M<$%I9ObYtlP;w_D!*6-~`{LcjR>A zdob?Qu_B-fGhe7CeN|3TsgQ%nKMf(3bme}@O9zw zXMz@lUfbvPXR0FaoK+f)*Y$C;@pyz=FxNQjGpkEe&Ic1&br zfe2Z1i96=3U#`o0Srwu}L$K(HE4fE?w=VD0i?#YdE~YK`2`Sxr!A`7Mh37>NV5y-& z%LKEQI453&g6vFO*rylfjXrl>-dU@1(z3s><*&ccp-T^5;b@{IR%UCwr$95-1ED3r z<}4S;0TQClIj|qkjJ+Lq_3zax74+G7s1LXOjSs&35}gMPl7TC2zrKn5DPA&a8fL5) zOY2CHyW6c+6zTM2j>o6JhU7~J!qbQ8Jt(V|SMIQRdCJN&@$?AA z;rv~tdl4B^Sy+UK;7}}olrNxh(~DxIT#Lm*`Y%<{!~?40LQssTO4fza**ve@w04R5c6 z!)ilB2pKfW(vqh?Up+{Vs@}oZI_7#uS3^MxONju;Ik+27jva|R2cG?b(Ci+5v}HfO zUA77xy3^!p^FmGbW(qI9n19m3Fd>(Fbu1m9z3>=1wF`GE&ne4qkN&U{2lnnkVwY}G zF@fN*7U{~mM^$X3&p+~|{5mzbwZK9>UnD$D`i-5c#+sL3;MI|vIwOB0IF(^|u zaD%HPbT}NO3)mxeyWQ&H;o&x|8Ynx+a){LCQN920?)h$k)B_R8>N$R z6n9)R2u}{}$_wA~RN-d){w-fY>Ap3y2;)Ec5y@S;^Ij~9QyEYtfh;|rV#|aw`?Qp% z-2YnutJRKzV+Zi%gh$XhCamQzX5t&G4(4F$hhHMK9~liopWQ4-H0KHBJgW)?uV)+( zUMnSIaZ*$9k&t`kF1*G9mI=!@;s_9LkP`gCz-cB+q+_8w@iV>(BZ-)L%VK;@BR z*!t#M+;VqJ!ziz>!*vs%M{sHi0>i^h^}BMKzoz9o5TZA%4CTDJ!Y)haf$!~Do|lif zgajYG^=Ys4yynQEEnE+Lj4rM)6T;qOf?${c0K-P<0{$>t_BBe%_vEwMR>OQ8^x& z^D$z&^pb_6`JH1tc)EIs`GfM=1!7R+K%I1|)x1|z9JRtuE7&XFXZmQ&^Bur$_V%}dXTyKl z>uNc071S{q!I6BADV`>Bql?uy>hqu>fRyTudVU1}t8UdmpW6Z0?a1G;2S2?w2dVDu zy#mEbGZV%Z6^Qp0*mn z0saUJ^cE@#ovV0RNwCu}p|;@A)}zv=HV1Ix_z}#1ViX3XM78Xswer=}a@>|xjBy_> zMsnxwyhlgF#Y`!3=3{f1!_NIDS0ArA`;6qlRa8~NT3?TKuiVcozq1g!Ib2kMhh}|% z$j-eG=u7yE3OuSVjJ+N*AjZ9hvjMHr{q*v%$h)4*K8^u>`(WNE_vw4Zo@o(W_3kgL zpwc`ZqS8<}p-h4-rIDo9^PLz^`3Lu5-V=}FvJ`&iq&pQ9951iH?UN=Uwr6kn2Jw>; zs8^NJ-MKkx<}Ap4h5Gjs&KW5vsHs7HZXSM{J?E^Q>((S@s~hSubo{d%xC)7i6g}i- zO#vQj^8LSdwy=JN{L1Yg6W@ zwiin+n0Xc?ztPZSM?uapw**=Apgs2W7G&m;?(Q)vkY(h>k_!c+qpRLc_7fg-@$*kh ziVEQ!5P((B@j~IBC_xTf&Hf0HX+03+N0Mswo>L*%G?%G8Et zxR7jKF5)^Q;d?ji+Foz9;>xF=MR?b42nq{ja^2Ll)doc-z!e3;OzMPqj#b?S_`h&D zmb>?0>LZU}ME4%9%;K8QUfEEO;p3m>!h*q(1YAk&7@Ptu#U_~TBgQ|3aA(GwE>;x^ zDGE&u^{C0n!q(aE{bM=m0-NR#oKX#5fBkir`|i7sR1k_3X2l5o(A(i~>;=%>;cz%C zTo$4GU94;Fj`#jRMQtMz!U8xZHF4afV{TX?uMM!|6qOes6N=Y0+E92R1M{D_6$4Tt zMb>up&7h#A^mGGmo%RLdQ#x^#Rr02z%t2Q4fs|9z+)jye`xs=!=GRlZm^?>eelEh| z60r19GVP#cAdB+U$*Nk6e)TOx5pd;C`kOgBKW5%R2c&C_a}pX^YRz}#EX!l*cZ?Sr}3o~o3LTyMx=1yic)~z6)DkN*}%Hx0E-fi{idX|1 z`V>S2`2Qo|-r6>;!D_|OaW5huF_BmD!a#Q!_z@+lL?t!QVhs(lUs~Q~=cixRwgEtO zStn(jYT6QX?3gN8^R%xxKlqtHoLX!`(Y%oYbuLbXU*P^v>L0>`tfJiG znD^K%xHvW1Z9o>K)~r>#vHH(lNKEM{6A<#211xovbmr-AEIha!lzo{K=K?@slRZfT z!V{TC(WA!&cz^6*?mI2A#gtEOjfXs3cS!YsoC5pqwtz^GJJpdLrlG zevG_!I3^4kO6?ZN&>x8L;0E9DSPWS zET1_O9m3qJN|xkYUHc-R&>kGgzZ-w)aiJvtoXbiUq(?PC+shgG1Vmm)Y`Ci z!c@1@SDFYw!bm?_EEY0URJI99hX}1CB#?ia-EMF8@bK_k|2^>Nh`v|`06ktD&aOxBdX#wY@zE`u;^eUlX@bF=Ww=&LbiV6vbX`60iqda)s$ zq0<&3AT%5ye%@LTNL7WTEg+0`N)50?+G%)!h^Hs-_z`sP)e9ev<@1!Bfh^)JA+zPk znyaULfPnC5gocEOE_*Gtq37|?+*3xVv42;-HJ{`z2}$;MxnZjZc4Ofy&!R&Fc{bP1 z0a7NkZz5sAUVRlnolz`$O{ztLGR6|CuVfn{_gQIq3EA^Z_JfSXu~wF2{cG;!MLAYl zhC3%uK~$Hn2nrXJydra2lzN<~G79`_onft$qcoJ%Yq;~9o{oVRUxfE>8Re>CQuDb9 zxVnDg3kVbv+WD}cHZWCkD_N&BUe#3Bk)=v67GqgZdG4^;k-u{fzMniD-J|*TNA8qo zsI?&sMw)1`Sjd1&F~OZeUiN$3ABPSddh5D%>wau*Zg!C5EjO*M6u^qqMS1Y#pAiue zju3w#A=z0%v53zF@;L=s+Dt3AJG9pjzP37moMY*@W#}M`zy1P4h3^Uyg&w}m$4+9> zhd&^-M=#a9EXj}P?2XKTEBbx47fXF-eht?pV%uZIQ~JGgSRpd>wNK&YABe~Z z-eu2%9p`&u@*Tt`x778fRwr|6CufBw?!mwR;P&j|*=Hc-fv(T<*PXy3} zb}a^{-hT%4E0<9+D?Nhx=S59_r6Eyw>J%Ca3b1)5KhW7-6g>$G63BQo{{8Vkpy?kuwlb)UB7<) zPi%s_7I5M!31`ik)pNpx34hycHh)h~PuBf%HXf?g-Gd&$zcb76{KvndQ))+$YCfW- zoH?zzzi~>B1ftC-N#{U||2s+9TqXD$L7+Z&*0KfAl7V`uoTPHY>QVo&60Q zb~~bI(!Ov@J-c1aS0*h-F|H{GS8~5J;|;X{wY7CYlvp69WIv_`p_oY|~xe`Ds;Pvg2Sd_O@~y;!;* zEi1ttue^ka9$gR=#`n3>zML5VYQ19S9U_DuaEi>G=*O&&a95$QH z;_2ymdhXo0{l zM#5904eL*zo$x+_zmd!J0jz3wG|tyI(FqT+d$c@%IuPJ(jhYqTlD}I;q{X2Y;;IX!}oXJ?b38-`DMkCLwM=Ud5G`R3%(&i znyqG}w$#o%eA1*0!})~H^BUwMaXdV5{I@^x&8ySVKfZ&ZzIB%c3^vNJSS$q1v(wDE z*VJ-^^BErw$BzJRwcG7B4-XHwO>`GkFEgib@Z{x)2oFU_03Rx(EUTCB&gWtou?>Ym z`T|Jzm_EXF6Red6#PxGNLTzm=Vo7lXod%%X zSb=8z{_69FmN!)9J=Q$e&OsJ8mErF{v2g0kE*%bTlt&5h^zcC5fpiQRJQ(w?<@4QK)!;YM;L5)<*l4N6Vi~QK45uYN z2$-@t9FB1S=D6#~94%r}#@?4(iO1hvfzD}ZGV55=e0a7@8s-gn6 z<|eF}_>jvAKGwUOSz3t)-}nIDp<#%KWqHIoh*EX5)=hX9tSs3iZ4UJ+)R3HG*nbfo z$vboaH(xUx6NkDksAbR2LyP|pd$<0Hq(1T@0#W7}Rm!#~M96>ur#Y~4fJKanjKBWE z+b@j6kTlnohb-NnTls%jyW$t5Ts#mKPY>1XR=IpL23V|T+qnWTkVC?8AckjEQ8Bzv z*I~ny*`l;&=gGDjMRN`wguzDREf&jMW&RbF9Lk^O0M>*F6KN(X-o;mz{}@sh#lEBUgxDb+vE= zt3-!P`4WMVF$fJHR zCN04x^}g%Bj}Z?sV1jA($I*cC+K}-uClBq$;;Ap7eHh&0@~s)38VGGRhC_eb_4+8!)!{@Td`1c!uR*^>{rB&cN#9@6gO zmbczPNl6J3yLFe02tDRyJndS0!g+HEXi^vn>dIhklSdCwa22wL4&jnZFU31IyJmv5 zQfA-s(K|SC{5X<&_kxYU9o*@?v^-c`qIr+O-`(cpLKi$#Nw| zy|o234b4c1@Posl77UsPUZkj&6fy^}_**DEH=5QQ-yR^ZsFa)iH0`dzxFn75mqpdE zW`v`Kob+!j7rlph<#_z9uhF4vPg#d?Gr3IW@;B4~g@P=z0*I_9LY+Hd4!cm0z}#1Z zU^HRhXw@0_^b%w%c_w1b=N#ONN5 zdMH{oh=vQD6WF3$EF-gu2W&Ov<*=8OV&lx2yxeo)hN8Pp=Htn^vtfw{L%Wn@p6(U_ zT+z_0u29zprgGDhNqccJLd@BjA)&#{zy8Kk|9Jq94sZ`oZ431rIS>RZm0xnnB^Pen zwk^kOh>&g{NpvRwtDn0!990sQ6*O18v;@&HF$nVW5)Q7}rlTf3C`|ByBRn&(lvlRS zR5Jfp0C#>3$Zf`};~cuk_gLEl z!D3^5Z>4Z2nUFJnKIi+W(;`r*tYj~tuw8|vq1SD^6`2*iB`T;TBdLSSqSnw7afgPRm$DR`|l~mh{rG5wFGevG~ zZE8fp?%h~9dk*5b-gB2)J|f#v2vZNO3CQ~aIOTTdm9TFel5R_g0q6+QrH?B z@YF4XaO;J9V^VIF3s`mZIFsic`^kEg6c-^bj<#-)JbLu4wFQEc<05`RZRt7P6)oK& z?y@5xUzHt zzEmCl*<31)mM}EbJCcLW3=Tn$v z29K}aYr^ZNN=kw9Dr}zq2KRke0<~wdUs~UxnCR%yqn~%}+La`^a+pcE)+xYpI2;6? ze%+P<79rS2>yP2vHQUgsQyS+{k;=LmnJ!k?o2iyjTii-kHYzQbHd6jgasX-@n^9bl zgZ4?Om^Qkdfe=W;(-8^I&R# zEMAxBS&$SAOUg?7X%*jRT`elbC9Q3++E9M%Abxu7IYbAw{+V}51y5-F?T&-^Z0T}1 ze0&j`lFHGN^(MBY1&5Y$(c2$GkR>WP`CUCcfTFBS#CJ@?qWef8QR}awB6KI`iJJi` zT;J~6ix0m24&G5wh-#mx(Pzm7@Ye#l48MxSg-&_~>Kh&MzYs6ViT(R=(WRH-{gESG zg6>KnQd)Z&PyDn9NB`b|sLq`b6doqGuEXf5pCGPNH~4vZ@`GeeU1rt^YZOfkS$`BS%Z$Au{K3#` zi^@V_t$S&y6ak2_d3UO1YG9qcZwID4_8(l^UGiL-BG0|& z3^5(k;OoZ&ME)|fpC;Cs*-w!c3jWZLe&qSfPUgeM!-CZ>KEpq0EA|v?J=><^S$ON0 zRVd8OLu{8W@b&Z4sfab+0};Gx#a?CJM&o;FOGo}wu9%>p0De|0*1Ymcs|Qy~SzA<7 zgI71K#;z?};7fAc659*;oX#N+YjksZK^LeRn{9fAhO?-E#o<8qpMT?{mnLISQtH1f zHColrQ3kf&eDlp0E?>TUzmSh*st*dh0^GEx1h474vCR` ztY0&SLmX#fG=!K{<&waWiypIrNP8UtS>(Xv6&AzR)PP|Fdt%%Tz2NI5ZDVT&T7(h* z%qYSO?|zN6Ui}#_mZWxD943^VQ?u08ps&)CWC92nTa5g}IrW;+=V!bH1UP5z--A0w zT#sjm^lMd;hUR$#JFg{?I3li8UFYoCbF$SAHWyUf6ldE<-? z2pJgGNp|P%Z))lVzfa2Z%{OtaLTy$S{+!=>`(0@n5hrU-@xW@+Z}5%?M|6ioczSsW zhJ?tOB0C!92P=h)SVTg51croi7P(y)`{>hEQbgL8yNY}YPnKTDpUdeI z4}_5aBBTN|H#VYR-!A+zcN$`X0?+GN(fV=f{ZqE)`0VeUSoG^^oT@pE(D-73Y;MfgyxdbJ52>@L&4VoYev;?0Ha6nq-o04#`s?Tv8QH4nPM(&{X`>I9UtNW1 zo7Q3HZ@}{aZiiYF17X11@{l9t;~c9B*9L zwwj4*o-L{Q`VSV16VbqQs$AV11Jf z!zV9BSab{`gZLguase$I0L{c$V@0e~5wtmkrqwQ<9eod$7~nRZT%#96gr6NCl#`F~-Jaap;O}6G{C!5|75AnN2R9>y&1oYa|CXJJx7V*lZhAVrBf=2XzCGiyQa-*! zX+6$VhV?jd3kHDNJMPR}WOKZnp95mRojiOLvGH+O@%Rg^M#h}a&8Jvs%a$$AUU}t} zZ=Wf^;_|S*`|i8`W5hP#hF){&;8) zL7wBm1)Gs`A_wuLFON}flu5uNi$Mt1w==~~g_F9R?}AL z?#^H`zlx==Ry8Nl6Q#L%hzJP8%4a8@cNud&_FC&VDHd9|aN&h_-F4S4z5FXmW4-65 z+aK(3IQ9WZX{%k`wFtE5L9!lE$vf+XB~X&TyxtHU04A%633cLZmF!|+)@aI?@N#r`~c)YTU- z^8IuMr<6Od2C=H76-~vh47QlrC#sRu0E>J=Dh7+w_u%L0Kj|o|`{#YiK>`zC=o?WQ3*%25O ziSX!l{Ie=sQ^+1zO?xHhN&j}jzpPhXtNK*|7Wh7wj3<|pTa=E3uRV~Leh{e_^pu7; z>kQI8S9?IKn8~wfT?_Z^#!owUB76USc!mTcB&HpLL&Lbj9O9v6FYVka=`4tnOJk&y z+<-S?K)EK-))Ml)q}#`hV=F0z^<)wLocA90)$?h0aCPOL|vJPmJ2wwT9y8; z?bD#*-hjr!GjSdm;lHVZBwg#PE6QMNZbV>I9B%59h#_6$(Iqxi^QKaj*T3iGDm~qR zTVMYSF)5wkL*{cieO+wjCUPG7GRdBNu-iJdD$&#qbIWMsP$V{QU`7C!Q9K-C}9U z@TB&>wgi|ur-V_#fq2HaJ?52s*4|yXcK9`T{rW2f!1C`kaHV^oMf+8UGqCz-1`h4o zh1$kO_ymU_tX&Lz{Cow)Xw-$BrIit7%z!I}EaHeMP*edLxPlJFR!N>Pp4SR9GZ7OV zg`b~%QlLBEtn^%6ED+V>_0rl}{Ce~-)@L5Wk*(X{@b!g%csRo2VkM`z4A7e4T_YVJ z^*dCxF42^P#(Sl;+gz`!vU1dBoxpEzyo&&DpL0cOSG+I9Ks5h~!$^8BV#K9h1XRtL zGv}Fc@DdwaLZhNF4}{AF(eW_-N{DV@529##6g#Gezq zjwN|HxcizbaX&K#hti#Y1U`|;h}tqWDDwhIFX+r$nNwbkow>#M^-v~qvyP*wz8>)Q zL1=Ug`~w38vhw}QbiKH&$AhXSajXje94y%3v9J++)qfXxM7SAm4Dp@ajZP>TYMZln z7lsVE8nZ@R{jY;7E!nf-SQZxVJ&2=wcB0V^cn1a|G`byp1N`}Zltj797{G{TtSq7( z*M%%Jfj1BSlhh7~ocEgY3e;rgVD0R;5aA!-iXiBmJu}5XbLY-|Zv6Q1ZwU@30=hIW zBN@!0vt`Sc^&K%{#LnjCW)E*~Z+36a*^9W+jaTf>!_05jAvv`ZyuCIaJI^*HlmnPT+cJabV7l+D0pCYEGf?bQQb38J}gi+H}G8V-N~w2-1or>v}+e-(5K3bQjseb3X$nI^}&uNHkLXr8xTPcBq)`= ztoIGEENg1eDLw}CZyRii%v@+ggAC-pEeZ8DT5UL1T8VvmCD@u>fUMj+G*nff$!bGj zcm(__CUN8d03ZNKL_t(TLgDA<2QQ0-8$vDzs66kA@2t5k48<9*hSEvcqTDGb6rxIs z*U$P!3zz$|PXVq>xc*ITj)_I|)RTSuWa}>co|%J^%wwoJRfE8&XoQ4^!$$yBN{_M} zifVJT`VrKdqkW3xpK8lD#W!W%N@gcDI=l10+JdT+1^DcdhmmTsVo-BtqQ%nU@OjDU z)7Vp3fWLBbu>bgRR2CJY=5!4_0|F7+E*idpf$;YB=J=enw=j2^kw?-R`5EGIp{!z7 zFt|l4LGvM;fGn}FhCi7cxFVjb>|739h57lLd#$#!%F*21Z1MK?wl814{KA`WzIl(c z{41V^onQ1wcsm@9bO31%hr@2M=metM4xv?V`pcdI%=l&vlG8fF+mi@vs2m^~RLQyIxhg~(NF`-s-DxzQu7<;IgMVlwf`fw*6XJ)Is1S6C z4?{v&01_jD5E|gah4NZ*k#705O;%LbH6pL#G)ijfky~*ZnWd*tUekce+Isl=d2{!b zRSF6}BBzuAFcpnS`5uT?guHRGd|Zn%M?&Voa_$$ADR{$_Yw6jnb_a+@rK#D5&_G{w zjt;}XlvrHYAr@f)zJ>?dXdmjEttdQIi^GNGNG~eKvEp)+*3_c5v>3Hj74QxSgkNAV ze29Ya^M}8;7YC^LDIR*@UZZqh>p|F1E#t*fQ&Qc4*KCMYT|dP?GyOiTOCg_f<>~wO zVDME}VUFmzI=A5|C0Rs11n|HQKjV+ZKOpUj!3YWq=R&TA%Dn|%RsOf-3SOU!TLu=S zQfuiaM98NRCZu$*H#Nb_W`&2RCn6&wF(5G!mnA22EgDGgv43(A`c>4`A+w?!>BYs^ zRZxJU@>0|m7NfkX63tc{0wTiT6BGo$zySDh-W=Xwp?+DGW?G5j@_Z{3AeSS!HptQf z!!o|t)Gee8S^kw7fJN5O zJgiRuJnV2dtQL!fgbx4zC7cDC4j_862*~n~d!d|bK4W3U30jR#)W*%|lt~X%z-g#M zT@a|SRt4`C{cQq<>YJKjZLEjg+RXpYW`(`EiF;_Dpip@G1;X3Q3;sSdZ%X(vivt8S zG&Wgbvsz)TuYt9p9`@!2SUf%9;pGF1hX*{oeBt5g0Z+dG1p52Jmv{;dLq#&b34?UC z=uN$i61|KpcNOjFD~TRQdPKC+8@^U5SROayUp>*xMT( z-ahd1@qv$D0K5Z&;P34zwv!;wPHG#1=U~6ndQ(YZA>~@5Ph9W2`3jSeX2=w*k{ukos2QVHb z(*A^awf_JE4{kxtVIoEpPhz|f#i*Z&CdMOb zjFPDFK=6z=#5)nAMCDZQ02NRWkV_6(7Irz8-JO~4?|FN=W~zI7W_osKXXp6$^C+;} zU0wC7>Z*Ue_10SlYHFy;@29HTS~^r&LA3{~sAA_%s;;diUr`}>3Jb|oR7k#pLMm+9 zl$tbeZnS}rKbAZla-N8}>5H89$2tcU4%I-xfNK3AJ)8i^CpfQIr6!DKbO#nygbYN z&sSUNz8B}v;oWpNF<`{zqc+7MuxIP>BJcHqSl_|V_?i*x)NB<9WL(xvwK2_ zuAi-5+{v+JDi92i!tIj%)q+7%JYHk#yVs){mKnB6@odT~9NKKJ3;D`Mx{|teY_W!B z8(W86JP8Fw5*7ow+ZG?A^KcYh=f*Bj8=IOyfc*YiBN(IZ_ft>{iB{Rlp=%+5#bTAM z0xV*^UN3ok1>`9xq@scXX)X}jIcEfSjj;pG9e?M^fpaYgkrlBGh+;;@?j*l~IL1W# zP!?)lI&J)FDgFFsKczqaL^!lJuDFu>m`^uvrEC5=l{)tAM@7ZWqpVor?fY_LGH@oz zP4Z5YpNuQ8UGP zNuDrp8r}jQdAvUI`g~NtOWM9@TY=GUS>ktzAhU8qvi8qzzXNx55WBY*0y-?D?HhEG zv|_2MO1rmiqhMJ%&Hl^Zs11CsV$R!y|J6C?ob&59-gx7ABJ%O^jPWLVapn!-#|)J= zapJ@ypL_1P<-uUEnaAUizxTuw$vnH`{T18kuIJvT_J?<;k|sX$480gVOdJ6gZw4P{ z%m{U)@oorbB@#W@xZTzo>>X)HK*j1xq}-ZczrB$NOP~C6i^z~yl1w2L)pTrmlpQqf z_gWDo8eHPhmQzlUPL#lkT@iMH73(ueG@!}P3C7`UD7@6g7Oc=R9{-#L6aOrrg${oY z=Obz*FGg9VA~}^I;c{JglyDgHMZKE^h%5$%UMg3A;z7;UCXK>Ii)bMpIo~WuIf&@Q zbH~%Q!}%19$TpP5?#ATr=F6==($)7(rIy`$Qu8)#NaJN%OG9w#0up@#A_41t(c&u7 zYU25?*(6jXLsC~5PTQQICEolI$&HbW&B2`~4WULNq%#@9i+`l>d8Prg%^Pjqt?!hX zp2KJv$&FjK$qC)~sYYAfonvD;r@}G3%GPhBrW(3J)h;{5jD6Pcrvvtn4wTk3BBJ&CRi=!AucgfCql{#ie z%apC-a}bF}m+f?5ury#86rw~{_!Ek1FCzDL@hS!n>tWN01y5K-nZ>a`5fw)#;WwOk z;7BZVq_$xWh>n3;g@TZ__6gCSs7_-S!(IM)IjFY!5N%uW72P>y68)@q&x{gRPUYKQ zQ%h&waX0zev@;y9IZmCh^n}B($f_)yNMa^VzF5)Hz)d=F1ch0tVUZq=iRIki#G7bD z3q7gFarUD~Y|#rhI?)#;YK74}#1qkzy#zg~m}nRi-%zZ#Q0i>CHi;R3Nbih0zJxz6 zBb88Wu~pQuLr0o@-R~3j0{MP}qBuzE^^mt07-Hm+*EX`m?kaneW`=mcQa4 zM|^*s3R|?L&aIo7mMk~Ota3yize5AB&4lfkq|_-$@rCTG1eU?kzUE{}*G*>{eUJEw z+|h)(g}S9@6)=%>5(_{#?=w3r$-*K>+lbzcXA^<;Lb@npNVG+E`o%6s68V?E?#K~( zX1g(eX>`(wsM%}Jx$W{9f-(KuCG~#{*@_nYWyIsR3yVMe^tXx7CR|of0QpJX~ z^tT(XrJ>!sWW2bN`HlY5T@);8LhZVA37?M|#n(~vC+dqL^>6jzlB}LiNkpj%=}br4 z(K(^b5s@}2CK|GIh!!ViCm8qpl7&a2&^ES0#GKSQe}mTEIvPkgxv0-A(Kj8Io|Z(z z8!==7D5vc>sz>V5*u1gyD>`cMarEkimm6stR&DHEi}^uFn&;1oqTCtpcpN#Aqy*NT zciuVrjyvx7P)fk<^NGIXoc{gU4=pEhd)rb~knE zB=IB9v4ii!}WAnN%O4ii+(!wVcNTYA05VLb(+hC@{UMnt7@X6CXxQF;zMoU$Zw)1vsvvZadN5Z^Cv5Qp) zQPbHZta{PUMlmvOaULKeWv$z?b!;4+NGO*!FrGLS8Z|+_h&BqB8OQ-SfoqKgoz}5 z;tF#k5Um#E_-P7DTy#0(2`qQ*GS-`|(-)^N-?B?o?&72*xvd}Avxj!AUPCusaTQ%O zAmm>Nah13gNk;^3?Af#DfbYNmexD2Tzu70bO5eDNBe(~*Y}xW+=gyrk3>wI*GacArg*c|f1JNDu)wYlj?9hU3N4$#^U zx=Tys&uI{LZ5grL=$NwiQ{R3@xB(;NtJw1ruItz|aN!EwHS;c3t_#`R-y)%1yt}@Z?eU2?(Xf&g?rk zZ6H16lH>2>y^~qy2=@gDL$8QJQ4j1 z;Tl{q3pHd(WPQGV7yaMU?^BbO?dh=AO%2D?=*xM&X!&U(KPe!K5cR0)l;}AAx8sE2@HYDzgSo|#RQ&G$1Zu-O6 zA}cI_q?lde5NLV#Xe0%J~#2XY`OiNasAVfDTmdq%NI184;tcONP+{S@^q2WZiKj;m{dH zjoh|D&(X4B4xllD;6+{?Jzq3RBxa`OuOk~A<8_vCekbKIR=9@fPR>ooEZ0`NEE}z z6)ZD>qjeN&KCoG#9Y1U$rKXx5nQ}QD+p(QF0ZQMY%?;U6$*p!@bq!tc_)}E=;|}W5 zr?1f_tzWpC??BFND3+O~WJ{q&c=q^W28vLTyZE~hO%s|rO? zcs91hO?U|se|ICWM0pc+AhyBXe9T>`9GE%<(~~t^IQ_^QoMw-PR!PPR6eH9`lu$5# z;20AqiDel#b{#Pvch&ODdKE1o%p?kq8(%CLc)Xf){+)g7h+68jSP2~3Sv{QHd6!_o zUrSq8e?#2{45C>R&kEy{MTsk>S$5N{|NW5OpZyNCJGu`wD`}CikBKgxwLW8i`7Xqc zv*W3yE{uP~IGZr?{krXkqVEgWcM?H_LwORDCNl*GOQ1|Z?we!vMG3!U`JGbOm{9C5 zXOYOiVR2QqVI$F=eRS94YiVqcql{N&yOp+)K0V=U{*j_6rU%7JS zb$$ExeK-&ZXkH`aHm+m{$PN9|^}Fbn7v__qda3JSrKD?On2qkR!t*+_19G?2V(Vlq zTZ`me3sGb)=h#|CWc(9dluMB%y~3`E+zSe`)3x?sQOH9%3*8hycZu>Iy919^E8(!} zPIz2eu|ih3P;VajdlEh)PL0qaPD6B}#f=*t?&@9S+fr4IhbhN-r)*udZ|irop2kj# zt;3Z&%V_VGO?2%g7t%$?ADhglnzi@JeashIw$bk&e}Za#h1BuLBSY3K+YvkQLv}>I z+}Pi&i~4l>GG*m0i=H@vN3E6OrtL<)XV?9LlPVIT%HEMV^l`Fyvdm?pz6Ce=kK7X$ zh^FY14}dl%5;ZlnW%&x~er#WQ`^qWdoXJbbS=*=^A>)BSAn5gaJ>P!&?X`XT_MJvV zh6Zw*m1G5$u}pZ`WtVk*`st@v6A_Nvc1zlJpZGAukAM5p7qoQwx75B%H)_$uYer_a zj5J}jR#_-#E(KP+VIW!;yDUQt>t9G{3EwEI1uOAcb+H@08+j`aK4CsFi(~%6 zAs&{sof}FhJYaen)LOcA^=Vj;GEoLm?RQWhQSQRIhmT-}L3e1=OxrFDfo+ z89D;V)fExfvbL~RS?tpzqAk9*C3GpF@LwG)M9x`t`5l{PMofJoC)=$t(|A zx_(!$iVPJVUDrP#qLEl8bV)A8ZE|P-@!FmArz`=MV6bvz~<{?tIW81_k6JCd%EwXnRFl!pu>9fBo7}SlVIu2(ncJt!;$ZccTC3$L1V)k zCpc|L1eqcxVXefLe3nOzOgj6KMLCQo#-yoI;=P8OZMr!(QE38hN3Jeq3haZ0U$5T%| z^)JGNR`)XCNxL=cdbVb*SVbirI#IjkMV9Ey_L_Akbi@){9B+W|bSSj8AMSKwTCn1z z*8uoNm=zn%gWl{Dqj-_XQ?q1aZq zQbQmR2n4)duXpa;xp$s=>ZyNDc6m_rlF8=ASSI8H5AV9`uBCpzU-kL;P-$HCCBWwu zvd;)#E4NhAE&p0Z`*v-oj$OJ^(*jR8q=R)}slz}eXEf?-ckAq)L?-Kcu5xJg`TLnr;Q%FHzEm=uW2jRN4X2fwIl^l!X zw_|tpo=9ZL!YJnZobqo@-9x!BH}ae385{X5Nmra43cp~q8tJ5#`hKI? z{5&&bs|N3;#g96`^Izc5^n**#H+9#PeINB#%CZOuNzL&=@qwWp{g8`4n6YAA)rG$Vy6A5TK-T%%C`rj9;$=9SAbuMjX4AT+ci6jM9 ztQ>|-^kTWo+zM=KCCSdZB3)$kd@hzH!x(c-J!oyQ4noYK6^AS+&axz8V3I{xqA1nY zw4A%b&@!8%+tLz`hV$uc1Cz^X7g_ZdSn&j+eE>?>DEn7xH zR=tD!_R+4*8>oGcUUc_aW2xU^r5J3I=zZ+gjt3TeLT|tG4h0Gdsa?1356~t?IvA=g`@fX^>A|{jOye}mFV@#@|i)7{}#`hu% ztk6^-QikXz9;0jun@tq**VfX`^&7}nTSFI|b1q$b;?Qt*V6{rv*pj|MXqxZ7`|j3b zjydMuWP*#zFH6{!#>ko2O*ruBr=R|`wzjsQpr8N(I_YYR|A5_^RldK5{_xsTTC;XN z6}4d@l{vPQ!~<>UU1rm;IkrYWoopv5mBg06=G2T7BW5G9$~SJJ;NE?7)-Qiaw~iW%wqB36?($K+wzgI&C@An>am5uUJ^l34%hD~djON8_ zlDe*cMnr=&P198F{cxq6fL&;ZQdAt+|1|4`yY1xET zcv5WSF|m-8EkKFp?rs)Qtbr0Go1)W^Clbf{98_za!N<#G{5s(5a634-e;@7M_5(F* z){HJc^K?4zI0&m$bvE`srZyO)KmGRu`gs04qNdHLO{dP(q**f~^o6+M*II(_%7v9k zOac=5^SPe1Sl(%dUkS$qvy-&u-*O6trQ?ci#d4Bzc1xD^t)YIw>+@1gRTWii+eWp! zE9kh9Bk19upG{3AUuRe|Qq}UK(=oLS*Yf9zqMRhnNt1qQT`gGrB4e3Q*Y)d(=plq_ zNSb}p57=j#>v!&_``%eeYc^~mkIzRP+P9|yPskxUcK0TW0C7N_SYejEQDZy1TLnup z0>xsEFnw_%&x_q`$?OCQ%_OCA*r-N?N~~_!UH*AC$!YD~e~=FD-a+2NCe);LDHRv` z%oPReQi@ShCuJwXYPs;mitc=4iIf%iVURJnaCwJ2>z=Z!d#emx`-ER??qZZEF0oAg(gUk}**vsh?xH25zTe@xY+ zQrpA3P*KyS;Se&e`Wb=Hu>m-wV6$R{CV1|?Q&*D>DWYJwe{kAW8?Wl^mbe%VP!?IC zTdeK_;i4*vu@qQcb%1tl*+S}}8anorlj;65eok$gHj9W_>0I0VYME&*tq9L>y`m@& z*VTFzs_nX8#xmj1p+kEuTC`}HuIt5$qOgZOtXOqt>gq|m&??_oO;65WOaJ?91@T^k z*6lh_^P1xO_ABsx-?mB<=%Dt@QzMkI=X zyCx8%in1RmaA-fZ=-i#IJGDQp-d;ifS^PEm4;>(HVG$L#?O=#4JBqPu$+`oH z`M51-^sYkVNvFC>*m|OcjM!`t{*BPsu67l=v0)_VA1JInKOr~Nud@UI#Bc0t&Q~MO)=3{8;4#a>PIo! zku9>jyTZ6>Z;=U!{AS^=?qqoizdKgm{z<)q@h$&6p7;vKPz{&pMtwIUDs7bQT7cRHthJ1KmK@aU3L%3bBg-p$q-q( zu75;CqfF0xwrt@_0|EO-$A?J2`uRqBaltC`@83fOE!t4qmc>-yQKjQC!oyR797Zf2 z5l2v`*_T_P;2^Lhg)h21_j6TSBxPCW$%C*fA!D_o342JzzWsElVyBVIlLz&u^M~}J zzK4Yd6>)vGv5aOf-$ehF*R#lY6x6TH7vF)J-IO~xoRP?X72WlchSe+ z*djj4Gj7S^CpK_JZR9hYi{1fb8Z^&WtFEr5y}Qb&c5fwh={Qf)-8$`NjxJm>6FzH9wb*HyzmY|hrRj^lGF}RydyFJZi)+B|r^>RO zRJC&_b?A5){c^+znl$8OOCk_f^=iIJKdkF|(2R&MUs06NF?UM2Ou0T5EPjPpCcK)6 z9uEeCL664+f#ni@s%~@o2zz+Slud0>~?%7S% zd&;Tw$lmm;5uI#0cZ%Iths*H!7XYi3Htpi5l7-fmd;$YV>+Z<;nplftsS2-Q1+)YJ=MKo|= zf0{h(IO^6W6eN_dkg!t1j`^wjc94!c0#4S#<=c1A^d+Cs>My>aLz+&_+qa_@ty+=l z^@f^QoXt0uK*mmy)6GV1=^I?d%S+T2MS0`esU#>;KV#;}n1CtLVawv1iZPlRDVVMS z{OsP!3flkU4pIXF>UsQNy7KrFX?V9IA*|dr#Rk1g(lA#lit@B+z2YUqI$iY@ScV1b z=Rf~>r+40YhXZl7kvw?olp#D+cLKs%BFxU5Qnf!w&n{X=3s&!-AGiKs_zpEIX+^D? z`ixW8dEm12Z?Zp=p~1|Vm)TNc&kx;nY|d6JS(1hNF!9dFxmy-0VUZAf2U5hFNX#6g zt#3Rd=4)TIpQ`s)P*p`aHEYw6hV?zt5LHLC4V_&l5ArfwVWE$U2doK?WpSh zRpCiXTQrxy?QQ;<&z8}9D^}3f)vHM_D4-VY+EddO%{fq`5t-2*TQ8iZ{4Lv2M~N(J z`>xLh4EbA-`!w4Z5^ZUYHFpdzsYh-QmR3&xz}~%daCZe&?JB2EhaXO-o_G>nHRNO} zE+`0>I;iW0e~svu(DKqwKs1G2XP$ZHz}d5BZ>!JppcvQcTMEO9RbE~`t8Lr1=OHFm zeR00YQs0$0i$UR12N`;Jw_y?-}bg;6VYOD5BVT)GOuSZup zf5=fZxN9VqQh0zjtXuJi_*l&O?TglJrxzBlqRm^kQqA5{vV|(Nl;}t@jvrQ7yM?Ws&LfWyRb0rLK!E&*4$+<++sUH` zsd>jvbb9||==|gRP}^qKbK~K>UjKfeAybGox!85Eie6vw4ZXMQOWM6<3)Six6_>W7 zW-VG!K~a%m-3kW$Hbb?2Vqjg~woK}zHW^FnxLtmi?~^Ak)@4mM6Gu~)am*@n`OhB+ zP;FHe?J3(yfrAIAP0Q9aaPVN7IA}2SZr9#YHE8P%*;3u7ZCbC?UAuO@T3T8 zRF;z#@RPTw36->LMa2c)ke~<)uGl*YtuJ=d898^R&QH2IJl5H!#^(wMyN5=)VaYqN ze=pVStuQtM6t-+bC-yp=PV3!;PVUhmieG(}q?{~?;sq?W=B?dAi&t$hmJ#)Up9-6o zP}7#Js0niq2PBMk9(MAAiXLR@QU@^(=#3$;tnaj06{H<~+-eS0*U-Vr-E?SQB^4Dl zF*XC7IjA>{KI(Al-lk>rK!X{4*7as$a$xUcw(r|dbJwk>|EyR+Woy?`4I4#$USl^X zhkW3Jip8br(g`FE$|>B+>bv>El6Iu+I#2RM?o9b*a~=$Jk>*gR5Y-+!MEiE{rm8)a zRH%BWd2w?({`kRk&awSyK*vtbeGGQMW=wk*+U3I!Km66$v18xN6oDn0Y%^WgIUpB1 ztY9}`#x$FVJ%|T>r{%2LfJXmav4xgx+D%_<*h$ruJ4x{tlIrnLQE>|@F7i^L*AsTF z3i%P4heBH%p{0q@g`KP>*&I|DH%EpLz%CSc4D0b92Rhnzv>vE!|W`YuB%*+Cv9P^%juFS3rd= zN~l?rCdP7_NjqYHN;V7!KPfK<+U-@+@2qtedznyJrb3T~p5p&=tg3^1_ZZB{UrPnW z&8hFvN71kzUFfHMx`*14?Sdn3hIJNo%uc)s9VhwWy6US< z9H0Z0l@vI1i1eCTD)gvy#Bl>?WcMEQv!jlo4$ZAD2AoXDS|tgyIfWr|qZEg(yo`NRSw9rchJ`WXoRYhHQJk{SD=eoF(aqYcIWDAjboE${cEf*AqH@EoX329-KvQ$>0{zN+!4Yo=Pm`8TIL}iaxpG{U-6KOu1K)knZ-%{Wr zPOK}`v1i|lt2VvKyA<#%6sO>)S;OW~;DgMP9CEB!9iccg`R8%mI5b`sn#u&&Ik^OC zS%;_dg^~)v6z^a2Ol8Y=Jfs=;Ad%v=10SiEy&e$3WqP=w^0*;=6=V5h1fupc_AzbU z`P8GMwLtE&C*4{cGn*3hc{wbG_WZ8+S3YZNApLuj9!eWW&33eB$$sl7 z&1>gya`82C6#8P7q)=EM25*^ z`SW#?o>$y)PD5jRuRWtPt)w+IUHA5VGT4PbG`q##Lz{_wQcd79{@#-)5WiAWkbs3T zsZk;{1=}w*ne*eoo$8sMnqv3AEdzicDpU2~`+&Q;P^`m=E zE$rNb!CyT13G7NC+X&fReU!~tif&&7-*rOYB)PLRIqA6u3@h}bD@UhfdHIS7W+~Z z&Zt{|M+t0|z?V&^7KOKS)?5gKiu0sMz+n?-9q%~DjPeKJ#$ zaP)%X!`!DAX=f?-vR}Cll#n{}n6nsG$XTAbn9;zfJg-JPviG1C*3uYaOTIk}auNd- z+xm`K8NPd3YneGKGIC${gskq?H?usfeF83b&GCEGgi2|Sq8!K!NxX5@bXD#UH4Oyt zJ=>5=&A<*zr9Qo~FI-+eUzl_2toO{fW=54;x5PgmTWDh(?dJRwAyY%A;wR>u{>29U zyh?=rowwDz7$306|5uKX7=AwJZ;jAzQFP$bF^NIEq8ietvq$f$n}i~ z%@#%GzF2?1;ruJJH#WA+L=~HUT!(=~mh0$Hl|nJ;4)w5adqY?Nx4$nxGNEg0$klAf z`XuFR13$IZ(1_)#^4GF-270lFV{zQsO5Iu`pY+96#%u48-#dFe7>%p`fLfrlJ*8?v zg;UW`vF9M=8yBbm^2dtOq2pMIj@Ael1}-zGKlG9SgKNE60Lsc?eg2j_j^K{`XRcp# zS$G3YG*Z6`_h?V2>Q^Qs{R~9tkP0@%%pV4p`047BDUU*@oVb(7sJ>8C#@CYeQ+*>{ zJ9(b`%;cNJ(%Y-gDPoVUpJe|qDmTW=%h{z}y5WFyBb4JbmsmsT4ZR;g(O9kgrdbQY z_s|$B8yM8)pa|6aF-_%^vau1PPmv&d>uJiyjJ~Gq8pi|rP1>h*H>lG5%FE+Ys!zfp z5gj7^5yt@(va%z!MFR(gI?~b)H^_cTd_7L^uyxKj`I{SC{gR(NlB-?FhVm|rQ^aQ6 zf2aMUlA0nW6Y*#rqnl(1k ztJnNYD7SkvNg@Ushggvz?Z3eSCOHR7zvrK9*@9@t^JT?GHNkrNHWoy z7SFthszk-zqU+&(iE_y3*|oPd0g+E{e(pAKm`?G%-Q5uH|9W%swKI_!ZJ^`QSbeMY zlaiMcMff9;GGcLJB)%;KVRsStZ-?%2FCflbdqO8Bg(ltJX&B4ZY7DWfvIpO~sada` zVV6yTk{cLYEo?Y@AIRWlnO?BUAo9rqDR%b;0t0&a#{wPqX)Cxs*(*FF?zl3NojSU2 zNhkJA1D{J}2KMdU>d{>mQJrDI-fw3?!PuC@7?*!&IW{JL^8=(>jG7JIEfbeaE?WZT zqN|)*va)Tm`H#xo;C<^ib2+a=Axs#5{vsieyU7|_S}ISbYJ|ipX(w5+6$7I!VQ8}h zVtN-$DleLDS+m>nW z*@3h61MhhoJ9C0nQ;y??(3zKOW*Z(h})U1(4#_;NRg8Jj{kcgG^tb1wlf*YPHt zTqrF;#vSwj8#0BBNbZiPcj$vli8Hq^U-`&=_jau;(qg%W;Q<-;66p=~(<;ipbVD$i zLGN=n=i1nU?AP>t5r_8*UDG3WN-y8Ynj~(X9d9rmAJ3e7h0kn^c}g;#6g@<_DqQ*Z zZleUIdI&p__-3Q3ZOwA#KFt%?qI7Q5?2eQE(g8`woX6e$Fbrp344BWKzxUxjj_cn+ zVDPGtGeKAJ6ZQQP!2?-pEiU~rUbc*n#3jrhoB~__W2qj==J6>_;rl7i{V7u0hSNRD zhpy{s>J&6jDAP}P7T!mza6GDY*}B3aO2SO5R{{No^N-w-91s@4mWqp6%LhN-MR4@I zEdAo!c1Wp}C-&+m;Z3(EIcd!F|6~A@I7r^dFQ|l}T1PD=n_$_U^;Q%iejL0c-LSzc zB@Rq!7J`=tkmDO-{@sQTA_)dt9esOtdc3b&{J8D*uxyU>3!+SQqt9AgT44=-yjn>~ zWCmD&SL3RJ7^3?l%k*D3<=ztFQ#5oGJ$Bldu3I|VU7ZMSL(2~zo{8HUuuJ~^z&tDF ztcm96C+7_`(CRZu`Y*YT_;hd=#~W~EzDoIRH+G)?FJ9perg7cTY#`&?mC5qe*yR!f zq2NZhtv1StPd_t4B=MmThQhIA9{fjLoCJ9PvBFdkQ-T;4IkuYbdi<+0Fq~HSnT`y7 z$Q+V+3L?M8{zewL)D#>$NI;s1^;c7DZZN$dtj}fd;_dMj%rg0Om2(Qxjk@7+xDb!4 zZ`XvabmG-8w)Fdh7}3NxRHXBN3#5d$7K;?tZg>5}=dHCf5Y5+KHeewWdCB|5JLud}4<|YemPG+-m{~kx@ zF{K@!di@|T(J3`A{*sWYvh+eat2l1yCAl>rJO#%vFVC{5^ZH-1nqpzjx{q3Z$!#yA z!86QLqtvr&!cEG&nUhm8Zq3ycPe6d<3jL=^L8^!`L1k@CP4DFo@$GsZTWvOVw*=*D znuIdb;97a-@Ie%+cu0TOh4CNL=q~t>3d%f$=ahW6%4^F9nZH}b*_i1WOczNB6FL^re`lZfK+QO>E$H$dkW~{@fB>L+i zWdC&ip(0|;Nm-5T_GFI+*@AC7g?1tfFm_)+gI7^Ya4}5Dw<&FGZcA`)$c$r^-U|Is zZw2Wvr|#FdjTaeXNuC|dl@p`jYh$EjU#5*+l%Sf085#(#W-LSOE#eD}e`!r=x@8&a|vX?m;m z=Y^x=egHW!eD#xJjlEU=KWiH4<1>E8B_e~pQm8#jqEzI68G2qX>Pl{@HeOc$e|Lo`&$ll&VdiMPG8<)qY{L2Jj;vzGx zl3W9}?#ZgDFlTT)ALYE3r=7@N)U1^Uy60|CTD-AuZ(uIkWc_bl4jFf7>+6Y^^I%?=)>< z$wNhu4vrQ*{!orNXZG)$vxl}WR&H-^TY;nL({1%Oa=&g=T=~xt6bir^5FAcF+71ATz>RVGV!_k3TH!{Kws$8?Ex7g zZa(}*sqTPU3zKVdZ>29m15-4tDCoyIq~ZK@qvPb4t+#H>=X!03UPTZYeD)NN1yn1P zrRC(nzD6qcGP?dfW6?NFOkszA%=vIUPN}j{aofG~sSU3&F914}Uj5{Iqdtz2Po?KdtqdcD$h0uRs-v^aqezw*`}H)48t|tKvY=X=AJYJ)@D z7kj?VU^nUMDVF8rEU+mt;(yRG>j_l5qyA_mHx(Cxh7^v4z&3OSM|Ns(-D1h(wNhiYH+IePH3hlB8BDjens0~D{)GTc@9=(lY-PKodL1oiv!yr=o!FEa zn5~keTT(yH-sESgk)y*%9PGvUcSeDeT#Jx^DK!O`Y?7LwJs(Z$yj zOay|bc*5W8TJExJC$3giYxU*Xy0Bj!90&u@c)1OdyErJ%Nbdx?F?hb^RPw8~Y$7rH zVb%n~QqIJKDdU<6V~l)Pi2g7n5)Bnp#?Q)G(Ff&`+@OH|lT>^h&T}23;_@!o-JI1U zU=_((II$XdOz|#BW{4LQc@>{rmfGxYr`yLD?q-WCLy5&2E`TjN7tlm%R51TT4oy<` z0pov|2`$ImcsIDbWBmePgiIc z+?$pD+Kfh&&J~W}jJ{N<^Ve$ct`NN)EE9 zCSr5qa!-v+(zR_fQN@H}=qN{z5+!#yS@Bd?&%ode4^AI~l|DRKzj^DgN*X~}uD5i( zi;z5u0q9^}LjmU_N1qeA&FpsEl^M6yd})gmCyKyl?00|Sc>MZjd2d5l9=Y#+wQZ2_ z_*P}#?ci$l;6X1gnw&yMxAIwC4w&mF&?96-VNmrSz@~}xp?Y5V^y}?xa5Y?Y{%FXk z9*+xN!<@Bx^c*P&KSL252r*mzT@wsWT;Jb+GuR=!I;XYU{|-D~!hm%t1UrP9%8VWi zmJI=-;1hr4SlV><822w`#JR@QI$HToE=<(^?BsCGxlOw-B)90NC0|)$d=Z?{dVBse z7O)7nrKqk}Y`TQTHhYjHC2Dha!Y{?T06qW^$&W1;LIW_hr-i}$WUKIZ)5g7mRu3|Y zAM7b1uYO`b4`I*E^DvFFW)$qYMBD=h(3k3Bv_d>;WD9M2;#b(VKYe`fO*oU+|+&ZdWS-)ls1yb-h->RcZFc&<9;RG2}PB#`QFk`1y5TePa_WXy%QZ+?nF3+dCNtK?^E0-b{$%SdPR;#5JV|BRV z%=+B#!wu8?$I|2jPN%?J;;3wV_Igxxss2n6c$?^6n>-f{wV2gy)`#vHM*)pj;IC7r zXRc?YHZM!44L5E4J1Ob1J;O8DE#OfzI~ILP4VNJcUgLtxc?$(}y6p_gd)xmiAFDUcv0sF0{WSh}Ksd%R;d4E0 z52aqx_uL(|mDZCL#t*_-Qk7lfnrGi2!iJ!I##YHbvO6^~Ao%N@@q5MW<3s0n6Oc)QA2krK+DUd=Sg>n3vd^+Zu>_rc!%hOISEf#apdz{6(=WYzlk+cXUr{N^%m zB8=KTwu<4q=2wHNjSZ4PJ1C3OaGo8}rL6P7Birl!!O!{z?IqTK<|?wgL+sOd?;BU> zCIM0-XH|5AOB{#4ghZx={!(o3$ROyx*FI8S^`>YqtZe9k;*wr(@BVjSl_68-mTkJt<=Q7C^b(l*XI@7!Qhy zrIYzaa4EWnP{(>QS-iev;f=h(ck<_yvsABh1z~yfF8;D#P7Z$;Qh}Zm(V67+ zVk3%1ugr3Aezql0HLxm2mtNXvG=+A9=W2mo^)?YG7_S@K*vAE-i}S1ZSKG-{FR`~E z585tfFP2k#db-fC;S+o{XPq3v|G@dh$@}6@pirqJ=qHT;@y+m&Y({nQzgzNx)L!qL zr5Yb|Ny=a!Yfi88ip4-{dV8@<9{)xra}Sx51rD`Foify=7QEiVIU@>ei%?KiSH8(v9e$8v(Q8=G> z_n00yLx#q8;xgDtgE}Kxl2`kNmla`oBir*Mp)KjS1T^!yHIB<%ETXh=c_T7%!Iy72 zU1JJUv?XK^cWDML7D|uWM0@ICt2!}i*&0hu=GW9G=O*Adb+d$U>ui3$$LL*qd4@Nl zeFQ1$Mn9^i;^k`P=lEAWNyvoYYqi)B=$5$c{8X!YHYG}-V`1!U+|nf1b@{0+JOz`1 zuTwQnV&21<%A>^E1Y=K_ifF>~^-U#|kd%$DM~fPxL@zZ<5K~dF?hBYx7SeEjc1#nL z8}RfdF^ZsDn5*P~x2E74l~v2{_P>zxI;4UrgKnuy#F|)Ao8aqx@SAak3i@_m{5x+& zj7qoe?`(GHUYHLiLp*5DoGtR@-lj`TA!11L87$8+Dx40|+oa%Hz4;o!M7-lxC&DD^ z>Et7PA#;d&;sGo)7!1$PRp8|(qP?8&2Fq)o?d@0*zmN1txWQO}7Zp40*7)_$ugBxr zr9Cjf*&!Y@0VYA~3PUhchEgBv@7&zVBK2_RwR3(zYVlt=bJmgIt_ku%Wd zA1iYaQuXG*#fwPR;ySz2s+sf^2db5X{>r5j(3vFWydDeGJt=dwMq7=n_|v;BhX7%} zKUmL{7E^i5NmDJR5ro+bs3qKXqKUP`bp44@Vcn@Seb)0_C0_hbM%W4G28MRJf27Vq z{vreTvV(%xHou7l}a1*5r+^yq)YZ&NJJDX_5#1#_Y=;8hmy zV>2_A1tzvXTSY^Wp}Dpcyapa;H$T4FCTP`M93g>fEskI>wW4^gXAssDG~7eB_%<0e z0_4wRWj;#k@CRFj-9ymOQUDCZ1OL@nV)RZ+aip8M=vJKJH?71H{mm0%9R~$z-ywFia#Za8HC5_nC4KS%mrE=PBbr|Uw0D>ktIgf7^^H}|$zBGhA*Ds?LU2!=R z7hcZ-c+{Hu&4fT{$r}f3bgYC^+Z}RaIuAg$l%N8E(ug^yl3a!;-HW$_-AU)KtB=NW+M@P-9V`Ph6& z@&-7^P}HP7R2fCmvyS5$CL*DVLp8-aE3JekQ35lf*FWLV@p67Wmxv8$^ zEdFSb0XD&4lC|$tq=1VR10DN;+@iZ;Eq>RUFi4c3fR za#>?%BG(^pO0oL`eWi^SRJa5EUY{L}H85=Ud!PMwWm&N(Se~P6`Ic=F0|iSw#{1c1 z^kCmb{F|`169|BwEdq`m)0}Bd7#2I=F%>!FN>&TXu?K<(dyL0s6D|?yAo2{PWs+P) zEZ1YHSTEEY&BbiA8j>nC7b@`Vjevy;wr`-hBKD0aWmw*IBeTK$S=N@4l9JrXa%-bx~d(2g^{8HFYGy<{jRwsU_zqR+(){y_%x2k^ow?^ig z4|AUTN#7nt3h+vR{jN`aiqA7_IFn>aGBt;Px++ju5P1zO{o6IB{ql&)XH!QJAXl?C z!lSa-Sx52?iGvBtJF$d;r2`YHf6MXb14;9bg5YLMFE#n3v{xBc3<>zWCsd?@yo1%0 zS#zrimr>7s(&}Sx>uaMUj{5vjKz9#lY;4ryb$kOHPn z6T?<&*7>LS7xf$mWrgccw!3qSt|tiZ65(rkX*yMv8Czc;w)iI{Xd?;T9TR!avuaA;uAUIpsQiRpGX>wlJs|DbH0^y-U>HQxc&6P zwNPDbK~7-4C6kR(wO1WIjwHNLdy`NtN!q!kN z2F(f?wJ>VUuN6;|!R*vh)>ToKZDxpvm++OC3n90Hu$(}o4iI2u%{n_Lrx;9r@BN*{ z5iDZV9nBOcj{D;_ryvx$HFDuR5GBFC-|6DhtsbBJ8%SnK!brWA6mwKavy z3JD2;sf}WLsvz{k(P1xa$?b~)rI_@+&m=x~LHYhFz=L(ldY#%SD)4Uc#m2=jC07Et zj~5A>gm`N=o0Un~R9=p9%+LnN95NRTu&+U@l&Rp~y|+RP1-*e!@{E(6z3Q!JY0)ro z7{F)1t?Cqm`gt{YPgdE_t$TnwDV%UG<_KNcHyJWU>H4iK#1-bA;L|2JL<}bwx}}23 z*EBWZ*bKiwZk`HY(zK@4kJ32BjFW?@aCx;hZI{hmK9fhm#=YN~X4Oljz`mCswZ zGZbI+XhHGU$Fu}0GIb1o)z>iH(yH3uOZ^RwtwC^SQZ+V3OKPzvc7KjL3erfnu;j(Q z6!(qnk8h7+uIG(^PLUb^4nbFeqj>=Fnw2;lqKf?GsK12qA)ZtXQ{IV>TPG+bmP_*+ zhyo3aLtomFP#m+JpDanuI4z|(uOkHa+6$7_JfxsnFTUvBm=~?JaRG!6_W*9;M3PX9 zK)_T$;sc3JESQgv5=1o6-~pK|>N}-@`>*m!5L|egekh*G*%>uyk48KMOL*PvpZpX$ zkMUu83_LOf;?dJ`Nd2O(#7{5SH;nhQhT$qmnx#gl!ruJ?Ik>a#ixxTaK;?8E6n}4a zFv`?^jI%@p;q>EV3n`&6xGjDJa*Qs3(Y7nob;p{>RsktVj968Kzqb~JCVR;h$Q=~~ zU2TtNd}`2JYDtd+eISfSgIvOQdFNfQ6y&#$@8=lHB5BgP{Q)K3Tm(R z)|ge!mRSw=C5yXmb0Y;o!e_`y0`y~YerD-T{RrJj0h?#SymLj2aw8cO>TQM>n}B8z zahlV$(SB|6Q8a!SIMwZGZy7gY#PTw03RG`oSij2Rq+|@=JRF2QxJPVh3VC5%9u~B| zI{dN!Il$|pK2zv0J+V7y0M61Ce!t3Y;4)!1kS6^!o=4ve3vQ1*FgKqj&Jx7pz|+A% z(_J@myFrzUb`P>_|K8-ss8eB+xMtzM&`6heaQ`O2V3{MxXG<+5HX=_(vLpd!e>(&= z^J=kJY<|nd*Y0KiFFBtfGy+rrF;lwWre#pIBrk&2>eK)Lo`z8J8raq|e!?1l0C&MY zF&e-bQfg!=QxV^4HHqWWX*Q%^9foY*n6h}xY5 z12Gu>WE%a7x{g+QyC99ev9Y6ZyNMK0(_#5Tw)KaLL7)p}@wHm}dS+E=*G0Va*xlVw zhz~-Bl$e536E87O#A|f*;yJ&DqtU{8K0`v>y?_Gj_Ztcr5PX7n{CKFBf3j_EAS5pg zA5;}lMgB~T!dk!e3%s|Y)}e6);+ryx>|Q3p3~2P;WJT0Z5hh;gtYb5C za_ow7STZU>n5oxWp>LH~YdH(A_FW%X(n=^HQD&5ntR=nY&R|{r>E2gb4NZD^Z}*6Avk-{gkblG! zc@IL2%6|Wknm^xVk zm>~m?rSfnYJvPf|pH_xS|o)B3)uEhgAVvQII2WIQITv8FQe z-1BF8;Ml*OyFM3k=}XY6yFl--nKfQ-J8Va! z?+Vho3lC86j#?P|%lzkrxYXinMJ6gQ=C#K;0syi#AtKMd2W@5c#kL8V44zIPz-S9zwh~mU3wB>`aILeIY z2)S<0r-P7yN%}56%L@B+=mR1GEnEc=DZFtREm;${`eGJF3VxU(+L;v#3g56nNg&(h!!*#k5mRcFUhWm96KT@ z66@u-XxH8dTn1mP_-%V}`B#()NG%{hJ{R1Mw;JG(HUS%D!rFu9#0>RTM#%OIaphb~hwM$*k~ z_0F4wNGD=rQfLMgJtS+Rbubnz&<9|aG2fu>Xjfh3ju|2RSA1l#e}c&vHHE1jQzS2x z4>hl({O(OL4B49_AHguSJLNn>udbod8kgUM9Pwq`yS%(yQxKvbbl^2mu#NUf&mxl@ z{8RcNkdeAs9uX9$rKwr>VlmO8Uf6kE4^AB8jXRU$VM)zyq6eX38bBbJkO)GBC&=I> z>+g-|I?$n@Tm4l~+ZO~22U)}1oNKK?i)TnY130XC;Cv_VAZQHNI)iG@G2+2{EN-sg zWO;sph({l$w|N?Scj!TUOMDO|fWWU=1CD>Aecq9-+j<{=onr$5`8~jhMFC=5*pdql z2@EP&IM(e);!&}k?mur%?Vt4!Kqik&HnCh@-BR=3wGIaNwNvn)O}2)INZyjUE+YHk zg@R!dM6iLrvjIrqOg&v<%*arfR|s4d>`hXw_NWNqE|^-Fw`)E<>18_Mlrac2ry zQenrH<+7hTOKbLA!$N7a0~CQIegb&z9C*C>oHprX#AXuKx%AYkl$eeu%Pe90^AL2_ z_#?fn+=7~%B{1|# zrVf;>`l(2r?rec;gd*WVZb2lapsA`9s2$j&rjQT#PTTY9MpUu?_lovJliZxR?d7k^3Rv`s zn;-A}diSh$t9`EbntRQJQj=2fiGU>gn0Nw>RzYaqN|_l4okYrv<@5WLiQ@=lDyT5< zKFW%YO6LA3UZ&trhVYZcQ3=-3ogNA|81H)SDnmq9BDip(c6HE;cTXf(V5DJ1;Ud zNaQUC&5=( zCaYY3FD`&ll?V!_LLWEC5*O~-J4^bkdLeF93E;a6COQ%FE>3yfRgiu#T5i5c2YVk0 zD0{`2H`~qj)vXAd5b=n5 zCjVHr5PHdH?Pcr^FLzLHh>FdEgGADngfB`jSKdmv7rYg9;@CJS4V1SVz5P&^?mehI z1i3fIoX;dJr%VGb(0Tgc;y(A^5}h*-;jS(N$!__ z^NsnzYr54INcvXrTQyq>-wwN|$06w+TPpP;N@X6uiI6)I@TUi>hUYakWo3^3IXN@> zFDA?uJTj|f6wRdlQ@p50$s(zVgOmZn%*TS3B>PbH9O^EbwV|4rbaz33=A zw07gBo|0GNqH9?qx#^7zK;LJ4$SxC8z12kU<5#zNKYF&p<;lQNRQ?o1@W1BkR=&8X z41*_S?v6KjpTqTQ9F4a|+pmUqVLtTS+HO-a&Xc+x5{?QV8Sm)4(KuhxSbzM{<(?IV>zKoJ*0VI6&) z!-X%xAu~Re@s5M3y_1uZZbZlMi~aSfr{;ZcCd?asFl~OVm_BN7(Y_`&S$RDp6RCkf z`Y)!k_?TsCU%{uNP#zruGob6I9B<9^#$}OnYS~DD+7ga?N=n_ixw-p-)?aLvfP;Bh z?-F0+;?HgTIu`zzV^|kw8y64`WSNLuT*#mfK8V_&tSCqlcBt3B?%TpQ5Y^vf!?f@BaX3=U$iq literal 0 HcmV?d00001 diff --git a/frontend/tailwind.config.js b/frontend/tailwind.config.js index 42b14c1..3db430c 100644 --- a/frontend/tailwind.config.js +++ b/frontend/tailwind.config.js @@ -12,7 +12,25 @@ module.exports = { }, darkMode: false, // or 'media' or 'class' theme: { - extend: {}, + extend: { + colors: { + gray: { + 450: "#3d3b3c", + }, + }, + fontSize: { + s: ".82rem", + }, + }, + minWidth: { + "9/10": "90%", + }, + maxWidth: { + "6/10": "60%", + }, + container: { + center: true, + }, }, variants: { extend: {},