UNPKG

@mantleio/contracts

Version:
504 lines 57.3 kB
{ "_format": "hh-sol-artifact-1", "contractName": "StateCommitmentChain", "sourceName": "contracts/L1/rollup/StateCommitmentChain.sol", "abi": [ { "inputs": [ { "internalType": "address", "name": "_libAddressManager", "type": "address" }, { "internalType": "address", "name": "_l1messenger", "type": "address" }, { "internalType": "uint256", "name": "_fraudProofWindow", "type": "uint256" }, { "internalType": "uint256", "name": "_sequencerPublishWindow", "type": "uint256" } ], "stateMutability": "nonpayable", "type": "constructor" }, { "anonymous": false, "inputs": [ { "indexed": true, "internalType": "uint256", "name": "_startBlockNumber", "type": "uint256" }, { "indexed": false, "internalType": "uint256", "name": "_length", "type": "uint256" }, { "indexed": true, "internalType": "uint256", "name": "_batchTime", "type": "uint256" }, { "indexed": false, "internalType": "address[]", "name": "_tssMembers", "type": "address[]" } ], "name": "DistributeTssReward", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": true, "internalType": "uint256", "name": "_startBlockNumber", "type": "uint256" } ], "name": "RollBackL2Chain", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": true, "internalType": "uint256", "name": "_batchIndex", "type": "uint256" }, { "indexed": false, "internalType": "bytes32", "name": "_batchRoot", "type": "bytes32" }, { "indexed": false, "internalType": "uint256", "name": "_batchSize", "type": "uint256" }, { "indexed": false, "internalType": "uint256", "name": "_prevTotalElements", "type": "uint256" }, { "indexed": false, "internalType": "bytes", "name": "_signature", "type": "bytes" }, { "indexed": false, "internalType": "bytes", "name": "_extraData", "type": "bytes" } ], "name": "StateBatchAppended", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": true, "internalType": "uint256", "name": "_batchIndex", "type": "uint256" }, { "indexed": false, "internalType": "bytes32", "name": "_batchRoot", "type": "bytes32" } ], "name": "StateBatchDeleted", "type": "event" }, { "inputs": [], "name": "FRAUD_PROOF_WINDOW", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "SEQUENCER_PUBLISH_WINDOW", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "bytes32[]", "name": "_batch", "type": "bytes32[]" }, { "internalType": "uint256", "name": "_shouldStartAtElement", "type": "uint256" }, { "internalType": "bytes", "name": "_signature", "type": "bytes" } ], "name": "appendStateBatch", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [], "name": "batches", "outputs": [ { "internalType": "contract IChainStorageContainer", "name": "", "type": "address" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "components": [ { "internalType": "uint256", "name": "batchIndex", "type": "uint256" }, { "internalType": "bytes32", "name": "batchRoot", "type": "bytes32" }, { "internalType": "uint256", "name": "batchSize", "type": "uint256" }, { "internalType": "uint256", "name": "prevTotalElements", "type": "uint256" }, { "internalType": "bytes", "name": "signature", "type": "bytes" }, { "internalType": "bytes", "name": "extraData", "type": "bytes" } ], "internalType": "struct Lib_BVMCodec.ChainBatchHeader", "name": "_batchHeader", "type": "tuple" } ], "name": "deleteStateBatch", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [], "name": "getFraudProofWindow", "outputs": [ { "internalType": "uint256", "name": "_fraudProofWindow", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "getLastSequencerTimestamp", "outputs": [ { "internalType": "uint256", "name": "_lastSequencerTimestamp", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "getTotalBatches", "outputs": [ { "internalType": "uint256", "name": "_totalBatches", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "getTotalElements", "outputs": [ { "internalType": "uint256", "name": "_totalElements", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "components": [ { "internalType": "uint256", "name": "batchIndex", "type": "uint256" }, { "internalType": "bytes32", "name": "batchRoot", "type": "bytes32" }, { "internalType": "uint256", "name": "batchSize", "type": "uint256" }, { "internalType": "uint256", "name": "prevTotalElements", "type": "uint256" }, { "internalType": "bytes", "name": "signature", "type": "bytes" }, { "internalType": "bytes", "name": "extraData", "type": "bytes" } ], "internalType": "struct Lib_BVMCodec.ChainBatchHeader", "name": "_batchHeader", "type": "tuple" } ], "name": "insideFraudProofWindow", "outputs": [ { "internalType": "bool", "name": "_inside", "type": "bool" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "libAddressManager", "outputs": [ { "internalType": "contract Lib_AddressManager", "name": "", "type": "address" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "messenger", "outputs": [ { "internalType": "address", "name": "", "type": "address" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "string", "name": "_name", "type": "string" } ], "name": "resolve", "outputs": [ { "internalType": "address", "name": "", "type": "address" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "_shouldRollBack", "type": "uint256" }, { "internalType": "uint256", "name": "_shouldStartAtElement", "type": "uint256" }, { "internalType": "bytes", "name": "_signature", "type": "bytes" } ], "name": "rollBackL2Chain", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "_fraudProofWindow", "type": "uint256" } ], "name": "setFraudProofWindow", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "bytes32", "name": "_element", "type": "bytes32" }, { "components": [ { "internalType": "uint256", "name": "batchIndex", "type": "uint256" }, { "internalType": "bytes32", "name": "batchRoot", "type": "bytes32" }, { "internalType": "uint256", "name": "batchSize", "type": "uint256" }, { "internalType": "uint256", "name": "prevTotalElements", "type": "uint256" }, { "internalType": "bytes", "name": "signature", "type": "bytes" }, { "internalType": "bytes", "name": "extraData", "type": "bytes" } ], "internalType": "struct Lib_BVMCodec.ChainBatchHeader", "name": "_batchHeader", "type": "tuple" }, { "components": [ { "internalType": "uint256", "name": "index", "type": "uint256" }, { "internalType": "bytes32[]", "name": "siblings", "type": "bytes32[]" } ], "internalType": "struct Lib_BVMCodec.ChainInclusionProof", "name": "_proof", "type": "tuple" } ], "name": "verifyStateCommitment", "outputs": [ { "internalType": "bool", "name": "", "type": "bool" } ], "stateMutability": "view", "type": "function" } ], "bytecode": "0x60806040523480156200001157600080fd5b5060405162002cfc38038062002cfc833981016040819052620000349162000090565b600080546001600160a01b039586166001600160a01b0319918216179091556001805494909516931692909217909255600291909155600355620000d8565b80516001600160a01b03811681146200008b57600080fd5b919050565b60008060008060808587031215620000a757600080fd5b620000b28562000073565b9350620000c26020860162000073565b6040860151606090960151949790965092505050565b612c1480620000e86000396000f3fe608060405234801561001057600080fd5b50600436106101005760003560e01c80637ad168a011610097578063b768bb1711610066578063b768bb171461021e578063c17b291b14610231578063cfdf677e1461023a578063e561dddc1461024257600080fd5b80637ad168a0146101d757806381eb62ef146101df57806389a1d980146101e8578063ab59f7b81461020b57600080fd5b8063461a4478116100d3578063461a44781461019757806355a17f8a146101aa5780635b4d90e2146101bc5780637aa63a86146101cf57600080fd5b80630bf3b5f2146101055780632169f79f1461011a578063299ca4781461012d5780633cb747bf14610177575b600080fd5b6101186101133660046123c6565b61024a565b005b6101186101283660046124a5565b610429565b60005461014d9073ffffffffffffffffffffffffffffffffffffffff1681565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020015b60405180910390f35b60015461014d9073ffffffffffffffffffffffffffffffffffffffff1681565b61014d6101a5366004612508565b610835565b6002545b60405190815260200161016e565b6101186101ca3660046125f0565b6108e2565b6101ae610a9e565b6101ae610ab7565b6101ae60035481565b6101fb6101f63660046125f0565b610ad0565b604051901515815260200161016e565b610118610219366004612625565b610b78565b6101fb61022c36600461263e565b610cbb565b6101ae60025481565b61014d610d85565b6101ae610dad565b610252610a9e565b82146102cb5760405162461bcd60e51b815260206004820152603d60248201527f41637475616c20626174636820737461727420696e64657820646f6573206e6f60448201527f74206d6174636820657870656374656420737461727420696e6465782e00000060648201526084015b60405180910390fd5b6103096040518060400160405280600b81526020017f426f6e644d616e61676572000000000000000000000000000000000000000000815250610835565b6040517f02ad4d2a00000000000000000000000000000000000000000000000000000000815233600482015273ffffffffffffffffffffffffffffffffffffffff91909116906302ad4d2a9060240160206040518083038186803b15801561037057600080fd5b505afa158015610384573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906103a891906126fb565b61041a5760405162461bcd60e51b815260206004820152602f60248201527f50726f706f73657220646f6573206e6f74206861766520656e6f75676820636f60448201527f6c6c61746572616c20706f73746564000000000000000000000000000000000060648201526084016102c2565b6104248382610e34565b505050565b610431610a9e565b82146104a55760405162461bcd60e51b815260206004820152603d60248201527f41637475616c20626174636820737461727420696e64657820646f6573206e6f60448201527f74206d6174636820657870656374656420737461727420696e6465782e00000060648201526084016102c2565b6104e36040518060400160405280600b81526020017f426f6e644d616e61676572000000000000000000000000000000000000000000815250610835565b6040517f02ad4d2a00000000000000000000000000000000000000000000000000000000815233600482015273ffffffffffffffffffffffffffffffffffffffff91909116906302ad4d2a9060240160206040518083038186803b15801561054a57600080fd5b505afa15801561055e573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061058291906126fb565b6105f45760405162461bcd60e51b815260206004820152602f60248201527f50726f706f73657220646f6573206e6f74206861766520656e6f75676820636f60448201527f6c6c61746572616c20706f73746564000000000000000000000000000000000060648201526084016102c2565b600083511161066b5760405162461bcd60e51b815260206004820152602360248201527f43616e6e6f74207375626d697420616e20656d7074792073746174652062617460448201527f63682e000000000000000000000000000000000000000000000000000000000060648201526084016102c2565b6106a96040518060400160405280601981526020017f43616e6f6e6963616c5472616e73616374696f6e436861696e00000000000000815250610835565b73ffffffffffffffffffffffffffffffffffffffff16637aa63a866040518163ffffffff1660e01b815260040160206040518083038186803b1580156106ee57600080fd5b505afa158015610702573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610726919061271d565b8351610730610a9e565b61073a9190612765565b11156107d45760405162461bcd60e51b815260206004820152604960248201527f4e756d626572206f6620737461746520726f6f74732063616e6e6f742065786360448201527f65656420746865206e756d626572206f662063616e6f6e6963616c207472616e60648201527f73616374696f6e732e0000000000000000000000000000000000000000000000608482015260a4016102c2565b6107df838383611033565b61082a8382423360405160200161081692919091825273ffffffffffffffffffffffffffffffffffffffff16602082015260400190565b604051602081830303815290604052611171565b610424835183611421565b600080546040517fbf40fac100000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff9091169063bf40fac19061088c9085906004016127ca565b60206040518083038186803b1580156108a457600080fd5b505afa1580156108b8573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906108dc91906127ff565b92915050565b6109206040518060400160405280601181526020017f42564d5f46726175645665726966696572000000000000000000000000000000815250610835565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16146109c05760405162461bcd60e51b815260206004820152603b60248201527f537461746520626174636865732063616e206f6e6c792062652064656c65746560448201527f64206279207468652042564d5f467261756456657269666965722e000000000060648201526084016102c2565b6109c98161161c565b610a155760405162461bcd60e51b815260206004820152601560248201527f496e76616c6964206261746368206865616465722e000000000000000000000060448201526064016102c2565b610a1e81610ad0565b610a92576040805162461bcd60e51b81526020600482015260248101919091527f537461746520626174636865732063616e206f6e6c792062652064656c65746560448201527f642077697468696e207468652066726175642070726f6f662077696e646f772e60648201526084016102c2565b610a9b816116de565b50565b600080610aa961190f565b5064ffffffffff1692915050565b600080610ac261190f565b64ffffffffff169392505050565b6000808260a00151806020019051810190610aeb919061281c565b50905080610b615760405162461bcd60e51b815260206004820152602560248201527f4261746368206865616465722074696d657374616d702063616e6e6f7420626560448201527f207a65726f00000000000000000000000000000000000000000000000000000060648201526084016102c2565b4260025482610b709190612765565b119392505050565b60008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16638da5cb5b6040518163ffffffff1660e01b815260040160206040518083038186803b158015610bde57600080fd5b505afa158015610bf2573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610c1691906127ff565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614610cb65760405162461bcd60e51b815260206004820152602d60248201527f4f6e6c792063616c6c61626c6520627920746865206c6962416464726573734d60448201527f616e61676572206f776e65722e0000000000000000000000000000000000000060648201526084016102c2565b600255565b6000610cc68361161c565b610d125760405162461bcd60e51b815260206004820152601560248201527f496e76616c6964206261746368206865616465722e000000000000000000000060448201526064016102c2565b610d2f8360200151858460000151856020015187604001516119b3565b610d7b5760405162461bcd60e51b815260206004820152601860248201527f496e76616c696420696e636c7573696f6e2070726f6f662e000000000000000060448201526064016102c2565b5060019392505050565b6000610da8604051806060016040528060218152602001612bbe60219139610835565b905090565b6000610db7610d85565b73ffffffffffffffffffffffffffffffffffffffff16631f7b6d326040518163ffffffff1660e01b815260040160206040518083038186803b158015610dfc57600080fd5b505afa158015610e10573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610da8919061271d565b610e726040518060400160405280601781526020017f50726f78795f5f5453535f47726f75704d616e61676572000000000000000000815250610835565b73ffffffffffffffffffffffffffffffffffffffff16633231a7f083604051602001610ea091815260200190565b60405160208183030381529060405280519060200120836040518363ffffffff1660e01b8152600401610ed492919061284c565b602060405180830381600087803b158015610eee57600080fd5b505af1158015610f02573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610f2691906126fb565b610f725760405162461bcd60e51b815260206004820152601760248201527f766572696679207369676e6174757265206661696c656400000000000000000060448201526064016102c2565b600082604051602401610f8791815260200190565b60408051601f198184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167ff523f40d00000000000000000000000000000000000000000000000000000000179052905061100373deaddeaddeaddeaddeaddeaddeaddeaddead2222621e848083611c21565b60405183907f8ef5d07412def056f6bfc680f359c8a0370cfacb2becaf67d01e2e372e08964a90600090a2505050565b6110716040518060400160405280601781526020017f50726f78795f5f5453535f47726f75704d616e61676572000000000000000000815250610835565b73ffffffffffffffffffffffffffffffffffffffff16633231a7f0848460405160200161109f929190612865565b60405160208183030381529060405280519060200120836040518363ffffffff1660e01b81526004016110d392919061284c565b602060405180830381600087803b1580156110ed57600080fd5b505af1158015611101573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061112591906126fb565b6104245760405162461bcd60e51b815260206004820152601760248201527f766572696679207369676e6174757265206661696c656400000000000000000060448201526064016102c2565b60006111b16040518060400160405280600c81526020017f42564d5f50726f706f7365720000000000000000000000000000000000000000815250610835565b90506000806111be61190f565b90925090503373ffffffffffffffffffffffffffffffffffffffff841614156111e8575042611297565b426003548264ffffffffff166111fe9190612765565b106112975760405162461bcd60e51b815260206004820152604360248201527f43616e6e6f74207075626c69736820737461746520726f6f747320776974686960448201527f6e207468652073657175656e636572207075626c69636174696f6e2077696e6460648201527f6f772e0000000000000000000000000000000000000000000000000000000000608482015260a4016102c2565b60006040518060c001604052806112ac610dad565b81526020016112ba89611cb2565b8152602001885181526020018464ffffffffff16815260200187815260200186815250905080600001517f9cf3ad24eae3fd6d461e2f566b35b95b6d671871d9fcb45f8ac8030e4a8d21b382602001518360400151846060015185608001518660a0015160405161132f9594939291906128ad565b60405180910390a261133f610d85565b73ffffffffffffffffffffffffffffffffffffffff16632015276c61136383612196565b6113888460400151856060015161137a9190612765565b602887811b91909117901b90565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e085901b16815260048101929092527fffffffffffffffffffffffffffffffffffffffffffffffffffffff0000000000166024820152604401600060405180830381600087803b15801561140057600080fd5b505af1158015611414573d6000803e3d6000fd5b5050505050505050505050565b60006114616040518060400160405280601781526020017f50726f78795f5f5453535f47726f75704d616e61676572000000000000000000815250610835565b73ffffffffffffffffffffffffffffffffffffffff16632cd00d536040518163ffffffff1660e01b8152600401600060405180830381600087803b1580156114a857600080fd5b505af11580156114bc573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526114e491908101906128f0565b905060008151116115375760405162461bcd60e51b815260206004820152601860248201527f67657420747373206d656d6265727320696e206572726f72000000000000000060448201526064016102c2565b6000630fae75d960e01b8385428560405160240161155894939291906129db565b60408051601f198184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffffffff000000000000000000000000000000000000000000000000000000009093169290921790915290506115db734200000000000000000000000000000000000020621e848083611c21565b42837ff533ef50019763ee9d95ad46e28350b533c11edd472ae7be93e8fae83c1b6d99868560405161160e929190612a0a565b60405180910390a350505050565b6000611626610d85565b82516040517f9507d39a00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff9290921691639507d39a9161167e9160040190815260200190565b60206040518083038186803b15801561169657600080fd5b505afa1580156116aa573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906116ce919061271d565b6116d783612196565b1492915050565b6116e6610d85565b73ffffffffffffffffffffffffffffffffffffffff16631f7b6d326040518163ffffffff1660e01b815260040160206040518083038186803b15801561172b57600080fd5b505afa15801561173f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611763919061271d565b8151106117b25760405162461bcd60e51b815260206004820152601460248201527f496e76616c696420626174636820696e6465782e00000000000000000000000060448201526064016102c2565b6117bb8161161c565b6118075760405162461bcd60e51b815260206004820152601560248201527f496e76616c6964206261746368206865616465722e000000000000000000000060448201526064016102c2565b61180f610d85565b8151606083015173ffffffffffffffffffffffffffffffffffffffff929092169163167fd681919060281b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e085901b16815260048101929092527fffffffffffffffffffffffffffffffffffffffffffffffffffffff0000000000166024820152604401600060405180830381600087803b1580156118b257600080fd5b505af11580156118c6573d6000803e3d6000fd5b5050505080600001517f8747b69ce8fdb31c3b9b0a67bd8049ad8c1a69ea417b69b12174068abd9cbd64826020015160405161190491815260200190565b60405180910390a250565b600080600061191c610d85565b73ffffffffffffffffffffffffffffffffffffffff1663ccf8f9696040518163ffffffff1660e01b815260040160206040518083038186803b15801561196157600080fd5b505afa158015611975573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906119999190612a23565b64ffffffffff602882901c169460509190911c9350915050565b6000808211611a2a5760405162461bcd60e51b815260206004820152603760248201527f4c69625f4d65726b6c65547265653a20546f74616c206c6561766573206d757360448201527f742062652067726561746572207468616e207a65726f2e00000000000000000060648201526084016102c2565b818410611a9e5760405162461bcd60e51b8152602060048201526024808201527f4c69625f4d65726b6c65547265653a20496e646578206f7574206f6620626f7560448201527f6e64732e0000000000000000000000000000000000000000000000000000000060648201526084016102c2565b611aa7826121df565b835114611b425760405162461bcd60e51b815260206004820152604d60248201527f4c69625f4d65726b6c65547265653a20546f74616c207369626c696e6773206460448201527f6f6573206e6f7420636f72726563746c7920636f72726573706f6e6420746f2060648201527f746f74616c206c65617665732e00000000000000000000000000000000000000608482015260a4016102c2565b8460005b8451811015611c14578560011660011415611bad57848181518110611b6d57611b6d612a65565b602002602001015182604051602001611b90929190918252602082015260400190565b604051602081830303815290604052805190602001209150611bfb565b81858281518110611bc057611bc0612a65565b6020026020010151604051602001611be2929190918252602082015260400190565b6040516020818303038152906040528051906020012091505b60019590951c9480611c0c81612a94565b915050611b46565b5090951495945050505050565b6001546040517f3dbb202b00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff90911690633dbb202b90611c7b90869085908790600401612acd565b600060405180830381600087803b158015611c9557600080fd5b505af1158015611ca9573d6000803e3d6000fd5b50505050505050565b600080825111611d2a5760405162461bcd60e51b815260206004820152603460248201527f4c69625f4d65726b6c65547265653a204d7573742070726f766964652061742060448201527f6c65617374206f6e65206c65616620686173682e00000000000000000000000060648201526084016102c2565b815160011415611d565781600081518110611d4757611d47612a65565b60200260200101519050919050565b60408051610200810182527f290decd9548b62a8d60345a988386fc84ba6bc95484008f6362f93160ef3e56381527f633dc4d7da7256660a892f8f1604a44b5432649cc8ec5cb3ced4c4e6ac94dd1d60208201527f890740a8eb06ce9be422cb8da5cdafc2b58c0a5e24036c578de2a433c828ff7d818301527f3b8ec09e026fdc305365dfc94e189a81b38c7597b3d941c279f042e8206e0bd86060808301919091527fecd50eee38e386bd62be9bedb990706951b65fe053bd9d8a521af753d139e2da60808301527fdefff6d330bb5403f63b14f33b578274160de3a50df4efecf0e0db73bcdd3da560a08301527f617bdd11f7c0a11f49db22f629387a12da7596f9d1704d7465177c63d88ec7d760c08301527f292c23a9aa1d8bea7e2435e555a4a60e379a5a35f3f452bae60121073fb6eead60e08301527fe1cea92ed99acdcb045a6726b2f87107e8a61620a232cf4d7d5b5766b3952e106101008301527f7ad66c0a68c72cb89e4fb4303841966e4062a76ab97451e3b9fb526a5ceb7f826101208301527fe026cc5a4aed3c22a58cbd3d2ac754c9352c5436f638042dca99034e836365166101408301527f3d04cffd8b46a874edf5cfae63077de85f849a660426697b06a829c70dd1409c6101608301527fad676aa337a485e4728a0b240d92b3ef7b3c372d06d189322bfd5f61f1e7203e6101808301527fa2fca4a49658f9fab7aa63289c91b7c7b6c832a6d0e69334ff5b0a3483d09dab6101a08301527f4ebfd9cd7bca2505f7bef59cc1c12ecc708fff26ae4af19abe852afe9e20c8626101c08301527f2def10d13dd169f550f578bda343d9717a138562e0093b380a1120789d53cf106101e083015282518381529081018352909160009190602082018180368337505085519192506000918291508180805b600184111561216c57612007600285612b41565b9150612014600285612b55565b600114905060005b828110156120c0578a612030826002612b69565b8151811061204057612040612a65565b602002602001015196508a8160026120589190612b69565b612063906001612765565b8151811061207357612073612a65565b6020026020010151955086602089015285604089015287805190602001208b82815181106120a3576120a3612a65565b6020908102919091010152806120b881612a94565b91505061201c565b50801561213c57896120d3600186612ba6565b815181106120e3576120e3612a65565b602002602001015195508783601081106120ff576120ff612a65565b602002015160001b945085602088015284604088015286805190602001208a838151811061212f5761212f612a65565b6020026020010181815250505b8061214857600061214b565b60015b6121589060ff1683612765565b93508261216481612a94565b935050611ff3565b8960008151811061217f5761217f612a65565b602002602001015198505050505050505050919050565b6020808201516040808401516060850151608086015160a087015193516000966121c2969591016128ad565b604051602081830303815290604052805190602001209050919050565b60008082116122565760405162461bcd60e51b815260206004820152603060248201527f4c69625f4d65726b6c65547265653a2043616e6e6f7420636f6d70757465206360448201527f65696c286c6f675f3229206f6620302e0000000000000000000000000000000060648201526084016102c2565b816001141561226757506000919050565b81600060805b600181106122a55780612283600180831b612ba6565b901b83161561229d576122968183612765565b92811c9291505b60011c61226d565b506001811b84146122be576122bb600182612765565b90505b9392505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b60405160c0810167ffffffffffffffff81118282101715612317576123176122c5565b60405290565b604051601f8201601f1916810167ffffffffffffffff81118282101715612346576123466122c5565b604052919050565b600067ffffffffffffffff831115612368576123686122c5565b61237b6020601f19601f8601160161231d565b905082815283838301111561238f57600080fd5b828260208301376000602084830101529392505050565b600082601f8301126123b757600080fd5b6122be8383356020850161234e565b6000806000606084860312156123db57600080fd5b8335925060208401359150604084013567ffffffffffffffff81111561240057600080fd5b61240c868287016123a6565b9150509250925092565b600067ffffffffffffffff821115612430576124306122c5565b5060051b60200190565b600082601f83011261244b57600080fd5b8135602061246061245b83612416565b61231d565b82815260059290921b8401810191818101908684111561247f57600080fd5b8286015b8481101561249a5780358352918301918301612483565b509695505050505050565b6000806000606084860312156124ba57600080fd5b833567ffffffffffffffff808211156124d257600080fd5b6124de8783880161243a565b94506020860135935060408601359150808211156124fb57600080fd5b5061240c868287016123a6565b60006020828403121561251a57600080fd5b813567ffffffffffffffff81111561253157600080fd5b8201601f8101841361254257600080fd5b6125518482356020840161234e565b949350505050565b600060c0828403121561256b57600080fd5b6125736122f4565b905081358152602082013560208201526040820135604082015260608201356060820152608082013567ffffffffffffffff808211156125b257600080fd5b6125be858386016123a6565b608084015260a08401359150808211156125d757600080fd5b506125e4848285016123a6565b60a08301525092915050565b60006020828403121561260257600080fd5b813567ffffffffffffffff81111561261957600080fd5b61255184828501612559565b60006020828403121561263757600080fd5b5035919050565b60008060006060848603121561265357600080fd5b83359250602084013567ffffffffffffffff8082111561267257600080fd5b61267e87838801612559565b9350604086013591508082111561269457600080fd5b90850190604082880312156126a857600080fd5b6040516040810181811083821117156126c3576126c36122c5565b604052823581526020830135828111156126dc57600080fd5b6126e88982860161243a565b6020830152508093505050509250925092565b60006020828403121561270d57600080fd5b815180151581146122be57600080fd5b60006020828403121561272f57600080fd5b5051919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000821982111561277857612778612736565b500190565b6000815180845260005b818110156127a357602081850181015186830182015201612787565b818111156127b5576000602083870101525b50601f01601f19169290920160200192915050565b6020815260006122be602083018461277d565b73ffffffffffffffffffffffffffffffffffffffff81168114610a9b57600080fd5b60006020828403121561281157600080fd5b81516122be816127dd565b6000806040838503121561282f57600080fd5b825191506020830151612841816127dd565b809150509250929050565b828152604060208201526000612551604083018461277d565b604080825283519082018190526000906020906060840190828701845b8281101561289e57815184529284019290840190600101612882565b50505092019290925292915050565b85815284602082015283604082015260a0606082015260006128d260a083018561277d565b82810360808401526128e4818561277d565b98975050505050505050565b6000602080838503121561290357600080fd5b825167ffffffffffffffff81111561291a57600080fd5b8301601f8101851361292b57600080fd5b805161293961245b82612416565b81815260059190911b8201830190838101908783111561295857600080fd5b928401925b8284101561297f578351612970816127dd565b8252928401929084019061295d565b979650505050505050565b600081518084526020808501945080840160005b838110156129d057815173ffffffffffffffffffffffffffffffffffffffff168752958201959082019060010161299e565b509495945050505050565b848152836020820152826040820152608060608201526000612a00608083018461298a565b9695505050505050565b828152604060208201526000612551604083018461298a565b600060208284031215612a3557600080fd5b81517fffffffffffffffffffffffffffffffffffffffffffffffffffffff0000000000811681146122be57600080fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff821415612ac657612ac6612736565b5060010190565b73ffffffffffffffffffffffffffffffffffffffff84168152606060208201526000612afc606083018561277d565b905063ffffffff83166040830152949350505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b600082612b5057612b50612b12565b500490565b600082612b6457612b64612b12565b500690565b6000817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0483118215151615612ba157612ba1612736565b500290565b600082821015612bb857612bb8612736565b50039056fe436861696e53746f72616765436f6e7461696e65722d5343432d62617463686573a2646970667358221220ea8bea1aac6718ca96f6d87e0952ecf4ceb6166964b898ee6e32bf3acac0916c64736f6c63430008090033", "deployedBytecode": "0x608060405234801561001057600080fd5b50600436106101005760003560e01c80637ad168a011610097578063b768bb1711610066578063b768bb171461021e578063c17b291b14610231578063cfdf677e1461023a578063e561dddc1461024257600080fd5b80637ad168a0146101d757806381eb62ef146101df57806389a1d980146101e8578063ab59f7b81461020b57600080fd5b8063461a4478116100d3578063461a44781461019757806355a17f8a146101aa5780635b4d90e2146101bc5780637aa63a86146101cf57600080fd5b80630bf3b5f2146101055780632169f79f1461011a578063299ca4781461012d5780633cb747bf14610177575b600080fd5b6101186101133660046123c6565b61024a565b005b6101186101283660046124a5565b610429565b60005461014d9073ffffffffffffffffffffffffffffffffffffffff1681565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020015b60405180910390f35b60015461014d9073ffffffffffffffffffffffffffffffffffffffff1681565b61014d6101a5366004612508565b610835565b6002545b60405190815260200161016e565b6101186101ca3660046125f0565b6108e2565b6101ae610a9e565b6101ae610ab7565b6101ae60035481565b6101fb6101f63660046125f0565b610ad0565b604051901515815260200161016e565b610118610219366004612625565b610b78565b6101fb61022c36600461263e565b610cbb565b6101ae60025481565b61014d610d85565b6101ae610dad565b610252610a9e565b82146102cb5760405162461bcd60e51b815260206004820152603d60248201527f41637475616c20626174636820737461727420696e64657820646f6573206e6f60448201527f74206d6174636820657870656374656420737461727420696e6465782e00000060648201526084015b60405180910390fd5b6103096040518060400160405280600b81526020017f426f6e644d616e61676572000000000000000000000000000000000000000000815250610835565b6040517f02ad4d2a00000000000000000000000000000000000000000000000000000000815233600482015273ffffffffffffffffffffffffffffffffffffffff91909116906302ad4d2a9060240160206040518083038186803b15801561037057600080fd5b505afa158015610384573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906103a891906126fb565b61041a5760405162461bcd60e51b815260206004820152602f60248201527f50726f706f73657220646f6573206e6f74206861766520656e6f75676820636f60448201527f6c6c61746572616c20706f73746564000000000000000000000000000000000060648201526084016102c2565b6104248382610e34565b505050565b610431610a9e565b82146104a55760405162461bcd60e51b815260206004820152603d60248201527f41637475616c20626174636820737461727420696e64657820646f6573206e6f60448201527f74206d6174636820657870656374656420737461727420696e6465782e00000060648201526084016102c2565b6104e36040518060400160405280600b81526020017f426f6e644d616e61676572000000000000000000000000000000000000000000815250610835565b6040517f02ad4d2a00000000000000000000000000000000000000000000000000000000815233600482015273ffffffffffffffffffffffffffffffffffffffff91909116906302ad4d2a9060240160206040518083038186803b15801561054a57600080fd5b505afa15801561055e573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061058291906126fb565b6105f45760405162461bcd60e51b815260206004820152602f60248201527f50726f706f73657220646f6573206e6f74206861766520656e6f75676820636f60448201527f6c6c61746572616c20706f73746564000000000000000000000000000000000060648201526084016102c2565b600083511161066b5760405162461bcd60e51b815260206004820152602360248201527f43616e6e6f74207375626d697420616e20656d7074792073746174652062617460448201527f63682e000000000000000000000000000000000000000000000000000000000060648201526084016102c2565b6106a96040518060400160405280601981526020017f43616e6f6e6963616c5472616e73616374696f6e436861696e00000000000000815250610835565b73ffffffffffffffffffffffffffffffffffffffff16637aa63a866040518163ffffffff1660e01b815260040160206040518083038186803b1580156106ee57600080fd5b505afa158015610702573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610726919061271d565b8351610730610a9e565b61073a9190612765565b11156107d45760405162461bcd60e51b815260206004820152604960248201527f4e756d626572206f6620737461746520726f6f74732063616e6e6f742065786360448201527f65656420746865206e756d626572206f662063616e6f6e6963616c207472616e60648201527f73616374696f6e732e0000000000000000000000000000000000000000000000608482015260a4016102c2565b6107df838383611033565b61082a8382423360405160200161081692919091825273ffffffffffffffffffffffffffffffffffffffff16602082015260400190565b604051602081830303815290604052611171565b610424835183611421565b600080546040517fbf40fac100000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff9091169063bf40fac19061088c9085906004016127ca565b60206040518083038186803b1580156108a457600080fd5b505afa1580156108b8573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906108dc91906127ff565b92915050565b6109206040518060400160405280601181526020017f42564d5f46726175645665726966696572000000000000000000000000000000815250610835565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16146109c05760405162461bcd60e51b815260206004820152603b60248201527f537461746520626174636865732063616e206f6e6c792062652064656c65746560448201527f64206279207468652042564d5f467261756456657269666965722e000000000060648201526084016102c2565b6109c98161161c565b610a155760405162461bcd60e51b815260206004820152601560248201527f496e76616c6964206261746368206865616465722e000000000000000000000060448201526064016102c2565b610a1e81610ad0565b610a92576040805162461bcd60e51b81526020600482015260248101919091527f537461746520626174636865732063616e206f6e6c792062652064656c65746560448201527f642077697468696e207468652066726175642070726f6f662077696e646f772e60648201526084016102c2565b610a9b816116de565b50565b600080610aa961190f565b5064ffffffffff1692915050565b600080610ac261190f565b64ffffffffff169392505050565b6000808260a00151806020019051810190610aeb919061281c565b50905080610b615760405162461bcd60e51b815260206004820152602560248201527f4261746368206865616465722074696d657374616d702063616e6e6f7420626560448201527f207a65726f00000000000000000000000000000000000000000000000000000060648201526084016102c2565b4260025482610b709190612765565b119392505050565b60008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16638da5cb5b6040518163ffffffff1660e01b815260040160206040518083038186803b158015610bde57600080fd5b505afa158015610bf2573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610c1691906127ff565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614610cb65760405162461bcd60e51b815260206004820152602d60248201527f4f6e6c792063616c6c61626c6520627920746865206c6962416464726573734d60448201527f616e61676572206f776e65722e0000000000000000000000000000000000000060648201526084016102c2565b600255565b6000610cc68361161c565b610d125760405162461bcd60e51b815260206004820152601560248201527f496e76616c6964206261746368206865616465722e000000000000000000000060448201526064016102c2565b610d2f8360200151858460000151856020015187604001516119b3565b610d7b5760405162461bcd60e51b815260206004820152601860248201527f496e76616c696420696e636c7573696f6e2070726f6f662e000000000000000060448201526064016102c2565b5060019392505050565b6000610da8604051806060016040528060218152602001612bbe60219139610835565b905090565b6000610db7610d85565b73ffffffffffffffffffffffffffffffffffffffff16631f7b6d326040518163ffffffff1660e01b815260040160206040518083038186803b158015610dfc57600080fd5b505afa158015610e10573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610da8919061271d565b610e726040518060400160405280601781526020017f50726f78795f5f5453535f47726f75704d616e61676572000000000000000000815250610835565b73ffffffffffffffffffffffffffffffffffffffff16633231a7f083604051602001610ea091815260200190565b60405160208183030381529060405280519060200120836040518363ffffffff1660e01b8152600401610ed492919061284c565b602060405180830381600087803b158015610eee57600080fd5b505af1158015610f02573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610f2691906126fb565b610f725760405162461bcd60e51b815260206004820152601760248201527f766572696679207369676e6174757265206661696c656400000000000000000060448201526064016102c2565b600082604051602401610f8791815260200190565b60408051601f198184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167ff523f40d00000000000000000000000000000000000000000000000000000000179052905061100373deaddeaddeaddeaddeaddeaddeaddeaddead2222621e848083611c21565b60405183907f8ef5d07412def056f6bfc680f359c8a0370cfacb2becaf67d01e2e372e08964a90600090a2505050565b6110716040518060400160405280601781526020017f50726f78795f5f5453535f47726f75704d616e61676572000000000000000000815250610835565b73ffffffffffffffffffffffffffffffffffffffff16633231a7f0848460405160200161109f929190612865565b60405160208183030381529060405280519060200120836040518363ffffffff1660e01b81526004016110d392919061284c565b602060405180830381600087803b1580156110ed57600080fd5b505af1158015611101573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061112591906126fb565b6104245760405162461bcd60e51b815260206004820152601760248201527f766572696679207369676e6174757265206661696c656400000000000000000060448201526064016102c2565b60006111b16040518060400160405280600c81526020017f42564d5f50726f706f7365720000000000000000000000000000000000000000815250610835565b90506000806111be61190f565b90925090503373ffffffffffffffffffffffffffffffffffffffff841614156111e8575042611297565b426003548264ffffffffff166111fe9190612765565b106112975760405162461bcd60e51b815260206004820152604360248201527f43616e6e6f74207075626c69736820737461746520726f6f747320776974686960448201527f6e207468652073657175656e636572207075626c69636174696f6e2077696e6460648201527f6f772e0000000000000000000000000000000000000000000000000000000000608482015260a4016102c2565b60006040518060c001604052806112ac610dad565b81526020016112ba89611cb2565b8152602001885181526020018464ffffffffff16815260200187815260200186815250905080600001517f9cf3ad24eae3fd6d461e2f566b35b95b6d671871d9fcb45f8ac8030e4a8d21b382602001518360400151846060015185608001518660a0015160405161132f9594939291906128ad565b60405180910390a261133f610d85565b73ffffffffffffffffffffffffffffffffffffffff16632015276c61136383612196565b6113888460400151856060015161137a9190612765565b602887811b91909117901b90565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e085901b16815260048101929092527fffffffffffffffffffffffffffffffffffffffffffffffffffffff0000000000166024820152604401600060405180830381600087803b15801561140057600080fd5b505af1158015611414573d6000803e3d6000fd5b5050505050505050505050565b60006114616040518060400160405280601781526020017f50726f78795f5f5453535f47726f75704d616e61676572000000000000000000815250610835565b73ffffffffffffffffffffffffffffffffffffffff16632cd00d536040518163ffffffff1660e01b8152600401600060405180830381600087803b1580156114a857600080fd5b505af11580156114bc573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526114e491908101906128f0565b905060008151116115375760405162461bcd60e51b815260206004820152601860248201527f67657420747373206d656d6265727320696e206572726f72000000000000000060448201526064016102c2565b6000630fae75d960e01b8385428560405160240161155894939291906129db565b60408051601f198184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffffffff000000000000000000000000000000000000000000000000000000009093169290921790915290506115db734200000000000000000000000000000000000020621e848083611c21565b42837ff533ef50019763ee9d95ad46e28350b533c11edd472ae7be93e8fae83c1b6d99868560405161160e929190612a0a565b60405180910390a350505050565b6000611626610d85565b82516040517f9507d39a00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff9290921691639507d39a9161167e9160040190815260200190565b60206040518083038186803b15801561169657600080fd5b505afa1580156116aa573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906116ce919061271d565b6116d783612196565b1492915050565b6116e6610d85565b73ffffffffffffffffffffffffffffffffffffffff16631f7b6d326040518163ffffffff1660e01b815260040160206040518083038186803b15801561172b57600080fd5b505afa15801561173f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611763919061271d565b8151106117b25760405162461bcd60e51b815260206004820152601460248201527f496e76616c696420626174636820696e6465782e00000000000000000000000060448201526064016102c2565b6117bb8161161c565b6118075760405162461bcd60e51b815260206004820152601560248201527f496e76616c6964206261746368206865616465722e000000000000000000000060448201526064016102c2565b61180f610d85565b8151606083015173ffffffffffffffffffffffffffffffffffffffff929092169163167fd681919060281b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e085901b16815260048101929092527fffffffffffffffffffffffffffffffffffffffffffffffffffffff0000000000166024820152604401600060405180830381600087803b1580156118b257600080fd5b505af11580156118c6573d6000803e3d6000fd5b5050505080600001517f8747b69ce8fdb31c3b9b0a67bd8049ad8c1a69ea417b69b12174068abd9cbd64826020015160405161190491815260200190565b60405180910390a250565b600080600061191c610d85565b73ffffffffffffffffffffffffffffffffffffffff1663ccf8f9696040518163ffffffff1660e01b815260040160206040518083038186803b15801561196157600080fd5b505afa158015611975573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906119999190612a23565b64ffffffffff602882901c169460509190911c9350915050565b6000808211611a2a5760405162461bcd60e51b815260206004820152603760248201527f4c69625f4d65726b6c65547265653a20546f74616c206c6561766573206d757360448201527f742062652067726561746572207468616e207a65726f2e00000000000000000060648201526084016102c2565b818410611a9e5760405162461bcd60e51b8152602060048201526024808201527f4c69625f4d65726b6c65547265653a20496e646578206f7574206f6620626f7560448201527f6e64732e0000000000000000000000000000000000000000000000000000000060648201526084016102c2565b611aa7826121df565b835114611b425760405162461bcd60e51b815260206004820152604d60248201527f4c69625f4d65726b6c65547265653a20546f74616c207369626c696e6773206460448201527f6f6573206e6f7420636f72726563746c7920636f72726573706f6e6420746f2060648201527f746f74616c206c65617665732e00000000000000000000000000000000000000608482015260a4016102c2565b8460005b8451811015611c14578560011660011415611bad57848181518110611b6d57611b6d612a65565b602002602001015182604051602001611b90929190918252602082015260400190565b604051602081830303815290604052805190602001209150611bfb565b81858281518110611bc057611bc0612a65565b6020026020010151604051602001611be2929190918252602082015260400190565b6040516020818303038152906040528051906020012091505b60019590951c9480611c0c81612a94565b915050611b46565b5090951495945050505050565b6001546040517f3dbb202b00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff90911690633dbb202b90611c7b90869085908790600401612acd565b600060405180830381600087803b158015611c9557600080fd5b505af1158015611ca9573d6000803e3d6000fd5b50505050505050565b600080825111611d2a5760405162461bcd60e51b815260206004820152603460248201527f4c69625f4d65726b6c65547265653a204d7573742070726f766964652061742060448201527f6c65617374206f6e65206c65616620686173682e00000000000000000000000060648201526084016102c2565b815160011415611d565781600081518110611d4757611d47612a65565b60200260200101519050919050565b60408051610200810182527f290decd9548b62a8d60345a988386fc84ba6bc95484008f6362f93160ef3e56381527f633dc4d7da7256660a892f8f1604a44b5432649cc8ec5cb3ced4c4e6ac94dd1d60208201527f890740a8eb06ce9be422cb8da5cdafc2b58c0a5e24036c578de2a433c828ff7d818301527f3b8ec09e026fdc305365dfc94e189a81b38c7597b3d941c2