diff --git a/bindings/go/dispatcher/Dispatcher.go b/bindings/go/dispatcher/Dispatcher.go index 32282c7c..904d5248 100644 --- a/bindings/go/dispatcher/Dispatcher.go +++ b/bindings/go/dispatcher/Dispatcher.go @@ -112,7 +112,7 @@ type OpL2StateProof struct { // DispatcherMetaData contains all meta data concerning the Dispatcher contract. var DispatcherMetaData = &bind.MetaData{ - ABI: "[{\"type\":\"constructor\",\"inputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"acknowledgement\",\"inputs\":[{\"name\":\"packet\",\"type\":\"tuple\",\"internalType\":\"structIbcPacket\",\"components\":[{\"name\":\"src\",\"type\":\"tuple\",\"internalType\":\"structIbcEndpoint\",\"components\":[{\"name\":\"portId\",\"type\":\"string\",\"internalType\":\"string\"},{\"name\":\"channelId\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}]},{\"name\":\"dest\",\"type\":\"tuple\",\"internalType\":\"structIbcEndpoint\",\"components\":[{\"name\":\"portId\",\"type\":\"string\",\"internalType\":\"string\"},{\"name\":\"channelId\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}]},{\"name\":\"sequence\",\"type\":\"uint64\",\"internalType\":\"uint64\"},{\"name\":\"data\",\"type\":\"bytes\",\"internalType\":\"bytes\"},{\"name\":\"timeoutHeight\",\"type\":\"tuple\",\"internalType\":\"structHeight\",\"components\":[{\"name\":\"revision_number\",\"type\":\"uint64\",\"internalType\":\"uint64\"},{\"name\":\"revision_height\",\"type\":\"uint64\",\"internalType\":\"uint64\"}]},{\"name\":\"timeoutTimestamp\",\"type\":\"uint64\",\"internalType\":\"uint64\"}]},{\"name\":\"ack\",\"type\":\"bytes\",\"internalType\":\"bytes\"},{\"name\":\"proof\",\"type\":\"tuple\",\"internalType\":\"structIcs23Proof\",\"components\":[{\"name\":\"proof\",\"type\":\"tuple[]\",\"internalType\":\"structOpIcs23Proof[]\",\"components\":[{\"name\":\"path\",\"type\":\"tuple[]\",\"internalType\":\"structOpIcs23ProofPath[]\",\"components\":[{\"name\":\"prefix\",\"type\":\"bytes\",\"internalType\":\"bytes\"},{\"name\":\"suffix\",\"type\":\"bytes\",\"internalType\":\"bytes\"}]},{\"name\":\"key\",\"type\":\"bytes\",\"internalType\":\"bytes\"},{\"name\":\"value\",\"type\":\"bytes\",\"internalType\":\"bytes\"},{\"name\":\"prefix\",\"type\":\"bytes\",\"internalType\":\"bytes\"}]},{\"name\":\"height\",\"type\":\"uint256\",\"internalType\":\"uint256\"}]}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"channelCloseConfirm\",\"inputs\":[{\"name\":\"portAddress\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"channelId\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"},{\"name\":\"proof\",\"type\":\"tuple\",\"internalType\":\"structIcs23Proof\",\"components\":[{\"name\":\"proof\",\"type\":\"tuple[]\",\"internalType\":\"structOpIcs23Proof[]\",\"components\":[{\"name\":\"path\",\"type\":\"tuple[]\",\"internalType\":\"structOpIcs23ProofPath[]\",\"components\":[{\"name\":\"prefix\",\"type\":\"bytes\",\"internalType\":\"bytes\"},{\"name\":\"suffix\",\"type\":\"bytes\",\"internalType\":\"bytes\"}]},{\"name\":\"key\",\"type\":\"bytes\",\"internalType\":\"bytes\"},{\"name\":\"value\",\"type\":\"bytes\",\"internalType\":\"bytes\"},{\"name\":\"prefix\",\"type\":\"bytes\",\"internalType\":\"bytes\"}]},{\"name\":\"height\",\"type\":\"uint256\",\"internalType\":\"uint256\"}]}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"channelCloseInit\",\"inputs\":[{\"name\":\"channelId\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"channelOpenAck\",\"inputs\":[{\"name\":\"local\",\"type\":\"tuple\",\"internalType\":\"structChannelEnd\",\"components\":[{\"name\":\"portId\",\"type\":\"string\",\"internalType\":\"string\"},{\"name\":\"channelId\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"},{\"name\":\"version\",\"type\":\"string\",\"internalType\":\"string\"}]},{\"name\":\"connectionHops\",\"type\":\"string[]\",\"internalType\":\"string[]\"},{\"name\":\"ordering\",\"type\":\"uint8\",\"internalType\":\"enumChannelOrder\"},{\"name\":\"feeEnabled\",\"type\":\"bool\",\"internalType\":\"bool\"},{\"name\":\"counterparty\",\"type\":\"tuple\",\"internalType\":\"structChannelEnd\",\"components\":[{\"name\":\"portId\",\"type\":\"string\",\"internalType\":\"string\"},{\"name\":\"channelId\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"},{\"name\":\"version\",\"type\":\"string\",\"internalType\":\"string\"}]},{\"name\":\"proof\",\"type\":\"tuple\",\"internalType\":\"structIcs23Proof\",\"components\":[{\"name\":\"proof\",\"type\":\"tuple[]\",\"internalType\":\"structOpIcs23Proof[]\",\"components\":[{\"name\":\"path\",\"type\":\"tuple[]\",\"internalType\":\"structOpIcs23ProofPath[]\",\"components\":[{\"name\":\"prefix\",\"type\":\"bytes\",\"internalType\":\"bytes\"},{\"name\":\"suffix\",\"type\":\"bytes\",\"internalType\":\"bytes\"}]},{\"name\":\"key\",\"type\":\"bytes\",\"internalType\":\"bytes\"},{\"name\":\"value\",\"type\":\"bytes\",\"internalType\":\"bytes\"},{\"name\":\"prefix\",\"type\":\"bytes\",\"internalType\":\"bytes\"}]},{\"name\":\"height\",\"type\":\"uint256\",\"internalType\":\"uint256\"}]}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"channelOpenConfirm\",\"inputs\":[{\"name\":\"local\",\"type\":\"tuple\",\"internalType\":\"structChannelEnd\",\"components\":[{\"name\":\"portId\",\"type\":\"string\",\"internalType\":\"string\"},{\"name\":\"channelId\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"},{\"name\":\"version\",\"type\":\"string\",\"internalType\":\"string\"}]},{\"name\":\"connectionHops\",\"type\":\"string[]\",\"internalType\":\"string[]\"},{\"name\":\"ordering\",\"type\":\"uint8\",\"internalType\":\"enumChannelOrder\"},{\"name\":\"feeEnabled\",\"type\":\"bool\",\"internalType\":\"bool\"},{\"name\":\"counterparty\",\"type\":\"tuple\",\"internalType\":\"structChannelEnd\",\"components\":[{\"name\":\"portId\",\"type\":\"string\",\"internalType\":\"string\"},{\"name\":\"channelId\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"},{\"name\":\"version\",\"type\":\"string\",\"internalType\":\"string\"}]},{\"name\":\"proof\",\"type\":\"tuple\",\"internalType\":\"structIcs23Proof\",\"components\":[{\"name\":\"proof\",\"type\":\"tuple[]\",\"internalType\":\"structOpIcs23Proof[]\",\"components\":[{\"name\":\"path\",\"type\":\"tuple[]\",\"internalType\":\"structOpIcs23ProofPath[]\",\"components\":[{\"name\":\"prefix\",\"type\":\"bytes\",\"internalType\":\"bytes\"},{\"name\":\"suffix\",\"type\":\"bytes\",\"internalType\":\"bytes\"}]},{\"name\":\"key\",\"type\":\"bytes\",\"internalType\":\"bytes\"},{\"name\":\"value\",\"type\":\"bytes\",\"internalType\":\"bytes\"},{\"name\":\"prefix\",\"type\":\"bytes\",\"internalType\":\"bytes\"}]},{\"name\":\"height\",\"type\":\"uint256\",\"internalType\":\"uint256\"}]}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"channelOpenInit\",\"inputs\":[{\"name\":\"version\",\"type\":\"string\",\"internalType\":\"string\"},{\"name\":\"ordering\",\"type\":\"uint8\",\"internalType\":\"enumChannelOrder\"},{\"name\":\"feeEnabled\",\"type\":\"bool\",\"internalType\":\"bool\"},{\"name\":\"connectionHops\",\"type\":\"string[]\",\"internalType\":\"string[]\"},{\"name\":\"counterpartyPortId\",\"type\":\"string\",\"internalType\":\"string\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"channelOpenTry\",\"inputs\":[{\"name\":\"local\",\"type\":\"tuple\",\"internalType\":\"structChannelEnd\",\"components\":[{\"name\":\"portId\",\"type\":\"string\",\"internalType\":\"string\"},{\"name\":\"channelId\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"},{\"name\":\"version\",\"type\":\"string\",\"internalType\":\"string\"}]},{\"name\":\"ordering\",\"type\":\"uint8\",\"internalType\":\"enumChannelOrder\"},{\"name\":\"feeEnabled\",\"type\":\"bool\",\"internalType\":\"bool\"},{\"name\":\"connectionHops\",\"type\":\"string[]\",\"internalType\":\"string[]\"},{\"name\":\"counterparty\",\"type\":\"tuple\",\"internalType\":\"structChannelEnd\",\"components\":[{\"name\":\"portId\",\"type\":\"string\",\"internalType\":\"string\"},{\"name\":\"channelId\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"},{\"name\":\"version\",\"type\":\"string\",\"internalType\":\"string\"}]},{\"name\":\"proof\",\"type\":\"tuple\",\"internalType\":\"structIcs23Proof\",\"components\":[{\"name\":\"proof\",\"type\":\"tuple[]\",\"internalType\":\"structOpIcs23Proof[]\",\"components\":[{\"name\":\"path\",\"type\":\"tuple[]\",\"internalType\":\"structOpIcs23ProofPath[]\",\"components\":[{\"name\":\"prefix\",\"type\":\"bytes\",\"internalType\":\"bytes\"},{\"name\":\"suffix\",\"type\":\"bytes\",\"internalType\":\"bytes\"}]},{\"name\":\"key\",\"type\":\"bytes\",\"internalType\":\"bytes\"},{\"name\":\"value\",\"type\":\"bytes\",\"internalType\":\"bytes\"},{\"name\":\"prefix\",\"type\":\"bytes\",\"internalType\":\"bytes\"}]},{\"name\":\"height\",\"type\":\"uint256\",\"internalType\":\"uint256\"}]}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"feeVault\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"contractIFeeVault\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"getChannel\",\"inputs\":[{\"name\":\"portAddress\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"channelId\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"outputs\":[{\"name\":\"channel\",\"type\":\"tuple\",\"internalType\":\"structChannel\",\"components\":[{\"name\":\"version\",\"type\":\"string\",\"internalType\":\"string\"},{\"name\":\"ordering\",\"type\":\"uint8\",\"internalType\":\"enumChannelOrder\"},{\"name\":\"feeEnabled\",\"type\":\"bool\",\"internalType\":\"bool\"},{\"name\":\"connectionHops\",\"type\":\"string[]\",\"internalType\":\"string[]\"},{\"name\":\"counterpartyPortId\",\"type\":\"string\",\"internalType\":\"string\"},{\"name\":\"counterpartyChannelId\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"},{\"name\":\"portId\",\"type\":\"string\",\"internalType\":\"string\"}]}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"getOptimisticConsensusState\",\"inputs\":[{\"name\":\"height\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"connection\",\"type\":\"string\",\"internalType\":\"string\"}],\"outputs\":[{\"name\":\"appHash\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"fraudProofEndTime\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"ended\",\"type\":\"bool\",\"internalType\":\"bool\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"initialize\",\"inputs\":[{\"name\":\"initPortPrefix\",\"type\":\"string\",\"internalType\":\"string\"},{\"name\":\"_feeVault\",\"type\":\"address\",\"internalType\":\"contractIFeeVault\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"owner\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"address\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"portPrefix\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"string\",\"internalType\":\"string\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"portPrefixLen\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"uint32\",\"internalType\":\"uint32\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"proxiableUUID\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"recvPacket\",\"inputs\":[{\"name\":\"packet\",\"type\":\"tuple\",\"internalType\":\"structIbcPacket\",\"components\":[{\"name\":\"src\",\"type\":\"tuple\",\"internalType\":\"structIbcEndpoint\",\"components\":[{\"name\":\"portId\",\"type\":\"string\",\"internalType\":\"string\"},{\"name\":\"channelId\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}]},{\"name\":\"dest\",\"type\":\"tuple\",\"internalType\":\"structIbcEndpoint\",\"components\":[{\"name\":\"portId\",\"type\":\"string\",\"internalType\":\"string\"},{\"name\":\"channelId\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}]},{\"name\":\"sequence\",\"type\":\"uint64\",\"internalType\":\"uint64\"},{\"name\":\"data\",\"type\":\"bytes\",\"internalType\":\"bytes\"},{\"name\":\"timeoutHeight\",\"type\":\"tuple\",\"internalType\":\"structHeight\",\"components\":[{\"name\":\"revision_number\",\"type\":\"uint64\",\"internalType\":\"uint64\"},{\"name\":\"revision_height\",\"type\":\"uint64\",\"internalType\":\"uint64\"}]},{\"name\":\"timeoutTimestamp\",\"type\":\"uint64\",\"internalType\":\"uint64\"}]},{\"name\":\"proof\",\"type\":\"tuple\",\"internalType\":\"structIcs23Proof\",\"components\":[{\"name\":\"proof\",\"type\":\"tuple[]\",\"internalType\":\"structOpIcs23Proof[]\",\"components\":[{\"name\":\"path\",\"type\":\"tuple[]\",\"internalType\":\"structOpIcs23ProofPath[]\",\"components\":[{\"name\":\"prefix\",\"type\":\"bytes\",\"internalType\":\"bytes\"},{\"name\":\"suffix\",\"type\":\"bytes\",\"internalType\":\"bytes\"}]},{\"name\":\"key\",\"type\":\"bytes\",\"internalType\":\"bytes\"},{\"name\":\"value\",\"type\":\"bytes\",\"internalType\":\"bytes\"},{\"name\":\"prefix\",\"type\":\"bytes\",\"internalType\":\"bytes\"}]},{\"name\":\"height\",\"type\":\"uint256\",\"internalType\":\"uint256\"}]}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"removeConnection\",\"inputs\":[{\"name\":\"connection\",\"type\":\"string\",\"internalType\":\"string\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"renounceOwnership\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"sendPacket\",\"inputs\":[{\"name\":\"channelId\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"},{\"name\":\"packet\",\"type\":\"bytes\",\"internalType\":\"bytes\"},{\"name\":\"timeoutTimestamp\",\"type\":\"uint64\",\"internalType\":\"uint64\"}],\"outputs\":[{\"name\":\"sequence\",\"type\":\"uint64\",\"internalType\":\"uint64\"}],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"setClientForConnection\",\"inputs\":[{\"name\":\"connection\",\"type\":\"string\",\"internalType\":\"string\"},{\"name\":\"lightClient\",\"type\":\"address\",\"internalType\":\"contractILightClient\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"setPortPrefix\",\"inputs\":[{\"name\":\"_portPrefix\",\"type\":\"string\",\"internalType\":\"string\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"timeout\",\"inputs\":[{\"name\":\"packet\",\"type\":\"tuple\",\"internalType\":\"structIbcPacket\",\"components\":[{\"name\":\"src\",\"type\":\"tuple\",\"internalType\":\"structIbcEndpoint\",\"components\":[{\"name\":\"portId\",\"type\":\"string\",\"internalType\":\"string\"},{\"name\":\"channelId\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}]},{\"name\":\"dest\",\"type\":\"tuple\",\"internalType\":\"structIbcEndpoint\",\"components\":[{\"name\":\"portId\",\"type\":\"string\",\"internalType\":\"string\"},{\"name\":\"channelId\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}]},{\"name\":\"sequence\",\"type\":\"uint64\",\"internalType\":\"uint64\"},{\"name\":\"data\",\"type\":\"bytes\",\"internalType\":\"bytes\"},{\"name\":\"timeoutHeight\",\"type\":\"tuple\",\"internalType\":\"structHeight\",\"components\":[{\"name\":\"revision_number\",\"type\":\"uint64\",\"internalType\":\"uint64\"},{\"name\":\"revision_height\",\"type\":\"uint64\",\"internalType\":\"uint64\"}]},{\"name\":\"timeoutTimestamp\",\"type\":\"uint64\",\"internalType\":\"uint64\"}]},{\"name\":\"proof\",\"type\":\"tuple\",\"internalType\":\"structIcs23Proof\",\"components\":[{\"name\":\"proof\",\"type\":\"tuple[]\",\"internalType\":\"structOpIcs23Proof[]\",\"components\":[{\"name\":\"path\",\"type\":\"tuple[]\",\"internalType\":\"structOpIcs23ProofPath[]\",\"components\":[{\"name\":\"prefix\",\"type\":\"bytes\",\"internalType\":\"bytes\"},{\"name\":\"suffix\",\"type\":\"bytes\",\"internalType\":\"bytes\"}]},{\"name\":\"key\",\"type\":\"bytes\",\"internalType\":\"bytes\"},{\"name\":\"value\",\"type\":\"bytes\",\"internalType\":\"bytes\"},{\"name\":\"prefix\",\"type\":\"bytes\",\"internalType\":\"bytes\"}]},{\"name\":\"height\",\"type\":\"uint256\",\"internalType\":\"uint256\"}]}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"transferOwnership\",\"inputs\":[{\"name\":\"newOwner\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"updateClientWithOptimisticConsensusState\",\"inputs\":[{\"name\":\"l1header\",\"type\":\"tuple\",\"internalType\":\"structL1Header\",\"components\":[{\"name\":\"header\",\"type\":\"bytes[]\",\"internalType\":\"bytes[]\"},{\"name\":\"stateRoot\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"},{\"name\":\"number\",\"type\":\"uint64\",\"internalType\":\"uint64\"}]},{\"name\":\"proof\",\"type\":\"tuple\",\"internalType\":\"structOpL2StateProof\",\"components\":[{\"name\":\"accountProof\",\"type\":\"bytes[]\",\"internalType\":\"bytes[]\"},{\"name\":\"outputRootProof\",\"type\":\"bytes[]\",\"internalType\":\"bytes[]\"},{\"name\":\"l2OutputProposalKey\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"},{\"name\":\"l2BlockHash\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}]},{\"name\":\"height\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"appHash\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"connection\",\"type\":\"string\",\"internalType\":\"string\"}],\"outputs\":[{\"name\":\"fraudProofEndTime\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"ended\",\"type\":\"bool\",\"internalType\":\"bool\"}],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"upgradeTo\",\"inputs\":[{\"name\":\"newImplementation\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"upgradeToAndCall\",\"inputs\":[{\"name\":\"newImplementation\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"data\",\"type\":\"bytes\",\"internalType\":\"bytes\"}],\"outputs\":[],\"stateMutability\":\"payable\"},{\"type\":\"function\",\"name\":\"writeTimeoutPacket\",\"inputs\":[{\"name\":\"packet\",\"type\":\"tuple\",\"internalType\":\"structIbcPacket\",\"components\":[{\"name\":\"src\",\"type\":\"tuple\",\"internalType\":\"structIbcEndpoint\",\"components\":[{\"name\":\"portId\",\"type\":\"string\",\"internalType\":\"string\"},{\"name\":\"channelId\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}]},{\"name\":\"dest\",\"type\":\"tuple\",\"internalType\":\"structIbcEndpoint\",\"components\":[{\"name\":\"portId\",\"type\":\"string\",\"internalType\":\"string\"},{\"name\":\"channelId\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}]},{\"name\":\"sequence\",\"type\":\"uint64\",\"internalType\":\"uint64\"},{\"name\":\"data\",\"type\":\"bytes\",\"internalType\":\"bytes\"},{\"name\":\"timeoutHeight\",\"type\":\"tuple\",\"internalType\":\"structHeight\",\"components\":[{\"name\":\"revision_number\",\"type\":\"uint64\",\"internalType\":\"uint64\"},{\"name\":\"revision_height\",\"type\":\"uint64\",\"internalType\":\"uint64\"}]},{\"name\":\"timeoutTimestamp\",\"type\":\"uint64\",\"internalType\":\"uint64\"}]},{\"name\":\"proof\",\"type\":\"tuple\",\"internalType\":\"structIcs23Proof\",\"components\":[{\"name\":\"proof\",\"type\":\"tuple[]\",\"internalType\":\"structOpIcs23Proof[]\",\"components\":[{\"name\":\"path\",\"type\":\"tuple[]\",\"internalType\":\"structOpIcs23ProofPath[]\",\"components\":[{\"name\":\"prefix\",\"type\":\"bytes\",\"internalType\":\"bytes\"},{\"name\":\"suffix\",\"type\":\"bytes\",\"internalType\":\"bytes\"}]},{\"name\":\"key\",\"type\":\"bytes\",\"internalType\":\"bytes\"},{\"name\":\"value\",\"type\":\"bytes\",\"internalType\":\"bytes\"},{\"name\":\"prefix\",\"type\":\"bytes\",\"internalType\":\"bytes\"}]},{\"name\":\"height\",\"type\":\"uint256\",\"internalType\":\"uint256\"}]}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"event\",\"name\":\"Acknowledgement\",\"inputs\":[{\"name\":\"sourcePortAddress\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"sourceChannelId\",\"type\":\"bytes32\",\"indexed\":true,\"internalType\":\"bytes32\"},{\"name\":\"sequence\",\"type\":\"uint64\",\"indexed\":false,\"internalType\":\"uint64\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"AcknowledgementError\",\"inputs\":[{\"name\":\"receiver\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"error\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"AdminChanged\",\"inputs\":[{\"name\":\"previousAdmin\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"},{\"name\":\"newAdmin\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"BeaconUpgraded\",\"inputs\":[{\"name\":\"beacon\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"ChannelCloseConfirm\",\"inputs\":[{\"name\":\"portAddress\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"channelId\",\"type\":\"bytes32\",\"indexed\":true,\"internalType\":\"bytes32\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"ChannelCloseConfirmError\",\"inputs\":[{\"name\":\"receiver\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"error\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"ChannelCloseInit\",\"inputs\":[{\"name\":\"portAddress\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"channelId\",\"type\":\"bytes32\",\"indexed\":true,\"internalType\":\"bytes32\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"ChannelCloseInitError\",\"inputs\":[{\"name\":\"receiver\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"error\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"ChannelOpenAck\",\"inputs\":[{\"name\":\"receiver\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"channelId\",\"type\":\"bytes32\",\"indexed\":false,\"internalType\":\"bytes32\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"ChannelOpenAckError\",\"inputs\":[{\"name\":\"receiver\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"error\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"ChannelOpenConfirm\",\"inputs\":[{\"name\":\"receiver\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"channelId\",\"type\":\"bytes32\",\"indexed\":false,\"internalType\":\"bytes32\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"ChannelOpenConfirmError\",\"inputs\":[{\"name\":\"receiver\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"error\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"ChannelOpenInit\",\"inputs\":[{\"name\":\"receiver\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"version\",\"type\":\"string\",\"indexed\":false,\"internalType\":\"string\"},{\"name\":\"ordering\",\"type\":\"uint8\",\"indexed\":false,\"internalType\":\"enumChannelOrder\"},{\"name\":\"feeEnabled\",\"type\":\"bool\",\"indexed\":false,\"internalType\":\"bool\"},{\"name\":\"connectionHops\",\"type\":\"string[]\",\"indexed\":false,\"internalType\":\"string[]\"},{\"name\":\"counterpartyPortId\",\"type\":\"string\",\"indexed\":false,\"internalType\":\"string\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"ChannelOpenInitError\",\"inputs\":[{\"name\":\"receiver\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"error\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"ChannelOpenTry\",\"inputs\":[{\"name\":\"receiver\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"version\",\"type\":\"string\",\"indexed\":false,\"internalType\":\"string\"},{\"name\":\"ordering\",\"type\":\"uint8\",\"indexed\":false,\"internalType\":\"enumChannelOrder\"},{\"name\":\"feeEnabled\",\"type\":\"bool\",\"indexed\":false,\"internalType\":\"bool\"},{\"name\":\"connectionHops\",\"type\":\"string[]\",\"indexed\":false,\"internalType\":\"string[]\"},{\"name\":\"counterpartyPortId\",\"type\":\"string\",\"indexed\":false,\"internalType\":\"string\"},{\"name\":\"counterpartyChannelId\",\"type\":\"bytes32\",\"indexed\":false,\"internalType\":\"bytes32\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"ChannelOpenTryError\",\"inputs\":[{\"name\":\"receiver\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"error\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"Initialized\",\"inputs\":[{\"name\":\"version\",\"type\":\"uint8\",\"indexed\":false,\"internalType\":\"uint8\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"OwnershipTransferred\",\"inputs\":[{\"name\":\"previousOwner\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"newOwner\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"RecvPacket\",\"inputs\":[{\"name\":\"destPortAddress\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"destChannelId\",\"type\":\"bytes32\",\"indexed\":true,\"internalType\":\"bytes32\"},{\"name\":\"sequence\",\"type\":\"uint64\",\"indexed\":false,\"internalType\":\"uint64\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"SendPacket\",\"inputs\":[{\"name\":\"sourcePortAddress\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"sourceChannelId\",\"type\":\"bytes32\",\"indexed\":true,\"internalType\":\"bytes32\"},{\"name\":\"packet\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"},{\"name\":\"sequence\",\"type\":\"uint64\",\"indexed\":false,\"internalType\":\"uint64\"},{\"name\":\"timeoutTimestamp\",\"type\":\"uint64\",\"indexed\":false,\"internalType\":\"uint64\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"Timeout\",\"inputs\":[{\"name\":\"sourcePortAddress\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"sourceChannelId\",\"type\":\"bytes32\",\"indexed\":true,\"internalType\":\"bytes32\"},{\"name\":\"sequence\",\"type\":\"uint64\",\"indexed\":true,\"internalType\":\"uint64\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"TimeoutError\",\"inputs\":[{\"name\":\"receiver\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"error\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"Upgraded\",\"inputs\":[{\"name\":\"implementation\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"WriteAckPacket\",\"inputs\":[{\"name\":\"writerPortAddress\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"writerChannelId\",\"type\":\"bytes32\",\"indexed\":true,\"internalType\":\"bytes32\"},{\"name\":\"sequence\",\"type\":\"uint64\",\"indexed\":false,\"internalType\":\"uint64\"},{\"name\":\"ackPacket\",\"type\":\"tuple\",\"indexed\":false,\"internalType\":\"structAckPacket\",\"components\":[{\"name\":\"success\",\"type\":\"bool\",\"internalType\":\"bool\"},{\"name\":\"data\",\"type\":\"bytes\",\"internalType\":\"bytes\"}]}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"WriteTimeoutPacket\",\"inputs\":[{\"name\":\"writerPortAddress\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"writerChannelId\",\"type\":\"bytes32\",\"indexed\":true,\"internalType\":\"bytes32\"},{\"name\":\"sequence\",\"type\":\"uint64\",\"indexed\":false,\"internalType\":\"uint64\"},{\"name\":\"timeoutHeight\",\"type\":\"tuple\",\"indexed\":false,\"internalType\":\"structHeight\",\"components\":[{\"name\":\"revision_number\",\"type\":\"uint64\",\"internalType\":\"uint64\"},{\"name\":\"revision_height\",\"type\":\"uint64\",\"internalType\":\"uint64\"}]},{\"name\":\"timeoutTimestamp\",\"type\":\"uint64\",\"indexed\":false,\"internalType\":\"uint64\"}],\"anonymous\":false},{\"type\":\"error\",\"name\":\"ackPacketCommitmentAlreadyExists\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"channelIdNotFound\",\"inputs\":[{\"name\":\"channelId\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}]},{\"type\":\"error\",\"name\":\"channelNotOwnedByPortAddress\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"channelNotOwnedBySender\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"invalidAddress\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"invalidConnection\",\"inputs\":[{\"name\":\"connection\",\"type\":\"string\",\"internalType\":\"string\"}]},{\"type\":\"error\",\"name\":\"invalidConnectionHops\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"invalidCounterParty\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"invalidPacket\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"invalidPacketSequence\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"invalidPortPrefix\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"lightClientNotFound\",\"inputs\":[{\"name\":\"connection\",\"type\":\"string\",\"internalType\":\"string\"}]},{\"type\":\"error\",\"name\":\"notEnoughGas\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"packetCommitmentNotFound\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"packetNotTimedOut\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"packetReceiptAlreadyExists\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"unexpectedPacketSequence\",\"inputs\":[]}]", + ABI: "[{\"type\":\"constructor\",\"inputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"acceptOwnership\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"acknowledgement\",\"inputs\":[{\"name\":\"packet\",\"type\":\"tuple\",\"internalType\":\"structIbcPacket\",\"components\":[{\"name\":\"src\",\"type\":\"tuple\",\"internalType\":\"structIbcEndpoint\",\"components\":[{\"name\":\"portId\",\"type\":\"string\",\"internalType\":\"string\"},{\"name\":\"channelId\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}]},{\"name\":\"dest\",\"type\":\"tuple\",\"internalType\":\"structIbcEndpoint\",\"components\":[{\"name\":\"portId\",\"type\":\"string\",\"internalType\":\"string\"},{\"name\":\"channelId\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}]},{\"name\":\"sequence\",\"type\":\"uint64\",\"internalType\":\"uint64\"},{\"name\":\"data\",\"type\":\"bytes\",\"internalType\":\"bytes\"},{\"name\":\"timeoutHeight\",\"type\":\"tuple\",\"internalType\":\"structHeight\",\"components\":[{\"name\":\"revision_number\",\"type\":\"uint64\",\"internalType\":\"uint64\"},{\"name\":\"revision_height\",\"type\":\"uint64\",\"internalType\":\"uint64\"}]},{\"name\":\"timeoutTimestamp\",\"type\":\"uint64\",\"internalType\":\"uint64\"}]},{\"name\":\"ack\",\"type\":\"bytes\",\"internalType\":\"bytes\"},{\"name\":\"proof\",\"type\":\"tuple\",\"internalType\":\"structIcs23Proof\",\"components\":[{\"name\":\"proof\",\"type\":\"tuple[]\",\"internalType\":\"structOpIcs23Proof[]\",\"components\":[{\"name\":\"path\",\"type\":\"tuple[]\",\"internalType\":\"structOpIcs23ProofPath[]\",\"components\":[{\"name\":\"prefix\",\"type\":\"bytes\",\"internalType\":\"bytes\"},{\"name\":\"suffix\",\"type\":\"bytes\",\"internalType\":\"bytes\"}]},{\"name\":\"key\",\"type\":\"bytes\",\"internalType\":\"bytes\"},{\"name\":\"value\",\"type\":\"bytes\",\"internalType\":\"bytes\"},{\"name\":\"prefix\",\"type\":\"bytes\",\"internalType\":\"bytes\"}]},{\"name\":\"height\",\"type\":\"uint256\",\"internalType\":\"uint256\"}]}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"channelCloseConfirm\",\"inputs\":[{\"name\":\"portAddress\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"channelId\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"},{\"name\":\"proof\",\"type\":\"tuple\",\"internalType\":\"structIcs23Proof\",\"components\":[{\"name\":\"proof\",\"type\":\"tuple[]\",\"internalType\":\"structOpIcs23Proof[]\",\"components\":[{\"name\":\"path\",\"type\":\"tuple[]\",\"internalType\":\"structOpIcs23ProofPath[]\",\"components\":[{\"name\":\"prefix\",\"type\":\"bytes\",\"internalType\":\"bytes\"},{\"name\":\"suffix\",\"type\":\"bytes\",\"internalType\":\"bytes\"}]},{\"name\":\"key\",\"type\":\"bytes\",\"internalType\":\"bytes\"},{\"name\":\"value\",\"type\":\"bytes\",\"internalType\":\"bytes\"},{\"name\":\"prefix\",\"type\":\"bytes\",\"internalType\":\"bytes\"}]},{\"name\":\"height\",\"type\":\"uint256\",\"internalType\":\"uint256\"}]}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"channelCloseInit\",\"inputs\":[{\"name\":\"channelId\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"channelOpenAck\",\"inputs\":[{\"name\":\"local\",\"type\":\"tuple\",\"internalType\":\"structChannelEnd\",\"components\":[{\"name\":\"portId\",\"type\":\"string\",\"internalType\":\"string\"},{\"name\":\"channelId\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"},{\"name\":\"version\",\"type\":\"string\",\"internalType\":\"string\"}]},{\"name\":\"connectionHops\",\"type\":\"string[]\",\"internalType\":\"string[]\"},{\"name\":\"ordering\",\"type\":\"uint8\",\"internalType\":\"enumChannelOrder\"},{\"name\":\"feeEnabled\",\"type\":\"bool\",\"internalType\":\"bool\"},{\"name\":\"counterparty\",\"type\":\"tuple\",\"internalType\":\"structChannelEnd\",\"components\":[{\"name\":\"portId\",\"type\":\"string\",\"internalType\":\"string\"},{\"name\":\"channelId\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"},{\"name\":\"version\",\"type\":\"string\",\"internalType\":\"string\"}]},{\"name\":\"proof\",\"type\":\"tuple\",\"internalType\":\"structIcs23Proof\",\"components\":[{\"name\":\"proof\",\"type\":\"tuple[]\",\"internalType\":\"structOpIcs23Proof[]\",\"components\":[{\"name\":\"path\",\"type\":\"tuple[]\",\"internalType\":\"structOpIcs23ProofPath[]\",\"components\":[{\"name\":\"prefix\",\"type\":\"bytes\",\"internalType\":\"bytes\"},{\"name\":\"suffix\",\"type\":\"bytes\",\"internalType\":\"bytes\"}]},{\"name\":\"key\",\"type\":\"bytes\",\"internalType\":\"bytes\"},{\"name\":\"value\",\"type\":\"bytes\",\"internalType\":\"bytes\"},{\"name\":\"prefix\",\"type\":\"bytes\",\"internalType\":\"bytes\"}]},{\"name\":\"height\",\"type\":\"uint256\",\"internalType\":\"uint256\"}]}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"channelOpenConfirm\",\"inputs\":[{\"name\":\"local\",\"type\":\"tuple\",\"internalType\":\"structChannelEnd\",\"components\":[{\"name\":\"portId\",\"type\":\"string\",\"internalType\":\"string\"},{\"name\":\"channelId\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"},{\"name\":\"version\",\"type\":\"string\",\"internalType\":\"string\"}]},{\"name\":\"connectionHops\",\"type\":\"string[]\",\"internalType\":\"string[]\"},{\"name\":\"ordering\",\"type\":\"uint8\",\"internalType\":\"enumChannelOrder\"},{\"name\":\"feeEnabled\",\"type\":\"bool\",\"internalType\":\"bool\"},{\"name\":\"counterparty\",\"type\":\"tuple\",\"internalType\":\"structChannelEnd\",\"components\":[{\"name\":\"portId\",\"type\":\"string\",\"internalType\":\"string\"},{\"name\":\"channelId\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"},{\"name\":\"version\",\"type\":\"string\",\"internalType\":\"string\"}]},{\"name\":\"proof\",\"type\":\"tuple\",\"internalType\":\"structIcs23Proof\",\"components\":[{\"name\":\"proof\",\"type\":\"tuple[]\",\"internalType\":\"structOpIcs23Proof[]\",\"components\":[{\"name\":\"path\",\"type\":\"tuple[]\",\"internalType\":\"structOpIcs23ProofPath[]\",\"components\":[{\"name\":\"prefix\",\"type\":\"bytes\",\"internalType\":\"bytes\"},{\"name\":\"suffix\",\"type\":\"bytes\",\"internalType\":\"bytes\"}]},{\"name\":\"key\",\"type\":\"bytes\",\"internalType\":\"bytes\"},{\"name\":\"value\",\"type\":\"bytes\",\"internalType\":\"bytes\"},{\"name\":\"prefix\",\"type\":\"bytes\",\"internalType\":\"bytes\"}]},{\"name\":\"height\",\"type\":\"uint256\",\"internalType\":\"uint256\"}]}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"channelOpenInit\",\"inputs\":[{\"name\":\"version\",\"type\":\"string\",\"internalType\":\"string\"},{\"name\":\"ordering\",\"type\":\"uint8\",\"internalType\":\"enumChannelOrder\"},{\"name\":\"feeEnabled\",\"type\":\"bool\",\"internalType\":\"bool\"},{\"name\":\"connectionHops\",\"type\":\"string[]\",\"internalType\":\"string[]\"},{\"name\":\"counterpartyPortId\",\"type\":\"string\",\"internalType\":\"string\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"channelOpenTry\",\"inputs\":[{\"name\":\"local\",\"type\":\"tuple\",\"internalType\":\"structChannelEnd\",\"components\":[{\"name\":\"portId\",\"type\":\"string\",\"internalType\":\"string\"},{\"name\":\"channelId\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"},{\"name\":\"version\",\"type\":\"string\",\"internalType\":\"string\"}]},{\"name\":\"ordering\",\"type\":\"uint8\",\"internalType\":\"enumChannelOrder\"},{\"name\":\"feeEnabled\",\"type\":\"bool\",\"internalType\":\"bool\"},{\"name\":\"connectionHops\",\"type\":\"string[]\",\"internalType\":\"string[]\"},{\"name\":\"counterparty\",\"type\":\"tuple\",\"internalType\":\"structChannelEnd\",\"components\":[{\"name\":\"portId\",\"type\":\"string\",\"internalType\":\"string\"},{\"name\":\"channelId\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"},{\"name\":\"version\",\"type\":\"string\",\"internalType\":\"string\"}]},{\"name\":\"proof\",\"type\":\"tuple\",\"internalType\":\"structIcs23Proof\",\"components\":[{\"name\":\"proof\",\"type\":\"tuple[]\",\"internalType\":\"structOpIcs23Proof[]\",\"components\":[{\"name\":\"path\",\"type\":\"tuple[]\",\"internalType\":\"structOpIcs23ProofPath[]\",\"components\":[{\"name\":\"prefix\",\"type\":\"bytes\",\"internalType\":\"bytes\"},{\"name\":\"suffix\",\"type\":\"bytes\",\"internalType\":\"bytes\"}]},{\"name\":\"key\",\"type\":\"bytes\",\"internalType\":\"bytes\"},{\"name\":\"value\",\"type\":\"bytes\",\"internalType\":\"bytes\"},{\"name\":\"prefix\",\"type\":\"bytes\",\"internalType\":\"bytes\"}]},{\"name\":\"height\",\"type\":\"uint256\",\"internalType\":\"uint256\"}]}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"feeVault\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"contractIFeeVault\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"getChannel\",\"inputs\":[{\"name\":\"portAddress\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"channelId\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"outputs\":[{\"name\":\"channel\",\"type\":\"tuple\",\"internalType\":\"structChannel\",\"components\":[{\"name\":\"version\",\"type\":\"string\",\"internalType\":\"string\"},{\"name\":\"ordering\",\"type\":\"uint8\",\"internalType\":\"enumChannelOrder\"},{\"name\":\"feeEnabled\",\"type\":\"bool\",\"internalType\":\"bool\"},{\"name\":\"connectionHops\",\"type\":\"string[]\",\"internalType\":\"string[]\"},{\"name\":\"counterpartyPortId\",\"type\":\"string\",\"internalType\":\"string\"},{\"name\":\"counterpartyChannelId\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"},{\"name\":\"portId\",\"type\":\"string\",\"internalType\":\"string\"}]}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"getOptimisticConsensusState\",\"inputs\":[{\"name\":\"height\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"connection\",\"type\":\"string\",\"internalType\":\"string\"}],\"outputs\":[{\"name\":\"appHash\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"fraudProofEndTime\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"ended\",\"type\":\"bool\",\"internalType\":\"bool\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"initialize\",\"inputs\":[{\"name\":\"initPortPrefix\",\"type\":\"string\",\"internalType\":\"string\"},{\"name\":\"_feeVault\",\"type\":\"address\",\"internalType\":\"contractIFeeVault\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"owner\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"address\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"pendingOwner\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"address\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"portPrefix\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"string\",\"internalType\":\"string\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"portPrefixLen\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"uint32\",\"internalType\":\"uint32\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"proxiableUUID\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"recvPacket\",\"inputs\":[{\"name\":\"packet\",\"type\":\"tuple\",\"internalType\":\"structIbcPacket\",\"components\":[{\"name\":\"src\",\"type\":\"tuple\",\"internalType\":\"structIbcEndpoint\",\"components\":[{\"name\":\"portId\",\"type\":\"string\",\"internalType\":\"string\"},{\"name\":\"channelId\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}]},{\"name\":\"dest\",\"type\":\"tuple\",\"internalType\":\"structIbcEndpoint\",\"components\":[{\"name\":\"portId\",\"type\":\"string\",\"internalType\":\"string\"},{\"name\":\"channelId\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}]},{\"name\":\"sequence\",\"type\":\"uint64\",\"internalType\":\"uint64\"},{\"name\":\"data\",\"type\":\"bytes\",\"internalType\":\"bytes\"},{\"name\":\"timeoutHeight\",\"type\":\"tuple\",\"internalType\":\"structHeight\",\"components\":[{\"name\":\"revision_number\",\"type\":\"uint64\",\"internalType\":\"uint64\"},{\"name\":\"revision_height\",\"type\":\"uint64\",\"internalType\":\"uint64\"}]},{\"name\":\"timeoutTimestamp\",\"type\":\"uint64\",\"internalType\":\"uint64\"}]},{\"name\":\"proof\",\"type\":\"tuple\",\"internalType\":\"structIcs23Proof\",\"components\":[{\"name\":\"proof\",\"type\":\"tuple[]\",\"internalType\":\"structOpIcs23Proof[]\",\"components\":[{\"name\":\"path\",\"type\":\"tuple[]\",\"internalType\":\"structOpIcs23ProofPath[]\",\"components\":[{\"name\":\"prefix\",\"type\":\"bytes\",\"internalType\":\"bytes\"},{\"name\":\"suffix\",\"type\":\"bytes\",\"internalType\":\"bytes\"}]},{\"name\":\"key\",\"type\":\"bytes\",\"internalType\":\"bytes\"},{\"name\":\"value\",\"type\":\"bytes\",\"internalType\":\"bytes\"},{\"name\":\"prefix\",\"type\":\"bytes\",\"internalType\":\"bytes\"}]},{\"name\":\"height\",\"type\":\"uint256\",\"internalType\":\"uint256\"}]}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"removeConnection\",\"inputs\":[{\"name\":\"connection\",\"type\":\"string\",\"internalType\":\"string\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"renounceOwnership\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"sendPacket\",\"inputs\":[{\"name\":\"channelId\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"},{\"name\":\"packet\",\"type\":\"bytes\",\"internalType\":\"bytes\"},{\"name\":\"timeoutTimestamp\",\"type\":\"uint64\",\"internalType\":\"uint64\"}],\"outputs\":[{\"name\":\"sequence\",\"type\":\"uint64\",\"internalType\":\"uint64\"}],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"setClientForConnection\",\"inputs\":[{\"name\":\"connection\",\"type\":\"string\",\"internalType\":\"string\"},{\"name\":\"lightClient\",\"type\":\"address\",\"internalType\":\"contractILightClient\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"setPortPrefix\",\"inputs\":[{\"name\":\"_portPrefix\",\"type\":\"string\",\"internalType\":\"string\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"timeout\",\"inputs\":[{\"name\":\"packet\",\"type\":\"tuple\",\"internalType\":\"structIbcPacket\",\"components\":[{\"name\":\"src\",\"type\":\"tuple\",\"internalType\":\"structIbcEndpoint\",\"components\":[{\"name\":\"portId\",\"type\":\"string\",\"internalType\":\"string\"},{\"name\":\"channelId\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}]},{\"name\":\"dest\",\"type\":\"tuple\",\"internalType\":\"structIbcEndpoint\",\"components\":[{\"name\":\"portId\",\"type\":\"string\",\"internalType\":\"string\"},{\"name\":\"channelId\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}]},{\"name\":\"sequence\",\"type\":\"uint64\",\"internalType\":\"uint64\"},{\"name\":\"data\",\"type\":\"bytes\",\"internalType\":\"bytes\"},{\"name\":\"timeoutHeight\",\"type\":\"tuple\",\"internalType\":\"structHeight\",\"components\":[{\"name\":\"revision_number\",\"type\":\"uint64\",\"internalType\":\"uint64\"},{\"name\":\"revision_height\",\"type\":\"uint64\",\"internalType\":\"uint64\"}]},{\"name\":\"timeoutTimestamp\",\"type\":\"uint64\",\"internalType\":\"uint64\"}]},{\"name\":\"proof\",\"type\":\"tuple\",\"internalType\":\"structIcs23Proof\",\"components\":[{\"name\":\"proof\",\"type\":\"tuple[]\",\"internalType\":\"structOpIcs23Proof[]\",\"components\":[{\"name\":\"path\",\"type\":\"tuple[]\",\"internalType\":\"structOpIcs23ProofPath[]\",\"components\":[{\"name\":\"prefix\",\"type\":\"bytes\",\"internalType\":\"bytes\"},{\"name\":\"suffix\",\"type\":\"bytes\",\"internalType\":\"bytes\"}]},{\"name\":\"key\",\"type\":\"bytes\",\"internalType\":\"bytes\"},{\"name\":\"value\",\"type\":\"bytes\",\"internalType\":\"bytes\"},{\"name\":\"prefix\",\"type\":\"bytes\",\"internalType\":\"bytes\"}]},{\"name\":\"height\",\"type\":\"uint256\",\"internalType\":\"uint256\"}]}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"transferOwnership\",\"inputs\":[{\"name\":\"newOwner\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"updateClientWithOptimisticConsensusState\",\"inputs\":[{\"name\":\"l1header\",\"type\":\"tuple\",\"internalType\":\"structL1Header\",\"components\":[{\"name\":\"header\",\"type\":\"bytes[]\",\"internalType\":\"bytes[]\"},{\"name\":\"stateRoot\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"},{\"name\":\"number\",\"type\":\"uint64\",\"internalType\":\"uint64\"}]},{\"name\":\"proof\",\"type\":\"tuple\",\"internalType\":\"structOpL2StateProof\",\"components\":[{\"name\":\"accountProof\",\"type\":\"bytes[]\",\"internalType\":\"bytes[]\"},{\"name\":\"outputRootProof\",\"type\":\"bytes[]\",\"internalType\":\"bytes[]\"},{\"name\":\"l2OutputProposalKey\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"},{\"name\":\"l2BlockHash\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}]},{\"name\":\"height\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"appHash\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"connection\",\"type\":\"string\",\"internalType\":\"string\"}],\"outputs\":[{\"name\":\"fraudProofEndTime\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"ended\",\"type\":\"bool\",\"internalType\":\"bool\"}],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"upgradeTo\",\"inputs\":[{\"name\":\"newImplementation\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"upgradeToAndCall\",\"inputs\":[{\"name\":\"newImplementation\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"data\",\"type\":\"bytes\",\"internalType\":\"bytes\"}],\"outputs\":[],\"stateMutability\":\"payable\"},{\"type\":\"function\",\"name\":\"writeTimeoutPacket\",\"inputs\":[{\"name\":\"packet\",\"type\":\"tuple\",\"internalType\":\"structIbcPacket\",\"components\":[{\"name\":\"src\",\"type\":\"tuple\",\"internalType\":\"structIbcEndpoint\",\"components\":[{\"name\":\"portId\",\"type\":\"string\",\"internalType\":\"string\"},{\"name\":\"channelId\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}]},{\"name\":\"dest\",\"type\":\"tuple\",\"internalType\":\"structIbcEndpoint\",\"components\":[{\"name\":\"portId\",\"type\":\"string\",\"internalType\":\"string\"},{\"name\":\"channelId\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}]},{\"name\":\"sequence\",\"type\":\"uint64\",\"internalType\":\"uint64\"},{\"name\":\"data\",\"type\":\"bytes\",\"internalType\":\"bytes\"},{\"name\":\"timeoutHeight\",\"type\":\"tuple\",\"internalType\":\"structHeight\",\"components\":[{\"name\":\"revision_number\",\"type\":\"uint64\",\"internalType\":\"uint64\"},{\"name\":\"revision_height\",\"type\":\"uint64\",\"internalType\":\"uint64\"}]},{\"name\":\"timeoutTimestamp\",\"type\":\"uint64\",\"internalType\":\"uint64\"}]},{\"name\":\"proof\",\"type\":\"tuple\",\"internalType\":\"structIcs23Proof\",\"components\":[{\"name\":\"proof\",\"type\":\"tuple[]\",\"internalType\":\"structOpIcs23Proof[]\",\"components\":[{\"name\":\"path\",\"type\":\"tuple[]\",\"internalType\":\"structOpIcs23ProofPath[]\",\"components\":[{\"name\":\"prefix\",\"type\":\"bytes\",\"internalType\":\"bytes\"},{\"name\":\"suffix\",\"type\":\"bytes\",\"internalType\":\"bytes\"}]},{\"name\":\"key\",\"type\":\"bytes\",\"internalType\":\"bytes\"},{\"name\":\"value\",\"type\":\"bytes\",\"internalType\":\"bytes\"},{\"name\":\"prefix\",\"type\":\"bytes\",\"internalType\":\"bytes\"}]},{\"name\":\"height\",\"type\":\"uint256\",\"internalType\":\"uint256\"}]}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"event\",\"name\":\"Acknowledgement\",\"inputs\":[{\"name\":\"sourcePortAddress\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"sourceChannelId\",\"type\":\"bytes32\",\"indexed\":true,\"internalType\":\"bytes32\"},{\"name\":\"sequence\",\"type\":\"uint64\",\"indexed\":false,\"internalType\":\"uint64\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"AcknowledgementError\",\"inputs\":[{\"name\":\"receiver\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"error\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"AdminChanged\",\"inputs\":[{\"name\":\"previousAdmin\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"},{\"name\":\"newAdmin\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"BeaconUpgraded\",\"inputs\":[{\"name\":\"beacon\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"ChannelCloseConfirm\",\"inputs\":[{\"name\":\"portAddress\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"channelId\",\"type\":\"bytes32\",\"indexed\":true,\"internalType\":\"bytes32\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"ChannelCloseConfirmError\",\"inputs\":[{\"name\":\"receiver\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"error\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"ChannelCloseInit\",\"inputs\":[{\"name\":\"portAddress\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"channelId\",\"type\":\"bytes32\",\"indexed\":true,\"internalType\":\"bytes32\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"ChannelCloseInitError\",\"inputs\":[{\"name\":\"receiver\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"error\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"ChannelOpenAck\",\"inputs\":[{\"name\":\"receiver\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"channelId\",\"type\":\"bytes32\",\"indexed\":false,\"internalType\":\"bytes32\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"ChannelOpenAckError\",\"inputs\":[{\"name\":\"receiver\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"error\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"ChannelOpenConfirm\",\"inputs\":[{\"name\":\"receiver\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"channelId\",\"type\":\"bytes32\",\"indexed\":false,\"internalType\":\"bytes32\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"ChannelOpenConfirmError\",\"inputs\":[{\"name\":\"receiver\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"error\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"ChannelOpenInit\",\"inputs\":[{\"name\":\"receiver\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"version\",\"type\":\"string\",\"indexed\":false,\"internalType\":\"string\"},{\"name\":\"ordering\",\"type\":\"uint8\",\"indexed\":false,\"internalType\":\"enumChannelOrder\"},{\"name\":\"feeEnabled\",\"type\":\"bool\",\"indexed\":false,\"internalType\":\"bool\"},{\"name\":\"connectionHops\",\"type\":\"string[]\",\"indexed\":false,\"internalType\":\"string[]\"},{\"name\":\"counterpartyPortId\",\"type\":\"string\",\"indexed\":false,\"internalType\":\"string\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"ChannelOpenInitError\",\"inputs\":[{\"name\":\"receiver\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"error\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"ChannelOpenTry\",\"inputs\":[{\"name\":\"receiver\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"version\",\"type\":\"string\",\"indexed\":false,\"internalType\":\"string\"},{\"name\":\"ordering\",\"type\":\"uint8\",\"indexed\":false,\"internalType\":\"enumChannelOrder\"},{\"name\":\"feeEnabled\",\"type\":\"bool\",\"indexed\":false,\"internalType\":\"bool\"},{\"name\":\"connectionHops\",\"type\":\"string[]\",\"indexed\":false,\"internalType\":\"string[]\"},{\"name\":\"counterpartyPortId\",\"type\":\"string\",\"indexed\":false,\"internalType\":\"string\"},{\"name\":\"counterpartyChannelId\",\"type\":\"bytes32\",\"indexed\":false,\"internalType\":\"bytes32\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"ChannelOpenTryError\",\"inputs\":[{\"name\":\"receiver\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"error\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"Initialized\",\"inputs\":[{\"name\":\"version\",\"type\":\"uint8\",\"indexed\":false,\"internalType\":\"uint8\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"OwnershipTransferStarted\",\"inputs\":[{\"name\":\"previousOwner\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"newOwner\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"OwnershipTransferred\",\"inputs\":[{\"name\":\"previousOwner\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"newOwner\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"RecvPacket\",\"inputs\":[{\"name\":\"destPortAddress\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"destChannelId\",\"type\":\"bytes32\",\"indexed\":true,\"internalType\":\"bytes32\"},{\"name\":\"sequence\",\"type\":\"uint64\",\"indexed\":false,\"internalType\":\"uint64\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"SendPacket\",\"inputs\":[{\"name\":\"sourcePortAddress\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"sourceChannelId\",\"type\":\"bytes32\",\"indexed\":true,\"internalType\":\"bytes32\"},{\"name\":\"packet\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"},{\"name\":\"sequence\",\"type\":\"uint64\",\"indexed\":false,\"internalType\":\"uint64\"},{\"name\":\"timeoutTimestamp\",\"type\":\"uint64\",\"indexed\":false,\"internalType\":\"uint64\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"Timeout\",\"inputs\":[{\"name\":\"sourcePortAddress\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"sourceChannelId\",\"type\":\"bytes32\",\"indexed\":true,\"internalType\":\"bytes32\"},{\"name\":\"sequence\",\"type\":\"uint64\",\"indexed\":true,\"internalType\":\"uint64\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"TimeoutError\",\"inputs\":[{\"name\":\"receiver\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"error\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"Upgraded\",\"inputs\":[{\"name\":\"implementation\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"WriteAckPacket\",\"inputs\":[{\"name\":\"writerPortAddress\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"writerChannelId\",\"type\":\"bytes32\",\"indexed\":true,\"internalType\":\"bytes32\"},{\"name\":\"sequence\",\"type\":\"uint64\",\"indexed\":false,\"internalType\":\"uint64\"},{\"name\":\"ackPacket\",\"type\":\"tuple\",\"indexed\":false,\"internalType\":\"structAckPacket\",\"components\":[{\"name\":\"success\",\"type\":\"bool\",\"internalType\":\"bool\"},{\"name\":\"data\",\"type\":\"bytes\",\"internalType\":\"bytes\"}]}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"WriteTimeoutPacket\",\"inputs\":[{\"name\":\"writerPortAddress\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"writerChannelId\",\"type\":\"bytes32\",\"indexed\":true,\"internalType\":\"bytes32\"},{\"name\":\"sequence\",\"type\":\"uint64\",\"indexed\":false,\"internalType\":\"uint64\"},{\"name\":\"timeoutHeight\",\"type\":\"tuple\",\"indexed\":false,\"internalType\":\"structHeight\",\"components\":[{\"name\":\"revision_number\",\"type\":\"uint64\",\"internalType\":\"uint64\"},{\"name\":\"revision_height\",\"type\":\"uint64\",\"internalType\":\"uint64\"}]},{\"name\":\"timeoutTimestamp\",\"type\":\"uint64\",\"indexed\":false,\"internalType\":\"uint64\"}],\"anonymous\":false},{\"type\":\"error\",\"name\":\"ackPacketCommitmentAlreadyExists\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"channelIdNotFound\",\"inputs\":[{\"name\":\"channelId\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}]},{\"type\":\"error\",\"name\":\"channelNotOwnedByPortAddress\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"channelNotOwnedBySender\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"invalidAddress\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"invalidConnection\",\"inputs\":[{\"name\":\"connection\",\"type\":\"string\",\"internalType\":\"string\"}]},{\"type\":\"error\",\"name\":\"invalidConnectionHops\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"invalidCounterParty\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"invalidPacket\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"invalidPacketSequence\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"invalidPortPrefix\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"lightClientNotFound\",\"inputs\":[{\"name\":\"connection\",\"type\":\"string\",\"internalType\":\"string\"}]},{\"type\":\"error\",\"name\":\"notEnoughGas\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"packetCommitmentNotFound\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"packetNotTimedOut\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"packetReceiptAlreadyExists\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"unexpectedPacketSequence\",\"inputs\":[]}]", } // DispatcherABI is the input ABI used to generate the binding from. @@ -404,6 +404,37 @@ func (_Dispatcher *DispatcherCallerSession) Owner() (common.Address, error) { return _Dispatcher.Contract.Owner(&_Dispatcher.CallOpts) } +// PendingOwner is a free data retrieval call binding the contract method 0xe30c3978. +// +// Solidity: function pendingOwner() view returns(address) +func (_Dispatcher *DispatcherCaller) PendingOwner(opts *bind.CallOpts) (common.Address, error) { + var out []interface{} + err := _Dispatcher.contract.Call(opts, &out, "pendingOwner") + + if err != nil { + return *new(common.Address), err + } + + out0 := *abi.ConvertType(out[0], new(common.Address)).(*common.Address) + + return out0, err + +} + +// PendingOwner is a free data retrieval call binding the contract method 0xe30c3978. +// +// Solidity: function pendingOwner() view returns(address) +func (_Dispatcher *DispatcherSession) PendingOwner() (common.Address, error) { + return _Dispatcher.Contract.PendingOwner(&_Dispatcher.CallOpts) +} + +// PendingOwner is a free data retrieval call binding the contract method 0xe30c3978. +// +// Solidity: function pendingOwner() view returns(address) +func (_Dispatcher *DispatcherCallerSession) PendingOwner() (common.Address, error) { + return _Dispatcher.Contract.PendingOwner(&_Dispatcher.CallOpts) +} + // PortPrefix is a free data retrieval call binding the contract method 0x7774a6d3. // // Solidity: function portPrefix() view returns(string) @@ -497,6 +528,27 @@ func (_Dispatcher *DispatcherCallerSession) ProxiableUUID() ([32]byte, error) { return _Dispatcher.Contract.ProxiableUUID(&_Dispatcher.CallOpts) } +// AcceptOwnership is a paid mutator transaction binding the contract method 0x79ba5097. +// +// Solidity: function acceptOwnership() returns() +func (_Dispatcher *DispatcherTransactor) AcceptOwnership(opts *bind.TransactOpts) (*types.Transaction, error) { + return _Dispatcher.contract.Transact(opts, "acceptOwnership") +} + +// AcceptOwnership is a paid mutator transaction binding the contract method 0x79ba5097. +// +// Solidity: function acceptOwnership() returns() +func (_Dispatcher *DispatcherSession) AcceptOwnership() (*types.Transaction, error) { + return _Dispatcher.Contract.AcceptOwnership(&_Dispatcher.TransactOpts) +} + +// AcceptOwnership is a paid mutator transaction binding the contract method 0x79ba5097. +// +// Solidity: function acceptOwnership() returns() +func (_Dispatcher *DispatcherTransactorSession) AcceptOwnership() (*types.Transaction, error) { + return _Dispatcher.Contract.AcceptOwnership(&_Dispatcher.TransactOpts) +} + // Acknowledgement is a paid mutator transaction binding the contract method 0xba5a4d25. // // Solidity: function acknowledgement(((string,bytes32),(string,bytes32),uint64,bytes,(uint64,uint64),uint64) packet, bytes ack, (((bytes,bytes)[],bytes,bytes,bytes)[],uint256) proof) returns() @@ -3394,6 +3446,159 @@ func (_Dispatcher *DispatcherFilterer) ParseInitialized(log types.Log) (*Dispatc return event, nil } +// DispatcherOwnershipTransferStartedIterator is returned from FilterOwnershipTransferStarted and is used to iterate over the raw logs and unpacked data for OwnershipTransferStarted events raised by the Dispatcher contract. +type DispatcherOwnershipTransferStartedIterator struct { + Event *DispatcherOwnershipTransferStarted // Event containing the contract specifics and raw log + + contract *bind.BoundContract // Generic contract to use for unpacking event data + event string // Event name to use for unpacking event data + + logs chan types.Log // Log channel receiving the found contract events + sub ethereum.Subscription // Subscription for errors, completion and termination + done bool // Whether the subscription completed delivering logs + fail error // Occurred error to stop iteration +} + +// Next advances the iterator to the subsequent event, returning whether there +// are any more events found. In case of a retrieval or parsing error, false is +// returned and Error() can be queried for the exact failure. +func (it *DispatcherOwnershipTransferStartedIterator) Next() bool { + // If the iterator failed, stop iterating + if it.fail != nil { + return false + } + // If the iterator completed, deliver directly whatever's available + if it.done { + select { + case log := <-it.logs: + it.Event = new(DispatcherOwnershipTransferStarted) + if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { + it.fail = err + return false + } + it.Event.Raw = log + return true + + default: + return false + } + } + // Iterator still in progress, wait for either a data or an error event + select { + case log := <-it.logs: + it.Event = new(DispatcherOwnershipTransferStarted) + if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { + it.fail = err + return false + } + it.Event.Raw = log + return true + + case err := <-it.sub.Err(): + it.done = true + it.fail = err + return it.Next() + } +} + +// Error returns any retrieval or parsing error occurred during filtering. +func (it *DispatcherOwnershipTransferStartedIterator) Error() error { + return it.fail +} + +// Close terminates the iteration process, releasing any pending underlying +// resources. +func (it *DispatcherOwnershipTransferStartedIterator) Close() error { + it.sub.Unsubscribe() + return nil +} + +// DispatcherOwnershipTransferStarted represents a OwnershipTransferStarted event raised by the Dispatcher contract. +type DispatcherOwnershipTransferStarted struct { + PreviousOwner common.Address + NewOwner common.Address + Raw types.Log // Blockchain specific contextual infos +} + +// FilterOwnershipTransferStarted is a free log retrieval operation binding the contract event 0x38d16b8cac22d99fc7c124b9cd0de2d3fa1faef420bfe791d8c362d765e22700. +// +// Solidity: event OwnershipTransferStarted(address indexed previousOwner, address indexed newOwner) +func (_Dispatcher *DispatcherFilterer) FilterOwnershipTransferStarted(opts *bind.FilterOpts, previousOwner []common.Address, newOwner []common.Address) (*DispatcherOwnershipTransferStartedIterator, error) { + + var previousOwnerRule []interface{} + for _, previousOwnerItem := range previousOwner { + previousOwnerRule = append(previousOwnerRule, previousOwnerItem) + } + var newOwnerRule []interface{} + for _, newOwnerItem := range newOwner { + newOwnerRule = append(newOwnerRule, newOwnerItem) + } + + logs, sub, err := _Dispatcher.contract.FilterLogs(opts, "OwnershipTransferStarted", previousOwnerRule, newOwnerRule) + if err != nil { + return nil, err + } + return &DispatcherOwnershipTransferStartedIterator{contract: _Dispatcher.contract, event: "OwnershipTransferStarted", logs: logs, sub: sub}, nil +} + +// WatchOwnershipTransferStarted is a free log subscription operation binding the contract event 0x38d16b8cac22d99fc7c124b9cd0de2d3fa1faef420bfe791d8c362d765e22700. +// +// Solidity: event OwnershipTransferStarted(address indexed previousOwner, address indexed newOwner) +func (_Dispatcher *DispatcherFilterer) WatchOwnershipTransferStarted(opts *bind.WatchOpts, sink chan<- *DispatcherOwnershipTransferStarted, previousOwner []common.Address, newOwner []common.Address) (event.Subscription, error) { + + var previousOwnerRule []interface{} + for _, previousOwnerItem := range previousOwner { + previousOwnerRule = append(previousOwnerRule, previousOwnerItem) + } + var newOwnerRule []interface{} + for _, newOwnerItem := range newOwner { + newOwnerRule = append(newOwnerRule, newOwnerItem) + } + + logs, sub, err := _Dispatcher.contract.WatchLogs(opts, "OwnershipTransferStarted", previousOwnerRule, newOwnerRule) + if err != nil { + return nil, err + } + return event.NewSubscription(func(quit <-chan struct{}) error { + defer sub.Unsubscribe() + for { + select { + case log := <-logs: + // New log arrived, parse the event and forward to the user + event := new(DispatcherOwnershipTransferStarted) + if err := _Dispatcher.contract.UnpackLog(event, "OwnershipTransferStarted", log); err != nil { + return err + } + event.Raw = log + + select { + case sink <- event: + case err := <-sub.Err(): + return err + case <-quit: + return nil + } + case err := <-sub.Err(): + return err + case <-quit: + return nil + } + } + }), nil +} + +// ParseOwnershipTransferStarted is a log parse operation binding the contract event 0x38d16b8cac22d99fc7c124b9cd0de2d3fa1faef420bfe791d8c362d765e22700. +// +// Solidity: event OwnershipTransferStarted(address indexed previousOwner, address indexed newOwner) +func (_Dispatcher *DispatcherFilterer) ParseOwnershipTransferStarted(log types.Log) (*DispatcherOwnershipTransferStarted, error) { + event := new(DispatcherOwnershipTransferStarted) + if err := _Dispatcher.contract.UnpackLog(event, "OwnershipTransferStarted", log); err != nil { + return nil, err + } + event.Raw = log + return event, nil +} + // DispatcherOwnershipTransferredIterator is returned from FilterOwnershipTransferred and is used to iterate over the raw logs and unpacked data for OwnershipTransferred events raised by the Dispatcher contract. type DispatcherOwnershipTransferredIterator struct { Event *DispatcherOwnershipTransferred // Event containing the contract specifics and raw log diff --git a/bindings/go/feevault/FeeVault.go b/bindings/go/feevault/FeeVault.go index a028201b..3e8bc6bd 100644 --- a/bindings/go/feevault/FeeVault.go +++ b/bindings/go/feevault/FeeVault.go @@ -31,7 +31,7 @@ var ( // FeeVaultMetaData contains all meta data concerning the FeeVault contract. var FeeVaultMetaData = &bind.MetaData{ - ABI: "[{\"type\":\"function\",\"name\":\"depositOpenChannelFee\",\"inputs\":[{\"name\":\"src\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"version\",\"type\":\"string\",\"internalType\":\"string\"},{\"name\":\"ordering\",\"type\":\"uint8\",\"internalType\":\"enumChannelOrder\"},{\"name\":\"connectionHops\",\"type\":\"string[]\",\"internalType\":\"string[]\"},{\"name\":\"counterpartyPortId\",\"type\":\"string\",\"internalType\":\"string\"}],\"outputs\":[],\"stateMutability\":\"payable\"},{\"type\":\"function\",\"name\":\"depositSendPacketFee\",\"inputs\":[{\"name\":\"channelId\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"},{\"name\":\"sequence\",\"type\":\"uint64\",\"internalType\":\"uint64\"},{\"name\":\"gasLimits\",\"type\":\"uint256[2]\",\"internalType\":\"uint256[2]\"},{\"name\":\"gasPrices\",\"type\":\"uint256[2]\",\"internalType\":\"uint256[2]\"}],\"outputs\":[],\"stateMutability\":\"payable\"},{\"type\":\"function\",\"name\":\"owner\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"address\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"renounceOwnership\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"transferOwnership\",\"inputs\":[{\"name\":\"newOwner\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"withdrawFeesToOwner\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"event\",\"name\":\"OpenChannelFeeDeposited\",\"inputs\":[{\"name\":\"sourceAddress\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"},{\"name\":\"version\",\"type\":\"string\",\"indexed\":false,\"internalType\":\"string\"},{\"name\":\"ordering\",\"type\":\"uint8\",\"indexed\":false,\"internalType\":\"enumChannelOrder\"},{\"name\":\"connectionHops\",\"type\":\"string[]\",\"indexed\":false,\"internalType\":\"string[]\"},{\"name\":\"counterpartyPortId\",\"type\":\"string\",\"indexed\":false,\"internalType\":\"string\"},{\"name\":\"feeAmount\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"OwnershipTransferred\",\"inputs\":[{\"name\":\"previousOwner\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"newOwner\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"SendPacketFeeDeposited\",\"inputs\":[{\"name\":\"channelId\",\"type\":\"bytes32\",\"indexed\":true,\"internalType\":\"bytes32\"},{\"name\":\"sequence\",\"type\":\"uint64\",\"indexed\":true,\"internalType\":\"uint64\"},{\"name\":\"gasLimits\",\"type\":\"uint256[2]\",\"indexed\":false,\"internalType\":\"uint256[2]\"},{\"name\":\"gasPrices\",\"type\":\"uint256[2]\",\"indexed\":false,\"internalType\":\"uint256[2]\"}],\"anonymous\":false},{\"type\":\"error\",\"name\":\"IncorrectFeeSent\",\"inputs\":[{\"name\":\"expected\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"sent\",\"type\":\"uint256\",\"internalType\":\"uint256\"}]},{\"type\":\"error\",\"name\":\"NoFeeSent\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"SenderNotDispatcher\",\"inputs\":[]}]", + ABI: "[{\"type\":\"function\",\"name\":\"acceptOwnership\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"depositOpenChannelFee\",\"inputs\":[{\"name\":\"src\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"version\",\"type\":\"string\",\"internalType\":\"string\"},{\"name\":\"ordering\",\"type\":\"uint8\",\"internalType\":\"enumChannelOrder\"},{\"name\":\"connectionHops\",\"type\":\"string[]\",\"internalType\":\"string[]\"},{\"name\":\"counterpartyPortId\",\"type\":\"string\",\"internalType\":\"string\"}],\"outputs\":[],\"stateMutability\":\"payable\"},{\"type\":\"function\",\"name\":\"depositSendPacketFee\",\"inputs\":[{\"name\":\"channelId\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"},{\"name\":\"sequence\",\"type\":\"uint64\",\"internalType\":\"uint64\"},{\"name\":\"gasLimits\",\"type\":\"uint256[2]\",\"internalType\":\"uint256[2]\"},{\"name\":\"gasPrices\",\"type\":\"uint256[2]\",\"internalType\":\"uint256[2]\"}],\"outputs\":[],\"stateMutability\":\"payable\"},{\"type\":\"function\",\"name\":\"owner\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"address\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"pendingOwner\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"address\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"renounceOwnership\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"transferOwnership\",\"inputs\":[{\"name\":\"newOwner\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"withdrawFeesToOwner\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"event\",\"name\":\"OpenChannelFeeDeposited\",\"inputs\":[{\"name\":\"sourceAddress\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"},{\"name\":\"version\",\"type\":\"string\",\"indexed\":false,\"internalType\":\"string\"},{\"name\":\"ordering\",\"type\":\"uint8\",\"indexed\":false,\"internalType\":\"enumChannelOrder\"},{\"name\":\"connectionHops\",\"type\":\"string[]\",\"indexed\":false,\"internalType\":\"string[]\"},{\"name\":\"counterpartyPortId\",\"type\":\"string\",\"indexed\":false,\"internalType\":\"string\"},{\"name\":\"feeAmount\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"OwnershipTransferStarted\",\"inputs\":[{\"name\":\"previousOwner\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"newOwner\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"OwnershipTransferred\",\"inputs\":[{\"name\":\"previousOwner\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"newOwner\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"SendPacketFeeDeposited\",\"inputs\":[{\"name\":\"channelId\",\"type\":\"bytes32\",\"indexed\":true,\"internalType\":\"bytes32\"},{\"name\":\"sequence\",\"type\":\"uint64\",\"indexed\":true,\"internalType\":\"uint64\"},{\"name\":\"gasLimits\",\"type\":\"uint256[2]\",\"indexed\":false,\"internalType\":\"uint256[2]\"},{\"name\":\"gasPrices\",\"type\":\"uint256[2]\",\"indexed\":false,\"internalType\":\"uint256[2]\"}],\"anonymous\":false},{\"type\":\"error\",\"name\":\"IncorrectFeeSent\",\"inputs\":[{\"name\":\"expected\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"sent\",\"type\":\"uint256\",\"internalType\":\"uint256\"}]},{\"type\":\"error\",\"name\":\"NoFeeSent\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"SenderNotDispatcher\",\"inputs\":[]}]", } // FeeVaultABI is the input ABI used to generate the binding from. @@ -211,6 +211,58 @@ func (_FeeVault *FeeVaultCallerSession) Owner() (common.Address, error) { return _FeeVault.Contract.Owner(&_FeeVault.CallOpts) } +// PendingOwner is a free data retrieval call binding the contract method 0xe30c3978. +// +// Solidity: function pendingOwner() view returns(address) +func (_FeeVault *FeeVaultCaller) PendingOwner(opts *bind.CallOpts) (common.Address, error) { + var out []interface{} + err := _FeeVault.contract.Call(opts, &out, "pendingOwner") + + if err != nil { + return *new(common.Address), err + } + + out0 := *abi.ConvertType(out[0], new(common.Address)).(*common.Address) + + return out0, err + +} + +// PendingOwner is a free data retrieval call binding the contract method 0xe30c3978. +// +// Solidity: function pendingOwner() view returns(address) +func (_FeeVault *FeeVaultSession) PendingOwner() (common.Address, error) { + return _FeeVault.Contract.PendingOwner(&_FeeVault.CallOpts) +} + +// PendingOwner is a free data retrieval call binding the contract method 0xe30c3978. +// +// Solidity: function pendingOwner() view returns(address) +func (_FeeVault *FeeVaultCallerSession) PendingOwner() (common.Address, error) { + return _FeeVault.Contract.PendingOwner(&_FeeVault.CallOpts) +} + +// AcceptOwnership is a paid mutator transaction binding the contract method 0x79ba5097. +// +// Solidity: function acceptOwnership() returns() +func (_FeeVault *FeeVaultTransactor) AcceptOwnership(opts *bind.TransactOpts) (*types.Transaction, error) { + return _FeeVault.contract.Transact(opts, "acceptOwnership") +} + +// AcceptOwnership is a paid mutator transaction binding the contract method 0x79ba5097. +// +// Solidity: function acceptOwnership() returns() +func (_FeeVault *FeeVaultSession) AcceptOwnership() (*types.Transaction, error) { + return _FeeVault.Contract.AcceptOwnership(&_FeeVault.TransactOpts) +} + +// AcceptOwnership is a paid mutator transaction binding the contract method 0x79ba5097. +// +// Solidity: function acceptOwnership() returns() +func (_FeeVault *FeeVaultTransactorSession) AcceptOwnership() (*types.Transaction, error) { + return _FeeVault.Contract.AcceptOwnership(&_FeeVault.TransactOpts) +} + // DepositOpenChannelFee is a paid mutator transaction binding the contract method 0xfce34e40. // // Solidity: function depositOpenChannelFee(address src, string version, uint8 ordering, string[] connectionHops, string counterpartyPortId) payable returns() @@ -455,6 +507,159 @@ func (_FeeVault *FeeVaultFilterer) ParseOpenChannelFeeDeposited(log types.Log) ( return event, nil } +// FeeVaultOwnershipTransferStartedIterator is returned from FilterOwnershipTransferStarted and is used to iterate over the raw logs and unpacked data for OwnershipTransferStarted events raised by the FeeVault contract. +type FeeVaultOwnershipTransferStartedIterator struct { + Event *FeeVaultOwnershipTransferStarted // Event containing the contract specifics and raw log + + contract *bind.BoundContract // Generic contract to use for unpacking event data + event string // Event name to use for unpacking event data + + logs chan types.Log // Log channel receiving the found contract events + sub ethereum.Subscription // Subscription for errors, completion and termination + done bool // Whether the subscription completed delivering logs + fail error // Occurred error to stop iteration +} + +// Next advances the iterator to the subsequent event, returning whether there +// are any more events found. In case of a retrieval or parsing error, false is +// returned and Error() can be queried for the exact failure. +func (it *FeeVaultOwnershipTransferStartedIterator) Next() bool { + // If the iterator failed, stop iterating + if it.fail != nil { + return false + } + // If the iterator completed, deliver directly whatever's available + if it.done { + select { + case log := <-it.logs: + it.Event = new(FeeVaultOwnershipTransferStarted) + if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { + it.fail = err + return false + } + it.Event.Raw = log + return true + + default: + return false + } + } + // Iterator still in progress, wait for either a data or an error event + select { + case log := <-it.logs: + it.Event = new(FeeVaultOwnershipTransferStarted) + if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { + it.fail = err + return false + } + it.Event.Raw = log + return true + + case err := <-it.sub.Err(): + it.done = true + it.fail = err + return it.Next() + } +} + +// Error returns any retrieval or parsing error occurred during filtering. +func (it *FeeVaultOwnershipTransferStartedIterator) Error() error { + return it.fail +} + +// Close terminates the iteration process, releasing any pending underlying +// resources. +func (it *FeeVaultOwnershipTransferStartedIterator) Close() error { + it.sub.Unsubscribe() + return nil +} + +// FeeVaultOwnershipTransferStarted represents a OwnershipTransferStarted event raised by the FeeVault contract. +type FeeVaultOwnershipTransferStarted struct { + PreviousOwner common.Address + NewOwner common.Address + Raw types.Log // Blockchain specific contextual infos +} + +// FilterOwnershipTransferStarted is a free log retrieval operation binding the contract event 0x38d16b8cac22d99fc7c124b9cd0de2d3fa1faef420bfe791d8c362d765e22700. +// +// Solidity: event OwnershipTransferStarted(address indexed previousOwner, address indexed newOwner) +func (_FeeVault *FeeVaultFilterer) FilterOwnershipTransferStarted(opts *bind.FilterOpts, previousOwner []common.Address, newOwner []common.Address) (*FeeVaultOwnershipTransferStartedIterator, error) { + + var previousOwnerRule []interface{} + for _, previousOwnerItem := range previousOwner { + previousOwnerRule = append(previousOwnerRule, previousOwnerItem) + } + var newOwnerRule []interface{} + for _, newOwnerItem := range newOwner { + newOwnerRule = append(newOwnerRule, newOwnerItem) + } + + logs, sub, err := _FeeVault.contract.FilterLogs(opts, "OwnershipTransferStarted", previousOwnerRule, newOwnerRule) + if err != nil { + return nil, err + } + return &FeeVaultOwnershipTransferStartedIterator{contract: _FeeVault.contract, event: "OwnershipTransferStarted", logs: logs, sub: sub}, nil +} + +// WatchOwnershipTransferStarted is a free log subscription operation binding the contract event 0x38d16b8cac22d99fc7c124b9cd0de2d3fa1faef420bfe791d8c362d765e22700. +// +// Solidity: event OwnershipTransferStarted(address indexed previousOwner, address indexed newOwner) +func (_FeeVault *FeeVaultFilterer) WatchOwnershipTransferStarted(opts *bind.WatchOpts, sink chan<- *FeeVaultOwnershipTransferStarted, previousOwner []common.Address, newOwner []common.Address) (event.Subscription, error) { + + var previousOwnerRule []interface{} + for _, previousOwnerItem := range previousOwner { + previousOwnerRule = append(previousOwnerRule, previousOwnerItem) + } + var newOwnerRule []interface{} + for _, newOwnerItem := range newOwner { + newOwnerRule = append(newOwnerRule, newOwnerItem) + } + + logs, sub, err := _FeeVault.contract.WatchLogs(opts, "OwnershipTransferStarted", previousOwnerRule, newOwnerRule) + if err != nil { + return nil, err + } + return event.NewSubscription(func(quit <-chan struct{}) error { + defer sub.Unsubscribe() + for { + select { + case log := <-logs: + // New log arrived, parse the event and forward to the user + event := new(FeeVaultOwnershipTransferStarted) + if err := _FeeVault.contract.UnpackLog(event, "OwnershipTransferStarted", log); err != nil { + return err + } + event.Raw = log + + select { + case sink <- event: + case err := <-sub.Err(): + return err + case <-quit: + return nil + } + case err := <-sub.Err(): + return err + case <-quit: + return nil + } + } + }), nil +} + +// ParseOwnershipTransferStarted is a log parse operation binding the contract event 0x38d16b8cac22d99fc7c124b9cd0de2d3fa1faef420bfe791d8c362d765e22700. +// +// Solidity: event OwnershipTransferStarted(address indexed previousOwner, address indexed newOwner) +func (_FeeVault *FeeVaultFilterer) ParseOwnershipTransferStarted(log types.Log) (*FeeVaultOwnershipTransferStarted, error) { + event := new(FeeVaultOwnershipTransferStarted) + if err := _FeeVault.contract.UnpackLog(event, "OwnershipTransferStarted", log); err != nil { + return nil, err + } + event.Raw = log + return event, nil +} + // FeeVaultOwnershipTransferredIterator is returned from FilterOwnershipTransferred and is used to iterate over the raw logs and unpacked data for OwnershipTransferred events raised by the FeeVault contract. type FeeVaultOwnershipTransferredIterator struct { Event *FeeVaultOwnershipTransferred // Event containing the contract specifics and raw log diff --git a/bindings/go/universalchannelhandler/UniversalChannelHandler.go b/bindings/go/universalchannelhandler/UniversalChannelHandler.go index 433d8e18..6f962df7 100644 --- a/bindings/go/universalchannelhandler/UniversalChannelHandler.go +++ b/bindings/go/universalchannelhandler/UniversalChannelHandler.go @@ -59,7 +59,7 @@ type IbcPacket struct { // UniversalChannelHandlerMetaData contains all meta data concerning the UniversalChannelHandler contract. var UniversalChannelHandlerMetaData = &bind.MetaData{ - ABI: "[{\"type\":\"constructor\",\"inputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"receive\",\"stateMutability\":\"payable\"},{\"type\":\"function\",\"name\":\"MW_ID\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"VERSION\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"string\",\"internalType\":\"string\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"closeChannel\",\"inputs\":[{\"name\":\"channelId\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"dispatcher\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"contractIbcDispatcher\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"initialize\",\"inputs\":[{\"name\":\"_dispatcher\",\"type\":\"address\",\"internalType\":\"contractIbcDispatcher\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"onAcknowledgementPacket\",\"inputs\":[{\"name\":\"packet\",\"type\":\"tuple\",\"internalType\":\"structIbcPacket\",\"components\":[{\"name\":\"src\",\"type\":\"tuple\",\"internalType\":\"structIbcEndpoint\",\"components\":[{\"name\":\"portId\",\"type\":\"string\",\"internalType\":\"string\"},{\"name\":\"channelId\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}]},{\"name\":\"dest\",\"type\":\"tuple\",\"internalType\":\"structIbcEndpoint\",\"components\":[{\"name\":\"portId\",\"type\":\"string\",\"internalType\":\"string\"},{\"name\":\"channelId\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}]},{\"name\":\"sequence\",\"type\":\"uint64\",\"internalType\":\"uint64\"},{\"name\":\"data\",\"type\":\"bytes\",\"internalType\":\"bytes\"},{\"name\":\"timeoutHeight\",\"type\":\"tuple\",\"internalType\":\"structHeight\",\"components\":[{\"name\":\"revision_number\",\"type\":\"uint64\",\"internalType\":\"uint64\"},{\"name\":\"revision_height\",\"type\":\"uint64\",\"internalType\":\"uint64\"}]},{\"name\":\"timeoutTimestamp\",\"type\":\"uint64\",\"internalType\":\"uint64\"}]},{\"name\":\"ack\",\"type\":\"tuple\",\"internalType\":\"structAckPacket\",\"components\":[{\"name\":\"success\",\"type\":\"bool\",\"internalType\":\"bool\"},{\"name\":\"data\",\"type\":\"bytes\",\"internalType\":\"bytes\"}]}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"onChanCloseConfirm\",\"inputs\":[{\"name\":\"channelId\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"},{\"name\":\"\",\"type\":\"string\",\"internalType\":\"string\"},{\"name\":\"\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"onChanCloseInit\",\"inputs\":[{\"name\":\"channelId\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"},{\"name\":\"\",\"type\":\"string\",\"internalType\":\"string\"},{\"name\":\"\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"onChanOpenAck\",\"inputs\":[{\"name\":\"channelId\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"},{\"name\":\"\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"},{\"name\":\"counterpartyVersion\",\"type\":\"string\",\"internalType\":\"string\"}],\"outputs\":[],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"onChanOpenConfirm\",\"inputs\":[{\"name\":\"channelId\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"onChanOpenInit\",\"inputs\":[{\"name\":\"\",\"type\":\"uint8\",\"internalType\":\"enumChannelOrder\"},{\"name\":\"\",\"type\":\"string[]\",\"internalType\":\"string[]\"},{\"name\":\"\",\"type\":\"string\",\"internalType\":\"string\"},{\"name\":\"version\",\"type\":\"string\",\"internalType\":\"string\"}],\"outputs\":[{\"name\":\"selectedVersion\",\"type\":\"string\",\"internalType\":\"string\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"onChanOpenTry\",\"inputs\":[{\"name\":\"\",\"type\":\"uint8\",\"internalType\":\"enumChannelOrder\"},{\"name\":\"\",\"type\":\"string[]\",\"internalType\":\"string[]\"},{\"name\":\"channelId\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"},{\"name\":\"\",\"type\":\"string\",\"internalType\":\"string\"},{\"name\":\"\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"},{\"name\":\"counterpartyVersion\",\"type\":\"string\",\"internalType\":\"string\"}],\"outputs\":[{\"name\":\"selectedVersion\",\"type\":\"string\",\"internalType\":\"string\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"onRecvPacket\",\"inputs\":[{\"name\":\"packet\",\"type\":\"tuple\",\"internalType\":\"structIbcPacket\",\"components\":[{\"name\":\"src\",\"type\":\"tuple\",\"internalType\":\"structIbcEndpoint\",\"components\":[{\"name\":\"portId\",\"type\":\"string\",\"internalType\":\"string\"},{\"name\":\"channelId\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}]},{\"name\":\"dest\",\"type\":\"tuple\",\"internalType\":\"structIbcEndpoint\",\"components\":[{\"name\":\"portId\",\"type\":\"string\",\"internalType\":\"string\"},{\"name\":\"channelId\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}]},{\"name\":\"sequence\",\"type\":\"uint64\",\"internalType\":\"uint64\"},{\"name\":\"data\",\"type\":\"bytes\",\"internalType\":\"bytes\"},{\"name\":\"timeoutHeight\",\"type\":\"tuple\",\"internalType\":\"structHeight\",\"components\":[{\"name\":\"revision_number\",\"type\":\"uint64\",\"internalType\":\"uint64\"},{\"name\":\"revision_height\",\"type\":\"uint64\",\"internalType\":\"uint64\"}]},{\"name\":\"timeoutTimestamp\",\"type\":\"uint64\",\"internalType\":\"uint64\"}]}],\"outputs\":[{\"name\":\"ackPacket\",\"type\":\"tuple\",\"internalType\":\"structAckPacket\",\"components\":[{\"name\":\"success\",\"type\":\"bool\",\"internalType\":\"bool\"},{\"name\":\"data\",\"type\":\"bytes\",\"internalType\":\"bytes\"}]}],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"onTimeoutPacket\",\"inputs\":[{\"name\":\"packet\",\"type\":\"tuple\",\"internalType\":\"structIbcPacket\",\"components\":[{\"name\":\"src\",\"type\":\"tuple\",\"internalType\":\"structIbcEndpoint\",\"components\":[{\"name\":\"portId\",\"type\":\"string\",\"internalType\":\"string\"},{\"name\":\"channelId\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}]},{\"name\":\"dest\",\"type\":\"tuple\",\"internalType\":\"structIbcEndpoint\",\"components\":[{\"name\":\"portId\",\"type\":\"string\",\"internalType\":\"string\"},{\"name\":\"channelId\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}]},{\"name\":\"sequence\",\"type\":\"uint64\",\"internalType\":\"uint64\"},{\"name\":\"data\",\"type\":\"bytes\",\"internalType\":\"bytes\"},{\"name\":\"timeoutHeight\",\"type\":\"tuple\",\"internalType\":\"structHeight\",\"components\":[{\"name\":\"revision_number\",\"type\":\"uint64\",\"internalType\":\"uint64\"},{\"name\":\"revision_height\",\"type\":\"uint64\",\"internalType\":\"uint64\"}]},{\"name\":\"timeoutTimestamp\",\"type\":\"uint64\",\"internalType\":\"uint64\"}]}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"openChannel\",\"inputs\":[{\"name\":\"version\",\"type\":\"string\",\"internalType\":\"string\"},{\"name\":\"ordering\",\"type\":\"uint8\",\"internalType\":\"enumChannelOrder\"},{\"name\":\"feeEnabled\",\"type\":\"bool\",\"internalType\":\"bool\"},{\"name\":\"connectionHops\",\"type\":\"string[]\",\"internalType\":\"string[]\"},{\"name\":\"counterpartyPortIdentifier\",\"type\":\"string\",\"internalType\":\"string\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"owner\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"address\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"proxiableUUID\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"renounceOwnership\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"sendUniversalPacket\",\"inputs\":[{\"name\":\"channelId\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"},{\"name\":\"destPortAddr\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"},{\"name\":\"appData\",\"type\":\"bytes\",\"internalType\":\"bytes\"},{\"name\":\"timeoutTimestamp\",\"type\":\"uint64\",\"internalType\":\"uint64\"}],\"outputs\":[{\"name\":\"sequence\",\"type\":\"uint64\",\"internalType\":\"uint64\"}],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"sendUniversalPacketWithFee\",\"inputs\":[{\"name\":\"channelId\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"},{\"name\":\"destPortAddr\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"},{\"name\":\"appData\",\"type\":\"bytes\",\"internalType\":\"bytes\"},{\"name\":\"timeoutTimestamp\",\"type\":\"uint64\",\"internalType\":\"uint64\"},{\"name\":\"gasLimits\",\"type\":\"uint256[2]\",\"internalType\":\"uint256[2]\"},{\"name\":\"gasPrices\",\"type\":\"uint256[2]\",\"internalType\":\"uint256[2]\"}],\"outputs\":[{\"name\":\"sequence\",\"type\":\"uint64\",\"internalType\":\"uint64\"}],\"stateMutability\":\"payable\"},{\"type\":\"function\",\"name\":\"setDispatcher\",\"inputs\":[{\"name\":\"_dispatcher\",\"type\":\"address\",\"internalType\":\"contractIbcDispatcher\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"transferOwnership\",\"inputs\":[{\"name\":\"newOwner\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"upgradeTo\",\"inputs\":[{\"name\":\"newImplementation\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"upgradeToAndCall\",\"inputs\":[{\"name\":\"newImplementation\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"data\",\"type\":\"bytes\",\"internalType\":\"bytes\"}],\"outputs\":[],\"stateMutability\":\"payable\"},{\"type\":\"event\",\"name\":\"AdminChanged\",\"inputs\":[{\"name\":\"previousAdmin\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"},{\"name\":\"newAdmin\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"BeaconUpgraded\",\"inputs\":[{\"name\":\"beacon\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"Initialized\",\"inputs\":[{\"name\":\"version\",\"type\":\"uint8\",\"indexed\":false,\"internalType\":\"uint8\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"OwnershipTransferred\",\"inputs\":[{\"name\":\"previousOwner\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"newOwner\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"UCHPacketSent\",\"inputs\":[{\"name\":\"source\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"},{\"name\":\"destination\",\"type\":\"bytes32\",\"indexed\":false,\"internalType\":\"bytes32\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"Upgraded\",\"inputs\":[{\"name\":\"implementation\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"}],\"anonymous\":false},{\"type\":\"error\",\"name\":\"ChannelNotFound\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"MwBitmpaCannotBeZero\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"UnsupportedVersion\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"invalidAddress\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"notIbcDispatcher\",\"inputs\":[]}]", + ABI: "[{\"type\":\"constructor\",\"inputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"receive\",\"stateMutability\":\"payable\"},{\"type\":\"function\",\"name\":\"MW_ID\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"VERSION\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"string\",\"internalType\":\"string\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"acceptOwnership\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"closeChannel\",\"inputs\":[{\"name\":\"channelId\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"dispatcher\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"contractIbcDispatcher\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"initialize\",\"inputs\":[{\"name\":\"_dispatcher\",\"type\":\"address\",\"internalType\":\"contractIbcDispatcher\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"onAcknowledgementPacket\",\"inputs\":[{\"name\":\"packet\",\"type\":\"tuple\",\"internalType\":\"structIbcPacket\",\"components\":[{\"name\":\"src\",\"type\":\"tuple\",\"internalType\":\"structIbcEndpoint\",\"components\":[{\"name\":\"portId\",\"type\":\"string\",\"internalType\":\"string\"},{\"name\":\"channelId\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}]},{\"name\":\"dest\",\"type\":\"tuple\",\"internalType\":\"structIbcEndpoint\",\"components\":[{\"name\":\"portId\",\"type\":\"string\",\"internalType\":\"string\"},{\"name\":\"channelId\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}]},{\"name\":\"sequence\",\"type\":\"uint64\",\"internalType\":\"uint64\"},{\"name\":\"data\",\"type\":\"bytes\",\"internalType\":\"bytes\"},{\"name\":\"timeoutHeight\",\"type\":\"tuple\",\"internalType\":\"structHeight\",\"components\":[{\"name\":\"revision_number\",\"type\":\"uint64\",\"internalType\":\"uint64\"},{\"name\":\"revision_height\",\"type\":\"uint64\",\"internalType\":\"uint64\"}]},{\"name\":\"timeoutTimestamp\",\"type\":\"uint64\",\"internalType\":\"uint64\"}]},{\"name\":\"ack\",\"type\":\"tuple\",\"internalType\":\"structAckPacket\",\"components\":[{\"name\":\"success\",\"type\":\"bool\",\"internalType\":\"bool\"},{\"name\":\"data\",\"type\":\"bytes\",\"internalType\":\"bytes\"}]}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"onChanCloseConfirm\",\"inputs\":[{\"name\":\"channelId\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"},{\"name\":\"\",\"type\":\"string\",\"internalType\":\"string\"},{\"name\":\"\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"onChanCloseInit\",\"inputs\":[{\"name\":\"channelId\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"},{\"name\":\"\",\"type\":\"string\",\"internalType\":\"string\"},{\"name\":\"\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"onChanOpenAck\",\"inputs\":[{\"name\":\"channelId\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"},{\"name\":\"\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"},{\"name\":\"counterpartyVersion\",\"type\":\"string\",\"internalType\":\"string\"}],\"outputs\":[],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"onChanOpenConfirm\",\"inputs\":[{\"name\":\"channelId\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"onChanOpenInit\",\"inputs\":[{\"name\":\"\",\"type\":\"uint8\",\"internalType\":\"enumChannelOrder\"},{\"name\":\"\",\"type\":\"string[]\",\"internalType\":\"string[]\"},{\"name\":\"\",\"type\":\"string\",\"internalType\":\"string\"},{\"name\":\"version\",\"type\":\"string\",\"internalType\":\"string\"}],\"outputs\":[{\"name\":\"selectedVersion\",\"type\":\"string\",\"internalType\":\"string\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"onChanOpenTry\",\"inputs\":[{\"name\":\"\",\"type\":\"uint8\",\"internalType\":\"enumChannelOrder\"},{\"name\":\"\",\"type\":\"string[]\",\"internalType\":\"string[]\"},{\"name\":\"channelId\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"},{\"name\":\"\",\"type\":\"string\",\"internalType\":\"string\"},{\"name\":\"\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"},{\"name\":\"counterpartyVersion\",\"type\":\"string\",\"internalType\":\"string\"}],\"outputs\":[{\"name\":\"selectedVersion\",\"type\":\"string\",\"internalType\":\"string\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"onRecvPacket\",\"inputs\":[{\"name\":\"packet\",\"type\":\"tuple\",\"internalType\":\"structIbcPacket\",\"components\":[{\"name\":\"src\",\"type\":\"tuple\",\"internalType\":\"structIbcEndpoint\",\"components\":[{\"name\":\"portId\",\"type\":\"string\",\"internalType\":\"string\"},{\"name\":\"channelId\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}]},{\"name\":\"dest\",\"type\":\"tuple\",\"internalType\":\"structIbcEndpoint\",\"components\":[{\"name\":\"portId\",\"type\":\"string\",\"internalType\":\"string\"},{\"name\":\"channelId\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}]},{\"name\":\"sequence\",\"type\":\"uint64\",\"internalType\":\"uint64\"},{\"name\":\"data\",\"type\":\"bytes\",\"internalType\":\"bytes\"},{\"name\":\"timeoutHeight\",\"type\":\"tuple\",\"internalType\":\"structHeight\",\"components\":[{\"name\":\"revision_number\",\"type\":\"uint64\",\"internalType\":\"uint64\"},{\"name\":\"revision_height\",\"type\":\"uint64\",\"internalType\":\"uint64\"}]},{\"name\":\"timeoutTimestamp\",\"type\":\"uint64\",\"internalType\":\"uint64\"}]}],\"outputs\":[{\"name\":\"ackPacket\",\"type\":\"tuple\",\"internalType\":\"structAckPacket\",\"components\":[{\"name\":\"success\",\"type\":\"bool\",\"internalType\":\"bool\"},{\"name\":\"data\",\"type\":\"bytes\",\"internalType\":\"bytes\"}]}],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"onTimeoutPacket\",\"inputs\":[{\"name\":\"packet\",\"type\":\"tuple\",\"internalType\":\"structIbcPacket\",\"components\":[{\"name\":\"src\",\"type\":\"tuple\",\"internalType\":\"structIbcEndpoint\",\"components\":[{\"name\":\"portId\",\"type\":\"string\",\"internalType\":\"string\"},{\"name\":\"channelId\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}]},{\"name\":\"dest\",\"type\":\"tuple\",\"internalType\":\"structIbcEndpoint\",\"components\":[{\"name\":\"portId\",\"type\":\"string\",\"internalType\":\"string\"},{\"name\":\"channelId\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}]},{\"name\":\"sequence\",\"type\":\"uint64\",\"internalType\":\"uint64\"},{\"name\":\"data\",\"type\":\"bytes\",\"internalType\":\"bytes\"},{\"name\":\"timeoutHeight\",\"type\":\"tuple\",\"internalType\":\"structHeight\",\"components\":[{\"name\":\"revision_number\",\"type\":\"uint64\",\"internalType\":\"uint64\"},{\"name\":\"revision_height\",\"type\":\"uint64\",\"internalType\":\"uint64\"}]},{\"name\":\"timeoutTimestamp\",\"type\":\"uint64\",\"internalType\":\"uint64\"}]}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"openChannel\",\"inputs\":[{\"name\":\"version\",\"type\":\"string\",\"internalType\":\"string\"},{\"name\":\"ordering\",\"type\":\"uint8\",\"internalType\":\"enumChannelOrder\"},{\"name\":\"feeEnabled\",\"type\":\"bool\",\"internalType\":\"bool\"},{\"name\":\"connectionHops\",\"type\":\"string[]\",\"internalType\":\"string[]\"},{\"name\":\"counterpartyPortIdentifier\",\"type\":\"string\",\"internalType\":\"string\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"owner\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"address\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"pendingOwner\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"address\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"proxiableUUID\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"renounceOwnership\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"sendUniversalPacket\",\"inputs\":[{\"name\":\"channelId\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"},{\"name\":\"destPortAddr\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"},{\"name\":\"appData\",\"type\":\"bytes\",\"internalType\":\"bytes\"},{\"name\":\"timeoutTimestamp\",\"type\":\"uint64\",\"internalType\":\"uint64\"}],\"outputs\":[{\"name\":\"sequence\",\"type\":\"uint64\",\"internalType\":\"uint64\"}],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"sendUniversalPacketWithFee\",\"inputs\":[{\"name\":\"channelId\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"},{\"name\":\"destPortAddr\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"},{\"name\":\"appData\",\"type\":\"bytes\",\"internalType\":\"bytes\"},{\"name\":\"timeoutTimestamp\",\"type\":\"uint64\",\"internalType\":\"uint64\"},{\"name\":\"gasLimits\",\"type\":\"uint256[2]\",\"internalType\":\"uint256[2]\"},{\"name\":\"gasPrices\",\"type\":\"uint256[2]\",\"internalType\":\"uint256[2]\"}],\"outputs\":[{\"name\":\"sequence\",\"type\":\"uint64\",\"internalType\":\"uint64\"}],\"stateMutability\":\"payable\"},{\"type\":\"function\",\"name\":\"setDispatcher\",\"inputs\":[{\"name\":\"_dispatcher\",\"type\":\"address\",\"internalType\":\"contractIbcDispatcher\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"transferOwnership\",\"inputs\":[{\"name\":\"newOwner\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"upgradeTo\",\"inputs\":[{\"name\":\"newImplementation\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"upgradeToAndCall\",\"inputs\":[{\"name\":\"newImplementation\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"data\",\"type\":\"bytes\",\"internalType\":\"bytes\"}],\"outputs\":[],\"stateMutability\":\"payable\"},{\"type\":\"event\",\"name\":\"AdminChanged\",\"inputs\":[{\"name\":\"previousAdmin\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"},{\"name\":\"newAdmin\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"BeaconUpgraded\",\"inputs\":[{\"name\":\"beacon\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"Initialized\",\"inputs\":[{\"name\":\"version\",\"type\":\"uint8\",\"indexed\":false,\"internalType\":\"uint8\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"OwnershipTransferStarted\",\"inputs\":[{\"name\":\"previousOwner\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"newOwner\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"OwnershipTransferred\",\"inputs\":[{\"name\":\"previousOwner\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"newOwner\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"UCHPacketSent\",\"inputs\":[{\"name\":\"source\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"},{\"name\":\"destination\",\"type\":\"bytes32\",\"indexed\":false,\"internalType\":\"bytes32\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"Upgraded\",\"inputs\":[{\"name\":\"implementation\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"}],\"anonymous\":false},{\"type\":\"error\",\"name\":\"ChannelNotFound\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"MwBitmpaCannotBeZero\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"UnsupportedVersion\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"invalidAddress\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"notIbcDispatcher\",\"inputs\":[]}]", } // UniversalChannelHandlerABI is the input ABI used to generate the binding from. @@ -423,6 +423,37 @@ func (_UniversalChannelHandler *UniversalChannelHandlerCallerSession) Owner() (c return _UniversalChannelHandler.Contract.Owner(&_UniversalChannelHandler.CallOpts) } +// PendingOwner is a free data retrieval call binding the contract method 0xe30c3978. +// +// Solidity: function pendingOwner() view returns(address) +func (_UniversalChannelHandler *UniversalChannelHandlerCaller) PendingOwner(opts *bind.CallOpts) (common.Address, error) { + var out []interface{} + err := _UniversalChannelHandler.contract.Call(opts, &out, "pendingOwner") + + if err != nil { + return *new(common.Address), err + } + + out0 := *abi.ConvertType(out[0], new(common.Address)).(*common.Address) + + return out0, err + +} + +// PendingOwner is a free data retrieval call binding the contract method 0xe30c3978. +// +// Solidity: function pendingOwner() view returns(address) +func (_UniversalChannelHandler *UniversalChannelHandlerSession) PendingOwner() (common.Address, error) { + return _UniversalChannelHandler.Contract.PendingOwner(&_UniversalChannelHandler.CallOpts) +} + +// PendingOwner is a free data retrieval call binding the contract method 0xe30c3978. +// +// Solidity: function pendingOwner() view returns(address) +func (_UniversalChannelHandler *UniversalChannelHandlerCallerSession) PendingOwner() (common.Address, error) { + return _UniversalChannelHandler.Contract.PendingOwner(&_UniversalChannelHandler.CallOpts) +} + // ProxiableUUID is a free data retrieval call binding the contract method 0x52d1902d. // // Solidity: function proxiableUUID() view returns(bytes32) @@ -454,6 +485,27 @@ func (_UniversalChannelHandler *UniversalChannelHandlerCallerSession) ProxiableU return _UniversalChannelHandler.Contract.ProxiableUUID(&_UniversalChannelHandler.CallOpts) } +// AcceptOwnership is a paid mutator transaction binding the contract method 0x79ba5097. +// +// Solidity: function acceptOwnership() returns() +func (_UniversalChannelHandler *UniversalChannelHandlerTransactor) AcceptOwnership(opts *bind.TransactOpts) (*types.Transaction, error) { + return _UniversalChannelHandler.contract.Transact(opts, "acceptOwnership") +} + +// AcceptOwnership is a paid mutator transaction binding the contract method 0x79ba5097. +// +// Solidity: function acceptOwnership() returns() +func (_UniversalChannelHandler *UniversalChannelHandlerSession) AcceptOwnership() (*types.Transaction, error) { + return _UniversalChannelHandler.Contract.AcceptOwnership(&_UniversalChannelHandler.TransactOpts) +} + +// AcceptOwnership is a paid mutator transaction binding the contract method 0x79ba5097. +// +// Solidity: function acceptOwnership() returns() +func (_UniversalChannelHandler *UniversalChannelHandlerTransactorSession) AcceptOwnership() (*types.Transaction, error) { + return _UniversalChannelHandler.Contract.AcceptOwnership(&_UniversalChannelHandler.TransactOpts) +} + // CloseChannel is a paid mutator transaction binding the contract method 0x4c2ee09d. // // Solidity: function closeChannel(bytes32 channelId) returns() @@ -1224,6 +1276,159 @@ func (_UniversalChannelHandler *UniversalChannelHandlerFilterer) ParseInitialize return event, nil } +// UniversalChannelHandlerOwnershipTransferStartedIterator is returned from FilterOwnershipTransferStarted and is used to iterate over the raw logs and unpacked data for OwnershipTransferStarted events raised by the UniversalChannelHandler contract. +type UniversalChannelHandlerOwnershipTransferStartedIterator struct { + Event *UniversalChannelHandlerOwnershipTransferStarted // Event containing the contract specifics and raw log + + contract *bind.BoundContract // Generic contract to use for unpacking event data + event string // Event name to use for unpacking event data + + logs chan types.Log // Log channel receiving the found contract events + sub ethereum.Subscription // Subscription for errors, completion and termination + done bool // Whether the subscription completed delivering logs + fail error // Occurred error to stop iteration +} + +// Next advances the iterator to the subsequent event, returning whether there +// are any more events found. In case of a retrieval or parsing error, false is +// returned and Error() can be queried for the exact failure. +func (it *UniversalChannelHandlerOwnershipTransferStartedIterator) Next() bool { + // If the iterator failed, stop iterating + if it.fail != nil { + return false + } + // If the iterator completed, deliver directly whatever's available + if it.done { + select { + case log := <-it.logs: + it.Event = new(UniversalChannelHandlerOwnershipTransferStarted) + if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { + it.fail = err + return false + } + it.Event.Raw = log + return true + + default: + return false + } + } + // Iterator still in progress, wait for either a data or an error event + select { + case log := <-it.logs: + it.Event = new(UniversalChannelHandlerOwnershipTransferStarted) + if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { + it.fail = err + return false + } + it.Event.Raw = log + return true + + case err := <-it.sub.Err(): + it.done = true + it.fail = err + return it.Next() + } +} + +// Error returns any retrieval or parsing error occurred during filtering. +func (it *UniversalChannelHandlerOwnershipTransferStartedIterator) Error() error { + return it.fail +} + +// Close terminates the iteration process, releasing any pending underlying +// resources. +func (it *UniversalChannelHandlerOwnershipTransferStartedIterator) Close() error { + it.sub.Unsubscribe() + return nil +} + +// UniversalChannelHandlerOwnershipTransferStarted represents a OwnershipTransferStarted event raised by the UniversalChannelHandler contract. +type UniversalChannelHandlerOwnershipTransferStarted struct { + PreviousOwner common.Address + NewOwner common.Address + Raw types.Log // Blockchain specific contextual infos +} + +// FilterOwnershipTransferStarted is a free log retrieval operation binding the contract event 0x38d16b8cac22d99fc7c124b9cd0de2d3fa1faef420bfe791d8c362d765e22700. +// +// Solidity: event OwnershipTransferStarted(address indexed previousOwner, address indexed newOwner) +func (_UniversalChannelHandler *UniversalChannelHandlerFilterer) FilterOwnershipTransferStarted(opts *bind.FilterOpts, previousOwner []common.Address, newOwner []common.Address) (*UniversalChannelHandlerOwnershipTransferStartedIterator, error) { + + var previousOwnerRule []interface{} + for _, previousOwnerItem := range previousOwner { + previousOwnerRule = append(previousOwnerRule, previousOwnerItem) + } + var newOwnerRule []interface{} + for _, newOwnerItem := range newOwner { + newOwnerRule = append(newOwnerRule, newOwnerItem) + } + + logs, sub, err := _UniversalChannelHandler.contract.FilterLogs(opts, "OwnershipTransferStarted", previousOwnerRule, newOwnerRule) + if err != nil { + return nil, err + } + return &UniversalChannelHandlerOwnershipTransferStartedIterator{contract: _UniversalChannelHandler.contract, event: "OwnershipTransferStarted", logs: logs, sub: sub}, nil +} + +// WatchOwnershipTransferStarted is a free log subscription operation binding the contract event 0x38d16b8cac22d99fc7c124b9cd0de2d3fa1faef420bfe791d8c362d765e22700. +// +// Solidity: event OwnershipTransferStarted(address indexed previousOwner, address indexed newOwner) +func (_UniversalChannelHandler *UniversalChannelHandlerFilterer) WatchOwnershipTransferStarted(opts *bind.WatchOpts, sink chan<- *UniversalChannelHandlerOwnershipTransferStarted, previousOwner []common.Address, newOwner []common.Address) (event.Subscription, error) { + + var previousOwnerRule []interface{} + for _, previousOwnerItem := range previousOwner { + previousOwnerRule = append(previousOwnerRule, previousOwnerItem) + } + var newOwnerRule []interface{} + for _, newOwnerItem := range newOwner { + newOwnerRule = append(newOwnerRule, newOwnerItem) + } + + logs, sub, err := _UniversalChannelHandler.contract.WatchLogs(opts, "OwnershipTransferStarted", previousOwnerRule, newOwnerRule) + if err != nil { + return nil, err + } + return event.NewSubscription(func(quit <-chan struct{}) error { + defer sub.Unsubscribe() + for { + select { + case log := <-logs: + // New log arrived, parse the event and forward to the user + event := new(UniversalChannelHandlerOwnershipTransferStarted) + if err := _UniversalChannelHandler.contract.UnpackLog(event, "OwnershipTransferStarted", log); err != nil { + return err + } + event.Raw = log + + select { + case sink <- event: + case err := <-sub.Err(): + return err + case <-quit: + return nil + } + case err := <-sub.Err(): + return err + case <-quit: + return nil + } + } + }), nil +} + +// ParseOwnershipTransferStarted is a log parse operation binding the contract event 0x38d16b8cac22d99fc7c124b9cd0de2d3fa1faef420bfe791d8c362d765e22700. +// +// Solidity: event OwnershipTransferStarted(address indexed previousOwner, address indexed newOwner) +func (_UniversalChannelHandler *UniversalChannelHandlerFilterer) ParseOwnershipTransferStarted(log types.Log) (*UniversalChannelHandlerOwnershipTransferStarted, error) { + event := new(UniversalChannelHandlerOwnershipTransferStarted) + if err := _UniversalChannelHandler.contract.UnpackLog(event, "OwnershipTransferStarted", log); err != nil { + return nil, err + } + event.Raw = log + return event, nil +} + // UniversalChannelHandlerOwnershipTransferredIterator is returned from FilterOwnershipTransferred and is used to iterate over the raw logs and unpacked data for OwnershipTransferred events raised by the UniversalChannelHandler contract. type UniversalChannelHandlerOwnershipTransferredIterator struct { Event *UniversalChannelHandlerOwnershipTransferred // Event containing the contract specifics and raw log diff --git a/contracts/core/UniversalChannelHandler.sol b/contracts/core/UniversalChannelHandler.sol index d0458775..e12a2fe3 100644 --- a/contracts/core/UniversalChannelHandler.sol +++ b/contracts/core/UniversalChannelHandler.sol @@ -33,8 +33,6 @@ import {FeeSender} from "../implementation_templates/FeeSender.sol"; * @dev This contract can integrate directly with dapps, or a middleware stack for packet routing. */ contract UniversalChannelHandler is IbcReceiverBaseUpgradeable, FeeSender, UUPSUpgradeable, IbcUniversalChannelMW { - bytes32 private _UNUSED; // Storage placeholder to ensure upgrade from this version is backwards compatible - string public constant VERSION = "1.0"; uint256 public constant MW_ID = 1; diff --git a/src/evm/contracts/Dispatcher.ts b/src/evm/contracts/Dispatcher.ts index 9c79a68f..230864f2 100644 --- a/src/evm/contracts/Dispatcher.ts +++ b/src/evm/contracts/Dispatcher.ts @@ -182,6 +182,7 @@ export type AckPacketStructOutput = [success: boolean, data: string] & { export interface DispatcherInterface extends Interface { getFunction( nameOrSignature: + | "acceptOwnership" | "acknowledgement" | "channelCloseConfirm" | "channelCloseInit" @@ -194,6 +195,7 @@ export interface DispatcherInterface extends Interface { | "getOptimisticConsensusState" | "initialize" | "owner" + | "pendingOwner" | "portPrefix" | "portPrefixLen" | "proxiableUUID" @@ -230,6 +232,7 @@ export interface DispatcherInterface extends Interface { | "ChannelOpenTry" | "ChannelOpenTryError" | "Initialized" + | "OwnershipTransferStarted" | "OwnershipTransferred" | "RecvPacket" | "SendPacket" @@ -240,6 +243,10 @@ export interface DispatcherInterface extends Interface { | "WriteTimeoutPacket" ): EventFragment; + encodeFunctionData( + functionFragment: "acceptOwnership", + values?: undefined + ): string; encodeFunctionData( functionFragment: "acknowledgement", values: [IbcPacketStruct, BytesLike, Ics23ProofStruct] @@ -303,6 +310,10 @@ export interface DispatcherInterface extends Interface { values: [string, AddressLike] ): string; encodeFunctionData(functionFragment: "owner", values?: undefined): string; + encodeFunctionData( + functionFragment: "pendingOwner", + values?: undefined + ): string; encodeFunctionData( functionFragment: "portPrefix", values?: undefined @@ -370,6 +381,10 @@ export interface DispatcherInterface extends Interface { values: [IbcPacketStruct, Ics23ProofStruct] ): string; + decodeFunctionResult( + functionFragment: "acceptOwnership", + data: BytesLike + ): Result; decodeFunctionResult( functionFragment: "acknowledgement", data: BytesLike @@ -406,6 +421,10 @@ export interface DispatcherInterface extends Interface { ): Result; decodeFunctionResult(functionFragment: "initialize", data: BytesLike): Result; decodeFunctionResult(functionFragment: "owner", data: BytesLike): Result; + decodeFunctionResult( + functionFragment: "pendingOwner", + data: BytesLike + ): Result; decodeFunctionResult(functionFragment: "portPrefix", data: BytesLike): Result; decodeFunctionResult( functionFragment: "portPrefixLen", @@ -720,6 +739,19 @@ export namespace InitializedEvent { export type LogDescription = TypedLogDescription; } +export namespace OwnershipTransferStartedEvent { + export type InputTuple = [previousOwner: AddressLike, newOwner: AddressLike]; + export type OutputTuple = [previousOwner: string, newOwner: string]; + export interface OutputObject { + previousOwner: string; + newOwner: string; + } + export type Event = TypedContractEvent; + export type Filter = TypedDeferredTopicFilter; + export type Log = TypedEventLog; + export type LogDescription = TypedLogDescription; +} + export namespace OwnershipTransferredEvent { export type InputTuple = [previousOwner: AddressLike, newOwner: AddressLike]; export type OutputTuple = [previousOwner: string, newOwner: string]; @@ -926,6 +958,8 @@ export interface Dispatcher extends BaseContract { event?: TCEvent ): Promise; + acceptOwnership: TypedContractMethod<[], [void], "nonpayable">; + acknowledgement: TypedContractMethod< [packet: IbcPacketStruct, ack: BytesLike, proof: Ics23ProofStruct], [void], @@ -1023,6 +1057,8 @@ export interface Dispatcher extends BaseContract { owner: TypedContractMethod<[], [string], "view">; + pendingOwner: TypedContractMethod<[], [string], "view">; + portPrefix: TypedContractMethod<[], [string], "view">; portPrefixLen: TypedContractMethod<[], [bigint], "view">; @@ -1107,6 +1143,9 @@ export interface Dispatcher extends BaseContract { key: string | FunctionFragment ): T; + getFunction( + nameOrSignature: "acceptOwnership" + ): TypedContractMethod<[], [void], "nonpayable">; getFunction( nameOrSignature: "acknowledgement" ): TypedContractMethod< @@ -1212,6 +1251,9 @@ export interface Dispatcher extends BaseContract { getFunction( nameOrSignature: "owner" ): TypedContractMethod<[], [string], "view">; + getFunction( + nameOrSignature: "pendingOwner" + ): TypedContractMethod<[], [string], "view">; getFunction( nameOrSignature: "portPrefix" ): TypedContractMethod<[], [string], "view">; @@ -1415,6 +1457,13 @@ export interface Dispatcher extends BaseContract { InitializedEvent.OutputTuple, InitializedEvent.OutputObject >; + getEvent( + key: "OwnershipTransferStarted" + ): TypedContractEvent< + OwnershipTransferStartedEvent.InputTuple, + OwnershipTransferStartedEvent.OutputTuple, + OwnershipTransferStartedEvent.OutputObject + >; getEvent( key: "OwnershipTransferred" ): TypedContractEvent< @@ -1660,6 +1709,17 @@ export interface Dispatcher extends BaseContract { InitializedEvent.OutputObject >; + "OwnershipTransferStarted(address,address)": TypedContractEvent< + OwnershipTransferStartedEvent.InputTuple, + OwnershipTransferStartedEvent.OutputTuple, + OwnershipTransferStartedEvent.OutputObject + >; + OwnershipTransferStarted: TypedContractEvent< + OwnershipTransferStartedEvent.InputTuple, + OwnershipTransferStartedEvent.OutputTuple, + OwnershipTransferStartedEvent.OutputObject + >; + "OwnershipTransferred(address,address)": TypedContractEvent< OwnershipTransferredEvent.InputTuple, OwnershipTransferredEvent.OutputTuple, diff --git a/src/evm/contracts/FeeVault.ts b/src/evm/contracts/FeeVault.ts index 457afbd4..15c7d794 100644 --- a/src/evm/contracts/FeeVault.ts +++ b/src/evm/contracts/FeeVault.ts @@ -26,9 +26,11 @@ import type { export interface FeeVaultInterface extends Interface { getFunction( nameOrSignature: + | "acceptOwnership" | "depositOpenChannelFee" | "depositSendPacketFee" | "owner" + | "pendingOwner" | "renounceOwnership" | "transferOwnership" | "withdrawFeesToOwner" @@ -37,10 +39,15 @@ export interface FeeVaultInterface extends Interface { getEvent( nameOrSignatureOrTopic: | "OpenChannelFeeDeposited" + | "OwnershipTransferStarted" | "OwnershipTransferred" | "SendPacketFeeDeposited" ): EventFragment; + encodeFunctionData( + functionFragment: "acceptOwnership", + values?: undefined + ): string; encodeFunctionData( functionFragment: "depositOpenChannelFee", values: [AddressLike, string, BigNumberish, string[], string] @@ -55,6 +62,10 @@ export interface FeeVaultInterface extends Interface { ] ): string; encodeFunctionData(functionFragment: "owner", values?: undefined): string; + encodeFunctionData( + functionFragment: "pendingOwner", + values?: undefined + ): string; encodeFunctionData( functionFragment: "renounceOwnership", values?: undefined @@ -68,6 +79,10 @@ export interface FeeVaultInterface extends Interface { values?: undefined ): string; + decodeFunctionResult( + functionFragment: "acceptOwnership", + data: BytesLike + ): Result; decodeFunctionResult( functionFragment: "depositOpenChannelFee", data: BytesLike @@ -77,6 +92,10 @@ export interface FeeVaultInterface extends Interface { data: BytesLike ): Result; decodeFunctionResult(functionFragment: "owner", data: BytesLike): Result; + decodeFunctionResult( + functionFragment: "pendingOwner", + data: BytesLike + ): Result; decodeFunctionResult( functionFragment: "renounceOwnership", data: BytesLike @@ -122,6 +141,19 @@ export namespace OpenChannelFeeDepositedEvent { export type LogDescription = TypedLogDescription; } +export namespace OwnershipTransferStartedEvent { + export type InputTuple = [previousOwner: AddressLike, newOwner: AddressLike]; + export type OutputTuple = [previousOwner: string, newOwner: string]; + export interface OutputObject { + previousOwner: string; + newOwner: string; + } + export type Event = TypedContractEvent; + export type Filter = TypedDeferredTopicFilter; + export type Log = TypedEventLog; + export type LogDescription = TypedLogDescription; +} + export namespace OwnershipTransferredEvent { export type InputTuple = [previousOwner: AddressLike, newOwner: AddressLike]; export type OutputTuple = [previousOwner: string, newOwner: string]; @@ -203,6 +235,8 @@ export interface FeeVault extends BaseContract { event?: TCEvent ): Promise; + acceptOwnership: TypedContractMethod<[], [void], "nonpayable">; + depositOpenChannelFee: TypedContractMethod< [ src: AddressLike, @@ -228,6 +262,8 @@ export interface FeeVault extends BaseContract { owner: TypedContractMethod<[], [string], "view">; + pendingOwner: TypedContractMethod<[], [string], "view">; + renounceOwnership: TypedContractMethod<[], [void], "nonpayable">; transferOwnership: TypedContractMethod< @@ -242,6 +278,9 @@ export interface FeeVault extends BaseContract { key: string | FunctionFragment ): T; + getFunction( + nameOrSignature: "acceptOwnership" + ): TypedContractMethod<[], [void], "nonpayable">; getFunction( nameOrSignature: "depositOpenChannelFee" ): TypedContractMethod< @@ -270,6 +309,9 @@ export interface FeeVault extends BaseContract { getFunction( nameOrSignature: "owner" ): TypedContractMethod<[], [string], "view">; + getFunction( + nameOrSignature: "pendingOwner" + ): TypedContractMethod<[], [string], "view">; getFunction( nameOrSignature: "renounceOwnership" ): TypedContractMethod<[], [void], "nonpayable">; @@ -287,6 +329,13 @@ export interface FeeVault extends BaseContract { OpenChannelFeeDepositedEvent.OutputTuple, OpenChannelFeeDepositedEvent.OutputObject >; + getEvent( + key: "OwnershipTransferStarted" + ): TypedContractEvent< + OwnershipTransferStartedEvent.InputTuple, + OwnershipTransferStartedEvent.OutputTuple, + OwnershipTransferStartedEvent.OutputObject + >; getEvent( key: "OwnershipTransferred" ): TypedContractEvent< @@ -314,6 +363,17 @@ export interface FeeVault extends BaseContract { OpenChannelFeeDepositedEvent.OutputObject >; + "OwnershipTransferStarted(address,address)": TypedContractEvent< + OwnershipTransferStartedEvent.InputTuple, + OwnershipTransferStartedEvent.OutputTuple, + OwnershipTransferStartedEvent.OutputObject + >; + OwnershipTransferStarted: TypedContractEvent< + OwnershipTransferStartedEvent.InputTuple, + OwnershipTransferStartedEvent.OutputTuple, + OwnershipTransferStartedEvent.OutputObject + >; + "OwnershipTransferred(address,address)": TypedContractEvent< OwnershipTransferredEvent.InputTuple, OwnershipTransferredEvent.OutputTuple, diff --git a/src/evm/contracts/UniversalChannelHandler.ts b/src/evm/contracts/UniversalChannelHandler.ts index a5543e63..2906e047 100644 --- a/src/evm/contracts/UniversalChannelHandler.ts +++ b/src/evm/contracts/UniversalChannelHandler.ts @@ -77,6 +77,7 @@ export interface UniversalChannelHandlerInterface extends Interface { nameOrSignature: | "MW_ID" | "VERSION" + | "acceptOwnership" | "closeChannel" | "dispatcher" | "initialize" @@ -91,6 +92,7 @@ export interface UniversalChannelHandlerInterface extends Interface { | "onTimeoutPacket" | "openChannel" | "owner" + | "pendingOwner" | "proxiableUUID" | "renounceOwnership" | "sendUniversalPacket" @@ -106,6 +108,7 @@ export interface UniversalChannelHandlerInterface extends Interface { | "AdminChanged" | "BeaconUpgraded" | "Initialized" + | "OwnershipTransferStarted" | "OwnershipTransferred" | "UCHPacketSent" | "Upgraded" @@ -113,6 +116,10 @@ export interface UniversalChannelHandlerInterface extends Interface { encodeFunctionData(functionFragment: "MW_ID", values?: undefined): string; encodeFunctionData(functionFragment: "VERSION", values?: undefined): string; + encodeFunctionData( + functionFragment: "acceptOwnership", + values?: undefined + ): string; encodeFunctionData( functionFragment: "closeChannel", values: [BytesLike] @@ -166,6 +173,10 @@ export interface UniversalChannelHandlerInterface extends Interface { values: [string, BigNumberish, boolean, string[], string] ): string; encodeFunctionData(functionFragment: "owner", values?: undefined): string; + encodeFunctionData( + functionFragment: "pendingOwner", + values?: undefined + ): string; encodeFunctionData( functionFragment: "proxiableUUID", values?: undefined @@ -208,6 +219,10 @@ export interface UniversalChannelHandlerInterface extends Interface { decodeFunctionResult(functionFragment: "MW_ID", data: BytesLike): Result; decodeFunctionResult(functionFragment: "VERSION", data: BytesLike): Result; + decodeFunctionResult( + functionFragment: "acceptOwnership", + data: BytesLike + ): Result; decodeFunctionResult( functionFragment: "closeChannel", data: BytesLike @@ -255,6 +270,10 @@ export interface UniversalChannelHandlerInterface extends Interface { data: BytesLike ): Result; decodeFunctionResult(functionFragment: "owner", data: BytesLike): Result; + decodeFunctionResult( + functionFragment: "pendingOwner", + data: BytesLike + ): Result; decodeFunctionResult( functionFragment: "proxiableUUID", data: BytesLike @@ -323,6 +342,19 @@ export namespace InitializedEvent { export type LogDescription = TypedLogDescription; } +export namespace OwnershipTransferStartedEvent { + export type InputTuple = [previousOwner: AddressLike, newOwner: AddressLike]; + export type OutputTuple = [previousOwner: string, newOwner: string]; + export interface OutputObject { + previousOwner: string; + newOwner: string; + } + export type Event = TypedContractEvent; + export type Filter = TypedDeferredTopicFilter; + export type Log = TypedEventLog; + export type LogDescription = TypedLogDescription; +} + export namespace OwnershipTransferredEvent { export type InputTuple = [previousOwner: AddressLike, newOwner: AddressLike]; export type OutputTuple = [previousOwner: string, newOwner: string]; @@ -408,6 +440,8 @@ export interface UniversalChannelHandler extends BaseContract { VERSION: TypedContractMethod<[], [string], "view">; + acceptOwnership: TypedContractMethod<[], [void], "nonpayable">; + closeChannel: TypedContractMethod< [channelId: BytesLike], [void], @@ -497,6 +531,8 @@ export interface UniversalChannelHandler extends BaseContract { owner: TypedContractMethod<[], [string], "view">; + pendingOwner: TypedContractMethod<[], [string], "view">; + proxiableUUID: TypedContractMethod<[], [string], "view">; renounceOwnership: TypedContractMethod<[], [void], "nonpayable">; @@ -559,6 +595,9 @@ export interface UniversalChannelHandler extends BaseContract { getFunction( nameOrSignature: "VERSION" ): TypedContractMethod<[], [string], "view">; + getFunction( + nameOrSignature: "acceptOwnership" + ): TypedContractMethod<[], [void], "nonpayable">; getFunction( nameOrSignature: "closeChannel" ): TypedContractMethod<[channelId: BytesLike], [void], "nonpayable">; @@ -646,6 +685,9 @@ export interface UniversalChannelHandler extends BaseContract { getFunction( nameOrSignature: "owner" ): TypedContractMethod<[], [string], "view">; + getFunction( + nameOrSignature: "pendingOwner" + ): TypedContractMethod<[], [string], "view">; getFunction( nameOrSignature: "proxiableUUID" ): TypedContractMethod<[], [string], "view">; @@ -720,6 +762,13 @@ export interface UniversalChannelHandler extends BaseContract { InitializedEvent.OutputTuple, InitializedEvent.OutputObject >; + getEvent( + key: "OwnershipTransferStarted" + ): TypedContractEvent< + OwnershipTransferStartedEvent.InputTuple, + OwnershipTransferStartedEvent.OutputTuple, + OwnershipTransferStartedEvent.OutputObject + >; getEvent( key: "OwnershipTransferred" ): TypedContractEvent< @@ -776,6 +825,17 @@ export interface UniversalChannelHandler extends BaseContract { InitializedEvent.OutputObject >; + "OwnershipTransferStarted(address,address)": TypedContractEvent< + OwnershipTransferStartedEvent.InputTuple, + OwnershipTransferStartedEvent.OutputTuple, + OwnershipTransferStartedEvent.OutputObject + >; + OwnershipTransferStarted: TypedContractEvent< + OwnershipTransferStartedEvent.InputTuple, + OwnershipTransferStartedEvent.OutputTuple, + OwnershipTransferStartedEvent.OutputObject + >; + "OwnershipTransferred(address,address)": TypedContractEvent< OwnershipTransferredEvent.InputTuple, OwnershipTransferredEvent.OutputTuple, diff --git a/src/evm/contracts/factories/Dispatcher__factory.ts b/src/evm/contracts/factories/Dispatcher__factory.ts index 9b65ff6a..04da1483 100644 --- a/src/evm/contracts/factories/Dispatcher__factory.ts +++ b/src/evm/contracts/factories/Dispatcher__factory.ts @@ -17,6 +17,13 @@ const _abi = [ inputs: [], stateMutability: "nonpayable", }, + { + type: "function", + name: "acceptOwnership", + inputs: [], + outputs: [], + stateMutability: "nonpayable", + }, { type: "function", name: "acknowledgement", @@ -762,6 +769,19 @@ const _abi = [ ], stateMutability: "view", }, + { + type: "function", + name: "pendingOwner", + inputs: [], + outputs: [ + { + name: "", + type: "address", + internalType: "address", + }, + ], + stateMutability: "view", + }, { type: "function", name: "portPrefix", @@ -1775,6 +1795,25 @@ const _abi = [ ], anonymous: false, }, + { + type: "event", + name: "OwnershipTransferStarted", + inputs: [ + { + name: "previousOwner", + type: "address", + indexed: true, + internalType: "address", + }, + { + name: "newOwner", + type: "address", + indexed: true, + internalType: "address", + }, + ], + anonymous: false, + }, { type: "event", name: "OwnershipTransferred", @@ -2111,7 +2150,7 @@ const _abi = [ ] as const; const _bytecode = - "0x60a0604052306080523480156200001557600080fd5b506001606555620000256200002b565b620000ec565b600054610100900460ff1615620000985760405162461bcd60e51b815260206004820152602760248201527f496e697469616c697a61626c653a20636f6e747261637420697320696e697469604482015266616c697a696e6760c81b606482015260840160405180910390fd5b60005460ff90811614620000ea576000805460ff191660ff9081179091556040519081527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b565b608051615d6f6200012460003960008181610bf801528181610c41015281816114420152818161148201526115150152615d6f6000f3fe60806040526004361061019c5760003560e01c80636b67055e116100ec578063940265cb1161008a578063c00fa7c011610064578063c00fa7c0146104dc578063c3e1155c146104fc578063f2fde38b14610534578063f90b8e961461055457600080fd5b8063940265cb146104675780639f59ae711461049c578063ba5a4d25146104bc57600080fd5b80637ab4339d116100c65780637ab4339d146103cc57806381bc079b146103ec5780638da5cb5b1461040c5780638dd34bb41461042a57600080fd5b80636b67055e14610375578063715018a6146103955780637774a6d3146103aa57600080fd5b8063429446b61161015957806352d1902d1161013357806352d1902d146102f2578063556d5178146103155780635d7adf96146103355780636050b5f31461035557600080fd5b8063429446b614610287578063478222c2146102a75780634f1ef286146102df57600080fd5b80631eb9fc86146101a15780632494546b146101c35780632bf5d19d146101fa5780633659cfe61461021a578063418925b71461023a57806342852d241461025a575b600080fd5b3480156101ad57600080fd5b506101c16101bc3660046142c9565b610574565b005b3480156101cf57600080fd5b506097546101e09063ffffffff1681565b60405163ffffffff90911681526020015b60405180910390f35b34801561020657600080fd5b506101c161021536600461439f565b6108fe565b34801561022657600080fd5b506101c1610235366004614449565b610bee565b34801561024657600080fd5b506101c16102553660046144a7565b610cd6565b34801561026657600080fd5b5061027a610275366004614568565b610e36565b6040516101f1919061466b565b34801561029357600080fd5b506101c16102a23660046142c9565b61118e565b3480156102b357600080fd5b5060a2546102c7906001600160a01b031681565b6040516001600160a01b0390911681526020016101f1565b6101c16102ed3660046147be565b611438565b3480156102fe57600080fd5b50610307611508565b6040519081526020016101f1565b34801561032157600080fd5b506101c1610330366004614821565b6115bb565b34801561034157600080fd5b506101c1610350366004614889565b6115d3565b34801561036157600080fd5b506101c1610370366004614889565b6118e2565b34801561038157600080fd5b506101c1610390366004614889565b6118f4565b3480156103a157600080fd5b506101c1611fe2565b3480156103b657600080fd5b506103bf611ff6565b6040516101f191906148e2565b3480156103d857600080fd5b506101c16103e7366004614915565b612084565b3480156103f857600080fd5b506101c1610407366004614966565b612204565b34801561041857600080fd5b506033546001600160a01b03166102c7565b34801561043657600080fd5b5061044a61044536600461497f565b612652565b6040805193845260208401929092521515908201526060016101f1565b34801561047357600080fd5b506104876104823660046149ca565b612713565b604080519283529015156020830152016101f1565b3480156104a857600080fd5b506101c16104b7366004614a73565b6127d7565b3480156104c857600080fd5b506101c16104d7366004614ab4565b61282c565b3480156104e857600080fd5b506101c16104f7366004614a73565b612d68565b34801561050857600080fd5b5061051c610517366004614b58565b612da3565b6040516001600160401b0390911681526020016101f1565b34801561054057600080fd5b506101c161054f366004614449565b612f29565b34801561056057600080fd5b506101c161056f366004614bb5565b612f9f565b61057c6135b4565b600285101561059e5760405163af0ba14d60e01b815260040160405180910390fd5b6105c46105ab8880614c0d565b60208a01356105ba8680614c0d565b876020013561360d565b610626868660008181106105da576105da614c53565b90506020028101906105ec9190614c0d565b8080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525061365092505050565b6001600160a01b031663cb535ab58273__$d825222459c46c14afb2efe0967c30e98d$__634f9b0fb36106598c80614c0d565b8d602001356040518463ffffffff1660e01b815260040161067c93929190614c92565b600060405180830381865af4158015610699573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526106c19190810190614d06565b73__$d825222459c46c14afb2efe0967c30e98d$__6325e0dd0e60078a8e80604001906106ee9190614c0d565b8f8f6106fa8e80614c0d565b8f602001356040518a63ffffffff1660e01b815260040161072399989796959493929190614d8f565b600060405180830381865af4158015610740573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526107689190810190614d06565b6040518463ffffffff1660e01b815260040161078693929190614ea9565b600060405180830381600087803b1580156107a057600080fd5b505af11580156107b4573d6000803e3d6000fd5b50600092506107cf91506107ca90508980614c0d565b6136ce565b9050600080610841836301d08fc560e71b6020808e0135908901356107f760408b018b614c0d565b60405160240161080a9493929190615057565b60408051601f198184030181529190526020810180516001600160e01b03166001600160e01b031990931692909217909152613768565b9150915081156108a65761085a838b8b8b8b8b8b613854565b826001600160a01b03167fcf8be9ab2b5edf8beb2c45abe8e0cc7646318ac19f6c3164ba2e19e93a8a32af8b6020013560405161089991815260200190565b60405180910390a26108e8565b826001600160a01b03167f971a4433f5bff5f011728a4123aeeca4b5275ac20b013cf276e65510491ac26f826040516108df91906148e2565b60405180910390a25b5050506108f56001606555565b50505050505050565b6109066135b4565b60028310156109285760405163af0ba14d60e01b815260040160405180910390fd5b6109356105ab8880614c0d565b61094b848460008181106105da576105da614c53565b6001600160a01b031663cb535ab58273__$d825222459c46c14afb2efe0967c30e98d$__634f9b0fb361097e8c80614c0d565b8d602001356040518463ffffffff1660e01b81526004016109a193929190614c92565b600060405180830381865af41580156109be573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526109e69190810190614d06565b73__$d825222459c46c14afb2efe0967c30e98d$__6325e0dd0e60068c8e8060400190610a139190614c0d565b8d8d610a1f8e80614c0d565b8f602001356040518a63ffffffff1660e01b8152600401610a4899989796959493929190614d8f565b600060405180830381865af4158015610a65573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052610a8d9190810190614d06565b6040518463ffffffff1660e01b8152600401610aab93929190614ea9565b600060405180830381600087803b158015610ac557600080fd5b505af1158015610ad9573d6000803e3d6000fd5b5060009250610aef91506107ca90508980614c0d565b9050600080610b4583634bdb559760e01b8b8a8a8f602001358b8060000190610b189190614c0d565b8d602001358e8060400190610b2d9190614c0d565b60405160240161080a999897969594939291906150c7565b915091508115610bb557826001600160a01b03167ff910705a7a768eb5958f281a5f84cae8bffc5dd811ca5cd303dda140a423698c82806020019051810190610b8e919061512c565b8b8b8b8b610b9c8c80614c0d565b8d60200135604051610899989796959493929190615174565b826001600160a01b03167f9e2fe55a3b54b57f82334c273f8d048cd7f05ad19c16cf334276a8c1fec4b6fd826040516108df91906148e2565b6001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000163003610c3f5760405162461bcd60e51b8152600401610c36906151da565b60405180910390fd5b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316610c88600080516020615cf3833981519152546001600160a01b031690565b6001600160a01b031614610cae5760405162461bcd60e51b8152600401610c3690615226565b610cb781613aec565b60408051600080825260208201909252610cd391839190613af4565b50565b610cde6135b4565b6002831080610ceb575080155b15610d0957604051637d6ba8a560e01b815260040160405180910390fd5b600086858585858d8d604051602001610d289796959493929190615272565b6040516020818303038152906040529050600080610d6e33637a9ccc4b60e01b85604051602001610d5a9291906152c9565b604051602081830303815290604052613768565b915091508115610ddd57336001600160a01b03167f20fd8a5856711b18d00def4aa6abafbe00ce6d60795e015cc1cad35eb9b4635982806020019051810190610db7919061512c565b8b8b8b8b8b8b604051610dd097969594939291906152fa565b60405180910390a2610e1f565b336001600160a01b03167f69c1283cce89382f0f9ddf19b7c4f05b4d9b3c30c84fc148b1ec800284be58d582604051610e1691906148e2565b60405180910390a25b505050610e2c6001606555565b5050505050505050565b610e7c6040805160e08101909152606081526020810160008152602001600015158152602001606081526020016060815260200160008019168152602001606081525090565b6001600160a01b038316600090815260986020908152604080832085845290915290819020815160e08101909252805482908290610eb99061534a565b80601f0160208091040260200160405190810160405280929190818152602001828054610ee59061534a565b8015610f325780601f10610f0757610100808354040283529160200191610f32565b820191906000526020600020905b815481529060010190602001808311610f1557829003601f168201915b5050509183525050600182015460209091019060ff166002811115610f5957610f596145ec565b6002811115610f6a57610f6a6145ec565b81526001820154610100900460ff161515602080830191909152600283018054604080518285028101850182528281529401939260009084015b82821015611050578382906000526020600020018054610fc39061534a565b80601f0160208091040260200160405190810160405280929190818152602001828054610fef9061534a565b801561103c5780601f106110115761010080835404028352916020019161103c565b820191906000526020600020905b81548152906001019060200180831161101f57829003601f168201915b505050505081526020019060010190610fa4565b5050505081526020016003820180546110689061534a565b80601f01602080910402602001604051908101604052809291908181526020018280546110949061534a565b80156110e15780601f106110b6576101008083540402835291602001916110e1565b820191906000526020600020905b8154815290600101906020018083116110c457829003601f168201915b50505050508152602001600482015481526020016005820180546111049061534a565b80601f01602080910402602001604051908101604052809291908181526020018280546111309061534a565b801561117d5780601f106111525761010080835404028352916020019161117d565b820191906000526020600020905b81548152906001019060200180831161116057829003601f168201915b505050505081525050905092915050565b6111966135b4565b60028510156111b85760405163af0ba14d60e01b815260040160405180910390fd5b6111c56105ab8880614c0d565b6111db868660008181106105da576105da614c53565b6001600160a01b031663cb535ab58273__$d825222459c46c14afb2efe0967c30e98d$__634f9b0fb361120e8c80614c0d565b8d602001356040518463ffffffff1660e01b815260040161123193929190614c92565b600060405180830381865af415801561124e573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526112769190810190614d06565b73__$d825222459c46c14afb2efe0967c30e98d$__6325e0dd0e60088a8e80604001906112a39190614c0d565b8f8f6112af8e80614c0d565b8f602001356040518a63ffffffff1660e01b81526004016112d899989796959493929190614d8f565b600060405180830381865af41580156112f5573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f1916820160405261131d9190810190614d06565b6040518463ffffffff1660e01b815260040161133b93929190614ea9565b600060405180830381600087803b15801561135557600080fd5b505af1158015611369573d6000803e3d6000fd5b506000925061137f91506107ca90508980614c0d565b90506000806113a78363fad28a2460e01b8c6020013560405160240161080a91815260200190565b9150915081156113ff576113c0838b8b8b8b8b8b613854565b826001600160a01b03167fe80f571f70f7cabf9d7ac60ece08421be374117776c311c327a083ca398f802f8b6020013560405161089991815260200190565b826001600160a01b03167ff6a58ef30f66943749e8c29c661c84da143a1c8ed017f5faa92b509e0000875a826040516108df91906148e2565b6001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001630036114805760405162461bcd60e51b8152600401610c36906151da565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03166114c9600080516020615cf3833981519152546001600160a01b031690565b6001600160a01b0316146114ef5760405162461bcd60e51b8152600401610c3690615226565b6114f882613aec565b61150482826001613af4565b5050565b6000306001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016146115a85760405162461bcd60e51b815260206004820152603860248201527f555550535570677261646561626c653a206d757374206e6f742062652063616c60448201527f6c6564207468726f7567682064656c656761746563616c6c00000000000000006064820152608401610c36565b50600080516020615cf383398151915290565b6115c3613c5f565b6115ce838383613cb9565b505050565b6115db6135b4565b6115f46115eb602084018461537e565b60200135613d53565b6001600160a01b031663cb535ab58273__$d825222459c46c14afb2efe0967c30e98d$__634b5728d1866040518263ffffffff1660e01b815260040161163a9190615400565b600060405180830381865af4158015611657573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f1916820160405261167f9190810190614d06565b604051637e4794ed60e11b815273__$d825222459c46c14afb2efe0967c30e98d$__9063fc8f29da906116b6908990600401615400565b602060405180830381865af41580156116d3573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906116f791906154c2565b60405160200161170991815260200190565b6040516020818303038152906040526040518463ffffffff1660e01b815260040161173693929190614ea9565b600060405180830381600087803b15801561175057600080fd5b505af1158015611764573d6000803e3d6000fd5b50505050600061178783806020019061177d919061537e565b6107ca9080614c0d565b6001600160a01b0381166000908152609d60209081526040822092935090919082906117b59087018761537e565b60200135815260200190815260200160002060008560400160208101906117dc91906154db565b6001600160401b0316815260208101919091526040016000205460ff169050801561181a5760405163066c745760e01b815260040160405180910390fd5b61184261182d60e0860160c087016154db565b61183d60c0870160a088016154db565b613e1d565b61185f576040516312c9cc9f60e01b815260040160405180910390fd5b61186c602085018561537e565b602001356001600160a01b0383167fedbcd9eeb09d85c3ea1b5bf002c04478059cb261cab82c903885cefccae374bc6118ab60608801604089016154db565b608088016118bf60e08a0160c08b016154db565b6040516118ce939291906154f6565b60405180910390a350506115046001606555565b6118ea6135b4565b6115046001606555565b6118fc6135b4565b61190c6115eb602084018461537e565b6001600160a01b031663cb535ab58273__$d825222459c46c14afb2efe0967c30e98d$__634b5728d1866040518263ffffffff1660e01b81526004016119529190615400565b600060405180830381865af415801561196f573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526119979190810190614d06565b604051637e4794ed60e11b815273__$d825222459c46c14afb2efe0967c30e98d$__9063fc8f29da906119ce908990600401615400565b602060405180830381865af41580156119eb573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611a0f91906154c2565b604051602001611a2191815260200190565b6040516020818303038152906040526040518463ffffffff1660e01b8152600401611a4e93929190614ea9565b600060405180830381600087803b158015611a6857600080fd5b505af1158015611a7c573d6000803e3d6000fd5b505050506000611a9583806020019061177d919061537e565b6001600160a01b0381166000908152609d6020908152604082209293509091908290611ac39087018761537e565b6020013581526020019081526020016000206000856040016020810190611aea91906154db565b6001600160401b0316815260208101919091526040016000205460ff1690508015611b285760405163066c745760e01b815260040160405180910390fd5b6001600160a01b0382166000908152609d6020908152604082206001929091611b539088018861537e565b6020013581526020019081526020016000206000866040016020810190611b7a91906154db565b6001600160401b031681526020810191909152604001600020805460ff191691151591909117905560026001600160a01b038316600090815260986020908152604082209190611bcc9088018861537e565b60209081013582528101919091526040016000206001015460ff166002811115611bf857611bf86145ec565b03611cf7576001600160a01b0382166000908152609a6020908152604082209190611c259087018761537e565b60209081013582528101919091526040908101600020546001600160401b031690611c5690606087019087016154db565b6001600160401b031614611c7d5760405163362a414d60e01b815260040160405180910390fd5b611c8d60608501604086016154db565b611c98906001615526565b6001600160a01b0383166000908152609a6020908152604082209190611cc09088018861537e565b60200135815260200190815260200160002060006101000a8154816001600160401b0302191690836001600160401b031602179055505b611d04602085018561537e565b602001356001600160a01b0383167fde5b57e6566d68a30b0979431df3d5df6db3b9aa89f8820f595b9315bf86d067611d4360608801604089016154db565b6040516001600160401b03909116815260200160405180910390a3611d7161182d60e0860160c087016154db565b15611df457611d83602085018561537e565b602001356001600160a01b0383167fedbcd9eeb09d85c3ea1b5bf002c04478059cb261cab82c903885cefccae374bc611dc260608801604089016154db565b60808801611dd660e08a0160c08b016154db565b604051611de5939291906154f6565b60405180910390a350506118ea565b604080518082019091526000815260606020820152600080611e2985634dcc0aa660e01b8960405160240161080a9190615610565b915091508115611e4e5780806020019051810190611e479190615623565b9250611e66565b60408051808201909152600081526020810182905292505b6001600160a01b0385166000908152609e602090815260408220908290611e8f908b018b61537e565b6020013581526020019081526020016000206000896040016020810190611eb691906154db565b6001600160401b0316815260208101919091526040016000205460ff1690508015611ef457604051637aa549d360e01b815260040160405180910390fd5b6001600160a01b0386166000908152609e6020908152604082206001929091611f1f908c018c61537e565b60200135815260200190815260200160002060008a6040016020810190611f4691906154db565b6001600160401b03168152602080820192909252604001600020805460ff191692151592909217909155611f7c9089018961537e565b602001356001600160a01b0387167fa32e6f42b1d63fb83ad73b009a6dbb9413d1da02e95b1bb08f081815eea8db20611fbb60608c0160408d016154db565b87604051611fca9291906156d9565b60405180910390a35050505050506115046001606555565b611fea613c5f565b611ff46000613e6b565b565b609680546120039061534a565b80601f016020809104026020016040519081016040528092919081815260200182805461202f9061534a565b801561207c5780601f106120515761010080835404028352916020019161207c565b820191906000526020600020905b81548152906001019060200180831161205f57829003601f168201915b505050505081565b600054600290610100900460ff161580156120a6575060005460ff8083169116105b6121095760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201526d191e481a5b9a5d1a585b1a5e995960921b6064820152608401610c36565b6000805461ffff191660ff8316176101001790556121256135b4565b82516000036121475760405163e8cf362360e01b815260040160405180910390fd5b6001600160a01b03821661216e5760405163cbdd34cf60e01b815260040160405180910390fd5b612176613ebd565b60966121828482615741565b5082516097805463ffffffff191663ffffffff90921691909117905560a280546001600160a01b0319166001600160a01b03841617905560016065556000805461ff001916905560405160ff821681527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a1505050565b61220c6135b4565b336000908152609860209081526040808320848452909152808220815160e0810190925280548290829061223f9061534a565b80601f016020809104026020016040519081016040528092919081815260200182805461226b9061534a565b80156122b85780601f1061228d576101008083540402835291602001916122b8565b820191906000526020600020905b81548152906001019060200180831161229b57829003601f168201915b5050509183525050600182015460209091019060ff1660028111156122df576122df6145ec565b60028111156122f0576122f06145ec565b81526001820154610100900460ff161515602080830191909152600283018054604080518285028101850182528281529401939260009084015b828210156123d65783829060005260206000200180546123499061534a565b80601f01602080910402602001604051908101604052809291908181526020018280546123759061534a565b80156123c25780601f10612397576101008083540402835291602001916123c2565b820191906000526020600020905b8154815290600101906020018083116123a557829003601f168201915b50505050508152602001906001019061232a565b5050505081526020016003820180546123ee9061534a565b80601f016020809104026020016040519081016040528092919081815260200182805461241a9061534a565b80156124675780601f1061243c57610100808354040283529160200191612467565b820191906000526020600020905b81548152906001019060200180831161244a57829003601f168201915b505050505081526020016004820154815260200160058201805461248a9061534a565b80601f01602080910402602001604051908101604052809291908181526020018280546124b69061534a565b80156125035780601f106124d857610100808354040283529160200191612503565b820191906000526020600020905b8154815290600101906020018083116124e657829003601f168201915b5050509190925250505060a081015190915061253257604051631109bfb360e31b815260040160405180910390fd5b60008061255e33631eb7dd5e60e01b8686608001518760a0015160405160240161080a93929190615800565b33600090815260986020908152604080832089845290915281209294509092506125888282614153565b60018201805461ffff191690556125a360028301600061418d565b6125b1600383016000614153565b60048201600090556005820160006125c99190614153565b5050811561260357604051849033907f21372e37743553ba8e5f61239803174a827c7732d53ec8adcb76c6b3bb2c13f190600090a3612645565b336001600160a01b03167fb1be59c1bcd39c54c7132a8e0d321af5db427575ddb3265560d8862804f4381b8260405161263c91906148e2565b60405180910390a25b505050610cd36001606555565b600080600061269685858080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525061365092505050565b6001600160a01b03166344c9af28876040518263ffffffff1660e01b81526004016126c391815260200190565b606060405180830381865afa1580156126e0573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906127049190615829565b92509250925093509350939050565b60008061275584848080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525061365092505050565b6001600160a01b0316635922f420898989896040518563ffffffff1660e01b815260040161278694939291906158b7565b60408051808303816000875af11580156127a4573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906127c8919061597c565b91509150965096945050505050565b6127df613c5f565b60008190036128015760405163e8cf362360e01b815260040160405180910390fd5b609661280e8284836159a1565b506097805463ffffffff191663ffffffff9290921691909117905550565b6128346135b4565b600061284361177d868061537e565b90506128526115eb868061537e565b6001600160a01b031663cb535ab58373__$d825222459c46c14afb2efe0967c30e98d$__6311a7a373896040518263ffffffff1660e01b81526004016128989190615400565b600060405180830381865af41580156128b5573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526128dd9190810190614d06565b6040516374e9704560e01b815273__$d825222459c46c14afb2efe0967c30e98d$__906374e9704590612916908b908b90600401615a61565b602060405180830381865af4158015612933573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061295791906154c2565b60405160200161296991815260200190565b6040516020818303038152906040526040518463ffffffff1660e01b815260040161299693929190614ea9565b600060405180830381600087803b1580156129b057600080fd5b505af11580156129c4573d6000803e3d6000fd5b505050506001600160a01b0381166000908152609c60205260408120816129eb888061537e565b6020013581526020019081526020016000206000876040016020810190612a1291906154db565b6001600160401b0316815260208101919091526040016000205460ff16905080612a4f5760405163ca89746b60e01b815260040160405180910390fd5b600080612aee84637e1d42b560e01b8a73__$d825222459c46c14afb2efe0967c30e98d$__63360b8cd78c8c6040518363ffffffff1660e01b8152600401612a98929190615a61565b600060405180830381865af4158015612ab5573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052612add9190810190615623565b60405160240161080a929190615a75565b915091508115612d125760026001600160a01b038516600090815260986020526040812090612b1d8b8061537e565b60209081013582528101919091526040016000206001015460ff166002811115612b4957612b496145ec565b03612c3e576001600160a01b0384166000908152609b6020526040812090612b718a8061537e565b60209081013582528101919091526040908101600020546001600160401b031690612ba29060608b01908b016154db565b6001600160401b031614612bc95760405163362a414d60e01b815260040160405180910390fd5b612bd96060890160408a016154db565b612be4906001615526565b6001600160a01b0385166000908152609b6020526040812090612c078b8061537e565b60200135815260200190815260200160002060006101000a8154816001600160401b0302191690836001600160401b031602179055505b6001600160a01b0384166000908152609c6020526040812090612c618a8061537e565b6020013581526020019081526020016000206000896040016020810190612c8891906154db565b6001600160401b031681526020810191909152604001600020805460ff19169055612cb3888061537e565b602001356001600160a01b0385167fe46f6591236abe528fe47a3b281fb002524dadd3e62b1f317ed285d07273c3b1612cf260608c0160408d016154db565b6040516001600160401b03909116815260200160405180910390a3612d54565b836001600160a01b03167f625eea143c9dae6915c809da47016c22d9cd006c3ace7c345c5cbcf57d3aefbc82604051612d4b91906148e2565b60405180910390a25b50505050612d626001606555565b50505050565b612d70613c5f565b60a18282604051612d82929190615a9a565b90815260405190819003602001902080546001600160a01b03191690555050565b6000612dad6135b4565b336000908152609860209081526040808320888452909152902060040154612de857604051631109bfb360e31b815260040160405180910390fd5b42826001600160401b031611612e115760405163551ea0fb60e11b815260040160405180910390fd5b503360009081526099602090815260408083208784529091528120546001600160401b031690819003612e5757604051631e510bfb60e21b815260040160405180910390fd5b336000908152609c6020908152604080832088845282528083206001600160401b03851684529091529020805460ff19166001908117909155612e9b908290615526565b3360008181526099602090815260408083208a845290915290819020805467ffffffffffffffff19166001600160401b03949094169390931790925590518691907fb5bff96e18da044e4e34510d16df9053b9f1920f6a960732e5aaf22fe9b8013690612f0f908890889087908990615aaa565b60405180910390a3612f216001606555565b949350505050565b612f31613c5f565b6001600160a01b038116612f965760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610c36565b610cd381613e6b565b612fa76135b4565b6001600160a01b038316612fce5760405163cbdd34cf60e01b815260040160405180910390fd5b6001600160a01b0383166000908152609860209081526040808320858452909152808220815160e0810190925280548290829061300a9061534a565b80601f01602080910402602001604051908101604052809291908181526020018280546130369061534a565b80156130835780601f1061305857610100808354040283529160200191613083565b820191906000526020600020905b81548152906001019060200180831161306657829003601f168201915b5050509183525050600182015460209091019060ff1660028111156130aa576130aa6145ec565b60028111156130bb576130bb6145ec565b81526001820154610100900460ff161515602080830191909152600283018054604080518285028101850182528281529401939260009084015b828210156131a15783829060005260206000200180546131149061534a565b80601f01602080910402602001604051908101604052809291908181526020018280546131409061534a565b801561318d5780601f106131625761010080835404028352916020019161318d565b820191906000526020600020905b81548152906001019060200180831161317057829003601f168201915b5050505050815260200190600101906130f5565b5050505081526020016003820180546131b99061534a565b80601f01602080910402602001604051908101604052809291908181526020018280546131e59061534a565b80156132325780601f1061320757610100808354040283529160200191613232565b820191906000526020600020905b81548152906001019060200180831161321557829003601f168201915b50505050508152602001600482015481526020016005820180546132559061534a565b80601f01602080910402602001604051908101604052809291908181526020018280546132819061534a565b80156132ce5780601f106132a3576101008083540402835291602001916132ce565b820191906000526020600020905b8154815290600101906020018083116132b157829003601f168201915b5050509190925250505060a08101519091506132fd57604051634d93b09d60e11b815260040160405180910390fd5b61330683613d53565b6001600160a01b031663cb535ab58373__$d825222459c46c14afb2efe0967c30e98d$__636f6547268560c00151886040518363ffffffff1660e01b8152600401613352929190615adf565b600060405180830381865af415801561336f573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526133979190810190614d06565b602085015185516060870151608088015160a0890151604051631f621e1560e31b815273__$d825222459c46c14afb2efe0967c30e98d$__9563fb10f0a8956133ed956009959294919390929190600401615b01565b600060405180830381865af415801561340a573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526134329190810190614d06565b6040518463ffffffff1660e01b815260040161345093929190614ea9565b600060405180830381600087803b15801561346a57600080fd5b505af115801561347e573d6000803e3d6000fd5b505050506000806134ae86633f9fdbe460e01b8786608001518760a0015160405160240161080a93929190615800565b6001600160a01b03881660009081526098602090815260408083208a845290915281209294509092506134e18282614153565b60018201805461ffff191690556134fc60028301600061418d565b61350a600383016000614153565b60048201600090556005820160006135229190614153565b505081156135655760405185906001600160a01b038816907f5f010dbbd6bf46aec8131c5456301a75cd688d3cca9bc8380c9e26301be2072990600090a36135a7565b856001600160a01b03167fc9d36d7a317cb116925d5cb66f0069fe825822fe23e9cf3f421c38cf444caa308260405161359e91906148e2565b60405180910390a25b5050506115ce6001606555565b6002606554036136065760405162461bcd60e51b815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c006044820152606401610c36565b6002606555565b841580613618575081155b80613621575083155b8061362a575080155b1561364857604051637d6ba8a560e01b815260040160405180910390fd5b505050505050565b6000815160000361367e5760405163524e171160e01b81526020600482015260006024820152604401610c36565b60a18260405161368e9190615ba9565b908152604051908190036020019020546001600160a01b03169050806136c9578160405163036c4d8760e11b8152600401610c3691906148e2565b919050565b60975460009073__$f61eb90c6f674e787d51c07f105fa231e2$__9063a1ef9a989061370390859063ffffffff168188615bbb565b6040518363ffffffff1660e01b8152600401613720929190615a61565b602060405180830381865af415801561373d573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906137619190615be5565b9392505050565b600060606001600160a01b0384163b6137b057505060408051808201909152601481527318d85b1b081d1bc81b9bdb8b58dbdb9d1c9858dd60621b602082015260009061384d565b60005a9050846001600160a01b0316846040516137cd9190615ba9565b6000604051808303816000865af19150503d806000811461380a576040519150601f19603f3d011682016040523d82523d6000602084013e61380f565b606091505b5090935091508215801561382d5750613829604082615c02565b5a11155b1561384b5760405163b08ede0960e01b815260040160405180910390fd5b505b9250929050565b6040518060e0016040528087806040019061386f9190614c0d565b8080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152505050908252506020018460028111156138bb576138bb6145ec565b815283151560208201526040016138d28688615c24565b81526020016138e18380614c0d565b8080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152505050908252506020838101359082015260400161392f8880614c0d565b8080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201829052509390945250506001600160a01b038a1681526098602090815260408083208b83013584529091529020825190915081906139999082615741565b50602082015160018083018054909160ff19909116908360028111156139c1576139c16145ec565b021790555060408201516001820180549115156101000261ff001990921691909117905560608201518051613a009160028401916020909101906141ab565b5060808201516003820190613a159082615741565b5060a0820151600482015560c08201516005820190613a349082615741565b5050506001600160a01b03871660008181526099602090815260408083208a8301358085529083528184208054600167ffffffffffffffff199182168117909255868652609a855283862083875285528386208054821683179055958552609b8452828520918552925282208054909316179091558590859081613aba57613aba614c53565b9050602002810190613acc9190614c0d565b602080890135600090815260a09091526040902091610e2c9190836159a1565b610cd3613c5f565b7f4910fdfa16fed3260ed0e7147f7cc6da11a60208b5b9406d12a635614ffd91435460ff1615613b27576115ce83613eec565b826001600160a01b03166352d1902d6040518163ffffffff1660e01b8152600401602060405180830381865afa925050508015613b81575060408051601f3d908101601f19168201909252613b7e918101906154c2565b60015b613be45760405162461bcd60e51b815260206004820152602e60248201527f45524331393637557067726164653a206e657720696d706c656d656e7461746960448201526d6f6e206973206e6f74205555505360901b6064820152608401610c36565b600080516020615cf38339815191528114613c535760405162461bcd60e51b815260206004820152602960248201527f45524331393637557067726164653a20756e737570706f727465642070726f786044820152681a58589b195555525160ba1b6064820152608401610c36565b506115ce838383613f88565b6033546001600160a01b03163314611ff45760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610c36565b6000829003613ce55760405163524e171160e01b81526020600482015260006024820152604401610c36565b6001600160a01b038116613d0c5760405163cbdd34cf60e01b815260040160405180910390fd5b8060a18484604051613d1f929190615a9a565b90815260405190819003602001902080546001600160a01b03929092166001600160a01b0319909216919091179055505050565b600081815260a0602052604081208054829190613d6f9061534a565b80601f0160208091040260200160405190810160405280929190818152602001828054613d9b9061534a565b8015613de85780601f10613dbd57610100808354040283529160200191613de8565b820191906000526020600020905b815481529060010190602001808311613dcb57829003601f168201915b505050505090508051600003613e14576040516363b99a9d60e11b815260048101849052602401610c36565b61376181613650565b60006001600160401b03831615801590613e405750826001600160401b03164210155b8061376157506001600160401b038216158015906137615750506001600160401b0316431015919050565b603380546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b600054610100900460ff16613ee45760405162461bcd60e51b8152600401610c3690615ca7565b611ff4613fad565b6001600160a01b0381163b613f595760405162461bcd60e51b815260206004820152602d60248201527f455243313936373a206e657720696d706c656d656e746174696f6e206973206e60448201526c1bdd08184818dbdb9d1c9858dd609a1b6064820152608401610c36565b600080516020615cf383398151915280546001600160a01b0319166001600160a01b0392909216919091179055565b613f9183613fdd565b600082511180613f9e5750805b156115ce57612d62838361401d565b600054610100900460ff16613fd45760405162461bcd60e51b8152600401610c3690615ca7565b611ff433613e6b565b613fe681613eec565b6040516001600160a01b038216907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b90600090a250565b60606137618383604051806060016040528060278152602001615d13602791396060600080856001600160a01b03168560405161405a9190615ba9565b600060405180830381855af49150503d8060008114614095576040519150601f19603f3d011682016040523d82523d6000602084013e61409a565b606091505b50915091506140ab868383876140b5565b9695505050505050565b6060831561412457825160000361411d576001600160a01b0385163b61411d5760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e74726163740000006044820152606401610c36565b5081612f21565b612f2183838151156141395781518083602001fd5b8060405162461bcd60e51b8152600401610c3691906148e2565b50805461415f9061534a565b6000825580601f1061416f575050565b601f016020900490600052602060002090810190610cd39190614201565b5080546000825590600052602060002090810190610cd39190614216565b8280548282559060005260206000209081019282156141f1579160200282015b828111156141f157825182906141e19082615741565b50916020019190600101906141cb565b506141fd929150614216565b5090565b5b808211156141fd5760008155600101614202565b808211156141fd57600061422a8282614153565b50600101614216565b60006060828403121561424557600080fd5b50919050565b60008083601f84011261425d57600080fd5b5081356001600160401b0381111561427457600080fd5b6020830191508360208260051b850101111561384d57600080fd5b8035600381106136c957600080fd5b8015158114610cd357600080fd5b80356136c98161429e565b60006040828403121561424557600080fd5b600080600080600080600060c0888a0312156142e457600080fd5b87356001600160401b03808211156142fb57600080fd5b6143078b838c01614233565b985060208a013591508082111561431d57600080fd5b6143298b838c0161424b565b909850965086915061433d60408b0161428f565b955061434b60608b016142ac565b945060808a013591508082111561436157600080fd5b61436d8b838c01614233565b935060a08a013591508082111561438357600080fd5b506143908a828b016142b7565b91505092959891949750929550565b600080600080600080600060c0888a0312156143ba57600080fd5b87356001600160401b03808211156143d157600080fd5b6143dd8b838c01614233565b98506143eb60208b0161428f565b97506143f960408b016142ac565b965060608a013591508082111561440f57600080fd5b61441b8b838c0161424b565b909650945060808a013591508082111561436157600080fd5b6001600160a01b0381168114610cd357600080fd5b60006020828403121561445b57600080fd5b813561376181614434565b60008083601f84011261447857600080fd5b5081356001600160401b0381111561448f57600080fd5b60208301915083602082850101111561384d57600080fd5b60008060008060008060008060a0898b0312156144c357600080fd5b88356001600160401b03808211156144da57600080fd5b6144e68c838d01614466565b909a5098508891506144fa60208c0161428f565b975060408b0135915061450c8261429e565b90955060608a0135908082111561452257600080fd5b61452e8c838d0161424b565b909650945060808b013591508082111561454757600080fd5b506145548b828c01614466565b999c989b5096995094979396929594505050565b6000806040838503121561457b57600080fd5b823561458681614434565b946020939093013593505050565b60005b838110156145af578181015183820152602001614597565b83811115612d625750506000910152565b600081518084526145d8816020860160208601614594565b601f01601f19169290920160200192915050565b634e487b7160e01b600052602160045260246000fd5b60038110614612576146126145ec565b9052565b600081518084526020808501808196508360051b8101915082860160005b8581101561465e57828403895261464c8483516145c0565b98850198935090840190600101614634565b5091979650505050505050565b602081526000825160e060208401526146886101008401826145c0565b9050602084015161469c6040850182614602565b506040840151151560608401526060840151601f19808584030160808601526146c58383614616565b925060808601519150808584030160a08601526146e283836145c0565b925060a086015160c086015260c08601519150808584030160e08601525061470a82826145c0565b95945050505050565b634e487b7160e01b600052604160045260246000fd5b604051601f8201601f191681016001600160401b038111828210171561475157614751614713565b604052919050565b60006001600160401b0382111561477257614772614713565b50601f01601f191660200190565b600061479361478e84614759565b614729565b90508281528383830111156147a757600080fd5b828260208301376000602084830101529392505050565b600080604083850312156147d157600080fd5b82356147dc81614434565b915060208301356001600160401b038111156147f757600080fd5b8301601f8101851361480857600080fd5b61481785823560208401614780565b9150509250929050565b60008060006040848603121561483657600080fd5b83356001600160401b0381111561484c57600080fd5b61485886828701614466565b909450925050602084013561486c81614434565b809150509250925092565b600060e0828403121561424557600080fd5b6000806040838503121561489c57600080fd5b82356001600160401b03808211156148b357600080fd5b6148bf86838701614877565b935060208501359150808211156148d557600080fd5b50614817858286016142b7565b60208152600061376160208301846145c0565b600082601f83011261490657600080fd5b61376183833560208501614780565b6000806040838503121561492857600080fd5b82356001600160401b0381111561493e57600080fd5b61494a858286016148f5565b925050602083013561495b81614434565b809150509250929050565b60006020828403121561497857600080fd5b5035919050565b60008060006040848603121561499457600080fd5b8335925060208401356001600160401b038111156149b157600080fd5b6149bd86828701614466565b9497909650939450505050565b60008060008060008060a087890312156149e357600080fd5b86356001600160401b03808211156149fa57600080fd5b614a068a838b01614233565b97506020890135915080821115614a1c57600080fd5b908801906080828b031215614a3057600080fd5b909550604088013594506060880135935060808801359080821115614a5457600080fd5b50614a6189828a01614466565b979a9699509497509295939492505050565b60008060208385031215614a8657600080fd5b82356001600160401b03811115614a9c57600080fd5b614aa885828601614466565b90969095509350505050565b60008060008060608587031215614aca57600080fd5b84356001600160401b0380821115614ae157600080fd5b614aed88838901614877565b95506020870135915080821115614b0357600080fd5b614b0f88838901614466565b90955093506040870135915080821115614b2857600080fd5b50614b35878288016142b7565b91505092959194509250565b80356001600160401b03811681146136c957600080fd5b60008060008060608587031215614b6e57600080fd5b8435935060208501356001600160401b03811115614b8b57600080fd5b614b9787828801614466565b9094509250614baa905060408601614b41565b905092959194509250565b600080600060608486031215614bca57600080fd5b8335614bd581614434565b92506020840135915060408401356001600160401b03811115614bf757600080fd5b614c03868287016142b7565b9150509250925092565b6000808335601e19843603018112614c2457600080fd5b8301803591506001600160401b03821115614c3e57600080fd5b60200191503681900382131561384d57600080fd5b634e487b7160e01b600052603260045260246000fd5b81835281816020850137506000828201602090810191909152601f909101601f19169091010190565b604081526000614ca6604083018587614c69565b9050826020830152949350505050565b6000614cc461478e84614759565b9050828152838383011115614cd857600080fd5b613761836020830184614594565b600082601f830112614cf757600080fd5b61376183835160208501614cb6565b600060208284031215614d1857600080fd5b81516001600160401b03811115614d2e57600080fd5b612f2184828501614ce6565b600a8110614612576146126145ec565b6000808335601e19843603018112614d6157600080fd5b83016020810192503590506001600160401b03811115614d8057600080fd5b80360382131561384d57600080fd5b614d99818b614d3a565b60006020614da98184018c614602565b60c06040840152614dbe60c084018a8c614c69565b8381036060850152878152818101600589901b820183018a60005b8b811015614e1357848303601f19018452614df4828e614d4a565b614dff858284614c69565b958801959450505090850190600101614dd9565b50508581036080870152614e2881898b614c69565b9450505050508260a08301529a9950505050505050505050565b6000808335601e19843603018112614e5957600080fd5b83016020810192503590506001600160401b03811115614e7857600080fd5b8060051b360382131561384d57600080fd5b60008235603e19833603018112614ea057600080fd5b90910192915050565b6000606080835260a0808401614ebf8889614e42565b60408786018190529281905260059260c08089019083861b8a01018460005b8581101561501f578b830360bf19018452813536889003607e19018112614f0457600080fd5b87016080848101614f158380614e42565b928752908290528b860191808c1b87018d0191908160005b82811015614f9d57898503609f19018652614f488285614e8a565b614f528182614d4a565b8e8852614f628f89018284614c69565b9150506020614f7381840184614d4a565b9350888303828a0152614f87838583614c69565b9982019998505093909301925050600101614f2d565b5050505060209150614fb182840184614d4a565b87830384890152614fc3838284614c69565b92505050614fd388840184614d4a565b8783038a890152614fe5838284614c69565b92505050614ff58d840184614d4a565b93508682038e880152615009828583614c69565b9783019796505050929092019150600101614ede565b505060208d013560808b015289810360208b015261503d818d6145c0565b975050508786038189015250505050506140ab81856145c0565b8481528360208201526060604082015260006140ab606083018486614c69565b81835260006020808501808196508560051b810191508460005b8781101561465e5782840389526150a88288614d4a565b6150b3868284614c69565b9a87019a9550505090840190600101615091565b6150d1818b614602565b60c0602082015260006150e860c083018a8c615077565b886040840152828103606084015261510181888a614c69565b905085608084015282810360a084015261511c818587614c69565b9c9b505050505050505050505050565b60006020828403121561513e57600080fd5b81516001600160401b0381111561515457600080fd5b8201601f8101841361516557600080fd5b612f2184825160208401614cb6565b60c08152600061518760c083018b6145c0565b615194602084018b614602565b881515604084015282810360608401526151af81888a615077565b905082810360808401526151c4818688614c69565b9150508260a08301529998505050505050505050565b6020808252602c908201527f46756e6374696f6e206d7573742062652063616c6c6564207468726f7567682060408201526b19195b1959d85d1958d85b1b60a21b606082015260800190565b6020808252602c908201527f46756e6374696f6e206d7573742062652063616c6c6564207468726f7567682060408201526b6163746976652070726f787960a01b606082015260800190565b61527c8189614602565b60806020820152600061529360808301888a615077565b82810360408401526152a6818789614c69565b905082810360608401526152bb818587614c69565b9a9950505050505050505050565b6001600160e01b03198316815281516000906152ec816004850160208701614594565b919091016004019392505050565b60a08152600061530d60a083018a6145c0565b61531a602084018a614602565b87151560408401528281036060840152615335818789615077565b905082810360808401526152bb818587614c69565b600181811c9082168061535e57607f821691505b60208210810361424557634e487b7160e01b600052602260045260246000fd5b60008235603e1983360301811261539457600080fd5b9190910192915050565b60006153aa8283614d4a565b604085526153bc604086018284614c69565b915050602083013560208501528091505092915050565b6001600160401b03806153e583614b41565b168352806153f560208401614b41565b166020840152505050565b6020815260006154108384614e8a565b60e0602084015261542561010084018261539e565b90506154346020850185614e8a565b601f198085840301604086015261544b838361539e565b925061545960408701614b41565b91506001600160401b0380831660608701526154786060880188614d4a565b93508287860301608088015261548f858583614c69565b9450506154a260a08701608089016153d3565b806154af60c08901614b41565b1660e08701525050508091505092915050565b6000602082840312156154d457600080fd5b5051919050565b6000602082840312156154ed57600080fd5b61376182614b41565b6001600160401b038481168252608082019061551560208401866153d3565b808416606084015250949350505050565b60006001600160401b0380831681851680830382111561555657634e487b7160e01b600052601160045260246000fd5b01949350505050565b600061556b8283614e8a565b60e0845261557c60e085018261539e565b905061558b6020840184614e8a565b848203602086015261559d828261539e565b9150506155ac60408401614b41565b6001600160401b0380821660408701526155c96060860186614d4a565b925086840360608801526155de848483614c69565b9350506155f160808701608087016153d3565b806155fe60c08701614b41565b1660c087015250508091505092915050565b602081526000613761602083018461555f565b60006020828403121561563557600080fd5b81516001600160401b038082111561564c57600080fd5b908301906040828603121561566057600080fd5b60405160408101818110838211171561567b5761567b614713565b60405282516156898161429e565b815260208301518281111561569d57600080fd5b6156a987828601614ce6565b60208301525095945050505050565b8051151582526000602082015160406020850152612f2160408501826145c0565b6001600160401b0383168152604060208201526000612f2160408301846156b8565b601f8211156115ce57600081815260208120601f850160051c810160208610156157225750805b601f850160051c820191505b818110156136485782815560010161572e565b81516001600160401b0381111561575a5761575a614713565b61576e81615768845461534a565b846156fb565b602080601f8311600181146157a3576000841561578b5750858301515b600019600386901b1c1916600185901b178555613648565b600085815260208120601f198616915b828110156157d2578886015182559484019460019091019084016157b3565b50858210156157f05787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b83815260606020820152600061581960608301856145c0565b9050826040830152949350505050565b60008060006060848603121561583e57600080fd5b8351925060208401519150604084015161486c8161429e565b60008383855260208086019550808560051b8301018460005b878110156158aa57848303601f1901895261588b8288614d4a565b615896858284614c69565b9a86019a9450505090830190600101615870565b5090979650505050505050565b6080815260006158c78687614e42565b606060808501526158dc60e085018284615857565b915050602087013560a08401526001600160401b036158fd60408901614b41565b1660c084015282810360208401526159158687614e42565b60808352615927608084018284615857565b9150506159376020880188614e42565b838303602085015261594a838284615857565b925050506040870135604083015260608701356060830152809250505083604083015282606083015295945050505050565b6000806040838503121561598f57600080fd5b82519150602083015161495b8161429e565b6001600160401b038311156159b8576159b8614713565b6159cc836159c6835461534a565b836156fb565b6000601f841160018114615a0057600085156159e85750838201355b600019600387901b1c1916600186901b178355615a5a565b600083815260209020601f19861690835b82811015615a315786850135825560209485019460019092019101615a11565b5086821015615a4e5760001960f88860031b161c19848701351681555b505060018560011b0183555b5050505050565b602081526000612f21602083018486614c69565b604081526000615a88604083018561555f565b828103602084015261470a81856156b8565b8183823760009101908152919050565b606081526000615abe606083018688614c69565b6001600160401b039485166020840152929093166040909101529392505050565b604081526000615af260408301856145c0565b90508260208301529392505050565b615b0b8188614d3a565b60006020615b1b81840189614602565b60c06040840152615b2f60c08401886145c0565b8381036060850152865180825282820190600581901b83018401848a0160005b83811015615b7d57601f19868403018552615b6b8383516145c0565b94870194925090860190600101615b4f565b50508681036080880152615b91818a6145c0565b955050505050508260a0830152979650505050505050565b60008251615394818460208701614594565b60008085851115615bcb57600080fd5b83861115615bd857600080fd5b5050820193919092039150565b600060208284031215615bf757600080fd5b815161376181614434565b600082615c1f57634e487b7160e01b600052601260045260246000fd5b500490565b60006001600160401b0380841115615c3e57615c3e614713565b8360051b6020615c4f818301614729565b868152918501918181019036841115615c6757600080fd5b865b84811015615c9b57803586811115615c815760008081fd5b615c8d36828b016148f5565b845250918301918301615c69565b50979650505050505050565b6020808252602b908201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960408201526a6e697469616c697a696e6760a81b60608201526080019056fe360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc416464726573733a206c6f772d6c6576656c2064656c65676174652063616c6c206661696c6564a264697066735822122046a1de6eec515cb64065849fa7275b14dbe64e214f04b50b21f8374313466ab564736f6c634300080f0033"; + "0x60a0604052306080523480156200001557600080fd5b506200002062000026565b620000e7565b600054610100900460ff1615620000935760405162461bcd60e51b815260206004820152602760248201527f496e697469616c697a61626c653a20636f6e747261637420697320696e697469604482015266616c697a696e6760c81b606482015260840160405180910390fd5b60005460ff90811614620000e5576000805460ff191660ff9081179091556040519081527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b565b608051615ec46200011f60003960008181610c5201528181610c9b0152818161149c015281816114dc015261156f0152615ec46000f3fe6080604052600436106101c25760003560e01c8063715018a6116100f7578063940265cb11610095578063c3e1155c11610064578063c3e1155c14610538578063e30c397814610570578063f2fde38b1461058e578063f90b8e96146105ae57600080fd5b8063940265cb146104a35780639f59ae71146104d8578063ba5a4d25146104f8578063c00fa7c01461051857600080fd5b80637ab4339d116100d15780637ab4339d1461040857806381bc079b146104285780638da5cb5b146104485780638dd34bb41461046657600080fd5b8063715018a6146103bc5780637774a6d3146103d157806379ba5097146103f357600080fd5b8063478222c211610164578063556d51781161013e578063556d51781461033c5780635d7adf961461035c5780636050b5f31461037c5780636b67055e1461039c57600080fd5b8063478222c2146102cd5780634f1ef2861461030657806352d1902d1461031957600080fd5b80633659cfe6116101a05780633659cfe614610240578063418925b71461026057806342852d2414610280578063429446b6146102ad57600080fd5b80631eb9fc86146101c75780632494546b146101e95780632bf5d19d14610220575b600080fd5b3480156101d357600080fd5b506101e76101e236600461441e565b6105ce565b005b3480156101f557600080fd5b5060fa546102069063ffffffff1681565b60405163ffffffff90911681526020015b60405180910390f35b34801561022c57600080fd5b506101e761023b3660046144f4565b610958565b34801561024c57600080fd5b506101e761025b36600461459e565b610c48565b34801561026c57600080fd5b506101e761027b3660046145fc565b610d30565b34801561028c57600080fd5b506102a061029b3660046146bd565b610e90565b60405161021791906147c0565b3480156102b957600080fd5b506101e76102c836600461441e565b6111e8565b3480156102d957600080fd5b50610105546102ee906001600160a01b031681565b6040516001600160a01b039091168152602001610217565b6101e7610314366004614913565b611492565b34801561032557600080fd5b5061032e611562565b604051908152602001610217565b34801561034857600080fd5b506101e7610357366004614976565b611615565b34801561036857600080fd5b506101e76103773660046149de565b61162d565b34801561038857600080fd5b506101e76103973660046149de565b61193d565b3480156103a857600080fd5b506101e76103b73660046149de565b61194f565b3480156103c857600080fd5b506101e7612041565b3480156103dd57600080fd5b506103e6612055565b6040516102179190614a37565b3480156103ff57600080fd5b506101e76120e3565b34801561041457600080fd5b506101e7610423366004614a6a565b61215a565b34801561043457600080fd5b506101e7610443366004614abb565b6122e3565b34801561045457600080fd5b506033546001600160a01b03166102ee565b34801561047257600080fd5b50610486610481366004614ad4565b612731565b604080519384526020840192909252151590820152606001610217565b3480156104af57600080fd5b506104c36104be366004614b1f565b6127f2565b60408051928352901515602083015201610217565b3480156104e457600080fd5b506101e76104f3366004614bc8565b6128b6565b34801561050457600080fd5b506101e7610513366004614c09565b61290b565b34801561052457600080fd5b506101e7610533366004614bc8565b612e47565b34801561054457600080fd5b50610558610553366004614cad565b612e83565b6040516001600160401b039091168152602001610217565b34801561057c57600080fd5b506065546001600160a01b03166102ee565b34801561059a57600080fd5b506101e76105a936600461459e565b613009565b3480156105ba57600080fd5b506101e76105c9366004614d0a565b61307a565b6105d661368f565b60028510156105f85760405163af0ba14d60e01b815260040160405180910390fd5b61061e6106058880614d62565b60208a01356106148680614d62565b87602001356136e8565b6106808686600081811061063457610634614da8565b90506020028101906106469190614d62565b8080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525061372b92505050565b6001600160a01b031663cb535ab58273__$d825222459c46c14afb2efe0967c30e98d$__634f9b0fb36106b38c80614d62565b8d602001356040518463ffffffff1660e01b81526004016106d693929190614de7565b600060405180830381865af41580156106f3573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f1916820160405261071b9190810190614e5b565b73__$d825222459c46c14afb2efe0967c30e98d$__6325e0dd0e60078a8e80604001906107489190614d62565b8f8f6107548e80614d62565b8f602001356040518a63ffffffff1660e01b815260040161077d99989796959493929190614ee4565b600060405180830381865af415801561079a573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526107c29190810190614e5b565b6040518463ffffffff1660e01b81526004016107e093929190614ffe565b600060405180830381600087803b1580156107fa57600080fd5b505af115801561080e573d6000803e3d6000fd5b5060009250610829915061082490508980614d62565b6137aa565b905060008061089b836301d08fc560e71b6020808e01359089013561085160408b018b614d62565b60405160240161086494939291906151ac565b60408051601f198184030181529190526020810180516001600160e01b03166001600160e01b031990931692909217909152613844565b915091508115610900576108b4838b8b8b8b8b8b613930565b826001600160a01b03167fcf8be9ab2b5edf8beb2c45abe8e0cc7646318ac19f6c3164ba2e19e93a8a32af8b602001356040516108f391815260200190565b60405180910390a2610942565b826001600160a01b03167f971a4433f5bff5f011728a4123aeeca4b5275ac20b013cf276e65510491ac26f826040516109399190614a37565b60405180910390a25b50505061094f6001609755565b50505050505050565b61096061368f565b60028310156109825760405163af0ba14d60e01b815260040160405180910390fd5b61098f6106058880614d62565b6109a58484600081811061063457610634614da8565b6001600160a01b031663cb535ab58273__$d825222459c46c14afb2efe0967c30e98d$__634f9b0fb36109d88c80614d62565b8d602001356040518463ffffffff1660e01b81526004016109fb93929190614de7565b600060405180830381865af4158015610a18573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052610a409190810190614e5b565b73__$d825222459c46c14afb2efe0967c30e98d$__6325e0dd0e60068c8e8060400190610a6d9190614d62565b8d8d610a798e80614d62565b8f602001356040518a63ffffffff1660e01b8152600401610aa299989796959493929190614ee4565b600060405180830381865af4158015610abf573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052610ae79190810190614e5b565b6040518463ffffffff1660e01b8152600401610b0593929190614ffe565b600060405180830381600087803b158015610b1f57600080fd5b505af1158015610b33573d6000803e3d6000fd5b5060009250610b49915061082490508980614d62565b9050600080610b9f83634bdb559760e01b8b8a8a8f602001358b8060000190610b729190614d62565b8d602001358e8060400190610b879190614d62565b6040516024016108649998979695949392919061521c565b915091508115610c0f57826001600160a01b03167ff910705a7a768eb5958f281a5f84cae8bffc5dd811ca5cd303dda140a423698c82806020019051810190610be89190615281565b8b8b8b8b610bf68c80614d62565b8d602001356040516108f39897969594939291906152c9565b826001600160a01b03167f9e2fe55a3b54b57f82334c273f8d048cd7f05ad19c16cf334276a8c1fec4b6fd826040516109399190614a37565b6001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000163003610c995760405162461bcd60e51b8152600401610c909061532f565b60405180910390fd5b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316610ce2600080516020615e48833981519152546001600160a01b031690565b6001600160a01b031614610d085760405162461bcd60e51b8152600401610c909061537b565b610d1181613bd0565b60408051600080825260208201909252610d2d91839190613bd8565b50565b610d3861368f565b6002831080610d45575080155b15610d6357604051637d6ba8a560e01b815260040160405180910390fd5b600086858585858d8d604051602001610d8297969594939291906153c7565b6040516020818303038152906040529050600080610dc833637a9ccc4b60e01b85604051602001610db492919061541e565b604051602081830303815290604052613844565b915091508115610e3757336001600160a01b03167f20fd8a5856711b18d00def4aa6abafbe00ce6d60795e015cc1cad35eb9b4635982806020019051810190610e119190615281565b8b8b8b8b8b8b604051610e2a979695949392919061544f565b60405180910390a2610e79565b336001600160a01b03167f69c1283cce89382f0f9ddf19b7c4f05b4d9b3c30c84fc148b1ec800284be58d582604051610e709190614a37565b60405180910390a25b505050610e866001609755565b5050505050505050565b610ed66040805160e08101909152606081526020810160008152602001600015158152602001606081526020016060815260200160008019168152602001606081525090565b6001600160a01b038316600090815260fb6020908152604080832085845290915290819020815160e08101909252805482908290610f139061549f565b80601f0160208091040260200160405190810160405280929190818152602001828054610f3f9061549f565b8015610f8c5780601f10610f6157610100808354040283529160200191610f8c565b820191906000526020600020905b815481529060010190602001808311610f6f57829003601f168201915b5050509183525050600182015460209091019060ff166002811115610fb357610fb3614741565b6002811115610fc457610fc4614741565b81526001820154610100900460ff161515602080830191909152600283018054604080518285028101850182528281529401939260009084015b828210156110aa57838290600052602060002001805461101d9061549f565b80601f01602080910402602001604051908101604052809291908181526020018280546110499061549f565b80156110965780601f1061106b57610100808354040283529160200191611096565b820191906000526020600020905b81548152906001019060200180831161107957829003601f168201915b505050505081526020019060010190610ffe565b5050505081526020016003820180546110c29061549f565b80601f01602080910402602001604051908101604052809291908181526020018280546110ee9061549f565b801561113b5780601f106111105761010080835404028352916020019161113b565b820191906000526020600020905b81548152906001019060200180831161111e57829003601f168201915b505050505081526020016004820154815260200160058201805461115e9061549f565b80601f016020809104026020016040519081016040528092919081815260200182805461118a9061549f565b80156111d75780601f106111ac576101008083540402835291602001916111d7565b820191906000526020600020905b8154815290600101906020018083116111ba57829003601f168201915b505050505081525050905092915050565b6111f061368f565b60028510156112125760405163af0ba14d60e01b815260040160405180910390fd5b61121f6106058880614d62565b6112358686600081811061063457610634614da8565b6001600160a01b031663cb535ab58273__$d825222459c46c14afb2efe0967c30e98d$__634f9b0fb36112688c80614d62565b8d602001356040518463ffffffff1660e01b815260040161128b93929190614de7565b600060405180830381865af41580156112a8573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526112d09190810190614e5b565b73__$d825222459c46c14afb2efe0967c30e98d$__6325e0dd0e60088a8e80604001906112fd9190614d62565b8f8f6113098e80614d62565b8f602001356040518a63ffffffff1660e01b815260040161133299989796959493929190614ee4565b600060405180830381865af415801561134f573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526113779190810190614e5b565b6040518463ffffffff1660e01b815260040161139593929190614ffe565b600060405180830381600087803b1580156113af57600080fd5b505af11580156113c3573d6000803e3d6000fd5b50600092506113d9915061082490508980614d62565b90506000806114018363fad28a2460e01b8c6020013560405160240161086491815260200190565b9150915081156114595761141a838b8b8b8b8b8b613930565b826001600160a01b03167fe80f571f70f7cabf9d7ac60ece08421be374117776c311c327a083ca398f802f8b602001356040516108f391815260200190565b826001600160a01b03167ff6a58ef30f66943749e8c29c661c84da143a1c8ed017f5faa92b509e0000875a826040516109399190614a37565b6001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001630036114da5760405162461bcd60e51b8152600401610c909061532f565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316611523600080516020615e48833981519152546001600160a01b031690565b6001600160a01b0316146115495760405162461bcd60e51b8152600401610c909061537b565b61155282613bd0565b61155e82826001613bd8565b5050565b6000306001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016146116025760405162461bcd60e51b815260206004820152603860248201527f555550535570677261646561626c653a206d757374206e6f742062652063616c60448201527f6c6564207468726f7567682064656c656761746563616c6c00000000000000006064820152608401610c90565b50600080516020615e4883398151915290565b61161d613d43565b611628838383613d9d565b505050565b61163561368f565b61164e61164560208401846154d3565b60200135613e38565b6001600160a01b031663cb535ab58273__$d825222459c46c14afb2efe0967c30e98d$__634b5728d1866040518263ffffffff1660e01b81526004016116949190615555565b600060405180830381865af41580156116b1573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526116d99190810190614e5b565b604051637e4794ed60e11b815273__$d825222459c46c14afb2efe0967c30e98d$__9063fc8f29da90611710908990600401615555565b602060405180830381865af415801561172d573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906117519190615617565b60405160200161176391815260200190565b6040516020818303038152906040526040518463ffffffff1660e01b815260040161179093929190614ffe565b600060405180830381600087803b1580156117aa57600080fd5b505af11580156117be573d6000803e3d6000fd5b5050505060006117e18380602001906117d791906154d3565b6108249080614d62565b6001600160a01b03811660009081526101006020908152604082209293509091908290611810908701876154d3565b60200135815260200190815260200160002060008560400160208101906118379190615630565b6001600160401b0316815260208101919091526040016000205460ff16905080156118755760405163066c745760e01b815260040160405180910390fd5b61189d61188860e0860160c08701615630565b61189860c0870160a08801615630565b613f03565b6118ba576040516312c9cc9f60e01b815260040160405180910390fd5b6118c760208501856154d3565b602001356001600160a01b0383167fedbcd9eeb09d85c3ea1b5bf002c04478059cb261cab82c903885cefccae374bc6119066060880160408901615630565b6080880161191a60e08a0160c08b01615630565b6040516119299392919061564b565b60405180910390a3505061155e6001609755565b61194561368f565b61155e6001609755565b61195761368f565b61196761164560208401846154d3565b6001600160a01b031663cb535ab58273__$d825222459c46c14afb2efe0967c30e98d$__634b5728d1866040518263ffffffff1660e01b81526004016119ad9190615555565b600060405180830381865af41580156119ca573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526119f29190810190614e5b565b604051637e4794ed60e11b815273__$d825222459c46c14afb2efe0967c30e98d$__9063fc8f29da90611a29908990600401615555565b602060405180830381865af4158015611a46573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611a6a9190615617565b604051602001611a7c91815260200190565b6040516020818303038152906040526040518463ffffffff1660e01b8152600401611aa993929190614ffe565b600060405180830381600087803b158015611ac357600080fd5b505af1158015611ad7573d6000803e3d6000fd5b505050506000611af08380602001906117d791906154d3565b6001600160a01b03811660009081526101006020908152604082209293509091908290611b1f908701876154d3565b6020013581526020019081526020016000206000856040016020810190611b469190615630565b6001600160401b0316815260208101919091526040016000205460ff1690508015611b845760405163066c745760e01b815260040160405180910390fd5b6001600160a01b03821660009081526101006020908152604082206001929091611bb0908801886154d3565b6020013581526020019081526020016000206000866040016020810190611bd79190615630565b6001600160401b031681526020810191909152604001600020805460ff191691151591909117905560026001600160a01b038316600090815260fb6020908152604082209190611c29908801886154d3565b60209081013582528101919091526040016000206001015460ff166002811115611c5557611c55614741565b03611d54576001600160a01b038216600090815260fd6020908152604082209190611c82908701876154d3565b60209081013582528101919091526040908101600020546001600160401b031690611cb39060608701908701615630565b6001600160401b031614611cda5760405163362a414d60e01b815260040160405180910390fd5b611cea6060850160408601615630565b611cf590600161567b565b6001600160a01b038316600090815260fd6020908152604082209190611d1d908801886154d3565b60200135815260200190815260200160002060006101000a8154816001600160401b0302191690836001600160401b031602179055505b611d6160208501856154d3565b602001356001600160a01b0383167fde5b57e6566d68a30b0979431df3d5df6db3b9aa89f8820f595b9315bf86d067611da06060880160408901615630565b6040516001600160401b03909116815260200160405180910390a3611dce61188860e0860160c08701615630565b15611e5157611de060208501856154d3565b602001356001600160a01b0383167fedbcd9eeb09d85c3ea1b5bf002c04478059cb261cab82c903885cefccae374bc611e1f6060880160408901615630565b60808801611e3360e08a0160c08b01615630565b604051611e429392919061564b565b60405180910390a35050611945565b604080518082019091526000815260606020820152600080611e8685634dcc0aa660e01b896040516024016108649190615765565b915091508115611eab5780806020019051810190611ea49190615778565b9250611ec3565b60408051808201909152600081526020810182905292505b6001600160a01b0385166000908152610101602090815260408220908290611eed908b018b6154d3565b6020013581526020019081526020016000206000896040016020810190611f149190615630565b6001600160401b0316815260208101919091526040016000205460ff1690508015611f5257604051637aa549d360e01b815260040160405180910390fd5b6001600160a01b03861660009081526101016020908152604082206001929091611f7e908c018c6154d3565b60200135815260200190815260200160002060008a6040016020810190611fa59190615630565b6001600160401b03168152602080820192909252604001600020805460ff191692151592909217909155611fdb908901896154d3565b602001356001600160a01b0387167fa32e6f42b1d63fb83ad73b009a6dbb9413d1da02e95b1bb08f081815eea8db2061201a60608c0160408d01615630565b8760405161202992919061582e565b60405180910390a350505050505061155e6001609755565b612049613d43565b6120536000613f51565b565b60f980546120629061549f565b80601f016020809104026020016040519081016040528092919081815260200182805461208e9061549f565b80156120db5780601f106120b0576101008083540402835291602001916120db565b820191906000526020600020905b8154815290600101906020018083116120be57829003601f168201915b505050505081565b60655433906001600160a01b031681146121515760405162461bcd60e51b815260206004820152602960248201527f4f776e61626c6532537465703a2063616c6c6572206973206e6f7420746865206044820152683732bb9037bbb732b960b91b6064820152608401610c90565b610d2d81613f51565b600054600290610100900460ff1615801561217c575060005460ff8083169116105b6121df5760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201526d191e481a5b9a5d1a585b1a5e995960921b6064820152608401610c90565b6000805461ffff191660ff8316176101001790556121fb61368f565b825160000361221d5760405163e8cf362360e01b815260040160405180910390fd5b6001600160a01b0382166122445760405163cbdd34cf60e01b815260040160405180910390fd5b61224c613f6a565b612254613f99565b60f96122608482615896565b50825160fa805463ffffffff191663ffffffff90921691909117905561010580546001600160a01b0319166001600160a01b03841617905560016097556000805461ff001916905560405160ff821681527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a1505050565b6122eb61368f565b33600090815260fb60209081526040808320848452909152808220815160e0810190925280548290829061231e9061549f565b80601f016020809104026020016040519081016040528092919081815260200182805461234a9061549f565b80156123975780601f1061236c57610100808354040283529160200191612397565b820191906000526020600020905b81548152906001019060200180831161237a57829003601f168201915b5050509183525050600182015460209091019060ff1660028111156123be576123be614741565b60028111156123cf576123cf614741565b81526001820154610100900460ff161515602080830191909152600283018054604080518285028101850182528281529401939260009084015b828210156124b55783829060005260206000200180546124289061549f565b80601f01602080910402602001604051908101604052809291908181526020018280546124549061549f565b80156124a15780601f10612476576101008083540402835291602001916124a1565b820191906000526020600020905b81548152906001019060200180831161248457829003601f168201915b505050505081526020019060010190612409565b5050505081526020016003820180546124cd9061549f565b80601f01602080910402602001604051908101604052809291908181526020018280546124f99061549f565b80156125465780601f1061251b57610100808354040283529160200191612546565b820191906000526020600020905b81548152906001019060200180831161252957829003601f168201915b50505050508152602001600482015481526020016005820180546125699061549f565b80601f01602080910402602001604051908101604052809291908181526020018280546125959061549f565b80156125e25780601f106125b7576101008083540402835291602001916125e2565b820191906000526020600020905b8154815290600101906020018083116125c557829003601f168201915b5050509190925250505060a081015190915061261157604051631109bfb360e31b815260040160405180910390fd5b60008061263d33631eb7dd5e60e01b8686608001518760a0015160405160240161086493929190615955565b33600090815260fb60209081526040808320898452909152812092945090925061266782826142a8565b60018201805461ffff191690556126826002830160006142e2565b6126906003830160006142a8565b60048201600090556005820160006126a891906142a8565b505081156126e257604051849033907f21372e37743553ba8e5f61239803174a827c7732d53ec8adcb76c6b3bb2c13f190600090a3612724565b336001600160a01b03167fb1be59c1bcd39c54c7132a8e0d321af5db427575ddb3265560d8862804f4381b8260405161271b9190614a37565b60405180910390a25b505050610d2d6001609755565b600080600061277585858080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525061372b92505050565b6001600160a01b03166344c9af28876040518263ffffffff1660e01b81526004016127a291815260200190565b606060405180830381865afa1580156127bf573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906127e3919061597e565b92509250925093509350939050565b60008061283484848080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525061372b92505050565b6001600160a01b0316635922f420898989896040518563ffffffff1660e01b81526004016128659493929190615a0c565b60408051808303816000875af1158015612883573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906128a79190615ad1565b91509150965096945050505050565b6128be613d43565b60008190036128e05760405163e8cf362360e01b815260040160405180910390fd5b60f96128ed828483615af6565b5060fa805463ffffffff191663ffffffff9290921691909117905550565b61291361368f565b60006129226117d786806154d3565b905061293161164586806154d3565b6001600160a01b031663cb535ab58373__$d825222459c46c14afb2efe0967c30e98d$__6311a7a373896040518263ffffffff1660e01b81526004016129779190615555565b600060405180830381865af4158015612994573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526129bc9190810190614e5b565b6040516374e9704560e01b815273__$d825222459c46c14afb2efe0967c30e98d$__906374e97045906129f5908b908b90600401615bb6565b602060405180830381865af4158015612a12573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612a369190615617565b604051602001612a4891815260200190565b6040516020818303038152906040526040518463ffffffff1660e01b8152600401612a7593929190614ffe565b600060405180830381600087803b158015612a8f57600080fd5b505af1158015612aa3573d6000803e3d6000fd5b505050506001600160a01b038116600090815260ff6020526040812081612aca88806154d3565b6020013581526020019081526020016000206000876040016020810190612af19190615630565b6001600160401b0316815260208101919091526040016000205460ff16905080612b2e5760405163ca89746b60e01b815260040160405180910390fd5b600080612bcd84637e1d42b560e01b8a73__$d825222459c46c14afb2efe0967c30e98d$__63360b8cd78c8c6040518363ffffffff1660e01b8152600401612b77929190615bb6565b600060405180830381865af4158015612b94573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052612bbc9190810190615778565b604051602401610864929190615bca565b915091508115612df15760026001600160a01b038516600090815260fb6020526040812090612bfc8b806154d3565b60209081013582528101919091526040016000206001015460ff166002811115612c2857612c28614741565b03612d1d576001600160a01b038416600090815260fe6020526040812090612c508a806154d3565b60209081013582528101919091526040908101600020546001600160401b031690612c819060608b01908b01615630565b6001600160401b031614612ca85760405163362a414d60e01b815260040160405180910390fd5b612cb86060890160408a01615630565b612cc390600161567b565b6001600160a01b038516600090815260fe6020526040812090612ce68b806154d3565b60200135815260200190815260200160002060006101000a8154816001600160401b0302191690836001600160401b031602179055505b6001600160a01b038416600090815260ff6020526040812090612d408a806154d3565b6020013581526020019081526020016000206000896040016020810190612d679190615630565b6001600160401b031681526020810191909152604001600020805460ff19169055612d9288806154d3565b602001356001600160a01b0385167fe46f6591236abe528fe47a3b281fb002524dadd3e62b1f317ed285d07273c3b1612dd160608c0160408d01615630565b6040516001600160401b03909116815260200160405180910390a3612e33565b836001600160a01b03167f625eea143c9dae6915c809da47016c22d9cd006c3ace7c345c5cbcf57d3aefbc82604051612e2a9190614a37565b60405180910390a25b50505050612e416001609755565b50505050565b612e4f613d43565b6101048282604051612e62929190615bef565b90815260405190819003602001902080546001600160a01b03191690555050565b6000612e8d61368f565b33600090815260fb60209081526040808320888452909152902060040154612ec857604051631109bfb360e31b815260040160405180910390fd5b42826001600160401b031611612ef15760405163551ea0fb60e11b815260040160405180910390fd5b5033600090815260fc602090815260408083208784529091528120546001600160401b031690819003612f3757604051631e510bfb60e21b815260040160405180910390fd5b33600090815260ff6020908152604080832088845282528083206001600160401b03851684529091529020805460ff19166001908117909155612f7b90829061567b565b33600081815260fc602090815260408083208a845290915290819020805467ffffffffffffffff19166001600160401b03949094169390931790925590518691907fb5bff96e18da044e4e34510d16df9053b9f1920f6a960732e5aaf22fe9b8013690612fef908890889087908990615bff565b60405180910390a36130016001609755565b949350505050565b613011613d43565b606580546001600160a01b0383166001600160a01b031990911681179091556130426033546001600160a01b031690565b6001600160a01b03167f38d16b8cac22d99fc7c124b9cd0de2d3fa1faef420bfe791d8c362d765e2270060405160405180910390a350565b61308261368f565b6001600160a01b0383166130a95760405163cbdd34cf60e01b815260040160405180910390fd5b6001600160a01b038316600090815260fb60209081526040808320858452909152808220815160e081019092528054829082906130e59061549f565b80601f01602080910402602001604051908101604052809291908181526020018280546131119061549f565b801561315e5780601f106131335761010080835404028352916020019161315e565b820191906000526020600020905b81548152906001019060200180831161314157829003601f168201915b5050509183525050600182015460209091019060ff16600281111561318557613185614741565b600281111561319657613196614741565b81526001820154610100900460ff161515602080830191909152600283018054604080518285028101850182528281529401939260009084015b8282101561327c5783829060005260206000200180546131ef9061549f565b80601f016020809104026020016040519081016040528092919081815260200182805461321b9061549f565b80156132685780601f1061323d57610100808354040283529160200191613268565b820191906000526020600020905b81548152906001019060200180831161324b57829003601f168201915b5050505050815260200190600101906131d0565b5050505081526020016003820180546132949061549f565b80601f01602080910402602001604051908101604052809291908181526020018280546132c09061549f565b801561330d5780601f106132e25761010080835404028352916020019161330d565b820191906000526020600020905b8154815290600101906020018083116132f057829003601f168201915b50505050508152602001600482015481526020016005820180546133309061549f565b80601f016020809104026020016040519081016040528092919081815260200182805461335c9061549f565b80156133a95780601f1061337e576101008083540402835291602001916133a9565b820191906000526020600020905b81548152906001019060200180831161338c57829003601f168201915b5050509190925250505060a08101519091506133d857604051634d93b09d60e11b815260040160405180910390fd5b6133e183613e38565b6001600160a01b031663cb535ab58373__$d825222459c46c14afb2efe0967c30e98d$__636f6547268560c00151886040518363ffffffff1660e01b815260040161342d929190615c34565b600060405180830381865af415801561344a573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526134729190810190614e5b565b602085015185516060870151608088015160a0890151604051631f621e1560e31b815273__$d825222459c46c14afb2efe0967c30e98d$__9563fb10f0a8956134c8956009959294919390929190600401615c56565b600060405180830381865af41580156134e5573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f1916820160405261350d9190810190614e5b565b6040518463ffffffff1660e01b815260040161352b93929190614ffe565b600060405180830381600087803b15801561354557600080fd5b505af1158015613559573d6000803e3d6000fd5b5050505060008061358986633f9fdbe460e01b8786608001518760a0015160405160240161086493929190615955565b6001600160a01b038816600090815260fb602090815260408083208a845290915281209294509092506135bc82826142a8565b60018201805461ffff191690556135d76002830160006142e2565b6135e56003830160006142a8565b60048201600090556005820160006135fd91906142a8565b505081156136405760405185906001600160a01b038816907f5f010dbbd6bf46aec8131c5456301a75cd688d3cca9bc8380c9e26301be2072990600090a3613682565b856001600160a01b03167fc9d36d7a317cb116925d5cb66f0069fe825822fe23e9cf3f421c38cf444caa30826040516136799190614a37565b60405180910390a25b5050506116286001609755565b6002609754036136e15760405162461bcd60e51b815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c006044820152606401610c90565b6002609755565b8415806136f3575081155b806136fc575083155b80613705575080155b1561372357604051637d6ba8a560e01b815260040160405180910390fd5b505050505050565b600081516000036137595760405163524e171160e01b81526020600482015260006024820152604401610c90565b6101048260405161376a9190615cfe565b908152604051908190036020019020546001600160a01b03169050806137a5578160405163036c4d8760e11b8152600401610c909190614a37565b919050565b60fa5460009073__$f61eb90c6f674e787d51c07f105fa231e2$__9063a1ef9a98906137df90859063ffffffff168188615d10565b6040518363ffffffff1660e01b81526004016137fc929190615bb6565b602060405180830381865af4158015613819573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061383d9190615d3a565b9392505050565b600060606001600160a01b0384163b61388c57505060408051808201909152601481527318d85b1b081d1bc81b9bdb8b58dbdb9d1c9858dd60621b6020820152600090613929565b60005a9050846001600160a01b0316846040516138a99190615cfe565b6000604051808303816000865af19150503d80600081146138e6576040519150601f19603f3d011682016040523d82523d6000602084013e6138eb565b606091505b509093509150821580156139095750613905604082615d57565b5a11155b156139275760405163b08ede0960e01b815260040160405180910390fd5b505b9250929050565b6040518060e0016040528087806040019061394b9190614d62565b8080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525050509082525060200184600281111561399757613997614741565b815283151560208201526040016139ae8688615d79565b81526020016139bd8380614d62565b8080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525050509082525060208381013590820152604001613a0b8880614d62565b8080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201829052509390945250506001600160a01b038a16815260fb602090815260408083208b8301358452909152902082519091508190613a759082615896565b50602082015160018083018054909160ff1990911690836002811115613a9d57613a9d614741565b021790555060408201516001820180549115156101000261ff001990921691909117905560608201518051613adc916002840191602090910190614300565b5060808201516003820190613af19082615896565b5060a0820151600482015560c08201516005820190613b109082615896565b5050506001600160a01b038716600081815260fc602090815260408083208a8301358085529083528184208054600167ffffffffffffffff19918216811790925586865260fd85528386208387528552838620805482168317905595855260fe8452828520918552925282208054909316179091558590859081613b9657613b96614da8565b9050602002810190613ba89190614d62565b60208089013560009081526101039091526040902091610e86919083615af6565b6001609755565b610d2d613d43565b7f4910fdfa16fed3260ed0e7147f7cc6da11a60208b5b9406d12a635614ffd91435460ff1615613c0b5761162883613fc8565b826001600160a01b03166352d1902d6040518163ffffffff1660e01b8152600401602060405180830381865afa925050508015613c65575060408051601f3d908101601f19168201909252613c6291810190615617565b60015b613cc85760405162461bcd60e51b815260206004820152602e60248201527f45524331393637557067726164653a206e657720696d706c656d656e7461746960448201526d6f6e206973206e6f74205555505360901b6064820152608401610c90565b600080516020615e488339815191528114613d375760405162461bcd60e51b815260206004820152602960248201527f45524331393637557067726164653a20756e737570706f727465642070726f786044820152681a58589b195555525160ba1b6064820152608401610c90565b50611628838383614064565b6033546001600160a01b031633146120535760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610c90565b6000829003613dc95760405163524e171160e01b81526020600482015260006024820152604401610c90565b6001600160a01b038116613df05760405163cbdd34cf60e01b815260040160405180910390fd5b806101048484604051613e04929190615bef565b90815260405190819003602001902080546001600160a01b03929092166001600160a01b0319909216919091179055505050565b6000818152610103602052604081208054829190613e559061549f565b80601f0160208091040260200160405190810160405280929190818152602001828054613e819061549f565b8015613ece5780601f10613ea357610100808354040283529160200191613ece565b820191906000526020600020905b815481529060010190602001808311613eb157829003601f168201915b505050505090508051600003613efa576040516363b99a9d60e11b815260048101849052602401610c90565b61383d8161372b565b60006001600160401b03831615801590613f265750826001600160401b03164210155b8061383d57506001600160401b0382161580159061383d5750506001600160401b0316431015919050565b606580546001600160a01b0319169055610d2d81614089565b600054610100900460ff16613f915760405162461bcd60e51b8152600401610c9090615dfc565b6120536140db565b600054610100900460ff16613fc05760405162461bcd60e51b8152600401610c9090615dfc565b61205361410b565b6001600160a01b0381163b6140355760405162461bcd60e51b815260206004820152602d60248201527f455243313936373a206e657720696d706c656d656e746174696f6e206973206e60448201526c1bdd08184818dbdb9d1c9858dd609a1b6064820152608401610c90565b600080516020615e4883398151915280546001600160a01b0319166001600160a01b0392909216919091179055565b61406d83614132565b60008251118061407a5750805b1561162857612e418383614172565b603380546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b600054610100900460ff166141025760405162461bcd60e51b8152600401610c9090615dfc565b61205333613f51565b600054610100900460ff16613bc95760405162461bcd60e51b8152600401610c9090615dfc565b61413b81613fc8565b6040516001600160a01b038216907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b90600090a250565b606061383d8383604051806060016040528060278152602001615e68602791396060600080856001600160a01b0316856040516141af9190615cfe565b600060405180830381855af49150503d80600081146141ea576040519150601f19603f3d011682016040523d82523d6000602084013e6141ef565b606091505b50915091506142008683838761420a565b9695505050505050565b60608315614279578251600003614272576001600160a01b0385163b6142725760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e74726163740000006044820152606401610c90565b5081613001565b613001838381511561428e5781518083602001fd5b8060405162461bcd60e51b8152600401610c909190614a37565b5080546142b49061549f565b6000825580601f106142c4575050565b601f016020900490600052602060002090810190610d2d9190614356565b5080546000825590600052602060002090810190610d2d919061436b565b828054828255906000526020600020908101928215614346579160200282015b8281111561434657825182906143369082615896565b5091602001919060010190614320565b5061435292915061436b565b5090565b5b808211156143525760008155600101614357565b8082111561435257600061437f82826142a8565b5060010161436b565b60006060828403121561439a57600080fd5b50919050565b60008083601f8401126143b257600080fd5b5081356001600160401b038111156143c957600080fd5b6020830191508360208260051b850101111561392957600080fd5b8035600381106137a557600080fd5b8015158114610d2d57600080fd5b80356137a5816143f3565b60006040828403121561439a57600080fd5b600080600080600080600060c0888a03121561443957600080fd5b87356001600160401b038082111561445057600080fd5b61445c8b838c01614388565b985060208a013591508082111561447257600080fd5b61447e8b838c016143a0565b909850965086915061449260408b016143e4565b95506144a060608b01614401565b945060808a01359150808211156144b657600080fd5b6144c28b838c01614388565b935060a08a01359150808211156144d857600080fd5b506144e58a828b0161440c565b91505092959891949750929550565b600080600080600080600060c0888a03121561450f57600080fd5b87356001600160401b038082111561452657600080fd5b6145328b838c01614388565b985061454060208b016143e4565b975061454e60408b01614401565b965060608a013591508082111561456457600080fd5b6145708b838c016143a0565b909650945060808a01359150808211156144b657600080fd5b6001600160a01b0381168114610d2d57600080fd5b6000602082840312156145b057600080fd5b813561383d81614589565b60008083601f8401126145cd57600080fd5b5081356001600160401b038111156145e457600080fd5b60208301915083602082850101111561392957600080fd5b60008060008060008060008060a0898b03121561461857600080fd5b88356001600160401b038082111561462f57600080fd5b61463b8c838d016145bb565b909a50985088915061464f60208c016143e4565b975060408b01359150614661826143f3565b90955060608a0135908082111561467757600080fd5b6146838c838d016143a0565b909650945060808b013591508082111561469c57600080fd5b506146a98b828c016145bb565b999c989b5096995094979396929594505050565b600080604083850312156146d057600080fd5b82356146db81614589565b946020939093013593505050565b60005b838110156147045781810151838201526020016146ec565b83811115612e415750506000910152565b6000815180845261472d8160208601602086016146e9565b601f01601f19169290920160200192915050565b634e487b7160e01b600052602160045260246000fd5b6003811061476757614767614741565b9052565b600081518084526020808501808196508360051b8101915082860160005b858110156147b35782840389526147a1848351614715565b98850198935090840190600101614789565b5091979650505050505050565b602081526000825160e060208401526147dd610100840182614715565b905060208401516147f16040850182614757565b506040840151151560608401526060840151601f198085840301608086015261481a838361476b565b925060808601519150808584030160a08601526148378383614715565b925060a086015160c086015260c08601519150808584030160e08601525061485f8282614715565b95945050505050565b634e487b7160e01b600052604160045260246000fd5b604051601f8201601f191681016001600160401b03811182821017156148a6576148a6614868565b604052919050565b60006001600160401b038211156148c7576148c7614868565b50601f01601f191660200190565b60006148e86148e3846148ae565b61487e565b90508281528383830111156148fc57600080fd5b828260208301376000602084830101529392505050565b6000806040838503121561492657600080fd5b823561493181614589565b915060208301356001600160401b0381111561494c57600080fd5b8301601f8101851361495d57600080fd5b61496c858235602084016148d5565b9150509250929050565b60008060006040848603121561498b57600080fd5b83356001600160401b038111156149a157600080fd5b6149ad868287016145bb565b90945092505060208401356149c181614589565b809150509250925092565b600060e0828403121561439a57600080fd5b600080604083850312156149f157600080fd5b82356001600160401b0380821115614a0857600080fd5b614a14868387016149cc565b93506020850135915080821115614a2a57600080fd5b5061496c8582860161440c565b60208152600061383d6020830184614715565b600082601f830112614a5b57600080fd5b61383d838335602085016148d5565b60008060408385031215614a7d57600080fd5b82356001600160401b03811115614a9357600080fd5b614a9f85828601614a4a565b9250506020830135614ab081614589565b809150509250929050565b600060208284031215614acd57600080fd5b5035919050565b600080600060408486031215614ae957600080fd5b8335925060208401356001600160401b03811115614b0657600080fd5b614b12868287016145bb565b9497909650939450505050565b60008060008060008060a08789031215614b3857600080fd5b86356001600160401b0380821115614b4f57600080fd5b614b5b8a838b01614388565b97506020890135915080821115614b7157600080fd5b908801906080828b031215614b8557600080fd5b909550604088013594506060880135935060808801359080821115614ba957600080fd5b50614bb689828a016145bb565b979a9699509497509295939492505050565b60008060208385031215614bdb57600080fd5b82356001600160401b03811115614bf157600080fd5b614bfd858286016145bb565b90969095509350505050565b60008060008060608587031215614c1f57600080fd5b84356001600160401b0380821115614c3657600080fd5b614c42888389016149cc565b95506020870135915080821115614c5857600080fd5b614c64888389016145bb565b90955093506040870135915080821115614c7d57600080fd5b50614c8a8782880161440c565b91505092959194509250565b80356001600160401b03811681146137a557600080fd5b60008060008060608587031215614cc357600080fd5b8435935060208501356001600160401b03811115614ce057600080fd5b614cec878288016145bb565b9094509250614cff905060408601614c96565b905092959194509250565b600080600060608486031215614d1f57600080fd5b8335614d2a81614589565b92506020840135915060408401356001600160401b03811115614d4c57600080fd5b614d588682870161440c565b9150509250925092565b6000808335601e19843603018112614d7957600080fd5b8301803591506001600160401b03821115614d9357600080fd5b60200191503681900382131561392957600080fd5b634e487b7160e01b600052603260045260246000fd5b81835281816020850137506000828201602090810191909152601f909101601f19169091010190565b604081526000614dfb604083018587614dbe565b9050826020830152949350505050565b6000614e196148e3846148ae565b9050828152838383011115614e2d57600080fd5b61383d8360208301846146e9565b600082601f830112614e4c57600080fd5b61383d83835160208501614e0b565b600060208284031215614e6d57600080fd5b81516001600160401b03811115614e8357600080fd5b61300184828501614e3b565b600a811061476757614767614741565b6000808335601e19843603018112614eb657600080fd5b83016020810192503590506001600160401b03811115614ed557600080fd5b80360382131561392957600080fd5b614eee818b614e8f565b60006020614efe8184018c614757565b60c06040840152614f1360c084018a8c614dbe565b8381036060850152878152818101600589901b820183018a60005b8b811015614f6857848303601f19018452614f49828e614e9f565b614f54858284614dbe565b958801959450505090850190600101614f2e565b50508581036080870152614f7d81898b614dbe565b9450505050508260a08301529a9950505050505050505050565b6000808335601e19843603018112614fae57600080fd5b83016020810192503590506001600160401b03811115614fcd57600080fd5b8060051b360382131561392957600080fd5b60008235603e19833603018112614ff557600080fd5b90910192915050565b6000606080835260a08084016150148889614f97565b60408786018190529281905260059260c08089019083861b8a01018460005b85811015615174578b830360bf19018452813536889003607e1901811261505957600080fd5b8701608084810161506a8380614f97565b928752908290528b860191808c1b87018d0191908160005b828110156150f257898503609f1901865261509d8285614fdf565b6150a78182614e9f565b8e88526150b78f89018284614dbe565b91505060206150c881840184614e9f565b9350888303828a01526150dc838583614dbe565b9982019998505093909301925050600101615082565b505050506020915061510682840184614e9f565b87830384890152615118838284614dbe565b9250505061512888840184614e9f565b8783038a89015261513a838284614dbe565b9250505061514a8d840184614e9f565b93508682038e88015261515e828583614dbe565b9783019796505050929092019150600101615033565b505060208d013560808b015289810360208b0152615192818d614715565b975050508786038189015250505050506142008185614715565b848152836020820152606060408201526000614200606083018486614dbe565b81835260006020808501808196508560051b810191508460005b878110156147b35782840389526151fd8288614e9f565b615208868284614dbe565b9a87019a95505050908401906001016151e6565b615226818b614757565b60c06020820152600061523d60c083018a8c6151cc565b886040840152828103606084015261525681888a614dbe565b905085608084015282810360a0840152615271818587614dbe565b9c9b505050505050505050505050565b60006020828403121561529357600080fd5b81516001600160401b038111156152a957600080fd5b8201601f810184136152ba57600080fd5b61300184825160208401614e0b565b60c0815260006152dc60c083018b614715565b6152e9602084018b614757565b8815156040840152828103606084015261530481888a6151cc565b90508281036080840152615319818688614dbe565b9150508260a08301529998505050505050505050565b6020808252602c908201527f46756e6374696f6e206d7573742062652063616c6c6564207468726f7567682060408201526b19195b1959d85d1958d85b1b60a21b606082015260800190565b6020808252602c908201527f46756e6374696f6e206d7573742062652063616c6c6564207468726f7567682060408201526b6163746976652070726f787960a01b606082015260800190565b6153d18189614757565b6080602082015260006153e860808301888a6151cc565b82810360408401526153fb818789614dbe565b90508281036060840152615410818587614dbe565b9a9950505050505050505050565b6001600160e01b03198316815281516000906154418160048501602087016146e9565b919091016004019392505050565b60a08152600061546260a083018a614715565b61546f602084018a614757565b8715156040840152828103606084015261548a8187896151cc565b90508281036080840152615410818587614dbe565b600181811c908216806154b357607f821691505b60208210810361439a57634e487b7160e01b600052602260045260246000fd5b60008235603e198336030181126154e957600080fd5b9190910192915050565b60006154ff8283614e9f565b60408552615511604086018284614dbe565b915050602083013560208501528091505092915050565b6001600160401b038061553a83614c96565b1683528061554a60208401614c96565b166020840152505050565b6020815260006155658384614fdf565b60e0602084015261557a6101008401826154f3565b90506155896020850185614fdf565b601f19808584030160408601526155a083836154f3565b92506155ae60408701614c96565b91506001600160401b0380831660608701526155cd6060880188614e9f565b9350828786030160808801526155e4858583614dbe565b9450506155f760a0870160808901615528565b8061560460c08901614c96565b1660e08701525050508091505092915050565b60006020828403121561562957600080fd5b5051919050565b60006020828403121561564257600080fd5b61383d82614c96565b6001600160401b038481168252608082019061566a6020840186615528565b808416606084015250949350505050565b60006001600160401b038083168185168083038211156156ab57634e487b7160e01b600052601160045260246000fd5b01949350505050565b60006156c08283614fdf565b60e084526156d160e08501826154f3565b90506156e06020840184614fdf565b84820360208601526156f282826154f3565b91505061570160408401614c96565b6001600160401b03808216604087015261571e6060860186614e9f565b92508684036060880152615733848483614dbe565b9350506157466080870160808701615528565b8061575360c08701614c96565b1660c087015250508091505092915050565b60208152600061383d60208301846156b4565b60006020828403121561578a57600080fd5b81516001600160401b03808211156157a157600080fd5b90830190604082860312156157b557600080fd5b6040516040810181811083821117156157d0576157d0614868565b60405282516157de816143f3565b81526020830151828111156157f257600080fd5b6157fe87828601614e3b565b60208301525095945050505050565b80511515825260006020820151604060208501526130016040850182614715565b6001600160401b0383168152604060208201526000613001604083018461580d565b601f82111561162857600081815260208120601f850160051c810160208610156158775750805b601f850160051c820191505b8181101561372357828155600101615883565b81516001600160401b038111156158af576158af614868565b6158c3816158bd845461549f565b84615850565b602080601f8311600181146158f857600084156158e05750858301515b600019600386901b1c1916600185901b178555613723565b600085815260208120601f198616915b8281101561592757888601518255948401946001909101908401615908565b50858210156159455787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b83815260606020820152600061596e6060830185614715565b9050826040830152949350505050565b60008060006060848603121561599357600080fd5b835192506020840151915060408401516149c1816143f3565b60008383855260208086019550808560051b8301018460005b878110156159ff57848303601f190189526159e08288614e9f565b6159eb858284614dbe565b9a86019a94505050908301906001016159c5565b5090979650505050505050565b608081526000615a1c8687614f97565b60606080850152615a3160e0850182846159ac565b915050602087013560a08401526001600160401b03615a5260408901614c96565b1660c08401528281036020840152615a6a8687614f97565b60808352615a7c6080840182846159ac565b915050615a8c6020880188614f97565b8383036020850152615a9f8382846159ac565b925050506040870135604083015260608701356060830152809250505083604083015282606083015295945050505050565b60008060408385031215615ae457600080fd5b825191506020830151614ab0816143f3565b6001600160401b03831115615b0d57615b0d614868565b615b2183615b1b835461549f565b83615850565b6000601f841160018114615b555760008515615b3d5750838201355b600019600387901b1c1916600186901b178355615baf565b600083815260209020601f19861690835b82811015615b865786850135825560209485019460019092019101615b66565b5086821015615ba35760001960f88860031b161c19848701351681555b505060018560011b0183555b5050505050565b602081526000613001602083018486614dbe565b604081526000615bdd60408301856156b4565b828103602084015261485f818561580d565b8183823760009101908152919050565b606081526000615c13606083018688614dbe565b6001600160401b039485166020840152929093166040909101529392505050565b604081526000615c476040830185614715565b90508260208301529392505050565b615c608188614e8f565b60006020615c7081840189614757565b60c06040840152615c8460c0840188614715565b8381036060850152865180825282820190600581901b83018401848a0160005b83811015615cd257601f19868403018552615cc0838351614715565b94870194925090860190600101615ca4565b50508681036080880152615ce6818a614715565b955050505050508260a0830152979650505050505050565b600082516154e98184602087016146e9565b60008085851115615d2057600080fd5b83861115615d2d57600080fd5b5050820193919092039150565b600060208284031215615d4c57600080fd5b815161383d81614589565b600082615d7457634e487b7160e01b600052601260045260246000fd5b500490565b60006001600160401b0380841115615d9357615d93614868565b8360051b6020615da481830161487e565b868152918501918181019036841115615dbc57600080fd5b865b84811015615df057803586811115615dd65760008081fd5b615de236828b01614a4a565b845250918301918301615dbe565b50979650505050505050565b6020808252602b908201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960408201526a6e697469616c697a696e6760a81b60608201526080019056fe360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc416464726573733a206c6f772d6c6576656c2064656c65676174652063616c6c206661696c6564a264697066735822122032a832e1ca9df7584ef7e3c7314af05cbb3077a1aeece3dd44c59bc889d5942864736f6c634300080f0033"; type DispatcherConstructorParams = | [linkLibraryAddresses: DispatcherLibraryAddresses, signer?: Signer] diff --git a/src/evm/contracts/factories/FeeVault__factory.ts b/src/evm/contracts/factories/FeeVault__factory.ts index cf972123..b46b9d4a 100644 --- a/src/evm/contracts/factories/FeeVault__factory.ts +++ b/src/evm/contracts/factories/FeeVault__factory.ts @@ -12,6 +12,13 @@ import type { NonPayableOverrides } from "../common"; import type { FeeVault, FeeVaultInterface } from "../FeeVault"; const _abi = [ + { + type: "function", + name: "acceptOwnership", + inputs: [], + outputs: [], + stateMutability: "nonpayable", + }, { type: "function", name: "depositOpenChannelFee", @@ -86,6 +93,19 @@ const _abi = [ ], stateMutability: "view", }, + { + type: "function", + name: "pendingOwner", + inputs: [], + outputs: [ + { + name: "", + type: "address", + internalType: "address", + }, + ], + stateMutability: "view", + }, { type: "function", name: "renounceOwnership", @@ -156,6 +176,25 @@ const _abi = [ ], anonymous: false, }, + { + type: "event", + name: "OwnershipTransferStarted", + inputs: [ + { + name: "previousOwner", + type: "address", + indexed: true, + internalType: "address", + }, + { + name: "newOwner", + type: "address", + indexed: true, + internalType: "address", + }, + ], + anonymous: false, + }, { type: "event", name: "OwnershipTransferred", @@ -235,7 +274,7 @@ const _abi = [ ] as const; const _bytecode = - "0x608060405234801561001057600080fd5b5061001a33610023565b60018055610073565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b6108ae806100826000396000f3fe6080604052600436106100555760003560e01c80630be6a22d1461005a57806318e3404b14610071578063715018a6146100845780638da5cb5b14610099578063f2fde38b146100c5578063fce34e40146100e5575b600080fd5b34801561006657600080fd5b5061006f6100f8565b005b61006f61007f366004610410565b610135565b34801561009057600080fd5b5061006f6101ec565b3480156100a557600080fd5b50600054604080516001600160a01b039092168252519081900360200190f35b3480156100d157600080fd5b5061006f6100e036600461048a565b610200565b61006f6100f336600461055f565b610276565b600080546040516001600160a01b03909116914780156108fc02929091818181858888f19350505050158015610132573d6000803e3d6000fd5b50565b61013d6102f6565b60006101516020808401359085013561069d565b61015d8335853561069d565b61016791906106bc565b905034811461019757604051635c6dd11360e11b8152600481018290523460248201526044015b60405180910390fd5b8367ffffffffffffffff16857f0733dc80f277e205edf5d913fa5d91fa0c4cc2635db600b365471c688356c03485856040516101d49291906106d4565b60405180910390a3506101e660018055565b50505050565b6101f461034f565b6101fe60006103a9565b565b61020861034f565b6001600160a01b03811661026d5760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b606482015260840161018e565b610132816103a9565b61027e6102f6565b3460000361029f57604051633d28b18360e11b815260040160405180910390fd5b7f8ab5595b5ac9231b64513ba86f6bd9fb73c51cae40c36083f7dfc2298e4429e687878787878787346040516102dc9897969594939291906107cd565b60405180910390a16102ed60018055565b50505050505050565b6002600154036103485760405162461bcd60e51b815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c00604482015260640161018e565b6002600155565b6000546001600160a01b031633146101fe5760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015260640161018e565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b806040810183101561040a57600080fd5b92915050565b60008060008060c0858703121561042657600080fd5b84359350602085013567ffffffffffffffff8116811461044557600080fd5b925061045486604087016103f9565b915061046386608087016103f9565b905092959194509250565b80356001600160a01b038116811461048557600080fd5b919050565b60006020828403121561049c57600080fd5b6104a58261046e565b9392505050565b634e487b7160e01b600052604160045260246000fd5b80356003811061048557600080fd5b60008083601f8401126104e357600080fd5b50813567ffffffffffffffff8111156104fb57600080fd5b6020830191508360208260051b850101111561051657600080fd5b9250929050565b60008083601f84011261052f57600080fd5b50813567ffffffffffffffff81111561054757600080fd5b60208301915083602082850101111561051657600080fd5b600080600080600080600060a0888a03121561057a57600080fd5b6105838861046e565b9650602088013567ffffffffffffffff808211156105a057600080fd5b818a0191508a601f8301126105b457600080fd5b8135818111156105c6576105c66104ac565b604051601f8201601f19908116603f011681019083821181831017156105ee576105ee6104ac565b816040528281528d602084870101111561060757600080fd5b82602086016020830137600060208483010152809a5050505061062c60408b016104c2565b965060608a013591508082111561064257600080fd5b61064e8b838c016104d1565b909650945060808a013591508082111561066757600080fd5b506106748a828b0161051d565b989b979a50959850939692959293505050565b634e487b7160e01b600052601160045260246000fd5b60008160001904831182151516156106b7576106b7610687565b500290565b600082198211156106cf576106cf610687565b500190565b6080810160408483376040836040840137600081529392505050565b6003811061070e57634e487b7160e01b600052602160045260246000fd5b9052565b81835281816020850137506000828201602090810191909152601f909101601f19169091010190565b81835260006020808501808196508560051b810191508460005b878110156107c05782840389528135601e1988360301811261077657600080fd5b8701858101903567ffffffffffffffff81111561079257600080fd5b8036038213156107a157600080fd5b6107ac868284610712565b9a87019a9550505090840190600101610755565b5091979650505050505050565b60018060a01b03891681526000602060c08184015289518060c085015260005b81811015610809578b810183015185820160e0015282016107ed565b8181111561081b57600060e083870101525b50601f01601f191683019050610834604084018a6106f0565b60e083820301606084015261084d60e08201888a61073b565b90508281036080840152610862818688610712565b9150508260a0830152999850505050505050505056fea2646970667358221220c3a6428237aa2faefb9a05225f24a396394c904a57d44c76245dc487bc5e631a64736f6c634300080f0033"; + "0x608060405234801561001057600080fd5b5061001a33610024565b600160025561009b565b600180546001600160a01b03191690556100488161004b602090811b6103cd17901c565b50565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b61099c806100aa6000396000f3fe60806040526004361061007b5760003560e01c80638da5cb5b1161004e5780638da5cb5b146100d4578063e30c39781461010a578063f2fde38b14610128578063fce34e401461014857600080fd5b80630be6a22d1461008057806318e3404b14610097578063715018a6146100aa57806379ba5097146100bf575b600080fd5b34801561008c57600080fd5b5061009561015b565b005b6100956100a53660046104fe565b610198565b3480156100b657600080fd5b50610095610250565b3480156100cb57600080fd5b50610095610264565b3480156100e057600080fd5b506000546001600160a01b03165b6040516001600160a01b03909116815260200160405180910390f35b34801561011657600080fd5b506001546001600160a01b03166100ee565b34801561013457600080fd5b50610095610143366004610578565b6102db565b61009561015636600461064d565b61034c565b600080546040516001600160a01b03909116914780156108fc02929091818181858888f19350505050158015610195573d6000803e3d6000fd5b50565b6101a061041d565b60006101b46020808401359085013561078b565b6101c08335853561078b565b6101ca91906107aa565b90503481146101fa57604051635c6dd11360e11b8152600481018290523460248201526044015b60405180910390fd5b8367ffffffffffffffff16857f0733dc80f277e205edf5d913fa5d91fa0c4cc2635db600b365471c688356c03485856040516102379291906107c2565b60405180910390a35061024a6001600255565b50505050565b610258610474565b61026260006104ce565b565b60015433906001600160a01b031681146102d25760405162461bcd60e51b815260206004820152602960248201527f4f776e61626c6532537465703a2063616c6c6572206973206e6f7420746865206044820152683732bb9037bbb732b960b91b60648201526084016101f1565b610195816104ce565b6102e3610474565b600180546001600160a01b0383166001600160a01b031990911681179091556103146000546001600160a01b031690565b6001600160a01b03167f38d16b8cac22d99fc7c124b9cd0de2d3fa1faef420bfe791d8c362d765e2270060405160405180910390a350565b61035461041d565b3460000361037557604051633d28b18360e11b815260040160405180910390fd5b7f8ab5595b5ac9231b64513ba86f6bd9fb73c51cae40c36083f7dfc2298e4429e687878787878787346040516103b29897969594939291906108bb565b60405180910390a16103c46001600255565b50505050505050565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b600280540361046e5760405162461bcd60e51b815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c0060448201526064016101f1565b60028055565b6000546001600160a01b031633146102625760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064016101f1565b600180546001600160a01b0319169055610195816103cd565b80604081018310156104f857600080fd5b92915050565b60008060008060c0858703121561051457600080fd5b84359350602085013567ffffffffffffffff8116811461053357600080fd5b925061054286604087016104e7565b915061055186608087016104e7565b905092959194509250565b80356001600160a01b038116811461057357600080fd5b919050565b60006020828403121561058a57600080fd5b6105938261055c565b9392505050565b634e487b7160e01b600052604160045260246000fd5b80356003811061057357600080fd5b60008083601f8401126105d157600080fd5b50813567ffffffffffffffff8111156105e957600080fd5b6020830191508360208260051b850101111561060457600080fd5b9250929050565b60008083601f84011261061d57600080fd5b50813567ffffffffffffffff81111561063557600080fd5b60208301915083602082850101111561060457600080fd5b600080600080600080600060a0888a03121561066857600080fd5b6106718861055c565b9650602088013567ffffffffffffffff8082111561068e57600080fd5b818a0191508a601f8301126106a257600080fd5b8135818111156106b4576106b461059a565b604051601f8201601f19908116603f011681019083821181831017156106dc576106dc61059a565b816040528281528d60208487010111156106f557600080fd5b82602086016020830137600060208483010152809a5050505061071a60408b016105b0565b965060608a013591508082111561073057600080fd5b61073c8b838c016105bf565b909650945060808a013591508082111561075557600080fd5b506107628a828b0161060b565b989b979a50959850939692959293505050565b634e487b7160e01b600052601160045260246000fd5b60008160001904831182151516156107a5576107a5610775565b500290565b600082198211156107bd576107bd610775565b500190565b6080810160408483376040836040840137600081529392505050565b600381106107fc57634e487b7160e01b600052602160045260246000fd5b9052565b81835281816020850137506000828201602090810191909152601f909101601f19169091010190565b81835260006020808501808196508560051b810191508460005b878110156108ae5782840389528135601e1988360301811261086457600080fd5b8701858101903567ffffffffffffffff81111561088057600080fd5b80360382131561088f57600080fd5b61089a868284610800565b9a87019a9550505090840190600101610843565b5091979650505050505050565b60018060a01b03891681526000602060c08184015289518060c085015260005b818110156108f7578b810183015185820160e0015282016108db565b8181111561090957600060e083870101525b50601f01601f191683019050610922604084018a6107de565b60e083820301606084015261093b60e08201888a610829565b90508281036080840152610950818688610800565b9150508260a0830152999850505050505050505056fea26469706673582212203615a76c8a35a4670d87a0877ae4eed27c3346a0defbe5b8a2a02264206146c264736f6c634300080f0033"; type FeeVaultConstructorParams = | [signer?: Signer] diff --git a/src/evm/contracts/factories/UniversalChannelHandler__factory.ts b/src/evm/contracts/factories/UniversalChannelHandler__factory.ts index 3b25493e..6fd26dca 100644 --- a/src/evm/contracts/factories/UniversalChannelHandler__factory.ts +++ b/src/evm/contracts/factories/UniversalChannelHandler__factory.ts @@ -50,6 +50,13 @@ const _abi = [ ], stateMutability: "view", }, + { + type: "function", + name: "acceptOwnership", + inputs: [], + outputs: [], + stateMutability: "nonpayable", + }, { type: "function", name: "closeChannel", @@ -573,6 +580,19 @@ const _abi = [ ], stateMutability: "view", }, + { + type: "function", + name: "pendingOwner", + inputs: [], + outputs: [ + { + name: "", + type: "address", + internalType: "address", + }, + ], + stateMutability: "view", + }, { type: "function", name: "proxiableUUID", @@ -773,6 +793,25 @@ const _abi = [ ], anonymous: false, }, + { + type: "event", + name: "OwnershipTransferStarted", + inputs: [ + { + name: "previousOwner", + type: "address", + indexed: true, + internalType: "address", + }, + { + name: "newOwner", + type: "address", + indexed: true, + internalType: "address", + }, + ], + anonymous: false, + }, { type: "event", name: "OwnershipTransferred", @@ -852,7 +891,7 @@ const _abi = [ ] as const; const _bytecode = - "0x60a0604052306080523480156200001557600080fd5b506200002062000030565b6200002a62000030565b620000f1565b600054610100900460ff16156200009d5760405162461bcd60e51b815260206004820152602760248201527f496e697469616c697a61626c653a20636f6e747261637420697320696e697469604482015266616c697a696e6760c81b606482015260840160405180910390fd5b60005460ff90811614620000ef576000805460ff191660ff9081179091556040519081527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b565b60805161272d62000129600039600081816105d10152818161061a01528181610a6001528181610aa00152610b33015261272d6000f3fe60806040526004361061014f5760003560e01c80637a9ccc4b116100b6578063c4d66de81161006f578063c4d66de814610399578063cb7e9057146103b9578063e847e280146103d9578063f2fde38b146103f9578063fad28a2414610419578063ffa1ad741461043957600080fd5b80637a9ccc4b146102d25780637e1d42b5146102f25780638da5cb5b14610312578063ace02de714610344578063ba22bd7614610364578063c1cb44e51461038457600080fd5b80634c2ee09d116101085780634c2ee09d1461021a5780634dcc0aa61461023a5780634f1ef2861461026757806352d1902d1461027a578063602f98341461029d578063715018a6146102bd57600080fd5b80631eb7dd5e1461015b5780631f3a58301461017d5780633659cfe6146101ba5780633f9fdbe41461015b578063462fdf83146101da5780634bdb5597146101ed57600080fd5b3661015657005b600080fd5b34801561016757600080fd5b5061017b610176366004611970565b610468565b005b34801561018957600080fd5b5061019d6101983660046119d7565b610499565b6040516001600160401b0390911681526020015b60405180910390f35b3480156101c657600080fd5b5061017b6101d5366004611a56565b6105c7565b61019d6101e8366004611a84565b6106af565b3480156101f957600080fd5b5061020d610208366004611bea565b610841565b6040516101b19190611d7b565b34801561022657600080fd5b5061017b610235366004611d8e565b610886565b34801561024657600080fd5b5061025a610255366004611dbf565b6108ef565b6040516101b19190611df3565b61017b610275366004611e1a565b610a56565b34801561028657600080fd5b5061028f610b26565b6040519081526020016101b1565b3480156102a957600080fd5b5061017b6102b8366004611dbf565b610bd9565b3480156102c957600080fd5b5061017b610d0e565b3480156102de57600080fd5b5061020d6102ed366004611ec1565b610d22565b3480156102fe57600080fd5b5061017b61030d366004611f4b565b610d5a565b34801561031e57600080fd5b506033546001600160a01b03165b6040516001600160a01b0390911681526020016101b1565b34801561035057600080fd5b5061017b61035f366004611fc3565b610e92565b34801561037057600080fd5b5061017b61037f366004611a56565b610f14565b34801561039057600080fd5b5061028f600181565b3480156103a557600080fd5b5061017b6103b4366004611a56565b610f3e565b3480156103c557600080fd5b5060655461032c906001600160a01b031681565b3480156103e557600080fd5b5061017b6103f4366004612084565b611050565b34801561040557600080fd5b5061017b610414366004611a56565b611086565b34801561042557600080fd5b5061017b610434366004611d8e565b6110fc565b34801561044557600080fd5b5061020d604051806040016040528060038152602001620312e360ec1b81525081565b6065546001600160a01b03163314610493576040516321bf7f4960e01b815260040160405180910390fd5b50505050565b60008061050960405180608001604052806104ba336001600160a01b031690565b81526020016001815260200188815260200187878080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152505050915250611127565b60408051338152602081018990529192507f9831d8c66285bfd33de069ced58ad437d6bf08f63446bf06c3713e40b4b7e873910160405180910390a16065546040516330f8455760e21b81526001600160a01b039091169063c3e1155c90610579908a90859088906004016120d6565b6020604051808303816000875af1158015610598573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906105bc9190612108565b979650505050505050565b6001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001630036106185760405162461bcd60e51b815260040161060f90612125565b60405180910390fd5b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03166106616000805160206126b1833981519152546001600160a01b031690565b6001600160a01b0316146106875760405162461bcd60e51b815260040161060f90612171565b61069081611163565b604080516000808252602082019092526106ac9183919061116b565b50565b60655460408051608081019091526000916001600160a01b03169082906107219080338152602001600181526020018b81526020018a8a8080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152505050915250611127565b60408051338152602081018c90529192507f9831d8c66285bfd33de069ced58ad437d6bf08f63446bf06c3713e40b4b7e873910160405180910390a16040516330f8455760e21b81526001600160a01b0383169063c3e1155c9061078d908d9085908b906004016120d6565b6020604051808303816000875af11580156107ac573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906107d09190612108565b606554604080518082018252929550610834926001600160a01b03909216918d918791908a9060029083908390808284376000920191909152505060408051808201825291508a9060029083908390808284376000920191909152506112db915050565b5050979650505050505050565b6065546060906001600160a01b0316331461086f576040516321bf7f4960e01b815260040160405180910390fd5b61087a8684846113aa565b98975050505050505050565b61088e611474565b6065546040516381bc079b60e01b8152600481018390526001600160a01b03909116906381bc079b90602401600060405180830381600087803b1580156108d457600080fd5b505af11580156108e8573d6000803e3d6000fd5b5050505050565b6040805180820190915260008152606060208201526065546001600160a01b0316331461092f576040516321bf7f4960e01b815260040160405180910390fd5b600073__$f61eb90c6f674e787d51c07f105fa231e2$__63d5c39a9d61095860608601866121bd565b6040518363ffffffff1660e01b815260040161097592919061222c565b600060405180830381865af4158015610992573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526109ba9190810190612285565b90506109c981604001516114ce565b6001600160a01b0316635b7615856109e46020860186612327565b60200135836040518363ffffffff1660e01b8152600401610a0692919061237a565b6000604051808303816000875af1158015610a25573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052610a4d9190810190612393565b9150505b919050565b6001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000163003610a9e5760405162461bcd60e51b815260040161060f90612125565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316610ae76000805160206126b1833981519152546001600160a01b031690565b6001600160a01b031614610b0d5760405162461bcd60e51b815260040161060f90612171565b610b1682611163565b610b228282600161116b565b5050565b6000306001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001614610bc65760405162461bcd60e51b815260206004820152603860248201527f555550535570677261646561626c653a206d757374206e6f742062652063616c60448201527f6c6564207468726f7567682064656c656761746563616c6c0000000000000000606482015260840161060f565b506000805160206126b183398151915290565b6065546001600160a01b03163314610c04576040516321bf7f4960e01b815260040160405180910390fd5b600073__$f61eb90c6f674e787d51c07f105fa231e2$__63d5c39a9d610c2d60608501856121bd565b6040518363ffffffff1660e01b8152600401610c4a92919061222c565b600060405180830381865af4158015610c67573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052610c8f9190810190612285565b9050610c9e81600001516114ce565b6001600160a01b031663400d9f5d610cb68480612327565b60200135836040518363ffffffff1660e01b8152600401610cd892919061237a565b600060405180830381600087803b158015610cf257600080fd5b505af1158015610d06573d6000803e3d6000fd5b505050505050565b610d16611474565b610d2060006114df565b565b6065546060906001600160a01b03163314610d50576040516321bf7f4960e01b815260040160405180910390fd5b61087a8383611531565b6065546001600160a01b03163314610d85576040516321bf7f4960e01b815260040160405180910390fd5b600073__$f61eb90c6f674e787d51c07f105fa231e2$__63d5c39a9d610dae60608601866121bd565b6040518363ffffffff1660e01b8152600401610dcb92919061222c565b600060405180830381865af4158015610de8573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052610e109190810190612285565b9050610e1f81600001516114ce565b6001600160a01b031663588152ca610e378580612327565b6020013583856040518463ffffffff1660e01b8152600401610e5b9392919061246d565b600060405180830381600087803b158015610e7557600080fd5b505af1158015610e89573d6000803e3d6000fd5b50505050505050565b610e9a611474565b60655460405163418925b760e01b81526001600160a01b039091169063418925b790610ed8908b908b908b908b908b908b908b908b906004016124bf565b600060405180830381600087803b158015610ef257600080fd5b505af1158015610f06573d6000803e3d6000fd5b505050505050505050505050565b610f1c611474565b606580546001600160a01b0319166001600160a01b0392909216919091179055565b600054610100900460ff1615808015610f5e5750600054600160ff909116105b80610f785750303b158015610f78575060005460ff166001145b610fdb5760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201526d191e481a5b9a5d1a585b1a5e995960921b606482015260840161060f565b6000805460ff191660011790558015610ffe576000805461ff0019166101001790555b611007826115dd565b8015610b22576000805461ff0019169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15050565b6065546001600160a01b0316331461107b576040516321bf7f4960e01b815260040160405180910390fd5b6108e88483836113aa565b61108e611474565b6001600160a01b0381166110f35760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b606482015260840161060f565b6106ac816114df565b6065546001600160a01b031633146106ac576040516321bf7f4960e01b815260040160405180910390fd5b80516020808301516040808501516060868101519251909561114d95909493910161257d565b6040516020818303038152906040529050919050565b6106ac611474565b7f4910fdfa16fed3260ed0e7147f7cc6da11a60208b5b9406d12a635614ffd91435460ff16156111a35761119e8361160c565b505050565b826001600160a01b03166352d1902d6040518163ffffffff1660e01b8152600401602060405180830381865afa9250505080156111fd575060408051601f3d908101601f191682019092526111fa918101906125b1565b60015b6112605760405162461bcd60e51b815260206004820152602e60248201527f45524331393637557067726164653a206e657720696d706c656d656e7461746960448201526d6f6e206973206e6f74205555505360901b606482015260840161060f565b6000805160206126b183398151915281146112cf5760405162461bcd60e51b815260206004820152602960248201527f45524331393637557067726164653a20756e737570706f727465642070726f786044820152681a58589b195555525160ba1b606482015260840161060f565b5061119e8383836116a8565b846001600160a01b031663478222c26040518163ffffffff1660e01b81526004016020604051808303816000875af115801561131b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061133f91906125ca565b6001600160a01b03166318e3404b34868686866040518663ffffffff1660e01b8152600401611371949392919061260a565b6000604051808303818588803b15801561138a57600080fd5b505af115801561139e573d6000803e3d6000fd5b50505050505050505050565b6060604051806040016040528060038152602001620312e360ec1b8152506040516020016113d89190612643565b604051602081830303815290604052805190602001208383604051602001611401929190612655565b60405160208183030381529060405280519060200120146114355760405163b01318a560e01b815260040160405180910390fd5b82828080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525092979650505050505050565b6033546001600160a01b03163314610d205760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015260640161060f565b60006114d9826116cd565b92915050565b603380546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b6060604051806040016040528060038152602001620312e360ec1b81525060405160200161155f9190612643565b604051602081830303815290604052805190602001208383604051602001611588929190612655565b60405160208183030381529060405280519060200120146115bc5760405163b01318a560e01b815260040160405180910390fd5b506040805180820190915260038152620312e360ec1b602082015292915050565b600054610100900460ff166116045760405162461bcd60e51b815260040161060f90612665565b610f1c61173a565b6001600160a01b0381163b6116795760405162461bcd60e51b815260206004820152602d60248201527f455243313936373a206e657720696d706c656d656e746174696f6e206973206e60448201526c1bdd08184818dbdb9d1c9858dd609a1b606482015260840161060f565b6000805160206126b183398151915280546001600160a01b0319166001600160a01b0392909216919091179055565b6116b183611769565b6000825111806116be5750805b1561119e5761049383836117a9565b60006001600160a01b038211156117365760405162461bcd60e51b815260206004820152602760248201527f53616665436173743a2076616c756520646f65736e27742066697420696e20316044820152663630206269747360c81b606482015260840161060f565b5090565b600054610100900460ff166117615760405162461bcd60e51b815260040161060f90612665565b610d206117d5565b6117728161160c565b6040516001600160a01b038216907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b90600090a250565b60606117ce83836040518060600160405280602781526020016126d160279139611805565b9392505050565b600054610100900460ff166117fc5760405162461bcd60e51b815260040161060f90612665565b610d20336114df565b6060600080856001600160a01b0316856040516118229190612643565b600060405180830381855af49150503d806000811461185d576040519150601f19603f3d011682016040523d82523d6000602084013e611862565b606091505b50915091506118738683838761187d565b9695505050505050565b606083156118ec5782516000036118e5576001600160a01b0385163b6118e55760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e7472616374000000604482015260640161060f565b50816118f6565b6118f683836118fe565b949350505050565b81511561190e5781518083602001fd5b8060405162461bcd60e51b815260040161060f9190611d7b565b60008083601f84011261193a57600080fd5b5081356001600160401b0381111561195157600080fd5b60208301915083602082850101111561196957600080fd5b9250929050565b6000806000806060858703121561198657600080fd5b8435935060208501356001600160401b038111156119a357600080fd5b6119af87828801611928565b9598909750949560400135949350505050565b6001600160401b03811681146106ac57600080fd5b6000806000806000608086880312156119ef57600080fd5b853594506020860135935060408601356001600160401b03811115611a1357600080fd5b611a1f88828901611928565b9094509250506060860135611a33816119c2565b809150509295509295909350565b6001600160a01b03811681146106ac57600080fd5b600060208284031215611a6857600080fd5b81356117ce81611a41565b80604081018310156114d957600080fd5b6000806000806000806000610100888a031215611aa057600080fd5b873596506020880135955060408801356001600160401b03811115611ac457600080fd5b611ad08a828b01611928565b9096509450506060880135611ae4816119c2565b9250611af38960808a01611a73565b9150611b028960c08a01611a73565b905092959891949750929550565b803560038110610a5157600080fd5b634e487b7160e01b600052604160045260246000fd5b604051601f8201601f191681016001600160401b0381118282101715611b5d57611b5d611b1f565b604052919050565b60006001600160401b03821115611b7e57611b7e611b1f565b50601f01601f191660200190565b6000611b9f611b9a84611b65565b611b35565b9050828152838383011115611bb357600080fd5b828260208301376000602084830101529392505050565b600082601f830112611bdb57600080fd5b6117ce83833560208501611b8c565b600080600080600080600060c0888a031215611c0557600080fd5b611c0e88611b10565b965060208801356001600160401b0380821115611c2a57600080fd5b818a0191508a601f830112611c3e57600080fd5b813581811115611c5057611c50611b1f565b8060051b611c6060208201611b35565b9182526020818501810192908101908e841115611c7c57600080fd5b6020860192505b83831015611cba578483351115611c9957600080fd5b611ca98f60208535890101611bca565b825260209283019290910190611c83565b9a5050505060408a0135965060608a0135915080821115611cda57600080fd5b611ce68b838c01611bca565b955060808a0135945060a08a0135915080821115611d0357600080fd5b50611d108a828b01611928565b989b979a50959850939692959293505050565b60005b83811015611d3e578181015183820152602001611d26565b838111156104935750506000910152565b60008151808452611d67816020860160208601611d23565b601f01601f19169290920160200192915050565b6020815260006117ce6020830184611d4f565b600060208284031215611da057600080fd5b5035919050565b600060e08284031215611db957600080fd5b50919050565b600060208284031215611dd157600080fd5b81356001600160401b03811115611de757600080fd5b6118f684828501611da7565b60208152815115156020820152600060208301516040808401526118f66060840182611d4f565b60008060408385031215611e2d57600080fd5b8235611e3881611a41565b915060208301356001600160401b03811115611e5357600080fd5b8301601f81018513611e6457600080fd5b611e7385823560208401611b8c565b9150509250929050565b60008083601f840112611e8f57600080fd5b5081356001600160401b03811115611ea657600080fd5b6020830191508360208260051b850101111561196957600080fd5b60008060008060008060006080888a031215611edc57600080fd5b611ee588611b10565b965060208801356001600160401b0380821115611f0157600080fd5b611f0d8b838c01611e7d565b909850965060408a0135915080821115611f2657600080fd5b611f328b838c01611928565b909650945060608a0135915080821115611d0357600080fd5b60008060408385031215611f5e57600080fd5b82356001600160401b0380821115611f7557600080fd5b611f8186838701611da7565b93506020850135915080821115611f9757600080fd5b50830160408186031215611faa57600080fd5b809150509250929050565b80151581146106ac57600080fd5b60008060008060008060008060a0898b031215611fdf57600080fd5b88356001600160401b0380821115611ff657600080fd5b6120028c838d01611928565b909a50985088915061201660208c01611b10565b975060408b0135915061202882611fb5565b90955060608a0135908082111561203e57600080fd5b61204a8c838d01611e7d565b909650945060808b013591508082111561206357600080fd5b506120708b828c01611928565b999c989b5096995094979396929594505050565b6000806000806060858703121561209a57600080fd5b843593506020850135925060408501356001600160401b038111156120be57600080fd5b6120ca87828801611928565b95989497509550505050565b8381526060602082015260006120ef6060830185611d4f565b90506001600160401b0383166040830152949350505050565b60006020828403121561211a57600080fd5b81516117ce816119c2565b6020808252602c908201527f46756e6374696f6e206d7573742062652063616c6c6564207468726f7567682060408201526b19195b1959d85d1958d85b1b60a21b606082015260800190565b6020808252602c908201527f46756e6374696f6e206d7573742062652063616c6c6564207468726f7567682060408201526b6163746976652070726f787960a01b606082015260800190565b6000808335601e198436030181126121d457600080fd5b8301803591506001600160401b038211156121ee57600080fd5b60200191503681900382131561196957600080fd5b81835281816020850137506000828201602090810191909152601f909101601f19169091010190565b6020815260006118f6602083018486612203565b600082601f83011261225157600080fd5b815161225f611b9a82611b65565b81815284602083860101111561227457600080fd5b6118f6826020830160208701611d23565b60006020828403121561229757600080fd5b81516001600160401b03808211156122ae57600080fd5b90830190608082860312156122c257600080fd5b6040516080810181811083821117156122dd576122dd611b1f565b806040525082518152602083015160208201526040830151604082015260608301518281111561230c57600080fd5b61231887828601612240565b60608301525095945050505050565b60008235603e1983360301811261233d57600080fd5b9190910192915050565b80518252602081015160208301526040810151604083015260006060820151608060608501526118f66080850182611d4f565b8281526040602082015260006118f66040830184612347565b6000602082840312156123a557600080fd5b81516001600160401b03808211156123bc57600080fd5b90830190604082860312156123d057600080fd5b6040516040810181811083821117156123eb576123eb611b1f565b60405282516123f981611fb5565b815260208301518281111561240d57600080fd5b61241987828601612240565b60208301525095945050505050565b6000808335601e1984360301811261243f57600080fd5b83016020810192503590506001600160401b0381111561245e57600080fd5b80360382131561196957600080fd5b8381526060602082015260006124866060830185612347565b8281036040840152833561249981611fb5565b151581526124aa6020850185612428565b6040602084015261087a604084018284612203565b60a0815260006124d360a083018a8c612203565b602060038a106124f357634e487b7160e01b600052602160045260246000fd5b8381018a905288151560408501528382036060850152868252818101600588901b830182018960005b8a81101561255657858303601f19018452612537828d612428565b612542858284612203565b95870195945050509084019060010161251c565b5050858103608087015261256b81888a612203565b9e9d5050505050505050505050505050565b848152836020820152826040820152600082516125a1816060850160208701611d23565b9190910160600195945050505050565b6000602082840312156125c357600080fd5b5051919050565b6000602082840312156125dc57600080fd5b81516117ce81611a41565b8060005b60028110156104935781518452602093840193909101906001016125eb565b8481526001600160401b038416602082015260c0810161262d60408301856125e7565b61263a60808301846125e7565b95945050505050565b6000825161233d818460208701611d23565b8183823760009101908152919050565b6020808252602b908201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960408201526a6e697469616c697a696e6760a81b60608201526080019056fe360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc416464726573733a206c6f772d6c6576656c2064656c65676174652063616c6c206661696c6564a264697066735822122087426dcc08a4b63307c57f9a0afd0f849c07bfbe79efdce7487a7885236ca01564736f6c634300080f0033"; + "0x60a0604052306080523480156200001557600080fd5b506200002062000030565b6200002a62000030565b620000f1565b600054610100900460ff16156200009d5760405162461bcd60e51b815260206004820152602760248201527f496e697469616c697a61626c653a20636f6e747261637420697320696e697469604482015266616c697a696e6760c81b606482015260840160405180910390fd5b60005460ff90811614620000ef576000805460ff191660ff9081179091556040519081527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b565b608051612821620001296000396000818161063a0152818161068301528181610ac901528181610b090152610b9c01526128216000f3fe6080604052600436106101855760003560e01c80637a9ccc4b116100d1578063c4d66de81161008a578063e847e28011610064578063e847e28014610442578063f2fde38b14610462578063fad28a2414610482578063ffa1ad74146104a257600080fd5b8063c4d66de8146103e4578063cb7e905714610404578063e30c39781461042457600080fd5b80637a9ccc4b1461031d5780637e1d42b51461033d5780638da5cb5b1461035d578063ace02de71461038f578063ba22bd76146103af578063c1cb44e5146103cf57600080fd5b80634c2ee09d1161013e57806352d1902d1161011857806352d1902d146102b0578063602f9834146102d3578063715018a6146102f357806379ba50971461030857600080fd5b80634c2ee09d146102505780634dcc0aa6146102705780634f1ef2861461029d57600080fd5b80631eb7dd5e146101915780631f3a5830146101b35780633659cfe6146101f05780633f9fdbe414610191578063462fdf83146102105780634bdb55971461022357600080fd5b3661018c57005b600080fd5b34801561019d57600080fd5b506101b16101ac366004611a64565b6104d1565b005b3480156101bf57600080fd5b506101d36101ce366004611acb565b610502565b6040516001600160401b0390911681526020015b60405180910390f35b3480156101fc57600080fd5b506101b161020b366004611b4a565b610630565b6101d361021e366004611b78565b610718565b34801561022f57600080fd5b5061024361023e366004611cde565b6108aa565b6040516101e79190611e6f565b34801561025c57600080fd5b506101b161026b366004611e82565b6108ef565b34801561027c57600080fd5b5061029061028b366004611eb3565b610958565b6040516101e79190611ee7565b6101b16102ab366004611f0e565b610abf565b3480156102bc57600080fd5b506102c5610b8f565b6040519081526020016101e7565b3480156102df57600080fd5b506101b16102ee366004611eb3565b610c42565b3480156102ff57600080fd5b506101b1610d77565b34801561031457600080fd5b506101b1610d8b565b34801561032957600080fd5b50610243610338366004611fb5565b610e02565b34801561034957600080fd5b506101b161035836600461203f565b610e3a565b34801561036957600080fd5b506033546001600160a01b03165b6040516001600160a01b0390911681526020016101e7565b34801561039b57600080fd5b506101b16103aa3660046120b7565b610f72565b3480156103bb57600080fd5b506101b16103ca366004611b4a565b610ff4565b3480156103db57600080fd5b506102c5600181565b3480156103f057600080fd5b506101b16103ff366004611b4a565b61101e565b34801561041057600080fd5b50609754610377906001600160a01b031681565b34801561043057600080fd5b506065546001600160a01b0316610377565b34801561044e57600080fd5b506101b161045d366004612178565b611130565b34801561046e57600080fd5b506101b161047d366004611b4a565b611166565b34801561048e57600080fd5b506101b161049d366004611e82565b6111d7565b3480156104ae57600080fd5b50610243604051806040016040528060038152602001620312e360ec1b81525081565b6097546001600160a01b031633146104fc576040516321bf7f4960e01b815260040160405180910390fd5b50505050565b6000806105726040518060800160405280610523336001600160a01b031690565b81526020016001815260200188815260200187878080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152505050915250611202565b60408051338152602081018990529192507f9831d8c66285bfd33de069ced58ad437d6bf08f63446bf06c3713e40b4b7e873910160405180910390a16097546040516330f8455760e21b81526001600160a01b039091169063c3e1155c906105e2908a90859088906004016121ca565b6020604051808303816000875af1158015610601573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061062591906121fc565b979650505050505050565b6001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001630036106815760405162461bcd60e51b815260040161067890612219565b60405180910390fd5b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03166106ca6000805160206127a5833981519152546001600160a01b031690565b6001600160a01b0316146106f05760405162461bcd60e51b815260040161067890612265565b6106f98161123e565b6040805160008082526020820190925261071591839190611246565b50565b60975460408051608081019091526000916001600160a01b031690829061078a9080338152602001600181526020018b81526020018a8a8080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152505050915250611202565b60408051338152602081018c90529192507f9831d8c66285bfd33de069ced58ad437d6bf08f63446bf06c3713e40b4b7e873910160405180910390a16040516330f8455760e21b81526001600160a01b0383169063c3e1155c906107f6908d9085908b906004016121ca565b6020604051808303816000875af1158015610815573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061083991906121fc565b60975460408051808201825292955061089d926001600160a01b03909216918d918791908a9060029083908390808284376000920191909152505060408051808201825291508a9060029083908390808284376000920191909152506113b6915050565b5050979650505050505050565b6097546060906001600160a01b031633146108d8576040516321bf7f4960e01b815260040160405180910390fd5b6108e3868484611485565b98975050505050505050565b6108f761154f565b6097546040516381bc079b60e01b8152600481018390526001600160a01b03909116906381bc079b90602401600060405180830381600087803b15801561093d57600080fd5b505af1158015610951573d6000803e3d6000fd5b5050505050565b6040805180820190915260008152606060208201526097546001600160a01b03163314610998576040516321bf7f4960e01b815260040160405180910390fd5b600073__$f61eb90c6f674e787d51c07f105fa231e2$__63d5c39a9d6109c160608601866122b1565b6040518363ffffffff1660e01b81526004016109de929190612320565b600060405180830381865af41580156109fb573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052610a239190810190612379565b9050610a3281604001516115a9565b6001600160a01b0316635b761585610a4d602086018661241b565b60200135836040518363ffffffff1660e01b8152600401610a6f92919061246e565b6000604051808303816000875af1158015610a8e573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052610ab69190810190612487565b9150505b919050565b6001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000163003610b075760405162461bcd60e51b815260040161067890612219565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316610b506000805160206127a5833981519152546001600160a01b031690565b6001600160a01b031614610b765760405162461bcd60e51b815260040161067890612265565b610b7f8261123e565b610b8b82826001611246565b5050565b6000306001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001614610c2f5760405162461bcd60e51b815260206004820152603860248201527f555550535570677261646561626c653a206d757374206e6f742062652063616c60448201527f6c6564207468726f7567682064656c656761746563616c6c00000000000000006064820152608401610678565b506000805160206127a583398151915290565b6097546001600160a01b03163314610c6d576040516321bf7f4960e01b815260040160405180910390fd5b600073__$f61eb90c6f674e787d51c07f105fa231e2$__63d5c39a9d610c9660608501856122b1565b6040518363ffffffff1660e01b8152600401610cb3929190612320565b600060405180830381865af4158015610cd0573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052610cf89190810190612379565b9050610d0781600001516115a9565b6001600160a01b031663400d9f5d610d1f848061241b565b60200135836040518363ffffffff1660e01b8152600401610d4192919061246e565b600060405180830381600087803b158015610d5b57600080fd5b505af1158015610d6f573d6000803e3d6000fd5b505050505050565b610d7f61154f565b610d8960006115ba565b565b60655433906001600160a01b03168114610df95760405162461bcd60e51b815260206004820152602960248201527f4f776e61626c6532537465703a2063616c6c6572206973206e6f7420746865206044820152683732bb9037bbb732b960b91b6064820152608401610678565b610715816115ba565b6097546060906001600160a01b03163314610e30576040516321bf7f4960e01b815260040160405180910390fd5b6108e383836115d3565b6097546001600160a01b03163314610e65576040516321bf7f4960e01b815260040160405180910390fd5b600073__$f61eb90c6f674e787d51c07f105fa231e2$__63d5c39a9d610e8e60608601866122b1565b6040518363ffffffff1660e01b8152600401610eab929190612320565b600060405180830381865af4158015610ec8573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052610ef09190810190612379565b9050610eff81600001516115a9565b6001600160a01b031663588152ca610f17858061241b565b6020013583856040518463ffffffff1660e01b8152600401610f3b93929190612561565b600060405180830381600087803b158015610f5557600080fd5b505af1158015610f69573d6000803e3d6000fd5b50505050505050565b610f7a61154f565b60975460405163418925b760e01b81526001600160a01b039091169063418925b790610fb8908b908b908b908b908b908b908b908b906004016125b3565b600060405180830381600087803b158015610fd257600080fd5b505af1158015610fe6573d6000803e3d6000fd5b505050505050505050505050565b610ffc61154f565b609780546001600160a01b0319166001600160a01b0392909216919091179055565b600054610100900460ff161580801561103e5750600054600160ff909116105b806110585750303b158015611058575060005460ff166001145b6110bb5760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201526d191e481a5b9a5d1a585b1a5e995960921b6064820152608401610678565b6000805460ff1916600117905580156110de576000805461ff0019166101001790555b6110e78261167f565b8015610b8b576000805461ff0019169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15050565b6097546001600160a01b0316331461115b576040516321bf7f4960e01b815260040160405180910390fd5b610951848383611485565b61116e61154f565b606580546001600160a01b0383166001600160a01b0319909116811790915561119f6033546001600160a01b031690565b6001600160a01b03167f38d16b8cac22d99fc7c124b9cd0de2d3fa1faef420bfe791d8c362d765e2270060405160405180910390a350565b6097546001600160a01b03163314610715576040516321bf7f4960e01b815260040160405180910390fd5b805160208083015160408085015160608681015192519095611228959094939101612671565b6040516020818303038152906040529050919050565b61071561154f565b7f4910fdfa16fed3260ed0e7147f7cc6da11a60208b5b9406d12a635614ffd91435460ff161561127e57611279836116ae565b505050565b826001600160a01b03166352d1902d6040518163ffffffff1660e01b8152600401602060405180830381865afa9250505080156112d8575060408051601f3d908101601f191682019092526112d5918101906126a5565b60015b61133b5760405162461bcd60e51b815260206004820152602e60248201527f45524331393637557067726164653a206e657720696d706c656d656e7461746960448201526d6f6e206973206e6f74205555505360901b6064820152608401610678565b6000805160206127a583398151915281146113aa5760405162461bcd60e51b815260206004820152602960248201527f45524331393637557067726164653a20756e737570706f727465642070726f786044820152681a58589b195555525160ba1b6064820152608401610678565b5061127983838361174a565b846001600160a01b031663478222c26040518163ffffffff1660e01b81526004016020604051808303816000875af11580156113f6573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061141a91906126be565b6001600160a01b03166318e3404b34868686866040518663ffffffff1660e01b815260040161144c94939291906126fe565b6000604051808303818588803b15801561146557600080fd5b505af1158015611479573d6000803e3d6000fd5b50505050505050505050565b6060604051806040016040528060038152602001620312e360ec1b8152506040516020016114b39190612737565b6040516020818303038152906040528051906020012083836040516020016114dc929190612749565b60405160208183030381529060405280519060200120146115105760405163b01318a560e01b815260040160405180910390fd5b82828080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525092979650505050505050565b6033546001600160a01b03163314610d895760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610678565b60006115b48261176f565b92915050565b606580546001600160a01b0319169055610715816117dc565b6060604051806040016040528060038152602001620312e360ec1b8152506040516020016116019190612737565b60405160208183030381529060405280519060200120838360405160200161162a929190612749565b604051602081830303815290604052805190602001201461165e5760405163b01318a560e01b815260040160405180910390fd5b506040805180820190915260038152620312e360ec1b602082015292915050565b600054610100900460ff166116a65760405162461bcd60e51b815260040161067890612759565b610ffc61182e565b6001600160a01b0381163b61171b5760405162461bcd60e51b815260206004820152602d60248201527f455243313936373a206e657720696d706c656d656e746174696f6e206973206e60448201526c1bdd08184818dbdb9d1c9858dd609a1b6064820152608401610678565b6000805160206127a583398151915280546001600160a01b0319166001600160a01b0392909216919091179055565b6117538361185d565b6000825111806117605750805b15611279576104fc838361189d565b60006001600160a01b038211156117d85760405162461bcd60e51b815260206004820152602760248201527f53616665436173743a2076616c756520646f65736e27742066697420696e20316044820152663630206269747360c81b6064820152608401610678565b5090565b603380546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b600054610100900460ff166118555760405162461bcd60e51b815260040161067890612759565b610d896118c9565b611866816116ae565b6040516001600160a01b038216907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b90600090a250565b60606118c283836040518060600160405280602781526020016127c5602791396118f9565b9392505050565b600054610100900460ff166118f05760405162461bcd60e51b815260040161067890612759565b610d89336115ba565b6060600080856001600160a01b0316856040516119169190612737565b600060405180830381855af49150503d8060008114611951576040519150601f19603f3d011682016040523d82523d6000602084013e611956565b606091505b509150915061196786838387611971565b9695505050505050565b606083156119e05782516000036119d9576001600160a01b0385163b6119d95760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e74726163740000006044820152606401610678565b50816119ea565b6119ea83836119f2565b949350505050565b815115611a025781518083602001fd5b8060405162461bcd60e51b81526004016106789190611e6f565b60008083601f840112611a2e57600080fd5b5081356001600160401b03811115611a4557600080fd5b602083019150836020828501011115611a5d57600080fd5b9250929050565b60008060008060608587031215611a7a57600080fd5b8435935060208501356001600160401b03811115611a9757600080fd5b611aa387828801611a1c565b9598909750949560400135949350505050565b6001600160401b038116811461071557600080fd5b600080600080600060808688031215611ae357600080fd5b853594506020860135935060408601356001600160401b03811115611b0757600080fd5b611b1388828901611a1c565b9094509250506060860135611b2781611ab6565b809150509295509295909350565b6001600160a01b038116811461071557600080fd5b600060208284031215611b5c57600080fd5b81356118c281611b35565b80604081018310156115b457600080fd5b6000806000806000806000610100888a031215611b9457600080fd5b873596506020880135955060408801356001600160401b03811115611bb857600080fd5b611bc48a828b01611a1c565b9096509450506060880135611bd881611ab6565b9250611be78960808a01611b67565b9150611bf68960c08a01611b67565b905092959891949750929550565b803560038110610aba57600080fd5b634e487b7160e01b600052604160045260246000fd5b604051601f8201601f191681016001600160401b0381118282101715611c5157611c51611c13565b604052919050565b60006001600160401b03821115611c7257611c72611c13565b50601f01601f191660200190565b6000611c93611c8e84611c59565b611c29565b9050828152838383011115611ca757600080fd5b828260208301376000602084830101529392505050565b600082601f830112611ccf57600080fd5b6118c283833560208501611c80565b600080600080600080600060c0888a031215611cf957600080fd5b611d0288611c04565b965060208801356001600160401b0380821115611d1e57600080fd5b818a0191508a601f830112611d3257600080fd5b813581811115611d4457611d44611c13565b8060051b611d5460208201611c29565b9182526020818501810192908101908e841115611d7057600080fd5b6020860192505b83831015611dae578483351115611d8d57600080fd5b611d9d8f60208535890101611cbe565b825260209283019290910190611d77565b9a5050505060408a0135965060608a0135915080821115611dce57600080fd5b611dda8b838c01611cbe565b955060808a0135945060a08a0135915080821115611df757600080fd5b50611e048a828b01611a1c565b989b979a50959850939692959293505050565b60005b83811015611e32578181015183820152602001611e1a565b838111156104fc5750506000910152565b60008151808452611e5b816020860160208601611e17565b601f01601f19169290920160200192915050565b6020815260006118c26020830184611e43565b600060208284031215611e9457600080fd5b5035919050565b600060e08284031215611ead57600080fd5b50919050565b600060208284031215611ec557600080fd5b81356001600160401b03811115611edb57600080fd5b6119ea84828501611e9b565b60208152815115156020820152600060208301516040808401526119ea6060840182611e43565b60008060408385031215611f2157600080fd5b8235611f2c81611b35565b915060208301356001600160401b03811115611f4757600080fd5b8301601f81018513611f5857600080fd5b611f6785823560208401611c80565b9150509250929050565b60008083601f840112611f8357600080fd5b5081356001600160401b03811115611f9a57600080fd5b6020830191508360208260051b8501011115611a5d57600080fd5b60008060008060008060006080888a031215611fd057600080fd5b611fd988611c04565b965060208801356001600160401b0380821115611ff557600080fd5b6120018b838c01611f71565b909850965060408a013591508082111561201a57600080fd5b6120268b838c01611a1c565b909650945060608a0135915080821115611df757600080fd5b6000806040838503121561205257600080fd5b82356001600160401b038082111561206957600080fd5b61207586838701611e9b565b9350602085013591508082111561208b57600080fd5b5083016040818603121561209e57600080fd5b809150509250929050565b801515811461071557600080fd5b60008060008060008060008060a0898b0312156120d357600080fd5b88356001600160401b03808211156120ea57600080fd5b6120f68c838d01611a1c565b909a50985088915061210a60208c01611c04565b975060408b0135915061211c826120a9565b90955060608a0135908082111561213257600080fd5b61213e8c838d01611f71565b909650945060808b013591508082111561215757600080fd5b506121648b828c01611a1c565b999c989b5096995094979396929594505050565b6000806000806060858703121561218e57600080fd5b843593506020850135925060408501356001600160401b038111156121b257600080fd5b6121be87828801611a1c565b95989497509550505050565b8381526060602082015260006121e36060830185611e43565b90506001600160401b0383166040830152949350505050565b60006020828403121561220e57600080fd5b81516118c281611ab6565b6020808252602c908201527f46756e6374696f6e206d7573742062652063616c6c6564207468726f7567682060408201526b19195b1959d85d1958d85b1b60a21b606082015260800190565b6020808252602c908201527f46756e6374696f6e206d7573742062652063616c6c6564207468726f7567682060408201526b6163746976652070726f787960a01b606082015260800190565b6000808335601e198436030181126122c857600080fd5b8301803591506001600160401b038211156122e257600080fd5b602001915036819003821315611a5d57600080fd5b81835281816020850137506000828201602090810191909152601f909101601f19169091010190565b6020815260006119ea6020830184866122f7565b600082601f83011261234557600080fd5b8151612353611c8e82611c59565b81815284602083860101111561236857600080fd5b6119ea826020830160208701611e17565b60006020828403121561238b57600080fd5b81516001600160401b03808211156123a257600080fd5b90830190608082860312156123b657600080fd5b6040516080810181811083821117156123d1576123d1611c13565b806040525082518152602083015160208201526040830151604082015260608301518281111561240057600080fd5b61240c87828601612334565b60608301525095945050505050565b60008235603e1983360301811261243157600080fd5b9190910192915050565b80518252602081015160208301526040810151604083015260006060820151608060608501526119ea6080850182611e43565b8281526040602082015260006119ea604083018461243b565b60006020828403121561249957600080fd5b81516001600160401b03808211156124b057600080fd5b90830190604082860312156124c457600080fd5b6040516040810181811083821117156124df576124df611c13565b60405282516124ed816120a9565b815260208301518281111561250157600080fd5b61250d87828601612334565b60208301525095945050505050565b6000808335601e1984360301811261253357600080fd5b83016020810192503590506001600160401b0381111561255257600080fd5b803603821315611a5d57600080fd5b83815260606020820152600061257a606083018561243b565b8281036040840152833561258d816120a9565b1515815261259e602085018561251c565b604060208401526108e36040840182846122f7565b60a0815260006125c760a083018a8c6122f7565b602060038a106125e757634e487b7160e01b600052602160045260246000fd5b8381018a905288151560408501528382036060850152868252818101600588901b830182018960005b8a81101561264a57858303601f1901845261262b828d61251c565b6126368582846122f7565b958701959450505090840190600101612610565b5050858103608087015261265f81888a6122f7565b9e9d5050505050505050505050505050565b84815283602082015282604082015260008251612695816060850160208701611e17565b9190910160600195945050505050565b6000602082840312156126b757600080fd5b5051919050565b6000602082840312156126d057600080fd5b81516118c281611b35565b8060005b60028110156104fc5781518452602093840193909101906001016126df565b8481526001600160401b038416602082015260c0810161272160408301856126db565b61272e60808301846126db565b95945050505050565b60008251612431818460208701611e17565b8183823760009101908152919050565b6020808252602b908201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960408201526a6e697469616c697a696e6760a81b60608201526080019056fe360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc416464726573733a206c6f772d6c6576656c2064656c65676174652063616c6c206661696c6564a2646970667358221220ddec9a2f434fe1c4c95e292a33ade8ab5f19752bd97d514a923c871711bfdf2564736f6c634300080f0033"; type UniversalChannelHandlerConstructorParams = | [