@aztec/archiver 0.55.0 → 0.56.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.
Files changed (47) hide show
  1. package/dest/archiver/archiver.d.ts +4 -5
  2. package/dest/archiver/archiver.d.ts.map +1 -1
  3. package/dest/archiver/archiver.js +89 -110
  4. package/dest/archiver/archiver_store.d.ts +11 -17
  5. package/dest/archiver/archiver_store.d.ts.map +1 -1
  6. package/dest/archiver/archiver_store_test_suite.d.ts.map +1 -1
  7. package/dest/archiver/archiver_store_test_suite.js +1 -25
  8. package/dest/archiver/config.d.ts +0 -4
  9. package/dest/archiver/config.d.ts.map +1 -1
  10. package/dest/archiver/config.js +1 -6
  11. package/dest/archiver/data_retrieval.d.ts +33 -5
  12. package/dest/archiver/data_retrieval.d.ts.map +1 -1
  13. package/dest/archiver/data_retrieval.js +124 -15
  14. package/dest/archiver/kv_archiver_store/block_store.d.ts +2 -2
  15. package/dest/archiver/kv_archiver_store/block_store.d.ts.map +1 -1
  16. package/dest/archiver/kv_archiver_store/block_store.js +16 -10
  17. package/dest/archiver/kv_archiver_store/kv_archiver_store.d.ts +3 -15
  18. package/dest/archiver/kv_archiver_store/kv_archiver_store.d.ts.map +1 -1
  19. package/dest/archiver/kv_archiver_store/kv_archiver_store.js +12 -25
  20. package/dest/archiver/kv_archiver_store/message_store.d.ts +1 -0
  21. package/dest/archiver/kv_archiver_store/message_store.d.ts.map +1 -1
  22. package/dest/archiver/kv_archiver_store/message_store.js +11 -8
  23. package/dest/archiver/memory_archiver_store/memory_archiver_store.d.ts +3 -20
  24. package/dest/archiver/memory_archiver_store/memory_archiver_store.d.ts.map +1 -1
  25. package/dest/archiver/memory_archiver_store/memory_archiver_store.js +9 -28
  26. package/dest/index.d.ts +0 -1
  27. package/dest/index.d.ts.map +1 -1
  28. package/dest/index.js +1 -2
  29. package/package.json +10 -10
  30. package/src/archiver/archiver.ts +140 -156
  31. package/src/archiver/archiver_store.ts +12 -18
  32. package/src/archiver/archiver_store_test_suite.ts +1 -28
  33. package/src/archiver/config.ts +0 -10
  34. package/src/archiver/data_retrieval.ts +189 -29
  35. package/src/archiver/kv_archiver_store/block_store.ts +17 -10
  36. package/src/archiver/kv_archiver_store/kv_archiver_store.ts +11 -25
  37. package/src/archiver/kv_archiver_store/message_store.ts +9 -5
  38. package/src/archiver/memory_archiver_store/memory_archiver_store.ts +10 -32
  39. package/src/index.ts +0 -2
  40. package/dest/archiver/eth_log_handlers.d.ts +0 -59
  41. package/dest/archiver/eth_log_handlers.d.ts.map +0 -1
  42. package/dest/archiver/eth_log_handlers.js +0 -155
  43. package/dest/archiver/kv_archiver_store/block_body_store.d.ts +0 -34
  44. package/dest/archiver/kv_archiver_store/block_body_store.d.ts.map +0 -1
  45. package/dest/archiver/kv_archiver_store/block_body_store.js +0 -65
  46. package/src/archiver/eth_log_handlers.ts +0 -213
  47. package/src/archiver/kv_archiver_store/block_body_store.ts +0 -74
@@ -35,6 +35,8 @@ export declare class Archiver implements ArchiveSource {
35
35
  * A promise in which we will be continually fetching new L2 blocks.
36
36
  */
37
37
  private runningPromise?;
38
+ private rollup;
39
+ private inbox;
38
40
  /**
39
41
  * Creates a new instance of the Archiver.
40
42
  * @param publicClient - A client for interacting with the Ethereum node.
@@ -68,12 +70,9 @@ export declare class Archiver implements ArchiveSource {
68
70
  * @param blockUntilSynced - If true, blocks until the archiver has fully synced.
69
71
  */
70
72
  private sync;
73
+ private handleL1ToL2Messages;
71
74
  private updateLastProvenL2Block;
72
- /**
73
- * Emits as metrics the block number proven, who proved it, and how much time passed since it was submitted.
74
- * @param logs - The ProofVerified logs to emit metrics for, as collected from `retrieveL2ProofVerifiedEvents`.
75
- **/
76
- private emitProofVerifiedMetrics;
75
+ private handleL2blocks;
77
76
  /**
78
77
  * Extracts and stores contract classes out of ContractClassRegistered events emitted by the class registerer contract.
79
78
  * @param allLogs - All logs emitted in a bunch of blocks.
@@ -1 +1 @@
1
- {"version":3,"file":"archiver.d.ts","sourceRoot":"","sources":["../../src/archiver/archiver.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"archiver.d.ts","sourceRoot":"","sources":["../../src/archiver/archiver.ts"],"names":[],"mappings":"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"}
@@ -1,16 +1,15 @@
1
1
  import { ContractClassRegisteredEvent } from '@aztec/circuits.js';
2
2
  import { ContractInstanceDeployedEvent, PrivateFunctionBroadcastedEvent, UnconstrainedFunctionBroadcastedEvent, isValidPrivateFunctionMembershipProof, isValidUnconstrainedFunctionMembershipProof, } from '@aztec/circuits.js/contract';
3
3
  import { createEthereumChain } from '@aztec/ethereum';
4
- import { compactArray, unique } from '@aztec/foundation/collection';
5
4
  import { Fr } from '@aztec/foundation/fields';
6
5
  import { createDebugLogger } from '@aztec/foundation/log';
7
6
  import { RunningPromise } from '@aztec/foundation/running-promise';
8
7
  import { Timer } from '@aztec/foundation/timer';
8
+ import { InboxAbi, RollupAbi } from '@aztec/l1-artifacts';
9
9
  import { ClassRegistererAddress } from '@aztec/protocol-contracts/class-registerer';
10
10
  import groupBy from 'lodash.groupby';
11
- import { createPublicClient, http } from 'viem';
12
- import { retrieveBlockFromRollup, retrieveL1ToL2Messages, retrieveL2ProofVerifiedEvents } from './data_retrieval.js';
13
- import { getL1BlockTime } from './eth_log_handlers.js';
11
+ import { createPublicClient, getContract, http, } from 'viem';
12
+ import { retrieveBlockFromRollup, retrieveL1ToL2Messages } from './data_retrieval.js';
14
13
  import { ArchiverInstrumentation } from './instrumentation.js';
15
14
  /**
16
15
  * Pulls L2 blocks in a non-blocking manner and provides interface for their retrieval.
@@ -38,6 +37,16 @@ export class Archiver {
38
37
  this.instrumentation = instrumentation;
39
38
  this.l1StartBlock = l1StartBlock;
40
39
  this.log = log;
40
+ this.rollup = getContract({
41
+ address: rollupAddress.toString(),
42
+ abi: RollupAbi,
43
+ client: publicClient,
44
+ });
45
+ this.inbox = getContract({
46
+ address: inboxAddress.toString(),
47
+ abi: InboxAbi,
48
+ client: publicClient,
49
+ });
41
50
  }
42
51
  /**
43
52
  * Creates a new instance of the Archiver and blocks until it syncs from chain.
@@ -53,7 +62,13 @@ export class Archiver {
53
62
  transport: http(chain.rpcUrl),
54
63
  pollingInterval: config.viemPollingIntervalMS,
55
64
  });
56
- const archiver = new Archiver(publicClient, config.l1Contracts.rollupAddress, config.l1Contracts.inboxAddress, config.l1Contracts.registryAddress, archiverStore, config.archiverPollingIntervalMS, new ArchiverInstrumentation(telemetry), BigInt(config.archiverL1StartBlock));
65
+ const rollup = getContract({
66
+ address: config.l1Contracts.rollupAddress.toString(),
67
+ abi: RollupAbi,
68
+ client: publicClient,
69
+ });
70
+ const l1StartBlock = await rollup.read.L1_BLOCK_AT_GENESIS();
71
+ const archiver = new Archiver(publicClient, config.l1Contracts.rollupAddress, config.l1Contracts.inboxAddress, config.l1Contracts.registryAddress, archiverStore, config.archiverPollingIntervalMS, new ArchiverInstrumentation(telemetry), BigInt(l1StartBlock));
57
72
  await archiver.start(blockUntilSynced);
58
73
  return archiver;
59
74
  }
@@ -100,23 +115,8 @@ export class Archiver {
100
115
  *
101
116
  * This code does not handle reorgs.
102
117
  */
103
- const { blockBodiesSynchedTo = this.l1StartBlock, blocksSynchedTo = this.l1StartBlock, messagesSynchedTo = this.l1StartBlock, provenLogsSynchedTo = this.l1StartBlock, } = await this.store.getSynchPoint();
118
+ const { blocksSynchedTo = this.l1StartBlock, messagesSynchedTo = this.l1StartBlock, provenLogsSynchedTo = this.l1StartBlock, } = await this.store.getSynchPoint();
104
119
  const currentL1BlockNumber = await this.publicClient.getBlockNumber();
105
- if (currentL1BlockNumber <= blocksSynchedTo &&
106
- currentL1BlockNumber <= messagesSynchedTo &&
107
- currentL1BlockNumber <= blockBodiesSynchedTo &&
108
- currentL1BlockNumber <= provenLogsSynchedTo) {
109
- // chain hasn't moved forward
110
- // or it's been rolled back
111
- this.log.debug(`Nothing to sync`, {
112
- currentL1BlockNumber,
113
- blocksSynchedTo,
114
- messagesSynchedTo,
115
- provenLogsSynchedTo,
116
- blockBodiesSynchedTo,
117
- });
118
- return;
119
- }
120
120
  // ********** Ensuring Consistency of data pulled from L1 **********
121
121
  /**
122
122
  * There are a number of calls in this sync operation to L1 for retrieving
@@ -134,108 +134,87 @@ export class Archiver {
134
134
  * data up to the currentBlockNumber captured at the top of this function. We might want to improve on this
135
135
  * in future but for the time being it should give us the guarantees that we need
136
136
  */
137
+ await this.updateLastProvenL2Block(provenLogsSynchedTo, currentL1BlockNumber);
137
138
  // ********** Events that are processed per L1 block **********
139
+ await this.handleL1ToL2Messages(blockUntilSynced, messagesSynchedTo, currentL1BlockNumber);
138
140
  // ********** Events that are processed per L2 block **********
139
- const retrievedL1ToL2Messages = await retrieveL1ToL2Messages(this.publicClient, this.inboxAddress, blockUntilSynced, messagesSynchedTo + 1n, currentL1BlockNumber);
140
- if (retrievedL1ToL2Messages.retrievedData.length !== 0) {
141
- this.log.verbose(`Retrieved ${retrievedL1ToL2Messages.retrievedData.length} new L1 -> L2 messages between L1 blocks ${messagesSynchedTo + 1n} and ${currentL1BlockNumber}.`);
142
- }
143
- await this.store.addL1ToL2Messages(retrievedL1ToL2Messages);
144
- // Read all data from chain and then write to our stores at the end
145
- const nextExpectedL2BlockNum = BigInt((await this.store.getSynchedL2BlockNumber()) + 1);
146
- this.log.debug(`Retrieving blocks from ${blocksSynchedTo + 1n} to ${currentL1BlockNumber}`);
147
- const retrievedBlocks = await retrieveBlockFromRollup(this.publicClient, this.rollupAddress, blockUntilSynced, blocksSynchedTo + 1n, currentL1BlockNumber, nextExpectedL2BlockNum);
148
- // Add the body
149
- (retrievedBlocks.length ? this.log.verbose : this.log.debug)(`Retrieved ${retrievedBlocks.length || 'no'} new L2 blocks between L1 blocks ${blocksSynchedTo + 1n} and ${currentL1BlockNumber}.`);
150
- const lastProcessedL1BlockNumber = retrievedBlocks.length > 0 ? retrievedBlocks[retrievedBlocks.length - 1].l1.blockNumber : blocksSynchedTo;
151
- this.log.debug(`Processing retrieved blocks ${retrievedBlocks
152
- .map(b => b.data.number)
153
- .join(',')} with last processed L1 block ${lastProcessedL1BlockNumber}`);
154
- if (retrievedBlocks.length > 0) {
155
- await Promise.all(retrievedBlocks.map(block => {
156
- const noteEncryptedLogs = block.data.body.noteEncryptedLogs;
157
- const encryptedLogs = block.data.body.encryptedLogs;
158
- const unencryptedLogs = block.data.body.unencryptedLogs;
159
- return this.store.addLogs(noteEncryptedLogs, encryptedLogs, unencryptedLogs, block.data.number);
160
- }));
161
- // Unroll all logs emitted during the retrieved blocks and extract any contract classes and instances from them
162
- await Promise.all(retrievedBlocks.map(async (block) => {
163
- const blockLogs = block.data.body.txEffects
164
- .flatMap(txEffect => (txEffect ? [txEffect.unencryptedLogs] : []))
165
- .flatMap(txLog => txLog.unrollLogs());
166
- await this.storeRegisteredContractClasses(blockLogs, block.data.number);
167
- await this.storeDeployedContractInstances(blockLogs, block.data.number);
168
- await this.storeBroadcastedIndividualFunctions(blockLogs, block.data.number);
169
- }));
170
- const timer = new Timer();
171
- await this.store.addBlockBodies({
172
- lastProcessedL1BlockNumber: lastProcessedL1BlockNumber,
173
- retrievedData: retrievedBlocks.map(b => b.data.body),
174
- });
175
- await this.store.addBlocks(retrievedBlocks);
176
- this.instrumentation.processNewBlocks(timer.ms() / retrievedBlocks.length, retrievedBlocks.map(b => b.data));
177
- const lastL2BlockNumber = retrievedBlocks[retrievedBlocks.length - 1].data.number;
178
- this.log.verbose(`Processed ${retrievedBlocks.length} new L2 blocks up to ${lastL2BlockNumber}`);
179
- }
180
- // Fetch the logs for proven blocks in the block range and update the last proven block number.
181
- if (currentL1BlockNumber > provenLogsSynchedTo) {
182
- await this.updateLastProvenL2Block(provenLogsSynchedTo + 1n, currentL1BlockNumber);
141
+ await this.handleL2blocks(blockUntilSynced, blocksSynchedTo, currentL1BlockNumber);
142
+ }
143
+ async handleL1ToL2Messages(blockUntilSynced, messagesSynchedTo, currentL1BlockNumber) {
144
+ if (currentL1BlockNumber <= messagesSynchedTo) {
145
+ return;
183
146
  }
184
- if (retrievedBlocks.length > 0 || blockUntilSynced) {
185
- (blockUntilSynced ? this.log.info : this.log.verbose)(`Synced to L1 block ${currentL1BlockNumber}`);
147
+ const retrievedL1ToL2Messages = await retrieveL1ToL2Messages(this.inbox, blockUntilSynced, messagesSynchedTo + 1n, currentL1BlockNumber);
148
+ if (retrievedL1ToL2Messages.retrievedData.length === 0) {
149
+ await this.store.setMessageSynchedL1BlockNumber(currentL1BlockNumber);
150
+ this.log.verbose(`Retrieved no new L1 -> L2 messages between L1 blocks ${messagesSynchedTo + 1n} and ${currentL1BlockNumber}.`);
151
+ return;
186
152
  }
153
+ await this.store.addL1ToL2Messages(retrievedL1ToL2Messages);
154
+ this.log.verbose(`Retrieved ${retrievedL1ToL2Messages.retrievedData.length} new L1 -> L2 messages between L1 blocks ${messagesSynchedTo + 1n} and ${currentL1BlockNumber}.`);
187
155
  }
188
- async updateLastProvenL2Block(fromBlock, toBlock) {
189
- const logs = await retrieveL2ProofVerifiedEvents(this.publicClient, this.rollupAddress, fromBlock, toBlock);
190
- const lastLog = logs[logs.length - 1];
191
- if (!lastLog) {
156
+ async updateLastProvenL2Block(provenSynchedTo, currentL1BlockNumber) {
157
+ if (currentL1BlockNumber <= provenSynchedTo) {
192
158
  return;
193
159
  }
194
- const provenBlockNumber = lastLog.l2BlockNumber;
195
- if (!provenBlockNumber) {
196
- throw new Error(`Missing argument blockNumber from L2ProofVerified event`);
197
- }
198
- await this.emitProofVerifiedMetrics(logs);
199
- const currentProvenBlockNumber = await this.store.getProvenL2BlockNumber();
200
- if (provenBlockNumber > currentProvenBlockNumber) {
201
- // Update the last proven block number
202
- this.log.verbose(`Updated last proven block number from ${currentProvenBlockNumber} to ${provenBlockNumber}`);
160
+ const provenBlockNumber = await this.rollup.read.getProvenBlockNumber();
161
+ if (provenBlockNumber) {
203
162
  await this.store.setProvenL2BlockNumber({
204
163
  retrievedData: Number(provenBlockNumber),
205
- lastProcessedL1BlockNumber: lastLog.l1BlockNumber,
206
- });
207
- this.instrumentation.updateLastProvenBlock(Number(provenBlockNumber));
208
- }
209
- else {
210
- // We set the last processed L1 block number to the last L1 block number in the range to avoid duplicate processing
211
- await this.store.setProvenL2BlockNumber({
212
- retrievedData: Number(currentProvenBlockNumber),
213
- lastProcessedL1BlockNumber: lastLog.l1BlockNumber,
164
+ lastProcessedL1BlockNumber: currentL1BlockNumber,
214
165
  });
215
166
  }
216
167
  }
217
- /**
218
- * Emits as metrics the block number proven, who proved it, and how much time passed since it was submitted.
219
- * @param logs - The ProofVerified logs to emit metrics for, as collected from `retrieveL2ProofVerifiedEvents`.
220
- **/
221
- async emitProofVerifiedMetrics(logs) {
222
- if (!logs.length || !this.instrumentation.isEnabled()) {
168
+ async handleL2blocks(blockUntilSynced, blocksSynchedTo, currentL1BlockNumber) {
169
+ if (currentL1BlockNumber <= blocksSynchedTo) {
223
170
  return;
224
171
  }
225
- const l1BlockTimes = new Map(await Promise.all(unique(logs.map(log => log.l1BlockNumber)).map(async (blockNumber) => [blockNumber, await getL1BlockTime(this.publicClient, blockNumber)])));
226
- // Collect L2 block times for all the blocks verified, this is the time in which the block proven was
227
- // originally submitted to L1, using the L1 timestamp of the transaction.
228
- const getL2BlockTime = async (blockNumber) => (await this.store.getBlocks(Number(blockNumber), 1))[0]?.l1.timestamp;
229
- const l2BlockTimes = new Map(await Promise.all(unique(logs.map(log => log.l2BlockNumber)).map(async (blockNumber) => [blockNumber, await getL2BlockTime(blockNumber)])));
230
- // Emit the prover id and the time difference between block submission and proof.
231
- this.instrumentation.processProofsVerified(compactArray(logs.map(log => {
232
- const l1BlockTime = l1BlockTimes.get(log.l1BlockNumber);
233
- const l2BlockTime = l2BlockTimes.get(log.l2BlockNumber);
234
- if (!l2BlockTime) {
235
- return undefined;
236
- }
237
- return { ...log, delay: l1BlockTime - l2BlockTime, proverId: log.proverId.toString() };
238
- })));
172
+ const lastBlock = await this.getBlock(-1);
173
+ const [, , pendingBlockNumber, pendingArchive, archiveOfMyBlock] = await this.rollup.read.status([
174
+ BigInt(lastBlock?.number ?? 0),
175
+ ]);
176
+ const noBlocksButInitial = lastBlock === undefined && pendingBlockNumber == 0n;
177
+ const noBlockSinceLast = lastBlock &&
178
+ pendingBlockNumber === BigInt(lastBlock.number) &&
179
+ pendingArchive === lastBlock.archive.root.toString();
180
+ if (noBlocksButInitial || noBlockSinceLast) {
181
+ await this.store.setBlockSynchedL1BlockNumber(currentL1BlockNumber);
182
+ this.log.verbose(`No blocks to retrieve from ${blocksSynchedTo + 1n} to ${currentL1BlockNumber}`);
183
+ return;
184
+ }
185
+ if (lastBlock && archiveOfMyBlock !== lastBlock.archive.root.toString()) {
186
+ // @todo Either `prune` have been called, or L1 have re-orged deep enough to remove a block.
187
+ // Issue#8620 and Issue#8621
188
+ }
189
+ this.log.debug(`Retrieving blocks from ${blocksSynchedTo + 1n} to ${currentL1BlockNumber}`);
190
+ const retrievedBlocks = await retrieveBlockFromRollup(this.rollup, this.publicClient, blockUntilSynced, blocksSynchedTo + 1n, currentL1BlockNumber, this.log);
191
+ if (retrievedBlocks.length === 0) {
192
+ await this.store.setBlockSynchedL1BlockNumber(currentL1BlockNumber);
193
+ this.log.verbose(`Retrieved no new blocks from ${blocksSynchedTo + 1n} to ${currentL1BlockNumber}`);
194
+ return;
195
+ }
196
+ this.log.debug(`Retrieved ${retrievedBlocks.length} new L2 blocks between L1 blocks ${blocksSynchedTo + 1n} and ${currentL1BlockNumber}.`);
197
+ const lastProcessedL1BlockNumber = retrievedBlocks[retrievedBlocks.length - 1].l1.blockNumber;
198
+ this.log.debug(`Processing retrieved blocks ${retrievedBlocks
199
+ .map(b => b.data.number)
200
+ .join(',')} with last processed L1 block ${lastProcessedL1BlockNumber}`);
201
+ await Promise.all(retrievedBlocks.map(block => {
202
+ return this.store.addLogs(block.data.body.noteEncryptedLogs, block.data.body.encryptedLogs, block.data.body.unencryptedLogs, block.data.number);
203
+ }));
204
+ // Unroll all logs emitted during the retrieved blocks and extract any contract classes and instances from them
205
+ await Promise.all(retrievedBlocks.map(async (block) => {
206
+ const blockLogs = block.data.body.txEffects
207
+ .flatMap(txEffect => (txEffect ? [txEffect.unencryptedLogs] : []))
208
+ .flatMap(txLog => txLog.unrollLogs());
209
+ await this.storeRegisteredContractClasses(blockLogs, block.data.number);
210
+ await this.storeDeployedContractInstances(blockLogs, block.data.number);
211
+ await this.storeBroadcastedIndividualFunctions(blockLogs, block.data.number);
212
+ }));
213
+ const timer = new Timer();
214
+ await this.store.addBlocks(retrievedBlocks);
215
+ this.instrumentation.processNewBlocks(timer.ms() / retrievedBlocks.length, retrievedBlocks.map(b => b.data));
216
+ const lastL2BlockNumber = retrievedBlocks[retrievedBlocks.length - 1].data.number;
217
+ this.log.verbose(`Processed ${retrievedBlocks.length} new L2 blocks up to ${lastL2BlockNumber}`);
239
218
  }
240
219
  /**
241
220
  * Extracts and stores contract classes out of ContractClassRegistered events emitted by the class registerer contract.
@@ -418,4 +397,4 @@ export class Archiver {
418
397
  return this.store.getContractArtifact(address);
419
398
  }
420
399
  }
421
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXJjaGl2ZXIuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvYXJjaGl2ZXIvYXJjaGl2ZXIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBZUEsT0FBTyxFQUFFLDRCQUE0QixFQUF5QixNQUFNLG9CQUFvQixDQUFDO0FBQ3pGLE9BQU8sRUFDTCw2QkFBNkIsRUFDN0IsK0JBQStCLEVBQy9CLHFDQUFxQyxFQUNyQyxxQ0FBcUMsRUFDckMsMkNBQTJDLEdBQzVDLE1BQU0sNkJBQTZCLENBQUM7QUFDckMsT0FBTyxFQUFFLG1CQUFtQixFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFHdEQsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLEVBQUUsTUFBTSw4QkFBOEIsQ0FBQztBQUVwRSxPQUFPLEVBQUUsRUFBRSxFQUFFLE1BQU0sMEJBQTBCLENBQUM7QUFDOUMsT0FBTyxFQUFvQixpQkFBaUIsRUFBRSxNQUFNLHVCQUF1QixDQUFDO0FBQzVFLE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSxtQ0FBbUMsQ0FBQztBQUNuRSxPQUFPLEVBQUUsS0FBSyxFQUFFLE1BQU0seUJBQXlCLENBQUM7QUFDaEQsT0FBTyxFQUFFLHNCQUFzQixFQUFFLE1BQU0sNENBQTRDLENBQUM7QUFXcEYsT0FBTyxPQUFPLE1BQU0sZ0JBQWdCLENBQUM7QUFDckMsT0FBTyxFQUFxRCxrQkFBa0IsRUFBRSxJQUFJLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFJbkcsT0FBTyxFQUFFLHVCQUF1QixFQUFFLHNCQUFzQixFQUFFLDZCQUE2QixFQUFFLE1BQU0scUJBQXFCLENBQUM7QUFDckgsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLHVCQUF1QixDQUFDO0FBQ3ZELE9BQU8sRUFBRSx1QkFBdUIsRUFBRSxNQUFNLHNCQUFzQixDQUFDO0FBUS9EOzs7O0dBSUc7QUFDSCxNQUFNLE9BQU8sUUFBUTtJQU1uQjs7Ozs7Ozs7O09BU0c7SUFDSCxZQUNtQixZQUFnRCxFQUNoRCxhQUF5QixFQUN6QixZQUF3QixFQUN4QixlQUEyQixFQUMzQixLQUF3QixFQUN4QixvQkFBb0IsS0FBTSxFQUMxQixlQUF3QyxFQUN4QyxlQUF1QixFQUFFLEVBQ3pCLE1BQW1CLGlCQUFpQixDQUFDLGdCQUFnQixDQUFDO1FBUnRELGlCQUFZLEdBQVosWUFBWSxDQUFvQztRQUNoRCxrQkFBYSxHQUFiLGFBQWEsQ0FBWTtRQUN6QixpQkFBWSxHQUFaLFlBQVksQ0FBWTtRQUN4QixvQkFBZSxHQUFmLGVBQWUsQ0FBWTtRQUMzQixVQUFLLEdBQUwsS0FBSyxDQUFtQjtRQUN4QixzQkFBaUIsR0FBakIsaUJBQWlCLENBQVM7UUFDMUIsb0JBQWUsR0FBZixlQUFlLENBQXlCO1FBQ3hDLGlCQUFZLEdBQVosWUFBWSxDQUFhO1FBQ3pCLFFBQUcsR0FBSCxHQUFHLENBQW1EO0lBQ3RFLENBQUM7SUFFSjs7Ozs7O09BTUc7SUFDSSxNQUFNLENBQUMsS0FBSyxDQUFDLGFBQWEsQ0FDL0IsTUFBc0IsRUFDdEIsYUFBZ0MsRUFDaEMsU0FBMEIsRUFDMUIsZ0JBQWdCLEdBQUcsSUFBSTtRQUV2QixNQUFNLEtBQUssR0FBRyxtQkFBbUIsQ0FBQyxNQUFNLENBQUMsUUFBUSxFQUFFLE1BQU0sQ0FBQyxTQUFTLENBQUMsQ0FBQztRQUNyRSxNQUFNLFlBQVksR0FBRyxrQkFBa0IsQ0FBQztZQUN0QyxLQUFLLEVBQUUsS0FBSyxDQUFDLFNBQVM7WUFDdEIsU0FBUyxFQUFFLElBQUksQ0FBQyxLQUFLLENBQUMsTUFBTSxDQUFDO1lBQzdCLGVBQWUsRUFBRSxNQUFNLENBQUMscUJBQXFCO1NBQzlDLENBQUMsQ0FBQztRQUVILE1BQU0sUUFBUSxHQUFHLElBQUksUUFBUSxDQUMzQixZQUFZLEVBQ1osTUFBTSxDQUFDLFdBQVcsQ0FBQyxhQUFhLEVBQ2hDLE1BQU0sQ0FBQyxXQUFXLENBQUMsWUFBWSxFQUMvQixNQUFNLENBQUMsV0FBVyxDQUFDLGVBQWUsRUFDbEMsYUFBYSxFQUNiLE1BQU0sQ0FBQyx5QkFBeUIsRUFDaEMsSUFBSSx1QkFBdUIsQ0FBQyxTQUFTLENBQUMsRUFDdEMsTUFBTSxDQUFDLE1BQU0sQ0FBQyxvQkFBb0IsQ0FBQyxDQUNwQyxDQUFDO1FBQ0YsTUFBTSxRQUFRLENBQUMsS0FBSyxDQUFDLGdCQUFnQixDQUFDLENBQUM7UUFDdkMsT0FBTyxRQUFRLENBQUM7SUFDbEIsQ0FBQztJQUVEOzs7T0FHRztJQUNJLEtBQUssQ0FBQyxLQUFLLENBQUMsZ0JBQXlCO1FBQzFDLElBQUksSUFBSSxDQUFDLGNBQWMsRUFBRSxDQUFDO1lBQ3hCLE1BQU0sSUFBSSxLQUFLLENBQUMsNkJBQTZCLENBQUMsQ0FBQztRQUNqRCxDQUFDO1FBRUQsSUFBSSxnQkFBZ0IsRUFBRSxDQUFDO1lBQ3JCLElBQUksQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLG9EQUFvRCxJQUFJLENBQUMsYUFBYSxDQUFDLFFBQVEsRUFBRSxFQUFFLENBQUMsQ0FBQztZQUNuRyxNQUFNLElBQUksQ0FBQyxJQUFJLENBQUMsZ0JBQWdCLENBQUMsQ0FBQztRQUNwQyxDQUFDO1FBRUQsSUFBSSxDQUFDLGNBQWMsR0FBRyxJQUFJLGNBQWMsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxJQUFJLENBQUMsUUFBUSxFQUFFLEVBQUUsSUFBSSxDQUFDLGlCQUFpQixDQUFDLENBQUM7UUFDeEYsSUFBSSxDQUFDLGNBQWMsQ0FBQyxLQUFLLEVBQUUsQ0FBQztJQUM5QixDQUFDO0lBRUQ7O09BRUc7SUFDSyxLQUFLLENBQUMsUUFBUTtRQUNwQixJQUFJLENBQUM7WUFDSCxNQUFNLElBQUksQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUM7UUFDekIsQ0FBQztRQUFDLE9BQU8sS0FBSyxFQUFFLENBQUM7WUFDZixJQUFJLENBQUMsR0FBRyxDQUFDLEtBQUssQ0FBQyx3QkFBd0IsRUFBRSxLQUFLLENBQUMsQ0FBQztRQUNsRCxDQUFDO0lBQ0gsQ0FBQztJQUVEOzs7T0FHRztJQUNLLEtBQUssQ0FBQyxJQUFJLENBQUMsZ0JBQXlCO1FBQzFDOzs7Ozs7Ozs7OztXQVdHO1FBQ0gsTUFBTSxFQUNKLG9CQUFvQixHQUFHLElBQUksQ0FBQyxZQUFZLEVBQ3hDLGVBQWUsR0FBRyxJQUFJLENBQUMsWUFBWSxFQUNuQyxpQkFBaUIsR0FBRyxJQUFJLENBQUMsWUFBWSxFQUNyQyxtQkFBbUIsR0FBRyxJQUFJLENBQUMsWUFBWSxHQUN4QyxHQUFHLE1BQU0sSUFBSSxDQUFDLEtBQUssQ0FBQyxhQUFhLEVBQUUsQ0FBQztRQUNyQyxNQUFNLG9CQUFvQixHQUFHLE1BQU0sSUFBSSxDQUFDLFlBQVksQ0FBQyxjQUFjLEVBQUUsQ0FBQztRQUV0RSxJQUNFLG9CQUFvQixJQUFJLGVBQWU7WUFDdkMsb0JBQW9CLElBQUksaUJBQWlCO1lBQ3pDLG9CQUFvQixJQUFJLG9CQUFvQjtZQUM1QyxvQkFBb0IsSUFBSSxtQkFBbUIsRUFDM0MsQ0FBQztZQUNELDZCQUE2QjtZQUM3QiwyQkFBMkI7WUFDM0IsSUFBSSxDQUFDLEdBQUcsQ0FBQyxLQUFLLENBQUMsaUJBQWlCLEVBQUU7Z0JBQ2hDLG9CQUFvQjtnQkFDcEIsZUFBZTtnQkFDZixpQkFBaUI7Z0JBQ2pCLG1CQUFtQjtnQkFDbkIsb0JBQW9CO2FBQ3JCLENBQUMsQ0FBQztZQUNILE9BQU87UUFDVCxDQUFDO1FBRUQsb0VBQW9FO1FBRXBFOzs7Ozs7Ozs7Ozs7Ozs7V0FlRztRQUVILCtEQUErRDtRQUUvRCwrREFBK0Q7UUFFL0QsTUFBTSx1QkFBdUIsR0FBRyxNQUFNLHNCQUFzQixDQUMxRCxJQUFJLENBQUMsWUFBWSxFQUNqQixJQUFJLENBQUMsWUFBWSxFQUNqQixnQkFBZ0IsRUFDaEIsaUJBQWlCLEdBQUcsRUFBRSxFQUN0QixvQkFBb0IsQ0FDckIsQ0FBQztRQUVGLElBQUksdUJBQXVCLENBQUMsYUFBYSxDQUFDLE1BQU0sS0FBSyxDQUFDLEVBQUUsQ0FBQztZQUN2RCxJQUFJLENBQUMsR0FBRyxDQUFDLE9BQU8sQ0FDZCxhQUFhLHVCQUF1QixDQUFDLGFBQWEsQ0FBQyxNQUFNLDRDQUN2RCxpQkFBaUIsR0FBRyxFQUN0QixRQUFRLG9CQUFvQixHQUFHLENBQ2hDLENBQUM7UUFDSixDQUFDO1FBRUQsTUFBTSxJQUFJLENBQUMsS0FBSyxDQUFDLGlCQUFpQixDQUFDLHVCQUF1QixDQUFDLENBQUM7UUFFNUQsbUVBQW1FO1FBQ25FLE1BQU0sc0JBQXNCLEdBQUcsTUFBTSxDQUFDLENBQUMsTUFBTSxJQUFJLENBQUMsS0FBSyxDQUFDLHVCQUF1QixFQUFFLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQztRQUV4RixJQUFJLENBQUMsR0FBRyxDQUFDLEtBQUssQ0FBQywwQkFBMEIsZUFBZSxHQUFHLEVBQUUsT0FBTyxvQkFBb0IsRUFBRSxDQUFDLENBQUM7UUFDNUYsTUFBTSxlQUFlLEdBQUcsTUFBTSx1QkFBdUIsQ0FDbkQsSUFBSSxDQUFDLFlBQVksRUFDakIsSUFBSSxDQUFDLGFBQWEsRUFDbEIsZ0JBQWdCLEVBQ2hCLGVBQWUsR0FBRyxFQUFFLEVBQ3BCLG9CQUFvQixFQUNwQixzQkFBc0IsQ0FDdkIsQ0FBQztRQUVGLGVBQWU7UUFFZixDQUFDLGVBQWUsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLEtBQUssQ0FBQyxDQUMxRCxhQUFhLGVBQWUsQ0FBQyxNQUFNLElBQUksSUFBSSxvQ0FDekMsZUFBZSxHQUFHLEVBQ3BCLFFBQVEsb0JBQW9CLEdBQUcsQ0FDaEMsQ0FBQztRQUVGLE1BQU0sMEJBQTBCLEdBQzlCLGVBQWUsQ0FBQyxNQUFNLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxlQUFlLENBQUMsZUFBZSxDQUFDLE1BQU0sR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsV0FBVyxDQUFDLENBQUMsQ0FBQyxlQUFlLENBQUM7UUFFNUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxLQUFLLENBQ1osK0JBQStCLGVBQWU7YUFDM0MsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUM7YUFDdkIsSUFBSSxDQUFDLEdBQUcsQ0FBQyxpQ0FBaUMsMEJBQTBCLEVBQUUsQ0FDMUUsQ0FBQztRQUVGLElBQUksZUFBZSxDQUFDLE1BQU0sR0FBRyxDQUFDLEVBQUUsQ0FBQztZQUMvQixNQUFNLE9BQU8sQ0FBQyxHQUFHLENBQ2YsZUFBZSxDQUFDLEdBQUcsQ0FBQyxLQUFLLENBQUMsRUFBRTtnQkFDMUIsTUFBTSxpQkFBaUIsR0FBRyxLQUFLLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxpQkFBaUIsQ0FBQztnQkFDNUQsTUFBTSxhQUFhLEdBQUcsS0FBSyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsYUFBYSxDQUFDO2dCQUNwRCxNQUFNLGVBQWUsR0FBRyxLQUFLLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxlQUFlLENBQUM7Z0JBQ3hELE9BQU8sSUFBSSxDQUFDLEtBQUssQ0FBQyxPQUFPLENBQUMsaUJBQWlCLEVBQUUsYUFBYSxFQUFFLGVBQWUsRUFBRSxLQUFLLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDO1lBQ2xHLENBQUMsQ0FBQyxDQUNILENBQUM7WUFFRiwrR0FBK0c7WUFDL0csTUFBTSxPQUFPLENBQUMsR0FBRyxDQUNmLGVBQWUsQ0FBQyxHQUFHLENBQUMsS0FBSyxFQUFDLEtBQUssRUFBQyxFQUFFO2dCQUNoQyxNQUFNLFNBQVMsR0FBRyxLQUFLLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxTQUFTO3FCQUN4QyxPQUFPLENBQUMsUUFBUSxDQUFDLEVBQUUsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsZUFBZSxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDO3FCQUNqRSxPQUFPLENBQUMsS0FBSyxDQUFDLEVBQUUsQ0FBQyxLQUFLLENBQUMsVUFBVSxFQUFFLENBQUMsQ0FBQztnQkFDeEMsTUFBTSxJQUFJLENBQUMsOEJBQThCLENBQUMsU0FBUyxFQUFFLEtBQUssQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUM7Z0JBQ3hFLE1BQU0sSUFBSSxDQUFDLDhCQUE4QixDQUFDLFNBQVMsRUFBRSxLQUFLLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDO2dCQUN4RSxNQUFNLElBQUksQ0FBQyxtQ0FBbUMsQ0FBQyxTQUFTLEVBQUUsS0FBSyxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQztZQUMvRSxDQUFDLENBQUMsQ0FDSCxDQUFDO1lBRUYsTUFBTSxLQUFLLEdBQUcsSUFBSSxLQUFLLEVBQUUsQ0FBQztZQUMxQixNQUFNLElBQUksQ0FBQyxLQUFLLENBQUMsY0FBYyxDQUFDO2dCQUM5QiwwQkFBMEIsRUFBRSwwQkFBMEI7Z0JBQ3RELGFBQWEsRUFBRSxlQUFlLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUM7YUFDckQsQ0FBQyxDQUFDO1lBQ0gsTUFBTSxJQUFJLENBQUMsS0FBSyxDQUFDLFNBQVMsQ0FBQyxlQUFlLENBQUMsQ0FBQztZQUM1QyxJQUFJLENBQUMsZUFBZSxDQUFDLGdCQUFnQixDQUNuQyxLQUFLLENBQUMsRUFBRSxFQUFFLEdBQUcsZUFBZSxDQUFDLE1BQU0sRUFDbkMsZUFBZSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FDakMsQ0FBQztZQUNGLE1BQU0saUJBQWlCLEdBQUcsZUFBZSxDQUFDLGVBQWUsQ0FBQyxNQUFNLEdBQUcsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQztZQUNsRixJQUFJLENBQUMsR0FBRyxDQUFDLE9BQU8sQ0FBQyxhQUFhLGVBQWUsQ0FBQyxNQUFNLHdCQUF3QixpQkFBaUIsRUFBRSxDQUFDLENBQUM7UUFDbkcsQ0FBQztRQUVELCtGQUErRjtRQUMvRixJQUFJLG9CQUFvQixHQUFHLG1CQUFtQixFQUFFLENBQUM7WUFDL0MsTUFBTSxJQUFJLENBQUMsdUJBQXVCLENBQUMsbUJBQW1CLEdBQUcsRUFBRSxFQUFFLG9CQUFvQixDQUFDLENBQUM7UUFDckYsQ0FBQztRQUVELElBQUksZUFBZSxDQUFDLE1BQU0sR0FBRyxDQUFDLElBQUksZ0JBQWdCLEVBQUUsQ0FBQztZQUNuRCxDQUFDLGdCQUFnQixDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxPQUFPLENBQUMsQ0FBQyxzQkFBc0Isb0JBQW9CLEVBQUUsQ0FBQyxDQUFDO1FBQ3RHLENBQUM7SUFDSCxDQUFDO0lBRU8sS0FBSyxDQUFDLHVCQUF1QixDQUFDLFNBQWlCLEVBQUUsT0FBZTtRQUN0RSxNQUFNLElBQUksR0FBRyxNQUFNLDZCQUE2QixDQUFDLElBQUksQ0FBQyxZQUFZLEVBQUUsSUFBSSxDQUFDLGFBQWEsRUFBRSxTQUFTLEVBQUUsT0FBTyxDQUFDLENBQUM7UUFDNUcsTUFBTSxPQUFPLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyxNQUFNLEdBQUcsQ0FBQyxDQUFDLENBQUM7UUFDdEMsSUFBSSxDQUFDLE9BQU8sRUFBRSxDQUFDO1lBQ2IsT0FBTztRQUNULENBQUM7UUFFRCxNQUFNLGlCQUFpQixHQUFHLE9BQU8sQ0FBQyxhQUFhLENBQUM7UUFDaEQsSUFBSSxDQUFDLGlCQUFpQixFQUFFLENBQUM7WUFDdkIsTUFBTSxJQUFJLEtBQUssQ0FBQyx5REFBeUQsQ0FBQyxDQUFDO1FBQzdFLENBQUM7UUFFRCxNQUFNLElBQUksQ0FBQyx3QkFBd0IsQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUUxQyxNQUFNLHdCQUF3QixHQUFHLE1BQU0sSUFBSSxDQUFDLEtBQUssQ0FBQyxzQkFBc0IsRUFBRSxDQUFDO1FBQzNFLElBQUksaUJBQWlCLEdBQUcsd0JBQXdCLEVBQUUsQ0FBQztZQUNqRCxzQ0FBc0M7WUFDdEMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxPQUFPLENBQUMseUNBQXlDLHdCQUF3QixPQUFPLGlCQUFpQixFQUFFLENBQUMsQ0FBQztZQUM5RyxNQUFNLElBQUksQ0FBQyxLQUFLLENBQUMsc0JBQXNCLENBQUM7Z0JBQ3RDLGFBQWEsRUFBRSxNQUFNLENBQUMsaUJBQWlCLENBQUM7Z0JBQ3hDLDBCQUEwQixFQUFFLE9BQU8sQ0FBQyxhQUFhO2FBQ2xELENBQUMsQ0FBQztZQUNILElBQUksQ0FBQyxlQUFlLENBQUMscUJBQXFCLENBQUMsTUFBTSxDQUFDLGlCQUFpQixDQUFDLENBQUMsQ0FBQztRQUN4RSxDQUFDO2FBQU0sQ0FBQztZQUNOLG1IQUFtSDtZQUNuSCxNQUFNLElBQUksQ0FBQyxLQUFLLENBQUMsc0JBQXNCLENBQUM7Z0JBQ3RDLGFBQWEsRUFBRSxNQUFNLENBQUMsd0JBQXdCLENBQUM7Z0JBQy9DLDBCQUEwQixFQUFFLE9BQU8sQ0FBQyxhQUFhO2FBQ2xELENBQUMsQ0FBQztRQUNMLENBQUM7SUFDSCxDQUFDO0lBRUQ7OztRQUdJO0lBQ0ksS0FBSyxDQUFDLHdCQUF3QixDQUFDLElBQXNFO1FBQzNHLElBQUksQ0FBQyxJQUFJLENBQUMsTUFBTSxJQUFJLENBQUMsSUFBSSxDQUFDLGVBQWUsQ0FBQyxTQUFTLEVBQUUsRUFBRSxDQUFDO1lBQ3RELE9BQU87UUFDVCxDQUFDO1FBRUQsTUFBTSxZQUFZLEdBQUcsSUFBSSxHQUFHLENBQzFCLE1BQU0sT0FBTyxDQUFDLEdBQUcsQ0FDZixNQUFNLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxhQUFhLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FDNUMsS0FBSyxFQUFDLFdBQVcsRUFBQyxFQUFFLENBQUMsQ0FBQyxXQUFXLEVBQUUsTUFBTSxjQUFjLENBQUMsSUFBSSxDQUFDLFlBQVksRUFBRSxXQUFXLENBQUMsQ0FBVSxDQUNsRyxDQUNGLENBQ0YsQ0FBQztRQUVGLHFHQUFxRztRQUNyRyx5RUFBeUU7UUFDekUsTUFBTSxjQUFjLEdBQUcsS0FBSyxFQUFFLFdBQW1CLEVBQUUsRUFBRSxDQUNuRCxDQUFDLE1BQU0sSUFBSSxDQUFDLEtBQUssQ0FBQyxTQUFTLENBQUMsTUFBTSxDQUFDLFdBQVcsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLFNBQVMsQ0FBQztRQUV4RSxNQUFNLFlBQVksR0FBRyxJQUFJLEdBQUcsQ0FDMUIsTUFBTSxPQUFPLENBQUMsR0FBRyxDQUNmLE1BQU0sQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxDQUFDLGFBQWEsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUM1QyxLQUFLLEVBQUMsV0FBVyxFQUFDLEVBQUUsQ0FBQyxDQUFDLFdBQVcsRUFBRSxNQUFNLGNBQWMsQ0FBQyxXQUFXLENBQUMsQ0FBVSxDQUMvRSxDQUNGLENBQ0YsQ0FBQztRQUVGLGlGQUFpRjtRQUNqRixJQUFJLENBQUMsZUFBZSxDQUFDLHFCQUFxQixDQUN4QyxZQUFZLENBQ1YsSUFBSSxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsRUFBRTtZQUNiLE1BQU0sV0FBVyxHQUFHLFlBQVksQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLGFBQWEsQ0FBRSxDQUFDO1lBQ3pELE1BQU0sV0FBVyxHQUFHLFlBQVksQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLGFBQWEsQ0FBQyxDQUFDO1lBQ3hELElBQUksQ0FBQyxXQUFXLEVBQUUsQ0FBQztnQkFDakIsT0FBTyxTQUFTLENBQUM7WUFDbkIsQ0FBQztZQUNELE9BQU8sRUFBRSxHQUFHLEdBQUcsRUFBRSxLQUFLLEVBQUUsV0FBVyxHQUFHLFdBQVcsRUFBRSxRQUFRLEVBQUUsR0FBRyxDQUFDLFFBQVEsQ0FBQyxRQUFRLEVBQUUsRUFBRSxDQUFDO1FBQ3pGLENBQUMsQ0FBQyxDQUNILENBQ0YsQ0FBQztJQUNKLENBQUM7SUFFRDs7O09BR0c7SUFDSyxLQUFLLENBQUMsOEJBQThCLENBQUMsT0FBMkIsRUFBRSxRQUFnQjtRQUN4RixNQUFNLGVBQWUsR0FBRyw0QkFBNEIsQ0FBQyxRQUFRLENBQUMsT0FBTyxFQUFFLHNCQUFzQixDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQ3JHLENBQUMsQ0FBQyxxQkFBcUIsRUFBRSxDQUMxQixDQUFDO1FBQ0YsSUFBSSxlQUFlLENBQUMsTUFBTSxHQUFHLENBQUMsRUFBRSxDQUFDO1lBQy9CLGVBQWUsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLE9BQU8sQ0FBQyw4QkFBOEIsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxRQUFRLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQztZQUNoRyxNQUFNLElBQUksQ0FBQyxLQUFLLENBQUMsa0JBQWtCLENBQUMsZUFBZSxFQUFFLFFBQVEsQ0FBQyxDQUFDO1FBQ2pFLENBQUM7SUFDSCxDQUFDO0lBRUQ7OztPQUdHO0lBQ0ssS0FBSyxDQUFDLDhCQUE4QixDQUFDLE9BQTJCLEVBQUUsUUFBZ0I7UUFDeEYsTUFBTSxpQkFBaUIsR0FBRyw2QkFBNkIsQ0FBQyxRQUFRLENBQUMsT0FBTyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLGtCQUFrQixFQUFFLENBQUMsQ0FBQztRQUMzRyxJQUFJLGlCQUFpQixDQUFDLE1BQU0sR0FBRyxDQUFDLEVBQUUsQ0FBQztZQUNqQyxpQkFBaUIsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLE9BQU8sQ0FBQyxnQ0FBZ0MsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxRQUFRLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQztZQUN6RyxNQUFNLElBQUksQ0FBQyxLQUFLLENBQUMsb0JBQW9CLENBQUMsaUJBQWlCLEVBQUUsUUFBUSxDQUFDLENBQUM7UUFDckUsQ0FBQztJQUNILENBQUM7SUFFTyxLQUFLLENBQUMsbUNBQW1DLENBQUMsT0FBMkIsRUFBRSxTQUFpQjtRQUM5RixpRUFBaUU7UUFDakUsTUFBTSxlQUFlLEdBQUcsK0JBQStCLENBQUMsUUFBUSxDQUFDLE9BQU8sRUFBRSxzQkFBc0IsQ0FBQyxDQUFDO1FBQ2xHLE1BQU0scUJBQXFCLEdBQUcscUNBQXFDLENBQUMsUUFBUSxDQUFDLE9BQU8sRUFBRSxzQkFBc0IsQ0FBQyxDQUFDO1FBRTlHLHdDQUF3QztRQUN4QyxLQUFLLE1BQU0sQ0FBQyxhQUFhLEVBQUUsV0FBVyxDQUFDLElBQUksTUFBTSxDQUFDLE9BQU8sQ0FDdkQsT0FBTyxDQUFDLENBQUMsR0FBRyxlQUFlLEVBQUUsR0FBRyxxQkFBcUIsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLGVBQWUsQ0FBQyxRQUFRLEVBQUUsQ0FBQyxDQUMzRixFQUFFLENBQUM7WUFDRixNQUFNLGVBQWUsR0FBRyxFQUFFLENBQUMsVUFBVSxDQUFDLGFBQWEsQ0FBQyxDQUFDO1lBQ3JELE1BQU0sYUFBYSxHQUFHLE1BQU0sSUFBSSxDQUFDLEtBQUssQ0FBQyxnQkFBZ0IsQ0FBQyxlQUFlLENBQUMsQ0FBQztZQUN6RSxJQUFJLENBQUMsYUFBYSxFQUFFLENBQUM7Z0JBQ25CLElBQUksQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLG9EQUFvRCxlQUFlLENBQUMsUUFBUSxFQUFFLGdCQUFnQixDQUFDLENBQUM7Z0JBQzlHLFNBQVM7WUFDWCxDQUFDO1lBRUQseUVBQXlFO1lBQ3pFLE1BQU0sTUFBTSxHQUFHLFdBQVcsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsNkJBQTZCLEVBQUUsQ0FBQyxDQUFDO1lBQ3ZFLE1BQU0sVUFBVSxHQUFHLE1BQU0sQ0FBQyxNQUFNLENBQzlCLENBQUMsRUFBRSxFQUFzRCxFQUFFLENBQUMsd0NBQXdDLElBQUksRUFBRSxDQUMzRyxDQUFDO1lBQ0YsTUFBTSxnQkFBZ0IsR0FBRyxNQUFNLENBQUMsTUFBTSxDQUNwQyxDQUFDLEVBQUUsRUFBa0QsRUFBRSxDQUFDLGtDQUFrQyxJQUFJLEVBQUUsQ0FDakcsQ0FBQztZQUNGLE1BQU0sZUFBZSxHQUFHLFVBQVUsQ0FBQyxNQUFNLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxxQ0FBcUMsQ0FBQyxFQUFFLEVBQUUsYUFBYSxDQUFDLENBQUMsQ0FBQztZQUMxRyxNQUFNLHFCQUFxQixHQUFHLGdCQUFnQixDQUFDLE1BQU0sQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUN6RCwyQ0FBMkMsQ0FBQyxFQUFFLEVBQUUsYUFBYSxDQUFDLENBQy9ELENBQUM7WUFDRixNQUFNLFlBQVksR0FBRyxlQUFlLENBQUMsTUFBTSxHQUFHLHFCQUFxQixDQUFDLE1BQU0sQ0FBQztZQUMzRSxJQUFJLFlBQVksS0FBSyxNQUFNLENBQUMsTUFBTSxFQUFFLENBQUM7Z0JBQ25DLElBQUksQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLFlBQVksTUFBTSxDQUFDLE1BQU0sR0FBRyxZQUFZLG9CQUFvQixDQUFDLENBQUM7WUFDOUUsQ0FBQztZQUVELGtFQUFrRTtZQUNsRSxJQUFJLFlBQVksR0FBRyxDQUFDLEVBQUUsQ0FBQztnQkFDckIsSUFBSSxDQUFDLEdBQUcsQ0FBQyxPQUFPLENBQUMsV0FBVyxZQUFZLGlDQUFpQyxlQUFlLENBQUMsUUFBUSxFQUFFLEVBQUUsQ0FBQyxDQUFDO1lBQ3pHLENBQUM7WUFDRCxNQUFNLElBQUksQ0FBQyxLQUFLLENBQUMsWUFBWSxDQUFDLGVBQWUsRUFBRSxlQUFlLEVBQUUscUJBQXFCLENBQUMsQ0FBQztRQUN6RixDQUFDO0lBQ0gsQ0FBQztJQUVEOzs7T0FHRztJQUNJLEtBQUssQ0FBQyxJQUFJO1FBQ2YsSUFBSSxDQUFDLEdBQUcsQ0FBQyxLQUFLLENBQUMsYUFBYSxDQUFDLENBQUM7UUFDOUIsTUFBTSxJQUFJLENBQUMsY0FBYyxFQUFFLElBQUksRUFBRSxDQUFDO1FBRWxDLElBQUksQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxDQUFDO1FBQzFCLE9BQU8sT0FBTyxDQUFDLE9BQU8sRUFBRSxDQUFDO0lBQzNCLENBQUM7SUFFTSxnQkFBZ0I7UUFDckIsT0FBTyxPQUFPLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxhQUFhLENBQUMsQ0FBQztJQUM3QyxDQUFDO0lBRU0sa0JBQWtCO1FBQ3ZCLE9BQU8sT0FBTyxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsZUFBZSxDQUFDLENBQUM7SUFDL0MsQ0FBQztJQUVEOzs7Ozs7T0FNRztJQUNJLEtBQUssQ0FBQyxTQUFTLENBQUMsSUFBWSxFQUFFLEtBQWEsRUFBRSxNQUFnQjtRQUNsRSxNQUFNLGVBQWUsR0FBRyxNQUFNO1lBQzVCLENBQUMsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLEtBQUssRUFBRSxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsTUFBTSxJQUFJLENBQUMsS0FBSyxDQUFDLHNCQUFzQixFQUFFLENBQUMsR0FBRyxJQUFJLEdBQUcsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDO1lBQ3RGLENBQUMsQ0FBQyxLQUFLLENBQUM7UUFDVixPQUFPLGVBQWUsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxNQUFNLElBQUksQ0FBQyxLQUFLLENBQUMsU0FBUyxDQUFDLElBQUksRUFBRSxlQUFlLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQztJQUMzRyxDQUFDO0lBRUQ7Ozs7T0FJRztJQUNJLEtBQUssQ0FBQyxRQUFRLENBQUMsTUFBYztRQUNsQywrREFBK0Q7UUFDL0QsSUFBSSxNQUFNLEdBQUcsQ0FBQyxFQUFFLENBQUM7WUFDZixNQUFNLEdBQUcsTUFBTSxJQUFJLENBQUMsS0FBSyxDQUFDLHVCQUF1QixFQUFFLENBQUM7UUFDdEQsQ0FBQztRQUNELE1BQU0sTUFBTSxHQUFHLE1BQU0sSUFBSSxDQUFDLEtBQUssQ0FBQyxTQUFTLENBQUMsTUFBTSxFQUFFLENBQUMsQ0FBQyxDQUFDO1FBQ3JELE9BQU8sTUFBTSxDQUFDLE1BQU0sS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQztJQUMxRCxDQUFDO0lBRU0sV0FBVyxDQUFDLE1BQWM7UUFDL0IsT0FBTyxJQUFJLENBQUMsS0FBSyxDQUFDLFdBQVcsQ0FBQyxNQUFNLENBQUMsQ0FBQztJQUN4QyxDQUFDO0lBRU0sbUJBQW1CLENBQUMsTUFBYztRQUN2QyxPQUFPLElBQUksQ0FBQyxLQUFLLENBQUMsbUJBQW1CLENBQUMsTUFBTSxDQUFDLENBQUM7SUFDaEQsQ0FBQztJQUVEOzs7OztPQUtHO0lBQ0ksS0FBSyxDQUFDLGlCQUFpQixDQUM1QixPQUFxQixFQUNyQixRQUEwQjtRQUUxQixNQUFNLFFBQVEsR0FBRyxNQUFNLElBQUksQ0FBQyxXQUFXLENBQUMsT0FBTyxDQUFDLENBQUM7UUFDakQsSUFBSSxDQUFDLFFBQVEsRUFBRSxDQUFDO1lBQ2QsTUFBTSxJQUFJLEtBQUssQ0FBQyxZQUFZLE9BQU8sQ0FBQyxRQUFRLEVBQUUsWUFBWSxDQUFDLENBQUM7UUFDOUQsQ0FBQztRQUNELE1BQU0sYUFBYSxHQUFHLE1BQU0sSUFBSSxDQUFDLGdCQUFnQixDQUFDLFFBQVEsQ0FBQyxlQUFlLENBQUMsQ0FBQztRQUM1RSxJQUFJLENBQUMsYUFBYSxFQUFFLENBQUM7WUFDbkIsTUFBTSxJQUFJLEtBQUssQ0FBQyxrQkFBa0IsUUFBUSxDQUFDLGVBQWUsQ0FBQyxRQUFRLEVBQUUsUUFBUSxPQUFPLENBQUMsUUFBUSxFQUFFLFlBQVksQ0FBQyxDQUFDO1FBQy9HLENBQUM7UUFDRCxPQUFPLGFBQWEsQ0FBQyxlQUFlLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxNQUFNLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQztJQUM5RSxDQUFDO0lBRUQ7Ozs7OztPQU1HO0lBQ0ksT0FBTyxDQUNaLElBQVksRUFDWixLQUFhLEVBQ2IsT0FBaUI7UUFFakIsT0FBTyxJQUFJLENBQUMsS0FBSyxDQUFDLE9BQU8sQ0FBQyxJQUFJLEVBQUUsS0FBSyxFQUFFLE9BQU8sQ0FBQyxDQUFDO0lBQ2xELENBQUM7SUFFRDs7OztPQUlHO0lBQ0gsa0JBQWtCLENBQUMsTUFBaUI7UUFDbEMsT0FBTyxJQUFJLENBQUMsS0FBSyxDQUFDLGtCQUFrQixDQUFDLE1BQU0sQ0FBQyxDQUFDO0lBQy9DLENBQUM7SUFFRDs7O09BR0c7SUFDSSxjQUFjO1FBQ25CLE9BQU8sSUFBSSxDQUFDLEtBQUssQ0FBQyx1QkFBdUIsRUFBRSxDQUFDO0lBQzlDLENBQUM7SUFFTSxvQkFBb0I7UUFDekIsT0FBTyxJQUFJLENBQUMsS0FBSyxDQUFDLHNCQUFzQixFQUFFLENBQUM7SUFDN0MsQ0FBQztJQUVELHdFQUF3RTtJQUNqRSxvQkFBb0IsQ0FBQyxLQUFxQztRQUMvRCxPQUFPLElBQUksQ0FBQyxLQUFLLENBQUMsc0JBQXNCLENBQUMsS0FBSyxDQUFDLENBQUM7SUFDbEQsQ0FBQztJQUVNLGdCQUFnQixDQUFDLEVBQU07UUFDNUIsT0FBTyxJQUFJLENBQUMsS0FBSyxDQUFDLGdCQUFnQixDQUFDLEVBQUUsQ0FBQyxDQUFDO0lBQ3pDLENBQUM7SUFFTSxXQUFXLENBQUMsT0FBcUI7UUFDdEMsT0FBTyxJQUFJLENBQUMsS0FBSyxDQUFDLG1CQUFtQixDQUFDLE9BQU8sQ0FBQyxDQUFDO0lBQ2pELENBQUM7SUFFRDs7OztPQUlHO0lBQ0gsaUJBQWlCLENBQUMsV0FBbUI7UUFDbkMsT0FBTyxJQUFJLENBQUMsS0FBSyxDQUFDLGlCQUFpQixDQUFDLFdBQVcsQ0FBQyxDQUFDO0lBQ25ELENBQUM7SUFFRDs7Ozs7T0FLRztJQUNILHFCQUFxQixDQUFDLGFBQWlCLEVBQUUsVUFBa0I7UUFDekQsT0FBTyxJQUFJLENBQUMsS0FBSyxDQUFDLHFCQUFxQixDQUFDLGFBQWEsRUFBRSxVQUFVLENBQUMsQ0FBQztJQUNyRSxDQUFDO0lBRUQsbUJBQW1CO1FBQ2pCLE9BQU8sSUFBSSxDQUFDLEtBQUssQ0FBQyxtQkFBbUIsRUFBRSxDQUFDO0lBQzFDLENBQUM7SUFFRCxtQkFBbUIsQ0FBQyxPQUFxQixFQUFFLFFBQTBCO1FBQ25FLE9BQU8sSUFBSSxDQUFDLEtBQUssQ0FBQyxtQkFBbUIsQ0FBQyxPQUFPLEVBQUUsUUFBUSxDQUFDLENBQUM7SUFDM0QsQ0FBQztJQUVELG1CQUFtQixDQUFDLE9BQXFCO1FBQ3ZDLE9BQU8sSUFBSSxDQUFDLEtBQUssQ0FBQyxtQkFBbUIsQ0FBQyxPQUFPLENBQUMsQ0FBQztJQUNqRCxDQUFDO0NBQ0YifQ==
400
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXJjaGl2ZXIuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvYXJjaGl2ZXIvYXJjaGl2ZXIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBZUEsT0FBTyxFQUFFLDRCQUE0QixFQUF5QixNQUFNLG9CQUFvQixDQUFDO0FBQ3pGLE9BQU8sRUFDTCw2QkFBNkIsRUFDN0IsK0JBQStCLEVBQy9CLHFDQUFxQyxFQUNyQyxxQ0FBcUMsRUFDckMsMkNBQTJDLEdBQzVDLE1BQU0sNkJBQTZCLENBQUM7QUFDckMsT0FBTyxFQUFFLG1CQUFtQixFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFJdEQsT0FBTyxFQUFFLEVBQUUsRUFBRSxNQUFNLDBCQUEwQixDQUFDO0FBQzlDLE9BQU8sRUFBb0IsaUJBQWlCLEVBQUUsTUFBTSx1QkFBdUIsQ0FBQztBQUM1RSxPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0sbUNBQW1DLENBQUM7QUFDbkUsT0FBTyxFQUFFLEtBQUssRUFBRSxNQUFNLHlCQUF5QixDQUFDO0FBQ2hELE9BQU8sRUFBRSxRQUFRLEVBQUUsU0FBUyxFQUFFLE1BQU0scUJBQXFCLENBQUM7QUFDMUQsT0FBTyxFQUFFLHNCQUFzQixFQUFFLE1BQU0sNENBQTRDLENBQUM7QUFXcEYsT0FBTyxPQUFPLE1BQU0sZ0JBQWdCLENBQUM7QUFDckMsT0FBTyxFQUtMLGtCQUFrQixFQUNsQixXQUFXLEVBQ1gsSUFBSSxHQUNMLE1BQU0sTUFBTSxDQUFDO0FBSWQsT0FBTyxFQUFFLHVCQUF1QixFQUFFLHNCQUFzQixFQUFFLE1BQU0scUJBQXFCLENBQUM7QUFDdEYsT0FBTyxFQUFFLHVCQUF1QixFQUFFLE1BQU0sc0JBQXNCLENBQUM7QUFRL0Q7Ozs7R0FJRztBQUNILE1BQU0sT0FBTyxRQUFRO0lBU25COzs7Ozs7Ozs7T0FTRztJQUNILFlBQ21CLFlBQWdELEVBQ2hELGFBQXlCLEVBQ3pCLFlBQXdCLEVBQ3hCLGVBQTJCLEVBQzNCLEtBQXdCLEVBQ3hC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
@@ -1,5 +1,4 @@
1
- /// <reference types="node" resolution-mode="require"/>
2
- import { type Body, type EncryptedL2BlockL2Logs, type EncryptedNoteL2BlockL2Logs, type FromLogType, type GetUnencryptedLogsResponse, type InboxLeaf, type L2Block, type L2BlockL2Logs, type LogFilter, type LogType, type TxEffect, type TxHash, type TxReceipt, type UnencryptedL2BlockL2Logs } from '@aztec/circuit-types';
1
+ import { type EncryptedL2BlockL2Logs, type EncryptedNoteL2BlockL2Logs, type FromLogType, type GetUnencryptedLogsResponse, type InboxLeaf, type L2Block, type L2BlockL2Logs, type LogFilter, type LogType, type TxEffect, type TxHash, type TxReceipt, type UnencryptedL2BlockL2Logs } from '@aztec/circuit-types';
3
2
  import { type Fr } from '@aztec/circuits.js';
4
3
  import { type ContractArtifact } from '@aztec/foundation/abi';
5
4
  import { type AztecAddress } from '@aztec/foundation/aztec-address';
@@ -12,8 +11,6 @@ import { type L1Published } from './structs/published.js';
12
11
  export type ArchiverL1SynchPoint = {
13
12
  /** Number of the last L1 block that added a new L2 block metadata. */
14
13
  blocksSynchedTo?: bigint;
15
- /** Number of the last L1 block that added a new L2 block body. */
16
- blockBodiesSynchedTo?: bigint;
17
14
  /** Number of the last L1 block that added L1 -> L2 messages from the Inbox. */
18
15
  messagesSynchedTo?: bigint;
19
16
  /** Number of the last L1 block that added a new proven block. */
@@ -30,19 +27,6 @@ export interface ArchiverDataStore {
30
27
  * @returns True if the operation is successful.
31
28
  */
32
29
  addBlocks(blocks: L1Published<L2Block>[]): Promise<boolean>;
33
- /**
34
- * Append new block bodies to the store's list.
35
- * @param blockBodies - The L2 block bodies to be added to the store.
36
- * @returns True if the operation is successful.
37
- */
38
- addBlockBodies(blockBodies: DataRetrieval<Body>): Promise<boolean>;
39
- /**
40
- * Gets block bodies that have the same txsEffectsHashes as we supply.
41
- *
42
- * @param txsEffectsHashes - A list of txsEffectsHashes.
43
- * @returns The requested L2 block bodies
44
- */
45
- getBlockBodies(txsEffectsHashes: Buffer[]): Promise<(Body | undefined)[]>;
46
30
  /**
47
31
  * Gets up to `limit` amount of L2 blocks starting from `from`.
48
32
  * @param from - Number of the first block to return (inclusive).
@@ -119,6 +103,16 @@ export interface ArchiverDataStore {
119
103
  * @param l2BlockNumber - The number of the latest proven L2 block processed.
120
104
  */
121
105
  setProvenL2BlockNumber(l2BlockNumber: SingletonDataRetrieval<number>): Promise<void>;
106
+ /**
107
+ * Stores the l1 block number that blocks have been synched until
108
+ * @param l1BlockNumber - The l1 block number
109
+ */
110
+ setBlockSynchedL1BlockNumber(l1BlockNumber: bigint): Promise<void>;
111
+ /**
112
+ * Stores the l1 block number that messages have been synched until
113
+ * @param l1BlockNumber - The l1 block number
114
+ */
115
+ setMessageSynchedL1BlockNumber(l1BlockNumber: bigint): Promise<void>;
122
116
  /**
123
117
  * Gets the synch point of the archiver
124
118
  */
@@ -1 +1 @@
1
- {"version":3,"file":"archiver_store.d.ts","sourceRoot":"","sources":["../../src/archiver/archiver_store.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"archiver_store.d.ts","sourceRoot":"","sources":["../../src/archiver/archiver_store.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"archiver_store_test_suite.d.ts","sourceRoot":"","sources":["../../src/archiver/archiver_store_test_suite.ts"],"names":[],"mappings":"AACA,OAAO,2BAA2B,CAAC;AAenC,OAAO,EAAE,KAAK,iBAAiB,EAA6B,MAAM,qBAAqB,CAAC;AAIxF;;;GAGG;AACH,wBAAgB,yBAAyB,CAAC,QAAQ,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,iBAAiB,QA8f5F"}
1
+ {"version":3,"file":"archiver_store_test_suite.d.ts","sourceRoot":"","sources":["../../src/archiver/archiver_store_test_suite.ts"],"names":[],"mappings":"AACA,OAAO,2BAA2B,CAAC;AAenC,OAAO,EAAE,KAAK,iBAAiB,EAA6B,MAAM,qBAAqB,CAAC;AAGxF;;;GAGG;AACH,wBAAgB,yBAAyB,CAAC,QAAQ,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,iBAAiB,QAoe5F"}