From a2d99dcc229178ee5127727138bfcd3ab311a6b7 Mon Sep 17 00:00:00 2001 From: Moroine Bentefrit Date: Wed, 11 Dec 2024 16:04:47 +0100 Subject: [PATCH 01/11] feat: Page "Mon tableau de bord" d'un CFA : afficher le RNCP et CFD [TM-1758] (#3930) Co-authored-by: Paul G. --- server/package.json | 2 +- .../generate-import-effectif.ts | 125 ++++++------ server/scripts/index.ts | 7 + server/scripts/main.ts | 31 +++ .../indicateurs-with-deca.actions.ts | 50 ++--- .../indicateurs/indicateurs.actions.ts | 78 +++++--- .../apis/apiAlternance/apiAlternance.ts | 33 +++- server/src/http/server.ts | 12 +- .../tests/integration/http/cfd.routes.test.ts | 96 ++++++++++ .../integration/http/organisme.routes.test.ts | 29 ++- .../integration/http/rncp.routes.test.ts | 51 +++-- .../@types/{CfdInfo.ts => ApiAlternance.ts} | 13 +- shared/models/indicateurs.ts | 8 +- .../CertificationDetails.tsx | 28 +++ .../CertificationDetails/CfdDetails.tsx | 78 ++++++++ .../CertificationDetails/RncpDetails.tsx | 102 ++++++++++ .../IndicateursEffectifsParFormationTable.tsx | 179 +++++++----------- 17 files changed, 637 insertions(+), 285 deletions(-) rename server/scripts/{ => commands}/generate-import-effectif.ts (63%) create mode 100644 server/scripts/index.ts create mode 100644 server/scripts/main.ts create mode 100644 server/tests/integration/http/cfd.routes.test.ts rename shared/models/apis/@types/{CfdInfo.ts => ApiAlternance.ts} (54%) create mode 100644 ui/modules/organismes/CertificationDetails/CertificationDetails.tsx create mode 100644 ui/modules/organismes/CertificationDetails/CfdDetails.tsx create mode 100644 ui/modules/organismes/CertificationDetails/RncpDetails.tsx diff --git a/server/package.json b/server/package.json index c7d31d6eb5..01f3294bdf 100644 --- a/server/package.json +++ b/server/package.json @@ -17,7 +17,7 @@ "init:dev": "yarn cli init:dev", "build": "tsup-node --env.NODE_ENV production", "typecheck": "tsc --noEmit", - "generate:import": "tsx scripts/generate-import-effectif.ts generate" + "generate:import": "tsx scripts/index.ts generate" }, "dependencies": { "@asteasolutions/zod-to-openapi": "^6.4.0", diff --git a/server/scripts/generate-import-effectif.ts b/server/scripts/commands/generate-import-effectif.ts similarity index 63% rename from server/scripts/generate-import-effectif.ts rename to server/scripts/commands/generate-import-effectif.ts index b631ec6f03..63b0cbb2cd 100644 --- a/server/scripts/generate-import-effectif.ts +++ b/server/scripts/commands/generate-import-effectif.ts @@ -1,18 +1,12 @@ import { writeFileSync } from "fs"; import { faker as fakerEn, Faker, fr } from "@faker-js/faker"; -import { program } from "commander"; -import { config } from "dotenv"; +import { program, type Command } from "commander"; import { MongoClient } from "mongodb"; import { IFormationCatalogue } from "shared/models/data/formationsCatalogue.model"; import { IOrganisme } from "shared/models/data/organismes.model"; import { write, utils } from "xlsx"; -import { getMongodbUri } from "@/common/mongodb"; - -config({ path: ".env" }); -config({ path: ".env.local", override: true }); - const fakerFr = new Faker({ locale: [fr] }); function optional(data) { @@ -29,15 +23,17 @@ function fakeEffectif(formateur: IOrganisme, formation: IFormationCatalogue) { { value: 3, weight: 10 }, ]); - const dateInscription = fakerFr.date.past({ - years: anneeFormation, - }); - const dateEntree = fakerEn.date.soon({ + const dateEntree = formation.date_debut?.at(-1) ?? null; + const dateFin = formation.date_fin?.at(-1) ?? null; + + if (!dateEntree || !dateFin) { + throw new Error('Formation "date_debut" or "date_fin" is missing'); + } + + const dateInscription = fakerFr.date.recent({ days: 90, - refDate: dateInscription, + refDate: new Date(dateEntree), }); - const dateFin = new Date(dateInscription); - dateFin.setFullYear(dateInscription.getFullYear() + anneeFormation); return { nom_apprenant: lastName, @@ -84,13 +80,13 @@ function fakeEffectif(formateur: IOrganisme, formation: IFormationCatalogue) { etablissement_lieu_de_formation_siret: formateur.siret, etablissement_lieu_de_formation_adresse: fakerFr.location.streetAddress(), etablissement_lieu_de_formation_code_postal: fakerFr.helpers.fromRegExp("[0-9]{5}"), - annee_scolaire: fakerFr.helpers.arrayElement(["2023-2024", "2024-2024"]), + annee_scolaire: fakerFr.helpers.arrayElement(["2024-2025", "2025-2025"]), annee_formation: anneeFormation, formation_rncp: optional(formation.rncp_code), formation_cfd: formation.cfd, date_inscription_formation: dateInscription, - date_entree_formation: dateEntree, - date_fin_formation: dateFin, + date_entree_formation: new Date(dateEntree), + date_fin_formation: new Date(dateFin), duree_theorique_formation_mois: Number(formation.duree) * 12, libelle_court_formation: formation.intitule_court ?? formation.intitule_long, obtention_diplome_formation: "", @@ -124,59 +120,46 @@ function fakeEffectif(formateur: IOrganisme, formation: IFormationCatalogue) { }; } -let client: MongoClient | null = null; - -program - .configureHelp({ - sortSubcommands: true, - }) - .showSuggestionAfterError() - .hook("preAction", async () => { - client = new MongoClient(getMongodbUri() ?? ""); - await client.connect(); - }) - .hook("postAction", async () => { - await client?.close(); - }) - .command("generate ") - .option("-c, --count ", "Count", "50") - .option("-n, --name ", "Name", "import") - .action(async (siret, { count, name }) => { - if (!client) { - throw new Error("Missing mongodb client"); - } - - const formateur = await client.db("flux-retour-cfas").collection("organismes").findOne({ siret }); - - if (formateur === null) { - throw new Error("OF not found"); - } - - if (formateur.relatedFormations == null) { - throw new Error("Not related formation"); - } - - const formationCles = formateur.relatedFormations.map((f) => f.cle_ministere_educatif); - const formations: IFormationCatalogue[] = (await client - .db("flux-retour-cfas") - .collection("formationsCatalogue") - .find({ cle_ministere_educatif: { $in: formationCles } }) - .toArray()) as any; - - if (formations.length === 0) { - throw new Error("Formation not found"); - } - - const data: any[] = []; - for (let i = 0; i < Number(count); i += 1) { - data.push(fakeEffectif(formateur, fakerEn.helpers.arrayElement(formations))); - } - - const worksheet = utils.json_to_sheet(data); - const workbook = utils.book_new(); - utils.book_append_sheet(workbook, worksheet, "Sheet"); - - writeFileSync(`./outputs/${name}.xlsx`, write(workbook, { type: "buffer" })); - }); +export default function registerCommand(program: Command, getClient: () => MongoClient) { + program + .command("generate ") + .option("-c, --count ", "Count", "50") + .option("-n, --name ", "Name", "import") + .action(async (siret, { count, name }) => { + const client = getClient(); + + const formateur = await client.db("flux-retour-cfas").collection("organismes").findOne({ siret }); + + if (formateur === null) { + throw new Error("OF not found"); + } + + if (formateur.relatedFormations == null) { + throw new Error("Not related formation"); + } + + const formationCles = formateur.relatedFormations.map((f) => f.cle_ministere_educatif); + const formations: IFormationCatalogue[] = (await client + .db("flux-retour-cfas") + .collection("formationsCatalogue") + .find({ cle_ministere_educatif: { $in: formationCles } }) + .toArray()) as any; + + if (formations.length === 0) { + throw new Error("Formation not found"); + } + + const data: any[] = []; + for (let i = 0; i < Number(count); i += 1) { + data.push(fakeEffectif(formateur, fakerEn.helpers.arrayElement(formations))); + } + + const worksheet = utils.json_to_sheet(data); + const workbook = utils.book_new(); + utils.book_append_sheet(workbook, worksheet, "Sheet"); + + writeFileSync(`./outputs/${name}.xlsx`, write(workbook, { type: "buffer" })); + }); +} await program.parseAsync(process.argv); diff --git a/server/scripts/index.ts b/server/scripts/index.ts new file mode 100644 index 0000000000..c75b714777 --- /dev/null +++ b/server/scripts/index.ts @@ -0,0 +1,7 @@ +import { config } from "dotenv"; + +config({ path: ".env" }); +config({ path: ".env.local", override: true }); + +// Dynamic import to start server after env are loaded +import("./main"); diff --git a/server/scripts/main.ts b/server/scripts/main.ts new file mode 100644 index 0000000000..4ea0befebc --- /dev/null +++ b/server/scripts/main.ts @@ -0,0 +1,31 @@ +import { program } from "commander"; +import { MongoClient } from "mongodb"; + +import { getMongodbUri } from "@/common/mongodb"; + +import registerCommand from "./commands/generate-import-effectif"; + +let client: MongoClient | null = null; + +const getClient = (): MongoClient => { + if (!client) { + throw new Error("Missing mongodb client"); + } + return client; +}; + +program + .configureHelp({ + sortSubcommands: true, + }) + .showSuggestionAfterError() + .hook("preAction", async () => { + client = new MongoClient(getMongodbUri() ?? ""); + await client.connect(); + }) + .hook("postAction", async () => { + await client?.close(); + }); + +registerCommand(program, getClient); +await program.parseAsync(process.argv); diff --git a/server/src/common/actions/indicateurs/indicateurs-with-deca.actions.ts b/server/src/common/actions/indicateurs/indicateurs-with-deca.actions.ts index 5a37743cbd..b1520afd84 100644 --- a/server/src/common/actions/indicateurs/indicateurs-with-deca.actions.ts +++ b/server/src/common/actions/indicateurs/indicateurs-with-deca.actions.ts @@ -1,7 +1,7 @@ import { ObjectId } from "mongodb"; import { TypeEffectifNominatif } from "shared/constants/indicateurs"; import { Acl } from "shared/constants/permissions"; -import { IOrganisation } from "shared/models"; +import { IOrganisation, type IndicateursEffectifsAvecFormation } from "shared/models"; import { effectifsDECADb, effectifsDb } from "@/common/model/collections"; import { AuthContext } from "@/common/model/internal/AuthContext"; @@ -113,7 +113,7 @@ export const getOrganismeIndicateursEffectifsParFormation = async ( ctx: AuthContext, organismeId: ObjectId, filters: FullEffectifsFilters -) => { +): Promise => { const indicateurs = [ ...(await getOrganismeIndicateursEffectifsParFormationGenerique(ctx, organismeId, filters, effectifsDb())), ...(await getOrganismeIndicateursEffectifsParFormationGenerique( @@ -125,29 +125,31 @@ export const getOrganismeIndicateursEffectifsParFormation = async ( )), ]; - const mapRNCP = indicateurs.reduce((acc, { rncp_code, ...rest }) => { - // TODO: get niveau from CFD if not found - const rncp = rncp_code ?? "null"; - return acc[rncp] - ? { - ...acc, - [rncp]: { - rncp_code, - apprentis: acc[rncp].apprentis + rest.apprentis, - abandons: acc[rncp].abandons + rest.abandons, - inscrits: acc[rncp].inscrits + rest.inscrits, - apprenants: acc[rncp].apprenants + rest.apprenants, - rupturants: acc[rncp].rupturants + rest.rupturants, - }, - } - : { - ...acc, - [rncp]: { - rncp_code, - ...rest, - }, + const mapRNCP = indicateurs.reduce>( + (acc, { rncp_code, cfd_code, ...rest }) => { + const id = `${rncp_code ?? "null"}-${cfd_code ?? "null"}`; + + if (acc[id] == null) { + acc[id] = { + rncp_code, + cfd_code, + ...rest, }; - }, {}); + } else { + acc[id] = { + ...acc[id], + apprentis: acc[id].apprentis + rest.apprentis, + abandons: acc[id].abandons + rest.abandons, + inscrits: acc[id].inscrits + rest.inscrits, + apprenants: acc[id].apprenants + rest.apprenants, + rupturants: acc[id].rupturants + rest.rupturants, + }; + } + + return acc; + }, + {} + ); return Object.values(mapRNCP); }; diff --git a/server/src/common/actions/indicateurs/indicateurs.actions.ts b/server/src/common/actions/indicateurs/indicateurs.actions.ts index e051bc3247..8f9f69187c 100644 --- a/server/src/common/actions/indicateurs/indicateurs.actions.ts +++ b/server/src/common/actions/indicateurs/indicateurs.actions.ts @@ -23,6 +23,7 @@ import { combineFilters, } from "@/common/actions/helpers/filters"; import { findOrganismesFormateursIdsOfOrganisme } from "@/common/actions/helpers/permissions"; +import { getCfdInfo, getRncpInfo } from "@/common/apis/apiAlternance/apiAlternance"; import { organismesDb } from "@/common/model/collections"; import { AuthContext } from "@/common/model/internal/AuthContext"; @@ -30,7 +31,11 @@ import { buildEffectifMongoFilters } from "./effectifs/effectifs-filters"; import { buildDECAFilter } from "./indicateurs-with-deca.actions"; import { buildOrganismeMongoFilters } from "./organismes/organismes-filters"; -function buildIndicateursEffectifsPipeline(groupBy: string | null, currentDate: Date) { +function buildIndicateursEffectifsPipeline( + groupBy: string | null | Record, + currentDate: Date, + extraAccumulator: Record = {} +) { return [ { $addFields: { @@ -78,6 +83,7 @@ function buildIndicateursEffectifsPipeline(groupBy: string | null, currentDate: $cond: [{ $eq: ["$dernierStatut.valeur", STATUT_APPRENANT.FIN_DE_FORMATION] }, 1, 0], }, }, + ...extraAccumulator, }, }, { @@ -92,6 +98,7 @@ function buildIndicateursEffectifsPipeline(groupBy: string | null, currentDate: abandons: 1, rupturants: 1, finDeFormation: 1, + ...Object.entries(extraAccumulator).reduce((acc, [key]) => ({ ...acc, [key]: 1 }), {}), }, }, ]; @@ -441,8 +448,8 @@ export async function getOrganismeIndicateursEffectifsParFormationGenerique( db: Collection, decaMode: boolean = false ): Promise { - const indicateurs = (await db - .aggregate([ + const indicateurs = await db + .aggregate([ { $match: combineFilters( await getOrganismeRestriction(organismeId), @@ -453,43 +460,58 @@ export async function getOrganismeIndicateursEffectifsParFormationGenerique( } ), }, - ...buildIndicateursEffectifsPipeline("$formation.rncp", filters.date), + ...buildIndicateursEffectifsPipeline( + { + rncp: "$formation.rncp", + cfd: "$formation.cfd", + }, + filters.date, + { + intitule: { $first: "$formation.libelle_long" }, + niveau_europeen: { $first: "$formation.niveau" }, + } + ), { $project: { _id: 0, - rncp_code: "$_id", + rncp_code: "$_id.rncp", + cfd_code: "$_id.cfd", apprenants: 1, apprentis: 1, inscrits: 1, abandons: 1, rupturants: 1, - }, - }, - { - $lookup: { - from: "rncp", - localField: "rncp_code", - foreignField: "rncp", - as: "rncp", - pipeline: [ - { - $project: { - _id: 0, - }, - }, - ], - }, - }, - { - $unwind: { - path: "$rncp", - preserveNullAndEmptyArrays: true, + intitule: 1, + niveau_europeen: 1, }, }, ]) - .toArray()) as IndicateursEffectifsAvecFormation[]; + .toArray(); - return indicateurs; + // Fix temporaire en attendant la V2 + // Correction des intitulés de formation manquants, à partir du CFD / RNCP + return Promise.all( + indicateurs.map(async (indicateur) => { + if (indicateur.rncp_code === null && indicateur.cfd_code === null) { + return indicateur; + } + + if (indicateur.intitule && indicateur.niveau_europeen) { + return indicateur; + } + + const [cfdInfo, rncpInfo] = await Promise.all([ + indicateur.cfd_code ? getCfdInfo(indicateur.cfd_code) : null, + indicateur.rncp_code ? getRncpInfo(indicateur.rncp_code) : null, + ]); + + return { + ...indicateur, + intitule: indicateur.intitule ?? cfdInfo?.intitule_long ?? rncpInfo?.intitule ?? null, + niveau_europeen: indicateur.niveau_europeen ?? rncpInfo?.niveau ?? cfdInfo?.niveau ?? null, + }; + }) + ); } export async function getEffectifsNominatifsGenerique( diff --git a/server/src/common/apis/apiAlternance/apiAlternance.ts b/server/src/common/apis/apiAlternance/apiAlternance.ts index becc3fe30d..861bb98706 100644 --- a/server/src/common/apis/apiAlternance/apiAlternance.ts +++ b/server/src/common/apis/apiAlternance/apiAlternance.ts @@ -1,7 +1,7 @@ import { captureException } from "@sentry/node"; import type { ICommune } from "api-alternance-sdk"; import Boom from "boom"; -import CfdInfo from "shared/models/apis/@types/CfdInfo"; +import type { CfdInfo, RncpInfo } from "shared/models/apis/@types/ApiAlternance"; import logger from "@/common/logger"; import config from "@/config"; @@ -51,6 +51,37 @@ export const getCfdInfo = async (cfd: string): Promise => { } }; +export const getRncpInfo = async (rncp: string): Promise => { + try { + const certifications = await apiAlternanceClient.certification.index({ identifiant: { rncp } }); + + if (certifications.length === 0) { + return null; + } + + // All certifications have RNCP, so each `.rncp` property is not null (that's just a type refinement issue). + const data: RncpInfo = { + code_rncp: certifications[0].identifiant.rncp!, + intitule: certifications[0].intitule.rncp!, + niveau: certifications[0].intitule.niveau.rncp!.europeen, + date_fin_validite_enregistrement: certifications[0].periode_validite.rncp!.fin_enregistrement, + actif: certifications[0].periode_validite.rncp!.actif, + eligible_apprentissage: certifications[0].type.voie_acces.rncp!.apprentissage, + eligible_professionnalisation: certifications[0].type.voie_acces.rncp!.contrat_professionnalisation, + romes: certifications[0].domaines.rome.rncp!, + }; + + return data; + } catch (error: any) { + logger.error( + `getRncpInfo: something went wrong while requesting RNCP "${rncp}"`, + error.response?.data || error.message + ); + captureException(new Error(`getRncpInfo: something went wrong while requesting RNCP "${rncp}"`, { cause: error })); + return null; + } +}; + export const getCommune = async (codePostal: string | null | undefined): Promise => { if (!codePostal) return null; diff --git a/server/src/http/server.ts b/server/src/http/server.ts index 569df73629..707890c179 100644 --- a/server/src/http/server.ts +++ b/server/src/http/server.ts @@ -96,12 +96,11 @@ import { mergeOrganismeSansUaiDansOrganismeFiable, } from "@/common/actions/organismes/organismes.duplicates.actions"; import { searchOrganismesFormations } from "@/common/actions/organismes/organismes.formations.actions"; -import { getFicheRNCP } from "@/common/actions/rncp.actions"; import { createSession, removeSession } from "@/common/actions/sessions.actions"; import { generateSifa } from "@/common/actions/sifa.actions/sifa.actions"; import { createTelechargementListeNomLog } from "@/common/actions/telechargementListeNomLogs.actions"; import { changePassword, updateUserProfile } from "@/common/actions/users.actions"; -import { getCommune } from "@/common/apis/apiAlternance/apiAlternance"; +import { getCfdInfo, getCommune, getRncpInfo } from "@/common/apis/apiAlternance/apiAlternance"; import { COOKIE_NAME } from "@/common/constants/cookieName"; import logger from "@/common/logger"; import { effectifsDb, organisationsDb, organismesDb, usersMigrationDb } from "@/common/model/collections"; @@ -760,7 +759,14 @@ function setupRoutes(app: Application) { authRouter.get( "/api/v1/rncp/:code_rncp", returnResult(async (req) => { - return await getFicheRNCP(req.params.code_rncp); + return await getRncpInfo(req.params.code_rncp); + }) + ); + + authRouter.get( + "/api/v1/cfd/:cfd_code", + returnResult(async (req) => { + return await getCfdInfo(req.params.cfd_code); }) ); diff --git a/server/tests/integration/http/cfd.routes.test.ts b/server/tests/integration/http/cfd.routes.test.ts new file mode 100644 index 0000000000..aafd93a219 --- /dev/null +++ b/server/tests/integration/http/cfd.routes.test.ts @@ -0,0 +1,96 @@ +import { AxiosInstance } from "axiosist"; +import type { CfdInfo } from "shared/models/apis/@types/ApiAlternance"; +import { it, expect, describe, beforeEach, vi } from "vitest"; + +import { getCfdInfo } from "@/common/apis/apiAlternance/apiAlternance"; +import { organismesDb } from "@/common/model/collections"; +import { useMongo } from "@tests/jest/setupMongo"; +import { organismes, testPermissions } from "@tests/utils/permissions"; +import { RequestAsOrganisationFunc, expectUnauthorizedError, initTestApp } from "@tests/utils/testUtils"; + +let app: Awaited>; +let httpClient: AxiosInstance; +let requestAsOrganisation: RequestAsOrganisationFunc; + +vi.mock("@/common/apis/apiAlternance/apiAlternance"); + +describe("GET /api/v1/rncp/:code_rncp - retourne une fiche RNCP", () => { + useMongo(); + + const cfd = "36T32603"; + const cfdInfo: CfdInfo = { + date_fermeture: new Date("2026-08-31T23:59:59.000+02:00"), + date_ouverture: new Date("2014-09-01T00:00:00.000+02:00"), + niveau: "5", + intitule_long: "TECHNICIEN SUPERIEUR SYSTEMES ET RESEAUX (TP)", + rncps: [ + { + code_rncp: "RNCP31115", + intitule_diplome: "Technicien supérieur systèmes et réseaux", + date_fin_validite_enregistrement: new Date("2023-09-01T23:59:59.000+02:00"), + active_inactive: "INACTIVE", + eligible_apprentissage: true, + eligible_professionnalisation: true, + }, + { + code_rncp: "RNCP37682", + intitule_diplome: "Technicien supérieur systèmes et réseaux", + date_fin_validite_enregistrement: new Date("2026-09-01T23:59:59.000+02:00"), + active_inactive: "ACTIVE", + eligible_apprentissage: true, + eligible_professionnalisation: true, + }, + ], + }; + + beforeEach(async () => { + app = await initTestApp(); + httpClient = app.httpClient; + requestAsOrganisation = app.requestAsOrganisation; + vi.mocked(getCfdInfo).mockResolvedValue(cfdInfo); + await organismesDb().insertMany(organismes); + }); + + it("Vérifie qu'on ne peut pas accéder à la route sans être authentifié", async () => { + const response = await httpClient.get(`/api/v1/rncp/${cfd}`); + expectUnauthorizedError(response); + }); + + describe("Permissions", () => { + testPermissions( + { + "OF cible": true, + "OF non lié": true, + "OF formateur": true, + "OF responsable": true, + "Tête de réseau même réseau": true, + "Tête de réseau Responsable": true, + "Tête de réseau autre réseau": true, + "DREETS même région": true, + "DREETS autre région": true, + "DRAFPIC régional même région": true, + "DRAFPIC régional autre région": true, + "DRAAF même région": true, + "DRAAF autre région": true, + "Conseil Régional même région": true, + "Conseil Régional autre région": true, + "CARIF OREF régional même région": true, + "CARIF OREF régional autre région": true, + "DDETS même département": true, + "DDETS autre département": true, + "Académie même académie": true, + "Académie autre académie": true, + "Opérateur public national": true, + "CARIF OREF national": true, + Administrateur: true, + }, + async (organisation, allowed) => { + const response = await requestAsOrganisation(organisation, "get", `/api/v1/cfd/${cfd}`); + + expect(response.status).toEqual(allowed ? 200 : 403); + expect(response.data).toEqual(JSON.parse(JSON.stringify(cfdInfo))); + expect(getCfdInfo).toHaveBeenCalledWith(cfd); + } + ); + }); +}); diff --git a/server/tests/integration/http/organisme.routes.test.ts b/server/tests/integration/http/organisme.routes.test.ts index 22e0cb826d..2c5f2934fa 100644 --- a/server/tests/integration/http/organisme.routes.test.ts +++ b/server/tests/integration/http/organisme.routes.test.ts @@ -1,15 +1,14 @@ import { strict as assert } from "assert"; import { AxiosInstance } from "axiosist"; -import { ObjectId, WithoutId } from "mongodb"; +import { ObjectId } from "mongodb"; import { IndicateursEffectifsAvecFormation } from "shared"; import { PermissionsOrganisme } from "shared/constants/permissions"; import { IOrganisme } from "shared/models/data/organismes.model"; -import { IRncp } from "shared/models/data/rncp.model"; import { it, expect, describe, beforeEach } from "vitest"; import { createComputedStatutObject } from "@/common/actions/effectifs.statut.actions"; -import { effectifsDb, organisationsDb, organismesDb, rncpDb, usersMigrationDb } from "@/common/model/collections"; +import { effectifsDb, organisationsDb, organismesDb, usersMigrationDb } from "@/common/model/collections"; import { createSampleEffectif, createRandomFormation } from "@tests/data/randomizedSample"; import { useMongo } from "@tests/jest/setupMongo"; import { @@ -698,22 +697,19 @@ describe("Routes /organismes/:id", () => { const date = "2022-10-10T00:00:00.000Z"; const anneeScolaire = "2022-2023"; - const ficheRNCP: WithoutId = { - rncp: "RNCP34956", - actif: true, - etat_fiche: "Publiée", - intitule: "Arts de la cuisine", - niveau: 4, - romes: ["G1602"], - }; - beforeEach(async () => { await Promise.all([ effectifsDb().insertOne({ _id: new ObjectId(), ...(await createSampleEffectif({ ...(await commonEffectifsAttributes()), - formation: { ...createRandomFormation(anneeScolaire, new Date(date)), rncp: ficheRNCP.rncp }, + formation: { + ...createRandomFormation(anneeScolaire, new Date(date)), + rncp: "RNCP37682", + cfd: "36T32603", + libelle_long: "TECHNICIEN SUPERIEUR SYSTEMES ET RESEAUX (TP)", + niveau: "5", + }, annee_scolaire: anneeScolaire, contrats: [ { @@ -722,7 +718,6 @@ describe("Routes /organismes/:id", () => { ], })), }), - rncpDb().insertOne({ _id: new ObjectId(), ...ficheRNCP }), ]); }); @@ -774,8 +769,10 @@ describe("Routes /organismes/:id", () => { expect(response.status).toStrictEqual(200); expect(response.data).toStrictEqual([ { - rncp_code: ficheRNCP.rncp, - rncp: ficheRNCP, + rncp_code: "RNCP37682", + cfd_code: "36T32603", + intitule: "TECHNICIEN SUPERIEUR SYSTEMES ET RESEAUX (TP)", + niveau_europeen: "5", apprenants: 1, apprentis: 1, inscrits: 0, diff --git a/server/tests/integration/http/rncp.routes.test.ts b/server/tests/integration/http/rncp.routes.test.ts index 7a247693ff..5f8ba57dbb 100644 --- a/server/tests/integration/http/rncp.routes.test.ts +++ b/server/tests/integration/http/rncp.routes.test.ts @@ -1,9 +1,9 @@ import { AxiosInstance } from "axiosist"; -import { ObjectId } from "mongodb"; -import { IRncp } from "shared/models/data/rncp.model"; -import { it, expect, describe, beforeEach } from "vitest"; +import type { RncpInfo } from "shared/models/apis/@types/ApiAlternance"; +import { it, expect, describe, beforeEach, vi } from "vitest"; -import { organismesDb, rncpDb } from "@/common/model/collections"; +import { getRncpInfo } from "@/common/apis/apiAlternance/apiAlternance"; +import { organismesDb } from "@/common/model/collections"; import { useMongo } from "@tests/jest/setupMongo"; import { organismes, testPermissions } from "@tests/utils/permissions"; import { RequestAsOrganisationFunc, expectUnauthorizedError, initTestApp } from "@tests/utils/testUtils"; @@ -12,30 +12,41 @@ let app: Awaited>; let httpClient: AxiosInstance; let requestAsOrganisation: RequestAsOrganisationFunc; +vi.mock("@/common/apis/apiAlternance/apiAlternance"); + describe("GET /api/v1/rncp/:code_rncp - retourne une fiche RNCP", () => { useMongo(); - const ficheRNCP: IRncp = { - _id: new ObjectId(), - rncp: "RNCP34956", + const rncpInfo: RncpInfo = { + code_rncp: "RNCP37682", + intitule: "Technicien supérieur systèmes et réseaux", + niveau: "5", + date_fin_validite_enregistrement: new Date("2026-09-01T23:59:59.000+02:00"), actif: true, - etat_fiche: "Publiée", - intitule: "Arts de la cuisine", - niveau: 4, - romes: ["G1602"], + eligible_apprentissage: true, + eligible_professionnalisation: true, + romes: [ + { + code: "I1401", + intitule: "Maintenance informatique et bureautique", + }, + { + code: "M1810", + intitule: "Production et exploitation de systèmes d''information", + }, + ], }; beforeEach(async () => { app = await initTestApp(); httpClient = app.httpClient; requestAsOrganisation = app.requestAsOrganisation; - }); - beforeEach(async () => { - await Promise.all([organismesDb().insertMany(organismes), rncpDb().insertOne(ficheRNCP)]); + vi.mocked(getRncpInfo).mockResolvedValue(rncpInfo); + await organismesDb().insertMany(organismes); }); it("Vérifie qu'on ne peut pas accéder à la route sans être authentifié", async () => { - const response = await httpClient.get(`/api/v1/rncp/${ficheRNCP.rncp}`); + const response = await httpClient.get(`/api/v1/rncp/${rncpInfo.code_rncp}`); expectUnauthorizedError(response); }); @@ -68,13 +79,11 @@ describe("GET /api/v1/rncp/:code_rncp - retourne une fiche RNCP", () => { Administrateur: true, }, async (organisation, allowed) => { - const response = await requestAsOrganisation(organisation, "get", `/api/v1/rncp/${ficheRNCP.rncp}`); + const response = await requestAsOrganisation(organisation, "get", `/api/v1/rncp/${rncpInfo.code_rncp}`); - expect(response.status).toStrictEqual(allowed ? 200 : 403); - expect(response.data).toStrictEqual({ - ...ficheRNCP, - _id: ficheRNCP._id.toString(), - }); + expect(response.status).toEqual(allowed ? 200 : 403); + expect(response.data).toEqual(JSON.parse(JSON.stringify(rncpInfo))); + expect(getRncpInfo).toHaveBeenCalledWith(rncpInfo.code_rncp); } ); }); diff --git a/shared/models/apis/@types/CfdInfo.ts b/shared/models/apis/@types/ApiAlternance.ts similarity index 54% rename from shared/models/apis/@types/CfdInfo.ts rename to shared/models/apis/@types/ApiAlternance.ts index ad8c8e34c8..09771a19d6 100644 --- a/shared/models/apis/@types/CfdInfo.ts +++ b/shared/models/apis/@types/ApiAlternance.ts @@ -1,4 +1,4 @@ -type CfdInfo = { +export type CfdInfo = { date_fermeture: Date | null; date_ouverture: Date | null; niveau: string | null; @@ -13,4 +13,13 @@ type CfdInfo = { }>; }; -export default CfdInfo; +export type RncpInfo = { + code_rncp: string; + intitule: string; + niveau: string | null; + date_fin_validite_enregistrement: Date | null; + actif: boolean; + eligible_apprentissage: boolean; + eligible_professionnalisation: boolean; + romes: { code: string; intitule: string }[]; +}; diff --git a/shared/models/indicateurs.ts b/shared/models/indicateurs.ts index 3c8e989f28..6c48b02dc8 100644 --- a/shared/models/indicateurs.ts +++ b/shared/models/indicateurs.ts @@ -1,6 +1,4 @@ -import type { ObjectId, WithoutId } from "mongodb"; - -import { IRncp } from "./data/rncp.model"; +import type { ObjectId } from "mongodb"; export interface IndicateursEffectifs { apprenants: number; @@ -23,7 +21,9 @@ export type IndicateursEffectifsAvecOrganisme = IndicateursEffectifs & { export type IndicateursEffectifsAvecFormation = IndicateursEffectifs & { rncp_code: string | null; - rncp: WithoutId | null; + cfd_code: string | null; + niveau_europeen: string | null; + intitule: string | null; }; export interface IndicateursOrganismes { diff --git a/ui/modules/organismes/CertificationDetails/CertificationDetails.tsx b/ui/modules/organismes/CertificationDetails/CertificationDetails.tsx new file mode 100644 index 0000000000..d27374f28e --- /dev/null +++ b/ui/modules/organismes/CertificationDetails/CertificationDetails.tsx @@ -0,0 +1,28 @@ +import { Tab, TabList, TabPanel, TabPanels, Tabs } from "@chakra-ui/react"; + +import { CfdDetails } from "./CfdDetails"; +import { RncpDetails } from "./RncpDetails"; + +type CertificationDetailsProps = { + rncp_code: string | null; + cfd_code: string | null; +}; + +export function CertificationDetails(props: CertificationDetailsProps) { + return ( + + + RNCP + CFD + + + + + + + + + + + ); +} diff --git a/ui/modules/organismes/CertificationDetails/CfdDetails.tsx b/ui/modules/organismes/CertificationDetails/CfdDetails.tsx new file mode 100644 index 0000000000..9ca2b9b575 --- /dev/null +++ b/ui/modules/organismes/CertificationDetails/CfdDetails.tsx @@ -0,0 +1,78 @@ +import { Center, HStack, Spinner, Text, VStack } from "@chakra-ui/react"; +import { captureException } from "@sentry/nextjs"; +import { useQuery } from "@tanstack/react-query"; +import type { CfdInfo } from "shared/models/apis/@types/ApiAlternance"; + +import { _get } from "@/common/httpClient"; +import { formatDateDayMonthYear } from "@/common/utils/dateUtils"; +import { Label } from "@/components/admin/organismes/recherche/Label"; +import { niveauFormationByNiveau } from "@/modules/indicateurs/filters/FiltreFormationNiveau"; + +type CfdDetailsProps = { + code: string | null; +}; + +export function CfdDetails(props: CfdDetailsProps) { + const cfdInfoQuery = useQuery(["/api/v1/cfd", props.code ?? null], async ({ queryKey }) => { + const [_, rncp] = queryKey; + + if (rncp) { + return _get(`/api/v1/cfd/${rncp}`); + } + + return null; + }); + + if (cfdInfoQuery.isLoading) { + return ( +
+ +
+ ); + } + + if (cfdInfoQuery.isError) { + captureException(cfdInfoQuery.error, { extra: { code: props.code } }); + return Erreur lors de la récupération des informations CFD; + } + + if (cfdInfoQuery.data === null) { + return Diplome CFD non trouvée; + } + + return ( + + + Code diplome : + + + Intitulé : + + + Niveau de formation : + + + Date ouverture : + + + Date fermeture : + + + ); +} diff --git a/ui/modules/organismes/CertificationDetails/RncpDetails.tsx b/ui/modules/organismes/CertificationDetails/RncpDetails.tsx new file mode 100644 index 0000000000..33d519fb50 --- /dev/null +++ b/ui/modules/organismes/CertificationDetails/RncpDetails.tsx @@ -0,0 +1,102 @@ +import { Center, HStack, Link, Spinner, Text, VStack } from "@chakra-ui/react"; +import { captureException } from "@sentry/nextjs"; +import { useQuery } from "@tanstack/react-query"; +import type { RncpInfo } from "shared/models/apis/@types/ApiAlternance"; + +import { _get } from "@/common/httpClient"; +import { formatDateDayMonthYear } from "@/common/utils/dateUtils"; +import { Label } from "@/components/admin/organismes/recherche/Label"; +import { niveauFormationByNiveau } from "@/modules/indicateurs/filters/FiltreFormationNiveau"; + +type RncpDetailsProps = { + code: string | null; +}; + +export function RncpDetails(props: RncpDetailsProps) { + const rncpInfoQuery = useQuery(["/api/v1/rncp", props.code ?? null], async ({ queryKey }) => { + const [_, rncp] = queryKey; + + if (rncp) { + return _get(`/api/v1/rncp/${rncp}`); + } + + return null; + }); + + if (rncpInfoQuery.isLoading) { + return ( +
+ +
+ ); + } + + if (rncpInfoQuery.isError) { + captureException(rncpInfoQuery.error, { extra: { code: props.code } }); + return Erreur lors de la récupération des informations RNCP; + } + + if (rncpInfoQuery.data === null) { + return Fiche RNCP non trouvée; + } + + return ( + + + Code RNCP : + + + Intitulé : + + + Actif : + + + Niveau de formation : + + + Date fin validité : + + + Eligible apprentissage : + + + Eligible professionnalisation : + + + Codes ROME : + {rncpInfoQuery.data.romes.map((rome) => ( + + + ); +} diff --git a/ui/modules/organismes/IndicateursEffectifsParFormationTable.tsx b/ui/modules/organismes/IndicateursEffectifsParFormationTable.tsx index 32518b814a..a4f5484458 100644 --- a/ui/modules/organismes/IndicateursEffectifsParFormationTable.tsx +++ b/ui/modules/organismes/IndicateursEffectifsParFormationTable.tsx @@ -1,7 +1,5 @@ import { ArrowForwardIcon, ChevronDownIcon } from "@chakra-ui/icons"; import { - Badge, - HStack, Link, Modal, ModalCloseButton, @@ -15,11 +13,8 @@ import { Th, Thead, Tr, - VStack, - useDisclosure, } from "@chakra-ui/react"; -import { useQuery } from "@tanstack/react-query"; -import { Fragment, useMemo, useState } from "react"; +import { Fragment, useCallback, useMemo, useState } from "react"; import { IndicateursEffectifsAvecFormation } from "shared"; import { _get } from "@/common/httpClient"; @@ -27,6 +22,8 @@ import { _get } from "@/common/httpClient"; import { AbandonsIcon, ApprentisIcon, InscritsSansContratsIcon, RupturantsIcon } from "../dashboard/icons"; import { niveauFormationByNiveau } from "../indicateurs/filters/FiltreFormationNiveau"; +import { CertificationDetails } from "./CertificationDetails/CertificationDetails"; + interface CustomColumnDef { accessorKey: string; header: () => string | JSX.Element; @@ -88,7 +85,8 @@ const formationsTableColumnsDefs: CustomColumnDef[] = [ ]; interface NiveauAvecFormations { - niveau: string; + id: string; + niveau: string | null; label: string; formations: IndicateursEffectifsAvecFormation[]; } @@ -97,42 +95,47 @@ interface IndicateursEffectifsParFormationTableProps { formations: IndicateursEffectifsAvecFormation[]; } function IndicateursEffectifsParFormationTable(props: IndicateursEffectifsParFormationTableProps) { - const { isOpen, onOpen, onClose } = useDisclosure(); - const [selectedCodeRNCP, setSelectedCodeRNCP] = useState(null); - - const { data: ficheRNCP } = useQuery(["/api/v1/rncp", selectedCodeRNCP], async () => { - if (selectedCodeRNCP) { - const ficheRNCP = await _get(`/api/v1/rncp/${selectedCodeRNCP}`); - onOpen(); - return ficheRNCP; - } else { - return {}; - } - }); + const [selectedFormation, setSelectedFormation] = useState(null); const [expandedNiveaux, setExpandedNiveaux] = useState<{ [niveau: string]: boolean }>({}); - function toggleExpand(niveau: string) { - expandedNiveaux[niveau] = !expandedNiveaux[niveau]; - setExpandedNiveaux({ ...expandedNiveaux }); - } + const niveauxAvecFormations: NiveauAvecFormations[] = useMemo(() => { + const groupedByNiveau = props.formations.reduce>((acc, formation) => { + if (!acc.has(formation.niveau_europeen)) { + acc.set(formation.niveau_europeen, { + id: formation.niveau_europeen ?? "", + niveau: formation.niveau_europeen, + label: niveauFormationByNiveau[formation.niveau_europeen ?? ""] ?? "Niveau inconnu", + formations: [], + }); + } + + acc.get(formation.niveau_europeen)!.formations.push(formation); + + return acc; + }, new Map()); + + return Array.from(groupedByNiveau.values()).sort((a, b) => { + if (a.niveau === null) { + return 1; + } - const niveauxAvecFormations = useMemo(() => { - return Object.values( - props.formations.reduce<{ [key: string]: NiveauAvecFormations }>((acc, formation) => { - let formationsNiveau = acc[formation.rncp?.niveau ?? ""]; - if (!formationsNiveau) { - formationsNiveau = acc[formation.rncp?.niveau ?? ""] = { - niveau: `${formation.rncp?.niveau ?? ""}`, - label: niveauFormationByNiveau[formation.rncp?.niveau ?? ""] ?? "Sans niveau", - formations: [], - }; - } - formationsNiveau.formations.push(formation); - return acc; - }, {}) - ).sort((a, b) => (a.niveau < b.niveau ? -1 : 1)); + if (b.niveau === null) { + return -1; + } + + return a.niveau.localeCompare(b.niveau); + }); }, [props.formations]); + const toggleExpand = useCallback((niveauId: string) => { + setExpandedNiveaux((current) => ({ + ...current, + [niveauId]: !current[niveauId], + })); + }, []); + + const isExpanded = useCallback((niveauId: string): boolean => Boolean(expandedNiveaux[niveauId]), [expandedNiveaux]); + return ( <> @@ -147,8 +150,8 @@ function IndicateursEffectifsParFormationTable(props: IndicateursEffectifsParFor {niveauxAvecFormations.map((niveauAvecFormations) => ( - - + + - {expandedNiveaux[niveauAvecFormations.niveau] && + {isExpanded(niveauAvecFormations.id) && niveauAvecFormations.formations.map((formation) => ( @@ -209,62 +221,16 @@ function IndicateursEffectifsParFormationTable(props: IndicateursEffectifsParFor
toggleExpand(niveauAvecFormations.niveau)} + onClick={() => toggleExpand(niveauAvecFormations.id)} > - {niveauAvecFormations.label} + {niveauFormationByNiveau[niveauAvecFormations.id] ?? "Niveau inconnu"}
- {formation.rncp?.intitule ? ( + {formation.intitule ? ( setSelectedCodeRNCP(formation.rncp_code)} + title={formation.intitule} + onClick={() => setSelectedFormation(formation)} > - {formation.rncp.intitule} + {formation.intitule} ) : ( - Fiche non trouvée + Certification non trouvée )} RNCP :{" "} @@ -196,6 +199,15 @@ function IndicateursEffectifsParFormationTable(props: IndicateursEffectifsParFor INCONNU )} + {" / "} + CFD :{" "} + {formation.cfd_code ? ( + formation.cfd_code + ) : ( + + INCONNU + + )} {formation.apprentis}
- {ficheRNCP && ( - { - onClose(); - setSelectedCodeRNCP(null); - }} - size="3xl" - > + {selectedFormation !== null && ( + setSelectedFormation(null)} size="3xl"> - {ficheRNCP.intitule} + {selectedFormation.intitule ?? selectedFormation.rncp_code} - - - Code RNCP : - {ficheRNCP.rncp} - - - Consulter la fiche - - - - État : - {ficheRNCP.etat_fiche} - - - Actif : - {ficheRNCP.actif ? "oui" : "non"} - - - Niveau de formation : - - {niveauFormationByNiveau[ficheRNCP.niveau] ?? "Inconnu"} - - - - Codes ROME : - {ficheRNCP.romes?.join(", ")} - - + )} @@ -273,18 +239,3 @@ function IndicateursEffectifsParFormationTable(props: IndicateursEffectifsParFor } export default IndicateursEffectifsParFormationTable; - -function TextBadge({ children }: { children: string | JSX.Element }) { - return ( - - {children} - - ); -} From aedf36d62f962b41a43bf74e21a14ab7f8fada89 Mon Sep 17 00:00:00 2001 From: "Paul G." Date: Wed, 11 Dec 2024 16:27:51 +0100 Subject: [PATCH 02/11] fix: mise a jour du fichier SIFA (#3934) Co-authored-by: Paul Gaucher --- ui/modules/mon-espace/SIFA/SIFAPage.tsx | 6 +++--- ui/public/InstructionsSIFA_31122024.pdf | Bin 0 -> 1460980 bytes 2 files changed, 3 insertions(+), 3 deletions(-) create mode 100644 ui/public/InstructionsSIFA_31122024.pdf diff --git a/ui/modules/mon-espace/SIFA/SIFAPage.tsx b/ui/modules/mon-espace/SIFA/SIFAPage.tsx index b52554211e..d72ffc7ef7 100644 --- a/ui/modules/mon-espace/SIFA/SIFAPage.tsx +++ b/ui/modules/mon-espace/SIFA/SIFAPage.tsx @@ -207,12 +207,12 @@ const SIFAPage = (props: SIFAPageProps) => { - Fichier d’instruction SIFA (2023) + Fichier d’instruction SIFA (2024) 0HjuUc zHM}GI{9qLq8zZo&p1q!hwFy{3&&0?M#14F|1eVdWGC6N-%Oat~00Jx9+d3H7tJoSD zDOp?FgCIOG_%*V6w&qe+#@4`n_J1`p1Oe9>2?GD{ju=@P!spn(8_HzxNx-7k4p#Oc z4sP%zGebK~5Xb)gKoCy&5B7b4N+5PP5D+^L{4WkR#1Ag`4=CaBz!DrF2z+`$L9n>9{Y7PaJ$obI%8SZe zAUIut-?%~W=K!uyu(dW&HnP_Q1M&k_F>>zF^gq4R~8wBv$${s*!2ZGNHzG!RhU<1qw7d`kNU}dn1t)7*g&HfV^ zxPV2K!D2>^W(Gz|7e#=(tLW+50hb_z5b@M@Ahv@9+P^W9KoVva_C~f~2@Bxa#EcBA z4UNDuMph>FrXUCh1hPNM&feBY&l2y5b3&zhs~jBqD$lIMxfur*7Y zQV^LDv{13rKDix$8TsK!IKTB%)%i0QPSV?tvz@FN%+1}_Qr&$#JHM22cPQ*777y<< zHF>@1r-g|CEvLYhz~sSEFM_D~_aCizDapFFvfb8JvuZAT$x3iViRWFE!}eJ2vx2-@ zOt!m2B2n0@a%7A&T_>Xc(ct#v(R)Rj^mUF|ZZB`94@HbxmiyO++UTEHlO}55cL+PS zAUr!0bJponhs=C!l%{}(Wl3(qb2HY0<_d$+*jJK6qs)8(MD*J3Qek$9c+1I#n@;5p zMN~Yl6g5B93M3Wrw4gWBiD5J}=tMsh>zYRsI)hRe1 zf~^WkUBT4UCv}X}&uh6sI2pt;N|YRN{KNi4Dj)BbJ*R2pjgg(F#n4zchtOU~m_9^$ zF7<`qX0|GmR#DKsx(_Dyfv4KfR2of22+-Yev9+U)Z1PCbt$e`y%-~L=wtUEh8jK)y zLpCc72f&yV{Q9 z2Q&J3-ZTrXs2}GUx?egD`ds?ZOyv>6+tfkc?5x)?Zcp8?2~p7`54wgeMmVqYfGv)_ zFYaZa^6>Fsx|fgiWH#K015O6sfi#bTDO6Z1jEMt^d!H}i1_gQYyaA=T%a1D5gzI>u zx^8EvJlf{&naPNOMrDCJBbbD6-?rD%OUH!Q#wKHR-gn^moJ|J1bNX!6q04#E4{2FP zgfo(As;`U@R2VWPn(I})DHAbsrJ@-*w20mW*kg>E6V=)p_pA7;%&&h74boW5cywpgq%9UKu5 z&{?fOa*h%=hv@oM67ADI7;%}V{Vjocx*_i2V!3)OZ^?L!J5B`#Q$^h+PbI;Gy%X${ zi4}BaAhHv#lU8SFpyJ2BNcNsNrpmR8r*7t@(bLA!MnTpzJNE>ZraCJ8#p)$JvEyYg zvL4vb^ebvCnV=i6<3*O(xfj*+D?&WnYh$Adb7E|%vcwG0ZlY)0Cl%g1j((n^=pB)J z5&@Ar3-M9CI_i{@A|pb0)NBE9jCeybcL+hYzPVsJsPAE6g(hy@>JtWy#|t{MH~VsA ziWYiCaH)OQ%l$ZAoiErN#e~#lSz?U{I*Th0ehhjpQ5nrBAKLfi)ETsj{#Q}0pLpeU zg2a}^9$7C%AICA|OZ~)J?3U!o_3q|sYii_fgbN5(SdVQ7-+saEh%Wr64| zh+U=6Iny)A%PaHvRQ&a`HGFROs)EmWaO8rV5_7`$f1#-B=mwZ{B32=AZ6_>z4?~Km z;Thb9BXuRxobOu{q^5-{@O@(gR(8<0-*+Tb0P_$3R8G&*2rxik5j{I2_!YvoW_lK~ zDqwLdKqH%3nSd{wSqWR&nSK3x|0*#fI|ExY8+&V85Zo$)CCqH?>_tuWY(X6CfJgG> zcXlWbFx=4I)DAE;9B|Wi&=~9w{SM-{Tf@yG93K)BU@A=P_Ggd++#oXpVJj00BM=){ z*v??zzVfia0BeN!orN9326#(0l164GruHB%c5bk+qX`@f2nvM&UXU~54|YyY7<{73 zh%2FNY+&^-qu60=fJM^VrviwB12AhwmTJIg_~jySBgz7d2JO!UVrK*V2w)mie_-EM zqdehPV-6OP1n|LHoo-8HCDifah#~;W3MdwT0n9 zMoSq2R5Y`9VUheoMngR-`~BP4fq)0xcQsY4RjthS4K=_{gkyJ*o$!m`7&Ji;xW}ap z`sQB3KS3fyl{O?2q;QH#iS19jFQ4oP=L7yQz{e`q7p25x^=!aMtYERr062hWz?aG{ zb^wR=-CPg^;cM*=`zB9-TLFKH%lqiz7oecu{{)Fo-qz5_7GV2%+!oQMIOhyk3488{K+xDeyG5EF4B#&N-;DG(Q8 zI2U3Z7h(W6VgNT{05^O95QzO|mkq|gC^iUwXQU4Md7uV`vh(aq8`Al3PH5HE zw5BW}_T(DbdlIgsm={}8NkxiIrD3K0;;H;>!qL~Y3KsR(Z%gJflcn#i^HW!E;3V7| z&1Kf0%At$02zhxW$I;2S@v|U)ps4NMRo?Q?+!b+WhdoNX*y8c>1aIX=ZS0Uol_zh2 zJ*z3_lJTsq8tVGz3@f|@_t@%`g+c>*ADZRGR`AZ!SI^HIng#5|7|}*DLt><2WTaVM zOP}lNoNp7VmU>yvm&fYpv>q;|l&YGfC7k1CK94E4va7<;hj z=c%UGHb2&stFYKVCZkuyB`lW*--)pQs9A9*lTBvLIJ5DLYHmx#QO@8TtsNb*RI;4P zkT!=`cd15-Ub{R+%X1s5N4xo+J;?z}#h~dX-#VDpr2nIbiTm)Na$vbRO!?G)$;oV~0ZJjc~6v-9D4A5^F!#VEr+3(TkmXihf7t-PSes zc-gAO*2zvo_LX7x$EUIUa$*j1h6YM`tDROhdyc!dTh*+U_S$9)pJpVdE3uQ@8Ka;r zaOynTSU1{v83uo_7;_fv3JcHmkDrcNcZ{Fdiq*Q)m=tO_rLBbpRz8uZmBkNZ)}Oy! z{y}*`>DK+UUIvHMDODqiwpFbPd2VHL1%KC@93hWgrQ>xiZxS-_zkTlb+B<5Z{Z7E^ zsLvc{R-$&7^dc=AI(Ug*r(Q?1Dze`!>Cj3_N}!?|f39gEf&+g18MY+ye)DZvy%0lQ z5j$a0^93_|&7}1DtwEa#1u<7O%mJ^0+{XTQXq;zM7%;L!xX3$t_-h`9jCXM*F=6)$ zOscq?_{{AW!(h)yp%=@tx78#5-o|Zd?b&8e?cqf;x|k}Wcxl}dZw1SZc}g5NebE}G zW!rVF=h;JY3j+_Fa4(CDN7mh{=bfp>mN$*o8b0l~uy9WMWAX5CZP|&j&Ej|`!7*W5 z&(LZrhYe}()l1X8sSmt&)AV5O{W}xUmk-ZILY95d-=>E7e5h7=mpQI|VztnoI**lb zD1f9lz-s)|VA7m%N1}DQ(^IrT@f&%oB$d_8>@MA1i%X0Pa}1l^yv?DtUIN>$-OWo6 zhu_s@*@s4}Nl=?HYe?s2^0P^r%tcP=m(M^g5$P^% zO(E^aD6T^_Gf6@z^i{=Wk6B%JISL`&z4<(E@E9a|H{L_}v`^Bs2b%1s1*eY1@W@=k z;@k8zBhw_F>2;mmLRFzMOmgXmY&a*fAj@NQ8aGvrd!2BQQM(Wrrb(AADv)bROmpfD z=8aOlDG8mmtbOK}yX5+a4Cg!wF(^b-7I4C z_g`e>U81@LBP~mL8c^*&LUPM}3~CRR^VD3NY<2gmV_saVZW^?CmJy3pmSVDT;<3SD z+j67HW*^Un0vvwovvoX!c`pQq=oZyqKWO==?ouLm^qxq6{o{)*%1x!OLnVD~x8(42 zFyvf&cwz6lQnj(&u~MUiXv%ku95-$^7J;Tls0I@zS{dx)<*AHJC4Q9Ca%p5_q5{8b`XCtwxtXdeXy|LGXm1DyNEcELp}yfBE@2 zsb`PqF+HpDOBw|ee9R4{l=7=K?q@(XuAFx&!!o`6NYPA{Z7gNudf}^%K<6;d2k7UX z9--z*V?1$vj&xiId%D*qOs_cfhLt|WNAkR~)0&XbN_&5TxZ5#t=Z>Gjut>RO6!qbC zoU=^W-n4RRB~#V{qdDvdvAq7J9fg7yun?SFQyt~Y#gE%bj>_0w8Y1am-VBQ=wHSF= zsdj!bRs9&&J=MyhO5?5!BEgF+M5)9Ag;Fu=bfT~PWsP|2xf-wkRNlpK zn#JV}fm%FQ>*3Y%H{0zEA6K+}M4exg<*z9BdNmNavwbvYTgI?gDH5^vy-i-Js=$6J zb-OvkS1OV$PxeUwgW4PyOO&RLTi1k8>3qL^nq}m!?~H_S{IlFr+2(tCc~JpVY#p4^ z+ZUbDCruSUen`h(r@4N9Vc2H+Sd<;MwjOWnrU8vy&lc}F%yG%g#-k21G&OiJE{~7M z>9_}(Ft)0%7?^f=3#ws3?>jY?4tMm57qm>F7kdol|WyZ-=!?O^%i{^F=;5dih8iA#X!0#?|};iikdDOeeBMMkYDm zLj$T4X2#quOJ&WHGPdTxdNrzN+z7}YSbodU?4>dQOl7nsPxHp+q0VJ0MP8Ygb^Y$V zDSb|JneHzqyeB-dX}Y#lOI)d7e&f2ckXx#qYxb)%6(LTw3vcpVx{7k~x4B{`$p;#^rD|=U`^56JgRW3xRv6<`F1B8T9H#v{(sa)! za+q`r?bBlXx`|ishO46CeHdJR3t14#nCrL4U)kkwD`HT7Dp*^^|6p?7u4ML;a2X9< z3+}y^s1xq5tqZI=pL1$DM)JL)aVe#9y(`$ka|tu>kO$S{w7y#NGrr0d8;0IFj)V8eo5`6_u{q$= zwOh~8gDb)I^hh-=MG1c=rnAiKn zx6tJAMn*_^*=W%*(ViAqj2n+r_9!eX7BXkU)_7a*Pdo~2%qp- zvms*=)(C?=IW?Ph!nygrEq6nxFIcUZ$Mm7xe zh4`dbD+sR(ytpfjv1&eYYjjiaxr1;JLqM}E?~|A0rFX{zeBTZ`aekn6_tH8a1LN>s z&~1W}1H`NH(n)Wzl8pld=$;?Wa+u7HBjrx`Gx(lN(Wb|Nc z5?F`neJTcQmQ$3`O8pBlcd#9N^n}!IbM-kjn>SSLv89=G@yzZJ7`$SvYpIf@#iVk% zFd#(uihkqpcBrwyy*7+nq=Ew;B3@VXBNLpTLS1dP=%_2R9^Q2RWSPHQZsaduLujgW z!+G`OBJrm+sh-?;uVJ+-AD?JVfjS)1THN4G*X zhu$njgJ`eZ0v|I_JS3mR+)-dKQJ>zMP`qTSNKaZP!L$~qcfw`v*o=_mOuv1Y-e(-M z)Xdi{iJLH)+`s}?!GP4ZrNv@R$N2@b`^N4@l}wZs0*_pd*D|Y*=ihU=?oN$98K6{k zV$PREx3)1P+^*cSsh}G-U|rp4`2HY^d|{4s+UJY5fa176xGBF9&3h@;O}$huE2W-% z@@^J{n)RG2+L#^YC;g(Ax^ae!&mJ1_9HOz~cgE?(#ukD;du#I&lQPg~;xq0o{;)c$ zH|Hom8pOC@xRz9?bx`i1T>+Nu{SBJ?^;3#GIIh#;w|0HUb6~;kIEO~OdaB%l#EnCr z_x9$fc%#Kq^{yDa5O1&&xNOJg;B$jlO&faOvDqA_XfGoJV2#2~c(8QBYQtG)#b>KF zPpx=UVf_37{PAI18;kFjZfXmVnq1r{PkD0vCddGE(&L=O!l7HmY~7+Z%^?Jzjc%e5(tB6$lnjoX zW?W-5PgPv}M4&XcH99A2uadcgKBq+Gqx-x)lQiA&kY_92G7lY?xB6Ns6rA)>?);ToYRj-3_GQC2685_flL2!R z)aJFSJTdEdr;xgpB}}VN%1{(@#ek6ypFXhf8l&&=(9Ym<{byRGDINW(#_qg_S%t|f zz9;;Ya%6Uw{TbE>`2e$~&GOhv$RPGu*)%5IJ@xwGh)~TWQp+>rLLaC5?E?&L_k=G$ zINF_jFGQ5It|jcmE+=L}Z>X|-63L!udkC?*gu%An_62%VGW^m>e03n$GU|N~N^wrO zU>AH$cWy5#8{bhR@nSi7)Tc3apvPFp-_Po^Aw^y?^zsg0^7+Z{O z>L_s^PbWBrMgPtQ{r&O$UW=WSl^8PnDPy-+Fs8JA8EpCv(i1FA=Br~am)`MqyK!`o zypo6>^mj7~w-S!;WY*TQ=JZ{$zh)=>HsD4Z*UlTLW9K(9`)U0z#+%p-B7N#((9FbQe}Ae53=3lAoby$I!FX?vH1_vz{o@|_(1aaTSE9-lK4vp z3jp?Osq0VltswKk+=%QcqW1>GgGih5Ao8p{h&(HzEQLyfh{SNDo)Z1Uc{ZOHO zt!Z-sCFuQ|>=zkX_Uq9HYTCeGUu)Vh_5(F-2p5#&VA=1lHEl#88^(^J!GN~6{Rx25 zDNxx3rUh2aKDEEr`rvFvdE)(g2J(rKJUO7$xOn!J8Yd6Oev27Wslip;Zz{F@%Fb@$qAyv^lyzH6ouyB zxgP(a@%yS|!4f<`YXjWe08KN%VnLLk|1I77rOn~b^l3u54$=%xV zDZQ$ummq2j4>W zzlBWjY{DOMJYguI5ARL@0rD zHema{#CKFcF$-{K8OezMW*L23C@B60(h2#uR?nC4>JP0R6c-Ur<9|Z3g9!wHPKa*r zgI(yr4q2ew0{61NrWO7)A-`r5IN+uXkdohZQV>n*e@dyN_`dM0B9gQ}Ul2g96=+LG zE(rMY_`LJVq)Q&FMbUH24e*_Q6M3}0sS5X=zetyxD?gEq3WrFIftK90SI2%zEJ@V=%)}6 z?%dx>GU|FhXk-5yNj{(|59Fu6$@l+oQ5N!Le+>kYQv&GnyGj!7UHmEO=0r8wzvVSR zf!GZQC6J;8=ko9I6}B(C--#AVC{uw`u6Ger>H>V-V`&0eJ!O6}FtWqS0;r#w7hktE}*-;#H_~|T22>%U-f56tS zD(!#FBqR3!0Yvy+WraAI<`0=-P81`wpB4Ibjg$k*!3vyjgJdF{rN75S&iw;>fJ;&A zAUle_gl}s^GV$kf#13QqTFpn``8@_9nz6UhX2IGmp$Kpfii&0zdU5>ebC_y8n=f2L0UFKChfG%iH! zH~v#v1jXNgZ#za3?x#zb9dL4h9=R_I2+qjgV;yW?MSLf|s0a>rZ2cSogopKOrUn7$ z_YiRGp9=OJ0u+Y_zS;WMG+<+c=gJVRmhAg@eh&frepvrk1RN;-4t$^YFA+e1E#F8M zz`^`;AW}Y2Rx7sW6TURhoZc5E14G0)?^yX5-6(LNM+3 zI0fB5x#2rbq4*{6Ga8Vb`l(Wb0J;RoHXtFu0sRaD;>g0kU(+a#348z&!hf@-zj@dP zR`>rB`vp!DK`W+`}!!X_^-=ZQbC~o5@;bF;y zXEWZ}r}VE92t!IU>FrDKS_n^}B&sMwVF71)H0Y|u8t?^Wh&)9W6pS{2Q#ELb0K zr>Obgztn%AY#ZB=XFZwTuZl&cz8KAz4&qzG2x0fStEs~#W0c~Co94IGW^|_f$wX5d z-neu;h$a6L(+v{V4Yq8**YYpS?`h+M()w(M%sxs)MY_f7%AGZ{R~@jVKMQt@mud>$ zG52!kV=#JJ<=fH!p;$bhI-qky{Z_s@@nlAA%Y`TBad3V7myCp}my2qJR=4#7(r%Wm zSX92tsZL98-*T;N7V@yYMO#Z<6ckUOeu5UG{6#jS z$9qLNmsdsa`Cs#AeKI26IxN(Tfz5l!6`z{D=lwE-=!5d-+6%(N@qzjXv@qn#gbi~GX>5r zUkeK;YN2`KA|UTq^osh;t1BggHtv?M{Tvd)Qgzv>9mnz_brVVRRa&9A|yLXJ zPaRFU5Gv?=6{g1DnJgf7-&>qWY8tOG;W>X;i`2(cMqzDj2`x$VcMX;~aM%^Md>bLO zQ61OkXhm(FC2LpoC|4aT!{(a`T3OdOo)4klP<(d2fc5 zp7|^ncg?kgV-xPTqU3mt!z{Bu3~RK`I0w_W4`|F?dmcycV=%PjT@0-^)<3%897k3{ zqH1AHp9-AIte|7j`9`3q%Bg{JwO+tMOL&xJIZwflozJOsi=5SKNxpP&p+69f?xld% zg5&AE41@U|ytoKT{)tk>`L%-Nr)ecmXfiOSpDaX=ud4S=4&wmRGR`KK5ilO2(3ZbX zHa>qVFHo&rE2DbH@^onAvT zC;K9Mi5r91PG#U|JxO!(ZZ_zQ^K#=T7*13Zva^f2QGK&_{1Mq;e0&6lkX7y8p$i(K zdq3Pp3*SeGv}Qkb5V>INtUyxbi-QR4vSj7>>5k0(LddV;bd)p~{2Xy4g#X;{_}4r! z#O{|riGYD<^pkI{hxAJQT%%N=2xWP{9JZ9psc{oP^9d_CHZHe z1>$^sWIW2be~|xop#@5o4L$$~;U978PmA%_hMh0RG(r&PGy;$F+o1*`&iX?Fj~AAgT?(EUvZf8`t$CG7>@EB#9doIISs=JT%*;DCM)0{i|m zeg^?1r32rm{c8wZ+^oP(yDwBg0QyY``v(z!2LUBN0N*42YX~qNR-i)x2>}l1rx1Rf zriG$}o$!}YAR+vtB?Q#HfrAGSCy)ZabAf>Uzi?Z0;KbH%y>fqg!Tt8KLL^B4%(CJ} zmFeF~<#IyVSb?MrlACbe{*0SnUJ8QLh(A1E0g4hH!(S@$PuThGFol1gSBMv^{2}AT zjk@^%sg3^;oeoOxaQz_t`={yj)$k%tHU?JK?`j6bdwl*B zzTagQ z;=t-Z#jL;3>0tHv|93k5$%HjGivJIRznSWv$P-eC4n$1ms?Fh4*g4e`>ke~os3G8E@VY2<*wkM%*)?&s-#P8g!=_FKBYQouZ%k}DF(_6vP{ zCv`L{ed}62nrKZ6chm}P{{-d>)B)F@!fq7t-y{6 zYC`Jb`RZUbGBB%CV7cy{th$M{nULl>y|V3wZO7%V`trHDVeruB89k4s&&zd##xAAr ztXMtytAuKD_O!s(z2)`#wrd|;muH&E9aQV~q9YBJ?Kvl3-{TefSRHh$(V4|#`Iz$;1@f$| zS#bhi;pTBO2^)#|R$iz*O$rXgZZ{Jb({r5(?k1&=edCL9Je#{LAomgb{jHJvlsaV3 z_|Y|%B$CwgR-QjMJNKpo+{>4lt{78Od5T&~c|t-+mTRX!L6)GrKS3^>siG>rwcftG z^OA`Wl+`Eff<*OO?OOe&87nWzPmP852~@ zlu}YX2Ay{;P$21S?&jvV8yTHjlwn;XT@EsNRXms9+CGm<8)L;=H48*z3%q$4i%;jtm7>HYQ)dDt8>j?t|n)gKR#}UT^;{1?xRqdX+~9=d*_?H zr46l`g_(M-TI=Z{?K6W54mbJpE-`nVO^LN&TG5`C6D1(n)*8M12&XB+*PZqBY=6)q z@#!lLR|WX1I+?GSUo0_UofYg>Q_W@-u8hxQm^LPOr(vEukH4Acxp-77p?PBaFi|d} z_|e0kH;;P{nLc;m;lG;MuY)$PY*>Sn-XNh_G&kAxkb;_s;ki=dO-iHC7VA5cZQ=yQ z`ece&eUr^A$11Qd3!^2a+1J8aL#B**47$R%(LJdyn7CtZ5XBGWn!G5D7h7A1lzUsVv%>EjdBk_vZDd0QosO8?8@AsTY>AgytPIi~MbNXk0&6`oE(z zZ5b)?ZyuC6>3kJp8nij!UMMubdOA!|jGJql??H9ErdaGEmJenH;T-O#*8+xJm0O=? z>wDu5<<@&Eq~ba|--Y;&xnhjZcD|##CL}*f@A3F!oam2L6{`AyjbnQ}grduFhNYD)Lb&@CR)+`PA%GXq&zb2$}J(*=Y4} zCa9WxU06Tv_Ux4KlD4t%#}6Y)oJY|g$8Ptc#t)>~WUW@A8 z6ro%t83v-goBngLb#L%#^y!X2g5e#LRkKn(D%+}&KiwK#)x|yGf5Pb`UYO{+_0thS z5<~n_*e@c261mU#y&<%Ontd*2CL3>PJ*#z*G;{KXm_7N2x*B$&xhJ(5!Mx`bF40>} z^+{Zv)+skzsD3$2QGl)qiWhRY3iJ6XrNDsZ|fjJMnxH~zqCy|Dh)vFjC$y2TrN^MomEFn^1}T=yLH21oDd zT?uiU4K$UGHKx+xD={QPqVh`5L? zI*7H~>iOfC)7@qqbGt=8Y$a~fJT#^{W~i7bJ-(PNbvEU;`FU_^lx5ZRqhKB7GBP)G z^I49KqT@6sxnim!i1_wWi8rr@Q9!-NK%6!+Bp zC|NlOJuN;{xXIQNTwvxRqIuuh7S^SINPLX+1~LBpLiXv~wpVnhmFKbPQ&_I{`}u&w zKT?xSksTJ%xKGe9fcs!+gMW8ukgQw&2KkXR2-W3lnUeP)VHaYqSdOs1dHmXFWAn#39hSIsk|`UBX=j}0Z>4P%Fa1+R&t6CSwGE>z_ zI&QP)rxf`SFn+paPixv)<-P9n zm|X6;X%yJ)Wm&Wme}C-Z)CrXm=j-t%OT1FIm(=Mp4wHPMxMI#KfDyKB(R!^J=KN|f zv6FVE`68)AyT{xT1UtW=%tl3ZK#N~}>4L`1tL3q)XO5R#t^>oa_@0YDTf;#oDc47b zzB(ybu_Lt5zPe`^vv%dix#M-&&`ZhPWIZJ_!6i|Hfi0~xgz49u-B)w)1(WrtUOlgz z6ybb=u~!z9F-dD%TSR*@t=}g3sM3s(lCkA;#@jl*hnWs*;|@3ndrSGSd{k4tNWT&S zSu)4Ut-oc!w9a!vaqiQl+s1~UsNS?jqi38tia)@#UO;Q7Hv}PBjeL>yLV1m!J0pb_ zEhq_gePJ@BKPqP16GZv$6i>y9sC+u*gXkqDz``!}%=|}4$HzDONGp#OzZB`F!X74<4#+tEU$7nyoT^UyDwMq1uNu}S- zd?4-N6K(lM`=dj#zFWuUExBH5ip7+L>;x0+QWkhQ3XnW;kTAqtF&UR-kjMn zyaIigaLiEV9Vm4PPlWIV!F!3D>(8KA!u5sGitBji6hdw#WNaR(gjTN^STvi)5SsbQ zmqAFtdBh$biu7aBs zUVUH5aGdrH=O$Xxjsmu2m`p68=He6I8uXJ`$B%^xiGjE#ns1R?78;$CUVL-z)wmXo zhvOyDrN>s6yf>U^I4@DwJx^;cKZULH?mXGu@OLYcus|Y`l*j$tqRA`#PXi83Hr35= zf3{HYAs`sZ0%onx>|dx!xRD7XO;ZzSgRv--OIQ; zSNr<1h}>_%dZ)E+U$mI3>K5kkAHBf`xnSC}Zh2>rZobaa3Wi?}3t;*DPDvnHzY+hc ze~7+-hP7u8SD07rouo1tzgq^bh5hj-IT0MDEmhaEU%$+u^<7oM;(71sK?9LrVVyta zd8pOiWSy$$)3DFECqp}O3zm`z{;MB_G{!=%KP2%m@XyP8Q{Fnh*m934#ox>Y3J8vT zjoa&NcVmimh7ASn%Z20{M}lYYcx{jD_HrvV)RUd9y1cL|V3)^|MRcL%D%#3@N4<|{ z{e*m4Nmd_>igtnQy`z>T(Z}Ct3E|gA-o7m85J&4&LdR$^ahXcwIA>K{m|G}uPbAV0NrGMr=aVNG)hk3*og45Nl>|*PU`!ZYNb={hy+6K4PxIQ( z_USE0veyyk&J2JgFTUO@i&X8RfARUGukndf;$1B-C9lbrvD}Y3nR_xPlv2g-YK5sm z(FOfte-ok;?x*H4H)^|(N%NK?%uvQa#1Ha6ksMOxk_ z12X3x;~1N`?i}t8efqM5<5-KaoO=8uZA;?m=KAnJuJtlg;mIBSI!uj^FqY@<90NxM zR$VP0ejI%{KH7=799|!A28X@1S(K6zUpa93N&a1S;WXVFuED))t9nxp8w4I+IhDwS zV>xxXGksE=^FvP;c4(uBNkl4oQgZ~pw?TzQd6Gtp)vYL!yw2yiDlR-LcfoqDoNkwT zZ5pFZL<~3TZm~$9X%UsYhdCpX*7u*VM{UgDXGLEa!o{k(BTD32BQDqy8p1GSvDt~#LO(kUSGwY~&brnZLFr^yPZj#oQd6CY*kmJoaB-d8{95$O zE#b;TeK$UVJ{;eiea%x7*bu1fh@MQutoAm+d*e|(uX`=4iENJ`MwE&1Y|@iNp7#+E z5haP1FAl}A67B}dgoOPjo- zIOjOCIn7%5)HThyCqOBgL#OP@rGif7S}qtKHpJ7F_|PfoBCRFV_2xyaUWc-quha2#2k`q0(qOgUed&jHeA+N|jc|OR{Z?u4 zCk*P#GdaPTH&R83?xiR03MEob9`YwmpOy5Fr|1&nqf_0e{46gk%3tI%A*C*Hr1cYR z{(Cu_t3jQamnf4q2xw^0uC1Ahmt?qP*W%3|?Y6xc!)B||laiLfdbd(h#pD9PCsR_A zn#H^ba?3UQ*lA0e#4>OU%=SzUDTAJXPatu{K+2&!dQ}Td--oI)$)!)Fa-hyZr>!G1 z9=5z39i%;WY+eyNYXbklGN}{`i*AdqG4Pxyy&_gxStR4Vi;PDt#heOgk!$%L?n++r?9cyiBu7bdL9M4m(XdeOicm ziaJCs2_k5FqJFvU;(*|N*IaIf2gM?fUEJ*zJ4j}1ojiG7Pt!+Ec}X;4jRYy76%f7Q zwiZ04GyELt&cYT%PnWD49ePan*s=99F2nI2r(UV0GAm#T^g%8>WN;ztACN53TfMbW z%9mf#Q?#xiYbR%@RWdzNOm@e#buh3p^md`uV-2Ch&7TNEF9bMfTq_~ zOt6rS7X)x!q}cR38Z=+Ge&{%zCiSXe`86FkU4d2ygCaal*YfVTd^ci)rt{}&DB2t5 z)RSL>RPO{hd7RHU71`hwO04yE6_gCsI^DSPXjXMNhKj%GcJiWfg28FlNJB=87X=Z# zE_5ZV+wa_{Hx-DP*Y}QG7HHX$e@AFH_9)Kl?3 z9Idh?!`9~luV_bKX5~GXbA_1EUW}LMsFfP?7{X(u^b z8((0T-ZB>0Y-28}esVv3_*(IeldpHYTFp%0)YY7RRsB|Rdi!DHc9SE~ zwp}JK^n4)~S!X-UrwBdl`3K6*Cwy&qEr8m4s+*`STt6EK}Slj)&#CZB{JXOQ(CcqN+TWuoPv ze1G<7e&g%cdq5|eu28RcEn<{Q89z)gLWfPR%2vxcp0B%e-;AdO@1xUVaJhGzokH?u zvNP5?`bWGxIbpQ;1bO}!ZlYJ*{qUgWiBueA_-#n)RqzAvTe_wLFK+l3IaYZwE(l~j zPgbvaS$_(zD*1HWV@xP>Dbsrl&qJY{g^y8eK4l*`@Qj{F*u zF&UCxJLa2MkFGIG=y>;PUnpPW-sKTdIeSSm+vA=Up*&}9cVjxyy78HA9oDPtK9#s< zJag)}3O~u$Ilj+Y99w$r{`1 z-Ney_#O*bPo4l7)3M1wc9AxyF((#w$oYOp}^_n#6w}^Hr2KG7w zB$SDE-XG)W52SFMEH21PvgHXo`9Y@4FRHStCausfZbjUCk88a6!^-$N*-LIBp3m_~ z&c>XFxO!c+uG3g;Qc=9Vx_u3;An(>G_tJo-Vv5qaGm`$^6niwQG+Kf5dIqPG^zPC3 zS?}q74s@!%ajlwoVT*8faqY4J)>ZOt=XsY<9_M39@^ZHrRzF|7`_74OmLu6`_sAf@ zt>@@zbMYl~R87y%Q@v2Vpof`r_a=Kquh~=rkslM4g>;DdN2%NEEx{h?6qH?`KAgDA zU$EWJ(16jS8y#6E>g`5cZ?po@zB$n6V40P6?nu0Y9=DTU&I_@~!qM|qrFL;Qa>yi8 zDtGgvlKZ@!PVh!dhvnx{I|dWHbfX%nCsWKdzvi}8>7z8_@$quvYI7=-o<6eAdD5z1 zqu0|!M#}fWvC1~#P*}+agWjjdG>VrVFwpgdMiBKJ4`SrGe9bRNlNF0psEuTmf?t;L z{1p|g3-?5|YNgl(t@SYr5{27l&(}o+_SPIXLL1V($arYoY%q&S{4Bq*bc&B6*ORB2 zER-o4$#2q9Z{P+h;5RDG92a?N_q5RAiUafkp{6hIDD#_!BNeZ#pQSOC+K;p}(fPd& z&aB{hUKhY+Pn+URhTTM=_uxsaJcjnUHA9(MOcOD z7jbudOe4*cj!{e-EVqm)(}$UYf=$LK6J6)!FxYG_6$y871{V|gFJ*!{pV~K>q#EQ* zDV`-S-CVD? zrM=!q7Oe#A>d`$Ob2dbc&}wZvT}oq$nkwS(pIuZp)RW$(b$a;;XEE@x<1?+P$!1ND zjU{SKq2e7TY}^qIjSo31#uM+k1E%Nko*rk4(8AC7ip+dFXDv~&6 zG~v`}_#vptN~t8ob4vCOcV%ytHS-6~E2*Ug`cVd%nsyHM%nv>%HPB~p8{DJMNq0#3 zlqt0&C6?^YD@mm};&XQF;Z2bZRdPJ105$ZeEsW3s$dz8tk~{v%^ETNZ31bU8CthT% zu4dm~?p=Crn0sUQsmA)vtj^=fgyZt{H^Y6Gl_?ShJ_Iz-V89yBtuS06W3&_5naP+L z8dlk9aldf4O6~-Y-B~i+cPk5ZWK1+Xu3O2M>p5djt z>DMT5H%x}MyX^=8$0=MfgIgNqU|zl)DTUyC4h`$Wxp7w+w=v$P_`Y@S(f~2mYL~uo zy}0q>@QXL5?$_?}`DB4}=A6!P+XgYOldN5Vd7+WZO1w+8xfcG$kt;lF%~L48Ysv*D zak4#Yw8pzY^3#Oh?aY^q*D_uP>n*O!Op>WY56)XDGFo0RE=`nGz8U=P61X@48ZvPl zTFf*1v{FDVqp1AOaS6iUoxpoBGMg)vLfph6Gi`WLO;<3ZMRbJqEUx-0Qc!u_lX8Q8 zIIML`G0dFHG~b(_;c{x@rbjr4xYP-xC#yc zczOK(xhDJX?D%%nGvXs8z^|uLBY_|*`~UnHYRH#Y-S0pCxAUKYgWeJK-2H>75hszM zpob4aqWecDQ6nZo-s&qSzCnQ>;w-0UX#_?-{NKM3fQJos;0+QGls8BKZ-@W-1_>zi zz#AmkIXPkQiN3rz{;zM4kTKFTG_x`RP7eo;lrXYX0|76`*r%9?h_$mOhy@tE|3&~d z;Pu^Xz{@1qxq)Vi{jZTPlRzA%hDyQxIxzCFe_n5dvT?v`;os_wty=FQ2a1V2h97^% zsd71&`hEy(*2}0Xq?xso5LlPSiL=&#=Gaa z>sc1J5IfVe6&_gPR=U=3%~R9Tq+oV=n{mh4Rm2v3kJLZyM3W(dU0c3LM}=X3F|WYZ z%tC(8RMY#cuBa8txEPnr{L2e+^7kQ4rfE_-M{binY6&^*=3o-%@%drf&_c`qq3*4M zE6K7hO)1389Aai>W@ct)W@ct)W`>YL%*@Ozg_v0i@hG#pDl7Z1zq`kJUgqJN-RtJZ zd>?neFW=gGt&vsFH{}*x-Q1jx9IfuO+tH_aM(Yn!lGXdDgwf#Ef>rj737QfI2kv)r z&xg|aM6{4&T^U)NX`%xLQwk$QcSkDYlTj3Ql>YsCMn*Pe4$nq6?&rt${i5O#_n>=l z#slGWC~U%~!qw$eREB0E`(NPTIl9l;MnM`XcgMFP6($a#p;|HV0%$%E1A5Lz= z#Qtx!sq>8N>a`QItHp=H^#}vUg;*lVtweP4$qjwqQ9&dE_6vHNu6#lZGkhD+wsnk; z5Z2vWx2~35?eE+hbgt$zWosNA`#dPWh1_sp^-93!oT1O|-%cTqr$@!N^I(=EC7w=+ z;iY$Ms-(+j833aUv4i=$Rj5OyF-OJ&T{HT^g_TOkwvzFAija-(?@JI$4bE3vmOEf@ z({s*fhgv&SBov%r7p*aLcA$%zlIU#3Od+pX<%2tw(2Uoty`87aWn|`q{lrcLB`VI0 zR6SXJe#)EZ?(}faj;CFmkuPav(yGLn-&PvRT{X_@V_7FgpB$WPq04M-eecy$YPWK9 zd)2QXwe!@E8clMjtLa+)R*QzRu@&&H-5XZV`3n$nAH5;<`gVZD}XG|QU@aYxd zIQePjY@(Kwj;XT;ot6Kw`0dBBvtQ0ga>ShH#tif#U0mFi%1+bc9B~LEYn^!GD3nMEZQVP*5*T){WhqiOi%P zlKz+!j}%33GlPTKfEdS4?zLsa<=m!`?xwRTNdi$^EXogy9xcWe)^SdOat&4I(MO)6 z((jZJgqlI|14HehX*N8GwB`>$Iv~!%;0=C|S-4Q$p;9jEt2|JWhK`}+vsR>U1%k1` zNgwZYH(=sYP2AKsT*GOWoCls6%`B$}d6aL=MZH9<8vI`6clMJ#KpUWv{!=d`Ad(wB zs?a)7%NtW`(A{dP9Z2f_N>L&{{uF~wonTrQQ1KJ6#14BVj=SNo|*KgHvggH67E>R4Wji^dvZ93{e0Z!NXTfc3LlstuqNAv3M8?*zRM#H<;gH zFFzRHp}#30B<1|BCjg6Y0|?nFbx3dNk+ZH^dt7!f)d2MLIl>Thyjl|!@QKRP3@bcy zcksLloD4b|PfJl0I|LDP9dBGuzji`bUo<6H+wi8N!Q?%&7gn9^mrB9%uZnd#j=F96 zcCM;U(u9^yd&X0niJAS#wy%zZk99xf3MTFs{*|>Bl^s@``gNd{#!>2xZNJgihZ+Z- z!`YUUA*H-$&chRZ07G_4La!2~Jg(Mn%4_JE(=Km99z0Qdl&`xNlvpryuO;d0U7Nka z5b!ILfKY3opz1Z)VO$LWBO7acXU%>#c~E|tg}9ff111N)*Z>(k3^i)7qalav@jss5 zSLuFk5iZU5`R^0&)GxL_EQQet7=o7oRgNB{V3n9*>|Lya-;a477mF%rVY%THt6uq@ zQlkk82Cxb|g29_#Tl++k_dQzUl4)IRf-6}B!*P^59I8BU;J5R(He)(;3% z!_J}+DBU-40ds6F>0pTOfMo|2xn#cFSZ@`B$163j zHTxO*Mi;0G*u<0mRyX&%;ptp#BKh`K&{B2OJ$Fm==Z(C*Ja4Z^5z4xayY3892m4V{ zK?7-ZgDE=v)H36gG6sikuyejWvNv3JwCZUQ>3tUe*J6=!TRsL&NJi_K>c7TEeaJO zQFeR5QQPYfqaCKJ>UK}!d9L?>Z^jNOvv^F4%!;;#5z$F-bA-m>Ubcq79k4YoH(CSg zHfVP-J9@I){b%hbh^_)nhB=U9$b(K{8IY=M1jgrzb6vsQY?2x8-6JRM?G%8wh~N6S zg4=yKhlxg#qT}PQkJiESPicn>Doi8mwx{UYtM!Pjs(=efac3x*6A5Uz<1zBR8U1lm zhj9EAVH??OOYFefHw8Yp8=%e`Ak)PCg56D3q@|XiQVVIbNWTScJ>P?fIJ!vJluTJF z^%%Uw!LZ`+ksF@f%e@Jf#QMtZ#e4A(Qg9OjN4oH&B4lSFs3Y<<=Z=fT=OAeNHL&du zPxr=dE79OF2e1muR|>PC_qxafZYc%nyxby5JaFH0-1Un-v!pdo~O2Gk4NMpHI-nuI` z1BQXpk2Vf|38vE#b=GKY>zNhFJRpH*`^y8|1Pl#XospMjEAa>FWYp#+4&KNUE2!N>E&!su_oSIiN^5gduApAUph^K;49Htyiazhv#3sZ65&<0#i|Hkl7!-NM?p;9UxXKH&z zFSffgQ82_6YDhN+XjA(g(;ur@O+LoWI1*tNM@B%x&x3`z;>8$Eu1ol55U(0Gc!*_K zp#b2Fq@!P#{S%AaiDMm*Id4EMSSe^4aPN9C9Pi$S7Yg^2@O=!eE_`E`Wka{59FlLW zED_NpaWv60*T@G!@Y>|G!>`SFjdd5V@)mJ$?zbho`!@Rg@AEiXs~vfs(}YUDG7>n} z%{ZO1EL{$=Y}f3ELPYyJ4DVg85l=B#6;5NrSEEKJJt(f3 zen#x#r7K9Bt>{T3kzX%f!2}sK_o`q2%8@O{(HGI#XnkJKjhD{w^WdPlrjEMs>Y4sV zd`(+Tl%)(J^3#ivStn6ahj=9eG3fFhcoPJ2}hQ>}K;NA7f#E^+2hJ?cV?0*-})8B4Fpid&sd zZyUG*i>Z7ie`n3BUJqC`f%yiWSi5N3ivoUacY@1!ZZuxLnrlmRkf=w)ZoLIvU-4a( zi@K(@SC3rme|Idw4LObe_nx$9a{CxX|XHVD6CrCdaWEQGb?79QEabau>8 zqL^(h;_y841T?a*>mJ74$MZ>@2NBMM$okD35NNc4JZ6+tvXz};pYcj8R&4ue8xj-IzJ~4~&EC;C(#D27K*5iE2T%2p@~x4GM`L0Lmci>8 z&BEmCoJ5+9_@#HUMr@C`4{v8W4CxznY86PC3kAnF^Alg%a^PYP7*OUCUcA#r%i=ep zsM98BN`6g?XZ022>l@bonI)DJ$h5{q~zg5&ATQ-cP&l( z_p3xN9oI5AVzl=phCv;wsi=Qo0;H&Burf3jjztSh-gN*CxVs#0}6>Eb>wrhLyd zt$@a)(6#8eqitU^1cI{>)M%b`l|p^54;Dq8-wsu7nR2#u=2YP&lfne&-v$Z`CEURA zbg}Xp9)|SaB|A*!N2!Ra>ggAu_7A? z0)c;V5ZZr|p8qNQll`x7$3L+M_5b^5rW@A%@6#s8(+|CZYPRo;JuH`HIz#QgsV{ro$=p=0~^0MP#y-_WzMvix7*8|JSW zLTZLDZb#3^%>EC2^Y_jE7ss6cEiC+N!~Z8KcJzPPm3}>oe`kh&I?gNny^eob(tI() zubTg7X87l!e?FAIGsC~?`R5Du{{=ey2kHDT=qU+D0!d+`60m+)^4@gHuyf4h}`i`o9~86xwS=j9*k{$hxo-0L>$BMDc4 zw{TuXum&04q+lTc!{O71dZw(LqrJcI9P8wWhGq#;zH6JfcAN9+`yseHuP3LNF)mPD2WOshvzhUrbnNTqr%S)y!8*3{mKYrlgyxwspZdU8>pU2ct zxIP>mP4n#6>ck3txH#$WgibWff>7RB{vN28>`2#+Rr;{Fe>#8H&EfTg;rqOJZn%p# z50~$5=Gae&oZkz<%c9alp|!xpz)1jZ&9Z&#Zds zknj!Q$Z;i>$Z{}+eL>p}%6HUgsRAk^;c1^2q-e-b(^}uIQ5wSfy90*?^{wH-qYH;t zaax{W@|_^;YH-LQ)l~q60_5OuKxvsPt-F9q^cGdlJdSkMCq94U5Bo)<9<~DjDk*S( z;2Wie6gEp7pwO}DeOTrk67Ky9flCbks>Hxb|Fnuy&1DTV3J-&&k@lv_eK{1u*>xyq z+4~3!^qh1zcR05arn=zzenx3+-1^Bc5DbAvo@K|fAzg1h>zhM3X9FtW}HTC&xvb?5q(E*+y|VwI8}O2E^;?#W4>22yvnnq6T=WX$)Ac6 z_W8QC7lzrzp^Ap>Oo6XKt~FRhWfmrF5^ZqO{7znfx-Rb3EndHjXzFr6{+jjJQ*{YL zthE_F9aB*7Z18rP5HeL7++^<8A4mMSf(}LZkAO;IC;8TqAAh5+o+~LUIzB9{ZHKDf z<;8A5pc^ga6PrO|p+Xo>JGGz2Ev9r`7KU$MV|N^A3TbR`P13zvm1)k>XFbs!g$(Ka z!ey!VarW@thPti!n$h%`w9dddW?P1LT9m_9WmG;@3WY1ec>IvHKl3ehK`s z;Wbb2j-a3#WyhHFvNu64g=%L;-&htc-GA7$JQtI_RzXZz%# z3hQFdaxA(+J5lxPEeH%pQU`2*Jl0I<(Z-^5)Fbw*r5l&-Z)P-LcEfK$kr;@KU#&5R z_*CnCC1$T6j%q`vKcOwjC3Oq_1x?jTVLP>b!4oW$R8pp7R712@ef{(ew`B1Y4)5*; zjU0H0f(YfbpeQsV2K86tx5@|x_X9Afw!ZSCU`1tsipv6nM*JMD@i;wLdersLK@+8C z>5K~zn>{QpuyL>!ua)Q!wiHNgS^0vEU*%GK1f=KzHRP9eMZPmx_K!lZI%i`hj?<(W z=f3l}^6i% z{xuyVN+(s5ajuthl`G##Q3E%i0c3O2%sptP-L=7y{Eu2H8(8BTB+dx&UT;h$&_9-_ zU0KY)QQd8B)UpO@PYmBvV>AiWDxbCnq9k&m`}3M+ ze%FyW*E|FIQJda~gU1?X!yEixg(JG710aVI6d`zMAN_%gNIUfqZ5ZXfWT_GSO!K7s zqQ_Y8I(DKtSn(UdMU={7A7(;E9zxKfg~#ymzAm6X%7<`dVe-C25ovfwLWm8z8fW@I zPv;L;*W*el-8CnZ58sP5B;6zF>K-VedyqlWs(*yT?5F~gXl0^vNzt0AbVr}Y$iP7f zg^tl2n{;h)X6iPV1-2et8_AF|wlwsI2Hbw4I6qqlilXK&IDc5iY~!=Ng9?vQ`VYhg{{sew$179K&+da?zd+F}co0cVlhRJ{MH(x2r66 z8+jDhn!YWL^hL)MA$u7tjtvpR!V>pIcav9r4+<$4X7B}x`n5(MxPBjsAe0u?3$|tW zfS{)DNp>RDhGhrPDq#;G3&COz=^V6d!}yH;=6QD51<1Iue|CQg19aWO(W&MoIZ=6U zpfgh7!-TW8>u*T+qP{0PS&stUXJP407s!EP`g{cW7D( z`k2PFvAXm;un*xq6fva(^kzn&+!kIp7FWK(8*h6dpA8@1Rs?e)Xf&<;L!x6+dvK;`%X9`_nDgewmf9B70`UmIg5G z#c5|+D50*gc29$DEC6F2el+KU90SzZbj+pk%dewwc05bs9yC&ZhxG|w%jNuStnc== z(SQr>lgshDct~!na2{|D%dvt)ce#-Mncq?-tEb4o+h+4gEOMNBj0<`V(+M$8)Y-c! zvK0<(rWX=P@PMmSla@`sfF0hy86Rk8Z$#QXhIh&G>Y%H%Wz?WSrW-P=SKfgB=h9vK z-~a>ZfGzCfXvIw?Bj>c@N+iq(dbz<0G~KI)UOhkXmQ#3^-4FYvRrMKn+-)S}?yFFr z#WlgYmFyMdG@kNQe!mzU;Z*%wKc8llp|d1nV9A_OSHYC;iiaMvE0MRgq^>9CvJP^= zXQhSQ`w0s$p4AGzH+bGR%?{VhHiXelJ7fak z{8;jR#>@WUA!;yV^Yi*`ZGq6(qYe)k%Sedl-?jj*!6iLn!2Pxs^(WYduPBla${W| zq(_+Bb_B>*$QWrbO0@GORUxAfi4HT*sBgyh=Lj&YemvoYHwz4)>V*wxDksf?>cv7Wy4R{yNK?!LX&E z>;<>(XaP0s1zNVjH#DNY-|3=atz>d#kuBJap>KQ${K^%5_td-g`_d5Ye81?x(M;Bn ztnZAult=Og*!Milnq__9(OAxjq+DDeQHyK>^+(bhG=?Flb*dW&7 zVv}x-!wzM=ruG0%^fL_GRDfdvm(=?^3NtzRI54xS$he5?PQW`kswi*ejgG)>)lEOn z7xp^cJW1=eqCX^D@vMVZP$!<_x_He)iB+upteAFYs3fenmD1)#_v@BWg?@egeS729 zAXuTU8Ie=CUy3O#=V*0{U0s#YVc9`A+1BUUQ%@_%oPi&~&d4<;W{OH<=f&+9tVhd} zw(i0prZa}&G4UP&LV_y{u15|Uh0vC@ue0)}jXAMeiPfcgsyOElj~_yzf(gh1mLmao zlu37BcCJz(4?KXktXK>1%8!BdQ8`aHcQ?c${L4d`!q5^9BA;!K0nFnBnw@H=NRN@S zCw3Y)xqZa@y#~uv?)sJ#cIcRhE^da3^L94LK{UZ%oFsekvahUuM|OeT`JL^)b*@mB zaF~RzM?0eg^(+KYNT-9h7&?c=E;b5t>rGpg%T2O7(f3X+euA5GZ(NSD94VvR z&#Q;q=Zw68<}q3&6dPRoOeTgVT;nbNfC#y7%d5$pD`}@JEoH1Izbf})XadJ|1}o1J z&}|%?&EwN@lFUw;W-C-6^}>Qq3(N#|Ja0@uO<`?(cUk~7?rB}QKRnM==9Ehx zvIx#}E${g{mh44>p;Jp}A`)lQ`Fg$e>I1fOg(P-tNVH>9QPX863r0q;eioly7GrCh zC6P(`<23ns(x~etmEuoVzjH*HRbm9DkeP2)OS5oSq-aV5boRGEuwWAPYzWUW>`FaW z!SovpOT;sWiOqdY^CiK~SK>$0_aD5g6&M_BD1H5nffZF7D)p18wHhFOgr=OeKh>{q zJYc?7pPdyq~h)_sGAMZO{BHphpq%@;?3`YWWf))ZmR!N@P7a4+#KO-Q}m(7?v z@&SI^K}Rm9O(2sKL%gVN(;!l#A8D%k=Xr$}5%XY^RbH&jD~pW&Sj=Z?5H-7urpTMK zz5=p6fgQ2^F|rhRWxnfYw z=EGfPOlEF9mobmF0akw8rNKOpz{n{V!%7osYl+n=wIaa3$@`C4zMl**7?!UkS*d}1?QIgdF zcJF$38mOhSbESJo1HmT&cmU2bzyR617e-CmcFWZC(YDI7V981;o z=y(!1e}u>y8ee+(;a>&NoxC=x2=`ND6=n0>CP>#qxP;5fjck2CC=xhqXl)*l@gQE)sdfRb3c@PU(yQ^ftt-TBylj{dnjqKhx@|TaFw>*ti=Z%X zScq&_JyH&4Q*d-e1V_l3JAKkemKZ8nYECmfp6lu023W1~)B2h*1^X3FNlkq^wbtoM+j*W~jPPcfBXefnE+4%5RDWB3!x0pcc%a6EczO(M0Jh9MHI zqWuYu_%i&&!}#G!!|DAXf%&AoOAVd6rX%57$C&aVc_q+eS>m!E-n=cv#;tu2fTu6~ zP5fp#49^T<)_#NC1QDn=?-v%r%A|fe=CfuHW?@3cgEQl3{bYVRGUdgovU$@Y9b={^ z7a(tr!17kdZ?JWs0m^ADSpE{!K(3YSYZV*JQ|niELBNc_8YKdT)B!5X-*#9EJ39*! z(Du1#2y-BDwHOEX&t;(ueB-&Xz{~tuWiHjOL5fNh)Ul{MA}4>JceBrI4@(N+bL937 z!b4pMgE!Ifgm{@%!S>MiTA|Tj$LP03lsByfb_f`O1nI~$H9j&ZwZG?dzOIjy*le`G z(tOebI97*cKj_Qao06aBezy6%y7)zeAvPouNTznRL1gDANA$jyKry`Q!siV^$GVQ+ z-fJTRmzBSuBb|b`yck+znOv0QS~KI*S+5JPG?H4b1@t$)r+9;nKH1h_spIXP$slA} z;)NE6CWFHq>Cfoy>~%+FVT2p2@W3htcio?yDOZ7Pccaf2D|->V*gF{Qz$g#LVd&jD zM~izRxGnIBW;Vq$S>0*xoz0WfZ0jNgJX6z4m8mVhjMCrg+S9`RhNmv${+hZJ-<@TE zvemeBg|yyOw^m_O&DYG}IvqLe+F%vloQx5_d{xK&c!p-Z_fb6Wr0?vu?|#*&)7C}+ zhxL-f6$tSrwb)RlsApx@g(w8Gj|s1*pg>(sdE@nN-0O2sx)48-fK`SL@bR@V_zj&; zq3Ev$j6)8%PTM8$))5r^(J!5Bk8pkTk=)1Qb~xZ9{;Vq-coMPHK;g9*DQ?~rPLyD|Azyd-XYrNxpe4nKClkpDCxW9P-TaFu-LtPu z7+my!)Quqy>%x!IG6={_f#Q*q^nK?PxIdag_I+~m4(-;}s+0hsqIUDN#aTbk< z11&k;m&uKylY_INlbpVTv5gZR)87n1=^6gLfAfDU*U;1dn_eRzC?qUQsc39!Ypg6T zY;9{{PWvyBK-Jua-^S7WU%&qjwDIT}{$YXhmuSPp@|S4yr3uignj1NpIevBR{*k?f z_jmo^&&B^l@Bga#KZ-X0p~n9R&FTKB+k7>>{vWm7(lanK(@N{R{aNRiiz6%B|4O*| zN3-qMnmcH7c3ekHE{*KXT?gy{U8l>fV2_1}|nCU)jO9lHJ^<%8Oq zj(cn_K35eVa8+F5n#LI|@BpleHK&=bor?{eqimU>>E3bH&dmx<`|dnrQSe#64TPJt|syPjSA8b9~R^nThrXuoiA`LzCsdv|hg_xKn- zxVW0W8^<-#MH^pr`Jtin@!O$!P}DbP8t3q=vhw_W7;cr;b{pB<|C5|pT*b&(`7p{P zBC(@j)#KxFvilQXv&;MLtwxO1cd2Sw-I+zD9SZTF0a6&ANPe5 zT{e09=anDD=e4|@-goo+d!^)=Z*-k;*KoN;^H2&>TfM9a+Q0hGH-Bb%WqlB~zmKo8 z<^tU7ZgsKeiuH|UMUcd2ut+MT;K&>Vz3$dSk!69WZ*F}uJ%8Aa=1b-@0NevG8&{0A zLifIdUwAma)38&Javf0xje+;*So9Jo`AWk~o6C&x-J!CRm)U4(5P{LC*V#vFi5us+ zJDBy}@g;-7Q_>g}b?Xp?0uhrOyEP`xL{R{{CgR8dH_pl?9+-IalB_@62gvALK0FQH z7i3kX%s8`@o0Fda7~DrvizvCP>j?|Xpg5uWOB9T>&Y5?=@uz;l^4zY^IBig?qt`{3 zb`QwR>9a+P%q=g5bU`>vdtjKoVJiSi`8ur-zQl1(6sA&R@XI|)G3?xlT)uCSqnjQ% z{=fEt%IJpBAqUhN57jI&0|bvuA5pk-+&zqnxQl5Tsx~0 z3sZzLb!bm>PK+(kv(wW$!8j5n%>=e)((5Z=7Y}Ed@rgnUxYuG*c8H2ABNb0p58%os zxnl$6-L%UboOOHFuvHC!(3 zu(#zC#QVN?m3A^@L`(W0}m;K z#hn4~!hp{uB*xE=(gfZry#4S*uAgX1SH3gJ(<93M91x4P_TwFN)0$p4my&_H4P4Cw zqo^{HpUYhmq8R(b5Q1EmP)HcupD(mo=&-#Y?^i`oY(gJytHE_L)NjS>h5^y*?96F} zZ`kLMT7m)PHO^g6B%Ggm5J;R~vE4K*u;GnCb8=1S`bgHGlvgGD19m*SRNSkXEAzhw zTm+JU3Y+Fy>E!OtT5+$R@|_w(PN*05Nlv5680$ojpu*B)!PFZ!Xb228FZJ`OOk7^Y zb5D<8zrQha!%2YWjNhoqp+fdo0&Lw){A}VvVlNpK-lc!DwvNKgG+$I_cvtvdCS`Na z^yxRYOa#0rE#{ytj?S<141wDRWb)nnC%~3z(ug#ue!#3I)V0KAH}%fbbC*~qvRoF0 z+QVd09E8Gchd>64*w`kaLPA%joXUYPvksx0T@pFO?z?J}TYv>04;Cu9!SkMy|s6tw)Di4v6N5oX9-%sOy6#|%Cv66R$#0_0G_ctB2s72YrPW0DyN zVXVhIe2k`zhAOyn{S>G(g=NcSO?;spZ90CaoJ#r^VJ%`J(Q&Qt_!h7lQ<4#pQ{mr^ zYWPFodqpBktXMJgnSmEcMwqa`x&67YFGMhZINBM;r-;}GDBz0rGhCVF7XE8`#QNU8zkXIJIMl)Fq@gktZb27fX` z`GpFb=088(IM3^Qavn&5p$)BWr$WhbF+c{d5Sd6+w(=H@F1z~G2(kb_6H;^;q^$Zn zJ9Mp$I|H7HXG0!f)t5i9JPb1R!L^%){5U}Uf{)(LzkH6lUN}0UM4);ewNxZy{6m82 zSPo<*S}ylo?9^OVCs1rNCrSW-L|I2}lUTS&7%Nbt)2_ecSMUh&v69N6@Vfsqfb@$s zDEIA&d*Wm&Se0YYx=ICkEM%dWCGcXx zlW^4iG3)DCzdcu4k3Cab54}|?0HtT#5Cc)lkaCGkAtlnov!vG4K5%)Eud>*DqxO^8 z)(9KG3KwXrax&vpeS+zC#)aOiju;Djwmj_B9PzLs^y_B`i2JkbS_qEjD(}hcJ}bu< z6lz}P3|591xg>T#3^EE?uQW}?Nz(3Jzn-Sas=GS*G9v)a393?R=!!*Dd7JnqLG;P* znHX~HZYn+rpAZLUyro5cwxL-ZXlNj(ZYu2AX7ZyxY!|yp!^;r|(b81oS_uHXY)96m zLvYVdBot1(h!#2EnN@47c`6s8&jV{Ud`ym3G5%-tpM@CCBvh<>=fhtUa6lb6b@nAu z7gU^U@q$kRr7P}ep5iWtG)iLFQ4J-bvr=<(;r;@cy?B-$7?Vse?W2!gLGMD&=zW+u zLpllB*3n4~cLeJ5>t-e9=z2{@Qr~Y|Qb4qyyj|Dn*}m>1ZCcNbaVo$K+}sMs@LbF3 zg1M77S1-S{_Lzh$-{O#P(2J3~8ImD8Cp7_Vqe`j908)H3_dTKOnqXjS0~J3{cnWir zarAm0gHTOV@MlyMB1J0%YjS5T_K;@3(aKYqw_(anL) zW?NG$)O_}_I~Ph?NbT5@pwK9ESqO<=hyo!vO_E;mu9u=YecdPAyyo&Z<*|S4K$AVP`HD7Gd{d*n*k< zsM;)%Q5vZ=l->+aTUvOgZxPYB}Lw*XMlo@F3UHy^epuJS!5^TDG zlp|d4lF7l_$t|^MUbeJ=JxN>{18wFSHN;J?L1o)q&Y2^7)T^QBid^`}R)<@ftYCW@ zp3!E8SWj8hzaSi8uRTF@Lg(D>U{ErJio)!SO}rYyP|hKxt*tb%!2f0GQr=JtQqRd| zu#qhwJ9k1f%YQ(Jed!H6qyZC(Xn74U_09vWc&3$IB#3A6JvP`?+@dUPLhWbS#6XW$ z0$bYIXWw^r1Qg29Lwn9sBG^ev_jiTH=78dD9?cZFtEv2A7UC0Er4&5hTVM&9Z3T?A zQ8mQQ&9#Q~%AGzd($80`&a_SLsZzw|rZaCEtNJ$2tcuZJm8;hceZ)pBK>KgPZ`1{on^+AoSa!VgQt7o>p5G6Ug2&14jE#{U$CcX3Gr`4 zn#m5`QpRNbxe75eyD0O92!I{;3?)JAF9Wfqtp3L1Xy-n%E0sFSZR_UQF~jmZ8f{pe z##F5WJ=%o$Z9X}8^t9s|@4Gsx?WE{YFg~7c8ao&|9`d<9wT*pMTbPlwKQ+=#BTGrS zSWQFLqns%^MQ=cq$0;v$-rOx*MvJ%f$JG3PUDWQ`aPs`{Je_=e@6;}JFhVPGM)5Q^2}Vt%L2y%EFkF z4&^-9o694)b=ROY$dHOZ<_aUtDfO7F^+BgbNhw5u)2K(2fu>L8{jDUs4Hk~9&%4`+ zbZ(+9t_*5aih4Lu< zP!TTkyg%-vMR(|$00Zv_j)8yLGuO;efW^QxH%RWw-<&NX_hU_C0=bSt*<>@dFbV3< zX(r5CMHb;X{B4=8gAN|lm-T2Qu8FRI6J#0;m?koe4Ej|?-_9^&-?d-A86Wr>~iG(v}Ewtd=#Gk%y6WWw`hXmTDAr-*Do2q|D~>}p)eJxX5KsBF7kZ?dIyG- z+J|fYI#akBTgPPHn|pVt>iXG1QPgfv5_%Cx{QdV*O4|LMYShVH)=(n)*X9uSh8uwL zD?RWQVB8RS1dd7W)!7Sw1c0OTGAf!#Cb>>R1a$5lo#0&x6MHVTQNNs+2B0qjN0Ywz zbnFUk$C?U#w&F~C2w$}H0X1g?et2r@0i@>a6~q7p1KqPJ3tfXA+t2JLL++;IJXvXJ zo?!Yx&mN&q3$He8UGSv(Y(>X^<1V>*$-=d*bBE&1d6F}unN**?Wb;|fO2yqdKl)bN zbUGN*gjbZ?Q;;k)`du3Sn_D3HHb73ar3(@QddET}ekxUnQg2+v)6+-Hj%cHxQN?^VPXy7@Z$*Q&j=)1ea)8*!-{W$kfQqrrhaLNH=! zhJ<}nE58c9T!vf2#CvDLKVYC0$s+lB+NFRUZZI%<2b#65&fEob+yYO73c4VLwHFTD z(c}$Q;h7H-CDZph7eBjkR`4Emki2?3GWruNoq?O1BL^2lmw=WtsO-z=q%3k1Ru^f? zSfeb=8K9HFu*BSzzOxEMkqotr03|2G*_s{nLUrDC>Y`at#@;g;u$A=6=IsxxqHdRO z#2{W*DP<;1J9ZFo&7+A|;cO(-i!x&2PlP|#W|mCbx(;q;V#WIi^V&5n9Ys%HmTVYh z+fL@kw6f>nbW`h=zHNBhY|S6f z27)7GmxlId-*X%HIEyRfJM?HK8>Pp;?Qmsq2iyHJ(vZSOMybIuyYiNv#JIMEL>Tat ziX}C0J83Vha3~0H!&*o@V|0b}yaFTe(CCAzRNW4XFcWNdlZcfjhHUR1nx^DNWNOTQ zt6?EC`5lL8oOgB4Olfj?bOwE7i}RDZ;;6k_s+fHDBXbsh3S9qLlGEF!#23fX+cAn< zvWB#GUV*;}S`UoEJKj|7+lEF1naL(r8TTxUbxKV@SM7p(d|Ss(5bpT)*-5>2YD@i$jJOF2R$ICQJaBjRw7b z0Futiu4Qe`HMx_%J)B&9Het;C)Yu}zo!X*R?au1_v{ue}r+f8kPqVg3jcmwm#%29| zOnY!%q9t28I=Ey0GSM#gFZSJKzeq2zpuMZ966sD`BX}3x=ckr zCqR0|o1LR~K&3C9QyiQWJ{qx*w*Stp^m;e#e)|llA;UADZSU&K!~IOx_Tob&!W%`( z{zfP|>eg33%dYif9~zhB$dI`W^E092^Xz2wiSK@RKJh)>NT67YHJxbdyQH|61Br2c zt`>v;Q2JEj(;Zx)>t~pZ#;6jo7;au^A9DGG;J#0Yy|iUZBlv9wF&t+8w|~K0g?&4#Pw>O;~E1?iBu1hu+dk8x{YfMB@ZDCI&u|wxu z>6z#tx7R)Y%ArdUnCCVdMnM<9c~Ri^aCig?cy1qWRuyM~&KK@;!yRT%TkPn+mOXg4 z;+iddNVN`sapZMg&7TC03W1&3vJH8fq2MFDPox;75JMfO_FGz}pZ^^cJ`0^|%X)o{ zP)qQXkQhF<=qq7k;^F&w$C0F zVYD7Z7&=D-05`xw=l7q(a~ojLPCC0hf)0MM=fE&A^7`;VJM~ zMHD=)`=|S9cTHNGl@V#F^WnX^^N3Z(s_Sht9W@ndBAtF3-d1Dh0-7mBxB}D3J;O2q zk8q;NKTdo+IyfV%39fPnUdbG)=b)tmwc_TbU}eY8+(lXwy1sLJ=dUp%gH;yI0;q%0 zR>|7~%2jG1tSGh32ho<2tSS4Pi(=BFUj>Nu4>01{j^O>EswV1pt8n$ainPAUWd4?& zdc&D(Y&PTiy^$Mc9mj)&nM15rE4sI%1^aBazw6K|l_^k^t_N_=)sQ)ZSa0sY;it%Y zNrx`YP*g0-aRpC`p-8@^&AnNZ^#*tdtEpPJ{Z39zPc{l6O@XUFWsV8OLa-_x>oCgW zq3p;gG;v#7V1lL_({K+cmzo^2@a)<;y<(xP-X{M6eVSWMurkEM(w>)-Y+p};^!*1o zp#q`6`>HMEJqAjFAL=atcc~Pg^)YKBM>RB{{}7+C>AnioC7D#5rXXQFP9-u^@}Y$& zAaB0!?qI=#j-+J3<&^bF*G>`C9y2hX?3C+FIZf?Mxjb=GVp+7fx+~6vK0ahStUY3? zTXWAz>q->N1Y&YDP6{|CmIi>GXJ9d$;n4YomwRC3PhdHDE2ltZbMZHOU4i2B1L-$l zt2gWqnq9bl4)WWk=D@k^8ol3@1Vky6LR47w#l}!tHhT?n*Q9D{ZezIs0v-(av227Tmv7rhL{@xMx09{811Wj2 zAD}4oVb#xu2@Wg~O1rfwMl5{!*4{yHjQ|yd(QmZ+ZC~5H{xa2cqi72*Wd<9sL=ytn zIjVgeuG6Wc+(YjGkBi0g%+^n0sp|1^m-BZns@;>+HEzLo^}94gR}Cr6q4jxO7zYcL z56lKblXo5d$Soq%oAd7K?2n^3sdvZF2BT9cA{ZF(LF$5Y#W*V82lPO{Xw5i`1`nN? zr${NF0%y5SwqR2-slY%pHzX0De;O*X2HE9y45_pk^s9$L3p&xWOC2I^(z9NPsD0~e zIyYbwS_$6GsD%=4?mI=Y38bg7NY#Fk%O(ZMBC|wQjc+SSb0CUacUzDFn1&Q*$1qV; zB+s{8&xk}lF~JSfJqRvU69Z+rR3aBME%Iztpj4dFe7o!{0(rY7g`Z3vW*E)YX#Yw8 zFkPi;He}k>yZK-R#L9|lSHGnb^h{s6@3#(5aR%;hQ7spn+Xp-($g9xq=T~|doEA|= z(k-T2v)a0N+cq)0-AxCe)2>-=Vb@3qts|KJ1pP>l@1re8eX5CWw{8_ho;361oQ-bC zDisK7L*fPPam>yj;G5nxN8u3BZLj0;)Y)9-x5JHRnWa|g71k*02QSXe5l4ZV?Khiq zc;`bBinVE)#Axbi73^Xcp8V(u-z!CYo^b>6SyCMcS$%N<)%YM>Tw`4<8{QnZAAfT* z2!!BgTadkK1mQ(ga%XLlZcWv9YwQJk9Z{PQv``zdM_sDfgE@Klks#rI$((Agp=35hzbLG@g;4Ee22T;{c?AI!F=CNFg-t*C zx&?$!e>eh)luFibY(;D6im|Gpp)I^{rUbrI09}Y-5C(Q+5klM*&9J6KoY0nzlWJOn zpLk5$QxS4=dB5Hdz+1bMDb;>st(=T;g@n6_DXgu?y2V)j5_anb!PdV;1x(2bM&j{B z2RsVN6ACHWsg3;4q&32+3Kij`;~0=$y3ZM1v;)U)T)2YYzsx2NHJ#K9}5uk9fKtEP*`5RYbVqKn25)GfJg_vwB4qf4NYyocfp}XL5kfvyHs_jp22M( z)pH1ov}3UMj4 zKpBC6%Wh=s&WL0DS>QuF6N+waZ1)R<_h3Tc14Dth;?FMckd8hK+?0*a0BN+pFyJu_ ztOy=CGpW%8T@rgcd@}Vz@=(po#^&@Ow&ru zRc3*p{Jcr9TDLO!x9etod86D+4BqKLkUMG`YiJm?q`#g9_{rt7w;&%+w&=BPG!&90 z3U!#5%WZ=Zi1khjSXYjyr8Ht3nDFc^5}dsQRr3r#XN+ioi;HgFdF7s!t3(cl_Q3}xSFspe;%_&TxaT6d(}eC$HanI zs63N*mEH4~Mvf?%+6oNQl}XB z<5EFp*jO5Nmnm-h8_}+i`*fF)6P{5G#IUTC%TAqrK z=ES*2>gY?*c~6ws9r6CdniPmEL&d=IElXx+Tvz3@e|*yG^ujH#4jj?6bF{ree+?MH#w>9h>pmt9T%R{nY1db{y!yq!uMV~txveCy1m&Cp zDg=*!#Bxr|4x7IF=&iUQB=yZe$C7eYH~g(dXj?wO{Ru`8%6Gy}#&&|9G=?*?slK(E zt!DQRN*khuwwU5mpOV3b1_bi9L72fDHiio&8neg&PW*WQ2Tgn?Pwz;wszN_6M+-rm zx_msh3jhO+*0m4IuCLK0wuG*Ib4Uk43o|VZ4+PZuo3VQn10=}DF%&4s$YmN(kgx5Y z(!P0hniH^NwKyUNkbUR19oXOC`X1WDFRzz*&}b~qN;GfN#}N%fK0%8cDp3Isr8xI; z-6ndX0TeoYu%MXa!}+C_LGQ}2yJvfZO+j52TTLvXtyfwJjp+Fr(Ih5!hp)!2iZGOo z*As+gW8cy>j44vZp6mh~wRnd5AkA(`Zu*kQX$c~DbfT=RS@&`m9%W&ynrUqt)m{#N zZq*%{uO$zW@S>Tn1$&_R$vNPCxPK+v+DD_u+b4cE)NSrw5FkWgRrrs7(>$_>zh{C# zky>gG|0(Pwz0V%ATAINo$^gbD+gb-eM<_FIO+-Ssr1z{+MFMi6T`}j_>0vS!4okvs z&QQ_CLluz1@4>C5RY%~4{2WeyHNF9xb4H}sN}fEC@$NRqc59d|0Qg!$Xl|0-A#0fJ ztTQvA-YDGOpX=9rA69m$d%&N{%2PAqiJw#^*aHQ@UDh{(a2ff5fv|wA(yZnYaNjS@ zIj~jWGIM>Bzj{OVgo;alLT3T824OOah!~>`9fSZXDGQ4##Dq@5>Ju|YFn%oA0bs`~ zBw;d`M~I3l6i1q6An=w|PN|Cq#`=OcIPX4u-6Mnr#Ft0k4EbBp}scV1?jIdqn0C>87)XB_+8;$s4e>Z4lrRDe}P{galtDV;})pSXrz9(o^{DHiLR!}GiI{q?J>y?oc#dplgGYay^2tL;3w6s)bIt=0FM z&$pqY-S@gd?fIJLL;E7c(%h}ar_~oe=sbJH#f62u>HIwJ?0vH$Cu-%o`^wdBD>K8* z?n1BY{oL*O+PlN|?xAwk*X1df>AUpv>cYSDIVWR#@QTo@_5DHmIw$M%_wyP2PuDDx z-=AMy`_U-T)y7;b^J_=aYuUOwdXUMgEuQ+6=r%2$k3Z?wj`jX%H>s)!m3~3Utvv`8 zaY}A3lU2{~em@*&Cd(&Vl2=93TjH;UkQRPE{yj^s3?l2-Qp-2vM@B83jrtA(CQ8l~-yo?pv%DbbPiNPJs;Z*W z*&i?ZD%ndqA4ZzmEnhdMIwstbHwYc|1?E`-pRy9wo4*N);5)}RUEbgLz!+S4pPK`BL8iZ~YF0Ib4Kj4?laMyXFdl#QcLo61~T!a{` z+En`>5mG9-MTQCd{x&^-f#xtWz+JLe&_u+ns~wx~`7Qsh+Co#kS?s#?ZU$HQSLs&llwe zi7_C51-R(sNWm|;SOQyqvKhAJ(q67o7EjJhZ1JH1>xB}b(_*#{p8`f_S#y=qTD-Ir zI$#y@V3H=Sikr{HsHgE(Tvp`qAefTd?DLJqV?J_Q+?S)lYr3L(T=_`aHF|Hb#d{>^ zB0uC?y4oMPNv0{fXgN}go>#TA`m(CT)AP5?mc4KJ0vXCnd;382`o#32(V@w%5Gg<^ z=#a_)Y0B65TGjk!;Kd+kgbJ#%xy_x1H<}X@W7TbQzZN0Ql&CC*E#`a@(KutQbtQ1d z zg8gX)`Z9gW=fhhK>#kQT!@%a@E*BFcRGlzLeDG&DHHwE{5Rt(yQ3iz&m|56~OHpA< zesT&5+5V{1umg&VJcDu*#mX{359~IIH*K6DBU#Ex(I<17EkDL46eE)q-zRu4DzLF8 zcCU%%@OpH_#6`-l1})`wrdw3~{`o5_Kb7r1K0CT?9BRNOe4VYqT;}FFj`(P#+B5!D z^;xjs>#ag8N)C4>0*mF6bpon1^MLO41h6y#jteQ6GS)-Jcxy2_RP&;2kOn8%$NX-_ z?2xVRPib-?Hfex{x^r3MWQG#rDoV)g>rvxv{^I2xlI+vuu&=;WX%IUIN=>G-mz~o! zRz+S9#{?M4IVrC32fzU5zvu`|??*a6!EkerCu^>Yf22Cl6v1 zS^_$XOUOGQ-IpIHE3Ji?jXe#l=X;TtrI!!aomVKovfgbhz}wILO3Y4cZ4b`6>vJwS z8X0=mCVwoWzR;w<43mG8g+}fwCe#>Q=1-{tvpK@&ff2fK4G#;XAP1r^iVW7r@dq@n zEU6X|EN=p)luVxkqtu0xSX_rotQmLnAvfXdSs`1UD90y5U9~eR8+N57Hv#*7qMafb z&A8)akSHwJlBZV7IzyvG)8R^Xh{%#x?5-9M6)F82d|dG zy3*Iz*atCA`(=9H?GW+IK2>ZNn&;D0fg{Xcghxc*ZHWXCMk6hkzg!H6Og3{Q5FF<1 zl4WY(#9ono2yXEA4BTK^g9xv0wZCx;Zl_Sj#{palZ}4ki>hbCfK;wR*0S(}ww#By_ zl(M}c(qWoza@$Wxe@kE>DE`!DrzLQzd7aOJ;xM$uZ1XEeend~kM5@v80l7>7*o79l zAF}Z=Ssn9MgM=py)~F!w5^!ZD&j!-Eaxl!wl+gg-v5B3!9zjsuC|FdPDG{=OT1`RU znc#q7O1mF^uo?^A0! zfgdO#6Xvy`>hSBYQ3Cn&u@|wNC1P~OuQK*@Qu%n6#sHw)d1eNA1L#D%NdM6K;Ca__ zwlkaV-(M&x*j*n;oJq^uLBY$n9s~Q6e#Qs0N~Q;d(3UiQ)X@=y&{}E!)G~`MNn^fI zIL?KvO46|BxCdMye>1?vqhkP()L5b8=E2Z`3T-lQ`86*oLz(3*Ao(qg{07lX0p0)m1GBqj_41I9Zap zYtI?SR`6xaWDBw6xA;tF$Q{zq6B51owWh)sb7Z2%PSf@wuWZ#3rSb9xio__SNjnlq zl#Vl_4xhR&P$nG{T0@CIlRkAD6tRK>FKOb)t(1B4AHYk6mv)64L!KFGHa9HUK^BS; zhCE|Q$e&2o6flCha)YK{SSTobrC$1KILLT;iIe45Fz~W(b~xHk3}WHw{h6tfaR6c< z6q`oi6d;N5IBGJ%BG5STMMM(A2~$LcHGL#R8|5Q_InC=_Vi$K!gU{*>edGji_jov6p=(spbB9g(BDbvtV zSCWp;?U@XZ?<=B1fjHuTz;?!WBy@vcyLB} zN?^v9a_&)n3N+)O2=zFBMa(#crf@J!@?=0vFBRIK*_%f(_{a&usDkjI2%GycR0a2< zXN@B1I!8}z?#@=0LYfyDx%VZT>;#uiDm@Uf2wAc5_0*g1Js#@`(mo$LA*om^)qq}r z6FwX(1gmhuEj9M6VW`-fIF$y_r-`DjClQvbU*hr!Y84p-6=x&U_3uU;$%7i$5|*zN zVkiuG@U``=o#B96ttog%QMT4|C<|ano2s)?3MtpEaruxmOOC{+JxwDNKvi4AsUU#K z9cOjdt#0F5>$I(Rwcw&kQ*7#9_`wp+zW|yhRNLjot>N3!&3LR}$o9p^fK}vG3-`X67I8})Sba6etHGFDi3cs01hn1utq+8KpcW)lgBua73$e zT;iUR08{4Ze}MFIFYQ|YAZ>a4f_jDi5|1~G)LX%6IRSFxpf`+68LI>-!f)%!S)?3^ z1+t8U&bXLmnET+_bx^~_Q>gZvJo=_+_EYEh97l~65qB+%IB z6~G*B{9grI{XoW}IAgD`{%&mOuJ89(bnY0-ha5LEQsVyKUa8#Vhpl4rUA5QWlr=M* zZR)=&r%H>#@v3sg!K$Jj?ae`p7|nxgC~s(~hVql;5hGRQDFaoDS?B(X7#{&$2WN6( zftpoPtBi6|j58psDSni1P|KP`D*204tOuPk(s-L-&`qBxa%O#n3KwRcz@%QYA>HtO znaOl-*h54(F3Oa|lNUly9IGI2)%TXhs{7+1I&GNLIL0ixS~_Kr^fSjzAj>Jbc#D0~ z0qa$2Q3-7AFok9dR}7P;ijCe_Noduvf8Sw`R!}HoD-l(%kU2nZg?lh!{#UbBzBoGd z=kqjR1YZ@~?rucd`no}z#bgf@F5>3Kg26c{)#Cf=%a5=YpiqyI7N`brqFFgM{f)CR zPymlGmLE}v59R!sGUrP{Gu{IeJN9cN-DS{&ljFQ)g)Iwx zdxQLd1&tq;PA5t#T~;7g&=|?zm2%j;VN39~?p}*2p=es&=!ujm0oeW>#?m?kCc)^( z>i*kxihtV>{I|`4@uI2?1dA%yDD0%H72w~KJ(f1FU7WwUZ^aW#o~#S{PWaz}VoQ1# z)t5*a>p$LraMB^#7hA8BW8mbsSM*;J1o6?VRIr#^F1mky+tt~sVSoB4_QDfM5d;u5 zfHKcX5GQ&JtI#n55s|ZK@gw7kCzMgrgY6b)8)f!mP!%U4)S&<&CS}m%hQqO?uaY1u zLI}%SHv5rr0+T8wM@CxVF(afy#PJ8E3jB&@{DBvR01#D8A%z=5GJ~M}#L?-t51|+I z`Fo>IWSd~qFmsf2o_X+0Z|{coYs3la6%B~W4aOj+7*7u8Z5*k`?Xv6k|kVR4w*j!Da-haL3QwuBnu@cF>O`& z=wDz|`EdWod&3{7000(L9rL)5V1VD>f(Hd<$2dhEz+5Oz#5^RzBj??nhej*K%kE;$ zNvV~ApYxA^*WJ{_a?SwxEh+V^`|F0RPq&ZB_RjWzOUmu1wwMMnX9vokS~7T8`7-QH zj_08X%hmc-7?Cx7PN6!PbSe4D$Czsjd5W0hET=utCha+DFo{g9FacHyR|MmxoDKCD z&Q0}c4oY3gAMQFLn+Hqm2xg;nDhqGgy4`1@blGP*&UQzn(PE8cPYUS}E1*4_KEmN` z9l{(&wjYAsD6#rFIly!K)Ykjs;x3f&{^CUxTfwn&&soXX#Gy`&osvQMmeyh;cSLJL z_=mdt;$GYY7e`-=oa-@Bphx_a(+%2c^8LEsRdKVss}TF;G8R8-{5(@ieg6JFyCW2# zUZYq-zabt;j(~gTI8Oqm3=DAIcg@I*)yJ{+cTF7F0GfpyM`QHtmy+_W2Zzy)JbI^Pn9k(f%7gC8O5d{MfW_Vw3%WOoCsr*ZDnYIGkJ2J zvzH1Xa>0fNLdJY>gt}y?BBmr;Q+V-zQ9l|Qr?s}=dfJ=k2VNF4@~zK-a8_tQSd#(S zUXGV$WLD(MFGFE8{Btkw(Ct2V> zEvmLD5`AZHsq`chXIYD{lx$wzz?qaO2F`x{ggG1KkSNe#)c83N3F1 zN(=TgyrZwlCszTd-+-JIyteUz`S>4XzD}ejnk?1k2y<&@{-!6( z_eMYgHK;U;;27*l^_CoQ7oJ&RzfQccfB!ZQ zkNgcDVdwtp>7>hk1;=JP+6e{jouOn(89Wi7FJ5YDG9OpHOX=uO0Ie|`0JaUbIs*pp zL08;${7uN6vRu?#oQV|Kr074Ij$@rlb^-d2rjy56j+@7MneYA#qsK1AFi(cA7!_TP zJEnd~6S}Ez4$`r36~Q)ZENK=lx@PWpX5PRl#D}q&=!}P%=Yv2RTjICvv~D;Y8=P*7~gilR&hQXN&$oEWZ9=Yj@iRCK~!Wtn>rU zkZCNWHfdsW1;`W46Fm!9EQJqzBJytHM50I9L4D$0;zWA6pkT4f#K-8tojPKwwyUC- z<8M>s^nU@4AI%b)H4fl?Z{e8?32$NO_}U~WD7AKKr#SeQPBYZ} z+C$TCI*8-W_=vfy=-9$Z(l()*hxR!a9u{*Mg0w#sQ6^Xplm=K=%6Ncn>ufqyZbUw9 zFd)?Wi)GnSl#-ZC1-w5408m4zZu_2k24g*Z>F; z{A$h_p$fDT&LGoOz3ZSBUh|s43hksp3G8nlcB@$lw-lVUDL6MfgP6_t`!g(zDM#Mn zky*gf*?<)v{-qLI!Be)Y8*g_su2)yj=RUe*B}oraXxKdj@;b$REY6pK6y6P-i=?>E z{ihr@bf0-Rl8ftWeStrpZ}SVYTwGxv*t_(hvk|%+>1hqrH|X98R>Ya*G3-wdcibki z3QfNn;jUJc*=12_X95Ftc0C{6U331N-L$H@c~lHzKi@R-x(VetA2&d$0m%ia=pH}p zbq_CIItRuaR(V14jU{%`gtSBS%ZT8%JqTsfV3=#`!D4zu6JdJrEDg+AC5_Kob(hCQ zH7Zhf!J*bYU==YwcvvFK)F@C2)x7?rmdC#|X(ci&ae1NGQ#Ft=ZYBP!b>2?2kTHIp zmOPFINBL6AlFebL1ZYfD*Ep*UR#MD?G{$*MR~`~jHTV*fMwVyPtWfIgJ?nYjh;S`i|v&bpP)s^(lUJy5nhs@9Ot8qF8 zNl+@hSa4+;vdZqpB*@jH$}#>5Cr{?hiYCuyPv%goN>I>K8YT3fev=S1C7BV2>>bKS zTI?bBNyH_3BJD^5RqY;Gw3hS|98VLQ1qNe>4lI^5WFj@9 z$?C>FW3@{D*#U(@6WC7$=nEa&geaib_P0TBXQE(RxTsmUx(tTYG4@9bJL&K{!7mDn z0S7RdlpliVCP8CnBFVU_NyGFAQdn}`PfUz?NChm1B#VY7AoLArOWnMj0)$g)pE9LS z;#^%fK?v>}v4G|i0OI_xf-H?_iL`|QN0KMPBE_|9eRL4z7l9Z0aip6GznOR=d!(Ou z%R=d?q*GEEEq_jHEJ=NgMs@g4ot-IiTjh+z?Zg|SN?U8Is37ueIDiEIZ%pTTav|hd z4IU6c6BDH9Iw{22V&KFG2y()V0HDtRKTCr=eoR1>TZ;5fTT=}K*ia=2n>}>9k3c3y zg9XLwwiDR{PDP!ZNoFAo&H2WJY0{0LV+}kkMPX6Mxt~z%T@HVu49TI#P97wih&J0S zbo=#IEp&0|x;88!Wbg5i*}L?I%*7$8WTlGxmuS@)LaL%r&tGonRh?2$OT3$6Q01TwW=H|-91qT zP!aG*@(D#M(-34t6s9!ltWk5v7)|HMa;YmgC#WZLNsZi0M!HS~J}Y1>b{DfS^R0vr zh*$@ki#6MUiRo9*F z)-8If8!BmjkUvkFpoe{l4bxAipxBJ-7Ct$nDs+Kn*dOO>VL7t2Su-Glb@Uz4qksUKa&2pft4s%e9(sQI*@F-6QCrU66v&K6i z7TYD|lOGF)llhsl->x2O2LX;wksSB0t&07I)pcP#BvQ82Q_FH3oBnolU^TC>pgl}r zttzyG6nk$+31BKDIs9o#v>GWg4ob{XtlcV321jzJVpj4UYp=#6=gckyg@hYqJg#9G zf5LATEDU~L;od+|!Jc_6-eIZpr@&6mBx%A42eHTY&#}F0(g6qgoHEF}$e#h0=eT2i zA$DO%(4Rp}#XByqF^lazl*BMhvf;vJ8J0cc~6;~6GR zRZQP8-M^g=k{$Vi{dljXue)k$d{)q2`Z&-slDV&iw4oW1>(?mim4l(v#)aI~iKFJYE0z8iu>2-h1 zGyH`25+v~c!KNy3JY(@C)fv${ii!1F?Ph9z6nR2klo1b(iEtT=$w38F15p)MV?c3K z9#INozH$hotW7=zv7`w(vEDyBITB`*EQq+I`2XzWOtKb*OBS z@Xs?EbMCV#6Syn+xH|`xkS0l!st)NZ0aH{n@uG7qvpL5SMv14|#)e!^sta+Xi&GW_ zPRruhzwL&c<|@x{97wX7BG|_Vk1nD`2_3kJ0`hec#H>bw-U|gsBgqWeS8Z&<3+(QQ z9gG9X_u9;Lf5&i=;Wj65jt@RvRH+iWaFaz@3gA`|BD<$R7>P2Yit?1i^mDuDv{ETW zfJ~aG9FHRG)bVcFu6$^g72r3B+1*C-`nSj4tF{0B%ormE@+Z0?NA{eR`Vesvo6{`4 z|F#B_Cwm&TvsN2DnzyAqYw90FoQ=FawdC&;aHA$=1+^zjpAg~byg7$9nL3|$u~n&hUQUcd?zkk z&XZ<1L03cS9inMVVd@ps&B1Bgc}q`*faVBup`nWvo)|0ABi7X(uibM*sgIEqS_@0B zV{~ayravukQm&37uO6fwJgo%7uKj_|!<_J>Q50sRNssuWc_aSZoh;2iE;`~By^uv3 zPoXy@UO1UJO2&)kUZ4;ogooH`+ebJTbGZ6O0hOL24O**5FOE^JLKtX`G@AU=LKy1p z^kBu!b~Uo2ZAL!NwAab`a=Qh5)V_V7VUq3GO+5H-?b8l*+1_LII-W#dnh=kIElZj7 z#p#x%s9m1g8r(rbE63Bg=fd06c2_CrozTunm(i^ofrkLSa41d0nw(+FgTrM>ygiPE zGvY+mZxXNk$jxW_s;NhJK96!#6SEy-!|l7_mo(jcVj8+r(tfZ*OtS?n+rIRyzsy^4 zXbEqs#;%G=&gbiee{S82%1|6xlQOdZqHMyYmQfb!RQ)|DEIxs2tIHpgkWr#IuqJ2W zDx+w(vNip=ZZcTb$@T; zrMylr4lu2&S08#k9QG0#2Kt^3?(Y)HMs%`TgJfF5E>2!LNmcDqE(DNJfHe z9C{O&1_w%wR~YldYnvj0Q#Rrhf)v+5(9BrO3@90lwcnWnM6yZP?0a;2de*yw-H^$w zX>Y=I5GRj-w#fjVo5lPyZ{AWoP_ouNV_kXeL-F-if77H5-z9qa))`MHG*wuuEszmB zv#z@kUnHboMmNhC+P1>fA0JD|lQ79KE)7g2<|>>1396wyD5*r@l0%|2{6SIvpqj$} z{1Paej4z?g-Q7ptbw4S=)87!ImoA&2Tzx@;kVz~&m>=m4z6g*LH!n-1Tn{^>y8 zru*F17f`6xOytfMRpF#@W8@Onx&HvK<=WcXz_+Wy zxB~bq;&2=cOh?Z0k!K-!dZH$ZQeN5BseKXBusrQt)e_(?w&L1QZKHK(os*@s8Zva9 z;sxcLgn@OqDx|c4PmCXl0w0;vQt4MeNwO2$US|GS|5mF_-CcZT!!O#IO0^+5Sc9mT zo^W^R#+|aNulf20(xX{=_+M18G>@1A`e@26;Y`xfx*7)9S*cYw` zBRPBGNR%?ZUPA!S3mKfj>8fQM0!; zaqxLxYPK(UdAx2876-s%yHz@>PtJafq40Qb`VVC0~cj_?SDM zbFvRN-*0Nrz8}{^;e9svyj@i_1Vf z8!bEfnUgy3wL5sfpKiyxuuPzo6m+Q$H+Z3NrA}|o%Qmrf$fcO=G)fgihZhgWaMvTO zwNKP!psT0Gbe4+=XkV$Esg&3zKRtXL-L42#&wV!+S*kI$#y9U5Ix5CW=3?LFa%QG0 zJ};+M+qSm5V0(Poxmw;UkPL211~S3z&KXBIudhu72F#C@K! z^_9PWZ#JN(c8CqGydIoAJ)NO@ynH;JojpAam@T4Q!A&skfe)8-)X+;Nsm#gC%581C zR6*NNxXJaj>Y6=`=xM`KKik>Ha6RuZ>+K?{sw7_{e3w@|ea24KndJ<4!gG%-aM`-d zA?R2#OO`Ic%j>8(f49T9xhO0rb4$+?pBQcV@HQfZxSF3p-5KCG+K zF|S5$<3H9aYL&Fc{LFLo$BW09)CY@Z&KDz6N6FiAHPw@-FMbtC3n zp7z#S;heahpyHeTzI(&>Pk?8;%03_1of3PdYvPM>${AA6rWQ5fnh_9=O5~+SkLdfk z--a$Q!m(|<Jymv*o!Mkr+NAqk z{&gXSEN1UwK6Dy}v=6o{v|}x2EsN1kX}zzxx>@m>?Q__6AN_rMJMcbGb)B+X@H32z z!s?Yj)Z&-Ar)M!xjsj{I^e8s%f^H0OayT@L$e?rSVp3j778QYH+*;22EJa`{mf}l9 zGtSi?C_*Be%{3cBgIB&hN~XS-*ou}yMRI6r`ysT9)u1+|dj&Er$>2-wBg|J6BD``W ztLdi9U72gq5_On1m~WLUF|1?DMBC2&8-W7xkne$ZUG{W7cYIr+=!3KQZfuH~OTQxP z?wH)3E&sldRBUurDZ>b-j`yG-M^lbXGh42AI7BUNXO=VJDGZ5Th6K^v%aBbb$;ju( zt&qZe^aQb0%eCOe!(Sr_nGndoKp&Kc^zouM9m+ue2j5a~8+E}JKhW?&T|5ivT zmwN$%6iz4Dl_(xF`M^+G3P=4O(JqB6u=$Cs7}vs?Ja^UqiJZiOf*&F<$^(7x-sm}J z)zKGq*={RZ3I(4|aG)o#&i!YcofCJYz${4lWJN$c^~)l8Or0&tBi{&?1}TCDjE9nJ(z}MX(^zFF^*eGEyGYh}2;ynQa=BZbAT_^8l~mlk{a^)pW1; z3;A`5#=i((lYlGux*hmE&#~a&KLOypQo2$%>EL=a=i(g@-~)o5daVk1XkAodA}Seq z(u*?a&8uNKwx)MbS3@FK4zveP=K+bS9c{cn%+g+XOs72gX5dCYW_vhQ!eDloiGWip zFv$#)PdWPMUG#|#ZlR=j-CX5ns`Z+%-&AlS`mAsw+Kd-p*{3NN2#L=oLqG1OXHLpL zQ!^_zI|}s9yFT}Pd>(4b^r|=Q_;Rw{e9{S}1G=5?H(udgeW95hkH0=Cu4A8}R~oM# zZA~J?$|9*(V`W|DV7cS_gkPM1kY86&ABh2sF%U_RqDIA7=Y_vn4@o`zM#XrTXBUJ* z-~@;SLcOGM3}=-f{Xz)h`Gt556UYp!^Tzx^-oWG%IUs@;JurLy;-x$H z{>J28-_ey$%DYuH&&;M!{LL!Qw-W0WHffPs2UtOs*LUW3D=Jd**$9qmr($Z{ zTPCUB>k0@7)64-ztDf@ogz%NjV=8!nF9|0YWdNdO-H%}@?<*@5 z{*!$TKxa`#9t``CT83J=2V{JYjALN}S&I`3 zsNa~QGXx7W9w(^>%^KLY2SGbZqM4jx*qTZt*wtMk^{ad6eWor6afksE zpxO%u+5@E#>P+ZYij}Je=w+rh8GH7aUbKE0tf5$b z{d!bA{A+;R+MfsboPG#^HoRFPog5(&$k;U9_ndCbTN}qv=klx0mhG!Z3PG8#VJW>b zY$2Igy@6Wq0*F4hzv>1mzj9G}K8VvKw`#LcS^$_a_Ei1kBlLipD^H6#qNYWxM zkvzZyIX<^7#&?D3g%pAevIe1o*`r32>?v{Iky3;$_9#rovmDe-93)3Tt?u_MQyd@O zD6(xBhB>ldF-*iDA!BEc?=Y7k5<00If(%kd!Z4%XDT1w?U{aXd)bG_o=_am0Gis0>6R2t&fGmqC>@xEf`IJFJk}TrM2O^W zAw=>MkP^saAxHmHBG^$jLqEWW_=5pr1*l_6E7A?<%Ug!-5y+ZC36i4phCA^TPjiGV zp#JhqqWNnIWq9Pl3L2cq)4(wH7nt^N3@=g5rlFnazA}n!t7byp7nmOH8(f?GN= zva?}~Zf|;xnvm5`>UaByGslH}JJI>%UltuIkzcxgw?g>EbY=%Sq8j0N2WlUfH6L*|93qJcypGJwQ1XW}uJ^r1b>dFb0fq_f2{a?_U zu~MlLs+t?rMiK2aXb%cnYnSNGT2?&=YS5N3b;)C@n)@G=VH&LlM3O8>t?QVM36I8<_YN0|KBT_Xq^(M>-&Zi2blW1aKtsp~OLQ zG9*&@2s6k&Woz^kd>-k>Rb?R}Lx*seH{qpwR86qD1w^-KW-9v$AtihGxRqpO%3(@;ExDLL+idP zq{pz=6q~q+q@=;S6H5JvFnJxP3OiBYf`M?cQ}XiPyKy4%$>2^D5>^k<81>9b_WXcl z1L2~?WVNLql*nYL7h?ngIu&b3G(sKaTmgt|xl$E2_jyDp1Og&~VeNnbh&UudU*_31 zLI4UhVizGA5x=Bg7&95xKPAN0Kl8(zj2a~1pAoNROe@q4Nskx5lxIT9nnb}@)==*N z!O!RvO;$UC!-IUu<-|92MY-5-prn{{|GcZ~xzG9LCmLubxQTKmg22S=JqI#2zavuC zO&16$H^-tp_?|{`ma}W8mTut{xXlC5HQ~3oOHfl)14(-ILkAjXoq-^)PzomIVb=j5 z{|QbpPQ~Omk1DD_cpSR4wUEguqE;m*kCWSX4n%Ho$Ec>O5rniy=+esbw5|PP@twmR z1VRRhg5-na#W14fhxTn&suesSBPaom=XHnP!?@micM*wx_4>T>y^t9Dy{$Jb?zrk| z^98YMdf8x?bR?lt=E4@GXrWRzJqs!3DKzRy_G4ysZlqpLE0#`x^u;>0k(211D@B>a4$){wKLdYJtx--HGhfWkY%D;rDHi#4Z<$%ezHvrpxV+gBnE)@ zI7@|$Zo~MQWUU~GHHG@>35>dli>tl3Xo+KyWu{treLGQE>#g81pq?%V_w9C>izz36 ze1#r&1V7+;HaN-%nd)Uu56nWtSN6F^&5j@G7uK}(`;IS;!L!WbV7c1!dPyMq18614 zCjy95jTEbmQqqDHo=i>Ki`@B&<~Efn?u@rlA5V5$T|nzN{dAWaIqs<^ zAW?IoruO-j0asQc8&?M?QUAq~erV<<5QTwjBpWIsV&Tea)fU1JMzQ}w6$_c?UjWSx zY8|u#Tq82`BfEUaM1(*n5JDr8tDaFWaw1%Mch*&8le%ok=3Y}KeBC zOVtz#L*=sP+XYhpAi1-XvCIAlPfK>IwWDqN*rw-Mulz&ny9jSa?}e?i*5gPI_T$rA z;>u(TBl3Hzy1K|PJ|4J}Rv@M`;Ai!av{enoxmLZQ6yi@^zW(6~kV)`P1fb^Mq7drY zlsFoFr$7)VcY8WNg68)ccfS|w=^+H6o|((;9Iyw$X__x2SXpT{M~NjN zAR-vk4;4a+Ly8MxTkK&1p+J-H5TZ`-OY$SJkY@h3>?~WMo#nwG!2~fUF)*Q*=z<9( zDZ_=5U{9w=NK&bUb0Yp-bYgNxO9y(CoX!!uw#|NZERC2&_t;gK+RN(UjA_Ags0aps z6LHZ?Mp5&4m@IOmj_ug_tB(q1*Lv`G6v&r-pSYKa=)(O>rR&ObLNZDN+QX=lp<&M(QEqqsGPRZyNQ5l zvH_Qs+NpuJlT2O@_BtKEn{1;RE`x9JRZJ|pyGr*AdKmUS9e!e_387g@y_NTT{R6XHKGP4+U~P5+KEH2_S*)*=o(DIdaFCT z?w|$YH*LOvV?`)pt&Q;;pT*6?V#BuBf++AO^x}DS5zn~8~Oq;Mb z4Eh_$xI4iGXS@L_NIiVx@^)#gi8>-j10v3IP%ou79_iroV5?4;sH4}HFDB(hf6H_~ zb!N_6W+>lRu!>eS6T_)peO4&W;)Vj$4a{2>U>Z~~q)O|5QG4T8*h%$3pE>&aNvR?# z#6uT9KF6(qlR>L;@CSc@v zYgxc1>fdw}9!L#Hx>s)_V1!85<+WQ==rj`9+r>KpHy$}|J{qFe$HO;xEC zJUxaYe=FGEv+8BH=#Yxl2LH9Z|3%v@;_bv%K?i1!_kyOS2I=;K5 zHo*s}qLYjZ5`G_iAbHxUJ8|`P;daJqh(-M41kT!VyCS5I0PMgmOy>;)eZwqWx>t0_5TcW-nYVd(i0u@Q%fPyhxMNUH?e}#KEH< zRbPS)lS!2HVrbhV)P@)N1*cIDT@K?Q`XXSEL8)1<_xAsA$;5jUj6nvz zeU{X)<0B9vo&H>n^?1(xG%j#6W-wjO>N9T~r_$5?_~|(QQbFEefgNuBTsuoW%YY7g zilq|k*2?t#^240h;f_bMn29Q$wBrG}c0Z?wa+a>ej-9P7JRBqzod;wxqJNUUlo5hV z#;l26&(Gev)8E2$puf_*wq`5I?*1i?+`<*t>ec$r$OwhMYx^)bE)@R}&ja4vBvcdH z2v{66mslqug~i6hq_E$FHw-`2-_GD&;WQ_}WRS4wSi8`2Su`7Dg=gP;6yJ}Rg+qJ2 z`m@-Y%+yikPTj7S#?vK)EW>XJ2FSxx6KR@6Sx82vAEpZCd#_S8jTMgo&{Hlhxb8RC z*U6_PGZj%@5V!MFt6;+%F}-Lnl$AJ0n(b^>#i;}rGiyyib__Lx)J9933J-6aY8J&} z0>MbuZgoxJx|$m3Y7Q?RRiuHE?$zaaoC8gEud|cyQU3Tlis6KBoQsD>AFv0%de03hZ;2YTsCLf(k*UCqQ_-0FXgARf4Zy1;jn zb^kJ>0h~=D4)oM)dzwp0vId`a{c_1+BWP=$_nTG{s9(4yJ7km}KQ5RVdQ1(3*8KKD zm!CwzI7gbZ{XWnR(56Mfv+Sb_Aj|3K#Lry9&I1XU;#+cgh?MGO!2SW*{o0J)ytm@+u@2~Z<*WkPL4aCLU{C+30+1igU85qvU03--gd;=ve!By6j_ z4-}To$uZfys^+0XH_fZay`)jslZ(~es=0>&;w+E~)?*dhOUMtivuI!Vx7SxK->cKT zmb}^>mT)^TnTlK~drpjOamyAvcWbhgX}5dm684b|@JC!gz})t;Ce<&mdz1?Lez0{f z;)+d%u}Mo)+E+pZfrJE;G}S$@tD6nlx~T|NNkI#bh@(zg4&eL8lF`{pS)Z#H-p=L^ zwhg3zq)JVD^FA!8ezlTAFrT^|p4}uZlZFh{%|- z3|F8bkUgB1^E*(k4kWdW`dswDaR=E+ z{!LnD%=3Nch|~pvuw(N3CaGG^#Vw1e$3E#!c7Br|lfE368!|OkwN2&h{vEQr!QrMv_|C_VnHti8p+o$p|nu zNb^cSs$u9K9*fW~gRCW#j%5?~`ftQQbd% z#hsX$FnkYQd2BQpNh((>_Gg;@Hy0g6ep~qI<@TRVw<`<`z@3$%o;&^g_AvMLU;4Gi>emdZ*>qq6Vi zQ<$SBTZS%H$>u7fxHsCiT;S(-3Dh)!XqNlr`jQ+F|9+uz3acI(pclmPD2}DCGnoFE zYEiv%h}>ps6Y>iHi5lxK*R2%1guV1F%xrYKS@0bvHzIa)!20@HF!lJYjc*t&{d{lT zv)urTW$pN{eR~>)z~c{G=U%XwJyePk3!HdtQQsHW)TZXZ^3S;Ud8`% z-En-LAuxJ`D*WIhX`KJhb4v~)1eE@Z0TQ9>_jG|$$3R>k$no2A@2KoUo|AHwmMTEy zz!SyIrrKWoaj;!y3OQ@e6V{YZzY~PXvhE{v(Lc;gh=vsr@pTu*xxG-gc*>O!(tD=L zD7vyl6=A{9Q(u6NT^egK*Kf?5m^XrsS@nwws;BAQ z{lqag6@{~D7oJ8>AZM2^iCcZ?du1@_(uF} z-(SMtAF1XM(8f}RsVP_{Bw0q}jR8SJG?H+L@?BWAT{Lj;<8qaGufQ@I`krOX$yzHp zVM$F(>0fyo=>f5|GlPGRqV-u+z^rhZ*73tSEOG~mo&SA1Cg!^C=g-;>myEwX|8VPo5j80-qWUi$utol4%UTleY zfCP4qI#zW1A|(@6GEI+IItxajnW#qC(y}LCWf^@1_yDj)Z`^!tZE=Y*{a3|t!<<&i ztX({ErH2|R6NZlI6}wkYB2RZMqiQn3ZbG+om5C=1TzchuqF+z@zuX+F0uadDB8z0yHGDThmq89MTANxnh`<^v<1A#U&`+mNd zZ-#s_`gzhOnWeEmNAG#Z@eElD&wdm9=83C5H-t4kS}@HL`h{5&+YdNsCGB1+cX)&G z{{Fk6U3g1Np+=J}A6lnejq(cwpQumj@`X=#mttDvIGZ_=-;QdDwv48K;B4>7rT$>> z?9@adFYIT29KV{9GsfW*U0!1EJimL4RBzGI;;(qmdbd!Em(!z+28xC@9&&Bv21Pl* zq3V`IR-i>~cyDZ`WbH`R+{BfOX0s|-RicVVY&;HH5lg}p@Y6agI(h$_`cjfZx(uw7 zZ$+>0hlN~yj5N>Jms>Q%mzR+qB+432`)QXB2q>-syIza;`N|LKhPW|k?l0er%}{UB z$SP@6Wyn$+-j^evZ3&5nn!JRKNy`YoJ54GKqO|8L<%9xm+wV7343{Byl>0f@TT*1= zY^wDbb3g@*%VBn44Xx;vS0l%qiE`u}B}&35g)|)J+(_(B(RsCXbZOZ*=%mZE5NOWL zsLvPkU?U%2>&J{HMEFwF)F5tw z@&`c&iO<=Zi8TDjO%5K`5f0L>A`(r;1S3olo%vE2u5!w1>ONfM+2EHS%6(p}6krT- zrLxgHsy61aiQg-IfU%Gs@go#oBy>ouvEMk~v$-Qt9~_NsKgo&aaEY)?LgZk4a3&_~ zlJM0((BVT#3k;*uJM z+h!=cJKcspY_vf=LCZHaCLm2VY`!v~NK~R|KNKwp(j6T8Z2EPPyMhtF=|l869Jj(q za3wJv>CTVn*lQ&xszoeEnMeeea|Txb(7vB+X3HJN(=3$-cO*Q3pKtybeGC!es2*If zBW&6F--_P=88}DWewteIbp$TI*3-IX(1q}Jn|)NE%X0fXi`2(Gl@1(;u?qqRPU*{K zSJoCxTytfrDAz?9um$jjhC`5>TbJ$Z@xZs6#kU=I{eM^|{Y*5UT|r5~AuxyyoqrJ~?u|Ct4907(te<8n;LtK0Tbq1C;HFqoL1%xSWkKwxBDXo;xt#or zf4=93Ma?PepWyPN7ALq-gWyV3GDGh$r6aAMHyhf{fTNONgI~cq%mj}p!;ds$vvO^!-v&XSk}B z8};NzE9H<0&wPfluWn4f{;86km;D9%)(+Xnf+mvm$7N6GqGNu6_yNmnM55Q2gVc|k z-H0sb*&sy=Ti^E}B-WY*o)CA$826pP&{S8mgwyaw?a;IoGoowp5fm1?-YtiTj*|U& zcStyT_;~drxc$9(v1olUl;;h0IVS;e#+gV6L=9#lCQLB2s{4Wyq6r&?u?3bmN7NLWNF03Al*EhL+7mhXAg-b0kBT9R+PLA)wbZp4SG~h%xO2h<+I(4jZvPu1d!cJy|56P#{naKwL?M7NlK>&LNAf7)Q{d_i(@m;PH* zgG+NMwu~MM*E6kl1QLQy7uX;bA(BX{It#5)19hBUBrY7HlDL^+O4}g4cNBm8@c}>5 z)}vAqnV%uA{G-OTrt*;_-eH|G$4z5U zx$@_%@^&mvWfYH9vg+)PaKansLZlnbGJFs1uWBoH%Yz<;=HZ*-H|%o zVODB;4Y$p-)N`lfcS24ym}dKn5I9vW$~l{!yKgQum?g)h_0m+u)`_ui;3e@A>wIG4 z1H!kMV1M=lg0Cf9ABc6nv+f#jBU^I)f2>9B|BkHP~4y_97YBssVP?Fs=y8AB_ovKz8*O1iJNdyy^gZtR#02%{+s z^9xx;e{St7(q0A5QEoff55YUj7t%7;_@sBf#eQzwqLlF?GAxu`qSTqGQB>a4daT0 z02WK*-s0KC!Dg>8$k|ka-{fSHzLjMszdKDOaGo4{a>J|!(f|=4XxPi3q|fCf;_!m< z`o$x0*=eI44N&EgcsxDo0LOmW7L5VXiqGw7_`^w#QZrl2quYN`^FOMBuVz+!+ za(#*Na8{JPy30e4YHG8H4au%>QG#W7c zb7tg!m0WmFq8R2ce<>v?q8e3Fwf+!>jwKXto6R})GitE`BV=jb8=;e*m$V;EHuS@| z0twY|JYkZMY(2VeKc;9ggTrAPkdOkwM?zfW*CpKNk0*Y7cAsnE+6mW=FxxwW6Z zt4|X#$q+C*JmxbAN&2%x!x(%2$dW)OQ_H}8tVTY_RBXj2`S3wE(lUhpyET*F2u#*O za?b=(poVf+2;Tm|9q%2I z^oXk5Tl~x&HY*jRs5+}$3dp0fL!D1Sv&T=b|Ipf_AmInA-5}rV`JLGPE|`=f^^-vl zv#5_~;@22goVe?<54dcHrVlp6mVG(@1%!x`RK>4KG)nRW z!V{T<`!(7tzfG7CTu3v8fYn36Z8rGQbgnPtM!&_#+q`{$d5OdMuzC#z#0#5=b4={g z(N(r#EiMZD3`IDFlEQW4!;+fZ%0p2{%4WCvf^rT<+giY#_FjGXC?j@YKwJ3{mC19N z4H^|Fg1*74Yq>e_yg_U ze(2J{;u16B!=CkrVNyydQkIW7SMfhF`Nm5Mzjpjc=k3{$4X;OfXxsVeVnxAG#k0=n zr!yzJe%W}W69QVo)vaRJK2|6=nQ8GhjWr|I33O429$j>B^KKT0a`F{)`DoM7+qU9n z*q~3Kb3c9~I)G_vCR*ko!|1;c_r2x^kz4ZR`9%y1;$%y)=6fesug)QAjeQTW2b3I? zjgJVvO$KNM_py7Jnug^U{*>=Xbb5tR$Cuicw=ui#^J=3%E)ORx8|dQwQVe{q%4w4T z8xH_m7s~AySO3T`TqtUkAcjyw*4TAPZDf37oU0zcB0noA&}-9J8!ZPvSrp9J1ZJlv zd%@zDJZ+^W(RH=}>}?LQfKUh_m7`Z>v#so8S^^bl^)Mn^zvlE?TH*$#xcnCM1VbHc7nTGwz z7`u#&iUKbq4v$^h>MkqG=6U`ZMn@YXi1XTh2MI2{~w@xg1S6$NiICj58* z6`@?eKWzt{aRA!^wvOvjGNH>!SbB}=Qq0Q!9XSbdi%jkwm(3+oE!;{+Fyn-rIDM;A z>$FW+*g1W2U*pXIT_J1#UX587)-U1=31MP3Y1B<-Fu8uPNfGYZGgrl)5u4i7j&Nj^ zQ&>79LZ`P7s=3}86YupWWdAAnV{0k%c;26q@C`Z} zDKDd_2Lf;upa!f6qf~|dvDA60=kYzCiX}(yF1jA^mMQaSOiNyw~4T?CxNh_ z3Z6cSx+56KN6EenwaTcSQgu+ea++uJXQuN~fpF7%$H>vMAk8Z%i$q*aD`Ebfg#E7O zt+SiR$BCXJYG%Y&JelpZjBnPcRP(!ZqQ-Qs(;xWA*~Ld=_mVnvIW!Ji*W^w{*S#E& z`L66|GKVe(awDXFx#Gsmm@5uFNI1A<@myS~0gkkIw@0fi>`VYBMT|kx5xmCLVBCbN zqLGDbitf5>?L=tyt}L>`zF|ssz?Q%$X+YTN2-GJ|Cg@97P#()!unnnB!A$-(k_g+) zI?5^e%p~Z73bjB%KD2{PKTDk-HH;GFrz{I2MiOT}2#GPWKTt=yWXrHu?EAZg8kgGg zYKbg3AG3Vcj1Y#z;FX=v%#_aeC~nm&qUc91C)oCQ5HeUzlSNL2(fJ< zkOQ{k$m8(`4JF|6FHC~b#y@mECk#R$c+oeAg-m(c#GiDa$xl;O;(BY#WXbBf>-_CP z2YxcJm>8KP4y`Urwl%?zgy+I%LbI%4gf2D($7C1UQs%NxRmUw0M`tAcUlHjP$yYx~tH$ z6;VL?0$K6CR{Ti{5e{A~nOW!Q&cu~|;Fa_Xa0s&>A+<0Tez?;}5e05cW~b6}MC_8EAZbpI5+BD4*yZ(my=#E8a^y+!MWay}6OC(Z5+)Pk&Ztn(d+}TJ zl@CXL&?%pt{Y{^y=F94>gbex;3{|McF>;}_A&L#OehQ4KBjM>r zCn050%WB}TC4y7?uvhWE3U-M*npM}$0_}m{}agPI=L64vy1jPfg z(L8brRX?+&kQBl9={vc}*&=4m-mwKT?4mBf*_qKg*xo7!=V)EeVf31uEp?>DiRP&pr9>IbUtI)+ct_fqow zG`;y873FeJrui(}q>{=xJrc3i;9Z~HPq($bP4RzpH${|F?K5>eIvLcnDTqnu=OB0^ z?TLqpmf;QcszS%&inl_W4F5nZX}%M7z7dc9b{dHBHE6Cx^HW)Ucs*+AtBv-1+RZ(i zZ)9ki(kGA2Z24B$gTqzlCX5o6-GhCSUr)}DQvyn!?Rd_Xk5cf~x?Yoa3NUGu|8E0si zfLZvX1*U4lnV%F?=wCh!?85b)}ZBT}oO)IxRYRu!d6i`){a08a`m^3xfg-nYpG(Bw4OjOa&ek0APdzwBgTIf@SVdo3aXS@9 zDLOBa(gB?&iS{4rhPc&-y;plfJ?M1J?3f)GmHNn<0s63mR<$_<;C|$V|h`f2TX~z4(VP3IZ?{3A+bck zI45(4wNy*i$UE}_YF&!$;HiO@Ase6NfStCeLCqZyqk5n)^{>2lzP(oA6-B7A>BVnW zPG7|BKLM)yK6E#`!2(~d2zUbzr5AP26C2$%Z=bVGU!oLD-CzqIhyTP9cM`8q@;*;) zYCotLo&a%}lNWomVU>&qrZ{I!_`kM63uE#GD;RHsZqv{cbPdf~mtgbVW8B6K&cpMs zo}MV6?k47o_z$L8QX+~@s+uL7oQpa{#5BLHcm+hytsjy5s;2YkiOb122`ps)ybFzM zN9jO-J*(!g2J>d~{yK8f8{GoTqFC}%SPN92PGH%P_cpgsJA|js8|E=HHys=T3g%|o;c>@Ks z6GrYIq%qgF_5ot2)cYfc)Evwt1?Id3G`ukQ@H7Eg4uqQH(8mG+Zh#R&*jh$XjkCn42*m@ zOQtzndI7*!Y|Rf3k1?&mF_sUqe^-1UH~~;?^ILvCP$(%;{g$;{GfeSz&h{;jfWL6m zRsAs>0hPS%Icq?gzVPljOn&=Y!q&TR`W4w(bkt5-ErjQGe$GyKKG$5hQa#(A6%j>{ z)h9Zo+?r$5M+ER7EkZ(&QFN)k(Mb-|1qrHtey(>6!|)fdb_2SJg^?Ti2kb3mDdh{< zI-L2y^}C#s;)0WxW2k~%jp9x#YJ4g@yZks6lap%+t$S+XKiQI+*OVg7z*0 z4!tz|xjN*Q@4!4`p6zdXo`%1@W?`Zj5aY+4_0!RQQWgTJyZ$4xx0uExysuqQ zqgj1$MK;<~bJe(I22Aj5DHE79Af1$*{#}a-S&qO`XcpS)sqb9~#+et7va`r~V6ZeVyI&HY@$PA;p-(zt_ezxgZCVAX@p>k2={3=%};F>U$RtWY@G8i2;$ zlhS{-U`l0pPAxm!?Ijc8=kK&o*gMr>Qdy(LenzTcuqK1eWx+4Y?qOn^fVTRit4obS zE*t2pcDgn@899N%*U~u&jEs*l`147VU21b6QiW<$5T_4YbR`Ykq9XTJIa5U$I%{)oJn{IeildJufkjL0Rh4a)Sky4TTUe`qRb89tW8x%Qd z?OtguMH#J4A;Mi*T119{n^vXOQuIx;zcTK*Ii53l)EHORhp*FKVV9y{@WWQYq+n5# z(wc+Y`e=t!Pq+zNa6f-_bF8Ee8`Yn?&zd+9g|W`J7CwB}LnW?}s;+I0dc%uN3bH(l z?fc3*L?9!i$5X3nhzrjWx%URO^!l0M|9x`H#{6GSZdKjwflT6dw$4l{E=JCO|NKp1 zX8LOA1pHUByN!{ZwVW!Gn60s$iG{5hlavY2*4e_@ok5aG6zF6Ov^6obb^e>ziG+oX z1yZ*%ld7GXtpy}Ikc5MqEY9}EjDrac_pS&`OYLKunGcz+mh$`+*&OjR}TT?qo z<81%%`?s3EeQ~s~ceZncB(wjMtN~%4^Pe95pX~oF^l$bQ98G|Z5V3suw^(RMn3REL z7LXW8?q7r<9R@-YR9x)st${WWxsfpcpH=;B=-*ZS=UDu2R{rUcyrB({N#)<;AZ~4F z=0w8A$|U7%Xl-FEY-?r>Bw=O}{yP%Re>=(XAH(8I!obSH$s}TEFA20TGj}H8SF&OdV3>pFCf`+PUdK z*#28P$={NHE7l|VhX%n#0kZy;+TS_$-v<4E7C)PXg_+|Y8U61dQ>S`*F`u~{y}7pD z>^E64L^b3%{~&6@;Yu0H_|x+~NoNj`&8%vV2+^O8Df>O|zTl8%(AV2>onU6%TV`{H zxr)zK@(ht>l$57WcKcpm&eiz3|CuWpAbz!f+n+0G5q!Dt$U*h(d^;X6cyoSRczd~B ze<9v@y*l~RlH>Do@%lPG?fbg>db7I@&e`<#y4bq7xGWgh?0zlh<~(~Fc2Er6pOIUy zTL_&k-6=#R-t>N1=y|)|epxc$_qx5+xbIO4Jp$Z@YWO}r(Ln-}mJZAiQX8Wfvwa@9 zyg23p{|2WFY^Q8i?GG?r_Y7au*!8>~$7saZ)qpFAtIv_|d?yyRpRz5hZGYPx+i$*H z+B>c5@pr$@Z7=lryew3~ytLHx@N7yhfF#zLqB3m|sXjBJauFqs4tze-+AAkUsquN* zS#aGnAZ%wFN%nt*=C>I+GXIEjR`hwPWOGfIaN&y+J45IyEuyDywx;xSk3Rm!VZm|g zwoP>T?Df|1{;yuWag^#Dje*0w$)P+?CzJMPnBt@(So@xh4nU^fpoh0>7r}4lXu`F* z@qydlmNz36_dN!iRy6|No!uoh0&nbZuP3)%XU7Aco+r;f7CJmHFvYW*0qH(Gpr{jb z-}!Toz79~+9pmp~o&d}$$3c{;o(_j){PL~`+hu}x{IK^OIzs}Gh+~!|rs&D* z;AjKW+s;}~jfxVy=mB%=iUVf36BuV#g+w0hg)|ohS5Dn_T?2Cm!L_$OhLcTxkEe$j z)#?Qv<6FR#Ix6FjMXQRp8TNsPtxnR-ukE~+yCl<{CBsPB^}o6O8Jl0;8~dh8pz{1F zupnMj**Sc@n0yWmeR(!E-|x9O)41KrwwjScO>{(-Kqu($Y2SF|;=`5NWIoCGZHH1e zhpKww142EU6eM_aGJoF0p#ta~_t7^gvbWNq>Z)AZtGnh`3C?bTsgPxtAn+{9Z|!az z0FyHrVrz@e=HVATcbb|eEzM8-GadssYw-1x1#TzrXIhV3kGF@-jj^k`1Z|()Vzaki zJR_C#mK6^(U?x)1W7Um*Oh|AkAg!$Nr(&}WKH3tMNmwkOGP7?EmKB%ydzeBX)D#%6 zk=qvruYBb&`cNHGk@(Y**wKiPbP$Oq^L=P30tX0lX;>zrFm3k1 z>VoYL&Oqqwsc1mycR z04~k(yxS3RHhaOIEYH%_icQq&`!~p%>f(PszjeF4+o`d$341+wYdf*I-L-tmTZ|3ZF7m+>ffLiIEFy&zku+8?n84z9z4 zI@WDdc!7eop&OK`nD?ypq?jJE>|vJ?fSl2&6eOYx3-cE!JZ4Mbo6xeOnN`rKRjx4 zXyl*@zP;2iUf6eC8V=dXr`^3h;DCX|piU?M(a`&)(*-j7ItR#Sm52nZ6*>EeIRd=v z8?K?7f^U{g&*x3b8g_aZF^-QUeaj?y#{AS`@a@gLQ>fd_t>uUMBCF$g=+gS$n{6X3 zp2(0WsQZ9rx5b5%HI>g5Q?h5(N0W6e6{TH)%5}Djmt18edp=$CRKI*lM#@%BVU=llQL11IQJ94;I%Q=BMQX9Luf0Q%YauUPg)_pa zwsjz<%?N-KF^{i_@bhmdzARmC)Awa6KQp3gW&{HcK&p+7O?R*6*cevMaZ)~f!NqBp zgk)iQGGJ$!)$aSBZqcJ!V!fRW-i2TY+9u{^t3b}Y zcJBczh$Q-`&s#N~J^+i{)qQ}azOZKgGZ2Wite?ehpRmCYts0K5h*}&1jMJnI zu3BVkcnu^^5M8q%iMdSBpVHZ78#tkx>fL?$)4f!WtwzkVOZ1)&IZE`hech2H9!5-y zgNRyOfhqF^eF!;a;$<@%UAZBM{#ewxV3o&H~Ud%ciF4zF} z`y@?np;7mDTwdBOJYM`hR#1Ha(7HYdX#EY&-HM1qXk^Xhm`)GYgix(k7b&r_Op{Jf z+<%e11=qw9SxB|m$R?Ay@YiX-J2tD514^4;1ixuM=c39$NJLzz?2x-BIaY_>+hg!9 zpEFmUmUCMC&L&g7BTNXglu02up1KFIFihn#u42M(7US|E|Zla{RDXS;&+Rt#v1bn;CXP#eA=nR$Q zJ`>Pbzh0cAs7}?;Ib>Vqe)qfm_B)6-bOb45;TNi0(#RoE)DA^astwgpP(N$lC`Ki? zyUT$Q^sTY$H9t5kL~4Q+ESn4;43r-S{|20L7N#+MS@43Es``my)YSRet6K}PB*Qqe zINajpq^6~Y5oJBy7`(2hV51DKO>mU2>M4nRNKQ^1N3GF&DCv?J9ZfVaTTb5BR>inq z5)PT9k;D^_Pp zbI!NA+6bra)dVs}stA=GdEo_XDM1mNijglf(`ogEXqmthm_msJv^!Jp1Q6 z1|_v{T|eN6YA0bMT|;qwhoKkN2#C5i{rItxKDSZ?l;^MXhx#L$PG(d;8$m;rgRoXw z%w9(6iIzZh5QZg^tp!6fynsLJq}=<{i8Y|$AQ+2~UqS}pAs!M7=~3OZ+49N!l3SLy zK!ai*UyiW!;>}uzu_^*B36%uqkSESG=GKnWrO6US8y{9lc;q@4X zu*~GBQe!DOk~Uz$H&)fgV(z)tQmIOM*R%<&urW+CZE7SM+m46KVA&5TB8((}7#fY_ z4x7~oQJ|wSe-lN^!L;4Vd=~MSdhDlEEe=BCq%qV_5Jb&PV96pUyR_ov7wIc&RXet`nNl>h5P(hLq!W z)AX*nr20OSm1T=So&AsjSPY^v$!Z}g(;uQT`>lH9W^yZK4c#Llq1G6kUl-r{XEdvj z108gh5?8-m#b(LeXtr zGH67fWggW{9v#oEodCLL7%P9=)T|zEPSYAN!cknQotpUFU&12`?1nF9&7~3xEl((= zFZWl)M*garO#f9?T%DA5;Ga1UO>6uQt3p62cp0GNWW?A6dr={QDo2P7C`1%UX4Qxh zB05YItQIQEmn@R(PXBFeXvi=jU05k?NK=6l+jujrEV%iU5KJe5Ey3rxV4wr3IzW z!;6|m^kG9zP;Rc{KniKKpcdv{>$!TgNMa%Nv4QT7t$#vW*HldssHS!xcaW=37+z7t z@OAAgoOC`uZlY+QqGCM#S7CUq-~e=MReKX$#b(_JeN;V#r4`4^uP`c%;?j$kKbG6h z`A5rcYvro)Dskgd9h`3waN}yJ1Ju5T#!?{aeTsLR37Gd-E?m@9N0P>kw5vWUQt$<- zcwr>+)-z+JTWzhB7WYd>@jtKWgkn#&2Gbs}V4Mg7k!F=P%tEyq>7pL0ZFmtoC zp)XETD&u)|xPA?v5kRN0^ftM>CN8cy=6;@|?gl3u1evOX&UADJdp0$Ln_-SvXPnt7 zw@aUgyO+MT>&p)^mERO4>nBYm=UOUgIU{TV`%_=ZILtsSlpHo)l;+Tv`|@b9g92KN zkf1lls8E~!x*8F|xe>O!nNe^;Gij-{Jh*aA2%iIBVvK9h540TuZ5s%P$fe+*A# zT|6dHE6yJQVbg{a2wfxA_E6yycUn6;8pA$@>Y16h(-k)l%a;#RX-(XFR;`<-YSD(I zJnz`d#iS(ED4jgR9#1OuTBm&%0ACpi@RdJrEvJ@}0q)@3JrYJ9gljhFwk?Fw|Kw4M z1&30b(Z>Zflrj0``t%~3`NxmRl#7B$ZbAKl_p403PjCwg_B3tCcf4hR&lvEppK|D5 zKglW)eGUKkPM%j&VSuLg=$hfjk)mod6&4uJ=#V|(Pb6N}E|KX58=v@LeS9(&*R?LZ zLX{uh?KlT^c_k>#huc}*Dgfx60Noz}AsC$OOy(HVVJVC0;aYp`g1rr((-t*(O%xpg zT&Jyj%;P1N(ej#q&+}X43K2FLBW*5|IVWlgRMw+9W3DQ;fVumQIghvc;A;~P0)}hm zh`N&+dzwWsX2}W-_ruhV_LY%T)q}$%D0HtfQbr#yfrRV?Owvy|QKi5qFOtB%oY-Jd zy;<=l=*w5cs6QqQ=FYk4$3=kS*TqAr|KLz$B75y(CNn;mM46aIteL*`Ax=Wr-U!j8 zDumJw&>Lghfhlpn*w{lGnA%ThOHRny?~I~{xrSDDEM?QRo`dhVX9_*p;L|1U(_!(T zCrRjMn{#;Us<64^-T}H|KxB|4(Thwnbbx8R@slXQ7qX>n#o!ljMO3ewPi+X!T6uhq z5o0bdAIfI-7+akVEusB#RimRJF1G;svn)d-2x}726fG!vtOa4DcpzdVc_dNeTcJ3SP%FFb>~TTYHjyy6?I62U3eals@BVPFOGGd@iT&1H#%gmYQ2R8C ztyOWLf|f&9My8xEFyL@Wv}?fYiK#>D1gZ1n5vgW~O?-A2V8QeVMM5J^SJi3;GLx9O zdI@o7QBRJKBTCn7_P|{RtEIoE1YzBjV@cF`JbdO?TZxdOLjFD?X%=vZo)^-P(;kf2 zD#FTO6Aqr=MyeTffZhN-O#6?~@3S2EAA`3%fLd`~4y@1suZhj<+pJ8(1E`Waph|NF z#E_&sYI^c(l|dzCq!2oY%>b`E5jeaaM5~|?qpe{(AMtiNPW!yQV_`+jz_do{ga;v6 z!3y|yE58LM{mI2jQ~CAE5%{R?RsAOTd5-X5@MWV4I0dca%dUB_Ov%|H*IjH!nT|4~2zcNaUN-*e9+T_87j?7xwSgJv(IJ+$OOrG;!Y?xyz1)D>bQ_fVug^A1>NqaYQ zZy_f={5@`5u*~+7O5xf`yH#UeCt{<#`3+S%a!ZY28vJRi+rnzrx)To_y_iFeskPji zE20=M`x7;D>1x3 zAL_aDmCUUdM?skJeoJWW2H@O2Y~~4@c4;+(o;u@I&3bXzs5qElDdms60_R?r{7UbG zkz*$EGgy-mys5bIpi?$XN+r+{U)?To;{oT8iBVVe=!bVfuOACs9yq<}{i6A`M_mJkM|1zF#>4#Pp#-G6Xmp1D zyKU?@KyIS)Rr|Q}gfE!oE+jDrrp!7U2zoLb1l?K*3x&3HSm6ER0U|^ju}Xn9N=(t1pTrY< zkovXCtB1}{f@4Bp4}_qUn&KHL^-)rcIKS8FikVf3DQLwr)uPc0rbDfoG{a@@OyD~S zcYcRnp{E)$zqVknJt$oC3p=%}nl^zhYK#*gs&FY&3?4WHrLbobHDNfJ^7=dJ zT8g-_JLTTU=`>Uja6+HnepStfB6G?kGv>=qfaI<455k8N3d*4o3X)U%Dm3~>y`>@R zoAP~y)KYjhgt>+455|5%3DB6&*qHv&rFF|AVOk*}q2YtSWbTTOMB?(4cOzxyfu9se zx95zYbkUOYw2 zq)-&J4>>#+;7@VW7MB8^o_Jy~Xwix9Zh*TWD`=5*cg>4<*p{)}u>jJT%+Zjg#y1aJ z;o=+4=$4(V&339+S+fzKQBla8b6~B zuI!;6$jvMvsSZIlE`xQq`RPRAcCKieq(MN20x=| z6BT`YLM4^mP1gB(`bfE>GxgxsJ&=#A7jUEn+cnMLwp=kcXH1bwv@J6y0dh*Ze2zbe zXUBJ1C&HfYor2+r5s9ji)^sZbsL7^Oc1};|Ie$L+G|2kYm%14aLoHXb2|nK(E{klC zjp0T-2D~@2Gm z+6w3t8cc+$w=cxN(!XbpzsJ>01$S^`=NC=lD}95KHA)MlBNRr^N_cJFoI-$}bQ<%Z zzP9nT|Mfz08wmQkx0JQm*c7)jn`&VJ7`8)V4slK z#g_O(&^-O>UhH>WnbpB8i0Yws?!yadkjcuc&SrZ94~@keSz8&@lEN3xR>X)5MK~G@ zu|NeyX3e083?nou3xhxEK|;`H^dEAl7a)fKtQpNlE#`J>F0d*SCMbO56wPVf^dJv1 z&lpQmmU=Dt4!>m{GpNdR>llb&W3|c5cemFyy3a%Hv$`h>!;*coj*rj6Uu-cM5)NdE zGl1It`0>hCH#(qd2$8UP!Jw6GmSvQ{oE`-)HA#}n{$~6_v%JVME+nOH58RiYk|8(y z3*M#udCB_XeTFWlV%X_4Q;!SOLMf|UD;&NMTOxFxP$YDm2(WJ$tw7icm2&}sGEcY# z$eEAri&I)som1FS)hPqv(XQ z)J$Iu?MV35Ej%E5_>?2BpTllk)Z4@tF(rd#8f9Lk3t94+-?r7DA;x>`52^|2xh zNzj?5*;)e!h%Ok(Of_Qn8?@YV*BNgwT{bP6=DW$K<>B15?MWLHH?9i13VpDbI}c?s zn-cwwq+u)0-V8fk=Q+}Mx4Cp|#h!VrI3!%g}jiL`(8+}gANjnkRs#( zN;OxnFo0MXVeO6CllPm%>iXLQAe!+7L^Jv0Wif_|AMKka=L#C|a$<+)1PmPdv(D8) zC8s2SQ8n9bE&-6^c1@0yp67qi*r6sVxjSjmO=JI;`cy2$io@&8FotuE~95TPn zy^$7kI%F4O15AzUMRHKAW>0mCQf3A%fM~waeU8XvlWYgzpx9Ql8MWO$0*srrtf=#_ zE|JwD14$aS$nHWGm@3B?E%j#M07{^$1)u~l=Q+^ow8)7qzYhP-AV@8l=@CIR}WU?vF za9093;|8b%Zh%V2tP=Ve{STG!bNX)&@#{%MPU(ryVD)w-OU6+subKT(ETBeqV`De) zM_ls*JXELS7}(YoBaFrI2OFhm1CwK84VC`2l-Z`Pea*p+P4&q6$)@o2aZ8pv{_R?u z`~o18X+6Sfr;$mFOb3m}hurIVuxNpE!*+Hio=ZtfsLu(Ws2(2AyIX_K6{P3cEgB?b zNW%AV%IpkALIa`ap7?!1TY6UqVW99`>fP>kjW0F(%|J)x6ykXWFG|V_1vmK%Yts4@ zZBQ9Wg}lmvu{jNuTp<>Ws%J%CYD3KP1iBBHCjH{E_~F7|A*}n&YJwqam1ODlUn6OFIAb#&U)Iym|2gJY)EL7uwEpi zuQG00!+PVh%>VIeD*&HX4Y&CX2YRw8h5dE&=vT{Ddg}7rN_R+b${9^eyo9MRnPA`o zQ}%eHrBSR}#RxoLXxDE-pXV5NVl#4Jp`cyV+&LBEsvOQiWcyB188H3H*Tkx&HY=~I)POVu>*rRprri)n4^oRtXr(>brI zP_k3mfpmH{2wF-en61X(6f};mJ3nkcIHjE8n1%J5=RS#ZI=e;L&2Wk9rx;8oU=_4X z7~Nf>FWq$kQR~PPS5(SZZ1VPh7Lhe{&D#!qC8y(XGM(b}D%XAug6^;l(1a_KWGq0ZK2?M>YBobOXf{GJU~Pb|$Nn?!hoTx40p>lttiCWU z6a`I7#Al#2x6iUXiK6|q&rA@~kKai8ScgJ$dV;K#Iu)?iG)vzAHbZK*Zcw73QNl62 zZ;jlRoiw^)lvt^t#nNuAw`_eFkj)H{G3l`G2q_jVp-!_R_RLaeZ87cGhKG?>#w`Ud z*)*}z&@$rM(PuR7^!|KFA#Kxgdrr4#Ts0-{NmDb=%ph~UWhQEy14YJFLb;~i1xER% z6bMO&1qx}Sk3`sJhDONI|0idul(YBpCoJ_NZvzAhdwChG{cs!A4&`p;>$Bc6n?K;B zCsEm*C&WL%z4H z+B?mT+!a*d-)^xbqYN2`B%W-He0KcZ4-_Zs8 z2Zt?)2STBqUayx(E5FUqMnT`)z{&1?>K2g&$4PDMW-jG@bdM9(^}6aKt?lAe1OM^_ z`=ecC48fFa2Z4IPocUYAz{I+bZi_ZE|!C(0$nteFk- z5MFDIT|VWoHq)7Lz@h!jKIk}e4-#O2nsH~vkhB&4NLm0FZU%7S`SGe0LVxqQaRCOP z|8NNgB1!}3#BmwUb|ze=8Ms+zWXh3%Zfa*TQdkER#amm2oNmwv>mX=$%m^dIylpj! z2#^rd4e0zjD=YIC>dU8}(N}<}#7-9YgrS3uaTS8Rrm2I2OYHT+iHdxX@Ea$LY7rI* zqRC;D_tOX{O@;xzp3b6Ly&)^qBABoUeny|sT*yWjKK-1Q8YI> z^~a1ZUyYo{M2t9p0FynW-K&{wTUo*aW(4ZH`j14^!tvc`VrNSBlJ$fKV`SGE$(#EM zIb9BQ9vyH^_i0udZ)(LiKLG`U_c8sOM+=ts8LFckwv&{2|mA;t#s>1CnN zG^5(qFh#SdBHE3P@g=mlI^2XGvY+t=$eg1!f$Y)Q-?!yrv)hEKm8~WXs{8N4YysXe zk8Jq0I$kKD419!So)9&OBvL^|NG-n(6z6Z~X|rhZH}rJLd=dg{l*OUc3?+H$xsk&6 zHcK9_iLb*=T2ozsjOAN%T&2pVq#75*5Fy2HBI#Aze8+~Kw3poZQJVBi;v`dLurqvm zVDcOKsN__gD%l`F>tv2ITN%t={%aUQ1q?%+EfYW10AX2E*E~7I=}WA`qk3&mt79#K z<4n z4Q+j?k17$$SCcrHmpMc9yL~oUKvIpsg!XfFRX@06->eS3`FY{jmI%8kE>1cqGZtP_ ziljo83X12LI;+!OU-oqYSlCFJA22f|poEga5`b~ebn+|C+EC3v>WQeIbS9^pzgU`) z0|_3tvhi<^QcoC=CS?TJmk7YV@B#LP4X`itf7%x^V5;MfeHj3zIt&0)9YbW?WF