From 84d83b0450c3440f7e9d8772b67e99cc0fd2c6be Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Pau=20Ferrer=20Oca=C3=B1a?= Date: Fri, 2 Feb 2024 12:56:03 +0100 Subject: [PATCH 1/5] MOBILE-4329 dataprivacy: Add module structure with WS calls --- src/core/features/dataprivacy/constants.ts | 16 + .../dataprivacy/dataprivacy.module.ts | 31 ++ src/core/features/dataprivacy/lang.json | 3 + .../dataprivacy/services/dataprivacy.ts | 378 ++++++++++++++++++ .../dataprivacy/services/handlers/user.ts | 59 +++ src/core/features/features.module.ts | 2 + 6 files changed, 489 insertions(+) create mode 100644 src/core/features/dataprivacy/constants.ts create mode 100644 src/core/features/dataprivacy/dataprivacy.module.ts create mode 100644 src/core/features/dataprivacy/lang.json create mode 100644 src/core/features/dataprivacy/services/dataprivacy.ts create mode 100644 src/core/features/dataprivacy/services/handlers/user.ts diff --git a/src/core/features/dataprivacy/constants.ts b/src/core/features/dataprivacy/constants.ts new file mode 100644 index 00000000000..73043ed8558 --- /dev/null +++ b/src/core/features/dataprivacy/constants.ts @@ -0,0 +1,16 @@ +// (C) Copyright 2015 Moodle Pty Ltd. +// +// 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. + +// Routing. +export const CORE_DATAPRIVACY_PAGE_NAME = 'dataprivacy'; diff --git a/src/core/features/dataprivacy/dataprivacy.module.ts b/src/core/features/dataprivacy/dataprivacy.module.ts new file mode 100644 index 00000000000..886e212a4cb --- /dev/null +++ b/src/core/features/dataprivacy/dataprivacy.module.ts @@ -0,0 +1,31 @@ +// (C) Copyright 2015 Moodle Pty Ltd. +// +// 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 { APP_INITIALIZER, NgModule } from '@angular/core'; +import { CoreUserDelegate } from '@features/user/services/user-delegate'; +import { CoreDataPrivacyUserHandler } from './services/handlers/user'; + + +@NgModule({ + providers: [ + { + provide: APP_INITIALIZER, + multi: true, + useValue: () => { + CoreUserDelegate.registerHandler(CoreDataPrivacyUserHandler.instance); + }, + }, + ], +}) +export class CoreDataPrivacyModule {} diff --git a/src/core/features/dataprivacy/lang.json b/src/core/features/dataprivacy/lang.json new file mode 100644 index 00000000000..6e1a74f551e --- /dev/null +++ b/src/core/features/dataprivacy/lang.json @@ -0,0 +1,3 @@ +{ + "pluginname": "Data privacy" +} diff --git a/src/core/features/dataprivacy/services/dataprivacy.ts b/src/core/features/dataprivacy/services/dataprivacy.ts new file mode 100644 index 00000000000..00e1583922e --- /dev/null +++ b/src/core/features/dataprivacy/services/dataprivacy.ts @@ -0,0 +1,378 @@ +// (C) Copyright 2015 Moodle Pty Ltd. +// +// 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 { Injectable } from '@angular/core'; +import { CoreWSError } from '@classes/errors/wserror'; +import { CoreSiteWSPreSets } from '@classes/sites/authenticated-site'; +import { CoreUserSummary } from '@features/user/services/user'; +import { CoreSites, CoreSitesCommonWSOptions } from '@services/sites'; +import { CoreWSExternalWarning } from '@services/ws'; +import { makeSingleton } from '@singletons'; + +/** + * Service to handle data privacy. + */ +@Injectable({ providedIn: 'root' }) +export class CoreDataPrivacyService { + + static readonly ROOT_CACHE_KEY = 'CoreDataPrivacy:'; + + /** + * Check if data privacy is enabled on current site. + * + * @returns Whether data privacy is enabled. + */ + async isEnabled(): Promise { + const site = CoreSites.getCurrentSite(); + + // Check if the privacy data WS are available in the site. + if (!site?.wsAvailable('tool_dataprivacy_get_data_requests')) { + return false; + } + + // If the user can contact the DPO, then data privacy is enabled. + const accessInformation = await this.getAccessInformation(); + + return accessInformation.cancontactdpo; + } + + /** + * Get cache key for data privacy access information WS calls. + * + * @returns Cache key. + */ + protected getAccessInformationCacheKey(): string { + return CoreDataPrivacyService.ROOT_CACHE_KEY + 'accessInformation'; + } + + /** + * Retrieving privacy API access (permissions) information for the current user. + * + * @param options Request options. + * @returns Promise resolved with object with access information. + * @since 4.4 + */ + async getAccessInformation( + options: CoreSitesCommonWSOptions = {}, + ): Promise { + const site = await CoreSites.getSite(options.siteId); + + const preSets: CoreSiteWSPreSets = { + cacheKey: this.getAccessInformationCacheKey(), + ...CoreSites.getReadingStrategyPreSets(options.readingStrategy), // Include reading strategy preSets. + }; + + return site.read('tool_dataprivacy_get_access_information', undefined, preSets); + } + + /** + * Invalidates access information. + * + * @param siteId Site ID. If not defined, current site. + * @returns Promise resolved when the data is invalidated. + */ + protected async invalidateAccessInformation(siteId?: string): Promise { + const site = await CoreSites.getSite(siteId); + + await site.invalidateWsCacheForKey(this.getAccessInformationCacheKey()); + } + + /** + * Contact the site Data Protection Officer(s). + * + * @param message Message to send to the DPO. + * @param siteId Site ID. If not defined, current site. + * @returns Promise resolved with boolean: whether the message was sent. + * @since 4.4 + */ + async contactDPO(message: string, siteId?: string): Promise { + const site = await CoreSites.getSite(siteId); + + const params: CoreDataPrivacyContactDPOWSParams = { message }; + + const response = await site.write('tool_dataprivacy_contact_dpo', params); + + if (response.warnings && response.warnings.length) { + throw new CoreWSError(response.warnings[0]); + } + + return response.result; + } + + /** + * Get cache key for data requests WS calls. + * + * @returns Cache key. + */ + protected getDataRequestsCacheKey(): string { + return CoreDataPrivacyService.ROOT_CACHE_KEY + 'datarequests'; + } + + /** + * Fetch the details of a user's data request. + * + * @param options Request options. + * @returns Promise resolved with the data requests. + * @since 4.4 + */ + async getDataRequests( + options: CoreSitesCommonWSOptions = {}, + ): Promise { + const site = await CoreSites.getSite(options.siteId); + + const preSets: CoreSiteWSPreSets = { + cacheKey: this.getDataRequestsCacheKey(), + ...CoreSites.getReadingStrategyPreSets(options.readingStrategy), // Include reading strategy preSets. + }; + + const params: CoreDataPrivacyGetDataRequestsWSParams = { + userid: site.getUserId(), + }; + + const response = + await site.read('tool_dataprivacy_get_data_requests', params, preSets); + + return response.requests; + } + + /** + * Invalidate data requests. + * + * @param siteId Site ID. If not defined, current site. + * @returns Promise resolved when the data is invalidated. + */ + async invalidateDataRequests(siteId?: string): Promise { + const site = await CoreSites.getSite(siteId); + + await site.invalidateWsCacheForKey(this.getDataRequestsCacheKey()); + } + + /** + * Creates a data request. + * + * @param type Type of the request. + * @param comments Comments for the data request. + * @param siteId Site ID. If not defined, current site. + * @returns Promise resolved when the request is created. + * @since 4.4 + */ + async createDataRequest(type: CoreDataPrivacyDataRequestType, comments: string, siteId?: string): Promise { + const site = await CoreSites.getSite(siteId); + + const params: CoreDataPrivacyCreateDataequestWSParams = { + type, + comments, + }; + + const response = + await site.write('tool_dataprivacy_create_data_request', params); + + if (response.warnings && response.warnings.length) { + throw new CoreWSError(response.warnings[0]); + } + + return response.datarequestid; + } + + /** + * Cancel the data request made by the user. + * + * @param requestid ID of the request to cancel. + * @param siteId Site ID. If not defined, current site. + * @returns Promise resolved with boolean: whether the request was canceled. + * @since 4.4 + */ + async cancelDataRequest(requestid: number, siteId?: string): Promise { + const site = await CoreSites.getSite(siteId); + + const params: CoreDataPrivacyCancelDataRequestWSParams = { requestid }; + + const response = + await site.write('tool_dataprivacy_cancel_data_request', params); + + if (response.warnings && response.warnings.length) { + throw new CoreWSError(response.warnings[0]); + } + + return response.result; + } + + /** + * Invalidate all the data related to data privacy. + */ + async invalidateAll(): Promise { + await Promise.all([ + this.invalidateAccessInformation(), + this.invalidateDataRequests(), + ]); + } + + /** + * Check if the user can cancel a request. + * + * @param request The request to check. + * @returns Whether the user can cancel the request. + */ + canCancelRequest(request: CoreDataPrivacyRequest): boolean { + const cannotCancelStatuses = [ + CoreDataPrivacyDataRequestStatus.DATAREQUEST_STATUS_COMPLETE, + CoreDataPrivacyDataRequestStatus.DATAREQUEST_STATUS_DOWNLOAD_READY, + CoreDataPrivacyDataRequestStatus.DATAREQUEST_STATUS_DELETED, + CoreDataPrivacyDataRequestStatus.DATAREQUEST_STATUS_EXPIRED, + CoreDataPrivacyDataRequestStatus.DATAREQUEST_STATUS_CANCELLED, + CoreDataPrivacyDataRequestStatus.DATAREQUEST_STATUS_REJECTED, + ]; + + return !cannotCancelStatuses.includes(request.status); + } + +} + +export const CoreDataPrivacy = makeSingleton(CoreDataPrivacyService); + +export enum CoreDataPrivacyDataRequestType { + DATAREQUEST_TYPE_EXPORT = 1, // Data export request type. + DATAREQUEST_TYPE_DELETE = 2, // Data deletion request type. + DATAREQUEST_TYPE_OTHERS = 3, // Other request type. Usually of enquiries to the DPO. +} + +export enum CoreDataPrivacyDataRequestStatus { + DATAREQUEST_STATUS_PENDING = 0, // Newly submitted and we haven't yet started finding out where they have data. + DATAREQUEST_STATUS_PREPROCESSING = 1, // Newly submitted and we have started to find the location of data. + DATAREQUEST_STATUS_AWAITING_APPROVAL = 2, // Metadata ready and awaiting review and approval by the Data Protection officer. + DATAREQUEST_STATUS_APPROVED = 3, // Request approved and will be processed soon. + DATAREQUEST_STATUS_PROCESSING = 4, // The request is now being processed. + DATAREQUEST_STATUS_COMPLETE = 5, // Information/other request completed. + DATAREQUEST_STATUS_CANCELLED = 6, // Data request cancelled by the user. + DATAREQUEST_STATUS_REJECTED = 7, // Data request rejected by the DPO. + DATAREQUEST_STATUS_DOWNLOAD_READY = 8, // Data request download ready. + DATAREQUEST_STATUS_EXPIRED = 9, // Data request expired. + DATAREQUEST_STATUS_DELETED = 10, // Data delete request completed, account is removed. +} + +/** + * Data returned by tool_dataprivacy_get_access_information WS. + */ +export type CoreDataPrivacyGetAccessInformationWSResponse = { + cancontactdpo: boolean; // Can contact dpo. + canmanagedatarequests: boolean; // Can manage data requests. + cancreatedatadownloadrequest: boolean; // Can create data download request for self. + cancreatedatadeletionrequest: boolean; // Can create data deletion request for self. + hasongoingdatadownloadrequest: boolean; // Has ongoing data download request. + hasongoingdatadeletionrequest: boolean; // Has ongoing data deletion request. + warnings?: CoreWSExternalWarning[]; +}; + +/** + * Params of tool_dataprivacy_contact_dpo WS. + */ +type CoreDataPrivacyContactDPOWSParams = { + message: string; // The user's message to the Data Protection Officer(s). +}; + +/** + * Data returned by tool_dataprivacy_contact_dpo WS. + */ +type CoreDataPrivacyContactDPOWSResponse = { + result: boolean; // The processing result + warnings?: CoreWSExternalWarning[]; +}; + +/** + * Params of tool_dataprivacy_create_data_request WS. + */ +type CoreDataPrivacyCreateDataequestWSParams = { + type: CoreDataPrivacyDataRequestType; // The type of data request to create. 1 for export, 2 for data deletion. + comments?: string; // Comments for the data request. + foruserid?: number; // The id of the user to create the data request for. Empty for current user. +}; + +/** + * Data returned by tool_dataprivacy_create_data_request WS. + */ +type CoreDataPrivacyCreateDataRequestWSResponse = { + datarequestid: number; // The id of the created data request. + warnings?: CoreWSExternalWarning[]; +}; + +/** + * Params of tool_dataprivacy_cancel_data_request WS. + */ +type CoreDataPrivacyCancelDataRequestWSParams = { + requestid: number; // The request ID +}; + +/** + * Data returned by tool_dataprivacy_cancel_data_request WS. + */ +type CoreDataPrivacyCancelDataRequestWSResponse = { + result: boolean; // The processing result + warnings?: CoreWSExternalWarning[]; +}; + +/** + * Params of tool_dataprivacy_get_data_requests WS. + */ +type CoreDataPrivacyGetDataRequestsWSParams = { + userid?: number; // The id of the user to get the data requests for. Empty for all users. + statuses?: CoreDataPrivacyDataRequestStatus[]; // The statuses of the data requests to get. + // 0 for pending 1 preprocessing, 2 awaiting approval, 3 approved, + // 4 processed, 5 completed, 6 cancelled, 7 rejected. + types?: number[]; // The types of the data requests to get. 1 for export, 2 for data deletion. + creationmethods?: number[]; // The creation methods of the data requests to get. 0 for manual, 1 for automatic. + sort?: string; // The field to sort the data requests by. + limitfrom?: number; // The number to start getting the data requests from. + limitnum?: number; // The number of data requests to get. +}; + +/** + * Data returned by tool_dataprivacy_get_data_requests WS. + */ +type CoreDataPrivacyGetDataRequestsWSResponse = { + requests: CoreDataPrivacyRequest[]; // The data requests. + warnings?: CoreWSExternalWarning[]; +}; + +/** + * Data for the dataprivacy request. + */ +export type CoreDataPrivacyRequest = { + type: CoreDataPrivacyDataRequestType; // Type. + comments: string; // Comments. + commentsformat: number; // Commentsformat. + userid: number; // Userid. + requestedby: number; // Requestedby. + status: CoreDataPrivacyDataRequestStatus; // Status. + dpo: number; // Dpo. + dpocomment: string; // Dpocomment. + dpocommentformat: number; // Dpocommentformat. + systemapproved: boolean; // Systemapproved. + creationmethod: number; // Creationmethod. + id: number; // Id. + timecreated: number; // Timecreated. + timemodified: number; // Timemodified. + usermodified: number; // Usermodified. + foruser: CoreUserSummary; // The user the request is for. + requestedbyuser: CoreUserSummary; // The user who requested the data. + dpouser?: CoreUserSummary; // The user who processed the request. + messagehtml?: string; // Messagehtml. + typename: string; // Typename. + typenameshort: string; // Typenameshort. + statuslabel: string; // Statuslabel. + statuslabelclass: string; // Statuslabelclass. + canreview?: boolean; // Canreview. + approvedeny?: boolean; // Approvedeny. + allowfiltering?: boolean; // Allowfiltering. + canmarkcomplete?: boolean; // Canmarkcomplete. +}; diff --git a/src/core/features/dataprivacy/services/handlers/user.ts b/src/core/features/dataprivacy/services/handlers/user.ts new file mode 100644 index 00000000000..fbb6bcd3ff1 --- /dev/null +++ b/src/core/features/dataprivacy/services/handlers/user.ts @@ -0,0 +1,59 @@ +// (C) Copyright 2015 Moodle Pty Ltd. +// +// 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 { Injectable } from '@angular/core'; +import { CoreUserDelegateService, CoreUserProfileHandler, CoreUserProfileHandlerData } from '@features/user/services/user-delegate'; +import { CoreNavigator } from '@services/navigator'; +import { makeSingleton } from '@singletons'; +import { CoreDataPrivacy } from '../dataprivacy'; +import { CORE_DATAPRIVACY_PAGE_NAME } from '@features/dataprivacy/constants'; + +/** + * Handler to visualize custom reports. + */ +@Injectable({ providedIn: 'root' }) +export class CoreDataPrivacyUserHandlerService implements CoreUserProfileHandler { + + protected pageName = CORE_DATAPRIVACY_PAGE_NAME; + + type = CoreUserDelegateService.TYPE_NEW_PAGE; + name = 'CoreDataPrivacyDelegate'; + priority = 100; + + /** + * @inheritdoc + */ + async isEnabled(): Promise { + return await CoreDataPrivacy.isEnabled(); + } + + /** + * @inheritdoc + */ + getDisplayData(): CoreUserProfileHandlerData { + return { + class: 'core-data-privacy', + icon: 'fas-user-shield', + title: 'core.dataprivacy.pluginname', + action: async (event): Promise => { + event.preventDefault(); + event.stopPropagation(); + await CoreNavigator.navigateToSitePath(this.pageName); + }, + }; + } + +} + +export const CoreDataPrivacyUserHandler = makeSingleton(CoreDataPrivacyUserHandlerService); diff --git a/src/core/features/features.module.ts b/src/core/features/features.module.ts index 61c97cbe730..6a38207d825 100644 --- a/src/core/features/features.module.ts +++ b/src/core/features/features.module.ts @@ -19,6 +19,7 @@ import { CoreCommentsModule } from './comments/comments.module'; import { CoreContentLinksModule } from './contentlinks/contentlinks.module'; import { CoreCourseModule } from './course/course.module'; import { CoreCoursesModule } from './courses/courses.module'; +import { CoreDataPrivacyModule } from './dataprivacy/dataprivacy.module'; import { CoreEditorModule } from './editor/editor.module'; import { CoreEmulatorModule } from './emulator/emulator.module'; import { CoreEnrolModule } from './enrol/enrol.module'; @@ -53,6 +54,7 @@ import { CoreReportBuilderModule } from './reportbuilder/reportbuilder.module'; CoreContentLinksModule, CoreCourseModule, CoreCoursesModule, + CoreDataPrivacyModule, CoreEditorModule, CoreEnrolModule, CoreFileUploaderModule, From 791903a80d67aa2af61ecc15fc42ee37c48b7efc Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Pau=20Ferrer=20Oca=C3=B1a?= Date: Tue, 6 Feb 2024 15:43:18 +0100 Subject: [PATCH 2/5] MOBILE-4329 dataprivacy: Implement data privacy pages --- scripts/langindex.json | 34 ++++ src/core/components/empty-box/empty-box.scss | 2 +- .../components/components.module.ts | 33 ++++ .../components/contactdpo/contactdpo.html | 37 ++++ .../components/contactdpo/contactdpo.ts | 94 ++++++++++ .../components/newrequest/newrequest.html | 50 ++++++ .../components/newrequest/newrequest.ts | 104 +++++++++++ .../dataprivacy/dataprivacy-lazy.module.ts | 38 ++++ .../dataprivacy/dataprivacy.module.ts | 14 ++ src/core/features/dataprivacy/lang.json | 35 +++- .../features/dataprivacy/pages/main/main.html | 160 +++++++++++++++++ .../features/dataprivacy/pages/main/main.scss | 10 ++ .../features/dataprivacy/pages/main/main.ts | 167 ++++++++++++++++++ .../dataprivacy/services/dataprivacy.ts | 4 +- src/core/features/editor/editor.module.ts | 2 - 15 files changed, 778 insertions(+), 6 deletions(-) create mode 100644 src/core/features/dataprivacy/components/components.module.ts create mode 100644 src/core/features/dataprivacy/components/contactdpo/contactdpo.html create mode 100644 src/core/features/dataprivacy/components/contactdpo/contactdpo.ts create mode 100644 src/core/features/dataprivacy/components/newrequest/newrequest.html create mode 100644 src/core/features/dataprivacy/components/newrequest/newrequest.ts create mode 100644 src/core/features/dataprivacy/dataprivacy-lazy.module.ts create mode 100644 src/core/features/dataprivacy/pages/main/main.html create mode 100644 src/core/features/dataprivacy/pages/main/main.scss create mode 100644 src/core/features/dataprivacy/pages/main/main.ts diff --git a/scripts/langindex.json b/scripts/langindex.json index 7c05d22dab5..d5de7940980 100644 --- a/scripts/langindex.json +++ b/scripts/langindex.json @@ -1677,6 +1677,40 @@ "core.courses.totalcoursesearchresults": "local_moodlemobileapp", "core.currentdevice": "local_moodlemobileapp", "core.custom": "form", + "core.dataprivacy.cancelrequest": "tool_dataprivacy", + "core.dataprivacy.cancelrequestconfirmation": "tool_dataprivacy", + "core.dataprivacy.contactdataprotectionofficer": "tool_dataprivacy", + "core.dataprivacy.createnewdatarequest": "tool_dataprivacy", + "core.dataprivacy.datarequests": "tool_dataprivacy", + "core.dataprivacy.daterequested": "tool_dataprivacy", + "core.dataprivacy.deletemyaccount": "tool_dataprivacy", + "core.dataprivacy.message": "tool_dataprivacy", + "core.dataprivacy.newrequest": "tool_dataprivacy", + "core.dataprivacy.nodatarequests": "tool_dataprivacy", + "core.dataprivacy.pluginname": "tool_dataprivacy", + "core.dataprivacy.replyto": "tool_dataprivacy", + "core.dataprivacy.requestactions": "tool_dataprivacy", + "core.dataprivacy.requestby": "tool_dataprivacy", + "core.dataprivacy.requestcomments": "tool_dataprivacy", + "core.dataprivacy.requeststatus": "tool_dataprivacy", + "core.dataprivacy.requestsubmitted": "tool_dataprivacy", + "core.dataprivacy.requesttype": "tool_dataprivacy", + "core.dataprivacy.requesttype_help": "tool_dataprivacy", + "core.dataprivacy.requesttypedelete": "tool_dataprivacy", + "core.dataprivacy.requesttypeexport": "tool_dataprivacy", + "core.dataprivacy.requesttypeothers": "tool_dataprivacy", + "core.dataprivacy.send": "tool_dataprivacy", + "core.dataprivacy.statusapproved": "tool_dataprivacy", + "core.dataprivacy.statusawaitingapproval": "tool_dataprivacy", + "core.dataprivacy.statuscancelled": "tool_dataprivacy", + "core.dataprivacy.statuscomplete": "tool_dataprivacy", + "core.dataprivacy.statusdeleted": "tool_dataprivacy", + "core.dataprivacy.statusexpired": "tool_dataprivacy", + "core.dataprivacy.statuspending": "tool_dataprivacy", + "core.dataprivacy.statuspreprocessing": "tool_dataprivacy", + "core.dataprivacy.statusprocessing": "tool_dataprivacy", + "core.dataprivacy.statusready": "tool_dataprivacy", + "core.dataprivacy.statusrejected": "tool_dataprivacy", "core.datastoredoffline": "local_moodlemobileapp", "core.date": "moodle", "core.datecreated": "repository", diff --git a/src/core/components/empty-box/empty-box.scss b/src/core/components/empty-box/empty-box.scss index 7c57385ea22..db32084725b 100644 --- a/src/core/components/empty-box/empty-box.scss +++ b/src/core/components/empty-box/empty-box.scss @@ -2,7 +2,7 @@ :host { --image-size: 120px; - --icon-color: var(--text-color); + --icon-color: var(--subdued-text-color); display: flex; flex-direction: column; diff --git a/src/core/features/dataprivacy/components/components.module.ts b/src/core/features/dataprivacy/components/components.module.ts new file mode 100644 index 00000000000..9b857a50a79 --- /dev/null +++ b/src/core/features/dataprivacy/components/components.module.ts @@ -0,0 +1,33 @@ +// (C) Copyright 2015 Moodle Pty Ltd. +// +// 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 { NgModule } from '@angular/core'; +import { CoreSharedModule } from '@/core/shared.module'; +import { CoreDataPrivacyContactDPOComponent } from './contactdpo/contactdpo'; +import { CoreDataPrivacyNewRequestComponent } from './newrequest/newrequest'; + +@NgModule({ + declarations: [ + CoreDataPrivacyContactDPOComponent, + CoreDataPrivacyNewRequestComponent, + ], + imports: [ + CoreSharedModule, + ], + exports: [ + CoreDataPrivacyContactDPOComponent, + CoreDataPrivacyNewRequestComponent, + ], +}) +export class CoreDataPrivacyComponentsModule {} diff --git a/src/core/features/dataprivacy/components/contactdpo/contactdpo.html b/src/core/features/dataprivacy/components/contactdpo/contactdpo.html new file mode 100644 index 00000000000..9192b905123 --- /dev/null +++ b/src/core/features/dataprivacy/components/contactdpo/contactdpo.html @@ -0,0 +1,37 @@ + + + +

{{ 'core.dataprivacy.contactdataprotectionofficer' | translate }}

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

+ {{ 'core.dataprivacy.replyto' | translate }} +

+

{{ email }}

+
+
+ + +
+ {{ 'core.dataprivacy.message' | translate }} +
+
+
+
+
+ + + {{ 'core.dataprivacy.send' | translate }} + + diff --git a/src/core/features/dataprivacy/components/contactdpo/contactdpo.ts b/src/core/features/dataprivacy/components/contactdpo/contactdpo.ts new file mode 100644 index 00000000000..2e531b4445e --- /dev/null +++ b/src/core/features/dataprivacy/components/contactdpo/contactdpo.ts @@ -0,0 +1,94 @@ +// (C) Copyright 2015 Moodle Pty Ltd. +// +// 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 { Component, OnInit } from '@angular/core'; +import { FormGroup, FormBuilder, Validators } from '@angular/forms'; +import { CoreDataPrivacy } from '@features/dataprivacy/services/dataprivacy'; +import { CoreUser } from '@features/user/services/user'; +import { CoreSites } from '@services/sites'; +import { CoreDomUtils, ToastDuration } from '@services/utils/dom'; +import { CoreUtils } from '@services/utils/utils'; + +import { ModalController } from '@singletons'; + +/** + * Component that displays the contact DPO page. + */ +@Component({ + selector: 'core-data-privacy-contact-dpo', + templateUrl: 'contactdpo.html', +}) +export class CoreDataPrivacyContactDPOComponent implements OnInit { + + message = ''; + email = ''; + + // Form variables. + form: FormGroup; + + constructor( + protected fb: FormBuilder, + ) { + this.form = new FormGroup({}); + + // Initialize form variables. + this.form.addControl('message', this.fb.control('', Validators.required)); + } + + /** + * @inheritdoc + */ + async ngOnInit(): Promise { + const modal = await CoreDomUtils.showModalLoading(); + + // Get current user email. + const userId = CoreSites.getCurrentSiteUserId(); + const user = await CoreUtils.ignoreErrors(CoreUser.getProfile(userId)); + + this.email = user?.email || ''; + + modal.dismiss(); + } + + /** + * Sends the message. + */ + async send(event: Event): Promise { + event.preventDefault(); + event.stopPropagation(); + + const modal = await CoreDomUtils.showModalLoading(); + + try { + // Send the message. + const succeed = await CoreDataPrivacy.contactDPO(this.message); + if (succeed) { + CoreDomUtils.showToast('core.dataprivacy.requestsubmitted', true, ToastDuration.LONG); + ModalController.dismiss(true); + } + } catch (error) { + CoreDomUtils.showErrorModalDefault(error, 'Error sending data privacy request'); + } finally { + modal.dismiss(); + } + } + + /** + * Close modal. + */ + close(): void { + ModalController.dismiss(); + } + +} diff --git a/src/core/features/dataprivacy/components/newrequest/newrequest.html b/src/core/features/dataprivacy/components/newrequest/newrequest.html new file mode 100644 index 00000000000..8b2ee40769f --- /dev/null +++ b/src/core/features/dataprivacy/components/newrequest/newrequest.html @@ -0,0 +1,50 @@ + + + +

{{ 'core.dataprivacy.createnewdatarequest' | translate }}

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

+ {{ 'core.dataprivacy.requesttype_help' | translate }} +

+

+ {{ 'core.dataprivacy.requesttype' | translate }} +

+
+
+ + + + {{ 'core.dataprivacy.requesttypeexport' | translate }} + + + {{ 'core.dataprivacy.requesttypedelete' | translate }} + + + + + +
+ {{ 'core.dataprivacy.requestcomments' | translate }} +
+
+
+ +
+
+ + + {{ 'core.dataprivacy.send' | translate }} + + diff --git a/src/core/features/dataprivacy/components/newrequest/newrequest.ts b/src/core/features/dataprivacy/components/newrequest/newrequest.ts new file mode 100644 index 00000000000..7e75e4e6b98 --- /dev/null +++ b/src/core/features/dataprivacy/components/newrequest/newrequest.ts @@ -0,0 +1,104 @@ +// (C) Copyright 2015 Moodle Pty Ltd. +// +// 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 { Component, Input, OnInit } from '@angular/core'; +import { FormBuilder, FormControl, FormGroup, Validators } from '@angular/forms'; +import { + CoreDataPrivacy, + CoreDataPrivacyDataRequestType, + CoreDataPrivacyGetAccessInformationWSResponse, +} from '@features/dataprivacy/services/dataprivacy'; +import { CoreDomUtils, ToastDuration } from '@services/utils/dom'; + +import { ModalController } from '@singletons'; + +/** + * Component that displays the new request page. + */ +@Component({ + selector: 'core-data-privacy-new-request', + templateUrl: 'newrequest.html', +}) +export class CoreDataPrivacyNewRequestComponent implements OnInit { + + @Input() accessInfo?: CoreDataPrivacyGetAccessInformationWSResponse; + + message = ''; + + // Form variables. + form: FormGroup; + typeControl: FormControl; + + constructor( + protected fb: FormBuilder, + ) { + this.form = new FormGroup({}); + + // Initialize form variables. + this.typeControl = this.fb.control( + CoreDataPrivacyDataRequestType.DATAREQUEST_TYPE_EXPORT, + { validators: Validators.required, nonNullable: true }, + ); + this.form.addControl('type', this.typeControl); + this.form.addControl('message', this.fb.control('')); + } + + /** + * @inheritdoc + */ + async ngOnInit(): Promise { + // It should not happen. If there's no access info, close the modal. + if (!this.accessInfo) { + ModalController.dismiss(); + + return; + } + + // Just in case only deleting is allowed, change the default type. + if (!this.accessInfo.cancreatedatadownloadrequest && this.accessInfo.cancreatedatadeletionrequest){ + this.typeControl.setValue(CoreDataPrivacyDataRequestType.DATAREQUEST_TYPE_DELETE); + } + } + + /** + * Sends the request. + */ + async send(event: Event): Promise { + event.preventDefault(); + event.stopPropagation(); + + const modal = await CoreDomUtils.showModalLoading(); + + try { + // Send the message. + const requestId = await CoreDataPrivacy.createDataRequest(this.typeControl.value, this.message); + if (requestId) { + CoreDomUtils.showToast('core.dataprivacy.requestsubmitted', true, ToastDuration.LONG); + ModalController.dismiss(true); + } + } catch (error) { + CoreDomUtils.showErrorModalDefault(error, 'Error sending data privacy request'); + } finally { + modal.dismiss(); + } + } + + /** + * Close modal. + */ + close(): void { + ModalController.dismiss(); + } + +} diff --git a/src/core/features/dataprivacy/dataprivacy-lazy.module.ts b/src/core/features/dataprivacy/dataprivacy-lazy.module.ts new file mode 100644 index 00000000000..b0431a131b3 --- /dev/null +++ b/src/core/features/dataprivacy/dataprivacy-lazy.module.ts @@ -0,0 +1,38 @@ +// (C) Copyright 2015 Moodle Pty Ltd. +// +// 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 { NgModule } from '@angular/core'; +import { RouterModule, Routes } from '@angular/router'; + +import { CoreSharedModule } from '@/core/shared.module'; +import { CoreDataPrivacyMainPage } from './pages/main/main'; + +const routes: Routes = [ + { + path: '', + pathMatch: 'full', + component: CoreDataPrivacyMainPage, + }, +]; + +@NgModule({ + imports: [ + RouterModule.forChild(routes), + CoreSharedModule, + ], + declarations: [ + CoreDataPrivacyMainPage, + ], +}) +export class CoreDataPrivacyLazyModule {} diff --git a/src/core/features/dataprivacy/dataprivacy.module.ts b/src/core/features/dataprivacy/dataprivacy.module.ts index 886e212a4cb..6891562d470 100644 --- a/src/core/features/dataprivacy/dataprivacy.module.ts +++ b/src/core/features/dataprivacy/dataprivacy.module.ts @@ -15,9 +15,23 @@ import { APP_INITIALIZER, NgModule } from '@angular/core'; import { CoreUserDelegate } from '@features/user/services/user-delegate'; import { CoreDataPrivacyUserHandler } from './services/handlers/user'; +import { Routes } from '@angular/router'; +import { CoreMainMenuTabRoutingModule } from '@features/mainmenu/mainmenu-tab-routing.module'; +import { CoreDataPrivacyComponentsModule } from './components/components.module'; +import { CORE_DATAPRIVACY_PAGE_NAME } from './constants'; +const routes: Routes = [ + { + path: CORE_DATAPRIVACY_PAGE_NAME, + loadChildren: () => import('./dataprivacy-lazy.module').then(m => m.CoreDataPrivacyLazyModule), + }, +]; @NgModule({ + imports: [ + CoreMainMenuTabRoutingModule.forChild(routes), + CoreDataPrivacyComponentsModule, + ], providers: [ { provide: APP_INITIALIZER, diff --git a/src/core/features/dataprivacy/lang.json b/src/core/features/dataprivacy/lang.json index 6e1a74f551e..13f0290bd50 100644 --- a/src/core/features/dataprivacy/lang.json +++ b/src/core/features/dataprivacy/lang.json @@ -1,3 +1,36 @@ { - "pluginname": "Data privacy" + "contactdataprotectionofficer": "Contact the privacy officer", + "cancelrequest": "Cancel request", + "cancelrequestconfirmation": "Do you really want cancel this data request?", + "createnewdatarequest": "Create a new data request", + "datarequests": "Data requests", + "daterequested": "Date requested", + "deletemyaccount": "Delete my account", + "message": "Message", + "newrequest": "New request", + "nodatarequests": "There are no data requests", + "pluginname": "Data privacy", + "replyto": "Reply to", + "requestactions": "Actions", + "requestby": "Requested by", + "requestcomments": "Comments", + "requeststatus": "Status", + "requestsubmitted": "Your request has been submitted to the privacy officer", + "requesttype_help": "Select the reason for contacting the privacy officer. Be aware that deletion of all personal data will result in you no longer being able to log in to the site.", + "requesttype": "Type", + "requesttypedelete": "Delete all of my personal data", + "requesttypeexport": "Export all of my personal data", + "requesttypeothers": "General enquiry", + "send": "Send", + "statusapproved": "Approved", + "statusawaitingapproval": "Awaiting approval", + "statuscancelled": "Cancelled", + "statuscomplete": "Complete", + "statusdeleted": "Deleted", + "statusexpired": "Expired", + "statuspending": "Pending", + "statuspreprocessing": "Pre-processing", + "statusprocessing": "Processing", + "statusready": "Download ready", + "statusrejected": "Rejected" } diff --git a/src/core/features/dataprivacy/pages/main/main.html b/src/core/features/dataprivacy/pages/main/main.html new file mode 100644 index 00000000000..5e42746b8e7 --- /dev/null +++ b/src/core/features/dataprivacy/pages/main/main.html @@ -0,0 +1,160 @@ + + + + + + +

{{ 'core.dataprivacy.pluginname' | translate }}

+
+
+
+ + + + + + + +

{{ 'core.dataprivacy.datarequests' | translate }}

+
+
+ + + + +

+ +

+ + +

{{request.timecreated * 1000 | coreFormatDate }}

+
+ + + +
+
+
+ + +

{{ 'core.dataprivacy.requestby' | translate }}

+

{{ request.requestedbyuser.fullname }}

+
+
+ + +

{{ 'core.dataprivacy.message' | translate }}

+

+
+
+ + + + {{ 'core.dataprivacy.cancelrequest' | translate }} + + + +
+
+ + + + + + + + + + + + + + + + + + + + + + +
{{ 'core.dataprivacy.requesttype' | translate }}{{ 'core.dataprivacy.daterequested' | translate }}{{ 'core.dataprivacy.requestby' | translate }}{{ 'core.dataprivacy.requeststatus' | translate }}{{ 'core.dataprivacy.message' | translate }}{{ 'core.dataprivacy.requestactions' | translate }}
+

+
+

{{request.timecreated * 1000 | coreFormatDate }}

+
+

{{ request.requestedbyuser.fullname }}

+
+ + +

+
+ + {{ 'core.dataprivacy.cancelrequest' | translate }} + +
+ + + +
+
+ + + {{ 'core.dataprivacy.contactdataprotectionofficer' | translate }} + + + + {{ 'core.dataprivacy.newrequest' | translate }} + +
+
+ +
+
+ + + @switch (request.status) { + @case (0) { + {{'core.dataprivacy.statuspending' | translate }} + } @case (1) { + {{'core.dataprivacy.statuspreprocessing' | translate }} + } @case (2) { + {{'core.dataprivacy.statusawaitingapproval' | translate }} + } @case (3) { + {{'core.dataprivacy.statusapproved' | translate }} + } @case (4) { + {{'core.dataprivacy.statusprocessing' | translate }} + } @case (5) { + {{'core.dataprivacy.statuscomplete' | translate }} + } @case (6) { + {{'core.dataprivacy.statuscancelled' | translate }} + } @case (7) { + {{'core.dataprivacy.statusrejected' | translate }} + } @case (8) { + {{'core.dataprivacy.statusready' | translate }} + } @case (9) { + {{'core.dataprivacy.statusexpired' | translate }} + } @case (10) { + {{'core.dataprivacy.statusdeleted' | translate }} + } @default { + {{request.statuslabel}} + } + } + + + + @switch (request.type) { + @case (1) { + {{ 'core.dataprivacy.requesttypeexport' | translate }} + } @case (2) { + {{ 'core.dataprivacy.requesttypedelete' | translate }} + } @case (3) { + {{ 'core.dataprivacy.requesttypeothers' | translate }} + } @default { + {{request.typename}} + } + } + diff --git a/src/core/features/dataprivacy/pages/main/main.scss b/src/core/features/dataprivacy/pages/main/main.scss new file mode 100644 index 00000000000..b5e585f203c --- /dev/null +++ b/src/core/features/dataprivacy/pages/main/main.scss @@ -0,0 +1,10 @@ + +table { + th { + width: 20%; + } + + th.shrink { + width: 1%; + } +} diff --git a/src/core/features/dataprivacy/pages/main/main.ts b/src/core/features/dataprivacy/pages/main/main.ts new file mode 100644 index 00000000000..dfbc8a23f83 --- /dev/null +++ b/src/core/features/dataprivacy/pages/main/main.ts @@ -0,0 +1,167 @@ +// (C) Copyright 2015 Moodle Pty Ltd. +// +// 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 { Component, OnInit } from '@angular/core'; +import { CoreDataPrivacyContactDPOComponent } from '@features/dataprivacy/components/contactdpo/contactdpo'; +import { CoreDataPrivacyNewRequestComponent } from '@features/dataprivacy/components/newrequest/newrequest'; +import { + CoreDataPrivacy, + CoreDataPrivacyGetAccessInformationWSResponse, + CoreDataPrivacyRequest, +} from '@features/dataprivacy/services/dataprivacy'; +import { CoreScreen } from '@services/screen'; +import { CoreDomUtils } from '@services/utils/dom'; +import { CoreUtils } from '@services/utils/utils'; +import { Translate } from '@singletons'; +import { Subscription } from 'rxjs'; + +/** + * Page to display the main data privacy page. + */ +@Component({ + selector: 'page-core-data-privacy-main', + templateUrl: 'main.html', + styleUrl: 'main.scss', +}) +export class CoreDataPrivacyMainPage implements OnInit { + + accessInfo?: CoreDataPrivacyGetAccessInformationWSResponse; + requests: CoreDataPrivacyRequestToDisplay[] = []; + loaded = false; + isTablet = false; + layoutSubscription?: Subscription; + + /** + * @inheritdoc + */ + async ngOnInit(): Promise { + this.fetchContent(); + + this.isTablet = CoreScreen.isTablet; + + this.layoutSubscription = CoreScreen.layoutObservable.subscribe(() => { + this.isTablet = CoreScreen.isTablet; + }); + } + + /** + * Fetch page content. + */ + async fetchContent(): Promise { + try { + this.accessInfo = await CoreDataPrivacy.getAccessInformation(); + + this.requests = await CoreDataPrivacy.getDataRequests(); + + this.requests.forEach((request) => { + request.canCancel = CoreDataPrivacy.canCancelRequest(request); + }); + } catch (error) { + CoreDomUtils.showErrorModalDefault(error, 'Error fetching data privacy information', true); + } finally { + this.loaded = true; + } + } + + /** + * Refresh the page content. + * + * @param refresher Refresher. + */ + async refreshContent(refresher?: HTMLIonRefresherElement): Promise { + await CoreUtils.ignoreErrors( + CoreDataPrivacy.invalidateAll(), + ); + + await CoreUtils.ignoreErrors(this.fetchContent()); + + refresher?.complete(); + } + + /** + * Open the contact DPO modal. + */ + async contactDPO(): Promise { + // Create and show the modal. + const succeed = await CoreDomUtils.openModal({ + component: CoreDataPrivacyContactDPOComponent, + }); + + if (succeed) { + const modal = await CoreDomUtils.showModalLoading(); + try { + await this.refreshContent(); + } finally { + modal.dismiss(); + } + } + } + + /** + * Open the new request modal. + */ + async newRequest(): Promise { + // Create and show the modal. + const succeed = await CoreDomUtils.openModal({ + component: CoreDataPrivacyNewRequestComponent, + componentProps: { + accessInfo: this.accessInfo, + }, + }); + + if (succeed) { + const modal = await CoreDomUtils.showModalLoading(); + try { + await this.refreshContent(); + } finally { + modal.dismiss(); + } + } + } + + /** + * Cancel a request. + * + * @param requestId Request ID. + */ + async cancelRequest(requestId: number): Promise { + + try { + await CoreDomUtils.showConfirm( + Translate.instant('core.dataprivacy.cancelrequestconfirmation'), + Translate.instant('core.dataprivacy.cancelrequest'), + Translate.instant('core.dataprivacy.cancelrequest'), + ); + } catch { + return; + } + + const modal = await CoreDomUtils.showModalLoading(); + + try { + await CoreDataPrivacy.cancelDataRequest(requestId); + + await this.refreshContent(); + } catch (error) { + CoreDomUtils.showErrorModalDefault(error, 'Error cancelling data privacy request'); + } finally { + modal.dismiss(); + } + } + +} + +type CoreDataPrivacyRequestToDisplay = CoreDataPrivacyRequest & { + canCancel?: boolean; +}; diff --git a/src/core/features/dataprivacy/services/dataprivacy.ts b/src/core/features/dataprivacy/services/dataprivacy.ts index 00e1583922e..21feed9c64e 100644 --- a/src/core/features/dataprivacy/services/dataprivacy.ts +++ b/src/core/features/dataprivacy/services/dataprivacy.ts @@ -170,7 +170,7 @@ export class CoreDataPrivacyService { async createDataRequest(type: CoreDataPrivacyDataRequestType, comments: string, siteId?: string): Promise { const site = await CoreSites.getSite(siteId); - const params: CoreDataPrivacyCreateDataequestWSParams = { + const params: CoreDataPrivacyCreateDataRequestWSParams = { type, comments, }; @@ -292,7 +292,7 @@ type CoreDataPrivacyContactDPOWSResponse = { /** * Params of tool_dataprivacy_create_data_request WS. */ -type CoreDataPrivacyCreateDataequestWSParams = { +type CoreDataPrivacyCreateDataRequestWSParams = { type: CoreDataPrivacyDataRequestType; // The type of data request to create. 1 for export, 2 for data deletion. comments?: string; // Comments for the data request. foruserid?: number; // The id of the user to create the data request for. Empty for current user. diff --git a/src/core/features/editor/editor.module.ts b/src/core/features/editor/editor.module.ts index 49cf8588779..d179f925f95 100644 --- a/src/core/features/editor/editor.module.ts +++ b/src/core/features/editor/editor.module.ts @@ -24,8 +24,6 @@ export const CORE_EDITOR_SERVICES: Type[] = [ ]; @NgModule({ - declarations: [ - ], imports: [ CoreEditorComponentsModule, ], From dddc95bfc63b1b70bb47372dc6b6319979146324 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Pau=20Ferrer=20Oca=C3=B1a?= Date: Thu, 15 Feb 2024 12:41:35 +0100 Subject: [PATCH 3/5] MOBILE-4329 chore: Add generic table styles --- .../features/grades/pages/course/course.html | 2 +- .../features/grades/pages/course/course.scss | 73 ++------------ ...displayed-when-adding-a-new-account_13.png | Bin 33494 -> 33415 bytes ...-displayed-when-adding-a-new-account_9.png | Bin 28567 -> 28460 bytes .../report-detail/report-detail.html | 4 +- .../report-detail/report-detail.scss | 28 ------ ...nt-navigate-in-grades-tab-on-tablet_15.png | Bin 36453 -> 36488 bytes src/theme/theme.base.scss | 90 +++++++++++++++++- src/theme/theme.dark.scss | 6 ++ src/theme/theme.light.scss | 7 ++ 10 files changed, 112 insertions(+), 98 deletions(-) diff --git a/src/core/features/grades/pages/course/course.html b/src/core/features/grades/pages/course/course.html index 1079d5ff05d..ea8aa5cbd93 100644 --- a/src/core/features/grades/pages/course/course.html +++ b/src/core/features/grades/pages/course/course.html @@ -15,7 +15,7 @@

{{ title }}

- +
1foSAdYzUIrTFFrhL{o{^b+z}dTiUhb+xF{5gKv_vn3xz`4L!qt=U}M5h zEYJgm;14usEya7Nl75=MC=>%qSx!dVBW-=!U5{+^1Z#V%mAff2(BB^$`^u|Z^4#G`MdIU+M!Mb_}8yH-NLv^_A0E# zYw+hanFk-Pmg!N~i(Xq;&)ioKG zYXZtN|2-*MTkBEG{2Ttef{Cx>m?)`MzDlbf7MPhLFJr|ZgWAQ7WQf%#|(l9G~@p**6_Xlg7mu?9=JhjzY<&#pUF zRWp)Uw@v-3{W{49n=t6iCM-;8J@QFLSy{Q*+@d!nAooGCWJSvT`#l=kS_di<{QLt! z0nNri)$r=kRUSJ}X+&MH^VBmH)<%j`#b}rc^UQmaOlO*3c8>}Q3a(64aj2-M5R;Gu zw71JGiJF+0*i6-uU}9ogMJp3yO#SHlR?(fpL^9AlMP@*da`RB7KfBbpiE49mb9;YZ zUVpse*e%Cye0*H5#aDuz{hdYV!oNTITQgfNmoY6DCq>F@F3!%fnUXKFa&mGEKmOgK z)_hRov~=H`Ur0cp<79u$@$AUa=Xfbuuh~ZgHe_egz9rl2TMWwoK{B`L#o4h{Y*GG) zy|*`=wfo=maNo8a5VTTX;eU(I$jC?>A$N+fFYFxl^6jkKDV- zmQ8+Zqov=D|1GCh_KP_GdD4@_#Va77!#%Wj7@dFffvRdpf4UeNs`znDC-SmigRpct zmRDC_p<@wdsb@+`FU{;1Jk0w=p3H!Kiz~jc_+la(;Q6coL0?_iyu9_rq9zr1*9 zGxixRPc8kPo10)%RMhOkLXhXbKVN%#9_VvRO42QKMzTX{VQ_M&5uTJpK0iO7Q0jMi?v8H#(t;kOHB=eZT*9p6<5SLd}n3|dfyuD-jv@`0)upN%x%mOI|MOZYo5CrlS zd3pKIm6dWWzUSMee&=|$6P2Fx-j7BvhHLB!v|nvZ)-d0_OLpVN4Pp$m>gsB2eEjxL z`W0EZxgqqvM`$KKJ0bT^@hG@`=7}eoybnLW7-CJ6d`We~$ON=#Zxl4@}yA5aa;`uTMzZXaw$;VcAFO;k%*w)9&&=q6pI^dNU$s-5L%oIO-_%M5MeyUetL2%{Dm4W7$-l#7S7iBi%{FPS2 zxI-UR+x*ec8LmYT)6hh%tUSlKdVb!SA?|q%HZeRhGAJX1?zhiBRg9}w8AU{Hz?KF^ zM-xmDEFRy{|N+7GB4Bxuet5oUAO=*RNk8%w#Vw&fylJad2=T%YpdlcrPD0P+_T_^7id8 zQZ0F$Muhw{=`aMNNZ_bv*>$wRaUl* zZF6*__;H!fvD4W2xar6zeM;UZsQV8dkiZflJee36vc7NDsK^PNo~)HJ#((Ga*nWaf z$(v<7Io04!#HOBsfr425IPxPVPt(xgqfgg;*);Kewok>y1K+1N3MNKNw`@(X3Y?t% z`*BrBNXYa@hD0C(_B~C_xY>;juD#Xa2e0qvvYSJoad>!mU_bn*LPCZc;^e8K5;gnh z4=bl(twx;o;%SYh6HyUz?hm3V!{Xc&S|1*i+uY*_pJvyIZ@v z`SRklwbpSV`2BmP#3cwNGURi?!5B;Bhrhkmk>G!`uA) zTF7@cpY8UDF1(6~Ax9nu*VDkfPMiI@vFFlt)AN)4Zu3ZTuK(WH`*2gjv8BAc97A1Q zea__aB)PlnI);p1l~p3LQEB3y<^5yfD}S|LV)`A7Tkik<13}Tf@&5h$U)OZq)S4X* zeeKev#17XfI-~q#u+xs-Z1?ZR2J0@j+_o8ORIT-v(j9B|E+xMEqL7$(PTsUP_;&Y_ z>-n?g#ZfV}DhWv)_CzKY7L5A(dP)%|7Sxx40b)pOvd^F2ilLKurJ18}yXSJ}8~y8^ zr4(M%!29ZOS@9m%*y*U*)H^OFeJh!@XKrS?O@JZR)Z< zM)K&f~X>(1-*^Md3r}=O=hJ_PcFN$f&Cmxo=Lr*xpfAQIT_U;y3m^Ht%}IpLo9cGZzn^ zfB>rFMf=NqRoON2$d0bAt}j7YMB4o!5`C^YPj}i(#;r$7vfsbIcWl5Ehg8bw!heua zAWMFMQs)SjB+(Te6aNcDFMN^l79Bc?KulGYz~)q4(9zM6m;JvL-iCT^b)8$Q%^Xuf zX;^xvGxj^49xRa&pn9(!Wjx z)wYw59U57B9JW(n^D zIcQ@NzE$vvx~>K@%7)Iu4pB<_2xAgZ1=C4*efjZ&C^R%Qy0F5k<+s;bu|dz>gA@|Y zb59SCSvc8Rhq)`)NJ)!aed%-!43ITlNz5G5`Iq)i*2aeBQ}L&Pf}ysd55~rH-D2a) zETX)8d|&6<6#1OmdB-Luo^nZ~1wIVVXR+}xP#rSis&9*)IJbeRkv^K{Sq#dVg0@$m36$3EW6{$gF) z6w0An^5kfHPVe&*G)^wAY$&b+0~+fSRYjc}g7M8_`rIwRbjwL0FCr`2_ z=3!NZ6?ujl8rW@$qNS)OR=e8=#S;?-NAnfxpY1Qv8XIgNqU0#4d8rlxS7YiJGe@nI zR|*OWYF++b(-7e+6oe##)C&|UDJe;MX|a;6z`jn=+xq3{L9zRKY=2;hR$|xMI~&L2 zU30@ar>nA|_+N!)d~(V+p{nl3WU~@X+dq6bgt_7V^6tk?<0h|c-BM%7-vB_qK+otn z`vtA{od6ybsMks?1TnIl1; z8FDqEsRVE*YwQ)ZwaMle7Wix@?)qFDFAq1LB_}4D?ynAatG$6%5vo>hbuBD1-+FO! zY^>HGkB5y-{n(E>wc5k%Yg>`~{DS@LIgw;wd^~Br%R%9z(FNPlWP@v7I$Moa7XKEy zdwO>I#kLqAli4@!V75Okb9z1xFk@x9q2~VajPEG{v~mmIVs&pH)m1+LknTnT}sD=ppPHiENaJ0_M!b1VM z>({UAm`PN@Zi%Z-i;9YF|N9q|nMuF5xA)om(9W>MmlmqCoi?YAimED~*WU9e8j))O z0Rc!CBzd}Cf!U|z=h8yg5)q=!9-_i(z2_iFBG9XA@-oD6p)(s=0umAuN-;OiP(oUy zZT-^Qi=WJ6(z&znEiN%JcS?aZo{^7_q`A4-DnglQL_waG=-JM;L)&zNI|+q50UcdB zvEwmr`KEZ(4)keb+vlu}H7>W|Ri0Q{Vxhl8e;%>A`SL;g#C}Z0cY99e#QVtcDzRMS zG^oUG3nMB$xZ}322Q4KA0G^|NKcoV>zbj5mOpH}n#&-7|#mC1Z8$AobfgR z_N)v_y2frgp{KHno^Dam-u$t^4hJ){tobPf|E-o=;=XE4&8yx%hK7c-i;KZ2DU@kq z?rOO)fSA6{%+O1nZOf)_3_}$z5MyV@g^Jo1fR0r-Y$On@?OK@qvD%6h8lB%w-V2b< z*?Z)fNaUDEDyyn8Q+lnfth-(_4vdU+LQm*;xM`HQ`?%UB01mLkuujX;Ms9D<#>NI( z!B1({4-E~Y04vS55lOW}d?7zn`P11+6ju4*!GoO%>r$OlLo0UCeM)7Up?ZP~0YC2M zBQFAr=3T1(G>I^}=4nRkD>SsUa|_egBa<7W$4mP=QZEn574YeCd3a()*M@DsNbtTp z6WxP`Z*KN$5Yqmq@R?b0S-yA?0lf?v1%+8}3LmeaV5l~GN153-hm*Y*WaQ-Ydw++Z zLx4Wv%czN8u}TUdAt5#%UK_wfO>OPq{QO%!Cx7#x(eKz@>Pd`WXl!hBSQ%hEgV^lq z?bRNsgT4^j?AdAenUJO?2^52n5QUigrX1jkGV4)pvg_C9Hm4hqh$f^FMvl4hbhDv5 zn3$F}dTdPZnS})tGc!6o^K(tjH`qmz8#i#cxVWb3oUx=Xj+pP=yO*FWBqc>}VPWCm z;sQB_&EfpSRV7`tYQo_HE~V+SXTizFUO4$@9mQKaj;^jcbo6gkLVJ5vXv95;GhZIu zfV{c$+k2}(Mf;Po>Sa*OOX)#%g4g=_q#O2w+qQAOiyg+GMq@ERTe*ga3W|WASyR^ov9>&!e z`7L9K!O~JGQJvop+J}bF1JKNfg#}UY$Lx~6J3khRH0MOh<>U7)G9gHqK(Qc+&CX7} zImH*?jgp!gk_}94Z3(o0pV*I<7$LB>x>^w4vFzFRH&*o9kV3{jo1#B``V^vY4iNuU zJaX-Z%3ES$kC)UOf%#bZ-6RGlk;gxk`sPjGV2+|0KrW;M94Rr1gf<2e!rsOt1%#W< z4W}Q_OQqU3M?lvMaKsdD$>*}NuL%73o0mC1QDr?aG=yY8axMc5KrozopHY72`xK(? zn^DkIb7bCffo2dgMSlCn+8Ummep*HeAemCYitM9WdZAO@>_^qq&*nYk&;>Rg%}08i zZq!&ua{+KiFev2C;KoLAN^0sHD1;t!AruG{HYaNOm{%?nxKeK3aZ?Dh9&(o26EVraz*&s6EeJv5f?EUcBbJTm5<)~52Vsm&XF z-OwHotA74i=UyhS=@rR~qlG_&Vd3FavtI(xJ(knm6H1|yM*I8wvlf{!V%KKI&pg{7 z4$JLuK04BdTj+|5i`!bLQc*EDc62>aqiVSuz?081V0dpQ9wGxFlOrP-d)!NvIx1)ymvy~m`n5jCkaUWT2})@ zpH?WXfQL4M@?&SH`hJQ9!b!eYVCP7FpI=M%O5vkcoDv4J?8}w4kxNYes*#Rhwg2cx z6j^f8`^rk1ebsy>lC07^JlU5o#pUx1tJMDcf{&WqiP?tivhpD`xH8#k;(56@1Cx~S zo|Xx^xUvikzc>miSZzhV>I0ew?f*TR^vnPFII>aUcTxX0xz+zAzl4T@o?~uvGX~J~ zhyg1Q8Dehh9v>ZtApmdcl|7Yr4wJz^9r>=Q>s6hsu@>>n-zV!-eLMJUe^4r{whle3 zzF4p9iub{~X0xDxKuBI5+eekRfzWc_wYHIaw{GkvSiN<2U6Zd25JXr&vt+%Ox9P!N zvgz_@k zJM$e!K-9bwyUP^)LF3l;<}00BTpVrPOIuGyV^g=szx8NpX}vP1_q`Hw4-NJCg*5@z zsayAk?>KefUhgN1sI-fMFJIybjhQfO<4*4<`YX?r+Hb?VW%% zF*$iC1f8&`=+nPHbCJ}Fl4gxJ9WK-n_S(DkDl&2~TNbPF{9tlrydtkWy|VJ|C&RjH zqopQcK|$z1Q=mh!SvrAlKsdg+xj7`!G;B5F`T6-Roj_Z~1kAAe)^B-)*s>ns1UBS~ zbox%Zu;Ue^Y_O`n3r6@+*w%oeA`SqJA$_Sr2+acB9x=w;TUz&%WuOF5Z}r_jpQYD4 zndv7)J+ZL~zV!a*n$|)Y;8Z|%;^l>$TJ7a5+HY@fzNF?$l9CR#+4y1W*{xC12NzAK zrKP2@T{B*8U-RD;Qpk&)JrZETy9Im;=(ZItA1qwRxvp(k0T zM5yrShR|ZE4QT@dOel1NdG18LX(vp8lr^*rUPbWqwN6IPNRM4!NL!2;xi~nrH|knG zT}Yyjd+Ul78j9($wb9Y787k(!HP_HLNu2o_yUvi%uf;g!a#dwzbyYGaM^*J+*79$t z_aSx8%Okbi3=GmoP#CWQkpitDp0BU(Ju9n1jYp4IZGJcEBij$90r^+p|FB_uS^=(M z6lk*}y?kIxOAAB%_h4Yx5Y8h-)V1(+LITU;pFg-27Jb*qIrXw^ICyzAwhs>}`qM<1 zp(VkE+DQtGV93;zp$u&G_FP+FX=$kgKn@x9MBFe!+G{|Wg#hL1)!`0ZOg3PaR^)9z zed0tu0BM*Qp-M>E)UdS*w8t9UOM%N}<}_(G-1wG$G5$fTfcM3!jcMOW^gUBe&Eh3N zyJO9xqkp9drEHCNAJ#hjE#KX*CrAyh`K`}5<@cI7A^AZFeULj|#WEM!qLX~|zEM5R zZ4A{6R-d|q$BaBYCbj8F+>LjwOB`lrFA=(F{gf!UjMRku;_w@v40}Az_X4313d>%S z16piS`1kIf+}5rvieQ~gKQ3);ZR`+v`PN_xOI+ufBPm899(9ddWUUPxlH|=ZCpiq* zfgqU#*Wr=lQ45|kBqS!{cphJEEhmy9X*Q_I{vLBvf||z3ehvuSxQq-!Z8ZbHt3f$A z%n)LHrmYx@%gfAMTm&c$Jw0q%T3RS!vcOqDg%);QC2OB=!Ll;;*^zfy89;*;i<0jt z#+x^9v?takYk1Di&yntG)YuzAJP<%Ae>hhrNKcZIl7QZj57)c=4FsxkghLXAXbWe@ z|B$ebkVAgh3iJ+iyuorzUx8|SVsC$`62o;~q0DmalZQJ_$v3vy+_%o37pIA~A8y;V z&nSIzr!9YlOC#n<#nZ%#R?OL(ox}XKl7fwqO^8Uh)Tq?80Ya)GuLGpzFf2zrw0`)p0BL{4ag>ckZf-u`^LkAr_WzV)Tt-L$Kye}dnl== zV>_MRa5ykt@i2Pw@9N5zsj2m?(faz=kJK7_>b;2$HncBUC&nk{$0CN}8M!(2IT4gMW?n+&(Tqr(&yDZONK1W6Vl z#UVG{;^dTzrISclf?m4J@6y+>+2;mG0j(4!J^{dVfa<}~qkVIH;+KnBamha$ojd+( zuZaA+pQE9aa(`O!B_<|*9UD7}u)QXbdk{nTd~3!33m>zi7#D5nr8f?e4}VL%%&avU zPTsH|^@)Lx?Aw2iX=!`c#r~`ikFH2I_}$vC;lY5oY{ml&ds~OpJ)gPP-gwoPKj@yB zo0~3n#i9JWx|BdQP#bTH2B3J`L`y61=T9w{t>3ivP5b14ED#I=MB}dpNbL6PmnO!> zF{g)HZQb3t`RmhcEG+p6>Z+b0icaNQmp>1)o!`h>F-Q|^0_+#Sy<-=Jg69zf?wUpzB z^tXVrNMx33$r|L-`uF6XJtK4gj?4YD2=39;)I=l^&^;o6S$QaeZ)a^C2{^24$;q(6 zjQ|l1^f)^q6j3Ok9^0U#MW&_Ez`sIsFU?6_gzq@I1V9PUaexXdz|Aw1goMNr=P_U> zrn`5w>m)fj@yp7}fETc7nlDlYGLV>*Gzdh*Y>-tE=;r3OAcY^XTI6c|;LLFyFG5=4S%3hb82IddX9GqQ zp{snS` z9u^8w=InkqM%;XmgeW}EAut8)f8$e7Bztw}l7h~Awk&n|6%o1MtDskS3W`IcOZ2b) z!Dga_b*KO71)!C@^tkGFNfo%nAtftg$_QNYKtT>iv)(=$=i{nE$A-AJ(AjUZ)8SDu z9g15#9lt2pvMVde?3)^{TrbD1wBPbi?3oD(2=L9Bw=y@4ai1{`o;7NjKP{HZP7JyF zQH3g2vyIv>zQFzWiIAYp3ECaw$0%A_oO%z>d8tSW!Fow6I;MckD7Xq-bYWBf@3yl3 zwRKcUzGH=T?^sX14eIY?)yXn2378T6XGsXxva`hPqs4%2m!OSf!2Zt-z(w=F>>bt5 zkF-PXN&Cu>ber=lnntVd=e4wX-y(qMhVw%+ZS5{iZLNv?4eGRk>$qs}6kbby#229j zFW~X|v41CihLA^>1Y0Qz^TcalX!wPL864Q&v)m;usPAo4m8P`In1=(o<+$M;69m(+ zittq#;OFYJM`kyuG6r(_pIhHS@K-?)K=ltln6i7WK@ko3K`K^pc z6)Y~G(gX6iWwQ47Z?@~&2vDRCZ(Ew153iTOQB-04*caJ@v_J~ocVBi3cfFh6;e0~=`&nzv4>IneFempQ_+f$6_Ai^R=sE(zc z|>PMgS0^n8WfMe=_-7vMV2n9`5uWlNtj$om93Q7<*0YL}6;|}m1PeI$< zw{wSV?%?Kz@G&F+eSpybKSK8R2?i!6F9R;tY~35csidW)Wfd1kgP4Y7>v&exd#Qr9 zU=|57Z3|@tlLATuNIRnjx4A@JV;Kz%pc!d+&AZ8vg!S)F-@aW1(1Qru-u{#i1lYkE zdlSPZuPWt9Y zz);gP0nI>8xAnt^56Q^LP}1>LGH{LWzBAXF8UhW!V3c2mSi{f|9|c6DLX|7(b$U7h z7FL+(9>IfzY$>7j)N1P_cLa%Ma>rqr>UA1ouL>Y-Km~4jSb4cq`Q>j_5 z;Q(in#m|`;ACJz(RZQi5@WYH6ZoBK?O0XR?so&$-%z(M&6%tZ}vyXfGHbPzU7z5gr zv06v7$mc=f;rZND=>wXc6r!Z0q=UFqn!DeQ5CL9=1YXVEULmy%jgAp#3szOQCS2fysN zy^VtrMfqXmL&*r^;g~g!LuHLT&rFHRA2{Y%GgG@z<7T6|=k{S^) zT-AQS>6qlreCGLw<{&h9q~WZ3L(K6eyFxLaz^|S7JjdDDE!U(6D)&19(q<^D$o)Fw zHf{``pMMH?u1VqwI(p{VLUnn0D;`f{me0%i_6W;smWi-!Hj~xGn%`+qz^6I_0mB+w zBvKhp=LMA8a=%G?bUOb`$E(9weqGSBwki5t7P zp6Qc_AnP-mLbdiB8?Z|4n$Ya@c!g#e>0kv3l!voRXjZdxb=+Hi3=dy7s&|orqu$-! zeVv#X0>X2lh!(@mn^!?sk&&10csLAMY3LcBKpy#^td!Fk%Ns2%zNcdhjgpq+7C$_0 z*iITOjGnhJ3aK{dZ=MG3YC)j_Uq4bo%G2YD{F22BOg0OshF7W;0>1P zQj>^~NIU=?0EINl@UkP`4TQ9!w=Od?GD?!h=n{d|R!tQge%I^0zZwE1; zsGOS{S-IYa`L4N9d7ZcgHBGnut_6Y(^Wa}t-P;=gG&SDZsAWh-epu9o!k%4RC7?h^ zkALUkLzMKNbTMJiRnAQdO9ZrbjN`~+5%@zj2X5f#&tx>EfDg9Xg(u;KuLMXwHz-<} ziEq$G{w(LOtf=bv%!qDk^%Ng9@bhPD-M_h7nj0awbu`nBVmW>@6F;aElal5}&$DaO zGYCn|%ZccH)6X^ zfD>|$adyph#&iJX2cRF*zSsMDeZ45rOv@|WGxs(NjH^-iobIy&Fk(zndYzOJ@bf4C z-uAu>&y3x^S1En6iAJ~?n;IjWA>6gk6;)pcWY9qak8NKhOA~g*G-?!g*t{qFvE}ZK zVlFP7>PtQkA<;TlIWG%LC+A&;#P7WMEmETO^}miY0Nl)veU};>s-b>wwtyrJZeuzJ z7l$w7E&YJeP=bOZ*pvd-CMJklOcV_x?mcti1hfJt5cn1Sw1CEp$+hsEwuPD5P}T;W z>P1~$ohsdE4uU0+TO-DEI|9jYo9%7K zamyS>UneJ*mQOWQi6}3!PDd)Qu-sLSoQH)`5_8J#-9OOczbf|bA@eW z$iL+$6A$7Y*W5(86&29^`EMA5-P7ey6WrKOPrGeoy1 z`@4DrtM#azP2NU)8Dw^t`)NMa(`>RPDW~u)t3jQDGv$+ z@W}3R9A)Kg2lt{!ibkh#$(ga}SeIcL&C{QsY;vrukK>#Y(#X|mzbbghiiRTZ_0usQ zd#tWY5kq*Oq;y}Cn}eNO!D58AwxNza`GvK0(XY9+1p*37wsxaP-K5*Mx#SHL6spE( zY1jF(GNnF!GBDd|Jzkk#!jX_Lno?5IPO9_#N6vDMkA`+a=D`EJ9UNtczXNooeeXh( zKdK;P4^Rh9{fG4*&8m4=$h=OxQchP@deaV=UcGwdxYAV?cAA?T4e)<)iQ-BBrx%}j zYw{n3fttpxC~xL)>FZ(sM|*GcZ=_UA`lrz?us)E(?}5hf^v|!`*fe)=DY%UkT-J3O zg*~qrzZJP&^Ydq%)4w_AH>JR0opn5b>p>GalM;*e^7M&G*H^2SQ@PdmKqw)knAL!r z&hoV8v3DuAkp1uWL(r4jo&P|wXmH;Ojfo)yJ7^Fnue54vYTyuTOXSe~MgG{?ngr+N z(Q6r?6xu%0`*spZZMDZOu*IdMU6EfJC^h6(T(9!j`#X)^sSrvWSv6Rr&V$r^E(vs| zIP5#XkpZ6zKR30o!evv$0#-pcmo`?-4y=S>;90eq67cY4~n zv9VSH_;Vm=Q}PA zRz#@Jm7k@>9#aE_@ax!EihHf!2-w*mne(&kq8xNtbo8VB&49&()cpK3Sq<*Q_v$<* zKzDL@e~)$En8kQF6jt$sc6~#`;8EzCH$T13?Y>`kI`VMGM2$^|iFc=Dx{;0rwTj`;A`3c&CR^9)gsj+ zDv6%a3G&|Rb=_yrSPr&kh``GOLM2kXpls*x+dqF#&bMd>3c+{MKwx9TAJ+`UL0Xgb zqX`NKKr>Du#sJBruJKCCx|oLTWaHVDu^Mk-POppkn~O_JvKS;E_;1tDQ+N8fbO{Ra z&~x|uWs>sWy&D|n{f(;UioYDELP+C5#Es(KKAmnVDypo{pNYM^>H$!+R;}%PuBnjs zd3r64X2bMJmWi2!`b2DFqfd$yd9o#&J4#y9QMtIRPT2j+Tn?MV@}>k*)9-1O-`{E! zREr^mRv!KjSA0rrUg0UfxR?&Tettxa5+<;IPmdbC#1c)P5O;vRLa*UIw}e< zNYwlH^P)4>!{*1lym$SZFJ`_CwNBAo!GNCON}_~=nb`tc=jloxe|sXcsLt}{>dEv^ zVDr?Lsv5vwXG=gAq4*d~UL3Gch&4w^L)Vew?B=he3(QvR{r&xrM8hBlx^L0|H>9^L z2r>#b5fK)<_cB<7ts;N)_I@&s9|Hy)L4ZrvVq#**Nr0W*woIUgJZ_)}?nT>B8*K*N zCZ#ra#}6?-8IShsd#gL!s;L4Sxm4bXhg(w8N-JBGlFx|6#p;lh1C4}&uW!J85nHa| zx03<{bB_wdT}|u-j1DxbdW+(zTM22A5)}731;Zq>L|{ZS^Za?QyE=qTrF*5~Q!RcK zRTT#@F7!6c(Q`%4YZ0?^BP62>_Fu-olfV+8s?K^9a?M0?7VAuL|5F zC^YOyP6F0!9$aZwk)lN#e8WA`dR-Nxxn?)!sX9J zlG+uUzeAc!=tRBUv9W~E#5(bQO0}^J#p(aXBThR)W$}8 z+521=ERP9f$ypyNwd**6&SZ*H5(&PzOZBf|pXJXVi>~HNX>)yFnK{xH!)pRJ!5i+f zaq{^g>`B1>+9)$SdtqmJM@I)XAz^0-9)*AR?_*G=hN&_kdcpsICDt&(qYrk`=iul7 zQ%e~z2kq_c44^U^7#MUv#C^9?r@q44*;(s-NOy2f9t!cV326X;QLv&MlgQ2MC5hjE zG(=MLrxSe(LI_=4!-!X3t7naF@g%qYYRAZ3GOxX4z*^F}-Jj8dtsjCfAFDF&k(Qi? zHD6-%t?zLSqP$A|I15=!_=RcWXLR%S?W=FyH>J6gnZ@V%+pqDhPfDDHd=ky`S>4mG z6?XUkkd!L?3p`Vsv~j7akv(yPx1bDbt8n(Gw_wAyHBT22sS{9Rb=;f{#uD)ik7#1Y7^PD~TOgq_+Y!}-XO#6xO3yDATRG1uv?Tk=}+VU2fRHOMi26@-m$qbD=X&Z@eeVlbDG8fW#PFDLYikrws{mijZ7T%o zaOy}gpQjH4K;ym33;qsCnvD$-cQ&C{~jcv;4%6d+BeDT=|em*J}zxyLPR?u29s5l6C%!v zVQvr%sLScv8%!wllat$}VSYa$e&UpZp<{GhU(6i){1*$1J;LtKW6{pfiV|(3>VLNqyHxq8q4$jOFK~o^9zi;;g!HA5jfUg=aPS(bnUy6auh(dvFuN7{A z6&GkPgfhg4w+cJZAKbzD0t!$*do!iz5#R^yfkbtF`bY7bYAkmhIC%uP@HQrgw+N+Y zY{o+US|p3g%Fc6;F8-)sDCLfK{qDp`(tLZSB~t1K+rk7rCNtgELu1`3JUnYTl4+$p zsY2vKuyHA;+vBcj%EA*tT}cCBx-+!{*5tA=aXm*N`X1QAtL423**pY5%WKiuHE zpQ~jvU9WT8k;8}ZoZt$&`@&G*g_4?$Qc3aq8zv77cx8xT1R-o8Pc0|ezJ@%pcgg9h z-L#slORtVf(HyI=I#c|2hrdo_Fi&7jJJ0t1&&_KQ169_#$TI;r)V@3wbaHZf^6VJ~ zSeq)rc0Jy(e{c{Ah6qT-Xeh*ta4%aL=)z&D9Oxa5U+(K5J~tpjZ}ISy9#(^+8iaH| z*6(NfpekA9{kRC}TG8|H^vbG8R&)*Jr zs_N{K;LYLh*M;mYXIpb`9sEK_DmKuZDY)h5{%p8-xUS}pRR20T(nj6l=9XEnqE=F> z|Na5q;_}vil$u+xZe9!&!u&(GA4>}l2|)4bso{W5TF3n%Fo>6WX-ofCue?z)MQ>c4 z-+riDJ4+o%=%;d6ifd@Q$v381bY zKd?}s6`%uY)< zvXNC_2WqU<1B>(IYv5H%VTai}(SKi5h6hVJEh_zwX(?&*WAJO18yFOnD)x!ZiVx={*kq89 zgb70{u6S?~z>s1#L>Ua2c9fg7p{J_-f$3`i!(6b>@|3YvK1@t;)0 z-dHru5vTOoYM33wf!2u$DqtZIkGqq_A{cf_$jE|Wi{AqkpCVvQZewffxH6DUwb0w& z--!%C+D+G+f}J@0)hjK1dXSG{JoCnMy(?nfOyV&i1kE5Y@QTak)D5@<4{u9>=8BN+ z;DS7w4I&!IQ>XXv_BI1kK`l(&7JnBdAAsO_#*^-!Dmz|@(wo7MwL z4$SS8__Qs|&lffgf+YjS3T>iK%V821{5rER4>(ru$^js+)Q}DP3edd-FxE2*qgkyP z65bATtyjVR(AM6L0aHT?&!6X)``FoW!*$^WJ3Qhru60_%1vfM@vkO*I<1dfxn?itZ zpjtrcx%;wO7Z^5f=(`u4KbvmC+Uie#^8ATL=^L@c%EVMCIEUdD2OG7JTUlp?OLGFZx3_?OjlIM0>ACJzp8_h1}zHE@kbg@VW6&| z#YddPpro&?tb7?8qXa4)Y^9xmSs2Jiefff9#UA5t&g6Bv2Av)T$cjy3(gIUvMaQ*T zE`W}X&S_LnhA8|n?W;4Ao0|)xSXUsNimRu=o@NTO2{12;nEvdWk6Dwrjc}={Q!%Tg zU^2<&@6W4ze0)dXOM`(_@`hF*9i$zZp+M1y-kSi=MK7(%FlyC0Mtd0Ni+k)eTwddNugkPd37n61;u zhh$6n;l07GI}cH(<#`7&PCkA5o?lLD-^|i7k25(b2@@SXh^_y5DY#s442_KVU?3ER zbg9A9f{D`8)6-5xC4*{)hZkw(3d5zdWhNiMi??(ME8OX%wtw>TgR=0;le>uK0V*2D zC^R0(pa9GO$O5ijP(!j!G6@JIE{|SsRBk4gT%y;$IZIw((T2O1y5ruZtKv7HU=bgwJMgwi4rf$et zFw=nzGmA_7SXfw~Br(eKdw|YEaz-CsAc>>u4!KVtbbkT5eN5_AI zPt*bC?LHY)-LF$&io4}^LtI=OG4?>%-yT&|Q21|>dbJ$JbCg)_DJWoqfQmwa?Wubo z?9?Fz1-GG@DK#V~CC%AgLd0npO}yfJx*-Gsodx`D_xV+Scv22n3_X?-b&<@4RHbz2 z7M-QSh&J&a;5oajt?FCqGrdn*fiVZ*A^zicVI?SOm{bA@15^7qVfDj2H6&^C-??M` zX7xbVoWPQp zkgx)Clfxj%41+GOn!+m+E4~}v(vg;uk`EzPkd>8X=n2VX1Wv6I=H5ZvdI7@gJ0bfF z?)nub<)07|Rgfl&;XnYI4MFV!k6I3x@e{=!X=%Ob7hU7*OBd6HXc>V!{~nb4p_XR- z3XAT(zF`=!(b3b(hyN=8#sAlbJ9(MD^%FJrr7#rn9EK1smO$|S32EvR+=Z?Uw>5xt zNyAn;$Yj2kkt%C^zj)5$kZBE+M*OtrayrcUYRkw3Tox8=HJ_@9I-dN4+?&iIVE@|? zMuTxqfJKU3`$2p^8s9~^exrIaAtgo6YJBG6Ku9EA%?Mon^^0#FK)(O5oZ+qZW)BMg zEeVO~nOAgoETY!k8eq`urgHtkg!O(+%eg8HADGmYL+_deQDhDJKJv?Z1F}SaA=!-5 zx=%5tKPLeqaN(VVcQy1Dg|K=p=Rdu-g*5styAy8jdNrL)Z~5kd`oH!u)$Wa2n)}vJ zUTjJ8iIovdKv3O%{@O+`6^z~QO?;2#VgBrp95@dKVFZRB`h zkV?R;Gb+pI5~V>sTxw$Cyxgzj^tQ+yz9`GvGoMx*qxc!tUtKI;Tu3g;{ z`QLW`HK0Ta!CY{$505{{?8LtbBUoVMjZ{8o`fiX(J6;7UTl%ln|nR z=|No`ff=Wu67QqAFm=zDg|DPbO`j*CqXG-cg62`EFZS5r*Tnai#zK8T{r~tY!^Z&Q zQoGPJHA~J&X@MmdQJqpdg~lQ@RF#4Xdeh4W!4t=|7(Ma;tJQDCV!xV=);x64QC86@ zm|ivg8&${OY$s}u*+iZfjN%gJJ){=8{Lm+5_pqj)wsj00MNGig^s_-izMcp;--*=+)MxnY3lWNpem6adORCpC^={G$!B1567 z$aAL9P`s!sv?vrh!@&Rhf3K*s*?u z3S=G#5Pm+9pMCAxI-i)Yas;zWmQa3a<*$U4M6L*Fta*QKcjVB?MKuU&r|mW-{WL

W->gtotXJYsL+i_o!%3Z`Ea!^KEXN%A}D(zKnaQv^)#L_g+$zU$Gco2@pR1lPwU z^l-xZsQ_UJ*=^jSquf2sW3ZTW;ogPC|mnkF|d-RFyb`rckjVrJ4i zub;L*Z;)aA!p0CKR&;An<$5Q8Q`f9N)Or8DO1S>TsdwP)hPly}5Ih&F@OXV_O43-G3jW&5R}eS7t?B zvZ$U<)MmdEv|FLy$w)|HaK>NuB6`OE_SbuTQUU9qN}%8)yRLR$^rks_INcT6aOSYK zg7@?DPCftdx=kpIN#ehM*sF}sB;qOh(5`t=E>M%O7PYP=QZY{R?|2SPI|^QFWqXij zW2`E#`&*eF=c>2GkMKh=j}-@PyAN+tUT6K5Xn1rijAD;<{_kdT!T#{CS=p)Vv$J6RKLbqt&1%l|(v8nNPwg4@^o$tZ5|F`nG%99CAxYw#&i#VQm+ zme$bsQIw=NF@xHHL#JW-G@IGgvhz-l*rou`rJHG^+G3i zx5$as3pRAPP`-j4IbY#0B(w(ZVa?xqxR7JnJ^$Y`&65N%Vl2yp^^d_A-n}sTNE)3ilc2JU!>1N)lv-DdvxvNVBQ7W(j) zxEzs_7pH2TYQ5VQa8WiZA6e;1{Yyy5e7O={y)kyPbd*DxKef+lraGE`%{=YRE}Ay2 z(WZ3TdA)s0waxiB{hv3B`(9NW%SMUKx}GdIVM7H|jg2Y)GxXqd>h-F=GBUm0KYs9t{}uGS$~J>3eMSNi zIQ-+2`%hcoq^T=**DO9{x}^5j<42)eU4f0ysr*Hj%M#Ws$H~VibK~y|K8_Zxq!g_Y+V+=^U- z`}#mxZDhR3dnLI^U(|<1@r`z=9j$=O zaEPa6h$0JMR&-`>BosHasL)RrtBmw$2?`@zdvY+x4!r01N`_)FxmvhxZWW!)OgW=^ z7P_PMyhEt#--++q)z*z4+DQ_3NlEV!eL{~~f5vDuzW=p9KAB*20~`yk<}*?Bx{U}d{m;A^qYT8CEH z;2_(;-g9O2s&!nLRqhZ38)r+FM$391uJzsM*Y&$@bMLP`*P3f~eby27-}FJCEh*KPPw10ZHFh~k+xKjF z(X;hjeJ7Q_7X&p^IUSArm187tG%9QGNZvDdpLsYB>C=Ay`MC&a9V}+%o z&h0MjT#a42M<&4B5ScPt`)35#5E<^ZsXVT^tb)3<9yqgzSXNy z4r#6u__TMmgN1P6a6wtKYqp(hzNteYBQcU~rTcfI+}3j(y!WJQ@z$!O911(ySlzKf z^iY`@g}zgh-p&^$&o>(AY#tE;YXT?UTG4+}mR87;5}MPj9|x=%FI(?gU@Bz)?@uT9 zpMhPB7L;7d8C!2Wrkah8xv444DD2dv2C2o2zY{B0-;K>Wdt)I~t*(?Wv~0rB60tmB zA!fP2-#dEW829=1RdjFvsfg8OpJRIvyCXQs@9h=zHpKEO%nELsq_JLtuGW+p=|Q6@@Omd$(_-oY4N53!R$}i6sr^JEA4<+oO`l;kco{%+^$l3Lry<%e-dp zEyF5T@bKXW7ghAxp1f}2W@;u&h_z4yf=gF4daQ7-`6;*Ma&9a7?{`;aj?wH)`h+$O zmrz^+8U&Nu_R>7oweS0^lZG}4*LCnNT8YZuA>UL@RrNuQRj{kG_MM2>I|{$Xk0v+J zHeQ?JbW{yuv_DjqRC&B3pk>J5(xs=SnX{V1zR`k>Hd^Xt&w3rIO+v~|SIClc;jQ$x zUAf3S3xL=UGfsUy=E-7Q8sNFOqe~HKEvAQmjLSpFYgy)9pT3Xkx zzWVE{wG^PL_xP`68A?n_s_Jo|rKH@` zsh3>)usT8LgxMXwWAAUK&wra3AFs;$q!P-LAt0cnH*jU#h!oSGsiCg^u%dfRYoRJb zJ531rVUhPy zt9wdiIJ)>Ota4j@9Jd;Gr=;77>2Vfq4{qBV^-TWL0mDmT%Xn9b{%VdbiFy{JncPm1 zhF##}%B$hn<~3FiYpkyP+H*PSnW|-x4%1FtL_~zUSGs-DbFn8d`MJX_{O%q6Ao2^q ztIc+yHLkXk+A}H@m2*rVW+8jQ`^!&-d383`28`y+D9$K6+urBz@87es?6kzE(+SHX zu1GyuWR&^d>f)Q-)gQ*OmRZKWp6iWY$#A}tploS;$sty!Yv(-mv>fr%U$zLnSXNi< z?_uuZ7aU!7^++ZDSW7LG-t}0g?`mmVbvftMHRbk@E1BY3dg;H%q!i=_zNGAwLj;If zR-!C-A^7OmTlJO#MF%}gtqcxHJGWX|4*le~%J#S8v9Pic-)N!6ImgaUqodxXrKY8t zo!%39tOY&=&-eR?t2c4%ULE7{h8e<~I@8xd=9P8PUtG!QbWqMDd~%Uh((q5IMgwEh zXz<%F>d*PtlC*CcIEgWaX!AAR7y~4Kd15OlA<4I#x#dS+O6RnqJPy~wRZM8 z=XIO5%-D|e`1wy)i{)qHb!1A=9FS6`mQ^JFmh#^3LGR|=I;f?v^w>OJNt|p+ z^k*^K$~Vr+e=~}mJ)yAod8SY6bJk2>ioY!Jd(I~~6*+f49t?a_6aDS=&1C;zY9zoHP1Jz zef(&XNTWc9!c(=UnhEHW{U7EvSI3={ep2IrIFhai#df`)^wu=Z*tM*jKv%8LwY*A3 zgKk6~F%;a<{w7Ii+RIty3U_~aBh8Up)VN50z|S+b51?-+pFukw6`SEv8EG@ z?y{L*j4fYW)vqEbA%Je-=1xmVIeWw;!Z4Y_wqKviDStU>ZH6_sXZDmYgK0Us?Yyr3 zLAu;LHT(3AKaWbNAUFYWy@?$0C$vY@Sm_<7Xcnd2(#0*11XjFm7Tp@m>N+SGUOjNn zbxH{JEorUzdAetIb>p(aZ(f&}Hxv7Mb_S|5%CS*MWJ!zr!U_I-+j>i~C{#T*_x!O; z%Gp0zb&Yi*d*M0;cW;TIhc|NruW)+1^N*Kj{yfy60!Fnr=UT@nH3y#5^!mg(&L*e@ z1$U22=>HA4qtWB3)ju58PuoUZ_V3&G(JFV~v#*zf>=lVRPsA#W4cJQ<(mG<&rH6^KKXJtmIsizZC1*p@Z4ZN3pTIi9Ck3 z0-g$~X=giK8`r)u9w@o+y~?~`>#<|C+=C?->Bge6*{<}U;GiFq4!`?IfZ~&V0DFq9~uq)?W8U@2mtKjoIcjLwlopk3Z zgXyW1P}pKNff>-P-s9D&lgoDVDV2BUwcJ+Czw?_|Q)MLzRn>x>=L6Y$9V!Ivfzgs7 zRxg+zOl!)$R_A6U@B+eqkUVLPIcHfkO!l`X5Rz2m8awh}(y=Bl{X$gpki%iFj^xs=LnA(W`;zaydEgpVhl3v7@zt|w~dEw+Y3-`H!$Zo z*il>vd#-XZTZ||bK)}%iSsmxLL&|W4=#&Ie1UR{=R0DTCg_*C&Z==t{6m^MD0P`Hd zv($xA?-@Cbctx`?h3Us0Q-g^>p7p~q^Cd>0v^<9{-iH4J4gAKp(#$>a-t)A~(j|{r ztkfXrNCE)OxR9IFD7B?{6lmq-%r2+FMpd8rhWHn|%$Qxj%`w0JK3d8qnlMB(bEw=e z+x?HkQH)Nl=@fWp(W>5D1u4Ky8hfaV*4eZ785ARApp6?h>OYQ8Q;?&l?NSn_D6#v7 z>b>nA>wj6n*8s1}JWzOR=!H|wCV4I+#tLKaHhGK|&p5FbXNK@9d^yRbu-QQgm6Zu4 z|1>)nUn97tJlG(G@GF_KW-F8?L95KtJwfdqb?iO22x(HwTYnBoP|pgBlMTk%7kz7w zb+08*@bIIa)7F5>Q}wr3R#p~(Th7Dt(X9>+3Yx@R7#Wy%5A);Xk6`gsOp2qGq{0kR zJ!ISAXQm7oU1UL4P6N?l{IA_pLJESAb`uj>vJO9IPi@6qSpDKmXI8Ly$$1cfk#N*` z0maI7&==ndU2Q+NytB$x4JXWKgT)HY!pTe@WWf0z47uOHj|ho~G#0r}Oai$7lH(KGO!gCMne;BN`z$w}H*d3OK zZNRXv;3Z?Aq_-|U3-sVg0PtU68I=L`&pbV?->Vc4+qr_*726(nNIdeMs?{?y_2fMA z+;~q_W#yNkEyAzhw3KJvstXNusoG^X3!77!&tw=|E_=InKFW3}RJfk<kp5nGl{t5DEP`)na;xYgIOM??n%o=&E9JupTt*K~?gX zXa4ITdcGF#Wr%qYa{azp#?lhhVX2z2vRI6#`)HWzGcItVDYAY$60p3Gpx_s5+*Hit z-N4LwIPruJN=qBTqaqx{go8tl)1D%X$5lrhcIwwI#{2pWqD#yiA5fjgt3r?qFxsNF zDay#SvMLq9L0>OMK*_*jU57`*()u`TY_XzWCyGJZ^C)>2dCzvStJX`lm_CQ|hw2|L zL|rWZl=Cv?^PQmNY@8-)q*e4gV5Afg8=E1hmy`mUD;$%L2L}Gw4VgEY?1H6j6P9p< zMLG)K6J7-meK?5f;?+*vB)R|s*;u@IGQ70!MLHOc8yK}FGYaxp#e^deVe=$jGJ68C zOle?&xsWU(_|tQ9<)|fYl$qbh=X1!^xyis7mWCjPpW_iFMl@_An+U9p)r8j}M=Oc18R6o3YhO@_bXG))0$GN#Y;^IL!#we@(Iv#ES9onSd$QM z7!JCLQPrV?H7;^{NjP^p48fgCM3vl>8Ubb}ov_T!Dw$7Rnr|shMS$Xwro@ysZCAUf zb@JbyIrF}p;>`x`BPW_v1v+L>5za2JuW$_;#3PoX(a{3l zMKyH@^m%fOj>Tfqi`ZlJWOsk`LwN-D`YkEF*bVx^@7KbKmj6n zQH}c+0xn<#D0M-iQAs}@*C&cZ39C;Bn<6lL+RYV)0IjMUQTPw`ODZ@oGPdBie8*&T ztSh9Pn^Ft2BKW?ZFe-B%5~Eg^W;6_lZ0X0}SbsHj+Yg;T zZl2Gz+SmDOyw|Ca9gP$GO4%x9Gf&^RZZ|t|!Vku)+cyWyy8V2hf-Ifsz@U{dyC9}W zY8;0plA%>@zA1NhSh@Z0*LQvU9%8B`9c=v^>#Xr>YZ~Ao+*oE~31*!d5b#XM7fxr; zkS0zOVd@c> z*4K#nms%qPvv8UEz?RQwbss$;9TXMS$j?u-HSCh>;17+S9jAL(i+7-KxRhB`#AQ&E*AI`0tgpg+lymBL= zZYlyqtF=@Jubd%~u8DkZ19v5kts=j|UKy6L`$3FGMv&eu{&L5WtM{Pae~x6t#=Dj~ z1=$Igqe@ZQQ(#XQVd8@vj2NWhF-S|EL=?V((1f>fDG~K*e|MNt^D#Xcpw%Mq3Aju%XlrI=;eF3qZDega7 z$)^O>W*SmmKX`s!_@$yOd+Xf^L(Xys>L_hZDK+JS&>H7X$Kdz6l&vxr*(M^9x}sKv z40EyU>bv=)?)eE?n)+Do{3+k3ER$J*ouj>B)oClwM#Em(FvBfC{182Wi2 zKTVb`=OVH*Twj_wrP~w0wFk&Iw_c0SfQgC;p7du_K-E&E*hc|mgz51di$QNmNb|pz=Xsr zr)`9&o8o+y+*tupcK&+iYHC3!c~2`$HR=`gM4CLplq#0USR?xA7x*tNRzxFF!}9tW z3X5tKYweD8O@w4ZX=yBM+)e&c3jhW^;$D&Mj#Ao>AqJl#eit^Z&e%71+ehJX)QlI_ zsncr)(8&!L5JoF{6+qUPiEe3tSvcB^%20E@!~(^(an991d_^%9T^$-2s#=6zYo~gn z{F?)h$D9inY7^Pxq-Pf67Ha7WXDSxnF1c|Rsz^PlVYSa3Z0ljlg(7obemnMkT{@bZ z_T_c03m&V_b*xe$5C7h;ZezTn)OywJmkO-k6CNXZEt4bk&JTq`%I6|NK9qf5cWcGU z+|m5Dk!c_PK^>RQoSvm{XKm5wqm$xXl66IZUVRclQ7doXlGo@pbSuL?cGd5kg-14l z?B1g${MOnrxU^r5Ir-4_@A<#W3=2j#lL+GM@AYKwnX>9ur#+9ohLEFum@_%lq6nKF z{93msMecCFXttQ8$v_X~;7O_+iS(2$xbh-3Cc@0{H5=boSuWG9>FJD8rcqjN$YOQ1 zxe)iZ{u1qE;)Ad)yLMl=Fn!p?_bKJ&c{MMK>0`cT)0SbjGKUXqw00Y99wcCdORJ>* z(rC35n)qv1ql`o6^*QYfpWyeVlqLTh22)7l3NN4t<;N%Tnolx}6wd!kjWw6r7MysC zqgcdZsKZqrT7lcE{2MrZa@>Cid+=F%v|hAaK>^rD(pG&CVcDilBDuE-}+8D^t zDb*AZ0om(b%YSvBy(l^vM8HL-bWZnuEMM)`={_A~JpYFH(z~xVbNXhK1 zy~nW(@JpZFF-v;eo(}OJ%39ebJx=vtA$M&B@vw2Y`QA+MvCk6q4Nm){#eeugA5zI% zQ)6_-!}#68>7D&3FgOP-`^%p0-N3z)L^{!iq{w+h0=)H}4!Z91c0IlDM=_667F++u z`h3Y&TDYhC@ZqEA7=7BJhIv+tN$XpV&@F-scANwx=tY$OMbZ{N|H-O#L~8$6o2s)~ z8T!(m2}10+;yop+pymIyj^%$UbooE}fpi0f+ZEjg6mws-7)_a-n)wQG{f%o$q~*Df zYjWCba@x{UO$4C6qN!C#ASKvZx{4hXsejNeFZn55_(_vcu>VRW5~<6fP{E_AgSIy^7<6WuEb)$Z%8IqHxm-{7d1%hp>`l z;^9{J7`}P=Ol^eUKEYGooVT(@&+P3^((M%D`T=3Rv?H;78(j1GD=YOJbf0b9H2h~h zg$(t7XxrNd4mJm-ckQ(2V01ZElJia#U@xt@Q$yAXEZ;un{eZooTrk)l2->c#B3pxZ zChz$SDN3qK;!gb3d#61&_rCY<{@<6nD4Q;43{4TOERUQ^Iw69CU%5JTSouU?@A>)j zlv6rDpA_Vf!)Z4Ypu8T0CQE+53c||9{4015C^}MpbH^4lm(k`EFy+BS49X<&31>~ zL|W#Ncgu#;^ks(UXt4)yCMVcwFLv{@?io$t#s^Tz7@|EUlzzzRUSpY|o9mS0k-1R; zBw>vGb$bB>j$|A>G(Qo~8n$>1AkWObCxSq3i1vqoL;&fncE1JI3g_C8KPMa~KrXSu z;Ul8PuTmPNfDkkwZB3yXA~3F&sB3XF|5|;N%_xn2Hp+@C=EV5Ox*} zWfq=bDmf486UYq;%myG5P7NB;H=y1lFae((=$d>Mhb+h~nXyE9h6iQ@6>c-K{P(Or zJorqM^`aMYP62>zf?1gwo42ZJAf_CY``wFucItV!=NX+K~bC5^#^Ix{xD6P^)fJ3fnh)0aKb;jpHz3ypEQR zsNZ0|zh9MC*6CoL1{AwE&q6@;TZva8NH5~UvE~5@(E!~njoL^(0jU*-Le{1==k(m% z90K%G0ox$-_2-quNeR6e>Wnb=S#%CTF$WMiifEn*lq$K1&wlkJj+ClGr3BxZOE#l& zO7^&c8_-p&X=pSNj&*R}TgfQN&er||2v|zb-ZOk zaqZdqOtV4)@Ff60q9EjvvOXAA@f@XOWSh98q-1(LH%U8p*5PD0y0mWHfPYtbpddsC zo{n?M241&O9x^E6^csW$WJ3ZRz77OO7GR1q6sij?Fw+W@m4S`(gm^e!Xlv^OeXrp>s>IjsxOU=^_@G-@l!H%dlCaH&uq`K)&|?ry zTLS+sKh%~XSObjQF)dy@4;f(_Ou@5KfX8+LXaqD& zM*(H(_6>Ui(}xkgDjMY1;56jDpiCtYCM-lU5x_BqqvOTEZZ8KWhLy3730x5<(0RTZh0oaG|DSY#31$Nl|3J#ZxU0gm;js|5GGG&Pf zix2gAZCp!kP=@)3h6=vEUt8i8hqN_7-=)3ZxeCN)bxeNU_jgTh;0U|f2M=^_M z%!|R4pe+c0!6Ejqvd?Te|4~FZji@81`{I2{;@o?;6K^yN=7$hTf+$KpSVAVf5wQRP<+t2R`Q2(-C3=M zH+y9^aIXOIDzBCX#| zZ+re@V}Q%3!mcMZsf~}S{PTs{diXvLO$iCmmG^5Vqj+rR^FzV?@a3OkOD($%wUW@o zO8vxc0~u(7m46>r$DOWJMu~rsM061U|F8f5IsCu92`)0`)D4ST&`G ze<-pz`XGF$BC&w9{yL@;3GQMa%==H!+a1)4(pD^|9rk6m78qwH($Cgj=^FVi67I>c z&M);cdwtV9k~ZT1GIP&*X&~Ath>2;Lyek#!AS$8(7ezX`1LfHdvtr}Ap{YR>abX0L z#>zn|qY(rK&i^tUTG^elfv)A8^<@7{DL-e)k&Hm=mJ%UV2eA^>DlTsy*J{g$mNK5E zB5A8tQIP=81$y@IE*HNhjE8^(H|c39Bw`AK&CI9Cz-WLdq>DYKG~F4yK!h0Kki7(= z(?}Rv01!$H&2aJ@J=WuV=cWFF@{G0Vo|ZPczp1U_5Lb@5qCxmik5R4h-!nb;+l;er zsrFKgDqh6pMKugGA`dqWAmYY$NHpFZwU0z^T zGv28UDQ|Ja)~5lLyrN7wpFk-Ju57|$ zP!n+$0)gv-9Wlg&x_?`8V&VW;#Rg<_XVCp91!Hpxc$x@)lVHd%+1lo|zQPftD3&FY zrrz4`kh1=aQ@nn<6qbMMpwMrkEd&M=MvKB9B&9QvriVcHwxB5?bQ(@iusw)& z26j_kpQo@8pR+HOAHDimrx(b-M(lS1;Fouu`uOODKJ6Wsqoy?31T zO8!a5gEe>9H=Hm5HFOuSD1l32@JN)qclGMk1wVp>i86nvM!HiUy~GJVGp~R_VXM?P2==Z)CB7GgZRmYjLr>Yn`oOaYjx;{5G=>|I4H;EIds3slguZY6^ zPi4YzZo&CG27@hG@sXk?Tbu3aHf>4RLSic=rCtLgH}vQvM#ta^-U1eZ*I^fLYA-?e zPL=@Bb=Dv9`}X{s`Rm@+o%_}onY+)}t|`_#qaG!KSxT2 zH$rjo9}OC{)zn6*yX7Db^NZ-10frDrHY1~_*=PfA3V``~2m>@{1PRRFK^3S2-`DDp z5!&_6!IW<+J!s!GGX)$2s(a=J6b8=sGY<~syPiFws^VIeJ5qjs!DGhuANR$OBt#64 z{-*&b&J{$@XDeqFPe&8fJ@|8oP5$9a4YFZq&~yjrvyS(^Ku(-?HgpG_t9n(Fz?~3%XYt+%6MeyyyoFuMN;U zanmJ5oLvCE>rA-Qm($!gAX8Y<&cZFE&U^24rOw8GqqwOwUy``GW5K0=WQ2BPhR5qx zi+JDf*P~zQ)uTf{xsq}SvKm8WCt*~}1Hy#hr=8IkzV!mr1halnE>l^=I2uvpf_%Gu zD9aD6u@SkH=&Ff$L)7CG2GPJ3G7E&)cnfNudTf+w>2Gt)r|9F zZM1gqH^c`V=ME>f_$9>sVwDRP|S- zp5#H}b8KnF2mAM1jEM2L4Wl!lXvuJ2Cg>%}xmw`fq4D%D)Qzi+cT3o>+=P zstvVJcgMWAx?{0|X0Ku2$K0Xd@wWZfs@iYd6Y&buQtY1Ve5)(^>*7LmeRNDve3>0| z5fDf~Vz+MqY(gWnLKz6UoV>F7d(Zsy8GThMmhgheR;=Q6fFtt@ovcjwIH#cNCA1y@ zP`ZCVY`g`T@sB_cg4)HZy8{ff_V4?S-i`*C=hV~4yoVUk0JbDl%);L9nevEA+r0+e zbrKr8&z&}k)?W{?3J~`Dp9PBvHT84=g~*=H$V|0Kc(TJKyzf+k=gguO(~Bic525K? zYyBV+p}S*_n(s58&?xn0T2gXQv!U|`O{tOZ z>rleQmJ%&DTBK+4dT0D88afjKQwR#K?#w#0?sqx-?0wV%7fr4-7z^x1~jg70|NsE!#UNDqM~T;gSipgnd6-UX?sezDECZp z#4b8tgPv|2$*4}8f_>t|3H?EXCxD|;VEuBu1=(K`J6U(ZP^C%gvqmzf{G3#jO|_^5 z{n)~bg$?}?6F3G=J)B_ma0CG)>G#5LXxt0P114N2U@exn)CW5Yg83y_D=(-M zWO0z;*NRM4R$1yMKpQ~&7L;ZU-y;G$K{GUjgKN3XMpv2S@ov6WWi6mr7-Z|tW8L9m zJFT^ac|~#YGL6!I;nVtd_;&xExXUl=bQZ(JnUgQq@vc#<=6_a!gbL}5@vG}Pr!I-9 z0>iTWG-!DhpoTZC?YUtSEV!S7)>j#E`;$V#uNK})y}DZAS4G|}KmGNGqL2E-n^rSd zc`4uYOTQBpk$xo3V^ENlm#3MmCu;IqMDm$}DROmMb}+}62at6DHPp&&TD`1nvJxvfV`HMPySxobPm{VgQYvJI-Ij_b2lxi9FCzTxkAtf1UmTfUEe zGLGL!_4L!a4aNa=j|Pv1UGfhRwqs5Mq#y*GfGu0VPo^Od=>gQpv}55g!lBf(%zBK# z=7$Ul9>MbjgnS)A^3rH7cv)z;1o6z1oF$$SDI6beL*3(TYM|N?t4mXMa^#)ND`|@k z^IWvfH_}S2KP*Dki0m1**Gbc}A-1Aob=!6B zdXe`x)?Y2`wT${^cuSG*PyqpsAPX2lz~gfP@a$0>ldM_~304x6ix&{Q3s6#apVzyB zENzi5N5gfA>Q<|LaK#mr%VMfkZNhy)o7shxmKmWFCYB%>Z*$6u3N?1}FERqak ze3oe|xD}h@HdK&8p>S^iMLJcXv~;+m$XUDDDG(j}lGA|(RSB_LhW4I&`Yoty4Py5Y?2 z?|uLI&N$z9&iUiS7(PRAuf5i~?|a5IuX)WUKv7;2<1XP{6ciK;X{qPRC@9zVQBbb; z-o6F@Vv72n2mZR|s4OXpQqWDjih@FpBK`cCs$0Uwr0dHE8i=2>)7NFU@$RcKeWG&_ zS9%hcRTLydQ}jIIya)vM1l+p^>0;m@s%38ma+Mt$5d(0q?VOU5`LCuAN#4TM2290VTJXog!J$oM_fJQSXD&W2?n4>|+|JGyMNc%03<|s# zY;qTVv%@o=@Lt zRYzZH8`@ax^cG2p;=|Y5rIg6&xiIp%m%|3l3<`cv4S)1s&6EAlXXHFQq2C8N9US*a zE$T8dXn4oR3@x?lPuAEwkjtT?7FUvzao=xCc#n0L-eQrgKAN=pzUU`fB?kxgcpf{` z?Wwxv=H@S9Veg`&@h>kg_t!^4*M@RM4r6d4RQi?{2um@_V(H~ET}-CrasGW%UQzM> z-clDOC1u(uJEcVMtM;$-q0AYkg*sqwaC+N&^sFK>IzxviZ`;eQ+WCEky%gDQ2yS*!Q$C=L+kkX_%}BC zz+aoq#-tj*RkOc^N1)P}#84l->`v)P5{kctK{&I%E~`E~f8u0hzO%E#q*M7NAwiO( zX-9gm@@Tta+IzmR;nL%~vxleW{PuQeRaKR3Y>|kasNkk)cS5%85+)`l@;j3?u6qX~ z`W#-TPTY1=of&fRS^5paD3YP1CKHwRw?Y}2Dffz~9e2(8GR=%(QNFZJ`RcN-Uq4}p z3@k0>EVn_JuF#ML_4X>(UmR*XIAVCRq^AmQU1(Rnrtrrkffx8pDioJ48$CBO^G(}y zqbL5pLP-!lYq7(k3<_+?FS~{diA?##yODdlyN2_>LyphR#4fK6>b=hH;YFv?8Jk+% zQ}?lFFX1$aBRBi|q28z!Gdw)}5xeni6swT}E~ki4aaC1SasO9}p^jI|Dk@b@tNlh6 z9iz!S6iKE>Oa6S0ON!ab>1a{OLY~}*hleQVr|X5cf@JqT6>#x5A#REI3mZ1y78Mg4 zt9E7_$dH>KEi(G>;e%p@?d0PQ{|_I2yg6~`P7(^r&u8w6qwCqB4IZ;rGpyiKXlU#3a1{LZ#AV|pA&+eyBR&a< zT!Z(8+h*B_`FJTk@)p1R(6fdt$IERxzS66_c63DjCLV-mYf3` zCeQo#?>_|uQ1I~J^YHK_`CPh7gp%gFCM{38PA?*l8{V5qtMn6C8x9#+Xh{i2VeRf+ zuunQC*`NKS$ts!hI~PaOxOjLHT3UpWj2cU^W=XSGm)loaT4igf$tB^3g{96`oP<%V z`rTlaRo)l;fvGcFTk@}7kyA>31~2(Q=5roaSbr*0cu_IsvHniX+}_@vNv}5M;_L_) zAKyPR@?la^Qt%_T_uYvC>+O?1n04PT#_PQVuFj^fK7Ia7Lrd#V$Yt4^tHCM}LYU5D z&HCXzz4qLT>9USImoN!Wa80>Ul4({hao>viVY}JiyUDBzE=sH!Y{t@P}&` zr%^RFjIxd!)-pUIKljr@g-^34m?LNU(`7rsD@?oMcE+s=!{XyRrs_P|cz9^Z$-gO{ zka-`!i{&s=E-{rmJy@57!-Bm+Yq&gROyqa|H8w`D+Y@__h&#BpR`B$2Qx;Kf6A&0U z=W}&N#$`1;n5Zo+CH3m>OyhHL@xBHhA8@_r$Xk?{VKJ)beN)R-udJy-{SqGjt38sj zt-XD&H$|*==QmL>Ay**3^V$!?mb)%n6Kyk%zHA&EY2Fv7I+d^AAu8-R?4|@gj<)1B z$IGt0ta6|R+e=eUmqEVBXA*%_>I~_clCTNzxa3}3_?!2y`4Mg=tjqXXU#bYKVlF`K%B65a4@_$Jpg;|%~T-E%gYP& znj$UrG08q_!V+0%CG%~0Ih$* zD2s}U+-JO*wabH72QpRaJe(yy6HB*#CTZ*Jq@tty6hW)dU*ozh>C#|A@w{)TJ26N- zHysSsX=AiV717+%Qsla=hvIRtrnceP+9cJ}+3(dRqq#A8gjP_%!f8Eop}46Xd074< z@S4}jVsv0dMMbe`7ooV)18QbwIg8=E*tzB9OxTUOV(@0=H*em2r4ai_=kD%ay%-i2 zhP-}vSlezj>R_c$%%U&VFFYnDOFJqmD&xkD8+4EiWaQ;Pr_u%P_DPb_3kwU&sH%R| z)8?_AP}C|lPr3K#$4RB88 z$vvmJ<~zvSoIt>n4Q71&Saj#`P#tzTw?Zeaj}9C;r}*`(=wvY*FWuDCl#Gtf1nLnZ zH@CXQU{=_!&()ESN2@wKZ#Yl$-`=`zPvIEhiV7yYKbm2!KTaJ)Y)sW@SLnLARX&>w zRFG1)os?(VF#YnQt40;-W$u%3s;&ynh^LRd zrKnz{zG$YUisqO1_43M*NTcB8eT0sVUhTS#`8Fg3qetXQ5SgZ7$@_3f8s2Azn+r=z z?5}>J)FmlGy3j1Qj*^Jw^t%GAiH>1f(VL0ugW&N?P0=7$Y}du^mJ zG$;riQe}0qsi`Ta-Bf}v8di8%SPIX*sc+9vbqn*Kf@NwJ8{eUoPv~7Yz+a3|5TwdSNP^WX6si~`eai&5t#6!uWm-*@?;A0L$RaPS` z0H;=_>I5q6riZmhii{*77R#HPn`e986aBPn@9ew?f%&iL8t zFYl;`6XNE*s9toMrh~0XB5iH$$=%C~vl3X;aK3hCbT4`VBh%W1M~%y-j9PbVtK`wq zCZa-GM&>a+eSle#d&VfQ-9%-I>tz)(1hrRIRzAI?R-kVC^M@Qf`^%U61v*utE-vL$ zr>QK_IdDyi32eKEiLB=v*b20tfe#s-mLs=Z;S6z((&$X`&mgtVmGlUwL0WfO8w}vK z8K2qSE)+;w?E7IL#_zh-S)g09GG4~mBXmRzSuR7j#$|ML^lNVS`wNewN!K7|l_?{d z4|GCgWMsBewQaLa{(PQ?)+yaR7wjAyniaMr3k?eRosK!Tm6S4HJKLuiG}UBE6Y(7O zO}5GBbGJ@SCD|Zc`s)yT5YO3+PSHXIZ~0R1Lkd9Yt#-Cz(XY?b-kO^eO_zz}by~Tv zQK**=Sq!CmeLyzujq13=>gwtjALiZW0NfyE*Q*_IZ#YLj79JSoQiGpv@C*&rR+dqFk^*G$nG$z1}*wvj-9Ip0< zSPlsX(t#nkf%Q}^!CTn>j|3d1U(b^5rfS`*vHTb{3Lv1~2G6;LN&M%#bi|Jzbcm7r zcpD=NZ4u~lEKD;C3#tV#{qCoaq)B4AY)@gFT!l6^HexY}m~|6RN}0ZT^{sJ^osEsY zC^I2EJg`eBQ3D0-tfs<_i;HVEmsQy4;$z5*L~c|7`CcAJ-}R@%jaWL)%AVnzwglnx zdF<0ICp%;qZ8co&MVBcH&LlZ{%UooMUs4eu+iA z6TlAkx_G8n@(~c;vW@6uG>;ICjVUkAbO{%;5j{OvA|fK3gct?}2G(Q6ej!9W><$Z3 zqN1XTxkDzOn>ss#!CnU-BZo&s@V%ZvK_+y_$mCpHk>HHQI%jGS6(zkpKm2FWNMCYu z` zCv#m>(|Z2SN+v62%9F%#Tj*pJoFQ14eW~`}Pq{aCE}fZ}neAPkZQ~LXcgEY*2gJt4 z+M3UG#&VR}Ak+)b0a^d)>Pq*yy7XAway|ZQ(48!z0M$pfP8Iv-&!3T?;Oo~1lVyQ7 zad2>)N`7rSU!I?ccHEVCB*QP_xH-=Chb*#EzY#5Amtk{<{!!{(EG*XIq`AWyPSOlp zM@Pr;GAl{&)gPs$#s_Od=K%E}F@M)7dhq)7>u*q7IBicQf@!&Ij5gxyzfsB{SUuVr zx!@`4HRm)h8+X83MyF_p%77190Ktp=`t@sNAQMZs+9}0iAcL2m-(h2v4eUnF+B(mc zC||t;!rsoo0hiPZOAZwWnPX8rGBP{c$?6ust2;XuQlmxl%~Q2R^ML$c?l&0<$FSc- zL-WkhDEwR&$wiYB?m2DAF`(Rf^2d%Ttr=<`Tzcc@#k*p`E{fXMVmzt#(XaILZ?_|0{;a^zvK$ z0>m&Lu$_)5=7AtK3W|3>fBt-2=q&7c$OM_+qodqDXS0`%Yw2p^^T?RLHkd7DY)plQMLL)}ztWcm=-}^ss7TbPp3<2{RCQBR zlRJQESc6eYHTuUdcjdVr45`}#UN=XSGiwy+^l29;XDeo_#>B-5KZ(U3QU^C?)o1(c1j+2s(PKsxQMo1_T?0$Erm5jsS*A2L(Q`pP5pvHrc zw!b!nE+8NPTM5Qxcy)R4JtG5I%>vZ+OQq{f6wru%A|xny`_3H$z|G&&)3HfOyO)!F zx*;sY3VT)CI_N-zN7hz8=R0VCoqC7(pwQu$hCNRaMxb-^R%kIBrL&|ut#V{K#OzM39Qe&wem@Xi!l^;dK zWBUWvUw=G@o{*4mJmZVCPs4zho^?@DT+HA+39n}g@cafE8ZHr$thF^0twIvg%kp$< z{uOtoosU!*9zuFM-ycw@j_;YM_o^8s!h)Dm;&EUJiR`(d;p344T}mdV;G5`p_pz}X zvy{^Q?(O+LE)Zk2ZGbxXy;eR1BB70mDqL|TUNBRUi+x>m3o4n0EmMZd~H z?s>%fntZ{vm^1Ddk24$=K2(suT3h`|1YEvA*#r2%V)TbW3S%T`RCd4}f>>(T--1Hx z{X9Rgyim`2hYK-!O0m8fT-H4&mlv8+)fBbj?weEB9 z6~d5PtgNiRL&@}4`csdO-RcBdG_|z{;EaENCduWQ@SOd16S5q#Dq01=13pd5&revU zB?tH}mfa+9>dV=|`iT44W<@|iKx1ED7?|b!($a4zBTmludccG@0jHN*jeLffF*7&! z3+nKb^}+`8{_l4>qFG10(t3fK`1|*7ZxCW+1Ybi#V{+x`yZWB=7kZ;D4WIt$dh5Y$qK zEZuin@M8tt9g2!tnw$SZLG^lnMG3fxA0;JeE}P@Ee}AEa_sEWjv92M8NlW#?Kjx7| zrCE2vv)rLMsH}kqc*JczifY$P`Qb?(F0K5xAxny@eO)No4lZdctjAK1lGt3gbS4-3 zLuK5z@s6IfJ4Ev?tgBoped$HJ_vmM4vbPqJQ~E&XiwqMG7S~CU^bl0PBE_eB5Bv~! z+CuZ{`?EIAZ+LseqHa-l4%-jz9D&rrl7_0IYI0niAPS$6WzR^O6q*5nytz!Fm9mL&1m`WY4=UO z)7_P(w=kEjoPA*to7?sJM~Qn@p+(dO7I?x}74`CurTZ^-+hb+a7#@~$tH0FzdU=bz zWtjRu)S-y@yZz1=>>MTZHlk|TKim7S6EQN9rm7U^XHq#)e7HZ?_h;C=4gR#XQ7g0! z$R%;GDH)`)H+FVDKzHQATQa#a%nAPw(-{0##~=C3N7tlRklZNtmw&JD|NUQ4{&aU| zJoCMkAn0B^%8oo?h@YWc1*tFMI0FDEsyaOqMfuxQtRKVWxkZ`Fy5Yuq@iExV_#nUs zt0WNf=~wID!3258#5da5_zqw#oAICf0J(KiitZS6&dtqh);loIhAC0eP#f8pi0_$( z5OAHF=;Wwh`{o*2U|yy*$t@Y0_%lC_am#jy;fceJ9hK02=7;2DGS8ze6Cf|nj~cGh z_3Auc03QmBoT`(#=%aMtTQa(1#7))lI5Hc0a+2})S~3TqfG{3!O%98WMtiHxr6FiJ z+-q~RUj3?I@>BlLKP?TB`@P9HczAe~)z#N$mX9jtK0odQc(J_|C zj+BCe0=NvNTy^G*7qRc*O;8}tYnGT60dD9Y7|7PHU;+98P#Jf%OMzZpI{>v4U|s=E zyaGt==Han6OiNA8=CN-M+@QUqqYw=I4-NdKxsmpWYR4D0FVmEo{&_!(9OyqpTc8=YbCa4#Oii~Y!~6s zH3%7tB6bapDU=4rR-7+2wRYjGD!rC5$zCM=`HCen>*RDVxhqNXX$|)a4>Q5Bu`#9# zzE6~rp#S%;&+ZS zX~>&d8(If6H#1$%Rd~+}8&W4bI|spWzZ8wan}{#d6^@jLc+TsCh8tFee=quztFS#G z)5&i*>G4_hREvv?zf#La(ZP`^aT3CI1Qr87mJZAUun!5Tedb^F zeJ<4Q+`g??s+Aue8TpSQf$XgYwL&Hp4GjY@k*bhZ3auEQJW)hmcX__2K+VOarupO5 zyZ$^)4r(?wC8Y=AW92sSbL;E5!~!la`ph}o0S`vP$4XtD zsz8Y}C4jzZNIu5%a0B^f#kQ0D>A=Ib@2?JEcu%x6#KSeWFi6rnwU6t<L)wW35Xi7WQ~?n24~WDb zh%0^Funy_3+eUBCV_jz8z~W_KwGwY~E0?(WxY4q-L#mxm>=v*Gda znZX1iN}8p|lGKchveGj0N*P|~vFv7zsgf>CE%Ov&TMB%Du%NEKbrLZQl~tBnF1QvR zP+M;o7L36y?mo4&WLR2S8XX%;QO_k1bbA5`x~X#``CS}T5n)j8%>mK^z{cykm7wPd z3;|HCC_pCY`CK@IC*HxpxcO?b+IfEy5e?Abn|ki*a6S<@9g@UK55yv8W)1;RH@mhL z2mlEFjnj4_#w^(juS~1!?KRXa&5|V}zVf+gxqNjFqcy6_&!1=0H6%DJ)+EnyO5;{I z%w%=_xoQ1%J&*SK(NVJ&Ha=8U#Tl?-KBiy`h{(KRajCHm`KZ*S_p7lniEwDrqCbm5 zqhRVnWcsW%S+#IW{%Bbsg_|Qyo*64?dm_x&|MSXF-$@lFAaz44Be9URty1&hN0Ml0 z0Pm*s4l2FpX;3oLdR_}1(xge$2K)Kl#5{DV6*Rtoc1ZR#K0;+{o|aUEz`>_|acRlW z))w=rygcUgn>`FPOk#2l4%|qYn_P`b;b&f#9yknkblQI;_~M|L(#Z z+RyXy*Oh@%DWBHG&7+}|)D?c_&aR@eA_KYJV)hF9BqsKS%Lm#erWoM3WGeU?`+a#wjju9?yo~}>Rj*5(wb8wKU zGJ5b(4Chqkv4B84kfIKIOLD)Onqr}^#bMUHuvsxZjNw~TQ-e!NDsOAc0tBNeB%her zSZsWJw4bFG1IUW&&Ye5R*o}wx5tcV~-&Oi>V+>i`LUM%e4z{eU>?G3(bOefl2b??w z8ZR|96^H^a7EjvhherBDbyrljT-};)CNdYxtL# zKYp^&u?^;I5T-co#w-79GIe%U*;7UZ2fsk^a9aP>u0P^&TQOB`rrSMCogX&pN+X*g&u0 zl{)w5%bCjD-`OU?vyGB3K3mm*gx&zNh-mtRP5JW2t7||%0U=oOs_{B-zSrC? zPnMy@h!a60H+Q&+7%b3@hkT}3s8^@lqVYgqUw_JTTL{_2g6iVVy?fuGk?OD-_oPw_ z(7<9Q$ICkIm{pDja%!%JkX8wYkLGeU$&{*;(;ru?e;2+}{oh)E%Qt4;m|9%{pXh{7 zUf&hdCw>kE|F(SMv(McA<7GlId|nL0!|IEHx#1D-6y$OAGydh zauW`{SQGw_WYSsAHqRktVhstokEb#*lLO%+Up zK!J6Ct^jHwq*S7$h-Kt(aZNch-7K84O$S!$W}HC0@dt_(X37#BL^NN@@*+KyRWnro z`Sd${S{V@|>VB)ILvSJK%h&g1k_gZ#bCjP)m zb6y|rjA5HEDyN5)3Fh6EUIFeV4XTmqRv-~Tmf;8RbT!h^-ah;9C|vR>vk}(|^8x~@ z>B65dlmroy6RXj8g18IQh57OHfcyP--`w1a*~gKR0qC{dWeb_ko#Szbr2+yZKE%k>8^Os6@h$j}2Fs zz#<1VG&Jau04`X9-np@{@zu83bpLo~->VL0H(D_as(_N3hC1yRpJ34ZEPk{s#dT4|6 z4{Elx4_lj?AzJy+2o>;X+J%G&9l{4=B|bO^uzLy_!@)a~AliT)cL^LM(1A!!35d%X zIP|8Wp~!7`^=xx7q&o#D(K_vJi<;Tl^^EBI$h~)&}UE%oB@(u8=qH9~CLwugW-o5<;p(3;b|GRx}uWrR+66&R8ai5acr`I~r^TvO*% z`DC_#cVt^;frlWz$RQ6_L6Egat2v>@xR?80TrVz8#CJ2Ga_01V#@hO3_Wl@0)xg6H zZv2OFl6Z>La{cdrz2}|Di@X=BxDryY0_uxgjY5azZW54AytcPb0rdtnj)^5DtKwFr z{|V-vhk+Tjg3$&91r2By3|UG`OV4hMl~_+!M*_wNd4nBj9nw{)_)ftZ?w&wXlsr&w@hKAM_+pLS2)R zk|O8i{0iEwi0J56VE$f0*V?ZB#MEzpFd{ts)2C15jEuR1h?hXQri!CmTU*~FM9e?_ z$Ct^wxNt)+dqfEH_H8-`-pR4CSfDccYTX_2SoK~gE8_r9JrB|i&|!%T$E2mDoj@4q zvn(^2a)DR@{0+9Jr>Af8A#WSgk;BUddvtU>W)|m@P?57hA)j-L-k5gFgYj4O+Pf+N zi}KH(?{qI60Aqr+VP8{O2^=Zw3hDM($#PM%<_zo`l0jdT zSwhLq&L#%ZHLO()J1LN~T0Pff&kn&yO8QLH5Qm20At{$tZ>AYf?fOXW%HJeH&nw=i zZyU%gIXIHm@4w}y&1|+2Tpu<#kI@LqOJjnF<1ZT8NAb<3$`D^vkQCxz|Ao-&nWrya z$ZQ>fM4+$KLIv=>6g0QFxuYOh5b!D^&q6kug*x-Wwh31FmoI<+80JVRh+_$vAMig; zm1jR+#E%hLrxcDmBrUV@d~$^#`xF#Z2rqLNqTA5=`?jvGo8K&l7%FQb&#}zRtbENT z`NfBo@RnJ0jIZ7`v}0G@pR)&{z|Eii{Wz|!N6K~@5J)GdVf#6xtdFYU@gS39;f_5! zIZ*<^!K4v%h2Z>+IhQ+vc2)O#(~P?N^YFMhUi6%GnMi>_(cM>(B34-!X5uC92_rIyAErQ9K7Q`4Q{n(e*z zUWz>QDbejDUH1Yp&+@I&mih}cY1y8i9VM6mL0>=_i1Olv+}Q4!i_115R6V}Qk>vWL z-U`>EvoA?WjpuegGo53Ostztoe(x^K2Ycf+OP2e8czd1RJRFRigl|1oNSgC)!$lw3 z`*s0@lzZGkyy&N(&{l}5jTfld+6Z4)8lR_ndZbse?1_!2r#M8O5zXJJJ~o_RzlzLtFNB71Q2?4sIS5mi`#nQ*Rg%!?7&a$iph~_rtj+c zarZV5k`)_H`viDQS}*i$Nw0Wjg>GTpHU=YI@@B(jWbCNvNmlRp&^GYsY@G3VlAyS$ z1l|(fQi70cQfaAE()KRXWQ`NUkfT?Fz@31+Q)iN87QJ7cgTWq2W$qS#pF$ycCp6fw z>r}4v=*XyJ8xhNIaUH}K`{h>)L43z$mThBu%T>;dN!Ixv8!t|Ki^WTDk|RE4MdWFf zytCEiFS;shqN1YetxqI_@_p>lu7K+nm13p~vmO~AF$aeVip%DOuh$uvV2l*?vdle# zL5=N4=mt_ZBibh>CS;gA3q2!z3=QWfL)Z19S#%9|=2}`XOX6c| zktf(aKNT%4NB~WHj~Uuk`ovrdm)aYfQkq*pZ!$&kEq_bye8ick%4MErTOsZzkA7FG zZ6bf?*|zJ#B0XK;FV`TS?|O;jZ#d3WGUVf)I(2GJx^KSc>F+h7b=wxPo82Dy*!yFC zWAp;eNYBe}ELpzw_wSD_BA2OFXXk!FG1*%yB!Db7ayA3a!(H82(M4Q|JNooiJvs7gwoVf&n6PBUKwz^?5aEGOUZ zE$2dS&=!UM0R477#?J&+;Xb0n@}lyL6jv|#=Mt+?)YP<&vvVfnrIrQS8S1$QYb(1t zXmMON&9juPPA19&{Q-Qgq$2tkqeLDfX0N7&2eXtC?Uucy&s@AAblPt`uPo@y9_WjS zk00nopsV1jd``TbscA%JD({mljXQ1JVTbtinNMTRQFoB-Y&*4Obaedh2`w4B*IEq~ zb>^;YF9XU8xh^R=S;|Y7>m{ZyT83KE6-i8KXf`g5L|E@_w9*b__NH0kgD5H}_3QaK z=r5@G`20FIm@*Vju#EJ*{A>h{eq0rbAxU2{A6`FTUY{olV>~q1F)?-W zx$%B=@va}t-h3C*HHrPsEZG8tZKNpW+}uvv{da(#jN?3PoSOPf#AElc1}o$ZVQ*Fn zkGgu4)Ao2QGzwCUy5|waeDrPfkmFIF>YUpYOn*vu?!fa~qq7kCOe*kByUY?E7f=@Y zu*ccFr$g*kxW=#hRdzv3A0!h7g@mz5{c?lQLD}tAnXel^OdR^@d0HRJeNut|_@bXj z(AM%lUN#n(Nm<2$WSJ9bhDNSATy;3bVL%?}|xlv4Tei|<{ZV04-DNwZ!9_6&A zD9*=}QYO9W?snB*MrzouHv22RFOo6k7TY5+aEOp{Dw&5P0l2i#{Y3=|7hv&g=&^cV zo|sK~R0G|A3r=y z6nIMu$zthfQy?IyA>{5uXgF}1E9w_o4|#sHo}afHsFgOFGy*{fxaOb`i<=|sD+Alh zp9;Y&YPoBd+#0z>6%~|h^w_|0fKsM8toO;}s&+R>|bYaq*I3ORsx+EVt}ftc0Ye-)yB!{kvz=wu2j1 zYNO(2oI-c$oj+D(#R}^g9UsHSb`HO)J@BbMINJ74^F@_zYonsg{Ccc2&3M^uv$3)H zqi(r27A)ZImoFkr=9ZT4BO(S+=bfFLdN1zWCC2f*-YZk@?69Sl^n=?VXiutKHVFe$k%eIr^ipvu+Pb@GI5{8e ziu@SKHLGlE2VGBkT(hZx!LwZTt6DO(LOl{JEG+0CoBtSP7*`4FMd#(?>l^NgF88iS zCgCxSz0rCr*2x-|Td#hfZR3sQ)_PM$i3j-@kIMR5AgUiinRZ^y5_2qY%6eBt<)X=c z`^oWzDuY_AAy1DFWka-<4JNdR>Y2_=ZnD-r`7%%Y7$RQl<8^Qm)hyCSj`pB;+Obef z{`-k8N7Z5JMJL}!OoEqlE;KYWr8_p#D}6?s7K2}4rT2W?rLxDJa+hSf2)S-|k*U4@ zQIQ$dDuVlRE7>h`VeuM+t|-%16$`pe_ayh0&s31|#DH$jh&nbRCr~Tqir?Mfl|H`+ zBBiv3qM33CFeq?kXh_oAd@u`JEl1UTh8q~n;Y9c^FZLO2QV20$I22ZTcF(`jfv$z0 zl$7-O^XK{yN8I1JWOnt8?yDP-`pg!vbsKA-iNWOSL?L+Zc{y5Id)Y0>Rw9b_l#Y{aN=V9 z@XoN%k!Zaq*@9}qo~IW?o>!)($gDU~OCVX25dsME`$ZPur=lZ_v+dC`jl#{jQtPpV zPgyD-B$K{NIJ?$i`=RX|S#?eKu@Un-Jm{$|v#-vi)ed*D@dCsuJ-UPIw{&m9r~CLY z@kT-dvCNx-ZH;sX6J-@;X}PoI^QkWF3dQWZp~YV%-SxDwl*?pH3MMP;Tyb!M63ECu zPyqWlPcaYaV0%AgfA>;T$V zDO;IZK7qFp=!SscV5B?{x_y)MH;wk2X`MiNTA)++`xjXhj@J@0CQJkd8MPL8Apy`{ zh8)Vu-(V4n20PlrC1xOL$Ie=>37?!ZLYF;DH5+G@fMDWNoisFV<9((-O5{@T@l}nw zppKW%_J*Y;d=?h7v?N^T`FJ1OS$RZ^DfjQ62%SnN0vmZugzKibO+kkDCD%UE>fFCIUzj7RsVnB@M(gZEvMpB6cb4_7FKvj_)zxE`LvKygK9qEEncY+9 zisPJH%IC!-zRT=VS(n8>F_|;Fq#hEY?cLf_VG@Q26Bz^vqo|fg^_G}YygGBG!vTM* z!t?&6dK(pG<&*iJ6tE&bcm6m>e3q!Ss(O8!&^XxRBJTk_s1yRE+pJG)1eoJ_1~7a@ zf_H1nNxvI;`iO>-Qmze7Be`?Ot?Ohy-0>yL=sj3a%Y)$ZlkDY@3J zo9A|2>+1QPtlujEWDXj+Loed~(r9~6cPl*0m6DhLJvbOlxMf>=+5RMM`N$O2)0tL) zF^F}Ugni(bZ=BI@ z{J>@`VPWAx)CKW#_3~S+J^aD$HqWaLDR^k3yL+5psr*szP7+W6yji<5E>+h&Ss-WS zvUTZOp6?ZupZWdbk;s^exV+K}6vZ!_-4nHLVIG~qh z3%L}LZN26`?shF(ac$8>?(^q~$Rb1d%uOq{r$?idYn>-N zDXj620c)f?B38dMMWywybngtba&Q$+MEIkl>ROi%SyF+i$gl_F9f7r)!GNdS_m+^< z90b4;7)6?_24V`BMIztUtUhxf{$jU$CEf3l2`6O81#N#3WH4z9Flj5h89Z;)rozO^ z8d`abIIp&)oJ`(6SEb%dNYJ?y#%;Pp^^f6q7mY0+GKUO&fd-a$T+ZY!QFniCMbjlg)liXIr!4nfY>IFJ?euBv1Pe(_Zjds)2*4V^E z!ib({2#kB&hbbc$7nkgcvZ5jia`KrXs=d}{I373Ar_PC>RZ8_Ok!mXWo{L+8 zAQSqQAmkJCR;~b@7F5;`N#goE=gg{rmUpXu@W$Wc9jF0S%>}RU`jN_|oj=YSqu8{x zv~zQF=1@q9`|lP0XH@dpqYmSeOuu``Z{GhuVwC=iZ~FP|&g58I*oS5+F>bh8RB#6e zC*rk>1E)C=P-A*YWdVF<$A$g4z!4=G1Fr=h(DBXY5oZdI?Mh2J;|SjyP92Xm`1H~l zzR3HAGeK6Pps&)v%eUO5w@~4xltK^r+CG6{w{H0Nf3#Q2SQ|DFVw|=w$%u&7mF?8+4z^P0NS?_xr;A4-T#Z&lUBwDxmfczu`Q)cqrW=^ zl15~9(o0u3OO{+AUbQ>$4}+^54@o}X7d^Lvg|{Zue5%kOf$d6CoYHgt#OIow+Js~R zF??zEVIK$kIj%I6bBEZ?U?rrKv5WtAg)Np3!)XIH$fr|PfF6G z*olm6Y)BAClA1U+qd(rINrobovM|(hFr2Sh@)2YbC?FjX0~sa*U3-57vY|4kPtVG# zuzgeqgKUiuI{>e{GlcU&$Jw~@%?UfqYLN>I*QbhMBUdA?6sU`2en8aH0}S)oOCyg* z3gV)mJ`}ii?b`S6-&dGLAeYF+ak^94oP!Wpr&{$qI=~uH9s+W1@IMKt`jMSWu*c%VMf)+nV1GFDj!%QGfh6xyIa`LwTBiBqN zK%Ei?Q4+#2KE$QpKv~+mx|*#I=ZpU)AS3IsDy)-$wh2-qJ3Bk;u@3XP?l2@~0Wkz7 z?u$oKDs#zL<$;ytN{lF$K+?5znE05$?P*4w%$vQ;Ib*J?Pg?T10r@j`?` zV8YKYP<(^vAzQDGA2db=Flz+LjvyFZy8gtxmt0U#@EGKq*N`1&7&SwZz53oKH$h3W z)RWu;#3=gEWR?;o%);F~S=NE4Ntl~wZQT)ZUQt(K0U0d@4lDpn8z0K?-Cb5O&CFvLnM{3Zr87aN~Z z>ob{1H>5f~80%oI{d;}8{)`10`QpC~jBMmeXfOim9=0BgYWsN`f`TMZTFg2xU-p3b z4n_08ck<{5&MX&zXqEuY4_^@TzJ3c5JN2hu(~kzJoWzyfAlU*>Y6OxXzhN?%0Rge@ z-d4@Fp^1rKLC{xlEH7?jOFK#U-Kc|6bFf_ys|A#DZ~ek`y3 zW0A8>P{IZXc^*Eo9HfIK!Wg3g%tTfnz`!!dIHun0$uTi8 zWx*+cSZNuiV^EOVB$&xrl^{jRn=>W6RY9j;TN&&e$d41MQU}NVMK@;-UTu#{`eNe z0o6jiL~vNpbDK|jpV=UFiShB;vE$n?)C7_!YIgQ;I3Yrq7du^BdF}n*T7bh%ZDUOc z6U4u(9G5Y{%`0oJBIv-O@-=ASE6C|q*hSEwhw|Ef=q^j=E@T=)!Df- z-x{RD10r{%`=d&z3oFQB)jfq=2y=qij!T_=p6sxtKPoClh#u1)gMn8UOd!Vy%FDfH zf)D3L5eN|4x4@7F0hi?i*(j!KKgY(ZdT&&I_;4d3F%f+zrO$k(9$y*Ao~>cilmDzrpX1xOUD98AE%e?p)Lf>w&Y*TF*= z2pEVD(N8GP*Phu_!$+|ztS+^=aME#w&acT1KrMD~a?s2ibf;{C_y|VC98dQxP+$~C z-_iyEVEiM#xcJ@E*?full$W#E+ z=zxRTph#UEE1`vn1BRkH0BrU!0}c}s=}6Ymne`T^QlY)@h|~Ow?FCRY|C*Q8Fk=xc zlRgKnBOu|>-U8XbHk>Tzjsvy~sHRXGkANWiX!e_agE#Wzz&@aLiw=WyISBo?(2nf` zExn%Cff}482x{+P5MBCs9+8l$MIQT{b8rdW5M{moexD(bE-TCGnT5;uteUmQfj6Cp z4y-hZDj(-ZFtJXu`3E_{drBP2-s5=(qaQ{VkUXn`_^=Pgl}H_hHy|HA>r72|_Tn zG;-v7zn!sAsx`xRvp+ounoD`$lph2o{^mJwiRW9T$ST96@X$g}1l2@52);p{u$!T9k&=e@c?NH%}V^#WoDF5dH@MswuS) zyv*CeskLg|ilD$Ng-FpA%OQ!c^ZFf?1>_Vhfc21&Q{XLN^4_AoqhsLPGhYT`Mrvwt zcxW|p4h$wj*P`{k`(S=+Reu`xdvST$3f9BG!ZI98z@e(8rDfY6t0K=QjvVy|{Sc?q zisIF-KbiMSETR1`m?ZpE6^MLrVlDMtH8`@6m1RrzSf}yqNyg2O*WZqBd=}VJgrUg5 zz`%12IWL%6>@ONf9?^A8q{=qwh+2cO@IR6;M8hPJa7~x%}10dkohe%-#D(p)m zfKNK|nJUN!`HTUwV1g}y68NRp>3$!mthqq@`$hK(MG>FNdQ=hoUEQ*GNC4y-{cwl8 z{e7p^(YNy;%+)wWCQh7v22l=o#`rUq51S1OSvI+**fwY9=!Gj=2ygwN>J%KGi*^0T zOixFCNZR zPZBHaNRZD&&X)P1<43LMprJf3Ko03`RW0vBAX+;_*sr zu?sT8&Pwr~sFfobuaI`)LiyJH$?BWycK#3}6y`E8QzR1}n~l1Gb}C~vRbUqL~6g!1nH`5#~6>R$UP<+5?AR^xaG z+fpVmBA-c@t7n>;d+pJ6=Ks~^{x5g`KNr;GU%S&=tBI@GxpOACdFWP3+o?Mp$7xGf z(}h=2EJqXJa#2ld+lqFd@Es=A(>B{7rlnJxL&(l_|Opg2{b zqP#*W?R`i1bJNADXX=7M*x|Wes0QRT%c;@;>vG&Z+BK)DQd+a*&&2d$ZPvZ)JB4>sZvOJL7T_SCv}5tHi6$okM>V#8N-N3zV0^vxRYu#xo;?Gw^aNdcEl z7W^e)%uE%8>m^P_@wH|=SdZc}gRsERuOD>vwX`y7-~XzN^jUeGB-7FUtAJHlIrUfS zTxBE{xyx-Q@^_E#bj;0B+A}s}g=67f?uIrOzCkGx`-XbwD{*7GmAcjWtqgHhVbuAz zTJN5s;m~o+AES1!nVA00KM&sDpSO)@`^NiCoxJzmjben23o8q%X(M8cple5jXl zUQS!4+OZ@zuP6L=bOv-*x6G$Xi(pGP$aa##6Q~@Cmp!nI*<%ND#5u~$ho4hZr?bb( z$;e6bQJA29BDqc?Meg5}9p2x6w*x(hK@VS#AfoMiXYhP77M8mDQkL6ToOZjbgll%f znDytg^S>wzlCWNg~{{XqIn=#Z&#;n;+ z{$3*&Ms9a1pMO$pSizPq|L@Xs^X?S0ksjqt%uPcrSZPY~JroqwZ+>uo5*}LV94$9x z8JZL~FV&)0PPr;6QG%4~;HwH9HEx>Nqkrf&o;5qtdDFI`h8Bkbba ze^pfJP4aZ({>szq>6z&aLd;wSi)NNQ!n^=(u`6dvx=$X0B zsSVqtrQ6#(KWU#FteesE@zHOb2Je?vDu|+zbAuH&%3F*`&_vL$ITyWRi+65svk@)e zh<&lvTW>SberxS<;RsQQrbDE$QoTJ@ql;{s@clf#AVGg3;1&Q0pTV`|9mc5WV z;f`0c(XLQN4Cmu03%{c3`{8m{(wm*ms3n1Z7&{%bz31g4%TI(!|`_7;!vv%7a!(e6{ z1q_5yK?NijkQ_!-1e6>E38I1$L?mZKMVv99D71nE1tfzc$)F-4NivAg1OZ8sX;AY^r^=dgu<7pi-TU2pJ!`FJ?Vf_FR<=NC5sX}zgmtXdscix& z3-DVc>ffa zUp;yZv)WItPAyHs$sB>duhB0-_avZ2Pyjqw>6(`GX~aWy3nEPjw@I zSh`D-eOmD{&0yeX+pdl7zM`LB^AzUQNjsd3wct&1;dS?wd-&%#Sr)ZUZ>HsEoE8#N z2!566AGWWP|G;zO!4d`Ax$*R}=egMhUYADzWYCcg$a4 z&+XvJl;ExGtp0HipN=G$d`qh=BRon5$t^6(Il)H3(>Lm<%e&+5cax-Yg{A#;Epz`%HO3cnmtx{jP=WM zoXcu|jHs;((o$(B&J3_u|5!_G-HMowiW!CxgA{90ujzkTSXd+M8*?4t^2Z1ReBUE|i# zvxJmr|69I+ea(OP}&IOw%t~#t-xpJHQ^tQ{V zOU;6_N1Ezd=K5W=`2t1VnvJZjt?%AF{2RbRb8|EKa$5Wc%T}5@jc;E!=vdhIMMmsn zUE9!T+FW2hKL;m={_yD)G9%e28IK>|ey!F@_xSPSFOvO@MVn2Vzk1Y#T))2T-d2yx z`Qm&M^PULC%2KO{spfGp^YknrBc-OcMZmOLJbzu%u1<*|f8C-F$?3(>(a}e$z2AS- z_H_JuP+wuU-^w=`<6l7QddTszveP@);q5oLHcEz^66(8mHP8!8 zV1Rh((ueL*F-)cpQ-SYJ!oNG;oZ$CYu z;LX;}>}1@we8$DaWw?dHRgFopLGNC>-JIKUw&?(`o*U7MLgIPL`IL6vTr=O}G^}Ii ztLS5~R60>Y7rW!~CIbo9%D=`F7f&CYKnE%zIp zJNU==t%kOcwKL%?_heqr9}Q2qWqt9YEJPK?aR|B zQ8G}HQkh=W$(xY+E<%y9=u`fc!K}`)ogI@jXO>R1C%c)vGr-p&6zxrDRm zXJ}?t)?)R`#mj$Nm53LAsn~EldO5}6eBHcGaIb7S-mFWjmE=KC-19vNt7-L0JR zK?$W4!6hX+kUJ%uQOI*8LCbGss$zD&Q+mHJfDEPQ^On#zgBc|w@3}^djOdHiyo;rZ z75kc3li%B9KWW|bMo*L5zO^~c$E(&nFYic#n5Wa9IYFoJ!RwNf4DUTTxjX;a{k)p> z4T-vgYo0H?i5hQdbn8lMy^6P>++Y1{v+8u!nB#}IXIjq{def#_*0_-6e-C$h4zKqH zn%&`QZ3E8Sc{E=d&2*hk@T6xhRPXMTFzd)&G>PlmI7GQ7BOsNhd`ka2bHwq3SiL}^ z6E)5Fl|#mX(Uuu8;eA3$jTuh_H{cxuwpEU=b?q+e6Malxbb5hK@Ex=7{Dx!jVX7Vrzj;YC1Uh5tlvq40}|(2pqbv3v@Ni0FgZx$s&j z#%xhdEn(}BBO7Ilu>+S^0^OfB{?={XK4HPo4j!iZ=W{^vlxFD=+Oc|Ei%m||xr~qa zuT@s!UPZA6eFafm?X~mE&Wv*2DQ7u64*59X%wOOcvJ>$67FSY-e6yvEzv)cqFYtq2(HP9b>6+|FXCKCON))= z#~#A-IafvFqW3qCbfINDS981=_AcX{MhLxV0wF7$(v8+_WDlgEHB@K^{m%Q9Tqe;K zyk7ghj$^enF{bN;p0%p#bu-mtD`Yfozk7G&)YAh34K24nf&r}Zd6UN+FO<0O@xg5d zpMrPZcwXNI76VCA_3+G2uu4GVdw$QTc>M6;#xmnJlehS&y^@lK&>lo{_mR&$lfdaY z*&`KR>$fcb&??ZfVCD&>5X+%3?J$%`cEyEP=sAuarxlJC z&3tM?AE%SE#()}n6!f9Ew4u?u83|mb-c#jZ#tiZm6;KZ$-)R)i6$8YHNPvv54VTmm zCKPWX2XLQD3Y&3a;;!U_nvTQm;i;+^+ zVmcX8G}H%tcVr>KMFJv7#MKX5WyZ3boJUi0M+T#+yN_H&lUD&cm|Bol8R7cHx?sFu zG#i@NE5#ttwh4%YGR`;`fDp+<#D*pyZszMW(sg196NzSldg;MuG5DwnTtz6j68f@YLL!AMdvI)jrOJM`vC@c*>#8}<247Z-;${eq7; z=c`P6dGrQw*&r9#b0Eafx#1YsaI>yv3q%58pQs1!Z>cFO&4b2m6WQ*&YO1LP10gv& zW&&C0nLJ51?Z{0^c=d-x`VFOu)xA^hv!BlgS);EjOwrFbu7l=SEn-~knG@;$b#*bL z%c}s=-0UaWiJ`Y_eCrCMI>uU&r#s$uaQ1RmZ7W()+p}Q?~6rSpnmpkvgvwr*G zp%UhJQvjD)0up4^(a)v@8A$@d@EG*&{<`;8S*pQAI9V&2rv%4~p^c5r(SeZ1k1rvi zhmi0{*PNZM7E6wfCjU&O*|Rehj=rrd#bm?$ z>e2!K>)dfU*BT0$MNkeje3~zF%%&|Zf+S)}cDXAPUfa}-7KgjR%uW98Q#ufO#u*7j z>cJ%o)9Uh5?>BK&{WZ&Iw8^m3$(<)p2_*Rw!3C~kNec_!JW>uyP$ke<)0i=-p{bd!^?~sH=vTJJ(mT>s zT*yBR#YGz%5YnFvESMO6)*fa}P0a&(B<2MA9^*i=&nvrQV$0werh^{00pma48_376 zYH0401DGJ7N`w&6f}x!)Yx9B}_mb7@lq7Alz6X{i1AF_l-KWB05l^HZ%m6|v&k;L<_<(=b|OUuxKy zW8L(D)phEL_@6|8L>9$!h%ej>AI73?=;k^3zrQgKAQS|>`?-o+(u$_lAkC?valKJ6 z{+Z5L6wkRmdToXGU2>WBPe-QQ7er>Yn1O42;+qo9-RyOZJ#S@hJEUV{{AIO=JT{C3 z*@+@u646Rrz7I^>V6vd{(;-oGPGcE5QBmNpyt1JD+(SHmkn(cic^DWNsKf{-Bz)v6 zQe-V;p&$`{Rz^0hU1=;Vw~vu*f)&5puM-ckCdBZj$~{rsQ&*Rv6;cBi&j?KBN1R|X zOcq~WS=?~`F6Vsw_^mVqzM1;aTV(p~9>fRjp^tSi@+#0gwNM#c*DXvO7g#?bn4J!0K}!ByJ(NKw-sb!nUKQ=j{BB9qWEk zQH*5M?Q$k>?Sv%)ysL7Sy!n3jrvF(x;MMIt*vuimtZU4bsVuLjuHf)nM7nKBO7_u0 zx66;(?X(?jk{S<=2+Hp|*dKV~^dI$Ck62!~Fr?`>|A^PU=NIzLZQxGNrD+(hQw)Hc`joJZU}0%%k1mGl9>wYmLJ)6ImRwXZnJ?U zrGT}>)YsFCWiePwQFw2EA)dMc$HeSxy|rAT%}CbOw=jh(hF=wz-->u`I)um}>|HJ9 zta(G|PkOko^jw*;)!(geXUlchN#{{t$S4*%xHM)ke9&^dbZvHu7Bde^$r7h~G`qqN zrA@m})`u9HC6bu{|IUNT3ysIPO#8ccb53|2Dy5?7Z%5EZsZg*KlV|hZu%9nE%UJ(l zE%z3#EkA&jc#eakzj~A|Bq)7sF19}==G&v-3z}*M!Sbq{w)CA( zvFb}gQxq{PI;|-;brU(?KTmjG#DM|-IwQbw)SD%K=kLF(T>Ne^14puuqE1#v=$Qir z)5sWI=xsojt!k1hbqWvnA-H?UjDoC4g#Z9~${_AM>i9UgiqLr1jI~-gg^YXCm-{U{|sc?iUe*LMk)oR996soz8A=c}s@f$T(nYHd0kv@QYZgcJPGy@f3I41f{_@L8*w>d-4`FkB{Onmxv=sk`T|sg$ zUK;L`LonkA z=1w4C-5L3@kIxtw*&>Y647+#;=35+j41s6t^Xu0RxL0%_zfVKqXTKvm7+$Q;Y83_E zrPu>l3PkqR)szF5Nr z9zJ`Pf=U>BuOP+%OE(g!4Qy6P40DEaM*YfJk^?Ro(}A$ciOL7B=-^w8lEGG@cjbuo>tYPH)Oo^#ceA9LYzhHpEX)oJz0wk7kZ1KEdsqP z7^AepTw;?#c%%ugKTOswji|@C5Zo_c9b|7~?(OvLMzUzx8tO#iwo+<>snA-NZl^ot zIu@ML=C97|3w0E+Dx{h1cy*(!lTmb}K7O~bh)C+Y`8V|}k%dS1U1#?6$Nzd_o1$+K z@gD%4F^Ozd{Nw8#qB1+<`v@y4nqxk-5WI{%JwU#7>&0i!3&#u8ai^Qq#foEr-EF7) zD`gz}Zxc+1LTMDz`Yc~xPMcX1HUrXQK>%nY5=~;y?|KJITMD*heN-NEY$mUsD+k)Z zPX!}IBYZf*J`pglw4!G{6$V&qgb{Nr{ft70DLetxS*#2MPfWYZjnqHCv0F3pyCN5f zQ^Bf5oB?05E(U#fEd)@B2SVv$S?tz%_?U{&bP_8|9)5dlFUWcZNKQlKe(fQ|$gwhZ zpL`Mxp_znJX13eOjHYD$GtGkh7GmUhHQ&2befrc|nYT z&WbZ53u*Q&MlbJM=C4$y`X}EUo7T^za-DKBgn13&l%Y`m6tYcZw*EBkli~dFmboJL z{qj;qD!atqPuLhLt;8g^9GW!oJu6IeTXRj+jY4_1O0v|eXTVN|v!=v_H>g69;Wa66 z)`1`5b&c zr}Fv%`8@{X2dK^{=OWXt3=@ZnB+M_d4f? zk57?rv}JYM{05HJ=b?cz?0iW9W?Ko5u_fs{w+H_(6S8$?M(T>2$&aK~bG)etUlN$q z$-Z=-utE;Yjy3x5sz$T*%_aUn_az+V8RE<`f)b~Y^9v>VzEeIe^GVE=D=Ni-H2X(o zy>|=#pimsVHw5as7K)54zSuC!U#PFKhv<)A-}X8SR@&e5EKOK0FMLoraC+?v(N&N^ zx_cLnSXx>gEjDlVw}&#F@Mq{8kJM%t3vB&G#rc8Fdu7#$;^vcls7hX55<(F{v z1PsqwFDG_Ed5L4giGuoHy8G###rh&eLnr=nWdD}vTfDCQvO)XUVIz^yBwpyRGGzm< z)x8c?z0Si9zR$N=UeuSa(Wfa<`9W?ME$j@Dj&PKE241#Bnj1vm^>RB9_`1Qgmnk)~ zLM~ZsNv^on*WRChDfNGFu>2=Y7ML9W2|LWcf3r8nwB_z{W>7p6Yla_}^*-+C`|DIK zg(5C~r+r@`ZFga9(meeD^!+3kxkqiIbOV>c7hiwpsS?xb`#zs(l$v?^(j;!2U~b1Q zxFLMlHVDfK>keBB>MIz8EH8$}24%_U=~jJF+yibGsZuR)NL#HF^}m#=of^SA<*#z0 zP|m%?&CNHl=im`cY+TZ2E2!vedA_i$Wlzm7l-r5;eE0$UlNvpEU8v0GMa$w|@(W8> z@{;k4b`-GO5E2@S(HYwINjtZmM}wMTpq^d$3+39X&ncWC($BOfxO}2zpJkpVm;UuF z$i1sOm(j+i5Wj_N5rdVq|NMs`Y{-VNoD+aOg1iSq zSYY)k!X&RmqIlevTkz|)0~c;bdQVqw(&3~;fBOj=dJe*0jvB^r+wNTJ*W=HYjouUh z;}bY=<^j#V4X#EBoNtn9lCMJ+Nm7e{6k0~ndJDrXy`0N@2==VR{p*Wv=G1q?3QGV< zkm6DvS<+#kItlOkb8L;g#b{9`)$h_&kRN}NCxvp8j&GU_8i~04#zBD`HB?c%5M75H zYNTPbNwk^hTENyiMmC+rpLKq7VrM`YrR9BHgL+Mc99uwkPrM>PzNC7f5jJZ=ZqdKD z>rzb||3Y-QmVG!<?Vz-ysLeW!^20rzX7+kpjK@`iaxnq))J#s z_%W&27kkT#q_BH*DuDTYZFC~F>O&_vkD=701BwIHfq9tmao^G|=F*xUlH9Kn8X zh$Jymgty$*(mWB(#mPAWH(s;R#Rv}9aK!iQ1?~&Z_FeP@dhsDXK2rR`!>x`TvLV8) zYpW{@CV5+=xNVblO+gaT%k5W+wDF#eU(4?-cHndg_~TeQNNvo4d{_*k^9$lf%-nld z`pI7@96Jow87H3{3qx=$xq8vb>Z&SdAho@Mf~q7V9}R~D$q|fz82>1K5WK^viwI64 zmHfk9Dj)g>S5Z!&{V3c9!KtY5o|6bP+SLl4)v20CmeIIwqxSy$65%#&04oR#0=B;3 zGSOuU)+NSwes~WLpyRu_W5SO`h&h6uJpcAv!;XQEj9axY_Coy$24 z!E+}8O3UC@k{hqu2weCQ1cy8z8nOBj7b!;i_|Km|mlkWSvVePHV2~&5AFO)C<0VXc z)J#Jd$q;_vFg%DOx3=5=LmuM(8H^6HQ4+S26JCIiOwm!%ro!hFi=tA(!bSCCwA7 z7AB;MuX#TIGSGNDD8&x5!*Wby9igANE<>cRGTy|)~zef|s&4^PH7Q3v1+7WzKXk(QSy)$iFI_{%@M zC|(7xS(_$kUIWB&4NSQoa_D)ph8Y(huQKcT3nk}{m?S^MTj?DxCr(7i$HgTgJ;gZl z!e92qbZkI#YdTV}7`PUi4o0{|5`cE_la#U>&4udc0|oPQAM^T5`^6}IP!2*VXbLtu zNKu6jT_}>;hS^IdlyCY6f-##4Ali`|qz5XUJDMXZzbJyAv z<(s&$Q#{%~SghB0d>(han-NeSh?_nYy-Hs+~I3g2jg{i#b=i%|QQ@@+YEK#}n-2 zEcpLqKymVV922&Wr|<&d$_MU8L`J6BrsW@pMcNQ79a(n9+Ot#;R;hND!i+u^Tt6=>seX7Bz|S2<0V;?-6Hg1S)>~~ ziKWG*wV^v!0;g}}TxvK1i+K{C=v}lobgXh1U~Mp3{I3c^AUm!!7<-+TVNx*FHvSb1L}CJq6na92Ebt z?)}#=%O4|3xlew=pQj|JFJK$fRc4=C2``1|Zxo7@0)R*%jg#)H&E^?Q6QWjgxco_> z^!#`xN)7(r(7jG#M5(T-rhZA;Lz`;_)J-vlR%GUZgD<-32-<5H*V8lEnOl+Sxpi2Z z3s~|KV;u{aJEgzszZU=XaXaT$}$_&o(LDLqtlBM_+>W>vIUX=97tWGb-b#MqkIuZxbXi(#GS zr9$~?!YOmSokA0DQ>X2ga%Y!rWIl6^*|&T=RA>9{*aFILmwrwUK-hZ3j~(-*WVg4| zi{ur{6D9n|+lzG4$|co5?Rq%Yv+to-?aBO7AJf;#=AntSpHpc&ABe;2ij(|WvAg8p zur=`h2>{syjWr_P%(PghZj?Tv$od&Xq%>A0IKl)Xe~F(}Ix_leUjj$2rc3(M9gI@G z^~DEbp4zn)38^}Y7HJEu^YL@57T9Ddecnzkd9`YJc{za;aQKh|N}fEUKvZf4;En?$ zeAC1aYU>Dg8Etf>Xt>kz zk$cPZiozm$rkRXUaKGn-=JWz%;8llly1VMPal`VsNSCKg!_9yOF9>3Y@|{nF!|Wd% zOtf?ejS@(bYqxuS)UZVh4k;pQiI^75=5?TtXXJ_>GyD_Su1z|U+;kLHwrF93j+y3M z2m{usC7F*du*$j_R#nBcs~tG#)b8#;Teb8x7{yeI%NB&v>tg zyyK@rgRaH!cYO7B5651&U=}!DH}k&=%5xD1EVLlJAP0&72PdaNfe!>D(ft13*Ka*= zG(N&L?BwpI)yc`)5D1ahS<2#>nmZhRib$*oZ~tm6#!X}^qQcnc%DxyIb1fv5A(X}U z#rEPaxA6?61xQw9S?9C7MhC<`cJ>*o2KPa3ITzEu+;8gl-_)5eUAlM3JL zsnwnXrC&{)`beqK<;U_NvkBztj@)4ois-o|a3|2D8~v>7d1Um^bY*~OvacrR&lAZS z%}H+)7`E-1aSA_rmK*I0&1+s;nm_l&7T>TSVQwp!Kb%vwHCN{CXPa@Cp#bTDcP7C_ zE4}V3T$PRex_pP*!H8zfZ;`uVV^3C^OhtuWER)r_I`qd8ccKkpxLnY@WQ}@>2YFe@|It2`%wXt!NrrdJ`XB;5_itxmw3`INJMjkhO4k3!aYMnpd0Z}G| zu?U!#jiWJ(!97~AH9q$&nIB0OnqZ=wtjHEkkhS@4X&ZTO$FjGhA#M}5CS@%n_?;^L z4CZHip}w>K*7f6lP5h$5ZhDF^68j}Yj53cxyiP+Gd;;$9@Lzi(wSX;A-~VpvR4cJ# zdFcU|N0$r~U+6|0wA>J=EbIEcp0(J`QVmAS*>gzDmq6+s2)F%yaltqaR=_Ie5+wTl zsp_VN1_mzyo0Eaa)Kpakb3t#~z)u2Z*`__yG9W`fWbDkQmd{FJT%C#QFO0h<$|)A_ z;aT0yV<|uCs=9l4($(X&_ZC<4i7xup^wI{HwNxR-MQ=NFDH?V4FrmJI{vhZb@{o(X z9rOrl328J#GkPLgDC_b&g@{LpFtkEr9XJpS(tkB;5%pmS<|3Bh`htCUAOWl=HqCoY0jHL0&ajG_PkF9$y;Y2rfal zr8B5+`~XY0gFf+5#yQOHeAkB3VtLbVT`~8^=Lb@{=XhpZ%Y7mi-s-i$z(70&r0Edz zz7@Up&jDHgmDvfyAL(y^dnZH|E! zdGOa9WhiYS4EZjOUAH^oM?fbeX-fzW{$1qETt{LjY9JzgV^_c*gwg1rW%4MqRZl{) zUSzI2^30YXDCWSu=YPMz9t=>&6$?! zBBx&|p*{W~VP{;18_P?5f_UX;Kkf>;giK{mfaeQ`!vW)8tSDL5mxo8F1ugms3@^eE zVP7C+>W(&?u(tc_6#J?xs5&;10`s%bgDORoN3YwQ$8ZpVK|T=hW6(jrYRh&!DBK2ZN>(Rh>t|9Ub#u7*e0|t#u9H zXk0*JB)}*F%QGrW<5J(^C9pMESS+yu8=z?q#*`;3N`t@D4Lcu~*RBJbl1Qo~B(NsV zaxY*pmGJ&CxurSN9)5IV93C9Pzb$P_IG|WS$d>oW#@eCfq2-xsl z#F0b*2-mX>VxpG{0qQ1uaM^ zJ&b61!P%gOhz+CH;i%7DJPsTj9Q%U{!j8~fXV4rwrC1054ss)AQ4EgUU{|PzqP9!H z_3}KM!6SD$UZgmDV!h3kA?~sc`@&N!D3wE=D(`K+M@#9tdOiJO=v&>SHS^lb$uG&7 zZ$^+yjb2uF?p8faDE(2A3*ZT4+$Yb51iADm4H+%{CJWvJHG4C{pomVFRnGj26*)wJ9_-Hus1sjp;Lweey_}rmCto40ffqOAxogEM*ig$0%W!Lz0VgMGimFbTtr4sy(zpHvA@a#T~-r~JcM9-1(_h$c^%gw-jD`{@(i zrSH&!n3YA3VlC{kaJin*9EK6(_#W!ijw5v!t{x2!{}LhAQ9l@W@>Bb=6Di|D6K^bTns%{0-aN*wzC;z*iYlW)5$4CPY^9N4@qME^l z%MFXlE~Bzx&Xy}%-dX|F1Crd*+fM(g=*~9*Vkuvym;|~ zGF~6T8V~7RIAAlk#t}chyk?9M2~|~98^cb>14OIO!yM^ZpJB;xwe zKvh+Beqyr}mu+?D&dcn`Wldob5d}3h8*W|!%9G<~bf{76bK~g6@(jJ`2G6erbjHH#!;|Bz7JaU|R6nEPq6~g+<;P7;Ivx)mc+r|7va78JJv==bpPrw| z_yb{XEm$=AaGy1z?$MR1uxs|Hb?BK~I1Kjd^*%1xZ!qg+80=i^A1O>Hxs+um`Tzcd z)Dm)g*(2255h{OACp1g&uMK&fUrxK$j%_we(o(;Vw4L9aXsPS1sXj$Er4tL4=e&0QGJvPSYl#n!h zEH#VJt2deZo-|&TtmjZ{E}oJ$2Gyq=958eeMKztpszXp$$k)R%%{t*rsF1^$Dr#@j zre;*(9l~%_@rUpChlYpc)e6%B8diDQI@(MyRUss=rH0LbtOC4GH;IEK13+|YZ~tE0z7%hI(XxAi)U4$*8U2COoF z-sOf>NZ7md>GzJ6_*26fn-@v)*Xo`oNvaGPORA&{PWPEbv+19n2k-kHM8+q@_w7p= zm(*66ciWfuXChVl3Iq>q%yHJ{abSDY$6jR-{(6kGBw&?19I(>fqh0C^{(Uf`iHOF{ zCH)c-%^{aw@@J7W>W)9;U;cwk`qT2%DN$5!pyv6ox!HiB#)PxJ8z1%U@7#<1snKX| zZ?7O5PFN;y1;7W!um13TpD!qUM!YBviXoe4X_b#0>^#%(`(k$(6Dz$-CLp%DYLTAt7|IwIkaR2NtucVz<8Md_f6IWYnr`r&2dxQG$7%yo>(PFvJ z)$-p{n8NM4b40IGg;GzAFw&V{E7-T0=Uu$Wh;(o8@%2e_yE8Q!*Vt3; zs#}qgoSYmL6-80L2)TNA$g1VKNk(X9@$vn7=l1OyzJvrBxUKEb*qdr2-AHF#PnH#> z%HwTAQ4v0*LnylCuR&q$T39S$#5VjHP5GjMr1H+)gtID^R&h7mI@+&D7p5Whr#~7C zjb3)v)6>iLFfjO=FW^)mNFbC|6(Zun%}gFPQv9qHvo<-|6vA29!!hRt8hs{EyAMX? zg@r{3c)SV1;wNf%V*$P8J5*IPk3b@kJKMVti$`QSsdMFPYr$}dO^kfLwStK7}!$MF>v{n^ctM87tl=$g>i z%Mvkh&dTZe1((zw_O64nZz3NeazU}seN0J2Wu`*WV^pFllD~j-=sE zYuU6$kIW`OfqjBJH}H|*5nL8Pwujo6^5czo=_E1OP`dC zF3Z+!=JF4+J-QrQ9!hYbK0F~7 zl~ASOv6xV1Rz>yWLu!a`7HmcXuw4tPuer~1w6)7lC6jYbQ)TGIVn{E_D=ydwPbO-) zO92K89P&BK%;Sc|wqHzn?|b)B>nMf$TjWZhwICNP_VS3v<$TL6k^|PmrK%qWF1%0G zPEq|63k7PhU@%zSdC-_c>3tVDo%6zl>(kTICZ?v=US3|-f=g8w=rEZ3dA+E+&>?%0 z1^PLmscEl?y0I{5EU2>*ySv4N+B(8DM-{uPGSDYsFtyarGL1t z&ln=4gQAl5-ddi>(2cA;tK>L4T2WSZ+r1-ch(l2-TpC?hSKUm${*Vt>QBi4YyBT?a zx@|rX9X?qEgY^Bs^msF-xnLQ2t1}%}|B1MD>ls$jAwOn+w{tGIw4~(EW5+ARSA`oqHS%Vw3wZ4H+)G6oiF)dz()f?pPvcU8q!j7QH|Jg z=W;jw15-_L0r-G%j-vfCwj8~Y$15Z{V1h}_YBW-?hoIswtL_g#4`R>RdH8o(!o5qI znwwHjO5(Wo*>bIu7MP6>UmQ%BLx${4$-V>bxQ%Uh@=H>Bx}M8BM{4+T>Rc^FIj{Wt z{esNdYuv3vUV!Iyef?TaQk0iBNs+avAo+dGP|r~F#%P5vmn{t92+-ky=pUZ9o42Ul zU0rGr;H1q5yNmXId+CnVnug?;1661Ee&u^94fur5L1e;gsFpe-dm6oh+me&Nbc3nv zSaxPk7*p6=t>Hu6%n}V={0i2T!>BdjCWaughod)lwknd76D(c)v-tQA*X5U{@}fXh z)9=K*zls&UqM_j!*689yV)g;%V2^`RrFD0wEYx+}Ujg)4%sQ43y1aHYZX$17g(L@R zRlh#`3D}UDn2)yrXxVZj8Mru!?dSLNrHBFh&lI9UxuzI4Ha3OnZZY-m*KpZr6VTOI zSX+C0Q%r5Z1RkU;9MhgChMSt2LR0-|O%4#7I;p%^r-Jho4kb~crJeBnrW*?Om4mA@ zGK{gJYUxhT>cxY9rPM-KE<7a(SbP2X&o1p%#aM>poXDHw%l!q$!lI)1+SMSR|C}!i zJH9Ha9$eQDy1d=I=)}XTP-65_mL{AgYis3*SI*L6fW`M-6Py#dqNi~SlS-6xdj9-4 z=QPV5Yi;~)*91WSd6>e-pOEGjxcx=k4>P!M=P>4~y!`Jsz$Q^^nKtaO<0ebvmP$@M z1Sd!Q>F+ZY8y9(F2?Gk1P2Z2RuDU?`ELMQMjSZbR;<`RgYYeZ{+oem@J6Ei?AP$nD zy_w$=x7U0%te4x`jMbytOkqq zHV2W8BbDItit=`$Higo1^1pwmZULMS)RoENKq+ni(xne+Y-q05H0T;vs~5kBvfo=p zMaA3i-@oUK1GI>Faid$e7-{yd{RjK(MSqe<_t_H?I(Ol4xMO{=M>9%f_vh|V?G zkM4UDsv8=;{wgXsM;=n@$JHG8lNlKqbjZPxwzgY~n|UPpzDc(L)7{0g!=`-3xT=FP z66xPFk>6$t>0zl$cI;0_C(!G#9rjK%b9ejOT_vZOA0kmJ_ge1f7YOxVb{0-c(+bLW z<`opa^4o9M!P)7oU;0or8yqnbsZ66G0_^Qa9%Ad8T(Wa~eR~wcwH75~kd?b^F4!Bl z8#f-+`i)v49fE@1g@(mPx4-z0NE5Rj8LuEGSO28|YO2aG>&r67T^ftpG9C>3za&Cc zQM-4Zk1Bh)B>Mg%Ji)gH!E^;g-ceG?rMNL}a=7;SM8w=0vbo zmd_cQV;mn}DE-dg-)DNAW9R4QlrkrZ@%Y_Az4_w5qoR5w=^^fio1y&+c)VmF^a(aK zrtbOWobJK)%n2;GyEK};$>=YL0}V;EEWF-XR4cSZ+M8PY?2r6pkXs(2t8*h|G{ZwZ z6cM$y89c0AJ<&2lKvRE??GsJ9dv4OGR8u*)cAS2<8+?K{My<-l(MayRsuX*r-0Zel2x_x4ooyfMc;ay(l4wxo`> z2H3jV+AmzK#OWWI$l+KnZc#=3@VQ+|sdd`Rmwos4YrF?3#b#pVZsZn&J}PK-G?C-> z37#R(VpK0leIOnrDEf~!xEx=7H%4Up3ZIut1%nwNlz0e_cNDvdAk-Gy?XxFJa$8|( zY3aW66*_G|s+YXTKL3hStGa~j; zyHg*F#@?zr!Ntc)Yie%iRNS3=jVHfMf-e#OvaSs#`Pn{r@MLqDTKVC_cm4oDSP7Fe zLxT>-uM)DoH071Rqotu*KOA@RN>$B>_m%^LuM7rX!!D|zs5ua`=pZFJI4gQ z?K?O?znSy6PfuzYBU?Q1T^b7`Bq>IK5;KE2j1J*oWAmh|TLDZZWwep1u-oQVW@d?C za2m#|FV4=a+1v*D^0!KlGjIx3h35PhltYvYV0_nfd9d(?+qxud>A z__Tw)dHqEZ^7hmD4_@%y$-{lOx!GCz0xoA5G=68M9w>K8s+_eb$3Ei;FA%#S5E}3K!I3IZ1=H zqRbEOish=n_i}jNx)k7fhT{J(o;QCO$GP!Ua7wRZddh(lA2ih@q#Y#Llg1{<3_L$l z`h!yRO$G+@TwhCjbjia)^it$a$AWM~wPLr=7lHAe(O^igx}Td1Hs$ES)HUBM2}q;6XG;F#^P;JA zo1D9qJk62R!TX2vZnoiMC@---o%qm3ucMIv5+cAsj{TQ{Fq>D9XS{vAe8NbQR7qB|T?=$-9gH zx^;6u>PVA6TB*?lI!9M%oCtfKBNN+xiGKZ$t+qTzfBBNZ*}q$S*ooEK+gJf3o-y?h z!!&5X{f*BE<4c2mH6c~#M;~%``?II^8CuDOQq#I*+L&W`mAt9{5or4wxUoyuieRxx zVbpG(KpcaqDbWmhGwM(55E-YJOGMT~2Hcy4B<>A9GbCaPKbVjNQXACE9+PB$%zyLK zNMwAsvZ5zvijqbPb5N*-iKQWVO^^N05Q2Lu_#z0=-sUekdHM$kud4J@9v^CoiC5@( zve{URd{Luej`HyzA-9w@D6)B1W>n_{oR5_y=v>qbH(x$z-)u}8UKq8->5!xz|I9!q zOeRZoTMRm*88a!I6G|$tKPlj)e2o+8Ki3-tu=Of+dWTP({za$+`-W^nU-qs$WFexR z-@5b)tPNE^jzU==kVExiS6w6+h>@&L8d_<-#%BUsrz7Ac@rzd97gl_jkCSEATGEjE zU6LxeCdUddF`m{D^t zlK8t-lMwa0zV)OaYJIqxV7~a;7N_1+K>D!fCtq1xQ(j^&IX6Uq_Nx7GRC`Hdzlo51 zfZUhs>HFLB5lFAr^_;ALw|+mw5BPN0t7}2J(HpDFqUB>w1y{+AWtfS}ZO63LcG2kr z?hNROqQTh0#kz^hAROl2RwbtLsT5uY_{()bG4q=@F`a^nkaesY$ z<_$m;Xsk&|lKK@zrs)77V?F=Q<<@WgSISro3>GZLkZEaYY1ik^eQYM#4Vg)rjByGd z4~lCDTf%Q_gzhu!$pheCX}Fx6Tvu=J$e@LOxr8qI&6a8{adRY=LH_O_tjc5Vgv z09}N``Hs~<-ocF%*-LtRD~5^ZRBuc)hTEgj4HA(*RmHCbwpO^x>Pnpn;C$@6;LQPY3b<%Ao)StA0;W(2n!UG=0e{2inMWc zU9PwA_b1ALnaR>(#_t=QNy}gs+vtQpW zH?5od0>@&Q)*M+b;uh5p{D4}ll9MNp48X^sv$GTE_RSv9(j<8jOn5|zhf`dfE{64R z7zTS-Haq*k7s%gsaCm2gBmy)oyWrp|^@l6>6s}$!0peRVR>ds<#h`R%=tC_)cqIZp zt)QtnnxX3cjELx!@a@Jb4fjF^>*$#r&5&Z$#}ilY`i@i(1y~WEU1zi-0)M0|^4z%o=ve_OQ^~DO3*_zt&x)xCq*PEtC9swonU3turE1#4nG?RP zv0R+hpnz2X@gL}gF=_rXva(L5SjGB(CYA5$A*{){u!^$;`%2FCu>ggVlaVpPY;4aY zFIM;J4K_urs|8M7pPQQlQh@jN%JkaWnw6hl8ONh}^ymoODlqV^bZ2jG@A~@F2M-=x zQCGLcsNHLYaS|9v90Q;Kl^Oy?(7fKG4FR7AGZ^uscRMdmVxTT)CiLew)u&IMc!3>f z^yNJUYmtJ-KY!j26bt#r{V$)!!^@Ks6K!p5QaN4<&@dSE{sOJQso3@;aRMke28cFI z+JC&x64+OE-rl7^_b7aRM%IVkmxn3*_U$gM_9q6twXBr+wKxY@Et~{dTVDrbF5~#RU_Y?O(4;eG&gfb* z03(95Lg_C#p&LBrS!fqSQmid>W#IA(3MoA;zijWV_p&$!&B8ztxMU56pYJm>Dn8Ln zS~D?X-4kwQXNR@2vP#X)t}x5gfMWzCbV>lVWdS7%L}KIOk~J_eAbLL28fQM#DB2A2 z4~$ekJ~cqJ;OUreOtLqJ%#)Uzw_J+~3+YIRoq1lMLr||a_W3Vbf&a?O%g@fw%VvJH zL)MeYWDtN1+@D%I#3}Drug>Wn?yZZedA$UgrRP6dHOH%;os;9%Ol@gt(F*$hM0#QJ z@PHJvzv!j_j=!>LE&iQOThJj1oN@sGRj_kE^M`Rb z+z3B9SwfdmWGVs#yv3F2k7IQ~1(z;e5(3mcKAvykCx0SRQVgCwv%chSo~lAF*Q3-F?5D(EzvoRKcYG_v;rMUgs3MieN$X3v=5gPgRdkXID%G?F6{z3 zV^>$#0B{p^3@kvY0@pAsEbOuSnUg1T>+0&(^^AdC0qoWYTGh3AfDPJAV4spksywdhrW*wWYniM$V$U$)3D0~$OB48|Hz1R%Ic z!5tgJ%3Yy-)c(O1+1|t?9;D(1z*68RTgLzM&&#i#Dcy5xO|n_9UR_a9sa#L;*jbxn ze0x^_vV8-fq`a)GF|<3FBMtZV_C{|_gr{X@65hW34M=yU=JTYI}aKu0kRzdkW!Q=YM8G$mx3w)3l)#%+$PytlJH1pIH{HrKvSC=O}a zTQlXP8nDXalagBK(4<13(gk|!)$>}Rf4aB7@O~TBl`1Ey7ggukn_UiYo$;@+gr%)* z+87C035;HNbL19Qx|gyGx++Jgi;ab$7KhDL$a__Y_=muj=SaPF70#uAK)C)!2d{Cg z3(UK0mLV-EDG7XBc`2!n>(_V%&i6?r>s*4sXCizu8vXNKht1u)C6fo6Bp`aA4|e9& z0eb=W0RA9$ffh@C=s$}E#v z35tAidv(TVusD%JBoZZbceRsuz!lJNf&fmLVLcX#GXn;IrJUyV`n3ZyWD8?+=T0t| z+85vRN=nmPN#Dv6UbDFa+h*tHWk)YTD+~76!FR zom-jUh%3&22|D}!qE!(AP<8%5xblk(SUQL;}gDaugdNT|s(JAdwn6 zC@KolLhnrogiZ)0w7WCzz2m)c@B8ui5ypVz+iR~n*PO{4-WNBr@3XBAWNnTa-&+I9=K!|H*Sy&TI|)tL^~N|VCu?$#o9*qN3A ze-j>#1ov@jP0Gg(2Q+MQQ|)RAEh9~pi!~$xyCCCq-B8**b%b13cU^PyPt=>x(5_fH zE5BCFb(i)uo!X5LcWE7l+W7*uPi~w!a|Sh7Rsbx>Nl8h8j(Mp2{JFcyW-}(^>=3rL zNrFnKjD?{}^v2Ryi#y@TUmoR?r$R-vZKEU%yJso23)_%uf3a%|Rp=$p*{tpDpwP1_ z2C7S0lJolHMbwy~Pt>TLb(EcXFVu^{NeD{ESH3uxrF1^m?!(OJ1gu%;j^IqhzFJd+f0&jfJD2;Ip=6$U4wu%3 z`sT)ydy$PzO{_7RVRWf0DQr?8=LWQcW3*S3D*WNZ0tX&gnSXCGw7W@1o_wlgvCgYlSu67R_#++NVg!Nk z?8m!=l$SiSv+W^ll4%34-pE=ef>497A;fU@Op;$Nvd# zDVezWoz+ZKGlM6p=|v*Qwi10AcSH!+oA)0$Nz=F+uGMK5a3|cA+3oI(eN>cNoN-$P zTM55x9I=A#Y%AYebD!wCQv5PlJ(sFj?Zj~0=l0s;b%W|Z1}&ZQ0=Rx$J|$N3n-)7q_0*~6DR*L(cH3) zVqg(zWOX{LB~dL0?x4-_(YG+6lE-~3q<|;;U_CkLh3G)*`^Ccn*q6gWf${w%p{9?Y zprK6__wi37RH)YSKSd-sh5jIzi#6GklL~y=nd=Zpf6{cSnKV~xkpg87*xK5%7t9Jo ze|2?{3s-!agP^3sLLW2h?L^txIsa?}JaUGhpRnzzFPtPyoUmyKz}ZA-eaCf_O8Xoa!N^Myyg5$49;U&>c}C;X9> zqEZD8fdRN{#Vbq)++Ylkh zTwTpudE(*WVg5rlF@G)MVmW(DdpGyh(j`r{7t}?XCB5Ok2W{697cI+@tRRYSE!mup zwJC8R+b}s+w0fH{Tlj106XhE9hW*&l0L8V+(dB)x>m_2-T3VQB-=(EP^e|yfX*iK? z)uVb!^DMY_*OXTMDE2q zJ|#>NMJ5z!_Q0}m?rIms&agQ+0UlZEv1f88JTWw&tDuwByHW_6LQM)r{ZoD~LQ0}VG4nJF8Ew1t+>VhBPn=&={g92T6|H1CJ(E3Q zYMA5b@)J_9b#}Syi?3QW&9~Wmk(Pd;SZU|p{6Mmlr--Mcqcf>&V^yJ_0&3jjzFucq zcwA#cW!TM|@v{#I&zxF6QrIj8<8^85~J@w6@<(Wrdj7ck3gt7+%Dn)bcgSl`{8x!%B z4-0JBTetgctWW+uN*UpU=OTWKNy#f)Qdg(Rs>e>D*9JG=yhf!zJFw7`ErW2Kk&t=p z>uv01RAg7YxV11Nr=Vbn|NO83G~gUEg);sqy;EXy4V8Ze=7s-k(Y<-E2nMSwAs#_g zh48{)#E__VJB#x@@wRm}dAF3R55iz5>$m^zp@v4BEMhTzhy&mc2eSvGjM1^sQ?$MU z4E9v!yquhVUtb?+=}}ZFHD1v*t*q>t5~?#NE6!i%Z$H@6%K$rMP)7(>Z%@h5enm+r zlr%4+dQd+}V>6Pv*qIykBTR^trJrEijeq`8^B3x zo;t-?ZV>4K50Sqna{PE|@L@j2x7R1krx@M&B%~eQ{OHl6Nc&7AB42fKf!=eMZg3#5~g)*1lzyEt@#t<^OdGq-> z-VjmO^@XAMD~@kY$y-kk0(fKu4(sNCoQ;hQQq68tZnyR1g4eZ^?G-Uh!<$?FxRvDw zGYXjk2Chv<(*aoL&H9%-q<@%y{ydhmD7z`iAfTmS=WwAScI=U(BRvPqt$n-t zAnyJpum6e@jfsgt52tCR+roi)%OXOs)}~v`N|(Um3&AaFkI!NZ3sy5Yh$u5QioN?=Y!r=_PW5w@RT=KIZqxp;`Hgg|@9KJ_J^ z2>IhxXWJ5%okz(OKl}S1p=RU`8zTl66U$^bXpg+FOh`y#@BAGK>KxUV_QDoox=#w6 zixZXG@hevjDu5qgk7T#EhMMh-43mnRXDqkdX~~~FPqbS)W@a}2{_U@|t8ymLyq17> zoEx4vx8=Vs{DR6GHRRF5R)A=V_#bWt-4Jx!oce}S$<8ia)+M4Oz`Ie~VhGgr>^kcA|tieI+>dmPH^B;G@ z&Pnm{h3h$hP8OLVr0(xB-If}ek$NkHXj_eoDIF+ud^`MPB2=bg0g}l@9ICFW8r+nq z9W9$`vCF%7CoHFlqINIR+S+>cKI4++cAY2xxz76__+9Fo$}zFgF0I4($c(w*!(AXv zj3bVt=6dcHw7akRF^t48jEyKJfNi-q>bd%>ohhQZOW)v=QHz1h)`HDpN4dT7pZRM$YYX?6+K&ALq=H%S%$kO*69;SLG$I9DChtzw2 zS^qr}Ku?q@9+#nXfAVQd+%}oISZ{@1AI7soGd!>Q%UqK*ia4HMvO9DpGGnkRU0U)Q zIp?PrC=(g=trWGvwo+O}f(l=xsH4+lj(L+2+yu1omQ9FOcm=F&x%W&SWp0(Y9M4ml zRklt#zzyTF`uy-l%w@2yb&-&Uo12^QSDnN5@88e4?M&UX10aeu_)6T`T<+46SH5Kl zkv8~UtCAp>qjbZQmQf&#pWa7z$6{5K)|gQw(vYhEpS$GU-Ec_yg2w%DtwB2$gH25P zN`pl976a(YuZ0GhI_gtnk|`Yn9ZtlmDr@(NG*%@6KRG+WjAFW9u$%=DHcAv9RbZ80 zZz(N$?ZFEP14-@L>t`z0a|pp~6gblWzn=KmVrBcwOd^wNn5@dIz1+IzZt62NSEQ$+ zLe*PmdSR`9T;zsLar5wWt<4X}gib<SYM-rl*xWQPeH$KX9OU+{<&#wVnvl8@x+O?I;qtv& zk;s)O=J7FmX=!O12QIA*3{{ZU=Y6nPQ|9Quj&nmKPwb+3!mA>IQPn}ALa4kKATPhn z1_gPoK;Q%BbM1!BlD#ED_8UVxuRz#!N6;x~6XDvnjv5y)-my51gMV_^yQW={swAB}ZbGUfUO3J8b(>9QHkWKT&g8($x?Xi2nP_l|yW+KVq zLh6Xr)Kv4ShS0OwV0fXxWH5g|TmbYjZ%9O^Ht%#+iR!!zah)WVta$d{9;Vk6$mKa6t6tyL;6Hf| z`K>(V9t{Acu4wFTzM+;?roYNJX_dtfPWVfUbGd90)rt3QyAT(?Fenp2v7xlJo$4={ zMT7FN_T%_np=#-QWK?C=SWSwif7Vr;3C*wFnVM%nbB92ee>o` zzdt{Zhn~Ki*0>9Z3!_QyO|bOvua@zh>PjWR7Q?c~|Bq`5h_%(pYf*^|pPmORyVJ36@u(vhLOWPiOmPptTuRC)%@n5%;2l|${*m{@sH53Ey zyyk9wfMPJ2JrUrI?jcR9Gf7u=#Pb*y`(R3M*V~?1dN>$-d=%d+^L@MO+d~zl~nDaxP-5Tdi{<*tv+vk(dVe-Civ6_Fi z_TsC?0|%hMVrvD0?Oc`6=xkbnW))%Ck|02D`)OFyK_2ueasB$>|F8NZZR=DN2r z!v4Ds-PgcOaugcW@z8IrzS1fyi)~S%(9;Aw*E-*-1TvCburWxpMZbWH3IaoC#>lQS z+2#oQ*G&^o`=5b;S>L>hoc}F{{86wX?VI4!=r^5_`Cm$r#DE~K|73R?`MX^laooC0 zh^(wcLL-YR{JSvLN!!Ey{ra(Da=#>F5@m*;Sw1sefUe6KJ#dq1tzIE5y|h&>?{!0o zOcTSJ=LD%)5Af+iZ%}T?7miXpUgcAZ(#Ad+3D0MD7dzK)xeu|%>DjEW^lS|BEOs-X z&#&+st!2WXknKW@m3#Y+e(gJ;}zpF-#udCrCF(qUGIEO(NhfQa81;3$PG)-Pvx;z zEDOHnzN64;w>2&9|6K*sB|s;CK5SIv7K_P^8?b)RHyGVS6$GTCDH&U9p1;Kuj%qj5 zvL%Z6A;X&r{|5iCic8Jx;;Zny{{K{I{|&6`P*ML|7;F^huWD&I5AoSVO7ps#epk7d zapG_$Z5*Y*4TDXT2k6!8^Ep~;F2C#DH9X{a6ttTh3+qWhhHCzWXczwggYn71Z{IMB zvNu$VYO|Ao>Quq(GhH06M&r)BFLvv@qNA%zOi8IzEq(Nzn>EvMr=XyKLCbt=Vrp6f z?d=NMNEjvj?KdiYPhY=ldy@%1)e|jtFV>~^vpomA^cFZM`Ar)+K7O17-W`+1XWe>4 z%`0Ypu)HWM&a3(3HSaXs>U3(H9l@d+$1?!v{3B|)1$Jf|;R2M`$f=uz4aFz(;H;imhG;8!Eqt262T(0sqt z<;%vmUjAk5M_Kb8(@KEfUVHP)pf?O1?UV`-rn9V?qV|v(B@mt z)16y|>AiUtMV&SHKmcfS0bb*L8nD~^Cr+eunDVdx9hH`m@%2as*1C3NxwfU;;1KX& zO*cm%vTAoB7KPDUkltT{&UQ`;(3LPu@*C!mTzK|s`}^~^q=mA@_2YAH1aq}G9J5}R zg~d8rbhoA6%2!{kVx}>{8q=Lm9YzfS6yFUlmyh3Cv!GP3#q%FOZZBt7Ggv6wq<8OL z(S-{a^7@LLtq${^`&{Zi;KW)S8DaELk{vCeSPXEr%!LbI<1ahBG&eE=zS~?I@XUYp z>IliXHK`lCJ#S^j2mSpGKf=r`ngwJBD`3O`)sxD3>d_P84+7Wb3Q9dkJTx~(gJZh2 z!Inw#rMGm0JLUiWeIE@}o9b?Xd#6rca zJkWHcu3dWofO*@O;KO2Y7NaXl6rc#zy{$(8m+_xHD+32eGvS|q{wekvyUCg#K+0Jb zw|!FeJt-_KkL)ReLPc=X=Xr$G%o@TVAyZI)ETGR2F|*x3u8I^rbm-8`5OyTyZByR~ zUu|WPbLaAabmQJvsI$DhtcF|7xpMWY(vzi!?)}B^_2EE@D99^)AcVCqPc)Q(0|DB* z$?=RR$4U^Jc8+4S+F{t#+^nyhpr4eKgq!;4{7IYs^~JF+s5%hKsq)CqssLX+s|(2< z4d#=_xpB^L>%9a(rm-e&b>l^?ah)ufDe~&uY>ls>@-=OrW}or``9slK|$jC_wVn;bEv9Px4sK-kjkcyA7}h?;zUUR(+O^Z zK*WZfQ%%dr5XA%OO^#J z_pbA-XBE&rc8j2JxrY~?^I8L-cmc%lms63sAjLF0%pg%s4326~d*Rd^pP7>KFDH2` z0Ed7X!LPf5Jkj1-uBxh%9$H&n?Rm!^j;=u%Y0gpV#+Yr7xM+ZDF3J7r(%RkPt8f7RyJ35%o!sd0> z2ZhRR18k~>VMNO|5fyFC%tS>*MCkKi9p-3tpjJ9SMmSOjI7tKnsJ@-outhl7svQPI zNxy}!mH+*BFf%KQsPp#J3X|C}(~(V@OAlOM;BarsZoMfW%{T=Ic%x3SW-Ox<4idJ% z7OGYD7|ijX@BcOCB`GbfXI1KE3{*)q?82OeGQDS`UI~JBLs|}RhOBSx>UaY!VvkT> zRtC9%j%c3rU|)|qCkoTkE}Y!~G|-qI9UUE@i(Z8Hm%1m=Iy%JQ{*^XDYJNr>=ZR>O z)9-|nN!UzDIp;tO@LnkH#H9nsXm=;y-n2EvkX9Y}m{A+>&OtK_V?)2~B(l z=7^=r@RM|q(z!tBHULH=z}!=GZaFvKTX4%X8#0Iy&9|vUaO6y8t2X85&$}S#Gb4Mu z)cpqzOfD`eBs7bM)Q<%jR+y6zfR3yjwM67SNL6<4mz0+`NCxHu->|5)JNl6)1q8Co zed#D56>|ayMC-0HZwEL>S_hkS4kwUhWe+auzI$I=TgxFm!Q6(fY0IyhGS#sC_^IC? zQGJD(%%is}{pVM|9#fcJ8mrg4e?Pj#W)8bPghj9X`Nhr4ivShK2{mXvhT$43ub5w} zkIi(E;<5}9iR&Yf9YP|Ehavm2n#wx=9SX&Nj3fR=S$VQ>{$k=d{I@y{BWQngSNW@ItaKNYbwE0 z&G2}3Mutmcw3KBDDhBA;{_QE*Sy`wr&ku13O&~`BwV4R0Ui!piCnps6ssIsG^+M&M z7SEY0w*e2>?%S#vfQS*V)t>oTs#sLv}dX3@2O#AwmQrg;f01HGpT2ui2 zTk+AiBcP@b?7?bL@Vx{h5yD0)*I%cvx0yc^`D_vAv%ptp9u*Oh3JeAVr#>M5ER4WS zY4aYEk(REQrk2{cYX>P<&}(dXwdLjH@*DZr>R2yRCMxLj^Y}0CyHAw_xWiC<|5F9m zD&>muw$h9mHT3;o`nLu^dTu}m|Nr~@$f;dzmFKBpuIk$hFz^G{F}O{>`SAJw0Ce9v AFaQ7m diff --git a/src/core/features/reportbuilder/components/report-detail/report-detail.html b/src/core/features/reportbuilder/components/report-detail/report-detail.html index 8617e2db701..3f1810cb90b 100644 --- a/src/core/features/reportbuilder/components/report-detail/report-detail.html +++ b/src/core/features/reportbuilder/components/report-detail/report-detail.html @@ -22,7 +22,7 @@ - +
- +
@@ -30,7 +30,7 @@
2|o5}GLFVDLw_|G~kMagrd#5(#R66qjGTKw!4`>>Ht2Pdz=)wRjynw!k5>Ep5{ z-&79k#3o3|CcM46q^Krtm(Z5};rB9s$aBS$1y^<&o!;F*o__V@E1#3+ZkcRL2|Tz} zT7O_}Q?Rc5>%+m1CR{`r7-~D_Y&7Q#Oi%QN8*#Oa+6qyn^v2XHCR$I1v7ZZYD7b>3rKYo!pGO{e8$j#^PFD;#-lh&TxIzpoHCify| zGBsuHIH})pa$tn*e=gmU>%}G&+uZQ^vf(4lT}3V)yu6_Y_Fq$szn0i7RiZ^wpt8#o z5#gkvOk|h-?{@JTa+NL3W;-Iy59F@MH(XsDv6Yg_JNskiNM641#FV+6p6Y-1?C+U< za~oUk0d`GqCU()uh*H);myxpaW0w7D!m2-+C2!>4IUOUrW9Q$8!@HXTMX72g>N%Fr z`ucV^U$HhCjh9tU)JbnsZyH=lw(OS);ki{ZJKAoQ6Xo;{@1b zl{RCOQj~j>+te9(R1lzt`p`sq%b%{0K#oqN)ks`S@ku z{;CYetdh~5t5Fi(L0q~L@-G4pDJQD;blP?6Rr(yTcW}6zX?jEEIh*vkbL;T~CLW%^ z&z~=KIgX3myLZnrNBzH>7S|Ijl99@jw|w#~{o5NRfpVF1KWy@ZMN(HZf+q`mzOAiv zuk~9?)9Pfl)AAVZ5V9S4c{T2u7lTNM)54TMx`6q2(sQZgcnV5Rlu>g{LXcdu-3w9qsAqsR`xt zE%l%Z@b^E5&AZi}aWbi3@x)%w@`kbHh3T3wfq;|OGt5_)9fUaI3LmC&Nkgtfv;e6_?X*U+r>PG7%OQZYgvXJEdQv zHQtr)v^1LO<1#zaTDspX?`-kCjSkbbd{vQRV!5`XKfL+6q%sp*(+sHT>E*%&ZD<6o zk24269&OK@F5jm)(Qa1AWi=p2NlwPX!t#5pGc?Vh{!6~2-KQ5E3hL_gamq;pqnX|M zU*1T6FmC;FK|$%?u}WhNWATYQ?1TBJTUX7$i%1>1axoM4BD%rYcfW5P23m z+}Y8=f9Ln{vuDrdt<1K|4{m1^^-4x9@jLypg+$k+Hrl-ADk>dUoRKdacFZ zLoLR<(HBD{W`2EJ_w#EkwQi+Pe`dFf)h|9~=7-qR>5;U0Zku0MDkC3Y&lHoj&JNT^ z)(_N%-fH{6;<5d}kFv+q8#Zp7MDPkM{%nZalvKDX=(;>98QqonFYk4@&e3ZfJsNXU z;V5lhW^Q?y?%byNvD|SQkvkuHXPOeOPtMHb$A~_pVwA@Ur@hMY%C(<7>@d|QeJY$I zN>Nh4X6Vb&+UykFO2K@28JQB(Or==GqfLo7WUZ}va2qB1X*e)v5iPh^O`O-oei<40 zx=GTowl;Tga;NsDsBzO^W3`jvLU#UqW*U`792^`^cC+|L-@tJ{bm&mLMt+D= zj67m&Tg)^I3*Y(ATlcY><8LxA*u$fJr~0d71Z+oIxJcww3{I7EHUl-Zr1w{1&!y?t zsua42oK*YpJ=h@Pm1$=VkKyMct`l6O!aeMNZ&0ulK1B#smV}m^FnsR2ulwO{> zYn*RqOKdK=`&}xr>S_j;PcOcx^J$`xIDJL2)Wt%I|QPpv{w(mKL5|Dqf?e z8m@9Gt)!%x~tEE zf;NBuFmdOEo!uNy<&WOpbwvE{VZA0d=iFZ(**!V)Mmj(x+wy4j^OL$gB@gc3zyEz~ zOdk13NcgbRhYCu_Sm8c|VEWt}dca6NkD$Qyy@f|l>)g1LoPemB}Bl-JgJ zZ$BXT`PKPNiR#%Uh*;Isn_IT-W&4h^w7k^4R`=O)*S}g2W-~ZCIQCt>v2ImbE1)9& zMrPOKozZ$R>XtWLu3ew@ ztS%07kbX5KgbsAz%!X;~J8@-mTI)#GfUTqty|fjZ&6Sp}e8EO!yh{PJIUlFJ<=v7QRyGpeY#7%D9WI;&W(?&2>r5^mX@xG6pQrU&-bIh|Jkcs{u{UM-EdG) zux)4_<@JEj+S|m({R0CMwIQbkY<}(Dw4L7kcA-}BJsxL1qbACLDse-@Kf(_E*Wy`y6za>nB9sI0j7hNS#iI*$C`yB4PUb(<4! z9ARdTR@IF&YjQwd{vl@aAO7oBGU}o&&Wl$=cKr8WB9M zyjD?3UUU5Y6D|wgJK{78U1~y3v&K~CuzHr4AQ2C>q%aYu3&FjNV93hOzMN&Q9dg=8 z!gKG*&6Jci6NX2TjPz@QisvVLgSm9c85kIlMBK2gmp&L?E-5K#$uQY}E$$gg!j~)y zUD2hHQ_%{MbvQAezP?m<@7|@{&+7%06|gLptAWxJi7+^2)+HP*7ktjrlKZIa^S=DK zt|;XsjUYK@5`*iq#a?#xk6yH==6gICA9;HpRfrG{WL5TgOnvN2hDp1zL-c?5dxv~U zgnfhcNzuDy!?*Tz%GbaDX2fqkagfP_>gXY^yDn#wba_I81Xg78g!AVOJC1!#xDncv zpr-#$Oo3{vLtg&aTXmmEQQ7P-<>NykHEPH+x)om9Z69vo{=OG<{8vo-wC(DdlG*gF z9+JhkJ2>3AoGEW&%qyf3F}L^JTgyxpZkx`PFUT1oye2YTc@9=N|4z|PKaUC#-=fs^ zQS~hAqe~|iH(j6@$Q?8q8{EwH53cRB$amD()2YSzeaK=>@?3wJ$iILVKQgFy`?{D} zQtr6K;B5g5h5ueq_tu%!7!GXG_XBSxRXoYe4p@tzjnw1o>@OJIaOAB)6(Sh z5NB@iM8i+kf4}yVycSKy=Du#Kf2P>5roitqbCjQxgL7(v>;Jrd0{C$~C*8Kb>f!UY zHDjk}DEl01Hn~S{fAX(13x7%7t+g&ISZ?>HH5z@s=8MNZ1a%${6yspleO^ud-v_DJ z)$R$Wp(LLYd+ssJ=l{r4p-ey1Acv9BOhLHwWa4ogioXwr_3T@c6&VxqOvf;CS zzb%S+D%o^b>-^Nj#m8chE45Qp%&n|S4f7UGZFSFZ+(W#tpSlE7vbZ>d&b7Ebxt%_p zru9RLe{Yfd;=1RLKAx}9PZKC%eek!P^S{ngv}>osqqpQL6iI)cc7%`U?xuDq+5heF zsK|&0kBaMo@}CQx;=J_#a`TrhqoP7nP*C8tpO0Os*>1e+fTpJA>hiS0i)LoxBdHR( zbSu6O56jxy+snT=9Q^$`(U(e%WxB4p=+{To0<~n@j?y6y96=Q*a9%>c@GOkIzG^E+ z-kHuE8v^2z_OYwK1Zt^?5D6vUM%QQUK)kbWU~)3&b2inISLZ#Xq@`ckPyXP!_2oVi zJkY_bFm?rogA`cGBeKY})i2MwC#xj{9>09=SfrDG;p(F2X``lz>3XqK26gneo8p5T z^#rZQI$DQjD!lhw#qTAyLbCP#7V01&J9eNKG-`^-Xs=(tCVl{fXMmogulfZ?Om*O< z`_Vg|JnBF%l%i&GB<77d6HDumvZV~gwYY7$oe_vy9=_rHxh_bS>H?g|N?!QM`1JGkM5c&RM$o*P<+023Vm>oX* z`FyYsq|cdVnpnXNXXNB4$u@0&qh0#&>-(#oz$ZKR@86oao&%f5EFbm}i*ybbfa=P0 z`0%}Ftja`AMj2YNbR^f+g=6O* zQuZKv@__GxYV}>vB*oC71$zgZ;LF6GSkFWK92u>UN_H?6tVk^G`deJw&#Y=p9r(b-#ZR6GU#Mjs0*Vowj z`T0w4W%fk4EZ!m(7D3l@jUQCVP;1(;m8H2&-@g~T`?Rie(=A(G8ZT6MK(WVud9o5K zCnEcTz2BWmG)qC@9JkE6YkP4MUiip{_g7hSY)7Az>-1n**i@3;kWz3*lIU`*a%$wH z!<(k(x?Od-gDrFD{fzy>!p`Y4Z)_X2^$$==R;f|VS^FBRq?&1ZAlGhOANVz!y-X%y zZZ`H=N=gcwde-OI&PO|$=rtW398h!I=I8AT7JsqIhw+~U;%ZLPw4)cZ8lWVh)3W}M zq>-Pa)LrSzxJheye$tCktSfeVZl_CqJx_X}&2W=|guz=un_q#w!xVc?@OSwF(*eOo zfh{8KW>GAgWFV^7k%Zr(lB=sr9=1A7PiKO)0nFDz-VGCT z?P^f?HJBvi?2{)_B(u^n_eGXN;9GR(dqz2m`tr8WW0eU3FMqS&7vw6a@q5(|E4(1^W#hoEngTKgP!u@HZ5X z`O3NG92=v8`5#-+tfWo^iZjT?Zp|>bdTpOA$F+DGkQKX6ss*A(bJ|a6#b+COpLBI~ zrP#+VXKnpKH~;RHV+s*{$Z%`+&R4GNuBxg+>Ye_oq%hf{>uWLAAyByhrh#PM_i<-s z3Qm^L%;jh~T9Tro;>6rsC8$M&GUzq>vx*XL*cT((G>whpqYA$!|C*(`NE~T@2e5@6 z*OgW>Ogn#Bn}Qs&%XdKn^Kk(kQi4hsRu?lTz&*3cFIG`(&cWXPJMIj}^^vb{bKzaa zOLTXiNh7>_CwfXLX*j?8nBZkU<`>Z@(rIxhCU36GkxlKx=FnP+OP6-wV{~!g zcC)JoUGUu70DOSdA^{BbC0|*>XjhfDqWTVv&aM}&C#R#5fnq99!GE@;v*LUmVqtkK z9l$K$J>hUExK_Wyi?$S5WMOeQNj3fUo;@e7e8&o-qU^}+l#jcX0IVu&*Zkru)!wy* zdRL;YBK{m#O+9ic;f1l{^}RGBdw1K z;PENK{>K&#hyFbSHNoex1lW>Y8?w#Xag{@>-lUhKzyn1)BP%teIloa}InmzsoZJV11^AeF2}rQeTUi=b|%!M`!8PXLqq@4vj5YSMD<`0)(A0N%7usH zMw~SK&Wk*~mA)~kHb9EL=(K-~jn#Q_6i5Yg>jAjwf^hX|&;;Af#LewbFuzF}A}6lA zBhU}a<<}dg2WqSPsCQI#stcr7?{R*{rt1In>5i$v`g$Y{hv9_GFWa0L#OpZ{M>?_t zz-@wmBnTh}f^6TqRTsNVfK`OBp~xAcrP)UZHjY>a32!Y#WN6PM+A3p}9~sNS%< zVC6>p+(;`m6_qbfdtu>3$=1M=*Pn9~%-y6>L>FM5; zx$b86`%|B@`~sJK2l-4}&LCNnj>Q%>^} zY%_L{9`f?@Q&iZ3d{OfN0 zG7i%N{n*X9Q5PbA0u<$pY)Sr6uiLq}v8l8B+@~3ym{C{8($zUGOwR<0F0PuGfF~N{N)3nTcu74R$eMX*x`|V^T&!S~yWMtbbn`4yOQN6zMFco!FvD+vk`AZ)fF8`fO z+`JoWf4<&%5zAohRdD;un=S5}sBEPR|6X%;cy;5}_VJ!0&X>0i`wR^|RK9iOm`>;F zX=$a~x@)@ban)7VfOZGKL*KIPT2Ck*1XWl1FmyZ?J(swIgy2BidiDG}&k*fO`FCux z_B=Vt%q*Cm?Ob_Zs5R3pQuhTps7XSg;Ws~sbPl+=Q%p<@-67GOa%gr{ zRIO#*$s?%zd(VLbqnndJq*c7obO~nNYq5_wQaiI5)#XiCJYtnr*q#$RlZTT*x{{!_#|;2GD?Q^I8q#sKN>I@bz21B(xwa>P z=$TKPc!F+9DfOoGlYJcWXndfo=;3`w+R{DIeW8f-i*4APT=f@tpi{#jh^x$jnI&gp<-3fKN|8J7EBocv)bG;x6C zRZ{09zqgX$E%DB*BmZ@J$N7NbM1JH_K6&gUU z;f?Rc#Kc5(f)3uieLFKZ_bxs@K7bcOF@U0D`5{=qiW%tR$dMxxWz-52sBm9!z`;sZ zoT?WtMQVEF<6}z^fjl1sFbRqkV3Ywt2M(bMBmMHNfE~qq zUV49p1u$3~b$@KW0DW5twxm%c6J4GO>xpa)G_&7sS1U4_GE*}v4Y=;zfm9AC_SnZK z8X$VZrcJrlel{n6{AHb}$X;wvncXTWwVHG2jqS4}N>lId%GqXiW5;u*UGEI{)QCL4 z*C{b|kG-W{vNQX9)RyV}g*wMohU!eXf4Xc?IqdHUZR}}lA^A3Pvb|PK5;EIBBc~fR ze?dP~;d5Yk%3KH zYyFk*`?jYRkT<2LwY*5h3_dY=8c=8s|@r#7<YJ^ zNy{6hCxJWhAq^Q-#-8@6A3udN%ifW6fD9uZwH1o%A@bnQnBmsSLL}@IivT{x--d zT76C$&S0;g&JOd;pm3Mq&JO(TA44Z@dFDA8n`2G!TEWB#w-kMai4zmP%~_}IsX2@K zds}=Gb9>WggUD1*D*Pez@Gr~kc#a>Y`91SrmZvN!FT`p44oOaVMGs|W&TGZD_71!i zGFY8!(|ASmf(uK-td|KI9B&}`3VNYyvjwI{r+s_h+ct&OlV)yU+?ayVzXzDZootv}ZymH4cmRIO6B zuRVcO?V``obPBo#*Y1RS*@N5@EWh~mMWzCjLVqWo-ksq8ZR)=pKk}k_>hM?v#a%m- z-q|14F%uN#US*4w1=W02iY9+^Hn94Vo^aO zi@&#r>x$C=V>?d5TM^ryk7E0-#R~Lsy!byp%hGM5mgx#hP>r2%WU$MLK6S#Gfmu*Owyf^5BkBOvu*9*3i%dS-FA_|#FZemRWYw` zf?4nXht;p@SLc4f`7E|;ILk(pa__ifVT%aWKt#9po!f4#vj22HFvfLyOv#G0tfwod z25kM63p`hRx6$TQT zs&l8`Qhoory(9-&ow0=jvjK%VLaSRdes+JKk{)R`W$!cns6;>YqF5!Bx5Cn!GteaH zq~4=PAM;ytO!iq!Zn@>7nSaMSvdJX+LRy8ehJ?}XKVgZp!AM$fq~&b(8~-3$Fv`&S@KSw)wFa$Co32gBnt!y*q{w~3uQH!x@| z@FzO5H8Om_kNZhhev51VB7!unu;$|YhiirWq{6m$RnR#E_#wr1RIMQRlm|*%_u!Ko z9K5{GEp#iVrt63QsW5&XPb3h?QW+tFHWUD$CC0pHXe5_&OoR$e+vPvrdl1Ne;~_e1 zuA%9A%N)5EDw(z?_wz2xC24Rd{o%8*1)%d@y&^%fNUg=~sHQjxkdg}8UhEUHF1neM z&8?Gu``i3n*<*qhjM>j;p>74#hvug?t$u@I?ln?^TE@ZoMuo?oo>m`*n&-apG)}v8 z=ImLca}i#Wd)cd^)yO>GJfYj3RQM&%fQs&G(xx*qG8Cuuz&sAJO!&1Kn&+Qhs=!NYmiIw@lYP#)ILtE`hgSH$tAcf&kGJ>Rx$1m=$5}RCF%2Jd5Xn}9^4JHf??o;J z!P5y$r0PdscMN%QFkAIX>^i-?vMy+Krnx3$#`VhkE0570S&gYvf;84$TV09YejP+7 zKvg8|^6FAnZf@gSS!Ga8#dFoqEmk`mqFomBa^@Tthbrclz5XPMzA@sgOJyu9jeGhe zdG6z|XrA4A?i_JBuo&o7eR+#_u>vX3mT{{V0z*rl12ybF#t+9M>1-YD+)35yISf;V zOM82Yt`Mp8;kFpta6uBAYF^NOX}&B%o1oaOwb-ml_F3%sBd7~xpC{jLU!JPo3v@q0 z7)T8MdcA^USneYonNX6u_Zr20yVE=?WH&}S$jP~b;GLiBJ^719z~=bWrRZOVt*OtL z^41?$PNXNfZz`;>WOOZie>Kj20Nw9Gf7kBgm)!2(-{7*gVn+gzeIASpI#(Z?gxS%~ z&{)AgH+{s4XFU;07aLxe(`!bGI6j=}XMJ-kAS}$Q)tLPIRKE&os=t2lE3<1sXi|N+ zXVsMh4=DCo-dS1wen>sr^4ZDjylKKbf&H&uA=d+u)Fk(mX5X24A2pi%>in1A=r|VS zzWuwes6Rn_5pn!6l#c@ntKPRyS1Fz5Zp2K3{mSD#_$b39axnj_`^OjKT=J0*SyPn5 z+HMp$(YjSK27pEwAndjP!wyd!h~c67YAHxvQ8Ny*ETe+O(IY0so`yE9`tc336(%sSF` z$qNEw=@z9ADZd2=1$_ih7%Zqqf$e^&nl|7xQS2eyo!FVM6kc3i?Fs5+{dX7+dMhp( zIvK^3y?Jv4G;zSt;E_M6W=@`v?aE$hue6Oknx{%pPSk%nqc_k45!H5UTBWhg5(ge_`#olXZGb(fI{kMvnEUv z(Jt=fK5lW^Q85Ic4MogpzW8|J4bR?@)>E|azcn@nr1$g?yuZ8OrdYMNCsLGkRH^qq zEZ4CZIYPsuMLO?6sXg^ZnjUBO{``ifBuz;$A}V<|Z{;|zLD;yTps}q89p9ESKj*sB ztSaR@Iy<+lj-)x>`D+NU3|NnXWN}IR#_o!5 zWgBy@8r{iXPSq6;04riu5MKS2MKjrX$rkP{i3XkWpUp{PEAIE`Jxel8+MoBju2w$8njrT8ZI z4}I>==Ec9yVbG&U9=qFVYJk>@?RtjSKjR@(9fCpm*%(6wDy@2G*Qwgu>D*vo3f5K~ zUq?mZ{%8pAM^fGt1@p@J8w@(I$o2*99@9I0CT?b6^U1VOmg=Y!9|jSbn>UZZ`PclB zov7?P{e&*L*-$}etU!t}gk%Mws$3_9;ClA5sSq3lc%~@xo)Uo@`Y=;)KM=4Qn5YvP zzZ5004W^v(!AMu12E#rOX0=08NH~_36v3@k@WLV2+$-0q`?3Op>l3hi3rIW2T}qGs zu9^S#(Q`p(U%h(eMR)oMtS~{4JA}fQAX)wF$UbG#_Cb53B}KKMdF6Rnm|XsynV((x zLJ&0zdgnnxqT$g8(J!DDDP^18{-N0G<1gzHqA{Euk%sp!;d&-BKYz>HL(groDa1{B z+_gPa^OER6@m4%Nd(ME34H9z|B`iAh?Vt$2=9Gc>b#o)#nH#GGb4@>3xG=CEtzXz8 ztT4sUD8XeFCy<6~ky{uH|;@sshctA%-hkivp$NDi8pq(@{ zj|vOLZsb@aRsQf9uf55=la5ZN&}Aje=LNK8_|tCwa(FEKbHvv1c`2*u#bY&}>enHa zNJvR-23@NM%Ab-!msR_;EGz@1#J;BX~7Xs1D=#bEM=}V;Cn> z?8Y@Jd>QKrc>^BIq3%L4NneJGbD|PaesI@Lfk_wedHd$g1Q4Z_9EdQ_1bwI%xK!m)1jHXm1x1SDKd>#HqcW zplU&uqLGE!wgd~o?WE~mT!fpT6>|}``StaXW`PrA*WDaAyoSjQ_yYLhm`+T_smB2`?UWz z&W>+#a&pev45UL$Gr`{=br1qPVE`k%7EngtU5*03%p@ur(bsnq+Gme-__x~^Go#yE zjd=;0AAC{}cn)lPZj9Om2IhZc9%+7IVX{t$Y`i_6;GPjLN)*(qIK5517DKjw$cX%n68=F_7QQS$E6I$ywjF>ig)I+mr$pcf?i* zoB{w6v|Bz`7pF3au!lP=p%}xK0hr^x}skp zv99F0Xh1=NN!ovlS3Lz+Mqtma>b0^?oeKP;!v%2`vkda<7AG4G(wwM>Y_`*HB$~wP zPDp8}Jj70+=Xj0u1Oxw0TG}c|IPYM$gnxbG%j=n@5Q83psD;hI>?ssKbMyZPZ$}VK zaDA#~nfKfnZppD>B`l;-zM>__dLV;gtX6=;!J?7JkEB$NAHq^2xYw*3aygho!U~bM z_$%(#VxG&2Al5z_S_RG&e6u~)1t9L_hmqqbb*`V=gd22`~K;MrLNJ8Bz8O*US|!O{>3Vp36de3MqbdncgL}`K%1{o zsR-W&L{-ULB>LnvnRQ29&J&6PfS{P-0pdvQt0MrfM%+}#_)b;4AkDOJM! z?pf|X_Rpy2*Kr1Xn(!BYeeRKJX+kYZMFT2mJMs}|>IMTl;prlRz~e4_ zMIV`JNAwS~2pnx}*8j$ulve`B{RN1+yV?GdJRNs|&m7*+Qj%ke#xX?Rkek-Rs)6n* z0vAOq_YDW}R(P*xc$(kW^ms1`m=1Y!w}sX^sKM%5WXP$*bDJXK&yIXti3Zf~+v{HJ zR&}#Td|;p6U$%K?b7SF`zj**n>|NV#39a(VN`gs-qyVUa`&@GAgstuG!;;HgByFkE z;0$CWu)8;rW*`?oMk*o!uffXs0RRxFT!%L_EpEdgMOP@QNbr?XDf74;LPQu zNzHiJ%vhR8_S+xeeYj4YL92DtmVhca*_)}T22niM zT14UZBwA^}mk9hI*U920u-VjcD;u}dMq|5v{Gk3KV!%Upt9^?0lbD9!);)g>_;31C zNvu%g7+shBP^>Irq_A!mo-CubN23UF-nt%jEeIdhkYRE?!f8rcIq)skjNw+|_GD() z)5nyW_k3KVQQ&(Qw^QxU_4%`?YLq#{4?^5DpfEgABRoCNa&v{CH62E(U{g)KkCND# zk_0n8Cmd8n-NO}Eq6nv|VPk|z>^BNZqBU(hCY`XNc-9*ndRTy7z&!Q&^@Xjdf>oGN zNKMbcYQt*hiO~z_eg+v`!>@>BU?Z*jR*r_n$)~Uj^^g(IgJ}uR#t{Szaj%#>p>D-hDZqH;P>?D>eqlZ8yI^K z?6Cgo67;FxrlMzYLkcVaKZ20l3H)Jh6fO>PI~x3Q%`wLxP%gl#9y`nLu>$CzH!U|2~+Py+T9xLo*>VIk@nC>sDfY zr`*8u#^d=7xprnyoHw5Vjk0;$w*I)Jg2U|WJ^-DK=|;-XY6E*FP5@lMAg3f|vS+8m z1}7*IBVGCX1FFhk_L+xc12=yVDdP6G_ZBOQHkd8)8`~W2aT$va)}wxioA5ZDf*(Og zSC<8HGLonkydEQ+xi6snqHkJ2xmPU!uLBbhHC_T`L=@7=>6mKb9Qkbm@f%Or58PeYGdt3i1O~aXEqcib_aCkb9vQ-A`kej7r%R zm4s`=b|95NnllesBCr)|2RsGxIBNp1F%T{>T%}y3s7U9WPFkz|%1m=BJZVHN1-2!U zFwuw+`>}g>8B)g2_Dl{4yHHKSiEFym$czkCfxevO>U*>q9}dDJ18fVA2{F$A84Y_2 z03wa*3A@2I+2?FM@CBg&Z-6@ok{I!UgjR){Me#YMU9v&);Licu>FX{y)rggTa4-b0 zhRm1(W?-N$yc&cY#xl?&3q(wVxDmiUBlZR!AB%VikWbHV?gp>hXM`e2Qc4Arb286l zaxbm9u1+&%rK`%`Q98S3m+b~n^=8S7=-T@l`u$16DAYuUhL0&upjyT4>mdI@sEZ&> zzi>MWxO^Igtc@WfLSlr=rIs?h~4P-{-^9^y|o*;0Ep-wbY5HhC;Ct7DOyonpW zW5~k*fQt0NsM!ZDBP+ON;12SSPSkW+cz`w1<_%TNv*&^#`X&}3&} z909f`XLOoa$7kB{5|dcVct7zA7kXeof{hL3ud=f<+>c4JBw;)b(McF4z;O2t4M`)E z2-z8ksSn9f2jCcp1?W>HS!>-)~B0548mgorHqZz7qEjg5r~+4Xoc7>Z@_ctPQHye&NU$3VMCdQiRh5gU8rUU+HPu9DN0{s}IYq*unyI@G(Y65aXMZveF$s;zZ5EKG@SVb`RE} zhwTLl2SlA{+|WjA@pLWkZAsOWjd7vgwTs`fZ!-zx@F9#Ef>o$glZ%adysG@`-Y|}d zP5f3>7;!LTQjg4h4>TjdUA$WQ69v(QvXp3LP^00u<j=pjr!l3s9R5 zP!JuOcTvX-CtQ5vUz;(qvW~DdS=iZadWlh;ukotXZg3q4rkj0!c^51&%u3tPZz6Vg zK%YRZ0c%{=*(p++CiiS{$v9nYe4gR&`aPDF(0c2#SbKOo+Bh0N#DBOhdr>xxZGWa+Q$loXu;=Fv z_l{G0%JX;Z*tEZOd3A^U;q$vGKg>-}PBaK~kK5enu3wn4KT=SS|1%`Kx34dFzEjWU zPEbofEFuz)ur+Ak&zhv!aY4MV>Pn9Ft=?f&!1vb@C}>~#czA5O$+oA)$+EL^Z2Q%Z z^SOrbX~o~jZQ}1erZljsic^A6fuldfVG_aJMoXl2v z>U@!0Q&W@mNQ)o3S2)St!ov?_nsrB`jcFazi>`^ZLQ)+X8dAL{>jo2&+{KG&2mXNE zsw>CWH6dsY>OMXX2xGb2Ps|&Jp>8&FSuSn53tW_q8+?+Ga1vxZLENGKoT-RsG&3{% zxY-YWh!+WF1C;OOFz%&~tPVFv1da%uq@*NnzqHOuciqf?UVv~RZxim)FuFW`?lUU!yEJ#%(;_STAlL_PoQ+qdT}41~g3>V*vV#|fE`fFAfh*OgBf^)KRN zdeIATSMml&j&>!FccqMuj#^P}JT+dLf44b*F4#-&J_ZyF;5?`}$d%dePC}TG;D!x= z@0qE(Mxbb3uNj8Jp>J`@iM>Rj`zWUTitP|3N~4$Frr_=kV(;2B%?unC{T@BqEtYZA zm?6hZx_wuxPcV?!++{UnDa=~uTU;}P`5d+W2YhP_bZgiu5`ny7vr|NYhpBsm-N_r( zVLf|x?9dX<0M=#eRk?m0y4aqNE%P0fm7Bn1e6+uO8!+NQ7iB0j3C=7VAwJ#64UU_8>4Q$WVA-XlM(qb`Z?LqN1V%G(e}#cJgEj@Iw>* z?%m=b+HNlAhb14?tn7!U>L># zL*Q}06-NHUhZTkAc}zYs=FU;?qz(6Na=}$1^?sG*ZGF6dTZHX(*e-h@mfoh{^}Uoq%+&FpNi7 zhiFb%G;#^V^UZAb~Rye2j5R@;XPyCF8rw(P+68k=V8~2us1s>ae;n*a}9C zL@>&{yu4XCIhIfy3*g}eNO}U+jX>Fm4*)zG0|Nt4ab&czhdnT`0>>gTMHqW6feteV z#6UR|B)EgmfO;S%=i%l@!r03%AONCZ8!@~H4A}}Yp{}k@mA9G^&LRZnAgVN8yB|~^ zdJxbt1g+4jFWFDzTkvVmu#*_ZFz)y*!iQ$u;PcC~=<_+vzn?KSF_D&&<8c{+hnp2B zadQ#+C5%yTyJ_4+HGwLd45Wu32o`a)Ex1h(#D2#l?~=vCjZL$57cO`?u*0Y@Ig^jw z7m)E2oW$JgYc>OI!*46iy-s!5TsS(^eLiiyT0@rgCJs~Kp5CG>M3^O6x$8yEK z5Tp1Qe*%u^g+1#PB9!p=qF~*J0}P3P0p|Qqu-GpE?L*nw00I&0`e*!xOOa_I9f|n@8EKKT1yG;^OM+ojH1tgiv(kLI{3Wb^2JFSKoio{UDN1*M;-rjnM zR%{%%aSJDb+=%WOMoEBtwi`KtP!^Pcm}+WkgZa!DQ1@?QvgDw5d8|A9iOifHhG{` z6;;*#I8p4;PKQ*QFVk(Oc^SzmX~4E^A`$HfboTG4p~Mmq_f%9=B)rs&sa7ENUbMOo z9$YvpQ`PW*_0^R-fD68?ho|@n5L8h?j<190Wo~UdzEl;6o(THZ;|=HFYB(*{kB(Dm<&PRkp1cOD zj!_a$ow7&93j3T?5Nnn7^;G-z?ISuqLBO};|E~Q4F)~Ok_n(Vvi`O`riyTDFkiw@A2ex+H3YRI7~@f zmCt$RZ20?hLKgGSO=XwAaO2+Jk9m%fxxWvo$^YZ!#8dx16yyIfVR(=K53caYF~7?V z##Alm#c%SY8)YlS*m}SI_l+`79_bU7f)pg~suP9V$||~}&poglX>|=!GN{{Uqx$Fi z6vcVSaN7)OGBPK)Qn>hA+6UvD&z(D*J4^q)_r{CrH*=}(~ z#a*4bA1a$NHgIvJ&~K&uk$oc3cjOQ2@g!^vQ0p6u?W=Wevj=N}Rxb6bt>?pXtK*E;Xe%){^I{xK$z2@!mMwDk zSiSjt{h9R&5fwNj54Zj57c{+dN04Z#)zbYNW8^{oxCNx0n)%h#-+$IU7EXd!PF-Qv z0SVcXG;Di94RX=zcvtm+#IHC^-e z^VK!Epg_ol@bBbEB6s3)wDtSSMy#y@?lXk$@=ZQA191P?Q!Hfzl>9+{0^0KlGva+%{iy6fgZ6_+ZApSb6<=X{wt~!T> zhuM#>Ox6Sm1c*8>P7Fp$(ta*v+(gB|_Mv|Hc;0D!wu>P=rwhz_8pEE(DSN(oj#Jf` ztE{lPdGkx<@h&G`qrFTLdGb2v)-y>^8Wi7KsK`L)j8@y5>e$8CH>>`<)!y+a9_V{zc2kIeIf~-fze{1=Gu$GQ=y4<1eaQ7rCI^ z%^P@JJHTjd4`gqssq=rk zoF?ebk7DkB;{0y5@ThpqYyzfe^}d-6j|))`o30LL`agdzfy=6xxc$v+KQs#K(XYJq z6BOSEBlm$V2siH8x=j>qjisD4WHSO=}$-bal ziWGC*Uf;$r(v|M1ta(62cU`8Qu{xxy97#YFWd5Ciao3Y3&a<KIm5E*j!6YjT>6`3Ym z75$Y|`ZFVff?Aelx8&P~Kl*qaoQPZa4e8fWIx1YscrOhFWnHxsl|4dhu)3nzehru3?JIi3Dpr&#jaI>*-de3gGjn276R&1;K;ZEFLy zLOqvTQ&l4`1>xJ5P?MjF#m2_k$(*9W^yN#}wN;*5ZGo2k)w(*C$IKTEr*5Lfe;9gQ zZ*|<8FUxs}7tDpzUZoHQIFuG4>eALbrkM9ri zNB?BA2Zwps=-0Mg=Q_m~qiB?=*^v*D|=c*PDV!Nc`vJSycQhusy@zZE5g4V9ca59?U!ech+A1r3+?w;SPFXi zQVBQkG$LaA8Ec6%Hme;1@$vDPAv7ZQ_w?L~uCiiI()Yky{RA~tULFpmXv+R-vC`O= z2c4Xq#~l^M_Mlq={jhES=}(q?JRIps~ZVCdM$=|%|>P|}sEZ}v6O;#<&y zOW_NVN=gp5r(=Di^%uXP=8H4rV}=0ZN8aNJ@$tWphV)4nzJ2mY>h6uLg~eutW)(Fx zf$Rk)Ed7R&NiHyhw>)PMS?sKsDxr2_!KEgNVVrgq@@P`jPZRsYu#?+vg-@et$u!xUeRXewj zabG1A>B;w+9I~NMo-lN|dM2`#U*CzIghS)sZ?9iu+q1kPH~=cq{AIbfi3#075KJhxtrSo86Gt^=$8X(K+Q7XPG)PbDQ`_sf>d^dndf9oo6oGcU$}j*;_eTye2#L2+*T zWKl=H3C2jVgSU4^n{UENgmHQxvk)zm(N)s^B68Vo!%tZ^}fiD7MFOvq(^()B9_Pnzkt zTlGgGL4mj_lW}x(oM_BBW+&eL=a{c;sSPzM>#!F6d$m*vic#3a{SHn*{yOEM{=Y-~H zeq@rQni^fDLKtLcf%=TS0|RJ^-R7ok#)TlYHZEXQDa@q|FVw0s*)10SI_pi)VPA?2rMwyQ95j!e^OQovn<;ZbZX3v^ih*%6NEJsRtX4F12` z`_7=MvaQ>LwsKLFR+J!utt1hVXh4#U0TBfiB`B!{L6T$?iE1MTf`TF$6JQ`CND@$y z92CjHgC3HSGl%$%1-AFzSM`1Ms@{D+Ue`Nil?wapv(MgZ%{Av3V~$ne6N=_$$!ERa zipQyyhCNMIr0>YseNY-L>4n9`H#+3y;ki)c;zR$9@G*fi$ze{zIVPBvI;adke~y6s zMcn<3B3gD#Ev6uEG7hEhkTOiz)@wMgc=as49nqv3&+-SxHW9=@QrvMd2UQv|u-LU* zzFy$<5}PlFHs6a78h)j#w(rR<(yq2paRN{j=V0bwzUDHncDO{wXhEeoj|v`{nW5Oj1n!F}cy4R#;T;z@c* zUIzhX0JBSh0FCiGRCr}T+%Vupy4n|Xi(o;RG+Qa=AbDA8M9~}x?Zldqp@mPtXZ$H_ z?co3~2d_ToiGe>5#7W0$gtN(lpn!yp``X9!WTmBpK`4p4O<$yd(jvk{=-l4qKRKG# z`Lp++Q0KDxBk-ki_EeD3#Cd}@g`T(}fbfz4YA|P(pZeMRAj`09y#cHd+8<6zOG^_* z8tv5~z0GKK=ajZJ`d#Ix?~mXfd__$9W0>=deJG)KZPUvx0t{d$n+s?M0NBY7Kf6TQ z#PMZ?g@l+SQy7~LnM1uJW!ZQaN+_&^5$0LM9pb^yj+i3D_`J~cTxey&WSv%1fX*Tr zgRMkSk|mViz*c`DiYo9kU=sx@lhnd?9s6HC=>?`fARR^!KS);&s;CgFO4u$KhJv=J z0IjxJQO%hmjf}v54J|Ea4w|#By3_2blXa|`f8nIElX8iDY2a&eW+%;I_ZUWV z5*8LFU0t{)$~jDWNVr5kY)@qjygnVU)}CbnIk@w+)hhV%y=O>ZrOr1aWBHAk4WRpe zFznW?TQH+_>UPD8}-Gqpr=3mE|XW}FiZ(c#MQlt<}N*26|0$T4_{pf_lQOAG% zKSM44JJ_K-_UZCpSKV=sPEWr$E8}jO)2LzN%tmz-;c=R`3PAKUoiF&DEANV`|F}H| zS5+-6QbIz{_7�b{Wj&xyHrCS=%SlH1@5bjCNN)Qhq#HU?Zx_WL)Yi2g#iJLzf1{ z1l{?l&9fn7zWnVi`pCLfdltmv0afqDQvO(@mZxa)8_TaA?&o;f*>w&%5 z_Ay8P<*DcA(H5t9Wap08n8o`c%5<`sNS#&lrPkS#%@I*|Y2gj0kzlWvwUsS(%JNS; z;ov-$L*o+^Ou0CCM(@%$et6~Wfe{KZ-GMGj9?++2YbMV=fbgIj($Po(z)a~o@ z8{)9%1oG+y#s~GnLn1{3MAz2VX3=|JR9_Xt8myNI-mw4p@XSlInq`1`cUU%_sE#5J zZ~g_2k4e)G`F4RO;2a6bSD84h$5g0|xd zLv~uJ5`A{f3wHSY7TK0Vi1-mbv1CzzaShBLijvYm(htCch5&{3Gg7oGg4CI0|(-&{P6|{qm?T{NN~jF6EPD-R zgFk>05}uC%&@+f*QFQEU4o=8{1(`7UHXvD`rSl?+n4qAbsoME=5^Vx}-cdZ3=Dl1O z@Rxts+vK&g2qYbk+5gnfEsmH`qMYkG>1B4ZWyrN0qZRJDESzuNye7ar60yBVTzq~% z(BUqspHoI`Mv(dtMF({5;3kMxgZLoL_Um@6p((O3tYjgmI z_GS`V52tK{jsVIjR!A{%GYgQQ*v@P0gho8Xrhdee4Y65`$dq58%fgug!&;qXq*#zF_Fo+dg+ioS_ z=8SQqPUNGYcs+&=YS=InAsJx>^U8WEuHNG1cOExa?e4*r$@NUPx)8D17zS0IvDYc&(%>M4`mS zb^u*%NvWx4k&XeB^P8ErBX=zNv2_iy0zbE|hL+SA4ZFW$g z(Yi6n+F$q~2d3bW8iFc9YO}@zy{N#FDtABn^*^+-R_oP@t@Ze&~>y*%k!s zY4AGl04)^mA?_Izau1O;GJGJ~FDq&Vbh)6xE~RCHfUAesGzthJN5najKwc4zH!;zK zD-|(WfL8VaD0$*ghAN+|6QKLxq<|Ki0HWuHx*nXH69A-*yhoQaGw0XV2I9{AarW$f zTq&`uCgXzYGQ0vb6b&MyppcMcaQY>IA}R(34{Ubad1Kw_wHq{u;@-W)P8Qu0`GBFZ z(0l|)NJ<_sq!8?+4$3ov357{I_*x2yK^O^!2r=0sRVvn+9yOqt*1H=cZKOPasFyy; zsjwLX?X&xwD~O$asBO?C_6BhtVTKr5Q9!O6WwT=*5uS_40+B?u)w2`ZZDQ*}TJ)hV zgfV9cXeknlG4g|gx}5is06bk~rHb@pv!Y@`Qi(gSafk6pPvaf`H2xur$e^J71amjR zjT`USp4B-=&D8eot%%6Yms%}U^OqJNO~Ll_pK_8XHX1Hf7r@M<`M)evP=Jm(Fb9=Y z!N4*^4pw+XxB;E>o?LC?=y=VW-;M&_l>#=L>zx-eCKFDO-x0uM86d`4f`lGEERuci z?@EVu=}nFIGd@7jgNM#C4|D<9LbZvfEw*!K4A3T5b_w#yMDMxHC*TtGnM8i#SbSAUNfDdbf!iDiPUn4Wj%fW`=e|^8Ad1~?eGE9Wf;zNVfbCx^p~wwcYLV6!4$fd#wfL;P zYbAClL?YqGP}^QHQG7SUT?2wH3P^dWh?LaS@~W{ugRgO~K9@MQWR1I(JfpT4QiWkM z1`%8m-eWOkdbT#Gt{(j}QCL>BEA}5a;D7h7QMS_9*qC+&bxMAi$7rcZumsi1)AOu! z1m_~-;Q{7vu#IuFx<2|Vl zbU4}9bNArpA!OD!HUbuV2bmM;<1s3mgiQOI_pd@Rg8406LFI6>Bv!t_%}GIk5(rDD zuT9GNzGZf3ll3k{F?a85Sk~gFF!YsaVvcSOe3Ox$Zp0Ou6{x&>*RBCLG!cxRY^8v3 zlLX2c&Wr^Q_;&_x&&bM>#E4nnWaO6S{4U42FzwZ=O7S&i*(~Er^`u1tx)A{WP3Pia zqwpehr_~VDX-2`)jHFQt^FIHl)J67bS*3qa&_SqHphaHOJS_PtC8ac}AF`%-Z7bYv zAkc~i@I=HiDEHQ$az!HOm-6!E%dL`K{ca-utRm<;yW{0ZGybJiGl4`{>X(x`IU2*!qP0TwJYE#`%_R zt{XS>G^k^V-VSq3>(r?;5ZA>@Z{BWh(* zSKnpB%Jx-lH}z`FFARbSzx5Aaijj1nyZ*tkCMAnoYF`wPrRCtgu4J>CNe`5 z=(cDx-^x${bJ^RSyYMi2sJW5ght619mP0BIfe15VgatJx9I_BlFf3%?{75xXM(n(H zs5y131%@V3q2uS!(e48VModnjM?2km?-@b@;rcOvs^GOsG{H!Fmgb>z;|j>K`1p7t zLq+E4OYFd)K}C^73<-cS6#&eJ5!apq|01l>q`!b@qlriuN*=Q11kxxpzMu=H4EoJO z$kreyT%xL~3Ju6rNQsW;y19~Ao04J|SU!aMqYM=i$?Nc5Qq>^N_y+`-;^?%7V;RJA z5-SEjvTfimTsvJW%OPhVJux6`;V1qpa6*FQs|@48yvMq?k=Ni9k=XpAOv#-dS`NoZ z!Vx1e=)AZB(gR2$CXo7>Ry|=NJAYVZ4=x3kAx>;?piV}@1AUN3aIkiu;L*=b<0wZ8 zz@ng-lAmZ@jAfj-f5QNZc>0m2HBFtH(a-6dcXILg2CpK4wGONNjvLu;UFj&@|7_!? zp(nr#-o1UhNL^k1@ZrNCq&zd#js{n$skgjd=Ey%hH`jorXXOlMP(qr6dEFC5x`b02 z$&@_V_40rbf|o;Fg0mDT1Wrr=(nBHBpM4e2$f!(=wBzB%;)WFNB6>#j@^m7_3PV>p z(m!&^Sak~_a3#|bs-J?GVOPC@o%px+D~ z%f!|01okkftE_^A3EhO!@QNdSXjrDaImEAQ+$Zque zNm7$yQxR$SBoHf36e5t%aU)SeB~*x5DD5=Fhs5d~08?VnMtZo69Xqp<@GDjfdw>LX z%&CaQEOL!hiQR?=PARbZ#p=O+mN2#P4Mh-E4G46-W$;IlQ2qa<}C z0%Yu$P>QN~ndSWMIZhI$Ob>x>5X}NQ7Skc_$CG-3ESqTAAvOj;;m!4oz53t8Kj+l# z2y|1-ZaI%=$&Oa5Z^dpf7-g(%Yy}v4q#+upqzjNm&mDICm?rCY+h4~7mqdJ5TwXv* ziniit{y!m}5F?Aze9CnB2UdpbIr#4)o&OH*`Zpbr`)QB0XlKTQ8yFiCkd>Y8&x|F= z4SC6S%%)LF(cQ7&=!G`ma;gK-_RhbY%H)P9!g6vX=pZJU%cdb^go@rz$<_4dF^f2= zAkf%Q(@HEQ5SCzKAXYfMVx5!$6tker6rQh6UjRa#jA*y6uQ5TdDRv2g-0CtaBKSXD zeRH(>>;h^nds}J8VzQ3}{Htctd7C*p6kX^QJuHa-62|?$O_z^;^0z7(7q?*d_*FW%gzbbL_Ni>QVCO z$!k`7nOxqMB8fbpSZrn@3nxY@I3Zk35r*DqPiT67OV+DBD!=}u35wO9GSp&Wg%O2& z*DTh5wB$b)`=_-~q0Yl4TA-%TvimHLMvO<%D8YVc0rU!r}$wu^df8? z5&wCOgN7O$S4s06$#PKvzvb{n?Fg-;`es9Dv_2w+o4lzM9;&I0JHDhb&1|g5e4%}^ zP#x!_p!;TX>_a@V4beK-+vvwbS!3wQX3!pme5D!Pu%$_;cu~*0PjlaAM@n(m-~Z5I z3+9z$V=T>ejg89~on=wa=`Q&S7f<vCyTNa87LBZL_9%;r`!r*jVG z&9rPeng8+4N)Ifjv$Bp7rF4IOOB?63x2}c6FdN^iHA?>V;Q8ub6DCKys*CR@|X3Sl;NGUtSjt37OC??En37>495h02j*&N6s zoF48q$BGIe)g%64`e?46?(UaXg=L(Q1eZ_a+}*ZT*4!CwN6UQ*9cKp_BU0tg)g*fkYAuiKxL7-8 zP*)Mo+(l)9G>HKMtS<_4bYJM2hFunmo|=&A>`gLEx24+#PVTg9EGk{h_~A*?PWkds zai<|AumDCP_v0OC_ZN+D2EsBPiW?Dg#hdN|4;ta!3=v?=t0G zpt_a5qPkr5^ppmP`3NO}1q^%vQrr#;W6lc{3FVYAW(F1l`$}#WzsBiI7wLXquKTo9 zAm>U*H7EqGzR0^DfL8GHVMF^Im2;n+qH=%hMscA#NFK1l(EFOK7%q;c)^Y3}IZ3%> z-+y3F-b(BVaU(0sInX>K<77uv&P+Z0dVv;X2duJxUr;dAyOT;0`{ONRc6}TdIwcai!|IW< z9}hj}$8AuSgw~5s9{|E2HF2$^on+=j8qqXH^s=%B44i%y{O6zhN&?+NG~|8kEH2D` zJv&?P`dgvh(s%mG+HS^by)9Xc9w@L3Oih_Q2>sVleIt)`oSRp$x9Nh|HBHLBEiJ+O zcL1Z7pSE62`a&&gZeCujU-0qcorSb_MV@5k3DUBQZV%X)ugr^7@@<=HRGOO(z@4Q& z<2BS+OQ-{eU3MMbHnnxH0Z?jZ_OQF@CRK5q1M#$|_0q+Oz0FKyslD^)Atw+LTYVrP z15N#*s1~AbS)Kk1Vd}jWw@<0C)xb(=Dos8p$Y`d5PedfVWoo6($b|CbNY`E3u5H_* zd=dcNSUWhB)(S{Vb0V3hV8k#aUMM;hd37dyye{6eeM*vAUfdv5IwfvMg>h;Kw@g}! z?fYerTamN|!~9HhR{v^lZc7W9zVKHmKJ2rUFUR(^g;yGxn%=l~uSP#oh$a~w6T|A( zyRN@_-+(GcT;MfgrVrO!@!7ECz@}-U&qr%J{5R;(>wY6 z#6v*qh%&TS1%5k~d`fI*5!t8B>&@-Ik1Tpjy|mofStefR^3$T&&@#B)Q4CD(+k|@u z>tZw&?06;7*w*%Wpd7V?Xzt`qFokdl|DEh+7*g|sNN3EPFI8pJ^+QYi+`2_*-f@TN z+AB@71H;3UYKgbQrSH#VBEQw@j|P^VvrB+*^KiuUDxlSeg9aGl;RgW+v1})5=hP&b zpMHv$PMr!At?MH|4OyT4UqBwMo#Kc>K!Cn7;p^A0((Z#5pC(qXX4QUae=?%i{Dk|q zIy;;X{U}~@vlq6Z$(}&R_T8Vk5$=6AC{$$i`|`pJ0w4x~-f03y2zNq&?9sU?1*|(v z=sAZ2%P$Z9cqgN_YHNGfKlXem4k$3UY)R(VA8$kQ2Fo~!N1GmBG;BKv7wWy;wU!6f z)H>_hOYzn>jg27)S$1PR+GS;B=K=@s=3`huVf1HQoTaZJSKqQ)tbgL$x4(bvXo>b0 z+*Du$E3jh?rw6reZY8IhVcB}o6n8*Zl*@&S888B)AOZ&aYav8=_H2^>7y|jt3Z;OU zfsbuM`*p9$9+)@Hi@%a^&ESmK!xXDf7f(%=5+plyCcNVD_lHwt^P^ zirN7`n@;E~@(bTXl6Rn|w^uvaUfb7Dp|^*bvvkv3|D0Y7B$xL6AFqDlJuvW1FjDO7 zkWx=mmKSns$G+*sl9G~uy)AqCzkXFj6W9i|@GGw_7@AebGI35Bx$dwdk}D*CtR5si zsJX8{R8Vw>KH2;uz}v%{J>X{MbtNH*-E53mVY%PfRykF@fBznd44I}FNf7xs?>JED z%%*C}ZW8h0`!(I-?41_5ry+`S=TQju3p|=->`-!FINXE_V+iz^2g=)zACJK&nxKyj zw(VV?I{D>8WI4fR6a^*KJa;hPbiQR1pf^dGQ93 zIpq8H=feqKc(pRlEHO4VCV2^kO=R*0)`!MaE48RY@dY8LURo%_D}_Wtz(3X~_swdb zzh|6_IEWt3-)PUS+|$t|&u(hGmzS>%9a~PrgD*`_JiTpqP7`V>h+?4WW3GGqmW(9$ z#aBOXC;ME&3uzg$cl3paP3q~njC?fuUi-qNN57=_1|YjtJUqU^^l)q8Z99A+9kQ98 z5C>lnEHP?$o|mcP**vhY980&sEQoW)e+TUimH-4dlOr2-PuIW;p5{Y zo}alh@6h2A`ZtI9C$j1N4Q2Vpzv{T_YdC-8-T3AIwKkFe+((qn_uV+zZ_|B!4crI< z4Y;o}@CfE$-mkmRcvG~PvYl5d3L*^?@I!+Be&Px7;IYVRXCw>+zu*qXK!shEf zWJUW99V*%D^9SM{(8^$0Ckar2o4u2N6z4*Blc4TJ z-f{@s0z{^`;jbvv&EiCB%SKhniSEZ)^5GF!}Cww_S17F?$h_LOUtS(MldPUX)xzjkHt`rf#5S6Z;$ zC(1D9;E~E&qlgz=3Ku3;ylQsT)pXW3@hg07=c+)h9L?EYAJ9K;$FGbQzTm^Es>aag z3BIfZZtah*KLKTM%8j=^Vw-achqWA&)_omYWu$I*-DkS>u{nfc-BdW^nZFckg4cm|GAc_}swYunxuRxX&W>--RRv;O>ox1rj;=AT~bgAS`HdML= z_PdQ|eY4*!m|d9lc{IM+t`f3jBV{#{#W>0!Q7ZiWmQSn5&a(887=>^?X&4*Y6>yq_ zec(aYu9-Z&SgpgEI;E#MEc?n?O=IhZZZj5--?#sFk0GjCFcHh(5bR*KLmGpopM4(5!1 z8^+3^Pg3-jez*Hj$@T}0t%I2#FyhaHz8CnEXJ^NAFUauV43x$3-5w5IEAp`^$ISIQ z;wD!r|E zBXvXr0s&+aWSazf6LogSh29UM>lWdtyp1@DIy?4i7(X6Mtn5pt`RX_}oYlszcYs8l z>r>Ijn@%0ybKI0dS-Dzy-|r`Q=Wo!S*-jIK?MDJI_WAJmibHEJEnAKgddwyCs~NOh zr1@k(zUp_e_c9~TuCJXSV)}+pkn3W;nZp_E`d;edS{58DJMv+#munjKPmDeNY8&pVE3(xK^{KbEWj>|;xF*~< z`Po6g&U>1A!BfugP(UJl*k8xy{n~~MyUylR+&>d|ypSiETS&gX!5(|=MC>$%1Z4;! z6~SU1ms7B|@o&R_Dnb9ac0<-BDQN z+;pcCwy*K$gObl4?zQfU&OE!>yBBYm*z?zbBGKcU@l}K=W2{eByGx&+HVLyi;6^Xi zH-3L}t#0pdbDtdiwqs4~7?}M5O}=dE_4f9DQezfn8X|SXE}2~Lu5G#smq+_9U9};yrEo% zO0USMBo!N!kY~XXkq{(WKyHHpkJ)ae7pjHlAW6(XOUP&27Q$;477jmCbKRmm^j_3W z+)sAsAbQiYo8i5{iOo-py&qpXKOPaQC0~30HN*4JhzQlJmI^>g*o818TKSWdpfhf< z2d!#U_)l1w&WXp#z@h7W`j=}NqX5EH{jmj!aGj3b5e&pkZn9E%I6dv22jpp|+?y<4 zokbBx?=evbZ91PN;zV9 zsRMhpyP$DyIK1D5z(AD zBsVmBRjPoX;P6bpy8@Z(qJ{GxMj4%!dkvmX2qwc-HZ78{UsH_<5Ot@QN<*_q;yj|O z6b>-mmfm_r&+i}jusq5)`o=!N?~Do)zk`(wg!AeS*jHeZBYw*_7?N;i?eD;y2;o3& zsIq^vO(8cfwH%OA03XEa7c0k>;t&Hd90I3{CLDq))5zFZ05{svzYUY$ySW~WNhkKE~YQDuMVy~d36aVE-A%{qn`rXkn}NIH^UW|G+$Q)AW+>wrq| z<3qRfr#C4NCHc9={uONGr1M{!hBU)rK^uBarWUGM>JV+i+^&A7O6O#-jKuoasj2C6 zps4FNmDe0B_yiAz+E4l$v)cnt+d^Epp-v9k!;J3utf4n7ZerBwj-8T#nE4vuCH@() zf817f{<1z;C+y7r79A=fBNGadUQT->($F@H^D->BpIv&*^-IxV7?!>2?Ka$gJwI|= z@+jZGv1)lW+m?zn0E~Cn1;%rw8KcbVrl$VPcTKg4ll#cYJ0f#_iRFVV?b9*d+K*pr zh{&tOp>EWiZ~mi?QWt4_zOJQDFVS2%)${U`YN?vrP=L~<70CDw zURsy9W%WM?TE*XI1^!PDqrYE{^8fD;h4OdGIse~zo*hX9tsps)E~XXv-#%oi2CV=m zhU-6kxP2X=j#-vrxdD&Nn#8XTiuj!e`JL8_nxS71I>iQN7Z3M39{zrrj~OSSDDPL@ K7q4h=<-Y*BU*W?5 literal 36453 zcmce;by!tx_cgi^1w{k_MH(dq>6TPcLP|oqq!FaM5fPCRK{_lzq(Qo+r9tU#q`Tpp zOZ0tz-yi2(-?^@H&c1x~5n-=&-)r7;jxpw#+y9ZQ_$4e7EEEcLNmAmz0t$6D8-+UK zbshu05*XmE3V)#4Du~}hWww#cqfpmTlK1Z_ImImwJ31*D9v`pm{CsnkZ4*b~%uD<; zT@P-&QaJZy{y{eCdD<0*Ggz-nMYLKTs*GJ^eA5xjl_c?w@bcXkUhjY2Ie#9ltI@#7 z!!xP{pWr$T!M!mLt!uq)aT{^7ZbnwEYi)|yvMJq7)Qdlh1HzdfGnF=9#yfq5VsjWd zqEY>OIetP(-T(Wdc#4(%@BgPhB>(^L4@PZ2+AL}Nir(o`vv&s9%vX(DozdkYVIv8Q zYNZoQClpMNNM{oLcTYBKg_x?cDPd7XP7@Or<7J|xel`B+0{#vHYlZl1L{*%Tm?H_r zY(&`0ERz4@XE0QA)(T(w2Q|!>DcZf`Ng>diw7|QT=vAn~QfA{^l*jaUXYiV;hjK9@ zx-axv+$SI>a2y?f{KF&eenYMGkr8(E9G%8+ku`Ox)W3~%{%pWsl{-kTS?+-z%iJk+ zl{O>Zerx~IqJ!VyzT0Kx4D|<}#DeE_5hw>=vS zTng#Y3irHH&3|t!ZOB*kIw+ta!o<;%+ccYYz#sn7%&8JFdW-s)Li=d+fcPNquBLV*VZIEXI95+$~M{rq@&o-baZsiprhwyX#aa_H^ZA%HvI9m zwRNSHF#@mr1L##)a07AsmA=Q3Xrq}Am%P&|b-=rP`Oc$9m&NpdPj`HMoK_#spr~5r z#9nMWD{Gzkq~<03{UvN1hs~5kTiorM?WIAj8+`-$W*2a9W(r3=YAgyB%bcvW-PRuL zZ!ZNzMykB7D0ntlKh+d=+j*U4WMqWPwClxqjo)a__SQl#r{l6_Fu8!3o*q@w!*?I; z7kbLJ2h3D6lvPR_8zqd|;+o(B{(*tD-Q8hWR~b9fR9Itpp8bAlDgXB=Q@p@Fr`nlg zjcXTq2LexTvT<_hU2qSsm@G~fs^Vx{0|mDcYvlAU{pqi-N*U_hzpMl5?rCb0QHuvp z&8H+LKTcE5Ts1j9+;clzYfws6@P$RhY8Kn9HM3T->DOc9PzW~ij=D|$o~`mm$0lO) zI&%(dwMWA;lvPI#-3@NK1cK$E|JgFy#4XhC$&7IOO};KJOp&o@0~YhEcSUGoUV)J*07`3 zv>m^HfLvqD(`70aVecXB1l+pk%eRHf&g@P{>Y%=86k5E@M6GuHyghUfH{ymnm1DtGpbAL5ON&c0kC;0}0M`#gDYTqGF zHCH?j*Tmr-m(xOaMqER*%Uulb+Rr;q|G2siQSy{u$Avb;=J!ys?N?j4GpRM<8#mBW zy8W}VSV?)zuL}y2L12^NV1D@UA)N8?kE`0W3$TWZgiI3F=H1CMG<0-bA0J%Ig!4V2 z2|phVw+`RRWidpQx0mJlErdeop`PByh4MPRCq3zE#QQCOGxb{`j?23JUBeDrG4|4l zd!A)S%APU2uIzQilsuN>8~$O=X`UkL1rno5nP+2}2hr2TeVYuvTl;Ob(?8xx*)PK4QP|}Co56_-kakc?nVQk?lyXhG>0-Fe#KP!gz9^>PTq5DJ3c?~d zJ<_3Z;}z)X2gA6N=ZrS>o8_49IKcK%xu>ki?(=y$gd%ltcy5fR(x~a zDY%$8WbYwV4>uA|KI>LLCkhgS7%`{kOnIaR*!_Za^d4ypEmzaa56?KbQkd#w{X+z=|wMw|!g%1{m%-CaFzgdnZzzMfK+PC+Bh$UoJzb_$ip4W0@ zO5|iuu0%NO)#=M1OTbdZ5z{fo!GYI1C_%rbUM6#g)MMAXO04|}+sNqiMdD&dW#_%= z$i1mBIaFW1nMy&HseL7!EmYMt9k+3k3)48W?TMK0W#jo%+m;3kS?dm-pS!4+qpI0E zw7k1EiQF5OfYYk(SKA90E@a}Vn>tVU)0_PIdUe!ogi&jSIUYOiYDDgzFo zD+21TPxr8~e0b-|y-%G^qtqV~m=t3^J_yJ)w!E2;kZ|Rus+R(-)W}K(I|-%4h=Y!{ z$DScdESPK_D`%!9I&9c5skwpDGq8K!04g+>+6H+=jYVEnczWGrrh_(UmPk98!mN(%1!k05^4QgTB+6T?PN%I zWykvqFJ8V}pNX|x5Ai%ir=+BWm=M?0)cnd_@cIhFcUa!u;YR!XNVxzM`r78^fO6NJ zT!$s~-@nqt;f~Nu01-e^{S4{)n^|wLLefLLYu6f}Ch}QNoITp#YR+AG{5NY3-9kr; z@D6O5GTXkV$YVM3Iwg{xRWLE9Q>FeO&Sv-hp-`>MWDsu@x0$j-q`jPS+Pk&MhVBod zm=P>mKVX}8VTEk5tydV8UP0#QN>}3q0MIR@-UN3=%xSdRM4yP1G@I!k4}35#oxgD5 zgG4A*x>jif)cq%ggQi18?CnB3WG6=}p3%bY{77&?-KS$?dxJ+U)=}_G!`yRlD_1U2 z7}C~j_!kc6bpr@4+K1t~t7Fxhi~R&)O=qjZ^3&LPh>N}$@Z94l**AH@*G z%1Wo7-2At+;DwU4Ee6YCW1#OPG>RT(oc*W|2P&R;nZB@)K7m5nF`V|_285sr&#E@r zIIFH@tNZ&0P_rx(&IjdSW30AJdl#k{M@WnRXGh|iGtdYnpD4lNY+RjfZdKQ3oF(=5 zcOa9+#A(n8jewgrVbkM@UCma9Uqf0i|MM8AhA4E0Wyiz+eZe3?S@PPyjrNN<^B<1k z{Dq+k|3Ckr9+Bz2l`XOR<<3|Ao*YjjDP}4v+%8D|IqDfvtww?Ml^(`VIvle8tmSQu z$=Qfkjnpj`g_Cyt*8K7PTBqqr;wAE)&M$70;ixzzT|VV=HjL*W212r@P*UUX{@m7- z0YdL6o?vDD+2|?x_rUO`@RC;_{`ot_x&If~A4jWE9=qqUTZzNcLtqqNw9EN{ujv2$ zA`h&BLu$o+p@$i;)#}E^WQfRdqm{_`_;{v=#Zb|B4+#>06qpE(^E^2g+-Tw4JvbmB zB5I7atZ0IopLaL{1ggHhJp`bO(Ox-?YgAq-3JYH;P%#Kg%w7XOiiw*KhLA`_B=%>bbtf6xw}X6JX7aUriUF~w;~ns5Y+KJ z;zo&m3N3Tqfai1UXGF}24>2T)N0iP)bbK)R#j zQBS6p6yOQ}kPzdk#?U_Vf<>0COsp$6tKf%`l%=h$jXK<4$chtiWGR(GV%ho2v;N$= ztJ?X`29Y$E1Ng>aWkjabVF?w*_T*kfNK2%6ED}CV*)Lw4C1lmczLTY0J~v#-OBis@ z3sNP!;g2hjMv1vhF3YA6ctOFKoSj8rKaxKkmIhi9gh;(EUSnain|nmU{j|1QPDCa} zHomXI-SxGr#lSaz01jg-D{>9NQ2!&` z54Ppu4v>eIp;72`wAFjteV@zQ+Z!ocfG{?IT;%{YhS0ff|N9EEO5l{RSr6Ya)^&Uk zRUAfu1~wVrWn5g`5`f;RiYW*~jbzc%0}M02Zw|a>Vm8rpW~|yLoJs9%Rn?t`5ll@G z)N`GmFgrUtzdikh1$CT|Nfmk2s=&dV*Qc!A>#yEYek0=P0YtG5SLCp&C7ScX#fvrL zR*%w@nGp^Pb^Ck7+o5M%P2P-Xcx5FR+2)%qTaUnmZY8G>Z(aY7F^VmWt+!Gb;&o#VQ zQBlF9{_T9}a4aUz}x+-5yR%hvNBE0j|x%;p0z+qx8(Cyhu+oSD~k@87Ygq8h8MLU zIO~>5rk#{d|M+&N2~NXFMNPh0Z%Ohb?aAKnv@8Y9Sm5%#HCT7<+(D(OWEsI`zWG+F z`{AB1>Q!Li*)cewC@zx@)Tgy9$|q1e30)sU%O9+Mh_)P&sTrFI{O(&4TB z_37r+1Wb5ptyg-DW}H`3QxZM`^M13b8F45WvFMS|Ph;G1K3$rGUGFU1WAcLlLb&$1 zv|m2}fCFTI0?)N2UZ8i&vnXx`-mL6kx%3cteC7+yDS7=o+P9%|jq`STd9-@@>Kyhb z42sFw){|n}E2HfIp5rEy=^;z~+}a1+rj)LV_m)EJ@aX7CjiYf~9&&PZB_JTEfuyR{z)Tph;JgY%ng+X#SDMNOgmY)AB7N`LHEkzvIF?=Tmt^Va??u*=x%q8@>g6unkj3;N z75oIX2#Jc)`=vsnoM_kiRE$d`cNAW24m*w}mGC&9eVi*9M#m0{6_QTAnRWxu7Ew%*HJojW&*Tvn z7Dj1SdJNkyu6&BL@QfmcY>M!DYvDXI8QPsuxKpK1m2Vwc5isPeNra7&;IVI7U^&_b zWCKY|G(v^UaD1<~(o$MYZd`YCru)e`_(@dpJm-^$wQcVk>@Km+DWx`79ZA99Ao;-Py8LET{f@^;1`-FZ9ArkL*cM&!Z$2+smyW8e~syan3 zapsqbP7>5px7BLQH{mRxkR)D$4cGTbVBYA$B@P5$`9m$ipS zBJ1MTixRGt_@p`U7vjf6x{ zLcw+B%ozpd^gTzAl#M}4hDU+J%F61nJS3T;SI6ghEQsJM2t~WO4(~T_F3ZO8-Gx;# zsO1{G);UY#=Z}tojnFqZ-qs)<>gnl$HiHh~oO&j!ltJP1dDOx7l78(gyu(S#llLHD zrmN;Wrv!NeVn_bVqZ<_`$F6$%`gk)Otf8>25p2j^==R zAiIF1cd2*T3lYciF?vRmW}UM^fkjGxb0ljwX!!_+0Y&(xW)WLxXlUl_U715U9|K8Zu|LlbV9nZ!=SeI`9yXhE^51J} zqWSH=nlYyW9F@Ax)h_HIDkcgS!~@IaviP9bROXlFD9#0#szjX$Rc!&r8BpD|uG zzEr|L>uWN<1^I#T%)XHQ>j-9zbEnUAC_D_AhO7 znc?I0t`g;}w<1M`$1#}@4^ZkQ^ zldZr%2*KG@5ItlD?~o_op+3nQK}Vgw`nq- zaeE#gy7sI=fO6aFV;A z?3QkOPBr2IA-HhqQr*0r&Gw>N@4-|&&3zljF!sq(jFQrrG@xX zaypfAY)A{4CzkojUer!Ij^KBz9&ooXi=bb(9%dsus3_6bust9qO0%~TS5qr^b+81@ ziw0;@APfoUS+0TPz&BG-s4Humn|ApER%58UckhzjwmF;EFAd;?815AKNhS}caT^V! zQ^OnllXm5w7vLL1-Muxc+wvcW zgNK(Jl_-tEE`%{mR$hds{9ZhS0n`SYQY#u7s7KdMrwxVOd`rrGJqz6v*t zx25Y0L3_oH)^VeLlXq5ico`LlrFQDZ>~t^A2Xb;Owvm&_sA4SEKC0Sjd)767_pB<_ zTU**b{HD1|j7u2k%2G384=<7Ny}3ln1N;>e;&*o2N)j#NPoN264RMIqRZNGS_^No_ zUKI*Fj%V+gyZb$r+-eECO-fvHSJ3c{frm3meTw>9whUpKrAOzzYJ%MtJlRh4BLsdB z;1yE`^xuEZ%wE%L)B_!nhr=cI^8@*5&uIY^0nQd^JS0)&Wt}*$5kK)}qu#etyN}@d z%)^*S;)lI8s^u4*rhK`2LaYx<&giiimk8p8ma-FJJE=17a9`>$;Fx%lUqow#1yB*R zh`++t{bj0d>g+{vl_cSUy-~j4^jha5L7Ljn&he?$8YsS#zB9cw-R6_$HGFb<(xRE= z?@uMP&=Jsm!UHz}VnL9&ozY>!rOQRcPQrao4&g!fr|vdyo@Z(ZeV2;MAJ0ea;al|O z8!PO3j>1LMqU&*eTjM6(fn zdl~uX*-r^Z<7V4jdue8jlF%H%)sNoilU;c@+?IwCtL%yTU4Fr9a_sO5b$VAx4`dxg zn{|%6${bGlr$(jy)jXSWILLL0FCL6bU}eW$!_lj>VtY&~8u~-kg~@m5fo8*EL#13N zU544E2aLuAf`4KHerp=%D1TL&<2EKV7&Ry(ho_B}8LH~IRI2$&`WM}Q)~J(=&Lmna zz|`a68hd71akNNj*i}2_zrGa?O5Lkpygu9uD=n}VdzmEcu(vyWal;*L{avd$to!u! zw#JaZ>P+^xLu}~?fdsk3?ZnIEYnAA{tZ$0eGXxw>wyTC18_ARY3EUDmk$YO_(bk3h zi>&27(grlgK6Oq8jgQaQz5s90|hd6xMqEod!TZRdr|2jBk-EQTV1F6=!}_3Dw@Pc$))?W2u%vvk52x>`sz#to z%O38Gp%`t-&t+IzRR(!h_H9cJI(;Lpu_wCJ|zBtV_1{Vr5 zy&>6$q?pO~?pf~~3nYYugv>5vRem&!Y~%W(6EcvWkPJ;~>1e^|FJA;!9>ywWs8+=7 zZ~ex9G@Lj#=G>1g8LDG&WD=s%POSlCYvl@QsIBdo4eAAb^Ck-F>-VSmHpfG^joK6H zpqsY)dm)QK=}QNCX5Z1rj~{oPhWI>opC~#+{t1tDiO%zg`l_IqEIk8=3{;`|;G;M3 zr4D(vy%x_!XB59GnSwgq{G$CNcG$3_uKp4!KmtscZ8u*i?#7O{|GZ5I*gyc_8iG`< zR;+gpl~umYzcf(TV6bmySPN~T^~AMF(~+{aVt@QHnrN~gc(1PlH&_yCxffRYmTPO~zzVtf|Jdx^)!Wee^=Day6yn?RFrUT?|; z5y}g?i}+-MAvJ!U<7ruy*5`ERL&>P1c!p{e;(wvIjH=pXtu*LKKdI^MjRYQLJ+E*U zOifdfIv!722kc>Yc`T2;Kde*)0DS?ue;mjNlSWB+qg1GLG(UIifzZLC?amSTpVQb_ zj`Tf3nKot;yXH-1i77~ zuo@OQIk|f?tX1a63k@R)LZxU#>=Qyye`Q{(`sjPH_?=ZiEU)ETP+OBd_h?b>``gn& zy!)t*amuCs9DM=c>brY;!@Z7h7~n;m!terlxY!sz3;DwqmBt6K3#iLPM6X~Gs0XjF zSO>-NyG)t9{B1H)=6kE`%uS5~CX}dOMYA}idm}VrP1g@M%GMvUuFtm1fpk}Sv`vZv z-UzwlIl!Ub5@kOeik3&@e=hcxodh`}Y9MQT%?DdfeA{blPu9a3z`FJh z9n(XvJwYgae_Ml)Mf1*<7m9>?fAr%zyqk4U-@}N6`8R)-J0To%?GdjohnCGduzuNq69P`6U%&ZG^vg?VeI@p{cw#Sk0bsY8 z>$rjX{p-N&TJ@Q|4Rk9erWX4wX0TYKwG|cd&9ueWgg1pXfm|jNTTyke;#nmH5N&wn z476)N8AU_o^|#ozb59h1j>jj!$8Q8_`(-8lpEO+T`R8e{wExViOXx`SFY%xz&p1iB z<3ahmCo^=WSQv~?&EqL(`2x78!f7$w4IZ#-BL*(+niV2 zT=@qt2l+;#N3pU60dJQs_y0vSxdA zJg0l9D;1J#u71oE&#_oiPghPeqpz+w+Gls`W22Lessi%iALMV?ogB2gyPIv*Il*;s z3<9EBsnI1ASe-CY&5_LdD+%RJPEMCMM^8q2cNqWdyr;Yu#2JfWbNEN|Xa$R??QWrI$_DoMaY-ZbJ z?gWt_KM&m&G^e#XBfj|6UyEvPg%;$XcFiW3)mGg_X8?y`%u#}n>q~Nhf)u`OP>fgM zzp?rG`InZ8f8g7iffavz+ae3qt$2RN(A=cghK|HkRQ(e}dsb!TW^Nlrk|l`oDj4u>o_+($7;3|-6z?~^=r6mkJ*Tyh}^{>~o| zUo`3b$C%nzZNQ<&6HQ^_e)>isoaa<`s^{%;pZ;P*ED<^S4T$YdHAk;(cOqbOd6<-v zGI5cGy=Kut05l>);NyV)6~CFtAFqXYu7Yl=*X8-8nYsm(aw+L44`uXkgC`^(4B2Bj zgh&=@{Rx23yZ~L}slh3JYb3u}Re}qesV)%LZzi43LAuk;SHJDH%XZ_&4UioYfVnAr zdGukCg;SJHE};dYsa0U5OccJoztEC0(ewB=G--OZU71Up37R-~G^mLCo4)^F>h$S< zThBC?27KA#BUp9XpkVIJeF~X_?#^r5%9CRO=m~!WK`oG!m!*5hr32g#fbXecfZ`l- zH3%nhXsjvts-O_14DwYV+3ha-Mc~;$X?;L3e%g~R3E~T%+iv#4p^A?C1K@p%o6v*x zKJ8@seny#s&M2KA7!7^Ql3-S~+!vABF8=VNNFNm0m;3i$q$Pr?$)Q(!9(t~zlD&uL z1pb?mwLIYU$cjlV%R(odz|L0eapdx{f;H4HzI(pK&gnsy-S?J5iuWd+AJ1Z9Dt?y0 zLl`O)rJTW~=*-iW{gnJi)Gc!8M>RoYKr64Bd=OlA#89bFvWdd22zd&ndY}rnAg~iw z4GzYFpD*Qn%yOMxj@99=_4n_He-Q%>4Q+9>GLc=sz9Y|A4tk??AOaUbR)*dj1{kb6 zz#56TM(GpXke1mO6CJKgVtIX=*pwnUzGBrYaCxX5+XhRlhr=*1@MbYaW4!8#~-h)|n{%NId^_jA=vfa&Y zxm2Z8e2@{SZr*$a@2m{=!Q}%IYz)ZQ4R9;>poO-!wuamWB%+Q?ErExTEJ2l(B4E+8 z3OWV{?=_Hc#zA#R21jN%t4;#wH}YWRh3p->?CN>EH;eQ$!3ULmKoS~P8=sdl+^OP^ zPYc#AI`I0LL#NyGcq0)j=k&b3y;=3pZ)!`gWo9$O84)GEDy2TJTd%B(FE1-Y>NC{% z9s3p7pya;cY`7$JM4;2xG*K6D0T(v~Y=)rQpo7qN1IjL_8xC6fTqLOw+9fOCfj*7| zSEcaDp>2ZOdegyI6`GVHmAP+*8%86f?9X@LKtlG6{(Y+)T&$B=IdEjf9zA-av48bX zO=+6{cJT@S6&6h*a7Q9)=r3V@{uof_llhmImSm)*Tik~QK;~i?iDcG@06~ufoNUO& z>VwGxV8@^dP(M1F2)t)gzv$prL3gQn_Nm0;8l$^JDkdg?*j1@S^_<-eLz67xZ8&=QjkBD?(>)bONIR!2VD8Ehe! z%`u1xaC5u@nW`j7=g-cC#>t{7^TWadpzFx_Y=Eox`Fzt~oerwUwF}tTpFx)cwGltI zbtXp432+aX8Xtgec!S|eKtO<0=M2~xcG4%|V1kJNS{H25(myk`V!^%ERqAL7&Bf=i z!_d$K;Sp+*RXDBtXog3Q8UJ0lJ4z=vRf0ERx% z7)lM55*)1O{)u)-F9)8uQI!`O4GqoZD_33=7V@%I9&(_d8-b<^iWH!wXy^liE$6Rp z2d$g$ev}@sAn$?Q0O{A^(>{EZuF4LE!RPSB8b4e|<`Iw8vAX~}#9{itX(_)~VT%|# zOK?1$my2g#1qIP^adFk{furQJYP-~wye>yfcBv`-y|B*k)CDA6gW(YDHXjU|BLXQ! zD8d+Q-IG=N73wG&-A`kRqh`!*R#_AG1FXDcOQhrfv0&%)T3-JDNUkgRKauMM!I_H~ zG5;&s#m^XHUA*`SdPI(gEr@RycHLqh;{gSQzk_SCC{te3i>C0kBQ|(u|66T(&y_-C ztOOKpWMl+UqQ!MjrGu%n;I9I2o32#LD$8?_iPC6o(bd59+Xy5S8V2a#2Df!B`utbE zpg4yB-w^Kqd-3cMV6+f!aIE_MveD_jAVWuO#G4_16NE^7xJDds))*?qLF@FdF z{3iI5qVIeY|V%<0JEHF%4%*>I`KJu!A&3_+76TfsKAd_4(Ex25$#;ir1XSxbYxyQVfC8I?iAH4a zt!I`|W<7BaV5BG6xy^*DtHhb$hmaa0!PV2d|2$KGT7VOV^aIn?^It>DFQq>j^lT>= z7oZRyxZ1BlBM|Xnme`vmxcp{t3{QfmMPas#lTGKbX8$s?IdSDe!m~%>)ZhLDIgKc& zSO-utOovOj5nDO9!BfBA0%H*5E^#X>wg5urkFZOQiwoe10H;-X#`Ld) zfN{fWYrwu>xzDy?gC{l!d;I{3IfmAD!d)BQQH>s9E z8aI_Czy@>!!4Gbv*Pz0$E)|Y;0dmmO?@n-8cchn%yAFjM{O$$?_o2CcUb8ZEJA8e2 z*9nXbNQdu+X?!j8Gps@3N6dJRqwYvwF;$~*89kHlAdo^R2IS^!%h8HOmbzyi2TQ!r zp?&~z0t#pyEelIhgO0>SW&wC#(wPmM--&{a)dWU0x3C=>O=p=D%z4b=@u;CH}Yx1r?? zdj)u9wFXxtTdxiag>;)CK<=-Ml&3~;YWrxe5j)>pxCUjaSp!Jyy#Q+o&6V5oG4odv@PGR%=V9|2xFoBT_-xQ^r^;6?qqf;b^y4C#y)+=gPF zk&J};ZY2au*~#&N-9k?gm>*C``2#CJ%_}_WZ1oJsqc(&HPOZI}XL!+sd>x<*w2nRl zfdwFlFmeDR%T7U^CZA#F%b->x6mIIryJoFv&>wLw6B5pl#1DeQLTMIu_y^2Ugifg1 zyhqLhV$g^CM4V-X7Q+);y*jgSG@#!JRO|*gJXUq={^7{2h zFqI&(9Kh+W>?fk&aBYPyET7%nOct z5slgfUqLjWWf;3*LV-J{7Dh{oZ47}e2ZGK7&ke~OhRuWk29bFUhf;D85fN|+k_L)V zgX?zcQ;0D52EhY*rUQ-!oDfXp==6cb5PEw_(E3jOJ&>c12^FkHFDKh-{2pRF1ubI^ z#%utFPl6G_5N<6T3IYg)i1W)9EYye#1&RT5H>qK-;oEaz6%Y+X+)uC29BB&KOq~bM z=o2V6P`bcFX@~(Z1Ny&+)fLgj0Fc72-@AA3rgj-0@G5Ix(WX+lwrEa2P|FYosGP3q z4dNv{{R!V|+GF4uLW((bp-U=eH)h*6z;h;_t$P>6@37biSbJ~Wk5b{BD(tGv#>yhF z1Qg;^(enKBT&O%F;S|xxJQyp$?1q%UVbFM)gvY!Q)CL)_1*#R86T^@maz?=)`U>zl zJIrk$lso%L4Mp*mFr34Yx1v|yim}mZlsaUXJyc&$%&ORDtjmXFZ|kc<^Nb?bW$P&z zJ1`_mFA_2;owqo+Z4X`{6pZ(Hb?)|tRDn8>GRF(>4s>kvMAjrqu{l2$`(R2DcaRI$#-ybaJ?$b7GS*|Bh9s;tF^2G^7GlI500DKY*O> zLMK?^XPD-OqMXq5zOyE{#$f%CAG5$UioOcw+sW~9v^&7tzkop$Re8K`_Iewck^`Y4 zLp}dHC}!Xr2Uio|rN!aWYq+=}N~4CkQ;djofanwI z*8o6~LV~}HkADwLW==qUVI1HPs!(cAeaWB?cmxDvUK29^c5y#GbcRm$dC3pK5cM=N zSEWaammLcI7-^1}u&}W7pc$KqC(`t`w;de&Bs5E2kxbw-WEdDJvaZ>30oQx#^1(@e z=}Hkx^HIoT7AxnSFC6o z@85ID+Og3%)igAanh$XxrmK5>dwYAR!aWw~ouO+)G>2z9nA1L|q!?ddK~qprVB_X) zb!ur8qcr(DO0?jmb1fM|}eWz$0qFq7@Cc zH-naaP%FFxFPlPM?%y|Rd;bG!7t>68q8vOBq#{|{*dW7yP(N$>=r~)z?7=|+lbFg8 z*2_5Wfk3yKb4J-{V9fpw$kgEY=LPs3^UQo%oo;?^t`WLkZJnRQO$WX)h`z+G9vFy$ zibEorG-S{-H9lSq(PU#D=4`q1(tRg*X>9C`{>`X8vgJ!<%kFIkOw^iir~nG{VE7j^ zQ=WxkF^n-d1295NsbV~vI)n!}?wQZ;NNx`>6v@lqKq zqR9XOzri>J)D&R8Sa+ac!Cph5s3u}F>P5`gKxI|c z)%8HPNxuyi4v?rCcU^C9NF_@{6~WYnWLj@bPD1k3tu4CxiMF7SP%0>2i1!c-qK`)Z4VvQ0L4-KMi1ua~H?hIRXpsXsx3TZ@ z7Hll8U=Jj=n~xa}JjbB?H;oOZ<9RL)h~GD`6IMT|EB;0;L&Dv-HU#7XQC}h5P3N@> z>qC6>_4ivZ^kguhwSo06a+Z5&co>mh&3e+2M-Kg&M_|wa+2K2gM5@I$v@pbHF#g>a z@#p}`RsFetoo0+Kx9e5XJW%!_OAWQ+U9EgRv@SI_g5D~)+nEas}^Fgdnf@wPivLuL@ zFlG&1jtnUX8({k5;G9J!5<#HFH#Rm#kOn9R$UuVY_F{Ei9c{DG9t83e5Va9IzOeiL z*!cKe_}QkWCYZUW8C?7_gdkh6eqSahZ+&w^G%&Ve)(C7n*kB5TrwMN77a1AMAU4*s zmII4yeSg;ng-l0)Ap0_~bsr7PHP?VY`6eaNf`#peO3*1NxM}CL1*UA`6Ljj^x1(QQ zy`=yMW|9055q!nd(-VX!QNW*wRS{q* z0%YMaj5vCJ22DH&D9ZNoFjR}fdk~_|U|B{$Hq6oJgU<-Tm9Ugm*cBVlW?@hb%$Uhw zO53(z|rDQPq4RMxh(`n#*+$jCd$(Bt6Mf?ZS1HMjud4Ig1~QL(Ye2N)Q&L{$U& zQ3Jwf_#=Egqi{qIbnZ9ou}g!NmD4B3D<_De21EvN86JY&6nx_3oOuGC(;6BY2wg-D z0Q744U=9Y};0at3MxLlf4<7C9?{mQTQBnJPwKPI+fH2R3u%rw34&3jYPc?LJxaUSI zMPRat`=u^4D-GblsqH7ioDFP;o}uBptbHW^Os(ljw43$zxe@VMT}S4)5M5n5Q8*rS zmkqef9D^o&a6qju>VUJ%WpfUZ>W!5KwH?4_inpaT!UnwF04C8U{7fEZMzBhU?~1N)&UxEm2t6B=|2 z37xlL_b^or%zuw69q*7o(UYkm*FF?ATm zP_;iRAt8YXBSS^jK2SIiGaQgjIr!8HP=r8j%aZWev7Kpo0=|4O*kXdn3$tc{vETlP z5Q0n(@O9rIlX_E$(r7&*&A{DYpq3Ds69)1L+da0h&OZaF+LkZmV_|Ndc? zRW1f_?X|(5kLn05LwdK)fq#b$LmRv$t*>22R)xIYUPGEyr!R$%f4>J(TPVKFU)vXe zqi~b|&I5kFuZT1QPhYhEW1Nwp6A_J0UlRUC%0uUn^k;u;V`3e7dby8?o@Jxb_N%z) z??+}mhkWx`v2#T|Bp|cdHAQD_W#u#zM7)pV2pX@UF!cTFj@8)?(d#dwISL+ z>yTjY#0I|ygEbWuwc31TLf`Hn9KnR)103u1&Eg4`(@xE6eClN$YFI^ezqyXYbrMxRQ2;=WTfS{g6!Z?0n`2($Y-gKF^(# zzYdC)p3aCe6eHWvh%P{KrKP&2VQyQ~^`XG9NbNxJtgO@HQX_k47}rk*2XDX0F}Jd> z!cb6Dl$4R8zPZaq(OzV`p?vmT0^`o3mDAqkLl)%Wu2(S%KTh!R3&~;B71H9*hZ>}x zu+*+o_Pl}fu}R;1*#cX6`Ob8#J}>`NhVoLo>vOfHI7h_yJNy-)igtZ@a-`WHBPT}> z^a6x!tKUR$!Q zshi@@?LQQ_-BFjtY-(znuAS$tfhX@=AouWL{rB&JgKKkNh?LKnSLw2K*b3QGGkJyT)akt*1FZZGb!MZ!XtSdV6m!cl)&)wHZt`sz^#p=t7?e zeDm#nJWxqM7+SCXEC~hts#G}=sq5|UiQ(22ZnCt=3ijq)O6xV(owi(<>nRqJC6+p~ z0Y00E$7VclaO_rwa5M%Li1TuI^qy^<9X=dT_!=&gc@%lFe+xXN(=|<$ozMbhnuSc) zG-MGzjx7~B*%5P!H`-QOV6bb-cwg6f!iXfNrNvoz&>Z#mI~I~@=Em7z7Lck56BA-4^K;M<#j2i{N33^ z(_dYYp!sxsO=9H~Il%UU4(&@^&vT=Mt)@eBYWq8`-ovF1hQuq-R@q$sMX-XgH9wGa z5sW{L4y{1RIQ42PA$G_T>w}#1TZn*{u9soL4@Yy(iY$&6hRBi&pgK|&#l=9gFgPnU z>VCkiRciO)gCly0;0_t=6#KS_<1&-ByX)1+i~d6KiU=j<#IxGeGGh01eT4qSG175Ml`Pqo~L8iRm9 z|NXm27y&}yL(R+fnSuI&0sdxVTU%Si{{=Dur3W931Mk0yifT-w7S}a>(&Ts&T_bn# z+Qht?AG^MoEi$|Yq>$)n|K=h&nQGCTv2X(aI|vFJpnjFh^jzVQewXTMb-#O7CN{%= z@F^)YH9F3|pFe*-5DtMkW4HBrJCuiZ*$W0rPwc8$PUH2;lcUCtCpD@Ciz?ZNfVDO?y3&DuK*P%|GcAa}*Y6mHT_{#lKV3GD&F z!7uW`v(KJA%Uh&3vb0QG+WX_67sN*D#pgNV^-c^hT`|I-3)b`x>*=R+@kuY{=j|4L z5()@tw8fP+vfeslv*fuk6TkXJvpC)IrnIEw4H)QYPW<`vr$7=hHuSOBz*-)|VNm%JIYu<84~nt<22K`gZYPiVw<5 z18O{6tN`e*G78o;jp>4Vx_ltLe3gt$+Qx<>h=jMzrtB`dr81L_teaceS|9ZOpB)y5 zx5m%v6z9gSMaiTp(9qI`hKIvg%YyL`)UI;^z<;%wRL7V*1Bbv52a1P!_~aj;j?@Q>z&nI0c4pTc&~_Ay+_%U1e&Dle3`F6;)7&TjqtLjrEZ}eP zr%xHXh4*TShK5SlO5ppgt*!g_>+9=@JPQ~ezXndlK7O=g`-OX@bj|NIb zcvJJ)=5S^yRg*dNAor~OOTS^h>O{5t=~W2OHV0uCEL%A_(AnQw3HkI%KU5PjJW)IY zaD2Erc@mhoMH?l^G=L7Ug`%%jBNS>W8UaC=o39E8)HF0Bo}3%f7cTg#s!o+tc6)jI z6uC@eLH|fJcsAtR^l?wQw4}eJs+yYN9%gS0x8wH6kGKq_`S}z{S=pJze$ILxm`H5P z^>!RS1xLop`PLg(4j>Mqcvn1Yhw`QGAc90cFeZ@RIFDf_)W|xLCWN6CF(YC+Og}wO zhe1%Xo8Q{ol9qByd2A{*FDf?r$+qZ9be>bavB0In*+YSTzWxK}5D@PX)RHUpdhs;JEgFcFE zKYSvVY$mrsZflKh#! zo98(y+<5*Fi)7$W>X}MzL{Eod7ZAgLfQf|9aha^3prEL<6h2s^T~~iYx0xQYwZT`# zQjEuGMNgh>-LDup5Y$Ng_Kho;TtrgA#wOtzb4x3*V!TA-g<;2`!ck{Gu^>`}iWy0t zgu|gDBPUN)YzTm%c)~QXGFOQSi&E0t^Uw)4y?>bE6 z5l0;71{T{^8bcsy;^H<`S9=2=AE z+EU5Zm8K{m85s?uWHcx;OBs=oWREs7QWVN)5S5*knQ(~AB3nko4B6rLd>?g<@8fa* zbARvqpXPb;)(7 zQB|e4yH3w?@Z-By6?1Fw^73ZFa0wS7f9-cqFN?FgfS*GFb+avz6lLURknzxZx*B{i zJd*0!_3{b|LvgNCHw~zLInlAdIxVb0b6$YJ0>(2zKa9zU7GLm5WaR3R!Pz&#+XV7m za7%^|jiHM~*MV`-`B?Isq%Sgvt)Q#Hc;-&)hkS;Zw*aNv_l5k~N z62E|Wg@Su4bqEsUQ!or)`^zZ9ZFOx~JSOILVZM*YPT-v$Vb$wE?QT1E3}q9 zn`b#2TQMjV*n>|2SsPyzDwP^YSi({11f8mwvRj@-cN^^q(=P++5f2on2nU#Mom5 zFKUbfoeBxNls_%!fd;`;4pbQF(~&3_5^Y%?8qzNfxT+IurG}Q4%=>yk<+f{U%~#nj zoV^u{u8c1-dck0mgcs0~op#M{-+FEewIiB!3NXh)09=b~lt~3NbNX5n*@N)&Wc`?y zq5he(RZkYe7C^8R5G5-)I7}tKbakE87D|IM42pr90RbOcG(&$6c>mq5-Ai7ykp^o} zHIlSh_!$(l`+7g^_n>xPb^Vv+2m|e(xWs=4EC}=U(F39i zP4zp@HRg)-6_gzRnCUEPWi_Do;!tdn=`VlZjah(Ums5w>&3jX@*)YxPGu_T=+!!A^ zF!XR8HQjj^9R)R2Bj52yqeCI_2?>R-n`8HPlc)hEKZTp*R@m#S9)Cv372vD2oGOf= zAC2pp-VqVfSK6$otlXLV$w0HLp`q@`yQy!JK6f5GC?$;Ur)w-E5Dr$;hnVf8CBQ?B z%(Y>bg{1^8b!Z(d0gv8rh;e;|rGSJFAxFm-ivyVP2;kcMP|bF9beQ!*n<$S};rsXR z`Viw592uH=Y2L&R=?e%0jYe94*(}1;aY_8%#V1CoKB(ss%s!kjZ}#N>&N^C_r?`KA z>G^EAYNMf^uv@os4+>=EL+V2CbLj5?Qk(}J2A*;cWaFpgKThw{rUe%AURhQnsSGya#V6&yWdO^&JvIwrV2CHkbuP7{f?+RHvl(%b+ z9z9yiRkcQY2mIWj%DTcD+l7Q_p#3pQarfC$WXN%GRE1QRt*1ZP~ z*vBvL4ti!@7^d?eWUxtqm)8SrBmH+Uze0$(K-)uSX>HvOG4Ug!&4UmJMFIsH0W4q) zVA}}0fLlm_V+s~UR-|$w_k$#HK%frDIMpcqGuX#(2sK6gAwlfP+N{w4YTF*8=T|Nv zQY`(_($XaRH$lq-9J~UVr_cd^t%_I-hPkZD5Nt2O^`R!IM2d#I7wbvwS81Tfz{|kx zy>aKx)fg%yL!l@z;0IXm>XdU@g!P8Gwj3CIq8BvFCXgJEp@)kiI2HJ0F8mU5ll0A4 zxVg))Z7BeWCQ24iQm4QqphseFz*i>2kYr{yyG)+LRcT~7BwM9-0^#>Mhrx7K(gnMV zSvgHLBJIphv<&_Z!+oXo!h(XY!2v8>xv?TnPX>x%`rV*2NQ5iy0hV8$a-(JF4SjFi zxG`XVp}#o<50t%pa&od7;}ahgrI#a(z^GH;2*$fe`2pWg`BCIAfx;SZy~5~@pe+k! zvb5a}n8h4A-@dAP7q^wSn3rFNd-nw;GiirCW5f4*nr&I#B%L?hgqPV90JU zaW+0z3K9ahD2m8|0@l-~r~C2jAxse<8V>w*Bf14__$z)zvNWa(Lxs=@je*GZP2fO{ zAeGlnv!p|O1<6(>ku^HD031llB#H5b4Ej@NX8|}+wp|y^Vn=V^y;}&u49RuG-V_cE z5pcc`LQ+6dMj@%4*Ozg2C7y9!Tl5JQh7Y*XMdIUK&hKd5}m9dHlGbfOTZBy+e%i!fmr-B4#x zaRqj8c%#8E4RwYHz6`kpq_~0{3-ocK-M}g7vDPb2wKP+xZ6GtrVIO1_>WI_4pu}G? zRqGcVteCtdz@(#BJ-mdZ^^94gE*ttl#jfuL!bHfZj1wCxRQzvl2nq|M&S7`L=LH4@ zS$)czN608tQ&A_9w;a67zg9$q8N(dDqJjcR>04Dq9Sl4~ss^ipKAuHSbJl&rojq0ILRc6v7(%}Xy%QhN zRbjjkND0UhAlMFQL#}!4-nx170`N!B=V2>nMq$$mp%a*OaWXtfm^WylDQwk~+Pd_RB(|qF-=jXRy3sqY*?J9`rKMF?V7m zq$hhqp%KxYU?I$hSnE<;oQ01w9SGWe5a6+H*M|r2$3v{XBrzT3A4dLl507kGbY!u> zR0#?#PucxnMUKrk%Pnp6(ruDBX{5EKe8j`!z|U6`w!qGL^=bl^oeTc*v9C1!rrFfG zFUlW<_c03@Za)L}`u1%HN`4N#Va!?{`1ZFJ0H{+pFqI{76s#PO=n=2iyC?yqv$7Ov z2r(?@D;GxnPzmH;q z-Uo`o<#^Qdm$14)7J?4P&q`H5L4nFI^0@=s3@zL_Drz$vB~h?(+;tE#MH~4_aPu?G zq>bk0=9-1Xk8wIvs=TUd1?BkhkZu;6oN(Vvcd#mtjLSiF-o72C@od`_95nu)zOj0Cy@~eLi%$KA0~wsXanVxy3Hmg z-{$t!Qy(&S7{ zVC_fTTOxVaER&O$2jz3xNq*U~WtwFzlj1{cr{^053CX}Yc}6^xjovU3QV8G!{8}kq zSeJTwd()jKcfud_c7$K}%yj6!eftims+O^Gmm370NL}R3ipeE z;2>l{T92RCq4SU^a>}?o0Q}4UWpKh7t%jr`c5mZ`l$e2}kdTmp#R7hhXwvdU8-7kG zyXZ{qii{jz97m~%ZBaDV5L4ASQ59pY#ou3NJb7Yl=}wE5g5>WU{sP^ecOLKaX@~N1 zDJC-zX$`Q*u;jRTY03byy~V`S`Qv(;-zgSwd22=~BV_Ql<-XB6K&6cdN){YH+NI@R;`cqUQ4PC|kil4RYxg z6ckv0Zj_^}Sg~^absVH~-&TyKVnxZRS#KsXeIWf`J-MyI2Lb>$Z zb@k6)2_Rk!jBUogp9~hYP{EpcKuKwbc~mom+en(SgyMX@Qqb_}vb~DrhlRmcu3W(#y5!aAhSH$?h|$nz+q(|HWb4LWU~qbuiwldD z-bDEYEvo@O3If4-=;?!z#b!E*DaO_!Iaao-pY@(rWMm{N4w65Uj-)8(mO(q2pz>`) z1r+#e3pG#X%uHt_G+|$(U{_8V_?hJl!K3L>`&qlK0q4w6k5B& zLmnA-ufdFT8~!>HRt>w42V!%es}U0uJH0ql2%35?)WX)Sxper03Ykv{z+XC&Xon{4 z^}Bc8SS|*z6IlTyL9i0Z_JXeTG{WjoFcY;;k;V!vkCs?ssi<~U0bY?5JH%SQkI}k^ zrGlt|pgK`PVP=AeoU*bqqBKB(UKze;4tA_7@G;$eH+W+S8}av%gf;A4uiw16g5O2! z0TAs#O5Ndf639oy<1lRDqz+b5=kj-m)MAyiBj!*dI>v+t9`1c`=$F{$k9GPaz3}wh z0~ADMEd~mchb{#Zzte6h_5dt5C~g>yAy~7>8eWZr19m_eg76NUhMpXqKQY7y1!>+D zJ=EMViWIVZkSVD7nq6m{AB2PuR2Exp8{85k*y-nF%S>5q5)C}t9s+^TleTSbCq2D< z3M!?)NQnT>wgrB!p`oFF_N=Fe$HMtn9_}AqxJB#pfwOjM14`*x*Ye42&2U>_ORkIHmqHH396SnP#al-ZzKUpkn5lze~Q+hL`~w+S)#&*ij3d_ zfygp7G_=j;Xn1L|5*jmn=qBo+lHy{Id5c$5Y@5H^_J^JxO-xOF3T<3qU?9*fR7G>a z!5M|xUx$>DB#9X;NCC}4%+Ii~V{y9b6>$r)ATWOUV}?bJ;7lwraZvDG4+>%f)BG6v zO`^5M%}u~eC6yq)K#+vZ7HDXTlKT-nxEa+WE(iI5sB`mx*%4V3v^7Ky52aN+Y#rFQ zhy^*NGm`XHgDm?d46<*29WQyP=CY-KW(=#iHoATT{47cEl*qkJRroJtL%y4~!Y{Qii04KJQ|Lj$O-M4}O9K?_;wEKro|oZ`PwqFs8E=p$oppVtilFs8Ml?8oK!33r8o{6x-@wXQxc>8Q%8r|d+3PvZ!6PVwzY2s z!8>JT`<{b|K`|_C*@6*JjWNs<1J&(6G*RhsJbHUsxwxisouM+#i61 z6Uu%Zx1at6s2li-4+5cnNcHseJO#}&l-4YAe}Vb#e77kj@FW8!W-d5HA^vnXH#Z)R zKa;Mwbs&4w)YN1y*sh7w8=e(W|GY*8U(Lfys$d8wGDNJPH%}oVH;Oc9eqP`!3f2LZ z9hVU(KduE4r%COr@qKZ#*Uznt_oTxqGYL`GK^?jV4tBo%jb0zQ%&h4aa1U-GOQOD| z!fgJIj80o^T|C@F0Br>m1jQu8WfLGfe2KZv2wQ6&mhuksojcEZ@*+LO z&@fUhR?W}c4R0X9a?a5WCfJHtN;dEtW1DzU-eWCV9;03 zbue%A+HC1M`ZmDw{7Z&EfO*LHh8CS~E-PC-`joHP_5ol=09_2aUmF-8uK8|$D6A}G z3iPFbhZnzH+D1*Au8(wa5}{_znbBznY3oFBB|aO(KK#XHV5aKeQ~?a|w#7;lpZlar zW!Z%RQ$l$_-PC$aRt=)BSUu|4kYBhyn%txZ7FB6`LZ=`}vNI{tH*_ADN1TFNw=M-S z7OS0I+L+!VY?(^|U8mdnO7WS;${F8CWhd^aIJBXV@1W4xHu#D*YdouQ9T3GmE-9$< z_#%-4JcB5d_$=K!M=r=g9#^-I5C62!bv|>{3fk>6Y)4!0dvpX&3v-&_g{L!Ib7*y;Gz>LL55`4|&5W1ZUg)j5X2ju8U6ne|!iS@z^WeS2_c@5)(dFE63%85N z?27NmtcM1I>e!U+%+b8Gi_|lqs&Nm4#_RN6Ya=UsO809?($cH}lScQG`}9uLmW5FA zsnm8{OKxs2=5~yH#%Uhb5zrMV!x$gY5`P!9KH}&Bbv?Q-*;1 z=+|!wBPoakY`3?n*nKQU+ao513)1%Wcz(DoxsX8J0!G(wItTR}WxHt&3s$Qm)RM(+ z{n=A@Epo;|t6D=Jp$zPlg#Ti_-XJc{<_2C~(7ZgmmxbzNd-UxUjhRT(CBcEtkE01Zfz?%uttopI5-%q4{6L}GUF0h=xx z9Tqln#PXM5Sy>(!)HH5tJ=&*3@me#pb7^K4okpUapvM6Z+?3Xij(pn|m&LgyahZAX zCk5tIAn}WSPO3HX8vth|YL`GDCGexW96&08;$pnQ`QUmYx6p0j%H}WQeNA+M62k^} z`E^TszyR0}t;eEaDB3zY-oj6P7`Sr!S;fCqJbWyeNgt&> zUdEpYPr)D*jl`s?-d(eV{RfYViV6m@b=P}dN~ps#9ymTw{lW*hlrk;pB-TWwa$`0?0%7W@cf7TZs#1|^ z^o5gZWwX`br}&N?b45i*&Ca3K!g|C2hIR#of%;-tT%vK@srQ6NcK^6}*|suGXmWqzl>s=(xD+gA**jgRknP9JYOcXf63!kmlV zgUnkxKF-vhDG8Kul?LFQnQD3ElyX=g@ua-7WI1z?&7E<=0Qd9?$KDZ4;)7Y| z4 zU7MIHS`!R-WTmR4)t6B7DfKuV`TLIZ=9?Q0b}*9FKJV(Nm9_0A%gKwM%ci7TY6*K< zeAL0=u0SzdUY^OE_D)3J?x)?9$z0qe!m(XYu-Mj)nT4f1eX(tG;k{ddMR^l5v*vqOtPQUR)ukd>1ksE;~~PWvu= z;czG9UX*F{{&^XTB}kssxjqKuvSwt{lxXmz5F9yYrt;n292 zf0FTCWy?0mNY4L}J#X`uqUslXk|w1iSiVyrXK)cjgD1;zRAkT~6Y>P9rKMhw{SaYt#$iLEO=xQ}h}e*ypY$L3`E#$lwk$9FYG0nm+uoHY z{Gl-+wZ!qwNXCXun})t5tQM_}+0L`xHSDkqGc(02=_Y$-z?uACo_yUTC(n zUhA9UJ60DiT=inpifMScwykC>b~MtXk1SjE<6F~>(dPU5jqX{{EJ1r|HQdEaB5S;Z zMaF8~{gB4SiP5O*V6qu7=d>)00=>H~gr7enYM{JTE13th*gDtgVgwwfQ7&x8+au6^XKA+HF1>(O0 zs@eKvDKNQ9u*?wl7Tq8b{uAL;*2J*))WKc5tiM+5K|Z{oaL!8ef`US;fi^kFtv&DG z=UAgW9*E(L0~VF`8*iSPWGot%ru9;ai)g)gH?0?cW@dG7Ezc2tyax(m!Rs2M^EEsU zi05Rf(CV}&>jjGyIA}#GDN9cM?d0PBTXvEEPB`)p&x|I`f5TW_@VquYC8e;jkrO%r zh#Uc2rIpNT#CVsJLew`wu~P@%|8-v8-rph2iKMUp_4B{}uDuWEY49C;kqf8~T4|PN z-oM-4pGi_LDbPbYQ(!oHdg$Emx9SKZzXDX70!obe@2_X85Ny0zyuUl0f|xt?i3cl8Cg+d=Ve-)JGHcQZck=s##?}87T=L(U zr~Wb4k{+=Fo|xx`s7Z3ds@b`7Ym6Ttb_Xj1ou!SoLOF%h4fya6~O zR>hWU+~vi^-)0&zGL}DoJ96pGXt30>x)ejn1sqjHn-@zgNPJNg9y}Oc6y@}oGcjK} z++qR4LB1l7d`}Mv_piI+8NGRYA60x_&+c{k>ptPPR}L^djasiDY&PQfz5J7aNwj0X zZJ(5GZC%gs3!@f=%Q7_%7qu;4&r4=qio?#`<{!Uve1Wgj$VUwb7$4wVgu`0`mf44) zj4KfT@?a&@qMwV7>fn_W&Sp==h$C#hYr9O2&g@nSsgkZYpm=!#%-ejgq!QIm#1UT4 zNA8a{%RBPpjjyyVw%P2kpw{0L8PPF?>!RbnCsBtr_ctDr>Q#$&T%TVpxj`6yaDz1+4RCt@?w;B zwL5OjjI(LT9hSwNc6Ub%&h)vMr?d+lo9WVJOiHCtmi8Zz-J>==x5jz2i3Pb-Ez)sW zxXF`0Gjnos%8t@*?Ph#C%&Pl@evzNv=E(!MD~ke`jT+8Q-I)#Tj-P2vObmll>n?JA zH*UOQc=0sUVGHCF8MQ|Enw52RY#Ec*B5;gvU`=te$Ms$b51Eb4e_ zOiWh8AC6N=fIw_=aWq#IjK+0J$5lPmwuTM{zIV@UXHBfCYMi{_HdhrKX#w}HM|yTkbix$ zQJ?(Yt>Ayp|2$#6b*CmKHJNyaqt!<2v$VHSkr2bW>49Zlk&&MBu=>W znRO1nznfrGR8O1)S2*_Y0t|z}xbEQl_aA3u?21imgLN$JTjc#VOqj!~9+NqlyC-^rIS;)lSH&w#dMYHW z@-^kbBA_9lm}G@^$sMsDXBEg}&|mUQLLYkN_V5}R%oOmuZ__>po3_1XSmQO;ZIcJO zB_Dw2b1nwjHAjBFkyeg#`(8oho!0Kt&>wt*+hH>Zc&1t%TOEGn=J4IHs zYgE+m?39iV=4{KR0%I~jZ#I((G770S#yO@L85txO!0OFX(R|3cC9wck*4DBh7|m94 z>PK~Dqjq&AKA2*BNW_`G8|U47V&n<)@F1CKBCZ>1+SMrS+%Xfp^J7uNqJY{E> zcK0!D2?#$s5m=2SnHyxD7wE+T2nra#hW7RKv9hy!YMG~RXp4(VMk?~3n8vWsdLoUal&SLC>qBAr~ZHpC%&_b*ZkHGHhB2Fz0NfGTYt5u#4yOT@YaVvOD zn@bc_tHp?VqdPJ*0F zQ$)%8ct>}+i6F?dUTFmr6a{3>pmNzFm4%#HDbm1!m$((G+2p<&DCB5|5HPlQJ9x2E zoHp+d69QdMHXoTCXA=cz@AbUPO?{OdavOHQQ#7NNjJ#P-WD%gr{Ky1_I-p+d3zc#o ze8|(?edT%a+CJ<#Sc*BJj=6Ec6|V+Oxlsitv48FA@+6iYKLu_!@T1mS3&|)Bzx3h9 z@dfwzHCK@BVNX*v>JuCW==8v`FWn01V}%ef@bH|%L$@jwq`p5tyF(wcju9m>V+KgZ z!q^#zGo^ZSu#kQ5fmI=!6^2p)E|PWN_<{`FV^b-1@?DljMXKue!f10Fu+FqhESspg zHX(jpZytxw`peoJ&jol@?#H9|+?bgvKYU1TaZk>%Bj@sv!Pq6TV)jkU>G-BSHL#vd z>V|Py?LhOv{hgZA Date: Tue, 20 Feb 2024 15:49:25 +0100 Subject: [PATCH 4/5] MOBILE-4329 user: Rename user profile handler types --- src/addons/badges/services/handlers/user.ts | 4 +- src/addons/blog/services/handlers/user.ts | 4 +- .../competency/services/handlers/user.ts | 4 +- .../services/handlers/user.ts | 4 +- .../services/handlers/user-send-message.ts | 8 +- src/addons/notes/services/handlers/user.ts | 4 +- .../privatefiles/services/handlers/user.ts | 4 +- .../dataprivacy/services/handlers/user.ts | 8 +- .../features/grades/services/handlers/user.ts | 4 +- .../components/user-menu/user-menu.html | 36 ++++++-- .../components/user-menu/user-menu.scss | 2 +- .../components/user-menu/user-menu.ts | 85 ++++++++++--------- .../services/handlers/reportbuilder.ts | 8 +- .../classes/handlers/user-handler.ts | 11 +-- .../siteplugins/services/siteplugins.ts | 3 +- .../features/user/pages/profile/profile.html | 20 +---- .../features/user/pages/profile/profile.ts | 24 +++--- .../user/services/handlers/profile-mail.ts | 8 +- .../features/user/services/user-delegate.ts | 58 ++++++++++--- 19 files changed, 181 insertions(+), 118 deletions(-) diff --git a/src/addons/badges/services/handlers/user.ts b/src/addons/badges/services/handlers/user.ts index f9f357ce25b..54cf3e55226 100644 --- a/src/addons/badges/services/handlers/user.ts +++ b/src/addons/badges/services/handlers/user.ts @@ -16,9 +16,9 @@ import { Injectable } from '@angular/core'; import { CoreCourseUserAdminOrNavOptionIndexed } from '@features/courses/services/courses'; import { CoreUserDelegateContext, - CoreUserDelegateService, CoreUserProfileHandler, CoreUserProfileHandlerData, + CoreUserProfileHandlerType, } from '@features/user/services/user-delegate'; import { CoreNavigator } from '@services/navigator'; import { CoreSites } from '@services/sites'; @@ -33,7 +33,7 @@ export class AddonBadgesUserHandlerService implements CoreUserProfileHandler { name = 'AddonBadges:fakename'; // This name doesn't match any disabled feature, they'll be checked in isEnabledForContext. priority = 300; - type = CoreUserDelegateService.TYPE_NEW_PAGE; + type = CoreUserProfileHandlerType.LIST_ITEM; /** * @inheritdoc diff --git a/src/addons/blog/services/handlers/user.ts b/src/addons/blog/services/handlers/user.ts index f2b5e75deb5..85b81f942e8 100644 --- a/src/addons/blog/services/handlers/user.ts +++ b/src/addons/blog/services/handlers/user.ts @@ -16,7 +16,7 @@ import { Injectable } from '@angular/core'; import { CoreUserProfileHandler, CoreUserProfileHandlerData, - CoreUserDelegateService, + CoreUserProfileHandlerType, CoreUserDelegateContext, } from '@features/user/services/user-delegate'; import { CoreNavigator } from '@services/navigator'; @@ -32,7 +32,7 @@ export class AddonBlogUserHandlerService implements CoreUserProfileHandler { name = 'AddonBlog'; // This name doesn't match any disabled feature, they'll be checked in isEnabledForContext. priority = 200; - type = CoreUserDelegateService.TYPE_NEW_PAGE; + type = CoreUserProfileHandlerType.LIST_ITEM; /** * @inheritdoc diff --git a/src/addons/competency/services/handlers/user.ts b/src/addons/competency/services/handlers/user.ts index dbae1b0a826..9cd7df793fe 100644 --- a/src/addons/competency/services/handlers/user.ts +++ b/src/addons/competency/services/handlers/user.ts @@ -18,7 +18,7 @@ import { COURSE_PAGE_NAME } from '@features/course/course.module'; import { CoreUserProfile } from '@features/user/services/user'; import { CoreUserProfileHandler, - CoreUserDelegateService, + CoreUserProfileHandlerType, CoreUserProfileHandlerData, CoreUserDelegateContext, } from '@features/user/services/user-delegate'; @@ -36,7 +36,7 @@ export class AddonCompetencyUserHandlerService implements CoreUserProfileHandler name = 'AddonCompetency'; // This name doesn't match any disabled feature, they'll be checked in isEnabledForContext. priority = 100; - type = CoreUserDelegateService.TYPE_NEW_PAGE; + type = CoreUserProfileHandlerType.LIST_ITEM; cacheEnabled = true; /** diff --git a/src/addons/coursecompletion/services/handlers/user.ts b/src/addons/coursecompletion/services/handlers/user.ts index a31b5dc44bf..32227448288 100644 --- a/src/addons/coursecompletion/services/handlers/user.ts +++ b/src/addons/coursecompletion/services/handlers/user.ts @@ -16,7 +16,7 @@ import { Injectable } from '@angular/core'; import { CoreUserProfile } from '@features/user/services/user'; import { CoreUserProfileHandler, - CoreUserDelegateService, + CoreUserProfileHandlerType, CoreUserProfileHandlerData, CoreUserDelegateContext, } from '@features/user/services/user-delegate'; @@ -31,7 +31,7 @@ import { AddonCourseCompletion } from '../coursecompletion'; export class AddonCourseCompletionUserHandlerService implements CoreUserProfileHandler { name = 'AddonCourseCompletion:viewCompletion'; - type = CoreUserDelegateService.TYPE_NEW_PAGE; + type = CoreUserProfileHandlerType.LIST_ITEM; priority = 350; cacheEnabled = true; diff --git a/src/addons/messages/services/handlers/user-send-message.ts b/src/addons/messages/services/handlers/user-send-message.ts index b7a677645a2..d217fe58092 100644 --- a/src/addons/messages/services/handlers/user-send-message.ts +++ b/src/addons/messages/services/handlers/user-send-message.ts @@ -15,7 +15,11 @@ import { Injectable } from '@angular/core'; import { Params } from '@angular/router'; import { CoreUserProfile } from '@features/user/services/user'; -import { CoreUserDelegateService, CoreUserProfileHandler, CoreUserProfileHandlerData } from '@features/user/services/user-delegate'; +import { + CoreUserProfileHandlerType, + CoreUserProfileHandler, + CoreUserProfileHandlerData, +} from '@features/user/services/user-delegate'; import { CoreNavigator } from '@services/navigator'; import { CoreSites } from '@services/sites'; import { makeSingleton } from '@singletons'; @@ -29,7 +33,7 @@ export class AddonMessagesSendMessageUserHandlerService implements CoreUserProfi name = 'AddonMessages:sendMessage'; priority = 1000; - type = CoreUserDelegateService.TYPE_COMMUNICATION; + type = CoreUserProfileHandlerType.BUTTON; /** * @inheritdoc diff --git a/src/addons/notes/services/handlers/user.ts b/src/addons/notes/services/handlers/user.ts index 6626ba29bb1..399e3731032 100644 --- a/src/addons/notes/services/handlers/user.ts +++ b/src/addons/notes/services/handlers/user.ts @@ -16,7 +16,7 @@ import { Injectable } from '@angular/core'; import { CoreUserProfile } from '@features/user/services/user'; import { CoreUserProfileHandler, - CoreUserDelegateService, + CoreUserProfileHandlerType, CoreUserProfileHandlerData, CoreUserDelegateContext, } from '@features/user/services/user-delegate'; @@ -33,7 +33,7 @@ export class AddonNotesUserHandlerService implements CoreUserProfileHandler { name = 'AddonNotes:notes'; priority = 250; - type = CoreUserDelegateService.TYPE_NEW_PAGE; + type = CoreUserProfileHandlerType.LIST_ITEM; cacheEnabled = true; /** diff --git a/src/addons/privatefiles/services/handlers/user.ts b/src/addons/privatefiles/services/handlers/user.ts index 5aad0dd5446..81387cdeac8 100644 --- a/src/addons/privatefiles/services/handlers/user.ts +++ b/src/addons/privatefiles/services/handlers/user.ts @@ -18,7 +18,7 @@ import { AddonPrivateFiles } from '@addons/privatefiles/services/privatefiles'; import { makeSingleton } from '@singletons'; import { CoreUserDelegateContext, - CoreUserDelegateService, + CoreUserProfileHandlerType, CoreUserProfileHandler, CoreUserProfileHandlerData, } from '@features/user/services/user-delegate'; @@ -36,7 +36,7 @@ export class AddonPrivateFilesUserHandlerService implements CoreUserProfileHandl name = 'AddonPrivateFiles'; priority = 400; - type = CoreUserDelegateService.TYPE_NEW_PAGE; + type = CoreUserProfileHandlerType.LIST_ITEM; cacheEnabled = true; /** diff --git a/src/core/features/dataprivacy/services/handlers/user.ts b/src/core/features/dataprivacy/services/handlers/user.ts index fbb6bcd3ff1..60698c03d1d 100644 --- a/src/core/features/dataprivacy/services/handlers/user.ts +++ b/src/core/features/dataprivacy/services/handlers/user.ts @@ -13,7 +13,11 @@ // limitations under the License. import { Injectable } from '@angular/core'; -import { CoreUserDelegateService, CoreUserProfileHandler, CoreUserProfileHandlerData } from '@features/user/services/user-delegate'; +import { + CoreUserProfileHandlerType, + CoreUserProfileHandler, + CoreUserProfileHandlerData, +} from '@features/user/services/user-delegate'; import { CoreNavigator } from '@services/navigator'; import { makeSingleton } from '@singletons'; import { CoreDataPrivacy } from '../dataprivacy'; @@ -27,7 +31,7 @@ export class CoreDataPrivacyUserHandlerService implements CoreUserProfileHandler protected pageName = CORE_DATAPRIVACY_PAGE_NAME; - type = CoreUserDelegateService.TYPE_NEW_PAGE; + type = CoreUserProfileHandlerType.LIST_ACCOUNT_ITEM; name = 'CoreDataPrivacyDelegate'; priority = 100; diff --git a/src/core/features/grades/services/handlers/user.ts b/src/core/features/grades/services/handlers/user.ts index ade60adf5f5..247e255e9d1 100644 --- a/src/core/features/grades/services/handlers/user.ts +++ b/src/core/features/grades/services/handlers/user.ts @@ -19,7 +19,7 @@ import { CoreGrades } from '@features/grades/services/grades'; import { CoreUserProfile } from '@features/user/services/user'; import { CoreUserDelegateContext, - CoreUserDelegateService , + CoreUserProfileHandlerType , CoreUserProfileHandler, CoreUserProfileHandlerData, } from '@features/user/services/user-delegate'; @@ -38,7 +38,7 @@ export class CoreGradesUserHandlerService implements CoreUserProfileHandler { name = 'CoreGrades'; // This name doesn't match any disabled feature, they'll be checked in isEnabledForContext. priority = 500; - type = CoreUserDelegateService.TYPE_NEW_PAGE; + type = CoreUserProfileHandlerType.LIST_ITEM; cacheEnabled = true; /** diff --git a/src/core/features/mainmenu/components/user-menu/user-menu.html b/src/core/features/mainmenu/components/user-menu/user-menu.html index 04bacc312d5..70b2023c711 100644 --- a/src/core/features/mainmenu/components/user-menu/user-menu.html +++ b/src/core/features/mainmenu/components/user-menu/user-menu.html @@ -40,7 +40,7 @@

- @@ -48,15 +48,27 @@

- + @if (handlers.length + accountHandlers.length > 0) { + + - +