From 0de827aa4cda222e55a83dc2bf91333ebf5580a8 Mon Sep 17 00:00:00 2001 From: Christoph Jerolimov Date: Mon, 18 Nov 2024 11:45:35 +0100 Subject: [PATCH] Migrate dynamic-home-page plugin from showcase (#39) * chore(homepage): rename workspace Signed-off-by: Christoph Jerolimov * chore(homepage): migrate dynamic-home-page from showcase Signed-off-by: Christoph Jerolimov * chore(homepage): add changeset Signed-off-by: Christoph Jerolimov --------- Signed-off-by: Christoph Jerolimov --- .github/CODEOWNERS | 2 +- .../dynamic-home-page/catalog-info.yaml | 13 - .../plugins/dynamic-home-page/README.md | 13 - .../plugins/dynamic-home-page/package.json | 61 -- .../plugins/dynamic-home-page/report.api.md | 25 - .../ExampleComponent.test.tsx | 41 - .../ExampleComponent/ExampleComponent.tsx | 53 -- .../ExampleFetchComponent.test.tsx | 34 - .../ExampleFetchComponent.tsx | 323 -------- .../plugins/dynamic-home-page/src/plugin.ts | 45 -- .../.changeset/README.md | 0 .../.changeset/config.json | 6 +- .../homepage/.changeset/dirty-actors-bathe.md | 5 + .../.dockerignore | 0 .../.eslintignore | 0 .../.eslintrc.js | 0 .../.gitignore | 0 .../.prettierignore | 0 .../{dynamic-home-page => homepage}/README.md | 0 .../app-config.production.yaml | 0 .../app-config.yaml | 0 .../backstage.json | 0 workspaces/homepage/catalog-info.yaml | 24 + .../examples/entities.yaml | 0 .../examples/org.yaml | 0 .../template/content/catalog-info.yaml | 0 .../examples/template/content/index.js | 0 .../examples/template/content/package.json | 0 .../examples/template/template.yaml | 0 .../package.json | 6 +- .../packages/README.md | 0 .../packages/app/.eslintignore | 0 .../packages/app/.eslintrc.js | 0 .../packages/app/e2e-tests/app.test.ts | 0 .../packages/app/package.json | 2 +- .../app/public/android-chrome-192x192.png | Bin .../packages/app/public/apple-touch-icon.png | Bin .../packages/app/public/favicon-16x16.png | Bin .../packages/app/public/favicon-32x32.png | Bin .../packages/app/public/favicon.ico | Bin .../packages/app/public/index.html | 0 .../packages/app/public/manifest.json | 0 .../packages/app/public/robots.txt | 0 .../packages/app/public/safari-pinned-tab.svg | 0 .../packages/app/src/App.test.tsx | 0 .../packages/app/src/App.tsx | 5 +- .../packages/app/src/apis.ts | 0 .../app/src/components/Root/LogoFull.tsx | 0 .../app/src/components/Root/LogoIcon.tsx | 0 .../packages/app/src/components/Root/Root.tsx | 0 .../packages/app/src/components/Root/index.ts | 0 .../app/src/components/catalog/EntityPage.tsx | 0 .../app/src/components/search/SearchPage.tsx | 0 .../packages/app/src/index.tsx | 0 .../packages/app/src/setupTests.ts | 0 .../packages/backend/.eslintrc.js | 0 .../packages/backend/Dockerfile | 0 .../packages/backend/README.md | 0 .../packages/backend/package.json | 2 +- .../packages/backend/src/index.ts | 0 .../playwright.config.ts | 0 .../plugins/README.md | 0 .../plugins/dynamic-home-page/.eslintrc.js | 0 .../plugins/dynamic-home-page/README.md | 5 + .../dynamic-home-page/app-config.dynamic.yaml | 38 + .../dynamic-home-page/catalog-info.yaml | 28 + .../plugins/dynamic-home-page/dev/index.tsx | 723 ++++++++++++++++++ .../dev/quickaccess-default.json | 111 +++ .../dynamic-home-page/docs/catalog-starred.md | 34 + .../docs/catalog-starred.png | Bin 0 -> 76836 bytes .../docs/create-a-new-card.md | 53 ++ .../dynamic-home-page/docs/customization.md | 80 ++ .../docs/default-homepage.png | Bin 0 -> 89427 bytes .../dynamic-home-page/docs/default-size.png | Bin 0 -> 50852 bytes .../dynamic-home-page/docs/featured-docs.md | 28 + .../dynamic-home-page/docs/featured-docs.png | Bin 0 -> 79283 bytes .../dynamic-home-page/docs/headline.md | 33 + .../dynamic-home-page/docs/headline.png | Bin 0 -> 65005 bytes .../plugins/dynamic-home-page/docs/index.md | 11 + .../plugins/dynamic-home-page/docs/jokes.md | 22 + .../plugins/dynamic-home-page/docs/jokes.png | Bin 0 -> 61539 bytes .../dynamic-home-page/docs/layout-columns.png | Bin 0 -> 95070 bytes .../docs/layout-example-1-placeholder.png | Bin 0 -> 52896 bytes .../docs/layout-example-2-placeholder.png | Bin 0 -> 53674 bytes .../docs/layout-example-3-placeholder.png | Bin 0 -> 55298 bytes .../dynamic-home-page/docs/layout-options.md | 169 ++++ .../dynamic-home-page/docs/markdown.md | 61 ++ .../dynamic-home-page/docs/markdown.png | Bin 0 -> 74710 bytes .../dynamic-home-page/docs/placeholder.md | 101 +++ .../dynamic-home-page/docs/placeholder.png | Bin 0 -> 56341 bytes .../dynamic-home-page/docs/quick-access.md | 31 + .../dynamic-home-page/docs/quick-access.png | Bin 0 -> 77121 bytes .../docs/recently-visited.md | 24 + .../docs/recently-visited.png | Bin 0 -> 73115 bytes .../plugins/dynamic-home-page/docs/search.md | 31 + .../plugins/dynamic-home-page/docs/search.png | Bin 0 -> 54763 bytes .../dynamic-home-page/docs/top-visited.md | 24 + .../dynamic-home-page/docs/top-visited.png | Bin 0 -> 70513 bytes .../plugins/dynamic-home-page/mkdocs.yaml | 21 + .../plugins/dynamic-home-page/package.json | 72 ++ .../plugins/dynamic-home-page/report.api.md | 113 +++ .../src/api/QuickAccessApiClient.ts | 80 ++ .../dynamic-home-page/src/api}/index.ts | 2 +- .../src/components/DynamicHomePage.tsx | 70 ++ .../src/components/Headline.tsx} | 17 +- .../src/components/Markdown.tsx | 58 ++ .../src/components/MarkdownCard.tsx} | 30 +- .../src/components/Placeholder.tsx | 59 ++ .../src/components/QuickAccessCard.tsx | 115 +++ .../src/components/ReadOnlyGrid.tsx | 198 +++++ .../src/components/SearchBar.tsx | 88 +++ .../plugins/dynamic-home-page/src/defaults.ts | 36 + .../src/hooks/useHomePageMountPoints.ts | 39 + .../src/hooks/useQuickAccessLinks.test.ts | 137 ++++ .../src/hooks/useQuickAccessLinks.ts | 65 ++ .../plugins/dynamic-home-page/src}/index.ts | 9 +- .../dynamic-home-page/src/plugin.test.ts | 0 .../plugins/dynamic-home-page/src/plugin.ts | 238 ++++++ .../plugins/dynamic-home-page/src/routes.ts | 0 .../dynamic-home-page/src/setupTests.ts | 0 .../plugins/dynamic-home-page/src/types.ts | 53 ++ .../tsconfig.json | 0 .../{dynamic-home-page => homepage}/yarn.lock | 397 ++++++++-- 123 files changed, 3480 insertions(+), 684 deletions(-) delete mode 100644 workspaces/dynamic-home-page/catalog-info.yaml delete mode 100644 workspaces/dynamic-home-page/plugins/dynamic-home-page/README.md delete mode 100644 workspaces/dynamic-home-page/plugins/dynamic-home-page/package.json delete mode 100644 workspaces/dynamic-home-page/plugins/dynamic-home-page/report.api.md delete mode 100644 workspaces/dynamic-home-page/plugins/dynamic-home-page/src/components/ExampleComponent/ExampleComponent.test.tsx delete mode 100644 workspaces/dynamic-home-page/plugins/dynamic-home-page/src/components/ExampleComponent/ExampleComponent.tsx delete mode 100644 workspaces/dynamic-home-page/plugins/dynamic-home-page/src/components/ExampleFetchComponent/ExampleFetchComponent.test.tsx delete mode 100644 workspaces/dynamic-home-page/plugins/dynamic-home-page/src/components/ExampleFetchComponent/ExampleFetchComponent.tsx delete mode 100644 workspaces/dynamic-home-page/plugins/dynamic-home-page/src/plugin.ts rename workspaces/{dynamic-home-page => homepage}/.changeset/README.md (100%) rename workspaces/{dynamic-home-page => homepage}/.changeset/config.json (66%) create mode 100644 workspaces/homepage/.changeset/dirty-actors-bathe.md rename workspaces/{dynamic-home-page => homepage}/.dockerignore (100%) rename workspaces/{dynamic-home-page => homepage}/.eslintignore (100%) rename workspaces/{dynamic-home-page => homepage}/.eslintrc.js (100%) rename workspaces/{dynamic-home-page => homepage}/.gitignore (100%) rename workspaces/{dynamic-home-page => homepage}/.prettierignore (100%) rename workspaces/{dynamic-home-page => homepage}/README.md (100%) rename workspaces/{dynamic-home-page => homepage}/app-config.production.yaml (100%) rename workspaces/{dynamic-home-page => homepage}/app-config.yaml (100%) rename workspaces/{dynamic-home-page => homepage}/backstage.json (100%) create mode 100644 workspaces/homepage/catalog-info.yaml rename workspaces/{dynamic-home-page => homepage}/examples/entities.yaml (100%) rename workspaces/{dynamic-home-page => homepage}/examples/org.yaml (100%) rename workspaces/{dynamic-home-page => homepage}/examples/template/content/catalog-info.yaml (100%) rename workspaces/{dynamic-home-page => homepage}/examples/template/content/index.js (100%) rename workspaces/{dynamic-home-page => homepage}/examples/template/content/package.json (100%) rename workspaces/{dynamic-home-page => homepage}/examples/template/template.yaml (100%) rename workspaces/{dynamic-home-page => homepage}/package.json (93%) rename workspaces/{dynamic-home-page => homepage}/packages/README.md (100%) rename workspaces/{dynamic-home-page => homepage}/packages/app/.eslintignore (100%) rename workspaces/{dynamic-home-page => homepage}/packages/app/.eslintrc.js (100%) rename workspaces/{dynamic-home-page => homepage}/packages/app/e2e-tests/app.test.ts (100%) rename workspaces/{dynamic-home-page => homepage}/packages/app/package.json (97%) rename workspaces/{dynamic-home-page => homepage}/packages/app/public/android-chrome-192x192.png (100%) rename workspaces/{dynamic-home-page => homepage}/packages/app/public/apple-touch-icon.png (100%) rename workspaces/{dynamic-home-page => homepage}/packages/app/public/favicon-16x16.png (100%) rename workspaces/{dynamic-home-page => homepage}/packages/app/public/favicon-32x32.png (100%) rename workspaces/{dynamic-home-page => homepage}/packages/app/public/favicon.ico (100%) rename workspaces/{dynamic-home-page => homepage}/packages/app/public/index.html (100%) rename workspaces/{dynamic-home-page => homepage}/packages/app/public/manifest.json (100%) rename workspaces/{dynamic-home-page => homepage}/packages/app/public/robots.txt (100%) rename workspaces/{dynamic-home-page => homepage}/packages/app/public/safari-pinned-tab.svg (100%) rename workspaces/{dynamic-home-page => homepage}/packages/app/src/App.test.tsx (100%) rename workspaces/{dynamic-home-page => homepage}/packages/app/src/App.tsx (96%) rename workspaces/{dynamic-home-page => homepage}/packages/app/src/apis.ts (100%) rename workspaces/{dynamic-home-page => homepage}/packages/app/src/components/Root/LogoFull.tsx (100%) rename workspaces/{dynamic-home-page => homepage}/packages/app/src/components/Root/LogoIcon.tsx (100%) rename workspaces/{dynamic-home-page => homepage}/packages/app/src/components/Root/Root.tsx (100%) rename workspaces/{dynamic-home-page => homepage}/packages/app/src/components/Root/index.ts (100%) rename workspaces/{dynamic-home-page => homepage}/packages/app/src/components/catalog/EntityPage.tsx (100%) rename workspaces/{dynamic-home-page => homepage}/packages/app/src/components/search/SearchPage.tsx (100%) rename workspaces/{dynamic-home-page => homepage}/packages/app/src/index.tsx (100%) rename workspaces/{dynamic-home-page => homepage}/packages/app/src/setupTests.ts (100%) rename workspaces/{dynamic-home-page => homepage}/packages/backend/.eslintrc.js (100%) rename workspaces/{dynamic-home-page => homepage}/packages/backend/Dockerfile (100%) rename workspaces/{dynamic-home-page => homepage}/packages/backend/README.md (100%) rename workspaces/{dynamic-home-page => homepage}/packages/backend/package.json (97%) rename workspaces/{dynamic-home-page => homepage}/packages/backend/src/index.ts (100%) rename workspaces/{dynamic-home-page => homepage}/playwright.config.ts (100%) rename workspaces/{dynamic-home-page => homepage}/plugins/README.md (100%) rename workspaces/{dynamic-home-page => homepage}/plugins/dynamic-home-page/.eslintrc.js (100%) create mode 100644 workspaces/homepage/plugins/dynamic-home-page/README.md create mode 100644 workspaces/homepage/plugins/dynamic-home-page/app-config.dynamic.yaml create mode 100644 workspaces/homepage/plugins/dynamic-home-page/catalog-info.yaml create mode 100644 workspaces/homepage/plugins/dynamic-home-page/dev/index.tsx create mode 100644 workspaces/homepage/plugins/dynamic-home-page/dev/quickaccess-default.json create mode 100644 workspaces/homepage/plugins/dynamic-home-page/docs/catalog-starred.md create mode 100644 workspaces/homepage/plugins/dynamic-home-page/docs/catalog-starred.png create mode 100644 workspaces/homepage/plugins/dynamic-home-page/docs/create-a-new-card.md create mode 100644 workspaces/homepage/plugins/dynamic-home-page/docs/customization.md create mode 100644 workspaces/homepage/plugins/dynamic-home-page/docs/default-homepage.png create mode 100644 workspaces/homepage/plugins/dynamic-home-page/docs/default-size.png create mode 100644 workspaces/homepage/plugins/dynamic-home-page/docs/featured-docs.md create mode 100644 workspaces/homepage/plugins/dynamic-home-page/docs/featured-docs.png create mode 100644 workspaces/homepage/plugins/dynamic-home-page/docs/headline.md create mode 100644 workspaces/homepage/plugins/dynamic-home-page/docs/headline.png create mode 100644 workspaces/homepage/plugins/dynamic-home-page/docs/index.md create mode 100644 workspaces/homepage/plugins/dynamic-home-page/docs/jokes.md create mode 100644 workspaces/homepage/plugins/dynamic-home-page/docs/jokes.png create mode 100644 workspaces/homepage/plugins/dynamic-home-page/docs/layout-columns.png create mode 100644 workspaces/homepage/plugins/dynamic-home-page/docs/layout-example-1-placeholder.png create mode 100644 workspaces/homepage/plugins/dynamic-home-page/docs/layout-example-2-placeholder.png create mode 100644 workspaces/homepage/plugins/dynamic-home-page/docs/layout-example-3-placeholder.png create mode 100644 workspaces/homepage/plugins/dynamic-home-page/docs/layout-options.md create mode 100644 workspaces/homepage/plugins/dynamic-home-page/docs/markdown.md create mode 100644 workspaces/homepage/plugins/dynamic-home-page/docs/markdown.png create mode 100644 workspaces/homepage/plugins/dynamic-home-page/docs/placeholder.md create mode 100644 workspaces/homepage/plugins/dynamic-home-page/docs/placeholder.png create mode 100644 workspaces/homepage/plugins/dynamic-home-page/docs/quick-access.md create mode 100644 workspaces/homepage/plugins/dynamic-home-page/docs/quick-access.png create mode 100644 workspaces/homepage/plugins/dynamic-home-page/docs/recently-visited.md create mode 100644 workspaces/homepage/plugins/dynamic-home-page/docs/recently-visited.png create mode 100644 workspaces/homepage/plugins/dynamic-home-page/docs/search.md create mode 100644 workspaces/homepage/plugins/dynamic-home-page/docs/search.png create mode 100644 workspaces/homepage/plugins/dynamic-home-page/docs/top-visited.md create mode 100644 workspaces/homepage/plugins/dynamic-home-page/docs/top-visited.png create mode 100644 workspaces/homepage/plugins/dynamic-home-page/mkdocs.yaml create mode 100644 workspaces/homepage/plugins/dynamic-home-page/package.json create mode 100644 workspaces/homepage/plugins/dynamic-home-page/report.api.md create mode 100644 workspaces/homepage/plugins/dynamic-home-page/src/api/QuickAccessApiClient.ts rename workspaces/{dynamic-home-page/plugins/dynamic-home-page/src/components/ExampleComponent => homepage/plugins/dynamic-home-page/src/api}/index.ts (91%) create mode 100644 workspaces/homepage/plugins/dynamic-home-page/src/components/DynamicHomePage.tsx rename workspaces/{dynamic-home-page/plugins/dynamic-home-page/src/index.ts => homepage/plugins/dynamic-home-page/src/components/Headline.tsx} (68%) create mode 100644 workspaces/homepage/plugins/dynamic-home-page/src/components/Markdown.tsx rename workspaces/{dynamic-home-page/plugins/dynamic-home-page/dev/index.tsx => homepage/plugins/dynamic-home-page/src/components/MarkdownCard.tsx} (61%) create mode 100644 workspaces/homepage/plugins/dynamic-home-page/src/components/Placeholder.tsx create mode 100644 workspaces/homepage/plugins/dynamic-home-page/src/components/QuickAccessCard.tsx create mode 100644 workspaces/homepage/plugins/dynamic-home-page/src/components/ReadOnlyGrid.tsx create mode 100644 workspaces/homepage/plugins/dynamic-home-page/src/components/SearchBar.tsx create mode 100644 workspaces/homepage/plugins/dynamic-home-page/src/defaults.ts create mode 100644 workspaces/homepage/plugins/dynamic-home-page/src/hooks/useHomePageMountPoints.ts create mode 100644 workspaces/homepage/plugins/dynamic-home-page/src/hooks/useQuickAccessLinks.test.ts create mode 100644 workspaces/homepage/plugins/dynamic-home-page/src/hooks/useQuickAccessLinks.ts rename workspaces/{dynamic-home-page/plugins/dynamic-home-page/src/components/ExampleFetchComponent => homepage/plugins/dynamic-home-page/src}/index.ts (75%) rename workspaces/{dynamic-home-page => homepage}/plugins/dynamic-home-page/src/plugin.test.ts (100%) create mode 100644 workspaces/homepage/plugins/dynamic-home-page/src/plugin.ts rename workspaces/{dynamic-home-page => homepage}/plugins/dynamic-home-page/src/routes.ts (100%) rename workspaces/{dynamic-home-page => homepage}/plugins/dynamic-home-page/src/setupTests.ts (100%) create mode 100644 workspaces/homepage/plugins/dynamic-home-page/src/types.ts rename workspaces/{dynamic-home-page => homepage}/tsconfig.json (100%) rename workspaces/{dynamic-home-page => homepage}/yarn.lock (98%) diff --git a/.github/CODEOWNERS b/.github/CODEOWNERS index d49f89d0..1c2c945b 100644 --- a/.github/CODEOWNERS +++ b/.github/CODEOWNERS @@ -6,7 +6,7 @@ * @bethgriggs @nickboldt @kim-tsao @04kash /workspaces/bulk-import @christoph-jerolimov @debsmita1 @rm3l -/workspaces/dynamic-home-page @christoph-jerolimov @ciiay @debsmita1 +/workspaces/homepage @christoph-jerolimov @ciiay @debsmita1 /workspaces/marketplace @christoph-jerolimov @debsmita1 @divyanshiGupta /workspaces/openshift-image-registry @christoph-jerolimov @debsmita1 @divyanshiGupta /workspaces/theme @christoph-jerolimov @ciiay @debsmita1 diff --git a/workspaces/dynamic-home-page/catalog-info.yaml b/workspaces/dynamic-home-page/catalog-info.yaml deleted file mode 100644 index c53c32d0..00000000 --- a/workspaces/dynamic-home-page/catalog-info.yaml +++ /dev/null @@ -1,13 +0,0 @@ -apiVersion: backstage.io/v1alpha1 -kind: Component -metadata: - name: dynamic-home-page - description: An example of a Backstage application. - # Example for optional annotations - # annotations: - # github.com/project-slug: backstage/backstage - # backstage.io/techdocs-ref: dir:. -spec: - type: website - owner: john@example.com - lifecycle: experimental diff --git a/workspaces/dynamic-home-page/plugins/dynamic-home-page/README.md b/workspaces/dynamic-home-page/plugins/dynamic-home-page/README.md deleted file mode 100644 index 43066ad2..00000000 --- a/workspaces/dynamic-home-page/plugins/dynamic-home-page/README.md +++ /dev/null @@ -1,13 +0,0 @@ -# dynamic-home-page - -Welcome to the dynamic-home-page plugin! - -_This plugin was created through the Backstage CLI_ - -## Getting started - -Your plugin has been added to the example app in this repository, meaning you'll be able to access it by running `yarn start` in the root directory, and then navigating to [/dynamic-home-page](http://localhost:3000/dynamic-home-page). - -You can also serve the plugin in isolation by running `yarn start` in the plugin directory. -This method of serving the plugin provides quicker iteration speed and a faster startup and hot reloads. -It is only meant for local development, and the setup for it can be found inside the [/dev](./dev) directory. diff --git a/workspaces/dynamic-home-page/plugins/dynamic-home-page/package.json b/workspaces/dynamic-home-page/plugins/dynamic-home-page/package.json deleted file mode 100644 index fda0bb79..00000000 --- a/workspaces/dynamic-home-page/plugins/dynamic-home-page/package.json +++ /dev/null @@ -1,61 +0,0 @@ -{ - "name": "@red-hat-developer-hub/backstage-plugin-dynamic-home-page", - "version": "0.1.0", - "main": "src/index.ts", - "types": "src/index.ts", - "license": "Apache-2.0", - "private": true, - "publishConfig": { - "access": "public", - "main": "dist/index.esm.js", - "types": "dist/index.d.ts" - }, - "repository": { - "type": "git", - "url": "https://github.com/redhat-developer/rhdh-plugins", - "directory": "workspaces/dynamic-home-page/plugins/dynamic-home-page" - }, - "backstage": { - "role": "frontend-plugin", - "pluginId": "dynamic-home-page", - "pluginPackages": [ - "@red-hat-developer-hub/backstage-plugin-dynamic-home-page" - ] - }, - "sideEffects": false, - "scripts": { - "start": "backstage-cli package start", - "build": "backstage-cli package build", - "lint": "backstage-cli package lint", - "test": "backstage-cli package test", - "clean": "backstage-cli package clean", - "prepack": "backstage-cli package prepack", - "postpack": "backstage-cli package postpack" - }, - "dependencies": { - "@backstage/core-components": "^0.15.1", - "@backstage/core-plugin-api": "^1.10.0", - "@backstage/theme": "^0.6.0", - "@material-ui/core": "^4.9.13", - "@material-ui/icons": "^4.9.1", - "@material-ui/lab": "^4.0.0-alpha.61", - "react-use": "^17.2.4" - }, - "peerDependencies": { - "react": "^16.13.1 || ^17.0.0 || ^18.0.0" - }, - "devDependencies": { - "@backstage/cli": "^0.28.0", - "@backstage/core-app-api": "^1.15.1", - "@backstage/dev-utils": "^1.1.2", - "@backstage/test-utils": "^1.7.0", - "@testing-library/jest-dom": "^6.0.0", - "@testing-library/react": "^14.0.0", - "@testing-library/user-event": "^14.0.0", - "msw": "^1.0.0", - "react": "^16.13.1 || ^17.0.0 || ^18.0.0" - }, - "files": [ - "dist" - ] -} diff --git a/workspaces/dynamic-home-page/plugins/dynamic-home-page/report.api.md b/workspaces/dynamic-home-page/plugins/dynamic-home-page/report.api.md deleted file mode 100644 index cc5bc7dc..00000000 --- a/workspaces/dynamic-home-page/plugins/dynamic-home-page/report.api.md +++ /dev/null @@ -1,25 +0,0 @@ -## API Report File for "@red-hat-developer-hub/backstage-plugin-dynamic-home-page" - -> Do not edit this file. It is a report generated by [API Extractor](https://api-extractor.com/). - -```ts -/// - -import { BackstagePlugin } from '@backstage/core-plugin-api'; -import { JSX as JSX_2 } from 'react'; -import { RouteRef } from '@backstage/core-plugin-api'; - -// @public -export const DynamicHomePagePage: () => JSX_2.Element; - -// @public -export const dynamicHomePagePlugin: BackstagePlugin< - { - root: RouteRef; - }, - {}, - {} ->; - -// (No @packageDocumentation comment for this package) -``` diff --git a/workspaces/dynamic-home-page/plugins/dynamic-home-page/src/components/ExampleComponent/ExampleComponent.test.tsx b/workspaces/dynamic-home-page/plugins/dynamic-home-page/src/components/ExampleComponent/ExampleComponent.test.tsx deleted file mode 100644 index d2b13a3b..00000000 --- a/workspaces/dynamic-home-page/plugins/dynamic-home-page/src/components/ExampleComponent/ExampleComponent.test.tsx +++ /dev/null @@ -1,41 +0,0 @@ -/* - * Copyright 2024 The Backstage Authors - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ -import React from 'react'; -import { ExampleComponent } from './ExampleComponent'; -import { rest } from 'msw'; -import { setupServer } from 'msw/node'; -import { screen } from '@testing-library/react'; -import { registerMswTestHooks, renderInTestApp } from '@backstage/test-utils'; - -describe('ExampleComponent', () => { - const server = setupServer(); - // Enable sane handlers for network requests - registerMswTestHooks(server); - - // setup mock response - beforeEach(() => { - server.use( - rest.get('/*', (_, res, ctx) => res(ctx.status(200), ctx.json({}))), - ); - }); - - it('should render', async () => { - await renderInTestApp(); - expect( - screen.getByText('Welcome to dynamic-home-page!'), - ).toBeInTheDocument(); - }); -}); diff --git a/workspaces/dynamic-home-page/plugins/dynamic-home-page/src/components/ExampleComponent/ExampleComponent.tsx b/workspaces/dynamic-home-page/plugins/dynamic-home-page/src/components/ExampleComponent/ExampleComponent.tsx deleted file mode 100644 index 56108e79..00000000 --- a/workspaces/dynamic-home-page/plugins/dynamic-home-page/src/components/ExampleComponent/ExampleComponent.tsx +++ /dev/null @@ -1,53 +0,0 @@ -/* - * Copyright 2024 The Backstage Authors - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ -import React from 'react'; -import { Typography, Grid } from '@material-ui/core'; -import { - InfoCard, - Header, - Page, - Content, - ContentHeader, - HeaderLabel, - SupportButton, -} from '@backstage/core-components'; -import { ExampleFetchComponent } from '../ExampleFetchComponent'; - -export const ExampleComponent = () => ( - -
- - -
- - - A description of your plugin goes here. - - - - - - All content should be wrapped in a card like this. - - - - - - - - -
-); diff --git a/workspaces/dynamic-home-page/plugins/dynamic-home-page/src/components/ExampleFetchComponent/ExampleFetchComponent.test.tsx b/workspaces/dynamic-home-page/plugins/dynamic-home-page/src/components/ExampleFetchComponent/ExampleFetchComponent.test.tsx deleted file mode 100644 index ccc6015c..00000000 --- a/workspaces/dynamic-home-page/plugins/dynamic-home-page/src/components/ExampleFetchComponent/ExampleFetchComponent.test.tsx +++ /dev/null @@ -1,34 +0,0 @@ -/* - * Copyright 2024 The Backstage Authors - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ -import React from 'react'; -import { render, screen } from '@testing-library/react'; -import { ExampleFetchComponent } from './ExampleFetchComponent'; - -describe('ExampleFetchComponent', () => { - it('renders the user table', async () => { - render(); - - // Wait for the table to render - const table = await screen.findByRole('table'); - const nationality = screen.getAllByText('GB'); - // Assert that the table contains the expected user data - expect(table).toBeInTheDocument(); - expect(screen.getByAltText('Carolyn')).toBeInTheDocument(); - expect(screen.getByText('Carolyn Moore')).toBeInTheDocument(); - expect(screen.getByText('carolyn.moore@example.com')).toBeInTheDocument(); - expect(nationality[0]).toBeInTheDocument(); - }); -}); diff --git a/workspaces/dynamic-home-page/plugins/dynamic-home-page/src/components/ExampleFetchComponent/ExampleFetchComponent.tsx b/workspaces/dynamic-home-page/plugins/dynamic-home-page/src/components/ExampleFetchComponent/ExampleFetchComponent.tsx deleted file mode 100644 index 624c6eb1..00000000 --- a/workspaces/dynamic-home-page/plugins/dynamic-home-page/src/components/ExampleFetchComponent/ExampleFetchComponent.tsx +++ /dev/null @@ -1,323 +0,0 @@ -/* - * Copyright 2024 The Backstage Authors - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ -import React from 'react'; -import { makeStyles } from '@material-ui/core/styles'; -import { - Table, - TableColumn, - Progress, - ResponseErrorPanel, -} from '@backstage/core-components'; -import useAsync from 'react-use/lib/useAsync'; - -export const exampleUsers = { - results: [ - { - gender: 'female', - name: { - title: 'Miss', - first: 'Carolyn', - last: 'Moore', - }, - email: 'carolyn.moore@example.com', - picture: 'https://api.dicebear.com/6.x/open-peeps/svg?seed=Carolyn', - nat: 'GB', - }, - { - gender: 'female', - name: { - title: 'Ms', - first: 'Esma', - last: 'Berberoğlu', - }, - email: 'esma.berberoglu@example.com', - picture: 'https://api.dicebear.com/6.x/open-peeps/svg?seed=Esma', - nat: 'TR', - }, - { - gender: 'female', - name: { - title: 'Ms', - first: 'Isabella', - last: 'Rhodes', - }, - email: 'isabella.rhodes@example.com', - picture: 'https://api.dicebear.com/6.x/open-peeps/svg?seed=Isabella', - nat: 'GB', - }, - { - gender: 'male', - name: { - title: 'Mr', - first: 'Derrick', - last: 'Carter', - }, - email: 'derrick.carter@example.com', - picture: 'https://api.dicebear.com/6.x/open-peeps/svg?seed=Derrick', - nat: 'IE', - }, - { - gender: 'female', - name: { - title: 'Miss', - first: 'Mattie', - last: 'Lambert', - }, - email: 'mattie.lambert@example.com', - picture: 'https://api.dicebear.com/6.x/open-peeps/svg?seed=Mattie', - nat: 'AU', - }, - { - gender: 'male', - name: { - title: 'Mr', - first: 'Mijat', - last: 'Rakić', - }, - email: 'mijat.rakic@example.com', - picture: 'https://api.dicebear.com/6.x/open-peeps/svg?seed=Mijat', - nat: 'RS', - }, - { - gender: 'male', - name: { - title: 'Mr', - first: 'Javier', - last: 'Reid', - }, - email: 'javier.reid@example.com', - picture: 'https://api.dicebear.com/6.x/open-peeps/svg?seed=Javier', - nat: 'US', - }, - { - gender: 'female', - name: { - title: 'Ms', - first: 'Isabella', - last: 'Li', - }, - email: 'isabella.li@example.com', - picture: 'https://api.dicebear.com/6.x/open-peeps/svg?seed=Isabella', - nat: 'CA', - }, - { - gender: 'female', - name: { - title: 'Mrs', - first: 'Stephanie', - last: 'Garrett', - }, - email: 'stephanie.garrett@example.com', - picture: 'https://api.dicebear.com/6.x/open-peeps/svg?seed=Stephanie', - nat: 'AU', - }, - { - gender: 'female', - name: { - title: 'Ms', - first: 'Antonia', - last: 'Núñez', - }, - email: 'antonia.nunez@example.com', - picture: 'https://api.dicebear.com/6.x/open-peeps/svg?seed=Antonia', - nat: 'ES', - }, - { - gender: 'male', - name: { - title: 'Mr', - first: 'Donald', - last: 'Young', - }, - email: 'donald.young@example.com', - picture: 'https://api.dicebear.com/6.x/open-peeps/svg?seed=Donald', - nat: 'US', - }, - { - gender: 'male', - name: { - title: 'Mr', - first: 'Iegor', - last: 'Holodovskiy', - }, - email: 'iegor.holodovskiy@example.com', - picture: 'https://api.dicebear.com/6.x/open-peeps/svg?seed=Iegor', - nat: 'UA', - }, - { - gender: 'female', - name: { - title: 'Madame', - first: 'Jessica', - last: 'David', - }, - email: 'jessica.david@example.com', - picture: 'https://api.dicebear.com/6.x/open-peeps/svg?seed=Jessica', - nat: 'CH', - }, - { - gender: 'female', - name: { - title: 'Ms', - first: 'Eve', - last: 'Martinez', - }, - email: 'eve.martinez@example.com', - picture: 'https://api.dicebear.com/6.x/open-peeps/svg?seed=Eve', - nat: 'FR', - }, - { - gender: 'male', - name: { - title: 'Mr', - first: 'Caleb', - last: 'Silva', - }, - email: 'caleb.silva@example.com', - picture: 'https://api.dicebear.com/6.x/open-peeps/svg?seed=Caleb', - nat: 'US', - }, - { - gender: 'female', - name: { - title: 'Miss', - first: 'Marcia', - last: 'Jenkins', - }, - email: 'marcia.jenkins@example.com', - picture: 'https://api.dicebear.com/6.x/open-peeps/svg?seed=Marcia', - nat: 'US', - }, - { - gender: 'female', - name: { - title: 'Mrs', - first: 'Mackenzie', - last: 'Jones', - }, - email: 'mackenzie.jones@example.com', - picture: 'https://api.dicebear.com/6.x/open-peeps/svg?seed=Mackenzie', - nat: 'NZ', - }, - { - gender: 'male', - name: { - title: 'Mr', - first: 'Jeremiah', - last: 'Gutierrez', - }, - email: 'jeremiah.gutierrez@example.com', - picture: 'https://api.dicebear.com/6.x/open-peeps/svg?seed=Jeremiah', - nat: 'AU', - }, - { - gender: 'female', - name: { - title: 'Ms', - first: 'Luciara', - last: 'Souza', - }, - email: 'luciara.souza@example.com', - picture: 'https://api.dicebear.com/6.x/open-peeps/svg?seed=Luciara', - nat: 'BR', - }, - { - gender: 'male', - name: { - title: 'Mr', - first: 'Valgi', - last: 'da Cunha', - }, - email: 'valgi.dacunha@example.com', - picture: 'https://api.dicebear.com/6.x/open-peeps/svg?seed=Valgi', - nat: 'BR', - }, - ], -}; - -const useStyles = makeStyles({ - avatar: { - height: 32, - width: 32, - borderRadius: '50%', - }, -}); - -type User = { - gender: string; // "male" - name: { - title: string; // "Mr", - first: string; // "Duane", - last: string; // "Reed" - }; - email: string; // "duane.reed@example.com" - picture: string; // "https://api.dicebear.com/6.x/open-peeps/svg?seed=Duane" - nat: string; // "AU" -}; - -type DenseTableProps = { - users: User[]; -}; - -export const DenseTable = ({ users }: DenseTableProps) => { - const classes = useStyles(); - - const columns: TableColumn[] = [ - { title: 'Avatar', field: 'avatar' }, - { title: 'Name', field: 'name' }, - { title: 'Email', field: 'email' }, - { title: 'Nationality', field: 'nationality' }, - ]; - - const data = users.map(user => { - return { - avatar: ( - {user.name.first} - ), - name: `${user.name.first} ${user.name.last}`, - email: user.email, - nationality: user.nat, - }; - }); - - return ( - - ); -}; - -export const ExampleFetchComponent = () => { - const { value, loading, error } = useAsync(async (): Promise => { - // Would use fetch in a real world example - return exampleUsers.results; - }, []); - - if (loading) { - return ; - } else if (error) { - return ; - } - - return ; -}; diff --git a/workspaces/dynamic-home-page/plugins/dynamic-home-page/src/plugin.ts b/workspaces/dynamic-home-page/plugins/dynamic-home-page/src/plugin.ts deleted file mode 100644 index 99932273..00000000 --- a/workspaces/dynamic-home-page/plugins/dynamic-home-page/src/plugin.ts +++ /dev/null @@ -1,45 +0,0 @@ -/* - * Copyright 2024 The Backstage Authors - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ -import { - createPlugin, - createRoutableExtension, -} from '@backstage/core-plugin-api'; - -import { rootRouteRef } from './routes'; - -/** - * Dynamic Home Page Plugin - * @public - */ -export const dynamicHomePagePlugin = createPlugin({ - id: 'dynamic-home-page', - routes: { - root: rootRouteRef, - }, -}); - -/** - * Dynamic Home Page - * @public - */ -export const DynamicHomePagePage = dynamicHomePagePlugin.provide( - createRoutableExtension({ - name: 'DynamicHomePagePage', - component: () => - import('./components/ExampleComponent').then(m => m.ExampleComponent), - mountPoint: rootRouteRef, - }), -); diff --git a/workspaces/dynamic-home-page/.changeset/README.md b/workspaces/homepage/.changeset/README.md similarity index 100% rename from workspaces/dynamic-home-page/.changeset/README.md rename to workspaces/homepage/.changeset/README.md diff --git a/workspaces/dynamic-home-page/.changeset/config.json b/workspaces/homepage/.changeset/config.json similarity index 66% rename from workspaces/dynamic-home-page/.changeset/config.json rename to workspaces/homepage/.changeset/config.json index 4d034bb9..8208df00 100644 --- a/workspaces/dynamic-home-page/.changeset/config.json +++ b/workspaces/homepage/.changeset/config.json @@ -6,5 +6,9 @@ "linked": [], "access": "public", "baseBranch": "main", - "updateInternalDependencies": "patch" + "updateInternalDependencies": "patch", + "privatePackages": { + "tag": false, + "version": false + } } diff --git a/workspaces/homepage/.changeset/dirty-actors-bathe.md b/workspaces/homepage/.changeset/dirty-actors-bathe.md new file mode 100644 index 00000000..57e3c8f2 --- /dev/null +++ b/workspaces/homepage/.changeset/dirty-actors-bathe.md @@ -0,0 +1,5 @@ +--- +'@red-hat-developer-hub/backstage-plugin-dynamic-home-page': patch +--- + +Migrate dynamic-home-page plugin from showcase diff --git a/workspaces/dynamic-home-page/.dockerignore b/workspaces/homepage/.dockerignore similarity index 100% rename from workspaces/dynamic-home-page/.dockerignore rename to workspaces/homepage/.dockerignore diff --git a/workspaces/dynamic-home-page/.eslintignore b/workspaces/homepage/.eslintignore similarity index 100% rename from workspaces/dynamic-home-page/.eslintignore rename to workspaces/homepage/.eslintignore diff --git a/workspaces/dynamic-home-page/.eslintrc.js b/workspaces/homepage/.eslintrc.js similarity index 100% rename from workspaces/dynamic-home-page/.eslintrc.js rename to workspaces/homepage/.eslintrc.js diff --git a/workspaces/dynamic-home-page/.gitignore b/workspaces/homepage/.gitignore similarity index 100% rename from workspaces/dynamic-home-page/.gitignore rename to workspaces/homepage/.gitignore diff --git a/workspaces/dynamic-home-page/.prettierignore b/workspaces/homepage/.prettierignore similarity index 100% rename from workspaces/dynamic-home-page/.prettierignore rename to workspaces/homepage/.prettierignore diff --git a/workspaces/dynamic-home-page/README.md b/workspaces/homepage/README.md similarity index 100% rename from workspaces/dynamic-home-page/README.md rename to workspaces/homepage/README.md diff --git a/workspaces/dynamic-home-page/app-config.production.yaml b/workspaces/homepage/app-config.production.yaml similarity index 100% rename from workspaces/dynamic-home-page/app-config.production.yaml rename to workspaces/homepage/app-config.production.yaml diff --git a/workspaces/dynamic-home-page/app-config.yaml b/workspaces/homepage/app-config.yaml similarity index 100% rename from workspaces/dynamic-home-page/app-config.yaml rename to workspaces/homepage/app-config.yaml diff --git a/workspaces/dynamic-home-page/backstage.json b/workspaces/homepage/backstage.json similarity index 100% rename from workspaces/dynamic-home-page/backstage.json rename to workspaces/homepage/backstage.json diff --git a/workspaces/homepage/catalog-info.yaml b/workspaces/homepage/catalog-info.yaml new file mode 100644 index 00000000..7e818d0f --- /dev/null +++ b/workspaces/homepage/catalog-info.yaml @@ -0,0 +1,24 @@ +# https://backstage.io/docs/features/software-catalog/descriptor-format#kind-component +apiVersion: backstage.io/v1alpha1 +kind: Component +metadata: + name: rhdh-plugins-homepage + title: Home Page plugin + description: Home Page plugin based on the upstream `home` plugin that can be extended and customized with the RHDH dynamic plugin feature. + annotations: + {} + # github.com/project-slug: janus-idp/backstage-showcase + # github.com/team-slug: janus-idp/maintainers-plugins + # sonarqube.org/project-key: janus-idp_backstage-showcase + tags: + - homepage + links: + - url: https://github.com/redhat-developer/rhdh-plugins/tree/main/workspaces/homepage + title: GitHub Source + icon: source + type: source +spec: + type: backstage-plugin + lifecycle: production + owner: rhdh-team + system: rhdh diff --git a/workspaces/dynamic-home-page/examples/entities.yaml b/workspaces/homepage/examples/entities.yaml similarity index 100% rename from workspaces/dynamic-home-page/examples/entities.yaml rename to workspaces/homepage/examples/entities.yaml diff --git a/workspaces/dynamic-home-page/examples/org.yaml b/workspaces/homepage/examples/org.yaml similarity index 100% rename from workspaces/dynamic-home-page/examples/org.yaml rename to workspaces/homepage/examples/org.yaml diff --git a/workspaces/dynamic-home-page/examples/template/content/catalog-info.yaml b/workspaces/homepage/examples/template/content/catalog-info.yaml similarity index 100% rename from workspaces/dynamic-home-page/examples/template/content/catalog-info.yaml rename to workspaces/homepage/examples/template/content/catalog-info.yaml diff --git a/workspaces/dynamic-home-page/examples/template/content/index.js b/workspaces/homepage/examples/template/content/index.js similarity index 100% rename from workspaces/dynamic-home-page/examples/template/content/index.js rename to workspaces/homepage/examples/template/content/index.js diff --git a/workspaces/dynamic-home-page/examples/template/content/package.json b/workspaces/homepage/examples/template/content/package.json similarity index 100% rename from workspaces/dynamic-home-page/examples/template/content/package.json rename to workspaces/homepage/examples/template/content/package.json diff --git a/workspaces/dynamic-home-page/examples/template/template.yaml b/workspaces/homepage/examples/template/template.yaml similarity index 100% rename from workspaces/dynamic-home-page/examples/template/template.yaml rename to workspaces/homepage/examples/template/template.yaml diff --git a/workspaces/dynamic-home-page/package.json b/workspaces/homepage/package.json similarity index 93% rename from workspaces/dynamic-home-page/package.json rename to workspaces/homepage/package.json index 9ff817c5..3dd34d83 100644 --- a/workspaces/dynamic-home-page/package.json +++ b/workspaces/homepage/package.json @@ -1,5 +1,5 @@ { - "name": "@internal/dynamic-home-page", + "name": "@internal/homepage", "version": "1.0.0", "private": true, "engines": { @@ -14,7 +14,7 @@ "tsc:full": "tsc --skipLibCheck false --incremental false", "build:all": "backstage-cli repo build --all", "build:api-reports": "yarn build:api-reports:only --tsc", - "build:api-reports:only": "backstage-repo-tools api-reports -o ae-wrong-input-file-type --validate-release-tags", + "build:api-reports:only": "backstage-repo-tools api-reports -o ae-wrong-input-file-type,ae-undocumented --validate-release-tags", "build-image": "yarn workspace backend build-image", "clean": "backstage-cli repo clean", "test": "backstage-cli repo test", @@ -36,7 +36,7 @@ "repository": { "type": "git", "url": "https://github.com/redhat-developer/rhdh-plugins", - "directory": "workspaces/dynamic-home-page" + "directory": "workspaces/homepage" }, "devDependencies": { "@backstage/cli": "^0.28.0", diff --git a/workspaces/dynamic-home-page/packages/README.md b/workspaces/homepage/packages/README.md similarity index 100% rename from workspaces/dynamic-home-page/packages/README.md rename to workspaces/homepage/packages/README.md diff --git a/workspaces/dynamic-home-page/packages/app/.eslintignore b/workspaces/homepage/packages/app/.eslintignore similarity index 100% rename from workspaces/dynamic-home-page/packages/app/.eslintignore rename to workspaces/homepage/packages/app/.eslintignore diff --git a/workspaces/dynamic-home-page/packages/app/.eslintrc.js b/workspaces/homepage/packages/app/.eslintrc.js similarity index 100% rename from workspaces/dynamic-home-page/packages/app/.eslintrc.js rename to workspaces/homepage/packages/app/.eslintrc.js diff --git a/workspaces/dynamic-home-page/packages/app/e2e-tests/app.test.ts b/workspaces/homepage/packages/app/e2e-tests/app.test.ts similarity index 100% rename from workspaces/dynamic-home-page/packages/app/e2e-tests/app.test.ts rename to workspaces/homepage/packages/app/e2e-tests/app.test.ts diff --git a/workspaces/dynamic-home-page/packages/app/package.json b/workspaces/homepage/packages/app/package.json similarity index 97% rename from workspaces/dynamic-home-page/packages/app/package.json rename to workspaces/homepage/packages/app/package.json index 1c72859a..6f5d1e15 100644 --- a/workspaces/dynamic-home-page/packages/app/package.json +++ b/workspaces/homepage/packages/app/package.json @@ -6,7 +6,7 @@ "repository": { "type": "git", "url": "https://github.com/redhat-developer/rhdh-plugins", - "directory": "workspaces/dynamic-home-page/packages/app" + "directory": "workspaces/homepage/packages/app" }, "backstage": { "role": "frontend" diff --git a/workspaces/dynamic-home-page/packages/app/public/android-chrome-192x192.png b/workspaces/homepage/packages/app/public/android-chrome-192x192.png similarity index 100% rename from workspaces/dynamic-home-page/packages/app/public/android-chrome-192x192.png rename to workspaces/homepage/packages/app/public/android-chrome-192x192.png diff --git a/workspaces/dynamic-home-page/packages/app/public/apple-touch-icon.png b/workspaces/homepage/packages/app/public/apple-touch-icon.png similarity index 100% rename from workspaces/dynamic-home-page/packages/app/public/apple-touch-icon.png rename to workspaces/homepage/packages/app/public/apple-touch-icon.png diff --git a/workspaces/dynamic-home-page/packages/app/public/favicon-16x16.png b/workspaces/homepage/packages/app/public/favicon-16x16.png similarity index 100% rename from workspaces/dynamic-home-page/packages/app/public/favicon-16x16.png rename to workspaces/homepage/packages/app/public/favicon-16x16.png diff --git a/workspaces/dynamic-home-page/packages/app/public/favicon-32x32.png b/workspaces/homepage/packages/app/public/favicon-32x32.png similarity index 100% rename from workspaces/dynamic-home-page/packages/app/public/favicon-32x32.png rename to workspaces/homepage/packages/app/public/favicon-32x32.png diff --git a/workspaces/dynamic-home-page/packages/app/public/favicon.ico b/workspaces/homepage/packages/app/public/favicon.ico similarity index 100% rename from workspaces/dynamic-home-page/packages/app/public/favicon.ico rename to workspaces/homepage/packages/app/public/favicon.ico diff --git a/workspaces/dynamic-home-page/packages/app/public/index.html b/workspaces/homepage/packages/app/public/index.html similarity index 100% rename from workspaces/dynamic-home-page/packages/app/public/index.html rename to workspaces/homepage/packages/app/public/index.html diff --git a/workspaces/dynamic-home-page/packages/app/public/manifest.json b/workspaces/homepage/packages/app/public/manifest.json similarity index 100% rename from workspaces/dynamic-home-page/packages/app/public/manifest.json rename to workspaces/homepage/packages/app/public/manifest.json diff --git a/workspaces/dynamic-home-page/packages/app/public/robots.txt b/workspaces/homepage/packages/app/public/robots.txt similarity index 100% rename from workspaces/dynamic-home-page/packages/app/public/robots.txt rename to workspaces/homepage/packages/app/public/robots.txt diff --git a/workspaces/dynamic-home-page/packages/app/public/safari-pinned-tab.svg b/workspaces/homepage/packages/app/public/safari-pinned-tab.svg similarity index 100% rename from workspaces/dynamic-home-page/packages/app/public/safari-pinned-tab.svg rename to workspaces/homepage/packages/app/public/safari-pinned-tab.svg diff --git a/workspaces/dynamic-home-page/packages/app/src/App.test.tsx b/workspaces/homepage/packages/app/src/App.test.tsx similarity index 100% rename from workspaces/dynamic-home-page/packages/app/src/App.test.tsx rename to workspaces/homepage/packages/app/src/App.test.tsx diff --git a/workspaces/dynamic-home-page/packages/app/src/App.tsx b/workspaces/homepage/packages/app/src/App.tsx similarity index 96% rename from workspaces/dynamic-home-page/packages/app/src/App.tsx rename to workspaces/homepage/packages/app/src/App.tsx index 250d3541..dc25d893 100644 --- a/workspaces/dynamic-home-page/packages/app/src/App.tsx +++ b/workspaces/homepage/packages/app/src/App.tsx @@ -51,7 +51,8 @@ import { AppRouter, FlatRoutes } from '@backstage/core-app-api'; import { CatalogGraphPage } from '@backstage/plugin-catalog-graph'; import { RequirePermission } from '@backstage/plugin-permission-react'; import { catalogEntityCreatePermission } from '@backstage/plugin-catalog-common/alpha'; -import { DynamicHomePagePage } from '@red-hat-developer-hub/backstage-plugin-dynamic-home-page'; + +import { DynamicHomePage } from '@red-hat-developer-hub/backstage-plugin-dynamic-home-page'; const app = createApp({ apis, @@ -79,7 +80,7 @@ const app = createApp({ const routes = ( - } /> + } /> } /> { + return defaultQuickAccess as QuickAccessLink[]; + } +} + +const entities /* : Entity[]*/ = [ + { + apiVersion: '1', + kind: 'Component', + metadata: { + name: 'service-a', + }, + }, + { + apiVersion: '1', + kind: 'Component', + metadata: { + name: 'service-b', + }, + }, +]; +const mockCatalogApi: Partial = { + // getEntities: (request?: GetEntitiesRequest, options?: CatalogRequestOptions): Promise + getEntities: async () => ({ + items: entities, + }), + // getEntitiesByRefs(request: GetEntitiesByRefsRequest, options?: CatalogRequestOptions): Promise + getEntitiesByRefs: async () => ({ + items: entities, + }), +}; + +const mockStarredEntitiesApi = new MockStarredEntitiesApi(); +// TODO: Starred entity test page requires additional routeRefs to render starred entities +// mockStarredEntitiesApi.toggleStarred('service-a'); +// mockStarredEntitiesApi.toggleStarred('service-b'); + +class MockVisitsApi implements VisitsApi { + async list(queryParams?: VisitsApiQueryParams): Promise { + const links = [ + 'example-app', + 'another-app', + 'service-a', + 'service-b', + 'service-c', + 'short', + 'long-application-name', + ]; + const visits = links.map(link => ({ + id: link, + name: link, + pathname: link, + hits: link.length, + timestamp: Date.now() - link.length * 1000 * 60, + })); + if ( + queryParams?.orderBy?.[0]?.field === 'timestamp' && + queryParams.orderBy[0].direction === 'desc' + ) { + visits.sort((a, b) => b.timestamp - a.timestamp); + } + if ( + queryParams?.orderBy?.[0]?.field === 'hits' && + queryParams.orderBy[0].direction === 'desc' + ) { + visits.sort((a, b) => b.hits - a.hits); + } + return visits; + } + + async save(): Promise { + throw new Error('MockVisitsApi save not implemented.'); + } +} + +const createPage = ({ + navTitle, + pageTitle, + pageWidth, + mountPoints, +}: { + navTitle: string; + pageTitle?: string; + pageWidth?: number; + mountPoints?: HomePageCardMountPoint[]; +}): DevAppPageOptions => { + const backstageApis = [ + [searchApiRef, new MockSearchApi()], + [quickAccessApiRef, new MockQuickAccessApi()], + [catalogApiRef, mockCatalogApi], + [starredEntitiesApiRef, mockStarredEntitiesApi], + [visitsApiRef, new MockVisitsApi()], + ] as const; + + const scalprumState: ScalprumState = { + initialized: true, + api: mountPoints + ? { + dynamicRootConfig: { + mountPoints: { + 'home.page/cards': mountPoints, + }, + }, + } + : undefined, + config: {}, + pluginStore: new PluginStore(), + }; + + const pageContent = ( + + +
+ +
+
+
+ ); + + return { + element: pageContent, + title: navTitle, + path: navTitle.toLocaleLowerCase('en-US').replaceAll(/[^a-z0-9]/g, '-'), + }; +}; + +createDevApp() + .registerPlugin(dynamicHomePagePlugin) + .addThemes(getAllThemes()) + .addPage( + createPage({ + navTitle: 'Default', + mountPoints: defaultMountPoints, + }), + ) + .addPage( + createPage({ + navTitle: 'Default small', + pageWidth: 600, + mountPoints: defaultMountPoints, + }), + ) + .addPage( + createPage({ + navTitle: 'Default medium', + pageWidth: 1200, + mountPoints: defaultMountPoints, + }), + ) + .addPage( + createPage({ + navTitle: 'Default large', + pageWidth: 1600, + mountPoints: defaultMountPoints, + }), + ) + .addPage( + createPage({ + navTitle: 'No configuration', + pageTitle: 'No configuration (mountpoints not defined)', + mountPoints: undefined, + }), + ) + .addPage( + createPage({ + navTitle: 'No cards', + pageTitle: 'No cards (empty mountpoint array)', + mountPoints: [], + }), + ) + .addPage( + createPage({ + navTitle: 'SearchBar', + pageTitle: 'SearchBar', + mountPoints: [ + // TODO: why doesn't have instance 2 and 3 a background color? :-/ + { + Component: SearchBar as React.ComponentType, + config: { + // prettier-ignore + layouts: { + xl: { w: 2, h: 1 }, + lg: { w: 2, h: 1 }, + md: { w: 2, h: 1 }, + sm: { w: 2, h: 1 }, + xs: { w: 2, h: 1 }, + xxs: { w: 2, h: 1 }, + }, + props: { + path: '/searchbar', + }, + }, + }, + { + Component: SearchBar as React.ComponentType, + config: { + // prettier-ignore + layouts: { + xl: { w: 6, h: 1 }, + lg: { w: 6, h: 1 }, + md: { w: 6, h: 1 }, + sm: { w: 6, h: 1 }, + xs: { w: 6, h: 1 }, + xxs: { w: 6, h: 1 }, + }, + props: { + path: '/searchbar', + }, + }, + }, + { + Component: SearchBar as React.ComponentType, + config: { + // prettier-ignore + layouts: { + xl: { w: 12, h: 1 }, + lg: { w: 12, h: 1 }, + md: { w: 12, h: 1 }, + sm: { w: 12, h: 1 }, + xs: { w: 12, h: 1 }, + xxs: { w: 12, h: 1 }, + }, + props: { + path: '/searchbar', + }, + }, + }, + ], + }), + ) + .addPage( + createPage({ + navTitle: 'QuickAccess', + pageTitle: 'QuickAccessCard', + mountPoints: [ + { + Component: QuickAccessCard as React.ComponentType, + config: { + // prettier-ignore + layouts: { + xl: { w: 6, h: 8 }, + lg: { w: 6, h: 8 }, + md: { w: 6, h: 8 }, + sm: { w: 12, h: 8 }, + xs: { w: 12, h: 8 }, + xxs: { w: 12, h: 8 }, + }, + }, + }, + { + Component: QuickAccessCard as React.ComponentType, + config: { + // prettier-ignore + layouts: { + xl: { w: 6, h: 8, x: 6 }, + lg: { w: 6, h: 8, x: 6 }, + md: { w: 6, h: 8, x: 6 }, + sm: { w: 12, h: 8, x: 6 }, + xs: { w: 12, h: 8, x: 6 }, + xxs: { w: 12, h: 8, x: 6 }, + }, + }, + }, + ], + }), + ) + .addPage( + createPage({ + navTitle: 'Headline', + pageTitle: 'Headline', + mountPoints: [ + { + Component: Headline as React.ComponentType, + config: { + // prettier-ignore + layouts: { + xl: { w: 12, h: 1 }, + lg: { w: 12, h: 1 }, + md: { w: 12, h: 1 }, + sm: { w: 12, h: 1 }, + xs: { w: 12, h: 1 }, + xxs: { w: 12, h: 1 }, + }, + props: { + title: 'A headline', + }, + }, + }, + { + Component: Headline as React.ComponentType, + config: { + // prettier-ignore + layouts: { + xl: { w: 12, h: 1 }, + lg: { w: 12, h: 1 }, + md: { w: 12, h: 1 }, + sm: { w: 12, h: 1 }, + xs: { w: 12, h: 1 }, + xxs: { w: 12, h: 1 }, + }, + props: { + title: 'A centered headline', + align: 'center', + }, + }, + }, + { + Component: Headline as React.ComponentType, + config: { + // prettier-ignore + layouts: { + xl: { w: 12, h: 1 }, + lg: { w: 12, h: 1 }, + md: { w: 12, h: 1 }, + sm: { w: 12, h: 1 }, + xs: { w: 12, h: 1 }, + xxs: { w: 12, h: 1 }, + }, + props: { + title: 'A right-aligned headline', + align: 'right', + }, + }, + }, + ], + }), + ) + .addPage( + createPage({ + navTitle: 'MarkdownCard', + pageTitle: 'MarkdownCard', + mountPoints: [ + { + Component: MarkdownCard as React.ComponentType, + config: { + props: { + title: 'Markdown example', + content: + '# Headline 1\n## Headline 2\n### Headline 3\n\nSome content', + }, + }, + }, + ], + }), + ) + .addPage( + createPage({ + navTitle: 'Markdown', + pageTitle: 'Markdown', + mountPoints: [ + { + Component: Markdown as React.ComponentType, + config: { + props: { + title: 'Markdown example', + content: + '# Headline 1\n## Headline 2\n### Headline 3\n\nSome content', + }, + }, + }, + ], + }), + ) + .addPage( + createPage({ + navTitle: 'Placeholder', + pageTitle: 'Placeholder', + mountPoints: [ + { + Component: Placeholder as React.ComponentType, + config: { + props: { + showBorder: true, + }, + }, + }, + ], + }), + ) + .addPage( + createPage({ + navTitle: 'CatalogStarred', + pageTitle: 'CatalogStarredEntitiesCard', + mountPoints: [ + { + Component: CatalogStarredEntitiesCard, + }, + ], + }), + ) + .addPage( + createPage({ + navTitle: 'FeaturedDocs', + pageTitle: 'FeaturedDocsCard', + mountPoints: [ + { + Component: FeaturedDocsCard as React.ComponentType, + }, + ], + }), + ) + .addPage( + createPage({ + navTitle: 'RecentlyVisitedCard', + pageTitle: 'RecentlyVisitedCard', + mountPoints: [ + { + Component: RecentlyVisitedCard as React.ComponentType, + }, + ], + }), + ) + .addPage( + createPage({ + navTitle: 'TopVisitedCard', + pageTitle: 'TopVisitedCard', + mountPoints: [ + { + Component: TopVisitedCard as React.ComponentType, + }, + ], + }), + ) + .addPage( + createPage({ + navTitle: 'JokeCard', + pageTitle: 'JokeCard', + mountPoints: [ + { + Component: JokeCard, + }, + ], + }), + ) + .addPage( + createPage({ + navTitle: 'Layout test 1', + pageTitle: 'Layout test 1', + mountPoints: [ + { + Component: Placeholder as React.ComponentType, + config: { + // prettier-ignore + layouts: { + xl: { w: 1, h: 1 }, + lg: { w: 1, h: 1 }, + md: { w: 1, h: 1 }, + sm: { w: 1, h: 1 }, + xs: { w: 1, h: 1 }, + xxs: { w: 1, h: 1 }, + }, + props: { + debugContent: '1 (no x)', + showBorder: true, + }, + }, + }, + { + Component: Placeholder as React.ComponentType, + config: { + // prettier-ignore + layouts: { + xl: { w: 1, h: 1 }, + lg: { w: 1, h: 1 }, + md: { w: 1, h: 1 }, + sm: { w: 1, h: 1 }, + xs: { w: 1, h: 1 }, + xxs: { w: 1, h: 1 }, + }, + props: { + debugContent: '2 (no x)', + showBorder: true, + }, + }, + }, + { + Component: Placeholder as React.ComponentType, + config: { + // prettier-ignore + layouts: { + xl: { w: 1, h: 1 }, + lg: { w: 1, h: 1 }, + md: { w: 1, h: 1 }, + sm: { w: 1, h: 1 }, + xs: { w: 1, h: 1 }, + xxs: { w: 1, h: 1 }, + }, + props: { + debugContent: '3 (no x)', + showBorder: true, + }, + }, + }, + ], + }), + ) + .addPage( + createPage({ + navTitle: 'Layout test 2', + pageTitle: 'Layout test 2', + mountPoints: [ + { + Component: Placeholder as React.ComponentType, + config: { + // prettier-ignore + layouts: { + xl: { w: 1, h: 1 }, + lg: { w: 1, h: 1 }, + md: { w: 1, h: 1 }, + sm: { w: 1, h: 1 }, + xs: { w: 1, h: 1 }, + xxs: { w: 1, h: 1 }, + }, + props: { + debugContent: '1 (no x)', + showBorder: true, + }, + }, + }, + { + Component: Placeholder as React.ComponentType, + config: { + // prettier-ignore + layouts: { + xl: { w: 1, h: 1, x: 1 }, + lg: { w: 1, h: 1, x: 1 }, + md: { w: 1, h: 1, x: 1 }, + sm: { w: 1, h: 1, x: 1 }, + xs: { w: 1, h: 1, x: 1 }, + xxs: { w: 1, h: 1, x: 1 }, + }, + props: { + debugContent: '2 (x=1)', + showBorder: true, + }, + }, + }, + { + Component: Placeholder as React.ComponentType, + config: { + // prettier-ignore + layouts: { + xl: { w: 1, h: 1, x: 2 }, + lg: { w: 1, h: 1, x: 2 }, + md: { w: 1, h: 1, x: 2 }, + sm: { w: 1, h: 1, x: 2 }, + xs: { w: 1, h: 1, x: 2 }, + xxs: { w: 1, h: 1, x: 2 }, + }, + props: { + debugContent: '3 (x=1)', + showBorder: true, + }, + }, + }, + ], + }), + ) + .addPage( + createPage({ + navTitle: 'Layout test 3', + pageTitle: 'Layout test 3', + mountPoints: [ + { + Component: Placeholder as React.ComponentType, + config: { + // prettier-ignore + layouts: { + xl: { w: 1, h: 1, x: 1, y: 1 }, + lg: { w: 1, h: 1, x: 1, y: 1 }, + md: { w: 1, h: 1, x: 1, y: 1 }, + sm: { w: 1, h: 1, x: 1, y: 1 }, + xs: { w: 1, h: 1, x: 1, y: 1 }, + xxs: { w: 1, h: 1, x: 1, y: 1 }, + }, + props: { + debugContent: '1 (1,1)', + showBorder: true, + }, + }, + }, + { + Component: Placeholder as React.ComponentType, + config: { + // prettier-ignore + layouts: { + xl: { w: 1, h: 1, x: 2, y: 2 }, + lg: { w: 1, h: 1, x: 2, y: 2 }, + md: { w: 1, h: 1, x: 2, y: 2 }, + sm: { w: 1, h: 1, x: 2, y: 2 }, + xs: { w: 1, h: 1, x: 2, y: 2 }, + xxs: { w: 1, h: 1, x: 2, y: 2 }, + }, + props: { + debugContent: '2 (2,2)', + showBorder: true, + }, + }, + }, + { + Component: Placeholder as React.ComponentType, + config: { + // prettier-ignore + layouts: { + xl: { w: 2, h: 2 }, + lg: { w: 2, h: 2 }, + md: { w: 2, h: 2 }, + sm: { w: 2, h: 2 }, + xs: { w: 2, h: 2 }, + xxs: { w: 2, h: 2 }, + }, + props: { + debugContent: '3 (w=2, h=2, no x and y)', + showBorder: true, + }, + }, + }, + ], + }), + ) + .render(); diff --git a/workspaces/homepage/plugins/dynamic-home-page/dev/quickaccess-default.json b/workspaces/homepage/plugins/dynamic-home-page/dev/quickaccess-default.json new file mode 100644 index 00000000..5a0b91ed --- /dev/null +++ b/workspaces/homepage/plugins/dynamic-home-page/dev/quickaccess-default.json @@ -0,0 +1,111 @@ +[ + { + "title": "Community", + "isExpanded": false, + "links": [ + { + "iconUrl": "/homepage/icons/icons8/web.png", + "label": "Website", + "url": "https://janus-idp.io/community" + }, + { + "iconUrl": "/homepage/icons/icons8/external-blog-copywriting-itim2101-lineal-itim2101.png", + "label": "Blog", + "url": "https://janus-idp.io/blog" + }, + { + "iconUrl": "/homepage/icons/icons8/github.png", + "label": "GitHub", + "url": "https://github.com/orgs/janus-idp" + }, + { + "iconUrl": "/homepage/icons/icons8/slack-new.png", + "label": "Slack", + "url": "https://join.slack.com/t/janus-idp/shared_invite/zt-1pxtehxom-fCFtF9rRe3vFqUiFFeAkmg" + }, + { + "iconUrl": "/homepage/icons/icons8/youtube-play.png", + "label": "YouTube Channel", + "url": "https://www.youtube.com/@januscommunity" + }, + { + "iconUrl": "/homepage/icons/icons8/external-mailing-list-information-technology-solid-solidglyph-m-oki-orlando.png", + "label": "Mailing List", + "url": "https://groups.google.com/g/janus-idp-community" + }, + { + "iconUrl": "/homepage/icons/icons8/tear-off-calendar.png", + "label": "Calendar", + "url": "https://calendar.google.com/calendar/u/0?cid=amFudXMuaWRwLmNvbW11bml0eUBnbWFpbC5jb20" + } + ] + }, + { + "title": "Developer Tools", + "isExpanded": true, + "links": [ + { + "iconUrl": "/homepage/icons/podman_logo.svg", + "label": "Podman Desktop", + "url": "https://podman-desktop.io" + } + ] + }, + { + "title": "CI/CD Tools", + "isExpanded": true, + "links": [ + { + "iconUrl": "/homepage/icons/argo-icon-color.svg", + "label": "ArgoCD", + "url": "https://argoproj.github.io/cd/" + }, + { + "iconUrl": "/homepage/icons/sonarqube.svg", + "label": "SonarQube", + "url": "https://www.sonarsource.com/open-source-editions/" + }, + { + "iconUrl": "/homepage/icons/quay.svg", + "label": "Quay.io", + "url": "https://quay.io/" + } + ] + }, + { + "title": "OpenShift Clusters", + "isExpanded": true, + "links": [ + { + "iconUrl": "/homepage/icons/icons8/openshift.png", + "label": "OpenShift", + "url": "https://docs.openshift.com/" + } + ] + }, + { + "title": "Monitoring Tools", + "links": [ + { + "iconUrl": "/homepage/icons/icons8/system-task.png", + "label": "Grafana", + "url": "https://grafana.com/" + } + ] + }, + { + "title": "Security Tools", + "links": [ + { + "iconUrl": "/homepage/icons/icons8/security-checked.png", + "label": "GitHub Security", + "url": "https://docs.github.com/en/code-security" + }, + { + "iconUrl": "/homepage/icons/keycloak.svg", + "label": "Keycloak", + "url": "https://www.keycloak.org/" + } + ] + } +] diff --git a/workspaces/homepage/plugins/dynamic-home-page/docs/catalog-starred.md b/workspaces/homepage/plugins/dynamic-home-page/docs/catalog-starred.md new file mode 100644 index 00000000..ea2224ed --- /dev/null +++ b/workspaces/homepage/plugins/dynamic-home-page/docs/catalog-starred.md @@ -0,0 +1,34 @@ +# Catalog starred entities + +Shows entities the user has starred in the catalog. + +![Home page with catalog starred entities card](catalog-starred.png) + +## Examples + +Starred entities and starred entities grouped by catalog `Kind`: + +```yaml +dynamicPlugins: + frontend: + janus-idp.backstage-plugin-dynamic-home-page: + mountPoints: + - mountPoint: home.page/cards + importName: CatalogStarredEntitiesCard + - mountPoint: home.page/cards + importName: CatalogStarredEntitiesCard + config: + props: + groupByKind: true +``` + +## Available props + +| Prop | Default | Description | +| -------------------------- | -------------------------------------------------------------- | ---------------------------------------------------------------- | +| `noStarredEntitiesMessage` | "Click the star beside an entity name to add it to this list!" | Message that is shown when no entities are starred | +| `groupByKind` | `false` | Option to enable a variant that group the elements by their kind | + +## Contributions + +The dynamic home page plugin reexports the [`HomePageStarredEntities`](https://github.com/backstage/backstage/tree/master/plugins/home/src/homePageComponents/StarredEntities) from the [home plugin](https://github.com/backstage/backstage/tree/master/plugins/home). diff --git a/workspaces/homepage/plugins/dynamic-home-page/docs/catalog-starred.png b/workspaces/homepage/plugins/dynamic-home-page/docs/catalog-starred.png new file mode 100644 index 0000000000000000000000000000000000000000..27d24e8ad66a03083ee38c1b718c3078a4d748f0 GIT binary patch literal 76836 zcmeEucRbtQ-!^KMuhQ0NsnJ~&-wssG*6LDPB4)HjDI!MgP0?kv{VKI}C<%!bGiF<( zYKsv>P}GQ6No>!_@40{XbN}#q{(Am={?S)R&*%L)=Y8Jex~_9x7~Iw6;S%OzVq)UC zc|+?y6BC;^6VtwDob2E?BCkvl;2&o9`?}Ye(5=U&n3yD(ZfadK@`lY0?Jte99@t(e zyw-8&kmt=e=d3$yUjG&Ij9u$r(Ho9^4& zl%JJEY!A$j0)8xQ!5S8h74@oG&?n26#3+cg8Qe=F^@1KTYl&cu`>cT*TS=b>Le zFfp_8{m&mE3H$lx>tDa+KF(Lh#Ekg;I5}kZ^Caejz)(0I&Qte-gB4$_3<~cU1$=B| zVrC)!Wuhf^Jb+=67db&`50khUCgpMc%4lbpMEEjUyO&9vz@%qyUP{HpQfXABr;4J~>}cjxOfv);c3UP-_> zM2X)FyukH}WtA(t?dCfS{+95!+d(DYtJlr|obm0)Qnf{lPxs!n540p{4@B_RpYc)>ydRQ{EebBVLAG}CBVT2XE9p?Hl=7sD%M*-R zDn5ERdVN4z1;BsURg02OEAfUr10Hzh*@vVZapzx~N;>wRU@zU7o?@hf@h^kQV5rbC z(i@fYt2iL@ZdAW&DId!MSih)9sa~z!W^l!5)a@gxMhPcwXWFAXX))@#jq2tnjG=6K zp^sRI&!?^&*9Km6(){^Qh1Wo)UQ*8WaIQBgjU5*R`pP{}n~TkI#wg?51ejvKka>x7 zii}m&VBk7gv10V4^jlTYxtJXeu3^HmpVvF6yfO*#NcT>PLk0A4qK4dmPEPk1e$9nd67)u%pNwuyu)F3J?}wq5?k)1nSt1Hfd5h!Ck-RN$cJ2qQbHGpN^K9I? zjT>ytBA>L)I%e2#TbrKNmbIuBlBZFw!|4gRyrCoo?Z)O2&fhY8lwhbA#0VM-?9H}@`JRXEuY3QkDS&8o%}~X?t~bBxM=&Rc$pP<;nVr{ z@J9lng7$}8uPPb0DZmMr9XBaDX+)zE_`u`SxBhwF^{eds&cOEg1&=q_J}-l|(}sl$ zhl^FM0#X*4F(prugl;T#O7Ptd(PG7=D0>y(`=rBmM_E~U;DG9K`>~kL&o>VzDSJ6b zr(rD0I*~@%Zz&5t;k6y*2j_L9g$9;@CH0=h`DJD~spKd{V&3DH#MLv9BKvy-SVySS znI_22px>x1VZ9HgilEwY@OzJ7B?lu24JJS0zuv1gf1oGJcRu!cFg;ud_BU33UL1p4 zd}-;{bedVcYr>X8%sZXjmw&S1deo5%b?EA?wcs=qIZQ#h%ZFIHP%i@S%X@gi(jMd- zH=TfdlkoI=`V!G+>!p}zTm2>UBv-u4yfeIeeMisLK&DVXyrw7)_CBuXcU2#ztoPrkj z+%>ayHVKkU)&r;37zn3uQvY|FRK9O98@HgzC!Hw&cU^LKdeD|415Ix7J9Atp>qT@Z zRMkBQY%qF)fCBvE;(MstzidEu8ei)w_n7e)6tZv$sa%~%Vpb5n`ZVu?b^WvD`=>{N zn>;yv`~7l&n1g0ErFxqft+Lp7taoLuf-+k+nOf*Y^l328F?k5~y@&hN)!*;PKcz86 z(&*BHT@rM<^)9)7^M@q&`Z-y!pM%5cJP0e#y5pei>We zk-n*_e#K9^%A!OR&9d)*8FWwa=rKL>bu3z0ws%Rhgx6 z=G>!N#+%E7-uJJ>$E`S&&0IL9^3u4a0L~-4ik`F#g5b{!-Iy61?MDr=Kh20xc+=Hq zH{ER^{zEzQ_W)ut>wz&-Ri&q>B6M|SxUdfyr<8i(zFc(79f^a?n8%+V+}^xadCusa80bffNuZmD=!KoBFymt8G@| zY?*YyIzrU5@1YXYHy-bJIV)#4p(tOjdgEf7c6%i|kMM66tL@`qftzdnoAhA>;fQoe zhKq@e-12M&O9N>Y*_&_SKJx>~L)12L0-ov-3o`h^x?ND%9b7&^x-*!0dB}| zW3+`5=^xT+gu5!{C%*dU)sm$-+|u2duCMyhF%Z>&R;9^jmKV&b0|Wf%LteReK3p8R z(^0AJ8}sofulhzFb+-Q!$w<|aI*s4wdu7rK4p|NaZln}=FkJ&C@Xa@N7z@QQB2_1zD}rk@inku%h?U*%lM{U%1o?E+l`QkERGRTeN08-fC|B zgVZ@Z?3yM%3)#A{PN@z^QwQU9xKg${*jm5Qc&{_M*vk z6PvVwHZQY4W=gMB5ZJ_*^FU^jCc%EZ6mY+mUS|>B@4!al!G;-BlZxR3<>Hb!WA1QL zhUdQWdJwP03gVI1uZMr$62O+R;TErsK0j&E%xWoz$%r*Do=%&!(#~}^x|V}9-LCp+ z78$`KGLZ!{4n|5qnTrV$8w(BM%q5VD{n$^OcE1JYr-fM7Y(si9AUPRQ>5zbdwPA#W zH{H;KJ{F@sS5b-1pdCOKKpgi~awC6H#X+EKTYzO3n8J^SM*hN|xfb9O)X6xDQcy_2Xce9x2mi!+hN_>%ZLVlkV_k=Jn9GE z;Z!dov1;5W%77V@3UQpa+RXiF0XZ`BVe^|QTQ(PA({B+euleqbUUK2u-yC#=aZPTq z1oAaCf@sZ#=bD!{k`HV;9nX5l^7u@9hNfjRH>PB%E}T2pk3Q!ts;{!3^!CnDh51@NdilGBc{HI9N z>qgt2>|1b&kK~FOURXQWDF=KYoxXJHozQ{Hj4z;@>fIMMX82dJhXv*x9uu-|TOsK6 zAh45>`jGxCwLGrd@ z#?<*ij;_bxQm^&W1COV>*I{`YLacX{zj_iG%!sU)coPmBnCwvVgIY_%&qU^>{5?MT zn;Ke~!)-EOjt{aBace{MCrS8jT8mxl!bQagLp5^G<62rmQC|c~k;3N80a+P>T+`4Q9=0jBdBm%O(>Ry4 zZuT@Uki!#Gn?$%8CR>t(I;;{5@T17tTnNgz(M!gtdU(V6$aFse>lptDk%xR6wm#2p zWxfT&S4chos-KoROkUlIQG~GUKXsXezXORgyB}bu2zNUi1FcCK*0C8ujtk7M(Fa<{ zzS+R_6EVpL5~^!x{#1|BQ^$lfL$ug&$P-lGR^OQPJpGaPYoC0rYl4~4DZvp6&pUhj zD>J6G0#sqg=Raz{@>hp?tJt?o(CyfKxoBJ$m$5&Cm)v8uodbbk^{N$`p(Ojib$S+h}t>z|dQ*r6O+^~4y zO0B3MGF+pNXXBwpJ%S>-L}3(&F22a+u*8Tvzng#11;A+byqMLz$Tg zH156ady{ZMGpySR%u~YiYi;KE(jN-&f=4LhMEGDuM;A?p2NX5d_mQE!=G+KFtVfja z8o`dWB<%U*?FQ_&zQh}5Ox0cSV-`pb=Mv{33%0L{{Kup;mLn9hf3~*LHcdm~%#N)f zw!WlE{_5n!cPVtr(<$GQKt%p&MKz|@gC5cTTLcgHx@X1&a`JxCOPtPpz~=gVgn6y> zBuRks{obWVo})7oWDoKU}bFy$O{u9E^p^N(+TuCvI$&f8SaH zzLXeXZ2UeuC|hy5Cs(9B9%|*++dI6eJK357@6NhcCH}-+ep{?)t)_a~V{2m-tq;Ez zfmFlZi`RjLOo86a(P5GlWnwh%a5C>3uewUx6clAF^I%MF8#$@Pft%hh;_wY~W5cc` zQJ}r}cz0O`D~`*h@|KgO;ifAj19idnC%eF{hy- z?E%o_rmFieVU6gkX;lloGGUdi^yvHZV;v$H9-O(z^n=dFeMA}a;?no5Ns0(s%grqZtMt^SeBs*T_MpPigR6IA z6uOV7`WAW2_FW)-VzfvQ5efm@jIC`~uY5DW?v6aCK9OL}f*xbTtvz&ko)c@8^ebBz zG2dPvM3|=}I-(bH@eO|qg{wan=4rDtn{s65CpakOywK-u3!`Rl4-isIX9 z_2tizE|pc)MD5Leupuw6)kR~QtvI$x6xmdAvXh!^%e_OWfJKe({GDq}Z zYGIaMRJ3;qkGG#F!rxK{X!-~+`n4Tp-H`Y-m-wNB*lE&1KuOZr* zb=3e#=qw3Il6q*@nmi?SaZ@)iWD0crx!1zjY4qWs$eOql{9~X}KWotB$ie^Ng+K+Rn5C5aS+Z#C+iz zV$^dbH2gRUa&kF;kOgL`8$yjnLg4!SZpCGw9BecnMU59vqA-?yI5KX@qJ2g@5qTBL z?6fcoDQlIhwth;s^l%tx&5@d`5*DahBfON^{uw^RdH(o(ROHFc){y!i#9N{isS{Z_t(~~O0U<~mA9qzD3e?Y0!ILPSfzyi$^=ca ze`1JqiDXfNIEnfEep6*wxBrgauY`wCOAm;Kwmpn)ge{P|f|rA6)~1ABg@i>Yce7~V z(<6_$-Kdcq`2{`u{UQlZ?dC9z%j8o3Ch9TW?V5qeLXt_2pk1BtswPR$v5f z;&E@HNx{f4uTDU7$S>Yp`1>2$oZ(A}UB*RgujbsBl!1WMsBS5qZ&d7>q0z!6g^ z_%{b66t$SN%lUDvZw2Rlb9pw*h0pyXQ|@Z5)mDxgWj3~%lohgHgMOM*cX+DR+e9Ye z09-s6{EFWpL<>64WlrW_Tb?>hLf>keot-`Q@XPi!BnuDG1qmRp%pNu$9!Nd1pksSx zB_mpWI_s0gZDvH_MM{FpzAoG5_hlNU0ftM$$fx+;83AW@UdS;=O^ks+>sABu(bM+y zYsTeIr;hbRvR*%CSJ>oQR|Z97xSOL2E8^jEPTQnhI{}Of3T@Kzs3Qemg%d6 zUf4DxX9t(}d11x0jOVKr{XT zzAM7H_2GY4a_PQKG4J8s(UdM%&VF)b$Y2y zoq{yB{Srm&?iuZ~j`46LWE+0*c5uZ00+%A8z<-)A&r{YG64#Cu`G{ZWSrJKePxuQ08OPMjP_kvLpy+QWxDtwkEOtB7l3l|m7S(C}! zt%_-my?|ms#B3^@UGn{1FGYgznqo!HT?h)n$Xq*5>hYQ;`3|np3!{E`l(DlMx}j6^ zN@XXJ144<$1Se>K1d@ajriZb|6W|*tjYL>XKa1t5?@iP06_xii0Zn&={sd4g-`4~! zco}^5j$-Fu9~q653JK5tKwZ&^l=L(%uD`h1bD%0Hr_fS+c}&&#JGrcoo>l>m=@$#g zYj{~+Nb4i2`p^PlHUkQUKW=k9BL%r-y?n&hu_f~5$LwQ^tafgLTJt|v%uGAGUJa)I zdX|${YEUZXVzEY{V&N^vppuJ+&j>7EtXiu4IizaaYzo4fvC}H_0(_OP@P%8(YX+(P z-1hhJJ;wXI|I}#`z6*KZ6B>sszJz+Y>G`MD*lECcpbaveNR}!nc~p|H{*`W581#}q zf0Op7O=?7DR4S0ZJ*F?MIzIlH+0B}j3kU+t`BYnXFpmGK2yd9xaI3O#<~0dZb`Yfh z`lwM0I9Kk8hJH@|8^K&emIc>~yO+w~4}<#OlxEVn$e`}C+bZ{aelCVCW5m)gb!S@)mh^cz_}h7Y;5+v~EvvJ?;mOX#!zkW> z&>&vu|BFEWzX;_2fe3`t+vhOfjgP?X4lR`JrKe&B0-2+E&sDCk0gue25H7gy>^XtL zM*wUk!-oP1ni)XhBU5y{Eo_e+aN!_ONbEl;bWP$akR1FOyu!UlOnU%!ha7^1qf#UV#;0`C(h3m8lC%yNK@0E0$c9p*4E;<{{CW@k&jOmZMQg|$!M@4`izb}-(%PF zU6**mj0qijak#-WE+;4WN$$_qVgT!x%|jz-!~g_S$`H2XEY} z8A!htkaYQBauPi_Bn)2ru@X|jGt&zgxC)aTP2xACF?P;t=;7B?Lf@@;DOG-E9zmSSF!x|6?}k3_I&&fN1o5d7ghZuv+c?a6CT)fbVSce4&fx_5d%8|i}OFjRb z-9rs^NHTUlxWuDbkoJ^vRt6JXGLUO&fr>B?sCqM++*6t#C9)o>=QCyNSFW#a4hXEq z+gY9T)Cx+$t3*rtAFqT;lqfjI7&Y26_+U|!Xi&i9-MPYPJTDMW6!-g4+OU!00fWU( z{f~&MVm`|k9Q!|pLsWB+c-69yxbvo+bEUaSC_z~$I!9)GlzV14C|$;+s1FzHHSr5d zUYogU4%8a(zWEV_#Z{pb0b0@e*1%aW!&EY(ce~T)U?A*)VL}x#^F7=lZ7MU#EQn&` z&o>T=T(l3iblLKW_G?L$r-9~$pex>1c+)VmPkr0TLtR|i_a8jU@2%=kNg8~(yk!nI zreMA>7Sl6NI493KCf8cgA}A&5$Z9e*FcTw3+62^hE~45F4oFkk z@1klpvDu;C%L)0#ZsWHqN`2hd$9t{F(G_!^%oM;b*;&^|7Xp1jd29)g?exqMqG=0f z(>~XrYWWWx2MLMOc5Y|w4PMg*%@8bs?M15{^nw$XkM>kHR35jr?*CX@QM=F}>KG-g zQ1r<`>`8-YP_n4c_k%P5fc2f0F*m0=L=HF>!Y)8a(W2@dDV;@AN(yd$e2)FoZtEMb zwAB<4Qr7OBs&S0Z+W^Y64iuFI0@8s+%>;{aZf`_s*{hZhOVP^1Gn;-bSWze9*(LWo zN~HjN@>lQrn#Ln?;i6znqkN|Z*bqE|FC_O8(wzsgvR>{>;~yowM(VWR$Hm!#qBT#- z)HGTeBUbswd(Nr~XBiY=CvwI6IYuCNLnSh`$t zD%$-tDe9zbyv~1W;usYwR|q4E4ZarG@D-@a=k(#OHCufCgrQoEcvb(;9)%|Vp&R|d zP@QKu$>q$y<4PHd;qbUudpK6Oj>MOJu_K5c| z7D@5>`kC4?S(g9SnC>yT|1IGCZh;O`*;wu_r`Bfc%11?tJtHYn34sPH7DJ;(Paj9S#Eqx(;i>C z$tcg)4*eZccOE<~0h(sF*W6T6#%;NTAj=NE;6);YwR9S2~& z8>8=B_YgcYG3%#4{1)N*4b(d#GD12MK_T88xP^@v-7WowgS#UY6N^;cD?1&{nr7vQ z|C>aZl_5}N`d}^*dmiK@nPNZ7?O0vxEG*tE?LdU~cQO$_}!; zV9X6p$!ibQ>Y;zDay3Fh>vQ<8R`MPW!O9IxI+8qaJoW}KNz1`qZV!_d7$zxBMsuFJ z15A3@J;=F-NiTs(_xs8uSzdrLQSbF7uRZj2eKJPR4N`nQ|E{B7E$?Rd$e{19U z5WpmFZufvaOezB=HBl$$IKM-HNobtK9?jT|a$r(teDHn=K6NnCO23=!9wYs`^xene zdI+rd;q&o(^rH8*z*DpZL!U_Sfo7iQo#m#t$50-OD%wsaVL!_Suq;tZl0thd%YBC4 z`OEvTCJ8=sFjSxKZaE?-$nlJ!;MxhiEEm9Tj5>ZMevd-zzJbIXGXju#^v@*sOQ%`6 z!fQ5Gm&Rzx3tKU|gJ)X9_Xt6M9eVDiWB7UP4HguSf5J!Zb>0Te^Rk)T<5#=uBP}T) z*UvuEa57d0%y)K~2|)G>fY$fR#P7ufJV1;Q;sMKVZ0+m@fRr$yXq7^&9C#@xGhGpc zfmQxX{stO!3c4J#*~I`573ATp+UtAI;Dst?3; zgb>U-!xG?D#sxMvhc|RyA9!~#ES*4JTxzL$pDJWRzPJ;u9x0TxmxT=Hd7vXcG#&k zS!r(ajhJ|c&6OiNHbe+N@Fl&B9}lEBzne*e33fgb{1j!s}7_KzN zcC0?Cr_|M2XhJk#xq}8!Ljn*!9(F9w!}M1Ac^R5~7`XB~R?}&oRO<;?mkLeU%H{j( zzu)QS+6@3XDlAV<#RBz&eVWh2QMx)0#Ayxs3~A;CRDb9?I*YFwUy)P&)2@Js7&1aoDGdV#e`ccYgJie_A_e0~qF-RwZfp^`9oT0|H}!p%})apd~c&K*hFzjvcIM#PD%&VvI+G8O`pTpWVe^xO^`RaK2yUCTv?eu z=xzz2gA(oF;#Fj9&yrtnhdShkNYjGbQa#Y$%n^BWLy(Q*K|n7(z)*E5Ki*uU(w4jQ z2N;sn>g}zHI7!2L?4b@}*wYT}{4MEU)SY3uk#VNQ>cjyJi2%kD#nIlLzHMQWS%u?T z<+t(8KmZ<|I{=?}ErS4*zp>UK%ccN>CKoizx~FL$o|l?8O2`>utJzXaRC3ScPLvl5 z+HkD^Lezb02JH92a=#*f2+XeWLSE5< zq#s?i=0H~iD*f)Njm6u;ei>Fb?EhQ|uL2(QXl;ulZ09+h&tE{=Fq0K|rz4>f@|4G$ z`jl(h=o&JE3ld%~40K{{xd(lz)8p4Ic(7{rL*>|+78KVV0I8o_ABhw<1A3j0T;2f9 zwi23^M-T^la?S0y-fu=K7#W67gBUUtBOrx39fH)y_V=3FrHrq!I{rB#I{f9f5TMiA zED}(+%y_UK=b-3hAo1)9e|448uF30>RGjVWHPe&p{H+)W&skYcDwq5P)kc7AkP@E?@5wQxHOp0BQCxju|4ET*|9%y`nV3N>%InPA zF@e{P0m2GS_CPc0daazrxl-NiBt*b5&^NHsig4_1P*24dKU9JF!{WMC<+;+6xax#s zJI@7a`~?aU>*q~h_-@FDJU!sOy|s=Intg0%w{8M9s4YlnOYpklhu_$taaSLG=N!J^ zfJlF7nSyzFhq@4z847(kq)H!rH~AJB9#&TqqqcU=hDtsiZ!vnkgCPaAJliRTV@TS$ z9}4hG8!Tf;;1r63hAk?{?**w$4x|>gcf#eVB~wXTIe$X}LPg{qY> zx8$t(!4Gdg8$1|t{d{aIGv>V>{vFs3U(ByTvH};I&Kl=G((WBFhU5tY9@kAH#%S{w zw+s~@$d&=5DKVT@ zO5Z9+q02y*u#EG6%8Si4Xhc=j5DmC_sMD1biH;V{u_Rdi!%B@~&vuj_8qA;s;tp=e z=KNf)QOkJ)9!L4$QK|es0^kfQRqdiN4u*Jyg=}74N8w_ z)N)jX{}-~;Q08Ftl~K+l^`I){QzgM(AZN=S>o%BS#l{<^t{RnOaT$U)~;@2JXgx zXWz1+#ztw^h}`5QlDLRAY&hh1NS>HO7C8dh0Fg((v|^i`cAOn9R800dgWpc7-PjQ) zJM}@B-0XRM^dw)gMkYIs3-8d2h9i?9l%WjG$hA90N+?V#Be+9VQA9L2-{G!mJM2Bi zGn@|-w?Z7o;*bx*I`DKFIG*7NsUieRm%4R1dZY*Yc6`)kX2vK$49D{oopB2~NooP* zDQ-U{K@7#LqQ4X~IVc&l2h%|oDOqY&ZW}@aH4vI`xg|kk1>5QY>e`7& z!&;HHU`AT^GA1?x=&O2+x|J0d8H&JuF_0T~iBPaKOgfPJPAUfi$(eq{zO##Z!DtRY zE6}e?)UtdKo_~2y)ev$s+jVt3K51=<(NjBH=P=T-UV+*QX&)d+*}hyg4#{D$g7m6U zyA3l96cd9>K$@oYm?O&8QM%|gGIG%qsF<8JuTTr|fBN!2RmA83uGzB2BI7z+Z$$dj zsZM82?AbK`PPQt*?zu5%_|~GWs);EmSOFW4w+96j8~vj{URhT6%?(vlctstyP-IljAucqgy=PQk;lRP1hz-%M`Fgz!H|Om5DJCmrbykKr0$kNZJX z`~ng+8GCwrV@bcHDKYS2y567em!m*M=$3oLh#B3oQPh-*%=SR!M)v3&FYPfG7;~R& z#h%ei>;os;4sDcxM(RJ|Uw%(e+|+Hc&u<)+iEU!W5G1n3L#1THBG*1LPPjOK`v>2WI z{UpERu@6G-9Prl8W-?-)`h4@9#dB2peXAh~NOm=6EUp?SrA;}m+M&axFn|Ic`fWV66{m42RA*afm*RMZJW? zJb=)U0ig;GT{>=wX;QZ#r;oh~hPoSsBax{-MRUKeeZvHf@>hDj|)_Tc4sxCJ+oQz`tewekUOA_ZTykDBMyL%Aw}TK zwO++(>pIS7a-hYj642cP=b2)FMbW7GRX{-h@q{p2KHG$>83 z+&UJvBUXZs|L3&0gcWc({})$w55#xFk(nivX0QBjEda3yrgkPqg9sV{-0_{A8KAiz zgExIlTU&e@4p@Pb*lH#fwVm;R(*_4@s+YUKYm&gAT9>AmW_OKbaD)-dzez2<4mSn^ zwacpV?ndLoL62P$d;W5a=@rI6;C_Mb-2-{EazSd$<)xc*XMfJl))m&NJjoCQlvQ_g z+qYfNk;ZYpbC&_{GQ>Mk<%lXM%!LnlKEs8R#wQN80N#vyk5&66c#fYL5yno1cRq8i ziZg0db|F1Tx*DK!$JlGDLA-C<7*qT{7sFW!TY8n)A8fa7Rx&^-GR0Jiz4LQD$a;c7 zk!iiM-r3^-e^@@;xB{?ZFM(-KiYsQbSZd(R-9ZuB-6Vx??0*SckRT^XGJhWzdj1Yf zXYzyH=SMjuVo$If6`e13?ypOo+x+alqli{{|?C(+JV{YkDFpxow;+NHd+7O+0L2TCon$6W8x?c zwEN~Uesd+^uY@Y>Kf9xtDmb{L3#HSx@UC1Cxu;D;m)Jh#+R4^3* zqz{nLwBJ?z^a2j50nuUl2O@fn_78g$d1WlxT>z&zIQV1Ymrp~$R{vY=Vw||u zgJ~49Yl&rV*{2jEOqH#uZ&szkjDX+ojs~aMl^1hMnR;#cZ@xvCG#kecOj`NZa$7Yr zHqt70&Did(QO|8-Q8Sa95NghYwfp1gC^XZ9yDabDB&TH%Cedq|uc2=O#1ID?gfuINZ{ zH}940q4vlcV**bCaKKmL(Vqtc`PPx-{=x>Y762mk52?;!k6yBhqP@8yrwIbYC7a_u zyA<;P3lj>tE-;Ve35)Pu0;iicfzrIEfGWWJt3}RX!c1xfIu8WHQvYfqyqp5Ti6=1A zQlj>VO0{O{py(xM6*(mqB`~~?!vQk{Q2bKC+b5GoG)Z&|c_szsZ!6{tm1|KhSeI{k&}mZ_FDh z28Y|SScss}E-&VhF|%;6y%k?fsoEyOj;Mm$ST>{V#Uqz4-TDPbB2^0dJIzE!(-(68rh>2N2KVf!9$X8kykkiN}POiz>T< zaIi+YMm;-j$eH{If@EdK?c+G$sXq+Pk1&Npz=_P7^vbjge2u3-7P@1mm&&#S8Ur62 zC1dlMO!Rl-v`irzY+0n1;pZp$ZZII&BFn31cBdoGXa9~)v8fA~ZHVt65sh(aG=;gWR$rp34*0^pNPOyVps zm=NnlhVCd#C|-A0_78b2U{JaaAgO*pZIW9C3k4vm zOzFc5u6!&XKyj3`>iFyMuIfl*g5iP0#6>MmEyhv^h@9OcQQTx)Nh77Ms4MY*(Dz-> z<3j_(OYa|x)QDhIG%GAi-n+gN`v#bFv@A!3pXCksl8$rz(OusO)+hk0{H~H^P&|a6 zL36wbe;~Zaw^&&u1?G*xwMeO)6RjDX5`3D#&5k^BliXvKu7Sty51mi|Z7whpiQ!w? zC&_GdGSU9hMsf4lau@IZUm@Y(1!UYyrM#ac2Ewsl%j5634C`>k5V-1Az%r>(N zhP#KVVR(ck@Ce3KzWUGR^ItFdIgN>#QtjA7?vd@uyB1)c=ki7`P3@cUW4j7{P8TU8X(5t@-kfy=$`g^`^741wFZg zX`l9c-=>tLMTstj;&c7p%D@V~3(A-|0ra708{E|qCuh|cY2;>6m^P66?06}vVr~>`1z6$NRW&Z@1U#7mgh{B`K2w#q4F2Pj)`M??cOm?t_ zQsS!n-3j2UkLL)BHoJC1EQ8ZLXgn`i#AVD34h=byd##{mK+iT?bSbH?J}PN8WPL7Q z0gldV5U1Eyrh5PSS0z$nifMHr3;3$y2P(rEg-@FQa!BRX8TpDrKi=Ua)66?Z*Pkx1 zm~Y{sJsF|nA+SzMnbvo; zC)=6>s7sFc;d%`pa^QkCsqubjpqBq})zcmUIDn!9Dd<98wT*Ma7h7+}f^ZU=UdFR) z5BxhZM7T==G1VI309yWgzg}xW{MWmMjsup~c9)eJ?y4+&2aU1yx+6Jcor0Cdl-CQ& z!kn%KO`=m68X)EpaOm#gH(kP|06IHPw&h);g<52A5&v(NfUd zksO~G1JeqEoRC{B-DMx4ulN&VCjC^ymib# z*`xvwr#D{Rs}{#g{u2MST*AA)D4ra`;YWD&?knqHxkZ0Lu}#NDupkfNsh*6`Wk3WW zdOhasRp-juAhW(Q!W&_aAl!&eI~2J8s$L$BDbN)QY{Wh=si4I?-v_gtTz&IRuZ^&b z+t&K|V_`o7s+3SD*@HQMbjl!WAB?R89Olad*I<~$1?_{CA@#x(47;|0-sa&|=h5%3 zb4MtJ_U7_{fGY0=oj!qWGR@8|H2@86%etytgR<5+Ao2*=4pC-;9{RgX)=~Jhpm!r zcxnFM1H?cd6U2sKP@Y3dh<-(@AZyX9R^p#}-#35P1i?!TX>oXWihPdI$lw7-L7g7z z(*rMBS+bSeC3{43`=}?Zqbc5-{)D2V3J=;z{+N*<4VN18!ihJYWO?YoK3>(?1Ki-i z;PwYI$#WLu)kf>%lLXLDF_D}_d;OI?I@Fsc8_@W>vPm`K6j$Dx(yhk5{dpS^+eq?#$ z?SBk&0wV9yMjDn*6pWI-GhoG@q>4StyL`TLMa+m(4|_nf=n;qGQVf$05ZKbW7`hLZ zf>Of*kfKGNBm<~)$F6iw9*4MjKpIc_HUs*&flyLGFvB`c5l(D?R+hn3^Bh$ed>^o2 zHSCkY0t@gq8>{!+(RdA&0dm`IvIpt$56|>)+X3a-zX5d+5>PeE&FGIcYSvqoDTz{E z`YKae(73^%8VMjTtAW+LNpN*~#Cl>?`QX%R!Sf~$K&}6J`Ev9gIwihF-E;$XTrIwI zwes{n_5+@A<={Y3tMXEg`*j+*g_8KjA012|;~g$xL=$xB;`EKXdVli4WhRA`YEv#%v zqZ4Qk&B+<(BKkxtj~8LTdUUYj$nOi4$HBdWN@YiO$EjGpkn2b1&uA&=D1Ny3Bowc* zcq8fW1?`#Mpa-wf!fDN*{%VlF2L;&EKbPry^rDYIbt0mC8~sefj8R)x`&X2pUC#;) zmAEYnjojH?)ktuGy5U^=6}FH&4EakSq-6U_4{f86aI0tP;HLJKz4ig)!b7ghcdtnt z2C3$gIRrv+Uj1{(%PqUh?*0!E(UW$&+)Lvhka6$TxeBvS673lg}m4SCE0*l7cr45ssBvF2+U?#;VR;@pn!9z z!h?#*RKHnpksN2jC^N^g2OudHfPB)21jQzK***E|%qF;?P{F=EJqum-bn3n`;0|S^ zrKOQe)&ZR$QBTxOYrhig2b2OiR`WnU<3cpR3XuWG=T_neqzroXX@P4`au991#0t+D zT0)1bceNx6L1nQ7YYR16JcE?O)HMJRh6xZR{4e(2J09!*?;DO#2$fJOG*E;xB0DOC zlqC{_B2RkMmF8Z+!Oq z{dzsu%Y|YYbe_$?;_D7NFZ;Nx55ELtW$WAMS2lx6SW+~R)T^1&<)*i_&Loy6l*ZAJ zYG_+S#`}{8tML?K>~8MRf5)Po8kKP5bb>#3mt*$eb0i3}+V?q*Aa4~fiv69aBYdyp z73dNyTaH_>$caZK-tsH=R9g=}_^~%~gHH@^9szzplZ2!}{-i~ImT(-Ybbmz?KxTDEEtd=v!2lJg&konJdPbz)8-bfWWibF#?GRF9wyD3Sn{` zr#||EYAPC@Q7;I3X2FMy2l0VY;CR|iQzgcV4Fr-D#tfW-~@86G_Z$WpeX{x z%#7|Z(Xk)Pj0-4kK~N;E0`2{?E{L_i&suB4@fXxJRx!;nB7=>y;CRhN;>lPPKRq6F z-Aa$h*;PwZyYOa^y(0be>=+gv>!)K|KOoo`tZ2e(QGGa^cE27JI6b=6!{&N@rL#I&P70bS^8W zGyc97{&w>h%OR!HJD|WTyuKVD&Av!j3ei*rh(bxLqXPGqAN@Qlc^TeIK+GQc)Hf@^m%r|Q@U=4*pY-EnHz9P)&djdw*-KK#&RsF_HKow>=CO~{hI#Q1 z{e_)YP3#&$kTn2a@28xqWsZ4K5NW2Ic%RA%oH^OC^M5Mu{)|K1wMo+G(yRX`Z{-&j;Tg>+-} zJ04adIdHv*o~z^wtf3kYG0Ws4+ZG@Sioj$m5oYl!YNj1h4xV1bywN56k$O%!HiHD^ zHJ@4yV4=9?5ClN+4T7X>72f4Sqfv|R5N0(CNkY%CP3COeG-dQ8>1A<4n}t9>Sn+R8 zCe)O%ec!iXUY3G&RcfJ++CvdQ2Qu@!w&t2o)rE^Mr+G?83AewQ+j3*0sOC>ObmS@s zGtyC)?8T|FKs$9~69RC1Pe_~_7MACkioNZrL3)_5+K6YN&#Ji_BG~3q`KT7IP6`gW z9~Ntp#LL8&i`s*bOacNA1U3cXRw3>a+w;^H9EC&pDv8rbkk?%DbSDzF>6Mcl?U-tO zDXs|jM+>)Rr8Ew@uZ7eRCE(gmASt_eYi(Jn&PreBahVl#!JoyNZdr{NDiapFB9-23 z6=q1|`}8f)0F9y~CmnWPran`$!MxE)_uNgcL@AYT#&k)Jr(Rb6glI+7z+l$5qWGv6 z)-V5M@%~R90bY$V zDRRUaw2@E#(fqb)zNzK_*U;m5xWyy%6?NnQB;g;FjzUA>@~M1wGF7cY|q4RWPDe=dc}5}n$UDvKE9Lq@H~1r@`< z^Dd8lq76uJhU4lxt|p6@gpe3M=wc zM^)1-xcrXel`^zDV-S&XWi;W+2W+3>Fvda!f(P}K7+8l^?wJ|K;c#V--jeQqsa)}rmHZOH#%Skxbjnp^l%;%l1*!MSFsYx4Y$qBQ6jj01|_ysy6j!? zv#)*5-D+!;HDx+AKm_zh=8)3olorJ@2RZ(!kDsY+5DhFv2I?9Cg%?)9cE+N!5#k*! zAF99E-Pzh=PoyS;)RB3}7MYq5`2*qBb`W0ur{N{k5O;%wT#Sr+95LrLX{ zb4qh?6xYt|K|w#c+dNi5y*qzbRdv7Y$=?#*iK_*dWsZ7`0_f*GvD@5cmT%lIR*&IV zQ7Z3MewQ7eNS?JbO?Gs?`Uc;9cvj*&HD4j6svE?dW2yI7lw4Q3H9@nCSnu<=9>#R% z8Do1u;WdIHvIj0)X64;V580;`PZYx^j=>B5S^ud8NE5pcdaAprJ;abA(w6sdvacuy zx0lMW0YaTT2r@19`QG6zs-3l)5?86iCLd&2BF zE$AN$HX?35Y#-Mnxw>N2C@0Q#uJk@yQ(<@!(Inc<4_w$f&dSi`Y+g7_G{|IT`EUWl zGNGd7(wV1qlzC{y@er#;+2%B+-^w76=Zr%{nxSuaMQYNDT$te}p&CT$z6f-+hBzwRB)7Vz(uJRozo4n$U7-NOYNbowv;y}d&3NBwH z3taZX$MM)z3KBXbg(X7;RDH&SG;+dFzxM=@)esh(86 zj#Q<^em8yE7fIB4*dc7sPL?nbU5Saoj3@=w6$jsBZ;!Ngb9g~ZqHGfbiN}TI)zeQg zEb3n0Nm6*KiS2D79f?^#Df?$M4s~SQc3U;Ki)(DoD4u4qdxvjK=GEeeR#KRU60O`Y zmCXD3D(G^GVxl0M+l*2mJtFn(N*MkuWU>`Ue@6sZSfxtLN~1ZOB2W58O1f974;4GE zNQroV)Pkf7Y^NPsm-JqVia{MtS=}Hz!VvpLiLe@^ln>8kG%@Zgmyb)DBENyA*Lx{i zjr_*FMjsM}SQ7O-W`n-MEDVcsr+M;&D2=gf7WD(%%&D93yVdz4f*klo@Zl^Oee|pZ z?$iWnXTWh;tW090&;lx3By+t@d$ZxhfAvR0ds%k$EsvB2>Av&Eet1Yo#i%M8{@nV4 z^~cw3GFRGef4rZGhc{KW#!|*Y;D7Pe<3ogE9BqmO9t#o#1c{VG=`PmevelQvj)h(3 zS{5?i3EAbcYZ98UV&5Lz%Ic>1a~Ka*#1CR4&vd5}8GX^e+^2fbs%>8YfVf?ZNQp!x z0RQzhf5Gw#0n5+aiaNu3uaXhg33hE=`GdW4Wg_yw#&j(S`hcRqx-`8B`U~Vu4b((5 zusqk{9}E74<#FGFmZf+wEb9q@2CzK1lgdngp(r%qOmXsPCW%THcwqe#X{rZ-eul?D zag3<}MR5r(%k%#Smvzrl?|g4TU_+QoqSIrJH322%ckYyMA0EUmQXRaX4AJn&X3tf! zmX~L<*}v5|O2&g{F8L$cUO4GzkxTrY*O%|UIb{jG>CZ5KH9>IqU=w@;8~5${K;4DF zYuR&aGVv|7B!Hp~%(Qb|#y|O#>0g3??*1=tvM+-b-a3r|cR}084(VEfYFZ8N6GYBi zt)s(SxN5yx-jZv^T$Va{E7#4>Iqym0v2%hQaq|}M?cg~%VjXhS51jeJG592oPN=e0 zYTffa&BW@d942Q(v@Y#eiOwDY*?;c$xnI97kxn$e$0uB>2UWN(cJ8=T2z$DsYi7Vl z*$8D+z9DN>Rd0M*71NhIbZVE1`%3KO z@?Gh#?HnP$iQTha7cHFk@{0xZ zsz1eVxoqY_zpf4t=LIgkrhrFJze!a+C;X_eWg8&kCTzGVMOx%GAARoDW?<>+G^Q=x zSid{pwB&`CS8cK>>UE~M-qlCNX#kCi45PT=Y2PbXTg#h#i)DHcez7)?IV3}qzc#ZX zIyl^Bx~}FWh3;-2$4C1cB4IaOydyVuB0D}QD?u~@_;_PoiN6m#0YQIrK-j+C3V!q` z1Qo!J915eBaCSmmJfY-rUGv*h?APjp*#ivQ_3J*}cyy%n1anWZL!d^nwbV4P(Gy|I zk9R$ZvVVQ^4R%~PTU&nkNHt-p>{;G`=B?G6FT%`U>jD#R!I`e!fCO(u*?7+rG>q{?kVK;C3 zPEY)WXCq(Qigm40G%>+C4eRkKsg04{Di30IWsR`u^oErYY{tq{*i66C`Uq^U4WHZa z^U>xIIa*#rrV=qRIL(-~4ViFmv&-h=wajbtgS=LH^}({`J9<&aPV-6bu6@@H6V?sr zFmI8xo!{U+#5CknRWsrpa&n<~I4(=);1}$Omq~7KOt>BqU9x%)zT2+rKm^&gWr+(| zh2wQntT95+(52hq4P$w z1)g~rXCkAyM|GD?8ZqjEADu`5b$ZVaXe2&9^4x6W`uwur9V=g@o{T=+U0_}j=1GE1 z_U(9Dey0+5L!$QHfyZ0D373kwg+`@d=JI*;i~!oL1{jAvL2hOl8OE`BaL-- zcGel*E|O<(6TW3J6g$&%{$jIGNK@&LYmi3PmMyF9u)Pr15XGhL?RT1S&^hN3piEaU zc~g+7R0(|En`i^l`V7Cx3ypGTwQ_U;TG=&ELq7Tb)hK?uz%6aUSuctl+k!>0OF6Su>N2qru!`Y4V>@$cfA_d@Fv&?l z3ia48CZDf+HMC2BaMb#ob*nGm*=nrE`tDjcl&;HQ9B{6R>hkOBKY+#k7#b6!QDpfQ zRTaTlk4vI3_dRzDkiP_ZT!Q1$z2Iw{IzL2f0|g2q1?&bIQZ9Thqb4gJP|j!+^ZJI@Xn)w$ZCeK?F4jhAM;; z>^{g|+P{QO_7tR{;rBi-2rVy3tPd^_J|U-Gg=6wQ2)5&Udb2mVpAG86XMAM*Jrbf2XE?sC=Q=LyM-SOEt>J3 zPTu!9&z2QAf}$HPwi=x z9t1$VMO2c%7-KlD1uw{>dJ$PhbB&d;PKyOVk2syzEpoyH?B;$f{`w9c`m0NTiT?=E za=i+bfnTOX!|)cJu(K*MM{TONAhTvLtE{CTCT7*NCP=6kSkLzGY`_>J9SADTc39SP z054gj!?hNZWejri3`UzP@XOrLVJ7f_hV;v+A~&N4x%_8yq5`=X-m))2>A zya*hm^gyYDE+Aph`xt*c^J20Kq+8=dIRR=8~0$w z9JABvOjZUPAD=2jI$VILhCpt^wjaQjns+s&h;qWJT&u*#(Gy=ERo#pOrZ|MKD0sdUF%0s^Y; z-5IV?h~Pmu6yxYYoB;`Xp; zx${QD2H5$(%yGN|DyPeN0Q5jsdmx{tWnRg4W`0uH3yBU~ppQ;Svw~My2`FEtBjo2k z@0x({Zaf^3d*o72K_;yso8@H7h4y;h5vxZ44lb9T7jo>#^=!#$x5+af9LUmY(D>&{ zW&g@udol*H9$J26$W8Jc^0PCi7oZ>iY=&I{PSB65HP zHLf@#h#Y8~SEBu482d@7lArrrhXeOD*V#PmD8w&}3jp=YC1k;NJ7z$om+kU{NL8RM zE&}@#2(yk_2)y_aO7A(EY~A|Ku_bFZHdO9)D+9?Cwqr1?j5UZwDF7Upf){84VVK&{ zB%wF3nwWG2-ZVu$jr9OmOoUAA^o+2zTrrwV#3sFm=@$TJ4ojf!`2i-Z})Pq>+SL` zg3>Lio#PXzGuV&M#Fv{>JB2^A>o*-=5MH@@-2<{HGk-PLG&Z`DYeuGyRJfg{RJl~_ zt|DHfko=$)LWb{RlzHB@mzSclQpL4~zyohZ*=OjVyxgsYAb6C;bX&M@C&QPSelWI30} z$r51&F?Oj9pVO*&LY5cfvZ{s~qjfgYoq;ri$N>qU>n?-BxDEWGxKjS)VjLYCRdv3x z;<6Vh&HXp0u2#EzKiSchs>CXfpYEGakW-uqNeQ7Y-O8lKKQTdAR24=Eiz3A6YdclE zza$YpF$&=^_9N)kXwou+AO07TP~8JX0`gUuxIFK@&6kIR0NxQwHyu@(n&ih(B?teW|y;#djWM?KtzI#|D6 z-P$%?`6L-bVyELw^D60PWql_XTsJyNrZ&1OsLc59pW`y|K+7yUi@wS?WCf3JWMpLLd83Qqu^!@ZXoK0a^bN$pKp?N?lTqAxs(zmqibNWA-= z4{a@6+-2C*Y!9P%e2IKE<2lG2=|x;k&_nq!ctK%!t4*3COyote<=C4P?mU`>o~tDLs8I9BEF}&mMDU))98%@c7vYG9#(3@)lZ%E`QjM2yb(KCGUU=Yvfb?l z%UzP%)O#(y^o_PY%imvEhbE3DK>{W&0Ttsr3@zTs#R!v%0%2ynCmOT5jV3qS!BWY^0ZQ$hPSr==}xs~+U#lT z7n;5FbA%?fRuumFoMjU~zhqeiT@tci$*cqkb#I@n_^lngSz}CRAlymDB;Oy;1$*69 z)CCO+F+1u!eVvb0_E0Vc1_o(IN>PteD|q=ipR~o_?xizmIeTMhXLoB}R+=FFu`MhC zkgb^Vyel8i*LPCPF-k)G7YwA5hR7uu)pVuW9wYI?j_I+T?kd=fDhoxt%zT#?(cd7w zvaoh|FHFV~?+_9~ehC?c|rf;X%+ zR?Si|17#n9gl;R8;@Z%jXtKb|RL-A0I&g7$oWs9SJ^y~wOgE$5T){_``SS6-4gG)3 z&lcNrHS2ZbmD-FCxF*e&RVv9gLi%&0n8I9VI93@uU7re=o!RC@PyWR#3Q6xA7DI?C zKzJmiZ^H-Q70hKzqEB1xg;mihPgc}KX<@pQ_Ja`x+O&P>$1AByO!~3ha3%FKKl808 zAyLZVhNcc1?YWdYUH&U>ds{J6k8qO~mxnr)kD_)kv+O1k@X+sS86@M)Bf}EXnN8HW ze=08+9nZX-wK~rBFxFjMx?@62>tu3JW4`!AXZ~r_t+TE7)IBG2lDmQzL6Q2J*4RB` zI8#_+TDLdeg9QE3_r=?Pt|N=EiZt(1X=$}5-QHR>($bvGJlpx1pp^FL5yJFLsY82N4$(lAEuGaH#POmd1WESPU5d%D0NnPQp$_G$+eMG5uoRJ$tXW zTt^mTTVOVD`EAIxAjo#CuZ?lL;X-}pC?7)Ggmy&joF5y`JN_CdevI>c)UMdctvqnF1cYC=?6Og&qH>8t|R>rJPQhpR9gj!Ox1LP7=~YRn(G$)Cpv z4SJ?UCk6|jB}~QPOb9cHK0$;EFUJRj4c(}@Y5F$SBPsvhXWnzbUkYt3Pw;Z^BT}`E zGPLIkGUt@5!(C-9Q5af+8yv~)A^wJinHN%bHP({FS)JK}V2_9%hTyQq`ju-!0jAg# z{kZX-WHn4Vk02Vfz$s0gvFqst1CG@=sQy0y!5vP6HS9e`_S`0>hpDFRms$*sDQn#F zq;%KsuL(V*s%w;ibfvilue=5&L-GHMJOo2^9|Vp-cfdyGP(WyYLITAzDc$}1tMO(w zk3>en8u#z{UI|)WGlR9;Q!OcP)6^@fXcx?S^EJyum*?xTzxUMk#(o=afH);>Fb~3p zGG}h4X~_wj_1wwUap-?hHRwivEvnd-dD5mtD|j*IF$6F7=k3jTwl7~+o2#7U=&HEy zX7Zv2%g?RNO=D|K`8~D;Pp5R z(F;)g-QB$#O+O(!&-1xUIGr}!=q&=Q?P`^K1O${p{pjA}{^gj!Z$l=5l67@Z~9aZ%e^GWwAkl(Xu62`|%CPRlyk zBiB1|la~)k<9hBQO_+&J*mH{GP-@TVh#O8_)#!@tKDjX6yrOGF`x~bLA{$Ps{+<}M zn3z{JOB%5Ie=GeV(`%_(Jr1tPyVHqf9>Cz3KS$EF!u931j`fy*F^3|PX{d9r=8mTg znSY*Tggfs|SG&jL|Gj=%(80^3uwSvr<5a=el^j`pvy`^-)r3EH8XM-W!Wv~e-*=%R zYFF0VZ*vd*ViTJ<;c`RTc9#5o65@sOGHj6|5+u}DuH1bSblq(XYim#_VAXT#jDT6`HFUAyH$3yD z(b|u)m|*!VF~Y@_#>-F}1l_WlsEu@3jzY0&EeRtxo8OA8om+GZrj^K;EB4Z4I)uEK zn6pL71)t~nw_Cc7_GBbL*31$VGPlYMp)2m8h2s58yeaMPz3Z)S`XLl2Y?XS|5l^5D zul%1pk$tQ?7M^#VrfFkrXCZ$sy}77+#X1$+6EUsy$vl_E@G(YX0KC^KB|O+1N}v`f z5W$vioBov`bM*|*g3(RR*X)N&F4 zrSQG~?EFC>$KL`e`a7w~q-of$b4a(tK#|T^ksN|z+I1sy^k74Iw&fU0Ye*S%|3(%+F#OnBN3dh$;bS{&@;HZbao$24)U#~U|qtJl83Qf9C`)M@X~#a ze_|$oZrNodt@VWsT^f;xJ^W1{UPrToO!rYfHaK(c^ICT*|M!eZrd=dg$sGn1!o9pM z{98y1V!S1ulTQKqpaIEfFBNAOMg=`BV&d+a_UG;@Ky^8Oy^$mJ z-|K-tyYIqv_>7JoNv$#iLhz%Wd&P#1ZVSu50NRz$32X0W1z~hHpg1QHBuwAr3Z32U z%Cmm!eSZmqu#g8MqzE6G?P2`w#HTN9$C*(@B?3Br8}l?`;<{sXN+(a{PN#Sd$e!(z zf^gbIla2ci=+tK1(q&QtI33yuruq^ioC{XAR4Y8@Zb6aV1aKfn9- ze7TnQu`{Eqv+9-;O`6M5(Dv1i5H5ez{N4mmv>kbKjn^tdHtqu{{#^AMEL~LZeP?^s zJT=Lzp#I6u*J~NF8-1lMpKEZ!xJ5v_O($87{{n0dAAHZwH;=lTRZd9&YxYAA0CL^nOk~k1V_xd$_(6YIml46p)XFgB?Z+54F*!|7}svi zs|4rADoy?Bo|)Pdq}i7)O|x1q4BalW982x^gq9^a#d48% zcUK@Xu}p~h{s+m``EEviw>?dKBbUomEFVIWd}!+;%*O*jQ&tyO^Kxu?_wZOlSkBT) zYES^P+?<6~@Ktp*8a$W^RRTJb7AdM(rHFv#L8Rc-n0(xoy{*B$%K-my+CO%?s+sz+ zufk2s_uP(D(t{{=r`6fFt7&D6p!qTvv{^m416%}PM9@@?{=m3ePXfaIY!6x zBy^>xg*1+dp)2+V6UXDX>_eSH$~6>rW zIR<=?tMcW2CI7-99#FD#sFyxOls^a%ArpoU4rU9NPE|~~NM;|HEXht!)N!){4L6P5 zhqeQl7ZeKnaBQb;>A`Sy_TJEKsXYyTN{c(unWw>Oq<0026Y1$6{xd#_n}_Vwa+zkcOdr-)t)do=)r3#)wo9oA6Y2W|_(Q zZ*NRcZ4^4xGet3~ELtIC7!&$d3t=x?+sE>6>uQn6eaV<}~J+gtW4`ZgeRZOv~zfTzB> zz+?yAV>ffnZhm*Gjl1`T^@1qKrjkaTai*;y*>^kR<7|3YmuB6lnsW3X(1=vT2QZuC zo#EB{aEf)Dd1s4)Tl;qrDNX4t*6!V^bmiGg?CgK3;!eImFg!<+UeAKix;|n`W_7Ln zqzfs&;dr~_F`Hq^ThlGJ{eW%w+$wx5lhtgx^`K;E3GY4 zi@r95Hxm*1HE9(-Mo}8r%x3r>r-Wu^wz5h*og%bs!A4?1`PNRad0Vd9GNcHTRY5=h z{!zmBy4*8dvOk@EeIrZ3et!00?X&YIJoE5e!;emD(c==@espzTN#lm`u_R*yL68qF z*>z2A6o8^7hHEkdKf;x=C+gTJ=!M^L4&}Mj_8>}1qfUy;Ds!bt*@ap$1M;vFNWH&U z1eg^)r$x*04ZZdP;t?7xF?9kwb1{JvU4N-a?|`gwORLhD*o>#4BP2!bdB4BEP!gMa zzIF@4&rZDgj#|pZhgHwzvl~j1M9jWqF&TIXI&Mp%a*Zy5Lo47O*|cO zsL9?FmIg-{itg62hRKQy@LG)pRNs9ovBz3N3Z(o>wYYx$fev7373$g(fd0HTYKgd- zlW9lEP6pGBOO+@IjZkwh-X8JockCfzxizxi)n1?nbWcS*eJdJ~bR_ zIsGMbkF*MtOsVhro#&Y1`p6qp&~xM`0R2La%(Caq#U9UQmF!0N$TMh_UpYLGZ;Fx% z#^(I!S;5^s$rz9k#b5X9yInC6b0?DUibwQZ@(y&s3bZyT~c!bjRS9ZvKBpTSTf zz8Y$SO+7ONV`i5P-+I&am)uX12^)o1+!AR1t7~Rz#xQ|FjWY~pUlEtg50o$mvA8i5 zS&qW%$)*%v=XMj{#_|aEPX9-Fs#Vas)I17k^+hitCUnMx#_Pme^ba=i?IZ5?X zGXq`5#4HzmN=r*?sx#;1IezCmw7jO??;{W$g`0)n+^%+cB;Ur~-s{lioW;KlZ_vZ1 zT|!s5YMKp}o0d<4FnX#jk(6d`x>*PWj{bL70`fw$9OpX2ckSkT)F3V7N*LNz&1|4l zw@32Wd10~L?d3NUW_>kw_bPGQc!PVU<$~o_QUPP+)~+YZU;pLCsaCS$qkCg{N2I$n zX6k<*{epou&T1P~=Hw(nwyYZ?Z~SS*#`nGXJ`*0u_Rbx(SE@XFB)SjZg8+iDaDC4V zR_1ov+Z#dx%UkaS=$Vf6-ElssW<36fvUuweM(44P2yGthjq8cvXeb%ol;lgfUbCPl zu53^rX!#2vnhg83QpWE;T5S!HnGvQUr!=iX4yI-y(dgRW=mzFrXAgYr?(T1)5Y;@^ z02h`F7xr}X|Fe{3NDR;dnh{PO{6%PDjrRyZxBf3Fix3ByYs^ZznBPEXwZqR9=@9lH zPylE;uFgzp3p^FrcUE&S!4XHE{Dt-eQmFG<^7YcB+^RjB$?=#Kk}A2)2Q3B@}0b|)gQZ*owrVIcZn#vzS;%mxnraUHhxX)zsY`4Eq)(3P zL#%QTNQoj?x*(PB4N)*Z(DBzCmPX%0u7DIc{_nDCz`~no*q$U0kpS)9qT*^~Xwcml zWtcdmBzoOulC5b#1W^KyED=RSJNs-T~~{7d0gSiq{?a@>>4$ zeLD!Xp)MS^m?*3+;1N z@>LN$#>!zrPWh7#28j#cpZog#`*;397{J`P4J#g^?ykzk8elV`KsWJI<7wD;EEcQC ziN&Zi+f$t9SA>hxYm!k{F<{JbRl!#7!<+&C3ei7=M*$Kgn{A8pQ?*+rOm0%a0xgSD zn)ZpNcQM|PR^tsfc8s;4XMh$cjoY}Zf#3z)q7*eRqSBsf(aiQkDxL$hJVv31lxid; z@CP7+>j$_B%%A@#v6~NHB>^o!Ae2RSOWH&K3|;bvVbWpu)z7c8*yqhY_x=QGu>jB} zNI~g6lOewMat?kuM0AMtYD+(kV~!?ni^ zJHa7zA@UoxpfiXqVp5350&eU>ER5OsLyNw`P?auEG>2rCZ`N&dftHCW5^GFEL1!Xn zyU&4o2x=6;!$<8u!<+T%rIS@oj5tklYGH32PQ&GqH5+YiybT;I+o1Jg&M9DP67^88 zjn5hl6x-A*R`8!(FtSgfN~S&f-TDh6+)~!Mn2eWA-k+(=tPVrqMOJk65gH3GWmdZR zVn#ZcHkr1&S~@uIhp?NLt3W!!azZkheW%=cwqFn_zzu~8wHP*at<~spFOLC*_Ra=) z$H#nl2d?8~5>)`Xp4-Irxbl!fkumX`r_)U<`GGY_hrtH}ycy1Lio?p~igClG<(vHoUEDit0;GAdQF?ek zq@GT7mOwTD_|z}Jl%B&mU9ZHQ8jVh$ZFg7M>NhHR4a--=)dY;HuZ$wbs5$Z$Wkx{; zG~hivS2YSh8{)kOnNp7MN`9_%i?NB*0&3juH>2@|3m4jAZy%;yKo?urzGzs*9{_jv z;EUfVHB*iup617@p@z4gjs7@6`4K0Q7n5n4sq;PhO2)pNtAC^Hm2U7>`wEfd@7M)? zSxG{l+kq0+$!>GRJ~O>^`tY zjpuVat6@&lB`Dudq=zDUL5D>(&=#E|x3{574|f6e-xMQ;Ljehsn%dzvXkmbH@1(uC zjN&k0s-bVQI)4fP9Eb=Rh1h!^%Ys!fR|u}$HRbX;Uq_g)tPR~ z`2nHDm6beo2V?ar3~$#eHAro5=qEb0I^^|xE(qr8S^XPyc4ZFE6o*Cj=OuUdi19FmljTRf6 z2ozi9n>4+odLS-yoQH{B;nc^$EzEhlbafJDZYA(I=kxlNt3D97C5wX*9EMF5;7>}T zI1ulT2fXOmEzwF(s9%NFExKtBl*CX*)^oYL>qC;2=*7VAgtz2G*hoa2i4r#cF`HyqRp>m&n!tH0K2 zy$DeHdyDVR7q}JwC74tV5`l{?D6a;qnP5=8#-eHebYBbV&$}BD@iiwLi zHUk2V5&^+W7D&ZcR`or0oMPc5j?l5F?_21RKWaiC$O(Q_1nAa_pk#WGubzm(vjEE4 zdZwj`ptAq4laLb58}{1&ozr+q9F){VMJ`*xppC^Qu4!8$q=8KZ*VC{2Y76*LROZhi zEmXt@z&Q4j)RfJ|-V|fAqK}xt{0pqRmu_U`pmG1N9LAC10>vDi8D|*4_7`N-xij|j zHD#-2(*zoH{5ahsO}6{CcrYE|2m}F1jxIq38E0DBIW16IRi5zdL*eZvMTzTlmbVH~ zi65c(P)y(XKI_-F`q7m3^pIq!C{$0umf|h%h^vcRLO#cRB(A?Hl1R%twi#YJ@Uep3Qw z{GVpyS#w?}=a;}Roo%pqQYz$Tx?;w5wDY8v^n*x#MtWYuYY-w5KojkTCZ`v^xI;u9 z0E+mpX%*m>Ys-Bk?y%gb5pT*seqQ)m%o_a_SYd-QRnk8IMD(&(KP-DpR%Dnn@&0`* zdlVy3MwYwV4j`gW;2uJBCc|w17VJGi#E9RCQwfWLv#1yDX%SDL04CQ0aagiant_b%K5 z@vP-z^H(!HW$MDF*s4Aj;6JjrzRz;PJoc~~#;cSCSli=y#+@G`&CA%J^F9eppPo$A zH7MmnPA1mhS5*xSd)gn)u(90Cy7X*0xYhJ^vk>I+V?D_O)Ax0($d8K*$CL3g%T;Ar zRoKd`^H!=yzLKW(cDbv(H2q-=_0RC<#IGI+%E8oR-~D2a@1bnsO zj8&wY&fQ8I&S;9@d-kLVR+%~_=jPV*XHiEGcC_+BHl#u9U!NH02uGlk5w%lapaw4W z66*EYXLmZ|wL5?{pukX0fLsW{YD&f#cp6M@< zLlv0reKF-eG;lUsA((AX9{d}+jth{S_i!L{dw>$pyptBsa(n$5*Z2R1TQ7kDV=}mT zf(~Z>;;LTOcO5vlLmqs`UqO|<2Ia>4vTJOq?!2kZ@m5QVi|@UbC+>S}Z;V!YcxD^h zy%JmluI3AHSSTdXK)`l;;SRu~)1+OSs~Zi9Gek$s19=DR#nG-)j8h^8pNXy4fK?lG zEm8XyWE|q^;ut|!5=?@gZ51#av8TkR=eJhva?5#?UG`q-4`A(Y3V?M0ixLa)I)%UK zx$n>k9}BcGR<6$;tCwBq%d?UIi&d~<`fi-Tkja*s_15?@G8QOeq4^cnU(z{<)fk#U zHpHPR9YLfX`9rMlQ~9qe8Qxj6U7K#I;%K)Wo}y>J%)1NRDjYU?K*anS)JXYMrNKqG zj?}9VVw|&j6kTFlCKGe3UUAUq|AYfu{3i~Kh^#e`Jyh7gzx4m&2VW>3v+`e%&C7}&d=&P1vNb4eD6)2x^43n_Vm*u)9XcY&QL3UTO+n`JNSuJmJyzmsl*MuOQXY^fJ!{d>eoT{ zA}kwwfMhRSW;pH#HRIx|=JW$wBA_^6i(GLR*CCx_9jbG;gQ&zg(we%z{lk-gHZwCo zXz$g3IeLd-jIq z)GKMwZWMNmqmO<8F~0dZPpiL_;tamc$@nEGTY=82b|P;z(o1cFCNHAF<6lveCDvM!bzQo zQNJ{Vh(=XNxkL_j8OJM-Cyhj=|J(X~;7`4>gTvX2;8VN1en~?rFap87en@F zawY9?i}z4NzI_}zpYG=Da1P*NyvJep$qwZqCOD+ z^7cN8fiw?_y3lwF*gBPEvQe0c= z=$Bx)qb5?E6bEmX|8+PS%JHJlECf%G$E18ZjNmVq_!+sxRRh)2_;Lt^`rA7rba=St zB_i)pk(q6~<+d?K(+xw4UU+*WfPkiB<|ih%-;?hVXw|V6A`=mdV_S)xx#2+R2BntI z)XHN1jRR`He}@V6-K~V-&t$`htYB+xo_Dw(;!Qt3u6i!_@CYHH6ofZ6HXlBGI1!Rd z7ah+bNGJ?Y03uUj3~IplkQpWg5{5Ad_VnksnU)0TB@Gt=>7A3CTK2<)Y7hlmn$a5; z0aI=z^qL|KyWD1eW-%wJWd$tyqH4&SDe4R@pxALAHM8 z%w7a*O+8ra62Vb99so|ihqiNlS0RWujMZtu658 zVbG!s;XF_UdSW)`ZCdCG4AoDhb`}GS%1u=cZdMAKrLXy#*2{)pGrU{*2b`B>4Iy+)ry;ae(RaFM zb*|sIdI}&+6i_B68OurT1%O!x2szo7yn{#f0Z0xBiF0$ypYYY4D8K&RJk93)cK>%F zDT=&(lh;*A@Uz&4eDUUieMp2TkR^BkZ~grIwijwBn2vQ+gd+iZ4%_Ql5GgALdasK; z^~$UUARoS#EEjVVOT&gz5}(c6(Lu#b+R|@4=MUr-m?nJx#r! zX>Jk7o31otctew1Jm;1XTa4k#0!+4zxOpnLY?22CMDQ#dbWTI3I0mFdyhlnt+bgqK zx9!E3lRM=*tLjCLE2%oQ0e8c1ni}l}0)bzZLK1gSJFoe`2YB2~ zagg_447B;lN5XAj7YT-eQa=RdOP`8arvK=&nW})v$FeNSX;)C40CgFbEE{;`&JA+< z?J8jGpIVj`t9=7qO~Z1Weyq~y^k9*dKK%7}E8&nfFMZGV+*KHd`vJfqMA{?6dP1lM zR7c-dIkd<3BPRcr%PB- ze5AnVeXsZk*&I)wpVVWVNhM|?rE`RKriVP88f1dG+$KL;1Yx+eqCb!`wVN7~^pcY; zIPTw#APm~t^{(1q2lN34ie>ZjxqE3S)V&1kIs#GeAQy8h52VAS?xfjkgL7p@5@+*v407&$iH{8hTBGrN6`S8|`q=2cnDSMFLnn$eCM-!%v4xlhQP z>1xK z1JgdIX%9C}`X_|GnWf6>H-u`J-RnJT@HN9#idqru>jMS=4Tz0+gf*QuF%_SNUfO{EuJ1#F!VaM>Drc6 zIr-}bGE4wD^$W<0mUPk)x9xt$tsD|*j9Kkma_;FO=mb5?1>J98=OP z>UbJ?5R(v~@j8$xWWH$2OdKyC{T^0bEQj?IALv^6>eQtrk^WlyOBY%K5aE^v{}*om2#Hcmr|GAqGh~GO6~I2}$fxlz0$zs*!zA!m1`eQ>yDe( z_@3tl-Mvc&iLsxU-`^K6BQ?(Y(tfiC*Obq!FPp7Bs6UfIQnDzPKlO9sn@CubZ{tnx z9WDP&u;@mG7EtBdaUK)=%{6*crAX*I0S%_4C(pA`Lk$56LBB!Xh6vtlk}8V)#1&>&el{A@pZ+y zD}#u{oj4UNsYR_n3^oL||AauwnF3~rcBGv}-5pcu7R9vrlrb%@E-&8@%$vXH^7ek` zD-r@IN1$HazM%Vwxo2T@-GYynx-5_X!QwTSTVpDnxoSc2VLCUgA))EWPF--i-`xv8 zG&!awRaPtS#WiJMRa{t`GX@DS%+U!*FdR9q2W(#vhTQPP>pATTI(tpBvRUQ43N2D6 zR4bq$q}fl%a4afc{MPPMqVK*2k-V5Am6q}btcWneQgbtuA3h|6R*7iH<-7#yZ0@fi z2KQODFGl2!`XM?i!5?ss)q3fAewVYU$XLq0miz=TmCpHKsOM8+8IdSR9V6|UoeN^W zT@kLJ!r!syhRHp1cSxhZY%-qGU(8Kn2hx<>)K~Iyvh=@#u%3>{#DOuV)KVQ8gH=&% z3@=Y7m>cbwTWVVs3MS{#StsrdeKXY;w%Au#R;OX|0o~r_VJAx~%S`=g0h9Na4Crs* zyqAph%DmiJwoZ+@>{uB%B!6d0W6#=>1&IcYTORd&h|WBzeWbYd1}O)C5mF7((X%34 zrzV@ChD+1t&}-B8I@L;Nb19~v%&6MdO;)B9a&q#AC5CIo<0_>{`E=3?-f4OuwxSk8 zW<&Ct`z(}h(TmD|B;h*UeWfys)rWS*Tiwqs|98Hd`cP?QcSZMCd$y4AE zKwLGX<~3b4X*>(@R5E!Y6Y#-{+X4%ju8%{}>mTpU3M1_Cd8@M`8`jG(*dqQ`K-X41 zfqtDK0;OHjKE>;FTY2t_)8+ds@04!FLnw;Fli)S`*!^7O?J*NPa(SON$gjf$PJKOM zBC7qqi~9zjXP)={vQ#ybKhYDdHP^BZhM*vwJCPw>e*puLJSuAHS0J+xqi`+5#>PZH zrPJz$q;<#Xk8D{I9e#!xuFg|4^u+P#-0@@U=+f zmpEfycLFgNfSVC@#hR6AUO+$h5)F&Q&Ftnm9YycQaf|rdJK;;ZPB38|_!~Cp9x0M& zz`#5UHux{mEn7s;%tg8CKD|9~mpUEzvUkT#$hxn>zgRU;V%&X5U?V`&@V~^A3K7+_ z7&ew#r3!lRl$Bo=lJ9ow>`mZbOR~~BAqu(BzUG4t|4k&c1O8>}?RA>XKNY6b{rrxb z3Hh@TXfO+tbGKcMk!3tgy9cZMAGG1$xJW2K1q;jE<^ebanXE@Q;&$5kfDM2vUfTci zXHqBluK!($j(8B-EGTJ_kB@_P;oPSucPEr!5dB`yhUhqt*Dwl4*rW`06QpxMUUMOR z(EK9~iIv#!Hu&sr4i;(7)R&(*x`c_uN z7)HH)=3s%^(#a~xyt|)*$m?8x;m$7>|6n3Q zB8Ty5PW!uon3%JfVZc_^V~+zbuC~Fbb6D`RE1KhxIzU+p4k&-S zGo+rKLH(-mBK=OK1X+Wh4otY^=gH%3{P z4Ug(xFLs^cvKy&6*_pj@TqS}(3@>u07W7){M+M8*Kg>_{s9Xs@ArQ(gA3g;c7vHX$ z4S89lE_bF1uyz%Mf#%ia^NNBstJKW5x}HWMNk!<6`Un{)mDoAg7|FT||M7D@;C34v zk#D->Sx*-HmXeQ{yo{5#jYv#vZ{dH3K78Vt2@*0w0$B%+@P{KjX5M7 zP+j1IX%7?7xbsvKgtZPHzw#%FsUrdr<;-W5{}$56k7x?F&T`&aoO~g@WPk)V+yQ=Z zmH#>^cMZmkZCgh7-&?ZcBW&j_>E1$0H?&67pI@J>Tz=d_r~wqbKCb#H6Q_2D7YE@m zzW{qjs=&tD!mBE^=&S%Q1$a6HiEmNy=Ra4YT(}a9} z%kY$L8jtftTX>2ZlggrDQ5HY*-Gumu3lra~)nYD%pU#PCEZ>s5A>}-!-V~GQ`}iwi z0M6LXgpwUamylyQ8{*EOJTqbCW^HFtXaG4}5o8!d1A+n56`;%K1|-GX)7Cln3(gIu ze6a4com&CfBRl6E>H>*##=)OF2peq##{ zqJVL};l1)Gm1ytow)u8eh-2kZGbpnRy#0>kL^b;@PvlJueM!^0 z_ST*gNq`cyYu3*vr;sjI%br76o`TZ$`MYZn8uRweK*?5ZqIqL{{VLJ0+~M=}KK1A` z+UoH#4AZYq>0t^%x9#%1;X2qSMvyF&{S4^61_oy=B)SWh?p%B0COlW#*JpF)CQ*~> zfG3BIe%{L`45uFD*zq8lSMHM7*ex@HT;gzg4OBJ^eDUlA7v-lw#<#AN$FD!N zLtBCFkJ85{)bz(V=Z*J0Pv_t`LD>@QbX7rHhVh=0wvhiJiuL zAHP|DeUU8L6B;+HV)H4gfB*mAU##aBf@JVYo*&jkuLB|ccjqtv(Y-Qg*qFwDN7HoP! zLKum$eW8BT$FM*&ALp`mc*DbpO#iY%1@=mNF5_>F|JAsPFQoj(h*f8FZptuQECjTZJ#-$#bg z)+z#2eEVygL`gw+&U_W51&U)ez>RJNsS7C|jS8&jZ4r9X1xPsT=xuxS|Ig0fqwoJ_ zpRv!%@MCp?4(=G*4Umr0ef-6gRlH4qkdoreQ}0XeoGr3qUSdJ{hRp}sI)J=LansL> zV-zHzRl}JvdWUwbfhm5DJ{!WSfvi6b6qBg`FWrSP^b!*>BYi+g>2|=C{!3wW}Mr# z{vPayR}YIx_|HNcYPI-8j_+*eb$G@iDG8|_(D}J{4M+_yM<2gQeO;siCyd$o8`M{} z?*o|C>+tFmIiILrD#M3({iu_>y2-`Smv@Ac?i(a4GD93@dp9)YpzkYI=2c|->7j62 zr4@*-|9kiR{XyY1@@jW#^+Xx?Fxyt6x~rQEFaxD9AdH~uPr2jgd;DjqpzpdOB0QRp zU`pt80(Nbm{S5Hx8f$yfVQ51*TE~1>H&bE!ruLDNeSis3+OZPIC|_zo-^-$-g#FLM za6Wj)^m11>Q{mN`#sP;;gu(}zyfa$6x_J?1K#-2(8LYRnFd^H!k?4i=y}j-!)nOP; z{=oLc?f>`N<9{B0_+XYPR>2)v7HO}dc6IX<%z&r=9{PC5Zmyb0 z2UEhCNxo~X96klFe%aYaR>KV+G_vY;cN501>i`+$EtnA0&ZPz?!2j8nu*qA6fI}

d#=oOxuD0z zz+?E8?lsWiYKe7hi0ZguhRUrul`&NAO22LP{B@wk`B#o-1yo#zy;4HE{E347Er0$G zE?FqNWmz;FUfbUfhe4PvggoYZw>HI%Jn+euS$Q4fn-%=CU!Y!Clx^uk2aDIzkn_rL z1RB`VveZX~IQUB@Kj0ylpb;v+>EG^6Kz@=YP_-b=cT4{TU(&|UrgBy$_`3M zN}a4fQ+wLI?quo5GfFb-gH`yB$m&P*+%5C18VS{f6WJxRYY>535nbwb9OdwYVt$R~ z;zgtKP*PCTjo3G%kff#<`-XpYe}TmT`ibR%Bjpl5J2z${%2lBzkX9EA-AB(l$@{Ai zHtEGb;mf`R#S8CdpNl00oGh#LNEz|LJPe}X6pXYbD33Ov3kFwv2tE-|+GoHCGC@aO z4lA>{-+I!)8hrZ0rPa^uo6o8rt=@(8P~;=9eVb}(z|N5sLtRY#0^4<(f$%zr?FzGP zp=lSC0Bq6lnGO3chp9h{eGA=}X0@*%vFxkxm-JfiEZ=;!w~dmF`-bOjP<&H#Krx3hGrQN$h+DfkRc3!*AM5Ll_Bk=h@o%HBa z+Qa&K8ZxEg0N4o&*SAWW=5(E#es5NtLhvSdN2viN z{q^{G3k+by-u@h~VLtZ_;SN}G(V*xPMqn1T(3Bc@#C=b}M6H6^=HweWs6J-l0m4PC zajv+irCO+h__JQSC~o^HscH--V9?(uU=Nm(77Dr1+~j_W)Xd{uAwm*TgvN+c$wRQh zpV0bV%CC0PdjmjxVQ$>2<^fQek%6tKow(Oph@8{9-8)-@P=K@PV z)}J*f9#79Gj#V5THB*=EdGq=p@u7C$`&WE&Zbx{t`E=_<)K_&#aS~ryKG_=5J5^ia zh&i$ELbM96hNYUu&SpVTiJKDY^19ie1UZrj3%JqwNrC59Y7zMIzb%~<4mgo7{<8%t2BH`Gm`w3d;WSLKvxcF+AC_&TK=Ig{#~@Tg`wnVkCiiYG7OJ`J(Mf;;8(Vq?+_pE~{h69%rb; zrAlwBfnRY;MeoJA-O=S|f?#pfVH<9)3-Y6}jW=wpJlj!K1REq}q#&2^||cS)pPRBP#M3@B9pe#BJVg6k-sf&?}M(^AD- zxetu|ByW^$W0%)K-ylAqhkavASuz)8eTCNzXieOOPwhokNt7$3lU>zMCZdE^`h(aT z_!&>hx=V|w;a9FyFmG6zz!A&@TDd=l~Zl*St!)IsiWW`3%mSG|05A!n|-P@r_aCAUN0dRVRqrc~pJg4^QHJB?_G!Oxb> z5d|#)1&+ZFt@h$1ZZn%zQ?*)9yqj-PL4y*rWRCe2LhLmK=B#6HoWDHdRGj_ZzD#LY zCyqPh9f+Rys^e5It-AbUEJ*rhgN@x=?~g z#DiGHAp2<0%n~Nu#@I2FTP`vmPPSX2Q~6kdgjp2s%gpoQ26nw*Hc0eVro};V##05o zW9z2*@%BWT-#blbK?}#0XWP$HRH|1Mf*+nd={N`!7^JB)Av)eV=Qx960bxz>ZNE7>sZWBe99?+xXe&6Yg2v07pH3!eq;1S`Dd7s>496`rackwF(l3qdJG0QxehHaN~#u zVP@VJTkzAf8?TLsmq!_#zMh>8RGw1G-p>ngr`7k{la12v_w7Gm@-4Isl&K}(hH8pi zE$8KU^9Nz#_Tni02FdKb?g~^rdgmIZcJ@2TdrW%nF>>N9*Cx17l znyg@{>tv)Z(4}65mv9^IWjjPXyQh>n=P=P_Z*A6Z%Z-jhs2#qX#v{7Nzk?185hd2F z``a5zXCa78PCM3$O7$9?kB-|m7xLYIZ1jKmB>$5(dY5dU>_{SdGLYwx#C+iK=(|cO zirZbIXz&TJUSh)Bq|{(y?ssGUFvBxro5<0{olb@)*HA_`=dwyi-04v5bDZ36z|+x$=YHvhQ$uq*y?_y4!t{j9i! zxn{eOAkQUM%{7krZ5I==m)pR6%p$4hCeueQ98YceO>DB|q_W*xxnMTK|Md?Hv zgO+S#*{2J})zoJ?s>V+4I3W_1;1WXFvvL2r+`3LNpGPm2u=YVc2R7lcjBCNJiyy;easvG!{|v1Zfht^BL#6~jR0{>HVSyW z4J}ld0OP?RCq?H%A`b}(;q6Z;-%D9M-E6CSu%SNlNlwidkD$cABFIKo;lLC8Bkqt( z;O)3(wI+-e9VN(bt!OYw-n*q{Cb#&*%o0pZ4WQqo<5xW75m)78P&@cL_Dr%KPOIa( z<s1Vu3AM;?Mp`kiD@4^(eK!Dj53|z#&U7Z-bKOg^=t&N z0Ve2vdKUI1MqDG^lTkKoC*icu42;%%hGY?hh%hc#Kz0x&~$_CTZ z>w|b@y|#|t@q~F+p}s9SN>?Zij|Lty8fdX+>m>%Ct{k?;aFaGt?ZrWJg}ecU(13rr zuuT+CWY=z3K`Dj>QSi4?@;dbSEw-!OT8Kh906ENQVVzzQcvclO9&}|$;`uWuGE^$#twGEA3X9O0B#uB+E}iZ zZ}8m;l3(X!^%#4N5A|I)+guxSX2JD~xJ>@&mg2%N8aXx3gL^k}sLG*hnc%zS=~K-U zbN59j^J^!=u=I=F%$*5a>!UK|0Kfd{JriuA+Pl)=+5!Mw?C3PtHtT!@VgP4-QFYH0 zLIJ4FxRag2OK{pNe%YH*ws7^_g#8_GnaI-Q*M2tMv-?STk-HAXr#`2of&0p6a5^Y0 zh~?fTngcno_tw|w&6RHc4J*8$Z>yr}v`7O~Mf&LxA`YBPJaosjm{@tB^C!p^7$%$vu@{biOg!U(Q?h=1L#6Kc z>Y&mdCewL4pSc(ob6d_Acwv7cZ{KIN}opNI4YO08dF> zALgO8@_=A0s9}cr6$ANJzGFa;$`9F2tj3wuTRo2A3;P+T6LzEL1k-MlfaQXHn9jRGZivA&HWt z8^rC$slpsYEn>=*%r7NEb!JSvNV%`FvkgtzyTyQZTKynt?mkpl5q*PpHc-lV>*2)t z1yj%{@j72*@3Qk;677}9@G(mZS;|crDs=XKyW5?kUzi4;_$?&{&|J}wnYmC+ms7f^Ph&M$1egf#6bR<8ytIks z$ToB+mLUD{?kQWj!(Wo5LlTlK{vNT3D59)-KhSlAD6(ff=_NpGVG|Ei?<$8foO15a zyORvGR{2obWc@FOfB9apFe>6I1W}u>bFqy27O$;LCgirAg%;1?>N!U=R!RJcjGOil zT>dGvgr36mn6)eqt?{0vEq%7@3r*L%p%!m!E~L(irkov&Z!mSkoLE$wOtPr$-*G@dXy~k~cU_1=DBQ&v zNt^Qv*w(Q-wCscti)y+~w4MA}9L0}S0gqeJE`3t%)P_MNJnaGE4?_+`)8DJYHz4TA zk{*ial$IQR1xigd@Y-{Kn`9wYJ?<2QK{skRO^QQ+i-cvA&YtEsrj>l^DadtQ^tCd_ zcVoiK!v#Rs+5)wsM5S+qlOJkFbm*InIrM2S&|)QKn0T+kW@ycXA}cX>E11#tNv|#> z`%blesQTV35ywnol}urmiJohh>_b(E-sSnj4H&~?)W&tk{>=qoaZ^rZD_0U68na=s z4q>Ekj_-$PLk;gkSjt~QIHUlfe2w`;&g@k5l5*J0)}d0ovWL=z`)0_YZ}dc+?91(3 zRiWO8_yr8N`GuP5VDw2&n0Jtk3xHJ>lIytDV`*;8xo`}lmF{)PrjqvEf)hLL`#ubP zNEKBJa#rI3b^GT3SFU5Kp@Y@g^KA%L+b8HjRO~)v{$w7Q(j4Q8Pmah= zPX(ro`*Z*^KO+x@3$qE9*DQX-iWF!6DE}}VQ2N!H&2RdddzY0KpH@g^yO{*$H&1ik z@39c3H}#D53JEJ|-p`etYT$Ll_FC5QvZYeOa9Oo*V-16;U2fhO3(>_`cU0dAcSPH? z2nvAywlSl@ea1Q+7v>~If$O3(y4h^z35+wJ6Kc~=wz0FUb1e_jT+4G(jy-&uYTG9T zLg99?G*c`BWlK0uJQzf^=qrPvv&soQL2Mo;Yyev>iaR$SwSi#&Au_Yyy3ZsYBq~K7 zlQrX;B7d`>n5*!p>>d3z1YLg4G(~o{$EmgZylI4y%l8cv?n^k>8m(ZFCCJM#+E8+x z4lx;gQX#V1qLlN~f}f7pk-P7ygPAS8o08@+(_3|X@DP6%0=tZx{pPZPmjb_>EhFdc zb(xVPy1DkLu|p_fZW%eSL0TYtq-0W&g~XxG6=G-;%a05sE)bc~vAzo#Cc}#d+Q~4l z*ed7?ZNav4XPtSTCzS4Wi+|+kT&Py-jCJH!hN)w0?nBR6ZdG6ID?G)nhrRo;{+{f> zTgP>uHp%g0{;s*Mk5(F`CNkZ#9Q3921ug*0tN&%$I=jdmcjRi0ge2=4m%jXki~~o0 zA9za9aySrItZzLe^MF9N^zD(c^0n_O5r}&uGaRFJ#VnrHc%f9ATH-+rS6}Jao8YRF z4A5v<2{1-3V;VX>-N0ZlY`&FRk3zhTrK_sCg^ zl2taZiK|m6OXy2}VkSHet@^q_pI?>Nti(Jl%pI8txr1}aHh*Q7xoodjcM`|WW@JR4 zS>?$F5twdWiPaxfC$W^F+;2lNqJfehY+OlyUHKUsdqA)Y^~_Qn*62%hW7%2{VZ@W` zT?pU#u^V==De<<&c&U_QHbPt$<&d~D+o+>=`_(#qNvc7tKuB+}0z~3)MWZta3|@@_ z%{pYH)9{fdxp|LTtLO!)iwFPA-42RIgD^C9UF?h^sVu~pr|8WEPbzSzXDV@c{V)w; z5Gv-}4(uy9BKLcVoVjvhHQZCON>dlLIO%xrCdq!f!k6_@gP}UD7k08_f?-Hl){a0~ zlP$Q0E*XUj2O|R^qTX>Lpdu+$F1i7h#yo_4M|Ji$r`-JU&eRg33#UKN*YDtjv>Ac7 z;CgNE!4qg$8L`eH*1zpj#HCC`?D;7p-wfU+P6(|W+u>&Z-x%!v2N3!P5c-Gz@ed`6 zj^iIn)W1%1h5u1XRF*flm)vUox;>$6uNC{3ux++5pbguxN$Z^PYTpu3)W#U9?M`!m z_5b<@8CJ2l4I&OT_jyC7^!rI%*HPJvJ7P6$2zp81U`D2|1{a*cMZjgN1>@q_<2S8K z(D>1w*ZKZ3JAXr$dJew3H(Hr8_YGWz`RQf8)lDH3o(pk&_3yebq1~*L<_~W(r(lHz zz&FW7L+LCof{DMBv5KE4KsPtC$>9RLkI0@;leUkWrX8W$ajEVAblbJXJf>4}ucD>CH}H2uMDr|k z;pZvyGP3;#>4@q~`Ex;SR>OqHwC{jeAb;hEk<-=c!)w570mqT2t z^VG|g6G|X@+?s}tkDiA7>%-P#(|Ijd_>uwd%{S-)I1=XRm+zmG=IG&uwKuQkA;|+4t(9vWqvO9UCOkE`=eZXcv<< z8!qzSeNu%ma71G=IZ_l8uYxi3y;h_CGA@3+mbt$VfV=n*`ORfaBsh8}WPxLVuM=rh zMM$v40L-*NlX_G6brw7!bLsnhhRMdM4M2jkR-+ok!)5zWOz}=FmswRjpk{X~;+#4G z)#EKtxVZU0eB%-;nr~CQxDTUMBIseYf%`pZ=^qbH@?vh`61~MWfT>>|m|MYWq=d%H zrWi~ytx`*hFT}flKS^sGB+b=_5+Y*e8kp^Jp#-+*MjwUzrAC=KRXGOfjrrEjew%vf z3qSYbvaODG#n|NQ0i`I}il)pn{V#a2te7u>^EdEL0RcH~XGE?XJaGvYGV9&#&}$W8 z1CYVm{yv9l)`+sXIKo?CD#_XaFlq@1&G?OFgh>{De1JA?>px;r4BY?SyLNcCcr=jDpgB=k5oZwApDCAjaW(%;aE0dg; zn+HJit$=YymMvu24X+@qwnGfrB_srdy%z#5J0?V80aLl3?=5$T1Q&m9(|Pwv{Z9JE z&6P%9^&nQ48y-W?m0N(T^Yt!!79$VC2Mtg^xHn*JvZgOJ`;EI5(3OY=SPj2W|I)3^ zwUz6HtIDjefbw?+DxwR^$O9mf3pvxHOI0Sy)C0)Ub!0`zD(mbN;fD9V8=E(+W>u5sti9M?eE%gf55POC!M{3#t#S@@w^WK4Ap+ z{s%|ySw9E#S-ybL9pS18_EIf<1z0?83EQe6ABR16Vd^hq2ov0K-V!R==3nrGQ(^P` zygs>q8f1XZ|#`msX}}W`uGw z8<1HikZ?|+oQ0SKnkC(5siarUVZQ`v5#`~*!}iBno;q-y2G_2r708Y+5`F^Ee{g%QT3U=f#A21v5KYFxyvzT^bLG=JUyS>HOz_3>3e&9VXBE$%@kQF-O$dWAcFB zIx2X>f#9k)11sMV12f^+=MI#@l;Lm#0omog06Y*4?U`xG2ZIVZI7ie@1apZ@PFg&YR-8vz@GM^tB4?3Yi^7uuEhfvLO=O zo@%-vQ8NwMh3n(J<-QT1?sVv!nb#QKeH_p+M`#O;Jg4$j0tukr5|0%{2y_j+Y9;&K zN>=q^FQ7upof(F{rgc(Y_(himm{j-cVG;t6Eu+o?k@WF&=vLAZ&c9-_QO;FqLy*Bf zyht9GV?p&E;DeDvwRzdx_wi7t`{|MRD(SyUXXx`RM1=bp#JoV3;2s~UhG8z|9m7R8 z7NAH<9uBp40e-c*u8Fs^?E`vW)`=(o!GaeqRCoeecv!3oKMdgTChAamLHE7d3v)5o zE7r!6LPx@I%@31GfKDnFk|?h(uABXRD!7oh5)TnF$_X=eBOsM&Pcex9PSj3hfYq6$ zdC{6flLD@L=SK-;KAub)ll_A|EK^4ZR_CXxtJd}y^j-{AZKW|p7yD1x>x#*`4Te_O zz5mL%Vnbi^)kN6@DNn8z%6M?k?f7{`XGBo9PZDhi@8r9bx>bLBXqV<5_&7$ z>;_r4UbjJ1_nKaXf%CEMOTXEK{xi_+v%vg80<}F#W8J>4(NVgWyvYeKPqAN%A@02^ z+Y{t^t^X#>X{a`0C=~hHj_QyhSJ+%oIoC2uE2G&lzsqmQvv{QDKXc9#i-7u{B5<-cT;33HES^) z=&U-F4y)o_Mowi&^zJZwZm{1H!Y);wc-+9xB$d#I;*h&PFjijzlt*2$uaujE+zt*O zisl#wl?S;|uD%ii24`DIuWsufib~hT?OCUv*bB)iFq+yJHd~)nA5~(0 zuxv)8e|M2Du%Q#;bI)jio!;$R;J8P(o(dAPkNX8)<%J9vW zZ7j{N$OjYmOCyN#&!)9g=N{+^^JCt4t9cq|+3P=6CWr$WUJ)4R9@T(OkTe7bZ z_WgFj7_du|E`V2OgC^eCD3N`7-(V4T6+gqWcD(D#7YTr7A@V1EQLyiZhN}nBs#!D0 z_xaJ^sD=J5V126So;k#$`4nRRHQCL+OJNZLNWj#sM!cFm+1JIbeMv{G@38HYrpY(K z0^@}Uq-qIPvN}R&2TXp$ffsYiS4K{5lHrrdF!Xo>4%d5QOeCfRTJD`yY5}D9Dxc3 zsx5pTdlSI2kSsKUAnRQGQ@PJ^@&m4|YU0Cw;+yPYlpWj(Az@fZ7+A-CI{KSmm<#DZ z1+Ox!ZODoNW}G6|IncxO$rd1S($AEZMp*#FXL8epXkqgV!}f1lAG5yF_=Rc=VNE2= zqkJm2yG3LA!0x>BH~W1mkN!>hBtlx3f0_s312mk8$)$U`ZsyJOf3&El=Zzk0a|~RD zyc9>dVOD-gtD-0S-3G5a#L9)Zf5rDmXtVP3B5`{!rtaTCgm{C`QOgHU+!uu42Xf)D`u+Pd>G}t32W!yMjl~rC|Cnm!{B4K&c#G5cu=-s z?mHjB(PR&=`K)r2lq^~i?qn8cp#!^|T30w@dz$YF`ZL1d4b1PWd&Wgv3rnjM}rTJ{X<)bf>aH-ST^^$pe*^07bV6ZZM<4Sx4?f4NL*hz$aE~X%F<& zrMC`5^|!Ho_Q2@u0 z$bBWGASouaxEzymz!5}HN2aS9^DI)!OX;aZQSfrhE2dn#e*5p#Km|u+#V662pWD$B zx)WDm#lOsSpc3_mhfqDaxqsI~NMTU-4KPJ3B*6z%wjYRs?^pm&kX*(IYbR1__;B`R zZ|$x{^Z=I50p3MYQWRwToo&Fy?D~c*a+*=yCU7)yz(NSVzm$hPY}W-y;9hb5i=1h#$$ApU*` z!s-|D5aiLsKug@r>~;<-r6{oPv6s9FJeu#|8#ix$-Zk<}kXLDAPlAb8cn%HWaz?4` zoL~#&;WJ`Fdr2R_^?M*mY!?+f@gy`=?J9W~2XZeL9Mw(w{b2oj*C5`-=~qIur2AkY z9Z(Salf+x=G2_3v06RLL_!xQM^*^*YHSJ(7OE02!?{)$BhhzKayOeF(umE+{1AaHX z|9N=NA$|oa7l5^R8@B zg~T+ZaoRLtmg3Na676n}U8`sTR&hsXs|8sxR2ZCMjM%+c$#`G|b{!;Rf(2s3QKq|V zUi6U#LV7Vba2A$Zt%0=2uER_e!9$Ow-=wkOgJ)n{3?z0ecZEa&n9^b)ra%Q?%Hz7a zcf+t8LNG?wymS_c@GSpjd>4RNEIu7?x)`6sRlx;llp}t;gXG2Ly2jMj?r2gbE=FE=> z?K{8V&j_=YuRzcL8Urtx?P#dmHTCt#Rr>H$q#_ocfz6+1RNuMeQiGuj0#C^~HDlnz zS#gbB3zzaKoN--L|16Hb$N!(jv28p2vp9ag=Kfh6|16Gwt`#^a|L?h0N*~g&O63c1 z9}C>$Z+k$7Sh2Uqr)uxcyA+n~DN=Prc!TLgADP|WnbPQ8rUfb7vWzF*9Dk_`CLXRU zN^;v;M<`Rr;KHug+~;Uv0CoyC99OyPLUsm*PRE004l*maR69mSc4hqR@pk};5ov#g zz2Kcte_68HWm+5n)50L}QMjftyu{u5&dAQb_?sjCgd#)TYa4imje*C3UDjF~7{CTc zlmh5dktlgg%+4et=vft5M^j{^)Q90&biEn7dcu#G7XDoN=iT8Y!&z}ryDXf4d-Os1 zV1VY^;Q4o1Ynn%(3r0t&&nF@gXdB!3U7iWuQE-9s4pE9~f&r@FmBX{cRin)H1G8n{ z6AP+gcu9DHi}@}K$ATQ5Epq)6OP3BjBR{#oe%Fv1!Mr(}icNIV?Xy~|_g5VG`7p>z}PbqdS< znG*AsLFa~C<2b5#7I<1W%jovD|y9tzDJUr`bxma z(U-nifu(4a40li|s?a>@cKAF%Q*2ScB;)bJnhX6GzxzEe;n#g#6xgfHT(Zy4(j zzn#wO>=nXYaR*dA{{t z`pL&HduwIBcL_JKSdvpbJ1e^3)S6sh_ObnN!bXj*`Q?K3@f4>G$a(4KjhFelw$>=5 z7+q%9%Oa;SC03p2kI%cBEr?V=-e*srGjKFu19moB;ieTC z(?Mdq#CoCEy`_na9LcK(9#VM{t4{W2WEY;M_(Z|x^{p*aEY4&0F+K+3%;u4=?W9J2 z47NTvVshr^%wn%=!u)4hA5F&!>3d(&B>Q@7LLE#Ohq48I@hW(zYH%5{miY1AbApkR zrGV1w7SAmjv^rELJQFA$YB@ly`_EastpsST)IzgAh~bp zGt4XYlX2dQEa5a#%g<757C8HChG=GNcWuO#eN0Tm2I;NygH$-jCBkfPPX222;D*fk zcWKma<)VX6@&0Smm*vaH$LAMva>C^{hFa&dsLw{<-G@Hg$8Y6XCr-fN3ktS)SiS2U zv{;EDGE*;eyR0%oju08e2=QzM_pZrwd5T(pCb@%3w6doPplE*eh5sIm&{ck(YgrWxreaX%%!b)*zYA z*lqKt(`S@;^07Oy!dV|?ui#(lZpPEdEGt`<+GWM$cUjfGtO`-%R%eeAC|$3S8CmGu zKt6^-MY!<2~kkBlF9Yb85h&Q2s_M-IosB^ zB%koJJ-5O{M-3fQZigFjP8HWSSOzR~ssvCph9SB$KE9nj_(w@04UO`1LxY1T5v#Td z%l7upOBC#dzFjt*1oYQ%Lmq@8vhu|-u!q^E&~&`B+{9yjMn2grL|P7sZr3+%&5kFG zCiJ?G5?WlawqYI%<8ckZjd#NBJ0iB85N=NEz7Ip)%eCt)r#q3SfF;9}m(8q-DwZE> z(eGW?iM9@rZ0T|Bi4rIusBv0;E?>LP(B&s5ewbDz@CKrMYaKU240!CcoKy`&T?Q zxt}*K);z%`-)Z(T?^|?&50B0Jc30m0ZiM2w0z7+8Sv0K4`=SsIM%!hTs7p;g;%@!J zdlkk|Pb$u%<}$veRzRbm+rt1dT6J40fiJ!nw>%N1At@GANh`O0>4{G^dy9XDyQQOlw?*Rp_Nd&sA`=(gUa2YkxrJ!`TBm|BC#9+ zRX{9p%5>)@+v9)jfT(C++&c<85UhE_OJJYg?75z2apTtO2QBsGWx{dJi$(ZM$AZ7reXZQ=cKj4|IeMCx^%D09+r3x%kA%BUul$sP;U(Vi` ziJ84(Ig|WwsNBR1^6mDGCWLuT;~c8vjL0#sdNX9oYtl2`eht6j@y2h-Uw)Ibbau)2 zEl3SX%Py_Y4SLgMXE0K~I#fx)vYrGLJ zzMA6H_2@Z%UZkO}u}-$r5TD(qAejlj7*n3D1?D$|Ui;0|#LZiH+ea+DdAyBVj%UYn$*F za9|{`Hv<-0&Ibz!U#%#qyjPnXKqJLbU=?W|ZP^0JrV)$M#Kd`ETctocP~6@jC>()i zpDb4C`fIKp~tNH12hXRdlp>Moo2*ycQu zJ2XZ1;gs0b3WKztk9p%>G{`MsqOEiYL8sUkgMBb@)`o;7Cs!E~JJ+w>yRh|io#GYbemSu|XH_c!3^gHdMYa}Bc67d?YaJ*Qgf ziENIOGx*A2!S4k+{}LX0vV`5L=&mvC&?|qDT|Dq%zQbUPNw5zU+Q9#Q{sZe-qqsiV z;Wm2w(~k`eOR9J>yN~-Y^-R+bll=<1d|&kJf@V3IULm)7R$v&5|&Nl&{!^E{Ux9Un`x*&Ny`m{a0|5q|TvQr|i&N@r!22?^KM*f7U?tm2(! zzDA53%JG~m^IUC-s3LsA7F|@lNU!$Cnu-)O7ZfW11&S3HB^CXWMCU7w7zUsE&a)} zjXo&ZreMWZYO$~%pH+anQeM0g{@8zW`6f%udlHlIIB=NhCfKdOlzBXC>G(i3Uq zXWr(vyXIdquvv){ZIp3DYshVgQsl}@j}(e}%#UFndN1KbrrvG1AnDi|Ym+4=APv}j zXdmWRX7=I_S)06JM$3mj8!a{kJ@Gm$QlcBc%$b(>B<)6&DWWAH`eN}ODhfaMYYv_f}EuHbs9A6LM(OrvW3&B-5sQm~i(1W!!U4m7$IVNRyp4V+-E%LwG zOkg@vx(&aI7%sB=SigvGznWBKpnUvKFPpa1+^%tJ^?D{*Yzk@fEca&8Cs@`kx!?e% z@S`5@f=I7$Hofx`cNz#BHjhC`=V2v>P&WlOExdEhQ}dQ=PtL1-m_j_U@_l=@2gAV4 zO1YBwn#6AOnRsP)jdI&5c7sFH>e@E4hNR$VP(8WzWY;Oh!)W1F!F=|W{1x_cr6$jw z1@R#{%&Urm#~Z4sitFICp`SE<-u0{eBNk8m3a&k%bTjd_X}hrDhAq3YM;~#BJ|yP} z?OZC50xqguf#v2~JV>erQA(RPe?{(x#%?pe69Zv54l>riGyvIBtW;j^!5v@lQ{V=7 z3Z=QEPPzpVRcpRoou^cVP@k*Syo}1tQ!qeURAUaio)H6~Hmuj)8$M?64b;Mt%dT(y zgn!)5NnD9QqTS=OQ8K$)+7B*Rpi1w0sRLwmulXH>MoThO>BN-`^mV0WmFp4<7B zJ^n9W_;sHB#{>Kq-1!eY@cU}M8LN;3;u#?i&iN^rk+FfiLlx$S!7j{%O#gfZ6)yZl z(#4nB@Zp0_17_EE>LGA!6CxFPF$M|Q^Gv;#a^Z*7$o%{*Leb zElK=O}jswDZf-$R@l~w1s zJERX7Wjn+-iZcXSJQg*BR`9-+y{k>qyzsi>M`H*=XBu3kJ24X%d zhqye22@LD5x*9 zWM;Itd(7g?(zCP6CJGymON;vAn3+T+E}O8*j!&8xtS!G!yW;Yv<@IriI9bodY_nEQ zC#b8T=t|I&+*PN9qmPOthXUjBY{KJSr&zaG@R{LbhQ91jp|nP_dpeg8#}V(IlB2_K zlKwqPuWP2cx*;2iU1`O1gr*Jj>@SzI*xQ7B;vArvd-ZT&qBc%&aM4>psvNv znkd~7ew}-9wOqN~@u})46}(qK#m8`q)^tk9}{L#zOOl zIi6c z1A->_B1W0+{*DF%Zfx!tL8TkjBBHkaHR(`TdRf{g7Umpu1rbW_m!PZ zi18MLDm`nmH_3N)lfw@b_uXXs#QZxtY#!*S8Lgc;&OAx%5cqymuGsvFMB$?FZC1ko zQ`bHc9y=hh!ivP$l`TVyJ4N3nwl{2d4Q`vCIMa0tCtb5 zwv_&6;N7)qwI&p^c&6N9nu%lMn|&+eKSgvLM~23}Jx`KyUd=73O-V?A!riMYeW(xbkxlKl+wto z%lKp0ZbWLMm!MQ;gI~K$B2v%qaZlx&DK@D7sa3OLC(u?BBR;`SvDow10249)?utnL zW{=&gXV3n>zRoq6%`A-Lq>;uhm04@GMbKcY6Kz@7VPjoeEzu>RBGMSD# zQAVpZsk&_IPH5MqBpPkD(kjB1#42g*+H{Ia$_7iY$LBY*@8|!VIcLsu{?9Y-dFK3T zWwL{9{;wL+a-x0aw-KQ#H2|HxmGdAU0_ahJxnRUo8Nx%h@h2z5w<2~GWK+lTl|FZ_ zFT*a7Gy~VchDfkHYW0R9(XC>8D4J1uH%@KH@qAJH__evbl5RW?{3|*=Q3v>n_S=(! z>%H1+rmA#!Dt<}2%^{?C-4xUUi>5Dwzs9SIR!WUHqbw0Z4F`d9CbM6(TGoP%`Eg1ybejs>ZM63q{j)}#C~HO4$s3^jpu3J z=tA3wg*)Ak#1^rl)#^hATaD*v%aedd8WqbQIm-zvL`ADO;nn?C*i3?%1xNs4IGlJBYJo9uv29agw zIoYRPP$EFvX7zmBBNYmJzwZ; zxR%*{p)dJPj4-!I*BX17(1dj`5qb^kmA@PN1p*;cQ7u&m_SSu1mcMr?VID81f9hvR z(Ap~^a?kUyFL3ClP;MTn()kjLGyQOQc<5}{bAVO_0(z+pr6aDZG2s! zY^kgt2jgKP>Tj2Qkh4AjKo#ezxCPCOMpwTDKqQeCJncA0DsE|LB}6g!K7<|>bL>2l z3<&FkbB+;82HFHSWF5}Suta1K5S7iPexpQ0cLx``m|~5rALal~Zb>o}0$r;L%myTK zwmNe20ubkKIzgFsC?x1o7a2{v-$gwI+DsO0L?2r3$iUm}lpE7(64aCZ%77)uDiale zX`eZK1fJOsxORfk5*C#4rV5V&vrPfL1N#U)tl)ZrCoJg#af9%$BFjXmXwVS8d$6h|pwYVWuRay { + return ( + + + + ); + }; + ``` + +2. Export the card in your `plugin.ts`: + + ```tsx + export const Markdown = dynamicHomePagePlugin.provide( + createComponentExtension({ + name: 'Markdown', + component: { + lazy: () => import('./components/Markdown').then(m => m.Markdown), + }, + }), + ); + ``` + +3. And finally, users can add them to their `app-config` to expose the component as mount point `home.page/cards`: + + ```yaml + dynamicPlugins: + frontend: + your-plugin-id: + mountPoints: + - mountPoint: home.page/cards + importName: YourHomePageCard + config: + layout: ... + props: ... + ``` diff --git a/workspaces/homepage/plugins/dynamic-home-page/docs/customization.md b/workspaces/homepage/plugins/dynamic-home-page/docs/customization.md new file mode 100644 index 00000000..e4a19936 --- /dev/null +++ b/workspaces/homepage/plugins/dynamic-home-page/docs/customization.md @@ -0,0 +1,80 @@ +# Customization + +The dynamic home page allows admins to constomize the homepage in the `app-config`, and plugin authors to extend the home page with additional cards or content. + +Additional cards can automatically appear based on installed and enabled plugins. + +## Default home page + +The default home page shows a Search input field, a "Quick Access" card, and a "Your Starred Entities" card by default. + +![Default home page](default-homepage.png) + +The customization can happen in any loaded `app-config` from the `dynamicPlugins` section. + +The home page loads automatically a configuration like this, when no other configiration is passed: + +```yaml +dynamicPlugins: + frontend: + janus-idp.backstage-plugin-dynamic-home-page: + dynamicRoutes: + - path: / + importName: DynamicHomePage + mountPoints: + - mountPoint: home.page/cards + importName: SearchBar + config: + layouts: + xl: { w: 10, h: 1, x: 1 } + lg: { w: 10, h: 1, x: 1 } + md: { w: 10, h: 1, x: 1 } + sm: { w: 10, h: 1, x: 1 } + xs: { w: 12, h: 1 } + xxs: { w: 12, h: 1 } + - mountPoint: home.page/cards + importName: QuickAccessCard + config: + layouts: + xl: { w: 7, h: 8 } + lg: { w: 7, h: 8 } + md: { w: 7, h: 8 } + sm: { w: 12, h: 8 } + xs: { w: 12, h: 8 } + xxs: { w: 12, h: 8 } + - mountPoint: home.page/cards + importName: CatalogStarredEntitiesCard + config: + layouts: + xl: { w: 5, h: 4, x: 7 } + lg: { w: 5, h: 4, x: 7 } + md: { w: 5, h: 4, x: 7 } + sm: { w: 12, h: 4 } + xs: { w: 12, h: 4 } + xxs: { w: 12, h: 4 } +``` + +## Adding cards from a plugin + +Plugins can add additional cards/content by exporting a react component. + +Each card can have a `layouts` definition and `props` that are depending on the used component like this: + +```yaml +dynamicPlugins: + frontend: + janus-idp.backstage-plugin-dynamic-home-page: + mountPoints: + - mountPoint: home.page/cards + importName: Headline + config: + layouts: + xl: { h: 1 } + lg: { h: 1 } + md: { h: 1 } + sm: { h: 1 } + xs: { h: 1 } + xxs: { h: 1 } + props: + title: Important info +``` diff --git a/workspaces/homepage/plugins/dynamic-home-page/docs/default-homepage.png b/workspaces/homepage/plugins/dynamic-home-page/docs/default-homepage.png new file mode 100644 index 0000000000000000000000000000000000000000..f85b40b71bdbe52d3043c0080c943959e6efb9d9 GIT binary patch literal 89427 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 literal 0 HcmV?d00001 diff --git a/workspaces/homepage/plugins/dynamic-home-page/docs/default-size.png b/workspaces/homepage/plugins/dynamic-home-page/docs/default-size.png new file mode 100644 index 0000000000000000000000000000000000000000..c56d72290fdcbd2bdc8244df9e89cee0938b420e GIT binary patch literal 50852 zcmeFZXIPWX);3J92C#vEAgF*!Q;LxeVxglT9fE}(>Aiy}U;$}@R0~ZA5ClREO)T^( zL`n!qZwbAZZ*qU{z4x;vdmrETKEK}gc>XBpb-*Jh#f0mx&;q|*N?Mh8N@2QTSxO>-0uZZ1=`rgz2 zn|Bm%oQJF&D6k>QDzmM#s*fYBt$+V%Gf$ABAr+lh z!xt3+x~Kf$=_F21-osYYr2w-hG!=PXP*9=oex2$%+)fZBXossXT!S}&n$By?bK#WK zArJAeFoO3#7c#u6M}Z#-%zXGG4|o6RP0%BuS8h)fZNNhxDxBF4HxyJSMRXC>|G4P? zEEk3E1VQtyAX2eW7b^CzU7A|J3RbLVHuk6AHZrIBeH{$ENc?l9vxjHk6~U44pp9&f zUb(t&k=$=y4jW!?rYvS;SzMO?V=4aitHo^|Jmv5Z-|=yawIr83n+H-l8R4IK z#@pHj>#L(r@Qg%cT#K|4;wGI8R!YMCSIh8B>YB!pAtog>2`iHIP zzhakC18eVYOOwT)aYB(SIGpi@@JO59%q1zkoFYv7;2mqEjK@pucNZ&@Jw0Rjvyx*5 zJynK#3C{-jHh5W%f@l(cd4=Ur#8IsKOmUaqOB-r?c1Ml>DWsRd3#ANabNoGgLdtRJ zccENJBugVbcsu1zrZ$PUMJvd6VZ{ptSw-WEeRU}~KGnW#A9By0&v$!cPzPUNDh;dQ zRS4od+V}w2ofkaSns^T0mv^OpFp^6q!+T|Nc@}}R@;_(rRPTOouAZ3vfJ8A(EEbX4j+t8n4d^uyh3(FzXCrKU620 zU9%fMws;GFb5vF8TvQJ^VYDG^;^Rw^n358S4k~;VLEfmwuL4JJkE=1eWKb}_hV9W- z5T>MMTJ_!gc=Kh3QLz;aXM4(bXQ3<%G9Pc^5Us7S_p`@5jEM`x%`8r@+a2;dc^Kc3 z3>FDf*JP+;T8RU8fN`xc`kYRQO;_EAierClD8W3`A6XaUhYRnz)iss)%DM3t(b`qtY8Ya}P*^)n_G7UAhwIP2l&(^tAEdYH-yUU9DwYgCT`6Vi zYEoqJTw-hIy*B)lfOcA(-`4U(XX6a(A4ZZ#H`1W_j$3Tt4muqBdkLxo>s(jPEE>BO(4k7RufQxBzf$eHq4x0M!+4A} zD^1w!tvb$JQ!fIe0UgKi-DlZlPHhXRp2N|;gldfVr=bd0bvrvdFB(qUr=dlp zX7izx|F&D@vm|NvTsQns|D3Dv&ik;`8Gn7>@#xzY%i~QC%xoxz3td8ojLNTfM$txv zKttgUXZ%;A4ZLHXP%}1ve)Pk|Y25A4?Kgr-tjhIse@Kk*Q!f#q{r;%yIa zzb;ydH<16!hFL8WND>p5^!VrU9ekA~SVpj`3xj0|U=nYwb*F~c?yV=M1nzI85%#z) zpj@Z4E*cb=R?62L?E898yfGLLVU~}=R(ZBOKQ7Sv)&aeA%XS!DAz?poZxz$Ohq_Mz z+jIBI582+HL$<^Vn^+v|?^(4PdzS0x8^@%iJPvp!51M1IVKaVb=qZPURU5B%R^S2; z%ot8wxId{^=3sU=8(vVs->|b6QFi+^x7dR(R9#$Y#`v?2!)Tq-$407ZYB3JjO4X&` z-!ua&eT^|A5zyf%WbOXIPx1ZQgB^t&V^pr}_H?>VZNOg8u(fdU72oy8TjR0X7PuP! z$tXGD&mSK3#Bgm}7q*$x<;t&2btF7vWNT(K_v7{XWIp=kS(}nSghL`qD^}$2eAuMS;pAR@@Ot{AK1vGI{Exj2oM^r=N^CAlZ)fSpnKoWOLhV7#w6Evx zrt`(SADU8^{nZy?Wm6(LH*^FI#BgvK{gT41 z;!Z-KO3lKcM#KYLe3iwMlss5Z&%54(nizWis6OA7ta)+T&Mml4cuMICt7yB^r9R22 z+6`DGS1U)*yWD&Iuk`%qJ6ek!9V?}1=Dw}f)89Bd(tFglFmp{Qf3m9hPJ;wQDR66o ztwWN{)G3($Vg5RZjLl}A*om#G(D+9`_K`Pj}PD6Rp#Z%AFES&l)X^M|W22 zFrN1Rfj~v}N~RmzCNv)jgfwf+mUes@BF$EgsFFd!>gHX zo(8@kD2khP_n>2y50@Su=eHZN%j7}%C%i^tcwVm#M;gO^>+PEnmbxo9_?$s1oi zqxGXZQ$6{$TiKi@6g$2p&C9EVFCSwm+Q-WG$a{`&(@FfcAUM7T9#; zkh*B~&pB4y5>59zR7-D7i*)*q&)O{Cxm&MPHc`(iiQ1cyq#+DIyun#MnHEoHzIHuPig{X1AO>}n}o|c@WaW3+Ke;|c@*{}~n$h>A~ zK8@-82$#HH`RYv14}>qoLvjQ)(4lZ3l&SV+d3SFBj(mfx*}l}t>&*4%%HpNJAu)oY zeWkzo_Bc5brQXM&uE#Gx0fWFhScPX%gM9LxK}slyBQm4*mBBH(o^zNH%q&n&-?BsM%gb%bCF4(X~8T@8!2VcN$C~#i$cOy(Oog_Axs27iDg# zG{A*Fj0~0x1+6=e)REVs?n$2i8TGR!{c3uUL3Kg-Zw6g4rJa^MTa{1x#tQv4FO3OZ zTwg2UeJ}$f%!gYM95WuG@St3!0-9gOG@}^vz%`$|_~cHP6Tu~|AgBii?H4Ly6g@w0 z50d9sIVSJ!ankjzxOr{>P%-a~UjHz`<(7~if3?$7$#ZhRq{?HVyV{_#*r-Kp^Qt69 zjNX_QgE0+!{~_2Z`s~f3BVGU-&8|7jxt4^Y2+W$RQrjU6h#B7;cW>K2SJQZg;tdKI zLMW&fn={JfwLqTp#a1OLbwsR~3!NyeaciSLr0t3p*3=D^9U6L9$c&GY9`*114Z^yXn1Bh-{e^>!O_zHDp#os1z!!^u9_{ zJzmIGzE8T+I7Tt#F?Is+;5|*}K*{P;yhJH9wG6M{M`k)VVYh>+-RFC)uwR~7Rc))7 zW66~_DFcJV_8P$#?0)5G&aus{pe75zT*%{Nl%T?R%>TMFR(!vn0y#Gi&o-A``g&Z< zs`XTdq_mar#QP0nO=W}Xjv7Xj+MakzKJk|@G{Uus2VgW=R;W@|~6 z-uGBotbw}tkjJ3?ccZz>JAICQK_)FvrrQmH%kz{_G@Ao%7%w6!3N7HB%TSHgXktW^ zu6&Q+%=9D-TXBKi)n{w5fmsgqS{%R%!bgAqHKlC_xxLk%nR2)4)i4VEo}{+zhLa?A zv8XWsrMN@#KwKb?|4O)?H}U#aKS{VNoI0(2+GRWh)um{3&Dp8cU9%qT%#1WJhll!C|SdFzS!v$3J`{&AVqL}hRGY3}hh~-b@NSK+O;XNML>zd0Jl{>Psh>&yblCq2Ov; zbKNYBr5&NvT5g&wNjLC7dT5V+508##q}|>gz&alDW*WaoZx_2PPTEqLPkG1cL~FJJZ2iGU85wg7PvF0c)FbC z50D=Gis~%K;`ZQY4m`*oXug!4P`ZFrdQXlFMP{887Ba@@GmG_bwSeXld#l=>2N{G} z^`0-CrJhrAs-gYy?BQ3r4~#d&Mi#m=U-tLfO75+>W0i6;8CEgF`B_y`?grUc<)~V? zPZ-M_a~DA1qe_xOe{j68>yejSEuna{r_n;TNt4i5UD=}B!uX4MpxZpP?8zYTKQ0wv ztgYYBr#RQlE#>m{Rc}qtJ?5u9scGzzdvA7 zMmNE@aQsv_6d)a|>wgas!6nldcf2!;_Qnjd*hJG)U>5lU zPKUPb;qRE@;C_8ZVR+Y!QVz0S)U%4&mqho*8{N+xEA%LuMH#a`>@Tt;R~Wz<25yeh zx^5a+X{ukei7-Ui_EYAMCHHzQ_|JZ@F@SkzVjj7bm9%5ZY^x1+9>9!SJTV1klVX8< zR1`FuJJ+%OegJ=3_?TQEM;4@WGgwPvx$ZkGkGK29AS6aE$TqEUm{mM&O9*f5C2VA)x zpR6F-TSss%EK*zDT^k2fXW18Lkv%&!3C5IVz8iQe+U#D5Yd^`l?0i)8)YM)~5jYHO zpHuFPnr|nD8V&6BmOwn(7TmqW8NJ-6kbU~7fpf2A&&CR9Gi^HWf6ra%7CV_JiJKaj zTcoKBF-Y}qp|d!#xE;?>NQ?F!wac~7+WM>f z&m1~9kLoPz;;drcG4kzNkSq4g|Bk=}ZTt|ZnQAAImFR6aVSA3S-uJ&!?x}Nfrfskg{n|o;k6CR% zb&hUwYF3r}+ItcEMCvThA?Gj~DO$v{N3=+8D*Z~g8I3UW+=l{ZWL!ux_t&(v7g zc7i(8PzWJ%%4vS2H|eL(sTA%@Hjdi?!Z7qN*Scf{0e{c+`Tj>WMTE!9R&s|ua-X=! z2AEG3Kk4#1;zcQSp-tLUq?;U>u!Q6F(HFh(KCH~Lml;PZ$}$sFrW(s%WYH9Jgf^Ep zFygdS_ndD&??Acp*bze4WsSLEW6eNn^M)%sT5UPH*;z79f_L&;DSEi&e8NK!`aJ_x z9QWZ-r&Lx9LNL-QBI!HsKML_9D5zYX7IS_N>kPo~{UAr~5I>FOLy&(8T^oJ;feKv{ zwvdy&Po|h0Z{B&i&(2t1$+K$MYb+wIL*ha&<)|O?t6~aR;943g?peGpUDj4|GB-L~ z;ZtG4?@oCXcM$CO0Ej_Z9|9p1NR$-`hTg%fF=C}0CWqZ}O zc6XmCrkk>RmE{V;mTvbOn|b&?`{Nd&%f0te0L{S6W+TTyocKm~a8!RpZB)EcOJ<^Fb~|boMoId&C^GFId>J2`4}das?ef;ygmcvqX&h#N%q)n z_!dQe;^~4(&L{CgMmi<)VSR`-j8%KeMP|9xD2xH9l}S`Z=<4cfvLD&&v18}DoGsIg ztem}s49E*IP*{aTOO9idCrfT29eY9!R_ki}@=bjE)R9dW(0$f(KC=!FeS79mB1N@X z9i7XZm5f_4>LT=P3VVOnbfZ2f-k^j9R=GD+hhP{kHRw6iIo6qEgwNwUhu?40l&^1X z?hFq+K)Cy^6a;h-z8Ly%CWlCJ`*J;6xZyc!>>ik}wLp%P-+0{hF$TUD>ef-R-TGK# zm$R8Y81y*tjdrIQ(kCeC(EPlh4t zaR5kV=wzzRyccKGkkmkcx`e?zt>QCGXM2`U8o&Mp z(>7A)wyA)m9-zHfH0aoERt&QB8{GFk)JtMa$7XIZpX%xOiQ^ub9erfnJO&Dz$IPI@ z-|i#Fc0o0a!x5J?q3Fk~Sqx&{yZxy8;Z^p^;+U=WU zVr&!WG7F?tQl+en{y2Z**lPv+T4Iegv0|bvzjeb+0EHj!J;ovNXTjM;hvy@?W4XG7 z&8Hkq_?BHU<{iYqa7J{b*LsVa!(e(t!NRmq7AXF20d zNEEYFllJwkL+qg(aWGH?eB;2qwK4^D&ql?C5JXIc4L*j|O*F*{G;pEy!#Kj>n|_n6 z>>c86Q$@p$?_&2ky8;E*vj|~p4NrsKSJ3?#d3dOQgGiE!*kdW{=DfO%&F9E?4K_qO z1rEb^B1Ssh3~bSlZZf_MMQ@cl#+EF|X#Db9ZkN&QgfnZpdlt|Xdh4!RUaQF~=&I2b zG>8$We?D0;@WLL)>s@LOeNYx!v5np0_%-l_Q1X?E$bD1{S0Wc{PBgi$+8E|NK}~Eo z(xUAOK4k4nqaAxvQ)_B<9L>@{r1~dhtyRz@bDV-X)l<)G_mCMdcXcc0P}p-c&P2Ak zOf-8t(4W6-R{A&*6w|-JZ`)XP{KPg_hUm^^+VzZRg-Bx|95y}2$SOHk&m3%qVT6NU z8935`kh*8fWr4NL9kqU+4_e`0T`PkRmc4ET%tP8#Rf`c46SN0vbyupqL+oqFk$9>; zvtOVN$XG6zZ<0rzU*j75lPyi$I{NyB~p45Wvxit=l?WM&nUnc zScTpeyjJ|di4QWM{b)&5={{%GeA%M6gckD!zvU(YIUJmx4$`@|=X4&iHtPFl{Gd1)Zc{f$SiFKu zLIpDoRpNiA2X=n5NByk@Xhhy@UwDX0ax@#dzf)qaU6;%yhi_Bk;Q#~Y(d%+#orsb8 zE8XE)4gQ;>VU`0WwlIv%HKfNwD6+gMZ%Z7P?P%Z(C^C-HYcNiuZWK`sB~ zETOJIky4lIDgJA(4jD-Guh81hxVk4~#v65-#|DBDPfst|Iu{!MwD+@}J&X&{r`IdS zY}pboX~`lnw3bf~C!FhCn!Hg5k5Kkhn&Y+Rki`#Io2)urgIGvrV3tsi`*kEzn6tJ* z-y823dV;dmEW!$tYdoXmXx#T35MEc|10R&bgywbw4)!*(_KSQ7gJm6Y$rk`Fr`O{YmIY#Zp8=yzIkbjU-(fKq(PoBn*vm+@sMpdg4^a1$NV) z-(6zYYK1ti0EMRx z>Po^Jht&)c9a~;;bK-Azo&h{Hn(|*(%l}$D{l~(+>JYR+d-u{StvjFl>YmqYZ>Fy0 zj`?Z2?VL0&W{pqTS;@APqFw_lXSM|W3H?jR1=J?(uN7Iz(}AYEjN}z6p)%A9tsU z4q{~mv{eF%bq&r-Vk)?*yj$P(;co6XzfoV#p24{@I*JsJm2Cn(w*IE$4M-I2xhO8c zhR#nri~egU`O7(qKPh0-M-_vV`@CrXOt^@YXORG)kmMBbw?NP4N7`7=KuL%|3fOo? z-1h{@6eWNzBR!|1_z$)eG#tDMo{2b+w4iYo0veDXFMo8Bc<2-hcqsVheLDO}&>~?# z+?9ljPlItDy_3OAbsYd*$kE6_Qg**0BNr8=ptwuq;LpmxzV!#241PTglq+*VH!T>J zfO3Vi7XG7=gh7TxgP!T#KT<$6XrWu&nS?N~jVzX0@WWD-$E(wa7ezQVc;C>F`um76P^Vx-Dmd!Jj}~aK8PW!tG<~Pyeu$3yTBF7EL@HK~ z**cl)H2OO|+65Av?*|-Wl!uoMPZCkaB01C>RpyPjI-@3LIEsw7>m(Ep0#29*K5W8A zWSoqOr<&_SXeXKlTUz!a@UgMkTB@movn?R6FWPzgo)GwG6t46BK6ypi=$;a;1=4;L ztoL?fvEw8@$U%(p`DA6LUIbLTsMc7w7hkAt5Q5qeU^Lis;XAZ17%uufZ#R?%rtUn z0%iO{zEx!E3nz;Eh6?%YLD;W8j5{sw_sfy3vS%YlURy21mkMmmVz(?^~pwF@Mm@Ivwbb=58xFp6EV-nel%k}v9{$zDtHTD71&ZMzjcpQ z$oPEVp8FR+dEZI59ODTZ_Ny*&Dbmh5K5O&5Re_sINhllp8bW`1a*9;!C8A;nfh-VW z_Qapp&8|MH9QGQBP!#qzV_%(?GzQuPi|a!dkN?7$5}7_$Q{71<3WmFDPgH0H0AWq>BSs|p1J|G#qyCv>bg;<>E&PP-7C-W z%Zuk;KOb+mpIuFp_c!kD?v};Ec@UZB z!B)buQP#-zd0AG z965S;TMB;={D}&!|29X2V;rQ(s>hBU%Wxh$ud1PP*)*|t8uGo^tLtNTh3jp0=!1{h zr$dHutHJzYUY#x7IVw9Bho_JQycP+lmpjwbm&Ghm0 zSx`%|I<;sl<0YVxaz6e0D{=pA{D|vVv*%UavS88#5D-{U?Lly5) zzyv!rw6w&+a{32EMs85vPBDzZqNA1u=@DF2vOV%L8? zVBZ@lVH0QJfuCg>9zZ$1Y0}L~?1n&brt16EuGy`L;@Y!AJ}+BSmU6*Jn(F8K7yu~` zk8;?NW;a@7dsA+`jQ@8bRn>k02&Y8UyMTdn#?8T8=q@kpBSIojyq595`ZFH~#)k_K zBRXpg-n3e1X{f*q+cd|yA9`*)-(}CeyT)H82bQ07LQwx65CUBw1TKDf#SVoiYxG4@`2BDE85ES@c^HF&gh2+_-QP6^qbj-xkhZ3x0|`85DgvPDGF#BhZK4vp za$lBv-(2vQ>m$Bzq?15`+kYtB6rJ!FfTA+_p zk7w9}-x8tzbIbcIhi8ytBpqmqPB8T>3vswU7qh-15gF*pfOE@l&M*g`0(n5hXX*#n zNHlc{q(}|nss?mlKZ3`F3K$-d&IVz(Y2?jeauP2b@_zXp zu&STEY>&h8fq+r4W>tE~ts^2JZS>5C7Q24{9%E!ny?7`TgLnx%R{T@rXFkzmX5N#3 zs#D1*9Kd36Z@46W+W;)GN}sJn*+a%$GX=(sGPbUQM<=)rIR%K|1zDnl45S@Zi|JbY zesxzQwH^sRMU0pAHy@}RGCWA}EikKrN)<}?H5bgWyn-WRBvww5D2Sr|%07xbS;Up& z<9+J%A$yuD@GkBbH2mY0g#Hif?4Jf}Elc)Mk)Uj)^zIZ@lv)~1T5gPPe znC@#VFiJL`^%05FJx_>rf%cb(qv0~(!{sJoG_MY?K`P=bzkHJIEXzCM8mw@5#X({X z5=~*@D^TKz1lEmtEuE4k(Y@yaO!x z!)|mc2toi6k0&PI?A(ryPKIU6)u-roe`I2!CU^rw`VBb6Fp$wTJ@Iyx70lr!lmp#n&ptg6iH-w-wWyu45-`%;UA?iLufQ^Ey@T}bs? zz3wDA@+98w(;!GDwmND~Bq|)3{;INQ5@VMMxL#@y5dK3I8CWRE0dKrm@afI%g z{D^%_%K3&+rmL3h5<}Q>=hz1r7YN5PKgd-8LM`H2KDPM1Zm^YQ7Yy0*LlQ`({iKsy zos8e~ecO~2i!ay#_qj}yZ%(1;dMdP}-Mxh2YM*AklY)()l5AQ3<(Zh}03s$S=~CIx zTs~K;j;N*M{A$%cWi2NyTbixsFfBm|w5qsaZ8fYkYN9TfvU?-P+G1?7%}R@!;Y3vS zw(La+zWVm^WSbx%u<#ZQTH;QCg3r$iM-g#GVp4hkk_ZXR@ms6zGdZ$vu($ijKyy6u z?dX?Z%EKU0N;IqaAOZ0TlyOtxCJbQb)`_@(D$RdDH)JD}vmgP()|vpS;>MHh$)X14 zW=7JoKVep_DSV>L9KY$k6!zxD*(L4r5|!T#SC0dgSnSkJ?S-(&(^n+@wckk#m-SU+ zW#Q|sGdiedh}h%t3sUaCGgfE&l|2p?LnPo`(s4OXuN%Pp=PG@#L3?EK(M1TFx;v=*1y$yxSxWLbrv5)&J^`zx?KW+Ke*7#@W{s_QTvi{U2kx@jlI$6}g^WV~x z4V1_#gTh0GZIeCI?o6AL9k zej5`XKRF`~4wQ6fJ1Q8J?&jag{_4*}EWb2f7lRy%7K(MRgXSn;!VT{=;VYpsBYTAX zy_lhl95&YmnvJ9w2Ee2khZuM+g8b#(?3b+ z(8l6ugB7jg!a!N`_{AOzppkM}X+w?UWIUTwq*hXPCdG<_K(MCF`hERyZ+P%v>ip1- za(ZJ!2Xq-Vyd1yRXM2?|>3`w@64#iUNYVJ`vDqr%WNhCIw1ES=q~)x-FP?yqyBZ$aVM=+5`xAdt9-5~vRE8zZLVKWNd< z>FHqzYtgRz2M^8FUP!%)2o351Hl~(-Y$Y+hH{S)NQx4<7us;0gStsK#L?ylh&R2L< z)9!#ncfXdVYSMW}&V!&Wkk9X`^d~YR2X&0oT#H2j{_$L|YcU~_W?cg*52ga%(#mof zL_jp%;rJKi3cQcUkyo*~sQehKXM8 zQ3i!#QheHf@i$0QT3(WJ#y4+RBHnFoa}c>{Rf#zwZ;BarAIzLq5fD zIqH5aVLtC_>LbtFD0eQ0o96e9^-HPo!L@^YDVCUE>5&0#8NY|HHmkuZOkGx z61$i8s|YIip^8k+!Laez4td6HBO-m_VQ;MN(!Hls>2^^nV7DApuJvH4^14^;`;WN= z4vlbwCA*O)DSjAVZqQ$o{u>*v=goePNX`H($s~bsvMm~*S?`*jj@dCIv!`$qQED zv;N!bEgp(ov*-%Zbr6Xk1xB1AK`yc65;uxbKx>SRpMTv}6L-S4zbK;r+Z?A)e*^B$ zWyz7YRDm*6SW!l6lH6??W-f=yiq&rQiLux6#A@dwkIm3yi%fnqH*JUWa*mw2qQ|l^j@Vt;d*^$L2Ey_Cg`x{AETy>06lT{fyAmY~9JG37aE zG1CprwE6ter3JtXpc;$*4CYeNgrlVtzeqUfwWHgfH>q?mmICw})$RaJN4AQeuc;=i3ZWzj~9(A<;?+=nkCUn|65ScPKROv;FW zO;*MW2V2TIA*!$8P~e}Ok(sGF70ET8Q&XJ@5a9Sr(VEpGqeO5w$2i#%m(yeMEBx-{ z3OIA5^86SdI@BASN$EQ13ECjia8(FgEHqx|4Q1`=sFxx&jjKz&2Ieh8-YXNc2toC* zuz{9WiN)g+O3D;WUI&|F%;HEn-}Of2g+bM}B*_f_Fs&l|Sm3kk-{p=T14RQCiPt3H z#Ydiz=^$uKntt72uDx$pH%l2#-(c7fePf{1Rv6`o5C8|2stxLP?o^d7&x`M6c)#o` za$d3O+Udwhi}vLlCP+RO97&b6OgeJL8)TOTrFrPGZ7$>-zgCjax!bQL0YIby74fQx z`TpX`BtSYPU)FE1fCQr=PRrlp81j8Rbgw#oyeS#_9>7wchjlF>t$W1dkA8(dZvcOy zKHxrmLe(zqWCj?$sQacQuB!MN9W+J>!+t}w;qXJPHH;pR1#-uk?o5r%L>W&9aF8wy zz1ZF2@`G!wngW*pu4=UB^~4&KHJQh&KL$G9KegQgXJqr1t5g~NQe@fVgFFWDnNEr~ z?F0vEC1-vv@y_i0?6LY$p!cz!`^22X=<&eR%T*!yeU+As-b>G>H0eV_XagZYG8zC& zy?WEFV2!YAU1(~0MhO%$=pL?II1Dg&zEDIS@scdp)Y6Li9ua$fi4bI9hSCV(&dNF{ z1LgOwxyg=qj|x85Frw~-$N~Lk1ecr+zGhA<$90FR2%O<_BS*r-?U!$Kaa9^?DS7tv zl~z%uClB*p`rEw4;|^{LUYi~F%1*X$E`Zz>XQWx zM7AEz@h2V(P3 zjHVJb*C)afg6QDxH)Q~%Z5S?K^r@uVEBKkJK&vS7=p+|>-qhLL7 ziLbWfCs$Rml~zKo9-ER+VW3xUA~i+D52tIag#Y7upB+Wy@6) zGQ7peraFPRl*CcFUbjAmf@^4wB+xR&gM$ZZfJD!{m(xqs}>9b_4nMi+vLs#RC>Gn`$DF1}nOW`iq}ZDP*L zCjejUD7&%6=(W~jV%Hl3tM*a(#&B}H^Mi8H^xC({;h#V6xq^c;2F;sS(#MxuL=)EL zpp6OU{=(QQ_az1|h0XgB)9u(f$MWHMHEwYabe`W}6|2)_D^pJP;QRZUPsKi}?A|^f z=j_Z(B59!sR4L9Fq=5>~P-pkx5^Om%`TO zIdD?Un0xk7N7p+vkQXkHG6o)|0 z@_nKEiW3zDvAo#&96{m>Uc`Fp54}gNbW|X5;iO_sAW_3~Cf>?p&G_BvD4jk?Aq}q- z9ImcW{k{$UE1>U1^jVe|5Uf-l4?R7cJbVR}M@Lhk;~_VA+(3ZnTqq~OBZRwy|1vb^ z{T`-x72t(p`o;wk-8%wOo$rgkFH2B;AzIFKbDKoE{!kYfbrtjME-%Yf&}iY^?xTli z2#YHi)+=S_kI)4#0-uFqVuwk1%8+^BuHGwKY^wqm%B;bQ=|tB{H*nn<+dLA8~6euFL?6_^Sp;q$K` z)jD^pErcaJ64>oFRN&k>X{D-Tf#tVrqr0kKS=wb!mU1wPIBeABYz~@}sx4KMAX3fqzDwGuWse5*LG2LTE4vclLvBwO!@q;$ayCkAJR~f5mjT z@X$!~qQ`1ETkti&fkcGdd>Br`>EWOO-Y?Fa6iYxY2z3_KoiAJMiJ%eD-rB_)`in5g_+o%&~;)0#98tyB2zw-Jzo* z-s(kmEP;om16a3&_IX8uac%?^j|3kJ|_}1m;|8b=|>D5);A3mJ}t4>)rw? zh_m3TooIusjwr_(EbC(NvEw4K{udAEr?&x~ZA>tMHgUd8XatpRYBy%K3Uy$z*<9P> z!zPr2n0`sNB50Cl=T{-{Ap4S2g(9uKzsoINpySEB~kwz1s%>T?1MO!Vam?Y_c=T-#w zx#RqrORGj1P7h`VCa$o{dH5;vo%sHmoeu@asnv1D>wP#5CeVZ&iC~-}IPxOMbF;G^ zz{z;aUyGhtp!!23xc;ws}RrB7B4kMP0)jmJ`HlF=%y|FMly*2WF zpp2JfUBKi_c7}d_k_*42-f-XnCA*l#+td4do;`u}PpBs?V#Td>KwgG* zS?hf>G1{JLF_c{4^ zaqITRN3Z3D=;@z>f`8@mk28T@Z)`3YmxSjTZ^cj7!^ggB$1#eOEB+;a^H_-g&U`f% zfT%<{*UF#Zh%3K#;w1(AmJx^KV;+=a^|K(%hXYkmy_xd(V%3(rpsCt4 z8>3N+^cagMa;le2{41?V^sbv5>oy;tbRJ$jlK!*U*4L6 zkvjt1H?cL9b_HiYgzjJ6x*z*p%wkc|7WX0cw5-z|{Q@trVmO443usH?bbmliTF$IM zk1u}TJ$6O$ut7W)fD6lXVrj*Nx}rc%~}P~V_@)R>3J*=Sk>aCZF|;vjcT3KK_<6btgSu> zjLk(LV|BB&66IUo2nrDLjW3Ead8zL2w2&u?IipK#`i-wXmS!V6zDTni|CJ#5Z}rxV zYIV`%jb?#A*VfeFrem*+Yru7aCg)sPw|&$ zjOtUj&m@$9`6V@`$1dhpo@cyPa4*kLDU^wQ92MeO$Jn8ch!?i#9QoifQb+C$pBO9} zkGQE*en)9$>1(XZY%9BWhVE@utr{FSEs3_d>pitl)>;Deb&u^9<-5|8cNZI8TX}x& z8}YZtKdzX`;YOVQ?faSsG0|?(Vm@2JOzUb*=cQ!OnioDah2UqG)$_ z1=f=tTDPwzG3_NPYNV6qpY;yBjXgcRJ{oqWSv@2aT*G#|)$IlA#j}*KdC@h8+BVsp z-Wl;WoON5;IZ7D!iPpG^t4sjvjNOkub@p(yVfh%8?n$Jn?4~EGOfU?=$z^uuDiIiA zP0u|CY|-8C+HY;tR6A3MOnTm$#nnT5Xi$(@-5YWwMV?93_n+8&v$C`w=c;79#wL1m zLExMj8s*)xS&-fWXDu^su2>Ppr?vwh-()*DqFbLiTLJA*GU})S2|8lw5-6TvY8aus zSL)*|77ao?hsx=*Btp1bvo@xgU;<^AKn{ql^oS;kae<(+Bki3g`|}AweQEE3f>cgG z>L;WEeY?7+H$pO0u|nj?`^0FP)tjkIw=Y> zEp;#^tnKz>YqtPp1+l(f6tG9Lf}M_T$n5fm{Dpe}l&<`J(;`MnppI!cr8v|2u+2OJ z6p@Tx2m>TPV1lkxx%(%_TXl*-=$}tfm?Lb-@^~Fr^zDnPxjEX0y?=1UC>&6WId!rm z%DcvAYYUEGi!2dBX6sp7Xv5DByGu0%SFA%qH(Ky#0?&`MtzYU4HY3J1k~DhI7${St zWFAl7FE;T6`YH1Kp&xL}+c`T-K3nG+yV<=Gm7_)nGe4FGo;=gZ*0Ps!-F~%OT<CmLGMx8qz&`O4Ppnip@{2PjgZ<*yg&9)%dnxiCG-%_G51L{u#XNSO z3Uz_gumxVOIpd;H=Cimh?F!i|cl!cXgIiOf=G(QKF#y3%E|-mG28Xm+vz-(b>5%Wy zw!_ru4V3t+$ZySyBZD@+Fp9#eLbHis5lfkR((qGpvE>)ScF~g zND}Kc-5(h0*8!KimbMCfa7ss2PvRAOs^jrwo+_xiE+>J`- zHMj6Pso<>9QeJ4o2Avl`Ki=$z>o#D$5!F%Ghuz^A6`o9v)jL<^yfm3ji25jG17nAr zp#4C}@=li9T$e8KixsD!DqwC>xQ5LDU<7 z=w61_pYboz_gS6Q?3^14On8vW4vxc1%^W#gr3t@C9HQJj8CUlW2SUxB*iB4Gf5}V% z4&2!TY64B69s7I=^ZQDnN6w6T_jymH3KVD6o}Gg}j`Lu4Z!M%j5=Q(eVRJj+e4Ofn zi9Hk!tvE#$YKEnn~dvqpKCj~r!jdR&M2kWW(zNYvPG>Is&1nM#G=1`Jje zRa#s-$JKI!?~&XW{onZ*4;vQ!oSOp-lltEF+IYNl*-QL)EMN>bxr^eBKpO??OMNfi z6pi5y;_aaNZv=eT;v!SIqnR-UkRLLNXa2b-{y7RxsK1tE6=Ku@Ftc4Dec-@ftfi)z z;E1qE%|jK@hM|7(jAn>lhH+amF-cjSRc^onQCah+u16O8Pi`vFq5-2-BfITnU6CH( zuc}h60gyE`@rrAF>sv{gjL$ByJ7D;+Ws|L^4tam*9JrT(pxpr zdzo!cR@pTFyHimG$DK^;5PTfOBa2MxJ!X#$SdISH0#q93Dk&6G{6Fn|c|6qJ`*)!z zSxT1drBWdzk-;dHO6aaTvKOHel4XX$n6!wPc4RGgR6??w8AFyy){>nWX6%fau?>cq z=jeNP|Gt@?*X#M~`8~hylYh+XHS;;=bFOop>s;&mvKI=87gnhf`-j#;9%K zUe~^k^05*oNnC7auV2+ZtrJ{Q_WGM;(h6M%X{MC?1nJq?iLS<}IB}jX^$)aRzY$DX zp4_rB)pXm%hJ(gIL|8B1NkZ9&EGABvoU$N4dKPhI@LB95nXKXu=l4Xo4gxf4k4;(O zGB+b!CyJh4AY3bKT3;Dl^Q!9cZVSJwu4n7Fc}aLsUKv8 zmc>t8quviK8T&k`#rDDZHm{r1Sl1<{#uV0+cJ+xMI!!wi^Q2i63kEhpt9suqZNb zfdNm_uV(&-oS)Y4Iq2}LeEgr?0E;r zQqt@}Z(viPY$XW?cpsda-zJTX3{iD`X6+w zBW^G!b~F1q!Bc%%s22kEEWi?X5awPymZ21L4JQBv5$Z1{*Y_E5kU??Z)FSTs2o-;sH z#(lvstDB8!;JRCHQ4)>P5q#yA9B?dXB*QThLrXdX_oDe-C>WAAcy`aH!2rtnv@KFi z8bkeH`VLQ2CKriWL@+2`i4<+7R1@@Ag5R<65AJyQ_&w#xMrMa^bJ5_a3c0u9jsVtY zbHWrqAMv2fJm1Pwmhy(@#9AWkPS5zc4J3K!#b;X5?RZD_=pAvyY(jdIEujp8_xfy2 z4XD`>b00xtyXepL8f#vrvwiG7rr>7ppS>$01|QmWZjqPA%Nt^{Y2{HH-TT0<7uQ$f zKAC(sN{PM<>09x@xTlhBNuGoDtMD{gmwGeBZ}lk)U!MgT80y-4gTN^oAsCXQR$pTJJ#KWKL@}M0gZZWyXTZV!#P% zQGL-kIs&>hVv$p~ueS0^#oemGc%p_XZXTc4U=HHLf6^!CENWQP%O?T}(5ZMSL&P>H> z^tI{-O_bC&Xu>(XTu+MdSn!lH*>F&QZwdTb0)o9JcLR1T zi^b5LdY4NnWzo>7(fZpKJaOkX5NV-vRezlbuq*ZM&S%U~EGo}gIf|*gqrcD{j^wXC zW2!cjgo5Q%Nk;atXb(BT*4J{XoJfZdRa^NL_6G|=s71y>H&Ua>Y_L@>>?z)WUUtt} zivb4H85daPiJ?k6>eEAY`zjw(M%YSU z?S?eyFMS)%?Qr$}{JwAA57vGWBZVA;4c5BvIx{DUDvSTPnaZV!Xt<;LdA!;VxXt`I zfxv|oj>WcE(!}kvVY?u7hd@T`c_3saFT}6u9v{MxwkROyYo{3Vydr^ZzW!Y?pXm)yRKqh1I}F)uG_pTAu0^{fi_@TPJ+?3f30cV1CBJqiw^%{& z`#q|YwajJY5gTMh-9yGH4}*7ijXQj~{;AKT63wQq8>&^8k%_8cH5O%trR4F zF}Z{GAw3vK1wY{_6*@7bD>G+M+Wiz7(=j7qbNNNAUcOQR(VsOpd^MwLcY4qc!<>l{ z2Eb3R$~~Jtn7#8;QWi*`J1Gy(O}~0K*}r-k<88^984^QETP!tlD%t$9x`eX$qjZQe zaidb>L3IH7@j-uoMv$-)@M@nQnM5M8iXp4C6hY<6rjS0K-;&Fe?3eQe}`vu?Ie!_SeibZO)iw{UjgpYPbE< zl~?e4MLrubI7TD42?OqaB_L&>E^CM`G1P~6#B3sz;#s5_m|1+RJBTtfA9KIwdWG3M z!h?0K;K~Nb%=Fw;GDo&BXeXY5u--Q!3Jyj!UVzw@BA17FD3bz!N-awvuwE zT5s%~9O%$+X7R??zoY^t0vL-^>Xjyz_S)vqVEDV-*-l2CR^y=K&4R`hoaAKyeZ`5B zD`>y|Lqj>NmNth-s{h=nX&dKd&b06M{Bw}f@^GMOYV4~lSMnkN;@oON7q6(R+KJ0mD+zfd#;_( z7C(@&L#oBms5g^y|J{R?lsf&V;z(Kii%aDNNKQ!Z(xd!8QVE-9OecySTj(1Cy{-xl zQ1wy)#+&!#3FS&-5$L8cCRDK)SKwmI<7Kj$hMkQ$2n9+zVO~4-`-_Jc(>ByecPrC!mL?O8Z7qOKJ$>8A>Z6H9KSU?QM3o0vY zZ92aiRhW~SdwnHI%4FBrNCMr4%*(e)3>Zl=uc=(htg9$c`Go(=h*~jQCeR3N4MO6* z!a~cs?(FVTTA_Y5S%SGU9~aVE1q85}Tk@k;>Q8E$!2r6xww^IyfUJNnkhJv^ZJPFi z0qmy=x+K7Q)nrT5R<1V_7^}8gS7kghzyPf^T{OaJEjl`2Wl{J=$w98oo8>1T88RMvHQL-v2E+ zx@h3pI?b!ovA)XJ+%kdHZ;KRMwc@1nZIU>yM|ZUtPck6a>5sc=>L9MdM!!W54-bFh zT&qelNauJqrIat*xF1ss@(aLm^+?19uRLuYqQ?)=T~{;jjAhlh>5hKX%ndrJBUlFV zXChOhWgqePQY`cXk{o*815>cFH+bz)dlLUH z=X-$_P}ITlv$DmtVfslbbbnlS;ZTGDhnf!04M&g+9#e7%3TQSjRMHD?FqVX)e-tEm zB?qZy$-shxQV@U?cd5?I5MIhXM~gA|cZhe^QiMH?FMfAgB1%&aIn=_>tzP98fwe zyEb<@SMfV;LpfiL$yC?t+>gwOagcCJ_8}rd@>J-qv_ah5BU8#l6Zt4d&Y+IwWtst{ z=mnvAfP~#AztoaV4sE1Ks$}P#xmHMNV1S@er8#6mG`ah7Y7wWL-#L!6Xe94}WPUpv zaEg6C+aU*Z)vJ~i(N{FrW%R=r;@l>uvM>{bsip3KwnpcVw``}5W5@PF2)#=p;g06d z?a1)Nw-dm1*rR+Y_@~QWsGCqjWlVd1CuYiY|@2Xijz?NQS5Ulpw`ORo+F6L=XHp3hPN8ofef?Tgd zs^esjDI+?WU4{42kMWBw?XF{)fXmPN`t$`9kPO2_AO~Xi4J3U^ zstg`#1h%2ZjmkJpV8vONVqoSWw3!|5Js5R4V`0dC&ZGP`2ZS1upLQRmgSg2o-Tj!n zESZdjp=A4*8Xh|C?9QqvogP_$8eK;!M|57Pa3;tVAgy|P0t(r{)JG2u6~XIn=k%?W zIg+eauaLJ58l~lH`+>dY87f}4fEZB%YF74v61ZG50F2vQ-J69^csxt&blTcvO z_b>|aO9m4d4tue-4V+fzFJN!949mOxCK`ohMFAbkreS;}|1PTL><6!Y3zBR0W!=8H z7dao-t5oue7;av6EM3F3JZt8q0YHA~RFlMH{%$KrgjzvYpVoI%=8lY~sIt7y{#I)@ zDx6Ujv+Nxjpb3PyRZ`buG2^Z3j?rb1LNTxEAwHsOUCkaYG3zJ3EM^gA6&*?qb;)D{ zcID%#Hf`UfOZeK-)4&&z#hfh#GHP_ayFK3^h+8De>`30ak`|(H_3y&%wl6MH2UyOw zo^hh7$Ix*D3nfY2^&xS%Tv)Z#wZHhz03H2o>`Q~6nFdJ8w_>li)BTSUy(w97?9MP% zqARBjM7iyp%R)n%k<13=;0($Q7oGudR}Td0$#BV551yxMh*_Vy@JM|7U(D)hYo&OyT3^Ho!H79x#IZVsC2aSpqeMI_v>ZgnuT+ z>4?xW+x4lBMR)B~q)YhtY+mubQK(Tmi1(N)o_+y-xV6-DrFzA;3GjlL)JwJfAc*5J zG5(Hw3VyIW;j{1Ww1QpFl*2`F4RI1!RHhewH}O;fia2>jZ(B)A(P3b;^{nID1OBO0 z!mj+h2JntNfB-zkdAA3_6!nRTPr0TTRaB(6UR>YWWCLC%Kef=CYlz)oh~4+i52wU} zh1S*ov67anc@jY+5rQ(h4SslgZm-!&mO1{nz;ChxQxxas-r$--4lGaaRJpVbh+G!< zPaiN}ImE7`M!jmcznl=*46NhG;)9@p{E9(R&VmS#vgqs6fVo6Tueij(I%!juux4MlZ`9&asl7G!Io`4ro8p^ zDZsRYgS%Et0TfGf;K5EbN;wREcsM9#=gL#P9h}LX8b@p|17o(UyTke**A&8F^X1Ym z2xS5xYYPdK;S#b>wkgt|eH`BYKV6O+y+SS9V7c3a3R0EQP8BP!cCb~{Kmhv59bPFU z6gAX&p7IfiIGt#jER1Wxn7m(Ktdw?O9d^7vhwm!L@n{V>B5{1>W3Tg#cA%KAmF`sj zVImy2qwa4be4cicXhVWXSltBYi|6H8t}ER}_4J8exr5|7DY|^N+b15{APB2v3D_O$ zU+QC)$}HPXBhKtGM~?L4og_Kuy`|fef+pM4{^`gaF?Rc+bti}C7;;dL+0B`yIe-hCP2Bo^W?{fzHUi)D z=+DFha=&|Szel2@OF`Qmf|?FVYFT%-y@vC^&XFVYrNWQqnS%SN4NHBtQl_3RFrxB! z6_k(XZ_r|IkZMw2rhhb)(SMkge6F|NJdc%ysSFs3zOU6FyD`Sm+a+Ye?7)Z|LB!xd z>uA0!7~j;pB1)&ay>>4ev?0{uEZsGnela&1V-al_?;-7lU-IwvYip#8KOCygm6QA8 zRcKH71hxVE%JIt=2BByPL5eipi&F)WJ}be@u0tchZ#dG}&TUFholSX$f?3Lxg7E%V zUK&!Z(C*a2fW2nOVy1WZJ>@FUhFemHq_I~%WbR?nY>D@>wM&o`o(r<`9ysUSxy7vt z#Q4NXtO*!-$rJ~zb_lfg9cxva?Qx??84Qw(riSq0$rf0ptdfQ2i%&(|vq}Ts;bsZs zes!caF>ow%{-E)Y=X-Eid;6^QxDM-D9v<2T6m0xxD&=f)=XPMxWy}phIdSNr?uSZF zLy3lB$>X>y1rJa$RGOL|^Lz8^5)lOnn#fp{NVwAWZF` zH;kILeozJx7vRLAFZ1QRpW6%{Ev1}A=&ykd;gKX3QPK;`s6JKO=rHg;Ai3VDZupPo zfT%aMXzX#3^|hBlKy(J3b>lKx@=l~o0(+o+YJrdTp>{Sra<6>6qvvgL!_7-9s{FE* zChOh*Wgg;_n+&WaMNe7KQCgVjtwY@Gp53A%Jh#Z6NBDh@@PU_G4I6Jab$)SMB06|2 zRZcQmUJSN)&FK|{B7!pvuycz{N6o~;?JwGo`Q4QRjnE{<<6+oH0BUE>T>*my6wt+WfH)F#NO@Ei?~x0s1f_}}Kn_tWuP zNcB-U)eD*VU=_>Ybq{}vd(1;$Td zo!ha69w;F8UM~26RuSh9Ae6IEAZ#AC^*k5EN=o^12D9p@>meOM zj6Kx)n|+R3<8ZN4<6^RX4)f+0=gD^4Dhsr{0r^#oLqs7lFe9QC{?jRx~E2;U78;j+0EJ3`>vrES?r(8K5IU$%#f+jbXvJ^zs zvGkAniTKZ9xrm`*kc72PImxceDp&w}j<_|8E2Z~x>2hLTehZ?0JG`wDGRY~Oe-`Yv zFr|94-o2MvI{j61J_c3=$SY-gEhpdE${Qo2kk;GmG6bno!HAQCg&Qyz?JB#x2(JZA2rX^VwT%baT{=}r z)kTFIcl_!vZp~(t=NZ}IQw?~<0>G+s?KbXJVity5?g|~;!=6ruRxMXESS*hA6)nbF zRc~>N3ipGSnkP)=XIFPB*s36(R{nJYHZ(+pk%Gx(>OmoC7>&pnz&xD6A&OC!u!dO^rL{2`2 zIFUecU!kX9)edJuwM&fSAM>PVB_QB|F^3sBtJqk(<2X)x) z#RKGSpN41?g{5=jIYUI+dMuPxgC@thB}dhkdIzZH*6quo2zL?M?gSf1IQr(aUkIC_ zEKW7t%g8Q1;K^Z&keBP-T0wdh$V%hPcTY7mrqX+u-7+04-*hvCR#M>Tn`MlYsq2Ul z7gG4cp`_$wWyJ0Bz_H+Mvz(8Tlo?R{ZUPEjFg!FJyygMJo^%U4-M~|epe8)JLinKW zGwK&5!`xcWhXI#RupU2X5`G`~S5PBQIcwhd0OnS~8>s%IqAruU=`!jhFAYK}hh$jo zzeMZD`H;&*@$!DCU;f&{xK3b~&@s}LF|=Khe6$W^~J7I+hu zZtvfSBxSTcpVxGY(#1$vFkIc=E+2ZCC7MMfS9^xk0CfboYW3Nj?z62hD1QCLml%re{Elgpc-I_aRR_LVLmB_H#5 zj;D_a_T7>7{xgWi4^40e1#`XE02YuKuGN8Qk1Av;L$@d=T(@Jty#uB=L<8M?D` zVq{S91p1HB8>Ajc0^ktc{uEwNQpM{G7(9}+H1X!VcU2PO+gZ+IsJ6ZiKv`;!anRp6 z%UP5pXE`q3D5(zy1!)FMq9l+MlVBEi*B@{phqY8#DOu{XwL}7ha=*5;0go_50a(7N zfS)g6pu(fJtl6^;Yrl0r0ybVqu!t>98gI-^R{iL=47t+omGE0j_<4NH)FpGOjBDxyrSQ*cvL)UQivp!3Fw8afrd%^lvk~@Gw z`e3SlZ+u4BI9fk2u-9Peel9uQ%Hb(853te}z$Ri<1YrY1pj|xZXaYE z!1Qs{E1X!6F)NH~5yLJcD^=SConXfuG$^+%EVFGZinm^m^FZxL z^Q_RjiIe$7^R}dDEt3Q}gTU$VW!x$GATR95;G#ikhua4j*lBp-oNsc`WJE3H-9{w} z3sl{)M{jL(OVn%@!&cl4R-4_D2TSlC4F3+_g2y9R7-BgBG~XM@epz&V`sloyu-