@aztec/archiver 0.65.2 → 0.66.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dest/archiver/archiver.d.ts +18 -22
- package/dest/archiver/archiver.d.ts.map +1 -1
- package/dest/archiver/archiver.js +143 -99
- package/dest/archiver/archiver_store.d.ts +7 -8
- package/dest/archiver/archiver_store.d.ts.map +1 -1
- package/dest/archiver/archiver_store_test_suite.d.ts.map +1 -1
- package/dest/archiver/archiver_store_test_suite.js +126 -150
- package/dest/archiver/config.d.ts +6 -12
- package/dest/archiver/config.d.ts.map +1 -1
- package/dest/archiver/config.js +6 -1
- package/dest/archiver/data_retrieval.d.ts +2 -3
- package/dest/archiver/data_retrieval.d.ts.map +1 -1
- package/dest/archiver/data_retrieval.js +14 -15
- package/dest/archiver/instrumentation.d.ts +2 -7
- package/dest/archiver/instrumentation.d.ts.map +1 -1
- package/dest/archiver/instrumentation.js +3 -6
- package/dest/archiver/kv_archiver_store/kv_archiver_store.d.ts +7 -8
- package/dest/archiver/kv_archiver_store/kv_archiver_store.d.ts.map +1 -1
- package/dest/archiver/kv_archiver_store/kv_archiver_store.js +7 -8
- package/dest/archiver/kv_archiver_store/log_store.d.ts +7 -8
- package/dest/archiver/kv_archiver_store/log_store.d.ts.map +1 -1
- package/dest/archiver/kv_archiver_store/log_store.js +55 -95
- package/dest/archiver/memory_archiver_store/memory_archiver_store.d.ts +8 -10
- package/dest/archiver/memory_archiver_store/memory_archiver_store.d.ts.map +1 -1
- package/dest/archiver/memory_archiver_store/memory_archiver_store.js +50 -57
- package/dest/index.d.ts +2 -2
- package/dest/index.d.ts.map +1 -1
- package/dest/index.js +3 -42
- package/dest/test/mock_l2_block_source.d.ts.map +1 -1
- package/dest/test/mock_l2_block_source.js +2 -2
- package/package.json +11 -13
- package/src/archiver/archiver.ts +199 -191
- package/src/archiver/archiver_store.ts +6 -13
- package/src/archiver/archiver_store_test_suite.ts +160 -186
- package/src/archiver/config.ts +12 -12
- package/src/archiver/data_retrieval.ts +12 -17
- package/src/archiver/instrumentation.ts +3 -5
- package/src/archiver/kv_archiver_store/kv_archiver_store.ts +7 -14
- package/src/archiver/kv_archiver_store/log_store.ts +68 -118
- package/src/archiver/memory_archiver_store/memory_archiver_store.ts +51 -65
- package/src/index.ts +5 -59
- package/src/test/mock_l2_block_source.ts +1 -2
- package/dest/archiver/epoch_helpers.d.ts +0 -20
- package/dest/archiver/epoch_helpers.d.ts.map +0 -1
- package/dest/archiver/epoch_helpers.js +0 -34
- package/src/archiver/epoch_helpers.ts +0 -54
|
@@ -1,18 +1,18 @@
|
|
|
1
1
|
var _ArchiverStoreHelper_instances, _ArchiverStoreHelper_log, _ArchiverStoreHelper_updateRegisteredContractClasses, _ArchiverStoreHelper_updateDeployedContractInstances, _ArchiverStoreHelper_storeBroadcastedIndividualFunctions;
|
|
2
2
|
import { __classPrivateFieldGet } from "tslib";
|
|
3
|
-
import {
|
|
3
|
+
import { getEpochNumberAtTimestamp, getSlotAtTimestamp, getSlotRangeForEpoch, getTimestampRangeForEpoch, } from '@aztec/circuit-types';
|
|
4
|
+
import { computePublicBytecodeCommitment, isValidPrivateFunctionMembershipProof, isValidUnconstrainedFunctionMembershipProof, } from '@aztec/circuits.js';
|
|
4
5
|
import { createEthereumChain } from '@aztec/ethereum';
|
|
5
6
|
import { Fr } from '@aztec/foundation/fields';
|
|
6
7
|
import { createDebugLogger } from '@aztec/foundation/log';
|
|
7
8
|
import { RunningPromise } from '@aztec/foundation/running-promise';
|
|
8
9
|
import { count } from '@aztec/foundation/string';
|
|
9
|
-
import {
|
|
10
|
+
import { elapsed } from '@aztec/foundation/timer';
|
|
10
11
|
import { InboxAbi, RollupAbi } from '@aztec/l1-artifacts';
|
|
11
|
-
import {
|
|
12
|
+
import { ContractClassRegisteredEvent, ContractInstanceDeployedEvent, PrivateFunctionBroadcastedEvent, UnconstrainedFunctionBroadcastedEvent, } from '@aztec/protocol-contracts';
|
|
12
13
|
import groupBy from 'lodash.groupby';
|
|
13
14
|
import { createPublicClient, getContract, http, } from 'viem';
|
|
14
|
-
import {
|
|
15
|
-
import { getEpochNumberAtTimestamp, getSlotAtTimestamp, getSlotRangeForEpoch, getTimestampRangeForEpoch, } from './epoch_helpers.js';
|
|
15
|
+
import { retrieveBlocksFromRollup, retrieveL1ToL2Messages } from './data_retrieval.js';
|
|
16
16
|
import { ArchiverInstrumentation } from './instrumentation.js';
|
|
17
17
|
/**
|
|
18
18
|
* Pulls L2 blocks in a non-blocking manner and provides interface for their retrieval.
|
|
@@ -30,24 +30,22 @@ export class Archiver {
|
|
|
30
30
|
* @param store - An archiver data store for storage & retrieval of blocks, encrypted logs & contract data.
|
|
31
31
|
* @param log - A logger.
|
|
32
32
|
*/
|
|
33
|
-
constructor(publicClient,
|
|
33
|
+
constructor(publicClient, l1Addresses, dataStore, config, instrumentation, l1constants, log = createDebugLogger('aztec:archiver')) {
|
|
34
34
|
this.publicClient = publicClient;
|
|
35
|
-
this.
|
|
36
|
-
this.inboxAddress = inboxAddress;
|
|
37
|
-
this.registryAddress = registryAddress;
|
|
35
|
+
this.l1Addresses = l1Addresses;
|
|
38
36
|
this.dataStore = dataStore;
|
|
39
|
-
this.
|
|
37
|
+
this.config = config;
|
|
40
38
|
this.instrumentation = instrumentation;
|
|
41
39
|
this.l1constants = l1constants;
|
|
42
40
|
this.log = log;
|
|
43
41
|
this.store = new ArchiverStoreHelper(dataStore);
|
|
44
42
|
this.rollup = getContract({
|
|
45
|
-
address: rollupAddress.toString(),
|
|
43
|
+
address: l1Addresses.rollupAddress.toString(),
|
|
46
44
|
abi: RollupAbi,
|
|
47
45
|
client: publicClient,
|
|
48
46
|
});
|
|
49
47
|
this.inbox = getContract({
|
|
50
|
-
address: inboxAddress.toString(),
|
|
48
|
+
address: l1Addresses.inboxAddress.toString(),
|
|
51
49
|
abi: InboxAbi,
|
|
52
50
|
client: publicClient,
|
|
53
51
|
});
|
|
@@ -76,7 +74,10 @@ export class Archiver {
|
|
|
76
74
|
rollup.read.GENESIS_TIME(),
|
|
77
75
|
]);
|
|
78
76
|
const { aztecEpochDuration: epochDuration, aztecSlotDuration: slotDuration, ethereumSlotDuration } = config;
|
|
79
|
-
const archiver = new Archiver(publicClient, config.l1Contracts
|
|
77
|
+
const archiver = new Archiver(publicClient, config.l1Contracts, archiverStore, {
|
|
78
|
+
pollingIntervalMs: config.archiverPollingIntervalMS ?? 10000,
|
|
79
|
+
batchSize: config.archiverBatchSize ?? 100,
|
|
80
|
+
}, new ArchiverInstrumentation(telemetry, () => archiverStore.estimateSize()), { l1StartBlock, l1GenesisTime, epochDuration, slotDuration, ethereumSlotDuration });
|
|
80
81
|
await archiver.start(blockUntilSynced);
|
|
81
82
|
return archiver;
|
|
82
83
|
}
|
|
@@ -89,10 +90,9 @@ export class Archiver {
|
|
|
89
90
|
throw new Error('Archiver is already running');
|
|
90
91
|
}
|
|
91
92
|
if (blockUntilSynced) {
|
|
92
|
-
this.log.info(`Performing initial chain sync to rollup contract ${this.rollupAddress.toString()}`);
|
|
93
93
|
await this.sync(blockUntilSynced);
|
|
94
94
|
}
|
|
95
|
-
this.runningPromise = new RunningPromise(() => this.safeSync(), this.pollingIntervalMs);
|
|
95
|
+
this.runningPromise = new RunningPromise(() => this.safeSync(), this.config.pollingIntervalMs);
|
|
96
96
|
this.runningPromise.start();
|
|
97
97
|
}
|
|
98
98
|
/**
|
|
@@ -108,9 +108,8 @@ export class Archiver {
|
|
|
108
108
|
}
|
|
109
109
|
/**
|
|
110
110
|
* Fetches logs from L1 contracts and processes them.
|
|
111
|
-
* @param blockUntilSynced - If true, blocks until the archiver has fully synced.
|
|
112
111
|
*/
|
|
113
|
-
async sync(
|
|
112
|
+
async sync(initialRun) {
|
|
114
113
|
/**
|
|
115
114
|
* We keep track of three "pointers" to L1 blocks:
|
|
116
115
|
* 1. the last L1 block that published an L2 block
|
|
@@ -126,6 +125,9 @@ export class Archiver {
|
|
|
126
125
|
const { l1StartBlock } = this.l1constants;
|
|
127
126
|
const { blocksSynchedTo = l1StartBlock, messagesSynchedTo = l1StartBlock } = await this.store.getSynchPoint();
|
|
128
127
|
const currentL1BlockNumber = await this.publicClient.getBlockNumber();
|
|
128
|
+
if (initialRun) {
|
|
129
|
+
this.log.info(`Starting archiver sync to rollup contract ${this.l1Addresses.rollupAddress.toString()} from L1 block ${Math.min(Number(blocksSynchedTo), Number(messagesSynchedTo))} to current L1 block ${currentL1BlockNumber}`);
|
|
130
|
+
}
|
|
129
131
|
// ********** Ensuring Consistency of data pulled from L1 **********
|
|
130
132
|
/**
|
|
131
133
|
* There are a number of calls in this sync operation to L1 for retrieving
|
|
@@ -144,7 +146,7 @@ export class Archiver {
|
|
|
144
146
|
* in future but for the time being it should give us the guarantees that we need
|
|
145
147
|
*/
|
|
146
148
|
// ********** Events that are processed per L1 block **********
|
|
147
|
-
await this.handleL1ToL2Messages(
|
|
149
|
+
await this.handleL1ToL2Messages(messagesSynchedTo, currentL1BlockNumber);
|
|
148
150
|
// Store latest l1 block number and timestamp seen. Used for epoch and slots calculations.
|
|
149
151
|
if (!this.l1BlockNumber || this.l1BlockNumber < currentL1BlockNumber) {
|
|
150
152
|
this.l1Timestamp = (await this.publicClient.getBlock({ blockNumber: currentL1BlockNumber })).timestamp;
|
|
@@ -153,15 +155,16 @@ export class Archiver {
|
|
|
153
155
|
// ********** Events that are processed per L2 block **********
|
|
154
156
|
if (currentL1BlockNumber > blocksSynchedTo) {
|
|
155
157
|
// First we retrieve new L2 blocks
|
|
156
|
-
const { provenBlockNumber } = await this.handleL2blocks(
|
|
158
|
+
const { provenBlockNumber } = await this.handleL2blocks(blocksSynchedTo, currentL1BlockNumber);
|
|
157
159
|
// And then we prune the current epoch if it'd reorg on next submission.
|
|
158
160
|
// Note that we don't do this before retrieving L2 blocks because we may need to retrieve
|
|
159
161
|
// blocks from more than 2 epochs ago, so we want to make sure we have the latest view of
|
|
160
162
|
// the chain locally before we start unwinding stuff. This can be optimized by figuring out
|
|
161
163
|
// up to which point we're pruning, and then requesting L2 blocks up to that point only.
|
|
162
164
|
await this.handleEpochPrune(provenBlockNumber, currentL1BlockNumber);
|
|
163
|
-
|
|
164
|
-
|
|
165
|
+
}
|
|
166
|
+
if (initialRun) {
|
|
167
|
+
this.log.info(`Initial archiver sync to L1 block ${currentL1BlockNumber} complete.`);
|
|
165
168
|
}
|
|
166
169
|
}
|
|
167
170
|
/** Checks if there'd be a reorg for the next block submission and start pruning now. */
|
|
@@ -172,17 +175,27 @@ export class Archiver {
|
|
|
172
175
|
(await this.rollup.read.canPruneAtTime([time], { blockNumber: currentL1BlockNumber }));
|
|
173
176
|
if (canPrune) {
|
|
174
177
|
const blocksToUnwind = localPendingBlockNumber - provenBlockNumber;
|
|
175
|
-
this.log.
|
|
176
|
-
`Unwinding ${count(blocksToUnwind, 'block')} from block ${localPendingBlockNumber} ` +
|
|
177
|
-
`to the last proven block ${provenBlockNumber}.`);
|
|
178
|
+
this.log.debug(`L2 prune will occur on next block submission.`);
|
|
178
179
|
await this.store.unwindBlocks(Number(localPendingBlockNumber), Number(blocksToUnwind));
|
|
179
|
-
this.log.
|
|
180
|
+
this.log.warn(`Unwound ${count(blocksToUnwind, 'block')} from L2 block ${localPendingBlockNumber} ` +
|
|
181
|
+
`to ${provenBlockNumber} due to predicted reorg at L1 block ${currentL1BlockNumber}. ` +
|
|
182
|
+
`Updated L2 latest block is ${await this.getBlockNumber()}.`);
|
|
180
183
|
// TODO(palla/reorg): Do we need to set the block synched L1 block number here?
|
|
181
184
|
// Seems like the next iteration should handle this.
|
|
182
185
|
// await this.store.setBlockSynchedL1BlockNumber(currentL1BlockNumber);
|
|
183
186
|
}
|
|
184
187
|
}
|
|
185
|
-
|
|
188
|
+
nextRange(end, limit) {
|
|
189
|
+
const batchSize = (this.config.batchSize * this.l1constants.slotDuration) / this.l1constants.ethereumSlotDuration;
|
|
190
|
+
const nextStart = end + 1n;
|
|
191
|
+
const nextEnd = nextStart + BigInt(batchSize);
|
|
192
|
+
if (nextEnd > limit) {
|
|
193
|
+
return [nextStart, limit];
|
|
194
|
+
}
|
|
195
|
+
return [nextStart, nextEnd];
|
|
196
|
+
}
|
|
197
|
+
async handleL1ToL2Messages(messagesSynchedTo, currentL1BlockNumber) {
|
|
198
|
+
this.log.trace(`Handling L1 to L2 messages from ${messagesSynchedTo} to ${currentL1BlockNumber}.`);
|
|
186
199
|
if (currentL1BlockNumber <= messagesSynchedTo) {
|
|
187
200
|
return;
|
|
188
201
|
}
|
|
@@ -190,24 +203,37 @@ export class Archiver {
|
|
|
190
203
|
const destinationTotalMessageCount = await this.inbox.read.totalMessagesInserted();
|
|
191
204
|
if (localTotalMessageCount === destinationTotalMessageCount) {
|
|
192
205
|
await this.store.setMessageSynchedL1BlockNumber(currentL1BlockNumber);
|
|
193
|
-
this.log.
|
|
206
|
+
this.log.trace(`Retrieved no new L1 to L2 messages between L1 blocks ${messagesSynchedTo + 1n} and ${currentL1BlockNumber}.`);
|
|
194
207
|
return;
|
|
195
208
|
}
|
|
196
|
-
|
|
197
|
-
|
|
198
|
-
|
|
209
|
+
// Retrieve messages in batches. Each batch is estimated to acommodate up to L2 'blockBatchSize' blocks,
|
|
210
|
+
let searchStartBlock = messagesSynchedTo;
|
|
211
|
+
let searchEndBlock = messagesSynchedTo;
|
|
212
|
+
do {
|
|
213
|
+
[searchStartBlock, searchEndBlock] = this.nextRange(searchEndBlock, currentL1BlockNumber);
|
|
214
|
+
this.log.trace(`Retrieving L1 to L2 messages between L1 blocks ${searchStartBlock} and ${searchEndBlock}.`);
|
|
215
|
+
const retrievedL1ToL2Messages = await retrieveL1ToL2Messages(this.inbox, searchStartBlock, searchEndBlock);
|
|
216
|
+
this.log.verbose(`Retrieved ${retrievedL1ToL2Messages.retrievedData.length} new L1 to L2 messages between L1 blocks ${searchStartBlock} and ${searchEndBlock}.`);
|
|
217
|
+
await this.store.addL1ToL2Messages(retrievedL1ToL2Messages);
|
|
218
|
+
for (const msg of retrievedL1ToL2Messages.retrievedData) {
|
|
219
|
+
this.log.debug(`Downloaded L1 to L2 message`, { leaf: msg.leaf.toString(), index: msg.index });
|
|
220
|
+
}
|
|
221
|
+
} while (searchEndBlock < currentL1BlockNumber);
|
|
199
222
|
}
|
|
200
|
-
async handleL2blocks(
|
|
223
|
+
async handleL2blocks(blocksSynchedTo, currentL1BlockNumber) {
|
|
201
224
|
const localPendingBlockNumber = BigInt(await this.getBlockNumber());
|
|
202
225
|
const [provenBlockNumber, provenArchive, pendingBlockNumber, pendingArchive, archiveForLocalPendingBlockNumber, provenEpochNumber,] = await this.rollup.read.status([localPendingBlockNumber], { blockNumber: currentL1BlockNumber });
|
|
203
226
|
const updateProvenBlock = async () => {
|
|
204
227
|
const localBlockForDestinationProvenBlockNumber = await this.getBlock(Number(provenBlockNumber));
|
|
205
228
|
if (localBlockForDestinationProvenBlockNumber &&
|
|
206
229
|
provenArchive === localBlockForDestinationProvenBlockNumber.archive.root.toString()) {
|
|
207
|
-
this.log.verbose(`Updating the proven block number to ${provenBlockNumber} and epoch to ${provenEpochNumber}`);
|
|
208
230
|
await this.store.setProvenL2BlockNumber(Number(provenBlockNumber));
|
|
209
231
|
// if we are here then we must have a valid proven epoch number
|
|
210
232
|
await this.store.setProvenL2EpochNumber(Number(provenEpochNumber));
|
|
233
|
+
this.log.info(`Updated proven chain to block ${provenBlockNumber} (epoch ${provenEpochNumber})`, {
|
|
234
|
+
provenBlockNumber,
|
|
235
|
+
provenEpochNumber,
|
|
236
|
+
});
|
|
211
237
|
}
|
|
212
238
|
this.instrumentation.updateLastProvenBlock(Number(provenBlockNumber));
|
|
213
239
|
};
|
|
@@ -216,7 +242,7 @@ export class Archiver {
|
|
|
216
242
|
const noBlocks = localPendingBlockNumber === 0n && pendingBlockNumber === 0n;
|
|
217
243
|
if (noBlocks) {
|
|
218
244
|
await this.store.setBlockSynchedL1BlockNumber(currentL1BlockNumber);
|
|
219
|
-
this.log.
|
|
245
|
+
this.log.debug(`No blocks to retrieve from ${blocksSynchedTo + 1n} to ${currentL1BlockNumber}`);
|
|
220
246
|
return { provenBlockNumber };
|
|
221
247
|
}
|
|
222
248
|
await updateProvenBlock();
|
|
@@ -230,7 +256,7 @@ export class Archiver {
|
|
|
230
256
|
const noBlockSinceLast = localPendingBlock && pendingArchive === localPendingBlock.archive.root.toString();
|
|
231
257
|
if (noBlockSinceLast) {
|
|
232
258
|
await this.store.setBlockSynchedL1BlockNumber(currentL1BlockNumber);
|
|
233
|
-
this.log.
|
|
259
|
+
this.log.debug(`No blocks to retrieve from ${blocksSynchedTo + 1n} to ${currentL1BlockNumber}`);
|
|
234
260
|
return { provenBlockNumber };
|
|
235
261
|
}
|
|
236
262
|
const localPendingBlockInChain = archiveForLocalPendingBlockNumber === localPendingBlock.archive.root.toString();
|
|
@@ -239,7 +265,7 @@ export class Archiver {
|
|
|
239
265
|
// or the L1 have reorged.
|
|
240
266
|
// In any case, we have to figure out how far into the past the action will take us.
|
|
241
267
|
// For simplicity here, we will simply rewind until we end in a block that is also on the chain on L1.
|
|
242
|
-
this.log.
|
|
268
|
+
this.log.debug(`L2 prune has been detected.`);
|
|
243
269
|
let tipAfterUnwind = localPendingBlockNumber;
|
|
244
270
|
while (true) {
|
|
245
271
|
const candidateBlock = await this.getBlock(Number(tipAfterUnwind));
|
|
@@ -253,32 +279,48 @@ export class Archiver {
|
|
|
253
279
|
tipAfterUnwind--;
|
|
254
280
|
}
|
|
255
281
|
const blocksToUnwind = localPendingBlockNumber - tipAfterUnwind;
|
|
256
|
-
this.log.verbose(`Unwinding ${blocksToUnwind} block${blocksToUnwind > 1n ? 's' : ''} from block ${localPendingBlockNumber}`);
|
|
257
282
|
await this.store.unwindBlocks(Number(localPendingBlockNumber), Number(blocksToUnwind));
|
|
283
|
+
this.log.warn(`Unwound ${count(blocksToUnwind, 'block')} from L2 block ${localPendingBlockNumber} ` +
|
|
284
|
+
`due to mismatched block hashes at L1 block ${currentL1BlockNumber}. ` +
|
|
285
|
+
`Updated L2 latest block is ${await this.getBlockNumber()}.`);
|
|
258
286
|
}
|
|
259
287
|
}
|
|
260
|
-
|
|
261
|
-
|
|
262
|
-
|
|
263
|
-
|
|
264
|
-
|
|
265
|
-
|
|
266
|
-
this.log.
|
|
267
|
-
|
|
268
|
-
|
|
269
|
-
|
|
270
|
-
|
|
271
|
-
|
|
272
|
-
|
|
273
|
-
|
|
274
|
-
|
|
275
|
-
|
|
276
|
-
|
|
288
|
+
// Retrieve L2 blocks in batches. Each batch is estimated to acommodate up to L2 'blockBatchSize' blocks,
|
|
289
|
+
// computed using the L2 block time vs the L1 block time.
|
|
290
|
+
let searchStartBlock = blocksSynchedTo;
|
|
291
|
+
let searchEndBlock = blocksSynchedTo;
|
|
292
|
+
do {
|
|
293
|
+
[searchStartBlock, searchEndBlock] = this.nextRange(searchEndBlock, currentL1BlockNumber);
|
|
294
|
+
this.log.trace(`Retrieving L2 blocks from L1 block ${searchStartBlock} to ${searchEndBlock}`);
|
|
295
|
+
const retrievedBlocks = await retrieveBlocksFromRollup(this.rollup, this.publicClient, searchStartBlock, // TODO(palla/reorg): If the L2 reorg was due to an L1 reorg, we need to start search earlier
|
|
296
|
+
searchEndBlock, this.log);
|
|
297
|
+
if (retrievedBlocks.length === 0) {
|
|
298
|
+
// We are not calling `setBlockSynchedL1BlockNumber` because it may cause sync issues if based off infura.
|
|
299
|
+
// See further details in earlier comments.
|
|
300
|
+
this.log.trace(`Retrieved no new L2 blocks from L1 block ${searchStartBlock} to ${searchEndBlock}`);
|
|
301
|
+
continue;
|
|
302
|
+
}
|
|
303
|
+
const lastProcessedL1BlockNumber = retrievedBlocks[retrievedBlocks.length - 1].l1.blockNumber;
|
|
304
|
+
this.log.debug(`Retrieved ${retrievedBlocks.length} new L2 blocks between L1 blocks ${searchStartBlock} and ${searchEndBlock} with last processed L1 block ${lastProcessedL1BlockNumber}.`);
|
|
305
|
+
for (const block of retrievedBlocks) {
|
|
306
|
+
this.log.debug(`Ingesting new L2 block ${block.data.number} with ${block.data.body.txEffects.length} txs`, {
|
|
307
|
+
blockHash: block.data.hash(),
|
|
308
|
+
l1BlockNumber: block.l1.blockNumber,
|
|
309
|
+
...block.data.header.globalVariables.toInspect(),
|
|
310
|
+
...block.data.getStats(),
|
|
311
|
+
});
|
|
312
|
+
}
|
|
313
|
+
const [processDuration] = await elapsed(() => this.store.addBlocks(retrievedBlocks));
|
|
314
|
+
this.instrumentation.processNewBlocks(processDuration / retrievedBlocks.length, retrievedBlocks.map(b => b.data));
|
|
315
|
+
for (const block of retrievedBlocks) {
|
|
316
|
+
this.log.info(`Downloaded L2 block ${block.data.number}`, {
|
|
317
|
+
blockHash: block.data.hash(),
|
|
318
|
+
blockNumber: block.data.number,
|
|
319
|
+
});
|
|
320
|
+
}
|
|
321
|
+
} while (searchEndBlock < currentL1BlockNumber);
|
|
277
322
|
// Important that we update AFTER inserting the blocks.
|
|
278
323
|
await updateProvenBlock();
|
|
279
|
-
this.instrumentation.processNewBlocks(timer.ms() / retrievedBlocks.length, retrievedBlocks.map(b => b.data));
|
|
280
|
-
const lastL2BlockNumber = retrievedBlocks[retrievedBlocks.length - 1].data.number;
|
|
281
|
-
this.log.verbose(`Processed ${retrievedBlocks.length} new L2 blocks up to ${lastL2BlockNumber}`);
|
|
282
324
|
return { provenBlockNumber };
|
|
283
325
|
}
|
|
284
326
|
/**
|
|
@@ -292,10 +334,10 @@ export class Archiver {
|
|
|
292
334
|
return Promise.resolve();
|
|
293
335
|
}
|
|
294
336
|
getRollupAddress() {
|
|
295
|
-
return Promise.resolve(this.rollupAddress);
|
|
337
|
+
return Promise.resolve(this.l1Addresses.rollupAddress);
|
|
296
338
|
}
|
|
297
339
|
getRegistryAddress() {
|
|
298
|
-
return Promise.resolve(this.registryAddress);
|
|
340
|
+
return Promise.resolve(this.l1Addresses.registryAddress);
|
|
299
341
|
}
|
|
300
342
|
getL1BlockNumber() {
|
|
301
343
|
const l1BlockNumber = this.l1BlockNumber;
|
|
@@ -415,14 +457,13 @@ export class Archiver {
|
|
|
415
457
|
return contractClass.publicFunctions.find(f => f.selector.equals(selector));
|
|
416
458
|
}
|
|
417
459
|
/**
|
|
418
|
-
*
|
|
419
|
-
* @param from -
|
|
420
|
-
* @param limit - The number of
|
|
421
|
-
* @
|
|
422
|
-
* @returns The requested logs.
|
|
460
|
+
* Retrieves all private logs from up to `limit` blocks, starting from the block number `from`.
|
|
461
|
+
* @param from - The block number from which to begin retrieving logs.
|
|
462
|
+
* @param limit - The maximum number of blocks to retrieve logs from.
|
|
463
|
+
* @returns An array of private logs from the specified range of blocks.
|
|
423
464
|
*/
|
|
424
|
-
|
|
425
|
-
return this.store.
|
|
465
|
+
getPrivateLogs(from, limit) {
|
|
466
|
+
return this.store.getPrivateLogs(from, limit);
|
|
426
467
|
}
|
|
427
468
|
/**
|
|
428
469
|
* Gets all logs that match any of the received tags (i.e. logs with their first field equal to a tag).
|
|
@@ -562,26 +603,25 @@ class ArchiverStoreHelper {
|
|
|
562
603
|
return this.store.addContractClasses(contractClasses, bytecodeCommitments, blockNum);
|
|
563
604
|
}
|
|
564
605
|
async addBlocks(blocks) {
|
|
565
|
-
|
|
606
|
+
const opResults = await Promise.all([
|
|
566
607
|
this.store.addLogs(blocks.map(block => block.data)),
|
|
567
608
|
// Unroll all logs emitted during the retrieved blocks and extract any contract classes and instances from them
|
|
568
|
-
...
|
|
609
|
+
...blocks.map(async (block) => {
|
|
569
610
|
const contractClassLogs = block.data.body.txEffects
|
|
570
611
|
.flatMap(txEffect => (txEffect ? [txEffect.contractClassLogs] : []))
|
|
571
612
|
.flatMap(txLog => txLog.unrollLogs());
|
|
572
|
-
// ContractInstanceDeployed event logs are
|
|
573
|
-
const
|
|
574
|
-
.flatMap(txEffect => (txEffect ? [txEffect.encryptedLogs] : []))
|
|
575
|
-
.flatMap(txLog => txLog.unrollLogs());
|
|
613
|
+
// ContractInstanceDeployed event logs are broadcast in privateLogs.
|
|
614
|
+
const privateLogs = block.data.body.txEffects.flatMap(txEffect => txEffect.privateLogs);
|
|
576
615
|
return (await Promise.all([
|
|
577
616
|
__classPrivateFieldGet(this, _ArchiverStoreHelper_instances, "m", _ArchiverStoreHelper_updateRegisteredContractClasses).call(this, contractClassLogs, block.data.number, Operation.Store),
|
|
578
|
-
__classPrivateFieldGet(this, _ArchiverStoreHelper_instances, "m", _ArchiverStoreHelper_updateDeployedContractInstances).call(this,
|
|
617
|
+
__classPrivateFieldGet(this, _ArchiverStoreHelper_instances, "m", _ArchiverStoreHelper_updateDeployedContractInstances).call(this, privateLogs, block.data.number, Operation.Store),
|
|
579
618
|
__classPrivateFieldGet(this, _ArchiverStoreHelper_instances, "m", _ArchiverStoreHelper_storeBroadcastedIndividualFunctions).call(this, contractClassLogs, block.data.number),
|
|
580
619
|
])).every(Boolean);
|
|
581
|
-
})
|
|
620
|
+
}),
|
|
582
621
|
this.store.addNullifiers(blocks.map(block => block.data)),
|
|
583
622
|
this.store.addBlocks(blocks),
|
|
584
|
-
]
|
|
623
|
+
]);
|
|
624
|
+
return opResults.every(Boolean);
|
|
585
625
|
}
|
|
586
626
|
async unwindBlocks(from, blocksToUnwind) {
|
|
587
627
|
const last = await this.getSynchedL2BlockNumber();
|
|
@@ -590,22 +630,23 @@ class ArchiverStoreHelper {
|
|
|
590
630
|
}
|
|
591
631
|
// from - blocksToUnwind = the new head, so + 1 for what we need to remove
|
|
592
632
|
const blocks = await this.getBlocks(from - blocksToUnwind + 1, blocksToUnwind);
|
|
593
|
-
|
|
633
|
+
const opResults = await Promise.all([
|
|
594
634
|
// Unroll all logs emitted during the retrieved blocks and extract any contract classes and instances from them
|
|
595
|
-
...
|
|
635
|
+
...blocks.map(async (block) => {
|
|
596
636
|
const contractClassLogs = block.data.body.txEffects
|
|
597
637
|
.flatMap(txEffect => (txEffect ? [txEffect.contractClassLogs] : []))
|
|
598
638
|
.flatMap(txLog => txLog.unrollLogs());
|
|
599
|
-
// ContractInstanceDeployed event logs are
|
|
600
|
-
const
|
|
601
|
-
|
|
602
|
-
.
|
|
603
|
-
|
|
604
|
-
|
|
605
|
-
})
|
|
639
|
+
// ContractInstanceDeployed event logs are broadcast in privateLogs.
|
|
640
|
+
const privateLogs = block.data.body.txEffects.flatMap(txEffect => txEffect.privateLogs);
|
|
641
|
+
return (await Promise.all([
|
|
642
|
+
__classPrivateFieldGet(this, _ArchiverStoreHelper_instances, "m", _ArchiverStoreHelper_updateRegisteredContractClasses).call(this, contractClassLogs, block.data.number, Operation.Delete),
|
|
643
|
+
__classPrivateFieldGet(this, _ArchiverStoreHelper_instances, "m", _ArchiverStoreHelper_updateDeployedContractInstances).call(this, privateLogs, block.data.number, Operation.Delete),
|
|
644
|
+
])).every(Boolean);
|
|
645
|
+
}),
|
|
606
646
|
this.store.deleteLogs(blocks.map(b => b.data)),
|
|
607
647
|
this.store.unwindBlocks(from, blocksToUnwind),
|
|
608
|
-
]
|
|
648
|
+
]);
|
|
649
|
+
return opResults.every(Boolean);
|
|
609
650
|
}
|
|
610
651
|
getBlocks(from, limit) {
|
|
611
652
|
return this.store.getBlocks(from, limit);
|
|
@@ -628,8 +669,8 @@ class ArchiverStoreHelper {
|
|
|
628
669
|
getL1ToL2MessageIndex(l1ToL2Message) {
|
|
629
670
|
return this.store.getL1ToL2MessageIndex(l1ToL2Message);
|
|
630
671
|
}
|
|
631
|
-
|
|
632
|
-
return this.store.
|
|
672
|
+
getPrivateLogs(from, limit) {
|
|
673
|
+
return this.store.getPrivateLogs(from, limit);
|
|
633
674
|
}
|
|
634
675
|
getLogsByTags(tags) {
|
|
635
676
|
return this.store.getLogsByTags(tags);
|
|
@@ -701,9 +742,12 @@ _ArchiverStoreHelper_log = new WeakMap(), _ArchiverStoreHelper_instances = new W
|
|
|
701
742
|
* @param allLogs - All logs emitted in a bunch of blocks.
|
|
702
743
|
*/
|
|
703
744
|
async function _ArchiverStoreHelper_updateRegisteredContractClasses(allLogs, blockNum, operation) {
|
|
704
|
-
const contractClasses =
|
|
745
|
+
const contractClasses = allLogs
|
|
746
|
+
.filter(log => ContractClassRegisteredEvent.isContractClassRegisteredEvent(log.data))
|
|
747
|
+
.map(log => ContractClassRegisteredEvent.fromLog(log.data))
|
|
748
|
+
.map(e => e.toContractClassPublic());
|
|
705
749
|
if (contractClasses.length > 0) {
|
|
706
|
-
contractClasses.forEach(c => __classPrivateFieldGet(this, _ArchiverStoreHelper_log, "f").verbose(
|
|
750
|
+
contractClasses.forEach(c => __classPrivateFieldGet(this, _ArchiverStoreHelper_log, "f").verbose(`${Operation[operation]} contract class ${c.id.toString()}`));
|
|
707
751
|
if (operation == Operation.Store) {
|
|
708
752
|
// TODO: Will probably want to create some worker threads to compute these bytecode commitments as they are expensive
|
|
709
753
|
return await this.store.addContractClasses(contractClasses, contractClasses.map(x => computePublicBytecodeCommitment(x.packedBytecode)), blockNum);
|
|
@@ -719,7 +763,10 @@ async function _ArchiverStoreHelper_updateRegisteredContractClasses(allLogs, blo
|
|
|
719
763
|
* @param allLogs - All logs emitted in a bunch of blocks.
|
|
720
764
|
*/
|
|
721
765
|
async function _ArchiverStoreHelper_updateDeployedContractInstances(allLogs, blockNum, operation) {
|
|
722
|
-
const contractInstances =
|
|
766
|
+
const contractInstances = allLogs
|
|
767
|
+
.filter(log => ContractInstanceDeployedEvent.isContractInstanceDeployedEvent(log))
|
|
768
|
+
.map(log => ContractInstanceDeployedEvent.fromLog(log))
|
|
769
|
+
.map(e => e.toContractInstance());
|
|
723
770
|
if (contractInstances.length > 0) {
|
|
724
771
|
contractInstances.forEach(c => __classPrivateFieldGet(this, _ArchiverStoreHelper_log, "f").verbose(`${Operation[operation]} contract instance at ${c.address.toString()}`));
|
|
725
772
|
if (operation == Operation.Store) {
|
|
@@ -743,8 +790,12 @@ async function _ArchiverStoreHelper_updateDeployedContractInstances(allLogs, blo
|
|
|
743
790
|
*/
|
|
744
791
|
async function _ArchiverStoreHelper_storeBroadcastedIndividualFunctions(allLogs, _blockNum) {
|
|
745
792
|
// Filter out private and unconstrained function broadcast events
|
|
746
|
-
const privateFnEvents =
|
|
747
|
-
|
|
793
|
+
const privateFnEvents = allLogs
|
|
794
|
+
.filter(log => PrivateFunctionBroadcastedEvent.isPrivateFunctionBroadcastedEvent(log.data))
|
|
795
|
+
.map(log => PrivateFunctionBroadcastedEvent.fromLog(log.data));
|
|
796
|
+
const unconstrainedFnEvents = allLogs
|
|
797
|
+
.filter(log => UnconstrainedFunctionBroadcastedEvent.isUnconstrainedFunctionBroadcastedEvent(log.data))
|
|
798
|
+
.map(log => UnconstrainedFunctionBroadcastedEvent.fromLog(log.data));
|
|
748
799
|
// Group all events by contract class id
|
|
749
800
|
for (const [classIdString, classEvents] of Object.entries(groupBy([...privateFnEvents, ...unconstrainedFnEvents], e => e.contractClassId.toString()))) {
|
|
750
801
|
const contractClassId = Fr.fromString(classIdString);
|
|
@@ -771,11 +822,4 @@ async function _ArchiverStoreHelper_storeBroadcastedIndividualFunctions(allLogs,
|
|
|
771
822
|
}
|
|
772
823
|
return true;
|
|
773
824
|
};
|
|
774
|
-
const EmptyL1RollupConstants = {
|
|
775
|
-
l1StartBlock: 0n,
|
|
776
|
-
l1GenesisTime: 0n,
|
|
777
|
-
epochDuration: 0,
|
|
778
|
-
slotDuration: 0,
|
|
779
|
-
ethereumSlotDuration: 0,
|
|
780
|
-
};
|
|
781
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXJjaGl2ZXIuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvYXJjaGl2ZXIvYXJjaGl2ZXIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7QUFzQkEsT0FBTyxFQUVMLDRCQUE0QixFQUU1Qiw2QkFBNkIsRUFLN0IsK0JBQStCLEVBRS9CLHFDQUFxQyxFQUVyQywrQkFBK0IsRUFDL0IscUNBQXFDLEVBQ3JDLDJDQUEyQyxHQUM1QyxNQUFNLG9CQUFvQixDQUFDO0FBQzVCLE9BQU8sRUFBRSxtQkFBbUIsRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBSXRELE9BQU8sRUFBRSxFQUFFLEVBQUUsTUFBTSwwQkFBMEIsQ0FBQztBQUM5QyxPQUFPLEVBQW9CLGlCQUFpQixFQUFFLE1BQU0sdUJBQXVCLENBQUM7QUFDNUUsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLG1DQUFtQyxDQUFDO0FBQ25FLE9BQU8sRUFBRSxLQUFLLEVBQUUsTUFBTSwwQkFBMEIsQ0FBQztBQUNqRCxPQUFPLEVBQUUsS0FBSyxFQUFFLE1BQU0seUJBQXlCLENBQUM7QUFDaEQsT0FBTyxFQUFFLFFBQVEsRUFBRSxTQUFTLEVBQUUsTUFBTSxxQkFBcUIsQ0FBQztBQUMxRCxPQUFPLEVBQUUsdUJBQXVCLEVBQUUsTUFBTSwyQkFBMkIsQ0FBQztBQUdwRSxPQUFPLE9BQU8sTUFBTSxnQkFBZ0IsQ0FBQztBQUNyQyxPQUFPLEVBS0wsa0JBQWtCLEVBQ2xCLFdBQVcsRUFDWCxJQUFJLEdBQ0wsTUFBTSxNQUFNLENBQUM7QUFJZCxPQUFPLEVBQUUsdUJBQXVCLEVBQUUsc0JBQXNCLEVBQUUsTUFBTSxxQkFBcUIsQ0FBQztBQUN0RixPQUFPLEVBQ0wseUJBQXlCLEVBQ3pCLGtCQUFrQixFQUNsQixvQkFBb0IsRUFDcEIseUJBQXlCLEdBQzFCLE1BQU0sb0JBQW9CLENBQUM7QUFDNUIsT0FBTyxFQUFFLHVCQUF1QixFQUFFLE1BQU0sc0JBQXNCLENBQUM7QUFhL0Q7Ozs7R0FJ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
|
|
825
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXJjaGl2ZXIuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvYXJjaGl2ZXIvYXJjaGl2ZXIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7QUFBQSxPQUFPLEVBa0JMLHlCQUF5QixFQUN6QixrQkFBa0IsRUFDbEIsb0JBQW9CLEVBQ3BCLHlCQUF5QixHQUMxQixNQUFNLHNCQUFzQixDQUFDO0FBQzlCLE9BQU8sRUFVTCwrQkFBK0IsRUFDL0IscUNBQXFDLEVBQ3JDLDJDQUEyQyxHQUM1QyxNQUFNLG9CQUFvQixDQUFDO0FBQzVCLE9BQU8sRUFBRSxtQkFBbUIsRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBSXRELE9BQU8sRUFBRSxFQUFFLEVBQUUsTUFBTSwwQkFBMEIsQ0FBQztBQUM5QyxPQUFPLEVBQW9CLGlCQUFpQixFQUFFLE1BQU0sdUJBQXVCLENBQUM7QUFDNUUsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLG1DQUFtQyxDQUFDO0FBQ25FLE9BQU8sRUFBRSxLQUFLLEVBQUUsTUFBTSwwQkFBMEIsQ0FBQztBQUNqRCxPQUFPLEVBQUUsT0FBTyxFQUFFLE1BQU0seUJBQXlCLENBQUM7QUFDbEQsT0FBTyxFQUFFLFFBQVEsRUFBRSxTQUFTLEVBQUUsTUFBTSxxQkFBcUIsQ0FBQztBQUMxRCxPQUFPLEVBQ0wsNEJBQTRCLEVBQzVCLDZCQUE2QixFQUM3QiwrQkFBK0IsRUFDL0IscUNBQXFDLEdBQ3RDLE1BQU0sMkJBQTJCLENBQUM7QUFHbkMsT0FBTyxPQUFPLE1BQU0sZ0JBQWdCLENBQUM7QUFDckMsT0FBTyxFQUtMLGtCQUFrQixFQUNsQixXQUFXLEVBQ1gsSUFBSSxHQUNMLE1BQU0sTUFBTSxDQUFDO0FBSWQsT0FBTyxFQUFFLHdCQUF3QixFQUFFLHNCQUFzQixFQUFFLE1BQU0scUJBQXFCLENBQUM7QUFDdkYsT0FBTyxFQUFFLHVCQUF1QixFQUFFLE1BQU0sc0JBQXNCLENBQUM7QUFhL0Q7Ozs7R0FJRztBQUNILE1BQU0sT0FBTyxRQUFRO0lBY25COzs7Ozs7Ozs7T0FTRztJQUNILFlBQ21CLFlBQWdELEVBQ2hELFdBQWlHLEVBQ3pHLFNBQTRCLEVBQ3BCLE1BQXdELEVBQ3hELGVBQXdDLEVBQ3hDLFdBQThCLEVBQzlCLE1BQW1CLGlCQUFpQixDQUFDLGdCQUFnQixDQUFDO1FBTnRELGlCQUFZLEdBQVosWUFBWSxDQUFvQztRQUNoRCxnQkFBVyxHQUFYLFdBQVcsQ0FBc0Y7UUFDekcsY0FBUyxHQUFULFNBQVMsQ0FBbUI7UUFDcEIsV0FBTSxHQUFOLE1BQU0sQ0FBa0Q7UUFDeEQsb0JBQWUsR0FBZixlQUFlLENBQXlCO1FBQ3hDLGdCQUFXLEdBQVgsV0FBVyxDQUFtQjtRQUM5QixRQUFHLEdBQUgsR0FBRyxDQUFtRDtRQUV2RSxJQUFJLENBQUMsS0FBSyxHQUFHLElBQUksbUJBQW1CLENBQUMsU0FBUyxDQUFDLENBQUM7UUFFaEQsSUFBSSxDQUFDLE1BQU0sR0FBRyxXQUFXLENBQUM7WUFDeEIsT0FBTyxFQUFFLFdBQVcsQ0FBQyxhQUFhLENBQUMsUUFBUSxFQUFFO1lBQzdDLEdBQUcsRUFBRSxTQUFTO1lBQ2QsTUFBTSxFQUFFLFlBQVk7U0FDckIsQ0FBQyxDQUFDO1FBRUgsSUFBSSxDQUFDLEtBQUssR0FBRyxXQUFXLENBQUM7WUFDdkIsT0FBTyxFQUFFLFdBQVcsQ0FBQyxZQUFZLENBQUMsUUFBUSxFQUFFO1lBQzVDLEdBQUcsRUFBRSxRQUFRO1lBQ2IsTUFBTSxFQUFFLFlBQVk7U0FDckIsQ0FBQyxDQUFDO0lBQ0wsQ0FBQztJQUVEOzs7Ozs7T0FNRztJQUNJLE1BQU0sQ0FBQyxLQUFLLENBQUMsYUFBYSxDQUMvQixNQUFzQixFQUN0QixhQUFnQyxFQUNoQyxTQUEwQixFQUMxQixnQkFBZ0IsR0FBRyxJQUFJO1FBRXZCLE1BQU0sS0FBSyxHQUFHLG1CQUFtQixDQUFDLE1BQU0sQ0FBQyxRQUFRLEVBQUUsTUFBTSxDQUFDLFNBQVMsQ0FBQyxDQUFDO1FBQ3JFLE1BQU0sWUFBWSxHQUFHLGtCQUFrQixDQUFDO1lBQ3RDLEtBQUssRUFBRSxLQUFLLENBQUMsU0FBUztZQUN0QixTQUFTLEVBQUUsSUFBSSxDQUFDLEtBQUssQ0FBQyxNQUFNLENBQUM7WUFDN0IsZUFBZSxFQUFFLE1BQU0sQ0FBQyxxQkFBcUI7U0FDOUMsQ0FBQyxDQUFDO1FBRUgsTUFBTSxNQUFNLEdBQUcsV0FBVyxDQUFDO1lBQ3pCLE9BQU8sRUFBRSxNQUFNLENBQUMsV0FBVyxDQUFDLGFBQWEsQ0FBQyxRQUFRLEVBQUU7WUFDcEQsR0FBRyxFQUFFLFNBQVM7WUFDZCxNQUFNLEVBQUUsWUFBWTtTQUNyQixDQUFDLENBQUM7UUFFSCxNQUFNLENBQUMsWUFBWSxFQUFFLGFBQWEsQ0FBQyxHQUFHLE1BQU0sT0FBTyxDQUFDLEdBQUcsQ0FBQztZQUN0RCxNQUFNLENBQUMsSUFBSSxDQUFDLG1CQUFtQixFQUFFO1lBQ2pDLE1BQU0sQ0FBQyxJQUFJLENBQUMsWUFBWSxFQUFFO1NBQ2xCLENBQUMsQ0FBQztRQUVaLE1BQU0sRUFBRSxrQkFBa0IsRUFBRSxhQUFhLEVBQUUsaUJBQWlCLEVBQUUsWUFBWSxFQUFFLG9CQUFvQixFQUFFLEdBQUcsTUFBTSxDQUFDO1FBRTVHLE1BQU0sUUFBUSxHQUFHLElBQUksUUFBUSxDQUMzQixZQUFZLEVBQ1osTUFBTSxDQUFDLFdBQVcsRUFDbEIsYUFBYSxFQUNiO1lBQ0UsaUJBQWlCLEVBQUUsTUFBTSxDQUFDLHlCQUF5QixJQUFJLEtBQU07WUFDN0QsU0FBUyxFQUFFLE1BQU0sQ0FBQyxpQkFBaUIsSUFBSSxHQUFHO1NBQzNDLEVBQ0QsSUFBSSx1QkFBdUIsQ0FBQyxTQUFTLEVBQUUsR0FBRyxFQUFFLENBQUMsYUFBYSxDQUFDLFlBQVksRUFBRSxDQUFDLEVBQzFFLEVBQUUsWUFBWSxFQUFFLGFBQWEsRUFBRSxhQUFhLEVBQUUsWUFBWSxFQUFFLG9CQUFvQixFQUFFLENBQ25GLENBQUM7UUFDRixNQUFNLFFBQVEsQ0FBQyxLQUFLLENBQUMsZ0JBQWdCLENBQUMsQ0FBQztRQUN2QyxPQUFPLFFBQVEsQ0FBQztJQUNsQixDQUFDO0lBRUQ7OztPQUdHO0lBQ0ksS0FBSyxDQUFDLEtBQUssQ0FBQyxnQkFBeUI7UUFDMUMsSUFBSSxJQUFJLENBQUMsY0FBYyxFQUFFLENBQUM7WUFDeEIsTUFBTSxJQUFJLEtBQUssQ0FBQyw2QkFBNkIsQ0FBQyxDQUFDO1FBQ2pELENBQUM7UUFFRCxJQUFJLGdCQUFnQixFQUFFLENBQUM7WUFDckIsTUFBTSxJQUFJLENBQUMsSUFBSSxDQUFDLGdCQUFnQixDQUFDLENBQUM7UUFDcEMsQ0FBQztRQUVELElBQUksQ0FBQyxjQUFjLEdBQUcsSUFBSSxjQUFjLENBQUMsR0FBRyxFQUFFLENBQUMsSUFBSSxDQUFDLFFBQVEsRUFBRSxFQUFFLElBQUksQ0FBQyxNQUFNLENBQUMsaUJBQWlCLENBQUMsQ0FBQztRQUMvRixJQUFJLENBQUMsY0FBYyxDQUFDLEtBQUssRUFBRSxDQUFDO0lBQzlCLENBQUM7SUFFRDs7T0FFRztJQUNLLEtBQUssQ0FBQyxRQUFRO1FBQ3BCLElBQUksQ0FBQztZQUNILE1BQU0sSUFBSSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUN6QixDQUFDO1FBQUMsT0FBTyxLQUFLLEVBQUUsQ0FBQztZQUNmLElBQUksQ0FBQyxHQUFHLENBQUMsS0FBSyxDQUFDLHdCQUF3QixFQUFFLEtBQUssQ0FBQyxDQUFDO1FBQ2xELENBQUM7SUFDSCxDQUFDO0lBRUQ7O09BRUc7SUFDSyxLQUFLLENBQUMsSUFBSSxDQUFDLFVBQW1CO1FBQ3BDOzs7Ozs7Ozs7OztXQVdHO1FBQ0gsTUFBTSxFQUFFLFlBQVksRUFBRSxHQUFHLElBQUksQ0FBQyxXQUFXLENBQUM7UUFDMUMsTUFBTSxFQUFFLGVBQWUsR0FBRyxZQUFZLEVBQUUsaUJBQWlCLEdBQUcsWUFBWSxFQUFFLEdBQUcsTUFBTSxJQUFJLENBQUMsS0FBSyxDQUFDLGFBQWEsRUFBRSxDQUFDO1FBQzlHLE1BQU0sb0JBQW9CLEdBQUcsTUFBTSxJQUFJLENBQUMsWUFBWSxDQUFDLGNBQWMsRUFBRSxDQUFDO1FBRXRFLElBQUksVUFBVSxFQUFFLENBQUM7WUFDZixJQUFJLENBQUMsR0FBRyxDQUFDLElBQUksQ0FDWCw2Q0FBNkMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxhQUFhLENBQUMsUUFBUSxFQUFFLGtCQUFrQixJQUFJLENBQUMsR0FBRyxDQUM5RyxNQUFNLENBQUMsZUFBZSxDQUFDLEVBQ3ZCLE1BQU0sQ0FBQyxpQkFBaUIsQ0FBQyxDQUMxQix3QkFBd0Isb0JBQW9CLEVBQUUsQ0FDaEQsQ0FBQztRQUNKLENBQUM7UUFFRCxvRUFBb0U7UUFFcEU7Ozs7Ozs7Ozs7Ozs7OztXQWVHO1FBRUgsK0RBQStEO1FBQy9ELE1BQU0sSUFBSSxDQUFDLG9CQUFvQixDQUFDLGlCQUFpQixFQUFFLG9CQUFvQixDQUFDLENBQUM7UUFFekUsMEZBQTBGO1FBQzFGLElBQUksQ0FBQyxJQUFJLENBQUMsYUFBYSxJQUFJLElBQUksQ0FBQyxhQUFhLEdBQUcsb0JBQW9CLEVBQUUsQ0FBQztZQUNyRSxJQUFJLENBQUMsV0FBVyxHQUFHLENBQUMsTUFBTSxJQUFJLENBQUMsWUFBWSxDQUFDLFFBQVEsQ0FBQyxFQUFFLFdBQVcsRUFBRSxvQkFBb0IsRUFBRSxDQUFDLENBQUMsQ0FBQyxTQUFTLENBQUM7WUFDdkcsSUFBSSxDQUFDLGFBQWEsR0FBRyxvQkFBb0IsQ0FBQztRQUM1QyxDQUFDO1FBRUQsK0RBQStEO1FBQy9ELElBQUksb0JBQW9CLEdBQUcsZUFBZSxFQUFFLENBQUM7WUFDM0Msa0NBQWtDO1lBQ2xDLE1BQU0sRUFBRSxpQkFBaUIsRUFBRSxHQUFHLE1BQU0sSUFBSSxDQUFDLGNBQWMsQ0FBQyxlQUFlLEVBQUUsb0JBQW9CLENBQUMsQ0FBQztZQUMvRix3RUFBd0U7WUFDeEUseUZBQXlGO1lBQ3pGLHlGQUF5RjtZQUN6RiwyRkFBMkY7WUFDM0Ysd0ZBQXdGO1lBQ3hGLE1BQU0sSUFBSSxDQUFDLGdCQUFnQixDQUFDLGlCQUFpQixFQUFFLG9CQUFvQixDQUFDLENBQUM7UUFDdkUsQ0FBQztRQUVELElBQUksVUFBVSxFQUFFLENBQUM7WUFDZixJQUFJLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxxQ0FBcUMsb0JBQW9CLFlBQVksQ0FBQyxDQUFDO1FBQ3ZGLENBQUM7SUFDSCxDQUFDO0lBRUQsd0ZBQXdGO0lBQ2hGLEtBQUssQ0FBQyxnQkFBZ0IsQ0FBQyxpQkFBeUIsRUFBRSxvQkFBNEI7UUFDcEYsTUFBTSx1QkFBdUIsR0FBRyxNQUFNLENBQUMsTUFBTSxJQUFJLENBQUMsY0FBYyxFQUFFLENBQUMsQ0FBQztRQUVwRSxNQUFNLElBQUksR0FBRyxDQUFDLElBQUksQ0FBQyxXQUFXLElBQUksRUFBRSxDQUFDLEdBQUcsTUFBTSxDQUFDLElBQUksQ0FBQyxXQUFXLENBQUMsb0JBQW9CLENBQUMsQ0FBQztRQUV0RixNQUFNLFFBQVEsR0FDWix1QkFBdUIsR0FBRyxpQkFBaUI7WUFDM0MsQ0FBQyxNQUFNLElBQUksQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLGNBQWMsQ0FBQyxDQUFDLElBQUksQ0FBQyxFQUFFLEVBQUUsV0FBVyxFQUFFLG9CQUFvQixFQUFFLENBQUMsQ0FBQyxDQUFDO1FBRXpGLElBQUksUUFBUSxFQUFFLENBQUM7WUFDYixNQUFNLGNBQWMsR0FBRyx1QkFBdUIsR0FBRyxpQkFBaUIsQ0FBQztZQUNuRSxJQUFJLENBQUMsR0FBRyxDQUFDLEtBQUssQ0FBQywrQ0FBK0MsQ0FBQyxDQUFDO1lBQ2hFLE1BQU0sSUFBSSxDQUFDLEtBQUssQ0FBQyxZQUFZLENBQUMsTUFBTSxDQUFDLHVCQUF1QixDQUFDLEVBQUUsTUFBTSxDQUFDLGNBQWMsQ0FBQyxDQUFDLENBQUM7WUFDdkYsSUFBSSxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQ1gsV0FBVyxLQUFLLENBQUMsY0FBYyxFQUFFLE9BQU8sQ0FBQyxrQkFBa0IsdUJBQXVCLEdBQUc7Z0JBQ25GLE1BQU0saUJBQWlCLHVDQUF1QyxvQkFBb0IsSUFBSTtnQkFDdEYsOEJBQThCLE1BQU0sSUFBSSxDQUFDLGNBQWMsRUFBRSxHQUFHLENBQy9ELENBQUM7WUFDRiwrRUFBK0U7WUFDL0Usb0RBQW9EO1lBQ3BELHVFQUF1RTtRQUN6RSxDQUFDO0lBQ0gsQ0FBQztJQUVPLFNBQVMsQ0FBQyxHQUFXLEVBQUUsS0FBYTtRQUMxQyxNQUFNLFNBQVMsR0FBRyxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsU0FBUyxHQUFHLElBQUksQ0FBQyxXQUFXLENBQUMsWUFBWSxDQUFDLEdBQUcsSUFBSSxDQUFDLFdBQVcsQ0FBQyxvQkFBb0IsQ0FBQztRQUNsSCxNQUFNLFNBQVMsR0FBRyxHQUFHLEdBQUcsRUFBRSxDQUFDO1FBQzNCLE1BQU0sT0FBTyxHQUFHLFNBQVMsR0FBRyxNQUFNLENBQUMsU0FBUyxDQUFDLENBQUM7UUFDOUMsSUFBSSxPQUFPLEdBQUcsS0FBSyxFQUFFLENBQUM7WUFDcEIsT0FBTyxDQUFDLFNBQVMsRUFBRSxLQUFLLENBQUMsQ0FBQztRQUM1QixDQUFDO1FBQ0QsT0FBTyxDQUFDLFNBQVMsRUFBRSxPQUFPLENBQUMsQ0FBQztJQUM5QixDQUFDO0lBRU8sS0FBSyxDQUFDLG9CQUFvQixDQUFDLGlCQUF5QixFQUFFLG9CQUE0QjtRQUN4RixJQUFJLENBQUMsR0FBRyxDQUFDLEtBQUssQ0FBQyxtQ0FBbUMsaUJBQWlCLE9BQU8sb0JBQW9CLEdBQUcsQ0FBQyxDQUFDO1FBQ25HLElBQUksb0JBQW9CLElBQUksaUJBQWlCLEVBQUUsQ0FBQztZQUM5QyxPQUFPO1FBQ1QsQ0FBQztRQUVELE1BQU0sc0JBQXNCLEdBQUcsTUFBTSxJQUFJLENBQUMsS0FBSyxDQUFDLDBCQUEwQixFQUFFLENBQUM7UUFDN0UsTUFBTSw0QkFBNEIsR0FBRyxNQUFNLElBQUksQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLHFCQUFxQixFQUFFLENBQUM7UUFFbkYsSUFBSSxzQkFBc0IsS0FBSyw0QkFBNEIsRUFBRSxDQUFDO1lBQzVELE1BQU0sSUFBSSxDQUFDLEtBQUssQ0FBQyw4QkFBOEIsQ0FBQyxvQkFBb0IsQ0FBQyxDQUFDO1lBQ3RFLElBQUksQ0FBQyxHQUFHLENBQUMsS0FBSyxDQUNaLHdEQUF3RCxpQkFBaUIsR0FBRyxFQUFFLFFBQVEsb0JBQW9CLEdBQUcsQ0FDOUcsQ0FBQztZQUNGLE9BQU87UUFDVCxDQUFDO1FBRUQsd0dBQXdHO1FBQ3hHLElBQUksZ0JBQWdCLEdBQVcsaUJBQWlCLENBQUM7UUFDakQsSUFBSSxjQUFjLEdBQVcsaUJBQWlCLENBQUM7UUFDL0MsR0FBRyxDQUFDO1lBQ0YsQ0FBQyxnQkFBZ0IsRUFBRSxjQUFjLENBQUMsR0FBRyxJQUFJLENBQUMsU0FBUyxDQUFDLGNBQWMsRUFBRSxvQkFBb0IsQ0FBQyxDQUFDO1lBQzFGLElBQUksQ0FBQyxHQUFHLENBQUMsS0FBSyxDQUFDLGtEQUFrRCxnQkFBZ0IsUUFBUSxjQUFjLEdBQUcsQ0FBQyxDQUFDO1lBQzVHLE1BQU0sdUJBQXVCLEdBQUcsTUFBTSxzQkFBc0IsQ0FBQyxJQUFJLENBQUMsS0FBSyxFQUFFLGdCQUFnQixFQUFFLGNBQWMsQ0FBQyxDQUFDO1lBQzNHLElBQUksQ0FBQyxHQUFHLENBQUMsT0FBTyxDQUNkLGFBQWEsdUJBQXVCLENBQUMsYUFBYSxDQUFDLE1BQU0sNENBQTRDLGdCQUFnQixRQUFRLGNBQWMsR0FBRyxDQUMvSSxDQUFDO1lBQ0YsTUFBTSxJQUFJLENBQUMsS0FBSyxDQUFDLGlCQUFpQixDQUFDLHVCQUF1QixDQUFDLENBQUM7WUFDNUQsS0FBSyxNQUFNLEdBQUcsSUFBSSx1QkFBdUIsQ0FBQyxhQUFhLEVBQUUsQ0FBQztnQkFDeEQsSUFBSSxDQUFDLEdBQUcsQ0FBQyxLQUFLLENBQUMsNkJBQTZCLEVBQUUsRUFBRSxJQUFJLEVBQUUsR0FBRyxDQUFDLElBQUksQ0FBQyxRQUFRLEVBQUUsRUFBRSxLQUFLLEVBQUUsR0FBRyxDQUFDLEtBQUssRUFBRSxDQUFDLENBQUM7WUFDakcsQ0FBQztRQUNILENBQUMsUUFBUSxjQUFjLEdBQUcsb0JBQW9CLEVBQUU7SUFDbEQsQ0FBQztJQUVPLEtBQUssQ0FBQyxjQUFjLENBQzFCLGVBQXVCLEVBQ3ZCLG9CQUE0QjtRQUU1QixNQUFNLHVCQUF1QixHQUFHLE1BQU0sQ0FBQyxNQUFNLElBQUksQ0FBQyxjQUFjLEVBQUUsQ0FBQyxDQUFDO1FBQ3BFLE1BQU0sQ0FDSixpQkFBaUIsRUFDakIsYUFBYSxFQUNiLGtCQUFrQixFQUNsQixjQUFjLEVBQ2QsaUNBQWlDLEVBQ2pDLGlCQUFpQixFQUNsQixHQUFHLE1BQU0sSUFBSSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUMsdUJBQXVCLENBQUMsRUFBRSxFQUFFLFdBQVcsRUFBRSxvQkFBb0IsRUFBRSxDQUFDLENBQUM7UUFFcEcsTUFBTSxpQkFBaUIsR0FBRyxLQUFLLElBQUksRUFBRTtZQUNuQyxNQUFNLHlDQUF5QyxHQUFHLE1BQU0sSUFBSSxDQUFDLFFBQVEsQ0FBQyxNQUFNLENBQUMsaUJBQWlCLENBQUMsQ0FBQyxDQUFDO1lBQ2pHLElBQ0UseUNBQXlDO2dCQUN6QyxhQUFhLEtBQUsseUNBQXlDLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxRQUFRLEVBQUUsRUFDbkYsQ0FBQztnQkFDRCxNQUFNLElBQUksQ0FBQyxLQUFLLENBQUMsc0JBQXNCLENBQUMsTUFBTSxDQUFDLGlCQUFpQixDQUFDLENBQUMsQ0FBQztnQkFDbkUsK0RBQStEO2dCQUMvRCxNQUFNLElBQUksQ0FBQyxLQUFLLENBQUMsc0JBQXNCLENBQUMsTUFBTSxDQUFDLGlCQUFpQixDQUFDLENBQUMsQ0FBQztnQkFDbkUsSUFBSSxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsaUNBQWlDLGlCQUFpQixXQUFXLGlCQUFpQixHQUFHLEVBQUU7b0JBQy9GLGlCQUFpQjtvQkFDakIsaUJBQWlCO2lCQUNsQixDQUFDLENBQUM7WUFDTCxDQUFDO1lBQ0QsSUFBSSxDQUFDLGVBQWUsQ0FBQyxxQkFBcUIsQ0FBQyxNQUFNLENBQUMsaUJBQWlCLENBQUMsQ0FBQyxDQUFDO1FBQ3hFLENBQUMsQ0FBQztRQUVGLHlFQUF5RTtRQUN6RSxzRkFBc0Y7UUFDdEYsTUFBTSxRQUFRLEdBQUcsdUJBQXVCLEtBQUssRUFBRSxJQUFJLGtCQUFrQixLQUFLLEVBQUUsQ0FBQztRQUM3RSxJQUFJLFFBQVEsRUFBRSxDQUFDO1lBQ2IsTUFBTSxJQUFJLENBQUMsS0FBSyxDQUFDLDRCQUE0QixDQUFDLG9CQUFvQixDQUFDLENBQUM7WUFDcEUsSUFBSSxDQUFDLEdBQUcsQ0FBQyxLQUFLLENBQUMsOEJBQThCLGVBQWUsR0FBRyxFQUFFLE9BQU8sb0JBQW9CLEVBQUUsQ0FBQyxDQUFDO1lBQ2hHLE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxDQUFDO1FBQy9CLENBQUM7UUFFRCxNQUFNLGlCQUFpQixFQUFFLENBQUM7UUFFMUIsZ0hBQWdIO1FBQ2hILHdGQUF3RjtRQUN4RixJQUFJLHVCQUF1QixHQUFHLENBQUMsRUFBRSxDQUFDO1lBQ2hDLE1BQU0saUJBQWlCLEdBQUcsTUFBTSxJQUFJLENBQUMsUUFBUSxDQUFDLE1BQU0sQ0FBQyx1QkFBdUIsQ0FBQyxDQUFDLENBQUM7WUFDL0UsSUFBSSxpQkFBaUIsS0FBSyxTQUFTLEVBQUUsQ0FBQztnQkFDcEMsTUFBTSxJQUFJLEtBQUssQ0FBQyxpQkFBaUIsdUJBQXVCLEVBQUUsQ0FBQyxDQUFDO1lBQzlELENBQUM7WUFFRCxNQUFNLGdCQUFnQixHQUFHLGlCQUFpQixJQUFJLGNBQWMsS0FBSyxpQkFBaUIsQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLFFBQVEsRUFBRSxDQUFDO1lBQzNHLElBQUksZ0JBQWdCLEVBQUUsQ0FBQztnQkFDckIsTUFBTSxJQUFJLENBQUMsS0FBSyxDQUFDLDRCQUE0QixDQUFDLG9CQUFvQixDQUFDLENBQUM7Z0JBQ3BFLElBQUksQ0FBQyxHQUFHLENBQUMsS0FBSyxDQUFDLDhCQUE4QixlQUFlLEdBQUcsRUFBRSxPQUFPLG9CQUFvQixFQUFFLENBQUMsQ0FBQztnQkFDaEcsT0FBTyxFQUFFLGlCQUFpQixFQUFFLENBQUM7WUFDL0IsQ0FBQztZQUVELE1BQU0sd0JBQXdCLEdBQUcsaUNBQWlDLEtBQUssaUJBQWlCLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxRQUFRLEVBQUUsQ0FBQztZQUNqSCxJQUFJLENBQUMsd0JBQXdCLEVBQUUsQ0FBQztnQkFDOUIsd0ZBQXdGO2dCQUN4RiwwQkFBMEI7Z0JBQzFCLG9GQUFvRjtnQkFDcEYsc0dBQXNHO2dCQUN0RyxJQUFJLENBQUMsR0FBRyxDQUFDLEtBQUssQ0FBQyw2QkFBNkIsQ0FBQyxDQUFDO2dCQUU5QyxJQUFJLGNBQWMsR0FBRyx1QkFBdUIsQ0FBQztnQkFDN0MsT0FBTyxJQUFJLEVBQUUsQ0FBQztvQkFDWixNQUFNLGNBQWMsR0FBRyxNQUFNLElBQUksQ0FBQyxRQUFRLENBQUMsTUFBTSxDQUFDLGNBQWMsQ0FBQyxDQUFDLENBQUM7b0JBQ25FLElBQUksY0FBYyxLQUFLLFNBQVMsRUFBRSxDQUFDO3dCQUNqQyxNQUFNO29CQUNSLENBQUM7b0JBRUQsTUFBTSxpQkFBaUIsR0FBRyxNQUFNLElBQUksQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxjQUFjLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDO29CQUU1RixJQUFJLGlCQUFpQixLQUFLLGNBQWMsQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLFFBQVEsRUFBRSxFQUFFLENBQUM7d0JBQ2pFLE1BQU07b0JBQ1IsQ0FBQztvQkFDRCxjQUFjLEVBQUUsQ0FBQztnQkFDbkIsQ0FBQztnQkFFRCxNQUFNLGNBQWMsR0FBRyx1QkFBdUIsR0FBRyxjQUFjLENBQUM7Z0JBQ2hFLE1BQU0sSUFBSSxDQUFDLEtBQUssQ0FBQyxZQUFZLENBQUMsTUFBTSxDQUFDLHVCQUF1QixDQUFDLEVBQUUsTUFBTSxDQUFDLGNBQWMsQ0FBQyxDQUFDLENBQUM7Z0JBRXZGLElBQUksQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUNYLFdBQVcsS0FBSyxDQUFDLGNBQWMsRUFBRSxPQUFPLENBQUMsa0JBQWtCLHVCQUF1QixHQUFHO29CQUNuRiw4Q0FBOEMsb0JBQW9CLElBQUk7b0JBQ3RFLDhCQUE4QixNQUFNLElBQUksQ0FBQyxjQUFjLEVBQUUsR0FBRyxDQUMvRCxDQUFDO1lBQ0osQ0FBQztRQUNILENBQUM7UUFFRCx5R0FBeUc7UUFDekcseURBQXlEO1FBQ3pELElBQUksZ0JBQWdCLEdBQVcsZUFBZSxDQUFDO1FBQy9DLElBQUksY0FBYyxHQUFXLGVBQWUsQ0FBQztRQUU3QyxHQUFHLENBQUM7WUFDRixDQUFDLGdCQUFnQixFQUFFLGNBQWMsQ0FBQyxHQUFHLElBQUksQ0FBQyxTQUFTLENBQUMsY0FBYyxFQUFFLG9CQUFvQixDQUFDLENBQUM7WUFFMUYsSUFBSSxDQUFDLEdBQUcsQ0FBQyxLQUFLLENBQUMsc0NBQXNDLGdCQUFnQixPQUFPLGNBQWMsRUFBRSxDQUFDLENBQUM7WUFDOUYsTUFBTSxlQUFlLEdBQUcsTUFBTSx3QkFBd0IsQ0FDcEQsSUFBSSxDQUFDLE1BQU0sRUFDWCxJQUFJLENBQUMsWUFBWSxFQUNqQixnQkFBZ0IsRUFBRSw2RkFBNkY7WUFDL0csY0FBYyxFQUNkLElBQUksQ0FBQyxHQUFHLENBQ1QsQ0FBQztZQUVGLElBQUksZUFBZSxDQUFDLE1BQU0sS0FBSyxDQUFDLEVBQUUsQ0FBQztnQkFDakMsMEdBQTBHO2dCQUMxRywyQ0FBMkM7Z0JBQzNDLElBQUksQ0FBQyxHQUFHLENBQUMsS0FBSyxDQUFDLDRDQUE0QyxnQkFBZ0IsT0FBTyxjQUFjLEVBQUUsQ0FBQyxDQUFDO2dCQUNwRyxTQUFTO1lBQ1gsQ0FBQztZQUVELE1BQU0sMEJBQTBCLEdBQUcsZUFBZSxDQUFDLGVBQWUsQ0FBQyxNQUFNLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLFdBQVcsQ0FBQztZQUM5RixJQUFJLENBQUMsR0FBRyxDQUFDLEtBQUssQ0FDWixhQUFhLGVBQWUsQ0FBQyxNQUFNLG9DQUFvQyxnQkFBZ0IsUUFBUSxjQUFjLGlDQUFpQywwQkFBMEIsR0FBRyxDQUM1SyxDQUFDO1lBRUYsS0FBSyxNQUFNLEtBQUssSUFBSSxlQUFlLEVBQUUsQ0FBQztnQkFDcEMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxLQUFLLENBQUMsMEJBQTBCLEtBQUssQ0FBQyxJQUFJLENBQUMsTUFBTSxTQUFTLEtBQUssQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxNQUFNLE1BQU0sRUFBRTtvQkFDekcsU0FBUyxFQUFFLEtBQUssQ0FBQyxJQUFJLENBQUMsSUFBSSxFQUFFO29CQUM1QixhQUFhLEVBQUUsS0FBSyxDQUFDLEVBQUUsQ0FBQyxXQUFXO29CQUNuQyxHQUFHLEtBQUssQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLGVBQWUsQ0FBQyxTQUFTLEVBQUU7b0JBQ2hELEdBQUcsS0FBSyxDQUFDLElBQUksQ0FBQyxRQUFRLEVBQUU7aUJBQ3pCLENBQUMsQ0FBQztZQUNMLENBQUM7WUFFRCxNQUFNLENBQUMsZUFBZSxDQUFDLEdBQUcsTUFBTSxPQUFPLENBQUMsR0FBRyxFQUFFLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxTQUFTLENBQUMsZUFBZSxDQUFDLENBQUMsQ0FBQztZQUNyRixJQUFJLENBQUMsZUFBZSxDQUFDLGdCQUFnQixDQUNuQyxlQUFlLEdBQUcsZUFBZSxDQUFDLE1BQU0sRUFDeEMsZUFBZSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FDakMsQ0FBQztZQUVGLEtBQUssTUFBTSxLQUFLLElBQUksZUFBZSxFQUFFLENBQUM7Z0JBQ3BDLElBQUksQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLHVCQUF1QixLQUFLLENBQUMsSUFBSSxDQUFDLE1BQU0sRUFBRSxFQUFFO29CQUN4RCxTQUFTLEVBQUUsS0FBSyxDQUFDLElBQUksQ0FBQyxJQUFJLEVBQUU7b0JBQzVCLFdBQVcsRUFBRSxLQUFLLENBQUMsSUFBSSxDQUFDLE1BQU07aUJBQy9CLENBQUMsQ0FBQztZQUNMLENBQUM7UUFDSCxDQUFDLFFBQVEsY0FBYyxHQUFHLG9CQUFvQixFQUFFO1FBRWhELHVEQUF1RDtRQUN2RCxNQUFNLGlCQUFpQixFQUFFLENBQUM7UUFFMUIsT0FBTyxFQUFFLGlCQUFpQixFQUFFLENBQUM7SUFDL0IsQ0FBQztJQUVEOzs7T0FHRztJQUNJLEtBQUssQ0FBQyxJQUFJO1FBQ2YsSUFBSSxDQUFDLEdBQUcsQ0FBQyxLQUFLLENBQUMsYUFBYSxDQUFDLENBQUM7UUFDOUIsTUFBTSxJQUFJLENBQUMsY0FBYyxFQUFFLElBQUksRUFBRSxDQUFDO1FBRWxDLElBQUksQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxDQUFDO1FBQzFCLE9BQU8sT0FBTyxDQUFDLE9BQU8sRUFBRSxDQUFDO0lBQzNCLENBQUM7SUFFTSxnQkFBZ0I7UUFDckIsT0FBTyxPQUFPLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxXQUFXLENBQUMsYUFBYSxDQUFDLENBQUM7SUFDekQsQ0FBQztJQUVNLGtCQUFrQjtRQUN2QixPQUFPLE9BQU8sQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxlQUFlLENBQUMsQ0FBQztJQUMzRCxDQUFDO0lBRU0sZ0JBQWdCO1FBQ3JCLE1BQU0sYUFBYSxHQUFHLElBQUksQ0FBQyxhQUFhLENBQUM7UUFDekMsSUFBSSxDQUFDLGFBQWEsRUFBRSxDQUFDO1lBQ25CLE1BQU0sSUFBSSxLQUFLLENBQUMsb0VBQW9FLENBQUMsQ0FBQztRQUN4RixDQUFDO1FBQ0QsT0FBTyxhQUFhLENBQUM7SUFDdkIsQ0FBQztJQUVNLGNBQWM7UUFDbkIsTUFBTSxXQUFXLEdBQUcsSUFBSSxDQUFDLFdBQVcsQ0FBQztRQUNyQyxJQUFJLENBQUMsV0FBVyxFQUFFLENBQUM7WUFDakIsTUFBTSxJQUFJLEtBQUssQ0FBQyxpRUFBaUUsQ0FBQyxDQUFDO1FBQ3JGLENBQUM7UUFDRCxPQUFPLFdBQVcsQ0FBQztJQUNyQixDQUFDO0lBRU0sZUFBZTtRQUNwQixPQUFPLE9BQU8sQ0FBQyxPQUFPLENBQUMsa0JBQWtCLENBQUMsSUFBSSxDQUFDLGNBQWMsRUFBRSxFQUFFLElBQUksQ0FBQyxXQUFXLENBQUMsQ0FBQyxDQUFDO0lBQ3RGLENBQUM7SUFFTSxnQkFBZ0I7UUFDckIsT0FBTyxPQUFPLENBQUMsT0FBTyxDQUFDLHlCQUF5QixDQUFDLElBQUksQ0FBQyxjQUFjLEVBQUUsRUFBRSxJQUFJLENBQUMsV0FBVyxDQUFDLENBQUMsQ0FBQztJQUM3RixDQUFDO0lBRU0sS0FBSyxDQUFDLGlCQUFpQixDQUFDLFdBQW1CO1FBQ2hELE1BQU0sQ0FBQyxLQUFLLEVBQUUsR0FBRyxDQUFDLEdBQUcsb0JBQW9CLENBQUMsV0FBVyxFQUFFLElBQUksQ0FBQyxXQUFXLENBQUMsQ0FBQztRQUN6RSxNQUFNLE1BQU0sR0FBYyxFQUFFLENBQUM7UUFFN0Isc0ZBQXNGO1FBQ3RGLDhGQUE4RjtRQUM5RixJQUFJLEtBQUssR0FBRyxNQUFNLElBQUksQ0FBQyxRQUFRLENBQUMsTUFBTSxJQUFJLENBQUMsS0FBSyxDQUFDLHVCQUF1QixFQUFFLENBQUMsQ0FBQztRQUM1RSxNQUFNLElBQUksR0FBRyxDQUFDLENBQVUsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxlQUFlLENBQUMsVUFBVSxDQUFDLFFBQVEsRUFBRSxDQUFDO1FBQzVFLE9BQU8sS0FBSyxJQUFJLElBQUksQ0FBQyxLQUFLLENBQUMsSUFBSSxLQUFLLEVBQUUsQ0FBQztZQUNyQyxJQUFJLElBQUksQ0FBQyxLQUFLLENBQUMsSUFBSSxHQUFHLEVBQUUsQ0FBQztnQkFDdkIsTUFBTSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQztZQUNyQixDQUFDO1lBQ0QsS0FBSyxHQUFHLE1BQU0sSUFBSSxDQUFDLFFBQVEsQ0FBQyxLQUFLLENBQUMsTUFBTSxHQUFHLENBQUMsQ0FBQyxDQUFDO1FBQ2hELENBQUM7UUFFRCxPQUFPLE1BQU0sQ0FBQyxPQUFPLEVBQUUsQ0FBQztJQUMxQixDQUFDO0lBRU0sS0FBSyxDQUFDLGVBQWUsQ0FBQyxXQUFtQjtRQUM5Qyx3RkFBd0Y7UUFDeEYsTUFBTSxNQUFNLEdBQUcsTUFBTSxJQUFJLENBQUMsY0FBYyxDQUFDLFFBQVEsQ0FBQyxDQUFDO1FBQ25ELE1BQU0sSUFBSSxHQUFHLE1BQU0sRUFBRSxlQUFlLENBQUMsVUFBVSxDQUFDLFFBQVEsRUFBRSxDQUFDO1FBQzNELE1BQU0sQ0FBQyxVQUFVLEVBQUUsT0FBTyxDQUFDLEdBQUcsb0JBQW9CLENBQUMsV0FBVyxFQUFFLElBQUksQ0FBQyxXQUFXLENBQUMsQ0FBQztRQUNsRixJQUFJLElBQUksSUFBSSxJQUFJLElBQUksT0FBTyxFQUFFLENBQUM7WUFDNUIsT0FBTyxJQUFJLENBQUM7UUFDZCxDQUFDO1FBRUQsbUZBQW1GO1FBQ25GLG9HQUFvRztRQUNwRyxNQUFNLFdBQVcsR0FBRyxJQUFJLENBQUMsY0FBYyxFQUFFLENBQUM7UUFDMUMsTUFBTSxDQUFDLGVBQWUsRUFBRSxZQUFZLENBQUMsR0FBRyx5QkFBeUIsQ0FBQyxXQUFXLEVBQUUsSUFBSSxDQUFDLFdBQVcsQ0FBQyxDQUFDO1FBRWpHLCtFQUErRTtRQUMvRSxrRkFBa0Y7UUFDbEYsbUZBQW1GO1FBQ25GLGtFQUFrRTtRQUNsRSxxREFBcUQ7UUFDckQsTUFBTSxNQUFNLEdBQUcsRUFBRSxDQUFDO1FBQ2xCLE9BQU8sV0FBVyxHQUFHLE1BQU0sSUFBSSxZQUFZLENBQUM7SUFDOUMsQ0FBQztJQUVEOzs7Ozs7T0FNRztJQUNJLEtBQUssQ0FBQyxTQUFTLENBQUMsSUFBWSxFQUFFLEtBQWEsRUFBRSxNQUFnQjtRQUNsRSxNQUFNLGVBQWUsR0FBRyxNQUFNO1lBQzVCLENBQUMsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLEtBQUssRUFBRSxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsTUFBTSxJQUFJLENBQUMsS0FBSyxDQUFDLHNCQUFzQixFQUFFLENBQUMsR0FBRyxJQUFJLEdBQUcsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDO1lBQ3RGLENBQUMsQ0FBQyxLQUFLLENBQUM7UUFDVixPQUFPLGVBQWUsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxNQUFNLElBQUksQ0FBQyxLQUFLLENBQUMsU0FBUyxDQUFDLElBQUksRUFBRSxlQUFlLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQztJQUMzRyxDQUFDO0lBRUQ7Ozs7T0FJRztJQUNJLEtBQUssQ0FBQyxRQUFRLENBQUMsTUFBYztRQUNsQywrREFBK0Q7UUFDL0QsSUFBSSxNQUFNLEdBQUcsQ0FBQyxFQUFFLENBQUM7WUFDZixNQUFNLEdBQUcsTUFBTSxJQUFJLENBQUMsS0FBSyxDQUFDLHVCQUF1QixFQUFFLENBQUM7UUFDdEQsQ0FBQztRQUNELElBQUksTUFBTSxJQUFJLENBQUMsRUFBRSxDQUFDO1lBQ2hCLE9BQU8sU0FBUyxDQUFDO1FBQ25CLENBQUM7UUFDRCxNQUFNLE1BQU0sR0FBRyxNQUFNLElBQUksQ0FBQyxLQUFLLENBQUMsU0FBUyxDQUFDLE1BQU0sRUFBRSxDQUFDLENBQUMsQ0FBQztRQUNyRCxPQUFPLE1BQU0sQ0FBQyxNQUFNLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUM7SUFDMUQsQ0FBQztJQUVNLEtBQUssQ0FBQyxjQUFjLENBQUMsTUFBeUI7UUFDbkQsSUFBSSxNQUFNLEtBQUssUUFBUSxFQUFFLENBQUM7WUFDeEIsTUFBTSxHQUFHLE1BQU0sSUFBSSxDQUFDLEtBQUssQ0FBQyx1QkFBdUIsRUFBRSxDQUFDO1FBQ3RELENBQUM7UUFDRCxJQUFJLE1BQU0sS0FBSyxDQUFDLEVBQUUsQ0FBQztZQUNqQixPQUFPLFNBQVMsQ0FBQztRQUNuQixDQUFDO1FBQ0QsTUFBTSxPQUFPLEdBQUcsTUFBTSxJQUFJLENBQUMsS0FBSyxDQUFDLGVBQWUsQ0FBQyxNQUFNLEVBQUUsQ0FBQyxDQUFDLENBQUM7UUFDNUQsT0FBTyxPQUFPLENBQUMsTUFBTSxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDdkQsQ0FBQztJQUVNLFdBQVcsQ0FBQyxNQUFjO1FBQy9CLE9BQU8sSUFBSSxDQUFDLEtBQUssQ0FBQyxXQUFXLENBQUMsTUFBTSxDQUFDLENBQUM7SUFDeEMsQ0FBQztJQUVNLG1CQUFtQixDQUFDLE1BQWM7UUFDdkMsT0FBTyxJQUFJLENBQUMsS0FBSyxDQUFDLG1CQUFtQixDQUFDLE1BQU0sQ0FBQyxDQUFDO0lBQ2hELENBQUM7SUFFRDs7Ozs7T0FLRztJQUNJLEtBQUssQ0FBQyxpQkFBaUIsQ0FDNUIsT0FBcUIsRUFDckIsUUFBMEI7UUFFMUIsTUFBTSxRQUFRLEdBQUcsTUFBTSxJQUFJLENBQUMsV0FBVyxDQUFDLE9BQU8sQ0FBQyxDQUFDO1FBQ2pELElBQUksQ0FBQyxRQUFRLEVBQUUsQ0FBQztZQUNkLE1BQU0sSUFBSSxLQUFLLENBQUMsWUFBWSxPQUFPLENBQUMsUUFBUSxFQUFFLFlBQVksQ0FBQyxDQUFDO1FBQzlELENBQUM7UUFDRCxNQUFNLGFBQWEsR0FBRyxNQUFNLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxRQUFRLENBQUMsZUFBZSxDQUFDLENBQUM7UUFDNUUsSUFBSSxDQUFDLGFBQWEsRUFBRSxDQUFDO1lBQ25CLE1BQU0sSUFBSSxLQUFLLENBQUMsa0JBQWtCLFFBQVEsQ0FBQyxlQUFlLENBQUMsUUFBUSxFQUFFLFFBQVEsT0FBTyxDQUFDLFFBQVEsRUFBRSxZQUFZLENBQUMsQ0FBQztRQUMvRyxDQUFDO1FBQ0QsT0FBTyxhQUFhLENBQUMsZUFBZSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsTUFBTSxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUM7SUFDOUUsQ0FBQztJQUVEOzs7OztPQUtHO0lBQ0ksY0FBYyxDQUFDLElBQVksRUFBRSxLQUFhO1FBQy9DLE9BQU8sSUFBSSxDQUFDLEtBQUssQ0FBQyxjQUFjLENBQUMsSUFBSSxFQUFFLEtBQUssQ0FBQyxDQUFDO0lBQ2hELENBQUM7SUFFRDs7Ozs7T0FLRztJQUNILGFBQWEsQ0FBQyxJQUFVO1FBQ3RCLE9BQU8sSUFBSSxDQUFDLEtBQUssQ0FBQyxhQUFhLENBQUMsSUFBSSxDQUFDLENBQUM7SUFDeEMsQ0FBQztJQUVEOzs7Ozs7T0FNRztJQUNILDhCQUE4QixDQUFDLFdBQW1CLEVBQUUsVUFBZ0I7UUFDbEUsT0FBTyxJQUFJLENBQUMsS0FBSyxDQUFDLDhCQUE4QixDQUFDLFdBQVcsRUFBRSxVQUFVLENBQUMsQ0FBQztJQUM1RSxDQUFDO0lBRUQ7Ozs7T0FJRztJQUNILGtCQUFrQixDQUFDLE1BQWlCO1FBQ2xDLE9BQU8sSUFBSSxDQUFDLEtBQUssQ0FBQyxrQkFBa0IsQ0FBQyxNQUFNLENBQUMsQ0FBQztJQUMvQyxDQUFDO0lBRUQ7Ozs7T0FJRztJQUNILG9CQUFvQixDQUFDLE1BQWlCO1FBQ3BDLE9BQU8sSUFBSSxDQUFDLEtBQUssQ0FBQyxvQkFBb0IsQ0FBQyxNQUFNLENBQUMsQ0FBQztJQUNqRCxDQUFDO0lBRUQ7OztPQUdHO0lBQ0ksY0FBYztRQUNuQixPQUFPLElBQUksQ0FBQyxLQUFLLENBQUMsdUJBQXVCLEVBQUUsQ0FBQztJQUM5QyxDQUFDO0lBRU0sb0JBQW9CO1FBQ3pCLE9BQU8sSUFBSSxDQUFDLEtBQUssQ0FBQyxzQkFBc0IsRUFBRSxDQUFDO0lBQzdDLENBQUM7SUFFTSxzQkFBc0I7UUFDM0IsT0FBTyxJQUFJLENBQUMsS0FBSyxDQUFDLHNCQUFzQixFQUFFLENBQUM7SUFDN0MsQ0FBQztJQUVELHdFQUF3RTtJQUNqRSxvQkFBb0IsQ0FBQyxXQUFtQjtRQUM3QyxPQUFPLElBQUksQ0FBQyxLQUFLLENBQUMsc0JBQXNCLENBQUMsV0FBVyxDQUFDLENBQUM7SUFDeEQsQ0FBQztJQUVNLGdCQUFnQixDQUFDLEVBQU07UUFDNUIsT0FBTyxJQUFJLENBQUMsS0FBSyxDQUFDLGdCQUFnQixDQUFDLEVBQUUsQ0FBQyxDQUFDO0lBQ3pDLENBQUM7SUFFTSxxQkFBcUIsQ0FBQyxFQUFNO1FBQ2pDLE9BQU8sSUFBSSxDQUFDLEtBQUssQ0FBQyxxQkFBcUIsQ0FBQyxFQUFFLENBQUMsQ0FBQztJQUM5QyxDQUFDO0lBRU0sV0FBVyxDQUFDLE9BQXFCO1FBQ3RDLE9BQU8sSUFBSSxDQUFDLEtBQUssQ0FBQyxtQkFBbUIsQ0FBQyxPQUFPLENBQUMsQ0FBQztJQUNqRCxDQUFDO0lBRUQ7Ozs7T0FJRztJQUNILGlCQUFpQixDQUFDLFdBQW1CO1FBQ25DLE9BQU8sSUFBSSxDQUFDLEtBQUssQ0FBQyxpQkFBaUIsQ0FBQyxXQUFXLENBQUMsQ0FBQztJQUNuRCxDQUFDO0lBRUQ7Ozs7T0FJRztJQUNILHFCQUFxQixDQUFDLGFBQWlCO1FBQ3JDLE9BQU8sSUFBSSxDQUFDLEtBQUssQ0FBQyxxQkFBcUIsQ0FBQyxhQUFhLENBQUMsQ0FBQztJQUN6RCxDQUFDO0lBRUQsbUJBQW1CO1FBQ2pCLE9BQU8sSUFBSSxDQUFDLEtBQUssQ0FBQyxtQkFBbUIsRUFBRSxDQUFDO0lBQzFDLENBQUM7SUFFRCxtQ0FBbUM7SUFDbkMsS0FBSyxDQUFDLGdCQUFnQixDQUFDLGFBQWtDO1FBQ3ZELE1BQU0sSUFBSSxDQUFDLEtBQUssQ0FBQyxrQkFBa0IsQ0FDakMsQ0FBQyxhQUFhLENBQUMsRUFDZixDQUFDLCtCQUErQixDQUFDLGFBQWEsQ0FBQyxjQUFjLENBQUMsQ0FBQyxFQUMvRCxDQUFDLENBQ0YsQ0FBQztRQUNGLE9BQU87SUFDVCxDQUFDO0lBRUQsbUJBQW1CLENBQUMsT0FBcUIsRUFBRSxRQUEwQjtRQUNuRSxPQUFPLElBQUksQ0FBQyxLQUFLLENBQUMsbUJBQW1CLENBQUMsT0FBTyxFQUFFLFFBQVEsQ0FBQyxDQUFDO0lBQzNELENBQUM7SUFFRCxtQkFBbUIsQ0FBQyxPQUFxQjtRQUN2QyxPQUFPLElBQUksQ0FBQyxLQUFLLENBQUMsbUJBQW1CLENBQUMsT0FBTyxDQUFDLENBQUM7SUFDakQsQ0FBQztJQUVELHVCQUF1QixDQUFDLE9BQXFCLEVBQUUsUUFBMEI7UUFDdkUsT0FBTyxJQUFJLENBQUMsS0FBSyxDQUFDLHVCQUF1QixDQUFDLE9BQU8sRUFBRSxRQUFRLENBQUMsQ0FBQztJQUMvRCxDQUFDO0lBRUQsS0FBSyxDQUFDLFNBQVM7UUFDYixNQUFNLENBQUMsaUJBQWlCLEVBQUUsaUJBQWlCLENBQUMsR0FBRyxNQUFNLE9BQU8sQ0FBQyxHQUFHLENBQUM7WUFDL0QsSUFBSSxDQUFDLGNBQWMsRUFBRTtZQUNyQixJQUFJLENBQUMsb0JBQW9CLEVBQUU7U0FDbkIsQ0FBQyxDQUFDO1FBRVosTUFBTSxDQUFDLGlCQUFpQixFQUFFLGlCQUFpQixDQUFDLEdBQUcsTUFBTSxPQUFPLENBQUMsR0FBRyxDQUFDO1lBQy9ELGlCQUFpQixHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLGNBQWMsQ0FBQyxpQkFBaUIsQ0FBQyxDQUFDLENBQUMsQ0FBQyxTQUFTO1lBQzFFLGlCQUFpQixHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLGNBQWMsQ0FBQyxpQkFBaUIsQ0FBQyxDQUFDLENBQUMsQ0FBQyxTQUFTO1NBQ2xFLENBQUMsQ0FBQztRQUVaLElBQUksaUJBQWlCLEdBQUcsQ0FBQyxJQUFJLENBQUMsaUJBQWlCLEVBQUUsQ0FBQztZQUNoRCxNQUFNLElBQUksS0FBSyxDQUFDLHdDQUF3QyxDQUFDLENBQUM7UUFDNUQsQ0FBQztRQUVELElBQUksaUJBQWlCLEdBQUcsQ0FBQyxJQUFJLENBQUMsaUJBQWlCLEVBQUUsQ0FBQztZQUNoRCxNQUFNLElBQUksS0FBSyxDQUFDLHdDQUF3QyxDQUFDLENBQUM7UUFDNUQsQ0FBQztRQUVELE9BQU87WUFDTCxNQUFNLEVBQUUsRUFBRSxNQUFNLEVBQUUsaUJBQWlCLEVBQUUsSUFBSSxFQUFFLGlCQUFpQixFQUFFLElBQUksRUFBRSxDQUFDLFFBQVEsRUFBRSxFQUFlO1lBQzlGLE1BQU0sRUFBRSxFQUFFLE1BQU0sRUFBRSxpQkFBaUIsRUFBRSxJQUFJLEVBQUUsaUJBQWlCLEVBQUUsSUFBSSxFQUFFLENBQUMsUUFBUSxFQUFFLEVBQWU7WUFDOUYsU0FBUyxFQUFFLEVBQUUsTUFBTSxFQUFFLGlCQUFpQixFQUFFLElBQUksRUFBRSxpQkFBaUIsRUFBRSxJQUFJLEVBQUUsQ0FBQyxRQUFRLEVBQUUsRUFBZTtTQUNsRyxDQUFDO0lBQ0osQ0FBQztDQUNGO0FBRUQsSUFBSyxTQUdKO0FBSEQsV0FBSyxTQUFTO0lBQ1osMkNBQUssQ0FBQTtJQUNMLDZDQUFNLENBQUE7QUFDUixDQUFDLEVBSEksU0FBUyxLQUFULFNBQVMsUUFHYjtBQUVEOzs7OztHQUtHO0FBQ0gsTUFBTSxtQkFBbUI7SUFpQnZCLFlBQTZCLEtBQXdCOztRQUF4QixVQUFLLEdBQUwsS0FBSyxDQUFtQjtRQUZyRCxtQ0FBTyxpQkFBaUIsQ0FBQyw2QkFBNkIsQ0FBQyxFQUFDO0lBRUEsQ0FBQztJQUV6RCxtQ0FBbUM7SUFDbkMsa0JBQWtCLENBQ2hCLGVBQXNDLEVBQ3RDLG1CQUF5QixFQUN6QixRQUFnQjtRQUVoQixPQUFPLElBQUksQ0FBQyxLQUFLLENBQUMsa0JBQWtCLENBQUMsZUFBZSxFQUFFLG1CQUFtQixFQUFFLFFBQVEsQ0FBQyxDQUFDO0lBQ3ZGLENBQUM7SUF5R0QsS0FBSyxDQUFDLFNBQVMsQ0FBQyxNQUE4QjtRQUM1QyxNQUFNLFNBQVMsR0FBRyxNQUFNLE9BQU8sQ0FBQyxHQUFHLENBQUM7WUFDbEMsSUFBSSxDQUFDLEtBQUssQ0FBQyxPQUFPLENBQUMsTUFBTSxDQUFDLEdBQUcsQ0FBQyxLQUFLLENBQUMsRUFBRSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsQ0FBQztZQUNuRCwrR0FBK0c7WUFDL0csR0FBRyxNQUFNLENBQUMsR0FBRyxDQUFDLEtBQUssRUFBQyxLQUFLLEVBQUMsRUFBRTtnQkFDMUIsTUFBTSxpQkFBaUIsR0FBRyxLQUFLLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxTQUFTO3FCQUNoRCxPQUFPLENBQUMsUUFBUSxDQUFDLEVBQUUsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsaUJBQWlCLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUM7cUJBQ25FLE9BQU8sQ0FBQyxLQUFLLENBQUMsRUFBRSxDQUFDLEtBQUssQ0FBQyxVQUFVLEVBQUUsQ0FBQyxDQUFDO2dCQUN4QyxvRUFBb0U7Z0JBQ3BFLE1BQU0sV0FBVyxHQUFHLEtBQUssQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxPQUFPLENBQUMsUUFBUSxDQUFDLEVBQUUsQ0FBQyxRQUFRLENBQUMsV0FBVyxDQUFDLENBQUM7Z0JBQ3hGLE9BQU8sQ0FDTCxNQUFNLE9BQU8sQ0FBQyxHQUFHLENBQUM7b0JBQ2hCLHVCQUFBLElBQUksNEZBQWlDLE1BQXJDLElBQUksRUFBa0MsaUJBQWlCLEVBQUUsS0FBSyxDQUFDLElBQUksQ0FBQyxNQUFNLEVBQUUsU0FBUyxDQUFDLEtBQUssQ0FBQztvQkFDNUYsdUJBQUEsSUFBSSw0RkFBaUMsTUFBckMsSUFBSSxFQUFrQyxXQUFXLEVBQUUsS0FBSyxDQUFDLElBQUksQ0FBQyxNQUFNLEVBQUUsU0FBUyxDQUFDLEtBQUssQ0FBQztvQkFDdEYsdUJBQUEsSUFBSSxnR0FBcUMsTUFBekMsSUFBSSxFQUFzQyxpQkFBaUIsRUFBRSxLQUFLLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQztpQkFDaEYsQ0FBQyxDQUNILENBQUMsS0FBSyxDQUFDLE9BQU8sQ0FBQyxDQUFDO1lBQ25CLENBQUMsQ0FBQztZQUNGLElBQUksQ0FBQyxLQUFLLENBQUMsYUFBYSxDQUFDLE1BQU0sQ0FBQyxHQUFHLENBQUMsS0FBSyxDQUFDLEVBQUUsQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLENBQUM7WUFDekQsSUFBSSxDQUFDLEtBQUssQ0FBQyxTQUFTLENBQUMsTUFBTSxDQUFDO1NBQzdCLENBQUMsQ0FBQztRQUVILE9BQU8sU0FBUyxDQUFDLEtBQUssQ0FBQyxPQUFPLENBQUMsQ0FBQztJQUNsQyxDQUFDO0lBRUQsS0FBSyxDQUFDLFlBQVksQ0FBQyxJQUFZLEVBQUUsY0FBc0I7UUFDckQsTUFBTSxJQUFJLEdBQUcsTUFBTSxJQUFJLENBQUMsdUJBQXVCLEVBQUUsQ0FBQztRQUNsRCxJQUFJLElBQUksSUFBSSxJQUFJLEVBQUUsQ0FBQztZQUNqQixNQUFNLElBQUksS0FBSyxDQUFDLDhCQUE4QixDQUFDLENBQUM7UUFDbEQsQ0FBQztRQUVELDBFQUEwRTtRQUMxRSxNQUFNLE1BQU0sR0FBRyxNQUFNLElBQUksQ0FBQyxTQUFTLENBQUMsSUFBSSxHQUFHLGNBQWMsR0FBRyxDQUFDLEVBQUUsY0FBYyxDQUFDLENBQUM7UUFFL0UsTUFBTSxTQUFTLEdBQUcsTUFBTSxPQUFPLENBQUMsR0FBRyxDQUFDO1lBQ2xDLCtHQUErRztZQUMvRyxHQUFHLE1BQU0sQ0FBQyxHQUFHLENBQUMsS0FBSyxFQUFDLEtBQUssRUFBQyxFQUFFO2dCQUMxQixNQUFNLGlCQUFpQixHQUFHLEtBQUssQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLFNBQVM7cUJBQ2hELE9BQU8sQ0FBQyxRQUFRLENBQUMsRUFBRSxDQUFDLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxpQkFBaUIsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQztxQkFDbkUsT0FBTyxDQUFDLEtBQUssQ0FBQyxFQUFFLENBQUMsS0FBSyxDQUFDLFVBQVUsRUFBRSxDQUFDLENBQUM7Z0JBRXhDLG9FQUFvRTtnQkFDcEUsTUFBTSxXQUFXLEdBQUcsS0FBSyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLE9BQU8sQ0FBQyxRQUFRLENBQUMsRUFBRSxDQUFDLFFBQVEsQ0FBQyxXQUFXLENBQUMsQ0FBQztnQkFFeEYsT0FBTyxDQUNMLE1BQU0sT0FBTyxDQUFDLEdBQUcsQ0FBQztvQkFDaEIsdUJBQUEsSUFBSSw0RkFBaUMsTUFBckMsSUFBSSxFQUFrQyxpQkFBaUIsRUFBRSxLQUFLLENBQUMsSUFBSSxDQUFDLE1BQU0sRUFBRSxTQUFTLENBQUMsTUFBTSxDQUFDO29CQUM3Rix1QkFBQSxJQUFJLDRGQUFpQyxNQUFyQyxJQUFJLEVBQWtDLFdBQVcsRUFBRSxLQUFLLENBQUMsSUFBSSxDQUFDLE1BQU0sRUFBRSxTQUFTLENBQUMsTUFBTSxDQUFDO2lCQUN4RixDQUFDLENBQ0gsQ0FBQyxLQUFLLENBQUMsT0FBTyxDQUFDLENBQUM7WUFDbkIsQ0FBQyxDQUFDO1lBRUYsSUFBSSxDQUFDLEtBQUssQ0FBQyxVQUFVLENBQUMsTUFBTSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQztZQUM5QyxJQUFJLENBQUMsS0FBSyxDQUFDLFlBQVksQ0FBQyxJQUFJLEVBQUUsY0FBYyxDQUFDO1NBQzlDLENBQUMsQ0FBQztRQUVILE9BQU8sU0FBUyxDQUFDLEtBQUssQ0FBQyxPQUFPLENBQUMsQ0FBQztJQUNsQyxDQUFDO0lBRUQsU0FBUyxDQUFDLElBQVksRUFBRSxLQUFhO1FBQ25DLE9BQU8sSUFBSSxDQUFDLEtBQUssQ0FBQyxTQUFTLENBQUMsSUFBSSxFQUFFLEtBQUssQ0FBQyxDQUFDO0lBQzNDLENBQUM7SUFDRCxlQUFlLENBQUMsSUFBWSxFQUFFLEtBQWE7UUFDekMsT0FBTyxJQUFJLENBQUMsS0FBSyxDQUFDLGVBQWUsQ0FBQyxJQUFJLEVBQUUsS0FBSyxDQUFDLENBQUM7SUFDakQsQ0FBQztJQUNELFdBQVcsQ0FBQyxNQUFjO1FBQ3hCLE9BQU8sSUFBSSxDQUFDLEtBQUssQ0FBQyxXQUFXLENBQUMsTUFBTSxDQUFDLENBQUM7SUFDeEMsQ0FBQztJQUNELG1CQUFtQixDQUFDLE1BQWM7UUFDaEMsT0FBTyxJQUFJLENBQUMsS0FBSyxDQUFDLG1CQUFtQixDQUFDLE1BQU0sQ0FBQyxDQUFDO0lBQ2hELENBQUM7SUFDRCxpQkFBaUIsQ0FBQyxRQUFrQztRQUNsRCxPQUFPLElBQUksQ0FBQyxLQUFLLENBQUMsaUJBQWlCLENBQUMsUUFBUSxDQUFDLENBQUM7SUFDaEQsQ0FBQztJQUNELGlCQUFpQixDQUFDLFdBQW1CO1FBQ25DLE9BQU8sSUFBSSxDQUFDLEtBQUssQ0FBQyxpQkFBaUIsQ0FBQyxXQUFXLENBQUMsQ0FBQztJQUNuRCxDQUFDO0lBQ0QscUJBQXFCLENBQUMsYUFBaUI7UUFDckMsT0FBTyxJQUFJLENBQUMsS0FBSyxDQUFDLHFCQUFxQixDQUFDLGFBQWEsQ0FBQyxDQUFDO0lBQ3pELENBQUM7SUFDRCxjQUFjLENBQUMsSUFBWSxFQUFFLEtBQWE7UUFDeEMsT0FBTyxJQUFJLENBQUMsS0FBSyxDQUFDLGNBQWMsQ0FBQyxJQUFJLEVBQUUsS0FBSyxDQUFDLENBQUM7SUFDaEQsQ0FBQztJQUNELGFBQWEsQ0FBQyxJQUFVO1FBQ3RCLE9BQU8sSUFBSSxDQUFDLEtBQUssQ0FBQyxhQUFhLENBQUMsSUFBSSxDQUFDLENBQUM7SUFDeEMsQ0FBQztJQUNELDhCQUE4QixDQUFDLFdBQW1CLEVBQUUsVUFBZ0I7UUFDbEUsT0FBTyxJQUFJLENBQUMsS0FBSyxDQUFDLDhCQUE4QixDQUFDLFdBQVcsRUFBRSxVQUFVLENBQUMsQ0FBQztJQUM1RSxDQUFDO0lBQ0Qsa0JBQWtCLENBQUMsTUFBaUI7UUFDbEMsT0FBTyxJQUFJLENBQUMsS0FBSyxDQUFDLGtCQUFrQixDQUFDLE1BQU0sQ0FBQyxDQUFDO0lBQy9DLENBQUM7SUFDRCxvQkFBb0IsQ0FBQyxNQUFpQjtRQUNwQyxPQUFPLElBQUksQ0FBQyxLQUFLLENBQUMsb0JBQW9CLENBQUMsTUFBTSxDQUFDLENBQUM7SUFDakQsQ0FBQztJQUNELHVCQUF1QjtRQUNyQixPQUFPLElBQUksQ0FBQyxLQUFLLENBQUMsdUJBQXVCLEVBQUUsQ0FBQztJQUM5QyxDQUFDO0lBQ0Qsc0JBQXNCO1FBQ3BCLE9BQU8sSUFBSSxDQUFDLEtBQUssQ0FBQyxzQkFBc0IsRUFBRSxDQUFDO0lBQzdDLENBQUM7SUFDRCxzQkFBc0I7UUFDcEIsT0FBTyxJQUFJLENBQUMsS0FBSyxDQUFDLHNCQUFzQixFQUFFLENBQUM7SUFDN0MsQ0FBQztJQUNELHNCQUFzQixDQUFDLGFBQXFCO1FBQzFDLE9BQU8sSUFBSSxDQUFDLEtBQUssQ0FBQyxzQkFBc0IsQ0FBQyxhQUFhLENBQUMsQ0FBQztJQUMxRCxDQUFDO0lBQ0Qsc0JBQXNCLENBQUMsYUFBcUI7UUFDMUMsT0FBTyxJQUFJLENBQUMsS0FBSyxDQUFDLHNCQUFzQixDQUFDLGFBQWEsQ0FBQyxDQUFDO0lBQzFELENBQUM7SUFDRCw0QkFBNEIsQ0FBQyxhQUFxQjtRQUNoRCxPQUFPLElBQUksQ0FBQyxLQUFLLENBQUMsNEJBQTRCLENBQUMsYUFBYSxDQUFDLENBQUM7SUFDaEUsQ0FBQztJQUNELDhCQUE4QixDQUFDLGFBQXFCO1FBQ2xELE9BQU8sSUFBSSxDQUFDLEtBQUssQ0FBQyw4QkFBOEIsQ0FBQyxhQUFhLENBQUMsQ0FBQztJQUNsRSxDQUFDO0lBQ0QsYUFBYTtRQUNYLE9BQU8sSUFBSSxDQUFDLEtBQUssQ0FBQyxhQUFhLEVBQUUsQ0FBQztJQUNwQyxDQUFDO0lBQ0QsZ0JBQWdCLENBQUMsRUFBTTtRQUNyQixPQUFPLElBQUksQ0FBQyxLQUFLLENBQUMsZ0JBQWdCLENBQUMsRUFBRSxDQUFDLENBQUM7SUFDekMsQ0FBQztJQUNELHFCQUFxQixDQUFDLGVBQW1CO1FBQ3ZDLE9BQU8sSUFBSSxDQUFDLEtBQUssQ0FBQyxxQkFBcUIsQ0FBQyxlQUFlLENBQUMsQ0FBQztJQUMzRCxDQUFDO0lBQ0QsbUJBQW1CLENBQUMsT0FBcUI7UUFDdkMsT0FBTyxJQUFJLENBQUMsS0FBSyxDQUFDLG1CQUFtQixDQUFDLE9BQU8sQ0FBQyxDQUFDO0lBQ2pELENBQUM7SUFDRCxtQkFBbUI7UUFDakIsT0FBTyxJQUFJLENBQUMsS0FBSyxDQUFDLG1CQUFtQixFQUFFLENBQUM7SUFDMUMsQ0FBQztJQUNELG1CQUFtQixDQUFDLE9BQXFCLEVBQUUsUUFBMEI7UUFDbkUsT0FBTyxJQUFJLENBQUMsS0FBSyxDQUFDLG1CQUFtQixDQUFDLE9BQU8sRUFBRSxRQUFRLENBQUMsQ0FBQztJQUMzRCxDQUFDO0lBQ0QsbUJBQW1CLENBQUMsT0FBcUI7UUFDdkMsT0FBTyxJQUFJLENBQUMsS0FBSyxDQUFDLG1CQUFtQixDQUFDLE9BQU8sQ0FBQyxDQUFDO0lBQ2pELENBQUM7SUFDRCx1QkFBdUIsQ0FBQyxPQUFxQixFQUFFLFFBQTBCO1FBQ3ZFLE9BQU8sSUFBSSxDQUFDLEtBQUssQ0FBQyx1QkFBdUIsQ0FBQyxPQUFPLEVBQUUsUUFBUSxDQUFDLENBQUM7SUFDL0QsQ0FBQztJQUNELDBCQUEwQjtRQUN4QixPQUFPLElBQUksQ0FBQyxLQUFLLENBQUMsMEJBQTBCLEVBQUUsQ0FBQztJQUNqRCxDQUFDO0lBQ0QsWUFBWTtRQUNWLE9BQU8sSUFBSSxDQUFDLEtBQUssQ0FBQyxZQUFZLEVBQUUsQ0FBQztJQUNuQyxDQUFDO0NBQ0Y7O0FBelBDOzs7R0FHRztBQUNILEtBQUssK0RBQWtDLE9BQTJCLEVBQUUsUUFBZ0IsRUFBRSxTQUFvQjtJQUN4RyxNQUFNLGVBQWUsR0FBRyxPQUFPO1NBQzVCLE1BQU0sQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLDRCQUE0QixDQUFDLDhCQUE4QixDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsQ0FBQztTQUNwRixHQUFHLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyw0QkFBNEIsQ0FBQyxPQUFPLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxDQUFDO1NBQzFELEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxxQkFBcUIsRUFBRSxDQUFDLENBQUM7SUFDdkMsSUFBSSxlQUFlLENBQUMsTUFBTSxHQUFHLENBQUMsRUFBRSxDQUFDO1FBQy9CLGVBQWUsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyx1QkFBQSxJQUFJLGdDQUFLLENBQUMsT0FBTyxDQUFDLEdBQUcsU0FBUyxDQUFDLFNBQVMsQ0FBQyxtQkFBbUIsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxRQUFRLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQztRQUM3RyxJQUFJLFNBQVMsSUFBSSxTQUFTLENBQUMsS0FBSyxFQUFFLENBQUM7WUFDakMscUhBQXFIO1lBQ3JILE9BQU8sTUFBTSxJQUFJLENBQUMsS0FBSyxDQUFDLGtCQUFrQixDQUN4QyxlQUFlLEVBQ2YsZUFBZSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLCtCQUErQixDQUFDLENBQUMsQ0FBQyxjQUFjLENBQUMsQ0FBQyxFQUMzRSxRQUFRLENBQ1QsQ0FBQztRQUNKLENBQUM7YUFBTSxJQUFJLFNBQVMsSUFBSSxTQUFTLENBQUMsTUFBTSxFQUFFLENBQUM7WUFDekMsT0FBTyxNQUFNLElBQUksQ0FBQyxLQUFLLENBQUMscUJBQXFCLENBQUMsZUFBZSxFQUFFLFFBQVEsQ0FBQyxDQUFDO1FBQzNFLENBQUM7SUFDSCxDQUFDO0lBQ0QsT0FBTyxJQUFJLENBQUM7QUFDZCxDQUFDO0FBRUQ7OztHQUdHO0FBQ0gsS0FBSywrREFBa0MsT0FBcUIsRUFBRSxRQUFnQixFQUFFLFNBQW9CO0lBQ2xHLE1BQU0saUJBQWlCLEdBQUcsT0FBTztTQUM5QixNQUFNLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyw2QkFBNkIsQ0FBQywrQkFBK0IsQ0FBQyxHQUFHLENBQUMsQ0FBQztTQUNqRixHQUFHLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyw2QkFBNkIsQ0FBQyxPQUFPLENBQUMsR0FBRyxDQUFDLENBQUM7U0FDdEQsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLGtCQUFrQixFQUFFLENBQUMsQ0FBQztJQUNwQyxJQUFJLGlCQUFpQixDQUFDLE1BQU0sR0FBRyxDQUFDLEVBQUUsQ0FBQztRQUNqQyxpQkFBaUIsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FDNUIsdUJBQUEsSUFBSSxnQ0FBSyxDQUFDLE9BQU8sQ0FBQyxHQUFHLFNBQVMsQ0FBQyxTQUFTLENBQUMseUJBQXlCLENBQUMsQ0FBQyxPQUFPLENBQUMsUUFBUSxFQUFFLEVBQUUsQ0FBQyxDQUMxRixDQUFDO1FBQ0YsSUFBSSxTQUFTLElBQUksU0FBUyxDQUFDLEtBQUssRUFBRSxDQUFDO1lBQ2pDLE9BQU8sTUFBTSxJQUFJLENBQUMsS0FBSyxDQUFDLG9CQUFvQixDQUFDLGlCQUFpQixFQUFFLFFBQVEsQ0FBQyxDQUFDO1FBQzVFLENBQUM7YUFBTSxJQUFJLFNBQVMsSUFBSSxTQUFTLENBQUMsTUFBTSxFQUFFLENBQUM7WUFDekMsT0FBTyxNQUFNLElBQUksQ0FBQyxLQUFLLENBQUMsdUJBQXVCLENBQUMsaUJBQWlCLEVBQUUsUUFBUSxDQUFDLENBQUM7UUFDL0UsQ0FBQztJQUNILENBQUM7SUFDRCxPQUFPLElBQUksQ0FBQztBQUNkLENBQUM7QUFFRDs7Ozs7Ozs7O0dBU0c7QUFDSCxLQUFLLG1FQUFzQyxPQUEyQixFQUFFLFNBQWlCO0lBQ3ZGLGlFQUFpRTtJQUNqRSxNQUFNLGVBQWUsR0FBRyxPQUFPO1NBQzVCLE1BQU0sQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLCtCQUErQixDQUFDLGlDQUFpQyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsQ0FBQztTQUMxRixHQUFHLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQywrQkFBK0IsQ0FBQyxPQUFPLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUM7SUFDakUsTUFBTSxxQkFBcUIsR0FBRyxPQUFPO1NBQ2xDLE1BQU0sQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLHFDQUFxQyxDQUFDLHVDQUF1QyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsQ0FBQztTQUN0RyxHQUFHLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxxQ0FBcUMsQ0FBQyxPQUFPLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUM7SUFFdkUsd0NBQXdDO0lBQ3hDLEtBQUssTUFBTSxDQUFDLGFBQWEsRUFBRSxXQUFXLENBQUMsSUFBSSxNQUFNLENBQUMsT0FBTyxDQUN2RCxPQUFPLENBQUMsQ0FBQyxHQUFHLGVBQWUsRUFBRSxHQUFHLHFCQUFxQixDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsZUFBZSxDQUFDLFFBQVEsRUFBRSxDQUFDLENBQzNGLEVBQUUsQ0FBQztRQUNGLE1BQU0sZUFBZSxHQUFHLEVBQUUsQ0FBQyxVQUFVLENBQUMsYUFBYSxDQUFDLENBQUM7UUFDckQsTUFBTSxhQUFhLEdBQUcsTUFBTSxJQUFJLENBQUMsZ0JBQWdCLENBQUMsZUFBZSxDQUFDLENBQUM7UUFDbkUsSUFBSSxDQUFDLGFBQWEsRUFBRSxDQUFDO1lBQ25CLHVCQUFBLElBQUksZ0NBQUssQ0FBQyxJQUFJLENBQUMsb0RBQW9ELGVBQWUsQ0FBQyxRQUFRLEVBQUUsZ0JBQWdCLENBQUMsQ0FBQztZQUMvRyxTQUFTO1FBQ1gsQ0FBQztRQUVELHlFQUF5RTtRQUN6RSxNQUFNLE1BQU0sR0FBRyxXQUFXLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLDZCQUE2QixFQUFFLENBQUMsQ0FBQztRQUN2RSxNQUFNLFVBQVUsR0FBRyxNQUFNLENBQUMsTUFBTSxDQUM5QixDQUFDLEVBQUUsRUFBc0QsRUFBRSxDQUFDLHdDQUF3QyxJQUFJLEVBQUUsQ0FDM0csQ0FBQztRQUNGLE1BQU0sZ0JBQWdCLEdBQUcsTUFBTSxDQUFDLE1BQU0sQ0FDcEMsQ0FBQyxFQUFFLEVBQWtELEVBQUUsQ0FBQyxrQ0FBa0MsSUFBSSxFQUFFLENBQ2pHLENBQUM7UUFDRixNQUFNLGVBQWUsR0FBRyxVQUFVLENBQUMsTUFBTSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMscUNBQXFDLENBQUMsRUFBRSxFQUFFLGFBQWEsQ0FBQyxDQUFDLENBQUM7UUFDMUcsTUFBTSxxQkFBcUIsR0FBRyxnQkFBZ0IsQ0FBQyxNQUFNLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FDekQsMkNBQTJDLENBQUMsRUFBRSxFQUFFLGFBQWEsQ0FBQyxDQUMvRCxDQUFDO1FBQ0YsTUFBTSxZQUFZLEdBQUcsZUFBZSxDQUFDLE1BQU0sR0FBRyxxQkFBcUIsQ0FBQyxNQUFNLENBQUM7UUFDM0UsSUFBSSxZQUFZLEtBQUssTUFBTSxDQUFDLE1BQU0sRUFBRSxDQUFDO1lBQ25DLHVCQUFBLElBQUksZ0NBQUssQ0FBQyxJQUFJLENBQUMsWUFBWSxNQUFNLENBQUMsTUFBTSxHQUFHLFlBQVksb0JBQW9CLENBQUMsQ0FBQztRQUMvRSxDQUFDO1FBRUQsa0VBQWtFO1FBQ2xFLElBQUksWUFBWSxHQUFHLENBQUMsRUFBRSxDQUFDO1lBQ3JCLHVCQUFBLElBQUksZ0NBQUssQ0FBQyxPQUFPLENBQUMsV0FBVyxZQUFZLGlDQUFpQyxlQUFlLENBQUMsUUFBUSxFQUFFLEVBQUUsQ0FBQyxDQUFDO1FBQzFHLENBQUM7UUFDRCxPQUFPLE1BQU0sSUFBSSxDQUFDLEtBQUssQ0FBQyxZQUFZLENBQUMsZUFBZSxFQUFFLGVBQWUsRUFBRSxxQkFBcUIsQ0FBQyxDQUFDO0lBQ2hHLENBQUM7SUFDRCxPQUFPLElBQUksQ0FBQztBQUNkLENBQUMifQ==
|