UNPKG

@zero-tech/zkevm-contracts

Version:
1,148 lines 91.7 kB
{ "_format": "hh-sol-artifact-1", "contractName": "PolygonZkEVMEtrogPrevious", "sourceName": "contracts/v2/previousVersions/PolygonZkEVMEtrogPrevious.sol", "abi": [ { "inputs": [ { "internalType": "contract IPolygonZkEVMGlobalExitRootV2", "name": "_globalExitRootManager", "type": "address" }, { "internalType": "contract IERC20Upgradeable", "name": "_pol", "type": "address" }, { "internalType": "contract IPolygonZkEVMBridgeV2", "name": "_bridgeAddress", "type": "address" }, { "internalType": "contract PolygonRollupManager", "name": "_rollupManager", "type": "address" } ], "stateMutability": "nonpayable", "type": "constructor" }, { "inputs": [], "name": "BatchAlreadyVerified", "type": "error" }, { "inputs": [], "name": "BatchNotSequencedOrNotSequenceEnd", "type": "error" }, { "inputs": [], "name": "ExceedMaxVerifyBatches", "type": "error" }, { "inputs": [], "name": "FinalNumBatchBelowLastVerifiedBatch", "type": "error" }, { "inputs": [], "name": "FinalNumBatchDoesNotMatchPendingState", "type": "error" }, { "inputs": [], "name": "FinalPendingStateNumInvalid", "type": "error" }, { "inputs": [], "name": "ForceBatchNotAllowed", "type": "error" }, { "inputs": [], "name": "ForceBatchTimeoutNotExpired", "type": "error" }, { "inputs": [], "name": "ForceBatchesAlreadyActive", "type": "error" }, { "inputs": [], "name": "ForceBatchesDecentralized", "type": "error" }, { "inputs": [], "name": "ForceBatchesNotAllowedOnEmergencyState", "type": "error" }, { "inputs": [], "name": "ForceBatchesOverflow", "type": "error" }, { "inputs": [], "name": "ForcedDataDoesNotMatch", "type": "error" }, { "inputs": [], "name": "GasTokenNetworkMustBeZeroOnEther", "type": "error" }, { "inputs": [], "name": "GlobalExitRootNotExist", "type": "error" }, { "inputs": [], "name": "HaltTimeoutNotExpired", "type": "error" }, { "inputs": [], "name": "HaltTimeoutNotExpiredAfterEmergencyState", "type": "error" }, { "inputs": [], "name": "HugeTokenMetadataNotSupported", "type": "error" }, { "inputs": [], "name": "InitNumBatchAboveLastVerifiedBatch", "type": "error" }, { "inputs": [], "name": "InitNumBatchDoesNotMatchPendingState", "type": "error" }, { "inputs": [], "name": "InitSequencedBatchDoesNotMatch", "type": "error" }, { "inputs": [], "name": "InvalidInitializeTransaction", "type": "error" }, { "inputs": [], "name": "InvalidProof", "type": "error" }, { "inputs": [], "name": "InvalidRangeBatchTimeTarget", "type": "error" }, { "inputs": [], "name": "InvalidRangeForceBatchTimeout", "type": "error" }, { "inputs": [], "name": "InvalidRangeMultiplierBatchFee", "type": "error" }, { "inputs": [], "name": "MaxTimestampSequenceInvalid", "type": "error" }, { "inputs": [], "name": "NewAccInputHashDoesNotExist", "type": "error" }, { "inputs": [], "name": "NewPendingStateTimeoutMustBeLower", "type": "error" }, { "inputs": [], "name": "NewStateRootNotInsidePrime", "type": "error" }, { "inputs": [], "name": "NewTrustedAggregatorTimeoutMustBeLower", "type": "error" }, { "inputs": [], "name": "NotEnoughMaticAmount", "type": "error" }, { "inputs": [], "name": "NotEnoughPOLAmount", "type": "error" }, { "inputs": [], "name": "OldAccInputHashDoesNotExist", "type": "error" }, { "inputs": [], "name": "OldStateRootDoesNotExist", "type": "error" }, { "inputs": [], "name": "OnlyAdmin", "type": "error" }, { "inputs": [], "name": "OnlyPendingAdmin", "type": "error" }, { "inputs": [], "name": "OnlyRollupManager", "type": "error" }, { "inputs": [], "name": "OnlyTrustedAggregator", "type": "error" }, { "inputs": [], "name": "OnlyTrustedSequencer", "type": "error" }, { "inputs": [], "name": "PendingStateDoesNotExist", "type": "error" }, { "inputs": [], "name": "PendingStateInvalid", "type": "error" }, { "inputs": [], "name": "PendingStateNotConsolidable", "type": "error" }, { "inputs": [], "name": "PendingStateTimeoutExceedHaltAggregationTimeout", "type": "error" }, { "inputs": [], "name": "SequenceZeroBatches", "type": "error" }, { "inputs": [], "name": "SequencedTimestampBelowForcedTimestamp", "type": "error" }, { "inputs": [], "name": "SequencedTimestampInvalid", "type": "error" }, { "inputs": [], "name": "StoredRootMustBeDifferentThanNewRoot", "type": "error" }, { "inputs": [], "name": "TransactionsLengthAboveMax", "type": "error" }, { "inputs": [], "name": "TrustedAggregatorTimeoutExceedHaltAggregationTimeout", "type": "error" }, { "inputs": [], "name": "TrustedAggregatorTimeoutNotExpired", "type": "error" }, { "anonymous": false, "inputs": [ { "indexed": false, "internalType": "address", "name": "newAdmin", "type": "address" } ], "name": "AcceptAdminRole", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": true, "internalType": "uint64", "name": "forceBatchNum", "type": "uint64" }, { "indexed": false, "internalType": "bytes32", "name": "lastGlobalExitRoot", "type": "bytes32" }, { "indexed": false, "internalType": "address", "name": "sequencer", "type": "address" }, { "indexed": false, "internalType": "bytes", "name": "transactions", "type": "bytes" } ], "name": "ForceBatch", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": false, "internalType": "bytes", "name": "transactions", "type": "bytes" }, { "indexed": false, "internalType": "bytes32", "name": "lastGlobalExitRoot", "type": "bytes32" }, { "indexed": false, "internalType": "address", "name": "sequencer", "type": "address" } ], "name": "InitialSequenceBatches", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": false, "internalType": "uint8", "name": "version", "type": "uint8" } ], "name": "Initialized", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": true, "internalType": "uint64", "name": "numBatch", "type": "uint64" }, { "indexed": false, "internalType": "bytes32", "name": "l1InfoRoot", "type": "bytes32" } ], "name": "SequenceBatches", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": true, "internalType": "uint64", "name": "numBatch", "type": "uint64" } ], "name": "SequenceForceBatches", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": false, "internalType": "address", "name": "newForceBatchAddress", "type": "address" } ], "name": "SetForceBatchAddress", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": false, "internalType": "uint64", "name": "newforceBatchTimeout", "type": "uint64" } ], "name": "SetForceBatchTimeout", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": false, "internalType": "address", "name": "newTrustedSequencer", "type": "address" } ], "name": "SetTrustedSequencer", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": false, "internalType": "string", "name": "newTrustedSequencerURL", "type": "string" } ], "name": "SetTrustedSequencerURL", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": false, "internalType": "address", "name": "newPendingAdmin", "type": "address" } ], "name": "TransferAdminRole", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": true, "internalType": "uint64", "name": "numBatch", "type": "uint64" }, { "indexed": false, "internalType": "bytes32", "name": "stateRoot", "type": "bytes32" }, { "indexed": true, "internalType": "address", "name": "aggregator", "type": "address" } ], "name": "VerifyBatches", "type": "event" }, { "inputs": [], "name": "GLOBAL_EXIT_ROOT_MANAGER_L2", "outputs": [ { "internalType": "contract IBasePolygonZkEVMGlobalExitRoot", "name": "", "type": "address" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "INITIALIZE_TX_BRIDGE_LIST_LEN_LEN", "outputs": [ { "internalType": "uint8", "name": "", "type": "uint8" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "INITIALIZE_TX_BRIDGE_PARAMS", "outputs": [ { "internalType": "bytes", "name": "", "type": "bytes" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "INITIALIZE_TX_BRIDGE_PARAMS_AFTER_BRIDGE_ADDRESS", "outputs": [ { "internalType": "bytes", "name": "", "type": "bytes" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "INITIALIZE_TX_BRIDGE_PARAMS_AFTER_BRIDGE_ADDRESS_EMPTY_METADATA", "outputs": [ { "internalType": "bytes", "name": "", "type": "bytes" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "INITIALIZE_TX_CONSTANT_BYTES", "outputs": [ { "internalType": "uint16", "name": "", "type": "uint16" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "INITIALIZE_TX_CONSTANT_BYTES_EMPTY_METADATA", "outputs": [ { "internalType": "uint16", "name": "", "type": "uint16" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "INITIALIZE_TX_DATA_LEN_EMPTY_METADATA", "outputs": [ { "internalType": "uint8", "name": "", "type": "uint8" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "INITIALIZE_TX_EFFECTIVE_PERCENTAGE", "outputs": [ { "internalType": "bytes1", "name": "", "type": "bytes1" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "SIGNATURE_INITIALIZE_TX_R", "outputs": [ { "internalType": "bytes32", "name": "", "type": "bytes32" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "SIGNATURE_INITIALIZE_TX_S", "outputs": [ { "internalType": "bytes32", "name": "", "type": "bytes32" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "SIGNATURE_INITIALIZE_TX_V", "outputs": [ { "internalType": "uint8", "name": "", "type": "uint8" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "acceptAdminRole", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [], "name": "admin", "outputs": [ { "internalType": "address", "name": "", "type": "address" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "bridgeAddress", "outputs": [ { "internalType": "contract IPolygonZkEVMBridgeV2", "name": "", "type": "address" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "calculatePolPerForceBatch", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "bytes", "name": "transactions", "type": "bytes" }, { "internalType": "uint256", "name": "polAmount", "type": "uint256" } ], "name": "forceBatch", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [], "name": "forceBatchAddress", "outputs": [ { "internalType": "address", "name": "", "type": "address" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "forceBatchTimeout", "outputs": [ { "internalType": "uint64", "name": "", "type": "uint64" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "uint64", "name": "", "type": "uint64" } ], "name": "forcedBatches", "outputs": [ { "internalType": "bytes32", "name": "", "type": "bytes32" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "gasTokenAddress", "outputs": [ { "internalType": "address", "name": "", "type": "address" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "gasTokenNetwork", "outputs": [ { "internalType": "uint32", "name": "", "type": "uint32" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "uint32", "name": "networkID", "type": "uint32" }, { "internalType": "address", "name": "_gasTokenAddress", "type": "address" }, { "internalType": "uint32", "name": "_gasTokenNetwork", "type": "uint32" }, { "internalType": "bytes", "name": "_gasTokenMetadata", "type": "bytes" } ], "name": "generateInitializeTransaction", "outputs": [ { "internalType": "bytes", "name": "", "type": "bytes" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "globalExitRootManager", "outputs": [ { "internalType": "contract IPolygonZkEVMGlobalExitRootV2", "name": "", "type": "address" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "_admin", "type": "address" }, { "internalType": "address", "name": "sequencer", "type": "address" }, { "internalType": "uint32", "name": "networkID", "type": "uint32" }, { "internalType": "address", "name": "_gasTokenAddress", "type": "address" }, { "internalType": "string", "name": "sequencerURL", "type": "string" }, { "internalType": "string", "name": "_networkName", "type": "string" } ], "name": "initialize", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [], "name": "lastAccInputHash", "outputs": [ { "internalType": "bytes32", "name": "", "type": "bytes32" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "lastForceBatch", "outputs": [ { "internalType": "uint64", "name": "", "type": "uint64" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "lastForceBatchSequenced", "outputs": [ { "internalType": "uint64", "name": "", "type": "uint64" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "networkName", "outputs": [ { "internalType": "string", "name": "", "type": "string" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "uint64", "name": "lastVerifiedBatch", "type": "uint64" }, { "internalType": "bytes32", "name": "newStateRoot", "type": "bytes32" }, { "internalType": "address", "name": "aggregator", "type": "address" } ], "name": "onVerifyBatches", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [], "name": "pendingAdmin", "outputs": [ { "internalType": "address", "name": "", "type": "address" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "pol", "outputs": [ { "internalType": "contract IERC20Upgradeable", "name": "", "type": "address" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "rollupManager", "outputs": [ { "internalType": "contract PolygonRollupManager", "name": "", "type": "address" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "components": [ { "internalType": "bytes", "name": "transactions", "type": "bytes" }, { "internalType": "bytes32", "name": "forcedGlobalExitRoot", "type": "bytes32" }, { "internalType": "uint64", "name": "forcedTimestamp", "type": "uint64" }, { "internalType": "bytes32", "name": "forcedBlockHashL1", "type": "bytes32" } ], "internalType": "struct PolygonRollupBaseEtrogPrevious.BatchData[]", "name": "batches", "type": "tuple[]" }, { "internalType": "address", "name": "l2Coinbase", "type": "address" } ], "name": "sequenceBatches", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "components": [ { "internalType": "bytes", "name": "transactions", "type": "bytes" }, { "internalType": "bytes32", "name": "forcedGlobalExitRoot", "type": "bytes32" }, { "internalType": "uint64", "name": "forcedTimestamp", "type": "uint64" }, { "internalType": "bytes32", "name": "forcedBlockHashL1", "type": "bytes32" } ], "internalType": "struct PolygonRollupBaseEtrogPrevious.BatchData[]", "name": "batches", "type": "tuple[]" } ], "name": "sequenceForceBatches", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "newForceBatchAddress", "type": "address" } ], "name": "setForceBatchAddress", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "uint64", "name": "newforceBatchTimeout", "type": "uint64" } ], "name": "setForceBatchTimeout", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "newTrustedSequencer", "type": "address" } ], "name": "setTrustedSequencer", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "string", "name": "newTrustedSequencerURL", "type": "string" } ], "name": "setTrustedSequencerURL", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "newPendingAdmin", "type": "address" } ], "name": "transferAdminRole", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [], "name": "trustedSequencer", "outputs": [ { "internalType": "address", "name": "", "type": "address" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "trustedSequencerURL", "outputs": [ { "internalType": "string", "name": "", "type": "string" } ], "stateMutability": "view", "type": "function" } ], "bytecode": "0x61010060405234801562000011575f80fd5b50604051620042443803806200424483398101604081905262000034916200006f565b6001600160a01b0393841660a052918316608052821660c0521660e052620000d4565b6001600160a01b03811681146200006c575f80fd5b50565b5f805f806080858703121562000083575f80fd5b8451620000908162000057565b6020860151909450620000a38162000057565b6040860151909350620000b68162000057565b6060860151909250620000c98162000057565b939692955090935050565b60805160a05160c05160e05161408d620001b75f395f81816104de0152818161094201528181610aae01528181610cf6015281816112c80152818161176301528181611bb201528181611ca701528181612323015281816123e801528181612cf201528181612d6b01528181612d8d0152612ea201525f818161063701528181610eea01528181610fbf01528181611e7101528181611f79015261283d01525f81816106f30152818161113f0152818161253001526128b901525f8181610725015281816107f501528181611bfb015281816125050152612e39015261408d5ff3fe608060405234801561000f575f80fd5b50600436106102cc575f3560e01c80637a5460c51161017c578063c7fffd4b116100dd578063e46761c411610093578063ecef3f991161006e578063ecef3f991461076e578063f35dda4714610781578063f851a44014610789575f80fd5b8063e46761c414610720578063e7a7ed0214610747578063eaeb077b1461075b575f80fd5b8063cfa8ed47116100c3578063cfa8ed47146106ce578063d02103ca146106ee578063d7bc90ff14610715575f80fd5b8063c7fffd4b146106b3578063c89e42df146106bb575f80fd5b8063a3c573eb11610132578063ada8f91911610118578063ada8f9191461066c578063b0afe1541461067f578063c754c7ed1461068b575f80fd5b8063a3c573eb14610632578063a652f26c14610659575f80fd5b806391cafe321161016257806391cafe32146105f15780639e001877146106045780639f26f8401461061f575f80fd5b80637a5460c5146105ad5780638c3d7301146105e9575f80fd5b806340b5de6c11610231578063542028d5116101e75780636e05d2cd116101c25780636e05d2cd1461057e5780636ff512cc14610587578063712570221461059a575f80fd5b8063542028d51461054f578063676870d2146105575780636b8616ce1461055f575f80fd5b806349b7b8021161021757806349b7b802146104d95780634e4877061461050057806352bdeb6d14610513575f80fd5b806340b5de6c1461044857806345605267146104a0575f80fd5b8063267822471161028657806332c2d1531161026c57806332c2d153146103d65780633c351e10146103eb5780633cbc795b1461040b575f80fd5b806326782247146103715780632c111c06146103b6575f80fd5b806305835f37116102b657806305835f3714610306578063107bf28c1461034f57806311e892d414610357575f80fd5b8062d0295d146102d057806303508963146102eb575b5f80fd5b6102d86107ae565b6040519081526020015b60405180910390f35b6102f3602081565b60405161ffff90911681526020016102e2565b6103426040518060400160405280600881526020017f80808401c9c3809400000000000000000000000000000000000000000000000081525081565b6040516102e29190613392565b6103426108b4565b61035f60f981565b60405160ff90911681526020016102e2565b6001546103919073ffffffffffffffffffffffffffffffffffffffff1681565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020016102e2565b6008546103919073ffffffffffffffffffffffffffffffffffffffff1681565b6103e96103e43660046133e4565b610940565b005b6009546103919073ffffffffffffffffffffffffffffffffffffffff1681565b6009546104339074010000000000000000000000000000000000000000900463ffffffff1681565b60405163ffffffff90911681526020016102e2565b61046f7fff0000000000000000000000000000000000000000000000000000000000000081565b6040517fff0000000000000000000000000000000000000000000000000000000000000090911681526020016102e2565b6007546104c09068010000000000000000900467ffffffffffffffff1681565b60405167ffffffffffffffff90911681526020016102e2565b6103917f000000000000000000000000000000000000000000000000000000000000000081565b6103e961050e366004613423565b610a0f565b6103426040518060400160405280600281526020017f80b800000000000000000000000000000000000000000000000000000000000081525081565b610342610c1e565b6102f3601f81565b6102d861056d366004613423565b60066020525f908152604090205481565b6102d860055481565b6103e961059536600461343e565b610c2b565b6103e96105a836600461357d565b610cf4565b6103426040518060400160405280600281526020017f80b900000000000000000000000000000000000000000000000000000000000081525081565b6103e96114fd565b6103e96105ff36600461343e565b6115cf565b61039173a40d5f56745a118d0906a34e69aec8c0db1cb8fa81565b6103e961062d36600461366c565b6116e7565b6103917f000000000000000000000000000000000000000000000000000000000000000081565b6103426106673660046136ab565b611d73565b6103e961067a36600461343e565b612151565b6102d86405ca1ab1e081565b6007546104c090700100000000000000000000000000000000900467ffffffffffffffff1681565b61035f60e481565b6103e96106c936600461371c565b61221a565b6002546103919073ffffffffffffffffffffffffffffffffffffffff1681565b6103917f000000000000000000000000000000000000000000000000000000000000000081565b6102d8635ca1ab1e81565b6103917f000000000000000000000000000000000000000000000000000000000000000081565b6007546104c09067ffffffffffffffff1681565b6103e961076936600461374e565b6122ac565b6103e961077c3660046137bf565b612773565b61035f601b81565b5f546103919062010000900473ffffffffffffffffffffffffffffffffffffffff1681565b6040517f70a082310000000000000000000000000000000000000000000000000000000081523060048201525f90819073ffffffffffffffffffffffffffffffffffffffff7f000000000000000000000000000000000000000000000000000000000000000016906370a0823190602401602060405180830381865afa15801561083a573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061085e9190613807565b6007549091505f906108889067ffffffffffffffff6801000000000000000082048116911661384b565b67ffffffffffffffff169050805f036108a3575f9250505090565b6108ad8183613873565b9250505090565b600480546108c1906138ab565b80601f01602080910402602001604051908101604052809291908181526020018280546108ed906138ab565b80156109385780601f1061090f57610100808354040283529160200191610938565b820191905f5260205f20905b81548152906001019060200180831161091b57829003601f168201915b505050505081565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1633146109af576040517fb9b3a2c800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff168367ffffffffffffffff167f9c72852172521097ba7e1482e6b44b351323df0155f97f4ea18fcec28e1f596684604051610a0291815260200190565b60405180910390a3505050565b5f5462010000900473ffffffffffffffffffffffffffffffffffffffff163314610a65576040517f4755657900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b62093a8067ffffffffffffffff82161115610aac576040517ff5e37f2f00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff166315064c966040518163ffffffff1660e01b8152600401602060405180830381865afa158015610b15573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610b3991906138fc565b610b9a5760075467ffffffffffffffff700100000000000000000000000000000000909104811690821610610b9a576040517ff5e37f2f00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600780547fffffffffffffffff0000000000000000ffffffffffffffffffffffffffffffff1670010000000000000000000000000000000067ffffffffffffffff8416908102919091179091556040519081527fa7eb6cb8a613eb4e8bddc1ac3d61ec6cf10898760f0b187bcca794c6ca6fa40b906020015b60405180910390a150565b600380546108c1906138ab565b5f5462010000900473ffffffffffffffffffffffffffffffffffffffff163314610c81576040517f4755657900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600280547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff83169081179091556040519081527ff54144f9611984021529f814a1cb6a41e22c58351510a0d9f7e822618abb9cc090602001610c13565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff163314610d63576040517fb9b3a2c800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5f54610100900460ff1615808015610d8157505f54600160ff909116105b80610d9a5750303b158015610d9a57505f5460ff166001145b610e2b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201527f647920696e697469616c697a656400000000000000000000000000000000000060648201526084015b60405180910390fd5b5f80547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660011790558015610e87575f80547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff166101001790555b606073ffffffffffffffffffffffffffffffffffffffff8516156110e4576040517fc00f14ab00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff86811660048301527f0000000000000000000000000000000000000000000000000000000000000000169063c00f14ab906024015f60405180830381865afa158015610f2e573d5f803e3d5ffd5b505050506040513d5f823e601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0168201604052610f73919081019061391b565b6040517f318aee3d00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff87811660048301529192505f9182917f00000000000000000000000000000000000000000000000000000000000000009091169063318aee3d906024016040805180830381865afa158015611005573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611029919061398d565b915091508163ffffffff165f146110a0576009805463ffffffff841674010000000000000000000000000000000000000000027fffffffffffffffff00000000000000000000000000000000000000000000000090911673ffffffffffffffffffffffffffffffffffffffff8416171790556110e1565b600980547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff89161790555b50505b6009545f9061112b90889073ffffffffffffffffffffffffffffffffffffffff81169074010000000000000000000000000000000000000000900463ffffffff1685611d73565b90505f818051906020012090505f4290505f7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16633ed691ef6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156111a6573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906111ca9190613807565b90505f808483858f6111dd6001436139c5565b60408051602081019790975286019490945260608086019390935260c09190911b7fffffffffffffffff000000000000000000000000000000000000000000000000166080850152901b7fffffffffffffffffffffffffffffffffffffffff00000000000000000000000016608883015240609c82015260bc01604080518083037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe001815290829052805160209091012060058190557f9a908e73000000000000000000000000000000000000000000000000000000008252600160048301526024820181905291507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1690639a908e73906044016020604051808303815f875af1158015611323573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061134791906139de565b508c5f60026101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508b60025f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555088600390816113d79190613a3e565b5060046113e48982613a3e565b508c60085f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555062069780600760106101000a81548167ffffffffffffffff021916908367ffffffffffffffff1602179055507f060116213bcbf54ca19fd649dc84b59ab2bbd200ab199770e4d923e222a28e7f85838e60405161148493929190613b56565b60405180910390a150505050505080156114f4575f80547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b50505050505050565b60015473ffffffffffffffffffffffffffffffffffffffff16331461154e576040517fd1ec4b2300000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001545f80547fffffffffffffffffffff0000000000000000000000000000000000000000ffff1673ffffffffffffffffffffffffffffffffffffffff9092166201000081029290921790556040519081527f056dc487bbf0795d0bbb1b4f0af523a855503cff740bfb4d5475f7a90c091e8e9060200160405180910390a1565b5f5462010000900473ffffffffffffffffffffffffffffffffffffffff163314611625576040517f4755657900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60085473ffffffffffffffffffffffffffffffffffffffff16611674576040517fc89374d800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600880547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff83169081179091556040519081527f5fbd7dd171301c4a1611a84aac4ba86d119478560557755f7927595b082634fb90602001610c13565b60085473ffffffffffffffffffffffffffffffffffffffff168015801590611725575073ffffffffffffffffffffffffffffffffffffffff81163314155b1561175c576040517f24eff8c300000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b4262093a807f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff166330c27dde6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156117ca573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906117ee91906139de565b6117f89190613b94565b67ffffffffffffffff16111561183a576040517f3d49ed4c00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b815f819003611875576040517fcb591a5f00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6103e88111156118b1576040517fb59f753a00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60075467ffffffffffffffff808216916118d991849168010000000000000000900416613bb5565b1115611911576040517fc630a00d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6007546005546801000000000000000090910467ffffffffffffffff16905f5b83811015611bac575f87878381811061194c5761194c613bc8565b905060200281019061195e9190613bf5565b61196790613c31565b90508361197381613cb7565b825180516020918201208185015160408087015160608801519151959a509295505f946119df948794929101938452602084019290925260c01b7fffffffffffffffff000000000000000000000000000000000000000000000000166040830152604882015260680190565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0818403018152918152815160209283012067ffffffffffffffff89165f90815260069093529120549091508114611a67576040517fce3d755e00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b67ffffffffffffffff86165f90815260066020526040812055611a8b6001886139c5565b8403611afa5742600760109054906101000a900467ffffffffffffffff168460400151611ab89190613b94565b67ffffffffffffffff161115611afa576040517fc44a082100000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60208381015160408086015160608088015183519586018b90529285018790528481019390935260c01b7fffffffffffffffff0000000000000000000000000000000000000000000000001660808401523390911b7fffffffffffffffffffffffffffffffffffffffff000000000000000000000000166088830152609c82015260bc016040516020818303038152906040528051906020012094505050508080611ba490613cdd565b915050611931565b50611c227f000000000000000000000000000000000000000000000000000000000000000084611bda6107ae565b611be49190613d14565b73ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000169190612f74565b60058190556007805467ffffffffffffffff841668010000000000000000027fffffffffffffffffffffffffffffffff0000000000000000ffffffffffffffff9091161790556040517f9a908e730000000000000000000000000000000000000000000000000000000081525f9073ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000001690639a908e7390611cf3908790869060040167ffffffffffffffff929092168252602082015260400190565b6020604051808303815f875af1158015611d0f573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611d3391906139de565b60405190915067ffffffffffffffff8216907f648a61dd2438f072f5a1960939abd30f37aea80d2e94c9792ad142d3e0a490a4905f90a250505050505050565b60605f85858573a40d5f56745a118d0906a34e69aec8c0db1cb8fa5f87604051602401611da596959493929190613d2b565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167ff811bff70000000000000000000000000000000000000000000000000000000017905283519091506060905f03611ef55760f9601f8351611e399190613d8d565b6040518060400160405280600881526020017f80808401c9c380940000000000000000000000000000000000000000000000008152507f00000000000000000000000000000000000000000000000000000000000000006040518060400160405280600281526020017f80b800000000000000000000000000000000000000000000000000000000000081525060e487604051602001611edf9796959493929190613da8565b6040516020818303038152906040529050611ff9565b815161ffff1015611f32576040517f248b8f8200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b815160f9611f41602083613d8d565b6040518060400160405280600881526020017f80808401c9c380940000000000000000000000000000000000000000000000008152507f00000000000000000000000000000000000000000000000000000000000000006040518060400160405280600281526020017f80b90000000000000000000000000000000000000000000000000000000000008152508588604051602001611fe69796959493929190613e8a565b6040516020818303038152906040529150505b8051602080830191909120604080515f80825293810180835292909252601b908201526405ca1ab1e06060820152635ca1ab1e608082015260019060a0016020604051602081039080840390855afa158015612057573d5f803e3d5ffd5b50506040517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0015191505073ffffffffffffffffffffffffffffffffffffffff81166120cf576040517fcd16196600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040515f906121149084906405ca1ab1e090635ca1ab1e90601b907fff0000000000000000000000000000000000000000000000000000000000000090602001613f6c565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529190529450505050505b949350505050565b5f5462010000900473ffffffffffffffffffffffffffffffffffffffff1633146121a7576040517f4755657900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600180547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff83169081179091556040519081527fa5b56b7906fd0a20e3f35120dd8343db1e12e037a6c90111c7e42885e82a1ce690602001610c13565b5f5462010000900473ffffffffffffffffffffffffffffffffffffffff163314612270576040517f4755657900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600361227c8282613a3e565b507f6b8f723a4c7a5335cafae8a598a0aa0301be1387c037dccc085b62add6448b2081604051610c139190613392565b60085473ffffffffffffffffffffffffffffffffffffffff1680158015906122ea575073ffffffffffffffffffffffffffffffffffffffff81163314155b15612321576040517f24eff8c300000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff166315064c966040518163ffffffff1660e01b8152600401602060405180830381865afa15801561238a573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906123ae91906138fc565b156123e5576040517f39258d1800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5f7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663604691696040518163ffffffff1660e01b8152600401602060405180830381865afa15801561244f573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906124739190613807565b9050828111156124af576040517f2354600f00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6113888411156124eb576040517fa29a6c7c00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61252d73ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000001633308461304d565b5f7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16633ed691ef6040518163ffffffff1660e01b8152600401602060405180830381865afa158015612597573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906125bb9190613807565b6007805491925067ffffffffffffffff909116905f6125d983613cb7565b91906101000a81548167ffffffffffffffff021916908367ffffffffffffffff160217905550508585604051612610929190613fc7565b60405190819003902081426126266001436139c5565b60408051602081019590955284019290925260c01b7fffffffffffffffff000000000000000000000000000000000000000000000000166060830152406068820152608801604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0818403018152918152815160209283012060075467ffffffffffffffff165f908152600690935291205532330361271c576007546040805183815233602082015260608183018190525f90820152905167ffffffffffffffff909216917ff94bb37db835f1ab585ee00041849a09b12cd081d77fa15ca070757619cbc9319181900360800190a261276b565b60075460405167ffffffffffffffff909116907ff94bb37db835f1ab585ee00041849a09b12cd081d77fa15ca070757619cbc9319061276290849033908b908b90613fd6565b60405180910390a25b505050505050565b60025473ffffffffffffffffffffffffffffffffffffffff1633146127c4576040517f11e7be1500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b815f8190036127ff576040517fcb591a5f00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6103e881111561283b576040517fb59f753a00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff166379e2cf976040518163ffffffff1660e01b81526004015f604051808303815f87803b1580156128a0575f80fd5b505af11580156128b2573d5f803e3d5ffd5b505050505f7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16635ca1e1656040518163ffffffff1660e01b8152600401602060405180830381865afa158015612920573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906129449190613807565b60075460055491925042916801000000000000000090910467ffffffffffffffff1690815f5b86811015612c65575f8a8a8381811061298557612985613bc8565b90506020028101906129979190613bf5565b6129a090613c31565b8051805160209091012060408201519192509067ffffffffffffffff1615612b8057856129cc81613cb7565b9650505f81836020015184604001518560600151604051602001612a2e9493929190938452602084019290925260c01b7fffffffffffffffff000000000000000000000000000000000000000000000000166040830152604882015260680190565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0818403018152918152815160209283012067ffffffffffffffff8a165f90815260069093529120549091508114612ab6576040517fce3d755e00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60208381015160408086015160608088015183519586018c90529285018790528481019390935260c01b7fffffffffffffffff000000000000000000000000000000000000000000000000166080840152908d901b7fffffffffffffffffffffffffffffffffffffffff000000000000000000000000166088830152609c82015260bc0160405160208183030381529060405280519060200120955060065f8867ffffffffffffffff1667ffffffffffffffff1681526020019081526020015f205f905550612c50565b8151516201d4c01015612bbf576040517fa29a6c7c00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b604080516020810187905290810182905260608082018a905260c089901b7fffffffffffffffff0000000000000000000000000000000000000000000000001660808301528b901b7fffffffffffffffffffffffffffffffffffffffff0000000000000000000000001660888201525f609c82015260bc016040516020818303038152906040528051906020012094505b50508080612c5d90613cdd565b91505061296a565b5060075467ffffffffffffffff9081169084161115612cb0576040517fc630a00d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60058290558567ffffffffffffffff84811690831614612d65575f612cd5838661384b565b9050612ceb67ffffffffffffffff8216836139c5565b9150612d247f00000000000000000000000000000000000000000000000000000000000000008267ffffffffffffffff16611bda6107ae565b50600780547fffffffffffffffffffffffffffffffff0000000000000000ffffffffffffffff166801000000000000000067ffffffffffffffff8716021790555b612e61337f0000000000000000000000000000000000000000000000000000000000000000837f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663477fa2706040518163ffffffff1660e01b8152600401602060405180830381865afa158015612df4573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190612e189190613807565b612e229190613d14565b73ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000001692919061304d565b6040517f9a908e7300000000000000000000000000000000000000000000000000000000815267ffffffffffffffff88166004820152602481018490525f907f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1690639a908e73906044016020604051808303815f875af1158015612efd573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190612f2191906139de565b90508067ffffffffffffffff167f3e54d0825ed78523037d00a81759237eb436ce774bd546993ee67a1b67b6e76688604051612f5f91815260200190565b60405180910390a25050505050505050505050565b60405173ffffffffffffffffffffffffffffffffffffffff83166024820152604481018290526130489084907fa9059cbb00000000000000000000000000000000000000000000