@axiom-crypto/keystore-sdk
Version:
Keystore Rollup SDK
605 lines • 171 kB
JSON
{
"abi": [
{ "type": "constructor", "inputs": [], "stateMutability": "nonpayable" },
{
"type": "function",
"name": "L1_INITIATION_DELAY",
"inputs": [],
"outputs": [{ "name": "", "type": "uint256", "internalType": "uint256" }],
"stateMutability": "view"
},
{
"type": "function",
"name": "MAX_L1_ORIGIN_DELAY",
"inputs": [],
"outputs": [{ "name": "", "type": "uint256", "internalType": "uint256" }],
"stateMutability": "view"
},
{
"type": "function",
"name": "MAX_PREBLOCKS_PER_BATCH",
"inputs": [],
"outputs": [{ "name": "", "type": "uint256", "internalType": "uint256" }],
"stateMutability": "view"
},
{
"type": "function",
"name": "acceptOwnership",
"inputs": [],
"outputs": [],
"stateMutability": "nonpayable"
},
{
"type": "function",
"name": "addProver",
"inputs": [{ "name": "prover", "type": "address", "internalType": "address" }],
"outputs": [],
"stateMutability": "nonpayable"
},
{
"type": "function",
"name": "addSequencer",
"inputs": [{ "name": "sequencer", "type": "address", "internalType": "address" }],
"outputs": [],
"stateMutability": "nonpayable"
},
{
"type": "function",
"name": "appExeCommit",
"inputs": [],
"outputs": [{ "name": "", "type": "bytes32", "internalType": "bytes32" }],
"stateMutability": "view"
},
{
"type": "function",
"name": "claimProverFees",
"inputs": [{ "name": "receiverAddress", "type": "address", "internalType": "address" }],
"outputs": [],
"stateMutability": "nonpayable"
},
{
"type": "function",
"name": "commitBatch",
"inputs": [
{
"name": "args",
"type": "tuple",
"internalType": "struct AxiomKeystoreRollup.CommitBatchArgs",
"components": [
{ "name": "sequencerKeystoreAddress", "type": "bytes32", "internalType": "bytes32" },
{ "name": "l1Origin", "type": "uint256", "internalType": "uint256" },
{ "name": "baseFeeScalar", "type": "uint256", "internalType": "uint256" },
{ "name": "blobBaseFeeScalar", "type": "uint256", "internalType": "uint256" },
{ "name": "preblocks", "type": "bytes", "internalType": "bytes" }
]
}
],
"outputs": [],
"stateMutability": "nonpayable"
},
{
"type": "function",
"name": "commitBatch4844",
"inputs": [
{
"name": "args",
"type": "tuple",
"internalType": "struct AxiomKeystoreRollup.CommitBatch4844Args",
"components": [
{ "name": "sequencerKeystoreAddress", "type": "bytes32", "internalType": "bytes32" },
{ "name": "l1Origin", "type": "uint256", "internalType": "uint256" },
{ "name": "baseFeeScalar", "type": "uint256", "internalType": "uint256" },
{ "name": "blobBaseFeeScalar", "type": "uint256", "internalType": "uint256" },
{ "name": "blobDataProof", "type": "bytes", "internalType": "bytes" }
]
}
],
"outputs": [],
"stateMutability": "nonpayable"
},
{
"type": "function",
"name": "committedBatchesCount",
"inputs": [],
"outputs": [{ "name": "", "type": "uint256", "internalType": "uint256" }],
"stateMutability": "view"
},
{
"type": "function",
"name": "extsload",
"inputs": [{ "name": "slot", "type": "bytes32", "internalType": "bytes32" }],
"outputs": [{ "name": "", "type": "bytes32", "internalType": "bytes32" }],
"stateMutability": "view"
},
{
"type": "function",
"name": "finalizeBatch",
"inputs": [
{
"name": "args",
"type": "tuple",
"internalType": "struct AxiomKeystoreRollup.FinalizationArgs",
"components": [
{ "name": "parentFinalizedBatchIndex", "type": "uint256", "internalType": "uint256" },
{ "name": "targetSequencerBatchIndex", "type": "uint256", "internalType": "uint256" },
{ "name": "targetL1BatchIndex", "type": "uint256", "internalType": "uint256" },
{ "name": "newOutputRoot", "type": "bytes32", "internalType": "bytes32" },
{ "name": "rewardAddress", "type": "address", "internalType": "address" },
{ "name": "partialProof", "type": "bytes", "internalType": "bytes" }
]
}
],
"outputs": [],
"stateMutability": "nonpayable"
},
{
"type": "function",
"name": "finalizeWithdrawal",
"inputs": [
{ "name": "batchIndex", "type": "uint256", "internalType": "uint256" },
{
"name": "outputRootPreimage",
"type": "tuple",
"internalType": "struct AxiomKeystoreRollup.OutputRootPreimage",
"components": [
{ "name": "stateRoot", "type": "bytes32", "internalType": "bytes32" },
{ "name": "withdrawalsRoot", "type": "bytes32", "internalType": "bytes32" },
{ "name": "lastValidBlockhash", "type": "bytes32", "internalType": "bytes32" }
]
},
{
"name": "withdrawalArgs",
"type": "tuple",
"internalType": "struct AxiomKeystoreRollup.WithdrawalArgs",
"components": [
{ "name": "imtKey", "type": "bytes32", "internalType": "bytes32" },
{ "name": "nextDummyByte", "type": "bytes1", "internalType": "bytes1" },
{ "name": "nextImtKey", "type": "bytes32", "internalType": "bytes32" },
{ "name": "withdrawalAmount", "type": "uint256", "internalType": "uint256" },
{ "name": "to", "type": "address", "internalType": "address" }
]
},
{ "name": "proof", "type": "bytes32[]", "internalType": "bytes32[]" },
{ "name": "isLeft", "type": "uint256", "internalType": "uint256" }
],
"outputs": [],
"stateMutability": "nonpayable"
},
{
"type": "function",
"name": "finalizedBatchData",
"inputs": [{ "name": "index", "type": "uint256", "internalType": "uint256" }],
"outputs": [
{
"name": "",
"type": "tuple",
"internalType": "struct AxiomKeystoreRollup.FinalizedBatchData",
"components": [
{ "name": "outputRoot", "type": "bytes32", "internalType": "bytes32" },
{ "name": "sequencerBatchIndex", "type": "uint256", "internalType": "uint256" },
{ "name": "l1BatchIndex", "type": "uint256", "internalType": "uint256" }
]
}
],
"stateMutability": "view"
},
{
"type": "function",
"name": "finalizedBatchesCount",
"inputs": [],
"outputs": [{ "name": "", "type": "uint256", "internalType": "uint256" }],
"stateMutability": "view"
},
{
"type": "function",
"name": "initialize",
"inputs": [
{ "name": "l1DepositFee", "type": "uint256", "internalType": "uint256" },
{ "name": "l1WithdrawalFee", "type": "uint256", "internalType": "uint256" },
{ "name": "l1UpdateFee", "type": "uint256", "internalType": "uint256" },
{ "name": "_verifier", "type": "address", "internalType": "contract IOpenVmHalo2Verifier" }
],
"outputs": [],
"stateMutability": "nonpayable"
},
{
"type": "function",
"name": "initiateL1Transaction",
"inputs": [
{
"name": "_tx",
"type": "tuple",
"internalType": "struct AxiomKeystoreRollup.L1InitiatedTransaction",
"components": [
{
"name": "txType",
"type": "uint8",
"internalType": "enum AxiomKeystoreRollup.KeystoreTxType"
},
{ "name": "data", "type": "bytes", "internalType": "bytes" }
]
}
],
"outputs": [],
"stateMutability": "payable"
},
{
"type": "function",
"name": "isProver",
"inputs": [{ "name": "prover", "type": "address", "internalType": "address" }],
"outputs": [{ "name": "", "type": "bool", "internalType": "bool" }],
"stateMutability": "view"
},
{
"type": "function",
"name": "isSequencer",
"inputs": [{ "name": "sequencer", "type": "address", "internalType": "address" }],
"outputs": [{ "name": "", "type": "bool", "internalType": "bool" }],
"stateMutability": "view"
},
{
"type": "function",
"name": "isWithdrawalClaimed",
"inputs": [{ "name": "leaf", "type": "bytes32", "internalType": "bytes32" }],
"outputs": [{ "name": "", "type": "bool", "internalType": "bool" }],
"stateMutability": "view"
},
{
"type": "function",
"name": "l1BatchCount",
"inputs": [],
"outputs": [{ "name": "", "type": "uint256", "internalType": "uint256" }],
"stateMutability": "view"
},
{
"type": "function",
"name": "l1BatchData",
"inputs": [{ "name": "index", "type": "uint256", "internalType": "uint256" }],
"outputs": [
{
"name": "",
"type": "tuple",
"internalType": "struct AxiomKeystoreRollup.L1BatchData",
"components": [
{ "name": "batchCommitment", "type": "bytes32", "internalType": "bytes32" },
{ "name": "preblockCount", "type": "uint256", "internalType": "uint256" },
{ "name": "feeAccumulator", "type": "uint256", "internalType": "uint256" }
]
}
],
"stateMutability": "view"
},
{
"type": "function",
"name": "l1BatchInclusionBlock",
"inputs": [{ "name": "index", "type": "uint256", "internalType": "uint256" }],
"outputs": [{ "name": "", "type": "uint32", "internalType": "uint32" }],
"stateMutability": "view"
},
{
"type": "function",
"name": "l1InitiatedFee",
"inputs": [
{
"name": "txType",
"type": "uint8",
"internalType": "enum AxiomKeystoreRollup.KeystoreTxType"
}
],
"outputs": [{ "name": "", "type": "uint256", "internalType": "uint256" }],
"stateMutability": "view"
},
{
"type": "function",
"name": "latestOutputRoot",
"inputs": [],
"outputs": [{ "name": "", "type": "bytes32", "internalType": "bytes32" }],
"stateMutability": "view"
},
{
"type": "function",
"name": "owner",
"inputs": [],
"outputs": [{ "name": "", "type": "address", "internalType": "address" }],
"stateMutability": "view"
},
{
"type": "function",
"name": "pendingL1Batches",
"inputs": [],
"outputs": [{ "name": "", "type": "uint256", "internalType": "uint256" }],
"stateMutability": "view"
},
{
"type": "function",
"name": "pendingOwner",
"inputs": [],
"outputs": [{ "name": "", "type": "address", "internalType": "address" }],
"stateMutability": "view"
},
{
"type": "function",
"name": "proverRewards",
"inputs": [{ "name": "prover", "type": "address", "internalType": "address" }],
"outputs": [{ "name": "", "type": "uint256", "internalType": "uint256" }],
"stateMutability": "view"
},
{
"type": "function",
"name": "removeProver",
"inputs": [{ "name": "prover", "type": "address", "internalType": "address" }],
"outputs": [],
"stateMutability": "nonpayable"
},
{
"type": "function",
"name": "removeSequencer",
"inputs": [{ "name": "sequencer", "type": "address", "internalType": "address" }],
"outputs": [],
"stateMutability": "nonpayable"
},
{
"type": "function",
"name": "renounceOwnership",
"inputs": [],
"outputs": [],
"stateMutability": "nonpayable"
},
{
"type": "function",
"name": "sequencerBatchCount",
"inputs": [],
"outputs": [{ "name": "", "type": "uint256", "internalType": "uint256" }],
"stateMutability": "view"
},
{
"type": "function",
"name": "sequencerBatchData",
"inputs": [{ "name": "index", "type": "uint256", "internalType": "uint256" }],
"outputs": [
{
"name": "",
"type": "tuple",
"internalType": "struct AxiomKeystoreRollup.SequencerBatchData",
"components": [
{ "name": "batchCommitment", "type": "bytes32", "internalType": "bytes32" },
{ "name": "l1Origin", "type": "uint256", "internalType": "uint256" },
{ "name": "prevL1BatchIndex", "type": "uint256", "internalType": "uint256" }
]
}
],
"stateMutability": "view"
},
{
"type": "function",
"name": "setL1InitiatedTransactionFee",
"inputs": [
{
"name": "txType",
"type": "uint8",
"internalType": "enum AxiomKeystoreRollup.KeystoreTxType"
},
{ "name": "newFee", "type": "uint256", "internalType": "uint256" }
],
"outputs": [],
"stateMutability": "nonpayable"
},
{
"type": "function",
"name": "transferOwnership",
"inputs": [{ "name": "newOwner", "type": "address", "internalType": "address" }],
"outputs": [],
"stateMutability": "nonpayable"
},
{
"type": "function",
"name": "updateAppExeCommit",
"inputs": [{ "name": "newAppExeCommit", "type": "bytes32", "internalType": "bytes32" }],
"outputs": [],
"stateMutability": "nonpayable"
},
{
"type": "function",
"name": "updateVerifier",
"inputs": [
{
"name": "newVerifier",
"type": "address",
"internalType": "contract IOpenVmHalo2Verifier"
}
],
"outputs": [],
"stateMutability": "nonpayable"
},
{
"type": "function",
"name": "verifier",
"inputs": [],
"outputs": [
{ "name": "", "type": "address", "internalType": "contract IOpenVmHalo2Verifier" }
],
"stateMutability": "view"
},
{
"type": "event",
"name": "BatchCommitted",
"inputs": [
{ "name": "batchIndex", "type": "uint256", "indexed": true, "internalType": "uint256" },
{
"name": "sequencerBatchIndex",
"type": "uint256",
"indexed": true,
"internalType": "uint256"
},
{
"name": "batchCommitment",
"type": "bytes32",
"indexed": false,
"internalType": "bytes32"
},
{ "name": "l1Origin", "type": "uint256", "indexed": false, "internalType": "uint256" }
],
"anonymous": false
},
{
"type": "event",
"name": "BatchCommitted4844",
"inputs": [
{ "name": "batchIndex", "type": "uint256", "indexed": true, "internalType": "uint256" },
{
"name": "sequencerBatchIndex",
"type": "uint256",
"indexed": true,
"internalType": "uint256"
},
{
"name": "batchCommitment",
"type": "bytes32",
"indexed": false,
"internalType": "bytes32"
},
{ "name": "l1Origin", "type": "uint256", "indexed": false, "internalType": "uint256" }
],
"anonymous": false
},
{
"type": "event",
"name": "BatchesFinalized",
"inputs": [
{
"name": "parentFinalizedBatchIndex",
"type": "uint256",
"indexed": true,
"internalType": "uint256"
},
{
"name": "targetBatchIndex",
"type": "uint256",
"indexed": true,
"internalType": "uint256"
},
{ "name": "newOutputRoot", "type": "bytes32", "indexed": false, "internalType": "bytes32" }
],
"anonymous": false
},
{
"type": "event",
"name": "Initialized",
"inputs": [
{ "name": "version", "type": "uint64", "indexed": false, "internalType": "uint64" }
],
"anonymous": false
},
{
"type": "event",
"name": "L1TransactionInitiated",
"inputs": [
{ "name": "l1BatchIndex", "type": "uint256", "indexed": true, "internalType": "uint256" },
{
"name": "l1BatchCommitment",
"type": "bytes32",
"indexed": false,
"internalType": "bytes32"
},
{
"name": "l1BatchInclusionBlock",
"type": "uint256",
"indexed": false,
"internalType": "uint256"
},
{
"name": "l1InitiatedNonce",
"type": "uint256",
"indexed": false,
"internalType": "uint256"
},
{ "name": "txHash", "type": "bytes32", "indexed": false, "internalType": "bytes32" }
],
"anonymous": false
},
{
"type": "event",
"name": "OwnershipTransferStarted",
"inputs": [
{ "name": "previousOwner", "type": "address", "indexed": true, "internalType": "address" },
{ "name": "newOwner", "type": "address", "indexed": true, "internalType": "address" }
],
"anonymous": false
},
{
"type": "event",
"name": "OwnershipTransferred",
"inputs": [
{ "name": "previousOwner", "type": "address", "indexed": true, "internalType": "address" },
{ "name": "newOwner", "type": "address", "indexed": true, "internalType": "address" }
],
"anonymous": false
},
{
"type": "event",
"name": "WithdrawalFinalized",
"inputs": [
{ "name": "batchNumber", "type": "uint256", "indexed": true, "internalType": "uint256" },
{ "name": "to", "type": "address", "indexed": true, "internalType": "address" },
{ "name": "withdrawAmount", "type": "uint256", "indexed": false, "internalType": "uint256" }
],
"anonymous": false
},
{ "type": "error", "name": "CallPointEvaluationPrecompileFailed", "inputs": [] },
{ "type": "error", "name": "FoundMultipleBlobs", "inputs": [] },
{ "type": "error", "name": "IncorrectProofLength", "inputs": [] },
{ "type": "error", "name": "InvalidAppExeCommit", "inputs": [] },
{ "type": "error", "name": "InvalidInitialization", "inputs": [] },
{ "type": "error", "name": "InvalidLeafExeCommit", "inputs": [] },
{ "type": "error", "name": "InvalidMsgValue", "inputs": [] },
{ "type": "error", "name": "InvalidVerifier", "inputs": [] },
{ "type": "error", "name": "InvalidWithdrawalProof", "inputs": [] },
{ "type": "error", "name": "L1BatchNotYetFinalizable", "inputs": [] },
{
"type": "error",
"name": "L1OriginOutOfOrder",
"inputs": [{ "name": "l1Origin", "type": "uint256", "internalType": "uint256" }]
},
{
"type": "error",
"name": "L1OriginTooNew",
"inputs": [{ "name": "l1Origin", "type": "uint256", "internalType": "uint256" }]
},
{
"type": "error",
"name": "L1OriginTooOld",
"inputs": [{ "name": "l1Origin", "type": "uint256", "internalType": "uint256" }]
},
{ "type": "error", "name": "MaxPreblocksPerL1BatchReached", "inputs": [] },
{ "type": "error", "name": "NoBlobFound", "inputs": [] },
{ "type": "error", "name": "NotInitializing", "inputs": [] },
{ "type": "error", "name": "NotProver", "inputs": [] },
{ "type": "error", "name": "NotSequencer", "inputs": [] },
{
"type": "error",
"name": "OwnableInvalidOwner",
"inputs": [{ "name": "owner", "type": "address", "internalType": "address" }]
},
{
"type": "error",
"name": "OwnableUnauthorizedAccount",
"inputs": [{ "name": "account", "type": "address", "internalType": "address" }]
},
{ "type": "error", "name": "ParentBatchHasNoOutputRoot", "inputs": [] },
{ "type": "error", "name": "ProofVerificationFailed", "inputs": [] },
{ "type": "error", "name": "ReentrantCall", "inputs": [] },
{ "type": "error", "name": "SequencerBatchNotAssociated", "inputs": [] },
{
"type": "error",
"name": "TargetBatchAlreadyFinalized",
"inputs": [{ "name": "finalizedBatchesCount", "type": "uint256", "internalType": "uint256" }]
},
{ "type": "error", "name": "TargetL1BatchNotCommitted", "inputs": [] },
{ "type": "error", "name": "TargetSequencerBatchNotCommitted", "inputs": [] },
{ "type": "error", "name": "TransferFailed", "inputs": [] },
{ "type": "error", "name": "UnexpectedPointEvaluationPrecompileOutput", "inputs": [] },
{ "type": "error", "name": "WithdrawalAlreadyClaimed", "inputs": [] },
{ "type": "error", "name": "WithdrawalsRootVerificationFailed", "inputs": [] }
],
"bytecode": {
"object": "0x6080604052348015600e575f80fd5b5060156019565b60c9565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00805468010000000000000000900460ff161560685760405163f92ee8a960e01b815260040160405180910390fd5b80546001600160401b039081161460c65780546001600160401b0319166001600160401b0390811782556040519081527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29060200160405180910390a15b50565b613661806100d65f395ff3fe6080604052600436106102ab575f3560e01c80638a33623111610165578063abb63e3e116100c6578063ca2672381161007c578063dd6c472711610062578063dd6c4727146109fb578063e30c397814610a1a578063f2fde38b14610a2e575f80fd5b8063ca267238146109b4578063d900dbd3146109e7575f80fd5b8063b219266d116100ac578063b219266d146108fd578063b571d3dd14610912578063b7dffcfb14610931575f80fd5b8063abb63e3e14610891578063aea8b9a7146108b0575f80fd5b80639f639b621161011b578063a797403011610101578063a797403014610836578063a876ecd11461084a578063aab78a8e1461085e575f80fd5b80639f639b62146107b7578063a5543308146107d6575f80fd5b80638fed22d31161014b5780638fed22d314610752578063909ea9b11461078557806397fc007c14610798575f80fd5b80638a3362311461071f5780638da5cb5b1461073e575f80fd5b8063317162d61161020f578063715018a6116101c55780637d07568a116101ab5780637d07568a146106365780637dcdebd5146106b957806382c25d35146106ec575f80fd5b8063715018a61461060e57806379ba509714610622575f80fd5b80636989ca7c116101f55780636989ca7c1461056d5780636c3c29271461058c5780636d46e987146105ab575f80fd5b8063317162d6146104a957806367c4624014610539575f80fd5b80631e2eaeaf11610264578063209df2011161024a578063209df2011461040157806323de69fa146104205780632b7ac3f31461043f575f80fd5b80631e2eaeaf146103c35780631f8d519d146103e2575f80fd5b80630e9aa4b3116102945780630e9aa4b3146103485780631022929f146103855780631d49e457146103a4575f80fd5b80630a245924146102af5780630e60ad9c14610327575b5f80fd5b3480156102ba575f80fd5b506103126102c9366004613021565b73ffffffffffffffffffffffffffffffffffffffff165f9081527fc94330da5d5688c06df0ade6bfd773c87249c0b9f38b25021e2c16ab9672d00d602052604090205460ff1690565b60405190151581526020015b60405180910390f35b348015610332575f80fd5b50610346610341366004613021565b610a4d565b005b348015610353575f80fd5b507fc94330da5d5688c06df0ade6bfd773c87249c0b9f38b25021e2c16ab9672d010545b60405190815260200161031e565b348015610390575f80fd5b5061034661039f366004613043565b610b7e565b3480156103af575f80fd5b506103466103be366004613021565b61102c565b3480156103ce575f80fd5b506103776103dd36600461307a565b6110a1565b3480156103ed575f80fd5b506103466103fc366004613091565b6110ab565b34801561040c575f80fd5b5061037761041b3660046130e2565b611530565b34801561042b575f80fd5b5061034661043a366004613111565b61158b565b34801561044a575f80fd5b507fc94330da5d5688c06df0ade6bfd773c87249c0b9f38b25021e2c16ab9672d00f5473ffffffffffffffffffffffffffffffffffffffff165b60405173ffffffffffffffffffffffffffffffffffffffff909116815260200161031e565b3480156104b4575f80fd5b5061052c6104c336600461307a565b60408051606080820183525f80835260208084018290529284018190529384527fc94330da5d5688c06df0ade6bfd773c87249c0b9f38b25021e2c16ab9672d00a8252928290208251938401835280548452600181015491840191909152600201549082015290565b60405161031e919061314b565b348015610544575f80fd5b5061055861055336600461307a565b61173d565b60405163ffffffff909116815260200161031e565b348015610578575f80fd5b50610346610587366004613021565b61179e565b348015610597575f80fd5b506103466105a636600461316c565b611810565b3480156105b6575f80fd5b506103126105c5366004613021565b73ffffffffffffffffffffffffffffffffffffffff165f9081527fc94330da5d5688c06df0ade6bfd773c87249c0b9f38b25021e2c16ab9672d00c602052604090205460ff1690565b348015610619575f80fd5b50610346611894565b34801561062d575f80fd5b506103466118a7565b348015610641575f80fd5b5061052c61065036600461307a565b60408051606080820183525f80835260208084018290529284018190529384527fc94330da5d5688c06df0ade6bfd773c87249c0b9f38b25021e2c16ab9672d0058252928290208251938401835280548452600181015491840191909152600201549082015290565b3480156106c4575f80fd5b507fc94330da5d5688c06df0ade6bfd773c87249c0b9f38b25021e2c16ab9672d00254610377565b3480156106f7575f80fd5b507fc94330da5d5688c06df0ade6bfd773c87249c0b9f38b25021e2c16ab9672d00354610377565b34801561072a575f80fd5b50610346610739366004613021565b611922565b348015610749575f80fd5b50610484611997565b34801561075d575f80fd5b507fc94330da5d5688c06df0ade6bfd773c87249c0b9f38b25021e2c16ab9672d00654610377565b610346610793366004613194565b6119d8565b3480156107a3575f80fd5b506103466107b2366004613021565b611ca6565b3480156107c2575f80fd5b506103466107d13660046131cb565b611d61565b3480156107e1575f80fd5b506103776107f0366004613021565b73ffffffffffffffffffffffffffffffffffffffff165f9081527fc94330da5d5688c06df0ade6bfd773c87249c0b9f38b25021e2c16ab9672d00e602052604090205490565b348015610841575f80fd5b50610377611fff565b348015610855575f80fd5b50610377606481565b348015610869575f80fd5b507fc94330da5d5688c06df0ade6bfd773c87249c0b9f38b25021e2c16ab9672d00854610377565b34801561089c575f80fd5b506103466108ab366004613111565b612034565b3480156108bb575f80fd5b506103126108ca36600461307a565b5f9081527fc94330da5d5688c06df0ade6bfd773c87249c0b9f38b25021e2c16ab9672d00b602052604090205460ff1690565b348015610908575f80fd5b50610377611c2081565b34801561091d575f80fd5b5061034661092c366004613021565b612256565b34801561093c575f80fd5b5061052c61094b36600461307a565b60408051606080820183525f80835260208084018290529284018190529384527fc94330da5d5688c06df0ade6bfd773c87249c0b9f38b25021e2c16ab9672d0078252928290208251938401835280548452600181015491840191909152600201549082015290565b3480156109bf575f80fd5b507fc94330da5d5688c06df0ade6bfd773c87249c0b9f38b25021e2c16ab9672d00054610377565b3480156109f2575f80fd5b50610377600a81565b348015610a06575f80fd5b50610346610a1536600461307a565b6122c8565b348015610a25575f80fd5b506104846122f4565b348015610a39575f80fd5b50610346610a48366004613021565b61231c565b5f5c8015610a87576040517f37ed32e800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60015f5d335f9081527fc94330da5d5688c06df0ade6bfd773c87249c0b9f38b25021e2c16ab9672d00e602052604080822080549083905590517fc94330da5d5688c06df0ade6bfd773c87249c0b9f38b25021e2c16ab9672d000929073ffffffffffffffffffffffffffffffffffffffff86169083908381818185875af1925050503d805f8114610b34576040519150601f19603f3d011682016040523d82523d5f602084013e610b39565b606091505b5050905080610b74576040517f90b8ec1800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5050505f805d5050565b5f5c8015610bb8576040517f37ed32e800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60015f5d335f9081527fc94330da5d5688c06df0ade6bfd773c87249c0b9f38b25021e2c16ab9672d00d60205260409020547fc94330da5d5688c06df0ade6bfd773c87249c0b9f38b25021e2c16ab9672d0009060ff16610c45576040517f2f6a53d800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b7fc94330da5d5688c06df0ade6bfd773c87249c0b9f38b25021e2c16ab9672d0005f610c79604086013560208701356132c8565b90508160020154811015610cca5781600201546040517fb60d166f000000000000000000000000000000000000000000000000000000008152600401610cc191815260200190565b60405180910390fd5b6020808601355f90815260078401825260408082208054828a013584526005870190945290822054909291829003610d2e576040517fa3d7023c00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5f819003610d68576040517fd525813100000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60028301546040890135811015610eb9575f866004018281548110610d8f57610d8f6132db565b5f918252602080832060088304015460079283166004026101000a900463ffffffff169350908901908290610dc8908e013560016132c8565b81526020019081526020015f20600101549050805f03610e2c5743610def611c20846132c8565b1115610e27576040517fca17379600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610e66565b81811015610e66576040517f668d270700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b805f03610eb2575f610e7c8460408e0135613308565b905080896003015f828254610e919190613308565b9250508190555080896008015f828254610eab91906132c8565b9091555050505b5050610ef6565b80896040013514610ef6576040517f668d270700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5087355f908152600a860160205260409020610f3590838360608c0135610f2360a08e0160808f01613021565b610f3060a08f018f61331b565b6123d3565b5f848152600a8601602090815260409182902060608b01358155908a01356001820155908901356002820155610f6a81612618565b600e87015f610f7f60a08d0160808e01613021565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f828254610fc691906132c8565b909155505060608901358655610fdd8560016132c8565b600287015560405160608a0135815285908a35907f8aad65dee71b9cf4c01e49f0ff5da481e473b375a80db72b6209a3ca0ea36c449060200160405180910390a3505050505050505f805d5050565b6110346126c2565b73ffffffffffffffffffffffffffffffffffffffff165f9081527fc94330da5d5688c06df0ade6bfd773c87249c0b9f38b25021e2c16ab9672d00d6020526040902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00166001179055565b5f81545f5260205ff35b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00805468010000000000000000810460ff16159067ffffffffffffffff165f811580156110f55750825b90505f8267ffffffffffffffff1660011480156111115750303b155b90508115801561111f575080155b15611156576040517ff92ee8a900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b84547fffffffffffffffffffffffffffffffffffffffffffffffff000000000000000016600117855583156111b75784547fffffffffffffffffffffffffffffffffffffffffffffff00ffffffffffffffff16680100000000000000001785555b7fc94330da5d5688c06df0ade6bfd773c87249c0b9f38b25021e2c16ab9672d00073ffffffffffffffffffffffffffffffffffffffff8716611225576040517fbaa3de5f00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600f810180547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff891617905560048082018054600181810183555f92835260208084206008840401805460079485169096026101000a63ffffffff021990951690945582805260058501845260408084207f27e87c261ce7c825f391f8bd6f243192f5d5194f599110f723a784d62f67a6ad90558051606080820183527fcee40b249ef2f3b190670243cac02ab08de8c800793f85d128831554cdf5e0c68252438288019081528284018781528780529589018852838720925183555193820193909355925160029093019290925581517f6077df4fc2481833b5c58e08af09e072f2cff19c55a4e5aafe65e575662d405c9481018590527f226d50da400d02d463c53e9a08cc47d82a297340d6a1f1d173d31aeea222840f9281018390527f6c6c5cf2cbf7108dab158edb80d6e89f2b6f44caeff01986611d3504673af45a91810182905291929091608001604080518083037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe001815282825280516020918201206060840183528084525f828501818152858501828152828052600a8c01909452938120945185559251600180860191909155915160029485015592880181905560088801558187559091508e9060098701908081526020019081526020015f20819055508c856009015f6001600281111561145b5761145b613383565b600281111561146c5761146c613383565b81526020019081526020015f20819055508b856009015f60028081111561149557611495613383565b60028111156114a6576114a6613383565b815260208101919091526040015f20556114bf3361271a565b505050505083156115255784547fffffffffffffffffffffffffffffffffffffffffffffff00ffffffffffffffff168555604051600181527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29060200160405180910390a15b505050505050505050565b5f7fc94330da5d5688c06df0ade6bfd773c87249c0b9f38b25021e2c16ab9672d0098183600281111561156557611565613383565b600281111561157657611576613383565b81526020019081526020015f20549050919050565b335f9081527fc94330da5d5688c06df0ade6bfd773c87249c0b9f38b25021e2c16ab9672d00c60205260409020547fc94330da5d5688c06df0ade6bfd773c87249c0b9f38b25021e2c16ab9672d0009060ff16611614576040517f53e2827c00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5f5c801561164e576040517f37ed32e800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60015f5d5f611660608085018561331b565b60405161166e9291906133b0565b6040519081900381207f010000000000000000000000000000000000000000000000000000000000000060208301526021820181905291505f906041016040516020818303038152906040528051906020012090505f805f6116e284895f01358a602001358b604001358c6060013561272b565b92509250925081837fe5e757a1777ec13eb7a3998c224fbae626ae69128522401f3fe5d6c65f667e06838b60200135604051611728929190918252602082015260400190565b60405180910390a350505050505f805d505050565b5f7fc94330da5d5688c06df0ade6bfd773c87249c0b9f38b25021e2c16ab9672d0006004018281548110611773576117736132db565b905f5260205f2090600891828204019190066004029054906101000a900463ffffffff169050919050565b6117a66126c2565b73ffffffffffffffffffffffffffffffffffffffff165f9081527fc94330da5d5688c06df0ade6bfd773c87249c0b9f38b25021e2c16ab9672d00c6020526040902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00169055565b6118186126c2565b7fc94330da5d5688c06df0ade6bfd773c87249c0b9f38b25021e2c16ab9672d000817fc94330da5d5688c06df0ade6bfd773c87249c0b9f38b25021e2c16ab9672d0095f85600281111561186e5761186e613383565b600281111561187f5761187f613383565b815260208101919091526040015f2055505050565b61189c6126c2565b6118a55f612971565b565b33806118b16122f4565b73ffffffffffffffffffffffffffffffffffffffff1614611916576040517f118cdaa700000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff82166004820152602401610cc1565b61191f81612971565b50565b61192a6126c2565b73ffffffffffffffffffffffffffffffffffffffff165f9081527fc94330da5d5688c06df0ade6bfd773c87249c0b9f38b25021e2c16ab9672d00c6020526040902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00166001179055565b5f807f9016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c1993005b5473ffffffffffffffffffffffffffffffffffffffff1692915050565b5f5c8015611a12576040517f37ed32e800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60015f5d7fc94330da5d5688c06df0ade6bfd773c87249c0b9f38b25021e2c16ab9672d0005f7fc94330da5d5688c06df0ade6bfd773c87249c0b9f38b25021e2c16ab9672d00981611a6760208701876130e2565b6002811115611a7857611a78613383565b6002811115611a8957611a89613383565b81526020019081526020015f205490505f611aa485836129c5565b90505f611aaf611fff565b60018501545f8281526005870160205260408120805460028201549495509293909291611add600a436132c8565b905080896004018781548110611af557611af56132db565b5f918252602090912060088204015460079091166004026101000a900463ffffffff1614611b7957611b26866133bf565b9550886003015f8154611b38906133bf565b90915550600489810180546001810182555f91825260209091206008820401805460079092169092026101000a63ffffffff81810219909216918416021790555b5f86815260058a016020526040902060018101547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff9c01611be5576040517f4fef572800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040805160208082018790528183018a90526060820185905242608083015260a08083018c90528351808403909101815260c09092019092528051910120808255611c308a856132c8565b600283015560018083018054820190558b8101805490910190556040805182815260208101859052908101889052606081018a905288907f12b9cd6534800b648703ec5d0090895e021b0bd085742bdb34f574049695183b9060800160405180910390a250505050505050505050505f805d5050565b611cae6126c2565b73ffffffffffffffffffffffffffffffffffffffff8116611cfb576040517fbaa3de5f00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b7fc94330da5d5688c06df0ade6bfd773c87249c0b9f38b25021e2c16ab9672d00f80547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff92909216919091179055565b5f5c8015611d9b576040517f37ed32e800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60015f5d5f7fc94330da5d5688c06df0ade6bfd773c87249c0b9f38b25021e2c16ab9672d0005f898152600a820160209081526040918290205482518b3581840152918b013582840152918a0135606082015291925090608001604051602081830303815290604052805190602001208114611e43576040517fc8c4328600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5f611e4d88612b33565b5f818152600b8501602052604090205490915060ff1615611e9a576040517f2f29b3db00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b611eab87878b602001358489612c05565b5f818152600b84016020526040812080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00166001179055611ef360a08a0160808b01613021565b73ffffffffffffffffffffffffffffffffffffffff1689606001356040515f6040518083038185875af1925050503d805f8114611f4b576040519150601f19603f3d011682016040523d82523d5f602084013e611f50565b606091505b5050905080611f8b576040517f90b8ec1800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b611f9b60a08a0160808b01613021565b73ffffffffffffffffffffffffffffffffffffffff168b7f2144673b243cbac0f18cd0de7b99b0d8e12caf36ff781e39524425d75ba4b2738b60600135604051611fe791815260200190565b60405180910390a3505050505f805d50505050505050565b7fc94330da5d5688c06df0ade6bfd773c87249c0b9f38b25021e2c16ab9672d004545f9061202f90600190613308565b905090565b335f9081527fc94330da5d5688c06df0ade6bfd773c87249c0b9f38b25021e2c16ab9672d00c60205260409020547fc94330da5d5688c06df0ade6bfd773c87249c0b9f38b25021e2c16ab9672d0009060ff166120bd576040517f53e2827c00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5f5c80156120f7576040517f37ed32e800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60015f5d5f4960014981612137576040517f590c038600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b801561216f576040517f0f08fa7500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b506040517f02000000000000000000000000000000000000000000000000000000000000006020820152602181018290525f90604101604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0818403018152919052805160209091012090506121f3826121ee608088018861331b565b612c9c565b5f808061221084893560208b013560408c013560608d013561272b565b92509250925081837f63d18c9e307e6faa3bf6096039a5f1197189161fbc0957576a48b5181208fda5838b60200135604051611728929190918252602082015260400190565b61225e6126c2565b73ffffffffffffffffffffffffffffffffffffffff165f9081527fc94330da5d5688c06df0ade6bfd773c87249c0b9f38b25021e2c16ab9672d00d6020526040902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00169055565b6122d06126c2565b7fc94330da5d5688c06df0ade6bfd773c87249c0b9f38b25021e2c16ab9672d01055565b5f807f237e158222e3e6968b72b9db0d8043aacf074ad9f650f0d1606b4d82ee432c006119bb565b6123246126c2565b7f237e158222e3e6968b72b9db0d8043aacf074ad9f650f0d1606b4d82ee432c0080547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff8316908117825561238d611997565b73ffffffffffffffffffffffffffffffffffffffff167f38d16b8cac22d99fc7c124b9cd0de2d3fa1faef420bfe791d8c362d765e2270060405160405180910390a35050565b610720811461240e576040517f1d57967a00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b7fc94330da5d5688c06df0ade6bfd773c87249c0b9f38b25021e2c16ab9672d00f5487547fc94330da5d5688c06df0ade6bfd773c87249c0b9f38b25021e2c16ab9672d0009173ffffffffffffffffffffffffffffffffffffffff16905f8190036124a5576040517fc6be1cbd00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60018a01545f90815260078401602090815260408083205460028e015484526005870183528184205482519384018690529183018190526060808401839052608084018c905260a084018e905260c084018d90528a901b7fffffffffffffffffffffffffffffffffffffffff0000000000000000000000001660e084015292909160f4016040516020818303038152906040528051906020012090508473ffffffffffffffffffffffffffffffffffffffff1663c4d062588260405160200161257091815260200190565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529082905260108a01547fffffffff0000000000000000000000000000000000000000000000000000000060e085901b1683526125dd928d918d916004016133f6565b5f6040518083038186803b1580156125f3575f80fd5b505afa158015612605573d5f803e3d5ffd5b5050505050505050505050505050505050565b5f7fc94330da5d5688c06df0ade6bfd773c87249c0b9f38b25021e2c16ab9672d0008160016126657fc94330da5d5688c06df0ade6bfd773c87249c0b9f38b25021e2c16ab9672d0025490565b035f818152600a84016020526040902060028082015490870154929350909180821061269757505f9695505050505050565b5f91825260059094016020526040808220948252902060029384015493015492909203949350505050565b336126cb611997565b73ffffffffffffffffffffffffffffffffffffffff16146118a5576040517f118cdaa7000000000000000000000000000000000000000000000000000000008152336004820152602401610cc1565b612722612ded565b61191f81612e54565b5f808080878742888861273f600143613308565b6040805160208101979097528601949094526060850192909252608084015260a08301524060c082015260e081018a90526101000160405160208183030381529060405290505f6127ad7fc94330da5d5688c06df0ade6bfd773c87249c0b9f38b25021e2c16ab9672d00090565b9050438811156127ec576040517f7962a70d00000000000000000000000000000000000000000000000000000000815260048101899052602401610cc1565b436127f9611c208a6132c8565b1015612834576040517f10b72d2600000000000000000000000000000000000000000000000000000000815260048101899052602401610cc1565b60068101545f90815260078201602052604090206001015480891015612889576040517f5c42fb74000000000000000000000000000000000000000000000000000000008152600481018a9052602401610cc1565b505f806128958a612eab565b915091505f8284600301546128aa9190613308565b600385018490556006850180549192505f6128c4836133bf565b909155505f8181526007860160205260408120805490916128e68460016132c8565b905081818a6040516020016128fd939291906134b4565b60405160208183030381529060405280519060200120995084886008015461292591906132c8565b9b506129328c60016132c8565b60088901555f81815260079098016020526040909720898155600181019e909e5550505050600290990198909855939993985090965091945050505050565b7f237e158222e3e6968b72b9db0d8043aacf074ad9f650f0d1606b4d82ee432c0080547fffffffffffffffffffffffff00000000000000000000000000000000000000001681556129c182612f6b565b5050565b5f7fc94330da5d5688c06df0ade6bfd773c87249c0b9f38b25021e2c16ab9672d000816129f560208601866130e2565b6002811115612a0657612a06613383565b03612aa257823411612a44576040517f1841b4e100000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5f612a52602086018661331b565b612a5b916134d4565b90505f82600101548534612a6f9190613308565b83604051602001612a83949392919061354c565b6040516020818303038152906040528051906020012092505050612b2d565b823414612adb576040517f1841b4e100000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001612aea60208601866130e2565b60018301548290612afe602089018961331b565b604051602001612b12959493929190613573565b60405160208183030381529060405280519060200120925050505b92915050565b5f7f0100000000000000000000000000000000000000000000000000000000000000808335612b6860408601602087016135a6565b6040860135612b92612b8060a0890160808a01613021565b5f5260608801356020526034600c2090565b6040517fff000000000000000000000000000000000000000000000000000000000000009687166020820152948616602186015260228501939093529316604283015260438201929092526063810191909152608301604051602081830303815290604052805190602001209050919050565b8185855f5b818114612c585784811c600116808015612c2b5760018114612c3857612c41565b855f528435602052612c41565b84355f52856020525b505060405f20935060209290920191600101612c0a565b505050808414612c94576040517fb86abc9c00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b505050505050565b5f80600a73ffffffffffffffffffffffffffffffffffffffff16858585604051602001612ccb939291906135e5565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe081840301815290829052612d03916135fe565b5f60405180830381855afa9150503d805f8114612d3b576040519150601f19603f3d011682016040523d82523d5f602084013e612d40565b606091505b509150915081612d7c576040517feebc703800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5f81806020019051810190612d919190613609565b9150507f73eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff000000018114612c94576040517f30a0045e00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a005468010000000000000000900460ff166118a5576040517fd7e6bcf800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b612e5c612ded565b73ffffffffffffffffffffffffffffffffffffffff8116611916576040517f1e4fbdf70000000000000000000000000000000000000000000000000000000081525f6004820152602401610cc1565b7fc94330da5d5688c06df0ade6bfd773c87249c0b9f38b25021e2c16ab9672d00480545f9182917fc94330da5d5688c06df0ade6bfd773c87249c0b9f38b25021e2c16ab9672d0009190600b845b818114612f61575f81600185030390505f858281548110612f1c57612f1c6132db565b5f918252602090912060088204015460079091166004026101000a900463ffffffff169050898111612f575750909890975095505050505050565b5050600101612ef9565b5050505050915091565b7f9016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c19930080547fffffffffffffffffffffffff0000000000000000000000000000000000000000811673ffffffffffffffffffffffffffffffffffffffff848116918217845560405192169182907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0905f90a3505050565b73ffffffffffffffffff