Commit 75089d0a authored by smartcontracts's avatar smartcontracts Committed by GitHub

feat(ctb): clean up initialization logic (#2942)

* feat(ctb): clean up initialization logic

Cleans and standardizes the initialization logic across all contracts.
Importantly, removes reinitialization.

* contracts-bedrock: clean up hh genesis task
Co-authored-by: default avatarMark Tyneway <mark.tyneway@gmail.com>
parent 7d9820b6
---
'@eth-optimism/contracts-bedrock': patch
---
Cleans up initialization logic everywhere
...@@ -36,8 +36,8 @@ type L2OutputOracleOutputProposal struct { ...@@ -36,8 +36,8 @@ type L2OutputOracleOutputProposal struct {
// L2OutputOracleMetaData contains all meta data concerning the L2OutputOracle contract. // L2OutputOracleMetaData contains all meta data concerning the L2OutputOracle contract.
var L2OutputOracleMetaData = &bind.MetaData{ var L2OutputOracleMetaData = &bind.MetaData{
ABI: "[{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_submissionInterval\",\"type\":\"uint256\"},{\"internalType\":\"bytes32\",\"name\":\"_genesisL2Output\",\"type\":\"bytes32\"},{\"internalType\":\"uint256\",\"name\":\"_historicalTotalBlocks\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"_startingBlockNumber\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"_startingTimestamp\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"_l2BlockTime\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"_sequencer\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"_owner\",\"type\":\"address\"}],\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint8\",\"name\":\"version\",\"type\":\"uint8\"}],\"name\":\"Initialized\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"l2Output\",\"type\":\"bytes32\"},{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"l1Timestamp\",\"type\":\"uint256\"},{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"l2BlockNumber\",\"type\":\"uint256\"}],\"name\":\"L2OutputAppended\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"l2Output\",\"type\":\"bytes32\"},{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"l1Timestamp\",\"type\":\"uint256\"},{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"l2BlockNumber\",\"type\":\"uint256\"}],\"name\":\"L2OutputDeleted\",\"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\":true,\"internalType\":\"address\",\"name\":\"previousSequencer\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"newSequencer\",\"type\":\"address\"}],\"name\":\"SequencerChanged\",\"type\":\"event\"},{\"inputs\":[],\"name\":\"HISTORICAL_TOTAL_BLOCKS\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"L2_BLOCK_TIME\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"STARTING_BLOCK_NUMBER\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"STARTING_TIMESTAMP\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"SUBMISSION_INTERVAL\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"VERSION\",\"outputs\":[{\"internalType\":\"uint8\",\"name\":\"\",\"type\":\"uint8\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"_l2Output\",\"type\":\"bytes32\"},{\"internalType\":\"uint256\",\"name\":\"_l2BlockNumber\",\"type\":\"uint256\"},{\"internalType\":\"bytes32\",\"name\":\"_l1Blockhash\",\"type\":\"bytes32\"},{\"internalType\":\"uint256\",\"name\":\"_l1BlockNumber\",\"type\":\"uint256\"}],\"name\":\"appendL2Output\",\"outputs\":[],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_newSequencer\",\"type\":\"address\"}],\"name\":\"changeSequencer\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_l2BlockNumber\",\"type\":\"uint256\"}],\"name\":\"computeL2Timestamp\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"bytes32\",\"name\":\"outputRoot\",\"type\":\"bytes32\"},{\"internalType\":\"uint256\",\"name\":\"timestamp\",\"type\":\"uint256\"}],\"internalType\":\"structL2OutputOracle.OutputProposal\",\"name\":\"_proposal\",\"type\":\"tuple\"}],\"name\":\"deleteL2Output\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_l2BlockNumber\",\"type\":\"uint256\"}],\"name\":\"getL2Output\",\"outputs\":[{\"components\":[{\"internalType\":\"bytes32\",\"name\":\"outputRoot\",\"type\":\"bytes32\"},{\"internalType\":\"uint256\",\"name\":\"timestamp\",\"type\":\"uint256\"}],\"internalType\":\"structL2OutputOracle.OutputProposal\",\"name\":\"\",\"type\":\"tuple\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"_genesisL2Output\",\"type\":\"bytes32\"},{\"internalType\":\"uint256\",\"name\":\"_startingBlockNumber\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"_sequencer\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"_owner\",\"type\":\"address\"}],\"name\":\"initialize\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"latestBlockNumber\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"nextBlockNumber\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"owner\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"renounceOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"sequencer\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"newOwner\",\"type\":\"address\"}],\"name\":\"transferOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"}]", ABI: "[{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_submissionInterval\",\"type\":\"uint256\"},{\"internalType\":\"bytes32\",\"name\":\"_genesisL2Output\",\"type\":\"bytes32\"},{\"internalType\":\"uint256\",\"name\":\"_historicalTotalBlocks\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"_startingBlockNumber\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"_startingTimestamp\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"_l2BlockTime\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"_sequencer\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"_owner\",\"type\":\"address\"}],\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint8\",\"name\":\"version\",\"type\":\"uint8\"}],\"name\":\"Initialized\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"l2Output\",\"type\":\"bytes32\"},{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"l1Timestamp\",\"type\":\"uint256\"},{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"l2BlockNumber\",\"type\":\"uint256\"}],\"name\":\"L2OutputAppended\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"l2Output\",\"type\":\"bytes32\"},{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"l1Timestamp\",\"type\":\"uint256\"},{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"l2BlockNumber\",\"type\":\"uint256\"}],\"name\":\"L2OutputDeleted\",\"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\":true,\"internalType\":\"address\",\"name\":\"previousSequencer\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"newSequencer\",\"type\":\"address\"}],\"name\":\"SequencerChanged\",\"type\":\"event\"},{\"inputs\":[],\"name\":\"HISTORICAL_TOTAL_BLOCKS\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"L2_BLOCK_TIME\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"STARTING_BLOCK_NUMBER\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"STARTING_TIMESTAMP\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"SUBMISSION_INTERVAL\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"_l2Output\",\"type\":\"bytes32\"},{\"internalType\":\"uint256\",\"name\":\"_l2BlockNumber\",\"type\":\"uint256\"},{\"internalType\":\"bytes32\",\"name\":\"_l1Blockhash\",\"type\":\"bytes32\"},{\"internalType\":\"uint256\",\"name\":\"_l1BlockNumber\",\"type\":\"uint256\"}],\"name\":\"appendL2Output\",\"outputs\":[],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_newSequencer\",\"type\":\"address\"}],\"name\":\"changeSequencer\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_l2BlockNumber\",\"type\":\"uint256\"}],\"name\":\"computeL2Timestamp\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"bytes32\",\"name\":\"outputRoot\",\"type\":\"bytes32\"},{\"internalType\":\"uint256\",\"name\":\"timestamp\",\"type\":\"uint256\"}],\"internalType\":\"structL2OutputOracle.OutputProposal\",\"name\":\"_proposal\",\"type\":\"tuple\"}],\"name\":\"deleteL2Output\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_l2BlockNumber\",\"type\":\"uint256\"}],\"name\":\"getL2Output\",\"outputs\":[{\"components\":[{\"internalType\":\"bytes32\",\"name\":\"outputRoot\",\"type\":\"bytes32\"},{\"internalType\":\"uint256\",\"name\":\"timestamp\",\"type\":\"uint256\"}],\"internalType\":\"structL2OutputOracle.OutputProposal\",\"name\":\"\",\"type\":\"tuple\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"_genesisL2Output\",\"type\":\"bytes32\"},{\"internalType\":\"uint256\",\"name\":\"_startingBlockNumber\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"_sequencer\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"_owner\",\"type\":\"address\"}],\"name\":\"initialize\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"latestBlockNumber\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"nextBlockNumber\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"owner\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"renounceOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"sequencer\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"newOwner\",\"type\":\"address\"}],\"name\":\"transferOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"}]",
Bin: "0x6101206040523480156200001257600080fd5b5060405162001d7f38038062001d7f8339810160408190526200003591620005c8565b428310620000bc5760405162461bcd60e51b815260206004820152604360248201527f4f7574707574204f7261636c653a20496e697469616c204c3220626c6f636b2060448201527f74696d65206d757374206265206c657373207468616e2063757272656e742074606482015262696d6560e81b608482015260a4015b60405180910390fd5b608088905260a086905260c085905260e0849052610100839052620000e487868484620000f2565b50505050505050506200063a565b600160006200010182620001bf565b905080156200011a576000805461ff0019166101001790555b6040805180820182528781524260208083019182526000898152606790915292909220905181559051600190910155606685905562000158620002d2565b62000163846200033a565b6200016e83620004e8565b8015620001b7576000805461ff001916905560405160ff831681527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b505050505050565b60008054610100900460ff161562000254578160ff166001148015620001f85750620001f6306200053a60201b620011491760201c565b155b6200024c5760405162461bcd60e51b815260206004820152602e602482015260008051602062001d3f83398151915260448201526d191e481a5b9a5d1a585b1a5e995960921b6064820152608401620000b3565b506000919050565b60005460ff808416911610620002b35760405162461bcd60e51b815260206004820152602e602482015260008051602062001d3f83398151915260448201526d191e481a5b9a5d1a585b1a5e995960921b6064820152608401620000b3565b506000805460ff191660ff92909216919091179055600190565b919050565b600054610100900460ff166200032e5760405162461bcd60e51b815260206004820152602b602482015260008051602062001d5f83398151915260448201526a6e697469616c697a696e6760a81b6064820152608401620000b3565b6200033862000549565b565b6033546001600160a01b03163314620003965760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401620000b3565b6001600160a01b038116620004065760405162461bcd60e51b815260206004820152602f60248201527f4f75747075744f7261636c653a206e65772073657175656e636572206973207460448201526e6865207a65726f206164647265737360881b6064820152608401620000b3565b6033546001600160a01b03828116911614156200048c5760405162461bcd60e51b815260206004820152603360248201527f4f75747075744f7261636c653a2073657175656e6365722063616e6e6f74206260448201527f652073616d6520617320746865206f776e6572000000000000000000000000006064820152608401620000b3565b6065546040516001600160a01b038084169216907f6ec88bae255aa7e73521c3beb17e9bc7940169e669440c5531733c0d2e91110d90600090a3606580546001600160a01b0319166001600160a01b0392909216919091179055565b603380546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b6001600160a01b03163b151590565b600054610100900460ff16620005a55760405162461bcd60e51b815260206004820152602b602482015260008051602062001d5f83398151915260448201526a6e697469616c697a696e6760a81b6064820152608401620000b3565b6200033833620004e8565b80516001600160a01b0381168114620002cd57600080fd5b600080600080600080600080610100898b031215620005e657600080fd5b885197506020890151965060408901519550606089015194506080890151935060a089015192506200061b60c08a01620005b0565b91506200062b60e08a01620005b0565b90509295985092959890939650565b60805160a05160c05160e05161010051611696620006a96000396000818161013f0152610e640152600081816101a80152610ebd01526000818161022501528181610d8e0152610e8801526000610393015260008181610259015281816106cb0152610fe801526116966000f3fe6080604052600436106101285760003560e01c8063715018a6116100a5578063d1de856c11610074578063dcec334811610059578063dcec3348146103f5578063f2fde38b1461040a578063ffa1ad741461042a57600080fd5b8063d1de856c146103b5578063d20b1a51146103d557600080fd5b8063715018a6146102cd5780638da5cb5b146102e2578063a25ae5571461030d578063a4771aad1461038157600080fd5b80632af8ded8116100fc5780634ab65d73116100e15780634ab65d7314610213578063529933df146102475780635c1bba381461027b57600080fd5b80632af8ded8146101dd5780634599c788146101fd57600080fd5b80622134cc1461012d578063093b3d901461017457806320e9fcd41461019657806325188104146101ca575b600080fd5b34801561013957600080fd5b506101617f000000000000000000000000000000000000000000000000000000000000000081565b6040519081526020015b60405180910390f35b34801561018057600080fd5b5061019461018f3660046114a1565b610451565b005b3480156101a257600080fd5b506101617f000000000000000000000000000000000000000000000000000000000000000081565b6101946101d8366004611517565b6106f7565b3480156101e957600080fd5b506101946101f836600461156d565b610aa0565b34801561020957600080fd5b5061016160665481565b34801561021f57600080fd5b506101617f000000000000000000000000000000000000000000000000000000000000000081565b34801561025357600080fd5b506101617f000000000000000000000000000000000000000000000000000000000000000081565b34801561028757600080fd5b506065546102a89073ffffffffffffffffffffffffffffffffffffffff1681565b60405173ffffffffffffffffffffffffffffffffffffffff909116815260200161016b565b3480156102d957600080fd5b50610194610cfd565b3480156102ee57600080fd5b5060335473ffffffffffffffffffffffffffffffffffffffff166102a8565b34801561031957600080fd5b5061036661032836600461158f565b604080518082019091526000808252602082015250600090815260676020908152604091829020825180840190935280548352600101549082015290565b6040805182518152602092830151928101929092520161016b565b34801561038d57600080fd5b506101617f000000000000000000000000000000000000000000000000000000000000000081565b3480156103c157600080fd5b506101616103d036600461158f565b610d8a565b3480156103e157600080fd5b506101946103f03660046115a8565b610ee7565b34801561040157600080fd5b50610161610fe4565b34801561041657600080fd5b5061019461042536600461156d565b611019565b34801561043657600080fd5b5061043f600181565b60405160ff909116815260200161016b565b60335473ffffffffffffffffffffffffffffffffffffffff1633146104d7576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064015b60405180910390fd5b60665460009081526067602090815260409182902082518084019093528054808452600190910154918301919091528251146105bb576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152605260248201527f4f75747075744f7261636c653a20546865206f757470757420726f6f7420746f60448201527f2064656c65746520646f6573206e6f74206d6174636820746865206c6174657360648201527f74206f75747075742070726f706f73616c2e0000000000000000000000000000608482015260a4016104ce565b8060200151826020015114610678576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152605060248201527f4f75747075744f7261636c653a205468652074696d657374616d7020746f206460448201527f656c65746520646f6573206e6f74206d6174636820746865206c61746573742060648201527f6f75747075742070726f706f73616c2e00000000000000000000000000000000608482015260a4016104ce565b606654602082015182516040517f7320566fd5256cf8923648a5d9f560f1e92f1435a1bb32ddd1fe107f224ad35990600090a460668054600090815260676020526040812081815560010155546106f0907f00000000000000000000000000000000000000000000000000000000000000009061161d565b6066555050565b60655473ffffffffffffffffffffffffffffffffffffffff16331461079e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602960248201527f4f75747075744f7261636c653a2063616c6c6572206973206e6f74207468652060448201527f73657175656e636572000000000000000000000000000000000000000000000060648201526084016104ce565b6107a6610fe4565b831461085a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604760248201527f4f75747075744f7261636c653a20426c6f636b206e756d626572206d7573742060448201527f626520657175616c20746f206e65787420657870656374656420626c6f636b2060648201527f6e756d6265722e00000000000000000000000000000000000000000000000000608482015260a4016104ce565b4261086484610d8a565b106108f1576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603060248201527f4f75747075744f7261636c653a2043616e6e6f7420617070656e64204c32206f60448201527f757470757420696e206675747572652e0000000000000000000000000000000060648201526084016104ce565b8361097e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602c60248201527f4f75747075744f7261636c653a2043616e6e6f74207375626d697420656d707460448201527f79204c32206f75747075742e000000000000000000000000000000000000000060648201526084016104ce565b8115610a3a5781814014610a3a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604760248201527f4f75747075744f7261636c653a20426c6f636b6861736820646f6573206e6f7460448201527f206d61746368207468652068617368206174207468652065787065637465642060648201527f6865696768742e00000000000000000000000000000000000000000000000000608482015260a4016104ce565b6040805180820182528581524260208083018281526000888152606790925284822093518455516001909301929092556066869055915185929187917fd6703ded1701060d9ae1793db76d594790a4e775781225f79b5aa8a77987c0809190a450505050565b60335473ffffffffffffffffffffffffffffffffffffffff163314610b21576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064016104ce565b73ffffffffffffffffffffffffffffffffffffffff8116610bc4576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602f60248201527f4f75747075744f7261636c653a206e65772073657175656e636572206973207460448201527f6865207a65726f2061646472657373000000000000000000000000000000000060648201526084016104ce565b60335473ffffffffffffffffffffffffffffffffffffffff82811691161415610c6f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603360248201527f4f75747075744f7261636c653a2073657175656e6365722063616e6e6f74206260448201527f652073616d6520617320746865206f776e65720000000000000000000000000060648201526084016104ce565b60655460405173ffffffffffffffffffffffffffffffffffffffff8084169216907f6ec88bae255aa7e73521c3beb17e9bc7940169e669440c5531733c0d2e91110d90600090a3606580547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff92909216919091179055565b60335473ffffffffffffffffffffffffffffffffffffffff163314610d7e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064016104ce565b610d886000611165565b565b60007f0000000000000000000000000000000000000000000000000000000000000000821015610e62576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152605660248201527f4f75747075744f7261636c653a20426c6f636b206e756d626572206d7573742060448201527f62652067726561746572207468616e206f7220657175616c20746f207468652060648201527f7374617274696e6720626c6f636b206e756d6265722e00000000000000000000608482015260a4016104ce565b7f0000000000000000000000000000000000000000000000000000000000000000610ead7f00000000000000000000000000000000000000000000000000000000000000008461161d565b610eb79190611634565b610ee1907f0000000000000000000000000000000000000000000000000000000000000000611671565b92915050565b60016000610ef4826111dc565b90508015610f2957600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff166101001790555b60408051808201825287815242602080830191825260008981526067909152929092209051815590516001909101556066859055610f65611367565b610f6e84610aa0565b610f7783611165565b8015610fdc57600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff16905560405160ff831681527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b505050505050565b60007f00000000000000000000000000000000000000000000000000000000000000006066546110149190611671565b905090565b60335473ffffffffffffffffffffffffffffffffffffffff16331461109a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064016104ce565b73ffffffffffffffffffffffffffffffffffffffff811661113d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201527f646472657373000000000000000000000000000000000000000000000000000060648201526084016104ce565b61114681611165565b50565b73ffffffffffffffffffffffffffffffffffffffff163b151590565b6033805473ffffffffffffffffffffffffffffffffffffffff8381167fffffffffffffffffffffffff0000000000000000000000000000000000000000831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b60008054610100900460ff1615611293578160ff1660011480156111ff5750303b155b61128b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201527f647920696e697469616c697a656400000000000000000000000000000000000060648201526084016104ce565b506000919050565b60005460ff80841691161061132a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201527f647920696e697469616c697a656400000000000000000000000000000000000060648201526084016104ce565b50600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660ff92909216919091179055600190565b919050565b600054610100900460ff166113fe576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201527f6e697469616c697a696e6700000000000000000000000000000000000000000060648201526084016104ce565b610d88600054610100900460ff16611498576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201527f6e697469616c697a696e6700000000000000000000000000000000000000000060648201526084016104ce565b610d8833611165565b6000604082840312156114b357600080fd5b6040516040810181811067ffffffffffffffff821117156114fd577f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b604052823581526020928301359281019290925250919050565b6000806000806080858703121561152d57600080fd5b5050823594602084013594506040840135936060013592509050565b803573ffffffffffffffffffffffffffffffffffffffff8116811461136257600080fd5b60006020828403121561157f57600080fd5b61158882611549565b9392505050565b6000602082840312156115a157600080fd5b5035919050565b600080600080608085870312156115be57600080fd5b84359350602085013592506115d560408601611549565b91506115e360608601611549565b905092959194509250565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60008282101561162f5761162f6115ee565b500390565b6000817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff048311821515161561166c5761166c6115ee565b500290565b60008219821115611684576116846115ee565b50019056fea164736f6c634300080a000a496e697469616c697a61626c653a20636f6e747261637420697320616c726561496e697469616c697a61626c653a20636f6e7472616374206973206e6f742069", Bin: "0x6101206040523480156200001257600080fd5b5060405162001d3538038062001d358339810160408190526200003591620005c4565b428310620000bc5760405162461bcd60e51b815260206004820152604360248201527f4f7574707574204f7261636c653a20496e697469616c204c3220626c6f636b2060448201527f74696d65206d757374206265206c657373207468616e2063757272656e742074606482015262696d6560e81b608482015260a4015b60405180910390fd5b608088905260a086905260c085905260e0849052610100839052620000e487868484620000f2565b505050505050505062000636565b6000620001006001620001bb565b9050801562000119576000805461ff0019166101001790555b6040805180820182528681524260208083019182526000888152606790915292909220905181559051600190910155606684905562000157620002ce565b620001628362000336565b6200016d82620004e4565b8015620001b4576000805461ff0019169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b5050505050565b60008054610100900460ff161562000250578160ff166001148015620001f45750620001f2306200053660201b620011031760201c565b155b620002485760405162461bcd60e51b815260206004820152602e602482015260008051602062001cf583398151915260448201526d191e481a5b9a5d1a585b1a5e995960921b6064820152608401620000b3565b506000919050565b60005460ff808416911610620002af5760405162461bcd60e51b815260206004820152602e602482015260008051602062001cf583398151915260448201526d191e481a5b9a5d1a585b1a5e995960921b6064820152608401620000b3565b506000805460ff191660ff92909216919091179055600190565b919050565b600054610100900460ff166200032a5760405162461bcd60e51b815260206004820152602b602482015260008051602062001d1583398151915260448201526a6e697469616c697a696e6760a81b6064820152608401620000b3565b6200033462000545565b565b6033546001600160a01b03163314620003925760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401620000b3565b6001600160a01b038116620004025760405162461bcd60e51b815260206004820152602f60248201527f4f75747075744f7261636c653a206e65772073657175656e636572206973207460448201526e6865207a65726f206164647265737360881b6064820152608401620000b3565b6033546001600160a01b0382811691161415620004885760405162461bcd60e51b815260206004820152603360248201527f4f75747075744f7261636c653a2073657175656e6365722063616e6e6f74206260448201527f652073616d6520617320746865206f776e6572000000000000000000000000006064820152608401620000b3565b6065546040516001600160a01b038084169216907f6ec88bae255aa7e73521c3beb17e9bc7940169e669440c5531733c0d2e91110d90600090a3606580546001600160a01b0319166001600160a01b0392909216919091179055565b603380546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b6001600160a01b03163b151590565b600054610100900460ff16620005a15760405162461bcd60e51b815260206004820152602b602482015260008051602062001d1583398151915260448201526a6e697469616c697a696e6760a81b6064820152608401620000b3565b6200033433620004e4565b80516001600160a01b0381168114620002c957600080fd5b600080600080600080600080610100898b031215620005e257600080fd5b885197506020890151965060408901519550606089015194506080890151935060a089015192506200061760c08a01620005ac565b91506200062760e08a01620005ac565b90509295985092959890939650565b60805160a05160c05160e05161010051611650620006a5600039600081816101240152610e2201526000818161018d0152610e7b01526000818161020a01528181610d4c0152610e460152600061037801526000818161023e015281816106890152610fa201526116506000f3fe60806040526004361061010d5760003560e01c80635c1bba38116100a5578063a4771aad11610074578063d20b1a5111610059578063d20b1a51146103ba578063dcec3348146103da578063f2fde38b146103ef57600080fd5b8063a4771aad14610366578063d1de856c1461039a57600080fd5b80635c1bba3814610260578063715018a6146102b25780638da5cb5b146102c7578063a25ae557146102f257600080fd5b80632af8ded8116100e15780632af8ded8146101c25780634599c788146101e25780634ab65d73146101f8578063529933df1461022c57600080fd5b80622134cc14610112578063093b3d901461015957806320e9fcd41461017b57806325188104146101af575b600080fd5b34801561011e57600080fd5b506101467f000000000000000000000000000000000000000000000000000000000000000081565b6040519081526020015b60405180910390f35b34801561016557600080fd5b5061017961017436600461145b565b61040f565b005b34801561018757600080fd5b506101467f000000000000000000000000000000000000000000000000000000000000000081565b6101796101bd3660046114d1565b6106b5565b3480156101ce57600080fd5b506101796101dd366004611527565b610a5e565b3480156101ee57600080fd5b5061014660665481565b34801561020457600080fd5b506101467f000000000000000000000000000000000000000000000000000000000000000081565b34801561023857600080fd5b506101467f000000000000000000000000000000000000000000000000000000000000000081565b34801561026c57600080fd5b5060655461028d9073ffffffffffffffffffffffffffffffffffffffff1681565b60405173ffffffffffffffffffffffffffffffffffffffff9091168152602001610150565b3480156102be57600080fd5b50610179610cbb565b3480156102d357600080fd5b5060335473ffffffffffffffffffffffffffffffffffffffff1661028d565b3480156102fe57600080fd5b5061034b61030d366004611549565b604080518082019091526000808252602082015250600090815260676020908152604091829020825180840190935280548352600101549082015290565b60408051825181526020928301519281019290925201610150565b34801561037257600080fd5b506101467f000000000000000000000000000000000000000000000000000000000000000081565b3480156103a657600080fd5b506101466103b5366004611549565b610d48565b3480156103c657600080fd5b506101796103d5366004611562565b610ea5565b3480156103e657600080fd5b50610146610f9e565b3480156103fb57600080fd5b5061017961040a366004611527565b610fd3565b60335473ffffffffffffffffffffffffffffffffffffffff163314610495576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064015b60405180910390fd5b6066546000908152606760209081526040918290208251808401909352805480845260019091015491830191909152825114610579576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152605260248201527f4f75747075744f7261636c653a20546865206f757470757420726f6f7420746f60448201527f2064656c65746520646f6573206e6f74206d6174636820746865206c6174657360648201527f74206f75747075742070726f706f73616c2e0000000000000000000000000000608482015260a40161048c565b8060200151826020015114610636576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152605060248201527f4f75747075744f7261636c653a205468652074696d657374616d7020746f206460448201527f656c65746520646f6573206e6f74206d6174636820746865206c61746573742060648201527f6f75747075742070726f706f73616c2e00000000000000000000000000000000608482015260a40161048c565b606654602082015182516040517f7320566fd5256cf8923648a5d9f560f1e92f1435a1bb32ddd1fe107f224ad35990600090a460668054600090815260676020526040812081815560010155546106ae907f0000000000000000000000000000000000000000000000000000000000000000906115d7565b6066555050565b60655473ffffffffffffffffffffffffffffffffffffffff16331461075c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602960248201527f4f75747075744f7261636c653a2063616c6c6572206973206e6f74207468652060448201527f73657175656e6365720000000000000000000000000000000000000000000000606482015260840161048c565b610764610f9e565b8314610818576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604760248201527f4f75747075744f7261636c653a20426c6f636b206e756d626572206d7573742060448201527f626520657175616c20746f206e65787420657870656374656420626c6f636b2060648201527f6e756d6265722e00000000000000000000000000000000000000000000000000608482015260a40161048c565b4261082284610d48565b106108af576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603060248201527f4f75747075744f7261636c653a2043616e6e6f7420617070656e64204c32206f60448201527f757470757420696e206675747572652e00000000000000000000000000000000606482015260840161048c565b8361093c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602c60248201527f4f75747075744f7261636c653a2043616e6e6f74207375626d697420656d707460448201527f79204c32206f75747075742e0000000000000000000000000000000000000000606482015260840161048c565b81156109f857818140146109f8576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604760248201527f4f75747075744f7261636c653a20426c6f636b6861736820646f6573206e6f7460448201527f206d61746368207468652068617368206174207468652065787065637465642060648201527f6865696768742e00000000000000000000000000000000000000000000000000608482015260a40161048c565b6040805180820182528581524260208083018281526000888152606790925284822093518455516001909301929092556066869055915185929187917fd6703ded1701060d9ae1793db76d594790a4e775781225f79b5aa8a77987c0809190a450505050565b60335473ffffffffffffffffffffffffffffffffffffffff163314610adf576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015260640161048c565b73ffffffffffffffffffffffffffffffffffffffff8116610b82576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602f60248201527f4f75747075744f7261636c653a206e65772073657175656e636572206973207460448201527f6865207a65726f20616464726573730000000000000000000000000000000000606482015260840161048c565b60335473ffffffffffffffffffffffffffffffffffffffff82811691161415610c2d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603360248201527f4f75747075744f7261636c653a2073657175656e6365722063616e6e6f74206260448201527f652073616d6520617320746865206f776e657200000000000000000000000000606482015260840161048c565b60655460405173ffffffffffffffffffffffffffffffffffffffff8084169216907f6ec88bae255aa7e73521c3beb17e9bc7940169e669440c5531733c0d2e91110d90600090a3606580547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff92909216919091179055565b60335473ffffffffffffffffffffffffffffffffffffffff163314610d3c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015260640161048c565b610d46600061111f565b565b60007f0000000000000000000000000000000000000000000000000000000000000000821015610e20576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152605660248201527f4f75747075744f7261636c653a20426c6f636b206e756d626572206d7573742060448201527f62652067726561746572207468616e206f7220657175616c20746f207468652060648201527f7374617274696e6720626c6f636b206e756d6265722e00000000000000000000608482015260a40161048c565b7f0000000000000000000000000000000000000000000000000000000000000000610e6b7f0000000000000000000000000000000000000000000000000000000000000000846115d7565b610e7591906115ee565b610e9f907f000000000000000000000000000000000000000000000000000000000000000061162b565b92915050565b6000610eb16001611196565b90508015610ee657600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff166101001790555b60408051808201825286815242602080830191825260008881526067909152929092209051815590516001909101556066849055610f22611321565b610f2b83610a5e565b610f348261111f565b8015610f9757600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b5050505050565b60007f0000000000000000000000000000000000000000000000000000000000000000606654610fce919061162b565b905090565b60335473ffffffffffffffffffffffffffffffffffffffff163314611054576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015260640161048c565b73ffffffffffffffffffffffffffffffffffffffff81166110f7576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201527f6464726573730000000000000000000000000000000000000000000000000000606482015260840161048c565b6111008161111f565b50565b73ffffffffffffffffffffffffffffffffffffffff163b151590565b6033805473ffffffffffffffffffffffffffffffffffffffff8381167fffffffffffffffffffffffff0000000000000000000000000000000000000000831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b60008054610100900460ff161561124d578160ff1660011480156111b95750303b155b611245576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201527f647920696e697469616c697a6564000000000000000000000000000000000000606482015260840161048c565b506000919050565b60005460ff8084169116106112e4576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201527f647920696e697469616c697a6564000000000000000000000000000000000000606482015260840161048c565b50600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660ff92909216919091179055600190565b919050565b600054610100900460ff166113b8576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201527f6e697469616c697a696e67000000000000000000000000000000000000000000606482015260840161048c565b610d46600054610100900460ff16611452576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201527f6e697469616c697a696e67000000000000000000000000000000000000000000606482015260840161048c565b610d463361111f565b60006040828403121561146d57600080fd5b6040516040810181811067ffffffffffffffff821117156114b7577f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b604052823581526020928301359281019290925250919050565b600080600080608085870312156114e757600080fd5b5050823594602084013594506040840135936060013592509050565b803573ffffffffffffffffffffffffffffffffffffffff8116811461131c57600080fd5b60006020828403121561153957600080fd5b61154282611503565b9392505050565b60006020828403121561155b57600080fd5b5035919050565b6000806000806080858703121561157857600080fd5b843593506020850135925061158f60408601611503565b915061159d60608601611503565b905092959194509250565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000828210156115e9576115e96115a8565b500390565b6000817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0483118215151615611626576116266115a8565b500290565b6000821982111561163e5761163e6115a8565b50019056fea164736f6c634300080a000a496e697469616c697a61626c653a20636f6e747261637420697320616c726561496e697469616c697a61626c653a20636f6e7472616374206973206e6f742069",
} }
// L2OutputOracleABI is the input ABI used to generate the binding from. // L2OutputOracleABI is the input ABI used to generate the binding from.
...@@ -362,37 +362,6 @@ func (_L2OutputOracle *L2OutputOracleCallerSession) SUBMISSIONINTERVAL() (*big.I ...@@ -362,37 +362,6 @@ func (_L2OutputOracle *L2OutputOracleCallerSession) SUBMISSIONINTERVAL() (*big.I
return _L2OutputOracle.Contract.SUBMISSIONINTERVAL(&_L2OutputOracle.CallOpts) return _L2OutputOracle.Contract.SUBMISSIONINTERVAL(&_L2OutputOracle.CallOpts)
} }
// VERSION is a free data retrieval call binding the contract method 0xffa1ad74.
//
// Solidity: function VERSION() view returns(uint8)
func (_L2OutputOracle *L2OutputOracleCaller) VERSION(opts *bind.CallOpts) (uint8, error) {
var out []interface{}
err := _L2OutputOracle.contract.Call(opts, &out, "VERSION")
if err != nil {
return *new(uint8), err
}
out0 := *abi.ConvertType(out[0], new(uint8)).(*uint8)
return out0, err
}
// VERSION is a free data retrieval call binding the contract method 0xffa1ad74.
//
// Solidity: function VERSION() view returns(uint8)
func (_L2OutputOracle *L2OutputOracleSession) VERSION() (uint8, error) {
return _L2OutputOracle.Contract.VERSION(&_L2OutputOracle.CallOpts)
}
// VERSION is a free data retrieval call binding the contract method 0xffa1ad74.
//
// Solidity: function VERSION() view returns(uint8)
func (_L2OutputOracle *L2OutputOracleCallerSession) VERSION() (uint8, error) {
return _L2OutputOracle.Contract.VERSION(&_L2OutputOracle.CallOpts)
}
// ComputeL2Timestamp is a free data retrieval call binding the contract method 0xd1de856c. // ComputeL2Timestamp is a free data retrieval call binding the contract method 0xd1de856c.
// //
// Solidity: function computeL2Timestamp(uint256 _l2BlockNumber) view returns(uint256) // Solidity: function computeL2Timestamp(uint256 _l2BlockNumber) view returns(uint256)
......
...@@ -38,8 +38,8 @@ type WithdrawalVerifierOutputRootProof struct { ...@@ -38,8 +38,8 @@ type WithdrawalVerifierOutputRootProof struct {
// OptimismPortalMetaData contains all meta data concerning the OptimismPortal contract. // OptimismPortalMetaData contains all meta data concerning the OptimismPortal contract.
var OptimismPortalMetaData = &bind.MetaData{ var OptimismPortalMetaData = &bind.MetaData{
ABI: "[{\"inputs\":[{\"internalType\":\"contractL2OutputOracle\",\"name\":\"_l2Oracle\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"_finalizationPeriodSeconds\",\"type\":\"uint256\"}],\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint8\",\"name\":\"version\",\"type\":\"uint8\"}],\"name\":\"Initialized\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"from\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"mint\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint64\",\"name\":\"gasLimit\",\"type\":\"uint64\"},{\"indexed\":false,\"internalType\":\"bool\",\"name\":\"isCreation\",\"type\":\"bool\"},{\"indexed\":false,\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"}],\"name\":\"TransactionDeposited\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"withdrawalHash\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"bool\",\"name\":\"success\",\"type\":\"bool\"}],\"name\":\"WithdrawalFinalized\",\"type\":\"event\"},{\"inputs\":[],\"name\":\"BASE_FEE_MAX_CHANGE_DENOMINATOR\",\"outputs\":[{\"internalType\":\"int256\",\"name\":\"\",\"type\":\"int256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"ELASTICITY_MULTIPLIER\",\"outputs\":[{\"internalType\":\"int256\",\"name\":\"\",\"type\":\"int256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"FINALIZATION_PERIOD_SECONDS\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"INITIAL_BASE_FEE\",\"outputs\":[{\"internalType\":\"uint128\",\"name\":\"\",\"type\":\"uint128\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"L2_ORACLE\",\"outputs\":[{\"internalType\":\"contractL2OutputOracle\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"MAX_RESOURCE_LIMIT\",\"outputs\":[{\"internalType\":\"int256\",\"name\":\"\",\"type\":\"int256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"MINIMUM_BASE_FEE\",\"outputs\":[{\"internalType\":\"int256\",\"name\":\"\",\"type\":\"int256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"TARGET_RESOURCE_LIMIT\",\"outputs\":[{\"internalType\":\"int256\",\"name\":\"\",\"type\":\"int256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"VERSION\",\"outputs\":[{\"internalType\":\"uint8\",\"name\":\"\",\"type\":\"uint8\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_to\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"_value\",\"type\":\"uint256\"},{\"internalType\":\"uint64\",\"name\":\"_gasLimit\",\"type\":\"uint64\"},{\"internalType\":\"bool\",\"name\":\"_isCreation\",\"type\":\"bool\"},{\"internalType\":\"bytes\",\"name\":\"_data\",\"type\":\"bytes\"}],\"name\":\"depositTransaction\",\"outputs\":[],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_nonce\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"_sender\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"_target\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"_value\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"_gasLimit\",\"type\":\"uint256\"},{\"internalType\":\"bytes\",\"name\":\"_data\",\"type\":\"bytes\"},{\"internalType\":\"uint256\",\"name\":\"_l2BlockNumber\",\"type\":\"uint256\"},{\"components\":[{\"internalType\":\"bytes32\",\"name\":\"version\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32\",\"name\":\"stateRoot\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32\",\"name\":\"withdrawerStorageRoot\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32\",\"name\":\"latestBlockhash\",\"type\":\"bytes32\"}],\"internalType\":\"structWithdrawalVerifier.OutputRootProof\",\"name\":\"_outputRootProof\",\"type\":\"tuple\"},{\"internalType\":\"bytes\",\"name\":\"_withdrawalProof\",\"type\":\"bytes\"}],\"name\":\"finalizeWithdrawalTransaction\",\"outputs\":[],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"name\":\"finalizedWithdrawals\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"initialize\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_l2BlockNumber\",\"type\":\"uint256\"}],\"name\":\"isOutputFinalized\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"l2Sender\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"params\",\"outputs\":[{\"internalType\":\"uint128\",\"name\":\"prevBaseFee\",\"type\":\"uint128\"},{\"internalType\":\"uint64\",\"name\":\"prevBoughtGas\",\"type\":\"uint64\"},{\"internalType\":\"uint64\",\"name\":\"prevBlockNum\",\"type\":\"uint64\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"stateMutability\":\"payable\",\"type\":\"receive\"}]", ABI: "[{\"inputs\":[{\"internalType\":\"contractL2OutputOracle\",\"name\":\"_l2Oracle\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"_finalizationPeriodSeconds\",\"type\":\"uint256\"}],\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint8\",\"name\":\"version\",\"type\":\"uint8\"}],\"name\":\"Initialized\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"from\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"mint\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint64\",\"name\":\"gasLimit\",\"type\":\"uint64\"},{\"indexed\":false,\"internalType\":\"bool\",\"name\":\"isCreation\",\"type\":\"bool\"},{\"indexed\":false,\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"}],\"name\":\"TransactionDeposited\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"withdrawalHash\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"bool\",\"name\":\"success\",\"type\":\"bool\"}],\"name\":\"WithdrawalFinalized\",\"type\":\"event\"},{\"inputs\":[],\"name\":\"BASE_FEE_MAX_CHANGE_DENOMINATOR\",\"outputs\":[{\"internalType\":\"int256\",\"name\":\"\",\"type\":\"int256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"ELASTICITY_MULTIPLIER\",\"outputs\":[{\"internalType\":\"int256\",\"name\":\"\",\"type\":\"int256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"FINALIZATION_PERIOD_SECONDS\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"INITIAL_BASE_FEE\",\"outputs\":[{\"internalType\":\"uint128\",\"name\":\"\",\"type\":\"uint128\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"L2_ORACLE\",\"outputs\":[{\"internalType\":\"contractL2OutputOracle\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"MAX_RESOURCE_LIMIT\",\"outputs\":[{\"internalType\":\"int256\",\"name\":\"\",\"type\":\"int256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"MINIMUM_BASE_FEE\",\"outputs\":[{\"internalType\":\"int256\",\"name\":\"\",\"type\":\"int256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"TARGET_RESOURCE_LIMIT\",\"outputs\":[{\"internalType\":\"int256\",\"name\":\"\",\"type\":\"int256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_to\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"_value\",\"type\":\"uint256\"},{\"internalType\":\"uint64\",\"name\":\"_gasLimit\",\"type\":\"uint64\"},{\"internalType\":\"bool\",\"name\":\"_isCreation\",\"type\":\"bool\"},{\"internalType\":\"bytes\",\"name\":\"_data\",\"type\":\"bytes\"}],\"name\":\"depositTransaction\",\"outputs\":[],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_nonce\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"_sender\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"_target\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"_value\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"_gasLimit\",\"type\":\"uint256\"},{\"internalType\":\"bytes\",\"name\":\"_data\",\"type\":\"bytes\"},{\"internalType\":\"uint256\",\"name\":\"_l2BlockNumber\",\"type\":\"uint256\"},{\"components\":[{\"internalType\":\"bytes32\",\"name\":\"version\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32\",\"name\":\"stateRoot\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32\",\"name\":\"withdrawerStorageRoot\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32\",\"name\":\"latestBlockhash\",\"type\":\"bytes32\"}],\"internalType\":\"structWithdrawalVerifier.OutputRootProof\",\"name\":\"_outputRootProof\",\"type\":\"tuple\"},{\"internalType\":\"bytes\",\"name\":\"_withdrawalProof\",\"type\":\"bytes\"}],\"name\":\"finalizeWithdrawalTransaction\",\"outputs\":[],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"name\":\"finalizedWithdrawals\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"initialize\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_l2BlockNumber\",\"type\":\"uint256\"}],\"name\":\"isOutputFinalized\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"l2Sender\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"params\",\"outputs\":[{\"internalType\":\"uint128\",\"name\":\"prevBaseFee\",\"type\":\"uint128\"},{\"internalType\":\"uint64\",\"name\":\"prevBoughtGas\",\"type\":\"uint64\"},{\"internalType\":\"uint64\",\"name\":\"prevBlockNum\",\"type\":\"uint64\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"stateMutability\":\"payable\",\"type\":\"receive\"}]",
Bin: "0x60c06040523480156200001157600080fd5b5060405162003e5638038062003e56833981016040819052620000349162000276565b6200006e60408051606081018252633b9aca0080825260006020830152436001600160401b031691909201819052600160c01b0217600155565b6001600160a01b03821660a05260808190526200008a62000092565b5050620002b2565b60016000620000a18262000155565b90508015620000ba576000805461ff0019166101001790555b603380546001600160a01b03191661dead1790556200010860408051606081018252633b9aca0080825260006020830152436001600160401b031691909201819052600160c01b0217600155565b801562000151576000805461ff001916905560405160ff831681527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b5050565b60008054610100900460ff1615620001ee578160ff1660011480156200018e57506200018c306200026760201b620013d91760201c565b155b620001e65760405162461bcd60e51b815260206004820152602e602482015260008051602062003e3683398151915260448201526d191e481a5b9a5d1a585b1a5e995960921b60648201526084015b60405180910390fd5b506000919050565b60005460ff8084169116106200024d5760405162461bcd60e51b815260206004820152602e602482015260008051602062003e3683398151915260448201526d191e481a5b9a5d1a585b1a5e995960921b6064820152608401620001dd565b506000805460ff191660ff92909216919091179055600190565b6001600160a01b03163b151590565b600080604083850312156200028a57600080fd5b82516001600160a01b0381168114620002a257600080fd5b6020939093015192949293505050565b60805160a051613b2d6200030960003960008181610134015281816108e60152818161095d015281816109f001528181610ac20152610e630152600081816103ae01528181610b740152610ee60152613b2d6000f3fe6080604052600436106100f65760003560e01c8063a14238e71161008a578063e9e05c4211610059578063e9e05c4214610376578063eecf1c3614610389578063f4daa2911461039c578063ffa1ad74146103d057600080fd5b8063a14238e71461027b578063ca3e99ba146102ab578063cd7c9789146102c0578063cff0ab96146102d557600080fd5b80636dbffb78116100c65780636dbffb78146101f35780638129fc1c14610223578063867ead13146102385780639bf62d821461024e57600080fd5b80621c2ff61461012257806313620abd1461018057806364b79208146101b95780636bb0291e146101de57600080fd5b3661011d5761011b3334620186a06000604051806020016040528060008152506103f7565b005b600080fd5b34801561012e57600080fd5b506101567f000000000000000000000000000000000000000000000000000000000000000081565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020015b60405180910390f35b34801561018c57600080fd5b50610198633b9aca0081565b6040516fffffffffffffffffffffffffffffffff9091168152602001610177565b3480156101c557600080fd5b506101d0627a120081565b604051908152602001610177565b3480156101ea57600080fd5b506101d0600481565b3480156101ff57600080fd5b5061021361020e366004613216565b61089d565b6040519015158152602001610177565b34801561022f57600080fd5b5061011b610bab565b34801561024457600080fd5b506101d061271081565b34801561025a57600080fd5b506033546101569073ffffffffffffffffffffffffffffffffffffffff1681565b34801561028757600080fd5b50610213610296366004613216565b60346020526000908152604090205460ff1681565b3480156102b757600080fd5b506101d0610cd1565b3480156102cc57600080fd5b506101d0600881565b3480156102e157600080fd5b5060015461033d906fffffffffffffffffffffffffffffffff81169067ffffffffffffffff7001000000000000000000000000000000008204811691780100000000000000000000000000000000000000000000000090041683565b604080516fffffffffffffffffffffffffffffffff909416845267ffffffffffffffff9283166020850152911690820152606001610177565b61011b6103843660046132d1565b6103f7565b61011b61039736600461341b565b610ce2565b3480156103a857600080fd5b506101d07f000000000000000000000000000000000000000000000000000000000000000081565b3480156103dc57600080fd5b506103e5600181565b60405160ff9091168152602001610177565b8260005a905083156104ae5773ffffffffffffffffffffffffffffffffffffffff8716156104ae57604080517f08c379a00000000000000000000000000000000000000000000000000000000081526020600482015260248101919091527f4f7074696d69736d506f7274616c3a206d7573742073656e6420746f2061646460448201527f72657373283029207768656e206372656174696e67206120636f6e747261637460648201526084015b60405180910390fd5b333281146104cf575033731111000000000000000000000000000000001111015b8773ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f78231ae6eb73366f912bb1d64351601fb76344c537bbab635ce14d0f376f0195348a8a8a8a604051610534959493929190613586565b60405180910390a350600154600090610573907801000000000000000000000000000000000000000000000000900467ffffffffffffffff16436135ec565b905080156106fc57600061058b6004627a1200613632565b6001546105b69190700100000000000000000000000000000000900467ffffffffffffffff1661369a565b9050600060086105ca6004627a1200613632565b6001546105ea9085906fffffffffffffffffffffffffffffffff1661370e565b6105f49190613632565b6105fe9190613632565b60015490915060009061064a906106349061062c9085906fffffffffffffffffffffffffffffffff166137ca565b6127106113f5565b6fffffffffffffffffffffffffffffffff611410565b905060018411156106bd576106ba610634670de0b6b3a76400006106a6610672600883613632565b61068490670de0b6b3a764000061369a565b61068f60018a6135ec565b6106a190670de0b6b3a764000061383e565b61141f565b6106b0908561370e565b61062c9190613632565b90505b6fffffffffffffffffffffffffffffffff16780100000000000000000000000000000000000000000000000067ffffffffffffffff4316021760015550505b6001805484919060109061072f908490700100000000000000000000000000000000900467ffffffffffffffff1661387b565b92506101000a81548167ffffffffffffffff021916908367ffffffffffffffff160217905550627a1200600160000160109054906101000a900467ffffffffffffffff1667ffffffffffffffff16131561080b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603c60248201527f4f7074696d69736d506f7274616c3a2063616e6e6f7420627579206d6f72652060448201527f676173207468616e20617661696c61626c6520676173206c696d69740000000060648201526084016104a5565b600154600090610837906fffffffffffffffffffffffffffffffff1667ffffffffffffffff86166138a7565b6fffffffffffffffffffffffffffffffff169050600061085b48633b9aca00611450565b61086590836138df565b905060005a61087490866135ec565b9050808211156108905761089061088b82846135ec565b611460565b5050505050505050505050565b6040517fa25ae55700000000000000000000000000000000000000000000000000000000815260048101829052600090819073ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000169063a25ae557906024016040805180830381865afa15801561092c573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061095091906138f3565b8051909150610b725760007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663529933df6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156109c6573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906109ea9190613942565b905060007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16634ab65d736040518163ffffffff1660e01b8152600401602060405180830381865afa158015610a59573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610a7d9190613942565b905084811115610a9257506000949350505050565b600082610a9f83886135ec565b610aa9919061395b565b905073ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000001663a25ae557610af183866135ec565b610afb908961396f565b6040518263ffffffff1660e01b8152600401610b1991815260200190565b6040805180830381865afa158015610b35573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610b5991906138f3565b8051909450610b6e5750600095945050505050565b5050505b7f00000000000000000000000000000000000000000000000000000000000000008160200151610ba2919061396f565b42119392505050565b60016000610bb88261148e565b90508015610bed57600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff166101001790555b603380547fffffffffffffffffffffffff00000000000000000000000000000000000000001661dead179055610c6860408051606081018252633b9aca00808252600060208301524367ffffffffffffffff169190920181905278010000000000000000000000000000000000000000000000000217600155565b8015610ccd57600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff16905560405160ff831681527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b5050565b610cdf6004627a1200613632565b81565b60335473ffffffffffffffffffffffffffffffffffffffff1661dead14610d8b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603f60248201527f4f7074696d69736d506f7274616c3a2063616e206f6e6c79207472696767657260448201527f206f6e65207769746864726177616c20706572207472616e73616374696f6e0060648201526084016104a5565b73ffffffffffffffffffffffffffffffffffffffff8916301415610e31576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603f60248201527f4f7074696d69736d506f7274616c3a20796f752063616e6e6f742073656e642060448201527f6d6573736167657320746f2074686520706f7274616c20636f6e74726163740060648201526084016104a5565b6040517fa25ae557000000000000000000000000000000000000000000000000000000008152600481018590526000907f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff169063a25ae557906024016040805180830381865afa158015610ebe573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610ee291906138f3565b90507f00000000000000000000000000000000000000000000000000000000000000008160200151610f14919061396f565b4211610fa2576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602d60248201527f4f7074696d69736d506f7274616c3a2070726f706f73616c206973206e6f742060448201527f7965742066696e616c697a65640000000000000000000000000000000000000060648201526084016104a5565b610fb9610fb436869003860186613987565b611619565b815114611048576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602960248201527f4f7074696d69736d506f7274616c3a20696e76616c6964206f7574707574207260448201527f6f6f742070726f6f66000000000000000000000000000000000000000000000060648201526084016104a5565b600061108e8d8d8d8d8d8d8d8080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525061167592505050565b90506110d581866040013586868080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152506116b492505050565b611161576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603260248201527f4f7074696d69736d506f7274616c3a20696e76616c696420776974686472617760448201527f616c20696e636c7573696f6e2070726f6f66000000000000000000000000000060648201526084016104a5565b60008181526034602052604090205460ff1615611200576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603560248201527f4f7074696d69736d506f7274616c3a207769746864726177616c20686173206160448201527f6c7265616479206265656e2066696e616c697a6564000000000000000000000060648201526084016104a5565b600081815260346020526040902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00166001179055611243614e208a61396f565b5a10156112d2576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603760248201527f4f7074696d69736d506f7274616c3a20696e73756666696369656e742067617360448201527f20746f2066696e616c697a65207769746864726177616c00000000000000000060648201526084016104a5565b603380547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff8e16179055604080516020601f8a0181900481028201810190925288815260009161135b918e918d918f918691908f908f908190840183828082843760009201919091525061177d92505050565b50603380547fffffffffffffffffffffffff00000000000000000000000000000000000000001661dead17905560405190915082907fdb5c7652857aa163daadd670e116628fb42e869d8ac4251ef8971d9e5727df1b906113c190841515815260200190565b60405180910390a25050505050505050505050505050565b73ffffffffffffffffffffffffffffffffffffffff163b151590565b6000818312156114055781611407565b825b90505b92915050565b60008183126114055781611407565b6000611407670de0b6b3a76400008361143786611808565b611441919061370e565b61144b9190613632565b611a4c565b6000818310156114055781611407565b6000805a90505b825a61147390836135ec565b101561148957611482826139ed565b9150611467565b505050565b60008054610100900460ff1615611545578160ff1660011480156114b15750303b155b61153d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201527f647920696e697469616c697a656400000000000000000000000000000000000060648201526084016104a5565b506000919050565b60005460ff8084169116106115dc576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201527f647920696e697469616c697a656400000000000000000000000000000000000060648201526084016104a5565b50600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660ff92909216919091179055600190565b919050565b60008160000151826020015183604001518460600151604051602001611658949392919093845260208401929092526040830152606082015260800190565b604051602081830303815290604052805190602001209050919050565b600086868686868660405160200161169296959493929190613a26565b6040516020818303038152906040528051906020012090509695505050505050565b604080516020810185905260009181018290528190606001604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0818403018152828252805160209182012090830181905292506117729101604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0818403018152828201909152600182527f01000000000000000000000000000000000000000000000000000000000000006020830152908587611c8b565b9150505b9392505050565b6000606060008060008661ffff1667ffffffffffffffff8111156117a3576117a3613253565b6040519080825280601f01601f1916602001820160405280156117cd576020820181803683370190505b5090506000808751602089018b8e8ef191503d9250868311156117ee578692505b828152826000602083013e90999098509650505050505050565b6000808213611873576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600960248201527f554e444546494e4544000000000000000000000000000000000000000000000060448201526064016104a5565b6000606061188084611caf565b03609f8181039490941b90931c6c465772b2bbbb5f824b15207a3081018102606090811d6d0388eaa27412d5aca026815d636e018202811d6d0df99ac502031bf953eff472fdcc018202811d6d13cdffb29d51d99322bdff5f2211018202811d6d0a0f742023def783a307a986912e018202811d6d01920d8043ca89b5239253284e42018202811d6c0b7a86d7375468fac667a0a527016c29508e458543d8aa4df2abee7883018302821d6d0139601a2efabe717e604cbb4894018302821d6d02247f7a7b6594320649aa03aba1018302821d7fffffffffffffffffffffffffffffffffffffff73c0c716a594e00d54e3c4cbc9018302821d7ffffffffffffffffffffffffffffffffffffffdc7b88c420e53a9890533129f6f01830290911d7fffffffffffffffffffffffffffffffffffffff465fda27eb4d63ded474e5f832019091027ffffffffffffffff5f6af8f7b3396644f18e157960000000000000000000000000105711340daa0d5f769dba1915cef59f0815a5506027d0267a36c0c95b3975ab3ee5b203a7614a3f75373f047d803ae7b6687f2b393909302929092017d57115e47018c7177eebf7cd370a3356a1b7863008a5ae8028c72b88642840160ae1d92915050565b60007ffffffffffffffffffffffffffffffffffffffffffffffffdb731c958f34d94c18213611a7d57506000919050565b680755bf798b4a1bf1e58212611aef576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600c60248201527f4558505f4f564552464c4f57000000000000000000000000000000000000000060448201526064016104a5565b6503782dace9d9604e83901b059150600060606bb17217f7d1cf79abc9e3b39884821b056b80000000000000000000000001901d6bb17217f7d1cf79abc9e3b39881029093037fffffffffffffffffffffffffffffffffffffffdbf3ccf1604d263450f02a550481018102606090811d6d0277594991cfc85f6e2461837cd9018202811d7fffffffffffffffffffffffffffffffffffffe5adedaa1cb095af9e4da10e363c018202811d6db1bbb201f443cf962f1a1d3db4a5018202811d7ffffffffffffffffffffffffffffffffffffd38dc772608b0ae56cce01296c0eb018202811d6e05180bb14799ab47a8a8cb2a527d57016d02d16720577bd19bf614176fe9ea6c10fe68e7fd37d0007b713f765084018402831d9081019084017ffffffffffffffffffffffffffffffffffffffe2c69812cf03b0763fd454a8f7e010290911d6e0587f503bb6ea29d25fcb7401964500190910279d835ebba824c98fb31b83b2ca45c000000000000000000000000010574029d9dc38563c32e5c2f6dc192ee70ef65f9978af30260c3939093039290921c92915050565b600080611c9786611d85565b9050611ca581868686611db7565b9695505050505050565b6000808211611d1a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600960248201527f554e444546494e4544000000000000000000000000000000000000000000000060448201526064016104a5565b5060016fffffffffffffffffffffffffffffffff821160071b82811c67ffffffffffffffff1060061b1782811c63ffffffff1060051b1782811c61ffff1060041b1782811c60ff10600390811b90911783811c600f1060021b1783811c909110821b1791821c111790565b60608180519060200120604051602001611da191815260200190565b6040516020818303038152906040529050919050565b6000806000611dc7878686611df4565b91509150818015611de957508051602080830191909120875191880191909120145b979650505050505050565b600060606000611e0385611ee9565b90506000806000611e15848a89611fe4565b81519295509093509150158080611e295750815b611e8f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601a60248201527f50726f76696465642070726f6f6620697320696e76616c69642e00000000000060448201526064016104a5565b600081611eab5760405180602001604052806000815250611ed7565b611ed786611eba6001886135ec565b81518110611eca57611eca613a7d565b6020026020010151612501565b919b919a509098505050505050505050565b60606000611ef68361252b565b90506000815167ffffffffffffffff811115611f1457611f14613253565b604051908082528060200260200182016040528015611f5957816020015b6040805180820190915260608082526020820152815260200190600190039081611f325790505b50905060005b8251811015611fdc576000611f8c848381518110611f7f57611f7f613a7d565b602002602001015161255e565b90506040518060400160405280828152602001611fa88361252b565b815250838381518110611fbd57611fbd613a7d565b6020026020010181905250508080611fd4906139ed565b915050611f5f565b509392505050565b60006060818080611ff487612608565b9050600086905060008061201b604051806040016040528060608152602001606081525090565b60005b8c518110156124bd578c818151811061203957612039613a7d565b60200260200101519150828461204f919061396f565b935061205c60018861396f565b9650836120da578151805160209091012085146120d5576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601160248201527f496e76616c696420726f6f74206861736800000000000000000000000000000060448201526064016104a5565b6121cb565b815151602011612156578151805160209091012085146120d5576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601b60248201527f496e76616c6964206c6172676520696e7465726e616c2068617368000000000060448201526064016104a5565b84612164836000015161278b565b146121cb576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601a60248201527f496e76616c696420696e7465726e616c206e6f6465206861736800000000000060448201526064016104a5565b6121d76010600161396f565b82602001515114156122505785518414156121f1576124bd565b600086858151811061220557612205613a7d565b602001015160f81c60f81b60f81c9050600083602001518260ff168151811061223057612230613a7d565b60200260200101519050612243816127b3565b96506001945050506124ab565b60028260200151511415612449576000612269836127e9565b905060008160008151811061228057612280613a7d565b016020015160f81c90506000612297600283613aac565b6122a2906002613ace565b905060006122b3848360ff1661280d565b905060006122c18b8a61280d565b905060006122cf8383612843565b905060ff8516600214806122e6575060ff85166003145b1561233c578083511480156122fb5750808251145b1561230d5761230a818b61396f565b99505b507f800000000000000000000000000000000000000000000000000000000000000099506124bd945050505050565b60ff8516158061234f575060ff85166001145b156123c1578251811461238b57507f800000000000000000000000000000000000000000000000000000000000000099506124bd945050505050565b6123b288602001516001815181106123a5576123a5613a7d565b60200260200101516127b3565b9a5097506124ab945050505050565b6040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f52656365697665642061206e6f6465207769746820616e20756e6b6e6f776e2060448201527f707265666978000000000000000000000000000000000000000000000000000060648201526084016104a5565b6040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601d60248201527f526563656976656420616e20756e706172736561626c65206e6f64652e00000060448201526064016104a5565b806124b5816139ed565b91505061201e565b507f80000000000000000000000000000000000000000000000000000000000000008414866124ec878661280d565b909e909d50909b509950505050505050505050565b6020810151805160609161140a9161251b906001906135ec565b81518110611f7f57611f7f613a7d565b60408051808201825260008082526020918201528151808301909252825182528083019082015260609061140a906128ef565b6060600080600061256e85612b22565b91945092509050600081600181111561258957612589613af1565b146125f0576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601860248201527f496e76616c696420524c502062797465732076616c75652e000000000000000060448201526064016104a5565b6125ff85602001518484612f29565b95945050505050565b606060008251600261261a919061383e565b67ffffffffffffffff81111561263257612632613253565b6040519080825280601f01601f19166020018201604052801561265c576020820181803683370190505b50905060005b835181101561278457600484828151811061267f5761267f613a7d565b01602001517fff0000000000000000000000000000000000000000000000000000000000000016901c826126b483600261383e565b815181106126c4576126c4613a7d565b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350601084828151811061270757612707613a7d565b0160200151612719919060f81c613aac565b60f81b8261272883600261383e565b61273390600161396f565b8151811061274357612743613a7d565b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a9053508061277c816139ed565b915050612662565b5092915050565b600060208251101561279f57506020015190565b8180602001905181019061140a9190613942565b600060606020836000015110156127d4576127cd83613008565b90506127e0565b6127dd8361255e565b90505b6117768161278b565b606061140a6128088360200151600081518110611f7f57611f7f613a7d565b612608565b60608251821061282c575060408051602081019091526000815261140a565b611407838384865161283e91906135ec565b613013565b6000805b8084511180156128575750808351115b80156128d8575082818151811061287057612870613a7d565b602001015160f81c60f81b7effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff19168482815181106128af576128af613a7d565b01602001517fff0000000000000000000000000000000000000000000000000000000000000016145b1561140757806128e7816139ed565b915050612847565b60606000806128fd84612b22565b9193509091506001905081600181111561291957612919613af1565b14612980576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601760248201527f496e76616c696420524c50206c6973742076616c75652e00000000000000000060448201526064016104a5565b6040805160208082526104208201909252600091816020015b60408051808201909152600080825260208201528152602001906001900390816129995790505090506000835b8651811015612b175760208210612a5f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602a60248201527f50726f766964656420524c50206c6973742065786365656473206d6178206c6960448201527f7374206c656e6774682e0000000000000000000000000000000000000000000060648201526084016104a5565b600080612a9c6040518060400160405280858c60000151612a8091906135ec565b8152602001858c60200151612a95919061396f565b9052612b22565b509150915060405180604001604052808383612ab8919061396f565b8152602001848b60200151612acd919061396f565b815250858581518110612ae257612ae2613a7d565b6020908102919091010152612af860018561396f565b9350612b04818361396f565b612b0e908461396f565b925050506129c6565b508152949350505050565b600080600080846000015111612b94576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601860248201527f524c50206974656d2063616e6e6f74206265206e756c6c2e000000000000000060448201526064016104a5565b6020840151805160001a607f8111612bb9576000600160009450945094505050612f22565b60b78111612c4f576000612bce6080836135ec565b905080876000015111612c3d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601960248201527f496e76616c696420524c502073686f727420737472696e672e0000000000000060448201526064016104a5565b60019550935060009250612f22915050565b60bf8111612d72576000612c6460b7836135ec565b905080876000015111612cd3576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f496e76616c696420524c50206c6f6e6720737472696e67206c656e6774682e0060448201526064016104a5565b600183015160208290036101000a9004612ced818361396f565b885111612d56576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601860248201527f496e76616c696420524c50206c6f6e6720737472696e672e000000000000000060448201526064016104a5565b612d6182600161396f565b9650945060009350612f2292505050565b60f78111612e07576000612d8760c0836135ec565b905080876000015111612df6576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601760248201527f496e76616c696420524c502073686f7274206c6973742e00000000000000000060448201526064016104a5565b600195509350849250612f22915050565b6000612e1460f7836135ec565b905080876000015111612e83576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601d60248201527f496e76616c696420524c50206c6f6e67206c697374206c656e6774682e00000060448201526064016104a5565b600183015160208290036101000a9004612e9d818361396f565b885111612f06576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601660248201527f496e76616c696420524c50206c6f6e67206c6973742e0000000000000000000060448201526064016104a5565b612f1182600161396f565b9650945060019350612f2292505050565b9193909250565b606060008267ffffffffffffffff811115612f4657612f46613253565b6040519080825280601f01601f191660200182016040528015612f70576020820181803683370190505b509050805160001415612f84579050611776565b6000612f90858761396f565b90506020820160005b612fa46020876138df565b811015612fdb5782518252612fba60208461396f565b9250612fc760208361396f565b915080612fd3816139ed565b915050612f99565b5060006001602087066020036101000a039050808251168119845116178252839450505050509392505050565b606061140a82613200565b60608161302181601f61396f565b1015613089576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600e60248201527f736c6963655f6f766572666c6f7700000000000000000000000000000000000060448201526064016104a5565b82613094838261396f565b10156130fc576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600e60248201527f736c6963655f6f766572666c6f7700000000000000000000000000000000000060448201526064016104a5565b613106828461396f565b84511015613170576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601160248201527f736c6963655f6f75744f66426f756e647300000000000000000000000000000060448201526064016104a5565b60608215801561318f57604051915060008252602082016040526131f7565b6040519150601f8416801560200281840101858101878315602002848b0101015b818310156131c85780518352602092830192016131b0565b5050858452601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016604052505b50949350505050565b606061140a826020015160008460000151612f29565b60006020828403121561322857600080fd5b5035919050565b803573ffffffffffffffffffffffffffffffffffffffff8116811461161457600080fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b604051601f82017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016810167ffffffffffffffff811182821017156132c9576132c9613253565b604052919050565b600080600080600060a086880312156132e957600080fd5b6132f28661322f565b94506020808701359450604087013567ffffffffffffffff808216821461331857600080fd5b909450606088013590811515821461332f57600080fd5b9093506080880135908082111561334557600080fd5b818901915089601f83011261335957600080fd5b81358181111561336b5761336b613253565b61339b847fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f84011601613282565b91508082528a848285010111156133b157600080fd5b80848401858401376000848284010152508093505050509295509295909350565b60008083601f8401126133e457600080fd5b50813567ffffffffffffffff8111156133fc57600080fd5b60208301915083602082850101111561341457600080fd5b9250929050565b60008060008060008060008060008060006101808c8e03121561343d57600080fd5b8b359a5061344d60208d0161322f565b995061345b60408d0161322f565b985060608c0135975060808c0135965067ffffffffffffffff60a08d0135111561348457600080fd5b6134948d60a08e01358e016133d2565b909650945060c08c0135935060808c8e037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff200112156134d257600080fd5b60e08c01925067ffffffffffffffff6101608d013511156134f257600080fd5b6135038d6101608e01358e016133d2565b81935080925050509295989b509295989b9093969950565b6000815180845260005b8181101561354157602081850181015186830182015201613525565b81811115613553576000602083870101525b50601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b85815284602082015267ffffffffffffffff84166040820152821515606082015260a060808201526000611de960a083018461351b565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000828210156135fe576135fe6135bd565b500390565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b60008261364157613641613603565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff83147f800000000000000000000000000000000000000000000000000000000000000083141615613695576136956135bd565b500590565b6000808312837f8000000000000000000000000000000000000000000000000000000000000000018312811516156136d4576136d46135bd565b837f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff018313811615613708576137086135bd565b50500390565b60007f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff60008413600084138583048511828216161561374f5761374f6135bd565b7f8000000000000000000000000000000000000000000000000000000000000000600087128682058812818416161561378a5761378a6135bd565b600087129250878205871284841616156137a6576137a66135bd565b878505871281841616156137bc576137bc6135bd565b505050929093029392505050565b6000808212827f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff03841381151615613804576138046135bd565b827f8000000000000000000000000000000000000000000000000000000000000000038412811615613838576138386135bd565b50500190565b6000817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0483118215151615613876576138766135bd565b500290565b600067ffffffffffffffff80831681851680830382111561389e5761389e6135bd565b01949350505050565b60006fffffffffffffffffffffffffffffffff808316818516818304811182151516156138d6576138d66135bd565b02949350505050565b6000826138ee576138ee613603565b500490565b60006040828403121561390557600080fd5b6040516040810181811067ffffffffffffffff8211171561392857613928613253565b604052825181526020928301519281019290925250919050565b60006020828403121561395457600080fd5b5051919050565b60008261396a5761396a613603565b500690565b60008219821115613982576139826135bd565b500190565b60006080828403121561399957600080fd5b6040516080810181811067ffffffffffffffff821117156139bc576139bc613253565b8060405250823581526020830135602082015260408301356040820152606083013560608201528091505092915050565b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff821415613a1f57613a1f6135bd565b5060010190565b868152600073ffffffffffffffffffffffffffffffffffffffff808816602084015280871660408401525084606083015283608083015260c060a0830152613a7160c083018461351b565b98975050505050505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b600060ff831680613abf57613abf613603565b8060ff84160691505092915050565b600060ff821660ff841680821015613ae857613ae86135bd565b90039392505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fdfea164736f6c634300080a000a496e697469616c697a61626c653a20636f6e747261637420697320616c726561", Bin: "0x60c06040523480156200001157600080fd5b5060405162003e1c38038062003e1c833981016040819052620000349162000272565b6200006e60408051606081018252633b9aca0080825260006020830152436001600160401b031691909201819052600160c01b0217600155565b6001600160a01b03821660a05260808190526200008a62000092565b5050620002ae565b6000620000a0600162000151565b90508015620000b9576000805461ff0019166101001790555b603380546001600160a01b03191661dead1790556200010760408051606081018252633b9aca0080825260006020830152436001600160401b031691909201819052600160c01b0217600155565b80156200014e576000805461ff0019169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b50565b60008054610100900460ff1615620001ea578160ff1660011480156200018a575062000188306200026360201b620013a31760201c565b155b620001e25760405162461bcd60e51b815260206004820152602e602482015260008051602062003dfc83398151915260448201526d191e481a5b9a5d1a585b1a5e995960921b60648201526084015b60405180910390fd5b506000919050565b60005460ff808416911610620002495760405162461bcd60e51b815260206004820152602e602482015260008051602062003dfc83398151915260448201526d191e481a5b9a5d1a585b1a5e995960921b6064820152608401620001d9565b506000805460ff191660ff92909216919091179055600190565b6001600160a01b03163b151590565b600080604083850312156200028657600080fd5b82516001600160a01b03811681146200029e57600080fd5b6020939093015192949293505050565b60805160a051613af76200030560003960008181610129015281816108b40152818161092b015281816109be01528181610a900152610e2d0152600081816103a301528181610b420152610eb00152613af76000f3fe6080604052600436106100eb5760003560e01c80639bf62d821161008a578063cff0ab9611610059578063cff0ab96146102ca578063e9e05c421461036b578063eecf1c361461037e578063f4daa2911461039157600080fd5b80639bf62d8214610243578063a14238e714610270578063ca3e99ba146102a0578063cd7c9789146102b557600080fd5b80636bb0291e116100c65780636bb0291e146101d35780636dbffb78146101e85780638129fc1c14610218578063867ead131461022d57600080fd5b80621c2ff61461011757806313620abd1461017557806364b79208146101ae57600080fd5b36610112576101103334620186a06000604051806020016040528060008152506103c5565b005b600080fd5b34801561012357600080fd5b5061014b7f000000000000000000000000000000000000000000000000000000000000000081565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020015b60405180910390f35b34801561018157600080fd5b5061018d633b9aca0081565b6040516fffffffffffffffffffffffffffffffff909116815260200161016c565b3480156101ba57600080fd5b506101c5627a120081565b60405190815260200161016c565b3480156101df57600080fd5b506101c5600481565b3480156101f457600080fd5b506102086102033660046131e0565b61086b565b604051901515815260200161016c565b34801561022457600080fd5b50610110610b79565b34801561023957600080fd5b506101c561271081565b34801561024f57600080fd5b5060335461014b9073ffffffffffffffffffffffffffffffffffffffff1681565b34801561027c57600080fd5b5061020861028b3660046131e0565b60346020526000908152604090205460ff1681565b3480156102ac57600080fd5b506101c5610c9b565b3480156102c157600080fd5b506101c5600881565b3480156102d657600080fd5b50600154610332906fffffffffffffffffffffffffffffffff81169067ffffffffffffffff7001000000000000000000000000000000008204811691780100000000000000000000000000000000000000000000000090041683565b604080516fffffffffffffffffffffffffffffffff909416845267ffffffffffffffff928316602085015291169082015260600161016c565b61011061037936600461329b565b6103c5565b61011061038c3660046133e5565b610cac565b34801561039d57600080fd5b506101c57f000000000000000000000000000000000000000000000000000000000000000081565b8260005a9050831561047c5773ffffffffffffffffffffffffffffffffffffffff87161561047c57604080517f08c379a00000000000000000000000000000000000000000000000000000000081526020600482015260248101919091527f4f7074696d69736d506f7274616c3a206d7573742073656e6420746f2061646460448201527f72657373283029207768656e206372656174696e67206120636f6e747261637460648201526084015b60405180910390fd5b3332811461049d575033731111000000000000000000000000000000001111015b8773ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f78231ae6eb73366f912bb1d64351601fb76344c537bbab635ce14d0f376f0195348a8a8a8a604051610502959493929190613550565b60405180910390a350600154600090610541907801000000000000000000000000000000000000000000000000900467ffffffffffffffff16436135b6565b905080156106ca5760006105596004627a12006135fc565b6001546105849190700100000000000000000000000000000000900467ffffffffffffffff16613664565b9050600060086105986004627a12006135fc565b6001546105b89085906fffffffffffffffffffffffffffffffff166136d8565b6105c291906135fc565b6105cc91906135fc565b60015490915060009061061890610602906105fa9085906fffffffffffffffffffffffffffffffff16613794565b6127106113bf565b6fffffffffffffffffffffffffffffffff6113da565b9050600184111561068b57610688610602670de0b6b3a76400006106746106406008836135fc565b61065290670de0b6b3a7640000613664565b61065d60018a6135b6565b61066f90670de0b6b3a7640000613808565b6113e9565b61067e90856136d8565b6105fa91906135fc565b90505b6fffffffffffffffffffffffffffffffff16780100000000000000000000000000000000000000000000000067ffffffffffffffff4316021760015550505b600180548491906010906106fd908490700100000000000000000000000000000000900467ffffffffffffffff16613845565b92506101000a81548167ffffffffffffffff021916908367ffffffffffffffff160217905550627a1200600160000160109054906101000a900467ffffffffffffffff1667ffffffffffffffff1613156107d9576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603c60248201527f4f7074696d69736d506f7274616c3a2063616e6e6f7420627579206d6f72652060448201527f676173207468616e20617661696c61626c6520676173206c696d6974000000006064820152608401610473565b600154600090610805906fffffffffffffffffffffffffffffffff1667ffffffffffffffff8616613871565b6fffffffffffffffffffffffffffffffff169050600061082948633b9aca0061141a565b61083390836138a9565b905060005a61084290866135b6565b90508082111561085e5761085e61085982846135b6565b61142a565b5050505050505050505050565b6040517fa25ae55700000000000000000000000000000000000000000000000000000000815260048101829052600090819073ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000169063a25ae557906024016040805180830381865afa1580156108fa573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061091e91906138bd565b8051909150610b405760007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663529933df6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610994573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906109b8919061390c565b905060007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16634ab65d736040518163ffffffff1660e01b8152600401602060405180830381865afa158015610a27573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610a4b919061390c565b905084811115610a6057506000949350505050565b600082610a6d83886135b6565b610a779190613925565b905073ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000001663a25ae557610abf83866135b6565b610ac99089613939565b6040518263ffffffff1660e01b8152600401610ae791815260200190565b6040805180830381865afa158015610b03573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610b2791906138bd565b8051909450610b3c5750600095945050505050565b5050505b7f00000000000000000000000000000000000000000000000000000000000000008160200151610b709190613939565b42119392505050565b6000610b856001611458565b90508015610bba57600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff166101001790555b603380547fffffffffffffffffffffffff00000000000000000000000000000000000000001661dead179055610c3560408051606081018252633b9aca00808252600060208301524367ffffffffffffffff169190920181905278010000000000000000000000000000000000000000000000000217600155565b8015610c9857600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b50565b610ca96004627a12006135fc565b81565b60335473ffffffffffffffffffffffffffffffffffffffff1661dead14610d55576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603f60248201527f4f7074696d69736d506f7274616c3a2063616e206f6e6c79207472696767657260448201527f206f6e65207769746864726177616c20706572207472616e73616374696f6e006064820152608401610473565b73ffffffffffffffffffffffffffffffffffffffff8916301415610dfb576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603f60248201527f4f7074696d69736d506f7274616c3a20796f752063616e6e6f742073656e642060448201527f6d6573736167657320746f2074686520706f7274616c20636f6e7472616374006064820152608401610473565b6040517fa25ae557000000000000000000000000000000000000000000000000000000008152600481018590526000907f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff169063a25ae557906024016040805180830381865afa158015610e88573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610eac91906138bd565b90507f00000000000000000000000000000000000000000000000000000000000000008160200151610ede9190613939565b4211610f6c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602d60248201527f4f7074696d69736d506f7274616c3a2070726f706f73616c206973206e6f742060448201527f7965742066696e616c697a6564000000000000000000000000000000000000006064820152608401610473565b610f83610f7e36869003860186613951565b6115e3565b815114611012576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602960248201527f4f7074696d69736d506f7274616c3a20696e76616c6964206f7574707574207260448201527f6f6f742070726f6f6600000000000000000000000000000000000000000000006064820152608401610473565b60006110588d8d8d8d8d8d8d8080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525061163f92505050565b905061109f81866040013586868080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525061167e92505050565b61112b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603260248201527f4f7074696d69736d506f7274616c3a20696e76616c696420776974686472617760448201527f616c20696e636c7573696f6e2070726f6f6600000000000000000000000000006064820152608401610473565b60008181526034602052604090205460ff16156111ca576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603560248201527f4f7074696d69736d506f7274616c3a207769746864726177616c20686173206160448201527f6c7265616479206265656e2066696e616c697a656400000000000000000000006064820152608401610473565b600081815260346020526040902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016600117905561120d614e208a613939565b5a101561129c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603760248201527f4f7074696d69736d506f7274616c3a20696e73756666696369656e742067617360448201527f20746f2066696e616c697a65207769746864726177616c0000000000000000006064820152608401610473565b603380547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff8e16179055604080516020601f8a01819004810282018101909252888152600091611325918e918d918f918691908f908f908190840183828082843760009201919091525061174792505050565b50603380547fffffffffffffffffffffffff00000000000000000000000000000000000000001661dead17905560405190915082907fdb5c7652857aa163daadd670e116628fb42e869d8ac4251ef8971d9e5727df1b9061138b90841515815260200190565b60405180910390a25050505050505050505050505050565b73ffffffffffffffffffffffffffffffffffffffff163b151590565b6000818312156113cf57816113d1565b825b90505b92915050565b60008183126113cf57816113d1565b60006113d1670de0b6b3a764000083611401866117d2565b61140b91906136d8565b61141591906135fc565b611a16565b6000818310156113cf57816113d1565b6000805a90505b825a61143d90836135b6565b10156114535761144c826139b7565b9150611431565b505050565b60008054610100900460ff161561150f578160ff16600114801561147b5750303b155b611507576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201527f647920696e697469616c697a65640000000000000000000000000000000000006064820152608401610473565b506000919050565b60005460ff8084169116106115a6576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201527f647920696e697469616c697a65640000000000000000000000000000000000006064820152608401610473565b50600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660ff92909216919091179055600190565b919050565b60008160000151826020015183604001518460600151604051602001611622949392919093845260208401929092526040830152606082015260800190565b604051602081830303815290604052805190602001209050919050565b600086868686868660405160200161165c969594939291906139f0565b6040516020818303038152906040528051906020012090509695505050505050565b604080516020810185905260009181018290528190606001604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181528282528051602091820120908301819052925061173c9101604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0818403018152828201909152600182527f01000000000000000000000000000000000000000000000000000000000000006020830152908587611c55565b9150505b9392505050565b6000606060008060008661ffff1667ffffffffffffffff81111561176d5761176d61321d565b6040519080825280601f01601f191660200182016040528015611797576020820181803683370190505b5090506000808751602089018b8e8ef191503d9250868311156117b8578692505b828152826000602083013e90999098509650505050505050565b600080821361183d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600960248201527f554e444546494e454400000000000000000000000000000000000000000000006044820152606401610473565b6000606061184a84611c79565b03609f8181039490941b90931c6c465772b2bbbb5f824b15207a3081018102606090811d6d0388eaa27412d5aca026815d636e018202811d6d0df99ac502031bf953eff472fdcc018202811d6d13cdffb29d51d99322bdff5f2211018202811d6d0a0f742023def783a307a986912e018202811d6d01920d8043ca89b5239253284e42018202811d6c0b7a86d7375468fac667a0a527016c29508e458543d8aa4df2abee7883018302821d6d0139601a2efabe717e604cbb4894018302821d6d02247f7a7b6594320649aa03aba1018302821d7fffffffffffffffffffffffffffffffffffffff73c0c716a594e00d54e3c4cbc9018302821d7ffffffffffffffffffffffffffffffffffffffdc7b88c420e53a9890533129f6f01830290911d7fffffffffffffffffffffffffffffffffffffff465fda27eb4d63ded474e5f832019091027ffffffffffffffff5f6af8f7b3396644f18e157960000000000000000000000000105711340daa0d5f769dba1915cef59f0815a5506027d0267a36c0c95b3975ab3ee5b203a7614a3f75373f047d803ae7b6687f2b393909302929092017d57115e47018c7177eebf7cd370a3356a1b7863008a5ae8028c72b88642840160ae1d92915050565b60007ffffffffffffffffffffffffffffffffffffffffffffffffdb731c958f34d94c18213611a4757506000919050565b680755bf798b4a1bf1e58212611ab9576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600c60248201527f4558505f4f564552464c4f5700000000000000000000000000000000000000006044820152606401610473565b6503782dace9d9604e83901b059150600060606bb17217f7d1cf79abc9e3b39884821b056b80000000000000000000000001901d6bb17217f7d1cf79abc9e3b39881029093037fffffffffffffffffffffffffffffffffffffffdbf3ccf1604d263450f02a550481018102606090811d6d0277594991cfc85f6e2461837cd9018202811d7fffffffffffffffffffffffffffffffffffffe5adedaa1cb095af9e4da10e363c018202811d6db1bbb201f443cf962f1a1d3db4a5018202811d7ffffffffffffffffffffffffffffffffffffd38dc772608b0ae56cce01296c0eb018202811d6e05180bb14799ab47a8a8cb2a527d57016d02d16720577bd19bf614176fe9ea6c10fe68e7fd37d0007b713f765084018402831d9081019084017ffffffffffffffffffffffffffffffffffffffe2c69812cf03b0763fd454a8f7e010290911d6e0587f503bb6ea29d25fcb7401964500190910279d835ebba824c98fb31b83b2ca45c000000000000000000000000010574029d9dc38563c32e5c2f6dc192ee70ef65f9978af30260c3939093039290921c92915050565b600080611c6186611d4f565b9050611c6f81868686611d81565b9695505050505050565b6000808211611ce4576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600960248201527f554e444546494e454400000000000000000000000000000000000000000000006044820152606401610473565b5060016fffffffffffffffffffffffffffffffff821160071b82811c67ffffffffffffffff1060061b1782811c63ffffffff1060051b1782811c61ffff1060041b1782811c60ff10600390811b90911783811c600f1060021b1783811c909110821b1791821c111790565b60608180519060200120604051602001611d6b91815260200190565b6040516020818303038152906040529050919050565b6000806000611d91878686611dbe565b91509150818015611db357508051602080830191909120875191880191909120145b979650505050505050565b600060606000611dcd85611eb3565b90506000806000611ddf848a89611fae565b81519295509093509150158080611df35750815b611e59576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601a60248201527f50726f76696465642070726f6f6620697320696e76616c69642e0000000000006044820152606401610473565b600081611e755760405180602001604052806000815250611ea1565b611ea186611e846001886135b6565b81518110611e9457611e94613a47565b60200260200101516124cb565b919b919a509098505050505050505050565b60606000611ec0836124f5565b90506000815167ffffffffffffffff811115611ede57611ede61321d565b604051908082528060200260200182016040528015611f2357816020015b6040805180820190915260608082526020820152815260200190600190039081611efc5790505b50905060005b8251811015611fa6576000611f56848381518110611f4957611f49613a47565b6020026020010151612528565b90506040518060400160405280828152602001611f72836124f5565b815250838381518110611f8757611f87613a47565b6020026020010181905250508080611f9e906139b7565b915050611f29565b509392505050565b60006060818080611fbe876125d2565b90506000869050600080611fe5604051806040016040528060608152602001606081525090565b60005b8c51811015612487578c818151811061200357612003613a47565b6020026020010151915082846120199190613939565b9350612026600188613939565b9650836120a45781518051602090910120851461209f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601160248201527f496e76616c696420726f6f7420686173680000000000000000000000000000006044820152606401610473565b612195565b8151516020116121205781518051602090910120851461209f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601b60248201527f496e76616c6964206c6172676520696e7465726e616c206861736800000000006044820152606401610473565b8461212e8360000151612755565b14612195576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601a60248201527f496e76616c696420696e7465726e616c206e6f646520686173680000000000006044820152606401610473565b6121a160106001613939565b826020015151141561221a5785518414156121bb57612487565b60008685815181106121cf576121cf613a47565b602001015160f81c60f81b60f81c9050600083602001518260ff16815181106121fa576121fa613a47565b6020026020010151905061220d8161277d565b9650600194505050612475565b60028260200151511415612413576000612233836127b3565b905060008160008151811061224a5761224a613a47565b016020015160f81c90506000612261600283613a76565b61226c906002613a98565b9050600061227d848360ff166127d7565b9050600061228b8b8a6127d7565b90506000612299838361280d565b905060ff8516600214806122b0575060ff85166003145b15612306578083511480156122c55750808251145b156122d7576122d4818b613939565b99505b507f80000000000000000000000000000000000000000000000000000000000000009950612487945050505050565b60ff85161580612319575060ff85166001145b1561238b578251811461235557507f80000000000000000000000000000000000000000000000000000000000000009950612487945050505050565b61237c886020015160018151811061236f5761236f613a47565b602002602001015161277d565b9a509750612475945050505050565b6040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f52656365697665642061206e6f6465207769746820616e20756e6b6e6f776e2060448201527f70726566697800000000000000000000000000000000000000000000000000006064820152608401610473565b6040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601d60248201527f526563656976656420616e20756e706172736561626c65206e6f64652e0000006044820152606401610473565b8061247f816139b7565b915050611fe8565b507f80000000000000000000000000000000000000000000000000000000000000008414866124b687866127d7565b909e909d50909b509950505050505050505050565b602081015180516060916113d4916124e5906001906135b6565b81518110611f4957611f49613a47565b6040805180820182526000808252602091820152815180830190925282518252808301908201526060906113d4906128b9565b6060600080600061253885612aec565b91945092509050600081600181111561255357612553613abb565b146125ba576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601860248201527f496e76616c696420524c502062797465732076616c75652e00000000000000006044820152606401610473565b6125c985602001518484612ef3565b95945050505050565b60606000825160026125e49190613808565b67ffffffffffffffff8111156125fc576125fc61321d565b6040519080825280601f01601f191660200182016040528015612626576020820181803683370190505b50905060005b835181101561274e57600484828151811061264957612649613a47565b01602001517fff0000000000000000000000000000000000000000000000000000000000000016901c8261267e836002613808565b8151811061268e5761268e613a47565b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a90535060108482815181106126d1576126d1613a47565b01602001516126e3919060f81c613a76565b60f81b826126f2836002613808565b6126fd906001613939565b8151811061270d5761270d613a47565b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a90535080612746816139b7565b91505061262c565b5092915050565b600060208251101561276957506020015190565b818060200190518101906113d4919061390c565b6000606060208360000151101561279e5761279783612fd2565b90506127aa565b6127a783612528565b90505b61174081612755565b60606113d46127d28360200151600081518110611f4957611f49613a47565b6125d2565b6060825182106127f657506040805160208101909152600081526113d4565b6113d1838384865161280891906135b6565b612fdd565b6000805b8084511180156128215750808351115b80156128a2575082818151811061283a5761283a613a47565b602001015160f81c60f81b7effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff191684828151811061287957612879613a47565b01602001517fff0000000000000000000000000000000000000000000000000000000000000016145b156113d157806128b1816139b7565b915050612811565b60606000806128c784612aec565b919350909150600190508160018111156128e3576128e3613abb565b1461294a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601760248201527f496e76616c696420524c50206c6973742076616c75652e0000000000000000006044820152606401610473565b6040805160208082526104208201909252600091816020015b60408051808201909152600080825260208201528152602001906001900390816129635790505090506000835b8651811015612ae15760208210612a29576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602a60248201527f50726f766964656420524c50206c6973742065786365656473206d6178206c6960448201527f7374206c656e6774682e000000000000000000000000000000000000000000006064820152608401610473565b600080612a666040518060400160405280858c60000151612a4a91906135b6565b8152602001858c60200151612a5f9190613939565b9052612aec565b509150915060405180604001604052808383612a829190613939565b8152602001848b60200151612a979190613939565b815250858581518110612aac57612aac613a47565b6020908102919091010152612ac2600185613939565b9350612ace8183613939565b612ad89084613939565b92505050612990565b508152949350505050565b600080600080846000015111612b5e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601860248201527f524c50206974656d2063616e6e6f74206265206e756c6c2e00000000000000006044820152606401610473565b6020840151805160001a607f8111612b83576000600160009450945094505050612eec565b60b78111612c19576000612b986080836135b6565b905080876000015111612c07576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601960248201527f496e76616c696420524c502073686f727420737472696e672e000000000000006044820152606401610473565b60019550935060009250612eec915050565b60bf8111612d3c576000612c2e60b7836135b6565b905080876000015111612c9d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f496e76616c696420524c50206c6f6e6720737472696e67206c656e6774682e006044820152606401610473565b600183015160208290036101000a9004612cb78183613939565b885111612d20576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601860248201527f496e76616c696420524c50206c6f6e6720737472696e672e00000000000000006044820152606401610473565b612d2b826001613939565b9650945060009350612eec92505050565b60f78111612dd1576000612d5160c0836135b6565b905080876000015111612dc0576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601760248201527f496e76616c696420524c502073686f7274206c6973742e0000000000000000006044820152606401610473565b600195509350849250612eec915050565b6000612dde60f7836135b6565b905080876000015111612e4d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601d60248201527f496e76616c696420524c50206c6f6e67206c697374206c656e6774682e0000006044820152606401610473565b600183015160208290036101000a9004612e678183613939565b885111612ed0576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601660248201527f496e76616c696420524c50206c6f6e67206c6973742e000000000000000000006044820152606401610473565b612edb826001613939565b9650945060019350612eec92505050565b9193909250565b606060008267ffffffffffffffff811115612f1057612f1061321d565b6040519080825280601f01601f191660200182016040528015612f3a576020820181803683370190505b509050805160001415612f4e579050611740565b6000612f5a8587613939565b90506020820160005b612f6e6020876138a9565b811015612fa55782518252612f84602084613939565b9250612f91602083613939565b915080612f9d816139b7565b915050612f63565b5060006001602087066020036101000a039050808251168119845116178252839450505050509392505050565b60606113d4826131ca565b606081612feb81601f613939565b1015613053576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600e60248201527f736c6963655f6f766572666c6f770000000000000000000000000000000000006044820152606401610473565b8261305e8382613939565b10156130c6576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600e60248201527f736c6963655f6f766572666c6f770000000000000000000000000000000000006044820152606401610473565b6130d08284613939565b8451101561313a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601160248201527f736c6963655f6f75744f66426f756e64730000000000000000000000000000006044820152606401610473565b60608215801561315957604051915060008252602082016040526131c1565b6040519150601f8416801560200281840101858101878315602002848b0101015b8183101561319257805183526020928301920161317a565b5050858452601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016604052505b50949350505050565b60606113d4826020015160008460000151612ef3565b6000602082840312156131f257600080fd5b5035919050565b803573ffffffffffffffffffffffffffffffffffffffff811681146115de57600080fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b604051601f82017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016810167ffffffffffffffff811182821017156132935761329361321d565b604052919050565b600080600080600060a086880312156132b357600080fd5b6132bc866131f9565b94506020808701359450604087013567ffffffffffffffff80821682146132e257600080fd5b90945060608801359081151582146132f957600080fd5b9093506080880135908082111561330f57600080fd5b818901915089601f83011261332357600080fd5b8135818111156133355761333561321d565b613365847fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f8401160161324c565b91508082528a8482850101111561337b57600080fd5b80848401858401376000848284010152508093505050509295509295909350565b60008083601f8401126133ae57600080fd5b50813567ffffffffffffffff8111156133c657600080fd5b6020830191508360208285010111156133de57600080fd5b9250929050565b60008060008060008060008060008060006101808c8e03121561340757600080fd5b8b359a5061341760208d016131f9565b995061342560408d016131f9565b985060608c0135975060808c0135965067ffffffffffffffff60a08d0135111561344e57600080fd5b61345e8d60a08e01358e0161339c565b909650945060c08c0135935060808c8e037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff2001121561349c57600080fd5b60e08c01925067ffffffffffffffff6101608d013511156134bc57600080fd5b6134cd8d6101608e01358e0161339c565b81935080925050509295989b509295989b9093969950565b6000815180845260005b8181101561350b576020818501810151868301820152016134ef565b8181111561351d576000602083870101525b50601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b85815284602082015267ffffffffffffffff84166040820152821515606082015260a060808201526000611db360a08301846134e5565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000828210156135c8576135c8613587565b500390565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b60008261360b5761360b6135cd565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff83147f80000000000000000000000000000000000000000000000000000000000000008314161561365f5761365f613587565b500590565b6000808312837f80000000000000000000000000000000000000000000000000000000000000000183128115161561369e5761369e613587565b837f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0183138116156136d2576136d2613587565b50500390565b60007f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff60008413600084138583048511828216161561371957613719613587565b7f8000000000000000000000000000000000000000000000000000000000000000600087128682058812818416161561375457613754613587565b6000871292508782058712848416161561377057613770613587565b8785058712818416161561378657613786613587565b505050929093029392505050565b6000808212827f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff038413811516156137ce576137ce613587565b827f800000000000000000000000000000000000000000000000000000000000000003841281161561380257613802613587565b50500190565b6000817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff048311821515161561384057613840613587565b500290565b600067ffffffffffffffff80831681851680830382111561386857613868613587565b01949350505050565b60006fffffffffffffffffffffffffffffffff808316818516818304811182151516156138a0576138a0613587565b02949350505050565b6000826138b8576138b86135cd565b500490565b6000604082840312156138cf57600080fd5b6040516040810181811067ffffffffffffffff821117156138f2576138f261321d565b604052825181526020928301519281019290925250919050565b60006020828403121561391e57600080fd5b5051919050565b600082613934576139346135cd565b500690565b6000821982111561394c5761394c613587565b500190565b60006080828403121561396357600080fd5b6040516080810181811067ffffffffffffffff821117156139865761398661321d565b8060405250823581526020830135602082015260408301356040820152606083013560608201528091505092915050565b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8214156139e9576139e9613587565b5060010190565b868152600073ffffffffffffffffffffffffffffffffffffffff808816602084015280871660408401525084606083015283608083015260c060a0830152613a3b60c08301846134e5565b98975050505050505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b600060ff831680613a8957613a896135cd565b8060ff84160691505092915050565b600060ff821660ff841680821015613ab257613ab2613587565b90039392505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fdfea164736f6c634300080a000a496e697469616c697a61626c653a20636f6e747261637420697320616c726561",
} }
// OptimismPortalABI is the input ABI used to generate the binding from. // OptimismPortalABI is the input ABI used to generate the binding from.
...@@ -457,37 +457,6 @@ func (_OptimismPortal *OptimismPortalCallerSession) TARGETRESOURCELIMIT() (*big. ...@@ -457,37 +457,6 @@ func (_OptimismPortal *OptimismPortalCallerSession) TARGETRESOURCELIMIT() (*big.
return _OptimismPortal.Contract.TARGETRESOURCELIMIT(&_OptimismPortal.CallOpts) return _OptimismPortal.Contract.TARGETRESOURCELIMIT(&_OptimismPortal.CallOpts)
} }
// VERSION is a free data retrieval call binding the contract method 0xffa1ad74.
//
// Solidity: function VERSION() view returns(uint8)
func (_OptimismPortal *OptimismPortalCaller) VERSION(opts *bind.CallOpts) (uint8, error) {
var out []interface{}
err := _OptimismPortal.contract.Call(opts, &out, "VERSION")
if err != nil {
return *new(uint8), err
}
out0 := *abi.ConvertType(out[0], new(uint8)).(*uint8)
return out0, err
}
// VERSION is a free data retrieval call binding the contract method 0xffa1ad74.
//
// Solidity: function VERSION() view returns(uint8)
func (_OptimismPortal *OptimismPortalSession) VERSION() (uint8, error) {
return _OptimismPortal.Contract.VERSION(&_OptimismPortal.CallOpts)
}
// VERSION is a free data retrieval call binding the contract method 0xffa1ad74.
//
// Solidity: function VERSION() view returns(uint8)
func (_OptimismPortal *OptimismPortalCallerSession) VERSION() (uint8, error) {
return _OptimismPortal.Contract.VERSION(&_OptimismPortal.CallOpts)
}
// FinalizedWithdrawals is a free data retrieval call binding the contract method 0xa14238e7. // FinalizedWithdrawals is a free data retrieval call binding the contract method 0xa14238e7.
// //
// Solidity: function finalizedWithdrawals(bytes32 ) view returns(bool) // Solidity: function finalizedWithdrawals(bytes32 ) view returns(bool)
......
...@@ -2,4 +2,4 @@ ...@@ -2,4 +2,4 @@
// This file is a generated binding and any manual changes will be lost. // This file is a generated binding and any manual changes will be lost.
package bindings package bindings
var OptimismPortalDeployedBin = "0x6080604052600436106100f65760003560e01c8063a14238e71161008a578063e9e05c4211610059578063e9e05c4214610376578063eecf1c3614610389578063f4daa2911461039c578063ffa1ad74146103d057600080fd5b8063a14238e71461027b578063ca3e99ba146102ab578063cd7c9789146102c0578063cff0ab96146102d557600080fd5b80636dbffb78116100c65780636dbffb78146101f35780638129fc1c14610223578063867ead13146102385780639bf62d821461024e57600080fd5b80621c2ff61461012257806313620abd1461018057806364b79208146101b95780636bb0291e146101de57600080fd5b3661011d5761011b3334620186a06000604051806020016040528060008152506103f7565b005b600080fd5b34801561012e57600080fd5b506101567f000000000000000000000000000000000000000000000000000000000000000081565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020015b60405180910390f35b34801561018c57600080fd5b50610198633b9aca0081565b6040516fffffffffffffffffffffffffffffffff9091168152602001610177565b3480156101c557600080fd5b506101d0627a120081565b604051908152602001610177565b3480156101ea57600080fd5b506101d0600481565b3480156101ff57600080fd5b5061021361020e366004613216565b61089d565b6040519015158152602001610177565b34801561022f57600080fd5b5061011b610bab565b34801561024457600080fd5b506101d061271081565b34801561025a57600080fd5b506033546101569073ffffffffffffffffffffffffffffffffffffffff1681565b34801561028757600080fd5b50610213610296366004613216565b60346020526000908152604090205460ff1681565b3480156102b757600080fd5b506101d0610cd1565b3480156102cc57600080fd5b506101d0600881565b3480156102e157600080fd5b5060015461033d906fffffffffffffffffffffffffffffffff81169067ffffffffffffffff7001000000000000000000000000000000008204811691780100000000000000000000000000000000000000000000000090041683565b604080516fffffffffffffffffffffffffffffffff909416845267ffffffffffffffff9283166020850152911690820152606001610177565b61011b6103843660046132d1565b6103f7565b61011b61039736600461341b565b610ce2565b3480156103a857600080fd5b506101d07f000000000000000000000000000000000000000000000000000000000000000081565b3480156103dc57600080fd5b506103e5600181565b60405160ff9091168152602001610177565b8260005a905083156104ae5773ffffffffffffffffffffffffffffffffffffffff8716156104ae57604080517f08c379a00000000000000000000000000000000000000000000000000000000081526020600482015260248101919091527f4f7074696d69736d506f7274616c3a206d7573742073656e6420746f2061646460448201527f72657373283029207768656e206372656174696e67206120636f6e747261637460648201526084015b60405180910390fd5b333281146104cf575033731111000000000000000000000000000000001111015b8773ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f78231ae6eb73366f912bb1d64351601fb76344c537bbab635ce14d0f376f0195348a8a8a8a604051610534959493929190613586565b60405180910390a350600154600090610573907801000000000000000000000000000000000000000000000000900467ffffffffffffffff16436135ec565b905080156106fc57600061058b6004627a1200613632565b6001546105b69190700100000000000000000000000000000000900467ffffffffffffffff1661369a565b9050600060086105ca6004627a1200613632565b6001546105ea9085906fffffffffffffffffffffffffffffffff1661370e565b6105f49190613632565b6105fe9190613632565b60015490915060009061064a906106349061062c9085906fffffffffffffffffffffffffffffffff166137ca565b6127106113f5565b6fffffffffffffffffffffffffffffffff611410565b905060018411156106bd576106ba610634670de0b6b3a76400006106a6610672600883613632565b61068490670de0b6b3a764000061369a565b61068f60018a6135ec565b6106a190670de0b6b3a764000061383e565b61141f565b6106b0908561370e565b61062c9190613632565b90505b6fffffffffffffffffffffffffffffffff16780100000000000000000000000000000000000000000000000067ffffffffffffffff4316021760015550505b6001805484919060109061072f908490700100000000000000000000000000000000900467ffffffffffffffff1661387b565b92506101000a81548167ffffffffffffffff021916908367ffffffffffffffff160217905550627a1200600160000160109054906101000a900467ffffffffffffffff1667ffffffffffffffff16131561080b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603c60248201527f4f7074696d69736d506f7274616c3a2063616e6e6f7420627579206d6f72652060448201527f676173207468616e20617661696c61626c6520676173206c696d69740000000060648201526084016104a5565b600154600090610837906fffffffffffffffffffffffffffffffff1667ffffffffffffffff86166138a7565b6fffffffffffffffffffffffffffffffff169050600061085b48633b9aca00611450565b61086590836138df565b905060005a61087490866135ec565b9050808211156108905761089061088b82846135ec565b611460565b5050505050505050505050565b6040517fa25ae55700000000000000000000000000000000000000000000000000000000815260048101829052600090819073ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000169063a25ae557906024016040805180830381865afa15801561092c573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061095091906138f3565b8051909150610b725760007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663529933df6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156109c6573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906109ea9190613942565b905060007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16634ab65d736040518163ffffffff1660e01b8152600401602060405180830381865afa158015610a59573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610a7d9190613942565b905084811115610a9257506000949350505050565b600082610a9f83886135ec565b610aa9919061395b565b905073ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000001663a25ae557610af183866135ec565b610afb908961396f565b6040518263ffffffff1660e01b8152600401610b1991815260200190565b6040805180830381865afa158015610b35573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610b5991906138f3565b8051909450610b6e5750600095945050505050565b5050505b7f00000000000000000000000000000000000000000000000000000000000000008160200151610ba2919061396f565b42119392505050565b60016000610bb88261148e565b90508015610bed57600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff166101001790555b603380547fffffffffffffffffffffffff00000000000000000000000000000000000000001661dead179055610c6860408051606081018252633b9aca00808252600060208301524367ffffffffffffffff169190920181905278010000000000000000000000000000000000000000000000000217600155565b8015610ccd57600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff16905560405160ff831681527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b5050565b610cdf6004627a1200613632565b81565b60335473ffffffffffffffffffffffffffffffffffffffff1661dead14610d8b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603f60248201527f4f7074696d69736d506f7274616c3a2063616e206f6e6c79207472696767657260448201527f206f6e65207769746864726177616c20706572207472616e73616374696f6e0060648201526084016104a5565b73ffffffffffffffffffffffffffffffffffffffff8916301415610e31576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603f60248201527f4f7074696d69736d506f7274616c3a20796f752063616e6e6f742073656e642060448201527f6d6573736167657320746f2074686520706f7274616c20636f6e74726163740060648201526084016104a5565b6040517fa25ae557000000000000000000000000000000000000000000000000000000008152600481018590526000907f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff169063a25ae557906024016040805180830381865afa158015610ebe573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610ee291906138f3565b90507f00000000000000000000000000000000000000000000000000000000000000008160200151610f14919061396f565b4211610fa2576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602d60248201527f4f7074696d69736d506f7274616c3a2070726f706f73616c206973206e6f742060448201527f7965742066696e616c697a65640000000000000000000000000000000000000060648201526084016104a5565b610fb9610fb436869003860186613987565b611619565b815114611048576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602960248201527f4f7074696d69736d506f7274616c3a20696e76616c6964206f7574707574207260448201527f6f6f742070726f6f66000000000000000000000000000000000000000000000060648201526084016104a5565b600061108e8d8d8d8d8d8d8d8080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525061167592505050565b90506110d581866040013586868080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152506116b492505050565b611161576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603260248201527f4f7074696d69736d506f7274616c3a20696e76616c696420776974686472617760448201527f616c20696e636c7573696f6e2070726f6f66000000000000000000000000000060648201526084016104a5565b60008181526034602052604090205460ff1615611200576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603560248201527f4f7074696d69736d506f7274616c3a207769746864726177616c20686173206160448201527f6c7265616479206265656e2066696e616c697a6564000000000000000000000060648201526084016104a5565b600081815260346020526040902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00166001179055611243614e208a61396f565b5a10156112d2576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603760248201527f4f7074696d69736d506f7274616c3a20696e73756666696369656e742067617360448201527f20746f2066696e616c697a65207769746864726177616c00000000000000000060648201526084016104a5565b603380547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff8e16179055604080516020601f8a0181900481028201810190925288815260009161135b918e918d918f918691908f908f908190840183828082843760009201919091525061177d92505050565b50603380547fffffffffffffffffffffffff00000000000000000000000000000000000000001661dead17905560405190915082907fdb5c7652857aa163daadd670e116628fb42e869d8ac4251ef8971d9e5727df1b906113c190841515815260200190565b60405180910390a25050505050505050505050505050565b73ffffffffffffffffffffffffffffffffffffffff163b151590565b6000818312156114055781611407565b825b90505b92915050565b60008183126114055781611407565b6000611407670de0b6b3a76400008361143786611808565b611441919061370e565b61144b9190613632565b611a4c565b6000818310156114055781611407565b6000805a90505b825a61147390836135ec565b101561148957611482826139ed565b9150611467565b505050565b60008054610100900460ff1615611545578160ff1660011480156114b15750303b155b61153d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201527f647920696e697469616c697a656400000000000000000000000000000000000060648201526084016104a5565b506000919050565b60005460ff8084169116106115dc576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201527f647920696e697469616c697a656400000000000000000000000000000000000060648201526084016104a5565b50600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660ff92909216919091179055600190565b919050565b60008160000151826020015183604001518460600151604051602001611658949392919093845260208401929092526040830152606082015260800190565b604051602081830303815290604052805190602001209050919050565b600086868686868660405160200161169296959493929190613a26565b6040516020818303038152906040528051906020012090509695505050505050565b604080516020810185905260009181018290528190606001604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0818403018152828252805160209182012090830181905292506117729101604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0818403018152828201909152600182527f01000000000000000000000000000000000000000000000000000000000000006020830152908587611c8b565b9150505b9392505050565b6000606060008060008661ffff1667ffffffffffffffff8111156117a3576117a3613253565b6040519080825280601f01601f1916602001820160405280156117cd576020820181803683370190505b5090506000808751602089018b8e8ef191503d9250868311156117ee578692505b828152826000602083013e90999098509650505050505050565b6000808213611873576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600960248201527f554e444546494e4544000000000000000000000000000000000000000000000060448201526064016104a5565b6000606061188084611caf565b03609f8181039490941b90931c6c465772b2bbbb5f824b15207a3081018102606090811d6d0388eaa27412d5aca026815d636e018202811d6d0df99ac502031bf953eff472fdcc018202811d6d13cdffb29d51d99322bdff5f2211018202811d6d0a0f742023def783a307a986912e018202811d6d01920d8043ca89b5239253284e42018202811d6c0b7a86d7375468fac667a0a527016c29508e458543d8aa4df2abee7883018302821d6d0139601a2efabe717e604cbb4894018302821d6d02247f7a7b6594320649aa03aba1018302821d7fffffffffffffffffffffffffffffffffffffff73c0c716a594e00d54e3c4cbc9018302821d7ffffffffffffffffffffffffffffffffffffffdc7b88c420e53a9890533129f6f01830290911d7fffffffffffffffffffffffffffffffffffffff465fda27eb4d63ded474e5f832019091027ffffffffffffffff5f6af8f7b3396644f18e157960000000000000000000000000105711340daa0d5f769dba1915cef59f0815a5506027d0267a36c0c95b3975ab3ee5b203a7614a3f75373f047d803ae7b6687f2b393909302929092017d57115e47018c7177eebf7cd370a3356a1b7863008a5ae8028c72b88642840160ae1d92915050565b60007ffffffffffffffffffffffffffffffffffffffffffffffffdb731c958f34d94c18213611a7d57506000919050565b680755bf798b4a1bf1e58212611aef576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600c60248201527f4558505f4f564552464c4f57000000000000000000000000000000000000000060448201526064016104a5565b6503782dace9d9604e83901b059150600060606bb17217f7d1cf79abc9e3b39884821b056b80000000000000000000000001901d6bb17217f7d1cf79abc9e3b39881029093037fffffffffffffffffffffffffffffffffffffffdbf3ccf1604d263450f02a550481018102606090811d6d0277594991cfc85f6e2461837cd9018202811d7fffffffffffffffffffffffffffffffffffffe5adedaa1cb095af9e4da10e363c018202811d6db1bbb201f443cf962f1a1d3db4a5018202811d7ffffffffffffffffffffffffffffffffffffd38dc772608b0ae56cce01296c0eb018202811d6e05180bb14799ab47a8a8cb2a527d57016d02d16720577bd19bf614176fe9ea6c10fe68e7fd37d0007b713f765084018402831d9081019084017ffffffffffffffffffffffffffffffffffffffe2c69812cf03b0763fd454a8f7e010290911d6e0587f503bb6ea29d25fcb7401964500190910279d835ebba824c98fb31b83b2ca45c000000000000000000000000010574029d9dc38563c32e5c2f6dc192ee70ef65f9978af30260c3939093039290921c92915050565b600080611c9786611d85565b9050611ca581868686611db7565b9695505050505050565b6000808211611d1a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600960248201527f554e444546494e4544000000000000000000000000000000000000000000000060448201526064016104a5565b5060016fffffffffffffffffffffffffffffffff821160071b82811c67ffffffffffffffff1060061b1782811c63ffffffff1060051b1782811c61ffff1060041b1782811c60ff10600390811b90911783811c600f1060021b1783811c909110821b1791821c111790565b60608180519060200120604051602001611da191815260200190565b6040516020818303038152906040529050919050565b6000806000611dc7878686611df4565b91509150818015611de957508051602080830191909120875191880191909120145b979650505050505050565b600060606000611e0385611ee9565b90506000806000611e15848a89611fe4565b81519295509093509150158080611e295750815b611e8f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601a60248201527f50726f76696465642070726f6f6620697320696e76616c69642e00000000000060448201526064016104a5565b600081611eab5760405180602001604052806000815250611ed7565b611ed786611eba6001886135ec565b81518110611eca57611eca613a7d565b6020026020010151612501565b919b919a509098505050505050505050565b60606000611ef68361252b565b90506000815167ffffffffffffffff811115611f1457611f14613253565b604051908082528060200260200182016040528015611f5957816020015b6040805180820190915260608082526020820152815260200190600190039081611f325790505b50905060005b8251811015611fdc576000611f8c848381518110611f7f57611f7f613a7d565b602002602001015161255e565b90506040518060400160405280828152602001611fa88361252b565b815250838381518110611fbd57611fbd613a7d565b6020026020010181905250508080611fd4906139ed565b915050611f5f565b509392505050565b60006060818080611ff487612608565b9050600086905060008061201b604051806040016040528060608152602001606081525090565b60005b8c518110156124bd578c818151811061203957612039613a7d565b60200260200101519150828461204f919061396f565b935061205c60018861396f565b9650836120da578151805160209091012085146120d5576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601160248201527f496e76616c696420726f6f74206861736800000000000000000000000000000060448201526064016104a5565b6121cb565b815151602011612156578151805160209091012085146120d5576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601b60248201527f496e76616c6964206c6172676520696e7465726e616c2068617368000000000060448201526064016104a5565b84612164836000015161278b565b146121cb576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601a60248201527f496e76616c696420696e7465726e616c206e6f6465206861736800000000000060448201526064016104a5565b6121d76010600161396f565b82602001515114156122505785518414156121f1576124bd565b600086858151811061220557612205613a7d565b602001015160f81c60f81b60f81c9050600083602001518260ff168151811061223057612230613a7d565b60200260200101519050612243816127b3565b96506001945050506124ab565b60028260200151511415612449576000612269836127e9565b905060008160008151811061228057612280613a7d565b016020015160f81c90506000612297600283613aac565b6122a2906002613ace565b905060006122b3848360ff1661280d565b905060006122c18b8a61280d565b905060006122cf8383612843565b905060ff8516600214806122e6575060ff85166003145b1561233c578083511480156122fb5750808251145b1561230d5761230a818b61396f565b99505b507f800000000000000000000000000000000000000000000000000000000000000099506124bd945050505050565b60ff8516158061234f575060ff85166001145b156123c1578251811461238b57507f800000000000000000000000000000000000000000000000000000000000000099506124bd945050505050565b6123b288602001516001815181106123a5576123a5613a7d565b60200260200101516127b3565b9a5097506124ab945050505050565b6040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f52656365697665642061206e6f6465207769746820616e20756e6b6e6f776e2060448201527f707265666978000000000000000000000000000000000000000000000000000060648201526084016104a5565b6040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601d60248201527f526563656976656420616e20756e706172736561626c65206e6f64652e00000060448201526064016104a5565b806124b5816139ed565b91505061201e565b507f80000000000000000000000000000000000000000000000000000000000000008414866124ec878661280d565b909e909d50909b509950505050505050505050565b6020810151805160609161140a9161251b906001906135ec565b81518110611f7f57611f7f613a7d565b60408051808201825260008082526020918201528151808301909252825182528083019082015260609061140a906128ef565b6060600080600061256e85612b22565b91945092509050600081600181111561258957612589613af1565b146125f0576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601860248201527f496e76616c696420524c502062797465732076616c75652e000000000000000060448201526064016104a5565b6125ff85602001518484612f29565b95945050505050565b606060008251600261261a919061383e565b67ffffffffffffffff81111561263257612632613253565b6040519080825280601f01601f19166020018201604052801561265c576020820181803683370190505b50905060005b835181101561278457600484828151811061267f5761267f613a7d565b01602001517fff0000000000000000000000000000000000000000000000000000000000000016901c826126b483600261383e565b815181106126c4576126c4613a7d565b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350601084828151811061270757612707613a7d565b0160200151612719919060f81c613aac565b60f81b8261272883600261383e565b61273390600161396f565b8151811061274357612743613a7d565b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a9053508061277c816139ed565b915050612662565b5092915050565b600060208251101561279f57506020015190565b8180602001905181019061140a9190613942565b600060606020836000015110156127d4576127cd83613008565b90506127e0565b6127dd8361255e565b90505b6117768161278b565b606061140a6128088360200151600081518110611f7f57611f7f613a7d565b612608565b60608251821061282c575060408051602081019091526000815261140a565b611407838384865161283e91906135ec565b613013565b6000805b8084511180156128575750808351115b80156128d8575082818151811061287057612870613a7d565b602001015160f81c60f81b7effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff19168482815181106128af576128af613a7d565b01602001517fff0000000000000000000000000000000000000000000000000000000000000016145b1561140757806128e7816139ed565b915050612847565b60606000806128fd84612b22565b9193509091506001905081600181111561291957612919613af1565b14612980576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601760248201527f496e76616c696420524c50206c6973742076616c75652e00000000000000000060448201526064016104a5565b6040805160208082526104208201909252600091816020015b60408051808201909152600080825260208201528152602001906001900390816129995790505090506000835b8651811015612b175760208210612a5f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602a60248201527f50726f766964656420524c50206c6973742065786365656473206d6178206c6960448201527f7374206c656e6774682e0000000000000000000000000000000000000000000060648201526084016104a5565b600080612a9c6040518060400160405280858c60000151612a8091906135ec565b8152602001858c60200151612a95919061396f565b9052612b22565b509150915060405180604001604052808383612ab8919061396f565b8152602001848b60200151612acd919061396f565b815250858581518110612ae257612ae2613a7d565b6020908102919091010152612af860018561396f565b9350612b04818361396f565b612b0e908461396f565b925050506129c6565b508152949350505050565b600080600080846000015111612b94576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601860248201527f524c50206974656d2063616e6e6f74206265206e756c6c2e000000000000000060448201526064016104a5565b6020840151805160001a607f8111612bb9576000600160009450945094505050612f22565b60b78111612c4f576000612bce6080836135ec565b905080876000015111612c3d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601960248201527f496e76616c696420524c502073686f727420737472696e672e0000000000000060448201526064016104a5565b60019550935060009250612f22915050565b60bf8111612d72576000612c6460b7836135ec565b905080876000015111612cd3576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f496e76616c696420524c50206c6f6e6720737472696e67206c656e6774682e0060448201526064016104a5565b600183015160208290036101000a9004612ced818361396f565b885111612d56576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601860248201527f496e76616c696420524c50206c6f6e6720737472696e672e000000000000000060448201526064016104a5565b612d6182600161396f565b9650945060009350612f2292505050565b60f78111612e07576000612d8760c0836135ec565b905080876000015111612df6576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601760248201527f496e76616c696420524c502073686f7274206c6973742e00000000000000000060448201526064016104a5565b600195509350849250612f22915050565b6000612e1460f7836135ec565b905080876000015111612e83576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601d60248201527f496e76616c696420524c50206c6f6e67206c697374206c656e6774682e00000060448201526064016104a5565b600183015160208290036101000a9004612e9d818361396f565b885111612f06576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601660248201527f496e76616c696420524c50206c6f6e67206c6973742e0000000000000000000060448201526064016104a5565b612f1182600161396f565b9650945060019350612f2292505050565b9193909250565b606060008267ffffffffffffffff811115612f4657612f46613253565b6040519080825280601f01601f191660200182016040528015612f70576020820181803683370190505b509050805160001415612f84579050611776565b6000612f90858761396f565b90506020820160005b612fa46020876138df565b811015612fdb5782518252612fba60208461396f565b9250612fc760208361396f565b915080612fd3816139ed565b915050612f99565b5060006001602087066020036101000a039050808251168119845116178252839450505050509392505050565b606061140a82613200565b60608161302181601f61396f565b1015613089576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600e60248201527f736c6963655f6f766572666c6f7700000000000000000000000000000000000060448201526064016104a5565b82613094838261396f565b10156130fc576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600e60248201527f736c6963655f6f766572666c6f7700000000000000000000000000000000000060448201526064016104a5565b613106828461396f565b84511015613170576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601160248201527f736c6963655f6f75744f66426f756e647300000000000000000000000000000060448201526064016104a5565b60608215801561318f57604051915060008252602082016040526131f7565b6040519150601f8416801560200281840101858101878315602002848b0101015b818310156131c85780518352602092830192016131b0565b5050858452601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016604052505b50949350505050565b606061140a826020015160008460000151612f29565b60006020828403121561322857600080fd5b5035919050565b803573ffffffffffffffffffffffffffffffffffffffff8116811461161457600080fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b604051601f82017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016810167ffffffffffffffff811182821017156132c9576132c9613253565b604052919050565b600080600080600060a086880312156132e957600080fd5b6132f28661322f565b94506020808701359450604087013567ffffffffffffffff808216821461331857600080fd5b909450606088013590811515821461332f57600080fd5b9093506080880135908082111561334557600080fd5b818901915089601f83011261335957600080fd5b81358181111561336b5761336b613253565b61339b847fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f84011601613282565b91508082528a848285010111156133b157600080fd5b80848401858401376000848284010152508093505050509295509295909350565b60008083601f8401126133e457600080fd5b50813567ffffffffffffffff8111156133fc57600080fd5b60208301915083602082850101111561341457600080fd5b9250929050565b60008060008060008060008060008060006101808c8e03121561343d57600080fd5b8b359a5061344d60208d0161322f565b995061345b60408d0161322f565b985060608c0135975060808c0135965067ffffffffffffffff60a08d0135111561348457600080fd5b6134948d60a08e01358e016133d2565b909650945060c08c0135935060808c8e037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff200112156134d257600080fd5b60e08c01925067ffffffffffffffff6101608d013511156134f257600080fd5b6135038d6101608e01358e016133d2565b81935080925050509295989b509295989b9093969950565b6000815180845260005b8181101561354157602081850181015186830182015201613525565b81811115613553576000602083870101525b50601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b85815284602082015267ffffffffffffffff84166040820152821515606082015260a060808201526000611de960a083018461351b565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000828210156135fe576135fe6135bd565b500390565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b60008261364157613641613603565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff83147f800000000000000000000000000000000000000000000000000000000000000083141615613695576136956135bd565b500590565b6000808312837f8000000000000000000000000000000000000000000000000000000000000000018312811516156136d4576136d46135bd565b837f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff018313811615613708576137086135bd565b50500390565b60007f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff60008413600084138583048511828216161561374f5761374f6135bd565b7f8000000000000000000000000000000000000000000000000000000000000000600087128682058812818416161561378a5761378a6135bd565b600087129250878205871284841616156137a6576137a66135bd565b878505871281841616156137bc576137bc6135bd565b505050929093029392505050565b6000808212827f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff03841381151615613804576138046135bd565b827f8000000000000000000000000000000000000000000000000000000000000000038412811615613838576138386135bd565b50500190565b6000817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0483118215151615613876576138766135bd565b500290565b600067ffffffffffffffff80831681851680830382111561389e5761389e6135bd565b01949350505050565b60006fffffffffffffffffffffffffffffffff808316818516818304811182151516156138d6576138d66135bd565b02949350505050565b6000826138ee576138ee613603565b500490565b60006040828403121561390557600080fd5b6040516040810181811067ffffffffffffffff8211171561392857613928613253565b604052825181526020928301519281019290925250919050565b60006020828403121561395457600080fd5b5051919050565b60008261396a5761396a613603565b500690565b60008219821115613982576139826135bd565b500190565b60006080828403121561399957600080fd5b6040516080810181811067ffffffffffffffff821117156139bc576139bc613253565b8060405250823581526020830135602082015260408301356040820152606083013560608201528091505092915050565b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff821415613a1f57613a1f6135bd565b5060010190565b868152600073ffffffffffffffffffffffffffffffffffffffff808816602084015280871660408401525084606083015283608083015260c060a0830152613a7160c083018461351b565b98975050505050505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b600060ff831680613abf57613abf613603565b8060ff84160691505092915050565b600060ff821660ff841680821015613ae857613ae86135bd565b90039392505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fdfea164736f6c634300080a000a" var OptimismPortalDeployedBin = "0x6080604052600436106100eb5760003560e01c80639bf62d821161008a578063cff0ab9611610059578063cff0ab96146102ca578063e9e05c421461036b578063eecf1c361461037e578063f4daa2911461039157600080fd5b80639bf62d8214610243578063a14238e714610270578063ca3e99ba146102a0578063cd7c9789146102b557600080fd5b80636bb0291e116100c65780636bb0291e146101d35780636dbffb78146101e85780638129fc1c14610218578063867ead131461022d57600080fd5b80621c2ff61461011757806313620abd1461017557806364b79208146101ae57600080fd5b36610112576101103334620186a06000604051806020016040528060008152506103c5565b005b600080fd5b34801561012357600080fd5b5061014b7f000000000000000000000000000000000000000000000000000000000000000081565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020015b60405180910390f35b34801561018157600080fd5b5061018d633b9aca0081565b6040516fffffffffffffffffffffffffffffffff909116815260200161016c565b3480156101ba57600080fd5b506101c5627a120081565b60405190815260200161016c565b3480156101df57600080fd5b506101c5600481565b3480156101f457600080fd5b506102086102033660046131e0565b61086b565b604051901515815260200161016c565b34801561022457600080fd5b50610110610b79565b34801561023957600080fd5b506101c561271081565b34801561024f57600080fd5b5060335461014b9073ffffffffffffffffffffffffffffffffffffffff1681565b34801561027c57600080fd5b5061020861028b3660046131e0565b60346020526000908152604090205460ff1681565b3480156102ac57600080fd5b506101c5610c9b565b3480156102c157600080fd5b506101c5600881565b3480156102d657600080fd5b50600154610332906fffffffffffffffffffffffffffffffff81169067ffffffffffffffff7001000000000000000000000000000000008204811691780100000000000000000000000000000000000000000000000090041683565b604080516fffffffffffffffffffffffffffffffff909416845267ffffffffffffffff928316602085015291169082015260600161016c565b61011061037936600461329b565b6103c5565b61011061038c3660046133e5565b610cac565b34801561039d57600080fd5b506101c57f000000000000000000000000000000000000000000000000000000000000000081565b8260005a9050831561047c5773ffffffffffffffffffffffffffffffffffffffff87161561047c57604080517f08c379a00000000000000000000000000000000000000000000000000000000081526020600482015260248101919091527f4f7074696d69736d506f7274616c3a206d7573742073656e6420746f2061646460448201527f72657373283029207768656e206372656174696e67206120636f6e747261637460648201526084015b60405180910390fd5b3332811461049d575033731111000000000000000000000000000000001111015b8773ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f78231ae6eb73366f912bb1d64351601fb76344c537bbab635ce14d0f376f0195348a8a8a8a604051610502959493929190613550565b60405180910390a350600154600090610541907801000000000000000000000000000000000000000000000000900467ffffffffffffffff16436135b6565b905080156106ca5760006105596004627a12006135fc565b6001546105849190700100000000000000000000000000000000900467ffffffffffffffff16613664565b9050600060086105986004627a12006135fc565b6001546105b89085906fffffffffffffffffffffffffffffffff166136d8565b6105c291906135fc565b6105cc91906135fc565b60015490915060009061061890610602906105fa9085906fffffffffffffffffffffffffffffffff16613794565b6127106113bf565b6fffffffffffffffffffffffffffffffff6113da565b9050600184111561068b57610688610602670de0b6b3a76400006106746106406008836135fc565b61065290670de0b6b3a7640000613664565b61065d60018a6135b6565b61066f90670de0b6b3a7640000613808565b6113e9565b61067e90856136d8565b6105fa91906135fc565b90505b6fffffffffffffffffffffffffffffffff16780100000000000000000000000000000000000000000000000067ffffffffffffffff4316021760015550505b600180548491906010906106fd908490700100000000000000000000000000000000900467ffffffffffffffff16613845565b92506101000a81548167ffffffffffffffff021916908367ffffffffffffffff160217905550627a1200600160000160109054906101000a900467ffffffffffffffff1667ffffffffffffffff1613156107d9576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603c60248201527f4f7074696d69736d506f7274616c3a2063616e6e6f7420627579206d6f72652060448201527f676173207468616e20617661696c61626c6520676173206c696d6974000000006064820152608401610473565b600154600090610805906fffffffffffffffffffffffffffffffff1667ffffffffffffffff8616613871565b6fffffffffffffffffffffffffffffffff169050600061082948633b9aca0061141a565b61083390836138a9565b905060005a61084290866135b6565b90508082111561085e5761085e61085982846135b6565b61142a565b5050505050505050505050565b6040517fa25ae55700000000000000000000000000000000000000000000000000000000815260048101829052600090819073ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000169063a25ae557906024016040805180830381865afa1580156108fa573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061091e91906138bd565b8051909150610b405760007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663529933df6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610994573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906109b8919061390c565b905060007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16634ab65d736040518163ffffffff1660e01b8152600401602060405180830381865afa158015610a27573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610a4b919061390c565b905084811115610a6057506000949350505050565b600082610a6d83886135b6565b610a779190613925565b905073ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000001663a25ae557610abf83866135b6565b610ac99089613939565b6040518263ffffffff1660e01b8152600401610ae791815260200190565b6040805180830381865afa158015610b03573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610b2791906138bd565b8051909450610b3c5750600095945050505050565b5050505b7f00000000000000000000000000000000000000000000000000000000000000008160200151610b709190613939565b42119392505050565b6000610b856001611458565b90508015610bba57600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff166101001790555b603380547fffffffffffffffffffffffff00000000000000000000000000000000000000001661dead179055610c3560408051606081018252633b9aca00808252600060208301524367ffffffffffffffff169190920181905278010000000000000000000000000000000000000000000000000217600155565b8015610c9857600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b50565b610ca96004627a12006135fc565b81565b60335473ffffffffffffffffffffffffffffffffffffffff1661dead14610d55576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603f60248201527f4f7074696d69736d506f7274616c3a2063616e206f6e6c79207472696767657260448201527f206f6e65207769746864726177616c20706572207472616e73616374696f6e006064820152608401610473565b73ffffffffffffffffffffffffffffffffffffffff8916301415610dfb576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603f60248201527f4f7074696d69736d506f7274616c3a20796f752063616e6e6f742073656e642060448201527f6d6573736167657320746f2074686520706f7274616c20636f6e7472616374006064820152608401610473565b6040517fa25ae557000000000000000000000000000000000000000000000000000000008152600481018590526000907f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff169063a25ae557906024016040805180830381865afa158015610e88573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610eac91906138bd565b90507f00000000000000000000000000000000000000000000000000000000000000008160200151610ede9190613939565b4211610f6c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602d60248201527f4f7074696d69736d506f7274616c3a2070726f706f73616c206973206e6f742060448201527f7965742066696e616c697a6564000000000000000000000000000000000000006064820152608401610473565b610f83610f7e36869003860186613951565b6115e3565b815114611012576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602960248201527f4f7074696d69736d506f7274616c3a20696e76616c6964206f7574707574207260448201527f6f6f742070726f6f6600000000000000000000000000000000000000000000006064820152608401610473565b60006110588d8d8d8d8d8d8d8080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525061163f92505050565b905061109f81866040013586868080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525061167e92505050565b61112b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603260248201527f4f7074696d69736d506f7274616c3a20696e76616c696420776974686472617760448201527f616c20696e636c7573696f6e2070726f6f6600000000000000000000000000006064820152608401610473565b60008181526034602052604090205460ff16156111ca576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603560248201527f4f7074696d69736d506f7274616c3a207769746864726177616c20686173206160448201527f6c7265616479206265656e2066696e616c697a656400000000000000000000006064820152608401610473565b600081815260346020526040902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016600117905561120d614e208a613939565b5a101561129c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603760248201527f4f7074696d69736d506f7274616c3a20696e73756666696369656e742067617360448201527f20746f2066696e616c697a65207769746864726177616c0000000000000000006064820152608401610473565b603380547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff8e16179055604080516020601f8a01819004810282018101909252888152600091611325918e918d918f918691908f908f908190840183828082843760009201919091525061174792505050565b50603380547fffffffffffffffffffffffff00000000000000000000000000000000000000001661dead17905560405190915082907fdb5c7652857aa163daadd670e116628fb42e869d8ac4251ef8971d9e5727df1b9061138b90841515815260200190565b60405180910390a25050505050505050505050505050565b73ffffffffffffffffffffffffffffffffffffffff163b151590565b6000818312156113cf57816113d1565b825b90505b92915050565b60008183126113cf57816113d1565b60006113d1670de0b6b3a764000083611401866117d2565b61140b91906136d8565b61141591906135fc565b611a16565b6000818310156113cf57816113d1565b6000805a90505b825a61143d90836135b6565b10156114535761144c826139b7565b9150611431565b505050565b60008054610100900460ff161561150f578160ff16600114801561147b5750303b155b611507576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201527f647920696e697469616c697a65640000000000000000000000000000000000006064820152608401610473565b506000919050565b60005460ff8084169116106115a6576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201527f647920696e697469616c697a65640000000000000000000000000000000000006064820152608401610473565b50600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660ff92909216919091179055600190565b919050565b60008160000151826020015183604001518460600151604051602001611622949392919093845260208401929092526040830152606082015260800190565b604051602081830303815290604052805190602001209050919050565b600086868686868660405160200161165c969594939291906139f0565b6040516020818303038152906040528051906020012090509695505050505050565b604080516020810185905260009181018290528190606001604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181528282528051602091820120908301819052925061173c9101604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0818403018152828201909152600182527f01000000000000000000000000000000000000000000000000000000000000006020830152908587611c55565b9150505b9392505050565b6000606060008060008661ffff1667ffffffffffffffff81111561176d5761176d61321d565b6040519080825280601f01601f191660200182016040528015611797576020820181803683370190505b5090506000808751602089018b8e8ef191503d9250868311156117b8578692505b828152826000602083013e90999098509650505050505050565b600080821361183d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600960248201527f554e444546494e454400000000000000000000000000000000000000000000006044820152606401610473565b6000606061184a84611c79565b03609f8181039490941b90931c6c465772b2bbbb5f824b15207a3081018102606090811d6d0388eaa27412d5aca026815d636e018202811d6d0df99ac502031bf953eff472fdcc018202811d6d13cdffb29d51d99322bdff5f2211018202811d6d0a0f742023def783a307a986912e018202811d6d01920d8043ca89b5239253284e42018202811d6c0b7a86d7375468fac667a0a527016c29508e458543d8aa4df2abee7883018302821d6d0139601a2efabe717e604cbb4894018302821d6d02247f7a7b6594320649aa03aba1018302821d7fffffffffffffffffffffffffffffffffffffff73c0c716a594e00d54e3c4cbc9018302821d7ffffffffffffffffffffffffffffffffffffffdc7b88c420e53a9890533129f6f01830290911d7fffffffffffffffffffffffffffffffffffffff465fda27eb4d63ded474e5f832019091027ffffffffffffffff5f6af8f7b3396644f18e157960000000000000000000000000105711340daa0d5f769dba1915cef59f0815a5506027d0267a36c0c95b3975ab3ee5b203a7614a3f75373f047d803ae7b6687f2b393909302929092017d57115e47018c7177eebf7cd370a3356a1b7863008a5ae8028c72b88642840160ae1d92915050565b60007ffffffffffffffffffffffffffffffffffffffffffffffffdb731c958f34d94c18213611a4757506000919050565b680755bf798b4a1bf1e58212611ab9576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600c60248201527f4558505f4f564552464c4f5700000000000000000000000000000000000000006044820152606401610473565b6503782dace9d9604e83901b059150600060606bb17217f7d1cf79abc9e3b39884821b056b80000000000000000000000001901d6bb17217f7d1cf79abc9e3b39881029093037fffffffffffffffffffffffffffffffffffffffdbf3ccf1604d263450f02a550481018102606090811d6d0277594991cfc85f6e2461837cd9018202811d7fffffffffffffffffffffffffffffffffffffe5adedaa1cb095af9e4da10e363c018202811d6db1bbb201f443cf962f1a1d3db4a5018202811d7ffffffffffffffffffffffffffffffffffffd38dc772608b0ae56cce01296c0eb018202811d6e05180bb14799ab47a8a8cb2a527d57016d02d16720577bd19bf614176fe9ea6c10fe68e7fd37d0007b713f765084018402831d9081019084017ffffffffffffffffffffffffffffffffffffffe2c69812cf03b0763fd454a8f7e010290911d6e0587f503bb6ea29d25fcb7401964500190910279d835ebba824c98fb31b83b2ca45c000000000000000000000000010574029d9dc38563c32e5c2f6dc192ee70ef65f9978af30260c3939093039290921c92915050565b600080611c6186611d4f565b9050611c6f81868686611d81565b9695505050505050565b6000808211611ce4576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600960248201527f554e444546494e454400000000000000000000000000000000000000000000006044820152606401610473565b5060016fffffffffffffffffffffffffffffffff821160071b82811c67ffffffffffffffff1060061b1782811c63ffffffff1060051b1782811c61ffff1060041b1782811c60ff10600390811b90911783811c600f1060021b1783811c909110821b1791821c111790565b60608180519060200120604051602001611d6b91815260200190565b6040516020818303038152906040529050919050565b6000806000611d91878686611dbe565b91509150818015611db357508051602080830191909120875191880191909120145b979650505050505050565b600060606000611dcd85611eb3565b90506000806000611ddf848a89611fae565b81519295509093509150158080611df35750815b611e59576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601a60248201527f50726f76696465642070726f6f6620697320696e76616c69642e0000000000006044820152606401610473565b600081611e755760405180602001604052806000815250611ea1565b611ea186611e846001886135b6565b81518110611e9457611e94613a47565b60200260200101516124cb565b919b919a509098505050505050505050565b60606000611ec0836124f5565b90506000815167ffffffffffffffff811115611ede57611ede61321d565b604051908082528060200260200182016040528015611f2357816020015b6040805180820190915260608082526020820152815260200190600190039081611efc5790505b50905060005b8251811015611fa6576000611f56848381518110611f4957611f49613a47565b6020026020010151612528565b90506040518060400160405280828152602001611f72836124f5565b815250838381518110611f8757611f87613a47565b6020026020010181905250508080611f9e906139b7565b915050611f29565b509392505050565b60006060818080611fbe876125d2565b90506000869050600080611fe5604051806040016040528060608152602001606081525090565b60005b8c51811015612487578c818151811061200357612003613a47565b6020026020010151915082846120199190613939565b9350612026600188613939565b9650836120a45781518051602090910120851461209f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601160248201527f496e76616c696420726f6f7420686173680000000000000000000000000000006044820152606401610473565b612195565b8151516020116121205781518051602090910120851461209f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601b60248201527f496e76616c6964206c6172676520696e7465726e616c206861736800000000006044820152606401610473565b8461212e8360000151612755565b14612195576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601a60248201527f496e76616c696420696e7465726e616c206e6f646520686173680000000000006044820152606401610473565b6121a160106001613939565b826020015151141561221a5785518414156121bb57612487565b60008685815181106121cf576121cf613a47565b602001015160f81c60f81b60f81c9050600083602001518260ff16815181106121fa576121fa613a47565b6020026020010151905061220d8161277d565b9650600194505050612475565b60028260200151511415612413576000612233836127b3565b905060008160008151811061224a5761224a613a47565b016020015160f81c90506000612261600283613a76565b61226c906002613a98565b9050600061227d848360ff166127d7565b9050600061228b8b8a6127d7565b90506000612299838361280d565b905060ff8516600214806122b0575060ff85166003145b15612306578083511480156122c55750808251145b156122d7576122d4818b613939565b99505b507f80000000000000000000000000000000000000000000000000000000000000009950612487945050505050565b60ff85161580612319575060ff85166001145b1561238b578251811461235557507f80000000000000000000000000000000000000000000000000000000000000009950612487945050505050565b61237c886020015160018151811061236f5761236f613a47565b602002602001015161277d565b9a509750612475945050505050565b6040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f52656365697665642061206e6f6465207769746820616e20756e6b6e6f776e2060448201527f70726566697800000000000000000000000000000000000000000000000000006064820152608401610473565b6040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601d60248201527f526563656976656420616e20756e706172736561626c65206e6f64652e0000006044820152606401610473565b8061247f816139b7565b915050611fe8565b507f80000000000000000000000000000000000000000000000000000000000000008414866124b687866127d7565b909e909d50909b509950505050505050505050565b602081015180516060916113d4916124e5906001906135b6565b81518110611f4957611f49613a47565b6040805180820182526000808252602091820152815180830190925282518252808301908201526060906113d4906128b9565b6060600080600061253885612aec565b91945092509050600081600181111561255357612553613abb565b146125ba576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601860248201527f496e76616c696420524c502062797465732076616c75652e00000000000000006044820152606401610473565b6125c985602001518484612ef3565b95945050505050565b60606000825160026125e49190613808565b67ffffffffffffffff8111156125fc576125fc61321d565b6040519080825280601f01601f191660200182016040528015612626576020820181803683370190505b50905060005b835181101561274e57600484828151811061264957612649613a47565b01602001517fff0000000000000000000000000000000000000000000000000000000000000016901c8261267e836002613808565b8151811061268e5761268e613a47565b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a90535060108482815181106126d1576126d1613a47565b01602001516126e3919060f81c613a76565b60f81b826126f2836002613808565b6126fd906001613939565b8151811061270d5761270d613a47565b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a90535080612746816139b7565b91505061262c565b5092915050565b600060208251101561276957506020015190565b818060200190518101906113d4919061390c565b6000606060208360000151101561279e5761279783612fd2565b90506127aa565b6127a783612528565b90505b61174081612755565b60606113d46127d28360200151600081518110611f4957611f49613a47565b6125d2565b6060825182106127f657506040805160208101909152600081526113d4565b6113d1838384865161280891906135b6565b612fdd565b6000805b8084511180156128215750808351115b80156128a2575082818151811061283a5761283a613a47565b602001015160f81c60f81b7effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff191684828151811061287957612879613a47565b01602001517fff0000000000000000000000000000000000000000000000000000000000000016145b156113d157806128b1816139b7565b915050612811565b60606000806128c784612aec565b919350909150600190508160018111156128e3576128e3613abb565b1461294a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601760248201527f496e76616c696420524c50206c6973742076616c75652e0000000000000000006044820152606401610473565b6040805160208082526104208201909252600091816020015b60408051808201909152600080825260208201528152602001906001900390816129635790505090506000835b8651811015612ae15760208210612a29576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602a60248201527f50726f766964656420524c50206c6973742065786365656473206d6178206c6960448201527f7374206c656e6774682e000000000000000000000000000000000000000000006064820152608401610473565b600080612a666040518060400160405280858c60000151612a4a91906135b6565b8152602001858c60200151612a5f9190613939565b9052612aec565b509150915060405180604001604052808383612a829190613939565b8152602001848b60200151612a979190613939565b815250858581518110612aac57612aac613a47565b6020908102919091010152612ac2600185613939565b9350612ace8183613939565b612ad89084613939565b92505050612990565b508152949350505050565b600080600080846000015111612b5e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601860248201527f524c50206974656d2063616e6e6f74206265206e756c6c2e00000000000000006044820152606401610473565b6020840151805160001a607f8111612b83576000600160009450945094505050612eec565b60b78111612c19576000612b986080836135b6565b905080876000015111612c07576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601960248201527f496e76616c696420524c502073686f727420737472696e672e000000000000006044820152606401610473565b60019550935060009250612eec915050565b60bf8111612d3c576000612c2e60b7836135b6565b905080876000015111612c9d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f496e76616c696420524c50206c6f6e6720737472696e67206c656e6774682e006044820152606401610473565b600183015160208290036101000a9004612cb78183613939565b885111612d20576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601860248201527f496e76616c696420524c50206c6f6e6720737472696e672e00000000000000006044820152606401610473565b612d2b826001613939565b9650945060009350612eec92505050565b60f78111612dd1576000612d5160c0836135b6565b905080876000015111612dc0576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601760248201527f496e76616c696420524c502073686f7274206c6973742e0000000000000000006044820152606401610473565b600195509350849250612eec915050565b6000612dde60f7836135b6565b905080876000015111612e4d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601d60248201527f496e76616c696420524c50206c6f6e67206c697374206c656e6774682e0000006044820152606401610473565b600183015160208290036101000a9004612e678183613939565b885111612ed0576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601660248201527f496e76616c696420524c50206c6f6e67206c6973742e000000000000000000006044820152606401610473565b612edb826001613939565b9650945060019350612eec92505050565b9193909250565b606060008267ffffffffffffffff811115612f1057612f1061321d565b6040519080825280601f01601f191660200182016040528015612f3a576020820181803683370190505b509050805160001415612f4e579050611740565b6000612f5a8587613939565b90506020820160005b612f6e6020876138a9565b811015612fa55782518252612f84602084613939565b9250612f91602083613939565b915080612f9d816139b7565b915050612f63565b5060006001602087066020036101000a039050808251168119845116178252839450505050509392505050565b60606113d4826131ca565b606081612feb81601f613939565b1015613053576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600e60248201527f736c6963655f6f766572666c6f770000000000000000000000000000000000006044820152606401610473565b8261305e8382613939565b10156130c6576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600e60248201527f736c6963655f6f766572666c6f770000000000000000000000000000000000006044820152606401610473565b6130d08284613939565b8451101561313a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601160248201527f736c6963655f6f75744f66426f756e64730000000000000000000000000000006044820152606401610473565b60608215801561315957604051915060008252602082016040526131c1565b6040519150601f8416801560200281840101858101878315602002848b0101015b8183101561319257805183526020928301920161317a565b5050858452601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016604052505b50949350505050565b60606113d4826020015160008460000151612ef3565b6000602082840312156131f257600080fd5b5035919050565b803573ffffffffffffffffffffffffffffffffffffffff811681146115de57600080fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b604051601f82017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016810167ffffffffffffffff811182821017156132935761329361321d565b604052919050565b600080600080600060a086880312156132b357600080fd5b6132bc866131f9565b94506020808701359450604087013567ffffffffffffffff80821682146132e257600080fd5b90945060608801359081151582146132f957600080fd5b9093506080880135908082111561330f57600080fd5b818901915089601f83011261332357600080fd5b8135818111156133355761333561321d565b613365847fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f8401160161324c565b91508082528a8482850101111561337b57600080fd5b80848401858401376000848284010152508093505050509295509295909350565b60008083601f8401126133ae57600080fd5b50813567ffffffffffffffff8111156133c657600080fd5b6020830191508360208285010111156133de57600080fd5b9250929050565b60008060008060008060008060008060006101808c8e03121561340757600080fd5b8b359a5061341760208d016131f9565b995061342560408d016131f9565b985060608c0135975060808c0135965067ffffffffffffffff60a08d0135111561344e57600080fd5b61345e8d60a08e01358e0161339c565b909650945060c08c0135935060808c8e037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff2001121561349c57600080fd5b60e08c01925067ffffffffffffffff6101608d013511156134bc57600080fd5b6134cd8d6101608e01358e0161339c565b81935080925050509295989b509295989b9093969950565b6000815180845260005b8181101561350b576020818501810151868301820152016134ef565b8181111561351d576000602083870101525b50601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b85815284602082015267ffffffffffffffff84166040820152821515606082015260a060808201526000611db360a08301846134e5565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000828210156135c8576135c8613587565b500390565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b60008261360b5761360b6135cd565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff83147f80000000000000000000000000000000000000000000000000000000000000008314161561365f5761365f613587565b500590565b6000808312837f80000000000000000000000000000000000000000000000000000000000000000183128115161561369e5761369e613587565b837f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0183138116156136d2576136d2613587565b50500390565b60007f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff60008413600084138583048511828216161561371957613719613587565b7f8000000000000000000000000000000000000000000000000000000000000000600087128682058812818416161561375457613754613587565b6000871292508782058712848416161561377057613770613587565b8785058712818416161561378657613786613587565b505050929093029392505050565b6000808212827f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff038413811516156137ce576137ce613587565b827f800000000000000000000000000000000000000000000000000000000000000003841281161561380257613802613587565b50500190565b6000817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff048311821515161561384057613840613587565b500290565b600067ffffffffffffffff80831681851680830382111561386857613868613587565b01949350505050565b60006fffffffffffffffffffffffffffffffff808316818516818304811182151516156138a0576138a0613587565b02949350505050565b6000826138b8576138b86135cd565b500490565b6000604082840312156138cf57600080fd5b6040516040810181811067ffffffffffffffff821117156138f2576138f261321d565b604052825181526020928301519281019290925250919050565b60006020828403121561391e57600080fd5b5051919050565b600082613934576139346135cd565b500690565b6000821982111561394c5761394c613587565b500190565b60006080828403121561396357600080fd5b6040516080810181811067ffffffffffffffff821117156139865761398661321d565b8060405250823581526020830135602082015260408301356040820152606083013560608201528091505092915050565b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8214156139e9576139e9613587565b5060010190565b868152600073ffffffffffffffffffffffffffffffffffffffff808816602084015280871660408401525084606083015283608083015260c060a0830152613a3b60c08301846134e5565b98975050505050505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b600060ff831680613a8957613a896135cd565b8060ff84160691505092915050565b600060ff821660ff841680821015613ab257613ab2613587565b90039392505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fdfea164736f6c634300080a000a"
GasBenchMark_L1CrossDomainMessenger:test_L1MessengerSendMessage_benchmark_0() (gas: 160669) GasBenchMark_L1CrossDomainMessenger:test_L1MessengerSendMessage_benchmark_0() (gas: 158585)
GasBenchMark_L1CrossDomainMessenger:test_L1MessengerSendMessage_benchmark_1() (gas: 77078) GasBenchMark_L1CrossDomainMessenger:test_L1MessengerSendMessage_benchmark_1() (gas: 74994)
GasBenchMark_L1StandardBridge_Deposit:test_depositERC20_benchmark_0() (gas: 251879) GasBenchMark_L1StandardBridge_Deposit:test_depositERC20_benchmark_0() (gas: 249828)
GasBenchMark_L1StandardBridge_Deposit:test_depositERC20_benchmark_1() (gas: 118133) GasBenchMark_L1StandardBridge_Deposit:test_depositERC20_benchmark_1() (gas: 116082)
GasBenchMark_L1StandardBridge_Deposit:test_depositETH_benchmark_0() (gas: 251901) GasBenchMark_L1StandardBridge_Deposit:test_depositETH_benchmark_0() (gas: 249850)
GasBenchMark_L1StandardBridge_Deposit:test_depositETH_benchmark_1() (gas: 118108) GasBenchMark_L1StandardBridge_Deposit:test_depositETH_benchmark_1() (gas: 116057)
GasBenchMark_L1StandardBridge_Finalize:test_finalizeETHWithdrawal_benchmark() (gas: 45385) GasBenchMark_L1StandardBridge_Finalize:test_finalizeETHWithdrawal_benchmark() (gas: 45435)
GasBenchMark_L2OutputOracle:test_appendL2Output_benchmark() (gas: 68695) GasBenchMark_L2OutputOracle:test_appendL2Output_benchmark() (gas: 68695)
GasBenchMark_OptimismPortal:test_depositTransaction_benchmark() (gas: 75024) GasBenchMark_OptimismPortal:test_depositTransaction_benchmark() (gas: 75046)
GasBenchMark_OptimismPortal:test_depositTransaction_benchmark_1() (gas: 35328) GasBenchMark_OptimismPortal:test_depositTransaction_benchmark_1() (gas: 35350)
CrossDomainHashing_Test:test_l2TransactionHash() (gas: 104131) CrossDomainHashing_Test:test_l2TransactionHash() (gas: 104131)
DeployerWhitelist_Test:test_owner() (gas: 7625) DeployerWhitelist_Test:test_owner() (gas: 7625)
DeployerWhitelist_Test:test_storageSlots() (gas: 33461) DeployerWhitelist_Test:test_storageSlots() (gas: 33461)
...@@ -33,71 +33,71 @@ L1BlockTest:test_updateValues() (gas: 28193) ...@@ -33,71 +33,71 @@ L1BlockTest:test_updateValues() (gas: 28193)
L1BlockNumberTest:test_fallback() (gas: 18773) L1BlockNumberTest:test_fallback() (gas: 18773)
L1BlockNumberTest:test_getL1BlockNumber() (gas: 10634) L1BlockNumberTest:test_getL1BlockNumber() (gas: 10634)
L1BlockNumberTest:test_receive() (gas: 25436) L1BlockNumberTest:test_receive() (gas: 25436)
L1CrossDomainMessenger_Test:testCannot_L1MessengerPause() (gas: 24560) L1CrossDomainMessenger_Test:testCannot_L1MessengerPause() (gas: 24517)
L1CrossDomainMessenger_Test:testCannot_L1MessengerUnpause() (gas: 24509) L1CrossDomainMessenger_Test:testCannot_L1MessengerUnpause() (gas: 24509)
L1CrossDomainMessenger_Test:test_L1MessengerMessageVersion() (gas: 24659) L1CrossDomainMessenger_Test:test_L1MessengerMessageVersion() (gas: 24659)
L1CrossDomainMessenger_Test:test_L1MessengerPause() (gas: 48038) L1CrossDomainMessenger_Test:test_L1MessengerPause() (gas: 47995)
L1CrossDomainMessenger_Test:test_L1MessengerRelayMessageSucceeds() (gas: 80125) L1CrossDomainMessenger_Test:test_L1MessengerRelayMessageSucceeds() (gas: 77846)
L1CrossDomainMessenger_Test:test_L1MessengerRelayMessageToSystemContract() (gas: 72261) L1CrossDomainMessenger_Test:test_L1MessengerRelayMessageToSystemContract() (gas: 67880)
L1CrossDomainMessenger_Test:test_L1MessengerRelayShouldRevertIfPaused() (gas: 60493) L1CrossDomainMessenger_Test:test_L1MessengerRelayShouldRevertIfPaused() (gas: 60472)
L1CrossDomainMessenger_Test:test_L1MessengerSendMessage() (gas: 198886) L1CrossDomainMessenger_Test:test_L1MessengerSendMessage() (gas: 196846)
L1CrossDomainMessenger_Test:test_L1MessengerTwiceSendMessage() (gas: 1275622) L1CrossDomainMessenger_Test:test_L1MessengerTwiceSendMessage() (gas: 1273454)
L1CrossDomainMessenger_Test:test_L1MessengerUnpause() (gas: 40924) L1CrossDomainMessenger_Test:test_L1MessengerUnpause() (gas: 40890)
L1CrossDomainMessenger_Test:test_L1MessengerXDomainSenderReverts() (gas: 24250) L1CrossDomainMessenger_Test:test_L1MessengerXDomainSenderReverts() (gas: 24250)
L1CrossDomainMessenger_Test:test_L1MessengerxDomainMessageSenderResets() (gas: 88950) L1CrossDomainMessenger_Test:test_L1MessengerxDomainMessageSenderResets() (gas: 86672)
L1StandardBridge_Test:test_depositERC20() (gas: 476993) L1StandardBridge_Test:test_depositERC20() (gas: 474897)
L1StandardBridge_Test:test_depositERC20To() (gas: 479197) L1StandardBridge_Test:test_depositERC20To() (gas: 477101)
L1StandardBridge_Test:test_depositETH() (gas: 270949) L1StandardBridge_Test:test_depositETH() (gas: 268898)
L1StandardBridge_Test:test_depositETHTo() (gas: 228771) L1StandardBridge_Test:test_depositETHTo() (gas: 226720)
L1StandardBridge_Test:test_finalizeERC20Withdrawal() (gas: 490595) L1StandardBridge_Test:test_finalizeERC20Withdrawal() (gas: 490579)
L1StandardBridge_Test:test_finalizeETHWithdrawal() (gas: 64116) L1StandardBridge_Test:test_finalizeETHWithdrawal() (gas: 64232)
L1StandardBridge_Test:test_initialize() (gas: 26236) L1StandardBridge_Test:test_initialize() (gas: 26269)
L1StandardBridge_Test:test_onlyEOADepositERC20() (gas: 22340) L1StandardBridge_Test:test_onlyEOADepositERC20() (gas: 22340)
L1StandardBridge_Test:test_onlyEOADepositETH() (gas: 40882) L1StandardBridge_Test:test_onlyEOADepositETH() (gas: 40904)
L1StandardBridge_Test:test_onlyL2BridgeFinalizeERC20Withdrawal() (gas: 36136) L1StandardBridge_Test:test_onlyL2BridgeFinalizeERC20Withdrawal() (gas: 36205)
L1StandardBridge_Test:test_onlyPortalFinalizeERC20Withdrawal() (gas: 35489) L1StandardBridge_Test:test_onlyPortalFinalizeERC20Withdrawal() (gas: 35555)
L1StandardBridge_Test:test_receive() (gas: 415529) L1StandardBridge_Test:test_receive() (gas: 413456)
L2CrossDomainMessenger_Test:testCannot_L2MessengerPause() (gas: 10821) L2CrossDomainMessenger_Test:testCannot_L2MessengerPause() (gas: 10821)
L2CrossDomainMessenger_Test:test_L2MessengerMessageVersion() (gas: 8388) L2CrossDomainMessenger_Test:test_L2MessengerMessageVersion() (gas: 8388)
L2CrossDomainMessenger_Test:test_L2MessengerPause() (gas: 31815) L2CrossDomainMessenger_Test:test_L2MessengerPause() (gas: 31815)
L2CrossDomainMessenger_Test:test_L2MessengerRelayMessageSucceeds() (gas: 57516) L2CrossDomainMessenger_Test:test_L2MessengerRelayMessageSucceeds() (gas: 57516)
L2CrossDomainMessenger_Test:test_L2MessengerRelayMessageToSystemContract() (gas: 38324) L2CrossDomainMessenger_Test:test_L2MessengerRelayMessageToSystemContract() (gas: 36221)
L2CrossDomainMessenger_Test:test_L2MessengerRelayShouldRevertIfPaused() (gas: 41664) L2CrossDomainMessenger_Test:test_L2MessengerRelayShouldRevertIfPaused() (gas: 41664)
L2CrossDomainMessenger_Test:test_L2MessengerSendMessage() (gas: 119682) L2CrossDomainMessenger_Test:test_L2MessengerSendMessage() (gas: 119682)
L2CrossDomainMessenger_Test:test_L2MessengerTwiceSendMessage() (gas: 133142) L2CrossDomainMessenger_Test:test_L2MessengerTwiceSendMessage() (gas: 133142)
L2CrossDomainMessenger_Test:test_L2MessengerXDomainSenderReverts() (gas: 10577) L2CrossDomainMessenger_Test:test_L2MessengerXDomainSenderReverts() (gas: 10577)
L2CrossDomainMessenger_Test:test_L2MessengerxDomainMessageSenderResets() (gas: 54881) L2CrossDomainMessenger_Test:test_L2MessengerxDomainMessageSenderResets() (gas: 54881)
L2OutputOracleTest:testCannot_AppendWithUnmatchedBlockhash() (gas: 26833) L2OutputOracleTest:testCannot_AppendWithUnmatchedBlockhash() (gas: 26877)
L2OutputOracleTest:testCannot_appendEmptyOutput() (gas: 24108) L2OutputOracleTest:testCannot_appendEmptyOutput() (gas: 24152)
L2OutputOracleTest:testCannot_appendFutureTimetamp() (gas: 26097) L2OutputOracleTest:testCannot_appendFutureTimetamp() (gas: 26141)
L2OutputOracleTest:testCannot_appendOnWrongFork() (gas: 26382) L2OutputOracleTest:testCannot_appendOnWrongFork() (gas: 26426)
L2OutputOracleTest:testCannot_appendOutputIfNotSequencer() (gas: 23499) L2OutputOracleTest:testCannot_appendOutputIfNotSequencer() (gas: 23543)
L2OutputOracleTest:testCannot_appendUnexpectedBlockNumber() (gas: 26006) L2OutputOracleTest:testCannot_appendUnexpectedBlockNumber() (gas: 26050)
L2OutputOracleTest:testCannot_deleteL2Output_ifNotOwner() (gas: 24799) L2OutputOracleTest:testCannot_deleteL2Output_ifNotOwner() (gas: 24798)
L2OutputOracleTest:testCannot_deleteL2Output_withWrongRoot() (gas: 91113) L2OutputOracleTest:testCannot_deleteL2Output_withWrongRoot() (gas: 91133)
L2OutputOracleTest:testCannot_deleteL2Output_withWrongTime() (gas: 87128) L2OutputOracleTest:testCannot_deleteL2Output_withWrongTime() (gas: 87148)
L2OutputOracleTest:test_appendWithBlockhashAndHeight() (gas: 75070) L2OutputOracleTest:test_appendWithBlockhashAndHeight() (gas: 75114)
L2OutputOracleTest:test_appendingAnotherOutput() (gas: 76883) L2OutputOracleTest:test_appendingAnotherOutput() (gas: 76904)
L2OutputOracleTest:test_changeSequencer() (gas: 55809) L2OutputOracleTest:test_changeSequencer() (gas: 55651)
L2OutputOracleTest:test_computeL2Timestamp() (gas: 30200) L2OutputOracleTest:test_computeL2Timestamp() (gas: 30288)
L2OutputOracleTest:test_constructor() (gas: 48856) L2OutputOracleTest:test_constructor() (gas: 48833)
L2OutputOracleTest:test_deleteL2Output() (gas: 76543) L2OutputOracleTest:test_deleteL2Output() (gas: 76576)
L2OutputOracleTest:test_getL2Output() (gas: 82935) L2OutputOracleTest:test_getL2Output() (gas: 83023)
L2OutputOracleTest:test_latestBlockNumber() (gas: 76220) L2OutputOracleTest:test_latestBlockNumber() (gas: 76241)
L2OutputOracleTest:test_nextBlockNumber() (gas: 15166) L2OutputOracleTest:test_nextBlockNumber() (gas: 15187)
L2OutputOracleTest:test_updateOwner() (gas: 34580) L2OutputOracleTest:test_updateOwner() (gas: 34646)
L2OutputOracleUpgradeable_Test:test_cannotInitImpl() (gas: 8476) L2OutputOracleUpgradeable_Test:test_cannotInitImpl() (gas: 8453)
L2OutputOracleUpgradeable_Test:test_cannotInitProxy() (gas: 13497) L2OutputOracleUpgradeable_Test:test_cannotInitProxy() (gas: 13474)
L2OutputOracleUpgradeable_Test:test_initValuesOnProxy() (gas: 38906) L2OutputOracleUpgradeable_Test:test_initValuesOnProxy() (gas: 38884)
L2OutputOracleUpgradeable_Test:test_upgrading() (gas: 230843) L2OutputOracleUpgradeable_Test:test_upgrading() (gas: 230843)
L2StandardBridge_Test:test_ERC20BridgeFailed_whenLocalTokenIsBridge() (gas: 133097) L2StandardBridge_Test:test_ERC20BridgeFailed_whenLocalTokenIsBridge() (gas: 133144)
L2StandardBridge_Test:test_cannotWithdrawEthWithoutSendingIt() (gas: 21589) L2StandardBridge_Test:test_cannotWithdrawEthWithoutSendingIt() (gas: 21589)
L2StandardBridge_Test:test_finalizeDeposit() (gas: 93143) L2StandardBridge_Test:test_finalizeDeposit() (gas: 93179)
L2StandardBridge_Test:test_finalizeDeposit_failsToCompleteOutboundTransfer() (gas: 140107) L2StandardBridge_Test:test_finalizeDeposit_failsToCompleteOutboundTransfer() (gas: 140154)
L2StandardBridge_Test:test_initialize() (gas: 14812) L2StandardBridge_Test:test_initialize() (gas: 14823)
L2StandardBridge_Test:test_receive() (gas: 136482) L2StandardBridge_Test:test_receive() (gas: 136493)
L2StandardBridge_Test:test_withdraw() (gas: 352725) L2StandardBridge_Test:test_withdraw() (gas: 352734)
L2StandardBridge_Test:test_withdrawTo() (gas: 353464) L2StandardBridge_Test:test_withdrawTo() (gas: 353472)
L2StandardBridge_Test:test_withdraw_onlyEOA() (gas: 251952) L2StandardBridge_Test:test_withdraw_onlyEOA() (gas: 251952)
L2ToL1MessagePasserTest:test_burn() (gas: 112024) L2ToL1MessagePasserTest:test_burn() (gas: 112024)
L2ToL1MessagePasserTest:test_initiateWithdrawal_fromContract() (gas: 67935) L2ToL1MessagePasserTest:test_initiateWithdrawal_fromContract() (gas: 67935)
...@@ -120,30 +120,29 @@ OptimismMintableERC20_Test:test_l2Bridge() (gas: 9746) ...@@ -120,30 +120,29 @@ OptimismMintableERC20_Test:test_l2Bridge() (gas: 9746)
OptimismMintableERC20_Test:test_mint() (gas: 65754) OptimismMintableERC20_Test:test_mint() (gas: 65754)
OptimismMintableERC20_Test:test_mintRevertsFromNotBridge() (gas: 13243) OptimismMintableERC20_Test:test_mintRevertsFromNotBridge() (gas: 13243)
OptimismMintableERC20_Test:test_remoteToken() (gas: 9740) OptimismMintableERC20_Test:test_remoteToken() (gas: 9740)
OptimismMintableTokenFactory_Test:test_bridge() (gas: 9772) OptimismMintableTokenFactory_Test:test_bridge() (gas: 7663)
OptimismMintableTokenFactory_Test:test_createStandardL2Token() (gas: 1115409) OptimismMintableTokenFactory_Test:test_createStandardL2Token() (gas: 1113150)
OptimismMintableTokenFactory_Test:test_createStandardL2TokenSameTwice() (gas: 2211729) OptimismMintableTokenFactory_Test:test_createStandardL2TokenSameTwice() (gas: 2209211)
OptimismMintableTokenFactory_Test:test_createStandardL2TokenShouldRevertIfRemoteIsZero() (gas: 9445) OptimismMintableTokenFactory_Test:test_createStandardL2TokenShouldRevertIfRemoteIsZero() (gas: 9399)
OptimismMintableTokenFactory_Test:test_initializeShouldRevert() (gas: 12721) OptimismPortalUpgradeable_Test:test_cannotInitImpl() (gas: 10955)
OptimismPortalUpgradeable_Test:test_cannotInitImpl() (gas: 10936) OptimismPortalUpgradeable_Test:test_cannotInitProxy() (gas: 15997)
OptimismPortalUpgradeable_Test:test_cannotInitProxy() (gas: 15978) OptimismPortalUpgradeable_Test:test_initValuesOnProxy() (gas: 15967)
OptimismPortalUpgradeable_Test:test_initValuesOnProxy() (gas: 16034)
OptimismPortalUpgradeable_Test:test_upgrading() (gas: 230843) OptimismPortalUpgradeable_Test:test_upgrading() (gas: 230843)
OptimismPortal_Test:test_OptimismPortalConstructor() (gas: 17319) OptimismPortal_Test:test_OptimismPortalConstructor() (gas: 17275)
OptimismPortal_Test:test_OptimismPortalContractCreationReverts() (gas: 14193) OptimismPortal_Test:test_OptimismPortalContractCreationReverts() (gas: 14215)
OptimismPortal_Test:test_OptimismPortalReceiveEth() (gas: 126614) OptimismPortal_Test:test_OptimismPortalReceiveEth() (gas: 126614)
OptimismPortal_Test:test_cannotVerifyRecentWithdrawal() (gas: 31924) OptimismPortal_Test:test_cannotVerifyRecentWithdrawal() (gas: 31968)
OptimismPortal_Test:test_depositTransaction_NoValueContract() (gas: 75775) OptimismPortal_Test:test_depositTransaction_NoValueContract() (gas: 75797)
OptimismPortal_Test:test_depositTransaction_NoValueEOA() (gas: 76054) OptimismPortal_Test:test_depositTransaction_NoValueEOA() (gas: 76076)
OptimismPortal_Test:test_depositTransaction_createWithZeroValueForContract() (gas: 75780) OptimismPortal_Test:test_depositTransaction_createWithZeroValueForContract() (gas: 75802)
OptimismPortal_Test:test_depositTransaction_createWithZeroValueForEOA() (gas: 76101) OptimismPortal_Test:test_depositTransaction_createWithZeroValueForEOA() (gas: 76123)
OptimismPortal_Test:test_depositTransaction_withEthValueAndContractContractCreation() (gas: 82801) OptimismPortal_Test:test_depositTransaction_withEthValueAndContractContractCreation() (gas: 82823)
OptimismPortal_Test:test_depositTransaction_withEthValueAndEOAContractCreation() (gas: 74962) OptimismPortal_Test:test_depositTransaction_withEthValueAndEOAContractCreation() (gas: 74984)
OptimismPortal_Test:test_depositTransaction_withEthValueFromContract() (gas: 82505) OptimismPortal_Test:test_depositTransaction_withEthValueFromContract() (gas: 82527)
OptimismPortal_Test:test_depositTransaction_withEthValueFromEOA() (gas: 83100) OptimismPortal_Test:test_depositTransaction_withEthValueFromEOA() (gas: 83122)
OptimismPortal_Test:test_invalidWithdrawalProof() (gas: 45152) OptimismPortal_Test:test_invalidWithdrawalProof() (gas: 45217)
OptimismPortal_Test:test_isOutputFinalized() (gas: 131876) OptimismPortal_Test:test_isOutputFinalized() (gas: 132404)
OptimismPortal_Test:test_simple_isOutputFinalized() (gas: 23909) OptimismPortal_Test:test_simple_isOutputFinalized() (gas: 23997)
Proxy_Test:test_clashingFunctionSignatures() (gas: 101427) Proxy_Test:test_clashingFunctionSignatures() (gas: 101427)
Proxy_Test:test_implementationKey() (gas: 20942) Proxy_Test:test_implementationKey() (gas: 20942)
Proxy_Test:test_implementationProxyCallIfNotAdmin() (gas: 30021) Proxy_Test:test_implementationProxyCallIfNotAdmin() (gas: 30021)
...@@ -239,4 +238,4 @@ SequencerFeeVault_Test:test_constructor() (gas: 7656) ...@@ -239,4 +238,4 @@ SequencerFeeVault_Test:test_constructor() (gas: 7656)
SequencerFeeVault_Test:test_minWithdrawalAmount() (gas: 5407) SequencerFeeVault_Test:test_minWithdrawalAmount() (gas: 5407)
SequencerFeeVault_Test:test_receive() (gas: 17258) SequencerFeeVault_Test:test_receive() (gas: 17258)
SequencerFeeVault_Test:test_revertWithdraw() (gas: 9309) SequencerFeeVault_Test:test_revertWithdraw() (gas: 9309)
SequencerFeeVault_Test:test_withdraw() (gas: 147257) SequencerFeeVault_Test:test_withdraw() (gas: 147268)
...@@ -38,8 +38,6 @@ ...@@ -38,8 +38,6 @@
| receivedMessages | mapping(bytes32 => bool) | 205 | 0 | 32 | contracts/L1/L1CrossDomainMessenger.sol:L1CrossDomainMessenger | | receivedMessages | mapping(bytes32 => bool) | 205 | 0 | 32 | contracts/L1/L1CrossDomainMessenger.sol:L1CrossDomainMessenger |
|------------------------+--------------------------+------+--------+-------+----------------------------------------------------------------| |------------------------+--------------------------+------+--------+-------+----------------------------------------------------------------|
| blockedSystemAddresses | mapping(address => bool) | 206 | 0 | 32 | contracts/L1/L1CrossDomainMessenger.sol:L1CrossDomainMessenger | | blockedSystemAddresses | mapping(address => bool) | 206 | 0 | 32 | contracts/L1/L1CrossDomainMessenger.sol:L1CrossDomainMessenger |
|------------------------+--------------------------+------+--------+-------+----------------------------------------------------------------|
| portal | contract OptimismPortal | 207 | 0 | 20 | contracts/L1/L1CrossDomainMessenger.sol:L1CrossDomainMessenger |
+------------------------+--------------------------+------+--------+-------+----------------------------------------------------------------+ +------------------------+--------------------------+------+--------+-------+----------------------------------------------------------------+
======================= =======================
...@@ -49,15 +47,15 @@ ...@@ -49,15 +47,15 @@
+---------------+-------------------------------------------------+------+--------+-------+----------------------------------------------------+ +---------------+-------------------------------------------------+------+--------+-------+----------------------------------------------------+
| Name | Type | Slot | Offset | Bytes | Contract | | Name | Type | Slot | Offset | Bytes | Contract |
+==============================================================================================================================================+ +==============================================================================================================================================+
| messenger | contract CrossDomainMessenger | 0 | 0 | 20 | contracts/L1/L1StandardBridge.sol:L1StandardBridge | | _initialized | uint8 | 0 | 0 | 1 | contracts/L1/L1StandardBridge.sol:L1StandardBridge |
|---------------+-------------------------------------------------+------+--------+-------+----------------------------------------------------| |---------------+-------------------------------------------------+------+--------+-------+----------------------------------------------------|
| otherBridge | contract StandardBridge | 1 | 0 | 20 | contracts/L1/L1StandardBridge.sol:L1StandardBridge | | _initializing | bool | 0 | 1 | 1 | contracts/L1/L1StandardBridge.sol:L1StandardBridge |
|---------------+-------------------------------------------------+------+--------+-------+----------------------------------------------------| |---------------+-------------------------------------------------+------+--------+-------+----------------------------------------------------|
| deposits | mapping(address => mapping(address => uint256)) | 2 | 0 | 32 | contracts/L1/L1StandardBridge.sol:L1StandardBridge | | messenger | contract CrossDomainMessenger | 0 | 2 | 20 | contracts/L1/L1StandardBridge.sol:L1StandardBridge |
|---------------+-------------------------------------------------+------+--------+-------+----------------------------------------------------| |---------------+-------------------------------------------------+------+--------+-------+----------------------------------------------------|
| _initialized | uint8 | 3 | 0 | 1 | contracts/L1/L1StandardBridge.sol:L1StandardBridge | | otherBridge | contract StandardBridge | 1 | 0 | 20 | contracts/L1/L1StandardBridge.sol:L1StandardBridge |
|---------------+-------------------------------------------------+------+--------+-------+----------------------------------------------------| |---------------+-------------------------------------------------+------+--------+-------+----------------------------------------------------|
| _initializing | bool | 3 | 1 | 1 | contracts/L1/L1StandardBridge.sol:L1StandardBridge | | deposits | mapping(address => mapping(address => uint256)) | 2 | 0 | 32 | contracts/L1/L1StandardBridge.sol:L1StandardBridge |
+---------------+-------------------------------------------------+------+--------+-------+----------------------------------------------------+ +---------------+-------------------------------------------------+------+--------+-------+----------------------------------------------------+
======================= =======================
...@@ -207,15 +205,19 @@ ...@@ -207,15 +205,19 @@
➡ L2StandardBridge ➡ L2StandardBridge
======================= =======================
+-------------+-------------------------------------------------+------+--------+-------+----------------------------------------------------+ +---------------+-------------------------------------------------+------+--------+-------+----------------------------------------------------+
| Name | Type | Slot | Offset | Bytes | Contract | | Name | Type | Slot | Offset | Bytes | Contract |
+============================================================================================================================================+ +==============================================================================================================================================+
| messenger | contract CrossDomainMessenger | 0 | 0 | 20 | contracts/L2/L2StandardBridge.sol:L2StandardBridge | | _initialized | uint8 | 0 | 0 | 1 | contracts/L2/L2StandardBridge.sol:L2StandardBridge |
|-------------+-------------------------------------------------+------+--------+-------+----------------------------------------------------| |---------------+-------------------------------------------------+------+--------+-------+----------------------------------------------------|
| otherBridge | contract StandardBridge | 1 | 0 | 20 | contracts/L2/L2StandardBridge.sol:L2StandardBridge | | _initializing | bool | 0 | 1 | 1 | contracts/L2/L2StandardBridge.sol:L2StandardBridge |
|-------------+-------------------------------------------------+------+--------+-------+----------------------------------------------------| |---------------+-------------------------------------------------+------+--------+-------+----------------------------------------------------|
| deposits | mapping(address => mapping(address => uint256)) | 2 | 0 | 32 | contracts/L2/L2StandardBridge.sol:L2StandardBridge | | messenger | contract CrossDomainMessenger | 0 | 2 | 20 | contracts/L2/L2StandardBridge.sol:L2StandardBridge |
+-------------+-------------------------------------------------+------+--------+-------+----------------------------------------------------+ |---------------+-------------------------------------------------+------+--------+-------+----------------------------------------------------|
| otherBridge | contract StandardBridge | 1 | 0 | 20 | contracts/L2/L2StandardBridge.sol:L2StandardBridge |
|---------------+-------------------------------------------------+------+--------+-------+----------------------------------------------------|
| deposits | mapping(address => mapping(address => uint256)) | 2 | 0 | 32 | contracts/L2/L2StandardBridge.sol:L2StandardBridge |
+---------------+-------------------------------------------------+------+--------+-------+----------------------------------------------------+
======================= =======================
➡ L2ToL1MessagePasser ➡ L2ToL1MessagePasser
...@@ -341,8 +343,7 @@ ...@@ -341,8 +343,7 @@
➡ OptimismMintableERC20Factory ➡ OptimismMintableERC20Factory
======================= =======================
+--------+---------+------+--------+-------+-----------------------------------------------------------------------------------+ +------+------+------+--------+-------+----------+
| Name | Type | Slot | Offset | Bytes | Contract | | Name | Type | Slot | Offset | Bytes | Contract |
+==============================================================================================================================+ +================================================+
| bridge | address | 0 | 0 | 20 | contracts/universal/OptimismMintableERC20Factory.sol:OptimismMintableERC20Factory | +------+------+------+--------+-------+----------+
+--------+---------+------+--------+-------+-----------------------------------------------------------------------------------+
...@@ -13,34 +13,29 @@ import { CrossDomainMessenger } from "../universal/CrossDomainMessenger.sol"; ...@@ -13,34 +13,29 @@ import { CrossDomainMessenger } from "../universal/CrossDomainMessenger.sol";
* interface instead of interacting with lower-level contracts directly. * interface instead of interacting with lower-level contracts directly.
*/ */
contract L1CrossDomainMessenger is CrossDomainMessenger { contract L1CrossDomainMessenger is CrossDomainMessenger {
/**
* @notice Contract version number.
*/
uint8 public constant VERSION = 1;
/** /**
* @notice Address of the OptimismPortal. * @notice Address of the OptimismPortal.
*/ */
OptimismPortal public portal; OptimismPortal public immutable portal;
/** /**
* @param _portal Address of the OptimismPortal to send and receive messages through. * @param _portal Address of the OptimismPortal contract on this network.
*/ */
constructor(OptimismPortal _portal) public { constructor(OptimismPortal _portal) public {
// Mutables portal = _portal;
initialize(_portal); initialize();
} }
/** /**
* @notice Intializes mutable variables. * @notice Initializer.
*
* @param _portal Address of the OptimismPortal to send and receive messages through.
*/ */
function initialize(OptimismPortal _portal) public reinitializer(VERSION) { function initialize() public initializer {
portal = _portal;
address[] memory blockedSystemAddresses = new address[](1); address[] memory blockedSystemAddresses = new address[](1);
blockedSystemAddresses[0] = address(this); blockedSystemAddresses[0] = address(this);
_initialize(PredeployAddresses.L2_CROSS_DOMAIN_MESSENGER, blockedSystemAddresses); __CrossDomainMessenger_init(
PredeployAddresses.L2_CROSS_DOMAIN_MESSENGER,
blockedSystemAddresses
);
} }
/** /**
......
// SPDX-License-Identifier: MIT // SPDX-License-Identifier: MIT
pragma solidity ^0.8.9; pragma solidity ^0.8.9;
import { Initializable } from "@openzeppelin/contracts/proxy/utils/Initializable.sol";
import { PredeployAddresses } from "../libraries/PredeployAddresses.sol"; import { PredeployAddresses } from "../libraries/PredeployAddresses.sol";
import { StandardBridge } from "../universal/StandardBridge.sol"; import { StandardBridge } from "../universal/StandardBridge.sol";
...@@ -12,12 +11,7 @@ import { StandardBridge } from "../universal/StandardBridge.sol"; ...@@ -12,12 +11,7 @@ import { StandardBridge } from "../universal/StandardBridge.sol";
* L2. ERC20 tokens deposited into L2 are escrowed within this contract until withdrawal. * L2. ERC20 tokens deposited into L2 are escrowed within this contract until withdrawal.
* ETH is transferred to and escrowed within the OptimismPortal contract. * ETH is transferred to and escrowed within the OptimismPortal contract.
*/ */
contract L1StandardBridge is StandardBridge, Initializable { contract L1StandardBridge is StandardBridge {
/**
* @notice Contract version number.
*/
uint8 public constant VERSION = 1;
/** /**
* @custom:legacy * @custom:legacy
* @notice Emitted whenever a deposit of ETH from L1 into L2 is initiated. * @notice Emitted whenever a deposit of ETH from L1 into L2 is initiated.
...@@ -94,17 +88,16 @@ contract L1StandardBridge is StandardBridge, Initializable { ...@@ -94,17 +88,16 @@ contract L1StandardBridge is StandardBridge, Initializable {
* @param _messenger Address of the L1CrossDomainMessenger. * @param _messenger Address of the L1CrossDomainMessenger.
*/ */
constructor(address payable _messenger) public { constructor(address payable _messenger) public {
// Mutables
initialize(_messenger); initialize(_messenger);
} }
/** /**
* @notice Intializes mutable variables. * @notice Initializer.
* *
* @param _messenger Address of the L1CrossDomainMessenger. * @param _messenger Address of the L1CrossDomainMessenger.
*/ */
function initialize(address payable _messenger) public reinitializer(VERSION) { function initialize(address payable _messenger) public initializer {
_initialize(_messenger, payable(PredeployAddresses.L2_STANDARD_BRIDGE)); __StandardBridge_init(_messenger, payable(PredeployAddresses.L2_STANDARD_BRIDGE));
} }
/** /**
......
...@@ -14,11 +14,6 @@ import { ...@@ -14,11 +14,6 @@ import {
*/ */
// slither-disable-next-line locked-ether // slither-disable-next-line locked-ether
contract L2OutputOracle is OwnableUpgradeable { contract L2OutputOracle is OwnableUpgradeable {
/**
* @notice Contract version number.
*/
uint8 public constant VERSION = 1;
/** /**
* @notice OutputProposal represents a commitment to the L2 state. * @notice OutputProposal represents a commitment to the L2 state.
* The timestamp is the L1 timestamp that the output root is posted. * The timestamp is the L1 timestamp that the output root is posted.
...@@ -139,19 +134,17 @@ contract L2OutputOracle is OwnableUpgradeable { ...@@ -139,19 +134,17 @@ contract L2OutputOracle is OwnableUpgradeable {
"Output Oracle: Initial L2 block time must be less than current time" "Output Oracle: Initial L2 block time must be less than current time"
); );
// Immutables
SUBMISSION_INTERVAL = _submissionInterval; SUBMISSION_INTERVAL = _submissionInterval;
HISTORICAL_TOTAL_BLOCKS = _historicalTotalBlocks; HISTORICAL_TOTAL_BLOCKS = _historicalTotalBlocks;
STARTING_BLOCK_NUMBER = _startingBlockNumber; STARTING_BLOCK_NUMBER = _startingBlockNumber;
STARTING_TIMESTAMP = _startingTimestamp; STARTING_TIMESTAMP = _startingTimestamp;
L2_BLOCK_TIME = _l2BlockTime; L2_BLOCK_TIME = _l2BlockTime;
// Mutables
initialize(_genesisL2Output, _startingBlockNumber, _sequencer, _owner); initialize(_genesisL2Output, _startingBlockNumber, _sequencer, _owner);
} }
/** /**
* @notice Intializes mutable variables. * @notice Initializer.
* *
* @param _genesisL2Output The initial L2 output of the L2 chain. * @param _genesisL2Output The initial L2 output of the L2 chain.
* @param _startingBlockNumber The timestamp to start L2 block at. * @param _startingBlockNumber The timestamp to start L2 block at.
...@@ -163,7 +156,7 @@ contract L2OutputOracle is OwnableUpgradeable { ...@@ -163,7 +156,7 @@ contract L2OutputOracle is OwnableUpgradeable {
uint256 _startingBlockNumber, uint256 _startingBlockNumber,
address _sequencer, address _sequencer,
address _owner address _owner
) public reinitializer(VERSION) { ) public initializer {
l2Outputs[_startingBlockNumber] = OutputProposal(_genesisL2Output, block.timestamp); l2Outputs[_startingBlockNumber] = OutputProposal(_genesisL2Output, block.timestamp);
latestBlockNumber = _startingBlockNumber; latestBlockNumber = _startingBlockNumber;
__Ownable_init(); __Ownable_init();
......
...@@ -16,11 +16,6 @@ import { ResourceMetering } from "./ResourceMetering.sol"; ...@@ -16,11 +16,6 @@ import { ResourceMetering } from "./ResourceMetering.sol";
* Users are encouraged to use the L1CrossDomainMessenger for a higher-level interface. * Users are encouraged to use the L1CrossDomainMessenger for a higher-level interface.
*/ */
contract OptimismPortal is Initializable, ResourceMetering { contract OptimismPortal is Initializable, ResourceMetering {
/**
* @notice Contract version number.
*/
uint8 public constant VERSION = 1;
/** /**
* @notice Emitted when a transaction is deposited from L1 to L2. The parameters of this event * @notice Emitted when a transaction is deposited from L1 to L2. The parameters of this event
* are read by the rollup node and used to derive deposit transactions on L2. * are read by the rollup node and used to derive deposit transactions on L2.
...@@ -98,18 +93,16 @@ contract OptimismPortal is Initializable, ResourceMetering { ...@@ -98,18 +93,16 @@ contract OptimismPortal is Initializable, ResourceMetering {
* @param _finalizationPeriodSeconds Output finalization time in seconds. * @param _finalizationPeriodSeconds Output finalization time in seconds.
*/ */
constructor(L2OutputOracle _l2Oracle, uint256 _finalizationPeriodSeconds) { constructor(L2OutputOracle _l2Oracle, uint256 _finalizationPeriodSeconds) {
// Immutables
L2_ORACLE = _l2Oracle; L2_ORACLE = _l2Oracle;
FINALIZATION_PERIOD_SECONDS = _finalizationPeriodSeconds; FINALIZATION_PERIOD_SECONDS = _finalizationPeriodSeconds;
// Mutables
initialize(); initialize();
} }
/** /**
* @notice Intializes mutable variables. * @notice Intializes mutable variables.
*/ */
function initialize() public reinitializer(VERSION) { function initialize() public initializer {
l2Sender = DEFAULT_L2_SENDER; l2Sender = DEFAULT_L2_SENDER;
__ResourceMetering_init(); __ResourceMetering_init();
} }
......
...@@ -16,16 +16,22 @@ import { L2ToL1MessagePasser } from "./L2ToL1MessagePasser.sol"; ...@@ -16,16 +16,22 @@ import { L2ToL1MessagePasser } from "./L2ToL1MessagePasser.sol";
*/ */
contract L2CrossDomainMessenger is CrossDomainMessenger { contract L2CrossDomainMessenger is CrossDomainMessenger {
/** /**
* @notice Initializes the L2CrossDomainMessenger. * @param _l1CrossDomainMessenger Address of the L1CrossDomainMessenger contract.
*/
constructor(address _l1CrossDomainMessenger) {
initialize(_l1CrossDomainMessenger);
}
/**
* @notice Initializer.
* *
* @param _l1CrossDomainMessenger Address of the L1CrossDomainMessenger contract. * @param _l1CrossDomainMessenger Address of the L1CrossDomainMessenger contract.
*/ */
function initialize(address _l1CrossDomainMessenger) external initializer { function initialize(address _l1CrossDomainMessenger) public initializer {
address[] memory blockedSystemAddresses = new address[](2); address[] memory blockedSystemAddresses = new address[](2);
blockedSystemAddresses[0] = address(this); blockedSystemAddresses[0] = address(this);
blockedSystemAddresses[1] = PredeployAddresses.L2_TO_L1_MESSAGE_PASSER; blockedSystemAddresses[1] = PredeployAddresses.L2_TO_L1_MESSAGE_PASSER;
__CrossDomainMessenger_init(_l1CrossDomainMessenger, blockedSystemAddresses);
_initialize(_l1CrossDomainMessenger, blockedSystemAddresses);
} }
/** /**
......
...@@ -79,12 +79,19 @@ contract L2StandardBridge is StandardBridge { ...@@ -79,12 +79,19 @@ contract L2StandardBridge is StandardBridge {
); );
/** /**
* @notice Initializes the L2StandardBridge. * @param _otherBridge Address of the L1StandardBridge.
*/
constructor(address payable _otherBridge) {
initialize(_otherBridge);
}
/**
* @notice Initializer.
* *
* @param _otherBridge Address of the L1StandardBridge. * @param _otherBridge Address of the L1StandardBridge.
*/ */
function initialize(address payable _otherBridge) public { function initialize(address payable _otherBridge) public initializer {
_initialize(payable(PredeployAddresses.L2_CROSS_DOMAIN_MESSENGER), _otherBridge); __StandardBridge_init(payable(PredeployAddresses.L2_CROSS_DOMAIN_MESSENGER), _otherBridge);
} }
/** /**
......
...@@ -190,11 +190,11 @@ contract Messenger_Initializer is L2OutputOracle_Initializer { ...@@ -190,11 +190,11 @@ contract Messenger_Initializer is L2OutputOracle_Initializer {
"OVM_L1CrossDomainMessenger" "OVM_L1CrossDomainMessenger"
); );
L1Messenger = L1CrossDomainMessenger(address(proxy)); L1Messenger = L1CrossDomainMessenger(address(proxy));
L1Messenger.initialize(op); L1Messenger.initialize();
vm.etch( vm.etch(
PredeployAddresses.L2_CROSS_DOMAIN_MESSENGER, PredeployAddresses.L2_CROSS_DOMAIN_MESSENGER,
address(new L2CrossDomainMessenger()).code address(new L2CrossDomainMessenger(address(L1Messenger))).code
); );
L2Messenger.initialize(address(L1Messenger)); L2Messenger.initialize(address(L1Messenger));
...@@ -358,18 +358,19 @@ contract Bridge_Initializer is Messenger_Initializer { ...@@ -358,18 +358,19 @@ contract Bridge_Initializer is Messenger_Initializer {
// Deploy the L2StandardBridge, move it to the correct predeploy // Deploy the L2StandardBridge, move it to the correct predeploy
// address and then initialize it // address and then initialize it
L2StandardBridge l2B = new L2StandardBridge(); L2StandardBridge l2B = new L2StandardBridge(payable(PredeployAddresses.L2_STANDARD_BRIDGE));
vm.etch(PredeployAddresses.L2_STANDARD_BRIDGE, address(l2B).code); vm.etch(PredeployAddresses.L2_STANDARD_BRIDGE, address(l2B).code);
L2Bridge = L2StandardBridge(payable(PredeployAddresses.L2_STANDARD_BRIDGE)); L2Bridge = L2StandardBridge(payable(PredeployAddresses.L2_STANDARD_BRIDGE));
L2Bridge.initialize(payable(address(L1Bridge))); L2Bridge.initialize(payable(address(L1Bridge)));
// Set up the L2 mintable token factory // Set up the L2 mintable token factory
OptimismMintableERC20Factory factory = new OptimismMintableERC20Factory(); OptimismMintableERC20Factory factory = new OptimismMintableERC20Factory(
PredeployAddresses.L2_STANDARD_BRIDGE
);
vm.etch(PredeployAddresses.L2_STANDARD_TOKEN_FACTORY, address(factory).code); vm.etch(PredeployAddresses.L2_STANDARD_TOKEN_FACTORY, address(factory).code);
L2TokenFactory = OptimismMintableERC20Factory( L2TokenFactory = OptimismMintableERC20Factory(
PredeployAddresses.L2_STANDARD_TOKEN_FACTORY PredeployAddresses.L2_STANDARD_TOKEN_FACTORY
); );
L2TokenFactory.initialize(PredeployAddresses.L2_STANDARD_BRIDGE);
vm.etch(PredeployAddresses.LEGACY_ERC20_ETH, address(new LegacyERC20ETH()).code); vm.etch(PredeployAddresses.LEGACY_ERC20_ETH, address(new LegacyERC20ETH()).code);
...@@ -385,8 +386,7 @@ contract Bridge_Initializer is Messenger_Initializer { ...@@ -385,8 +386,7 @@ contract Bridge_Initializer is Messenger_Initializer {
); );
NativeL2Token = new ERC20("Native L2 Token", "L2T"); NativeL2Token = new ERC20("Native L2 Token", "L2T");
L1TokenFactory = new OptimismMintableERC20Factory(); L1TokenFactory = new OptimismMintableERC20Factory(address(L1Bridge));
L1TokenFactory.initialize(address(L1Bridge));
RemoteL1Token = OptimismMintableERC20( RemoteL1Token = OptimismMintableERC20(
L1TokenFactory.createStandardL2Token( L1TokenFactory.createStandardL2Token(
......
...@@ -16,11 +16,6 @@ contract OptimismMintableTokenFactory_Test is Bridge_Initializer { ...@@ -16,11 +16,6 @@ contract OptimismMintableTokenFactory_Test is Bridge_Initializer {
super.setUp(); super.setUp();
} }
function test_initializeShouldRevert() external {
vm.expectRevert("OptimismMintableERC20Factory: already initialized");
L2TokenFactory.initialize(address(L1Bridge));
}
function test_bridge() external { function test_bridge() external {
assertEq(address(L2TokenFactory.bridge()), address(L2Bridge)); assertEq(address(L2TokenFactory.bridge()), address(L2Bridge));
} }
......
...@@ -312,18 +312,16 @@ abstract contract CrossDomainMessenger is ...@@ -312,18 +312,16 @@ abstract contract CrossDomainMessenger is
* detailed information about what this block list can and * detailed information about what this block list can and
* cannot be used for. * cannot be used for.
*/ */
function _initialize(address _otherMessenger, address[] memory _blockedSystemAddresses) function __CrossDomainMessenger_init(
internal address _otherMessenger,
{ address[] memory _blockedSystemAddresses
) internal onlyInitializing {
xDomainMsgSender = DEFAULT_XDOMAIN_SENDER; xDomainMsgSender = DEFAULT_XDOMAIN_SENDER;
otherMessenger = _otherMessenger; otherMessenger = _otherMessenger;
for (uint256 i = 0; i < _blockedSystemAddresses.length; i++) { for (uint256 i = 0; i < _blockedSystemAddresses.length; i++) {
blockedSystemAddresses[_blockedSystemAddresses[i]] = true; blockedSystemAddresses[_blockedSystemAddresses[i]] = true;
} }
// TODO: ensure we know what these are doing and why they are here
// Initialize upgradable OZ contracts
__Context_init_unchained(); __Context_init_unchained();
__Ownable_init_unchained(); __Ownable_init_unchained();
__Pausable_init_unchained(); __Pausable_init_unchained();
......
...@@ -41,15 +41,12 @@ contract OptimismMintableERC20Factory { ...@@ -41,15 +41,12 @@ contract OptimismMintableERC20Factory {
/** /**
* @notice Address of the StandardBridge on this chain. * @notice Address of the StandardBridge on this chain.
*/ */
address public bridge; address public immutable bridge;
/** /**
* @notice Initializer.
*
* @param _bridge Address of the StandardBridge on this chain. * @param _bridge Address of the StandardBridge on this chain.
*/ */
function initialize(address _bridge) public { constructor(address _bridge) {
require(bridge == address(0), "OptimismMintableERC20Factory: already initialized");
bridge = _bridge; bridge = _bridge;
} }
......
...@@ -5,6 +5,7 @@ import { IERC20 } from "@openzeppelin/contracts/token/ERC20/IERC20.sol"; ...@@ -5,6 +5,7 @@ import { IERC20 } from "@openzeppelin/contracts/token/ERC20/IERC20.sol";
import { ERC165Checker } from "@openzeppelin/contracts/utils/introspection/ERC165Checker.sol"; import { ERC165Checker } from "@openzeppelin/contracts/utils/introspection/ERC165Checker.sol";
import { Address } from "@openzeppelin/contracts/utils/Address.sol"; import { Address } from "@openzeppelin/contracts/utils/Address.sol";
import { SafeERC20 } from "@openzeppelin/contracts/token/ERC20/utils/SafeERC20.sol"; import { SafeERC20 } from "@openzeppelin/contracts/token/ERC20/utils/SafeERC20.sol";
import { Initializable } from "@openzeppelin/contracts-upgradeable/proxy/utils/Initializable.sol";
import { IRemoteToken, IL1Token } from "./SupportedInterfaces.sol"; import { IRemoteToken, IL1Token } from "./SupportedInterfaces.sol";
import { CrossDomainMessenger } from "./CrossDomainMessenger.sol"; import { CrossDomainMessenger } from "./CrossDomainMessenger.sol";
import { OptimismMintableERC20 } from "./OptimismMintableERC20.sol"; import { OptimismMintableERC20 } from "./OptimismMintableERC20.sol";
...@@ -13,7 +14,7 @@ import { OptimismMintableERC20 } from "./OptimismMintableERC20.sol"; ...@@ -13,7 +14,7 @@ import { OptimismMintableERC20 } from "./OptimismMintableERC20.sol";
* @title StandardBridge * @title StandardBridge
* @notice StandardBridge is a base contract for the L1 and L2 standard ERC20 bridges. * @notice StandardBridge is a base contract for the L1 and L2 standard ERC20 bridges.
*/ */
abstract contract StandardBridge { abstract contract StandardBridge is Initializable {
using SafeERC20 for IERC20; using SafeERC20 for IERC20;
/** /**
...@@ -367,9 +368,10 @@ abstract contract StandardBridge { ...@@ -367,9 +368,10 @@ abstract contract StandardBridge {
* @param _messenger Address of CrossDomainMessenger on this network. * @param _messenger Address of CrossDomainMessenger on this network.
* @param _otherBridge Address of the other StandardBridge contract. * @param _otherBridge Address of the other StandardBridge contract.
*/ */
function _initialize(address payable _messenger, address payable _otherBridge) internal { function __StandardBridge_init(address payable _messenger, address payable _otherBridge)
require(address(messenger) == address(0), "Contract has already been initialized."); internal
onlyInitializing
{
messenger = CrossDomainMessenger(_messenger); messenger = CrossDomainMessenger(_messenger);
otherBridge = StandardBridge(_otherBridge); otherBridge = StandardBridge(_otherBridge);
} }
......
...@@ -37,9 +37,7 @@ const deployFn: DeployFunction = async (hre) => { ...@@ -37,9 +37,7 @@ const deployFn: DeployFunction = async (hre) => {
const upgradeTx = await Proxy.upgradeToAndCall( const upgradeTx = await Proxy.upgradeToAndCall(
messenger.address, messenger.address,
L1CrossDomainMessenger.interface.encodeFunctionData('initialize(address)', [ L1CrossDomainMessenger.interface.encodeFunctionData('initialize')
portal.address,
])
) )
await upgradeTx.wait() await upgradeTx.wait()
......
...@@ -17,15 +17,16 @@ const deployFn: DeployFunction = async (hre) => { ...@@ -17,15 +17,16 @@ const deployFn: DeployFunction = async (hre) => {
waitConfirmations: deployConfig.deploymentWaitConfirmations, waitConfirmations: deployConfig.deploymentWaitConfirmations,
}) })
const bridge = await hre.deployments.get('L1StandardBridgeProxy')
await deploy('OptimismMintableERC20Factory', { await deploy('OptimismMintableERC20Factory', {
from: deployer, from: deployer,
args: [], args: [bridge.address],
log: true, log: true,
waitConfirmations: deployConfig.deploymentWaitConfirmations, waitConfirmations: deployConfig.deploymentWaitConfirmations,
}) })
const factory = await hre.deployments.get('OptimismMintableERC20Factory') const factory = await hre.deployments.get('OptimismMintableERC20Factory')
const bridge = await hre.deployments.get('L1StandardBridgeProxy')
const proxy = await hre.deployments.get('OptimismMintableERC20FactoryProxy') const proxy = await hre.deployments.get('OptimismMintableERC20FactoryProxy')
const Proxy = await hre.ethers.getContractAt('Proxy', proxy.address) const Proxy = await hre.ethers.getContractAt('Proxy', proxy.address)
...@@ -34,13 +35,7 @@ const deployFn: DeployFunction = async (hre) => { ...@@ -34,13 +35,7 @@ const deployFn: DeployFunction = async (hre) => {
proxy.address proxy.address
) )
const upgradeTx = await Proxy.upgradeToAndCall( const upgradeTx = await Proxy.upgradeTo(factory.address)
factory.address,
OptimismMintableERC20Factory.interface.encodeFunctionData(
'initialize(address)',
[bridge.address]
)
)
await upgradeTx.wait() await upgradeTx.wait()
if (bridge.address !== (await OptimismMintableERC20Factory.bridge())) { if (bridge.address !== (await OptimismMintableERC20Factory.bridge())) {
......
...@@ -3,6 +3,7 @@ import path from 'path' ...@@ -3,6 +3,7 @@ import path from 'path'
import assert from 'assert' import assert from 'assert'
import { OptimismGenesis, State } from '@eth-optimism/core-utils' import { OptimismGenesis, State } from '@eth-optimism/core-utils'
import 'hardhat-deploy'
import '@eth-optimism/hardhat-deploy-config' import '@eth-optimism/hardhat-deploy-config'
import { ethers } from 'ethers' import { ethers } from 'ethers'
import { task } from 'hardhat/config' import { task } from 'hardhat/config'
...@@ -38,7 +39,8 @@ const getStorageLayout = async ( ...@@ -38,7 +39,8 @@ const getStorageLayout = async (
for (const key of keys) { for (const key of keys) {
if (name === path.basename(key, '.sol')) { if (name === path.basename(key, '.sol')) {
const contract = buildInfo.output.contracts[key] const contract = buildInfo.output.contracts[key]
return (contract[name] as any).storageLayout const storageLayout = (contract[name] as any).storageLayout
return storageLayout || { storage: [], types: {} }
} }
} }
throw new Error(`Cannot locate storageLayout for ${name}`) throw new Error(`Cannot locate storageLayout for ${name}`)
...@@ -102,9 +104,6 @@ task('genesis-l2', 'create a genesis config') ...@@ -102,9 +104,6 @@ task('genesis-l2', 'create a genesis config')
SequencerFeeVault: { SequencerFeeVault: {
l1FeeWallet: ethers.constants.AddressZero, l1FeeWallet: ethers.constants.AddressZero,
}, },
OptimismMintableERC20Factory: {
bridge: ethers.constants.AddressZero,
},
L1Block: { L1Block: {
number: deployConfig.l1BlockInitialNumber, number: deployConfig.l1BlockInitialNumber,
timestamp: deployConfig.l1BlockInitialTimestamp, timestamp: deployConfig.l1BlockInitialTimestamp,
...@@ -247,6 +246,9 @@ task('genesis-l2', 'create a genesis config') ...@@ -247,6 +246,9 @@ task('genesis-l2', 'create a genesis config')
} }
const storageLayout = await getStorageLayout(hre, name) const storageLayout = await getStorageLayout(hre, name)
if (storageLayout === undefined) {
throw new Error(`cannot find storage layout for ${name}`)
}
const slots = computeStorageSlots(storageLayout, variables[name]) const slots = computeStorageSlots(storageLayout, variables[name])
for (const slot of slots) { for (const slot of slots) {
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment