@eth-optimism/contracts
Version:
[Optimism] L1 and L2 smart contracts for Optimism
514 lines • 69.4 kB
JSON
{
"_format": "hh-sol-artifact-1",
"contractName": "L1CrossDomainMessenger",
"sourceName": "contracts/L1/messaging/L1CrossDomainMessenger.sol",
"abi": [
{
"inputs": [],
"stateMutability": "nonpayable",
"type": "constructor"
},
{
"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": "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": [
{
"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": "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": "xDomainMessageSender",
"outputs": [
{
"internalType": "address",
"name": "",
"type": "address"
}
],
"stateMutability": "view",
"type": "function"
}
],
"bytecode": "0x608060405260cc80546001600160a01b03191661dead17905534801561002457600080fd5b50600080546001600160a01b0319169055613865806100446000396000f3fe608060405234801561001057600080fd5b506004361061011b5760003560e01c8063715018a6116100b2578063b1b1b20911610081578063c6b94ab011610066578063c6b94ab014610275578063d7fd19dd14610298578063f2fde38b146102ab57600080fd5b8063b1b1b2091461023f578063c4d66de81461026257600080fd5b8063715018a6146101fe57806381ada46c146102065780638456cb59146102195780638da5cb5b1461022157600080fd5b8063461a4478116100ee578063461a4478146101c55780635c975abb146101d85780636e296e45146101e35780636f1c8d47146101eb57600080fd5b80630ecf2eea1461012057806321d800ec14610135578063299ca4781461016d5780633dbb202b146101b2575b600080fd5b61013361012e366004612d2e565b6102be565b005b610158610143366004612d2e565b60ca6020526000908152604090205460ff1681565b60405190151581526020015b60405180910390f35b60005461018d9073ffffffffffffffffffffffffffffffffffffffff1681565b60405173ffffffffffffffffffffffffffffffffffffffff9091168152602001610164565b6101336101c0366004612ea6565b610309565b61018d6101d3366004612f06565b610451565b60655460ff16610158565b61018d6104fe565b6101336101f9366004612f57565b61058d565b610133610774565b610133610214366004612d2e565b610788565b6101336107d0565b60335473ffffffffffffffffffffffffffffffffffffffff1661018d565b61015861024d366004612d2e565b60cb6020526000908152604090205460ff1681565b610133610270366004612fe3565b6107e0565b610158610283366004612d2e565b60c96020526000908152604090205460ff1681565b6101336102a6366004613149565b610ab8565b6101336102b9366004612fe3565b610f3c565b6102c6610fd9565b600081815260c96020526040808220805460ff191660011790555182917ff52508d5339edf0d7e5060a416df98db067af561bdc60872d29c0439eaa13a0291a250565b60006103496040518060400160405280601981526020017f43616e6f6e6963616c5472616e73616374696f6e436861696e00000000000000815250610451565b905060008173ffffffffffffffffffffffffffffffffffffffff1663b8f770056040518163ffffffff1660e01b815260040160206040518083038186803b15801561039357600080fd5b505afa1580156103a7573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906103cb9190613297565b905060006103e28633878564ffffffffff16611040565b90506103f583828663ffffffff166110bb565b8573ffffffffffffffffffffffffffffffffffffffff167fcb0f7ffd78f9aee47a248fae8db181db6eee833039123e026dcbff529522e52a33878588604051610441949392919061330e565b60405180910390a2505050505050565b600080546040517fbf40fac100000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff9091169063bf40fac1906104a8908590600401613361565b60206040518083038186803b1580156104c057600080fd5b505afa1580156104d4573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906104f89190613374565b92915050565b60cc5460009073ffffffffffffffffffffffffffffffffffffffff1661dead14156105705760405162461bcd60e51b815260206004820152601f60248201527f78446f6d61696e4d65737361676553656e646572206973206e6f74207365740060448201526064015b60405180910390fd5b5060cc5473ffffffffffffffffffffffffffffffffffffffff1690565b60006105cd6040518060400160405280601981526020017f43616e6f6e6963616c5472616e73616374696f6e436861696e00000000000000815250610451565b6040517f2a7f18be0000000000000000000000000000000000000000000000000000000081526004810186905290915060009073ffffffffffffffffffffffffffffffffffffffff831690632a7f18be9060240160606040518083038186803b15801561063957600080fd5b505afa15801561064d573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906106719190613391565b9050600061068189898989611040565b90506000731111000000000000000000000000000000001111300173420000000000000000000000000000000000000787846040516020016106c694939291906133f6565b604051602081830303815290604052805190602001209050826000015181146107575760405162461bcd60e51b815260206004820152602760248201527f50726f7669646564206d65737361676520686173206e6f74206265656e20656e60448201527f7175657565642e000000000000000000000000000000000000000000000000006064820152608401610567565b61076884838763ffffffff166110bb565b50505050505050505050565b61077c610fd9565b610786600061115c565b565b610790610fd9565b600081815260c96020526040808220805460ff191690555182917f52c8a2680a9f4cc0ad0bf88f32096eadbebf0646ea611d93a0ce6a29a024040591a250565b6107d8610fd9565b6107866111d3565b6000547501000000000000000000000000000000000000000000900460ff161580801561082b575060005460017401000000000000000000000000000000000000000090910460ff16105b8061085d5750303b15801561085d575060005474010000000000000000000000000000000000000000900460ff166001145b6108cf5760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201527f647920696e697469616c697a65640000000000000000000000000000000000006064820152608401610567565b600080547fffffffffffffffffffffff00ffffffffffffffffffffffffffffffffffffffff1674010000000000000000000000000000000000000000179055801561095557600080547fffffffffffffffffffff00ffffffffffffffffffffffffffffffffffffffffff1675010000000000000000000000000000000000000000001790555b60005473ffffffffffffffffffffffffffffffffffffffff16156109e15760405162461bcd60e51b815260206004820152602a60248201527f4c3143726f7373446f6d61696e4d657373656e67657220616c7265616479206960448201527f6e7469616c697a65642e000000000000000000000000000000000000000000006064820152608401610567565b6000805473ffffffffffffffffffffffffffffffffffffffff84167fffffffffffffffffffffffff00000000000000000000000000000000000000009182161790915560cc805490911661dead179055610a3961123a565b610a416112cb565b610a49611365565b610a51611402565b8015610ab457600080547fffffffffffffffffffff00ffffffffffffffffffffffffffffffffffffffffff169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b5050565b60026097541415610b0b5760405162461bcd60e51b815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c006044820152606401610567565b6002609755610b1861149a565b6000610b2686868686611040565b9050610b3281836114ed565b1515600114610ba95760405162461bcd60e51b815260206004820152602760248201527f50726f7669646564206d65737361676520636f756c64206e6f7420626520766560448201527f7269666965642e000000000000000000000000000000000000000000000000006064820152608401610567565b8051602080830191909120600081815260cb90925260409091205460ff1615610c3a5760405162461bcd60e51b815260206004820152602b60248201527f50726f7669646564206d6573736167652068617320616c72656164792062656560448201527f6e2072656365697665642e0000000000000000000000000000000000000000006064820152608401610567565b600081815260c9602052604090205460ff1615610cbf5760405162461bcd60e51b815260206004820152602260248201527f50726f7669646564206d65737361676520686173206265656e20626c6f636b6560448201527f642e0000000000000000000000000000000000000000000000000000000000006064820152608401610567565b610cfd6040518060400160405280601981526020017f43616e6f6e6963616c5472616e73616374696f6e436861696e00000000000000815250610451565b73ffffffffffffffffffffffffffffffffffffffff168773ffffffffffffffffffffffffffffffffffffffff161415610d9e5760405162461bcd60e51b815260206004820152603360248201527f43616e6e6f742073656e64204c322d3e4c31206d6573736167657320746f204c60448201527f312073797374656d20636f6e7472616374732e000000000000000000000000006064820152608401610567565b60cc80547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff88811691909117909155604051600091891690610df790889061343b565b6000604051808303816000865af19150503d8060008114610e34576040519150601f19603f3d011682016040523d82523d6000602084013e610e39565b606091505b505060cc80547fffffffffffffffffffffffff00000000000000000000000000000000000000001661dead179055905080151560011415610eb957600082815260cb6020526040808220805460ff191660011790555183917f4641df4a962071e12719d8c8c8e5ac7fc4d97b927346a3d7a335b1f7517e133c91a2610ee5565b60405182907f99d0e048484baa1b1540b1367cb128acd7ab2946d1ed91ec10e3c85e4bf51b8f90600090a25b6000833343604051602001610efc93929190613457565b60408051601f198184030181529181528151602092830120600090815260ca9092529020805460ff19166001908117909155609755505050505050505050565b610f44610fd9565b73ffffffffffffffffffffffffffffffffffffffff8116610fcd5760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201527f64647265737300000000000000000000000000000000000000000000000000006064820152608401610567565b610fd68161115c565b50565b60335473ffffffffffffffffffffffffffffffffffffffff1633146107865760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610567565b60608484848460405160240161105994939291906134a9565b60408051601f198184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fcbd4ece9000000000000000000000000000000000000000000000000000000001790529050949350505050565b6040517f6fee07e000000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff841690636fee07e0906111259073420000000000000000000000000000000000000790859087906004016134f3565b600060405180830381600087803b15801561113f57600080fd5b505af1158015611153573d6000803e3d6000fd5b50505050505050565b6033805473ffffffffffffffffffffffffffffffffffffffff8381167fffffffffffffffffffffffff0000000000000000000000000000000000000000831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b6111db61149a565b6065805460ff191660011790557f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a2586112103390565b60405173ffffffffffffffffffffffffffffffffffffffff909116815260200160405180910390a1565b6000547501000000000000000000000000000000000000000000900460ff166107865760405162461bcd60e51b815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201527f6e697469616c697a696e670000000000000000000000000000000000000000006064820152608401610567565b6000547501000000000000000000000000000000000000000000900460ff1661135c5760405162461bcd60e51b815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201527f6e697469616c697a696e670000000000000000000000000000000000000000006064820152608401610567565b6107863361115c565b6000547501000000000000000000000000000000000000000000900460ff166113f65760405162461bcd60e51b815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201527f6e697469616c697a696e670000000000000000000000000000000000000000006064820152608401610567565b6065805460ff19169055565b6000547501000000000000000000000000000000000000000000900460ff166114935760405162461bcd60e51b815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201527f6e697469616c697a696e670000000000000000000000000000000000000000006064820152608401610567565b6001609755565b60655460ff16156107865760405162461bcd60e51b815260206004820152601060248201527f5061757361626c653a20706175736564000000000000000000000000000000006044820152606401610567565b60006114f882611510565b8015611509575061150983836116b2565b9392505050565b6000806115516040518060400160405280601481526020017f5374617465436f6d6d69746d656e74436861696e000000000000000000000000815250610451565b60208401516040517f9418bddd00000000000000000000000000000000000000000000000000000000815291925073ffffffffffffffffffffffffffffffffffffffff831691639418bddd916115a991600401613565565b60206040518083038186803b1580156115c157600080fd5b505afa1580156115d5573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906115f99190613578565b15801561150957508251602084015160408086015190517f4d69ee5700000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff851693634d69ee579361166293919290919060040161359a565b60206040518083038186803b15801561167a57600080fd5b505afa15801561168e573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906115099190613578565b600080837342000000000000000000000000000000000000076040516020016116dc929190613612565b60408051601f1981840301815282825280516020918201209083015260009082015260600160408051601f198184030181529082905280516020918201207f4200000000000000000000000000000000000000000000000000000000000000918301919091529150600090819061176c9060340160408051601f1981840301815291905260608701518751611896565b909250905060018215151461180f5760405162461bcd60e51b815260206004820152604d60248201527f4d6573736167652070617373696e67207072656465706c6f7920686173206e6f60448201527f74206265656e20696e697469616c697a6564206f7220696e76616c696420707260648201527f6f6f662070726f76696465642e00000000000000000000000000000000000000608482015260a401610567565b600061181a826118bf565b905061188b8460405160200161183291815260200190565b60408051601f19818403018152908290527f010000000000000000000000000000000000000000000000000000000000000060208301529060210160405160208183030381529060405288608001518460400151611983565b979650505050505050565b6000606060006118a5866119a7565b90506118b28186866119d9565b9250925050935093915050565b6040805160808101825260008082526020820181905291810182905260608101829052906118ec83611ab4565b9050604051806080016040528061191c8360008151811061190f5761190f61365c565b6020026020010151611ae7565b81526020016119378360018151811061190f5761190f61365c565b815260200161195f836002815181106119525761195261365c565b6020026020010151611aee565b815260200161197a836003815181106119525761195261365c565b90529392505050565b60008061198f866119a7565b905061199d81868686611bf0565b9695505050505050565b606081805190602001206040516020016119c391815260200190565b6040516020818303038152906040529050919050565b6000606060006119e885611c26565b905060008060006119fa848a89611d21565b81519295509093509150158080611a0e5750815b611a5a5760405162461bcd60e51b815260206004820152601a60248201527f50726f76696465642070726f6f6620697320696e76616c69642e0000000000006044820152606401610567565b600081611a765760405180602001604052806000815250611aa2565b611aa286611a856001886136ba565b81518110611a9557611a9561365c565b60200260200101516121bc565b919b919a509098505050505050505050565b6040805180820182526000808252602091820152815180830190925282518252808301908201526060906104f8906121e6565b60006104f8825b6000602182600001511115611b455760405162461bcd60e51b815260206004820152601a60248201527f496e76616c696420524c5020627974657333322076616c75652e0000000000006044820152606401610567565b6000806000611b53856123e5565b919450925090506000816001811115611b6e57611b6e6136d1565b14611bbb5760405162461bcd60e51b815260206004820152601a60248201527f496e76616c696420524c5020627974657333322076616c75652e0000000000006044820152606401610567565b6000838660200151611bcd9190613700565b8051909150602084101561199d5760208490036101000a90049695505050505050565b6000806000611c008786866119d9565b9150915081801561188b575080516020808301919091208751918801919091201461188b565b60606000611c3383611ab4565b90506000815167ffffffffffffffff811115611c5157611c51612d69565b604051908082528060200260200182016040528015611c9657816020015b6040805180820190915260608082526020820152815260200190600190039081611c6f5790505b50905060005b8251811015611d19576000611cc9848381518110611cbc57611cbc61365c565b6020026020010151612736565b90506040518060400160405280828152602001611ce583611ab4565b815250838381518110611cfa57611cfa61365c565b6020026020010181905250508080611d1190613718565b915050611c9c565b509392505050565b60006060818080611d31876127c6565b90506000869050600080611d58604051806040016040528060608152602001606081525090565b60005b8c51811015612178578c8181518110611d7657611d7661365c565b602002602001015191508284611d8c9190613700565b9350611d99600188613700565b965083611dfd57815180516020909101208514611df85760405162461bcd60e51b815260206004820152601160248201527f496e76616c696420726f6f7420686173680000000000000000000000000000006044820152606401610567565b611eba565b815151602011611e5f57815180516020909101208514611df85760405162461bcd60e51b815260206004820152601b60248201527f496e76616c6964206c6172676520696e7465726e616c206861736800000000006044820152606401610567565b84611e6d8360000151612949565b14611eba5760405162461bcd60e51b815260206004820152601a60248201527f496e76616c696420696e7465726e616c206e6f646520686173680000000000006044820152606401610567565b611ec660106001613700565b8260200151511415611f3f578551841415611ee057612178565b6000868581518110611ef457611ef461365c565b602001015160f81c60f81b60f81c9050600083602001518260ff1681518110611f1f57611f1f61365c565b60200260200101519050611f3281612971565b9650600194505050612166565b6002826020015151141561211e576000611f58836129a7565b9050600081600081518110611f6f57611f6f61365c565b016020015160f81c90506000611f86600283613780565b611f919060026137a2565b90506000611fa2848360ff166129cb565b90506000611fb08b8a6129cb565b90506000611fbe8383612a01565b905060ff851660021480611fd5575060ff85166003145b1561202b57808351148015611fea5750808251145b15611ffc57611ff9818b613700565b99505b507f80000000000000000000000000000000000000000000000000000000000000009950612178945050505050565b60ff8516158061203e575060ff85166001145b156120b0578251811461207a57507f80000000000000000000000000000000000000000000000000000000000000009950612178945050505050565b6120a188602001516001815181106120945761209461365c565b6020026020010151612971565b9a509750612166945050505050565b60405162461bcd60e51b815260206004820152602660248201527f52656365697665642061206e6f6465207769746820616e20756e6b6e6f776e2060448201527f70726566697800000000000000000000000000000000000000000000000000006064820152608401610567565b60405162461bcd60e51b815260206004820152601d60248201527f526563656976656420616e20756e706172736561626c65206e6f64652e0000006044820152606401610567565b8061217081613718565b915050611d5b565b507f80000000000000000000000000000000000000000000000000000000000000008414866121a787866129cb565b909e909d50909b509950505050505050505050565b602081015180516060916104f8916121d6906001906136ba565b81518110611cbc57611cbc61365c565b60606000806121f4846123e5565b91935090915060019050816001811115612210576122106136d1565b1461225d5760405162461bcd60e51b815260206004820152601760248201527f496e76616c696420524c50206c6973742076616c75652e0000000000000000006044820152606401610567565b6040805160208082526104208201909252600091816020015b60408051808201909152600080825260208201528152602001906001900390816122765790505090506000835b86518110156123da57602082106123225760405162461bcd60e51b815260206004820152602a60248201527f50726f766964656420524c50206c6973742065786365656473206d6178206c6960448201527f7374206c656e6774682e000000000000000000000000000000000000000000006064820152608401610567565b60008061235f6040518060400160405280858c6000015161234391906136ba565b8152602001858c602001516123589190613700565b90526123e5565b50915091506040518060400160405280838361237b9190613700565b8152602001848b602001516123909190613700565b8152508585815181106123a5576123a561365c565b60209081029190910101526123bb600185613700565b93506123c78183613700565b6123d19084613700565b925050506122a3565b508152949350505050565b60008060008084600001511161243d5760405162461bcd60e51b815260206004820152601860248201527f524c50206974656d2063616e6e6f74206265206e756c6c2e00000000000000006044820152606401610567565b6020840151805160001a607f811161246257600060016000945094509450505061272f565b60b781116124de5760006124776080836136ba565b9050808760000151116124cc5760405162461bcd60e51b815260206004820152601960248201527f496e76616c696420524c502073686f727420737472696e672e000000000000006044820152606401610567565b6001955093506000925061272f915050565b60bf81116125cd5760006124f360b7836136ba565b9050808760000151116125485760405162461bcd60e51b815260206004820152601f60248201527f496e76616c696420524c50206c6f6e6720737472696e67206c656e6774682e006044820152606401610567565b600183015160208290036101000a90046125628183613700565b8851116125b15760405162461bcd60e51b815260206004820152601860248201527f496e76616c696420524c50206c6f6e6720737472696e672e00000000000000006044820152606401610567565b6125bc826001613700565b965094506000935061272f92505050565b60f781116126485760006125e260c0836136ba565b9050808760000151116126375760405162461bcd60e51b815260206004820152601760248201527f496e76616c696420524c502073686f7274206c6973742e0000000000000000006044820152606401610567565b60019550935084925061272f915050565b600061265560f7836136ba565b9050808760000151116126aa5760405162461bcd60e51b815260206004820152601d60248201527f496e76616c696420524c50206c6f6e67206c697374206c656e6774682e0000006044820152606401610567565b600183015160208290036101000a90046126c48183613700565b8851116127135760405162461bcd60e51b815260206004820152601660248201527f496e76616c696420524c50206c6f6e67206c6973742e000000000000000000006044820152606401610567565b61271e826001613700565b965094506001935061272f92505050565b9193909250565b60606000806000612746856123e5565b919450925090506000816001811115612761576127616136d1565b146127ae5760405162461bcd60e51b815260206004820152601860248201527f496e76616c696420524c502062797465732076616c75652e00000000000000006044820152606401610567565b6127bd85602001518484612aad565b95945050505050565b60606000825160026127d891906137c5565b67ffffffffffffffff8111156127f0576127f0612d69565b6040519080825280601f01601f19166020018201604052801561281a576020820181803683370190505b50905060005b835181101561294257600484828151811061283d5761283d61365c565b01602001517fff0000000000000000000000000000000000000000000000000000000000000016901c826128728360026137c5565b815181106128825761288261365c565b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a90535060108482815181106128c5576128c561365c565b01602001516128d7919060f81c613780565b60f81b826128e68360026137c5565b6128f1906001613700565b815181106129015761290161365c565b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a9053508061293a81613718565b915050612820565b5092915050565b600060208251101561295d57506020015190565b818060200190518101906104f89190613802565b600060606020836000015110156129925761298b83612b8c565b905061299e565b61299b83612736565b90505b61150981612949565b60606104f86129c68360200151600081518110611cbc57611cbc61365c565b6127c6565b6060825182106129ea57506040805160208101909152600081526104f8565b61150983838486516129fc91906136ba565b612b97565b6000805b808451118015612a155750808351115b8015612a965750828181518110612a2e57612a2e61365c565b602001015160f81c60f81b7effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916848281518110612a6d57612a6d61365c565b01602001517fff0000000000000000000000000000000000000000000000000000000000000016145b156115095780612aa581613718565b915050612a05565b606060008267ffffffffffffffff811115612aca57612aca612d69565b6040519080825280601f01601f191660200182016040528015612af4576020820181803683370190505b509050805160001415612b08579050611509565b6000612b148587613700565b90506020820160005b612b2860208761381b565b811015612b5f5782518252612b3e602084613700565b9250612b4b602083613700565b915080612b5781613718565b915050612b1d565b5060006001602087066020036101000a039050808251168119845116178252839450505050509392505050565b60606104f882612d18565b606081612ba581601f613700565b1015612bf35760405162461bcd60e51b815260206004820152600e60248201527f736c6963655f6f766572666c6f770000000000000000000000000000000000006044820152606401610567565b82612bfe8382613700565b1015612c4c5760405162461bcd60e51b815260206004820152600e60248201527f736c6963655f6f766572666c6f770000000000000000000000000000000000006044820152606401610567565b612c568284613700565b84511015612ca65760405162461bcd60e51b815260206004820152601160248201527f736c6963655f6f75744f66426f756e64730000000000000000000000000000006044820152606401610567565b606082158015612cc55760405191506000825260208201604052612d0f565b6040519150601f8416801560200281840101858101878315602002848b0101015b81831015612cfe578051835260209283019201612ce6565b5050858452601f01601f1916604052505b50949350505050565b60606104f8826020015160008460000151612aad565b600060208284031215612d4057600080fd5b5035919050565b73ffffffffffffffffffffffffffffffffffffffff81168114610fd657600080fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6040805190810167ffffffffffffffff81118282101715612dbb57612dbb612d69565b60405290565b60405160a0810167ffffffffffffffff81118282101715612dbb57612dbb612d69565b604051601f8201601f1916810167ffffffffffffffff81118282101715612e0d57612e0d612d69565b604052919050565b600067ffffffffffffffff831115612e2f57612e2f612d69565b612e426020601f19601f86011601612de4565b9050828152838383011115612e5657600080fd5b828260208301376000602084830101529392505050565b600082601f830112612e7e57600080fd5b61150983833560208501612e15565b803563ffffffff81168114612ea157600080fd5b919050565b600080600060608486031215612ebb57600080fd5b8335612ec681612d47565b9250602084013567ffffffffffffffff811115612ee257600080fd5b612eee86828701612e6d565b925050612efd60408501612e8d565b90509250925092565b600060208284031215612f1857600080fd5b813567ffffffffffffffff811115612f2f57600080fd5b8201601f81018413612f4057600080fd5b612f4f84823560208401612e15565b949350505050565b60008060008060008060c08789031215612f7057600080fd5b8635612f7b81612d47565b95506020870135612f8b81612d47565b9450604087013567ffffffffffffffff811115612fa757600080fd5b612fb389828a01612e6d565b94505060608701359250612fc960808801612e8d565b9150612fd760a08801612e8d565b90509295509295509295565b600060208284031215612ff557600080fd5b813561150981612d47565b600060a0828403121561301257600080fd5b60405160a0810167ffffffffffffffff828210818311171561303657613036612d69565b8160405282935084358352602085013560208401526040850135604084015260608501356060840152608085013591508082111561307357600080fd5b5061308085828601612e6d565b6080830152505092915050565b60006040828403121561309f57600080fd5b6130a7612d98565b90508135815260208083013567ffffffffffffffff808211156130c957600080fd5b818501915085601f8301126130dd57600080fd5b8135818111156130ef576130ef612d69565b8060051b9150613100848301612de4565b818152918301840191848101908884111561311a57600080fd5b938501935b838510156131385784358252938501939085019061311f565b808688015250505050505092915050565b600080600080600060a0868803121561316157600080fd5b853561316c81612d47565b9450602086013561317c81612d47565b9350604086013567ffffffffffffffff8082111561319957600080fd5b6131a589838a01612e6d565b94506060880135935060808801359150808211156131c257600080fd5b9087019060a0828a0312156131d657600080fd5b6131de612dc1565b823581526020830135828111156131f457600080fd5b6132008b828601613000565b60208301525060408301358281111561321857600080fd5b6132248b82860161308d565b60408301525060608301358281111561323c57600080fd5b6132488b828601612e6d565b60608301525060808301358281111561326057600080fd5b61326c8b828601612e6d565b6080830152508093505050509295509295909350565b805164ffffffffff81168114612ea157600080fd5b6000602082840312156132a957600080fd5b61150982613282565b60005b838110156132cd5781810151838201526020016132b5565b838111156132dc576000848401525b50505050565b600081518084526132fa8160208601602086016132b2565b601f01601f19169290920160200192915050565b73ffffffffffffffffffffffffffffffffffffffff8516815260806020820152600061333d60808301866132e2565b905064ffffffffff8416604083015263ffffffff8316606083015295945050505050565b60208152600061150960208301846132e2565b60006020828403121561338657600080fd5b815161150981612d47565b6000606082840312156133a357600080fd5b6040516060810181811067ffffffffffffffff821117156133c6576133c6612d69565b604052825181526133d960208401613282565b60208201526133ea60408401613282565b60408201529392505050565b600073ffffffffffffffffffffffffffffffffffffffff808716835280861660208401525063ffffffff841660408301526080606083015261199d60808301846132e2565b6000825161344d8184602087016132b2565b9190910192915050565b600084516134698184602089016132b2565b60609490941b7fffffffffffffffffffffffffffffffffffffffff0000000000000000000000001691909301908152601481019190915260340192915050565b600073ffffffffffffffffffffffffffffffffffffffff8087168352808616602084015250608060408301526134e260808301856132e2565b905082606083015295945050505050565b73ffffffffffffffffffffffffffffffffffffffff841681528260208201526060604082015260006127bd60608301846132e2565b805182526020810151602083015260408101516040830152606081015160608301526000608082015160a06080850152612f4f60a08501826132e2565b6020815260006115096020830184613528565b60006020828403121561358a57600080fd5b8151801515811461150957600080fd5b838152600060206060818401526135b46060840186613528565b83810360408501526040810185518252828601516040848401528181518084526060850191508583019450600093505b8084101561360457845182529385019360019390930192908501906135e4565b509998505050505050505050565b600083516136248184602088016132b2565b60609390931b7fffffffffffffffffffffffffffffffffffffffff000000000000000000000000169190920190815260140192915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000828210156136cc576136cc61368b565b500390565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b600082198211156137135761371361368b565b500190565b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82141561374a5761374a61368b565b5060010190565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b600060ff83168061379357613793613751565b8060ff84160691505092915050565b600060ff821660ff8416808210156137bc576137bc61368b565b90039392505050565b6000817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff04831182151516156137fd576137fd61368b565b500290565b60006020828403121561381457600080fd5b5051919050565b60008261382a5761382a613751565b50049056fea2646970667358221220c8cd169b919168f911dffe50407de9b3c321b6388069872b5a97be3545f41dca64736f6c63430008090033",
"deployedBytecode": "0x608060405234801561001057600080fd5b506004361061011b5760003560e01c8063715018a6116100b2578063b1b1b20911610081578063c6b94ab011610066578063c6b94ab014610275578063d7fd19dd14610298578063f2fde38b146102ab57600080fd5b8063b1b1b2091461023f578063c4d66de81461026257600080fd5b8063715018a6146101fe57806381ada46c146102065780638456cb59146102195780638da5cb5b1461022157600080fd5b8063461a4478116100ee578063461a4478146101c55780635c975abb146101d85780636e296e45146101e35780636f1c8d47146101eb57600080fd5b80630ecf2eea1461012057806321d800ec14610135578063299ca4781461016d5780633dbb202b146101b2575b600080fd5b61013361012e366004612d2e565b6102be565b005b610158610143366004612d2e565b60ca6020526000908152604090205460ff1681565b60405190151581526020015b60405180910390f35b60005461018d9073ffffffffffffffffffffffffffffffffffffffff1681565b60405173ffffffffffffffffffffffffffffffffffffffff9091168152602001610164565b6101336101c0366004612ea6565b610309565b61018d6101d3366004612f06565b610451565b60655460ff16610158565b61018d6104fe565b6101336101f9366004612f57565b61058d565b610133610774565b610133610214366004612d2e565b610788565b6101336107d0565b60335473ffffffffffffffffffffffffffffffffffffffff1661018d565b61015861024d366004612d2e565b60cb6020526000908152604090205460ff1681565b610133610270366004612fe3565b6107e0565b610158610283366004612d2e565b60c96020526000908152604090205460ff1681565b6101336102a6366004613149565b610ab8565b6101336102b9366004612fe3565b610f3c565b6102c6610fd9565b600081815260c96020526040808220805460ff191660011790555182917ff52508d5339edf0d7e5060a416df98db067af561bdc60872d29c0439eaa13a0291a250565b60006103496040518060400160405280601981526020017f43616e6f6e6963616c5472616e73616374696f6e436861696e00000000000000815250610451565b905060008173ffffffffffffffffffffffffffffffffffffffff1663b8f770056040518163ffffffff1660e01b815260040160206040518083038186803b15801561039357600080fd5b505afa1580156103a7573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906103cb9190613297565b905060006103e28633878564ffffffffff16611040565b90506103f583828663ffffffff166110bb565b8573ffffffffffffffffffffffffffffffffffffffff167fcb0f7ffd78f9aee47a248fae8db181db6eee833039123e026dcbff529522e52a33878588604051610441949392919061330e565b60405180910390a2505050505050565b600080546040517fbf40fac100000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff9091169063bf40fac1906104a8908590600401613361565b60206040518083038186803b1580156104c057600080fd5b505afa1580156104d4573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906104f89190613374565b92915050565b60cc5460009073ffffffffffffffffffffffffffffffffffffffff1661dead14156105705760405162461bcd60e51b815260206004820152601f60248201527f78446f6d61696e4d65737361676553656e646572206973206e6f74207365740060448201526064015b60405180910390fd5b5060cc5473ffffffffffffffffffffffffffffffffffffffff1690565b60006105cd6040518060400160405280601981526020017f43616e6f6e6963616c5472616e73616374696f6e436861696e00000000000000815250610451565b6040517f2a7f18be0000000000000000000000000000000000000000000000000000000081526004810186905290915060009073ffffffffffffffffffffffffffffffffffffffff831690632a7f18be9060240160606040518083038186803b15801561063957600080fd5b505afa15801561064d573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906106719190613391565b9050600061068189898989611040565b90506000731111000000000000000000000000000000001111300173420000000000000000000000000000000000000787846040516020016106c694939291906133f6565b604051602081830303815290604052805190602001209050826000015181146107575760405162461bcd60e51b815260206004820152602760248201527f50726f7669646564206d65737361676520686173206e6f74206265656e20656e60448201527f7175657565642e000000000000000000000000000000000000000000000000006064820152608401610567565b61076884838763ffffffff166110bb565b50505050505050505050565b61077c610fd9565b610786600061115c565b565b610790610fd9565b600081815260c96020526040808220805460ff191690555182917f52c8a2680a9f4cc0ad0bf88f32096eadbebf0646ea611d93a0ce6a29a024040591a250565b6107d8610fd9565b6107866111d3565b6000547501000000000000000000000000000000000000000000900460ff161580801561082b575060005460017401000000000000000000000000000000000000000090910460ff16105b8061085d5750303b15801561085d575060005474010000000000000000000000000000000000000000900460ff166001145b6108cf5760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201527f647920696e697469616c697a65640000000000000000000000000000000000006064820152608401610567565b600080547fffffffffffffffffffffff00ffffffffffffffffffffffffffffffffffffffff1674010000000000000000000000000000000000000000179055801561095557600080547fffffffffffffffffffff00ffffffffffffffffffffffffffffffffffffffffff1675010000000000000000000000000000000000000000001790555b60005473ffffffffffffffffffffffffffffffffffffffff16156109e15760405162461bcd60e51b815260206004820152602a60248201527f4c3143726f7373446f6d61696e4d657373656e67657220616c7265616479206960448201527f6e7469616c697a65642e000000000000000000000000000000000000000000006064820152608401610567565b6000805473ffffffffffffffffffffffffffffffffffffffff84167fffffffffffffffffffffffff00000000000000000000000000000000000000009182161790915560cc805490911661dead179055610a3961123a565b610a416112cb565b610a49611365565b610a51611402565b8015610ab457600080547fffffffffffffffffffff00ffffffffffffffffffffffffffffffffffffffffff169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b5050565b60026097541415610b0b5760405162461bcd60e51b815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c006044820152606401610567565b6002609755610b1861149a565b6000610b2686868686611040565b9050610b3281836114ed565b1515600114610ba95760405162461bcd60e51b815260206004820152602760248201527f50726f7669646564206d65737361676520636f756c64206e6f7420626520766560448201527f7269666965642e000000000000000000000000000000000000000000000000006064820152608401610567565b8051602080830191909120600081815260cb90925260409091205460ff1615610c3a5760405162461bcd60e51b815260206004820152602b60248201527f50726f7669646564206d6573736167652068617320616c72656164792062656560448201527f6e2072656365697665642e0000000000000000000000000000000000000000006064820152608401610567565b600081815260c9602052604090205460ff1615610cbf5760405162461bcd60e51b815260206004820152602260248201527f50726f7669646564206d65737361676520686173206265656e20626c6f636b6560448201527f642e0000000000000000000000000000000000000000000000000000000000006064820152608401610567565b610cfd6040518060400160405280601981526020017f43616e6f6e6963616c5472616e73616374696f6e436861696e00000000000000815250610451565b73ffffffffffffffffffffffffffffffffffffffff168773ffffffffffffffffffffffffffffffffffffffff161415610d9e5760405162461bcd60e51b815260206004820152603360248201527f43616e6e6f742073656e64204c322d3e4c31206d6573736167657320746f204c60448201527f312073797374656d20636f6e7472616374732e000000000000000000000000006064820152608401610567565b60cc80547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff88811691909117909155604051600091891690610df790889061343b565b6000604051808303816000865af19150503d8060008114610e34576040519150601f19603f3d011682016040523d82523d6000602084013e610e39565b606091505b505060cc80547fffffffffffffffffffffffff00000000000000000000000000000000000000001661dead179055905080151560011415610eb957600082815260cb6020526040808220805460ff191660011790555183917f4641df4a962071e12719d8c8c8e5ac7fc4d97b927346a3d7a335b1f7517e133c91a2610ee5565b60405182907f99d0e048484baa1b1540b1367cb128acd7ab2946d1ed91ec10e3c85e4bf51b8f90600090a25b6000833343604051602001610efc93929190613457565b60408051601f198184030181529181528151602092830120600090815260ca9092529020805460ff19166001908117909155609755505050505050505050565b610f44610fd9565b73ffffffffffffffffffffffffffffffffffffffff8116610fcd5760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201527f64647265737300000000000000000000000000000000000000000000000000006064820152608401610567565b610fd68161115c565b50565b60335473ffffffffffffffffffffffffffffffffffffffff1633146107865760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610567565b60608484848460405160240161105994939291906134a9565b60408051601f198184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fcbd4ece9000000000000000000000000000000000000000000000000000000001790529050949350505050565b6040517f6fee07e000000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff841690636fee07e0906111259073420000000000000000000000000000000000000790859087906004016134f3565b600060405180830381600087803b15801561113f57600080fd5b505af1158015611153573d6000803e3d6000fd5b50505050505050565b6033805473ffffffffffffffffffffffffffffffffffffffff8381167fffffffffffffffffffffffff0000000000000000000000000000000000000000831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b6111db61149a565b6065805460ff191660011790557f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a2586112103390565b60405173ffffffffffffffffffffffffffffffffffffffff909116815260200160405180910390a1565b6000547501000000000000000000000000000000000000000000900460ff166107865760405162461bcd60e51b815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201527f6e697469616c697a6