UNPKG

@tokamak-network/titan-contracts

Version:
708 lines 73.4 kB
{ "_format": "hh-sol-artifact-1", "contractName": "L1CrossDomainMessengerFast", "sourceName": "contracts/L1/messaging/L1CrossDomainMessengerFast.sol", "abi": [ { "inputs": [], "stateMutability": "nonpayable", "type": "constructor" }, { "anonymous": false, "inputs": [ { "indexed": true, "internalType": "address", "name": "target", "type": "address" }, { "indexed": false, "internalType": "address", "name": "sender", "type": "address" }, { "indexed": false, "internalType": "bytes", "name": "message", "type": "bytes" }, { "indexed": false, "internalType": "uint256", "name": "messageNonce", "type": "uint256" } ], "name": "FailedRelayedFastMessage", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": true, "internalType": "bytes32", "name": "msgHash", "type": "bytes32" } ], "name": "FailedRelayedMessage", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": false, "internalType": "uint8", "name": "version", "type": "uint8" } ], "name": "Initialized", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": true, "internalType": "bytes32", "name": "_xDomainCalldataHash", "type": "bytes32" } ], "name": "MessageAllowed", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": true, "internalType": "bytes32", "name": "_xDomainCalldataHash", "type": "bytes32" } ], "name": "MessageBlocked", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": true, "internalType": "address", "name": "previousOwner", "type": "address" }, { "indexed": true, "internalType": "address", "name": "newOwner", "type": "address" } ], "name": "OwnershipTransferred", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": false, "internalType": "address", "name": "account", "type": "address" } ], "name": "Paused", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": true, "internalType": "address", "name": "target", "type": "address" }, { "indexed": false, "internalType": "address", "name": "sender", "type": "address" }, { "indexed": false, "internalType": "bytes", "name": "message", "type": "bytes" }, { "indexed": false, "internalType": "uint256", "name": "messageNonce", "type": "uint256" } ], "name": "RelayedFastMessage", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": true, "internalType": "bytes32", "name": "msgHash", "type": "bytes32" } ], "name": "RelayedMessage", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": true, "internalType": "address", "name": "target", "type": "address" }, { "indexed": false, "internalType": "address", "name": "sender", "type": "address" }, { "indexed": false, "internalType": "bytes", "name": "message", "type": "bytes" }, { "indexed": false, "internalType": "uint256", "name": "messageNonce", "type": "uint256" }, { "indexed": false, "internalType": "uint256", "name": "gasLimit", "type": "uint256" } ], "name": "SentMessage", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": false, "internalType": "address", "name": "account", "type": "address" } ], "name": "Unpaused", "type": "event" }, { "inputs": [ { "internalType": "bytes32", "name": "_xDomainCalldataHash", "type": "bytes32" } ], "name": "allowMessage", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "components": [ { "internalType": "address", "name": "target", "type": "address" }, { "internalType": "address", "name": "sender", "type": "address" }, { "internalType": "bytes", "name": "message", "type": "bytes" }, { "internalType": "uint256", "name": "messageNonce", "type": "uint256" }, { "components": [ { "internalType": "bytes32", "name": "stateRoot", "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": "extraData", "type": "bytes" } ], "internalType": "struct Lib_OVMCodec.ChainBatchHeader", "name": "stateRootBatchHeader", "type": "tuple" }, { "components": [ { "internalType": "uint256", "name": "index", "type": "uint256" }, { "internalType": "bytes32[]", "name": "siblings", "type": "bytes32[]" } ], "internalType": "struct Lib_OVMCodec.ChainInclusionProof", "name": "stateRootProof", "type": "tuple" }, { "internalType": "bytes", "name": "stateTrieWitness", "type": "bytes" }, { "internalType": "bytes", "name": "storageTrieWitness", "type": "bytes" } ], "internalType": "struct IL1CrossDomainMessenger.L2MessageInclusionProof", "name": "proof", "type": "tuple" } ], "internalType": "struct IL1CrossDomainMessenger.L2ToL1Message[]", "name": "_messages", "type": "tuple[]" } ], "name": "batchRelayMessages", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "bytes32", "name": "_xDomainCalldataHash", "type": "bytes32" } ], "name": "blockMessage", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "bytes32", "name": "", "type": "bytes32" } ], "name": "blockedMessages", "outputs": [ { "internalType": "bool", "name": "", "type": "bool" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "bytes32", "name": "", "type": "bytes32" } ], "name": "failedMessages", "outputs": [ { "internalType": "bool", "name": "", "type": "bool" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "_libAddressManager", "type": "address" } ], "name": "initialize", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [], "name": "libAddressManager", "outputs": [ { "internalType": "contract Lib_AddressManager", "name": "", "type": "address" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "owner", "outputs": [ { "internalType": "address", "name": "", "type": "address" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "pause", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [], "name": "paused", "outputs": [ { "internalType": "bool", "name": "", "type": "bool" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "_target", "type": "address" }, { "internalType": "address", "name": "_sender", "type": "address" }, { "internalType": "bytes", "name": "_message", "type": "bytes" }, { "internalType": "uint256", "name": "_messageNonce", "type": "uint256" }, { "components": [ { "internalType": "bytes32", "name": "stateRoot", "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": "extraData", "type": "bytes" } ], "internalType": "struct Lib_OVMCodec.ChainBatchHeader", "name": "stateRootBatchHeader", "type": "tuple" }, { "components": [ { "internalType": "uint256", "name": "index", "type": "uint256" }, { "internalType": "bytes32[]", "name": "siblings", "type": "bytes32[]" } ], "internalType": "struct Lib_OVMCodec.ChainInclusionProof", "name": "stateRootProof", "type": "tuple" }, { "internalType": "bytes", "name": "stateTrieWitness", "type": "bytes" }, { "internalType": "bytes", "name": "storageTrieWitness", "type": "bytes" } ], "internalType": "struct IL1CrossDomainMessenger.L2MessageInclusionProof", "name": "_proof", "type": "tuple" } ], "name": "relayMessage", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "bytes32", "name": "", "type": "bytes32" } ], "name": "relayedMessages", "outputs": [ { "internalType": "bool", "name": "", "type": "bool" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "renounceOwnership", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "_target", "type": "address" }, { "internalType": "address", "name": "_sender", "type": "address" }, { "internalType": "bytes", "name": "_message", "type": "bytes" }, { "internalType": "uint256", "name": "_queueIndex", "type": "uint256" }, { "internalType": "uint32", "name": "_oldGasLimit", "type": "uint32" }, { "internalType": "uint32", "name": "_newGasLimit", "type": "uint32" } ], "name": "replayMessage", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "string", "name": "_name", "type": "string" } ], "name": "resolve", "outputs": [ { "internalType": "address", "name": "", "type": "address" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "_target", "type": "address" }, { "internalType": "bytes", "name": "_message", "type": "bytes" }, { "internalType": "uint32", "name": "_gasLimit", "type": "uint32" } ], "name": "sendMessage", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "bytes32", "name": "", "type": "bytes32" } ], "name": "successfulMessages", "outputs": [ { "internalType": "bool", "name": "", "type": "bool" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "newOwner", "type": "address" } ], "name": "transferOwnership", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [], "name": "unpause", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [], "name": "xDomainMessageSender", "outputs": [ { "internalType": "address", "name": "", "type": "address" } ], "stateMutability": "view", "type": "function" } ], "bytecode": "0x608060405260cd80546001600160a01b03191661dead17905534801561002457600080fd5b50600080546001600160a01b031916905561373d806100446000396000f3fe608060405234801561001057600080fd5b506004361061016c5760003560e01c8063715018a6116100cd578063b1b1b20911610081578063c6b94ab011610066578063c6b94ab0146102ff578063d7fd19dd14610322578063f2fde38b1461033557600080fd5b8063b1b1b209146102c9578063c4d66de8146102ec57600080fd5b80638456cb59116100b25780638456cb59146102805780638da5cb5b14610288578063a4e7f8bd146102a657600080fd5b8063715018a61461026557806381ada46c1461026d57600080fd5b80633f4ba83a116101245780635c975abb116101095780635c975abb146102445780636e296e451461024f5780636f1c8d471461025757600080fd5b80633f4ba83a14610229578063461a44781461023157600080fd5b806321d800ec1161015557806321d800ec14610199578063299ca478146101d15780633dbb202b1461021657600080fd5b80630ecf2eea1461017157806316e9cd9b14610186575b600080fd5b61018461017f366004612c18565b610348565b005b610184610194366004612c31565b610393565b6101bc6101a7366004612c18565b60ca6020526000908152604090205460ff1681565b60405190151581526020015b60405180910390f35b6000546101f19073ffffffffffffffffffffffffffffffffffffffff1681565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020016101c8565b610184610224366004612e05565b610511565b61018461057f565b6101f161023f366004612e65565b610591565b60655460ff166101bc565b6101f161063e565b610184610224366004612eb6565b6101846106c8565b61018461027b366004612c18565b6106da565b610184610722565b60335473ffffffffffffffffffffffffffffffffffffffff166101f1565b6101bc6102b4366004612c18565b60cc6020526000908152604090205460ff1681565b6101bc6102d7366004612c18565b60cb6020526000908152604090205460ff1681565b6101846102fa366004612f42565b610732565b6101bc61030d366004612c18565b60c96020526000908152604090205460ff1681565b610184610330366004613142565b610a0a565b610184610343366004612f42565b610eee565b610350610f8b565b600081815260c96020526040808220805460ff191660011790555182917ff52508d5339edf0d7e5060a416df98db067af561bdc60872d29c0439eaa13a0291a250565b6103d16040518060400160405280600f81526020017f4f564d5f4661737452656c617965720000000000000000000000000000000000815250610591565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161461049c5760405162461bcd60e51b815260206004820152604a60248201527f4c3143726f7373446f6d61696e4d657373656e676572466173743a2046756e6360448201527f74696f6e2063616e206f6e6c792062652063616c6c656420627920746865204660648201527f61737452656c6179657200000000000000000000000000000000000000000000608482015260a4015b60405180910390fd5b60005b8181101561050c5760008383838181106104bb576104bb6131d5565b90506020028101906104cd9190613204565b6104d690613242565b90506104f981600001518260200151836040015184606001518560800151610a0a565b508061050481613302565b91505061049f565b505050565b60405162461bcd60e51b815260206004820152602660248201527f53656e64696e67207669612074686973206d657373656e67657220697320646960448201527f7361626c656400000000000000000000000000000000000000000000000000006064820152608401610493565b610587610f8b565b61058f610ff2565b565b600080546040517fbf40fac100000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff9091169063bf40fac1906105e8908590600401613397565b60206040518083038186803b15801561060057600080fd5b505afa158015610614573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061063891906133aa565b92915050565b60cd5460009073ffffffffffffffffffffffffffffffffffffffff1661dead14156106ab5760405162461bcd60e51b815260206004820152601f60248201527f78446f6d61696e4d65737361676553656e646572206973206e6f7420736574006044820152606401610493565b5060cd5473ffffffffffffffffffffffffffffffffffffffff1690565b6106d0610f8b565b61058f6000611051565b6106e2610f8b565b600081815260c96020526040808220805460ff191690555182917f52c8a2680a9f4cc0ad0bf88f32096eadbebf0646ea611d93a0ce6a29a024040591a250565b61072a610f8b565b61058f6110c8565b6000547501000000000000000000000000000000000000000000900460ff161580801561077d575060005460017401000000000000000000000000000000000000000090910460ff16105b806107af5750303b1580156107af575060005474010000000000000000000000000000000000000000900460ff166001145b6108215760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201527f647920696e697469616c697a65640000000000000000000000000000000000006064820152608401610493565b600080547fffffffffffffffffffffff00ffffffffffffffffffffffffffffffffffffffff167401000000000000000000000000000000000000000017905580156108a757600080547fffffffffffffffffffff00ffffffffffffffffffffffffffffffffffffffffff1675010000000000000000000000000000000000000000001790555b60005473ffffffffffffffffffffffffffffffffffffffff16156109335760405162461bcd60e51b815260206004820152602a60248201527f4c3143726f7373446f6d61696e4d657373656e67657220616c7265616479206960448201527f6e7469616c697a65642e000000000000000000000000000000000000000000006064820152608401610493565b6000805473ffffffffffffffffffffffffffffffffffffffff84167fffffffffffffffffffffffff00000000000000000000000000000000000000009182161790915560cd805490911661dead17905561098b611105565b610993611196565b61099b611230565b6109a36112cd565b8015610a0657600080547fffffffffffffffffffff00ffffffffffffffffffffffffffffffffffffffffff169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b5050565b60026097541415610a5d5760405162461bcd60e51b815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c006044820152606401610493565b6002609755610a6a611365565b6000610a78868686866113b8565b9050610a848183611433565b1515600114610afb5760405162461bcd60e51b815260206004820152602760248201527f50726f7669646564206d65737361676520636f756c64206e6f7420626520766560448201527f7269666965642e000000000000000000000000000000000000000000000000006064820152608401610493565b8051602080830191909120600081815260cb90925260409091205460ff1615610b8c5760405162461bcd60e51b815260206004820152602b60248201527f50726f7669646564206d6573736167652068617320616c72656164792062656560448201527f6e2072656365697665642e0000000000000000000000000000000000000000006064820152608401610493565b600081815260c9602052604090205460ff1615610c115760405162461bcd60e51b815260206004820152602260248201527f50726f7669646564206d65737361676520686173206265656e20626c6f636b6560448201527f642e0000000000000000000000000000000000000000000000000000000000006064820152608401610493565b610c4f6040518060400160405280601981526020017f43616e6f6e6963616c5472616e73616374696f6e436861696e00000000000000815250610591565b73ffffffffffffffffffffffffffffffffffffffff168773ffffffffffffffffffffffffffffffffffffffff161415610cf05760405162461bcd60e51b815260206004820152603360248201527f43616e6e6f742073656e64204c322d3e4c31206d6573736167657320746f204c60448201527f312073797374656d20636f6e7472616374732e000000000000000000000000006064820152608401610493565b60cd80547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff88811691909117909155604051600091891690610d499088906133c7565b6000604051808303816000865af19150503d8060008114610d86576040519150601f19603f3d011682016040523d82523d6000602084013e610d8b565b606091505b505060cd80547fffffffffffffffffffffffff00000000000000000000000000000000000000001661dead179055905080151560011415610e3857600082815260cb602052604090819020805460ff191660011790555173ffffffffffffffffffffffffffffffffffffffff8916907f6166323e9134edd95d3f747dcf3212a095e2916dcfa483d348bcc3716f7f2cfb90610e2b908a908a908a906133d9565b60405180910390a2610e97565b600082905260cc60205260405173ffffffffffffffffffffffffffffffffffffffff8916907fc6ac8f8e058accca572db6f130cf8f9186f28f95658153e1fd8135d094add97590610e8e908a908a908a906133d9565b60405180910390a25b6000833343604051602001610eae93929190613418565b60408051601f198184030181529181528151602092830120600090815260ca9092529020805460ff19166001908117909155609755505050505050505050565b610ef6610f8b565b73ffffffffffffffffffffffffffffffffffffffff8116610f7f5760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201527f64647265737300000000000000000000000000000000000000000000000000006064820152608401610493565b610f8881611051565b50565b60335473ffffffffffffffffffffffffffffffffffffffff16331461058f5760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610493565b610ffa611456565b6065805460ff191690557f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa335b60405173ffffffffffffffffffffffffffffffffffffffff909116815260200160405180910390a1565b6033805473ffffffffffffffffffffffffffffffffffffffff8381167fffffffffffffffffffffffff0000000000000000000000000000000000000000831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b6110d0611365565b6065805460ff191660011790557f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a2586110273390565b6000547501000000000000000000000000000000000000000000900460ff1661058f5760405162461bcd60e51b815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201527f6e697469616c697a696e670000000000000000000000000000000000000000006064820152608401610493565b6000547501000000000000000000000000000000000000000000900460ff166112275760405162461bcd60e51b815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201527f6e697469616c697a696e670000000000000000000000000000000000000000006064820152608401610493565b61058f33611051565b6000547501000000000000000000000000000000000000000000900460ff166112c15760405162461bcd60e51b815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201527f6e697469616c697a696e670000000000000000000000000000000000000000006064820152608401610493565b6065805460ff19169055565b6000547501000000000000000000000000000000000000000000900460ff1661135e5760405162461bcd60e51b815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201527f6e697469616c697a696e670000000000000000000000000000000000000000006064820152608401610493565b6001609755565b60655460ff161561058f5760405162461bcd60e51b815260206004820152601060248201527f5061757361626c653a20706175736564000000000000000000000000000000006044820152606401610493565b6060848484846040516024016113d1949392919061346a565b60408051601f198184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fcbd4ece9000000000000000000000000000000000000000000000000000000001790529050949350505050565b600061143e826114a8565b801561144f575061144f838361159c565b9392505050565b60655460ff1661058f5760405162461bcd60e51b815260206004820152601460248201527f5061757361626c653a206e6f74207061757365640000000000000000000000006044820152606401610493565b6000806114e96040518060400160405280601481526020017f5374617465436f6d6d69746d656e74436861696e000000000000000000000000815250610591565b8351602085015160408087015190517f4d69ee5700000000000000000000000000000000000000000000000000000000815293945073ffffffffffffffffffffffffffffffffffffffff851693634d69ee579361154c93909290916004016134b4565b60206040518083038186803b15801561156457600080fd5b505afa158015611578573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061144f919061355f565b600080837342000000000000000000000000000000000000076040516020016115c6929190613581565b60408051601f1981840301815282825280516020918201209083015260009082015260600160408051601f198184030181529082905280516020918201207f420000000000000000000000000000000000000000000000000000000000000091830191909152915060009081906116569060340160408051601f1981840301815291905260608701518751611780565b90925090506001821515146116f95760405162461bcd60e51b815260206004820152604d60248201527f4d6573736167652070617373696e67207072656465706c6f7920686173206e6f60448201527f74206265656e20696e697469616c697a6564206f7220696e76616c696420707260648201527f6f6f662070726f76696465642e00000000000000000000000000000000000000608482015260a401610493565b6000611704826117a9565b90506117758460405160200161171c91815260200190565b60408051601f19818403018152908290527f01000000000000000000000000000000000000000000000000000000000000006020830152906021016040516020818303038152906040528860800151846040015161186d565b979650505050505050565b60006060600061178f86611891565b905061179c8186866118c3565b9250925050935093915050565b6040805160808101825260008082526020820181905291810182905260608101829052906117d68361199e565b90506040518060800160405280611806836000815181106117f9576117f96131d5565b60200260200101516119d1565b8152602001611821836001815181106117f9576117f96131d5565b81526020016118498360028151811061183c5761183c6131d5565b60200260200101516119d8565b81526020016118648360038151811061183c5761183c6131d5565b90529392505050565b60008061187986611891565b905061188781868686611ada565b9695505050505050565b606081805190602001206040516020016118ad91815260200190565b6040516020818303038152906040529050919050565b6000606060006118d285611b10565b905060008060006118e4848a89611c0b565b815192955090935091501580806118f85750815b6119445760405162461bcd60e51b815260206004820152601a60248201527f50726f76696465642070726f6f6620697320696e76616c69642e0000000000006044820152606401610493565b600081611960576040518060200160405280600081525061198c565b61198c8661196f6001886135cb565b8151811061197f5761197f6131d5565b60200260200101516120a6565b919b919a509098505050505050505050565b604080518082018252600080825260209182015281518083019092528251825280830190820152606090610638906120d0565b6000610638825b6000602182600001511115611a2f5760405162461bcd60e51b815260206004820152601a60248201527f496e76616c696420524c5020627974657333322076616c75652e0000000000006044820152606401610493565b6000806000611a3d856122cf565b919450925090506000816001811115611a5857611a586135e2565b14611aa55760405162461bcd60e51b815260206004820152601a60248201527f496e76616c696420524c5020627974657333322076616c75652e0000000000006044820152606401610493565b6000838660200151611ab79190613611565b805190915060208410156118875760208490036101000a90049695505050505050565b6000806000611aea8786866118c3565b915091508180156117755750805160208083019190912087519188019190912014611775565b60606000611b1d8361199e565b90506000815167ffffffffffffffff811115611b3b57611b3b612cc8565b604051908082528060200260200182016040528015611b8057816020015b6040805180820190915260608082526020820152815260200190600190039081611b595790505b50905060005b8251811015611c03576000611bb3848381518110611ba657611ba66131d5565b6020026020010151612620565b90506040518060400160405280828152602001611bcf8361199e565b815250838381518110611be457611be46131d5565b6020026020010181905250508080611bfb90613302565b915050611b86565b509392505050565b60006060818080611c1b876126b0565b90506000869050600080611c42604051806040016040528060608152602001606081525090565b60005b8c51811015612062578c8181518110611c6057611c606131d5565b602002602001015191508284611c769190613611565b9350611c83600188613611565b965083611ce757815180516020909101208514611ce25760405162461bcd60e51b815260206004820152601160248201527f496e76616c696420726f6f7420686173680000000000000000000000000000006044820152606401610493565b611da4565b815151602011611d4957815180516020909101208514611ce25760405162461bcd60e51b815260206004820152601b60248201527f496e76616c6964206c6172676520696e7465726e616c206861736800000000006044820152606401610493565b84611d578360000151612833565b14611da45760405162461bcd60e51b815260206004820152601a60248201527f496e76616c696420696e7465726e616c206e6f646520686173680000000000006044820152606401610493565b611db060106001613611565b8260200151511415611e29578551841415611dca57612062565b6000868581518110611dde57611dde6131d5565b602001015160f81c60f81b60f81c9050600083602001518260ff1681518110611e0957611e096131d5565b60200260200101519050611e1c8161285b565b9650600194505050612050565b60028260200151511415612008576000611e4283612891565b9050600081600081518110611e5957611e596131d5565b016020015160f81c90506000611e70600283613658565b611e7b90600261367a565b90506000611e8c848360ff166128b5565b90506000611e9a8b8a6128b5565b90506000611ea883836128eb565b905060ff851660021480611ebf575060ff85166003145b15611f1557808351148015611ed45750808251145b15611ee657611ee3818b613611565b99505b507f80000000000000000000000000000000000000000000000000000000000000009950612062945050505050565b60ff85161580611f28575060ff85166001145b15611f9a5782518114611f6457507f80000000000000000000000000000000000000000000000000000000000000009950612062945050505050565b611f8b8860200151600181518110611f7e57611f7e6131d5565b602002602001015161285b565b9a509750612050945050505050565b60405162461bcd60e51b815260206004820152602660248201527f52656365697665642061206e6f6465207769746820616e20756e6b6e6f776e2060448201527f70726566697800000000000000000000000000000000000000000000000000006064820152608401610493565b60405162461bcd60e51b815260206004820152601d60248201527f526563656976656420616e20756e706172736561626c65206e6f64652e0000006044820152606401610493565b8061205a81613302565b915050611c45565b507f800000000000000000000000000000000000000000000000000000000000000084148661209187866128b5565b909e909d50909b509950505050505050505050565b60208101518051606091610638916120c0906001906135cb565b81518110611ba657611ba66131d5565b60606000806120de846122cf565b919350909150600190508160018111156120fa576120fa6135e2565b146121475760405162461bcd60e51b815260206004820152601760248201527f496e76616c696420524c50206c6973742076616c75652e0000000000000000006044820152606401610493565b6040805160208082526104208201909252600091816020015b60408051808201909152600080825260208201528152602001906001900390816121605790505090506000835b86518110156122c4576020821061220c5760405162461bcd60e51b815260206004820152602a60248201527f50726f766964656420524c50206c6973742065786365656473206d6178206c6960448201527f7374206c656e6774682e000000000000000000000000000000000000000000006064820152608401610493565b6000806122496040518060400160405280858c6000015161222d91906135cb565b8152602001858c602001516122429190613611565b90526122cf565b5091509150604051806040016040528083836122659190613611565b8152602001848b6020015161227a9190613611565b81525085858151811061228f5761228f6131d5565b60209081029190910101526122a5600185613611565b93506122b18183613611565b6122bb9084613611565b9250505061218d565b508152949350505050565b6000806000808460000151116123275760405162461bcd60e51b815260206004820152601860248201527f524c50206974656d2063616e6e6f74206265206e756c6c2e00000000000000006044820152606401610493565b6020840151805160001a607f811161234c576000600160009450945094505050612619565b60b781116123c85760006123616080836135cb565b9050808760000151116123b65760405162461bcd60e51b815260206004820152601960248201527f496e76616c696420524c502073686f727420737472696e672e000000000000006044820152606401610493565b60019550935060009250612619915050565b60bf81116124b75760006123dd60b7836135cb565b9050808760000151116124325760405162461bcd60e51b815260206004820152601f60248201527f496e76616c696420524c50206c6f6e6720737472696e67206c656e6774682e006044820152606401610493565b600183015160208290036101000a900461244c8183613611565b88511161249b5760405162461bcd60e51b815260206004820152601860248201527f496e76616c696420524c50206c6f6e6720737472696e672e00000000000000006044820152606401610493565b6124a6826001613611565b965094506000935061261992505050565b60f781116125325760006124cc60c0836135cb565b9050808760000151116125215760405162461bcd60e51b815260206004820152601760248201527f496e76616c696420524c502073686f7274206c6973742e0000000000000000006044820152606401610493565b600195509350849250612619915050565b600061253f60f7836135cb565b9050808760000151116125945760405162461bcd60e51b815260206004820152601d60248201527f496e76616c696420524c50206c6f6e67206c697374206c656e6774682e0000006044820152606401610493565b600183015160208290036101000a90046125ae8183613611565b8851116125fd5760405162461bcd60e51b815260206004820152601660248201527f496e76616c696420524c50206c6f6e67206c6973742e000000000000000000006044820152606401610493565b612608826001613611565b965094506001935061261992505050565b9193909250565b60606000806000612630856122cf565b91945092509050600081600181111561264b5761264b6135e2565b146126985760405162461bcd60e51b815260206004820152601860248201527f496e76616c696420524c502062797465732076616c75652e00000000000000006044820152606401610493565b6126a785602001518484612997565b95945050505050565b60606000825160026126c2919061369d565b67ffffffffffffffff8111156126da576126da612cc8565b6040519080825280601f01601f191660200182016040528015612704576020820181803683370190505b50905060005b835181101561282c576004848281518110612727576127276131d5565b01602001517fff0000000000000000000000000000000000000000000000000000000000000016901c8261275c83600261369d565b8151811061276c5761276c6131d5565b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a90535060108482815181106127af576127af6131d5565b01602001516127c1919060f81c613658565b60f81b826127d083600261369d565b6127db906001613611565b815181106127eb576127eb6131d5565b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a9053508061282481613302565b91505061270a565b5092915050565b600060208251101561284757506020015190565b8180602001905181019061063891906136da565b6000606060208360000151101561287c5761287583612a76565b9050612888565b61288583612620565b90505b61144f81612833565b60606106386128b08360200151600081518110611ba657611ba66131d5565b6126b0565b6060825182106128d45750604080516020810190915260008152610638565b61144f83838486516128e691906135cb565b612a81565b6000805b8084511180156128ff5750808351115b80156129805750828181518110612918576129186131d5565b602001015160f81c60f81b7effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916848281518110612957576129576131d5565b01602001517fff0000000000000000000000000000000000000000000000000000000000000016145b1561144f578061298f81613302565b9150506128ef565b606060008267ffffffffffffffff8111156129b4576129b4612cc8565b6040519080825280601f01601f1916602001820160405280156129de576020820181803683370190505b5090508051600014156129f257905061144f565b60006129fe8587613611565b90506020820160005b612a126020876136f3565b811015612a495782518252612a28602084613611565b9250612a35602083613611565b915080612a4181613302565b915050612a07565b5060006001602087066020036101000a039050808251168119845116178252839450505050509392505050565b606061063882612c02565b606081612a8f81601f613611565b1015612add5760405162461bcd60e51b815260206004820152600e60248201527f736c6963655f6f766572666c6f770000000000000000000000000000000000006044820152606401610493565b82612ae88382613611565b1015612b365760405162461bcd60e51b815260206004820152600e60248201527f736c6963655f6f766572666c6f770000000000000000000000000000000000006044820152606401610493565b612b408284613611565b84511015612b905760405162461bcd60e51b815260206004820152601160248201527f736c6963655f6f75744f66426f756e64730000000000000000000000000000006044820152606401610493565b606082158015612baf5760405191506000825260208201604052612bf9565b6040519150601f8416801560200281840101858101878315602002848b0101015b81831015612be8578051835260209283019201612bd0565b5050858452601f01601f1916604052505b50949350505050565b6060610638826020015160008460000151612997565b600060208284031215612c2a57600080fd5b5035919050565b60008060208385031215612c4457600080fd5b823567ffffffffffffffff80821115612c5c57600080fd5b818501915085601f830112612c7057600080fd5b813581811115612c7f57600080fd5b8660208260051b8501011115612c9457600080fd5b60209290920196919550909350505050565b73ffffffffffffffffffffffffffffffffffffffff81168114610f8857600080fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b60405160a0810167ffffffffffffffff81118282101715612d1a57612d1a612cc8565b60405290565b6040805190810167ffffffffffffffff81118282101715612d1a57612d1a612cc8565b604051601f8201601f1916810167ffffffffffffffff81118282101715612d6c57612d6c612cc8565b604052919050565b600067ffffffffffffffff831115612d8e57612d8e612cc8565b612da16020601f19601f86011601612d43565b9050828152838383011115612db557600080fd5b828260208301376000602084830101529392505050565b600082601f830112612ddd57600080fd5b61144f83833560208501612d74565b803563ffffffff81168114612e0057600080fd5b919050565b600080600060608486031215612e1a57600080fd5b8335612e2581612ca6565b9250602084013567ffffffffffffffff811115612e4157600080fd5b612e4d86828701612dcc565b925050612e5c60408501612dec565b90509250925092565b600060208284031215612e7757600080fd5b813567ffffffffffffffff811115612e8e57600080fd5b8201601f81018413612e9f57600080fd5b612eae84823560208401612d74565b949350505050565b60008060008060008060c08789031215612ecf57600080fd5b8635612eda81612ca6565b95506020870135612eea81612ca6565b9450604087013567ffffffffffffffff811115612f0657600080fd5b612f1289828a01612dcc565b94505060608701359250612f2860808801612dec565b9150612f3660a08801612dec565b90509295509295509295565b600060208284031215612f5457600080fd5b813561144f81612ca6565b600060a08284031215612f7157600080fd5b612f79612cf7565b905081358152602082013560208201526040820135604082015260608201356060820152608082013567ffffffffffffffff811115612fb757600080fd5b612fc384828501612dcc565b60808301525092915050565b600060408284031215612fe157600080fd5b612fe9612d20565b90508135815260208083013567ffffffffffffffff8082111561300b57600080fd5b818501915085601f83011261301f57600080fd5b81358181111561303157613031612cc8565b8060051b9150613042848301612d43565b818152918301840191848101908884111561305c57600080fd5b938501935b8385101561307a57843582529385019390850190613061565b808688015250505050505092915050565b600060a0828403121561309d57600080fd5b6130a5612cf7565b905081358152602082013567ffffffffffffffff808211156130c657600080fd5b6130d285838601612f5f565b602084015260408401359150808211156130eb57600080fd5b6130f785838601612fcf565b6040840152606084013591508082111561311057600080fd5b61311c85838601612dcc565b6060840152608084013591508082111561313557600080fd5b50612fc384828501612dcc565b600080600080600060a0868803121561315a57600080fd5b853561316581612ca6565b9450602086013561317581612ca6565b9350604086013567ffffffffffffffff8082111561319257600080fd5b61319e89838a01612dcc565b94506060880135935060808801359150808211156131bb57600080fd5b506131c88882890161308b565b9150509295509295909350565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b600082357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff6183360301811261323857600080fd5b9190910192915050565b600060a0823603121561325457600080fd5b61325c612cf7565b823561326781612ca6565b8152602083013561327781612ca6565b6020820152604083013567ffffffffffffffff8082111561329757600080fd5b6132a336838701612dcc565b60408401526060850135606084015260808501359150808211156132c657600080fd5b50612fc33682860161308b565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff821415613334576133346132d3565b5060010190565b60005b8381101561335657818101518382015260200161333e565b83811115613365576000848401525b50505050565b6000815180845261338381602086016020860161333b565b601f01601f19169290920160200192915050565b60208152600061144f602083018461336b565b6000602082840312156133bc57600080fd5b815161144f81612ca6565b6000825161323881846020870161333b565b73ffffffffffffffffffffffffffffffffffffffff84168152606060208201526000613408606083018561336b565b9050826040830152949350505050565b6000845161342a81846020890161333b565b60609490941b7fffffffffffffffffffffffffffffffffffffffff0000000000000000000000001691909301908152601481019190915260340192915050565b600073ffffffffffffffffffffffffffffffffffffffff8087168352808616602084015250608060408301526134a3608083018561336b565b905082606083015295945050505050565b8381526000602060608184015284516060840152808501516080840152604085015160a0840152606085015160c0840152608085015160a060e08501526134ff61010085018261336b565b905083810360408501526040810185518252828601516040848401528181518084526060850191508583019450600093505b808410156135515784518252938501936001939093019290850190613531565b509998505050505050505050565b60006020828403121561357157600080fd5b8151801515811461144f57600080fd5b6000835161359381846020880161333b565b60609390931b7fffffffffffffffffffffffffffffffffffffffff000000000000000000000000169190920190815260140192915050565b6000828210156135dd576135dd6132d3565b500390565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b60008219821115613624576136246132d3565b500190565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b600060ff83168061366b5761366b613629565b8060ff84160691505092915050565b600060ff821660ff841680821015613694576136946132d3565b90039392505050565b6000817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff04831182151516156136d5576136d56132d3565b500290565b6000602082840312156136ec57600080fd5b5051919050565b60008261370257613702613629565b50049056fea26469706673582212202de197a29c4cdce4170574fe7ddb3adcfb6375d36dc28b79414f33371d02f4c364736f6c63430008090033", "deployedBytecode": "0x608060405234801561001057600080fd5b506004361061016c5760003560e01c8063715018a6116100cd578063b1b1b20911610081578063c6b94ab011610066578063c6b94ab0146102ff578063d7fd19dd14610322578063f2fde38b1461033557600080fd5b8063b1b1b209146102c9578063c4d66de8146102ec57600080fd5b80638456cb59116100b25780638456cb59146102805780638da5cb5b14610288578063a4e7f8bd146102a657600080fd5b8063715018a61461026557806381ada46c1461026d57600080fd5b80633f4ba83a116101245780635c975abb116101095780635c975abb146102445780636e296e451461024f5780636f1c8d471461025757600080fd5b80633f4ba83a14610229578063461a44781461023157600080fd5b806321d800ec1161015557806321d800ec14610199578063299ca478146101d15780633dbb202b1461021657600080fd5b80630ecf2eea1461017157806316e9cd9b14610186575b600080fd5b61018461017f366004612c18565b610348565b005b610184610194366004612c31565b610393565b6101bc6101a7366004612c18565b60ca6020526000908152604090205460ff1681565b60405190151581526020015b60405180910390f35b6000546101f19073ffffffffffffffffffffffffffffffffffffffff1681565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020016101c8565b610184610224366004612e05565b610511565b61018461057f565b6101f161023f366004612e65565b610591565b60655460ff166101bc565b6101f161063e565b610184610224366004612eb6565b6101846106c8565b61018461027b366004612c18565b6106da565b610184610722565b60335473ffffffffffffffffffffffffffffffffffffffff166101f1565b6101bc6102b4366004612c18565b60cc6020526000908152604090205460ff1681565b6101bc6102d7366004612c18565b60cb6020526000908152604090205460ff1681565b6101846102fa366004612f42565b610732565b6101bc61030d366004612c18565b60c96020526000908152604090205460ff1681565b610184610330366004613142565b610a0a565b610184610343366004612f42565b610eee565b610350610f8b565b600081815260c96020526040808220805460ff191660011790555182917ff52508d5339edf0d7e5060a416df98db067af561bdc60872d29c0439eaa13a0291a250565b6103d16040518060400160405280600f81526020017f4f564d5f4661737452656c617965720000000000000000000000000000000000815250610591565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161461049c5760405162461bcd60e51b815260206004820152604a60248201527f4c3143726f7373446f6d61696e4d657373656e676572466173743a2046756e6360448201527f74696f6e2063616e206f6e6c792062652063616c6c656420627920746865204660648201527f61737452656c6179657200000000000000000000000000000000000000000000608482015260a4015b60405180910390fd5b60005b8181101561050c5760008383838181106104bb576104bb6131d5565b90506020028101906104cd9190613204565b6104d690613242565b90506104f981600001518260200151836040015184606001518560800151610a0a565b508061050481613302565b91505061049f565b505050565b60405162461bcd60e51b815260206004820152602660248201527f53656e64696e67207669612074686973206d657373656e67657220697320646960448201527f7361626c656400000000000000000000000000000000000000000000000000006064820152608401610493565b610587610f8b565b61058f610ff2565b565b600080546040517fbf40fac100000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff9091169063bf40fac1906105e8908590600401613397565b60206040518083038186803b15801561060057600080fd5b505afa158015610614573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061063891906133aa565b92915050565b60cd5460009073ffffffffffffffffffffffffffffffffffffffff1661dead14156106ab5760405162461bcd60e51b815260206004820152601f60248201527f78446f6d61696e4d65737361676553656e646572206973206e6f7420736574006044820152606401610493565b5060cd5473ffffffffffffffffffffffffffffffffffffffff1690565b6106d0610f8b565b61058f6000611051565b6106e2610f8b565b600081815260c96020526040808220805460ff191690555182917f52c8a2680a9f4cc0ad0bf88f32096eadbebf0646ea611d93a0ce6a29a024040591a250565b61072a610f8b565b61058f6110c8565b6000547501000000000000000000000000000000000000000000900460ff161580801561077d575060005460017401000000000000000000000000000000000000000090910460ff16105b806107af5750303b1580156107af575060005474010000000000000000000000000000000000000000900460ff166001145b6108215760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201527f647920696e697469616c697a65640000000000000000000000000000000000006064820152608401610493565b600080547fffffffffffffffffffffff00ffffffffffffffffffffffffffffffffffffffff167401000000000000000000000000000000000000000017905580156108a757600080547fffffffffffffffffffff00ffffffffffffffffffffffffffffffffffffffffff1675010000000000000000000000000000000000000000001790555b60005473ffffffffffffffffffffffffffffffffffffffff16156109335760405162461bcd60e51b815260206004820152602a60248201527f4c3143726f7373446f6d61696e4d657373656e67657220616c7265616479206960448201527f6e7469616c697a65642e000000000000000000000000000000000000000000006064820152608401610493565b6000805473ffffffffffffffffffffffffffffffffffffffff84167fffffffffffffffffffffffff00000000000000000000000000000000000000009182161790915560cd805490911661dead17905561098b611105565b610993611196