From 42309c663cb585adffd9555297da53d8229c63aa Mon Sep 17 00:00:00 2001 From: Andrea Scartabelli Date: Fri, 8 Nov 2024 11:59:13 +0100 Subject: [PATCH] web-wallet: Add allocation integration using w3sper Resolves #2902 --- .../src/__mocks__/TransactionBuilder.js | 72 ----- web-wallet/src/__mocks__/Transactions.js | 4 +- .../lib/stores/__tests__/walletStore.spec.js | 109 +++++-- web-wallet/src/lib/stores/stores.d.ts | 10 + web-wallet/src/lib/stores/walletStore.js | 100 ++++--- .../lib/vendor/w3sper.js/src/bookkeeper.js | 44 ++- .../src/lib/vendor/w3sper.js/src/mod.js | 1 + .../lib/vendor/w3sper.js/src/network/gas.js | 4 +- .../lib/vendor/w3sper.js/src/network/mod.js | 6 +- .../w3sper.js/src/protocol-driver/mod.js | 183 +++++++++++- .../lib/vendor/w3sper.js/src/transaction.js | 265 ++++++++++++++---- web-wallet/src/lib/vendor/wallet_core.wasm | Bin 0 -> 294942 bytes web-wallet/vite-setup.js | 9 - 13 files changed, 600 insertions(+), 207 deletions(-) delete mode 100644 web-wallet/src/__mocks__/TransactionBuilder.js create mode 100755 web-wallet/src/lib/vendor/wallet_core.wasm diff --git a/web-wallet/src/__mocks__/TransactionBuilder.js b/web-wallet/src/__mocks__/TransactionBuilder.js deleted file mode 100644 index dac66180af..0000000000 --- a/web-wallet/src/__mocks__/TransactionBuilder.js +++ /dev/null @@ -1,72 +0,0 @@ -import { Gas } from "$lib/vendor/w3sper.js/src/network/gas"; - -/** - * @typedef {Uint8Array | import("$lib/vendor/w3sper.js/src/profile").Profile["address"]} Identifier - */ - -class TransactionBuilderMock { - #amount = 0n; - #bookkeeper; - - /** @type {Identifier} */ - #from = new Uint8Array(); - - #gas; - - #obfuscated = false; - - /** @type {Identifier} */ - #to = new Uint8Array(); - - /** @param {import("$lib/vendor/w3sper.js/src/bookkeeper").Bookkeeper} bookkeeper */ - constructor(bookkeeper) { - this.#bookkeeper = bookkeeper; - this.#gas = new Gas(); - } - - /** @param {bigint} value */ - amount(value) { - this.#amount = value; - - return this; - } - - /** @param {Identifier} identifier */ - from(identifier) { - this.#from = identifier; - - return this; - } - - /** @param {Gas} value */ - gas(value) { - this.#gas = value; - - return this; - } - - obfuscated() { - this.#obfuscated = true; - - return this; - } - - /** @param {Identifier} identifier */ - to(identifier) { - this.#to = identifier; - - return this; - } - - toJSON() { - return { - amount: this.#amount, - from: this.#from.toString(), - gas: this.#gas, - obfuscated: this.#obfuscated, - to: this.#to, - }; - } -} - -export default TransactionBuilderMock; diff --git a/web-wallet/src/__mocks__/Transactions.js b/web-wallet/src/__mocks__/Transactions.js index 06e35cdf48..15d4756ad7 100644 --- a/web-wallet/src/__mocks__/Transactions.js +++ b/web-wallet/src/__mocks__/Transactions.js @@ -9,7 +9,8 @@ afterAll(() => { }); }); -const deferredRemove = Promise.withResolvers(); +/** @type {PromiseWithResolvers} */ +let deferredRemove; class FakeRuesScope { #id = ""; @@ -45,6 +46,7 @@ class FakeRuesScope { } removed() { + deferredRemove = Promise.withResolvers(); return deferredRemove.promise; } diff --git a/web-wallet/src/lib/stores/__tests__/walletStore.spec.js b/web-wallet/src/lib/stores/__tests__/walletStore.spec.js index 76f81b2d7d..11222bddae 100644 --- a/web-wallet/src/lib/stores/__tests__/walletStore.spec.js +++ b/web-wallet/src/lib/stores/__tests__/walletStore.spec.js @@ -14,7 +14,6 @@ import { Network, ProfileGenerator, } from "$lib/vendor/w3sper.js/src/mod"; -import * as b58 from "$lib/vendor/w3sper.js/src/b58"; import { generateMnemonic } from "bip39"; import walletCache from "$lib/wallet-cache"; @@ -255,12 +254,6 @@ describe("Wallet store", async () => { }); describe("Wallet store services", () => { - /** @type {string} */ - let fromAddress; - - /** @type {string} */ - let fromAccount; - const toPhoenix = "4ZH3oyfTuMHyWD1Rp4e7QKp5yK6wLrWvxHneufAiYBAjvereFvfjtDvTbBcZN5ZCsaoMo49s1LKPTwGpowik6QJG"; const toMoonlight = @@ -296,9 +289,6 @@ describe("Wallet store", async () => { expect(currentProfile).toBeDefined(); - fromAccount = /** @type {string} */ (currentProfile?.account.toString()); - fromAddress = /** @type {string} */ (currentProfile?.address.toString()); - treasuryUpdateSpy.mockClear(); balanceSpy.mockClear(); setCachedBalanceSpy.mockClear(); @@ -399,6 +389,48 @@ describe("Wallet store", async () => { await expect(walletStore.setCurrentProfile({})).rejects.toThrow(); }); + it("should expose a method to shield a given amount from the unshielded account", async () => { + setTimeoutSpy.mockRestore(); + clearTimeoutSpy.mockRestore(); + vi.useRealTimers(); + + const currentlyCachedBalance = await walletCache.getBalanceInfo( + defaultProfile.address.toString() + ); + const newNonce = currentlyCachedBalance.unshielded.nonce + 1n; + + executeSpy.mockResolvedValueOnce({ + hash: phoenixTxResult.hash, + nonce: newNonce, + }); + + const expectedTx = { + amount, + gas, + }; + + await walletStore.shield(amount, gas); + + expect(executeSpy.mock.calls[0][0].attributes).toStrictEqual(expectedTx); + expect(executeSpy.mock.calls[0][0].bookentry.profile).toStrictEqual( + defaultProfile + ); + expect(setPendingNotesSpy).not.toHaveBeenCalled(); + expect(setCachedBalanceSpy).toHaveBeenCalledTimes(1); + expect(setCachedBalanceSpy).toHaveBeenCalledWith( + defaultProfile.address.toString(), + { + ...currentlyCachedBalance, + unshielded: { + ...currentlyCachedBalance.unshielded, + nonce: newNonce, + }, + } + ); + + vi.useFakeTimers(); + }); + it("should expose a method to execute a phoenix transfer, if the receiver is a phoenix address", async () => { /** * For some reason calling `useRealTimers` makes @@ -411,17 +443,17 @@ describe("Wallet store", async () => { const expectedTx = { amount, - from: fromAddress, gas, obfuscated: true, - to: b58.decode(toPhoenix), + to: toPhoenix, }; const result = await walletStore.transfer(toPhoenix, amount, gas); expect(executeSpy).toHaveBeenCalledTimes(1); - - // our TransactionBuilder mock is loaded - expect(executeSpy.mock.calls[0][0].toJSON()).toStrictEqual(expectedTx); + expect(executeSpy.mock.calls[0][0].attributes).toStrictEqual(expectedTx); + expect(executeSpy.mock.calls[0][0].bookentry.profile).toStrictEqual( + defaultProfile + ); expect(setCachedBalanceSpy).not.toHaveBeenCalled(); expect(setPendingNotesSpy).toHaveBeenCalledTimes(1); expect(setPendingNotesSpy).toHaveBeenCalledWith( @@ -502,16 +534,16 @@ describe("Wallet store", async () => { const expectedTx = { amount, - from: fromAccount, gas, - obfuscated: false, - to: b58.decode(toMoonlight), + to: toMoonlight, }; await walletStore.transfer(toMoonlight, amount, gas); - // our TransactionBuilder mock is loaded - expect(executeSpy.mock.calls[0][0].toJSON()).toStrictEqual(expectedTx); + expect(executeSpy.mock.calls[0][0].attributes).toStrictEqual(expectedTx); + expect(executeSpy.mock.calls[0][0].bookentry.profile).toStrictEqual( + defaultProfile + ); expect(setPendingNotesSpy).not.toHaveBeenCalled(); expect(setCachedBalanceSpy).toHaveBeenCalledTimes(1); expect(setCachedBalanceSpy).toHaveBeenCalledWith( @@ -527,5 +559,42 @@ describe("Wallet store", async () => { vi.useFakeTimers(); }); + + it("should expose a method to unshield a given amount from the shielded account", async () => { + setTimeoutSpy.mockRestore(); + clearTimeoutSpy.mockRestore(); + vi.useRealTimers(); + + const expectedTx = { + amount, + gas, + }; + const result = await walletStore.unshield(amount, gas); + + expect(executeSpy).toHaveBeenCalledTimes(1); + expect(executeSpy.mock.calls[0][0].attributes).toStrictEqual(expectedTx); + expect(executeSpy.mock.calls[0][0].bookentry.profile).toStrictEqual( + defaultProfile + ); + expect(setCachedBalanceSpy).not.toHaveBeenCalled(); + expect(setPendingNotesSpy).toHaveBeenCalledTimes(1); + expect(setPendingNotesSpy).toHaveBeenCalledWith( + phoenixTxResult.nullifiers, + phoenixTxResult.hash + ); + expect(result).toBe(phoenixTxResult); + + // check that we made a sync before the transfer + expect(treasuryUpdateSpy).toHaveBeenCalledTimes(1); + + // but the balance is not updated yet + expect(balanceSpy).not.toHaveBeenCalled(); + + expect(treasuryUpdateSpy.mock.invocationCallOrder[0]).toBeLessThan( + executeSpy.mock.invocationCallOrder[0] + ); + + vi.useFakeTimers(); + }); }); }); diff --git a/web-wallet/src/lib/stores/stores.d.ts b/web-wallet/src/lib/stores/stores.d.ts index 549d104eb5..4bcf1b57eb 100644 --- a/web-wallet/src/lib/stores/stores.d.ts +++ b/web-wallet/src/lib/stores/stores.d.ts @@ -111,6 +111,11 @@ type WalletStoreServices = { profile: import("$lib/vendor/w3sper.js/src/mod").Profile ) => Promise; + shield: ( + amount: bigint, + gas: import("$lib/vendor/w3sper.js/src/mod").Gas + ) => Promise; + stake: ( amount: number, gas: import("$lib/vendor/w3sper.js/src/mod").Gas @@ -124,6 +129,11 @@ type WalletStoreServices = { gas: import("$lib/vendor/w3sper.js/src/mod").Gas ) => Promise; + unshield: ( + amount: bigint, + gas: import("$lib/vendor/w3sper.js/src/mod").Gas + ) => Promise; + unstake: (gas: import("$lib/vendor/w3sper.js/src/mod").Gas) => Promise; withdrawReward: ( diff --git a/web-wallet/src/lib/stores/walletStore.js b/web-wallet/src/lib/stores/walletStore.js index 181d622cd0..26e649294a 100644 --- a/web-wallet/src/lib/stores/walletStore.js +++ b/web-wallet/src/lib/stores/walletStore.js @@ -5,7 +5,6 @@ import { Bookmark, ProfileGenerator, } from "$lib/vendor/w3sper.js/src/mod"; -import * as b58 from "$lib/vendor/w3sper.js/src/b58"; import walletCache from "$lib/wallet-cache"; import WalletTreasury from "$lib/wallet-treasury"; @@ -55,8 +54,7 @@ const { set, subscribe, update } = walletStore; const treasury = new WalletTreasury(); const bookkeeper = new Bookkeeper(treasury); -const getCurrentAccount = () => get(walletStore).currentProfile?.account; -const getCurrentAddress = () => get(walletStore).currentProfile?.address; +const getCurrentProfile = () => get(walletStore).currentProfile; /** @type {(...args: any) => Promise} */ const asyncNoopFailure = () => Promise.reject(new Error("Not implemented")); @@ -79,6 +77,36 @@ const passThruWithEffects = (fn) => (a) => { return a; }; +/** @type {(txInfo: TransactionInfo) => Promise} */ +const updateCacheAfterTransaction = async (txInfo) => { + // we did a phoenix transaction + if ("nullifiers" in txInfo) { + /** + * For now we ignore the possible error while + * writing the pending notes info, as we'll + * change soon how they are handled (probably by w3sper directly). + */ + await walletCache + .setPendingNoteInfo(txInfo.nullifiers, txInfo.hash) + .catch(() => {}); + } else { + const address = String(getCurrentProfile()?.address); + const currentBalance = await walletCache.getBalanceInfo(address); + + /** + * We update the stored `nonce` so that if a transaction is made + * before the sync gives us an updated one, the transaction + * won't be rejected by reusing the old value. + */ + await walletCache.setBalanceInfo( + address, + setPathIn(currentBalance, "unshielded.nonce", txInfo.nonce) + ); + } + + return txInfo; +}; + /** @type {() => Promise} */ const updateBalance = async () => { const { currentProfile } = get(walletStore); @@ -279,51 +307,47 @@ async function sync(fromBlock) { return syncPromise; } +/** @type {WalletStoreServices["shield"]} */ +const shield = async (amount, gas) => + sync() + .then(networkStore.connect) + .then((network) => + network.execute( + bookkeeper.as(getCurrentProfile()).shield(amount).gas(gas) + ) + ) + .then(updateCacheAfterTransaction) + .then(passThruWithEffects(observeTxRemoval)); + /** @type {WalletStoreServices["transfer"]} */ const transfer = async (to, amount, gas) => sync() .then(networkStore.connect) .then((network) => { - const tx = bookkeeper.transfer(amount).to(b58.decode(to)).gas(gas); + const tx = bookkeeper + .as(getCurrentProfile()) + .transfer(amount) + .to(to) + .gas(gas); return network.execute( - ProfileGenerator.typeOf(to) === "address" - ? tx.from(getCurrentAddress()).obfuscated() - : tx.from(getCurrentAccount()) + // @ts-ignore we don't have access to the AddressTransfer type + ProfileGenerator.typeOf(to) === "address" ? tx.obfuscated() : tx ); }) - .then( - /** @type {(txInfo: TransactionInfo) => Promise} */ async ( - txInfo - ) => { - // we did a phoenix transaction - if ("nullifiers" in txInfo) { - /** - * For now we ignore the possible error while - * writing the pending notes info, as we'll - * change soon how they are handled (probably by w3sper directly). - */ - await walletCache - .setPendingNoteInfo(txInfo.nullifiers, txInfo.hash) - .catch(() => {}); - } else { - const address = String(getCurrentAddress()); - const currentBalance = await walletCache.getBalanceInfo(address); - - /** - * We update the stored `nonce` so that if a transaction is made - * before the sync gives us an updated one, the transaction - * won't be rejected by reusing the old value. - */ - await walletCache.setBalanceInfo( - address, - setPathIn(currentBalance, "unshielded.nonce", txInfo.nonce) - ); - } + .then(updateCacheAfterTransaction) + .then(passThruWithEffects(observeTxRemoval)); - return txInfo; - } +/** @type {WalletStoreServices["unshield"]} */ +const unshield = async (amount, gas) => + sync() + .then(networkStore.connect) + .then((network) => + network.execute( + bookkeeper.as(getCurrentProfile()).unshield(amount).gas(gas) + ) ) + .then(updateCacheAfterTransaction) .then(passThruWithEffects(observeTxRemoval)); /** @type {WalletStoreServices["unstake"]} */ @@ -342,10 +366,12 @@ export default { init, reset, setCurrentProfile, + shield, stake, subscribe, sync, transfer, + unshield, unstake, withdrawReward, }; diff --git a/web-wallet/src/lib/vendor/w3sper.js/src/bookkeeper.js b/web-wallet/src/lib/vendor/w3sper.js/src/bookkeeper.js index 8e1bb7cfaa..648a4c1a32 100644 --- a/web-wallet/src/lib/vendor/w3sper.js/src/bookkeeper.js +++ b/web-wallet/src/lib/vendor/w3sper.js/src/bookkeeper.js @@ -6,9 +6,38 @@ // Copyright (c) DUSK NETWORK. All rights reserved. import * as ProtocolDriver from "../src/protocol-driver/mod.js"; -import { ProfileGenerator } from "./profile.js"; +import { ProfileGenerator, Profile } from "./profile.js"; -import { TransactionBuilder } from "../src/transaction.js"; +import { + Transfer, + UnshieldTransfer, + ShieldTransfer, +} from "../src/transaction.js"; + +class BookEntry { + constructor(bookkeeper, profile) { + this.bookkeeper = bookkeeper; + this.profile = profile; + + Object.freeze(this); + } + + async balance(type) { + return this.bookkeeper.balance(this.profile[type]); + } + + transfer(amount) { + return new Transfer(this).amount(amount); + } + + unshield(amount) { + return new UnshieldTransfer(this).amount(amount); + } + + shield(amount) { + return new ShieldTransfer(this).amount(amount); + } +} export class Bookkeeper { #treasury; @@ -18,8 +47,7 @@ export class Bookkeeper { } async balance(identifier) { - const type = ProfileGenerator.typeOf(identifier.toString()); - + const type = ProfileGenerator.typeOf(String(identifier)); switch (type) { case "account": return await this.#treasury.account(identifier); @@ -46,7 +74,11 @@ export class Bookkeeper { return ProtocolDriver.pickNotes(identifier, notes, amount); } - transfer(amount) { - return new TransactionBuilder(this).amount(amount); + as(profile) { + if (!(profile instanceof Profile)) { + throw new TypeError(`${profile} is not a Profile instance`); + } + + return new BookEntry(this, profile); } } diff --git a/web-wallet/src/lib/vendor/w3sper.js/src/mod.js b/web-wallet/src/lib/vendor/w3sper.js/src/mod.js index 973cfe38fa..1697be4fce 100644 --- a/web-wallet/src/lib/vendor/w3sper.js/src/mod.js +++ b/web-wallet/src/lib/vendor/w3sper.js/src/mod.js @@ -8,3 +8,4 @@ export * from "./network/mod.js"; export * from "./profile.js"; export * from "./bookkeeper.js"; +export * from "./transaction.js"; diff --git a/web-wallet/src/lib/vendor/w3sper.js/src/network/gas.js b/web-wallet/src/lib/vendor/w3sper.js/src/network/gas.js index 04384a636f..6150915d3a 100644 --- a/web-wallet/src/lib/vendor/w3sper.js/src/network/gas.js +++ b/web-wallet/src/lib/vendor/w3sper.js/src/network/gas.js @@ -33,8 +33,8 @@ export class Gas { // Passing null/undefined/0 or negative values will set the default value for price and limit constructor({ limit, price } = {}) { - this.limit = max(limit, 0n) || Gas.DEFAULT_LIMIT; - this.price = max(price, 0n) || Gas.DEFAULT_PRICE; + this.limit = max(BigInt(limit || 0), 0n) || Gas.DEFAULT_LIMIT; + this.price = max(BigInt(price || 0), 0n) || Gas.DEFAULT_PRICE; this.total = this.limit * this.price; Object.freeze(this); diff --git a/web-wallet/src/lib/vendor/w3sper.js/src/network/mod.js b/web-wallet/src/lib/vendor/w3sper.js/src/network/mod.js index dc595187a2..38b15a892c 100644 --- a/web-wallet/src/lib/vendor/w3sper.js/src/network/mod.js +++ b/web-wallet/src/lib/vendor/w3sper.js/src/network/mod.js @@ -89,8 +89,10 @@ export class Network { ); } - async execute(builder) { - const tx = await builder.build(this); + async execute(tx) { + if (typeof tx?.build === "function") { + tx = await tx.build(this); + } // Attempt to preverify the transaction await this.transactions.preverify(tx.buffer); diff --git a/web-wallet/src/lib/vendor/w3sper.js/src/protocol-driver/mod.js b/web-wallet/src/lib/vendor/w3sper.js/src/protocol-driver/mod.js index e6e20c929e..6bd242209f 100644 --- a/web-wallet/src/lib/vendor/w3sper.js/src/protocol-driver/mod.js +++ b/web-wallet/src/lib/vendor/w3sper.js/src/protocol-driver/mod.js @@ -385,9 +385,9 @@ export const accountsIntoRaw = async (users) => return result; })(); -export const intoProved = async (tx, proof) => +export const intoProven = async (tx, proof) => protocolDriverModule.task(async function ( - { malloc, into_proved }, + { malloc, into_proven }, { memcpy } ) { let buffer = tx.valueOf(); @@ -406,7 +406,7 @@ export const intoProved = async (tx, proof) => let proved_ptr = await malloc(4); let hash_ptr = await malloc(64); - const code = await into_proved(tx_ptr, proof_ptr, proved_ptr, hash_ptr); + const code = await into_proven(tx_ptr, proof_ptr, proved_ptr, hash_ptr); if (code > 0) throw DriverError.from(code); proved_ptr = new DataView( @@ -437,6 +437,7 @@ export const phoenix = async (info) => const sender_index = +info.sender; const receiver = info.receiver.valueOf(); + ptr.receiver = await malloc(receiver.byteLength); await memcpy(ptr.receiver, receiver); @@ -606,3 +607,179 @@ export const moonlight = async (info) => hash = new TextDecoder().decode(await memcpy(null, hash, 64)); return [tx_buffer, hash]; })(); + +export const unshield = async (info) => + protocolDriverModule.task(async function ( + { malloc, phoenix_to_moonlight }, + { memcpy } + ) { + const ptr = Object.create(null); + + const seed = new Uint8Array(await info.profile.seed); + + ptr.seed = await malloc(64); + await memcpy(ptr.seed, seed, 64); + + ptr.rng = await malloc(32); + await memcpy(ptr.rng, new Uint8Array(rng())); + + const profile_index = +info.profile; + + const inputs = DataBuffer.from(info.inputs); + + ptr.inputs = await malloc(inputs.byteLength); + await memcpy(ptr.inputs, new Uint8Array(inputs)); + + const openings = DataBuffer.from(info.openings); + ptr.openings = await malloc(openings.byteLength); + await memcpy(ptr.openings, new Uint8Array(openings)); + + const nullifiers = DataBuffer.from(info.nullifiers); + ptr.nullifiers = await malloc(nullifiers.byteLength); + await memcpy(ptr.nullifiers, new Uint8Array(nullifiers)); + + const root = info.root; + ptr.root = await malloc(root.byteLength); + await memcpy(ptr.root, new Uint8Array(root)); + + const allocate_value = new Uint8Array(8); + new DataView(allocate_value.buffer).setBigUint64( + 0, + info.allocate_value, + true + ); + ptr.allocate_value = await malloc(8); + await memcpy(ptr.allocate_value, allocate_value); + + const gas_limit = new Uint8Array(8); + new DataView(gas_limit.buffer).setBigUint64(0, info.gas_limit, true); + ptr.gas_limit = await malloc(8); + await memcpy(ptr.gas_limit, gas_limit); + + const gas_price = new Uint8Array(8); + new DataView(gas_price.buffer).setBigUint64(0, info.gas_price, true); + ptr.gas_price = await malloc(8); + await memcpy(ptr.gas_price, gas_price); + + let tx = await malloc(4); + let proof = await malloc(4); + + // Copy the value to the WASM memory + const code = await phoenix_to_moonlight( + ptr.rng, + ptr.seed, + profile_index, + ptr.inputs, + ptr.openings, + ptr.nullifiers, + ptr.root, + ptr.allocate_value, + ptr.gas_limit, + ptr.gas_price, + info.chainId, + tx, + proof + ); + + if (code > 0) throw DriverError.from(code); + + let tx_ptr = new DataView((await memcpy(null, tx, 4)).buffer).getUint32( + 0, + true + ); + + let tx_len = new DataView((await memcpy(null, tx_ptr, 4)).buffer).getUint32( + 0, + true + ); + + const tx_buffer = await memcpy(null, tx_ptr, tx_len); + + let proof_ptr = new DataView( + (await memcpy(null, proof, 4)).buffer + ).getUint32(0, true); + + let proof_len = new DataView( + (await memcpy(null, proof_ptr, 4)).buffer + ).getUint32(0, true); + + const proof_buffer = await memcpy(null, proof_ptr + 4, proof_len); + + return [tx_buffer, proof_buffer]; + })(); + +export const shield = async (info) => + protocolDriverModule.task(async function ( + { malloc, moonlight_to_phoenix }, + { memcpy } + ) { + const ptr = Object.create(null); + + const seed = new Uint8Array(await info.profile.seed); + + ptr.seed = await malloc(64); + await memcpy(ptr.seed, seed, 64); + + const profile_index = +info.profile; + + ptr.rng = await malloc(32); + await memcpy(ptr.rng, new Uint8Array(rng())); + + const allocate_value = new Uint8Array(8); + new DataView(allocate_value.buffer).setBigUint64( + 0, + info.allocate_value, + true + ); + ptr.allocate_value = await malloc(8); + await memcpy(ptr.allocate_value, allocate_value); + + const gas_limit = new Uint8Array(8); + new DataView(gas_limit.buffer).setBigUint64(0, info.gas_limit, true); + ptr.gas_limit = await malloc(8); + await memcpy(ptr.gas_limit, gas_limit); + + const gas_price = new Uint8Array(8); + new DataView(gas_price.buffer).setBigUint64(0, info.gas_price, true); + ptr.gas_price = await malloc(8); + await memcpy(ptr.gas_price, gas_price); + + const nonce = new Uint8Array(8); + new DataView(nonce.buffer).setBigUint64(0, info.nonce, true); + ptr.nonce = await malloc(8); + await memcpy(ptr.nonce, nonce); + + let tx = await malloc(4); + let hash = await malloc(64); + + // Copy the value to the WASM memory + const code = await moonlight_to_phoenix( + ptr.rng, + ptr.seed, + profile_index, + ptr.allocate_value, + ptr.gas_limit, + ptr.gas_price, + ptr.nonce, + info.chainId, + tx, + hash + ); + + if (code > 0) throw DriverError.from(code); + + let tx_ptr = new DataView((await memcpy(null, tx, 4)).buffer).getUint32( + 0, + true + ); + + let tx_len = new DataView((await memcpy(null, tx_ptr, 4)).buffer).getUint32( + 0, + true + ); + + const tx_buffer = await memcpy(null, tx_ptr + 4, tx_len); + + hash = new TextDecoder().decode(await memcpy(null, hash, 64)); + return [tx_buffer, hash]; + })(); diff --git a/web-wallet/src/lib/vendor/w3sper.js/src/transaction.js b/web-wallet/src/lib/vendor/w3sper.js/src/transaction.js index b690bf34a5..ea8ab956bc 100644 --- a/web-wallet/src/lib/vendor/w3sper.js/src/transaction.js +++ b/web-wallet/src/lib/vendor/w3sper.js/src/transaction.js @@ -11,53 +11,155 @@ export const TRANSFER = import { AddressSyncer } from "./network/syncer/address.js"; import { Gas } from "./network/gas.js"; import * as ProtocolDriver from "./protocol-driver/mod.js"; -import { ProfileGenerator } from "./profile.js"; +import { ProfileGenerator, Profile } from "./profile.js"; +import * as base58 from "./b58.js"; -export class TransactionBuilder { - #bookkeeper; +const _attributes = Symbol("builder::attributes"); - #from; - #to; - #amount; - #obfuscated = false; - #gas; +class BasicTransfer { + [_attributes]; - constructor(bookkeeper) { - this.#bookkeeper = bookkeeper; + constructor(from) { + this[_attributes] = Object.create(null); - this.#gas = new Gas(); + const value = from instanceof Profile ? { profile: from } : from; + + Object.defineProperty(this, "bookentry", { + value, + }); + + this[_attributes].gas = new Gas(); + } + + get attributes() { + return { ...this[_attributes] }; } - from(identifier) { - this.#from = identifier; + amount(value) { + this[_attributes].amount = value; return this; } - to(identifier) { - this.#to = identifier; + gas(value) { + this[_attributes].gas = new Gas(value); return this; } +} - amount(value) { - this.#amount = value; +export class Transfer extends BasicTransfer { + constructor(from) { + super(from); + } + + to(value) { + let builder; + let identifier = String(value); + switch (ProfileGenerator.typeOf(identifier)) { + case "account": + builder = new AccountTransfer(this.bookentry); + break; + case "address": + builder = new AddressTransfer(this.bookentry); + break; + default: + throw new TypeError("Invalid identifier"); + } + this[_attributes].to = identifier; + builder[_attributes] = this.attributes; + + return builder; + } +} + +class AccountTransfer extends Transfer { + constructor(from) { + super(from); + } + + chain(value) { + this[_attributes].chain = value; return this; } - obfuscated() { - this.#obfuscated = true; + nonce(value) { + this[_attributes].nonce = value; return this; } - gas(value) { - this.#gas = new Gas(value); + async build(network) { + const sender = this.bookentry.profile; + const { attributes } = this; + const { to, amount: transfer_value, gas } = attributes; + + const receiver = base58.decode(to); + + // Obtain the chain id + let chainId; + if (!isNaN(+attributes.chain)) { + chainId = +attributes.chain; + } else if (network) { + ({ chainId } = await network.node.info); + } else { + throw new Error("Chain ID is required."); + } + + // Obtain the nonce + let nonce; + if ("nonce" in attributes) { + ({ nonce } = attributes); + } else if (typeof this.bookentry?.balance === "function") { + ({ nonce } = await this.bookentry.balance("account")); + } + + nonce += 1n; + + let [buffer, hash] = await ProtocolDriver.moonlight({ + sender, + receiver, + transfer_value, + deposit: 0n, + gas_limit: gas.limit, + gas_price: gas.price, + nonce, + chainId, + data: null, + }); + + return Object.freeze({ + buffer, + hash, + nonce, + }); + } +} + +class AddressTransfer extends Transfer { + constructor(from) { + super(from); + } + + obfuscated() { + this[_attributes].obfuscated = true; return this; } - async #addressBuild(network) { + async build(network) { + const { attributes } = this; + const { + to, + amount: transfer_value, + obfuscated: obfuscated_transaction, + gas, + } = attributes; + const sender = this.bookentry.profile; + const receiver = base58.decode(to); + + const { bookkeeper } = this.bookentry; + // Pick notes to spend from the treasury - const picked = await this.#bookkeeper.pick( - this.#from, - this.#amount + this.#gas.total + const picked = await bookkeeper.pick( + sender.address, + transfer_value + gas.total ); const syncer = new AddressSyncer(network); @@ -70,8 +172,6 @@ export class TransactionBuilder { // Fetch the root const root = await syncer.root; - const sender = this.#from; - const receiver = this.#to; const inputs = picked.values(); const nullifiers = [...picked.keys()]; @@ -85,11 +185,11 @@ export class TransactionBuilder { inputs, openings, root, - transfer_value: this.#amount, - obfuscated_transaction: this.#obfuscated, + transfer_value, + obfuscated_transaction, deposit: 0n, - gas_limit: this.#gas.limit, - gas_price: this.#gas.price, + gas_limit: gas.limit, + gas_price: gas.price, chainId, data: null, }); @@ -97,8 +197,8 @@ export class TransactionBuilder { // Attempt to prove the transaction const proof = await network.prove(circuits); - // Transform the unproven transaction into a proved transaction - const [buffer, hash] = await ProtocolDriver.intoProved(tx, proof); + // Transform the unproven transaction into a proven transaction + const [buffer, hash] = await ProtocolDriver.intoProven(tx, proof); return Object.freeze({ buffer, @@ -106,28 +206,92 @@ export class TransactionBuilder { nullifiers, }); } +} - async #accountBuild(network) { - const sender = this.#from; - const receiver = this.#to; +export class UnshieldTransfer extends BasicTransfer { + constructor(from) { + super(from); + } + + async build(network) { + const { attributes } = this; + const { amount: allocate_value, gas } = attributes; + const { profile, bookkeeper } = this.bookentry; + + // Pick notes to spend from the treasury + const picked = await bookkeeper.pick( + profile.address, + allocate_value + gas.total + ); + + const syncer = new AddressSyncer(network); + + // Fetch the openings from the network for the picked notes + const openings = (await syncer.openings(picked)).map((opening) => { + return new Uint8Array(opening.slice(0)); + }); + + // Fetch the root + const root = await syncer.root; + + const inputs = picked.values(); + const nullifiers = [...picked.keys()]; + + // Get the chain id from the network + const { chainId } = await network.node.info; + + // Create the unproven transaction + let [tx, circuits] = await ProtocolDriver.unshield({ + profile, + inputs, + openings, + nullifiers, + root, + allocate_value, + gas_limit: gas.limit, + gas_price: gas.price, + chainId, + }); + + // Attempt to prove the transaction + const proof = await network.prove(circuits); + + // Transform the unproven transaction into a proven transaction + const [buffer, hash] = await ProtocolDriver.intoProven(tx, proof); + + return Object.freeze({ + buffer, + hash, + nullifiers, + }); + } +} + +export class ShieldTransfer extends BasicTransfer { + constructor(from) { + super(from); + } + + async build(network) { + const { attributes } = this; + const { amount: allocate_value, gas } = attributes; + const { profile, bookkeeper } = this.bookentry; // Get the chain id from the network const { chainId } = await network.node.info; - // Get the nonce - let { nonce } = await this.#bookkeeper.balance(sender); + // Obtain the nonce + let { nonce } = await this.bookentry.balance("account"); + nonce += 1n; - let [buffer, hash] = await ProtocolDriver.moonlight({ - sender, - receiver, - transfer_value: this.#amount, - deposit: 0n, - gas_limit: this.#gas.limit, - gas_price: this.#gas.price, + let [buffer, hash] = await ProtocolDriver.shield({ + profile, + allocate_value, + gas_limit: gas.limit, + gas_price: gas.price, nonce, chainId, - data: null, }); return Object.freeze({ @@ -136,13 +300,4 @@ export class TransactionBuilder { nonce, }); } - - async build(network) { - switch (ProfileGenerator.typeOf(this.#from.toString())) { - case "account": - return this.#accountBuild(network); - case "address": - return this.#addressBuild(network); - } - } } diff --git a/web-wallet/src/lib/vendor/wallet_core.wasm b/web-wallet/src/lib/vendor/wallet_core.wasm new file mode 100755 index 0000000000000000000000000000000000000000..0d1fbd1c449c49c31f868be3a720f41693f29ee5 GIT binary patch literal 294942 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

tRhlAaqeLboxUal^QWd4M`WR zC(HfvU#kQ*UEhmXzsIJo<2==lE!ql_^W#y|NGcAy{0L*S2igF%9D_QtCteOxQ4?Ne-;8n4=sc zp>iY-bz*OeR>xcEt*X^n?VD5v-p6XPYDo#SR5hRk8rTc&_6jcI;$+AJhQ0YN2bdP3 zdPkHzyd%na*pBR~8l0Kcpa#emqfD(QN*L&g5{C6;i}2lQ6zYcqqrvlK%J$T^M+Kv! z{ANp`4#X=6F6ncCXtqprLj?HNy?U}EgVCd&>;!=13bG_ptlR%s zlJgzqx#p2lNm240o726rK$}{;djj(>S|^Hai03I=I9M1ka6*;p^1&ttr+qJc7+`eN zv6|nqIma}9%M?d^iLgWA9Z}f1n$|*QcFiFQ8gF36Ai*v93EJn}nRVWfu?u<5ooo(b z8=iCL#y5;V=Z(~$Tw<$B0$qY-v|@PjP%MkbKmL{b zKmPqMeC7*hUzd%tCDnez#>^b+F*C-megD+AKk?2jcYSEnbxc_!8>!k#M^%p^+H;S` z`#;?ArpcKveynw!Ftz4WFsGd0Q)6{3zs-33_HTUg_7A=9`=31My0o(~ZKfj>0&5jo z9WU;FLH4LW$*DO6z!$SyVpieESY&1l?+ar}h4zxDAfQ!kXkS5K6=hc(nH6GiJ8XX0U~EXUOIHl6`4y)ux$%EbG0*pN3~%_DCT zm-WaSssP!E1BYH5zOSk69)^@gChck{R@1FzY_|-4c_*ouhk>xAiR~KXlhy}*^Lxr! zTGb3zQ5>4Arb*b~n)1h*8Kd!vNY#HH!bHu}G( z-99}76vNpb0g44|j{uzy33)XkzYD+%2)7X)On58dA%s(edU5;~!b1sfB0P+6l5i2> zjf9H{?;t!JusFN)^or91ggX7er=oWx;XQ@ggq(TXib{r zU2{-h7WJbn15+(P4rk={j?(zr8f8nz(PKy7)_Y>QbUfOaJ?XaIGM>VX+0xs3%hRL9 z)!s4blPo-z9L0~*;NKecj?W+ZvunQ6>ODFC-LG!>Lc4cD{tw%)d2ifXk^kN9Prs$r z`?2U9VyUQ@-u`Z-k$te;iI z!1|e046L6~#lZUMRSc|GS23`Dn#Iy*qre#R=}D`2NsjQTtD;GTC$5TaRJdvt_i+%e zToqlfFk2P%3G-=(^{+aZih=dZsu)lalqus)-Tf%R!s46IMF zSo#uZEo^=nS}S}mv{raJv{ra3v{raBv{pC{tqJo!iWpj-?_eqh*5_3*us)`Wf%Pk^ z7+Aleih=d9RSc}xRWYzWw~B%FaTZITsL29smO*QU%b~Txwa{AO%b~TxqoB3Iv7=5b6z}sRATySuD zfl3~Zu4DMtWQX&JkU{47o0=nKOmvgD3E2wPP+5!26+$rhhy3oWQu79N1?PG^%h zsW9`{N>1^pJsD=lD7-Puvh~@q>9OfCXD;a-tEB70G|L;jRQ+2Ah1AU z$C4d6rfQdQrZSGJXY6(vrzzv8dImP8K&?>5$@L8ENM*cS8K>4V(#%@hfzgm2XOA;_ zJjx!~c4S!EW1lm_^i+GCw71kx;kD{@KGJ(8Tu#J z7;}!v`*=*TlbRkwPqjqhMvdc`^Yyp#lq82Eb-4KMP<1 z+>!)T@EGfYhi()+RHfiuSceBSXTg&&JLCjUvRcAZcho`Ku!X9=YniRYwarB*GVPmD zWsM@o^5z$!v=X#>E7N0CzjuuH8-^oXHxeXwX>%U2$cVD+?MGu;-paztE-aKB=2iBp zLXTlnWfyo=m0wTf)lx)3dW2KtOPrQI(y8FbNwq@S{4RXZUQ|p_w-R|yF$dj5f{!M2;;q@y$ezE0isZ zlI$ocQMIv$2A@_;NNh}G&nV`cokUJ4rWLk6va>W@s1EPCXD1g^?^YtG7PBk6HQCFH z33LmQ6=HtTmlG$l(@Hx7+?P#cCzRF%akkseENq5PfaHsd2?%pFds#8ZVB2Qr7Sjj@ zZMIGmLy$f`wMq5~ZU#-=^w`r>r}jSqGN%{D!yQD{7WTm{L{=9jz>P$nE=etLe&$5> ziqcX7$Kxil=a=>n@gpa)7kI13<}Imz&07jJZz)<2{4b=5MV87aA7=Ys9{Sn@JywTNyv-)aBN~{zdFNB zmf(q|ROo6t<}^)%N}B!1Td7gR&arZBJlPZ`nRI0Y9!>AGOJ?2-*{Tv=tAMvMoiAw1 z%AEQ3G~Gzq_g7o9;OI@#?8LG(t4Oq5zmcv?4^qzZGUuQIjxCS&f}?}CY`iSZYnKI_ zdCEDy%$Zlfu@%=WI7b-~P|0zynbk_3yiSsFTzV!6=xn7PU8EkHo}koYE%ix7>M`kQ zNFD_EoxmAvb_i7`se)kd?rh`PM6F#DwG2OM z==|i8&h3f=ygW9M{al&TEjVCH;aMEW(xE~%DiBXCL5vn4Mu!U3P%n2FNM(^HiCa!ZBIF7?#(8A?6XQlYp@ zJvn`vQct#2Xzx;=?nTMP7*5M$DHCKVEM&=Lt@g6yVlPz@X&;1%f=-xR)>xhxYWJ(?Qx-89waJ2yo&iId7~<9RR5m8C;; z)gx35CQQHg)wbvAL>usZCD3%S<)(mYQ2V6qNRL(UJgI>-y(<-*-g}*bvwK%5SlfHOf=he9rl248 z{)fWJu(wg+RM>li!fj#iYK7BbZRo3KlTnYgB4wtc z-e!B)7WHlj(-)`5fRd){3)35PF;)69Sx-Uws&unO&vjPf1?lw`T_=+)NMD^^XVIsn z*K*nxq|ZpNvGA0%Z{b<#CMBOvc6#;Z?Aq|Qyp0H=n$wHZ*KW>UYjdnidQtk?B6lrd z(l>0*t|`l(nm#GrusPdMEB~ByLs5P;&7~VRXZ^DL%hRLND>i3W)XKj!y`m`p^mJ4D zKQ?EZiuj6jX?pqQ?DAUaiS+U!_q6mfb>f5+KY<`UGrdGXBnw$XN!Gm$FKkj9a%`sc zZO-Sk1PZ55T5Xd;dh}|WMQn>h>DPv3b5i7Vxs02V?^kh~05+A`;&S?Ht7VX+uU{?u zCB163%$@Xgw$4qjtk$=6qjqj;n6ppKyfryJaQpOUb846~L($ZxYUa#Pzp$P&Lz%kg z%+N=$?ma*=^eNhYeTtck*;2o5y+rm0W+=wm?l3!Ap;n8RS~7d0EN(MrY;Mjjv&3gP z<1f3|3_Qx33Bx(AR?gWbzjih&h(liBac!vvxLeqoHN|nT7T;K2e*JAW87Dy$nhr7G z^q}?fmDb|Q^ipq?^wy-86pznN3rmXgvM8`BEzH4Q=Fhr+ z)t_;{)UBU6<+W8cr@qcQ!jv|%hy!S6PW4Xrc2w`=^aV1qe<3|n!P)6+6r7blU%?B~ z6BIl@y-2~C=_?dGIXz9m3F&$TD^gn;yxbY?N2RY;;_+^waIQ1sk4rC5;&Qiac!e|S zk4;~t#AR*~ah{pg9NAx}#3$-><@vo|vO|{MISNkh{i1?3y%#DtyZ7@7)@o_MF;4I2 z6kxk!;c@&E_0}oGa(|^l4EOWdaN-0H=YW^6C%};&4gQ{je$#C%H!!$+r$Uk2 zdgI#6m%9+A>+)cw_WZp=+e&R>E(>&@QyNvbyx6sJI#!A{$mJqsb3I~@Jxy>tNt5-- z``^fEKpN_3u#dS*|0bN_s~2=QMM%`(*06H<=1rdFQhYVj4w9#WEhT<_!_ z&Kku;h8v&7wt{XI^-kwn61xkjfn$C@J!>8>fojkYrIj723?SUatTtIY_})x z7EF~lD5pZ)I8W_JG0yJ~iX%&5O~wPY1kUW^{6V`yQma##wLCh9cW2e-Sf|F1vc7TS zY;i+<5IP(J8cz1+leMLjKuan;QB6`j<|tz=H-%B0@?;q4Wyqyef*>h@qpOIJP9*P{ zMFZNF;0<=bnyeGR(At{-M$8I-X%BPD<^_r%Un;0&KLQSTh`UZeLw9pCO{)irOJ?Lb zi4-;n^j0^WiPlJW;LE9CVaEI5Dr&EFT0leY(*f>{sYz`shz52gko+qpi8L0Amb?g> z%3HD{uHntQ6cO^T(tj$%%aX=IxgKUQH{3EtkE{(2?z(JJwZX`UPYQIsie8rivM%H% z_`w_95Ti*(#(jzv<8Z!u0bsovZC^|Y%q^IbLT-L{u$^ITv|Jkx?z@fd^C~aV+S`fF z;}O+mH`aj$RK&5?ylK9L??g2XNkQ8c!x3|t z=a+mqN;fMPXkUqxiK1eynt4l0F6tE!M*~<(temSWUr$Fx|IWpOaW8}m5Y&rO@zTZK z89E%9EWH+W6>l1%c6X^)fB?}nwBJa-F1>rW6-)k)FO-T77U_O=sN3U?>fSR{y*z=q zVMIRBg|8;QjNSoKM}^y*10+&zkN7IK{3BCkTaWk|>M%rpiLx){hd4^uCsc>z7%8Vm zq*|)ZydL$u!g)RF5uiFL)T8EKI{A}wew5RsoFC;RDd$Jd^3C~CPLXncl#`^KALUFb z=SR+(dnuuuB6~4{gedXtpE>8p|5nbAl3!fgyz`@COq1UEQ8A1`@BFA3ZeZT|Q8A`W z@BFA3Glh44RE&ATJ3lJM%;TLO6~pMOoFAtcR@#L&_dyQv`-*d5|08X$a(=%@A;A;zVMuemId#E4~(5E5vW-ZiPodYlS$MYk9`;MS=SSj zoY)X3eGZwFBs4fb(&}*MN2I1K&cq@Bsx;jB5%!dYJ#1AO?)(V#%EAMX6V+Ha+xc-i z%#KmUC-!!JylcSuaf+A<%G;{u{&=HLmJgXrK24>(t7M<|%xWHxR}J-m^lpoLdq8@( z#l1Zsr<_0I-X4(K_T>RN{qP=;eXIuW0VxMZ?*TcbN9O^#O^?n4a+=2h4@iy{>mHDt z9yw-uH$j-NPY=kuD-XzRl?NoJkdr~c3>Wmykk;%K;B2B^nm1Tlgb0~E+VA|B;7^bvPn}+$;9g( zkjk%nK<)yW(gSiQkfTmNa+D7 zN6FFyayyaI15%EXr3a*Nt$RQ!zO3c}sd(K3@YrrwZ{)8-k4GBgy*&`_9BUm+flXhLT`DU|u75HpDpDyvE33nNOS4V#Lw zXWC$%mN2CgBpO}oy(~3Xz{;`6xdJkqx>=ASD>aZfg~kkVL&~NyKMK+H0$+22G?%x^ z&B(dD0dFNQNdc|$HA>7=jA@Z+K{M_wIJz3D<^<`SDGiP}Q&wI_&Y2Q8wnW+sjyY3S zu1C(9(%_ggWp(i5oGF1LXUf_59A!lKsT?xHMCXjSA16pLovr)*dqGZG!5#Z|gOpg| zW3n$lNRwVp4CMeiEs6E#%qHdD4|0ZdleSJx+OpJ~1gpbl=Ok!MFdy8?8OizJ!US6p z@5Riaa%HZRl}D0ur38d6uJ-~_`LNYQYE;5jxg|MQN%>mGU{2-;YbilMHw~4c1J+1G#phA#A-VnS?TqbGAEO`S zEIs644)KGWt%qE}A&!u<^^hw##1nG19&!asSI9ySDR~+hli=vN&_jBjA$^D*8mfXG zoA!BZis!NEoC8!h|G&FJUg}&SuX3)C{m}VB;`M0GkW-=ahQ#a9ydkH(HzZz<<_$UH zy&>^=G;c_bO`XhfZhDQWHx5qS`86k}&Kq*N@P^z`ctg(2c|)d;)*DizNjq&e!mv-L z6=!$NM&iY*<0%`3tK&(9ctiFTYR^Neyygulbzb*|G*w^ohMZP@lRIE%;qxkXM!&Mi_a(*3zb_9O2Wsdest-6C<$ z^kyZc=iDNDkIpS}qjQVA%DF{uaBh*8I=9Gv==>sC3OrATHdCSVjKq##t2k!-I)zyA zuT+Q;|0q2pai>T=aD)6rxbUL*uG~;hNKOtoP@TpfYCo=!vA@J~suAlG>6PP6CKNlgxXQWmY}qFdx$-Gji>;CS58=sp z-38u_$-bu{Uz%pV1t%YX%(_#pg&Rx5F8pY4&#q4{K{7ZrT z@xdCd>cwGF{y2chpAm#~0+gG_2hX)D$<#6VK6V66jpAg~FMAW%g>uR$+6Z*tCq?OZ zt=B>RPS9z1bk!EPJ|o~rHOSv%h=Oi~D2%oniUZhlAG?Z~jFJL8&on{s0t)H7k> z>1#gMWAJ_Hd?bP^}QkV=hy(m+1|1GAb zc?$vu7$&pD7i%6qz%0&6nR_O6QEe#rPrp)i*dI!QKd0Ey{O@@Xb@n|tfKDK+B^r^a<-LuO5_wwxo1k=W(+44( z-tk_{ajs!+u$*WK3~ESjr=cF3_K5nDs7ZDlp7!MjbM-a>bcvC%)-@dGp%KkEjDwi? z2d5&}6pTiC0V;wNOs>$jk6J?oFc9{XY$gA0J-De=jiYJY8#_x$hHiYfoBK97Wk|u> zd-~}BLJcS}xn{E!%l9CRoG*?r63Q!MJC@32#-pT`p1LlTQ-Q8s>*1YsJN|BJoH{x= zw@rbY6-?fx21MHk#xMe1_4*Buo%|lkcW5{HpgE)a7Dyr^@8nZ*fKMLqd9JYVEiZMH zn0IWrSw|bmyKFw|hLTqt0M6`1N;6cl?gN0@X?hblEDGYwv03jGO}+Jb*~h z2Uj??z>R!W^q_j_z|lnVHQxYAIjzIf_u7Eh;kz!K<$;4I`etM4$a41)K@k?JkCssg zJDPTV)Ee8)#~ai*cd&Kx2kCd}zt#k3A;K3(8(CNLQOj2|DJ($hGXQ0C4O-_q7uPm@ zx0~KNX%|s&y%fn4dsU$9q10HdDdgxuCtJtUCFHf>pI8!JUU9`?>ww`!ZDZGDZ(v4Z zj&%@f6-D(KTvp?>olKg5GW=@#!6dAvYJ+iJxn^Pldf@{*zsrjsb~A98Q`t0jUviW- z{g5#y*(m9o?|2~p_(-OZi$`g2e6aSUU~Tuw{sLjISypI-GX9)m@xm{UWT#lVPthDs zesZmcJ7d<3ez`UbJ>k*~{xqs!I&@g>1CcpT+$g^l&)PXp+}_XFHKg*4#qV&=6W2U= z@v@xr#GUiRo%6)i%4yCM7ki_)S4zeDe#F_KNo%6(< z^Tc&8A?YsC8FqE%JaNr;cg_>nUjRD$CO~(gX>k*vi`h+pvpnEjPT>LPVi)L?s?SPz z&J&jt<2g^)zLhUp=fQ|KWV8>)v~ z)|@Anj__l_#8UItR&i{YW zR-N<2&Hi&Q$)7Vxu?%LvoR`(UwoqF$|2I@O&iCdLRne)Wu zF4muo3rhd%c;bH3T#0_-p17Z{U4K`<)l;|iEyOt{TBWb`rQv#f+_*0@PtI7MsGo-1YPpIs$oN)v9&V6lT4W*UZb<%2A9y>$K=kk;<2%hb{^~Zx?o+C3T)BKO z^bU2PyNa72!+dNax&AsGEQL_TWp-Ckr9f`WY~&nHbR4Xp+5xt)d3GCh0=#*48~Z0f z(KU50;i4`IM33wAp{tT6e5Yehd5?Vcck z2$x4I?AlD7XNFvd0@w7ONyxEx@(%N-3X^v#0lQk0G z$ZxVMUU|61JvabwHzaXGpAK=?Cfpu!aU|!D{i{xsLouMYN8EMT%=In2Q7*iFi)!dA z*Ha`&Ot~?26u-sfeTEBnppqs(MiHWsPsycNfT^#m7aQ*CMH(R|nY8Bd3}w%qPq9zq zL@Lj;QT2oGV+Sv^;piROq46jq3pZ(VrIimQ?x-5a&VA73UE|2z#_P>|Vz);)Bl3x7 z{9Z@bXYD*VJ#FWko=4*78B0#F+h@ts^`#p5JLJjgNkqz6EMNQ`=Dv=*Vyr?q%`c1Y zLk*p$$K}zzd|c&aF7+N#&*2dV%(ETIlD9en=X@j4ON1l5Nd;x#qLh?t1eaC!!A_S> zhuw$XtkLDs*{kCVDG5Ir%;WY=m!>Y;yhpDA*rm&Mzf3cyP2Dtn2ZSeQYXmR0%T3q7 zu8Ovju4^Fq1y=Gdk0N(t(juJ3k!eh#towU?)3-!?`y7{F9C%m9D;N^sY`Nws&1J<5 zhjCi%^GO-ikn^m&Ty|sqy1PM3X|Te0E>ftS{8&}QLX81O)Sac5cvII6yS(JaSv26<-HHJCnu;{%#;IzXp@rRvQG@kB^3BtUX?4==N(K1`1rwaKL@ zvn?tngFB+IRopl`&F#>QrQ#u^KC3fkdqh2vbXloB+T5@RqONkEJV zpC)OI`+t$pRnam+nvW37_9@)nO)26TuE)^JB{ZedfxA>QW%3zQ;KB_kt)5N&IEACh zT50rxd4Y*zl-y&*0;dPvg~(hmEZLhb?knz|fI_Fgv`ufLJmorZyTBK@gU)-q!Y{Fj zV`1L!V`ey|p9aalOYXWatgia4W^TZ0w$N)r5{Tq?O|ppCOvU}-8M=~|J7+FQ-X?^Z zW2%|`Jk9Ky^btY5W#Il)xp7bwgpA5)9$V>hFz(@Sj59FmG?J^ZV3J3N$-zjHf#iNwMDk*+J1!c>Q9R%Dd|l7JEP5H7i{)K@4iyoKv&;IVOI5oI#-UzO-|Q)Ij{Jve z_lfJ(h&cbz;DzEBt&UF|Ys;>piD!~e6DJZl6xGCu{`&5{T3{p(Hh_orF!-r3yAbjc zoX0pKSS#(PzO}|WT>#@TR^GPV(Iwct_LYx7E8Z9x8-Y;_Tv=oZ{2#-SUVPGZ@qQK) zvdDLGvuQN|zgVA#j^)m6CC8dl$|}W}%YPhRw(pYqda%3c8zpSxUyy0quJ0Cz(C(~E z-mA7eP3&@gw2>J@@L4Y*K~t1n?Z$lSR#)b4mmn5bbyJXzGzeyt%*f*vrU3bl_sK;8 zGuhEFwVUCMkunjCtT`_W`Fr>GMR}m3=WW4oqCzNTz?6zw72^rL1HE1Ke&Xsl6;dc> zt7g^9YEE4n(7|fl5Z~!mq{tXs;v^Ha8R{Z4_O|2?edcBznCCya5NZiyO*)`-H>Bqz zRhPV{;hp)O;RKz0lOw3m?uQd@ymsFfGLB8gcm>N1TJo`!oC?Tz3lhnn$e4vszrqdN zMlXcfX#CTOgYFCF@!Dc58!wfV=Kv$Wk+Oj5vltj*FGh2zoXk4Z$Ym(ZT$68`!9)v9 z(|Hr3@_N;4WUaH%d~r`IuqUZ>OG?8@h=Q*WMFNE=XzLR50rWngx35a&3X{;tB1iS- z8q%fgGgIZJFO)v)S$VLfidr_^Y^15tlR-6$ zo-hy|7>R@Kh3J33ieO496m!gn9)v;iBkAvGO|-@^1y7@bh8&^}kEC&Yv#feMt6@-B zK}R^sCFIRN`EN>~>W#(rK?x0jlWCCtf~>v7rY{JXDj51L2~)%WFMdb@3Zw%Rz>NDD z`H+O(ZY}1aQc`U-_ApzOy<9mf33Z=#$87lc72@!9)x>>wL=TE}Q+OEVxQsDmV z1?~(hISMg3P`mojNMJ8ii{@Sow5{RLu0%vw@&bCv5R`Y_;K3m9^y>*AtV5mWMoBkC zI+dQI@U)cMtq&(TvTBn1n28ouli)?q!YLzK*Uo6wOeGClx*sPXJ zN^ATd;Mkp6vt?U*wc90jznwMHd}o7|(l-y&#@WyF^}U=G68`ycp4)w^t&91~q7_;g z1!O%_mTERHzowzh>tOtP7VY*09*6;<=OO+M#uoNKqU5^G%=}c_&MVAOvc<=iu@Qo% z%M!LQe&1I8^F?VcT9}{CUmh=89r3p6d<|BW_@u8ziCcV$balkl_VcCtW|i3LODtX; zP1)XAkS(Ch^rDLs)Ee3&amb+R|uO{TnFK9sv!+Z%=XuC{(>+E-_z8?){?^8x`+rR!;Mbb_4+ zJgVpC)79hM<)bpUjXL6O8>JQhu^GzmsG=?=(iHEj&(A0M>exW6mR&z-9APdm9?k?o4_@VmHeYSAzGW^YTS^r2*e(Z7DARq4`@D z^$sK5xbB(6|Rck)K`*DVp^}Sj3c9(-A zN!(IP-t%OYo@!1c-}0ir{WEaVw8T%>f!dNa{SzEM!>$@Em}!=lF?qk%Q28xKg0bg?mUn%tPRD#FgE}&6W-Efe~;CmD(@mox{JpLT&bHeG86^Q9x7|oaJS%5YDU0Fzu%|d zr*r_C+9;I^w-ZI1R0a}9*_1sVt~UkZld#FY>l%gU;Wh-Gm-ggT?FN}QyVw;_1jH;~nTns%#P zBkuMMX{Q}s&SumenyYG0ttg>vMX;4H2z%=S4|^KeQh!3Fg1vnKunVFw5AM||Bj=7X zr)ZdTGe%8 zlHS)lG4pimnuK^JuC#G~mEo^?^g^t8b&W$C zKm?Ss2^0O5e89{5)_z!Y)DmNPT=n|*(wtv=A!Lrt!d`Fd9>-f$pwc;OR4yC&~-f^bW!MmQyf$J%t zIQcn)j1f|w+4J4c67k_oo%U%P0J-}0ER!{!U{bwAzDtb{%pJR3N)5q1E~SRtp{wJ& zK}NIDmQx9tp!y2klr$qecWA@ju?;b*=(WQT1)*fSpJ}#;+6PIy?Rb`ccRnlmEyr1= zge$O>M|GyaWJM?7-TeF}DtN7}8D`IB3^F(Q7}c)Gn4PBqrCECSW|>!hY}vr9n5W7n z=6Bcl34V#YpvK6S+$vPYy0V%)6htujO>cF3p)e>ji+nF5wD_`U*Ge}{KDbgx8onj) z*LOb(0e8(KrSs||!Jr|}^J+tei0;tYWmA$>-@XBymd9If49%niZ;G4F_w~z0l!eYO zt@avgm4(j7=y#}8s0sG=4ag6K^wMSID|<<@@BMCo)RQ&Wxk^lO1?P2OysJiM<9d`H zp4{MVG#jwfTBT7}xyenYgf)9AFS*U4npv%`_$n>%!P=}xl1;Q#v&_hRGvQgXnifcU z_!zP+A{I#h98yL^Z68^j9#%Z5!eJG=7OT!-6{i+U=^R#P5(2lK&tfgqx5pQP3|fI- z@gw<=$q~*=b~Z9Znh!J0F(AQqaBu0hIPALJCPZDUbPN?yN<2tz^E7~+Lxh(b<$`e> zHf&Mvn7M$}S)%ZVXZ( zNDoOD%25Mq9pXmFLb0q!F=J?1$j&<{rJCuO+ zDV4yY@G#C$&`)kJArYIk3E?QTI@$&bV&c6UFnpT^^$t)mpaQ97(w&}+V48fyKSSi? zcl4}6TwJxy(woUgi!}B_iW8}4hwPKA0d|OdjJuQdV0|86*$c-xnZT;$8a<9WHkwZb zn+BBBNq-39Y1F-=w&kdU>E=?jYhTV1#j3oi!_Zo6dLWkC>~CeN!Pta2;*m=(MbVO_ z2L!PaNVYnb$7@%|DV@Mqf(;6twWbrv=WQ(5?THSn?s06}B-eVMgJdGP&OaW9$DV&= z>Pt4;A^&&lU5f|2H2igW4P8YB+PEu}1IeXX= zG7Z_Rq*tEy4BVcDu2dci~Z&9{a|DKP-6Nz4q3 z6)!PPc$6I{zvtyfF{Fe-gK{H`_ANJo7et{@mnOUnJ+Yt9DFi}+Pff@9+cq@yz`f*l zM|(2th|^e_Z(VW`7!VZZ24yK>qR{CcCeGcBORZCM@XwUk>-X8l*R6MgP-}zD4p0d_ zDYc%V#d6F>@Q-*oUbT)PUXIlPgihXP%inY=WUytnP*Z)So&MK)wQuxih5`8rqJO;T zY4(R3Hp?Sf7hs3K5N9tN@&`4B-K5s&9%4DkJu=_qzLE#0bq^*j`CCWj5M z=G^~Q2LN+N0CPtGay0kL$hjkcWh^M?jsV;eb?yk@Cwv6Z7(4>N>v--6fYsdG5y0FL z0DiyTKzF-_vdSa&F9s7a%_AJ4i^RDjfVm@p+Sc^&UDQ!+glXrKVD1ROz1KQ-1fX4j z{{}|@a`B%#0$@LH?g)Twn)&%7I|87>eog?^@`mWai%=P6X}!yJE}?zFIN6=l*TO zAJ#;$bhW=VjCC(V$&ML5Ru#D;1?}ALY~pg~cIJ~kC1WDq3#q=4$7jn%$}i-R)s=SQ z6;FL_$+o*yU;phWeH&0PtAPz`#TD%Yx*A0EXty3j`AqTgpzcSa>V<%5y{_jmZ09?< z_@I+qtHUqekeg;e=vBexyj0HqdON?{5>PHh0=H`#ON)e*jri?yPL3^QE01D0pA#!x z*V;L!EOmRo&E*6!Ul`|2QCkq*+=$lLDbm^V0v*A%^ZTeEILV*d*-Ja0Q3CfW0Df6? ze8AB2&itOuov!+a4q>wczR!c#_t_< zdco0(UR*^`qn9I3jb4sCHF|9wLa*tHUQ>Fkh{XjI+IK19%lV3h}XTPyJ&}*Y57D&$?cOMo}`o zv6O?;WQR4@&9`%?>tCzjz0~0BC8QJ$cGHoQf?fJT7p{o>)^hCA?pAvsb+SztC5^m5 ziuYHWkZ-{C6(W0kS^&A3B7FC-YJ{sq;&f~YZz$*$+|KHFMlDWq#K{53Xn6plq2kh$ zKk&Hk?i7>DyK6GAW2EdbqN*-uWAoo)eL-JLDVjZGv+T)5M(Q-l`hS+;c%jC zAE68vqqvd-z2TD>qyl9ib@u>ac6q|gc*5)?%=gSDOghF#-#ksG)!=SN6Lq8Nfu{?3 zC0%xm6m!2O9Q;42Z6yO7M;iyph>P`bLsZ*fcwu?FU}`jE+4lex1KTOGLj6%GLXUD z7=pJr>&(iSCIjW)5&V?K$~JbBp){H()20{)N&|YCrj13V0k}$YKzZ?h7Eqmt&jz|} z2+)}!K7YatP4rAwZFly)fO)_(#V11ao`*U*7kve|y{acKyYYt3~zkkALO< zkAMFQpZUVswT{im6NJ2L-#_*3PrP%>T_4(1%bfI?{U7dl)8xz-KUSyQG=oePZ~w*@ zZ~xHyzW>RCYV{B>;V>QXF+xH<9W8%ABmk*I1UBk@AMRG*-Jfuy-Wbn8+GQcBB=be+ z#>TX9&Yc@K9#}8TS7Beh*!D2JnDTkUdeK)e%wNZ_W*9ZW2n<^U89J7pdHfMykN;@e zQSO*>r=pGOIQ`*a6j+F+FV;*)tanC*9c0hj=x8+!#Dgdb34KxO?|>e9XX+79gm2aC zo3B!k;@vR5a!bcP`MN>`fz}?ggRBz}|Vu~P_cfO2ji3+W8OrI*L z(MiVyVSzz_7$!ASu@PBU3JuUUZKk6}J0oqMQX=h+veZ0dQz2kLJ9uMui087FIEHP1B99^zro3W7t;Oe6{*G&^AtV4Q)6fyqCZjAptH@abi>%xFhb0t@Y!tUU4XQB@K**9l76n+29vKv;WGqmN;?{n}~#1D$Ufl2Uq%>2kno z5gvLwC^WAiTUg3(h&9Zo%}CJ>fh*G8x0g|?^fEe7;GdZdeBbUv+r!d*=s=;HKQ6r} zQ9r#}M{;jS(P#NVW%|M0*80z?lshHeZ7xOwbFZocI#3Kgf8hPwy`b#hqeb)En`H~u z`g@>gnv?RQsrZEh@83+b?B9W+_2-WOdgWYp^WaWSv7OQc#ZhOV^9oBU9T)8-1509^Y;K}{Z;BD8Z4d1;g|$5Mc^PWM>T7Jx-nDo+Q zvH;Zj0p@l7gb9Elfari0a;cw2@{p(zt%=s8t>c3yumh!!Rr9l~*xqRAi_@ukqASJN zDL{{M3E2Yb0Tx#}_X&Ei<9MT0qLntg7Yyivl47YF87vQNK;%zV zjJ7TXq2s&r9xJ&h|A>X^4uregBHQhEK1n<6X_x)Bh%YRP{DURUbDjQ?BFR=KDcS`L z^BavQ2Pe0>M4GP4Pt5k(yIR9!wIIh}=;fCYbkHcYh#SpTyEEcRQgrCnn?;IFeustH zvt-iTW|3+8Z8>bWD^gO$uBof2veQbA^>YOYB9g@y~6kw`_)C243JwDNpAC` zsxAtjG?}^Y>Udz}631l5Pxz{DVF8Bc{-rAN4>!XW?kQ#s@3eSF=Tp9aeHl z{yhtM_pEBe*8t7>z&K;rm{3m;{Q=eOK;0odp4{#lAA~fYlMBr_Ve%DCH{Esng6zQF zWPEPr6_pu0PVNUp;BJ*G2G3xNk8>?%u35FNcU~6YP0pm%-G9%1WJEg5_3WnKJb<2k z?csY?s=6IE-6i>qg`+U&L3{d<{d(cPe&0R2WEkygO8aU!ysUI2*TN>3>7E%qeD%yVMIzAseDM)l1G|PSvNsdwB74Oux%y;?Vq0EtIJRCXR{+ zDt=Xq-`4q9_nJpehizsq@M&7L?kp~^H9Q?0vcFpvLl-*n@x}H@gzp*=uCCT&9Dqm8 z9?rS-68?&@zbC}S8!QNp#q_RPPY05Aml$8fk)+D7@pt{|AUZT;lkfVPQmO?YyA(4o zj-k`ITT$puCMi|?K|}A2HHvX2?D3-kb_wXIsVMm|7eF`J+h8`-w^xrs2ZEPmD`iJrX&Xkr|62-g4VI4^)n}O7QG^_D8J13;*nGW?iULQ z?vsFu$jFR)T*0F+cN~uox>U!HW$;6v-_V%W{m2q2-g`2U>e<`E#>Qc|z@0~c%R`S9 z7Y#3V=G?eJPX0cQ;!RO;e57}StE1l&83%YOJVdW`Yzh@wJ+^i4uXDb!19MV2_OeuV zD)maX%0gC4$)klK-al(cB~H#Sg@9$l{cWRmM8>1q4;;6#WJu=;4{d#nbeAJN)9 zvrDQ($l&R^i{nxT6(3(2T^(q8>$;D!*k>Z}2q;e;_ctm2t0=I~Ns)!&q98)cGQM*A zC`*v+u_0-1fBG8|0^L63PSm?cl*R38J}q04e|0rZM2#DyEL6}iTW*0VJzuGj8OJOe zbzQs%2o^`sM{Z8Y`{`a6#~(^oaP@Iz~h+hg+4Dv z3fU!P5r`eIE8@RuVJ|rThw(1(pE=q8H)#IU%GY+__FrZDBd>DLBd_w=*;N=nMpQ?h zW1NL0X~46mgEwLxrr`#@mZ2M`DOosH9LR@wJ~z9q70}+RhXAA3U(v5^0jEwSOFafg zP%!JLl38`pv=>m31NS!a@NH;(CG)Xzqw#PLXHrg$fxZ&sUTN-jpI|v$H%^aT4;S;o zITyIQj}3HJQJySxLU^Z_X$@cQG)U9gq z`J0zic22eL>_(q`0wGA=A=w6Zy7w_B@iKR@MbRJ+`zeHf4&&Iqth3i%zJpI~>z_EQ zBPmP^9Z-#L+C1LB=GyDGOioSrH(l3j#D;emt>J;=w-?USF47eDvanw;th`AN?9){m zXvJT!Hqple?^!k#2tBCI9hFoXvuT>n~ro zV0Y6Ipy_mlwNo2chZYiIo%1Tny%T+tkuvb=;%P{>7|0#w#?c-X>0+ommvyOzlFJb< zF;q(q(7PWwpucuiOr8zU;4u4*FlxXohX}N`8B@q*kqV-X?80|@%HlL!4@Hm)rX*fz zN4e@6gZN4g1Vy(jIujQm?hom4KSat0K6Fz&h2!E<5dolh&x)we@G)&}q`2fv9Tybr zYgpLqzA)0)nbb7SeTIR4f-Dk@Ojrbbg-ozwqaee^LFggsf*fx&+Z@P|lZx&beZr~X z?KU*NRx_q+rXF2kF703CY-VR^2t99TF#hbxS!UWGIguJ%#~CplC%1^)MnvtrJ3#*4 z1AWa5Grazp6ZDPM1v(v*uP{c5koVrjvNa+!oi~UW{nC&w$suG$=8@dBr*;R7ukNo_ zhHSNzp)Lz2z)Esmn=T2kLpsTXWZB7=L@^$VwMzG%8u12JA{e;LrxX;X0$H@;>6W6w zgoM65qg9lZO+F>~1>MRUsUgHd?!u?nIEATj2`&%(J=G$X?#nOA(7UQhY9w}`mxsg8 zKYkSQIK zmjdy|=1R;sz(kWnMpAeJfxgaS)E9v)v{`SC_LTJT7|w((NndSMCkLuIzh z#g=Y|S0?W_bqAL0%;?{$?0LQD6X)FY^8pnE`&PWhbW}_4J6O&(kM>fo zd(xx3NEw;+-*T;SQkHe}MWzvx;Q07pVIG>9(n?44If{{#*D1o3 z+f1(Pjbg5k7@S@g6*wxT)yer>1!rqoGqh_olFMNsV!d`cs@Y*Ql`ANgdXZthk_|7e zx1FM+hoH-)I$D4vw+hW{EN!i4q3}UPXxMp9E{l$n+tadWrFxZosOZp`J__fY$N98l zkdE=q47Q@d0j;h8+av4f8Fx^d3s_m0lPvSBZoTPJL{r3wtnV&g)?oEzL}2{@rWZ{R z@2*eD4k(RpL2{e5-PZO9uRO3m0eh(l$Ch+7*{T9IhXtrQ*v%KD)XO}i_U+0PWh$rR zuCVDNtC=x<%=8aS5MHH2fHpFheL`9gHAgknx zlIn_P!FI1{Y^(vuLuU}#hc;_KtQ~-`!@mz8I82@tpdMXMb*@TvMzf6@u|()I&iT5F zlDWJqAJub|k8*UELfbSvV+l|CqKd#c?x`sD6kpNdRUw>`N(RjDLbx~SDk+<-H8}-rMh9pLznYmx zNzg}KbT91Khl#qkMYf%y{uvw4W}YLAI`=6*I!O!olBAJiDdSpYGynbo2y=KwAp5udwI!xxl{IBwD*B?rG$lthq$$FLEVtKz<2vU@f5q#~%mPX(4d) zsZx#+O+g*L21JWZ1sdb{6luJm16Tz7U-sSx%C4ij^F1H;_Sfx}j%*o(tb}u~o6vqi z%bvH4rPwg(qXEYT-XxF3%1S0P4l|4Q!n7Q($aak5uy8w;jR1iK*dV}=HV9}yh6V%( zFn(>YK>>jUn4|#_dWa$BBOrnk1PJ_o|Gn#c+*V7LVq#W?Al&ENI`y$@*Z!(qyQ+B7 zM%<`Pd?C72Q{H0*A%)Jnup6|AnySvz&4EZdPhoxoCXDFllSv8EM z(N=lQD_y%r1ZAZ2AEIQEN|a>$K?lGpTnyxi1RzMu-d##1$iDO1Ryy3=y@F-5thzD- z40ZJm6$W$!@amvcrA$y)>rhu$xwb+P9Yb63rPNmF+u2%MVIW9bsjro?+U;%0n(kLt zqYtI5sOBhLrK8E%rhtYr(*>!X6Ok5GI!eGxDPeqUoUW=QceF zh|(lN8mO%z>a@w@c5$dq&<3{q*_ebLc3oAe7$B97)W+lc|JX**#54{RQ@6CMTAzig zZBqtZnikcJw1fyNjfmDoDmK^C1{xwSjT;;RBm<9xGN_Im)9f3v?R*Bbj4o@z{+8xR zaN)RmbvrIq!EvNB65)k4b0g2Bj)cn;Q-fxE*ujvHoi5oM5Gt{2gaYfZW-iY)m2Les zpOic(lp0WP&4*&0rE}VLY$;xW?q#*9Ap~kO!_G4zwJ&+vma(HYs#CQ2g8L$T;hbS3 z3iI42btVeny?mj4`-4!~P_dO>a+kGLcxE!HH8Jy9#LUI15yvq)S9UrtK%52VK&{Bh$ox`Kg>(49!0wDcZXK|7IbI1p{<6g} z3>-EUyC2wJxx-q%J!axdk-fx->bWO&K8E-VY$Tvm{xEwLyC}Az~r5any8ID8Hcw{po8rl2VeR{L+G^e-* zlA8>bEMcg|9S|YvxMV2q0QHOG1h_U)7ipi%jb?WUn80|t<0@U_T$@1hCD-a6(A7Y} z%&&2aY2cIcd-!!G^CZAXQ#(9h9@!X8`P}i%AX>Na!7Q=7 zM12%K}es4u?7VexH#AQ`H)WtNoo^9KqXZ_xQkN1y%VOs@M)`Q%O8oP`lP&k8uIzTCh{8cSlw&8YlUu! z=y^yvkP+pu2~zg^wjYs&BG;rGP;$)J06wD&5{ac?B4^-;F}cD(!1ZyY;)`s6fX!lB zbQdwfDCMQTWX2_<&==rm*H9TB()r-O4hOybCGR-~2eIYj-xdeK;SvKP=6{nMRKox8 zILPms6wyIP<`w+c;~=rl$nva1XZl%Z5Y`#cd;>YXly%6wJnMwcghNn{#X7hgWEvim zb>2NtuZsNKRL_@o{l@Z|hpk}$w)p1XHP0ihc`Cli2jr?t3ED8Vli*)j&lCkOx0cw% zC{WXse22C^GT7uCW9}Tfw+)XhJ2@9{f=?R-!ZBmgBmYvCc~xA`=LmXfjZ3vg*^e}{ zqDh!7dzIeZHbcD*`x;4-?X<~PG8Q8jwANA_kjI1)X|_k7NW@@DR0Xyr|6SC$#vsma zRvu1QDOM8MrFUMl;1I}@&fjF|3hc=0?v4Ig+Ff!FWSUrEn`2hE^$sA4xtNa#{gL8N zbRvxc5f)ML%;ZO9X7Ms_FPcuM=#4%B!>UDKVR<~eTr%)3mmQx-p4)58QKWkxMBJ+!#jQv)q%q~j@S%GY(ELapne5_8wrMeoLm$*ULlXqY z1vZ~`{!S%(uUF{N=wr+*c63ympH94tM#CF;($Nj96!=RTiGY68pvMgB=_ZpgyOzwW z(P%P46_A4Ni0z+Sk)$J{t}~NA;Z{ljzeGbnkvs=`Z6)qN?L1oU8(A1%Ql%?~d7 zn9h#!zz&xBMvKd0LDwVsLQq$l9SLj*oUhQUga_MWeHyw};7)Sh_<(LH^qDOECQYHQ zOa&pM7N-D^vJsDWp@`V*ZiV@3wRU|pv+BHP=PGz)+o<0&JpgJUc(7pY`Rj4x|hFg9hV# zJ+(}d{n*+ZHr^i&yib!0x+XQO4szSesL%5jXb*_z!p}vUC5%as9avG#1dGF#vQVWE zDYIgVPEGSS)!*!&s*dWQ$WFMcgpd5pexi?w_;R#p%R`Cx?!0I|^SLfZyv=9&YTsWV z_qH6&ja{pjeINTde8RUMFW?RvNM_KiqaYV4xbRqSE`muaS zsK-t$4k4qIQJ`3aC5z#uw<0Zmps$El4sM{H2bR{e!t0T*fp6YmS{&w8?oY&wD#jU{ z>RR|3{sR^Ksuc+Op$oOju~F#^B0c1Y#3-f>Gb^IvF_O4z>}Y`q6ck`Pk=sSt^jksC z;M#w)qQIy!j{HF;$uNQbSxS@a`F-rb9Pc1oHz=2v?m|lfLIKVP5JWr)u6_K-TEZyb zvg&P3cmqh6v7Kkuy~4tb-NIB=t!|P`ViV({BsYL6S{BrpC?rMx63LG2g(gxOam8P0 zCkiPzgHfK2F!(CNRU>7ig-@CPwJz#uMX10P?5SE{(OqRwsLa3kitH__LPWF%^N&Z) z@rXt}za@V@t4M+Z(v%M;ril3)k!%dkF#nC@_~31j290sgp6YcaVLCx16Lxoq)48?g9tdVJgzr+@>v%vUYk0Ikgo5`3J&2dp1nS~^NG2z_ zH^CU#0>Zse5icL^Y;2EmQ#$82Wm)iBZ~(eiiM#@Hj(DlYy=v9oh?mzxE(Yp zAuuckaymh^9x0zYGZp@f5K}kEOHgsd%LD~$hy_4G4}*>y%|33dMH0u%`7r(VSei`c zws;pthp&WSXc}}ywyPW>I#!O2j{dF~P{bpF&Z39K;Em+T(+Nmv7Z0>W=v_rA3{P>I zBBm4l&qev1CaDK|b*`3*AC@5wcGUl{S`7$K07b1Q0{R$Dw9ZV%-H^d_5gU(f%5TUA zZrjRe7OU~}C+3T6WHj-l@hX@3td?|*3LsWY1h_q+iO_uI0=%GaP8N@glp{tv%3h|K zlBsa5%(0l+;F9Z?a>@IXxLvMtHFyMSF=|Gc8;2?MsSPQ^B1Xt~k0ov78HX2Qx4^oZ ztH6<*)5J_^2?bM~D3}N2t6D|AQ1P_BsW7a_b zUk)TA_5QpAOQnm10RK}Y8FPbnGU;n9n!bWGX|bdsRx*(gfU#1zl~ODNV|EyJ;Ax=@ z+lC^e_>zz+z+oFFO}1zaafJUm8Wx%%5KpVp)({~>w3hu<#Y#+4teG)yM!X+!Lt+yA z^XQ~u#Kwf{N^-77+(E)l$q2a?zwj(Xqi~jno}KQt0tD&Xz+3e#$w)pn#vh5K&{WB- zfqaB<(4bSFWEPm!xn2;2Ip!~c5hcj9KL84Wj*w~ao><<6D4pz>h&H+31D-4&v31q# zlVwjiJF~=p%g_SN1f)PZXcdNl_|k^hXy9Hv=LiZctRCAm2JQ}95oA+n6e^}A5IyU1 ztc1EHzFz_VO4g_yrumE^ouxOj*A*)nWw(f7=?vgZmILnr1#H8tM?{fe<%qCRb7>oS z+k36HI)&oR5O2@dk_79^L?6edD4DLJb0qN)myCdoBCs(iL^lh=j07bZX{V1+^hJIrkdYqc}gu$H(mO|Gk0ur{Cb!AFN(kZyV1KL5f zv6(riI`2r*_BE~gOz&mHj90IfYgw3ys6Jt^@dD$&L7?2ILo?uFNl^_uTlEM$U}V6H((N>&jfS_fSjb4do-?7Bg0 zX0(5#m8`rbE$zMO(LQ_6hKX?qh_a#b^yb z;rQKw-f0#z#_^{L{avB*3DPD%O*XDpV{>*Z=?$@Zs=u)|Z0(2?@|9wgMC-?^ylfZu z#aV!RzNMcrm1m(R3EN=+WTDy#B;ysKScq$nN%zjSr`PGE7Ux=XM)c`5L)+7%@^0 z(b~XW`G`<8hPcmL_}n@|&{)BIt`n*n6W*o6o$IWg2D%c}TeBXze0kQJ?*zOV>wS4} zpu<#a0E0;TJjyB87mv1zmZH%X&K!$cDl5gNi7S$&`6ZPMnYW)YC2xqa;o-Y+;7ebD z34gx~&Br?)cNG(cES>kUFaj&;*${I|{WBABjHzmOrKG19fmgP%RsJ*1R1?Wz7o7{| zhy&moNiYc9Sy-vCFuoVDa5I&=t4}c;m#O)fy)B#rIIQq@Pjwii8H!bs!3m?rskZ@& zq!>h-pQg+PH!=#fB-&CRIkXj7UBmc$V=|g%zDVz3(@_Vpx6*;MWU;El*n3nX8Fn3& zOoC${?a7D#hU$?JYn-(oqg1w2Pv!P~jd6e1sQ5S9`x zbzMh(57me#1%XJlr&28pFoGptf;6mtWEvZoVp!cIPz5AKeLQlorj9th%@H?<386+>R&Mb z!A&ej7@g*C3)ftled;f;X*J!#@H7UKT_@8!^3}G;*5$=(yy2?-f<;Ape4L$cvq1 zILIwhS?)Q7l}mKW6({rl64npH#JxQhC6n4S4=%J;W3(;95KyX#Mq~j4iL{G~v6;?1CIDZ^y1{OK_^oO1En|(JOD5Za2 zv$5!m*SUHIwmOB)CX1#z9b&Z&pL#3LZ1#OC`VjSh)9ZhTTz`K;xxRivx$ZxqT=$(& zu5X-BuD|nK#qtELQ3qoR1G@x zC>V-oHw2}$b6h;3RL&woHcKpMPQ~llrL{g;m)4}XlCvVnnE2Lac@|Ya8p_x1iA!re zlh<<9$T2CR>|QI7G9jTxtv$+OR+KNBCh%A3g9)iGSU0uGAp;|+V4vVAo$|5)M4VsjMeu?2P4&IdTsgjINSv8+&&AwxP>AZ3Cs3*Nq9 z>0x%@?sWrMrmdx8^yvt0nR;asBdU|P%cO8aSjIB*01af{HUhyTAb&1xvP4o{<%J%W z!%`DZU#GHBl=*?~6n0w3{3eb0* zXnIP0^6p?%{X>bOP=pVpK2WA&MKcCZm5bR1Rsb=~jtPfnWhXlz<0fL6ilU$O_g{|$ z4yGJ4qv@;6RVl=3;6skO+(XcNeB$(eIA%9b5EO7~%OQj)+Q6cvN}@MxPrezU32Q+R zhF0!UY$CbZ`On_cEAXrCGQ$W~GZfR{s4~rAV*Q+(B5lv8Y zOWd#7Y4#am1~}k-bC${Qh4Ovtd2DEPY*}o$)j%;SWG@b7SntyygpKOKt5wO2huL$H zyzIiXSbX#)*7a|_?AK4E<7EHerRVdZ=Xd|r3H6-p|F(NxQ~Rh7IX=!WL>IBraSUo_ zKIGIs`it&4(*Nhf=aPzIbh&p=gxtyh3m)_z{=B+AP>HzgM0!5(ipLEpJt0OX|1WsZi{&h6ObzS` z8Od?>BQw$-&OF>_(Z{J_4W_s`O3d*>e9bD_oW|6fX>n{|b>i@Rz2n)eJ~{d@B@}3m z1*jcqm`nO%U(@P_5^W=X^Szn-<$b=h`cgjDEt55?9s#W-DA0UKLldv2hmsEf>+MPAH z+0ANzI99Zkvd3hNkaUUw!XDo*UF;!q>NzpmnKm+sQ50SPubSXmIHL%_c2&D^*wb{2 z1ZJyp(d{9?Q9tGOPgJqz@;vf6lZTDrZC^OsuTI%F-A=nR#zy8O1jSa6IwTuc^d<}% zmP@2E10WDm&G2!doIfk`e6?Hn7`{!d-^m&V3*N5InDsY1@zJI{N%qaHKAxqsv~z#F z96LBgCCoF{bG~dE#kOY|np0?7i-zvgkZ>bv~F2qRP?-{B4& zgw9ny$E^fR^xaKl$fJ_-I)~j>$p|>YiM#7YYAo*-5Z=mu;uH=SV{{`XqesPOb> z38Z)+y{+aAAG|w8AaCle4s;j$ z1N{lLef?2w?|kLMX}y|YK0&-Swm~i^EADp?L=rHgkUK7z6*4N&{d`K{_@VDH`1`m%02Gf!JWhSn zk=Ry>0)IqyyNIpJ$Pp#>1AWv)ow0@*%Y;_3T^F#3uQ6zh4nuj(z;z@p70S0k6tKO z?l#~5 zW!qI2gx}6GCUY^p?&Z~Rk?5+>P3Dn8Igo0H`Xt2+uN>W?ygPZdE6It+0#c3#pCHjx6BvweABjGsfE;{uEqgHypja=cTovNSV>L+zbki@5V(KT%aKevv5Rh}aIaXvD4Y7O{)jizL%Ym&7^y zKkI+4BUdB=+Z-Q=M6ie}d1Y81-O7-K8wH5%RupfUf#Jckx4n@eg@F)|arScgG2xJb z&F0*}t!G;FH@9eLsdbVI4hW33#?`JB)Q5p9y{y5IYX|2ob^X$|?en7NlD#Ci&Nx)a zQ1E}qoWr{FJh|=p8+d?5{Iow4Af1Okh<@H;7iu!@XnoA1`c_nCD+QWvrd_S&Ub*8`#ZB&8>I48CzHt}pMRhPqqpL!Ef|tg zOdR6G(d(x(4yLc$K&@tL?4v+pXe6EY>=tY5+2m2+N= zC2A}cVs~@wC1vzF%WIpe@b3xIP*SY}2!Q{CD&nVQZM3Q=fx2Bu{b{_K;$sc`E-Ph& zIG@TSK&Q+Dsi4m0^l`0&dM>a~hT3<5N{c(?g(`?&L(C?^Lui^@GFWHGuji~*dpRzM zVmkhkwCp`raVH=l$!^i_vYpw`4&}WaUIeOju=DGYnzD_+fhK4-dyQ96QORrdyK`6K z2aTo_fx?tVQSBGYa9_roEi^m#w4@+B>Z&dDr^DH*W<+FGi=U03IGs6RPyv{N&25}~ zc|%OkVnn=oOUTKvX*4;2PL=XSgRogG+bQkv#b)E}wh@)S4`kmq5b1Y#(`YBztWu?= zq?z#VlG6-UeUu=CdYnvgE!!E#oQ?-6Lnj#oubNvWS=)QnO5OsBqnmrcc>!Nw$vP-|;tx+=!mGW;p*fqFJf> zKCo_cuz*r>nvVr_T#?;xl`v3OYc!W#Pf9ggqgG zUL5#QBN%6|^J**D3^FR>OqAG>vMbfkrwdH-zgPK6__HiH|_LRwJZg`lPJNmIkQ~Rx@D*4?;ho5A?vR6%7WK_9xjzpoV%# z#Tzv>;=P(lOIr!hsWWv>7s8P<#^@#)JO7RNujIH$F&uI@ zPr&+4>g$$#F{CpE0n}#~JlMP?V@D6^_|B^p@f;IHNO{L&D|>^`oE^4tYZw2wV%1wH z(*f@X8>zk}^`t!<+IWynL8*fQu{wfxP2j2lbq9P6WPhouHfJ+>kO4artK!ULT3eqK zy$sfHTJ%OjbPOj*%8-wW?V8ieq+xpiuQFy;=ed;3N3@Y4Vtz-se`t`E!t7gWL-iA& zP2H$gjw~`!zzU(3(0CwVtV49lOS`%tIhfU@AGe3pJti?oWyuaN5+c3T`F3pP4^sfPxWtrBvfTzB zM94A62$X~nQIL@sCES95K_vFtW(0{Y1%s{dSi`rlDhfm1l9p2`xuodxH&y2q-6&N( zHnEcFlH0M4=(3?6)rds{-^S|S8ftFvt>O4rt~BdBrYiC>?L$Zq8>@r1dfeKhgAW5t zlw2cw$Evl*5T-A!H;5#Ai@>T#iaS(;%M2HEZ1&V7M+oQa0Wj;Jqw<;oz=OqgB3oHZXh9dnHB5iG5XT}#f-6M}vcJCigY zWF9LplF0(dO1qT-x`l}^W%#CzW9razLqEDLDnjtk9X3eQHva|q%_JPi(~EjTYCpcH zmsrRXW)Fvtkc7y>8hpTL#~jA09|REp6!9?1lU?dIrK+>b9Pvn1goQ!kg4YBXQvl^9 zL!dU%fX`r?^gs`E{t3q~1QW9~zZ7=gkrMzwkk?eBNo`a-R(=$j39g|Fd@se&m4C!s z>q^Zfpr9)@7yprYJ9csB{ZjgQB=B!ZOEmRF&(cyNiX4<1(zp}TggX)#-l=jR>@6UO zjs8LrCNmc=gwQN_sU&#XXdT^oGE}TqcV2qarVFM^`#RqW1br$L>yym&kvSQn-|GBb zY8u@Hri&-%=(dpK*@E&A{%s6k6;W!tp>fNWb8buYg*$Bg26*ccyD1dsYit62qV#a7% zYg1Wg3WR|Pz!F5rg1!gPR%&Kd6`*(8VrLvuHA=@y3FV;pG+C)mm`E87{0q=mc78@F zfzaTFz6bDs(Sb6)qPUGgFpk9r6EjRyVW(Dd6y;%6!9kE*{;w)^fQIv zNMR#<_!$+6`E7KmeHfyDwkG-RTq-Uee60PE@i(6qIQb&b0tpipAFPJbS^@}e*#H_k zVd~ke19bBr`5I8=LJ4ktO|l5iEZs>V3mNxna!!A)kx38w zI)B}Yhsub&rH;eW(oWrkpJEXwnAh1)gdB~hcMNSLsOTd5JH0np$kyXQthd@;#xh1) zBZtji-h-E@{wFARyPv;ca@0efgKH9u-+fACt~n6tN0_LrO34aW`-lb;g1pHX2LTL) zIoB*@IwnE$K8$}MLGwO4lq$;JXH2CU5Pp4gN^LiS2uFLv?vUhhWjHUv0nUD?vf8Fe zonb~`XX=L;fiA|ep0IaDa&rjc$xWy8HpCej+Qh?aXd!0XlD80pCi)>I$7hrWjwek; zBmm>=ZE6*MqLCfvIT{=gXgWx~bbX^JUajel*i$1E{D3-@K|f1TDj`Ivh7%BX_PYd~lT+J; zukl9`JcCAO$g1M`#Z_VL2s?CI|L!5E;x_L(Kn!2@`V@ppC=UUW!iGLiY5>cWb zYwhdzT4km{p2t>iwQ6s2FwQfghAKpwS%tZ|6_pOzv%z34EjwcgLT2O zt{F2R?%U_f;}Ut>9j{L?yiU+VLL^A`1D}LYB9*@B7<9?~uo0?2i-$z$OCL#E=)Ziq z7MhqC?9#z(GJq9#q2af6%nz7M6gk_vj55%tusyL>KO7KH#K>sd3Da4jOj;;?n|jx| zZ>TnS4x#cw!%|g-cZ|D8hpG}aWecSkF{?2od1M&l3bVonw%s92HJN>Q*aZqQ=NHz5 zqC*ti#Z=EP6%k`L|H+qu2T3O&+MOQ1rz7>4QF19)9$$Dlb_}p6@JtW2`(J}+p2G(& z#K;-WvEkq{Y$*JNoY`tFz+}@_x~G_*c?uQ#-9c^6MGNukgtiPqxbuPb50P7Z#A1f?E7QV@esQ4M@dP-1m1>pBU zwpqN6v>E;6i>xi1y7AOBo7~xFgisCNsJL17IDIr!@31dSv~78d>Y3NZzPePH7ln7# zTDB)mcc_Z4{C6oMY&LoL-=)mI87Xteze^dDGUrTXFA^#qwv@T&UrEYLYXK)rJm;G` zrzKM*3^}+Di$G$E1Y~V7w{2e5{y48MlUOu+g&%8>(Qb{(P;_fllHF&GWZ;t3S4!em zLQ>0RQcKJMRFFjsvIlXl>Mc5+QuhSuOFrosq(UC_D+_<7S0%xzLXYuWuu|&IF#9DO zczbwdho%X3GR&7}nsly@>$%V(tJ`Uqd#B1nWt>%G#c`1+CELoJ0q;xo^{@PEG0l>) z=lBc;3P9K|*Q1s>RTlO$l&Uo?7Skzj3@_Sb4TZ*`f&#Q8+0BLlTFtKW*0Y;xD7=c! zf2=FOgV108iw2|0A28U`Y`;I5k%i))A0)1|J}ynJVgF(Qn_UGfY7YY#miq`}*cP#8 zu{wcJ$H?y1Yg?NX@YV4yW!aXgl>N0qZ}0TwF2Rya>Yseov$4A)dF2Ya!7_O+?hV*U zOhcPEG}mVN#Ws$jiup+(MK@A%I*BQ3$5vyG^>m)>$nT!6pbgw0mcUiCB*=rIW2|CS zy~5{NoYCSl_J`n<#ci-dUh0mmkk-I|%1}qoQ1GHZdt-@I6sWF~o)rUE^awbif~VNJ zg9YmwDrkAW8gR#er8iQeVv;Bh%P0^XWj4GPuYsW~)3VK3k=ZL87U4L%wSiP%SS>)- zF}<+rvwbEmNSckiaRaB}AWN-{b8IbR$Tjihars=qNdnvz0S?DZHqXrW`G1sCY$CC8 zib4SDTrxuw5dy!Srk^^BUH7blT`g7tyqc2v?H#Z7lJHxbRlL6+c6f`e^oldMCpF;e zvJVEOef`aeuWfr^FuU6#M{pycb~7Rx9UmA&(X}Rdu?vM&a@y!Vh>@q^W(ShBz#q}* z9_3YCx-i+Iz}xT!WPrb2d3l?NqH`lUL!RhAoEtq(Z|kG8&x^)+qxxKaL$C)v*sk>%8=`9Xx{2TcwNBd1q zWiK{aIGnH4t?>r#XgH67lm0h*RwZX&)tD$W13G6_3@$(~>+}WfZ5a{4Mmhr3PWeYz z2CslS3qXZv!2GZQ*Gcv%(`U_-8|IQ)4A0lT0odb^v`MyC806QrN7D0S?Z)!U_w1|r zj$*ekg@}6id!mw=Ps;TOx8 zMRvty#n2VGVl9LoWJn?@mc7n_5D4eE5Mx@*ncD#n(xWH4o5xHK6D5zQ?2~HXHkQD# zFG^?3sLbOfH_YN0KR5an-qQ1;bpi|n3(Tg;WWr*pWX>SXG3^&G^Pkp8?bVZ7=_G}i zhROwjNMc$pPlb#wYQnjoj2 zvBbZD_a!2o7& zcE_x?0NW|E2@bIAg*HNZMFRoAaWYY@h8y*5Z+3G=QY}+-UOiTOh^GnHuQ04RO+}~- zw8<2?qH!3Zo^TW0O})T)drUG0Pl8)!S9n5)S?U z=oWrs1jL2pqW0OeH@q3UnZQ<#2`?STBQ88flw)_Qb9Iu*9C0GgF$RWtj=A*!4UOlx zEkWC=JjeHm<`1w7t%QZDHJtas0DfyVl^#fXcD$|f9)?rllBCpFupQUcnslLV|h1^IjkjgUq9Uj85TvUV{3w%HXeb-nR=@V5;&4n1Yak!E?L> zLM)f%A)E)}6Um7}sBL^LnL!n7ko|5A9`?tqo($$LJ(-Wp=m{d`LByQik=D29iIK81 z?8%_*y^Nn=Ab3GxEY{x+ur-PPIL3F5?*=cI$(=gF}C2T#|`m*dze( zJmt=%q3qKVK}PcQR%eyMrE(1inJhyWv%tl&aN|y1cCK>%t~(c)JqSWn$3cyJLk$pv>Il7&RAt`rC0Yk%%(oq zE1{oDdttt3xYq7a#4y!s^y`}nG-!L$4Ms4=@pg1PN{3w4W1hEfq8*Vcf!6RH*ux4>>xDBWmmExITA2(SWhV70X<=ll1($4$(f`P>{Ljr*pD03}vL{=`4lK_PJBw>3 zI#}|Sz{3pwhI%yL=1;^XM{kzrzsVjvP5>sRF^0PE;R(Ap>gm5v}iY-lW_F~u zdWbRMBQ1A_VUA`jt`S<4PTRR=L#iR;bqBARNL1y_h*vMOzjPeR)V5FA8!UmwNkSyq zalZT@>q{jc)wawqVxmB+P1iMJb}1uvL5ABLU(OAt{B=pKg#Q=cXt5+uINn&9=PHV2 zKYDd0S^qJk`4n^eyIf6zEC@Fb(>d-*k&{~hP9zgHWvFIe6QpAUkL$Co{)-J0IfCA2 zx6-kSvE3xNqOi`vpwc+6w3M7OeuLT) z%G~A_%J4jl`+OZ|V-O!vXVmCGQMcnPw8S12;$DTcDCfDqVaq81#Zty|JXbiG`5o}8JT8vJ1^dl zPG4<$U{eLH>Tg0TKvlLjYMX#=qkb|h2k7+GCj;od&sjyPuL2S2cKb6KMcHh6GOBy@ zWc6}RPcSllHAcDKF;I8wIf4=VOvy>Ql}rkP=_mHg#NYbFp4}hq)Sjt<71Kdsp-cLa(+#E5kuyvNh=K!O&aD<-A=AAXP zn9Vz9SS*H0Bp_ext3g>1a3hhX?pE;;(rEgZ2g81zk29c@nfH2bz(rMHLx^75b_wo% z_DKVDwUj_H3pcpcI@2HmPc{i|v|RZpLjjwt*_XumCUrU-E(x(z?*m*ecfN`r&1kHxyhwwF*B7n)Z$&4ey60mj9w zf+qFg0lkrz`&g)77qW1E8dp$+>P>xlb&bjpcTBhk{6dUkA;1L*tdFj{+M#Nl6fSk_0=SDWb}kp+;3aBQ~OPN@J8eC$vYvi3=;-6kH;ssqS9OLd(ey-l zy)(=k(rp*#ZLZ(wV8HNP?AQfJR)rCk3C(>~CtF;HbJ7`om|3?M)CA%dRYmF{l&`_8w3|wqzP*LaF0U&Hb>XuNS*~xUn%>ZS zuTwnsPc>4RvTm`-yS6yUM|FC(V6HtIAjt_$8u&4Dac?CDA)(tGwLP4ITlEXMA&pm# zmfiep^5%deMFY*eLE=F8c4NtI@~cEt6N3mv=@Vg4lg5fYOB`aI1U5Vxi(DHNz8#In zp3MCj0BB-T{9azTa&Gii<>B7089iBT zyG2jLq8Ts&P`mHC2GmHKN?h^-PAT~h2Fbs0sZ+mhY62*m<(-1iKh=z+a-i(K>$+Bf zMUAJLE|Dhbo}$4C3WT?J&`Ee2q~fkOqPB04yB!YSm#B#kTCl{3t3P8IV}x=x;-G^b zQ*yMiOKn7F#oV@LlA9T*>ZKvFvJ=B={1WWKHMVx85zC~AB!A6N=r;Xv`fU=YnhlnH z-$!$oidm_}?&|JG2*eK41eT#GaD*JnFpq5+uZf<}u}Z3!$f=}4{}+=5K`NAJstCvX z?vxWc?@VMl)qMb&xmYx00BLp0W^z)yj8HvpRipOBL{k8)|BHcRUmBw(9q6?MH3kE@ z(Fi94#d*MUS5Ki)1Y5##~FhUk^y2Wm3eT^hN}m1)`(fFqw=SLqb_%QF^rGokt(1DLxIq9K3m3NcRmUf}bn|`uepNXIB z0_wZVdSS-&12q`=D6TR-OFQrTPdw4q^Lk?7-wqi0;CazrJx|$?+^*hnz13blktR3l zi8R@!C(>lAo=6ijoRRouI3w#1%Ya7KKM<(yOnfSVUVwWSRoV#x`5| zt(95C@f~5x##Bw}`EXB#HPyhbnkn!3B8mC7HKM3uwQ3dpu&T%gqw?DAp>gvb%WF3v z11xe|Ol0IW;NAh833}i*yx=XJ&kNQAK;{dzK6 z*r%sC7C@YWTzHrp`|R|6ni7HhsAHRt=<@&LFxGz#JizFHZjs?>&qMr=4} z+%S~~OlI?2HT!_&=2w|N!Nv)(!n*L+uD4Ilq=$_PXPM(g*{xniY=D2QYEv`+>jjZEtwp6X>gjo!V4F|GTtp8?fOc|e%suO3BPkS zg%@*YQI3X~Gm576>Zg$(9VxlFm?gx8p=ub!w8#57FR)MO9QNI z`Q8Go$gyBrVzE)F4@y3j{eN|x-gfqJ>oMyA+y~fe#IRVmDg_Eu)jQQ378{HB#hy68 zrp7VwLEON~4iPQi7_OJ4cih7oeHK1vBHJi?i8VSF>grWpje`dwZ@KgbHX2lMo)$E1RG*}7fqhHo~ZX9eLmXvu| z(!M8qb>XXl;bBQK`DTVO4*-^$>5aEr5vZpl4?MjhQ%^_d0`0IVI!GncHH))c{yRNH zy87DA?snX$Z*rivRZ-cJ_a`V83Qt6ze)74|n<*@~_CNW&XqVm*FEeF@EqBT~vJ_~V z>UIBl^hZ`Zv2j_k*UIh~p32@}1bZY#g=8$2od>pfK}89)iDbtU z6tpO(2#CDt36|^NS~V$RYF}2ow_+xz2Ge7F7SXjYP#=U@)Y&^gAW^#vB%0}N?u~|TxRpMC=BtRnq53>y<$~sP z+w2ZKQTf~SgkcZ!-H=XfeQ1t1PGc^8i;icnda?40jux{JgO}V_<4nQ`Nika7WM4(m zZU9*MU;vD0Fm4%c8UTTxjQ@?F$Z-?(C|?bT=+7{c-60zE=J~5;+ydyR$imu&1z;cs zHZ-uRcj0X=m;kYib?;-zYQ;}tRy>^(wPr5XAxF35oVasAZ6M4O$GCJEzSyBv^CHRq z*0iBS6a0CdTI3a7;B3};<;r^V&detGtW$&=?bQ<%pbMXp9xx@HgwXbLUvG za2kefumQ$`4X}|V;Th3`eWeceA2dRflgb#$#~|+(tT9#`AYud#w1PkYsmdbsbO7@7 z$|mr1Y=W_3-ssvg>ssttZm2krl1`(9Ij&pTf z+iLJ3juq3NWCrsp8+}U65K*O-_+yrK&B`?(=p<*`C8}#-BP&mN+knD8;*xmP;KlP5m_<}0dZWezY?|TF zqfV&L16t5CUcLPc?=#+%#ru@a`w|c>61W(1+!b@>MC@lYN;h}`eSQ0vZR{3L16$DI z0#EBl+0f!?Q`v*UlIqwlG*^@GWE4-C5!7ucn4KE^v4W#JjnrPpPj+CWI+4t4^qIKw zlNTysfO(Hz_cUA-BG|feUA8Pzl#nLJjTQ-Q1-J8hy$UAhMO*cR+@@7n)Q|>CmIh!0 zELlVS{*6w%2R1TM=3;wV{tfGEvX!UP;I>xLR_MUArQj0La8S)wB<^7w8kj>PEjyT} z*}+PO5GIl%X=w*r5_Yhjd^ikR4u&)l3Z_%Lw1e%Zjke)`fB3zRXK|AW6;ac--40fJ z9Q8C-+P<^Gjzp44F?x^ma+y^YM$QCPEv4;-FIg1C^<|ToV}%?TYRzn2y)2bw@AbyT zPe_BdPHAUIAzsD8?0CGHwN6eA^B2VrQn6JZul^zw6vJkbv&`UKdJ(no@Z3ON*}>p_`_nv--Q@xjttUQKi6w&Y<sPt#znk9Ir_ zlG3|K>S;OdB^bV`MvdDJIxGXQ^z!k zuOoGa)BC~G@KCg5Hq?eNosJ+eGretTl)jONK+HzN>bpl(1~KSCbIx;>A#5Gwq^4#v zQ*)AU)lDIK)sVUo0ZEXC^~-12N2R7|#a2F*5!F(g!Xb}LVP2sQV|Zbq1WZNHy`^qX zI^Ry~n^5LBE4UMMGIyuS2ENW5SRJG4>X*C^L+p}@vOB_O_Bv{4jW!f^Z7VU!wl=Sl z)jh=O^nm|>jgKguq{H^a*x=4iIDV^gbhK|02PyBxO;~E3;&6K^+iT*rQ_Rqg1SfTB zJn*YSi>jq_Can<^%DXuji0bE!>{tq46O+jT$U76se7k2`!8*m9!@R;vP;H0d(5%!p$j0n0OJj0)rqCTEJZPZr2o4R$bKl z*0i?drvC~HY$S~Kh(^0~^^8=m9=Etgip4&QY^2!nYeWF3h-dW-%g#`;ub6}z!N_Ei zv4H{-b$Tv<)v~628>TXoa5hRK=;+lhMhhiRP+;S*wls*qEd%$3S4XM%7YIz7 zlSN}Hl&-PxXW|ecZ)%m9G69t*R(_K#MeIkXYt@|nuac$(M+1tU-TUKk^st}TI57`8 zF}G@B?oep1nnLUwWDZ|#`<`R}dplr;lR*jYoyy*C^ww5)aWx-$_58G1^=Ub?0pC0umQIk%Osiy+Fge!>i7d+crHIUx$j&Dkl?#b}^$>z4E(~aL`si z`Dpprl~~eMyV${;>^&yb*r;B=GcVR5L+ov~rBt@Dv1?b=W0u;MzT0|(o6f%>AJ{Z} zLyzkLHl;UgC1v_&>2;eXZrDn~^z@Oz>o%>q!Ct2iue@&4&<$I+QXsxT77GcyuiWPO zl>S)WDV`5)+PH1&)~#qk#VUE9Ch!_TJ;gNqh2w$Ldu0}XN466b7h7OZ@tc=t?usjZK?}T$2I|fUoy3626W6DWs{C^DE!)BKq|}ztRHOH zVURr;TT(>r1pmsG)dIzuu5WILzr3`w7!+m1v#Lo)n!`Gjsv zC1Db5`oLw$q|8R`{^Ox|bpYh@C^Mw>!NU9*1zJ;RKINw?{|7p7s(j^v!S)$lfe`Y;ggcM&&*2&xN^71Qb>yY*!DRIyx20Kr^9oo^J_R|3p?jqJ<~Op zvHX0g^%KaRu1RFlk@yt0_|ux|04@Lj4PiYgvMVPeRwlujZCe3{Nueug5S-Usz$yQR zBT^CNSNOe{0ypZsu|Z>;>)Q$>){+&kJ59{gwY}BX$-L+$$)pyZ>H$>7ac@@_$`G-j z9W%V8n#wW!x)hXV-36d85?j(J^h7d12&YDxx|DwNei6XtcsJ3>LMA3cMC)&E%OB2wuPm2*l|485JSRaHBr|*GJ#j;C^ObVhtM`Esln1spbx+e{ zUH4IXtm!^lkJVj{{L*+lMvqZenRpC!*Xq&gavO!lLuXe2(u_z02$^Bpfv2;2(i<)i zv6Cb`RV%yFZck6P`JSOC?&onTp=QGyRU00u+we-|hUamI>I}zc&+*xHd_Jc5 z^42eZk{LV@=^C9thJjhQDpUn3j5qzFj?EJzT=DDLR;B$3x?fYMP6Ur>$^VH&wmwfzIc9aDA zJf-;9Pu@KXzUj^h(dX>}pL+v7_XK>-J+koUY0iP?1pZ(pBZ(xNj z;B#g1)|Vdo+nPSp;(@PyZ#z3)PZXc~13vc!eBKrCIseGwbN(doxeh5MIf-K3spndx zl%52^?$GlwK^|~2qRE3t2YK+QAP-J+d9d2$0im>#ucx>?AW&9P3Qw}66ydXyQh26B zo6{yWmzSW^TTzeV=;_o2|JKwc|F+ac|Mt{m|HF}0>xw%+{|~#6<$)GXFK)Q;M?d9v zpoO)?$3J|-&rsljw^kMVKlYv(cw62kzQ@=GT3A!O{Y9VqJa$2#g+~_$KmXCMBUb}0JgWH8%fImf zYn$+t;u8;k{m1-1QCi@15`*w?poIqlEf93} zNZK%mPJ$K~Yoi6m+Gv5XHdzvGPFP&a?SdT16r^N6SR;~)x*&dS@DBcPk#XYU)c+vc;g#x!yc>b zh0lKcZRb{EAuay?bGvTEJUdZR;E*i?5SO=^vs?9~?rENnpgD`T|AfuiUtV+J`kN1a zq*f897kfYY9h_t(DXcAyeEHqqL}gUw!Yg09_?nY2#W~x`Xklld1rB8Msp2C`3oI&} zFfIJ@nhW=S<88A<(^clehi{&JZ|ydCbn(ttyyRs}D=Ks0`Y-N#B`W1aTy;gsS{Z+iEK zPhv`Wd!U8Affn`zTHqYNM^Z=3odhlX@|p{;Iq<3NwYz3Tv1|K%dz$9L_21q*!x1il z76^r$fBSVOVK1-=z~sWdKnr&TT9|)iX<_~(XyKRFUU=1CyzpO}s~@W|4_fs>$xUtW9Ry{|d6 zujv;5?lpoL#v zd*Qp+-?6K9L9Z^p_wk$Wu5HIti<=JJ`j*;uJf+yS^_Fk&`$TEsNT7woffgPJv~cK= zr3I!&Cu}?Z^4beOe()#PGcN!E<|i+{{lz=qi0xQ9%!?m>;u}B2wN!e}i+}w7-S5SA z>~o=E|u$(b+3=|_*(i|(`TC*p{QQrqu!=TkLs2Yf~AeqM0&9(}+ zt#I2569q0%4Mp1GOySrH6EzbGv!~>!MnkxbV>(r-)JmmZipCg|qgqpUpQ`8&K5C4- zcOd`-#Ok*$3>HKh9_tamg?tT@e(S1{sPhK|%jnle0zY^>NueG9epiU>?J4Aw@UH0G zj@&D6(Y7xHxhO)iM*xfm%UN_De*oKi39PGaD7bi4=eY`&5(FYiaxM_(F0;<> zhwhDg_a;L3&i07PM(-xQcN=+})9f5~@u)*fJNKl{e^w6wM!_ER!Y~~M(;(E)uw}wS za$-Xb2vDGiB3#pes}P~HngA{90>23jyI#wAovcdAu3MV0b!oz1Si)*6qM(Wzl+NlX zQSUrpl(3hT5(TQ9IG^dn<9yb3&Qt=ZghU80GJ-KG+04m@mkP&LHIL4xlX`!eckP`Y@0@{XNA)h7ihEO05Kjzd3p%C0D3(r8S7Qi&FuqRzo z&jE7;3@gZrN2=1gi$0I(Up|$6QSf#Cu-;Wn6j|bBsa3<0y-DB-KVsyeUOHw$<*|tY z1zLN<)rsHYcw;gFUE>WoqbuR*VLD`RE@r-FUvNvy#DyL z%#!6R$Ir5lEPDg|RYR|}hKvKz)P@&eJu?{j7+J^J*BvyVV8nkGik@AP?>TkRet5F|)<>Yvz7={~ zwfBs=P(uh?3k=p`&5tH0r$NGVVG#r1Edc-mE60tOA-B+sj+O)8P7?(b6Vsz+l3BM_68O2bpDW3 z|EE@?6|FdlQj1|mC|MqarJXZnKX~Po&pN&QLHd(II^em&s+nnEp?QM7u)sZPHtG|}X7@+t_Fnj$noYl z?M_MvXOm-rXr|*_rACrsudYz=v9e*Thl}knjp33(AZz=0!&U7jXyUQSe!?S{;srcD z`&d94In@WXBpljO0r{{9s%GgoH1K$+aSnh-ks0qGb z9*Itk$HO2&6oKH2O5~uf#b{weQ<8nU)Z0S})Hg{a1$15{dBe}JiwW{?D(R9=jPEoI zarQ2W0u8E7kVmuI{CCX_|4E{WEo*vUNEHz~(&z7-j_5O^@ZG-WpNIUXn5!vQ z-WK<9ZtC50(MGi~)zS}b{ELetcRcRt$On_F%)hUB#u$Vt5VSo3)UxrfmA%uT)I`;b z@d2wb&fZ?8N49?f16QE9#V&|cMakzYJJ|tYF=C50Resjr|Lby)TEmPnOl^3l;ZfPA z!W!f0BCi|Ml-Vq7N@z%yy2Z|~N7j|7U|Y-dRf_dT;Hy|%HeUmEQQyb~lsOlcZO&@+-y$uW}#xRA^0J3vKlNsp)vWLs|V08lj?W5co%$Bvw%S^k^2%*5i zB%X_J^iX$bQy8S9bjh(*-W4DUknBM7SY}Q@q4SP!+Xvrbk}&Qn8!`X%8jVejW*iU~ zVUAnQl&0A)wow?QiR_I=OHKXLFejRNA=K3{@7)*WU?<9NhTFtcTT6vw99DXY7&=HMLCJto7DK|Gr=@Kd7^97 zWgpvaObWd}fNl08_T--Mn^!kEs2$_tiFhE`%$>0R+6q^<5?Z+lZdI)7ktN~vB$MMqGR{2Cm_B;09>VlN$$+g1#-kVWn>Q6sV^uU1%vr(HW7@ZmmRTgn&fPTIq z!}=+yf0j|A@N5w{`yO>tw)zKZVw6Pnn~jgA;Z|2kczvQ#$76}_Fm=e|C$h=OFuZX& z3~wwuW3!Gp4AU{Kd{8s)4D!{uc2gi4YAWP}qQ=ZgeG*6O$Q5u|oqJ9jegSuC9mn1j^df(h2eC9&(0&kX=atcN~bg@@%(= ztMh@zIBIiiLm7$LB0soFh!p>{ifdaEjnO6w+XXJXYv9anm1Hv|!KM^I6MRU&5s@Hi zkr_O441uOUtFzBmp8#;N+^-CyTJC+-4p`L`W&nJux2wLrRU79`bIONheZ*nE@3kg` zY_Q77eN6B_6Ozh7unC~}t{@PnhYrhbQ4aLG4HAlQ*%D$RtMz_d>&F^c%W&wSG8}%W z4AabRmTkho=18i40oVta>K~&{iJ?*yF~^GHq{ZwY5c|5C*geJULMM)r2|$b;rB|W| zQs27->!sYRrevXd=4JlL1YA%2G^SJe7#{Y}nH&_)m4b{hYToy)N}xpwN%1#)Xq|U7 zhXrTwakYv;xN&y7L!2j1Ojd75bCQvnVx$snmQwPtm8x7N_^6ppgW=DWm8jgi z?Z?q9YR>AUs5Rls+BIQMH>_}ntdFowFZC04DJlbDLnCNMCvKmHm)fP$ChA#D=6&TW z)e}@vsXK}$*_S0srDi}i$$r@kO|oA$LzC?LG8l2HQ%3qf$4)hw;;0t;m?BQnsMN}( zmgY=5jSv=yX>FqqqucBQf%?lj&7~%)w){zdeyoi5Et|h=FD>&^`Dm>v4zs>u_ji|U zZLN`7(x}lj9MZ=;=I1h+G*}wUgUfl`mEs@QCQ`qmH&%2BAEaS}=%pN$+NAq_2Cccb zX;eO~ZmsFqQgw0m5$7Q(Ce$pdB>UUo^ea6;)@A_wxK-VCQdRvQQga-T9?ZO`nB%Z? z8SFvWU|!m?)9k9waa+Cnq*`s-Sbf&18U1~Ni|MM(A+nEI3)s0&)VUH9BqNSwZk2*d z+S&wJ$*=aC>3Q(<(k(h?#^ni?W^M{*j%9+_ZuF$SLiC>-Ciis1S%c-np`@!Sr49X> z(#~GtZp?q7C{}mTCfE=kcg)yiWXIYK1oMC;N#?iegY&n^7O5RM7Xy#?F?h}0CgmZ! zz};R|gSBhEwwyIzH**?OFT>Ffsc`I2K0~?Yd#J&%=4pdjktH7N%Kh{Q$73v~%bjRn(voP*d+L31#`UOvvF8Xg)aQw>1~Ad zlv125Vr@QfM%3;%%uknRM3tGfm!O%sng8}>^6w=7%L49yRf}+;_W7vTe{}Zj#*mfE zhl*?CkoQ_#eT}@T0yybNID8U&z9PH-QFnfx&JT>6Qo-v1zlXC?bb93s=YMc?L$<@( zi|pp==GAPtLO9LZ96K!K=^T~$s)?61W&#JA2!`?RAG3K&%0k#B#r*@CRJ+eAk&A{Y ze!U8or%c##<{0wpXjyuR#U}-78rB6T#J4!sZOKcVU}TwxJ!LI8Ee>#Zq{@r$aVKS; zZwQ|0$8AW6EKX%XStC{{Lg>xPWGln0n?A?CQ9&zvm6hh^k<+yXY(}7}c5!V5yd|1l zvIa(`a;?oo(4mLQumd4g(ozXmsU@t2oez~^h74N+$&@v`$GdOnC>BSivJW0F!wiyo z`3%dLDJJ>CS{*^M<8HA0G^u?_^Bh-FPvaT#b-8(U7faBg*D$Pmi&hy*ni)<$E-perUWdu8O&q@kV1>Uz*Jt2IRm z1Hm~}4Mj6wo^#gO(~x(4$^h&W%%N%4P}vt&>+FaZYAW4b4qlvnG>}axwOzHE!X$I8 zhv|!XPCvX{{s8s~Na@E%aIrMMLxe%+7td%((Hpo!4RrozpNB{-_mWNK)3WHJw0vK~ zv^>1~gIdCAZjQg|2W|qL8Y;J#9nGWr4fxS%NX{9gTJ7@Q$*$7t%$bx*zcbXFI&XHc z76gzjWZ*BKvKuU0#4i~0+E8Yu;*?REq@yp?2PVlJD_I3}%=9r18{EmaP5Er-AhQE3 zQFQ-|5rq{ILFf70n`99}lEBHmagU>iRUc9#1P-M-tSqjgQbhAJ z6_NetTCE)FgOq;0)cR=+QN~pE&6cDpfHHeY$iO6Z+(pJS>*{2awmezhdmzRs^l6Pf zKUpjD#JEDOB?jCQsk0Qf4{BgK+go)5eJV;AV`fo?Q~}_eMNTX>yh3D=4ZsI%fP;TI z->?BZvqriMvruLvTF9Rl-&rO1b8=Twm_nm&rZf$Stz0>)yXi?&$_P4)x_exJ+(nutMGrhNQ0h zJB{2C1Hd>iu$4`8pdyVwtBHX*ZlA}s7?OL{q=?R3w4q1H6bo;xaUIxsm#A3kB-*6) zGj9EG{?Uq4$(g)$sHQU1H`Xo7wN%LzB*=SBf*=kc_jd+qQab?@xPcrC728|qPwUF) zMmz8ft62(oVPQ;BF?J~6Ry(;&u>}}?v}!SpvcD7v*;p9mSKE#+8{&=iEd8gL%+*v= zb>W`I@*R`nstaCUYFb@9Yu(QN#u!%)XL+5+ds^7n8)kro)NxK$o^0-tU*}-40*LCg z14&tJD_8YtojpY?rYRJWlfCGKBJl{?(4!^&nJ5M@Gtao6yB38J&=6{J#_zP61EW*O zoxMwTP*jK3F;!U*xSgrmeyQn0VxC~xJj%YTOthF3E4TPL-f8xFv#EqLW&4vY5>pFr zny*AfTEu0^K7#n&zA>zjsZp_$->>KEGqgY%aF3@6K70^u28Ys8xIu~QFpLI10`Pb!Id3oPNBm~Vy@oUP*IW%gX50P zLC98ZW)G+ZqT7*4m@G=>DcWXOER{}JYIWJbAoixZHYo3QnUh-}lCyOHCx^qHnOvwT z*Ps?>XhZp}Yg!NcL1>QF{k#2D(*xF@>>ddz#&d8Yc}mY7lRe<(YaVgFpQR9rt(_8N zAxayTWl&P1XA3kChuihZm$S?d6>h$4zPRRT*&EF~NVi~4N8)$QPpukfd*}CL5;nhG?w$8&i=c30}W z4tg&RX0|7^@`p&D>>q^=WWDMZmIKF!(P;sx(RVmOdQhzMe4&`EIuWFNyP~Y~fwE4T z^BSpQPAuY80G`5*0}%{7)yPH%ZbEgPA%8yA>FDo_ccbhZdUh`4+a{6DGz^tfH_Nyt z|IE0xLygPdjHQg`>N}m4LG8agkEJ5@KQ7)`X;H6vkx8^dp4qy=kX$K&oMUe=R9Y5D zF7jEq$#KR+(egB_HF$ig8(xAOxNNbt*I-eS$0 zKa^Q-W>|*x1|bjdW@LPggpmme9RfuB2s8;8@x!6PPB1SdG~j>|8|WkkOhQ737*N8m zP6$T4@X&m|dso#txBIqifsvE-j8UI^s_Inj+O=!f-n(|~D!**+e>RbAiXIHj{YY8q zDc3IqDeRdp@!InfBhaRFj@~5mbV`INc&jOSuv30te|pfqrZ)osZxC)Nlv$CP3NJM1 zh(hga27CAQfqN3V=P^YgKInCIT}G}6HCe6-Kwh94tH*v?W@5)o&?*#prwu1Ky}IxB zUugEGVX3I~lGasP&@^^P_Mj>PNS&0efwifI)~Q_AN=0R|6J#+LMNHa2%Mxh=E$b(& z*yRezSe51u*^y9aPsufbv3Oq6G6KU^mwZ27H!4>~nMLDxv1Y6$YPFI3qfypuE$h!R zFH$KfpL>A{3g+aCnL`NB6*@@t0^qZE3(Hzg+;XxIE{9urq z#J_@}%p9WPG#6iIMV2a&b_n*?v}l(tRC3iTUpS8BYFhV2ul z+pv}(phnWR4u$nd;%yGVb}Z6ZBZ3{9tfZE<-T`lvA-f;wrKtv)@&v$wRrTH)C6mmlnk>n@U&oLh8EWWLmez8+zSxoaFqdVx?oL$ zIl@HDqM`yLf%=KP#lJ0IXN$e1B$aGZl*1@`!N4~oDDwo*-$RbL7hk+vs=e36U%vCd z0s)~LWNMTCMJj}V&C7pgDd4fUkE>Z5==RS&!2GB6W`aMB zbv4T5xJ1_zj~?zx6EAi{{pb5h?Jx`dK^`0eh%dO$rYrH5n}dU(RwtK zOO_ceEatbU$p?b4Ib71(A>GC%U->D~EnFt|rNFt2Wnq1=I(W_!RQ$ep6^H_mpT`uU zbr(*Po77bdF1^|{(}Fe18wIL<+zw{Fl&M8v<$E~v7{Cg)0zfB$qm>TqahqgP=SiSf zuG`U|ak1D@aRri8Bex*=uNFApK{0p}oX?QmTv$EOKg1B6z*$7-M|W4v^j4Y{T$tTk zj3~u=zGXn=1I(de=zb%szr*~Kcv)Nm;9Yt7PvJ9TMqsQV=oo}B7qPQM@#4jnQoi1s zR)Zu|SI=SfDvtzs@aih+H9jrQ-_u#F1LM0Px?)^LgjrX(M}%3YzNQ2hRjvYiR$v}e zjFT-~HRqz2?JT{nj0yp`K}ddVp`|p7;`$k{Pv9_7PHf=o47b({E-9 zOi_yZRio81H8*_eyYBt^8{d8Bf2DHE4wX#t4VCOr6+39I>QVs#2Vw;Yj88AT`%|C! z{3|}V?*QNiDCpOFKl9o5e)WzI-*MGJ+Un3bu?9Ht+>73{@WuDP;_$6EU3U;jr`6kz zHLM~+aC>fe@A8fFD<8jQ;vgNP%ZhX`L-QsW? z4MyuEUdP>_soG%07o&piKaK42tZ+`heX&c|Fk?5d=X>A)-CslqYHMD!%X>BE@G)6D z7m$EjgW2e_&>q}{vCYcKn+6G~7+iC8`M3JQR3;83+|~A5*x>h<$oCo94KAwcaO^;?*9k#4BgaYSEB> z7LZk9e_MkUHH9?w`?4efP{!|9+V56yNNAUzw8m*SEgr9EaG)Xhi{cvJ994aJr~^u` ze_MS;`6A;aFkH47ymX6eG_4?+V9F-=jR;Vy{G=>Tx5bKLjE77I&N+G;N>{cXvY@|pR z$SrTunD#^!>>N4(Rjd2UnmJXR)&^&sKXE~Kk=#TqTg~G;gJMg0c()ajMWcIf!H#?< zhFDl`BFYAmuQ+F4{-)7b-1fK1h;zW%-14LlB}&d=>6f*RXv>~}h)hB&%}q>j@~}Zk z>;+3Fx0&d^1Y~ij`z}?doiZwdS6)&qWC-uEVJjm7f49${P*5$t3?zGtm9DhY3ZUde zDcNqi462YZf3P+$dQn54XQcZu0BgB*p}n58Jnax3j?N z*70H>Kj~ud=1j`H#Ay?bUyoAroJt_k`|@wpO--3%@UID!Nbjxm2{(4O_5*-T7n0RV zt2te$ntNuLO1Fb7Dg%`ao79o~81syj+o2|FO>MDJ?ZnhQnb*@}wdwky>0v{DgHX&j z(A%+hEa_*OH6m+el)n|oVp(iWfi%k7Ldv{xFG^81KqT$OZb~%qU+IQ>(`qc;lm(?X zE+tew420J+YduT#?2PF1;NEAWyu$BAeh&^&zYwQ(it;-(S-lLV zjEP=2Bqn*@r+cP=h5Z6YvZO8-Xj50}EeJ1fO_cXIS&P$#0k~sCNJ7mB3@S_|^wGOI zno5j@W?Exra9%~-nPOhFTr~^CryU?WH>|Ia3vTq@kVqGN4^rPjr-PQe%TT{doeE^BP?V2aUc+v$md~<(LQ>K!$vjAO!A6ze@i_ z1F0wCLhCxCbE^f>4)}wLmH3OzRHajS8ZM(Mk`hq`{gb46(1g%EYY~IjUqTGa;8@(S zWR2iPXjw_34o=JI$mvpZ%@}kg;@%v5a@bR1)(KBnw9qaT8-QV#kFJX_%r#FPRDm)qaD#+tIf|G@QYa zkz8vux$VA}341*wB&hi@INB(y1#IT(rnWa&itE_}FWn8_)$9YKKnE6Je?c|{9qS}R zCSn2Nf@|tljj>x22HKf-^S8L56zVNzvP&oBYZ`=s722M_K#$Jl+yZc4na1P-SoJAYqZ zpQszPcOU{_q@6)6{(9G5LR3;0qHW3zU3v<(I|An zAPoiX-mrjSPE|wp^hkmbwFDm+W>;DX?`fcJ)NzrI8YkrYYf;CFl@Iz6b&^{gd3|}= zW0Q0wstDy8r=#O{-jRUhVo%OG=`Qy9o`T;DlW!`k;c-Zg_0&kVwnniQ3q`D1FPc~z zEfBC~`#DXlt@S`>*RvRe5v9s?BN}T>Bl`c=Y-@#;D6G&_!a$%9Ed;rZ>6feqipA zXg0!*qnk=C)<;(Umg<7en|GE%Tok&H%8Y7)Sk@rDOuIk1*}&@iOT~gJ3(80U4delD z5W{hP9pr%XMO(Mn4hWIwuT$=MlU1$%LZF9?&s)!a77?bd-r7YZ8W@THw0sWD=#8=I zr$zP{?phbr_{kw@O|xP%|$O##`lUZE)xgBVlN=j@Yk}UBtW2$zsXH>n5yC&IS7o$(;TjzL{ilhu?#OR!i0Ng;tpx`rLg zsoXqCq*Q-K7spbrn%v*#&d`hb-K}Q$TIM~b`8E7W8?y8#Y{-(shHM{x^t{2#-|+qu zt$md9ANVRLBY)oDmM`A#Pnw)GlIoW7(vf1Qhqshr; zlMMe(HEGoG1b!I>0Lahs+bDn%SEdqAt{#J6HPSs z829PWJUMFqfhE{$X!5@H9+_k{nSTG%@&z=>O~G{dkUEUl#eTU~Ka<}I>fAS%$Ved1 zA$5|%N`0B5D!1bEhAhexZ#zR_4pt~+d?L-+Ez}Ro_n6esCdJ(8X7k&!p2Z%yH6!LV zTK8u&+^2ZnmC31jHebwoGkV^cak&}KcV=96#&aQqQ}Vn!!@-K@Qr3h2&2lj=tdr+* z21Dg}dnO)ASnZ4pHF>^1<0fXF@6T8ecpl3Hr+yvD`rCHpE9%63qJMh>{o9*Uc6(#W zZf{Q6?V7T8Ial1?n6f1A%D-cnyDu_(KpU;js?M&q?eFvdvly^@1OXdn(EY^z{lwJ1 zj~VxX!b1Be)P9%yyn$dp0Nm#Y;M zXBay)3OK6{&P;`F29k)NUs)5~S{_;7w{>^jAAsZG>2F|2bNZH;L2LY8mVc8wa z1}L(x8RfL9s;CpG`#NydLikNn(-9w2C zL|+BVhL`gqF_*{1{p{JeGD)rHOc8DXx|l)h4iaG7T=h502#IRlVsk*+1_LMvCCj_3 zi~-=P4SFMI;2{mk*^D-mk$+FVz<|c#@Rf^8$-L-PqkOfFWTkTswKLQ&WrbWWf`>>y zpL^nAbG?wW(Oh=JAp@o==6?EyDxZ@gXaBnnH@RZ&@i!bIF}ndbgC`z7^y14~Q)BhP zLs@M<#YCQYADAmS3c9@BD^ySSHIgRN&j%F?v9Q5d1pi2MFO>`fWe7s&u_Wxjj9tW; zCAt1X5|Ij{Hu&0h)a#4UJ>GI07;La#iyH${X6@8f0DekKRc9esp$2{sT_S5shGsoVGWH}CInf#i7M z8W@Bi(9$oftz7A2d>SGX&5-yPDXCDA3&}2@)#aE-x=>1?M0$xdO4j zf3EJ2sV4X7RvF5ir^Rrqn%_}P>n0j%!xABC-zQm=4Boa-E%lsF$!vfBVN?MC8H+Rp zs_pxMhq}1QroRo0Q!80nbsqKfr}pV@woj>3h;MXlJ94f*RLy*7eW#`K1pPKa50bEk zR6yE4x7rS@LfU!N*;JzD&#t!Y137?A2BOD#e6@+6Zar#IJD_v1&L*I&Ht(YbR)3k0 zrYS`4&^7k;!QOeA&RIooXi<};MWg3nAdx^L%M6wZj9}Hde7b`!tB{u8E=`xbbB3il zpC_{!sJ4PTcico5G7{EZJc0?APku?#*`xq_?dv2av4&<9#wVS^)5?i$sVbh;n;;$L za?P{QkRp}m`5qPuG+Ye1`5wwEK%|J9lW>~t%p$0yYQJD`@P?P|0Dg`+l3;A(n!)Pd zefTBU?XyY;-}&}8{x1M71{2o|maac|!vVb*tU9@?1zXcCO^FY7xY8)Znq3*$_`@Zv zaP<-1B&H?SQWOmT9?e!jvl zOUMABC99f-wHB9y39p(S3TpZG5zXC?GZ%ZrI5jBPR~L%N<=7u&1s_!GPs^7AnM2G@ zQ@O$Oj=X#+&i;L*Zx!=r7DC@ic^AeqfI9~#maN6D_y zGKC}n+8P;M%jh)aoK5u9Wgu*skY1y-n7btzau&Sl+}&px93yK7NCXBCos$tnbQmWejWbX0~xxAA?WiZ_o`A?rbE#+XNH z>(-Hin7%?mocvRn+egaGXd#o4#0&t9PEH6{wmNRs$~Vah${GQ!)OgUe^2D|M&{7fb zfI0xNL}c7G(m0Bb8kbcR6}wRhn87w1DuEZL@9!D;9*^+4A%)?o3;xSUL5z2y;B2F^ zL+`0a#x{rAK~eKvtMtN5>% zI+SeX zGu0%?3Q46=Y^u@Te#A{HwuxelNTb*&7AL(}yZe@6gpBBa*dZf&dcwsTGTNX}AfuAo z3)hfL{Xx4~tC0)?KF}v433a4(xNMXZzjb5g#RG^#k=`JF1!-Jua_57z8{ zF-M~si^PuSubIgtY&>hpOoP2{hO(#rd=?g=H<0g|*;s#VGmmYU=d+%(;QQPinPu!A zKOZ&Mq!VV;dZtNsKp~n1Qw23NGDAgZP*Q{OK^T^VR<2U*E`EE-6_cagMUV}3=n&tN zLc($IKINDBqbMzA$x$*L=rdgnX+B4qN7$B~1cj`;$s|QS4(b;%cRdAAsz#Aqiq=qS zj#_fvz<#;bMva4|LK3`JNU8Fzq3U>?+q{43cHY)#CwR+D-9}SCuJu%Frg_(q|q%?rtU~H3peUfb8>{b zxl=>Gh#jL7z(;=y&i@_X;z(~05@Y8F13DJ4kq+Wn5FN5T4GX;Dtpz7-Pm{FE%o|CY zRod)m8gBm`WZ;osT<-EU);ZHxS%L}#(?I%9s z93klFfJCUj(dbf2Y(OVxX@{iIjk_%oR5ig{Nr?^cj;F*Lyupc-*r;<@s3FzaX#H?X ztl?Cb_S*3W>(Y>;5XeyBw z00bB&dewT?pz}Q072A@}Y`zoh{S_Z%P(Et|CV9a#%J+H#ZxFzn!*Ie6Bo+pO%%OVT z69MK-3*OV*Kx#^)i>+1t#F=_9XqA6# z3=SKB)(K=xHti9N)E;ib+bNCh74ftDfR!_eNOpb`k0`~pLMjh9fhgXZ)vY2W1Q}QY zoBq=lV|^*)$&)89@>?N^eYVl1kas(PvZ2~tlAr}w^v}dpL}c6zzK1Ize`Oq;6{vO8 zl*`^>Q3Bk?Og!!)EF5Sn32Uufhd~bg$BX0r4icjnQ1MOeCWQ@}rB;I%XmqpkgDP)G z$uDc+61xvE2_e|50)B~8R(?oj?3m1Dt!eDbI%B}6AGW4!(_#l(L&9CvzJQ0Qbm}P= zFs|WxfSR8BIPd91i5YMi>cYd4LeH}Hupp~5UVnYsO@%G7yxp3#@yFC2#-F1WIy9g| z(MyT!zLbp(aAj6?^?+kZ*w+>7K;B43>Ktf_$bd!yIwUsobDFIcJFACeSy_NejN$yg z_({43RC9nJY4*8Fx4>f$gWF}T%ug3`+zqrUOdx>+^9(VArlr|CFZIRF9C&f9ApT|d#;}Jd$abhSPxFn(hhK1)7igcrD>AV- zq_>D5WYl2&?3mCz@Q`gC?cPHhf}kQMnE6|=2tLhji4CELMFN&d&n(<()9dSgM9Ag=#eh|Frr(xwkp@k4shy_QlYI06 zCiBq;?0RPI6iN7wpWHU{+EW>F44%sF&0l`abkQ9xnp6+X$wuI;T6*`EjI-@i@oam8 z&2pAkr)L!fM)XJw7VQM-!Co>!U9=OV2m2U$Z}n&NP9&JF84ASD759amb|R+qXLPJp zn+b$lVPl}`5GQ3O#Bw3t0e-wp3L>ary|6GV#8EkLKnIi{-11M2qKicQ-J9}k%G|2d zZaxPaKDkxVV{(sPqb)Rn-v4IgFkC+Q>NmZU@HTXd#1LmDlrH3{viiT9lR?u~!{R0YLZUwDTi*btA-3*YwQm)`QRSH1eims#YTP#UBG-sjE3ga| zQI0P>`b<7|?7x5W&iDM|KivC`*1>8*A##K~ro2ii{LDv72DcvvccBp^r7$_y#*OO{ zY~=bKLM(kGY*=#C+lIbBL2ffcGOmWdKe;9YsZtp``crE%mdLQtpc-7+>NYs%t*R@U zNbO36QW~|VwB?XS#dVrj%Al>ObQlUZD@FHNSLw=_N>{wn9qTHcA5-blm`Yd2RJw|6 zi!d_G!I%j3|9+t^q;T43bZCWQO0UVIk%1nSI-r@Ngd(G40S<_p%{*}HkqvZ%VcjBXQJp5 zHR1$iin*hL#AOg6{^Zf8PKgRm3vY~ym5@1ZBsrA4F)GlPfj(hki$M=2wg?lr1YLr5 z>u^IX30;KD5>GXB!DBBe_V_R}i$j^IYLjZyv=2>1mIIuajE!FD8`<<;m>(Z`BZQayodFiY!0} ztQb=BL!s&FtTe{U44SBWA%ejQt%<*>FxLocyZ@-=^wfeRQ_<0@%4AP2g1^jsCmPqe*a4^$7Z?Apt_7;(-RW z`f$Luk?0!OjD+C6fPoPZz~Z6v43YE5-vxyLo1G?iO`yOD39YipzVEj+;5s3nIG zXG@F`D8u4SRcjXS+$>#6AG3G^yB4vr?1{dHyfKS+u33&`PnUcMAqM0t?}zez;5Yd;bs96qzf5~3D1?hKcgqY zhxBa7#rwky(cy+E9d6M4a-#KKF2ln%Q+OpYI@AfD1-`;;F$6RiAq^~AzhkF6r|R_Z zRGroWzCowO**ESu9M6U*lRxzUx(joU<2iyIw>BOyDVr4`4}WSUf*F@qCiG*8rBkC^ zZF1yb*KoN6L^kA-%|6X>sY%_-5)E?WqR~5-x3q-x&eL0} zhNJ!TuIQPDTC!eCh4y~4YLi#7T<3$x!FvQ3SL)9G!%1CADB=K|P&nzT>?2fUSoANV z%tCAm_FRvnq)Cm`Qp)vUr<#dPir-}GVxRTU2H2vgf`!;MJiv{OkBqO0Q6MD&*LKFf zW_%&VdVKfDd;CCHwYFYfEPxLdmU9pr9>J>l2o}7l>LPWqj3l~^WsJ)VlxC4n=@4s_ zpr3G(WTBkE{~Z@}M~w^9n>3NnTL-w)WLn7E)x-4>#{zh;&Rt#{6-4LL6z~9*$*V{y zEaon8_Gi>|$D5W>K>|hJ7VC3?J;2}#B+K$97VCh#=`cCazZca=M~f>BiH%e;Qs=0~6XnslE+Mss^5TGQLbQ%xP)`H z<{r!_SjL#IW{U-m^5emPm+Y{=He!$rUf?q3V1fuHE<5%jN|s$)cDp|FO(q9f7o~9e zZ#krf-~KRrDT0;dYj%WPGxZT`o$vATVhcNU$Q<_G5pbea4z%cS7*LsUurDL)$R!2l zWyr3C)lB6k1m@l_)$7+(FzpeHKym&r{{61>R?te``?t=*# zbASuWFIb>0&0bv>C=onomris`mmo0U>7Hop^(aZQgzPPhz**^?m@-Ls)8_|*2zc4(spH*NVJw*jO8kPG?cfNWPD zqYdxmhj!I?D?ct=Qwe)&3OL9^$mD>9dIOs2fR7bNtF3kmnNH7Gl&x?_Lu{p)&_aK^ zp0M9~pn6WEu+a1B$#iRjjxz$@agD%(+VKZ$$Qk4~^8CT>`6!#ooz|QD(%H-@ z_~m~Z*%!@14Vm$41tijfYkV{W#@9L5wCdV?gcBRzFIS8~G+ey~El8b6I6CI8BXS(o z&YDKbj)52e!s~XIstYvKPZPdl0^Q>{(NjC8$ylUDp z38&Ol*znd`(PNStyEQo6!-3*}n!BQTX))ZoQ*_IG95>CNE)N9JW zQ?I+HD3jku888f9Vm<$7&4%G#X+#BPdCU-O?kbW*f*fM*ECM*a(|;i$zDoiR5=&a# ze+Xt;ek{}n-#jYR^L(eC$nxdqtXp(GI8uDV-e<*w!54@!EJqOryy7A#%o#f6JZQp0 z!j_GGK@8-pITQ@`e7_Ukk`;S$D1im8qg`5ZMFrZ&hN@_zr@?6bf}9=(S@+i(f&H|{ zUN2LRGufv6n!wCeCF|4U!abvSQ&E%H{NQo=HQQ?KYBAE3X+3^d>oWbithM`!)}{P{ z3}z_^4%v4D(sW7nEHVAXzRBe0pV&{mFdM#JBNDHvmV`wiw93&QcnYz{l#W=v#M9-s z{8nYXAKf}^4}(52eSre4+E-S(tu5B9yvIg>2A9&_`&Wy4@4bNz>%W$vzO6<~gz_u; zm@QmxeH^gAEVuy**<;Qw5cOs51?68_M?}{?FsdnMcr;vE@cV33t$ zdMt7pvq=i`qh(SH8^%x7cZ%)B|6Z`)tKY;L#_lBtXVqcu`=i`1a3vk(LIEAqq%n}7 zA(9AdQOX3dhK2_=KzisE)^6|xNo++N1-KGhakfh5A~T6f4xr{VT)T{+ zo%u4-{l~_1tvAbaCn}gRN3E*N?jKehD<-JT2e9`vNvX4%A)FOPWza+v;qi$sk<4s2 zUqlDzlv9?fbSiDT?*y}0tW1?Gx&p+b!^+a`T3OPMW_>&z%-@SeN56k@bEe_ptMZ?W zj%+NB^1VDSv{Xpk)bZg?;Ki;G*1Xt|cK2&m&+3iQpkl30F^6;C}Z%1UM}iTVn~6v7QFo&VS(h#1V4ej zoUk6Jt3_Fc16@$U{6W4oz5ra?d;(Ghe3^@)mKxMrFJ%T&OTI5!qv4jBSRlhIretAm z+)?uL-WmhlI^SHC$mC{Pac<0om$h{K77E(lV~%8wqY7TboZ-RfGlvUzjMx9>%5Zpp()WocPrb4qLqmi=KcFmYhp8 zjGTA6I{u2RUJ(i+(}$alqBjW+)ut|sEqHQEMKu-r zjF6<|mc)SEN&W8WfK+V57|TLh6l^oz`wG99P_YROGV-L<-@N=6M>d!mQtLP48#(vt zcXy6qt_uQVW-FcsR4X1;RO!1+)q8*j|Hi9$U@cW2XxHI5bc`iZ4@_+ntV#NZ)^*rG zucM&trJ{*|qFmz3ap0BUwL&jE;+6%*%B)1YHwEtXWi=_Jih_C>=h1Nf#c0qqCXw&a zf7Qg6yp>5@@;h2NYtG{6Q8jGx5-J<83|o~^kvO)&OTq-qba0y-ttEDpUp25OwNQw;#uk?YouM+cljv$p7TPVp zp^u{A8$O|d_>pcax(o7l6#a8-;VzJpSF~{nAju=t7ZDXz4_&}xzcE^~YvqLrB{8K_ zuBtBjtRqN0;?Fq@2pnCppI@%I&xonh*4qDWV9>f`q)g-uS!tSI8d{HV2+O+7+ApgLPLmxOyZa#UbK5uu7@!j zmV*McSkKtb4zizm)Un~`NS0_4jL7u( zFD>JspVPgjW3qTVayjPVQ#&MoOrEB_=pgctr)ly(Ddg~Fz9vogReS@aY(C^^${L6m zhOoZ+kf$lA01?ag-zQRzDi}q^xg9}vA#;pZq+AT_!!iCC^0$MhE+zkhhdfOia~VxY z2p@yfjq$k2_+2UBf1E+nUlH4dhz?)YlqI*P0DV3?&meUpWL2agz~`So3xL9z9LB${ zyC0`JiuUm|ZR2U`4%hgMxKj)cDU-FQDSkCpCq0tl~D%dP% zo(pjJF<7PpgupUcJ#wvADkpi&)71P?Y04^UdYZP~9cQ!q&{RDdb7vcGtm$bwxZ6&g z9yUP@l1cuiS0g-fns^v43hTAX*GMMyjfi1J=2Gh?GuztXS}!*Tv~(st{^X9w_!9}{ zsJ=jwdXJvh=ex4s$gkBc-H6#b$b-(wQ!W+T;l()JE#xHg4eMEBZPGy~T$(Y(xE~!w@Ka5L570s(? zxDOtzrsUGd{1V8bVI6ncq9)NT%a@3ty6u-HAo=~(GOwgk^yztUkj40&Uu zhliY&(GEduSc`lTLC8j;(f77qtC)CZbLZ@ydul)AwCs!cLr%*NIW0frw5&tJ53tkn zh$sOokH+5a>nAbbq;uek{1SF-kQhvkK<{z6qCPWYTViB#Ujv!VbheXBs91YQ7~PWe zF=vEPND)Tx#-JivDnAm=Axp(oT74)7F_HC0X(MNZLt4|wA}!Y>oVAq>L*ZtnFy(cX z!pJSHS*g@&Djj3F8B^)fm`YdIRcdO#{n?{^O_#~SW+u{*q;O$+WKBVLpkO6&iYJEx zWC*R5HJ9%t)sxGS5UE;8d$42TrdV;*!D@FsiYn`q6i8Q+zS7!d?F>1VqlUn2fW}pw z&=3duq>Cj#|8QVpMnLF9kDy@i!l%SBR09r807GY31qLHD(%n%o<^vdvMJUA%oPNM7tY;C4^!*)Ip=x}9tVbw01J%yR8_!+Yio`Ks3Ww)Ej#K-IF@WUU!?|6*07_5 zc3d~}8X$#G146NC@K(y#N_-U-Qlz31$(B1WYUBKW8F6xqo2wY3G0(GcnQ0d+-=h~d zoQEwmZB+$(Z}88+H%nV^>=xj5zzjD}ICnP?(Os;amR47L(wDV}X>U6NkCdD(uK#%t=ZcX917~ z1Q_KN@_}j3>{HN(>jCUJ|MBK)U5#z6O+Pakys zW7=z~@@q-3j=7F>ZJ;@+K_V zc}q2C0a8cZu5x)SCKm$sEMYy4|I8{YUu>YYsEl^`qq;((9f=D4T%5`$uFK*+Lvx!t zf@HT%aq5P#jPRJxS0hO@sEHSnAP@bL*Dre?kH)9sWNY6Qtw-}cN68$Lzj7=H53~6y zZb#HG`8;UWI;Lr5$Ij{=dVfQ50~dxFk~wpf!nqkbPT*QOO9pqE^A~^2ml{Usyum>7 z;6%e(;_V&zO*WGKql7GR6)Q)|vX$^&QcLOwzxk5flE^LA%SEd? z!l<|C6cUfghCDqMwJ|<#xT7S$t-i}z$FlMxp}tj1r;K0qJz$Ga6tJ4ZXNidG+|I_h zF8LcHqr$h|JEmu&RuB-q6(e25b65VZ(@zap2`3rHnU>1i)dt(_@Gd(Onb0XWf@SM= zz&kb`OGwT*`9Luz15u{I!4~Uj4f<5{N-LLYH!@siTm+8IcMDZHS;Z~k@?{2?i2k@y zDZs)bf}do*2ZAC`C=Pqb<{w}I=vvxHY@5HImH?}u{*=|nHfOaft1_OQW|fCwjUE-3 z|!aUjTx8znuus2pA3wovRlNUpGp~2$hQJl8m88VMu_`SQIGxZR{AX(mEBq#Ciiq>8D z58L)lVOg&=t0Nt{FiS~V);hTB7N)C<$_)qp2EBX{AM;TyV7k_`QSW%T;z{O z`{S|xxZEF4)Ps*%c;S^u89Y2Jl-z*y=3${)6<$|T7+SNJ7rJ7Wae599LK{7k2PVJ0 zJP7#o3?A6^u2RvR)Mwx9#*WQ0rHo-#(V)6iz9w{kCF&~X>(;z^Wyn(57*?cnxihn5 zB1&tKwqHOZ4ln7!)&~8eL0whIFBYSn{tLii!%DM(wSfXjw~5o1ziO~x;xY0^qCWhp zI$5}6RQXGG`MaSgqHI{Z{&bpg?#6LmK*gH&9PTt(h1q3u-~R2-|Ld=R`S_n-@WTEK zmbv$S=Ckkp>Kz}xn-Fq>wlr;4J7o^R;1 z3eL1y?UeVn&wc!DH~sck|9DH|J2B~L3C9S~oL%NpF9D<_l2w!pHfLw5jPtSxI0yRo z3(kd8!8so?$H57{tb^m=lr{)B3t4}Yo@|v8QbrN93@-uR+>b3Y6AW4o39CPJvF;B> zx6|#9Mtozuhs<&P5k+i-cX$Nd*h?T19!m-vKy(j8OATazwy^WdY!kVGkgn>yzBHZb zhAzd`HPRnqpV{THF--aqA3f)^yIh^3$1L?55ZZ>FO-duTJ#!a)>|w7|m-cW~Gmny! z|6CRkI?wU{X{A>E?W8WnFIX2X=#6h>n3;&aQBLZqum^bs>^a)1O<{M~KbcMdn3@a=769zeN-!A-sUj3$In8&JR>7Oh5hE z!6IS*1v^9#5@GwkaJpuLI$XaZ&SJE)WmONYp9n^*xK{!Q8V?Jv^qRrc;PzK)y}ZX{ z6D!05eWhIXQi;3PmS8cz5>cQoanITkl}ez|r8@qlQNpmOUiuxjFfLPCTBzgDzlS@} ziy)p=nI`H!B+;xLmuxiarkK&}V0+2w?=(BFp#W2w-!6 zdeiS7d&RBqzxA=U=R*uimM`QVduU>^W%{?Dd(DTx`mH-Y)ADVh5U0{kbgP&)lPETP z>AUXz`WxSU=YL&O3j32v`M&(zrx)J+sn2}=6(8K^rQV8l2<--Gu9nE7aPvl+=B9!- z-2Vd=Ce0xbVbVAZaSZy@pcOn-Wx&Y?$;NQ1^PetHeeVKzqnU>HadVs+Dq=iKkc&ob zs5E+lbyT=ZkUyGSCu>0%e?^^BlevDfP9ic#!76* zL?gVQKucRDlOmL?KU*OwQ&RjWmUFrNcFlsIzxI#`B&h^3J+u3_Vdig98B=asPm0Hh zO_%I`Wug$nC}P;`QBPO|o4Z?qkj$hHlXkMQH&|rjZR+Yl3zbY54o#az_WQ zXdOZ~mVft9Ix?&s13KPi!@Qg~#)kT;>nrU5?vyUyeI?5+2P_H&yg)!gS;d;&pShxi z08}6+O<~REfC`CMw0>Jj1SeL~uGVYx6}BH7_jnSd?y?IOmr+;;6s0e}l7h1o z?@#G4AX!Ipkxj)J7S0T7!NPlcdQkj7IOyx}qTsjMk-vatN)5{(LjMAcGogQUt$c;` zi`&2Tp|z_D_v_?m{8$+RfDCIywNss}G}uh!?SC^Th^wia=c*g3{N_W45N@qD;ja93 zHDD;>4ImhU@@*mv`K8)RwpvWjFrt$en_H=;omMZ$SWokCyW6_^@tG|=ofT_}?AR7}H5#9Ckr zq)>aF3N6%0?$YM=K1f>JALw6I8@}z9_(mgi<3#GPBtb zx&vhUUW4tI#SJ2rjoMt*RIY|lZ#D3GtNW$58boWn0l#wV&I!U}G^posj)!Tv((3dT ztv9RyE8%$;Ppx!!+H;_&Z_CPB$*)#C{=uEV%L%=iuq?5`OLVX zT9|IGBJ-Uf)^YaBLA5ezeWSdmk9@_B2dRv1R&~pFde5w%_OU(yp5F`UW2=}2%{{wT z;t&3<@IDws;(f58CZkU2&a%X$e2IJzdE$)?OUoL4i>csyd5nBTN5Ts$n6`LZFjEPJ z+80jm5M8c?(eqjNE^86l^RiYon7rn>SMa;mPD2qf_+Zk1Tb>sP`z(=I7^*&dXBEGB z3^Px&)z&tDGT;1B8G!-2$oRv0>_!CJK+2#jrI^&-8XRUU!cR<^l^GkjrHP-R68fTz z?0yW>Xu7#}yZbRvfdOyvAXBsg@tdSAI503IrI=RXDR3;MnD*f*QA4=A*aP?{V8L~b zNN6cELd*6B6GTD`NZ8xmTZ?K9{ajidVGM9Z56h%U5PA)g5)&<|Zl>xnSjWsL>5I6A zIgCZacS4$D5tKI7b&E|%F~PjNIZRGSIed6D`<_5+8RO3MH%L`2TbVNbO(|minHGSU zB82P_5-}C6lSzEB-mr`B6Qm+6|FoZn>1jwav1?REc8saljx8siK#4xABCJ4&o*<$N zbZ7}i*&_tKm+?Pt-Aa;Y%hZ8JY#pZ%^TjZUv-=CRjb!cUygQ7@3U%hmUquTRDdo|1 z);fY=N~U~+NGwR&yX0)P*U~K;r-X6glrVxm!7&ELjSi>bAVG~L>EmR` zlN~iT1j}8{a1!7Q0dw7~Xu*Khk44s0?+4$qsU|yS*!wtTKbU(P<66vQgMQe2*$~%D zq95%7X&2M>)7Z7ao-JoPjJgR{)OcA?*)r08hdOFLlG4UOaO$vmC&mu5{h|(ouDZkX z_rJq%dx1TcwyKT0%i6SIZ$XoT(whM=8wEDj=*r&S7Cow-f{<6SkaodI-N{WKrp<+J zbbRB`uLbC{2L(}T*UF6Gp^Tqnt2}&pz?XTPx}xd?;PJ1aXLrO5gwBwJN~m}bGzNVL zuef`fYMB!Rn()>bz-|AM`;f>~TxWK-D!-uxkBo&Y)R0RVvrbrmAUk=;!vD1~f{U+$f8j-~m<^rskR097Srk7bykrs~6S7~yEl~$4DM{EUs;$N_^Xr@Xgl7W-Rlah!f zih7b<`joU znR^%$7vdheB8C+^-E^{6MnyvLt#HJ`s1Imh>^wn3ACQc?;ebg-Rpz(>TM2n%2W*K< zq!47(hpvd>g3AWJk#&X9u~;*PgNGPWX(aWBu81-H@u4eX{!L#I6IF$!=)2rKl{btl z0kyr+_v(Vf&FCT=G(N5PGH%9Qy`(<;2c>7_$4rJWqo)jo{vMng5HFc?ve~RnMhKAQ zW+b_LS5<2yOWY)z>?<_mqKZTuiKI!HF=m%C#TRY!FQtgZn!1MBCn!Mi-S*?6QnX;@ zyfk&jvbHqZ_o>E}MoHRBB~ja?|Jo*7s#R&y_|w+{Us|0DN&H^2B3|hd1>>hHmY#~o zWbJbUk7YKCFErArtggnPwcKGN9crN-uT9{j`mMaz)=XdV`n|Shc_J^;3Cmq*)X(oa zy;(kC#H2)(u`wI2Ly1NqmH`r#tjq8w=wd$O!1%_uC2Lz_V<`i!(#iKA`x5>VeP%!i z7z#&vf)FjKmPm8atf!?3VM?*5CCQY*X8$^PzaZ+y$j=mupbbo6IFn5$teyF$hYwz_ z>!v5q^jI@70-2rhria*QoWf_$bgwnlz3DSg;R)eqd|t043O~b52c3Gb<&2MWLiQOa zu^QQ1&vdU>5_O;XUO#xN)-d(DJktnYdax!ILPhHJndjeWa-Df5ntFYPIax!BJM(f` zJ=SNw*AF7XAH=5rEzIi&ajZLMnvqsfEPK#eZrBP=*UAv}F!%n98d&o!x=rRvTxiSw z;F_9yYLtH}Tf`Nuio~Vl!A%?+qPj>~+hKe4{q~FJ*kHMN?qqh5NR|hy_KS6v+e+B! zG~!jhxC-eOekB}TY*^@2^HXH`Jpi7axL-e z$t_wKB#n#84CItHDe!D@-xVh*LMssUd7JJh2ZOlK5WT?85t!LZY3vIT`!@PeopOF) zecW(*1izs%v%|g_J2MvI=spyt+_n$dSbr!?xe@ID^kK?_#}|j!lH9VvHqPAJ-ul;{ zz)zd#GjoUT{>Ggjyz5VJpErYcZ<3U&})6 z*MeOh1H1dS92rfH{w?!$GX5=x{cZ1{>P_m52G1$8=jS?kk#Wf*(eVcM?Hf2(N zC*qMqNddOY^C1B};5f=43lXaZ#sn7>UB zI6soGL08E~qEMgXZkejoZh~jf>&?ll#T;rv2L0X?Gh8r`lYeX;goWJ-yq`j`P8DmK zsMdYDcaT*xLdlc+`2{^i_5^HI7i~*bm(w9SqiGUQL=@SifV5^0`;fXT_F@ei?HjN`~@VTC&z0)`gKa`AqOxFI0*{ zJp21+4O-P%&w8!`TVC`$AA8pls!d^!vcDA%b9K)Zr zugdpx%qdq$OuO1CI6KKditSHB0%N__-^u7ARBd~wMk;A@=lRuccF3kXBBs|w4JJ0UafS9<+FAqoV&R#Hl4zoJ)Q2{sadxx zCwkVv+(&oi&tSs90d(}B{0BwX;FhP0dM%qst-*Ei_AKa1+n{PfVJEL>Jyx|T#OJR3 zsr;n=pY_M%c--a95Ex4tPq0rP%UQE4N#I`6XY-ial|K_^R$ZQhdUNgL=QGH_f$=I( z%xrJjcL25v7}Yw5A$0q(z}*?3B?tRyAV6$90y70?6RiOWB>LA;VdRX_07`;;*oKff`0*fQkEIdUme7}ce$ zpNmEdqt7dN?>2+SEH$E;HR@yX#K17Z8|M*s#zXe`VBs|o1PRCFP1?6TaSHIopD5vB z41`ZQ%W)XOe2dTt=DL1LhZP8<$1Z*`baAKL1Nb8_=y^z1|Msfty`#O`%iZ?Lv2tfk z=z#0>M6d-V48r?D<*9?jG*Yzz;Mg1>)bQ?%;QmMr?y`d`xHwZu4ae5t{aDt0OkF%8 zV#97I8b}!IQ(>a}&31kL+Hkt=FukD5oJ0S*0cO}^I+R}tuVRj#NU@YUFJ>vc_}`SS z@nnrx4$&{Z9O{s6-A)ZG!?FGNi~UXCE>0-jbNQRnmnN0&x%^G(3%~@w0=!=a#C5D9L%84-)331Xj2`{^7H1qkaAN!n2xM&^2>jYy>>qb`%Bvij)jiu zb|_aVA2Gd5I?GimH#B@$%>(jMx?{p~`J28cUBpWVJN&4rQ0YEW^tPD+Vrz2N^_)te zPWc<%tHlT`=_Dmw8>V==kK!t7uW9%3tU*eJ9G$F|I_;rW%vrA85FJ z2w5m01A<_uDn%|_Fq+;)2wuvpSE&h+iS^2ai&R`=Ns4_`Qwj}}o;8{=3TZSW%J5Q% zREZL37z&98(qgYQD0Ila5Ou_^ta#Z3%RIvdEJ{sj3tdYC=c8~hTe|1+HIyyy4bTwEhR6Q2$zy0#NM9whrg-#=|UrpG7cJuRDjr+h~GH3VjwMD z^Al{RbO}j*RL|n3IPY%C(-V3rQ=yYmpF9h`aAAiu}5K^o&I<^v3X7^6!e93L_f|Ewszv zDK@BdN&=zFxOfcXtz!x9=9TZs5j2q*2}*a8|7|sUng)Z*VU@u(6Z&oFZ8rzQpbbM2 z%Gyw*vh`4mDaxG?jcOYM;bpS}bJ@YG2*r>OOy>}d)T)OiqJ+{hP!N<4OO)bGVp2b# z5zDT;B0oQ7{yqp$733N|_M_kFrEDD0Rt@Mt3fWe8OlIW&_5dBj6r^3~DXdXZ7Vm~Q zU5%4!-Ip}ZI;}KM%b?)A*Oui%u;lSYQ0>;A9S1%5FFy$|#d$p5uM%%1`kwww@qVSh zqd);Y?|UFt_y?-ZUx%t!5^Ohg3AnZOg?U{1mPd~MDx40pk2CfgZ#8%*oegZM`QUD< zQ097LDw<5l8)Hzl80y0F@vPrG`U^y1KY`)r01*b?Xzo2FjEW_(F^q7jjbMahDr+o= z7E0if;%Ek60GPW+PyZfIppHNNdt1uq+uQE{VOX6o->@qREU-~mbm)A;zMxgA4~N6) zUxfYU>0d@Mpncrw-)G2x??LU|6i*mYxEo~Xr&+`4U(gjQp`j!9zr(vv(cjsPyNh{Z z!`^}>2ck?shjdAR@1Hce&=*gG^z?|Kcct~7>P-ff# z;1~F*YQ{1Y8h-$oQ3?5=>`GgH>I1-wTJBE!0PyZu$XUhC>}>u ztCitNuy;bFF8>y~d^1GqyqDWHFdDToD{IRf@iJ#O%B-#}v*2YsP^z~zJW{t+uNN(( z16fAT*5Y9=Fp+KXMYC)%50O%ned{F!0T?z8VvnXX43~L6EZpU3g1n=p7~EEbWgkAD zek$`QOM@R7J-npYWXlr6xytje^yCiEyOmG5V|vHP#9z8r{?8B?|8sFMjE76Mc3Z9P znGTHKkP0AS7H0k;-^?3jMboHB6P{gu-oVafY`)lcIrfh=5aks@2@wef7hXM=U2Y-? zR>UrCNv0((Np}G_NDxbUi>wovf-}=BG-SgLcgn&Eu^7&VP z>H348|I};PMAN3)ci#GylP|yi4`2WP`JUQAhW{${aNu8_ zw+l}Ik~(Aok0jcC5RBC+{uZRs|dF*N+e-2XWFjgy}^dGgygUiU)9;GTQO zC%=oz^MRA^yKXMJ>#(p;UYRFPe&VHHK6&z!k7(o_33+e+%7=gd<#*kB00LaZU(7yY&U~+J+7B5 zY3k*%!iDQ2ZDdRajQ}Lmj59+LdOKdY21g;EI_@rzSsI~r?iV(6!Ow<+9`eRw<8a6v zkBxxGvDi2sGRL9g7!lUyXZjZ?4P+{oqIQjf;JZB{QFu)0EBLcczV2;X_@@eU| z?*(bMg&vF}A>@jUNl5Wjh3&COI~+2{BJD&VzHvxHZ4uIL%eiBM=ZS)2p)8n!Hd!R>j zjt%MYwvacL9*>61v8Y8Svs%ZZ7VX3`$DvlrBq&8sM2-Mk1&R@1G3l3$ zV2n0!wosMbRRZvFuRZ|lp2Tsqk*&`yijUF7k|{cXTU#{ zP~#s({q*?(`rL;2m-4(JcMR(5So8<=bu9LS{yGl%jJNkjs;XiUhc^X9IFa7Y=8c8e z_1A4SN;%$XjMm}2caEM%v);LSUfDa3vPs$OnG|?Q@r?fYBp**>*^MEiq!mgLMhaHS*E(hd9`Z~lC^T1s~wTwaz2+Sfh;g%f$aVxd~ z!qk^ZHrW>@4Iv}V?Y@DjJN#~OkU;K-^mF)~$%At{EOj_M zvGw5G)D4G}F?CpqGzt9Pq2H8K`YgZsoL{>SA5sMP6Y2nMn=#>p7Ma2DwY8zZnm+!6 zZo1j}{My!6et@mdk92%tZPR!E0GmEC()8lmrk8(!O|#qC81ALDO&|LKHhpxY>E%Y# z(%D6a%{}%Qwz+$q_OKqv5ErfvW@xh`kuOMQl~YL6k>u_hvUGL@Qv;I2*t09Mu5MN) zwl&VERGywry;KkQS(htDtSZ^XW@{13YBti($}fn$U>uQGKrGVz)C9WcMASW-sy^Ll zN$rH`V3vzaM;5xkbj(4PIz@x&6p86jm6(n~9?!C(P(8s6ANcAC7mqnX)t5hr z>UGDHSHI&2Q9Zk{GT#Gz^@FIszGrCm2T^??^9X)8@=+`Q!Im?}Xs9^hg@tdz44&VMO9=j{-(Gn=%OPQoo%zgGZ-~VT;@3`YjN3L5_ z3}=2-W-Du!AYKi|5xm}GB?Y0U@v zFTQ7Z>t{dohbR9JZ!_Gm<=$#nw05ee(a`z$ktvz%ImXA_DWZWG`3a>jkLTHD9h5UZ zV;%*Xg$=|>A#jg_4pI%prsNjT@h*27_(P0R{{jX>;j)h$>{rusUaNsdY!&NE@91;0 zp`U!AbOW0R$?Hp3eI(kTpmv%_MW!7ojl+Wq%4dOUYqX;KsvP0kAdLLr9PuzY8dz;P zh^Qj=imZ8%K5y2$*eWu(-n)9&(LqE&y-(|1z6uC?dPn#%Yn{wZdT;B!)&26L;C)Yx zyl)W)zG$3v7Z$`WITqMZv~;U;Iuy4onavO{5E~gQo>6k(Z8SsfND>+QoR1s%f<;dm zReyR-2EvIlX8SX1GFZQT)M*$=u7+xr45f`6)x#M{X~2`9mrsn+nn(3kLK;w{a*LR} zR1N^@G;bVV2{M|E%Wq0)&Bm9dX%Tp5))#s~urLgpAN44{V0aX45Y&ju#pz!p-sNMqun!;36+ zhJn?N9amhAJ+C}|I?S0;E8q#QH*jV?vA%&Gm2^YgBD~#9-;^FwdWND5L1>u7c~EbT zW3YPE4TM26J8RkVyjgF`t0=b5-Yr2ULys{!a+{@ZPD(; zXX633DaB9@7E`G*SWj$VmV971mC9*Uh5`5((gCDVkIjNi>2m5jow1Sk??&@|KIDxZ zn_xf0eH>s)L9qalL6UX!U?ncfvVXcG zy%^9wZWb|H2wh_k2D8`EOXpQyB7%L7w~YFTPEFI2#YY?oDY46M}$IK z{1)!g$$^V2nW_}hR9H!cW~y^E(mNXDupG#Nbtu%-sf--Xb8Z$ULeGb@2+kby#}aWu0KXa*@J zlsdP`8djWUE;!J?@Ie3JoLm=_i;y<6MUMXA8xohaA#u87v$Wxcgn9IDxE5AE^ka#J zo%M~l!-n*-6vwys2u+8GvED_zt)@4;Q3pth-sfIVdFidMytGsCNTF$Is&}!T!>Qh* z?0vHLL-sz|d$gX*d2g1lSWQBWm+-cd-hP-jB({+E7~T*R!`r3GORZg|y!7@XR`*oz zv3kx=^~}e1d9wGTdSA(UKSt@5IC8xoSL$lkdmO1S)=>XXsQv`WF5Zw6L*C`QA)bae zJbHDED7-!1+L-EHq36O>?mKysR-d57v&+7Ztsou}&+3Ni~nZ9fEBqfx+D@lkqd-R^Hw5s9N~O;7y`*in zv<9hY0j2_{Y+NYBwwCIeFt!ZGG43M=zt9!{Tm>(O=V)i@K>vI;#aJz?r&fEa$5pc^ z{TDp_=KjN~M^`^oJ*v96dSunMv5}&0L!=#{J~zQg>SAL{n^z2p_TGAIlbLLg_^wvz zY8}cYd|edx3!fI&VwmM*^$3PK+%crJ0JKU3`(bwLBnYzKCTyDOP*%Ix#j_3Hv#N6~ zb&HTc$L^k8Z?oN~4KxL=n-H+A`X$wMzTpY%uqCJd|3dZC)sL|jFcRQE;yi=&qt(vp zvDJ^PK>^}GySfY%2Nbxkv!US9wJ3o8Hdl{{D7YYqCrA_1)g_=HbXJ0_b+%jm1gH(2 zb=0CKZK?(!CUn*jLua>EzsM%0b#_}AZLUC{S7)xQp1__u$f7GEcjT3ytgfgYPe+8S zIFOqSxf`S;CAg*b&Ww6s#+}sF-flpJ6 z5}KP-Amd(eZq$7`pv}J~&#e8Jd*$3{#7VvlsT&N7go$KdecicDZ@UG&?c#<>CL4hr zLGR}yN@;->GRE638!X7OK<0XJICHB5d1J(3?j{Z&j*)CKzhrd0;={R3bX_&MUL58& zLh``>g7j-n(wm{zIu$6$tjQQY@GtYt@cY?K#HJ0qiCANKW4np`VVUE*iBPDXjM48n zvb#YS7rl#11>BpiVoI1)SFtxhrW%jXRiBpZq=@6eyF^unppehE%LSJG{4`Oqa0*n+ zhrF?<7>3O8s0c_LhYE>`8=_;0JdJqKw|O~i!^S{|oqRA74Bd4e5g3u-N^+_A5Z6ei zwLk13M5LK9ANoo8w6yrWAZ;=9VB9oW2zg_XhA6Qy{UEq*NI!n=cmo8Dk6G z4W4gkl7=*!%g@mo41&M2m~ao57|C%fG@^Bt;NG z$K({BPBzKh;v$lOEry!Ljkb(88f}}G)Uy%O!i@H5 zPg^(_sx5d*sD_Px^(VAtbDqUr1Qj*-Fs$%}(2{uus+OqtgE?!*D=}w2r~{FUPI2Pj zg=0Fwj#e@E_D{-PW?}e9lLXu&f#&cRX1_}+Glko*#?ESp8m zvR}LL4R1N|$uHb;r@J}CEqII!su;hrX5lw|^_%a$`=hV^{Kv)?UKuU?s=qw`&mTMV ztMB_?$3cOoUbEs`UNd~{@BQ81oP4gA9dTFi=v(Fuv=IHQI4kwutSFk-BaR&S9*tKb zoq>_&XVI_&7CL){48o8YFyf{em%I&4#vxFTP_0Uso2M6b~;M0X`Z8O6v2 zh7g%MkZ9K<-s++w>wFo*u(V~Wx!9bYx*xp=ss1OUdb2dyJVRq6uibhWr|@r^`e8>K zXBE)}66Bh#)m&RL${^?hpJ8fDUqD03sBDwJnSs?;8MC&@-^>8Two3~DsTMYAv{^20 zp3;^`ljlG)4U4U|j7QQ|!?$cFr*GLauy31b*o5udW*SycD_8Fr=h~I9a?LahP?lEj zA`{MscInp$HdaUzVw*5yma_gf+g&D2{cW~^&DCIOwt+3w+O4+Epq63VM>-wU) zE<+;{AkUQ!LLN^Trp{F`HNCeiE8v2Gf8yao5~AB~1u{gO29bR$TuyqbDGFs444>4vpDM zsQ+k*oE~ZDdjUx^W}L!)D?B3%2}i?($#5cL+6Ic_Z7~(KrpAoHYJQI94fRU-)ZAJ~BN8l!ZWFQ1VT~BnRgah{ zpQk%w2;7FgaU-@E^2SaV1XKHP?1&*!ZaiWLiW`oYlu!DP@~I<2tU;lBlWx`BZjvQC zn#{+lgehAdlRN7?jcoI=b~Udp;WNGpBuCm8*Qn&8f|7zC>4$f z#nFZ=G}@4J$fu{K>YnasZ>;J#0u|MPY1w; z=}kVhh)yBz0-G2Uy$khRoajAV&y}2QU`8Qgj%{FL*5Mnx$QxV4J>KS1?R|Z}G|_vc zo~si*3WTshY^GA7GOm9EN+e)ha$F25BUAilizQVyqMXL7` zN~?OiNQ>%M?{cN>?CmBkDt5icD{T+^!A1(9(Vs+9Bl)WS6Dr%>>;IHq<>LZF^ixN{ zl__kcDwj#68HyzAwV+^|LfExQ946?HIy6C%gF`8wpv+87$QhrI;+jZhp~O~K-s4W6 z%~tJHsG79ZR{9DUHwkS8lyit?>o8SywoOxJtM6>tY?Y}(vvnbktZzpgU?k}cehd+xYfyZY2- z2iNI?{;4NhqI}a0*buM2XiR5j*e+h*nJw&}uJ6oNwju-Tjf087XhFd4sxHO6#SSH) z+DX$cTc?vIbTTd?ToClbY@D_obRTBj4N(Z(j)RLwUYo7!U|vc`izU20mi`5lYiknv z*DC*bdSocy6m}{(v3OMQJdTEhxX{jKj8=Gl7@hjmD7?i2=xpIL>FqM0H!H`Q4b?Tf z2AoY(xgh2UZhBqs-cP$ z=~a*jC`CZJbl%U*KF_s)f?t3CSIj-n_Su=)nc3NWb|oaj3&!7u-DGzG!pd2w%EdyV z#tmAH4?dEx;phvRaeI-wizfEEq4dPfLHxu+Uk4;AoK%3Scl0&>Yk3d<8u=U zbCe&8yg-o1kIx%)PCI>x4=6uhgM|Db$^f9-k>7*zJ4{(Mzf1_lKe*ML^2?qB98)s* z(NS@bv6{<=De59H^q1+jf^7Jx?1x|4S4}T_>a~MBarmBA^|9R2*w>J)k{MnBGiLi{ z%3s zrMftkckU$QM-npRP69AU!uP-KN#u}nh-Yk0 z=>o}!VU$OBYiS#yL!Tfy8Od0F^byHENJe{#a7S_`EtO!UR_G;S4u>+Qy*J}1od-QT zgRy|_Q0tUFhthc_!Re4a4n_^9uho2@?`8)V^?P;~Q}bV}ain z>fP+?OUJcigAmZ+I*A7MoyLU|m9mkQ673_&DGjC|B{@cjQ<^N&UNR@39bH_`!TFAI zoRE9=OhB`hNJx-?BUcis77nGFkm^by)z+a@8L6)HQLP?I4MnOeb?o`YalMLl@RAQtNTP?vz8K$)RHWJ#mA!f9u@>6|Gfw+S2Y-m zB9D;BoI|{-i6Ia$9F0#-Z?H&Fq&LcNSjm{8ob8|HxNLqLM2h26ISsdrQ`E0>Ej*7v z5A0`w(+EW#C7A^vL8^RRN07t(LmtQJ-w+Z?FMrTDj?ku4`0a8K#UO*J%Q!JxNJPj( z)#q#xL!YZg4i7aRTV*%}E!w@)K(UB4-DUW(-^G!bt4`ToR}t6`&ec#yTx(*|xsVIe zTOi3!Fsed1!`LWDiag>JXtz8Z$s`3X6&*lrGTAw7Jge8})l*lqy&N>snC?^8X!e6I zjdPSc2%rXWWkeU?oz*q36F_F8!g15-yU=F}Ij6$;%ZFc>{!(K0KvLt35X5Ut50y9^ zu_1Cf#fg%1_y+nYK;~iuwm6hSp#p7avTnd60Yetuwx6iLac-xto8 zH{GKc?kHyV$ORCn!+Z+^rkd2_Lr~O8mody-+oSBc+QS(msL9@G(<7zT9C*OR2_)Gs zL6}HI=j|v`F4GB@9%52MCzs&Y4kchZ?x@#^Of*4;)rMbtdvtOdPRCKNxKL|BE<1^+ zUX6kc4ay2qAcqS!Fie$E&OnK=Nm=!FV6c%{Vd0BzYfkRt(HWCae$Mw_FmJuV8Wf2G zz0wz2ghJR3_sf@|C<_Lp%8#D7&&Rn?k=)Bu4zAFXh*dgyUE{baBFE+6VtjC?vESoB z1_=uv$K4Uxh@!)B@PkylFysiNnQkf6B?p5Gk00XEglMIBuv7#0NBpj2=a!IyT#Cqq zhk)}^j5?^0iv|@9a3rd-Re)m0oUEte4nDFU5xN=&Ca40#MW{3KT%aULLuIMsbfbvQ zr380BTB`XB0$kPLEr(P+JuyUgi3od6()59twTc#!@Tq5O$8tvnjY%PUC z$2AVinC{!MDG3&+!_#hIuNNre+?)K--V(h&zUDBbcE`aJV9$S)&K6#)KJL1@8SuIeSK zzKij=hO-i3CEM+tGcF%`JpaTd9L*St@cjoXZ%w;$E;B!Gvb1Gi`E$(n)6*~a~*7?(4o=oO>jBVSFn_u1D@Y^EH?=cOs-GA}(zDJ{9jCv>zP_#{+y8qhPJHMVj zOUEJtI-EpgyS8&~=C1Q&f8nDpC9*wj*=s(%^7ylPW3Y#ma^d_Z+r)XF4xW@X`NUzR zBnE@+r+qUvth;dX>yJdX8u7L~&K0eP)nW1fe%aG&3Z# zrC?4a#kfH4upBb=&Xz-v3;A?3cW~eupBY(^AveBtbm7uj2uv%^KqX6!o;&fBaj()A zep+Rmahgp@7@81yI_pk64OWd=tBcU$pRC1M^JF7z!O;DlSwI&oX|RtM56s8t;CHU~ ztcJ7eg3tmkVnU=04w4O~pG2V`txS`$AZ;nLRw=R*MJQ&AQUFJNaXW-VUfD93wy1>z zMB$>j3LjDmo2WItqcxK#;Ew{BLy{3Ckf8Nrh#}+L`s9VX<|tpVb|z>J5H*sVBD}+9-?ZqyQGLA{G+BQAW)LiF``QmxD1)1(iBHl>1neD5N@9 z5Clq!>&F^9gvlyr`w}%DRceOlffP8$AwfRGn6hY~qOnzW!StopAxvq~tqLZH%WU-? zJrdC1SnwOvkNw;zk}AZ<4uzg852+~Ra>!V&hMdPpu!dSM%^;KQ5(C9?09ld7A}2E0 zGv9N`j9##WCXv`hk-uF43tNSXKz%^HS4;&njZ4aF#Smqg&C*Bof%>HyTjXI^q}$J) z8c$Wx%)wPSPPlZiTP7>u{VEh%AT}s0p=rsH!Dc>P`r= zUcpk93)DDSN<`xq4LEcW9XZ7cgAO2cQh^U&VjojnF1;fVJJL2>+217K;D&ax+NOrun2B=`(H72}#>kQ2XDl{$BrDvW7+ zygGl##Dy-%3E%x<#=UA}PsJ@WFo1E<%TtAN*+#eVW6j~Rh^HDTf3Wn>+v26%0H;EM zT=oeAwIdKB$`YJBHj#&UJykJpPAH8Eu+b4G>|v%Tx~gJG;ZCI=&KSZxU&#a`0{%$Z z5H8{4Anq`J?Pvw^j&X}%nP4eLr4DltS%LyXFkA%gwL-1n{v@S#x?@ossVu0()+ZT< zY7wf5PDjRw(3nP$xDZ9)_QS3%66 z!|5{(Su!0KouSnhv^R#uld{FnG*$_58tpJKjiVSdTA)=gAvv(uZG_fQ{~>5{Rd(15+xp3tR><#pN1* zXv$T<^ZAnk3@YFle>`Na=zvrgFvYktiRwC>QdrJB8Gl z9eN@pxgyaOP9Z{y`Jp|+(R-H!)d94WEjnN$TLb%W@6-i@hn?TPaX+lOE(qWKdC2rB z+eZGFk1msuY(I=VG49W=Hvep+yJRHW<==-b-E(^R=Ye#UjAR>jYudyyJIIkXhEUkysWKKAzMF}IE_Q0&-~kG6j~fAyto_{4&c{KxgtJHEMoW6hsv zT1NQlxjTmsuUWWvDzd{PZ_C`b?Do+I^N)RnFqyJnetl%?l}pbbuR+)g;c*iWO`LOY z-lKG3d~VRh+wOe(aMt8wwY<5hv$AQY_gy zh?{fri}Uk7|Kr3kR4!ozVKQJlyW{YwxxbD$9w4G%F4)fHOn9< za_{mtFSaSQWg=?szAc}fUvcd!yn$31oZ+_f6V~0Dy!FOko0XCn&9*bUmmJ!={HwbP zZ1CFH&TKey`~HsazB^5|8JFrEw#XcpNs^s?EqtGdZPUmJ%Wg0F`Hnxe2wp=~SLWQD z{Cva~HHvKb`E%yn`{DNPVRIP>7#N8A`st0K7e^1?d5GaBC1yLmZ}P-7d-ptgTU16P zislJN#y&Xz^SSercv8Te&h5;6xM}^>uO}Z4cI2kE7A-k?^x3%KzqN8iQ**bUZ8|e- z^Sq%Uj%c*_^y!bsCY<_fR40zL?HF}@&7LiHhK&H6uy<@{W{*C;;NI2CPXHrL-fVle zj=28A`AgU6yi^Kr{Ppg|$3Gt3QViRvDLnOQ_MXG%_nw%53i=|v`sVPThfff3|oI{(eS<7QD1k253jqk^vtLeQ{JUPpx9!#P!cl4$>Rk9MG>mLBs5c$DtRb3 zSj0Y;7ugASjv|T><6`u#2rViKBg?HQayb_jg(%Wl@IdM+w%JyfTLeggJ0vXa`*W9h z6qifpISg9x6#%3@BA;`M1c4(P8E!)I&(SKF!I6c7d5iZ|z8^prA?s{XD@;AOE|K3f znYD%}E84J^*HQuXLNBz=HXqtBeId#yFxm5CzG2f07dMotZI~u-UeL%bH@amnh$Op$ zGM;nt7-j05kVg`h2n|<>YUB`NAUru%Z;vGc5n^Zppym{)p*S_4UT6gi=6%YWYLG*a z3kff|m?PW;)Zik_saHIcAiS`%R1yD*ls6N$v4cYJhO9Bxg&YFRG!qxLkbqQCk_yyn z3RTU0R+>@D7;BI)3X(mXO_nF;LTTLesKPx5#us9UDF|wNe&yyyE`>byc5tO4 zaN=kun`~mIcEpX6lneF2%2nIpn=0Mf$l=>7MG2(a+sO7qX)uDl&w02uinYgO;wEc` z*gAX`O~%xAayVY}2YKxIv*Bw{`$_RC-sa@vcq}lx){~i^;sq9v$5B7W3o4*aB_4BI zYmO+9-%)pV0jfi^Fei_i7cu@6uRsJ?1nkPtR8tE$V9zYb^)MFDvI7>57d-}~_IhY| z03J?7SqBc@Qf2WGC$H5id>r9e@4}XTH%Tl`xp0%j>|P;=Rqp~v2((ib_MrtpuDA(g zc5z)Ne-WkuIm+`Gp5)@%&rd74xDHWLj#jw1j^X(-7uSBsm%npyUDs+ONMHwPk7-}i z#dQotsK9=u0K2%*4hbjz&_#RW0| zUbwh~DpNdEL>%WbYAy(Op}rixF{QU2rtz$+lnUSzbFLsrdtIB$#gz?H(9Tk*SxnD_ zh;wyuk$RY@RG)1(6@GQTNISo?u48=wO{Y%tiQ|Agg~e5+!?7gP?C~UA)l`R=V-*Cx z6Z%utfDr8v$m+TfO7S`%;#@=o^fWsuL@M<|3}e&@(W|I+d;1W%Xg`yk63%%^EUPV$ zI2R%hb@Pnco@$RLfkbsXL^7bII2KjhwjB-@%?gyrW3Ph*E@^i=yb!}`d8FCnNjxK7 z{k4}zJSz;q?c+Ss0SQt__~6ZTJ(Pr?n^-{~5a%XV&|F@3>y2UrL8*X4u!y{9&c)gz zt5*RWnm{pT6b?p-{Hg@3i^;w$1!>_2z-ZS5X^X=0GQoF@kQNI>>_mp^VmPM27)~^c z-R$(fmEMithwAAzFONZ`)m>1TaL9U>;;j?39i)cYhj)dTVFS`h8aRy)J4on!3_3Ie zdxL0)Eg$XYW#*H>By&FaKl01o=v1b1Z61A)Yt78CW)70Q0kFxwA601fCyxsbTcPVCtjA_M+?WN-1+j5a z_KwGW8lH52F>cbp-k=nIEv$`zm0Z|dL=G@xE2-I2E@<`wqP*q&^?|7T0Ij~CmYziX zCV17z`Qy#FJV3*{zi3gvUf=&gpOcm{T&7R$0d+Wv6*_<3t? z{VZkKItICxS zpJAyczs*V2Gb}Zz>h5&DDV|*{Z_6PW*gXqa(Q{yy05fyXOAw-wO_r;2W3pT>!(yhK zKs^%6$+FT0=ung5fv#}MQZz$0Q|%F!5^`DULS;@XtMsd(MW#p#*J{C5l??2tt;lsDe?^LZ-(tzYp5P$P7=*qc8YBRO$Pq&EOiE8T$5s|ad9Npu-6QXayL>92N_y5rKN&N2dWKNHK`(`#7_xsu z&&m!!YY{2Kh-AQiZhGQ+oN%H^xSgKdALK+oIZ@>lH6Hy$d~F&DwZZP-c^7&j`VHt= z9sR@raKRLW!Ryo04rpz`x6GO~m3{(Aj0u%ApmNv*dKhiT?^wR}X!1}+UCompHTn6kr(-W9LKf$Fnh*R+0gTg7?Pvk^DInjllLU` zhLaQlLf?R%B!|#X7fgZm{uMpJU}2;IfqiFs+DQXVNqqZqdU8DaSy9L#dm%<&ZJ>w8 zqmvY2`77kmYsg#TTg%Hh|8?c96Ft##7@-~5e2|@3Wt73dQ^rt#*#h|Vw zIHYDSt-w&fk-TM2cfu6-_FvHxoD@dF2-trqJ((tM^45+fj(;gV0S@U;)b7G{VCOd& zpTxJ|Qx{3b2m~o;fOEy(1zJWaijE9j(eYLy=M&DfCa*g4+v;x!jjpQv`{!W-; z&Gawm3BvK;G4@^ z^poT*_||27vVHX0^dx!9lFNynEPww6JyA~>ncJ_Hw}9=<Qw3o@hCYjK5dQTecI_nqSwxMF&aVg6CbJv{3l9=}CMGK6TMdtf~G5Jy9-< z#Q&@1EtvYvXcRJSr&8>{)7;@C|8Ia>@P#u!2KCaEEG)6K{OEzYJvSwG7xS#I4a@l18nF$a>{ZrCk1E0xgAQD z8v`RCEk-i97&$*tO))ftHtggqL%v^B>WJ5jfL9Y30U66H{DSTVl7I`OZlRLmgk;7A zniq*&N%1VRFKC~K`h%_lnmjfkgbry& zWWhNFk9`q2Zx(%{|~|g_cP0Q zVE+*vP>n;c=?rTeX->ynW5b#x7a$M0SRTl0lq928Quo?T|BMzCX6SUZpkV*Hj+PU& z%5s8+_I%;nReW`(p^pjZRZpL{hKkkTqe_H*mVsbCpJ%)jdap!@4z9wTm_A zBvv}U)}V7*=LH7d(YIP-_Ql$RAN=}8D=zr#WywPerbq+O%0>xt==;%X2$oWmI16pv zjJNUTEPT?<&IF2=-I1gtBKaO5NoYQIn4vwHq-cFwKEZ&Bt!Fg9+I8{`l;XR#gy18zK*BEVRx^D5Vp&amXYVVX%mePeo;2BcRTJ zjLop&6@(^~VL6uaO7uab_0Sy0+6y`<>v~{Itc><#9hSanGYq$Y5TVOB05{HpFdRoz zq4lU4#4_Bvh>;jB{KV54yV-z|C}W|65UAi0ja6fnOjEg(M4uUf3`pSKtGCo17PSv1E@$E!wP$Esy9Iwu;Q878p;62-5n3L$F|lRZCgZ zBoIqQy)3*oj=nac?>#7w7x1SAyza2m(UG}fS763Q8?5$V3nRK}kU6U-e>+Vh4Is%{ z;FN$v-N30A5rF{|h@-E_m7#?dKG0~d(^qQQl4IbB5rCCVWxJ4>_6J}KEa) z@mScgj~c9^k-=#={W%zko**U$fUy9cwD|)M;7fwg@KWTU=!!8C+pz!{WwzkQWT6j+ zM1(Im2~jw`li7yWAMu9!I02V$0&RNI@>7Ff(_UJpEkgNCw5gn!LeH#VY~=!^Dr327 z0ET-EtY@i{RuAh1euA5@7eTj%quX2(Y=%v zf+M_~(`RZNaJ$^jEKo%#rEz3JCuxrwE{pJuw`r?Wv{j~nbu$*H8TDGLjyj4@Mi!x? zG=8;eVkuNY`KxJ7{6;v#!BoUNGEhkMnywOjj05#h5ZM|0@7%hxg1d9t#{s_65YtAy z>>rU$%HtzJ_~;EDo?hNO$|Ng6gVUzaO)tFF1~>uE-9#UMa`X`(I4B_MlvUgVvy2Eekd9j zBvS~bi~!K&??~oKD7^y=*D>@a9OZ-?g-~l3{MQ_%dljJnOsJ^~?S%RlV-8=ss$-4_ zRVp6eF|quF&LmN?|DS8mB|xBi{x!53= zGqcHB7s1i?AgLPI5?VbbSd^@M1SIrOLxcs#aZ)g{M251?nuhwIMc8V91*(_v4MZBYnc_%&Dv4VQFg#7`70_kH zrot{Tf&%3;s3`VtFCn>$R#6t16C3)WtBgRZx2Q97(K&~ii5vx?8*d# zRpSCP&0hj?0S=N9#1^e{cTiH+jxY|@x{N=qKpk-v{R6HtX&M4@DI+h_gsGKC$kexB zrqkd&ePqL-7dR=CIJ~ztheF^Ngzz!6n(SxQ;loT8zm76E7SlDCy%Kvd&XK>j)w7rN z7FTT5qaH|8jDOQHLOBJf8rLFdI$Pw|iVr`D$5G@66(JV1%Z_(}1au1Zk=0N382LhE zsfSh9+broKcp`wgo|z`tI1)>TJeYZ6(BaH7tYJRF{G4U;;rgM}J zqD;F)>q?6>!{;*#h^eg_WIf2~EJM*F$+V5b4PHhjbb-Hc#q^OfkreSY18jQnQYJw{ z$=iE6(rGFRd8>1#x2(ZdP7U^4W6)z}-PoeX$$88MT404b4vxpCI@}gbl0;UXyID1+ zy=uHf$1-3hj%v_%mf>U&Qxz&4d1+eQ$fZvTD54z=ah#(@UmzaE?Y%;6B!ku3jPFU> z2x^fYI&=a~iT&BYJigHaz&G(xmLxt2rr<3RWY38Jj_0g2%PL7S2a_B-Vgxkk1uWA2 z)IVwfU|2sz#=c+{bi)~tOHSy8rcopjoL>e45Iz@j%cz0T@7(fz3v`312yrZURBTIMuZNNFV}HZF(y{1Hs`J3cPy2 zOEnO4p#P-PP>Lxcx?whOy+9|b0&jCpSe3xIz>k55r^mESa0^dJ9jH=dhG0hY46LA{ ziulk4RaytlGPRB`Jb`e7Gbf_cJSeasxv9c}z&hAbLJBb=X#fv&%D@A_iCGNPOPoW9 zhM_jWhbRXzO8qr`&x8j7%pTNXXa+DgvkxazcQPT3;x0bdnK6 z@x<6Hi-e9BtiXw*w!D*nkwAZQ58c++X3 zCaQWRlTv5CAu)q8#G>@$D~dUDs4D7^L-;%N@H?Z3)^vc!FXRx$HG_*&|7eCrl8Jnb za4kv3LY$YQsq5&l@c8W4I8JT@(xO8Qp?T$N_o*0Ag^hgTX&^VNDmwq*WRu>Sg?6Vvq9mTSOe!NVgb(0DVt3<1?+<~)fDuN($C^aCn6~MjmGScD#wFSHt z(G8+wArY}z=U@QXV6KXVvRc3^)F(rV7{&%3VS@g!(sV??3dAYZw5905T@50d+pqp1 zor_`+VKCwFQ!3sxmpLB9C~D2j+$n*VF&KqNcFW+;8Q7~wV-!VTj)QRX)EdZMK`bB) zgq$SlfEU4%qPJxKLl2>CbO+?mM@m2fE0axw2waMU90a&&HdSiT!$*&D*#09SIp$ZT~GRKL@3Qm(&QGHR-`zAe{erZ&R|IrmNj&P z1~p<3V{y(IHzXQ9Bcq5GTVS@MD!dplpfr4Li_{=5>qo?M1Z#Na7HzOp)T*b?rO=wc zb=s0`7&~B$AZ>ut*kfarGfd?S44X>^miplm%qHVKjYOSs{fBn@#OE<+bY5P7mFx~s z#cHYVhrw(uTi*}1gY~Rb-%m%bNcbhLXiRqrEyO$4vzJ^#XI(-YTtYdLy_^;UU*C%a z8EV++60b!xXk$J5lRa913x3mZ8V)_7=E=Iov8d`R@M(IWf~A@#nXIyVJNVj3GlNlT zY3OPLI7z&)mS>e}X@F{4XC)s2VrdZO!NZ!f5vW&==92IoSS`s15E6rgXrx*oH_Gwq z5uOemx=RbE3-TG$%&6R~wVKU3{OPq3I#2+^nO8EkQ2Sb_eZ;_`?G4!pv8YY6-l8^1 z&Z0btRkE4!02yRG3_Ell*)bo3Aj4{$IGmX3;Cf+YTV-BWq6H|NFk!E(U~d3&61E1n zh+L!(G}e308DMg->A|gNtk>;nFJ8QmdcizI)3_)O#FKSBAj_#j{%I6wUD6+uL-bZp zeFQuj8MoCTUp;~wneJ_(ZeiHa;lBn_4?H!6&D;z8q@ymOKio6Ys}Q+=X@pRdtTJ$5 z)zA>)s&VcSExrN6U?y7cq!+J7&=fexa6>BG^_$8!LbH-}-D!jj;{C#?w0P?UqX^7i zjKJ&w5%}c-0(r#yz+To_w|ofMlC?`OYt8|BN4Kbv-Q&~atsZL2TOiqP4M}T6VnD+~ zV$&KLs6p0|Yw0;#YhALQURG*NTU3#2J-eKuDp=R9pyy7F_2Ei-*{)Ob!1i!HjgI88 z6(4@mxkN&~fLrM}glD`22wt}41(>8!2)U{!Lf_jh8W(6FtCxE;X@2%wxK;ua6VWF3 z+&&!b?;h<<>cotpjO90m~972r%)DE*+y`l|rO5#7;D5bljU@=`2O?fuUBP za2DDawHRO+QyLFieN{|Vbl)pp3^?OijU>2$+sx$A0ap$AW&i{Dp#|80fL9$NBBXj| zP&d+?JTn?6&kR5zE+Y%Wxdw2mD8nulNMieh+TI8_*R@)Et11|x5+_#aVEMEl#A5{*@R5#| z=%iW=9yqNT$hJ4eZV#H(RaKll+u8Ey>yXd@K=0IH%yns`@zkD>r!%dj5@L$ZGj+uY z!!vp$uTqmCB`FsKFM&gNC2$DKdOJAA0|p(I!v~Vd0Vw;CcLGFgg6S0qiO(Kw)|0p}=9nJ|d3=qPD#UtC|2``eLFgh}2vlm+*ChQsVu%2C}j8zPkJeWFY zvH1sPF&u8a{PK{BK+WJ{!YZ659>S?Ed!R!&;PKPJL;LnZ8hHYQbDZ-75;Ey^@fE-& zQbPoEEKrr31uz03GB8AJlG)4G$4C#(VZn%o+{9um1Ly)Nwgho?-=ibmumD^NweZ7s zDA|WHn0*8e(6t=qPY>%2Jh3szS|Xk;9bXd7o>qv~#0Ib}e5?@-{XBf(X7M2rI|tu6 z8_2idW1WqrbmA3R*oooRh!)qFTE_u#28|?1#Lu2qe9KNp=V4z3uFbPXH1{LDiZ?nt zj}k&#pehUrAM04uPkIybhY-?&EF7m^>d-~H9D>kJsnkUk2TlD90!2B5LS}SVPY7`e zVTpz;;Sn$>)v1jUqdKZXGH1<3ec~1DL4bP*%IUc{aWF`=e5mX_v^t;fM-wjMX0pN@ zM82fc8gQwsB0FdsfI*BU2s95MjZ9F|m@q*35N@_Jy=b=J&6Xx*lM(i}j%8zVH2ng% zG{`*zt(dyVo`JHL`vlMrVqYnU&S|LzCkxam)jD1=V%>9q*|8WwX6<00L&6dQNCkko zY1aA*Twibn$ekMoYPP7^o2+U0zvw8-Ks>5IJ*yKf13q#l?+31eMoJ)NRsMKG92_R4 z=m{=Hgg0%1Ks+YMG#A5Luq1~|wejXt9X=K+Olw7<{G=Y6Mv>G3W+_4Kq&JBR1UWC=O+`D3fB=phjFp+x3LO~l79F{{1eJ-H1h7!G1RTZCx(jNvI90=L zE~oxF7FRM^|B^-y0|KFKOhO~WTgIFrpfOz}E5kTRuklh16A~`EQY5>GWUxlbb%iE^ zD8wEt+owpJgBAXwA_W_FDaBueX#Xxyk4=PDAEpP{Cjt+cQUG=@jAETtjweAy`jCF< zpR5a(f`I~fkbKQJDuZGmZ!FMzw4KeHxDaneEf8GfcfgQF5C>mVC9;M!9oqH*YeVLc zTNm>u(-StMkP%2|0IkKe21xPXC88r%kY%22;7AZ|fmY(HARFy%l6ru1L%~D_(j_`d zs*Q&y$q{lh;im?U^rt2;xrM-{W4{3<;j0vvhqXo;i7#Wq!SZCy2_Z6 zftRd4rqRR`WVeA1sMV1h6EZ72ECgV-x*rllvbl@(=EM|CUeut&5HS747$&v?%-kWp zX&tph-LhL`sP27smJmCjN65+&gBZd>)-NN&-V^e}*gFH#DRRfBK7r3ZRPcnNQ;dIU z-L<0%D>sArG_O*j6)YENBX}HIU~v_N8ApB?N+%0U)sE8%owAvsBAaKDEJ6; zU}ur4*Jz~)RYMCqYMY^GftQu1=FOgjcJdIjPSd&QG~73&=rowFicaG=)@ev%BTwN) zf}V96as&&V1`ZY@l!!!J4Em6^V$2F^I1QO(D)}UY5O*+$WL&7h z1cR&&FSADA6g^3)q7=b``ZUR6d zQjQYx}s8jsom=mj+hy$4?XkP@$6rE`f+Z5cMKXecV zqkH%Gz5%p=!g`!mL<$&4`8PFqTD^qd4g3Lti6drNRR&8kE|TLaiT7l8*f`09C!#p9 z2x?O!T>QjmSY2b(&>R3kUY7?cUfvVrfuO;3mfiaZN%T?+#;Wga24j#4&_V=Qu_fR7DceC{bL(tH z3UHN_gz`O1<5)t{m_(GKZXx9$vp2h4=0m{gMGoW@%ZsEnWdpcESursHAUG2NGsC-x z0QO*jJs4oEt@beb!o_B43+=0I2~O79^ur;DDN;XtDB$-1U|xaL2@D7VpOldk{NU7h z03aJw;L)BF@CF8c%l`=cNf7P-Kj^2uE>94cuVf0ER2dYWu$o}iy(w3~mUKd_o)L?+ zsn=uIzXk38f?r=7vcDTh|0g(G?_tnl)~vyw_-X^P*rKx*z`<@Lz%hi#gERE`!e4&P z*A{w!?3HBruSwC7&r61Qv1iD{^|)&0fded*aCOKxzr2;X2y6G&uV|3Rhe*N!3i*%W zmw^gwm!wRKCw>R#&gNn5PdUc@BxSxTLtn~}J@lPdX6Q{BGPj=$0T`F0-EyQV0Qz~fddw)lX%hchrpbUEPSzeOGxaS3yB0F zArMbg0OX)kiMgPK+K;z*5#l@mK_Z+NFYA*R;SFx0pQOZB1M7kF053@iJ#fbj*^BY; z#-WTGrHsr3hDB%-wbA^GoQs&CkU|Fs0211%;03P)wFa>9Na%s=3X%v!w>qH*MQgYg zlpzp#-ExVRJva?+)=S*D2k#U?!#Y4q4by&0!UO##^!S^K^dilNT&j-ZN~~McqHj9V z7-)jFVAAB0m>+!4vZgTj9-BU4E%5c9R+v|&X{4`QmM(HIQB?F2YAIVy+X)ZsUH}B9 zFDW+%MHOZsla6mh9L{t^LRD({EKVDpB60?4I|&*h4*DZ;bu!HsGO#nO6(3V_%HBt8eGfUN(adD{S};>4A)~X(n401S*So7vZJRY~>;6fDY>xYRarP~x z9r<( zYn=@GYzL;1rwR}#CMvM~FuduLPe;Qcofw}h<`LW!iRI95^bm@ zZGpvtG&b?DL<${6#uLq4ae)pwGBi3^VX_{xbS&=?llVN2z_Xhwti6r2YLLV~!? zt^8=a15gUEFpZJS=p&i8m|svNcocwPuI8o8E>Rig^BAKT5LCO~YDhyF8s9JAu4ACQ z$fl!2Pc~pNpVj~YuJG%oW_7vY-5RpPXZ+{M|E(3lt(9Nusa{< z#&&7iyeDfI3~rj>v7RCK7`c-OI`^^ z77oSk8PrP?C6rg^nrahd=4;`~7u}$`C?m$XBdh9(G0xH`9%@m4uq0dbdGtDsRwDl4 z)dYPWomSG2*Glw~u&2fT2XHzb@Va52g0jT{ysw}Ib10ghG6(vb!M7M!G{@q7+5j4k zcBDH7gOPhCaIJVh8P{##|E8*dUFHti|B!Q$PSy;EjMm7fd*qIlmid1)M>1 z5lDd!p&hPbb1N!@Q1@2` zCbY#JzjuuJeG9mea8vy8?B)L^*rM(N8*zAPe9T;6QYyd57 zy#)d7ePmTYt}>Vo&T37Mdtj(ZmQHv90cafq59lXC3&f{=p48A} z;gA!9*uVn%VNwU}L%atyL33qt%rQG+_lH-4*+VBP##J1ly z7tfybiSI>g*>H`fA_HPEE#+8sBMD4Es9JOsqlHF3Ja_h8G~mbj0u&4~>_caE13%-9 zOb%Xa5(@xAgV9$a=$yJU*w{fBPN6=O-u2}99MvRILENT#Jl%_e~> z@r1)wTr5mu5UhehM!Nwsdc}h7=9fKxnbf4Z9@wIyXKE!MY@k3h+GJ z8^?7TAJxMxJMH@>>4k2Yz7?{LpoJUX0x87&rp_^Fh|%Y^;4pG$avCNBW)O!2EkFbt zV>yHEPGHF(-oVZf^&Sw!Sh}bOK}~*;YTGYXpPKoby8@m9zepFZ_O zl9iwE$Y<&ku;&qr$G|Jh6YQ-83_6Gsf>FSscZL;d0M1ONv82Go-)`w?SV8#o7B%Db zB`x^E??h8ApjCj2?GJWv@qIN20Pm73)TAH9t}h-H0-snU1R2yX)MQUS?}X?VZyL@L z>JN>BxkK$_W;9}XjXydfd(%K;FkB**aybrw&pWXWr2#?g1BMflb1Lm)BMpwi#CBTi z&mxa6Vzl5P_0t7U9vt8bQtVfSsVS`fQqG@h(>Vag>~*RQQe~)~7RJ;%U2CGwJADWt z1T;w#jcGD>e}xwJ7lZw@aKsU1B|eA?)WKaEwBHNVfqe2Id}t%UP1v|b^DPZFiJ6VG z;)Fdf7QFjvk%o#bezF${awBNti}DC!H!~?xZ`rpAHV#87&_hQTe`ts=_%lW&JLRLx zMrZ?3>kzzCBt1EF?P(FLs{&=JH&Y{)2Q3{GSWmX^qz z#K2k(a0aD*ZPR4XOJj=^C=;H=#t~=LIG)Rqo6yBkh`e9CGGzj%9M?tAPs(BUjpDi^#SZ`{<3vPb5$-^yPGTyP94rvH^4}>od$GK%#a7G_d6*7Auv1r@nbjTZ$h7ZjEcX|@uT zV>)77PeYrAErt}Wqseff5Rsr5;0J+t29e0DgE~P9k8TVO+FQ%pAb6__Z?~ikM^F(u z)(xa+aaXY?6s-mJ4$7ecXb)TvgeuXBw=xv5A&bA3!`L9nh-F@q*EEY##*{ZzK|6R6 zjk0N&$prK=YXKcTio+XES+M01QU^vL!3C7c+TQGI0QU81uu@-Eu_pk*0QaVe05K)Z zA+k47kG+2+U1%v<5id^tQ@?ctNq%6Gd}hGzF6t%s6h(UQ)@Jk>)zXv;5Ax1nE<$sX z3|MoVMq-Q>h4FDKc8T^dV^0?Mgm*6s_Y7}FA}~BSvmL*xRl)+r9$sJ;%PnZyj&IVBTqVOXM1$NY#E9m)Xm-eT zf$-R&NWzWqu3%fOmeFD7EcWv`I7{c?EIs#|D+Zf5br~#0D>Qfrt3xs2xaXi8%AwO> zMti3{70%+X7@T|R&RI%_Ir<+uj0sR~&eFY#vxvpPS&%QxSs*+5=^z2jc~`!2>Ycr) z54eV89N2^Kfsd4^1_cg8U+}qxvB^IJ9C|#p+xN4a7wz#PyG@n35{B1awJgw;cWg z{`>ahy2YlZQQM(PkeuhLash|&%j?P{QbB1j7ms~213)j zc8yIDy{f_}O^AyEGUuTE1hhFHe=`2m@Cv*aaSG4GdugX|4UHrfcM4ZU_`jz`a`&Xz z#JIk}L;=8Fxl+YYhCMbhI;CH7T3k|MNF>+@Jkd!ja7a8saH-+9m2g2k3FpN3Z{g25 zTu6z#hdPqd(~{HEQn@cdi1)%@Vf<0w)G*Jf7Bm(I){rXaXSHDYAnWE3YF@d)-O30DgXRmdz9;mY$OM$&!KwaVu4o`2PNFX zGQt#B19`h9cE-3*Wjd(&&2ITE2vb~lkv}oAXKY+zTpAZl>XR6oLJ}Z4DJHgVY;r+u0**s&$ol%x@8;sJy?!Mp8 zeNt`too|n{E?@V+u}Kdf_3NblPTJbDew}wOMLwrRShTHesFNOlJM{hgEw)_$v&HCX zNrqitfACGIfd94rn8>uqw7#8Fd&DNhrX?kIjg2MzCr9>6NQ#U}PDx7YipKHZ(q0*D zM~^tLr)B;2YYuJdQ~bN)x<(6!v@%vGqMJ8le%ltO0cRQHEBmyLG)hGX;(|O(EEgC~3gb_ec~p+ZW1FO&v2DS8 zjbhSV(r9ct=Pi$L1^l&3>ssSwdI)MyN=KR;OG+wS-h#FXzBXwo>CtKLb&rki!No8f z6Jk0OONsiukcVKYh`+c*@D`rV?P9-`)HJdmhJGqEjB8pb(x7;{CAyWt=MYkFB*b)1 zPwt$S#1M5(h)r~^w-WM16I627$hd^q7`bawiVQ^vVC9~%J)>e%a0oy0BzT&5?2N)w zi*WO##8~HgDkH9KdU8VS%R9;%^}m%q(Q(P$SzA=8D3k@Dj*aZundC4@TS+8Ff*wY^>8 z$OS!@6J1b?rJ)RsDHZlOfkQbhvKzAw6(NRMjC`cSa@8409hA9W$R_PUKGFqheYx_d zCd5U@I`Ths%a5Y`U)!*@p}EQi3)t1hs`!{BvJ>m!>4&GvtnU0_Kbw+Pwdt_DXnEva&l};qr}#+y`fQKTckjD#r92(jYdA#aakSp zsVSWkc55&QI*EtW#0{W|ozvfBS1QWJ{#BO#%QUshY*5_9T-y zIVHAtTv9q1o@@%@O{yREx)hzBk`kNfD$i;m{=XfEsof(h37f43+dZl!D#lPHBZQ1R2@A#}0-8QG(O{^V$zr}(aSutEcVZ;_tX zqN^<_Ju!ylh;zFU2&Y6Qb|WjrIo^se!IP4nn4FfUTsO?ni#D7Ix%Tw+>mic__z zBB3+a<(5lS)0$cl%*N$h7_Do!LDt;JJ&Mf$8XDhon6Sg!Mb(Fht_Ey znUEg)9w{J}ZLAxe@%kRxcrOXa>zkG^VV|<*LMpyK$tv*^q-9P91Q$EFxX<# z*m!5|?boCnW%0nj5zRK51T{hTlh+;8nvN z-NGNcg(Kac{*ZsB;ha8I{zvJ(Dp@$nCK%75F~KRPC^n*J~S66uMM-6^S&3BlbX zQ@exmRV#)$P2@q_?)ijGHVE%DMw;Ny*?xBqmqPj#lqrp;v;CfdemL89YIq3pk!|xj zb&uG7sUgYfQBc>QcecMtg2}`DNWLRA+#T-}{(l3L>it23`0s!9Q~VR1{@4237F6Vs zBKy_w5V!C!gv+8oYWfI-$q%50KX=RT4P{RAA2r?2Eu7CST+l6C7-90^{lB3Z<~WfF zY27Vbjt}jnN6#z;Fz?X`4pJQT1zDzaz!Yxcj zoO8OyEv$75>)gV6x3ED8|F`}9M^i!aFYIb7pv(WW-2SKW{J+Ze{}xB_=~4JUI5oO^ zVp0mJ+Nz2rn+k7RWLi1~OGr!-4+W*3~HF{1cGULSHse~Rjcc6w2T~9XhwSWi71cI@#TLnH~53}C)Ooit&cog zG)Lxgr_j<1PEx5mAgKBzXqdZGLw#^;9sO4#*53Y*iuXTe#I77ul~Mw_sF#H-GhVL1`M5b zan$}3JLeXCaQ?Ua$6Dtvo+(ZE?POIs@KTYW2ki_Ik>8Y0T>orC#cuuos#xnzznmgz z+pnDbdcvfbdF=;>Eos;7e)jgLvi)mrzR;uUp?UkGhnr`gxY_maSE(&bX&1e=?Fm@W zDD;6eeA~(kS&x5Q{^*@+-9Jn3QTdm#S)Nl`-MsX}$F2Sd3L7+KjC48c{RZZvz9SL~ zbli3PQjLDwFMmGZSDk56&AFjN+du3yu>RfT(T!|%VhS1#Uz@x!anr!LkJhY+c=mPH z=g+>?bX^>>@=oJ<1qO_6`F7NIU7mjNc2)D5k7`#n_9$___snV!?zj1AY`68}R)lui zw^5r}CiR!7`9O3Vt$R>#tAtwz0lw@sZd43&|tCFYvHL&$UuDkFSPy-Bs8#PiCM=e0THCtZF!Ke@lGaMvdbJP$k=IIRBZA{B~PkF8!Tr^m3TE%ZhEFP|Nghd%-vYI=9zjiJxni-H0vjiZ&=mmn_1Npmqk^%^2L$FEdjHy?jN)< zeDYVfGRDWXj(h)|X%`pU?!|r-7}coPyAvDQW{v3lFfyxITHgtI^9-!MtHnE;qiVLP z*1c?IyK7ZKj(SV||Wg|0Cp6C(NZxq)OR@Dw3x9=5kdx zO#Ze*#o;%GpKbQ@(tR`ilj7r`icL3`OZO>s^N$Bjrx$En;L(=+ zA-^6uaMLsXbj`h)MRG3vQ0v{sQ!nTDm~!Y`neeDix4x8jul=LN;XBm=OMK*U*z|d= z3YQA6$v3^y+>x!y`XA`NvUGLx_k}KoXMNIT$ZXxdy?bYsxcGTig|Ry?%x~v)>P6t= z6K_{6{d8}>=Equ;>JTAyZd@qj@mF!fZu)Dkg`ZeShlZH{|+-@3xfN|GoG6akVx-deHIFl6+4ScJBUEo295H13#T$csBBreb=Hch6iPLix~gs^ZsYg z>^Ky7wav3Fi!OdSC9BnwCke@oXE!e}Wbo)wehXLLoOk@}Z)+Zg7ihAg_xz@_%**5Z zeps~Fk1<=v7cX6-h~8et$7;$Vxw{@x(E`J8u5s&rt{8-}Q-q z*t@>zOCncqu5;$`-k6EORWlwKK4|S_>$bD=(Uj>;EA2ZR(S82DwDF-u{p6e>VL1ga z-%5RJYEbR-eX1VYbt1NX;}Yi%l(@aBUe3@=@5v`U>RWo&9agFGrThiAJh^I2X}$iP zEfZFxh*5zgq zyRRL)-*#NBYT<#0S4m4!MrT!j)_LICAiqM_YuP3@I=AcBFW>%S_4AN63v0f2?cV9) zwtQo9=8kNi(_w1DXzAvI)$5;3p7~}*R z&A(8Skn^p-^SU=R-?Z2%&%dtP~66?AahN}jrU_cc3;1DEG|1`!tjK~&rHZ*O^6LG^vtNF44c?*Bn##JQ1*|o-{CH;`0j?6Y{LTTInrKO%Ex(eCB%%w#+|x zI%UrJYsD*n8uM&v`CB!*HhXbl(xaVu-r2JB){F{8I;36F9avL&?;ph`zc|t0z+c5T zdk*NI{$Qecut!((&Z?GL2QnIVowuiJnS56#mRV;k<9ja?hvjE{V;J->1q#-)w}%Hj_WVp+cx~(1dY#!D?GnAIjFry#Ut~Z-sm^$ zgWm)07j8X%>WQFU2R7Kcuk{~1VA||`A07I&)b~@bMsIt+V$4aOi9-i$ADkYL_}0P? zdQE?Da@ms~!!w@#_@4izzC%8Zd@@Jl*?I7W4T1H~jDG7;gPgT1V`K9Aoas35MP}6D zxb9UWj+Pu%t@O|DOuKz~y5(~Fe2d0xyB;?A{_kZM28J89l}MRVZp}K&!S6g2j~thUhE17xs8-Nr2%|uY6BCzj*)b;*kZ4cCPi^xFzj}A3Zj3Xa3|- z$p!jnwMsu)>28hopBaj+*f=von(*Myo=Kl%f7W`iA?d=^fI6S~mDhAiFCEix!Z!yx zClnk1Y-YVv(Hs)7?KTUN`)cM|lot zJJu}wd0gDXG3|}rD{T!PyU+=a0jJ-`1Xxn=)4pTD*H^SY-z8uY1G zzJ1M0Gv|%i*Lv&N*pah8+PAl7sD9DvZWT9aQwlA~+?T z(QDi14=X-*PTtI!GoqSa)|vm1hIJfc@mdgZa9fRWUJ;E-bt*SgTHgQIUx~~2)fxHz z$o=L2=xgXxtgzol4L;s_Ix^_i=`9auCEp$4)3nk%%U0=no?pGL@h!i3Me0{8P$mn%rJ#+?J2l%gW!qZQt%`HYbt!Z4xvkl`%YXQOcb(udZ9ASD zdc$Y^cMp%m)O*^{L))a>#PugGZ;M#b_{Q4s3hhRiSb9fZmp0}s!*S4v-YKAuPD;4Lc-dupA7xE`_PHC zvM(4zHe6^|@XtrH!shq>H1^Dq!8N3a)Z!7}ZybH%y?XBrc~ogY(X%uC8gG74bZhOm z$9Q(N6fb`Az^-pve6X^_^bYw7NIx~)-E4i2>%D(09G3F*)Zs4ATGq(8TeL~q{3?gq z_b3>wKmK0bB^6%$9=y12YMT{t%Re~XI;xKU(U5MnKlW*J{qjds`X0)Ed_bAnV+R*{ z_{03tiGAk$@y_ZUb!M!R)(2ktK>K23p?!mwo_*5VL;vEhNoy^?_x$ynI(fesU|TQG zID5F*JHJHaxpv=Ha9aCTML%v(rNpM+n#^cYKpKAIYOSJMrJ>cPpFDeB{;S2nc;6Y9 z4D+;423_?XpQlNOrF|OpPaOSc!%_hkD{mO$RWYw;tx;v)y)tch^zwnl=Y%aka&61f zE4I*4hi(NF8x%M;^FglyhrU1A!q!?}d~4|KI`ap8_RWL-26^k{Nrm!Eu3M%02j2BM z*xIF4sXYCY2R;uPMt#?{`Qofg-wj(ZFnjK*F*oB1$NlYs_a?#QN~vWaGgm-a{6Tt5ffBiRp)Q>!1JFBfQPPM;+>I=(O+d?W-QV?8vvHDE z_gQk6DYlq7wZ9v-Yxe!Udx}(Ov0`fNpT-^uJ81ePFz@?b*L(JUziveB+3{a3%qe#9 zqh%>~YcJW>eCmqn3-kPP{NvgQ7o)nji5oCts{fd4lcP3PZ&Typ+lSkwUfQ_$`oYOx z`J6koKeVN1;GqSD9u$gM7Z+1IS_<7aVZqhV_>iWvyiQc9UVT}Y@$YTCey>3IyOZaX zzFe>Vm}e{InmP}%nt$w&&u`j*5d}>@9b0{O;iA!ZBBDcc3>6EE=@D@G-R!1wZ5OHx z32qnNH7-4+`Lf3Kiv6I~d&!;hjlbXN&eaPe&u#xL=TXnB$&Xid?Ye%$q7j>aZ@R=( zKYq$rJN!Fp4F%ub{Q2F+XCHLC|6pOGf?jz}?O!#|eCO$`Ynf#uuk3yxX>C=Gq~BV- zA~5mS-}2n)QEQ+kF(>%f312*4Ib>Y1<;j+f+iuq>zjV^Wx_xg>syI>JkQosETQT2~ zt4`LBiqJPLS1a$?qvJI5yw)x_+vQ}_E$_eQ-LKQ5&=ToI3U)aB{a4Gk8E(aWSb5C# z;S~x$UR|?6%(!9OS}&X%Q|4m#c{LvwSkmT`na!qcdN+E-y{DZDEjX8VONF*=DomKU zt5m;Z7kX*uEb4Z=(fL1uM#RKw7d)9*rIuuzw>SLIps3iWnG5?p&9nS^)1LW%ICkX! zEABg>nuxk}GwBJvcL-HF2?-=rQF`x9dM|=>6cGs>MT(+=C<=&37ez%t0YOlT3W^jP zy(=IhpiV(1!>b8-cE$=kf06N$4^tIp`Kr`{uG}>Xmdt<5Md5gtc zBYMXMUmtu7v?uhApJeU}WlWN;;X!FSQ?)DXN4agtB-y zYQ?`KWybX&uWU5hH0i`toi&l3Njg)2Pv1TH>_ShG!(^=Ji>vHB?3)>f`J-1$hEqAt z^3~T0d)#N@*13c`Qp58ynsC}aIKkab^@76fiOxKZ;P+-n2n@?Uw`;@KU+RB8b5;2) zR;{bC^b)>L%}!_zrYda8?iIn?)llvCL0+`xK9Y-vyyEulG%>`tGz_w>S-)J<{OVwf zxYD&9O5nywUAVcWcuH4PP3XnTQ|?cmyN-JR+7%@Jx7XXU`vRShkrVFz5NVSckn9<$ ziHz@<5V<+VR;rDA#^ob;^z(&dJcoq^jg7>;z7$`OA7%BE5py`=$*YPdJ$^h6Og}i* zxY`Ln!PpJt^6WR6^F7=4KG2iFu5vu;BzmkU1aKq z%T1go6PLX6I$I8){d1?E-{HN9Tm7_rS|TtnEiGK3^~1|*6i2=`FIN##1O4^xDD@NG zG_ToBA#Llm8r5|Sp0LKb*)%{mx^px~)?3EifI3xo=ga55o|%n1+-?Wk__Z}^C@BS% zS~0_ZkI0o(d~yK)>3v)WBg~;$l&_sKX_x2#2AhzEjrd>u2Yvw}&>5 zy5Gys^3n`&Ra)S=dU!HbRyuJ$2DdMP%M-7yLSc6i9XEXHTr2b_GsvW+b=*ka`i$kx zPi-FIqfH(P*(?{Qj*$j(b7v6~q)bt?oT)t1` z5iKxZE_`<5#z*XrI4V7qXIR!;N?(V)>rl@muh`O_Zaj_yuAa^?_m!)@AL_hMartgo zK*OWT`S}{0^T7sEd#4L2Wb8BCt;*D5wVd6@(XWprye0*0s(3bY9F>{X!>M1g$92nE zolofyO59yQx@ZH#|3U2X=YX#40PC!>ly9nww^4~^ZgkKyLiJOu<_BW}I|rIJrFst^ z=XBBdx^p>$y|;}r*rE&YU|D1xjN{e?Pt6UEY*_5qdbT{9GQ!?>4VECE`zSd4?Kq}; zn%SkEHIAJ1b#q|vyJDsS-&pK|^ZHo~Zwr?Q>jnB@W04f?WmB!|AJ)zxxl77Kp&U~Nwy`@L4l)ih3z||m>e_el5YhClz zGU>R$jGHP4INZjg4k$|>+heRL?42JTl{{}d2uwwmrka#q5Z|v*rEM? zZJznTy^-yQDVN%~9FJU0@pjeGW_R0cHw!mw%~e#qruPOk zxYO4>-yODT87fr{sQxj@rVYD%QH9axM%9HH=NEpm;Zo}$1J(Ab{mXVoe&5G>3Xj!v^@=%_2r7@4`I!&)-&ImDdt!xzv(8^vLSFX zqV-bW#-XVp193`bs`Hcy6QU7U9(MUz*8(G)_rXAS$3~I5qX*TF&?SR$Pv)U{R)_tVSQFX3PH`@!v;`VjD}w^4z9AWL-M)V zFUX&uve9R4KcBw3W;v0er3cKcP|nQ-%5uBzcsQm4W1d4FOhg|AzgmSb%e?5jnpN8H zhLGaQpo=%9%xKpe4`(9|iN^L!FW#JsFbv342E3%HJ@?>DVzEBcjB-oj@7bjKIXX*k zHCbi}Vh*cGjDEdhCSXe%iGR|^#1S9eu)@6y$vwa4J8Rkz<1(L}XV)2LwpsAxvY@QN zaXGQ|b&2|yS}Lj4tdYn;J2t=Z&)q{Be0aCHR+67bR@dm)>=tfC<1O302hATgGF-nW z&9JP;YJOJexjbo9e;w`ArVlwPRQhVOt^R1MN0C~Gt&cbJ1+jnx(yn?^a7$;pXY;C4%#~S_VLvZo;0XWI z6Wh{N!ubzyMRj3L1{G|hPmW(UwKEuqAU-KJ@wZ;_+X(5ouh;LOK26QmQW2B1b*4XX zWlaBry1Tv%-ACwRvvH{*J8#F?jG zT<;h(omcNq(D-oFFetX~2`Bc%75n`jDoO0xCFlWZd~(dYl`F8-N{mMpZj=1v!Cfgbd|_hp*fJMF)}e^!IepnMxxaF{;TwM8LwUxebsVv~EwWk~#?T@jA%NCAT z**&r_j>O$n|8Qd^VB{>T=1F^@vYQS^x(%;gJFosyR%6+D@P12W&^KRID_|#ncJ-xM z^DgT4K^DcE*_}Q~6CIW^Kas`O^I}6w$%Vnqb;0NP9ImKe; z8XTyQ(y_E}oS>2Ooui2le>gY)eheyUx#}%%y6=(5fJYB+S}K;mt1U>N7J0|H6=FNi z_l~d?sGqrnC=uX$AH3S3&tR$yPhmKrQ;J%f)wO7jPiDK;U#3oSPKl0Vx|`exeF9g={deKtTduE-xH!1-&OTN<_?q$g zth?pf9j9`8{Gr)$`JZXY=O5g<>n36acYQk?1VVEd7X zS%@Cpkz}k0mwBk0F-{j$q)C}^(G`pDTaVnD?-wcN;A^#+ySD3pb?npm6k=Ceql{yE z)iUCJ8~O#Uau|yH^D&kO=T%`3=MPQE-Cx39DV=@C zk$59x8Y6mUb}oQo_Sx5Yakf>fw!6)xH)t`ps3mXA=ngwGR-o z1nWr0*o@Jp(=vX^dgNJ2mVguF>7|_4-}L9U7Ot>0iSQLsuIZ<8Ct(4Wxqh$7AcB@* z^$}mYDDOm0to_io)tDE&3% z2eFOu-3i}+CSKkznL+5Y4#SPwl007f>R7CMm&Q-I^z;|pKb5&o5Tdp`!iX-hi9&Z7 zY}+r5?3G+sxO%ikQhfPwq}h{q5?73wR$MOTrw*t4e^2p+M>EbCvQvB`^>~WJ<1apC ze<3DCqRpjiN*R%9^L$LgTDM+kP-fP7 zaPKc@#~Ll~R?la3R7%LZ=6Si}8l*BvjM ze20lcuGoK0;k?YYvIyCl)w@8BjrKnjwSK+WXsaPjiI}jr+8rib``M;ATO$tpY}{ z+#jq^-BVm0w{d06gv35=qnJu^*y@fQhbnuyA*|!0@P~HzeZ7I_;i6vd(4{S(&)f3a z#!dd61zQ}@q4dusbZ(Z^9 zm{NUErM?BFT+|m&mOC*~-#UEw*oWqG#fn3kC{D|nO$hI?9|sS33H_*86&y5(>0e`w zK#A(lz-&~n8{w4RjT(3!>q4zWlI*IUZU+w6#a>~LCKfJtntd9}rL);mcwE3Bj1MYr zz-3;(rv-f+a)aI-uPu8zt8gl3x*?21p-c6it7_d$uF*68%@nQ3c$?SA$IMkV@v$1H z=mV<5-_=6hmaYn%96-B2lD0>=?~voCOv26{#fdU^AfqhyB#wm8k4xein3>3f% z$?>NO}nV8%?g6#ZslXLi^gK51?>7rfhxu@BYE;~ysJ}J5; zwkJ%pAlvhYNmmeU!1i6zNDS`Ha<$9(>`O59p%Wo`T@Xfg0hCAN+O4nl)vb{N4$z+5 za#LH8O2x^<<}_ApdA#swm2^T5t7}$U@qtGjYEKxvPZ?KrL@~dcB(%yw^dcFYh{w*x zDO!G5B&7DuSnpVkM&`H-4J6A5Rn!(i4^D?k5S3eSRj!f`F7Ax&-{CiYVpwbTA|2*7 zuIoj$&U%A1G}tw)(rL3X8TypaluAF1d9#9;Jh^4+wKjgsDx>O};XGuCEFdm@`BiAb zVdvL@yG@k|aVy*c3opd;DX&oCjPB35rd*BG9^@Cdde7?0iLCF)Q66bM;a+Jb#gA z^x_+CbG|;Y!gJ+(CB&X59N38XndzZco|4lF+t*ps`-DP}g$u7&G7c0WS}M4oI?8HP z)SFGB-rK2n4(GjX7ayRr+HTl7yGp;&M3oVZjXp3PrhPy6#<1a>)wTJ|M>+4Z=~qI8 zLu`s2GNRiR2}4dwPSdXbg1Gu)UHSfF2l1&k!cG}Y;c*Z%uj~)JDQH8Ha;zvnDQ@7_-ZFpeCwH0+? zpD4}@uexHRy5kBzg_9q$DT={aP|snUJ?%er3eLJ(Hga+;e|#A*{-aed7;)mmxlf$d zhL3KHPS`QK5Sn(LvLZ#;W!*>EE!^LqT6Zl?y2Frtj&=9cE%Kp+*6$jA3QTc{=FBot z%%;IeldIo0=zS`=S@^m|chOD<4IZQ-mEV%I)sl_~p+jn3MV*5{1$vi$NFZ6T`$JBO z91IcmdyvQY2JJf+J*<~7%4x2gCB_h#3}d2qe5H2M*7Wf)ezpgX)I&c8gofOgqq+{I zl|mta-goUtg7qQ#BY7dCJYBDB59&ZqtRd5tYS*BJ-}znn{65?nI+_0*9eMukySHja zxLzG1QKNBt5;Y)uMMj~HGu{E}VJ{YZ-EeM`>t%OnZM@DVS<<_1x?KT@$lEV3&*@<@ zBvI%Z01c`x-AI{`Y9Zaz&R=`j@bkefnOWx0(Dym+uH9QXgX{PzaA~P}^h0-Fd@nW_ z)5hnd#pRu$kAp?5mv8IkA3s$3bg(b(yHA8*>6e|^=T;QzD!-e_#W z4osuVSinZO9ntM?)#!KdGUFn#QXZV}VC#-E*E(CV$Hrp%;UZR@d;W9YK~H>Y>O&Mo zS4HKF%EtoDUt6(!O>FAyRvosESxQ;%mDOTcZH#J@sj@as`%+a(94z;CE8XMZqzpQA>oqpQr&TPcCJz;j2 z>6pS^-~h0eHtU`~^r0eef>ndT_#^jeS93&phkIwD#3W*XghUomkyzw%0yWrU*4+*0G!3M4mVcp0?^ zu8(kQ;8i--&iFH8$W;!3s(rky{x_DScdGQ>6zNTJk@(JVW_ui1ZhJ?#-3H5P4kePK zQkB*itLo|p>exEncLfG6+=h%AKX_OCt#Dt{dDb$EZ5N9fHQP{-WIQQLJKQ0wLsEYZJl)(#w^m^1(F8m_SU6uQ*b|Tzprou!# z3V>9fvut}GRH&qP9w=woCiUlAd4qu%)B_M5XEgJRd~ z8_$hhW_h~p%d-<6D(NEBO;%-FYFRRfEKF~&VceBKq*@R5*DxnYcU2x-zx#;apEU3| zDD$|g05dEVYEZC!Y1SEW8o&Rv=DhrCdo{?RkLROv7b6{_x9&<^;gwEdZ;4qk404ON zh80^;rS%K~6D285Qi0MhCXf5eK7#Hur*i9BEhcW(1kI;s+4P_HN1e`AVf_qMEl7RL z;^M&_>WEau4Sez(8r!&YBjbSp8*VwKNpEp9;+`ohH(X)7UVFOzqviU@RH&7sGHxDk zN<z-D7i&$nQk4Dc29P@A2`Uf(GNxWb0H3@2ebRci{YVamW0b;5Vd0Qi8L^oA|{5 z?>j=<{&c$W1W9#jDK{IhwRN7QPTwtL9;Z3JZc}fboiD1PylUax++2&oD-TD`-NWqJ zs#~TXSIBj!kqp%l*BdWR%`83-a?L4yC?%3*eX@n1LF9qge#ud79-Jmp<_0dXtr9<& zrF#8P@sw@w1%Hj1Nc_+7x#Z7DULFoyqi+e%FQmQWkvtr-T!}Ozf--xm@4~h3ePEO6`uQ?k{Tqz7EZ;V zX<(-=XObBL|Fi!8&)UakR!H?qiul^!HlmYSye}@{?sTq2KWv3Ny&ZjOX)N$xjsJhQ z{crv09_8X&VbJa74f0LYfvKJUC}3*JKMHN1mjAlzw7Ul_ePoRoDaN2jREP#~g;Lfx zKS%tl_w(yEA{%YRtfcFE3K&+pgSH1GqubB_L?4%zVB9U=*s>=aow-n25auVbJ#}UE zMV;l11&OvF4Q~U|qggX!Z8qTlweRQu%3=8P;yVb2MEa9$=o=2c=?;O67&1cw!Tzd% zou<9p{+Cw;d0MXCUtSI5Y47L%<<~}udJPq-$@Ri&?FN9Ycl-l^Ikon%N@ZGo?V-zbaG}6ZY^5m;sUAX$c@^_#fquZIx zdySuldAO-2d`{ki*R7^hzhPtVEbzRo`RWvWW$kOu!liCe=W}VjpMzwwRcyj9vcE>K z>^WW=9W_AV!6Y67W5cIWWW4dHjMGsR86w(@^VhcNt4jh~;Q0&UXxHHfRG%)juXd_bSja`pc5zTiGB zhxjj_4(`)%L;mt-|L`DzeBGl5|L&{ALP*<+kUr~pD)#X4g>3y{v8LIUldo?pR2^$o zi|Ece`7ueuQg;aR|5{((mX>uGt%HLYXcs^pym!nvV)SC+WJs4&MOyc8H z+W%L_Z{PifYx&!V5E_h-D(){N4el2Z3r-gI8{*{;3$|+zv_Zq{LRvHb%B2V4W`4oG z;QpQR2vr;n`sL3kNrH97K$*~}2!C2U{QJ5%5Jx5wH2fR)2;_WlAR-J6B<3IWem4dT z1u%9&T?av3v}zF`dKnEQEF?SzN5jtyIRXY(1kMx0lEZlgc?1O0j78ugkA~p918Boe zi$NN~Uj$AP2VOBa5O}Q!)TagN8wV)@q%$A|FHy*QFurN!U*XHxfOTjyFzq_B1vfiz zvj;bvBmt+cj+4@|`K^aWQQ&cXkka(y35rCLk}{d1;^FD#?c+KDJm%{E0Pr{iYi1rkw8==5{V?D5>c5*CQ^thBs_^gQX~;cB$5(I znM5X0NGeKrC4!Qo5>bhyq@<**L{_3GsVL)>3CfDfL}ik)lCrWgS(&1&LdKH`WJNNO zOd>0hmC0l>g{(rsQwS7A3XwvhC{dItWD13%q5?Ki1vIY$s#XETRKP=j0lYxaIynk1 zf`)i?#LI_vUEqEJ8RC4yLxTT_zZGE1{A&(N0x2u#pMWD?A>c&k6X}Edt$`-=Pc{Ee zxEz$B&2zy2=K?n2KUtvv*8=+w1x_pf)*=!BU;rG7K%t;$GzN-A&_NmD%m53N6~V^B z4sbxZpgaux2m!PZAO-}&4?}OkZbKhJUqT0Jkx>je=WIC&tETB2kbRCN#I1FC z<&fw4_MWv(!DV@ceUi3?Ma9=kZwR1S+?CS32<9j&bSX}(+(#l(PZT+>kj)b)2x{AaiU~oB@ zFAPwSrzQ%(2u%ENF^nKW2B8CIl%`f9#o%IaNi>PhOgjPmNfC?YR?}61d7&|QPJ}Rw z4*_UV;Km3AI2MILY2o(4=`qSMRRk{zPLHxMBoi5kD0wtCLBh&d1})9WE5Xmsg)svS z=rHi0ut)>+K1>wdK}~6-8Ul;7L;?tA7=oJNDQJMkQp;RLbm_221~yeBR#_I#MQv2~ zwx&10VD)tQ4A9mLhA1p`Lk}we(>El;7|~dy3JRN`%!5*c@!J7RiVR7YeWU28PfnY7 zF(l)eIkPJh^@|%5RZ!A!XQTvH4=agaORRJ9F@~$4ShQ#%k++3T9+JkC%q0++00AT; z9G!6H6#OuP0fs>_pL5s8M5f|d}ADgsF8mrk6eZc3TJv2bV-i;jr~wOt(vz-dP*ko0hXi5^Y?J12=2F-x$a7XaI$jAjI@Vo=mxacnXY z0>BUmBoc~3qEQ$YEI%C&Jud?@BRvzG8OF-WhT#Ob;M@QYj2FcR@I!?-aWEN}9GyIX zhY_HPz)ffcv=Uy0{sH}o*n#fC_AoWaVlpyI@b(TFXL9&IFftjN{M?pT*zfG(Hkq86 zb@p7v?WX3=uI`?X(=&Sz_^*H_tEy=j8o4BAfhX@aHFx#AcsV@-`A4{`(c<0J+b8+# z<-+b4FBw>*RMm71?VX%mL0GlSvlXC7XZP6j%qjzmuA#RNHTllNmex1Jt6!2*GD^!@ zT05V*r?jAKb?Bf`t(2)>+ z0k^o5wYTD%A98XD3hC*anbYF`Wc{X%nv!C&`iwx6qZ+xgpf7%AJok`YwZ{Hth;|;WOQzK4}xY(}H zNS1_ZMrsv82$R4E<3R&(1vm+gf&nNbiUn)I#EP;-!QlK@3=9oJ!NBDyVDxYVj1CDf zav;o5d?tMXd#2uI;iW9?)p#@wZ z5{u+TI-+C{dRSRF7#lDGoh+OeNe81=gQpY-rZ8$LS{=p&Q%6zIGKj=I7H+fxiyTat zNtlUx2A-J5L&uSR9(<8Y4U9By47EihlAb!mOOK%LA*f^YYlSc}Cc&AV`T$MsMPRwr zU|1vtt%s&ZM$!qw4#6EU)Ff_xEGNbUPCbpRDy8Rw6N=#pZzWLl2n4l^IpG@$z)2&) zvzc&e3ycrO^ndxD86Fh@!bK`XhJ*xp`GaVW5ei2F{QM(>V&uSEI8ly3kR#ybj!~4| zlu2?Pq2Mh~&f6pWXuuH#@Ee8#O_)Y$=;5?|+QD!S5Kf$ihWP8K4+uIQN`r}Tj-uf| zI5;yy5i*sAbh zu@&T{hqcc@u{GqaunlBuw(yxu_F$$?6?ZVAA*E}k4SRh%^3=Q00TNa z2Q%OU#ss+9FI*H5z@#I2sc#D~sM5sYXs`+v z$_qfDD&Tz%4h3Tk5QM@2IvS4vD*)_JPVg=W)&_N>0Tc`i6$I2kS$a@X5>yXrg(1Kw zM1kvS(X`T<1R90Xcz&n~*uKA31ONj74uHx5G++rpQS@j}0E(eQ8AAC$eE>ja1VD=j zIzS8q_=1b+f{lXmK;bZEaB(9j6bUc^pzmP`-z1SK%FQ+111Kpk)a8$@RyrT_>yx+DaGwg(`YAmFqB0rtZ!!Q&8lC>QwP w2!kWgXede$ejZ#&1+It&7y(WMzyxY#`K1xz4HSVg8gS49s9+Stow^G7UtJ`3V*mgE literal 0 HcmV?d00001 diff --git a/web-wallet/vite-setup.js b/web-wallet/vite-setup.js index d17cd1a854..156d25f82d 100644 --- a/web-wallet/vite-setup.js +++ b/web-wallet/vite-setup.js @@ -51,15 +51,6 @@ Object.defineProperty(window, "litIssuedWarnings", { writable: false, }); -vi.mock( - "./src/lib/vendor/w3sper.js/src/transaction", - async (importOriginal) => ({ - ...(await importOriginal()), - TransactionBuilder: (await import("./src/__mocks__/TransactionBuilder.js")) - .default, - }) -); - /* * Add a polyfill for Promise.withResolvers for Node 20 */