From a14f744c013ae6961ad5a11aff30bd861ee58d95 Mon Sep 17 00:00:00 2001 From: Peter Hicks Date: Thu, 22 Oct 2020 17:02:28 -0700 Subject: [PATCH] Update Marquez Stylesheets (#122) * Adding a global stylesheet and new header. Preparing to revise search and remove dependency. Signed-off-by: Peter Hicks * Adding the new theme and making it dark. Signed-off-by: Peter Hicks * Migrating the search bar experience. Signed-off-by: Peter Hicks * Removing old search experience. Signed-off-by: Peter Hicks * Updating pagination and some styling details. Signed-off-by: Peter Hicks * Adding in new font packages to the application. Signed-off-by: Peter Hicks * Retrofitting in new text component. Signed-off-by: Peter Hicks * Fixing the font in the search bar. Signed-off-by: Peter Hicks * Fixing container elements on the pages. Signed-off-by: Peter Hicks * Fixing the Job Detail page styles and removing broken elements. Signed-off-by: Peter Hicks * Self code review cleanup. Signed-off-by: Peter Hicks * Handling regression with latest run. Signed-off-by: Peter Hicks * Fixing the test run cycles. Signed-off-by: Peter Hicks * Fixing prettier and suppressing some errors. Signed-off-by: Peter Hicks * Graphik --> Karla. Signed-off-by: Peter Hicks Co-authored-by: Peter Hicks --- .eslintignore | 1 + .eslintrc.js | 6 +- package-lock.json | 313 +++++++++++------- package.json | 11 +- .../components/CustomSearchBar.test.tsx | 26 -- .../CustomSearchBar.test.tsx.snap | 11 - src/actionCreators/index.ts | 3 +- src/components/App.tsx | 72 +--- src/components/AppBar.tsx | 8 +- src/components/CustomSearchBar.tsx | 72 ---- src/components/DatasetDetailPage.tsx | 106 +++--- src/components/DatasetPreviewCard.tsx | 69 ++-- src/components/Home.tsx | 117 +++---- src/components/JobDetailPage.tsx | 308 ++++------------- src/components/JobPreviewCard.tsx | 59 ++-- src/components/Legend.tsx | 26 +- src/components/Menu.tsx | 22 +- src/components/NetworkGraph.tsx | 182 +++++----- src/components/Toast.tsx | 6 +- src/components/core/code/Code.tsx | 44 +++ src/components/core/text/MqText.tsx | 178 ++++++++++ src/components/filters/Filters.tsx | 8 +- src/components/header/Header.tsx | 59 ++++ src/components/search-bar/SearchBar.tsx | 112 +++++++ src/fonts/SourceCodePro-Bold.ttf | Bin 0 -> 191568 bytes src/fonts/SourceCodePro-Regular.ttf | Bin 0 -> 192740 bytes src/global_styles.css | 10 - src/helpers/theme.ts | 47 +++ src/img/marquez_logo.svg | 52 +++ src/index.css | 12 +- src/index.tsx | 5 + src/react-vis.d.ts | 2 +- src/requests/datasets.ts | 1 + src/requests/jobs.ts | 2 + src/requests/namespaces.ts | 1 + src/sagas/index.ts | 2 +- src/types/api.ts | 2 - tsconfig.json | 3 +- webpack.dev.js | 2 +- 39 files changed, 1106 insertions(+), 854 deletions(-) create mode 100644 .eslintignore delete mode 100644 src/__tests__/components/CustomSearchBar.test.tsx delete mode 100644 src/__tests__/components/__snapshots__/CustomSearchBar.test.tsx.snap delete mode 100644 src/components/CustomSearchBar.tsx create mode 100644 src/components/core/code/Code.tsx create mode 100644 src/components/core/text/MqText.tsx create mode 100644 src/components/header/Header.tsx create mode 100644 src/components/search-bar/SearchBar.tsx create mode 100644 src/fonts/SourceCodePro-Bold.ttf create mode 100644 src/fonts/SourceCodePro-Regular.ttf create mode 100644 src/helpers/theme.ts create mode 100644 src/img/marquez_logo.svg diff --git a/.eslintignore b/.eslintignore new file mode 100644 index 0000000..0a23320 --- /dev/null +++ b/.eslintignore @@ -0,0 +1 @@ +/*.* diff --git a/.eslintrc.js b/.eslintrc.js index 763d1e8..5969a0a 100644 --- a/.eslintrc.js +++ b/.eslintrc.js @@ -9,13 +9,13 @@ module.exports = { project: './tsconfig.json', sourceType: 'module' }, - plugins: ['@typescript-eslint', 'react', 'prettier', "sort-imports-es6-autofix"], + plugins: ['@typescript-eslint', 'react', "sort-imports-es6-autofix"], extends: [ 'eslint:recommended', 'plugin:react/recommended', - 'plugin:@typescript-eslint/eslint-recommended', 'plugin:@typescript-eslint/recommended', - 'prettier' + "prettier/@typescript-eslint", + "plugin:prettier/recommended" ], settings: { "react": { diff --git a/package-lock.json b/package-lock.json index ae5928d..56dacc2 100644 --- a/package-lock.json +++ b/package-lock.json @@ -33,148 +33,222 @@ "@emotion/hash": { "version": "0.7.3", "resolved": "https://registry.npmjs.org/@emotion/hash/-/hash-0.7.3.tgz", - "integrity": "sha512-14ZVlsB9akwvydAdaEnVnvqu6J2P6ySv39hYyl/aoB6w/V+bXX0tay8cF6paqbgZsN2n5Xh15uF4pE+GvE+itw==" + "integrity": "sha512-14ZVlsB9akwvydAdaEnVnvqu6J2P6ySv39hYyl/aoB6w/V+bXX0tay8cF6paqbgZsN2n5Xh15uF4pE+GvE+itw==", + "dev": true }, "@material-ui/core": { - "version": "4.6.1", - "resolved": "https://registry.npmjs.org/@material-ui/core/-/core-4.6.1.tgz", - "integrity": "sha512-TljDMCJmi1zh7JhAFTp8qjIlbkVACiNftrcitzJJ+hAqpuP9PTO4euEkkAuYjISfUFZl3Z4kaOrBwN1HDrhIOQ==", + "version": "4.11.0", + "resolved": "https://registry.npmjs.org/@material-ui/core/-/core-4.11.0.tgz", + "integrity": "sha512-bYo9uIub8wGhZySHqLQ833zi4ZML+XCBE1XwJ8EuUVSpTWWG57Pm+YugQToJNFsEyiKFhPh8DPD0bgupz8n01g==", "requires": { "@babel/runtime": "^7.4.4", - "@material-ui/styles": "^4.6.0", - "@material-ui/system": "^4.5.2", - "@material-ui/types": "^4.1.1", - "@material-ui/utils": "^4.5.2", + "@material-ui/styles": "^4.10.0", + "@material-ui/system": "^4.9.14", + "@material-ui/types": "^5.1.0", + "@material-ui/utils": "^4.10.2", "@types/react-transition-group": "^4.2.0", - "clsx": "^1.0.2", - "convert-css-length": "^2.0.1", - "hoist-non-react-statics": "^3.2.1", - "normalize-scroll-left": "^0.2.0", - "popper.js": "^1.14.1", + "clsx": "^1.0.4", + "hoist-non-react-statics": "^3.3.2", + "popper.js": "1.16.1-lts", "prop-types": "^15.7.2", - "react-transition-group": "^4.3.0" + "react-is": "^16.8.0", + "react-transition-group": "^4.4.0" }, "dependencies": { + "@emotion/hash": { + "version": "0.8.0", + "resolved": "https://registry.npmjs.org/@emotion/hash/-/hash-0.8.0.tgz", + "integrity": "sha512-kBJtf7PH6aWwZ6fka3zQ0p6SBYzx4fl1LoZXE2RrnYST9Xljm7WfKJrU4g/Xr3Beg72MLrp1AWNUmuYJTL7Cow==" + }, "@material-ui/styles": { - "version": "4.6.0", - "resolved": "https://registry.npmjs.org/@material-ui/styles/-/styles-4.6.0.tgz", - "integrity": "sha512-lqqh4UEMdIYcU1Yth4pQyMTah02uAkg3NOT3MirN9FUexdL8pNA6zCHigEgDSfwmvnXyxHhxTkphfy0DRfnt9w==", + "version": "4.10.0", + "resolved": "https://registry.npmjs.org/@material-ui/styles/-/styles-4.10.0.tgz", + "integrity": "sha512-XPwiVTpd3rlnbfrgtEJ1eJJdFCXZkHxy8TrdieaTvwxNYj42VnnCyFzxYeNW9Lhj4V1oD8YtQ6S5Gie7bZDf7Q==", "requires": { "@babel/runtime": "^7.4.4", - "@emotion/hash": "^0.7.1", - "@material-ui/types": "^4.1.1", - "@material-ui/utils": "^4.5.2", - "clsx": "^1.0.2", + "@emotion/hash": "^0.8.0", + "@material-ui/types": "^5.1.0", + "@material-ui/utils": "^4.9.6", + "clsx": "^1.0.4", "csstype": "^2.5.2", - "hoist-non-react-statics": "^3.2.1", - "jss": "^10.0.0", - "jss-plugin-camel-case": "^10.0.0", - "jss-plugin-default-unit": "^10.0.0", - "jss-plugin-global": "^10.0.0", - "jss-plugin-nested": "^10.0.0", - "jss-plugin-props-sort": "^10.0.0", - "jss-plugin-rule-value-function": "^10.0.0", - "jss-plugin-vendor-prefixer": "^10.0.0", + "hoist-non-react-statics": "^3.3.2", + "jss": "^10.0.3", + "jss-plugin-camel-case": "^10.0.3", + "jss-plugin-default-unit": "^10.0.3", + "jss-plugin-global": "^10.0.3", + "jss-plugin-nested": "^10.0.3", + "jss-plugin-props-sort": "^10.0.3", + "jss-plugin-rule-value-function": "^10.0.3", + "jss-plugin-vendor-prefixer": "^10.0.3", "prop-types": "^15.7.2" } }, + "@material-ui/types": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/@material-ui/types/-/types-5.1.0.tgz", + "integrity": "sha512-7cqRjrY50b8QzRSYyhSpx4WRw2YuO0KKIGQEVk5J8uoz2BanawykgZGoWEqKm7pVIbzFDN0SpPcVV4IhOFkl8A==" + }, "@material-ui/utils": { - "version": "4.5.2", - "resolved": "https://registry.npmjs.org/@material-ui/utils/-/utils-4.5.2.tgz", - "integrity": "sha512-zhbNfHd1gLa8At6RPDG7uMZubHxbY+LtM6IkSfeWi6Lo4Ax80l62YaN1QmUpO1IvGCkn/j62tQX3yObiQZrJsQ==", + "version": "4.10.2", + "resolved": "https://registry.npmjs.org/@material-ui/utils/-/utils-4.10.2.tgz", + "integrity": "sha512-eg29v74P7W5r6a4tWWDAAfZldXIzfyO1am2fIsC39hdUUHm/33k6pGOKPbgDjg/U/4ifmgAePy/1OjkKN6rFRw==", "requires": { "@babel/runtime": "^7.4.4", "prop-types": "^15.7.2", - "react-is": "^16.8.6" + "react-is": "^16.8.0" + } + }, + "css-vendor": { + "version": "2.0.8", + "resolved": "https://registry.npmjs.org/css-vendor/-/css-vendor-2.0.8.tgz", + "integrity": "sha512-x9Aq0XTInxrkuFeHKbYC7zWY8ai7qJ04Kxd9MnvbC1uO5DagxoHQjm4JvG+vCdXOoFtCjbL2XSZfxmoYa9uQVQ==", + "requires": { + "@babel/runtime": "^7.8.3", + "is-in-browser": "^1.0.2" + }, + "dependencies": { + "@babel/runtime": { + "version": "7.12.1", + "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.12.1.tgz", + "integrity": "sha512-J5AIf3vPj3UwXaAzb5j1xM4WAQDX3EMgemF8rjCP3SoW09LfRKAXQKt6CoVYl230P6iWdRcBbnLDDdnqWxZSCA==", + "requires": { + "regenerator-runtime": "^0.13.4" + } + } + } + }, + "hoist-non-react-statics": { + "version": "3.3.2", + "resolved": "https://registry.npmjs.org/hoist-non-react-statics/-/hoist-non-react-statics-3.3.2.tgz", + "integrity": "sha512-/gGivxi8JPKWNm/W0jSmzcMPpfpPLc3dY/6GxhX2hQ9iGj3aDfklV4ET7NjKpSinLpJ5vafa9iiGIEZg10SfBw==", + "requires": { + "react-is": "^16.7.0" } }, "jss": { - "version": "10.0.0", - "resolved": "https://registry.npmjs.org/jss/-/jss-10.0.0.tgz", - "integrity": "sha512-TPpDFsiBjuERiL+dFDq8QCdiF9oDasPcNqCKLGCo/qED3fNYOQ8PX2lZhknyTiAt3tZrfOFbb0lbQ9lTjPZxsQ==", + "version": "10.4.0", + "resolved": "https://registry.npmjs.org/jss/-/jss-10.4.0.tgz", + "integrity": "sha512-l7EwdwhsDishXzqTc3lbsbyZ83tlUl5L/Hb16pHCvZliA9lRDdNBZmHzeJHP0sxqD0t1mrMmMR8XroR12JBYzw==", "requires": { "@babel/runtime": "^7.3.1", - "csstype": "^2.6.5", + "csstype": "^3.0.2", "is-in-browser": "^1.1.3", "tiny-warning": "^1.0.2" + }, + "dependencies": { + "csstype": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/csstype/-/csstype-3.0.3.tgz", + "integrity": "sha512-jPl+wbWPOWJ7SXsWyqGRk3lGecbar0Cb0OvZF/r/ZU011R4YqiRehgkQ9p4eQfo9DSDLqLL3wHwfxeJiuIsNag==" + } } }, "jss-plugin-camel-case": { - "version": "10.0.0", - "resolved": "https://registry.npmjs.org/jss-plugin-camel-case/-/jss-plugin-camel-case-10.0.0.tgz", - "integrity": "sha512-yALDL00+pPR4FJh+k07A8FeDvfoPPuXU48HLy63enAubcVd3DnS+2rgqPXglHDGixIDVkCSXecl/l5GAMjzIbA==", + "version": "10.4.0", + "resolved": "https://registry.npmjs.org/jss-plugin-camel-case/-/jss-plugin-camel-case-10.4.0.tgz", + "integrity": "sha512-9oDjsQ/AgdBbMyRjc06Kl3P8lDCSEts2vYZiPZfGAxbGCegqE4RnMob3mDaBby5H9vL9gWmyyImhLRWqIkRUCw==", "requires": { "@babel/runtime": "^7.3.1", "hyphenate-style-name": "^1.0.3", - "jss": "10.0.0" + "jss": "10.4.0" } }, "jss-plugin-default-unit": { - "version": "10.0.0", - "resolved": "https://registry.npmjs.org/jss-plugin-default-unit/-/jss-plugin-default-unit-10.0.0.tgz", - "integrity": "sha512-sURozIOdCtGg9ap18erQ+ijndAfEGtTaetxfU3H4qwC18Bi+fdvjlY/ahKbuu0ASs7R/+WKCP7UaRZOjUDMcdQ==", + "version": "10.4.0", + "resolved": "https://registry.npmjs.org/jss-plugin-default-unit/-/jss-plugin-default-unit-10.4.0.tgz", + "integrity": "sha512-BYJ+Y3RUYiMEgmlcYMLqwbA49DcSWsGgHpVmEEllTC8MK5iJ7++pT9TnKkKBnNZZxTV75ycyFCR5xeLSOzVm4A==", "requires": { "@babel/runtime": "^7.3.1", - "jss": "10.0.0" + "jss": "10.4.0" } }, "jss-plugin-global": { - "version": "10.0.0", - "resolved": "https://registry.npmjs.org/jss-plugin-global/-/jss-plugin-global-10.0.0.tgz", - "integrity": "sha512-80ofWKSQUo62bxLtRoTNe0kFPtHgUbAJeOeR36WEGgWIBEsXLyXOnD5KNnjPqG4heuEkz9eSLccjYST50JnI7Q==", + "version": "10.4.0", + "resolved": "https://registry.npmjs.org/jss-plugin-global/-/jss-plugin-global-10.4.0.tgz", + "integrity": "sha512-b8IHMJUmv29cidt3nI4bUI1+Mo5RZE37kqthaFpmxf5K7r2aAegGliAw4hXvA70ca6ckAoXMUl4SN/zxiRcRag==", "requires": { "@babel/runtime": "^7.3.1", - "jss": "10.0.0" + "jss": "10.4.0" } }, "jss-plugin-nested": { - "version": "10.0.0", - "resolved": "https://registry.npmjs.org/jss-plugin-nested/-/jss-plugin-nested-10.0.0.tgz", - "integrity": "sha512-waxxwl/po1hN3azTyixKnr8ReEqUv5WK7WsO+5AWB0bFndML5Yqnt8ARZ90HEg8/P6WlqE/AB2413TkCRZE8bA==", + "version": "10.4.0", + "resolved": "https://registry.npmjs.org/jss-plugin-nested/-/jss-plugin-nested-10.4.0.tgz", + "integrity": "sha512-cKgpeHIxAP0ygeWh+drpLbrxFiak6zzJ2toVRi/NmHbpkNaLjTLgePmOz5+67ln3qzJiPdXXJB1tbOyYKAP4Pw==", "requires": { "@babel/runtime": "^7.3.1", - "jss": "10.0.0", + "jss": "10.4.0", "tiny-warning": "^1.0.2" } }, "jss-plugin-props-sort": { - "version": "10.0.0", - "resolved": "https://registry.npmjs.org/jss-plugin-props-sort/-/jss-plugin-props-sort-10.0.0.tgz", - "integrity": "sha512-41mf22CImjwNdtOG3r+cdC8+RhwNm616sjHx5YlqTwtSJLyLFinbQC/a4PIFk8xqf1qpFH1kEAIw+yx9HaqZ3g==", + "version": "10.4.0", + "resolved": "https://registry.npmjs.org/jss-plugin-props-sort/-/jss-plugin-props-sort-10.4.0.tgz", + "integrity": "sha512-j/t0R40/2fp+Nzt6GgHeUFnHVY2kPGF5drUVlgkcwYoHCgtBDOhTTsOfdaQFW6sHWfoQYgnGV4CXdjlPiRrzwA==", "requires": { "@babel/runtime": "^7.3.1", - "jss": "10.0.0" + "jss": "10.4.0" } }, "jss-plugin-rule-value-function": { - "version": "10.0.0", - "resolved": "https://registry.npmjs.org/jss-plugin-rule-value-function/-/jss-plugin-rule-value-function-10.0.0.tgz", - "integrity": "sha512-Jw+BZ8JIw1f12V0SERqGlBT1JEPWax3vuZpMym54NAXpPb7R1LYHiCTIlaJUyqvIfEy3kiHMtgI+r2whGgRIxQ==", + "version": "10.4.0", + "resolved": "https://registry.npmjs.org/jss-plugin-rule-value-function/-/jss-plugin-rule-value-function-10.4.0.tgz", + "integrity": "sha512-w8504Cdfu66+0SJoLkr6GUQlEb8keHg8ymtJXdVHWh0YvFxDG2l/nS93SI5Gfx0fV29dO6yUugXnKzDFJxrdFQ==", "requires": { "@babel/runtime": "^7.3.1", - "jss": "10.0.0" + "jss": "10.4.0", + "tiny-warning": "^1.0.2" } }, "jss-plugin-vendor-prefixer": { - "version": "10.0.0", - "resolved": "https://registry.npmjs.org/jss-plugin-vendor-prefixer/-/jss-plugin-vendor-prefixer-10.0.0.tgz", - "integrity": "sha512-qslqvL0MUbWuzXJWdUxpj6mdNUX8jr4FFTo3aZnAT65nmzWL7g8oTr9ZxmTXXgdp7ANhS1QWE7036/Q2isFBpw==", + "version": "10.4.0", + "resolved": "https://registry.npmjs.org/jss-plugin-vendor-prefixer/-/jss-plugin-vendor-prefixer-10.4.0.tgz", + "integrity": "sha512-DpF+/a+GU8hMh/948sBGnKSNfKkoHg2p9aRFUmyoyxgKjOeH9n74Ht3Yt8lOgdZsuWNJbPrvaa3U4PXKwxVpTQ==", "requires": { "@babel/runtime": "^7.3.1", - "css-vendor": "^2.0.6", - "jss": "10.0.0" + "css-vendor": "^2.0.8", + "jss": "10.4.0" } + }, + "regenerator-runtime": { + "version": "0.13.7", + "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.13.7.tgz", + "integrity": "sha512-a54FxoJDIr27pgf7IgeQGxmqUNYrcV338lf/6gH456HZ/PhX+5BcwHXG9ajESmwe6WRO0tAzRUrRmNONWgkrew==" } } }, "@material-ui/icons": { - "version": "4.4.3", - "resolved": "https://registry.npmjs.org/@material-ui/icons/-/icons-4.4.3.tgz", - "integrity": "sha512-HVVvUyc/78kmaBd93LkfWyGkXMM+zOMKzUfulWXxaV/fFAZ3N0pD0oHjWUd94zrOoF3tZP9JC7EPlIpIcZSNow==", + "version": "4.9.1", + "resolved": "https://registry.npmjs.org/@material-ui/icons/-/icons-4.9.1.tgz", + "integrity": "sha512-GBitL3oBWO0hzBhvA9KxqcowRUsA0qzwKkURyC8nppnC3fw54KPKZ+d4V1Eeg/UnDRSzDaI9nGCdel/eh9AQMg==", "requires": { "@babel/runtime": "^7.4.4" } }, + "@material-ui/lab": { + "version": "4.0.0-alpha.56", + "resolved": "https://registry.npmjs.org/@material-ui/lab/-/lab-4.0.0-alpha.56.tgz", + "integrity": "sha512-xPlkK+z/6y/24ka4gVJgwPfoCF4RCh8dXb1BNE7MtF9bXEBLN/lBxNTK8VAa0qm3V2oinA6xtUIdcRh0aeRtVw==", + "requires": { + "@babel/runtime": "^7.4.4", + "@material-ui/utils": "^4.10.2", + "clsx": "^1.0.4", + "prop-types": "^15.7.2", + "react-is": "^16.8.0" + }, + "dependencies": { + "@material-ui/utils": { + "version": "4.10.2", + "resolved": "https://registry.npmjs.org/@material-ui/utils/-/utils-4.10.2.tgz", + "integrity": "sha512-eg29v74P7W5r6a4tWWDAAfZldXIzfyO1am2fIsC39hdUUHm/33k6pGOKPbgDjg/U/4ifmgAePy/1OjkKN6rFRw==", + "requires": { + "@babel/runtime": "^7.4.4", + "prop-types": "^15.7.2", + "react-is": "^16.8.0" + } + } + } + }, "@material-ui/styles": { "version": "4.4.3", "resolved": "https://registry.npmjs.org/@material-ui/styles/-/styles-4.4.3.tgz", @@ -201,23 +275,24 @@ } }, "@material-ui/system": { - "version": "4.5.2", - "resolved": "https://registry.npmjs.org/@material-ui/system/-/system-4.5.2.tgz", - "integrity": "sha512-h9RWvdM9XKlHHqwiuhyvWdobptQkHli+m2jJFs7i1AI/hmGsIc4reDmS7fInhETgt/Txx7uiAIznfRNIIVHmQw==", + "version": "4.9.14", + "resolved": "https://registry.npmjs.org/@material-ui/system/-/system-4.9.14.tgz", + "integrity": "sha512-oQbaqfSnNlEkXEziDcJDDIy8pbvwUmZXWNqlmIwDqr/ZdCK8FuV3f4nxikUh7hvClKV2gnQ9djh5CZFTHkZj3w==", "requires": { "@babel/runtime": "^7.4.4", - "@material-ui/utils": "^4.5.2", + "@material-ui/utils": "^4.9.6", + "csstype": "^2.5.2", "prop-types": "^15.7.2" }, "dependencies": { "@material-ui/utils": { - "version": "4.5.2", - "resolved": "https://registry.npmjs.org/@material-ui/utils/-/utils-4.5.2.tgz", - "integrity": "sha512-zhbNfHd1gLa8At6RPDG7uMZubHxbY+LtM6IkSfeWi6Lo4Ax80l62YaN1QmUpO1IvGCkn/j62tQX3yObiQZrJsQ==", + "version": "4.10.2", + "resolved": "https://registry.npmjs.org/@material-ui/utils/-/utils-4.10.2.tgz", + "integrity": "sha512-eg29v74P7W5r6a4tWWDAAfZldXIzfyO1am2fIsC39hdUUHm/33k6pGOKPbgDjg/U/4ifmgAePy/1OjkKN6rFRw==", "requires": { "@babel/runtime": "^7.4.4", "prop-types": "^15.7.2", - "react-is": "^16.8.6" + "react-is": "^16.8.0" } } } @@ -226,6 +301,7 @@ "version": "4.1.1", "resolved": "https://registry.npmjs.org/@material-ui/types/-/types-4.1.1.tgz", "integrity": "sha512-AN+GZNXytX9yxGi0JOfxHrRTbhFybjUJ05rnsBVjcB+16e466Z0Xe5IxawuOayVZgTBNDxmPKo5j4V6OnMtaSQ==", + "dev": true, "requires": { "@types/react": "*" } @@ -297,6 +373,12 @@ "@types/node": "*" } }, + "@types/classnames": { + "version": "2.2.10", + "resolved": "https://registry.npmjs.org/@types/classnames/-/classnames-2.2.10.tgz", + "integrity": "sha512-1UzDldn9GfYYEsWWnn/P4wkTlkZDH7lDb0wBMGbtIQc9zXEQq7FlKBdZUn6OBqD8sKZZ2RQO2mAjGpXiDGoRmQ==", + "dev": true + }, "@types/d3": { "version": "5.7.2", "resolved": "https://registry.npmjs.org/@types/d3/-/d3-5.7.2.tgz", @@ -706,9 +788,9 @@ "dev": true }, "@types/react-transition-group": { - "version": "4.2.3", - "resolved": "https://registry.npmjs.org/@types/react-transition-group/-/react-transition-group-4.2.3.tgz", - "integrity": "sha512-Hk8jiuT7iLOHrcjKP/ZVSyCNXK73wJAUz60xm0mVhiRujrdiI++j4duLiL282VGxwAgxetHQFfqA29LgEeSkFA==", + "version": "4.4.0", + "resolved": "https://registry.npmjs.org/@types/react-transition-group/-/react-transition-group-4.4.0.tgz", + "integrity": "sha512-/QfLHGpu+2fQOqQaXh8MG9q03bFENooTb/it4jr5kKaZlDQfWvjqWZg48AwzPVMBHlRuTRAY7hRHCEOXz5kV6w==", "requires": { "@types/react": "*" } @@ -3066,11 +3148,6 @@ "integrity": "sha512-hIP3EEPs8tB9AT1L+NUqtwOAps4mk2Zob89MWXMHjHWg9milF/j4osnnQLXBCBFBk/tvIG/tUc9mOUJiPBhPXA==", "dev": true }, - "convert-css-length": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/convert-css-length/-/convert-css-length-2.0.1.tgz", - "integrity": "sha512-iGpbcvhLPRKUbBc0Quxx7w/bV14AC3ItuBEGMahA5WTYqB8lq9jH0kTXFheCBASsYnqeMFZhiTruNxr1N59Axg==" - }, "convert-source-map": { "version": "1.6.0", "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-1.6.0.tgz", @@ -3246,6 +3323,7 @@ "version": "2.0.6", "resolved": "https://registry.npmjs.org/css-vendor/-/css-vendor-2.0.6.tgz", "integrity": "sha512-buv8FoZh84iMrtPHYGYll00/qSNV0gYO6E/GUCjUPTsSPj7uf/wot/QZwig+7qdFGxJ7HjOSJoclbhag09TVUQ==", + "dev": true, "requires": { "@babel/runtime": "^7.5.5", "is-in-browser": "^1.0.2" @@ -3756,26 +3834,31 @@ } }, "dom-helpers": { - "version": "5.1.3", - "resolved": "https://registry.npmjs.org/dom-helpers/-/dom-helpers-5.1.3.tgz", - "integrity": "sha512-nZD1OtwfWGRBWlpANxacBEZrEuLa16o1nh7YopFWeoF68Zt8GGEmzHu6Xv4F3XaFIC+YXtTLrzgqKxFgLEe4jw==", + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/dom-helpers/-/dom-helpers-5.2.0.tgz", + "integrity": "sha512-Ru5o9+V8CpunKnz5LGgWXkmrH/20cGKwcHwS4m73zIvs54CN9epEmT/HLqFJW3kXpakAFkEdzgy1hzlJe3E4OQ==", "requires": { - "@babel/runtime": "^7.6.3", - "csstype": "^2.6.7" + "@babel/runtime": "^7.8.7", + "csstype": "^3.0.2" }, "dependencies": { "@babel/runtime": { - "version": "7.7.2", - "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.7.2.tgz", - "integrity": "sha512-JONRbXbTXc9WQE2mAZd1p0Z3DZ/6vaQIkgYMSTP3KjRCyd7rCZCcfhCyX+YjwcKxcZ82UrxbRD358bpExNgrjw==", + "version": "7.12.1", + "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.12.1.tgz", + "integrity": "sha512-J5AIf3vPj3UwXaAzb5j1xM4WAQDX3EMgemF8rjCP3SoW09LfRKAXQKt6CoVYl230P6iWdRcBbnLDDdnqWxZSCA==", "requires": { - "regenerator-runtime": "^0.13.2" + "regenerator-runtime": "^0.13.4" } }, "csstype": { - "version": "2.6.7", - "resolved": "https://registry.npmjs.org/csstype/-/csstype-2.6.7.tgz", - "integrity": "sha512-9Mcn9sFbGBAdmimWb2gLVDtFJzeKtDGIr76TUqmjZrw9LFXBMSU70lcs+C0/7fyCd6iBDqmksUcCOUIkisPHsQ==" + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/csstype/-/csstype-3.0.3.tgz", + "integrity": "sha512-jPl+wbWPOWJ7SXsWyqGRk3lGecbar0Cb0OvZF/r/ZU011R4YqiRehgkQ9p4eQfo9DSDLqLL3wHwfxeJiuIsNag==" + }, + "regenerator-runtime": { + "version": "0.13.7", + "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.13.7.tgz", + "integrity": "sha512-a54FxoJDIr27pgf7IgeQGxmqUNYrcV338lf/6gH456HZ/PhX+5BcwHXG9ajESmwe6WRO0tAzRUrRmNONWgkrew==" } } }, @@ -7840,23 +7923,6 @@ "object-visit": "^1.0.0" } }, - "material-ui-flat-pagination": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/material-ui-flat-pagination/-/material-ui-flat-pagination-4.0.0.tgz", - "integrity": "sha512-608eOWR1dy0eREG62tbdJhNmiNK6RyhtuQ3rC8SLWPvme4gmOf5n1FHZCsdcGAqXhAVZNyOjQ4rMPTFfxkzKSg==", - "requires": { - "classnames": "^2.2.6" - } - }, - "material-ui-search-bar": { - "version": "1.0.0-beta.14", - "resolved": "https://registry.npmjs.org/material-ui-search-bar/-/material-ui-search-bar-1.0.0-beta.14.tgz", - "integrity": "sha512-K4i4iUi0Dp+iEvcAFc/KmDBS4kOtEY0Kh5ID1RX884PMhKMT9rIJcKkhPhThYPji4cCXc1pz8t5F54VMbhLmcw==", - "requires": { - "classnames": "^2.2.5", - "prop-types": "^15.5.8" - } - }, "math-random": { "version": "1.0.4", "resolved": "https://registry.npmjs.org/math-random/-/math-random-1.0.4.tgz", @@ -8317,11 +8383,6 @@ "resolved": "https://registry.npmjs.org/normalize-range/-/normalize-range-0.1.2.tgz", "integrity": "sha1-LRDAa9/TEuqXd2laTShDlFa3WUI=" }, - "normalize-scroll-left": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/normalize-scroll-left/-/normalize-scroll-left-0.2.0.tgz", - "integrity": "sha512-t5oCENZJl8TGusJKoCJm7+asaSsPuNmK6+iEjrZ5TyBj2f02brCRsd4c83hwtu+e5d4LCSBZ0uoDlMjBo+A8yA==" - }, "npm-run-path": { "version": "2.0.2", "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-2.0.2.tgz", @@ -8878,9 +8939,9 @@ "integrity": "sha512-2qHaIQr2VLRFoxe2nASzsV6ef4yOOH+Fi9FBOVH6cqeSgUnoyySPZkxzLuzd+RYOQTRpROA0ztTMqxROKSb/nA==" }, "popper.js": { - "version": "1.16.0", - "resolved": "https://registry.npmjs.org/popper.js/-/popper.js-1.16.0.tgz", - "integrity": "sha512-+G+EkOPoE5S/zChTpmBSSDYmhXJ5PsW8eMhH8cP/CQHMFPBG/kC9Y5IIw6qNYgdJ+/COf0ddY2li28iHaZRSjw==" + "version": "1.16.1-lts", + "resolved": "https://registry.npmjs.org/popper.js/-/popper.js-1.16.1-lts.tgz", + "integrity": "sha512-Kjw8nKRl1m+VrSFCoVGPph93W/qrSO7ZkqPpTf7F4bk/sqcfWK019dWBUpE/fBOsOQY1dks/Bmcbfn1heM/IsA==" }, "portfinder": { "version": "1.0.28", @@ -9423,9 +9484,9 @@ } }, "react-transition-group": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/react-transition-group/-/react-transition-group-4.3.0.tgz", - "integrity": "sha512-1qRV1ZuVSdxPlPf4O8t7inxUGpdyO5zG9IoNfJxSO0ImU2A1YWkEQvFPuIPZmMLkg5hYs7vv5mMOyfgSkvAwvw==", + "version": "4.4.1", + "resolved": "https://registry.npmjs.org/react-transition-group/-/react-transition-group-4.4.1.tgz", + "integrity": "sha512-Djqr7OQ2aPUiYurhPalTrVy9ddmFCCzwhqQmtN+J3+3DzLO209Fdr70QrN8Z3DsglWql6iY1lDWAfpFiBtuKGw==", "requires": { "@babel/runtime": "^7.5.5", "dom-helpers": "^5.0.1", diff --git a/package.json b/package.json index e7e51d9..01bc85b 100644 --- a/package.json +++ b/package.json @@ -11,17 +11,19 @@ "pretest": "eslint src/**/*[x]", "test": "jest", "test-watch": "jest --watch", - "eslint-fix": "eslint . --ext .ts,.tsx --fix" + "eslint-fix": "eslint . --ext .ts,.tsx --ignore-pattern \"src/__tests__/*\" --fix" }, "engines": { "node": "10.16.3" }, "dependencies": { - "@material-ui/core": "^4.6.1", - "@material-ui/icons": "^4.4.3", + "@material-ui/core": "^4.11.0", + "@material-ui/icons": "^4.9.1", + "@material-ui/lab": "^4.0.0-alpha.56", "@types/d3": "^5.7.2", "@types/react-router-dom": "^5.1.2", "autoprefixer": "^9.5.1", + "classnames": "^2.2.6", "connected-react-router": "^6.4.0", "css-loader": "^2.1.0", "d3-color": "^1.4.0", @@ -34,8 +36,6 @@ "http-proxy-middleware": "^0.20.0", "jest": "23.6.0", "lodash": "^4.17.19", - "material-ui-flat-pagination": "^4.0.0", - "material-ui-search-bar": "^1.0.0-beta.14", "postcss-loader": "^3.0.0", "postcss-modules-values": "^2.0.0", "react": "^16.8.0", @@ -51,6 +51,7 @@ }, "devDependencies": { "@material-ui/styles": "^4.0.0-rc.0", + "@types/classnames": "^2.2.10", "@types/d3-color": "^1.2.2", "@types/enzyme": "^3.1.16", "@types/enzyme-adapter-react-16": "^1.0.3", diff --git a/src/__tests__/components/CustomSearchBar.test.tsx b/src/__tests__/components/CustomSearchBar.test.tsx deleted file mode 100644 index 41f1847..0000000 --- a/src/__tests__/components/CustomSearchBar.test.tsx +++ /dev/null @@ -1,26 +0,0 @@ -import * as React from 'react' -import { shallow } from 'enzyme' - -import CustomSearchBar from '../../components/CustomSearchBar' - -describe('CustomSearchBar Component', () => { -const wrapper = shallow() - it('Should render', () => { - expect(wrapper.exists()).toBe(true) - }) - it('renders a snapshot that matches previous', () => { - expect(wrapper).toMatchSnapshot() - }) - - // TODO figure out how to set state of search bar - // wrapper.setState({search: 'test'}) - - // it('should render text explaning that there was no matching dataset found', () => { - // expect( - // wrapper - // .find(Typography) - // .text() - // .toLowerCase() - // ).toContain('test') - // }) -}) diff --git a/src/__tests__/components/__snapshots__/CustomSearchBar.test.tsx.snap b/src/__tests__/components/__snapshots__/CustomSearchBar.test.tsx.snap deleted file mode 100644 index 9772ded..0000000 --- a/src/__tests__/components/__snapshots__/CustomSearchBar.test.tsx.snap +++ /dev/null @@ -1,11 +0,0 @@ -// Jest Snapshot v1, https://goo.gl/fbAQLP - -exports[`CustomSearchBar Component renders a snapshot that matches previous 1`] = ` - -`; diff --git a/src/actionCreators/index.ts b/src/actionCreators/index.ts index 06256ec..6941de9 100644 --- a/src/actionCreators/index.ts +++ b/src/actionCreators/index.ts @@ -1,6 +1,6 @@ import * as actionTypes from '../constants/ActionTypes' -import { Dataset, Job, Namespace,Run } from '../types/api' +import { Dataset, Job, Namespace, Run } from '../types/api' import { IFilterByKey } from '../types' export const fetchDatasetsSuccess = (datasets: Dataset[]) => ({ @@ -10,7 +10,6 @@ export const fetchDatasetsSuccess = (datasets: Dataset[]) => ({ } }) - export const filterDatasets = (filterByKey: IFilterByKey, filterByValue?: string) => ({ type: actionTypes.FILTER_DATASETS, payload: { diff --git a/src/components/App.tsx b/src/components/App.tsx index 023728b..808cd85 100644 --- a/src/components/App.tsx +++ b/src/components/App.tsx @@ -1,28 +1,19 @@ -import { CssBaseline } from '@material-ui/core' -import { Helmet } from 'react-helmet' -import AppBar from './AppBar' -import React, { ReactElement, useState } from 'react' -const globalStyles = require('../global_styles.css') -const { neptune, telescopeBlack } = globalStyles import { ConnectedRouter, routerMiddleware } from 'connected-react-router' -import { Grid } from '@material-ui/core' -import { - Theme as ITheme, - WithStyles as IWithStyles, - createStyles, - withStyles -} from '@material-ui/core/styles' -import { MuiThemeProvider, createMuiTheme } from '@material-ui/core/styles' +import { Container, CssBaseline } from '@material-ui/core' +import { Helmet } from 'react-helmet' +import { Theme as ITheme, createStyles, withStyles } from '@material-ui/core/styles' +import { MuiThemeProvider } from '@material-ui/core/styles' import { Provider } from 'react-redux' import { Route, Switch } from 'react-router-dom' import { applyMiddleware, createStore } from 'redux' import { composeWithDevTools } from 'redux-devtools-extension' import { createBrowserHistory } from 'history' +import React, { ReactElement, useState } from 'react' import createSagaMiddleware from 'redux-saga' -import logger from 'redux-logger' -import CustomSearchBar from './CustomSearchBar' +import { theme } from '../helpers/theme' import DatasetDetailPage from './DatasetDetailPage' +import Header from './header/Header' import Home from './Home' import JobDetailPage from './JobDetailPage' import NetworkGraph from './NetworkGraph' @@ -38,35 +29,12 @@ const sagaMiddleware = createSagaMiddleware({ const history = createBrowserHistory() const historyMiddleware = routerMiddleware(history) -const middleware = __DEVELOPMENT__ - ? [sagaMiddleware, historyMiddleware, logger] - : [sagaMiddleware, historyMiddleware] - const store = createStore( createRootReducer(history), - composeWithDevTools(applyMiddleware(...middleware)) + composeWithDevTools(applyMiddleware(sagaMiddleware, historyMiddleware)) ) sagaMiddleware.run(rootSaga) -// see the defaults here for MUI Theme -- https://material-ui.com/customization/default-theme/?expend-path=$.typography -const theme = createMuiTheme({ - typography: { - h3: { - fontSize: '1rem', - fontWeight: 700, - lineHeight: 2 - }, - fontSize: 14 - }, - palette: { - primary: { - main: telescopeBlack - }, - secondary: { - main: neptune - } - } -}) const styles = (_theme: ITheme) => { return createStyles({ @@ -77,11 +45,9 @@ const styles = (_theme: ITheme) => { }) } -type IProps = IWithStyles - const TITLE = 'Marquez | Data Kit' -const App = ({ classes }: IProps): ReactElement => { +const App = (): ReactElement => { const [showJobs, setShowJobs] = useState(false) return ( @@ -91,26 +57,22 @@ const App = ({ classes }: IProps): ReactElement => { {TITLE} - - - - + +
+ + + ( - - )} + render={props => } /> - - + + diff --git a/src/components/AppBar.tsx b/src/components/AppBar.tsx index feb8fa6..08b7efd 100644 --- a/src/components/AppBar.tsx +++ b/src/components/AppBar.tsx @@ -1,7 +1,5 @@ import { AppBar, Toolbar, Typography } from '@material-ui/core' -import { - Link -} from 'react-router-dom' +import { Link } from 'react-router-dom' import React, { ReactElement } from 'react' import { @@ -43,10 +41,10 @@ const MyAppBar = (props: IProps): ReactElement => { return ( - + Marquez Logo - + MARQUEZ diff --git a/src/components/CustomSearchBar.tsx b/src/components/CustomSearchBar.tsx deleted file mode 100644 index 3ffabab..0000000 --- a/src/components/CustomSearchBar.tsx +++ /dev/null @@ -1,72 +0,0 @@ -import * as Redux from 'redux' -import { - Theme as ITheme, - WithStyles as IWithStyles, - createStyles, - withStyles -} from '@material-ui/core/styles' -import {bindActionCreators} from 'redux' -import {connect} from 'react-redux' -import { findMatchingEntities } from '../actionCreators' -import { useHistory } from 'react-router-dom' -import React, { FunctionComponent, useState } from 'react' -import SearchBar from 'material-ui-search-bar' - -interface IProps { - findMatchingEntities: typeof findMatchingEntities - setShowJobs: (bool: boolean) => void - showJobs: boolean -} - -type IAllProps = IWithStyles & IProps - -const styles = (_theme: ITheme) => { - return createStyles({ - search: { - position: 'fixed', - bottom: '52vh', - width: '90%', - left: '5%', - zIndex: 4 - } - }) -} - -const CustomSearchBar: FunctionComponent = props => { - const [search, setSearch] = useState('') - const { classes } = props - const history = useHistory() - - const searchChanged = (searchString: string) => { - setSearch(searchString) - props.findMatchingEntities(searchString) - searchString == '' ? props.setShowJobs(false) : props.setShowJobs(true) - } - - const cancelledSearch = () => { - setSearch('') - searchChanged('') - } - - const onRequestSearch = () => { - history.push('/') - } - - return ( - - ) -} - -const mapDispatchToProps = (dispatch: Redux.Dispatch) => - bindActionCreators({ findMatchingEntities: findMatchingEntities }, dispatch) - -export default connect( - null, - mapDispatchToProps -)(withStyles(styles)(CustomSearchBar)) diff --git a/src/components/DatasetDetailPage.tsx b/src/components/DatasetDetailPage.tsx index 9923b64..4caed9e 100644 --- a/src/components/DatasetDetailPage.tsx +++ b/src/components/DatasetDetailPage.tsx @@ -1,4 +1,13 @@ -import { Box, Paper, Table, TableBody, TableCell, TableHead, TableRow, Tooltip, Typography } from '@material-ui/core' +import { + Box, + Paper, + Table, + TableBody, + TableCell, + TableHead, + TableRow, + Tooltip +} from '@material-ui/core' import { Theme as ITheme, WithStyles as IWithStyles, @@ -16,27 +25,19 @@ import _find from 'lodash/find' import * as Redux from 'redux' import { Dataset } from '../types/api' -import {IState} from '../reducers' -import {bindActionCreators} from 'redux' -import {connect} from 'react-redux' +import { IState } from '../reducers' +import { bindActionCreators } from 'redux' +import { connect } from 'react-redux' +import MqText from './core/text/MqText' -const styles = ({ shadows }: ITheme) => { +const styles = ({ spacing }: ITheme) => { return createStyles({ root: { - marginTop: '52vh', - height: '48vh', - padding: '0 6% 1%', + padding: `0 ${spacing(2)}px` }, noData: { padding: '125px 0 0 0' }, - noSchema: { - boxShadow: shadows[1], - padding: '1rem' - }, - noSchemaTitle: { - fontSize: '14px' - }, infoIcon: { paddingLeft: '3px', paddingTop: '3px' @@ -60,7 +61,7 @@ const styles = ({ shadows }: ITheme) => { }, updated: { marginTop: '10px' - }, + } }) } @@ -68,83 +69,70 @@ type IProps = IWithStyles & { datasets: Dataset[] } const DatasetDetailPage: FunctionComponent = props => { const { datasets, classes } = props - const { - root, paper, updated, noData, noSchema, noSchemaTitle, infoIcon, tableCell, tableRow - } = classes + const { root, paper, infoIcon, tableCell, tableRow } = classes const { datasetName } = useParams() const dataset = _find(datasets, d => d.name === datasetName) if (!dataset) { return ( - - - No dataset by the name of "{datasetName}" found - + + + No dataset by the name of {`"${datasetName}"`} found + ) } else { - const { - name, - description, - updatedAt, - fields - } = dataset + const { name, description, updatedAt, fields } = dataset return ( - +
- - {name} - - - {description} - + + {name} + + {description}
{fields && fields.length > 0 ? ( - +
- { - fields.map((field) => { - return ( - {field.name} - + {fields.map(field => { + return ( + + {field.name} +
- ) - }) - } + ) + })}
- {fields.map((field) => { - return {field.description || 'no description'} + {fields.map(field => { + return ( + + {field.description || 'no description'} + + ) })}
) : ( -
- - schema not present - +
+ schema not present
)} - - last updated: {formatUpdatedAt(updatedAt)} - + + last updated: {formatUpdatedAt(updatedAt)} + ) } diff --git a/src/components/DatasetPreviewCard.tsx b/src/components/DatasetPreviewCard.tsx index e7e5dfa..666cfa4 100644 --- a/src/components/DatasetPreviewCard.tsx +++ b/src/components/DatasetPreviewCard.tsx @@ -1,41 +1,28 @@ import React, { ReactElement } from 'react' -import { - Link -} from 'react-router-dom' - -import { Box, Typography } from '@material-ui/core' -import { - Theme as ITheme, - WithStyles as IWithStyles, - createStyles, - withStyles -} from '@material-ui/core/styles' -import { formatUpdatedAt } from '../helpers' - +import { Box, Theme } from '@material-ui/core' import { Dataset } from '../types/api' -const _ = require('lodash') +import { WithStyles as IWithStyles, createStyles, fade, withStyles } from '@material-ui/core/styles' +import { Link } from 'react-router-dom' +import { formatUpdatedAt } from '../helpers' +import MqText from './core/text/MqText' -const styles = ({ palette }: ITheme) => { +const styles = (theme: Theme) => { return createStyles({ - rightCol: { - textAlign: 'right' - }, - lastUpdated: { - color: palette.grey[600] - }, link: { - textDecoration: 'none' + textDecoration: 'none', + border: `1px solid ${theme.palette.secondary.main}`, + display: 'block', + marginBottom: theme.spacing(2), + borderRadius: theme.shape.borderRadius, + transition: theme.transitions.create(['background-color']), + '&:hover': { + backgroundColor: fade(theme.palette.common.white, 0.1) + } } }) } -const StyledTypography = withStyles({ - root: { - maxWidth: '90%' - } -})(Typography) - type IProps = IWithStyles & Pick interface IState {} @@ -45,23 +32,19 @@ class DatasetPreviewCard extends React.Component { const { classes, name, description, updatedAt } = this.props const { link } = classes return ( - - -
- + + + + {name} - - {description} -
- - {formatUpdatedAt(updatedAt)} + + + {formatUpdatedAt(updatedAt)} + + + {description || 'There is no description available for this dataset'} +
) diff --git a/src/components/Home.tsx b/src/components/Home.tsx index a7fe4f5..376c85d 100644 --- a/src/components/Home.tsx +++ b/src/components/Home.tsx @@ -1,31 +1,25 @@ import * as RRD from 'react-router-dom' -import { Box, Typography } from '@material-ui/core' -import React, { FunctionComponent, useState } from 'react' - -import Pagination from 'material-ui-flat-pagination' -import _chunk from 'lodash/chunk' - +import { Box } from '@material-ui/core' +import { IDatasetsState } from '../reducers/datasets' +import { IJobsState } from '../reducers/jobs' +import { IState } from '../reducers' import { Theme as ITheme, WithStyles as IWithStyles, createStyles, withStyles } from '@material-ui/core/styles' - +import { Pagination } from '@material-ui/lab' +import { connect } from 'react-redux' import DatasetPreviewCard from './DatasetPreviewCard' import FiltersWrapper from './filters/FiltersWrapper' import JobPreviewCard from './JobPreviewCard' +import MqText from './core/text/MqText' +import React, { FunctionComponent, useState } from 'react' +import _chunk from 'lodash/chunk' -import { IDatasetsState } from '../reducers/datasets' -import { IJobsState } from '../reducers/jobs' -import {IState} from '../reducers' -import {connect} from 'react-redux' - -const styles = (_theme: ITheme) => { +const styles = (theme: ITheme) => { return createStyles({ - header: { - padding: '0% 0% 0% 1%' - }, column: { flex: 1 }, @@ -33,29 +27,17 @@ const styles = (_theme: ITheme) => { display: 'flex', flexDirection: 'row' }, - filter: { - marginLeft: '-4%' - }, lowerHalf: { display: 'flex', flexDirection: 'column', - padding: '50vh 5% 1%', - position: 'absolute', - top: 0, + padding: `${theme.spacing(2)}px ${theme.spacing(3)}px`, zIndex: 1, width: '100%' }, - noDatasets: { - color: '#9e9e9e', - position: 'fixed', - bottom: '20vh', - left: '21%' - }, - noJobs: { - color: '#9e9e9e', - position: 'fixed', - bottom: '20vh', - right: '21%' + none: { + display: 'flex', + justifyContent: 'center', + alignItems: 'center' } }) } @@ -69,7 +51,7 @@ interface IProps { type IAllProps = RRD.RouteComponentProps & IWithStyles & IProps -const Home: FunctionComponent = props => { +const Home: FunctionComponent = props => { const [datasetPageIndex, setDatasetPageIndex] = useState(0) const [jobPageIndex, setJobPageIndex] = useState(0) @@ -88,19 +70,18 @@ const Home: FunctionComponent = props => { return (
-
- -
{matchingDatasets.length > 0 ? ( - - {!showJobs ? 'Popular Datasets' : 'Matching Datasets'} - + + {!showJobs ? 'Popular Datasets' : 'Matching Datasets'} + + ) : ( - no datasets found! + + no datasets found! + )} - {console.log(displayDatasets)} {displayDatasets.map(d => ( = props => { tags={d.tags} /> ))} - {matchingDatasets.length > 0 ? ( - setDatasetPageIndex(page - 1)} - /> - ) : null} + {matchingDatasets.length > 0 && ( + { + setDatasetPageIndex(page - 1) + }} + count={Math.ceil(matchingDatasets.length / limit)} + /> + )} - {showJobs ? ( - + {showJobs && ( + {matchingJobs.length > 0 ? ( - - Matching Jobs - + + Matching Jobs + ) : ( - no jobs found! + + no jobs found! + )} {displayJobs.map(d => ( = props => { latestRun={d.latestRun} /> ))} - {matchingJobs.length > 0 ? ( + {matchingJobs.length > 0 && ( setJobPageIndex(page - 1)} + color={'standard'} + shape={'rounded'} + onChange={(event, page) => { + setJobPageIndex(page - 1) + }} + count={Math.ceil(matchingJobs.length / limit)} /> - ) : null} + )} - ) : null} + )}
) @@ -164,6 +151,4 @@ interface IInjectedProps { type IStateProps = ReturnType -export default connect( - mapStateToProps -)(withStyles(styles)(Home)) +export default connect(mapStateToProps)(withStyles(styles)(Home)) diff --git a/src/components/JobDetailPage.tsx b/src/components/JobDetailPage.tsx index 7cf3796..4a8beff 100644 --- a/src/components/JobDetailPage.tsx +++ b/src/components/JobDetailPage.tsx @@ -1,27 +1,27 @@ +import React, { FunctionComponent, useEffect } from 'react' + import * as Redux from 'redux' -import { Box, Fab, Tooltip, Typography } from '@material-ui/core' -import {IState} from '../reducers' +import { Box, Button, Tooltip } from '@material-ui/core' +import { IState } from '../reducers' import { Theme as ITheme, WithStyles as IWithStyles, createStyles, withStyles } from '@material-ui/core/styles' -import {bindActionCreators} from 'redux' -import {connect} from 'react-redux' +import { bindActionCreators } from 'redux' +import { connect } from 'react-redux' import { fetchJobRuns } from '../actionCreators' import { useHistory, useParams } from 'react-router-dom' import CloseIcon from '@material-ui/icons/Close' -import HowToRegIcon from '@material-ui/icons/HowToReg' -import Modal from '@material-ui/core/Modal' -import OpenWithSharpIcon from '@material-ui/icons/OpenWithSharp' -import React, { FunctionComponent, useEffect, useState } from 'react' import _find from 'lodash/find' - const globalStyles = require('../global_styles.css') const { jobRunNew, jobRunFailed, jobRunCompleted, jobRunAborted, jobRunRunning } = globalStyles import { IJob } from '../types' import { formatUpdatedAt } from '../helpers' +import Code from './core/code/Code' +import IconButton from '@material-ui/core/IconButton' +import MqText from './core/text/MqText' const colorMap = { NEW: jobRunNew, @@ -31,21 +31,10 @@ const colorMap = { RUNNING: jobRunRunning } -const styles = ({ palette, spacing, shadows }: ITheme) => { +const styles = ({ palette, spacing }: ITheme) => { return createStyles({ root: { - marginTop: '52vh', - height: '48vh', - padding: '0 6% 1%', - }, - topSection: { - display: 'grid', - gridTemplateColumns: '40px 3fr 1fr', - gridTemplateRows: '1fr 1fr', - /* eslint-disable @typescript-eslint/quotes */ - gridTemplateAreas: `'status name owner-icon' '. description owner'`, - alignItems: 'center', - margin: '0px 6% 0px 0px' + padding: spacing(2) }, _status: { gridArea: 'status', @@ -73,124 +62,19 @@ const styles = ({ palette, spacing, shadows }: ITheme) => { passed: { backgroundColor: jobRunCompleted }, - _name: { - gridArea: 'name' - }, - _description: { - gridArea: 'description' - }, - _owner: { - gridArea: 'owner', - justifySelf: 'end' - }, - _ownerIcon: { - gridArea: 'owner-icon', - justifySelf: 'end' - }, - _SQL: { - overflow: 'hidden' - }, - _SQLComment: { - color: palette.grey[400] - }, - SQLModalContainer: { - width: '80%', - height: '80%', - position: 'relative', - margin: '10vh 10%' - }, - SQLModal: { - backgroundColor: 'white', - width: '100%', - height: '100%', - overflow: 'scroll', - boxShadow: shadows[1], - // using border to create effect of padding, which will not work when there's overflow - border: '1rem solid white', - borderTop: 'none', - borderLeft: '2rem solid white' - }, - SQLModalTitle: { - backgroundColor: 'white', - paddingTop: '1rem', - fontSize: '2rem', - fontWeight: 700, - position: 'fixed', - width: '80%', - right: '10%' - }, copyToClipboard: { position: 'absolute', bottom: '1rem', right: '1rem', cursor: 'pointer' - }, - closeButton: { - color: '#7D7D7D', - backgroundColor: '#ffffff', - position: "absolute", - right: '6%', - marginTop: '12px' } }) } -type IProps = IWithStyles & { jobs: IJob[] } & { fetchJobRuns: any} - -const StyledTypography = withStyles({ - root: { - maxWidth: '90%' - } -})(Typography) - -const StyledTypographySQL = withStyles({ - root: { - whiteSpace: 'pre', - fontFamily: `'Inconsolata', monospace` - } -})(Typography) - -const StyledExpandButton = withStyles({ - root: { - transform: 'rotate(45deg)', - position: 'absolute', - right: 0, - bottom: 0, - backgroundColor: 'white', - cursor: 'pointer' - } -})(OpenWithSharpIcon) +type IProps = IWithStyles & { jobs: IJob[] } & { fetchJobRuns: any } -const StyledCloseIcon = withStyles({ - root: { - position: 'absolute', - right: '2rem', - top: '1rem', - backgroundColor: 'white', - cursor: 'pointer', - zIndex: 10 - } -})(CloseIcon) - -const displaySQL = (SQL: string, SQLCommentClass: string) => { - return !!SQL && SQL !== '' ? ( - SQL.split('\n').map((line, i) => { - const extraClass = line.trim().startsWith('--') ? SQLCommentClass : '' - return ( - - {line} - - ) - }) - ) : ( - - There is no SQL for this job at this time. - - ) -} const JobDetailPage: FunctionComponent = props => { const { jobs, classes, fetchJobRuns } = props - const [SQLModalOpen, setSQLModalOpen] = useState(false) const { jobName } = useParams() const history = useHistory() @@ -205,36 +89,20 @@ const JobDetailPage: FunctionComponent = props => { if (!job || jobs.length == 0) { return ( - - No job by the name of "{jobName}" found - + + No job by the name of {`"${jobName}"`} found + ) } - const { - root, - _status, - _name, - _description, - _SQL, - _SQLComment, - SQLModalContainer, - SQLModal, - SQLModalTitle, - _owner, - _ownerIcon, - lastUpdated, - topSection, - copyToClipboard, - closeButton - } = classes + const { root, _status } = classes const { name, @@ -257,89 +125,53 @@ const JobDetailPage: FunctionComponent = props => { justifyContent='space-between' className={root} > -
- - {latestRun ?
:
} - - - - {name} - - - - {description} - - - {namespace} - history.push('/')} size="small" aria-label="edit"> - - -
- - {!!SQL && SQL !== '' && ( - setSQLModalOpen(true)} /> - )} - {!!SQL && SQL !== '' && ( - -
- {/* Need this extra container for the absolutely-positioned elements */} - setSQLModalOpen(false)} /> - { - if (SQL) { - navigator.clipboard.writeText(SQL) - } - }} - > - copy to clipboard - -
- - {name} - - {/* gutter (because we cannot put margin on the fixed-positioned title)*/} - {displaySQL(SQL, _SQLComment)} -
-
-
- )} - {displaySQL(SQL, _SQLComment)} + + + + {latestRun && ( +
+ )} + + + + + {namespace} / {name} + + + + history.push('/')}> + + + + + + {description} + -
+ {SQL} +
- { - latestRuns.map(r => { - return ( - -
-
- ) - }) - } + {latestRuns.map(r => { + return ( + +
+ + ) + })}
-
- - {formatUpdatedAt(updatedAt)} - -
-
+ + {formatUpdatedAt(updatedAt)} + +
) } @@ -348,9 +180,13 @@ const mapStateToProps = (state: IState) => ({ jobs: state.jobs }) -const mapDispatchToProps = (dispatch: Redux.Dispatch) => bindActionCreators({ - fetchJobRuns: fetchJobRuns -}, dispatch) +const mapDispatchToProps = (dispatch: Redux.Dispatch) => + bindActionCreators( + { + fetchJobRuns: fetchJobRuns + }, + dispatch + ) export default connect( mapStateToProps, diff --git a/src/components/JobPreviewCard.tsx b/src/components/JobPreviewCard.tsx index 2314035..c06f7f3 100644 --- a/src/components/JobPreviewCard.tsx +++ b/src/components/JobPreviewCard.tsx @@ -2,6 +2,7 @@ import { Theme as ITheme, WithStyles as IWithStyles, createStyles, + fade, withStyles } from '@material-ui/core/styles' import { Link } from 'react-router-dom' @@ -9,10 +10,12 @@ import React, { ReactElement } from 'react' const globalStyles = require('../global_styles.css') const { vibrantGreen } = globalStyles -import { Box, Tooltip, Typography } from '@material-ui/core' +import { Box, Tooltip } from '@material-ui/core' import { formatUpdatedAt } from '../helpers' import { Job } from '../types/api' +import MqText from './core/text/MqText' +import transitions from '@material-ui/core/styles/transitions' const { jobRunNew, jobRunFailed, jobRunCompleted, jobRunAborted, jobRunRunning } = globalStyles @@ -24,14 +27,11 @@ const colorMap = { RUNNING: jobRunRunning } -const styles = ({ palette, spacing }: ITheme) => { +const styles = ({ palette, spacing, shape }: ITheme) => { return createStyles({ rightCol: { textAlign: 'right' }, - lastUpdated: { - color: palette.grey[600] - }, status: { width: spacing(2), height: spacing(2), @@ -44,38 +44,38 @@ const styles = ({ palette, spacing }: ITheme) => { backgroundColor: vibrantGreen }, link: { - textDecoration: 'none' + textDecoration: 'none', + border: `1px solid ${palette.secondary.main}`, + display: 'block', + marginBottom: spacing(2), + borderRadius: shape.borderRadius, + transition: transitions.create(['background-color']), + '&:hover': { + backgroundColor: fade(palette.common.white, 0.1) + } } }) } type IProps = IWithStyles & Pick + interface IState {} -const StyledTypography = withStyles({ - root: { - maxWidth: '90%' - } -})(Typography) class JobPreviewCard extends React.Component { render(): ReactElement { const { classes, name, description, updatedAt = '', latestRun } = this.props + console.log(latestRun) return ( - +
- + {name} - - {description} + + + {description} +
{ alignItems='flex-end' justifyContent='space-between' > - - {latestRun ?
:
} - - {formatUpdatedAt(updatedAt)} + {latestRun && ( + +
+ + )} + + {formatUpdatedAt(updatedAt)} + diff --git a/src/components/Legend.tsx b/src/components/Legend.tsx index 462225e..23d309c 100644 --- a/src/components/Legend.tsx +++ b/src/components/Legend.tsx @@ -1,30 +1,28 @@ -import { Box, Typography } from '@material-ui/core' +import React, { ReactElement } from 'react' + +import { Box } from '@material-ui/core' import { Theme as ITheme, WithStyles as IWithStyles, createStyles, withStyles } from '@material-ui/core/styles' -import React, { ReactElement } from 'react' -const globalStyles = require('../global_styles.css') -const { datasetNodeWhite } = globalStyles +import MqText from './core/text/MqText' -const styles = ({ spacing }: ITheme) => { +const styles = ({ spacing, palette }: ITheme) => { return createStyles({ datasetShape: { - backgroundColor: datasetNodeWhite + backgroundColor: palette.common.white }, jobShape: { borderRadius: '50%', - backgroundColor: datasetNodeWhite + backgroundColor: palette.common.white }, shape: { width: spacing(2), height: spacing(2), - margin: '4px 6px 0px 6px' - }, - text: { - color: '#f2f2f2' + marginRight: spacing(1), + marginLeft: spacing(1) } }) } @@ -40,11 +38,11 @@ class Legend extends React.Component { render(): ReactElement { const { classes, customClassName } = this.props return ( - +
- datasets + datasets
- jobs + jobs ) } diff --git a/src/components/Menu.tsx b/src/components/Menu.tsx index 6cdb2fd..cfde518 100644 --- a/src/components/Menu.tsx +++ b/src/components/Menu.tsx @@ -1,8 +1,10 @@ -import Button from '@material-ui/core/Button' +import React from 'react' + +import IconButton from '@material-ui/core/IconButton' import Menu from '@material-ui/core/Menu' import MenuIcon from '@material-ui/icons/Menu' import MenuItem from '@material-ui/core/MenuItem' -import React from 'react' +import MqText from './core/text/MqText' export default function SimpleMenu() { const [anchorEl, setAnchorEl] = React.useState(null) @@ -17,20 +19,22 @@ export default function SimpleMenu() { const feedBackClicked = () => { handleClose() + // eslint-disable-next-line no-undef const link = __FEEDBACK_FORM_URL__ window.open(link, '_blank') } const apiDocsClicked = () => { handleClose() + // eslint-disable-next-line no-undef const link = __API_DOCS_URL__ window.open(link, '_blank') } return (
- + + + - Feedback - API Docs + + Feedback + + + API Docs +
) diff --git a/src/components/NetworkGraph.tsx b/src/components/NetworkGraph.tsx index 88617ed..3bc9e30 100644 --- a/src/components/NetworkGraph.tsx +++ b/src/components/NetworkGraph.tsx @@ -1,18 +1,13 @@ import * as React from 'react' import * as d3 from 'd3' -import {History} from 'history' -import {RouteComponentProps, withRouter} from 'react-router-dom' -import { - Theme, - WithStyles, - createStyles, - withStyles -} from '@material-ui/core/styles' +import { History } from 'history' +import { RouteComponentProps, withRouter } from 'react-router-dom' +import { Theme, WithStyles, createStyles, withStyles } from '@material-ui/core/styles' import Legend from './Legend' -import {IDataset, IJob} from '../types/' +import { IDataset, IJob } from '../types/' import _filter from 'lodash/filter' import _find from 'lodash/find' @@ -20,22 +15,24 @@ import _flatten from 'lodash/flatten' import _map from 'lodash/map' import _sortBy from 'lodash/sortBy' -import {D3ZoomEvent} from 'd3' -import {drag} from 'd3-drag' -import {event, select} from 'd3-selection' -import {hierarchy, tree} from 'd3-hierarchy' -import {linkHorizontal} from 'd3-shape' -import {zoom} from 'd3-zoom' +import { D3ZoomEvent } from 'd3' +import { drag } from 'd3-drag' +import { event, select } from 'd3-selection' +import { hierarchy, tree } from 'd3-hierarchy' +import { linkHorizontal } from 'd3-shape' +import { zoom } from 'd3-zoom' import * as Redux from 'redux' -import {IState} from '../reducers' -import {Run} from '../types/api' -import {bindActionCreators} from 'redux' -import {connect} from 'react-redux' +import { HEADER_HEIGHT } from '../helpers/theme' +import { IState } from '../reducers' +import { Run } from '../types/api' +import { bindActionCreators } from 'redux' +import { connect } from 'react-redux' +import Box from '@material-ui/core/Box/Box' import Loader from './Loader' const globalStyles = require('../global_styles.css') -const {jobRunNew, jobRunFailed, jobRunCompleted, jobRunAborted, jobRunRunning} = globalStyles +const { jobRunNew, jobRunFailed, jobRunCompleted, jobRunAborted, jobRunRunning } = globalStyles const colorMap = { NEW: jobRunNew, @@ -45,21 +42,21 @@ const colorMap = { RUNNING: jobRunRunning } -const styles = ({palette}: Theme) => { +const styles = ({ palette, spacing }: Theme) => { return createStyles({ networkBackground: { - background: palette.common.black, width: '100%', - height: '50vh', - position: 'fixed', + height: `calc(50vh - ${HEADER_HEIGHT}px)`, display: 'flex', alignItems: 'center', zIndex: 2, - cursor: 'grab' + cursor: 'grab', + marginTop: HEADER_HEIGHT, + borderBottom: `1px solid ${palette.secondary.main}` }, networkGraph: { width: 'inherit', - height: 'inherit', + height: 'inherit' }, tooltip: { position: 'absolute', @@ -75,9 +72,9 @@ const styles = ({palette}: Theme) => { cursor: 'pointer' }, legend: { - position: 'fixed', - bottom: '59vh', - right: '6%', + position: 'absolute', + bottom: `${spacing(1)}px`, + right: `${spacing(3)}px`, zIndex: 3 } }) @@ -92,10 +89,8 @@ interface IProps { type IAllProps = WithStyles & IProps & RouteComponentProps export class NetworkGraph extends React.Component { - - shouldComponentUpdate(newProps: IAllProps) { - let dragOffset = {x: 0, y: 0} + let dragOffset = { x: 0, y: 0 } const allNodes = [...newProps.datasets, ...newProps.jobs] const matchingNodes = _filter(allNodes, node => node.matches) const searchExists = matchingNodes.length != allNodes.length @@ -122,7 +117,14 @@ export class NetworkGraph extends React.Component { children = _filter(newProps.jobs, j => j.inputs.includes(node.name)) } else { const job = _find(newProps.jobs, j => j.name == node.name) - children = job ? _filter(newProps.datasets, d => job.outputs.some(output => output.name === d.name) && !job.inputs.some(input => input.name === d.name)) : [] + children = job + ? _filter( + newProps.datasets, + d => + job.outputs.some(output => output.name === d.name) && + !job.inputs.some(input => input.name === d.name) + ) + : [] } return children } @@ -134,7 +136,14 @@ export class NetworkGraph extends React.Component { } else { const job = _find(newProps.jobs, j => j.name == node.name) // TODO: Bug? Let's confirm input / output comparison on job name is correct; should be by dataset name? - parents = job ? _filter(newProps.datasets, j => job.inputs.some(input => input.name === j.name) && !job.outputs.some(output => output.name === j.name)) : [] + parents = job + ? _filter( + newProps.datasets, + j => + job.inputs.some(input => input.name === j.name) && + !job.outputs.some(output => output.name === j.name) + ) + : [] } return parents } @@ -186,19 +195,20 @@ export class NetworkGraph extends React.Component { } function graph(cluster: any, reverse: boolean, history: History) { - cluster = tree().nodeSize([20, 70])(cluster) - const zoomLayer = svg.append('g') + const zoomLayer = svg + .append('g') .attr('id', 'zoomLayer') .attr('width', 'inherit') .attr('height', 'inherit') - const g = zoomLayer.append('g') + const g = zoomLayer + .append('g') .attr('id', 'lineage') .attr('font-family', 'sans-serif') .attr('font-size', 10) - .attr('transform', `translate(${width/2}, ${height/2})`) + .attr('transform', `translate(${width / 2}, ${height / 2})`) const n = g.node() if (n) { @@ -214,13 +224,21 @@ export class NetworkGraph extends React.Component { .selectAll('path') .data(cluster.links()) .join('path') - .attr('d', linkHorizontal().x((d: any) => reverse ? -d.y : d.y).y((d: any) => d.x)) - .attr('stroke', (d: any) => d.target.data.matches && d.source.data.matches ? linkHighlight : defaultHighlight) + .attr( + 'd', + linkHorizontal() + .x((d: any) => (reverse ? -d.y : d.y)) + .y((d: any) => d.x) + ) + .attr('stroke', (d: any) => + d.target.data.matches && d.source.data.matches ? linkHighlight : defaultHighlight + ) const datasets = _filter(cluster.descendants(), d => isDataset(d)) const jobs = _filter(cluster.descendants(), d => !isDataset(d)) - const datasetNode = g.append('g') + const datasetNode = g + .append('g') .attr('stroke-linejoin', 'round') .selectAll('g') .data(datasets) @@ -239,9 +257,9 @@ export class NetworkGraph extends React.Component { datasetNode .append('a') .append('rect') - .attr('fill', d => d.data.matches ? circleHighlight : defaultHighlight) - .attr('x', -square/2) - .attr('y', -square/2) + .attr('fill', d => (d.data.matches ? circleHighlight : defaultHighlight)) + .attr('x', -square / 2) + .attr('y', -square / 2) .attr('width', square) .attr('height', square) .attr('cursor', 'pointer') @@ -252,15 +270,16 @@ export class NetworkGraph extends React.Component { jobNode .append('a') .append('circle') - .attr('fill', d => d.data.matches ? findJobColor(d) : defaultHighlight) + .attr('fill', d => (d.data.matches ? findJobColor(d) : defaultHighlight)) .attr('r', radius) .on('click', (node: { data: IJob }) => { history.push(`/jobs/${node.data.name}`) }) // Add text to nodes - datasetNode.append('text') - .text(d => d.data.matches ? d.data.name : null) + datasetNode + .append('text') + .text(d => (d.data.matches ? d.data.name : null)) .attr('dy', 10) .attr('font-size', 8) .attr('font-family', 'sans-serif') @@ -269,8 +288,9 @@ export class NetworkGraph extends React.Component { .attr('fill', labelHighlight) // Add text to nodes - jobNode.append('text') - .text(d => d.data.matches ? d.data.name : null) + jobNode + .append('text') + .text(d => (d.data.matches ? d.data.name : null)) .attr('dy', 10) .attr('font-size', 8) .attr('font-family', 'sans-serif') @@ -293,20 +313,33 @@ export class NetworkGraph extends React.Component { function redraw() { const zoomEvent: D3ZoomEvent = event - svg.selectAll('#zoomLayer').attr('transform', 'translate(' + zoomEvent.transform.x + ',' + zoomEvent.transform.y + ')' + ' scale(' + zoomEvent.transform.k + ')') + svg + .selectAll('#zoomLayer') + .attr( + 'transform', + 'translate(' + + zoomEvent.transform.x + + ',' + + zoomEvent.transform.y + + ')' + + ' scale(' + + zoomEvent.transform.k + + ')' + ) } - svg.call( - drag() - .on('start', dragstarted) - .on('drag', dragged) - ).call( - zoom().on('zoom', redraw) - ) + svg + .call( + drag() + .on('start', dragstarted) + .on('drag', dragged) + ) + .call(zoom().on('zoom', redraw)) // run calculations for network graph let lineages = getLineages() - lineages = nodeId && !searchExists ? [_find(lineages, lineage => lineage.name == nodeId)] : lineages + lineages = + nodeId && !searchExists ? [_find(lineages, lineage => lineage.name == nodeId)] : lineages let clusters = _map(lineages, lineage => hierarchy(lineage)) clusters = _sortBy(clusters, l => l.descendants().length) const largestCluster = clusters[clusters.length - 1] @@ -331,22 +364,23 @@ export class NetworkGraph extends React.Component { const { classes, isLoading } = this.props return ( -
-
- - {isLoading ? ( - - ) : ( - - { - this.graph = node as SVGElement - }} - > - - - )} -
+ +
+
+ + {isLoading ? ( + + ) : ( + + { + this.graph = node as SVGElement + }} + > + + )} +
+ ) } } diff --git a/src/components/Toast.tsx b/src/components/Toast.tsx index 1bbd9ae..3960c6c 100644 --- a/src/components/Toast.tsx +++ b/src/components/Toast.tsx @@ -1,8 +1,8 @@ import * as React from 'react' import * as Redux from 'redux' -import {IState} from '../reducers' -import {bindActionCreators} from 'redux' -import {connect} from 'react-redux' +import { IState } from '../reducers' +import { bindActionCreators } from 'redux' +import { connect } from 'react-redux' const styles = require('./Toast.css') interface IProps { diff --git a/src/components/core/code/Code.tsx b/src/components/core/code/Code.tsx new file mode 100644 index 0000000..a22bbae --- /dev/null +++ b/src/components/core/code/Code.tsx @@ -0,0 +1,44 @@ +import { THEME_EXTRA } from '../../../helpers/theme' +import { Theme } from '@material-ui/core/styles/createMuiTheme' +import { fade } from '@material-ui/core/styles' +import Box from '@material-ui/core/Box' +import MqText from '../text/MqText' +import React from 'react' +import createStyles from '@material-ui/core/styles/createStyles' +import withStyles, { WithStyles } from '@material-ui/core/styles/withStyles' + +const styles = (theme: Theme) => + createStyles({ + // eslint-disable-next-line @typescript-eslint/ban-ts-ignore + // @ts-ignore + codeContainer: { + padding: `${theme.spacing(2)}px ${theme.spacing(4)}px`, + backgroundColor: fade(theme.palette.common.white, 0.1), + borderLeft: `2px solid ${THEME_EXTRA.typography.subdued}`, + whiteSpace: 'break-spaces' + } + }) + +interface OwnProps { + code?: string + description?: string +} + +const Code: React.FC> = ({ code, description, classes }) => { + return ( + + {description && ( + + + {description} + + + )} + + {code ? code : 'Nothing to show here'} + + + ) +} + +export default withStyles(styles)(Code) diff --git a/src/components/core/text/MqText.tsx b/src/components/core/text/MqText.tsx new file mode 100644 index 0000000..54ea924 --- /dev/null +++ b/src/components/core/text/MqText.tsx @@ -0,0 +1,178 @@ +import React, { ReactElement } from 'react' + +import { Link } from 'react-router-dom' +import { THEME_EXTRA } from '../../../helpers/theme' +import { Theme } from '@material-ui/core/styles/createMuiTheme' +import { WithStyles, createStyles, fade } from '@material-ui/core' +import classNames from 'classnames' +import withStyles from '@material-ui/core/styles/withStyles' + +const styles = (theme: Theme) => + createStyles({ + root: { + lineHeight: 1.5, + fontSize: '.875rem', + fontFamily: `${'Karla'}, sans-serif`, + margin: 0, + padding: 0, + color: theme.palette.common.white, + fontWeight: 400 + }, + inline: { + display: 'inline' + }, + heading: { + fontWeight: 700, + fontSize: '1.125rem' + }, + subheading: { + fontWeight: 700, + fontSize: '.875rem' + }, + mono: { + fontFamily: `${'Source Code Pro'}, serif` + }, + bold: { + fontWeight: 700 + }, + subdued: { + color: THEME_EXTRA.typography.subdued + }, + disabled: { + color: THEME_EXTRA.typography.disabled + }, + link: { + color: theme.palette.primary.main, + cursor: 'pointer', + textDecoration: 'none', + '&:hover': { + textDecoration: 'underline' + } + }, + label: { + fontSize: '.625rem', + textTransform: 'uppercase', + lineHeight: 1.4 + }, + highlight: { + backgroundColor: fade(theme.palette.primary.main, 0.25) + }, + bottomMargin: { + marginBottom: theme.spacing(1) + }, + inverse: { + color: theme.palette.common.white + }, + small: { + fontSize: '.625rem' + }, + paragraph: { + marginBottom: theme.spacing(2) + } + }) + +interface OwnProps { + heading?: boolean + subheading?: boolean + bold?: boolean + disabled?: boolean + subdued?: boolean + label?: boolean + inline?: boolean + inverse?: boolean + highlight?: boolean + paragraph?: boolean + color?: string + link?: boolean + href?: string + linkTo?: string + font?: 'primary' | 'mono' + small?: boolean + bottomMargin?: boolean + children: ReactElement | (string | ReactElement)[] | string | string[] | number | undefined | null +} + +type MqTextProps = WithStyles & OwnProps + +class MqText extends React.Component { + render() { + const { + classes, + heading, + subheading, + bold, + disabled, + label, + font, + bottomMargin, + subdued, + children, + link, + linkTo, + paragraph, + href, + inverse, + inline, + highlight, + color, + small + } = this.props + + const conditionalClasses = classNames( + subdued && classes.subdued, + bold && classes.bold, + label && classes.label, + disabled && classes.disabled, + highlight && classes.highlight, + font === 'mono' && classes.mono, + bottomMargin && classes.bottomMargin, + inverse && classes.inverse, + inline && classes.inline, + small && classes.small, + link && classes.link, + paragraph && classes.paragraph, + subheading && classes.subheading + ) + + const style = { + color: color && color + } + + if (heading) { + return ( +

+ {children} +

+ ) + } else if (link && linkTo) { + return ( + + {children} + + ) + } else if (link && href) { + return ( + + {children} + + ) + } else { + return ( +
+ {children} +
+ ) + } + } +} + +export default withStyles(styles)(MqText) diff --git a/src/components/filters/Filters.tsx b/src/components/filters/Filters.tsx index 3ab09a3..5f49043 100644 --- a/src/components/filters/Filters.tsx +++ b/src/components/filters/Filters.tsx @@ -11,8 +11,8 @@ import uniq from 'lodash/uniq' const StyledFormControl = withStyles({ root: { - margin: '0rem 2rem 0rem 0rem', - minWidth: '10rem' + minWidth: '10rem', + margin: 0 } })(FormControl) @@ -85,7 +85,7 @@ const Filters = (props: IProps): ReactElement => { } return ( - + {Object.keys(filterByOptions).map(o => ( @@ -99,7 +99,7 @@ const Filters = (props: IProps): ReactElement => { {subFilterVisible && ( - + { + return createStyles({ + appBar: { + zIndex: theme.zIndex.drawer + 1, + backgroundColor: theme.palette.background.default, + borderBottom: `1px solid ${theme.palette.secondary.main}`, + padding: `${theme.spacing(2)}px 0` + }, + toolbar: { + display: 'flex', + justifyContent: 'space-between', + alignItems: 'center' + }, + innerToolbar: { + display: 'flex', + justifyContent: 'space-between', + alignItems: 'center', + maxWidth: theme.breakpoints.values.lg, + width: theme.breakpoints.values.lg, + margin: '0 auto' + } + }) +} + +interface OwnProps { + setShowJobs: (bool: boolean) => void + showJobs: boolean +} + +type HeaderProps = OwnProps & WithStyles + +const Header = (props: HeaderProps): ReactElement => { + const { classes } = props + return ( + + + + + Marquez Logo + + + + + + + + + ) +} + +export default withStyles(styles)(Header) diff --git a/src/components/search-bar/SearchBar.tsx b/src/components/search-bar/SearchBar.tsx new file mode 100644 index 0000000..af52f16 --- /dev/null +++ b/src/components/search-bar/SearchBar.tsx @@ -0,0 +1,112 @@ +import * as Redux from 'redux' +import { Theme, WithStyles, createStyles, fade } from '@material-ui/core/styles' +import { bindActionCreators } from 'redux' +import { connect } from 'react-redux' +import { findMatchingEntities } from '../../actionCreators' +import InputBase from '@material-ui/core/InputBase' +import React from 'react' +import SearchIcon from '@material-ui/icons/Search' +import withStyles from '@material-ui/core/styles/withStyles' + +const styles = (theme: Theme) => { + return createStyles({ + search: { + position: 'relative', + transition: theme.transitions.create(['background-color']), + backgroundColor: fade(theme.palette.common.white, 0.15), + '&:hover': { + backgroundColor: fade(theme.palette.common.white, 0.25) + }, + marginRight: theme.spacing(2), + marginLeft: 0, + width: '100%', + [theme.breakpoints.up('sm')]: { + marginLeft: theme.spacing(3), + width: 'auto' + }, + borderRadius: theme.spacing(3), + border: `1px solid ${theme.palette.secondary.main}` + }, + searchIcon: { + padding: theme.spacing(0, 2), + height: '100%', + position: 'absolute', + pointerEvents: 'none', + display: 'flex', + alignItems: 'center', + justifyContent: 'center' + }, + inputRoot: { + color: 'inherit' + }, + inputInput: { + padding: theme.spacing(1, 1, 1, 0), + // vertical padding + font size from searchIcon + paddingLeft: `calc(1em + ${theme.spacing(4)}px)`, + width: '100%', + fontFamily: 'Source Code Pro', + [theme.breakpoints.up('md')]: { + width: '30ch' + } + } + }) +} + +interface OwnProps { + setShowJobs: (bool: boolean) => void + showJobs: boolean +} + +interface SearchBarState { + search: string +} + +interface DispatchProps { + findMatchingEntities: typeof findMatchingEntities +} + +type SearchBarProps = OwnProps & DispatchProps & WithStyles + +class SearchBar extends React.Component { + constructor(props: SearchBarProps) { + super(props) + this.state = { + search: '' + } + } + + onSearch = (event: React.ChangeEvent) => { + this.setState({ search: event.target.value }, () => { + this.props.setShowJobs(this.state.search !== '') + this.props.findMatchingEntities(this.state.search) + }) + } + + render() { + const { classes } = this.props + return ( +
+
+ +
+ +
+ ) + } +} + +const mapDispatchToProps = (dispatch: Redux.Dispatch) => + bindActionCreators({ findMatchingEntities: findMatchingEntities }, dispatch) + +export default connect( + null, + mapDispatchToProps +)(withStyles(styles)(withStyles(styles)(SearchBar))) diff --git a/src/fonts/SourceCodePro-Bold.ttf b/src/fonts/SourceCodePro-Bold.ttf new file mode 100644 index 0000000000000000000000000000000000000000..c790e045bfef5a65717c0a794781478f7e3b138b GIT binary patch literal 191568 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%0AHdD*D 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�lzgi2;rQ=8FjX&!8IwMt>TH*9E0_?&SMO~k{PtFNKo zCYWm^ZRGh{-uE{aKPcr&psKp~8F^^$hK(b8%H@Ib*Zm*ZzI~LUt29GTVR1uhQrhyT z5c{BcIS!_=IxXIb*`t6OFIGqAu`f@o;31kSnFg%fAlcMHAu=9KTeHqKkK1N;nzE*s zkLa3QhEkthnHp41Z)1)tP5U@#UUCUbiM47zR3Y7W{wsC=e*9838OCfJ0Yud$5OZTHwAN$N?JeMroACFiK;`ll0;hH(FW^CiA_PR!duBgA=7Z zu+)!WT%W{JH^X&XUuxMu$v6cG4{noUYMBq@S)9~RN>~ZFBff$ z5vz<+NVd9~8+@jyHC%C~Tm5Z`ur6H4(^`9@-ATJ6Gw_L)Ca*0V{H)W~Z!qM;-eQr~ z+MOGWhX;xTqWH$r-wO8%k6>Gz3?u`QHd^lKDbJ-dne>kC1Doa!bho#kSM5HJoIEe! z_qWu4uShbzBFPwBL~yd-&fzXQ@XPM%dF}1p2j(^%!0&$vN7_XIyuB&;)g1Ht5(%H5 z$*-mBg{$#H3+O|p(&a}SC?bpm8n1rJmHv|pv%}rSs6XiUL`&^Gn_&DM6SBhd;z5{A z|AkenqUG~&!`_55M;o=T$t@3}N#u zK7U?(5ubrbz~>|Q{7>xr6ow#bnrmAvuj=FIr)LX#-< zXr+jCsN@tb?Ms)38XQiOdED-r+W1_|?wU0lyY*h16|QH^0~pl5XlJ0j1k`OTW92aj z)#c71fOf{GY4hsX=B1;PAacw=VS0r`Vs^X7eGTTvQX z?@E=sJkjoex78zDnvDuyzp7-l@7|CZ%exjcr7hmW2I9OQLMOi_ehIRnPWCdVVO^B! z)2i|k)!(nkjb%}tU5Vj#Z?HTTk94)Qx4K)C#bV4JGNnDk!lhDvC=FDc%V`}pG__~a z?dGOoCs|#L957RMsO5ErCs#>g-5`m^SGNhXLInUQ)2d11V{=BQe^^)>$vcNUQ+3&f z_yhOvR%u-o6<;t8Z@?6JeQ~Syyu~K5tzB#J7+ZZNDHcRkrOhem@pf~^l{Hwv(xTCF zv!OX%XwRUxcL@81m*A`OfjH}Rmefg;nMa5;yO4$vr?cMu5V}g$Ksj$FfqY{8q@l5X z$~ut$(DV`sVHj{?zppqLN%ke}TJZ->U2!Spi1^nfy_u%F^$}selp9Vbhw^TBrZ;SI zHb#OihCy4K(Bcb)2%7gv;eha(b{_aK0$^#OP1#|;D<KdaYo-*Zr%Jxh@m5zUkN|LWR>99 z+^C@Zh|Q^WxR_qg{BEDc`Wd=kl`_AjdE?7B9oAE zO!Jqqda6x|8j)0Ejv{RlF1yRzM}s0H97jWjmK>IX<;M&KU#L4Jb(-u>o89e7cKQOI z+eh?GjzlS7b2m1){r#isFWPGN`Rq2Y*O%xBcvEdsvm^Jb7JJZ{^k|#B4r{1YG-myQ ze8Ai^)95gg-PNFPZfb2w=DS9PcDKjv!GG>o9TrowD7Kp0NLzXkOZ76_3o%6w$=TzW zD22{-@V!_Vo!eAq;E3|UG&&yKr*G?u^_2G6-EAHVZus@92CTuU!LNKe=(Cu<0~-Dy z8XweN2*t|^=6Dk7)iN+=H8v({H6ChZdD9(PVJ^U-sSuKCa^0AHQ?&7S)xuX;-_Fwn@7xtGZgP zWOZ4RRovu`+`u;O6%4is&9q<#u))Luk`P`@C?ODj2{>R#AS5rLKVBXXl1F&7Uu;N1 zD5;LM`hU;Ny;~%iK;Fyye}112wy)>jyK`sGoH=vOnKNh3kSPuh9Emx0lvjlA5iD8s z&995=Y$ev>9KY-0U+0y!HLKPBIX7!C)8GyK-;wxpC9#S^_NN2@Ou7xN`V(-M1N1;p z*MiBD=K-wq2&!we-?m=fan6NTZXc;8l*IpX@zqaUTs;DS9wa7+?*uN$b}eX;roW_` z(ija!v91>}C)ckp=xyt}x5$xYGnpM_Y};@rV^gf2n4oBO zOr!c_XR3@sU7z5+3q}FXM#pZ@!WG#B#2uF4F&5DnI!>JQbupb#d)$~v>lS1vwi-ky zG}-F|vB-Lhqo8EH*;!D61`k!)FtaZ354At@gA$MDRsJ8~!VurV^bh<LNyeEJh=MzUXeMz-lbmiP_O;cz-L-8#E%g=` zdvPUYjT5fa6`j?N`E?bQbtH2@r?*Js>^0tE5BI#9qHn|`O3a68M=`-d9b;702ogD% zTi~4qh!Y}*R!c?q2v$SqOF`ry0zMrnRdCBfqil<~I{P7YiX0)Uu2GfFIhB1c`<7aWFmB+yJwxDL}o9=Q&iNbr&@17pO|id^6lrI6bmn%|uQ~W3j3xaQ&<;PJJ z?WH6Vq666pb`ni?jx1Vdkbx{pO-SuX$xDNVDhxL0XsXf?0rJHEN+1Ny*|>Y&+7gpu z4bCsODtRR<=j<-dm-CAN!r-AbYYx#B|K25|qnDtf3)MCiLS+&oi}usdgp~FVi3L}3 z^`-?_I$oO&0TDZktg-Y6)ydqbM%ESqyDn> zwHet)*^q50U%fNiU0U;3oid9l4s$;1+UKZoI%*yJ;zzx89x|AG2~B?yb!KwaK&wlv zF$ga~D?D7V!~iqom+m~o0(aiacEz3;!9QqxTs_8aJq6ltD5)T;`(cyueN-=PK2%9R zpj|-Nzl$CuDTsc>9W3@VXtC8%Ni*tBr6f3U02Fm6h|mXf=XHvYe|Bzt!QlUlsqOx4N)8+Lf1W zDk&%^F~LQQNryo0|EA1B-L&LEtdrIpfrY48iAmZ=NkG_{&RJPvcGtH1BLmKexyt3O zigdDFcUuCXaFIU}F#BEI7H4s>FIM^-TB@2lz?QsRgwqh_rvKFWt>%13K4#)1Y%#wT zk+#VuAe0R=kVAF?>LPW13nn+^^ftQ_)7!?PhMpFgD%gVlUr;mDD{cyZP;1i zi+^w8`UuR-+Uj&Rgu0(|Mkm0<9xLcZMd)7&kI8#e zmAf&%qNc6T6maluhIH-2?j9%(I2vrFepxo-$_5L!)yd4wv@=yi3;0|=~Z!s^)2B}q`i)l$+tO#l% zN-T3yI5kKbFmyV~QtV<^CyLx%fCMocE)E8ZOG2R^?Ogl(M)`Nz>?6K^zqM{02E&eg{h8Ffc)OV_I5&1Yim| zKwDtVQY9xRGxZ1DfGD*=&=wVBZ^$u-(sKAd#Wc-M>|+8}h4)XuuWe$&Y$X`% z>Z)5MW&}rN-Qh(nh!L zLcr!hds^U@Uo5TGq=p)KE$J<%M!rOQ$Ouy`S$QwfUM2erS}XKu0Yy>Mgn9Og@-|EKG0SefQn_j(n-zRFtQKGSq(P$i8oW^P7kIWBsh`N?(r` z|E`SxCms(0@M>%(nt_g}m$qntPl|k=Tr8s_hjEk?20I-WT+RU`kjqp6JxEEn^Wawj zJ}H;v4@m}D()m(DWKrit8yle!;l%Ewuz+&pGuZ4lo9HFgkCa^$Ib%jcPG=K~br&Aq z6j@m|;%M|nx=p9zCmDO~Kk}wG1ezQp6>D-zrY&me)j6OY_UX3mE)UMJI@_9u3^@j4 zu3@O9t;jXAn!*>KIsS7Dr2`YSO)xoC-l|aDKI_0uiT|h>;aC<3s`Md^XyDUlu4W9YDBYk9XSa z+L2Ia!SoWhy)>`2xYy4j)!lg~^Sk1^RvOB?mo!Bebyj4YwOm*17HzoujaCDleba%$7UW#LegW zzI6UIciGk(mnmzFn{AbI^jZ4&CcVoxv%E&X+PIAA@nr|wA{rH)rJ z_S1N!kte*9iEWZYKCv0{95o@;=J_;v0Cgh={ZfjQa+0q+nYSxdw#vx@XdvD?k+rIW zmWD2oH@Is}N5=L!ZY4uMI$cR)vFyRybw=gz4N9Q{T-MTE-D}8o=Jx4wb5r=N-l!kS zDa;*mRXV_E^$>ZI+y+KV;XDGECRIt_(C{!xfT)ThXSlggTxcE&PhfRnpVXCnv|R=z zU}K>w8guYA6K{QJvjG>m2h#>*5~2l2Y5xZK+S1pAmoi-Bb4%ZqBPE>CaeO3(=P!^#@)2e?6eMR^!lvIAefq)1ZN zWv8MPu{;Zf0$kbwuOpg33gP2G3yAMgN(_T`=8?UH(jw#(W&^0wXcuP`XpTw2)*Q2) zra>4unE9MNGV;CfoX*OO={*@$opY<7V<&56EFyhRJ> zxI`naAnwTllls{Nim)cWB?_RPCqYd;PkSb4t1OvNC}MvW(qeq!SHA!cF;ZWHdph(A zu%blpfZn!3T-yT*{SEP7S*6jMu~BD`i*)hh-r-*F-n>A;u7Y6RuHw$Vl3NPh1>L$V zol9o#?%Nl?_=fWGlg!^@ph#aIen|g!#$RLp_-pI&3;KL1u+<=cfvb5nh{vMNmTHJ$ z;-DCk17uwnP91b?P8eM*+{*-+I)EUu36T>O=2hr^k_$xeq(u?~5$nHvf+-ZLNQi49 zM8-G{nWmO$^ARIV9n3I$c}YX3x3tc#Gu(2^o`HcinL5Wbog-ki`0bvC%A47dovW51 z%p#^B)ANSv>w69Htz`v;XXV?rnR2Rvb>WwWhCmG(P5VI!b?~~}r?qgBqLt)-!dMsL zjiCT%VKk^3X%rXn!D=*)XgiFQ^cWI`B+oUWNbkwZp7PNsk0PbMr?g%jCA9T3F{VjS zqLT|qeIZGi7zhCe%%&LXO^p~3d^})8ga+EGb7=jeb2z8EZ6FlBu&Co4#%?&oZuEB) zU&PLc>T9Cr4no6iL@xFA5oveC=5@(=XjPOt-p#uA&OlpjqoQJYa`IcOJAgPHg~ z3pQZ4u&-@?WL4#GF==W&{X^Y;+sx-ZgB4rXX4H@Dn9;XwK{RXq*~W6u+=9X#XRqI! zd%^Dbi|$h6T7XA~OB6#djV1T)6cHsCr5r7h>}Oi)FH$#oWMZuA(IirqDYOLbkf1{* zM6+lV`_UL`Fv&T}MSNS2l=!(OCsoHyF6zL)pa-db>ITi_f%h-kO4=$-^2o|;QrL{m zTXk(ic1OvLLl5Rz0^Z_?t3R-)bNQys-km0o`8)CVGBV4`y9e6s4UN&9wTm42eTHH? zL|>7)*z0o53DvEf=P4XA6=n}-7vz?dwXLv~*s`Fn3JvLXuCJc0(f%Y|Jt^}vUnbJN zVE{&#TF^!tut6y;Rg+97S*0M=WEJ6rWLBxFy`ncKX|F-3uR?o$vjIzmXGKT5OX>Kh zk;>Vgk$k_cDlp=kQ_DIRZnUu5%p1qX*BI*NoijA!oCS>;%a`gy-Z{B8eS9>ld}e8N z#@XoXGr+oX!06pc`kl1-D7m?xgm|vHoFpNF0rm)^aU_t5Pi4HIaW5L!w1`8dIdMm} zAk20lrc@OsK*m^{&yJCbo`mo{V{oVQrIE{W`(uObyN9Rc%^J=eXnOSa+n+jbMz6u+ zJZ~t_In*^`d;KXuZ5jVS4gqSvbdlB_AH#}h&L>t2geak@0NP<+xMIAyMm{<`h zVkD4=9g!kJ&m?}S^N24Kp$gIKh(ZtLSHuoQm0x^&KMY5-pth$sunzwY9SD2}|2!>W z7gP3Rv~IgC=Y+SbKIZFc_{qh6U5jG4?o{mluv>4+F7jG?H}sK_DuBL;qLt*ju8NdN zYJ^IK;4L(eG;%XS?SYX5Jb}(l)*uUTNOuHod`z}Hh6MlUdbw-hJDWD08|xg5;rj8F zv919MVyV@hfnH3+VO6DllD8!pfmi^g9v4t(hsknxU}Do0--!XBHy>Na?s+VJFCzFo z&}SHq&y?#SWn?a8Xd>@I)f==1e{8qfzr&^Eu0WkjLXO11q{%$j3RAZ>gDCBI=AIUTy<70-$%e(34Pao;k zvyi>IzplPNY;PF8jxB7eZK_4jHKOMV(G+uXOW&lPOJa`frtnqclcQ`jgrowg$J7iO zTht8dTdZneG?AQu7mNlv_VN1?s_dmRXR@2)Cx7*;0|(ApsArE~xaV_oN6!Lo%~BC; z4cocyp6cWXB5}~QZ1`B@K;-MgMT7U&9CUaK3gCr2IQ+@GyL25 zW$^qA>K4N|Xi)xk3F6FP3+Nx@eh3k`8bd9jcp)BpoHAqpFnNOd_XQ zC{HwXZs7I-a>XD6Bx(5?vnjzHDO5st=mN4xcNjq0fOIy^0JvSAn?=(Xys;v>l)Iy|9Jp(_~jbXfiMC0h2xTi!vEJR)C+4mdS_ zj_3g3#-NN}Lhgw$yQ9Y^{%TalqyxM=;a-TZsr%yE*YJf*e9diBlfRCuUz_;v^!1qb zHR?7h+VAG6zlV>esQonGCw>>-r$I;MPx1SBYW)*_p9H^-sr4t|(@AOHCw>QZ1}0-q zCr|u74fjU4rHb~Q4*vAt0pEoBC;u*|!8hsm3H9r!elQc#;rhXVhYp{WPP7mYcJdj@kbMj8cy5@KICMi9RhyRk9az)@kP!Mub< zm-Zk|_?&7qT{RM{a?an&M^G2Pe|oAxbMWdeeO}&g_R=_64!<_s=bUzEB*-(to08;- z=JZP|5OlW*e76|pN3GF99iu6!48}pR*0@$36{dne-GBe)`|n@z5aJB32X97rULJE6 zUr$^a@!9*?v#enKdgNLlZO10*0BWMJnFerfGKFL#6`|xv87BRMQW8vhA-Rby^XPG3 z9lY+k!2<{Q|J#QS92`1`e+PyRqS}6G5RDi{VGc+(3LZyG(!zR55tgWrD1aPUPc2Au zpjW0ayR;b1Wsu7(9H^-Yq+IboqZ$9F%I~kDD}Ix9_uTsRU@#M++Tu;WbObW}Lpg}3 zyE}2N@^nDDjtwjpjVm7sfU%>sl^==0DBf7i2COK8d!PBtx2lQh+_iNA^ar}C?W~9PY^2U z-!yfklzN?dpZ3+HjzEg9Dn?=aZT9S~SFgY8uJu>n%7@t^W|3t?l+VOOTvZ^{SvQY2 zK_}!%FceYOi_o-ILkJV?~zwaz^mRDBHp01@Bt&P$y1RXEI7`}*) z;ftheIWoX6*~I{Wc%8;CQ6UaiLp-fJ;E(BB1YOH zq+Wt|5%S4?BSP1b8wLe+5j!D7&=#7`H=;vmhDrA{r66m2ZAW1C6k zGZ4nQWp-_#w=mLL+~DY{SQ4GK7(sYuuCKM0dI~e_5qD**CWk_UMHaRDy~XAQXF3W- z;kGkpd+(xa*2H$1e9@rK-P97sMnUP&_$v0I;s9NegM88pj=GaNR$E~#;B#B8V`)na zpV){Ve%9j2FlCstL(ZJsoV<#`R5>v?r*S zH|bIyQPq3#?d&apkbIb!Js32n z08n-^{-bJDNrIC!MhK%GF*VJ$qCh(mK#|o1y&zN)DE1M~{(D&PgAX8)@4xWy=Pti+ zY$tG3Ek)(9yc*NP%f`=RS4ccX++U>9HF!2sif1OZj$bX)A>_H-bBoVM)X+w-4G5_x zG!~L^ByCA8f*6MaMO(~-5>1w5Qld#`Qy>Q&QL6%7!Doj_&S!6Z{>SX!<8R)1A8X&e z7^h(b7GJ14`B&~cQi$3+QM(bwAmAIem&C4ZReb;yqV*^hA;YlE)LbYB4L{Lxsh zeD2t_z>P44d>)etAN24R?Dt6=KsCu=79_PWDAYpQJle(i?c_acv@WK_{jw%_@Z{ZV zifX}0cQ#G8S9}Z6$qQUn%_W|Cb8U`2$K~_6%MF}?O4Ol+hywlx96b60miudxQ43X*CA{*$L1|+^ zlK5!h5T4y!9i`^e76zdg(juXD@(itoku_GBeFV#e=NG9x+O{vU*ckcB09Sz&yS9YD zcKACYr5QQS+?c!0QPj{|F|^oOKf9^gTU=|2`W9>oSJ}2VIru9rom~A zq`iujd~Bt~g0TDicJi9yk#k}ZoUG$(h{Cx_c!Xf}!)`sLuh&K>`~+$?8ej1j-2HzH7ro<*6%h@l0)f%vkSgc?EKM z#(xcmEHl2PgEe51;Zt7nLf4^VX&f0th|q2fnLoT@j{2dCtv%ew3gYkf9gg3^%lN%K zl&Bxv2Y4n4qDSPMs4o;_cGgH)#b;)!c~1O~G`X0%c5M7rYu6*t8H7g6!B}PdkLri6 zL`(YP@1l_9l1VnRCx``>g&amDrZNC z$jJFzf-#lM9vGF^&rjqr%^%C%0OQyt#-Aeh45^8oWbg9A%VG|UUx*;~XZm%FXKbQk z>FYQ-^{;f^z23|GgX%YY}0Bp#t^;;fS0JQnuls$;KWJ*8IX2tQn z<>l;>_*=8p-t1i%&;=IuqErp1d6Kn{=)E*9)v4sI# zbF13XqRgYBt7pgGWS5qg$1i1MV)B6GsLKWDT9*swW;)wL^XlO&K*#B3C5o}&Ui zffxkfu(5N%6{KS3O-qki0Gv*NqBp2RkO$;!3XvoWB|=F>6(^VRKS(Zl4SNls(`dn@ z7F16FW5y18g%}0Ux$+D zbQ#bS2bjhXZFZqp(%Kz?EZ&i3Dz?Jt10W`hF1S2kbb-Wc(#miC?(C(kNYoyGd+BVh z5zm*4xaGpiVW-Kt(2VFnlhB0na3ackX(isfWy^UJ3uO?1qq0YyhG_-q_gah~vC%ap zazi+JMi=7Foe^yurF3+(w0lV;vZT9IO95X<8j$PdnJ6lh+%To`R=!PHo2ZD@C(TPj z(`>aVOL}luFwB+xp-}(I7A@5Rwy6Q!210!+W3iQeAuXMmdOi}JlLRykNNeSM8SWiv zvlz^B%>(Sowd~1wGvJR(^W}itjZDTQ{Hkif;U|_w2q%k&P;4-GP)3>0?2EGZ;_F#Y z{0H-KW0}L|rWB|LaU^!XtI8xVka)EykgT=PbjfmMj`_?+UgRMA#`O3Nh_`&(eD>|m z_~O24Y%RWUN-c7iyh?41Hm54flvx;InrzJ00*-5o{}x%hrL%FSzz|3=ak59Uen>xZ zYUbxIb-$x~=WHE&BkrM7nv$QL_LL_2ApVWlx2qowe2Ch5rA>0V+>P4!(dDErB+*B; zk%U2u`QXKvg$b}%$6k+nH?fyd94bzhkO5^&70;(DLzsxDG;-$_<R0y=YU+R*n@p%lbc8z15F3`z5#j(QIX~`Yuj@7udMOw{^1}=mJXDONe@b`& zn^f_j-GSe$m`3&E~kr(t<2)^!Ye zV>$Tzr(t0efyc?DqdjG1J)@0UTG~M|C_75E)G5v?b*ky&((a|PrlrJemo~+a4iwgO zheBO7*fP)+3U${MHd(yYuEMYnQGddPu4=CZ0iWL*{}Vd)2uLo4`y|zOVHzZ14Wdf0 zGh>4L6c5WYy2svO<8hWHZ|)wub$FWWQj7heQVrGLBP9&is?UB>gI1kwlP^3pm4Z*a z=3hr!px{n}inI9)A&(5NaF)du3$nC<2l~iEN)LGOL_XkV;~PaiHOm9_HeK<&`uIvV z9v$_^cMr3t+|9+K)}Xa}^UO{cZ@wSjPttQ zAOEeqUA`YxA({JqT>OVRPSGUqyL>!Kx)rI1ro2hi=VvfMa>hY zwUAkmQ&?V?yqu#JB<`vbchl6nhonyQDaFr=!7(Zk?W!OVAy^H-Z{+b52xQ6>3ZUQZ zX9k+9iZc!Nf#9@3N2sC57AV%aJ^6ZS3pGNY?{Vvj12&4@Ji{N?5$F*$y7>ve2H{7XU!A|yVAvbwd>KE_ax#3%yK zK~}>EC(#{zKqg}^hCwj}njAf$mRauJbC>9roZIW3)e`D)q~Rmf(_cM%*{+2PcP*P; z-QN?^T5cTw8@y?j%ey&qkH9%<7UI1xhkHxXZZ5`#IFVomNTiF8jT#B3Twt`!#+!1^ ztjaL~p#_5)q|=bjM!E>;Jfx#&$wZ}j;%OD3q-TpEl5%fM1S%mu7s5dew4sa+Y@n2d zd$-T6uAaNSclr)WcTA5gpaql#5j8C?EG{m@^?5bj&@(rqHoGMhYRRt6n0uMYWV+X6 z$}Os%yRD~Z8HdyI(Zl5(*2Gyq@lCvwD0!kF~9HJS#IZJ3BKoOG`1zekwWS>*dRV zn3y&$COK%Tr}qeNDy%v(Oli&JPsjOOS)fL*?G;J#ISfCYqkqnvE*w4ISJ}D1qO&aM ztn7;vm3PgV)9Z~8+FLiH&Kc|NjX81CyR@gSpm}5-lqOw*~ZSMC507j<K)w^Sn*1AYRX}!Cyqi@#y!6g@u1V75Qmsn~Vqt%uYd-lv|#9CPF zxxUyiCvpzG|<}I%b<=vQ_UEgW3)>oI!+&!;lu0H;@e(oxdoNuw1 zG113qv975f{22heL4Rl)%F)4+MJbF2|S7KmSV(m%S%&U}gP+4*%{gTXy?9<~J-|>8|gs ztn96Kul&$UD9x9>gi`=^59K??e5Q}{A{B!J0EB4O78Jva=Wqw>vTR4Wt8{} z;u(a1Inv>eL6yS(K(Jc!Ao7!Q2C(MGJvl>@?*Z+zbimLQQCn+|!1`1M+ZoqA1>OoA z3V!DI)62_i&Key(s|Gf|w<~NF4j25q{IzaZ&5fnOU}?WsHhB*&TeD`_LGRdy-hEc< z?b$(>zqZ!z3T89kCAHBgZ62+GiL4UGVp%b5BFBgTz@;ND9--aH;7K$Ga00j*07;uc z>(ISy!rV{ci&vWZC-goe_o8KCPc&$^2XUfLlui?l7F>OG^-yDRS?}`Z=Ho#M4^X~Xb`FwdF z_DR$wjW$W8R45A}4mnMmpiIMPlT_;+ICK*xq&;dSW z6Z*h`eX8*2fb_*~e%jH9C0Lj*v4q2S>cV1*DU;Y7fZ*L?9_m)pU(IuQH+u>f49?3k z=~u1Fw9FkGDe`R2D>ls=9IgpEyFN=+^x$*ns-~Qa5<;(W$S+*Rt2C!}% z<+bL1>RO>4(W0ywwZd`;CoRMc3Os-Q^YL}eJJhS|9b)TQZT#QkH?4kq*Y@qZutKZ) zV8FZkO1_Hy5Ee$Sl^>Q33XTuO?@#0TYy9~-$R{SfCgW&Rr5kDmc@}79VzHDij8#_k zOowQb7*DU&Rae(F4c8SE)D6q7IRT$9Fo)SfF~2_+!iFFm&h2CuBua!sg(?S0(-YD5 zm_gWa9d@p;Mc4&uaZOY-wq4mpX*R}7$9IQtp!vU{%>PzclpoC%VNn_b=76iq;w&ll zHI?l|58Vz#JRlcX6YubBYFU#Ni%U`m#U;Yx{-Ok$7 z0%)B;Ln8UE_>8QKvZ@(Jr8n8v*iTe!gQhrcgeg%>Udflp7)6wP&B<#{pwoKkqehq< zAhk0}@`GvTWi@GF zP_gi)+zlVi3B`hzU-yi9@S`YptK81smES_KAM#?i$gK>g-{KijhNr0Za=DGYBp=7` zf8oF1B{#GC6~vR$!-$FecVn~_D7kpXq6(g$mOJ2;^bztSvN4_?88@>pNZI(^%b$Nd zUd-;6WIX$UjU33KkK_s*tV!;-e&}h_;4(N5(Ly(3m&0Co%{?)hLLMQnL3~QW>T29w z#_x9EZWF)j#$79CqnhR}0uE1=*mK+{yy*$`HXg=uIu&)Iy)Bz{NLs1BJsauS_>yw$!u>AX@4)>ps7!(wX!O+(`mLkofn!53(e+2=i~W>h544k_=7xkI@ogT#J~@Z_*s<0 zQs`he@T@LpeD$O}&!m@fqgr^b13O4*#oevlh_rg117R^zuPqK_LuQATZgJWQ?Dhhi z(_urb2~1Gt6(9q$6fnF&wko&NMxWS7Q&ES3O7>#0fLH;R?HV3jbF*Ckl~qTP?PmEd zc7t;9RM|!znthLa*RGY6lcS)xnmm4jhzg@)#p+U1cm_o5hKB5uriq zF;g{ywThW44g#Z<%fP+On-6bpzDOt6H(q{u<1&vfADE=l8a4%`BF&ceoa;gLq|Ig`r3GPfGa+wU@_bD5rX^Df+v+Uy6e5D6 zvP|xp#_x*_xRu*&PMfP(KYIvi3<;`SD?h+KR2G0gq*h5)k*71IU~4)>u}mHn!nLXv}fS7JH$CY*XZclmPU`J(*q z>_-Y>d8Bi4Sl&KBs)@khUa*(*BbHfL3f&*ZJG^_qMwRWvLv1>1f_ejRH_4)hZV9_l9}iX|s* z@}vbZTFSpGfHdKbgm4;#PIccB#FcgBhQ_L!#kqqGZ9+H0UfQi48Vlk28e+Sr9M8H=!;$X3}SKMdo0 ziJ`>r$A5JJ>?74A5Bef?YhLPB4WKR-tHLFB)KyeOA{B@U%cP&l-)C1TYd-e7@`i?T zT=Ms8f@L)|WkGWLRV63Bqm3i9rx%NTKr&GzP3_2y&H~h=Y@16nE`C2yT^+#nh?>f+ zHGbMQ;;+$CRI*ckl)bIYPEDm~vYk!HC>EO_!H%u`8p@>VZpjSs`sO{F(e+ zc8zjAw14X6k1bV9$e1YAynH53$dtc3O_yUbnUz7gzMPjR!>7KDy`jtloW(HYO+`9{ zam-r@;`C9ICIQ1?9K|Ki)Hl^s$MiF0XLV258xDJMsUxYhv9Xkoq|3^EzRF6UuN+;W zYCgOxs72&DLR~>Fm9#O)z-vv&TnZ$iSv?9^xJUhCDJ-<$lAGJBD%;yDtJ-7k0=wI7 zFL0xZV;C8?LSPU{eflaQot+W7ghVcsA8rz1*P3FGmn3tYs6y4(z_aLFT%uZd#;R0H zh6x$1F%Z>4f|66!pJy*wH3OF%4LlhB7B1xf7x}2{QT8Ot5K>oA{#0eWJ9zer?twKc zE*vP|Z_W4sF3_DqpvT(!yQ+oJ)wR6qzAMIcW=#QAZqb9{{5;m_k@!*2pP> z_EAxxv~1Vu?PUm4fO)TVt;*gO+V!P&j2NODCRX7QYinW_&B?D{ArL2O;V{wxU<1#&qM3O zHp7O_J8waJyk|zwGx+5ga$la7n>Hx{4t3Y$u?6Ry7axBHxv6MOu@1;D!myH8mJ(KkWG*FNhwI8_6|Kc{fj+5i+3O@>_aGEryf*irv#i0)u}(C(jn;%*~Df7BQ#^n=R5+j zI55JrNg|Cjnz0cFr--|>?uN4xxRjwCmwb+RTd*w>F2KA{X^sTjaa%;UcVK4NXzlBv z#L_n%)tvxKx-P+zgrb=oFiC?d4VV+ejlh-S@ffk9CWY7%$6O^a2RcsjRMjM@C!UH? zK=x?jM7Zvrxpn5tK;m`i^}EM2@!=1+Vn7^GbJV9ZyNSPY2Vg`;0qT!!-TLPTA8evI z?I!Ss-;F;2s_eulH{uPgxFpZz5o<0IutW!fX8}_R?r9yygp|(Fp((eE_+tpZB-}9z ziP0#Qh|t;m=CS!~r#qCX%Pe=bHM99vt1Z9ZY_nMZnDsT6+wGb?l2z;RI137#9t6&W z_SwX4mB%sAZQ5W_!>vHBa7_%l7*sLX7JgIT*;(J+&HtC1!p$w=SS;Mq9HtY<(kzT9 z_M`D~_OkLLycJV8{t^Vu+ zqb*mSqlcI7c-{DPrF{HfCJhY=-S&d=m+!AwflRC66aPmg6EGC2TwiR5qTma(@i+sR zR5Tr@MhW;$@~+^zclPXgXI-#<^OlXZwHvo=mWQTywzqdqcLxiyvI?;INZJeI>CcsO zfH9f^2GIRtes&C0xLhSA*aB^S$^NRMJtQzbgA-Z}?CKhgPo!nh@}0|T*Xq90JZHAtM23oPWB8H?$~}ao zylUl=f3V!=TSqS*ZC$3jCA_8{#`raBLIZNcqBfLkh0y-dKLjs{91Y(4Hq4%{!Mm&R z5|mqurGkI`hv21hHFyu7U3ZoS@2u9vDt;@K2H?Q~|E(l`Gf#tGVGE}anE8BOE|xY_ z*BCJiGRayquE{dxyMv~A-BwSf+ML`5UAD=TuXHGt0jIAZN9~FV<%)754hYnAL=)ZZpo`@$iC0CZSCYA=S5RT2Tt2?)S+Pu*TeZaBH% zr?fvX52=V4CDgwJ@lByXYglQsmlWEw9U0RNHNoU9@Uvh+WAlpK{M?|irAbW$deHMf z`dng}{8TysFO5EDB`7IE*Y+0yt6ns3G(b7chJhP<<0P-ahWhaz5JJ-3y z{=U>j6LC*QSsRFEqA3{ksV<@n8^ZWw7^X!Of7kNG6V1Pugs<&Jg<|>RSC~Ybd4-dg zQ!sHr=TIPWqSExm5E>6G40G8)Mon2+O~!z6WZD4KD_Rtx*g3GCZLZzd@=t46`u?vqfbL?Mk(;z+=w_I0v!5@uboRG|_G+4NVl7+rni}a#c|H zgE_zq$ZdfFJ5z9TQoP7qW|If>W##2%`T^Ni)@)UI!?2;DlHV3& z;#O|6c*`9*Hm}!~<0$u9uH%ei8u5!VunjMORzPb)N&$SWNU5{E9O~2sNud-@un2^QXBuW0f|Zp)Bs24-W*a|fkK`11JOw$C z_UnmhBzQ*@z}_Y|vWJu&FgJ2;BA%)RNJ{0TBv;hs))yP+?VQ)RNGJPhJQiJ3207wq zH0dm!8oAMT#u>i$6?yJbn;A#JTFtgnH=X``Jw)eEfe?}}WW*yA8XT8_3JOO;%W28F zQk(pI^WuvaH!su4L&IoZSw%$|l3~FH2bQ-skqckn)RNx4HP0)tU>?&6Mc=9?4$KxZll%g9X*>y@b$TJHG3BJ z_&ivEY04|MYKb_&JXja%r;y_`B_Z36m8|m#LnBT9ep^r#u+N@n40`RRHvg^}a;K74 zSmv&7lIO{mynK_=_NwD0)U*LL{ZOrmwDzfL(k4D69QkT%dTnU`n<=$j*1yX)skWIf zIbKC=2jvJx-(1vEhD`!mZO1T?FX41di!56ENF)bd5X_3gsS{n75e^vNJO>n~ z$n}(VJ1~~gR|0S>r@c>p z^Z5S#Jkt?mdJvgt=|yx_U3~}}DUsy}v&7%S%i{?5v;$$9(lgO9#>e-^x9fMGBwx29 z$n@Y8nS5p{M&wc;Wsk#RKtRznraEOIL68M4($ez2W{xEX8hWOMk1`lIed@*j&sFj7 z&_6VT{-8h~qEp6rQ>bVXni}oVNc`A>(Gs6}B?{(^Cj@XLDAMt92aq6k`e*Y6YB4d; zs-f5ov^)v6f}#}l65s)@toWaRpv3=x_XrAn@Dmn@7<_<`t`xAQC{+i}cUHZfH>g)q>r83A z+A%s%=U>q=D-(6o##IW@A>1%ECtPu;ByD>TXNHOZ9<++7q+D8?juKa5X4 zi1mCB(=soSA;Li*nw6UM$k=mG-}oqtfmzSH&8ewpzOD4147MYKtV z)}i1BnU0>jCyN0h!XTIo8HRxW8+Vx@~h6h!Rk`4hZQ-~m}vOU0y`gUd70I6uLQ zBo0ixoO9rb(JrwU0Hv}W@gWx8e|*2ZOR#h`FTpCTM7&waoG4t5sKpY`7R72q1^gdJ zjX(mNU=}L#)VNxz$V#Oq1%;N87kP@D-Z?d*P~l%dD@X~%254w=iX_~Q?bGiT*d;pS zUr^aXOIPVPB|k_F`8kT!{1kvH_4H`L=hZKXnj*ZeUc&jtUQ8%$slo1#G?v^dTM@UdMCXh<2(M5w(f@FvkEnoE&{cymRy2%sq{ z#^;~7vHVk27z5&zwyL6KV(*e2Lng+>r2&08R)Rqa7K2~p)fL5pdPC6$95v(6;3;bGJ7Pl#isJ*56P=)Qt>+Vk zkV~&9ZE#jM2}R^=_c8bu<5Komsc=zQ zrv;15zUe(jvl-zFCu_U@>HSikhoL{KPo+f zPaaf15sDm%`P5I->?`SCWB#=QTENik4^-UE#W|&G|7RsY~p~!K`?P023D84(ucr zx{YWD843uYVkw57?+0q&f9)&q!4YmXpf1@@-Jw>kH6n>dtsKGwzP59kvV$0pjQwyQ zJBnem3joA_rvMuqo6-tCe-n++zD}3()D=lP1J^hRB&Jy=h_*#5G$e?%HB~27o54En-Uh7}A1^CJ$x@%W3NDC^h{+0lJy5_|8|`6(7K6eNgK6X&88 zqD#5rr1l0MAXt^gX3?AwO{LSvJ9girGo zF~s=iT99KpLPUfv(PWz7QB+*SE=CIPTpA~$JTf!z4oV#^iI!=aw;1^9u*0xT_7KOF+1L16*THdib11^IDvPeoY1}ua-gLO zOek0(Ac;m)#z6}x)U88=01Z|m7q$KB5T?03wV%2~n5QQXB0>Eq7*!-DcdC$~(7})v zVk`@eGI0_?lLtCJAvuZQ-9%l*XHGOKk7&bEU?7FR2n^%`JkjMEj}YSCfO7fbF-I*5 zwEM(>1*mBBkvL|9ASle)Rn{X$EeDrG66ne*#n67*u#l7}go&g+L5uNJ5jB9^%xU2; z9~Ek|A;F#mtL1~61^^!fD%a&iLL7^abZ%HttEMHW9Nxc486tL08c`ALpv*%`3XM61 zcsT0#AQtixV+JTp(h+qt=heWbE}@qao1^V<)Lir5#iyvu@o*n~zUhbJeWAzPbgSrC=lnXMTRo zwEd->3+m$ARl5{f`$ZANCPfi6L>sY|3~qubmXO}`MPDC%OodQk`=_n>Je8mtv_%Q2 z?1+NJ(f0^}1OblRGX)e1CJ(c&QlVfJmQ%CfC(9sSD>y7-%SEUuHS%#42>MoD!Vbo_ zt6*G(A|w#z66FdmfJheT&nnBPQa^1R9w ze|zU@oJ( z&GByjA09Q-arJwObzLk9(Yh|-hKu#|C0mMle|$eQ2{NS${7q3%3`6&Lq9Ak}b#;0{ zR$dTkLy5(K9bBVNUmU<10w|I%pz?*0DHe!nwF5blFu{H@sU*q-h!Q0MCR!7k2oo$5hWSSB_$I{iY4*w-~M(Y%kvYn@N$6474ffYnQ+|pgmTnOa_-niS|)}VkLi_Z znNlEP|9P5B%BE9a)Jl?R-98O$wIrSEZ@<4Gwn*t6rMVhs^X^ z$ER|I=mia{iL~c*eDkyX97m_a51Am8mMP2vW^O!ETF7`L!#pxY7BWT4xe5CMS)s^~ zFomUtn;y7fNEjg|Wl9<$G>aCMG|5&$W-t0d%cO!uG2F3GpxPCfY9C9QHO6{jB|}WS zL@UTM3#$p-m?l2diH{0p@s+4ztoO7P$@rGOfn^YXVP$)ftjH`p)~ny0VviD#k+p;2 z(ogyT5IrhCituODsMFhK)D}!4h6*AU{P#i%-|0^eW^Hn1uP%2>3t1yu@ zQELP_N{FrkOqJMJ=98z%+y5DYR$fjWMxnaa(pdv*C2^V|Ua&=Y!4}brW7t?qf$x$* zA^s%2&!69w-sb5!(q^8%CcVPbi>2K>{h9PEPxnh#@bo9r<2*ekJ%AK7!}w0|wkZM( z#oMMOo>HW=U9}P^{a%NZey3AK=($aO?opoy)aTji^8)pG6zSUhhom#H(eMhS2l2cg z>0zYw{1x^2>+17e>hpa_364`p0SA+jqFzS3p8yA=H81?mXfcR>r;UB|yI1`^s6L0) zXF5oRes5NvJJjc1^?3;CnfQG!(#=ShAw37_Dx|xSu19(?(yd4VH`|F6?O+$E&zGvt zSEy`PwB-%U)HPAE_N?%E0EPyFuhJztvwE9I?JpHG*jwk@^n&8PY9)(PdG?)%fd zmuKXNYI4SYsolvz?QW`f+HVun2JOYi+-O-QrXTakC;93BIe@X~0*4D6mbVGcf)t>d zjtFbU=~&_n!VS_+>0)W0^hN1w(mm4mq#r`sy)3;U{Z9HTQ<#Z4S%B5DRyKo;u;pw6 z7GplgKF%3HUbLBURKH~`TK84 z-{H?~tcRzEvHni7IS1?hlki_|hm z{*F>Tc)tSorAXHxU4wUYzY+H>NVg%~hIh5NKM(hfNJ+LyNH0Np34S9uuE6~jDjX!k z5956=-hUZ&w;{a)@9x06+W^~sJpUZeKgaV=k^U6v6L?Ru?NQu6g!_ZY^D3TSrEhTm zrdrMkygPw+-@?21aQ_{oe?a;W(vwJ^$bX1Q$V+N2-Rtn~=SZ{gE(`CT!#ypj{R}DL z5wI|X-e86J4RtaP?mf6iovaS`fSolVZ9?0C7dC+V0sM~o81Tzxt9c2>ly?czCCE$n zz$@!Px&|qI3!Jiz>bF~QzZLfxc)t_(JMqnK^!bH&{tBKiL;7{31k+te4>9euf{X!1x}>T;`v$RrE*@tJ(cq^Qu+q?<=?!Clzs z-5}Z+X|UV$evyXMG&KgDb`RqMzoq=*4$G6c<@yD`)4oooN$nv-nuIttMZLwRDK8a% zpo)-*jEd#Aj+D3Q_ja4e>qz8nO5P^#n#xj2FivqFZA^J@z6uR;To50l)BVM zEv>ZC7ZDrI3dM&!%S`dW`qZpk>f+wX>vqupSy^75wNyL=)tom^ES!IFRDBy((>7jZ z4&Vl$95xT`ZR-6QYATK&&CY%#<+u8jZ)Qx$Cr_u0|3?3{(tiy&G?TQe+^Sp@Wy{Ph z$<0J1xfb;?{ulAwHRTu7x|A>YW8AJ4$#M&*?1B#MMXPqxh(1DfRs8qt>=KdBqCP&Y zWlQF#+%{WPb~Z0i%dbA}(ejUIH+9;LTYNaIJtuz<5Zp}7LX!m!LiFU(o-!ug1V2@7 z#HUq{0>=p~kJ5=$+F{&y{ysmU>hJu{PjAOD>&TDO6Y#xya5t;`zt?Sv^M<&;QDw z)$>vD{1g7H9sr8xpVG5-TqT~Lq}^svfF!vGib^4NLseip4*^YPgDf%|WJ$?GsMUkx zjU8vGIoy=PEhS$R(u+bmNnXvN9zM@s*b!;T$z%PJpD=|oCi$AB#$OVrW0pXAmm+Wr zoSUOD?XX>O=762{IB_2_C53Gb_Vif8{SBUo*`0&GC8MK{92!y&d0`iA(Yr(ajU_pT z&3e5rSaNRsa`t{aKjrWjS;`*&gFK4!vI`N)fs!}aj7jH3C8pvbc(wVc%j8$G5&mQ0<|XwE5}s`)w2s`j8982h=yB5y(1 zZ&~VypO7!ml>*WdbUp>`B7Zy)FTR8yo=ZWO#9fhk2j5RPpmrFd(Ll@*z^MTSJ5HaE z{M+^JaLcrouzTCX4{gV7D{im9K7N9^I~R9Ul?5X+8lQgs^$)t1bXJv>HS|Z=BMWel zg)DWCkID|^CRoj^h@&Fxcw{&<;t*BZ7E12Qw8PmT8F^Gv+R&N<(lH>-<3}_bB?EpD zE~#+wG)Jrvimeb(0uFok-se8J;q$t(y@#&Sl`$AK;#aR9`#O6q{`FTci~HH~SFW5i zB*>6=LSCZF2XLvLmS!`98S;d_d~7rP65k&$mv<;H0PIAx>||JLip$O5t<^ok-i;TG z$aSyGm36Xi?%21u>GFiUEKxd4j=*?beWolg8@pXzhN^FrZ$t&hQNjAtSDd|mFu&M{;Y}!%FqF|8409b4@#i2CT&xt=Z}977 z00d!8lnZga4XocHNqTH%)bGOe0ZK$_01GpoCt*T@>qbe+1WjZfN8wjVQuZjW`*5aT zF)oywyIhh?I6d2RC9dB|=qqUc-@zGWy*OmP3fDW5WW83BZ2wo1?5Nv*6E1vT(1h!# zBsuWx?85b;Bo%&7l3ce-lDk=wiV(cF=o^w$+=lCJ5a&)w@|5FxMv}Y@xCU^oz=ikT z{kU$!h4Q@5;(Ak(d|;!#Ur3T4@BGi>LRRq>OM!>7ui*k*WzXSy3)f#IDTvV$EW_1`Yd)?`xc1_@UXnt17aGB}4%bDvP*wxStO629LUQ7bja@ldjLA*Pl8%l0N02V)WFF={R)=BDp&(QiWFj#LTpm_ z8c?4?@+zV}MbxK=yoxH}NH`0w1L|Hx-HSefzeIYoZSPNEqe!2vVOJ;x;-k-c_)Vm^ zBjEGmet><8v2QWQxJX+WI@P^SSm0Obul0?>6Y${92d zei11-AFz1|HZQ^ECD^3H&9p?^du2>;>cDP*@08!Cmkid7zf1gC}Mcj8}Nn5XzDSVdW_D4I|2KSUI)L5 zjOhfupaR~7??uM8h9ndLZD{ONz+Yo2e=OyXrTnqjeeCBVbly(jhQkWdBQn z_Ow6kY5(^DT_?8%>OL8tPu>q^!-;S)EQKe4Z4bb&2Tp>+;1sw5@WX++{9}=WZiUC- zZTMQ`U<*4y8nDg5^bH4N*MqU^6!e*bK2t6P_M5_fQ?T8XZ$&B}2I8y|+h8`Cx-DSe zspK)0Jf@PzRPva5CE$yx&%#>xS!7y!*a`Z=D3}4qz`1ZEJPPPHo${*g5Seiz{3bG! zc%Aj0NcGhshhX1BYei3>i!3}?lm!aQfOGGY5kISDI zxdPi?$-Y;9EOHgLx@rYH4di{*k0OhSrN!vC7~K~Shp8eYU1PS z9iR`4fa!1)oDEAwu0fY;h=FSb@WZvcLn%yz8aNp)g=Hew;g{=n2K;p0I5-66!-YV( z*HP|ulzZLJBGctzxvD}dO! z^>FwXP{ysq&uz5T+p3@u7KkimzokQ9B0LVX)un8A`$2&Iw?6@twQLMb1#G*#2=K}B z4@FkoEpo>+_)g@`V?^!>fq1$LU*A0wjup9wwtX*ky$?O^?}+gI?@E7au` z;^CF+f%0CVuCKNR%6}CfzS;-S;nmyVA$S2+!&mT^$ZH*-8|(oCU|%>8=D@LV23#TX zI{Cbg{a>Fb^2WB%L*z}qzePE3T?6>@ZQA)eTR;+e0rB(B2*5}0)WC5f?`{b%z-p2A z_5*Rt)}A4EQ+j1ONDS%+Th&}$ufts{2UJub3- zsmMo^|8WFeArJP3heb9_5%~mPe{#3Tr`YV%b3{ISQ{;2<{(`c;oDRQGkg&W~scoER|+aE=~YYX`3JACvVKKhP2eP1T>Lu(+0f5eABZY}at zF3{Kgd^X^#U&g@(kzel=`HgkI6~bw78QcQI%kLdU{vcldxP+gLLhnD%6ZtEE3poGU z1)k?}#c23l43lAuIT#w@G%*2>fCOiX3HO4LPz6WBIbtklXHj?H-FwkcV84j{qL0NS zE(gxRS`C3~#I#O|X|tc0w&h~l?Er6xX+KL$haG|ZwH~U&$C)x1N&_G5WFU4t5IUMzDUeA%6O`aP!m>IE8#Wx81V4{#LEF)VGq~~M#D6q4IF?i54ZrX6LTQ- zJqQ~dgsulumxF&2Go@BcC3T;gfXP6;rfm(?Vy2_pbabr>0o`XD1n4-k20jxrYaA>Q zQ@t~w*CF`vkV-L!A`eBk+4yTtXP7IdCJTNLQ_K2V@~oxI+EwtSn7Qb97%^Sf4X}Ov z%VHWX7t=_2hm*%VIO0|@M`EL+*zf51Vve~?%(3Wk9O>iHdp^3(#}+40=My%FIdQp| zlc?iKd_Rf&Pr?Q#-63Ydwtx>7p!)*yTW~I{fLGyrG5_ie`7j3R;9OV%ufq3YPU#H! zVouG2(LlbZJ|Jcx`7R{A5T7n2rWdXjvuF^Y?`b{ZW-+JdKm+_N=8Qw(1i-Fmye;O; z0-(NU5hrK81iy+odkg3TL&Ti33lPiau>4%=b?zBJJeT^%uVge~GzdSC|j@>r&d_rL4R3b1|3EzAwY4m(d0;r(T!e zFXoDNFcm2K3fjpPe~7tq0Ne;`#9W09t{MsGc@^a?-VLz%l7+BV%+=^~^`By{StRD# zTp-37>zV655_A38Vs7|Q%#EzS=`1lfKPBcC>~tIUSlR&|6?6OHVwTkcx-K6J#Q5@h zI0@bmvjQ8fI0c@D@5J1(H%x$;Fb`OF2e!E5VW9qZp!1y(Yy;?XXCaisc&LI#SO6D@ zx%&-3w|j`~d-ehBc+bUvUiStt814~s-ySd;*!Mp6y^nqGBgXIV3#S5Y`hhNhogTPT z%!Atlb$W26n1^V)4_z(h;RuETc7B+)@W@usALavgf0TV5MZZTWZzZ-_c_7Sz%YeGC zY!dTWIh+R1h`#wDn-UMRenKAH!m}iFo`aVa!o+EyqFM{91yuh|E{3PZ@ z>i1GE91CxVd3g_5Am)|UK%0NHCs3c)(DAh;VqWhIM~Qg@`3B$LM5nhb%!22{yxj)& zhUH@3$pV(Wi{0P7Nz8lb`)`ofdshKEzDLZzPd(qi7SL@q_FBDC%o^gGaiaNvGC!am z9~=S~!DH}^n6+Jjdak8iuSKV|&%-ZbKFo%F;Rv_}u*Zi@V%F^mHEv2q!Q5KleJ<#-5$ok zneeQb&)Da)k#GT!=jT134rmKsV7D*O;fovLS215=!!OT;)ndM)9$!s|r9ixVorY;Z zIbWmyH#xxfZ>|P({}vxImNnnr4cPI!JUAMt+jr#seF>ZbtHk`!6)J&#;fEi&?J^k7 z0@6RB!%yeH&tiT)3@GcDIY8g?%lBe_C6<0Y67bEhuZa1La(|<~za0*j0qyd)kH!4n z7O?s6`2Tle>UZ?|{Zlc2bOGAb9|yz9K#ctHBG3;0#NL16_dllsy8d}9P{yC=^4AV9 z5Lm}s5rW_y30m(WL5CyZa(E0rkzk80fS()NVk)qFix*&{1RZms63*R37q-pf9#9s) z@Q~FLdc)o@0cHa4j>%=eX2>A}11da^E`$?t=Bn#=N3b0?nW8X!Y>qH9lH1T#i5 zq(}0^^>DW8PI}Ln27VAPPX@A|IHXN8i{crPyWDrw2Cr-+Z>>R@_!C zHE}h{$8wuKgRs`7kJI@7_P=__eLCT%%|CtcTJwjC!jxA+{d?f80sq6N=fACUc_w22 zmk|T{$srf_=}koZ=TBD4@(dBP*{A8#rgzD02)PWA1d;TgKN?@|v&mALGQ^yIG>6ST zO|Q1-)T~>x-0Hus*^}o18+ctr1D~mU(!}uQp8-UB-rqh0iSYmXkG2K(+2miBYL0A` z+J1)6o=TcNCeB=)GI49$lQyuY%)ycY+oehGiZ*)^&6-PpzpdJD2ij^rcb%0Z`L=^} zZ~B(?`>^#^+>v+o*Lv=Q-3y8F-Pks-=_gvdYqQ<>ITF<-L+o=Cn6>3l9P3d^F8}@0 z^?z8mX|K`p-#;T+r|j@=+w9o%UA#>Dtl8B00AhL&QM?cBwWDvHJyH*r1`OANv`{iJ|9y4sKBV~g#v;8y%d&QO*V z^Q{YeRAC~G{bF{D9 zmi>F9ul8vDuu+n_m9uXb?63v7Bv`L)r58(gV0n?Z&F*Nv56j!o*B-zYT4E3O>O!6R z%Q))OIgYk8^&83)yj#$hyB=Qqe?2N}8!s6Yx4|U)j>e{0Xs5kEg8j?*t`WIw(+~Ve zb%H#GvVNGPuy3v$!T$iu?Mt0B$1IlTqQwxF=A%QWIG>?$L}_g`e#&GtEu#ybABhKc zrQ}}dI*_dk<7NNb<@d%OyPKGJn$J|3$*W<;;=yNWB^CUyko)9zd6X8?pR|6s3LSH= zoGOR&B=bpfl|U$^h1-rfJTp_xrKeWMRz3ayqH^xSsbVueSN0)?F-5 z$mMdKEP<y-IZrPTFYeqyU3YD1Zw}j zHQv}V{&Z%0O?81SJZ{bA{|i~8z8VMj#wqR7o&WYjY7eO2hDrsIdAV$m!|?SWJaL|U z&0D0hV{5me2i}7oVSBXLhnCYJUYaEbqWj*={PN$Meq?Qb`iGuGt{ySAqlYMoM-eL1 zd^$9(XDrg2N8Hxa6Bjo9tRu6gKj9DQ*z{D>`%T|9y+iGLHGLlE)*X#B2G__PXml-~ z{n2WTH1b(17n3>`S;NubV(fY&UU-(5@;!kSkCjX4Yu3mr`kO|cysAOZi-}IH&6kQjQ75?+-zSo?;_VV~Rl=UMi>km*9M7+ZYG_nR0q-Ou+Q_#OFaM8SOGS^wAaU!`&Zb<^XqN=3_U=4@Wqw3tXz zz3XW^XVZcX;lKZDdO+X7$4}5?^HHhoL?v&Il4J3}aJ3{PA(R#&5`dBK}Q>JL{6a{qe&JJe>KU zL~OH&a}AMUPMU)x-=tXDu2q}RhCyIc68sWKpRjrVlEI}TITECrnu4#J5?YekatfEA zbiG;2BV58--I}~(skO5r?O%1v^7vW7SRb9w%Y7D>+xFM9@2x1=N^T|MifQZn)9V~1 z$C>$N5i?BAGfT`eUYq^CS{65A(uII3O$y%fo}i%CIp! zDm*S+6rLWQ9WDuP3YUc|!xzI>!Z*UV!gs>=!qwr2wxiwC9&D%CMth#U%wA(}v3J;e z>;v{O`-*+XuD74rZ|o1<%DN5hwr{sl-NtmA*llvR%eyV^_CT^#a?50wWOj15WWVIl zY?l?d#mg&*{STD>>k;@vJc8$n0-n1 zjoGi|NKTlO$my8VIcJ-k9dfdAcFEZ-r+3bfoXVW4?m_oX-LrGA%3YFsYwrEIPvox3 zeLnZ4+;?&}^w_e;Ha+_H7}TS*$CMt^dd%o?XwR*Bj_EnQ=O?|k>y^9q>a}olXG5{?R$a+fx%2<{0U;GyA_!K&cp;O$^7FT(5?ZWngPTfOjBaf`PaVsD*{ zx6TaD39kun4wr|Ig)jfjTVgxew4G|}?Ai80yV%}rm)g7S{q|A&l6~E-vm5N!_Itdw zH{KeFxAtrCRwCIxxot9)+$ou#9GD!FoS2-QJT7@A-dddXP}U1stFyk!`YZNU=Tr)B z?U~BQTg9pVcx&&}+*CvA*wp;g8L_vnNnMY(Zoym2Q+KBB_1@aH#apBB*4cRLWxN%{ z-r5pxZJ(2D@z#`_>9MzV%$3~5xi{yo$bArRJ%hL2##^26R^JwHRrNT;dus#U%2~U3 z?Xo}2#x0z;!d~%Qh zba+!u(;Rb{rh~16t%A-#`*wf4`Z>f6&qJK=knj=hPOmE@QlC)?(=SVeZ%|>$8R{|ziqp2 zvtE@u#^cs6(k<6d;g0gykH)N@jNB?-!u{p-bJicS{_6GgLhG+te>MNFTYvfb%a9kZ zKYRU2+>5?@-5u+z*H@GJ7&fkZc^${Pb*HXd!2dGMW!=Pe2d|sFu87puA3pctT#>a0 zeb7eNaOZmiye+c&fi*X+Sw?!{np4+Qt~r3znAJC~p0s+(dmG-k{f%358*^v1>)h)5 zR+!M-%D<<9Uemm5)@nZC<>8g#V&vlR;qXzS{fTf@_RUxz>2E$EiFZr=Lu(za*awz^FJ+tlCJx^H$T+r#c|^KE}yY6sg9c9b1s_p|%k z>2`*lZHcTHEMdX#!*Y9sJ<1+q7un103VWx0*1l}H>u$e}7DqQmw?@k%?wxb+SP>B? z5pfcK!xGW+(aZb?_vhB>R{9sM^708MS;8{{5mwi~=%e`mI#TOgI{r?%v3xiFzc%_P z`jKaS14y_vns$HD#^%(2kS08Ze&`)rV)qXZ3{MMJgm;7w+S>4>@Z#{q@ZRv`aDhGC zHrRRLLXIVOhWCee*`vdy_O0;l@V@XKdu+6Sc&aVOj)QDj_(1rG{V;shb_p-E$A_1M z+Ebluj|x8w*V(u2sd)Y>`$@RgZXaG`53mQ?gTh6eGxp~Es+gX50OxCC7y}<92h$@T z$GOIQ#+iRGieAF`#5Ignud|17*7ORa$JZD?el36UI?aIjoz_GqVcMAOP15Xab}_s1 z&W538A2ZDCYo0Z;OpU2E`nujaTW9`755L4*ZLT#Bndi(S($BP#{)Y1;(_Y4!EE#7~ zvLEBp@g`d)nC>#!^pvS)51D3q$#j#JDzm3dF}ulJ(@zdF{iV(fka{yvjxeQitQjIF znBj7g86gYJSoxP3B`2G4(qvwgMP|I5X7)3j#hLx(Y;%B|WhTo7rc%x~Q{)m;C0Ceg zxr`Tu&XJAgdAZ)y%Z=tZxxqBZ1LjnD&@7Zk%p!S+rzsvcXUh}j99d<~lPAr&^1QiJ zo->!o%Zz1SH`mCU<~n)HTrY2%8{{2xqr7KsmM_fx@{M_zw?+J9o{(S6D*4$wX)ZQ9 z+6u<%E6jXZXO_!erkyM>BjqNZ+j!U9B=4JBWHl{%jk!%eFiT~m=_(CoFS*$qF14mF zkCDxgfu^mDFgwWo<`j9#oG&jhtM(Q1j(L?=oW5?}FmIZ-%-hVaec!A$YZw82P4D`x z`7YRj-r+OzB|Yu;w!7Vp<6XXek&(y-`;q%Q$jh!IArd;LPBx;OyWWMqlS~M8A^b`BlMU#$exv1A-sIfx(aAUcpb{ zpy21QB={vP4So&Fg5Scy!S7*t@JCn?{2A^Y{1pxfHikokrf?sQ`olsK4iAGc4EGI3 zFcKXZM&YP15snU9g=50j;n=WEI4*1(jt|>~`!S}QV7uCGHW~LyyVyN!FCIwk#)F1KkQVJ6Bs=0G`@@$Y%&V7bstm5a?_;F)5F_hHgS#2E z-4$LDUKSsrR))8SXT+nj^TM+jOP?D)#PMozw9!uHn6-*=_44rX@JWtdAK0Amv+#4< zljFt^JDj7)I6K;o2@eQgvokq{%weoO#a1$co5oS4isQ;GTWt@qhuVwnCH7KA;Mdyg zIF4Llue4X$h4vgq<#TPlJ;R=4PvjWW7(N|76FwV0XHT=IhgUO7yv^QbmxkAd*V)_c zvhe!w278xXZdZgihBq;izmrkqEsPNFwa?od?PuYwjO`z@kK5<$!}d|G0rI!gaM%Bb z5i;d5$ZSV=3NptLo{sG92;V{OvOigfvCnEQBg!dxTP)wc&A^So<(kCPPJM7`e0S?=M9O$s~ zkb1`o!iC5|j*t-DWM+48R00rqLjy<9pPO_EgS67$b%i>Qsfke)jTWV zDA*BnI|%Pa9^(k_Lmul0??E2tu)1uqBT}7~IKoqrS37Ju@*0ONMPBQ$gOJxbY#H); zNB98p21ob^@=u(-UHq5ea{=n)t;}BYdn7Sr#&*^;OaY%kb1I^x({$Imq$uHDP&s*cW`*T)RTkMygV0XJsjHSF_v}=LGJ9}iY<@1dWIu+b#TR&M_xT6kh?p$mdhir9`&i(2!wcJ zZ0;C^R2u;kq!}O-X4vOKAuU)Vu#+LVN~qc zAF1{Qy}r!3g5vg%$Ww_dac~DmIL~lQL6$kVHqT?N9*u`` zhg^ZI@KhuBcJPA*Jof6Di5%*ggWSiV?a~bMJdaf0fF4`4Ux?8d7~#-k3ug|FX^wM|QyqF7V4Ur^6gl0Y#|qBo9O{=D z4m~y)wY72;%yP)pN9u~r9Xv+?o9EN1%^ zq?dR!zuO(M4!O*;9Ql|d*dF#P)Uvh9alE)7{BayE-bUYPb^LiDj_Iu4C z?;_R5if;3ULyz-DeXQI9>Q~TXzENK)w}Sc)^!RTyFXc8+|ACGLjOL{*1+5!!-;>7# zJzbF-9NeGd(LayY@pFfc0gd`zQJ??l;LaM4*LnIPe|2zAmPhA2GmyVKblh$J@U%t# z=@9KF)Mv^Lu+gDoIMd`gg`xO%4jqfBKVqMpk7OT(`-2itAH`gT?Cns$1!WGsj~;l` zKf!2++A$ad6WJF(1(VxHT<$QRA+LZd$@5F(RSxq#lGqNe zhAwcer!(?;xB<2T;#{%W$Q2IT9eIbt?uNX_VbjQa9X20%pToY0d;lIKpO=si!y}~C zwksW$cn?+q{i0PnzYMImuOr`fSmH6zbznCjwVq%y8JM72EH4aOg z33MG;_5X(sn~Nm&6}vl9%LAK-)H1;K;XFYc7XOCEVZTBK4*M;VjTDQWL+h}#2|a&S z?9WJisn}nUtsM4GWNU}rh-~9v7YS((N~C$Wb3~e7dq<>sbaX_zZ6`;hdTr^5bX$C^ zL|Y*7u@dRF+d+!7uI~;#NOwi{bVRJ0YbqXao5_zU0(7exb1jiuHb_CZT&w(Xue*jXy(;o+OkXklqI}WuB z(DoeO3g{ACid^Qwz!xtUe zhQpWP6_#I!e8ZuAL->{>xDH9XQM7%Bv=v3$c}N>kf*X+^Is)oui8)I=#qELkuzQk5 zUv1}B{nP$#i~{D7=?gaeWILkWIF;sYhz3wgF9_z8)fm2eR9Tt`5A zvFAC$5+wChf?tpqIW(p$byk93k(W5aG9*4wg5QvrIl{rn#g5>2B=kHSjw43LjG!hMl1Il>XhmmS&g{hfG3tbeLRZCx>2VOm6AWbK>N-4xVL_WEY2?M<%JK!jn&u%yyVTNG${O+G0}k z1wH3uwrLDcaZXKJGq!f9LL$BK$LuUvim4h9Z|c^jctYg+um1-r>;eg2_7_JR2yQ|5%NcAP?wXx*=4w;EmUxHpIOFrn3S;&VRdd)2PutTbmk2v)D zSyKHCatLyzL$9SJA9L{RrX(MC=ykQ^6AmGclTSMI8e4LeLo}{6R>1T@YJ7m4g4CD* zy|$E8-vdtrOY%8~8H0S@q4zVAFF5oXM)F06sDEB^=(UXG%MQKQk$lBrjzqrd(0d-q z*BpACBl)^R)Q4|4^qNQVO^2vI-*V{nkL249y*HA4$D!9klJ7e79!c^&htan9zC-Vq zBv(6(w#zjRy?2uQz+tqFu65{rl;npFqwRH_Lx_XqdI$GVCHavC1b9J0_vXimqX9dvo<;cY?W%|h$bUDIl@bkogLv7$gN;& z#%z}%w{e75BDZzuIZUdHL(g+k+rjp1e+F^~hn_Q~x;n!1kUK&*wmA!#bcE+3Q;^Ma z>XOQFgo}|q9C|*N+S3tHk5t-WRsVb_VBAGarV1VQ6l5{IafDAIhdRP1kaHa&K1dzru&R3l97&$UdFog=jx_O}I^JP> zBIm+*gy{?BF*k1Lz$zg{f>9Z6&97#W= zSgqeuhaHQgA4w6Xc3i6k?I?;P z2@gOL8%p>Z68|dUn@DV=gl{16uVRUZ>|PE%pUWQQurraAojrzaW+Tx%dwYMX(DT%s&JH^lxsAh4L~ie}^+?)?V)1`Y(qT_RW;yJM$Xy)v z1mtcGy9n9aq36dr#DQXovz#dodknJDq375+)1iuOj^NP@>ZRBhkewWMK5|E(?C@!1 z3bNVeH2=uPRb02h*13ye3CnLn-VDT8cr}vvQo`Gi#8mDbY@=!7D)%myWB=T{;U1RX zjwHTviLDU(=MrCvWxL!5L1Sz=@?m&{ZSYm@qp*_Yhg@k zYB|q3?DNRy99Hwx@1Wa9)lbfy?T^7EPC~r;?Q&W9@89_I`_a=ip2&!W;iT1=y3=f%5v<~ zb1R2l59mqzQ1p64PkgOdY||5+dwzngsAsS39N|;Q9LQz)iy~_m!__?fNgdWM18kgN z+dm8hq$y|P7C@{g1li<>nz(#@7hwAY^S6Iwb~}h=*8NYNW5hnqW&Ukr#6BhDqGzmP z;><{hP^fH)EfWchnCOTF6YVi!q64-`w8JQgHdrFj8Z#u?QvZa-0Evj&Ct6X>#1`m~ zuqcs;C_T}Mq7$7dGqEME-+kD<(q`1e<;I*j>0Z;cfM1&Eb|14F!-Egn<6dqGr&8tB zgO`~pdF%!E_N-at)8ajPZsvYXnbt-c3$UJ=$zP<^{rhlV<#>f)ODFm zTC_;>96Pal_Okhl7Ij@jJ^XimD(W8#jQn%KAin@hkO!71zt_wkMP`WZ*a9yt)x8;Z@n8gWOeFi z4@t3*#-xkx=hAvBX{En;;%bTari_`m%xImK>FKY?)>5zM`qI9sK-zOxs(mmJj)Sw| z={R?~I?nBwZDZT8t+JkA;Isl zss1LE_KA%?&6^Hdwe{(U^o~BAAl=KSTaotqo7S>Zt1*6g8-{#``*d5`z14+2-A>Z2 zy#73&(yNuX3Fp1}ty6xREu>HD=6q!!12=Qz&>miHB%n>#Q5^kR$V+IR7=b z3UaTBbsRwsb6A>6ZHG3sTw$vtpDISYy*B^OK3c=+x+QlK>qwWvY?kD+Wm*cLA9Wkd z@{y!A%d2Hix8EKud%EpM^1b|T+y8r6sg`~Ai|e7Y6txCw<4vWHB9{~v*CqPtN9}8= zrCPLxy6d_k)++kWjDFO-lJoDXc&iyKolU+|<2(!F?Fvb&7yoZ+v-vhD@=#d$uUySFQ`q}wa->BeX#+6=!fA*xby0}cYkEYckjqItq zRkLqBwf%q5W)!70Vzm^0@5TQiK39$SapYSY%SPlJ%Bf*V&Ho~f8)zMK*=HR4ID2l2 zTebEK^q&{oR4w7QP!AHnl%o-^v99%0>ubH6tu~gHHk|JxF+pJ9`QCCTRv-v-j|ElMvcB#>!Z#Wo@RIl|#YR|E$mDf`j_0U|FsgE@7 zXCu|4Gx6+5_8CIO+#fYeSx+={m!?z zZ<#=99Nr#D{EcJn1lEq>Q^FGs<5;KdS*<&U|7FM##E0%NG)}v96|B?kCn1NiMz>LG zSE1FWNUf41sC^wv>-lKQQ9o7_Pjj(^#_sgE{$ok0b^rGsP7y~g*XDie!QBhw0lGl+e)1FtO zRpYj~hft0FzaqcaKVs&8Ix;l3s6ElHijpglZvQ!?v=+{;szK#HzR!#`)0mmTzS^>? zL5DiC@wOgC_-^*WURo2)OKX|pdG~)Vx%c0etRe@s$W-=<Utq?VfMv2<>1&1tNi6))GlwCzupJ^qJn zHGgd(TJ!q2_ns`f{)e*lIIOyAAD?1N9S6AFcVcU`w9BQ2w5C$5ZNzGtv#wR2YY(aV zUq&W{t}#%Gm_eg(Q^;!$=GHWG~bQV_8=Pf#B+JuP#%xQB|HYkyCVnY#d$WV-YIZc; zOj4f1M^Bq9dDf&%w#hNw%}yrQ^e{dBJiFbPX}1SY-~P(4E2d4J$u|WiV+u_XKc&*g z6q~->g?gSDVf~n6)So#-1I$3Pml*dYCYXt4lG)!(HV5!ajt7~8%@k8(pZ{!gjyacE{pXtt%!TG6=G9%y{JcxdrObM} zocnAW%$4RUony%Tw6BoHblqfbHn;HRfZNPcW}GiG z%gqXYiSkZ!m${p}a*O%loBPcD+*hk*HsFJtj6Gx?HjkJ`%}QhBFj{vV*R$)*TsvU!DhTYsN}_YO1e;(2(q#Rkrd*2p~bfmv%lWVZWy z^AU3fKW5hZC+1V;<$cafJ)N7!Y(3^!F<;Mo&%Ed#d4Ivr%ys<5{K`z}-+A8cD0-Kp zdA9o)^QZaCY~<|*5||(eLVi9c3KBu9pmoqDXdAQ(+6NtiEo4d1QI-dtf-U3O*INhM z1ltB(g6-tvVEbSP-i)xLEDX8@$sj981=&GP&^_2mj+f(Pevm6C1U-VD!Op=h!LGq> z!S2BxL9bxXARXid`9VRD2?~QE=IZweiusN1enJ0WfPBfh<^924!JwcdC=JTwlVEUA z9#jN-b64~0Usqk_@Fm|!eF%QHUMFPOl4CMNM)Qn0vsC54(9M4huUCna9B_m)HCPM%{V+FIFeb1M>Fs6 zSl;k(JZ}v+AviHOiFZ9L2>!(z1WpYW^6rY$g42UD{xJ{ng5bj7BHk}>Ny}WtE8}^I zOPHB>4f7VS1?=5&Gcr|z}cs+O{cr$p5w-~$= zyc@h1ydSLQ{SzMqYl9Dib;0`Jqu}FUL-0xPY4BO_dGJN>W$;z-b?{B_ZSY<2eegr@ zWAIb(Gw>BPEb_&(>Vv+g7@8 zk!O3^LAuJ0;oH1bPPf}j zcb-N{Fei7%cvfzfP1$UlW4kjyH<$MY^t3zMUF@#RSKeLc>he~VH1m`5ZGp|$LR-X) z|_!8#FmoZ1Q+*a7VnJ+rj?qi2BYjj`UJus5D4={7oj%5bv zcxIDMkSn;$aHXBZ`v@kxS@Qojmvm;!Y*L+RT4QUOJ9-%J3aMwNek1es=kcb3BY9WB z(aa=0mU{{haZPT4FehJ5w)5=?_C$LU^YRzif7w&)smwlIq_a$!dwM4KaDI^odFRME zTwBvOJ^d&@+jE(ldcM7Y_mEuFGJCao=IUa*ge$_|$hUH@y;@Q{W0xh_az67{&f|RN zEXH~_$hGlY*Xwy6=p=gsvr})fH}mYy<-CFBR%Z0y#+yxUx6ABuxkN7Iy$W~mW`(<$ z$$AfSS?}YGClA;M?L*9BeS~+Ptc>ThK4G7&FA(D`z3SB zzvlfn-`el&_l(8QkhkSS`vY^$e`2=zFU+7glc)IKlhyJ8PwlUfwah^O&HirxU>^Ek zcB5@#F1leBdKg(|q$ik@-a2Z-y!3X=OYgwU^p4C;-!kePZ53@DZ4+%9b&0l%wvTpb znXjG|rK0R8C+Z&U6y-)eqMp&t(Js-h(QeW1(H>E+XwN7eC@P6cqq1mlR324Cdq+c}q0v6kuxNO+Z!{tr8I6iYM`NO~(YR=Q zv|ltKnix%r_Kzk<2Sf)(2So=*Q=-afYBVjH9#us%qM6aGs5&|%Iy9Oc&53HF+GuWc zSX39)M-5S9ba*r`IwCqUIx0FkIwm?cIxadsnjf7Iofw@Iog6KQ{uP}Pof<8S7DcB; zr$=W*XGUj5XGiBm=SJs6=SLSr7e*IF7e|*wmqwRGmq%AbS4LMwi=!pc)zLN4wb6Ca z_0bKyPvfTO=I9pQs&QMiG`gL4Yb@uz8h1o@Mt4PbNB2bcM)yVcM-M~~Mh`^~M~_60 zMk}MoqQ|2rq9>zO(NodW(KFGr(Q~|c>DIp1y2ohn!CZa?l(JIk8(I(M0(Js+G(IK%#qGO^{ zV#`G5#8!!|6Wb)VO>{|Ym)JhBL!xV9$3(Y8GLe-?C9)GaiSCJ=61j;UiJpm_6T2jK zZB;U-a#~$&O`>FKUDe@LZAJPm-_uni&~YGZ&q%3ygr?uDRBFxi`tb=?zS%XwJvwHE^o=M zRr%(%E%mi2^|dMW`Iq|q%Y1Fhd~M2nZOXhg@?x3JtH`w5do%6#-c($ySAKqC@6BqF zpKhm%)0y7sf^=N}bY5{myCIu$aJ9|%rR4ik^S!qDC3eWv%DTkRhU(eVt6B|pb#*2v zt7tWJ^BR`Vq#15yr zexJ3`ZYW$|i zN#_lYy@TxS*B5)~1EJg-w7e)9zsZp0UiW6VlzXMhy+JE{oqCriCd{m>JiIC~!C7O% zCTp~rFul5}uByJeJ~1iYrro4XD^-cS@;=Skc_k{mwTZC(WmQ~1=Zo@qJ(cj4OZRR! zZIh|mPHVA2VtPy9n7937%BuE1Baps@X+ zGwZ6VYGzl~Os}4nm>v5mF}tM(?BW|k%dWnZf>Jx1y1Qx=cq3-K5iTG-Ny|gomcLi$%r6sVjM|g={nlH z^1;5Iu3zB0FKKXbqSl2=ym?_kRJ*A=80<40>@ywgGcEU(D=%nQyIFr)w^>CCdnf8z zDwHS#V zJ8Ily#&TbSW*?P%<;uNs6~1P@D-!cuuR71!WZov5w3*k^s~+ik)gw2pbgu5xoSj#q z!n>H5J1Wkv?NNVgqV%f1;9?&f#f4#2%}mWLonO#9s6NE?sztt6Eo$yn8TZhu#+wz! zeOEfa(8XbXp?5@~>!9-sV`W(HESFyxE5&zb!Tds>PjPG`mN(1zu*mn=p~%?6NPm=V zjt+N}P3ODlKzcoz1ER?5QRMX~@_H0`J&Jw4MP8pGUv6>iqjY|;FR#e!;SST3($%q(c9ahx7Vk)FTb}hx3@3X9Xrzb zeSA56d^vr5IemONeSCfU`273${QLO)`}q9(czg8m<+wvN`TP3012J}K_M0!S#Ftaz z>*0=-Z0DC3`+B-#YdXKg?U(1q=4{uejmA@6rleP8SlO$xb!8monuue!S7nFFO#!cq z@Bk}7OT^=?TO zx1>s2QiEGk70s#Ami$Uv@+)o0uT=B%0}d)X)9uA+2wQa6?1)M&X8KyR-*j+o-a4P0 zTe|~nbFujp+d-?Ab_ZE9ukKaZmPS9js=l6N>*{8sRyP~9`fo;c2Um<*y_r${p|-i; z!D&+daNAsRS&L!HykR*0d&AIH`fRqx^tR3WPIrFL)zjO?or$LW!s5ZbriZgp*&T>A z5qI~^S`?HumtD}}o`M!F3eckU?D){st1_WS=U$atI?J^5Wj?3;qGpZri^wx7nLT$_ zr7f*$sEqcmoHM5~?&b;zkPy)xLh zF&NPpOswWKs9I0ngHhGtm|3;a*y@>cD#LM=jjhJJtin;Vs>3oERbTCjDJgCnm)}rZ zQ(NEOml%I(O^I=$jTY$EYpU5#?R{ZxjV~bn($Rlu-m>k;IaM=V4pC)X*{RecnyHnI zrdQ2wsBBf`t9leGLS5MqSG8KJdT3nL*>P2!(xqiVO=ECGHN%v+zF{4et&c0)KxG?! zW#>}SX~5U0R#k9&`wpPMo$;j${F!0F;KGPK2;W#oS1qqs{G~N|#R+1u*&v!~u4a3$ zjoZ^J5r66Ezcg>zHr6IywdLkH#7nmR$HwtOr@241Dj4j#(gHVHq6V((EO4WwbV2X( zHkCEC4OO$Ns_Dd*~oFJXabBDD| zp6mWId9EAJ1ivtPcu!%rs99ey%-&W4#h zcbLoMxx-H;->%pIIs5gZ;l7wYBTQoOgiHS$QeIC&iD(3nR1_xyTFjnxVTDZD!ly)e7*(VukLDA zI^#~yklwBZ-mdOC7R$X|3w%8byj=@?z1(##w)1u^@O~}u^>wFf>5RMNh4kfTyk71C zC(C{L?xGjpeSO>s8{d8T8DD5LyfXZ-Lv$pHYC}?>qwK!xOR~o6-aba;n%hGMMDBZ@D zq$yXBZWNb8!WACJ??`l{)%6VmSbRem}z-F8Ox%*MK^>0Ba>t-^)S zSQfhWn_uYq3uNqH&d%a?f%MzCOY(e=+W|6;Gi2-+&f;P}BMaJ8*Bm~zarW%01`0(? zudABY!02^4icPCUhpDrj3a+VgAl1n!=KK!t;OR1GvIlXrF?8>_4Fso;f5rzZbqP|Y;qZKg?QGnZ1$;_Xzkcsr+AoOGJS8^)SxYBQVZ*UdH4@69&TwAW0NPBZ$9 zy4ag>LN(Kb*G!X6GnZ1$;_Xzkcsr+AoOGJS8^)SxYBSCB>*kv2_h!vB?KRV6huXU7 zGpgoP$JtaSoQo4vV^1fhIpIPe;i4-s!!4ZY#4IPOojAmaL!FrI#2hDToNytWnCreB z=0u$n^-j2OOf#n26%iC-J&V{4+i}nENe0Spq znQ>LEOvLr5OvDwa#4w!6xlDaCb(z*^&*ux9(~`F3jditg#(Bm09pZiG&`CE`)*WeQ zSJ$}%NV=pbF}JForLGeyDYnzOOzFP3!(V>d4Xco@CrSHmGwr*}v>RsSr%PP7nfBdj z+70*f^YaSZx|7-&Tx-=BYnWACH@yup7ANZC((>FOfsNxq3exveZjiut*H7lTK?2{? zZOAGPwps1tqm4_~x6>x=)9vH9^j~~A@j;sXU8kPst|_5qal5L+8mkYloLyBjt*QeD zo7uH9tEW}Y=G>=!bqzgaJ$-$3ZB5(Sx`tVLeYLW=uXj16-LQ`y+zt1zQ(N5+|Icoi z+mf8x5bKfe2HEt(uDOg7h{ST;Ot=iicdPaqjdQu13YB zO|O|+UlkWw=te#q8U2yfjnp~P{-4^;1<0wNIy>sr& zgfL7d55ka_A%-MSkheqvgiMG?smnuw70}?aEFc&NNJX?TAhH?}A+pFK26Qn}pcEoy z;TS?TrVtg#{=R?ry>s(WZmsS;b^oXP>ptCm`tbx^8`X`I<|XpN-rL$y_WG`VEesa5=+8K&*N}BUoSQd>aZIJ4@pM()&`AHf%z{PI6%4ZMuq znA=Ou5sPb#$+;r5xg44gp?M3nDzHxo0K_QEZ{9c;fO9ifidw zaYRx3vS|$wS}QJZ3$(ThT6>_i_tCtpX)z++P^YNPV{>tWjsrqC>6Hp$#ftpouE@{)rTpYRD6Ev9g;nNf{!)H&S6pXhD^`?6 zFJ>r93t^>aB6r_)OeP5P@#GHdM($AO&02p8am-zcV{SjeZVKH;Q&VdVY+QbXAp!@d7RUVxOEtH|7Oe`2CzK z@d7RUVL})>nIv>FFnwPxFHmH8FibE@6HzZvgzm>QNtoLuo&!J+`Fjq4Kd|pG=S#wz zF9~zL#B%_aFMTJMggIXl=6p$*^Ce-U|{&4?Z@P*%Z+KJ~E_(T1Bet|#Kf0#`tVK$w3 z!B;-rx`}ga`_{07C^J%i{Nefgbz=PC`TO-^{2_n8P=G(=-x}`UuNy-T_um@w_v^B3J@E428LH>io4@$4tbYT3#`VZ0@8YSp=``D;oxEp#ND^?*2wK}>7%D+Qbb-A`@t7fk!nvA?RB4Z+5T zd9mOeqemN~;pigU!QG+#JrT6s?j1TCo!~4EhYsUeAUhg^rsM3;fZf2AS93V@3T^_w z%Hhxwxet7h!$sfaaFOjA?a&i^4t$BjMXz$W=r0_O-2&bN_j9DtrgJE%p^Sus54XYo zu0L4oYQdw}NyWLN-OX}7jX&h zb#5KF!EFF9cb9`#JIaqP;kDqc?p9)Ma+`49$Ig7tJ>VVypLRb1cd+L`+VuB`^HcQV zoOI$G8gZj>kBP^C0$L&!ZpNyWHL$7T**d0?UwAaoA7sqFVOJYie=GroF zMZ5z1c>Hm2O}qxYD82~niF?3L$DanTh_3*zimw7c7k>`CF1`-DA-)0Jh@BS4UU@tV zw8^%EKZ>6QpTY9GLx+s|M}O?+;IFXV?$8_iHTZ{kABY}U zG`cXg7`W-9Iq3b-E*erni!rQJgD%X_3Yyu%8GzmsI#kP-U$8d1>`=6US#;&0c)`+j z=SSBb2G76X{OI-z4#A$)m#vI8ABvP8g-mM3?%VF5A7#%{u72D>jkKmLq)uTg2=~8% zXlgZK2jOS5@ip$z+?L!6{U01yJ8<#9`v={w8g!)K&`Pd}=I-BGL3t{w*}one!u?1n zCR7$~(0F!eK>NBkZD@00UkaTvdm83*8Co-1(W9h6baYu?dIFlr<9V-c;f*o<)*b9B zxsx3we=R-LUUXD<`~4){U);OWInAMGI+UG#%etkeS^781!;azym50($o&tC@nrg>L zTf0TNwL8fB73s^qhNkT6(vaPQZtOnOi*m(agOeE;-6E+Kc|UvP8ZKSReW-W_~dEgklo^qr;9hv6mOg*-Z)!a zagMm+Tye#Zh%3%xKhfW_E9)EZ!;8fa?-2LfB))f-_}<;(d-sU%eO-L-8{&K46yMt_ zzW0Fm-h<+M-xA+@NPO?x;(HH^@BN4P-gm_JzAL`BO?>Zr;(L#X?|olW$PmAw8BfhsoeD7KDz30UDek#8Ag81I6;(NQq_jZfpp<7pX z6Z+Y&*WHx5nzp{L?k4A2o{`#)-t|!SFyF#4 z8qMHwsi*30V-Mcp@oR+5Pp9i{vm-q`bslMLMQggD?j}pyj<^`klhB?f&GcY&rf0`n zQVZgT{B^0PERA%U8ef7o>4MaG@ha-K7d_}pZC88JwW~fKZzS~j)Bq+mj)a9hD zaQ5B2KJ_Ks_wm04P279D8{EqOd5(wCvE9y9PoYQqeCkDCJ1W(0RlB>=!&TC~(B4kH zN0rq;A8b^5{X%>vxKubx*e#qPY>qb*dV<_{us4cxO>r9DaHF}SuZl7`hP${fixWMr zm>Y!03r`V#Uol(lT9;!l8t1x|!k0wv5PhWF^X1+o_hZ6I%JCPXcMInUj}eYioJH}U zNOQa>LyZ!x6Fx3VL!2XYuH3f;w0l`4_Y&b);pcSKpX7EbXF={2%4LGw#|w{)U({XL zz0}Cvs5mDIi@NJ}#hj+HO;asR6J?R`RK@I6%o(C|35N@33daejC{B}bx^SqlUDzRP z5ndylqpPM0+k__xPZo9x&lXM*E)X7T80`^$S(FChal+}sqOb+D9^LoEwV^*{lt|w- z%+SV5QPlq&(4P1!2gN52Hs`J-G^Rfp!?}$fA|1vDHae(dJTr)qPe}*-DAWFCWbmP= z9xY$%qsIq(CMN`2CIxz!S@am+!(8?n^h@mh+>0fMk;bu&Q^ThhQ@%Fr z!CZ=UhtHyWy^+$~9Nivm=Da1kKX)SMhp>RREqaWdt{br<@-vr5Gxz1_H9~sPIev>B zz+)_%49uPAhUL=OEy?4mcgMPp+(;~wv%;eQKfgOx3TyTtCxGM;9}w2ra+I-K!xjCOHDGyt9A z3DHoriSuan$2`TDacsmhPI%Hb3oB?;(4vt*qA@^G{eG)@{5JLY?dtI-s;{4{HaIPgS2jjoHn>=rl%1M@HAsE=ERQ#DYglv{8NfjkJ;O z=wGqRF*mwNefllx({EL8e!F_@JJf4`Mg8?A^~-mv$Gi($1=_hKHRJ!~ygBa0YR$~J z0oyV2+(P;~J6>@2dY3yV-sV=w{W86lg;{^dzJBy=YuJZ=1LtQLJAR6O`DS+|seQ*? zORu@neSv;bsbO8_Hg_l1VM=L!gKKW)&y`$daUOFI68mQNojB`WCycoq7Gj=oPZQQa zylq&3*$M5JHg>?;$CEa8Ag@1bw9rdBz4WU#Hn7pbXy%lRD5&EiBY-Z#te>CHLBFmZ z{W10E>eE%qjl}6C-(L0OThxPZEA`;?*LFO^-}-KU=+4xS z7P(I_j2;)IO;{A=Hws;_|C6M4vE1znEeKB(j!<6R3Y{m)>2eR3yHnUAY!H2sxuczO zPZRwFQNAE|BUs5l5*IDR zwwm>7SXAI#4~Mh4xurdVlGRiG24=S{NTMbpfjS3y(z{55vPglBhl{OqFTsySBWoFF zyol1o@W*TQugCt@I{GVrERL2S*ZK_e5_ptflkmy5_dyJRd<9N*skqbq& z*t&QF8y9=AYw?yWSiF;d56cxP?22i34SH99rk^>iyA*!#xfK6k`oaEEylT!C=Wzd0 znw4pk;+4Yw(dSb7eP>#x#(0g4CTeL_BWP8P*mpY?Y{Z^h8@6bs@_ZZFWz6tZ;jO}L z!v7J{J_$uu31Ul}r-W=Op3(o&17uUHOg81xCYy5e^ah!1Y7B96jL<$nn?9Nr-At~h zU@vYKE$}Q^7hH?|&8rw$-H5%FP0_vBhI@#S*>)_%J;yGxFS9EL61X$wb(w8XOL45) z)ga!JQM@A`=04hy6`V@D{wTKPmSe;0;xJmf4r?yAMt5S}<$kR9Jc5m$r?JoW0`^g` zR<4v{5qmIZLvsN(>Q-P0Z5?*Q{u!$@*JCN>w&*TKeBZ@aCSxJ9ip(@XqAzU5P!x9_)}^js)WdMlD~) zw$Rt2tymU%l)ZbO!FJq>>|^perHN;sF{?gWc*f~x)Dy?oVHz3OP%InOGnO?=xs$N} z(v5w+h1d{Ug}t`*SU0-{`!D~-$nM%yyW3d$21dr;#3gAqv{Vm3tj@kI#fVH(NqkmyU`tR&@^;Pz;`4(g3$JsaPS?t*T zial6eEtw~YSq&C5FA}pFY|ZQ@ zW;NKBjfq(ewr7VEvkJtrNyG9DRbg|sgP7G|K0A+?)nH3@6)~&9BzqY#tHEOS3&gAj zTeF*q`Mzi$%w`|122D1eeWV&(bJ6lO*{6g%ggb@5^k^T#W?!ua?Q{R^>s8^p6&GfA z^L6d}Vh`UgX7^Qvt1n!YThdbv_VC@t;GXI*pBqWcYOs(yj+oV8ORh-FYB0%l60;gC z=4KMJ8f?uiAm;lcAF)%PRpHv6+$#GP`2EnnLC>wN2I;^Yy%tk&`kx{6G$u=7WNST} zz#R578U$BKG#X=12E2VgqottnFaL~2U+L6e2CC6my>hmKRr(n%3ypvIXEfGoT&_&< zWxU)Udq*PZ!MYYl&Ay+-FVajI|m?B@3i9sZ{qZ#2m9PP%o?Dg(WY`H$=UUqx2 zeL9v|bvG77FOT0!tw`5q8nb8T7Un*i+nReKx2NCCe)sj;+3)TCo&C?LnOk#S4Raf% zXJzh)kc=E`4>djpJE(=fW(n17R;G_kvnot^M_SpCk+IIE6^A3SaXBYCD*Zt$9*#(J zQ2M^yMlkj~#ENQqqH1(30f z3TMSLl(1!yw>%^ze}}PTS@N`?gIzQJveRddb#W6Zjie{ z?wa&_e4#KOG;YEkCyZ5RbGBOdQUa@kK~_F;yqnzC;&$n`E8?_4DaBbviB7;mb6*N0 z%Av8!Xji{c&h1!cIuAMwo15O1Npw{!_-5uLaBpT3xG%$ZEZheaQpnP#hG`bd3^wyo!h40g zGV^i2A$&8lKv#o@T(MAB81BlPsVfZMJiKki%}=@ zuKCdtW|`}eqFl=i^B!iG+nK@bj9y`Ow2u_h#6qqk*UGYsFND&2MZ3C0qhY1^YJ_h~ zxaPhRl^I*On!c#yLIR#)Ws0wECWvNyv(~=vN$+)5NA(Kh$&jyw4Rp^c?eX@-Pq>m2 z_)@uB%d~Q?^y$>0QhBcAvafcO@)1h2AMa%yt;8f}wz@Lb_#sbo0&mrRw zsGV50{#5j(=k{r zZN?^PJC;aK!3yaVERddx_0iL@JUYj|yCIFgB6ljkNA*bR{?@x>T*BU^*gX*qI;qhnlJH6ac_wR9cnK)oldr1ua`*vT;?Bvw`xW2kAY zSl?o{sVicPBege5HlI^_&5pC#aE4;mo3Y|ddD8TeALI30omw5$m^JKZfZ43pyXs42 z&x7|fiYsGQQ=96^}eeYwWL;eYi;e@NHfw%nvrH-JzlW!U>map8w18* z7RQ*Kfb)KV5Rw3aEM8_3_`>$g1M`6&$%`F_1c%?m&%}-yj}wDuTHn9UxtkUb{@$}K zcX##ed+XGxQ`@PkBZz_^*zrH3V4Inon*RC!`o$j#()ZpW2+}8JmKIn3?TL$D5~S}t z1)=r6nU#IxKY!PcPYTjMenAji)y0)U&&QwsUl#>w&$GD8@l!XQIQvrkFWxIii?f2z z{h?F0-xe0W+4v?wdiR&`ee}%PYi}|i_-sXx?)s@9h__yQ;?}bp8-fAPyA9vhU3=r( z&b*`a(4+XyFG%SJue;{N>AE*B;r`=G_`ZA{0Oq3bemw6x_#D6PrrX|Xtv3MG@%IaY zb>POEPn|GF9{8Ccbv!Ky-rH_E@z%3-Cro$a^Izlo@EcFubWPpr2Y&;6ekceHpE!H- zt+)ODH9xpbkUo4`5c*rr-g3=ZzaTz=?}5K?L@)_e+}tO93^>*cR-sjJ3B$r8f-trI zh#(f)9~DHQsd_*L7zkhx4AldV;+Nv3M+D2$xXkvbU}K+}pYG}|+9UQvB$bL;ER~d} zSgFK9lD#TEUAtct=X#ChH{W&FpBlTze>r~Qozlmy+&FOewbw3Pc=pkwZ+XjyFNi-9 zBq0oh`lS1Tj$K$(P-&zmH|kJnAV345at^;~6dLTU{f`Jz;hbPmKQ-7M5t@GtsElA& zx5H9QC6lR`*=%qW9WfyJZ0I{7d!)r^3qSc!NB?QP`of5K^Xb!-oBI22svVT>zjF4m z$1vhkz$pft9D-j+2x|&f+Xy5ORszQ=4$=t>t9ap2!3hGL1Hw)r&R|5ec1AP-?}B(o zq$~CWC707|akZ}^*2=XzEKBYlIjOYyNomD>-j&h1_}a>KsE z2iI! znZoXJFj(GQ$j^iesgu^uwRbKp-nm}r3YXd=iK&yr)l<{BNipApIa~vcJ3!+)JhY@B zcohoM^b-pz?8oT`x|w4sg<5NW@bTaKy^pNSz3Jwg-!v!P|E14;?yHj@xZ{qyL5*AR zxK=!_QP}-D9>yPIzypcFl!>)qV);6tNhEX_|GOgczqg2=sC`4U)m{`Ar2D6TH1om? ze)?WK*vt5P;{W==y2shyD}J>0w_Dp6xR0%Wg!i=Z1G5*#WcQB&Tcmiy+ zQSdWgTv3cR#>S{|K~UPt2Blc3Xa_6otzNf~$?kr`Xr!EvH5a_quFm;#puM=z6&rHA z=f|OII5)g=tzqB_izsQFM?F{Y>wt$2dQXzL9nvr)c{;+wrJiS z5lj#Q0$%HW%$Nics%Vel|BI_)>*{Ll1?m3U^P=O*S+P|60Umn{clkAY?3nUc6D@3$ zPX1^Mg+wGh$OMuZ**gm!M~`iw$AKELQpAN7>^k=O&x@b={O4yR!}Ro(E5r+XH!g|K zOCNz;Q8~Vep49XjPXg=VNlkcCBi_++Or|PsH?g}tQi|9iGel?QhG?&UJ~=anL7j0I zSFFAL#e8OduXxLJZLD+e5av)g3Cd1lh*n`m8RAuz+Bu@7EX-(N<{#@<0jI1+eNN+| zShP4|28-+DszG!f`|-0!zxgK6`C)PH*R|`#_4oY*cf1E!1b~G}$i5CN_>9Uk=(=ZF zoPvCQn8*lSCfRVG05sZb=`L-;&f$3qpU`M%x@Zgy7?n-_<{SxZHsW)FM}Ehi?0`yh z5cfa`R$>-I%#ex&4KDlanZsdY=*XERgUKiv5=Vy)Cnd>bG+@Zj-f)BH1#``MM@ENS zchzd5beC&rbi`W&n+VIm-3;6v!t3Ml&A8XgxLbjH%N9J7$rAB75QH|dFCTtlM3U;4 z_zTcF{r>JZ^opxM?6dDLUR$jFF=TKT1V$PH!vT?@a^zJ+2G?s`Rd5}q7Y(GsQax2D zj7~|>6k@LL@I)dpak#H?gkFzS64k8No2@3GyYM<}Ev&zD@8X^NJ3IH^xw!Y8>xH?* z^y!i6$;o(p@?>@7^mGDvo&nK9AX+mf=k-X@b68Qzls7>%fK;;Pz~t&QFH~;KuIkz| z-zy&+jm5?elyAL$ZFzOy_0s*${H}8ELQh-mvN$_7Jp)5e=-D_TWu?zyMdpNgh5g!S z6}RbDaSH)j$TB!DBr#D|!I*tSXu(PbUcjXd@67C73s^A*$&uh1KWcV4-L%d-4P5b( zh0rWn*s5nrH@9%$zykh6aqW%XuHBVjeEe`<-{J9iptP&gzN^^MR&TS%`|p4EJMO#h z9q+#X>Gkot^4jfli+8SdcCOvIIP>QHmHKSPY@9IHVK}f8nHp{pyuv2PWDgEw}!KAN85TjeBu7ZLiM_MF1)AM zKkbTST!(|DlqWp2-`blWNaP1PeQ}?&v7^DCuEZ0g1z$d14n&H1Z=|iYK5Y$kRN|@0 zB2=!B!31=Iw=EdnX1jZ5GtGd(NEi%><*x3CtZhW;A0*>HNV}kE9>Pr*K{3*#ZQ4!E zL^1PgP^^jH5Oe3iP1&M`EMb-&)-$~Y74lungOOENq9+*aNxJq%2KHM0BPVCXPu0#8 zXR=ObcBUwPrgq)T$r1P*5b=VP2MR61pfawjvXxn7D|3PC(NPZ#;dpOEMY^qQO{asWXi(RZVpk zi^(V&3l#f4Q$yXT^pVv0?aFf?&Y<5`>u0Q;p!>5|t?Z#$b(@Akf9R89g8wg}QU#fkx_VurO zi@{*g`*on51lm1}87c}hNW_nljvqCVc@9oNiy$$1A~9sa=%q~vxkTyd^;3?x)96e( zj_rT?Iq{3%PR^&(3(0TQ4nBt`j^T;z;DdV2zctbmjk+h+6QG{^x7^ecfBcAG+_b=o zB@vdEON_Y2#5dOdT>PurN5tEDq_*jvE6>gVf0%TVLA(h0QV_0H#^$9Pdj*T?No&%H zWTjV@OATOjFP_HL6Y&`FS^!RM5Park<0s2J%2p@&XHX?jUmn>jt8^M-QL`mgh2IF3 z5C7I|PQf)RHA8F#rT>f$<$bAr_Z$_QgWa*N^=P=YyHX9GJ~3f2besxi_Gb26KjLc* zq^youG14)d^VhZIBF==X&)Vi}y6I5u@5jTPp=Cz`7%{kJHaIheYsPR%eQ;4t!zHx=Pkz(D6AVUE!%09IGG-ww z+X5Eleze~DU_P}t8rut#bbQ%hh^%G17mB|4@KRs6oOatHz47o|GB#t4h04-n-#Qvi z$Horz!R&}lwRg|v)8hqSEO{~H11BwE#O-W`xBAgL%`Z2O{(t(>2m4RVrn9?FRfg7r z9l^0=X1d$o-aVDc&j%A7C#})3V?)Eo#-o`)$ro(znaX4)yW3;FQap_b8G=voDw~jm zHX*VNry*#g39-G#gfx-VWE0}Rgg7uEE=&>k0<{Tof%u>YriL669?T$~+-e9yXr#ys z;@ns%DPaS**wVGTFPIo!%I2oR2IKOi#SmQa&yGb#!r@AXcOK(BIy`u6JRS)iJb$Hc zG?bs3!xXf4PiEE;q7x=D5k5==#bov>tha5X`laU328N|ZLvgbK5ZdJKVz79(-N~hx zOhmP~42XJIBFUtv zkB-M8L#xGRU&G2uo2%@Nihtuw^u_0QfuF90WEz)#3RDg%gQ%m~fy`5vi!7?N`O`+l z1r+x|>wtZ;yfPjUS}}Q~uw0}!VHZ@O7K=UHVK=*6ML4AwKls68*UU~jg2nK7{||pC ze!gnzIB=uC+FU;|l$)p>f#Wy35thoJauJsHKH(h-if%&Dty|(UMkW>K-E_rnlBSOc zZlKWyblO06H;^1+NcsTrfxBY35$Ctv_zs>wCL)G+u=VhcrfCxIn2m-Z5C^F*6pHd- zByzwEQh@B`BFR6PC^VX>=7`CZ^x;=8lvz81%QrLcLR|bol#s+P#6| zRLYTcCQDs69X*tsK0Q$wYYldIJRQN-@&3$YS6ij;m@8q6weS6x>9Ihc$Jm$*dAc1& z$4D+cns2jC*n0!1YSvRziTd7+6pshXThYnxyRHyeHjXqNkeOm99ykXzRwt9N2}C76;39`4B=I33^K`P7Np6Jl&?qR}03*S>-n_Cfe54@y6jlHw|4f!TPu zO8~U8k&>a0D^QH)28^bP(O3m_G;#n%Lw?)vG>+E74f-%c9qbW=*w`r9XzV=1kg~XL zST>60qu+Y^@L$|2Jyr{f!Z&MAzWgSN^6i3%XagoTE#@iPy&7G$2SfRQTv|j=4YHK5 zdSLS+(84^fPwrX%%0_Q4+vSS(S=ZOZXC|)vUAf>MZYCFe0E6#j>fv{ksg$*!HhBFb zEm#^7=8R(32Ixp`eAa`U7AAt}dvc)29Pr}RhCd6?0l?Td|LGxkpodg<)Yx6)hbM2(Xm|WL! zt$1N&E7NjaDEWcxPVtPLu=_uWXLPNNr&8liljEZ`ZyOoXXU>?%j7J=S9BG^GuZb%XH5R-6r zA!P>@0a%>T+hZ?s#^G@Wl9e%!%b^HTW=9=?rj8!Sch55eDi>XZ_I~&Hs$xVAdK|u3pmI%4ym0H_WPRgIeci}H z?O(BwXCNAzfm2=!qIl?up6xmv^wxqXg5Y7a_Q(`G2gdQpQdt*|rXULGY298Csaz$3 zQl5Q#KAE{@vO3%l8R|ZE%vYT6>ANnTjxHCfJ>&Dkd-8UFWv?|KDhK2FP_x(VY;aCg z0>y+Y(N^;KGyZVI))a{6{K4Kd1!$)*nyB<{%&uw)%HG^Ic47tz$xI$^s|U|CVjGiQ zNq3s@O1p++c5o5I!XMbzfa6O>lYYbN1EtxVlSwObp8te7ZaH!SmCix&`DR)g+WvFpearLdJ9x}6(Gw1ll}xf)d*xjwKJ z$O&ZeUQ$x!3L-Sj-u}<^y(`7x%w)&%gvFRxvz|I3cGmuBY9d<@_tt#-vSpxE1al^U zR+FIm;@g;0Q&{JSY%)S*Tv{pUBnM>>8$eJ-6dqqW+tS`-Y-(#cyZC+aLhauZGqKoA zLUh*1e}bVRE#Y~gZ4sHBrb>I>IU2mI9+fyfH*no-x*iccFcJJvoU{joRiR;ph>RS& z0DcHvz!kArZnH8M4+$$*+`%2N`(IPLSkN)YQ-A#cOW3#_$ZtW}Q4(@A-*o-Z~mZi(jy}_ArI&;qJ zfA#WNSEtLJ^-wIVd!rzwfO5Mqqlh7SV|^RSkhy$;5Cb;q7!W2H^hG0(a|1a~RNjB8 zR5WUX#?6NJ#QpXLPh)YkwdG$|-qIXuF*dbZZ`kwq&GDYGpEQgajDz{O_;0nB!n=C-#^DaU4K$d!S|;lB!$+8-NAK*2P8@(4$DG7O0sKch~+wd=SB!wVe2t ziCpd837D>7Jg3iaN=nkaz@Yu5KnCqr=nFdNw0iBYbkI2!`jQUXr9wA!P_GJoSqI&v zLVu%!o>ibGijNp&%pL<>?0BEkG|5$RBOt{nkwe~71i8**up;71#_V~DfJ42|HbkQ= z40lS9a6qiU=c;(H;{Z1p;Ur2(V7n6Ab0;3oRGjv^6N|w_CF2Z*obF(7TRMewzPrPl zv|itnsq2h%bjSTZpP&9z;_p@m4oLxg!y6-EHf7)NT5Q;slcK~DV`;qVa2FtR4_ zX+4%z2-1y*m_pd2AiJImdEBuinp-COUoch(+Lvq^rQ@APy;+8Z8wjFL#~)r7CDsV>{%l9uG`5*qGC zhB95`;aZHB1>y3~R5Dzrk^zHJp>I{8V>?18bkGl|*G}o6f2u;U(iAKV3U4Qk;B8?m zE`O>1W=?k}4LYxbKB8W`TL=9!6^c!L^{EQyCyn5I<*9;%?~!4JDL2E-c#9&cWdB#2 za@k@6TT>2Doh&!Wk0NiFdr#yEbCE>`vV%$3I>EtYE^SveF;*bEko(JID{`%mTp>Fp z3L(-PV`{(Xij-oOf9t&4;LKhY>%@`2`RGT#S9{^XIq_|85f{qW*Y+aw;_;dPnEB>6 zH}DS)fr%H80pjI_w_?~bl*9mszWi2X3(>w5+jH}P7xPFql9%mOlMdP#;^Nav(m@#S zC@4z%TnQn}21sT?6oQfTbPTVQqCn9V5{@uuwxt`Xc{4QL5@i)o?$Py&i<^^Rh;{t?D}YGaMkr!Z=yvSFGp36{$>z{fU%l#v8Di8!+< z(nGAl@{}0m7}WServ@c9<N)9qM$@K?Q2O!k{d{$UxW99=h2C>4K-NVG(vP z+z1NB-*}ZR!ZqNmhhGAma9#t>8XP#kM0c_B8I;VztGJ5<6HkyT*r9a8$x!p@WdBBE zV9lz68Hc$chlHy#GCq~9X(ojzY9|}hx(uh(Px=Rv$#iirG;*Z+$&cRqcAIN?|AEue zO5;+cYrr$$Tc7G$9*TVV!9V!gudIFA*;3?zw&ux^;=u-z46U#jnD{SOB6cNz3oD;?PMAeaD&R-?fl{RQkofW1 zH^r9Puf%zyBN1qgx@_KtHhUf-KR@M^6TJ-XaLOsmd?GKn4B2M#&`7*S7?*Lflc?vU z6m^6k!-5myB^8=6kOJV>j;YXA9dts4`V6E1__b3iwADZgfJ0|ElyGATfS^zSAp2Gf zA5(v`!hXXt%NP@pj)rs#5)*MKu?vU(N(ZIM=Fs2hpfuSWdPRmJ?7$=fgPMZ6Yl-1F zv`z;l*5Y?~SqCNBap+6fI^&seyA5%8IBN1{jGWz=Zud{yCOt3o;5S*uL==bSXI7!a1)U-oh+^CW`=T6xz!#&QB)mGQi z=<_?Jg&nfwSV|?5=qx6ur!Y`w8Znqdp7sENcw2G`z;8$LbU_zEnSe}>rOo9&d$ zDe<+JIQS$u6$y>F7OEJ^J(%Rsj1Ee7PBO8363Sh>nhcU8Q|@;_Z3h?=G_iZX@BrQA z9tLf}y&2S0|BinqD4vMqMHL$CX4hgRX;6A%H+y0q!3{LwbdRL*WrPH^Z|?y<`d?kb zuWFbujGHA$Hfafx+g6hnN>@^lD=CWqz+w7c*TN#)-1VZPJYX1}PSv=Op$UwPWknW5RIh44QLpgWOVqnO(P@)@yGRZ(moFSIP8OQ#qnvl57_S8b@=gIEGcu5G8(4|c#3ZC;6 z3$jbGLkR&Zn@9RQM6*RN5H|0&iq-r;)<1AyD5PY29$D|~RE(v<{2?Xj^AHTD^pMBc zckpd9i+8Mb7S`_AbN3e#&XJHTIK;qx?@|&#-*q3OMutWxk6W8pP7e|6V<6opM>1$AKF)-=9ip6o29C`{6Ljr@S6f+P6KYM4Q zurYg=1&o40WMgFIcdhtEmcat@w-i`<6jMt|l%|HZ&d$NL=69y0lCq>KipS=WgJ;M` zaC#hU-<_u-qzrB`cVMjCH{lD=B3T>j?Hg^!+av$v`E{;J8PQ*4>CwN*T8Eb6C$qQC zP-b-h?)cHnEi*JV;@aAXcw-MzqicUjdC~`lY9B3QdKh8Y^iYB^li(O`1TuLMIdC?8 z(E2KQpj-~{iV!l%>JVD7lJ5XwzX1dIq4G!)Z! zeBi@(h`w)q>|;NyJ>homUtRsmgP;53>HiniF_Ti=-FMu1FYrGNOgk9<4vxQ(n1e$} z-Z7}DP6s8~&#%40q0kfDPv_SLo$L-+vl^7x%gNO9X@WELOjkoaBb=cBR*41Bx1=we zOkc1(WQHY$^g(4CJ%d9@GjQmybWp;bK}~fsG)S4uDm3EYci0RKHfi^zaq|0Kk?)Yv z-GOj!y8JW9^F5G1{fI#1G`BfK9uFd+YKD#$f6%t~Lh|fVYC3n1LwH9fHnF;r#X~te z$Q}b9FukA@p|H$p@I6g6uaRK>j+`}pPxq=n-BylumReF1Me{rCBiXS%tKosw(&`!S z+qx&yt=_`8H5n@f+K0Qm*+ihB{FzMZ;PKii@ynG1)#&Q<5B9>Y4QA(3cpQ__buHa40uaIFt+(4&{al zhmuLcq1+_l(6b7Z_AXR>$*5u1%0>;pmX-vEa>r&7<_mmI5L+#X+2+{D0U)-a0oe;0 zDDfUHtgK*EN-iUpCa6Sq5ZH%AhGnczW8ZASkj>KM^fnxMi98OjsB^I^A8gb%%1a-aJYXHi6`(uZK zfJjG{nH(dXJ68sn;u)A4etX(8(AQY|5S0nYta3YJ?PnNkYfP+%a>Ihge7k|h%&wIU z3l1g2g5N=5?F_E%m!TTnvXB8NO8^{642+%<(+K2x?O}L$86NzJTcI2~4y7f=ujNaO zLuoN_C|^uT+?Sh3i2AEbcPo_NmqY2k{91lr4yF5YsQ$jB9XOPGXGx3>dG<0?8#TWN zQI1_LQ;tK4a{L~ga$~@_ol&Bl&xoCtG>6jSWl&R{4oX{_G!72^6^8;hWaP_G z!mWW(ehkuA55EL>4c3bsW5;Woa6sYatL%}S1KknRXY$tz`AbQ5lwHqL<&5}5b_>s? zp`8&PMxtN`?TlAcIy>jey}Nt7pLl9?W~K}r2C*!XQ2l-=X|=f7LCW8;qw+ro!w`lIBUA)N9p#;MDQT(KF|5C?zTROBhFmQM*nixM^ znL1EcJ72eK?OwlQx4F@L`(0sQf4BqA-s0k&2fAi&IeQDGDC`673E-})viB3_u-aeK zY4R>&FHdmCwM3xj;bZKJ|-|omXyXxJ|&RAQs zD^-akmi;Sx!)slgOZ^c~Zq#bA%$rPY)ob_cIz8kor)!PU{ks#rvBh^DK6dvqukt&Gsl z@*mcj#*OA8B-oXkcCF)qlVHFM9&G|aJX!;VZ7irseQwhm@MxN7ZjTTdmGp6{0ic~k z%J%?cf;A1?x@T*|!61_h?+HZm`ADQtm|A!@tIHK_`BW;KO{Ma+7a0IT=p`NWDHZyP4*F{aYBInEH}Ya1!#vhc0gW_v2}c#Nw5{MrW@4;(kePBaH2R;1 zZWe_uHu*~R4`nQDt@wG}bv{=~*?8S0Ky$qVUe9}DbBT_DUT-Ag#oz0$3X%+!4qv9} zL{F@)811MeqHVrN#Mc%D1F)%-o>R$a0U4=gDufI)Dlr%nZdFJq@6TvSKXRT66Pk!f zfj+ccC=dnSczQh-vf3$H7noYy{Ctg#%Ilr9f+ zODWZsFqcwMB|erL>`PJgRPSrmR+S5JkKI@AwHKb$3aoyf@5)blhr^w(RcPfM4h4MH z`jp)vdh`WXjD#5~Fq28BsdP@-S5(qMpUDKz8tf``ltJepWeqy$xO%PK;8CxgRG|h# zOodL%P++01zN8VWPiKts6+5c_W>$A64Z2GQT~e=I&_SarbdT<-%GyjCu{M>bLiE`& zs(oOiPL!973m;b)>9x{|!AR#&<&Jm~W0?{(AI}J-kSEW*q|9ReEoBzFvGWvEAwe(` z3CsdxF-o%_q1l0Ja$rqf{7gBe!}unM>qZ%?QI;mssdW0&%`)_P-xsaMi1My^@m{jT z%JNJrC_j4DINI+oID>6t$>O{>w&?L! zefHvb+SVbKlB0FsHCm^uyAIiB`n|S3XSlOm?nL=pzB$med%d-}ueB|o$>hgl(ejw3 z&J#?!V=3`>Cii|EOvDIFVp(isV)=O%d0Tn>v~XijHE6@Qw-sX{+#2 z)cn#r%9EyeDvwl9ksy^q@l@W;#e#Bb8@1n2N(JZUmjCYWHkAvGu8z)WrGhl1Zp)z;_oN8rHn^>C4;z)9|B+ExDwd8C~_U+c9U#-&yqaU_u z8Be3ahxAx#Q~iQkXqlfxsm7oE+49_+R%{sx_ffHBc;w(<|Dn-nG;pwgbpQSV^OYa5 zic2uEuX8N5as(7%6_<=b!@v^u850Csp((?KC% zWGDoTf`ddlfM5Fx6FZYIA*dF#8}(O*6b6@l9?gW%3cSxFx-SZ3LYxC<}fqz8B@sY)AK{+u?KWr}5pHZqj>-p2Tz z&k$J*>}nGvuzC-&p!q#6s?Zd(82GiLD%7Wgj_aUgNAPPWbx^V+ICNTu0ymXQU`Jp! zw_s?PSAVn2e#0tK85c$c;=<=Ggg1k-J8|fXIw)}qhrXhN5}i2ovJU#J0yTwnP!hE4 zT9ZWwCEnzBxTJ#;?Kt!zK{sB6*l0Ao8_*c=wHSZ3u@2d?vGJb_PEk<~-{5d4jSLlo zs_@G~Gn+3`CVKcKz)4P}p-gmeQ+VSL^QMj3jHtQ1o_$*6)57$m>U^-QGtq=BuE|^ zT2rAvXQmB*+9ehGUnINuwI&OPA`#~sR2VDGGt78lEMfL#32RHf7XBUK3k{?d(I%;g zmT`L*n_v3PDNLiM_wG>f0$(+ZNmJX&6QaiaFpYWeg(@VaD-Dh?y?clcPJVq7OS)t&%+0MpjVq-mN_ z?D-a=0fQ1(!|o#)dznK)8Pqn*P@+s7mrP8OQQW43-=mf8abyehIStAz0Cug(qJxs; z%~c8nFhKO{e!%M6U~Lza;OD&CtEti>YkI}x2>s4n$XavDuuD4c;JVEI<&_}o2V(Q z60Uu^)%5}^O`ocSUI&|lI7;}JcQ6$vvjZ7l&%WW9Qp@elkEA+sahHPyZz@~Lx?!B9 zhFwx}>~J4-Vxi*h;=%y3L`D&~X{t-voT8UHwy1^PQ{A*@4Htw4ER%tllxNGai6eC( zlLuo|h{nt-PP9=5r7UZ|4mz&8mW(cbE#koH9mwe7&}kV8EYzuo(S^rt#f3~J_8Us> zRqsTm7{Ajpe#4!ig7hhvJ7sMGxA~RYBH|{4L(X!dyfQMs8-%>-$5TDJveCerd+4?q zS=+mvy9z4R_vJz+XQ>-)wAuqHce;xvbIZ)ZSLEGuT=j)4HXwucj3yB6%Pkgve34}OP>EZd3L0px?mC#XCHaM*`7p1}ke zVN1mj&DxsRq^%5%u>ZGtO+0hy|1_^DrQ|hvSc?_pHDM=cak#g$wLZubYU!3n%z{Vn(k#OFh>(Mn zAy2)CSF(8f@tVf(sEJKicSY@R$?Ds6eFT&pC9?(XY2-3O9@lfQSl(Z|vA@*Z7ISwO zi@C%|r_WayNpy}moil}aIgW_lf11X+eQ9UVGaT#Q<8+NbnJSweGWNCipn=3>Py4m| zR?kc-+&oaN4#bD{QaEpQFAL}O4G;H;f3s_zB6!$dk=mGI$aAu>XwkJ~{xE68pr+tw zh*jCOOhI!fk1TO083g=6Bc(4c2S-r4jM_UY75W z(cOWTWIfBLS_g~uqDxc1))g~OL7(`JK_8w^^@tD$n~+09t!o6iW`vxjAXq4fU{5E0 zPlbv+Hi=wLR&>{Cq*5=r&Q{5z;{7<#e89+BP<|vc9gg^W1DSj<-Ryl)rx&B+3(oatw7Gh+1Ze#a_r4*sT8+R--c>)3#v^GsII(# z*=LO%3}m_&KtVFyKg{{4pVnGXbW&f6rw7dM zV_hiTHyT#^P*87*5Gci(QLwcJFB5C+xywYUtN&}G6KT(oXFyU(A_zkvWh+Z81YHJQ{ zix5_2cFc>m9Gm)dxV!@aIo796Q9vE?kVXi@f(k9^ptCBps)K6R_Q_CG;fNRHYiW^K z*dk#p!Aw(5VnHVHC3sH{VnabKSKcNaH0wmkDWNn1s^6mM7-dn>(G@T0`C@Gns%kU!-+=+Y^J;9c@$WzHA5^3>6TZ z6IR;KOpC9x6`}I}CaAhjFnkK{uxm{qigE{Lo%MDq> z!)xW@%3wH?96z1f(>vZ8w)M7lpl9vy@R!~)bZRCw8GyoQbT<}~-rQi63J);sBOB;S zhB&bo{`ET*g(oKxX~ULn08O&W%UT$!zzrV&hyRyb)(Ev3jqxP;#rggtS_BDoMj5f3x}y!yMJnF4V;?rf?xPJm zUMuXyhMtRwI?CB*Fs=7wl1ZBqYHp2ohs3{{s5R&3D?u#lBO58nDt!YMP7Agg zvchqNpjYWGB^#Qup9U5p!`aB9ZnU?+RWD`8(QYYelQ3S%Crir7X$D<5&7mNV(=jM} z4xiOf+u7x`FBbFpqS0@9VokONPgBCPJmi#NX#M1qc7=VuF#TQrr#e&BVCuufQ$15o^Q_o39|8P=+X*h1x37bRngsqN^L?h+6tTMS6K5uHqcf*rFI4 znHO=ql3~(;F|saSN;68@9#z?ZhTk) zY7H#wEY-Ru(XXcM{X%VR$-conEMZFb7|rmgO{C~ci+W8UmPu-;O9 zxIEdBZ;`v9^eNk%>JO=3tWTcOtx1q#s^anB@9gr|byHXSX7;{;Pvei~?#ay)X7Bh? z->2~hnRXQOWykuajJ-E0v-Mj8R&;=j3GSMi+&Ct^obo$){Fpy-^JoD2oqB4v!snT? zgt(EYtZgpGEI~Tssp4ripldhpRcp40@zW=3#2|j@@0ct^>Sd_eb|! zH`0za-7X}QS#LTdX3&pNpYBAAiF3paF?2UX>YJ6J%cXKVO&SSn z#Z2P_;KrF!305zcyJ2$GrAeBNZ=TaOI!{?3KTwJ4L1-iYW>beruHaZcG0VG&FHv_z z3_ozNTkbH~PcG@$TzpqJHbo7((V;YySNn7OdZu$LrxNjt;WlNIa9iWZCcIl2rCdOw zEys2e;q5ziI^@G{XCm8-d8g9{sBDKsH?3Wyu(R)I(7Z&JvI9t+^YrpA_KpUv#-iDv zH+4d^Y)(AVD=~2_&YG0F^OJdBm&0L?wv>A$qfzZxzStka$!cS>;av&zD@VIYsg0sR zjddefrhRXRej7PdsU9DXP5HW~bBiZp$zOspqA(2BuVbvQ9__L%O;ua6iY_3nMXA*~ zO-0yJQ{_zw;G)=nI+Y0Q&QmXPUtuhjn+|0{$Hse)phfod32QoD^2L%VlEkJxwPe+ollmtfA zoE`F&THi|AYocGD!%P)~4!qNyx?*utdOKAN=_igXFrKi->I0(4(G#z)^!dYq*=XWj z6DXX`7qfH6OC#&ybYLozp6m&P{Dm`J1JwfuCI(vC%Hg(FPcGH+S$}xY7rthkf}ZJ6 zu|0@DXEs0W?d>b)duKg95>-PROXz#{7}id=76O)SDQ&&VQ>d}FRvRTtT}{91%`dlV ze(^@aWPWj@i&&TE&`~xW-&&z;IyHxGd&5-f@2M_&ej;J{c?IVG8zh%J3I?tn;ShH%x=o$ie);@h7nWU|JHR=<(m#CrN3t~ z{QU~I$jx!L(Ltk>#@m$f4u6U#kM#DkSWZruB+vNuMeUrOQ zrV+{5lezN!ZJqE(u(Tam+Ge1oR(x!;TeWr|ykY{O608g-3{>7L&4~QBsP9*2uYKqp4hnsOg+Vgw<)uF70s;AL}Ym= zkkvLhVoz;M?2rhkYSHD=aqE$?y11?;WySLomHz*m9Wv?zyhAcwa{;Fo#H&lW>}*ul zRI59kS^&vh^KG6gc(1p@r%l55G#gqP@s`CDsWmVa>!_`3wSD zF4N&DZ0PRDWHxmRKxvLH;h0YwoeM$*I~|pM130@tyrb^$d~P-pOdKAp;OwZx*n02y zzPj4?O^eo8b*;C_U%$A7lM6i2*w|5a_{8`g{DT3w!FxAh06FZvs9xe#a<0!4&9QdL zIi{2|ZcmvpQ+(HDd-gRyW=Am^W8VG<&Vr4V5tBL!gs~(MfGV zCCjXxMN|lCmrpabtPHZXT8G!rHnF9hfx;)7osY1&?{X1=V^)4IZ$pXI;>u8Dyem@( z_3iE)K9P#V=6gmbKU$jDy?1$`dnF$4yx!_aR${$68c-07hGO~;4FXUehm-hshx)ROy8S;M2p zsv{>xBerl)BtFn=G&zH5-}J(GK9f$3rlZM(4?%(>N4Y~S^}?YJXeHpUwOHZioF_LL zJWhowWH0hVg|u#yw5v#g02ce?-kl<5OBD6TUxZ2zX~#$Jc7N+zaJ;|x#Z9jFzYLi_ zI`Q}8PciSC#A#YOCA}Gj>7ceO=O|P0yC4hANp&$oR)ZoP&Fc_v~E&FkaP8 zae_{!FepOK4PV;1Aj22YalE5S8=d8dKC-$R8=m>Cs7m5bIO&@kuY0x|+I<6F*VN#NKu2`sP=Ej7(O5LlHNFJx zY3|9?S`S?#M&_OgxB0rpQp?Ag;z_Yy^iho9U5etl3Z?ioYP6w_7dz93j?oHXdP9)Y zL@V-wcm)!-9*9=l(jr=sp?Y;%K_6`;khkkZI+$EaOwUV@P|Gm0pqqyG=CZrO&`q~r zGd%%QB2>wEcR%U#4SHSEdb+@ss#y--AV%k&L6SG82k#s~jo}m8(TZ1Dz`T!en6Wsi zQSucy2hp`Q|y;8<8I=(sg9cC0#t z6Ld2EUQe{GdnTWo?)EwDX9ph-(1AzAjWFw9?gs_c7Ll*j{GElAnyL966E9St>YJK9Eyfma z^Vy}pZSvUbhx$Bjufx>pb^ps)sWqC&`our4{b#Hkjh16#Lv4>Qn~1iS#`;k*HyDi$ zd)uOnLAm1|gO{Qhb%XK3m??F`rH?ba?VMpVJ@c4)xET z-rv(dR45GfTMsVwo#~23nui)2sm!Rcai}>G?K;!9cyMwcpWB;G@6F{0Ab@tWgCQ;; zNO4$Mirc1AuK8vo)z?z8xs@<*6PsJA>6Z6e@s3AcY4CI$lBvW}_|<(nn6(HIihpcO z=?@iIe*CMqq$|o^936!tu3Xs-EO`bZ1sT*R@wSMc93|c+YZ=<)m{Nq5x~se72_pZ4 z651%}P3oSX*})?xMLKVm^-|%+4G$k|PO07;Ffbc8pX#HJ5&Ukta{5H=DbYVQ-sldy zYkx^YqQE!eCIu}vBnL?}m#Tvt@D5$nCJLFj)Bd$Y^geTPbpwNk8sqPd9S4U0k zrw$r1@w>cf#KhZM(mo|7&W2xbIv~_~Bzg2&d_1EJRSlN3RQos`ez@ll3>i!*v;f)V zKDLK;5Y|jDOY7bZ*}%>_0+sdyDnb1>qEZ!0h{B%RPBzkPbtV6SI8k=2FuxS@+OO7E^ZPW#K-EEG6kVggI9?h+iuT#}Kn&Og!kuoH)>l9044t zgmpkc{samTczGsy-`HORoVZ7B)~$s0JuF3a#7?O^*iSQ#qW*r6#Z;Ta=6#usai%l%hh}a6Hk0G>EG5RGXA_ z{_u zwk6O^AzGcb)a68}c0_vYncQV#d+%&VX>T8%C43Bv%L(S*ejNBtLX$-;ZefM4YPsq>=&|u!ZK5k zUC%WqMY<>>i5D;W@mp$@PqBWcO_^E$nj?h}`LWsP?Aqb9vE|3Vd^*988{0NgrfUbV z=1_A0N9I07NFgb=?&p0~M!>5=}V%lz2%| zqlh056-DtKjoFVyLhn-~B$b#LwikOzKT)P0vy*6b@C{t$^fhR#zi>v;$=Tf)Zq<%j zTi(O~{SRBvzuDB47H`>f>Ke8?lmprBo>@Y*%d6Wrskem^2h;I?a8KP@}D`wISf5z3KgZ`*EINKh6`3yZRnx zU8y@WlB6EdHap7B75vET3YeKJ4+Nb~Jzg)MNd^`lENHd4LMoE5gB|){e zO&DbprjDdAjZK!qTW1UQlp4jBx+W{V1KIH`+ic(0x3*V_SwFloD~`;L=5n>KD4XpM z$#H6o<~Zz#S0H>mTKlrA?03@vhxh>_JlO?SAWC*1@hH|ETZK%-u|uyBc%^2{>_lnU z;;!S1f87$d84adAc#~+s8;HQ?Jp-PugQ@>f^N9}mE%ZApFaVJq7=J{I5nsizqkVNQ z=V(dreNReSRU{tKa;uBSwSfU^fnvsTgfXY&<}0rw`x?b+B+K;5_eEr|0Yyp;3kIZc&TKu&lC z{0K7&c=NuMv?)ZE1ZNQ~;6#ys9#&L?`|4>RtjZeloGfylne#$sz7mO4<}==W;8)-H z^rs(t)!%7viP`X9duPMhEe*cOqHRla7P%PK%y^70`$%o3ypVPGSqSOYgo^cklVs~`zSnt_rj zD%j_;o6RO9+S$uxL#Y$H)9{i|V@~ca((YV$&G+}ui|h3NpXT-q#$tnea!c7odb60l zwC{vTyv=lM-@ap}+J{UhY9ITKAvSt=aNzJr%<$xshS*~^u;N%$?Be&Z!LsF8yqZrt7*8ZKgkb~v>#(^> z{|d#BvcbILh7{SYT=dXNrq1fkJcUsfp=1HDZH3?0PUoYukCQiB<@5Q(jVpaXis3Sc zJ=+UdfNE=@ZL;yVZ1_1?mKD#h;^s7wh_gMdVXrC=OH7Gt)KUx;7}4Ti?iw<*&3C)9 z9)~;RP0ab0gURNQwY8=5;g$I}cl9yM(O$f})>tmoo2qp%c7+GXT*k_cYK6wKAm3)t zF&-u3%M5x^FP}OXUYwrF<~tt(*WrY?Uq&3kU{xt0P{B1Y>+#4kV8q>}*{oyhyvwQ5 z_Q=e`lo2idRAYkLB{f-^#sH&~#?T7S7}9}^i)|j4=J9cppY~%QwYkXPC_zBD9*B=0 z9o$=Sgt`Lp@t)wXhmMRyoHLCUcVP}E%1LmP&^r#3-GVvUr#$Sc%7dcIoJdU&Wn{)s zzLZVQttIv&{Vsx7WTi4i(!*osI7Uv_SMJn{smX5tZ1E#U?tSm?R)&Wwzbjs7iB{4h zGuH2X;~TYXHWvqe6=VR+>%0%E{2qbX%%mDI`&35lADs^Gjx2?JbY(*6@Z$y+erof!P> z2VnN*SL1E*CU3pX8h?0sY2WKP4bx#OrMgUpVYGu65k^Si1cAQ?{%X>P>{yLo}XuPP1M1HqEq?G1jiEwveetS-v~WBPkROeH}-iQY!~uf5Kbma`Vm%jQhTE&MradBJkqGlD`Q|3= z{S~o0!cUt8Tf-0oASRn%Vy=IEIBai^*l+lDw$G8mF<=8JM_=~aH`t=>_VDn!HBnv4 zBu0uIHff?1KRHLI(EB^9(YcfH(u8E|D2^mDOI7ScQOys_3ycX>Z4(xRb>|Vj%6z=9?QEnws0aGy6ir zhpay2BjA*tmvhxrYjk+IYu9drVbo|mef{{^z1V9+f|$T|dz$c0mfzcGulE*3s2>X? z359MDlyPwH$!xY5Vh(YA>q)gf(V1Xp)zR*LAWkg`}{MfL5f0 z*tLA(Z>4B(iN+rs*oUZ$(H?fLuK(Z*;`j%`{gFt2_ye_Xd;w1+v*AWexJL`CZxf+c z*>$28Im%Izv@$3x$Xj@j`97kfqKzz$FdPnihxBBXP2>s z7OKQ#Y*CrY*RMGSFQKBG0&5Y^R85VRSH#KM&&3bc{wBXW(SJNu+_NWdwk{`f9CQM&T{IGByMbRlZf<9@?I-?`l zXbXvpeG)@Fdd2&`qX?-&2|!GMlAlh|Ymnc9(a5puaAvYE=SbTUxl%YXl=JQ1YxBBX z&5>7YKNUaug4a=8ssz*HYfswRBdw*DfV;_^?u(7h8O#mlPEnZ1y<+wkXS3y%{s4ti zF`66TJT}8dIIjq(B3Yb8UA(fN0R6hk;SK_H=t@dtU!J)|w1o!K8zU^@9Ywl$Istcu zikP%POzR+=CO?urcxr|pR2gMg(&ot^e#dFlfvf2#&={_!4Y?u{L}g${`LCFMd_Rm8 zgc+_NkBCP$(0fwx3KavTf-Z`**{wg{j=K1=Cak-qxHKCwj(xDQ7<1 zQOxIT&gRGi4-Hxjwo)wG-{EP`4@QFd7Rk6EHhtJw7q8&##C)|s6M3;6nE+EAYo}^2 zM0~wY&#w8ADN9}NZ)!&d+OyOcZQ$5MJm@>}^=ESbC5B3~>E68+nua#$v;o*ebmHH& z$~0_SBYLeyYgV(0NKezzaztWk9<6Mm(^{t74Qdl0$fTxCvu;ImlXXG15-k?l8C6QQ z*~U4Qc2{7E1SN5HY`yH6TWFa2>tHf5<_o(szCg^M?aBIm{f9>m&jhl?Y`}C!OMJlE z)-|1fiHs_1o2Sd(8uWWYK7YC|6D=p4qq!s!t^Lu?n6vd#q%#Qb3WpD+q(iX!OIqqr znm8=2W4SN^!aAnhv_Z6U5Iv0H)2Nc_EiTre1F2L;wjJa+(>7;_=|IYQrZft2 zoU2rGN>P5)X(;?{vHu6MQQW&{`xkvVTc&q3Sy&m4BbB>DtoXZnN|E8&?r^C!)^2Mn z&Ufb~2aD~s=YhuoD7co*cw8mI1Y!dZ+Hj(lUOWy*7-;MzdF-Maoo4*8>T)49QtGf} z+ZX$1_P9G|VDYpU2Pbo=q-e9X$68C_?%Cl;si(_d`#z@#PD1-BA~fn@8&_#%$y?N; zQ907t$QR=^JY;c`1xxYkFxdpO28yh0%T{`k{rVq&xNv6W(ERkkl0Rq5mc~+@%R@15 zs^tIFcV8VabzL(wJlhjOZcMwKh!!6z<{Trh0@Y;@&Au5`SxD|QdFQcq$iinEu8{B?*E)tPVQ7R32JTp8bbbk`Y=Y7r z29er^S0c5YL=G(>8UsR#gfRZ>qVa3^XNmszxOnY=@x}ooEQ@p18>_WX%Nqd!kkNtI zauKz(@;Z>?>D$m_o*3Wkr0oEnhMHEl1JXdGQ;~fvS%WLptp|}+;CL~Y9EqAZBVc_b z8XZ}$&{+Y|kpq?JP`0ftI~0u#((7QXEs?IeD8tdA3B86f!SME z7tZdA#de)tSiN;N{9?R45Q_!cUn zL=ACT@N=*O9V{J;yOjYpKve_A3@P+;p+;Usho^{e5AEoh#Sgn?%1!fYNTQH4-zBs7BuhPE zpIIR~K2vK3Rt&ur$_up_lnS-!x44!UYI7*csbwfHr{++UZ_7|#zRjTzsL)H=(^xM; ze&1JgP_$;?cQ6@HA!g+GqYJ(p>b8hx_Gg-$Fm_<8GPT!Z%%Ga`LU*|>biAUK|vV|K{viWF#C0`^^6w4MD~|C?e4_n#(hY zejvQboKLHaVobqOnITD@ktGQ}Gf9HakPgqYV^N1t6warZLtoTEX$m;>6&)096=djT z9rRfRY6|I~#MbN%CW{VA@`c~`k`77|ibF3lDD8moq`NA^_cEM3k?o66&V9WwtW5sv zOuFM6o}?}5fHgG8W{Fot*QxJ*W#b$r+aX~HWMhvdGD-Zg&#@zgw?d!SptL^ZYhTns zF&r6sQ3r*mvm4Nk3&rs4h83Pf-G=?=&prCkgo+h(25GjC^uJU5r zW}+S`XapIl%?Dodty!|H$jKu#ZCt<8Ql{E@`hy{*U%}!59CaOdin!*lGD)=RRxrgG zM=~1)hT1h;S@I}wZPE_l*~YP2kdkuCOmf}|m2^=6Q41kS_(b6);$`^dx}uO+>F!5Z z9mw(%eN_8Vec}n-YO!m!=eB3di2=~E{MkIs{p!!gHa4)}JIGd0jAO!s=NoguEji zlkF~7tHe5T)M6Tuh-s z8iP`Uv~M%ne+muKda2(pzuFY^YeGVSl6dfQ@j$|ZdK(yAnht!sOXWqInmtljZP z17CyuwrYKjYd<0ip^+c&aV#zUfC)e9af~he$9PUuIrXc29CuHsN`_LG=> ziZ~-Y1`>M|7TRe#Ef@#2OQ0|?2}5e{Mt&S6h0x{?)u~b#T@yQ+jzY{$b(xHBdc#9! z0@vU8@J+S9^TuLcPb@aU*+PC1kJ z8puu)8zBN>aQWzLI;26$(o{>orj#KXiGWw~N+~43^Gaw#&VzBOW6;vFxv0?cvE8D5 z*I0MT7q?PIHVKbNB#Ho8M648(k-V+xI}^1B3zsG)E)^Qw8Ar3-ixGw~pM5yi(2P+r zuEysW`)mM~BAWFHl7}6FrUrWCJPOSh)Cd14LxRiKqCMh@*xx7KU;DOn|MZoI@PI6C zhV#`RqFc00ba_K!r`stkZ6)NG5Gs}&MTaX9QT9f%KRN!B+5vI?ggt^SiHN;NI(p>~ zdS=8#`HlVkZ=_yix8RwrY(Ut1!RIl2rZW-E*fXNfs0pA$Qt=s;OhBETP>y5s$g9t4 zu^d@z?~LVEuRg1K^;twd$^IqHtuM7~mbUu!6!8^veTOF!$|3JN94@0?L43qb3HZ0^D;`2!ibCP{VG7#ofnF`(J z-&N<;0IwbaJY^a%3)=ov_QxlFvVMcz-)e02+pnjy^u$vG*9_pl+UM}-Sv=at9^K4P zq3{#J3!pe+!JzmwK4XUP&Vo3Y8aMwu+6~K{RAvc`TCX#G2$R_9lPSB2WBB~mKrj@bB- zfq^6AF-JJ%dfOA;OvvueRMY8d#%&K}ypu*}WqP$|>b8A_!oJ(4dRC_^PUGaTw{L2- zw{&PCnVdLO>Rp}c^A3YQ;vjgR^ygT)RIjHNw#y+0ZD6v%1!qx!irRb;^Eb*(D5#)> zqy<0TsR4r`V}R1%Xd4B5Who+kjKT>95>;p$WJozYuLK_s*a9s^oBxR?jy|zI_|Jo# z{qaTd=F_Jurv?X4)eh2wLa% zVzN@1nD{Ahwsx-HwRic>{n_mPJC|4PTFcM9_ulut>#q0T`(APO|KsgV03@r*d-1xp z^;TWo)wS7IR`VTNJGVL(Iy5k=xgL{yBZ#DEC|a8wW@%YccB ziAyjVG;tw`BtDojG`R6^Lsj5@A?mf$QzV-KgN1`)CK-Ig^ z-!}BPcDnc_^ddU3ubu6P21zrz1Ym>uci98;(`{~}*623Q&OA_k2;KUTaNp;X)3Ml` z`1$JYAMtgS1p%8-5(Iog`9{d2g9!k&YI)NewroA0Ohd%T2jOxqNg2~bY^2dz@k+(% z$UPXS@g))n#Fu2;Cj~&jD2Xjm3`}NAHoKK3{Vhk5S#NPRo1HCrvdJT7#YDS5Nei^79n% zu0A&cj29JijK~hKNf1{6UQ1wRq%>C8fvUuxZRgWd1#hH(Ys%S~3bkk~%gxpfgU8a? z(P(J#+fqeMU?J%26rGxeW?v-M?kOgmV>q2|Pyf*2Es<7VXZY3m6UX)hoh}`fhRPQT z`Ef_0;@=Z5cv_tK>HO+Gkk`Jod3At=So>73mu;Pk0iL+efkNI&4Eza*9+VejN=pp< zhxB1`J0w&wv^@chqfPo&E+|I+V?HZ9k+O%+56|3|sDd)+jSy5Z5e^7`asYzL6jPQ< zs=@7qLZ;5Hxk7ZT6et&GcLytzvE1Gm4t;&UrxWRwlP*VVyb^9V`9xdKh#&~zZI7rw z(z!Aawx&kX-9pT*)0s4!&ma1#_en>|M|gH3pJ-hbQSV?%cKWqdT*R4el~qLiB%i{iQBP? zX`HoC zwEB%50x@#^j%w(T*NmWtZWXVgL)(_1nS85@()h`{KoB1Vt&V8Dw0EtsP&g#-W1~hG zK6(8}HkGDYLFGfq;PmRi_?8)?x5FCk_>=jqnWc2t-Bm0b=EqsNpx#ihE6^VBRf@4# zFfPD?TTEo_;flrGP7Z}@)}~Mw_KR4E1$kpixlM`_LNcS6hF%{RWIL4-m8?!Yunj9ggeH;TK zUZcipc~!L%w;PhRlx>7nAWkE#CmSIRh`i=h6d70}Mzj=V;>cQ3hv^J(PO)w)?6OTDXaVf>N)*I)md()d7=Bkrp{DID^S#twAT zIZ{sOR8!bs?bu+H23}V>PD&|K);eUuD=mCAb&P>mDkO!7hb~c zOH=p#mgY2CC{Lj zGX{m@Vx<@)<=m0%b=5X6Ik4rk2Y7~qE~^ps4SFjO9zcQ@DE+fAsG$M}C?RVXzHciO zI?dr=bY9c2tkY_J3%mB`n(~J`EtP>`U!!wyY$_7Vl=nG708;_WK;X{eo~bUwg0Yf} zEicXmF_LbKBmr8mDF|T+S*_54q_{KtMosj|Xq5~#ZX=L7Y=-tgOpFTrLq8DBuxS_& zh@XdJhYu$F?p@z&bo68_-d3wA6^QlbV&=cy^=@rrqwrt$$)RTbSYxxJFkd?VTj9O9 z)5_X7)slyna;?lUq>d;{9N=)a%{fM3T?Z+-)&mWWpFlu}Q4VCH@Got&0A8KACX7c1 z_#j|nkX8fIH5H`5P#5N&1UUmi#zbN;E6bf_b0iuyZ&PdA4cdl=mJV-B)Tn)1Gr@{Q z5H#v@>U*mHvSqx{mJAA`NB&`_rCmMPnCUBaSp%`YVu6Hm4r(=(>9qsPDe;O8@f(Gn zsqhqzm}1L7C?T%Y!FmU|FewZgAt@{f##HxkaM{zHk2PzZ`M6uVtvON{iBH|~x+`*4 z@yMyG%DJP*j&}~d_O-7YK{xh-OSgebkE_ne-H@hOp@vIv=_gS7Df7&T6as(>jNY2+$lL2bgFc_%=t40pkTBg+{l<|6VjX+g0yQC^V zq$_T8wF+sfr5PLEo|j+4-J;bhc88@`gM1W}Tv&HZF1PFM!a;N>%Zp`oqn`uVN)g37 zvmp|vP#5+CR)u3cDULzL0l6$F6^A0I+&bd0FwRAR0V{=J|IiWwmqx-@ZILwzqhgpUsGAN1dH&ETQ2 zuqP4h>Fy1@K!**)M{_QFW-R-9tIMdvsDK7i_hU)yuq|o;hf9zSx4tMdojdMGj5*em zP!Rh?L^bDXI0e%7lRAI`mBB_d!1sy=*)TT`LXhO{-6X z04cA(R_kJes#u@3e}SqfyTLA=!tX}pT=t*--%92G_=B2SD*sJ4DXIJqVmZ3kM$~yM zN2|hLHk?*0$!=y+sv*62RUL|rDy8KOQV}=qUjxZg3cYC7RLt-(Xw1mox^>%Ezp{L{ z_U$_!|JLFsw0~_7whO)1>hFG6{Y>?fRss3CsuCtVfeBA2dilk+mBK6(4M(mQL$)p* zOhh?dOCi+1-1QDlM%G+9W|&%0SI&P~cleN}Sn3IyhprsG@mAga7+452U&bU? zl(>_mv2RZE1drhKPE0$2F%To~go;y=Gh?GhL}>c`isdatlc@tGXc(d zj^>r!5f|8lwTukD!zFX@)1xkTqdgT)Ef2+#lluw-D}ki1KM@id){ zn6??rCSyZWu(GYcch68j^p@N%XLcl>>JuG}O%`|5>6*nR--o5)ey0?)nVS1uvH%p- zsh%^+a6_tO+#>06WrPYWpxiRkmgpQT;+OH;mkrL!?opww zb7e5ZyhYFVm?KFtc%3F zIpePAv&fevRf;k14?9QBY*)KdeUb9mt^1B^bn|+(Ih1z6(6p;h-nN2@fm4Ya-w+&F zReJ-2nGVCm(LvAP`HvhvDCX?OLWtP8bL8}Dn}28}me`VaJ^t|VckPVB?<}!&1cu)Y zcd1$x1;;4}ze0C2N@YkXKXk*^+>GaNE<*y6z*rQI;eZO_GZcaBz-tt*RGFV}sS@Xb zCx`D_y9^nDu?-KS27yXqL1cdk+Vs*ubRauy3)&4^hqevRE>WRa=q`Fe7+erzzVIUt zYJx+12WD?B=UrXJ-q6xs{eN9?@aC)g4{V8Q(yK|~Uk9!m)L*u9+reH8p820Oe!xs_ zWKQ>=GDIPjxwf&^H}Td8MQWLggtfkzx4Nix3D>r=)<5E{KdrT@2{p-EtE`nN*zDR{ z`L!GefjhLZ*4ugOdAbAB3D_NYYn8P!uF0-Np*aKze#-7}K_7G#_B3_}<-WSgc?y6Z zg&j(^enL4{a064S_v=ucU5j;8Jx9?j#7VH3343god_0tRz)u2|3rvJ+-)Zq3t1<>n z8gzaM+aFr>;|IhE4?F<*i+TWp)8`r!J5$cVEtmEKl#YOm2SLUzjI#xfwVID^L*BE5 z98$b}drkX*gYl^qppGQ$Fy(bm`; zEH88q?&WTKq+Uo|-h9oN3Jj)SU0POTc*z)bZr4Q`HbH?zTR)oU5aFdaD251RHruBHGOmuJ& zHe7hR8&E!9dO^YqllQ_)i_MMAL)VRmg!VS~_${*`B%56`TiEf|J^98*n)7?JTl%~` z;qmK-y8VN(@f)YEO%Igb^YJfSUO0fg_=UBU@W(LnM9s~hiDN3g1{?tG-xXGb8-?@g z2G)L%S}+qgsz1eB)PV2epU(=Hqt{x@4+oKGQUH}z3JvgQ*p`f8;j{m>_k9@N&v5G< zs-M>`q!Yssl|v?G!_SQ2vTg65{CsUqXj12dcVbh^TmM$ziJzg*I#jm7_bqD`;Vo;Q z!{;udU)4)Urnp1+6WA#}EDqbqb!n0CG|8A9X2QsRA#%wHy9?=UYK^(wU}|Y`8~VyZ z=hBC#EN1}4_i*du`>&$_;=D$Uj=#V*=PFxEc?8JeZB*q?_-}=*yle}cL|ScMEri&1)ovx7SF#4 zT<_aB*HW+jIs5!>2)V!0=y827`+UJfs@|)f6TYB{;rl-JeE_nt2G;|BIfBoC>j8IQ zSHe0H-78p%dKF2gd+u4}?k-zRQ&5aa2H&%C7m7YCGQ~9(4j&QTSN+TziaUoQH=Vlq zn$_i%)vF1oU`dU49zQtIJvLOrD5YKjWTRodmOz9M?)$M!bkM~Z4n)2kyC;Y`z~Jgc z3=+@V&})S&Dm9WH$4!VUQo0EtZAb|xf1{$*z~xO&UHlgW))ggTf>ty3B=A{Ajlap) zWU<;>nvAWjjY7|K({%N9R~SPU!EtXxOS9q0uXkyk<((s)%Zsa}^N)6Y{mCbV=U1=r zt2N2VEd-ug2Pp(~3mDT5Kn6>ycgcg1EYA&tVeZ}nmWxk(0TWNo{wHt`E6X6~*l>VG zFghbfMbUB_1Rq7r$z-B7KVAuKAH!<_uQ`|>X@om+Ov9zQ=)yOYOjt0BSq+#iFF_8^ zo}Ga_FfDZ|d;`^*AlOG(qrNrO*xuIOsB6)+HaMEhA)mV?SDGv3TAbdXxyjSeif`Bz zsatoS?w{*FEgbl;%ij)Teo?Jya^}SQ1xxjX`^B8INrNV}uHEnYaP=Mr9RYjCHv&EC0ZxikULT3lkBHva$3L0gd z(Tqd&`!a5(*S-XJpulj5W0-u8a=xNu$8R?I+&~vVO9E^tcP(V?#u9M<6M+}xi~+4w z2A1g0DFcc&rL<$)PVO{^Ls5H^xv@=e(6yM&cH`2&?0xzq2J^yw(Y(7^qgenGHU-@u zsNPM)gT7PQBLH>L_gcYl34OR(-(_t{<_u=+AquY(w1-S|A`=#cU>pLp59VOh^tQW< zrnXjt&0;Y$n>$R+Lhs7G?QT<>FOo56VePa;$NNf0FFRf#Xy={>_RJovSTWldLR`0k z6l$Pie7_E6iqEz0)h8K)T!#6_w5M)v3(QdqGyRJBty|}XTj>8kyy}J!1cdSE&bBmz;`@CAnf1 zl2+z`l2bSsmn>9hK#a#buqNDqBOQx;5!4Gx2K;O3FU}0hF zwxzUsW}^BFTV^6(n(K6o4Nmm;MyLBiOv&;(5s=I>faEE7Wx@w98lj# zHQjR2tyAAK3U%|zB88OqtX?6-Vo4D_WvULZTvrC9k7^%Wf91;d?b}}^_eYwiA%MqJ zS@0zr_)@)x6;N_;RN-TAjYhn9w z9q_XqO-Hwh zu@YS4(BYL=LZxg<8Vs>HXtHJriB&LZP(XzjB)I3g2M<0rx-B%Y+V$1XojyIkv?N%o z|0(#|_iQapqzT-->&4>8@DKz5)9y7#a1aL>^?L1p`bh%wR^$dst!vOn1(gm9HH^`S z3S{MF>5A_%4*4S(q+P0yL8nG2#j{D*C$yOy(O#$4LZK&hod8)@4h3P6wGWvhEo}|f z=JuecV}9JxXvo-he09XV7c6XmkdDQJmSL(^WqMmNM~qt=`eKSm|5H zSujdwsL|M&p{CdVgcMO0pM*Ao-BUvjUP2J@pekP@a*uF`KJ91))`3xKEN=u(=-PQ$lJvP0<49v!`EE>0jk>1xHe-X)sQEFX&js(PJqPw`j4h2eUtEZ{j|>fOX*H;IfYUXH zMk=rR`V}&hR?qBy=*0NWf_ag+HFlPWk&<|`L1U{G_`0M7A#4pF9@VfXxE)vv=#^Lx z={dxDNRp66?!&7LZzTi-8EkdpSLWx$cPjD##ko7@!l|jE$6c68pSkn<-l5^)Q5W$Q z!OVw2yq(MfloTEArhSMpR4@j+k|q9%1T^Vn6cmw#G*!Tp86@@}QxueK2B27&yIdPg zAG=?8<{#}9*P+wPW8?NNv$U6XAN%^(w{+9y0y&XZKgM>`-!mfniHS&$TV}M!zRX(x zla=jY8a=buzR6m-y*3MNs1@UCxrFj5ZN<&CAw|5)i&C$A;so*1?26!8`E=vBr1zY8 z@=4Hy13eejPcoXAkp++&6uqiCYRhrZUrlT2}735R&1-U;SWYQ zi6ma?TPZAEfW3wY6}h{>Ickm_eS_vV|G4Xlc8^)x*lIL34qJLkZB}rO)<&DNStvj9axf8a-b{2T2OpG{{<4fFPIP2k00&sKvsQYq6FH35PLd|Ms*` zG*zEb-+uPz$N&}qK3A!YAn1+d95!3BdPp8s)l_2^D8$RRD6t&M`6uI+>(UkS-xGD2 z{&;awxVid|_unt1QM4;I@x8(7H}H4?`{_8QzE^dhOx03R^9_$z_LH>1m@+~p9Iu1x zkOUj)RT{KX6oHpEZ^0`+23o1|>S&iyGH~DFeHg!>wgg@&7cvhvR0d3vN-gk->}I3V zm1Ngk_!YYH;OxYnV!pZEuiTq=Wu^&UPD=2izgObZ`(fADF`=dUh)$o9Cp5s} zqnDUaiI^~^^Xy3O%n?uz zDb*2_V}!ay5fG^#uW09RMkqrXWOb4_F%|J=AgX%JT882=#TxsehfdW_FPs|g+vCl- zhLgE@%3GYzWhMi;z(QB!lb>uTZh!5});H|TKb{% zH`tw$ilb~-iP&q~wE@&jpjT2FkR(#sLN9 zb>lE&n+pFKJz{j5v_@C!;hj%Ex_57@qg`vX8g}n|^n?A4Pd@puqu}!u91jcIgn|3* zDX%wWzrXs|)!(pPO0+bAp}7>N*#-km0!J!CQ`EVOyADZnCszSHGvG9vIuTiLP57vz zFW$XtAh^7`80)sKOg2qya3)e94a=|xbVH>N?21=&!-lNy8Vq}he~@x6d(bFO!grix z|B`0TFhT?AXnLbY!8Dn~V6jY|FZ#e>(7)b8{k#D6Zf(Y>K@jeTTAI71JJU zoF&#EZ$fcYuxvmAQgJ+8rF&<8AiebJNt@4MHkd5sVBe0upgy=OpP4E7f_+Q*k;%!? z*w!e{W-ufdub#Z_eLLbU8Xa3G7A+$U6g2#+1xHoGfYh;?o2MM5_Y zuR*yNz(TCp_c4VvNhG%cNrsJ1)x2eri-P2c_USAjn<`q{(!6prO#$>4rhH0)@&@Tp zi7*1J44wmb8oddJFMmEc(do&GR?%xhrg-|!n@4*pgKvA+=+Il@$$1B90s z1$>I(cEJ-3h5XeIM-y}C&3iBk0=MW8HkE|MB}Ty64v8w-B2bA<1ZMfR@BX?gqD+W{Kv(#Mq$o434RCSE<|o~Rbbijz$>OKTG#w0GK|~D>ZVeB_ zD`EJrHo7}rdgS9xj%IUvdxJ}um~5J?-nBNh+a(-4|M0n@-kP52`{(Mu;<>YDu@A;T zyFgHZmII(=I&@d1UIwBnt<N#-Ai42bAv3cOkXou}Bsl2*cp z!h>RvL{Q1-JvrkjCCHEK!?=gYt|yI!^!EsHBA%KR;!$QB;_PJRGII<{Oo(V5QFa^@ zg|lfI^tXiC0`0m6ok7>$B=*^pmBmWZ-Y0e#3}`g@+d{W&KQXj8bVAVYi`&(}t0eo+ zeEG{~`jary?D2io-#v$a&~u8V3v4cGg?cYm@SiOk4+9#BE3greM#JMo@|hz<{B2Ca z(H@p`Y);5LlujcN<*kejEJe~C{Z|wt$(@mX{uD4CR?pg(0%Qxu&dg%s`899`6_wZ@3?u{rsT@PjXl`*Jwy5zb*3-sbIn zw(5^SgsfZYZ>nP&l*<8&{w@52g6cF#kr4Xs4bk+?NO65M-35-q7lBe0m1sI=x;C^p zYeYu%zo6ZNo(Q)AdXltacJkQiLS9Ikmd8y!B7F;y}$m-}2TiA3=A9F^3LxC#rbR zFTvR^1WnX0IIRpVIH_OqJIY<4S!VO6XpTe#aI;cpr88mx&$A96-P>Yo*5YsX(FL_e zqsH5oor8N@EG@|1(crN1@B4av`0x8w*LT`enT#2gD!=zVcfZ%1$)wu9gJ(%cpTj*? zD`R!Z(a06G2&BB3aUm6Ev4WeR&tdDn<=-tY|4#V97rsz+ed}8wOv-pd9v8S{k_KJt zz{dJjo2@SQT&>EWd2_L4X&@xr`;VJu2gq=Sn#dMKHJk`yfN{%!H2(XBhz*P6t z4XG*$PbLqc4B*m%v_Ur%$uJ3;&kEo8EGPqF3J>jE%TcN-hE~KwG^zkP(Ty}p5zdBT z)mLOWxPf>#oI@bxd@>!L*;!IoAlf(-vV&1gJFyJ*&MLj*!83}B67vs%sYKBex|%zl zc&QI6I+WyM1@E{bL|cUNH0k^XV6i(v8R@2?kBUXFfDzwB2%j-+|GHwQUCHx0$Trkv%<>UWd;g67*pqA3VOY zuNtovw#QfZcIu z#Qx=AX2(t+eej8F>j;GKB-kMQ6+8{(2W07{)o%vO(WM!bv5bsJG%$q0lTvK%n! z92tSVCfwQPba>2N3nkC;_^d1GT7Fui(+HN-Sm*WE4;1zKf2$JW3z$uIc=$$agfamN z-ETf#j2+{@5F63EeEr<@%kro(a`rgPH`+GAMktT_zk!YDUA}hi+U5Snk-Gk{l~6+) zLZE<=fJF%ozUn$Au}bh!r48fV>liL7>1(_)GWwW@g99lRIWc zuj?Be1*>>udh626=&me^4XGy3mk#u$8Qa&UpbIa_fI$lqWsu{Mdv~Z0JlIc^sgx~} zgz)+v=|HFxvtvt#4=;`NU)|l?FO+A6A3QR($h-9m;-b*Gk=KDz;y=LHY#YE3%Hk=s zLiH=;o>|xRjDruDIv@wn5J6$HbK|zF($htcr#PLy>hc>0hA&4)I-))CL~pEv&5@uQ z0OxLm%CZp%u~{!R2ST7$0rro4WKF%ENJXDXIjK_-k?^VNIT{Ol7P2eH^e_Fk<;YZi z!XpOuj+XXMCgKx^4AF4G>R+PF&G3oYeR9a3te<+A0T)E3yltQi~TL^EQI-*}%US4iGG$D@Wk=!<#$dpQ%T%}?-bJaJY zcbz=pA3iuTd~nD=w&%dXy?YNH*n{B!th4dZSIGsX3`c=JkZmHv9t4SRQPm63EE7T8 zgT?{F98ZKpSQ^5p#LNUq!GzMVTwn+vx#b=E-d&jTbdHHX`}cRzxwN18%+rR+p?D?K zR&`bHi=1k+y;|-dHNQ0!hP{ z^3;R{vmXZ=SzBD$pm}UdY$&-rJ-z(RZ|XFW<W^=OFQJ%=abshJ~{{_V(_981m~GYAdUU+a&pX6L=3_z@KL zIxswZXebc#7MB0Qe(f{zwLnJv7I#d8pZTDU)sPVzR54{5WKI&RZBVKN#+R8aHW}tl+t9(t zfb#NqfTMyP zon3gPLZF+G9ji)TPY<2uyr_?gJlKe)Q3~)MUZqDNLs3 zwp`yoxJ7t$%Qe?*xusr=V*YAom+)K6wZK#l@&vdxg!DJ(3F|}p;4X}zlP`^X+U1Zw ztm;}!kNBPDw~wqGYH_q^o2)JQW}7$Sq= z@aD06FlN@N`dB_y-Xi>gTZ-iqKjQp~VCwulWG2TQs`3NLL8gcp!NotA8`B2It&lz8qc03ui!;ohMzB_vn3Y59EiNMS{r`ARS-JZk(*OqiFT>jqe%+r5gnx=x9u1$kJi7OClUUb z-)TE{XD;PRJi6L+_8x5@atUYR;7lX=mQG{10~l^V^*WiKZE$mM81BUb^cN4#^ALdt z>L;fo@~Dt91EJ2>d^6`A1^s>%d>^1fn>g@p?#Ft5_q!W>cu%r*41#e^U|{YIQTffb z9k+GYN9A2LirZoNK#Y~!DKsvdV$9lwOf;17((Gq)LwPjcVc z&&ZQ71Lr5)XJo&A>sug_MRWUQ`NzL6LOiEvJ9GBfLohPGy!&i=VRKD?tma9}i)^p;#cxd2tzRr1C3MCAqe z#iE$gHU+J9u``~T$7^HBU>(kQW(YFoA;%fd`e#>8w|QE%t**Ayi_bjscft$RUqoj@ zp_wR70kQmD-9v4v{qok53>RhAq-ehqL8?~=$<$VY``r0M4rY?;be0DZ9y=Brr%JBt z9S`~+UFdnNu8)u0eAjZfUbw%mn>z=ec?KOF#`5MdI~$|^N=G*=?}br+@*n*VMExtM zF-br@lIn#9V(`NAk=3?fySB~Owz%{0kM5aoMRjtcr*(SA$KE;z4sgbrwc1klGr#}Q zNlVgVNn1|**C!bV*ok4KFszLce`Q#gjQHzowg|bzxL_kGd_lyYImdYMdIrm82RZ>Y zD!ix7?r@tApIY8B<4ibdV=)ie(t$U;p%?kv|Hd{LG$nY%xt2<pP+GgrsyUhJyxva5LP z28V=6v6~l}2Fx@#X4I179EbpR?K-^<{or~sekl z_9IoeV8M-A;GGx_E3}{#!b4dCR>?+8%=Ly(>~M9)9044v;1fNT7L&D%)1R{zyI63C zx)XMP&vIw57%{hdMf<{TTddRIt1NcyJ?-uYg=5xe+S%Hm(drv@vn{P!J<2qiT5S%m z*^%!aOBc2ehQ^%ffru}kh?pz~r$QCchM746noy2cgZYU?*0TK0{pxpMMAOI&Sp^DJ zavDe>%@#UiqTYWGjpQ8Md~}{I0g)H*Zj1quX?D0NLI+XsN?4quM8H`htR7HAUA!g9dgIwhPF%^6|wtX?dr6R#>?Z_=Lg|j*^c`-~8B#Tfx zySURc+z*SEE8*O;Adhe^|9Y1C>O^qMhUdxOr{wo}vLa639QFjkwi zS}nd1-eOM#IyxXgv!kQguC8L}tU*wZn4D@)%i!{!kxh3*}Bdq=W_tCx= z?Z!wfY-Hbj@URdt#|M&$0nxm$ylrdcmr`E?| zZPPnqI>V$SN>eAhuXw>BD!l`C369c0UJ(#372;7!Gts$Y5;gyXilJM=X@}KrjpD%Q zQD?l%71);XB#d(%#Ylh2J~9>Aaje~Fje2naeK^+b?{(!@LxH3vlr^~XTjGIoM(jvz z4F|iEj;Y>2F_*9u_KWcYJtNl^v!*diB^*~9-Mzjxe=utErpnb8k0W`s>=}r;GXWE3 zmHaFwkT6*dqLP{`sg#=$u5&2Jw+GUD@%92tN6&HoS% z_`_j;AdH=J2z#2jexBV+mbvNyGGYQ)#?{m0I!YYwf%D-)SOE?shWP9!sX z4xQ*zYbVh^D#fHn{|ZU~AxI`tP^I**UXS6B3KPEPcCCV64x*QQb0lFAQPl7P4CeOZ$)<@V%49YY;~v@=(Zc#GkTEzvLb&RDb!?nF759LqW3ccF}*Al91dy4UKe zN$T5Xqa@Q&0A)~;2f<26g|PPZZdMWHc;pfh@T!Pr_!;T~u7WQ$UdePM+9Rn_Ak>$3u1>|f zLuspUqWV3PrxeXD_JzdJRYRM@Zz>zz7K1fb4vx-P%pRdI`IN!v=$tJU7b{*&^*lyn z1386Mc?EnXIUzP54+6-*WzkeC#TAq^I^vtyuGo6yk64ejBatK-8Fho<=ZrBDL$G+H zxC^-7nM1|C9f7QKG!mOA1qE?`K0RIXhI{8zp00>>Vl=iR*0gGf&A)p7;9FNk(Oa;) zJ;NvFV;N`XOlKBHoQznag}~@|JiG58x=VpK3zp2N9GWGe$2J=xPnF=|z9!-s&{RM# zRzL**UF+(auT*arzB;trWz+0=-&@|WWwJ1J%iHhV5AI6po*8o)WdML0%2=u!w%McP zGbAYSi~{pdfVmYUv{xUvYcrBo`aryLUS8}uS&afZgcTK_%6C4n+S;bn)Z#!swT6O1 zS$?X4O~{sa^amZWPFK9gTbfGcrVH+#xGNhn`+HY)i=#v3QCD`rFg52dPbYJOI}9!q zOb!;4euLIIU5NIl9L~&8G_%#CZS}Q$OXlCZ1P>yHzAGAb^{?YO3XArKidpskT&&Sd-dC8QwPNZ6(ryY_Nl}m_J3aHDc zoEpjA03)D0TWI-=CD0b)HFq3R+Y{Ju{5r;=Yr<9&YA~~!e^}^>M$(xTF&qCyW8>_uD8IwQl z@#cda!yUo2E7#3cjpTsXHw#t6lPHJM<0x$nRb%bbP&Edbs=uFGsVN!_Ro3FjAL zAXHSB=C}c`R0ydZb{y?r?8{4Q6rcYo(YbOFdo~%M0N1 zcJ({ddd*RE6T%iVYQbQP&?zvN@_b5s1Ot*m%)};ODQzZOJ8jyTy?4I-jboFA=|B48 z4;{o~B;kt39K&RgczF=wWrm5D37HNh@xo?}@F_qifDT`oT*-IJr$jT;KWGYu3?Gt(D<`b?2dSf;WV8++COjB zHh7a25;O#`<2LQ>OwiQ)s*;e|Y?P2Q@bGb%pKQxEK=P0++qh2hyo@c&B#)*oZ2DA1 zxVL(2^i#k3x@XYs%tK+2Y}wl(cxrI)i=~@0a^TjhnaVFP?jl>QD5U}N;Aj|v3B6+b zHC=o;`?bgDv9{9DCu4JFi%006_&eCIUGv4#wjRZPy^GnewQ@a@{kr+IDpso#i^0d? zBq@avaLbjBTp(+VNJlmz{+pI-?7#-gRcu}{h+AK~^~gJR#A9T+dbhl4tC)5cX1j9p z-M$fPtP~uZB$!xsEL7ZJPZbddJP<6J0ZJ zz3sz?z(cuky-TuOYetM@xo-9-vQ!ZuVN}qEhsKzUp(@gSXe0fkkDZ>#DT8K{&v0Sg zy#7zvu-%D^*s%G59pp6?gXL5JHtbv}I+%92vO}@_GTE>qpl8E*w{TVebk~;Nye}Pe zRX;mY3}u5ZqjRjQGF7u-?_x?uZPQ9hhB7OP4NLGIkwxO*TSnLlng_=HKVi8xt-LbJ zbts-We9S5m3041!S+3qKr?$d!?V9UC$xt6r-r;&>g9N8_6JWcATo&4OW zY-~1;KUCRxZaMc}ECJ8Aa#QYjz)ekknRzrT9_i^)hhkqAc!Sot4oQ^IQi zvLNtsr~I^wrED<30P`*5iE3JM__>bUg8$My?5tM~6$wAUH+>={e{+Rao$mf6S+Xusw&K2oO+YbrQ}vB8{#R8`MhRVo;1!Z%}Km zAMVff9pSX-s#Ibl?#|HOUOErVEoP!tomZZLNOv|aCSA#j-<=6(ZHb;psF)U0U4i;Z zxo)jr_)km<^{}RvMyQ98i{P;$=%^1JWlI66K$b^MifYAz&8U@fSnLRt)z4Q!?xaOK zy}tVesn1W>df6Fd-A_4_Wgm54?Ws+xp!%h7P&lIg1XglgA$bur(IB)t)u$1AKluFV z)6ZiAy&2d3lll{gyx)2oj3dphuO?IR>%xANY^V9BJ0LNK?N5RAmZ4&#P?wMr3v*-c zY*}M4`o*NMf2e2nwc)&bYf&E$gpqNj`Zn%#OYKes(x9DgW;?xpqyN&AqniZ8WFX!( zC+yF=wwCl_Ae$lhZ!Y!)T zqqII6&wrM#L(8wxB5H11yY2jERrJlP@hYgkfjiu^p??A^R?EYA;Sil(EF9S~*A)*W z#emVEDd&X!;cI7mhEw5ys4s0Lgz*SuBFduvz2fx@n?i1^oT{T(h9KTr(acW?OaMf83fF8+=1G{$}h8|58r zl!sJBpe(5MeXR9;taVjLp{&3O6t6$S7-8+R=Fat>>3ei!QS~h(n*`9|RuzvSk>iRA zc?7MC!eif>n!-gYT(onOi%Pgiy^~+_@;Aarq#MD5aTn{&cZCKVi|`OX1VNzW;`ggw zjbji#0L6-?5y~l_#+ni;d9u^Ka>C(2I-T_TYO7cd2Fr9pAb$mSxfSH`jBqb*<;N~O zN3mPnj=UkLO$Glt4KsSdjo0Onq{DqFha=S&mS1yyeL4Icccgklpz`6z`gw!=P-l3wj z^b^Vs`JfQ_#pgcv8X;8u*UT63?X7sgGr|KG?Cwel{MUNx-RisFq!FUk?`rUr*WfAt zA$$f`HnP=4=zu+iR+p}h7R1+lTK(zjbKiN@Yc#?{^$AVt%edq|)n&q0*#qeG3_b!% z+X1;iucfgRbXMJc>@k-KWA|w8W+U2KdsbnSpHXa>-{1+1S$;>jnfjYnD&hy#!esUF z#FxIbRk-rgnorNZ>J%IE5sdj(jD)(R#;@o=59$(C7bSTIO4JCcyM@uaj|fqXrutnr z{sr{u{k8EUh=OOcWoOrmm9UWdv~c>eQFE zVyxA7&wl$9?s+Hnz~5jGXh0ig+>^5hS_)&0m@ah4+$qHG@FFm1jdXdX*H;U%>URtl z-e8emaTk^9X>8{r?!SJ|^X>ffnKQVif9)EzXN^h+(ltbt8a8uwOmx5Sy+59uL}UM& zM!JZTG0ZM>mUbANGk6S5HT?jNVfs-uAbju5gM-%(Ah}jG2yBZ>{n`zkFyq=m;W_mP zFfhW}u{FE;=WBn1PEa>wzj~cRqfFvRNWby<%Nz%vf7Pp=Kj^sZ`TsLAl;|y$dJ{t< zc+l6@7KMLRKZhI8h9oMa4XI-so_-8zY!@EB{JQHd&s=ukz-13DegEC>{{B*O^@}&% z^u<;D{(AiWZMEOCHKbudf4!;n8~ptFwabNHsh>vQi3iaZ zBobUVr6~VFscg>+)@Pr+Q?oaBUJcxs>M(xz+S(802|WjD=95fQOSuw3)8S{I6|8sW z)YaVY{{mmWPI_VwEckO2>_=dYp4g3dJ?tHD&)|s^Wuz*oRI9M2p{(-{@f;Ioj$0WphYOPMkwUD~)2xpbi!pt(r!!U< z$c<-hP4b8^I9ql+cPHy}laXGWuPB)E=4dEcFDE}=8yk;j! zkYt7-)Ie#r3kBhbFf~(s>~77m-+vHi05z=Xg(dY*@FOBtHC`F9B11=LnE9RNhrcJ6 z)seNAy|WH?7Cu^iY(|*kw^rBPxXi6WPjBPgSxL_xk<}54vgXAso5$Mf58Qk|k*f8i&?T>62t>(W~tFqcm)txuFE` zV?)I%nuR9ayWXXnp#LqZ`*f4KyYI&T&VQlqwpRGW&k-C6`;T^l@&Ixlx8MQvN`)#Y z&zm65^gx0*ldF;7w)ARcW)3~LQhU0cx?tyBsC9#N1)XSk_~8cL9qApWZ_nD_;25a0 zfY?nUD4?*kb8r_4FiB}sjuSYB$qoygN#pDtf%gav`2?T@11yE1o(Y1=VG$7!U>%a3 zoC>fufXibi18N9mN^FbaAq0PAZ=lNs=wT)~I5U_m#Em9%tUK1VT>m~>hGNoK;isT?58KyKY^0`_@9t@^Y}?J z8}`HQ{E7O*FbCecb^}qg=B?L3TB(fi4)jU(=p@wcT7IF4EIw1+={JgzDx0PJNM&f2 z%**$fDha9~++-22R6UdmOOO#eg;%l>7igEfydnDvE;*)ear(VDiQOSu62LV03lWRO z7jheQPRVZk>dRj7!*EYmDxGr&vo=>}Fk}gLdcr;VOs*8HS;H^B{3V#e9d%QfgUMVg zdW4(PiJpotDo+i0vhyEPm9Yhr_)}qW(wH3DdW6#B)0syL9UNH3D;08zzWlUp;sANW z%T7Y|$@M;xmmlzp7rIe64G9tr(F9Ow=Cm9E-i&NEj+dAykq?ne9YKwM4(6mK-)}evLfqeL~J|K)e?szul(D*!wga7}7Ox_52R59vVU|6eRUnN!XCa#Qa|@PE}osi0uO z&|F8K-LC$|`8`~1eGoU5uf!AZFSi45B~;bX?K$tUpQxG_V|AnEYISCkLRjy!nKF-cC%R%m@dv{4Od*9s~*6`O#2sX7oWE~ zg^yR?R8#kBSFZ0no3}f2!cEm>EU0hom+D^iJF!zl?6n#=_!5X!xsUuLbmxjJhh;n~nNg^D#I3QOBh!h*^pPI< zwQE~n0LSEXNw2+x*L7$6g5gd}sNHYLc9$})n8{}^w&Zr)Fh6(0YBsxi!`%E0J95e7 z{K?VLE9Mf3xhqCTPtGUzy9?8~)I^udZ4r&8*}labcROGG3GTe()7dj;Nf06Sl(iAVV=67Si%`$gdYnOV8DwuBg=-?ecVr zVlovIUw$^O5KbCB8DFq7*#7E!qsd4B^KeEO5`L)u5+jcidOU!wwchpRW80$w@+`2C z6A{oz>6}86H#FiBUb`T3lx!JpFkMIpsDs7$SOZHmtsAU3UhsMgzR#P?`PPi-%v)v;Md5cr&^iX+Ys;@r6tZwH%d6Aq)RABCzrz|~50l~x6m3xk9hKsW0u zQ6XVFxG5#mUkV*dL5ZN1>BRd^yiembiO-~9cH&o9PyDJEYgWT;F%Jb2yE%-<&Vc94 z-+>${0tCa8w_#K_2Fv!KIqI~#%=WA;+MV}wnS6jw*d10&)*EQ^ByPKK%!i%!sL5*W zu(YA}_r4Cc7~f?g+Tr3>zk-bM1^eq`m>^c>`FxbA*$JCQg$9r4P{+ zdRM|bzJipy&y_-|8p&$`Jb@`g$yXRfkEyyb0i3hR`AdpNgW3KjESW5P;TvFehzaCI zN2oKd1;kg0IfI1NzAF}UnZ=WX#knqLSA*6zDY|oE%iG>)iu8z?<)LU~aHTV|#p@B5 zt=-+1?@ZlZIC96qgSQ{-j12E6RR6ixlk5m}`sNqfjgjHJC%Ns$ZHqT<&)97lw?_yK zzrk3^hT|ZK&b6Ol2JT`r@Y)NQm7*pqp~?T=d=Sr%NCd^R5tJOSKXi`7^>dV6eAOTz z8;7=!yLK1 zKOTNVTR9gNF-1Gz;B5ea-VLp6k32B)=wfi5xEuLyvM8M~HSqi(9GF#~CB9{^Za$sg+15d*GOn1@`j6k99^?idwnGlY@)f@Eg zZclQ`B|3Wo5r1FS1F4c~FzB7#&S24=wnQz#z+jipUs({I^~Kun6Ef9Tb;cs;j>m*C z;ST-#TOzg|lfUWn22Ug(4EMyX!dn{N-W;;!+w2XWFnGmcB+{3%VQ_?B3!u$E((FeMe=W5@7Le~d*R}{>fxSVBH!1K0cIP{b)K|(yV?L@n5Gm7y z_-SwHsU16}=r2_+r||dGsiQ|uo;-5&6pm6{n4ic0aF0){Z55tVeG~Wc8J0uG-?qz1ipv3ohu!o>}_ z1&N+Pxww}=_Yx(uQ>u~2WF>gPN3;Olxw4|C(-gDMriSL7>Hf%L4@XlY<%}(s4miW% z#PE=(Q0xxT18>9hJcS1)m>*t_U7W*~;-2es7?yxtN-n<;Ug@NQ^-ewH9!fK&7{IbK zPe>G&>`8M^Fj9PTe|IYC%$s7aEopaW)F#GL1$(0WR5BFwdLzM!c*5rixojbSsLd@p z!r8XQu9!RJr^vt^n3S)gk4Ds+;cQ9^#f19G9k8@PX=BqX`FCl$sj5F}rj*R~2Kk^U zVfWvDFn7zFdV6~xzC0*2IsfCDYqFQ)7BmH)#rg&DFAsk3Id|YYq7RPnpwvKl;F7is zAT}~*z=3P{4z-Y~EI5+!NwH8)I-{n5`G=osZjYKhg{aLQuh3w7^Ralg!)SY|`(R^( zDcBkCbw&M0OZ6wm@KpATTA`rR*{Z`KWK; zum>`ST z)NEqB+mnx23h78V-QnsXetH*{f#%5wCnGHbkMi(XCFKXec%|ICUu(?%tp8txXtdMU zrg^xqx;US#L~<)DI}2diG)y9JC!FX7=uYPdkthu`fOkY`T+iZh6P)Uz%3{bg_$)i& zMH;dkJCQVdeqb+;ckx<PR?Uq#C^&L-}hA zrA1mX+A^G8XduL6=$L~5+cG?H6dVUDCZ{hjC0EXcD_7ujksaeK4=&`)VpS4YA9Jj$ z!_^*h}03H92 zgph=gk#PzF>JCuVYB{X9)0=P^46cMXL(!-;Rd8TrDw&)d84S7xUpqQ_EsSl|v$)f# z+MVS1qQK{yP{gduLYD53_3-r7nqlDrNYOzQY$5 z)H*Y6>GBt=-w|74Zoz7|J7dwzIM(qVINBc-2AG71%lccrGDe;3V9z4MhoIgv4RYeE zZ8RdZ^uWTx0R08B*#Q0wI~NvKR~Hs`cJ=i2m&^Tq@M5UGhRz-mIq;DbU4%p2>7g)SS6caWwb82$19e`m_L)Jeqw$eM?Z}y4}nmbtlQT2_2nf9O+Pfbngm(+$W_@x zM|--uX8hl<{MDgD$r))z9>8LHm8`J(rx07z8(MgVIkz5V5kr0| zd7Ze7;j|`XlKt+0DdY1-BYumw&2M_@)@DbbYfzdGpWEv-v{*h=o-h>h`CgFsLs+nn zVIo}MxSL=}`5xqKm%18ce5)PXNy&1>_5=A)W(fiB>xf^n)|mig3W&TFuzo^M-@@v+ zFKu=ieU?-~YtFa}MUy|}^7uUdcvzn{EKP3T(_u`swD$FwI!Z}v%-i1Ob=py69HLG2 zC>HQROsf$RLL%_`X(g#hE>vDqUC#d|M+juld3CEJ;&|W}fw-etEspf{`b&}U(9js= zZhZpt@c`z7T%uC@+`-DGooz-cj>Tbp&ZC>)Gx)yJgKwP1tRR$BoIpTn^0^pPOc@4t!PpQ`;{7Ed}^JTW|opkcqw;x2Om{>xw&-3PyaY3-N7KGdy!MM9|s0?Ff% zgwoor!g2i2gwz~~Nb8}_vRoo5Rg)YqC!t;=3n*7CmKle!c8_2Y9#!vyne!6%1VxO$ zCIo~->Ls-NUTXOmTJB@loR?b8;#YscT2PXT{pu{Pd7QNXrP*6u)|qT?1SNYxxAOd4OF5AQ@}SQh7M9V4G z0*?Y~c}cLse7hdk0BpxvUQ~S)<{PzO4Oz>dgDyU!{sy3;E)_+^-;U3pW}kc5=iBi4 z%j|Pp1&dE5T@U>-tn6(mbq)@Vb6|tAx=CW4yv$0@+!L@6Rg#h^;fU+1kkhHX=QU?;=vfb&LO^ghcv}$L+$(3_#pNt4^?o5?>n*3>tG1cyx9Qu6B;_9@T zw>3t+E<3t<7G3|A<}idqKcnl>FBZx4PC=(d&x68=7^UP@uHX&v(~uqW~(_M{PUZ-&5m8OiQ$aBG}v3{ zkKbb=IsRAZ;4|uPK(N(_TMARK?%Ad8kq3oW@2vO4%jO6;p5(j~c83SjPET$i6z=K> zv;{5s{@%PZZgM;Ngg4t$gYo!K+GcA{7}|zQ#o-P^!eYfNu?4?ymZXY8>t>0(0-#Z-Cy|Hs~&z{yoq`{P}=yQgRC?&*D-nclmnx9RDbo_(KWvS$LBgiJOPAhHL7 ztOf)`L&G2_y2ti z^weGIR-HO^>eQ)Ir_L#*Vs?LL%Z)b6U{?<*7_JZ$2#O0;ToG09B)Nig0l-f@s~a6S zdjyEF!Uek}6oNFtZY!G^m{F@tQ8kP?o%@ATd^Q4oZ2%inp%sY7^S7$;d?4>~cTL0w zs~I-9AZ!(87IVZltUtp&aH1T-;!(I1DcgYx#b^pXrrN+Dm`H40E;aP4)|rRso9jwb0$k%B82r3N%ur<ed!I_qpSl4ho+HdvL zxojP8W-~3#O10nF5USUkQ%!+PbA#U4Ru^;xQjOL+i!%~Sc~i}H7LJEQEiIvN{4a5j z%c|(>d}a^4S8<))b9^NDReZ@ahCq+%Fv(Hj0F?f4oy~UAW49Z4y$PYg- z?g@_$J@ZI9>GS>qL`?d?kLZtqM5UR@Dzu?pZ&A!0A_dX?9X35T4v^C6z@^W}U4ekh z)!0b=-d=i;o$qtH{C<~{yf}PJS7PU&8nSk8R~w;ac_fkxtq1XG5}QSsC}_b^Ar5pW zVarOQF>QI-&~MmADy!~(?a$erwum(!y6ju#aMv(^Z~>T-xh7vzlWAe@_R<5**u7ND zWssQe8-VlAz$%=jsQ}41Kfo%KzO<`GPBx=Slj|EJ$_*>t|FPvKEF&D2p1JY-hd;Sw z0|0%DcmN7%;3`H^*^5R{bI8_Ma329Pz~>v#@9%0q^ol0Gv$@_GVIS=8Wj!6GD?*L6 z1tSeR)Bq1~FG9&PqJpJ0%;f96O7F|zBjr3!4q|(dPJW>YTU9&sPX!Sv%a} z6++`K7(#dEhrCf++=IXNxCad#&AEdE-q^C9XCFyq-M(Lozkrd5<~hLVgd{B?I0%dy z3KigJA^A$DQSa%F_jHy?bhK?Yh02MZlg@(EQH856#7otUVY#T{a(JjWF-EEsd{oV zVEISkitopGvvN0mntoCllE>9uUIbzq|8fyHg3BzLz#Cih$^=c~&a?-!colmBvyzy> zW8KH!Nt3wKNwYXjpj9L>aWSI|@VwYo+CfNi2Q95=_Xmd=I8&|29k4J|<&HVwrZ7%y zvu4yY^v+_FoK>?P#aR4Ac}A@|xySAmv#P@xEcM-4o>7_ZkD#mH17cf6ESiU4>2(35 zE-9}v7=)>o2A}FG)%C|Nqv9D$Mw`qwpFKF}CE{M4%$mE5#+LSb(CW`%96ySha}|lF z;!?F@2P=Zs&{i%V*eXvVZ6oQ{Xq3r1Y44W%Os!(Y%$h*6zdPQNu=+v`u1v(ed?YsP zX?ErUiLk}n+~Cee-7DD#{f?B~=|}uhEb2@Ru4ZRTr`y_MZt&S^t@U_hbq75yq(u5G zfc>_<4J@ZTn^$)3BvvYNh|ppaTN1(sOpq{}lfgkfeq;_!0ut#vpl-mlsFB-FS<$oh zkm}AWu88EEL95x>#y+@e@bWfg*RJ*}(&=hbzM3}PZU8v@mFGZb<(sm3dfHtE7kr?tPP-Ln zmf*T;>(;yIS99S^d__l)e%CvwA=lG7U#FD<@f*ptWe)y`U_+E$Zcmwf)(F^k`V|Hp2;Y24amu{2r7QTfN1f(hU`>{XPzyi%8h zMut-09iYzc0HZvUcX!X~3yb~MKTR3ySwE_vDVw9!$hnN++exDjiJ=riJDF|F0lVMvl%+9USuDS*em|amW=N z&GJtwKfn?g-j80#>SaPnM9L^|t5Q+A|=bE3u4u zLU|ra_*i8KRAwSM1hh*k9|%NnJ-#G?Qw5DHcRg2BaUCit8c0aVCDSg)dq?}LEhatK zQ~&TO4p%B^G5c{2+45#4=E+A{<1L=J+a34ZQu=kY%@fO{?UqR1lWwrkUiXa{6pumV z_JK|Ahk{FNWq|2+ifth6T;=w-nBSKRJA9d*VA~RR#E}nWItK>XC3iJMTk=gogxHLE zS{#9NJUtqEo(mUT9Wz_FsIWeXfWNm~uRr*5o#YCsd6~alZ_JTkA=c}yac7GY8&K+c zog|9~=PcJhs+-~B5UGF5u0I1brV*gLEKMxLwe~~e6RyfAoQp*l;(`%rOtFOtg^VA1 zRG}9}*Gie7yPNE}%8CbS3AyvuG$Rlk4S0M-PcFxpqXW{C57J#@&dsVi4;{-UsX<-& z8M`fOwPa#FHt%7p6N71w!_i#2YjDY9=}*`!1MMCC=!)CW(f^K)CO09p<-wN-TGFd* z&8WL>bm&9%*>A>-Lgmv?G>;9aRTl`{dBJ<{JO@isxuz?f-~Mk{(YHf0 z$Bi+R$8lbT8)M-3I#N9?Tn`{H?_Om&7%7pUY9K+(x5IVdI>nnO%fingc*b4I_yU>2 zuFo-x5=hgke^3eFzlC!R;shn-qVQXjO0zPG{wneXSr}gmds4zdh6^1y{Kah!k$Pxt z#0_?cBjY3(^%+dxXIm2=o!ww_*lm;9O>M(Ng-vwlux-drd3u|N3MYFrA%`PGr>%K9 zncL{;!;x&yVYw~w_?FyZ9vsl_^K8s*b~q9qN376H+x}__pf=82spynfp%7UO91+&Y zBcm|7qzQ$N=-PC7PI7co#{mN+N}X^q6$09yP!AuHd3569{IYVoRNHMYEj!wYQAsadY7Y4D4-OMC}R_aTw6$E%E zSMKl)nXqeOc(D5Pqv~AE-D}&1HZ~z1cY18xQTL78s$wy=qP=lPufM5i2n~kPOWXXJ zP~Ou#S`77vdIC+I%YxjWcPAPX#gTy~L>-WWORhmGCVdq@pX4XDiJz_@V_k|qs5XHl zZgRlt!xPM1vWX-Ql3^V+kTh$w@kq8p2w4I%SQ+UE zzHR;epMhoH^=+ehHu9zLl4x{E_)DdS@}q6n1Eqa9?bHSP#DZ?O3b~w7E09-q)+jbH zLQX+~p}4}L6UewG4#=vI29eT=A&9pEelkubgH}v!Xbo*`W^g4oGO1^Zoy8)gtZuG- zP}gE%SGdaQaymUYI-zPftJoPwUE~<)XRLq3aq00LQ_Tf`e`4iU3(kmtpE0JNwoHv@ zMw<(XZS@zNku_A?t0Avujb~h#3+MgeBQ_N{Ht8ZuU|Tl=s5hMrx=)>jXis@<`?Z+Q4M z^79S0z7rfSf>XoQm^wQU$5w*xCkEixc$(H8xg)RA*a!kywc!fie3FZp^lpzMp@-!Fx=v07wAGKLJ52?k z)1+Q@9~pQiO>DQZ);Q1@9CAKC(ACoywG6E|d8fIp&W7Ob^=;-%xL|elHMe^Tp^5hT zwz}qKv$BGfSOZh)s!DHOx`KVnfBy8}&W?X__eG!goKU?@uN+r>iYu14SxRP8B#=$y zt9DgyWwj@v=O!fQEW&kz#FNxRREBJk5C{JVWTjgVzDYy22rPAQED_%%W?}@U>XBNJ zQlwp4hzOPxM-F^Ym74E0rquQgW9;)#Hzb-`au=g@&-LU=l3Xh+fkvEnvCifF#O|tUjk=W8OR> zMNEzjSSbP<_k(h5x@tZzl5o=i3@D%r11M0;mel$hJPo7e#M;Qhna)wuyy`|u2EtyX z^mPg;Va$ggeb<6Ch9AZ6quGcel+fvnAh74~bR-=eSjZCw`40+Ma0QipLzZ=N7T=IP8)mJmdr5WSv_}8|y z?bTObWsOVm52!)ZA!Rv`F}?yP`jSOh(fx@<05U?CI&7F8eKzWu7)M1S14W{ok?zc#n*2h|hf z{r%$;)jwc2br?TqPY&mLvZHC&pOx_w`wOMt^}*i*Sg{W0#i*}q08mnQtJ>2t4tb>^ zQl-UvT8CXwDOuUIMJyR_^QaQ#6I*E1K|2;F>rh^|J*O;V6Gg6hJ*sQ#SQH z+2oLkxCtrw_OC_SgfAlU3oN5d)YskJQIAoN-bREm$oL-orO8@P|0VfbmbQc}#~bQv z3w1NP*qZUknx_81k%586<-y@)p*@josA#CK%hxImx8GhWUU1}*Pq3C^6>BX0>Q8^7 zzkQ`2v6j-0mf{U?v>VupDAz*7$l`SJ78O?&*0~=<&cFg`0wC6jgDZbhSt*gJ2MDsD zLBtY-mZAZ7MDQe7(i|={7JQK^O;K@IlY5NGYEOX**IP1WH>m0w9<}vJoSI1~*L?=xAEEJ88be%0V3s z9ynfsxYpH$Ifai3jEl9Wc%~*G$*kSvI(1^%llJ8u|H9Z0e!$p|`cH^H%}#5n>T9Vw zt#i1wx}n-+u4)|}!XW7n1wLA1t?sKbe|Q->bpz&63sws0%3zmD&dL~(YEX=k{U8Ey zQVBGVMwo#JN~y7RK$X}gqBxVJFaeVAj*v!a8p4fno>U{cyO|$JB8sp(CWi>H5ml(DekjFrnz+fXzeu~VN3<~>2f^dF4Trfj0kNZo%T zhP)X=UbD!O+SN+;%P4M=|664EH60u=kV;o{u?y|1c|in076YA>uvq-__v%h04c{)f zwI?YjN@`$?V;arqSw}Q^;=0M5#?qT>?ycXxW*xifU&0yFsujjDI*+pk)CHRQaq&w42qROqC_Cd7spsfNWEP*)OkjE39@bkp&D zM$?z_?0R<1v!$2VE9@s(Lt81Kti@EM@TsVP_WIGc$EhtoXx};^$H=1^U`%dI9b$P* zJxo#s^)OAh)U$M$Lzvi7-_isoj&_g&fXk2CquN+F!CMG8*HheZ~T#_}gE@x&*Yuk9%wWRP_wqkT_37w~=$Z0M##)g=hi*;TFdBkI3 z!pF&!c&r&s5hhF26cUZ8DI`%s;=u5tNd?=1G)ofr@J$dd3%*yaTgN_7`tJ1fjW?cC zG_YruKfdg&o^ycTMqNl5Q1)<1U+Vyklymf3TljkTitw$4Q0{@|>zbdDSmVv)WMREFY7>>`U#DByt-3Joa~DG{Kn59n$^I)bzn=`va|XslRN z6KYcbo071=Smd2?k>{T)j*b@T7l=j!fmqC8Vc+zYj-K^4chA6Vf1wC+;=K7{uh zd3Tl6?|sx=Xb-#7C2)ZNqS_q@Ajzn=#m3@b(bi+sPp`!ak~{sQl3wDr$< zKfiu9tA4yk2v`mNV1+B;TNr-^9B>r)T^K(G{jB$dpV{!wem}qd`R|ok@XdQayZ;Ra zsvitwk`K3Y!6fP-bA}<%FFw@d{t=%!_%4Rrjp5>~>MKSZQKY~zVyIzTK{L4vX|DxB zfzVOXE{$NS4saz1cCeMDv8CQ_S!K4U{4{le(l1sW|gN(lLo2l+u)B z6q7bFW9}*M%Iv2;rT%|z?uP4gH{6iB{)XI*sCJ`nCtA@V*(y28BSSuNAR#n%`YfYG>DLLy220fbJ>uAMO&0bG)v&Y+9x<EgPe6F)J-U7T=|(^~g3-1I)cHe94wRbc?+k4-ouzAIuPMi3 zn&?LhAXnl)Y5}c^s4q+)ETNaAUZDxlfG6lPYy(zNeoU9>DL7Dd!3!;Wt#k=Hz4Sen zYnvXLUiYlwSrm5ys`z=i3flUhlayjbLNhCqRgkyVDxHbXzockVD>L#rw!0H`bQ)bJ z;B5H!*y(Ll_`2yKfUpq^LytZtN?5PXYSN;U4;SYazXz1E&S6#b&W!8{gIR}i1g}|T*Q`i_+ zz%YSHm^m0G4u==0J|L^i29dbyQ&NV4J>QrgqBn* zaZErm#eal+@~a|N2}GwPeUtu_QtEZ;eL85Q9f4fyAx7a}+3n}uG4#!E4&8AcA7v-A zM)o^+#;<__TFMM^UCte6P$WJbbV<|?!r`t1{*HwK(8<@XxOT-@!B7}O85fk!{pyE4 z^i^crs2fF}PD0FI0PYS#?%i_#lwM$a3%X6QWr2lcJd%_#NkY6!DQKtO#*B($Ff1K+Sj z%_yCC1}RD1sD;egvE8WJUXbroZvJ{^Oiy3{T~n)JF)nV`C4Ou41=?J(gzX z<)u+A+yx6El?dpnV;SRobSHdc{8j10R7J&77twYsa3*#cVNL3i*3~Z8&S2N-Y<6{5 zaCFV^@S0=aDy-`X27A^O-ue#`#s5RC7_7Ylq%Z-2Ya7VN8^_p*$Fj#tdxv!TnYVTO zlx^%SXl>e{1SxCwr1S|FZ~L*2Cqztfbec9y#au}H+QPT9h)7NgdJ;BCe?`|VNJ$hW zA3Q)1Hh)NYTQ*06p(3{u7M8N{cI=7pZDO~vY=jDXnTNaAB@A_q(TpF5_+2*H&zc4mO8}_Vo_gqfIt%8YeelP}|TLb9IjR zT8HE5@wUL^R3Vc~r8*6RnYQ6V_YkePzJfE0UsP@bsSCg881k4&sHv)*uOO{*e_&aw zow!-nmy0@`(VWlM8gaQIt-eS)O%W{EZT4`!sTt9Y?U8(QQ$B2mf2VkBYdi`aDgNEb zj#ci2s)UvyglBSX3&RWqC1CDDtr5J}?Ya)+_(fbjq}&N|{LmM0R?_gHDH;R6$J0&a z??GPT`((1i!NL*ip>B5Pb-QLrAl@)Dt|ZxS5KrqPs72AOfp}1-+z8RAP}we*n_~+* z+98y*@IE)A1fl$<4Kq>#&^Qzl53SMeBPC#2wh^CBG`|8 z|DJ%i7>Zu==?#}0)xGq@UFnE7)f*;+1K#^*j%4@gU4VytabOMu%R-ZW%bKhb^e1?Tm& zZ5WIilp#ggxV8)T-38pEk84VM*du^}44K82DREKsa@01vKDJ>s3d~siRW-bV(jNW8 znlb_MwP?-;{mYnGs3^5LnnqxNgD{^C+G+`6Do((s|J>U<1UR~(nVXd5`l2j@n7UvN zMm;n*4!QY{{REcZx7>NrX~t@UL2oqNIq;Jm?8~7XBE&X?8t}jJ=G(hLRvFMzPPrUp zwS%t<61Z_|pTAwq#ARTAh}pSWqD|X+nzGkpkbqO+TNEiI7O_P-W8l zF}1<_Gu{Dt*y+H&2R1+;Tw^!H?N)mJ?eKq_8hU;BUPD937JMvd3oDmT?@=y)>Z$3w zdv|y5+SR=qja`Oe^BVwESMg^l6)P2RD%uF4y zDK>^$Z6QmeJyvLqdt#PGPuCez1$4jc~Ea!HnB$P1ZMzbaV_m>XS})>1R?` zG=0Z>4-Di;^-t^%$_vovn32aggMust>(Ig#`VGMcaCWcGfL&9E3 zHG#pA0M25&C2!%IF7=c+JFdAa-DvPPhCLalJJ}WNU3u&_i!W>sX6#}A*xCI{ z!oEPN-jNz@wcCr<<_1>Rx4zSR$m+vyoA4!zAxi+qd|DLS_Xf^i-kx59f$2w|4=Gn+ z$hTK)X{DNUp|K^5MnoWBY77~Ph`z>>Xx8jO;!hZ}DhywQ?M?@JHr(FXSxj=F!Gv8A zmy>)+uFhmulZ(yOnbMI4qu#$f)p>X{kvioC=B=vrFH5AB`}M~9&aHcwE!(@blhSI# z&#P*TO~JvAffZ~^)z9l|{f)tZvEKMoE``nfLFrXY7+b1bCj8GBSts+DFr+*zOv63% zG`pv?>S-&hF|eA}{Y%O0Fg){HrCYJ$TZ+#C%?w}lRujABEX)YCIXu#vk~UVmzg2$e zV_$zd4fgT-^wTBsG1~+HmX!e@jxQY78j}Z>Z% zvu+Qji*65N>C#{1hdyRYi>9PYBuVbng(0^-Ox!Qd9439Y(G+LwJEf;LQjQY}rdPY<6VY+Vi z2KyneCf;pi-Av!@V1MMVOV5bR-6)=QwUwS>c6^7Aj?r~1CiVkS4Z>_O4~u(_Cn(fx z-2@eZm?wboiA{E=m5T%FQcwuob2=8wOilOhVcSc`E?L5^Dc!tBcJeV@Lx!O)GLlj; zZN(ymriyCb(N&c4d5ji7W~{ud@(Jxoh>nliV6_1jx=wb#DD(S*08TF5%&u9oq;xD? z1yl$@fUXjPu&|~W)Yv-ZB!T5=g)lTloSbGL4+-=f5)pty>&^kEXf0w>0rirIknsya|75q|5e@_X-WJ(qn>)LzL`17C~7KLR=!i@|} z7G!!HuG`wgGoAvzA>HAK7t@8JlANN|wTf^}NG8a%@KUEoAEU?S-Y)X+6ux+urdq}ejg5uzmekS$RGwHuoDK;dhMcn&GFa)_HnA_B z&c0YW4B)QR9iv#495RW(FT|#VJWh*aa<7D;fluOLTX-dVqC}+h*<*0gS75s|-y6~O zB+nCv7T?oCT#SNlTX)!I;wAL6OFBxQqzHS*u&WEDQ@UIDNDAv#gD;a=3*n!FchH(E zUIUbu{>Pmk`kwfSzzcK~7(qaCw4`;r0pTpP%mRqVic&l!2YXGw8(1mD0Z`>5 z4PNGdmbBqmCjT;D`n>pfEgL1gxKQgUvumxiN9_!kUfDb?(TQkGzr{C8W`8rkN@ZmF zR%NpaDFW;2b}3HISUgxlML~x|$z)PV`YfSy6$(Jh3)p(ki*Ye`=vEw#i=n-gz3?&& zW56{ww5w@+IOq50hT}5b#hxn_4Us`&C4&()E%;$@pB&92V2MaEI68D&u@YI&c}qVQ z{*o-(Nm_5GIFA+8$h%=Tb75xLj;%{tT9$0>P}Ah{E<~+co>bGuc5;&4-YCj*FPJdrqoN1h>TpKZM1%$q0D(vc_aH{jG64(-R+b8bZg7 zm6D2c>B-U3CkNTv9lc%7l(Ts3+K-GR`pz9b=_f}_Kc_f%{PF|m0PZEd?aq{E`uai8 z?cZizRgOf^9R~z&3Ai-v#xh)8*?LqU;BV0b}&77WrA$4b@h!Ba-#ky6U3U#?gVs{IEBX@T9{IlTq>2!kf0) z+nVoaOpbfZ-c+D%(os4tHJm16djkMCR5<_+7sT)qm6LWMR32tzdKkcdkQSgg0iZcS zWi!%)V_OE?$(}GEVtWIvgW;BbHzXI_mi`=Q9jHKL9GL!fY6zaiB#7*Ubm<%kPYsqw z>)?VuQ1P%(IV>zYK-#cW&V^MdRG9D7NkOKSyHw=XfU1!gM21$wmQ#j3ZYW6$t8kKc zbz87A>GlktQh&r%XCK#9Sk><9T(YFo*S@OIb==uk0Y{LaI7~|`3$_rA?~vwbS_Opr z@C7Lv+~`O;jCMb1fB4nCx+S34j!sYsnIw{>fau_|hho8?Or8p~qzQ(LF1^QfT(~D2 ztTDNk#|Kur6U8Q5#AEO^TaBKU&S0>!#bdNK`wX6lt*MxBJEDbVM?BJ0Yl5Sro^XrN zn_tt@9^bGu+8MRi)EV5FWY`>N4Lcm+)_^&j%(xA8HFms=^t8BZoMB(j8aN+?b%f4{ z{+PtsdsAf&teoDJ{ZVNQ zWn+n=Y$q*Ulj!5!oR5>y$y)4TZ0Cnl=1YtFb<5F~5wJnw6Lmdjh^^pD!k(mv$*2_* zl&~qe4=j(k)nRzL9#6N>y#9BjO|2rPLt{~5s+OlIu~ zBWl{Yc{my!-rOluzsKkEc>Mkk;|EWhzN5zut&UiRa=9T(r25bc%x3c!&F1=KX5xh5 z;S(k@YMP6UZt3pcG8$7;c=u^)ifVrkj1QWVu~^bPIR0m={0G6aN!O34Set=WI@s9@ zBd0_8Njg$s36XU64gv+0*bmI&cofGe*<)>zzS zv~=xn8)iSJbj(x&Fk%5dPrTwI?~!YVvW=t z;x*OQnyPARKSe2i{izk?`EEr@O<8j+;E%-+)J#nu8yhx58Iv>*kNvr(rlz(Qf7BF{ z&3(EWnH8N)sU_>zudK-r7u%QaTwYk+;qPCys^8zSy0Cob()Qx8u4?Az z7#APGxN!0Q8$(>bofsSY!QIpzB;B|;yaii2^fdJ#RE|&~)75%hWqDsNL!XhQB$=zx zI2gqBAc<^zEO74}!VVI=k@h@9IL0X74xycoZqPpQMK@+xFvxBmJ49%EdY-fOLo z6_?#yTcb2Jw%(l?X!QBbcDvc{YaGaXA~khZYh6tw*}C%+yAD5U-Rim}Th}&dw{MNEK6Tyjs;bg2s#a}o#P)^V zt~9c6C=~i~qk^*jAuJk%38vO5Q!qF-6iS2)b?f|<2;~6@1E~kY zAlQ64AIomJBr@#sxvx6uq^sOM*Kp*LEge%M@$m5G?w+aPaC~H{EaKrUyEv4%u2)2NX|nsLh0!D>k}4dc5YF z-Wyw5TBi;@bgH$brS!+FGwW{(6r#~WplRhZ?eGz|ET&Y&uASPkW9r)2^xtA1a5}$G zmkLDN+M0S9Kj3vJb-;8g9Hk@jO*DMESdr$Y(gb3_KTX-pfR!m)o2 z;CcaWD^faY+J+8ibIzfY0b57ed4rVWxQQ*x#)n(|e(b8phiU0JY`E;Q+?wuSY-Flf zoEnJ*yVv9{yNqT0`H^IDgmO}v_m^%xf9O3`$-#BG!bY0KHx_d129s6q89E;;sy|_- zcn|ido3LwC-Y}F7H7nM!QnuoIVmLXZnQ~irHf)_Ihz%KOnlLooT0GG>ORy$mg=<%14-(4l#drw4gD zvPx$Ry&ybs%0`^Gr2tj6az9Ay647=U9l#P{k>YsYgZ?G*q(DgVIsNOwh7pWQFn2>U zN~bSrM-_@q{DnO~7$KcbrBezf56dEODFw}Lmgy@~@%)G z4~w-8wZ=Dto_Ef?0i&2tW6f?ALy(+~%dO&y*ieztRXcl%!b|ID$n1KUIPnv4+|QAR zRo!ySnpKcvchl&JPsK$qqB?n^Dp`a z2Ku&c->&%E3%Oi-K|e7*4nbb`O%!~_?1H6?#vR{~vQ-pJbFC|OC+aKHhna{9IH{J-S zo?)A0Nwdsxkd-BoPv$yb_Z#>=*(VJ;s5KE|hep+q1v2^exTc#ifU+i>Y&R0uUByF{aWwlievd63+`oeIPEwvjemJ1U{qr-;Y_F~w z`9u8vyE8%dNu3_|5ul}B*NMe_6md)Gv_%xWvmXmv3SE3W%)l?uU8Z|bC6kX5Z~dr- z*;eRASP6;X0;d2IC!mvsFIcfCI2zA(@@HeX8o(7%n9796K7%ab=(rTQ5Q!lrp_NX0 zlFT)LbOq8eq!UPYBHe)W1f*voJrgq67NlE{o`PrZ$Mr{1`UeGL)5uYaE&4!?Wmzk% zxqg?=wb{9*OcnDqMY4>=>9jOBoqH`Vm&NLGK1TOem!tH&c;R3>`5ULbbR>U*?fOqz zoldL8?JVt@lc#k5oKnsf8JzX-hXW@#c1M8z(zTkd$Gy`j-tu&}lVota&8em*IqBYR zcZxFN_`+eg;}1g)2Oc^D>i6hPISM4zE1)UTTry0HZ1i9HE>n80?fE>i-J#sacI%H? zDBH?w@|P<2o!WgqvVBKsWoz{?T>?E;cAR)=&Lta@O6%j+r;$w##f7qYGMDu!J*m(4 zAltvA(pwj<)Ec`quiTeDznjd?lsvmsukOgrYQk7=exs7F{f!l+Nd^Pf-c*K7a7rWA z-zKnEvHnKLHQF|f-W`4K`u9f9Fep8tk9{me>ZczKl*KucuWf;FxMq%EYjp~~ad!1hynhG&e6rZg;&i+lm5(|IYzK79Gd9EOH z8>*e`i>dZ{+;czFYVAUsDIM&d+1P?O?he1cN8gp>*Dck!R33K++>wx>cMR#6p>Gsb zN+v9On&uB8F9){7Ze_K~=H6c9xkdRIyHgKoj}whH&n>K8`B`u80&G=&12&03XDCCm zS;+n#G_6iHjcn|xX*P+-B%iX#P8ul8w)DjvN{8O+k9&batG+{VBzl#8f2OOk+7WNI z+neK#>c*}NowNA3GQgfzzW=VuPxmG4h$mO$3j2IvR}EXL*b;rpfG^e6WN;-LZMMdw z%h1%7BAv^pl!p-{ZWTI(;1~P-bYfAQ>7bZfL32l~a?Pseo)6>tt@jIfs^6W*ZZUM*NgDs-h7v{Xuz#9Rm^RVBh&7 z5g&faGeN%(A)@?2j7~Yz;yXH5NDG9jGX2tOvye_GYxv)*9Pi{BSzs;mil zJ>js&8&XqLa=r2_yC1G!)k;LO#Nc=*m3+tD)Z}(IHr|Mz8`sLS6wgA9Ye6Y6@G^+$ z9ObWAw^6SMf`=ARcD9KQ?(o$!bvG^BSUo&+P8!EoIf5<9Knu<pg3}Cdr&8VYi${F^aMvBr}TWT@yjm!P{#2<+zsynaW5Xl}3mezj(ct@4NtHQvh0YThbr*b~Av8sYsqk`rHoJy(; z8NmtBKyp*8hyWPM|M`rGePredkSQ&}Y0Hw1pg~2#)qC)`IeF@-oo}wluXqqIUO?uv zW@V;hS5Rp}BLr2D>xIr!Pkr-2WTt|ZLG}UV87#8Pb_CM?1uM||s2*q_=-?~rSa{`FWO$!JcWJq{Xa|u(=h0%HcEB8>*{DYR%r3E_P?iyw-}?UiO41l#kHf z<%7fBfCPed!TA6Q0;8}#PQ?!mq;cPr5UA|Yb`3VP-B4jz`Zj$b|Y_Z ztGY0h>p-L02Ekb95FO1(B$pC{0zx=S?%mwA`Fr`}kI(bMOepL|w8@8-ku@dtB%L;d zl^c|D#85ca$+Mzu^UIsxJU*X4zWm`6KnR`4Rl5kvWmITFg;X(}2UNR^dIANY>dn+~ zqC4)LIUcoNi+bl8EOxl=eR*F#Ppj#fG&^bLiwJv!)%4p3@Z_qQ0(%SxLrk<@fBV;X z^354D`_#>$Wf<`$UOrgQiM<-J`Q>4gDCH1do-%BTp%7!r;Blcy6)x!It=OzX zFOib4;*Un?M#)hRu?`waWgt7a`j>+l$+UF&qX`bE+v%>_xuQB0Y!AMl)Qct$8!Pji*OJrkid!WW^YkMiz=4pup>H_`YCcn8l z*+7Hjd(e!KPx1d!9ep`o$6!1gaW!~re74+6xmHgq(pcvofV5z)&R8K&2Y#sJ^ zXD?M47L2T>s;{c_#-on{k~^TYxpn4t$$`k?v%*whpy9gXjkbNixcu@XjsW#tF%xD_ za_R$Tc>9-la`}v(JvDP5DD#0uP*C7QE#}Af>Ug) zHI+I~^foLoGtt@r_!M15YUm1;zYdOdR+(chG=yfWYF{U21)f!!iG>1Y7#bSlf0fSW-rnZEKK_?z zMXRv{4cEvK9# zO?I++uv9{s(2if=ea}nhpa0T(ygOgoz569)Dm^qhI+X6~>_kP^Lq&SOehrX83qdj| z6{|FI6i$0aqABlWwUz_|pL6>CPN&cJW&E7DK0CU;psevb=&{4Erl)&PjiBmlusnQ7 z|J46b)sM?6@0TE)6W`IPJj)ARBfHpYBQdwt!@ATk|;$7 z#I*}yq7ztOl+~p7@$&ut&cf2wr^;(((&Kdbd@iTQ{R{JfpnCHU$N27@h4l+y{J6-e z|8R`&J-Kto0vO*NI}=r3p>(h(^;HXC+#-cm8ZwJwoCc=`f=Z`fv0&IO+NhdVd^ZV;etHbK?7?Pc8TBe&OIb2BTxUfD& zw1Ob_fdMTFF<8o6`2NP~=7aJX_`O%h>Lvd}mBa0UYwmb0%|JgnZ@gaF+FEY<3SN5< zyQ^x`7h_UnX#w^H3ov0S*L1M1lZ*7Z$k=yy^G?Ig=ELV>YSZ{)vE(LF?rttC$%2E4O4d=OiR_(1f3e9LuP{PNly=*pFE+Z z>gh>s@@UhprMsGrF?=Mtsi5>lwrz{7FgBh=I-W0KL%B|W)_<|w=Of!!Y>#X=oZWmx z6k7Z(Tm0k3(Do$C?Ns`pwEnNa3*&<_yceF*wo8R~PwaG*yBRvE+x|=NQn@O;XKsmZ zRNnOM>W^L(bQCAd^sE|INgS1yGRoq0Q1x6|8MBO^nV3R6?sd& zktRgFw&`;UB4t*tfyzyr{9~&c>VrRML^1ca)d~)w3U)7e&wN>S5?9p8CwyDwg6sHz! z>M1Scyzw8?)WivpdFD2CckHxsQx5@V<1o}Zc(0P9Ymzyd%Q)6-18CJFbi$KwwaxA5 zCDpD#G-VoGYHN%wgoTr1f`zmzEiKL_C$SKL5p3vTZ-M|kSm)EB7axB9GJqN)5NB{y z?VH$3)6zpO~#D+XzKPo!{>|X*?zfB(lw5kw|gA&XI8}x~)mUOzMDxq%(=9E6~ zaOAH6KQwL8ikXxUbb^;Oov0DiRjI2S_5-5y^WkkPwuQGFl(8{mt1+F;rjd*Zo;tp= zCs9qCkJX7DRKa)2^{Y`dX)b1O2~tQK(%aLXIWaHno8KDxaDw*Ek4+v`z}I3g{Hb^J zHFngm3BE5$yXxB#$F$+=t6)8G3rsdFAXVbz^VR!e_M^29-(J34QyRxMFR4HkFEok}Ym26ziGwmxln9MxQmYOayh&_ZCLYN!h93u3~hEqlkTs?hd- zuT*vF$m+!0s(P@9LRB{??Qn&Z1VO}c2!l?-kz$%ob2ah7Nb@-9Ny%FxDR3gFlHwXr z1PWR?#c3eU(#mqxM0s|n^ISCNv*oeA;eJy*<~7G|7)?dZ&pq0&DO7J0KZz~oR9c@A869TaRvxWSr) z@2c5Z82m_}jM5(CS%3QoSjYk7+B+{7Ma4dFoy?@yg#lAHhl$ojIdC6Ul`5!$wtv-K z8X7%>Npid}iYlmJQdx?EF{;oyz5Gc?077l)4d9~u7vCK~346;W(7w4?Bd8^*hOS@{ni2&B z3lwP3Ie^FUG9Ilss`Jhm4j62{`&MUn*0Y|jP=@Xz2S99;h z{tA&9Z2;3Y67138tV`xSFny(-l-w9^2QT=o>)1_d!7}%v1yf#G@XU{CxP!JT5DUje z@OlUTG;DIB^dj4f%CF|^gJ-UkOV%L3|D3ERfsOET_by)U-s?(lv75Bz?ggc(h?rGw zIV+XRjKt@_cq;IUEfruGPBVeEizZkWd44&40_7%t$8*oYa3${neeLv>gyC5QSN3XX zjE2$Yyk?Y2Cin+t6)U!mx!Vbulb6Y{fUk&|&h_xgfLmJ!n=D<#vJ;?Jc zOtWcM;OoT+j@;=JjAse-5>@g~sBG0ZfD^Fh1CSc>a~#Y3SO>)BGQk_ zj(l+<$&rr1a<%AALD#5n?)S7nF_7Ft-y<$5Cxo}IOG;>!Uji2(hw}FaY2sVg$x1~N z%b(P6a};&OCgvD9R%Zi@)+#5dG*xad*|Mk~tI$e3X`$t#QaNcBvS=Dw5V;)GGIGU8 zF83et9_>gbYNN57#T<^oEC`NFk6ANf?3YqX_Zz9*EnZjfD!Onq4Xljb2Ka@Pv#<>=oA{Z z;^^b-N?mZ0CYd?hC%p(9orK{bAf59$IsGDHg&XAZY(y?IW!>Pedx^%cp1?6nYAFBQ z#D|CA02Q#sR95~JA|?$EIX%472ET==V(|v6OoT>=^s39}Pl&VxF?~!EBgYq-tO2=# zFwtV#IiJ^J{=Jb;m+!X40`5wS<@_?Yi)mS;aNfmPGJu}mLX!d}F=FAI^5t|ho9(F- zO>7UMvO530DCQJ=o+N6V|GheH$=Qn9V(t=EFrte%lVI5cNvfU`v#fr0AFFVS`H48L zgqtQ5@!h*=F-=*EwOBP2qca&4(6X%{rY|(xB__MlTfEj21WnFDmujC?VWHh>Yh4FG z98|GvD<{l%-dO%+xv?}5z@3CqSRF8{u}gSCsFTSOO-O>3-V!{SdYcbuwa3e)kxxoN z+2TN6S=!-3S9z+GohHd#?e|%w2uo2m=RncaVMP7T5e(554_k+>tr zE*SLQB#{FZ2ZH9Tl6tbtra@k!K%o;75|mKp%@#;h0_Q9{sS-IASQ*r^FGPW2vJibD zAe=wZ@hL=|mIw+QVy!;^b5#$(_~(2j zty7?LIi5`-2DH$*(ARP*2Z@lzg;&EKA<1R>^Yj-r9>6zyXMH1<&#F#^%AWlRmO@{L z&~X#5M)fmK#93)CUqZQz5FVfpo8AJkV{&5RI^M#sLwdal^i41xtc48l(ux3Iz9RKy zLT5&rHD0}Nib>Njjor#RNadn5(D=y3!W#nn*Qf8(7XSj&0R%2IEhK+a06m6^!A>Y@ z9l&N!kLLBnB#O9i;yS?5#IXrDXc;G3 zp?*AjqNlE)iC(B2s2LLklCqoxVn|*@*%g6Uh%Tyx2W5q91~fK32k@B`)IbdA4Af3v zAG8^~1c!jYSbFim#C4?}ws!(eQkK8{?TLyu3536D7uuCN3qQkefoVe7v zO!O-i*MV>^G*Wo)(m0Xjk-h;Pq#Z8hhN*+3GJC7Us`d~U33(TRSZTzdmn6|^8m5wq zAd)B%IsgJjLFNY};}HvCy%;d_S|yImS6W5HrWbuJh7HQ1z7oTRBkGrc1^B|?;Q&c) zO3`*JJhXyyA?I-O*v>Fq!xO6D3|+YeYEZt2CFTkw(O8r#$w_n=O+dsGD1?o$hF}n& zNo&H-c&WTWvbh6TRhHQUF*@E{2^n=FMI=(^Gl6s=kdO>UdT}b)g275VC89ftN;sUn zOE04K6CdLJiSa91FGnw}@Tv9G9Ym$t)w^Z@Vd&YyG_RDGNpf~kmQUaJieQS8nao{5 zkch1SPF2*d3`biBl|};+tc5QYiINEc8rC8ZK&Ng*f2;gK%*|COm~RC0>4PXb%qf5Y zRL*d)90WCy#zAl$F<{Fb2BLCcn^Hs?s!S$?iOS?pC&Z~DY601s3zH;ux>H$`;In+< zBjV=+KyqA8BQy^9AeXeltENpQ@(-__Kg20Z6Dp$9mR6*+^}$b3OWHv@#eXUdaU532 zh|owsA}52OOw>jkj!rmJb8UYYpQ3grYNyRY9`cInRPoFCh9I;Go{1@;$&%tY6XEzK zMj{9ga~6o5Hu^+t85+HE!sC%7aMp;zu0vw#+;+~gWU_0=@)QJ@%a@(At#cx^d`DMl zj~HuQ=`YG47AeZ05n9CdFjxtW1OhJlBAKL*sSqk`0_Dm%gXSDjf|eIyPnUlWUrm_3 zD^TcPF6}8p!7kUR@+)N!pB4O!LSax_S|J>2pirjR<)u9pICMIY=9K z6;*PX>F;H}Z`i!)ty|H=*;yeha!rDRx!^D~!}IDdeCyUt$gasu*6OPBcR|oJ6l>9= zG{4s<(N4xXI~di+TuQDqQ<}*z#{V#ufr%{xfNXkZ6TGgoP1A7Ff-IQMu{j#Y`)AZhfI;_YgrH=qHUsu3ep0E*6oGhO_)+AP~sng zcaWe;>;i=*NdrVmdk&teeibVNj5a>(p*C3ZVr276)<^9J8^(TQmqdt2{8h zlrjOLsTtu2M3af;jH%L|uY9GP8=H2Lt-XVgpxHBKmnVxu%NE1@}tNBFgD6b^oDz3lUNsEXXp5 z>9T~aV_VrV>{NCh{AYcV-ORqi_OmD1_t?+azr%l5PA#U2p?a7k=g5m(8y9)5&Hv9l(!um1xcc9QANGRFYIV`?sd*Qy$5LBsq2E*UF4)WS zvX=|^=XdWOpZW_$FQ`~8ryE5Ns2xyFxBN3d$I)W=(WPg8T3Vx|^`xr(CqMn)#&`Z- zg@=7pjd1?dybCs@j_NY2EMKr+%*$Rb;Gf?SZp!E=UmOfC`U^F2=Cv{B*Dl64|Cygt z;9~dzKYgaur;O{r|4)7j8TtQJ{`J4DUF_z3B$B7!Q}Zs^@`LcqAJ5BPF5sWvy?cD> zFBH9?Vzr!(Eyg$hnV;imG5nAULf^Z9TENDYNBUk;9w|_dERcnie~P)RUmzt6DH0aY z)Ns`UR}2Xy#Jo%uC4{QcqLLQSX9!(|nn{91-s7QRm3jpx^4IY+zK*B z!@dGnril*?;v=6Tz7m?X>7|QSq~Kfn1~ysv4_dYtNt?{F(@TwKY4lM7GSYT1{EYKH z07MTc4?qix)-H%)EjWubfueU4I66^!O0k8xJ_is1+b`;0=FP9@$OKGA2@`1()kctk zgy<^3lt#QeoM~5tmq@LL?f(Hqka9Y882Rx!n!Ix#t%Lu0@qitM2kbCReo%#jn1LtLOOD#kjhVUp;}Vhxiq#{_n;W zs)uTx{CSfb8S>{%TR<_SbY3-$l-{=?rT66Do9+kX{g}L8A@3*TJ^A~l{N(5RXq?g9 z$vr4th$olh$;C+bA*K842pXQK>A&z zk0AXK(x;FfK>97Dze4&V(pQlF1nKXQ{v7EWNPmO09_gz{?MVNV)QcLoG}vs#oV&!P@@NUa|C;3^n zy1u@;rmn6=ru~cDtIy}A>UVR~t#is#zq@o!`E$Sfd-s=WV5PiidB0eyZJW026BqgJ z`Z?t<_WfedmF4xKn)>OVs8>oty;|s*`fhI8u0A-(g_>n zDkoq+lT3`F2m;iD_+TR7<8ivvbmt<{#nrkSbYFsv*u$9hexQ3v_ZmWo=$VCi;gL1Z z`q^@JDBI4C!zRty?8EHi?9=R4b{F5K`8NAk_FMKxc+1(Zqq*{OK0`i_tMBqFGHw&I zFu5qq(=!%>^g^-5_UpckXLs^v19&#ZulC_eltQK!+{%T)2!LIHw|w5w^@2b5LKsOS zO~c0^%7c%=X52O7&P#U;a|rub{yz2*{;mP<8uED3K)(9%!`B8}594|m&o99BN?fnR z_t+gpY1Mc#fhU*`bn8*pN01(d`@>`@G&@ri4lkY`j_VlGT}XG~8C@Tb>t3WMBRv_< z^0+=7*F~f>@9B`9hx9xN$%VMSP(niU`#wBhiaei2-2+H(!LwTc-HjZ&i}B=#c=AK! zdJ^fAc=HHGw!=c37>$6!6g9m;T`H^L0kuMjXGHyuF(S4 zg|rJT1a{a8T(7`;)W?8jHX-v8rYY|f(kbMnYhag+A>DhcJ!)KL<~)!;=e;eg-K)^?9WGklqf6>5IE@e>ZA53)lDJn!W-4_&1Lr{Rr+! zcJLy74)@O?FO~BGuBn_KAf<1BVgAi8kkWf#m%o3V%MYE!j&_$5o+5dgl&RL;oqCN8 zIDSd_#TC3f;*!fC{7U`0l2#;)BuN`G*q*q=r<#X)9*0lNn~aL(mmba2+1DuDary5=;wRcNR5IP36Kg50jd&M4U@evnETIdfi#n=3W@$Br1sl&)Tw7jA>;l zwM@dH+6NR1iyBAYYisJ3{ic;2w6$x$XIZDyS^6FR={W6 zA?A$}kxelt2JrG9yBu!A!sXns)`w zH_PYbQY7D9yS#ly%~r`zxt-1oBArr!YJPe9J~jWL>P4G+5fC4) zR_`k>1O(Sov(RKJw#J;KyP$ekJ?|p%u5!cStqjPH*f0<9kXbT5I_|&0@BhyGncvR5 zp&-;f@*`fu%#0d89`}eUiSlK9bKHMZ+#{$1;+^CEL4GgeZR7qS&HEQ||FFF0ajJ3u z2)~yRmT~_m-K!ylasL>qg6iXgNhmT&T6=>>N!dH_Pqhdi8ACT6>^z=`qK!K)z+YrN&?~ z)z!G?Hn_g0OF4S_DrW=2D;S^;JF4`uvda)d>zd(!?0)t`TE!Qr(%iXiq4lF zfBcUFlXTOuqR6i3Ky(a6H#xIKG3u{@ZJ`6+RfM9CG>axglU3zqIul)`GjSiMWZ7L0 z`lv!`OjC=t#mKKdO&T^Vi?1N7}Fpus@)AzD6WoQ6!S}RPOjX_WOvax0QL>Ml}MP5(zh>3yk9$tk(E>6=OJN1^X27pev@srf&oodG7b znE?7P-}`=F?(fOjyE{AOoHMgCvpah|ulV2{UNHx6^ll{HUx;_y;drZp1xg*Kl-Ks) zYhH)6gWr4gws~W`F{uYXIQRipA@azH>URbdWejZi#$OHUt}qZWRU`O(%?_(J6P z%S28fo+icchscSvO--lagp?y%Ceo|}>=lWTevIRZcxWPJO6&y0lQfF0ijT`*`R3xPc&`HV-@Bq+;r)&ar z*%H;ZYz&m4WdWQHKZ=}`08JqSdcioD4Ohbwk&`FE1#lxg2tz&K_8d^ zXTyBB2e`(x+6dU7^{4Q?NSgpiuMK5s(^uq_Y7m7uoCf0o-JXI@PC+N9tQBcH11^C( zU=^V6w%DQVFU*Kz_jb(zoww@`=(Zj9X?G|5C6d|@T0u8JSE=YK6^6)!6&d!Bs&7clie8x!4yFE**5~Z&qnvzgl&&r+oRX^=(Rm%>_8biw1GA7 z7HosxL^`6Ij_9T%y6K2+I^wS#@v)8zL^_erPUxZ&y6A*1I-!eBufrCR&Xl(^BTzL5V0dm^j|=n1=HXn zxCI^tbknm1bc6vSy~YB**6SKr3TxpV_)6roZ$*0h&;-&%`kVr}Fak;eAM1lZ_8|{_ z@W;My!ww*?{m3g%noB?O+HWwFz=d!pJO<>sA9?Oap8J#M{^YqodG6mACc?R}5FUb; z;dA&|WB@)i;5qmJzJW@SfyY8?=nlhR23!qGV4uh!4JSZ4P`?JD(?RHT&_R*G4S;h8 z_kuzo&LIkp1IjxjA4b6$a0QV6A&&w1AF>Vp5E)9jhf?mLY@c2SlA#j}gvoHe$S~|R z3_lr$pA5rKhT$i}@RMQGx#9KUBS)1d;e;b?3)8XJzrhNH3J=s!iq)CIzhJsuVV$H#JfEXT(Z*Es6VIO@*0 z-$lkB11$jm7>|F9p9JT@4e$Uw51T{^SHWxW1z?v6)gckE;lvscgDmI+6JQPy$3)_o zNE{Q1W8xl>BI;C8BOv{v92gF>09_TKtD@ELI&6XcBE_|U{7q^iG8tV@X8)9tA|+i# zred$D--}Em-su}fW*}!?CQ^F4$SiDj2Kpnf^zJR>kFhyixTzI7?tQ5H^3cE#aUMO-)0O;!0i$rdtEVq9oa>s`vi}s4#SpkPc z?piK#_fYsjWbqp!OD+M1i@;v2! z0lmLKIoDB^7rTkPR0GiI%L_zaAuq4?0Lr(Xv|qbe&Ux6iQ6XZX$M>vKhR z*MpXTes>Rsw?w{~A+iU5+4F|Tx0LT&^164w$ag=8?As*rJ$C+qdh^3Rz|KG3E%MVG zk)J8w&np32{!Bi9-V6A~{`!EA?#KW3_k*#3j`m}N{kMz!LVUkc-e0lfZ>Pf~k>By7 zKhWtPpTmzLf8Hl@Ad{buLLYx|?q8Pz%KU2&{3&t}KRJj#4{Za&S5AeW7^xJ(eo<;J z56PSe_lWWbiqbJ)3SWN$`$Prr!PlZ9x5I<54nBgtq7n#KtrRW<)oBh-h^l)Q5LZ3Uug~bN!Lg7GouD_6&jx3}6>tkY z3@^h6@C{UoYFGz2=h%~>tEfgRL^bx{IZ?;6|M*u$ov>U~lLApEGTm|FAEKI$7Zsf; zs@YIcu_WN8QDQz2e^L)o%?a0>ytgVw244UC}Cq zx?CixE9ZCpK~y&$gXtC()xA(u4tdEPE-H_*=j{-cUmMy3`}41X_eB*P2k5L|7T|jY zuZZe_9(xj=zN|X!98tZAyAR>}J}Qd7sOq;}RR09v-2Uir0Oc7l5oQBrAAp?(kazl; zY5;m2unj2JK*~Fia|Tl8ft{c)5a&S3GibV~!F8b&ei1ct}KWeO~(cEAh{gbFM_{JD?Ifndyx z6}a6vc0Qorv8w?cjK%N9;y+{m6g93EParNzAnNjQ@RO)3(DfCWfUd77 z7Io$0unCCks)i7UAy5G~!sD19ikRA0`#^3TQ0Z+-h;nHEky4N&xL#886b{@ z=<3GLMcqW1ZbGLw?Gtq~_Pm+2ZXONaiMoX}Z@EU)t+imVsN0G}-QGjg9Zg^uECTYp zi0_LA0Qp<=BAe1es5ef8bKnb6Z&DxMoD2)$Ucg7*#HREu)tl(qWgoJnx|IckzpN9}~5)Ej%ddy;(p!?@tr;0eSi04)|HrChGhq zbWVR#eRu)<#Vh3({ZJHERE|J*@dc97N%^7U0K z7z)_stA_y_@1*=YGhi&t1IoN}tEgQyAPdI94e*kvud&P5IWQa0<=5DCcQY6W_|a~B zcsKd}CJkl+w*LnG?`Z_2yN7zVXM?D3@%e9iz~%5fkmtP}02}OG3EztP?j$INJAv=} zh;!eWfDXT}17m>rzo%S3^o6^C{QQW|{&*R@CF-ZTFbWm{W&QaWz`j3YC;F^vzk+UX z6}&0xm+CMGDDN-tiu$!N42PTHOHsciLlLZnL!y2st>3SMEu#K78LkDw{fVCcWd8wl zcz`nf6@k+Ld;PUh)In^0uq#Xl(mD8xs6$Nv-5#0(R|9(B&1mWnx~U|-$`Qc+%BSH= z@xqV!@vlB`2HXth$I7<~FWG=r&>#3M9d#Q#2iwH+IOeqxFM%KRskK48`uwVU{jN|9 z^I#QxBwho;HDG^(S+E3N7q1~R{|))Yr7D{63m46I!LQ=Ah(IGqfh;J1(_s>v375mo za34GY>)|8V1;2`yyj#4KPsD3E3bw#L@lL7_xiA&5uW)-I;gPSt-!^<)ozA~VO&&() z?}H28U@Tx{=arRR4|Vj9=k60X7SM$`L%iYA1rd{p(p`peKjSif0`8@2E z!Gl!Y_$9F(r1QV{aEFyY?v^AO z1D{LzbjNFt{tV|>{@*@*@$moo$J7P;Nux#_{W&@nQ-8)#pT<=Fj&8?>-%e%ASwin@C$q0HWX)UwXx!_hzG3A^{96bo% z9xLY4GNijYn!l=XH6vK|MVHj5kvcb3DLIl zuW+Afv#y{$D#J$o$=x{WYwNJZD&SjxTCLucI)(Nli_)f0=NgBfar{4t?~N(l7(#YO zj}>h7#LtUJZwU8wN7G(4VP9v-A*MF$&6FhaGba3&%$cLuHg%>Od-`*1ApeW7$0+of zC$Gxq^0{K+hpH}DtD15^cJtXR@A3V59#y>_i`>oULhcY>Eepf;*OaCarBTGvkIy75 z(UVwhS-Mk}c41lilVg*A^D?ptJW$()rwB|-7jS+KZHQ^p2I4m@*)xfF+M$QW#FE1C z&SC76IM>8t+J>yK{NvakqpdBYP3TA1RL*KgnR?3<%F~JxMaY$Dv1anlx^AInjHeAC z#WZr?4IdpI*1_gdK&yEwxylY(frgwv0IxAMI=k`@!Zaj~BF>u36A+yVy_8a#*k|IE zCdLdt-H2@rdru<|^@t~*GmPJu`eNizZ10h;9?WRvV~v(rs4sElQGT=U=>7fv!~Ubg ze;!)wRZ6mh&kQ+7e&O9Q@5!g=ax(uX%O*m6AcKi}X!sdGoiKbZw_w5h=AsipiQmIq$rfk0Fv)_JFLm4~# zy=wo_axh1YwI;zQ;nvwQEtEs06xoN5IX+&7(xyC0eSMInT0_|TH1+g0e6lq)Bu1$Q zK%5q#f*NRk(y%Fv$2U*MGu-#e{lwH6kL`jbd+|wR>&VAk&5y188V}9jxwWq=|D?>C zepq#Csrlcu@~O(Lm48+4qO6@O_g5Yy{xouAd~mxwkJjGgGZ&ri4K?`(Z#CM>w?FWq z8`-{|Ft5rUd7DSyGugk2Gxy53lw$#&c%ht2nEOJm=bcEmW3@f}1%+cYh!vFtD+D%?FZPGXI%{8yT zt;)y0-~QM1cu%w~TUgNWy|ujf&b+?O#cSf;Ql*FgBvqTr-Ibdw-=v>kTbQ0c67Hz& zD6NX|MF{=!-}_{oR(2xo-znTl;O)iyr)Bsbw`WgL_ zeoud@cj#~Q_xk6ixlMaD?b~!f(?Ly#HyzbqU=?CPrIFJ4Jg%2S+DH zOQV-XZ;9R&{iE57&E9SHWwY;_9f~Ey>c*n6q*zKUHI@;}jCG84jpfC9#m^%VR5IkHl8T*2JEUJ(n0HHb^`!F_xH=n3C8wactsMiMJ&_koZB8 zB>72^q&i9Ula5U~A*or?$w{q~vXgoy6($uo_nOyjo|t@h@{;5g$xkQ0lDs~7L-M=H zpC<20sh4tWO6QbrDLEv%T}Zx!x5#?RTrU z$XkN7?!#KEy(js(@#nGDdT*omiMN$EWY+N;`^~XdTddXLu(c{eYh8-9=KBl$W&VTy zD*q*aJgh2tB9Q+n;W|}wAQlNeOT)uthFlkcxSC>qhpkndGSyjY7uHJJx_Il#1M1K*)>=OI zLn~i|XRw?cdcSg}k^Bv_qUwL;&4*~0Dle+MnE#hnUQ&56+ZR?|WR6#!Svj+EhC0J+ zdkwt?UVWf`+dsu!PW7kyL;a?HR^O}d)F$;oWrxb_N?L(K-@#jlX!Q%v`U|EDvyAJwXg>>RRVo(Z{Q zJa?N1e>G^wC}e|hPbqt6?3lV^=?+?<9m{qs<^R1q7VWqLdFzhrcU&T}{fX_5?I_v7 zEt%~*;n4Pt+pkAnx&1Q!=bBiy58pm+`>5?%Y&G2W*0xz9TgQG`-5e3wvI{;D`Qn)^ z%eSm#`>HKhZYkU{nyo=!Jn+ScFUEhq>%&JsT#-CGc}mUt2|p#ELbZZ_uLG^7`b=## z@%W4UyZpt-#s2gDI=uZAf4$G0ZuX!L{_ipWtN#35cBaXEKYE*Q+x>n1ulg98<%U(E z|1Nbcjx{p-%zqvG`%(K%x6moNjZW8{b&k%{{qz7mNT04p>LNW!PuF->2%6B~&SAek zThGzw>3MpQUacS3Z|aSj>!scoEDjzBRs<`9$4%H^b%37)_(}K;O#~Z)jr<4uXOEds z<}X<9-E^-1jQ@h(=D)9x^KaG{`nUO}rMgtl@wfTg^(XpDEPuED z+TW^=_ixdo^%yykFB}VJE+QsUoVnI$lN9N$OILb<*r~H(Hc{1*!KxV#_{HROl_Wz|q6|~bWt3_u6Vxe; zui8oxx7&+VI~lK9%PiGN&QP7DOr0v_s*9Yha^!r~Q!Y|{K&P8IAm+UXkC_dihnos%}*$>H;}SR;#(PU9FO?%q(2SJoa)m zTRv0EWwUxnzMw{LQ4h

JjO$7_q3X@}N3XN>xX>T}_fMs)qDaCosafLS9oh%G)fb zeNTO=-shdCo79KuBlWTRgk`mx)fZ|DJ)nKGu0NG~ad zBD?fgdbi%Hcj}LHwoay|rs?*2kN!^opnuZ)^{@JO{g*xzNZ%8l| z1@yiaaz($3>-pW@V)|e|`KNk6`(3>Kepl}oznk}~-`)Go&+&fubG<+OJnv6G-#g$J zcz^jlyn}vE?~vcitMpIfs^8mJejnfSeZQ~YkDh3MKkx_m5r3ec;1BYv`GfuH{t&;0 zKh&@3pH81{m~Nt*>S)+1ovcsMZDpWpD#KL^8KIJ8q)L&Qs)Ni{-DHl+lXFzAoU01t zJk>+4QN!d~HCz^`F>(X_--T+N+^iNOTmzb=2OH&nj5 zOS-GtlB151TvbQ%R9(qe^`t=6mmaEt^i&O{mpWEXQ;is{94CELW0|Cwmr?05MP*2d zipx}$DbrMzOjp@5L$#MH)IhmX4U&h{S+at~t`DnoZ z7t0!Ti9De$Wdw8?W5-8jn_4M5)N1)kJtjNV(%1m zkRHV~Yd!tyRsPHVt6aUl)Jgs~{vO?u>qbxAhpWgCJx~wwNBbY>$y`Hb(AOTX3+cg4 zB4b!Cb!(Npy_eXG7r-%bzw9(^y@kvsKW`fh!dUO=yWmM+)V>Pz&+Tw`YYulsNK zZ~AZPtMxVhQhJFG>xcCt{yqM^`cb{ozt6v4uhFaYYX1R$IX(Hu=|w(74{@#DpdZlR z_$%n!zocK*Z|UdtI%ekiYthGE0sH_Nb0}n@#lHfXWbv;-Hn;dZ;l@m7i0+O|w&;<_ z6pKFw+0x=)jXViX=6byv*~;QSi)?Mt^jsK4h4}PR%oxzXA|jS8Sp18T?JWLUWGZwZ z%vfYcU=G>86xrFL&qVT+ok3S1yIAyD$gURuDr7f{Pmhe=KaWm>2lT59zPXCi!!h_z zBTd=BUxPGhgFY8I&f-6U9B|1OJOrDll z{40@5Ejk~$%%XFU_gHi{T1i@eX`KZCsA;=h1=z@oPyms@-@x_!{1k3&9W@oz@1 zu;>es4_o}(kfzKK_Te678}xSMN{cpjS!K~i7sd}BBfLr1=off0kVjxG+LY1g2>f+O zqZjb+MjG3L{u*g?2mV&1u?^_sk*1vB--3J=o@YPy;~m{0^fN@(!7GpjuR2aeu6OiB zzUCN&d>u?54cjx5Wihth0PldY+q;g7k*0rVH~{ZC79ov(KLTUVk1h0Lg!w~@DbuI$ zIhgY{J3d5y;n;`V;`j^srA3+YZiTPtYkSC@7G};EW>}QbkI@~dC~`OKVf!THx0Z13 zW-r^Mqk18~w_n}!?Jcp`i^QyZIN!sz)=esu`tubqo$5#NOKM_ zJIf=cju^6rg_&3$H+3W-OquEn$|Tq7+lk@YRi!SmRu z;}m2=3v*&Te(Gq8Y-Hhng>X%^q#_$zxa-QJsg8EY6D%?w*~HNrd7?#TA)7jkZt;oG zFYrnFzZRq0n1wqyLSNW&D$?izxML{vk1bu0EiBxT5c(~a9At{cw0ZQUEj^JZS(wk| zu~$bQWGf4IOLzp<(GS_i!c0Gp#5#;kjgEl(7d#T{7=Sc70`9o-XspB7I^AM?jXsIx z9c0|XoG_2NI*hHeEX*_Wh^xc+MtjEyWCsg(BY33MF%oI?3(PU|SgT_+(&!PGH|OzI z$0%f13v=nBx;YAw-7U;m^Vq9nJTlk9oduz9XfghfZ{a==kGwickUcESfeT|5%VcCP z#|-3Y7E>=(Z^s6tu??7Oi)j}^j1Tm)m}?6o2g?OWV*@bPANqKf3gjS*X|EY0S*}DH z+kk1m87o>2G|LUh2^Mo5pr38I9a&^C*9t~+7Gsx57ISS-M%RYBVTy(OfbNl5 z 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 + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/index.css b/src/index.css index cee5f34..a1e0f53 100644 --- a/src/index.css +++ b/src/index.css @@ -1,7 +1,7 @@ body { margin: 0; padding: 0; - font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", "Roboto", "Oxygen", + font-family: 'Karla', -apple-system, BlinkMacSystemFont, "Segoe UI", "Roboto", "Oxygen", "Ubuntu", "Cantarell", "Fira Sans", "Droid Sans", "Helvetica Neue", sans-serif; -webkit-font-smoothing: antialiased; @@ -12,3 +12,13 @@ code { font-family: source-code-pro, Menlo, Monaco, Consolas, "Courier New", monospace; } + +@font-face { + font-family: 'Source Code Pro'; + src: local('Source Code Pro'), url(fonts/SourceCodePro-Regular.ttf) format('truetype'), local('Source Code Pro'), url(fonts/SourceCodePro-Bold.ttf) format('truetype'); +} + +@font-face { + font-family: 'Karla'; + src: local('Karla'), url(fonts/Karla/Karla-Regular.ttf) format('truetype'), local('Karla'), url(fonts/Karla/Karla-Bold.ttf) format('truetype'); +} diff --git a/src/index.tsx b/src/index.tsx index 9ad019f..1c7093d 100644 --- a/src/index.tsx +++ b/src/index.tsx @@ -3,4 +3,9 @@ import * as ReactDOM from 'react-dom' require('../node_modules/react-vis/dist/style.css') import App from './components/App' +// fonts +import './fonts/SourceCodePro-Bold.ttf' +import './fonts/SourceCodePro-Regular.ttf' +import './index.css' + ReactDOM.render(, document.getElementById('root')) diff --git a/src/react-vis.d.ts b/src/react-vis.d.ts index 3478656..b8aa4b9 100644 --- a/src/react-vis.d.ts +++ b/src/react-vis.d.ts @@ -7,4 +7,4 @@ declare module 'react-vis' { let YAxis: any let XAxis: any let ChartLabel: any -} \ No newline at end of file +} diff --git a/src/requests/datasets.ts b/src/requests/datasets.ts index d3a9750..6ac93c4 100644 --- a/src/requests/datasets.ts +++ b/src/requests/datasets.ts @@ -3,6 +3,7 @@ import { genericFetchWrapper } from '.' export const fetchDatasets = async (namespace: Namespace) => { const { name } = namespace + // eslint-disable-next-line no-undef const url = `${__API_URL__}/namespaces/${name}/datasets?limit=700` return genericFetchWrapper(url, { method: 'GET' }, 'fetchDatasets').then((r: Datasets) => { return r.datasets.map(d => ({ ...d, namespace: namespace.name })) diff --git a/src/requests/jobs.ts b/src/requests/jobs.ts index 9a7cd9c..f213208 100644 --- a/src/requests/jobs.ts +++ b/src/requests/jobs.ts @@ -3,6 +3,7 @@ import { genericFetchWrapper } from '.' export const fetchJobs = async (namespace: Namespace) => { const { name } = namespace + // eslint-disable-next-line no-undef const url = `${__API_URL__}/namespaces/${name}/jobs?limit=700` return genericFetchWrapper(url, { method: 'GET' }, 'fetchJobs').then((r: Jobs) => { return r.jobs.map(j => ({ ...j, namespace: namespace.name })) @@ -10,6 +11,7 @@ export const fetchJobs = async (namespace: Namespace) => { } export const fetchLatestJobRuns = async (jobName: string, namespace: string) => { + // eslint-disable-next-line no-undef const url = `${__API_URL__}/namespaces/${namespace}/jobs/${jobName}/runs?limit=10` return genericFetchWrapper(url, { method: 'GET' }, 'fetchLatestJobRuns') } diff --git a/src/requests/namespaces.ts b/src/requests/namespaces.ts index 0dcc3f3..835355a 100644 --- a/src/requests/namespaces.ts +++ b/src/requests/namespaces.ts @@ -2,6 +2,7 @@ import { Namespaces } from '../types/api' import { genericFetchWrapper } from '.' export const fetchNamespaces = async () => { + // eslint-disable-next-line no-undef const url = `${__API_URL__}/namespaces` return genericFetchWrapper(url, { method: 'GET' }, 'fetchNamespaces') } diff --git a/src/sagas/index.ts b/src/sagas/index.ts index 3a87de5..90e11a3 100644 --- a/src/sagas/index.ts +++ b/src/sagas/index.ts @@ -1,5 +1,5 @@ import { FETCH_JOB_RUNS } from '../constants/ActionTypes' -import { Namespace, Namespaces } from '../types/api' +import { Namespace, Namespaces } from '../types/api' import { all, call, put, take } from 'redux-saga/effects' import { applicationError, diff --git a/src/types/api.ts b/src/types/api.ts index ce2510f..110459a 100644 --- a/src/types/api.ts +++ b/src/types/api.ts @@ -18,7 +18,6 @@ export interface Runs { runs: Run[] } - export interface Namespaces { namespaces: Namespace[] } @@ -68,7 +67,6 @@ export interface Jobs { jobs: Job[] } - export interface Job { id: JobId type: JobType diff --git a/tsconfig.json b/tsconfig.json index f21cd53..77be4e4 100644 --- a/tsconfig.json +++ b/tsconfig.json @@ -12,5 +12,6 @@ "skipLibCheck": true, "esModuleInterop": true }, - "include": ["./src/**/*"] + "include": ["./src/**/*"], + "exclude": ["./src/__tests__/*"] } diff --git a/webpack.dev.js b/webpack.dev.js index 18c64ee..127e3da 100644 --- a/webpack.dev.js +++ b/webpack.dev.js @@ -14,7 +14,7 @@ const webpackDev = { }, proxy: { '/api': { - target: `http://${process.env.MARQUEZ_HOST}:${process.env.MARQUEZ_PORT}/`, + target: `http://localhost:5000/`, secure: false, logLevel: 'debug', headers: {