diff --git a/l1-contracts/slither_output.md b/l1-contracts/slither_output.md index 428024196a8..e359042896a 100644 --- a/l1-contracts/slither_output.md +++ b/l1-contracts/slither_output.md @@ -1,17 +1,16 @@ Summary - [pess-unprotected-setter](#pess-unprotected-setter) (1 results) (High) - - [uninitialized-local](#uninitialized-local) (1 results) (Medium) + - [uninitialized-local](#uninitialized-local) (2 results) (Medium) - [unused-return](#unused-return) (1 results) (Medium) - [pess-dubious-typecast](#pess-dubious-typecast) (8 results) (Medium) - [reentrancy-events](#reentrancy-events) (1 results) (Low) - [timestamp](#timestamp) (4 results) (Low) - [pess-public-vs-external](#pess-public-vs-external) (5 results) (Low) - - [assembly](#assembly) (5 results) (Informational) - - [dead-code](#dead-code) (13 results) (Informational) + - [assembly](#assembly) (2 results) (Informational) + - [dead-code](#dead-code) (5 results) (Informational) - [solc-version](#solc-version) (1 results) (Informational) - [low-level-calls](#low-level-calls) (1 results) (Informational) - [similar-names](#similar-names) (3 results) (Informational) - - [unused-state](#unused-state) (2 results) (Informational) - [constable-states](#constable-states) (1 results) (Optimization) - [pess-multiple-storage-read](#pess-multiple-storage-read) (2 results) (Optimization) ## pess-unprotected-setter @@ -32,10 +31,16 @@ Confidence: Medium src/core/libraries/HeaderLib.sol#L150 + - [ ] ID-2 +[TxsDecoder.decode(bytes).vars](src/core/libraries/decoders/TxsDecoder.sol#L89) is a local variable never initialized + +src/core/libraries/decoders/TxsDecoder.sol#L89 + + ## unused-return Impact: Medium Confidence: Medium - - [ ] ID-2 + - [ ] ID-3 [Rollup.process(bytes,bytes32,bytes,bytes)](src/core/Rollup.sol#L53-L91) ignores return value by [(l1ToL2Msgs,l2ToL1Msgs) = MessagesDecoder.decode(_body)](src/core/Rollup.sol#L69) src/core/Rollup.sol#L53-L91 @@ -44,18 +49,11 @@ src/core/Rollup.sol#L53-L91 ## pess-dubious-typecast Impact: Medium Confidence: High - - [ ] ID-3 -Dubious typecast in [TxsDecoder.read4(bytes,uint256)](src/core/libraries/decoders/TxsDecoder.sol#L298-L300): - bytes => bytes4 casting occurs in [uint256(uint32(bytes4(slice(_data,_offset,4))))](src/core/libraries/decoders/TxsDecoder.sol#L299) - -src/core/libraries/decoders/TxsDecoder.sol#L298-L300 - - - [ ] ID-4 -Dubious typecast in [Decoder.read4(bytes,uint256)](src/core/libraries/decoders/Decoder.sol#L415-L417): - bytes => bytes4 casting occurs in [uint256(uint32(bytes4(slice(_data,_offset,4))))](src/core/libraries/decoders/Decoder.sol#L416) +Dubious typecast in [MessagesDecoder.read1(bytes,uint256)](src/core/libraries/decoders/MessagesDecoder.sol#L158-L160): + bytes => bytes1 casting occurs in [uint256(uint8(bytes1(_data)))](src/core/libraries/decoders/MessagesDecoder.sol#L159) -src/core/libraries/decoders/Decoder.sol#L415-L417 +src/core/libraries/decoders/MessagesDecoder.sol#L158-L160 - [ ] ID-5 @@ -74,13 +72,20 @@ src/core/messagebridge/Inbox.sol#L45-L91 - [ ] ID-7 -Dubious typecast in [MessagesDecoder.read4(bytes,uint256)](src/core/libraries/decoders/MessagesDecoder.sol#L110-L112): - bytes => bytes4 casting occurs in [uint256(uint32(bytes4(_data)))](src/core/libraries/decoders/MessagesDecoder.sol#L111) +Dubious typecast in [TxsDecoder.read4(bytes,uint256)](src/core/libraries/decoders/TxsDecoder.sol#L362-L364): + bytes => bytes4 casting occurs in [uint256(uint32(bytes4(slice(_data,_offset,4))))](src/core/libraries/decoders/TxsDecoder.sol#L363) -src/core/libraries/decoders/MessagesDecoder.sol#L110-L112 +src/core/libraries/decoders/TxsDecoder.sol#L362-L364 - [ ] ID-8 +Dubious typecast in [MessagesDecoder.read4(bytes,uint256)](src/core/libraries/decoders/MessagesDecoder.sol#L168-L170): + bytes => bytes4 casting occurs in [uint256(uint32(bytes4(_data)))](src/core/libraries/decoders/MessagesDecoder.sol#L169) + +src/core/libraries/decoders/MessagesDecoder.sol#L168-L170 + + + - [ ] ID-9 Dubious typecast in [HeaderLib.decode(bytes)](src/core/libraries/HeaderLib.sol#L145-L189): bytes => bytes32 casting occurs in [header.lastArchive = AppendOnlyTreeSnapshot(bytes32(_header),uint32(bytes4(_header)))](src/core/libraries/HeaderLib.sol#L153-L155) bytes => bytes4 casting occurs in [header.lastArchive = AppendOnlyTreeSnapshot(bytes32(_header),uint32(bytes4(_header)))](src/core/libraries/HeaderLib.sol#L153-L155) @@ -108,24 +113,24 @@ Dubious typecast in [HeaderLib.decode(bytes)](src/core/libraries/HeaderLib.sol#L src/core/libraries/HeaderLib.sol#L145-L189 - - [ ] ID-9 + - [ ] ID-10 Dubious typecast in [Inbox.batchConsume(bytes32[],address)](src/core/messagebridge/Inbox.sol#L122-L143): uint256 => uint32 casting occurs in [expectedVersion = uint32(REGISTRY.getVersionFor(msg.sender))](src/core/messagebridge/Inbox.sol#L128) src/core/messagebridge/Inbox.sol#L122-L143 - - [ ] ID-10 -Dubious typecast in [Decoder.getL2BlockNumber(bytes)](src/core/libraries/decoders/Decoder.sol#L132-L134): - bytes => bytes32 casting occurs in [uint256(bytes32(_l2Block))](src/core/libraries/decoders/Decoder.sol#L133) + - [ ] ID-11 +Dubious typecast in [TxsDecoder.read1(bytes,uint256)](src/core/libraries/decoders/TxsDecoder.sol#L352-L354): + bytes => bytes1 casting occurs in [uint256(uint8(bytes1(slice(_data,_offset,1))))](src/core/libraries/decoders/TxsDecoder.sol#L353) -src/core/libraries/decoders/Decoder.sol#L132-L134 +src/core/libraries/decoders/TxsDecoder.sol#L352-L354 ## reentrancy-events Impact: Low Confidence: Medium - - [ ] ID-11 + - [ ] ID-12 Reentrancy in [Rollup.process(bytes,bytes32,bytes,bytes)](src/core/Rollup.sol#L53-L91): External calls: - [inbox.batchConsume(l1ToL2Msgs,msg.sender)](src/core/Rollup.sol#L85) @@ -139,7 +144,7 @@ src/core/Rollup.sol#L53-L91 ## timestamp Impact: Low Confidence: Medium - - [ ] ID-12 + - [ ] ID-13 [Inbox.batchConsume(bytes32[],address)](src/core/messagebridge/Inbox.sol#L122-L143) uses timestamp for comparisons Dangerous comparisons: - [block.timestamp > entry.deadline](src/core/messagebridge/Inbox.sol#L136) @@ -147,7 +152,7 @@ Confidence: Medium src/core/messagebridge/Inbox.sol#L122-L143 - - [ ] ID-13 + - [ ] ID-14 [HeaderLib.validate(HeaderLib.Header,uint256,uint256,bytes32)](src/core/libraries/HeaderLib.sol#L108-L138) uses timestamp for comparisons Dangerous comparisons: - [_header.globalVariables.timestamp > block.timestamp](src/core/libraries/HeaderLib.sol#L122) @@ -155,7 +160,7 @@ src/core/messagebridge/Inbox.sol#L122-L143 src/core/libraries/HeaderLib.sol#L108-L138 - - [ ] ID-14 + - [ ] ID-15 [Inbox.sendL2Message(DataStructures.L2Actor,uint32,bytes32,bytes32)](src/core/messagebridge/Inbox.sol#L45-L91) uses timestamp for comparisons Dangerous comparisons: - [_deadline <= block.timestamp](src/core/messagebridge/Inbox.sol#L54) @@ -163,7 +168,7 @@ src/core/libraries/HeaderLib.sol#L108-L138 src/core/messagebridge/Inbox.sol#L45-L91 - - [ ] ID-15 + - [ ] ID-16 [Inbox.cancelL2Message(DataStructures.L1ToL2Msg,address)](src/core/messagebridge/Inbox.sol#L102-L113) uses timestamp for comparisons Dangerous comparisons: - [block.timestamp <= _message.deadline](src/core/messagebridge/Inbox.sol#L108) @@ -174,28 +179,28 @@ src/core/messagebridge/Inbox.sol#L102-L113 ## pess-public-vs-external Impact: Low Confidence: Medium - - [ ] ID-16 + - [ ] ID-17 The following public functions could be turned into external in [FrontierMerkle](src/core/messagebridge/frontier_tree/Frontier.sol#L7-L85) contract: [FrontierMerkle.constructor(uint256)](src/core/messagebridge/frontier_tree/Frontier.sol#L19-L27) src/core/messagebridge/frontier_tree/Frontier.sol#L7-L85 - - [ ] ID-17 + - [ ] ID-18 The following public functions could be turned into external in [Registry](src/core/messagebridge/Registry.sol#L22-L129) contract: [Registry.constructor()](src/core/messagebridge/Registry.sol#L29-L33) src/core/messagebridge/Registry.sol#L22-L129 - - [ ] ID-18 + - [ ] ID-19 The following public functions could be turned into external in [Rollup](src/core/Rollup.sol#L27-L100) contract: [Rollup.constructor(IRegistry,IAvailabilityOracle)](src/core/Rollup.sol#L39-L44) src/core/Rollup.sol#L27-L100 - - [ ] ID-19 + - [ ] ID-20 The following public functions could be turned into external in [Outbox](src/core/messagebridge/Outbox.sol#L21-L148) contract: [Outbox.constructor(address)](src/core/messagebridge/Outbox.sol#L29-L31) [Outbox.get(bytes32)](src/core/messagebridge/Outbox.sol#L77-L84) @@ -204,7 +209,7 @@ The following public functions could be turned into external in [Outbox](src/cor src/core/messagebridge/Outbox.sol#L21-L148 - - [ ] ID-20 + - [ ] ID-21 The following public functions could be turned into external in [Inbox](src/core/messagebridge/Inbox.sol#L21-L231) contract: [Inbox.constructor(address)](src/core/messagebridge/Inbox.sol#L30-L32) [Inbox.contains(bytes32)](src/core/messagebridge/Inbox.sol#L174-L176) @@ -215,119 +220,49 @@ src/core/messagebridge/Inbox.sol#L21-L231 ## assembly Impact: Informational Confidence: High - - [ ] ID-21 -[Decoder.computeRoot(bytes32[])](src/core/libraries/decoders/Decoder.sol#L373-L392) uses assembly - - [INLINE ASM](src/core/libraries/decoders/Decoder.sol#L380-L382) - -src/core/libraries/decoders/Decoder.sol#L373-L392 - - - [ ] ID-22 -[TxsDecoder.decode(bytes)](src/core/libraries/decoders/TxsDecoder.sol#L71-L184) uses assembly - - [INLINE ASM](src/core/libraries/decoders/TxsDecoder.sol#L98-L104) +[TxsDecoder.computeRoot(bytes32[])](src/core/libraries/decoders/TxsDecoder.sol#L294-L313) uses assembly + - [INLINE ASM](src/core/libraries/decoders/TxsDecoder.sol#L301-L303) -src/core/libraries/decoders/TxsDecoder.sol#L71-L184 +src/core/libraries/decoders/TxsDecoder.sol#L294-L313 - [ ] ID-23 -[Decoder.computeConsumables(bytes)](src/core/libraries/decoders/Decoder.sol#L164-L301) uses assembly - - [INLINE ASM](src/core/libraries/decoders/Decoder.sol#L196-L202) - - [INLINE ASM](src/core/libraries/decoders/Decoder.sol#L289-L295) +[MessagesDecoder.decode(bytes)](src/core/libraries/decoders/MessagesDecoder.sol#L60-L150) uses assembly + - [INLINE ASM](src/core/libraries/decoders/MessagesDecoder.sol#L79-L81) + - [INLINE ASM](src/core/libraries/decoders/MessagesDecoder.sol#L112-L118) -src/core/libraries/decoders/Decoder.sol#L164-L301 - - - - [ ] ID-24 -[TxsDecoder.computeRoot(bytes32[])](src/core/libraries/decoders/TxsDecoder.sol#L256-L275) uses assembly - - [INLINE ASM](src/core/libraries/decoders/TxsDecoder.sol#L263-L265) - -src/core/libraries/decoders/TxsDecoder.sol#L256-L275 - - - - [ ] ID-25 -[MessagesDecoder.decode(bytes)](src/core/libraries/decoders/MessagesDecoder.sol#L52-L102) uses assembly - - [INLINE ASM](src/core/libraries/decoders/MessagesDecoder.sol#L81-L83) - - [INLINE ASM](src/core/libraries/decoders/MessagesDecoder.sol#L94-L96) - -src/core/libraries/decoders/MessagesDecoder.sol#L52-L102 +src/core/libraries/decoders/MessagesDecoder.sol#L60-L150 ## dead-code Impact: Informational Confidence: Medium - - [ ] ID-26 -[Decoder.computeConsumables(bytes)](src/core/libraries/decoders/Decoder.sol#L164-L301) is never used and should be removed - -src/core/libraries/decoders/Decoder.sol#L164-L301 - - - - [ ] ID-27 + - [ ] ID-24 [Inbox._errIncompatibleEntryArguments(bytes32,uint64,uint64,uint32,uint32,uint32,uint32)](src/core/messagebridge/Inbox.sol#L212-L230) is never used and should be removed src/core/messagebridge/Inbox.sol#L212-L230 - - [ ] ID-28 -[Decoder.slice(bytes,uint256,uint256)](src/core/libraries/decoders/Decoder.sol#L401-L407) is never used and should be removed - -src/core/libraries/decoders/Decoder.sol#L401-L407 - - - - [ ] ID-29 + - [ ] ID-25 [Outbox._errNothingToConsume(bytes32)](src/core/messagebridge/Outbox.sol#L114-L116) is never used and should be removed src/core/messagebridge/Outbox.sol#L114-L116 - - [ ] ID-30 -[Decoder.computeRoot(bytes32[])](src/core/libraries/decoders/Decoder.sol#L373-L392) is never used and should be removed - -src/core/libraries/decoders/Decoder.sol#L373-L392 - - - - [ ] ID-31 + - [ ] ID-26 [Hash.sha256ToField(bytes32)](src/core/libraries/Hash.sol#L59-L61) is never used and should be removed src/core/libraries/Hash.sol#L59-L61 - - [ ] ID-32 -[Decoder.computeKernelLogsHash(uint256,bytes)](src/core/libraries/decoders/Decoder.sol#L335-L365) is never used and should be removed - -src/core/libraries/decoders/Decoder.sol#L335-L365 - - - - [ ] ID-33 -[Decoder.read4(bytes,uint256)](src/core/libraries/decoders/Decoder.sol#L415-L417) is never used and should be removed - -src/core/libraries/decoders/Decoder.sol#L415-L417 - - - - [ ] ID-34 -[Decoder.computeStateHash(uint256,uint256,bytes)](src/core/libraries/decoders/Decoder.sol#L146-L154) is never used and should be removed - -src/core/libraries/decoders/Decoder.sol#L146-L154 - - - - [ ] ID-35 -[Decoder.computePublicInputHash(bytes,bytes32,bytes32)](src/core/libraries/decoders/Decoder.sol#L118-L125) is never used and should be removed - -src/core/libraries/decoders/Decoder.sol#L118-L125 - - - - [ ] ID-36 + - [ ] ID-27 [Inbox._errNothingToConsume(bytes32)](src/core/messagebridge/Inbox.sol#L197-L199) is never used and should be removed src/core/messagebridge/Inbox.sol#L197-L199 - - [ ] ID-37 -[Decoder.getL2BlockNumber(bytes)](src/core/libraries/decoders/Decoder.sol#L132-L134) is never used and should be removed - -src/core/libraries/decoders/Decoder.sol#L132-L134 - - - - [ ] ID-38 + - [ ] ID-28 [Outbox._errIncompatibleEntryArguments(bytes32,uint64,uint64,uint32,uint32,uint32,uint32)](src/core/messagebridge/Outbox.sol#L129-L147) is never used and should be removed src/core/messagebridge/Outbox.sol#L129-L147 @@ -336,13 +271,13 @@ src/core/messagebridge/Outbox.sol#L129-L147 ## solc-version Impact: Informational Confidence: High - - [ ] ID-39 + - [ ] ID-29 solc-0.8.21 is not recommended for deployment ## low-level-calls Impact: Informational Confidence: High - - [ ] ID-40 + - [ ] ID-30 Low level call in [Inbox.withdrawFees()](src/core/messagebridge/Inbox.sol#L148-L153): - [(success) = msg.sender.call{value: balance}()](src/core/messagebridge/Inbox.sol#L151) @@ -352,43 +287,28 @@ src/core/messagebridge/Inbox.sol#L148-L153 ## similar-names Impact: Informational Confidence: Medium - - [ ] ID-41 + - [ ] ID-31 Variable [Constants.LOGS_HASHES_NUM_BYTES_PER_BASE_ROLLUP](src/core/libraries/ConstantsGen.sol#L125) is too similar to [Constants.NOTE_HASHES_NUM_BYTES_PER_BASE_ROLLUP](src/core/libraries/ConstantsGen.sol#L118) src/core/libraries/ConstantsGen.sol#L125 - - [ ] ID-42 + - [ ] ID-32 Variable [Constants.L1_TO_L2_MESSAGE_LENGTH](src/core/libraries/ConstantsGen.sol#L105) is too similar to [Constants.L2_TO_L1_MESSAGE_LENGTH](src/core/libraries/ConstantsGen.sol#L106) src/core/libraries/ConstantsGen.sol#L105 - - [ ] ID-43 + - [ ] ID-33 Variable [Rollup.AVAILABILITY_ORACLE](src/core/Rollup.sol#L30) is too similar to [Rollup.constructor(IRegistry,IAvailabilityOracle)._availabilityOracle](src/core/Rollup.sol#L39) src/core/Rollup.sol#L30 -## unused-state -Impact: Informational -Confidence: High - - [ ] ID-44 -[Decoder.END_TREES_BLOCK_HEADER_OFFSET](src/core/libraries/decoders/Decoder.sol#L103-L104) is never used in [Decoder](src/core/libraries/decoders/Decoder.sol#L72-L418) - -src/core/libraries/decoders/Decoder.sol#L103-L104 - - - - [ ] ID-45 -[Decoder.BLOCK_HEADER_OFFSET](src/core/libraries/decoders/Decoder.sol#L107-L108) is never used in [Decoder](src/core/libraries/decoders/Decoder.sol#L72-L418) - -src/core/libraries/decoders/Decoder.sol#L107-L108 - - ## constable-states Impact: Optimization Confidence: High - - [ ] ID-46 + - [ ] ID-34 [Rollup.lastWarpedBlockTs](src/core/Rollup.sol#L37) should be constant src/core/Rollup.sol#L37 @@ -397,13 +317,13 @@ src/core/Rollup.sol#L37 ## pess-multiple-storage-read Impact: Optimization Confidence: High - - [ ] ID-47 + - [ ] ID-35 In a function [FrontierMerkle.root()](src/core/messagebridge/frontier_tree/Frontier.sol#L39-L72) variable [FrontierMerkle.DEPTH](src/core/messagebridge/frontier_tree/Frontier.sol#L8) is read multiple times src/core/messagebridge/frontier_tree/Frontier.sol#L39-L72 - - [ ] ID-48 + - [ ] ID-36 In a function [FrontierMerkle.root()](src/core/messagebridge/frontier_tree/Frontier.sol#L39-L72) variable [FrontierMerkle.frontier](src/core/messagebridge/frontier_tree/Frontier.sol#L13) is read multiple times src/core/messagebridge/frontier_tree/Frontier.sol#L39-L72 diff --git a/l1-contracts/src/core/libraries/decoders/Decoder.sol b/l1-contracts/src/core/libraries/decoders/Decoder.sol deleted file mode 100644 index 437a6c6c92a..00000000000 --- a/l1-contracts/src/core/libraries/decoders/Decoder.sol +++ /dev/null @@ -1,418 +0,0 @@ -// SPDX-License-Identifier: Apache-2.0 -// Copyright 2023 Aztec Labs. -pragma solidity >=0.8.18; - -// Libraries -import {Constants} from "../ConstantsGen.sol"; -import {Hash} from "../Hash.sol"; - -/** - * @title Decoder Library - * @author Aztec Labs - * @notice Decoding a L2 block, concerned with readability and velocity of development - * not giving a damn about gas costs. - * @dev there is currently no padding of the elements, so we are for now assuming nice trees as inputs. - * Furthermore, if no contract etc are deployed, we expect there to be address(0) for input. - * - * ------------------- - * You can use https://gist.github.com/LHerskind/724a7e362c97e8ac2902c6b961d36830 to generate the below outline. - * ------------------- - * L2 Block Data specification - * ------------------- - * - * | byte start | num bytes | name - * | --- | --- | --- - * | 0x0000 | 0x20 | chain-id - * | 0x0020 | 0x20 | version - * | 0x0040 | 0x20 | L2 block number - * | 0x0060 | 0x20 | L2 timestamp - * | 0x0080 | 0x20 | startNoteHashTreeSnapshot.root - * | 0x00a0 | 0x04 | startNoteHashTreeSnapshot.nextAvailableLeafIndex - * | 0x00a4 | 0x20 | startNullifierTreeSnapshot.root - * | 0x00c4 | 0x04 | startNullifierTreeSnapshot.nextAvailableLeafIndex - * | 0x00c8 | 0x20 | startContractTreeSnapshot.root - * | 0x00e8 | 0x04 | startContractTreeSnapshot.nextAvailableLeafIndex - * | 0x00ec | 0x20 | startPublicDataTreeSnapshot.root - * | 0x010c | 0x04 | startPublicDataTreeSnapshot.nextAvailableLeafIndex - * | 0x0110 | 0x20 | startL1ToL2MessageTreeSnapshot.root - * | 0x0130 | 0x04 | startL1ToL2MessageTreeSnapshot.nextAvailableLeafIndex - * | 0x0134 | 0x20 | startArchiveSnapshot.root - * | 0x0154 | 0x04 | startArchiveSnapshot.nextAvailableLeafIndex - * | 0x0158 | 0x20 | endNoteHashTreeSnapshot.root - * | 0x0178 | 0x04 | endNoteHashTreeSnapshot.nextAvailableLeafIndex - * | 0x017c | 0x20 | endNullifierTreeSnapshot.root - * | 0x019c | 0x04 | endNullifierTreeSnapshot.nextAvailableLeafIndex - * | 0x01a0 | 0x20 | endContractTreeSnapshot.root - * | 0x01c0 | 0x04 | endContractTreeSnapshot.nextAvailableLeafIndex - * | 0x01c4 | 0x20 | endPublicDataTreeSnapshot.root - * | 0x01e4 | 0x04 | endPublicDataTreeSnapshot.nextAvailableLeafIndex - * | 0x01e8 | 0x20 | endL1ToL2MessageTreeSnapshot.root - * | 0x0208 | 0x04 | endL1ToL2MessageTreeSnapshot.nextAvailableLeafIndex - * | 0x020c | 0x20 | endArchiveSnapshot.root - * | 0x022c | 0x04 | endArchiveSnapshot.nextAvailableLeafIndex - * | 0x0230 | 0x04 | len(newNoteHashes) (denoted a) - * | 0x0234 | a * 0x20 | newNoteHashes - * | 0x0234 + a * 0x20 | 0x04 | len(newNullifiers) (denoted b) - * | 0x0238 + a * 0x20 | b * 0x20 | newNullifiers - * | 0x0238 + a * 0x20 + b * 0x20 | 0x04 | len(newPublicDataWrites) (denoted c) - * | 0x023c + a * 0x20 + b * 0x20 | c * 0x40 | newPublicDataWrites - * | 0x023c + a * 0x20 + b * 0x20 + c * 0x40 | 0x04 | len(newL2ToL1Msgs) (denoted d) - * | 0x0240 + a * 0x20 + b * 0x20 + c * 0x40 | d * 0x20 | newL2ToL1Msgs - * | 0x0240 + a * 0x20 + b * 0x20 + c * 0x40 + d * 0x20 | 0x04 | len(contracts) (denoted e) - * | 0x0244 + a * 0x20 + b * 0x20 + c * 0x40 + d * 0x20 | e * 0x20 | newContracts - * | 0x0244 + a * 0x20 + b * 0x20 + c * 0x40 + d * 0x20 + e * 0x20 | e * 0x34 | newContractsData - * | 0x0244 + a * 0x20 + b * 0x20 + c * 0x40 + d * 0x20 + e * 0x54 | 0x04 | len(newL1ToL2Msgs) (denoted f) - * | 0x0248 + a * 0x20 + b * 0x20 + c * 0x40 + d * 0x20 + e * 0x54 | f * 0x20 | newL1ToL2Msgs - * | 0x0248 + a * 0x20 + b * 0x20 + c * 0x40 + d * 0x20 + e * 0x54 + f * 0x20 | 0x04 | byteLen(newEncryptedLogs) (denoted g) - * | 0x024c + a * 0x20 + b * 0x20 + c * 0x40 + d * 0x20 + e * 0x54 + f * 0x20 | g | newEncryptedLogs - * | 0x024c + a * 0x20 + b * 0x20 + c * 0x40 + d * 0x20 + e * 0x54 + f * 0x20 + g | 0x04 | byteLen(newUnencryptedLogs) (denoted h) - * | 0x0250 + a * 0x20 + b * 0x20 + c * 0x40 + d * 0x20 + e * 0x54 + f * 0x20 + g | h | newUnencryptedLogs - * | --- | --- | --- - */ -library Decoder { - struct ArrayOffsets { - uint256 commitment; - uint256 nullifier; - uint256 publicData; - uint256 l2ToL1Msgs; - uint256 contracts; - uint256 contractData; - uint256 l1ToL2Msgs; - uint256 encryptedLogs; - uint256 unencryptedLogs; - } - - // Note: Used in `computeConsumables` to get around stack too deep errors. - struct ConsumablesVars { - bytes32[] baseLeaves; - bytes32[] l2ToL1Msgs; - bytes baseLeaf; - bytes32 encryptedLogsHash; - bytes32 unencryptedLogsHash; - uint256 l1Tol2MsgsCount; - } - - // DECODING OFFSET CONSTANTS - // Where the start of trees metadata begins in the block - uint256 private constant START_TREES_BLOCK_HEADER_OFFSET = 0x80; - - // The size of the block header elements - uint256 private constant TREES_BLOCK_HEADER_SIZE = 0xd8; - - // Where the end of trees metadata begins in the block - uint256 private constant END_TREES_BLOCK_HEADER_OFFSET = - START_TREES_BLOCK_HEADER_OFFSET + TREES_BLOCK_HEADER_SIZE; - - // Where the metadata ends and the block data begins. - uint256 private constant BLOCK_HEADER_OFFSET = - START_TREES_BLOCK_HEADER_OFFSET + 2 * TREES_BLOCK_HEADER_SIZE; - - /** - * @notice Computes the public input hash - * @dev Uses sha256 to field - * @param _l2Block - The L2 block calldata. - * @param _diffRoot - The root of the diff merkle tree - * @param _l1ToL2MsgsHash - The hash of the L1 to L2 messages - * @return publicInputHash - The hash of the public inputs (sha256 to field) - */ - function computePublicInputHash( - bytes calldata _l2Block, - bytes32 _diffRoot, - bytes32 _l1ToL2MsgsHash - ) internal pure returns (bytes32) { - return - Hash.sha256ToField(bytes.concat(_l2Block[:BLOCK_HEADER_OFFSET], _diffRoot, _l1ToL2MsgsHash)); - } - - /** - * @notice Extract the L2 block number from the block - * @param _l2Block - The L2 block calldata - * @return l2BlockNumber - The L2 block number - */ - function getL2BlockNumber(bytes calldata _l2Block) internal pure returns (uint256 l2BlockNumber) { - return uint256(bytes32(_l2Block[0x40:0x60])); - } - - /** - * @notice Computes a state hash - * @param _l2BlockNumber - The L2 block number - * @param _offset - The offset into the data, 0x80 for start, 0x019c for end - * @param _l2Block - The L2 block calldata. - * @return The state hash - * @dev The state hash is sha256 hash of block's header elements. For each block the header elements are - * the block number, snapshots of all the trees and the root of the public data tree. This function - * copies all of these to memory and then hashes them. - */ - function computeStateHash(uint256 _l2BlockNumber, uint256 _offset, bytes calldata _l2Block) - internal - pure - returns (bytes32) - { - return sha256( - bytes.concat(bytes32(_l2BlockNumber), slice(_l2Block, _offset, TREES_BLOCK_HEADER_SIZE)) - ); - } - - /** - * @notice Computes consumables for the block - * @param _body - The L2 block body. - * @return diffRoot - The root of the diff tree (new note hashes, nullifiers etc) - * @return l1ToL2MsgsHash - The hash of the L1 to L2 messages - * @return l2ToL1Msgs - The L2 to L1 messages of the block - * @return l1ToL2Msgs - The L1 to L2 messages of the block - */ - function computeConsumables(bytes calldata _body) - internal - pure - returns (bytes32, bytes32, bytes32[] memory, bytes32[] memory) - { - ArrayOffsets memory offsets; - ConsumablesVars memory vars; - - { - uint256 offset = 0; - - // Commitments - uint256 count = read4(_body, offset); - vars.baseLeaves = new bytes32[](count / Constants.MAX_NEW_NOTE_HASHES_PER_TX); - offset += 0x4; - offsets.commitment = offset; - offset += count * 0x20; - offsets.nullifier = offset + 0x4; // + 0x4 to offset by next read4 - - // Nullifiers - count = read4(_body, offset); - offset += 0x4 + count * 0x20; - offsets.publicData = offset + 0x4; // + 0x4 to offset by next read4 - - // Public data writes - count = read4(_body, offset); - offset += 0x4 + count * 0x40; - offsets.l2ToL1Msgs = offset + 0x4; // + 0x4 to offset by next read4 - - // L2 to L1 messages - count = read4(_body, offset); - vars.l2ToL1Msgs = new bytes32[](count); - assembly { - // load the l2 to l1 msgs (done here as offset will be altered in loop) - let l2ToL1Msgs := mload(add(vars, 0x20)) - calldatacopy( - add(l2ToL1Msgs, 0x20), add(_body.offset, mload(add(offsets, 0x60))), mul(count, 0x20) - ) - } - offset += 0x4 + count * 0x20; - offsets.contracts = offset + 0x4; // + 0x4 to offset by next read4 - - // Contracts - count = read4(_body, offset); - offsets.contractData = offsets.contracts + count * 0x20; - offset += 0x4 + count * 0x54; - offsets.l1ToL2Msgs = offset + 0x4; // + 0x4 to offset by next read4 - - // L1 to L2 messages - count = read4(_body, offset); - vars.l1Tol2MsgsCount = count; - offset += 0x4 + count * 0x20; - offsets.encryptedLogs = offset + 0x4; // + 0x4 to offset by next read4 - - // Used as length in bytes down here - uint256 length = read4(_body, offset); - offsets.unencryptedLogs = offsets.encryptedLogs + 0x4 + length; - } - - // Data starts after header. Look at L2 Block Data specification at the top of this file. - { - for (uint256 i = 0; i < vars.baseLeaves.length; i++) { - /* - * Compute the leaf to insert. - * Leaf_i = ( - * newNoteHashesKernel, - * newNullifiersKernel, - * newPublicDataWritesKernel, - * newL2ToL1MsgsKernel, - * newContractLeafKernel, - * newContractDataKernel.aztecAddress, - * newContractDataKernel.ethAddress (padded to 32 bytes), - * encryptedLogsHash, | - * unencryptedLogsHash, ____|=> Computed below from logs' preimages. - * ); - * Note that we always read data, the l2Block (atm) must therefore include dummy or zero-notes for - * Zero values. - */ - - /** - * Compute encrypted and unencrypted logs hashes corresponding to the current leaf. - * Note: will advance offsets by the number of bytes processed. - */ - (vars.encryptedLogsHash, offsets.encryptedLogs) = - computeKernelLogsHash(offsets.encryptedLogs, _body); - - (vars.unencryptedLogsHash, offsets.unencryptedLogs) = - computeKernelLogsHash(offsets.unencryptedLogs, _body); - - // Insertions are split into multiple `bytes.concat` to work around stack too deep. - vars.baseLeaf = bytes.concat( - bytes.concat( - slice(_body, offsets.commitment, Constants.NOTE_HASHES_NUM_BYTES_PER_BASE_ROLLUP), - slice(_body, offsets.nullifier, Constants.NULLIFIERS_NUM_BYTES_PER_BASE_ROLLUP), - slice(_body, offsets.publicData, Constants.PUBLIC_DATA_WRITES_NUM_BYTES_PER_BASE_ROLLUP), - slice(_body, offsets.l2ToL1Msgs, Constants.L2_TO_L1_MSGS_NUM_BYTES_PER_BASE_ROLLUP), - slice(_body, offsets.contracts, Constants.CONTRACTS_NUM_BYTES_PER_BASE_ROLLUP) - ), - bytes.concat( - slice(_body, offsets.contractData, 0x20), // newContractDataKernel.aztecAddress - bytes12(0), - slice(_body, offsets.contractData + 0x20, 0x14) // newContractDataKernel.ethAddress - ), - bytes.concat(vars.encryptedLogsHash, vars.unencryptedLogsHash) - ); - - offsets.commitment += Constants.NOTE_HASHES_NUM_BYTES_PER_BASE_ROLLUP; - offsets.nullifier += Constants.NULLIFIERS_NUM_BYTES_PER_BASE_ROLLUP; - offsets.publicData += Constants.PUBLIC_DATA_WRITES_NUM_BYTES_PER_BASE_ROLLUP; - offsets.l2ToL1Msgs += Constants.L2_TO_L1_MSGS_NUM_BYTES_PER_BASE_ROLLUP; - offsets.contracts += Constants.CONTRACTS_NUM_BYTES_PER_BASE_ROLLUP; - offsets.contractData += Constants.CONTRACT_DATA_NUM_BYTES_PER_BASE_ROLLUP_UNPADDED; - - vars.baseLeaves[i] = sha256(vars.baseLeaf); - } - } - - bytes32 diffRoot = computeRoot(vars.baseLeaves); - bytes32[] memory l1ToL2Msgs; - bytes32 l1ToL2MsgsHash; - { - // `l1ToL2Msgs` is fixed size so if `lengths.l1Tol2MsgsCount` < `Constants.NUMBER_OF_L1_L2_MESSAGES_PER_ROLLUP` the array - // will contain some zero values. - uint256 l1ToL2MsgsHashPreimageSize = 0x20 * vars.l1Tol2MsgsCount; - l1ToL2Msgs = new bytes32[](Constants.NUMBER_OF_L1_L2_MESSAGES_PER_ROLLUP); - assembly { - calldatacopy( - add(l1ToL2Msgs, 0x20), - add(_body.offset, mload(add(offsets, 0xc0))), - l1ToL2MsgsHashPreimageSize - ) - } - - l1ToL2MsgsHash = sha256(abi.encodePacked(l1ToL2Msgs)); - } - - return (diffRoot, l1ToL2MsgsHash, vars.l2ToL1Msgs, l1ToL2Msgs); - } - - /** - * @notice Computes logs hash as is done in the kernel and app circuits. - * @param _offsetInBlock - The offset of kernel's logs in a block. - * @param _l2Block - The L2 block calldata. - * @return The hash of the logs and offset in a block after processing the logs. - * @dev We have logs preimages on the input and we need to perform the same hashing process as is done in the app - * circuit (hashing the logs) and in the kernel circuit (accumulating the logs hashes). In each iteration of - * kernel, the kernel computes a hash of the previous iteration's logs hash (the hash in the previous kernel's - * public inputs) and the the current iteration private circuit public inputs logs hash. - * - * E.g. for resulting logs hash of a kernel with 3 iterations would be computed as: - * - * kernelPublicInputsLogsHash = sha256(sha256(sha256(I1_LOGS), sha256(I2_LOGS)), sha256(I3_LOGS)) - * - * where I1_LOGS, I2_LOGS and I3_LOGS are logs emitted in the first, second and third function call. - * - * Note that `sha256(I1_LOGS)`, `sha256(I2_LOGS)` and `sha256(I3_LOGS)` are computed in the app circuit and not - * in the kernel circuit. The kernel circuit only accumulates the hashes. - * - * @dev For the example above, the logs are encoded in the following way: - * - * || K_LOGS_LEN | I1_LOGS_LEN | I1_LOGS | I2_LOGS_LEN | I2_LOGS | I3_LOGS_LEN | I3_LOGS || - * 4 bytes 4 bytes i bytes 4 bytes j bytes 4 bytes k bytes - * - * K_LOGS_LEN is the total length of the logs in the kernel. - * I1_LOGS_LEN (i) is the length of the logs in the first iteration. - * I1_LOGS are all the logs emitted in the first iteration. - * I2_LOGS_LEN (j) ... - * - * @dev Link to a relevant discussion: - * https://discourse.aztec.network/t/proposal-forcing-the-sequencer-to-actually-submit-data-to-l1/426/9 - */ - function computeKernelLogsHash(uint256 _offsetInBlock, bytes calldata _l2Block) - internal - pure - returns (bytes32, uint256) - { - uint256 offset = _offsetInBlock; - uint256 remainingLogsLength = read4(_l2Block, offset); - offset += 0x4; - - bytes32 kernelPublicInputsLogsHash; // The hash on the output of kernel iteration - - // Iterate until all the logs were processed - while (remainingLogsLength > 0) { - // The length of the logs emitted by Aztec.nr from the function call corresponding to this kernel iteration - uint256 privateCircuitPublicInputLogsLength = read4(_l2Block, offset); - offset += 0x4; - - // Hash the logs of this iteration's function call - bytes32 privateCircuitPublicInputsLogsHash = - sha256(slice(_l2Block, offset, privateCircuitPublicInputLogsLength)); - offset += privateCircuitPublicInputLogsLength; - - // Decrease remaining logs length by this privateCircuitPublicInputsLogs's length (len(I?_LOGS)) and 4 bytes for I?_LOGS_LEN - remainingLogsLength -= (privateCircuitPublicInputLogsLength + 0x4); - - kernelPublicInputsLogsHash = - sha256(bytes.concat(kernelPublicInputsLogsHash, privateCircuitPublicInputsLogsHash)); - } - - return (kernelPublicInputsLogsHash, offset); - } - - /** - * @notice Computes the root for a binary Merkle-tree given the leafs. - * @dev Uses sha256. - * @param _leafs - The 32 bytes leafs to build the tree of. - * @return The root of the Merkle tree. - */ - function computeRoot(bytes32[] memory _leafs) internal pure returns (bytes32) { - // @todo Must pad the tree - uint256 treeDepth = 0; - while (2 ** treeDepth < _leafs.length) { - treeDepth++; - } - uint256 treeSize = 2 ** treeDepth; - assembly { - mstore(_leafs, treeSize) - } - - for (uint256 i = 0; i < treeDepth; i++) { - for (uint256 j = 0; j < treeSize; j += 2) { - _leafs[j / 2] = sha256(bytes.concat(_leafs[j], _leafs[j + 1])); - } - treeSize /= 2; - } - - return _leafs[0]; - } - - /** - * @notice Wrapper around the slicing to avoid some stack too deep - * @param _data - The data to slice - * @param _start - The start of the slice - * @param _length - The length of the slice - * @return The slice - */ - function slice(bytes calldata _data, uint256 _start, uint256 _length) - internal - pure - returns (bytes memory) - { - return _data[_start:_start + _length]; - } - - /** - * @notice Reads 4 bytes from the data - * @param _data - The data to read from - * @param _offset - The offset to read from - * @return The 4 bytes read as a uint256 - */ - function read4(bytes calldata _data, uint256 _offset) internal pure returns (uint256) { - return uint256(uint32(bytes4(slice(_data, _offset, 4)))); - } -} diff --git a/l1-contracts/src/core/libraries/decoders/MessagesDecoder.sol b/l1-contracts/src/core/libraries/decoders/MessagesDecoder.sol index 80e254a6b68..0749f008e2c 100644 --- a/l1-contracts/src/core/libraries/decoders/MessagesDecoder.sol +++ b/l1-contracts/src/core/libraries/decoders/MessagesDecoder.sol @@ -16,29 +16,37 @@ import {Hash} from "../Hash.sol"; * ------------------- * You can use https://gist.github.com/LHerskind/724a7e362c97e8ac2902c6b961d36830 to generate the below outline. * ------------------- - * L2 Body Data specification + * L2 Body Data Specification * ------------------- - * - * | byte start | num bytes | name - * | --- | --- | --- - * | 0x00 | 0x04 | len(newNoteHashes) (denoted a) - * | 0x04 | a * 0x20 | newNoteHashes - * | 0x04 + a * 0x20 | 0x04 | len(newNullifiers) (denoted b) - * | 0x08 + a * 0x20 | b * 0x20 | newNullifiers - * | 0x08 + a * 0x20 + b * 0x20 | 0x04 | len(newPublicDataWrites) (denoted c) - * | 0x0c + a * 0x20 + b * 0x20 | c * 0x40 | newPublicDataWrites - * | 0x0c + a * 0x20 + b * 0x20 + c * 0x40 | 0x04 | len(newL2ToL1Msgs) (denoted d) - * | 0x10 + a * 0x20 + b * 0x20 + c * 0x40 | d * 0x20 | newL2ToL1Msgs - * | 0x10 + a * 0x20 + b * 0x20 + c * 0x40 + d * 0x20 | 0x04 | len(contracts) (denoted e) - * | 0x14 + a * 0x20 + b * 0x20 + c * 0x40 + d * 0x20 | e * 0x20 | newContracts - * | 0x14 + a * 0x20 + b * 0x20 + c * 0x40 + d * 0x20 + e * 0x20 | e * 0x34 | newContractsData - * | 0x14 + a * 0x20 + b * 0x20 + c * 0x40 + d * 0x20 + e * 0x54 | 0x04 | len(newL1ToL2Msgs) (denoted f) - * | 0x18 + a * 0x20 + b * 0x20 + c * 0x40 + d * 0x20 + e * 0x54 | f * 0x20 | newL1ToL2Msgs - * | 0x18 + a * 0x20 + b * 0x20 + c * 0x40 + d * 0x20 + e * 0x54 + f * 0x20 | 0x04 | byteLen(newEncryptedLogs) (denoted g) - * | 0x1c + a * 0x20 + b * 0x20 + c * 0x40 + d * 0x20 + e * 0x54 + f * 0x20 | g | newEncryptedLogs - * | 0x1c + a * 0x20 + b * 0x20 + c * 0x40 + d * 0x20 + e * 0x54 + f * 0x20 + g | 0x04 | byteLen(newUnencryptedLogs) (denoted h) - * | 0x20 + a * 0x20 + b * 0x20 + c * 0x40 + d * 0x20 + e * 0x54 + f * 0x20 + g | h | newUnencryptedLogs - * | --- | --- | --- + * | byte start | num bytes | name + * | --- | --- | --- + * | 0x0 | 0x4 | len(newL1ToL2Msgs) (denoted a) + * | 0x4 | a * 0x20 | newL1ToL2Msgs + * | 0x4 + a * 0x20 = tx0Start | 0x4 | len(numTxs) (denoted t) + * | | | TxEffect 0 { + * | tx0Start | 0x1 | len(newNoteHashes) (denoted b) + * | tx0Start + 0x1 | b * 0x20 | newNoteHashes + * | tx0Start + 0x1 + b * 0x20 | 0x1 | len(newNullifiers) (denoted c) + * | tx0Start + 0x1 + b * 0x20 + 0x1 | c * 0x20 | newNullifiers + * | tx0Start + 0x1 + b * 0x20 + 0x1 + c * 0x20 | 0x1 | len(newL2ToL1Msgs) (denoted d) + * | tx0Start + 0x1 + b * 0x20 + 0x1 + c * 0x20 + 0x1 | d * 0x20 | newL2ToL1Msgs + * | tx0Start + 0x1 + b * 0x20 + 0x1 + c * 0x20 + 0x1 + d * 0x20 | 0x1 | len(newPublicDataWrites) (denoted e) + * | tx0Start + 0x1 + b * 0x20 + 0x1 + c * 0x20 + 0x1 + d * 0x20 + 0x01 | e * 0x40 | newPublicDataWrites + * | tx0Start + 0x1 + b * 0x20 + 0x1 + c * 0x20 + 0x1 + d * 0x20 + 0x01 + e * 0x40 | 0x1 | len(contracts) (denoted f) + * | tx0Start + 0x1 + b * 0x20 + 0x1 + c * 0x20 + 0x1 + d * 0x20 + 0x01 + e * 0x40 + 0x1 | f * 0x20 | newContracts + * | tx0Start + 0x1 + b * 0x20 + 0x1 + c * 0x20 + 0x1 + d * 0x20 + 0x01 + e * 0x40 + 0x1 + f * 0x20 | f * 0x34 | newContractsData + * | tx0Start + 0x1 + b * 0x20 + 0x1 + c * 0x20 + 0x1 + d * 0x20 + 0x01 + e * 0x40 + 0x1 + f * 0x20 + f * 0x34 | 0x04 | byteLen(newEncryptedLogs) (denoted g) + * | tx0Start + 0x1 + b * 0x20 + 0x1 + c * 0x20 + 0x1 + d * 0x20 + 0x01 + e * 0x40 + 0x1 + f * 0x20 + f * 0x34 + 0x4 | g | newEncryptedLogs + * | tx0Start + 0x1 + b * 0x20 + 0x1 + c * 0x20 + 0x1 + d * 0x20 + 0x01 + e * 0x40 + 0x1 + f * 0x20 + f * 0x34 + 0x4 + g | 0x04 | byteLen(newUnencryptedLogs) (denoted h) + * | tx0Start + 0x1 + b * 0x20 + 0x1 + c * 0x20 + 0x1 + d * 0x20 + 0x01 + e * 0x40 + 0x1 + f * 0x20 + f * 0x34 + 0x4 + g + 0x4 | h | newUnencryptedLogs + * | | | }, + * | | | TxEffect 1 { + * | | | ... + * | | | }, + * | | | ... + * | | | TxEffect (t - 1) { + * | | | ... + * | | | }, */ library MessagesDecoder { /** @@ -62,37 +70,77 @@ library MessagesDecoder { l1ToL2Msgs = new bytes32[](Constants.NUMBER_OF_L1_L2_MESSAGES_PER_ROLLUP); uint256 offset = 0; - - // Note hashes + // L1 to L2 messages uint256 count = read4(_body, offset); - offset += 0x4 + count * 0x20; - - // Nullifiers - count = read4(_body, offset); - offset += 0x4 + count * 0x20; + offset += 0x4; - // Public data writes - count = read4(_body, offset); - offset += 0x4 + count * 0x40; - - // L2 to L1 messages - count = read4(_body, offset); - l2ToL1Msgs = new bytes32[](count); + // `l1ToL2Msgs` is fixed size so if `lengths.l1Tol2MsgsCount` < `Constants.NUMBER_OF_L1_L2_MESSAGES_PER_ROLLUP` the array + // will contain some zero values. assembly { - calldatacopy(add(l2ToL1Msgs, 0x20), add(_body.offset, add(offset, 0x4)), mul(count, 0x20)) + calldatacopy(add(l1ToL2Msgs, 0x20), add(_body.offset, offset), mul(count, 0x20)) } - offset += 0x4 + count * 0x20; - // Contracts - count = read4(_body, offset); - offset += 0x4 + count * 0x54; + offset += count * 0x20; - // L1 to L2 messages - count = read4(_body, offset); - // `l1ToL2Msgs` is fixed size so if `lengths.l1Tol2MsgsCount` < `Constants.NUMBER_OF_L1_L2_MESSAGES_PER_ROLLUP` the array - // will contain some zero values. - assembly { - calldatacopy(add(l1ToL2Msgs, 0x20), add(_body.offset, add(offset, 0x04)), mul(count, 0x20)) + uint256 numTxs = read4(_body, offset); + offset += 0x4; + + l2ToL1Msgs = new bytes32[](numTxs * Constants.MAX_NEW_L2_TO_L1_MSGS_PER_TX); + + // Now we iterate over the tx effects + for (uint256 i = 0; i < numTxs; i++) { + // Note hashes + count = read1(_body, offset); + offset += 0x1; + offset += count * 0x20; // each note hash is 0x20 bytes long + + // Nullifiers + count = read1(_body, offset); + offset += 0x1; + offset += count * 0x20; // each nullifier is 0x20 bytes long + + // L2 to L1 messages + { + count = read1(_body, offset); + offset += 0x1; + + uint256 msgsLength = count * 0x20; // each l2 to l1 message is 0x20 bytes long + + // Now we copy the new messages into the array (if there are some) + if (count > 0) { + uint256 indexInArray = i * Constants.MAX_NEW_L2_TO_L1_MSGS_PER_TX; + assembly { + calldatacopy( + add(add(l2ToL1Msgs, 0x20), mul(indexInArray, 0x20)), + add(_body.offset, offset), + msgsLength + ) + } + } + + offset += msgsLength; + } + + // Public data writes + count = read1(_body, offset); + offset += 0x1; + offset += count * 0x40; // each public data write is 0x40 bytes long + + // Contracts + count = read1(_body, offset); + offset += 0x1; + offset += count * 0x20; // each contract leaf is 0x20 bytes long + + // Contract data + offset += count * 0x34; // each contract data is 0x34 bytes long + + // Encrypted logs + uint256 length = read4(_body, offset); + offset += 0x4 + length; + + // Unencrypted logs + length = read4(_body, offset); + offset += 0x4 + length; } inHash = sha256(abi.encodePacked(l1ToL2Msgs)); @@ -101,6 +149,16 @@ library MessagesDecoder { return (inHash, outHash, l1ToL2Msgs, l2ToL1Msgs); } + /** + * @notice Reads 1 bytes from the data + * @param _data - The data to read from + * @param _offset - The offset to read from + * @return The 1 byte as a uint256 + */ + function read1(bytes calldata _data, uint256 _offset) internal pure returns (uint256) { + return uint256(uint8(bytes1(_data[_offset:_offset + 1]))); + } + /** * @notice Reads 4 bytes from the data * @param _data - The data to read from diff --git a/l1-contracts/src/core/libraries/decoders/TxsDecoder.sol b/l1-contracts/src/core/libraries/decoders/TxsDecoder.sol index a593024d418..8075daab50e 100644 --- a/l1-contracts/src/core/libraries/decoders/TxsDecoder.sol +++ b/l1-contracts/src/core/libraries/decoders/TxsDecoder.sol @@ -16,29 +16,37 @@ import {Hash} from "../Hash.sol"; * ------------------- * You can use https://gist.github.com/LHerskind/724a7e362c97e8ac2902c6b961d36830 to generate the below outline. * ------------------- - * L2 Body Data specification + * L2 Body Data Specification * ------------------- - * - * | byte start | num bytes | name - * | --- | --- | --- - * | 0x00 | 0x04 | len(newNoteHashes) (denoted a) - * | 0x04 | a * 0x20 | newNoteHashes - * | 0x04 + a * 0x20 | 0x04 | len(newNullifiers) (denoted b) - * | 0x08 + a * 0x20 | b * 0x20 | newNullifiers - * | 0x08 + a * 0x20 + b * 0x20 | 0x04 | len(newPublicDataWrites) (denoted c) - * | 0x0c + a * 0x20 + b * 0x20 | c * 0x40 | newPublicDataWrites - * | 0x0c + a * 0x20 + b * 0x20 + c * 0x40 | 0x04 | len(newL2ToL1Msgs) (denoted d) - * | 0x10 + a * 0x20 + b * 0x20 + c * 0x40 | d * 0x20 | newL2ToL1Msgs - * | 0x10 + a * 0x20 + b * 0x20 + c * 0x40 + d * 0x20 | 0x04 | len(contracts) (denoted e) - * | 0x14 + a * 0x20 + b * 0x20 + c * 0x40 + d * 0x20 | e * 0x20 | newContracts - * | 0x14 + a * 0x20 + b * 0x20 + c * 0x40 + d * 0x20 + e * 0x20 | e * 0x34 | newContractsData - * | 0x14 + a * 0x20 + b * 0x20 + c * 0x40 + d * 0x20 + e * 0x54 | 0x04 | len(newL1ToL2Msgs) (denoted f) - * | 0x18 + a * 0x20 + b * 0x20 + c * 0x40 + d * 0x20 + e * 0x54 | f * 0x20 | newL1ToL2Msgs - * | 0x18 + a * 0x20 + b * 0x20 + c * 0x40 + d * 0x20 + e * 0x54 + f * 0x20 | 0x04 | byteLen(newEncryptedLogs) (denoted g) - * | 0x1c + a * 0x20 + b * 0x20 + c * 0x40 + d * 0x20 + e * 0x54 + f * 0x20 | g | newEncryptedLogs - * | 0x1c + a * 0x20 + b * 0x20 + c * 0x40 + d * 0x20 + e * 0x54 + f * 0x20 + g | 0x04 | byteLen(newUnencryptedLogs) (denoted h) - * | 0x20 + a * 0x20 + b * 0x20 + c * 0x40 + d * 0x20 + e * 0x54 + f * 0x20 + g | h | newUnencryptedLogs - * | --- | --- | --- + * | byte start | num bytes | name + * | --- | --- | --- + * | 0x0 | 0x4 | len(newL1ToL2Msgs) (denoted a) + * | 0x4 | a * 0x20 | newL1ToL2Msgs + * | 0x4 + a * 0x20 = tx0Start | 0x4 | len(numTxs) (denoted t) + * | | | TxEffect 0 { + * | tx0Start | 0x1 | len(newNoteHashes) (denoted b) + * | tx0Start + 0x1 | b * 0x20 | newNoteHashes + * | tx0Start + 0x1 + b * 0x20 | 0x1 | len(newNullifiers) (denoted c) + * | tx0Start + 0x1 + b * 0x20 + 0x1 | c * 0x20 | newNullifiers + * | tx0Start + 0x1 + b * 0x20 + 0x1 + c * 0x20 | 0x1 | len(newL2ToL1Msgs) (denoted d) + * | tx0Start + 0x1 + b * 0x20 + 0x1 + c * 0x20 + 0x1 | d * 0x20 | newL2ToL1Msgs + * | tx0Start + 0x1 + b * 0x20 + 0x1 + c * 0x20 + 0x1 + d * 0x20 | 0x1 | len(newPublicDataWrites) (denoted e) + * | tx0Start + 0x1 + b * 0x20 + 0x1 + c * 0x20 + 0x1 + d * 0x20 + 0x01 | e * 0x40 | newPublicDataWrites + * | tx0Start + 0x1 + b * 0x20 + 0x1 + c * 0x20 + 0x1 + d * 0x20 + 0x01 + e * 0x40 | 0x1 | len(contracts) (denoted f) + * | tx0Start + 0x1 + b * 0x20 + 0x1 + c * 0x20 + 0x1 + d * 0x20 + 0x01 + e * 0x40 + 0x1 | f * 0x20 | newContracts + * | tx0Start + 0x1 + b * 0x20 + 0x1 + c * 0x20 + 0x1 + d * 0x20 + 0x01 + e * 0x40 + 0x1 + f * 0x20 | f * 0x34 | newContractsData + * | tx0Start + 0x1 + b * 0x20 + 0x1 + c * 0x20 + 0x1 + d * 0x20 + 0x01 + e * 0x40 + 0x1 + f * 0x20 + f * 0x34 | 0x04 | byteLen(newEncryptedLogs) (denoted g) + * | tx0Start + 0x1 + b * 0x20 + 0x1 + c * 0x20 + 0x1 + d * 0x20 + 0x01 + e * 0x40 + 0x1 + f * 0x20 + f * 0x34 + 0x4 | g | newEncryptedLogs + * | tx0Start + 0x1 + b * 0x20 + 0x1 + c * 0x20 + 0x1 + d * 0x20 + 0x01 + e * 0x40 + 0x1 + f * 0x20 + f * 0x34 + 0x4 + g | 0x04 | byteLen(newUnencryptedLogs) (denoted h) + * | tx0Start + 0x1 + b * 0x20 + 0x1 + c * 0x20 + 0x1 + d * 0x20 + 0x01 + e * 0x40 + 0x1 + f * 0x20 + f * 0x34 + 0x4 + g + 0x4 | h | newUnencryptedLogs + * | | | }, + * | | | TxEffect 1 { + * | | | ... + * | | | }, + * | | | ... + * | | | TxEffect (t - 1) { + * | | | ... + * | | | }, */ library TxsDecoder { struct ArrayOffsets { @@ -49,8 +57,15 @@ library TxsDecoder { uint256 contracts; uint256 contractData; uint256 l1ToL2Msgs; - uint256 encryptedLogs; - uint256 unencryptedLogs; + } + + struct Counts { + uint256 noteHash; + uint256 nullifier; + uint256 l2ToL1Msgs; + uint256 publicData; + uint256 contracts; + uint256 contractData; } // Note: Used in `computeConsumables` to get around stack too deep errors. @@ -70,56 +85,19 @@ library TxsDecoder { */ function decode(bytes calldata _body) internal pure returns (bytes32) { ArrayOffsets memory offsets; + Counts memory counts; ConsumablesVars memory vars; + uint256 offset = 0; { - uint256 offset = 0; - - // Commitments - uint256 count = read4(_body, offset); - vars.baseLeaves = new bytes32[](count / Constants.MAX_NEW_NOTE_HASHES_PER_TX); - offsets.noteHash = 0x4; - offset += 0x4 + count * 0x20; - offsets.nullifier = offset + 0x4; // + 0x4 to offset by next read4 - - // Nullifiers - count = read4(_body, offset); - offset += 0x4 + count * 0x20; - offsets.publicData = offset + 0x4; // + 0x4 to offset by next read4 - - // Public data writes - count = read4(_body, offset); - offset += 0x4 + count * 0x40; - offsets.l2ToL1Msgs = offset + 0x4; // + 0x4 to offset by next read4 - - // L2 to L1 messages - count = read4(_body, offset); - vars.l2ToL1Msgs = new bytes32[](count); - assembly { - // load the l2 to l1 msgs (done here as offset will be altered in loop) - let l2ToL1Msgs := mload(add(vars, 0x20)) - calldatacopy( - add(l2ToL1Msgs, 0x20), add(_body.offset, mload(add(offsets, 0x60))), mul(count, 0x20) - ) - } - offset += 0x4 + count * 0x20; - offsets.contracts = offset + 0x4; // + 0x4 to offset by next read4 - - // Contracts - count = read4(_body, offset); - offsets.contractData = offsets.contracts + count * 0x20; - offset += 0x4 + count * 0x54; - offsets.l1ToL2Msgs = offset + 0x4; // + 0x4 to offset by next read4 - // L1 to L2 messages - count = read4(_body, offset); + uint256 count = read4(_body, offset); vars.l1Tol2MsgsCount = count; offset += 0x4 + count * 0x20; - offsets.encryptedLogs = offset + 0x4; // + 0x4 to offset by next read4 - // Used as length in bytes down here - uint256 length = read4(_body, offset); - offsets.unencryptedLogs = offsets.encryptedLogs + 0x4 + length; + count = read4(_body, offset); // number of tx effects + offset += 0x4; + vars.baseLeaves = new bytes32[](count); } // Data starts after header. Look at L2 Block Data specification at the top of this file. @@ -142,40 +120,100 @@ library TxsDecoder { * Zero values. */ + // Note hashes + uint256 count = read1(_body, offset); + offset += 0x1; + counts.noteHash = count; + offsets.noteHash = offset; + offset += count * 0x20; // each note hash is 0x20 bytes long + + // Nullifiers + count = read1(_body, offset); + offset += 0x1; + counts.nullifier = count; + offsets.nullifier = offset; + offset += count * 0x20; // each nullifier is 0x20 bytes long + + // L2 to L1 messages + count = read1(_body, offset); + offset += 0x1; + counts.l2ToL1Msgs = count; + offsets.l2ToL1Msgs = offset; + offset += count * 0x20; // each l2 to l1 message is 0x20 bytes long + + // Public data writes + count = read1(_body, offset); + offset += 0x1; + counts.publicData = count; + offsets.publicData = offset; + offset += count * 0x40; // each public data write is 0x40 bytes long + + // Contracts + count = read1(_body, offset); + offset += 0x1; + counts.contracts = count; + offsets.contracts = offset; + offset += count * 0x20; // each contract leaf is 0x20 bytes long + + // Contract data + counts.contractData = count; // count is the same as contracts + offsets.contractData = offset; + offset += count * 0x34; // each contract data is 0x34 bytes long + + bytes memory contractData = new bytes(Constants.CONTRACT_DATA_NUM_BYTES_PER_BASE_ROLLUP); + if (counts.contracts == 1) { + contractData = bytes.concat( + slice(_body, offsets.contractData, 0x20), // newContractDataKernel.aztecAddress + bytes12(0), // We pad the ethAddress to 32 bytes, we don't use sliceAndPad here because we want to prefix + slice(_body, offsets.contractData + 0x20, 0x14) // newContractDataKernel.ethAddress + ); + } + /** * Compute encrypted and unencrypted logs hashes corresponding to the current leaf. * Note: will advance offsets by the number of bytes processed. */ - (vars.encryptedLogsHash, offsets.encryptedLogs) = - computeKernelLogsHash(offsets.encryptedLogs, _body); - - (vars.unencryptedLogsHash, offsets.unencryptedLogs) = - computeKernelLogsHash(offsets.unencryptedLogs, _body); + (vars.encryptedLogsHash, offset) = computeKernelLogsHash(offset, _body); + (vars.unencryptedLogsHash, offset) = computeKernelLogsHash(offset, _body); // Insertions are split into multiple `bytes.concat` to work around stack too deep. vars.baseLeaf = bytes.concat( bytes.concat( - slice(_body, offsets.noteHash, Constants.NOTE_HASHES_NUM_BYTES_PER_BASE_ROLLUP), - slice(_body, offsets.nullifier, Constants.NULLIFIERS_NUM_BYTES_PER_BASE_ROLLUP), - slice(_body, offsets.publicData, Constants.PUBLIC_DATA_WRITES_NUM_BYTES_PER_BASE_ROLLUP), - slice(_body, offsets.l2ToL1Msgs, Constants.L2_TO_L1_MSGS_NUM_BYTES_PER_BASE_ROLLUP), - slice(_body, offsets.contracts, Constants.CONTRACTS_NUM_BYTES_PER_BASE_ROLLUP) - ), - bytes.concat( - slice(_body, offsets.contractData, 0x20), // newContractDataKernel.aztecAddress - bytes12(0), - slice(_body, offsets.contractData + 0x20, 0x14) // newContractDataKernel.ethAddress + sliceAndPad( + _body, + offsets.noteHash, + counts.noteHash * 0x20, + Constants.NOTE_HASHES_NUM_BYTES_PER_BASE_ROLLUP + ), + sliceAndPad( + _body, + offsets.nullifier, + counts.nullifier * 0x20, + Constants.NULLIFIERS_NUM_BYTES_PER_BASE_ROLLUP + ), + sliceAndPad( + _body, + offsets.l2ToL1Msgs, + counts.l2ToL1Msgs * 0x20, + Constants.L2_TO_L1_MSGS_NUM_BYTES_PER_BASE_ROLLUP + ), + sliceAndPad( + _body, + offsets.publicData, + counts.publicData * 0x40, + Constants.PUBLIC_DATA_WRITES_NUM_BYTES_PER_BASE_ROLLUP + ), + sliceAndPad( + _body, + offsets.contracts, + counts.contracts * 0x20, + Constants.CONTRACTS_NUM_BYTES_PER_BASE_ROLLUP + ) ), + contractData, bytes.concat(vars.encryptedLogsHash, vars.unencryptedLogsHash) ); - offsets.noteHash += Constants.NOTE_HASHES_NUM_BYTES_PER_BASE_ROLLUP; - offsets.nullifier += Constants.NULLIFIERS_NUM_BYTES_PER_BASE_ROLLUP; - offsets.publicData += Constants.PUBLIC_DATA_WRITES_NUM_BYTES_PER_BASE_ROLLUP; - offsets.l2ToL1Msgs += Constants.L2_TO_L1_MSGS_NUM_BYTES_PER_BASE_ROLLUP; - offsets.contracts += Constants.CONTRACTS_NUM_BYTES_PER_BASE_ROLLUP; - offsets.contractData += Constants.CONTRACT_DATA_NUM_BYTES_PER_BASE_ROLLUP_UNPADDED; - vars.baseLeaves[i] = sha256(vars.baseLeaf); } } @@ -289,6 +327,32 @@ library TxsDecoder { return _data[_start:_start + _length]; } + /** + * @notice Wrapper around the slicing and padding to avoid some stack too deep + * @param _data - The data to slice + * @param _start - The start of the slice + * @param _length - The length of the slice + * @param _targetLength - The length of the padded array + * @return The slice + */ + function sliceAndPad(bytes calldata _data, uint256 _start, uint256 _length, uint256 _targetLength) + internal + pure + returns (bytes memory) + { + return bytes.concat(_data[_start:_start + _length], new bytes(_targetLength - _length)); + } + + /** + * @notice Reads 1 bytes from the data + * @param _data - The data to read from + * @param _offset - The offset to read from + * @return The 1 byte as a uint256 + */ + function read1(bytes calldata _data, uint256 _offset) internal pure returns (uint256) { + return uint256(uint8(bytes1(slice(_data, _offset, 1)))); + } + /** * @notice Reads 4 bytes from the data * @param _data - The data to read from diff --git a/l1-contracts/test/Rollup.t.sol b/l1-contracts/test/Rollup.t.sol index 654d834184e..00b0020fa30 100644 --- a/l1-contracts/test/Rollup.t.sol +++ b/l1-contracts/test/Rollup.t.sol @@ -2,11 +2,6 @@ // Copyright 2023 Aztec Labs. pragma solidity >=0.8.18; -import {Test} from "forge-std/Test.sol"; - -import {DecoderTest} from "./decoders/Decoder.t.sol"; -import {DecoderHelper} from "./decoders/helpers/DecoderHelper.sol"; - import {DecoderBase} from "./decoders/Base.sol"; import {DataStructures} from "../src/core/libraries/DataStructures.sol"; @@ -23,7 +18,6 @@ import {AvailabilityOracle} from "../src/core/availability_oracle/AvailabilityOr * Main use of these test is shorter cycles when updating the decoder contract. */ contract RollupTest is DecoderBase { - DecoderHelper internal helper; Registry internal registry; Inbox internal inbox; Outbox internal outbox; @@ -31,8 +25,6 @@ contract RollupTest is DecoderBase { AvailabilityOracle internal availabilityOracle; function setUp() public virtual { - helper = new DecoderHelper(); - registry = new Registry(); inbox = new Inbox(address(registry)); outbox = new Outbox(address(registry)); diff --git a/l1-contracts/test/decoders/Decoder.t.sol b/l1-contracts/test/decoders/Decoders.t.sol similarity index 90% rename from l1-contracts/test/decoders/Decoder.t.sol rename to l1-contracts/test/decoders/Decoders.t.sol index 4879de4ec03..700cb0fbd0f 100644 --- a/l1-contracts/test/decoders/Decoder.t.sol +++ b/l1-contracts/test/decoders/Decoders.t.sol @@ -7,13 +7,11 @@ import {DecoderBase} from "./Base.sol"; import {Hash} from "../../src/core/libraries/Hash.sol"; import {DataStructures} from "../../src/core/libraries/DataStructures.sol"; -import {DecoderHelper} from "./helpers/DecoderHelper.sol"; import {HeaderLibHelper} from "./helpers/HeaderLibHelper.sol"; import {MessagesDecoderHelper} from "./helpers/MessagesDecoderHelper.sol"; import {TxsDecoderHelper} from "./helpers/TxsDecoderHelper.sol"; import {HeaderLib} from "../../src/core/libraries/HeaderLib.sol"; -import {Decoder} from "../../src/core/libraries/decoders/Decoder.sol"; import {MessagesDecoder} from "../../src/core/libraries/decoders/MessagesDecoder.sol"; import {TxsDecoder} from "../../src/core/libraries/decoders/TxsDecoder.sol"; @@ -25,14 +23,12 @@ import {AvailabilityOracle} from "../../src/core/availability_oracle/Availabilit * All tests here are skipped (all tests are prefixed with an underscore)! * This is because we implicitly test the decoding in integration_l1_publisher.test.ts */ -contract DecoderTest is DecoderBase { - DecoderHelper internal helper; +contract DecodersTest is DecoderBase { HeaderLibHelper internal headerHelper; MessagesDecoderHelper internal messagesHelper; TxsDecoderHelper internal txsHelper; function setUp() public virtual { - helper = new DecoderHelper(); headerHelper = new HeaderLibHelper(); messagesHelper = new MessagesDecoderHelper(); txsHelper = new TxsDecoderHelper(); @@ -48,14 +44,6 @@ contract DecoderTest is DecoderBase { function _testDecodeBlock(string memory name) public virtual { DecoderBase.Full memory data = load(name); - // Using the FULL decoder. - ( - bytes32 diffRoot, - bytes32 l1ToL2MessagesHash, - bytes32[] memory l2ToL1Msgs, - bytes32[] memory l1ToL2Msgs - ) = helper.computeConsumables(data.block.body); - // Header { DecoderBase.DecodedHeader memory referenceHeader = data.block.decodedHeader; @@ -182,7 +170,6 @@ contract DecoderTest is DecoderBase { ) = messagesHelper.decode(data.block.body); assertEq(msgsInHash, data.block.l1ToL2MessagesHash, "Invalid l1ToL2MsgsHash msgs"); - assertEq(l1ToL2MessagesHash, data.block.l1ToL2MessagesHash, "Invalid l1ToL2MsgsHash full"); // assertEq(msgsL2ToL1MsgsHash, b.l2ToL1MessagesHash, "Invalid l2ToL1MsgsHash"); @@ -190,20 +177,16 @@ contract DecoderTest is DecoderBase { assertEq( msgsL1ToL2Msgs.length, data.messages.l1ToL2Messages.length, "Invalid l1ToL2Msgs length" ); - assertEq(l1ToL2Msgs.length, data.messages.l1ToL2Messages.length, "Invalid l1ToL2Msgs length"); for (uint256 i = 0; i < msgsL1ToL2Msgs.length; i++) { assertEq(msgsL1ToL2Msgs[i], data.messages.l1ToL2Messages[i], "Invalid l1ToL2Msgs messages"); - assertEq(l1ToL2Msgs[i], data.messages.l1ToL2Messages[i], "Invalid l1ToL2Msgs full"); } // L2 -> L1 messages assertEq( msgsL2ToL1Msgs.length, data.messages.l2ToL1Messages.length, "Invalid l2ToL1Msgs length" ); - assertEq(l2ToL1Msgs.length, data.messages.l2ToL1Messages.length, "Invalid l2ToL1Msgs length"); for (uint256 i = 0; i < msgsL2ToL1Msgs.length; i++) { assertEq(msgsL2ToL1Msgs[i], data.messages.l2ToL1Messages[i], "Invalid l2ToL1Msgs messages"); - assertEq(l2ToL1Msgs[i], data.messages.l2ToL1Messages[i], "Invalid l2ToL1Msgs full"); } } @@ -211,7 +194,6 @@ contract DecoderTest is DecoderBase { { bytes32 txsHash = txsHelper.decode(data.block.body); assertEq(txsHash, data.block.calldataHash, "Invalid txs hash"); - assertEq(diffRoot, data.block.calldataHash, "Invalid diff root/calldata hash"); } // The public inputs are computed based of these values, but not directly part of the decoding per say. @@ -222,7 +204,7 @@ contract DecoderTest is DecoderBase { bytes memory iterationLogsLength = hex"00000000"; // 4 empty bytes indicating that length of this iteration's logs is 0 bytes memory encodedLogs = abi.encodePacked(kernelLogsLength, iterationLogsLength); - (bytes32 logsHash, uint256 bytesAdvanced) = helper.computeKernelLogsHash(encodedLogs); + (bytes32 logsHash, uint256 bytesAdvanced) = txsHelper.computeKernelLogsHash(encodedLogs); bytes32 kernelPublicInputsLogsHash = bytes32(0); bytes32 privateCircuitPublicInputsLogsHash = sha256(new bytes(0)); @@ -242,7 +224,7 @@ contract DecoderTest is DecoderBase { bytes memory firstFunctionCallLogs = hex"0000000493e78a70"; // Prefix logs with length of kernel logs (12) and length of iteration 1 logs (8) bytes memory encodedLogs = abi.encodePacked(hex"0000000c00000008", firstFunctionCallLogs); - (bytes32 logsHash, uint256 bytesAdvanced) = helper.computeKernelLogsHash(encodedLogs); + (bytes32 logsHash, uint256 bytesAdvanced) = txsHelper.computeKernelLogsHash(encodedLogs); // Zero because this is the first iteration bytes32 previousKernelPublicInputsLogsHash = bytes32(0); @@ -270,7 +252,7 @@ contract DecoderTest is DecoderBase { bytes memory encodedLogs = abi.encodePacked( hex"0000002400000008", firstFunctionCallLogs, hex"00000014", secondFunctionCallLogs ); - (bytes32 logsHash, uint256 bytesAdvanced) = helper.computeKernelLogsHash(encodedLogs); + (bytes32 logsHash, uint256 bytesAdvanced) = txsHelper.computeKernelLogsHash(encodedLogs); bytes32 referenceLogsHashFromIteration1 = sha256(abi.encodePacked(bytes32(0), sha256(firstFunctionCallLogs))); @@ -307,7 +289,7 @@ contract DecoderTest is DecoderBase { hex"00000014", thirdFunctionCallLogs ); - (bytes32 logsHash, uint256 bytesAdvanced) = helper.computeKernelLogsHash(encodedLogs); + (bytes32 logsHash, uint256 bytesAdvanced) = txsHelper.computeKernelLogsHash(encodedLogs); bytes32 referenceLogsHashFromIteration1 = sha256(abi.encodePacked(bytes32(0), sha256(firstFunctionCallLogs))); diff --git a/l1-contracts/test/decoders/helpers/DecoderHelper.sol b/l1-contracts/test/decoders/helpers/DecoderHelper.sol deleted file mode 100644 index bdbc019545d..00000000000 --- a/l1-contracts/test/decoders/helpers/DecoderHelper.sol +++ /dev/null @@ -1,24 +0,0 @@ -// SPDX-License-Identifier: Apache-2.0 -// Copyright 2023 Aztec Labs. -pragma solidity >=0.8.18; - -import {Decoder} from "../../../src/core/libraries/decoders/Decoder.sol"; -import {Rollup} from "../../../src/core/Rollup.sol"; - -contract DecoderHelper { - function computeConsumables(bytes calldata _body) - external - pure - returns (bytes32, bytes32, bytes32[] memory, bytes32[] memory) - { - return Decoder.computeConsumables(_body); - } - - function computeKernelLogsHash(bytes calldata _kernelLogs) - external - pure - returns (bytes32, uint256) - { - return Decoder.computeKernelLogsHash(0, _kernelLogs); - } -} diff --git a/l1-contracts/test/decoders/helpers/TxsDecoderHelper.sol b/l1-contracts/test/decoders/helpers/TxsDecoderHelper.sol index aa7b5e5190d..2730558380d 100644 --- a/l1-contracts/test/decoders/helpers/TxsDecoderHelper.sol +++ b/l1-contracts/test/decoders/helpers/TxsDecoderHelper.sol @@ -9,4 +9,12 @@ contract TxsDecoderHelper { function decode(bytes calldata _body) public pure returns (bytes32 txsHash) { return TxsDecoder.decode(_body); } + + function computeKernelLogsHash(bytes calldata _kernelLogs) + external + pure + returns (bytes32, uint256) + { + return TxsDecoder.computeKernelLogsHash(0, _kernelLogs); + } } diff --git a/l1-contracts/test/fixtures/empty_block_0.json b/l1-contracts/test/fixtures/empty_block_0.json index 075ca445c74..edc1257c63e 100644 --- a/l1-contracts/test/fixtures/empty_block_0.json +++ b/l1-contracts/test/fixtures/empty_block_0.json @@ -35,8 +35,8 @@ ] }, "block": { - "archive": "0x2a7124e29abe7113da1e8379219c46fbef4107f66135e38da4058809df6108db", - "body": "0x00000100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000080000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000001000000000000000000000000000000000", + "archive": "0x2c1be1f68c1ac3693975ae2c3c5937bcc294d79e08845d55d775d52fb936e7a6", + "body": "0x0000001000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", "calldataHash": "0xdeb8be229731acd5c13f8dbdbfc60fdc8f7865f480d77f84c763d625aefbd6b1", "decodedHeader": { "contentCommitment": { @@ -50,8 +50,8 @@ "chainId": 31337, "timestamp": 0, "version": 1, - "coinbase": "0xce269d5fdcfdbb454526bd4ccad0913e91536691", - "feeRecipient": "0x29a09d94c3c7bffce6267deadf793bb8ca5a87c91b7d5743b8f448806c1e4d54" + "coinbase": "0x40467cf612c5d6b0c400440a9fb2bd3fa0a36f99", + "feeRecipient": "0x268f902d4f57618ed2d99bb01e7479cfa6ec5d43dc61e07af05a499ac12915c8" }, "lastArchive": { "nextAvailableLeafIndex": 1, @@ -82,8 +82,8 @@ } } }, - "header": "0x0f045bd8180c4de901e18a10e9393ae42d9ef7928fe6b68568cb48b91d1355a7000000010000000000000000000000000000000000000000000000000000000000000002deb8be229731acd5c13f8dbdbfc60fdc8f7865f480d77f84c763d625aefbd6b1000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001864fcdaa80ff2719154fa7c8a9050662972707168d69eac9db6fd3110829f800000001016642d9ccd8346c403aa4c3fa451178b22534a27035cdaa6ec34ae53b29c50cb000001000bcfa3e9f1a8922ee92c6dc964d6595907c1804a86753774322b468f69d4f278000001801864fcdaa80ff2719154fa7c8a9050662972707168d69eac9db6fd3110829f80000000040572c8db882674dd026b8877fbba1b700a4407da3ae9ce5fa43215a28163362b000000c00000000000000000000000000000000000000000000000000000000000007a69000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000ce269d5fdcfdbb454526bd4ccad0913e9153669129a09d94c3c7bffce6267deadf793bb8ca5a87c91b7d5743b8f448806c1e4d54", + "header": "0x0f045bd8180c4de901e18a10e9393ae42d9ef7928fe6b68568cb48b91d1355a7000000010000000000000000000000000000000000000000000000000000000000000002deb8be229731acd5c13f8dbdbfc60fdc8f7865f480d77f84c763d625aefbd6b1000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001864fcdaa80ff2719154fa7c8a9050662972707168d69eac9db6fd3110829f800000001016642d9ccd8346c403aa4c3fa451178b22534a27035cdaa6ec34ae53b29c50cb000001000bcfa3e9f1a8922ee92c6dc964d6595907c1804a86753774322b468f69d4f278000001801864fcdaa80ff2719154fa7c8a9050662972707168d69eac9db6fd3110829f80000000040572c8db882674dd026b8877fbba1b700a4407da3ae9ce5fa43215a28163362b000000c00000000000000000000000000000000000000000000000000000000000007a6900000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000040467cf612c5d6b0c400440a9fb2bd3fa0a36f99268f902d4f57618ed2d99bb01e7479cfa6ec5d43dc61e07af05a499ac12915c8", "l1ToL2MessagesHash": "0x076a27c79e5ace2a3d47f9dd2e83e4ff6ea8872b3c2218f66c92b89b55f36560", - "publicInputsHash": "0x0f0d72c0baa71493da4c1a18e9495fe545ddccb968809a14f253b9a044322b42" + "publicInputsHash": "0x06dedacd7db52b21c9a94048129c77b18538c4c60c87f80273ef5485121f872e" } } \ No newline at end of file diff --git a/l1-contracts/test/fixtures/empty_block_1.json b/l1-contracts/test/fixtures/empty_block_1.json index 4059f36fec1..84ad322fd33 100644 --- a/l1-contracts/test/fixtures/empty_block_1.json +++ b/l1-contracts/test/fixtures/empty_block_1.json @@ -35,8 +35,8 @@ ] }, "block": { - "archive": "0x061dc5fdc916af72a2a083c6902c94c8933f51d4ac3f90075dda529f58f74b2e", - "body": "0x00000100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000080000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000001000000000000000000000000000000000", + "archive": "0x29528935ed42ef657c58b488294a0c489dcf04a0d1c894af18ba20ade1c53b74", + "body": "0x0000001000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", "calldataHash": "0xdeb8be229731acd5c13f8dbdbfc60fdc8f7865f480d77f84c763d625aefbd6b1", "decodedHeader": { "contentCommitment": { @@ -48,14 +48,14 @@ "globalVariables": { "blockNumber": 2, "chainId": 31337, - "timestamp": 1708461114, + "timestamp": 1709128392, "version": 1, - "coinbase": "0xce269d5fdcfdbb454526bd4ccad0913e91536691", - "feeRecipient": "0x29a09d94c3c7bffce6267deadf793bb8ca5a87c91b7d5743b8f448806c1e4d54" + "coinbase": "0x40467cf612c5d6b0c400440a9fb2bd3fa0a36f99", + "feeRecipient": "0x268f902d4f57618ed2d99bb01e7479cfa6ec5d43dc61e07af05a499ac12915c8" }, "lastArchive": { "nextAvailableLeafIndex": 2, - "root": "0x2a7124e29abe7113da1e8379219c46fbef4107f66135e38da4058809df6108db" + "root": "0x2c1be1f68c1ac3693975ae2c3c5937bcc294d79e08845d55d775d52fb936e7a6" }, "stateReference": { "l1ToL2MessageTree": { @@ -82,8 +82,8 @@ } } }, - "header": "0x2a7124e29abe7113da1e8379219c46fbef4107f66135e38da4058809df6108db000000020000000000000000000000000000000000000000000000000000000000000002deb8be229731acd5c13f8dbdbfc60fdc8f7865f480d77f84c763d625aefbd6b1000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001864fcdaa80ff2719154fa7c8a9050662972707168d69eac9db6fd3110829f800000002016642d9ccd8346c403aa4c3fa451178b22534a27035cdaa6ec34ae53b29c50cb000002000bcfa3e9f1a8922ee92c6dc964d6595907c1804a86753774322b468f69d4f278000002801864fcdaa80ff2719154fa7c8a9050662972707168d69eac9db6fd3110829f80000000080572c8db882674dd026b8877fbba1b700a4407da3ae9ce5fa43215a28163362b000001400000000000000000000000000000000000000000000000000000000000007a69000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000065d50c3ace269d5fdcfdbb454526bd4ccad0913e9153669129a09d94c3c7bffce6267deadf793bb8ca5a87c91b7d5743b8f448806c1e4d54", + "header": "0x2c1be1f68c1ac3693975ae2c3c5937bcc294d79e08845d55d775d52fb936e7a6000000020000000000000000000000000000000000000000000000000000000000000002deb8be229731acd5c13f8dbdbfc60fdc8f7865f480d77f84c763d625aefbd6b1000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001864fcdaa80ff2719154fa7c8a9050662972707168d69eac9db6fd3110829f800000002016642d9ccd8346c403aa4c3fa451178b22534a27035cdaa6ec34ae53b29c50cb000002000bcfa3e9f1a8922ee92c6dc964d6595907c1804a86753774322b468f69d4f278000002801864fcdaa80ff2719154fa7c8a9050662972707168d69eac9db6fd3110829f80000000080572c8db882674dd026b8877fbba1b700a4407da3ae9ce5fa43215a28163362b000001400000000000000000000000000000000000000000000000000000000000007a69000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000065df3ac840467cf612c5d6b0c400440a9fb2bd3fa0a36f99268f902d4f57618ed2d99bb01e7479cfa6ec5d43dc61e07af05a499ac12915c8", "l1ToL2MessagesHash": "0x076a27c79e5ace2a3d47f9dd2e83e4ff6ea8872b3c2218f66c92b89b55f36560", - "publicInputsHash": "0x02c273c0be3f41cd57185f4665ffaa70d598e8960365748c810561173986e594" + "publicInputsHash": "0x06b7e5992268316c66795c6f1a5595098cb322d5c30b17d7890f18c48fadb5b7" } } \ No newline at end of file diff --git a/l1-contracts/test/fixtures/mixed_block_0.json b/l1-contracts/test/fixtures/mixed_block_0.json index 3f0a41b1ea6..59392feb704 100644 --- a/l1-contracts/test/fixtures/mixed_block_0.json +++ b/l1-contracts/test/fixtures/mixed_block_0.json @@ -52,23 +52,23 @@ ] }, "block": { - "archive": "0x2e407b925ce2053006ec1210d2bc6eb37405b01549cc4e345cfe8f2ccd708365", - "body": "0x000001000000000000000000000000000000000000000000000000000000000000000140000000000000000000000000000000000000000000000000000000000000014100000000000000000000000000000000000000000000000000000000000001420000000000000000000000000000000000000000000000000000000000000143000000000000000000000000000000000000000000000000000000000000014400000000000000000000000000000000000000000000000000000000000001450000000000000000000000000000000000000000000000000000000000000146000000000000000000000000000000000000000000000000000000000000014700000000000000000000000000000000000000000000000000000000000001480000000000000000000000000000000000000000000000000000000000000149000000000000000000000000000000000000000000000000000000000000014a000000000000000000000000000000000000000000000000000000000000014b000000000000000000000000000000000000000000000000000000000000014c000000000000000000000000000000000000000000000000000000000000014d000000000000000000000000000000000000000000000000000000000000014e000000000000000000000000000000000000000000000000000000000000014f0000000000000000000000000000000000000000000000000000000000000150000000000000000000000000000000000000000000000000000000000000015100000000000000000000000000000000000000000000000000000000000001520000000000000000000000000000000000000000000000000000000000000153000000000000000000000000000000000000000000000000000000000000015400000000000000000000000000000000000000000000000000000000000001550000000000000000000000000000000000000000000000000000000000000156000000000000000000000000000000000000000000000000000000000000015700000000000000000000000000000000000000000000000000000000000001580000000000000000000000000000000000000000000000000000000000000159000000000000000000000000000000000000000000000000000000000000015a000000000000000000000000000000000000000000000000000000000000015b000000000000000000000000000000000000000000000000000000000000015c000000000000000000000000000000000000000000000000000000000000015d000000000000000000000000000000000000000000000000000000000000015e000000000000000000000000000000000000000000000000000000000000015f0000000000000000000000000000000000000000000000000000000000000160000000000000000000000000000000000000000000000000000000000000016100000000000000000000000000000000000000000000000000000000000001620000000000000000000000000000000000000000000000000000000000000163000000000000000000000000000000000000000000000000000000000000016400000000000000000000000000000000000000000000000000000000000001650000000000000000000000000000000000000000000000000000000000000166000000000000000000000000000000000000000000000000000000000000016700000000000000000000000000000000000000000000000000000000000001680000000000000000000000000000000000000000000000000000000000000169000000000000000000000000000000000000000000000000000000000000016a000000000000000000000000000000000000000000000000000000000000016b000000000000000000000000000000000000000000000000000000000000016c000000000000000000000000000000000000000000000000000000000000016d000000000000000000000000000000000000000000000000000000000000016e000000000000000000000000000000000000000000000000000000000000016f00000000000000000000000000000000000000000000000000000000000001700000000000000000000000000000000000000000000000000000000000000171000000000000000000000000000000000000000000000000000000000000017200000000000000000000000000000000000000000000000000000000000001730000000000000000000000000000000000000000000000000000000000000174000000000000000000000000000000000000000000000000000000000000017500000000000000000000000000000000000000000000000000000000000001760000000000000000000000000000000000000000000000000000000000000177000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000180000000000000000000000000000000000000000000000000000000000000018100000000000000000000000000000000000000000000000000000000000001820000000000000000000000000000000000000000000000000000000000000183000000000000000000000000000000000000000000000000000000000000018400000000000000000000000000000000000000000000000000000000000001850000000000000000000000000000000000000000000000000000000000000186000000000000000000000000000000000000000000000000000000000000018700000000000000000000000000000000000000000000000000000000000001880000000000000000000000000000000000000000000000000000000000000189000000000000000000000000000000000000000000000000000000000000018a000000000000000000000000000000000000000000000000000000000000018b000000000000000000000000000000000000000000000000000000000000018c000000000000000000000000000000000000000000000000000000000000018d000000000000000000000000000000000000000000000000000000000000018e000000000000000000000000000000000000000000000000000000000000018f0000000000000000000000000000000000000000000000000000000000000190000000000000000000000000000000000000000000000000000000000000019100000000000000000000000000000000000000000000000000000000000001920000000000000000000000000000000000000000000000000000000000000193000000000000000000000000000000000000000000000000000000000000019400000000000000000000000000000000000000000000000000000000000001950000000000000000000000000000000000000000000000000000000000000196000000000000000000000000000000000000000000000000000000000000019700000000000000000000000000000000000000000000000000000000000001980000000000000000000000000000000000000000000000000000000000000199000000000000000000000000000000000000000000000000000000000000019a000000000000000000000000000000000000000000000000000000000000019b000000000000000000000000000000000000000000000000000000000000019c000000000000000000000000000000000000000000000000000000000000019d000000000000000000000000000000000000000000000000000000000000019e000000000000000000000000000000000000000000000000000000000000019f00000000000000000000000000000000000000000000000000000000000001a000000000000000000000000000000000000000000000000000000000000001a100000000000000000000000000000000000000000000000000000000000001a200000000000000000000000000000000000000000000000000000000000001a300000000000000000000000000000000000000000000000000000000000001a400000000000000000000000000000000000000000000000000000000000001a500000000000000000000000000000000000000000000000000000000000001a600000000000000000000000000000000000000000000000000000000000001a700000000000000000000000000000000000000000000000000000000000001a800000000000000000000000000000000000000000000000000000000000001a900000000000000000000000000000000000000000000000000000000000001aa00000000000000000000000000000000000000000000000000000000000001ab00000000000000000000000000000000000000000000000000000000000001ac00000000000000000000000000000000000000000000000000000000000001ad00000000000000000000000000000000000000000000000000000000000001ae00000000000000000000000000000000000000000000000000000000000001af00000000000000000000000000000000000000000000000000000000000001b000000000000000000000000000000000000000000000000000000000000001b100000000000000000000000000000000000000000000000000000000000001b200000000000000000000000000000000000000000000000000000000000001b300000000000000000000000000000000000000000000000000000000000001b400000000000000000000000000000000000000000000000000000000000001b500000000000000000000000000000000000000000000000000000000000001b600000000000000000000000000000000000000000000000000000000000001b70000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001c000000000000000000000000000000000000000000000000000000000000001c100000000000000000000000000000000000000000000000000000000000001c200000000000000000000000000000000000000000000000000000000000001c300000000000000000000000000000000000000000000000000000000000001c400000000000000000000000000000000000000000000000000000000000001c500000000000000000000000000000000000000000000000000000000000001c600000000000000000000000000000000000000000000000000000000000001c700000000000000000000000000000000000000000000000000000000000001c800000000000000000000000000000000000000000000000000000000000001c900000000000000000000000000000000000000000000000000000000000001ca00000000000000000000000000000000000000000000000000000000000001cb00000000000000000000000000000000000000000000000000000000000001cc00000000000000000000000000000000000000000000000000000000000001cd00000000000000000000000000000000000000000000000000000000000001ce00000000000000000000000000000000000000000000000000000000000001cf00000000000000000000000000000000000000000000000000000000000001d000000000000000000000000000000000000000000000000000000000000001d100000000000000000000000000000000000000000000000000000000000001d200000000000000000000000000000000000000000000000000000000000001d300000000000000000000000000000000000000000000000000000000000001d400000000000000000000000000000000000000000000000000000000000001d500000000000000000000000000000000000000000000000000000000000001d600000000000000000000000000000000000000000000000000000000000001d700000000000000000000000000000000000000000000000000000000000001d800000000000000000000000000000000000000000000000000000000000001d900000000000000000000000000000000000000000000000000000000000001da00000000000000000000000000000000000000000000000000000000000001db00000000000000000000000000000000000000000000000000000000000001dc00000000000000000000000000000000000000000000000000000000000001dd00000000000000000000000000000000000000000000000000000000000001de00000000000000000000000000000000000000000000000000000000000001df00000000000000000000000000000000000000000000000000000000000001e000000000000000000000000000000000000000000000000000000000000001e100000000000000000000000000000000000000000000000000000000000001e200000000000000000000000000000000000000000000000000000000000001e300000000000000000000000000000000000000000000000000000000000001e400000000000000000000000000000000000000000000000000000000000001e500000000000000000000000000000000000000000000000000000000000001e600000000000000000000000000000000000000000000000000000000000001e700000000000000000000000000000000000000000000000000000000000001e800000000000000000000000000000000000000000000000000000000000001e900000000000000000000000000000000000000000000000000000000000001ea00000000000000000000000000000000000000000000000000000000000001eb00000000000000000000000000000000000000000000000000000000000001ec00000000000000000000000000000000000000000000000000000000000001ed00000000000000000000000000000000000000000000000000000000000001ee00000000000000000000000000000000000000000000000000000000000001ef00000000000000000000000000000000000000000000000000000000000001f000000000000000000000000000000000000000000000000000000000000001f100000000000000000000000000000000000000000000000000000000000001f200000000000000000000000000000000000000000000000000000000000001f300000000000000000000000000000000000000000000000000000000000001f400000000000000000000000000000000000000000000000000000000000001f500000000000000000000000000000000000000000000000000000000000001f600000000000000000000000000000000000000000000000000000000000001f7000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000020100000000000000000000000000000000000000000000000000000000000002020000000000000000000000000000000000000000000000000000000000000203000000000000000000000000000000000000000000000000000000000000020400000000000000000000000000000000000000000000000000000000000002050000000000000000000000000000000000000000000000000000000000000206000000000000000000000000000000000000000000000000000000000000020700000000000000000000000000000000000000000000000000000000000002080000000000000000000000000000000000000000000000000000000000000209000000000000000000000000000000000000000000000000000000000000020a000000000000000000000000000000000000000000000000000000000000020b000000000000000000000000000000000000000000000000000000000000020c000000000000000000000000000000000000000000000000000000000000020d000000000000000000000000000000000000000000000000000000000000020e000000000000000000000000000000000000000000000000000000000000020f0000000000000000000000000000000000000000000000000000000000000210000000000000000000000000000000000000000000000000000000000000021100000000000000000000000000000000000000000000000000000000000002120000000000000000000000000000000000000000000000000000000000000213000000000000000000000000000000000000000000000000000000000000021400000000000000000000000000000000000000000000000000000000000002150000000000000000000000000000000000000000000000000000000000000216000000000000000000000000000000000000000000000000000000000000021700000000000000000000000000000000000000000000000000000000000002180000000000000000000000000000000000000000000000000000000000000219000000000000000000000000000000000000000000000000000000000000021a000000000000000000000000000000000000000000000000000000000000021b000000000000000000000000000000000000000000000000000000000000021c000000000000000000000000000000000000000000000000000000000000021d000000000000000000000000000000000000000000000000000000000000021e000000000000000000000000000000000000000000000000000000000000021f0000000000000000000000000000000000000000000000000000000000000220000000000000000000000000000000000000000000000000000000000000022100000000000000000000000000000000000000000000000000000000000002220000000000000000000000000000000000000000000000000000000000000223000000000000000000000000000000000000000000000000000000000000022400000000000000000000000000000000000000000000000000000000000002250000000000000000000000000000000000000000000000000000000000000226000000000000000000000000000000000000000000000000000000000000022700000000000000000000000000000000000000000000000000000000000002280000000000000000000000000000000000000000000000000000000000000229000000000000000000000000000000000000000000000000000000000000022a000000000000000000000000000000000000000000000000000000000000022b000000000000000000000000000000000000000000000000000000000000022c000000000000000000000000000000000000000000000000000000000000022d000000000000000000000000000000000000000000000000000000000000022e000000000000000000000000000000000000000000000000000000000000022f0000000000000000000000000000000000000000000000000000000000000230000000000000000000000000000000000000000000000000000000000000023100000000000000000000000000000000000000000000000000000000000002320000000000000000000000000000000000000000000000000000000000000233000000000000000000000000000000000000000000000000000000000000023400000000000000000000000000000000000000000000000000000000000002350000000000000000000000000000000000000000000000000000000000000236000000000000000000000000000000000000000000000000000000000000023700000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000240000000000000000000000000000000000000000000000000000000000000024100000000000000000000000000000000000000000000000000000000000002420000000000000000000000000000000000000000000000000000000000000243000000000000000000000000000000000000000000000000000000000000024400000000000000000000000000000000000000000000000000000000000002450000000000000000000000000000000000000000000000000000000000000246000000000000000000000000000000000000000000000000000000000000024700000000000000000000000000000000000000000000000000000000000002480000000000000000000000000000000000000000000000000000000000000249000000000000000000000000000000000000000000000000000000000000024a000000000000000000000000000000000000000000000000000000000000024b000000000000000000000000000000000000000000000000000000000000024c000000000000000000000000000000000000000000000000000000000000024d000000000000000000000000000000000000000000000000000000000000024e000000000000000000000000000000000000000000000000000000000000024f0000000000000000000000000000000000000000000000000000000000000250000000000000000000000000000000000000000000000000000000000000025100000000000000000000000000000000000000000000000000000000000002520000000000000000000000000000000000000000000000000000000000000253000000000000000000000000000000000000000000000000000000000000025400000000000000000000000000000000000000000000000000000000000002550000000000000000000000000000000000000000000000000000000000000256000000000000000000000000000000000000000000000000000000000000025700000000000000000000000000000000000000000000000000000000000002580000000000000000000000000000000000000000000000000000000000000259000000000000000000000000000000000000000000000000000000000000025a000000000000000000000000000000000000000000000000000000000000025b000000000000000000000000000000000000000000000000000000000000025c000000000000000000000000000000000000000000000000000000000000025d000000000000000000000000000000000000000000000000000000000000025e000000000000000000000000000000000000000000000000000000000000025f0000000000000000000000000000000000000000000000000000000000000260000000000000000000000000000000000000000000000000000000000000026100000000000000000000000000000000000000000000000000000000000002620000000000000000000000000000000000000000000000000000000000000263000000000000000000000000000000000000000000000000000000000000026400000000000000000000000000000000000000000000000000000000000002650000000000000000000000000000000000000000000000000000000000000266000000000000000000000000000000000000000000000000000000000000026700000000000000000000000000000000000000000000000000000000000002680000000000000000000000000000000000000000000000000000000000000269000000000000000000000000000000000000000000000000000000000000026a000000000000000000000000000000000000000000000000000000000000026b000000000000000000000000000000000000000000000000000000000000026c000000000000000000000000000000000000000000000000000000000000026d000000000000000000000000000000000000000000000000000000000000026e000000000000000000000000000000000000000000000000000000000000026f00000000000000000000000000000000000000000000000000000000000002700000000000000000000000000000000000000000000000000000000000000271000000000000000000000000000000000000000000000000000000000000027200000000000000000000000000000000000000000000000000000000000002730000000000000000000000000000000000000000000000000000000000000274000000000000000000000000000000000000000000000000000000000000027500000000000000000000000000000000000000000000000000000000000002760000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000280000000000000000000000000000000000000000000000000000000000000028100000000000000000000000000000000000000000000000000000000000002820000000000000000000000000000000000000000000000000000000000000283000000000000000000000000000000000000000000000000000000000000028400000000000000000000000000000000000000000000000000000000000002850000000000000000000000000000000000000000000000000000000000000286000000000000000000000000000000000000000000000000000000000000028700000000000000000000000000000000000000000000000000000000000002880000000000000000000000000000000000000000000000000000000000000289000000000000000000000000000000000000000000000000000000000000028a000000000000000000000000000000000000000000000000000000000000028b000000000000000000000000000000000000000000000000000000000000028c000000000000000000000000000000000000000000000000000000000000028d000000000000000000000000000000000000000000000000000000000000028e000000000000000000000000000000000000000000000000000000000000028f0000000000000000000000000000000000000000000000000000000000000290000000000000000000000000000000000000000000000000000000000000029100000000000000000000000000000000000000000000000000000000000002920000000000000000000000000000000000000000000000000000000000000293000000000000000000000000000000000000000000000000000000000000029400000000000000000000000000000000000000000000000000000000000002950000000000000000000000000000000000000000000000000000000000000296000000000000000000000000000000000000000000000000000000000000029700000000000000000000000000000000000000000000000000000000000002980000000000000000000000000000000000000000000000000000000000000299000000000000000000000000000000000000000000000000000000000000029a000000000000000000000000000000000000000000000000000000000000029b000000000000000000000000000000000000000000000000000000000000029c000000000000000000000000000000000000000000000000000000000000029d000000000000000000000000000000000000000000000000000000000000029e000000000000000000000000000000000000000000000000000000000000029f00000000000000000000000000000000000000000000000000000000000002a000000000000000000000000000000000000000000000000000000000000002a100000000000000000000000000000000000000000000000000000000000002a200000000000000000000000000000000000000000000000000000000000002a300000000000000000000000000000000000000000000000000000000000002a400000000000000000000000000000000000000000000000000000000000002a500000000000000000000000000000000000000000000000000000000000002a600000000000000000000000000000000000000000000000000000000000002a700000000000000000000000000000000000000000000000000000000000002a800000000000000000000000000000000000000000000000000000000000002a900000000000000000000000000000000000000000000000000000000000002aa00000000000000000000000000000000000000000000000000000000000002ab00000000000000000000000000000000000000000000000000000000000002ac00000000000000000000000000000000000000000000000000000000000002ad00000000000000000000000000000000000000000000000000000000000002ae00000000000000000000000000000000000000000000000000000000000002af00000000000000000000000000000000000000000000000000000000000002b000000000000000000000000000000000000000000000000000000000000002b100000000000000000000000000000000000000000000000000000000000002b200000000000000000000000000000000000000000000000000000000000002b300000000000000000000000000000000000000000000000000000000000002b400000000000000000000000000000000000000000000000000000000000002b500000000000000000000000000000000000000000000000000000000000002b600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002c000000000000000000000000000000000000000000000000000000000000002c100000000000000000000000000000000000000000000000000000000000002c200000000000000000000000000000000000000000000000000000000000002c300000000000000000000000000000000000000000000000000000000000002c400000000000000000000000000000000000000000000000000000000000002c500000000000000000000000000000000000000000000000000000000000002c600000000000000000000000000000000000000000000000000000000000002c700000000000000000000000000000000000000000000000000000000000002c800000000000000000000000000000000000000000000000000000000000002c900000000000000000000000000000000000000000000000000000000000002ca00000000000000000000000000000000000000000000000000000000000002cb00000000000000000000000000000000000000000000000000000000000002cc00000000000000000000000000000000000000000000000000000000000002cd00000000000000000000000000000000000000000000000000000000000002ce00000000000000000000000000000000000000000000000000000000000002cf00000000000000000000000000000000000000000000000000000000000002d000000000000000000000000000000000000000000000000000000000000002d100000000000000000000000000000000000000000000000000000000000002d200000000000000000000000000000000000000000000000000000000000002d300000000000000000000000000000000000000000000000000000000000002d400000000000000000000000000000000000000000000000000000000000002d500000000000000000000000000000000000000000000000000000000000002d600000000000000000000000000000000000000000000000000000000000002d700000000000000000000000000000000000000000000000000000000000002d800000000000000000000000000000000000000000000000000000000000002d900000000000000000000000000000000000000000000000000000000000002da00000000000000000000000000000000000000000000000000000000000002db00000000000000000000000000000000000000000000000000000000000002dc00000000000000000000000000000000000000000000000000000000000002dd00000000000000000000000000000000000000000000000000000000000002de00000000000000000000000000000000000000000000000000000000000002df00000000000000000000000000000000000000000000000000000000000002e000000000000000000000000000000000000000000000000000000000000002e100000000000000000000000000000000000000000000000000000000000002e200000000000000000000000000000000000000000000000000000000000002e300000000000000000000000000000000000000000000000000000000000002e400000000000000000000000000000000000000000000000000000000000002e500000000000000000000000000000000000000000000000000000000000002e600000000000000000000000000000000000000000000000000000000000002e700000000000000000000000000000000000000000000000000000000000002e800000000000000000000000000000000000000000000000000000000000002e900000000000000000000000000000000000000000000000000000000000002ea00000000000000000000000000000000000000000000000000000000000002eb00000000000000000000000000000000000000000000000000000000000002ec00000000000000000000000000000000000000000000000000000000000002ed00000000000000000000000000000000000000000000000000000000000002ee00000000000000000000000000000000000000000000000000000000000002ef00000000000000000000000000000000000000000000000000000000000002f000000000000000000000000000000000000000000000000000000000000002f100000000000000000000000000000000000000000000000000000000000002f200000000000000000000000000000000000000000000000000000000000002f300000000000000000000000000000000000000000000000000000000000002f400000000000000000000000000000000000000000000000000000000000002f500000000000000000000000000000000000000000000000000000000000002f60000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000300000000000000000000000000000000000000000000000000000000000000030100000000000000000000000000000000000000000000000000000000000003020000000000000000000000000000000000000000000000000000000000000303000000000000000000000000000000000000000000000000000000000000030400000000000000000000000000000000000000000000000000000000000003050000000000000000000000000000000000000000000000000000000000000306000000000000000000000000000000000000000000000000000000000000030700000000000000000000000000000000000000000000000000000000000003080000000000000000000000000000000000000000000000000000000000000309000000000000000000000000000000000000000000000000000000000000030a000000000000000000000000000000000000000000000000000000000000030b000000000000000000000000000000000000000000000000000000000000030c000000000000000000000000000000000000000000000000000000000000030d000000000000000000000000000000000000000000000000000000000000030e000000000000000000000000000000000000000000000000000000000000030f0000000000000000000000000000000000000000000000000000000000000310000000000000000000000000000000000000000000000000000000000000031100000000000000000000000000000000000000000000000000000000000003120000000000000000000000000000000000000000000000000000000000000313000000000000000000000000000000000000000000000000000000000000031400000000000000000000000000000000000000000000000000000000000003150000000000000000000000000000000000000000000000000000000000000316000000000000000000000000000000000000000000000000000000000000031700000000000000000000000000000000000000000000000000000000000003180000000000000000000000000000000000000000000000000000000000000319000000000000000000000000000000000000000000000000000000000000031a000000000000000000000000000000000000000000000000000000000000031b000000000000000000000000000000000000000000000000000000000000031c000000000000000000000000000000000000000000000000000000000000031d000000000000000000000000000000000000000000000000000000000000031e000000000000000000000000000000000000000000000000000000000000031f0000000000000000000000000000000000000000000000000000000000000320000000000000000000000000000000000000000000000000000000000000032100000000000000000000000000000000000000000000000000000000000003220000000000000000000000000000000000000000000000000000000000000323000000000000000000000000000000000000000000000000000000000000032400000000000000000000000000000000000000000000000000000000000003250000000000000000000000000000000000000000000000000000000000000326000000000000000000000000000000000000000000000000000000000000032700000000000000000000000000000000000000000000000000000000000003280000000000000000000000000000000000000000000000000000000000000329000000000000000000000000000000000000000000000000000000000000032a000000000000000000000000000000000000000000000000000000000000032b000000000000000000000000000000000000000000000000000000000000032c000000000000000000000000000000000000000000000000000000000000032d000000000000000000000000000000000000000000000000000000000000032e000000000000000000000000000000000000000000000000000000000000032f0000000000000000000000000000000000000000000000000000000000000330000000000000000000000000000000000000000000000000000000000000033100000000000000000000000000000000000000000000000000000000000003320000000000000000000000000000000000000000000000000000000000000333000000000000000000000000000000000000000000000000000000000000033400000000000000000000000000000000000000000000000000000000000003350000000000000000000000000000000000000000000000000000000000000336000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000540000000000000000000000000000000000000000000000000000000000000054a0000000000000000000000000000000000000000000000000000000000000541000000000000000000000000000000000000000000000000000000000000054b0000000000000000000000000000000000000000000000000000000000000542000000000000000000000000000000000000000000000000000000000000054c0000000000000000000000000000000000000000000000000000000000000543000000000000000000000000000000000000000000000000000000000000054d0000000000000000000000000000000000000000000000000000000000000544000000000000000000000000000000000000000000000000000000000000054e0000000000000000000000000000000000000000000000000000000000000545000000000000000000000000000000000000000000000000000000000000054f00000000000000000000000000000000000000000000000000000000000005460000000000000000000000000000000000000000000000000000000000000550000000000000000000000000000000000000000000000000000000000000054700000000000000000000000000000000000000000000000000000000000005510000000000000000000000000000000000000000000000000000000000000548000000000000000000000000000000000000000000000000000000000000055200000000000000000000000000000000000000000000000000000000000005490000000000000000000000000000000000000000000000000000000000000553000000000000000000000000000000000000000000000000000000000000054a0000000000000000000000000000000000000000000000000000000000000554000000000000000000000000000000000000000000000000000000000000054b0000000000000000000000000000000000000000000000000000000000000555000000000000000000000000000000000000000000000000000000000000054c0000000000000000000000000000000000000000000000000000000000000556000000000000000000000000000000000000000000000000000000000000054d0000000000000000000000000000000000000000000000000000000000000557000000000000000000000000000000000000000000000000000000000000054e0000000000000000000000000000000000000000000000000000000000000558000000000000000000000000000000000000000000000000000000000000054f0000000000000000000000000000000000000000000000000000000000000559000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000580000000000000000000000000000000000000000000000000000000000000058a0000000000000000000000000000000000000000000000000000000000000581000000000000000000000000000000000000000000000000000000000000058b0000000000000000000000000000000000000000000000000000000000000582000000000000000000000000000000000000000000000000000000000000058c0000000000000000000000000000000000000000000000000000000000000583000000000000000000000000000000000000000000000000000000000000058d0000000000000000000000000000000000000000000000000000000000000584000000000000000000000000000000000000000000000000000000000000058e0000000000000000000000000000000000000000000000000000000000000585000000000000000000000000000000000000000000000000000000000000058f00000000000000000000000000000000000000000000000000000000000005860000000000000000000000000000000000000000000000000000000000000590000000000000000000000000000000000000000000000000000000000000058700000000000000000000000000000000000000000000000000000000000005910000000000000000000000000000000000000000000000000000000000000588000000000000000000000000000000000000000000000000000000000000059200000000000000000000000000000000000000000000000000000000000005890000000000000000000000000000000000000000000000000000000000000593000000000000000000000000000000000000000000000000000000000000058a0000000000000000000000000000000000000000000000000000000000000594000000000000000000000000000000000000000000000000000000000000058b0000000000000000000000000000000000000000000000000000000000000595000000000000000000000000000000000000000000000000000000000000058c0000000000000000000000000000000000000000000000000000000000000596000000000000000000000000000000000000000000000000000000000000058d0000000000000000000000000000000000000000000000000000000000000597000000000000000000000000000000000000000000000000000000000000058e0000000000000000000000000000000000000000000000000000000000000598000000000000000000000000000000000000000000000000000000000000058f00000000000000000000000000000000000000000000000000000000000005990000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000005c000000000000000000000000000000000000000000000000000000000000005ca00000000000000000000000000000000000000000000000000000000000005c100000000000000000000000000000000000000000000000000000000000005cb00000000000000000000000000000000000000000000000000000000000005c200000000000000000000000000000000000000000000000000000000000005cc00000000000000000000000000000000000000000000000000000000000005c300000000000000000000000000000000000000000000000000000000000005cd00000000000000000000000000000000000000000000000000000000000005c400000000000000000000000000000000000000000000000000000000000005ce00000000000000000000000000000000000000000000000000000000000005c500000000000000000000000000000000000000000000000000000000000005cf00000000000000000000000000000000000000000000000000000000000005c600000000000000000000000000000000000000000000000000000000000005d000000000000000000000000000000000000000000000000000000000000005c700000000000000000000000000000000000000000000000000000000000005d100000000000000000000000000000000000000000000000000000000000005c800000000000000000000000000000000000000000000000000000000000005d200000000000000000000000000000000000000000000000000000000000005c900000000000000000000000000000000000000000000000000000000000005d300000000000000000000000000000000000000000000000000000000000005ca00000000000000000000000000000000000000000000000000000000000005d400000000000000000000000000000000000000000000000000000000000005cb00000000000000000000000000000000000000000000000000000000000005d500000000000000000000000000000000000000000000000000000000000005cc00000000000000000000000000000000000000000000000000000000000005d600000000000000000000000000000000000000000000000000000000000005cd00000000000000000000000000000000000000000000000000000000000005d700000000000000000000000000000000000000000000000000000000000005ce00000000000000000000000000000000000000000000000000000000000005d800000000000000000000000000000000000000000000000000000000000005cf00000000000000000000000000000000000000000000000000000000000005d9000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000600000000000000000000000000000000000000000000000000000000000000060a0000000000000000000000000000000000000000000000000000000000000601000000000000000000000000000000000000000000000000000000000000060b0000000000000000000000000000000000000000000000000000000000000602000000000000000000000000000000000000000000000000000000000000060c0000000000000000000000000000000000000000000000000000000000000603000000000000000000000000000000000000000000000000000000000000060d0000000000000000000000000000000000000000000000000000000000000604000000000000000000000000000000000000000000000000000000000000060e0000000000000000000000000000000000000000000000000000000000000605000000000000000000000000000000000000000000000000000000000000060f00000000000000000000000000000000000000000000000000000000000006060000000000000000000000000000000000000000000000000000000000000610000000000000000000000000000000000000000000000000000000000000060700000000000000000000000000000000000000000000000000000000000006110000000000000000000000000000000000000000000000000000000000000608000000000000000000000000000000000000000000000000000000000000061200000000000000000000000000000000000000000000000000000000000006090000000000000000000000000000000000000000000000000000000000000613000000000000000000000000000000000000000000000000000000000000060a0000000000000000000000000000000000000000000000000000000000000614000000000000000000000000000000000000000000000000000000000000060b0000000000000000000000000000000000000000000000000000000000000615000000000000000000000000000000000000000000000000000000000000060c0000000000000000000000000000000000000000000000000000000000000616000000000000000000000000000000000000000000000000000000000000060d0000000000000000000000000000000000000000000000000000000000000617000000000000000000000000000000000000000000000000000000000000060e0000000000000000000000000000000000000000000000000000000000000618000000000000000000000000000000000000000000000000000000000000060f00000000000000000000000000000000000000000000000000000000000006190000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000034000000000000000000000000000000000000000000000000000000000000003410000000000000000000000000000000000000000000000000000000000000380000000000000000000000000000000000000000000000000000000000000038100000000000000000000000000000000000000000000000000000000000003c000000000000000000000000000000000000000000000000000000000000003c100000000000000000000000000000000000000000000000000000000000004000000000000000000000000000000000000000000000000000000000000000401000000041c72e330b60e0052863df88b19ebb482d412b0a7bbb2fabb9347be5e59453d10078d263242fac5a2ad544b5005bcea367ebc04e01ff7ca279650bc63d9488ac304ad4d395e21ea570da47bf574569c6526312c5c7ad63a6d248f694e5c81c2b60e12693b411d9eb8f564aa43f4aa14e3e30f8574425a6d6491416332b77d2709000000000000000000000000000000000000000000000000000000000000104041414141414141414141414141414141414141410000000000000000000000000000000000000000000000000000000000001080818181818181818181818181818181818181818100000000000000000000000000000000000000000000000000000000000010c0c1c1c1c1c1c1c1c1c1c1c1c1c1c1c1c1c1c1c1c10000000000000000000000000000000000000000000000000000000000001100010101010101010101010101010101010101010100000010151de48ca3efbae39f180fe00b8f472ec9f25be10b4f283a87c6d7839353703914c2ea9dedf77698d4afe23bc663263eed0bf9aa3a8b17d9b74812f185610f9e1570cc6641699e3ae87fa258d80a6d853f7b8ccb211dc244d017e2ca6530f8a12806c860af67e9cd50000378411b8c4c4db172ceb2daa862b259b689ccbdc1e005f140c7c95624c8006774279a01ec1ea88617999e4fe6997b6576c4e1c7395a22048b96b586596bd740d0402e15f5577f7ceb5496b65aafc6d89d7c3b34924b0c3f2d50d16279970d682cada30bfa6b29bc0bac0ee2389f6a0444853eccaa932b2a60561da46a58569d71044a84c639e7f88429826e5622581536eb906d9cdd25a2c0a76f7da6924e10751c755227d2535f4ad258b984e78f9f452a853c52300e212d8e2069e4254d81af07744bcbb81121a38f0e2dbed69a523d3fbf85b75c287ca6f33aadbac2e4f058e05924c140d7895a6ed167caf804b710d2ae3ba62b1b51297b3ea37637af6bd56cf33425d95cc5c96e9c2ee3077322fbec86a0c7f32c15d2a888c6cc122e99478c92470a1311635142d82ad7ae67410beeef4ae31f0902ba2fb964922a4610bb18901f7b923885c1d034da5769a48203ae6f0206a92855e2c01ddb3d6553386b5580d681b8230fa4062948668f834f23e0636eaff70aaa64519aafdf4b040bd2f9836e76b9dc13cfec8065dcdf2834d786e06260d10000381000000e00000001bc00000090bfdcd08337fe03f63280a2cf369c7ccf35e43aff0793c9ddd955b301e81f00b9e362c0938d848201e0205ace64e527442f3c22ec47ca9d64eb102da513bb5dae43a6156cb09825a97271af58c2628cae28f3dc079133de833ff9723aea14834ba0d8674f5f864ffe29f4ee310211634815ca3ce2a49ca4f9a63281d0b6c87c49130bee5526a50fb4ebef12be77f9593300000090b90d6304a1a1e2a75a26a7fd01a47ce5da486052171176b2bb362d7e8964e97cbd596a5f09ab4d1a7f43fc1f0aae47c168bcff23598bd08723db9e00eebe297400c50882db5590ed95975a301b3f7e6f21c385a60fc3a18977c508a82c7b08c6a8e9c67a2ede666b63a5553387aa69e92864b9d1ecba7b3d823ae6023234c26342f6a996610db8d08e1c06a83e91b3eb000000906eebd78b4302d9cebb26694d1948b212f326229f62f3903ed294f5be48efbb9a513a55568fb606e754ed3be2901056fe79f45cb000c991b4452152db8172706101da334634fa616eb2ffb0dacb3f91912ebed4b95c5a83df317150e9b8d703bfa1182c92992436ab725f0ea6b233bd7c2503640f02adf889a142c8a00e72ab9427b4ac947f2084df6f04ee36d5eaebe4000001bc000000909492a373a15e29e484ed48a05bdb7f5d915262d15e6eaa3d5994b6264a0877bdae38835017d02ec7cf9cffc7ec9e5c6d5c24cb9e62d9d9a70407bf6ea0babe841d2c5af40853bd6184eef122c3a36aea05591adb29fcd7dfcd03867493057a47cca620351794d32cdfc1046eb96a5fbf00c5a65f750bcf552ce10122b9ae01bf2369e726a7272246fa33225daad8d7be00000090a6cd6e329d4603d822c0ea8c525290657e311ab5a4a67b18e919a362cc09a3439facf247471607b0af1db1b23db0b169dcf322f41873c3722085b4304b18f1be8da5238e78147a284cda89210b16b63a0d78996d032f8956e57b336ffbd1ebcafaf5d1b9378818db0f7caf12ec0b67f504bd96f168bfd645032d68c2ea2157f365627271e7915eb7549c0a2807da8f0b000000909bb463046cae08d320ccfa0affcdbe9a851e947b8a9223fc707e0af04359ba0f35eb8fc00ddc770367dda905d57b0c47f578408d21324283579ae24da5041e84ad2132165c0ba6aa0ce1ff955c09f4bc0230ddf350ab23f9346f3d364c1a748244674662832ec90c20c39410e097fbde1bfad0ccf4e3881d98881f7ef28726c414a0a9c0eb338c95494115035ba50427000001bc00000090325b18c6c33fd1f707af062923a37ee43f968d66f3924f865977f34c1ad9f98c5bdc780faacb84ba4a406cdcbff37afe60a482b7c6b03713458e45c4023508e02736e538dba5dae59f351a64989c54c3019aad385676675bace82d0401361f0922cda9aea6539d5a759423748aa3373213bd80dbd64d2f4a303d68e3dd8a586e1498e27d4e77c299afc1cc412c4a2bf900000090f475de7d2fefdeccf8687f0354c1083bbd88c1dd819b83b826bad2b55d8934b8ab2f384267e0046c6c3f08ec1aa4f605e50ffe007ad82c150a8cf57e576e88256ebe940b95932af547b58ea466d09de53033e584b0588a8936c5848ca5ab4d43799654cc7951c2404ea45a1ba577b6460ec1a5c6c10e01b67074bd8abf0f708211007437cb12181d13a0dfd9084cedc4000000903ffcf81d7e8f3b88ace9149d5f3d96e79d4e4c92d32cdb5ff187b97ab1e0ae241d0719796df829b5d13420c62365bd14b7dd0682995ef5aed2322898b886ac63635f2af3abb2be9f9c1a60114f321fc51f0f3be138895c531a8b2bc658f212b360ecdeb3364a2871517340db19cc55ae14245b19ee409d3b49639ce6c2a6cfd8e2ef2dbb8eefe60d3758356b729030b5000001bc00000090cec69bea684da9c798c830b653e6d839ef52b9ea785033fab856e138eee0580f916ca65cf70d4d62eac94a888532d4e8a39745b9b538608cbadfc6e63030dd072499e54cd8a8c4b5ac322052b45495d72b418a824257d6421b186be613c3609591792d8f3d1fa17d696462aaa33802031a2369595d84ad857f6afd648e962259d22c3a5eca711a408db5d976739a8e7800000090ea872927b14822f377dd547f6594f7a9ca9108597ae0fdd2a1b689aa024bf5f554179b60630e72b689485a8c511764b9a1170061d61eab286355b0f76fe12d5061ddbaa41f7a86491c65b7bd80edd5c21a3cf70bb7f2c77545e5892d45e6e7168da2a57159a30415f596020342c8a923243ed549640934d5f7bbc410e78d3f6ed1b51ec4ad6d5c21761cbb525061863500000090662154bc0f709dee1b6da9e0f494c678d6b62c4eb5632e9808d308006876c8ae5ffdf8ff953a0cbc353653b8ea23fc8c419bbd45e0c67230153527c17769973373daf7fc4eabd02e49ada46d2b9bc4670b7c8df8d86919a37d321d00cbea97218f3e720abb8e44eae3bb131579054ede02d271eee56a1ec51c510f739de6e439636649e5890b1db9cb524d1aba4dda00000001bc00000090aae6b3bb98df35868534c5b9269ce3660f5199f09efa88ef41d29231db5d43f8caa430f11cee13371a5cd30fc8d2673f6ed0d207e94e4d18739883bffe62aa8ded4a917b3c9ef1cf71add4145795158106a63ef3b0e0b87b8daf5975ecec8853b30248d74037928f6382304ac658c56e06868aee99950622a5bc9ba93ba409439d5fd18caae43ce6fc9724b90f82819c000000906c3460303e4be74cdf8a70d7ede1ca80d21f787cf01251f9c3f09412be9c54523c57082b36038d042702079bbf472f27b76871d49fdb08bacef5cb685c089f437f672e9ef283b5af134decda0a0eb096080901c72cb49407d7eccb8f7bc28a5ea825ccbec4272440604698adc74d8d08184c42d4e5ed289e39ed798dc4317fe42346e8bbc75bfa067819baacc025ef4900000090fb6295f00f4916b9c34063b6886902c95b4a6a283edb55056a65f239449e2491a3f155c0fa344e6f4143fb0b07d1a23af304dee6fcf2516b00e4116b8ec94abcc201dd247d876a15a9f0114b0e9ee6820febd6b7fc5b174379386507df5226ef39b03786895181adb3cf9a85053d822c24dacaaf88dc485a29831103030cd193df7bab2eb46ea3520ae2e5af40253e19000001bc00000090af5581b204238f0a91be312e31b7e723355c892e0fd83e2ed7d83e060102d9dff79fb8b93956d3c973056544dcbeee18ae876dd92a8ec4b8cb298f3cccb180e62a9621a7dc4fd4db5bcdb81a58c6e0b30dda198a7e4c98cc05fb3f7e22c26bc471a82763c7bdf71ba2089f2870cb358e1a81c63e307b6786e144d32ff8f7d242d5a4cc4905ca8ade3450819f40f62bba000000901734d7c29a68fa10b42884f2d9d94cac0fbd51e1b29bfd357502d07b84541ef1840db8635d11dcc279e5c80c824d640102fb72d65b1f5358f319a41f04a5027a052e659070c5a884bd3f2687905ec6481d12e198b31dc041a71c48d246054bb1a7504cf64508aefe10562f450dea314f2cf7bb0c3b4cf10a77f84d1929f9749427f7ba35c5ec5fe89b89269187599dfc00000090fd46fbe6ad73716f807ea8e01fa347a289e5bb34f20d9177db71a99cd907de1a00e4870fefcdc9926d000b70e250761434ff4b5f7a32e365c64ecc58478475c48306acc1a0eebc83f26d1810dd425d190f3abf8851dd256a5675f513bd32b41480c90c4cee390bf5768eb2b128dba6782ff0163abc58d5c0423cb72c2119657bfeaa79440661497291d8fddb51315790000001bc0000009057435076acf526c8d094c1f90f2eba481ac4aeedf22785b7993480a9fd9edf84e1f20efcfd819ee40512e70d23e6052111d31fb936c5e1573f28f547ac69ab3c395dd251fc67fc20434a7fb1ed728af001b1ab784c75380acfef145659c650478d05e29242cb8a776ba9a817545504e122d5c4ac31673df0dccb3dce42c532f8e303dff8df56a46a51c1b471ee6e62ce00000090d149c5b34b8ac0af0ef0286cb97bf79f178457a015ba4897d20c4548c6efc0faa55296f726e58fe70fc9cf1c0d50c76525dc4c066ae39716503153aaccebcd68d23b46e69995dd8ff1203b136cff5dc02460d102181fe60a9e7dd10597e34537802dc4e06625769231716ed4721ef7692f8534b054ecb783bfea8fd0a94dbc547a1caf7d676681c41a8cd098e9cd980000000090b3390db727cf66e9b3b75c782ee74fa73b8b6ea5d31b8fdd0ad979f67fc2e846048faa36a8cb5f299db798204c43ca249cb8c09a5643bdf6829b98e3aefe52ef341829715fc68325b5188f8004d3c18524fc9a319a111714dea5d1df8ad16c495af47e9ec359354563eaaf54fe4718a40d25bc2c6211aff87ad82bdd9316d52d6275051fbe8e54d483b5592944e0b3ae000001bc00000090057adab012f4d4453acfa42db8436ba3f97db2625af4132c98b48a6ad9332778b0d9d9ce5ad19b2c84b0cfd1061b23864bf881a10902d1480f6af94f0b57339f0ac3663e95373617043c091f72cc38ec1023aaf9c08dd805f8ed7976ef429280d67480c81e249185314d9815bb2ff5bf2fb1161b943eabf73e0177ea345347e2ee0e1f6a14c611593c3a792c565fef9f0000009078d548653302f85cf0e631b32ec80c280a514ce313711132bcf26dece8b4649f93f846b3b00e6cfc4ad23d845d068daff40b5ed4d0937e24cb83cd9227b997abd71235a6bf4452a19353f40605b426b31968eadcf8983a602282a74572088dfcb7dfe53c6be0a9c4b17fe6567604ac5e18582657ad13a180b25ace07980937bada8b0267405243e7c5c59ad15e8c5f84000000902a4346908ddf920cdb02714ddcc708dae04f9cd6a6be5bc43d68f5956149b41c0e5c3c55ab3bd61ecae7b2917283359a74b326cd50045413147ee5c1816fc8607ea610150f9916eda602599899cb8e952cd36da473cb6a4313bca6bcd82696d5f8a62c6eebef5ffe3544d6759fe9ba4a142cb88a5c1e06d06370a19621d13e86d618390502c94764524880af5c9a117200000e00000001bc000000906193bbd3b5872689b02866e80f9d42c766061fe9e9b15938252342d63440c2562f87e5fd1496b4e6492e17b28af086125e547d6c94d14c6575b3030db35f6ba894b7a1d767a6ade62f5bbf2d69383d6e2c8786f2c169d8a9370167e2e601575da23b6612007708886b39e64efbc5e64519e2debcd90c2d6a7df339f9aa2721bee85209e4caed647259dc5e1d25feb824000000908481fb7c431394a166f023731b8a6d976872e9242245904be6cd5ff69411d3d262b1056f2ee2a8eb30b1585686cef3796d53863db4ff67c9dff0fc7bc2c20e693792ed6029ce71771ebf749660de53a809163c7ff495f42a41b42da3a404bdd74b9e79106fd4cfde855b95d5b6fc38e221c2ee8b3b29e6be848b229c88758d55e887cf5eb260105877b76dbda3473e40000000901092698560db4a43327605fcb7f60c6ec61115f5fbe85aa1350a43dd5ad3de1162d76dba2ea6a93045b19c35fcf036be7a55b54d84516226a3c6072d7e083bdbee2fa3aaaee6e5049f8b0971be171db9051b8f83b5cadeb7e3ab424687fa50ea320230d7d5c5c42285e448b00a5dd993144811d7c933c4bf7284a292b1b3bd2837c7ad453f82a4b5311b3923f91d3fe2000001bc0000009058b1aaeb3ee1703a1748423c0acecbbe4c8d532aa91a25e5fc46e762d13f4f5be41287878d10e441d12df7f81c8b03cd87fcb46bacf56586cbdd132c727ec1eb9e89f90dcd782bdd033433bef0d6354c2fe9c958b7812ba1344f9c62aeeeffc12de93f20e99452677560c7ac5377b7271d5a27b22002cd8d2e7096add33b7c89ebe41298168c59d6200e0983f175565200000090c212b49c808667f96db6955185eb40172286cabd1dc17d6007579254db5735c5e303aeca271e2d1da3c356d29f142c4c090d1af0e3e911f2d3104117ed2f20a7e94dac5e8d10795458bebdefe2f977bf1d62f93c0e8060c3211cab385f4914cbb5da29fb8cd88bcb52a9a58ccfccd03d02aada4c34ece9245bcc8680db6c1cee213f9a321a22d6d2e987b569331586e400000090190d4f175cfec2327c5ec6c96ab3a177ed81352415a91ae95d117174befead7decb8ab7d465833844892ce7798e80d306963aefdb29eae136162f948962743cf291611dd6fd3fbb9acfac7137333ca6f2d8382844566f5dd083395b33f322892a036a314e30beefaa4a69be532b1f86d2a6d7ca219b70c0bd5daa77fbcb6ad3859ab954e3b2a3b5dd559ccf1e939140d000001bc00000090f6bfeb07dc656d2c1f4982b6e6ccb10f907728c787cedbd8807294d58183bbeae452ec46c811a96d3c8d932d25f666e128936f76fc49bb000f6acce4296ce5b043a185df0d536b5a2623f2af885bb6b219aaef22402789e011ec837cee586f698951f6c1a218850d4444c859008f4fb304a2d218dbcb1e622bbbc09fc47fd488e6cc8e54256ab03c64b4e02de9b6003d00000090cd917a50163f09863179732b3a280ca99afccc62ca45fc305230e90d83d21d0a39b6f6830cfe171d4bebaaa8f179bfd48c2396e8599b6b874b08e242c6da91c915b98329247d9676370b66e68e2d3b6d00804545a18bce72da85f4e49f5acbc20caa99f0e16d62b3425964004c8a6f68299e046dc5b4910d102ae086f1cdc7001883e6c46d16beb81e33b9801d9dd16600000090fba90e69959ef22d052201bd6d282d7743b4c504d94ddea02ab38dde8e30adb66a834995590126fda990e4ca2bbb9404b511bb3d6478d16503f4642dd5820c4dfaaa07a2436d3583f4dc862bd380b0852bcc89a17a33e864a561834d6cdc0cc08680c9efe670f589e38acc702b56a6732aa2af0f85641b41147da8e6b35152be22144ea5028b26c47fa8cd05d493f4b1000001bc000000908881586f35306647153212b73d62624d436858c0acbf1d6aeb513543a6900661e8832b916a2268a1822ec20a16aee793c20ded0f22f8fa3c1d810d3cbce8d6fa0a5e4bfc8dd5c54f282b5e8f273800561326df4cf371d8af86c7f5f71495442848b5641c8acdbf48fca863a109f7f2d22e0df6be52f7be797f9376e5d68d09c557593db6419667a33155d32cd186737d000000908479d8dd4f015fd5377f3c85b2a382db339d83aa186e6d7d6769e0a07b39dd21c91f84b04afe5622bcba8323f3574e8c1c83a1e87be0f426796f603c30eca407ea537c9fbcfedbac245ae49a7136f3f40f4ba1da791d81a88730b0ed53dcadea914e3db13d8714ff90c0556ab8fda9e7215a9f9127a3dd5127d2c1f22b1cace62534ba9125a5806bb55dbb75feafdc6f000000906e135a1898ddd8249c457bce03912300b2e6ff3abe467e27070529ac5d57afafa07447a348d9fbe1cfd2d8f21258aea3f271b5763edd38d76072624722f558b21bf58d7d3e4b12be621f8e0ec17c997028ba1185b1fd1392c09fe5d8c0fb214a0287d2ac5f921e95150b1387517aafbb2022d763713ea37919487715a6c7287b598541c6ca6a58d4cfd020514cec4d61000001bc00000090f6dc2223a34cc1feba1e3b7118b143ced4e4853a7ace0df98b51a057b2e89586a8b60cc501ac4b87a72d1f686c0f0e240c58df1e177c963a41c368f64ca3e54274a4e6028675a2b27e4d3dca8c68c2680ef6b8682eeedd73c62fd603cf4da600c467fd0fd22f65dda7cbbde7272ac487161d42e2151dc044c490d320b8e30be7bd744e1d1a426ce6266da0388ad6718200000090b242a9f27ca6101d1f580df67d36c7a71362964ca01fec082f00aa2f1fe09f8016ee01e095afd891f7045e6af8fef04e5fae055a5037c7a9ac6bb07d7df7a5d53a72f3eef50f0bc12c235e63bf9d354e016c728992bf26c3b37e2e00cf8b5e9174a6d72170621fd3cedc8232acc96a3c261228866808130a05ad8737a1a3176afd67ac622cac5e32d32cf3e6e1fc40870000009046c6d1534de29f239f1fe4b52438bb850c67cb3f311fca85abffec6a70ec29139bcd4e2ab8824ed0b315acb615247834c0953f9890fd35581965158b6b358d9c4ed304e44b43efc531afa668e8fd09830a593238e9820e1e94560de248e98e7c91bf602d93edf56fe618b0cca1e04b0809da198072aad17d931e5f0cc2b887988053f732a11fc08a28c109a8c7219adf000001bc0000009086a4ef8cdf71aef002a9af10c8c658e694b583629ba9a11d4dfdd5bebd6da4bc1d417d91c990ed237da3b058c3b8fe271fecb873e7e39df300f253d7fe6122561e5eba673c0d4e6ae650c1c369c2d06e2359a8190650b821c53a8198bfd6a9d0de8ffe1a4ece50c8df044ac86414ae740cf38b97801db898226a5d6c4c1375df1212bb0651facbae9b4be427fa8ab9560000009014da99e01b94a12443823328de6cbd92efd5418ca19d1a4b22823076d0ff42188beb6910c51b46d7df9dea84ffda3c6772a4498e1404dbd832bd6533f54c2bc2ba5e161f631963fc031a76db1e373ded27f0c9a391823a471008606b7235e022557d46bb9dd6c8d14813faf627a7242d2c336f411965ada4ffc72e485657f91b2ffeae969254c914bb060ae0171aa62a0000009072c836fe4701be71bea5d91820a1615f221977ec94d3f236707141b7d1a7c401aaa344e4f19431dcd8414bd009f5310d6290e6c5a651d3acd328b8de88a6089761d48fc7b226c9551263fd4b36e8d52023db1482059fdefd6fcd6a21ee08ac8541cdbe20667c8ff81453618f68ccc5292fe4bcdea994b8522e70240d2c54bcd16c746e9efefcca9dbf58cf9af2720760000001bc000000907b4a49c226219a5981db67f8304472868238f50362c49b29abca5b39ad58441be3d87e71d4afb01de50c8a2efe64705f9a4e4c128008b5dd5134f524ac282a452f1cd9451ed523268bdb5d0e630fe1271ad27ed506314efa637023ee2536f20898904bbaedb2f52315aaff5f4396422a0fded308fb551ed80030003708bdae88f96c33265dea29f1dc26186e50541972000000904068e15eb79ecd48798695d68e51f307b1cdf86c62583eaa140cf95099a9d24b1f19a37896342c87229301ab7a917fffbccabdcb7f36b82aed7c763194adb7e0b740b878e041358b9293a62200adb08906dfa5965a00ec40a5ad59e3f5b7955190efcb1ca25ced227ec1386ae561f8f81aba79ddbffef1a43ac57dd8d4cd80ab96f3ddd6791ee37140b774d20bef65ee000000904b0eab556fb57bc802d95dfc7cdbdca79b1029fa767ca5abc9cde00cd1f337fde28813fcf5f1b280bd06c87e35febb9be28d5ca66b61e009582ad23b1ad7518951b4c59ecd62cee9a38798fa15dde60124da63987a5a6060ab1eb3abb18103804f2ca6096c0c8470422a7272ae6afeec2c6d41cfc4f870161db4e527e961f91ef6b4c8a34cd114b5fd2cbab068646d45000001bc00000090cca132397fd57a89e8cb7e32ee7703f09ea03918fb6b2738948e06035b59cc4b5dcd84322d1d843bc49f5816d807235efee991cb8bce57eb1ec9071d82afd0227edae12f2adf1903cd409f23fe2baa672531110225f8a962a585907a253ccb80368bd249f2afa39515e0f88c90ab70900f7676324450149900921e87d537d0859e2b2bf3ff3a8dbb89506bad25f65a12000000903b1d6c5abdcdcfe23bbee9cdfe6f58a35766b119f534984a44c0002515359682668b0d38b5bcd6b57ddb077eba794a0a2c5ed5331357359b3a2ae54de8e7a129013599bdff1caad591e9ad202800531b1c425e3f2247a81dd3776226c3fec51da925584016982ebece2357537ef6538e1c340bbd9fc13a827365ed687767c36f85fae145b6da63496863fa99cd5e8f3f000000909ada171614eee5e683f7c3495d5e6473f89244270a08f002514a06e617ac3ad5bf38742ae13d05af6a313225ea4ea18ba6a54a9c6eed78f0b19ab3d37621ba00f04f1220c9b362892e36de5e7c8d8f9827841ae223cb6b69d104ff28a03cda40aefce8f002ae5a449a760ba3f5a7b73427cd037bb2fb927afd9b0b938d36a5271585edf8092300728c3a4c0ac9995a6200000e00000001bc000000903ceeb1cdfa796c44a48787124ca54b0d0885b62c0886172fdfce7b0ee4c7785a5a9712c66f8432cfcaf83cb8d219f0f569bbb3984c2d791a757a0dc53076b1f073cf3a261b9add7749b36b8e0570208322b33f9195b690914ce313673d548c03b6d522b7f0ffb01f20b1d04b75e6a07d28690763164702ac47f5c195f6b77731e8386e78364d1ad6f5031764c7dfe93700000090676d7f1a75b267b035c386a6691f6c97f22b547c639490d6b72b8a195eb5247d6f14eeb031b856c83eacb7136af50111360b7c611488bbd09a29445a683df6717c7c79032a14298b47a172eb2dd996fe2f402c4c823277e679d6c0657f11b5c0b4588f6f353dc72affb7bf3f264cd068018693a8e5899e281921607276520ec0115b822be5d7ac7144dbca5a2fbc274900000090858d26aeab7b950224b309c3ea972f3f7c4e1704810f92a7ee2c92e3e2e39907494e4f58c012d92efbcf17f647fd1a85f51b00a286ff00286021519b292df72cf364c076c5f20571625f743c4335c7541cacb46e788aaa14422652a33857f3616dbe11c8c4485a4231cbab57f44555900a9d7027de682c4989dc3ffd610fb3836698119fc7751b97f57154bddb894d01000001bc00000090be437cdd2dbd6dcdb56e895712bcca41a40a7eb9f78f6b4d98a78e89a8ffe4fcb1bb0ce14614ee707e5d1f96f52cda69aae6ecd6db98dd8be2175cc80e116358dded66fbfadc07413208a0ba6c39f122142096721fdd2ac4b589dca6cdd5ba3b382b196b8dd4c784b4aee413076a76f706a680dcabf36d240ff2874293ea4e6da437bf3826beb90175509be9ac6f142900000090c75fa978feda0b283d090129cf033dc80bded4673ed522781928cb488c6af5d89ca823bfa4f787d38eb0800009a34a3cd910527bb5697247b1cc324692bd18c79d69fcf4924918fab6d9a022cd23e2e71309139a6155e503e4a72c2b8eeed06ecf77bc583c048fe464033aa16df8db082ff7224158ae2292e65f6506243820c71382750db1e5eff51e3fbdceb136678600000090542e231ff944d7a6d368a1e275f466d0f5c8027462c0777917f4241f5cc4bb6588a5b267934f196e4e14f3bfca4c236e472404b8216368a50cc093c9e6f54925e3066c7b2182579835517f23e01773f42861f27c164563c125304a9a0bc05e360f5247993b3681b372dcb3e1cc1759bd0b487692c8a1ea037de33c1ddc421081cea054011e0534da577f80cdac6737b8000001bc00000090c9c95691a653bfa3c1f225ee09c4a146f3e44cfb15f7c6eda933fc4e293f1868899ea9d5f5af1bbf064ca30b387361dc4196fac6fcb9cde5f02248db01e36c3a5369527eb6a7443e0b23701739d3b0ee15be2d8dc975f9816f0381f35290e3e9f81167f857ca3cec39b8349e66d5315829b2c132900d281a1a536592b03ba24f0474c31c871983700ff2ad5bc79f6efd000000904ced88be3a1d1d6b2a2ad45f4e33b3be10e81dae731910f96bc4dcfab5f6ec953838ff150848f073afc6b63a356dca9a8ed76bafb3cd3be0092f03319ef653cf8b493caeb7b8dc4e246984f04728920822560e880f75f667ec365179b419d121909806687e3c39d0d79d2ffcfe1bf5771826339f591d96d26977dc6cd99a4afd5f1c15b267f98e3fe98faf13077ea67d00000090c9cbbbb0d06a0c0436d5b1049250d3e0e69f2b1e8280341daa2c938ccb2be7d4dc4df3e30736703ebcbcf80e763fb3da8340c35fdd76ddca6254d98e0926f535ef7c13576f90712ae3d3577ad9c77abc28eb76d1e8c5383b175afbacc178c605269addaafda8e6a96ba13c398ae998e50d6e17ad2a6ed270e792454a71489bfd841376907c9816cfcc8840e26dbbeb3c000001bc000000903baa23a47b953ac5924dd7102b5e28888de9b1339d0acd9668f686125425137daa2deed835b7d1ec0c7ee1936ecdf812ce0234966865645fa527cad951fa758198e2954c5f5967ff43c6db83414cb49323fa38e3a4aab44ff18066aab8f48b533b88141b03bf70d2f80c0ad97a1c63641182865d2cc58709cf942217a690933ac579ff62a2e2b2e70ebc5aaedb4e58f600000090d61cb85ff6a79818a961a75eb71b2caeb21061760677bff2e628e5dc611f31b0072dfac739c4290f9f2ecc331bd694d38d550774eadde3a171cf30ea1b6eee309634e4eae633c7270c90023a15e24cb81159c7efa48bed63f9a39ddd338448bf06ec844c11c382f47c205c5459660ab028b5d1f60a89cc67272feab2310c81b3f57022c9cc11bde336aa4a4296edc26e0000009054a471dfa43ad6b05b23ebc07ca543471ad39ef06c021b616af0d27fc7355215c523289f8722c1d6e72bdd45dbd7f782c5a7096794bd113ea3846f2d87a812df52f94d382e8919b67755453550b1bc5d0300a249a8d3f69c046895e9dea1f7c8568534077c1f7695b9069d18d28d88df0041faf3952e79f7a51c446dfec5aab8febb416f013240b7d4a039f1db7cc700000001bc0000009059d8dffad6c552d556bc38755f35ce233154445e7cf99ba6578c05c39da13871041cb9fdf4a1e8a6f83aa1aec3cd2f5e0040a23edae55e24e51ce79aa65f20e148c1c3b38e5122838876679827561e050bab36037a75db0973e9b3b1dc4a78a8b5e9e3515978c90f95248bf2a1271de117bf07ddc9bb39ba8f1444d31e0d3ec315a3f34061dbfb92e68a50a9cd89cad40000009080b4193f70528ddd9895aa4f40e18eaa974c821375e484de1f09903be85577d6c3d87fba3e9cf36a4f838ce7bc38188c3da030a3b0e3a19c1690b4b1cb20788b1c3f5eb58b55e28fe90d3d4159e272bb233d16e481c02a545dd15fc3bac256a41336655b57a11227058e8f51a272c7690d558dbf79f5f177e11602a71250332a43000d43885752cfae7e56fb39ba0a65000000908931d6f23016d66c342ff7789b718b754fdf87b0dab26678a19269f7f42174458ec7fef81b79f467922cee71135520ce4ba428557728ef7aa8f5a85317f465aefb13c5a9182178001c05d1b39e01e4681afdb36962283ed74bc9ddfe19c143ca7e71e184c316f238f53b858f0071ba761c5c7469ec58bef7e32fc081253cccebc902f3097de1cd18e5d5d0d7582ce974000001bc0000009055448140616f5dfefcda23dbeb850781c9ae4d8a27bf3dbb741ef927045bf1059fd643375e05be531dd2034f98a7aa0f30f64d983dee7b92a0159bddb4085363fec8260cab50123e93ee8d37946a6617301165b56cffa14cca9e9691c012e36c5cf29d7e05a7aa0510f997efe136afeb1a08093e960dd0c0008135819d12d6acd8621faccda29914c4f281478c5f249500000090dc1a55f744ed36b36c21e0944d067ce8ca10c9a6642ce40644a09a4a33f621f459adbf8263c70c18e897e3dd1c95fd650155983d50a489d666e02154dd6d387f83d746f91def67c9a7b90b2bd957e4ed26b74d9db0afe93ba459768ba5a6d1d444874c54ca48d3450dbc8ce19cb12b7408906bd117c406b56b3a514a608fe452ea2342dacdf757a6f3a1585b4fc19207000000908dfec89ce5b6b1ccd850f9852f48367ecd95e16f8172b813da45fe00cead02567e0edae0618847a9708734605be106f01bfcf0de3643a2493d66b840d5c6d12f3e80b71c87ac4325c947e5031ae2386a09a0b23642765749dcc7946d96d9d72a2ae8411786d67ca562bfd6312e1a82c91af1793f4bb83c319048fa7dad05bb87de0ad24efa7792d27cf2df760b0fd7c1000001bc00000090c416a8a05c4cdbe90acebc677b6c82f6e830d8af2fea6fce503c60ccfd2ee209fb3810e9b5218e8494d0ef5789a3c6a5c92b0ba8378965cd13e8f370ff0d1705f62984f2fcf424a41b569644ee7be31100a47ff275b6dae8dd78bf20a218a5ef98cb12beef42ce39fa9f4773418709a7146ac38d3e42ff862439c35945589f8d0ea7afc981b85d3118ecc3efffc42592000000903e253e980bee1921d4638754a49ed52c00713b6fad21971c1e57ae947d8bd7dd6125c578c1b109b52d1fecdeb73ee904c4981a6b017bc49488bc60b05ca93211e5a745bd2afdf47de32c9ee49aea0fba01df0098d299fa514c06e0ab45caa0e1c3c0a5243e83d7ffc847285b078eac1c14c8adc75581137b8a9c3cea07bcbff2ffbd1c368c1b0c43aa844ec2dfd238f300000090a24c1c477a2021f6ef6356a5de08739f7011e4c048c69ab48dabcba561cd9bbba0b1db95aeef0320eda7968c5df93247797c976c552e3281b3bcd4376bd8d7cca62b73e3225a00ba17120c750bea0c661e046c30fd348c9f475657d996d092d03346bd2b14baa5b19b538990e4f4baea16b25f170f3fb198d957ab3b5607c43a37cd9aaf2c98d3fbe5cb16d6d2e7bef6000001bc00000090959164787bc108caead3283ecd0eb9b9f3012d04087fd81f8a97f6bf05a523d76c064d6e8a38bdacdfc8f41c7866bd24e0b2267699e97ff119db1ac32043ebb3b98769c85d34dec550dd77085f97fafa286cf4c3eafd5796afa1d7c67c2bb08f06367ea520e4fa57af37f7ec2c1107e11dcc13c778278189ee92672ece95fdbb951b78d10c9212729b97cc5ad7ca1d9800000090a2c1882b9327075504efca40fc0e99b59695122ed4e2732dfa3935db61c65bddd9cc66452b894c71245c72f343b4cdbfc58338402a4319e617b2b60fd5f2d05cbc3ea6e9ede327d6b03a03ba5ec013d826f0c77a97def3f7b3602250b590013f2e9682eec8481cd2c12ac9451ddf8bba1999517c618b61056db169c99752bc5be823ee72cd5183e001233991ae8e1513000000902e74311de489ec3b7b8b2a9888a5da96d18059b17655839dcddbab48457c26b3f2a0e3c1e2773b840ab08b94c1fa0ae9b088fd181675fc164f253f7fc1497e652e5c6eb1cd695c2c26017761d22a1257235d82cff9c5824dcae289e6140b66c020fea4ccdd5647681b2b5ef873afdaa82875a061216839be71ff4f1b6bb4da56bf264b8a3381ddef114d66c4cc077e9d00000e00000001bc00000090517f9ed8f3ef179513fe5f0c8bf2e45cbf76ecfe9473c950d9db29dcca7abd1d18eb6094cb635e69c7e2d08acc1de066ba42851399dd4165ca2473b4d704eb42d5711829f3539d62bd0c55eee852f6ed14e036e486fb68f7c7e549ff4d625d9f8f413653e3328d993f475fe9b36d1741290257222a4b174dab87f7a4b99acab816e97269dbc18c1558f744a439b5dca800000090e3fd640b5eec250731c3dedb8a20bca4b5b6a7b3e16a49621aa568242b2c668b583dcb2518b97c394e2cdadc34d63930d879215ec06d353af1cf83b8d47b7e48c01046e5995ae0bd2c5edefe346fe0b713075dd1cb31aa2c33aede5eed0f10651e184e4af6f8692560e31f51004867f50d3b04ac1f9c26c24f05577eb1686912893e77fd257da7542e38f5e2df2b46cd00000090ae4dbe1feaa4b0ef07ae6813d535b5d274de44d02285f1ccb3aa1f4732a3919146b419b7d306cacaeffbe7747155ae4dacb2865d5dbcca0b8f5455a621738a9e370d13dd808e07ef1fbd030a856ff5ed2059e51315a17ed3c5a17576d7bcded4884578f498a55b94b46ca9181bf72a640c4e5f721fd36b9fd0af151043ae606f4e998dee1d77a4bbdaa9b6c60bdae866000001bc00000090cf29472245582be95f4e4d3f3a7e3b4ab20ae5208ebaaf8bc6d6175ad4cad6b86c41399c430b3f38b44815a279874a6d8f3e16a26499a7d6ad8046c1c5281fba57018a5d795c02e6e0d0d51dd1c0408f273555432adbf88ba4111c906b32fe5defa6928c9cbfaf98bd7b098e076ea03d1cc6d39919ec2342e27ccac0a2736b5b1cdab9cc27389dbc0a506d12f52ec3730000009049f5884ec8d5372c1a5425e258a569fd495065c1abd48145d092dab142a3229127b450a5547d1bfee84f877765aabf36372993d52f1ea1be877eb80da22bd0820c44a39746636597fe3f3f9616c6474b24787da93e8441610a4918d81cf0dd9ad1da0c8e1224e3ee8afb296fd36a9b9a1657a798a6db9b675aeea86b02ff94cb0451eeb8aa54bee85b3259f27f5e22eb00000090fb2c9b221cc0be81692a7d5bf415be3a086199273fa68cef0bdf284b85a721f3a35056fc7e46ba7692528a519f3c6f01a0808ef8dd5add4c1e013c340f1d065f5a4eee154d252d2472e8b751707549fe1f316c75d071eca52fb2a7f1bcc9925262d3930f445f31ba664ba2d3009865662bfc6a418d641a7974d9469ad1d0042cede034255c52b2b1c9dfdb1dca15d85c000001bc00000090421c0b3b553f94d8b4ed2fd9d24b82bb174b0878e55cbb8bb47d0aebe1a4497771689dadf3c7934fd8f8b3c2cb959171f70f98bd997050c2ae63b4e43b901949b086e186ce35c632f939d998a787b8d42c327798909dfca0d7cea4198c42543c9b21529d71d48eac578183f195ddce7b00816e5e0e67fb092d8932396972d0e1b26607b3adb32c665b9966b525f6c6f50000009060dd0c199d53915d198ceb7c64291f90ce682b360978db0b364322b47f283cf8e40b49e29f48031e63a52ef20f8ec416d422464471aef231434da7e338b2b44eb95a73cc35c4d1d7a3d1c48827dea2a22ce5c5ca906ddd3bea89a8dcdf10250a6825b37eaed6fa9c3220eacfa858614e2c7eae99aa2870e13098e9c8ae04bfb8de7030948b1d1b6dcfe05560d0ccb63b000000909496ec626dcd4537ac5f30b2b84a88bfd57f7cafb6ea627f7e2fa5260a9072c14aa6ef8be308e793ecf7b412f899423a01cc81c4d034383976b34b7aeac045440f4fdac656f35b4b2f8e75641249793c22d88245272ade12b2601f513dd114b2ddec0942b1c3345d8265362339ce9ba30281dbcc42e72cd5119eb62d9652363669e6ed88efffb74fdcc78e926f78ede0000001bc00000090086847d16c7f09ce1697218460ecbcfdf452a6cefc1864c20574e8418d1f3955b85470a785e8445b965316aacc68d5a9e530adf2ad593deaeb69dde598c24bf29db1639896a875d8e3c56c2a76fd03f11f33925fedb52aba0463429e5cb80b29e8ec74816d62ce06213f93919afeca841d0ba5e495b3f803dd4214fa165984456b2ac0b9ee7316f1afac505f9098a80400000090db9df09e15050439340e3bc2357425e8956aa5d3e28d04625896269c6499b711114a6a513654e49cd4d65a25de4c1ab9ab27da131d52a06029f83ead7fda52194f3e892d11167d82fa6c40bf0a83e4012df82c2815f04d3330f3eaf32940313e3825267832fb6fd34bfa59a43d20da9201eb6e97e8bcf97eafe8e15cdef69f39fad772d29fc21f8c5265a8dcf8b21e3000000090c2e7bcdfcc5d667abb31536945365dd3db8d73988760ab561d13091899bd73f2912cf28a46a1ab08490a54184f674e87d56b2927f1ee3c6ca14b5a6d7dcf49293f705215a759a3094659d3f9c5a62d251ed14ca5999760057f5c37a775c413533c53de03d88090eeafb21b668de1a60f2b6fbb2dbe065268d9958495a0d5ace813ebd245e3db59b702b886601ebad135000001bc0000009095f5ab58a0bae35f50a42c5874ee954a61e990472b7e50420a84cf4e718214d404dcb88134055e2ddb912cc056dcf89ee41dcf1855a0361e284acf6ff18bce2afab85d39639909edf6fe17d23629fba80ef93012d13de69bd681ffd919f6ac91b9201f1af26d87c53e5e508c176b50a11e356106854616c7eea15fcd2e101832b42c38fd628cd1f01c0aa8d0b4370e85000000903e78237f00aa6cd394e95a13cb5493816a40d7befe4a3dfe52a03ef4b28fe611802a41b94bc91ee29fd1a4483ebd8ddfbbf2074f898b6de1123d21a47d4810540df8c3998a78352ae07de375c27b5edb07bb5aa2e2e303495d92684c03a1fb814ce2fda2a2fa94bedd449e66e259b16c139f0aa9b8092d242920c9974973aa147ae195c2524a225574cb13078dd8166200000090659d08437001a8a14972204578dea27e9f35e26f0e02df2f73e72b35ec47cc01025c5b52c89f1746c9ce9dba6055fb7ed6e3da2da53fbcbf350285ef12e1839e207c248255f01a54f2fcbed29d7fd8410965600c75cd66b23b8b3f630815de06b96dd3f87decf66bfb6a3d751b4d39c41746e7282e4fb34ea495362652a4c34f51e80f0711a0d174ba86b7ffcc48f2ec000001bc000000904718c8d7f3513496a86f17a68645c37ef9fb76f07e7acbf5ede89e44505204311583fc33a3921e896f3ecd6c3b16d830c7384038ee956ca68477580d895723494efd6493d2d9363adaae6e007d3cf94710e33c7f3a1325ffc496412a6cb1787f7d282b00bc48035629bae796855eb3fd203a7c07b9d572c2f2e09fd1d60d7187ec46f0703598ba06fde04e016757dca5000000903edf64323b21daf60826b9c5ede3f9ca48363cade1e3f34b720ee04af90ac7735387895470e79102f17c7dba749382ba530876abc50e105f841263df05d1c198b67c73f7a9eef9094f5e17c87b588a102e00eae3956a597a75c3344e9726ce9379fe9feed5a8165fe818d33c30f7762d0be450402d5be9cf0f746e84621cf059b2f1e6c6c2f1821eabea9864a99cfbc30000009034284f0a4727b3aec5140e1dc2dd4b8f798917db0a14ec7c5575a8be51620cc2cad8066f7be9f7525fcb9acc55654acbcc1df3ad9060ad616bfab58ccf7d3908c292718cda2c4453f362efee380d401215d2a8bf1b6112f675a1701520c30d1a1aa86791d83bb90cbc0c4a6af03111b613cf47a5a00c1356d878e84da9f41c7bf14e24d788207faba4b3809d84bf1bc7000001bc00000090fe6fb53e2f45b3cc4880f633c286dba26ec769b709d36600273bee228116054bdcc1cbb38ae39dc5bdd00a91496bf425d5343088e1d0e99d1b4438602e0dfa68226bee12109382729bb761909798858e02b47e2b2658ffb3d7516415398ca80a8a537ebe6f2e3eb22ee35d40bbdb3a572d8f3ba909af6326988956129be4534d72b6e24e65a9e45579921587c0490d8500000090393ec1274acd8fa1df0303bc855501f14ddce244b0be6ecd736d6171c1f6ef5df1b95cf2e794aa66718e2ceb22e700be9744aefdc3729fc5cab6eefb7138acae45b30992dbb9649239f495d0d5d68036187e25791ff6f5766974369b011200b253d8743426a68631620c68d0dd3bcc2722db3d714ec8d66335f2a4f05bd0fa3ddd63b44c750c3127dc2103b06ab9d16600000090677859689e41419254bc6b367ce470c4e4973e026d148652d504ce2b471268757202952a3b0dac97fee6927ecba0ec6a702f7ef01df5ded233cc8851048381af29115f3bbdee81c12770c05a76618fc8045bdef47087bb18ce97d88ab0d6d8e7eb71219b812f1fff3f43a29635d07e302877db96448d881c6e01bf8badd3064330d7c9838c6e8f097a6952b82e4a0760000001bc000000904654e7c8767c03df9140be4d3f030e35408fdac0561c9de9fb3ba84acfc307b946e7cf14e57602e3e751bc579f817c84ed5aaff75adaddd67c3d42b855130c2f301c7da908c9e4d322b28c0be2094654258e7e449e0e86f93ddf2aa1ae5295b5222c4f21abdf938bf5727fc8903d388e265c2d717288601d4d2f6230cb1168af184774b1e59ffbed47c119bdce72e05600000090b082d31510f95dba50a68258c1ce70ae272feef7a95030971147caf397777110af042af0ef20e16506ec8b1517e6c38588d4eac4b0123d659e61cf949b8a643e24b5f70caac1029fd859d0340eaba3d10e83cc308c0f546f49b2c9bd43b42317fde098add69090766450a180128b2fe01c38abe7b0bea655177b1154f6c0d9bd42c8b9dbeab0ff26ce197a5aad3e67400000009018f11696bc8f5d80e860ff6b0428d7e218d1deffb21f82fbee5865524b078ea8fe0644d3adf5903a141027207ec281a1422ac65ca3e4eb365e3f46023eb3f3e90b4ec67801c5fc8f8f2e401f8dd760a41ee7f89c3349377cec6f35086f9e46b9f7c81a7632b0b11fccb04be70b84791c2bd08f77ae94af391f7418db057cef245e2407df3584a72e65122dc779279d45000033a000000ce40000012800000090494bb05d9e0b6dccfb652a1f694575d05d6babba5afd70bf8fe48c6bef7eec5d6740232f39af78a83b7f762b92e706de8010f61e394346b821485202b2e1e735015741438e252751bc2d2af42898678b2386caea905b1ebce32b9c65870e366ad57d2b7f5e8fe4361bedebe1fafa6e5920fcc6ca9c9455484726bf0f76ba3b0001e2ff6310abddd1baf0a9cc13df9bea000000905bcbc7c03d6a0920357073167876380d0bee4d0b52da6e8a804f97477960fff8fa60247cfed3d0cb157b408ff7f0c795f58d1c4dbce3dbabab2c34aa7adf4dd70ee0a352c830592d346f623286a7b90109c28782d91d8f9a0aab16e80303fc4629ba4f2da32625589bdf0ca95e37a3b722c1c873dc4c969ac52f8a93444fcf30e4ebab4175b024998fa56d478b678ffa0000012800000090aef7d83e532fee31e9503803e4cab2ffa525ab74b646f1bd74637f5c650e92975ab6a4edf511301f88ec71c56e9f7d1b5e7c97732e9e8fbe4a059ed2c6e61aae2374e2be209ea590e7b4ba4f7745f4bd24a57de0f7d25643f97ba50939737898f7282d6ac20b9920c7ae50a1c1c8dd531b6dae6dda1bacd1866127116e460f9dc875f95d1e969bb6b12295d306756437000000902e51e61a42f1bfd7df0f05f40e519873fd09c1ad1e9cba7be7d1ffde74c43806c00681087a6443d2fc0ee107601d33af2ca15fb7dc75d5c0cd1d85bb81329adc6304c2a8c49a3c4d2c4b027bc6abd2530a966d7f41125b3e3190c125301bae012fd57063dbe1de65a3eefc8cf4f59bba0f5dbca6173454166685cc12a2aaf574a8757e70f08809172c8e81e5cd5ba27c0000012800000090a46b52625a06a040f466f0ced2757e58546006181feffb4fb954b0a1b953c5c1aea79a01281b92b839560beabaa94aab452451531022eafd64346b0ea3e5d12969748cbe1359f18d699b2103b20e723d15b982fb823b7cc0b99572693fafa831809d22c0bc74a3ade5a26029b180a4c1146ac7e7a0275ec12c2925964b9bed5109d058899bed1e7a99570e43411af0c000000090f4490e553fab2e3e3d0a6bcacdaccf16e9c7a7f33f6c155aaaa63ade444ea93a47860e6d98f8b6e6571a7e265008ccdf477aaa500bfcc33e529f569ebf88d5f880d71a408b713e03d68d8b25f6657dfa0c2f844ba260dca8023ef8ae5eb5f452ba30a1e3b839b370dc9e693a2b9fb3100ef698bfe39b4f5523fcbdcc137587887ecc5be332b3f241034cbd473881352c0000012800000090540542c034d19e1a78f9a9cfd6c5bf424cb503e4f1965c8a22fae1f1fc3de39c16a5b1fd19a61cfdcc29191afd2755509a50a9d84733938c38106177accee08e72f10966b391f4bc07d5bbae377c87a93038d109cd8b60a86d53125a92696f3da2c6888514348331abfea259aeb3fd5d2f4699c1da18b9e4af5b0701fb0d55f5fbcc93dd7a1e63a65545871a8977fd5700000090d8e6d5358d03fddcdb5f60f56c1bf2916e9b968b27c40cd1256f0d04d6f748bb76866f432416c20c9cee0cab6e7284fd54791801d53307f6289adec08974ac8fdcfce5d17f5ea85bf333479c755dbd112dabd2833f069f272bca3f939c33c50699488877998a8073ba812b448962781811ee633626596181922f7a17bfc0bb4ded1fe701e713484d9e70d56981871a490000012800000090579ec7a712ae9417f378f1869546b8d4f0021de26de25d285f36d86a1b26256b7fca74144cd6efdc1e9236e9adb15197f233c725541f25720af6016eb0a96b2db2502cc2dc5063450b0da22087bfcbf9168da088cc231c5b37f521cda01182ec145003c746b52a4e5cdd434a9dfc141d093059c904bb119a61011c376f29d5f5ad59a1e7ebfa0f9644378a1884face2c000000907075f84362634814d2acc561b7062c8b4b6d235db66fca1edf7a77f0730b3e6dc7ac87045cb07d8343f6a221a1afa0c924844501daaa7704b0f317ce05e41042eb432d74d962a87aef4abb45586d25320acb854ef54d68647d6f0dfb1583e812e99ffb29c23c5ef51c3e3a2f482612222f41494fb6040ceb7e0b7274eb8e4c7755ba003bc28d8bce4f07f5ddf05295010000012800000090278d35b6390c159414ac86a725243d9219a324a8bff1ef0aec5fed564d62a18f50fe10b3a7e884c19efa5b63935053b8fc87e7a684d09fd51091f3caaa6f0ef9252931dfc0636d8c949442c271f3289f08df625731e401479d34a58e4915d8231c3b5bf47c9bfeef195a4a554e478d102e2a88a3dece7f35b9c963b6e4ed99e6e24d5542a99970c2d602aca2aeb5ddfd00000090bf941315ef74e2cedd2b9f638460ad65ecf4f198fc53911e4dfc39d6492048b796a9427af88a070e7372f052025febf94d55de673e45619364fa1fcee1f53e20f123372ac255be74c6ff82af2f80ec8207e4f75e9fc47d22736fbbd79835d16d08c61c7d2028493aa16b82cd54c96ccc194e00560b41a0a68aac8e4960dedf0edab624bfb3e89c2b2618017dd3d3602500000128000000902848c122a042b9fb215060348494e47e3d4f89b224cac8b3ae62fc9b04e1b436f6cebe8da70d670b46208f0f4fdba7d89829ee1f70636188b2ae23c6985f50bf2a22f2315be22acfd9a7dd269fc1d632020ba0ac1caa91649f5f60136df7318ddf2e2e16802bfa2b4e05cebbd32593dd02f3204225363b2628f0245f5ad18317cea99b975243c45f27de59cb279a9ab1000000905737519ac562d709917dff7d65448bf312eea7959e90ef49672270b0f210e99383c32b458e0be13b7cb8813ed8a9ef608e474caf996e9b7a4d1e2e10dac64a56af0cc2f04da0583eae5144eefa4250a3171c49f7e678651dee726c80e60cf2b4758ff06ede24f731edd266da7661f71e15536112efc3081672132675613109b35232c05539a0eb8738a72e7c3414818c000001280000009018add02bd72d2ce09947395f1113c3b830b595c24159d069443b2758485677b6201bd0b616c9f69fa42e9bcc63f4f0b748c5293a91d1d927a7da264616a70b819b990a377dd1e3f4045fdc0c6929e29817b1a1c0b83228291577dbf2b602ba957adb2fb1220b2113dc4be3069e7927fc1b5ed8f039fbf85fbd83c47cd8421ae3bbb8e279622e75cf0c779ff15fdc2968000000908e74cad7d9f79b9f325d51233bd0fef2f9f1d0512618069c17498b4897a2bcbe91dcec2b5e700ede01c598b9e7eef35f87fc95cd2aa10f630f03b28254e180577e943ba431389c997502bc48464e61761a37ac8b3ce68a98b45d7bab2fb32372e3e5425b510958b79d4c2441a4f093971853f1823f1eb284eefe9a264cdc84fcb9a4dff957645e73d24dabd4baaf32fc0000012800000090909959b4997da71d08fd5961ca859ad5d8e3f92e2db77936aeccae4fff24d800c86d80a3e14d1ff885d7fadef8b3d64dc3b453ca9d3537b724ea6041cab01cf6ab35034143337452ed8b4654936afd97009e5951768f7a8ba364e15e13cb1af6fd97bac53963a39a2199fcd303858a512cae1c7a15584a0091e98ea188d0fbf48d8510b96adff2ea64de8791e07e4830000000901dc8b40c1540d083c6d659e8d83778ee10df8769e219224f72717c6263132249461ee2231e62245aa952edaff33f463676227f765ac256a242f6f65c9d54518283e19ef36ea0355b0a4804908741d5c11975de1c4704b63aa1ca0ef1e9e5f4c09c5a5fd524c4df6439830102977954f91bf91e39e5845ae8fc4ae9eeff9e6a33d9eb7c5d0456062d2f13289e659855aa0000012800000090e1ec12b151593e641bdc236d46737831bfe4d00af1ba09a558adc5c436b0e42891843a02f076dbf4359e1d49f84b7126e4df9a8ab48345006ad4bc6a7fe708bc47c4fe051b28ae07ae059edd100769490dd86e24d374e93ce9f1f5f0c489a767722fb6a2c59ccd60ad6453b0fb1f3a6b2a228c7c8b6ef6267e5f944c2d0fb5d7310f313420cbb7966da39ac1765036d6000000900385004189e1134449ddef10240dd0eaccf096ef956cbdba6cf285a65d4601933baafe9c83b7dad9520981b8ff8c65a156aea806ee08220b2783d1b0354d2dea5eaf78b0271ed80de67dfa68c69ef20a12b7be60c8b0e9528f1f1c33816a214f7351ada582cc5cc81ed2e3000a5450461a440847c1468c344ef72f80fba91fc9d65f9ab77998d2f9b6369fadd780a2420000012800000090c466a16d39d20e0bf9e8844287b15831ff2717bf7111842719800b313c9fe79276a9280925819735eba2f15e6a1583c0a2ee130a8a8fb724061256add034cd53eea691473e0d3ec5c40c38a85e817913129238908c4c6a036a3619f6f62595e8c866adb45f24a0c85734a9aca84f38980688f2f67b102af2a5744ebf61605202901cf01957a5d602e7458b360f6bd35300000090ce4d98adb2d51bdc08a07f1de3405e235a165157b7ff6ac7f4a449581b64aeb7f649f2454ab4c305f9647f6626bd5b202307afba2c69ba0f89408bc737fe6d93c0337b8cd421720e7d1756eecf223b3d1ef59cbf3d1e119edde5f7868922228b45be356ebea04f69a1cb97b8c87a8d9e158fd50f3ab646724520d786132cc65b7fb48800e94a3d630a15360aa1f7bd7900000ce40000012800000090e1175cddaa683d68508816a108d22aa27822c93fa29de78e8369110f1f5c93c02a292fcca1f6da1d5f8e34a64938c66f5dac0f3c46bf08d26cf27727cd2fdd495efcd1d2b2a117b4c93c7c8f9e70b8da20ccb7dac611bcac6372df83f90faad3a988b768e76d059451448c896966ff0103dbf7badbc83a520de38272f1083ea1ce250074e52812ac4e9bdea0124bb97500000090b13576fbfb4bf26d8c63c800d8e4e2f2c268c12f695d2ba24af08ae13a82231a52b3235b60efdd044b8f1a980dc1317412edd4fa324c2dce017728aaed0b2400521b7e58fbd5f639cbb6b446e9d50a6b1b053f4d64a101d25100f089fd78f25a07a70ebd7030defadf42c6e112fb65aa051744fa095528a792a5bbcaa1a7de3e66da60873d1023e664893fab336a337500000128000000909195e0e158776cdfb780a47672c556517cf80e6ef325760f09b2f5da67d3f16993f7b5a5d1e5e271fc0efdcecb7446c024daf2a6292a8a518d1b5bc9b9319dd7ee2faa0ca3f123f5d13fb3b316b46fb12dbf79fea3aaf4b643a6f8d0493299ea207bbc2c9d699a7423ef81e29e57d22219793be5adfe357d30fee257cabe167e23b0e8e8d39642161b1cea5837d8f96200000090028fed50e332796aa19bc6aa9f7ae187a98a25b3209024375663b040dad463201e611cf74a5e18d9d4badb361bca9d8faf6233362d2a0624ed645a1bc23b7a987fa98bab14afef06a9ee48bbad2ae44f2cbe3e1a3a47f5c7336784ef08905d70d5e2b8deff5d114a4887aa7765e6f8ee18c8ec611a477ea9b6fe10cf589133930f51df1447ab10ce099aaa5e0891a7650000012800000090251fd8e199d96ce42ebd8bfde21e8945e12e083d3720c9216d6b08119fee4c8f3706f0990cd931245960b6c9197da4554f2b602ea0b5a1e7e908ed031cadca7e28a709b770a441b348ef3865fc722c8b0682f89d72968ced47b828bf3f27c254ee2ea0e60e8d1019ea1e6e7e1fbda0690f57109c880389a82ed6c6ef2efcbe1a06f9671de9914e84c3489bc3d54bec1d0000009016609b3f3ae4d45edb5303f7bfb5ff5fb2db69a47cc0972400663ec32b1c356799a9d43b060325a8616beeae2747205ef43bd8f3f322d7c12a4299f09437f319d21c91fd92933698356e0359c28d3d3e2bf8d760fa0878ae965b80e2529a7a96936f091e14f1e1a8f54ccd39fe0e0d000a6e815e7b6c6a407fd57acc94af383575e56524b8b0967d4c3bd0a84b5b03f9000001280000009005c68d66b8f762bf12fc3e98a297ad7d54cae1505635862051c91c3003ae2220fac45fbb545a00bb30617836910cf317d219bbf73f3c66a8a382f0e634854e5797581ca8b5de7f4c81d242d2fb0ae68c05c380941f3418baee570cd2af152d7a57810ca88899dcd7440a6e64b19d51221a9c0253f2d4e93ebe58f6a7d28b28ff40f381ba1699475a156708a742149a9d000000909bf74a0a0839cf98d76ebccbd4279bb122f18842a772c23baddb8531dbb3ea86596581d8d1e820b648c2288f76613e9cacabff804572a0f02758d6e716cfb4d8bab8fd139feee6c5aededf4b4cbd1794021d94640c34964367bcf528fc76d6cb17f082ef22ea166504b49a9a1fe955752fea673bc0e28afb4ac79b643405a9d9c2f4ca03b81805ad2ad882c140580f190000012800000090780e0043dc582fd1cd72816103bff3581980a85e6bf1b360b7d7e6a8645e20741c0c1c61a395f196f748578d69f7cc0f43fb41775cd8470883e53cd502faf634fd53947aca48e975f15c4c5f60f17cb713070c52160d35c3a66bb2367ae510e7906fd7ac2812b5e8978cc2cd43729ebc1b9048aeb80c8780ca7c5796f8d624dbd9094431f9347720c9db8275ceb8c497000000904aafaafb7ab1ce131497a427b2db869ab7d3fa782341dcc698592a07e2825b124e7e3f7b9f4fe5a6e234c768ac8e6392ddc44e398973b16bd098ff8d7b89cac64778433a9798780fe71246ca3094ea480ae6f66e36ef0fbfe22987ac3071058304e294a8e159e60c3b49ac5e1c335f8e0a91b5b20441a6c170f6be6e24da1f382625370bb6c44fd9097df6a248b0cc7c00000128000000905e3cfa7c3be11657c234ba69d6d0beb5d66be268d52195f4ce56fdc5adcd6541d485b35692884d86d3124cfe9ec6caddc185348cd54d4689654feedd204235c2d6f523d92be445cb5b9f00577e4e4e5518b2f27504d132025ff562afd4640be73381fc7c05d9ec218f44aed180ca5c2c2a44a66eeecdac2c2e6031da66aba2c672f8b376f13e86481802bbcd2d5587cd00000090060fb2fe9919e97122f034f9c7d4034397106f489a93c805c8f0946d7eb647d121c82753a8fbc618081ddab7a650bc859d5e8b1e54b8f88bc73aae535f65325228f624f7649c7ad468ab1c4d60d0892000de767261052f2327fa3af8ffcfae57eb18e97c4009af9c2ea899e4d1251bfe2947cd173441eaf2f697d4fc338793c838639d9eb9578aa9e3e97466bda6bf3400000128000000904bae8e922f41e24f40c6dfec2c83191e7d91eafd4ca414917daf36b462527b0c6ab64a584814b042313572f15297066af19909347ce3b1ddeb1b315267b2216d014124d9d34ff3fd5d38d907b08be4ad295800954cd604baa26eead538d3036f9236e3fda6b7cad1ac8869bfa14312e81e36388c03c01ddaee0303385776b75ab644fb210f3992fb78cd07204da174ac00000090ca780b81739ced98ddcfe81331a2c714b92aef8f8e86ee61c9b1b57c31bff3a05dfd8911434613feb699bf83c16cc243d76f7b105a49e785d082934edd877caa822a96b0821fbdb8385ffe956504e86b01b0f2012167e60477bb277ba01fa189e8028eb0c35b4896823ac982c93c563124635cd288345420c326093a7408af386e4e686408981c69a07b5a28a8b819b3000001280000009050c3de48e0b1dd60c65a4e07739fd7169dd838d527ed0b1e9e646bbb07047523e32c25e1b73dfc31ac9acebb3f01e495151130bf1a47276131c9589107ca6fddf568a6c4fdc7d8ec01e90def240b186e2108700765895ca21e8f0a52e489f88f5004a13a12ac0c3a3afc79127a7621250b9a0a36770cf798489be51f3da0b62dae9cde6c9e818cfe6708a63a0a6bfe2e00000090306dca8fdd8a3d243640c9b52367de1acf0de017d56b66259f630242a4d86f86ddd3655b928b629d263d19b30de0551cd97447813c63fa41fb65c0410654df8f20bbc150714b18b96e22ff4f96b1785b039f636e159b15227d5109b7863b88a9ffbc355259f6f95e612cac617f00f3ea244dc3cb582a0e09bc75ac5010a27331a147178bbf55c6afe0be83a09f8db77200000128000000903d04001845043618ad173b7c0c025a3716b0058097cbc1bd4c0fcb1e98881e62062e17fd5a761548be85f6ecb876edbbc88d6ad74bb0b7808482b8b4d5e6c6aa91947676bd95fe3223ccaed50c9eaef60299685cc397ddaef866574f20291db3b882ae95d3b04c769934fcd5e89eb1ec06ef44e6e0f7e23add497f1d8a0f0be040ca83ef3ab3e7f29076715ce5f7b37700000090b2d4ce40797ecc8d58c7d27b9eb75ecc2b6719b14dcefe25f89d4d1f6ba2d08d26980bd47703676eb65471ac646e4757d7741c6d4b0549a574fbd714a0dc3f2fd4c59dd25dae8200f65365f87ce0d1bd1590e14998e7a49ee79736b1c213200e8bdd1a042b0e69596fb8e440937a21cd2b4fef9ba9a4a448f7c0fa3ec0d8e9985231f5ac4b616860edeaab98f445db97000001280000009015b6ccaf21f18b085d62118c8e444966186ec04fd6a7f0d47d6181e15427f2941d7db5ec86918fa945dfe75797b10b773e436633cc09dde92cc6ae65d51816087edf5a97c4250c92ff0279392ce1088e16025f146e63fd33c922498d1fa67ba99994f5736cfd437d6500f11fbc75be0a28b1cb541be7037261566d5df380402d39b1a2c14414863e7b293e45db0e509700000090bf18e5a781a8bbc9d5c15cd682a351619517923f72b008fe44183b45b3c4611d737542dc749d2cdfbbe6cd78e414b6c9933d384109baafacb01577cb5de11c2f283660e0ca4a0dd6165b80d72169522b04041220a7fd0f19a9d810c1c39275e1984a9a1727787fd67aeaaeda5a09ab4d0e86e5493438676d21919c3e15f9888f5fa3c662378727ea5eb8e9dd50ab7737000001280000009028250abfc1be0cb58ac53b81584e2e2685dde0eaea2b5a7b9437ba3e96ae588c290be8a97178d590d0c155ab930c6aa08ba9f984f4db4b4832a59112d4295456bcea3dc79ef3bfdee45576361c995dc000a637e5030a06d937c3418e5e1d70c4e380f5dafe04e68cdcc47109800bf3821f89476550ae7bad4d885d0523c625bb7fea7bd26e07dd8a1daa67e1cdf6eaf500000090cc715be08380e5cf958b4b54fb479cb2cdd75be88268391946949b74232aa373b710f8aeb3146edee0457470d83d3b362a90f37f4cc2ab07718910b0be2e4e00b2c6003b716aa1471d1c50940ef236a11b01e2fc5eb833aff2908da62c2842a50dca54c95e49b36bcfb80d10eead84a92d0847604ef5a7219ca2251b6aa354f41f8c6850beac9ea67d79d7cfadbd887900000ce40000012800000090ddaab498d37f8e5c6427ddeb63894b99ec29bf8a0469f9c110488f306b394ff0360b66d39f70f98e224846c3f5913e9f06da6a2b28d3644c786c7a0349d7f0a8055f4d3b37fb1eea855dcd9a69d7427b1b12cae84baee9736f8d9fca6c873e8a8163af641542b7d1d01aacb5d2f0788e2dc12157620ef9cbcab4e6d1c0abbbfb0b81dada5e95aa690aaa1f2ca2ebd78b00000090f20e4466cdfd9445f1edbb58b94b70da5f0bdd829f87d26977a600743053732d0aba1fc7a5598c92d832e464317980f7576711268415348d50850b25e1604d65ea9d0c1ac76fea6397147285b8c982bd1921c958478a522a712a4361852eb0437bbefed6dd3571d1fea4eb036be13d812a8329d8e98597d15b621654f0040c6c09713d451450396bf0b2eb01c4dea9280000012800000090227ce542ee0a3c9f553e2bb7a4c48610ffec14f926c4cdd3a75f3043fad55087ed6386a2e9f707658ad3d4da82a7b0ec1a82808383ba3db3dad349158c24e569ebc6a50045b3b2e7f21d8c01d7904d652df665c109c832cea7e829e1c69e39f75b327e0182868feb94c756ded57e77c81c0e8d5d43dacfd51d5546ebc0e13616fda5ddfdaeeb31704025522cd551e1f3000000901f688279fa8fcfd6e973813723038f9d7e49a2b53238408024d3a8499f761abf1a25e6da5ff8fe70595f6772a556be3ada50dd8c57f3ef47e0d7f74749b83bbfe75b04e856b6e052b228195dcc93e518195c92c0cee04a15278067f6dcc38ae73732a65487f70b94d0cf7edac6db36ce1decb6ac6fd234a5f7a99034f916459d01b5d25aabeeb2d591241e2795ed775c0000012800000090b7751488d3ac84ba19da4cc9df828ca5e590c89f99bb2ff502a036a00c479ba674f8cb003ca0b5111aab457d321ff9e0f670e2de53fc39485f344e770ec52b88249355739ecb20728cd5926c42a7cc5714e339d1ac50c7ae3ed745925cd7c0920cd468af724277573f84aa164e1495d508b44cd51da4ed0a9bb9d82740dd9ee421f9e8b77b4cb92198496e4a340f24000000009098f0f19fe40dd3e6c7399adc08bd97f4b4a5c892cda841c6c866809cfbb893e81b0155215ce8851842a0e676cf25d8971ac4f9ff8fec83086ed9e8ef1a29dd08cca0b497865be19a7baccb7cab10443927d370750a44caa8d55de21c1b88a2239baea0adec2d2f47548ed85188e75788001ec0596e2964aea077d7bd8525d6cd8c0873571116fbc9c3773a1e58fce7eb00000128000000904ae87ff15b48d037327833d9b1f149175a708615364260ef1005ad083f16782ce257e315bb6c24e4f667ad22cdb2d7daa3cb7d4f3066b84b8052fdc610120bced29d527882b5afbcc529284317df2b430f05328506467329b399d8f188ebcd7703a9c5f389cc65cf5e38a103b1d9bf6e20f12a147e94f36f00b5bd6dd6fd04ce78ef34779b9fcd6c85da9d3aca959f96000000907060a136446c2b7c59de45d43679d01e92bc99d383c51664eb61e8a795bcd9c70858e782fd39b5eaa4b97b68cf4fe4f6a4ee3594336f96f5e7f3a594430840029385e85e0785cc1f6a75685b138c96061610add7b9ce15951ef5502d0b6dd6250de2691afea6b1eab3092de85a34260a1653018c23272b15647a49d4944ab1af1a73ecdf2e5b2e77a6ca87b33d5e67f60000012800000090328d4f12c91ef5dc1b1983a4aa85cb62720c551e954605235e9f40a6cf9e42a87e4578178fce72227f68c67f23592d619a9091592a8f85c2b3b8ce9ebbca9563a36e20e9a2ab90443296a71d4255a1c41ced45ec4c61692ae1e0f722a6d00b80fb058a44cc14cd2da7ec1fa6759db0e72479be159ec1573e7a3c19021240674cff0256b8523458e3a31137c992b827b8000000906ca7a44d78799244fb679e9a868cd81c4771c68b01eae8137afbd702a4710aec1f443662f9298ea6fcff6b82c5028e4b2652dfc1cba7d45d7b8539ac17ae7f31e3ae9bc4484ca32903fe744f95904e64177d1c418d2c0800cfb7f49ac509a29f2d6dcd8dc548d19e233a625b5fe2f35b23a27ea03cab05cff9b557ceaca027baaac6c3fb8058d313aeede1b107169cc70000012800000090d405e6f2933ebdeffc49ad8ad3879db1f81a1324ddb4ea5da09971279875c37b0f08c2aadd645004706234097385631311c750d99939c561a76e304e20e13676b195b7d905d9702006d42aa063d881c702f64682cb9d8abd1679c132cbad331fad6f379e76bdb8d4715d0df922dac6af122acd3b213297dc3aec2d6f5005cc11b3cc395783aeb44a3a600c9b62b2a3cd00000090fe4035dceafd176907f724afdc044f69fbd887c31979b3a524a99ce7ecd9cddaa951a0c534296daaee63a04bcb6da3d47b9c0b2cc4286ee6d9efa84a929887fe2eee7a15033802a4de98f959636c0cde245e51845a5bdda2e4c3cd3268efa9a4b4471837ce1bedb924eb8d609f0e5a410cb70c8d328dbcff2f74eb0ce6165eac844421e510485f0223afb9546e5ca4ce00000128000000906267bdf678da9496a0fee39c4b510947f27e3a6b671a3368c7bfa970f7771ea9b8f747bb3746a3b664c8207fcba070e4a256f02427aee10b3408470b0b6d0c31e88461cbd7398b68cb92ab5b7679fcc20000dc8097cfe65a0f13e3a59554197b42f769a4a702482ddc63f7881bda3f591f6db36c669ab1fd597bd779accd4935ffa95af6ca770dfda9818904f9d4c21500000090038cdc6bdcf8131f39fba8105734b3593b83ff0b54f2a8d2845923707d6015de59af30335ffe8e9968061812d94c82f4e3575ba24f62dbee3f7d1d9ef01e6a0b3882ddb54e7b9e9bcc55a2e1c248367205ab1f32be42293c9cdaf21bd79bf5d2e54d823599b1542291d8dd6b9f84214d2ded55dcd62c82421da0d120951f3e058f0b0fbe48535b54e6d905d825a045d60000012800000090cb13d12273c30cf69bb68471314433e101bd273f1776193a4a7c4e3a78c74c33487095299c6bc5ae56a04f97d7e6b6a9af2b0cb2c1fac03eaf0bd84154455804efa87b357df69c84ac3441c83ea62cd40986490c2aeaba5921e8b74177adc6fffc0ac8232f2fda85259a4ffbf5bd0d3006dd8b3d6ab0104880d6b1ca77c981c08081fbc641a039f5329154136598e2f7000000906c7f128e6fe0a73183c42533eba05fe041096b34f578bc1bd06bd9e3d77bdc7a1ce88ee7542de83c1a308f8415c498ee22acbbae133fa60776f5dee7bb4612635a47cffc36677972d8ff2ae78c14c6e3161b7542f38c7d85435d74adcb3fff999624559a38a6643a4260ad3a3d24d6f41caef3343f18765aaec7927614ec03338a9dcc45f92839b8116dd67ee0a2c69300000128000000905f68c424e778d53150f2a0121679b4f27a0559afcea6b77caee07904c8d5d09f3d985cce022e3cb3139a22443764acd843a83ae5364c438bbfefe4b218daf7eaa064aaeecff5695b5c159392af0f6809173bbc2ab8969733dd465c21857b290d447964f9ba8fdc9fcaad184236af77310c3aa0b0ccb61cf57f830317e94a40516c5a9b007b6ba3e332ee85127280077300000090ef879a19ff2329dafe10756c4134c55452861548a2f03178cf6d04d2656c4917dcbbb8c7756ab648b07c941efbc594c97141cf56a6a2f9582111c9882da5a5858c68385b1d8b43361a07bdd197db42d710a0f9b633d0c4657527080362d8876ce1740f843b808add30d541129d580a551851f50b897fe0a5d998e50233f77ec1e994cc9af85da854b3009e4b8db01d01000001280000009075abc870169969d450a81edf71d8c304c7216b164b03e0cff93d76cbcd3c3999e0bb1f337aac0578b6d44b2d8f86f1495802646164267c9b1f53815bf766f02c4f6e7282c32cbac6212b28e2acc5da5401b4582563380551e1a8e7686754526558f3f392276b7f4539e337538672c4882e165f61798555fd0e98aac21989884f9587599a3742d37001a41d7c2cfbc72d0000009055b205418473225f7c4570af4cf6b88979d54a38cd43229943f42c6df442fa455f10782b50e710a7bc53581a29ec278dbb36045b0e44535cc0110285e8a3fa511b45841abc43fb633e9851a67f0f9a801befc7a7702013fc0e07809cc0b63e571c2a1efa747259a792982470e9ce4bda19ecc8fa01c53e7923839ae9c27a6eeb563bb667b9d74ea4644f49bb98bfd8a7000001280000009098217d6f9a6b891ad0f3a64c44235a9b42b5cba79e069edff9b4e9ea5b4fc150c81ffc6faa766005c383ef1dcb6cb6b8d3e2be510bc3d919fd7be8d1583249292f31356c30ffb58e94e698e30c8a9c230f9f802bf37555d8dceab4772cb1819aa66097b673b0f7ae2169fbf716cde72518ea94e553418bf00515fcd5429cf4b9ec94873b1a88a3947b01d9b0622a400d000000906b2b61946a4512a6b4029390e708a1085f420c4f19021a2f25c0c829634370c221a01caf9f56896eec186e54e451feab5c2ae38db3e78afe5e7f50538ce07dfdc164208794b78ba35ba6341e3485938016f011dd0d1caba2fcf74b681bb2cb265934b0c80257408ab57a9ed1fdc14e0725dd04afa2c93dc42ce819f215cb8cfb112118f82dd67301a1925c301e9f17b200000ce40000012800000090b44ea270d9af2bf4101f9c5b590ad9e2f071fcaefc87f115069b6c0dc8f9badc6202b1f97b2b7de770e63bae5d58cf5572bcc2659d6278d0dd8491910ab5f287f5d4dcc873d9b49a80381857ccfda08f06a962b12f5d28a97d68d3dffc005cc6ca05336c2034a41016c61bce541af247240808aca40cdbaf41a0ade3c49a4aefeee0f0d7cb4d5e11e5b47fb0110eefab000000903ee496893ac4665940bdc196494b026f33ef3822e4fd21b65d2a43505a724f97682c8761c549e76bcb2f37d95d8f822aa053dff0d2ea731d4c9960d953b14ae63ec24903025568ce0e9e00b2bf28731814aa18a20143c4bbf9fe6c3464a83ffa12e092b45ce1d8deeb645adb47ddc2461d5a2fa99994f104652500c8339c8102cb837710af8f8ae20b10c3d0df3537310000012800000090644ee7726ec93dd24a62e8db1f80d01a59ab3d4d6757e0f1d8f3c6a45336aaa7076cdb7d26b3457d6504536708c0e3d69e39e32c15af4b65ce34990f776290a9bb6557b504e48ca251bbe2921745f9ec0db278516344808351e9a3b50409a75b77321e002a414665c31846bfdb7fbb7e1403eaa397662039216d6a25066af1ae4949dd9ca0300c2838fa29c3fd121292000000908140c4e2be252914ae1ce4d121c413e35bf7c4a4b10119b1be74774ad0a70173efb8d97b60a1cfea09a0496c4a7a7daf321c1a83f90003465bcca7459b5d5c382bf19c70adf9a88e2834e13b00069855001c369256e49b1d3ff826fdca7c33942618b21b99c7cf9c7b88bbaf2d522b541855bc5cef7ded550b64cc65a9bad5b474bef6cdde14052f07aa15ea3eee567900000128000000904946c76015046e584f1c855b1eb1c62ec9e0e51d9c9387a1f26d524c9c0b3ab0a4a4e803997582c363d33bf8239f6d7fc69e19bf2170e245e1399083fde2684d5c89e2aeca46446e62704b8717c517cc2a8051bdbd270e9b744f1a72ed4501a87cc4a7c3a97953bf8b3d04bd33b1e9840113aefbc263fb447fdd019c9d26dc315cabc0cb4734bd9b88e8d7ae75cf905400000090485ed257ce9c86602924f852bec2808dca6ee0ea521c53abcdd4365c15ab054343fb539eb7531745332b319b0be51b7bdf60df1de40109e277e17162d86cbfe549d6b699ca63407867c33a326c2b42d52117484ff4bad3e11b4f4ac900776308c7f63b916d0a16ef5f035989cad64522188dae9d860238fe037689e6db18ee29b634a4c5cc33ce93b827148ca699832e00000128000000903f45b45bad48de840b19545ef8fdb74f58eecaa0ca491a3a427d75c0b9ed5123a118f50e078ae089af0ad8532ff9b6e56ecb6d0b1a01278fd3fce0d90defb5a73a2cea803b3075ca9be8b7cae53f591325d297f6a452bd1c6ff4da1caba3ef398591adbb9e4ba279298ae629e572b4a02729fa6999b8c18888e10df506232189ddaffa7afd7342ab6fe22f7ee98375b400000090361aea5eaf7ff947ea45c7f6c47c029b8123ceb77afc44417d32696fc60f7dcdbbef6364c5af6a2d9b65dfc32b579af24a7aab4d65f9733fc81b37c9686f147a8a9e0c9e97f7a2f59a4dbc3bfc77ca4b0e56be12b04420d8274dfddde3fbf8368aeffd43093bdf677334bd96fdbef5db03ffdcdc4c35bdc9ded46550db8b4b3b8f811466e583406388fa9ebd57745a4a00000128000000906e8ca7488bfdf7cfb5727e6d50d9873f785e0a71474b2cc5df1ddc89ad5f1c6a971386b05cb82643ab5d86c92890ff1aea93545047bd27236533363c7a9b935c72ba504fd692c6fbe9e500bef2b270e60d739c89c62416a587dfdc28910645e09d3f30c3b340615b0614574cea563f562321bf87bd23195d56a2267d54c0765cfba7e9abaabd042a502d6e8f7644b655000000903616c09f95c99e543959e83e646ed74c296b56cc096632e23f48f09d3b317d42ae513a0688a02c3d8cbfd2b00c3ccce2a596636427b96344eee11a6070450c2cdbed671a12ac3555db4344fe48580c9d01e5654c6949612ef2795f45acd1216b5f46b04d720c98610ef8fd7af8eda7771653460cacb743c470731823a407a65f4b8f161f6286e474b440fb0bc270f565000001280000009090b0865e7387169f681594f9e20127980a15e615f0331b7bf85eea2f2a56b04dc61eaff46021b4e95329698f7dec777bd09d50c8715a7f18bb298d8ea8a801d882734de8cb788c99b3072d1c70c0a7b50761071b0a908c8f37cb19fda9a01b69fd60facebd499f7d17c523c3a08ff38d2a9ee77910f41582fdfe52251e57ac770e05b4476ee9876af63dcd87b0f7ec4e0000009062ff6e5ea72c5630ffc6f97cdb192f3b413fb9eb84505bfcfa8ed2dab7f6c89d495963f2f67143feb73465bd574d95b4a24d665de16eba7fae65f2e1c78fd3289241686ae29654999b68a4ae554ac05b155ff0b2b4734812dfcdc0fecde0a15a49bf9a04c365fc1d7ed0efb42dc4da602381e589cadd09451ebb7ac1e6f19f35aae6f4a02ab06e85d2955075b196a2e100000128000000907a24def5e7e38b9cf951ae1385337afa708d7245756398c156ec6faaa5681d6b9718c3824c643fa28e0c84926806f4d6657439cd32d13d805e96ced33f20655b2328d5e96e4360021fa4837379a1ab4515d6394e8a34c7c7644356b17a2adee1c116e4d51538eb3350fd4dc564b90aa823df0ee64997a00db2543951a5f39bdb58c7aa1793d10c2362ef1032ab712ba700000090e5fb2792ff3ea2c636307055c2a954868876bab9fa8ea46c2a7c37ef5e480336d28b125e17eb7b7dfec79090263365ed3502147672897b31565fdb777d5e339a20dd32573b6747c2b872c49e31ce1587278574d7b5a4f234d7c440a970b938678da6efc90db077c11ded6f64d52af0ca110d634b881fa504751dc247e0711fecabb65cab6fa5209992e5bb0fbdee62ba0000012800000090b1ca6507ca15754f4814f4889e284bdac546ff5f5b5a14d20f46135d5765670c4e5e35eca53be8f21b77d54b268573c90e18d72c2b878d191dfd3201e89eb0e9926de20fb183fd43c2ec00c91cdf943f04bb1e7e9e080dbccb7060fa96e8cbb1150ccb9933613996463c04a559fcb17a0920d501daca5a7ec6a9c0b49ef77c9b61f9fcfaadd3ef81bbdf8133f726311a00000090d29f3e68358b565072ac92169df4773412e86b66e0793779175b61c91c4ac70b37b10aaa4fb457138ec6567af9b83905ea105dfc3804741c084aa85a1060b3bfd2f7510d62ed8fc9421f1c78e9b724fd217afddb8e836e490a40131587c1fed86496da76baf800e3cf446c082839654f07b396cb9ec1ec0819c204647daadc595d11bc4a65cc0facd29d0bd329af615800000128000000901592278a6eb7c85bf08bc5f9c6c8b519f05a343f770a4212ec0ca3c056f45b02fc7e86d6605a19a78ba4659243c1ce5a1453a0b6a95feeac2b2cd3d67eae347d1b8c064e066bdcd6e86aa0f395db241726ff9466be4539b422754fa4f9707a90234bd24f9ca15a7f9cd02d0a918251ab075f147a8c00a0c33f2c996c450b3b8a4e767e421433a4c0cbcb4e9f99005dcd00000090a3af6cad1bd471366095eac84a1ba28e19bb2e418e42ee6c773771e1de7205ddfeb429c41ef4b1aaf04094377e88b61e52c31e4d29c63eafca186b1d0a02829ab8ed55be3771b0bef39301431f41b94724f6738bd3a8dfde092122625c3af14e3a9ed5fccba548cc6aee19517e082dc81d5a05038699c88e77a339e6beba8524a0aab4884742654c0c663618eb64bf5e000001280000009040f9d6c028fcada22c85067cdb5f64d2a7d5853b5ee33c18c253a375de21e749638cefcfb0c11780441496e0bbfa8f5ba0390b26b129d074f18698bdc9c4dcdc870c3cba898fd7a4e39b86bd42a5d1ea07fab960ff36d8bdcb39387f8960afe4cd18cfef858fc1bb0a1cfda841a654c813ab153a9f22471c43f3333490676b62cb8844c35c1f1a9d63b1b2f02be6083b0000009032d92e4212d26e2de12b27d317dced8e13963ca6994dd0da149a2b7252c17da9f5c69ce4c52d0ffd3976bee39b5b1805a7727d5fce9e13caeb08e5f88cf73153c15ac5d4b52f93a46d22767b4e89edaf15d496a8554d206a93d2a75c296879dcde874ce9be76263f087195efa22e293e2b18a2871970937f69214012722c2a6802f9aec6315f223b53896a27e0c1fb780000012800000090f499e1b0f5177a1d49deb276a2164264e8ca891c2a2a3b7a4d4e069c9a56dacfe5b09920f3489629118ace4e33e08b80f17f9b2039fe16d9493269f5b90f57c8d046e37947a56e046e0ec2dd7f71c851219f5120a5b6da519e27a8def9bba9b649007316df84b71e31cddc05da14b3b9256dc9d579126bfb6cc31a44937dc3b143c646264035845fe1f8e136c195e8cd00000090754ae3efce15e536eb8676de47f2867316a08144b74bbcdeee941579480e19ed8a266dd1f7d69acd526b3aaac4725615409322ef0e0af0ea91187414a5965ffb0dd0317c06d2bb9b6282fbadc29b6519290f834f51d69f413f98ac058e2bae91cf63a5df68c16cc12c091eeaa96a803f0ad84e89d79cfd05f9268ccaf7afc381ca62d72fba35b7951159ccc0d03dc51d", - "calldataHash": "0x8cafedd16ad3f90d79b74dc6f08802ecf2fa8f395ce32cc3340addf528a60e53", + "archive": "0x2c1c47b1efd000ff25eca83fdb583987da6c35701eb0fabd203c5c0e9824bf26", + "body": "0x00000010151de48ca3efbae39f180fe00b8f472ec9f25be10b4f283a87c6d7839353703914c2ea9dedf77698d4afe23bc663263eed0bf9aa3a8b17d9b74812f185610f9e1570cc6641699e3ae87fa258d80a6d853f7b8ccb211dc244d017e2ca6530f8a12806c860af67e9cd50000378411b8c4c4db172ceb2daa862b259b689ccbdc1e005f140c7c95624c8006774279a01ec1ea88617999e4fe6997b6576c4e1c7395a22048b96b586596bd740d0402e15f5577f7ceb5496b65aafc6d89d7c3b34924b0c3f2d50d16279970d682cada30bfa6b29bc0bac0ee2389f6a0444853eccaa932b2a60561da46a58569d71044a84c639e7f88429826e5622581536eb906d9cdd25a2c0a76f7da6924e10751c755227d2535f4ad258b984e78f9f452a853c52300e212d8e2069e4254d81af07744bcbb81121a38f0e2dbed69a523d3fbf85b75c287ca6f33aadbac2e4f058e05924c140d7895a6ed167caf804b710d2ae3ba62b1b51297b3ea37637af6bd56cf33425d95cc5c96e9c2ee3077322fbec86a0c7f32c15d2a888c6cc122e99478c92470a1311635142d82ad7ae67410beeef4ae31f0902ba2fb964922a4610bb18901f7b923885c1d034da5769a48203ae6f0206a92855e2c01ddb3d6553386b5580d681b8230fa4062948668f834f23e0636eaff70aaa64519aafdf4b040bd2f9836e76b9dc13cfec8065dcdf2834d786e06260d100000004380000000000000000000000000000000000000000000000000000000000000140000000000000000000000000000000000000000000000000000000000000014100000000000000000000000000000000000000000000000000000000000001420000000000000000000000000000000000000000000000000000000000000143000000000000000000000000000000000000000000000000000000000000014400000000000000000000000000000000000000000000000000000000000001450000000000000000000000000000000000000000000000000000000000000146000000000000000000000000000000000000000000000000000000000000014700000000000000000000000000000000000000000000000000000000000001480000000000000000000000000000000000000000000000000000000000000149000000000000000000000000000000000000000000000000000000000000014a000000000000000000000000000000000000000000000000000000000000014b000000000000000000000000000000000000000000000000000000000000014c000000000000000000000000000000000000000000000000000000000000014d000000000000000000000000000000000000000000000000000000000000014e000000000000000000000000000000000000000000000000000000000000014f0000000000000000000000000000000000000000000000000000000000000150000000000000000000000000000000000000000000000000000000000000015100000000000000000000000000000000000000000000000000000000000001520000000000000000000000000000000000000000000000000000000000000153000000000000000000000000000000000000000000000000000000000000015400000000000000000000000000000000000000000000000000000000000001550000000000000000000000000000000000000000000000000000000000000156000000000000000000000000000000000000000000000000000000000000015700000000000000000000000000000000000000000000000000000000000001580000000000000000000000000000000000000000000000000000000000000159000000000000000000000000000000000000000000000000000000000000015a000000000000000000000000000000000000000000000000000000000000015b000000000000000000000000000000000000000000000000000000000000015c000000000000000000000000000000000000000000000000000000000000015d000000000000000000000000000000000000000000000000000000000000015e000000000000000000000000000000000000000000000000000000000000015f0000000000000000000000000000000000000000000000000000000000000160000000000000000000000000000000000000000000000000000000000000016100000000000000000000000000000000000000000000000000000000000001620000000000000000000000000000000000000000000000000000000000000163000000000000000000000000000000000000000000000000000000000000016400000000000000000000000000000000000000000000000000000000000001650000000000000000000000000000000000000000000000000000000000000166000000000000000000000000000000000000000000000000000000000000016700000000000000000000000000000000000000000000000000000000000001680000000000000000000000000000000000000000000000000000000000000169000000000000000000000000000000000000000000000000000000000000016a000000000000000000000000000000000000000000000000000000000000016b000000000000000000000000000000000000000000000000000000000000016c000000000000000000000000000000000000000000000000000000000000016d000000000000000000000000000000000000000000000000000000000000016e000000000000000000000000000000000000000000000000000000000000016f00000000000000000000000000000000000000000000000000000000000001700000000000000000000000000000000000000000000000000000000000000171000000000000000000000000000000000000000000000000000000000000017200000000000000000000000000000000000000000000000000000000000001730000000000000000000000000000000000000000000000000000000000000174000000000000000000000000000000000000000000000000000000000000017500000000000000000000000000000000000000000000000000000000000001760000000000000000000000000000000000000000000000000000000000000177370000000000000000000000000000000000000000000000000000000000000240000000000000000000000000000000000000000000000000000000000000024100000000000000000000000000000000000000000000000000000000000002420000000000000000000000000000000000000000000000000000000000000243000000000000000000000000000000000000000000000000000000000000024400000000000000000000000000000000000000000000000000000000000002450000000000000000000000000000000000000000000000000000000000000246000000000000000000000000000000000000000000000000000000000000024700000000000000000000000000000000000000000000000000000000000002480000000000000000000000000000000000000000000000000000000000000249000000000000000000000000000000000000000000000000000000000000024a000000000000000000000000000000000000000000000000000000000000024b000000000000000000000000000000000000000000000000000000000000024c000000000000000000000000000000000000000000000000000000000000024d000000000000000000000000000000000000000000000000000000000000024e000000000000000000000000000000000000000000000000000000000000024f0000000000000000000000000000000000000000000000000000000000000250000000000000000000000000000000000000000000000000000000000000025100000000000000000000000000000000000000000000000000000000000002520000000000000000000000000000000000000000000000000000000000000253000000000000000000000000000000000000000000000000000000000000025400000000000000000000000000000000000000000000000000000000000002550000000000000000000000000000000000000000000000000000000000000256000000000000000000000000000000000000000000000000000000000000025700000000000000000000000000000000000000000000000000000000000002580000000000000000000000000000000000000000000000000000000000000259000000000000000000000000000000000000000000000000000000000000025a000000000000000000000000000000000000000000000000000000000000025b000000000000000000000000000000000000000000000000000000000000025c000000000000000000000000000000000000000000000000000000000000025d000000000000000000000000000000000000000000000000000000000000025e000000000000000000000000000000000000000000000000000000000000025f0000000000000000000000000000000000000000000000000000000000000260000000000000000000000000000000000000000000000000000000000000026100000000000000000000000000000000000000000000000000000000000002620000000000000000000000000000000000000000000000000000000000000263000000000000000000000000000000000000000000000000000000000000026400000000000000000000000000000000000000000000000000000000000002650000000000000000000000000000000000000000000000000000000000000266000000000000000000000000000000000000000000000000000000000000026700000000000000000000000000000000000000000000000000000000000002680000000000000000000000000000000000000000000000000000000000000269000000000000000000000000000000000000000000000000000000000000026a000000000000000000000000000000000000000000000000000000000000026b000000000000000000000000000000000000000000000000000000000000026c000000000000000000000000000000000000000000000000000000000000026d000000000000000000000000000000000000000000000000000000000000026e000000000000000000000000000000000000000000000000000000000000026f00000000000000000000000000000000000000000000000000000000000002700000000000000000000000000000000000000000000000000000000000000271000000000000000000000000000000000000000000000000000000000000027200000000000000000000000000000000000000000000000000000000000002730000000000000000000000000000000000000000000000000000000000000274000000000000000000000000000000000000000000000000000000000000027500000000000000000000000000000000000000000000000000000000000002760200000000000000000000000000000000000000000000000000000000000003400000000000000000000000000000000000000000000000000000000000000341100000000000000000000000000000000000000000000000000000000000000540000000000000000000000000000000000000000000000000000000000000054a0000000000000000000000000000000000000000000000000000000000000541000000000000000000000000000000000000000000000000000000000000054b0000000000000000000000000000000000000000000000000000000000000542000000000000000000000000000000000000000000000000000000000000054c0000000000000000000000000000000000000000000000000000000000000543000000000000000000000000000000000000000000000000000000000000054d0000000000000000000000000000000000000000000000000000000000000544000000000000000000000000000000000000000000000000000000000000054e0000000000000000000000000000000000000000000000000000000000000545000000000000000000000000000000000000000000000000000000000000054f00000000000000000000000000000000000000000000000000000000000005460000000000000000000000000000000000000000000000000000000000000550000000000000000000000000000000000000000000000000000000000000054700000000000000000000000000000000000000000000000000000000000005510000000000000000000000000000000000000000000000000000000000000548000000000000000000000000000000000000000000000000000000000000055200000000000000000000000000000000000000000000000000000000000005490000000000000000000000000000000000000000000000000000000000000553000000000000000000000000000000000000000000000000000000000000054a0000000000000000000000000000000000000000000000000000000000000554000000000000000000000000000000000000000000000000000000000000054b0000000000000000000000000000000000000000000000000000000000000555000000000000000000000000000000000000000000000000000000000000054c0000000000000000000000000000000000000000000000000000000000000556000000000000000000000000000000000000000000000000000000000000054d0000000000000000000000000000000000000000000000000000000000000557000000000000000000000000000000000000000000000000000000000000054e0000000000000000000000000000000000000000000000000000000000000558000000000000000000000000000000000000000000000000000000000000054f0000000000000000000000000000000000000000000000000000000000000559011dedfc544c4f1e5f047e5ac2e76a30e407c87cb473bac191649e7f8e157639620000000000000000000000000000000000000000000000000000000000001040000000000000000000000000000000000000104100000e00000001bc00000090af0e419abbb864d3b06d45128c86fe4e1e104ca2beeb8f5391f4e005b386f0252ade70bc88201d487602105c20645b1fc0a7264a50d97f70091fe286558c5154cf02b9b1b0a6dcc30ba8f4986c6db7c21cf34d71dd91a0823744db220c8ee3923b2b961b8404bb058c48d330c0d8d31e0c86ec7683af9531671cf2eeea041e12c2529f16e8e35ef8e5e9dfdeec225e6f00000090b7081b907669c5edb8e0f32cdd8df64381bbaeb79642fa4728576d7d57a23ff31622dbc7d38815549e5a62093e5439d9882477f2bcd502f054c85903ee9c35de0ebd968e43e73e29f002f4b9682c85d70800c3af1f45ed9e5aa620bcb4d3bc5f29de9766cc28b0720c8de242bd61f993125509dfd857248cf2e3af98f323895cd10a26a20b6fa51d1f7c1af370ce4a05000000906563e20027ea967eb80ea7679d0f132b4e60b45c5eb075ac85f1d9c0a531f4c51e149653d166846c11c5c4caf083abfee171922dae4637b84879ac32c5374ff8b55fb86d183fb726d88ec023b82e37db1f8600f132d228252d8c17588b41d2abaead17034699585f4e59e28e5a57912e2c90cbac9d48f5e1628bf932088983decc95d1b7790144a35355a8560e471af8000001bc000000907797a2597b281f7a67a33bb41d59ee3f8409f632defc6fae1b71c8d8bc6d4fd5c6f57eab89f2e44e618e2028ebbc7430be6efb166f1c23993f263eabfb7590d53d6001529e4dc5c28d6b70e44687f49408c504f3c06f61d3789a9adb4184d06818f6c60cdf3b47ead0f2af1fddbd565f07e0ea1b8ffab0b3edf77ce50a047d1da1e28b44ad3cdb6fb21e0ad1401a1e5600000090e7cd15cbd7d604dc3ebd267669098875259758f33d7f8394763f554fb853df0dc20b2043a8a35def6dedbca5dcb7ccd541ecdd659fe2e54d7666bc23a455925800537e11a6499536650db0863eddfeae061fe47a7813d2f5c1b84cc60890e72ca62891db8b368508cb53d05ff739fccc10556ed49d3ac7b144a3315c230d9d16d0ce775c497044ed36f346f277a32a5f0000009036079011aa619692a82d09d37cab72890e2766fa82d0371dbcdfc96024ecc355845e0eecb2fcf5438fef22bcd21403a45443320b56a409d9d4b28f85e24bab1e5f4c5c1c456cd3469b854095f9cef06327f18c3b1f800a19e467524de27db559a1889e70701ff5aac4718c207ae53e062bc005a684544b5bd10b215542ebbd22f4f73127adbac71e7bb0ab9ea62942ca000001bc000000901c56e30b14ff95d261056b6697b53a53c2790f6e923799b970bccb4d7ca7170e6505caedf126dc61298a99250ae1e0c4df5157fcc22e43b885c1462436ed1d42990b8b83b176d90864e87a7496434c9127f42bf0f2e31355c08a28a31f912aa5c4125f1f33db79ce2452d7d9eeadb85f206dfca7b64ee7e1627c08376f29b7f45c7782a54c1bde19cb0e4904830efde200000090c469d0cde00419a54466ffd613d0075a68360a6c000a1640c3565f0645357646d4202d344f81f535c0ee5a63d5678c682ef3506189e625de4ca57f9cd18343e81dc2a337da2187ae1f1ef46b82ca35f929b934a8df1b8a5c865b62ec06414883e36a4c208556417de50188b9e63ae886008d4d088641ed3d7610fe979468e460e1941c6a40e45c7a909b106311666aff00000090f000963ce37616a79dd4fb218d12779736acae89f5bb70612521269239df6a9381fb67fc216948908391d5d8033cce584bfac72db507381c5ce2660ffa944927f9a7728645a549751f653b8828afb2882976ce0a1f462460b49a92dcceac1ca465882c1451a330d04a75738d6b615e4f1d8e41c3fdc467dc34fa0dbd0ebfe58a2d3664ee17e4a757bcbf329d60eeec98000001bc00000090cee6b86c27fafe9a53961c7a35aec525762eb9e8a90f586e140218877cafe0e8201097544989ea07c33943be12bb39aa595f0aa1d465a25bbc590a39a663f4375148315176ef678686061b7842adf5e30fd94698a3b0f0b63c7a88b8d6db8b40f1acc4d2f4042c8dceff2a448082a0bd0bee099f5bf552614e9f85e4c2f6afbe818ba529dfe26c2e878d80bd392d524600000090f52e7b5d3a576c1decf4e43f17dad2f7daa29b3dbb86d4d90d137479ecaf4430f0c597925d092de35f788cca374c7c3e19f4a7f82fa6d1c19955e81be7da36fdf2c461794e626287a8deb20e902bdedf10463febef7db25ec89728140cc71906af205392c4b344b9730e9ff571cf200b0952b01dba665c8508d48034179d5abb7ba9d78757732fc070e6afe367ea9efe000000909616c5335fbc488239daf8855e794da4ab002419fb121020138e5ff83b05560d21d4f934981be24bc517a3276b96f04aebf1a63ada2a17689cc482212960585f97223101d49b99b0d51379502482fe462e78436ecff482ad5d15cd945d38c24070d35a5fd6e87710fe6a33f417e317752ae152e2d822ca39df8c18896c0f2809719b2bf5a5e6bca42e2cb81992ba1643000001bc000000907cd41402f34828ff571dc90443c87b83bdf8956f8f46ccd9d9cd093b304e8eab41fa93422a4bd43896b99c7f9b93bf8781be96fd8e91533d872a500f5f3b45705708bfe8c84a0cf81be5f38fd2541b8007f8c6cc869fbf83c7c41c4cb9e88faf5916ac0e76f73f4a1a3c37125bb8a26b2080aace9f6179b828a9ab4c3f82cca663bc0a2b47964a116d87e42eb415905e00000090d2ff54f3d2e092f1f105e6d34b0e850949ec7ffef711562d48c60f51b4d3874c23e85063b7302318831ba3c778ada311c235c000c77bbc5ab15a2377540290e5b169f96fcb85b85908d1e682055bf6df07986a2f1e596e39147791a373928bc07526277322efae663270b3e69dc8c72b04c897819b3dace00ac16024c8c468eec789dc88378e8c79ddcb795e902b3b7f00000090319aa274793bb1a81f6a338745e4070d882b10b66e9f7b422b849ddaa1d05725c2c34c89d3e16801099570a45d8022395f425bd65a726d34663c4b260e88781f7b51da76f368e918295465c81610f01e033728e185c8df48b8cf4fbc35ba8058d6228e7ae4d4ee73e763488be78b3c89283292d34711cbb964f8c6184103887f86c04a62bb53275b313a2538dbd6c375000001bc000000907e32c6b777741b3187617f17890647b54674f3872264f3a8320c2bfab29cd31b34bf546b40d20ae8d0effa96f6cc7583e188a609196c0b520c8c12e60e18b207d08563e79f8980f73e6701a36ff852002b47db2508a6a1057914983668013eb7737feac710fee8118296bfa3fa14bcb105096fdee8c3ee63e0cf539da32f27c083a059b278c0b5c84c40966a2a10d8ae000000900d457589cbcd40f04de70da478296e7d82f54aaa876d02c12f3bd86026380205b2bb6c9897fc98e8f9ecc79ba40120257d9f7280dc61c66091cfafd7a8e0932c3e4b5065060a3a3b9921a72552e65fa104cd519d7b0980e9646d388e4c74f9075ecd7afbd3c22dccac7405afe468a2ea0dd83844cafd9466f91da8cc7c2adb20877c696ad7ecaf9eda1413af6c0c40db00000090e8ca7a1c89eccef662a79c166075e15e988b576cd67976011a33636f8d0a46199e1fca53f716957b1753581cfdc847b184436acba738a94eb8498e388cdac0a70df8684faebbb62d30247bde136439e709e6ac95195eb3f49e8fb9f4529deb4c50d660a74bca9ca2eb7c681f9ae826851f410bbb8c87639e16711694199b3bbf1df38660a59b8cc59d4849ed12de8c42000001bc000000906ea0d020669c95f98c4afd4e7b49e44f1dbec0bcf68e0525cdf2a9d7cc4572c4fe7db5c933cea814ca3f7119d6a87d69d9c115dd2fdd7e79c983713ecd42b3f41f96f810379c4f02ef66d07121ff74260ce173dbdcb085d969e8a711e967ea02a2c8e9fcfc7dac9e3c784a3ba713a9e118888b1f75f4c30d75caed62ae0eead3d01c649463016da07e08dfc6d75d3f1200000090ee749f22a395ceff251fe2bdc0a2265795a98093e665a8ac47c008ba96ea891def17810b0d7c910c8ee8d9984bca7631d6b8876b48e4aaa6aac66a940c11c8c213b76d987724eacf4cdae4c419ec3cde2b651b0dedb6e6745f89c10fbd5201f893a0ba34b6f81968e9ceb8707ad2986f1f56568c7a25bc6496cb3f2ed95dd56a04a29e82c10639283a681fcc222e0b350000009079f8a232f6944dc25aee40c0bb795a3d9cf49af7b7bd200b1460dfc961c76fb6c0787a62399dad964ed7b8f549c4f15a83ea4dcb09f5838a8dbde936302f6ea589b41dae2089ddadca9275c4394bcd870b07d19b1058802c81630a45c9b8f84d1152dc8a6a01a5aebbf1eee3921f2fa40c1490ec9d44b5a5739de65eff9e3378ec1856f5d8d7775f211002b1fb185e2f000001bc000000902b68c7c595042f1e3c6056ddcba72a3bd16e6e3bfdd2e1bcd1519f9754dac153c15e930ac855dc03468357f1602735d06563cded1e2315518abe5168ef13b7485c22f23a97c2da16d50f6845fe60eb25252ef4e0c07f2643d84469eee339bdf0fc92e04f7b3896d3e3106f4ef612533802ce688aaec094f1ab7f7930acfcd29f879738a39ed02b53bda9e2180a4a9c0c00000090c2997a8cebfd269d0ea834a15cecf23eb56fe7fd946485fe5603fe7bc01803c565b11cb55058078895edcdeafd586225a5b5975228e7063a92711679b5e8338e219c2b66f03b1e2d8006c5f06047a2c40ac44140f088772215db5042403bb1f9c3d3423ed989e7172bbc7338c380f1e82d34efa5cb459d478bdd34ec971ac99a919303ad97d7808594c986871902a2f2000000908dd8462e558525f6482998e69473a5f5be37a5571000a0edeb1ef12368f91518f49de8be6a1d422223afb41754bf24cef108495896f4f4fbe38e271d24af9157b94473c921cf44ec72927cb2497c96190915b5bed09996d006f1b125c011c8142aa6e998a59821c1a00b39f60b25af8a214a671a39ad07e2d77295868010250c135bfbbaa73d78b36d8d9d1c82bc6eae00000ce400000128000000908b1b85712eea6fd0508959ec3bc2cdc8699dc78cb7e9e7ee3ee0ded9832636645b461bbff1238a0e329998170fc24eb40265eea616dd54c4e9c76671b7d07e77f47f60bc59f5c455edfb436a4ec363432c700e22fe3c78e1d017817d6254785cdf9208a81205ba70b1107fae54eb702d24ee3e8827387fc4b4209c2ab9f92e217fadf73ab4dba0e8c17a6f9e9ebd40a600000090e75539a5f1d74ea5e8d068207b020e3525bbf59d812db6d8cd3cbda597dc3a9f2cd7bc70ff180defb632eab2174b343905446e860a9ade366e2f35d250a56e1366d9159b90819541a82f1c44793777902ee720581e93dd86ed5f81e3cd823b7f211203f84fcabacb8e63a53bf20cbb7f128e95d2249ca06fbd7e431eb5d630df9003ef365b5ea9914d30a2afea3857700000012800000090878502c237afca940fdf9db65b1a3080ea84b0c49e140b8a61baa39fa196825214fb9cb130b7cc353a975e91070b78aa531ab118a34cdc5a2faf130be194ed92e0be8179550d2053494cfe62e634d9df14307eeb797e42abbaa218fd5d377d4ee108b3fc0f8f58c311c332a4f8c038d01c217eff030bc4add98fc5fd42adfbce19db009dd738c836d64fef88844394f000000090b42f205a9b61d2ff949b8f6e26778caefd656c8d653e66d00f7cebefb102ef8b29de1c83905ad8642f7d632f3b7f0af3f18174f7261a390d7a7bb5cfd3a7c3b57c516a1451d778ea6ae5fa600042240e0bc4ef0eef3405e5b6ddecdf467b1bcb9f58b14b5024ead8a7efef691b43de2d3024d2d6032661190a90781abc3db9028d5887029023bbb3be9f0d47b10b47f7000001280000009078d227d58e6ccbe3815f9fb12fccdb4fcc03ca823087d4e97b0c116f1cc185e536d3531ba5a1f96ef90b624a6b52a893140e0f207699e8cbc57f504e8a56997c494e64d23627900e9f29d11e44c953941aa7c26caed31d450d3f70465bf58019655bd82a8f2b1022958eab2e4612eee311bf315bf1e33c1b91d4adfb3b65898d0a53ee3e982cf86735d7732d041e208200000090a2bfc05e6bfb8851e44957a8373b2eeaf94cc1243206cd95838cd28d352aa44599618fbf37f9e98f4e807bedf7b90d669ddc337cc1b8795b87577b40287ac17993496ac9831d888df662db3544dfc36e19e6296382ad78765f388ac80cae0a2045abe8f96756c73c3f0e2e8e8a9a6f75210e5507a3010faba89730d6ae1b78e9b85306208c5445563af124cd303d208900000128000000902f9e32bd060e4e362f9019b4d200d8ff7c8efdfdf4f2037bfca172500e088f06503fe24a2933ce7e8cc13ab6ed64ea3c849a1ada68569718c2628e86f652a7d070d7e2974afc614cfb338d5269c3427708e69b65b731bd7530f10208db626ba7e5a611af9aa82c5a41a84de74c7dc6942d168ccc16a92bfd620af7fa51cfcad174bca29b763419740a79d93e00d685da000000903313b8c0b0253915fa3399bd4ff65b4b8cb36eb3e15198fe6ac9ea6f7576d6c43333b2affa1106e91ba9a4349e0aa7c15bce9e1a05ef32239bdeff92aace0341a6e23992548dca0a8ca9f16e1e8d509d1e295ab54ede4a8f804280a3825b7134123bdeae52d1ae286711c35d428ff0392ba5711e3a9fe2ffd6a13f8cddafb2df593ef520d959eba34dfe6eb4b2af3c6d00000128000000900597e1b2b94969d24cc44ca880a979696fb57fc6d10c360ef97e35818a3f7f0457cb0c553f80df60f470b8e843cf2ce88b49ae94aaa5519bf0ad1a9b737ef788158c9f167a2359ca6d842437b1926b241ce617f3f1a023f0b856d0f4fa82d1df41620ace2927b7240667799cd230809f2f0763b50392451fdaaa1394dd43d33e40c4f46d8826bc8de3f4a1cdefdc207c0000009051cad038e385fb26489fdab45a81cfd959bc3fe7dd0379e4e4f97df538f84142db678241aa59133154a0757b1a78740e7c433c349dc911affb3dc6ff79516c75dd11c4a7abfb5c601cc0aea26e5e6cc811b4b223ff6c8fa47d86d030b1515b427100aeaf61744e4719cdaa46d19a5c591a3d42e79621cd6da12e2467ac230190bc53c0cb709a664040d736250eaac9b20000012800000090b6d21e6ba3bf86aba9731897ae2416a5bb3626134ff4779ee8be046e08d4c119b0a04eb2b32125e2f7a4a4925497855351e76613d227876a87e1c01244fbbfc5d6cc3480ec3e0c15ae7c136bc29bfde10d433ca264e1b603f7d3afed16d3090add241f43207064ee1969828c2a67785c1e8278dee70bcb9f054055fe1f79ae3a1a4bee8f42062a181599cfcc8532faf000000090585d52760de05a4bea9dd9960254c628e9213214909b50bc7ed92e864636dec14a71be3fe9660c68e25c5320098d393207b4b2f6cd2749549d89f0dfab06ef8e698e0f63fb2ddb607137b87c297bc8fb004997cefe37a0af484d6fdaaa908fb7059750443be0d0a0aa4bf20ee5c5a6db0ce2f6feaf6ca2378396e5640ec246ad6c57639a5132755df15131b5c2edeb020000012800000090197a76b608db7829b5113d52702b07ef1545fc83becf9182393bfb5a15ff4af9394fdacf3bae790b83bbf4131df5e5ee126003ba44e656fff2dc712d262f4bbb78b6c08e429b5ae34aef5789fcc53bfb07f56282a19b94637488e0f6231da7860ab51b79147116c7845446a8be5792fd0a335441fdbd2fab378f3d3ce0bea936936373eca7edbd288d40aa7e339a1d91000000906883c3ec9f79e0ff0a0b34892aa196bd670288633264860c88919042105c87728e4809c129d0ee9e061ccd0535b12df6c2e19630dc3b6b40d1c94ec16e3804b6e5a8c53c3b46988d38d86c6b4973daab2e701dfdc873b6b88b718b50f0b4c411c2c535bc9f513f119b0fb991ba6f2d6c1f2a5282ad8b35ccae36ea7f28fd3a2dd92db345745680a7cd856de765fb40f700000128000000900b27c5797b4502dab13464b37c0fab2b77b1d00cd1208e504be422b7be09a47405b8670c0f15eed36afd2fc6e825a817290af1ff26e289a46bf9ddace217d96824f35fec31f3eb5e4689b62557f8dbac2aa2455b57a05f0006b387b877aa9ddd2dd2262278a3cd54a2335738b2ad6dd129fc3ce181802112a401600cebacec379470e98da0219fab590414f584879db30000009020e734e468aa5340a609f0d67a8d045792e908d3a77775a3b064bd1e7db8b0d2069277218274860d154211bf5e0adff671dd8b46000ec754528ed23a08c3fec3a9f0308a54180d9f8e715bec0a042b061a7d6fc17da2bbbac553f7aff0e663fb05e96828635e70f9a212ebc571936fde1e190f45fd0eb196ded8fa16ba6358a91cd26beef402bcfc139a113049d632b60000012800000090559e894a46398d66ee91f238d7493442c31cae7df426787721d8a84b3e9b21027abfa1155d234875579f79db948c25ce39dd02dc7a2a880ff51c381274524858d79490f9de5320a2674eef582b5e810d17f586c029001dba9303e50d92abe3a7859f53af7cbaaed6c7a954822f107de2070bfc5b7f81f32f84c7f38255e7fb9c8e2b4e522488ac0aa9562bbfb8ef1a1d000000901a7858443265e05a9b7ccb4620c6e5b932a4a56ec711b370bdd891e12e2325ebc9d2683fea60f68da814c8f69de469a40712096784a84d5a2588d1ca030aaba99f67b2235b602cdc2c0c7b1d03535466043003046daa57a8b695e2cb76bdbd79b84d76fd9941df3eb2af24a3dc9eefc71af540cc1cca295e08bbadb36de7a844f3dce750fb69719098b77d6cd279249d0000012800000090b13b7ccd5965ca1064684f2234bffe793180511069791478d8db77688c9b77b150e7e22799f48d9ca8a48019fd6a1dd6f78e574534dc508b311f57ef2f8f5f720f2f683c6572e785c3d2c6e832dfefd212b55c4fdfebaf559e2c1b7ddfb677092a7aa3e556fc6f9ebba4ef676fa461d816988894ddda4bf4cbb5c12d71a1c5f656af21a99e183d86bf55f8a669a7123c000000902f0d5133ae11c874503e533bd7de773116b9326fd3906a67ba3d52d1a8fc88dae300b589a21f0b09d6a4c20aa584ca9cf70d6556b9f60eb5da8c5815d6aa06c839c6740813b89c3dd40f88bcaca792fd1e4dd5e1682df46ebde13f12250336f3ca4eab85333d9f83c375da47d08049781f3cfb18263000762ee076dacf4d0676d2a38f5d7ea1b41ef7bbe0a5102dbba800000128000000909d95823e562e4e748a3668726be849a7b786b0294a34f7e33663868a6c5d180a2e2d77406a13ef85fd1c7155f465ec4cf5e7f10641f8d1d9355499324f3efe89fc7e3bcb3a311e483acd0b2404e6944c0e47564cb097b69331675ca64943306479982e2d53e3e4c8b34b23b34a2f01bf1929b203956898dca8269fcf36e915dee4b72f98c06c235207847114c71d8d8700000090c113065009b75c2e8fb88efe20851ba6f1aedac6e6a23d0cae2d4e2d54a592594c1c9ef9f3526a0ca99d0081dd17859ab4f86f3934e2b8acafe3cb76bdd2dcb665acaa941a97238e34bf87c1e166ebdd25aec04e154061e2786a9858a1635932b7e16d1017b2f6097c6949adf99a24d70bf36545353263894916091bb7c387a02ab96afb9078147eb2b83dafab47137e380000000000000000000000000000000000000000000000000000000000000180000000000000000000000000000000000000000000000000000000000000018100000000000000000000000000000000000000000000000000000000000001820000000000000000000000000000000000000000000000000000000000000183000000000000000000000000000000000000000000000000000000000000018400000000000000000000000000000000000000000000000000000000000001850000000000000000000000000000000000000000000000000000000000000186000000000000000000000000000000000000000000000000000000000000018700000000000000000000000000000000000000000000000000000000000001880000000000000000000000000000000000000000000000000000000000000189000000000000000000000000000000000000000000000000000000000000018a000000000000000000000000000000000000000000000000000000000000018b000000000000000000000000000000000000000000000000000000000000018c000000000000000000000000000000000000000000000000000000000000018d000000000000000000000000000000000000000000000000000000000000018e000000000000000000000000000000000000000000000000000000000000018f0000000000000000000000000000000000000000000000000000000000000190000000000000000000000000000000000000000000000000000000000000019100000000000000000000000000000000000000000000000000000000000001920000000000000000000000000000000000000000000000000000000000000193000000000000000000000000000000000000000000000000000000000000019400000000000000000000000000000000000000000000000000000000000001950000000000000000000000000000000000000000000000000000000000000196000000000000000000000000000000000000000000000000000000000000019700000000000000000000000000000000000000000000000000000000000001980000000000000000000000000000000000000000000000000000000000000199000000000000000000000000000000000000000000000000000000000000019a000000000000000000000000000000000000000000000000000000000000019b000000000000000000000000000000000000000000000000000000000000019c000000000000000000000000000000000000000000000000000000000000019d000000000000000000000000000000000000000000000000000000000000019e000000000000000000000000000000000000000000000000000000000000019f00000000000000000000000000000000000000000000000000000000000001a000000000000000000000000000000000000000000000000000000000000001a100000000000000000000000000000000000000000000000000000000000001a200000000000000000000000000000000000000000000000000000000000001a300000000000000000000000000000000000000000000000000000000000001a400000000000000000000000000000000000000000000000000000000000001a500000000000000000000000000000000000000000000000000000000000001a600000000000000000000000000000000000000000000000000000000000001a700000000000000000000000000000000000000000000000000000000000001a800000000000000000000000000000000000000000000000000000000000001a900000000000000000000000000000000000000000000000000000000000001aa00000000000000000000000000000000000000000000000000000000000001ab00000000000000000000000000000000000000000000000000000000000001ac00000000000000000000000000000000000000000000000000000000000001ad00000000000000000000000000000000000000000000000000000000000001ae00000000000000000000000000000000000000000000000000000000000001af00000000000000000000000000000000000000000000000000000000000001b000000000000000000000000000000000000000000000000000000000000001b100000000000000000000000000000000000000000000000000000000000001b200000000000000000000000000000000000000000000000000000000000001b300000000000000000000000000000000000000000000000000000000000001b400000000000000000000000000000000000000000000000000000000000001b500000000000000000000000000000000000000000000000000000000000001b600000000000000000000000000000000000000000000000000000000000001b7370000000000000000000000000000000000000000000000000000000000000280000000000000000000000000000000000000000000000000000000000000028100000000000000000000000000000000000000000000000000000000000002820000000000000000000000000000000000000000000000000000000000000283000000000000000000000000000000000000000000000000000000000000028400000000000000000000000000000000000000000000000000000000000002850000000000000000000000000000000000000000000000000000000000000286000000000000000000000000000000000000000000000000000000000000028700000000000000000000000000000000000000000000000000000000000002880000000000000000000000000000000000000000000000000000000000000289000000000000000000000000000000000000000000000000000000000000028a000000000000000000000000000000000000000000000000000000000000028b000000000000000000000000000000000000000000000000000000000000028c000000000000000000000000000000000000000000000000000000000000028d000000000000000000000000000000000000000000000000000000000000028e000000000000000000000000000000000000000000000000000000000000028f0000000000000000000000000000000000000000000000000000000000000290000000000000000000000000000000000000000000000000000000000000029100000000000000000000000000000000000000000000000000000000000002920000000000000000000000000000000000000000000000000000000000000293000000000000000000000000000000000000000000000000000000000000029400000000000000000000000000000000000000000000000000000000000002950000000000000000000000000000000000000000000000000000000000000296000000000000000000000000000000000000000000000000000000000000029700000000000000000000000000000000000000000000000000000000000002980000000000000000000000000000000000000000000000000000000000000299000000000000000000000000000000000000000000000000000000000000029a000000000000000000000000000000000000000000000000000000000000029b000000000000000000000000000000000000000000000000000000000000029c000000000000000000000000000000000000000000000000000000000000029d000000000000000000000000000000000000000000000000000000000000029e000000000000000000000000000000000000000000000000000000000000029f00000000000000000000000000000000000000000000000000000000000002a000000000000000000000000000000000000000000000000000000000000002a100000000000000000000000000000000000000000000000000000000000002a200000000000000000000000000000000000000000000000000000000000002a300000000000000000000000000000000000000000000000000000000000002a400000000000000000000000000000000000000000000000000000000000002a500000000000000000000000000000000000000000000000000000000000002a600000000000000000000000000000000000000000000000000000000000002a700000000000000000000000000000000000000000000000000000000000002a800000000000000000000000000000000000000000000000000000000000002a900000000000000000000000000000000000000000000000000000000000002aa00000000000000000000000000000000000000000000000000000000000002ab00000000000000000000000000000000000000000000000000000000000002ac00000000000000000000000000000000000000000000000000000000000002ad00000000000000000000000000000000000000000000000000000000000002ae00000000000000000000000000000000000000000000000000000000000002af00000000000000000000000000000000000000000000000000000000000002b000000000000000000000000000000000000000000000000000000000000002b100000000000000000000000000000000000000000000000000000000000002b200000000000000000000000000000000000000000000000000000000000002b300000000000000000000000000000000000000000000000000000000000002b400000000000000000000000000000000000000000000000000000000000002b500000000000000000000000000000000000000000000000000000000000002b60200000000000000000000000000000000000000000000000000000000000003800000000000000000000000000000000000000000000000000000000000000381100000000000000000000000000000000000000000000000000000000000000580000000000000000000000000000000000000000000000000000000000000058a0000000000000000000000000000000000000000000000000000000000000581000000000000000000000000000000000000000000000000000000000000058b0000000000000000000000000000000000000000000000000000000000000582000000000000000000000000000000000000000000000000000000000000058c0000000000000000000000000000000000000000000000000000000000000583000000000000000000000000000000000000000000000000000000000000058d0000000000000000000000000000000000000000000000000000000000000584000000000000000000000000000000000000000000000000000000000000058e0000000000000000000000000000000000000000000000000000000000000585000000000000000000000000000000000000000000000000000000000000058f00000000000000000000000000000000000000000000000000000000000005860000000000000000000000000000000000000000000000000000000000000590000000000000000000000000000000000000000000000000000000000000058700000000000000000000000000000000000000000000000000000000000005910000000000000000000000000000000000000000000000000000000000000588000000000000000000000000000000000000000000000000000000000000059200000000000000000000000000000000000000000000000000000000000005890000000000000000000000000000000000000000000000000000000000000593000000000000000000000000000000000000000000000000000000000000058a0000000000000000000000000000000000000000000000000000000000000594000000000000000000000000000000000000000000000000000000000000058b0000000000000000000000000000000000000000000000000000000000000595000000000000000000000000000000000000000000000000000000000000058c0000000000000000000000000000000000000000000000000000000000000596000000000000000000000000000000000000000000000000000000000000058d0000000000000000000000000000000000000000000000000000000000000597000000000000000000000000000000000000000000000000000000000000058e0000000000000000000000000000000000000000000000000000000000000598000000000000000000000000000000000000000000000000000000000000058f00000000000000000000000000000000000000000000000000000000000005990121646ddf88c49342087fdb65b3c93f6d9c0bde5d6a57cba4cfeb51de93860cc90000000000000000000000000000000000000000000000000000000000001080000000000000000000000000000000000000108100000e00000001bc00000090e5beae84ad2cc8f9ac2f0243b383f29ac3026ea3221a975cc3e96dd87cb1b2cd288fb419143a2e3fdb3e74a8ba204506813729d870cd46584d2e0a6cc46febd84ef96bf005a88b5b96cf8657599950810111d672ec3c79d128cc00dd035ca557b0af27d2bb3909b3cca24f3bf63ebc7b30206cb6c43b3f08e7dd4cecc20a51ece7ce993c75548037c9b824eb7b25a1e60000009029c9d183d1b671441ced50e87eb0eccf0b0b1bf8450f0b8d0c046cbb16edbd739fa3af4f00d79885959fcbdf3dd092e5b1ad46eb9d8a02e17e0190d108cf623467a41b9311396be1039a4407fce1604818e2ae60b1088ea1e43266755de20646c966e4585b3de435e6bceb96f72232c405775a0b4a092f3d3a4dadf240b8a33cef8299f0a79ae0522bf1ee8b50b50ca30000009049890c469a9be5aede68f7fef731de21dcb10e1742ff2fac5f0de6b7700119b6346323e13bf04eb8a1939ea3d68f04245f4af6945568ed4efbb4e3b02fc4c510d159a81bb6586d1e787af3c8f7a04e740867c0b4d20d09b5cd3fc58f826fefbf8f37568d88cadef39574b0d166b1a1e215fd7ce4000998076719adc273be85addbf3ca09e08bb23716545c0c7b9f4a81000001bc00000090be2ce008f4200f617adcc672b0cf461e2ba74ec7adf03a4cb6940a256f6b64c3689b3957490005f2b39f82acc647841d75124760e6265618572724afcd0b7184cae9a6c17d918df25fd1e9160729c0fe00bda7b2f6e30a8cc146d7b81dd3c3bc3c4b86c835746074f7558a4240edc7b5086c45cd9b4b8f817a983987267d76e8c3ae1eb98ae1a7bb82dd3ef266891b320000009018aaa3c1b6382d37dc324bd7b9b04e912a9fdaed6013056779f31afd945b6c8dc8193810a3d73aa9486d6339cb0c95fca6edbeaf2865659eac3c0c566bc28969b348a3a68cb777437f60871c88777bf020ca511a2ab8fa1c1b0dbfdbed68167755b29964cc8775d70c715be37c8a04fe144840760a5af9af104cfa6950eae99f8bbbcf00879f55b347542c985308eb6f000000907cfa40672ac8eff3293755383c392d9415ee6fd5ae48a49ebafd72d41b95430d699ed801333e939e077650f4b7f07aa90f31e53e047609b3ed70bb982826c63e2ed20511e9d0c45bd44288af8e5ee67724f8686c44cce1dcc568fdabb10e41775688c36bbd18d21c2d1d22907b865eea2a06ad287c4a0f8b9213f5e633a7612f1c936e4a96d0cd2a13891201c0f7ffe1000001bc000000905c783268dcaa0a7af96e8d71d7d4c02f63c9a05a16d8d4284a8f6767525cf97e585c1a3a8e166b06b0627e135137c309792dc7ec60dc5731a4f040de82518b98363960bc4edb147a2caabb53cdd90d7f19d2713f2287d94655a57ef1c9335ca95fd80e334c7f907cccb663dd2a66fe3c020a1e59175a6dd61cd6586cd66c6dc174413f90303e7cfd57061a758d4cbbf700000090e5b578e9cc607d21278240d70b61cc5df0090507bba71a5dfe79ecb14275e1870086f1cfa977a6739d8720b5e7ebffcca04c4877b54680155a3f51f625bd59ca24751fb296195aa0c72b9aceaf80871e24a1026779e134fea8bef19713f9041859766ef4a0fb24050202d228b4c9ac140681e908fcd4db899da521cf9eb7a85fd40eaa60bf62169d2c92514ed54d7b0d00000090c3717af7b93d9f92f62e80fae1c79db0cec1e6ae810ee83e04577161da4cae2275ad12a89a09aa7f85eca034472b1e4b8572e42358641eb01015af91f5446ed850d8fc4b9c39f3c79740410f6185781b09471c408a9558418de27fa0591cfa57706dc11703cc1e1c35a5c0f684d11d7e16d8fba41c56a4358f804f4272f94a0f2d4d27eebb15909fa6aaf4042f15f606000001bc000000904c9e9a0b754248edec88cb0c5ba9d563c0e42405b1228bc4710a750c801ccc966f619e44d24c4516ce6b71df1c2fbcd7fb803327c897e90f00c59ef84f7226e283595b7d25e630f68c3fff06d6c559f519f631fb28d2e17bcddc125acd394a5ac292de35d14acaf40e41af62efa351801100c645406f690f29b9eee583d48de4a498a2d38a56b060fd413d7f609dcb3a00000090c2d896c4a4aa308b8adf529ac581e8cad7f2a189087104184d1dc4f5b7a733f6c1ab45650d114e1456b3560fc1a5040c6c072bbdb14615810da65836b8a94c96e0ef62941fc5e23eafa8180a6c1da0970763ba0b2427bfdcfb954517664d8a6e73f89e0d204a3c95ca1c57a32c88a81e235a253f293fb8a8ba73a43805444a04d5b56ea58a819ebdb338f1eace98abe50000009034c29d43735a3234d3ba3867998f5ea5d61d3e1f9146279ca2e095d9a0869843e099b13eb81369febc546436e1ee1bc3ca473abb4b65cb5bbd69de735fb7cc10f34a73d202df7ae6d7bf1f90a1afaeac03dc67595c311e9c5bec2a847a6cad36c4787913ce85ad057a2f24e591a485da19f8b7c31a8907b5393a47a5be0702ec0e530f43a88916654b833ba09b9553c6000001bc000000900b7ca51ec90648a2e744498bc5001b29a224dce32aca1f2c2c22e3a5581ab897244584c4a87da50b9f5e637d689fbc18fcbb88acf8868b5f16dd83c79168eb51d84f3dab86515507ab673ae6e2cc107a2ccf64d6d10ae0baae2582a12f6fc760ab3497abfdd59427871486fb4d681728123290308059aacc63684ec28d9febcca1336bf4a8fa515f4e2c15a34b6eb4a10000009089e78f125f420c435b67d0fc5f9e706f8b85a11b255088227013701d0e2d666589b46152b8e7657879d5878f9d877eebe43dbdd4510a447b26ec21aee6ec51b429ffa7b58e37e561116463f079f257a52f5b7db60c6a79cea24541a02f6ba3413a17ea4bb20a99c5a4b06106b5b1fb1913f0c28461fd3b59a70035ad9f0ff76a0e91b4a5648725ddb3d782aa30c9316f000000903a004fd2f8b13fc1d32c81ff2473774a485ed4f3db6ff1d132dc5f1a96137898148d075fae37ba5998f2f3f51142fb8f186ab090b48c00b2bb7cf5387a0834f36a8daa8c93faf65ac2dac8bc1084e2f3068f194c819c29faf866a34764d45b598505367b6a07d4e118af57688edf08c5120731f83ff02a34ca0feb395bc67263d8766576b4625fc2414105df6825d8f8000001bc00000090aadebaba4ea9fa938064246839601c426f7dd473c44e8b06790edfde17da0e00fd328fda1565674e79efa157dcbbd1d38ecd87260212299c200910dcb2d50aadb6b331a238199d15b8725bb9edef0cef2bd38b2ba20b97248a9f4c04bc51ab3600690f5f572080ffac3d3eeed1fdeb420c00343057f577e420fcdf408824cc8938c5d47043af70d1cc785f327f311dfe000000905c79d3a23ecb2bebabd3ce41126ea1a30a8bbec4293a96ee256f1c7b3a738de93d250e1cb90fdd326290349cae0703a1511841eaf57827de7162953c06f9e67e137ec34ff78793cf3c3fff6c27204acb054e7c952e4f6f53cdab95b75e3301bdce567cb1261e967afc0881af0df8760701fd8813d05c7b1585cf6b4e43601df4c1cb7d82be24c66ffb24b06170e23dd4000000902403df68878552f9cd1d80d3bc9961c7d4807def48388f496fc39ff8f69ae0b2220047befc61765c19b5ee921c3824d73a0c31e6773e35cad710feed7360807f7cf21d045dd84fa7b9d3c35dfa3d92f61beb37e19c58bf06926093dcd9821388e86b3289c141bf4e858cb69099265d4905b8f4f3d167bc6dd1b1fb0f3ba8ef369698448c7b0abe98d4258875bc585b61000001bc0000009008e5b6e1f63ba40900e7f61d90820ebc796e400ea93e88b78609b9dfcde6356a138462b0674309dc12d1766d8a5a7834c99c4987d98869f92348043e094c284e1228f38715e843dbb18d097c596c57de27cae9e7ad90a3d76ddcbeb41c92889aa6f7bd09d92d8994f228206c2f68ea7f1c84c1abafbd082703b8205661ec4a4b8c14ce6de293f64808147de10aeaa5f80000009049deeaf797ce540905193a8887a1954a4625239696df260f23598ceb8762efdbc1d1c4fcb9f99c6c9c37bca2a28f6a248bacd5991d6613167717c0c71f0012536b3314b000dbe46e92500046143a69ea22455c88fc21b38356f457e2bfc938575327da1777f22ddf422504c1264a800b188f1900d38e4f3dd8abc6878fcd46e00de0c872c4d4fb3200ecdd91dfc04ef4000000900adb43f947d4b6cd7bd828301e756d362f365134951f5e2d78ff755efd8a210a74ae01faa1f70eeccf225e8742ac8c7a5efe0829e806184dcdcb48244a36fa5b5c821567ba9a534c5719cd155a2d5bc90e07b5f74e4365e47815fc3425b4b74ef8b39cd38f8af3dc7657e956ca5750df1e1e43c6118b97dcc6e474c50b5147101e24d7328cab3e464c847ddcc7bd9c84000001bc00000090db3d3137b76b9c6610f2e217de6c67b77059a75ed80e9505d24675ad8c2c01c3769d03ef1df734e13e3ae75608f9afa3665b9682bfa7078d7828ac532da5fa90144d10240686f7014a40af1969df6d4509e31100e72a38eb3ee884186577f5ae31f5e37507261a370a95dc4a09d8db64301f5960c0ebf2cbbaa79568851f075fe5ab9fed64aef79d60d61e4ebc25b7db00000090a671c61d47f9d647c970c3b95711b42611a53e92e53ae1a7cc95028b125934d1bec8716fd2f968d60d47958a003903b06c0d569c4fb60ca6d9565d6e89c6a27200fd96bc0f7f9388c5633ad9e5460e4f0fe68b25b2adc49deda67ba2b21aa0a6c7f564cdb68b8901748b1302536ea06129c77971e123f6e7511dabbd498109d228a2c267d9b09dbd488a57097b5576e700000090015828f1616f0a3ef5d05b960e5c2cf9fcfe279ab4c857d100bdcf2275538b0955d7b43fe07afcc5b6b69b078d44ca4502ed133a0f74d326f575611918abcaf9c5449f2232bf145ec2384f131adb668f0490feff3ab61e331c69dd4074d062c09ccdc9c08b1de09e6f8e54977264d1c2201f42aafc3cd9bd8a4dac1e5f582f87f6d41e3111c110ded7e1f7f76c80a5dd00000ce40000012800000090f1ed00d284fd6b65f2146fd509c990b02b99e12e30c7bda56e17b067d31d8e2ac9a9f148fba9c704891b859113bf7fd96a3e43285466374f60d90fcb740f31a65ce5af2594a5e28726bf972f166f521a03d3c8fd036c967f22cf0abbf3077ebec4205c22f5a78c5f73902aab26a9e3602382870ffbeeaec2a29245362c6d73a4d32bc1800d3a13fcf7a540cdc2a16b8600000090f40be98fab116ae654389a10ca679e291b444ccdbf56ea26e259292d6f728928de6b7ed0306aba063729f45fd7ae1c799df4acd1b98a5a8eebb2eb5acaa0050e5c66ad37484cc39af4dae7ae3ba90f951fda09eea3d7f6ab392c088a28a5516c55d4b9648e99c0a2aab1b9f8bd23c2751f7267bb5c17725f1422f1bcd3f06df9cafce9efd9b51350f4607f3ab7f916d100000128000000907324b2b22afde63b421dedbd45dc27901ec70652afa30c7a723c5e9a1b624eb4151100ebfb150a6f46b32e0e3cb9b5f0ac0fc1680dab99a56cd072fdc1521b6c39fbec4581ae24a44aee546d690feb6f2d9b59dcef89dac0355edd1001d5d5aeb25154027b98337497b419dbbbfcdbdc24d3b06bb103c66db07a03b970ac4c51f40f88d9a6d3b0fb83574a833f6974470000009065a51ec7c8f20053a08083debd7a7ee285e4f5c5a10775e4026b44e5e64438c53c4abb4d63842653bedf6e281fe8b6de1f9a67c6aff28023024274e9db86c37253f82327ae0cd5299ae66750a9d806ed01f93dbf67d5187b73188ce667a03fcbdb835c968e21510dfde72d2ac9c98804045e55cb1cfd479f77c71be498f6cdefa4abdb42cfa9b25e57fb3d87c1d20ce300000128000000900e589ff635bde70afd184d8c144dd67c3c3e04d5be8f68e61861817589f9c92203db7d4fc938039bdacb1c9e499a602cc11f6d3132a41d576de1120e062912ed0319601ca2fa13e7cd709c60f3eb443903fa5fd9bc6371ccbc73310c88b144c1675b0449a67f0798cbbd340e08138f6d05c69f76a930d567f1c5973e67c841051012152704e5f3983c6ff27467984fc9000000900b159506e85fdf306392c3f368a4ddca1d02b6181b208677bf2b6b0a395c12bb39b8a27a93de8c96b8fa38cdd00d72c477f5a4605606b1fa75de20517b1bd1b6b4066f13b1303d36f681a90e47822f580ad561911c98f7de39363695154c52bddbb6701d1b2b013c729e97f2b3b13b801c0714fef963c2ec64e4a0ea4e4d22b5dc47f4cc8b7a3beee95445cfa6b17e410000012800000090e6d09b98262b5d7961b695a5b5da9e4ae9307fad48833efac057a5a3943351b20e754133d85cc294e24ce619fa73be4ce47ded520ac0411a85d16a13fe6aec3b2135cfef865bf09a7c2e3a164d88c35e0f63a00e0b3be4b145f92dfe946c569ce44415c21c52df908f0ec42fb5dd74240db3e4ff114991888387455ca039283ea13d3455a0a2fc6f8518d005eb23c2d1000000903fe83606518fd8994e85537908db2d8530025e3c94d99c70dc0710712fb211872ae64df17c2f429508bcd58efceca327202c3c612420bcd6f09d557e2966921c787b15b4bcb4db18314043e050f338a52b81af133320e2c2d21333ed2a818d51b3f9fd1721778240bc76f877ca154d2f2d7d5d66aa8efcba9f4d4e22b488e384b642ed026549cdc73fcc5a82cbfaa045000001280000009014e3a7eede6e211b1927a6d6d87b86cf2f57b1bee104c57cfbedd58eed5be067f45963c4507b86e0f736bc1eeb44e5682d1bc5687475f0328f37dfa37065f6dd499dc12f57015f714d095a42313f3c671a26022055cf15579b71bf56267c4e963ac173d09ebd29d0fb2c92a5f445c2381f867098cefeee31f5cfdfab65f717810ced5fbd6ab1bb54988683cbdc495a7900000090074a514ce9caaf2fe03806d2c4addbb941db6f99f20970d78d7bfa951b20aaa47d8e267afa1943b131573d2f56b583f29de650d49e4dd0cb93976c5f304cf508b93083a406036178f150e7d9b6109b4d1ca624dbe2f3bc74f932dade25428b333fff70b08f4bb86f1b68d3fe58fe85b02a705128f48d6d55a33a2f2a95935bfa8b0d3c5c705caf2ef13d69cb6fe164ef0000012800000090f4a5f0bb13a56533c0dcf747068d379c83a0bee89777504ba5e746469f97ca1a7a29f1c3154a42d05153b5a864d21839ff06b115611f010eedbbd194c6589755052db35cb7b69f743c857c7913bdd1e00c6560124f2dde790270b446c1777691d643bcc138d47c152de687721b1c0db2253db2562c2caa40dcb2f59b736dead15f9d05af710f3b8350f391423149713c00000090ef37d401ddd6117efc017ce9804449ce4195c8e90f4c55cabcf57b8df8c57e2bb0fcc497142742dbe8621989a73c7cc2af56525dc2668ad6111db3a20f66f89bd64e4841d40fb1f192ac2105dd6b60e511dedc6ec705f98eda132b5c53bc78c964b18ca8142e06bef7810a0f4ead72541071309c701fefdbf5521c221e9068310ac073642aa7ab6157992075eae359e20000012800000090cf483309eb905d5a50b4ca509c9e09ba3a288b863dfc9b909e98a6e71085757c817489794d0403478614c0a0eb34d7c7339c4c54c74f0970519af9648e2b9ec0ff3d4c442aff7e7d640fc082ae3016f00b9391a5865383d98dadf9d0267b6318f416fbc0aa92e42523c917b9e98bf99828fda313302d231699fe1e4abe869b33895bdfa6a10ef31ec5635dc812d131e400000090e8b731b537f56323b4c2e83ff256e057e48738e174cc580c509209d69e32d7bc99756d1edc188742c51a4a393d5823fe44856babb018fedeea91ba0debc3194759c0326e8a025c451bbe9f05a38f3bdc25fccac8b7a3396405e38c468606c6624b99124ff20a74e1f9ec3d50111a6051077c481370c202fffa9ee088d6bb294ebea7def76e06bfd5683b2eb8dd004c3300000128000000907f9da16152d3ebd04e01ce5512badc6344d3f808c23aa4c1d6127108751db9692c8aa91750912261b3709d568670a096a87c133e69a745ee5c5f18d7cbc21d5800785de9e54e47acb8668372c12dd26c0186b56e8ea1a37c4b88ac58a5978e0ee8da377bb2653ce793a20a30b91259150ba0e65c16c7089bac643319a368c0b89cee058cbd067924dd12580612643971000000904b9ef844d62c2c172af32a1cb0cef27d3d59cd5bf409616acda8dead3db5b886b0db20f86136c63007a05c2992cc1fdcc835bd48ce4d88b0e47136540af0c2e8b4bfec1181a18eee8e40a2146568d5c70f29beb46dc3a2c9a11f7f73a985b3cf74eecbd97e48b79b282b6c67b28d70d52e86be8eb57cf692a4bbf5a3908b79d0d08cd8a2f6f8190db3552dea03e8d2080000012800000090aafbcaf0d6bfc617fe11923da2d1869b00e5a5dbc609d2f74f93a4673a6be68f0ed07e32a8bed1d05cf3044202a8316a1a507e98013c93f4dc459831b0740c81c65f7eee5c64fcdbfb790eb02a02680b1faaf5eb7f1983272eac8c08b1017a01b2e8623c49c8c13754db6ce4c20da8d80c20ce54e28405743cd04acf7dcf02f78e66fe960e40e66e01ad72e2b941827d00000090231bc9d82acc19b7f0af78a7cbcc34ff40f35b6437abfbef9c940fe52882be68b0339a6d8c0f3330c5fc54be1142b8007bedf65b36360cfd4f5507ea3f10aaa89fd551b38c760e78b37dab2a873bf0142b33fa723e5609551affcf829f922b55a1a94567d4536df0e103a7044af9fe922fb92e70b058fe320a579d660bdb4ac1515bc9836c76080571a3d9729cd560370000012800000090cfbeaf83c263f13e1b2d347a696c305c10e9a6196a5e9f278edacb95cbdb0bb359f29b702e7a80e867a663c50a588ec7394d1af15831d39351bc1466fb441c155af98f3ef45f6dea2cd1f3533a4601a6101ea8156578a1b8e46f72cd5bd01edb096da23e5ef2fabfeae88c0f807286370b5c2691f9ad1412f0c4ac5e23342a665a140a85787bae02519fdc41d200970c00000090b9ae26b89a5c369c01304504b120e027586ea0b62f1b480fe162389e86a128fe0a9ab8f61ed45e0cd0d52c4fafd04a53bbfcf7ec5af1fe4eced028ca63a2b2aaaf22bff2624281b9c3a717a08e3e568a0c464d75301a3e2604f4ddc382db17e9e8f8358e95de04731c6848d3566a581c1316947963624660935347ba2fa228aa259ac306149b69a81532664bb4cc3fd3000001280000009002fb8aff92807c62f616c230ab2ec9a1dd230a9479cd7fee4a021bf7367df328f1aba568df3df97da136a72f80e965ab1df734a5332675814cd4299b7d2aaf8c468b7b6cbb0075e8295bab5106e53ca814c6eb768343a34736e49fa617ea74551c40bd6f0107f2879a583bce9bdca374119bec1c40ad65a8cd8e2ea13b5aeba43859fd38d846096e3d83ed97833e8e75000000900e1db63108b60d67c9e5d64a769d1044e4dd8114298bbdf7bbc617a5a476dc76daa6ef2b4aff9a24bc7b798832e47946260297966fce290b8c2f8567063d4de4d2b1de43ce1fd3150715a8b55a43a7f6026a016dfc97968c9962c8cb0936f4872bb909ce65cd11dc966c8753fb51ce5614f47d25e03f98b047f02cb45e49604b041afa62a087e0939b78c7c258b3a1603800000000000000000000000000000000000000000000000000000000000001c000000000000000000000000000000000000000000000000000000000000001c100000000000000000000000000000000000000000000000000000000000001c200000000000000000000000000000000000000000000000000000000000001c300000000000000000000000000000000000000000000000000000000000001c400000000000000000000000000000000000000000000000000000000000001c500000000000000000000000000000000000000000000000000000000000001c600000000000000000000000000000000000000000000000000000000000001c700000000000000000000000000000000000000000000000000000000000001c800000000000000000000000000000000000000000000000000000000000001c900000000000000000000000000000000000000000000000000000000000001ca00000000000000000000000000000000000000000000000000000000000001cb00000000000000000000000000000000000000000000000000000000000001cc00000000000000000000000000000000000000000000000000000000000001cd00000000000000000000000000000000000000000000000000000000000001ce00000000000000000000000000000000000000000000000000000000000001cf00000000000000000000000000000000000000000000000000000000000001d000000000000000000000000000000000000000000000000000000000000001d100000000000000000000000000000000000000000000000000000000000001d200000000000000000000000000000000000000000000000000000000000001d300000000000000000000000000000000000000000000000000000000000001d400000000000000000000000000000000000000000000000000000000000001d500000000000000000000000000000000000000000000000000000000000001d600000000000000000000000000000000000000000000000000000000000001d700000000000000000000000000000000000000000000000000000000000001d800000000000000000000000000000000000000000000000000000000000001d900000000000000000000000000000000000000000000000000000000000001da00000000000000000000000000000000000000000000000000000000000001db00000000000000000000000000000000000000000000000000000000000001dc00000000000000000000000000000000000000000000000000000000000001dd00000000000000000000000000000000000000000000000000000000000001de00000000000000000000000000000000000000000000000000000000000001df00000000000000000000000000000000000000000000000000000000000001e000000000000000000000000000000000000000000000000000000000000001e100000000000000000000000000000000000000000000000000000000000001e200000000000000000000000000000000000000000000000000000000000001e300000000000000000000000000000000000000000000000000000000000001e400000000000000000000000000000000000000000000000000000000000001e500000000000000000000000000000000000000000000000000000000000001e600000000000000000000000000000000000000000000000000000000000001e700000000000000000000000000000000000000000000000000000000000001e800000000000000000000000000000000000000000000000000000000000001e900000000000000000000000000000000000000000000000000000000000001ea00000000000000000000000000000000000000000000000000000000000001eb00000000000000000000000000000000000000000000000000000000000001ec00000000000000000000000000000000000000000000000000000000000001ed00000000000000000000000000000000000000000000000000000000000001ee00000000000000000000000000000000000000000000000000000000000001ef00000000000000000000000000000000000000000000000000000000000001f000000000000000000000000000000000000000000000000000000000000001f100000000000000000000000000000000000000000000000000000000000001f200000000000000000000000000000000000000000000000000000000000001f300000000000000000000000000000000000000000000000000000000000001f400000000000000000000000000000000000000000000000000000000000001f500000000000000000000000000000000000000000000000000000000000001f600000000000000000000000000000000000000000000000000000000000001f73700000000000000000000000000000000000000000000000000000000000002c000000000000000000000000000000000000000000000000000000000000002c100000000000000000000000000000000000000000000000000000000000002c200000000000000000000000000000000000000000000000000000000000002c300000000000000000000000000000000000000000000000000000000000002c400000000000000000000000000000000000000000000000000000000000002c500000000000000000000000000000000000000000000000000000000000002c600000000000000000000000000000000000000000000000000000000000002c700000000000000000000000000000000000000000000000000000000000002c800000000000000000000000000000000000000000000000000000000000002c900000000000000000000000000000000000000000000000000000000000002ca00000000000000000000000000000000000000000000000000000000000002cb00000000000000000000000000000000000000000000000000000000000002cc00000000000000000000000000000000000000000000000000000000000002cd00000000000000000000000000000000000000000000000000000000000002ce00000000000000000000000000000000000000000000000000000000000002cf00000000000000000000000000000000000000000000000000000000000002d000000000000000000000000000000000000000000000000000000000000002d100000000000000000000000000000000000000000000000000000000000002d200000000000000000000000000000000000000000000000000000000000002d300000000000000000000000000000000000000000000000000000000000002d400000000000000000000000000000000000000000000000000000000000002d500000000000000000000000000000000000000000000000000000000000002d600000000000000000000000000000000000000000000000000000000000002d700000000000000000000000000000000000000000000000000000000000002d800000000000000000000000000000000000000000000000000000000000002d900000000000000000000000000000000000000000000000000000000000002da00000000000000000000000000000000000000000000000000000000000002db00000000000000000000000000000000000000000000000000000000000002dc00000000000000000000000000000000000000000000000000000000000002dd00000000000000000000000000000000000000000000000000000000000002de00000000000000000000000000000000000000000000000000000000000002df00000000000000000000000000000000000000000000000000000000000002e000000000000000000000000000000000000000000000000000000000000002e100000000000000000000000000000000000000000000000000000000000002e200000000000000000000000000000000000000000000000000000000000002e300000000000000000000000000000000000000000000000000000000000002e400000000000000000000000000000000000000000000000000000000000002e500000000000000000000000000000000000000000000000000000000000002e600000000000000000000000000000000000000000000000000000000000002e700000000000000000000000000000000000000000000000000000000000002e800000000000000000000000000000000000000000000000000000000000002e900000000000000000000000000000000000000000000000000000000000002ea00000000000000000000000000000000000000000000000000000000000002eb00000000000000000000000000000000000000000000000000000000000002ec00000000000000000000000000000000000000000000000000000000000002ed00000000000000000000000000000000000000000000000000000000000002ee00000000000000000000000000000000000000000000000000000000000002ef00000000000000000000000000000000000000000000000000000000000002f000000000000000000000000000000000000000000000000000000000000002f100000000000000000000000000000000000000000000000000000000000002f200000000000000000000000000000000000000000000000000000000000002f300000000000000000000000000000000000000000000000000000000000002f400000000000000000000000000000000000000000000000000000000000002f500000000000000000000000000000000000000000000000000000000000002f60200000000000000000000000000000000000000000000000000000000000003c000000000000000000000000000000000000000000000000000000000000003c11000000000000000000000000000000000000000000000000000000000000005c000000000000000000000000000000000000000000000000000000000000005ca00000000000000000000000000000000000000000000000000000000000005c100000000000000000000000000000000000000000000000000000000000005cb00000000000000000000000000000000000000000000000000000000000005c200000000000000000000000000000000000000000000000000000000000005cc00000000000000000000000000000000000000000000000000000000000005c300000000000000000000000000000000000000000000000000000000000005cd00000000000000000000000000000000000000000000000000000000000005c400000000000000000000000000000000000000000000000000000000000005ce00000000000000000000000000000000000000000000000000000000000005c500000000000000000000000000000000000000000000000000000000000005cf00000000000000000000000000000000000000000000000000000000000005c600000000000000000000000000000000000000000000000000000000000005d000000000000000000000000000000000000000000000000000000000000005c700000000000000000000000000000000000000000000000000000000000005d100000000000000000000000000000000000000000000000000000000000005c800000000000000000000000000000000000000000000000000000000000005d200000000000000000000000000000000000000000000000000000000000005c900000000000000000000000000000000000000000000000000000000000005d300000000000000000000000000000000000000000000000000000000000005ca00000000000000000000000000000000000000000000000000000000000005d400000000000000000000000000000000000000000000000000000000000005cb00000000000000000000000000000000000000000000000000000000000005d500000000000000000000000000000000000000000000000000000000000005cc00000000000000000000000000000000000000000000000000000000000005d600000000000000000000000000000000000000000000000000000000000005cd00000000000000000000000000000000000000000000000000000000000005d700000000000000000000000000000000000000000000000000000000000005ce00000000000000000000000000000000000000000000000000000000000005d800000000000000000000000000000000000000000000000000000000000005cf00000000000000000000000000000000000000000000000000000000000005d90112ed2e4b38f6e75420101b372307b3d2f38c00ab0b31792eb6f350bf881b71ff00000000000000000000000000000000000000000000000000000000000010c000000000000000000000000000000000000010c100000e00000001bc0000009046d7ea6176b397579a28f08d4ae1af28dd98ea7de08e0157db234cb1eb5f6a011acc590a4db3ab61167ea23b94a5debea6c12ec127b262690ba9852fe1f3aad37e0b524044cf8065cefb8143cafd63a127ac04165a2058acfedf7b77977c8bfcb9689b11d4166b0c89123ba932becd652be11bdcc0f0547bf8111d01adac24a716c72a24560df720121ed5baed60e90a000000902fca230ace327a54a0d85ed6c4aa383373e401fe4c3081410d2c22d6e1208cca97bd206a6a14925d371c8e51af7bfdd253a1aa5e26b1ba4d00f211644c2d22219e66892557ff2e84fbbb6753072c2ead0d8aa1636235c7717b0e1b5a6ea29575c673aa576b6807cd986e89e6d9ea422f22fc3cf8a6d4b454df5ad3d3d3188d895af9075b73db23725422a8a1988b713f00000090a71c4b995cd7b4e58ae25934c369b8398b5a761927d3bffdded4d26845a8b5ad5453c6f19103e5366955de7721ea114fd734ff9ef4f6a8222681227fe058c415d37b5d254b39b1d479b322a32fc8a67e1eb2e9a18f6486a895c523df4a7c27859abd626dcb128954fce8a2eaf90a26b32cc82b0c2d595e7b71990ece6e3bdb00e6ef7d224c46c30f22eaa3f67ce888b0000001bc00000090cbcee06575e77fa9aed212dd8146f63af089f4495ce12b6a670fda77d7424336b81d36488326a67f24fe034c9939a56cadd7509258b742a94dcb88a85dfe0c0502bcda4413f745148de6a585fb358add1b7f35f3b3c46db04c45e43976d82ef4776b3496a0f546a706eaa035a28d80f124bc97ed87a598f132879ede122ba0af9f3150424c83223b8efa78a87209e8340000009079c8ad2bfb8c21fd9967b5f13ed5ca65a485052820b39fc6ea6cea11fbdd935485bb2943fa498821c784bccc2eaef63e06e06c368e5b9c819dd78e364e3fd3f14c8636da52e61a6ff2a394517d2348d72930b0fff89bc2300707717d6596bf9b4b9256a05c8551bd73926c08e00cdc9a1382d5af98f9f4861a44929a823066669feeefa9f872ef307247a43d1bdb549a00000090184ee0c9f36a04b62cf061f8bff05093c9e677e9943f62151e276c61200857f2ac5ddcdd88b54309a8311777c287ded3591f88f48ca7dcef171325bc277fb3554907dedd8da1e3b5db9dfa0d9e9520dc2e0a2d2685e8bbdfe5d0fd3ec3f01e5d9cca276654e12f1b2adc1430c64499f0024274b9beab19577200cc337b8d1660efd1264bcb8866a10d6376bbe0467617000001bc0000009093f0776cda15f57fe0152ffa2836e4a5407262ee042ee596e8ae77fbecf4f61bd38e7932e92a2ed3ebcc8fb5949f7d94130a0dc2e8cdf29fec2f667f3597aaccfc816bbc8b3e7b219a09d00787575c5f1f367767892e9d22e77da4c3e93106d553ce7be359904005a2cf53ecee7587aa06a48e31ad789d4f97443267f36dc32cf74194541d466f6ccfa2388444241bff000000902f6eddec13f921bd5c3fae8639c29d8204cf319ee09c127ffca9d78f09a34ccad0d576bfa0981da76ee458058881dba030abf5db2b86a3df3fa10bc6d5f553b43a21800323d819017ff27232ae093efa02bb8258a488d4576d2af0f0a645cacf952dff5534a180f5eac58ff79d59366c276b35325baa7148e1c64bfc689a9e54f81990cd5cd72ff424679763672f789900000090871c506a7330e98ec4d4f13e589ffcbbb0a737b1a27e8a1afc4db9c2ebc395569c4fecfa3931ed3c72f3b7a33e447f82a5bd7ffa17baa7baa5300e07b49d4d8e694f67a952e4b74cf3bc177a51112e402889f7fe290fa0943c04efe5ec67afec8769d783db5396e3fda74a42235bc30313568e13ba4f8e1e8b1b0c85a272aea87f07ea34e529a40b8c238378fc7bf4c9000001bc000000904b04458c5837684fd23c2f3e896c8974eb75bae7bbc239ac9cc200f07b62834c8c1df872af497a696b57b42044d8d0c666a92f9b44a1248d4ae8315ef721a8e78b537d9a85d34f0e67c4b0b3309a51951602a89d52a30f15fc2360d2c635122f7da9f8fe0b7858b1bcc49e4deef6ab761fc66b862fe9d9788f33796a8bbc6bc3055bc0c0189bbe6e438b21e668ddb2de00000090fd7cb4314d482fb65646fc25fef6c0ed15641ea54d60675c0d3fe62154c71962d94bf94d96140f492d134039084787c6f06c4126a267b96f31e1673c0ea69658974380ad0371fdde9ea4281dc9e39282250cf2bbac87a38c41633885422765078493b8d8b6448b5dad475ad8baf56aa10a1ab22d155248bc5cc4b1c1b3f305997a8d0ddc44fbd7520b8fbe287817bcd600000090e6e052a428d34280b8c649eec403f37525c4c42429f604b2dd0711cbd71d386eb059d84b4e54df195f06e60bb27e5f6f433453579ea6a77cca4bb1c18d74eb97519ee471710a90f72becb7149070783a062baf99aeb2f15140d9e1bc2c98e4279bc0ece4222b06e2674452a8678d74db26d17df558cf4a880b39d69fc13c64ba76cad758564dfddae9f124385f631343000001bc000000902df12f293b7ad48195515379da728770bbfac518eefa1b838359c31ff424a63ffe826712f79809e5779ecd97f678aba28e4aaef008b355fec842b0d8cea708b114e380a52c545b59bb336231faabf916037009c381b36f7d0a5f458eb1ef95866f5bb3ed438441ab7a77b4855759c9c00fa8656d1ca2ceef96c6101b4b0f0d5a1e8ec50ad15b5b85e325afa447c4eef200000090f05a6b32b5b3fd569cfdce4b817361d418e012c607cc0e3e89d4f953ab8402edb1f585a2bec5a4ae6044b380fae0e05f430de425cf923e33ab313d258b0b329092c2d4265f034469e04c894d65d17a510e2ac6c56924c6f54e8044574fc0436f83672c7eec27d42359e9c55a239d00bc2e404a548fb98b8240ccc9b5f4b4858a16d25eaeb1c156f1abbc9af857c7c4b6000000902d457f06c2e0de84cdc976c0896dd26a8cdab522e52991e89ab0d2abf8750d5f8cb286685bfcf38ed0b36f4a8cfd32d9f326f78a23f68579570a3d45a0b5f8e1004ddc70dbed57be0ac0c977425ff0e91fe372594e69c7d0836c834db0a103cbcbf65b8adc93f9600b5334cb24302c860f865d55a1bb75c27de24019102d24817d3b015c9cda9cfa8701b827f4d1590a000001bc00000090d4e45090666523e517173dcb46d92c32330e41faf7280012b9dd418630c0207712d6d5b6c9d7bc07ede129de5720c8e413d45fac7a385fc8ddc5b1f7eb8fca8c8e75a5d79cbc3d3d998d00bd314be8471caba191ae91a8735745c4180cf937fc0a5a21a828d80ce633199ea992d20f440057c4535d5e2c9d11c146754d9b26a9f7741efd120de24cfd6d583aebc164c00000009025b477cad6869c25825c9e0d99d32c40d2df8042e583d36837dcd1d368654fc6594b731b9f4d962a413fe99a28c945046efa821d98236df93c5c308a743baa4fcb23733383f8fb69165977a92696b6a512c68d6d27b0abef17f1468c7a92e6e4878fb8a91790dfb4be790f5c46e7d1b3272781616d77c4e0fee608fb98aea57fc424a43aac0090b9b3a4235353e4b3c200000090b2e16eb2a5afc9ca2358f38f76b9d6fcc9de792491e5fdf0f0b0c6f4f9757e5b1b1fe6e864c9dd8439abf58766249054c20351ec68ec4f3a9f40b03efaa68300ea434b3836af8e5539a2406680921e7304eb085ae101d10d1696a81f7e97562cb243340d4fff456c1117c14b5999d9e70f5a192bc26b09e22ad2c27a1961e47cba57fe967a89e60e99599670cca56fb6000001bc000000904d7be7ea980ec4ac54eca63d63e363ae46826ebcc2abb87c718de3775e3074dc4c71a49679bdfc0c1b62effe2ec543460f27f6683e3f80927d58b2feb1f64a72eaa7d43fb9c9677a58b9c29a6665a0832149a63dcf995d0c895acf69ad8b5ee3d4bdfd9a2848a3794873b8c63d738f3d2024f49709dd963cfb8dc927ab68764e840f51b44d4cf6b437f5593557e2ff0c0000009091957337d46a8d7f0827318b844596eaeb981a424dfdb2335efa961afb5025724fe60e29df033da448b613682eef5810b5418125a693b400f68651e4182f3e81b49e7582267449602bac47d498b4dc8517e7ac0164074f4af9fa615032a40438eb73cbb63214bc0105c714a9f8f7489c001675017b94e192a178d20c7abd5722049d49bdf7437ce1bf1f023ac8f95f3a00000090423d49c023aa54e8489ec13b4392fd9cc513a3ca9b254267a1515b3b20405a64a01bc2a6e4203cbf60faea0edcb11751b96693b157dede19c3a33d8d46dc3e11a6e06d4ea8ae77cb62188b84767982142949c40ffab8ce5a70ecebc1c8cba8a0c62de07bac89ce40dd8ed6a09b2d22291444763edd9ba0e2f0d8ec8b92c061263120451ae3309891214645fe60317c13000001bc0000009089a0fa04b620ca3d1cfa4ea87287d4bbdcf13822c0babc59b392a3b2f868c5658444309a053080ad4d4707f854e36eef066743d4aa359bc58f0d61d0be5a0c17faa3fb4d91560e416c1c3096ca6a1f6011cd7f1e40f282ab44930a2b75b5c61a568efcd9c3ba1ee08815dc2a1ef3e7041d0444a97f63158cd14f20233b8ec7e54c5c97f4492e872db8d8a917f21bea890000009089b5041439790f4c60c2bb36c25ad886e553ef4f19eab2367f6e47b478de5b1899f587dbc4a4ef64a283e21ba192cc964ff0e9afe4084fd1cb826e50e18ebdf91acbed6bdd45f904dff59d9d6b93fd7623dbbed4177476ffdb7673201ff4b087ac3b5988a7162941a24355248d0b2af30104858b491bb624871e39104baad22a5fa46cab50e1995b0fde769c0c974f4d0000009098e548c260a85b8e06151d1e1c3ce8cce51db0b321ed2f94739b8b359096dbc436ddb40d2a4d60b16421eafe2fe54848784c17ff35cafbe5d719cfad30f77a289a40b7ff137332d540718193d99c27430c599bcfb4c717c2e9de3266a5268b08e6542c4feecd8bbeb15510f3ea3b64ba1a9475a903dac9ec69be36bbaf45758e626388d8535eabad421a5078591a7ca200000ce40000012800000090b5271be7b0a6be5232a9a9b635f5960125c3fa3c394922ae976bb813e1e06c9ca17ceae921dae6afe7f8ad9bd8daed1118bb5d0b7d016afae33e9ba8805ebafa651b5512a87c630f701979e506a33fc42dab1717418f777b03bccc8a382f35d06e162b082053611e255f262e604b32c201c261ea51d03baf7cf149465e834a58d3086672424711ff31ef21ccbdf68c070000009072296223a799dd89fcdc6ba8c1985036bd50bd60647fabc5a8af986300dafcb3b8814d4ee124b36bc945d152112ec08a35e92dc5195418ea223701522cba93b2dac9c416a1d8c26f0550af45725789011d8d4755147bf2439e65bd66044cfa847c9caed37648d6da41c320fa30e113552d5b4e79051c96c45b98254f1390f8d6ff32176e11aa429ce0418f84b9abf1c60000012800000090fa0c4417fee7494671c2e442d5dc8f9c1651d74de4238e0594ce5e98be6e5b538a226b9561ba75a6006f6a67a589a816c108c351e7c8fe19aa61136bb8ba5ae0a8429b538c8fe96c4faa9ca73ebdfb0024b55cb6af8806edcbd8fb7fef73defa5fcbece828864e006a86e6a916436b6721bf91880dacc7bee33c932c2debf9a71bbba57efda13ee1c51668cdc2c989c000000090c3137d101c9c415be071ae95f1c14d8bb6261d980529efa38fecb42b7746d7905bc88ab0a2b80f7fdee4106181838c1f4dcebd2de76f1014d405cb20a3861eb1de192c922f9afe6d173c3b8e203d45d80a44c3338831fe141a6d25d50a5329ffa9b89a9ea6dc6fa26ec132d2cee4c1f41b0b0a6138b8c31e196ebe3034aea58121b5dcfcd3f765ec7617979763bfd2830000012800000090577d37b7dedf573376e61e6e83776e0faf3d699c9dee3471fc9d9259b84498dbdb348c531c7099f08599063a03b10e622206132d5f0fcb7bb9359744ac496a2db9cc71a1e4e533be57242c7aec73cfaf100b5d1032873ee250f457fbaad909138f1bf01ac8de5720486fb3a4515b44121cc399b44148c4a1600845df6b5ffaab4ef6c7c2f51a52b543fd15cc13444b9d00000090cc19a1acf34578cac041a2b05c96792572e5615558592b92e26a90543a26f995111d172e724c3d1b04b682cdcfa23dbc0bcbceb47ca5827979b42430252fd666739982550be1432c1fc3a6a30abbd1dd23f2670ab6e0a0918f76aa91f6f719760c0684be607b1bd4e422f4007c9236fb2842cef824c0af42ecca88c81257d5b3578e4665c3a1cb24edc9eca2cfb5a6510000012800000090381989a2aa5ca423b6fd77d65659be66991cbddf17809ffddef3d1d02311c35a777113334914776b33d7f327c2131b117f32b96f60e7e1d63494ebf666489d36ef60548fe6690198cf718f03e9241ea202cf734b16c3434b02e150daf231ca10474510aaceb6941c3ce1c71c2bd559dc0a753d5085896be7cb22d88dad8b5227493e64212404f0b04360293d047e8c020000009050da26572c753eb6ec22c992f89dfd9845a090d9ab23e732188843df3b58e17ac4b37acf7b32c5dd8a4ad2d48b23d5c7652db2639083e321d8137b2affca20de233f95bc993445fcfbfc9a468d29b9581a61f0769b45cf7fa92e05009d882717c7e4c374b01898b176301a29fa6e1db72217d99c5863a5fd990719a8a1456f6af217d38e08b87df63aa28a71299e2d360000012800000090250001abe0230d0f002921f6a4e9704cc963b5dd34b1b21cf1cf345776d1f54576b33519fbb73058c4275affada87db9acf91d3c548bc65084b7abbfdd4cf76c637960682e62cbfdcd58de065c17a3ee20f7e9b858087f4b8d6cf1843a9c2f581819a348dabdb95f6ac264db619a3c3323a93c50cc35ba6677aa269ea8cdc52246dbb3e18f31353a95e062ff9ff9f7b9000000904347182432469694b3ae9becea6ef039ff03e551a6a479f3967037109bcd0b82bee5cba31d1fc5e0ad654a76bb8fcbd03ee3b3a86a6cb65d929fd572bd157e84d69d5442848cd816eb9a16b9c540c90203444ee773a914f6e4ce4e82f59d89cbbf2f7c58bfbb4c923bc9eb7f93cf77831eda1352efebda9cc50f42661529a4a440a00ed8f4f907334bf55c5897c87df3000001280000009003b24be04d93d8381d275b8faf67f348a6d588fee4b63d245f18403056e31ab0dc728d98c2ac2043fa3eebeaccc60b09abb0a61a0f171872d09b8e32a7ae283f3764e905326bd3e82cd43fbbbea8c95f18b489936fe8a88053f193ec42815e5a873bdcb96c381c751bf52681f6e0564023af2f0959d4f8973a7391222545e0b85729e7dafee761937393f913342fd232000000904dc29d31ffd93009c29de458db284106350737085720bbc8c318d2e545cacdd0c9ee6d80bda3e87c84ad32ebb61ce8adedcca087d6ca4a4439fb3b8bfd900db72f770e1582231fb365a979ba2a28ee0001ecf0765e0d1edb6e51d9455a3afb26540ee483fcf3e08684fe860b99850d581230a82ac561cac636f10f994a1a4e3d04a86e5f8714f0b002f2b25d3e7f12e300000128000000905573034f4f2b8f98da1415a75878e986cb13b37b987ca557c3c251f4492a36113a0d70779e99a6795bd41129a3ad79a4aef999cd8492f3f0c1720b96f328f0db67ea061527cbadca8d61a4e7231b4cc72749f596cbaf989a2187b0e3df32b99f889b433295ae8027c3e9b476e6fded2907592c59afc684787d585280e92995da83934b41371331009320703e7e0e100d0000009094200a3021dc4c9b8979ef17f8c25c4be145ca8b253497f2cb72c7e3a17abd81124f9f08970e6247e015f8b4f539f27909603954619c89da5d2042fbf2b207e9d52445bfe5a93ce7207ee22e8d229b6e143923e36536713a75021612be2317f2b3abedc2682c49c16490dec5464aca8a03e6d1497ec25daf11c6e304bdc5cb6a49189ca6b585ad20efd2edc25d303e8c0000012800000090a3601d3e5b0df417c29a6c92b743c463d4ab8511a9d29f35041db5e0724d327a61010466526c4f4200c39a29f5f2af5ad2a9346df76a5afd5a5e697a2ce987be1c5ff2e8742f1d65fe7cb096d3941d8e26525afbea22fcfa876644ae19b652b9c1ad43978725ddbfdb169512fd61bf592d3cab1360b2b784dc8eb3af34793f6495e8a286750cdb2af255277fd3dfe64500000090c54222d9260a4ad53ef723cc0e5ea265b89aa0f4b39a512c1f98ceb9d2d9016a6ddaa51b43ebc43a7c5ed6c0656322165c3f15790fb9de7ff710c6a681698a9cb60cd83113c320682d2af1a075722e1716774cbd7d91e97d7815db1267f77907e2995d95a009b41c9b9aa3d626caf68c1abfbd9d1b7f32344c4aea1bd0e91e45a6bc437ae796ad02a8d35bfd4e77377200000128000000902241394c762de661423a488ef3347cefe9ee3f69644940854e3e1c51d03dd26edb156d7f7cfee779da56886ddb0b14437b77c53563f2f1a6dc8c307bf8ed580f7aed612b8d727e25ebb4dc447461886204fcbeb29cb5e76ae5df9f4217905b36589d4b8e6a5ede045e0c09d15311278105964e4bafabd9e1373a94f5b970d45143301745c23167a4e6f6b40a8c3634bc00000090e3af5b2c64340e4a956cdcd961bf9f68cf8e874669813d3571e97c0df10cf14f0fedaa343c47962a69164466b88b7a3e7ac1c48438a959c8fd701bcedf669e40a5cf6a9f28e9d9b9d1ebd3ade6b399060071a157614477991db0754f9e2768e6f8c6082ffeabd6a22c06f24a62166d83182811c3ab5b72eb491e23dc17f7c4a739142355d1733580422f2e0fe5844dec0000012800000090577f761726b9a6d5cce23c462ffe7c65784f6fcf6fdad7a3fa92bf3d3d026e6ed8d3a03eab80551daff45d38e9a096f4239188f4d6d7656c77b75a8ba30cd0c0a8d01ceff4b7314a5cf52b30414a65c9080d74bff2320fa10539aceb7e9500eed7745439a81a6a7b4c5413092520fe330ebf008b02aebe176211147103aea8910b3dfe353525b086ba77d14d8343e5b9000000901c3cbb91ad28bc74df159826bc919d511da21b32f853f7f42c9b91dd8a8872be8183fd989b518844caad3b5711c4f660093b5f02049ca9639fa004cc6ef43f82de4a1af25694e1559d185a10251dfaa8231bb5b90a449c7ad60696949c000d060638561ec0090a89ed6fbd5422511efd115cf86b7badc9aeb0bc28d553c63e5ea7f653b370cc15be18c73d2a8100421400000128000000908394604ebd146e3ef5ec05cdb32929459e9c78af9a66583610be56a67ad057ae27e0585edf6bf3fb32ccbad4148a559d4eb89da36ad820f4134efcf32b179bba6f71426292b77bd3c83a94d414a135991e32843b88bb6d8dd89360c2f627f31f84df209e677a57452940d50703c35433004ac2cc3e6861e18769da887958e4f88db003005eb4aa6dc963aa09a6c4c303000000906c3faa5c29ded7ac9f93f95f498e884fe3380a0dc1e7ca1869323b73f6f022ae70d19449892b5555db33b2dbbdcbe59e13f68b212ff9c1ca1c9731acc5a13af00b25dc154a8970442ab558e01a5d76e71fbac64275320084752361b8e796649ca787f6ff12102573d228c25286cc9aa41c2726bfa02730a2cac6c2a552c95947f8eb68fd8cba2fa1db78e1aca0e3c350380000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000020100000000000000000000000000000000000000000000000000000000000002020000000000000000000000000000000000000000000000000000000000000203000000000000000000000000000000000000000000000000000000000000020400000000000000000000000000000000000000000000000000000000000002050000000000000000000000000000000000000000000000000000000000000206000000000000000000000000000000000000000000000000000000000000020700000000000000000000000000000000000000000000000000000000000002080000000000000000000000000000000000000000000000000000000000000209000000000000000000000000000000000000000000000000000000000000020a000000000000000000000000000000000000000000000000000000000000020b000000000000000000000000000000000000000000000000000000000000020c000000000000000000000000000000000000000000000000000000000000020d000000000000000000000000000000000000000000000000000000000000020e000000000000000000000000000000000000000000000000000000000000020f0000000000000000000000000000000000000000000000000000000000000210000000000000000000000000000000000000000000000000000000000000021100000000000000000000000000000000000000000000000000000000000002120000000000000000000000000000000000000000000000000000000000000213000000000000000000000000000000000000000000000000000000000000021400000000000000000000000000000000000000000000000000000000000002150000000000000000000000000000000000000000000000000000000000000216000000000000000000000000000000000000000000000000000000000000021700000000000000000000000000000000000000000000000000000000000002180000000000000000000000000000000000000000000000000000000000000219000000000000000000000000000000000000000000000000000000000000021a000000000000000000000000000000000000000000000000000000000000021b000000000000000000000000000000000000000000000000000000000000021c000000000000000000000000000000000000000000000000000000000000021d000000000000000000000000000000000000000000000000000000000000021e000000000000000000000000000000000000000000000000000000000000021f0000000000000000000000000000000000000000000000000000000000000220000000000000000000000000000000000000000000000000000000000000022100000000000000000000000000000000000000000000000000000000000002220000000000000000000000000000000000000000000000000000000000000223000000000000000000000000000000000000000000000000000000000000022400000000000000000000000000000000000000000000000000000000000002250000000000000000000000000000000000000000000000000000000000000226000000000000000000000000000000000000000000000000000000000000022700000000000000000000000000000000000000000000000000000000000002280000000000000000000000000000000000000000000000000000000000000229000000000000000000000000000000000000000000000000000000000000022a000000000000000000000000000000000000000000000000000000000000022b000000000000000000000000000000000000000000000000000000000000022c000000000000000000000000000000000000000000000000000000000000022d000000000000000000000000000000000000000000000000000000000000022e000000000000000000000000000000000000000000000000000000000000022f00000000000000000000000000000000000000000000000000000000000002300000000000000000000000000000000000000000000000000000000000000231000000000000000000000000000000000000000000000000000000000000023200000000000000000000000000000000000000000000000000000000000002330000000000000000000000000000000000000000000000000000000000000234000000000000000000000000000000000000000000000000000000000000023500000000000000000000000000000000000000000000000000000000000002360000000000000000000000000000000000000000000000000000000000000237370000000000000000000000000000000000000000000000000000000000000300000000000000000000000000000000000000000000000000000000000000030100000000000000000000000000000000000000000000000000000000000003020000000000000000000000000000000000000000000000000000000000000303000000000000000000000000000000000000000000000000000000000000030400000000000000000000000000000000000000000000000000000000000003050000000000000000000000000000000000000000000000000000000000000306000000000000000000000000000000000000000000000000000000000000030700000000000000000000000000000000000000000000000000000000000003080000000000000000000000000000000000000000000000000000000000000309000000000000000000000000000000000000000000000000000000000000030a000000000000000000000000000000000000000000000000000000000000030b000000000000000000000000000000000000000000000000000000000000030c000000000000000000000000000000000000000000000000000000000000030d000000000000000000000000000000000000000000000000000000000000030e000000000000000000000000000000000000000000000000000000000000030f0000000000000000000000000000000000000000000000000000000000000310000000000000000000000000000000000000000000000000000000000000031100000000000000000000000000000000000000000000000000000000000003120000000000000000000000000000000000000000000000000000000000000313000000000000000000000000000000000000000000000000000000000000031400000000000000000000000000000000000000000000000000000000000003150000000000000000000000000000000000000000000000000000000000000316000000000000000000000000000000000000000000000000000000000000031700000000000000000000000000000000000000000000000000000000000003180000000000000000000000000000000000000000000000000000000000000319000000000000000000000000000000000000000000000000000000000000031a000000000000000000000000000000000000000000000000000000000000031b000000000000000000000000000000000000000000000000000000000000031c000000000000000000000000000000000000000000000000000000000000031d000000000000000000000000000000000000000000000000000000000000031e000000000000000000000000000000000000000000000000000000000000031f0000000000000000000000000000000000000000000000000000000000000320000000000000000000000000000000000000000000000000000000000000032100000000000000000000000000000000000000000000000000000000000003220000000000000000000000000000000000000000000000000000000000000323000000000000000000000000000000000000000000000000000000000000032400000000000000000000000000000000000000000000000000000000000003250000000000000000000000000000000000000000000000000000000000000326000000000000000000000000000000000000000000000000000000000000032700000000000000000000000000000000000000000000000000000000000003280000000000000000000000000000000000000000000000000000000000000329000000000000000000000000000000000000000000000000000000000000032a000000000000000000000000000000000000000000000000000000000000032b000000000000000000000000000000000000000000000000000000000000032c000000000000000000000000000000000000000000000000000000000000032d000000000000000000000000000000000000000000000000000000000000032e000000000000000000000000000000000000000000000000000000000000032f00000000000000000000000000000000000000000000000000000000000003300000000000000000000000000000000000000000000000000000000000000331000000000000000000000000000000000000000000000000000000000000033200000000000000000000000000000000000000000000000000000000000003330000000000000000000000000000000000000000000000000000000000000334000000000000000000000000000000000000000000000000000000000000033500000000000000000000000000000000000000000000000000000000000003360200000000000000000000000000000000000000000000000000000000000004000000000000000000000000000000000000000000000000000000000000000401100000000000000000000000000000000000000000000000000000000000000600000000000000000000000000000000000000000000000000000000000000060a0000000000000000000000000000000000000000000000000000000000000601000000000000000000000000000000000000000000000000000000000000060b0000000000000000000000000000000000000000000000000000000000000602000000000000000000000000000000000000000000000000000000000000060c0000000000000000000000000000000000000000000000000000000000000603000000000000000000000000000000000000000000000000000000000000060d0000000000000000000000000000000000000000000000000000000000000604000000000000000000000000000000000000000000000000000000000000060e0000000000000000000000000000000000000000000000000000000000000605000000000000000000000000000000000000000000000000000000000000060f00000000000000000000000000000000000000000000000000000000000006060000000000000000000000000000000000000000000000000000000000000610000000000000000000000000000000000000000000000000000000000000060700000000000000000000000000000000000000000000000000000000000006110000000000000000000000000000000000000000000000000000000000000608000000000000000000000000000000000000000000000000000000000000061200000000000000000000000000000000000000000000000000000000000006090000000000000000000000000000000000000000000000000000000000000613000000000000000000000000000000000000000000000000000000000000060a0000000000000000000000000000000000000000000000000000000000000614000000000000000000000000000000000000000000000000000000000000060b0000000000000000000000000000000000000000000000000000000000000615000000000000000000000000000000000000000000000000000000000000060c0000000000000000000000000000000000000000000000000000000000000616000000000000000000000000000000000000000000000000000000000000060d0000000000000000000000000000000000000000000000000000000000000617000000000000000000000000000000000000000000000000000000000000060e0000000000000000000000000000000000000000000000000000000000000618000000000000000000000000000000000000000000000000000000000000060f00000000000000000000000000000000000000000000000000000000000006190106cba39ce4081d9dc4db5f51166f401fd1d0361fc9bd30cf6d907ad61f2737640000000000000000000000000000000000000000000000000000000000001100000000000000000000000000000000000000110100000e00000001bc000000907aa25a68375b6e994b2c8750d443080af7579b01915486afc8170484ca8cf76dc04f97e0d0ec566f22c0e6b58fae17eac0aad55fbd24f37e148cbcd6fc5994756ce09ede2dd72283fe8156239ac5ddc4091af90410b4bf3190af012029b1275b82d78cc31ca4908edd9afc2f3be5e556179229675a38b2f565206da3d8a94dd79712a4bda33c872df4caa8a13452272100000090b2da933d448636a306b35aac43211180765ae7e59ae05e13f2876baaa55fcc1c4904dc4e4c5a7927ad5bd313a85e3e0e85657226800af6b049395a99f4984290bd0b6c4eef7c147a961595e923a723780c15c7fc29f251fb293acc154ac2c2d7489ee3c1ba38f343849e177ab414c2fd1624570872185defbc5545120fb654c93e0be79e17c47ad23d6bc5823f6562fe00000090a52136c0dbb9ab6bc6251c781fbb9814cba45e6b3c6714af13a9463865b623671259eaa0dae5170f861b97d6bdc1ab124437baa35d8ff51f68ffc248889aa832c67a05be3c6dbf9849e25916c7bfe7ca2bcfdff6c66a29dd57f2dd089be96574cb7f0228fece8615de505b3e739eda760793382c7d2a7bf041044c5ab1e58ab8b08196ab624b6147f9e6f4ff5db5f24f000001bc00000090a00832ee1eca81da0f9d657d038e2fcb46bef9d78116144b2d07e95027f9adc39874899f88e1848ffa09d5ed0398c7ac51874ab7f36d5ab3d7334ca672b65712e686af23d1c45302f4404064b9623b09190b3d9860e5b13c211302718bcc7e73dc75f2968487814a6d24fd4fe87ba2432fb14b12ceda0b84dfe54c58694d3626bec823231a4d04ee91e28aef6e6054fa000000904626299c1bf263e609d1476742c1853a1a84178c4bce2006b1a56a0ee2153a7665de1d728870886312e71b685c7a7c605b8eb42dfe688f159b17ecd022d76d60e6c4b8852c3d3c3f498a1c830e8986330dffa24f185c7f4e1931d1fdcaf60b42d97861846b58282d1901134d8ad82fdf064a21f0a5fe65ef489d3ed5782a677fc9b02d1bffd477bfc1f93ebcb241cb9800000090456427c99c47df9cb76fe6b3fd37e8cf87b208f5b9481c01098105b59ed6642f3ccc02d5779e8be07431f02818cb0deebb9b012a4518462c6e1260cfc01eb952dd99e05340338781aef44563f24b345c2965748414f6b154fa7d82829c944e6a30dc546cb5de8ef51564a534be3458eb0160f5c20395a819779b890fd0cac1310014e6c20ac640bb42fec367857e152a000001bc000000900395526c6df35bd7ad1973c0f51eb2c0f2f92a74362b4c6b78afb3032c9ca64605711a904d7a9edecde8ccea7dbe904ec357808a11c6105b0828cff1ab7c7eaca0e13cc5baae88105b62cc45688f1dad287b715574166d118a9625e7ce0832208fd93720712be78b7e78903b0a1dd5d02e12d8e9bca93983d7fc5a355906ade3aea62315083727e33ad590010e4de213000000907a1a0812912df0343c8e63aaa39043f709e3cfb92793d5bc583972de299bb991146eaf75640c50bbe5d9126f145f0e5f2be90a900eb194ddf13d695d99a80945206ebffe15b5f308b7ddb0e42bc85e5721f82239f8e3f7c4c72f24e40b737efd1bc2ba4ea8c4ac31625002657f5eff51287ec0ce9034b0a68ce8a6d4ab477545150555adc0828e26012254067eec0050000000909fbaca5425661ef5f0e22dd28f075259e79813fb678d6f60730782b3992e676aeda9bc1c5a856e1f765ac3f69b7b2b4be8c8e819505d3e52d4d3ceec0760154e2d42b5444fd5b83f16955cbbe23e32112aeaed4f17fcc5ee5df89e68b9906132a10144e55bdfdac587354ea60fcf5adf26924d79fdfb4433c8c46e201e37d9e298054cee3f5d56d9aefbac6cbac087a3000001bc00000090efc565051bb25c4c54bbad6addf0bc73782170dd8830f387d442f30d4a6d594f8a9d001b6cc9d7beb99ad9692446ff4d865a1ddc5ec0403091b3d687e78a5d95d42c394a22022a9d581837c3014a34d103aa44d548b72f6853642db532a5960678a6ed5abe37ad23d0bc6adb2a293df6030007e5299d24ce0b8bc095d12f48ced5a69ae46fc3ef88916648c0600d11c400000090a096f200742bd6443e02e41a018fc378a96eab83d742cc0b962c7fc8afebc8765ed864449ef5c979dbfb0e8f33625b2e35bdb359d05d4938f4c3234f73fa8a5099bba1949e9e79b1d4576778a9d991a21ed0be6c7fca7e7c5de09de7e10fc414490948f4d9c46c0d2ddb665978160ddb2ebf60b97114a2962096c4f86017cdb5c44a703dd78d60513ea895b7357e1a0f0000009051ebc999a94bc1b3a14b7528bb5597f17c4c83bdf7b07513b4c18e0e7f02a8d4c9fffe89c215fc279eab18a9312156b172ba2ee3561eed2d674c6f1ad8d71a53cbba978eb315e72b9d6950e44977276722fe2da3a4bcd9f1aaac422317b34585ff1297cacdb14f29d321e525448a9ee7170a1cc5ce94137a327703e75a95b60d0f95d11ac0bc3908eaeec451385f8275000001bc00000090ec78f82d94ea53e373bcc5ba245ebe477b7497b56ddfc465eb0046639678aaf6105c0990a5ad7cea65496f133919abed0189de2b941cab91867c853a111025b53ed260bdf4a3fe2333eb53e801b9449a29f84f77ed41755de5f819a4643f3e04da25cf3f7a080588515524f129d0188a04ee1a9b2c81c597448f553284a0b1b7a3c3c1219f29fb721563b79fa7062acc00000090181a54de852fc53c0bd25e25d3975936d91ed4f99b26c5bd40485bc203d3930ef55edb89cd9a43d9db9c5189e535fc790ed9f342330c07d8b214937c4d2dcf2343d6e02fc375b788ba54a78dd3c810cd08356cc9172ab89a49263dcc7a68c9ef1bded196fd6d27a1e6ff2d222300fec2235309dd99e8b1d877156e3b4af0b990cf38a03483ab9c3c5ed3df9b9b3e72c500000090a6f8d3b9839bc45c232fc8349d030b363e045089bb54b7ccee7c7d8d64194a0dafb8019a3281e585d22073d129a4e4735d63b18c2201c663dd5f06e7fe3326df19eb96e848191ea6bc5619895c88385011d81b4021d02c1143c7c957eb1720494a1436f5c818f9631b2d82746b3494961e520014a9aeaa9795188ac08f4a25cedd812f430a8ab01fdd34e655d7c11d3b000001bc0000009003aea9c80a31ab5b66419a7df4896aa97866f67d3c87d52532f006f412f82de82faeed9f93b73593979916e196c584a5400053e4ce83d7e33d151b5fbd65c4e4123bcf111d351ab9cff74df1057fad2425393272080e6e735bef21978f75779758650571f25f391651cd4e2652947e382fc805c9954a7872a0ac221fd8cea3e3e9c7c793f54edb6e590b131c7a3793290000009062f38ae84a386db015999df9d14c9613884528d0df6b19a0fc4b800d061fd7ce8395b97bd74db17c80162c208fd1191c8a06e017d1b8194d5fa9a3485298f9ee72e2a3a6e3783a66cce8c54561f1aa641d10aafa4b930caa142648b18d07dadc0921da745bc27e97dd60d7bd08f892ef1749564dc8d9fd51ea5bf20c63cf6ca4bd4f0bbbf473509607eeaf0d5f266ff5000000901dc8db98c82aa583e64e24859d3e2c11528c0ad0720ade8904a3730edab48d0fd3c1460b2bd86ca55a1b49504b53b3104492fa78bf53c84ade5ba3db027535b6d4348a3aecddbeef9a24bf603915b92d0275eaeb97ec40af90cd833aca564099f9416b8194425eeff4b9e3957c818a4a1562db0d1d6c99dfa0346853cb64b2ea52fd3472d3d39912021af892cccbefd0000001bc000000902229b6e4844ab91da411b256c069464651d32100cf55a73c44f18b78daf94c6b78b0e53575e180bdc7e6edee10d8b5ca26d0103ce7c8ee86839e28f37ef234a742202140b528a9ee41d0cad339b46cd42bc100456491848010bedc0dd8fcee3a24b5560f1d187cff3a1feb8a6462af1a138150a7e4e63eab7064a2be404ccf59871eadb1d326809efc57dd37ebacb5e8000000902343411649df49105459f3fcf798c194b4da52afd2c72c24006e6ae66126d12013f2fa3bd93cfbac0c19243d99f6a9ae59918e81e9f755f8b4c4a3e8bc23d1b8b1539cbd7a17eda5b1bd9d269b87a468046a702853271986a5ca772e2684b382ebae082e51fb31ea4d1ad000449692d309fbfeab6f5fe81ade93e4e3b1f2e33d3df7dab90cbcdaae02765777471725fe000000906e414eaeca35b7f764842464796b77996fb996509d21852ea239993b075c97138ee091dc6b41cb1df128ba2dcb74a04e2bd792a5a89ec4f1ac30d7e546bb9b1e346cc05e04d9f9676e5618da30371e4711e7d879d816a116e240fdd68bd785b8b0912d078e21cb7a0ad9b6686bc1de701c9c7651c0d44c4ddd5e5cb12fa5a6cd951a23d80a11b3a087b4ce315b2ff836000001bc000000907b8fe997250d4ee1cc155e48f7c3fdd0ace6aa6852ffa4d2bad1f4a948c22767ce2ef1688ced80c09911fe015e834ccb7bcd6114fbf3ad531084f72b40704cd0a4630ecf814b9d116b51d5e629a56f9d23bf94ab4eb555bce220bd712d4db9ea10ea3b11369df74286891d2d2bfd94682d50705681180deeea2a188d137740485ac2c13ea2e8b3363629c7de94a684b30000009084dc261b42472ac520113c219ae1845f384f84af0f979b15e543dfb60de6c070e1bf2299b061fdd61973553965e1cbb345e847d6e11d822f025432267f87da42c5325a6a9e51ea8de3a461518d4d12f504de4541d319c7f605bf858f3fe43d441b007eb6001dad8fb7347ecc6fcf505e079da3e25e02ebd11808f06293086a80f3896438c4b7228ea2ca9de71f36eb7900000090d82c5e0e9c39ca4cd1ea1bfe71801935439e1beba53ee0daae00cb093e36468445b893f62ad52b70a5f55911c6903672f21229d42ad6483f35521c6392a2da21eb38c035c421b60fde159ec6e5d01ec21c65234982238bcfb6121604b6dce685ebd699cbe940079189c5b97328aa8f7d1b412ba611a8b510a5e99384d76600d8b84f52bb17c3198879dc27e682a53fbf00000ce400000128000000905d4bd91217f6f05ff2d23babe9633642739d5974b469c0b7e8eac2845c745c89ffc5e90d5b6d78f15505fc33427bd495132bc7dc37ac900c185e521e70225aaefd09abc9f48dbc46448eb82c46c712d1195e976aa99540ab4b9c64cfcaad1a8a6ff5818e0a69cc75709267786d85510405e68265b20710de32207656515a94a840f96145860bc0fa1f1087d0d48f001b00000090e12fe27169ea2cca82fc2264addda0d7166dc0eeac033717debf7a585f60263006b3af0a9bdf4ae3c979569a1adb7c923d57598b381b2320ab63c5d1ebb6d88abffbb0e1ec6be3554ac7f44785633f311d4d9903cfbc8b8b8c03a514ee04ddca9dbeec0228f4fa2db1c1d0e2b5483b6222fde54ea6f6d9e9ff8bd919c90dca51fc5f581dbffb4a800f633a7b3aaf1447000001280000009008a2869fe752a739888ee07f6238ba10b81c082e1acde2124c53cfa48f7a64981ada7f3d6093068a1b9c3b357d3c9cc86f2f490e0c6531f0280fdaed71a9a29d2c27e19e8ad1f75948013f0c11986eb90d4f7cf7f4178a8dddbbf6a5227f9fdc17ac739a4faf460933fbbd92e2979b80233acca46fe1451b0b66789e13dd58358d7f6cc30123325bfc7cbbf9e5d792e40000009074157d9d726112fd2e5b9649bb93797cce035b48f6189879ea667896795577c6801d93ecdfa8d4617f1aec72a745c9252cfe90ddaa339c9745288bceb67f588292eca69085d899e80b4d0e5f68af76111bd6865239a3c313aeaf29583e57ab9dde3df78f5b88c87217208c33a76b68e4217f75672a07f15170f48d66b7ca313015c3f314167f8c1cd8b56d98c6b363f200000128000000908518a62139b877429649de6dbb0c8e4484d3c46ab829b9739f1f38d35e7374f23d02826b0fc2a007676965db85f5afe2908429643ac0a8e3d125d9899c2c1b0719019e03d40a531fb400bbe5cfc871510fb80e7afc384f2a915b89a9ed94b6afa4c1d25e31f0c0caf2cdd60539b137e415b5ad3ae256cd431084d2b0ffe56cab52d3cf5574dc3291d95e73b2515448c3000000908e70d9f58b6fc891eda0bf235aee3d8f0d2abc279b3a27f374372fd45587d67accc72d37cf2dd418bc2c709f000f1423a43e67aa2546084f554dc396f9abbde7cbbc1df87d6da7c432dfb301c51113c22b4dbf69445f08df1a9802abb6b161c4e0fd1c56faa23bbcfdd31805c5dc21ac10f84b556a3e08dbbbd31903fa07bd35ef0b90171af238d80c3f738e3ad72f160000012800000090624f7b3f576b2c255f04e7907374a3a81e303196411668d336c20447c7b4a7e1b8fb1f3689abab384b4a033c4c0c2c1cc34572207da80ba72aa997efaa73639a959df6a050d481231a30b7044f4f1ec703bb08ceb5456b1cce752b68ef98925db2473cd8f184b093c9706d38ec80ccda2bfdc8c2bf31946ff3e351c88230b0a4184f8a5375792dcb17d86c8f20d1f312000000900bfdfbb3584ba1ebf4d4379c337108314f089d2c2c5b05b0cf34e54daf4edf7cc467a1d26c7af579e544228433a7c121ee85f34f6f9ee76a38f808124e7a6fba621c4287ba22c2a040bbfe85de3a0f33293534ed848512e67b55ff9050e2cc0861e4471b907a425da9ae6f1313b355fe0475e62b82b34d0f0c3c98378ce34053477d4fe04d8ea006c84f1b091debf826000001280000009094a3d8ed4fb50ab9eeeb0ba8b84537a3dcbce949521b7411ed3c1ad00fd41f222d7a44681a77748bdf89dfd22f2529ed3ee2946dbee3e7fe60a519e1636878a5c182acd6372b27b239c652b2a42fb62d090be7f8b8c9536b715ce418ee404a627cfcac852fa6db2c4a90fa85316e26c3025ad8cf965ea33fdb4495d68e17b6a392cb6ef17ae3cb93fec18ed7c65e57b500000090f1d08d46f14e0b787bc77a25db9cbb80af448e81689fb38789ad1e3e62696fe0a28632de5a79f7f5a77fd09d68aa9e3db68b9aa3d2ac2d337a8712b791b76cabc9f6bd550e8bf59a754f20e01ce53ac22c6812403f62c571b7b1a10ac370015a877adae7187ca81dabddb47af9a41ab0272267156dddb0cb28225f0418aad6fb72abacafcb072b0ba7b40f4f1e9daf4200000128000000909d38867aa9462d2538e8205a92cc9ff96584993f3472561097a4c75448cd3c4a1f76b05fcf0133dad42e64b8f250ecb2d0d1e6e7ed706fd23795ca222a556f43883854e7e7c0227fa089e42146e412801a79ef8a332c7cffabcd14ee84b12f88b64e121ff20e816d42e4b3885b899c120419aabd58356d1dc1751afa647bb2e6a80870171e72c098170bd7636ecb4569000000902fbee106b7edbb3c391d142ab404a9e3eeaaea9e62425f5977948289fb324ef7f7c31a029fa464898b5e56b9c993808ee54f1888a6e1eaf993b2fef2b666fe096dc5d09e3f25db18c715721aad101fe80e78d4ea4dcf6fc7066564f63605d40a6b6bb1bac8ab5fd0335c28f66b0ab4a71466db9ea1b9f0b0ee9f4034d83a08932d47da0c93630598e1236f18437be2ec00000128000000906e2735e0f925bf84543dd510a1a3df34125829d5cfd10ab15889edf5043ab00452e0286191586fc546fcb5d16cfb021fa21211b53511f87bf4667f150f15a09bb51f627e8a2963022ac1824739cbe930133447357f9254c6cfc6b5a1267fb7b4fb854aa376362eb5782e16582cd7e946071ea10a9d8e44e66eb5aec43f2ae6542044f0c6365aea786ce617223ddf051b00000090350c811575e6787b3b5becbc9c84d8988fb9bb802873306845c0d9b7b58deebf37a56393c2a18865532cd2220ec003c31b13679dce11261a59658ea7dd6532e89aa0433b6ce47cf746e1d087e0abcd5d126ed4d022f6187dd0023893703dbda2700a698db993e3e154d19a9eab7d4e6f24e33097446a21e155c48c61a425b37bcd7977d79c8cb9e82cc730b89024bad900000128000000903500df7e5c2c8b5dbab6410ff5fdd0f826e0b47182af2d9851798ccb02eda3c59b0c0fd1e6dd01f3c5e6b98c9a1ad7658861d6036f49ae8adb8e35e7c6611e1ee2d76852225143794bcca74904fc8b4101ad8d7783c8b1f5369398860f03c8f1b45ca58fbfd7562f96a090597bc3fe0207a3532a3d3ba1dede0eeeb966816b2aeeea07404074248e8e9aa3f74d65813600000090df3f8d097369fa9a2a18313c78fcc520b64bb663f22103cf2bd692596090ce46c76631c87cc5d45173703330debb31a5d6f8ab85c07b68abbe436294ff592c4fe51fd77a88d78e6879f9916b205fdca21c651b2ed0b03d538d577571c989609db300d0d7990ee961f1838dd5de34fb2a1b62ba0ddd2975df06a6f5c6069956d09dac93e4bf8f2db8c1c13b34ba92778f000001280000009005dd1095dadb744edf200b28fe1d812ad2b5cbcca52a31dc8353fe76069b1861cced10002f4ae288cf5e9f8cb83b797d3a1130d2b164754e5c0d506b2fde70cfdf1be6f423e103f88112d02c30df4add29288dd2d7856b9ad718c43efb030762fb05e7719f8cd53281cb6aeeba1f99451dced9ea80ea577908c4816808fafd4156cc67059cb5968eb031c427c6fc9f63000000905cf06c1b40938aff7236a79b0d88f303dc60a904ac5fc83f05559f2a576eeaaa8dfd342bc72f832476a51178da44e6bbfd1f29f84c581d7e65a79b90cfb7ac66ed614ccf9fd7815488fd92a553c72da40c1a49da184de6c05c7a3080401abd5ea4182b026833e7f767a50c2cd58fa0e2274016c4715b6f87a39555861c4de9133f7e894fcb59fadbe59b5be3ab5c1b0a0000012800000090f07f133b2b5cdb026d8a54f2ee6de0ed84f8cab14aecb8bca5812a09986fffaced2696ff9dbe521c4853c693f840ce072c6a58316064c50d09496e187259c93efb95fb50d39cd12a42519905c5a495e0079175a0aa2bb5122b599f573285029b1987505b87e0a1164fb6b104cb1e2d5b0f0d65b49b7a83e9885089fd93a1a0403169f86b9d8216f36eaa27cf6bcf06f10000009084fa22e0e432474b0ed051cdf426045fdd59f337eab062b7c0a85598fd44e2d60e9a72a7974b1579f4eca7e3f4a95c667b997c59dafe5bc2eec7d7191a35baa4aed51cf094f368e6e9696aa77eaa85eb0d5ceaf9633280895e9cf9dde0772893c04dc2abb13a682d3165dd854b07ca9a0a32d59f937390972a0147630df38598af8b8b1f107ffc06b2f6213c3ce7372c00000128000000906373e8aa4e9a9528b0e97a87d4a943e3fc23cc24c587b0763e4d3fbe8cea9a579fd2772fc173a7b92db4e71cd53aee86c23fc660e22b1e2404cb28b215a268f977eee7209a2d8891ad8bb9322beed759194f625219721ce32ed03d2c3341d0d9086d690891a1a4d436ceb039e895e48b176385699680c49a8c2ec671c151e473b2bc5ea883ccf7110cc2be66599233b60000009022e88c98fe9e6d8ed3048b1b3ec6cfc0c628cd2d1b73ddb450b4be20b5db6b659a22d7ba9f42c194e280dd6f8fcb636c46128f7d6995cf6d968cc2e6a4cdf23a456609d3d8e531fe4c5445be3a6c604d1037ca076bdc3f4932912b71a2c4b14126ae21865ea25f3ed782c3266bacba070c66c6774a21c19b0f81a233df5d18051b98c4b60fcdfa5a6b64f2fe19446c74", + "calldataHash": "0xd8bb380e3f0bdb51c21870f0208857fa87c8bf72678fc134080ae06de3b6e1a3", "decodedHeader": { "contentCommitment": { "inHash": "0x0000000000000000000000000000000000000000000000000000000000000000", "outHash": "0x0000000000000000000000000000000000000000000000000000000000000000", "txTreeHeight": 2, - "txsHash": "0x8cafedd16ad3f90d79b74dc6f08802ecf2fa8f395ce32cc3340addf528a60e53" + "txsHash": "0xd8bb380e3f0bdb51c21870f0208857fa87c8bf72678fc134080ae06de3b6e1a3" }, "globalVariables": { "blockNumber": 1, "chainId": 31337, "timestamp": 0, "version": 1, - "coinbase": "0xffacad9cb3ec2488c5c7c4701a83238fe532696b", - "feeRecipient": "0x22e7e1827190390616484b040b29ebc256a00fb45ce0e662c9d1e7a6154feb5f" + "coinbase": "0x550c19cf538b79ea72f4025a5158ec65113c2f54", + "feeRecipient": "0x28dc0c5131f93f289580b636e9ac08a9670b2475b7373ab0d74c9ce6007176a1" }, "lastArchive": { "nextAvailableLeafIndex": 1, @@ -82,7 +82,7 @@ "partialStateReference": { "contractTree": { "nextAvailableLeafIndex": 4, - "root": "0x1a3d3e40c90cd24822b9c268154ef14d4639febdb7af81b554cb2d651b88dfb1" + "root": "0x0135cf87b15a9f4b3deb2fde9d2c6f75620ae779c6b62f677c42aa70af9a50fd" }, "noteHashTree": { "nextAvailableLeafIndex": 256, @@ -99,8 +99,8 @@ } } }, - "header": "0x0f045bd8180c4de901e18a10e9393ae42d9ef7928fe6b68568cb48b91d1355a70000000100000000000000000000000000000000000000000000000000000000000000028cafedd16ad3f90d79b74dc6f08802ecf2fa8f395ce32cc3340addf528a60e53000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a241c83a063083fad29b6c333afcd968f71f8a875544ff1f1f08cae7f770f510000001002c672a4d7bd90c4b6ba35bbc9906598862f626554be3cba05de19265a8ece71000001000ed22b14764d5756c4e97521b31e93e21192b98b3bc2e2559e07b1263ce7b1be000001801a3d3e40c90cd24822b9c268154ef14d4639febdb7af81b554cb2d651b88dfb1000000041faf8e36b0fb8fb337acc1c32316e1fcbd0465d53c47a2dd73ebb031042566cb000000c00000000000000000000000000000000000000000000000000000000000007a69000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000ffacad9cb3ec2488c5c7c4701a83238fe532696b22e7e1827190390616484b040b29ebc256a00fb45ce0e662c9d1e7a6154feb5f", + "header": "0x0f045bd8180c4de901e18a10e9393ae42d9ef7928fe6b68568cb48b91d1355a7000000010000000000000000000000000000000000000000000000000000000000000002d8bb380e3f0bdb51c21870f0208857fa87c8bf72678fc134080ae06de3b6e1a3000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a241c83a063083fad29b6c333afcd968f71f8a875544ff1f1f08cae7f770f510000001002c672a4d7bd90c4b6ba35bbc9906598862f626554be3cba05de19265a8ece71000001000ed22b14764d5756c4e97521b31e93e21192b98b3bc2e2559e07b1263ce7b1be000001800135cf87b15a9f4b3deb2fde9d2c6f75620ae779c6b62f677c42aa70af9a50fd000000041faf8e36b0fb8fb337acc1c32316e1fcbd0465d53c47a2dd73ebb031042566cb000000c00000000000000000000000000000000000000000000000000000000000007a69000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000550c19cf538b79ea72f4025a5158ec65113c2f5428dc0c5131f93f289580b636e9ac08a9670b2475b7373ab0d74c9ce6007176a1", "l1ToL2MessagesHash": "0xb213c9c543fce2a66720d26a913fe0d018f72a47ccfe698baafcf4cced343cfd", - "publicInputsHash": "0x144dbc0653f2d068d8c3c8eefc9183190126e08ae0d53269a077f6795b27c0a7" + "publicInputsHash": "0x2deb37bc494f93bd82accf65d19657fad6ce5d1c9a80e5337822e0d47378e08e" } } \ No newline at end of file diff --git a/l1-contracts/test/fixtures/mixed_block_1.json b/l1-contracts/test/fixtures/mixed_block_1.json index 2937fb9c732..771d19a27cb 100644 --- a/l1-contracts/test/fixtures/mixed_block_1.json +++ b/l1-contracts/test/fixtures/mixed_block_1.json @@ -52,27 +52,27 @@ ] }, "block": { - "archive": "0x2811e5934e3f2e190c195be5d58a127d774661e253fe237c2ab57c41a790a340", - "body": "0x000001000000000000000000000000000000000000000000000000000000000000000240000000000000000000000000000000000000000000000000000000000000024100000000000000000000000000000000000000000000000000000000000002420000000000000000000000000000000000000000000000000000000000000243000000000000000000000000000000000000000000000000000000000000024400000000000000000000000000000000000000000000000000000000000002450000000000000000000000000000000000000000000000000000000000000246000000000000000000000000000000000000000000000000000000000000024700000000000000000000000000000000000000000000000000000000000002480000000000000000000000000000000000000000000000000000000000000249000000000000000000000000000000000000000000000000000000000000024a000000000000000000000000000000000000000000000000000000000000024b000000000000000000000000000000000000000000000000000000000000024c000000000000000000000000000000000000000000000000000000000000024d000000000000000000000000000000000000000000000000000000000000024e000000000000000000000000000000000000000000000000000000000000024f0000000000000000000000000000000000000000000000000000000000000250000000000000000000000000000000000000000000000000000000000000025100000000000000000000000000000000000000000000000000000000000002520000000000000000000000000000000000000000000000000000000000000253000000000000000000000000000000000000000000000000000000000000025400000000000000000000000000000000000000000000000000000000000002550000000000000000000000000000000000000000000000000000000000000256000000000000000000000000000000000000000000000000000000000000025700000000000000000000000000000000000000000000000000000000000002580000000000000000000000000000000000000000000000000000000000000259000000000000000000000000000000000000000000000000000000000000025a000000000000000000000000000000000000000000000000000000000000025b000000000000000000000000000000000000000000000000000000000000025c000000000000000000000000000000000000000000000000000000000000025d000000000000000000000000000000000000000000000000000000000000025e000000000000000000000000000000000000000000000000000000000000025f0000000000000000000000000000000000000000000000000000000000000260000000000000000000000000000000000000000000000000000000000000026100000000000000000000000000000000000000000000000000000000000002620000000000000000000000000000000000000000000000000000000000000263000000000000000000000000000000000000000000000000000000000000026400000000000000000000000000000000000000000000000000000000000002650000000000000000000000000000000000000000000000000000000000000266000000000000000000000000000000000000000000000000000000000000026700000000000000000000000000000000000000000000000000000000000002680000000000000000000000000000000000000000000000000000000000000269000000000000000000000000000000000000000000000000000000000000026a000000000000000000000000000000000000000000000000000000000000026b000000000000000000000000000000000000000000000000000000000000026c000000000000000000000000000000000000000000000000000000000000026d000000000000000000000000000000000000000000000000000000000000026e000000000000000000000000000000000000000000000000000000000000026f00000000000000000000000000000000000000000000000000000000000002700000000000000000000000000000000000000000000000000000000000000271000000000000000000000000000000000000000000000000000000000000027200000000000000000000000000000000000000000000000000000000000002730000000000000000000000000000000000000000000000000000000000000274000000000000000000000000000000000000000000000000000000000000027500000000000000000000000000000000000000000000000000000000000002760000000000000000000000000000000000000000000000000000000000000277000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000280000000000000000000000000000000000000000000000000000000000000028100000000000000000000000000000000000000000000000000000000000002820000000000000000000000000000000000000000000000000000000000000283000000000000000000000000000000000000000000000000000000000000028400000000000000000000000000000000000000000000000000000000000002850000000000000000000000000000000000000000000000000000000000000286000000000000000000000000000000000000000000000000000000000000028700000000000000000000000000000000000000000000000000000000000002880000000000000000000000000000000000000000000000000000000000000289000000000000000000000000000000000000000000000000000000000000028a000000000000000000000000000000000000000000000000000000000000028b000000000000000000000000000000000000000000000000000000000000028c000000000000000000000000000000000000000000000000000000000000028d000000000000000000000000000000000000000000000000000000000000028e000000000000000000000000000000000000000000000000000000000000028f0000000000000000000000000000000000000000000000000000000000000290000000000000000000000000000000000000000000000000000000000000029100000000000000000000000000000000000000000000000000000000000002920000000000000000000000000000000000000000000000000000000000000293000000000000000000000000000000000000000000000000000000000000029400000000000000000000000000000000000000000000000000000000000002950000000000000000000000000000000000000000000000000000000000000296000000000000000000000000000000000000000000000000000000000000029700000000000000000000000000000000000000000000000000000000000002980000000000000000000000000000000000000000000000000000000000000299000000000000000000000000000000000000000000000000000000000000029a000000000000000000000000000000000000000000000000000000000000029b000000000000000000000000000000000000000000000000000000000000029c000000000000000000000000000000000000000000000000000000000000029d000000000000000000000000000000000000000000000000000000000000029e000000000000000000000000000000000000000000000000000000000000029f00000000000000000000000000000000000000000000000000000000000002a000000000000000000000000000000000000000000000000000000000000002a100000000000000000000000000000000000000000000000000000000000002a200000000000000000000000000000000000000000000000000000000000002a300000000000000000000000000000000000000000000000000000000000002a400000000000000000000000000000000000000000000000000000000000002a500000000000000000000000000000000000000000000000000000000000002a600000000000000000000000000000000000000000000000000000000000002a700000000000000000000000000000000000000000000000000000000000002a800000000000000000000000000000000000000000000000000000000000002a900000000000000000000000000000000000000000000000000000000000002aa00000000000000000000000000000000000000000000000000000000000002ab00000000000000000000000000000000000000000000000000000000000002ac00000000000000000000000000000000000000000000000000000000000002ad00000000000000000000000000000000000000000000000000000000000002ae00000000000000000000000000000000000000000000000000000000000002af00000000000000000000000000000000000000000000000000000000000002b000000000000000000000000000000000000000000000000000000000000002b100000000000000000000000000000000000000000000000000000000000002b200000000000000000000000000000000000000000000000000000000000002b300000000000000000000000000000000000000000000000000000000000002b400000000000000000000000000000000000000000000000000000000000002b500000000000000000000000000000000000000000000000000000000000002b600000000000000000000000000000000000000000000000000000000000002b70000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002c000000000000000000000000000000000000000000000000000000000000002c100000000000000000000000000000000000000000000000000000000000002c200000000000000000000000000000000000000000000000000000000000002c300000000000000000000000000000000000000000000000000000000000002c400000000000000000000000000000000000000000000000000000000000002c500000000000000000000000000000000000000000000000000000000000002c600000000000000000000000000000000000000000000000000000000000002c700000000000000000000000000000000000000000000000000000000000002c800000000000000000000000000000000000000000000000000000000000002c900000000000000000000000000000000000000000000000000000000000002ca00000000000000000000000000000000000000000000000000000000000002cb00000000000000000000000000000000000000000000000000000000000002cc00000000000000000000000000000000000000000000000000000000000002cd00000000000000000000000000000000000000000000000000000000000002ce00000000000000000000000000000000000000000000000000000000000002cf00000000000000000000000000000000000000000000000000000000000002d000000000000000000000000000000000000000000000000000000000000002d100000000000000000000000000000000000000000000000000000000000002d200000000000000000000000000000000000000000000000000000000000002d300000000000000000000000000000000000000000000000000000000000002d400000000000000000000000000000000000000000000000000000000000002d500000000000000000000000000000000000000000000000000000000000002d600000000000000000000000000000000000000000000000000000000000002d700000000000000000000000000000000000000000000000000000000000002d800000000000000000000000000000000000000000000000000000000000002d900000000000000000000000000000000000000000000000000000000000002da00000000000000000000000000000000000000000000000000000000000002db00000000000000000000000000000000000000000000000000000000000002dc00000000000000000000000000000000000000000000000000000000000002dd00000000000000000000000000000000000000000000000000000000000002de00000000000000000000000000000000000000000000000000000000000002df00000000000000000000000000000000000000000000000000000000000002e000000000000000000000000000000000000000000000000000000000000002e100000000000000000000000000000000000000000000000000000000000002e200000000000000000000000000000000000000000000000000000000000002e300000000000000000000000000000000000000000000000000000000000002e400000000000000000000000000000000000000000000000000000000000002e500000000000000000000000000000000000000000000000000000000000002e600000000000000000000000000000000000000000000000000000000000002e700000000000000000000000000000000000000000000000000000000000002e800000000000000000000000000000000000000000000000000000000000002e900000000000000000000000000000000000000000000000000000000000002ea00000000000000000000000000000000000000000000000000000000000002eb00000000000000000000000000000000000000000000000000000000000002ec00000000000000000000000000000000000000000000000000000000000002ed00000000000000000000000000000000000000000000000000000000000002ee00000000000000000000000000000000000000000000000000000000000002ef00000000000000000000000000000000000000000000000000000000000002f000000000000000000000000000000000000000000000000000000000000002f100000000000000000000000000000000000000000000000000000000000002f200000000000000000000000000000000000000000000000000000000000002f300000000000000000000000000000000000000000000000000000000000002f400000000000000000000000000000000000000000000000000000000000002f500000000000000000000000000000000000000000000000000000000000002f600000000000000000000000000000000000000000000000000000000000002f7000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000300000000000000000000000000000000000000000000000000000000000000030100000000000000000000000000000000000000000000000000000000000003020000000000000000000000000000000000000000000000000000000000000303000000000000000000000000000000000000000000000000000000000000030400000000000000000000000000000000000000000000000000000000000003050000000000000000000000000000000000000000000000000000000000000306000000000000000000000000000000000000000000000000000000000000030700000000000000000000000000000000000000000000000000000000000003080000000000000000000000000000000000000000000000000000000000000309000000000000000000000000000000000000000000000000000000000000030a000000000000000000000000000000000000000000000000000000000000030b000000000000000000000000000000000000000000000000000000000000030c000000000000000000000000000000000000000000000000000000000000030d000000000000000000000000000000000000000000000000000000000000030e000000000000000000000000000000000000000000000000000000000000030f0000000000000000000000000000000000000000000000000000000000000310000000000000000000000000000000000000000000000000000000000000031100000000000000000000000000000000000000000000000000000000000003120000000000000000000000000000000000000000000000000000000000000313000000000000000000000000000000000000000000000000000000000000031400000000000000000000000000000000000000000000000000000000000003150000000000000000000000000000000000000000000000000000000000000316000000000000000000000000000000000000000000000000000000000000031700000000000000000000000000000000000000000000000000000000000003180000000000000000000000000000000000000000000000000000000000000319000000000000000000000000000000000000000000000000000000000000031a000000000000000000000000000000000000000000000000000000000000031b000000000000000000000000000000000000000000000000000000000000031c000000000000000000000000000000000000000000000000000000000000031d000000000000000000000000000000000000000000000000000000000000031e000000000000000000000000000000000000000000000000000000000000031f0000000000000000000000000000000000000000000000000000000000000320000000000000000000000000000000000000000000000000000000000000032100000000000000000000000000000000000000000000000000000000000003220000000000000000000000000000000000000000000000000000000000000323000000000000000000000000000000000000000000000000000000000000032400000000000000000000000000000000000000000000000000000000000003250000000000000000000000000000000000000000000000000000000000000326000000000000000000000000000000000000000000000000000000000000032700000000000000000000000000000000000000000000000000000000000003280000000000000000000000000000000000000000000000000000000000000329000000000000000000000000000000000000000000000000000000000000032a000000000000000000000000000000000000000000000000000000000000032b000000000000000000000000000000000000000000000000000000000000032c000000000000000000000000000000000000000000000000000000000000032d000000000000000000000000000000000000000000000000000000000000032e000000000000000000000000000000000000000000000000000000000000032f0000000000000000000000000000000000000000000000000000000000000330000000000000000000000000000000000000000000000000000000000000033100000000000000000000000000000000000000000000000000000000000003320000000000000000000000000000000000000000000000000000000000000333000000000000000000000000000000000000000000000000000000000000033400000000000000000000000000000000000000000000000000000000000003350000000000000000000000000000000000000000000000000000000000000336000000000000000000000000000000000000000000000000000000000000033700000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000340000000000000000000000000000000000000000000000000000000000000034100000000000000000000000000000000000000000000000000000000000003420000000000000000000000000000000000000000000000000000000000000343000000000000000000000000000000000000000000000000000000000000034400000000000000000000000000000000000000000000000000000000000003450000000000000000000000000000000000000000000000000000000000000346000000000000000000000000000000000000000000000000000000000000034700000000000000000000000000000000000000000000000000000000000003480000000000000000000000000000000000000000000000000000000000000349000000000000000000000000000000000000000000000000000000000000034a000000000000000000000000000000000000000000000000000000000000034b000000000000000000000000000000000000000000000000000000000000034c000000000000000000000000000000000000000000000000000000000000034d000000000000000000000000000000000000000000000000000000000000034e000000000000000000000000000000000000000000000000000000000000034f0000000000000000000000000000000000000000000000000000000000000350000000000000000000000000000000000000000000000000000000000000035100000000000000000000000000000000000000000000000000000000000003520000000000000000000000000000000000000000000000000000000000000353000000000000000000000000000000000000000000000000000000000000035400000000000000000000000000000000000000000000000000000000000003550000000000000000000000000000000000000000000000000000000000000356000000000000000000000000000000000000000000000000000000000000035700000000000000000000000000000000000000000000000000000000000003580000000000000000000000000000000000000000000000000000000000000359000000000000000000000000000000000000000000000000000000000000035a000000000000000000000000000000000000000000000000000000000000035b000000000000000000000000000000000000000000000000000000000000035c000000000000000000000000000000000000000000000000000000000000035d000000000000000000000000000000000000000000000000000000000000035e000000000000000000000000000000000000000000000000000000000000035f0000000000000000000000000000000000000000000000000000000000000360000000000000000000000000000000000000000000000000000000000000036100000000000000000000000000000000000000000000000000000000000003620000000000000000000000000000000000000000000000000000000000000363000000000000000000000000000000000000000000000000000000000000036400000000000000000000000000000000000000000000000000000000000003650000000000000000000000000000000000000000000000000000000000000366000000000000000000000000000000000000000000000000000000000000036700000000000000000000000000000000000000000000000000000000000003680000000000000000000000000000000000000000000000000000000000000369000000000000000000000000000000000000000000000000000000000000036a000000000000000000000000000000000000000000000000000000000000036b000000000000000000000000000000000000000000000000000000000000036c000000000000000000000000000000000000000000000000000000000000036d000000000000000000000000000000000000000000000000000000000000036e000000000000000000000000000000000000000000000000000000000000036f00000000000000000000000000000000000000000000000000000000000003700000000000000000000000000000000000000000000000000000000000000371000000000000000000000000000000000000000000000000000000000000037200000000000000000000000000000000000000000000000000000000000003730000000000000000000000000000000000000000000000000000000000000374000000000000000000000000000000000000000000000000000000000000037500000000000000000000000000000000000000000000000000000000000003760000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000380000000000000000000000000000000000000000000000000000000000000038100000000000000000000000000000000000000000000000000000000000003820000000000000000000000000000000000000000000000000000000000000383000000000000000000000000000000000000000000000000000000000000038400000000000000000000000000000000000000000000000000000000000003850000000000000000000000000000000000000000000000000000000000000386000000000000000000000000000000000000000000000000000000000000038700000000000000000000000000000000000000000000000000000000000003880000000000000000000000000000000000000000000000000000000000000389000000000000000000000000000000000000000000000000000000000000038a000000000000000000000000000000000000000000000000000000000000038b000000000000000000000000000000000000000000000000000000000000038c000000000000000000000000000000000000000000000000000000000000038d000000000000000000000000000000000000000000000000000000000000038e000000000000000000000000000000000000000000000000000000000000038f0000000000000000000000000000000000000000000000000000000000000390000000000000000000000000000000000000000000000000000000000000039100000000000000000000000000000000000000000000000000000000000003920000000000000000000000000000000000000000000000000000000000000393000000000000000000000000000000000000000000000000000000000000039400000000000000000000000000000000000000000000000000000000000003950000000000000000000000000000000000000000000000000000000000000396000000000000000000000000000000000000000000000000000000000000039700000000000000000000000000000000000000000000000000000000000003980000000000000000000000000000000000000000000000000000000000000399000000000000000000000000000000000000000000000000000000000000039a000000000000000000000000000000000000000000000000000000000000039b000000000000000000000000000000000000000000000000000000000000039c000000000000000000000000000000000000000000000000000000000000039d000000000000000000000000000000000000000000000000000000000000039e000000000000000000000000000000000000000000000000000000000000039f00000000000000000000000000000000000000000000000000000000000003a000000000000000000000000000000000000000000000000000000000000003a100000000000000000000000000000000000000000000000000000000000003a200000000000000000000000000000000000000000000000000000000000003a300000000000000000000000000000000000000000000000000000000000003a400000000000000000000000000000000000000000000000000000000000003a500000000000000000000000000000000000000000000000000000000000003a600000000000000000000000000000000000000000000000000000000000003a700000000000000000000000000000000000000000000000000000000000003a800000000000000000000000000000000000000000000000000000000000003a900000000000000000000000000000000000000000000000000000000000003aa00000000000000000000000000000000000000000000000000000000000003ab00000000000000000000000000000000000000000000000000000000000003ac00000000000000000000000000000000000000000000000000000000000003ad00000000000000000000000000000000000000000000000000000000000003ae00000000000000000000000000000000000000000000000000000000000003af00000000000000000000000000000000000000000000000000000000000003b000000000000000000000000000000000000000000000000000000000000003b100000000000000000000000000000000000000000000000000000000000003b200000000000000000000000000000000000000000000000000000000000003b300000000000000000000000000000000000000000000000000000000000003b400000000000000000000000000000000000000000000000000000000000003b500000000000000000000000000000000000000000000000000000000000003b600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003c000000000000000000000000000000000000000000000000000000000000003c100000000000000000000000000000000000000000000000000000000000003c200000000000000000000000000000000000000000000000000000000000003c300000000000000000000000000000000000000000000000000000000000003c400000000000000000000000000000000000000000000000000000000000003c500000000000000000000000000000000000000000000000000000000000003c600000000000000000000000000000000000000000000000000000000000003c700000000000000000000000000000000000000000000000000000000000003c800000000000000000000000000000000000000000000000000000000000003c900000000000000000000000000000000000000000000000000000000000003ca00000000000000000000000000000000000000000000000000000000000003cb00000000000000000000000000000000000000000000000000000000000003cc00000000000000000000000000000000000000000000000000000000000003cd00000000000000000000000000000000000000000000000000000000000003ce00000000000000000000000000000000000000000000000000000000000003cf00000000000000000000000000000000000000000000000000000000000003d000000000000000000000000000000000000000000000000000000000000003d100000000000000000000000000000000000000000000000000000000000003d200000000000000000000000000000000000000000000000000000000000003d300000000000000000000000000000000000000000000000000000000000003d400000000000000000000000000000000000000000000000000000000000003d500000000000000000000000000000000000000000000000000000000000003d600000000000000000000000000000000000000000000000000000000000003d700000000000000000000000000000000000000000000000000000000000003d800000000000000000000000000000000000000000000000000000000000003d900000000000000000000000000000000000000000000000000000000000003da00000000000000000000000000000000000000000000000000000000000003db00000000000000000000000000000000000000000000000000000000000003dc00000000000000000000000000000000000000000000000000000000000003dd00000000000000000000000000000000000000000000000000000000000003de00000000000000000000000000000000000000000000000000000000000003df00000000000000000000000000000000000000000000000000000000000003e000000000000000000000000000000000000000000000000000000000000003e100000000000000000000000000000000000000000000000000000000000003e200000000000000000000000000000000000000000000000000000000000003e300000000000000000000000000000000000000000000000000000000000003e400000000000000000000000000000000000000000000000000000000000003e500000000000000000000000000000000000000000000000000000000000003e600000000000000000000000000000000000000000000000000000000000003e700000000000000000000000000000000000000000000000000000000000003e800000000000000000000000000000000000000000000000000000000000003e900000000000000000000000000000000000000000000000000000000000003ea00000000000000000000000000000000000000000000000000000000000003eb00000000000000000000000000000000000000000000000000000000000003ec00000000000000000000000000000000000000000000000000000000000003ed00000000000000000000000000000000000000000000000000000000000003ee00000000000000000000000000000000000000000000000000000000000003ef00000000000000000000000000000000000000000000000000000000000003f000000000000000000000000000000000000000000000000000000000000003f100000000000000000000000000000000000000000000000000000000000003f200000000000000000000000000000000000000000000000000000000000003f300000000000000000000000000000000000000000000000000000000000003f400000000000000000000000000000000000000000000000000000000000003f500000000000000000000000000000000000000000000000000000000000003f60000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000400000000000000000000000000000000000000000000000000000000000000040100000000000000000000000000000000000000000000000000000000000004020000000000000000000000000000000000000000000000000000000000000403000000000000000000000000000000000000000000000000000000000000040400000000000000000000000000000000000000000000000000000000000004050000000000000000000000000000000000000000000000000000000000000406000000000000000000000000000000000000000000000000000000000000040700000000000000000000000000000000000000000000000000000000000004080000000000000000000000000000000000000000000000000000000000000409000000000000000000000000000000000000000000000000000000000000040a000000000000000000000000000000000000000000000000000000000000040b000000000000000000000000000000000000000000000000000000000000040c000000000000000000000000000000000000000000000000000000000000040d000000000000000000000000000000000000000000000000000000000000040e000000000000000000000000000000000000000000000000000000000000040f0000000000000000000000000000000000000000000000000000000000000410000000000000000000000000000000000000000000000000000000000000041100000000000000000000000000000000000000000000000000000000000004120000000000000000000000000000000000000000000000000000000000000413000000000000000000000000000000000000000000000000000000000000041400000000000000000000000000000000000000000000000000000000000004150000000000000000000000000000000000000000000000000000000000000416000000000000000000000000000000000000000000000000000000000000041700000000000000000000000000000000000000000000000000000000000004180000000000000000000000000000000000000000000000000000000000000419000000000000000000000000000000000000000000000000000000000000041a000000000000000000000000000000000000000000000000000000000000041b000000000000000000000000000000000000000000000000000000000000041c000000000000000000000000000000000000000000000000000000000000041d000000000000000000000000000000000000000000000000000000000000041e000000000000000000000000000000000000000000000000000000000000041f0000000000000000000000000000000000000000000000000000000000000420000000000000000000000000000000000000000000000000000000000000042100000000000000000000000000000000000000000000000000000000000004220000000000000000000000000000000000000000000000000000000000000423000000000000000000000000000000000000000000000000000000000000042400000000000000000000000000000000000000000000000000000000000004250000000000000000000000000000000000000000000000000000000000000426000000000000000000000000000000000000000000000000000000000000042700000000000000000000000000000000000000000000000000000000000004280000000000000000000000000000000000000000000000000000000000000429000000000000000000000000000000000000000000000000000000000000042a000000000000000000000000000000000000000000000000000000000000042b000000000000000000000000000000000000000000000000000000000000042c000000000000000000000000000000000000000000000000000000000000042d000000000000000000000000000000000000000000000000000000000000042e000000000000000000000000000000000000000000000000000000000000042f0000000000000000000000000000000000000000000000000000000000000430000000000000000000000000000000000000000000000000000000000000043100000000000000000000000000000000000000000000000000000000000004320000000000000000000000000000000000000000000000000000000000000433000000000000000000000000000000000000000000000000000000000000043400000000000000000000000000000000000000000000000000000000000004350000000000000000000000000000000000000000000000000000000000000436000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000640000000000000000000000000000000000000000000000000000000000000064a0000000000000000000000000000000000000000000000000000000000000641000000000000000000000000000000000000000000000000000000000000064b0000000000000000000000000000000000000000000000000000000000000642000000000000000000000000000000000000000000000000000000000000064c0000000000000000000000000000000000000000000000000000000000000643000000000000000000000000000000000000000000000000000000000000064d0000000000000000000000000000000000000000000000000000000000000644000000000000000000000000000000000000000000000000000000000000064e0000000000000000000000000000000000000000000000000000000000000645000000000000000000000000000000000000000000000000000000000000064f00000000000000000000000000000000000000000000000000000000000006460000000000000000000000000000000000000000000000000000000000000650000000000000000000000000000000000000000000000000000000000000064700000000000000000000000000000000000000000000000000000000000006510000000000000000000000000000000000000000000000000000000000000648000000000000000000000000000000000000000000000000000000000000065200000000000000000000000000000000000000000000000000000000000006490000000000000000000000000000000000000000000000000000000000000653000000000000000000000000000000000000000000000000000000000000064a0000000000000000000000000000000000000000000000000000000000000654000000000000000000000000000000000000000000000000000000000000064b0000000000000000000000000000000000000000000000000000000000000655000000000000000000000000000000000000000000000000000000000000064c0000000000000000000000000000000000000000000000000000000000000656000000000000000000000000000000000000000000000000000000000000064d0000000000000000000000000000000000000000000000000000000000000657000000000000000000000000000000000000000000000000000000000000064e0000000000000000000000000000000000000000000000000000000000000658000000000000000000000000000000000000000000000000000000000000064f0000000000000000000000000000000000000000000000000000000000000659000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000680000000000000000000000000000000000000000000000000000000000000068a0000000000000000000000000000000000000000000000000000000000000681000000000000000000000000000000000000000000000000000000000000068b0000000000000000000000000000000000000000000000000000000000000682000000000000000000000000000000000000000000000000000000000000068c0000000000000000000000000000000000000000000000000000000000000683000000000000000000000000000000000000000000000000000000000000068d0000000000000000000000000000000000000000000000000000000000000684000000000000000000000000000000000000000000000000000000000000068e0000000000000000000000000000000000000000000000000000000000000685000000000000000000000000000000000000000000000000000000000000068f00000000000000000000000000000000000000000000000000000000000006860000000000000000000000000000000000000000000000000000000000000690000000000000000000000000000000000000000000000000000000000000068700000000000000000000000000000000000000000000000000000000000006910000000000000000000000000000000000000000000000000000000000000688000000000000000000000000000000000000000000000000000000000000069200000000000000000000000000000000000000000000000000000000000006890000000000000000000000000000000000000000000000000000000000000693000000000000000000000000000000000000000000000000000000000000068a0000000000000000000000000000000000000000000000000000000000000694000000000000000000000000000000000000000000000000000000000000068b0000000000000000000000000000000000000000000000000000000000000695000000000000000000000000000000000000000000000000000000000000068c0000000000000000000000000000000000000000000000000000000000000696000000000000000000000000000000000000000000000000000000000000068d0000000000000000000000000000000000000000000000000000000000000697000000000000000000000000000000000000000000000000000000000000068e0000000000000000000000000000000000000000000000000000000000000698000000000000000000000000000000000000000000000000000000000000068f00000000000000000000000000000000000000000000000000000000000006990000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000006c000000000000000000000000000000000000000000000000000000000000006ca00000000000000000000000000000000000000000000000000000000000006c100000000000000000000000000000000000000000000000000000000000006cb00000000000000000000000000000000000000000000000000000000000006c200000000000000000000000000000000000000000000000000000000000006cc00000000000000000000000000000000000000000000000000000000000006c300000000000000000000000000000000000000000000000000000000000006cd00000000000000000000000000000000000000000000000000000000000006c400000000000000000000000000000000000000000000000000000000000006ce00000000000000000000000000000000000000000000000000000000000006c500000000000000000000000000000000000000000000000000000000000006cf00000000000000000000000000000000000000000000000000000000000006c600000000000000000000000000000000000000000000000000000000000006d000000000000000000000000000000000000000000000000000000000000006c700000000000000000000000000000000000000000000000000000000000006d100000000000000000000000000000000000000000000000000000000000006c800000000000000000000000000000000000000000000000000000000000006d200000000000000000000000000000000000000000000000000000000000006c900000000000000000000000000000000000000000000000000000000000006d300000000000000000000000000000000000000000000000000000000000006ca00000000000000000000000000000000000000000000000000000000000006d400000000000000000000000000000000000000000000000000000000000006cb00000000000000000000000000000000000000000000000000000000000006d500000000000000000000000000000000000000000000000000000000000006cc00000000000000000000000000000000000000000000000000000000000006d600000000000000000000000000000000000000000000000000000000000006cd00000000000000000000000000000000000000000000000000000000000006d700000000000000000000000000000000000000000000000000000000000006ce00000000000000000000000000000000000000000000000000000000000006d800000000000000000000000000000000000000000000000000000000000006cf00000000000000000000000000000000000000000000000000000000000006d9000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000700000000000000000000000000000000000000000000000000000000000000070a0000000000000000000000000000000000000000000000000000000000000701000000000000000000000000000000000000000000000000000000000000070b0000000000000000000000000000000000000000000000000000000000000702000000000000000000000000000000000000000000000000000000000000070c0000000000000000000000000000000000000000000000000000000000000703000000000000000000000000000000000000000000000000000000000000070d0000000000000000000000000000000000000000000000000000000000000704000000000000000000000000000000000000000000000000000000000000070e0000000000000000000000000000000000000000000000000000000000000705000000000000000000000000000000000000000000000000000000000000070f00000000000000000000000000000000000000000000000000000000000007060000000000000000000000000000000000000000000000000000000000000710000000000000000000000000000000000000000000000000000000000000070700000000000000000000000000000000000000000000000000000000000007110000000000000000000000000000000000000000000000000000000000000708000000000000000000000000000000000000000000000000000000000000071200000000000000000000000000000000000000000000000000000000000007090000000000000000000000000000000000000000000000000000000000000713000000000000000000000000000000000000000000000000000000000000070a0000000000000000000000000000000000000000000000000000000000000714000000000000000000000000000000000000000000000000000000000000070b0000000000000000000000000000000000000000000000000000000000000715000000000000000000000000000000000000000000000000000000000000070c0000000000000000000000000000000000000000000000000000000000000716000000000000000000000000000000000000000000000000000000000000070d0000000000000000000000000000000000000000000000000000000000000717000000000000000000000000000000000000000000000000000000000000070e0000000000000000000000000000000000000000000000000000000000000718000000000000000000000000000000000000000000000000000000000000070f00000000000000000000000000000000000000000000000000000000000007190000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000044000000000000000000000000000000000000000000000000000000000000004410000000000000000000000000000000000000000000000000000000000000480000000000000000000000000000000000000000000000000000000000000048100000000000000000000000000000000000000000000000000000000000004c000000000000000000000000000000000000000000000000000000000000004c100000000000000000000000000000000000000000000000000000000000005000000000000000000000000000000000000000000000000000000000000000501000000042ea6fe02855d8c72905f35f08604467117c037962e324c9a793505138558b3700c94efd9afe573212f9bf596ca3a4b42ae57f59e670a7cb5b9440c54bd8ea2961856bc4892b0b3f156ed2aa87463c389bfce0fd675a37cec77ae5d753fcf593c12f9d3f397c2edc9e4a6a5e485641163525ca802e3bd93994af997a9b9a44f98000000000000000000000000000000000000000000000000000000000000114041414141414141414141414141414141414141410000000000000000000000000000000000000000000000000000000000001180818181818181818181818181818181818181818100000000000000000000000000000000000000000000000000000000000011c0c1c1c1c1c1c1c1c1c1c1c1c1c1c1c1c1c1c1c1c1000000000000000000000000000000000000000000000000000000000000120001010101010101010101010101010101010101010000001012e5643e26da426570dd999e0e044e5f83d60f3cd813c55059bc0ea0f4a7c9d413b2d2cea949fa0876265cd8eee3a4dce1e243783562ea07e2de537f469f7bf627abb3d4560e786bafd52f77ac52dea36c50419f32386567bd969b0c38e1bd7405d339cecb99fa74bfd631917f965357f0341d8c4dfe6a8f4b621d8df54c82941d560ac24523012499eeca2594f20ce238b7d21b98ad5c638767d70ee05532c2183e6d64e69b005709dfc4771c7ca5981adc54f3e8bd1b00222461ae90e44eda2f1d4572fe0b0b23100a7ea6d4780b25e826e41ca9e71897e010bcb218887b3d036d44eb30a430b5cfc6660270eb5fb7f274689ac73dfa53ba9d0739fe38637f01f7130af8c5888d4c65ea68109a1d58fe8d7d1ae62098857b0a3a3dcd393ef80ed8bcba6eb5e3b4887a32c51c5853b97a5eb59c87c520f36423c6d7be06071821ca1719330de5e3c51a521778b49cbbc1d53f8ed42e0562bf21ed72e8cb9a410b0e82ef5f7276df41353faef675fb408aeb246b6e2f704cab99bf28d1427e7b0fec7b9929c6effdcd045d3fdcec1d1b73faed495444699fab936630d69b519f0bf4f1453db36439419dbfba703b849d1aa5774fe9a5325e5bf3e7cdda9d1f7f2a9c2a035c72fd4a3e383306aff03448f9accc08a2c665837560cec8675fe2512bfaef35a8fb7df08a81001a7fd4903849c0371dedd87f31295f46269c5205dd0000381000000e00000001bc000000901b797de73e9999b3a9fa7faef2b9776030b79107f8ef60ffc7760b6e97a90dffd2257d8d9a925166babf7a0a52f068719b43c14cb716e8701cb3210983fce075ceb092d13c44ce2f3c17f4ef4a05989e09f7902ac6d1462fc1835d79c1675b9f2fde4169afcd051fedb6aeff2aa9932703e7b4bfe98821842980e254ff89f8e779ab471921285cb1ddaf4af417a500c90000009078d71e740c9950991c32c281e099c02f0fae8e4ff4fc543d01916d815596b4c822e627d93a0c5c91cecc658bd0dd8399cb4d6b7ee6e98081a6c63c9d0339c29386077ae456ac26863e7913cecc8f917a2f2a4c100d66e5b437583fa8d4fcd894ad459c5ad9d6d7a6e699a29a22c2c8140eacaff5bea09bde32a02a6431403e58f45d368629a192449e6c30bc65dc3f4100000090843e56e42dfd77c6838462db502bf611ecf080c65ea9baa8db0b86ab64907d4dfbe1496a28cdbe7e3e73cfb3f93e1e8071c16125070bfb15e9551dff8a0a7e8e0c090683e8fc402bd63e1e6996e23c322696dab398442aa5772c8d2a30dc321be1ec67a3a3e7e856933a7e52c9d216fa23b58dc56a2b2b2d9c8cb05a7e412408c4e23cb118e03c6867c0b4efb6a4f337000001bc000000904e1bd21f8c76781b778cb5458646b85aaf106d0a91df9f547e66c195d524726e45b54d1ad46e6146b8e59ef135b9f7c8d2306e16d5583ca234473ae1e8a168f7f43210be2205a305f97bcbbf454322221aa5dbbccaf40b10c32aa142fff652849ad8799c8e8fe47a00b97556ee7ab8b8246894ff7459f74ec2ea88295e8609f33042503b269279eb81915279618b0c88000000903ec6335f2abdbd898c40d293be257985ae20af19478336baa704e0c69de955f8106c3eded613301de87a66aeb958440e52182dc9885a246bbc37986f0817a6fab4faa2f0b5fd1f9974bff4f5628f68da0c98bdcacc221ba53645cb4a6eaa0586deb122c718ee4e3bc8d481b1431f974d198923b149a07513b967f898af23dfff77abd876ee2f9e98d0186149f2f0e23f0000009050fc052930a1e035cfb88f2fa6d487fca822646e350f608a6b48dbc8815f8ba0bde18d6709eb8293473c08ebfa8757ad8bb5c72b44ccd4305b70f4dddb2b75b9d3668c1368270521c3623f5f940b0f9314159c3a9a6d01d1552209e633dca985020cbc1f331f219fa13066dc758d83151d7da424038d3e8e8af732e78c89245d571dc4b18a501467479fce7cbae40f14000001bc0000009082dcd3c82c3c1100415c938432ebd34c4ab70a638b66b003714a0773162ea54d002c71b5122505c7be75a5f4113951486cdd852084198eee184c20b9e4d48c791e21f49e866dfc957f437ab731ecafd3056f970d64a24256a48e4a3ef102ed3578920344f40a3f5b0cbe5f5861a43d0c281743ab75486e11f2d30d35a1ae4a1a9890af93706b58487378a780ae3b31b70000009082038200b2d7d994b743b4b7a8a2c3890ba2200c6cc29eba93ff7b172be1101873f6efb5a1c28c099dc24e86efc5dd9cadc8bd7808f3da9e16cb329a81f22b378c467a7312a0570ca03bd59f2432a61d1d338c322d554e1caa80bee97bfe5924a4771799bac6758934ca9913cd91427110ea508f9c96bb8b06c0be71d9db86a7b5853cbd471e7a98f23521fa527dd28200000090ecd173bc552f82afca0fd98fd1b786259a2141ad3d5a747513b8252d1f7e3d218200878e070eba449cf1337f32bc26e9bf9cbe2a1dc64c0a9f4149539a9c2b1aaeadaeebe450d852e94d52dbfcea3b0d1c82657326e28d70deaf2be8954bad25386725fed43ba5cfefa74c9979ab6afa1a5fa0c1ca94d0b24d8c67cfb2b33c9547bcbf372c24540aa95ce8359ad909c7000001bc00000090b22300ba9c3f037c442823ab0a49ac1a3be09b089a36ca92038b488d149fc082221a6c26990575691f35bbe03554381c4315f6cc2286467ecf4d8c03906900d6c75f03b182055b4eee5f32a58c7f279d255ca638e725809df739a6cab04666200e50fea15ae79e6c6fc7567e272bec0202d022cbc3719fa29c95e3ef74be9a70ad93a7048b7e671ba8bb6e074a0b32c50000009079f612234cf6e29da5b413ce9bccadc053942c420974ee5acec11e3b980e75892b7685f5e50d0fc4f3bf62ddd863a8ff7f71b72a0b5f9e6e2bdd2fd432c5bbce6d7205435253132f16150334349797e72e5412649c80dd92fe5b937aee20687d34ac6143881bdd2c44f435488550df180ee191958f16e625eafd5989958119f94c2aadfdcfcbff0a4759cbd86b125a4900000090d1c0d8aed009980de97d1591750499c41a0c2f476314d8abed289e7935311454520ccf019874b643772ff2d3b6ebb322f4acfdb8eaa609adc816fda1b4587a27e4352e3a0c1ef9c82929aca015005fc109a7a851db7e3ea8ff301a586ca31c92edc0ba597727df332848a5da1ff0233d042bff95d7022840a759ad2c8b9cdb61da29a3d474b1c00ed8d5333feb8897fa000001bc00000090c7f495b3e664c36ab8b4dbe878b705487a2c0ea7937a039f2e658858d5f903083c5b9885e234d201260493e84be30870af7bf63e76172c054fce8561003a833fa200b47b15ee328022f42e1e7810451205d1f3f8f8602d4eaf3671b2db3908d240a8ec8e4a6308d15130e181faa6892512621b0bd9214572cbf40d4444da48f795af228d64349324b792d70fbc24c86400000090ebfa42b7fb34b655ac4686d1b4f4ca66e790b27d613c6c4c776965f425afece83aa12dbbfa867fb89c6bb8eefd1bfcc019ebb0f3c934195fb1840ec4c20f94d45000ab345605802d611f84179fd4fe541dc367d7305a1edbd179ddff5c3b0d7048a667c299266be437ab8dfc3c54a8b1181523fd2e92a877762e32f0facb01bfbffaba9412b8faf71d5116e9809f560e000000901bbe85f98be06cd511be9f570316d8a321dc49577b2bc7fc6f56d76acdd0080aab6b08f70388c3bcac90d3bfea0e2886707f9c092fc7a12b0a02927f2781a87a46415456a625c632bcb10d74b7605a640fc96fd35f9bef3d9706ed7a5f83508da76bc0453f12ae2cc28ddd8a0bb2961923e6bfa2113b5fd769918001a857494586fe25232a4da17625bfeab890a52220000001bc00000090817ca3288a48fd22d4e86b0ebd2661da859c15ca6924861d1eba7da6ff802dcfc34f71e28dbc6643f4a0f5771197d7292d00e291f6e79bb1dab5456b22064bddb0d4ae327ea959aefe5ddf458b8307322ac7b394807a16776f4bca007c696ada28b19a6d7220f4cff213587e85ef293102ba9db42aa1e7398726af034626017111f2a2ac184a1ddb26fd0686999ed7710000009017ef7ddb43e5306dc07cd20bd6b3c7f9c582231525e50c749eb953a969a4f6214311606ff7d8fe3ce50f9937581f0f4192b717bc605ba9e5c172417004d9ac289ef3769d66cfffcdde9f2a9ca0e676dc182fb599eb94b2a3fcba48b6107cba525aa7b58e177279584b19ee15ffb5476c0fa6aa34c7c1f5009296f2e19389802adea9fc12c448e27ff046e4d8e973c85900000090c6e61108f0240d7ab7ff2944c36a98d4a3eaa6ef78599afb18dde72885645026c24c7f350204f3a9c27b4a132e6338cc30e2d09624f358dec9543b1c8c5d7582089602d0e4f7a9d218124c0de912489f084afdb2963eb7654794dad085e75f5d04c82d8fe890c31cbdce5bff3e4adf3c121398a6a35457417c3b07115cf0f9f90075a97e26376c1eae5441e5cc09b789000001bc0000009045913da8bf5aa7aadfa2c4ed5b551ee772c1b1bf9cf124843444f4a55b7151269961718784750dd3381ce5b7e03dfe637039fd95a9874c3c4fa01c77f30bf185760e03f9b872c6816c3c9c6012e26dd209dce236ad0a0af755c0907e14c1d8dbe7cb0650d7bfe1335065466c05c4f6962fded5c953d4310a769be5119efa20dd8c9ed744be7b7217cbc1796cf404871a000000900e4d651a869510bbd674054aa1ba5989becdd956f4d96a28a4e861fc295ca29742e524e941b2eebadb089b9609894b06f3269b2745f280a3ba34ac50bbcebb004e823035f3e8c8171122c3b0f7741a252087ef7f3136fbebe71377c694deccd1dea46477d1dffd9c24c5d7d0fba9c84106a300e262b4a48c67b6c78a07d4a0a7e4bbaca2c42f9e3556ee00bc0cf01cf100000090919fb788e62a5c68259191483cbdcb4e338ba1bb42a7d7d0a2617aea42528416f5494810f4ef46649f82644707591581182fca7df3138c0155d6b3c13d1d7f84df0d776b8328f1be27e3228d2d981c0b2377f49a378fe2eb8eabd3f712910338e3ee0ab4560dd6c6ebd1d84e341fcf630d2c87170c046ddf014d6f3297750a04fc3366b69749dac270627270f9cea050000001bc00000090e607383b2552334fe46bafe3092cdc5ed779a45ea17dfcd069258c50b14a5637c003d8a10cea9b4c045a9bd0931a20bb6da7781ecbbb80d5a4bea0ba7c8f4be9bb1eea508ce3f698f8e9b48d83bc5ded000b113501b571ca620213de2d89c5fb35a1bb53a8579b703ce8e697b096d28f1da2ec46acba3c6876c1f1d8e72f0cbf5a2dd2b00af83ea5e207b519767a3d2f00000090a467196fcbff6baee7179d35eb64b9d71e2755b55d67ddb62fc435123baf20c638e66d2c17c09e5e2353ec8ef562e961fa0d9db9cce5b39142acd2c769ef4887ea1763d00a3a30253b1df45b7b960eb81b067ddbd6baefd53d5b47245c184b3e393df7baf4b971f74a73c4432e23bc091cbf73fd2a7c5bb103b4e28fc405ec49464142834c450cdc5d5be4fde46217cc00000090dca25bcaa4e1f24fbf184fa7736fbfa8a1422a21bb65e705f9f771823712a453ecd94ce9c472c9ded3c1ab1cf613a75de98e3f944c60674b7d06d3f3f12367e30e1a8884e46b12acf7397bb9496cab3d0fef92a88a457ab8cc910892501dde5645f44fac436ec87fafa1544049280a2f0029e814d360758edc925306a06b5ff5c54b3207e780928e8f15746b0e88e93e00000e00000001bc00000090bd6181d3bfee1de227de2447e0a7daac1d4c8d08e69851c205f7c1cdc6bf7b3017ddc2f1491596f08d0a430928d1f1b37bf8b2a26feb069a15afa1827ebe9ed5cd0a5c14230792215f8c90b86b580c312038b601614790511104cda7a4382c8cdda509a58f64d57396b97f437c4b934f10a44fdf4ffeddf8f5df2e0468aad6730bf888ffe8ec998e20a09f5913519d3200000090822111c03e84715689a9e00703fd4cd44419ddd72b7d1b2fd1c973bd7bc239d72d9dff5e533499b6130f258c8f7e29c7e8324e0c9011308d49a25d71405051843ebf27e7cd984fa9a0f102414e0112ad2acf6e36a5592f30766055ebb36d17f90c4c34cc3c911c8ab594ebf9dc4682ab0cc5d7971e4ca23bae6df4a0fe4095a838c097ae2edfdeb1d3db27e4ca9ca8640000009061a4139e19516337f1a3c57a2fd0e79e568881686bda4b1e62a0594af2a1d467f9e0b2e13025f390c713f2918d4ff3cdfa3bd22adffb95122042a7f8a0be5d8343314ecfb77ee8a806915d7f572c92f130570e8147b751eaac5425035ebff26fdf98b976d90b9107a006dc1a3dc145921e8a9427757ad784aa82407da9f75860b14fc4f2bb14872a69971841762e1c07000001bc00000090aaa85dbdfce49b5eb85a27e9da1fd6b4308e39dcce9b79f4a3754b77d67cdb56deb4492251c0ca4e4b30f3af21a1a53976f20e0b5adc5cf6ecc794f5a539d675862d20dc784a2219bbd797d6cc419bd325dd306d33ca52ce9c26361aeec16b190f6138a9cd28ab6ee9f852182957396423497b0ee686982703329ecdef00da3fee38d81184fe0e283cc2ec13e907fe66000000901b1878c7eb0808b727f95194b6155308bf1a285983e116a358d4486f6bdc5ef716335c42c6fbf0a7c1c34321beb44b1ba635850b9fa13e6ef7dd9384e828c08156b83a8ea8b2c34216f78557c4738a9c2c886001f090c985a9fb6705c1a05ebf9713fde6fe88ea733b217141f4a6a9950a00dcb959384ec155a0679faad83f007bd0cbde2c6b7bc05d51fa6da12762690000009046ac116eabc1b398f46e9a3b1825e007610482e7a2c2a81d59c9aeb4c6c25735076ccd97791027383a4b00e88afbd0edfc2aeacdc59d8f30e92c69fd495193f634146501f09d1b36de47ce1b8e1cb3b82c14c721ea165bbea66658b88d8f28334e070a905c30f6b218195df0384f6bba25d1b4b673980993e34a37a87689236aeaa73e69d5c3d28e1c33382c4be3a7b1000001bc0000009096ad00ce4ffe92fcccbfad208d1aef5f22e3377d59ff31d52dce08ff97ef95582a65be559471c71a322e58cb127fc057467d9c969d0ca6e81c5c1b94b431fd8968eac7a611b846547d2804251be3c30f07a061d5256764d903fc7c336e6b320e6846ca6bd2fdc124431986835098487414a61bad963d47152c1752d98962e55049eb5a43b14771bfe6e40d5339cd1acf00000090182b523bf7787b743567f87701ae9dfc017e63990828cd74ac12de14ec6423d314f5d78d012c498e9f1683ff49ff01fc811d77eb61cf48b3b79a727077e360dcbdc347655f3c66266d7d05f390e2efbc1b638bcd102eae6afe72291fd2fb2be58c66c9d8067b7d860056eabfee0aaad9259cb5beb23610bf62238cd7865405318b05002e6fdb3e03d90281c4373227cb00000090f4aece065930531fb2b1ebfb8f35cc8cefb6f056ac6a01211268ed797c950175ae65d255277ecdbd456faf1fd1aa60db2f99b2e956f6d96e8130b17438793e1c29815e549d80df0625db63dc9e700fc21e249214a8058566084aa8e51f6f40990917bc785cc67185c699c210133cf3070ce4a189504b5d39fb02704676cda13c32f1ef7d98cf831a3f783a44a36137aa000001bc000000901ccc5e541dcbbfde8e07ec1e8f0feff9992d8410c2f2773bf969f2edf126f16728a8c53fbcfddba295793c04b26addc91fa10a63aa5a78d997edbb619939b4789b322629ded0f5a26a3ec86e6178a22f0bd235d5264887cd3b9ab610241ba08055bb5b1d0d4e98bdf8b86a29f5bc2fba2eac5f1687c44810e5fe169c731783e07446b51c9c6b28353ff61818cd3f483000000090f112d311ce053a494900d760e872c300f5932582a84454ebdfb300c829cd2839692611ae86e1a648f162c12aabc9b22cfda95e873602837b5389d63b4f8fdba6bb41fdcccc0ebf607b47f67dddcb03c409732f2069c4568142728b4b8e589c3c15950098cbfd971a09f8c0951408904f114b04e815816d2c33a3503f5a72bbe73450f746d48fec062ab45b30f21f026c00000090e8c4d39ef4c08d7e1eaca3d87ec8deb219bcfd570ea49c368fe4c74800a6ce1001bcd46b76510c1a9c8c67a1e739e2abadc91a83abff72d6282dd64d7d7bb08129103afc1e7b8c168ccba50e4df888050b8cc9e8aabc36a7f2372c4b6eed3e0f4e31ab657b36d4b7a865d2dd4ad6a4d9219da11c44ef2e9cc9c5d1b5246d1168766adb515005a996e4ee91f9a52ab4ee000001bc00000090d953446ec667f8c30f5cf5a687bce8c1747c52919957f41f4a0061cfcbbc21495643c6cf0a1d49bea47944a0e23f306b635f873b844cf41b73059579648da9da637d9886b22208d5e3e90ed5130ee82d2ffbddcdac11bb3a802e344095f23f03d8c8b1e38a41716b094a5f3ac0be0e31262faa3b7da5d0703fb5c2ffe8b893fe335c6558b77ddc640e8303186c48113400000090f9f02a5089e93c77036651eca173e7fdf4cb4a7ecff420c17a504b214ae348e0eec2f09f09d441a76631b7edd136ef1caa996eca581939d22bf26f3540db269811b4077b147f097a9217a8f0c4b17c752c8042696b0e350c2c3bd288f0a9f1fb48a8a889201f3b685ba8a1e07044c9c32c04283e06500c0b45ca9d09eae17ec48a3ea8c72e408dbef16ca1245541431c00000090c433ff6f813b9874de613698f1ae505245527ba3a0916ca7b07977864bc4d8aed5b205c4e6edb6869c98ebcb5549a50873bb400d2cb4676dc8a16ebc19be5864cee97119abeb8b5303e0851071441e8e2486ea08254c74817fddac7b2088cfa3d8eef5b9a8c79b157bff1f356ca0c54e0f947a342cf3e626f22f5551d4d53d309ea882c273c22708bab6727332ed7cf2000001bc00000090faffd5767fb4b269cb099c42a91c1661adcdc16c3ea508d0fb5d6fb1ee996f6bc12493682b15fa1f105acb4750d6a0de6bad5151cbfeb628d20d4a2cc284eb0df4a6cc86d8759d6ac3ff4c802bea603515ff1612a78e3263e8fa48858af6b4ee87012940d342de5c5b69131486243832053afb5d9b602c5f2d53416e1112c97248a8f11476d1411f337c6b5bae3e94ce0000009030ba6d4a9765ef329d8ad7ef0eed76aaca43b78eb6c8b4b0e28800e7e28a6973b2228a131f584851616d2b924c654ceb378ae886cce153d75215e8428829bf594a94e7678a1f31ca57a95069723551121fb7fcd8bbd12cbbace446613a9c986760d9b627214253632aa49bea86ca20d1171dedd3ff213ce9df08886e324e20c5ee815d7c8698d048e263516e25b35e8f00000090d9b969b7319e52edb80e69042eb39cb27a2272c1a74801344f085378a2d5bcdfd5de7d1ae2049c671ec560fe197432fecd8bb97537a36433c1b11452702ee3a17096e464dedfb5ff353f41d91d66bf252c7e8c1781a0a29af89ea4cccf4560c1db15c107e5bcbf626b0265e2dd494cd212e3fa330f1cab80cbf023b245d6f23af877957fd41e403a984dd9564ff64796000001bc000000909e7d9948bf57e6ca5d78af80c2a367d29528389ee629e78a3700cd803cb1889e9d72e1822a51b194531c311a05ccd019ac3605de3ce1a10684700d78fdeb79feb3e00a957eba9edde033f5819ea48add134efa751cd134eab77467ba7cc96931a07f3a3aba910d7a2e422b2ccdd1f4ec08c85636710e6766d36870ab57caf49d9c37be2872b58d10ea43ad6ccf824c770000009063b548ee0f40d50397a0cc0189c19967ade130fcd2c94f60363d94c4429c6083881f765dbea2e7979c2519bd5cb311fea7b428f6b6cb50c1b58d4a12f1a9a0794d71c9e76dae5e1eb195c8d484aecee7149ac167e00ee6568165e3f6d3dcd6703d0b56c5df762653929bdbc6d679eafe259fd977e77d7476686564181f010cea57bba6cc462802bdf032224ac5cb10e60000009038f9268ea717811aa33cad72195bb451dedca243537b950ab53b9f3d7dcef31a0324f39c0be8365202b9b469660ea497455acadff4a9a804c800734d6a1b5e0e1012d82df468795827f7abd6e23194050b67ae986a5764351748095d4102462f4af660599663d0dc04112cd683a06025034ab368a5733ad1c9c1507d216d040f7b06a6636bdeefab2bc793d0a4b2dfca000001bc00000090cb5a6fc8a72ed795e9e8ccd658a4dcee51f9b115514d77c4c951a5fd4b1bd318fa7c42ce19892e11215adccb973b6fbd1f708e8866eaf09e1c0955e9396ef04ed15a3797d4ff3af14119b951d1a1ceec2be85541f46fe2e4b4111cb39cf1e12f273a239d8e346a18a3d666802c7aa10b13cdcb248e2db10f356533305c80cc5bc07217c220b2cbf6cecf59d2b45d2326000000901e349dd4beb052d37f5cc22511cc2d4682ea35899b77eec4f6777fbfdf8f79a7f1fe5596eb38aca39bcf60695a376f9af2f93be7358dcbedb7e917e2e3f93fa76ef1aff8dadaeaa622517dfd7eb6c841128dbbd5179e5d088c526d17a85694b3d3eaac5ca3f359deb0652170cf14f5e10824686d8934060f8287fd02ef8c8a246d8cd2075eff4bde437069e140f5d6c5000000902bd3da32e00acdecc0e083aeedabb7f0bd215d7b3b8d0425d72705a49be91541349178857a5eceb0f63a08c61d5245c31c16521d82b0f1baa142f117dc642e25423eced497ecb2d0a0410b6a0925b23e2e8a2dce0aea43443aafccf87830d86bc36e17f6933c3a324196283f73f41dde16fdbf277618abfdccfe4466a742a596a64d01bfe34d286c8caa60b4c8ae98d700000e00000001bc00000090711779d7b8012dfb1970c4dbb93a5b0c1922bca2aefb7b28ae9f72b0658e0ab1e725cad86e7e85bc78f44d23b47bf900f6776c89228df425e929273e5863b7f35af349205afc1dd5faf8d6da69ac794312fa72620a5e5995cde33a51d3740e27b0cd25feeaa671d7555e28a0cbe2be2e28ea4870e2b3718dc5a3e33a388a9989fcfff9b960693bd59eab80926a4226a100000090687e14ce093962b68fbb611b32fc0786fb74c87a2f44600aba6afedce3ac0bdda309835206cb09022c1fea49b80a9d8580de4d11f10399f351d386305a2fe9b164f0bca6a568bef41eba80f6b6345bca169250e8d2ea61880993a1f21f9974ecda144138a03aa7fcbad92207806b763002511c22d26f76eb075457089de5c7a46587fddc77edc05ce357bea6c3aba7ef000000903d4d1e41245481ada8ffe954f9e35e3c82d56928422873edd056a9af8dc7775e4b66a40b0127ff4695877990d539aace1a5f4513a0d47a47b5176473ee379984a0b0490b9d8768711ec907856eea399e02e660d95f8776b70c3df329e0ecd761904f34bbfcf9e032588fddf43483ba47227fafadf57f97f785ba97481690b6f974392b15e550d681f295a9df516fa3a0000001bc00000090a3726f254fb9c9752e2019474153d44fc9875db8e50093d5f7a7e4ad1aea79b9e281b2614940f389a19ab132c21488cd33aa33d74abe94ea458212694e5806c4c847c1d51e189f4c74d5b3f89ef34b032e78674cf60ecc4e1ec0e3681dc1ee9df698035209ada572e66e88a8c78461ac269d204c04e044b6b9aeaacc1082178cd0b529b35ca184f7736cbc4d425dc79500000090e6ff7a0ea01d714be101f30fb21c35626b8367bc90bb0836c0f6c3aea194954988145ee4f2bc9895030b4905e2bb64eccf1c13f6642625525a9dc8410fa6826245e6b26e6f635a46a837e8738f834f1e07b09907237c1627e2244afac9a30dea4f581892aced8de70ead7f98ba0c8c6c1ca9414210b09a57d219a99747e4f9685cbdfb23e3d8d04355f239acc26fa8c7000000907b7a34c2eedd344e82ef29e01cc4081cec095ba1f1d973cd291f0b7f7a37ced930b2d1d4812aafd26b0e13fb75c931694dd6d5edcdbe51b2ed2786b48c1f1d3b9a362b92b8548d58f1ec4cf39550d7fa28f421612df2fd9726d9e3add4aa67ae4b0f622b28651163239dd53e16e7bc821367a0e57d4876eea14513362f66e4db37ce50081f47da8fe0dfd9e51a0d5909000001bc00000090074be32ad3474afb3ee71c83e2dc578235ac27106b61e7d1e68ef2bf9025e1387ec35fdf6edc3279322e16bd28043b93702d965ebda144b6bf4216a6be4e4d962f8a2a7bc7ed42f09f8d22243053ceed119b3cf5c50d71804495a5b3472da4fb49dc955504bccc260782ddb8b37276bc2d8abfa24aaa049d1322977d10d743b0a3c8e16a004d267e98d9c77a6cc7233400000090dd1519546111acd1f59b607f10fe39ceafac47fc3fe18880f8a1dd92fb451fcf7749d4f2d266434ca26f77c8671033cc52b07cf9b07e1275a4b213a6106e87268ab847b71517689188a6b68d570c7bf018450d42460677b9f15d751d12b17d9fcaa81490e555392005f78e5c51a62081083a7d1cdc2c56db8317260e4ca1a2ea5a3825c4df7029a5106f84a73b7e065800000090a94bc0bb2cd839a5b5ed078fd1d0341931548aa0ec97b12e0bc6904a9df41f53b660919da0796d165e61224279b10204ccd016d20669b46c9353762c2cc6666d5a46bed0248d494cf4d164e5a0b093770fb80140aacc5ca6a85381e904a422d79aecccf334e7aa36bcf993327922fc1d063b521f1456267757cf9e636bae3df7151d08f639506e47928979839d791190000001bc00000090e06e34c3ca160b6c0f91da671c1bc69c8f9174f14f9ba8f75c327319741e797159b24f50448b9b7f5188afba10807fadf3e92dc16c983b12464f710ea468522e46f57f51fc296df47850ef71c0bb0b3c0f299c95bab78fefee1961befdca98675273efff6acf85bbc04bdb8427f8576c0126dac2f7d16d1f251e92ed4114960a394f32f968161a5b9e63f6893fd348fe00000090f101c00b612a3ace587e48e31770a7a135abccffbfe73be6ad923d166a5833983134872cf8b95c2c2df660f255cf7dd23d3f97cd01ba5c983986f40bd9688c5a866f26ab23cf7033eb0eb911ab412eea103657d3baa5c85f7ec3b70a151fce6d323082f9f0e55e9acd22db55a2e1c46111c4914c00e845181d9573ea80246c3945facc6578e48e4627c698fba70c09bf0000009043f7ed365d985d2e23ac0f1852fe390a360c2ab97e411a9e546e61d1d4df6b5f62cbd42baa6e7aad77d4de6e8651e6f17f7fb7a0f2645b2847d063e7973bf04b2ccc2f619effe408df8245da42d778b3020ab687e82b4561604eaedc6713a6c509bcd9770d316fe3e87201adfe92be7e156f951124b1c91052c4fe00481b3e8e4147cde6f8629c3d58691dbec95a260b000001bc00000090dcfdfebc080aa88cfe340ed68307be6c8b040f2f69450d133b6f64846bd07304b5f9e3142bbf6e6c8ab63958df7441920c2fe3c54adfa050af53921e9c7dcab6090317e5136e6faab9f3015bed62ed971bec7a702af8f02bdc2bcc10f6acc81164a35a769d06b908f13b7a5988100904164725c92256c75bc7377439471ec1f2c2349f60c96ae325639bdd30c0ca73c8000000908f525da668aa0b2a608ca490e4690f7611a75585bbcbad5852ff08f0538a8f852074f28daa8a516cb9e63c8996ec2b52fd1c2c7406df4b6f3438324b499a4352a2f0d106388ec2521b024ace1bd10a530e39d908bd7bc588acb6ad3620effef4daf841fa7e1ad61561f30907bd8ccf800da5e07b40ff1c7536c2f33ae58cd733aa09feb1bb750da52f8c5308e00154ba00000090e830415cc260dcbc28e3fc65cc37e342d17e46af1f59211245ac615f59286f3e12d58861980151657b4dab8f9300ef78427977b7a41f8af4654b772e3d39f4ecdd81a5ff7ec1e1de02748c7855be9da22fa12c87384fc608866c4d38e60b9f691f2e5e9a211fc44dfffee1ed50851b8e1e4866bdf89a140674730b5bfcac2d5225ed3899e642e6160332ca0aee932101000001bc000000906d512dc44ff732cd625a01cc382a050f5db4e4daaa7dbb712cb4ed870cff51e4ddaf7f578c55c044ed1ffe22e3506af9ef784c3af814638c1350a8df01b83a0efef1f6c24dc222175f0d33aa165272211b075f3d461cb594b488cdc8948050d113da284842f2e3a0d25c06e15a7298e81be90c06fbce7a7efa353c2e9c7c202e67b9a55c700f6c9e5f637d7a9bee4cbd00000090f5bbca51eab8400c4026cbc99237a9880521a088f1b29c948261d806ead1aeb650a679720905d16e539e733e8ebfab54901d2bce887bfd88e1d57863ada083e0d31aa38959c51a66e4f75523435cd4142dc8a34b5be7629b69e90190a4e0c81de1cbbe25627d45096df37bd8e4636720245898e1da6662f943372bd2e29e2ec90be21fee213df1125ee51921f7634bc3000000904b80ad62813545d07380e92d19110a2abbd4b3edcd2565cfabbc497e9d317ee4fdb36130f0358713e2267c741126a87fa25ac6b298f3afce8346802d792b158c483b1f327e05a1c67f94f6c6e5a210c821a948268bfbf520742e423d0e041f68029179ac3fe60ddef0a21bbc355e2db80279ab4e1e2409e15e4d174c0ca96aa9ecba05b80d5ed013fbe55a18d9969078000001bc00000090efc7247f2dd9f036fad163f54ab272dd9beb16937e1596c73113424d7c0d96615abcd705187dda8e18dc9623c12328e3ec21c0199b8312aa0a170f72f58c0eb5c15e15fae0dec1a5cb6620dbb846d9bf20296d6e6bac92aefa2e2e14e7be82119c808d2f7b2d4ccb2d273a9697e44714151a31a3dff72be5410a4531375f208b43607ed1d7984a7cde21c8b85299ee840000009064a1c6940428532c9d0aca2f69ac5f2c0d1560a8e6c3ac77fa690bd8c13e899ebfe48c0fe3520a626fcaf3381c63cdc986998daeb64067ff6e4478e7c90b3caa20d4bef5cb4e2c7fbd6b18bc0bec00fd28767f7bf2ffc1d7466843c95e566be33e52b37a3c18a6ca8c3fe455d9041f872ffeb7507bba9f1033bece6a1f589a58dd22aa10880af42fe0ef9c67dc89258600000090a2bed9d635965f61ffc8045296b2883e76ee133bbccf3c4898b8b6e43500382415aa6742ede69812bc88c975cba87a77fcad6607898a5daca1cc47379cadd8517123b046509df4362919984129431e602406abb08fb19233106edaac5409d5b546319b6c65b3ead6af01be9922bfec542c67ec09be9c1e840c5a1ebd5132053507a01c4a496f7bcbc3250c137c97699a000001bc00000090b45889aa86796b6d61130a20bdc6c72782fe02b610684d42b90fbff215823c4b81d957b2dacd1ee3502418f7d507aea83be17c6652abd78e33f74141902491e7c035d82ecb8cc81d8897db5f48f07b69133636bd10baae4641d7c437ac8b39d501bdec77214023203285607983eabf8217461f6d5f6749f9c9f10a438ece5c669e443d9ae59d005465d033e67d2dcf760000009070264c232291bd7162b16faf0738bb9eaf4e3d1e60ce0befcfb9092aa6c06fa65baf356b1d80e64159e7f5064cb321f2f4deccc6bd30586b293baff10b83a7553b7c0e6998c7c66bb87941235c68e4dd204654849acc59192194fda1729a3e20dda03feac5dd75617318a3447184ce2229dd9d52330f9fce7eed7cf791b40f4d39dba3bc5f7b36ccaac19bf740e29db40000009097a65c67e442f5559ae9508d7774ea20334a0aa5ca175c10bdcb15ee3956d6eca4bb245bf73ce3a1a88d56037aad4e1a41bae14b3383066161a71bf2e14429b745eaebe2f1e2bd8696c805ecb732e9d013f268b4fbde8a6ca3be1e4723e515db3ca7087d367ad962a180684432abc6e511fbb4c310b2d9426ac339f6a8a4caa03690e773dd0933955fa2a537047a7e7500000e00000001bc00000090b13a15088f64b14999a0dc577f7978c957eb47fa66f77c63358286fb44a5cb4e961137bf785d599cf1d0f2218613f1de1db8079a1bfc2d9b397c1ff60c7c506aa0715bbe25ae23d5cd4e5538fd7c019800576e1d911bc61b426c69503aad7d5600c07900e01296a596ab6ca155dde8600d148ec46d62dd08de7502ecc848212ad37904cc32c58ae17e3ddc891db6e631000000902781cbd2216aa3ce7e436ad5b5e9b50c55f27687addb172a0932bb684aa085c4294fb97e027c3adb9724e96c7dcff78bf7fa38f65fc64c5cfa4fcec4dfbf457b39d8091661396dc8163f9bbf6feeb9280369af108b68d7133654428747e6da79824a0d4dea29a46e7d913706240ffa48303594a5f0e5fc364d9d070ee345aa2329241956d7ea026bd07f02d40fa688fb0000009099147d5f0b469ce7c0b11806bfaed81a8ce77b451ac43913dcc83d624fdbbb156d3a4e4c95f87bcb7737a3eb2969d25d440e5c3c932e6718e5e22db22aa7b1d966a0746e37340a48434762566a0ef70426c1ea2518879b705228ede45192c1e2f4dfcfc01f0cb3e3195e27210d09ed050d3ef0ee816f039c9f31bfb8799e6545c6399c4884f2ac1a43939993d866f327000001bc00000090254073412b9df5e3bbfb50aaad0099c0f051fef855d0ac75a3e634652dbd2e96ad79afa186d5eaa78d640b3258e060424e61ccd25d61bdf53f94e903fa1bf66d7b6740f624091c92ae71373e77ba5b0116f4fee0ac31e7bcf4b3faf3c61976f56ae6994b78ba560253ccf86ac021eb7c224d26503a7228ca7ae2b05229b3e94c099cb5e24897d1c305d4f68b9ef942ba00000090b8eb02f954e3721481f13cf9342a679546df439b37746eaa2853f0f911ccc1075a8a680ed1017b76496d67635e518dc420f175f4c920cfe83915334d8c9ea648e461d296da50c268071cd7ce325459190bd6383fb00a44e45a3aa2e93a248bd4dc3d4069c6851aedc26eacc1cf587d260b2ff240919bd3abfa9d815db7c5df97c8986a2fc4057e414adcb56c37608bb2000000904249c216af1f403f55f77af38129ed2919294894e39a7041612ac83dbbe99dbf05cbc2cbf72a411520dc6d543aa224235bc00277a2f841cd4279977d02d21298dc78f322883bd7c470bb547360a6302e0a18bcf3247711e18dd5a5cd2c47164221f7d152a8e9f6a4692cd33b6280509317e3627ac86c6517559369098fc13a62d9d61f5df7c4d21abf604da1282aab1f000001bc000000903dca98d0c75a9001a33b59690d380bc427ec3bd29930ed82698a42985c2a85e501062bc9ce783a6867091f6f39f5dab107eedf30c19b5b6c9b5a1728836f3524a810235e3a771ebd29029a2a4f73d0ff1b2b6953b5c63c247b49022bfd7ecd2da12935b5a401eed0bb380d2cd889f76f1b57b90042aec76dbf5084859e8536c743d914594cef7e45e38108eaba06005100000090e955cd77fecae5bb1774b5f06bfc8cca23662fe631ecc753fd0da96ee2b21fe9952b270395a568a808d4d7b19c23031755b24ceda0419946ccde40499be75be05ac600373de129e4118ca8a87f90a11f1df47cfca23e1ea07b25bc6b5642d611d0e13d90ec7d5c714359499c22ba4cf40ba4f7c0113efcbe6c590685cdbc78eb5ad282248f19975067af752743622ea500000090fe98c24812bc2b5b7852f0a75a4d359b0e22ec6c8c9218bc0988387d5f737c5a60264ee2a3091c92ea62d90257b4ff233893d410cdf5788a3073c2b6fbc99ce575a9f03278f6acdc64535ab30ddf2dff20ada3e0c1b9c0d6fa0561806f136044bdb10523de647b85362817730de5c8ae1f454385718ef13d03f88f13dc7de00c162d4e640771e76135199e674c636ef2000001bc000000906d800b57b4166a66e91ca107e8dbd6f63fe2319c964a52560486bd71d4b5f0e4d60e0c97810f861da8a76ee13b89d06df44f08ac5d85ed2424809aa9571d7a0bbfcee4d667d95700a1764590bd8e99f706ad330986d69403308f200bbf0e1df25477a5d3f20d8a86fffac87c57f79e9128d6bf2a49637086e8e632170f4a0c6be92fd408188defc8c2b792c82b2372c9000000908a6453a4616bf43876ddd1fb2bd5c0e3f6a373fe043c8dd2bce297128cceb157c3c3d21f6b3b497a03ca1937e7917ed97913203441bb63354f7a02e8c854e36e5c664f22eb27cb8b8e4124fd3701ae0102f4e9f2f16efd361c8717486608c6c85062a719f88aada360e480165ea45e0b2d0e965cc772672fa585251f1ee26f72a0e196a4db3c50e162bcc3e7d335ba210000009095ec80ec8ee8aab84bb0de961361190fbab0749db5027feb576f3712796a8ea84f621c19071cf4e02edbccb11dc0e7c17bf44bd58aea2caec9222b85ce3a7221f0c907aab66678db76a0e77db28b54390a703a15cfa4cc984b456e093ab2b2dc251bdf262279a11f643f57dd4775a1b8130380b4b8fb31bf1f58d2c55a2af3f0362ecfc7bacfd73f563ab2a9764d1c92000001bc0000009062083d1bed006fcc8534bef775e82edef684e093ef4079d86ddb9fac177d96f19332e786eacc5861c93a9b9c7e5fbd0ded820bad8af842bb0cd04559ccfa969eaaa0c912472b16099f72bce5ff0f73cc0477d2e5ccfed9c59963dba44ebedc2fc488bac30ec309e707d6d192cff37ddd19733157400c8f665eb8492611548f36b319de0af6e85be1dd1b22a049a684b000000090aebb3196a735f40a146d88f066c5422cf8dedd97b320832fc0fdbefce8833b6b2cc5ed8b99f6c9e1c5a7856f4d9a3d79a89aa9482ec20ab34245cade7e9f3eea8903b75aa43ed581e658fd8a7c899fe4255927d33813280a9229ce0a7973911f6ad9bb89d32058eccc19ccad77e82ba71b9bc5467f5f63c554ca0c02342c4ef8fba063c2ce5985f591d49f03ad64c90c00000090dd8724b680810ca68d1e37e11370648210c00a2abf464c6182bf401079eedadc52d0dc1ebc4e18bba687abf157c4fc98b9d5c452dbcfe89b7fc445d635cf3504ce8619f6dad31fe14e723926bf7ee44d0f9947ca49571b0b94d488a1141a8baddb7722aea16b2360b7b22eff3588b4cc2f639aa313e4426c21ac3408884451c439a5e5c2558f081c31b36a0c7d3d9420000001bc00000090c409bc4582f053336bed8e127583f21165234d55394405412614dd96500cedb87ae4dd4f48e16c353e4903900723cd8ef0dbc62216b9224ebc31d776976f9a6f1d91a9158681f62787336bb76850cd6125b2172203ddeab33f16e85817ea0eaa4f77a25811f2b46ae9f2b6cfcdd7eb622d92f9980290f48b751654733f9f41aa23465f1aa9a7256ea65e88c357feb6ef00000090ac7d8d45eea47f898df4a49a59bbec697c0088b147d96220b40ea72c6e7b6f3832016c21b861cd0b88bea78950b182977780764302ae5522153f65df7c3e2ce587ba0fc15a5b3a6103ee137b164741ae276a98d8296c01a5e6c8cdfd8fcf0629d101c6d2a742bacd2e76c4e0a1f42e4a0d4109e489e176150f168269839fd7a280c5214e0faa9e8f28d0bf62ff5f99ef0000009023e5fd7426e0a323d38142d2063ab84a4c221287a11c0d2bb8260506cdbeca9c8636059a5225af148d06ac2991c7f2322460ca00a0b5b4785deb4320fbff62b3f0f9190a9b88960b2efaf7f57c92108f2f545e84777d2d7d1023507170b33de79948578efc6994862cb79c5f27a2c241096bbe6b021fe56ded9307152b8fb5651f0ed1c7ddc8c80164471181cace47b6000001bc00000090322aca0059feea7457363d20fbd9065a2a3aa9a4952f875d360d4c8567b50cad102f155ab9bf4e4164065c4c523539426811e2a7ca9262d95d7809a4a2bcf04ee97429051878fbd871394d45a6678cfe0c98d787e058a5bd96db10b9ddd184bc3d2e835e566183d2330df369b30435682fde57dbc04e2d5e690557b83811d75715ceeb6cd43191fd0360ac8a01cc9ed1000000901cc8e2b2f8dc8e87a49f7e79b543fe0f99bacd123445349f14ee9e95a029a83ef86a6d7f7b8355b3259c49699dc8bb107ae763f312b13b2cf6cac3a3cfd56cf9a7e94c761c922ef735a291005c0e5cd523691cf48fa8536610c5ba921317063957f17b428e243528bc51335dec1d95c400280677a2899e215d50128aa07af04272b77aaf4cb85220141e8beffa3a897f00000090c37d20051bd12f4b07bcb7c3e44a8a27d28142ea41ececefa508f8b9edbe1fb1289b513db9a99e37fa4fac7aa46fbc9c6b76a455f57be8dc82b6e1e116fb8bbc2794350282e914a123a998fd03d41ba201e0cfbe00809839f3f1f2b81854f1d816488d0664ed4a55f63195ef70d23b9710a1a658de1b30eaf6161f27898f283fbc3c569432cbabd60f9c8aa303d525e4000001bc000000903ec32b20d989e00230b71e62dd687bea51375a23459a2dd6d45f15ae25d0cae73835c3cbeb10b31e84870e1efc1f82a138cdd78bdde529ee2abfe1925c254dbe38b822a7e69df4d0aaf618dc26bd28741f380052d9305b15439082506e2edfff8b855fd2b3e6ae89a1007dff07b3529e1354fb7214ba3d73caefdd6fde1286171eb3c2bb9fff23b592522b016594a7b900000090c16aff2f67a62f1f58b3bc28a9f077ef125584f62f42cd75d1114f3a0e576cb2f577ca25b53e6b78de4264e5fbdf5a3e2e9a17067d132c19cf0bf3a93994eaff0da9bc0b5147c63641a5d66a5a8361d72f3ed82c428dcee4013e463a149418016d5ae60dea7eced9011f8a2e6b4ed9ed09a03bdd7ac6ec7b4f43321d40aa021d0c47b7b358132ba34c674b44386e6132000000905cc873176fc62c2d3b15ea58892450700b90c857e94567623ba869cf8d63cba576710431dbb0a066e394ae9c6a9961deac380d246d3a72a993509ec5348d215c982db53be5521377fc030597475c54ba0a4a88ab81aa18e46be3d8dc0af48bde7802c79b9155b24b29a6a5034763ea691ffc46628af9e17a9f5006b53a59f3f78fcb26a620d9bc98f59a502cba92d428000033a000000ce40000012800000090d7972b9041e6a65024f0ecb5196592dae75decbf737ab73a107efca775a2356af31fde6451d891c58ef3f6f9a2aa68b98d01f9c957dba8f79f18ea0dde0340967884bb956a047c4363d46f8f09f8c3c805d7a6424b9145d0b1f946acdfc7b8c4415ad1e752edc266508d2e10169cacbc184de116fa91d554d17350ff46c5b418a84e33c30baa92b4072b7d0655cea7ee000000902f0f82637487973f9dedb1389543fd2d1e940194c448b95f1b5d0dec8babf0e5dbb29cae5ae7b52046b15fcb7cb1a4bee247aa920bd57c50f4062d653302321c7a2638eeda0690762e37894c84d7171f1b56b83c3fa6dddc9d139b2f0c96cf28551a0fefd0764ef5e504c9bc15e324ff27901371654b453a0010092cb0975f19b5dc333c947d5815e8a8ee7f51cbdcd20000012800000090b7714b5e3bb4d0835d0ce497fe6ffc7f38d1b4edc9ecd262c0995336fe13ccdb5994fc9b01add494dbf301effa74adf87cfe3ac8e7293f99c506eae6e1e99e36790f88458be28f2201cd9230698e9f8d1d08abf31f9b4efc24400f94ca028bef3d97744b436558f7cffdef3c255af79a11f96f758f822ef14fb1be1c9e2834e8bde857486096a9ba47c8fc530171030a000000907b101d78df4b3ac474191e558e55f514c360dfdf39b8dce7753a0cab56bb7a1a7887951ad7106386e2301ccc6326a71f10d992a7ec2bb997e33b5c0e0e37ab4e95e309741b88a554005d952cb020ca8c163999324386855f1c09dd356d41289f8338c797cc888ccb0769e4a84df4f0f0020864614d88850a255c73431378b15637561037b0f4a43422ddbe819e2a1ce50000012800000090836cdebf8d314f22e29a3f2cba8b486e5c6749470e879eacc62e59127e3c6a51537a99cf7edefe58fe7a8364e37d8ec59ace32b3631e33a77674e1d6750f1883bb927458c81fdd417f5d374c015912f6095df5433ae9955ee66eb3366d2d83649e169d7ecaeaa5cf661f8a49d4e34d8122f3218f0081db75aa31b3a976879111f74a7c1d70379600f29eb8a990a193df00000090c59be92c97c63477e3b74dd7376d170a6a75456dc64ae0d2c586a967a1df729c2f479e49ac7c52c9a94421290fef26c9da378a53852fd1bb4da472f780ec589297e57e0910a8abe21da6b23572a63b690bc552dd90b04a6b7eb037ae45b6c26c943a2a795c753abe7e6d424ea2cdd33006c41c4816ddd08b19fd2d3ff5c8c290a350966e80fa9788f0103fa50ebdb00f0000012800000090e63bae11f451dadd8e7064b3d96229fc3bf4a38bd1907657372a57fd8f7bdb7134c2c7948b53e2b75f4adba17093ba499d6b96c2ef00fd213346fca695319761c4079705acbe73d17fc96d1462c00d06040ceaeeaa123b483e505caa9167cf9639220280fec69c6ecf71c580eb3f255205ce00793c0cdf3064dfd36aa454917be560333b973f4e82c37acdab35fc91eb000000903b58f24bd54bbfbafce32b4f47e08bad9c42d61243485d0974ad080eec9f548882dfbeee05b61fe156c1d429892aa665883ba66052ba83bd40a82322e12da4c8d58d204cf4ef5970ec37bc4adfd77aac2fc0e7ee8df6a13156458f3e9b19a65ffbee1bd5e005c79b93137f65c1b7de1e0f30bf290fafa871aa1315572d7433b7750437132b743548e3c8aba8ba33915200000128000000908823f2d5b823d4dbebe4d1b1e855ff89dfcdf0ce3d5b1321e6d2dde07554b743d0dff09defa4c4c76706a6b0f2189637632f4d964eabad1db85e61d768d164e461729fff54d6f00eec75bd1682ab23a329c15956e3993b77832d3bbb74009449db1a9d9d1d547c32368a15944f343a9b1977cfd96e98000e51c1cf8de9b3f418e54966c6df5508cf9ac4a5db45a9ed2a00000090f6ef2f00f9c5d53ee9a0435806b7ab4b767530578d36b5377d39b0d4565c25a56109e12face216419c30984aef99fc7631432f41246855f6fc198d883d7c1d5e18e848adc043665255eaf1398c28d6f80d87e0ca0b9defc3e2b2ebf53ed7372b4c0fe45b1eff1cca1dd86b5e3d92e0d115ce5980ed286509baec8d840c482f21c147e1dc9528d592947ae9e1731332120000012800000090ef878637cf1bd8c1e23cb8c89edf8ec3bc2a4133bf8ebb92f99960ae654d5c0993ee359236ebed564822e7b4ec61d7444c4f6da745eda429043b0d92544687a5c80593b69aa92d13e129fbee279b0f9726c139ac0110892fdd214f47864eaf3c24ce4d741f6af538a710eb5684bedc4625ccd40fb686730c177a4a8267a6041c0e94d20b807171f032cf2d48529c08ac0000009094258091babbdad304d4f63edf03baadeb0c292f3188b11515d1e82e579021a8a156934b85565ce60f6e0b6323096e342cd69276460c98bbbf42b225c6326adaec3efd239277c3c9eaebc4363ff7ee9b15f7c87efada7b993e7a0d08a07d5e68cf43b87123473d427a903112a3f2ff900eec4bc40e9c4fb0ef35239255f2caddf89f164e66846ebdc1c1cc6c87f244390000012800000090b26d18c9f26ddee4d06cb2daaedef6666bc33441db684127e85801e0166aabf0b801c10c6fb84848aae15a7cc43ba8c2c3d051b0ccb1a99f16db69039f709866c02713a34c35d29871fd575aca3d76be26695b6dff8f54b10b116512d9aee6bd373643bf1a04de4ea5da16e9fe146228224872cfd1e97770bb9553e940a4bbb9ff9452e483d28bdcbe6c9fe817fdc83200000090a2d411081497d0d6902c7ae49b6c60749b174bad2226b53367b24cf95029ecf25d5fa9509a879e5452116246e5cf4d7e155359f227809c99d9026d589b43a4f3b8048daf3d70149464b3cc8dc7207fb8088cb3ab29c15b20660e410d7e17c3b2e06286eeee635d4af8c92af47394cfc523e382caffaf415a2b621a0dec849131e0cbeb22af9173ecf91ad9a576cdaca40000012800000090a8ded72a7bfa0ca4b1815219007260025104191b49922b584b4c0c7cc39666cdccbc41cbc48778eac0271e4157a2a5bf48967615a6d11c8edeaed23aa7436cae1218de89e1f24fffb7e3acd1a7f0e01f15745091b131bdb87e9c461b7e760817d358b43425aa0e170d33f9b4c61093c406fd48b98d13752b0f6401b48ae62e1eb939a95950a8bfa83acf8da40c61fa36000000903ddd99c5b18aede101dc5472a9e78f64499a4361a2abe99516ad75c57be2efb400ffbbabcee57ff572984b44818b6fb96a2477a7993e8e9e9d2cd856bdf454fc3463863818739ee50c259987d2bdbcab241cd2d5b2241748af6031aa7c7bf0498f2f6619b4df764af0418da899ad6901010294de0fe8929b2977b6005264fc18984dc6847395bb7de0a73294172c7e84000001280000009095d9223e4f36444b5dbdc6aae6f2ee6fcabd1219556c50cd2215c069d4366e17ed5340d555c7f792d8d53cae7d04f9f0e12ae1c66ccd10b7262ec27783dfa916f031761e6769116f437b16651e1132c503c7dd6e9df3096fa3f5b5abbb35eef5b8e3129248e2f21a2ff2775f542ee8fe29f8ad52f759ff1a08edf7b2b654e335d2fe2079967d8cc5f48c65ce8f37b7ae000000908914614a796fc10e0003fb5b9f70665142d23ce2e801e94b3537575e6814e8a27732ec5338f6624fbe647fb7279f84fa8aac351587cd1acf18d26a59e8e734db1ea63afe71bbcb2ed88e2749f5c4b75a01106b6e161992e312c2fe4d52d7959ac61d24c4f8625701c27eb53f9a5cd87729dd59c0c2845be4a7906a233e159fb735cebb2eb98d59e1cfa8ae424f39cff60000012800000090505d61f910f160d515b89eefcc8ab23ee1ef8bbf991723b6053ebc8b2cf8ccc8e0c3330fdcb55387fe9adb297082dee46476f6603fd844e96d3bc4036b93e7660e60a5e349e0ae93cc218cb9a564bdb92b16fb4e176c10a5b2d5109d0c4c45885c2eaca181fbd638082d0f1b9ff9a9ad1081334e73611b33cb89ed52987c87a21f206350277defc1e4721f7d8ebb67bb000000902f56374c59ce5ee186c1d6d4545e211538719722a0ca0018da407e75545abeb2395745b367a48204246075fa3b35f43791a5f9062089289c4461fa66b3a00fbde695f4245d353f44838e02ba46ac95a52cf45f9ca07d210a6f45467b985b19ce79a5957467a47c52683cc445d1e86bb62b3918c43fcb97f99087af7f5c867f05ac3c0139bc25588483afbc73c98854e4000001280000009081aaf20f10a10aa6a15067544cf997c099715a9ebb2096776384ed383ab482144e83e0e53b55110556fafa0f929c986defe760d85353c052246593dd2bdb153473a77bac29543e97e2779b8e788cb24c1c788349b16471be4cf244e2b01c413bc5ab87190c12537975821ff96e374bc82e5720f74272b4e9bccee361709d3fe085606fe32ccc705b87fdccdc4d30cec20000009068c7182958dd234fb62f08d680b24b79f31a94176d004ea8b8d97e5ce39738ee771ae3ee66f78210f39d2991d2462edeb84a41bc398e3765a45cbe36360fbe2ef23b11d3dc8bec5fbab90f56130f8452182ffa662c915c338310ff988c4a574354db90b96aedeed59faac9456f4d1cd20a2f5445b2f9c4cb88e185a35e3aca2ffaccb15cd3389b1e7d86fb35ed72d0e900000ce40000012800000090bd99cd789544cbf06fa9aef4a6c2f9c856826f5aa8a9f4bc0486734478e1302840b0e6163130287c26216bcfae639a65dd3174ba4457dab3de6a95fe438635472f411b310d5ded28c129fc455a673c960df9eb65e9ac13856416d6f372660cc8567afb221e8be0cd24d530ba62efd36f17260f9777a7db0b47126f13662c0db4252526ab31c7ee7ba446f9c8f7d120a400000090f0142b9ac3e9b92a8f5f635a9065f2d408fc8a9697819aae8376447fd1a8e67029785512cb2b2f3f9ae6e4a3f1bc1022f3cb5295b0237960293ab95ec3b60a232ca011c2a424f9ebccc6161e10521143249086d6b6372bf08220a64d9abca3285c2f1ce671c7ba8adc05b35e4cd13887017f613f6e4aed1c42621ac35ab225d519e431cffcb0c105b4420b6e3f63b4740000012800000090733fb305379b3e48d96e58811fe35d2a54f93c5407599187aaa6085a9a40da2eb5d043f0886fdf8e411b69c425d2fbfd07f37a67fa0eaf5269d96b2610372657256d061246ab78a426889b33a057cea621ca3f6275ab858f29c1d911c351d8c6b6d05e0082b28a7ba3866cfb701bc4a300f9f98c27035c567b1179aec1a581e91311ee8648b5de47f6f11e29035d408b00000090a451720064a4b2d9a0cfa7938e5b2cafecc7ce976730a89ed97a7965e52ccb019ff73e9b1517038516ce47d91253544dc57e50adcae9c80cefc7b8e25ac29fe00fcc9e137a86228dc6440e08b9c7a8d90c1c6191442c3d8c1fc17d70889df5549778b3dffe072d18343431b891c4c259151a5c98d7851400f9c211df67020caea528976c60ec1b66312f16c74c0ab37c0000012800000090b3be93a860eb414fd837971d9b568b922d815888e93aa857609fdd9b98428e3b5da38c9cb72f1c81371fa8cdfb676dbb7d973203cf05ca055a1be94715219bacde32eeebcfd49b026d3739b01a45317a0e180f7282f72414c8fa098d9b4c956e9c3fcb30d90580da13414d351f7058ca0a27f223da1058433ef574b93d62caeb2a1a97b6d1499a220a12652244481249000000907d74409c9ec9b876ea50be10978f6671615f4d584d7add84da76038922540e1a095148f6894f5cd9b1bba0152e76d0ba98b48bfa56715681fc7cef96c2188ed223e2a70916ce251f6fc831d45980eb7b2b900a5466a41324c0a1af143c19ead147e1ebeb43627e00d27da2a352176635228864419723863e2a93f79a0dbe6355123b1678c3934f893cf4b7912a7b263d0000012800000090d4959e2dafd5625116a7744a8072c1288d816c3d54579d177e8c9514e3b435a7d7e879fa0e935718224cfc58c94801259f6747ab0fabe47953f6d3158fe147a673c2e1c3230b87c3ae0c6e6e2638c6790d93f72eb38a821716f04a47fc20bf80c3de59abc0f2318095c7a85c23c87c4524721962096b21a7872c9b5bf8816ae431a4e4540c7cdd8a16fc7ee2567e7e2d0000009057b177cfedb8f4a6feb40abc2b412d0efe33ebabe4bc08a8cc09e555f5e4a04c426c22de7111cde18f325468297beaeeee13f7202363eeaab3ed4983bffbc8029dd7ca3c1c904fb8947aa8dcd1658596019ef96fdc24087c5f9667b039ccb1c6cada3a85c614a3add5087a256a6cf50d111a14c96895bcfcb8c55211a4611f8484dd786779f5aad0dab8fe2976d516cd0000012800000090a2dd826c48060ac0e22a522eaffafb976a494c689e0cd1399a3aba9007950cad5c1ca370e31f0233a63fba99dafe6d21443c3452e6df339a44e1f524d7885bfd63f5c617669436b1b5c959e38a8189d1297d2c237967b8ecab647b5b441293d6b9799a2184b84473e798146898284741044862f0556484ff536b1c42117b6339ff266816f0dfa7f8b63971b7dd4db136000000900790ca1dbde04180d073aaadfad2cd0c601c6f8b42bfb664f7975b66ab15d7ee959801b935bac935e5c17d688274b417071037826de370c67b40a67d410f2078c58968ba6bdf62c1a0f393ad574764310fc36252126e0b5896d6cefceca081c4563674576eb0de86ec000f808175fa3b0e3a1094567e53b87267fa223c53ff237ad5e153fc49980fd7a6253dcdddfb900000012800000090ba5a16deb2ce9d5adb61920a220cf607ee018a1329dc56ddd03901b717140c448e14420fc10db27cd702fd151bb22e0f937591be51dd53d4288eedfe3224b76f05870c3c80af8da9b9d188ad1bdfedaa0c726efe321520b2b77f82554fca21ae4923d9205909034deb5bf81ca2867ec91374658e2e4b49693adb0d51a7dc9f27898b12779850bbcdaa14c176a165dfd6000000903cc3fc5805e022dfea82481c9843678a52ac5b66dcb24b20d758698ac9cd61001a2093d98cdaabd51981217a7ede5132a87c63724f526aa8e9946093907bfd6b196334d7ae1c3ae21a63c047af0f38db1e29c0949531c024a0c1ee3ac15b9522ebb5fc40b0626698db16091a41556633262233fa9655816c5b92f13792af4c9c33225ea830a4e6362329eed00d6ac7ac000001280000009076611444a839f306da8e08d957f8dc13897180f0c2b1146470a360d93f5fc87e86f9b6f08d25c997f4973c96baf1356d7cbb76ca4727f7a7ea68b0599edd772bc4079d569ab5936973c55037006186d115e70a7fabbfa90311e98b6ca8cdc72764682e3e75e7adef62d97913f8bbb6d104019f0ad53e0ba5c71c32415d8faf834d7165e48f60e1b66ed1a8cd05ce661500000090551dcfdf8d58c4945650ab24405f8a17543e6245420931c812283254a26e724171d6668c5e46ca9ae01d2e0dfaaa53935f09a2ee1de04a9d55fd72454bd784e9cad745f46dde2e2a569b0b59bf7cd4d22b094e8f08981732481936c6c2007b58a49061127cbcacf6d9db25a6171f54a31ad4a519447dd1ee5e1d09935cce382f20f80b184cb668ef5ee1c599cf5f2ef500000128000000908717fca0303573272c549ab3307d4a60c72016aae8a070583f072774c43461484061127cc2cde6a5e69eb3c112ddef8c2865a66fc1660759f077f1944941a2a68664ede8c3880b01a717daf59ac9b4ce1b526b22594f296369c2f26ef515a42fb43a65c50a596662b898cd21fc560edc2a89b48c554518c4d3e42e28eea5894c69eac73e8485cb492f1ea747aa01969300000090ba8972153fcbacf34e1250f4f509c96609c480198d011c5e8b9495f869d8586cb771d2382cc6e0418bd419931ac00c9c086313b42ec2bea0b306a0ec79679966174fd62d061fa70780fc882869d6e5d1024262b0a819fc8215f33cf7c863afd504755f4e4ccfca680ed661499f0e40b12a50cc6f4714ba0fe3f55df336014c9c2016169dc1fb007b3b1bd576ef68e8b500000128000000901ee304959251a4ed931ef5e6af29dab974d6044e4d63665ca8d2fa1dd14502aa5d04ffa320aa9083669137fc89c0cc90116676024456a77591e6f87f97fa42ffe13862498bcc48fa9380728a11f8fd80248e7f5cb7498bd56620a7b6516151ca573fd9f99579e4a01fbfed82b53e5f0f1d5a3ae83099491efec5c39c38d21f04bcb4315788bb1276a6e57f25f47ae69a00000090ddcb220f28af816f4badb7c580e303f32bc12ae2de8c026eeeb487b099c7a471b5a79dd90a791bbc63cb6ee8a3aae6aae002a518646c9d8b7d3531f2954b740432edea78d096dff77b5865bbfcac3211155f77cf42f63bd79221f2d679177e99ab8d8e67f0c6123dc262d9a0172a2c3b0be94dda54e5430730f0708a234092a532ac889def23c9abefc991f3487cd6290000012800000090caac515873da1559a79a431ff9f345f2be71afd77ffc081718a3d388d808ca280eb39c1b9d7bfd09af0a5030e53c14100803ac8e3180da2f20cffdfc7cb6603476ac20e7a0270f8139aee80b8676dca213cbcecd3387a8570b4053129f487031369852f4a011d237492ab41934049e652062ff788205e7a3506e52fc1967901478fcb1ffa9dc680afa19ca52cef0338100000090945371d5053dd75f5276d492e32cbafbdd4692acf51060dc4efa5a2f688714a5bb7be097d73a0fc60716321907e8b268a7d916f6af3d85a3e5d947f8be30f83c99bddfa272e70a17facc5f7c8342be7a15df8f14c1b9d6bebc65f01c88b3df245fcc1da3a280dcecf1786be1136fe69b119a17a81ca2bd7e0834ddfe08723c75a2be48cda725b8ca9ac56ddcad5c49d600000128000000905faeadcd083b60a48f92326b1c75d87c7fa7e7a1cd2e1da3566ca7d0462d7dd8928540247a353926ece4fea2926b1a87ef1cc1f6e314a03cc602c011ab33806b80798c6d96b6355d7934138714be4c9917028ee7464b5024093eaa712bf85a1d89f4a10282f6b1998a673df18315222425714375b9be9bd0b5d11182d9347246c025d990973f65f161380848bd3a643f00000090b96af02b157f6269cc335a7a7f5d78bb1eeb47c2c0b2435f21743db45fc810e7a455360a21d41eb4e900b7e4cb0bc486a1d5c0851d328b49efb66079a611ffe84905ae1e69dd0203b97cab95ae54882c0b9ad0ae3afe4c082e71832badc94feeeece528d520ceae8daa004bdd6adc4b22b9159c2bf5b7de636d5c830da3d33c852e0d85e9df702f829bddefa15c7772600000ce40000012800000090db099c90d2c5e8cbe4ba4a681c95512549dfde4aa2f158fe0c4d6472e2c9c1224ceb99f1a9f50fa1ee4fb12f135026738610b3271657333fc364f99fd8d8da6da573b8b084ce7b73b0306fe3a7640dc526744018adc70289eab0328690e3e7506aa3026ab0b1feb92b3745ae25220c0b2434c1c5a3ce964e47141b52805b4892785a4f3fcb58501a8d66619cbb6c613d00000090c0e1988a9aace6727ed1d8b071f0227cf439658d9666cde004ee54035764091390efde09eeaa4c236cf0970fd5340c559618d3cd954b464cd7fb43a8a5236cc32ae4f60e8673dacc7552ff3ea5cd0f0d0a73436f852495d35e64297f897d5cc1d6688630d5b367460fe906caca735b1c0970ac1b1840525b3a5c57557c13fff01c1b8ad5732c213795257a7d3824122e0000012800000090fc042f3b2d51b0519dc809094c1908d6b07e1f7af2697c644099a49992bb36685883af41bd4da84e4b10363326343ccadee4341d7254299febd12122cd5636055d1097fb0ec763fa9c932a9e15581ac524fbf469cd126665e5d144f0408c8017cc9b36518b5e29bf8f97e975d531aaa726a09e6721ea675be99dd1b3b4f405c5c949ac92f36d1548c1f18db8dee2901e000000904cf9ce2b3e88a261b150aed328d54d90c5abd5e35543153ea26690bd888aed04dd51f879d71119480a135c990b472f6decc7f1ee23ba2cf30b738bf2e30513a66577ed7c6222e88ae37e6314536caf3f29ebb1af6a6f7cc1431155933ad1a22747f67ba8081fbfbfe311171c0e3c920e149236fda77a865d78f8cdbc3494286ac0f213ef6878351959ef2793d3d02242000001280000009042aead45a8a45f1ba082c16129edfbf2cb1a10d7551fbc537c4245b38dcb5527d19cdaca051f6083abaefd2ccb0da5250b094f1c0774141bb54458ad227731b69d3de1539667c9c5a6e4115c088a9af21e2ce9b92fe781c13500ff9e154d9533ff687d32e24e87aa63fc3698dfe1a2661d723ab6d77329675a70b3275bf31a6390259a53c86afda3ff44b6d840c8ba4500000090b3f0ff874cd227de12987595dc55f3dbda016947f6f0839ca272eb09721cb0c7bb9e2865d96ac3e6831f44ad83749550dc7e4d66bbb5e243cd27090e3a32b4118ee9aa83bd16e038f4b0ca0bcf4a5b160f7758c0385d0d30a13d9ca25e5cce6abb623ab4a83dfabe882591c406ffe8de1be4c864aee1e564bdbe1f541f51b5342726afa808d0479dcd13438e8e617c0200000128000000900749e94378eda0e621570cbb8d693c595fdf32dc5ab0f47f3d36b04f84a8b5ac97deebb32d49241a87481716c5ea35362deec5395ae508fbcba3814b4474d29cab2d7a888593dc934639fc7d769e3413057022aedef5e4a3b2b8c73684883a48311334595d1655b149722d0810403a1e21bb172f0e4d5ffa1317054ab704d705360b45e9f09acbea2c05c7992fff6abe0000009030ead9eaa732a2c84e0011324e79a198eff08afa28a188451e672542f27d68bf3d40f103f1b8bf2dedb788487fc3243037a40385ed63c8896ad101d218272a99738772a7ae41c101287ebb65671bb57224b83c20c5f9390aaa1672241035585f1388dd7a40c8678da9f182949df0aef10de7fa831cbc8f3fb7d928b3b65410ad2e62050684f24f8c6028ef3cbc8a7a9c000001280000009011bf6948336ecf36007c6127a4ccfc1577386fb7e461c2665b274dee33d2fcd33d212726a9681630a0ce95ad56efdccde12f94bcf1cdc0214bf0014c178aab9e62d8863238e5cc592f9a206998bd2ec210ea5da547ba836485be97787746280b3bb4d491a8b79c688b16e796a5696a2d2a0bdd11ce9cb3f51efe25d49faf36395e97dbe269228b170b802abf8bf5889e00000090cc33931380bcc8338f1c360c8c8e6729d31bc8045bd2cb8c771d970c0e5544583e65fb75f4f514fa935eb52daba35a3bcbaaadc308879ff1d96aa428488b4f56949a464e999a99b87acde3f2174adc840f0670439935db4720bd4a1faad8edb6b0360d03410dac150d557fe93dd1f44f27731f238b16e322fb46a8dabaac187f81f1d02d7bf1756d6365ac3c3bd07d22000001280000009087a9761cd47cfda1fc94966e35401db93586c02ac589bad9eade42511f29f8fb58eb44fef23eea1c594900fdf2ac12b0efffb7a5029a4ddfd96e2b7d08face1e4e1c48590a45b9989d51ed876a31f7bb10d04f72044672dd0d816ad9f559b87f33ac1096fa33bc45917378d9a8b3da732fe8bc8085f59319e7b945db2d8521f5b7adfdbf85a1703a5e0935a28fcb205300000090dbba413678da43a72c58d4e9eec5b91fd61fbe59fcff2fa8f8ee35db50523f4d87886851c9860e13aca9f8dd525355fb7a1628152231e38bea5808fe29d7e74059d80305684bab637342fea8f784d5d42f0005777b239711b17273815f55b4f8526b91d773b4bcc95b59ac46fcbc1fd42fe685190fb6c0e6d11b9bfa391450a42ce4544fec92884df238591a91a41b150000012800000090bdc206cab4e4c7ee344ff5ad03f7b0b00bf9b6758ac23f9e5264cd94138a4119bcbdd6b1708d7e24df6e3e17200e33b80ef6efd647e75433ed756fd59ce6db016e9748a5d95d2c44f06a8252c3e2758727295876de8acec409c39e8762a488fd289c9efb2b6cfaa6826b4804268cebf708751132bf7b52f9aede6fd4655e68d435921622a242395127df602f94fced480000009064cc9185e22cb4a842efc1e6264878e4b79f5fa0ad004c3e37c54b5023092fc0d35d6ed7ad51fdff0381a1c1a571cee442c97fe71ecf32007f333cc85bd59c6e919f4226a6533de4630e9425ffc04ec50089573efa41ce34903c512bb324f7f2e48b6cff1e9dedbef1374a843973b5911bbbe08eb57dcd6d8737f8185f5c019968a259862aaa5ab978f69050a7d70426000001280000009029dc8aaede1b8ecff4355314a58c7b84baf8ac8fc2d3c47740e3a16b1d6e57557c96110309cc4e8be8ef3bac4d2367f2d141da47adc22d0d89c7a127b806dd189af99a2cd661a6b22ed61ccb4d0e71e228145e6880f1b48a74f2c79d9144db47f747a78f448da60697203314969cc86e1539613b5a094b6299001826fb70632e2cc33b7772c6e7ac854623c26d8f586b000000900e5d178caae3372c5bf1a9a0f16fea0df35a1df4913b5b56ebf80de5edfb2d1ba6747669a35db6668207545df26e2f07e5b3eb0affbace81b484376fb293b2a6671f24fb5fc9028e90ce43dbfedc2f5604c28a5eb111676f5c59fbc3cf04a26151d7780f328234f8cf8e0a192f473202041155089d8268d661c6b8dc66ad9fbb706725c849422b26106cf11fdada0d5300000128000000903116f3dfee7e7badf06a4d1f321ad9358b18a9fb617a3b058c74c46c57298ad2a62b429d6d3ffae7bf6741a9d23f3c576cd4d87062884e3d930997845c5e74ed2b861b504c267c4d3ba981c98f8a16110dcb958d3ea7df8d9e13138d2481e84002431a4a24ad106093c8f59892ae4dcd2a0f398d4fc9f69d41b21bfe0ab86362af9dd08e05fe5ac50a5b0db3a03a15cb00000090cc5c9e579a1fb07d9cb4589cd2b2f07bf06b131cef67e633c34e1b577474e92ee4854a40014e5cdf4fef4bda54809ef77caaac9115a4e9dc6fcd4d3d6cd6e92bef597985cba8820fa7c49a456844b183093ae2344ef9ea06ea020616f14697de4515fe5f3f3cec3065153c520704a3d003e73c06cf3a271f9704e38641191766e3fbe6db0413fd5d83cf3554bc8613e80000012800000090b2f6e2199f34e3b41a5d3d8f07a7b859efeb67c9406164002930b0d5318affe0a648e9c248a6768a2f1801cfc4207c3f1292d05cf3752fa3551fee521a961257dbbd14cb75665ffd1dd70a8d59ba26860cb8d735e4b7576c77b60f409ef93b44309bb5c270c8051249fe5eab9bedb0bb1f8d012f10e253f93ac7e4430cd6a840aa45d64b536b4693410a3419572d351100000090167972da7c55c78d4dee9f4c4d78fd03a25f62881815ebd7b214526cdc1d6a77bf1191274a2155b76996025cdc74c6124f699a318268bd85f1f56e3fb0ec4955451c738107da89db3366cab394ba5aed21aad34335ae7baa4154387ae4bad6094d42530ef20e229f8d933cd3779b42041204cc2d47dc9a61996158f14eca6b2f6230d4671ef43472194b773f6046205c00000128000000903eccd62e8fd49d20c0ef6a57690fdfc611561a6d5a5b66e132173a21399f58bced0ac0dccd3a5088c83ec3dfe5d33d4901c96436f55ecc34d694271c29cd8476350d5f5842117861e1d71d780bfe8a8e27843a435ab71ea8386a10e3c8b00ae4986027e7a59122a384442119b9242d712522d805570ed796fa6cdc398203067fad739b3af6fb925b46b06f95a6a7c23300000090909dc23637e200568d2a4e192e5260c4dab527a6b1e8469970d200d8294a9ca044218cf047e587be5ef2d39fe40e7237ffd7af3a97af9e738d8694117c10b0d6d98b6575d211e1aef38421fbc908b0982a3835a850e4d6a59cfe6b62df1ecec0a0b15706ef3542b662a1f2b7b3362cbc14f53fbd3e1888c3f8c5ebe303db97a31f35ded01d774750850ddf6cac92522500000ce400000128000000903d848b01a9ffb817c92330d709f3eb1e22e8f30de3f1e6ad74eeed08b21696651a77b140fbf5e8e1f92ab8dccd6f2f4a13d8040079086b7af280ae37b1a5aa7e9e5ba01e41db0d38b49e5c96114167af1ec5940859d16c6d6dc31b1e359811f71fd08b261c0d690cef968c648ff3325e0b223613f9ee024defa6d508df39d3d1e38c9f6ec9590211a416416ec30fff4e00000090ac151008a65b8824cc56517b399d00860704a48febda3ca9dd757033869c26e97027ca095c114034dfe4324e560cea2e070203ab43f06f1cfb0f13c39652048d3c26b50c7c54d47a365c9a54fb8a2dc10f1f14dcb84ab01a5334832bb35a918cd05c29ad83b3100aec9f09d07c6643fb1683c1a35f4768ff8737ab7f864cca290c64cf20601966b9a8298f557920c8570000012800000090f4a76a350740847667298b63ed0b450266d628a3cb0cf26c7d3c46048c70e21384b3d97981da2eb67f4d3c503be85750ce68a4ff13e2d40bd3264790e701403c1f185922bd9d21dcd6a48c6705ec9f252e0b7f332b3d36760a50b4d28bf339345214b9caea6ae8c8d2bdcce00df95fd9139beabe2fdb4f503a94683e81dfeaf0c80bc5a92a8d0eea6f6c71273b8adae800000090ba98abd6669cac70800bf4403eaf3250b7be4b5ab606833ac187921b55314c9c43f88f409d09ddca8d809997f7438da3af6d12c5c6fcdf305e614a9a048c6c626436d72d089c51e27a805c2ad19975421ac79c6ae2df188e65288bdb61648fb99299a357d4a4190c4dbe688b28c28b4b0fecd2670c2e056f40100c0696f330f8c8f0e41f0a2883fc788b715acf70f69600000128000000903e8e4e039b57c1417feb5d091fa44dd865b42b2b1caae8d139781b1b34b12efa53f9a54320d092f77c1447a8473b39673cf9d8803e38a69f520265b0e885c9add4857a0bdd80d30022d184166660924214c893300d9e4c20d4259480075199beb4d7e08d0c2c39fa0c6239f7cc53273e0f4b8fae92422e8faa0b1ef22befda604833f97144e2b4362787ea8aa67142a3000000903026da6c92a6211cb240d8e0c45b3a99039c8652e268ffd603a9482df3320cc09049279f17b14db73dcfd4f8144a169a11ddedcf38e3af6e57540e7142a7f4dc61d149ee226f1bbd89b6b3082d8f71271e47442837c2654521f34821ca0d33c6de8eb6c506b5260b24f7c6cc3ffa9c8c0ac282ca2f56d763c6f3aed29df225000ce43d2b3c3a4e605d118b3eddaa99a000000128000000900bcf8b2c29949de04a3f2e1668c6f16f44734ef4478dc9a80ef38d7eb8a5ec61bbfdb45a72e1a7a333967743dabc40ede92d961b567db9c80aaa2f9afa007357677969661b21581804fcc047c1a8c57a18f01af049c08f4932bf1daf62124c307a5db5d4757e4a13b76dc9490d2e93ff0dfa8f5a7bbc1acbdbdc0680eed4e5ef5acc82c2e65c6fafc5d83775a559dd8b00000090fecd9762eb9bac9876903e4a0b7f7c7dbcbb33ad63e337f714c86652bf1882dfe499febeb40571277a57675423d5b74a8e94a4e8c89cbc0842c5467a79521be6a623f43c0d43c777eb9b72e4e2203d8402b1d8efa43627dcc921ea925c04cbb950e1b8e09fa439592486e6d37c0b7ae81cdcd2d132b6cc05ccac976aab197c786ed439a60489745b1df26f00025d9dbf00000128000000907bac27e298f20125f847bbb234880d9b729be7f07a2429a0859de81e2d42c61aeb4d276fbc3e2e67c27f4c466094ce1cffd40dd6f378b2add9e2ec2ecc1553786afac5a300e57c998bab82f41f6418f406d0324d925eb154c6fbd371660f6a6899234963ff4c4d30767629fd320d44e0043feafb2146bbc2f6d96ae49b656af5d7d0c7593391c803d82b934006ab14f400000090a6d51ab9638e84b87c84af7642e7c7b46801943b9531aa8bfc0ed1f177759ee3eb5d656bda5d484898477cab13e48a835f64c398780de325111de2b4c95fd3a5ee849657954604755493a3cf090aed690c6cfa78f69a6022d85eaf5e1802e95698127dc94d06ff38f0cb11ce72783d6716ea464b36189315565d8015ad9a181e1747c44c85fa31a1cd344baf5901a3b1000001280000009001453e5dc7f5a13dd24fc77aa9536b54df6d3b9294255b3f1ce5e83a49a2428df2406fe0fa3cc94d25eea4964cd07af935a65603eee857cda8ec407c21f644008ae411852e9f84400cd94ddde00b27f3088dc318f1bbb8bf293b9830ea490dec38052898f618f70afc498c5c1cc71eab104ebf3383be1059e17eb11372f7dee0b207502e67269b63459a0419d1daca6100000090240d4642754c6215b1dfcc9abc7f230218426c5213554fa87d64f9c30b0f1e93c329b78d37c85b6a15668df2c9afc70491de2303fc8fa0c6b3b223fc171ef527006e2bfd5e50975ddebd84403fca60de25dba1def5bd16d591a65920f7221d7267b12c8df14794b6a50922e191aec55903aefce5a9697bda0a04b34126c4ac42a7ef386428342dd5b1298bb942b38db2000001280000009080e02fe5d9d47d29aaf23889e9068e2b511a717689e0b83c8d7df9d289ec7141b60aa62c141026185798570c1d49afe4221c83082e8a4163ad418265fb95c7a105d190f0f09612a2669a63ae21a4099225ceb3477c0f414e17641c5eed4576884d15bbc96cb6adf85f9467e810dd5a71081a105d1e1b873aab44693d05ea453708e1656ad684d9bc9daa5edabfebbee30000009021cdb77839f523671e748119c80595dd0a68fd38578e47b29c98c9e76b9a136d468846c2198605083272621d4ca5de885b95f9e575e0fdbf1baeaa94df5e65f0b0949af02431d6d5f2791b1054027c5a2fa3c212e974418ea53e124102e6e80f414871a682fb1d7b3a91e6ae2a95ab1e1aa4fad04ec275cfa8210ff6a9416efb8a7d7a931b0d978986df719e7b1f7b3d00000128000000907bcc671cb73235d239080e74b3274a8b1a47f0324f0844071d3fedcd002e77588d68c46edcff1c1cb5e52f8d56fcd1ec010c3890792ecb7886ab48054009c39ac939f546c667371e590fb6d1a127f3d930058d104a6ece56940964214d8f41fd52fcd8ea7e45a0211331a1cdea8eaa4f09d3b488404393da96db60a81ca8c921c69fc6b5d54edc108e60a1f71d6c5e4200000090593f956a3038ddb5e00896b203292a4c89695310c816a5923b3939fdc8f572769da69d2d1f19b868abe0d62f6a5eb2c777d17b109ece09b273e84ea9732fefe367f4c401fc3c639c0b1e5ca56b28447e1883d8ffb116cb4efee2a892ba97e22e910c27a4ad5310b0c3f20b4f17f0c2d61eb4eb65cf78b08136d3bbcf24b3ffd90c625db7bb98f28e48cc3eaa95b9467900000128000000907fbaa8f55f4dc56122b31d5c6093e5c4e8a830d9539ce9c16820f7c79e3079deb7c91a9db993845ab3c6e4d371ec6a517d28452a07c59c28f2df75d0ae38633c0a939f6eb9f8a75614dc344418046d001254b0f7218909f9dfbfe4ab4d99cb0bce338368c75731a74563ec8db9165ada2105660edf90d3024ebd634393ac14e23a931c428f41241a896f4eb7c3ab50b20000009037d639702bed4e5df4793d1d7675ad97569cd650f6646efadd2e169e4dbf01b0c2782cc24e3a0348f35e2d8407d7dbf003745033985cfd6695bc7248e0c6ef7841e013bbfee41ea9aae3898a726e6f452e5eb9ec274a286b2f15d524680851fc1db425408e11fd3e7e9290f55322a3dd12cd8e5282999d8b304c23556cea6966a8bc721a5305e85199adc54fd74a4d760000012800000090e94d9361934fa7500d74ead7b88459c35016ce569b7b2068c934252ce11aada5dca89faf31dbac8517aa3eacd3753d54977c90b3f967b43c281221e566a2c52aea0670d8a95dc8be69a6e0c28abd0496049d7b3e276297959106246013f1916a52c11f354e5ddbade225d91eabbb7202240cb5a2b4024486ab9e18314b7a5208f43fd76a4309b8a040b0adc4caeadef7000000902c745f473cb04b079c7387549f68890a15fe08c8dee8b705de61859f5875ec2f95dc80c6998b7d0070029157c21b456d44f9dafb7aa0d6fa289e8ab541e6c3b3424f462921e8d1e108b7095e363b3d0f0f0cb5b3498d230ba9da99dba94620424f41d0cd9993beebfcc001afdcbd16df149b1477fa854e56b98999840689ef93e9239fcf96f962a2bf7646233a6fd3590000012800000090053a5448e98c8dcd79a415507fc5f6a5bcab5aa87de6f769e5c21d866afc98a71f8649941641e82d0a025b682da453a970383419b1db66626fa50fd9e14ead08427f257d6b37a61d5c47213415d640422dab6d546e8ee3f752a7058d2e139e024943aeb23087a780605f922cc6fa67c32a31efd71ec38613bed39af71f0a9d8776dec79f6a7630bcee039976e2d6a46b000000909a9c7d8ad83f167947df5ca8e6aece9a26dd12232890b24c81e3bd6b7d2ddd849988cd2aa799906bd4d86c7ae67d529042d457628803ad62e02b649e4ca8b019d846577e99782d4c5fc0c56a07aa6ccd1b143f90d292989eebb28e3f2101c8d5f3495f6c15e11d4704a3426e9613a977264fcac5d2fb46a9d56f42d396ae5989aafb3d6884ba8127c4501caeb2e5e52e", - "calldataHash": "0x852c9f4a2573aba9083bf8e223ee42d5fdf7cde6dad2dc7b5583bc293267ad48", + "archive": "0x163219a8e21c0456593e46cd0e6324bf8b3033174ee2b0f89fa0a44960076cf5", + "body": "0x0000001012e5643e26da426570dd999e0e044e5f83d60f3cd813c55059bc0ea0f4a7c9d413b2d2cea949fa0876265cd8eee3a4dce1e243783562ea07e2de537f469f7bf627abb3d4560e786bafd52f77ac52dea36c50419f32386567bd969b0c38e1bd7405d339cecb99fa74bfd631917f965357f0341d8c4dfe6a8f4b621d8df54c82941d560ac24523012499eeca2594f20ce238b7d21b98ad5c638767d70ee05532c2183e6d64e69b005709dfc4771c7ca5981adc54f3e8bd1b00222461ae90e44eda2f1d4572fe0b0b23100a7ea6d4780b25e826e41ca9e71897e010bcb218887b3d036d44eb30a430b5cfc6660270eb5fb7f274689ac73dfa53ba9d0739fe38637f01f7130af8c5888d4c65ea68109a1d58fe8d7d1ae62098857b0a3a3dcd393ef80ed8bcba6eb5e3b4887a32c51c5853b97a5eb59c87c520f36423c6d7be06071821ca1719330de5e3c51a521778b49cbbc1d53f8ed42e0562bf21ed72e8cb9a410b0e82ef5f7276df41353faef675fb408aeb246b6e2f704cab99bf28d1427e7b0fec7b9929c6effdcd045d3fdcec1d1b73faed495444699fab936630d69b519f0bf4f1453db36439419dbfba703b849d1aa5774fe9a5325e5bf3e7cdda9d1f7f2a9c2a035c72fd4a3e383306aff03448f9accc08a2c665837560cec8675fe2512bfaef35a8fb7df08a81001a7fd4903849c0371dedd87f31295f46269c5205dd00000004380000000000000000000000000000000000000000000000000000000000000240000000000000000000000000000000000000000000000000000000000000024100000000000000000000000000000000000000000000000000000000000002420000000000000000000000000000000000000000000000000000000000000243000000000000000000000000000000000000000000000000000000000000024400000000000000000000000000000000000000000000000000000000000002450000000000000000000000000000000000000000000000000000000000000246000000000000000000000000000000000000000000000000000000000000024700000000000000000000000000000000000000000000000000000000000002480000000000000000000000000000000000000000000000000000000000000249000000000000000000000000000000000000000000000000000000000000024a000000000000000000000000000000000000000000000000000000000000024b000000000000000000000000000000000000000000000000000000000000024c000000000000000000000000000000000000000000000000000000000000024d000000000000000000000000000000000000000000000000000000000000024e000000000000000000000000000000000000000000000000000000000000024f0000000000000000000000000000000000000000000000000000000000000250000000000000000000000000000000000000000000000000000000000000025100000000000000000000000000000000000000000000000000000000000002520000000000000000000000000000000000000000000000000000000000000253000000000000000000000000000000000000000000000000000000000000025400000000000000000000000000000000000000000000000000000000000002550000000000000000000000000000000000000000000000000000000000000256000000000000000000000000000000000000000000000000000000000000025700000000000000000000000000000000000000000000000000000000000002580000000000000000000000000000000000000000000000000000000000000259000000000000000000000000000000000000000000000000000000000000025a000000000000000000000000000000000000000000000000000000000000025b000000000000000000000000000000000000000000000000000000000000025c000000000000000000000000000000000000000000000000000000000000025d000000000000000000000000000000000000000000000000000000000000025e000000000000000000000000000000000000000000000000000000000000025f0000000000000000000000000000000000000000000000000000000000000260000000000000000000000000000000000000000000000000000000000000026100000000000000000000000000000000000000000000000000000000000002620000000000000000000000000000000000000000000000000000000000000263000000000000000000000000000000000000000000000000000000000000026400000000000000000000000000000000000000000000000000000000000002650000000000000000000000000000000000000000000000000000000000000266000000000000000000000000000000000000000000000000000000000000026700000000000000000000000000000000000000000000000000000000000002680000000000000000000000000000000000000000000000000000000000000269000000000000000000000000000000000000000000000000000000000000026a000000000000000000000000000000000000000000000000000000000000026b000000000000000000000000000000000000000000000000000000000000026c000000000000000000000000000000000000000000000000000000000000026d000000000000000000000000000000000000000000000000000000000000026e000000000000000000000000000000000000000000000000000000000000026f00000000000000000000000000000000000000000000000000000000000002700000000000000000000000000000000000000000000000000000000000000271000000000000000000000000000000000000000000000000000000000000027200000000000000000000000000000000000000000000000000000000000002730000000000000000000000000000000000000000000000000000000000000274000000000000000000000000000000000000000000000000000000000000027500000000000000000000000000000000000000000000000000000000000002760000000000000000000000000000000000000000000000000000000000000277370000000000000000000000000000000000000000000000000000000000000340000000000000000000000000000000000000000000000000000000000000034100000000000000000000000000000000000000000000000000000000000003420000000000000000000000000000000000000000000000000000000000000343000000000000000000000000000000000000000000000000000000000000034400000000000000000000000000000000000000000000000000000000000003450000000000000000000000000000000000000000000000000000000000000346000000000000000000000000000000000000000000000000000000000000034700000000000000000000000000000000000000000000000000000000000003480000000000000000000000000000000000000000000000000000000000000349000000000000000000000000000000000000000000000000000000000000034a000000000000000000000000000000000000000000000000000000000000034b000000000000000000000000000000000000000000000000000000000000034c000000000000000000000000000000000000000000000000000000000000034d000000000000000000000000000000000000000000000000000000000000034e000000000000000000000000000000000000000000000000000000000000034f0000000000000000000000000000000000000000000000000000000000000350000000000000000000000000000000000000000000000000000000000000035100000000000000000000000000000000000000000000000000000000000003520000000000000000000000000000000000000000000000000000000000000353000000000000000000000000000000000000000000000000000000000000035400000000000000000000000000000000000000000000000000000000000003550000000000000000000000000000000000000000000000000000000000000356000000000000000000000000000000000000000000000000000000000000035700000000000000000000000000000000000000000000000000000000000003580000000000000000000000000000000000000000000000000000000000000359000000000000000000000000000000000000000000000000000000000000035a000000000000000000000000000000000000000000000000000000000000035b000000000000000000000000000000000000000000000000000000000000035c000000000000000000000000000000000000000000000000000000000000035d000000000000000000000000000000000000000000000000000000000000035e000000000000000000000000000000000000000000000000000000000000035f0000000000000000000000000000000000000000000000000000000000000360000000000000000000000000000000000000000000000000000000000000036100000000000000000000000000000000000000000000000000000000000003620000000000000000000000000000000000000000000000000000000000000363000000000000000000000000000000000000000000000000000000000000036400000000000000000000000000000000000000000000000000000000000003650000000000000000000000000000000000000000000000000000000000000366000000000000000000000000000000000000000000000000000000000000036700000000000000000000000000000000000000000000000000000000000003680000000000000000000000000000000000000000000000000000000000000369000000000000000000000000000000000000000000000000000000000000036a000000000000000000000000000000000000000000000000000000000000036b000000000000000000000000000000000000000000000000000000000000036c000000000000000000000000000000000000000000000000000000000000036d000000000000000000000000000000000000000000000000000000000000036e000000000000000000000000000000000000000000000000000000000000036f00000000000000000000000000000000000000000000000000000000000003700000000000000000000000000000000000000000000000000000000000000371000000000000000000000000000000000000000000000000000000000000037200000000000000000000000000000000000000000000000000000000000003730000000000000000000000000000000000000000000000000000000000000374000000000000000000000000000000000000000000000000000000000000037500000000000000000000000000000000000000000000000000000000000003760200000000000000000000000000000000000000000000000000000000000004400000000000000000000000000000000000000000000000000000000000000441100000000000000000000000000000000000000000000000000000000000000640000000000000000000000000000000000000000000000000000000000000064a0000000000000000000000000000000000000000000000000000000000000641000000000000000000000000000000000000000000000000000000000000064b0000000000000000000000000000000000000000000000000000000000000642000000000000000000000000000000000000000000000000000000000000064c0000000000000000000000000000000000000000000000000000000000000643000000000000000000000000000000000000000000000000000000000000064d0000000000000000000000000000000000000000000000000000000000000644000000000000000000000000000000000000000000000000000000000000064e0000000000000000000000000000000000000000000000000000000000000645000000000000000000000000000000000000000000000000000000000000064f00000000000000000000000000000000000000000000000000000000000006460000000000000000000000000000000000000000000000000000000000000650000000000000000000000000000000000000000000000000000000000000064700000000000000000000000000000000000000000000000000000000000006510000000000000000000000000000000000000000000000000000000000000648000000000000000000000000000000000000000000000000000000000000065200000000000000000000000000000000000000000000000000000000000006490000000000000000000000000000000000000000000000000000000000000653000000000000000000000000000000000000000000000000000000000000064a0000000000000000000000000000000000000000000000000000000000000654000000000000000000000000000000000000000000000000000000000000064b0000000000000000000000000000000000000000000000000000000000000655000000000000000000000000000000000000000000000000000000000000064c0000000000000000000000000000000000000000000000000000000000000656000000000000000000000000000000000000000000000000000000000000064d0000000000000000000000000000000000000000000000000000000000000657000000000000000000000000000000000000000000000000000000000000064e0000000000000000000000000000000000000000000000000000000000000658000000000000000000000000000000000000000000000000000000000000064f0000000000000000000000000000000000000000000000000000000000000659010f3ce73a84170550a89b6327549f153857338cb67690d2d45e2208483cfd1b6f0000000000000000000000000000000000000000000000000000000000001140000000000000000000000000000000000000114100000e00000001bc0000009096fa7efd3139a65dc46337cba3ee2b254f5049de40a32fe2e7734e578f8989a4c9db6ba6e3fb30bc5c7e45d203b559dde72a10881a08d49236c6ad2e0edf5f424e39899cbf0ba5fadda39a566ded896815bf396064b4d9eb8b8b7c07e3d8380b429719e28777566c73ce1cae730a79cc241005288faf9def33488c51165e1fdcb2dfa7cc591c6673cfd0af334c9236ec0000009064b80ce1c0fd2428ce484d6403ed835e70ad5540cf787be4f387b0ee0170f7042ce2f07bb7ccb5ce06fc453941419894c4593b62c58459bed0960499b8e82475ae708a5ea78206d4b5a11e64fa142af310252429cc56c85240923476eefe2cf0917f032a12e0c5d8280222ae26ec3f9119ec565bd1f544dec443be751da89f31e157ff025879def139660a22806ecc37000000902a02e95d41ef3b41e66c4e2808bd0d8e7bb5273f71133aad2e4a6db33600b1346f0588baa373bd4a9891b2ba9d03fe61552425773f8556617ed9e53d9c7e2225119b15427f979440bc2823254fe0c8182eb9a59fcc94242812deb3add2baeef6385f983cf2cabda01e6f58f74d9fe4140f2bb0f87570aa8317720ee1fa575a3d0166b6fc8abe82a988dff09468313978000001bc00000090dfa25fecba864ddab7b3beaecbf7d37bce05c67f8a1788d5e6c7cbc80892bc7275ddb2cf7981265eb9d8a4a9628fd9551b51f3213c04ccc6f18fc5326b75209ecbe5f35d50ff9e93179d5602a8c3e9992364f0982cfa7797fd028b55c5baa9f46b8b52b36fe967874cb1415e161df82812ec5c6ee569fcc4c3967e45f59e325177d42b88de93fa139da1cf891598c47f00000090b260def4382e79f464e4c857dacf59de2eb7ea3eb4ef9f26ddfea9d1289e8735c34d5c3ed3146ca4490112db51a1948573a787af9240570ce5af262c37c119b2795c1159050ae842e789a1a756a61e0c03dc3ae2ab5956474249ea6cdff8e8106f56473f285faf9c591995ca8408707e232fca0836fbf39acdb631be02bd5e58d8c86bde2e5b8ab73a6180cf6b8ac85400000090d72dda0cba2e27b3bfdb65ab5503f49ea57f29ad6fcdb023f39e4e8618fc431a640934546e9ed3f644e3bd9936ebba033f46e757ef1eb9fa6fd52806c2db3ae7243516e4eb8e1a6e6f9ffd92baf0b86f1852eb2e0cfd1c2c3efc5bb24bbcf48542c34cf1e6dd40828f07b883f41acec900f38d1f3a9cd99a85aeae2ab92afa8b38883e931b1afe7327f2efcf1ed5faf7000001bc00000090498f6e20e1d424537002af2a52c58f5ee43e31a1b5a9d061ab6c320cdb71515dc3459985d03a618113a180d2619c28d316f5406a2920f7b40e9d885bd8fd3fa1a8ed1fce2e6a81f1b8b81b03139ce5920508fcdd9d52efc345cdd418882fda21438d84dca3b25aca87528fbad218fe3100f095f0e4804a30d3dfb63257d77090681e4c85077a7671e67eeae21b6cd4cc00000090e5ec103e3deece477e2c9a5c820f60d9149a5a4e6bd22184581148fed035e2d165dbe81f0ca4eb3c0830362ba749c9f24ee0a970894031f761d4425ff987d11e7a54764ceaa59d9168a6b578ca2c39c72745df3e62f09f96f713983b500cc0513307fea8df9f993b2e08840d542630a8292a365037c368689249fcf048f32602d4caa09b727245c7a610ecf82eca96c50000009038b60e62c0f6d4b6dec6b922cf1118ac9999f74059527c0adda2acfff59662237a72cd9dfdfebca03771a691f825ad232b3d3e22d5e66a7ec8d632e54ab42cc34aacfadccc2ad93625172b9c9ed09fef092b82faf12bb6974e9c046b402d7534dd817aa6a31d3211e5e503d4e410b3ec304edbae402a07c1d5f6c4283dbd44be366fd325a62dfbfe0b64e5913b42d083000001bc00000090c8af3730d8693a086363e38cdc1039aef885bc28e591292267c8713ca2eec226869807ae90d58fbdd39fe4f6d992eada3c7cfdafec390364d5cf5b4467980b43ccb5af2afdc1904686ce5844d5310a92272769c0cd69849835e951fd395c1963efc2b9a121a35b264bf7363f73b744a413697068b5663a6e8b0e17dbdd2fd1b3ed8f684a2fb53e3dedc94ebf8e25f2bf000000901ede5f651889e6095de69b27340e16f21a2124a87de2a853e0050ba54497afc0d52ec2c24a26738899236206488645a9e6590b4d4b64701f40370014eea0c1bb89241aee413f10e543bac553e9c0b6e6256f6153173306d9742ba2c56e13cab1383b3c416056446c40de1d1d881ef19a14b8f3ff1778beb08f52a280d500fff0e4f900d2e2d8cbb969f71fb6e0a26a5f000000908adf6fbe74da273aeec750827cbd980f8ffe237e00555f8aa7d14d921af35287d07ea7125f9ed0195812b8a9299623516b88adefee532f2c589b8ab66825a4fd62ba3a7306dd30ba54921563fdd2a67d2110ea112c0f317f83db889deb80714a740198aeae3dbf0abb796b65ebda39a707e8af6f2578fc7989a95d8ec317d7e75daff2d5c372a3839f74b46bd6f3a1da000001bc000000902afc480d26f2aa2cb15460fe1ebaca4caf6544b046871cdd19482b89f09c60647e44d136cdc04cd1acef9d3d6e669331fe871303541e78e1f00f18aa2f65da7098c533423d317b1f347441d7a5207fd42086bf5e4e0a789766d8cd0b69808a7fa568dedd05e23f9b57a12b3b94e3e5ca0de6fedcb48056e9db2c257fa7ae74698722e379c8e5a62a4965e6b3c540b94c0000009075b287ec1c23d2fe510e1ce6255ee44971da28bace3563e1485f170edf376d18dcfcd35f26826c850bb06fd181ec65c165ebcbe5655737ed3bd7a8a018ca4af0be900284e501684f7e8bfe7932ea9029187a5fb695e9a79d98aea94936532dcd9559708c38a8419b3205b638aa8a1c860d8bf4a1b465a97bf05144e31a9c95eeddf828afe83513b561609c80bb0cbf9a00000090a62cba68db7389e0b687609b35e3d4676d54448dcd67c2a2dac10604a5efabc2dc14704d5dca14cb1b417164227016536a2c6c689d29303d17fe1f56b916d0817eebde35ffd8035a02577b8e0584fbce05ade239743bc8bbad03a5f010385a5e814bf3b3c274fa4421967028ec206750229efaf39c4dcba74e31cd7bcde55e34620a0590f0ee76c9fe5a9dd22cb54ef7000001bc00000090e6f1312172b05ce47e88d7d834701bc3d4cc78af7e04bea96cc6c9e41f6a08ccf98427c08233371e144e5cc968594643f8bfd3f678f3c71f1d57abb09b2f0b734cd08244de7c8dbc2a7bced185c9afdd241c9e5d3e4176c65fd98a83f73e0c3f89b558233f272350a264fcc66789f687100b62ab6ceea2a2371586649d158622b9e85aea5806d71be05b711674a62912000000903d754a3bd8b57dc516c094a8a2d44e232d55a31b9678fd85b09d675ee7f92a880f65f4a307df4a9184abb7b22b48546881fbf0806d691a4279a2ad6283f440d18f06fed2fe9e17af6b9d0c61d4644d5715b85542c08ebfc9a2df4e36c3b674a9efe11c1cd104ac85329b80983a642e121afa288ed6a479cc7d9f7825b40ba4ec1d9898ca9e62ebd3c850897e8942e3b200000090cfc5f12e596b21d3ff07f302b375224b6d6b416f444615d230d17976e25301fb8478b7c4ea02364e1436b0b1892847bb498c5d3f1cb3e8b4e829f8e915973f5365e6d41d33d75ac9fd2921aa5edc65590cae50c5a18b7c7644b97511caafda84060136abbc412f47d2e47224feeb44a52e88356a4b4600052f27d17080133fe7848878d59c582bf7c79170c9fd842ade000001bc000000904efe91a3d3a0458fab6af09cef93fa18a3d199cbae209355f2adb4fcbf107660fff199acc78edb8be22fb494d9ada4d52332849cc57d93bbd98a106e9899ee54b7a147c4dafbaa3ebd129db7575509181541bfd8822827703134fa0d87a8cd13ed121148f31a2e6e1e2b3c5e0a40be97293e63f86768be1da3871b59a4022733ffcaeda98cafacc112dac0e00573c1ee00000090eb2292610629a285d12ba11bef56cf62e15a964b225716368491821bd5a89a1e7901cb9de764be51e99a8d13e026c67e076a3f29ba0c29212326c0b6215a963df131466b4bf2c576c4398045cce279d82a7809d6b78706c99f3070432b7fec2386664a4a08e598cc684e41fe5eb17d041f90ccf7d45eeb39fbd0c0e66852a09083dc53ed10ce7befca820b64df86fda2000000906baa5b4e3e178201837aebc9aaf1321f65581c9d7942e487b2906acf0af49def2b4fe1d7280abaf76a3b6db4703bbec231d4073a828834de224f0085cda9ede18a384d3a998c1242fe4520480c3a7888120b1c0380ff4cfd3ffe530b5eb6d61d51a5f1816be2a449211d5424611105231d5dc3a25e16199003f61bdbf2ab5523db35a64c43c8bb196a122a5e674cb1c9000001bc00000090460d1753e012b7921b2fdaee00c0f3a505130687936bffb5e74420ae6487eeff468bf28b86abe5a04fca3a5ea62b59a0041c814066c49b331d8bbc332b9826fd8d0fc6b5198f3d29ac6cd8cb25f6030825054929cc1e022dfe645ec19a4d92acac8d567161ee3fe3c3370913f942df1d17ff713771785f744c542198021cd33447b04e0f36739c0455e74de0da563bdb00000090fedd109104c315c6d29fe3759b7f02bb5cde3f77a77109da51a7327ab4c7933d303667da11073600f4024739193be39fc28fef352e33e5a63996116472ca28922206834cee8749ba78259cae56fc79991b67a6ec2195dd64d7932d9d4147f9dc823503e6fa9fc790c73dc25ee22be26e085b9b4166d6cd6a53de6fd3209318708761ca789b2ed18dff433c15e1c394620000009051d82f51a94dfeef2d02436d755915d74f5942c51472fd8e0f83dfd0510e810fa878502f4ebc48c3bd8917f3a756418536ca06e17eb89819ef867cbd1f3757593c98ae8f87f2c69db6aabed9b54b400d14daf95526c8f9504689934e7c0c70a826966e22b2ddcbeafea5814605c7662425c5c868d828880796aa1c8dcccbb423de3b2f3358f49c87f4c083c2d64681bf00000ce40000012800000090da5b2c101ca4cb8ba69fd84b356bcff1e46cffba65e22011602a575cbd6dbca26308d0d15d2bf1d81d8ffc702fe704ce1ed1437027735beaab6285a9b1a18f7e41fc649a64c9f7fd83b0c4c91ee32d7b210f1908bea6c3ee007cc21fb5ad88b8befa732864603766eb0b15b476da47301499ed05a6c34d6f47f08fe3e5e8687f10fd67323bc95d09ac5fa8749698eb0c00000090123d2174b5e18b6911c9d145827c782490a8e2254c53789025669b34c9f5d25a4cc696d0ba64432ccfed7538133ee85e1cd1747cbb7666d9f408034680debb038b2b7c19aef7660c6708c1929b54c40b1f0b243dd3f8c21a2546a38fd1f571373e1ab23dd0f71914b98ee2e0b12a3ac305cffa258ec43371183e499158a99fe333e0f30f857269a9fd7d77d2813bce96000001280000009081d481d7baf8b404fc3d67539642a8007a1704e612f2933f583cd26bcbf2f59acab7f76dae6d754774deca4237812153deffa3aef0b77b1cc84cb184659fffcc0b7396965071725b9ad218b63d8e223212624e4884b5eadb895e0441a3559296bff92a7f1eff39f69824900b5bd4bdac22df1bf4aaecd21afcf904850bb31fb642a6369ab3e4ce98d6b69a538b0673c800000090876ff79939816f4eeb311629a5ae8b30b3ecefbfd3eb968581c5ca29e3f70b25c6e3d1a91d3b45a953b7ac703af571d0e958f62de2fa9aebff87fbfaa5173ba73d7d3154bc32fb0624b20d28da3f4ad92aca34913ef0dcc9caa8bb616f05eab86c9c1dfe20f4783f79bd046506ee07b02ed3a5b2ee6fbe09b5860e4d2909aa71a8f23f0ac53d4760da6b3f8cba4dc7860000012800000090324c0ed4dfa76e0fcfabc3e31582b8cc0f0b3b7823684f23118259a9ad6ee6f7ac63999d6ee41f9d0a65c2ef89bfabe5d7389e8249517e0842b14c1c2c2ca672ca877137e7efcf1e8c7476c2c1bca8b60f24e5dfd863e201ba9dca32ec663279bcafd1b809e52454ae8833c1aecc2c46289a794b3ca3c75cff97d1d75ec0232a446236e7267a433ccf03ec32629d02c5000000905de98972d94f17b8a498c8c1a246ca6a8f113bf03a3379d38e1bc30a769b6d9b13f110d7ce3520c9d836bee93d791eda6489e19d3a68aa117ec821fda2cd8049dbb39b52f69c6a260c4fa060b1b1981a2891b91a384e110b4ff61a9eb0ed84e7c0d34c0e4465d2f7e56cabeee73b9ffd212671cc4d0afacb36c2cc2f733e46cc67d3b62d8f003583fbe2c871a5715bcb00000128000000900de4aa9f7a5dcbfb020c42f6b18e12be0cba65c1bd7a2fd8be9d2bb31c67431f0bfb0fd966c9fb02ebecf049b096b47b19c18664ec73ee6efb0d004cab829b84580862c2f0abfbfe5ada51edec4299161ed4d9c917557858eac81fc7e30bcd9c1f4ad28c5175669e537559827443235903cf93bf018e616d0e476f76dc8bbc045c63ba7ee2386ad368dac6855289e6a200000090b4083703337f913ada06fa11fa0ebd0d84738508e035e41e5635a608676c6b07ea5f5d2723541d7b6786c3bc87d0eb656364ac8efd7ff233aa1c02c0520330a463159dd6cb1599487d673edbbc8b331c059b0eab1b4de806854ca4b70b8b4a4670250edfda67e2128b96c041d7c1b5cc247f0bf66f5cb648013df2c50635fae06f763eaffa6e75203760704b3be24a1a00000128000000908337762140ccb4388cefe34b77ea2603f05532921697ff86557b307018f4f92b9d20164909ce71d952aabbe2308ece7d9969629e6b12f5df0aafe16709d3a4befa4cbf5d74eca8504712978262543c3d2b85af02887fac17178242de4bac1dee1df16db49f69590d2df8b7e00a1700a32ed1e709d1fcfffff94e45b8219dbbd9aee3f24e75c52e00dba2f57bb3ae836300000090d66c2751c7ec388b67de8ceb554246982d89fce51eb540d351b8ec717f658493ecb3c610b625605283a273b1e9bb69042668c01d7b9db1f0eb2de01dd01411ba996611fef73645463d2bcbd503700c5b0a9c11c1076cd4ea7c8f3e8c1459975ded781c1581430924111fd69cc251a5b8061627842807ad568bc5063958415c39113e86f0ca4ef9508f5d76ad0b358cb20000012800000090f5c54a597f1b94ea71fc8a91b8eb40046bb075c4da97aedffbe8380a18451782c098d2f5d3cfd59dc0621c747be1f02bb3cb2c3e418679e9ba79e7d4950495e1c3681bd3a77efacf3f4a0ca2ec78df4a1e7220f936fe0b663f0391b773cbce730788906a70d6038f1d15a269182beec403311561ee812b1cc4f8138923471f197b84e43f157b430da342edea1c7c862000000090d6e49ffd84e231f6022f17af03100ec26b57a8602c5a6d962f6eccb064e4f1323c69c35fd6a8bce759fcde221f385b9d757bfb3b49bcabb01338d60c0876146a50f38555657b0df71ea4f2b788a37e002a791ea16c5cb2548646065794344b9f3030823faf5bdaf06b3ec20151b802cf0d3262400f015c0e531f92fd0997f3e8e6227f8f8c39f62fda89bd476ff431a30000012800000090fd0728ef6a2d350beca7b2598894eae83e60d6ef08f7ab8bc09f987ed9ad45ea7d341ad18aa9d0b9e4eac388f4ff6d64236d70c87d6f8538ef6159ef57f0aa7ed20a69442cd591a0da86bd47c281445711bab8b62ab2b538e4c9550d0cd62df79dd8c46a7cceb918453cc7061245a0a42543f0839a96c59ce3641b47de015671243fd48be1161ced8e36d7cce278be7f000000903139d8ba4a2e1d4d648a38f2f1f3a2ab7a3ea69b70f5be1e10d6a416eb84b9058da3feac4ee2773fce2d26f463d3b44ad1eff4bdb22aefcd2db02c04e450e17dd19fd356da1b0a6878aa38268690a9a317dda52d54bc97cd4a9657c5ee85d7d4cfad746cf9071d6357a41bc1dcd76bb01d2b3dd41a40dd2929848f53dbe99f36f827be86ae791422bb458f510f32d58500000128000000900fb61eed1077998b9dd1f4de092884349b2e8399090c146a05c7a3be0b89f1392c1c91021b93d41fb75449dc02b17320afdde602aaddd217b98ecb47b6248ea745e9c09bc9b4034d0ad134bb5388fc2b2bb73c9c92ff980718f0e416766cd69b58da72c41e3d522b02ba3d188f540f7d15c7122ca8a90bd4c6fe1bf30411194c2199d0980ec09f4c9edd9d33be78b8520000009071021c3ea913d3de936eb8edbd65a0b13ce43e6d342f1dd9f6b0f334e18100a40a0f2fd5bedc6211805baff2cd8bc9b61fd2dbd751e9d6428de2c8ac29cb38253a8774397d09664a45be486e72a4c8e608e3b0e6752dcad58fd4ebf5ed4c83ec5965ec6cf0d84ef625eadb59c82ceaf730156cf0372c8b4637e916b0b4efcb57ab46824ef3e58b0fe3ed42d8f5d04c9100000128000000909a85c15bccc0f23925ec1556cf98a1de5d8105af099b304714524b5b9106014df6edc0c56af4c2c086778dc8634cd97582c95032fac7cecbfb1905443486d2a9f033f1cc013fd1f847ac3bc40fd4aa41201d40f583faffdd145d3e958e8d5f26b8af187c1e39169c0589870a81bfba7b2f7ea57fc7d81c49ec86d6b515178b1efac408a1493e209066dc8c125461d6fe00000090a6722a9e18022c56f35200049e3424571f6d7564376c76414c7cfeb92f69fa1f8154c4d26c2c54e7b7bc67e7ce6fc43a3e20dd07477c065dbac5ebab5e845ca1e1bd0d404d5d749697556169cd0a0a7525d708e2dded5c2a94af9dedbe646b408b349b3cf1364685ed85ad650ea551ad1e07450fed081ebbd7fec3a50a57f605fe5733f5f9e173761fa0a166d24a1dd00000012800000090a1f9fbd19c889a0277210b3914d4453cdce3c3f2aa3582af41fb0dae077b6c8cf82896a134e31e98ab613bb327bf8c51712cd3ff95d53b2450c0a5f3804f6700c54f06be60f42b25ebaef127e723b48f1f21efcca9e8da300bd4c1b2845ee44b6cbed3ef1b20f6a07f369943b6cabfa12f4b8944681371baddc5bac16fcc6f2b63edffa486f63d9ab0b529f96ec8ff3b000000903720e5c67c63c963ab75b9314545188921052b57553295908a2df6c368c22b0e9f000bcffda92e41c752948cdc503f612ee3b53ae60007976afefde1b3d03e54683b2f5a418901b4227a7c9fd8e86b6b21b13ba90c8ff9a58ba659809cc8f62fce37b34c2ffccd7fbc58f766f50b0f4025a067b90d300ea1a9f5b830375e0bc2f1220f983bb641a9d76f9af10dbfdd030000012800000090494f07f4cb28cc09be6da94b3bcb044d170ef3708e1ea068227a36e1d770c9822c0087c3ec3f3e690b6248ab63f73d005c97e2b761ce14e9add06c78585a0647cc55cee5f0ed6eb444ac4652468b24d0174d4639b156f43ed7f2f4be5ed0d6bcaf5d9d0ddbed6f177ab448017dbc1342025f847238b15bfc96b55d821cf103d6b6372856af12eada9d237a66f302542b00000090941feea2e49dd3ee44948eb10641f43c6c42f954feb3e6e627a2d6285a122263f96593f07485553e2be4d9893ad3d84711e0fad3b7ade09ae4a9e945d07958c5f74e492adb120f48d94e87778e6f014110c24ad927d9ce23bb1f5b5000947bca6379c94d9db49189697a3a81f18173550d3830e65a577feabb3a654e6d10276d5d0f6003fb0eb99189d1939f9c6fd15b380000000000000000000000000000000000000000000000000000000000000280000000000000000000000000000000000000000000000000000000000000028100000000000000000000000000000000000000000000000000000000000002820000000000000000000000000000000000000000000000000000000000000283000000000000000000000000000000000000000000000000000000000000028400000000000000000000000000000000000000000000000000000000000002850000000000000000000000000000000000000000000000000000000000000286000000000000000000000000000000000000000000000000000000000000028700000000000000000000000000000000000000000000000000000000000002880000000000000000000000000000000000000000000000000000000000000289000000000000000000000000000000000000000000000000000000000000028a000000000000000000000000000000000000000000000000000000000000028b000000000000000000000000000000000000000000000000000000000000028c000000000000000000000000000000000000000000000000000000000000028d000000000000000000000000000000000000000000000000000000000000028e000000000000000000000000000000000000000000000000000000000000028f0000000000000000000000000000000000000000000000000000000000000290000000000000000000000000000000000000000000000000000000000000029100000000000000000000000000000000000000000000000000000000000002920000000000000000000000000000000000000000000000000000000000000293000000000000000000000000000000000000000000000000000000000000029400000000000000000000000000000000000000000000000000000000000002950000000000000000000000000000000000000000000000000000000000000296000000000000000000000000000000000000000000000000000000000000029700000000000000000000000000000000000000000000000000000000000002980000000000000000000000000000000000000000000000000000000000000299000000000000000000000000000000000000000000000000000000000000029a000000000000000000000000000000000000000000000000000000000000029b000000000000000000000000000000000000000000000000000000000000029c000000000000000000000000000000000000000000000000000000000000029d000000000000000000000000000000000000000000000000000000000000029e000000000000000000000000000000000000000000000000000000000000029f00000000000000000000000000000000000000000000000000000000000002a000000000000000000000000000000000000000000000000000000000000002a100000000000000000000000000000000000000000000000000000000000002a200000000000000000000000000000000000000000000000000000000000002a300000000000000000000000000000000000000000000000000000000000002a400000000000000000000000000000000000000000000000000000000000002a500000000000000000000000000000000000000000000000000000000000002a600000000000000000000000000000000000000000000000000000000000002a700000000000000000000000000000000000000000000000000000000000002a800000000000000000000000000000000000000000000000000000000000002a900000000000000000000000000000000000000000000000000000000000002aa00000000000000000000000000000000000000000000000000000000000002ab00000000000000000000000000000000000000000000000000000000000002ac00000000000000000000000000000000000000000000000000000000000002ad00000000000000000000000000000000000000000000000000000000000002ae00000000000000000000000000000000000000000000000000000000000002af00000000000000000000000000000000000000000000000000000000000002b000000000000000000000000000000000000000000000000000000000000002b100000000000000000000000000000000000000000000000000000000000002b200000000000000000000000000000000000000000000000000000000000002b300000000000000000000000000000000000000000000000000000000000002b400000000000000000000000000000000000000000000000000000000000002b500000000000000000000000000000000000000000000000000000000000002b600000000000000000000000000000000000000000000000000000000000002b7370000000000000000000000000000000000000000000000000000000000000380000000000000000000000000000000000000000000000000000000000000038100000000000000000000000000000000000000000000000000000000000003820000000000000000000000000000000000000000000000000000000000000383000000000000000000000000000000000000000000000000000000000000038400000000000000000000000000000000000000000000000000000000000003850000000000000000000000000000000000000000000000000000000000000386000000000000000000000000000000000000000000000000000000000000038700000000000000000000000000000000000000000000000000000000000003880000000000000000000000000000000000000000000000000000000000000389000000000000000000000000000000000000000000000000000000000000038a000000000000000000000000000000000000000000000000000000000000038b000000000000000000000000000000000000000000000000000000000000038c000000000000000000000000000000000000000000000000000000000000038d000000000000000000000000000000000000000000000000000000000000038e000000000000000000000000000000000000000000000000000000000000038f0000000000000000000000000000000000000000000000000000000000000390000000000000000000000000000000000000000000000000000000000000039100000000000000000000000000000000000000000000000000000000000003920000000000000000000000000000000000000000000000000000000000000393000000000000000000000000000000000000000000000000000000000000039400000000000000000000000000000000000000000000000000000000000003950000000000000000000000000000000000000000000000000000000000000396000000000000000000000000000000000000000000000000000000000000039700000000000000000000000000000000000000000000000000000000000003980000000000000000000000000000000000000000000000000000000000000399000000000000000000000000000000000000000000000000000000000000039a000000000000000000000000000000000000000000000000000000000000039b000000000000000000000000000000000000000000000000000000000000039c000000000000000000000000000000000000000000000000000000000000039d000000000000000000000000000000000000000000000000000000000000039e000000000000000000000000000000000000000000000000000000000000039f00000000000000000000000000000000000000000000000000000000000003a000000000000000000000000000000000000000000000000000000000000003a100000000000000000000000000000000000000000000000000000000000003a200000000000000000000000000000000000000000000000000000000000003a300000000000000000000000000000000000000000000000000000000000003a400000000000000000000000000000000000000000000000000000000000003a500000000000000000000000000000000000000000000000000000000000003a600000000000000000000000000000000000000000000000000000000000003a700000000000000000000000000000000000000000000000000000000000003a800000000000000000000000000000000000000000000000000000000000003a900000000000000000000000000000000000000000000000000000000000003aa00000000000000000000000000000000000000000000000000000000000003ab00000000000000000000000000000000000000000000000000000000000003ac00000000000000000000000000000000000000000000000000000000000003ad00000000000000000000000000000000000000000000000000000000000003ae00000000000000000000000000000000000000000000000000000000000003af00000000000000000000000000000000000000000000000000000000000003b000000000000000000000000000000000000000000000000000000000000003b100000000000000000000000000000000000000000000000000000000000003b200000000000000000000000000000000000000000000000000000000000003b300000000000000000000000000000000000000000000000000000000000003b400000000000000000000000000000000000000000000000000000000000003b500000000000000000000000000000000000000000000000000000000000003b60200000000000000000000000000000000000000000000000000000000000004800000000000000000000000000000000000000000000000000000000000000481100000000000000000000000000000000000000000000000000000000000000680000000000000000000000000000000000000000000000000000000000000068a0000000000000000000000000000000000000000000000000000000000000681000000000000000000000000000000000000000000000000000000000000068b0000000000000000000000000000000000000000000000000000000000000682000000000000000000000000000000000000000000000000000000000000068c0000000000000000000000000000000000000000000000000000000000000683000000000000000000000000000000000000000000000000000000000000068d0000000000000000000000000000000000000000000000000000000000000684000000000000000000000000000000000000000000000000000000000000068e0000000000000000000000000000000000000000000000000000000000000685000000000000000000000000000000000000000000000000000000000000068f00000000000000000000000000000000000000000000000000000000000006860000000000000000000000000000000000000000000000000000000000000690000000000000000000000000000000000000000000000000000000000000068700000000000000000000000000000000000000000000000000000000000006910000000000000000000000000000000000000000000000000000000000000688000000000000000000000000000000000000000000000000000000000000069200000000000000000000000000000000000000000000000000000000000006890000000000000000000000000000000000000000000000000000000000000693000000000000000000000000000000000000000000000000000000000000068a0000000000000000000000000000000000000000000000000000000000000694000000000000000000000000000000000000000000000000000000000000068b0000000000000000000000000000000000000000000000000000000000000695000000000000000000000000000000000000000000000000000000000000068c0000000000000000000000000000000000000000000000000000000000000696000000000000000000000000000000000000000000000000000000000000068d0000000000000000000000000000000000000000000000000000000000000697000000000000000000000000000000000000000000000000000000000000068e0000000000000000000000000000000000000000000000000000000000000698000000000000000000000000000000000000000000000000000000000000068f00000000000000000000000000000000000000000000000000000000000006990129168fcfe5274f558a5417b7d6529443729da9a806ebe13e3875a1325062ba4c0000000000000000000000000000000000000000000000000000000000001180000000000000000000000000000000000000118100000e00000001bc00000090c296852d25d16151b06e7afd8877038ec6464d3fb350882a5306fe6d6814ca09c81cb26017de1ce1db0af6a8dbd8936622fd5bc4f5dd1ea713e86b5a869de9e19016c55742216ad7831bd812e2a479e40a77808045aea4c5d863833873cc5ef596eead9a3e2872dea8465af4e80f489e10b262f3940e8b9d21ad67524fbac69d143286431afb127f4bc5bf6271269f670000009012244f11c35fbd36430657e79bc3967ea8648bb15960e3a4128db19d6f5a4fd5af106da871272868dbe4785a6f2d98ecf0a471481751b902fa81adbcbf42860cdb3a798005c7a7ba5d7536f8557a813827ba76bb0dd9e417145449d7f931cf969fbcd093c74bccc4413ffb43ea467bb5279c9ef4d50649e365f7d03d8affe3807450770abeb28d310dda808d8f6bcbb800000090cc99690635d1cc08a7ee231a973d6a43fd79117d20adce67e28d6d52aecbaf43b9c09fbe89724a30d2dcbcd9b7bc03d64ebabdf0a3d183e960bb4ff9710dbca67e8c35f3f8eb5d51196bb7fcee52611a2ff7caf29c01bcf9b52b44a1ae0735a2caa9a4d50e0625eb5f70148982cf49b21af1a4cceb566f685795693d6ccd2e65fd47ad0e3c82e49fdae76a8d1dc45ea5000001bc00000090795d9226fbb78b367f21372b8c256ed3288d01a7f2f071a1bfb72ecd9dba517951a977cdcb582e2d978c4c5de191ed8e41c0aa83e452e50b1e8d455ca6760ee9669df7f80cf4348233b2ec032fa7510500116e46e6cf3467d8d7fdb78462fa038ef35ee92058ed1b719083e41f2f16ee20f402c43c7eeef508c6800ec6458c2d4c6cad5008da4a353788544c258e4f4800000090e0305e28114b3722c33ab1952d29ebc595f32d45db9a7a78c3ec2325e729ce6ebf8f6953568da77b4b35912d63d15191fff9dd19583a11a076e50aed5f66aa5344030e411705b2335cbd2b265e6a2efa07ca3592950e6c5ae652cd99e9e4691f36fa1d4b02793bf24accc6889ad80bd72edb23a06626616f79dd940176c06882e44d97f705cdffb0d9d58e976f7c501d00000090ed83f03140b0c07d3e220bf7f0a690e7e3796483828014e30a6b5ce4855c30f4b2cac907e2894b955d97e6f6143bc09c6cdc605951c8b418d62a9507dd7a956a42d9bb8cacc518adb76993555b6711632653a9878b40a284c214ff21668f2c04975687367a0e86d74e731d3b42f93ea124c38db9e4d33b6d68c72702aff38e7dc058653270fc3cb12ebd8ea620b0e983000001bc000000907061f8075b365455d0486dd30e5049e7edde285ae0102a3fff15d1bf85c4fee30b3814874aea26755bd77f20f7aad707cc7904e18b2a03512c3f4ff951a46e61b3457b3f1300240a80991b150d613c9501a23b8b5054daae5d0f959044b8a4960f1469348545c84a6bb35be500dcee1e277e839de14f65a346d195ef3852c89f318fd20239d4f3ebb07fef6612b1f0ef000000909fbc5d41733763484d61c81a219fccd681f80e16eaea1f3ddaeb21dcc662472547a8317faa84436800d807e9247b07f355c9ac501f3527804a97d7d4098478be98471658c8f69b3b05ad2afe411ea81a2dd41516b7e9e0bbd271fcca79e5263eba7b60b2ca5d084c7073cb33bec0b06c07d087236159ef24a3f978b4ec5a2fd341dce333d3a1c4dec172b8a52c43eb0b0000009055d15ae9d645a2c2d67ed904197de289b1b5fdce36ac3e3b9b2c06949fc70db9a40a1cf775a0a61fb837ab26d3265e3322cd72faf787cc926cc077a7491fc770fd060f39c0bdc8e781ffcf129c541f722e379072e5fd5085c8cd675202b51c71f32f42dab860b3fef46490d2a6ed9fe31247f961db3c0528399cb7f154cc090375604ffd792218b8c3413493b8435a74000001bc00000090afecbf60ec064c7b6d8c083f289873562047a48b1c415a80e35c9dc9106c64bb193907615fe1cf54323dfb2f18092f575d2806fccb391a20232708cd21728b179cda53eb2495f76d99e8d4fcfb0aa36f0f54be0b846d02e9a57cd58574fa44612e43e4fc4d42703c5865f772989dd1d61d0bd884c65d3ccb1074cefdd72ceab1a9b2d031b894e98f1c1abdf3646f7b24000000902445ae142046ea144b3a08cf32c1526d7d460e42974368c44b68e4cd9c9c06e4e433688f8e8fed76200add9a91ccb0d50b4b29aa40475e17367f9e656ec1269e357774c6a7942cb2f45361982d66d6c3247aec686f705ca0911269ca4c60858e96706ba4ec26e5d732315fba03c8548329d5add19112a8f8cdd2ce0d2ba5268477ecac5c8c7cc15bac2eaf941aa287d5000000900c65cc4806b221a7a928a806b6edcf200e637455e10e2624c2756c91f85b123902aac791b9c0db8427c5c29c72e3dd3a9a22a3b77d9845cac42c0b1bfe6468ac22a6d7924de94285a9c21a9a5f448a74189e7b3f933991cd24482b5247a3ecc5a1ba9d023d51e6e7308acf44b3845ff528bc27544b6544725182a92cb1b43253c7e91c44d4cedfc2d9d2d235a374f3ef000001bc00000090038975ca02532073bb050cc16cbafb54fe0b07f7d6d58d63a96f55a8e6f38205884005859cf45407ad336fb113617dbde2d29c9b30c2ac84e1cfd165c989f9cd410ea6b5de031419a62aded2a4412f2c043faf0c213c13f8b337a940c8f6e166d830f576c3a50eb123c0f81b63fb6db51c9d9d6c3afea467a22b481c7579cc9acea0e5fb65aa258168fd2c12b91a97fe00000090a7da1890f501fd16e21114c4c74143b659e39320d88825a5d7f0a0371af2f6361cd91d2b0701fadba2b4c4157ec7a189285c91f186212d97c28e88d89057fb07ee3eba0c81478d54c7ee895c508d4fb80dda96fef91aa4b786b9d18d8b0ad2222008497ea41528d969ec1cf1458935892d61e3d029f7d8a3d4176715ba1d6792d4397dccbac18aa16240fcfab4860df3000000904ed7377e10af82931a8d7c821cdb5e3cb31160b6297fcc4f3e05cb1a3489ffca7fd356daa36f08ba2c129620663481e7e0ae7f0f52e632fc1437efa2c187d97265059819692c6dcb1a5d103b8bed002121eeaf78efc61160dde2e1a4c863e532eaf84f7f807d25b258fd3385f45ed45107a455c367cf12ec8794f41b075dd4f37406242b74998b6c65ae90f79bb6b3b5000001bc0000009091d8e14c46ba35ed75a816afd829ffdbd566ec5485715e324e8582df0333538038b4063cda14ab108a4ea5ecf8569fff0da84f47f06da3a89a74ab90c0fc4074b82ffce4a3d801b9c1af0bcd818a5f2e2c80a76b032243a333f344f8a6dca104729c529a172fe62f105cfca3bfb710ac12738773736a7e02284a01478510ff60b633cd594100d8a5bc40fd85f87c5afa000000907c8fe3278b52906bee96a8e5cf9a50920350a6829934bc30ece7a11bc55390b5097e8f07f6b142aba3c612b0b16a163cd4465552bd666597c26d88571d089efa7520cb1d3aad53e51cab0d11d96135fd16a18b05fc1d30485f6e812fd4becd0617970badab3eae527cd8c90a130ef3ea2d89529c331fb09f14bd6564630ce05f7e6da336ffde5d43310e64adb4e3bd760000009040c7faf77c51584d80a39cd16d9fcbc159577c1038be718b1276df3251f6bf8def050d60ea6ac2f39973de735e0880a872feda250cb6242b13659e3312c0a319a8ba0e67b5a1a0c564ee76d70b26b54d1d26db671049dec688ea1bd04b7a2f5624d96e458554dd22c650d61fd60cf0b529adcdba203696d7ddaf5d7b5266673effc4945ff49b738ebfc3c89351e03c86000001bc0000009041de4e2fca272612653a9bb27108d99c5167112e2367dd36dd81d8ddef79ec197a189009ecc6d78eb22f27bc38782e69ea63cb6d8d36f80e2afc87d84d20ed487ca3e27fee4d2725d8e57950ee14cd1d1bfc9f0ab665706e033adb944b62aa7be51f0e2d88f59a3915ba914f8a259d342c08caabe1486d27903df77ec64d6e2cd74bc18993048e250bd5e185286762ec000000908225f98a16e3fc7336c07d57990df8d04fc4501b089133ef884ec63ceb3fd1147f5492c70bb111d20c7d9dd6dd051432bb80118541d6d9e50423bcc73d2ddb25bffa79bcfde29766931e1cad7651b7051cc982af48b440c3b09d3dd64a4485cfecc4ef01ed897537c57e38d959f8a3c4159e949c5d964a6a68ca3c3371277447d769300791648c1449689fb3d2a9deeb0000009096574d6e0ae35737f8d0bcddaa1c1d5192abf91ec939f320d6844379bb11b2c4eb671f61a20365f19920f65803e81c5dbca458fdebe2149689a250566bc1827eb6a1073f56aa9f4aabfa171d02911ccf1b08ce50176083ca90c13f9397c2ef711a9ce54097b5f9c37f73396c9e3693c0132da569981d900b5687262309e51709ca1c28b12fa15e2df0e97b8e667577ad000001bc000000909d54b1c6cc11506497eba48853ec670148c39ddd80e0b2d7ece2117c0a69976332a05ed55cfc53ee8e8a421bd2abf0a14405f2a17b6574425cb02041bdea5d00b04e5d4485ea263128331b650739a24f29a13ea17a5442d56f9f1ed19448ea343a0a76bfb65ac0f7ebefb1d9e048d60a16fc23dd1ae1247a8c266c7eb00f440dcad8ef1a1798e3f995d09175de1f9c9b00000090ebccc7f34bea615a85be2db6b8d1ab963ea9ccbc110239cdb17bc29b3c51729350c31d8b6044c6d9aa409e8e217f3c21c746d0c3d97b65274f3c9a6a047a89751948ca6c437f99e36dc2e6d17f14e7461fe68b0dec9a029463e06cc386ae77e2b1c40b3d97ff0b55bc861fc37264600001cf69b1222ecf3f69f43edd9220a5120c0c498b364681de564b22eee9faf81a00000090518ad35721578a2b8032f9a9a85a0cb5bc1a3caec4025c9fa95e81b1bf7762f083f48bbbb8e76cffa85e867753306523fb570c8e0eafd41b773c575920e02cdd8310c5cc1b599197f79d2ff7d816597704a7ed63d2b026473ae53244c05050019275e5e9d00163419b4a5774601500a92dfcf5947c531d7c61703c2f467e12afdf49e951ea75b4c893e3813e184ff05d00000ce4000001280000009054c7353fd5f59f67b7be50b7d05390514d97f9953feaa0613a094e865e9da3d94c5dffad0037da2c158a7fcab604b241b007c6e9f37ed9a6ce051e514223fc28798d3d7f1389cf7db94ec7399691a5a52b93cc18ce42dd354b73d1721e1fdecf33d6285d6067e5d17edef9475d9cd060156f91588b130f6d95c305994eaedf541cc7e06369640cfd25efc564a559e58f00000090d0f65ee4bad6e8c23b725a1df4362fb8e0641e29c399fda7ec68cda0c724a9c36968d8d1a462762d7207f92a62ce74297cb0815ecb781363550d440d1fe4b69431e3c1b75058b95df46af0934cb368151070e8ae240fa4e5f8874583da5719de16ea004d229632ab7f40d866e32da77d1a744779c3c0bc12106349d58364968c7a116dc10108fa05f68bbc66cf06bad20000012800000090ceb15ed8519f50d2773b5881946d53f7ce1be6297831f88ad37a658c540938b95e65bdb65fa95cb963b8390770c1ec2a09b55b98305397cce556bdbcb1d1a63ccf0ed61b926bb297212ea01699489e4106ddf7a2ec9de881b2bff56f9947b6dab6ad28809e007ae383c2c84d960ebb05076a25cb1aa8e6e999058f9ce62e4a826047864d0d09a0d6f2891392729220bc000000901a29348252aa7c2e480ebc1e5ed54249e98e5207318246990d824eb6143e1fa7ca52415815a073a74cb87ffdd50ea4b6feca0c76b708b2d78e2be45453d03c31b396c2a57a677fa352bb8050c93f7d3b26f0d3e326ce52ee178a6574e16fb7bc17e68f719e064b3741f1a3889ee8f5bc2ffb38e2bc7ce161d0204e1381ecd9e9da8001ac43b33234bc1bc0824ebd0e8000000128000000908cb31dd7cc5b2dcb6a9ed38b2c1d60783d9452dfc26740152964dd590da27ba1eec58b8ecca303c2894cbdb1dbc7437a3a5d6f92902c6b9540e5e7067b9205b7899f4ae9588ae0cb7dfd93c9ec94cc770ba9cf7825332e1bac099cd92f385dc35ee31f30e38208a3acb0d381cfd5ea990c51e8d93d97fc0fdd589e382f0acf56d73a649b0f016b4a6552b05eca0c51b600000090140f03b4602a398c5c5569dec42df4145732e7c22c4bd965272e5cc7f747b66852f853b76e36253c219a1ae935d56643475461b7c642869974c8edb9b3d675c298b9b1afe3a5206292d4fec4fab172812bf452bac82455d5ba48edb40c019da990987a54c70d9ed8e32205ff05ee45fa1ad0086e16aaca8a187e78400fb1afd4e982bd6f02b85efae7322655b125389200000128000000909b08a64053cd676b12a9e02f4a59559e2687276a5e63cb0e73d55a07bf27f00f659d29746ed4153a4d09468c32e4a8cd1f76b8f50d17c91c246ced2509514f2df539776aa226c8c267efe04d499c76ec0875c4155fc14c641a2aeb86f9d4f11ab0e3e6f884ab9730216e7ce7bacfccba1fe4a02d1b13299645517546916066f7d887b72c808b546f077167974d590641000000902c921d148949b1d5f4ecd9c5babacd7531e40a39ab49a499d4f7f8f2ab56fdbc0b62e94694fbe6a2ee9b39a7624a5b7e3877a8398ab481bd80d7d922513f506c1343d1340b3cef3bb03b3c376a764a2b1558f5f60762fe5a344aa161d9836f7abe141c631c4e53d7790ed19a7e74b9a722c60e6f81e6e14008a6d5297819da2dbbca59b17596febd612eed9282e28beb0000012800000090796d846898f315dd6ab0fc23652cf7faf36a4712e367fb2af8b8befe8238daaab3e6d62b88d0cd5e896a2987599e3282e374b4a516303668bfc47190699e61c12aee9c5738446849e775a7b6b07b2cd319b5251dafb274897fd5a0341228a3810254422b686a53766f81279011262a9c0a0e5a3a60a747fcfd0f68357130b0e6a8d64e3910dd89ff1af883885ec339c900000090195b8c3d83105ead950bceec540a84c7045b8a5a4bec9bb3cb86be50c37924d5e5d75e8e84504bc707b3ad5540f78dc32383f52728e8be7a4469775f1daef8165b8e5a0a1e78e36af488fa9588f9b4d20fda91fa81fb59d81f4cc16e85e3aee184a984115f2b7fac2a6fdce97b8644a004d9e2edd6b2e044e1b8410edcc8735b7c21b79244ca77e38f69b99b40525ea800000128000000908ae4e5789de4e028c76ae7dd367188724625c20844d65ce5fdca8314760d574b7c33022128af3760ae7fe0a0b64990f41f36cee2c29acda0b83b3d6f9eec4d36373e9daab7cb4695654efe675d96e17b053bcfab3eb3675b84a9d4368c266d28063e9d276b4c5b35d426568bbdd53e272ce3d7c421dfad01339ff57fd450a0ad969f7b850fcbb9c146c71e7c774e5e4a00000090f8783fd161bfae061b527caadb3816173bf330a2e0774a5ae928360024c5b03763f5a2747d248d2d7d13029847f5027694cf5637fa0b28a7b5d1e33db4eb6eeb4177dd802f507604cf44582ca9928eb62d8b499045535efc33a250bd555c6455e3cf0c4781ebb3131772fa9bfda49d9a24663802a3a08ff5b26ab4c045bbb5a241be0afa41b976b9b4b033436091cea500000128000000900ba867de0855be756d43bad77f2aa6a6b4a091a1a6e14ff139ad8bb43f05fb53c58345b1b05e87e54008f7ba7bb2334e4abe1e37f1277d70cea9a608c99113ca6f070caaddaf2651c977afb42bc1f9d900931c2bd15f5ebe087aa7747a3ba05d66b581604bbec30eec9024729cd8436111ae080642dc109f3d4ae5be1ef97dc40528853329e2e2cd95a81b3d5b9d63cf0000009077ae723831b5739dca566908d180af4f59f8374ed0b53fbd2a790491052dcff2a8535e0cfa7b26aee28c805b3a835073cf93f2b5948f66507cc1c12ace00626f70abe6154559bd7e85127ece4d3e373b2d655f022a5f90780eb80e3822a2ee49e2cf0a825d225cd4214df235a9742dbf2f7d637b5aa737ce8532d4f8a92e497ff88485686cb00ae9ca79abb643f2ab600000012800000090e5e686c7806069b25826f9e5c6058bb4a388de81ea58d24d8329ee7b1ae2960671f7b088f33cb64fb1218dbea44788217c03144566c264cde8a5ae363dcd208f38910aa46017cea571adf8ae6709abbd1b98e6f32c9787ab5fc15c9f2c587f2588a697ee56888ba0d0541f6a06d8bc60302c6c189741b112a15a112db1247de215fa43878a629b9e18df7f168d1c9551000000906ec529b00b5aff6b432ca1a5cfcb392d1c91748b69a0a535f049463c27ee3a2af71e2139cf3069b7c46073722a5b8ac50297d53fd17c1783963fdf3343b14eac33ff62ca5620deb3875df80e44fde1f7021d6f1e87bc26efce68233d8f8302e78efff89fb26434ae1272ecc4a393265d0d64213a02a662c5de65e576b597ed1d1eafde3090e3ec107cd87788702641c700000128000000900cc284e99c98fcee772d61710cf112a6b11a478b52187b7e34217d300dae870988286b527f450d281717e2df6141937f06740a2bcb728a15b1af3cb892a117a0cf8a6a1258b8b09f5674530d3553a7a815e1dfbf18aaddfd9b6339278d4706b72b50e9aeff3939f61432372d68a8663c1ad4bdc75f82c67b5514436cfab1e46e6b7e1326ca827e8ce6840d1e47bb944f00000090d08b470d97fd8e7636d2ee828063a7a27829cd6f5756b34df07d56ab0ea1998e449bae880ca63a1281a8cf3cd39725a8ac052f4dfd392fa364205dd399b2e111f23c1945f2df523604cfb8f8d68d14122a5d1a07b51cba652a5b9aac94976d0560ed911c3cb03201310ed436993ac63310dcf580589902f203c9e650c12d5402f4b8c51a7bb1f1b8bbb507a71a0176c2000001280000009047cea68f5e5e5706bda987ab452f32031a67df602fce2ac15ffbc1ac597d387182e3eb280734b9b185ba655d1dcf85a5de60240ceda8ee6d9eb14b824d63a974fbab0d6a30de2e5c42e1e3f289a400a80c2bf684566366cfe43c985d390de6657767ba43db06eea840a8662c734a72451fc8efffecd041c4af2fda48d378b6c4d79860d9959a4d562d0042ca83040dc6000000900cbcbb5c5e541d3563342c19dd7be6f0c593e81008debd74527ae8fb1a36571717883bde90e6d2650b14853ada16db5b338947d95c7ecb1b0c4de4bc934d45b28b81a8f9bc64ce99878a984b14522d462813fb713636a89b6a9f29b1057e8acd46c1780a07a7ee9009b87956a4750f76092fb30425cf60ba6f5e01a265ff978024168a8fb5d4f6065bd01bf833c91c590000012800000090dc4b3019a8280a6d76c8f63099d51065c43f87b14b7e1968708d5e1d1195f03343107e1b51bcecd0cd66e9c124edbc3645f85bd929a0bcd25ea3a118545d3c883628b1bf2a9b69385bbfb195f7887ee02d899186366993141fb78d3f2d7df6e9c2218f1952ca0523471ba352488f36041adc9052643bc4d74ea0d32464437e9d27c829436708bfd2abf7aaf60788cac200000090beda164f3da111e93f709c4d880f9c4a82668fb32da240be9cd6a479e1ff33961b73a8971b5ad8c554762656f50b2c64c93c383febef8f30e101c6120288e63524278c0cd225a0df3d70f05dbb68e39c2f7c4cef575e271a5ce32f9225c74846cd702330f7e2011fd2396d7baf06065f0ad60cadb5f2a1db3a9e4711ca47d7e3cfc920808e1817d62955891fe61607563800000000000000000000000000000000000000000000000000000000000002c000000000000000000000000000000000000000000000000000000000000002c100000000000000000000000000000000000000000000000000000000000002c200000000000000000000000000000000000000000000000000000000000002c300000000000000000000000000000000000000000000000000000000000002c400000000000000000000000000000000000000000000000000000000000002c500000000000000000000000000000000000000000000000000000000000002c600000000000000000000000000000000000000000000000000000000000002c700000000000000000000000000000000000000000000000000000000000002c800000000000000000000000000000000000000000000000000000000000002c900000000000000000000000000000000000000000000000000000000000002ca00000000000000000000000000000000000000000000000000000000000002cb00000000000000000000000000000000000000000000000000000000000002cc00000000000000000000000000000000000000000000000000000000000002cd00000000000000000000000000000000000000000000000000000000000002ce00000000000000000000000000000000000000000000000000000000000002cf00000000000000000000000000000000000000000000000000000000000002d000000000000000000000000000000000000000000000000000000000000002d100000000000000000000000000000000000000000000000000000000000002d200000000000000000000000000000000000000000000000000000000000002d300000000000000000000000000000000000000000000000000000000000002d400000000000000000000000000000000000000000000000000000000000002d500000000000000000000000000000000000000000000000000000000000002d600000000000000000000000000000000000000000000000000000000000002d700000000000000000000000000000000000000000000000000000000000002d800000000000000000000000000000000000000000000000000000000000002d900000000000000000000000000000000000000000000000000000000000002da00000000000000000000000000000000000000000000000000000000000002db00000000000000000000000000000000000000000000000000000000000002dc00000000000000000000000000000000000000000000000000000000000002dd00000000000000000000000000000000000000000000000000000000000002de00000000000000000000000000000000000000000000000000000000000002df00000000000000000000000000000000000000000000000000000000000002e000000000000000000000000000000000000000000000000000000000000002e100000000000000000000000000000000000000000000000000000000000002e200000000000000000000000000000000000000000000000000000000000002e300000000000000000000000000000000000000000000000000000000000002e400000000000000000000000000000000000000000000000000000000000002e500000000000000000000000000000000000000000000000000000000000002e600000000000000000000000000000000000000000000000000000000000002e700000000000000000000000000000000000000000000000000000000000002e800000000000000000000000000000000000000000000000000000000000002e900000000000000000000000000000000000000000000000000000000000002ea00000000000000000000000000000000000000000000000000000000000002eb00000000000000000000000000000000000000000000000000000000000002ec00000000000000000000000000000000000000000000000000000000000002ed00000000000000000000000000000000000000000000000000000000000002ee00000000000000000000000000000000000000000000000000000000000002ef00000000000000000000000000000000000000000000000000000000000002f000000000000000000000000000000000000000000000000000000000000002f100000000000000000000000000000000000000000000000000000000000002f200000000000000000000000000000000000000000000000000000000000002f300000000000000000000000000000000000000000000000000000000000002f400000000000000000000000000000000000000000000000000000000000002f500000000000000000000000000000000000000000000000000000000000002f600000000000000000000000000000000000000000000000000000000000002f73700000000000000000000000000000000000000000000000000000000000003c000000000000000000000000000000000000000000000000000000000000003c100000000000000000000000000000000000000000000000000000000000003c200000000000000000000000000000000000000000000000000000000000003c300000000000000000000000000000000000000000000000000000000000003c400000000000000000000000000000000000000000000000000000000000003c500000000000000000000000000000000000000000000000000000000000003c600000000000000000000000000000000000000000000000000000000000003c700000000000000000000000000000000000000000000000000000000000003c800000000000000000000000000000000000000000000000000000000000003c900000000000000000000000000000000000000000000000000000000000003ca00000000000000000000000000000000000000000000000000000000000003cb00000000000000000000000000000000000000000000000000000000000003cc00000000000000000000000000000000000000000000000000000000000003cd00000000000000000000000000000000000000000000000000000000000003ce00000000000000000000000000000000000000000000000000000000000003cf00000000000000000000000000000000000000000000000000000000000003d000000000000000000000000000000000000000000000000000000000000003d100000000000000000000000000000000000000000000000000000000000003d200000000000000000000000000000000000000000000000000000000000003d300000000000000000000000000000000000000000000000000000000000003d400000000000000000000000000000000000000000000000000000000000003d500000000000000000000000000000000000000000000000000000000000003d600000000000000000000000000000000000000000000000000000000000003d700000000000000000000000000000000000000000000000000000000000003d800000000000000000000000000000000000000000000000000000000000003d900000000000000000000000000000000000000000000000000000000000003da00000000000000000000000000000000000000000000000000000000000003db00000000000000000000000000000000000000000000000000000000000003dc00000000000000000000000000000000000000000000000000000000000003dd00000000000000000000000000000000000000000000000000000000000003de00000000000000000000000000000000000000000000000000000000000003df00000000000000000000000000000000000000000000000000000000000003e000000000000000000000000000000000000000000000000000000000000003e100000000000000000000000000000000000000000000000000000000000003e200000000000000000000000000000000000000000000000000000000000003e300000000000000000000000000000000000000000000000000000000000003e400000000000000000000000000000000000000000000000000000000000003e500000000000000000000000000000000000000000000000000000000000003e600000000000000000000000000000000000000000000000000000000000003e700000000000000000000000000000000000000000000000000000000000003e800000000000000000000000000000000000000000000000000000000000003e900000000000000000000000000000000000000000000000000000000000003ea00000000000000000000000000000000000000000000000000000000000003eb00000000000000000000000000000000000000000000000000000000000003ec00000000000000000000000000000000000000000000000000000000000003ed00000000000000000000000000000000000000000000000000000000000003ee00000000000000000000000000000000000000000000000000000000000003ef00000000000000000000000000000000000000000000000000000000000003f000000000000000000000000000000000000000000000000000000000000003f100000000000000000000000000000000000000000000000000000000000003f200000000000000000000000000000000000000000000000000000000000003f300000000000000000000000000000000000000000000000000000000000003f400000000000000000000000000000000000000000000000000000000000003f500000000000000000000000000000000000000000000000000000000000003f60200000000000000000000000000000000000000000000000000000000000004c000000000000000000000000000000000000000000000000000000000000004c11000000000000000000000000000000000000000000000000000000000000006c000000000000000000000000000000000000000000000000000000000000006ca00000000000000000000000000000000000000000000000000000000000006c100000000000000000000000000000000000000000000000000000000000006cb00000000000000000000000000000000000000000000000000000000000006c200000000000000000000000000000000000000000000000000000000000006cc00000000000000000000000000000000000000000000000000000000000006c300000000000000000000000000000000000000000000000000000000000006cd00000000000000000000000000000000000000000000000000000000000006c400000000000000000000000000000000000000000000000000000000000006ce00000000000000000000000000000000000000000000000000000000000006c500000000000000000000000000000000000000000000000000000000000006cf00000000000000000000000000000000000000000000000000000000000006c600000000000000000000000000000000000000000000000000000000000006d000000000000000000000000000000000000000000000000000000000000006c700000000000000000000000000000000000000000000000000000000000006d100000000000000000000000000000000000000000000000000000000000006c800000000000000000000000000000000000000000000000000000000000006d200000000000000000000000000000000000000000000000000000000000006c900000000000000000000000000000000000000000000000000000000000006d300000000000000000000000000000000000000000000000000000000000006ca00000000000000000000000000000000000000000000000000000000000006d400000000000000000000000000000000000000000000000000000000000006cb00000000000000000000000000000000000000000000000000000000000006d500000000000000000000000000000000000000000000000000000000000006cc00000000000000000000000000000000000000000000000000000000000006d600000000000000000000000000000000000000000000000000000000000006cd00000000000000000000000000000000000000000000000000000000000006d700000000000000000000000000000000000000000000000000000000000006ce00000000000000000000000000000000000000000000000000000000000006d800000000000000000000000000000000000000000000000000000000000006cf00000000000000000000000000000000000000000000000000000000000006d901052f4f7d40d5985bc4bf36583cd2403eca7c9073a6c3b904d5532d6d7253f7b300000000000000000000000000000000000000000000000000000000000011c000000000000000000000000000000000000011c100000e00000001bc000000900fa06a4a255ebf5e421a21df189b94a42141a1478772ef6aec0efd43c3c0619407a110f33efe4f95a8c71e20d6304784f49d24a950c11ebe50e56aad9ca3867964111abbe4c0588ee1fd128c5f229172033d51ba66bc39452663bc1080c4f92eeee49f27738a8fff454f917c3ae68a4402b457e0653e3a22b642018abc98e78e125ecd0315cb2652f8b45f9fda452fd9000000902748ba7326524c9de9eaea39a1064999db7af4e41b79dbc77b5a48f151e61b1c83186948ecf9440ce8084f5e88efe5bfbb668fdd4ad02b39013a8ad303addec25b95fa2bd0c7479be29d1ca6b1ee6c7c24ba9e85779a2bda4a5776a928caa6ac99bb431881729c7e9006d096face21df10bc72b47721e359204606a35c7e2a405de4d9924e35bc05559d3e2f16dc427600000090eda89138cb3408b4c8740b8a10ac60a83dd522770424e2c6ecbf5c81507b1f7b71866b6dddb0a4297373fd8e6b4cc7f77938ff13a6cec3dc4544a42c0eed111ab320dae337fad2ae2d7cd5ff6184d57e1f49dd81f6397586fd9324fd9ef9c58d22e01a27f8d7f09774a71f972fe848472e4f13921a6271cc5906fff124f0d89a97e36c24a2f1983e4a1b8b4671d03fd0000001bc00000090b08b6912015a675fdd0b441c09908d931d7fee01d3af1a90a13da8de53bc9bb7fe1ca42f0036a87ddab490fd7a571b684cc5ae02a9868e8b4f28c4e5fe208c0500297d0403ba4b91672f9202f383752f13be463fabae28ac36db42de332678c9c745ba198f433f6aafd59f013dd6557d11d9bcbf61273e0472bb00317003ce2ae1da5ff2c6ccfaadc304e4603dc2766b00000090000e5cc557297d0fedfa0f386efed5addb8641a6f57f16c1c105aa995905b0103379efe0573879d3851d2d8c1e04b0f55e46eb4774a38a19606d0f9113f8bafa4680bd465c89a7be0e8bb093c91e727b180081f9596401828bae6a84268f7f290c4def578c3c96bfc7008921445ddcc81bac7d811cf06bb765639609078aa12cee1a22a4047a15c7a208a6b2cf2df67700000090d7ee47c5b84260a4aa37528f1295503c5b14caa685d6e86a2132ade495aedba547fc658f12e865c3c64ba27a2cf0a3391565848314ad1ec7997e7519bb4b6a8f139ab4cd504a891e5ea87a1ec914f218265107a7afb9c502a78ad19ad582813db07bfe2e64a8b1b7d8a9d67441139eba153d9740961a4c16b501a1f88a296ad1db2e4898b26812543d19bee5692d7c22000001bc000000908c1820d1a6bf5eac3261accd7e950c28843847efb7563110d8b043571da7373a2bd615708dbbe5209b3039817c4cfb6d31efa6dce35126b792235635e9fbc5840fb1b6fcb7d55c94cd7d24b7eb126c2a0282cb4510a84bd2cca7af9f93b40289ffb83e2af1d6e7e6a1db1abbc367faec25b3d4589e7307c8cc4befa5da6468429704596e35267c157ab15f75a0ffd47c00000090471fa89f637ffda4b1864518a9c997249873d968a6f89102b04b46b5f46449604e15c1d4065267e6ff4cc4cd46019cac8ca1be69e086872c6a894e3a7642f6ef6e72628ddeb0d6b8d0e8fdb91af527692bd0b5c26654b0de528d7247463e03d38f2e4bf58cd8df51cdb3866e81f6ca332bb6e6d4a7977dd172b6ee1730a131d34025f677740f73a66421823767c740a4000000900f6b18b3934fe0443839c7dce7355f0631c631d3783fb5646879942398833dbdd8ffe7ba7550e25d3939699a0c457e88dcf88a420f82e98fe27d0afa5d681c98a4d8f01a7cf0f99acd33ee946f99b6f40701d8e5c765472586ccb52eb3fa1454b03904361ad008dfd10e2ac453bc399b2c2e6843d8ab8af916abbb9b2d9643ea05579a1ec69ef849c49ee259328aa95d000001bc00000090e8c7a254620804800c7d4aea05073ec2cb4cfc57b9d1277137b7bef332e81d61f3dd9bcb965c6bab8de4562a2cb4a3ae77170e36cebc95a98ba7ddbd863e24194a29b3b444f319f9e9ee65c91640815e10205d49724ee6057e1995754afda71edba48cd5a02c4a98a3720e8e7308f962302e910ad7f8d7648d6ba4fce4a66d26ed17572afcebf769645d09a99a6cf73100000090b584063a66dad1c50937f442a38bfa9d25db605d837ce3b8080335b669c6464417b75f99e930be047444349ef1e57d0039470167f2c5f68663ec8e7e96b5d91c655c3740cc749093c14828594ab0dc550835d9c5f3859f0f6f51589bbc64451305865fd8c89dd38d7b41bdd6787d04bd28a706051a7a7f11241b36d3a2fd60c500156fdb05088b026e0bbb95560d054b000000903c08a0e49ad70be54c2c81eaa4cd327355ced4b16c0aaac4ad965da9d6627aea1b634edc75e92e8eb9152047b339a3e5b9205c128f50f4ffc61ce2442b62860081a3864d8c57803173f80e8fed370a631d7d834c7198fe4b428f1353883fdbbfc38eb11e3730964e0ff338eed3d26f50043689273c270fbbe9d7f4c2693a6580a336692b9f4bc8f84f51b4357661f328000001bc00000090a5eeb10907eda5eff03ebd2523761c450dc9afe671836dd0e18bf16446b6dbf7d5305d6bc8cd262f5061501d8bdcac4128e1ea0921ee4ac0a0d5ba9806c4db6b872a4ec6eb77595d994bdc5f3b738ecd2f9989daef90906f1bb2315f51ad86651f10509f34b323f203deac654574894e07b0a7c5ca8be9ed87386e03222dfb91221e25709a45dc6f3a58fa28d8dda05a00000090a15d419a292147252164e18bf82b23eb4193bcf64f14248434bd8da21d904831e3d724c5e0f016677792b70ce1dd2dd379cef56ff6a8213a43c644e15d96255c10581fd2f1fb053d03a64ebc2445cd5f057ab15e110b3510eb44fd577e2ac82ae4eab33f39fa833728c197f548809e7429ee713a27d9893cdd4e6caea82bae742cc8f23688e315c0878778810d3d00b600000090a6b6fc55cd90398fe4b89c0675964724452bb12475f80e747fd1a3ab228113b7c82a5572a975e0764a66d90fc362788ba726793438b84a8d0bbcb81e297dca4c15170122937f12460ff1d997dec64e330aa7f9b679d0496b61c30d93425cd3f5d3a18aeb81119729782b53b2b25996d81d5cfec1da0f4abc3e704c09ab1874a4fa10ceeb32be4b234c10fdd1c4d08c31000001bc00000090205cd38b1640a3a8a8cf8f94b2f5b99d9b91463788b6ad7a76d5fbc47d2931d24ea20e02c469b8a44d523a180557fe47877f6894ca5e71fcd9e7beb7950b30a9e9a299bfdc27b67aa2e24e05642d0ac824c4f0b4d596a86dd781a69e55b3a54fa1479e94924e876cb4ddf5fcd8898a450573412ecbf729e309489889fb83784dd2f8b55382e5e57920928cb50f09e046000000909843a1c95aa47fcab21af3abae5e9d545b4ebbf3364b00e398407c4543ea6d0d926dcbad031d6abfc9b17ca48ebd255c02aa399b7a93c28dc85fcf2c2bb04e5287b22ccec65fc456d118356a58ebcfdd07fb4994e6a48f30ac9124086f1410990172b4d10ec942afabca201ba7c014960d51c781cb64e7e3a4b3c2594622e5301adc674cfd3ee3accde46dc04595939700000090c31fd3bd96ea231c48b9f9a18c800a87aa2faa656b9556f16e54f8027b5317045f562a676350d008815e0795258051ccea8f4e713e4000aa3e1a29b63f24a62efb35d9bae5ed38d680a6c1e30ae731081330724baf44b32dc50c00d4480f10d2ee4731bdab4508ea5504abb4cedfd11005262eabc8754ca9362e68749778eea22c6e7fb26b92e8ead4bb7eeac266defb000001bc000000900ec57580622c98c1ed0b1716a925da78ae81510b112bcf46a27d58081ac81e80dbaf4eb7ccf11a3448bcf5489b04d8c2c0451d218374fa8817d682d0322b5c94455ba6e75e71c8189d4f87bce73e3f361807839ebfd2c61b38fc7aa64df31fe7b31061583b27eb126e5d574a3362e1df1f091f5b7c85187e66dd7332254f78517bcd38ae6101eb872f4b1ba270e6142a00000090c1206a2094fcaee102d4871ec1c8fa88e2c59ea7533fe381b3a5c1a290951d94387d1e1c01ac82feb86d9de320d150830b7b218598703d4802d9eda409b542e5998114df55a2912f55e1e4ea7058bc190ade816a1f6c97380772bf15d1b686f987c522864d2a7a9af8ecd0b19b4120162ac6d942c68b12dc617f7bf0a59c10c90c4936f3fa5426c240e57370d7a3226200000090dc5c6072df5261407e8280462b9d68cb1f61ba0adc00677fc93375f5f677ab102291af57a91a6a8ed6ee4e62f9c0004b0e7d0ecf258349a070ad2ba0a4297a4d9454067135f432135f55f1fffb58292d2136a5b8b3d3701123ce0a1d34076c92467795b92baac70e011632c20319000d14dbe0edb7d7ffc27a375a90008c8a6dd021ec133ab849e31a8722f71522cf55000001bc00000090be20251087feae5e55d181dbad0159eadc755af839fa49a8ba8873b1aff41ca9b6cfdb8d59a7f7a16d0eca6e11ecde018773e0407d0d44d98545ebf47a3ffbaa6f48957249a1e10c759e28564f42a2a0273e54e0475ee6333d2f70356f59b32aa94280227101cf3fc942d7475fcee1592db18acd0fbfa81c00df8d100d3a56b0e1aa198bdd33fe4f7fed84bea34fdb0b000000903d1429aeac51fc8892070777fc88f1a1fd42639fe86fb61decf7d9959063b1b8c7100ca1045f31c1777249558d0857ca7ff5044073e93940e72da56f9fe950841a1084d93a9f307351f99e15ed34447316191a327d30120fc39d78b35fe05d8061928536a9da5cffb66b5f1e327460350537b15dbbeb259423a297d1dcdca98b88324f28141b58d79130b05efc45c845000000900f56a1bc031b7d3ff9a80926ad2482b772de80a903701a2604329f5dc78fa8250ef026c36a2d84212983cd3d636f48ac02d0d27839809ecdcd0381629e6f9f726e3430d71012f97349efb0052b89bcf617a8b9a4a25704cb66e3bcb634b10e7e0d18ba90ae09beeb00fff811556a6505031636071f8d7ec30636e6aabe6b967a09a6cb728f029e1efa8d7c32aa93d90500000ce4000001280000009088b4d6b6c4688f82b78391626e00b9c83063643c0594da2c72898ba845db3dda91d99d13862c313b55c8ea99223ee235f1c9d7640da85e4a7ef2916e584022cb66a1ac1bf2a5059321b661475e257f150aae1eb38176ed6abef3a62a7c0a498324972f78ec19d391dcd3aa0d7d3e4a562a1d57606d515d164a2dbc8a99d0eef054f2777d80b72fbf56e7e60acae214960000009047c3cc3b7ca87b0d49e8e33cee5f699120851cf7d3174fb29c834b4d142ccc24a65bdc69cb711e95c4a178070a607b7134f445d7a441952747f9733c48928184f35244bf8bbca6c5b3bd6922148cc5e11e2e270d04014e113c02d65eb99348386243a17bf04c5c83c7a522d721eacfac1a008d872a2c3ae78d001f26b7d42337cba9d20f0f139e21347babe7d857f16000000128000000907b9adf5922c1468ba4118b65c4a326fee0ed160c5f75c01dd0ebd02be6f43512cd9cec986fa8149669303f5372538129592d3cb6555d90c511742da2dc27c89b68fee0975ee88053710369494e8c4f22209c1f1586caff24a15b01aa3e44b90f8f6091c22c3273e19947ef1c9c39926b0304affe25325f66d1c0867cc6e935f5abcbed5dd95d2d7de10b78744dd68c9400000090ec354c987a3378237547fa00af5f28cba98665d7530463f01deed8f15195da5aa6baa689a095e259ed03998c2311aa83be9de2aca993a1246ef762ee8a470baa7b0d5d8f551b05ab45c3a3c0377a1faf2a9255aa20e23b2901e8e0de2adeadffb77a07f12317a866b1b3f0bc4e16e1f629ede4eb078c13a6605842c4ff7910e7f21568448acd1368d77367e6f9703dbb000001280000009002a7426e6ef93687dccc3a4298773bfcdb81d7ed750ec5e5e2c1780cf4457f87efdf27f43587d9e2d76c398aa4940a70ef2ea675fced0ff12012e7c45a028e2c1e727aa1259fffaf0bfbcba95ee4ab0814d8ca8d0371a3e105ce0f5d48f479693660e2e66d11a27075509f49ed47c5a61da7c35920f42c1127e2ae52b2c838caf29c6545a9d29a31241f9e8c5ecdc74a0000009080e5ae1eb2c2a61dd3c4a17967dae8929e8a689760b92b4a09914dce54fdf69eed7cecd7a7df315ec5992a1da7fcf690c1f088a04a1f2d60e714c335562fbf67708f519c4d000eaa757274ca3b8a188d2a3f49562439cd599db792f26e2ac0a26dfe8f2e9ac038614b657f2fb19da8f1294724bc540e7b47bf90082fa8c9d6e20f05bdbdbc71e82c98bec4878e0f99270000012800000090210c86a497051ecc1f16de3e558325c121d84e896ebe839d7dd9b71d7094d507c9dd4705b586a8044ad743c84b4b78e6abd3db0d0175af9560d757b4abeaf774de282f6c2d064efbd722d493f18fffe0059187b83fae4759dee1bb153c9f2fd1e5a95249e0cd85994a7ebad742866bb12820a207481f629d38d5f1c45bb7903b59390dbb2196fd205ecf840aeaa32717000000901045ba55e923d028534ac1776defed8d4a449ee43193d6872278f21d62c389bb577ec9bcc111f95941964d4267b4f772ed3857069e58b919253cbf71aa59b74c228009ea29f106e2f4068d9fafab72da0e9e02e3574e5597d0574560aa7416c776cdc5a451bd65096ef1eeb27ee8d81316b2512612cc298c70f3b3d463469de4ac8996cf70120981e90485bfabca5f790000012800000090de54350c417b8542f43d1325557d388fb77cd15c5ad8b15e01a53a809d57d87e4c7bf4a10a9d08869ad2f645d29751748674773687a849829c249b92a6b76b2268b3ecd7bf402efd0b953edee1e72331291445129dfaee22600da08e7d94cd97b1002e243551ee7aac7084ac976af12116d578eaea15865cebd2aa00f6effe550d96b780d100de44ba1197d06c6a9fa3000000901756521b6f0ac6d9299c1e3ef8aa996e67316af669b6b30d6cfedbef9cbaa9db725d0f20147a3e66b747eb3dc291de020899f2177fb7df75717b4c952702d88a9380947327123ea6e5fc55febcc9cba71fb2175ef1b448c67591c1efdce179427ad8b5c614f4ebff4c009294daf0fec212014dbd257cbfce86e44642b8f9d3c4331ef3161dbb82bd0ca44c83e11ef75e0000012800000090b373bcdf5f4fc15f5b3666576b6a892cbacc590c269f70acfd3307338f5f287b1a73ca899bbae6ed6c529b8f2772254baa557e19d652cfed451b3ff7afd4423a8773c779af821a6e3bb1f7a4d24a5ab50a767714d20d02bd72f52706496ac3e1ecb6618d8ba54a5347b568f6daad18b810726819280427423dd0819fd705e95553600ba13426bd71df80f8e7f303e8a90000009084c8bdbcdabe48e7b0d7bf175ffcb2f901e297235632adf7fcc40bba2fa30424582b4dfd08d1294ae0ce0c8359c47a070208cd2735c17e1789dffeaff648d85d85caf3bcd343b1a3741349f4b127c3ff2a8e89cc56781c71dfe300a214ffb6263a41acca3eee08b817811b3d0100686621abf8d7c12ee93bd041326cca401678975cddb8091b51baa00250c9fd0485360000012800000090a5c218adf2cf05e67bbe0f336d1643b98f5c6fee9a1a64416b1bf392b8626b2cb8fb2f1b90a3464245d3558ad753d83fbd12fa7737ead90183d54b73f56768fb2f846e0024fb22dbf42e3e55ca95ba65023ca6127ca350c6c8df39a3ba76444f555883990d495aedae2f765cf808e551228cd73e5418464f16d504a3f79b734437efa34b85c0aac5e20cb23775a8b33f00000090389e88ce42464030a4c7581d1eef568e4381829225c173db6bae9f7403e66e19ff266cea77a3dec32abc47cd8012a445bbe5bc0e2ad0cbd8e2d01f4d2ea1a95a234d9af1d7e3129834848bc3554d5ea8230dec2645c426883997805add0a236f815a819865505252bfb6a4389968f8291ec496364a1660a6729779f5c6e72393b2eeebcf9dd14c5cd2177c87cf6fcc480000012800000090fc357e4b3638723ce6521b8f7bb2351c46b51ae6dd99e31f505e5db71ddd7e13f967c4637e1410c0276443d917c79e256867e4b51dbe8aba7e909b456521a64a52c06a99124ffb185cce4749e9fc277224cd83b938fd63d06efd46a2339fb293bf4d0bb315c2da134aa51df8332159631dd3248795c0af2013bcc202c54eee7d15933253f2e9b6a283061e7064a7d7c5000000907c220a90b0596da975bac786b02d9e04749a2c651c8be545d090ae0d030f3420a66fa14a1dd9a3596b39c66d120405f95b1252b36e7e2a54c2e07827d372f89ce37ad116879ffeb7de85029f6ee695fe1635abc577dfb19dffe3bd2a30ed62fd5ab3e1ef7889ac023bb7f668615c05cb227cd0f6806a4603b8cf09015192bb99f11d35fb5557a2b4b3aba455923a39e20000012800000090283730f54a9a6cfc2d445c2bc630f15bcbfe8f2bbe5282c6ad13c786fe4e2e103b15ff297f027405a902f9f9cb750e323b024580b09a16358b5408f681102962b9d417061414a7f8986b71594209feba1d3dad14342b383bfd19f4f77b765fbfec9afb396877fc1b0f1f6505164c55601203c5868c1697f972a511ed0fdca26cbe803eb687da9e603f4ec860ba4bd75d00000090a3afc310155b649e1bd94b7c0a74200e424d1242c1c04f8818f5410a7babcbac57345492607cf4394c3d017a98a71560e711c98c27f3dca1b15720e784d5d52469ad9e9cd82563538bbe77b947f2ab7316f47895abdf35267a07c85b56b087b37ddde156fe94ea0d4fce3bb593fcb5bf265421c4cab697310a125ae801aa49b5f732a52ee008d4952aedd735c3af7fea0000012800000090682e294c9167b5ae46a4376ad5d829194d1ea4c09f654f2e02b5f660b416ce262b7842f5c550fe448f1134dfbb5c227f841cf9c5ca8dc84d31c433b6dfbe26fc22449b3689033ad21e85013b6c6d33c80dd19cd9adeef51bddd475ee8d5263c84cefe5e6b892f22936790fb523e0feab12b2aa098e302cd1366ec9503a78061c85a4ebf04813ac2b5dd2f0e002bf024c0000009031d626f739d361111912cced7e9f4a0c8988e3917a31921e3b59625857ede0f79f5f32330b62c18da1e180334baaec493db31a69ce91dc412b9bee9585f0714c1df6c8559d707ec22e1b50c1a0d31f362123a42d3d350f60deefa258350b6c3fa0511af99ee31df89f9789f48d6b2ecf00fc2033c0b2c76af9f3781a92eb1e05180ad64065ddc4711624888ea38bbc180000012800000090a44200e1628d80baed3575c31e7bea0b7758d753fcdd348c18c7ad928a38211e2e71b9dcd2c1cdbc01eb65bb75f432bc723d0e8f6e2745ba1709fd8dd29c78fb4c966c38c4294f52bc8edb336303ff5e0144806e7f3d038d88ff35755de9cb4818c1fd1c2181c484dc5fac3625bb93f00f06349d79a5519bce74094ff68fbf40e8e9d02827477dfe3ede77dac198e31a00000090049ce6db6788a93867dd5bace56f44b9313620f1267997d2c37717777eee47c23d8de5e7dfc4d5d45e46e93b9d83e3255ad361049de83137ff85a782367984d6a6765603242a449ec1ad391ce49e1d292920ec2d0d6adaac04a94a0ec96019d9ed6b8e230eaf3d3d7b355b6b2742443e006216bc3493a71f798a1493b569e4a7e60089ac60e3b4686a7e290c9e1e6549380000000000000000000000000000000000000000000000000000000000000300000000000000000000000000000000000000000000000000000000000000030100000000000000000000000000000000000000000000000000000000000003020000000000000000000000000000000000000000000000000000000000000303000000000000000000000000000000000000000000000000000000000000030400000000000000000000000000000000000000000000000000000000000003050000000000000000000000000000000000000000000000000000000000000306000000000000000000000000000000000000000000000000000000000000030700000000000000000000000000000000000000000000000000000000000003080000000000000000000000000000000000000000000000000000000000000309000000000000000000000000000000000000000000000000000000000000030a000000000000000000000000000000000000000000000000000000000000030b000000000000000000000000000000000000000000000000000000000000030c000000000000000000000000000000000000000000000000000000000000030d000000000000000000000000000000000000000000000000000000000000030e000000000000000000000000000000000000000000000000000000000000030f0000000000000000000000000000000000000000000000000000000000000310000000000000000000000000000000000000000000000000000000000000031100000000000000000000000000000000000000000000000000000000000003120000000000000000000000000000000000000000000000000000000000000313000000000000000000000000000000000000000000000000000000000000031400000000000000000000000000000000000000000000000000000000000003150000000000000000000000000000000000000000000000000000000000000316000000000000000000000000000000000000000000000000000000000000031700000000000000000000000000000000000000000000000000000000000003180000000000000000000000000000000000000000000000000000000000000319000000000000000000000000000000000000000000000000000000000000031a000000000000000000000000000000000000000000000000000000000000031b000000000000000000000000000000000000000000000000000000000000031c000000000000000000000000000000000000000000000000000000000000031d000000000000000000000000000000000000000000000000000000000000031e000000000000000000000000000000000000000000000000000000000000031f0000000000000000000000000000000000000000000000000000000000000320000000000000000000000000000000000000000000000000000000000000032100000000000000000000000000000000000000000000000000000000000003220000000000000000000000000000000000000000000000000000000000000323000000000000000000000000000000000000000000000000000000000000032400000000000000000000000000000000000000000000000000000000000003250000000000000000000000000000000000000000000000000000000000000326000000000000000000000000000000000000000000000000000000000000032700000000000000000000000000000000000000000000000000000000000003280000000000000000000000000000000000000000000000000000000000000329000000000000000000000000000000000000000000000000000000000000032a000000000000000000000000000000000000000000000000000000000000032b000000000000000000000000000000000000000000000000000000000000032c000000000000000000000000000000000000000000000000000000000000032d000000000000000000000000000000000000000000000000000000000000032e000000000000000000000000000000000000000000000000000000000000032f00000000000000000000000000000000000000000000000000000000000003300000000000000000000000000000000000000000000000000000000000000331000000000000000000000000000000000000000000000000000000000000033200000000000000000000000000000000000000000000000000000000000003330000000000000000000000000000000000000000000000000000000000000334000000000000000000000000000000000000000000000000000000000000033500000000000000000000000000000000000000000000000000000000000003360000000000000000000000000000000000000000000000000000000000000337370000000000000000000000000000000000000000000000000000000000000400000000000000000000000000000000000000000000000000000000000000040100000000000000000000000000000000000000000000000000000000000004020000000000000000000000000000000000000000000000000000000000000403000000000000000000000000000000000000000000000000000000000000040400000000000000000000000000000000000000000000000000000000000004050000000000000000000000000000000000000000000000000000000000000406000000000000000000000000000000000000000000000000000000000000040700000000000000000000000000000000000000000000000000000000000004080000000000000000000000000000000000000000000000000000000000000409000000000000000000000000000000000000000000000000000000000000040a000000000000000000000000000000000000000000000000000000000000040b000000000000000000000000000000000000000000000000000000000000040c000000000000000000000000000000000000000000000000000000000000040d000000000000000000000000000000000000000000000000000000000000040e000000000000000000000000000000000000000000000000000000000000040f0000000000000000000000000000000000000000000000000000000000000410000000000000000000000000000000000000000000000000000000000000041100000000000000000000000000000000000000000000000000000000000004120000000000000000000000000000000000000000000000000000000000000413000000000000000000000000000000000000000000000000000000000000041400000000000000000000000000000000000000000000000000000000000004150000000000000000000000000000000000000000000000000000000000000416000000000000000000000000000000000000000000000000000000000000041700000000000000000000000000000000000000000000000000000000000004180000000000000000000000000000000000000000000000000000000000000419000000000000000000000000000000000000000000000000000000000000041a000000000000000000000000000000000000000000000000000000000000041b000000000000000000000000000000000000000000000000000000000000041c000000000000000000000000000000000000000000000000000000000000041d000000000000000000000000000000000000000000000000000000000000041e000000000000000000000000000000000000000000000000000000000000041f0000000000000000000000000000000000000000000000000000000000000420000000000000000000000000000000000000000000000000000000000000042100000000000000000000000000000000000000000000000000000000000004220000000000000000000000000000000000000000000000000000000000000423000000000000000000000000000000000000000000000000000000000000042400000000000000000000000000000000000000000000000000000000000004250000000000000000000000000000000000000000000000000000000000000426000000000000000000000000000000000000000000000000000000000000042700000000000000000000000000000000000000000000000000000000000004280000000000000000000000000000000000000000000000000000000000000429000000000000000000000000000000000000000000000000000000000000042a000000000000000000000000000000000000000000000000000000000000042b000000000000000000000000000000000000000000000000000000000000042c000000000000000000000000000000000000000000000000000000000000042d000000000000000000000000000000000000000000000000000000000000042e000000000000000000000000000000000000000000000000000000000000042f00000000000000000000000000000000000000000000000000000000000004300000000000000000000000000000000000000000000000000000000000000431000000000000000000000000000000000000000000000000000000000000043200000000000000000000000000000000000000000000000000000000000004330000000000000000000000000000000000000000000000000000000000000434000000000000000000000000000000000000000000000000000000000000043500000000000000000000000000000000000000000000000000000000000004360200000000000000000000000000000000000000000000000000000000000005000000000000000000000000000000000000000000000000000000000000000501100000000000000000000000000000000000000000000000000000000000000700000000000000000000000000000000000000000000000000000000000000070a0000000000000000000000000000000000000000000000000000000000000701000000000000000000000000000000000000000000000000000000000000070b0000000000000000000000000000000000000000000000000000000000000702000000000000000000000000000000000000000000000000000000000000070c0000000000000000000000000000000000000000000000000000000000000703000000000000000000000000000000000000000000000000000000000000070d0000000000000000000000000000000000000000000000000000000000000704000000000000000000000000000000000000000000000000000000000000070e0000000000000000000000000000000000000000000000000000000000000705000000000000000000000000000000000000000000000000000000000000070f00000000000000000000000000000000000000000000000000000000000007060000000000000000000000000000000000000000000000000000000000000710000000000000000000000000000000000000000000000000000000000000070700000000000000000000000000000000000000000000000000000000000007110000000000000000000000000000000000000000000000000000000000000708000000000000000000000000000000000000000000000000000000000000071200000000000000000000000000000000000000000000000000000000000007090000000000000000000000000000000000000000000000000000000000000713000000000000000000000000000000000000000000000000000000000000070a0000000000000000000000000000000000000000000000000000000000000714000000000000000000000000000000000000000000000000000000000000070b0000000000000000000000000000000000000000000000000000000000000715000000000000000000000000000000000000000000000000000000000000070c0000000000000000000000000000000000000000000000000000000000000716000000000000000000000000000000000000000000000000000000000000070d0000000000000000000000000000000000000000000000000000000000000717000000000000000000000000000000000000000000000000000000000000070e0000000000000000000000000000000000000000000000000000000000000718000000000000000000000000000000000000000000000000000000000000070f00000000000000000000000000000000000000000000000000000000000007190118ed29009967db1af193f6fc8620824c8bc6022956acd33bfacbf6df344522640000000000000000000000000000000000000000000000000000000000001200000000000000000000000000000000000000120100000e00000001bc000000903b828d7859f78cedc16680f7a40c7fcf6ed3d1c47d1486265d7917684a7581db16ad9d6918acb6fce893138efcce9280fa9c8b2eab43853b0c19d2639a68b5d2fc08d0903476f28cd9310f1450467688299354d5a5362e2998b543fe6805a424ba837b989dcaec1b9146cc4f6bb7082c22f6b52dabc407def05ccb2e7aee729c75477ea6a8bed998619d2cdaa23041df000000907c0dc96e6ef43a5543118c2678021cb0adcfc8cddde25ac76a2e944cca81975b8a8841d137054447a4d0744fe4ebe09588de6e5e245850bebdb9c66a2a5e8e9b597990e35bb3565d4560b8c05fea841e0427677e39e9311d67378d5fedc0d262800b342431ff81f3b0c43d532f7b8b73285cbaade53414cbcdb59ced3e003f485ee9d5afac2831a3253e76ae9e92e9a600000090f1345dd5089c27454b4c5c77bedaa34a7b288bcdab630a55f397034fab7e67fa125c94a8e41e5fedd2c3a404ade4dc364b40f54d8ef35619b13760b74f86c72211a79cf3f0a7f84ee039496bd3452d8514249ec0fbf59341eab49b3d67e88e298901ec246c0b84c80f979364b53168f1049ff25ae0955428fef95050e8737e7b0810313598171830b3d03c3cdd82a7b5000001bc000000908562120031e2a788c30cac42ea25b6412219487c2766fc3a7805786f33a8db0591b30383f1a6ae3f2e3abdc3fbd41310b5385bc7aa9b89ddb2c8453694e84293f1d3b79d3239964fbffee68e9637e861287efdb26d602949f711a6a5444855bcf4df7f2fbf98bfddcafc27156f35a8170d64c6f4b42d95796b38d0596a0508e29ab1fef5daa2369a040a02c4fa9e7c4700000090f710d293125c2b81200c11f1a80a9acb0e320c306c0ed4c6c08ab09d82c1b2117482e51230a641d5eb775f49ffbe8debbf40eb5841fb9f13c8aca2eea489ad9ece0f2e3db2e89f0f60f41b6f019ff5021968c52c94ddc6915de6c2d0bf89439da04aac7135338446b576cb14873a4aea25ddafa3938744b65a794593b6249fb3231f4f9f443306abadf4127b4939767e0000009016dac03c72aaff55b1c99789382a8927c6714b39f393c7ab47e0c3a8a04bee3219263d99fd77a17c3d04fb384728c5790ea85e922811bef06b4ad7c69d745b6f7767ebd10c3ffe781330ce3e20d6f90204a85ff21d85b6843b2ccfd55f8bdf82fe3aed6ab6c1e88279255f4c953ca02507c10fb95a3b8dfb1e82c2c77771d13e274115a0f9b442dbbe0be4ff8c0abf50000001bc00000090b87cd01c19c39d7490ee0ed47f25070baff17f38bd27a2b4024970b693e609d5e7ef74274858765436776abaf5f689cf3018798d4f477b0ebb0e9a0c5d33f05e28b7262ebdcad9a96bf20e7555fd1d610cbdc61cae911e5498d6deb6bd092f8198cde072bc97b7b4376cbbe3994a70182b7c8c0d60098f1b643abcb2b75ce8bb5f276d9d9b244ac665b1199a5a1e8d3a00000090e3415b82da538e9e7e73b71ebb2180f4771748688cab60a1dfa3de7f9a1bacb30c959c332bdd68ed2c5f443f530cb0be5fab28714ac6bd96370333c39f74f22ac67bc5255bdf45315f7234c5bd4ffef20d72c2025c66c08cd41137ab956450fdbf9bb1a4212059ced136a7d6a8cfeded2eb17f44495c7ab5dfe3682856605f1f941f27bc54bdd23009a30b07a15f3ab40000009066a4fe70b493c564c312363dad2a270815539f8565925d0fa834ebfae00aab651cafb08911cefc73aeff0f6a172deba8122b075098143c0b22fd006905ac0bf9d93c4ed89b423537138b2be66327ea2c0b2338b24436ba4a8764c10b1464ce80d638f1bd4cae2e377a6ae67f208a25241514e0e4cdd3cdb7344aa928c458d60c5b7adc500f243ccf53e0ddfb4ead23db000001bc00000090d2f5ca412585874f7c6628bafa709cf208607c8a8aaf83613409d8aeb8a164af39e676ec9ec206a748e5cdb1d2868e3789da4a77e60e57a7219931eca0b84826186d17fa8223f545fcf3e5fbccc747a3024ee3f4884c8c8107029e7f09d5011c3b28bfc77853c2ae743f99b75b652fb11be3473a86eb1655b8aa0c1af965ec88e6bce1993ff73e334932d93233a66c89000000909a7bfc1aa6a4419d5f925cc780b05617c335fcb1156522212be91f29d1334887c1282f92668b05cf6b9b1d2a648eca143f57b3a849796d9776c87924a1ee9a1b539b5cf3f3aa4dcd0e245ea58c5407d9039ae68d91d636eeeb5aa8b5dd7a492fe194fba67874b2d00b22685ed0fbe8780b079a68f2f2022ad202eb924e0b7bac416648565b15f5f36d39d18bd630a771000000903701066f6c2198b1a7f3ece27fc6d490e7fe4dd86f1b5c134ca84696a8066a44e487c20bf664b02aa608f0ea50b44e4609a0b315215a8c341731256e137d38039f35b94e33740211406c2d4ce4c7c2ef296227d3bd3d060d746d140639ec9731d8c34ecb32c0a9eeb6d32dc1ff653e3e273fdec7c9e1c947e2cd50b269f3b2af8610cdb6de62d698f5c438b3c3a43e0d000001bc000000906c57cf7576eae7a88dd5bb6eee583acf12f281f536a82a779f0f14bd49cdaa6b9dc34c4ed4cce829c9fe305c13588e37a9812917442a956683f937e29ae2165f4ae55e9988749879c7c301e1bd6533ba216030404373ddb2cc4e366891a98d5d1c3ba0ce3e176e18e022e247a7b413fd10fef6799a79e0fb65237e8d728d92c03e18e373c23ed6d482d63ad8d0f32a9400000090ddfe308abbad30c9787b8f9e84e9bfcd72b5123a961f354f413d43fc01feef1ddb00b6405acf5dfe27109822c767a795c2703df8dfbcc1914a9b6d055f0f68cae03f9edc3a4c005c4ab6a4af237f73132c49c52b8a3079d889e1d167855d71a7358904e737f1b106f37c5aafcb50cd842b0ec7983e93dac5c9df1d9011606aed63bf6ca6e5879175ea87b48524ff1868000000901f315b1afaf5f80f9278f1f599683cac25c938218219942c8316858c1b3f9b0219e776e08f21999a0360c9a7dc097aa6ce0619e0a39bc5d6c1f0a4956b5dec1c0aa5b4d01697cf2db2d0055c945973b50d57401a7413c7a2bd36d25116d6188fb23f6464b46d5670866fa212c025db4417495dcd8f6efa561173beca3d1075f1c33134b9a1367f92dbcf02522e4b3726000001bc00000090b420881bdbede638aae488cce7a0bee910a9faff53fc0ebe42d754384da50ce7fe95e234896e296b281eecf8ad93afbf6b6f287d181e60c0ba5d7dcb2233698cc0374ffe8f6d9f826fddf2f6f522e46905528a35677ec35917ac59204877b69ce81fdd072e2dc5831badbd68bee895112469f52a632422b98aa41d702b7e2488e6ea3e13c6fab9eeaf780bf0cdc7560700000090dabc4c6550d65307aa6ec775af56b55d33167d855e20202d1ee9539378acddf575d252b7f7b9d38437c810c4688a68ddff9c67fa47be6df2321e0c4b5811ba2c59d88aebbb28ef2ea2be5e1a17bf68f5062dc55360f4632ee841992992d0f2206870a4bd2912b8fb73ec61662274bda218483be944c006c7c05b65399c5ac0868cb54fbab48d39ce735d72247b8f903f0000009020a4ac457f12bcd3520e48b2f83e85683cff51997cd73f8249888ef22905e7138f49242f1d1ade69038f9546c1daa067af35445b7078d078c97030eec62029903f086b3e0adb76b65cd772a356ffbfff165c91dcb24be3224151cc52dcc96203d4c3b1eba15d8f5d103e1f140e9681802ccccdad71d4c154c953575488dc411a33ad273efa8c1a2539b9622e6fb22dda000001bc0000009016531ee5e355bc0cc2fd99c7ff4c3ea28f1d0778e98d8f6212e73e8b3a571cc85c31541b05cc5441678551de3ec76b3e82c4cb882fdb51110e85a1941398c63ec9f4c3076d1fbb78dd6098c94be739f42c924d7dfe541f1a2d82fc7bdb97de827d9b0278783ecea787c427db1d363b292c8e967146d4ecc4d0f405e5497ff56f8ba95b0a067c82657bba0cb552a705a700000090c8565a82755e3bce567c206927a6f613def3e385109df6d53a0b5dba2a15d4f980b24ca1cd04b51306f54f294866362c7db7321020715dcd5ad8d6445d58a5e39904d5bf832a13e82a8513f363bfb1af2f4974fceb07e52c0cec86ad408eb23d408c5bea37551fdf4c8fb775ce55e92523e5b7ce0d2c225e05c6f09669cd909723e93ddee6928ad5e36831ccd409fa3100000090aad66b5555eb77a4cc9cb808d250de1c8c376006d0ebf094700184004b476cefafa766c0480a47942dcb2c99880f55b1e3d6aa699f60f528ff546cd22fcc1ea23e099a1815265ee8ea0b52b7f2250d941c47c9615c70a731c43e103ceaf9f211e4ba36a8d4a7379b71fcab4d08c2a32629ed6ee6494df8d6fb1b1b32a28053a0c0ad074529109e5fc93a04138e4bcfd2000001bc00000090feac8b8cd2baf93b511d36a741441a6e34b181138673f3fe863b6835a0a2a3aed733526d4ac3fa6036493df887253e31605d849e9ec6b2ea742230ea7ba0d7cb590cbe4714692d3af086468301d1116f297155771a7cc7687119544617c2836e6616d32a8e0eb14da5cd7cc5e61d615a1b307c0b22801ad16dd832d1d38dc51f2689d78cf9f2b544e6cbb96cc7609551000000909a1059fca8a2af101a6b24bc63710e5c2db11bf913999b3a8d19456ada74db23ff99e04ec3db0b673ef49edae2c05708d8193abccddd80ffb60fd18797e7fb96b094a806771bb025321a7459992f206124460e3d8c30fafa332df620e819cfb7ed9996b75ae65257b367be95596075940e304b13b8eee1416e3ddbe0f7e09454bb4d462a9173d933213611855cff301800000090b3f074e4b29455f4daba234d06f3d5f00358a374390fd8f06e9daaa7a288ac7255dbffd1e8b6877d45dbbc7dd29d4b0bce4a50ec16cc76acd1a7cb5ddf7e461fec1678e752db4694796521f373bfb886050e94f91a38e663bac73488785291d1e65a1feb8648d1b799a8ea1260ac690604bf06e8593a14cc9ef3058cc8451da973d46f511f063eac90a66f2e77f8ccac00000ce4000001280000009059f5ab257186a7af21ef99e6fd69af117902599f2144c9d6ec351fd0adf54150bba3985f1a0079fbd7fd0ad85d5323a8558fd8670548a5fbc0c6885c3a03167d442d4993854c977cff5e20639e5a83ad26dc790c737ec06d9d1432f29eab663eda7d844aea61a3cf7bd05626e587c59a03d6491c5a0a3d7a764c9627cc92b8edd01db19d01d0c018533c1c958b4f621400000090fbfeee23f2a2f63e193572dfac5f8b08b23b9c58fb68db5c535a1069f19b473ea03fbe7f99d55e1c63f42e19dd0f1cadc510988a9592a54bc5cbe89be4719f07d3bbb240e3e49774aef6be94637085861b852628162991234655e6e14077e0770cb588511523ee610e66c0d9fb9212a32cc07222b1b0dab812f1ded38f9b6f4dc613ddef2ee6148e68b2e7c861631e9d0000012800000090106229fc8a5c280e511d7cb9ce02e274e8809113ba98ee1df2d14a5450ef4374b3d4348332c206627284c7f14853430293e2a46a445bbab2a1a05a1054858fb9a36d42cca9bc2e544f451e91dbf229562a7d1dc7ba4afd09beefd96f4a6dbc69c86f9d8489fa75b12c888851cfb0e4c003c5a4db9328455511e6426415308fa0fd4c255923e0a3c44dae14fb02a2197300000090595f3808ebcd29ff85776e439adcd08b97a6f63c52f69bd7a0accef69dc1795307c8005c363b8e69ab093ba458f9b1c341a1dbfe24fc97ee77c9c2b6953f146a56004489ba698116203200b8283d492a0726477af8297d474c33070b4dedb7678f1062ab22c5013b8e884213354c47021a697efb13fb122b1e8f2cb493f95265c603e9827db12cf33dd3ca37f3af53d1000001280000009093ec86715081e7674547c4e70cbddbe428e1d88a5671a6037864af3fb86f4109dc46a6395e72f32b8b938ca28ca6d2be564e4f4e5b067f5fe08b494ca9a3a5b247a677acc8f810886e5f0b5da2b0e8161fc6e87c5f4abc6c57504c25526907622b9eb75d9d719c27d0b6c41f8f144354014e41b6bbc0c6505df65746542f3590a404cb5f5d42fd54bf649078f5874b1f000000904f99baa6aba96460cd8bd4d823a569a807c70547298113d4274108712ca2ac3594b4e607642f4faf6ba9b78ece4140dfec0038ecd42aca74da814ba816fe276bcfa83941dfcb0de98070310f72e354021112515ab93fcf3457a0595dc19ca55eb832978b7557133a77288286272b97a010d1c5cb48cfffc2c2a1092cf2cc0bc0518cf41f0ff94ed4520705bf1de642f9000001280000009028570dc57886c089a5b8965d40cb4ed1a80bb6984a1b93e1059b4662e238d4eb984e9c2668e05fe7f7bd179fa21a7f296e99b1d4bd127518a9da7759eb9b42de7e679ceac7d71ed9c407db66d81a8be4248e7c2fca18db4ab115b2dc082c447595a6b683cc1658e7ec964814c786bdbb06f263c942ebc6065e5ff5b6b2bf77fce88a194f2c3280e983b190adecdf10b20000009042ca26eb46359f9d42db337807072fdc0666cc2ce2d200f58ab086016245ec032ade29e15ab91c241486f5c7daae34ad2628406db126b538e249f2e8f0dbb31b14bec40daf251d200e9bee60746a8871043ac33f4b878ae326dbbd3a9dbd1b6e4f8ab0e21d4350e5de6f53bf08d190433038de980f812251cb228dd3a1d9f46f8bd5f240fdd85089f0644a0010cb4c340000012800000090c2f626f21e09069696baf8fa875de630f7cf5cf097b8b0270d3a7ad2519e3142b9b1be7754c1b3637a7fa4c6ef2405d41b89f0b7331fb3cfe5b453d06e9e28b0e68a3136282a384a46dfc3e703aa65e11bc5008a946eba7ae6e349f053d65862cd7db52511a7f32d5a7d085f73fd48302fe60f475f307fe8cc3e18926d12d2155f6643df3e2f3c179631cb2a2c6619cd0000009035c4ea54a36c2ebc1d314f5a93aefc716a74ccc613276ac278a210a125e85018fd6e4c325ff54f97989deb78a1697a0e417271e540aac991936dd3d6b39ecfe1b378397190e3dd323387d033e25ab0d92d64729a654af526d9053ed3b81520c335e805e6fdb8764ddbb18249714e34d00a64d5adf466746a43cb6927adc1d20d8049cc9785f92127c9acfc15db942d440000012800000090656ea004b755ef9e6406b07e8dfb62c1195ffcd61e66e78fa1ea91fc7c1e95ac61656283e0d350a694c680c93baf87d8b6dee34eeaa9769605ab91e86e6af2cd1c230606105be75224f659d7e38da60b28896e5edcb1ccd56025a2a6ec0fd56b130f50e93b06bcaaa21c6a45572ee25626555049ce1581789b129f12b187268f576f62bfa6f73d2f70c9ae37cfa71abf000000906336acabd4389fb118e3072fdefd3582105a76596dde657cd3e29e2cf67976a497642ca9256c385538e33b6d4132000607fe7b0b4877f2b8b735b7641397bcdbbdd5337652ba37bbd5b972e9b7e6766c003a444d55b1158722fe611f346efe5a1f8cc13a1be866c9162d418e99eb02030e9e9f5df5179b7cfc2a89c94296d45593cba292da2dca217e8f00acfd4d22b2000001280000009047a5acf04e30ae066a340650fdbadf1ef63d87ea18782791283d7a0dc0ad8dfed31823143d0f9a03cc34be21131ad065dd79637db14fd28199b81fc0f40e3007078aebfef0138315b29f5965361a70141f95273e0893f9b41fc4a28d6780d995136aa505d35035cf760d2269696e375c280fcb8bc9921394a4a2b5349d8508a6b2f6cc5da35e01aca31894680647a8ad000000902424589013e9e6b78f34a4960562d31f799ba9c167f9d89bba41526f43cddc32c4c6f67a95bfa31736b3a98efbfeb46b24888ef9c9145f875fc0871138c58a64bbc12e1a01c3a403e5de8fa38a1c788f22703e0e8dc99f8384c34b22a74b3def9728eeb2107830a61a8091a1d0c7b5e008e6225c276be126b9264637036b23438672c54e3ce150a3d3cdee9de04c370e000001280000009052aa1da6e2e966797d35d5d0af392262e17423c79536b79b67afb0db0cb0c854c86e99d1bf4dc5aaba1a32be124c6e37c5012d991a61eb76254742517ba2d250c7d840b9aca3058bd59c9b42961482692a93a0f3414ed284415968c40c461bb096dff7e4789137795cac36d61aca6d58153723f0ca5fbe818decbac08362ee90998c154f4d2a31c293be4421ea612bcc00000090eef8af7aa1711e59f6a1a4b7d8c7bdda73dc1e172e1d2ce635bf85425cc5c83e37b9d2239f689fe12db3ecbdf4bb48fcb406d0f05ca34792b8264e50001f400909eb4306a47e911672ddc6b69dc83c021421f208604648442b97e24f3c22d14970b3a7605ec5532fedf90616d6c70c930374a1edd3ae1a6bc743d83771243440551cf8f202412b1bf67c1fde473d18800000012800000090824044d9e34950780e364a43e39405f25f2628502c94a9e6984010cab44e35925801d0421b98ac7739041138f114503cb33d9a998b6109324460c0d769c0aeb860659a40837d12c9741a1d6255746cbd2ac70cc7e833f2abe710f2eae2ad53e5257038c3eebedc4c7b241eebca19159d2ca71750500307d6eb6068880f39bb448401d4d31dc956b08939020a0fdcebff00000090987f6c177ae117eee62f04ae3ce020cf66a2dd93806f1a338ad613ba8a72b043af5bae1765caa0f1ae5ee4d76bed5e85c4a5a448b73b4dc0a394eaeccf8b3dc3cdae41899193668c99c210a10cc8bac213c92cb4f34410ef1c4721bdab4e5125a262a5638778cdc5b37349739fb778591d78fc2c1757e78718f55afb7a30ab48aabc3f35c00a23a41fcd847f2626de0600000128000000902ef2428cfbefde2217526e9beadc29a3855ba73ad7f341b4415d537f702f783c26861509f0d69c72185922bf8163b7f2fa163834c2f82e52d8643481f51bfe853ec9f6c98170d92ecb231770a7e3ae0f21002c3325d1b9d1f0e7d0c01c41da017a91f1a90a7377ee1116596e6a5c8b82286013c9dfbf5221021481efb81a0d05134ef8223e6cd5d2c5f84ae8e5c05a8200000090dcd4bfd971d15c89be05b35acda42b9013d98226449ba21eb2c8675a26717050547ff9a3550f14c2bac70c81b0e214f561a58d55b07152af3ef6a1bea48cbefe1aac02dd7d60bd8a07e5e5843446daf524d4601b75682efd2b359a60dcf97affdc72272b4d0e94c1542fbd7619400cfd23ef88c1cc040c326419938a80f22309ea8f6ee400ac1df6f05650f6b6f9870000000128000000908ce58f04e81a9c536275a2c777307d53a672cdee085666e40098a6d09e1bc5b10c4101b89352ba88bc65a14eb78eabe5291759fafc0ba589d04102da063c9d3ff01849c6e1648195cdb760859c685e9615bd2b32c47c926894316e4e718cb9f1092a436b73fa053ba071558635b2d6690f3c278007473387d4551637ed5907315b4d6638120329a7c3668bec4240a3a900000090a23feeae5ca2b36010e2b12ab124f981fab0a895d8c82b15911a299de3f5e15b9c0b78a3de89c45ad06913c86c16b59d87555df0fd36fb19d4056dd528c197112eb4545e0bb736922683b70f3d4b3358202cee21c1a388ce98245122fbbdc5c4684280ab3f38d11c70c82c7118d92b7c287128b90319abcb2a3ca610af9aa5cb1f4295b16266a3d806fbb8853129ef2e", + "calldataHash": "0x9f0e7fe5deafdfa9f4bd5f50a393ffd7adfc24d5793a2de31fb59d9392529e02", "decodedHeader": { "contentCommitment": { "inHash": "0x0000000000000000000000000000000000000000000000000000000000000000", "outHash": "0x0000000000000000000000000000000000000000000000000000000000000000", "txTreeHeight": 2, - "txsHash": "0x852c9f4a2573aba9083bf8e223ee42d5fdf7cde6dad2dc7b5583bc293267ad48" + "txsHash": "0x9f0e7fe5deafdfa9f4bd5f50a393ffd7adfc24d5793a2de31fb59d9392529e02" }, "globalVariables": { "blockNumber": 2, "chainId": 31337, - "timestamp": 1708461079, + "timestamp": 1709131553, "version": 1, - "coinbase": "0xffacad9cb3ec2488c5c7c4701a83238fe532696b", - "feeRecipient": "0x22e7e1827190390616484b040b29ebc256a00fb45ce0e662c9d1e7a6154feb5f" + "coinbase": "0x550c19cf538b79ea72f4025a5158ec65113c2f54", + "feeRecipient": "0x28dc0c5131f93f289580b636e9ac08a9670b2475b7373ab0d74c9ce6007176a1" }, "lastArchive": { "nextAvailableLeafIndex": 2, - "root": "0x2e407b925ce2053006ec1210d2bc6eb37405b01549cc4e345cfe8f2ccd708365" + "root": "0x2c1c47b1efd000ff25eca83fdb583987da6c35701eb0fabd203c5c0e9824bf26" }, "stateReference": { "l1ToL2MessageTree": { @@ -82,7 +82,7 @@ "partialStateReference": { "contractTree": { "nextAvailableLeafIndex": 8, - "root": "0x022612683c6c4a0955c8248d409bc8ec8776d96a3bfe5b5a7e76e492a4f26cb0" + "root": "0x05cc2e9c54598a9b5cdf0983d442311b0b963c93ce46c5930be845b12d616b9a" }, "noteHashTree": { "nextAvailableLeafIndex": 512, @@ -99,8 +99,8 @@ } } }, - "header": "0x2e407b925ce2053006ec1210d2bc6eb37405b01549cc4e345cfe8f2ccd708365000000020000000000000000000000000000000000000000000000000000000000000002852c9f4a2573aba9083bf8e223ee42d5fdf7cde6dad2dc7b5583bc293267ad480000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000006c76caee115a61eeb6788977c68a3bea359061b678a1a4f5ffde13e0451717b00000020023ef973dbaa366409f7a01a4ced696227685ce75e57b510d0e7015ebfa72c5000000200231b77b7e0311a71fae5cec0f0281816950f94a24bfc2e67c5ae8619c6ed4c8800000280022612683c6c4a0955c8248d409bc8ec8776d96a3bfe5b5a7e76e492a4f26cb0000000082ae3a1bf2752c8c8bd6741bb3fd0d9e3811dbf7681454436125ccb7afeca31c9000001400000000000000000000000000000000000000000000000000000000000007a69000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000065d50c17ffacad9cb3ec2488c5c7c4701a83238fe532696b22e7e1827190390616484b040b29ebc256a00fb45ce0e662c9d1e7a6154feb5f", + "header": "0x2c1c47b1efd000ff25eca83fdb583987da6c35701eb0fabd203c5c0e9824bf260000000200000000000000000000000000000000000000000000000000000000000000029f0e7fe5deafdfa9f4bd5f50a393ffd7adfc24d5793a2de31fb59d9392529e020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000006c76caee115a61eeb6788977c68a3bea359061b678a1a4f5ffde13e0451717b00000020023ef973dbaa366409f7a01a4ced696227685ce75e57b510d0e7015ebfa72c5000000200231b77b7e0311a71fae5cec0f0281816950f94a24bfc2e67c5ae8619c6ed4c880000028005cc2e9c54598a9b5cdf0983d442311b0b963c93ce46c5930be845b12d616b9a000000082ae3a1bf2752c8c8bd6741bb3fd0d9e3811dbf7681454436125ccb7afeca31c9000001400000000000000000000000000000000000000000000000000000000000007a69000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000065df4721550c19cf538b79ea72f4025a5158ec65113c2f5428dc0c5131f93f289580b636e9ac08a9670b2475b7373ab0d74c9ce6007176a1", "l1ToL2MessagesHash": "0xa10cc8559615be5a44cfb608374b1f84fd11cdb5844ebffafd92a77c068350f1", - "publicInputsHash": "0x039a70fd45ce84b0f61ece2888b30b3ebd1094214729227760fcf812856adea9" + "publicInputsHash": "0x26a2ce35e53e8b8a1f13dce8ebf42867081e24b382b0d36979043263af5e9c31" } } \ No newline at end of file diff --git a/noir-projects/noir-protocol-circuits/src/crates/rollup-lib/src/base/base_rollup_inputs.nr b/noir-projects/noir-protocol-circuits/src/crates/rollup-lib/src/base/base_rollup_inputs.nr index 67777b378f9..bfe878af28d 100644 --- a/noir-projects/noir-protocol-circuits/src/crates/rollup-lib/src/base/base_rollup_inputs.nr +++ b/noir-projects/noir-protocol-circuits/src/crates/rollup-lib/src/base/base_rollup_inputs.nr @@ -256,19 +256,19 @@ impl BaseRollupInputs { fn components_compute_kernel_calldata_hash(combined: CombinedAccumulatedData) -> [Field; NUM_FIELDS_PER_SHA256] { // Compute calldata hashes // Consist of - // MAX_NEW_NOTE_HASHES_PER_TX fields for commitments + // MAX_NEW_NOTE_HASHES_PER_TX fields for note hashes // MAX_NEW_NULLIFIERS_PER_TX fields for nullifiers - // 32 public data update requests -> 64 fields // 2 l2 -> l1 messages -> 2 fields + // 32 public data update requests -> 64 fields // 1 contract deployments -> 3 fields - // 1 encrypted logs hashes -> 2 fields --> 2 sha256 hashes --> 64 bytes - // 1 unencrypted logs hashes -> 2 fields --> 2 sha256 hashes --> 64 bytes + // 1 encrypted logs hash --> 1 sha256 hash -> 2 fields --> 64 bytes + // 1 unencrypted logs hash --> 1 sha256 hash -> 2 fields --> 64 bytes let mut calldata_hash_inputs = [0; CALLDATA_HASH_INPUT_SIZE]; let new_note_hashes = combined.new_note_hashes; let new_nullifiers = combined.new_nullifiers; - let public_data_update_requests = combined.public_data_update_requests; let newL2ToL1msgs = combined.new_l2_to_l1_msgs; + let public_data_update_requests = combined.public_data_update_requests; let encryptedLogsHash = combined.encrypted_logs_hash; let unencryptedLogsHash = combined.unencrypted_logs_hash; @@ -284,6 +284,11 @@ impl BaseRollupInputs { } offset += MAX_NEW_NULLIFIERS_PER_TX ; + for j in 0..MAX_NEW_L2_TO_L1_MSGS_PER_TX { + calldata_hash_inputs[offset + j] = newL2ToL1msgs[j]; + } + offset += MAX_NEW_L2_TO_L1_MSGS_PER_TX; + for j in 0..MAX_PUBLIC_DATA_UPDATE_REQUESTS_PER_TX { calldata_hash_inputs[offset + j * 2] = public_data_update_requests[j].leaf_slot; @@ -292,11 +297,6 @@ impl BaseRollupInputs { } offset += MAX_PUBLIC_DATA_UPDATE_REQUESTS_PER_TX * 2; - for j in 0..MAX_NEW_L2_TO_L1_MSGS_PER_TX { - calldata_hash_inputs[offset + j] = newL2ToL1msgs[j]; - } - offset += MAX_NEW_L2_TO_L1_MSGS_PER_TX; - let contract_leaf = combined.new_contracts[0]; calldata_hash_inputs[offset] = contract_leaf.hash(); diff --git a/yarn-project/aztec.js/src/index.ts b/yarn-project/aztec.js/src/index.ts index 225de5d90df..527391ced3f 100644 --- a/yarn-project/aztec.js/src/index.ts +++ b/yarn-project/aztec.js/src/index.ts @@ -80,6 +80,7 @@ export { Grumpkin, Schnorr } from '@aztec/circuits.js/barretenberg'; export { AuthWitness, AztecNode, + Body, CompleteAddress, ContractData, DeployedContract, diff --git a/yarn-project/circuit-types/src/body.ts b/yarn-project/circuit-types/src/body.ts index 1a61dc5fa9b..2314a723fff 100644 --- a/yarn-project/circuit-types/src/body.ts +++ b/yarn-project/circuit-types/src/body.ts @@ -1,14 +1,10 @@ -import { ContractData, L2BlockL2Logs, PublicDataWrite, TxEffect } from '@aztec/circuit-types'; -import { - MAX_NEW_CONTRACTS_PER_TX, - MAX_NEW_L2_TO_L1_MSGS_PER_TX, - MAX_NEW_NOTE_HASHES_PER_TX, - MAX_NEW_NULLIFIERS_PER_TX, - MAX_PUBLIC_DATA_UPDATE_REQUESTS_PER_TX, -} from '@aztec/circuits.js'; +import { L2BlockL2Logs, TxEffect } from '@aztec/circuit-types'; +import { NUMBER_OF_L1_L2_MESSAGES_PER_ROLLUP } from '@aztec/circuits.js'; import { sha256 } from '@aztec/foundation/crypto'; import { Fr } from '@aztec/foundation/fields'; -import { BufferReader, Tuple, serializeToBuffer } from '@aztec/foundation/serialize'; +import { BufferReader, serializeToBuffer } from '@aztec/foundation/serialize'; + +import times from 'lodash.times'; export class Body { constructor(public l1ToL2Messages: Fr[], public txEffects: TxEffect[]) {} @@ -18,33 +14,7 @@ export class Body { * @returns A serialized L2 block body. */ toBuffer() { - const newNoteHashes = this.txEffects.flatMap(txEffect => txEffect.newNoteHashes); - const newNullifiers = this.txEffects.flatMap(txEffect => txEffect.newNullifiers); - const newPublicDataWrites = this.txEffects.flatMap(txEffect => txEffect.newPublicDataWrites); - const newL2ToL1Msgs = this.txEffects.flatMap(txEffect => txEffect.newL2ToL1Msgs); - const newContracts = this.txEffects.flatMap(txEffect => txEffect.contractLeaves); - const newContractData = this.txEffects.flatMap(txEffect => txEffect.contractData); - const newL1ToL2Messages = this.l1ToL2Messages; - const newEncryptedLogs = this.encryptedLogs; - const newUnencryptedLogs = this.unencryptedLogs; - - return serializeToBuffer( - newNoteHashes.length, - newNoteHashes, - newNullifiers.length, - newNullifiers, - newPublicDataWrites.length, - newPublicDataWrites, - newL2ToL1Msgs.length, - newL2ToL1Msgs, - newContracts.length, - newContracts, - newContractData, - newL1ToL2Messages.length, - newL1ToL2Messages, - newEncryptedLogs, - newUnencryptedLogs, - ); + return serializeToBuffer(this.l1ToL2Messages.length, this.l1ToL2Messages, this.txEffects.length, this.txEffects); } /** @@ -53,68 +23,7 @@ export class Body { */ static fromBuffer(buf: Buffer | BufferReader) { const reader = BufferReader.asReader(buf); - const newNoteHashes = reader.readVector(Fr); - const newNullifiers = reader.readVector(Fr); - const newPublicDataWrites = reader.readVector(PublicDataWrite); - const newL2ToL1Msgs = reader.readVector(Fr); - const newContracts = reader.readVector(Fr); - const newContractData = reader.readArray(newContracts.length, ContractData); - // TODO(sean): could an optimization of this be that it is encoded such that zeros are assumed - // It seems the da/ tx hash would be fine, would only need to edit circuits ? - const newL1ToL2Messages = reader.readVector(Fr); - - // Because TX's in a block are padded to nearest power of 2, this is finding the nearest nonzero tx filled with 1 nullifier - const numberOfNonEmptyTxs = calculateNumTxsFromNullifiers(newNullifiers); - - const newEncryptedLogs = reader.readObject(L2BlockL2Logs); - const newUnencryptedLogs = reader.readObject(L2BlockL2Logs); - - if ( - new L2BlockL2Logs(newEncryptedLogs.txLogs.slice(numberOfNonEmptyTxs)).getTotalLogCount() !== 0 || - new L2BlockL2Logs(newUnencryptedLogs.txLogs.slice(numberOfNonEmptyTxs)).getTotalLogCount() !== 0 - ) { - throw new Error('Logs exist in the padded area'); - } - - const txEffects: TxEffect[] = []; - - const numberOfTxsIncludingEmpty = newNullifiers.length / MAX_NEW_NULLIFIERS_PER_TX; - - for (let i = 0; i < numberOfTxsIncludingEmpty; i += 1) { - // TODO(#4720): this should use TxEffect.fromBuffer - txEffects.push( - new TxEffect( - newNoteHashes.slice(i * MAX_NEW_NOTE_HASHES_PER_TX, (i + 1) * MAX_NEW_NOTE_HASHES_PER_TX) as Tuple< - Fr, - typeof MAX_NEW_NOTE_HASHES_PER_TX - >, - newNullifiers.slice(i * MAX_NEW_NULLIFIERS_PER_TX, (i + 1) * MAX_NEW_NULLIFIERS_PER_TX) as Tuple< - Fr, - typeof MAX_NEW_NULLIFIERS_PER_TX - >, - newL2ToL1Msgs.slice(i * MAX_NEW_L2_TO_L1_MSGS_PER_TX, (i + 1) * MAX_NEW_L2_TO_L1_MSGS_PER_TX) as Tuple< - Fr, - typeof MAX_NEW_L2_TO_L1_MSGS_PER_TX - >, - newPublicDataWrites.slice( - i * MAX_PUBLIC_DATA_UPDATE_REQUESTS_PER_TX, - (i + 1) * MAX_PUBLIC_DATA_UPDATE_REQUESTS_PER_TX, - ) as Tuple, - newContracts.slice(i * MAX_NEW_CONTRACTS_PER_TX, (i + 1) * MAX_NEW_CONTRACTS_PER_TX) as Tuple< - Fr, - typeof MAX_NEW_CONTRACTS_PER_TX - >, - newContractData.slice(i * MAX_NEW_CONTRACTS_PER_TX, (i + 1) * MAX_NEW_CONTRACTS_PER_TX) as Tuple< - ContractData, - typeof MAX_NEW_CONTRACTS_PER_TX - >, - newEncryptedLogs.txLogs[i], - newUnencryptedLogs.txLogs[i], - ), - ); - } - - return new this(newL1ToL2Messages, txEffects); + return new this(reader.readVector(Fr), reader.readVector(TxEffect)); } /** @@ -167,15 +76,19 @@ export class Body { // We gather all the txEffects that are not empty (the ones that have been padded by checking the first newNullifier of the txEffect); return this.txEffects.reduce((acc, txEffect) => (!txEffect.newNullifiers[0].equals(Fr.ZERO) ? acc + 1 : acc), 0); } -} -function calculateNumTxsFromNullifiers(nullifiers: Fr[]) { - let numberOfNonEmptyTxs = 0; - for (let i = 0; i < nullifiers.length; i += MAX_NEW_NULLIFIERS_PER_TX) { - if (!nullifiers[i].equals(Fr.ZERO)) { - numberOfNonEmptyTxs++; - } - } + static random( + txsPerBlock = 4, + numPrivateCallsPerTx = 2, + numPublicCallsPerTx = 3, + numEncryptedLogsPerCall = 2, + numUnencryptedLogsPerCall = 1, + ) { + const newL1ToL2Messages = times(NUMBER_OF_L1_L2_MESSAGES_PER_ROLLUP, Fr.random); + const txEffects = [...new Array(txsPerBlock)].map(_ => + TxEffect.random(numPrivateCallsPerTx, numPublicCallsPerTx, numEncryptedLogsPerCall, numUnencryptedLogsPerCall), + ); - return numberOfNonEmptyTxs; + return new Body(newL1ToL2Messages, txEffects); + } } diff --git a/yarn-project/circuit-types/src/contract_data.ts b/yarn-project/circuit-types/src/contract_data.ts index c6d4f6a2b5f..6803d0c1dd2 100644 --- a/yarn-project/circuit-types/src/contract_data.ts +++ b/yarn-project/circuit-types/src/contract_data.ts @@ -5,7 +5,7 @@ import { EthAddress } from '@aztec/foundation/eth-address'; import { BufferReader, numToInt32BE, - serializeBufferArrayToVector, + serializeArrayOfBufferableToVector, serializeToBuffer, } from '@aztec/foundation/serialize'; import { ContractClass, ContractClassPublic, ContractInstanceWithAddress } from '@aztec/types/contracts'; @@ -158,7 +158,7 @@ export class ExtendedContractData { /** Public key hash of the contract. */ public readonly publicKeyHash: Fr, ) { - this.bytecode = serializeBufferArrayToVector(publicFunctions.map(fn => fn.toBuffer())); + this.bytecode = serializeArrayOfBufferableToVector(publicFunctions.map(fn => fn.toBuffer())); } /** diff --git a/yarn-project/circuit-types/src/l2_block.ts b/yarn-project/circuit-types/src/l2_block.ts index c2da9e92ece..57e4738461a 100644 --- a/yarn-project/circuit-types/src/l2_block.ts +++ b/yarn-project/circuit-types/src/l2_block.ts @@ -1,31 +1,14 @@ -import { Body, ContractData, L2Tx, LogType, PublicDataWrite, TxEffect, TxHash, TxL2Logs } from '@aztec/circuit-types'; -import { - AppendOnlyTreeSnapshot, - Header, - MAX_NEW_CONTRACTS_PER_TX, - MAX_NEW_L2_TO_L1_MSGS_PER_TX, - MAX_NEW_NOTE_HASHES_PER_TX, - MAX_NEW_NULLIFIERS_PER_TX, - MAX_PUBLIC_DATA_UPDATE_REQUESTS_PER_TX, - NUMBER_OF_L1_L2_MESSAGES_PER_ROLLUP, - STRING_ENCODING, -} from '@aztec/circuits.js'; +import { Body, L2Tx, TxHash } from '@aztec/circuit-types'; +import { AppendOnlyTreeSnapshot, Header, STRING_ENCODING } from '@aztec/circuits.js'; import { makeAppendOnlyTreeSnapshot, makeHeader } from '@aztec/circuits.js/testing'; -import { makeTuple } from '@aztec/foundation/array'; -import { times } from '@aztec/foundation/collection'; import { sha256 } from '@aztec/foundation/crypto'; import { Fr } from '@aztec/foundation/fields'; -import { createDebugLogger } from '@aztec/foundation/log'; import { BufferReader, serializeToBuffer } from '@aztec/foundation/serialize'; /** * The data that makes up the rollup proof, with encoder decoder functions. - * TODO: Reuse data types and serialization functions from circuits package. */ export class L2Block { - /* Having logger static to avoid issues with comparing 2 blocks */ - private static logger = createDebugLogger('aztec:l2_block'); - #l1BlockNumber?: bigint; constructor( @@ -125,29 +108,17 @@ export class L2Block { numEncryptedLogsPerCall = 2, numUnencryptedLogsPerCall = 1, ): L2Block { - const txEffects = [...new Array(txsPerBlock)].map( - _ => - new TxEffect( - makeTuple(MAX_NEW_NOTE_HASHES_PER_TX, Fr.random), - makeTuple(MAX_NEW_NULLIFIERS_PER_TX, Fr.random), - makeTuple(MAX_NEW_L2_TO_L1_MSGS_PER_TX, Fr.random), - makeTuple(MAX_PUBLIC_DATA_UPDATE_REQUESTS_PER_TX, PublicDataWrite.random), - makeTuple(MAX_NEW_CONTRACTS_PER_TX, Fr.random), - makeTuple(MAX_NEW_CONTRACTS_PER_TX, ContractData.random), - TxL2Logs.random(numPrivateCallsPerTx, numEncryptedLogsPerCall, LogType.ENCRYPTED), - TxL2Logs.random(numPublicCallsPerTx, numUnencryptedLogsPerCall, LogType.UNENCRYPTED), - ), - ); - - const newL1ToL2Messages = times(NUMBER_OF_L1_L2_MESSAGES_PER_ROLLUP, Fr.random); - - const body = new Body(newL1ToL2Messages, txEffects); - return L2Block.fromFields( { archive: makeAppendOnlyTreeSnapshot(1), header: makeHeader(0, l2BlockNum), - body, + body: Body.random( + txsPerBlock, + numPrivateCallsPerTx, + numPublicCallsPerTx, + numEncryptedLogsPerCall, + numUnencryptedLogsPerCall, + ), }, // just for testing purposes, each random L2 block got emitted in the equivalent L1 block BigInt(l2BlockNum), @@ -190,11 +161,11 @@ export class L2Block { * The same output as the hash of RootRollupPublicInputs. * @returns The public input hash for the L2 block as a field element. */ + // TODO(#4844) getPublicInputsHash(): Fr { const buf = serializeToBuffer( this.header.globalVariables, - // TODO(#3868) - AppendOnlyTreeSnapshot.zero(), // this.startNoteHashTreeSnapshot / committments, + AppendOnlyTreeSnapshot.zero(), // this.startNoteHashTreeSnapshot / commitments, AppendOnlyTreeSnapshot.zero(), // this.startNullifierTreeSnapshot, AppendOnlyTreeSnapshot.zero(), // this.startContractTreeSnapshot, AppendOnlyTreeSnapshot.zero(), // this.startPublicDataTreeSnapshot, @@ -217,10 +188,10 @@ export class L2Block { * Computes the start state hash (should equal contract data before block). * @returns The start state hash for the L2 block. */ + // TODO(#4844) getStartStateHash() { const inputValue = serializeToBuffer( new Fr(Number(this.header.globalVariables.blockNumber.toBigInt()) - 1), - // TODO(#3868) AppendOnlyTreeSnapshot.zero(), // this.startNoteHashTreeSnapshot, AppendOnlyTreeSnapshot.zero(), // this.startNullifierTreeSnapshot, AppendOnlyTreeSnapshot.zero(), // this.startContractTreeSnapshot, @@ -235,6 +206,7 @@ export class L2Block { * Computes the end state hash (should equal contract data after block). * @returns The end state hash for the L2 block. */ + // TODO(#4844) getEndStateHash() { const inputValue = serializeToBuffer( this.header.globalVariables.blockNumber, diff --git a/yarn-project/circuit-types/src/sibling_path/sibling_path.ts b/yarn-project/circuit-types/src/sibling_path/sibling_path.ts index aa5caba08bf..fcfe0eb4d33 100644 --- a/yarn-project/circuit-types/src/sibling_path/sibling_path.ts +++ b/yarn-project/circuit-types/src/sibling_path/sibling_path.ts @@ -4,7 +4,7 @@ import { Tuple, assertLength, deserializeArrayFromVector, - serializeBufferArrayToVector, + serializeArrayOfBufferableToVector, } from '@aztec/foundation/serialize'; import { Hasher } from '@aztec/types/interfaces'; @@ -61,7 +61,7 @@ export class SiblingPath { * @returns The buffer representation of this object. */ public toBuffer(): Buffer { - return serializeBufferArrayToVector(this.data); + return serializeArrayOfBufferableToVector(this.data); } /** diff --git a/yarn-project/circuit-types/src/tx_effect.test.ts b/yarn-project/circuit-types/src/tx_effect.test.ts new file mode 100644 index 00000000000..f884959312d --- /dev/null +++ b/yarn-project/circuit-types/src/tx_effect.test.ts @@ -0,0 +1,9 @@ +import { TxEffect } from './tx_effect.js'; + +describe('TxEffect', () => { + it('convert to and from buffer', () => { + const txEffect = TxEffect.random(); + const buf = txEffect.toBuffer(); + expect(TxEffect.fromBuffer(buf)).toEqual(txEffect); + }); +}); diff --git a/yarn-project/circuit-types/src/tx_effect.ts b/yarn-project/circuit-types/src/tx_effect.ts index 77b49552673..b3830ac57c3 100644 --- a/yarn-project/circuit-types/src/tx_effect.ts +++ b/yarn-project/circuit-types/src/tx_effect.ts @@ -1,4 +1,4 @@ -import { ContractData, PublicDataWrite, TxL2Logs } from '@aztec/circuit-types'; +import { ContractData, LogType, PublicDataWrite, TxL2Logs } from '@aztec/circuit-types'; import { Fr, MAX_NEW_CONTRACTS_PER_TX, @@ -7,8 +7,10 @@ import { MAX_NEW_NULLIFIERS_PER_TX, MAX_PUBLIC_DATA_UPDATE_REQUESTS_PER_TX, } from '@aztec/circuits.js'; +import { makeTuple } from '@aztec/foundation/array'; +import { padArrayEnd } from '@aztec/foundation/collection'; import { sha256 } from '@aztec/foundation/crypto'; -import { Tuple } from '@aztec/foundation/serialize'; +import { BufferReader, Tuple, serializeArrayOfBufferableToVector } from '@aztec/foundation/serialize'; export class TxEffect { constructor( @@ -43,11 +45,62 @@ export class TxEffect { public unencryptedLogs: TxL2Logs, ) {} + toBuffer(): Buffer { + const nonZeroNoteHashes = this.newNoteHashes.filter(h => !h.isZero()); + const nonZeroNullifiers = this.newNullifiers.filter(h => !h.isZero()); + const nonZeroL2ToL1Msgs = this.newL2ToL1Msgs.filter(h => !h.isZero()); + const nonZeroPublicDataWrites = this.newPublicDataWrites.filter(h => !h.isEmpty()); + const nonZeroContractLeaves = this.contractLeaves.filter(h => !h.isZero()); + const nonZeroContractData = this.contractData.filter(h => !h.isEmpty()); + + return Buffer.concat([ + serializeArrayOfBufferableToVector(nonZeroNoteHashes, 1), + serializeArrayOfBufferableToVector(nonZeroNullifiers, 1), + serializeArrayOfBufferableToVector(nonZeroL2ToL1Msgs, 1), + serializeArrayOfBufferableToVector(nonZeroPublicDataWrites, 1), + serializeArrayOfBufferableToVector(nonZeroContractLeaves, 1), + // We don't prefix the contract data with the length because we already have that info before contract leaves + ...nonZeroContractData.map(x => x.toBuffer()), + this.encryptedLogs.toBuffer(), + this.unencryptedLogs.toBuffer(), + ]); + } + + /** + * Deserializes the L2Tx object from a Buffer. + * @param buffer - Buffer or BufferReader object to deserialize. + * @returns An instance of L2Tx. + */ + static fromBuffer(buffer: Buffer | BufferReader): TxEffect { + const reader = BufferReader.asReader(buffer); + + const nonZeroNoteHashes = reader.readVectorUint8Prefix(Fr); + const nonZeroNullifiers = reader.readVectorUint8Prefix(Fr); + const nonZeroL2ToL1Msgs = reader.readVectorUint8Prefix(Fr); + const nonZeroPublicDataWrites = reader.readVectorUint8Prefix(PublicDataWrite); + + const nonZeroContractLeaves = reader.readVectorUint8Prefix(Fr); + + const numContracts = nonZeroContractLeaves.length; + const nonZeroContractData = reader.readArray(numContracts, ContractData); + + return new TxEffect( + padArrayEnd(nonZeroNoteHashes, Fr.ZERO, MAX_NEW_NOTE_HASHES_PER_TX), + padArrayEnd(nonZeroNullifiers, Fr.ZERO, MAX_NEW_NULLIFIERS_PER_TX), + padArrayEnd(nonZeroL2ToL1Msgs, Fr.ZERO, MAX_NEW_L2_TO_L1_MSGS_PER_TX), + padArrayEnd(nonZeroPublicDataWrites, PublicDataWrite.empty(), MAX_PUBLIC_DATA_UPDATE_REQUESTS_PER_TX), + padArrayEnd(nonZeroContractLeaves, Fr.ZERO, MAX_NEW_CONTRACTS_PER_TX), + padArrayEnd(nonZeroContractData, ContractData.empty(), MAX_NEW_CONTRACTS_PER_TX), + TxL2Logs.fromBuffer(reader), + TxL2Logs.fromBuffer(reader), + ); + } + hash() { const noteHashesBuffer = Buffer.concat(this.newNoteHashes.map(x => x.toBuffer())); const nullifiersBuffer = Buffer.concat(this.newNullifiers.map(x => x.toBuffer())); - const publicDataUpdateRequestsBuffer = Buffer.concat(this.newPublicDataWrites.map(x => x.toBuffer())); const newL2ToL1MsgsBuffer = Buffer.concat(this.newL2ToL1Msgs.map(x => x.toBuffer())); + const publicDataUpdateRequestsBuffer = Buffer.concat(this.newPublicDataWrites.map(x => x.toBuffer())); const encryptedLogsHashKernel0 = this.encryptedLogs.hash(); const unencryptedLogsHashKernel0 = this.unencryptedLogs.hash(); @@ -58,8 +111,8 @@ export class TxEffect { const inputValue = Buffer.concat([ noteHashesBuffer, nullifiersBuffer, - publicDataUpdateRequestsBuffer, newL2ToL1MsgsBuffer, + publicDataUpdateRequestsBuffer, this.contractLeaves[0].toBuffer(), this.contractData[0].contractAddress.toBuffer(), // TODO(#3938): make portal address 20 bytes here when updating the hashing @@ -70,4 +123,22 @@ export class TxEffect { return sha256(inputValue); } + + static random( + numPrivateCallsPerTx = 2, + numPublicCallsPerTx = 3, + numEncryptedLogsPerCall = 2, + numUnencryptedLogsPerCall = 1, + ): TxEffect { + return new TxEffect( + makeTuple(MAX_NEW_NOTE_HASHES_PER_TX, Fr.random), + makeTuple(MAX_NEW_NULLIFIERS_PER_TX, Fr.random), + makeTuple(MAX_NEW_L2_TO_L1_MSGS_PER_TX, Fr.random), + makeTuple(MAX_PUBLIC_DATA_UPDATE_REQUESTS_PER_TX, PublicDataWrite.random), + makeTuple(MAX_NEW_CONTRACTS_PER_TX, Fr.random), + makeTuple(MAX_NEW_CONTRACTS_PER_TX, ContractData.random), + TxL2Logs.random(numPrivateCallsPerTx, numEncryptedLogsPerCall, LogType.ENCRYPTED), + TxL2Logs.random(numPublicCallsPerTx, numUnencryptedLogsPerCall, LogType.UNENCRYPTED), + ); + } } diff --git a/yarn-project/circuits.js/src/contract/public_bytecode.ts b/yarn-project/circuits.js/src/contract/public_bytecode.ts index 712e5579299..e7a77a887ac 100644 --- a/yarn-project/circuits.js/src/contract/public_bytecode.ts +++ b/yarn-project/circuits.js/src/contract/public_bytecode.ts @@ -2,7 +2,7 @@ import { FunctionSelector } from '@aztec/foundation/abi'; import { BufferReader, numToInt32BE, - serializeBufferArrayToVector, + serializeArrayOfBufferableToVector, serializeToBuffer, } from '@aztec/foundation/serialize'; import { ContractClass } from '@aztec/types/contracts'; @@ -14,7 +14,7 @@ import { FUNCTION_SELECTOR_NUM_BYTES } from '../constants.gen.js'; * @remarks This function should no longer be necessary once we have a single bytecode per contract. */ export function packBytecode(publicFns: ContractClass['publicFunctions']): Buffer { - return serializeBufferArrayToVector( + return serializeArrayOfBufferableToVector( publicFns.map(fn => serializeToBuffer(fn.selector, fn.isInternal, numToInt32BE(fn.bytecode.length), fn.bytecode)), ); } diff --git a/yarn-project/end-to-end/src/integration_l1_publisher.test.ts b/yarn-project/end-to-end/src/integration_l1_publisher.test.ts index 38bf04b7809..2a1c3d7e0e6 100644 --- a/yarn-project/end-to-end/src/integration_l1_publisher.test.ts +++ b/yarn-project/end-to-end/src/integration_l1_publisher.test.ts @@ -1,6 +1,7 @@ import { getConfigEnvVars } from '@aztec/aztec-node'; import { AztecAddress, + Body, Fr, GlobalVariables, L2Actor, @@ -325,7 +326,7 @@ describe('L1Publisher integration', () => { }; it('Block body is correctly published to AvailabilityOracle', async () => { - const body = L2Block.random(4).body; + const body = Body.random(); // `sendPublishTx` function is private so I am hacking around TS here. I think it's ok for test purposes. const txHash = await (publisher as any).sendPublishTx(body.toBuffer()); diff --git a/yarn-project/foundation/src/serialize/buffer_reader.test.ts b/yarn-project/foundation/src/serialize/buffer_reader.test.ts index aadd4ac6ede..f600942aba9 100644 --- a/yarn-project/foundation/src/serialize/buffer_reader.test.ts +++ b/yarn-project/foundation/src/serialize/buffer_reader.test.ts @@ -3,7 +3,7 @@ import { jest } from '@jest/globals'; import { randomBytes } from '../crypto/index.js'; import { Fq, Fr } from '../fields/fields.js'; import { BufferReader } from './buffer_reader.js'; -import { serializeBufferArrayToVector } from './serialize.js'; +import { serializeArrayOfBufferableToVector } from './serialize.js'; const ARRAY = Array.from(Array(32)).map((_, idx) => (idx % 2 === 0 ? 0 : 1)); const BUFFER = Buffer.from(ARRAY); @@ -64,7 +64,7 @@ describe('buffer reader', () => { uintBuf.writeUInt32BE(num, 0); return uintBuf; }); - const uintArrVec = serializeBufferArrayToVector(uintBufArr); + const uintArrVec = serializeArrayOfBufferableToVector(uintBufArr); vectorBufferReader = new BufferReader(uintArrVec); }); diff --git a/yarn-project/foundation/src/serialize/buffer_reader.ts b/yarn-project/foundation/src/serialize/buffer_reader.ts index 48c0c553c59..8905f7350b7 100644 --- a/yarn-project/foundation/src/serialize/buffer_reader.ts +++ b/yarn-project/foundation/src/serialize/buffer_reader.ts @@ -153,6 +153,29 @@ export class BufferReader { return result; } + /** + * Reads a vector of fixed size from the buffer and deserializes its elements using the provided itemDeserializer object. + * The 'itemDeserializer' object should have a 'fromBuffer' method that takes a BufferReader instance and returns the deserialized element. + * The method first reads the size of the vector (a number) from the buffer, then iterates through its elements, + * deserializing each one using the 'fromBuffer' method of 'itemDeserializer'. + * + * @param itemDeserializer - Object with 'fromBuffer' method to deserialize vector elements. + * @returns An array of deserialized elements of type T. + */ + public readVectorUint8Prefix(itemDeserializer: { + /** + * A method to deserialize data from a buffer. + */ + fromBuffer: (reader: BufferReader) => T; + }): T[] { + const size = this.readUInt8(); + const result = new Array(size); + for (let i = 0; i < size; i++) { + result[i] = itemDeserializer.fromBuffer(this); + } + return result; + } + /** * Read an array of a fixed size with elements of type T from the buffer. * The 'itemDeserializer' object should have a 'fromBuffer' method that takes a BufferReader instance as input, diff --git a/yarn-project/foundation/src/serialize/serialize.ts b/yarn-project/foundation/src/serialize/serialize.ts index 346fc7366e6..77785e8f27d 100644 --- a/yarn-project/foundation/src/serialize/serialize.ts +++ b/yarn-project/foundation/src/serialize/serialize.ts @@ -4,13 +4,22 @@ import { numToUInt32BE } from './free_funcs.js'; /** * For serializing an array of fixed length buffers. - * TODO move to foundation pkg. - * @param arr - Array of buffers. + * @param arr - Array of bufferable. + * @param prefixLength - The length of the prefix (denominated in bytes). * @returns The serialized buffers. */ -export function serializeBufferArrayToVector(arr: Buffer[]): Buffer { - const lengthBuf = Buffer.alloc(4); - lengthBuf.writeUInt32BE(arr.length, 0); +export function serializeArrayOfBufferableToVector(objs: Bufferable[], prefixLength = 4): Buffer { + const arr = serializeToBufferArray(objs); + let lengthBuf: Buffer; + if (prefixLength === 1) { + lengthBuf = Buffer.alloc(1); + lengthBuf.writeUInt8(arr.length, 0); + } else if (prefixLength === 4) { + lengthBuf = Buffer.alloc(4); + lengthBuf.writeUInt32BE(arr.length, 0); + } else { + throw new Error(`Unsupported prefix length. Got ${prefixLength}, expected 1 or 4`); + } return Buffer.concat([lengthBuf, ...arr]); } @@ -37,8 +46,6 @@ type DeserializeFn = ( * @param vector - The vector to deserialize. * @param offset - The position in the vector to start deserializing from. * @returns Deserialized array and how many bytes we advanced by. - * - * TODO: move to foundation pkg. */ export function deserializeArrayFromVector( deserialize: DeserializeFn,