diff --git a/pkg/bindings/BN254/binding.go b/pkg/bindings/BN254/binding.go new file mode 100644 index 0000000000..05d3048ffd --- /dev/null +++ b/pkg/bindings/BN254/binding.go @@ -0,0 +1,203 @@ +// Code generated - DO NOT EDIT. +// This file is a generated binding and any manual changes will be lost. + +package BN254 + +import ( + "errors" + "math/big" + "strings" + + ethereum "github.com/ethereum/go-ethereum" + "github.com/ethereum/go-ethereum/accounts/abi" + "github.com/ethereum/go-ethereum/accounts/abi/bind" + "github.com/ethereum/go-ethereum/common" + "github.com/ethereum/go-ethereum/core/types" + "github.com/ethereum/go-ethereum/event" +) + +// Reference imports to suppress errors if they are not otherwise used. +var ( + _ = errors.New + _ = big.NewInt + _ = strings.NewReader + _ = ethereum.NotFound + _ = bind.Bind + _ = common.Big1 + _ = types.BloomLookup + _ = event.NewSubscription + _ = abi.ConvertType +) + +// BN254MetaData contains all meta data concerning the BN254 contract. +var BN254MetaData = &bind.MetaData{ + ABI: "[{\"type\":\"error\",\"name\":\"ECAddFailed\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"ECMulFailed\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"ECPairingFailed\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"ExpModFailed\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"ScalarTooLarge\",\"inputs\":[]}]", + Bin: "0x60556032600b8282823980515f1a607314602657634e487b7160e01b5f525f60045260245ffd5b305f52607381538281f3fe730000000000000000000000000000000000000000301460806040525f5ffdfea26469706673582212205cd636b76efe6e5ffd1521d07ce471dee8f0c54af7c59d5cee0f817f2ab551fd64736f6c634300081b0033", +} + +// BN254ABI is the input ABI used to generate the binding from. +// Deprecated: Use BN254MetaData.ABI instead. +var BN254ABI = BN254MetaData.ABI + +// BN254Bin is the compiled bytecode used for deploying new contracts. +// Deprecated: Use BN254MetaData.Bin instead. +var BN254Bin = BN254MetaData.Bin + +// DeployBN254 deploys a new Ethereum contract, binding an instance of BN254 to it. +func DeployBN254(auth *bind.TransactOpts, backend bind.ContractBackend) (common.Address, *types.Transaction, *BN254, error) { + parsed, err := BN254MetaData.GetAbi() + if err != nil { + return common.Address{}, nil, nil, err + } + if parsed == nil { + return common.Address{}, nil, nil, errors.New("GetABI returned nil") + } + + address, tx, contract, err := bind.DeployContract(auth, *parsed, common.FromHex(BN254Bin), backend) + if err != nil { + return common.Address{}, nil, nil, err + } + return address, tx, &BN254{BN254Caller: BN254Caller{contract: contract}, BN254Transactor: BN254Transactor{contract: contract}, BN254Filterer: BN254Filterer{contract: contract}}, nil +} + +// BN254 is an auto generated Go binding around an Ethereum contract. +type BN254 struct { + BN254Caller // Read-only binding to the contract + BN254Transactor // Write-only binding to the contract + BN254Filterer // Log filterer for contract events +} + +// BN254Caller is an auto generated read-only Go binding around an Ethereum contract. +type BN254Caller struct { + contract *bind.BoundContract // Generic contract wrapper for the low level calls +} + +// BN254Transactor is an auto generated write-only Go binding around an Ethereum contract. +type BN254Transactor struct { + contract *bind.BoundContract // Generic contract wrapper for the low level calls +} + +// BN254Filterer is an auto generated log filtering Go binding around an Ethereum contract events. +type BN254Filterer struct { + contract *bind.BoundContract // Generic contract wrapper for the low level calls +} + +// BN254Session is an auto generated Go binding around an Ethereum contract, +// with pre-set call and transact options. +type BN254Session struct { + Contract *BN254 // Generic contract binding to set the session for + CallOpts bind.CallOpts // Call options to use throughout this session + TransactOpts bind.TransactOpts // Transaction auth options to use throughout this session +} + +// BN254CallerSession is an auto generated read-only Go binding around an Ethereum contract, +// with pre-set call options. +type BN254CallerSession struct { + Contract *BN254Caller // Generic contract caller binding to set the session for + CallOpts bind.CallOpts // Call options to use throughout this session +} + +// BN254TransactorSession is an auto generated write-only Go binding around an Ethereum contract, +// with pre-set transact options. +type BN254TransactorSession struct { + Contract *BN254Transactor // Generic contract transactor binding to set the session for + TransactOpts bind.TransactOpts // Transaction auth options to use throughout this session +} + +// BN254Raw is an auto generated low-level Go binding around an Ethereum contract. +type BN254Raw struct { + Contract *BN254 // Generic contract binding to access the raw methods on +} + +// BN254CallerRaw is an auto generated low-level read-only Go binding around an Ethereum contract. +type BN254CallerRaw struct { + Contract *BN254Caller // Generic read-only contract binding to access the raw methods on +} + +// BN254TransactorRaw is an auto generated low-level write-only Go binding around an Ethereum contract. +type BN254TransactorRaw struct { + Contract *BN254Transactor // Generic write-only contract binding to access the raw methods on +} + +// NewBN254 creates a new instance of BN254, bound to a specific deployed contract. +func NewBN254(address common.Address, backend bind.ContractBackend) (*BN254, error) { + contract, err := bindBN254(address, backend, backend, backend) + if err != nil { + return nil, err + } + return &BN254{BN254Caller: BN254Caller{contract: contract}, BN254Transactor: BN254Transactor{contract: contract}, BN254Filterer: BN254Filterer{contract: contract}}, nil +} + +// NewBN254Caller creates a new read-only instance of BN254, bound to a specific deployed contract. +func NewBN254Caller(address common.Address, caller bind.ContractCaller) (*BN254Caller, error) { + contract, err := bindBN254(address, caller, nil, nil) + if err != nil { + return nil, err + } + return &BN254Caller{contract: contract}, nil +} + +// NewBN254Transactor creates a new write-only instance of BN254, bound to a specific deployed contract. +func NewBN254Transactor(address common.Address, transactor bind.ContractTransactor) (*BN254Transactor, error) { + contract, err := bindBN254(address, nil, transactor, nil) + if err != nil { + return nil, err + } + return &BN254Transactor{contract: contract}, nil +} + +// NewBN254Filterer creates a new log filterer instance of BN254, bound to a specific deployed contract. +func NewBN254Filterer(address common.Address, filterer bind.ContractFilterer) (*BN254Filterer, error) { + contract, err := bindBN254(address, nil, nil, filterer) + if err != nil { + return nil, err + } + return &BN254Filterer{contract: contract}, nil +} + +// bindBN254 binds a generic wrapper to an already deployed contract. +func bindBN254(address common.Address, caller bind.ContractCaller, transactor bind.ContractTransactor, filterer bind.ContractFilterer) (*bind.BoundContract, error) { + parsed, err := BN254MetaData.GetAbi() + if err != nil { + return nil, err + } + return bind.NewBoundContract(address, *parsed, caller, transactor, filterer), nil +} + +// Call invokes the (constant) contract method with params as input values and +// sets the output to result. The result type might be a single field for simple +// returns, a slice of interfaces for anonymous returns and a struct for named +// returns. +func (_BN254 *BN254Raw) Call(opts *bind.CallOpts, result *[]interface{}, method string, params ...interface{}) error { + return _BN254.Contract.BN254Caller.contract.Call(opts, result, method, params...) +} + +// Transfer initiates a plain transaction to move funds to the contract, calling +// its default method if one is available. +func (_BN254 *BN254Raw) Transfer(opts *bind.TransactOpts) (*types.Transaction, error) { + return _BN254.Contract.BN254Transactor.contract.Transfer(opts) +} + +// Transact invokes the (paid) contract method with params as input values. +func (_BN254 *BN254Raw) Transact(opts *bind.TransactOpts, method string, params ...interface{}) (*types.Transaction, error) { + return _BN254.Contract.BN254Transactor.contract.Transact(opts, method, params...) +} + +// Call invokes the (constant) contract method with params as input values and +// sets the output to result. The result type might be a single field for simple +// returns, a slice of interfaces for anonymous returns and a struct for named +// returns. +func (_BN254 *BN254CallerRaw) Call(opts *bind.CallOpts, result *[]interface{}, method string, params ...interface{}) error { + return _BN254.Contract.contract.Call(opts, result, method, params...) +} + +// Transfer initiates a plain transaction to move funds to the contract, calling +// its default method if one is available. +func (_BN254 *BN254TransactorRaw) Transfer(opts *bind.TransactOpts) (*types.Transaction, error) { + return _BN254.Contract.contract.Transfer(opts) +} + +// Transact invokes the (paid) contract method with params as input values. +func (_BN254 *BN254TransactorRaw) Transact(opts *bind.TransactOpts, method string, params ...interface{}) (*types.Transaction, error) { + return _BN254.Contract.contract.Transact(opts, method, params...) +} diff --git a/pkg/bindings/BeaconChainProofs/binding.go b/pkg/bindings/BeaconChainProofs/binding.go index 11dda1619b..f6f6cff21d 100644 --- a/pkg/bindings/BeaconChainProofs/binding.go +++ b/pkg/bindings/BeaconChainProofs/binding.go @@ -32,7 +32,7 @@ var ( // BeaconChainProofsMetaData contains all meta data concerning the BeaconChainProofs contract. var BeaconChainProofsMetaData = &bind.MetaData{ ABI: "[{\"type\":\"error\",\"name\":\"InvalidProof\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"InvalidProofLength\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"InvalidValidatorFieldsLength\",\"inputs\":[]}]", - Bin: "0x60556032600b8282823980515f1a607314602657634e487b7160e01b5f525f60045260245ffd5b305f52607381538281f3fe730000000000000000000000000000000000000000301460806040525f5ffdfea2646970667358221220320597abcf7925a808dbf3027750a420e2970289b62a84a401863591b4667aa264736f6c634300081b0033", + Bin: "0x60556032600b8282823980515f1a607314602657634e487b7160e01b5f525f60045260245ffd5b305f52607381538281f3fe730000000000000000000000000000000000000000301460806040525f5ffdfea26469706673582212209f88df6324f1350e30e882a6b975942cfcb154d768d0159f0e503982300bce3664736f6c634300081b0033", } // BeaconChainProofsABI is the input ABI used to generate the binding from. diff --git a/pkg/bindings/DelegationManager/binding.go b/pkg/bindings/DelegationManager/binding.go index 5dc59ec729..99b04f1d01 100644 --- a/pkg/bindings/DelegationManager/binding.go +++ b/pkg/bindings/DelegationManager/binding.go @@ -62,7 +62,7 @@ type OperatorSet struct { // DelegationManagerMetaData contains all meta data concerning the DelegationManager contract. var DelegationManagerMetaData = &bind.MetaData{ ABI: "[{\"type\":\"constructor\",\"inputs\":[{\"name\":\"_strategyManager\",\"type\":\"address\",\"internalType\":\"contractIStrategyManager\"},{\"name\":\"_eigenPodManager\",\"type\":\"address\",\"internalType\":\"contractIEigenPodManager\"},{\"name\":\"_allocationManager\",\"type\":\"address\",\"internalType\":\"contractIAllocationManager\"},{\"name\":\"_pauserRegistry\",\"type\":\"address\",\"internalType\":\"contractIPauserRegistry\"},{\"name\":\"_permissionController\",\"type\":\"address\",\"internalType\":\"contractIPermissionController\"},{\"name\":\"_MIN_WITHDRAWAL_DELAY\",\"type\":\"uint32\",\"internalType\":\"uint32\"},{\"name\":\"_version\",\"type\":\"string\",\"internalType\":\"string\"}],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"DELEGATION_APPROVAL_TYPEHASH\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"allocationManager\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"contractIAllocationManager\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"beaconChainETHStrategy\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"contractIStrategy\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"calculateDelegationApprovalDigestHash\",\"inputs\":[{\"name\":\"staker\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"operator\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"approver\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"approverSalt\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"},{\"name\":\"expiry\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"outputs\":[{\"name\":\"\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"calculateWithdrawalRoot\",\"inputs\":[{\"name\":\"withdrawal\",\"type\":\"tuple\",\"internalType\":\"structIDelegationManagerTypes.Withdrawal\",\"components\":[{\"name\":\"staker\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"delegatedTo\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"withdrawer\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"nonce\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"startBlock\",\"type\":\"uint32\",\"internalType\":\"uint32\"},{\"name\":\"strategies\",\"type\":\"address[]\",\"internalType\":\"contractIStrategy[]\"},{\"name\":\"scaledShares\",\"type\":\"uint256[]\",\"internalType\":\"uint256[]\"}]}],\"outputs\":[{\"name\":\"\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"stateMutability\":\"pure\"},{\"type\":\"function\",\"name\":\"completeQueuedWithdrawal\",\"inputs\":[{\"name\":\"withdrawal\",\"type\":\"tuple\",\"internalType\":\"structIDelegationManagerTypes.Withdrawal\",\"components\":[{\"name\":\"staker\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"delegatedTo\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"withdrawer\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"nonce\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"startBlock\",\"type\":\"uint32\",\"internalType\":\"uint32\"},{\"name\":\"strategies\",\"type\":\"address[]\",\"internalType\":\"contractIStrategy[]\"},{\"name\":\"scaledShares\",\"type\":\"uint256[]\",\"internalType\":\"uint256[]\"}]},{\"name\":\"tokens\",\"type\":\"address[]\",\"internalType\":\"contractIERC20[]\"},{\"name\":\"receiveAsTokens\",\"type\":\"bool\",\"internalType\":\"bool\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"completeQueuedWithdrawals\",\"inputs\":[{\"name\":\"withdrawals\",\"type\":\"tuple[]\",\"internalType\":\"structIDelegationManagerTypes.Withdrawal[]\",\"components\":[{\"name\":\"staker\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"delegatedTo\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"withdrawer\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"nonce\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"startBlock\",\"type\":\"uint32\",\"internalType\":\"uint32\"},{\"name\":\"strategies\",\"type\":\"address[]\",\"internalType\":\"contractIStrategy[]\"},{\"name\":\"scaledShares\",\"type\":\"uint256[]\",\"internalType\":\"uint256[]\"}]},{\"name\":\"tokens\",\"type\":\"address[][]\",\"internalType\":\"contractIERC20[][]\"},{\"name\":\"receiveAsTokens\",\"type\":\"bool[]\",\"internalType\":\"bool[]\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"convertToDepositShares\",\"inputs\":[{\"name\":\"staker\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"strategies\",\"type\":\"address[]\",\"internalType\":\"contractIStrategy[]\"},{\"name\":\"withdrawableShares\",\"type\":\"uint256[]\",\"internalType\":\"uint256[]\"}],\"outputs\":[{\"name\":\"\",\"type\":\"uint256[]\",\"internalType\":\"uint256[]\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"cumulativeWithdrawalsQueued\",\"inputs\":[{\"name\":\"staker\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[{\"name\":\"totalQueued\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"decreaseDelegatedShares\",\"inputs\":[{\"name\":\"staker\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"curDepositShares\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"beaconChainSlashingFactorDecrease\",\"type\":\"uint64\",\"internalType\":\"uint64\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"delegateTo\",\"inputs\":[{\"name\":\"operator\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"approverSignatureAndExpiry\",\"type\":\"tuple\",\"internalType\":\"structISignatureUtilsMixinTypes.SignatureWithExpiry\",\"components\":[{\"name\":\"signature\",\"type\":\"bytes\",\"internalType\":\"bytes\"},{\"name\":\"expiry\",\"type\":\"uint256\",\"internalType\":\"uint256\"}]},{\"name\":\"approverSalt\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"delegatedTo\",\"inputs\":[{\"name\":\"staker\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[{\"name\":\"operator\",\"type\":\"address\",\"internalType\":\"address\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"delegationApprover\",\"inputs\":[{\"name\":\"operator\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"address\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"delegationApproverSaltIsSpent\",\"inputs\":[{\"name\":\"delegationApprover\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"salt\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"outputs\":[{\"name\":\"spent\",\"type\":\"bool\",\"internalType\":\"bool\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"depositScalingFactor\",\"inputs\":[{\"name\":\"staker\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"strategy\",\"type\":\"address\",\"internalType\":\"contractIStrategy\"}],\"outputs\":[{\"name\":\"\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"domainSeparator\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"eigenPodManager\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"contractIEigenPodManager\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"getDepositedShares\",\"inputs\":[{\"name\":\"staker\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[{\"name\":\"\",\"type\":\"address[]\",\"internalType\":\"contractIStrategy[]\"},{\"name\":\"\",\"type\":\"uint256[]\",\"internalType\":\"uint256[]\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"getOperatorShares\",\"inputs\":[{\"name\":\"operator\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"strategies\",\"type\":\"address[]\",\"internalType\":\"contractIStrategy[]\"}],\"outputs\":[{\"name\":\"\",\"type\":\"uint256[]\",\"internalType\":\"uint256[]\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"getOperatorsShares\",\"inputs\":[{\"name\":\"operators\",\"type\":\"address[]\",\"internalType\":\"address[]\"},{\"name\":\"strategies\",\"type\":\"address[]\",\"internalType\":\"contractIStrategy[]\"}],\"outputs\":[{\"name\":\"\",\"type\":\"uint256[][]\",\"internalType\":\"uint256[][]\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"getQueuedWithdrawal\",\"inputs\":[{\"name\":\"withdrawalRoot\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"outputs\":[{\"name\":\"withdrawal\",\"type\":\"tuple\",\"internalType\":\"structIDelegationManagerTypes.Withdrawal\",\"components\":[{\"name\":\"staker\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"delegatedTo\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"withdrawer\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"nonce\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"startBlock\",\"type\":\"uint32\",\"internalType\":\"uint32\"},{\"name\":\"strategies\",\"type\":\"address[]\",\"internalType\":\"contractIStrategy[]\"},{\"name\":\"scaledShares\",\"type\":\"uint256[]\",\"internalType\":\"uint256[]\"}]},{\"name\":\"shares\",\"type\":\"uint256[]\",\"internalType\":\"uint256[]\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"getQueuedWithdrawalRoots\",\"inputs\":[{\"name\":\"staker\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[{\"name\":\"\",\"type\":\"bytes32[]\",\"internalType\":\"bytes32[]\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"getQueuedWithdrawals\",\"inputs\":[{\"name\":\"staker\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[{\"name\":\"withdrawals\",\"type\":\"tuple[]\",\"internalType\":\"structIDelegationManagerTypes.Withdrawal[]\",\"components\":[{\"name\":\"staker\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"delegatedTo\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"withdrawer\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"nonce\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"startBlock\",\"type\":\"uint32\",\"internalType\":\"uint32\"},{\"name\":\"strategies\",\"type\":\"address[]\",\"internalType\":\"contractIStrategy[]\"},{\"name\":\"scaledShares\",\"type\":\"uint256[]\",\"internalType\":\"uint256[]\"}]},{\"name\":\"shares\",\"type\":\"uint256[][]\",\"internalType\":\"uint256[][]\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"getSlashableSharesInQueue\",\"inputs\":[{\"name\":\"operator\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"strategy\",\"type\":\"address\",\"internalType\":\"contractIStrategy\"}],\"outputs\":[{\"name\":\"\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"getWithdrawableShares\",\"inputs\":[{\"name\":\"staker\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"strategies\",\"type\":\"address[]\",\"internalType\":\"contractIStrategy[]\"}],\"outputs\":[{\"name\":\"withdrawableShares\",\"type\":\"uint256[]\",\"internalType\":\"uint256[]\"},{\"name\":\"depositShares\",\"type\":\"uint256[]\",\"internalType\":\"uint256[]\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"increaseDelegatedShares\",\"inputs\":[{\"name\":\"staker\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"strategy\",\"type\":\"address\",\"internalType\":\"contractIStrategy\"},{\"name\":\"prevDepositShares\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"addedShares\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"initialize\",\"inputs\":[{\"name\":\"initialPausedStatus\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"isDelegated\",\"inputs\":[{\"name\":\"staker\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[{\"name\":\"\",\"type\":\"bool\",\"internalType\":\"bool\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"isOperator\",\"inputs\":[{\"name\":\"operator\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[{\"name\":\"\",\"type\":\"bool\",\"internalType\":\"bool\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"minWithdrawalDelayBlocks\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"uint32\",\"internalType\":\"uint32\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"modifyOperatorDetails\",\"inputs\":[{\"name\":\"operator\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"newDelegationApprover\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"operatorShares\",\"inputs\":[{\"name\":\"operator\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"strategy\",\"type\":\"address\",\"internalType\":\"contractIStrategy\"}],\"outputs\":[{\"name\":\"shares\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"pause\",\"inputs\":[{\"name\":\"newPausedStatus\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"pauseAll\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"paused\",\"inputs\":[{\"name\":\"index\",\"type\":\"uint8\",\"internalType\":\"uint8\"}],\"outputs\":[{\"name\":\"\",\"type\":\"bool\",\"internalType\":\"bool\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"paused\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"pauserRegistry\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"contractIPauserRegistry\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"pendingWithdrawals\",\"inputs\":[{\"name\":\"withdrawalRoot\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"outputs\":[{\"name\":\"pending\",\"type\":\"bool\",\"internalType\":\"bool\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"permissionController\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"contractIPermissionController\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"queueWithdrawals\",\"inputs\":[{\"name\":\"params\",\"type\":\"tuple[]\",\"internalType\":\"structIDelegationManagerTypes.QueuedWithdrawalParams[]\",\"components\":[{\"name\":\"strategies\",\"type\":\"address[]\",\"internalType\":\"contractIStrategy[]\"},{\"name\":\"depositShares\",\"type\":\"uint256[]\",\"internalType\":\"uint256[]\"},{\"name\":\"__deprecated_withdrawer\",\"type\":\"address\",\"internalType\":\"address\"}]}],\"outputs\":[{\"name\":\"\",\"type\":\"bytes32[]\",\"internalType\":\"bytes32[]\"}],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"queuedWithdrawals\",\"inputs\":[{\"name\":\"withdrawalRoot\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"outputs\":[{\"name\":\"withdrawal\",\"type\":\"tuple\",\"internalType\":\"structIDelegationManagerTypes.Withdrawal\",\"components\":[{\"name\":\"staker\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"delegatedTo\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"withdrawer\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"nonce\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"startBlock\",\"type\":\"uint32\",\"internalType\":\"uint32\"},{\"name\":\"strategies\",\"type\":\"address[]\",\"internalType\":\"contractIStrategy[]\"},{\"name\":\"scaledShares\",\"type\":\"uint256[]\",\"internalType\":\"uint256[]\"}]}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"redelegate\",\"inputs\":[{\"name\":\"newOperator\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"newOperatorApproverSig\",\"type\":\"tuple\",\"internalType\":\"structISignatureUtilsMixinTypes.SignatureWithExpiry\",\"components\":[{\"name\":\"signature\",\"type\":\"bytes\",\"internalType\":\"bytes\"},{\"name\":\"expiry\",\"type\":\"uint256\",\"internalType\":\"uint256\"}]},{\"name\":\"approverSalt\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"outputs\":[{\"name\":\"withdrawalRoots\",\"type\":\"bytes32[]\",\"internalType\":\"bytes32[]\"}],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"registerAsOperator\",\"inputs\":[{\"name\":\"initDelegationApprover\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"allocationDelay\",\"type\":\"uint32\",\"internalType\":\"uint32\"},{\"name\":\"metadataURI\",\"type\":\"string\",\"internalType\":\"string\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"slashOperatorShares\",\"inputs\":[{\"name\":\"operator\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"operatorSet\",\"type\":\"tuple\",\"internalType\":\"structOperatorSet\",\"components\":[{\"name\":\"avs\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"id\",\"type\":\"uint32\",\"internalType\":\"uint32\"}]},{\"name\":\"slashId\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"strategy\",\"type\":\"address\",\"internalType\":\"contractIStrategy\"},{\"name\":\"prevMaxMagnitude\",\"type\":\"uint64\",\"internalType\":\"uint64\"},{\"name\":\"newMaxMagnitude\",\"type\":\"uint64\",\"internalType\":\"uint64\"}],\"outputs\":[{\"name\":\"totalDepositSharesToSlash\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"strategyManager\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"contractIStrategyManager\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"undelegate\",\"inputs\":[{\"name\":\"staker\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[{\"name\":\"withdrawalRoots\",\"type\":\"bytes32[]\",\"internalType\":\"bytes32[]\"}],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"unpause\",\"inputs\":[{\"name\":\"newPausedStatus\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"updateOperatorMetadataURI\",\"inputs\":[{\"name\":\"operator\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"metadataURI\",\"type\":\"string\",\"internalType\":\"string\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"version\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"string\",\"internalType\":\"string\"}],\"stateMutability\":\"view\"},{\"type\":\"event\",\"name\":\"DelegationApproverUpdated\",\"inputs\":[{\"name\":\"operator\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"newDelegationApprover\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"DepositScalingFactorUpdated\",\"inputs\":[{\"name\":\"staker\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"},{\"name\":\"strategy\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"contractIStrategy\"},{\"name\":\"newDepositScalingFactor\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"Initialized\",\"inputs\":[{\"name\":\"version\",\"type\":\"uint8\",\"indexed\":false,\"internalType\":\"uint8\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"OperatorMetadataURIUpdated\",\"inputs\":[{\"name\":\"operator\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"metadataURI\",\"type\":\"string\",\"indexed\":false,\"internalType\":\"string\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"OperatorRegistered\",\"inputs\":[{\"name\":\"operator\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"delegationApprover\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"OperatorSharesDecreased\",\"inputs\":[{\"name\":\"operator\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"staker\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"},{\"name\":\"strategy\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"contractIStrategy\"},{\"name\":\"shares\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"OperatorSharesIncreased\",\"inputs\":[{\"name\":\"operator\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"staker\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"},{\"name\":\"strategy\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"contractIStrategy\"},{\"name\":\"shares\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"OperatorSharesSlashed\",\"inputs\":[{\"name\":\"operator\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"strategy\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"contractIStrategy\"},{\"name\":\"totalSlashedShares\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"Paused\",\"inputs\":[{\"name\":\"account\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"newPausedStatus\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"SlashingWithdrawalCompleted\",\"inputs\":[{\"name\":\"withdrawalRoot\",\"type\":\"bytes32\",\"indexed\":false,\"internalType\":\"bytes32\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"SlashingWithdrawalQueued\",\"inputs\":[{\"name\":\"withdrawalRoot\",\"type\":\"bytes32\",\"indexed\":false,\"internalType\":\"bytes32\"},{\"name\":\"withdrawal\",\"type\":\"tuple\",\"indexed\":false,\"internalType\":\"structIDelegationManagerTypes.Withdrawal\",\"components\":[{\"name\":\"staker\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"delegatedTo\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"withdrawer\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"nonce\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"startBlock\",\"type\":\"uint32\",\"internalType\":\"uint32\"},{\"name\":\"strategies\",\"type\":\"address[]\",\"internalType\":\"contractIStrategy[]\"},{\"name\":\"scaledShares\",\"type\":\"uint256[]\",\"internalType\":\"uint256[]\"}]},{\"name\":\"sharesToWithdraw\",\"type\":\"uint256[]\",\"indexed\":false,\"internalType\":\"uint256[]\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"StakerDelegated\",\"inputs\":[{\"name\":\"staker\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"operator\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"StakerForceUndelegated\",\"inputs\":[{\"name\":\"staker\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"operator\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"StakerUndelegated\",\"inputs\":[{\"name\":\"staker\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"operator\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"Unpaused\",\"inputs\":[{\"name\":\"account\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"newPausedStatus\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"}],\"anonymous\":false},{\"type\":\"error\",\"name\":\"ActivelyDelegated\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"CallerCannotUndelegate\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"CurrentlyPaused\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"FullySlashed\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"InputAddressZero\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"InputArrayLengthMismatch\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"InputArrayLengthZero\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"InvalidNewPausedStatus\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"InvalidPermissions\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"InvalidShortString\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"InvalidSignature\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"InvalidSnapshotOrdering\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"NotActivelyDelegated\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"OnlyAllocationManager\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"OnlyEigenPodManager\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"OnlyPauser\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"OnlyStrategyManagerOrEigenPodManager\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"OnlyUnpauser\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"OperatorNotRegistered\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"OperatorsCannotUndelegate\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"SaltSpent\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"SignatureExpired\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"StringTooLong\",\"inputs\":[{\"name\":\"str\",\"type\":\"string\",\"internalType\":\"string\"}]},{\"type\":\"error\",\"name\":\"WithdrawalDelayNotElapsed\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"WithdrawalNotQueued\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"WithdrawerNotCaller\",\"inputs\":[]}]", - Bin: "0x610160604052348015610010575f5ffd5b5060405161605038038061605083398101604081905261002f916101d9565b808084898989878a6001600160a01b03811661005e576040516339b190bb60e11b815260040160405180910390fd5b6001600160a01b0390811660805293841660a05291831660c052821660e05263ffffffff16610100521661012052610095816100b0565b61014052506100a490506100f6565b50505050505050610364565b5f5f829050601f815111156100e3578260405163305a27a960e01b81526004016100da9190610309565b60405180910390fd5b80516100ee8261033e565b179392505050565b5f54610100900460ff161561015d5760405162461bcd60e51b815260206004820152602760248201527f496e697469616c697a61626c653a20636f6e747261637420697320696e697469604482015266616c697a696e6760c81b60648201526084016100da565b5f5460ff908116146101ac575f805460ff191660ff9081179091556040519081527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b565b6001600160a01b03811681146101c2575f5ffd5b50565b634e487b7160e01b5f52604160045260245ffd5b5f5f5f5f5f5f5f60e0888a0312156101ef575f5ffd5b87516101fa816101ae565b602089015190975061020b816101ae565b604089015190965061021c816101ae565b606089015190955061022d816101ae565b608089015190945061023e816101ae565b60a089015190935063ffffffff81168114610257575f5ffd5b60c08901519092506001600160401b03811115610272575f5ffd5b88015f601f82018b13610283575f5ffd5b81516001600160401b0381111561029c5761029c6101c5565b604051601f8201601f19908116603f011681016001600160401b03811182821017156102ca576102ca6101c5565b6040528181528382016020018d10156102e1575f5ffd5b8160208501602083015e5f602083830101528092508094505050505092959891949750929550565b602081525f82518060208401528060208501604085015e5f604082850101526040601f19601f83011684010191505092915050565b8051602080830151919081101561035e575f198160200360031b1b821691505b50919050565b60805160a05160c05160e051610100516101205161014051615bfa6104565f395f8181610fde0152613dc701525f8181610412015261317001525f81816107030152818161326f0152818161354101526136fa01525f818161075301528181610cf301528181610eb601528181611056015281816113af0152818161181101528181612480015261412a01525f818161043901528181610e340152818161130e0152818161158201528181612d7101528181612f5201526133b501525f818161036f01528181610e02015281816114d6015261338f01525f81816105e201528181612b370152613e360152615bfa5ff3fe608060405234801561000f575f5ffd5b50600436106102b1575f3560e01c80636d70f7ae1161017b578063bb45fef2116100e4578063e4cc3f901161009e578063f698da2511610079578063f698da25146107ce578063fabc1cbc146107d6578063fd8aa88d146107e9578063fe4b84df146107fc575f5ffd5b8063e4cc3f9014610788578063eea9064b1461079b578063f0e0e676146107ae575f5ffd5b8063bb45fef2146106b9578063bfae3fd2146106e6578063c448feb8146106f9578063c978f7ac1461072d578063ca8aa7c71461074e578063da8be86414610775575f5ffd5b80639104c319116101355780639104c319146106175780639435bb431461063257806399f5371b14610645578063a178848414610665578063a33a343314610684578063b7f06ebe14610697575f5ffd5b80636d70f7ae1461057a5780636e1744481461058d578063778e55f3146105a057806378296ec5146105ca578063886f1195146105dd5780639004134714610604575f5ffd5b806354b7c96c1161021d5780635c975abb116101d75780635c975abb146104d45780635d975e88146104dc5780635dd68579146104fd57806360a0d1ce1461051e57806365da12641461053157806366d5ba9314610559575f5ffd5b806354b7c96c1461045b57806354fd4d501461046e578063595c6a6714610483578063597b36da1461048b5780635ac86ab71461049e5780635ae679a7146104c1575f5ffd5b806339b70e381161026e57806339b70e381461036a5780633c651cf2146103a95780633cdeb5e0146103bc5780633e28391d146103ea5780634657e26a1461040d5780634665bcda14610434575f5ffd5b806304a4f979146102b55780630b9f487a146102ef5780630dd8dd0214610302578063136439dd1461032257806325df922e146103375780632aa6d88814610357575b5f5ffd5b6102dc7f14bde674c9f64b2ad00eaaee4a8bed1fabef35c7507e3c5b9cfc9436909a2dad81565b6040519081526020015b60405180910390f35b6102dc6102fd366004614a64565b61080f565b610315610310366004614afb565b610897565b6040516102e69190614b39565b610335610330366004614b70565b610b09565b005b61034a610345366004614d05565b610b43565b6040516102e69190614db3565b610335610365366004614e15565b610ca3565b6103917f000000000000000000000000000000000000000000000000000000000000000081565b6040516001600160a01b0390911681526020016102e6565b6103356103b7366004614e73565b610df7565b6103916103ca366004614eb6565b6001600160a01b039081165f908152609960205260409020600101541690565b6103fd6103f8366004614eb6565b610f4a565b60405190151581526020016102e6565b6103917f000000000000000000000000000000000000000000000000000000000000000081565b6103917f000000000000000000000000000000000000000000000000000000000000000081565b610335610469366004614ed1565b610f69565b610476610fd7565b6040516102e69190614f36565b610335611007565b6102dc610499366004615004565b61101b565b6103fd6104ac366004615035565b606654600160ff9092169190911b9081161490565b6102dc6104cf366004615069565b61104a565b6066546102dc565b6104ef6104ea366004614b70565b6111bc565b6040516102e692919061519e565b61051061050b366004614eb6565b6111d9565b6040516102e6929190615210565b61033561052c36600461527d565b611303565b61039161053f366004614eb6565b609a6020525f90815260409020546001600160a01b031681565b61056c610567366004614eb6565b6114ae565b6040516102e69291906152bc565b6103fd610588366004614eb6565b6117ae565b6102dc61059b366004614ed1565b6117e6565b6102dc6105ae366004614ed1565b609860209081525f928352604080842090915290825290205481565b6103356105d83660046152ce565b611890565b6103917f000000000000000000000000000000000000000000000000000000000000000081565b61034a61061236600461531e565b611926565b61039173beac0eeeeeeeeeeeeeeeeeeeeeeeeeeeeeebeac081565b61033561064036600461536a565b6119fc565b610658610653366004614b70565b611ab7565b6040516102e69190615406565b6102dc610673366004614eb6565b609f6020525f908152604090205481565b610315610692366004615418565b611bd3565b6103fd6106a5366004614b70565b609e6020525f908152604090205460ff1681565b6103fd6106c73660046154ff565b609c60209081525f928352604080842090915290825290205460ff1681565b6102dc6106f4366004614ed1565b611beb565b60405163ffffffff7f00000000000000000000000000000000000000000000000000000000000000001681526020016102e6565b61074061073b36600461531e565b611c27565b6040516102e6929190615529565b6103917f000000000000000000000000000000000000000000000000000000000000000081565b610315610783366004614eb6565b611eb4565b610335610796366004615548565b611fdd565b6103356107a9366004615418565b612015565b6107c16107bc3660046155c6565b612080565b6040516102e69190615673565b6102dc612125565b6103356107e4366004614b70565b6121de565b6103156107f7366004614eb6565b61224c565b61033561080a366004614b70565b61226f565b604080517f14bde674c9f64b2ad00eaaee4a8bed1fabef35c7507e3c5b9cfc9436909a2dad60208201526001600160a01b03808616928201929092528187166060820152908516608082015260a0810183905260c081018290525f9061088d9060e00160405160208183030381529060405280519060200120612380565b9695505050505050565b606060016108a4816123ae565b6108ac6123dc565b5f836001600160401b038111156108c5576108c5614b87565b6040519080825280602002602001820160405280156108ee578160200160208202803683370190505b50335f908152609a60205260408120549192506001600160a01b03909116905b85811015610afa5786868281811061092857610928615685565b905060200281019061093a9190615699565b6109489060208101906156b7565b905087878381811061095c5761095c615685565b905060200281019061096e9190615699565b61097890806156b7565b905014610998576040516343714afd60e01b815260040160405180910390fd5b5f610a0233848a8a868181106109b0576109b0615685565b90506020028101906109c29190615699565b6109cc90806156b7565b808060200260200160405190810160405280939291908181526020018383602002808284375f9201919091525061243592505050565b9050610ad433848a8a86818110610a1b57610a1b615685565b9050602002810190610a2d9190615699565b610a3790806156b7565b808060200260200160405190810160405280939291908181526020018383602002808284375f920191909152508e92508d9150889050818110610a7c57610a7c615685565b9050602002810190610a8e9190615699565b610a9c9060208101906156b7565b808060200260200160405190810160405280939291908181526020018383602002808284375f92019190915250889250612587915050565b848381518110610ae657610ae6615685565b60209081029190910101525060010161090e565b5050600160c955949350505050565b610b11612b22565b6066548181168114610b365760405163c61dca5d60e01b815260040160405180910390fd5b610b3f82612bc5565b5050565b6001600160a01b038084165f908152609a60205260408120546060921690610b6c868387612435565b90505f85516001600160401b03811115610b8857610b88614b87565b604051908082528060200260200182016040528015610bb1578160200160208202803683370190505b5090505f5b8651811015610c96576001600160a01b0388165f90815260a260205260408120885182908a9085908110610bec57610bec615685565b60200260200101516001600160a01b03166001600160a01b031681526020019081526020015f206040518060200160405290815f820154815250509050610c70878381518110610c3e57610c3e615685565b6020026020010151858481518110610c5857610c58615685565b602002602001015183612c029092919063ffffffff16565b838381518110610c8257610c82615685565b602090810291909101015250600101610bb6565b50925050505b9392505050565b610cab6123dc565b610cb433610f4a565b15610cd257604051633bf2b50360e11b815260040160405180910390fd5b604051632b6241f360e11b815233600482015263ffffffff841660248201527f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316906356c483e6906044015f604051808303815f87803b158015610d3c575f5ffd5b505af1158015610d4e573d5f5f3e3d5ffd5b50505050610d5c3385612c20565b610d663333612c82565b6040516001600160a01b038516815233907fa453db612af59e5521d6ab9284dc3e2d06af286eb1b1b7b771fce4716c19f2c19060200160405180910390a2336001600160a01b03167f02a919ed0e2acad1dd90f17ef2fa4ae5462ee1339170034a8531cca4b67080908383604051610ddf9291906156fc565b60405180910390a2610df1600160c955565b50505050565b336001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000161480610e565750336001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016145b610e735760405163045206a560e21b815260040160405180910390fd5b610e7b6123dc565b6001600160a01b038481165f908152609a602052604080822054905163152667d960e31b8152908316600482018190528684166024830152927f0000000000000000000000000000000000000000000000000000000000000000169063a9333ec890604401602060405180830381865afa158015610efb573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610f1f919061572a565b90505f610f2d878784612f0b565b9050610f3d838888888886612fed565b505050610df1600160c955565b6001600160a01b039081165f908152609a602052604090205416151590565b81610f7381613132565b610f905760405163932d94f760e01b815260040160405180910390fd5b610f986123dc565b610fa1836117ae565b610fbe576040516325ec6c1f60e01b815260040160405180910390fd5b610fc88383612c20565b610fd2600160c955565b505050565b60606110027f00000000000000000000000000000000000000000000000000000000000000006131dc565b905090565b61100f612b22565b6110195f19612bc5565b565b5f8160405160200161102d9190615406565b604051602081830303815290604052805190602001209050919050565b5f336001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001614611094576040516323d871a560e01b815260040160405180910390fd5b61109c6123dc565b6001600160a01b038088165f9081526098602090815260408083209388168352929052908120546110da906001600160401b03808716908616613219565b90505f6110e989878787613231565b90506110f58183615759565b9250611103895f88856132ee565b604080516001600160a01b038881168252602082018690528b16917fdd611f4ef63f4385f1756c86ce1f1f389a9013ba6fa07daba8528291bc2d3c30910160405180910390a261115286613368565b6001600160a01b0316633fb99ca5898989876040518563ffffffff1660e01b8152600401611183949392919061576c565b5f604051808303815f87803b15801561119a575f5ffd5b505af11580156111ac573d5f5f3e3d5ffd5b50505050505061088d600160c955565b6111c4614925565b60606111cf836133da565b9094909350915050565b6060805f6111e68461224c565b8051909150806001600160401b0381111561120357611203614b87565b60405190808252806020026020018201604052801561123c57816020015b611229614925565b8152602001906001900390816112215790505b509350806001600160401b0381111561125757611257614b87565b60405190808252806020026020018201604052801561128a57816020015b60608152602001906001900390816112755790505b5092505f5b818110156112fb576112b98382815181106112ac576112ac615685565b60200260200101516133da565b8683815181106112cb576112cb615685565b602002602001018684815181106112e4576112e4615685565b60209081029190910101919091525260010161128f565b505050915091565b336001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000161461134c57604051633213a66160e21b815260040160405180910390fd5b6113546123dc565b61135d83610f4a565b15610fc8576001600160a01b038381165f908152609a602052604080822054905163152667d960e31b81529083166004820181905273beac0eeeeeeeeeeeeeeeeeeeeeeeeeeeeeebeac06024830152927f0000000000000000000000000000000000000000000000000000000000000000169063a9333ec890604401602060405180830381865afa1580156113f4573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611418919061572a565b6001600160a01b0386165f90815260a26020908152604080832073beac0eeeeeeeeeeeeeeeeeeeeeeeeeeeeeebeac084528252808320815192830190915254815291925061147e866114766001600160401b0380871690891661362d565b849190613641565b90506114a0848873beac0eeeeeeeeeeeeeeeeeeeeeeeeeeeeeebeac0846132ee565b50505050610fd2600160c955565b6040516394f649dd60e01b81526001600160a01b03828116600483015260609182915f9182917f000000000000000000000000000000000000000000000000000000000000000016906394f649dd906024015f60405180830381865afa15801561151a573d5f5f3e3d5ffd5b505050506040513d5f823e601f3d908101601f19168201604052611541919081019061581c565b60405163fe243a1760e01b81526001600160a01b03888116600483015273beac0eeeeeeeeeeeeeeeeeeeeeeeeeeeeeebeac060248301529294509092505f917f0000000000000000000000000000000000000000000000000000000000000000169063fe243a1790604401602060405180830381865afa1580156115c7573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906115eb91906158d7565b9050805f036115ff57509094909350915050565b5f8351600161160e9190615759565b6001600160401b0381111561162557611625614b87565b60405190808252806020026020018201604052801561164e578160200160208202803683370190505b5090505f845160016116609190615759565b6001600160401b0381111561167757611677614b87565b6040519080825280602002602001820160405280156116a0578160200160208202803683370190505b50905073beac0eeeeeeeeeeeeeeeeeeeeeeeeeeeeeebeac0828651815181106116cb576116cb615685565b60200260200101906001600160a01b031690816001600160a01b03168152505082818651815181106116ff576116ff615685565b60209081029190910101525f5b85518110156117a05785818151811061172757611727615685565b602002602001015183828151811061174157611741615685565b60200260200101906001600160a01b031690816001600160a01b03168152505084818151811061177357611773615685565b602002602001015182828151811061178d5761178d615685565b602090810291909101015260010161170c565b509097909650945050505050565b5f6001600160a01b038216158015906117e057506001600160a01b038083165f818152609a6020526040902054909116145b92915050565b60405163152667d960e31b81526001600160a01b03838116600483015282811660248301525f9182917f0000000000000000000000000000000000000000000000000000000000000000169063a9333ec890604401602060405180830381865afa158015611856573d5f5f3e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061187a919061572a565b90506118888484835f613231565b949350505050565b8261189a81613132565b6118b75760405163932d94f760e01b815260040160405180910390fd5b6118c0846117ae565b6118dd576040516325ec6c1f60e01b815260040160405180910390fd5b836001600160a01b03167f02a919ed0e2acad1dd90f17ef2fa4ae5462ee1339170034a8531cca4b670809084846040516119189291906156fc565b60405180910390a250505050565b60605f82516001600160401b0381111561194257611942614b87565b60405190808252806020026020018201604052801561196b578160200160208202803683370190505b5090505f5b83518110156119f4576001600160a01b0385165f90815260986020526040812085519091908690849081106119a7576119a7615685565b60200260200101516001600160a01b03166001600160a01b031681526020019081526020015f20548282815181106119e1576119e1615685565b6020908102919091010152600101611970565b509392505050565b6002611a07816123ae565b611a0f6123dc565b855f5b81811015611aa257611a9a898983818110611a2f57611a2f615685565b9050602002810190611a4191906158ee565b611a4a90615902565b888884818110611a5c57611a5c615685565b9050602002810190611a6e91906156b7565b888886818110611a8057611a80615685565b9050602002016020810190611a95919061590d565b61365f565b600101611a12565b5050611aae600160c955565b50505050505050565b611abf614925565b5f82815260a46020908152604091829020825160e08101845281546001600160a01b03908116825260018301548116828501526002830154168185015260038201546060820152600482015463ffffffff1660808201526005820180548551818602810186019096528086529194929360a08601939290830182828015611b6d57602002820191905f5260205f20905b81546001600160a01b03168152600190910190602001808311611b4f575b5050505050815260200160068201805480602002602001604051908101604052809291908181526020018280548015611bc357602002820191905f5260205f20905b815481526020019060010190808311611baf575b5050505050815250509050919050565b6060611bde33611eb4565b9050610c9c848484612015565b6001600160a01b038083165f90815260a260209081526040808320938516835292815282822083519182019093529154825290610c9c90613aa1565b60608082516001600160401b03811115611c4357611c43614b87565b604051908082528060200260200182016040528015611c6c578160200160208202803683370190505b50915082516001600160401b03811115611c8857611c88614b87565b604051908082528060200260200182016040528015611cb1578160200160208202803683370190505b506001600160a01b038086165f908152609a6020526040812054929350911690611cdc868387612435565b90505f5b8551811015611ea9575f611d0c878381518110611cff57611cff615685565b6020026020010151613368565b9050806001600160a01b031663fe243a1789898581518110611d3057611d30615685565b60200260200101516040518363ffffffff1660e01b8152600401611d6a9291906001600160a01b0392831681529116602082015260400190565b602060405180830381865afa158015611d85573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611da991906158d7565b858381518110611dbb57611dbb615685565b6020026020010181815250505f60a25f8a6001600160a01b03166001600160a01b031681526020019081526020015f205f898581518110611dfe57611dfe615685565b60200260200101516001600160a01b03166001600160a01b031681526020019081526020015f206040518060200160405290815f820154815250509050611e82868481518110611e5057611e50615685565b6020026020010151858581518110611e6a57611e6a615685565b6020026020010151836136419092919063ffffffff16565b878481518110611e9457611e94615685565b60209081029190910101525050600101611ce0565b5050505b9250929050565b6060611ebe6123dc565b611ec782610f4a565b611ee45760405163a5c7c44560e01b815260040160405180910390fd5b611eed826117ae565b15611f0b576040516311ca333560e31b815260040160405180910390fd5b336001600160a01b03831614611fc3576001600160a01b038083165f908152609a602052604090205416611f3e81613132565b80611f6457506001600160a01b038181165f908152609960205260409020600101541633145b611f8157604051631e499a2360e11b815260040160405180910390fd5b806001600160a01b0316836001600160a01b03167ff0eddf07e6ea14f388b47e1e94a0f464ecbd9eed4171130e0fc0e99fb4030a8a60405160405180910390a3505b611fcc82613ac0565b9050611fd8600160c955565b919050565b6002611fe8816123ae565b611ff06123dc565b612004611ffc86615902565b85858561365f565b61200e600160c955565b5050505050565b61201d6123dc565b61202633610f4a565b1561204457604051633bf2b50360e11b815260040160405180910390fd5b61204d836117ae565b61206a576040516325ec6c1f60e01b815260040160405180910390fd5b61207633848484613d00565b610fc83384612c82565b60605f83516001600160401b0381111561209c5761209c614b87565b6040519080825280602002602001820160405280156120cf57816020015b60608152602001906001900390816120ba5790505b5090505f5b84518110156119f4576121008582815181106120f2576120f2615685565b602002602001015185611926565b82828151811061211257612112615685565b60209081029190910101526001016120d4565b60408051808201909152600a81526922b4b3b2b72630bcb2b960b11b6020909101525f7f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f7f71b625cfad44bac63b13dba07f2e1d6084ee04b6f8752101ece6126d584ee6ea612192613dbf565b805160209182012060408051928301949094529281019190915260608101919091524660808201523060a082015260c00160405160208183030381529060405280519060200120905090565b6121e6613e34565b6066548019821981161461220d5760405163c61dca5d60e01b815260040160405180910390fd5b606682905560405182815233907f3582d1828e26bf56bd801502bc021ac0bc8afb57c826e4986b45593c8fad389c906020015b60405180910390a25050565b6001600160a01b0381165f90815260a3602052604090206060906117e090613ee5565b5f54610100900460ff161580801561228d57505f54600160ff909116105b806122a65750303b1580156122a657505f5460ff166001145b61230e5760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201526d191e481a5b9a5d1a585b1a5e995960921b60648201526084015b60405180910390fd5b5f805460ff19166001179055801561232f575f805461ff0019166101001790555b61233882612bc5565b8015610b3f575f805461ff0019169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15050565b5f612389612125565b60405161190160f01b602082015260228101919091526042810183905260620161102d565b606654600160ff83161b908116036123d95760405163840a48d560e01b815260040160405180910390fd5b50565b600260c9540361242e5760405162461bcd60e51b815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c006044820152606401612305565b600260c955565b60605f82516001600160401b0381111561245157612451614b87565b60405190808252806020026020018201604052801561247a578160200160208202803683370190505b5090505f7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663547afb8786866040518363ffffffff1660e01b81526004016124cc929190615928565b5f60405180830381865afa1580156124e6573d5f5f3e3d5ffd5b505050506040513d5f823e601f3d908101601f1916820160405261250d919081019061594b565b90505f5b845181101561257c576125578786838151811061253057612530615685565b602002602001015184848151811061254a5761254a615685565b6020026020010151612f0b565b83828151811061256957612569615685565b6020908102919091010152600101612511565b509095945050505050565b5f6001600160a01b0386166125af576040516339b190bb60e11b815260040160405180910390fd5b83515f036125d05760405163796cc52560e01b815260040160405180910390fd5b5f84516001600160401b038111156125ea576125ea614b87565b604051908082528060200260200182016040528015612613578160200160208202803683370190505b5090505f85516001600160401b0381111561263057612630614b87565b604051908082528060200260200182016040528015612659578160200160208202803683370190505b5090505f5b8651811015612955575f61267d888381518110611cff57611cff615685565b90505f60a25f8c6001600160a01b03166001600160a01b031681526020019081526020015f205f8a85815181106126b6576126b6615685565b60200260200101516001600160a01b03166001600160a01b031681526020019081526020015f20905061272f8884815181106126f4576126f4615685565b602002602001015188858151811061270e5761270e615685565b60209081029190910181015160408051928301905284548252909190613641565b84848151811061274157612741615685565b60200260200101818152505061278088848151811061276257612762615685565b60209081029190910181015160408051928301905283548252613ef1565b85848151811061279257612792615685565b60209081029190910101526001600160a01b038a1615612827576127e98a8a85815181106127c2576127c2615685565b60200260200101518786815181106127dc576127dc615685565b6020026020010151613f05565b6128278a8c8b868151811061280057612800615685565b602002602001015187878151811061281a5761281a615685565b60200260200101516132ee565b5f826001600160a01b031663724af4238d8c878151811061284a5761284a615685565b60200260200101518c888151811061286457612864615685565b60200260200101516040518463ffffffff1660e01b815260040161288a939291906159da565b6020604051808303815f875af11580156128a6573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906128ca91906158d7565b9050805f03612947575f82557f8be932bac54561f27260f95463d9b8ab37e06b2842e5ee2404157cc13df6eb8f8c8b868151811061290a5761290a615685565b602002602001015161292f856040518060200160405290815f82015481525050613aa1565b60405161293e939291906159da565b60405180910390a15b50505080600101905061265e565b506001600160a01b0388165f908152609f6020526040812080549182919061297c836159fe565b91905055505f6040518060e001604052808b6001600160a01b031681526020018a6001600160a01b031681526020018b6001600160a01b031681526020018381526020014363ffffffff1681526020018981526020018581525090505f6129e28261101b565b5f818152609e602090815260408083208054600160ff19909116811790915560a4835292819020865181546001600160a01b03199081166001600160a01b039283161783558885015195830180548216968316969096179095559187015160028201805490951692169190911790925560608501516003830155608085015160048301805463ffffffff191663ffffffff90921691909117905560a085015180519394508593612a98926005850192019061497e565b5060c08201518051612ab49160068401916020909101906149e1565b5050506001600160a01b038b165f90815260a360205260409020612ad89082613f6f565b507f26b2aae26516e8719ef50ea2f6831a2efbd4e37dccdf0f6936b27bc08e793e30818386604051612b0c93929190615a16565b60405180910390a19a9950505050505050505050565b60405163237dfb4760e11b81523360048201527f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316906346fbf68e90602401602060405180830381865afa158015612b84573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190612ba89190615a40565b61101957604051631d77d47760e21b815260040160405180910390fd5b606681905560405181815233907fab40a374bc51de372200a8bc981af8c9ecdc08dfdaef0bb6e09f88f3c616ef3d9060200160405180910390a250565b5f61188882612c1a612c1387613aa1565b8690613f7a565b90613f7a565b6001600160a01b038281165f8181526099602090815260409182902060010180546001600160a01b0319169486169485179055905192835290917f773b54c04d756fcc5e678111f7d730de3be98192000799eee3d63716055a87c69101612240565b5f612c8c816123ae565b5f5f612c97856114ae565b915091505f612ca75f8685612435565b6001600160a01b038781165f818152609a602052604080822080546001600160a01b031916948b16948517905551939450919290917fc3ee9f2e5fda98e8066a1f745b2df9285f416fe98cf2559cd21484b3d874330491a35f5b8351811015611aae5773beac0eeeeeeeeeeeeeeeeeeeeeeeeeeeeeebeac06001600160a01b0316848281518110612d3a57612d3a615685565b60200260200101516001600160a01b031603612eaa5760405163a3d75e0960e01b81526001600160a01b0388811660048301525f917f00000000000000000000000000000000000000000000000000000000000000009091169063a3d75e0990602401602060405180830381865afa158015612db8573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190612ddc919061572a565b90505f60a25f8a6001600160a01b03166001600160a01b031681526020019081526020015f205f878581518110612e1557612e15615685565b60200260200101516001600160a01b03166001600160a01b031681526020019081526020015f206040518060200160405290815f820154815250509050612e89858481518110612e6757612e67615685565b6020026020010151836001600160401b0316836136419092919063ffffffff16565b858481518110612e9b57612e9b615685565b60200260200101818152505050505b612f038688868481518110612ec157612ec1615685565b60200260200101515f878681518110612edc57612edc615685565b6020026020010151878781518110612ef657612ef6615685565b6020026020010151612fed565b600101612d01565b5f73beac0eeeeeeeeeeeeeeeeeeeeeeeeeeeeeebeabf196001600160a01b03841601612fdd5760405163a3d75e0960e01b81526001600160a01b0385811660048301525f917f00000000000000000000000000000000000000000000000000000000000000009091169063a3d75e0990602401602060405180830381865afa158015612f99573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190612fbd919061572a565b9050612fd56001600160401b0384811690831661362d565b915050610c9c565b506001600160401b031692915050565b805f0361300d57604051630a33bc6960e21b815260040160405180910390fd5b811561312a576001600160a01b038086165f90815260a26020908152604080832093881683529290522061304381858585613f8e565b6040805160208101909152815481527f8be932bac54561f27260f95463d9b8ab37e06b2842e5ee2404157cc13df6eb8f908790879061308190613aa1565b604051613090939291906159da565b60405180910390a16130a186610f4a565b15611aae576001600160a01b038088165f908152609860209081526040808320938916835292905290812080548592906130dc908490615759565b92505081905550866001600160a01b03167f1ec042c965e2edd7107b51188ee0f383e22e76179041ab3a9d18ff151405166c878786604051613120939291906159da565b60405180910390a2505b505050505050565b604051631beb2b9760e31b81526001600160a01b0382811660048301523360248301523060448301525f80356001600160e01b0319166064840152917f00000000000000000000000000000000000000000000000000000000000000009091169063df595cb8906084016020604051808303815f875af11580156131b8573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906117e09190615a40565b60605f6131e883614009565b6040805160208082528183019092529192505f91906020820181803683375050509182525060208101929092525090565b5f6132278483856001614030565b6118889085615a5b565b6001600160a01b038085165f90815260a560209081526040808320938716835292905290812081906132629061408b565b90505f6132c860016132947f000000000000000000000000000000000000000000000000000000000000000043615a6e565b61329e9190615a6e565b6001600160a01b03808a165f90815260a560209081526040808320938c16835292905220906140a5565b90505f6132d58284615a5b565b90506132e28187876140c1565b98975050505050505050565b6001600160a01b038085165f90815260986020908152604080832093861683529290529081208054839290613324908490615a5b565b92505081905550836001600160a01b03167f6909600037b75d7b4733aedd815442b5ec018a827751c832aaff64eba5d6d2dd848484604051611918939291906159da565b5f6001600160a01b03821673beac0eeeeeeeeeeeeeeeeeeeeeeeeeeeeeebeac0146133b3577f00000000000000000000000000000000000000000000000000000000000000006117e0565b7f000000000000000000000000000000000000000000000000000000000000000092915050565b6133e2614925565b5f82815260a46020908152604091829020825160e08101845281546001600160a01b0390811682526001830154811682850152600283015416818501526003820154606082810191909152600483015463ffffffff1660808301526005830180548651818702810187019097528087529195929460a0860193929083018282801561349457602002820191905f5260205f20905b81546001600160a01b03168152600190910190602001808311613476575b50505050508152602001600682018054806020026020016040519081016040528092919081815260200182805480156134ea57602002820191905f5260205f20905b8154815260200190600101908083116134d6575b50505050508152505091508160a00151516001600160401b0381111561351257613512614b87565b60405190808252806020026020018201604052801561353b578160200160208202803683370190505b5090505f7f0000000000000000000000000000000000000000000000000000000000000000836080015161356f9190615a8a565b90505f4363ffffffff168263ffffffff16106135a05761359b845f015185602001518660a00151612435565b6135b7565b6135b7845f015185602001518660a00151856140df565b90505f5b8460a00151518110156112fb576136088560c0015182815181106135e1576135e1615685565b60200260200101518383815181106135fb576135fb615685565b602002602001015161420d565b84828151811061361a5761361a615685565b60209081029190910101526001016135bb565b5f610c9c8383670de0b6b3a7640000614218565b5f6118888261365961365287613aa1565b869061362d565b9061362d565b60a0840151518214613684576040516343714afd60e01b815260040160405180910390fd5b83604001516001600160a01b0316336001600160a01b0316146136ba576040516316110d3560e21b815260040160405180910390fd5b5f6136c48561101b565b5f818152609e602052604090205490915060ff166136f5576040516387c9d21960e01b815260040160405180910390fd5b60605f7f000000000000000000000000000000000000000000000000000000000000000087608001516137289190615a8a565b90508063ffffffff164363ffffffff1611613756576040516378f67ae160e11b815260040160405180910390fd5b61376d875f015188602001518960a00151846140df565b87516001600160a01b03165f90815260a3602052604090209092506137939150836142fd565b505f82815260a46020526040812080546001600160a01b031990811682556001820180548216905560028201805490911690556003810182905560048101805463ffffffff19169055906137ea6005830182614a1a565b6137f7600683015f614a1a565b50505f828152609e602052604090819020805460ff19169055517f1f40400889274ed07b24845e5054a87a0cab969eb1277aafe61ae352e7c32a00906138409084815260200190565b60405180910390a185516001600160a01b039081165f908152609a6020526040812054885160a08a0151919093169261387a918490612435565b90505f5b8860a0015151811015613a96575f6138a58a60a001518381518110611cff57611cff615685565b90505f6138db8b60c0015184815181106138c1576138c1615685565b60200260200101518785815181106135fb576135fb615685565b9050805f036138eb575050613a8e565b87156139b957816001600160a01b0316632eae418c8c5f01518d60a00151868151811061391a5761391a615685565b60200260200101518d8d8881811061393457613934615685565b90506020020160208101906139499190614eb6565b60405160e085901b6001600160e01b03191681526001600160a01b03938416600482015291831660248301529091166044820152606481018490526084015f604051808303815f87803b15801561399e575f5ffd5b505af11580156139b0573d5f5f3e3d5ffd5b50505050613a8b565b5f5f836001600160a01b03166350ff72258e5f01518f60a0015188815181106139e4576139e4615685565b6020026020010151866040518463ffffffff1660e01b8152600401613a0b939291906159da565b60408051808303815f875af1158015613a26573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190613a4a9190615aa6565b91509150613a88878e5f01518f60a001518881518110613a6c57613a6c615685565b602002602001015185858b8b81518110612ef657612ef6615685565b50505b50505b60010161387e565b505050505050505050565b80515f9015613ab15781516117e0565b670de0b6b3a764000092915050565b60606001613acd816123ae565b6001600160a01b038084165f818152609a602052604080822080546001600160a01b0319811690915590519316928392917ffee30966a256b71e14bc0ebfc94315e28ef4a97a7131a9e2b7a310a73af4467691a35f5f613b2c866114ae565b9150915081515f03613b4057505050613cfa565b81516001600160401b03811115613b5957613b59614b87565b604051908082528060200260200182016040528015613b82578160200160208202803683370190505b5094505f613b91878585612435565b90505f5b8351811015613cf4576040805160018082528183019092525f916020808301908036833750506040805160018082528183019092529293505f9291506020808301908036833750506040805160018082528183019092529293505f92915060208083019080368337019050509050868481518110613c1557613c15615685565b6020026020010151835f81518110613c2f57613c2f615685565b60200260200101906001600160a01b031690816001600160a01b031681525050858481518110613c6157613c61615685565b6020026020010151825f81518110613c7b57613c7b615685565b602002602001018181525050848481518110613c9957613c99615685565b6020026020010151815f81518110613cb357613cb3615685565b602002602001018181525050613ccc8b89858585612587565b8a8581518110613cde57613cde615685565b6020908102919091010152505050600101613b95565b50505050505b50919050565b6001600160a01b038084165f908152609960205260409020600101541680613d285750610df1565b6001600160a01b0381165f908152609c6020908152604080832085845290915290205460ff1615613d6c57604051630d4c4c9160e21b815260040160405180910390fd5b6001600160a01b0381165f908152609c602090815260408083208584528252909120805460ff1916600117905583015161200e908290613db390889088908490889061080f565b85516020870151614308565b60605f613deb7f00000000000000000000000000000000000000000000000000000000000000006131dc565b9050805f81518110613dff57613dff615685565b016020908101516040516001600160f81b03199091169181019190915260210160405160208183030381529060405291505090565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663eab66d7a6040518163ffffffff1660e01b8152600401602060405180830381865afa158015613e90573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190613eb49190615ac8565b6001600160a01b0316336001600160a01b0316146110195760405163794821ff60e01b815260040160405180910390fd5b60605f610c9c8361435a565b5f610c9c613efe84613aa1565b839061362d565b6001600160a01b038084165f90815260a5602090815260408083209386168352929052908120613f349061408b565b9050610df143613f448484615759565b6001600160a01b038088165f90815260a560209081526040808320938a1683529290522091906143b3565b5f610c9c83836143be565b5f610c9c83670de0b6b3a764000084614218565b825f03613fba57604080516020810190915284548152613fb3908290612c1a90613aa1565b8455610df1565b6040805160208101909152845481525f90613fd6908584613641565b90505f613fe38483615759565b90505f613ffe84612c1a613ff7888a615759565b8590613f7a565b875550505050505050565b5f60ff8216601f8111156117e057604051632cd44ac360e21b815260040160405180910390fd5b5f5f61403d868686614218565b9050600183600281111561405357614053615ae3565b14801561406f57505f848061406a5761406a615af7565b868809115b156140825761407f600182615759565b90505b95945050505050565b5f614096828261440a565b6001600160e01b031692915050565b5f6140b183838361444f565b6001600160e01b03169392505050565b5f6118886140cf8385615b0b565b85906001600160401b031661362d565b60605f83516001600160401b038111156140fb576140fb614b87565b604051908082528060200260200182016040528015614124578160200160208202803683370190505b5090505f7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03166394d7d00c8787876040518463ffffffff1660e01b815260040161417893929190615b2a565b5f60405180830381865afa158015614192573d5f5f3e3d5ffd5b505050506040513d5f823e601f3d908101601f191682016040526141b9919081019061594b565b90505f5b8551811015614201576141dc8887838151811061253057612530615685565b8382815181106141ee576141ee615685565b60209081029190910101526001016141bd565b50909695505050505050565b5f610c9c838361362d565b5f80805f19858709858702925082811083820303915050805f0361424f5783828161424557614245615af7565b0492505050610c9c565b8084116142965760405162461bcd60e51b81526020600482015260156024820152744d6174683a206d756c446976206f766572666c6f7760581b6044820152606401612305565b5f8486880960026001871981018816978890046003810283188082028403028082028403028082028403028082028403028082028403029081029092039091025f889003889004909101858311909403939093029303949094049190911702949350505050565b5f610c9c8383614498565b4281101561432957604051630819bdcd60e01b815260040160405180910390fd5b61433d6001600160a01b038516848461457b565b610df157604051638baa579f60e01b815260040160405180910390fd5b6060815f018054806020026020016040519081016040528092919081815260200182805480156143a757602002820191905f5260205f20905b815481526020019060010190808311614393575b50505050509050919050565b610fd28383836145cf565b5f81815260018301602052604081205461440357508154600181810184555f8481526020808220909301849055845484825282860190935260409020919091556117e0565b505f6117e0565b81545f9080156144475761443084614423600184615a5b565b5f91825260209091200190565b5464010000000090046001600160e01b0316611888565b509092915050565b82545f9081614460868683856146d5565b9050801561448e5761447786614423600184615a5b565b5464010000000090046001600160e01b031661088d565b5091949350505050565b5f8181526001830160205260408120548015614572575f6144ba600183615a5b565b85549091505f906144cd90600190615a5b565b905081811461452c575f865f0182815481106144eb576144eb615685565b905f5260205f200154905080875f01848154811061450b5761450b615685565b5f918252602080832090910192909255918252600188019052604090208390555b855486908061453d5761453d615b63565b600190038181905f5260205f20015f90559055856001015f8681526020019081526020015f205f9055600193505050506117e0565b5f9150506117e0565b5f5f5f6145888585614728565b90925090505f8160048111156145a0576145a0615ae3565b1480156145be5750856001600160a01b0316826001600160a01b0316145b8061088d575061088d868686614767565b82548015614687575f6145e785614423600185615a5b565b60408051808201909152905463ffffffff8082168084526401000000009092046001600160e01b03166020840152919250908516101561463a5760405163151b8e3f60e11b815260040160405180910390fd5b805163ffffffff808616911603614685578261465b86614423600186615a5b565b80546001600160e01b03929092166401000000000263ffffffff9092169190911790555050505050565b505b506040805180820190915263ffffffff92831681526001600160e01b03918216602080830191825285546001810187555f968752952091519051909216640100000000029190921617910155565b5f5b818310156119f4575f6146ea848461484e565b5f8781526020902090915063ffffffff86169082015463ffffffff16111561471457809250614722565b61471f816001615759565b93505b506146d7565b5f5f825160410361475c576020830151604084015160608501515f1a61475087828585614868565b94509450505050611ead565b505f90506002611ead565b5f5f5f856001600160a01b0316631626ba7e60e01b868660405160240161478f929190615b77565b60408051601f198184030181529181526020820180516001600160e01b03166001600160e01b03199094169390931790925290516147cd9190615b8f565b5f60405180830381855afa9150503d805f8114614805576040519150601f19603f3d011682016040523d82523d5f602084013e61480a565b606091505b509150915081801561481e57506020815110155b801561088d57508051630b135d3f60e11b9061484390830160209081019084016158d7565b149695505050505050565b5f61485c6002848418615ba5565b610c9c90848416615759565b5f807f7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a083111561489d57505f9050600361491c565b604080515f8082526020820180845289905260ff881692820192909252606081018690526080810185905260019060a0016020604051602081039080840390855afa1580156148ee573d5f5f3e3d5ffd5b5050604051601f1901519150506001600160a01b038116614916575f6001925092505061491c565b91505f90505b94509492505050565b6040518060e001604052805f6001600160a01b031681526020015f6001600160a01b031681526020015f6001600160a01b031681526020015f81526020015f63ffffffff16815260200160608152602001606081525090565b828054828255905f5260205f209081019282156149d1579160200282015b828111156149d157825182546001600160a01b0319166001600160a01b0390911617825560209092019160019091019061499c565b506149dd929150614a31565b5090565b828054828255905f5260205f209081019282156149d1579160200282015b828111156149d15782518255916020019190600101906149ff565b5080545f8255905f5260205f20908101906123d991905b5b808211156149dd575f8155600101614a32565b6001600160a01b03811681146123d9575f5ffd5b8035611fd881614a45565b5f5f5f5f5f60a08688031215614a78575f5ffd5b8535614a8381614a45565b94506020860135614a9381614a45565b93506040860135614aa381614a45565b94979396509394606081013594506080013592915050565b5f5f83601f840112614acb575f5ffd5b5081356001600160401b03811115614ae1575f5ffd5b6020830191508360208260051b8501011115611ead575f5ffd5b5f5f60208385031215614b0c575f5ffd5b82356001600160401b03811115614b21575f5ffd5b614b2d85828601614abb565b90969095509350505050565b602080825282518282018190525f918401906040840190835b8181101561257c578351835260209384019390920191600101614b52565b5f60208284031215614b80575f5ffd5b5035919050565b634e487b7160e01b5f52604160045260245ffd5b60405160e081016001600160401b0381118282101715614bbd57614bbd614b87565b60405290565b604080519081016001600160401b0381118282101715614bbd57614bbd614b87565b604051601f8201601f191681016001600160401b0381118282101715614c0d57614c0d614b87565b604052919050565b5f6001600160401b03821115614c2d57614c2d614b87565b5060051b60200190565b5f82601f830112614c46575f5ffd5b8135614c59614c5482614c15565b614be5565b8082825260208201915060208360051b860101925085831115614c7a575f5ffd5b602085015b83811015614ca0578035614c9281614a45565b835260209283019201614c7f565b5095945050505050565b5f82601f830112614cb9575f5ffd5b8135614cc7614c5482614c15565b8082825260208201915060208360051b860101925085831115614ce8575f5ffd5b602085015b83811015614ca0578035835260209283019201614ced565b5f5f5f60608486031215614d17575f5ffd5b8335614d2281614a45565b925060208401356001600160401b03811115614d3c575f5ffd5b614d4886828701614c37565b92505060408401356001600160401b03811115614d63575f5ffd5b614d6f86828701614caa565b9150509250925092565b5f8151808452602084019350602083015f5b82811015614da9578151865260209586019590910190600101614d8b565b5093949350505050565b602081525f610c9c6020830184614d79565b803563ffffffff81168114611fd8575f5ffd5b5f5f83601f840112614de8575f5ffd5b5081356001600160401b03811115614dfe575f5ffd5b602083019150836020828501011115611ead575f5ffd5b5f5f5f5f60608587031215614e28575f5ffd5b8435614e3381614a45565b9350614e4160208601614dc5565b925060408501356001600160401b03811115614e5b575f5ffd5b614e6787828801614dd8565b95989497509550505050565b5f5f5f5f60808587031215614e86575f5ffd5b8435614e9181614a45565b93506020850135614ea181614a45565b93969395505050506040820135916060013590565b5f60208284031215614ec6575f5ffd5b8135610c9c81614a45565b5f5f60408385031215614ee2575f5ffd5b8235614eed81614a45565b91506020830135614efd81614a45565b809150509250929050565b5f81518084528060208401602086015e5f602082860101526020601f19601f83011685010191505092915050565b602081525f610c9c6020830184614f08565b5f60e08284031215614f58575f5ffd5b614f60614b9b565b9050614f6b82614a59565b8152614f7960208301614a59565b6020820152614f8a60408301614a59565b604082015260608281013590820152614fa560808301614dc5565b608082015260a08201356001600160401b03811115614fc2575f5ffd5b614fce84828501614c37565b60a08301525060c08201356001600160401b03811115614fec575f5ffd5b614ff884828501614caa565b60c08301525092915050565b5f60208284031215615014575f5ffd5b81356001600160401b03811115615029575f5ffd5b61188884828501614f48565b5f60208284031215615045575f5ffd5b813560ff81168114610c9c575f5ffd5b6001600160401b03811681146123d9575f5ffd5b5f5f5f5f5f5f86880360e081121561507f575f5ffd5b873561508a81614a45565b96506040601f198201121561509d575f5ffd5b506020870194506060870135935060808701356150b981614a45565b925060a08701356150c981615055565b915060c08701356150d981615055565b809150509295509295509295565b5f8151808452602084019350602083015f5b82811015614da95781516001600160a01b03168652602095860195909101906001016150f9565b80516001600160a01b03908116835260208083015182169084015260408083015190911690830152606080820151908301526080808201515f9161516b9085018263ffffffff169052565b5060a082015160e060a085015261518560e08501826150e7565b905060c083015184820360c08601526140828282614d79565b604081525f6151b06040830185615120565b82810360208401526140828185614d79565b5f82825180855260208501945060208160051b830101602085015f5b8381101561420157601f198584030188526151fa838351614d79565b60209889019890935091909101906001016151de565b5f604082016040835280855180835260608501915060608160051b8601019250602087015f5b8281101561526757605f19878603018452615252858351615120565b94506020938401939190910190600101615236565b50505050828103602084015261408281856151c2565b5f5f5f6060848603121561528f575f5ffd5b833561529a81614a45565b92506020840135915060408401356152b181615055565b809150509250925092565b604081525f6151b060408301856150e7565b5f5f5f604084860312156152e0575f5ffd5b83356152eb81614a45565b925060208401356001600160401b03811115615305575f5ffd5b61531186828701614dd8565b9497909650939450505050565b5f5f6040838503121561532f575f5ffd5b823561533a81614a45565b915060208301356001600160401b03811115615354575f5ffd5b61536085828601614c37565b9150509250929050565b5f5f5f5f5f5f6060878903121561537f575f5ffd5b86356001600160401b03811115615394575f5ffd5b6153a089828a01614abb565b90975095505060208701356001600160401b038111156153be575f5ffd5b6153ca89828a01614abb565b90955093505060408701356001600160401b038111156153e8575f5ffd5b6153f489828a01614abb565b979a9699509497509295939492505050565b602081525f610c9c6020830184615120565b5f5f5f6060848603121561542a575f5ffd5b833561543581614a45565b925060208401356001600160401b0381111561544f575f5ffd5b840160408187031215615460575f5ffd5b615468614bc3565b81356001600160401b0381111561547d575f5ffd5b8201601f8101881361548d575f5ffd5b80356001600160401b038111156154a6576154a6614b87565b6154b9601f8201601f1916602001614be5565b8181528960208385010111156154cd575f5ffd5b816020840160208301375f60209282018301528352928301359282019290925293969395505050506040919091013590565b5f5f60408385031215615510575f5ffd5b823561551b81614a45565b946020939093013593505050565b604081525f6151b06040830185614d79565b80151581146123d9575f5ffd5b5f5f5f5f6060858703121561555b575f5ffd5b84356001600160401b03811115615570575f5ffd5b850160e08188031215615581575f5ffd5b935060208501356001600160401b0381111561559b575f5ffd5b6155a787828801614abb565b90945092505060408501356155bb8161553b565b939692955090935050565b5f5f604083850312156155d7575f5ffd5b82356001600160401b038111156155ec575f5ffd5b8301601f810185136155fc575f5ffd5b803561560a614c5482614c15565b8082825260208201915060208360051b85010192508783111561562b575f5ffd5b6020840193505b8284101561565657833561564581614a45565b825260209384019390910190615632565b945050505060208301356001600160401b03811115615354575f5ffd5b602081525f610c9c60208301846151c2565b634e487b7160e01b5f52603260045260245ffd5b5f8235605e198336030181126156ad575f5ffd5b9190910192915050565b5f5f8335601e198436030181126156cc575f5ffd5b8301803591506001600160401b038211156156e5575f5ffd5b6020019150600581901b3603821315611ead575f5ffd5b60208152816020820152818360408301375f818301604090810191909152601f909201601f19160101919050565b5f6020828403121561573a575f5ffd5b8151610c9c81615055565b634e487b7160e01b5f52601160045260245ffd5b808201808211156117e0576117e0615745565b60a08101853561577b81614a45565b6001600160a01b0316825263ffffffff61579760208801614dc5565b16602083015260408201949094526001600160a01b03929092166060830152608090910152919050565b5f82601f8301126157d0575f5ffd5b81516157de614c5482614c15565b8082825260208201915060208360051b8601019250858311156157ff575f5ffd5b602085015b83811015614ca0578051835260209283019201615804565b5f5f6040838503121561582d575f5ffd5b82516001600160401b03811115615842575f5ffd5b8301601f81018513615852575f5ffd5b8051615860614c5482614c15565b8082825260208201915060208360051b850101925087831115615881575f5ffd5b6020840193505b828410156158ac57835161589b81614a45565b825260209384019390910190615888565b8095505050505060208301516001600160401b038111156158cb575f5ffd5b615360858286016157c1565b5f602082840312156158e7575f5ffd5b5051919050565b5f823560de198336030181126156ad575f5ffd5b5f6117e03683614f48565b5f6020828403121561591d575f5ffd5b8135610c9c8161553b565b6001600160a01b03831681526040602082018190525f90611888908301846150e7565b5f6020828403121561595b575f5ffd5b81516001600160401b03811115615970575f5ffd5b8201601f81018413615980575f5ffd5b805161598e614c5482614c15565b8082825260208201915060208360051b8501019250868311156159af575f5ffd5b6020840193505b8284101561088d5783516159c981615055565b8252602093840193909101906159b6565b6001600160a01b039384168152919092166020820152604081019190915260600190565b5f60018201615a0f57615a0f615745565b5060010190565b838152606060208201525f615a2e6060830185615120565b828103604084015261088d8185614d79565b5f60208284031215615a50575f5ffd5b8151610c9c8161553b565b818103818111156117e0576117e0615745565b63ffffffff82811682821603908111156117e0576117e0615745565b63ffffffff81811683821601908111156117e0576117e0615745565b5f5f60408385031215615ab7575f5ffd5b505080516020909101519092909150565b5f60208284031215615ad8575f5ffd5b8151610c9c81614a45565b634e487b7160e01b5f52602160045260245ffd5b634e487b7160e01b5f52601260045260245ffd5b6001600160401b0382811682821603908111156117e0576117e0615745565b6001600160a01b03841681526060602082018190525f90615b4d908301856150e7565b905063ffffffff83166040830152949350505050565b634e487b7160e01b5f52603160045260245ffd5b828152604060208201525f6118886040830184614f08565b5f82518060208501845e5f920191825250919050565b5f82615bbf57634e487b7160e01b5f52601260045260245ffd5b50049056fea2646970667358221220b68a56422af1091ae5c3fd49e40db6fa64d23aa4e07d692e742b225e5b08246e64736f6c634300081b0033", + Bin: "0x610160604052348015610010575f5ffd5b5060405161605038038061605083398101604081905261002f916101d9565b808084898989878a6001600160a01b03811661005e576040516339b190bb60e11b815260040160405180910390fd5b6001600160a01b0390811660805293841660a05291831660c052821660e05263ffffffff16610100521661012052610095816100b0565b61014052506100a490506100f6565b50505050505050610364565b5f5f829050601f815111156100e3578260405163305a27a960e01b81526004016100da9190610309565b60405180910390fd5b80516100ee8261033e565b179392505050565b5f54610100900460ff161561015d5760405162461bcd60e51b815260206004820152602760248201527f496e697469616c697a61626c653a20636f6e747261637420697320696e697469604482015266616c697a696e6760c81b60648201526084016100da565b5f5460ff908116146101ac575f805460ff191660ff9081179091556040519081527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b565b6001600160a01b03811681146101c2575f5ffd5b50565b634e487b7160e01b5f52604160045260245ffd5b5f5f5f5f5f5f5f60e0888a0312156101ef575f5ffd5b87516101fa816101ae565b602089015190975061020b816101ae565b604089015190965061021c816101ae565b606089015190955061022d816101ae565b608089015190945061023e816101ae565b60a089015190935063ffffffff81168114610257575f5ffd5b60c08901519092506001600160401b03811115610272575f5ffd5b88015f601f82018b13610283575f5ffd5b81516001600160401b0381111561029c5761029c6101c5565b604051601f8201601f19908116603f011681016001600160401b03811182821017156102ca576102ca6101c5565b6040528181528382016020018d10156102e1575f5ffd5b8160208501602083015e5f602083830101528092508094505050505092959891949750929550565b602081525f82518060208401528060208501604085015e5f604082850101526040601f19601f83011684010191505092915050565b8051602080830151919081101561035e575f198160200360031b1b821691505b50919050565b60805160a05160c05160e051610100516101205161014051615bfa6104565f395f8181610fde0152613dc701525f8181610412015261317001525f81816107030152818161326f0152818161354101526136fa01525f818161075301528181610cf301528181610eb601528181611056015281816113af0152818161181101528181612480015261412a01525f818161043901528181610e340152818161130e0152818161158201528181612d7101528181612f5201526133b501525f818161036f01528181610e02015281816114d6015261338f01525f81816105e201528181612b370152613e360152615bfa5ff3fe608060405234801561000f575f5ffd5b50600436106102b1575f3560e01c80636d70f7ae1161017b578063bb45fef2116100e4578063e4cc3f901161009e578063f698da2511610079578063f698da25146107ce578063fabc1cbc146107d6578063fd8aa88d146107e9578063fe4b84df146107fc575f5ffd5b8063e4cc3f9014610788578063eea9064b1461079b578063f0e0e676146107ae575f5ffd5b8063bb45fef2146106b9578063bfae3fd2146106e6578063c448feb8146106f9578063c978f7ac1461072d578063ca8aa7c71461074e578063da8be86414610775575f5ffd5b80639104c319116101355780639104c319146106175780639435bb431461063257806399f5371b14610645578063a178848414610665578063a33a343314610684578063b7f06ebe14610697575f5ffd5b80636d70f7ae1461057a5780636e1744481461058d578063778e55f3146105a057806378296ec5146105ca578063886f1195146105dd5780639004134714610604575f5ffd5b806354b7c96c1161021d5780635c975abb116101d75780635c975abb146104d45780635d975e88146104dc5780635dd68579146104fd57806360a0d1ce1461051e57806365da12641461053157806366d5ba9314610559575f5ffd5b806354b7c96c1461045b57806354fd4d501461046e578063595c6a6714610483578063597b36da1461048b5780635ac86ab71461049e5780635ae679a7146104c1575f5ffd5b806339b70e381161026e57806339b70e381461036a5780633c651cf2146103a95780633cdeb5e0146103bc5780633e28391d146103ea5780634657e26a1461040d5780634665bcda14610434575f5ffd5b806304a4f979146102b55780630b9f487a146102ef5780630dd8dd0214610302578063136439dd1461032257806325df922e146103375780632aa6d88814610357575b5f5ffd5b6102dc7f14bde674c9f64b2ad00eaaee4a8bed1fabef35c7507e3c5b9cfc9436909a2dad81565b6040519081526020015b60405180910390f35b6102dc6102fd366004614a64565b61080f565b610315610310366004614afb565b610897565b6040516102e69190614b39565b610335610330366004614b70565b610b09565b005b61034a610345366004614d05565b610b43565b6040516102e69190614db3565b610335610365366004614e15565b610ca3565b6103917f000000000000000000000000000000000000000000000000000000000000000081565b6040516001600160a01b0390911681526020016102e6565b6103356103b7366004614e73565b610df7565b6103916103ca366004614eb6565b6001600160a01b039081165f908152609960205260409020600101541690565b6103fd6103f8366004614eb6565b610f4a565b60405190151581526020016102e6565b6103917f000000000000000000000000000000000000000000000000000000000000000081565b6103917f000000000000000000000000000000000000000000000000000000000000000081565b610335610469366004614ed1565b610f69565b610476610fd7565b6040516102e69190614f36565b610335611007565b6102dc610499366004615004565b61101b565b6103fd6104ac366004615035565b606654600160ff9092169190911b9081161490565b6102dc6104cf366004615069565b61104a565b6066546102dc565b6104ef6104ea366004614b70565b6111bc565b6040516102e692919061519e565b61051061050b366004614eb6565b6111d9565b6040516102e6929190615210565b61033561052c36600461527d565b611303565b61039161053f366004614eb6565b609a6020525f90815260409020546001600160a01b031681565b61056c610567366004614eb6565b6114ae565b6040516102e69291906152bc565b6103fd610588366004614eb6565b6117ae565b6102dc61059b366004614ed1565b6117e6565b6102dc6105ae366004614ed1565b609860209081525f928352604080842090915290825290205481565b6103356105d83660046152ce565b611890565b6103917f000000000000000000000000000000000000000000000000000000000000000081565b61034a61061236600461531e565b611926565b61039173beac0eeeeeeeeeeeeeeeeeeeeeeeeeeeeeebeac081565b61033561064036600461536a565b6119fc565b610658610653366004614b70565b611ab7565b6040516102e69190615406565b6102dc610673366004614eb6565b609f6020525f908152604090205481565b610315610692366004615418565b611bd3565b6103fd6106a5366004614b70565b609e6020525f908152604090205460ff1681565b6103fd6106c73660046154ff565b609c60209081525f928352604080842090915290825290205460ff1681565b6102dc6106f4366004614ed1565b611beb565b60405163ffffffff7f00000000000000000000000000000000000000000000000000000000000000001681526020016102e6565b61074061073b36600461531e565b611c27565b6040516102e6929190615529565b6103917f000000000000000000000000000000000000000000000000000000000000000081565b610315610783366004614eb6565b611eb4565b610335610796366004615548565b611fdd565b6103356107a9366004615418565b612015565b6107c16107bc3660046155c6565b612080565b6040516102e69190615673565b6102dc612125565b6103356107e4366004614b70565b6121de565b6103156107f7366004614eb6565b61224c565b61033561080a366004614b70565b61226f565b604080517f14bde674c9f64b2ad00eaaee4a8bed1fabef35c7507e3c5b9cfc9436909a2dad60208201526001600160a01b03808616928201929092528187166060820152908516608082015260a0810183905260c081018290525f9061088d9060e00160405160208183030381529060405280519060200120612380565b9695505050505050565b606060016108a4816123ae565b6108ac6123dc565b5f836001600160401b038111156108c5576108c5614b87565b6040519080825280602002602001820160405280156108ee578160200160208202803683370190505b50335f908152609a60205260408120549192506001600160a01b03909116905b85811015610afa5786868281811061092857610928615685565b905060200281019061093a9190615699565b6109489060208101906156b7565b905087878381811061095c5761095c615685565b905060200281019061096e9190615699565b61097890806156b7565b905014610998576040516343714afd60e01b815260040160405180910390fd5b5f610a0233848a8a868181106109b0576109b0615685565b90506020028101906109c29190615699565b6109cc90806156b7565b808060200260200160405190810160405280939291908181526020018383602002808284375f9201919091525061243592505050565b9050610ad433848a8a86818110610a1b57610a1b615685565b9050602002810190610a2d9190615699565b610a3790806156b7565b808060200260200160405190810160405280939291908181526020018383602002808284375f920191909152508e92508d9150889050818110610a7c57610a7c615685565b9050602002810190610a8e9190615699565b610a9c9060208101906156b7565b808060200260200160405190810160405280939291908181526020018383602002808284375f92019190915250889250612587915050565b848381518110610ae657610ae6615685565b60209081029190910101525060010161090e565b5050600160c955949350505050565b610b11612b22565b6066548181168114610b365760405163c61dca5d60e01b815260040160405180910390fd5b610b3f82612bc5565b5050565b6001600160a01b038084165f908152609a60205260408120546060921690610b6c868387612435565b90505f85516001600160401b03811115610b8857610b88614b87565b604051908082528060200260200182016040528015610bb1578160200160208202803683370190505b5090505f5b8651811015610c96576001600160a01b0388165f90815260a260205260408120885182908a9085908110610bec57610bec615685565b60200260200101516001600160a01b03166001600160a01b031681526020019081526020015f206040518060200160405290815f820154815250509050610c70878381518110610c3e57610c3e615685565b6020026020010151858481518110610c5857610c58615685565b602002602001015183612c029092919063ffffffff16565b838381518110610c8257610c82615685565b602090810291909101015250600101610bb6565b50925050505b9392505050565b610cab6123dc565b610cb433610f4a565b15610cd257604051633bf2b50360e11b815260040160405180910390fd5b604051632b6241f360e11b815233600482015263ffffffff841660248201527f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316906356c483e6906044015f604051808303815f87803b158015610d3c575f5ffd5b505af1158015610d4e573d5f5f3e3d5ffd5b50505050610d5c3385612c20565b610d663333612c82565b6040516001600160a01b038516815233907fa453db612af59e5521d6ab9284dc3e2d06af286eb1b1b7b771fce4716c19f2c19060200160405180910390a2336001600160a01b03167f02a919ed0e2acad1dd90f17ef2fa4ae5462ee1339170034a8531cca4b67080908383604051610ddf9291906156fc565b60405180910390a2610df1600160c955565b50505050565b336001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000161480610e565750336001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016145b610e735760405163045206a560e21b815260040160405180910390fd5b610e7b6123dc565b6001600160a01b038481165f908152609a602052604080822054905163152667d960e31b8152908316600482018190528684166024830152927f0000000000000000000000000000000000000000000000000000000000000000169063a9333ec890604401602060405180830381865afa158015610efb573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610f1f919061572a565b90505f610f2d878784612f0b565b9050610f3d838888888886612fed565b505050610df1600160c955565b6001600160a01b039081165f908152609a602052604090205416151590565b81610f7381613132565b610f905760405163932d94f760e01b815260040160405180910390fd5b610f986123dc565b610fa1836117ae565b610fbe576040516325ec6c1f60e01b815260040160405180910390fd5b610fc88383612c20565b610fd2600160c955565b505050565b60606110027f00000000000000000000000000000000000000000000000000000000000000006131dc565b905090565b61100f612b22565b6110195f19612bc5565b565b5f8160405160200161102d9190615406565b604051602081830303815290604052805190602001209050919050565b5f336001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001614611094576040516323d871a560e01b815260040160405180910390fd5b61109c6123dc565b6001600160a01b038088165f9081526098602090815260408083209388168352929052908120546110da906001600160401b03808716908616613219565b90505f6110e989878787613231565b90506110f58183615759565b9250611103895f88856132ee565b604080516001600160a01b038881168252602082018690528b16917fdd611f4ef63f4385f1756c86ce1f1f389a9013ba6fa07daba8528291bc2d3c30910160405180910390a261115286613368565b6001600160a01b0316633fb99ca5898989876040518563ffffffff1660e01b8152600401611183949392919061576c565b5f604051808303815f87803b15801561119a575f5ffd5b505af11580156111ac573d5f5f3e3d5ffd5b50505050505061088d600160c955565b6111c4614925565b60606111cf836133da565b9094909350915050565b6060805f6111e68461224c565b8051909150806001600160401b0381111561120357611203614b87565b60405190808252806020026020018201604052801561123c57816020015b611229614925565b8152602001906001900390816112215790505b509350806001600160401b0381111561125757611257614b87565b60405190808252806020026020018201604052801561128a57816020015b60608152602001906001900390816112755790505b5092505f5b818110156112fb576112b98382815181106112ac576112ac615685565b60200260200101516133da565b8683815181106112cb576112cb615685565b602002602001018684815181106112e4576112e4615685565b60209081029190910101919091525260010161128f565b505050915091565b336001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000161461134c57604051633213a66160e21b815260040160405180910390fd5b6113546123dc565b61135d83610f4a565b15610fc8576001600160a01b038381165f908152609a602052604080822054905163152667d960e31b81529083166004820181905273beac0eeeeeeeeeeeeeeeeeeeeeeeeeeeeeebeac06024830152927f0000000000000000000000000000000000000000000000000000000000000000169063a9333ec890604401602060405180830381865afa1580156113f4573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611418919061572a565b6001600160a01b0386165f90815260a26020908152604080832073beac0eeeeeeeeeeeeeeeeeeeeeeeeeeeeeebeac084528252808320815192830190915254815291925061147e866114766001600160401b0380871690891661362d565b849190613641565b90506114a0848873beac0eeeeeeeeeeeeeeeeeeeeeeeeeeeeeebeac0846132ee565b50505050610fd2600160c955565b6040516394f649dd60e01b81526001600160a01b03828116600483015260609182915f9182917f000000000000000000000000000000000000000000000000000000000000000016906394f649dd906024015f60405180830381865afa15801561151a573d5f5f3e3d5ffd5b505050506040513d5f823e601f3d908101601f19168201604052611541919081019061581c565b60405163fe243a1760e01b81526001600160a01b03888116600483015273beac0eeeeeeeeeeeeeeeeeeeeeeeeeeeeeebeac060248301529294509092505f917f0000000000000000000000000000000000000000000000000000000000000000169063fe243a1790604401602060405180830381865afa1580156115c7573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906115eb91906158d7565b9050805f036115ff57509094909350915050565b5f8351600161160e9190615759565b6001600160401b0381111561162557611625614b87565b60405190808252806020026020018201604052801561164e578160200160208202803683370190505b5090505f845160016116609190615759565b6001600160401b0381111561167757611677614b87565b6040519080825280602002602001820160405280156116a0578160200160208202803683370190505b50905073beac0eeeeeeeeeeeeeeeeeeeeeeeeeeeeeebeac0828651815181106116cb576116cb615685565b60200260200101906001600160a01b031690816001600160a01b03168152505082818651815181106116ff576116ff615685565b60209081029190910101525f5b85518110156117a05785818151811061172757611727615685565b602002602001015183828151811061174157611741615685565b60200260200101906001600160a01b031690816001600160a01b03168152505084818151811061177357611773615685565b602002602001015182828151811061178d5761178d615685565b602090810291909101015260010161170c565b509097909650945050505050565b5f6001600160a01b038216158015906117e057506001600160a01b038083165f818152609a6020526040902054909116145b92915050565b60405163152667d960e31b81526001600160a01b03838116600483015282811660248301525f9182917f0000000000000000000000000000000000000000000000000000000000000000169063a9333ec890604401602060405180830381865afa158015611856573d5f5f3e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061187a919061572a565b90506118888484835f613231565b949350505050565b8261189a81613132565b6118b75760405163932d94f760e01b815260040160405180910390fd5b6118c0846117ae565b6118dd576040516325ec6c1f60e01b815260040160405180910390fd5b836001600160a01b03167f02a919ed0e2acad1dd90f17ef2fa4ae5462ee1339170034a8531cca4b670809084846040516119189291906156fc565b60405180910390a250505050565b60605f82516001600160401b0381111561194257611942614b87565b60405190808252806020026020018201604052801561196b578160200160208202803683370190505b5090505f5b83518110156119f4576001600160a01b0385165f90815260986020526040812085519091908690849081106119a7576119a7615685565b60200260200101516001600160a01b03166001600160a01b031681526020019081526020015f20548282815181106119e1576119e1615685565b6020908102919091010152600101611970565b509392505050565b6002611a07816123ae565b611a0f6123dc565b855f5b81811015611aa257611a9a898983818110611a2f57611a2f615685565b9050602002810190611a4191906158ee565b611a4a90615902565b888884818110611a5c57611a5c615685565b9050602002810190611a6e91906156b7565b888886818110611a8057611a80615685565b9050602002016020810190611a95919061590d565b61365f565b600101611a12565b5050611aae600160c955565b50505050505050565b611abf614925565b5f82815260a46020908152604091829020825160e08101845281546001600160a01b03908116825260018301548116828501526002830154168185015260038201546060820152600482015463ffffffff1660808201526005820180548551818602810186019096528086529194929360a08601939290830182828015611b6d57602002820191905f5260205f20905b81546001600160a01b03168152600190910190602001808311611b4f575b5050505050815260200160068201805480602002602001604051908101604052809291908181526020018280548015611bc357602002820191905f5260205f20905b815481526020019060010190808311611baf575b5050505050815250509050919050565b6060611bde33611eb4565b9050610c9c848484612015565b6001600160a01b038083165f90815260a260209081526040808320938516835292815282822083519182019093529154825290610c9c90613aa1565b60608082516001600160401b03811115611c4357611c43614b87565b604051908082528060200260200182016040528015611c6c578160200160208202803683370190505b50915082516001600160401b03811115611c8857611c88614b87565b604051908082528060200260200182016040528015611cb1578160200160208202803683370190505b506001600160a01b038086165f908152609a6020526040812054929350911690611cdc868387612435565b90505f5b8551811015611ea9575f611d0c878381518110611cff57611cff615685565b6020026020010151613368565b9050806001600160a01b031663fe243a1789898581518110611d3057611d30615685565b60200260200101516040518363ffffffff1660e01b8152600401611d6a9291906001600160a01b0392831681529116602082015260400190565b602060405180830381865afa158015611d85573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611da991906158d7565b858381518110611dbb57611dbb615685565b6020026020010181815250505f60a25f8a6001600160a01b03166001600160a01b031681526020019081526020015f205f898581518110611dfe57611dfe615685565b60200260200101516001600160a01b03166001600160a01b031681526020019081526020015f206040518060200160405290815f820154815250509050611e82868481518110611e5057611e50615685565b6020026020010151858581518110611e6a57611e6a615685565b6020026020010151836136419092919063ffffffff16565b878481518110611e9457611e94615685565b60209081029190910101525050600101611ce0565b5050505b9250929050565b6060611ebe6123dc565b611ec782610f4a565b611ee45760405163a5c7c44560e01b815260040160405180910390fd5b611eed826117ae565b15611f0b576040516311ca333560e31b815260040160405180910390fd5b336001600160a01b03831614611fc3576001600160a01b038083165f908152609a602052604090205416611f3e81613132565b80611f6457506001600160a01b038181165f908152609960205260409020600101541633145b611f8157604051631e499a2360e11b815260040160405180910390fd5b806001600160a01b0316836001600160a01b03167ff0eddf07e6ea14f388b47e1e94a0f464ecbd9eed4171130e0fc0e99fb4030a8a60405160405180910390a3505b611fcc82613ac0565b9050611fd8600160c955565b919050565b6002611fe8816123ae565b611ff06123dc565b612004611ffc86615902565b85858561365f565b61200e600160c955565b5050505050565b61201d6123dc565b61202633610f4a565b1561204457604051633bf2b50360e11b815260040160405180910390fd5b61204d836117ae565b61206a576040516325ec6c1f60e01b815260040160405180910390fd5b61207633848484613d00565b610fc83384612c82565b60605f83516001600160401b0381111561209c5761209c614b87565b6040519080825280602002602001820160405280156120cf57816020015b60608152602001906001900390816120ba5790505b5090505f5b84518110156119f4576121008582815181106120f2576120f2615685565b602002602001015185611926565b82828151811061211257612112615685565b60209081029190910101526001016120d4565b60408051808201909152600a81526922b4b3b2b72630bcb2b960b11b6020909101525f7f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f7f71b625cfad44bac63b13dba07f2e1d6084ee04b6f8752101ece6126d584ee6ea612192613dbf565b805160209182012060408051928301949094529281019190915260608101919091524660808201523060a082015260c00160405160208183030381529060405280519060200120905090565b6121e6613e34565b6066548019821981161461220d5760405163c61dca5d60e01b815260040160405180910390fd5b606682905560405182815233907f3582d1828e26bf56bd801502bc021ac0bc8afb57c826e4986b45593c8fad389c906020015b60405180910390a25050565b6001600160a01b0381165f90815260a3602052604090206060906117e090613ee5565b5f54610100900460ff161580801561228d57505f54600160ff909116105b806122a65750303b1580156122a657505f5460ff166001145b61230e5760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201526d191e481a5b9a5d1a585b1a5e995960921b60648201526084015b60405180910390fd5b5f805460ff19166001179055801561232f575f805461ff0019166101001790555b61233882612bc5565b8015610b3f575f805461ff0019169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15050565b5f612389612125565b60405161190160f01b602082015260228101919091526042810183905260620161102d565b606654600160ff83161b908116036123d95760405163840a48d560e01b815260040160405180910390fd5b50565b600260c9540361242e5760405162461bcd60e51b815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c006044820152606401612305565b600260c955565b60605f82516001600160401b0381111561245157612451614b87565b60405190808252806020026020018201604052801561247a578160200160208202803683370190505b5090505f7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663547afb8786866040518363ffffffff1660e01b81526004016124cc929190615928565b5f60405180830381865afa1580156124e6573d5f5f3e3d5ffd5b505050506040513d5f823e601f3d908101601f1916820160405261250d919081019061594b565b90505f5b845181101561257c576125578786838151811061253057612530615685565b602002602001015184848151811061254a5761254a615685565b6020026020010151612f0b565b83828151811061256957612569615685565b6020908102919091010152600101612511565b509095945050505050565b5f6001600160a01b0386166125af576040516339b190bb60e11b815260040160405180910390fd5b83515f036125d05760405163796cc52560e01b815260040160405180910390fd5b5f84516001600160401b038111156125ea576125ea614b87565b604051908082528060200260200182016040528015612613578160200160208202803683370190505b5090505f85516001600160401b0381111561263057612630614b87565b604051908082528060200260200182016040528015612659578160200160208202803683370190505b5090505f5b8651811015612955575f61267d888381518110611cff57611cff615685565b90505f60a25f8c6001600160a01b03166001600160a01b031681526020019081526020015f205f8a85815181106126b6576126b6615685565b60200260200101516001600160a01b03166001600160a01b031681526020019081526020015f20905061272f8884815181106126f4576126f4615685565b602002602001015188858151811061270e5761270e615685565b60209081029190910181015160408051928301905284548252909190613641565b84848151811061274157612741615685565b60200260200101818152505061278088848151811061276257612762615685565b60209081029190910181015160408051928301905283548252613ef1565b85848151811061279257612792615685565b60209081029190910101526001600160a01b038a1615612827576127e98a8a85815181106127c2576127c2615685565b60200260200101518786815181106127dc576127dc615685565b6020026020010151613f05565b6128278a8c8b868151811061280057612800615685565b602002602001015187878151811061281a5761281a615685565b60200260200101516132ee565b5f826001600160a01b031663724af4238d8c878151811061284a5761284a615685565b60200260200101518c888151811061286457612864615685565b60200260200101516040518463ffffffff1660e01b815260040161288a939291906159da565b6020604051808303815f875af11580156128a6573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906128ca91906158d7565b9050805f03612947575f82557f8be932bac54561f27260f95463d9b8ab37e06b2842e5ee2404157cc13df6eb8f8c8b868151811061290a5761290a615685565b602002602001015161292f856040518060200160405290815f82015481525050613aa1565b60405161293e939291906159da565b60405180910390a15b50505080600101905061265e565b506001600160a01b0388165f908152609f6020526040812080549182919061297c836159fe565b91905055505f6040518060e001604052808b6001600160a01b031681526020018a6001600160a01b031681526020018b6001600160a01b031681526020018381526020014363ffffffff1681526020018981526020018581525090505f6129e28261101b565b5f818152609e602090815260408083208054600160ff19909116811790915560a4835292819020865181546001600160a01b03199081166001600160a01b039283161783558885015195830180548216968316969096179095559187015160028201805490951692169190911790925560608501516003830155608085015160048301805463ffffffff191663ffffffff90921691909117905560a085015180519394508593612a98926005850192019061497e565b5060c08201518051612ab49160068401916020909101906149e1565b5050506001600160a01b038b165f90815260a360205260409020612ad89082613f6f565b507f26b2aae26516e8719ef50ea2f6831a2efbd4e37dccdf0f6936b27bc08e793e30818386604051612b0c93929190615a16565b60405180910390a19a9950505050505050505050565b60405163237dfb4760e11b81523360048201527f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316906346fbf68e90602401602060405180830381865afa158015612b84573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190612ba89190615a40565b61101957604051631d77d47760e21b815260040160405180910390fd5b606681905560405181815233907fab40a374bc51de372200a8bc981af8c9ecdc08dfdaef0bb6e09f88f3c616ef3d9060200160405180910390a250565b5f61188882612c1a612c1387613aa1565b8690613f7a565b90613f7a565b6001600160a01b038281165f8181526099602090815260409182902060010180546001600160a01b0319169486169485179055905192835290917f773b54c04d756fcc5e678111f7d730de3be98192000799eee3d63716055a87c69101612240565b5f612c8c816123ae565b5f5f612c97856114ae565b915091505f612ca75f8685612435565b6001600160a01b038781165f818152609a602052604080822080546001600160a01b031916948b16948517905551939450919290917fc3ee9f2e5fda98e8066a1f745b2df9285f416fe98cf2559cd21484b3d874330491a35f5b8351811015611aae5773beac0eeeeeeeeeeeeeeeeeeeeeeeeeeeeeebeac06001600160a01b0316848281518110612d3a57612d3a615685565b60200260200101516001600160a01b031603612eaa5760405163a3d75e0960e01b81526001600160a01b0388811660048301525f917f00000000000000000000000000000000000000000000000000000000000000009091169063a3d75e0990602401602060405180830381865afa158015612db8573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190612ddc919061572a565b90505f60a25f8a6001600160a01b03166001600160a01b031681526020019081526020015f205f878581518110612e1557612e15615685565b60200260200101516001600160a01b03166001600160a01b031681526020019081526020015f206040518060200160405290815f820154815250509050612e89858481518110612e6757612e67615685565b6020026020010151836001600160401b0316836136419092919063ffffffff16565b858481518110612e9b57612e9b615685565b60200260200101818152505050505b612f038688868481518110612ec157612ec1615685565b60200260200101515f878681518110612edc57612edc615685565b6020026020010151878781518110612ef657612ef6615685565b6020026020010151612fed565b600101612d01565b5f73beac0eeeeeeeeeeeeeeeeeeeeeeeeeeeeeebeabf196001600160a01b03841601612fdd5760405163a3d75e0960e01b81526001600160a01b0385811660048301525f917f00000000000000000000000000000000000000000000000000000000000000009091169063a3d75e0990602401602060405180830381865afa158015612f99573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190612fbd919061572a565b9050612fd56001600160401b0384811690831661362d565b915050610c9c565b506001600160401b031692915050565b805f0361300d57604051630a33bc6960e21b815260040160405180910390fd5b811561312a576001600160a01b038086165f90815260a26020908152604080832093881683529290522061304381858585613f8e565b6040805160208101909152815481527f8be932bac54561f27260f95463d9b8ab37e06b2842e5ee2404157cc13df6eb8f908790879061308190613aa1565b604051613090939291906159da565b60405180910390a16130a186610f4a565b15611aae576001600160a01b038088165f908152609860209081526040808320938916835292905290812080548592906130dc908490615759565b92505081905550866001600160a01b03167f1ec042c965e2edd7107b51188ee0f383e22e76179041ab3a9d18ff151405166c878786604051613120939291906159da565b60405180910390a2505b505050505050565b604051631beb2b9760e31b81526001600160a01b0382811660048301523360248301523060448301525f80356001600160e01b0319166064840152917f00000000000000000000000000000000000000000000000000000000000000009091169063df595cb8906084016020604051808303815f875af11580156131b8573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906117e09190615a40565b60605f6131e883614009565b6040805160208082528183019092529192505f91906020820181803683375050509182525060208101929092525090565b5f6132278483856001614030565b6118889085615a5b565b6001600160a01b038085165f90815260a560209081526040808320938716835292905290812081906132629061408b565b90505f6132c860016132947f000000000000000000000000000000000000000000000000000000000000000043615a6e565b61329e9190615a6e565b6001600160a01b03808a165f90815260a560209081526040808320938c16835292905220906140a5565b90505f6132d58284615a5b565b90506132e28187876140c1565b98975050505050505050565b6001600160a01b038085165f90815260986020908152604080832093861683529290529081208054839290613324908490615a5b565b92505081905550836001600160a01b03167f6909600037b75d7b4733aedd815442b5ec018a827751c832aaff64eba5d6d2dd848484604051611918939291906159da565b5f6001600160a01b03821673beac0eeeeeeeeeeeeeeeeeeeeeeeeeeeeeebeac0146133b3577f00000000000000000000000000000000000000000000000000000000000000006117e0565b7f000000000000000000000000000000000000000000000000000000000000000092915050565b6133e2614925565b5f82815260a46020908152604091829020825160e08101845281546001600160a01b0390811682526001830154811682850152600283015416818501526003820154606082810191909152600483015463ffffffff1660808301526005830180548651818702810187019097528087529195929460a0860193929083018282801561349457602002820191905f5260205f20905b81546001600160a01b03168152600190910190602001808311613476575b50505050508152602001600682018054806020026020016040519081016040528092919081815260200182805480156134ea57602002820191905f5260205f20905b8154815260200190600101908083116134d6575b50505050508152505091508160a00151516001600160401b0381111561351257613512614b87565b60405190808252806020026020018201604052801561353b578160200160208202803683370190505b5090505f7f0000000000000000000000000000000000000000000000000000000000000000836080015161356f9190615a8a565b90505f4363ffffffff168263ffffffff16106135a05761359b845f015185602001518660a00151612435565b6135b7565b6135b7845f015185602001518660a00151856140df565b90505f5b8460a00151518110156112fb576136088560c0015182815181106135e1576135e1615685565b60200260200101518383815181106135fb576135fb615685565b602002602001015161420d565b84828151811061361a5761361a615685565b60209081029190910101526001016135bb565b5f610c9c8383670de0b6b3a7640000614218565b5f6118888261365961365287613aa1565b869061362d565b9061362d565b60a0840151518214613684576040516343714afd60e01b815260040160405180910390fd5b83604001516001600160a01b0316336001600160a01b0316146136ba576040516316110d3560e21b815260040160405180910390fd5b5f6136c48561101b565b5f818152609e602052604090205490915060ff166136f5576040516387c9d21960e01b815260040160405180910390fd5b60605f7f000000000000000000000000000000000000000000000000000000000000000087608001516137289190615a8a565b90508063ffffffff164363ffffffff1611613756576040516378f67ae160e11b815260040160405180910390fd5b61376d875f015188602001518960a00151846140df565b87516001600160a01b03165f90815260a3602052604090209092506137939150836142fd565b505f82815260a46020526040812080546001600160a01b031990811682556001820180548216905560028201805490911690556003810182905560048101805463ffffffff19169055906137ea6005830182614a1a565b6137f7600683015f614a1a565b50505f828152609e602052604090819020805460ff19169055517f1f40400889274ed07b24845e5054a87a0cab969eb1277aafe61ae352e7c32a00906138409084815260200190565b60405180910390a185516001600160a01b039081165f908152609a6020526040812054885160a08a0151919093169261387a918490612435565b90505f5b8860a0015151811015613a96575f6138a58a60a001518381518110611cff57611cff615685565b90505f6138db8b60c0015184815181106138c1576138c1615685565b60200260200101518785815181106135fb576135fb615685565b9050805f036138eb575050613a8e565b87156139b957816001600160a01b0316632eae418c8c5f01518d60a00151868151811061391a5761391a615685565b60200260200101518d8d8881811061393457613934615685565b90506020020160208101906139499190614eb6565b60405160e085901b6001600160e01b03191681526001600160a01b03938416600482015291831660248301529091166044820152606481018490526084015f604051808303815f87803b15801561399e575f5ffd5b505af11580156139b0573d5f5f3e3d5ffd5b50505050613a8b565b5f5f836001600160a01b03166350ff72258e5f01518f60a0015188815181106139e4576139e4615685565b6020026020010151866040518463ffffffff1660e01b8152600401613a0b939291906159da565b60408051808303815f875af1158015613a26573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190613a4a9190615aa6565b91509150613a88878e5f01518f60a001518881518110613a6c57613a6c615685565b602002602001015185858b8b81518110612ef657612ef6615685565b50505b50505b60010161387e565b505050505050505050565b80515f9015613ab15781516117e0565b670de0b6b3a764000092915050565b60606001613acd816123ae565b6001600160a01b038084165f818152609a602052604080822080546001600160a01b0319811690915590519316928392917ffee30966a256b71e14bc0ebfc94315e28ef4a97a7131a9e2b7a310a73af4467691a35f5f613b2c866114ae565b9150915081515f03613b4057505050613cfa565b81516001600160401b03811115613b5957613b59614b87565b604051908082528060200260200182016040528015613b82578160200160208202803683370190505b5094505f613b91878585612435565b90505f5b8351811015613cf4576040805160018082528183019092525f916020808301908036833750506040805160018082528183019092529293505f9291506020808301908036833750506040805160018082528183019092529293505f92915060208083019080368337019050509050868481518110613c1557613c15615685565b6020026020010151835f81518110613c2f57613c2f615685565b60200260200101906001600160a01b031690816001600160a01b031681525050858481518110613c6157613c61615685565b6020026020010151825f81518110613c7b57613c7b615685565b602002602001018181525050848481518110613c9957613c99615685565b6020026020010151815f81518110613cb357613cb3615685565b602002602001018181525050613ccc8b89858585612587565b8a8581518110613cde57613cde615685565b6020908102919091010152505050600101613b95565b50505050505b50919050565b6001600160a01b038084165f908152609960205260409020600101541680613d285750610df1565b6001600160a01b0381165f908152609c6020908152604080832085845290915290205460ff1615613d6c57604051630d4c4c9160e21b815260040160405180910390fd5b6001600160a01b0381165f908152609c602090815260408083208584528252909120805460ff1916600117905583015161200e908290613db390889088908490889061080f565b85516020870151614308565b60605f613deb7f00000000000000000000000000000000000000000000000000000000000000006131dc565b9050805f81518110613dff57613dff615685565b016020908101516040516001600160f81b03199091169181019190915260210160405160208183030381529060405291505090565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663eab66d7a6040518163ffffffff1660e01b8152600401602060405180830381865afa158015613e90573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190613eb49190615ac8565b6001600160a01b0316336001600160a01b0316146110195760405163794821ff60e01b815260040160405180910390fd5b60605f610c9c8361435a565b5f610c9c613efe84613aa1565b839061362d565b6001600160a01b038084165f90815260a5602090815260408083209386168352929052908120613f349061408b565b9050610df143613f448484615759565b6001600160a01b038088165f90815260a560209081526040808320938a1683529290522091906143b3565b5f610c9c83836143be565b5f610c9c83670de0b6b3a764000084614218565b825f03613fba57604080516020810190915284548152613fb3908290612c1a90613aa1565b8455610df1565b6040805160208101909152845481525f90613fd6908584613641565b90505f613fe38483615759565b90505f613ffe84612c1a613ff7888a615759565b8590613f7a565b875550505050505050565b5f60ff8216601f8111156117e057604051632cd44ac360e21b815260040160405180910390fd5b5f5f61403d868686614218565b9050600183600281111561405357614053615ae3565b14801561406f57505f848061406a5761406a615af7565b868809115b156140825761407f600182615759565b90505b95945050505050565b5f614096828261440a565b6001600160e01b031692915050565b5f6140b183838361444f565b6001600160e01b03169392505050565b5f6118886140cf8385615b0b565b85906001600160401b031661362d565b60605f83516001600160401b038111156140fb576140fb614b87565b604051908082528060200260200182016040528015614124578160200160208202803683370190505b5090505f7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03166394d7d00c8787876040518463ffffffff1660e01b815260040161417893929190615b2a565b5f60405180830381865afa158015614192573d5f5f3e3d5ffd5b505050506040513d5f823e601f3d908101601f191682016040526141b9919081019061594b565b90505f5b8551811015614201576141dc8887838151811061253057612530615685565b8382815181106141ee576141ee615685565b60209081029190910101526001016141bd565b50909695505050505050565b5f610c9c838361362d565b5f80805f19858709858702925082811083820303915050805f0361424f5783828161424557614245615af7565b0492505050610c9c565b8084116142965760405162461bcd60e51b81526020600482015260156024820152744d6174683a206d756c446976206f766572666c6f7760581b6044820152606401612305565b5f8486880960026001871981018816978890046003810283188082028403028082028403028082028403028082028403028082028403029081029092039091025f889003889004909101858311909403939093029303949094049190911702949350505050565b5f610c9c8383614498565b4281101561432957604051630819bdcd60e01b815260040160405180910390fd5b61433d6001600160a01b038516848461457b565b610df157604051638baa579f60e01b815260040160405180910390fd5b6060815f018054806020026020016040519081016040528092919081815260200182805480156143a757602002820191905f5260205f20905b815481526020019060010190808311614393575b50505050509050919050565b610fd28383836145cf565b5f81815260018301602052604081205461440357508154600181810184555f8481526020808220909301849055845484825282860190935260409020919091556117e0565b505f6117e0565b81545f9080156144475761443084614423600184615a5b565b5f91825260209091200190565b5464010000000090046001600160e01b0316611888565b509092915050565b82545f9081614460868683856146d5565b9050801561448e5761447786614423600184615a5b565b5464010000000090046001600160e01b031661088d565b5091949350505050565b5f8181526001830160205260408120548015614572575f6144ba600183615a5b565b85549091505f906144cd90600190615a5b565b905081811461452c575f865f0182815481106144eb576144eb615685565b905f5260205f200154905080875f01848154811061450b5761450b615685565b5f918252602080832090910192909255918252600188019052604090208390555b855486908061453d5761453d615b63565b600190038181905f5260205f20015f90559055856001015f8681526020019081526020015f205f9055600193505050506117e0565b5f9150506117e0565b5f5f5f6145888585614728565b90925090505f8160048111156145a0576145a0615ae3565b1480156145be5750856001600160a01b0316826001600160a01b0316145b8061088d575061088d868686614767565b82548015614687575f6145e785614423600185615a5b565b60408051808201909152905463ffffffff8082168084526401000000009092046001600160e01b03166020840152919250908516101561463a5760405163151b8e3f60e11b815260040160405180910390fd5b805163ffffffff808616911603614685578261465b86614423600186615a5b565b80546001600160e01b03929092166401000000000263ffffffff9092169190911790555050505050565b505b506040805180820190915263ffffffff92831681526001600160e01b03918216602080830191825285546001810187555f968752952091519051909216640100000000029190921617910155565b5f5b818310156119f4575f6146ea848461484e565b5f8781526020902090915063ffffffff86169082015463ffffffff16111561471457809250614722565b61471f816001615759565b93505b506146d7565b5f5f825160410361475c576020830151604084015160608501515f1a61475087828585614868565b94509450505050611ead565b505f90506002611ead565b5f5f5f856001600160a01b0316631626ba7e60e01b868660405160240161478f929190615b77565b60408051601f198184030181529181526020820180516001600160e01b03166001600160e01b03199094169390931790925290516147cd9190615b8f565b5f60405180830381855afa9150503d805f8114614805576040519150601f19603f3d011682016040523d82523d5f602084013e61480a565b606091505b509150915081801561481e57506020815110155b801561088d57508051630b135d3f60e11b9061484390830160209081019084016158d7565b149695505050505050565b5f61485c6002848418615ba5565b610c9c90848416615759565b5f807f7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a083111561489d57505f9050600361491c565b604080515f8082526020820180845289905260ff881692820192909252606081018690526080810185905260019060a0016020604051602081039080840390855afa1580156148ee573d5f5f3e3d5ffd5b5050604051601f1901519150506001600160a01b038116614916575f6001925092505061491c565b91505f90505b94509492505050565b6040518060e001604052805f6001600160a01b031681526020015f6001600160a01b031681526020015f6001600160a01b031681526020015f81526020015f63ffffffff16815260200160608152602001606081525090565b828054828255905f5260205f209081019282156149d1579160200282015b828111156149d157825182546001600160a01b0319166001600160a01b0390911617825560209092019160019091019061499c565b506149dd929150614a31565b5090565b828054828255905f5260205f209081019282156149d1579160200282015b828111156149d15782518255916020019190600101906149ff565b5080545f8255905f5260205f20908101906123d991905b5b808211156149dd575f8155600101614a32565b6001600160a01b03811681146123d9575f5ffd5b8035611fd881614a45565b5f5f5f5f5f60a08688031215614a78575f5ffd5b8535614a8381614a45565b94506020860135614a9381614a45565b93506040860135614aa381614a45565b94979396509394606081013594506080013592915050565b5f5f83601f840112614acb575f5ffd5b5081356001600160401b03811115614ae1575f5ffd5b6020830191508360208260051b8501011115611ead575f5ffd5b5f5f60208385031215614b0c575f5ffd5b82356001600160401b03811115614b21575f5ffd5b614b2d85828601614abb565b90969095509350505050565b602080825282518282018190525f918401906040840190835b8181101561257c578351835260209384019390920191600101614b52565b5f60208284031215614b80575f5ffd5b5035919050565b634e487b7160e01b5f52604160045260245ffd5b60405160e081016001600160401b0381118282101715614bbd57614bbd614b87565b60405290565b604080519081016001600160401b0381118282101715614bbd57614bbd614b87565b604051601f8201601f191681016001600160401b0381118282101715614c0d57614c0d614b87565b604052919050565b5f6001600160401b03821115614c2d57614c2d614b87565b5060051b60200190565b5f82601f830112614c46575f5ffd5b8135614c59614c5482614c15565b614be5565b8082825260208201915060208360051b860101925085831115614c7a575f5ffd5b602085015b83811015614ca0578035614c9281614a45565b835260209283019201614c7f565b5095945050505050565b5f82601f830112614cb9575f5ffd5b8135614cc7614c5482614c15565b8082825260208201915060208360051b860101925085831115614ce8575f5ffd5b602085015b83811015614ca0578035835260209283019201614ced565b5f5f5f60608486031215614d17575f5ffd5b8335614d2281614a45565b925060208401356001600160401b03811115614d3c575f5ffd5b614d4886828701614c37565b92505060408401356001600160401b03811115614d63575f5ffd5b614d6f86828701614caa565b9150509250925092565b5f8151808452602084019350602083015f5b82811015614da9578151865260209586019590910190600101614d8b565b5093949350505050565b602081525f610c9c6020830184614d79565b803563ffffffff81168114611fd8575f5ffd5b5f5f83601f840112614de8575f5ffd5b5081356001600160401b03811115614dfe575f5ffd5b602083019150836020828501011115611ead575f5ffd5b5f5f5f5f60608587031215614e28575f5ffd5b8435614e3381614a45565b9350614e4160208601614dc5565b925060408501356001600160401b03811115614e5b575f5ffd5b614e6787828801614dd8565b95989497509550505050565b5f5f5f5f60808587031215614e86575f5ffd5b8435614e9181614a45565b93506020850135614ea181614a45565b93969395505050506040820135916060013590565b5f60208284031215614ec6575f5ffd5b8135610c9c81614a45565b5f5f60408385031215614ee2575f5ffd5b8235614eed81614a45565b91506020830135614efd81614a45565b809150509250929050565b5f81518084528060208401602086015e5f602082860101526020601f19601f83011685010191505092915050565b602081525f610c9c6020830184614f08565b5f60e08284031215614f58575f5ffd5b614f60614b9b565b9050614f6b82614a59565b8152614f7960208301614a59565b6020820152614f8a60408301614a59565b604082015260608281013590820152614fa560808301614dc5565b608082015260a08201356001600160401b03811115614fc2575f5ffd5b614fce84828501614c37565b60a08301525060c08201356001600160401b03811115614fec575f5ffd5b614ff884828501614caa565b60c08301525092915050565b5f60208284031215615014575f5ffd5b81356001600160401b03811115615029575f5ffd5b61188884828501614f48565b5f60208284031215615045575f5ffd5b813560ff81168114610c9c575f5ffd5b6001600160401b03811681146123d9575f5ffd5b5f5f5f5f5f5f86880360e081121561507f575f5ffd5b873561508a81614a45565b96506040601f198201121561509d575f5ffd5b506020870194506060870135935060808701356150b981614a45565b925060a08701356150c981615055565b915060c08701356150d981615055565b809150509295509295509295565b5f8151808452602084019350602083015f5b82811015614da95781516001600160a01b03168652602095860195909101906001016150f9565b80516001600160a01b03908116835260208083015182169084015260408083015190911690830152606080820151908301526080808201515f9161516b9085018263ffffffff169052565b5060a082015160e060a085015261518560e08501826150e7565b905060c083015184820360c08601526140828282614d79565b604081525f6151b06040830185615120565b82810360208401526140828185614d79565b5f82825180855260208501945060208160051b830101602085015f5b8381101561420157601f198584030188526151fa838351614d79565b60209889019890935091909101906001016151de565b5f604082016040835280855180835260608501915060608160051b8601019250602087015f5b8281101561526757605f19878603018452615252858351615120565b94506020938401939190910190600101615236565b50505050828103602084015261408281856151c2565b5f5f5f6060848603121561528f575f5ffd5b833561529a81614a45565b92506020840135915060408401356152b181615055565b809150509250925092565b604081525f6151b060408301856150e7565b5f5f5f604084860312156152e0575f5ffd5b83356152eb81614a45565b925060208401356001600160401b03811115615305575f5ffd5b61531186828701614dd8565b9497909650939450505050565b5f5f6040838503121561532f575f5ffd5b823561533a81614a45565b915060208301356001600160401b03811115615354575f5ffd5b61536085828601614c37565b9150509250929050565b5f5f5f5f5f5f6060878903121561537f575f5ffd5b86356001600160401b03811115615394575f5ffd5b6153a089828a01614abb565b90975095505060208701356001600160401b038111156153be575f5ffd5b6153ca89828a01614abb565b90955093505060408701356001600160401b038111156153e8575f5ffd5b6153f489828a01614abb565b979a9699509497509295939492505050565b602081525f610c9c6020830184615120565b5f5f5f6060848603121561542a575f5ffd5b833561543581614a45565b925060208401356001600160401b0381111561544f575f5ffd5b840160408187031215615460575f5ffd5b615468614bc3565b81356001600160401b0381111561547d575f5ffd5b8201601f8101881361548d575f5ffd5b80356001600160401b038111156154a6576154a6614b87565b6154b9601f8201601f1916602001614be5565b8181528960208385010111156154cd575f5ffd5b816020840160208301375f60209282018301528352928301359282019290925293969395505050506040919091013590565b5f5f60408385031215615510575f5ffd5b823561551b81614a45565b946020939093013593505050565b604081525f6151b06040830185614d79565b80151581146123d9575f5ffd5b5f5f5f5f6060858703121561555b575f5ffd5b84356001600160401b03811115615570575f5ffd5b850160e08188031215615581575f5ffd5b935060208501356001600160401b0381111561559b575f5ffd5b6155a787828801614abb565b90945092505060408501356155bb8161553b565b939692955090935050565b5f5f604083850312156155d7575f5ffd5b82356001600160401b038111156155ec575f5ffd5b8301601f810185136155fc575f5ffd5b803561560a614c5482614c15565b8082825260208201915060208360051b85010192508783111561562b575f5ffd5b6020840193505b8284101561565657833561564581614a45565b825260209384019390910190615632565b945050505060208301356001600160401b03811115615354575f5ffd5b602081525f610c9c60208301846151c2565b634e487b7160e01b5f52603260045260245ffd5b5f8235605e198336030181126156ad575f5ffd5b9190910192915050565b5f5f8335601e198436030181126156cc575f5ffd5b8301803591506001600160401b038211156156e5575f5ffd5b6020019150600581901b3603821315611ead575f5ffd5b60208152816020820152818360408301375f818301604090810191909152601f909201601f19160101919050565b5f6020828403121561573a575f5ffd5b8151610c9c81615055565b634e487b7160e01b5f52601160045260245ffd5b808201808211156117e0576117e0615745565b60a08101853561577b81614a45565b6001600160a01b0316825263ffffffff61579760208801614dc5565b16602083015260408201949094526001600160a01b03929092166060830152608090910152919050565b5f82601f8301126157d0575f5ffd5b81516157de614c5482614c15565b8082825260208201915060208360051b8601019250858311156157ff575f5ffd5b602085015b83811015614ca0578051835260209283019201615804565b5f5f6040838503121561582d575f5ffd5b82516001600160401b03811115615842575f5ffd5b8301601f81018513615852575f5ffd5b8051615860614c5482614c15565b8082825260208201915060208360051b850101925087831115615881575f5ffd5b6020840193505b828410156158ac57835161589b81614a45565b825260209384019390910190615888565b8095505050505060208301516001600160401b038111156158cb575f5ffd5b615360858286016157c1565b5f602082840312156158e7575f5ffd5b5051919050565b5f823560de198336030181126156ad575f5ffd5b5f6117e03683614f48565b5f6020828403121561591d575f5ffd5b8135610c9c8161553b565b6001600160a01b03831681526040602082018190525f90611888908301846150e7565b5f6020828403121561595b575f5ffd5b81516001600160401b03811115615970575f5ffd5b8201601f81018413615980575f5ffd5b805161598e614c5482614c15565b8082825260208201915060208360051b8501019250868311156159af575f5ffd5b6020840193505b8284101561088d5783516159c981615055565b8252602093840193909101906159b6565b6001600160a01b039384168152919092166020820152604081019190915260600190565b5f60018201615a0f57615a0f615745565b5060010190565b838152606060208201525f615a2e6060830185615120565b828103604084015261088d8185614d79565b5f60208284031215615a50575f5ffd5b8151610c9c8161553b565b818103818111156117e0576117e0615745565b63ffffffff82811682821603908111156117e0576117e0615745565b63ffffffff81811683821601908111156117e0576117e0615745565b5f5f60408385031215615ab7575f5ffd5b505080516020909101519092909150565b5f60208284031215615ad8575f5ffd5b8151610c9c81614a45565b634e487b7160e01b5f52602160045260245ffd5b634e487b7160e01b5f52601260045260245ffd5b6001600160401b0382811682821603908111156117e0576117e0615745565b6001600160a01b03841681526060602082018190525f90615b4d908301856150e7565b905063ffffffff83166040830152949350505050565b634e487b7160e01b5f52603160045260245ffd5b828152604060208201525f6118886040830184614f08565b5f82518060208501845e5f920191825250919050565b5f82615bbf57634e487b7160e01b5f52601260045260245ffd5b50049056fea2646970667358221220f9ef772eabaa6b5fce23afe05df444492ec99933e2ae08ab18ec8b7b4dd4384c64736f6c634300081b0033", } // DelegationManagerABI is the input ABI used to generate the binding from. diff --git a/pkg/bindings/EigenPod/binding.go b/pkg/bindings/EigenPod/binding.go index 7e201335dc..b8000ab564 100644 --- a/pkg/bindings/EigenPod/binding.go +++ b/pkg/bindings/EigenPod/binding.go @@ -74,7 +74,7 @@ type IEigenPodTypesValidatorInfo struct { // EigenPodMetaData contains all meta data concerning the EigenPod contract. var EigenPodMetaData = &bind.MetaData{ ABI: "[{\"type\":\"constructor\",\"inputs\":[{\"name\":\"_ethPOS\",\"type\":\"address\",\"internalType\":\"contractIETHPOSDeposit\"},{\"name\":\"_eigenPodManager\",\"type\":\"address\",\"internalType\":\"contractIEigenPodManager\"},{\"name\":\"_GENESIS_TIME\",\"type\":\"uint64\",\"internalType\":\"uint64\"},{\"name\":\"_version\",\"type\":\"string\",\"internalType\":\"string\"}],\"stateMutability\":\"nonpayable\"},{\"type\":\"receive\",\"stateMutability\":\"payable\"},{\"type\":\"function\",\"name\":\"GENESIS_TIME\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"uint64\",\"internalType\":\"uint64\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"activeValidatorCount\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"checkpointBalanceExitedGwei\",\"inputs\":[{\"name\":\"\",\"type\":\"uint64\",\"internalType\":\"uint64\"}],\"outputs\":[{\"name\":\"\",\"type\":\"uint64\",\"internalType\":\"uint64\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"currentCheckpoint\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"tuple\",\"internalType\":\"structIEigenPodTypes.Checkpoint\",\"components\":[{\"name\":\"beaconBlockRoot\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"},{\"name\":\"proofsRemaining\",\"type\":\"uint24\",\"internalType\":\"uint24\"},{\"name\":\"podBalanceGwei\",\"type\":\"uint64\",\"internalType\":\"uint64\"},{\"name\":\"balanceDeltasGwei\",\"type\":\"int64\",\"internalType\":\"int64\"},{\"name\":\"prevBeaconBalanceGwei\",\"type\":\"uint64\",\"internalType\":\"uint64\"}]}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"currentCheckpointTimestamp\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"uint64\",\"internalType\":\"uint64\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"eigenPodManager\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"contractIEigenPodManager\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"ethPOS\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"contractIETHPOSDeposit\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"getParentBlockRoot\",\"inputs\":[{\"name\":\"timestamp\",\"type\":\"uint64\",\"internalType\":\"uint64\"}],\"outputs\":[{\"name\":\"\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"initialize\",\"inputs\":[{\"name\":\"_podOwner\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"lastCheckpointTimestamp\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"uint64\",\"internalType\":\"uint64\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"podOwner\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"address\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"proofSubmitter\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"address\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"recoverTokens\",\"inputs\":[{\"name\":\"tokenList\",\"type\":\"address[]\",\"internalType\":\"contractIERC20[]\"},{\"name\":\"amountsToWithdraw\",\"type\":\"uint256[]\",\"internalType\":\"uint256[]\"},{\"name\":\"recipient\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"setProofSubmitter\",\"inputs\":[{\"name\":\"newProofSubmitter\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"stake\",\"inputs\":[{\"name\":\"pubkey\",\"type\":\"bytes\",\"internalType\":\"bytes\"},{\"name\":\"signature\",\"type\":\"bytes\",\"internalType\":\"bytes\"},{\"name\":\"depositDataRoot\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"outputs\":[],\"stateMutability\":\"payable\"},{\"type\":\"function\",\"name\":\"startCheckpoint\",\"inputs\":[{\"name\":\"revertIfNoBalance\",\"type\":\"bool\",\"internalType\":\"bool\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"validatorPubkeyHashToInfo\",\"inputs\":[{\"name\":\"validatorPubkeyHash\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"outputs\":[{\"name\":\"\",\"type\":\"tuple\",\"internalType\":\"structIEigenPodTypes.ValidatorInfo\",\"components\":[{\"name\":\"validatorIndex\",\"type\":\"uint64\",\"internalType\":\"uint64\"},{\"name\":\"restakedBalanceGwei\",\"type\":\"uint64\",\"internalType\":\"uint64\"},{\"name\":\"lastCheckpointedAt\",\"type\":\"uint64\",\"internalType\":\"uint64\"},{\"name\":\"status\",\"type\":\"uint8\",\"internalType\":\"enumIEigenPodTypes.VALIDATOR_STATUS\"}]}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"validatorPubkeyToInfo\",\"inputs\":[{\"name\":\"validatorPubkey\",\"type\":\"bytes\",\"internalType\":\"bytes\"}],\"outputs\":[{\"name\":\"\",\"type\":\"tuple\",\"internalType\":\"structIEigenPodTypes.ValidatorInfo\",\"components\":[{\"name\":\"validatorIndex\",\"type\":\"uint64\",\"internalType\":\"uint64\"},{\"name\":\"restakedBalanceGwei\",\"type\":\"uint64\",\"internalType\":\"uint64\"},{\"name\":\"lastCheckpointedAt\",\"type\":\"uint64\",\"internalType\":\"uint64\"},{\"name\":\"status\",\"type\":\"uint8\",\"internalType\":\"enumIEigenPodTypes.VALIDATOR_STATUS\"}]}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"validatorStatus\",\"inputs\":[{\"name\":\"validatorPubkey\",\"type\":\"bytes\",\"internalType\":\"bytes\"}],\"outputs\":[{\"name\":\"\",\"type\":\"uint8\",\"internalType\":\"enumIEigenPodTypes.VALIDATOR_STATUS\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"validatorStatus\",\"inputs\":[{\"name\":\"pubkeyHash\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"outputs\":[{\"name\":\"\",\"type\":\"uint8\",\"internalType\":\"enumIEigenPodTypes.VALIDATOR_STATUS\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"verifyCheckpointProofs\",\"inputs\":[{\"name\":\"balanceContainerProof\",\"type\":\"tuple\",\"internalType\":\"structBeaconChainProofs.BalanceContainerProof\",\"components\":[{\"name\":\"balanceContainerRoot\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"},{\"name\":\"proof\",\"type\":\"bytes\",\"internalType\":\"bytes\"}]},{\"name\":\"proofs\",\"type\":\"tuple[]\",\"internalType\":\"structBeaconChainProofs.BalanceProof[]\",\"components\":[{\"name\":\"pubkeyHash\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"},{\"name\":\"balanceRoot\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"},{\"name\":\"proof\",\"type\":\"bytes\",\"internalType\":\"bytes\"}]}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"verifyStaleBalance\",\"inputs\":[{\"name\":\"beaconTimestamp\",\"type\":\"uint64\",\"internalType\":\"uint64\"},{\"name\":\"stateRootProof\",\"type\":\"tuple\",\"internalType\":\"structBeaconChainProofs.StateRootProof\",\"components\":[{\"name\":\"beaconStateRoot\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"},{\"name\":\"proof\",\"type\":\"bytes\",\"internalType\":\"bytes\"}]},{\"name\":\"proof\",\"type\":\"tuple\",\"internalType\":\"structBeaconChainProofs.ValidatorProof\",\"components\":[{\"name\":\"validatorFields\",\"type\":\"bytes32[]\",\"internalType\":\"bytes32[]\"},{\"name\":\"proof\",\"type\":\"bytes\",\"internalType\":\"bytes\"}]}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"verifyWithdrawalCredentials\",\"inputs\":[{\"name\":\"beaconTimestamp\",\"type\":\"uint64\",\"internalType\":\"uint64\"},{\"name\":\"stateRootProof\",\"type\":\"tuple\",\"internalType\":\"structBeaconChainProofs.StateRootProof\",\"components\":[{\"name\":\"beaconStateRoot\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"},{\"name\":\"proof\",\"type\":\"bytes\",\"internalType\":\"bytes\"}]},{\"name\":\"validatorIndices\",\"type\":\"uint40[]\",\"internalType\":\"uint40[]\"},{\"name\":\"validatorFieldsProofs\",\"type\":\"bytes[]\",\"internalType\":\"bytes[]\"},{\"name\":\"validatorFields\",\"type\":\"bytes32[][]\",\"internalType\":\"bytes32[][]\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"version\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"string\",\"internalType\":\"string\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"withdrawRestakedBeaconChainETH\",\"inputs\":[{\"name\":\"recipient\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"amountWei\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"withdrawableRestakedExecutionLayerGwei\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"uint64\",\"internalType\":\"uint64\"}],\"stateMutability\":\"view\"},{\"type\":\"event\",\"name\":\"CheckpointCreated\",\"inputs\":[{\"name\":\"checkpointTimestamp\",\"type\":\"uint64\",\"indexed\":true,\"internalType\":\"uint64\"},{\"name\":\"beaconBlockRoot\",\"type\":\"bytes32\",\"indexed\":true,\"internalType\":\"bytes32\"},{\"name\":\"validatorCount\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"CheckpointFinalized\",\"inputs\":[{\"name\":\"checkpointTimestamp\",\"type\":\"uint64\",\"indexed\":true,\"internalType\":\"uint64\"},{\"name\":\"totalShareDeltaWei\",\"type\":\"int256\",\"indexed\":false,\"internalType\":\"int256\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"EigenPodStaked\",\"inputs\":[{\"name\":\"pubkey\",\"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\":\"NonBeaconChainETHReceived\",\"inputs\":[{\"name\":\"amountReceived\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"ProofSubmitterUpdated\",\"inputs\":[{\"name\":\"prevProofSubmitter\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"},{\"name\":\"newProofSubmitter\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"RestakedBeaconChainETHWithdrawn\",\"inputs\":[{\"name\":\"recipient\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"ValidatorBalanceUpdated\",\"inputs\":[{\"name\":\"validatorIndex\",\"type\":\"uint40\",\"indexed\":false,\"internalType\":\"uint40\"},{\"name\":\"balanceTimestamp\",\"type\":\"uint64\",\"indexed\":false,\"internalType\":\"uint64\"},{\"name\":\"newValidatorBalanceGwei\",\"type\":\"uint64\",\"indexed\":false,\"internalType\":\"uint64\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"ValidatorCheckpointed\",\"inputs\":[{\"name\":\"checkpointTimestamp\",\"type\":\"uint64\",\"indexed\":true,\"internalType\":\"uint64\"},{\"name\":\"validatorIndex\",\"type\":\"uint40\",\"indexed\":true,\"internalType\":\"uint40\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"ValidatorRestaked\",\"inputs\":[{\"name\":\"validatorIndex\",\"type\":\"uint40\",\"indexed\":false,\"internalType\":\"uint40\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"ValidatorWithdrawn\",\"inputs\":[{\"name\":\"checkpointTimestamp\",\"type\":\"uint64\",\"indexed\":true,\"internalType\":\"uint64\"},{\"name\":\"validatorIndex\",\"type\":\"uint40\",\"indexed\":true,\"internalType\":\"uint40\"}],\"anonymous\":false},{\"type\":\"error\",\"name\":\"BeaconTimestampTooFarInPast\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"CannotCheckpointTwiceInSingleBlock\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"CheckpointAlreadyActive\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"CredentialsAlreadyVerified\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"CurrentlyPaused\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"ForkTimestampZero\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"InputAddressZero\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"InputArrayLengthMismatch\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"InsufficientWithdrawableBalance\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"InvalidEIP4788Response\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"InvalidProof\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"InvalidProofLength\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"InvalidProofLength\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"InvalidPubKeyLength\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"InvalidShortString\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"InvalidValidatorFieldsLength\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"MsgValueNot32ETH\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"NoActiveCheckpoint\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"NoBalanceToCheckpoint\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"OnlyEigenPodManager\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"OnlyEigenPodOwner\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"OnlyEigenPodOwnerOrProofSubmitter\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"StringTooLong\",\"inputs\":[{\"name\":\"str\",\"type\":\"string\",\"internalType\":\"string\"}]},{\"type\":\"error\",\"name\":\"TimestampOutOfRange\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"ValidatorInactiveOnBeaconChain\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"ValidatorIsExitingBeaconChain\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"ValidatorNotActiveInPod\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"ValidatorNotSlashedOnBeaconChain\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"WithdrawalCredentialsNotForEigenPod\",\"inputs\":[]}]", - Bin: "0x610100604052348015610010575f5ffd5b506040516140a63803806140a683398101604081905261002f91610197565b806100398161006e565b608052506001600160a01b0380851660a052831660c0526001600160401b03821660e0526100656100b4565b505050506102e7565b5f5f829050601f815111156100a1578260405163305a27a960e01b8152600401610098919061028c565b60405180910390fd5b80516100ac826102c1565b179392505050565b5f54610100900460ff161561011b5760405162461bcd60e51b815260206004820152602760248201527f496e697469616c697a61626c653a20636f6e747261637420697320696e697469604482015266616c697a696e6760c81b6064820152608401610098565b5f5460ff9081161461016a575f805460ff191660ff9081179091556040519081527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b565b6001600160a01b0381168114610180575f5ffd5b50565b634e487b7160e01b5f52604160045260245ffd5b5f5f5f5f608085870312156101aa575f5ffd5b84516101b58161016c565b60208601519094506101c68161016c565b60408601519093506001600160401b03811681146101e2575f5ffd5b60608601519092506001600160401b038111156101fd575f5ffd5b8501601f8101871361020d575f5ffd5b80516001600160401b0381111561022657610226610183565b604051601f8201601f19908116603f011681016001600160401b038111828210171561025457610254610183565b60405281815282820160200189101561026b575f5ffd5b8160208401602083015e5f6020838301015280935050505092959194509250565b602081525f82518060208401528060208501604085015e5f604082850101526040601f19601f83011684010191505092915050565b805160208083015191908110156102e1575f198160200360031b1b821691505b50919050565b60805160a05160c05160e051613d3861036e5f395f61063f01525f81816102c30152818161067a01528181610722015281816109ef01528181610bba01528181610ec301528181610f6a015281816111a0015281816114ee0152818161162201528181611b0101526129b301525f81816105010152610fd301525f610c260152613d385ff3fe60806040526004361061017e575f3560e01c80636fcd0e53116100cd578063c490744211610087578063dda3346c11610062578063dda3346c146105d1578063ee94d67c146105f0578063f074ba621461060f578063f28824611461062e575f5ffd5b8063c490744214610574578063c4d66de814610593578063d06d5587146105b2575f5ffd5b80636fcd0e531461048f5780637439841f146104bb57806374cdd798146104f057806388676cad146105235780639b4e463414610542578063b522538a14610555575f5ffd5b80634665bcda1161013857806354fd4d501161011357806354fd4d5014610404578063587533571461042557806358eaee79146104445780636c0d2d5a14610470575f5ffd5b80634665bcda146102b257806347d28372146102e557806352396a59146103d0575f5ffd5b8063039157d2146101bc5780630b18ff66146101dd5780632340e8d3146102195780633474aa161461023c5780633f65cf191461026d57806342ecff2a1461028c575f5ffd5b366101b8576040513481527f6fdd3dbdb173299608c0aa9f368735857c8842b581f8389238bf05bd04b3bf499060200160405180910390a1005b5f5ffd5b3480156101c7575f5ffd5b506101db6101d6366004613252565b610661565b005b3480156101e8575f5ffd5b506033546101fc906001600160a01b031681565b6040516001600160a01b0390911681526020015b60405180910390f35b348015610224575f5ffd5b5061022e60395481565b604051908152602001610210565b348015610247575f5ffd5b506034546001600160401b03165b6040516001600160401b039091168152602001610210565b348015610278575f5ffd5b506101db61028736600461330d565b610996565b348015610297575f5ffd5b50603a5461025590600160401b90046001600160401b031681565b3480156102bd575f5ffd5b506101fc7f000000000000000000000000000000000000000000000000000000000000000081565b3480156102f0575f5ffd5b506103756040805160a0810182525f80825260208201819052918101829052606081018290526080810191909152506040805160a081018252603c548152603d5462ffffff811660208301526001600160401b0363010000008204811693830193909352600160581b810460070b6060830152600160981b9004909116608082015290565b60405161021091905f60a0820190508251825262ffffff60208401511660208301526001600160401b036040840151166040830152606083015160070b60608301526001600160401b03608084015116608083015292915050565b3480156103db575f5ffd5b506102556103ea3660046133e4565b603b6020525f90815260409020546001600160401b031681565b34801561040f575f5ffd5b50610418610c1f565b604051610210919061342d565b348015610430575f5ffd5b50603e546101fc906001600160a01b031681565b34801561044f575f5ffd5b5061046361045e36600461347c565b610c4f565b60405161021091906134ee565b34801561047b575f5ffd5b5061022e61048a3660046133e4565b610cb1565b34801561049a575f5ffd5b506104ae6104a93660046134fc565b610dbf565b6040516102109190613513565b3480156104c6575f5ffd5b506104636104d53660046134fc565b5f90815260366020526040902054600160c01b900460ff1690565b3480156104fb575f5ffd5b506101fc7f000000000000000000000000000000000000000000000000000000000000000081565b34801561052e575f5ffd5b506101db61053d366004613573565b610e6a565b6101db61055036600461358e565b610f5f565b348015610560575f5ffd5b506104ae61056f36600461347c565b6110a6565b34801561057f575f5ffd5b506101db61058e366004613623565b611195565b34801561059e575f5ffd5b506101db6105ad36600461364d565b6112cc565b3480156105bd575f5ffd5b506101db6105cc36600461364d565b611416565b3480156105dc575f5ffd5b506101db6105eb366004613738565b6114aa565b3480156105fb575f5ffd5b50603a54610255906001600160401b031681565b34801561061a575f5ffd5b506101db61062936600461380a565b611609565b348015610639575f5ffd5b506102557f000000000000000000000000000000000000000000000000000000000000000081565b604051635ac86ab760e01b8152600660048201819052907f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031690635ac86ab790602401602060405180830381865afa1580156106c7573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906106eb9190613871565b156107095760405163840a48d560e01b815260040160405180910390fd5b604051635ac86ab760e01b8152600860048201819052907f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031690635ac86ab790602401602060405180830381865afa15801561076f573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906107939190613871565b156107b15760405163840a48d560e01b815260040160405180910390fd5b5f6107f56107bf858061388c565b808060200260200160405190810160405280939291908181526020018383602002808284375f92019190915250611a0e92505050565b5f818152603660209081526040808320815160808101835281546001600160401b038082168352600160401b8204811695830195909552600160801b8104909416928101929092529394509192906060830190600160c01b900460ff166002811115610863576108636134ba565b6002811115610874576108746134ba565b81525050905080604001516001600160401b0316876001600160401b0316116108b0576040516337e07ffd60e01b815260040160405180910390fd5b6001816060015160028111156108c8576108c86134ba565b146108e65760405163d49e19a760e01b815260040160405180910390fd5b6109296108f3868061388c565b808060200260200160405190810160405280939291908181526020018383602002808284375f92019190915250611a3092505050565b6109465760405163161ce5ed60e31b815260040160405180910390fd5b61095861095288610cb1565b87611a58565b61098461096488611afd565b8735610970888061388c565b61097d60208b018b6138d1565b8751611bd4565b61098d5f611d08565b50505050505050565b6033546001600160a01b03163314806109b95750603e546001600160a01b031633145b6109d65760405163427a777960e01b815260040160405180910390fd5b604051635ac86ab760e01b8152600260048201819052907f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031690635ac86ab790602401602060405180830381865afa158015610a3c573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610a609190613871565b15610a7e5760405163840a48d560e01b815260040160405180910390fd5b8584148015610a8c57508382145b610aa9576040516343714afd60e01b815260040160405180910390fd5b603a546001600160401b03600160401b9091048116908a1611610adf576040516337e07ffd60e01b815260040160405180910390fd5b610af1610aeb8a610cb1565b89611a58565b5f805b87811015610b8a57610b768b8b358b8b85818110610b1457610b14613913565b9050602002016020810190610b299190613927565b8a8a86818110610b3b57610b3b613913565b9050602002810190610b4d91906138d1565b8a8a88818110610b5f57610b5f613913565b9050602002810190610b71919061388c565b611e88565b610b80908361395f565b9150600101610af4565b5060335460405163a1ca780b60e01b81526001600160a01b0391821660048201525f6024820152604481018390527f00000000000000000000000000000000000000000000000000000000000000009091169063a1ca780b906064015f604051808303815f87803b158015610bfd575f5ffd5b505af1158015610c0f573d5f5f3e3d5ffd5b5050505050505050505050505050565b6060610c4a7f000000000000000000000000000000000000000000000000000000000000000061239b565b905090565b5f5f610c8f84848080601f0160208091040260200160405190810160405280939291908181526020018383808284375f920191909152506123d892505050565b5f90815260366020526040902054600160c01b900460ff169150505b92915050565b5f610cbf611fff600c613972565b610cd26001600160401b03841642613989565b10610cf057604051637944e66d60e11b815260040160405180910390fd5b604080516001600160401b03841660208201525f918291720f3df6d732807ef1319fb7b8bb8522d0beac02910160408051601f1981840301815290829052610d37916139b3565b5f60405180830381855afa9150503d805f8114610d6f576040519150601f19603f3d011682016040523d82523d5f602084013e610d74565b606091505b5091509150818015610d8657505f8151115b610da35760405163558ad0a360e01b815260040160405180910390fd5b80806020019051810190610db791906139be565b949350505050565b610de6604080516080810182525f8082526020820181905291810182905290606082015290565b5f82815260366020908152604091829020825160808101845281546001600160401b038082168352600160401b8204811694830194909452600160801b810490931693810193909352906060830190600160c01b900460ff166002811115610e5057610e506134ba565b6002811115610e6157610e616134ba565b90525092915050565b6033546001600160a01b0316331480610e8d5750603e546001600160a01b031633145b610eaa5760405163427a777960e01b815260040160405180910390fd5b604051635ac86ab760e01b8152600660048201819052907f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031690635ac86ab790602401602060405180830381865afa158015610f10573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610f349190613871565b15610f525760405163840a48d560e01b815260040160405180910390fd5b610f5b82611d08565b5050565b336001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001614610fa857604051633213a66160e21b815260040160405180910390fd5b346801bc16d674ec80000014610fd15760405163049696b360e31b815260040160405180910390fd5b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663228951186801bc16d674ec8000008787611014612469565b8888886040518863ffffffff1660e01b8152600401611038969594939291906139fd565b5f604051808303818588803b15801561104f575f5ffd5b505af1158015611061573d5f5f3e3d5ffd5b50505050507f606865b7934a25d4aed43f6cdb426403353fa4b3009c4d228407474581b01e238585604051611097929190613a4b565b60405180910390a15050505050565b6110cd604080516080810182525f8082526020820181905291810182905290606082015290565b60365f61110e85858080601f0160208091040260200160405190810160405280939291908181526020018383808284375f920191909152506123d892505050565b815260208082019290925260409081015f20815160808101835281546001600160401b038082168352600160401b8204811695830195909552600160801b81049094169281019290925290916060830190600160c01b900460ff16600281111561117a5761117a6134ba565b600281111561118b5761118b6134ba565b9052509392505050565b336001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016146111de57604051633213a66160e21b815260040160405180910390fd5b5f6111ed633b9aca0083613a72565b9050611206633b9aca006001600160401b038316613972565b6034549092506001600160401b039081169082161115611239576040516302c6f54760e21b815260040160405180910390fd5b603480548291905f906112569084906001600160401b0316613a85565b92506101000a8154816001600160401b0302191690836001600160401b03160217905550826001600160a01b03167f8947fd2ce07ef9cc302c4e8f0461015615d91ce851564839e91cc804c2f49d8e836040516112b591815260200190565b60405180910390a26112c78383612499565b505050565b5f54610100900460ff16158080156112ea57505f54600160ff909116105b806113035750303b15801561130357505f5460ff166001145b61136b5760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201526d191e481a5b9a5d1a585b1a5e995960921b60648201526084015b60405180910390fd5b5f805460ff19166001179055801561138c575f805461ff0019166101001790555b6001600160a01b0382166113b3576040516339b190bb60e11b815260040160405180910390fd5b603380546001600160a01b0319166001600160a01b0384161790558015610f5b575f805461ff0019169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15050565b6033546001600160a01b031633146114415760405163719f370360e11b815260040160405180910390fd5b603e54604080516001600160a01b03928316815291831660208301527ffb8129080a19d34dceac04ba253fc50304dc86c729bd63cdca4a969ad19a5eac910160405180910390a1603e80546001600160a01b0319166001600160a01b0392909216919091179055565b6033546001600160a01b031633146114d55760405163719f370360e11b815260040160405180910390fd5b604051635ac86ab760e01b8152600560048201819052907f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031690635ac86ab790602401602060405180830381865afa15801561153b573d5f5f3e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061155f9190613871565b1561157d5760405163840a48d560e01b815260040160405180910390fd5b825184511461159f576040516343714afd60e01b815260040160405180910390fd5b5f5b8451811015611602576115fa838583815181106115c0576115c0613913565b60200260200101518784815181106115da576115da613913565b60200260200101516001600160a01b03166125ae9092919063ffffffff16565b6001016115a1565b5050505050565b604051635ac86ab760e01b8152600760048201819052907f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031690635ac86ab790602401602060405180830381865afa15801561166f573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906116939190613871565b156116b15760405163840a48d560e01b815260040160405180910390fd5b603a54600160401b90046001600160401b03165f8190036116e557604051631a544f4960e01b815260040160405180910390fd5b6040805160a081018252603c548152603d5462ffffff811660208301526001600160401b0363010000008204811693830193909352600160581b810460070b6060830152600160981b9004909116608082015261174c61174483611afd565b825188612600565b5f805b858110156119b5573687878381811061176a5761176a613913565b905060200281019061177c9190613aa4565b80355f908152603660209081526040808320815160808101835281546001600160401b038082168352600160401b8204811695830195909552600160801b8104909416928101929092529394509192906060830190600160c01b900460ff1660028111156117ec576117ec6134ba565b60028111156117fd576117fd6134ba565b905250905060018160600151600281111561181a5761181a6134ba565b146118265750506119ad565b856001600160401b031681604001516001600160401b03161061184a5750506119ad565b5f808061185a848a8f35886126c1565b60208b018051939650919450925061187182613ac2565b62ffffff1690525060808801805184919061188d908390613adf565b6001600160401b03169052506060880180518391906118ad908390613afe565b60070b9052506118bd8188613adf565b85355f908152603660209081526040918290208751815492890151938901516001600160401b03908116600160801b0267ffffffffffffffff60801b19958216600160401b026001600160801b0319909516919092161792909217928316821781556060880151939a50879390929091839160ff60c01b1990911668ffffffffffffffffff60801b1990911617600160c01b836002811115611961576119616134ba565b021790555050845160405164ffffffffff90911691506001600160401b038b16907fa91c59033c3423e18b54d0acecebb4972f9ea95aedf5f4cae3b677b02eaf3a3f905f90a350505050505b60010161174f565b506001600160401b038084165f908152603b60205260408120805484939192916119e191859116613adf565b92506101000a8154816001600160401b0302191690836001600160401b0316021790555061098d826127e4565b5f815f81518110611a2157611a21613913565b60200260200101519050919050565b5f81600381518110611a4457611a44613913565b60200260200101515f5f1b14159050919050565b611a6460036020613972565b611a7160208301836138d1565b905014611a91576040516313717da960e21b815260040160405180910390fd5b611ae0611aa160208301836138d1565b8080601f0160208091040260200160405190810160405280939291908181526020018383808284375f9201919091525086925050843590506003612a13565b610f5b576040516309bde33960e01b815260040160405180910390fd5b5f5f7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316632704351a6040518163ffffffff1660e01b8152600401602060405180830381865afa158015611b5b573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611b7f9190613b2d565b9050806001600160401b03165f03611baa576040516341a02cc960e01b815260040160405180910390fd5b806001600160401b0316836001600160401b03161115611bcb576001611bcd565b5f5b9392505050565b60088414611bf55760405163200591bd60e01b815260040160405180910390fd5b5f611bff88612a2a565b905080611c0e6028600161395f565b611c18919061395f565b611c23906020613972565b8314611c42576040516313717da960e21b815260040160405180910390fd5b5f611c7e8787808060200260200160405190810160405280939291908181526020018383602002808284375f92019190915250612a5292505050565b90505f64ffffffffff8416611c956028600161395f565b600b901b179050611cdf86868080601f0160208091040260200160405190810160405280939291908181526020018383808284375f920191909152508d9250869150859050612a13565b611cfc576040516309bde33960e01b815260040160405180910390fd5b50505050505050505050565b603a54600160401b90046001600160401b031615611d385760405162be9bc360e81b815260040160405180910390fd5b603a546001600160401b03428116911603611d66576040516367db5b8b60e01b815260040160405180910390fd5b6034545f906001600160401b0316611d82633b9aca0047613a72565b611d8c9190613a85565b9050818015611da257506001600160401b038116155b15611dc0576040516332dea95960e21b815260040160405180910390fd5b5f6040518060a00160405280611dd542610cb1565b815260395462ffffff1660208201526001600160401b0380851660408301525f60608301819052608090920191909152603a805442909216600160401b026fffffffffffffffff0000000000000000199092169190911790559050611e39816127e4565b805160208083015160405162ffffff90911681526001600160401b034216917f575796133bbed337e5b39aa49a30dc2556a91e0c6c2af4b7b886ae77ebef1076910160405180910390a3505050565b5f5f611ec58484808060200260200160405190810160405280939291908181526020018383602002808284375f92019190915250611a0e92505050565b5f818152603660209081526040808320815160808101835281546001600160401b038082168352600160401b8204811695830195909552600160801b8104909416928101929092529394509192906060830190600160c01b900460ff166002811115611f3357611f336134ba565b6002811115611f4457611f446134ba565b90525090505f81606001516002811115611f6057611f606134ba565b14611f7e576040516335e09e9d60e01b815260040160405180910390fd5b6001600160401b038016611fc38686808060200260200160405190810160405280939291908181526020018383602002808284375f92019190915250612ce292505050565b6001600160401b031603611fea57604051631958236d60e21b815260040160405180910390fd5b6001600160401b03801661202f8686808060200260200160405190810160405280939291908181526020018383602002808284375f92019190915250612d0692505050565b6001600160401b03161461205657604051632eade63760e01b815260040160405180910390fd5b61205e612469565b61206790613b48565b6120a28686808060200260200160405190810160405280939291908181526020018383602002808284375f92019190915250612d1d92505050565b14806120f757506120b1612d31565b6120ba90613b48565b6120f58686808060200260200160405190810160405280939291908181526020018383602002808284375f92019190915250612d1d92505050565b145b61211457604051633772dd5360e11b815260040160405180910390fd5b5f6121508686808060200260200160405190810160405280939291908181526020018383602002808284375f92019190915250612d4d92505050565b905061216961215e8c611afd565b8b88888c8c8f611bd4565b60398054905f61217883613b6b565b9091555050603a545f90600160401b90046001600160401b0316156121af57603a54600160401b90046001600160401b03166121bc565b603a546001600160401b03165b6040805160808101825264ffffffffff8d1681526001600160401b03858116602083015283169181019190915290915060608101600190525f858152603660209081526040918290208351815492850151938501516001600160401b03908116600160801b0267ffffffffffffffff60801b19958216600160401b026001600160801b031990951691909216179290921792831682178155606084015190929091839160ff60c01b1990911668ffffffffffffffffff60801b1990911617600160c01b836002811115612291576122916134ba565b021790555050603d80548492506013906122bc908490600160981b90046001600160401b0316613adf565b92506101000a8154816001600160401b0302191690836001600160401b031602179055507f2d0800bbc377ea54a08c5db6a87aafff5e3e9c8fead0eda110e40e0c104414498a60405161231c919064ffffffffff91909116815260200190565b60405180910390a16040805164ffffffffff8c1681526001600160401b03838116602083015284168183015290517f0e5fac175b83177cc047381e030d8fb3b42b37bd1c025e22c280facad62c32df9181900360600190a161238b633b9aca006001600160401b038416613972565b9c9b505050505050505050505050565b60605f6123a783612d64565b6040805160208082528183019092529192505f91906020820181803683375050509182525060208101929092525090565b5f81516030146123fb57604051634f88323960e11b815260040160405180910390fd5b6040516002906124119084905f90602001613b83565b60408051601f198184030181529082905261242b916139b3565b602060405180830381855afa158015612446573d5f5f3e3d5ffd5b5050506040513d601f19601f82011682018060405250810190610cab91906139be565b60405160609061248590600160f81b905f903090602001613ba7565b604051602081830303815290604052905090565b804710156124e95760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a20696e73756666696369656e742062616c616e63650000006044820152606401611362565b5f826001600160a01b0316826040515f6040518083038185875af1925050503d805f8114612532576040519150601f19603f3d011682016040523d82523d5f602084013e612537565b606091505b50509050806112c75760405162461bcd60e51b815260206004820152603a60248201527f416464726573733a20756e61626c6520746f2073656e642076616c75652c207260448201527f6563697069656e74206d617920686176652072657665727465640000000000006064820152608401611362565b604080516001600160a01b038416602482015260448082018490528251808303909101815260649091019091526020810180516001600160e01b031663a9059cbb60e01b1790526112c7908490612d8b565b5f61260a84612a2a565b905061261781600361395f565b612622906020613972565b61262f60208401846138d1565b90501461264f576040516313717da960e21b815260040160405180910390fd5b6003811b600c176126a461266660208501856138d1565b8080601f0160208091040260200160405190810160405280939291908181526020018383808284375f92019190915250889250508635905084612a13565b611602576040516309bde33960e01b815260040160405180910390fd5b83516020850151905f908190816126d9878388612e5e565b9050846001600160401b0316816001600160401b031614612753576126fe8582613be5565b6040805164ffffffffff851681526001600160401b038b8116602083015284168183015290519195507f0e5fac175b83177cc047381e030d8fb3b42b37bd1c025e22c280facad62c32df919081900360600190a15b6001600160401b0380821660208b0181905290891660408b01525f036127d85760398054905f61278283613c14565b9091555050600260608a015261279784613c29565b92508164ffffffffff16886001600160401b03167f2a02361ffa66cf2c2da4682c2355a6adcaa9f6c227b6e6563e68480f9587626a60405160405180910390a35b50509450945094915050565b602081015162ffffff1615612884578051603c556020810151603d80546040840151606085015160809095015162ffffff9094166affffffffffffffffffffff199092169190911763010000006001600160401b0392831602176fffffffffffffffffffffffffffffffff60581b1916600160581b9482169490940267ffffffffffffffff60981b191693909317600160981b9390921692909202179055565b60808101516034545f916128a0916001600160401b0316613adf565b90505f826060015183604001516128b79190613afe565b60408401516034805492935090915f906128db9084906001600160401b0316613adf565b82546101009290920a6001600160401b03818102199093169183160217909155603a8054600160401b810483166001600160801b03199091161790555f915061292b90633b9aca00908516613972565b90505f612940633b9aca00600785900b613c4e565b603a546040518281529192506001600160401b0316907f525408c201bc1576eb44116f6478f1c2a54775b19a043bcfdc708364f74f8e449060200160405180910390a260335460405163a1ca780b60e01b81526001600160a01b03918216600482015260248101849052604481018390527f00000000000000000000000000000000000000000000000000000000000000009091169063a1ca780b906064015f604051808303815f87803b1580156129f6575f5ffd5b505af1158015612a08573d5f5f3e3d5ffd5b505050505050505050565b5f83612a20868585612f3c565b1495945050505050565b5f80826001811115612a3e57612a3e6134ba565b14612a4a576006610cab565b600592915050565b5f5f60028351612a629190613a72565b90505f816001600160401b03811115612a7d57612a7d613668565b604051908082528060200260200182016040528015612aa6578160200160208202803683370190505b5090505f5b82811015612ba057600285612ac08383613972565b81518110612ad057612ad0613913565b602002602001015186836002612ae69190613972565b612af190600161395f565b81518110612b0157612b01613913565b6020026020010151604051602001612b23929190918252602082015260400190565b60408051601f1981840301815290829052612b3d916139b3565b602060405180830381855afa158015612b58573d5f5f3e3d5ffd5b5050506040513d601f19601f82011682018060405250810190612b7b91906139be565b828281518110612b8d57612b8d613913565b6020908102919091010152600101612aab565b50612bac600283613a72565b91505b8115612cbf575f5b82811015612cac57600282612bcc8383613972565b81518110612bdc57612bdc613913565b602002602001015183836002612bf29190613972565b612bfd90600161395f565b81518110612c0d57612c0d613913565b6020026020010151604051602001612c2f929190918252602082015260400190565b60408051601f1981840301815290829052612c49916139b3565b602060405180830381855afa158015612c64573d5f5f3e3d5ffd5b5050506040513d601f19601f82011682018060405250810190612c8791906139be565b828281518110612c9957612c99613913565b6020908102919091010152600101612bb7565b50612cb8600283613a72565b9150612baf565b805f81518110612cd157612cd1613913565b602002602001015192505050919050565b5f610cab82600581518110612cf957612cf9613913565b6020026020010151613010565b5f610cab82600681518110612cf957612cf9613913565b5f81600181518110611a2157611a21613913565b60405160609061248590600160f91b905f903090602001613ba7565b5f610cab82600281518110612cf957612cf9613913565b5f60ff8216601f811115610cab57604051632cd44ac360e21b815260040160405180910390fd5b5f612ddf826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c6564815250856001600160a01b03166130779092919063ffffffff16565b905080515f1480612dff575080806020019051810190612dff9190613871565b6112c75760405162461bcd60e51b815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e6044820152691bdd081cdd58d8d9595960b21b6064820152608401611362565b5f612e6b6026600161395f565b612e76906020613972565b612e8360408401846138d1565b905014612ea3576040516313717da960e21b815260040160405180910390fd5b5f612eaf600485613c7d565b64ffffffffff169050612f08612ec860408501856138d1565b8080601f0160208091040260200160405190810160405280939291908181526020018383808284375f920191909152508992505050602086013584612a13565b612f25576040516309bde33960e01b815260040160405180910390fd5b612f33836020013585613085565b95945050505050565b5f83515f14158015612f59575060208451612f579190613ca6565b155b612f76576040516313717da960e21b815260040160405180910390fd5b604080516020808201909252848152905b8551811161300657612f9a600285613ca6565b5f03612fcc5781515f528086015160205260208260405f60026107d05a03fa612fc1575f5ffd5b600284049350612ff4565b808601515f52815160205260208260405f60026107d05a03fa612fed575f5ffd5b6002840493505b612fff60208261395f565b9050612f87565b5051949350505050565b60f881901c60e882901c61ff00161760d882901c62ff0000161760c882901c63ff000000161764ff0000000060b883901c161765ff000000000060a883901c161766ff000000000000609883901c161767ff0000000000000060889290921c919091161790565b6060610db784845f856130b1565b5f80613092600484613cb9565b61309d906040613ce2565b64ffffffffff169050610db784821b613010565b6060824710156131125760405162461bcd60e51b815260206004820152602660248201527f416464726573733a20696e73756666696369656e742062616c616e636520666f6044820152651c8818d85b1b60d21b6064820152608401611362565b5f5f866001600160a01b0316858760405161312d91906139b3565b5f6040518083038185875af1925050503d805f8114613167576040519150601f19603f3d011682016040523d82523d5f602084013e61316c565b606091505b509150915061317d87838387613188565b979650505050505050565b606083156131f65782515f036131ef576001600160a01b0385163b6131ef5760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e74726163740000006044820152606401611362565b5081610db7565b610db7838381511561320b5781518083602001fd5b8060405162461bcd60e51b8152600401611362919061342d565b6001600160401b0381168114613239575f5ffd5b50565b5f6040828403121561324c575f5ffd5b50919050565b5f5f5f60608486031215613264575f5ffd5b833561326f81613225565b925060208401356001600160401b03811115613289575f5ffd5b6132958682870161323c565b92505060408401356001600160401b038111156132b0575f5ffd5b6132bc8682870161323c565b9150509250925092565b5f5f83601f8401126132d6575f5ffd5b5081356001600160401b038111156132ec575f5ffd5b6020830191508360208260051b8501011115613306575f5ffd5b9250929050565b5f5f5f5f5f5f5f5f60a0898b031215613324575f5ffd5b883561332f81613225565b975060208901356001600160401b03811115613349575f5ffd5b6133558b828c0161323c565b97505060408901356001600160401b03811115613370575f5ffd5b61337c8b828c016132c6565b90975095505060608901356001600160401b0381111561339a575f5ffd5b6133a68b828c016132c6565b90955093505060808901356001600160401b038111156133c4575f5ffd5b6133d08b828c016132c6565b999c989b5096995094979396929594505050565b5f602082840312156133f4575f5ffd5b8135611bcd81613225565b5f81518084528060208401602086015e5f602082860101526020601f19601f83011685010191505092915050565b602081525f611bcd60208301846133ff565b5f5f83601f84011261344f575f5ffd5b5081356001600160401b03811115613465575f5ffd5b602083019150836020828501011115613306575f5ffd5b5f5f6020838503121561348d575f5ffd5b82356001600160401b038111156134a2575f5ffd5b6134ae8582860161343f565b90969095509350505050565b634e487b7160e01b5f52602160045260245ffd5b600381106134ea57634e487b7160e01b5f52602160045260245ffd5b9052565b60208101610cab82846134ce565b5f6020828403121561350c575f5ffd5b5035919050565b5f6080820190506001600160401b0383511682526001600160401b0360208401511660208301526001600160401b036040840151166040830152606083015161355f60608401826134ce565b5092915050565b8015158114613239575f5ffd5b5f60208284031215613583575f5ffd5b8135611bcd81613566565b5f5f5f5f5f606086880312156135a2575f5ffd5b85356001600160401b038111156135b7575f5ffd5b6135c38882890161343f565b90965094505060208601356001600160401b038111156135e1575f5ffd5b6135ed8882890161343f565b96999598509660400135949350505050565b6001600160a01b0381168114613239575f5ffd5b803561361e816135ff565b919050565b5f5f60408385031215613634575f5ffd5b823561363f816135ff565b946020939093013593505050565b5f6020828403121561365d575f5ffd5b8135611bcd816135ff565b634e487b7160e01b5f52604160045260245ffd5b604051601f8201601f191681016001600160401b03811182821017156136a4576136a4613668565b604052919050565b5f6001600160401b038211156136c4576136c4613668565b5060051b60200190565b5f82601f8301126136dd575f5ffd5b81356136f06136eb826136ac565b61367c565b8082825260208201915060208360051b860101925085831115613711575f5ffd5b602085015b8381101561372e578035835260209283019201613716565b5095945050505050565b5f5f5f6060848603121561374a575f5ffd5b83356001600160401b0381111561375f575f5ffd5b8401601f8101861361376f575f5ffd5b803561377d6136eb826136ac565b8082825260208201915060208360051b85010192508883111561379e575f5ffd5b6020840193505b828410156137c95783356137b8816135ff565b8252602093840193909101906137a5565b955050505060208401356001600160401b038111156137e6575f5ffd5b6137f2868287016136ce565b92505061380160408501613613565b90509250925092565b5f5f5f6040848603121561381c575f5ffd5b83356001600160401b03811115613831575f5ffd5b61383d8682870161323c565b93505060208401356001600160401b03811115613858575f5ffd5b613864868287016132c6565b9497909650939450505050565b5f60208284031215613881575f5ffd5b8151611bcd81613566565b5f5f8335601e198436030181126138a1575f5ffd5b8301803591506001600160401b038211156138ba575f5ffd5b6020019150600581901b3603821315613306575f5ffd5b5f5f8335601e198436030181126138e6575f5ffd5b8301803591506001600160401b038211156138ff575f5ffd5b602001915036819003821315613306575f5ffd5b634e487b7160e01b5f52603260045260245ffd5b5f60208284031215613937575f5ffd5b813564ffffffffff81168114611bcd575f5ffd5b634e487b7160e01b5f52601160045260245ffd5b80820180821115610cab57610cab61394b565b8082028115828204841417610cab57610cab61394b565b81810381811115610cab57610cab61394b565b5f81518060208401855e5f93019283525090919050565b5f611bcd828461399c565b5f602082840312156139ce575f5ffd5b5051919050565b81835281816020850137505f828201602090810191909152601f909101601f19169091010190565b608081525f613a1060808301888a6139d5565b8281036020840152613a2281886133ff565b90508281036040840152613a378186886139d5565b915050826060830152979650505050505050565b602081525f610db76020830184866139d5565b634e487b7160e01b5f52601260045260245ffd5b5f82613a8057613a80613a5e565b500490565b6001600160401b038281168282160390811115610cab57610cab61394b565b5f8235605e19833603018112613ab8575f5ffd5b9190910192915050565b5f62ffffff821680613ad657613ad661394b565b5f190192915050565b6001600160401b038181168382160190811115610cab57610cab61394b565b600781810b9083900b01677fffffffffffffff8113677fffffffffffffff1982121715610cab57610cab61394b565b5f60208284031215613b3d575f5ffd5b8151611bcd81613225565b8051602080830151919081101561324c575f1960209190910360031b1b16919050565b5f60018201613b7c57613b7c61394b565b5060010190565b5f613b8e828561399c565b6001600160801b03199390931683525050601001919050565b6001600160f81b03199390931683526001600160a81b031991909116600183015260601b6bffffffffffffffffffffffff1916600c82015260200190565b600782810b9082900b03677fffffffffffffff198112677fffffffffffffff82131715610cab57610cab61394b565b5f81613c2257613c2261394b565b505f190190565b5f8160070b677fffffffffffffff198103613c4657613c4661394b565b5f0392915050565b8082025f8212600160ff1b84141615613c6957613c6961394b565b8181058314821517610cab57610cab61394b565b5f64ffffffffff831680613c9357613c93613a5e565b8064ffffffffff84160491505092915050565b5f82613cb457613cb4613a5e565b500690565b5f64ffffffffff831680613ccf57613ccf613a5e565b8064ffffffffff84160691505092915050565b64ffffffffff818116838216029081169081811461355f5761355f61394b56fea2646970667358221220cb89942f15e0e949fa11cdbb46ad67c23d4804cfb0c1c709dd342ddc548f58ef64736f6c634300081b0033", + Bin: "0x610100604052348015610010575f5ffd5b506040516140a63803806140a683398101604081905261002f91610197565b806100398161006e565b608052506001600160a01b0380851660a052831660c0526001600160401b03821660e0526100656100b4565b505050506102e7565b5f5f829050601f815111156100a1578260405163305a27a960e01b8152600401610098919061028c565b60405180910390fd5b80516100ac826102c1565b179392505050565b5f54610100900460ff161561011b5760405162461bcd60e51b815260206004820152602760248201527f496e697469616c697a61626c653a20636f6e747261637420697320696e697469604482015266616c697a696e6760c81b6064820152608401610098565b5f5460ff9081161461016a575f805460ff191660ff9081179091556040519081527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b565b6001600160a01b0381168114610180575f5ffd5b50565b634e487b7160e01b5f52604160045260245ffd5b5f5f5f5f608085870312156101aa575f5ffd5b84516101b58161016c565b60208601519094506101c68161016c565b60408601519093506001600160401b03811681146101e2575f5ffd5b60608601519092506001600160401b038111156101fd575f5ffd5b8501601f8101871361020d575f5ffd5b80516001600160401b0381111561022657610226610183565b604051601f8201601f19908116603f011681016001600160401b038111828210171561025457610254610183565b60405281815282820160200189101561026b575f5ffd5b8160208401602083015e5f6020838301015280935050505092959194509250565b602081525f82518060208401528060208501604085015e5f604082850101526040601f19601f83011684010191505092915050565b805160208083015191908110156102e1575f198160200360031b1b821691505b50919050565b60805160a05160c05160e051613d3861036e5f395f61063f01525f81816102c30152818161067a01528181610722015281816109ef01528181610bba01528181610ec301528181610f6a015281816111a0015281816114ee0152818161162201528181611b0101526129b301525f81816105010152610fd301525f610c260152613d385ff3fe60806040526004361061017e575f3560e01c80636fcd0e53116100cd578063c490744211610087578063dda3346c11610062578063dda3346c146105d1578063ee94d67c146105f0578063f074ba621461060f578063f28824611461062e575f5ffd5b8063c490744214610574578063c4d66de814610593578063d06d5587146105b2575f5ffd5b80636fcd0e531461048f5780637439841f146104bb57806374cdd798146104f057806388676cad146105235780639b4e463414610542578063b522538a14610555575f5ffd5b80634665bcda1161013857806354fd4d501161011357806354fd4d5014610404578063587533571461042557806358eaee79146104445780636c0d2d5a14610470575f5ffd5b80634665bcda146102b257806347d28372146102e557806352396a59146103d0575f5ffd5b8063039157d2146101bc5780630b18ff66146101dd5780632340e8d3146102195780633474aa161461023c5780633f65cf191461026d57806342ecff2a1461028c575f5ffd5b366101b8576040513481527f6fdd3dbdb173299608c0aa9f368735857c8842b581f8389238bf05bd04b3bf499060200160405180910390a1005b5f5ffd5b3480156101c7575f5ffd5b506101db6101d6366004613252565b610661565b005b3480156101e8575f5ffd5b506033546101fc906001600160a01b031681565b6040516001600160a01b0390911681526020015b60405180910390f35b348015610224575f5ffd5b5061022e60395481565b604051908152602001610210565b348015610247575f5ffd5b506034546001600160401b03165b6040516001600160401b039091168152602001610210565b348015610278575f5ffd5b506101db61028736600461330d565b610996565b348015610297575f5ffd5b50603a5461025590600160401b90046001600160401b031681565b3480156102bd575f5ffd5b506101fc7f000000000000000000000000000000000000000000000000000000000000000081565b3480156102f0575f5ffd5b506103756040805160a0810182525f80825260208201819052918101829052606081018290526080810191909152506040805160a081018252603c548152603d5462ffffff811660208301526001600160401b0363010000008204811693830193909352600160581b810460070b6060830152600160981b9004909116608082015290565b60405161021091905f60a0820190508251825262ffffff60208401511660208301526001600160401b036040840151166040830152606083015160070b60608301526001600160401b03608084015116608083015292915050565b3480156103db575f5ffd5b506102556103ea3660046133e4565b603b6020525f90815260409020546001600160401b031681565b34801561040f575f5ffd5b50610418610c1f565b604051610210919061342d565b348015610430575f5ffd5b50603e546101fc906001600160a01b031681565b34801561044f575f5ffd5b5061046361045e36600461347c565b610c4f565b60405161021091906134ee565b34801561047b575f5ffd5b5061022e61048a3660046133e4565b610cb1565b34801561049a575f5ffd5b506104ae6104a93660046134fc565b610dbf565b6040516102109190613513565b3480156104c6575f5ffd5b506104636104d53660046134fc565b5f90815260366020526040902054600160c01b900460ff1690565b3480156104fb575f5ffd5b506101fc7f000000000000000000000000000000000000000000000000000000000000000081565b34801561052e575f5ffd5b506101db61053d366004613573565b610e6a565b6101db61055036600461358e565b610f5f565b348015610560575f5ffd5b506104ae61056f36600461347c565b6110a6565b34801561057f575f5ffd5b506101db61058e366004613623565b611195565b34801561059e575f5ffd5b506101db6105ad36600461364d565b6112cc565b3480156105bd575f5ffd5b506101db6105cc36600461364d565b611416565b3480156105dc575f5ffd5b506101db6105eb366004613738565b6114aa565b3480156105fb575f5ffd5b50603a54610255906001600160401b031681565b34801561061a575f5ffd5b506101db61062936600461380a565b611609565b348015610639575f5ffd5b506102557f000000000000000000000000000000000000000000000000000000000000000081565b604051635ac86ab760e01b8152600660048201819052907f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031690635ac86ab790602401602060405180830381865afa1580156106c7573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906106eb9190613871565b156107095760405163840a48d560e01b815260040160405180910390fd5b604051635ac86ab760e01b8152600860048201819052907f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031690635ac86ab790602401602060405180830381865afa15801561076f573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906107939190613871565b156107b15760405163840a48d560e01b815260040160405180910390fd5b5f6107f56107bf858061388c565b808060200260200160405190810160405280939291908181526020018383602002808284375f92019190915250611a0e92505050565b5f818152603660209081526040808320815160808101835281546001600160401b038082168352600160401b8204811695830195909552600160801b8104909416928101929092529394509192906060830190600160c01b900460ff166002811115610863576108636134ba565b6002811115610874576108746134ba565b81525050905080604001516001600160401b0316876001600160401b0316116108b0576040516337e07ffd60e01b815260040160405180910390fd5b6001816060015160028111156108c8576108c86134ba565b146108e65760405163d49e19a760e01b815260040160405180910390fd5b6109296108f3868061388c565b808060200260200160405190810160405280939291908181526020018383602002808284375f92019190915250611a3092505050565b6109465760405163161ce5ed60e31b815260040160405180910390fd5b61095861095288610cb1565b87611a58565b61098461096488611afd565b8735610970888061388c565b61097d60208b018b6138d1565b8751611bd4565b61098d5f611d08565b50505050505050565b6033546001600160a01b03163314806109b95750603e546001600160a01b031633145b6109d65760405163427a777960e01b815260040160405180910390fd5b604051635ac86ab760e01b8152600260048201819052907f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031690635ac86ab790602401602060405180830381865afa158015610a3c573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610a609190613871565b15610a7e5760405163840a48d560e01b815260040160405180910390fd5b8584148015610a8c57508382145b610aa9576040516343714afd60e01b815260040160405180910390fd5b603a546001600160401b03600160401b9091048116908a1611610adf576040516337e07ffd60e01b815260040160405180910390fd5b610af1610aeb8a610cb1565b89611a58565b5f805b87811015610b8a57610b768b8b358b8b85818110610b1457610b14613913565b9050602002016020810190610b299190613927565b8a8a86818110610b3b57610b3b613913565b9050602002810190610b4d91906138d1565b8a8a88818110610b5f57610b5f613913565b9050602002810190610b71919061388c565b611e88565b610b80908361395f565b9150600101610af4565b5060335460405163a1ca780b60e01b81526001600160a01b0391821660048201525f6024820152604481018390527f00000000000000000000000000000000000000000000000000000000000000009091169063a1ca780b906064015f604051808303815f87803b158015610bfd575f5ffd5b505af1158015610c0f573d5f5f3e3d5ffd5b5050505050505050505050505050565b6060610c4a7f000000000000000000000000000000000000000000000000000000000000000061239b565b905090565b5f5f610c8f84848080601f0160208091040260200160405190810160405280939291908181526020018383808284375f920191909152506123d892505050565b5f90815260366020526040902054600160c01b900460ff169150505b92915050565b5f610cbf611fff600c613972565b610cd26001600160401b03841642613989565b10610cf057604051637944e66d60e11b815260040160405180910390fd5b604080516001600160401b03841660208201525f918291720f3df6d732807ef1319fb7b8bb8522d0beac02910160408051601f1981840301815290829052610d37916139b3565b5f60405180830381855afa9150503d805f8114610d6f576040519150601f19603f3d011682016040523d82523d5f602084013e610d74565b606091505b5091509150818015610d8657505f8151115b610da35760405163558ad0a360e01b815260040160405180910390fd5b80806020019051810190610db791906139be565b949350505050565b610de6604080516080810182525f8082526020820181905291810182905290606082015290565b5f82815260366020908152604091829020825160808101845281546001600160401b038082168352600160401b8204811694830194909452600160801b810490931693810193909352906060830190600160c01b900460ff166002811115610e5057610e506134ba565b6002811115610e6157610e616134ba565b90525092915050565b6033546001600160a01b0316331480610e8d5750603e546001600160a01b031633145b610eaa5760405163427a777960e01b815260040160405180910390fd5b604051635ac86ab760e01b8152600660048201819052907f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031690635ac86ab790602401602060405180830381865afa158015610f10573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610f349190613871565b15610f525760405163840a48d560e01b815260040160405180910390fd5b610f5b82611d08565b5050565b336001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001614610fa857604051633213a66160e21b815260040160405180910390fd5b346801bc16d674ec80000014610fd15760405163049696b360e31b815260040160405180910390fd5b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663228951186801bc16d674ec8000008787611014612469565b8888886040518863ffffffff1660e01b8152600401611038969594939291906139fd565b5f604051808303818588803b15801561104f575f5ffd5b505af1158015611061573d5f5f3e3d5ffd5b50505050507f606865b7934a25d4aed43f6cdb426403353fa4b3009c4d228407474581b01e238585604051611097929190613a4b565b60405180910390a15050505050565b6110cd604080516080810182525f8082526020820181905291810182905290606082015290565b60365f61110e85858080601f0160208091040260200160405190810160405280939291908181526020018383808284375f920191909152506123d892505050565b815260208082019290925260409081015f20815160808101835281546001600160401b038082168352600160401b8204811695830195909552600160801b81049094169281019290925290916060830190600160c01b900460ff16600281111561117a5761117a6134ba565b600281111561118b5761118b6134ba565b9052509392505050565b336001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016146111de57604051633213a66160e21b815260040160405180910390fd5b5f6111ed633b9aca0083613a72565b9050611206633b9aca006001600160401b038316613972565b6034549092506001600160401b039081169082161115611239576040516302c6f54760e21b815260040160405180910390fd5b603480548291905f906112569084906001600160401b0316613a85565b92506101000a8154816001600160401b0302191690836001600160401b03160217905550826001600160a01b03167f8947fd2ce07ef9cc302c4e8f0461015615d91ce851564839e91cc804c2f49d8e836040516112b591815260200190565b60405180910390a26112c78383612499565b505050565b5f54610100900460ff16158080156112ea57505f54600160ff909116105b806113035750303b15801561130357505f5460ff166001145b61136b5760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201526d191e481a5b9a5d1a585b1a5e995960921b60648201526084015b60405180910390fd5b5f805460ff19166001179055801561138c575f805461ff0019166101001790555b6001600160a01b0382166113b3576040516339b190bb60e11b815260040160405180910390fd5b603380546001600160a01b0319166001600160a01b0384161790558015610f5b575f805461ff0019169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15050565b6033546001600160a01b031633146114415760405163719f370360e11b815260040160405180910390fd5b603e54604080516001600160a01b03928316815291831660208301527ffb8129080a19d34dceac04ba253fc50304dc86c729bd63cdca4a969ad19a5eac910160405180910390a1603e80546001600160a01b0319166001600160a01b0392909216919091179055565b6033546001600160a01b031633146114d55760405163719f370360e11b815260040160405180910390fd5b604051635ac86ab760e01b8152600560048201819052907f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031690635ac86ab790602401602060405180830381865afa15801561153b573d5f5f3e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061155f9190613871565b1561157d5760405163840a48d560e01b815260040160405180910390fd5b825184511461159f576040516343714afd60e01b815260040160405180910390fd5b5f5b8451811015611602576115fa838583815181106115c0576115c0613913565b60200260200101518784815181106115da576115da613913565b60200260200101516001600160a01b03166125ae9092919063ffffffff16565b6001016115a1565b5050505050565b604051635ac86ab760e01b8152600760048201819052907f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031690635ac86ab790602401602060405180830381865afa15801561166f573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906116939190613871565b156116b15760405163840a48d560e01b815260040160405180910390fd5b603a54600160401b90046001600160401b03165f8190036116e557604051631a544f4960e01b815260040160405180910390fd5b6040805160a081018252603c548152603d5462ffffff811660208301526001600160401b0363010000008204811693830193909352600160581b810460070b6060830152600160981b9004909116608082015261174c61174483611afd565b825188612600565b5f805b858110156119b5573687878381811061176a5761176a613913565b905060200281019061177c9190613aa4565b80355f908152603660209081526040808320815160808101835281546001600160401b038082168352600160401b8204811695830195909552600160801b8104909416928101929092529394509192906060830190600160c01b900460ff1660028111156117ec576117ec6134ba565b60028111156117fd576117fd6134ba565b905250905060018160600151600281111561181a5761181a6134ba565b146118265750506119ad565b856001600160401b031681604001516001600160401b03161061184a5750506119ad565b5f808061185a848a8f35886126c1565b60208b018051939650919450925061187182613ac2565b62ffffff1690525060808801805184919061188d908390613adf565b6001600160401b03169052506060880180518391906118ad908390613afe565b60070b9052506118bd8188613adf565b85355f908152603660209081526040918290208751815492890151938901516001600160401b03908116600160801b0267ffffffffffffffff60801b19958216600160401b026001600160801b0319909516919092161792909217928316821781556060880151939a50879390929091839160ff60c01b1990911668ffffffffffffffffff60801b1990911617600160c01b836002811115611961576119616134ba565b021790555050845160405164ffffffffff90911691506001600160401b038b16907fa91c59033c3423e18b54d0acecebb4972f9ea95aedf5f4cae3b677b02eaf3a3f905f90a350505050505b60010161174f565b506001600160401b038084165f908152603b60205260408120805484939192916119e191859116613adf565b92506101000a8154816001600160401b0302191690836001600160401b0316021790555061098d826127e4565b5f815f81518110611a2157611a21613913565b60200260200101519050919050565b5f81600381518110611a4457611a44613913565b60200260200101515f5f1b14159050919050565b611a6460036020613972565b611a7160208301836138d1565b905014611a91576040516313717da960e21b815260040160405180910390fd5b611ae0611aa160208301836138d1565b8080601f0160208091040260200160405190810160405280939291908181526020018383808284375f9201919091525086925050843590506003612a13565b610f5b576040516309bde33960e01b815260040160405180910390fd5b5f5f7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316632704351a6040518163ffffffff1660e01b8152600401602060405180830381865afa158015611b5b573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611b7f9190613b2d565b9050806001600160401b03165f03611baa576040516341a02cc960e01b815260040160405180910390fd5b806001600160401b0316836001600160401b03161115611bcb576001611bcd565b5f5b9392505050565b60088414611bf55760405163200591bd60e01b815260040160405180910390fd5b5f611bff88612a2a565b905080611c0e6028600161395f565b611c18919061395f565b611c23906020613972565b8314611c42576040516313717da960e21b815260040160405180910390fd5b5f611c7e8787808060200260200160405190810160405280939291908181526020018383602002808284375f92019190915250612a5292505050565b90505f64ffffffffff8416611c956028600161395f565b600b901b179050611cdf86868080601f0160208091040260200160405190810160405280939291908181526020018383808284375f920191909152508d9250869150859050612a13565b611cfc576040516309bde33960e01b815260040160405180910390fd5b50505050505050505050565b603a54600160401b90046001600160401b031615611d385760405162be9bc360e81b815260040160405180910390fd5b603a546001600160401b03428116911603611d66576040516367db5b8b60e01b815260040160405180910390fd5b6034545f906001600160401b0316611d82633b9aca0047613a72565b611d8c9190613a85565b9050818015611da257506001600160401b038116155b15611dc0576040516332dea95960e21b815260040160405180910390fd5b5f6040518060a00160405280611dd542610cb1565b815260395462ffffff1660208201526001600160401b0380851660408301525f60608301819052608090920191909152603a805442909216600160401b026fffffffffffffffff0000000000000000199092169190911790559050611e39816127e4565b805160208083015160405162ffffff90911681526001600160401b034216917f575796133bbed337e5b39aa49a30dc2556a91e0c6c2af4b7b886ae77ebef1076910160405180910390a3505050565b5f5f611ec58484808060200260200160405190810160405280939291908181526020018383602002808284375f92019190915250611a0e92505050565b5f818152603660209081526040808320815160808101835281546001600160401b038082168352600160401b8204811695830195909552600160801b8104909416928101929092529394509192906060830190600160c01b900460ff166002811115611f3357611f336134ba565b6002811115611f4457611f446134ba565b90525090505f81606001516002811115611f6057611f606134ba565b14611f7e576040516335e09e9d60e01b815260040160405180910390fd5b6001600160401b038016611fc38686808060200260200160405190810160405280939291908181526020018383602002808284375f92019190915250612ce292505050565b6001600160401b031603611fea57604051631958236d60e21b815260040160405180910390fd5b6001600160401b03801661202f8686808060200260200160405190810160405280939291908181526020018383602002808284375f92019190915250612d0692505050565b6001600160401b03161461205657604051632eade63760e01b815260040160405180910390fd5b61205e612469565b61206790613b48565b6120a28686808060200260200160405190810160405280939291908181526020018383602002808284375f92019190915250612d1d92505050565b14806120f757506120b1612d31565b6120ba90613b48565b6120f58686808060200260200160405190810160405280939291908181526020018383602002808284375f92019190915250612d1d92505050565b145b61211457604051633772dd5360e11b815260040160405180910390fd5b5f6121508686808060200260200160405190810160405280939291908181526020018383602002808284375f92019190915250612d4d92505050565b905061216961215e8c611afd565b8b88888c8c8f611bd4565b60398054905f61217883613b6b565b9091555050603a545f90600160401b90046001600160401b0316156121af57603a54600160401b90046001600160401b03166121bc565b603a546001600160401b03165b6040805160808101825264ffffffffff8d1681526001600160401b03858116602083015283169181019190915290915060608101600190525f858152603660209081526040918290208351815492850151938501516001600160401b03908116600160801b0267ffffffffffffffff60801b19958216600160401b026001600160801b031990951691909216179290921792831682178155606084015190929091839160ff60c01b1990911668ffffffffffffffffff60801b1990911617600160c01b836002811115612291576122916134ba565b021790555050603d80548492506013906122bc908490600160981b90046001600160401b0316613adf565b92506101000a8154816001600160401b0302191690836001600160401b031602179055507f2d0800bbc377ea54a08c5db6a87aafff5e3e9c8fead0eda110e40e0c104414498a60405161231c919064ffffffffff91909116815260200190565b60405180910390a16040805164ffffffffff8c1681526001600160401b03838116602083015284168183015290517f0e5fac175b83177cc047381e030d8fb3b42b37bd1c025e22c280facad62c32df9181900360600190a161238b633b9aca006001600160401b038416613972565b9c9b505050505050505050505050565b60605f6123a783612d64565b6040805160208082528183019092529192505f91906020820181803683375050509182525060208101929092525090565b5f81516030146123fb57604051634f88323960e11b815260040160405180910390fd5b6040516002906124119084905f90602001613b83565b60408051601f198184030181529082905261242b916139b3565b602060405180830381855afa158015612446573d5f5f3e3d5ffd5b5050506040513d601f19601f82011682018060405250810190610cab91906139be565b60405160609061248590600160f81b905f903090602001613ba7565b604051602081830303815290604052905090565b804710156124e95760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a20696e73756666696369656e742062616c616e63650000006044820152606401611362565b5f826001600160a01b0316826040515f6040518083038185875af1925050503d805f8114612532576040519150601f19603f3d011682016040523d82523d5f602084013e612537565b606091505b50509050806112c75760405162461bcd60e51b815260206004820152603a60248201527f416464726573733a20756e61626c6520746f2073656e642076616c75652c207260448201527f6563697069656e74206d617920686176652072657665727465640000000000006064820152608401611362565b604080516001600160a01b038416602482015260448082018490528251808303909101815260649091019091526020810180516001600160e01b031663a9059cbb60e01b1790526112c7908490612d8b565b5f61260a84612a2a565b905061261781600361395f565b612622906020613972565b61262f60208401846138d1565b90501461264f576040516313717da960e21b815260040160405180910390fd5b6003811b600c176126a461266660208501856138d1565b8080601f0160208091040260200160405190810160405280939291908181526020018383808284375f92019190915250889250508635905084612a13565b611602576040516309bde33960e01b815260040160405180910390fd5b83516020850151905f908190816126d9878388612e5e565b9050846001600160401b0316816001600160401b031614612753576126fe8582613be5565b6040805164ffffffffff851681526001600160401b038b8116602083015284168183015290519195507f0e5fac175b83177cc047381e030d8fb3b42b37bd1c025e22c280facad62c32df919081900360600190a15b6001600160401b0380821660208b0181905290891660408b01525f036127d85760398054905f61278283613c14565b9091555050600260608a015261279784613c29565b92508164ffffffffff16886001600160401b03167f2a02361ffa66cf2c2da4682c2355a6adcaa9f6c227b6e6563e68480f9587626a60405160405180910390a35b50509450945094915050565b602081015162ffffff1615612884578051603c556020810151603d80546040840151606085015160809095015162ffffff9094166affffffffffffffffffffff199092169190911763010000006001600160401b0392831602176fffffffffffffffffffffffffffffffff60581b1916600160581b9482169490940267ffffffffffffffff60981b191693909317600160981b9390921692909202179055565b60808101516034545f916128a0916001600160401b0316613adf565b90505f826060015183604001516128b79190613afe565b60408401516034805492935090915f906128db9084906001600160401b0316613adf565b82546101009290920a6001600160401b03818102199093169183160217909155603a8054600160401b810483166001600160801b03199091161790555f915061292b90633b9aca00908516613972565b90505f612940633b9aca00600785900b613c4e565b603a546040518281529192506001600160401b0316907f525408c201bc1576eb44116f6478f1c2a54775b19a043bcfdc708364f74f8e449060200160405180910390a260335460405163a1ca780b60e01b81526001600160a01b03918216600482015260248101849052604481018390527f00000000000000000000000000000000000000000000000000000000000000009091169063a1ca780b906064015f604051808303815f87803b1580156129f6575f5ffd5b505af1158015612a08573d5f5f3e3d5ffd5b505050505050505050565b5f83612a20868585612f3c565b1495945050505050565b5f80826001811115612a3e57612a3e6134ba565b14612a4a576006610cab565b600592915050565b5f5f60028351612a629190613a72565b90505f816001600160401b03811115612a7d57612a7d613668565b604051908082528060200260200182016040528015612aa6578160200160208202803683370190505b5090505f5b82811015612ba057600285612ac08383613972565b81518110612ad057612ad0613913565b602002602001015186836002612ae69190613972565b612af190600161395f565b81518110612b0157612b01613913565b6020026020010151604051602001612b23929190918252602082015260400190565b60408051601f1981840301815290829052612b3d916139b3565b602060405180830381855afa158015612b58573d5f5f3e3d5ffd5b5050506040513d601f19601f82011682018060405250810190612b7b91906139be565b828281518110612b8d57612b8d613913565b6020908102919091010152600101612aab565b50612bac600283613a72565b91505b8115612cbf575f5b82811015612cac57600282612bcc8383613972565b81518110612bdc57612bdc613913565b602002602001015183836002612bf29190613972565b612bfd90600161395f565b81518110612c0d57612c0d613913565b6020026020010151604051602001612c2f929190918252602082015260400190565b60408051601f1981840301815290829052612c49916139b3565b602060405180830381855afa158015612c64573d5f5f3e3d5ffd5b5050506040513d601f19601f82011682018060405250810190612c8791906139be565b828281518110612c9957612c99613913565b6020908102919091010152600101612bb7565b50612cb8600283613a72565b9150612baf565b805f81518110612cd157612cd1613913565b602002602001015192505050919050565b5f610cab82600581518110612cf957612cf9613913565b6020026020010151613010565b5f610cab82600681518110612cf957612cf9613913565b5f81600181518110611a2157611a21613913565b60405160609061248590600160f91b905f903090602001613ba7565b5f610cab82600281518110612cf957612cf9613913565b5f60ff8216601f811115610cab57604051632cd44ac360e21b815260040160405180910390fd5b5f612ddf826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c6564815250856001600160a01b03166130779092919063ffffffff16565b905080515f1480612dff575080806020019051810190612dff9190613871565b6112c75760405162461bcd60e51b815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e6044820152691bdd081cdd58d8d9595960b21b6064820152608401611362565b5f612e6b6026600161395f565b612e76906020613972565b612e8360408401846138d1565b905014612ea3576040516313717da960e21b815260040160405180910390fd5b5f612eaf600485613c7d565b64ffffffffff169050612f08612ec860408501856138d1565b8080601f0160208091040260200160405190810160405280939291908181526020018383808284375f920191909152508992505050602086013584612a13565b612f25576040516309bde33960e01b815260040160405180910390fd5b612f33836020013585613085565b95945050505050565b5f83515f14158015612f59575060208451612f579190613ca6565b155b612f76576040516313717da960e21b815260040160405180910390fd5b604080516020808201909252848152905b8551811161300657612f9a600285613ca6565b5f03612fcc5781515f528086015160205260208260405f60026107d05a03fa612fc1575f5ffd5b600284049350612ff4565b808601515f52815160205260208260405f60026107d05a03fa612fed575f5ffd5b6002840493505b612fff60208261395f565b9050612f87565b5051949350505050565b60f881901c60e882901c61ff00161760d882901c62ff0000161760c882901c63ff000000161764ff0000000060b883901c161765ff000000000060a883901c161766ff000000000000609883901c161767ff0000000000000060889290921c919091161790565b6060610db784845f856130b1565b5f80613092600484613cb9565b61309d906040613ce2565b64ffffffffff169050610db784821b613010565b6060824710156131125760405162461bcd60e51b815260206004820152602660248201527f416464726573733a20696e73756666696369656e742062616c616e636520666f6044820152651c8818d85b1b60d21b6064820152608401611362565b5f5f866001600160a01b0316858760405161312d91906139b3565b5f6040518083038185875af1925050503d805f8114613167576040519150601f19603f3d011682016040523d82523d5f602084013e61316c565b606091505b509150915061317d87838387613188565b979650505050505050565b606083156131f65782515f036131ef576001600160a01b0385163b6131ef5760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e74726163740000006044820152606401611362565b5081610db7565b610db7838381511561320b5781518083602001fd5b8060405162461bcd60e51b8152600401611362919061342d565b6001600160401b0381168114613239575f5ffd5b50565b5f6040828403121561324c575f5ffd5b50919050565b5f5f5f60608486031215613264575f5ffd5b833561326f81613225565b925060208401356001600160401b03811115613289575f5ffd5b6132958682870161323c565b92505060408401356001600160401b038111156132b0575f5ffd5b6132bc8682870161323c565b9150509250925092565b5f5f83601f8401126132d6575f5ffd5b5081356001600160401b038111156132ec575f5ffd5b6020830191508360208260051b8501011115613306575f5ffd5b9250929050565b5f5f5f5f5f5f5f5f60a0898b031215613324575f5ffd5b883561332f81613225565b975060208901356001600160401b03811115613349575f5ffd5b6133558b828c0161323c565b97505060408901356001600160401b03811115613370575f5ffd5b61337c8b828c016132c6565b90975095505060608901356001600160401b0381111561339a575f5ffd5b6133a68b828c016132c6565b90955093505060808901356001600160401b038111156133c4575f5ffd5b6133d08b828c016132c6565b999c989b5096995094979396929594505050565b5f602082840312156133f4575f5ffd5b8135611bcd81613225565b5f81518084528060208401602086015e5f602082860101526020601f19601f83011685010191505092915050565b602081525f611bcd60208301846133ff565b5f5f83601f84011261344f575f5ffd5b5081356001600160401b03811115613465575f5ffd5b602083019150836020828501011115613306575f5ffd5b5f5f6020838503121561348d575f5ffd5b82356001600160401b038111156134a2575f5ffd5b6134ae8582860161343f565b90969095509350505050565b634e487b7160e01b5f52602160045260245ffd5b600381106134ea57634e487b7160e01b5f52602160045260245ffd5b9052565b60208101610cab82846134ce565b5f6020828403121561350c575f5ffd5b5035919050565b5f6080820190506001600160401b0383511682526001600160401b0360208401511660208301526001600160401b036040840151166040830152606083015161355f60608401826134ce565b5092915050565b8015158114613239575f5ffd5b5f60208284031215613583575f5ffd5b8135611bcd81613566565b5f5f5f5f5f606086880312156135a2575f5ffd5b85356001600160401b038111156135b7575f5ffd5b6135c38882890161343f565b90965094505060208601356001600160401b038111156135e1575f5ffd5b6135ed8882890161343f565b96999598509660400135949350505050565b6001600160a01b0381168114613239575f5ffd5b803561361e816135ff565b919050565b5f5f60408385031215613634575f5ffd5b823561363f816135ff565b946020939093013593505050565b5f6020828403121561365d575f5ffd5b8135611bcd816135ff565b634e487b7160e01b5f52604160045260245ffd5b604051601f8201601f191681016001600160401b03811182821017156136a4576136a4613668565b604052919050565b5f6001600160401b038211156136c4576136c4613668565b5060051b60200190565b5f82601f8301126136dd575f5ffd5b81356136f06136eb826136ac565b61367c565b8082825260208201915060208360051b860101925085831115613711575f5ffd5b602085015b8381101561372e578035835260209283019201613716565b5095945050505050565b5f5f5f6060848603121561374a575f5ffd5b83356001600160401b0381111561375f575f5ffd5b8401601f8101861361376f575f5ffd5b803561377d6136eb826136ac565b8082825260208201915060208360051b85010192508883111561379e575f5ffd5b6020840193505b828410156137c95783356137b8816135ff565b8252602093840193909101906137a5565b955050505060208401356001600160401b038111156137e6575f5ffd5b6137f2868287016136ce565b92505061380160408501613613565b90509250925092565b5f5f5f6040848603121561381c575f5ffd5b83356001600160401b03811115613831575f5ffd5b61383d8682870161323c565b93505060208401356001600160401b03811115613858575f5ffd5b613864868287016132c6565b9497909650939450505050565b5f60208284031215613881575f5ffd5b8151611bcd81613566565b5f5f8335601e198436030181126138a1575f5ffd5b8301803591506001600160401b038211156138ba575f5ffd5b6020019150600581901b3603821315613306575f5ffd5b5f5f8335601e198436030181126138e6575f5ffd5b8301803591506001600160401b038211156138ff575f5ffd5b602001915036819003821315613306575f5ffd5b634e487b7160e01b5f52603260045260245ffd5b5f60208284031215613937575f5ffd5b813564ffffffffff81168114611bcd575f5ffd5b634e487b7160e01b5f52601160045260245ffd5b80820180821115610cab57610cab61394b565b8082028115828204841417610cab57610cab61394b565b81810381811115610cab57610cab61394b565b5f81518060208401855e5f93019283525090919050565b5f611bcd828461399c565b5f602082840312156139ce575f5ffd5b5051919050565b81835281816020850137505f828201602090810191909152601f909101601f19169091010190565b608081525f613a1060808301888a6139d5565b8281036020840152613a2281886133ff565b90508281036040840152613a378186886139d5565b915050826060830152979650505050505050565b602081525f610db76020830184866139d5565b634e487b7160e01b5f52601260045260245ffd5b5f82613a8057613a80613a5e565b500490565b6001600160401b038281168282160390811115610cab57610cab61394b565b5f8235605e19833603018112613ab8575f5ffd5b9190910192915050565b5f62ffffff821680613ad657613ad661394b565b5f190192915050565b6001600160401b038181168382160190811115610cab57610cab61394b565b600781810b9083900b01677fffffffffffffff8113677fffffffffffffff1982121715610cab57610cab61394b565b5f60208284031215613b3d575f5ffd5b8151611bcd81613225565b8051602080830151919081101561324c575f1960209190910360031b1b16919050565b5f60018201613b7c57613b7c61394b565b5060010190565b5f613b8e828561399c565b6001600160801b03199390931683525050601001919050565b6001600160f81b03199390931683526001600160a81b031991909116600183015260601b6bffffffffffffffffffffffff1916600c82015260200190565b600782810b9082900b03677fffffffffffffff198112677fffffffffffffff82131715610cab57610cab61394b565b5f81613c2257613c2261394b565b505f190190565b5f8160070b677fffffffffffffff198103613c4657613c4661394b565b5f0392915050565b8082025f8212600160ff1b84141615613c6957613c6961394b565b8181058314821517610cab57610cab61394b565b5f64ffffffffff831680613c9357613c93613a5e565b8064ffffffffff84160491505092915050565b5f82613cb457613cb4613a5e565b500690565b5f64ffffffffff831680613ccf57613ccf613a5e565b8064ffffffffff84160691505092915050565b64ffffffffff818116838216029081169081811461355f5761355f61394b56fea264697066735822122061e410d8c1f7c2785eb753b582a764d216e3516fdd3e48d92a3159d9a329a5d964736f6c634300081b0033", } // EigenPodABI is the input ABI used to generate the binding from. diff --git a/pkg/bindings/EigenPodManager/binding.go b/pkg/bindings/EigenPodManager/binding.go index 9074173341..e92b20f417 100644 --- a/pkg/bindings/EigenPodManager/binding.go +++ b/pkg/bindings/EigenPodManager/binding.go @@ -38,7 +38,7 @@ type OperatorSet struct { // EigenPodManagerMetaData contains all meta data concerning the EigenPodManager contract. var EigenPodManagerMetaData = &bind.MetaData{ ABI: "[{\"type\":\"constructor\",\"inputs\":[{\"name\":\"_ethPOS\",\"type\":\"address\",\"internalType\":\"contractIETHPOSDeposit\"},{\"name\":\"_eigenPodBeacon\",\"type\":\"address\",\"internalType\":\"contractIBeacon\"},{\"name\":\"_delegationManager\",\"type\":\"address\",\"internalType\":\"contractIDelegationManager\"},{\"name\":\"_pauserRegistry\",\"type\":\"address\",\"internalType\":\"contractIPauserRegistry\"},{\"name\":\"_version\",\"type\":\"string\",\"internalType\":\"string\"}],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"addShares\",\"inputs\":[{\"name\":\"staker\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"strategy\",\"type\":\"address\",\"internalType\":\"contractIStrategy\"},{\"name\":\"shares\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"outputs\":[{\"name\":\"\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"beaconChainETHStrategy\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"contractIStrategy\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"beaconChainSlashingFactor\",\"inputs\":[{\"name\":\"podOwner\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[{\"name\":\"\",\"type\":\"uint64\",\"internalType\":\"uint64\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"burnableETHShares\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"createPod\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"address\"}],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"delegationManager\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"contractIDelegationManager\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"eigenPodBeacon\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"contractIBeacon\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"ethPOS\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"contractIETHPOSDeposit\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"getPod\",\"inputs\":[{\"name\":\"podOwner\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"contractIEigenPod\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"hasPod\",\"inputs\":[{\"name\":\"podOwner\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[{\"name\":\"\",\"type\":\"bool\",\"internalType\":\"bool\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"increaseBurnOrRedistributableShares\",\"inputs\":[{\"name\":\"\",\"type\":\"tuple\",\"internalType\":\"structOperatorSet\",\"components\":[{\"name\":\"avs\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"id\",\"type\":\"uint32\",\"internalType\":\"uint32\"}]},{\"name\":\"\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"\",\"type\":\"address\",\"internalType\":\"contractIStrategy\"},{\"name\":\"addedSharesToBurn\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"initialize\",\"inputs\":[{\"name\":\"initialOwner\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"_initPausedStatus\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"numPods\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"owner\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"address\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"ownerToPod\",\"inputs\":[{\"name\":\"podOwner\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"contractIEigenPod\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"pause\",\"inputs\":[{\"name\":\"newPausedStatus\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"pauseAll\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"paused\",\"inputs\":[{\"name\":\"index\",\"type\":\"uint8\",\"internalType\":\"uint8\"}],\"outputs\":[{\"name\":\"\",\"type\":\"bool\",\"internalType\":\"bool\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"paused\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"pauserRegistry\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"contractIPauserRegistry\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"pectraForkTimestamp\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"uint64\",\"internalType\":\"uint64\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"podOwnerDepositShares\",\"inputs\":[{\"name\":\"podOwner\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[{\"name\":\"shares\",\"type\":\"int256\",\"internalType\":\"int256\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"proofTimestampSetter\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"address\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"recordBeaconChainETHBalanceUpdate\",\"inputs\":[{\"name\":\"podOwner\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"prevRestakedBalanceWei\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"balanceDeltaWei\",\"type\":\"int256\",\"internalType\":\"int256\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"removeDepositShares\",\"inputs\":[{\"name\":\"staker\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"strategy\",\"type\":\"address\",\"internalType\":\"contractIStrategy\"},{\"name\":\"depositSharesToRemove\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"outputs\":[{\"name\":\"\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"renounceOwnership\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"setPectraForkTimestamp\",\"inputs\":[{\"name\":\"timestamp\",\"type\":\"uint64\",\"internalType\":\"uint64\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"setProofTimestampSetter\",\"inputs\":[{\"name\":\"newProofTimestampSetter\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"stake\",\"inputs\":[{\"name\":\"pubkey\",\"type\":\"bytes\",\"internalType\":\"bytes\"},{\"name\":\"signature\",\"type\":\"bytes\",\"internalType\":\"bytes\"},{\"name\":\"depositDataRoot\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"outputs\":[],\"stateMutability\":\"payable\"},{\"type\":\"function\",\"name\":\"stakerDepositShares\",\"inputs\":[{\"name\":\"user\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"strategy\",\"type\":\"address\",\"internalType\":\"contractIStrategy\"}],\"outputs\":[{\"name\":\"depositShares\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"transferOwnership\",\"inputs\":[{\"name\":\"newOwner\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"unpause\",\"inputs\":[{\"name\":\"newPausedStatus\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"version\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"string\",\"internalType\":\"string\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"withdrawSharesAsTokens\",\"inputs\":[{\"name\":\"staker\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"strategy\",\"type\":\"address\",\"internalType\":\"contractIStrategy\"},{\"name\":\"\",\"type\":\"address\",\"internalType\":\"contractIERC20\"},{\"name\":\"shares\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"event\",\"name\":\"BeaconChainETHDeposited\",\"inputs\":[{\"name\":\"podOwner\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"BeaconChainETHWithdrawalCompleted\",\"inputs\":[{\"name\":\"podOwner\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"shares\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"},{\"name\":\"nonce\",\"type\":\"uint96\",\"indexed\":false,\"internalType\":\"uint96\"},{\"name\":\"delegatedAddress\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"},{\"name\":\"withdrawer\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"},{\"name\":\"withdrawalRoot\",\"type\":\"bytes32\",\"indexed\":false,\"internalType\":\"bytes32\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"BeaconChainSlashingFactorDecreased\",\"inputs\":[{\"name\":\"staker\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"},{\"name\":\"prevBeaconChainSlashingFactor\",\"type\":\"uint64\",\"indexed\":false,\"internalType\":\"uint64\"},{\"name\":\"newBeaconChainSlashingFactor\",\"type\":\"uint64\",\"indexed\":false,\"internalType\":\"uint64\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"BurnableETHSharesIncreased\",\"inputs\":[{\"name\":\"shares\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"Initialized\",\"inputs\":[{\"name\":\"version\",\"type\":\"uint8\",\"indexed\":false,\"internalType\":\"uint8\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"NewTotalShares\",\"inputs\":[{\"name\":\"podOwner\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"newTotalShares\",\"type\":\"int256\",\"indexed\":false,\"internalType\":\"int256\"}],\"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\":\"Paused\",\"inputs\":[{\"name\":\"account\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"newPausedStatus\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"PectraForkTimestampSet\",\"inputs\":[{\"name\":\"newPectraForkTimestamp\",\"type\":\"uint64\",\"indexed\":false,\"internalType\":\"uint64\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"PodDeployed\",\"inputs\":[{\"name\":\"eigenPod\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"podOwner\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"PodSharesUpdated\",\"inputs\":[{\"name\":\"podOwner\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"sharesDelta\",\"type\":\"int256\",\"indexed\":false,\"internalType\":\"int256\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"ProofTimestampSetterSet\",\"inputs\":[{\"name\":\"newProofTimestampSetter\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"Unpaused\",\"inputs\":[{\"name\":\"account\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"newPausedStatus\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"}],\"anonymous\":false},{\"type\":\"error\",\"name\":\"CurrentlyPaused\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"EigenPodAlreadyExists\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"InputAddressZero\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"InvalidNewPausedStatus\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"InvalidShortString\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"InvalidStrategy\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"LegacyWithdrawalsNotCompleted\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"OnlyDelegationManager\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"OnlyEigenPod\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"OnlyPauser\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"OnlyProofTimestampSetter\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"OnlyUnpauser\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"SharesNegative\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"SharesNotMultipleOfGwei\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"StringTooLong\",\"inputs\":[{\"name\":\"str\",\"type\":\"string\",\"internalType\":\"string\"}]}]", - Bin: "0x610120604052348015610010575f5ffd5b50604051612f01380380612f0183398101604081905261002f916101c2565b80858585856001600160a01b03811661005b576040516339b190bb60e11b815260040160405180910390fd5b6001600160a01b0390811660805292831660a05290821660c0521660e05261008281610099565b610100525061008f6100df565b505050505061031a565b5f5f829050601f815111156100cc578260405163305a27a960e01b81526004016100c391906102bf565b60405180910390fd5b80516100d7826102f4565b179392505050565b5f54610100900460ff16156101465760405162461bcd60e51b815260206004820152602760248201527f496e697469616c697a61626c653a20636f6e747261637420697320696e697469604482015266616c697a696e6760c81b60648201526084016100c3565b5f5460ff90811614610195575f805460ff191660ff9081179091556040519081527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b565b6001600160a01b03811681146101ab575f5ffd5b50565b634e487b7160e01b5f52604160045260245ffd5b5f5f5f5f5f60a086880312156101d6575f5ffd5b85516101e181610197565b60208701519095506101f281610197565b604087015190945061020381610197565b606087015190935061021481610197565b60808701519092506001600160401b0381111561022f575f5ffd5b8601601f8101881361023f575f5ffd5b80516001600160401b03811115610258576102586101ae565b604051601f8201601f19908116603f011681016001600160401b0381118282101715610286576102866101ae565b6040528181528282016020018a101561029d575f5ffd5b8160208401602083015e5f602083830101528093505050509295509295909350565b602081525f82518060208401528060208501604085015e5f604082850101526040601f19601f83011684010191505092915050565b80516020808301519190811015610314575f198160200360031b1b821691505b50919050565b60805160a05160c05160e05161010051612b6461039d5f395f610b2401525f818161060c0152818161077b015281816109d401528181610a7a01528181610c0501528181610f82015261103701525f818161028b015281816110cd015261186701525f61044b01525f8181610492015281816114950152611a840152612b645ff3fe6080604052600436106101f1575f3560e01c8063886f119511610108578063a6a509be1161009d578063f2fde38b1161006d578063f2fde38b1461062e578063f5d4fed31461064d578063f6848d2414610662578063fabc1cbc1461069b578063fe243a17146106ba575f5ffd5b8063a6a509be1461059c578063cd6dc687146105b1578063d48e8894146105d0578063ea4d3c9b146105fb575f5ffd5b80639ba06275116100d85780639ba062751461050b578063a1ca780b1461053f578063a38406a31461055e578063a3d75e091461057d575f5ffd5b8063886f1195146104815780638da5cb5b146104b45780639104c319146104d15780639b4e4634146104f8575f5ffd5b8063595c6a67116101895780635c975abb116101595780635c975abb146103e9578063715018a614610407578063724af4231461041b57806374cdd7981461043a57806384d810621461046d575f5ffd5b8063595c6a6714610358578063595edbcb1461036c5780635a26fbf41461038b5780635ac86ab7146103aa575f5ffd5b80632eae418c116101c45780632eae418c146102c55780633fb99ca5146102e457806350ff72251461030357806354fd4d5014610337575f5ffd5b80630d1e9de1146101f5578063136439dd146102165780632704351a14610235578063292b7b2b1461027a575b5f5ffd5b348015610200575f5ffd5b5061021461020f366004611d7e565b6106d9565b005b348015610221575f5ffd5b50610214610230366004611d99565b610736565b348015610240575f5ffd5b50609f5461025c90600160a01b900467ffffffffffffffff1681565b60405167ffffffffffffffff90911681526020015b60405180910390f35b348015610285575f5ffd5b506102ad7f000000000000000000000000000000000000000000000000000000000000000081565b6040516001600160a01b039091168152602001610271565b3480156102d0575f5ffd5b506102146102df366004611db0565b610770565b3480156102ef575f5ffd5b506102146102fe366004611dfe565b6109c9565b34801561030e575f5ffd5b5061032261031d366004611e48565b610a6d565b60408051928352602083019190915201610271565b348015610342575f5ffd5b5061034b610b1d565b6040516102719190611e86565b348015610363575f5ffd5b50610214610b4d565b348015610377575f5ffd5b50609f546102ad906001600160a01b031681565b348015610396575f5ffd5b506102146103a5366004611ebb565b610b61565b3480156103b5575f5ffd5b506103d96103c4366004611ee2565b606654600160ff9092169190911b9081161490565b6040519015158152602001610271565b3480156103f4575f5ffd5b506066545b604051908152602001610271565b348015610412575f5ffd5b50610214610be8565b348015610426575f5ffd5b506103f9610435366004611e48565b610bf9565b348015610445575f5ffd5b506102ad7f000000000000000000000000000000000000000000000000000000000000000081565b348015610478575f5ffd5b506102ad610d3e565b34801561048c575f5ffd5b506102ad7f000000000000000000000000000000000000000000000000000000000000000081565b3480156104bf575f5ffd5b506033546001600160a01b03166102ad565b3480156104dc575f5ffd5b506102ad73beac0eeeeeeeeeeeeeeeeeeeeeeeeeeeeeebeac081565b610214610506366004611f40565b610da1565b348015610516575f5ffd5b506102ad610525366004611d7e565b60986020525f90815260409020546001600160a01b031681565b34801561054a575f5ffd5b50610214610559366004611fb3565b610e52565b348015610569575f5ffd5b506102ad610578366004611d7e565b611073565b348015610588575f5ffd5b5061025c610597366004611d7e565b611144565b3480156105a7575f5ffd5b506103f960995481565b3480156105bc575f5ffd5b506102146105cb366004611fe5565b6111a4565b3480156105db575f5ffd5b506103f96105ea366004611d7e565b609b6020525f908152604090205481565b348015610606575f5ffd5b506102ad7f000000000000000000000000000000000000000000000000000000000000000081565b348015610639575f5ffd5b50610214610648366004611d7e565b6112c0565b348015610658575f5ffd5b506103f9609e5481565b34801561066d575f5ffd5b506103d961067c366004611d7e565b6001600160a01b039081165f9081526098602052604090205416151590565b3480156106a6575f5ffd5b506102146106b5366004611d99565b611339565b3480156106c5575f5ffd5b506103f96106d436600461200f565b6113a6565b6106e1611426565b609f80546001600160a01b0319166001600160a01b0383169081179091556040519081527f7025c71a9fe60d709e71b377dc5f7c72c3e1d8539f8022574254e736ceca01e5906020015b60405180910390a150565b61073e611480565b60665481811681146107635760405163c61dca5d60e01b815260040160405180910390fd5b61076c82611523565b5050565b336001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016146107b95760405163f739589b60e01b815260040160405180910390fd5b6107c1611560565b6001600160a01b03831673beac0eeeeeeeeeeeeeeeeeeeeeeeeeeeeeebeac0146107fe57604051632711b74d60e11b815260040160405180910390fd5b6001600160a01b038416610825576040516339b190bb60e11b815260040160405180910390fd5b5f81136108455760405163ef147de160e01b815260040160405180910390fd5b6001600160a01b0384165f908152609b602052604081205490829082121561093f575f6108718361205a565b90505f8185111561088f5750806108888186612074565b9250610895565b505f9150835b5f6108a08286612087565b6001600160a01b038a165f818152609b60205260409081902083905551919250907f4e2b791dedccd9fb30141b088cabf5c14a8912b52f59375c95c010700b8c6193906108f09085815260200190565b60405180910390a2886001600160a01b03167fd4def76d6d2bed6f14d5cd9af73cc2913d618d00edde42432e81c09bfe0770988260405161093391815260200190565b60405180910390a25050505b80156109b7576001600160a01b038681165f81815260986020526040908190205490516362483a2160e11b81526004810192909252602482018490529091169063c4907442906044015b5f604051808303815f87803b1580156109a0575f5ffd5b505af11580156109b2573d5f5f3e3d5ffd5b505050505b50506109c3600160c955565b50505050565b336001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001614610a125760405163f739589b60e01b815260040160405180910390fd5b610a1a611560565b80609e5f828254610a2b91906120ae565b90915550506040518181527f1ed04b7fd262c0d9e50fa02957f32a81a151f03baaa367faeedc7521b001c4a49060200160405180910390a16109c3600160c955565b5f80336001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001614610ab85760405163f739589b60e01b815260040160405180910390fd5b610ac0611560565b6001600160a01b03841673beac0eeeeeeeeeeeeeeeeeeeeeeeeeeeeeebeac014610afd57604051632711b74d60e11b815260040160405180910390fd5b610b0785846115b9565b91509150610b15600160c955565b935093915050565b6060610b487f0000000000000000000000000000000000000000000000000000000000000000611700565b905090565b610b55611480565b610b5f5f19611523565b565b609f546001600160a01b03163314610b8c57604051630986113760e41b815260040160405180910390fd5b609f805467ffffffffffffffff60a01b1916600160a01b67ffffffffffffffff8416908102919091179091556040519081527f1bc8f042a52db3a437620dea4548f2031fb2a16dd8d3b0b854295528dd2cdd339060200161072b565b610bf0611426565b610b5f5f61173d565b5f336001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001614610c435760405163f739589b60e01b815260040160405180910390fd5b610c4b611560565b6001600160a01b03831673beac0eeeeeeeeeeeeeeeeeeeeeeeeeeeeeebeac014610c8857604051632711b74d60e11b815260040160405180910390fd5b5f610c928361178e565b6001600160a01b0386165f908152609b6020526040902054610cb491906120c1565b90505f811215610cd75760405163ef147de160e01b815260040160405180910390fd5b6001600160a01b0385165f818152609b602052604090819020839055517fd4def76d6d2bed6f14d5cd9af73cc2913d618d00edde42432e81c09bfe07709890610d239084815260200190565b60405180910390a29050610d37600160c955565b9392505050565b5f5f610d49816117f7565b610d51611560565b335f908152609860205260409020546001600160a01b031615610d875760405163031a852160e21b815260040160405180910390fd5b5f610d90611822565b925050610d9d600160c955565b5090565b5f610dab816117f7565b610db3611560565b335f908152609860205260409020546001600160a01b031680610ddb57610dd8611822565b90505b6040516326d3918d60e21b81526001600160a01b03821690639b4e4634903490610e11908b908b908b908b908b9060040161210f565b5f604051808303818588803b158015610e28575f5ffd5b505af1158015610e3a573d5f5f3e3d5ffd5b505050505050610e4a600160c955565b505050505050565b6001600160a01b038084165f908152609860205260409020548491163314610e8d576040516312e16d7160e11b815260040160405180910390fd5b610e95611560565b6001600160a01b038416610ebc576040516339b190bb60e11b815260040160405180910390fd5b610eca633b9aca008361215c565b15610ee8576040516347d072bb60e11b815260040160405180910390fd5b6001600160a01b0384165f908152609b602052604081205490811215610f2157604051634b692bcf60e01b815260040160405180910390fd5b5f831315610fe2575f5f610f3587866115b9565b604051631e328e7960e11b81526001600160a01b038a8116600483015273beac0eeeeeeeeeeeeeeeeeeeeeeeeeeeeeebeac0602483015260448201849052606482018390529294509092507f000000000000000000000000000000000000000000000000000000000000000090911690633c651cf2906084015f604051808303815f87803b158015610fc5575f5ffd5b505af1158015610fd7573d5f5f3e3d5ffd5b505050505050611068565b5f831215611068575f610ffe8686610ff98761205a565b61197d565b60405163305068e760e11b81526001600160a01b0388811660048301526024820185905267ffffffffffffffff831660448301529192507f0000000000000000000000000000000000000000000000000000000000000000909116906360a0d1ce90606401610989565b506109c3600160c955565b6001600160a01b038082165f908152609860205260408120549091168061113e5761113b836001600160a01b03165f1b60405180610940016040528061090e815260200161222161090e9139604080516001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000166020820152808201919091525f606082015260800160408051601f19818403018152908290526111209291602001612192565b60405160208183030381529060405280519060200120611a76565b90505b92915050565b6001600160a01b0381165f908152609d6020908152604080832081518083019092525460ff8116151580835261010090910467ffffffffffffffff16928201929092529061119a57670de0b6b3a7640000610d37565b6020015192915050565b5f54610100900460ff16158080156111c257505f54600160ff909116105b806111db5750303b1580156111db57505f5460ff166001145b6112435760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201526d191e481a5b9a5d1a585b1a5e995960921b60648201526084015b60405180910390fd5b5f805460ff191660011790558015611264575f805461ff0019166101001790555b61126d8361173d565b61127682611523565b80156112bb575f805461ff0019169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b505050565b6112c8611426565b6001600160a01b03811661132d5760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b606482015260840161123a565b6113368161173d565b50565b611341611a82565b606654801982198116146113685760405163c61dca5d60e01b815260040160405180910390fd5b606682905560405182815233907f3582d1828e26bf56bd801502bc021ac0bc8afb57c826e4986b45593c8fad389c9060200160405180910390a25050565b5f6001600160a01b03821673beac0eeeeeeeeeeeeeeeeeeeeeeeeeeeeeebeac0146113e457604051632711b74d60e11b815260040160405180910390fd5b6001600160a01b0383165f908152609b60205260408120541261141e576001600160a01b0383165f908152609b602052604090205461113b565b505f92915050565b6033546001600160a01b03163314610b5f5760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015260640161123a565b60405163237dfb4760e11b81523360048201527f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316906346fbf68e90602401602060405180830381865afa1580156114e2573d5f5f3e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061150691906121ae565b610b5f57604051631d77d47760e21b815260040160405180910390fd5b606681905560405181815233907fab40a374bc51de372200a8bc981af8c9ecdc08dfdaef0bb6e09f88f3c616ef3d9060200160405180910390a250565b600260c954036115b25760405162461bcd60e51b815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c00604482015260640161123a565b600260c955565b5f806001600160a01b0384166115e2576040516339b190bb60e11b815260040160405180910390fd5b5f8312156116035760405163ef147de160e01b815260040160405180910390fd5b6001600160a01b0384165f908152609b602052604081205484916116278383612087565b6001600160a01b0388165f818152609b60205260409081902083905551919250907f4e2b791dedccd9fb30141b088cabf5c14a8912b52f59375c95c010700b8c6193906116779086815260200190565b60405180910390a2866001600160a01b03167fd4def76d6d2bed6f14d5cd9af73cc2913d618d00edde42432e81c09bfe077098826040516116ba91815260200190565b60405180910390a25f81136116d7575f5f945094505050506116f9565b5f8212156116ec575f945092506116f9915050565b5092508391506116f99050565b9250929050565b60605f61170c83611b33565b6040805160208082528183019092529192505f91906020820181803683375050509182525060208101929092525090565b603380546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0905f90a35050565b5f6001600160ff1b03821115610d9d5760405162461bcd60e51b815260206004820152602860248201527f53616665436173743a2076616c756520646f65736e27742066697420696e2061604482015267371034b73a191a9b60c11b606482015260840161123a565b606654600160ff83161b908116036113365760405163840a48d560e01b815260040160405180910390fd5b5f60995f8154611831906121cd565b9091555060408051610940810190915261090e8082525f916118ce91839133916122216020830139604080516001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000166020820152808201919091525f606082015260800160408051601f19818403018152908290526118ba9291602001612192565b604051602081830303815290604052611b5a565b60405163189acdbd60e31b81523360048201529091506001600160a01b0382169063c4d66de8906024015f604051808303815f87803b15801561190f575f5ffd5b505af1158015611921573d5f5f3e3d5ffd5b5050335f8181526098602052604080822080546001600160a01b0319166001600160a01b038816908117909155905192945092507f21c99d0db02213c32fff5b05cf0a718ab5f858802b91498f80d82270289d856a91a3919050565b5f806119898385612074565b90505f61199586611144565b90505f6119ad67ffffffffffffffff83168488611c5c565b90505f6119ba82846121e5565b6040805180820182526001815267ffffffffffffffff85811660208084018281526001600160a01b038f165f818152609d845287902095518654925168ffffffffffffffffff1990931690151568ffffffffffffffff001916176101009286169290920291909117909455845193845291881691830191909152918101919091529091507fb160ab8589bf47dc04ea11b50d46678d21590cea2ed3e454e7bd3e41510f98cf9060600160405180910390a1979650505050505050565b5f61113b838330611d41565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663eab66d7a6040518163ffffffff1660e01b8152600401602060405180830381865afa158015611ade573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611b029190612205565b6001600160a01b0316336001600160a01b031614610b5f5760405163794821ff60e01b815260040160405180910390fd5b5f60ff8216601f81111561113e57604051632cd44ac360e21b815260040160405180910390fd5b5f83471015611bab5760405162461bcd60e51b815260206004820152601d60248201527f437265617465323a20696e73756666696369656e742062616c616e6365000000604482015260640161123a565b81515f03611bfb5760405162461bcd60e51b815260206004820181905260248201527f437265617465323a2062797465636f6465206c656e677468206973207a65726f604482015260640161123a565b8282516020840186f590506001600160a01b038116610d375760405162461bcd60e51b815260206004820152601960248201527f437265617465323a204661696c6564206f6e206465706c6f7900000000000000604482015260640161123a565b5f80805f19858709858702925082811083820303915050805f03611c9357838281611c8957611c89612148565b0492505050610d37565b808411611cda5760405162461bcd60e51b81526020600482015260156024820152744d6174683a206d756c446976206f766572666c6f7760581b604482015260640161123a565b5f8486880960026001871981018816978890046003810283188082028403028082028403028082028403028082028403028082028403029081029092039091025f889003889004909101858311909403939093029303949094049190911702949350505050565b5f604051836040820152846020820152828152600b8101905060ff815360559020949350505050565b6001600160a01b0381168114611336575f5ffd5b5f60208284031215611d8e575f5ffd5b8135610d3781611d6a565b5f60208284031215611da9575f5ffd5b5035919050565b5f5f5f5f60808587031215611dc3575f5ffd5b8435611dce81611d6a565b93506020850135611dde81611d6a565b92506040850135611dee81611d6a565b9396929550929360600135925050565b5f5f5f5f84860360a0811215611e12575f5ffd5b6040811215611e1f575f5ffd5b50849350604084013592506060840135611e3881611d6a565b9396929550929360800135925050565b5f5f5f60608486031215611e5a575f5ffd5b8335611e6581611d6a565b92506020840135611e7581611d6a565b929592945050506040919091013590565b602081525f82518060208401528060208501604085015e5f604082850101526040601f19601f83011684010191505092915050565b5f60208284031215611ecb575f5ffd5b813567ffffffffffffffff81168114610d37575f5ffd5b5f60208284031215611ef2575f5ffd5b813560ff81168114610d37575f5ffd5b5f5f83601f840112611f12575f5ffd5b50813567ffffffffffffffff811115611f29575f5ffd5b6020830191508360208285010111156116f9575f5ffd5b5f5f5f5f5f60608688031215611f54575f5ffd5b853567ffffffffffffffff811115611f6a575f5ffd5b611f7688828901611f02565b909650945050602086013567ffffffffffffffff811115611f95575f5ffd5b611fa188828901611f02565b96999598509660400135949350505050565b5f5f5f60608486031215611fc5575f5ffd5b8335611fd081611d6a565b95602085013595506040909401359392505050565b5f5f60408385031215611ff6575f5ffd5b823561200181611d6a565b946020939093013593505050565b5f5f60408385031215612020575f5ffd5b823561202b81611d6a565b9150602083013561203b81611d6a565b809150509250929050565b634e487b7160e01b5f52601160045260245ffd5b5f600160ff1b820161206e5761206e612046565b505f0390565b8181038181111561113e5761113e612046565b8082018281125f8312801582168215821617156120a6576120a6612046565b505092915050565b8082018082111561113e5761113e612046565b8181035f8312801583831316838312821617156120e0576120e0612046565b5092915050565b81835281816020850137505f828201602090810191909152601f909101601f19169091010190565b606081525f6121226060830187896120e7565b82810360208401526121358186886120e7565b9150508260408301529695505050505050565b634e487b7160e01b5f52601260045260245ffd5b5f8261217657634e487b7160e01b5f52601260045260245ffd5b500790565b5f81518060208401855e5f93019283525090919050565b5f6121a66121a0838661217b565b8461217b565b949350505050565b5f602082840312156121be575f5ffd5b81518015158114610d37575f5ffd5b5f600182016121de576121de612046565b5060010190565b67ffffffffffffffff828116828216039081111561113e5761113e612046565b5f60208284031215612215575f5ffd5b8151610d3781611d6a56fe608060405260405161090e38038061090e83398101604081905261002291610460565b61002e82826000610035565b505061058a565b61003e83610100565b6040516001600160a01b038416907f1cf3b03a6cf19fa2baba4df148e9dcabedea7f8a5c07840e207e5c089be95d3e90600090a260008251118061007f5750805b156100fb576100f9836001600160a01b0316635c60da1b6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156100c5573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906100e99190610520565b836102a360201b6100291760201c565b505b505050565b610113816102cf60201b6100551760201c565b6101725760405162461bcd60e51b815260206004820152602560248201527f455243313936373a206e657720626561636f6e206973206e6f74206120636f6e6044820152641d1c9858dd60da1b60648201526084015b60405180910390fd5b6101e6816001600160a01b0316635c60da1b6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156101b3573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906101d79190610520565b6102cf60201b6100551760201c565b61024b5760405162461bcd60e51b815260206004820152603060248201527f455243313936373a20626561636f6e20696d706c656d656e746174696f6e206960448201526f1cc81b9bdd08184818dbdb9d1c9858dd60821b6064820152608401610169565b806102827fa3f0ad74e5423aebfd80d3ef4346578335a9a72aeaee59ff6cb3582b35133d5060001b6102de60201b6100641760201c565b80546001600160a01b0319166001600160a01b039290921691909117905550565b60606102c883836040518060600160405280602781526020016108e7602791396102e1565b9392505050565b6001600160a01b03163b151590565b90565b6060600080856001600160a01b0316856040516102fe919061053b565b600060405180830381855af49150503d8060008114610339576040519150601f19603f3d011682016040523d82523d6000602084013e61033e565b606091505b5090925090506103508683838761035a565b9695505050505050565b606083156103c65782516103bf576001600160a01b0385163b6103bf5760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e74726163740000006044820152606401610169565b50816103d0565b6103d083836103d8565b949350505050565b8151156103e85781518083602001fd5b8060405162461bcd60e51b81526004016101699190610557565b80516001600160a01b038116811461041957600080fd5b919050565b634e487b7160e01b600052604160045260246000fd5b60005b8381101561044f578181015183820152602001610437565b838111156100f95750506000910152565b6000806040838503121561047357600080fd5b61047c83610402565b60208401519092506001600160401b038082111561049957600080fd5b818501915085601f8301126104ad57600080fd5b8151818111156104bf576104bf61041e565b604051601f8201601f19908116603f011681019083821181831017156104e7576104e761041e565b8160405282815288602084870101111561050057600080fd5b610511836020830160208801610434565b80955050505050509250929050565b60006020828403121561053257600080fd5b6102c882610402565b6000825161054d818460208701610434565b9190910192915050565b6020815260008251806020840152610576816040850160208701610434565b601f01601f19169190910160400192915050565b61034e806105996000396000f3fe60806040523661001357610011610017565b005b6100115b610027610022610067565b610100565b565b606061004e83836040518060600160405280602781526020016102f260279139610124565b9392505050565b6001600160a01b03163b151590565b90565b600061009a7fa3f0ad74e5423aebfd80d3ef4346578335a9a72aeaee59ff6cb3582b35133d50546001600160a01b031690565b6001600160a01b0316635c60da1b6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156100d7573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906100fb9190610249565b905090565b3660008037600080366000845af43d6000803e80801561011f573d6000f35b3d6000fd5b6060600080856001600160a01b03168560405161014191906102a2565b600060405180830381855af49150503d806000811461017c576040519150601f19603f3d011682016040523d82523d6000602084013e610181565b606091505b50915091506101928683838761019c565b9695505050505050565b6060831561020d578251610206576001600160a01b0385163b6102065760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e747261637400000060448201526064015b60405180910390fd5b5081610217565b610217838361021f565b949350505050565b81511561022f5781518083602001fd5b8060405162461bcd60e51b81526004016101fd91906102be565b60006020828403121561025b57600080fd5b81516001600160a01b038116811461004e57600080fd5b60005b8381101561028d578181015183820152602001610275565b8381111561029c576000848401525b50505050565b600082516102b4818460208701610272565b9190910192915050565b60208152600082518060208401526102dd816040850160208701610272565b601f01601f1916919091016040019291505056fe416464726573733a206c6f772d6c6576656c2064656c65676174652063616c6c206661696c6564a2646970667358221220d51e81d3bc5ed20a26aeb05dce7e825c503b2061aa78628027300c8d65b9d89a64736f6c634300080c0033416464726573733a206c6f772d6c6576656c2064656c65676174652063616c6c206661696c6564a2646970667358221220512a5029b7f4e2c39c9351c75060adc2185cef28998caf926cfd1398d7399bab64736f6c634300081b0033", + Bin: "0x610120604052348015610010575f5ffd5b50604051612f01380380612f0183398101604081905261002f916101c2565b80858585856001600160a01b03811661005b576040516339b190bb60e11b815260040160405180910390fd5b6001600160a01b0390811660805292831660a05290821660c0521660e05261008281610099565b610100525061008f6100df565b505050505061031a565b5f5f829050601f815111156100cc578260405163305a27a960e01b81526004016100c391906102bf565b60405180910390fd5b80516100d7826102f4565b179392505050565b5f54610100900460ff16156101465760405162461bcd60e51b815260206004820152602760248201527f496e697469616c697a61626c653a20636f6e747261637420697320696e697469604482015266616c697a696e6760c81b60648201526084016100c3565b5f5460ff90811614610195575f805460ff191660ff9081179091556040519081527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b565b6001600160a01b03811681146101ab575f5ffd5b50565b634e487b7160e01b5f52604160045260245ffd5b5f5f5f5f5f60a086880312156101d6575f5ffd5b85516101e181610197565b60208701519095506101f281610197565b604087015190945061020381610197565b606087015190935061021481610197565b60808701519092506001600160401b0381111561022f575f5ffd5b8601601f8101881361023f575f5ffd5b80516001600160401b03811115610258576102586101ae565b604051601f8201601f19908116603f011681016001600160401b0381118282101715610286576102866101ae565b6040528181528282016020018a101561029d575f5ffd5b8160208401602083015e5f602083830101528093505050509295509295909350565b602081525f82518060208401528060208501604085015e5f604082850101526040601f19601f83011684010191505092915050565b80516020808301519190811015610314575f198160200360031b1b821691505b50919050565b60805160a05160c05160e05161010051612b6461039d5f395f610b2401525f818161060c0152818161077b015281816109d401528181610a7a01528181610c0501528181610f82015261103701525f818161028b015281816110cd015261186701525f61044b01525f8181610492015281816114950152611a840152612b645ff3fe6080604052600436106101f1575f3560e01c8063886f119511610108578063a6a509be1161009d578063f2fde38b1161006d578063f2fde38b1461062e578063f5d4fed31461064d578063f6848d2414610662578063fabc1cbc1461069b578063fe243a17146106ba575f5ffd5b8063a6a509be1461059c578063cd6dc687146105b1578063d48e8894146105d0578063ea4d3c9b146105fb575f5ffd5b80639ba06275116100d85780639ba062751461050b578063a1ca780b1461053f578063a38406a31461055e578063a3d75e091461057d575f5ffd5b8063886f1195146104815780638da5cb5b146104b45780639104c319146104d15780639b4e4634146104f8575f5ffd5b8063595c6a67116101895780635c975abb116101595780635c975abb146103e9578063715018a614610407578063724af4231461041b57806374cdd7981461043a57806384d810621461046d575f5ffd5b8063595c6a6714610358578063595edbcb1461036c5780635a26fbf41461038b5780635ac86ab7146103aa575f5ffd5b80632eae418c116101c45780632eae418c146102c55780633fb99ca5146102e457806350ff72251461030357806354fd4d5014610337575f5ffd5b80630d1e9de1146101f5578063136439dd146102165780632704351a14610235578063292b7b2b1461027a575b5f5ffd5b348015610200575f5ffd5b5061021461020f366004611d7e565b6106d9565b005b348015610221575f5ffd5b50610214610230366004611d99565b610736565b348015610240575f5ffd5b50609f5461025c90600160a01b900467ffffffffffffffff1681565b60405167ffffffffffffffff90911681526020015b60405180910390f35b348015610285575f5ffd5b506102ad7f000000000000000000000000000000000000000000000000000000000000000081565b6040516001600160a01b039091168152602001610271565b3480156102d0575f5ffd5b506102146102df366004611db0565b610770565b3480156102ef575f5ffd5b506102146102fe366004611dfe565b6109c9565b34801561030e575f5ffd5b5061032261031d366004611e48565b610a6d565b60408051928352602083019190915201610271565b348015610342575f5ffd5b5061034b610b1d565b6040516102719190611e86565b348015610363575f5ffd5b50610214610b4d565b348015610377575f5ffd5b50609f546102ad906001600160a01b031681565b348015610396575f5ffd5b506102146103a5366004611ebb565b610b61565b3480156103b5575f5ffd5b506103d96103c4366004611ee2565b606654600160ff9092169190911b9081161490565b6040519015158152602001610271565b3480156103f4575f5ffd5b506066545b604051908152602001610271565b348015610412575f5ffd5b50610214610be8565b348015610426575f5ffd5b506103f9610435366004611e48565b610bf9565b348015610445575f5ffd5b506102ad7f000000000000000000000000000000000000000000000000000000000000000081565b348015610478575f5ffd5b506102ad610d3e565b34801561048c575f5ffd5b506102ad7f000000000000000000000000000000000000000000000000000000000000000081565b3480156104bf575f5ffd5b506033546001600160a01b03166102ad565b3480156104dc575f5ffd5b506102ad73beac0eeeeeeeeeeeeeeeeeeeeeeeeeeeeeebeac081565b610214610506366004611f40565b610da1565b348015610516575f5ffd5b506102ad610525366004611d7e565b60986020525f90815260409020546001600160a01b031681565b34801561054a575f5ffd5b50610214610559366004611fb3565b610e52565b348015610569575f5ffd5b506102ad610578366004611d7e565b611073565b348015610588575f5ffd5b5061025c610597366004611d7e565b611144565b3480156105a7575f5ffd5b506103f960995481565b3480156105bc575f5ffd5b506102146105cb366004611fe5565b6111a4565b3480156105db575f5ffd5b506103f96105ea366004611d7e565b609b6020525f908152604090205481565b348015610606575f5ffd5b506102ad7f000000000000000000000000000000000000000000000000000000000000000081565b348015610639575f5ffd5b50610214610648366004611d7e565b6112c0565b348015610658575f5ffd5b506103f9609e5481565b34801561066d575f5ffd5b506103d961067c366004611d7e565b6001600160a01b039081165f9081526098602052604090205416151590565b3480156106a6575f5ffd5b506102146106b5366004611d99565b611339565b3480156106c5575f5ffd5b506103f96106d436600461200f565b6113a6565b6106e1611426565b609f80546001600160a01b0319166001600160a01b0383169081179091556040519081527f7025c71a9fe60d709e71b377dc5f7c72c3e1d8539f8022574254e736ceca01e5906020015b60405180910390a150565b61073e611480565b60665481811681146107635760405163c61dca5d60e01b815260040160405180910390fd5b61076c82611523565b5050565b336001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016146107b95760405163f739589b60e01b815260040160405180910390fd5b6107c1611560565b6001600160a01b03831673beac0eeeeeeeeeeeeeeeeeeeeeeeeeeeeeebeac0146107fe57604051632711b74d60e11b815260040160405180910390fd5b6001600160a01b038416610825576040516339b190bb60e11b815260040160405180910390fd5b5f81136108455760405163ef147de160e01b815260040160405180910390fd5b6001600160a01b0384165f908152609b602052604081205490829082121561093f575f6108718361205a565b90505f8185111561088f5750806108888186612074565b9250610895565b505f9150835b5f6108a08286612087565b6001600160a01b038a165f818152609b60205260409081902083905551919250907f4e2b791dedccd9fb30141b088cabf5c14a8912b52f59375c95c010700b8c6193906108f09085815260200190565b60405180910390a2886001600160a01b03167fd4def76d6d2bed6f14d5cd9af73cc2913d618d00edde42432e81c09bfe0770988260405161093391815260200190565b60405180910390a25050505b80156109b7576001600160a01b038681165f81815260986020526040908190205490516362483a2160e11b81526004810192909252602482018490529091169063c4907442906044015b5f604051808303815f87803b1580156109a0575f5ffd5b505af11580156109b2573d5f5f3e3d5ffd5b505050505b50506109c3600160c955565b50505050565b336001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001614610a125760405163f739589b60e01b815260040160405180910390fd5b610a1a611560565b80609e5f828254610a2b91906120ae565b90915550506040518181527f1ed04b7fd262c0d9e50fa02957f32a81a151f03baaa367faeedc7521b001c4a49060200160405180910390a16109c3600160c955565b5f80336001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001614610ab85760405163f739589b60e01b815260040160405180910390fd5b610ac0611560565b6001600160a01b03841673beac0eeeeeeeeeeeeeeeeeeeeeeeeeeeeeebeac014610afd57604051632711b74d60e11b815260040160405180910390fd5b610b0785846115b9565b91509150610b15600160c955565b935093915050565b6060610b487f0000000000000000000000000000000000000000000000000000000000000000611700565b905090565b610b55611480565b610b5f5f19611523565b565b609f546001600160a01b03163314610b8c57604051630986113760e41b815260040160405180910390fd5b609f805467ffffffffffffffff60a01b1916600160a01b67ffffffffffffffff8416908102919091179091556040519081527f1bc8f042a52db3a437620dea4548f2031fb2a16dd8d3b0b854295528dd2cdd339060200161072b565b610bf0611426565b610b5f5f61173d565b5f336001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001614610c435760405163f739589b60e01b815260040160405180910390fd5b610c4b611560565b6001600160a01b03831673beac0eeeeeeeeeeeeeeeeeeeeeeeeeeeeeebeac014610c8857604051632711b74d60e11b815260040160405180910390fd5b5f610c928361178e565b6001600160a01b0386165f908152609b6020526040902054610cb491906120c1565b90505f811215610cd75760405163ef147de160e01b815260040160405180910390fd5b6001600160a01b0385165f818152609b602052604090819020839055517fd4def76d6d2bed6f14d5cd9af73cc2913d618d00edde42432e81c09bfe07709890610d239084815260200190565b60405180910390a29050610d37600160c955565b9392505050565b5f5f610d49816117f7565b610d51611560565b335f908152609860205260409020546001600160a01b031615610d875760405163031a852160e21b815260040160405180910390fd5b5f610d90611822565b925050610d9d600160c955565b5090565b5f610dab816117f7565b610db3611560565b335f908152609860205260409020546001600160a01b031680610ddb57610dd8611822565b90505b6040516326d3918d60e21b81526001600160a01b03821690639b4e4634903490610e11908b908b908b908b908b9060040161210f565b5f604051808303818588803b158015610e28575f5ffd5b505af1158015610e3a573d5f5f3e3d5ffd5b505050505050610e4a600160c955565b505050505050565b6001600160a01b038084165f908152609860205260409020548491163314610e8d576040516312e16d7160e11b815260040160405180910390fd5b610e95611560565b6001600160a01b038416610ebc576040516339b190bb60e11b815260040160405180910390fd5b610eca633b9aca008361215c565b15610ee8576040516347d072bb60e11b815260040160405180910390fd5b6001600160a01b0384165f908152609b602052604081205490811215610f2157604051634b692bcf60e01b815260040160405180910390fd5b5f831315610fe2575f5f610f3587866115b9565b604051631e328e7960e11b81526001600160a01b038a8116600483015273beac0eeeeeeeeeeeeeeeeeeeeeeeeeeeeeebeac0602483015260448201849052606482018390529294509092507f000000000000000000000000000000000000000000000000000000000000000090911690633c651cf2906084015f604051808303815f87803b158015610fc5575f5ffd5b505af1158015610fd7573d5f5f3e3d5ffd5b505050505050611068565b5f831215611068575f610ffe8686610ff98761205a565b61197d565b60405163305068e760e11b81526001600160a01b0388811660048301526024820185905267ffffffffffffffff831660448301529192507f0000000000000000000000000000000000000000000000000000000000000000909116906360a0d1ce90606401610989565b506109c3600160c955565b6001600160a01b038082165f908152609860205260408120549091168061113e5761113b836001600160a01b03165f1b60405180610940016040528061090e815260200161222161090e9139604080516001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000166020820152808201919091525f606082015260800160408051601f19818403018152908290526111209291602001612192565b60405160208183030381529060405280519060200120611a76565b90505b92915050565b6001600160a01b0381165f908152609d6020908152604080832081518083019092525460ff8116151580835261010090910467ffffffffffffffff16928201929092529061119a57670de0b6b3a7640000610d37565b6020015192915050565b5f54610100900460ff16158080156111c257505f54600160ff909116105b806111db5750303b1580156111db57505f5460ff166001145b6112435760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201526d191e481a5b9a5d1a585b1a5e995960921b60648201526084015b60405180910390fd5b5f805460ff191660011790558015611264575f805461ff0019166101001790555b61126d8361173d565b61127682611523565b80156112bb575f805461ff0019169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b505050565b6112c8611426565b6001600160a01b03811661132d5760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b606482015260840161123a565b6113368161173d565b50565b611341611a82565b606654801982198116146113685760405163c61dca5d60e01b815260040160405180910390fd5b606682905560405182815233907f3582d1828e26bf56bd801502bc021ac0bc8afb57c826e4986b45593c8fad389c9060200160405180910390a25050565b5f6001600160a01b03821673beac0eeeeeeeeeeeeeeeeeeeeeeeeeeeeeebeac0146113e457604051632711b74d60e11b815260040160405180910390fd5b6001600160a01b0383165f908152609b60205260408120541261141e576001600160a01b0383165f908152609b602052604090205461113b565b505f92915050565b6033546001600160a01b03163314610b5f5760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015260640161123a565b60405163237dfb4760e11b81523360048201527f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316906346fbf68e90602401602060405180830381865afa1580156114e2573d5f5f3e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061150691906121ae565b610b5f57604051631d77d47760e21b815260040160405180910390fd5b606681905560405181815233907fab40a374bc51de372200a8bc981af8c9ecdc08dfdaef0bb6e09f88f3c616ef3d9060200160405180910390a250565b600260c954036115b25760405162461bcd60e51b815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c00604482015260640161123a565b600260c955565b5f806001600160a01b0384166115e2576040516339b190bb60e11b815260040160405180910390fd5b5f8312156116035760405163ef147de160e01b815260040160405180910390fd5b6001600160a01b0384165f908152609b602052604081205484916116278383612087565b6001600160a01b0388165f818152609b60205260409081902083905551919250907f4e2b791dedccd9fb30141b088cabf5c14a8912b52f59375c95c010700b8c6193906116779086815260200190565b60405180910390a2866001600160a01b03167fd4def76d6d2bed6f14d5cd9af73cc2913d618d00edde42432e81c09bfe077098826040516116ba91815260200190565b60405180910390a25f81136116d7575f5f945094505050506116f9565b5f8212156116ec575f945092506116f9915050565b5092508391506116f99050565b9250929050565b60605f61170c83611b33565b6040805160208082528183019092529192505f91906020820181803683375050509182525060208101929092525090565b603380546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0905f90a35050565b5f6001600160ff1b03821115610d9d5760405162461bcd60e51b815260206004820152602860248201527f53616665436173743a2076616c756520646f65736e27742066697420696e2061604482015267371034b73a191a9b60c11b606482015260840161123a565b606654600160ff83161b908116036113365760405163840a48d560e01b815260040160405180910390fd5b5f60995f8154611831906121cd565b9091555060408051610940810190915261090e8082525f916118ce91839133916122216020830139604080516001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000166020820152808201919091525f606082015260800160408051601f19818403018152908290526118ba9291602001612192565b604051602081830303815290604052611b5a565b60405163189acdbd60e31b81523360048201529091506001600160a01b0382169063c4d66de8906024015f604051808303815f87803b15801561190f575f5ffd5b505af1158015611921573d5f5f3e3d5ffd5b5050335f8181526098602052604080822080546001600160a01b0319166001600160a01b038816908117909155905192945092507f21c99d0db02213c32fff5b05cf0a718ab5f858802b91498f80d82270289d856a91a3919050565b5f806119898385612074565b90505f61199586611144565b90505f6119ad67ffffffffffffffff83168488611c5c565b90505f6119ba82846121e5565b6040805180820182526001815267ffffffffffffffff85811660208084018281526001600160a01b038f165f818152609d845287902095518654925168ffffffffffffffffff1990931690151568ffffffffffffffff001916176101009286169290920291909117909455845193845291881691830191909152918101919091529091507fb160ab8589bf47dc04ea11b50d46678d21590cea2ed3e454e7bd3e41510f98cf9060600160405180910390a1979650505050505050565b5f61113b838330611d41565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663eab66d7a6040518163ffffffff1660e01b8152600401602060405180830381865afa158015611ade573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611b029190612205565b6001600160a01b0316336001600160a01b031614610b5f5760405163794821ff60e01b815260040160405180910390fd5b5f60ff8216601f81111561113e57604051632cd44ac360e21b815260040160405180910390fd5b5f83471015611bab5760405162461bcd60e51b815260206004820152601d60248201527f437265617465323a20696e73756666696369656e742062616c616e6365000000604482015260640161123a565b81515f03611bfb5760405162461bcd60e51b815260206004820181905260248201527f437265617465323a2062797465636f6465206c656e677468206973207a65726f604482015260640161123a565b8282516020840186f590506001600160a01b038116610d375760405162461bcd60e51b815260206004820152601960248201527f437265617465323a204661696c6564206f6e206465706c6f7900000000000000604482015260640161123a565b5f80805f19858709858702925082811083820303915050805f03611c9357838281611c8957611c89612148565b0492505050610d37565b808411611cda5760405162461bcd60e51b81526020600482015260156024820152744d6174683a206d756c446976206f766572666c6f7760581b604482015260640161123a565b5f8486880960026001871981018816978890046003810283188082028403028082028403028082028403028082028403028082028403029081029092039091025f889003889004909101858311909403939093029303949094049190911702949350505050565b5f604051836040820152846020820152828152600b8101905060ff815360559020949350505050565b6001600160a01b0381168114611336575f5ffd5b5f60208284031215611d8e575f5ffd5b8135610d3781611d6a565b5f60208284031215611da9575f5ffd5b5035919050565b5f5f5f5f60808587031215611dc3575f5ffd5b8435611dce81611d6a565b93506020850135611dde81611d6a565b92506040850135611dee81611d6a565b9396929550929360600135925050565b5f5f5f5f84860360a0811215611e12575f5ffd5b6040811215611e1f575f5ffd5b50849350604084013592506060840135611e3881611d6a565b9396929550929360800135925050565b5f5f5f60608486031215611e5a575f5ffd5b8335611e6581611d6a565b92506020840135611e7581611d6a565b929592945050506040919091013590565b602081525f82518060208401528060208501604085015e5f604082850101526040601f19601f83011684010191505092915050565b5f60208284031215611ecb575f5ffd5b813567ffffffffffffffff81168114610d37575f5ffd5b5f60208284031215611ef2575f5ffd5b813560ff81168114610d37575f5ffd5b5f5f83601f840112611f12575f5ffd5b50813567ffffffffffffffff811115611f29575f5ffd5b6020830191508360208285010111156116f9575f5ffd5b5f5f5f5f5f60608688031215611f54575f5ffd5b853567ffffffffffffffff811115611f6a575f5ffd5b611f7688828901611f02565b909650945050602086013567ffffffffffffffff811115611f95575f5ffd5b611fa188828901611f02565b96999598509660400135949350505050565b5f5f5f60608486031215611fc5575f5ffd5b8335611fd081611d6a565b95602085013595506040909401359392505050565b5f5f60408385031215611ff6575f5ffd5b823561200181611d6a565b946020939093013593505050565b5f5f60408385031215612020575f5ffd5b823561202b81611d6a565b9150602083013561203b81611d6a565b809150509250929050565b634e487b7160e01b5f52601160045260245ffd5b5f600160ff1b820161206e5761206e612046565b505f0390565b8181038181111561113e5761113e612046565b8082018281125f8312801582168215821617156120a6576120a6612046565b505092915050565b8082018082111561113e5761113e612046565b8181035f8312801583831316838312821617156120e0576120e0612046565b5092915050565b81835281816020850137505f828201602090810191909152601f909101601f19169091010190565b606081525f6121226060830187896120e7565b82810360208401526121358186886120e7565b9150508260408301529695505050505050565b634e487b7160e01b5f52601260045260245ffd5b5f8261217657634e487b7160e01b5f52601260045260245ffd5b500790565b5f81518060208401855e5f93019283525090919050565b5f6121a66121a0838661217b565b8461217b565b949350505050565b5f602082840312156121be575f5ffd5b81518015158114610d37575f5ffd5b5f600182016121de576121de612046565b5060010190565b67ffffffffffffffff828116828216039081111561113e5761113e612046565b5f60208284031215612215575f5ffd5b8151610d3781611d6a56fe608060405260405161090e38038061090e83398101604081905261002291610460565b61002e82826000610035565b505061058a565b61003e83610100565b6040516001600160a01b038416907f1cf3b03a6cf19fa2baba4df148e9dcabedea7f8a5c07840e207e5c089be95d3e90600090a260008251118061007f5750805b156100fb576100f9836001600160a01b0316635c60da1b6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156100c5573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906100e99190610520565b836102a360201b6100291760201c565b505b505050565b610113816102cf60201b6100551760201c565b6101725760405162461bcd60e51b815260206004820152602560248201527f455243313936373a206e657720626561636f6e206973206e6f74206120636f6e6044820152641d1c9858dd60da1b60648201526084015b60405180910390fd5b6101e6816001600160a01b0316635c60da1b6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156101b3573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906101d79190610520565b6102cf60201b6100551760201c565b61024b5760405162461bcd60e51b815260206004820152603060248201527f455243313936373a20626561636f6e20696d706c656d656e746174696f6e206960448201526f1cc81b9bdd08184818dbdb9d1c9858dd60821b6064820152608401610169565b806102827fa3f0ad74e5423aebfd80d3ef4346578335a9a72aeaee59ff6cb3582b35133d5060001b6102de60201b6100641760201c565b80546001600160a01b0319166001600160a01b039290921691909117905550565b60606102c883836040518060600160405280602781526020016108e7602791396102e1565b9392505050565b6001600160a01b03163b151590565b90565b6060600080856001600160a01b0316856040516102fe919061053b565b600060405180830381855af49150503d8060008114610339576040519150601f19603f3d011682016040523d82523d6000602084013e61033e565b606091505b5090925090506103508683838761035a565b9695505050505050565b606083156103c65782516103bf576001600160a01b0385163b6103bf5760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e74726163740000006044820152606401610169565b50816103d0565b6103d083836103d8565b949350505050565b8151156103e85781518083602001fd5b8060405162461bcd60e51b81526004016101699190610557565b80516001600160a01b038116811461041957600080fd5b919050565b634e487b7160e01b600052604160045260246000fd5b60005b8381101561044f578181015183820152602001610437565b838111156100f95750506000910152565b6000806040838503121561047357600080fd5b61047c83610402565b60208401519092506001600160401b038082111561049957600080fd5b818501915085601f8301126104ad57600080fd5b8151818111156104bf576104bf61041e565b604051601f8201601f19908116603f011681019083821181831017156104e7576104e761041e565b8160405282815288602084870101111561050057600080fd5b610511836020830160208801610434565b80955050505050509250929050565b60006020828403121561053257600080fd5b6102c882610402565b6000825161054d818460208701610434565b9190910192915050565b6020815260008251806020840152610576816040850160208701610434565b601f01601f19169190910160400192915050565b61034e806105996000396000f3fe60806040523661001357610011610017565b005b6100115b610027610022610067565b610100565b565b606061004e83836040518060600160405280602781526020016102f260279139610124565b9392505050565b6001600160a01b03163b151590565b90565b600061009a7fa3f0ad74e5423aebfd80d3ef4346578335a9a72aeaee59ff6cb3582b35133d50546001600160a01b031690565b6001600160a01b0316635c60da1b6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156100d7573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906100fb9190610249565b905090565b3660008037600080366000845af43d6000803e80801561011f573d6000f35b3d6000fd5b6060600080856001600160a01b03168560405161014191906102a2565b600060405180830381855af49150503d806000811461017c576040519150601f19603f3d011682016040523d82523d6000602084013e610181565b606091505b50915091506101928683838761019c565b9695505050505050565b6060831561020d578251610206576001600160a01b0385163b6102065760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e747261637400000060448201526064015b60405180910390fd5b5081610217565b610217838361021f565b949350505050565b81511561022f5781518083602001fd5b8060405162461bcd60e51b81526004016101fd91906102be565b60006020828403121561025b57600080fd5b81516001600160a01b038116811461004e57600080fd5b60005b8381101561028d578181015183820152602001610275565b8381111561029c576000848401525b50505050565b600082516102b4818460208701610272565b9190910192915050565b60208152600082518060208401526102dd816040850160208701610272565b601f01601f1916919091016040019291505056fe416464726573733a206c6f772d6c6576656c2064656c65676174652063616c6c206661696c6564a2646970667358221220d51e81d3bc5ed20a26aeb05dce7e825c503b2061aa78628027300c8d65b9d89a64736f6c634300080c0033416464726573733a206c6f772d6c6576656c2064656c65676174652063616c6c206661696c6564a26469706673582212208db50c85498def4ce903b24e050eb96c88b6cdd8bc6da816f6c00b551f34834164736f6c634300081b0033", } // EigenPodManagerABI is the input ABI used to generate the binding from. diff --git a/pkg/bindings/EigenStrategy/binding.go b/pkg/bindings/EigenStrategy/binding.go index d194ed7444..e0eaf1d1a5 100644 --- a/pkg/bindings/EigenStrategy/binding.go +++ b/pkg/bindings/EigenStrategy/binding.go @@ -32,7 +32,7 @@ var ( // EigenStrategyMetaData contains all meta data concerning the EigenStrategy contract. var EigenStrategyMetaData = &bind.MetaData{ ABI: "[{\"type\":\"constructor\",\"inputs\":[{\"name\":\"_strategyManager\",\"type\":\"address\",\"internalType\":\"contractIStrategyManager\"},{\"name\":\"_pauserRegistry\",\"type\":\"address\",\"internalType\":\"contractIPauserRegistry\"},{\"name\":\"_version\",\"type\":\"string\",\"internalType\":\"string\"}],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"EIGEN\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"contractIEigen\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"deposit\",\"inputs\":[{\"name\":\"token\",\"type\":\"address\",\"internalType\":\"contractIERC20\"},{\"name\":\"amount\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"outputs\":[{\"name\":\"newShares\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"explanation\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"string\",\"internalType\":\"string\"}],\"stateMutability\":\"pure\"},{\"type\":\"function\",\"name\":\"initialize\",\"inputs\":[{\"name\":\"_EIGEN\",\"type\":\"address\",\"internalType\":\"contractIEigen\"},{\"name\":\"_bEIGEN\",\"type\":\"address\",\"internalType\":\"contractIERC20\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"initialize\",\"inputs\":[{\"name\":\"_underlyingToken\",\"type\":\"address\",\"internalType\":\"contractIERC20\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"pause\",\"inputs\":[{\"name\":\"newPausedStatus\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"pauseAll\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"paused\",\"inputs\":[{\"name\":\"index\",\"type\":\"uint8\",\"internalType\":\"uint8\"}],\"outputs\":[{\"name\":\"\",\"type\":\"bool\",\"internalType\":\"bool\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"paused\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"pauserRegistry\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"contractIPauserRegistry\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"shares\",\"inputs\":[{\"name\":\"user\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[{\"name\":\"\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"sharesToUnderlying\",\"inputs\":[{\"name\":\"amountShares\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"outputs\":[{\"name\":\"\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"sharesToUnderlyingView\",\"inputs\":[{\"name\":\"amountShares\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"outputs\":[{\"name\":\"\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"strategyManager\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"contractIStrategyManager\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"totalShares\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"underlyingToShares\",\"inputs\":[{\"name\":\"amountUnderlying\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"outputs\":[{\"name\":\"\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"underlyingToSharesView\",\"inputs\":[{\"name\":\"amountUnderlying\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"outputs\":[{\"name\":\"\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"underlyingToken\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"contractIERC20\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"unpause\",\"inputs\":[{\"name\":\"newPausedStatus\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"userUnderlying\",\"inputs\":[{\"name\":\"user\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[{\"name\":\"\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"userUnderlyingView\",\"inputs\":[{\"name\":\"user\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[{\"name\":\"\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"version\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"string\",\"internalType\":\"string\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"withdraw\",\"inputs\":[{\"name\":\"recipient\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"token\",\"type\":\"address\",\"internalType\":\"contractIERC20\"},{\"name\":\"amountShares\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"outputs\":[{\"name\":\"amountOut\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"stateMutability\":\"nonpayable\"},{\"type\":\"event\",\"name\":\"ExchangeRateEmitted\",\"inputs\":[{\"name\":\"rate\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"Initialized\",\"inputs\":[{\"name\":\"version\",\"type\":\"uint8\",\"indexed\":false,\"internalType\":\"uint8\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"Paused\",\"inputs\":[{\"name\":\"account\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"newPausedStatus\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"StrategyTokenSet\",\"inputs\":[{\"name\":\"token\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"contractIERC20\"},{\"name\":\"decimals\",\"type\":\"uint8\",\"indexed\":false,\"internalType\":\"uint8\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"Unpaused\",\"inputs\":[{\"name\":\"account\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"newPausedStatus\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"}],\"anonymous\":false},{\"type\":\"error\",\"name\":\"BalanceExceedsMaxTotalDeposits\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"CurrentlyPaused\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"InputAddressZero\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"InvalidNewPausedStatus\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"InvalidShortString\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"MaxPerDepositExceedsMax\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"NewSharesZero\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"OnlyPauser\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"OnlyStrategyManager\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"OnlyUnderlyingToken\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"OnlyUnpauser\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"StringTooLong\",\"inputs\":[{\"name\":\"str\",\"type\":\"string\",\"internalType\":\"string\"}]},{\"type\":\"error\",\"name\":\"TotalSharesExceedsMax\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"WithdrawalAmountExceedsTotalDeposits\",\"inputs\":[]}]", - Bin: "0x60e060405234801561000f575f5ffd5b5060405161181238038061181283398101604081905261002e916101bc565b82828280826001600160a01b03811661005a576040516339b190bb60e11b815260040160405180910390fd5b6001600160a01b031660805261006f81610093565b60a052506001600160a01b03831660c0526100886100d9565b5050505050506102ed565b5f5f829050601f815111156100c6578260405163305a27a960e01b81526004016100bd9190610292565b60405180910390fd5b80516100d1826102c7565b179392505050565b5f54610100900460ff16156101405760405162461bcd60e51b815260206004820152602760248201527f496e697469616c697a61626c653a20636f6e747261637420697320696e697469604482015266616c697a696e6760c81b60648201526084016100bd565b5f5460ff9081161461018f575f805460ff191660ff9081179091556040519081527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b565b6001600160a01b03811681146101a5575f5ffd5b50565b634e487b7160e01b5f52604160045260245ffd5b5f5f5f606084860312156101ce575f5ffd5b83516101d981610191565b60208501519093506101ea81610191565b60408501519092506001600160401b03811115610205575f5ffd5b8401601f81018613610215575f5ffd5b80516001600160401b0381111561022e5761022e6101a8565b604051601f8201601f19908116603f011681016001600160401b038111828210171561025c5761025c6101a8565b604052818152828201602001881015610273575f5ffd5b8160208401602083015e5f602083830101528093505050509250925092565b602081525f82518060208401528060208501604085015e5f604082850101526040601f19601f83011684010191505092915050565b805160208083015191908110156102e7575f198160200360031b1b821691505b50919050565b60805160a05160c0516114d861033a5f395f8181610196015281816103990152818161076101526107e301525f6105a401525f8181610274015281816109910152610eca01526114d85ff3fe608060405234801561000f575f5ffd5b5060043610610148575f3560e01c80637a8b2637116100bf578063ce7c2ac211610079578063ce7c2ac2146102d7578063d9caed12146102ea578063e3dae51c146102fd578063f3e7387514610310578063fabc1cbc14610323578063fdc371ce14610336575f5ffd5b80637a8b26371461025c578063886f11951461026f5780638c871019146102965780638f6a6240146102a9578063ab5921e1146102bc578063c4d66de8146102c4575f5ffd5b8063485cc95511610110578063485cc955146101e257806354fd4d50146101f5578063553ca5f81461020a578063595c6a671461021d5780635ac86ab7146102255780635c975abb14610254575f5ffd5b8063136439dd1461014c5780632495a5991461016157806339b70e38146101915780633a98ef39146101b857806347e7ef24146101cf575b5f5ffd5b61015f61015a3660046111cb565b610349565b005b603254610174906001600160a01b031681565b6040516001600160a01b0390911681526020015b60405180910390f35b6101747f000000000000000000000000000000000000000000000000000000000000000081565b6101c160335481565b604051908152602001610188565b6101c16101dd3660046111f6565b610383565b61015f6101f0366004611220565b6104b2565b6101fd61059d565b6040516101889190611257565b6101c161021836600461128c565b6105cd565b61015f6105e0565b6102446102333660046112bc565b6001805460ff9092161b9081161490565b6040519015158152602001610188565b6001546101c1565b6101c161026a3660046111cb565b6105f4565b6101747f000000000000000000000000000000000000000000000000000000000000000081565b6101c16102a43660046111cb565b61063d565b6101c16102b736600461128c565b610647565b6101fd610654565b61015f6102d236600461128c565b610674565b6101c16102e536600461128c565b61073a565b6101c16102f83660046112d7565b6107cc565b6101c161030b3660046111cb565b6108ce565b6101c161031e3660046111cb565b610905565b61015f6103313660046111cb565b61090f565b606454610174906001600160a01b031681565b61035161097c565b60015481811681146103765760405163c61dca5d60e01b815260040160405180910390fd5b61037f82610a1f565b5050565b5f5f61038e81610a5c565b336001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016146103d7576040516348da714f60e01b815260040160405180910390fd5b6103e18484610a92565b6033545f6103f16103e883611329565b90505f6103e86103ff610b4b565b6104099190611329565b90505f610416878361133c565b905080610423848961134f565b61042d9190611366565b9550855f0361044f57604051630c392ed360e11b815260040160405180910390fd5b6104598685611329565b60338190556f4b3b4ca85a86c47a098a223fffffffff101561048e57604051632f14e8a360e11b815260040160405180910390fd5b6104a7826103e86033546104a29190611329565b610bb5565b505050505092915050565b5f54610100900460ff16158080156104d057505f54600160ff909116105b806104e95750303b1580156104e957505f5460ff166001145b61050e5760405162461bcd60e51b815260040161050590611385565b60405180910390fd5b5f805460ff19166001179055801561052f575f805461ff0019166101001790555b606480546001600160a01b0319166001600160a01b03851617905561055382610c01565b8015610598575f805461ff0019169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b505050565b60606105c87f0000000000000000000000000000000000000000000000000000000000000000610d4c565b905090565b5f6105da61026a8361073a565b92915050565b6105e861097c565b6105f25f19610a1f565b565b5f5f6103e86033546106069190611329565b90505f6103e8610614610b4b565b61061e9190611329565b90508161062b858361134f565b6106359190611366565b949350505050565b5f6105da826108ce565b5f6105da61031e8361073a565b60606040518060800160405280604d8152602001611456604d9139905090565b5f54610100900460ff161580801561069257505f54600160ff909116105b806106ab5750303b1580156106ab57505f5460ff166001145b6106c75760405162461bcd60e51b815260040161050590611385565b5f805460ff1916600117905580156106e8575f805461ff0019166101001790555b6106f182610c01565b801561037f575f805461ff0019169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb3847402498906020015b60405180910390a15050565b60405163fe243a1760e01b81526001600160a01b0382811660048301523060248301525f917f00000000000000000000000000000000000000000000000000000000000000009091169063fe243a1790604401602060405180830381865afa1580156107a8573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906105da91906113d3565b5f60016107d881610a5c565b336001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001614610821576040516348da714f60e01b815260040160405180910390fd5b61082c858585610d89565b6033548084111561085057604051630b469df360e41b815260040160405180910390fd5b5f61085d6103e883611329565b90505f6103e861086b610b4b565b6108759190611329565b905081610882878361134f565b61088c9190611366565b9450610898868461133c565b6033556108b86108a8868361133c565b6103e86033546104a29190611329565b6108c3888887610dcf565b505050509392505050565b5f5f6103e86033546108e09190611329565b90505f6103e86108ee610b4b565b6108f89190611329565b90508061062b838661134f565b5f6105da826105f4565b610917610ec8565b6001548019821981161461093e5760405163c61dca5d60e01b815260040160405180910390fd5b600182905560405182815233907f3582d1828e26bf56bd801502bc021ac0bc8afb57c826e4986b45593c8fad389c9060200160405180910390a25050565b60405163237dfb4760e11b81523360048201527f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316906346fbf68e90602401602060405180830381865afa1580156109de573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610a0291906113ea565b6105f257604051631d77d47760e21b815260040160405180910390fd5b600181905560405181815233907fab40a374bc51de372200a8bc981af8c9ecdc08dfdaef0bb6e09f88f3c616ef3d9060200160405180910390a250565b610a71816001805460ff9092161b9081161490565b15610a8f5760405163840a48d560e01b815260040160405180910390fd5b50565b6032546001600160a01b0383811691161480610abb57506064546001600160a01b038381169116145b610ad857604051630312abdd60e61b815260040160405180910390fd5b6064546001600160a01b039081169083160361037f57606454604051636f074d1f60e11b8152600481018390526001600160a01b039091169063de0e9a3e906024015f604051808303815f87803b158015610b31575f5ffd5b505af1158015610b43573d5f5f3e3d5ffd5b505050505050565b6032546040516370a0823160e01b81523060048201525f916001600160a01b0316906370a0823190602401602060405180830381865afa158015610b91573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906105c891906113d3565b7fd2494f3479e5da49d386657c292c610b5b01df313d07c62eb0cfa49924a31be881610be984670de0b6b3a764000061134f565b610bf39190611366565b60405190815260200161072e565b5f54610100900460ff16610c6b5760405162461bcd60e51b815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201526a6e697469616c697a696e6760a81b6064820152608401610505565b603280546001600160a01b0319166001600160a01b038316179055610c8f5f610a1f565b7f1c540707b00eb5427b6b774fc799d756516a54aee108b64b327acc55af55750760325f9054906101000a90046001600160a01b0316826001600160a01b031663313ce5676040518163ffffffff1660e01b8152600401602060405180830381865afa158015610d01573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610d259190611409565b604080516001600160a01b03909316835260ff90911660208301520160405180910390a150565b60605f610d5883610f79565b6040805160208082528183019092529192505f91906020820181803683375050509182525060208101929092525090565b6032546001600160a01b0383811691161480610db257506064546001600160a01b038381169116145b61059857604051630312abdd60e61b815260040160405180910390fd5b6064546001600160a01b0390811690831603610eb45760325460405163095ea7b360e01b81526001600160a01b038481166004830152602482018490529091169063095ea7b3906044016020604051808303815f875af1158015610e35573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610e5991906113ea565b50606454604051630ea598cb60e41b8152600481018390526001600160a01b039091169063ea598cb0906024015f604051808303815f87803b158015610e9d575f5ffd5b505af1158015610eaf573d5f5f3e3d5ffd5b505050505b6105986001600160a01b0383168483610fa0565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663eab66d7a6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610f24573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610f489190611424565b6001600160a01b0316336001600160a01b0316146105f25760405163794821ff60e01b815260040160405180910390fd5b5f60ff8216601f8111156105da57604051632cd44ac360e21b815260040160405180910390fd5b604080516001600160a01b03848116602483015260448083018590528351808403909101815260649092018352602080830180516001600160e01b031663a9059cbb60e01b17905283518085019094528084527f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c656490840152610598928692915f9161102f9185169084906110ae565b905080515f148061104f57508080602001905181019061104f91906113ea565b6105985760405162461bcd60e51b815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e6044820152691bdd081cdd58d8d9595960b21b6064820152608401610505565b606061063584845f85855f5f866001600160a01b031685876040516110d3919061143f565b5f6040518083038185875af1925050503d805f811461110d576040519150601f19603f3d011682016040523d82523d5f602084013e611112565b606091505b50915091506111238783838761112e565b979650505050505050565b6060831561119c5782515f03611195576001600160a01b0385163b6111955760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e74726163740000006044820152606401610505565b5081610635565b61063583838151156111b15781518083602001fd5b8060405162461bcd60e51b81526004016105059190611257565b5f602082840312156111db575f5ffd5b5035919050565b6001600160a01b0381168114610a8f575f5ffd5b5f5f60408385031215611207575f5ffd5b8235611212816111e2565b946020939093013593505050565b5f5f60408385031215611231575f5ffd5b823561123c816111e2565b9150602083013561124c816111e2565b809150509250929050565b602081525f82518060208401528060208501604085015e5f604082850101526040601f19601f83011684010191505092915050565b5f6020828403121561129c575f5ffd5b81356112a7816111e2565b9392505050565b60ff81168114610a8f575f5ffd5b5f602082840312156112cc575f5ffd5b81356112a7816112ae565b5f5f5f606084860312156112e9575f5ffd5b83356112f4816111e2565b92506020840135611304816111e2565b929592945050506040919091013590565b634e487b7160e01b5f52601160045260245ffd5b808201808211156105da576105da611315565b818103818111156105da576105da611315565b80820281158282048414176105da576105da611315565b5f8261138057634e487b7160e01b5f52601260045260245ffd5b500490565b6020808252602e908201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160408201526d191e481a5b9a5d1a585b1a5e995960921b606082015260800190565b5f602082840312156113e3575f5ffd5b5051919050565b5f602082840312156113fa575f5ffd5b815180151581146112a7575f5ffd5b5f60208284031215611419575f5ffd5b81516112a7816112ae565b5f60208284031215611434575f5ffd5b81516112a7816111e2565b5f82518060208501845e5f92019182525091905056fe4261736520537472617465677920696d706c656d656e746174696f6e20746f20696e68657269742066726f6d20666f72206d6f726520636f6d706c657820696d706c656d656e746174696f6e73a2646970667358221220e89817c9a08b344d93ea28b8b0b2d2c0b750daf0fab8e23a540b4689dc0969bb64736f6c634300081b0033", + Bin: "0x60e060405234801561000f575f5ffd5b5060405161181238038061181283398101604081905261002e916101bc565b82828280826001600160a01b03811661005a576040516339b190bb60e11b815260040160405180910390fd5b6001600160a01b031660805261006f81610093565b60a052506001600160a01b03831660c0526100886100d9565b5050505050506102ed565b5f5f829050601f815111156100c6578260405163305a27a960e01b81526004016100bd9190610292565b60405180910390fd5b80516100d1826102c7565b179392505050565b5f54610100900460ff16156101405760405162461bcd60e51b815260206004820152602760248201527f496e697469616c697a61626c653a20636f6e747261637420697320696e697469604482015266616c697a696e6760c81b60648201526084016100bd565b5f5460ff9081161461018f575f805460ff191660ff9081179091556040519081527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b565b6001600160a01b03811681146101a5575f5ffd5b50565b634e487b7160e01b5f52604160045260245ffd5b5f5f5f606084860312156101ce575f5ffd5b83516101d981610191565b60208501519093506101ea81610191565b60408501519092506001600160401b03811115610205575f5ffd5b8401601f81018613610215575f5ffd5b80516001600160401b0381111561022e5761022e6101a8565b604051601f8201601f19908116603f011681016001600160401b038111828210171561025c5761025c6101a8565b604052818152828201602001881015610273575f5ffd5b8160208401602083015e5f602083830101528093505050509250925092565b602081525f82518060208401528060208501604085015e5f604082850101526040601f19601f83011684010191505092915050565b805160208083015191908110156102e7575f198160200360031b1b821691505b50919050565b60805160a05160c0516114d861033a5f395f8181610196015281816103990152818161076101526107e301525f6105a401525f8181610274015281816109910152610eca01526114d85ff3fe608060405234801561000f575f5ffd5b5060043610610148575f3560e01c80637a8b2637116100bf578063ce7c2ac211610079578063ce7c2ac2146102d7578063d9caed12146102ea578063e3dae51c146102fd578063f3e7387514610310578063fabc1cbc14610323578063fdc371ce14610336575f5ffd5b80637a8b26371461025c578063886f11951461026f5780638c871019146102965780638f6a6240146102a9578063ab5921e1146102bc578063c4d66de8146102c4575f5ffd5b8063485cc95511610110578063485cc955146101e257806354fd4d50146101f5578063553ca5f81461020a578063595c6a671461021d5780635ac86ab7146102255780635c975abb14610254575f5ffd5b8063136439dd1461014c5780632495a5991461016157806339b70e38146101915780633a98ef39146101b857806347e7ef24146101cf575b5f5ffd5b61015f61015a3660046111cb565b610349565b005b603254610174906001600160a01b031681565b6040516001600160a01b0390911681526020015b60405180910390f35b6101747f000000000000000000000000000000000000000000000000000000000000000081565b6101c160335481565b604051908152602001610188565b6101c16101dd3660046111f6565b610383565b61015f6101f0366004611220565b6104b2565b6101fd61059d565b6040516101889190611257565b6101c161021836600461128c565b6105cd565b61015f6105e0565b6102446102333660046112bc565b6001805460ff9092161b9081161490565b6040519015158152602001610188565b6001546101c1565b6101c161026a3660046111cb565b6105f4565b6101747f000000000000000000000000000000000000000000000000000000000000000081565b6101c16102a43660046111cb565b61063d565b6101c16102b736600461128c565b610647565b6101fd610654565b61015f6102d236600461128c565b610674565b6101c16102e536600461128c565b61073a565b6101c16102f83660046112d7565b6107cc565b6101c161030b3660046111cb565b6108ce565b6101c161031e3660046111cb565b610905565b61015f6103313660046111cb565b61090f565b606454610174906001600160a01b031681565b61035161097c565b60015481811681146103765760405163c61dca5d60e01b815260040160405180910390fd5b61037f82610a1f565b5050565b5f5f61038e81610a5c565b336001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016146103d7576040516348da714f60e01b815260040160405180910390fd5b6103e18484610a92565b6033545f6103f16103e883611329565b90505f6103e86103ff610b4b565b6104099190611329565b90505f610416878361133c565b905080610423848961134f565b61042d9190611366565b9550855f0361044f57604051630c392ed360e11b815260040160405180910390fd5b6104598685611329565b60338190556f4b3b4ca85a86c47a098a223fffffffff101561048e57604051632f14e8a360e11b815260040160405180910390fd5b6104a7826103e86033546104a29190611329565b610bb5565b505050505092915050565b5f54610100900460ff16158080156104d057505f54600160ff909116105b806104e95750303b1580156104e957505f5460ff166001145b61050e5760405162461bcd60e51b815260040161050590611385565b60405180910390fd5b5f805460ff19166001179055801561052f575f805461ff0019166101001790555b606480546001600160a01b0319166001600160a01b03851617905561055382610c01565b8015610598575f805461ff0019169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b505050565b60606105c87f0000000000000000000000000000000000000000000000000000000000000000610d4c565b905090565b5f6105da61026a8361073a565b92915050565b6105e861097c565b6105f25f19610a1f565b565b5f5f6103e86033546106069190611329565b90505f6103e8610614610b4b565b61061e9190611329565b90508161062b858361134f565b6106359190611366565b949350505050565b5f6105da826108ce565b5f6105da61031e8361073a565b60606040518060800160405280604d8152602001611456604d9139905090565b5f54610100900460ff161580801561069257505f54600160ff909116105b806106ab5750303b1580156106ab57505f5460ff166001145b6106c75760405162461bcd60e51b815260040161050590611385565b5f805460ff1916600117905580156106e8575f805461ff0019166101001790555b6106f182610c01565b801561037f575f805461ff0019169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb3847402498906020015b60405180910390a15050565b60405163fe243a1760e01b81526001600160a01b0382811660048301523060248301525f917f00000000000000000000000000000000000000000000000000000000000000009091169063fe243a1790604401602060405180830381865afa1580156107a8573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906105da91906113d3565b5f60016107d881610a5c565b336001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001614610821576040516348da714f60e01b815260040160405180910390fd5b61082c858585610d89565b6033548084111561085057604051630b469df360e41b815260040160405180910390fd5b5f61085d6103e883611329565b90505f6103e861086b610b4b565b6108759190611329565b905081610882878361134f565b61088c9190611366565b9450610898868461133c565b6033556108b86108a8868361133c565b6103e86033546104a29190611329565b6108c3888887610dcf565b505050509392505050565b5f5f6103e86033546108e09190611329565b90505f6103e86108ee610b4b565b6108f89190611329565b90508061062b838661134f565b5f6105da826105f4565b610917610ec8565b6001548019821981161461093e5760405163c61dca5d60e01b815260040160405180910390fd5b600182905560405182815233907f3582d1828e26bf56bd801502bc021ac0bc8afb57c826e4986b45593c8fad389c9060200160405180910390a25050565b60405163237dfb4760e11b81523360048201527f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316906346fbf68e90602401602060405180830381865afa1580156109de573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610a0291906113ea565b6105f257604051631d77d47760e21b815260040160405180910390fd5b600181905560405181815233907fab40a374bc51de372200a8bc981af8c9ecdc08dfdaef0bb6e09f88f3c616ef3d9060200160405180910390a250565b610a71816001805460ff9092161b9081161490565b15610a8f5760405163840a48d560e01b815260040160405180910390fd5b50565b6032546001600160a01b0383811691161480610abb57506064546001600160a01b038381169116145b610ad857604051630312abdd60e61b815260040160405180910390fd5b6064546001600160a01b039081169083160361037f57606454604051636f074d1f60e11b8152600481018390526001600160a01b039091169063de0e9a3e906024015f604051808303815f87803b158015610b31575f5ffd5b505af1158015610b43573d5f5f3e3d5ffd5b505050505050565b6032546040516370a0823160e01b81523060048201525f916001600160a01b0316906370a0823190602401602060405180830381865afa158015610b91573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906105c891906113d3565b7fd2494f3479e5da49d386657c292c610b5b01df313d07c62eb0cfa49924a31be881610be984670de0b6b3a764000061134f565b610bf39190611366565b60405190815260200161072e565b5f54610100900460ff16610c6b5760405162461bcd60e51b815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201526a6e697469616c697a696e6760a81b6064820152608401610505565b603280546001600160a01b0319166001600160a01b038316179055610c8f5f610a1f565b7f1c540707b00eb5427b6b774fc799d756516a54aee108b64b327acc55af55750760325f9054906101000a90046001600160a01b0316826001600160a01b031663313ce5676040518163ffffffff1660e01b8152600401602060405180830381865afa158015610d01573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610d259190611409565b604080516001600160a01b03909316835260ff90911660208301520160405180910390a150565b60605f610d5883610f79565b6040805160208082528183019092529192505f91906020820181803683375050509182525060208101929092525090565b6032546001600160a01b0383811691161480610db257506064546001600160a01b038381169116145b61059857604051630312abdd60e61b815260040160405180910390fd5b6064546001600160a01b0390811690831603610eb45760325460405163095ea7b360e01b81526001600160a01b038481166004830152602482018490529091169063095ea7b3906044016020604051808303815f875af1158015610e35573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610e5991906113ea565b50606454604051630ea598cb60e41b8152600481018390526001600160a01b039091169063ea598cb0906024015f604051808303815f87803b158015610e9d575f5ffd5b505af1158015610eaf573d5f5f3e3d5ffd5b505050505b6105986001600160a01b0383168483610fa0565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663eab66d7a6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610f24573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610f489190611424565b6001600160a01b0316336001600160a01b0316146105f25760405163794821ff60e01b815260040160405180910390fd5b5f60ff8216601f8111156105da57604051632cd44ac360e21b815260040160405180910390fd5b604080516001600160a01b03848116602483015260448083018590528351808403909101815260649092018352602080830180516001600160e01b031663a9059cbb60e01b17905283518085019094528084527f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c656490840152610598928692915f9161102f9185169084906110ae565b905080515f148061104f57508080602001905181019061104f91906113ea565b6105985760405162461bcd60e51b815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e6044820152691bdd081cdd58d8d9595960b21b6064820152608401610505565b606061063584845f85855f5f866001600160a01b031685876040516110d3919061143f565b5f6040518083038185875af1925050503d805f811461110d576040519150601f19603f3d011682016040523d82523d5f602084013e611112565b606091505b50915091506111238783838761112e565b979650505050505050565b6060831561119c5782515f03611195576001600160a01b0385163b6111955760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e74726163740000006044820152606401610505565b5081610635565b61063583838151156111b15781518083602001fd5b8060405162461bcd60e51b81526004016105059190611257565b5f602082840312156111db575f5ffd5b5035919050565b6001600160a01b0381168114610a8f575f5ffd5b5f5f60408385031215611207575f5ffd5b8235611212816111e2565b946020939093013593505050565b5f5f60408385031215611231575f5ffd5b823561123c816111e2565b9150602083013561124c816111e2565b809150509250929050565b602081525f82518060208401528060208501604085015e5f604082850101526040601f19601f83011684010191505092915050565b5f6020828403121561129c575f5ffd5b81356112a7816111e2565b9392505050565b60ff81168114610a8f575f5ffd5b5f602082840312156112cc575f5ffd5b81356112a7816112ae565b5f5f5f606084860312156112e9575f5ffd5b83356112f4816111e2565b92506020840135611304816111e2565b929592945050506040919091013590565b634e487b7160e01b5f52601160045260245ffd5b808201808211156105da576105da611315565b818103818111156105da576105da611315565b80820281158282048414176105da576105da611315565b5f8261138057634e487b7160e01b5f52601260045260245ffd5b500490565b6020808252602e908201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160408201526d191e481a5b9a5d1a585b1a5e995960921b606082015260800190565b5f602082840312156113e3575f5ffd5b5051919050565b5f602082840312156113fa575f5ffd5b815180151581146112a7575f5ffd5b5f60208284031215611419575f5ffd5b81516112a7816112ae565b5f60208284031215611434575f5ffd5b81516112a7816111e2565b5f82518060208501845e5f92019182525091905056fe4261736520537472617465677920696d706c656d656e746174696f6e20746f20696e68657269742066726f6d20666f72206d6f726520636f6d706c657820696d706c656d656e746174696f6e73a2646970667358221220b13cee67bb58f1ea1da8fd826c588345ffe46483f6aa0cf1f393d7395cc02d7764736f6c634300081b0033", } // EigenStrategyABI is the input ABI used to generate the binding from. diff --git a/pkg/bindings/IBN254CertificateVerifier/binding.go b/pkg/bindings/IBN254CertificateVerifier/binding.go new file mode 100644 index 0000000000..df40eaf2b4 --- /dev/null +++ b/pkg/bindings/IBN254CertificateVerifier/binding.go @@ -0,0 +1,788 @@ +// Code generated - DO NOT EDIT. +// This file is a generated binding and any manual changes will be lost. + +package IBN254CertificateVerifier + +import ( + "errors" + "math/big" + "strings" + + ethereum "github.com/ethereum/go-ethereum" + "github.com/ethereum/go-ethereum/accounts/abi" + "github.com/ethereum/go-ethereum/accounts/abi/bind" + "github.com/ethereum/go-ethereum/common" + "github.com/ethereum/go-ethereum/core/types" + "github.com/ethereum/go-ethereum/event" +) + +// Reference imports to suppress errors if they are not otherwise used. +var ( + _ = errors.New + _ = big.NewInt + _ = strings.NewReader + _ = ethereum.NotFound + _ = bind.Bind + _ = common.Big1 + _ = types.BloomLookup + _ = event.NewSubscription + _ = abi.ConvertType +) + +// BN254G1Point is an auto generated low-level Go binding around an user-defined struct. +type BN254G1Point struct { + X *big.Int + Y *big.Int +} + +// BN254G2Point is an auto generated low-level Go binding around an user-defined struct. +type BN254G2Point struct { + X [2]*big.Int + Y [2]*big.Int +} + +// IBN254CertificateVerifierTypesBN254Certificate is an auto generated low-level Go binding around an user-defined struct. +type IBN254CertificateVerifierTypesBN254Certificate struct { + ReferenceTimestamp uint32 + MessageHash [32]byte + Signature BN254G1Point + Apk BN254G2Point + NonSignerWitnesses []IBN254CertificateVerifierTypesBN254OperatorInfoWitness +} + +// IBN254CertificateVerifierTypesBN254OperatorInfoWitness is an auto generated low-level Go binding around an user-defined struct. +type IBN254CertificateVerifierTypesBN254OperatorInfoWitness struct { + OperatorIndex uint32 + OperatorInfoProof []byte + OperatorInfo IBN254TableCalculatorTypesBN254OperatorInfo +} + +// IBN254TableCalculatorTypesBN254OperatorInfo is an auto generated low-level Go binding around an user-defined struct. +type IBN254TableCalculatorTypesBN254OperatorInfo struct { + Pubkey BN254G1Point + Weights []*big.Int +} + +// IBN254TableCalculatorTypesBN254OperatorSetInfo is an auto generated low-level Go binding around an user-defined struct. +type IBN254TableCalculatorTypesBN254OperatorSetInfo struct { + OperatorInfoTreeRoot [32]byte + NumOperators *big.Int + AggregatePubkey BN254G1Point + TotalWeights []*big.Int +} + +// ICrossChainRegistryTypesOperatorSetConfig is an auto generated low-level Go binding around an user-defined struct. +type ICrossChainRegistryTypesOperatorSetConfig struct { + Owner common.Address + MaxStalenessPeriod uint32 +} + +// OperatorSet is an auto generated low-level Go binding around an user-defined struct. +type OperatorSet struct { + Avs common.Address + Id uint32 +} + +// IBN254CertificateVerifierMetaData contains all meta data concerning the IBN254CertificateVerifier contract. +var IBN254CertificateVerifierMetaData = &bind.MetaData{ + ABI: "[{\"type\":\"function\",\"name\":\"getOperatorSetOwner\",\"inputs\":[{\"name\":\"operatorSet\",\"type\":\"tuple\",\"internalType\":\"structOperatorSet\",\"components\":[{\"name\":\"avs\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"id\",\"type\":\"uint32\",\"internalType\":\"uint32\"}]}],\"outputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"address\"}],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"latestReferenceTimestamp\",\"inputs\":[{\"name\":\"operatorSet\",\"type\":\"tuple\",\"internalType\":\"structOperatorSet\",\"components\":[{\"name\":\"avs\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"id\",\"type\":\"uint32\",\"internalType\":\"uint32\"}]}],\"outputs\":[{\"name\":\"\",\"type\":\"uint32\",\"internalType\":\"uint32\"}],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"maxOperatorTableStaleness\",\"inputs\":[{\"name\":\"operatorSet\",\"type\":\"tuple\",\"internalType\":\"structOperatorSet\",\"components\":[{\"name\":\"avs\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"id\",\"type\":\"uint32\",\"internalType\":\"uint32\"}]}],\"outputs\":[{\"name\":\"\",\"type\":\"uint32\",\"internalType\":\"uint32\"}],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"updateOperatorTable\",\"inputs\":[{\"name\":\"operatorSet\",\"type\":\"tuple\",\"internalType\":\"structOperatorSet\",\"components\":[{\"name\":\"avs\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"id\",\"type\":\"uint32\",\"internalType\":\"uint32\"}]},{\"name\":\"referenceTimestamp\",\"type\":\"uint32\",\"internalType\":\"uint32\"},{\"name\":\"operatorSetInfo\",\"type\":\"tuple\",\"internalType\":\"structIBN254TableCalculatorTypes.BN254OperatorSetInfo\",\"components\":[{\"name\":\"operatorInfoTreeRoot\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"},{\"name\":\"numOperators\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"aggregatePubkey\",\"type\":\"tuple\",\"internalType\":\"structBN254.G1Point\",\"components\":[{\"name\":\"X\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"Y\",\"type\":\"uint256\",\"internalType\":\"uint256\"}]},{\"name\":\"totalWeights\",\"type\":\"uint256[]\",\"internalType\":\"uint256[]\"}]},{\"name\":\"operatorSetConfig\",\"type\":\"tuple\",\"internalType\":\"structICrossChainRegistryTypes.OperatorSetConfig\",\"components\":[{\"name\":\"owner\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"maxStalenessPeriod\",\"type\":\"uint32\",\"internalType\":\"uint32\"}]}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"verifyCertificate\",\"inputs\":[{\"name\":\"operatorSet\",\"type\":\"tuple\",\"internalType\":\"structOperatorSet\",\"components\":[{\"name\":\"avs\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"id\",\"type\":\"uint32\",\"internalType\":\"uint32\"}]},{\"name\":\"cert\",\"type\":\"tuple\",\"internalType\":\"structIBN254CertificateVerifierTypes.BN254Certificate\",\"components\":[{\"name\":\"referenceTimestamp\",\"type\":\"uint32\",\"internalType\":\"uint32\"},{\"name\":\"messageHash\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"},{\"name\":\"signature\",\"type\":\"tuple\",\"internalType\":\"structBN254.G1Point\",\"components\":[{\"name\":\"X\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"Y\",\"type\":\"uint256\",\"internalType\":\"uint256\"}]},{\"name\":\"apk\",\"type\":\"tuple\",\"internalType\":\"structBN254.G2Point\",\"components\":[{\"name\":\"X\",\"type\":\"uint256[2]\",\"internalType\":\"uint256[2]\"},{\"name\":\"Y\",\"type\":\"uint256[2]\",\"internalType\":\"uint256[2]\"}]},{\"name\":\"nonSignerWitnesses\",\"type\":\"tuple[]\",\"internalType\":\"structIBN254CertificateVerifierTypes.BN254OperatorInfoWitness[]\",\"components\":[{\"name\":\"operatorIndex\",\"type\":\"uint32\",\"internalType\":\"uint32\"},{\"name\":\"operatorInfoProof\",\"type\":\"bytes\",\"internalType\":\"bytes\"},{\"name\":\"operatorInfo\",\"type\":\"tuple\",\"internalType\":\"structIBN254TableCalculatorTypes.BN254OperatorInfo\",\"components\":[{\"name\":\"pubkey\",\"type\":\"tuple\",\"internalType\":\"structBN254.G1Point\",\"components\":[{\"name\":\"X\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"Y\",\"type\":\"uint256\",\"internalType\":\"uint256\"}]},{\"name\":\"weights\",\"type\":\"uint256[]\",\"internalType\":\"uint256[]\"}]}]}]}],\"outputs\":[{\"name\":\"signedStakes\",\"type\":\"uint256[]\",\"internalType\":\"uint256[]\"}],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"verifyCertificateNominal\",\"inputs\":[{\"name\":\"operatorSet\",\"type\":\"tuple\",\"internalType\":\"structOperatorSet\",\"components\":[{\"name\":\"avs\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"id\",\"type\":\"uint32\",\"internalType\":\"uint32\"}]},{\"name\":\"cert\",\"type\":\"tuple\",\"internalType\":\"structIBN254CertificateVerifierTypes.BN254Certificate\",\"components\":[{\"name\":\"referenceTimestamp\",\"type\":\"uint32\",\"internalType\":\"uint32\"},{\"name\":\"messageHash\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"},{\"name\":\"signature\",\"type\":\"tuple\",\"internalType\":\"structBN254.G1Point\",\"components\":[{\"name\":\"X\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"Y\",\"type\":\"uint256\",\"internalType\":\"uint256\"}]},{\"name\":\"apk\",\"type\":\"tuple\",\"internalType\":\"structBN254.G2Point\",\"components\":[{\"name\":\"X\",\"type\":\"uint256[2]\",\"internalType\":\"uint256[2]\"},{\"name\":\"Y\",\"type\":\"uint256[2]\",\"internalType\":\"uint256[2]\"}]},{\"name\":\"nonSignerWitnesses\",\"type\":\"tuple[]\",\"internalType\":\"structIBN254CertificateVerifierTypes.BN254OperatorInfoWitness[]\",\"components\":[{\"name\":\"operatorIndex\",\"type\":\"uint32\",\"internalType\":\"uint32\"},{\"name\":\"operatorInfoProof\",\"type\":\"bytes\",\"internalType\":\"bytes\"},{\"name\":\"operatorInfo\",\"type\":\"tuple\",\"internalType\":\"structIBN254TableCalculatorTypes.BN254OperatorInfo\",\"components\":[{\"name\":\"pubkey\",\"type\":\"tuple\",\"internalType\":\"structBN254.G1Point\",\"components\":[{\"name\":\"X\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"Y\",\"type\":\"uint256\",\"internalType\":\"uint256\"}]},{\"name\":\"weights\",\"type\":\"uint256[]\",\"internalType\":\"uint256[]\"}]}]}]},{\"name\":\"totalStakeNominalThresholds\",\"type\":\"uint256[]\",\"internalType\":\"uint256[]\"}],\"outputs\":[{\"name\":\"\",\"type\":\"bool\",\"internalType\":\"bool\"}],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"verifyCertificateProportion\",\"inputs\":[{\"name\":\"operatorSet\",\"type\":\"tuple\",\"internalType\":\"structOperatorSet\",\"components\":[{\"name\":\"avs\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"id\",\"type\":\"uint32\",\"internalType\":\"uint32\"}]},{\"name\":\"cert\",\"type\":\"tuple\",\"internalType\":\"structIBN254CertificateVerifierTypes.BN254Certificate\",\"components\":[{\"name\":\"referenceTimestamp\",\"type\":\"uint32\",\"internalType\":\"uint32\"},{\"name\":\"messageHash\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"},{\"name\":\"signature\",\"type\":\"tuple\",\"internalType\":\"structBN254.G1Point\",\"components\":[{\"name\":\"X\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"Y\",\"type\":\"uint256\",\"internalType\":\"uint256\"}]},{\"name\":\"apk\",\"type\":\"tuple\",\"internalType\":\"structBN254.G2Point\",\"components\":[{\"name\":\"X\",\"type\":\"uint256[2]\",\"internalType\":\"uint256[2]\"},{\"name\":\"Y\",\"type\":\"uint256[2]\",\"internalType\":\"uint256[2]\"}]},{\"name\":\"nonSignerWitnesses\",\"type\":\"tuple[]\",\"internalType\":\"structIBN254CertificateVerifierTypes.BN254OperatorInfoWitness[]\",\"components\":[{\"name\":\"operatorIndex\",\"type\":\"uint32\",\"internalType\":\"uint32\"},{\"name\":\"operatorInfoProof\",\"type\":\"bytes\",\"internalType\":\"bytes\"},{\"name\":\"operatorInfo\",\"type\":\"tuple\",\"internalType\":\"structIBN254TableCalculatorTypes.BN254OperatorInfo\",\"components\":[{\"name\":\"pubkey\",\"type\":\"tuple\",\"internalType\":\"structBN254.G1Point\",\"components\":[{\"name\":\"X\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"Y\",\"type\":\"uint256\",\"internalType\":\"uint256\"}]},{\"name\":\"weights\",\"type\":\"uint256[]\",\"internalType\":\"uint256[]\"}]}]}]},{\"name\":\"totalStakeProportionThresholds\",\"type\":\"uint16[]\",\"internalType\":\"uint16[]\"}],\"outputs\":[{\"name\":\"\",\"type\":\"bool\",\"internalType\":\"bool\"}],\"stateMutability\":\"nonpayable\"},{\"type\":\"event\",\"name\":\"MaxStalenessPeriodUpdated\",\"inputs\":[{\"name\":\"operatorSet\",\"type\":\"tuple\",\"indexed\":false,\"internalType\":\"structOperatorSet\",\"components\":[{\"name\":\"avs\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"id\",\"type\":\"uint32\",\"internalType\":\"uint32\"}]},{\"name\":\"maxStalenessPeriod\",\"type\":\"uint32\",\"indexed\":false,\"internalType\":\"uint32\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"OperatorSetOwnerUpdated\",\"inputs\":[{\"name\":\"operatorSet\",\"type\":\"tuple\",\"indexed\":false,\"internalType\":\"structOperatorSet\",\"components\":[{\"name\":\"avs\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"id\",\"type\":\"uint32\",\"internalType\":\"uint32\"}]},{\"name\":\"owner\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"TableUpdated\",\"inputs\":[{\"name\":\"operatorSet\",\"type\":\"tuple\",\"indexed\":false,\"internalType\":\"structOperatorSet\",\"components\":[{\"name\":\"avs\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"id\",\"type\":\"uint32\",\"internalType\":\"uint32\"}]},{\"name\":\"referenceTimestamp\",\"type\":\"uint32\",\"indexed\":false,\"internalType\":\"uint32\"},{\"name\":\"operatorSetInfo\",\"type\":\"tuple\",\"indexed\":false,\"internalType\":\"structIBN254TableCalculatorTypes.BN254OperatorSetInfo\",\"components\":[{\"name\":\"operatorInfoTreeRoot\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"},{\"name\":\"numOperators\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"aggregatePubkey\",\"type\":\"tuple\",\"internalType\":\"structBN254.G1Point\",\"components\":[{\"name\":\"X\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"Y\",\"type\":\"uint256\",\"internalType\":\"uint256\"}]},{\"name\":\"totalWeights\",\"type\":\"uint256[]\",\"internalType\":\"uint256[]\"}]}],\"anonymous\":false},{\"type\":\"error\",\"name\":\"ArrayLengthMismatch\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"CertificateStale\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"OnlyTableUpdater\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"ReferenceTimestampDoesNotExist\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"TableUpdateStale\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"VerificationFailed\",\"inputs\":[]}]", +} + +// IBN254CertificateVerifierABI is the input ABI used to generate the binding from. +// Deprecated: Use IBN254CertificateVerifierMetaData.ABI instead. +var IBN254CertificateVerifierABI = IBN254CertificateVerifierMetaData.ABI + +// IBN254CertificateVerifier is an auto generated Go binding around an Ethereum contract. +type IBN254CertificateVerifier struct { + IBN254CertificateVerifierCaller // Read-only binding to the contract + IBN254CertificateVerifierTransactor // Write-only binding to the contract + IBN254CertificateVerifierFilterer // Log filterer for contract events +} + +// IBN254CertificateVerifierCaller is an auto generated read-only Go binding around an Ethereum contract. +type IBN254CertificateVerifierCaller struct { + contract *bind.BoundContract // Generic contract wrapper for the low level calls +} + +// IBN254CertificateVerifierTransactor is an auto generated write-only Go binding around an Ethereum contract. +type IBN254CertificateVerifierTransactor struct { + contract *bind.BoundContract // Generic contract wrapper for the low level calls +} + +// IBN254CertificateVerifierFilterer is an auto generated log filtering Go binding around an Ethereum contract events. +type IBN254CertificateVerifierFilterer struct { + contract *bind.BoundContract // Generic contract wrapper for the low level calls +} + +// IBN254CertificateVerifierSession is an auto generated Go binding around an Ethereum contract, +// with pre-set call and transact options. +type IBN254CertificateVerifierSession struct { + Contract *IBN254CertificateVerifier // Generic contract binding to set the session for + CallOpts bind.CallOpts // Call options to use throughout this session + TransactOpts bind.TransactOpts // Transaction auth options to use throughout this session +} + +// IBN254CertificateVerifierCallerSession is an auto generated read-only Go binding around an Ethereum contract, +// with pre-set call options. +type IBN254CertificateVerifierCallerSession struct { + Contract *IBN254CertificateVerifierCaller // Generic contract caller binding to set the session for + CallOpts bind.CallOpts // Call options to use throughout this session +} + +// IBN254CertificateVerifierTransactorSession is an auto generated write-only Go binding around an Ethereum contract, +// with pre-set transact options. +type IBN254CertificateVerifierTransactorSession struct { + Contract *IBN254CertificateVerifierTransactor // Generic contract transactor binding to set the session for + TransactOpts bind.TransactOpts // Transaction auth options to use throughout this session +} + +// IBN254CertificateVerifierRaw is an auto generated low-level Go binding around an Ethereum contract. +type IBN254CertificateVerifierRaw struct { + Contract *IBN254CertificateVerifier // Generic contract binding to access the raw methods on +} + +// IBN254CertificateVerifierCallerRaw is an auto generated low-level read-only Go binding around an Ethereum contract. +type IBN254CertificateVerifierCallerRaw struct { + Contract *IBN254CertificateVerifierCaller // Generic read-only contract binding to access the raw methods on +} + +// IBN254CertificateVerifierTransactorRaw is an auto generated low-level write-only Go binding around an Ethereum contract. +type IBN254CertificateVerifierTransactorRaw struct { + Contract *IBN254CertificateVerifierTransactor // Generic write-only contract binding to access the raw methods on +} + +// NewIBN254CertificateVerifier creates a new instance of IBN254CertificateVerifier, bound to a specific deployed contract. +func NewIBN254CertificateVerifier(address common.Address, backend bind.ContractBackend) (*IBN254CertificateVerifier, error) { + contract, err := bindIBN254CertificateVerifier(address, backend, backend, backend) + if err != nil { + return nil, err + } + return &IBN254CertificateVerifier{IBN254CertificateVerifierCaller: IBN254CertificateVerifierCaller{contract: contract}, IBN254CertificateVerifierTransactor: IBN254CertificateVerifierTransactor{contract: contract}, IBN254CertificateVerifierFilterer: IBN254CertificateVerifierFilterer{contract: contract}}, nil +} + +// NewIBN254CertificateVerifierCaller creates a new read-only instance of IBN254CertificateVerifier, bound to a specific deployed contract. +func NewIBN254CertificateVerifierCaller(address common.Address, caller bind.ContractCaller) (*IBN254CertificateVerifierCaller, error) { + contract, err := bindIBN254CertificateVerifier(address, caller, nil, nil) + if err != nil { + return nil, err + } + return &IBN254CertificateVerifierCaller{contract: contract}, nil +} + +// NewIBN254CertificateVerifierTransactor creates a new write-only instance of IBN254CertificateVerifier, bound to a specific deployed contract. +func NewIBN254CertificateVerifierTransactor(address common.Address, transactor bind.ContractTransactor) (*IBN254CertificateVerifierTransactor, error) { + contract, err := bindIBN254CertificateVerifier(address, nil, transactor, nil) + if err != nil { + return nil, err + } + return &IBN254CertificateVerifierTransactor{contract: contract}, nil +} + +// NewIBN254CertificateVerifierFilterer creates a new log filterer instance of IBN254CertificateVerifier, bound to a specific deployed contract. +func NewIBN254CertificateVerifierFilterer(address common.Address, filterer bind.ContractFilterer) (*IBN254CertificateVerifierFilterer, error) { + contract, err := bindIBN254CertificateVerifier(address, nil, nil, filterer) + if err != nil { + return nil, err + } + return &IBN254CertificateVerifierFilterer{contract: contract}, nil +} + +// bindIBN254CertificateVerifier binds a generic wrapper to an already deployed contract. +func bindIBN254CertificateVerifier(address common.Address, caller bind.ContractCaller, transactor bind.ContractTransactor, filterer bind.ContractFilterer) (*bind.BoundContract, error) { + parsed, err := IBN254CertificateVerifierMetaData.GetAbi() + if err != nil { + return nil, err + } + return bind.NewBoundContract(address, *parsed, caller, transactor, filterer), nil +} + +// Call invokes the (constant) contract method with params as input values and +// sets the output to result. The result type might be a single field for simple +// returns, a slice of interfaces for anonymous returns and a struct for named +// returns. +func (_IBN254CertificateVerifier *IBN254CertificateVerifierRaw) Call(opts *bind.CallOpts, result *[]interface{}, method string, params ...interface{}) error { + return _IBN254CertificateVerifier.Contract.IBN254CertificateVerifierCaller.contract.Call(opts, result, method, params...) +} + +// Transfer initiates a plain transaction to move funds to the contract, calling +// its default method if one is available. +func (_IBN254CertificateVerifier *IBN254CertificateVerifierRaw) Transfer(opts *bind.TransactOpts) (*types.Transaction, error) { + return _IBN254CertificateVerifier.Contract.IBN254CertificateVerifierTransactor.contract.Transfer(opts) +} + +// Transact invokes the (paid) contract method with params as input values. +func (_IBN254CertificateVerifier *IBN254CertificateVerifierRaw) Transact(opts *bind.TransactOpts, method string, params ...interface{}) (*types.Transaction, error) { + return _IBN254CertificateVerifier.Contract.IBN254CertificateVerifierTransactor.contract.Transact(opts, method, params...) +} + +// Call invokes the (constant) contract method with params as input values and +// sets the output to result. The result type might be a single field for simple +// returns, a slice of interfaces for anonymous returns and a struct for named +// returns. +func (_IBN254CertificateVerifier *IBN254CertificateVerifierCallerRaw) Call(opts *bind.CallOpts, result *[]interface{}, method string, params ...interface{}) error { + return _IBN254CertificateVerifier.Contract.contract.Call(opts, result, method, params...) +} + +// Transfer initiates a plain transaction to move funds to the contract, calling +// its default method if one is available. +func (_IBN254CertificateVerifier *IBN254CertificateVerifierTransactorRaw) Transfer(opts *bind.TransactOpts) (*types.Transaction, error) { + return _IBN254CertificateVerifier.Contract.contract.Transfer(opts) +} + +// Transact invokes the (paid) contract method with params as input values. +func (_IBN254CertificateVerifier *IBN254CertificateVerifierTransactorRaw) Transact(opts *bind.TransactOpts, method string, params ...interface{}) (*types.Transaction, error) { + return _IBN254CertificateVerifier.Contract.contract.Transact(opts, method, params...) +} + +// GetOperatorSetOwner is a paid mutator transaction binding the contract method 0x84818920. +// +// Solidity: function getOperatorSetOwner((address,uint32) operatorSet) returns(address) +func (_IBN254CertificateVerifier *IBN254CertificateVerifierTransactor) GetOperatorSetOwner(opts *bind.TransactOpts, operatorSet OperatorSet) (*types.Transaction, error) { + return _IBN254CertificateVerifier.contract.Transact(opts, "getOperatorSetOwner", operatorSet) +} + +// GetOperatorSetOwner is a paid mutator transaction binding the contract method 0x84818920. +// +// Solidity: function getOperatorSetOwner((address,uint32) operatorSet) returns(address) +func (_IBN254CertificateVerifier *IBN254CertificateVerifierSession) GetOperatorSetOwner(operatorSet OperatorSet) (*types.Transaction, error) { + return _IBN254CertificateVerifier.Contract.GetOperatorSetOwner(&_IBN254CertificateVerifier.TransactOpts, operatorSet) +} + +// GetOperatorSetOwner is a paid mutator transaction binding the contract method 0x84818920. +// +// Solidity: function getOperatorSetOwner((address,uint32) operatorSet) returns(address) +func (_IBN254CertificateVerifier *IBN254CertificateVerifierTransactorSession) GetOperatorSetOwner(operatorSet OperatorSet) (*types.Transaction, error) { + return _IBN254CertificateVerifier.Contract.GetOperatorSetOwner(&_IBN254CertificateVerifier.TransactOpts, operatorSet) +} + +// LatestReferenceTimestamp is a paid mutator transaction binding the contract method 0x5ddb9b5b. +// +// Solidity: function latestReferenceTimestamp((address,uint32) operatorSet) returns(uint32) +func (_IBN254CertificateVerifier *IBN254CertificateVerifierTransactor) LatestReferenceTimestamp(opts *bind.TransactOpts, operatorSet OperatorSet) (*types.Transaction, error) { + return _IBN254CertificateVerifier.contract.Transact(opts, "latestReferenceTimestamp", operatorSet) +} + +// LatestReferenceTimestamp is a paid mutator transaction binding the contract method 0x5ddb9b5b. +// +// Solidity: function latestReferenceTimestamp((address,uint32) operatorSet) returns(uint32) +func (_IBN254CertificateVerifier *IBN254CertificateVerifierSession) LatestReferenceTimestamp(operatorSet OperatorSet) (*types.Transaction, error) { + return _IBN254CertificateVerifier.Contract.LatestReferenceTimestamp(&_IBN254CertificateVerifier.TransactOpts, operatorSet) +} + +// LatestReferenceTimestamp is a paid mutator transaction binding the contract method 0x5ddb9b5b. +// +// Solidity: function latestReferenceTimestamp((address,uint32) operatorSet) returns(uint32) +func (_IBN254CertificateVerifier *IBN254CertificateVerifierTransactorSession) LatestReferenceTimestamp(operatorSet OperatorSet) (*types.Transaction, error) { + return _IBN254CertificateVerifier.Contract.LatestReferenceTimestamp(&_IBN254CertificateVerifier.TransactOpts, operatorSet) +} + +// MaxOperatorTableStaleness is a paid mutator transaction binding the contract method 0x6141879e. +// +// Solidity: function maxOperatorTableStaleness((address,uint32) operatorSet) returns(uint32) +func (_IBN254CertificateVerifier *IBN254CertificateVerifierTransactor) MaxOperatorTableStaleness(opts *bind.TransactOpts, operatorSet OperatorSet) (*types.Transaction, error) { + return _IBN254CertificateVerifier.contract.Transact(opts, "maxOperatorTableStaleness", operatorSet) +} + +// MaxOperatorTableStaleness is a paid mutator transaction binding the contract method 0x6141879e. +// +// Solidity: function maxOperatorTableStaleness((address,uint32) operatorSet) returns(uint32) +func (_IBN254CertificateVerifier *IBN254CertificateVerifierSession) MaxOperatorTableStaleness(operatorSet OperatorSet) (*types.Transaction, error) { + return _IBN254CertificateVerifier.Contract.MaxOperatorTableStaleness(&_IBN254CertificateVerifier.TransactOpts, operatorSet) +} + +// MaxOperatorTableStaleness is a paid mutator transaction binding the contract method 0x6141879e. +// +// Solidity: function maxOperatorTableStaleness((address,uint32) operatorSet) returns(uint32) +func (_IBN254CertificateVerifier *IBN254CertificateVerifierTransactorSession) MaxOperatorTableStaleness(operatorSet OperatorSet) (*types.Transaction, error) { + return _IBN254CertificateVerifier.Contract.MaxOperatorTableStaleness(&_IBN254CertificateVerifier.TransactOpts, operatorSet) +} + +// UpdateOperatorTable is a paid mutator transaction binding the contract method 0x6738c40b. +// +// Solidity: function updateOperatorTable((address,uint32) operatorSet, uint32 referenceTimestamp, (bytes32,uint256,(uint256,uint256),uint256[]) operatorSetInfo, (address,uint32) operatorSetConfig) returns() +func (_IBN254CertificateVerifier *IBN254CertificateVerifierTransactor) UpdateOperatorTable(opts *bind.TransactOpts, operatorSet OperatorSet, referenceTimestamp uint32, operatorSetInfo IBN254TableCalculatorTypesBN254OperatorSetInfo, operatorSetConfig ICrossChainRegistryTypesOperatorSetConfig) (*types.Transaction, error) { + return _IBN254CertificateVerifier.contract.Transact(opts, "updateOperatorTable", operatorSet, referenceTimestamp, operatorSetInfo, operatorSetConfig) +} + +// UpdateOperatorTable is a paid mutator transaction binding the contract method 0x6738c40b. +// +// Solidity: function updateOperatorTable((address,uint32) operatorSet, uint32 referenceTimestamp, (bytes32,uint256,(uint256,uint256),uint256[]) operatorSetInfo, (address,uint32) operatorSetConfig) returns() +func (_IBN254CertificateVerifier *IBN254CertificateVerifierSession) UpdateOperatorTable(operatorSet OperatorSet, referenceTimestamp uint32, operatorSetInfo IBN254TableCalculatorTypesBN254OperatorSetInfo, operatorSetConfig ICrossChainRegistryTypesOperatorSetConfig) (*types.Transaction, error) { + return _IBN254CertificateVerifier.Contract.UpdateOperatorTable(&_IBN254CertificateVerifier.TransactOpts, operatorSet, referenceTimestamp, operatorSetInfo, operatorSetConfig) +} + +// UpdateOperatorTable is a paid mutator transaction binding the contract method 0x6738c40b. +// +// Solidity: function updateOperatorTable((address,uint32) operatorSet, uint32 referenceTimestamp, (bytes32,uint256,(uint256,uint256),uint256[]) operatorSetInfo, (address,uint32) operatorSetConfig) returns() +func (_IBN254CertificateVerifier *IBN254CertificateVerifierTransactorSession) UpdateOperatorTable(operatorSet OperatorSet, referenceTimestamp uint32, operatorSetInfo IBN254TableCalculatorTypesBN254OperatorSetInfo, operatorSetConfig ICrossChainRegistryTypesOperatorSetConfig) (*types.Transaction, error) { + return _IBN254CertificateVerifier.Contract.UpdateOperatorTable(&_IBN254CertificateVerifier.TransactOpts, operatorSet, referenceTimestamp, operatorSetInfo, operatorSetConfig) +} + +// VerifyCertificate is a paid mutator transaction binding the contract method 0x080b7150. +// +// Solidity: function verifyCertificate((address,uint32) operatorSet, (uint32,bytes32,(uint256,uint256),(uint256[2],uint256[2]),(uint32,bytes,((uint256,uint256),uint256[]))[]) cert) returns(uint256[] signedStakes) +func (_IBN254CertificateVerifier *IBN254CertificateVerifierTransactor) VerifyCertificate(opts *bind.TransactOpts, operatorSet OperatorSet, cert IBN254CertificateVerifierTypesBN254Certificate) (*types.Transaction, error) { + return _IBN254CertificateVerifier.contract.Transact(opts, "verifyCertificate", operatorSet, cert) +} + +// VerifyCertificate is a paid mutator transaction binding the contract method 0x080b7150. +// +// Solidity: function verifyCertificate((address,uint32) operatorSet, (uint32,bytes32,(uint256,uint256),(uint256[2],uint256[2]),(uint32,bytes,((uint256,uint256),uint256[]))[]) cert) returns(uint256[] signedStakes) +func (_IBN254CertificateVerifier *IBN254CertificateVerifierSession) VerifyCertificate(operatorSet OperatorSet, cert IBN254CertificateVerifierTypesBN254Certificate) (*types.Transaction, error) { + return _IBN254CertificateVerifier.Contract.VerifyCertificate(&_IBN254CertificateVerifier.TransactOpts, operatorSet, cert) +} + +// VerifyCertificate is a paid mutator transaction binding the contract method 0x080b7150. +// +// Solidity: function verifyCertificate((address,uint32) operatorSet, (uint32,bytes32,(uint256,uint256),(uint256[2],uint256[2]),(uint32,bytes,((uint256,uint256),uint256[]))[]) cert) returns(uint256[] signedStakes) +func (_IBN254CertificateVerifier *IBN254CertificateVerifierTransactorSession) VerifyCertificate(operatorSet OperatorSet, cert IBN254CertificateVerifierTypesBN254Certificate) (*types.Transaction, error) { + return _IBN254CertificateVerifier.Contract.VerifyCertificate(&_IBN254CertificateVerifier.TransactOpts, operatorSet, cert) +} + +// VerifyCertificateNominal is a paid mutator transaction binding the contract method 0xdd2ae1b9. +// +// Solidity: function verifyCertificateNominal((address,uint32) operatorSet, (uint32,bytes32,(uint256,uint256),(uint256[2],uint256[2]),(uint32,bytes,((uint256,uint256),uint256[]))[]) cert, uint256[] totalStakeNominalThresholds) returns(bool) +func (_IBN254CertificateVerifier *IBN254CertificateVerifierTransactor) VerifyCertificateNominal(opts *bind.TransactOpts, operatorSet OperatorSet, cert IBN254CertificateVerifierTypesBN254Certificate, totalStakeNominalThresholds []*big.Int) (*types.Transaction, error) { + return _IBN254CertificateVerifier.contract.Transact(opts, "verifyCertificateNominal", operatorSet, cert, totalStakeNominalThresholds) +} + +// VerifyCertificateNominal is a paid mutator transaction binding the contract method 0xdd2ae1b9. +// +// Solidity: function verifyCertificateNominal((address,uint32) operatorSet, (uint32,bytes32,(uint256,uint256),(uint256[2],uint256[2]),(uint32,bytes,((uint256,uint256),uint256[]))[]) cert, uint256[] totalStakeNominalThresholds) returns(bool) +func (_IBN254CertificateVerifier *IBN254CertificateVerifierSession) VerifyCertificateNominal(operatorSet OperatorSet, cert IBN254CertificateVerifierTypesBN254Certificate, totalStakeNominalThresholds []*big.Int) (*types.Transaction, error) { + return _IBN254CertificateVerifier.Contract.VerifyCertificateNominal(&_IBN254CertificateVerifier.TransactOpts, operatorSet, cert, totalStakeNominalThresholds) +} + +// VerifyCertificateNominal is a paid mutator transaction binding the contract method 0xdd2ae1b9. +// +// Solidity: function verifyCertificateNominal((address,uint32) operatorSet, (uint32,bytes32,(uint256,uint256),(uint256[2],uint256[2]),(uint32,bytes,((uint256,uint256),uint256[]))[]) cert, uint256[] totalStakeNominalThresholds) returns(bool) +func (_IBN254CertificateVerifier *IBN254CertificateVerifierTransactorSession) VerifyCertificateNominal(operatorSet OperatorSet, cert IBN254CertificateVerifierTypesBN254Certificate, totalStakeNominalThresholds []*big.Int) (*types.Transaction, error) { + return _IBN254CertificateVerifier.Contract.VerifyCertificateNominal(&_IBN254CertificateVerifier.TransactOpts, operatorSet, cert, totalStakeNominalThresholds) +} + +// VerifyCertificateProportion is a paid mutator transaction binding the contract method 0x017d7974. +// +// Solidity: function verifyCertificateProportion((address,uint32) operatorSet, (uint32,bytes32,(uint256,uint256),(uint256[2],uint256[2]),(uint32,bytes,((uint256,uint256),uint256[]))[]) cert, uint16[] totalStakeProportionThresholds) returns(bool) +func (_IBN254CertificateVerifier *IBN254CertificateVerifierTransactor) VerifyCertificateProportion(opts *bind.TransactOpts, operatorSet OperatorSet, cert IBN254CertificateVerifierTypesBN254Certificate, totalStakeProportionThresholds []uint16) (*types.Transaction, error) { + return _IBN254CertificateVerifier.contract.Transact(opts, "verifyCertificateProportion", operatorSet, cert, totalStakeProportionThresholds) +} + +// VerifyCertificateProportion is a paid mutator transaction binding the contract method 0x017d7974. +// +// Solidity: function verifyCertificateProportion((address,uint32) operatorSet, (uint32,bytes32,(uint256,uint256),(uint256[2],uint256[2]),(uint32,bytes,((uint256,uint256),uint256[]))[]) cert, uint16[] totalStakeProportionThresholds) returns(bool) +func (_IBN254CertificateVerifier *IBN254CertificateVerifierSession) VerifyCertificateProportion(operatorSet OperatorSet, cert IBN254CertificateVerifierTypesBN254Certificate, totalStakeProportionThresholds []uint16) (*types.Transaction, error) { + return _IBN254CertificateVerifier.Contract.VerifyCertificateProportion(&_IBN254CertificateVerifier.TransactOpts, operatorSet, cert, totalStakeProportionThresholds) +} + +// VerifyCertificateProportion is a paid mutator transaction binding the contract method 0x017d7974. +// +// Solidity: function verifyCertificateProportion((address,uint32) operatorSet, (uint32,bytes32,(uint256,uint256),(uint256[2],uint256[2]),(uint32,bytes,((uint256,uint256),uint256[]))[]) cert, uint16[] totalStakeProportionThresholds) returns(bool) +func (_IBN254CertificateVerifier *IBN254CertificateVerifierTransactorSession) VerifyCertificateProportion(operatorSet OperatorSet, cert IBN254CertificateVerifierTypesBN254Certificate, totalStakeProportionThresholds []uint16) (*types.Transaction, error) { + return _IBN254CertificateVerifier.Contract.VerifyCertificateProportion(&_IBN254CertificateVerifier.TransactOpts, operatorSet, cert, totalStakeProportionThresholds) +} + +// IBN254CertificateVerifierMaxStalenessPeriodUpdatedIterator is returned from FilterMaxStalenessPeriodUpdated and is used to iterate over the raw logs and unpacked data for MaxStalenessPeriodUpdated events raised by the IBN254CertificateVerifier contract. +type IBN254CertificateVerifierMaxStalenessPeriodUpdatedIterator struct { + Event *IBN254CertificateVerifierMaxStalenessPeriodUpdated // 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 *IBN254CertificateVerifierMaxStalenessPeriodUpdatedIterator) 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(IBN254CertificateVerifierMaxStalenessPeriodUpdated) + 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(IBN254CertificateVerifierMaxStalenessPeriodUpdated) + 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 *IBN254CertificateVerifierMaxStalenessPeriodUpdatedIterator) Error() error { + return it.fail +} + +// Close terminates the iteration process, releasing any pending underlying +// resources. +func (it *IBN254CertificateVerifierMaxStalenessPeriodUpdatedIterator) Close() error { + it.sub.Unsubscribe() + return nil +} + +// IBN254CertificateVerifierMaxStalenessPeriodUpdated represents a MaxStalenessPeriodUpdated event raised by the IBN254CertificateVerifier contract. +type IBN254CertificateVerifierMaxStalenessPeriodUpdated struct { + OperatorSet OperatorSet + MaxStalenessPeriod uint32 + Raw types.Log // Blockchain specific contextual infos +} + +// FilterMaxStalenessPeriodUpdated is a free log retrieval operation binding the contract event 0x28539469fbbc8a5482e60966bf9376f7b9d25b2f0a65a9976f6baa3f0e3788da. +// +// Solidity: event MaxStalenessPeriodUpdated((address,uint32) operatorSet, uint32 maxStalenessPeriod) +func (_IBN254CertificateVerifier *IBN254CertificateVerifierFilterer) FilterMaxStalenessPeriodUpdated(opts *bind.FilterOpts) (*IBN254CertificateVerifierMaxStalenessPeriodUpdatedIterator, error) { + + logs, sub, err := _IBN254CertificateVerifier.contract.FilterLogs(opts, "MaxStalenessPeriodUpdated") + if err != nil { + return nil, err + } + return &IBN254CertificateVerifierMaxStalenessPeriodUpdatedIterator{contract: _IBN254CertificateVerifier.contract, event: "MaxStalenessPeriodUpdated", logs: logs, sub: sub}, nil +} + +// WatchMaxStalenessPeriodUpdated is a free log subscription operation binding the contract event 0x28539469fbbc8a5482e60966bf9376f7b9d25b2f0a65a9976f6baa3f0e3788da. +// +// Solidity: event MaxStalenessPeriodUpdated((address,uint32) operatorSet, uint32 maxStalenessPeriod) +func (_IBN254CertificateVerifier *IBN254CertificateVerifierFilterer) WatchMaxStalenessPeriodUpdated(opts *bind.WatchOpts, sink chan<- *IBN254CertificateVerifierMaxStalenessPeriodUpdated) (event.Subscription, error) { + + logs, sub, err := _IBN254CertificateVerifier.contract.WatchLogs(opts, "MaxStalenessPeriodUpdated") + 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(IBN254CertificateVerifierMaxStalenessPeriodUpdated) + if err := _IBN254CertificateVerifier.contract.UnpackLog(event, "MaxStalenessPeriodUpdated", 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 +} + +// ParseMaxStalenessPeriodUpdated is a log parse operation binding the contract event 0x28539469fbbc8a5482e60966bf9376f7b9d25b2f0a65a9976f6baa3f0e3788da. +// +// Solidity: event MaxStalenessPeriodUpdated((address,uint32) operatorSet, uint32 maxStalenessPeriod) +func (_IBN254CertificateVerifier *IBN254CertificateVerifierFilterer) ParseMaxStalenessPeriodUpdated(log types.Log) (*IBN254CertificateVerifierMaxStalenessPeriodUpdated, error) { + event := new(IBN254CertificateVerifierMaxStalenessPeriodUpdated) + if err := _IBN254CertificateVerifier.contract.UnpackLog(event, "MaxStalenessPeriodUpdated", log); err != nil { + return nil, err + } + event.Raw = log + return event, nil +} + +// IBN254CertificateVerifierOperatorSetOwnerUpdatedIterator is returned from FilterOperatorSetOwnerUpdated and is used to iterate over the raw logs and unpacked data for OperatorSetOwnerUpdated events raised by the IBN254CertificateVerifier contract. +type IBN254CertificateVerifierOperatorSetOwnerUpdatedIterator struct { + Event *IBN254CertificateVerifierOperatorSetOwnerUpdated // 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 *IBN254CertificateVerifierOperatorSetOwnerUpdatedIterator) 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(IBN254CertificateVerifierOperatorSetOwnerUpdated) + 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(IBN254CertificateVerifierOperatorSetOwnerUpdated) + 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 *IBN254CertificateVerifierOperatorSetOwnerUpdatedIterator) Error() error { + return it.fail +} + +// Close terminates the iteration process, releasing any pending underlying +// resources. +func (it *IBN254CertificateVerifierOperatorSetOwnerUpdatedIterator) Close() error { + it.sub.Unsubscribe() + return nil +} + +// IBN254CertificateVerifierOperatorSetOwnerUpdated represents a OperatorSetOwnerUpdated event raised by the IBN254CertificateVerifier contract. +type IBN254CertificateVerifierOperatorSetOwnerUpdated struct { + OperatorSet OperatorSet + Owner common.Address + Raw types.Log // Blockchain specific contextual infos +} + +// FilterOperatorSetOwnerUpdated is a free log retrieval operation binding the contract event 0x806dc367095c0baf953d7144b7c4376261675ee0b4e0da2761e43673051c7375. +// +// Solidity: event OperatorSetOwnerUpdated((address,uint32) operatorSet, address owner) +func (_IBN254CertificateVerifier *IBN254CertificateVerifierFilterer) FilterOperatorSetOwnerUpdated(opts *bind.FilterOpts) (*IBN254CertificateVerifierOperatorSetOwnerUpdatedIterator, error) { + + logs, sub, err := _IBN254CertificateVerifier.contract.FilterLogs(opts, "OperatorSetOwnerUpdated") + if err != nil { + return nil, err + } + return &IBN254CertificateVerifierOperatorSetOwnerUpdatedIterator{contract: _IBN254CertificateVerifier.contract, event: "OperatorSetOwnerUpdated", logs: logs, sub: sub}, nil +} + +// WatchOperatorSetOwnerUpdated is a free log subscription operation binding the contract event 0x806dc367095c0baf953d7144b7c4376261675ee0b4e0da2761e43673051c7375. +// +// Solidity: event OperatorSetOwnerUpdated((address,uint32) operatorSet, address owner) +func (_IBN254CertificateVerifier *IBN254CertificateVerifierFilterer) WatchOperatorSetOwnerUpdated(opts *bind.WatchOpts, sink chan<- *IBN254CertificateVerifierOperatorSetOwnerUpdated) (event.Subscription, error) { + + logs, sub, err := _IBN254CertificateVerifier.contract.WatchLogs(opts, "OperatorSetOwnerUpdated") + 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(IBN254CertificateVerifierOperatorSetOwnerUpdated) + if err := _IBN254CertificateVerifier.contract.UnpackLog(event, "OperatorSetOwnerUpdated", 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 +} + +// ParseOperatorSetOwnerUpdated is a log parse operation binding the contract event 0x806dc367095c0baf953d7144b7c4376261675ee0b4e0da2761e43673051c7375. +// +// Solidity: event OperatorSetOwnerUpdated((address,uint32) operatorSet, address owner) +func (_IBN254CertificateVerifier *IBN254CertificateVerifierFilterer) ParseOperatorSetOwnerUpdated(log types.Log) (*IBN254CertificateVerifierOperatorSetOwnerUpdated, error) { + event := new(IBN254CertificateVerifierOperatorSetOwnerUpdated) + if err := _IBN254CertificateVerifier.contract.UnpackLog(event, "OperatorSetOwnerUpdated", log); err != nil { + return nil, err + } + event.Raw = log + return event, nil +} + +// IBN254CertificateVerifierTableUpdatedIterator is returned from FilterTableUpdated and is used to iterate over the raw logs and unpacked data for TableUpdated events raised by the IBN254CertificateVerifier contract. +type IBN254CertificateVerifierTableUpdatedIterator struct { + Event *IBN254CertificateVerifierTableUpdated // 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 *IBN254CertificateVerifierTableUpdatedIterator) 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(IBN254CertificateVerifierTableUpdated) + 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(IBN254CertificateVerifierTableUpdated) + 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 *IBN254CertificateVerifierTableUpdatedIterator) Error() error { + return it.fail +} + +// Close terminates the iteration process, releasing any pending underlying +// resources. +func (it *IBN254CertificateVerifierTableUpdatedIterator) Close() error { + it.sub.Unsubscribe() + return nil +} + +// IBN254CertificateVerifierTableUpdated represents a TableUpdated event raised by the IBN254CertificateVerifier contract. +type IBN254CertificateVerifierTableUpdated struct { + OperatorSet OperatorSet + ReferenceTimestamp uint32 + OperatorSetInfo IBN254TableCalculatorTypesBN254OperatorSetInfo + Raw types.Log // Blockchain specific contextual infos +} + +// FilterTableUpdated is a free log retrieval operation binding the contract event 0x93e6bea1c9b5dce4a5c07b00261e956df2a4a253d9ab6ca070ca2037d72ada9e. +// +// Solidity: event TableUpdated((address,uint32) operatorSet, uint32 referenceTimestamp, (bytes32,uint256,(uint256,uint256),uint256[]) operatorSetInfo) +func (_IBN254CertificateVerifier *IBN254CertificateVerifierFilterer) FilterTableUpdated(opts *bind.FilterOpts) (*IBN254CertificateVerifierTableUpdatedIterator, error) { + + logs, sub, err := _IBN254CertificateVerifier.contract.FilterLogs(opts, "TableUpdated") + if err != nil { + return nil, err + } + return &IBN254CertificateVerifierTableUpdatedIterator{contract: _IBN254CertificateVerifier.contract, event: "TableUpdated", logs: logs, sub: sub}, nil +} + +// WatchTableUpdated is a free log subscription operation binding the contract event 0x93e6bea1c9b5dce4a5c07b00261e956df2a4a253d9ab6ca070ca2037d72ada9e. +// +// Solidity: event TableUpdated((address,uint32) operatorSet, uint32 referenceTimestamp, (bytes32,uint256,(uint256,uint256),uint256[]) operatorSetInfo) +func (_IBN254CertificateVerifier *IBN254CertificateVerifierFilterer) WatchTableUpdated(opts *bind.WatchOpts, sink chan<- *IBN254CertificateVerifierTableUpdated) (event.Subscription, error) { + + logs, sub, err := _IBN254CertificateVerifier.contract.WatchLogs(opts, "TableUpdated") + 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(IBN254CertificateVerifierTableUpdated) + if err := _IBN254CertificateVerifier.contract.UnpackLog(event, "TableUpdated", 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 +} + +// ParseTableUpdated is a log parse operation binding the contract event 0x93e6bea1c9b5dce4a5c07b00261e956df2a4a253d9ab6ca070ca2037d72ada9e. +// +// Solidity: event TableUpdated((address,uint32) operatorSet, uint32 referenceTimestamp, (bytes32,uint256,(uint256,uint256),uint256[]) operatorSetInfo) +func (_IBN254CertificateVerifier *IBN254CertificateVerifierFilterer) ParseTableUpdated(log types.Log) (*IBN254CertificateVerifierTableUpdated, error) { + event := new(IBN254CertificateVerifierTableUpdated) + if err := _IBN254CertificateVerifier.contract.UnpackLog(event, "TableUpdated", log); err != nil { + return nil, err + } + event.Raw = log + return event, nil +} diff --git a/pkg/bindings/IBN254TableCalculator/binding.go b/pkg/bindings/IBN254TableCalculator/binding.go new file mode 100644 index 0000000000..3bc25aad8e --- /dev/null +++ b/pkg/bindings/IBN254TableCalculator/binding.go @@ -0,0 +1,300 @@ +// Code generated - DO NOT EDIT. +// This file is a generated binding and any manual changes will be lost. + +package IBN254TableCalculator + +import ( + "errors" + "math/big" + "strings" + + ethereum "github.com/ethereum/go-ethereum" + "github.com/ethereum/go-ethereum/accounts/abi" + "github.com/ethereum/go-ethereum/accounts/abi/bind" + "github.com/ethereum/go-ethereum/common" + "github.com/ethereum/go-ethereum/core/types" + "github.com/ethereum/go-ethereum/event" +) + +// Reference imports to suppress errors if they are not otherwise used. +var ( + _ = errors.New + _ = big.NewInt + _ = strings.NewReader + _ = ethereum.NotFound + _ = bind.Bind + _ = common.Big1 + _ = types.BloomLookup + _ = event.NewSubscription + _ = abi.ConvertType +) + +// BN254G1Point is an auto generated low-level Go binding around an user-defined struct. +type BN254G1Point struct { + X *big.Int + Y *big.Int +} + +// IBN254TableCalculatorTypesBN254OperatorInfo is an auto generated low-level Go binding around an user-defined struct. +type IBN254TableCalculatorTypesBN254OperatorInfo struct { + Pubkey BN254G1Point + Weights []*big.Int +} + +// IBN254TableCalculatorTypesBN254OperatorSetInfo is an auto generated low-level Go binding around an user-defined struct. +type IBN254TableCalculatorTypesBN254OperatorSetInfo struct { + OperatorInfoTreeRoot [32]byte + NumOperators *big.Int + AggregatePubkey BN254G1Point + TotalWeights []*big.Int +} + +// OperatorSet is an auto generated low-level Go binding around an user-defined struct. +type OperatorSet struct { + Avs common.Address + Id uint32 +} + +// IBN254TableCalculatorMetaData contains all meta data concerning the IBN254TableCalculator contract. +var IBN254TableCalculatorMetaData = &bind.MetaData{ + ABI: "[{\"type\":\"function\",\"name\":\"calculateOperatorTable\",\"inputs\":[{\"name\":\"operatorSet\",\"type\":\"tuple\",\"internalType\":\"structOperatorSet\",\"components\":[{\"name\":\"avs\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"id\",\"type\":\"uint32\",\"internalType\":\"uint32\"}]}],\"outputs\":[{\"name\":\"operatorSetInfo\",\"type\":\"tuple\",\"internalType\":\"structIBN254TableCalculatorTypes.BN254OperatorSetInfo\",\"components\":[{\"name\":\"operatorInfoTreeRoot\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"},{\"name\":\"numOperators\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"aggregatePubkey\",\"type\":\"tuple\",\"internalType\":\"structBN254.G1Point\",\"components\":[{\"name\":\"X\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"Y\",\"type\":\"uint256\",\"internalType\":\"uint256\"}]},{\"name\":\"totalWeights\",\"type\":\"uint256[]\",\"internalType\":\"uint256[]\"}]}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"calculateOperatorTableBytes\",\"inputs\":[{\"name\":\"operatorSet\",\"type\":\"tuple\",\"internalType\":\"structOperatorSet\",\"components\":[{\"name\":\"avs\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"id\",\"type\":\"uint32\",\"internalType\":\"uint32\"}]}],\"outputs\":[{\"name\":\"operatorTableBytes\",\"type\":\"bytes\",\"internalType\":\"bytes\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"getOperatorInfos\",\"inputs\":[{\"name\":\"operatorSet\",\"type\":\"tuple\",\"internalType\":\"structOperatorSet\",\"components\":[{\"name\":\"avs\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"id\",\"type\":\"uint32\",\"internalType\":\"uint32\"}]}],\"outputs\":[{\"name\":\"operatorInfos\",\"type\":\"tuple[]\",\"internalType\":\"structIBN254TableCalculatorTypes.BN254OperatorInfo[]\",\"components\":[{\"name\":\"pubkey\",\"type\":\"tuple\",\"internalType\":\"structBN254.G1Point\",\"components\":[{\"name\":\"X\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"Y\",\"type\":\"uint256\",\"internalType\":\"uint256\"}]},{\"name\":\"weights\",\"type\":\"uint256[]\",\"internalType\":\"uint256[]\"}]}],\"stateMutability\":\"view\"}]", +} + +// IBN254TableCalculatorABI is the input ABI used to generate the binding from. +// Deprecated: Use IBN254TableCalculatorMetaData.ABI instead. +var IBN254TableCalculatorABI = IBN254TableCalculatorMetaData.ABI + +// IBN254TableCalculator is an auto generated Go binding around an Ethereum contract. +type IBN254TableCalculator struct { + IBN254TableCalculatorCaller // Read-only binding to the contract + IBN254TableCalculatorTransactor // Write-only binding to the contract + IBN254TableCalculatorFilterer // Log filterer for contract events +} + +// IBN254TableCalculatorCaller is an auto generated read-only Go binding around an Ethereum contract. +type IBN254TableCalculatorCaller struct { + contract *bind.BoundContract // Generic contract wrapper for the low level calls +} + +// IBN254TableCalculatorTransactor is an auto generated write-only Go binding around an Ethereum contract. +type IBN254TableCalculatorTransactor struct { + contract *bind.BoundContract // Generic contract wrapper for the low level calls +} + +// IBN254TableCalculatorFilterer is an auto generated log filtering Go binding around an Ethereum contract events. +type IBN254TableCalculatorFilterer struct { + contract *bind.BoundContract // Generic contract wrapper for the low level calls +} + +// IBN254TableCalculatorSession is an auto generated Go binding around an Ethereum contract, +// with pre-set call and transact options. +type IBN254TableCalculatorSession struct { + Contract *IBN254TableCalculator // Generic contract binding to set the session for + CallOpts bind.CallOpts // Call options to use throughout this session + TransactOpts bind.TransactOpts // Transaction auth options to use throughout this session +} + +// IBN254TableCalculatorCallerSession is an auto generated read-only Go binding around an Ethereum contract, +// with pre-set call options. +type IBN254TableCalculatorCallerSession struct { + Contract *IBN254TableCalculatorCaller // Generic contract caller binding to set the session for + CallOpts bind.CallOpts // Call options to use throughout this session +} + +// IBN254TableCalculatorTransactorSession is an auto generated write-only Go binding around an Ethereum contract, +// with pre-set transact options. +type IBN254TableCalculatorTransactorSession struct { + Contract *IBN254TableCalculatorTransactor // Generic contract transactor binding to set the session for + TransactOpts bind.TransactOpts // Transaction auth options to use throughout this session +} + +// IBN254TableCalculatorRaw is an auto generated low-level Go binding around an Ethereum contract. +type IBN254TableCalculatorRaw struct { + Contract *IBN254TableCalculator // Generic contract binding to access the raw methods on +} + +// IBN254TableCalculatorCallerRaw is an auto generated low-level read-only Go binding around an Ethereum contract. +type IBN254TableCalculatorCallerRaw struct { + Contract *IBN254TableCalculatorCaller // Generic read-only contract binding to access the raw methods on +} + +// IBN254TableCalculatorTransactorRaw is an auto generated low-level write-only Go binding around an Ethereum contract. +type IBN254TableCalculatorTransactorRaw struct { + Contract *IBN254TableCalculatorTransactor // Generic write-only contract binding to access the raw methods on +} + +// NewIBN254TableCalculator creates a new instance of IBN254TableCalculator, bound to a specific deployed contract. +func NewIBN254TableCalculator(address common.Address, backend bind.ContractBackend) (*IBN254TableCalculator, error) { + contract, err := bindIBN254TableCalculator(address, backend, backend, backend) + if err != nil { + return nil, err + } + return &IBN254TableCalculator{IBN254TableCalculatorCaller: IBN254TableCalculatorCaller{contract: contract}, IBN254TableCalculatorTransactor: IBN254TableCalculatorTransactor{contract: contract}, IBN254TableCalculatorFilterer: IBN254TableCalculatorFilterer{contract: contract}}, nil +} + +// NewIBN254TableCalculatorCaller creates a new read-only instance of IBN254TableCalculator, bound to a specific deployed contract. +func NewIBN254TableCalculatorCaller(address common.Address, caller bind.ContractCaller) (*IBN254TableCalculatorCaller, error) { + contract, err := bindIBN254TableCalculator(address, caller, nil, nil) + if err != nil { + return nil, err + } + return &IBN254TableCalculatorCaller{contract: contract}, nil +} + +// NewIBN254TableCalculatorTransactor creates a new write-only instance of IBN254TableCalculator, bound to a specific deployed contract. +func NewIBN254TableCalculatorTransactor(address common.Address, transactor bind.ContractTransactor) (*IBN254TableCalculatorTransactor, error) { + contract, err := bindIBN254TableCalculator(address, nil, transactor, nil) + if err != nil { + return nil, err + } + return &IBN254TableCalculatorTransactor{contract: contract}, nil +} + +// NewIBN254TableCalculatorFilterer creates a new log filterer instance of IBN254TableCalculator, bound to a specific deployed contract. +func NewIBN254TableCalculatorFilterer(address common.Address, filterer bind.ContractFilterer) (*IBN254TableCalculatorFilterer, error) { + contract, err := bindIBN254TableCalculator(address, nil, nil, filterer) + if err != nil { + return nil, err + } + return &IBN254TableCalculatorFilterer{contract: contract}, nil +} + +// bindIBN254TableCalculator binds a generic wrapper to an already deployed contract. +func bindIBN254TableCalculator(address common.Address, caller bind.ContractCaller, transactor bind.ContractTransactor, filterer bind.ContractFilterer) (*bind.BoundContract, error) { + parsed, err := IBN254TableCalculatorMetaData.GetAbi() + if err != nil { + return nil, err + } + return bind.NewBoundContract(address, *parsed, caller, transactor, filterer), nil +} + +// Call invokes the (constant) contract method with params as input values and +// sets the output to result. The result type might be a single field for simple +// returns, a slice of interfaces for anonymous returns and a struct for named +// returns. +func (_IBN254TableCalculator *IBN254TableCalculatorRaw) Call(opts *bind.CallOpts, result *[]interface{}, method string, params ...interface{}) error { + return _IBN254TableCalculator.Contract.IBN254TableCalculatorCaller.contract.Call(opts, result, method, params...) +} + +// Transfer initiates a plain transaction to move funds to the contract, calling +// its default method if one is available. +func (_IBN254TableCalculator *IBN254TableCalculatorRaw) Transfer(opts *bind.TransactOpts) (*types.Transaction, error) { + return _IBN254TableCalculator.Contract.IBN254TableCalculatorTransactor.contract.Transfer(opts) +} + +// Transact invokes the (paid) contract method with params as input values. +func (_IBN254TableCalculator *IBN254TableCalculatorRaw) Transact(opts *bind.TransactOpts, method string, params ...interface{}) (*types.Transaction, error) { + return _IBN254TableCalculator.Contract.IBN254TableCalculatorTransactor.contract.Transact(opts, method, params...) +} + +// Call invokes the (constant) contract method with params as input values and +// sets the output to result. The result type might be a single field for simple +// returns, a slice of interfaces for anonymous returns and a struct for named +// returns. +func (_IBN254TableCalculator *IBN254TableCalculatorCallerRaw) Call(opts *bind.CallOpts, result *[]interface{}, method string, params ...interface{}) error { + return _IBN254TableCalculator.Contract.contract.Call(opts, result, method, params...) +} + +// Transfer initiates a plain transaction to move funds to the contract, calling +// its default method if one is available. +func (_IBN254TableCalculator *IBN254TableCalculatorTransactorRaw) Transfer(opts *bind.TransactOpts) (*types.Transaction, error) { + return _IBN254TableCalculator.Contract.contract.Transfer(opts) +} + +// Transact invokes the (paid) contract method with params as input values. +func (_IBN254TableCalculator *IBN254TableCalculatorTransactorRaw) Transact(opts *bind.TransactOpts, method string, params ...interface{}) (*types.Transaction, error) { + return _IBN254TableCalculator.Contract.contract.Transact(opts, method, params...) +} + +// CalculateOperatorTable is a free data retrieval call binding the contract method 0x124c87e0. +// +// Solidity: function calculateOperatorTable((address,uint32) operatorSet) view returns((bytes32,uint256,(uint256,uint256),uint256[]) operatorSetInfo) +func (_IBN254TableCalculator *IBN254TableCalculatorCaller) CalculateOperatorTable(opts *bind.CallOpts, operatorSet OperatorSet) (IBN254TableCalculatorTypesBN254OperatorSetInfo, error) { + var out []interface{} + err := _IBN254TableCalculator.contract.Call(opts, &out, "calculateOperatorTable", operatorSet) + + if err != nil { + return *new(IBN254TableCalculatorTypesBN254OperatorSetInfo), err + } + + out0 := *abi.ConvertType(out[0], new(IBN254TableCalculatorTypesBN254OperatorSetInfo)).(*IBN254TableCalculatorTypesBN254OperatorSetInfo) + + return out0, err + +} + +// CalculateOperatorTable is a free data retrieval call binding the contract method 0x124c87e0. +// +// Solidity: function calculateOperatorTable((address,uint32) operatorSet) view returns((bytes32,uint256,(uint256,uint256),uint256[]) operatorSetInfo) +func (_IBN254TableCalculator *IBN254TableCalculatorSession) CalculateOperatorTable(operatorSet OperatorSet) (IBN254TableCalculatorTypesBN254OperatorSetInfo, error) { + return _IBN254TableCalculator.Contract.CalculateOperatorTable(&_IBN254TableCalculator.CallOpts, operatorSet) +} + +// CalculateOperatorTable is a free data retrieval call binding the contract method 0x124c87e0. +// +// Solidity: function calculateOperatorTable((address,uint32) operatorSet) view returns((bytes32,uint256,(uint256,uint256),uint256[]) operatorSetInfo) +func (_IBN254TableCalculator *IBN254TableCalculatorCallerSession) CalculateOperatorTable(operatorSet OperatorSet) (IBN254TableCalculatorTypesBN254OperatorSetInfo, error) { + return _IBN254TableCalculator.Contract.CalculateOperatorTable(&_IBN254TableCalculator.CallOpts, operatorSet) +} + +// CalculateOperatorTableBytes is a free data retrieval call binding the contract method 0x41ee6d0e. +// +// Solidity: function calculateOperatorTableBytes((address,uint32) operatorSet) view returns(bytes operatorTableBytes) +func (_IBN254TableCalculator *IBN254TableCalculatorCaller) CalculateOperatorTableBytes(opts *bind.CallOpts, operatorSet OperatorSet) ([]byte, error) { + var out []interface{} + err := _IBN254TableCalculator.contract.Call(opts, &out, "calculateOperatorTableBytes", operatorSet) + + if err != nil { + return *new([]byte), err + } + + out0 := *abi.ConvertType(out[0], new([]byte)).(*[]byte) + + return out0, err + +} + +// CalculateOperatorTableBytes is a free data retrieval call binding the contract method 0x41ee6d0e. +// +// Solidity: function calculateOperatorTableBytes((address,uint32) operatorSet) view returns(bytes operatorTableBytes) +func (_IBN254TableCalculator *IBN254TableCalculatorSession) CalculateOperatorTableBytes(operatorSet OperatorSet) ([]byte, error) { + return _IBN254TableCalculator.Contract.CalculateOperatorTableBytes(&_IBN254TableCalculator.CallOpts, operatorSet) +} + +// CalculateOperatorTableBytes is a free data retrieval call binding the contract method 0x41ee6d0e. +// +// Solidity: function calculateOperatorTableBytes((address,uint32) operatorSet) view returns(bytes operatorTableBytes) +func (_IBN254TableCalculator *IBN254TableCalculatorCallerSession) CalculateOperatorTableBytes(operatorSet OperatorSet) ([]byte, error) { + return _IBN254TableCalculator.Contract.CalculateOperatorTableBytes(&_IBN254TableCalculator.CallOpts, operatorSet) +} + +// GetOperatorInfos is a free data retrieval call binding the contract method 0xcf2d90ef. +// +// Solidity: function getOperatorInfos((address,uint32) operatorSet) view returns(((uint256,uint256),uint256[])[] operatorInfos) +func (_IBN254TableCalculator *IBN254TableCalculatorCaller) GetOperatorInfos(opts *bind.CallOpts, operatorSet OperatorSet) ([]IBN254TableCalculatorTypesBN254OperatorInfo, error) { + var out []interface{} + err := _IBN254TableCalculator.contract.Call(opts, &out, "getOperatorInfos", operatorSet) + + if err != nil { + return *new([]IBN254TableCalculatorTypesBN254OperatorInfo), err + } + + out0 := *abi.ConvertType(out[0], new([]IBN254TableCalculatorTypesBN254OperatorInfo)).(*[]IBN254TableCalculatorTypesBN254OperatorInfo) + + return out0, err + +} + +// GetOperatorInfos is a free data retrieval call binding the contract method 0xcf2d90ef. +// +// Solidity: function getOperatorInfos((address,uint32) operatorSet) view returns(((uint256,uint256),uint256[])[] operatorInfos) +func (_IBN254TableCalculator *IBN254TableCalculatorSession) GetOperatorInfos(operatorSet OperatorSet) ([]IBN254TableCalculatorTypesBN254OperatorInfo, error) { + return _IBN254TableCalculator.Contract.GetOperatorInfos(&_IBN254TableCalculator.CallOpts, operatorSet) +} + +// GetOperatorInfos is a free data retrieval call binding the contract method 0xcf2d90ef. +// +// Solidity: function getOperatorInfos((address,uint32) operatorSet) view returns(((uint256,uint256),uint256[])[] operatorInfos) +func (_IBN254TableCalculator *IBN254TableCalculatorCallerSession) GetOperatorInfos(operatorSet OperatorSet) ([]IBN254TableCalculatorTypesBN254OperatorInfo, error) { + return _IBN254TableCalculator.Contract.GetOperatorInfos(&_IBN254TableCalculator.CallOpts, operatorSet) +} diff --git a/pkg/bindings/IBaseCertificateVerifier/binding.go b/pkg/bindings/IBaseCertificateVerifier/binding.go new file mode 100644 index 0000000000..7741a5c5f0 --- /dev/null +++ b/pkg/bindings/IBaseCertificateVerifier/binding.go @@ -0,0 +1,520 @@ +// Code generated - DO NOT EDIT. +// This file is a generated binding and any manual changes will be lost. + +package IBaseCertificateVerifier + +import ( + "errors" + "math/big" + "strings" + + ethereum "github.com/ethereum/go-ethereum" + "github.com/ethereum/go-ethereum/accounts/abi" + "github.com/ethereum/go-ethereum/accounts/abi/bind" + "github.com/ethereum/go-ethereum/common" + "github.com/ethereum/go-ethereum/core/types" + "github.com/ethereum/go-ethereum/event" +) + +// Reference imports to suppress errors if they are not otherwise used. +var ( + _ = errors.New + _ = big.NewInt + _ = strings.NewReader + _ = ethereum.NotFound + _ = bind.Bind + _ = common.Big1 + _ = types.BloomLookup + _ = event.NewSubscription + _ = abi.ConvertType +) + +// OperatorSet is an auto generated low-level Go binding around an user-defined struct. +type OperatorSet struct { + Avs common.Address + Id uint32 +} + +// IBaseCertificateVerifierMetaData contains all meta data concerning the IBaseCertificateVerifier contract. +var IBaseCertificateVerifierMetaData = &bind.MetaData{ + ABI: "[{\"type\":\"function\",\"name\":\"getOperatorSetOwner\",\"inputs\":[{\"name\":\"operatorSet\",\"type\":\"tuple\",\"internalType\":\"structOperatorSet\",\"components\":[{\"name\":\"avs\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"id\",\"type\":\"uint32\",\"internalType\":\"uint32\"}]}],\"outputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"address\"}],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"latestReferenceTimestamp\",\"inputs\":[{\"name\":\"operatorSet\",\"type\":\"tuple\",\"internalType\":\"structOperatorSet\",\"components\":[{\"name\":\"avs\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"id\",\"type\":\"uint32\",\"internalType\":\"uint32\"}]}],\"outputs\":[{\"name\":\"\",\"type\":\"uint32\",\"internalType\":\"uint32\"}],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"maxOperatorTableStaleness\",\"inputs\":[{\"name\":\"operatorSet\",\"type\":\"tuple\",\"internalType\":\"structOperatorSet\",\"components\":[{\"name\":\"avs\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"id\",\"type\":\"uint32\",\"internalType\":\"uint32\"}]}],\"outputs\":[{\"name\":\"\",\"type\":\"uint32\",\"internalType\":\"uint32\"}],\"stateMutability\":\"nonpayable\"},{\"type\":\"event\",\"name\":\"MaxStalenessPeriodUpdated\",\"inputs\":[{\"name\":\"operatorSet\",\"type\":\"tuple\",\"indexed\":false,\"internalType\":\"structOperatorSet\",\"components\":[{\"name\":\"avs\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"id\",\"type\":\"uint32\",\"internalType\":\"uint32\"}]},{\"name\":\"maxStalenessPeriod\",\"type\":\"uint32\",\"indexed\":false,\"internalType\":\"uint32\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"OperatorSetOwnerUpdated\",\"inputs\":[{\"name\":\"operatorSet\",\"type\":\"tuple\",\"indexed\":false,\"internalType\":\"structOperatorSet\",\"components\":[{\"name\":\"avs\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"id\",\"type\":\"uint32\",\"internalType\":\"uint32\"}]},{\"name\":\"owner\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"}],\"anonymous\":false},{\"type\":\"error\",\"name\":\"ArrayLengthMismatch\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"CertificateStale\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"OnlyTableUpdater\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"ReferenceTimestampDoesNotExist\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"TableUpdateStale\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"VerificationFailed\",\"inputs\":[]}]", +} + +// IBaseCertificateVerifierABI is the input ABI used to generate the binding from. +// Deprecated: Use IBaseCertificateVerifierMetaData.ABI instead. +var IBaseCertificateVerifierABI = IBaseCertificateVerifierMetaData.ABI + +// IBaseCertificateVerifier is an auto generated Go binding around an Ethereum contract. +type IBaseCertificateVerifier struct { + IBaseCertificateVerifierCaller // Read-only binding to the contract + IBaseCertificateVerifierTransactor // Write-only binding to the contract + IBaseCertificateVerifierFilterer // Log filterer for contract events +} + +// IBaseCertificateVerifierCaller is an auto generated read-only Go binding around an Ethereum contract. +type IBaseCertificateVerifierCaller struct { + contract *bind.BoundContract // Generic contract wrapper for the low level calls +} + +// IBaseCertificateVerifierTransactor is an auto generated write-only Go binding around an Ethereum contract. +type IBaseCertificateVerifierTransactor struct { + contract *bind.BoundContract // Generic contract wrapper for the low level calls +} + +// IBaseCertificateVerifierFilterer is an auto generated log filtering Go binding around an Ethereum contract events. +type IBaseCertificateVerifierFilterer struct { + contract *bind.BoundContract // Generic contract wrapper for the low level calls +} + +// IBaseCertificateVerifierSession is an auto generated Go binding around an Ethereum contract, +// with pre-set call and transact options. +type IBaseCertificateVerifierSession struct { + Contract *IBaseCertificateVerifier // Generic contract binding to set the session for + CallOpts bind.CallOpts // Call options to use throughout this session + TransactOpts bind.TransactOpts // Transaction auth options to use throughout this session +} + +// IBaseCertificateVerifierCallerSession is an auto generated read-only Go binding around an Ethereum contract, +// with pre-set call options. +type IBaseCertificateVerifierCallerSession struct { + Contract *IBaseCertificateVerifierCaller // Generic contract caller binding to set the session for + CallOpts bind.CallOpts // Call options to use throughout this session +} + +// IBaseCertificateVerifierTransactorSession is an auto generated write-only Go binding around an Ethereum contract, +// with pre-set transact options. +type IBaseCertificateVerifierTransactorSession struct { + Contract *IBaseCertificateVerifierTransactor // Generic contract transactor binding to set the session for + TransactOpts bind.TransactOpts // Transaction auth options to use throughout this session +} + +// IBaseCertificateVerifierRaw is an auto generated low-level Go binding around an Ethereum contract. +type IBaseCertificateVerifierRaw struct { + Contract *IBaseCertificateVerifier // Generic contract binding to access the raw methods on +} + +// IBaseCertificateVerifierCallerRaw is an auto generated low-level read-only Go binding around an Ethereum contract. +type IBaseCertificateVerifierCallerRaw struct { + Contract *IBaseCertificateVerifierCaller // Generic read-only contract binding to access the raw methods on +} + +// IBaseCertificateVerifierTransactorRaw is an auto generated low-level write-only Go binding around an Ethereum contract. +type IBaseCertificateVerifierTransactorRaw struct { + Contract *IBaseCertificateVerifierTransactor // Generic write-only contract binding to access the raw methods on +} + +// NewIBaseCertificateVerifier creates a new instance of IBaseCertificateVerifier, bound to a specific deployed contract. +func NewIBaseCertificateVerifier(address common.Address, backend bind.ContractBackend) (*IBaseCertificateVerifier, error) { + contract, err := bindIBaseCertificateVerifier(address, backend, backend, backend) + if err != nil { + return nil, err + } + return &IBaseCertificateVerifier{IBaseCertificateVerifierCaller: IBaseCertificateVerifierCaller{contract: contract}, IBaseCertificateVerifierTransactor: IBaseCertificateVerifierTransactor{contract: contract}, IBaseCertificateVerifierFilterer: IBaseCertificateVerifierFilterer{contract: contract}}, nil +} + +// NewIBaseCertificateVerifierCaller creates a new read-only instance of IBaseCertificateVerifier, bound to a specific deployed contract. +func NewIBaseCertificateVerifierCaller(address common.Address, caller bind.ContractCaller) (*IBaseCertificateVerifierCaller, error) { + contract, err := bindIBaseCertificateVerifier(address, caller, nil, nil) + if err != nil { + return nil, err + } + return &IBaseCertificateVerifierCaller{contract: contract}, nil +} + +// NewIBaseCertificateVerifierTransactor creates a new write-only instance of IBaseCertificateVerifier, bound to a specific deployed contract. +func NewIBaseCertificateVerifierTransactor(address common.Address, transactor bind.ContractTransactor) (*IBaseCertificateVerifierTransactor, error) { + contract, err := bindIBaseCertificateVerifier(address, nil, transactor, nil) + if err != nil { + return nil, err + } + return &IBaseCertificateVerifierTransactor{contract: contract}, nil +} + +// NewIBaseCertificateVerifierFilterer creates a new log filterer instance of IBaseCertificateVerifier, bound to a specific deployed contract. +func NewIBaseCertificateVerifierFilterer(address common.Address, filterer bind.ContractFilterer) (*IBaseCertificateVerifierFilterer, error) { + contract, err := bindIBaseCertificateVerifier(address, nil, nil, filterer) + if err != nil { + return nil, err + } + return &IBaseCertificateVerifierFilterer{contract: contract}, nil +} + +// bindIBaseCertificateVerifier binds a generic wrapper to an already deployed contract. +func bindIBaseCertificateVerifier(address common.Address, caller bind.ContractCaller, transactor bind.ContractTransactor, filterer bind.ContractFilterer) (*bind.BoundContract, error) { + parsed, err := IBaseCertificateVerifierMetaData.GetAbi() + if err != nil { + return nil, err + } + return bind.NewBoundContract(address, *parsed, caller, transactor, filterer), nil +} + +// Call invokes the (constant) contract method with params as input values and +// sets the output to result. The result type might be a single field for simple +// returns, a slice of interfaces for anonymous returns and a struct for named +// returns. +func (_IBaseCertificateVerifier *IBaseCertificateVerifierRaw) Call(opts *bind.CallOpts, result *[]interface{}, method string, params ...interface{}) error { + return _IBaseCertificateVerifier.Contract.IBaseCertificateVerifierCaller.contract.Call(opts, result, method, params...) +} + +// Transfer initiates a plain transaction to move funds to the contract, calling +// its default method if one is available. +func (_IBaseCertificateVerifier *IBaseCertificateVerifierRaw) Transfer(opts *bind.TransactOpts) (*types.Transaction, error) { + return _IBaseCertificateVerifier.Contract.IBaseCertificateVerifierTransactor.contract.Transfer(opts) +} + +// Transact invokes the (paid) contract method with params as input values. +func (_IBaseCertificateVerifier *IBaseCertificateVerifierRaw) Transact(opts *bind.TransactOpts, method string, params ...interface{}) (*types.Transaction, error) { + return _IBaseCertificateVerifier.Contract.IBaseCertificateVerifierTransactor.contract.Transact(opts, method, params...) +} + +// Call invokes the (constant) contract method with params as input values and +// sets the output to result. The result type might be a single field for simple +// returns, a slice of interfaces for anonymous returns and a struct for named +// returns. +func (_IBaseCertificateVerifier *IBaseCertificateVerifierCallerRaw) Call(opts *bind.CallOpts, result *[]interface{}, method string, params ...interface{}) error { + return _IBaseCertificateVerifier.Contract.contract.Call(opts, result, method, params...) +} + +// Transfer initiates a plain transaction to move funds to the contract, calling +// its default method if one is available. +func (_IBaseCertificateVerifier *IBaseCertificateVerifierTransactorRaw) Transfer(opts *bind.TransactOpts) (*types.Transaction, error) { + return _IBaseCertificateVerifier.Contract.contract.Transfer(opts) +} + +// Transact invokes the (paid) contract method with params as input values. +func (_IBaseCertificateVerifier *IBaseCertificateVerifierTransactorRaw) Transact(opts *bind.TransactOpts, method string, params ...interface{}) (*types.Transaction, error) { + return _IBaseCertificateVerifier.Contract.contract.Transact(opts, method, params...) +} + +// GetOperatorSetOwner is a paid mutator transaction binding the contract method 0x84818920. +// +// Solidity: function getOperatorSetOwner((address,uint32) operatorSet) returns(address) +func (_IBaseCertificateVerifier *IBaseCertificateVerifierTransactor) GetOperatorSetOwner(opts *bind.TransactOpts, operatorSet OperatorSet) (*types.Transaction, error) { + return _IBaseCertificateVerifier.contract.Transact(opts, "getOperatorSetOwner", operatorSet) +} + +// GetOperatorSetOwner is a paid mutator transaction binding the contract method 0x84818920. +// +// Solidity: function getOperatorSetOwner((address,uint32) operatorSet) returns(address) +func (_IBaseCertificateVerifier *IBaseCertificateVerifierSession) GetOperatorSetOwner(operatorSet OperatorSet) (*types.Transaction, error) { + return _IBaseCertificateVerifier.Contract.GetOperatorSetOwner(&_IBaseCertificateVerifier.TransactOpts, operatorSet) +} + +// GetOperatorSetOwner is a paid mutator transaction binding the contract method 0x84818920. +// +// Solidity: function getOperatorSetOwner((address,uint32) operatorSet) returns(address) +func (_IBaseCertificateVerifier *IBaseCertificateVerifierTransactorSession) GetOperatorSetOwner(operatorSet OperatorSet) (*types.Transaction, error) { + return _IBaseCertificateVerifier.Contract.GetOperatorSetOwner(&_IBaseCertificateVerifier.TransactOpts, operatorSet) +} + +// LatestReferenceTimestamp is a paid mutator transaction binding the contract method 0x5ddb9b5b. +// +// Solidity: function latestReferenceTimestamp((address,uint32) operatorSet) returns(uint32) +func (_IBaseCertificateVerifier *IBaseCertificateVerifierTransactor) LatestReferenceTimestamp(opts *bind.TransactOpts, operatorSet OperatorSet) (*types.Transaction, error) { + return _IBaseCertificateVerifier.contract.Transact(opts, "latestReferenceTimestamp", operatorSet) +} + +// LatestReferenceTimestamp is a paid mutator transaction binding the contract method 0x5ddb9b5b. +// +// Solidity: function latestReferenceTimestamp((address,uint32) operatorSet) returns(uint32) +func (_IBaseCertificateVerifier *IBaseCertificateVerifierSession) LatestReferenceTimestamp(operatorSet OperatorSet) (*types.Transaction, error) { + return _IBaseCertificateVerifier.Contract.LatestReferenceTimestamp(&_IBaseCertificateVerifier.TransactOpts, operatorSet) +} + +// LatestReferenceTimestamp is a paid mutator transaction binding the contract method 0x5ddb9b5b. +// +// Solidity: function latestReferenceTimestamp((address,uint32) operatorSet) returns(uint32) +func (_IBaseCertificateVerifier *IBaseCertificateVerifierTransactorSession) LatestReferenceTimestamp(operatorSet OperatorSet) (*types.Transaction, error) { + return _IBaseCertificateVerifier.Contract.LatestReferenceTimestamp(&_IBaseCertificateVerifier.TransactOpts, operatorSet) +} + +// MaxOperatorTableStaleness is a paid mutator transaction binding the contract method 0x6141879e. +// +// Solidity: function maxOperatorTableStaleness((address,uint32) operatorSet) returns(uint32) +func (_IBaseCertificateVerifier *IBaseCertificateVerifierTransactor) MaxOperatorTableStaleness(opts *bind.TransactOpts, operatorSet OperatorSet) (*types.Transaction, error) { + return _IBaseCertificateVerifier.contract.Transact(opts, "maxOperatorTableStaleness", operatorSet) +} + +// MaxOperatorTableStaleness is a paid mutator transaction binding the contract method 0x6141879e. +// +// Solidity: function maxOperatorTableStaleness((address,uint32) operatorSet) returns(uint32) +func (_IBaseCertificateVerifier *IBaseCertificateVerifierSession) MaxOperatorTableStaleness(operatorSet OperatorSet) (*types.Transaction, error) { + return _IBaseCertificateVerifier.Contract.MaxOperatorTableStaleness(&_IBaseCertificateVerifier.TransactOpts, operatorSet) +} + +// MaxOperatorTableStaleness is a paid mutator transaction binding the contract method 0x6141879e. +// +// Solidity: function maxOperatorTableStaleness((address,uint32) operatorSet) returns(uint32) +func (_IBaseCertificateVerifier *IBaseCertificateVerifierTransactorSession) MaxOperatorTableStaleness(operatorSet OperatorSet) (*types.Transaction, error) { + return _IBaseCertificateVerifier.Contract.MaxOperatorTableStaleness(&_IBaseCertificateVerifier.TransactOpts, operatorSet) +} + +// IBaseCertificateVerifierMaxStalenessPeriodUpdatedIterator is returned from FilterMaxStalenessPeriodUpdated and is used to iterate over the raw logs and unpacked data for MaxStalenessPeriodUpdated events raised by the IBaseCertificateVerifier contract. +type IBaseCertificateVerifierMaxStalenessPeriodUpdatedIterator struct { + Event *IBaseCertificateVerifierMaxStalenessPeriodUpdated // 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 *IBaseCertificateVerifierMaxStalenessPeriodUpdatedIterator) 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(IBaseCertificateVerifierMaxStalenessPeriodUpdated) + 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(IBaseCertificateVerifierMaxStalenessPeriodUpdated) + 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 *IBaseCertificateVerifierMaxStalenessPeriodUpdatedIterator) Error() error { + return it.fail +} + +// Close terminates the iteration process, releasing any pending underlying +// resources. +func (it *IBaseCertificateVerifierMaxStalenessPeriodUpdatedIterator) Close() error { + it.sub.Unsubscribe() + return nil +} + +// IBaseCertificateVerifierMaxStalenessPeriodUpdated represents a MaxStalenessPeriodUpdated event raised by the IBaseCertificateVerifier contract. +type IBaseCertificateVerifierMaxStalenessPeriodUpdated struct { + OperatorSet OperatorSet + MaxStalenessPeriod uint32 + Raw types.Log // Blockchain specific contextual infos +} + +// FilterMaxStalenessPeriodUpdated is a free log retrieval operation binding the contract event 0x28539469fbbc8a5482e60966bf9376f7b9d25b2f0a65a9976f6baa3f0e3788da. +// +// Solidity: event MaxStalenessPeriodUpdated((address,uint32) operatorSet, uint32 maxStalenessPeriod) +func (_IBaseCertificateVerifier *IBaseCertificateVerifierFilterer) FilterMaxStalenessPeriodUpdated(opts *bind.FilterOpts) (*IBaseCertificateVerifierMaxStalenessPeriodUpdatedIterator, error) { + + logs, sub, err := _IBaseCertificateVerifier.contract.FilterLogs(opts, "MaxStalenessPeriodUpdated") + if err != nil { + return nil, err + } + return &IBaseCertificateVerifierMaxStalenessPeriodUpdatedIterator{contract: _IBaseCertificateVerifier.contract, event: "MaxStalenessPeriodUpdated", logs: logs, sub: sub}, nil +} + +// WatchMaxStalenessPeriodUpdated is a free log subscription operation binding the contract event 0x28539469fbbc8a5482e60966bf9376f7b9d25b2f0a65a9976f6baa3f0e3788da. +// +// Solidity: event MaxStalenessPeriodUpdated((address,uint32) operatorSet, uint32 maxStalenessPeriod) +func (_IBaseCertificateVerifier *IBaseCertificateVerifierFilterer) WatchMaxStalenessPeriodUpdated(opts *bind.WatchOpts, sink chan<- *IBaseCertificateVerifierMaxStalenessPeriodUpdated) (event.Subscription, error) { + + logs, sub, err := _IBaseCertificateVerifier.contract.WatchLogs(opts, "MaxStalenessPeriodUpdated") + 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(IBaseCertificateVerifierMaxStalenessPeriodUpdated) + if err := _IBaseCertificateVerifier.contract.UnpackLog(event, "MaxStalenessPeriodUpdated", 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 +} + +// ParseMaxStalenessPeriodUpdated is a log parse operation binding the contract event 0x28539469fbbc8a5482e60966bf9376f7b9d25b2f0a65a9976f6baa3f0e3788da. +// +// Solidity: event MaxStalenessPeriodUpdated((address,uint32) operatorSet, uint32 maxStalenessPeriod) +func (_IBaseCertificateVerifier *IBaseCertificateVerifierFilterer) ParseMaxStalenessPeriodUpdated(log types.Log) (*IBaseCertificateVerifierMaxStalenessPeriodUpdated, error) { + event := new(IBaseCertificateVerifierMaxStalenessPeriodUpdated) + if err := _IBaseCertificateVerifier.contract.UnpackLog(event, "MaxStalenessPeriodUpdated", log); err != nil { + return nil, err + } + event.Raw = log + return event, nil +} + +// IBaseCertificateVerifierOperatorSetOwnerUpdatedIterator is returned from FilterOperatorSetOwnerUpdated and is used to iterate over the raw logs and unpacked data for OperatorSetOwnerUpdated events raised by the IBaseCertificateVerifier contract. +type IBaseCertificateVerifierOperatorSetOwnerUpdatedIterator struct { + Event *IBaseCertificateVerifierOperatorSetOwnerUpdated // 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 *IBaseCertificateVerifierOperatorSetOwnerUpdatedIterator) 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(IBaseCertificateVerifierOperatorSetOwnerUpdated) + 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(IBaseCertificateVerifierOperatorSetOwnerUpdated) + 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 *IBaseCertificateVerifierOperatorSetOwnerUpdatedIterator) Error() error { + return it.fail +} + +// Close terminates the iteration process, releasing any pending underlying +// resources. +func (it *IBaseCertificateVerifierOperatorSetOwnerUpdatedIterator) Close() error { + it.sub.Unsubscribe() + return nil +} + +// IBaseCertificateVerifierOperatorSetOwnerUpdated represents a OperatorSetOwnerUpdated event raised by the IBaseCertificateVerifier contract. +type IBaseCertificateVerifierOperatorSetOwnerUpdated struct { + OperatorSet OperatorSet + Owner common.Address + Raw types.Log // Blockchain specific contextual infos +} + +// FilterOperatorSetOwnerUpdated is a free log retrieval operation binding the contract event 0x806dc367095c0baf953d7144b7c4376261675ee0b4e0da2761e43673051c7375. +// +// Solidity: event OperatorSetOwnerUpdated((address,uint32) operatorSet, address owner) +func (_IBaseCertificateVerifier *IBaseCertificateVerifierFilterer) FilterOperatorSetOwnerUpdated(opts *bind.FilterOpts) (*IBaseCertificateVerifierOperatorSetOwnerUpdatedIterator, error) { + + logs, sub, err := _IBaseCertificateVerifier.contract.FilterLogs(opts, "OperatorSetOwnerUpdated") + if err != nil { + return nil, err + } + return &IBaseCertificateVerifierOperatorSetOwnerUpdatedIterator{contract: _IBaseCertificateVerifier.contract, event: "OperatorSetOwnerUpdated", logs: logs, sub: sub}, nil +} + +// WatchOperatorSetOwnerUpdated is a free log subscription operation binding the contract event 0x806dc367095c0baf953d7144b7c4376261675ee0b4e0da2761e43673051c7375. +// +// Solidity: event OperatorSetOwnerUpdated((address,uint32) operatorSet, address owner) +func (_IBaseCertificateVerifier *IBaseCertificateVerifierFilterer) WatchOperatorSetOwnerUpdated(opts *bind.WatchOpts, sink chan<- *IBaseCertificateVerifierOperatorSetOwnerUpdated) (event.Subscription, error) { + + logs, sub, err := _IBaseCertificateVerifier.contract.WatchLogs(opts, "OperatorSetOwnerUpdated") + 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(IBaseCertificateVerifierOperatorSetOwnerUpdated) + if err := _IBaseCertificateVerifier.contract.UnpackLog(event, "OperatorSetOwnerUpdated", 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 +} + +// ParseOperatorSetOwnerUpdated is a log parse operation binding the contract event 0x806dc367095c0baf953d7144b7c4376261675ee0b4e0da2761e43673051c7375. +// +// Solidity: event OperatorSetOwnerUpdated((address,uint32) operatorSet, address owner) +func (_IBaseCertificateVerifier *IBaseCertificateVerifierFilterer) ParseOperatorSetOwnerUpdated(log types.Log) (*IBaseCertificateVerifierOperatorSetOwnerUpdated, error) { + event := new(IBaseCertificateVerifierOperatorSetOwnerUpdated) + if err := _IBaseCertificateVerifier.contract.UnpackLog(event, "OperatorSetOwnerUpdated", log); err != nil { + return nil, err + } + event.Raw = log + return event, nil +} diff --git a/pkg/bindings/ICrossChainRegistry/binding.go b/pkg/bindings/ICrossChainRegistry/binding.go new file mode 100644 index 0000000000..e0662e62a3 --- /dev/null +++ b/pkg/bindings/ICrossChainRegistry/binding.go @@ -0,0 +1,1246 @@ +// Code generated - DO NOT EDIT. +// This file is a generated binding and any manual changes will be lost. + +package ICrossChainRegistry + +import ( + "errors" + "math/big" + "strings" + + ethereum "github.com/ethereum/go-ethereum" + "github.com/ethereum/go-ethereum/accounts/abi" + "github.com/ethereum/go-ethereum/accounts/abi/bind" + "github.com/ethereum/go-ethereum/common" + "github.com/ethereum/go-ethereum/core/types" + "github.com/ethereum/go-ethereum/event" +) + +// Reference imports to suppress errors if they are not otherwise used. +var ( + _ = errors.New + _ = big.NewInt + _ = strings.NewReader + _ = ethereum.NotFound + _ = bind.Bind + _ = common.Big1 + _ = types.BloomLookup + _ = event.NewSubscription + _ = abi.ConvertType +) + +// OperatorSet is an auto generated low-level Go binding around an user-defined struct. +type OperatorSet struct { + Avs common.Address + Id uint32 +} + +// ICrossChainRegistryMetaData contains all meta data concerning the ICrossChainRegistry contract. +var ICrossChainRegistryMetaData = &bind.MetaData{ + ABI: "[{\"type\":\"function\",\"name\":\"addChainIDToWhitelist\",\"inputs\":[{\"name\":\"chainID\",\"type\":\"uint32\",\"internalType\":\"uint32\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"addTransportDestination\",\"inputs\":[{\"name\":\"operatorSet\",\"type\":\"tuple\",\"internalType\":\"structOperatorSet\",\"components\":[{\"name\":\"avs\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"id\",\"type\":\"uint32\",\"internalType\":\"uint32\"}]},{\"name\":\"chainID\",\"type\":\"uint32\",\"internalType\":\"uint32\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"getActiveGenerationReservations\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"tuple[]\",\"internalType\":\"structOperatorSet[]\",\"components\":[{\"name\":\"avs\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"id\",\"type\":\"uint32\",\"internalType\":\"uint32\"}]},{\"name\":\"\",\"type\":\"address[]\",\"internalType\":\"contractIOperatorTableCalculator[]\"}],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"getOperatorTableCalculator\",\"inputs\":[{\"name\":\"operatorSet\",\"type\":\"tuple\",\"internalType\":\"structOperatorSet\",\"components\":[{\"name\":\"avs\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"id\",\"type\":\"uint32\",\"internalType\":\"uint32\"}]}],\"outputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"contractIOperatorTableCalculator\"}],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"getSupportedChains\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"uint32[]\",\"internalType\":\"uint32[]\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"getTransportDestinations\",\"inputs\":[{\"name\":\"operatorSet\",\"type\":\"tuple\",\"internalType\":\"structOperatorSet\",\"components\":[{\"name\":\"avs\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"id\",\"type\":\"uint32\",\"internalType\":\"uint32\"}]}],\"outputs\":[{\"name\":\"\",\"type\":\"uint32[]\",\"internalType\":\"uint32[]\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"removeChainIDFromWhitelist\",\"inputs\":[{\"name\":\"chainID\",\"type\":\"uint32\",\"internalType\":\"uint32\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"removeGenerationReservation\",\"inputs\":[{\"name\":\"operatorSet\",\"type\":\"tuple\",\"internalType\":\"structOperatorSet\",\"components\":[{\"name\":\"avs\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"id\",\"type\":\"uint32\",\"internalType\":\"uint32\"}]}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"removeTransportDestination\",\"inputs\":[{\"name\":\"operatorSet\",\"type\":\"tuple\",\"internalType\":\"structOperatorSet\",\"components\":[{\"name\":\"avs\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"id\",\"type\":\"uint32\",\"internalType\":\"uint32\"}]},{\"name\":\"chainID\",\"type\":\"uint32\",\"internalType\":\"uint32\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"requestGenerationReservation\",\"inputs\":[{\"name\":\"operatorSet\",\"type\":\"tuple\",\"internalType\":\"structOperatorSet\",\"components\":[{\"name\":\"avs\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"id\",\"type\":\"uint32\",\"internalType\":\"uint32\"}]},{\"name\":\"operatorTableCalculator\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"setOperatorTableCalculator\",\"inputs\":[{\"name\":\"operatorSet\",\"type\":\"tuple\",\"internalType\":\"structOperatorSet\",\"components\":[{\"name\":\"avs\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"id\",\"type\":\"uint32\",\"internalType\":\"uint32\"}]},{\"name\":\"calculator\",\"type\":\"address\",\"internalType\":\"contractIOperatorTableCalculator\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"event\",\"name\":\"ChainIDAddedToWhitelist\",\"inputs\":[{\"name\":\"chainID\",\"type\":\"uint32\",\"indexed\":false,\"internalType\":\"uint32\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"ChainIDRemovedFromWhitelist\",\"inputs\":[{\"name\":\"chainID\",\"type\":\"uint32\",\"indexed\":false,\"internalType\":\"uint32\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"GenerationReservationMade\",\"inputs\":[{\"name\":\"operatorSet\",\"type\":\"tuple\",\"indexed\":false,\"internalType\":\"structOperatorSet\",\"components\":[{\"name\":\"avs\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"id\",\"type\":\"uint32\",\"internalType\":\"uint32\"}]},{\"name\":\"operatorTableCalculator\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"contractIOperatorTableCalculator\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"GenerationReservationRemoved\",\"inputs\":[{\"name\":\"operatorSet\",\"type\":\"tuple\",\"indexed\":false,\"internalType\":\"structOperatorSet\",\"components\":[{\"name\":\"avs\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"id\",\"type\":\"uint32\",\"internalType\":\"uint32\"}]},{\"name\":\"operatorTableCalculator\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"contractIOperatorTableCalculator\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"TransportDestinationAdded\",\"inputs\":[{\"name\":\"operatorSet\",\"type\":\"tuple\",\"indexed\":false,\"internalType\":\"structOperatorSet\",\"components\":[{\"name\":\"avs\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"id\",\"type\":\"uint32\",\"internalType\":\"uint32\"}]},{\"name\":\"chainID\",\"type\":\"uint32\",\"indexed\":false,\"internalType\":\"uint32\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"TransportDestinationRemoved\",\"inputs\":[{\"name\":\"operatorSet\",\"type\":\"tuple\",\"indexed\":false,\"internalType\":\"structOperatorSet\",\"components\":[{\"name\":\"avs\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"id\",\"type\":\"uint32\",\"internalType\":\"uint32\"}]},{\"name\":\"chainID\",\"type\":\"uint32\",\"indexed\":false,\"internalType\":\"uint32\"}],\"anonymous\":false},{\"type\":\"error\",\"name\":\"InvalidChainId\",\"inputs\":[]}]", +} + +// ICrossChainRegistryABI is the input ABI used to generate the binding from. +// Deprecated: Use ICrossChainRegistryMetaData.ABI instead. +var ICrossChainRegistryABI = ICrossChainRegistryMetaData.ABI + +// ICrossChainRegistry is an auto generated Go binding around an Ethereum contract. +type ICrossChainRegistry struct { + ICrossChainRegistryCaller // Read-only binding to the contract + ICrossChainRegistryTransactor // Write-only binding to the contract + ICrossChainRegistryFilterer // Log filterer for contract events +} + +// ICrossChainRegistryCaller is an auto generated read-only Go binding around an Ethereum contract. +type ICrossChainRegistryCaller struct { + contract *bind.BoundContract // Generic contract wrapper for the low level calls +} + +// ICrossChainRegistryTransactor is an auto generated write-only Go binding around an Ethereum contract. +type ICrossChainRegistryTransactor struct { + contract *bind.BoundContract // Generic contract wrapper for the low level calls +} + +// ICrossChainRegistryFilterer is an auto generated log filtering Go binding around an Ethereum contract events. +type ICrossChainRegistryFilterer struct { + contract *bind.BoundContract // Generic contract wrapper for the low level calls +} + +// ICrossChainRegistrySession is an auto generated Go binding around an Ethereum contract, +// with pre-set call and transact options. +type ICrossChainRegistrySession struct { + Contract *ICrossChainRegistry // Generic contract binding to set the session for + CallOpts bind.CallOpts // Call options to use throughout this session + TransactOpts bind.TransactOpts // Transaction auth options to use throughout this session +} + +// ICrossChainRegistryCallerSession is an auto generated read-only Go binding around an Ethereum contract, +// with pre-set call options. +type ICrossChainRegistryCallerSession struct { + Contract *ICrossChainRegistryCaller // Generic contract caller binding to set the session for + CallOpts bind.CallOpts // Call options to use throughout this session +} + +// ICrossChainRegistryTransactorSession is an auto generated write-only Go binding around an Ethereum contract, +// with pre-set transact options. +type ICrossChainRegistryTransactorSession struct { + Contract *ICrossChainRegistryTransactor // Generic contract transactor binding to set the session for + TransactOpts bind.TransactOpts // Transaction auth options to use throughout this session +} + +// ICrossChainRegistryRaw is an auto generated low-level Go binding around an Ethereum contract. +type ICrossChainRegistryRaw struct { + Contract *ICrossChainRegistry // Generic contract binding to access the raw methods on +} + +// ICrossChainRegistryCallerRaw is an auto generated low-level read-only Go binding around an Ethereum contract. +type ICrossChainRegistryCallerRaw struct { + Contract *ICrossChainRegistryCaller // Generic read-only contract binding to access the raw methods on +} + +// ICrossChainRegistryTransactorRaw is an auto generated low-level write-only Go binding around an Ethereum contract. +type ICrossChainRegistryTransactorRaw struct { + Contract *ICrossChainRegistryTransactor // Generic write-only contract binding to access the raw methods on +} + +// NewICrossChainRegistry creates a new instance of ICrossChainRegistry, bound to a specific deployed contract. +func NewICrossChainRegistry(address common.Address, backend bind.ContractBackend) (*ICrossChainRegistry, error) { + contract, err := bindICrossChainRegistry(address, backend, backend, backend) + if err != nil { + return nil, err + } + return &ICrossChainRegistry{ICrossChainRegistryCaller: ICrossChainRegistryCaller{contract: contract}, ICrossChainRegistryTransactor: ICrossChainRegistryTransactor{contract: contract}, ICrossChainRegistryFilterer: ICrossChainRegistryFilterer{contract: contract}}, nil +} + +// NewICrossChainRegistryCaller creates a new read-only instance of ICrossChainRegistry, bound to a specific deployed contract. +func NewICrossChainRegistryCaller(address common.Address, caller bind.ContractCaller) (*ICrossChainRegistryCaller, error) { + contract, err := bindICrossChainRegistry(address, caller, nil, nil) + if err != nil { + return nil, err + } + return &ICrossChainRegistryCaller{contract: contract}, nil +} + +// NewICrossChainRegistryTransactor creates a new write-only instance of ICrossChainRegistry, bound to a specific deployed contract. +func NewICrossChainRegistryTransactor(address common.Address, transactor bind.ContractTransactor) (*ICrossChainRegistryTransactor, error) { + contract, err := bindICrossChainRegistry(address, nil, transactor, nil) + if err != nil { + return nil, err + } + return &ICrossChainRegistryTransactor{contract: contract}, nil +} + +// NewICrossChainRegistryFilterer creates a new log filterer instance of ICrossChainRegistry, bound to a specific deployed contract. +func NewICrossChainRegistryFilterer(address common.Address, filterer bind.ContractFilterer) (*ICrossChainRegistryFilterer, error) { + contract, err := bindICrossChainRegistry(address, nil, nil, filterer) + if err != nil { + return nil, err + } + return &ICrossChainRegistryFilterer{contract: contract}, nil +} + +// bindICrossChainRegistry binds a generic wrapper to an already deployed contract. +func bindICrossChainRegistry(address common.Address, caller bind.ContractCaller, transactor bind.ContractTransactor, filterer bind.ContractFilterer) (*bind.BoundContract, error) { + parsed, err := ICrossChainRegistryMetaData.GetAbi() + if err != nil { + return nil, err + } + return bind.NewBoundContract(address, *parsed, caller, transactor, filterer), nil +} + +// Call invokes the (constant) contract method with params as input values and +// sets the output to result. The result type might be a single field for simple +// returns, a slice of interfaces for anonymous returns and a struct for named +// returns. +func (_ICrossChainRegistry *ICrossChainRegistryRaw) Call(opts *bind.CallOpts, result *[]interface{}, method string, params ...interface{}) error { + return _ICrossChainRegistry.Contract.ICrossChainRegistryCaller.contract.Call(opts, result, method, params...) +} + +// Transfer initiates a plain transaction to move funds to the contract, calling +// its default method if one is available. +func (_ICrossChainRegistry *ICrossChainRegistryRaw) Transfer(opts *bind.TransactOpts) (*types.Transaction, error) { + return _ICrossChainRegistry.Contract.ICrossChainRegistryTransactor.contract.Transfer(opts) +} + +// Transact invokes the (paid) contract method with params as input values. +func (_ICrossChainRegistry *ICrossChainRegistryRaw) Transact(opts *bind.TransactOpts, method string, params ...interface{}) (*types.Transaction, error) { + return _ICrossChainRegistry.Contract.ICrossChainRegistryTransactor.contract.Transact(opts, method, params...) +} + +// Call invokes the (constant) contract method with params as input values and +// sets the output to result. The result type might be a single field for simple +// returns, a slice of interfaces for anonymous returns and a struct for named +// returns. +func (_ICrossChainRegistry *ICrossChainRegistryCallerRaw) Call(opts *bind.CallOpts, result *[]interface{}, method string, params ...interface{}) error { + return _ICrossChainRegistry.Contract.contract.Call(opts, result, method, params...) +} + +// Transfer initiates a plain transaction to move funds to the contract, calling +// its default method if one is available. +func (_ICrossChainRegistry *ICrossChainRegistryTransactorRaw) Transfer(opts *bind.TransactOpts) (*types.Transaction, error) { + return _ICrossChainRegistry.Contract.contract.Transfer(opts) +} + +// Transact invokes the (paid) contract method with params as input values. +func (_ICrossChainRegistry *ICrossChainRegistryTransactorRaw) Transact(opts *bind.TransactOpts, method string, params ...interface{}) (*types.Transaction, error) { + return _ICrossChainRegistry.Contract.contract.Transact(opts, method, params...) +} + +// GetSupportedChains is a free data retrieval call binding the contract method 0xc4bffe2b. +// +// Solidity: function getSupportedChains() view returns(uint32[]) +func (_ICrossChainRegistry *ICrossChainRegistryCaller) GetSupportedChains(opts *bind.CallOpts) ([]uint32, error) { + var out []interface{} + err := _ICrossChainRegistry.contract.Call(opts, &out, "getSupportedChains") + + if err != nil { + return *new([]uint32), err + } + + out0 := *abi.ConvertType(out[0], new([]uint32)).(*[]uint32) + + return out0, err + +} + +// GetSupportedChains is a free data retrieval call binding the contract method 0xc4bffe2b. +// +// Solidity: function getSupportedChains() view returns(uint32[]) +func (_ICrossChainRegistry *ICrossChainRegistrySession) GetSupportedChains() ([]uint32, error) { + return _ICrossChainRegistry.Contract.GetSupportedChains(&_ICrossChainRegistry.CallOpts) +} + +// GetSupportedChains is a free data retrieval call binding the contract method 0xc4bffe2b. +// +// Solidity: function getSupportedChains() view returns(uint32[]) +func (_ICrossChainRegistry *ICrossChainRegistryCallerSession) GetSupportedChains() ([]uint32, error) { + return _ICrossChainRegistry.Contract.GetSupportedChains(&_ICrossChainRegistry.CallOpts) +} + +// GetTransportDestinations is a free data retrieval call binding the contract method 0x3c75fddf. +// +// Solidity: function getTransportDestinations((address,uint32) operatorSet) view returns(uint32[]) +func (_ICrossChainRegistry *ICrossChainRegistryCaller) GetTransportDestinations(opts *bind.CallOpts, operatorSet OperatorSet) ([]uint32, error) { + var out []interface{} + err := _ICrossChainRegistry.contract.Call(opts, &out, "getTransportDestinations", operatorSet) + + if err != nil { + return *new([]uint32), err + } + + out0 := *abi.ConvertType(out[0], new([]uint32)).(*[]uint32) + + return out0, err + +} + +// GetTransportDestinations is a free data retrieval call binding the contract method 0x3c75fddf. +// +// Solidity: function getTransportDestinations((address,uint32) operatorSet) view returns(uint32[]) +func (_ICrossChainRegistry *ICrossChainRegistrySession) GetTransportDestinations(operatorSet OperatorSet) ([]uint32, error) { + return _ICrossChainRegistry.Contract.GetTransportDestinations(&_ICrossChainRegistry.CallOpts, operatorSet) +} + +// GetTransportDestinations is a free data retrieval call binding the contract method 0x3c75fddf. +// +// Solidity: function getTransportDestinations((address,uint32) operatorSet) view returns(uint32[]) +func (_ICrossChainRegistry *ICrossChainRegistryCallerSession) GetTransportDestinations(operatorSet OperatorSet) ([]uint32, error) { + return _ICrossChainRegistry.Contract.GetTransportDestinations(&_ICrossChainRegistry.CallOpts, operatorSet) +} + +// AddChainIDToWhitelist is a paid mutator transaction binding the contract method 0x16df80b5. +// +// Solidity: function addChainIDToWhitelist(uint32 chainID) returns() +func (_ICrossChainRegistry *ICrossChainRegistryTransactor) AddChainIDToWhitelist(opts *bind.TransactOpts, chainID uint32) (*types.Transaction, error) { + return _ICrossChainRegistry.contract.Transact(opts, "addChainIDToWhitelist", chainID) +} + +// AddChainIDToWhitelist is a paid mutator transaction binding the contract method 0x16df80b5. +// +// Solidity: function addChainIDToWhitelist(uint32 chainID) returns() +func (_ICrossChainRegistry *ICrossChainRegistrySession) AddChainIDToWhitelist(chainID uint32) (*types.Transaction, error) { + return _ICrossChainRegistry.Contract.AddChainIDToWhitelist(&_ICrossChainRegistry.TransactOpts, chainID) +} + +// AddChainIDToWhitelist is a paid mutator transaction binding the contract method 0x16df80b5. +// +// Solidity: function addChainIDToWhitelist(uint32 chainID) returns() +func (_ICrossChainRegistry *ICrossChainRegistryTransactorSession) AddChainIDToWhitelist(chainID uint32) (*types.Transaction, error) { + return _ICrossChainRegistry.Contract.AddChainIDToWhitelist(&_ICrossChainRegistry.TransactOpts, chainID) +} + +// AddTransportDestination is a paid mutator transaction binding the contract method 0x814e731b. +// +// Solidity: function addTransportDestination((address,uint32) operatorSet, uint32 chainID) returns() +func (_ICrossChainRegistry *ICrossChainRegistryTransactor) AddTransportDestination(opts *bind.TransactOpts, operatorSet OperatorSet, chainID uint32) (*types.Transaction, error) { + return _ICrossChainRegistry.contract.Transact(opts, "addTransportDestination", operatorSet, chainID) +} + +// AddTransportDestination is a paid mutator transaction binding the contract method 0x814e731b. +// +// Solidity: function addTransportDestination((address,uint32) operatorSet, uint32 chainID) returns() +func (_ICrossChainRegistry *ICrossChainRegistrySession) AddTransportDestination(operatorSet OperatorSet, chainID uint32) (*types.Transaction, error) { + return _ICrossChainRegistry.Contract.AddTransportDestination(&_ICrossChainRegistry.TransactOpts, operatorSet, chainID) +} + +// AddTransportDestination is a paid mutator transaction binding the contract method 0x814e731b. +// +// Solidity: function addTransportDestination((address,uint32) operatorSet, uint32 chainID) returns() +func (_ICrossChainRegistry *ICrossChainRegistryTransactorSession) AddTransportDestination(operatorSet OperatorSet, chainID uint32) (*types.Transaction, error) { + return _ICrossChainRegistry.Contract.AddTransportDestination(&_ICrossChainRegistry.TransactOpts, operatorSet, chainID) +} + +// GetActiveGenerationReservations is a paid mutator transaction binding the contract method 0xd09b978b. +// +// Solidity: function getActiveGenerationReservations() returns((address,uint32)[], address[]) +func (_ICrossChainRegistry *ICrossChainRegistryTransactor) GetActiveGenerationReservations(opts *bind.TransactOpts) (*types.Transaction, error) { + return _ICrossChainRegistry.contract.Transact(opts, "getActiveGenerationReservations") +} + +// GetActiveGenerationReservations is a paid mutator transaction binding the contract method 0xd09b978b. +// +// Solidity: function getActiveGenerationReservations() returns((address,uint32)[], address[]) +func (_ICrossChainRegistry *ICrossChainRegistrySession) GetActiveGenerationReservations() (*types.Transaction, error) { + return _ICrossChainRegistry.Contract.GetActiveGenerationReservations(&_ICrossChainRegistry.TransactOpts) +} + +// GetActiveGenerationReservations is a paid mutator transaction binding the contract method 0xd09b978b. +// +// Solidity: function getActiveGenerationReservations() returns((address,uint32)[], address[]) +func (_ICrossChainRegistry *ICrossChainRegistryTransactorSession) GetActiveGenerationReservations() (*types.Transaction, error) { + return _ICrossChainRegistry.Contract.GetActiveGenerationReservations(&_ICrossChainRegistry.TransactOpts) +} + +// GetOperatorTableCalculator is a paid mutator transaction binding the contract method 0x75e4b539. +// +// Solidity: function getOperatorTableCalculator((address,uint32) operatorSet) returns(address) +func (_ICrossChainRegistry *ICrossChainRegistryTransactor) GetOperatorTableCalculator(opts *bind.TransactOpts, operatorSet OperatorSet) (*types.Transaction, error) { + return _ICrossChainRegistry.contract.Transact(opts, "getOperatorTableCalculator", operatorSet) +} + +// GetOperatorTableCalculator is a paid mutator transaction binding the contract method 0x75e4b539. +// +// Solidity: function getOperatorTableCalculator((address,uint32) operatorSet) returns(address) +func (_ICrossChainRegistry *ICrossChainRegistrySession) GetOperatorTableCalculator(operatorSet OperatorSet) (*types.Transaction, error) { + return _ICrossChainRegistry.Contract.GetOperatorTableCalculator(&_ICrossChainRegistry.TransactOpts, operatorSet) +} + +// GetOperatorTableCalculator is a paid mutator transaction binding the contract method 0x75e4b539. +// +// Solidity: function getOperatorTableCalculator((address,uint32) operatorSet) returns(address) +func (_ICrossChainRegistry *ICrossChainRegistryTransactorSession) GetOperatorTableCalculator(operatorSet OperatorSet) (*types.Transaction, error) { + return _ICrossChainRegistry.Contract.GetOperatorTableCalculator(&_ICrossChainRegistry.TransactOpts, operatorSet) +} + +// RemoveChainIDFromWhitelist is a paid mutator transaction binding the contract method 0x2ab0b20f. +// +// Solidity: function removeChainIDFromWhitelist(uint32 chainID) returns() +func (_ICrossChainRegistry *ICrossChainRegistryTransactor) RemoveChainIDFromWhitelist(opts *bind.TransactOpts, chainID uint32) (*types.Transaction, error) { + return _ICrossChainRegistry.contract.Transact(opts, "removeChainIDFromWhitelist", chainID) +} + +// RemoveChainIDFromWhitelist is a paid mutator transaction binding the contract method 0x2ab0b20f. +// +// Solidity: function removeChainIDFromWhitelist(uint32 chainID) returns() +func (_ICrossChainRegistry *ICrossChainRegistrySession) RemoveChainIDFromWhitelist(chainID uint32) (*types.Transaction, error) { + return _ICrossChainRegistry.Contract.RemoveChainIDFromWhitelist(&_ICrossChainRegistry.TransactOpts, chainID) +} + +// RemoveChainIDFromWhitelist is a paid mutator transaction binding the contract method 0x2ab0b20f. +// +// Solidity: function removeChainIDFromWhitelist(uint32 chainID) returns() +func (_ICrossChainRegistry *ICrossChainRegistryTransactorSession) RemoveChainIDFromWhitelist(chainID uint32) (*types.Transaction, error) { + return _ICrossChainRegistry.Contract.RemoveChainIDFromWhitelist(&_ICrossChainRegistry.TransactOpts, chainID) +} + +// RemoveGenerationReservation is a paid mutator transaction binding the contract method 0x6c55a37f. +// +// Solidity: function removeGenerationReservation((address,uint32) operatorSet) returns() +func (_ICrossChainRegistry *ICrossChainRegistryTransactor) RemoveGenerationReservation(opts *bind.TransactOpts, operatorSet OperatorSet) (*types.Transaction, error) { + return _ICrossChainRegistry.contract.Transact(opts, "removeGenerationReservation", operatorSet) +} + +// RemoveGenerationReservation is a paid mutator transaction binding the contract method 0x6c55a37f. +// +// Solidity: function removeGenerationReservation((address,uint32) operatorSet) returns() +func (_ICrossChainRegistry *ICrossChainRegistrySession) RemoveGenerationReservation(operatorSet OperatorSet) (*types.Transaction, error) { + return _ICrossChainRegistry.Contract.RemoveGenerationReservation(&_ICrossChainRegistry.TransactOpts, operatorSet) +} + +// RemoveGenerationReservation is a paid mutator transaction binding the contract method 0x6c55a37f. +// +// Solidity: function removeGenerationReservation((address,uint32) operatorSet) returns() +func (_ICrossChainRegistry *ICrossChainRegistryTransactorSession) RemoveGenerationReservation(operatorSet OperatorSet) (*types.Transaction, error) { + return _ICrossChainRegistry.Contract.RemoveGenerationReservation(&_ICrossChainRegistry.TransactOpts, operatorSet) +} + +// RemoveTransportDestination is a paid mutator transaction binding the contract method 0x2132488f. +// +// Solidity: function removeTransportDestination((address,uint32) operatorSet, uint32 chainID) returns() +func (_ICrossChainRegistry *ICrossChainRegistryTransactor) RemoveTransportDestination(opts *bind.TransactOpts, operatorSet OperatorSet, chainID uint32) (*types.Transaction, error) { + return _ICrossChainRegistry.contract.Transact(opts, "removeTransportDestination", operatorSet, chainID) +} + +// RemoveTransportDestination is a paid mutator transaction binding the contract method 0x2132488f. +// +// Solidity: function removeTransportDestination((address,uint32) operatorSet, uint32 chainID) returns() +func (_ICrossChainRegistry *ICrossChainRegistrySession) RemoveTransportDestination(operatorSet OperatorSet, chainID uint32) (*types.Transaction, error) { + return _ICrossChainRegistry.Contract.RemoveTransportDestination(&_ICrossChainRegistry.TransactOpts, operatorSet, chainID) +} + +// RemoveTransportDestination is a paid mutator transaction binding the contract method 0x2132488f. +// +// Solidity: function removeTransportDestination((address,uint32) operatorSet, uint32 chainID) returns() +func (_ICrossChainRegistry *ICrossChainRegistryTransactorSession) RemoveTransportDestination(operatorSet OperatorSet, chainID uint32) (*types.Transaction, error) { + return _ICrossChainRegistry.Contract.RemoveTransportDestination(&_ICrossChainRegistry.TransactOpts, operatorSet, chainID) +} + +// RequestGenerationReservation is a paid mutator transaction binding the contract method 0x4d9d1e48. +// +// Solidity: function requestGenerationReservation((address,uint32) operatorSet, address operatorTableCalculator) returns() +func (_ICrossChainRegistry *ICrossChainRegistryTransactor) RequestGenerationReservation(opts *bind.TransactOpts, operatorSet OperatorSet, operatorTableCalculator common.Address) (*types.Transaction, error) { + return _ICrossChainRegistry.contract.Transact(opts, "requestGenerationReservation", operatorSet, operatorTableCalculator) +} + +// RequestGenerationReservation is a paid mutator transaction binding the contract method 0x4d9d1e48. +// +// Solidity: function requestGenerationReservation((address,uint32) operatorSet, address operatorTableCalculator) returns() +func (_ICrossChainRegistry *ICrossChainRegistrySession) RequestGenerationReservation(operatorSet OperatorSet, operatorTableCalculator common.Address) (*types.Transaction, error) { + return _ICrossChainRegistry.Contract.RequestGenerationReservation(&_ICrossChainRegistry.TransactOpts, operatorSet, operatorTableCalculator) +} + +// RequestGenerationReservation is a paid mutator transaction binding the contract method 0x4d9d1e48. +// +// Solidity: function requestGenerationReservation((address,uint32) operatorSet, address operatorTableCalculator) returns() +func (_ICrossChainRegistry *ICrossChainRegistryTransactorSession) RequestGenerationReservation(operatorSet OperatorSet, operatorTableCalculator common.Address) (*types.Transaction, error) { + return _ICrossChainRegistry.Contract.RequestGenerationReservation(&_ICrossChainRegistry.TransactOpts, operatorSet, operatorTableCalculator) +} + +// SetOperatorTableCalculator is a paid mutator transaction binding the contract method 0x1ca9142a. +// +// Solidity: function setOperatorTableCalculator((address,uint32) operatorSet, address calculator) returns() +func (_ICrossChainRegistry *ICrossChainRegistryTransactor) SetOperatorTableCalculator(opts *bind.TransactOpts, operatorSet OperatorSet, calculator common.Address) (*types.Transaction, error) { + return _ICrossChainRegistry.contract.Transact(opts, "setOperatorTableCalculator", operatorSet, calculator) +} + +// SetOperatorTableCalculator is a paid mutator transaction binding the contract method 0x1ca9142a. +// +// Solidity: function setOperatorTableCalculator((address,uint32) operatorSet, address calculator) returns() +func (_ICrossChainRegistry *ICrossChainRegistrySession) SetOperatorTableCalculator(operatorSet OperatorSet, calculator common.Address) (*types.Transaction, error) { + return _ICrossChainRegistry.Contract.SetOperatorTableCalculator(&_ICrossChainRegistry.TransactOpts, operatorSet, calculator) +} + +// SetOperatorTableCalculator is a paid mutator transaction binding the contract method 0x1ca9142a. +// +// Solidity: function setOperatorTableCalculator((address,uint32) operatorSet, address calculator) returns() +func (_ICrossChainRegistry *ICrossChainRegistryTransactorSession) SetOperatorTableCalculator(operatorSet OperatorSet, calculator common.Address) (*types.Transaction, error) { + return _ICrossChainRegistry.Contract.SetOperatorTableCalculator(&_ICrossChainRegistry.TransactOpts, operatorSet, calculator) +} + +// ICrossChainRegistryChainIDAddedToWhitelistIterator is returned from FilterChainIDAddedToWhitelist and is used to iterate over the raw logs and unpacked data for ChainIDAddedToWhitelist events raised by the ICrossChainRegistry contract. +type ICrossChainRegistryChainIDAddedToWhitelistIterator struct { + Event *ICrossChainRegistryChainIDAddedToWhitelist // 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 *ICrossChainRegistryChainIDAddedToWhitelistIterator) 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(ICrossChainRegistryChainIDAddedToWhitelist) + 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(ICrossChainRegistryChainIDAddedToWhitelist) + 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 *ICrossChainRegistryChainIDAddedToWhitelistIterator) Error() error { + return it.fail +} + +// Close terminates the iteration process, releasing any pending underlying +// resources. +func (it *ICrossChainRegistryChainIDAddedToWhitelistIterator) Close() error { + it.sub.Unsubscribe() + return nil +} + +// ICrossChainRegistryChainIDAddedToWhitelist represents a ChainIDAddedToWhitelist event raised by the ICrossChainRegistry contract. +type ICrossChainRegistryChainIDAddedToWhitelist struct { + ChainID uint32 + Raw types.Log // Blockchain specific contextual infos +} + +// FilterChainIDAddedToWhitelist is a free log retrieval operation binding the contract event 0x554da9a23c6204a2a98605c0fc1f29bf2988ff3f3bbfe2ac1e3c11ee1866e5b9. +// +// Solidity: event ChainIDAddedToWhitelist(uint32 chainID) +func (_ICrossChainRegistry *ICrossChainRegistryFilterer) FilterChainIDAddedToWhitelist(opts *bind.FilterOpts) (*ICrossChainRegistryChainIDAddedToWhitelistIterator, error) { + + logs, sub, err := _ICrossChainRegistry.contract.FilterLogs(opts, "ChainIDAddedToWhitelist") + if err != nil { + return nil, err + } + return &ICrossChainRegistryChainIDAddedToWhitelistIterator{contract: _ICrossChainRegistry.contract, event: "ChainIDAddedToWhitelist", logs: logs, sub: sub}, nil +} + +// WatchChainIDAddedToWhitelist is a free log subscription operation binding the contract event 0x554da9a23c6204a2a98605c0fc1f29bf2988ff3f3bbfe2ac1e3c11ee1866e5b9. +// +// Solidity: event ChainIDAddedToWhitelist(uint32 chainID) +func (_ICrossChainRegistry *ICrossChainRegistryFilterer) WatchChainIDAddedToWhitelist(opts *bind.WatchOpts, sink chan<- *ICrossChainRegistryChainIDAddedToWhitelist) (event.Subscription, error) { + + logs, sub, err := _ICrossChainRegistry.contract.WatchLogs(opts, "ChainIDAddedToWhitelist") + 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(ICrossChainRegistryChainIDAddedToWhitelist) + if err := _ICrossChainRegistry.contract.UnpackLog(event, "ChainIDAddedToWhitelist", 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 +} + +// ParseChainIDAddedToWhitelist is a log parse operation binding the contract event 0x554da9a23c6204a2a98605c0fc1f29bf2988ff3f3bbfe2ac1e3c11ee1866e5b9. +// +// Solidity: event ChainIDAddedToWhitelist(uint32 chainID) +func (_ICrossChainRegistry *ICrossChainRegistryFilterer) ParseChainIDAddedToWhitelist(log types.Log) (*ICrossChainRegistryChainIDAddedToWhitelist, error) { + event := new(ICrossChainRegistryChainIDAddedToWhitelist) + if err := _ICrossChainRegistry.contract.UnpackLog(event, "ChainIDAddedToWhitelist", log); err != nil { + return nil, err + } + event.Raw = log + return event, nil +} + +// ICrossChainRegistryChainIDRemovedFromWhitelistIterator is returned from FilterChainIDRemovedFromWhitelist and is used to iterate over the raw logs and unpacked data for ChainIDRemovedFromWhitelist events raised by the ICrossChainRegistry contract. +type ICrossChainRegistryChainIDRemovedFromWhitelistIterator struct { + Event *ICrossChainRegistryChainIDRemovedFromWhitelist // 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 *ICrossChainRegistryChainIDRemovedFromWhitelistIterator) 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(ICrossChainRegistryChainIDRemovedFromWhitelist) + 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(ICrossChainRegistryChainIDRemovedFromWhitelist) + 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 *ICrossChainRegistryChainIDRemovedFromWhitelistIterator) Error() error { + return it.fail +} + +// Close terminates the iteration process, releasing any pending underlying +// resources. +func (it *ICrossChainRegistryChainIDRemovedFromWhitelistIterator) Close() error { + it.sub.Unsubscribe() + return nil +} + +// ICrossChainRegistryChainIDRemovedFromWhitelist represents a ChainIDRemovedFromWhitelist event raised by the ICrossChainRegistry contract. +type ICrossChainRegistryChainIDRemovedFromWhitelist struct { + ChainID uint32 + Raw types.Log // Blockchain specific contextual infos +} + +// FilterChainIDRemovedFromWhitelist is a free log retrieval operation binding the contract event 0x2069bbe11cd6c0fc8dd1e409735f3a6309718e89b813b4d648ede2399ae37f40. +// +// Solidity: event ChainIDRemovedFromWhitelist(uint32 chainID) +func (_ICrossChainRegistry *ICrossChainRegistryFilterer) FilterChainIDRemovedFromWhitelist(opts *bind.FilterOpts) (*ICrossChainRegistryChainIDRemovedFromWhitelistIterator, error) { + + logs, sub, err := _ICrossChainRegistry.contract.FilterLogs(opts, "ChainIDRemovedFromWhitelist") + if err != nil { + return nil, err + } + return &ICrossChainRegistryChainIDRemovedFromWhitelistIterator{contract: _ICrossChainRegistry.contract, event: "ChainIDRemovedFromWhitelist", logs: logs, sub: sub}, nil +} + +// WatchChainIDRemovedFromWhitelist is a free log subscription operation binding the contract event 0x2069bbe11cd6c0fc8dd1e409735f3a6309718e89b813b4d648ede2399ae37f40. +// +// Solidity: event ChainIDRemovedFromWhitelist(uint32 chainID) +func (_ICrossChainRegistry *ICrossChainRegistryFilterer) WatchChainIDRemovedFromWhitelist(opts *bind.WatchOpts, sink chan<- *ICrossChainRegistryChainIDRemovedFromWhitelist) (event.Subscription, error) { + + logs, sub, err := _ICrossChainRegistry.contract.WatchLogs(opts, "ChainIDRemovedFromWhitelist") + 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(ICrossChainRegistryChainIDRemovedFromWhitelist) + if err := _ICrossChainRegistry.contract.UnpackLog(event, "ChainIDRemovedFromWhitelist", 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 +} + +// ParseChainIDRemovedFromWhitelist is a log parse operation binding the contract event 0x2069bbe11cd6c0fc8dd1e409735f3a6309718e89b813b4d648ede2399ae37f40. +// +// Solidity: event ChainIDRemovedFromWhitelist(uint32 chainID) +func (_ICrossChainRegistry *ICrossChainRegistryFilterer) ParseChainIDRemovedFromWhitelist(log types.Log) (*ICrossChainRegistryChainIDRemovedFromWhitelist, error) { + event := new(ICrossChainRegistryChainIDRemovedFromWhitelist) + if err := _ICrossChainRegistry.contract.UnpackLog(event, "ChainIDRemovedFromWhitelist", log); err != nil { + return nil, err + } + event.Raw = log + return event, nil +} + +// ICrossChainRegistryGenerationReservationMadeIterator is returned from FilterGenerationReservationMade and is used to iterate over the raw logs and unpacked data for GenerationReservationMade events raised by the ICrossChainRegistry contract. +type ICrossChainRegistryGenerationReservationMadeIterator struct { + Event *ICrossChainRegistryGenerationReservationMade // 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 *ICrossChainRegistryGenerationReservationMadeIterator) 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(ICrossChainRegistryGenerationReservationMade) + 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(ICrossChainRegistryGenerationReservationMade) + 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 *ICrossChainRegistryGenerationReservationMadeIterator) Error() error { + return it.fail +} + +// Close terminates the iteration process, releasing any pending underlying +// resources. +func (it *ICrossChainRegistryGenerationReservationMadeIterator) Close() error { + it.sub.Unsubscribe() + return nil +} + +// ICrossChainRegistryGenerationReservationMade represents a GenerationReservationMade event raised by the ICrossChainRegistry contract. +type ICrossChainRegistryGenerationReservationMade struct { + OperatorSet OperatorSet + OperatorTableCalculator common.Address + Raw types.Log // Blockchain specific contextual infos +} + +// FilterGenerationReservationMade is a free log retrieval operation binding the contract event 0x14772150bf340e929cfaf20fe5e530cb3f57c1c78a7e2fe90caca8452b5d868b. +// +// Solidity: event GenerationReservationMade((address,uint32) operatorSet, address operatorTableCalculator) +func (_ICrossChainRegistry *ICrossChainRegistryFilterer) FilterGenerationReservationMade(opts *bind.FilterOpts) (*ICrossChainRegistryGenerationReservationMadeIterator, error) { + + logs, sub, err := _ICrossChainRegistry.contract.FilterLogs(opts, "GenerationReservationMade") + if err != nil { + return nil, err + } + return &ICrossChainRegistryGenerationReservationMadeIterator{contract: _ICrossChainRegistry.contract, event: "GenerationReservationMade", logs: logs, sub: sub}, nil +} + +// WatchGenerationReservationMade is a free log subscription operation binding the contract event 0x14772150bf340e929cfaf20fe5e530cb3f57c1c78a7e2fe90caca8452b5d868b. +// +// Solidity: event GenerationReservationMade((address,uint32) operatorSet, address operatorTableCalculator) +func (_ICrossChainRegistry *ICrossChainRegistryFilterer) WatchGenerationReservationMade(opts *bind.WatchOpts, sink chan<- *ICrossChainRegistryGenerationReservationMade) (event.Subscription, error) { + + logs, sub, err := _ICrossChainRegistry.contract.WatchLogs(opts, "GenerationReservationMade") + 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(ICrossChainRegistryGenerationReservationMade) + if err := _ICrossChainRegistry.contract.UnpackLog(event, "GenerationReservationMade", 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 +} + +// ParseGenerationReservationMade is a log parse operation binding the contract event 0x14772150bf340e929cfaf20fe5e530cb3f57c1c78a7e2fe90caca8452b5d868b. +// +// Solidity: event GenerationReservationMade((address,uint32) operatorSet, address operatorTableCalculator) +func (_ICrossChainRegistry *ICrossChainRegistryFilterer) ParseGenerationReservationMade(log types.Log) (*ICrossChainRegistryGenerationReservationMade, error) { + event := new(ICrossChainRegistryGenerationReservationMade) + if err := _ICrossChainRegistry.contract.UnpackLog(event, "GenerationReservationMade", log); err != nil { + return nil, err + } + event.Raw = log + return event, nil +} + +// ICrossChainRegistryGenerationReservationRemovedIterator is returned from FilterGenerationReservationRemoved and is used to iterate over the raw logs and unpacked data for GenerationReservationRemoved events raised by the ICrossChainRegistry contract. +type ICrossChainRegistryGenerationReservationRemovedIterator struct { + Event *ICrossChainRegistryGenerationReservationRemoved // 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 *ICrossChainRegistryGenerationReservationRemovedIterator) 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(ICrossChainRegistryGenerationReservationRemoved) + 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(ICrossChainRegistryGenerationReservationRemoved) + 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 *ICrossChainRegistryGenerationReservationRemovedIterator) Error() error { + return it.fail +} + +// Close terminates the iteration process, releasing any pending underlying +// resources. +func (it *ICrossChainRegistryGenerationReservationRemovedIterator) Close() error { + it.sub.Unsubscribe() + return nil +} + +// ICrossChainRegistryGenerationReservationRemoved represents a GenerationReservationRemoved event raised by the ICrossChainRegistry contract. +type ICrossChainRegistryGenerationReservationRemoved struct { + OperatorSet OperatorSet + OperatorTableCalculator common.Address + Raw types.Log // Blockchain specific contextual infos +} + +// FilterGenerationReservationRemoved is a free log retrieval operation binding the contract event 0x14c80ad57c80435a6a5df1a9e493d2bf1cee67dd762db709dc5363315fa224dd. +// +// Solidity: event GenerationReservationRemoved((address,uint32) operatorSet, address operatorTableCalculator) +func (_ICrossChainRegistry *ICrossChainRegistryFilterer) FilterGenerationReservationRemoved(opts *bind.FilterOpts) (*ICrossChainRegistryGenerationReservationRemovedIterator, error) { + + logs, sub, err := _ICrossChainRegistry.contract.FilterLogs(opts, "GenerationReservationRemoved") + if err != nil { + return nil, err + } + return &ICrossChainRegistryGenerationReservationRemovedIterator{contract: _ICrossChainRegistry.contract, event: "GenerationReservationRemoved", logs: logs, sub: sub}, nil +} + +// WatchGenerationReservationRemoved is a free log subscription operation binding the contract event 0x14c80ad57c80435a6a5df1a9e493d2bf1cee67dd762db709dc5363315fa224dd. +// +// Solidity: event GenerationReservationRemoved((address,uint32) operatorSet, address operatorTableCalculator) +func (_ICrossChainRegistry *ICrossChainRegistryFilterer) WatchGenerationReservationRemoved(opts *bind.WatchOpts, sink chan<- *ICrossChainRegistryGenerationReservationRemoved) (event.Subscription, error) { + + logs, sub, err := _ICrossChainRegistry.contract.WatchLogs(opts, "GenerationReservationRemoved") + 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(ICrossChainRegistryGenerationReservationRemoved) + if err := _ICrossChainRegistry.contract.UnpackLog(event, "GenerationReservationRemoved", 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 +} + +// ParseGenerationReservationRemoved is a log parse operation binding the contract event 0x14c80ad57c80435a6a5df1a9e493d2bf1cee67dd762db709dc5363315fa224dd. +// +// Solidity: event GenerationReservationRemoved((address,uint32) operatorSet, address operatorTableCalculator) +func (_ICrossChainRegistry *ICrossChainRegistryFilterer) ParseGenerationReservationRemoved(log types.Log) (*ICrossChainRegistryGenerationReservationRemoved, error) { + event := new(ICrossChainRegistryGenerationReservationRemoved) + if err := _ICrossChainRegistry.contract.UnpackLog(event, "GenerationReservationRemoved", log); err != nil { + return nil, err + } + event.Raw = log + return event, nil +} + +// ICrossChainRegistryTransportDestinationAddedIterator is returned from FilterTransportDestinationAdded and is used to iterate over the raw logs and unpacked data for TransportDestinationAdded events raised by the ICrossChainRegistry contract. +type ICrossChainRegistryTransportDestinationAddedIterator struct { + Event *ICrossChainRegistryTransportDestinationAdded // 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 *ICrossChainRegistryTransportDestinationAddedIterator) 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(ICrossChainRegistryTransportDestinationAdded) + 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(ICrossChainRegistryTransportDestinationAdded) + 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 *ICrossChainRegistryTransportDestinationAddedIterator) Error() error { + return it.fail +} + +// Close terminates the iteration process, releasing any pending underlying +// resources. +func (it *ICrossChainRegistryTransportDestinationAddedIterator) Close() error { + it.sub.Unsubscribe() + return nil +} + +// ICrossChainRegistryTransportDestinationAdded represents a TransportDestinationAdded event raised by the ICrossChainRegistry contract. +type ICrossChainRegistryTransportDestinationAdded struct { + OperatorSet OperatorSet + ChainID uint32 + Raw types.Log // Blockchain specific contextual infos +} + +// FilterTransportDestinationAdded is a free log retrieval operation binding the contract event 0x8b4440933d21e00b2cb9054306b21777f3da3f19c8fd32d61bb225c02d2b9877. +// +// Solidity: event TransportDestinationAdded((address,uint32) operatorSet, uint32 chainID) +func (_ICrossChainRegistry *ICrossChainRegistryFilterer) FilterTransportDestinationAdded(opts *bind.FilterOpts) (*ICrossChainRegistryTransportDestinationAddedIterator, error) { + + logs, sub, err := _ICrossChainRegistry.contract.FilterLogs(opts, "TransportDestinationAdded") + if err != nil { + return nil, err + } + return &ICrossChainRegistryTransportDestinationAddedIterator{contract: _ICrossChainRegistry.contract, event: "TransportDestinationAdded", logs: logs, sub: sub}, nil +} + +// WatchTransportDestinationAdded is a free log subscription operation binding the contract event 0x8b4440933d21e00b2cb9054306b21777f3da3f19c8fd32d61bb225c02d2b9877. +// +// Solidity: event TransportDestinationAdded((address,uint32) operatorSet, uint32 chainID) +func (_ICrossChainRegistry *ICrossChainRegistryFilterer) WatchTransportDestinationAdded(opts *bind.WatchOpts, sink chan<- *ICrossChainRegistryTransportDestinationAdded) (event.Subscription, error) { + + logs, sub, err := _ICrossChainRegistry.contract.WatchLogs(opts, "TransportDestinationAdded") + 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(ICrossChainRegistryTransportDestinationAdded) + if err := _ICrossChainRegistry.contract.UnpackLog(event, "TransportDestinationAdded", 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 +} + +// ParseTransportDestinationAdded is a log parse operation binding the contract event 0x8b4440933d21e00b2cb9054306b21777f3da3f19c8fd32d61bb225c02d2b9877. +// +// Solidity: event TransportDestinationAdded((address,uint32) operatorSet, uint32 chainID) +func (_ICrossChainRegistry *ICrossChainRegistryFilterer) ParseTransportDestinationAdded(log types.Log) (*ICrossChainRegistryTransportDestinationAdded, error) { + event := new(ICrossChainRegistryTransportDestinationAdded) + if err := _ICrossChainRegistry.contract.UnpackLog(event, "TransportDestinationAdded", log); err != nil { + return nil, err + } + event.Raw = log + return event, nil +} + +// ICrossChainRegistryTransportDestinationRemovedIterator is returned from FilterTransportDestinationRemoved and is used to iterate over the raw logs and unpacked data for TransportDestinationRemoved events raised by the ICrossChainRegistry contract. +type ICrossChainRegistryTransportDestinationRemovedIterator struct { + Event *ICrossChainRegistryTransportDestinationRemoved // 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 *ICrossChainRegistryTransportDestinationRemovedIterator) 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(ICrossChainRegistryTransportDestinationRemoved) + 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(ICrossChainRegistryTransportDestinationRemoved) + 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 *ICrossChainRegistryTransportDestinationRemovedIterator) Error() error { + return it.fail +} + +// Close terminates the iteration process, releasing any pending underlying +// resources. +func (it *ICrossChainRegistryTransportDestinationRemovedIterator) Close() error { + it.sub.Unsubscribe() + return nil +} + +// ICrossChainRegistryTransportDestinationRemoved represents a TransportDestinationRemoved event raised by the ICrossChainRegistry contract. +type ICrossChainRegistryTransportDestinationRemoved struct { + OperatorSet OperatorSet + ChainID uint32 + Raw types.Log // Blockchain specific contextual infos +} + +// FilterTransportDestinationRemoved is a free log retrieval operation binding the contract event 0x6492ce451b3fd0b7d79c6695d244676a8ee605aa63dab2ec2382796695d9461c. +// +// Solidity: event TransportDestinationRemoved((address,uint32) operatorSet, uint32 chainID) +func (_ICrossChainRegistry *ICrossChainRegistryFilterer) FilterTransportDestinationRemoved(opts *bind.FilterOpts) (*ICrossChainRegistryTransportDestinationRemovedIterator, error) { + + logs, sub, err := _ICrossChainRegistry.contract.FilterLogs(opts, "TransportDestinationRemoved") + if err != nil { + return nil, err + } + return &ICrossChainRegistryTransportDestinationRemovedIterator{contract: _ICrossChainRegistry.contract, event: "TransportDestinationRemoved", logs: logs, sub: sub}, nil +} + +// WatchTransportDestinationRemoved is a free log subscription operation binding the contract event 0x6492ce451b3fd0b7d79c6695d244676a8ee605aa63dab2ec2382796695d9461c. +// +// Solidity: event TransportDestinationRemoved((address,uint32) operatorSet, uint32 chainID) +func (_ICrossChainRegistry *ICrossChainRegistryFilterer) WatchTransportDestinationRemoved(opts *bind.WatchOpts, sink chan<- *ICrossChainRegistryTransportDestinationRemoved) (event.Subscription, error) { + + logs, sub, err := _ICrossChainRegistry.contract.WatchLogs(opts, "TransportDestinationRemoved") + 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(ICrossChainRegistryTransportDestinationRemoved) + if err := _ICrossChainRegistry.contract.UnpackLog(event, "TransportDestinationRemoved", 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 +} + +// ParseTransportDestinationRemoved is a log parse operation binding the contract event 0x6492ce451b3fd0b7d79c6695d244676a8ee605aa63dab2ec2382796695d9461c. +// +// Solidity: event TransportDestinationRemoved((address,uint32) operatorSet, uint32 chainID) +func (_ICrossChainRegistry *ICrossChainRegistryFilterer) ParseTransportDestinationRemoved(log types.Log) (*ICrossChainRegistryTransportDestinationRemoved, error) { + event := new(ICrossChainRegistryTransportDestinationRemoved) + if err := _ICrossChainRegistry.contract.UnpackLog(event, "TransportDestinationRemoved", log); err != nil { + return nil, err + } + event.Raw = log + return event, nil +} diff --git a/pkg/bindings/IECDSACertificateVerifier/binding.go b/pkg/bindings/IECDSACertificateVerifier/binding.go new file mode 100644 index 0000000000..f072e2f30b --- /dev/null +++ b/pkg/bindings/IECDSACertificateVerifier/binding.go @@ -0,0 +1,759 @@ +// Code generated - DO NOT EDIT. +// This file is a generated binding and any manual changes will be lost. + +package IECDSACertificateVerifier + +import ( + "errors" + "math/big" + "strings" + + ethereum "github.com/ethereum/go-ethereum" + "github.com/ethereum/go-ethereum/accounts/abi" + "github.com/ethereum/go-ethereum/accounts/abi/bind" + "github.com/ethereum/go-ethereum/common" + "github.com/ethereum/go-ethereum/core/types" + "github.com/ethereum/go-ethereum/event" +) + +// Reference imports to suppress errors if they are not otherwise used. +var ( + _ = errors.New + _ = big.NewInt + _ = strings.NewReader + _ = ethereum.NotFound + _ = bind.Bind + _ = common.Big1 + _ = types.BloomLookup + _ = event.NewSubscription + _ = abi.ConvertType +) + +// ICrossChainRegistryTypesOperatorSetConfig is an auto generated low-level Go binding around an user-defined struct. +type ICrossChainRegistryTypesOperatorSetConfig struct { + Owner common.Address + MaxStalenessPeriod uint32 +} + +// IECDSACertificateVerifierTypesECDSACertificate is an auto generated low-level Go binding around an user-defined struct. +type IECDSACertificateVerifierTypesECDSACertificate struct { + ReferenceTimestamp uint32 + MessageHash [32]byte + Sig []byte +} + +// IECDSATableCalculatorTypesECDSAOperatorInfo is an auto generated low-level Go binding around an user-defined struct. +type IECDSATableCalculatorTypesECDSAOperatorInfo struct { + Pubkey common.Address + Weights []*big.Int +} + +// OperatorSet is an auto generated low-level Go binding around an user-defined struct. +type OperatorSet struct { + Avs common.Address + Id uint32 +} + +// IECDSACertificateVerifierMetaData contains all meta data concerning the IECDSACertificateVerifier contract. +var IECDSACertificateVerifierMetaData = &bind.MetaData{ + ABI: "[{\"type\":\"function\",\"name\":\"getOperatorSetOwner\",\"inputs\":[{\"name\":\"operatorSet\",\"type\":\"tuple\",\"internalType\":\"structOperatorSet\",\"components\":[{\"name\":\"avs\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"id\",\"type\":\"uint32\",\"internalType\":\"uint32\"}]}],\"outputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"address\"}],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"latestReferenceTimestamp\",\"inputs\":[{\"name\":\"operatorSet\",\"type\":\"tuple\",\"internalType\":\"structOperatorSet\",\"components\":[{\"name\":\"avs\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"id\",\"type\":\"uint32\",\"internalType\":\"uint32\"}]}],\"outputs\":[{\"name\":\"\",\"type\":\"uint32\",\"internalType\":\"uint32\"}],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"maxOperatorTableStaleness\",\"inputs\":[{\"name\":\"operatorSet\",\"type\":\"tuple\",\"internalType\":\"structOperatorSet\",\"components\":[{\"name\":\"avs\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"id\",\"type\":\"uint32\",\"internalType\":\"uint32\"}]}],\"outputs\":[{\"name\":\"\",\"type\":\"uint32\",\"internalType\":\"uint32\"}],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"updateOperatorTable\",\"inputs\":[{\"name\":\"operatorSet\",\"type\":\"tuple\",\"internalType\":\"structOperatorSet\",\"components\":[{\"name\":\"avs\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"id\",\"type\":\"uint32\",\"internalType\":\"uint32\"}]},{\"name\":\"referenceTimestamp\",\"type\":\"uint32\",\"internalType\":\"uint32\"},{\"name\":\"operatorInfos\",\"type\":\"tuple[]\",\"internalType\":\"structIECDSATableCalculatorTypes.ECDSAOperatorInfo[]\",\"components\":[{\"name\":\"pubkey\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"weights\",\"type\":\"uint96[]\",\"internalType\":\"uint96[]\"}]},{\"name\":\"operatorSetConfig\",\"type\":\"tuple\",\"internalType\":\"structICrossChainRegistryTypes.OperatorSetConfig\",\"components\":[{\"name\":\"owner\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"maxStalenessPeriod\",\"type\":\"uint32\",\"internalType\":\"uint32\"}]}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"verifyCertificate\",\"inputs\":[{\"name\":\"operatorSet\",\"type\":\"tuple\",\"internalType\":\"structOperatorSet\",\"components\":[{\"name\":\"avs\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"id\",\"type\":\"uint32\",\"internalType\":\"uint32\"}]},{\"name\":\"cert\",\"type\":\"tuple\",\"internalType\":\"structIECDSACertificateVerifierTypes.ECDSACertificate\",\"components\":[{\"name\":\"referenceTimestamp\",\"type\":\"uint32\",\"internalType\":\"uint32\"},{\"name\":\"messageHash\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"},{\"name\":\"sig\",\"type\":\"bytes\",\"internalType\":\"bytes\"}]}],\"outputs\":[{\"name\":\"signedStakes\",\"type\":\"uint256[]\",\"internalType\":\"uint256[]\"}],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"verifyCertificateNominal\",\"inputs\":[{\"name\":\"operatorSet\",\"type\":\"tuple\",\"internalType\":\"structOperatorSet\",\"components\":[{\"name\":\"avs\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"id\",\"type\":\"uint32\",\"internalType\":\"uint32\"}]},{\"name\":\"cert\",\"type\":\"tuple\",\"internalType\":\"structIECDSACertificateVerifierTypes.ECDSACertificate\",\"components\":[{\"name\":\"referenceTimestamp\",\"type\":\"uint32\",\"internalType\":\"uint32\"},{\"name\":\"messageHash\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"},{\"name\":\"sig\",\"type\":\"bytes\",\"internalType\":\"bytes\"}]},{\"name\":\"totalStakeNominalThresholds\",\"type\":\"uint256[]\",\"internalType\":\"uint256[]\"}],\"outputs\":[{\"name\":\"\",\"type\":\"bool\",\"internalType\":\"bool\"}],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"verifyCertificateProportion\",\"inputs\":[{\"name\":\"operatorSet\",\"type\":\"tuple\",\"internalType\":\"structOperatorSet\",\"components\":[{\"name\":\"avs\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"id\",\"type\":\"uint32\",\"internalType\":\"uint32\"}]},{\"name\":\"cert\",\"type\":\"tuple\",\"internalType\":\"structIECDSACertificateVerifierTypes.ECDSACertificate\",\"components\":[{\"name\":\"referenceTimestamp\",\"type\":\"uint32\",\"internalType\":\"uint32\"},{\"name\":\"messageHash\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"},{\"name\":\"sig\",\"type\":\"bytes\",\"internalType\":\"bytes\"}]},{\"name\":\"totalStakeProportionThresholds\",\"type\":\"uint16[]\",\"internalType\":\"uint16[]\"}],\"outputs\":[{\"name\":\"\",\"type\":\"bool\",\"internalType\":\"bool\"}],\"stateMutability\":\"nonpayable\"},{\"type\":\"event\",\"name\":\"MaxStalenessPeriodUpdated\",\"inputs\":[{\"name\":\"operatorSet\",\"type\":\"tuple\",\"indexed\":false,\"internalType\":\"structOperatorSet\",\"components\":[{\"name\":\"avs\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"id\",\"type\":\"uint32\",\"internalType\":\"uint32\"}]},{\"name\":\"maxStalenessPeriod\",\"type\":\"uint32\",\"indexed\":false,\"internalType\":\"uint32\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"OperatorSetOwnerUpdated\",\"inputs\":[{\"name\":\"operatorSet\",\"type\":\"tuple\",\"indexed\":false,\"internalType\":\"structOperatorSet\",\"components\":[{\"name\":\"avs\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"id\",\"type\":\"uint32\",\"internalType\":\"uint32\"}]},{\"name\":\"owner\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"TableUpdated\",\"inputs\":[{\"name\":\"operatorSet\",\"type\":\"tuple\",\"indexed\":false,\"internalType\":\"structOperatorSet\",\"components\":[{\"name\":\"avs\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"id\",\"type\":\"uint32\",\"internalType\":\"uint32\"}]},{\"name\":\"referenceTimestamp\",\"type\":\"uint32\",\"indexed\":false,\"internalType\":\"uint32\"},{\"name\":\"operatorInfos\",\"type\":\"tuple[]\",\"indexed\":false,\"internalType\":\"structIECDSATableCalculatorTypes.ECDSAOperatorInfo[]\",\"components\":[{\"name\":\"pubkey\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"weights\",\"type\":\"uint96[]\",\"internalType\":\"uint96[]\"}]}],\"anonymous\":false},{\"type\":\"error\",\"name\":\"ArrayLengthMismatch\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"CertificateStale\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"OnlyTableUpdater\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"ReferenceTimestampDoesNotExist\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"TableUpdateStale\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"VerificationFailed\",\"inputs\":[]}]", +} + +// IECDSACertificateVerifierABI is the input ABI used to generate the binding from. +// Deprecated: Use IECDSACertificateVerifierMetaData.ABI instead. +var IECDSACertificateVerifierABI = IECDSACertificateVerifierMetaData.ABI + +// IECDSACertificateVerifier is an auto generated Go binding around an Ethereum contract. +type IECDSACertificateVerifier struct { + IECDSACertificateVerifierCaller // Read-only binding to the contract + IECDSACertificateVerifierTransactor // Write-only binding to the contract + IECDSACertificateVerifierFilterer // Log filterer for contract events +} + +// IECDSACertificateVerifierCaller is an auto generated read-only Go binding around an Ethereum contract. +type IECDSACertificateVerifierCaller struct { + contract *bind.BoundContract // Generic contract wrapper for the low level calls +} + +// IECDSACertificateVerifierTransactor is an auto generated write-only Go binding around an Ethereum contract. +type IECDSACertificateVerifierTransactor struct { + contract *bind.BoundContract // Generic contract wrapper for the low level calls +} + +// IECDSACertificateVerifierFilterer is an auto generated log filtering Go binding around an Ethereum contract events. +type IECDSACertificateVerifierFilterer struct { + contract *bind.BoundContract // Generic contract wrapper for the low level calls +} + +// IECDSACertificateVerifierSession is an auto generated Go binding around an Ethereum contract, +// with pre-set call and transact options. +type IECDSACertificateVerifierSession struct { + Contract *IECDSACertificateVerifier // Generic contract binding to set the session for + CallOpts bind.CallOpts // Call options to use throughout this session + TransactOpts bind.TransactOpts // Transaction auth options to use throughout this session +} + +// IECDSACertificateVerifierCallerSession is an auto generated read-only Go binding around an Ethereum contract, +// with pre-set call options. +type IECDSACertificateVerifierCallerSession struct { + Contract *IECDSACertificateVerifierCaller // Generic contract caller binding to set the session for + CallOpts bind.CallOpts // Call options to use throughout this session +} + +// IECDSACertificateVerifierTransactorSession is an auto generated write-only Go binding around an Ethereum contract, +// with pre-set transact options. +type IECDSACertificateVerifierTransactorSession struct { + Contract *IECDSACertificateVerifierTransactor // Generic contract transactor binding to set the session for + TransactOpts bind.TransactOpts // Transaction auth options to use throughout this session +} + +// IECDSACertificateVerifierRaw is an auto generated low-level Go binding around an Ethereum contract. +type IECDSACertificateVerifierRaw struct { + Contract *IECDSACertificateVerifier // Generic contract binding to access the raw methods on +} + +// IECDSACertificateVerifierCallerRaw is an auto generated low-level read-only Go binding around an Ethereum contract. +type IECDSACertificateVerifierCallerRaw struct { + Contract *IECDSACertificateVerifierCaller // Generic read-only contract binding to access the raw methods on +} + +// IECDSACertificateVerifierTransactorRaw is an auto generated low-level write-only Go binding around an Ethereum contract. +type IECDSACertificateVerifierTransactorRaw struct { + Contract *IECDSACertificateVerifierTransactor // Generic write-only contract binding to access the raw methods on +} + +// NewIECDSACertificateVerifier creates a new instance of IECDSACertificateVerifier, bound to a specific deployed contract. +func NewIECDSACertificateVerifier(address common.Address, backend bind.ContractBackend) (*IECDSACertificateVerifier, error) { + contract, err := bindIECDSACertificateVerifier(address, backend, backend, backend) + if err != nil { + return nil, err + } + return &IECDSACertificateVerifier{IECDSACertificateVerifierCaller: IECDSACertificateVerifierCaller{contract: contract}, IECDSACertificateVerifierTransactor: IECDSACertificateVerifierTransactor{contract: contract}, IECDSACertificateVerifierFilterer: IECDSACertificateVerifierFilterer{contract: contract}}, nil +} + +// NewIECDSACertificateVerifierCaller creates a new read-only instance of IECDSACertificateVerifier, bound to a specific deployed contract. +func NewIECDSACertificateVerifierCaller(address common.Address, caller bind.ContractCaller) (*IECDSACertificateVerifierCaller, error) { + contract, err := bindIECDSACertificateVerifier(address, caller, nil, nil) + if err != nil { + return nil, err + } + return &IECDSACertificateVerifierCaller{contract: contract}, nil +} + +// NewIECDSACertificateVerifierTransactor creates a new write-only instance of IECDSACertificateVerifier, bound to a specific deployed contract. +func NewIECDSACertificateVerifierTransactor(address common.Address, transactor bind.ContractTransactor) (*IECDSACertificateVerifierTransactor, error) { + contract, err := bindIECDSACertificateVerifier(address, nil, transactor, nil) + if err != nil { + return nil, err + } + return &IECDSACertificateVerifierTransactor{contract: contract}, nil +} + +// NewIECDSACertificateVerifierFilterer creates a new log filterer instance of IECDSACertificateVerifier, bound to a specific deployed contract. +func NewIECDSACertificateVerifierFilterer(address common.Address, filterer bind.ContractFilterer) (*IECDSACertificateVerifierFilterer, error) { + contract, err := bindIECDSACertificateVerifier(address, nil, nil, filterer) + if err != nil { + return nil, err + } + return &IECDSACertificateVerifierFilterer{contract: contract}, nil +} + +// bindIECDSACertificateVerifier binds a generic wrapper to an already deployed contract. +func bindIECDSACertificateVerifier(address common.Address, caller bind.ContractCaller, transactor bind.ContractTransactor, filterer bind.ContractFilterer) (*bind.BoundContract, error) { + parsed, err := IECDSACertificateVerifierMetaData.GetAbi() + if err != nil { + return nil, err + } + return bind.NewBoundContract(address, *parsed, caller, transactor, filterer), nil +} + +// Call invokes the (constant) contract method with params as input values and +// sets the output to result. The result type might be a single field for simple +// returns, a slice of interfaces for anonymous returns and a struct for named +// returns. +func (_IECDSACertificateVerifier *IECDSACertificateVerifierRaw) Call(opts *bind.CallOpts, result *[]interface{}, method string, params ...interface{}) error { + return _IECDSACertificateVerifier.Contract.IECDSACertificateVerifierCaller.contract.Call(opts, result, method, params...) +} + +// Transfer initiates a plain transaction to move funds to the contract, calling +// its default method if one is available. +func (_IECDSACertificateVerifier *IECDSACertificateVerifierRaw) Transfer(opts *bind.TransactOpts) (*types.Transaction, error) { + return _IECDSACertificateVerifier.Contract.IECDSACertificateVerifierTransactor.contract.Transfer(opts) +} + +// Transact invokes the (paid) contract method with params as input values. +func (_IECDSACertificateVerifier *IECDSACertificateVerifierRaw) Transact(opts *bind.TransactOpts, method string, params ...interface{}) (*types.Transaction, error) { + return _IECDSACertificateVerifier.Contract.IECDSACertificateVerifierTransactor.contract.Transact(opts, method, params...) +} + +// Call invokes the (constant) contract method with params as input values and +// sets the output to result. The result type might be a single field for simple +// returns, a slice of interfaces for anonymous returns and a struct for named +// returns. +func (_IECDSACertificateVerifier *IECDSACertificateVerifierCallerRaw) Call(opts *bind.CallOpts, result *[]interface{}, method string, params ...interface{}) error { + return _IECDSACertificateVerifier.Contract.contract.Call(opts, result, method, params...) +} + +// Transfer initiates a plain transaction to move funds to the contract, calling +// its default method if one is available. +func (_IECDSACertificateVerifier *IECDSACertificateVerifierTransactorRaw) Transfer(opts *bind.TransactOpts) (*types.Transaction, error) { + return _IECDSACertificateVerifier.Contract.contract.Transfer(opts) +} + +// Transact invokes the (paid) contract method with params as input values. +func (_IECDSACertificateVerifier *IECDSACertificateVerifierTransactorRaw) Transact(opts *bind.TransactOpts, method string, params ...interface{}) (*types.Transaction, error) { + return _IECDSACertificateVerifier.Contract.contract.Transact(opts, method, params...) +} + +// GetOperatorSetOwner is a paid mutator transaction binding the contract method 0x84818920. +// +// Solidity: function getOperatorSetOwner((address,uint32) operatorSet) returns(address) +func (_IECDSACertificateVerifier *IECDSACertificateVerifierTransactor) GetOperatorSetOwner(opts *bind.TransactOpts, operatorSet OperatorSet) (*types.Transaction, error) { + return _IECDSACertificateVerifier.contract.Transact(opts, "getOperatorSetOwner", operatorSet) +} + +// GetOperatorSetOwner is a paid mutator transaction binding the contract method 0x84818920. +// +// Solidity: function getOperatorSetOwner((address,uint32) operatorSet) returns(address) +func (_IECDSACertificateVerifier *IECDSACertificateVerifierSession) GetOperatorSetOwner(operatorSet OperatorSet) (*types.Transaction, error) { + return _IECDSACertificateVerifier.Contract.GetOperatorSetOwner(&_IECDSACertificateVerifier.TransactOpts, operatorSet) +} + +// GetOperatorSetOwner is a paid mutator transaction binding the contract method 0x84818920. +// +// Solidity: function getOperatorSetOwner((address,uint32) operatorSet) returns(address) +func (_IECDSACertificateVerifier *IECDSACertificateVerifierTransactorSession) GetOperatorSetOwner(operatorSet OperatorSet) (*types.Transaction, error) { + return _IECDSACertificateVerifier.Contract.GetOperatorSetOwner(&_IECDSACertificateVerifier.TransactOpts, operatorSet) +} + +// LatestReferenceTimestamp is a paid mutator transaction binding the contract method 0x5ddb9b5b. +// +// Solidity: function latestReferenceTimestamp((address,uint32) operatorSet) returns(uint32) +func (_IECDSACertificateVerifier *IECDSACertificateVerifierTransactor) LatestReferenceTimestamp(opts *bind.TransactOpts, operatorSet OperatorSet) (*types.Transaction, error) { + return _IECDSACertificateVerifier.contract.Transact(opts, "latestReferenceTimestamp", operatorSet) +} + +// LatestReferenceTimestamp is a paid mutator transaction binding the contract method 0x5ddb9b5b. +// +// Solidity: function latestReferenceTimestamp((address,uint32) operatorSet) returns(uint32) +func (_IECDSACertificateVerifier *IECDSACertificateVerifierSession) LatestReferenceTimestamp(operatorSet OperatorSet) (*types.Transaction, error) { + return _IECDSACertificateVerifier.Contract.LatestReferenceTimestamp(&_IECDSACertificateVerifier.TransactOpts, operatorSet) +} + +// LatestReferenceTimestamp is a paid mutator transaction binding the contract method 0x5ddb9b5b. +// +// Solidity: function latestReferenceTimestamp((address,uint32) operatorSet) returns(uint32) +func (_IECDSACertificateVerifier *IECDSACertificateVerifierTransactorSession) LatestReferenceTimestamp(operatorSet OperatorSet) (*types.Transaction, error) { + return _IECDSACertificateVerifier.Contract.LatestReferenceTimestamp(&_IECDSACertificateVerifier.TransactOpts, operatorSet) +} + +// MaxOperatorTableStaleness is a paid mutator transaction binding the contract method 0x6141879e. +// +// Solidity: function maxOperatorTableStaleness((address,uint32) operatorSet) returns(uint32) +func (_IECDSACertificateVerifier *IECDSACertificateVerifierTransactor) MaxOperatorTableStaleness(opts *bind.TransactOpts, operatorSet OperatorSet) (*types.Transaction, error) { + return _IECDSACertificateVerifier.contract.Transact(opts, "maxOperatorTableStaleness", operatorSet) +} + +// MaxOperatorTableStaleness is a paid mutator transaction binding the contract method 0x6141879e. +// +// Solidity: function maxOperatorTableStaleness((address,uint32) operatorSet) returns(uint32) +func (_IECDSACertificateVerifier *IECDSACertificateVerifierSession) MaxOperatorTableStaleness(operatorSet OperatorSet) (*types.Transaction, error) { + return _IECDSACertificateVerifier.Contract.MaxOperatorTableStaleness(&_IECDSACertificateVerifier.TransactOpts, operatorSet) +} + +// MaxOperatorTableStaleness is a paid mutator transaction binding the contract method 0x6141879e. +// +// Solidity: function maxOperatorTableStaleness((address,uint32) operatorSet) returns(uint32) +func (_IECDSACertificateVerifier *IECDSACertificateVerifierTransactorSession) MaxOperatorTableStaleness(operatorSet OperatorSet) (*types.Transaction, error) { + return _IECDSACertificateVerifier.Contract.MaxOperatorTableStaleness(&_IECDSACertificateVerifier.TransactOpts, operatorSet) +} + +// UpdateOperatorTable is a paid mutator transaction binding the contract method 0xa4f2f812. +// +// Solidity: function updateOperatorTable((address,uint32) operatorSet, uint32 referenceTimestamp, (address,uint96[])[] operatorInfos, (address,uint32) operatorSetConfig) returns() +func (_IECDSACertificateVerifier *IECDSACertificateVerifierTransactor) UpdateOperatorTable(opts *bind.TransactOpts, operatorSet OperatorSet, referenceTimestamp uint32, operatorInfos []IECDSATableCalculatorTypesECDSAOperatorInfo, operatorSetConfig ICrossChainRegistryTypesOperatorSetConfig) (*types.Transaction, error) { + return _IECDSACertificateVerifier.contract.Transact(opts, "updateOperatorTable", operatorSet, referenceTimestamp, operatorInfos, operatorSetConfig) +} + +// UpdateOperatorTable is a paid mutator transaction binding the contract method 0xa4f2f812. +// +// Solidity: function updateOperatorTable((address,uint32) operatorSet, uint32 referenceTimestamp, (address,uint96[])[] operatorInfos, (address,uint32) operatorSetConfig) returns() +func (_IECDSACertificateVerifier *IECDSACertificateVerifierSession) UpdateOperatorTable(operatorSet OperatorSet, referenceTimestamp uint32, operatorInfos []IECDSATableCalculatorTypesECDSAOperatorInfo, operatorSetConfig ICrossChainRegistryTypesOperatorSetConfig) (*types.Transaction, error) { + return _IECDSACertificateVerifier.Contract.UpdateOperatorTable(&_IECDSACertificateVerifier.TransactOpts, operatorSet, referenceTimestamp, operatorInfos, operatorSetConfig) +} + +// UpdateOperatorTable is a paid mutator transaction binding the contract method 0xa4f2f812. +// +// Solidity: function updateOperatorTable((address,uint32) operatorSet, uint32 referenceTimestamp, (address,uint96[])[] operatorInfos, (address,uint32) operatorSetConfig) returns() +func (_IECDSACertificateVerifier *IECDSACertificateVerifierTransactorSession) UpdateOperatorTable(operatorSet OperatorSet, referenceTimestamp uint32, operatorInfos []IECDSATableCalculatorTypesECDSAOperatorInfo, operatorSetConfig ICrossChainRegistryTypesOperatorSetConfig) (*types.Transaction, error) { + return _IECDSACertificateVerifier.Contract.UpdateOperatorTable(&_IECDSACertificateVerifier.TransactOpts, operatorSet, referenceTimestamp, operatorInfos, operatorSetConfig) +} + +// VerifyCertificate is a paid mutator transaction binding the contract method 0x80c7d3f3. +// +// Solidity: function verifyCertificate((address,uint32) operatorSet, (uint32,bytes32,bytes) cert) returns(uint256[] signedStakes) +func (_IECDSACertificateVerifier *IECDSACertificateVerifierTransactor) VerifyCertificate(opts *bind.TransactOpts, operatorSet OperatorSet, cert IECDSACertificateVerifierTypesECDSACertificate) (*types.Transaction, error) { + return _IECDSACertificateVerifier.contract.Transact(opts, "verifyCertificate", operatorSet, cert) +} + +// VerifyCertificate is a paid mutator transaction binding the contract method 0x80c7d3f3. +// +// Solidity: function verifyCertificate((address,uint32) operatorSet, (uint32,bytes32,bytes) cert) returns(uint256[] signedStakes) +func (_IECDSACertificateVerifier *IECDSACertificateVerifierSession) VerifyCertificate(operatorSet OperatorSet, cert IECDSACertificateVerifierTypesECDSACertificate) (*types.Transaction, error) { + return _IECDSACertificateVerifier.Contract.VerifyCertificate(&_IECDSACertificateVerifier.TransactOpts, operatorSet, cert) +} + +// VerifyCertificate is a paid mutator transaction binding the contract method 0x80c7d3f3. +// +// Solidity: function verifyCertificate((address,uint32) operatorSet, (uint32,bytes32,bytes) cert) returns(uint256[] signedStakes) +func (_IECDSACertificateVerifier *IECDSACertificateVerifierTransactorSession) VerifyCertificate(operatorSet OperatorSet, cert IECDSACertificateVerifierTypesECDSACertificate) (*types.Transaction, error) { + return _IECDSACertificateVerifier.Contract.VerifyCertificate(&_IECDSACertificateVerifier.TransactOpts, operatorSet, cert) +} + +// VerifyCertificateNominal is a paid mutator transaction binding the contract method 0xbe86e0b2. +// +// Solidity: function verifyCertificateNominal((address,uint32) operatorSet, (uint32,bytes32,bytes) cert, uint256[] totalStakeNominalThresholds) returns(bool) +func (_IECDSACertificateVerifier *IECDSACertificateVerifierTransactor) VerifyCertificateNominal(opts *bind.TransactOpts, operatorSet OperatorSet, cert IECDSACertificateVerifierTypesECDSACertificate, totalStakeNominalThresholds []*big.Int) (*types.Transaction, error) { + return _IECDSACertificateVerifier.contract.Transact(opts, "verifyCertificateNominal", operatorSet, cert, totalStakeNominalThresholds) +} + +// VerifyCertificateNominal is a paid mutator transaction binding the contract method 0xbe86e0b2. +// +// Solidity: function verifyCertificateNominal((address,uint32) operatorSet, (uint32,bytes32,bytes) cert, uint256[] totalStakeNominalThresholds) returns(bool) +func (_IECDSACertificateVerifier *IECDSACertificateVerifierSession) VerifyCertificateNominal(operatorSet OperatorSet, cert IECDSACertificateVerifierTypesECDSACertificate, totalStakeNominalThresholds []*big.Int) (*types.Transaction, error) { + return _IECDSACertificateVerifier.Contract.VerifyCertificateNominal(&_IECDSACertificateVerifier.TransactOpts, operatorSet, cert, totalStakeNominalThresholds) +} + +// VerifyCertificateNominal is a paid mutator transaction binding the contract method 0xbe86e0b2. +// +// Solidity: function verifyCertificateNominal((address,uint32) operatorSet, (uint32,bytes32,bytes) cert, uint256[] totalStakeNominalThresholds) returns(bool) +func (_IECDSACertificateVerifier *IECDSACertificateVerifierTransactorSession) VerifyCertificateNominal(operatorSet OperatorSet, cert IECDSACertificateVerifierTypesECDSACertificate, totalStakeNominalThresholds []*big.Int) (*types.Transaction, error) { + return _IECDSACertificateVerifier.Contract.VerifyCertificateNominal(&_IECDSACertificateVerifier.TransactOpts, operatorSet, cert, totalStakeNominalThresholds) +} + +// VerifyCertificateProportion is a paid mutator transaction binding the contract method 0xc0da2420. +// +// Solidity: function verifyCertificateProportion((address,uint32) operatorSet, (uint32,bytes32,bytes) cert, uint16[] totalStakeProportionThresholds) returns(bool) +func (_IECDSACertificateVerifier *IECDSACertificateVerifierTransactor) VerifyCertificateProportion(opts *bind.TransactOpts, operatorSet OperatorSet, cert IECDSACertificateVerifierTypesECDSACertificate, totalStakeProportionThresholds []uint16) (*types.Transaction, error) { + return _IECDSACertificateVerifier.contract.Transact(opts, "verifyCertificateProportion", operatorSet, cert, totalStakeProportionThresholds) +} + +// VerifyCertificateProportion is a paid mutator transaction binding the contract method 0xc0da2420. +// +// Solidity: function verifyCertificateProportion((address,uint32) operatorSet, (uint32,bytes32,bytes) cert, uint16[] totalStakeProportionThresholds) returns(bool) +func (_IECDSACertificateVerifier *IECDSACertificateVerifierSession) VerifyCertificateProportion(operatorSet OperatorSet, cert IECDSACertificateVerifierTypesECDSACertificate, totalStakeProportionThresholds []uint16) (*types.Transaction, error) { + return _IECDSACertificateVerifier.Contract.VerifyCertificateProportion(&_IECDSACertificateVerifier.TransactOpts, operatorSet, cert, totalStakeProportionThresholds) +} + +// VerifyCertificateProportion is a paid mutator transaction binding the contract method 0xc0da2420. +// +// Solidity: function verifyCertificateProportion((address,uint32) operatorSet, (uint32,bytes32,bytes) cert, uint16[] totalStakeProportionThresholds) returns(bool) +func (_IECDSACertificateVerifier *IECDSACertificateVerifierTransactorSession) VerifyCertificateProportion(operatorSet OperatorSet, cert IECDSACertificateVerifierTypesECDSACertificate, totalStakeProportionThresholds []uint16) (*types.Transaction, error) { + return _IECDSACertificateVerifier.Contract.VerifyCertificateProportion(&_IECDSACertificateVerifier.TransactOpts, operatorSet, cert, totalStakeProportionThresholds) +} + +// IECDSACertificateVerifierMaxStalenessPeriodUpdatedIterator is returned from FilterMaxStalenessPeriodUpdated and is used to iterate over the raw logs and unpacked data for MaxStalenessPeriodUpdated events raised by the IECDSACertificateVerifier contract. +type IECDSACertificateVerifierMaxStalenessPeriodUpdatedIterator struct { + Event *IECDSACertificateVerifierMaxStalenessPeriodUpdated // 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 *IECDSACertificateVerifierMaxStalenessPeriodUpdatedIterator) 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(IECDSACertificateVerifierMaxStalenessPeriodUpdated) + 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(IECDSACertificateVerifierMaxStalenessPeriodUpdated) + 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 *IECDSACertificateVerifierMaxStalenessPeriodUpdatedIterator) Error() error { + return it.fail +} + +// Close terminates the iteration process, releasing any pending underlying +// resources. +func (it *IECDSACertificateVerifierMaxStalenessPeriodUpdatedIterator) Close() error { + it.sub.Unsubscribe() + return nil +} + +// IECDSACertificateVerifierMaxStalenessPeriodUpdated represents a MaxStalenessPeriodUpdated event raised by the IECDSACertificateVerifier contract. +type IECDSACertificateVerifierMaxStalenessPeriodUpdated struct { + OperatorSet OperatorSet + MaxStalenessPeriod uint32 + Raw types.Log // Blockchain specific contextual infos +} + +// FilterMaxStalenessPeriodUpdated is a free log retrieval operation binding the contract event 0x28539469fbbc8a5482e60966bf9376f7b9d25b2f0a65a9976f6baa3f0e3788da. +// +// Solidity: event MaxStalenessPeriodUpdated((address,uint32) operatorSet, uint32 maxStalenessPeriod) +func (_IECDSACertificateVerifier *IECDSACertificateVerifierFilterer) FilterMaxStalenessPeriodUpdated(opts *bind.FilterOpts) (*IECDSACertificateVerifierMaxStalenessPeriodUpdatedIterator, error) { + + logs, sub, err := _IECDSACertificateVerifier.contract.FilterLogs(opts, "MaxStalenessPeriodUpdated") + if err != nil { + return nil, err + } + return &IECDSACertificateVerifierMaxStalenessPeriodUpdatedIterator{contract: _IECDSACertificateVerifier.contract, event: "MaxStalenessPeriodUpdated", logs: logs, sub: sub}, nil +} + +// WatchMaxStalenessPeriodUpdated is a free log subscription operation binding the contract event 0x28539469fbbc8a5482e60966bf9376f7b9d25b2f0a65a9976f6baa3f0e3788da. +// +// Solidity: event MaxStalenessPeriodUpdated((address,uint32) operatorSet, uint32 maxStalenessPeriod) +func (_IECDSACertificateVerifier *IECDSACertificateVerifierFilterer) WatchMaxStalenessPeriodUpdated(opts *bind.WatchOpts, sink chan<- *IECDSACertificateVerifierMaxStalenessPeriodUpdated) (event.Subscription, error) { + + logs, sub, err := _IECDSACertificateVerifier.contract.WatchLogs(opts, "MaxStalenessPeriodUpdated") + 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(IECDSACertificateVerifierMaxStalenessPeriodUpdated) + if err := _IECDSACertificateVerifier.contract.UnpackLog(event, "MaxStalenessPeriodUpdated", 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 +} + +// ParseMaxStalenessPeriodUpdated is a log parse operation binding the contract event 0x28539469fbbc8a5482e60966bf9376f7b9d25b2f0a65a9976f6baa3f0e3788da. +// +// Solidity: event MaxStalenessPeriodUpdated((address,uint32) operatorSet, uint32 maxStalenessPeriod) +func (_IECDSACertificateVerifier *IECDSACertificateVerifierFilterer) ParseMaxStalenessPeriodUpdated(log types.Log) (*IECDSACertificateVerifierMaxStalenessPeriodUpdated, error) { + event := new(IECDSACertificateVerifierMaxStalenessPeriodUpdated) + if err := _IECDSACertificateVerifier.contract.UnpackLog(event, "MaxStalenessPeriodUpdated", log); err != nil { + return nil, err + } + event.Raw = log + return event, nil +} + +// IECDSACertificateVerifierOperatorSetOwnerUpdatedIterator is returned from FilterOperatorSetOwnerUpdated and is used to iterate over the raw logs and unpacked data for OperatorSetOwnerUpdated events raised by the IECDSACertificateVerifier contract. +type IECDSACertificateVerifierOperatorSetOwnerUpdatedIterator struct { + Event *IECDSACertificateVerifierOperatorSetOwnerUpdated // 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 *IECDSACertificateVerifierOperatorSetOwnerUpdatedIterator) 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(IECDSACertificateVerifierOperatorSetOwnerUpdated) + 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(IECDSACertificateVerifierOperatorSetOwnerUpdated) + 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 *IECDSACertificateVerifierOperatorSetOwnerUpdatedIterator) Error() error { + return it.fail +} + +// Close terminates the iteration process, releasing any pending underlying +// resources. +func (it *IECDSACertificateVerifierOperatorSetOwnerUpdatedIterator) Close() error { + it.sub.Unsubscribe() + return nil +} + +// IECDSACertificateVerifierOperatorSetOwnerUpdated represents a OperatorSetOwnerUpdated event raised by the IECDSACertificateVerifier contract. +type IECDSACertificateVerifierOperatorSetOwnerUpdated struct { + OperatorSet OperatorSet + Owner common.Address + Raw types.Log // Blockchain specific contextual infos +} + +// FilterOperatorSetOwnerUpdated is a free log retrieval operation binding the contract event 0x806dc367095c0baf953d7144b7c4376261675ee0b4e0da2761e43673051c7375. +// +// Solidity: event OperatorSetOwnerUpdated((address,uint32) operatorSet, address owner) +func (_IECDSACertificateVerifier *IECDSACertificateVerifierFilterer) FilterOperatorSetOwnerUpdated(opts *bind.FilterOpts) (*IECDSACertificateVerifierOperatorSetOwnerUpdatedIterator, error) { + + logs, sub, err := _IECDSACertificateVerifier.contract.FilterLogs(opts, "OperatorSetOwnerUpdated") + if err != nil { + return nil, err + } + return &IECDSACertificateVerifierOperatorSetOwnerUpdatedIterator{contract: _IECDSACertificateVerifier.contract, event: "OperatorSetOwnerUpdated", logs: logs, sub: sub}, nil +} + +// WatchOperatorSetOwnerUpdated is a free log subscription operation binding the contract event 0x806dc367095c0baf953d7144b7c4376261675ee0b4e0da2761e43673051c7375. +// +// Solidity: event OperatorSetOwnerUpdated((address,uint32) operatorSet, address owner) +func (_IECDSACertificateVerifier *IECDSACertificateVerifierFilterer) WatchOperatorSetOwnerUpdated(opts *bind.WatchOpts, sink chan<- *IECDSACertificateVerifierOperatorSetOwnerUpdated) (event.Subscription, error) { + + logs, sub, err := _IECDSACertificateVerifier.contract.WatchLogs(opts, "OperatorSetOwnerUpdated") + 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(IECDSACertificateVerifierOperatorSetOwnerUpdated) + if err := _IECDSACertificateVerifier.contract.UnpackLog(event, "OperatorSetOwnerUpdated", 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 +} + +// ParseOperatorSetOwnerUpdated is a log parse operation binding the contract event 0x806dc367095c0baf953d7144b7c4376261675ee0b4e0da2761e43673051c7375. +// +// Solidity: event OperatorSetOwnerUpdated((address,uint32) operatorSet, address owner) +func (_IECDSACertificateVerifier *IECDSACertificateVerifierFilterer) ParseOperatorSetOwnerUpdated(log types.Log) (*IECDSACertificateVerifierOperatorSetOwnerUpdated, error) { + event := new(IECDSACertificateVerifierOperatorSetOwnerUpdated) + if err := _IECDSACertificateVerifier.contract.UnpackLog(event, "OperatorSetOwnerUpdated", log); err != nil { + return nil, err + } + event.Raw = log + return event, nil +} + +// IECDSACertificateVerifierTableUpdatedIterator is returned from FilterTableUpdated and is used to iterate over the raw logs and unpacked data for TableUpdated events raised by the IECDSACertificateVerifier contract. +type IECDSACertificateVerifierTableUpdatedIterator struct { + Event *IECDSACertificateVerifierTableUpdated // 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 *IECDSACertificateVerifierTableUpdatedIterator) 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(IECDSACertificateVerifierTableUpdated) + 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(IECDSACertificateVerifierTableUpdated) + 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 *IECDSACertificateVerifierTableUpdatedIterator) Error() error { + return it.fail +} + +// Close terminates the iteration process, releasing any pending underlying +// resources. +func (it *IECDSACertificateVerifierTableUpdatedIterator) Close() error { + it.sub.Unsubscribe() + return nil +} + +// IECDSACertificateVerifierTableUpdated represents a TableUpdated event raised by the IECDSACertificateVerifier contract. +type IECDSACertificateVerifierTableUpdated struct { + OperatorSet OperatorSet + ReferenceTimestamp uint32 + OperatorInfos []IECDSATableCalculatorTypesECDSAOperatorInfo + Raw types.Log // Blockchain specific contextual infos +} + +// FilterTableUpdated is a free log retrieval operation binding the contract event 0xdb1bca48b18b28fdf43760e8f885c152b536f7acb4e99e68c354433c39312030. +// +// Solidity: event TableUpdated((address,uint32) operatorSet, uint32 referenceTimestamp, (address,uint96[])[] operatorInfos) +func (_IECDSACertificateVerifier *IECDSACertificateVerifierFilterer) FilterTableUpdated(opts *bind.FilterOpts) (*IECDSACertificateVerifierTableUpdatedIterator, error) { + + logs, sub, err := _IECDSACertificateVerifier.contract.FilterLogs(opts, "TableUpdated") + if err != nil { + return nil, err + } + return &IECDSACertificateVerifierTableUpdatedIterator{contract: _IECDSACertificateVerifier.contract, event: "TableUpdated", logs: logs, sub: sub}, nil +} + +// WatchTableUpdated is a free log subscription operation binding the contract event 0xdb1bca48b18b28fdf43760e8f885c152b536f7acb4e99e68c354433c39312030. +// +// Solidity: event TableUpdated((address,uint32) operatorSet, uint32 referenceTimestamp, (address,uint96[])[] operatorInfos) +func (_IECDSACertificateVerifier *IECDSACertificateVerifierFilterer) WatchTableUpdated(opts *bind.WatchOpts, sink chan<- *IECDSACertificateVerifierTableUpdated) (event.Subscription, error) { + + logs, sub, err := _IECDSACertificateVerifier.contract.WatchLogs(opts, "TableUpdated") + 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(IECDSACertificateVerifierTableUpdated) + if err := _IECDSACertificateVerifier.contract.UnpackLog(event, "TableUpdated", 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 +} + +// ParseTableUpdated is a log parse operation binding the contract event 0xdb1bca48b18b28fdf43760e8f885c152b536f7acb4e99e68c354433c39312030. +// +// Solidity: event TableUpdated((address,uint32) operatorSet, uint32 referenceTimestamp, (address,uint96[])[] operatorInfos) +func (_IECDSACertificateVerifier *IECDSACertificateVerifierFilterer) ParseTableUpdated(log types.Log) (*IECDSACertificateVerifierTableUpdated, error) { + event := new(IECDSACertificateVerifierTableUpdated) + if err := _IECDSACertificateVerifier.contract.UnpackLog(event, "TableUpdated", log); err != nil { + return nil, err + } + event.Raw = log + return event, nil +} diff --git a/pkg/bindings/IECDSATableCalculator/binding.go b/pkg/bindings/IECDSATableCalculator/binding.go new file mode 100644 index 0000000000..b66a2f71db --- /dev/null +++ b/pkg/bindings/IECDSATableCalculator/binding.go @@ -0,0 +1,255 @@ +// Code generated - DO NOT EDIT. +// This file is a generated binding and any manual changes will be lost. + +package IECDSATableCalculator + +import ( + "errors" + "math/big" + "strings" + + ethereum "github.com/ethereum/go-ethereum" + "github.com/ethereum/go-ethereum/accounts/abi" + "github.com/ethereum/go-ethereum/accounts/abi/bind" + "github.com/ethereum/go-ethereum/common" + "github.com/ethereum/go-ethereum/core/types" + "github.com/ethereum/go-ethereum/event" +) + +// Reference imports to suppress errors if they are not otherwise used. +var ( + _ = errors.New + _ = big.NewInt + _ = strings.NewReader + _ = ethereum.NotFound + _ = bind.Bind + _ = common.Big1 + _ = types.BloomLookup + _ = event.NewSubscription + _ = abi.ConvertType +) + +// IECDSATableCalculatorTypesECDSAOperatorInfo is an auto generated low-level Go binding around an user-defined struct. +type IECDSATableCalculatorTypesECDSAOperatorInfo struct { + Pubkey common.Address + Weights []*big.Int +} + +// OperatorSet is an auto generated low-level Go binding around an user-defined struct. +type OperatorSet struct { + Avs common.Address + Id uint32 +} + +// IECDSATableCalculatorMetaData contains all meta data concerning the IECDSATableCalculator contract. +var IECDSATableCalculatorMetaData = &bind.MetaData{ + ABI: "[{\"type\":\"function\",\"name\":\"calculateOperatorTable\",\"inputs\":[{\"name\":\"operatorSet\",\"type\":\"tuple\",\"internalType\":\"structOperatorSet\",\"components\":[{\"name\":\"avs\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"id\",\"type\":\"uint32\",\"internalType\":\"uint32\"}]}],\"outputs\":[{\"name\":\"operatorInfos\",\"type\":\"tuple[]\",\"internalType\":\"structIECDSATableCalculatorTypes.ECDSAOperatorInfo[]\",\"components\":[{\"name\":\"pubkey\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"weights\",\"type\":\"uint96[]\",\"internalType\":\"uint96[]\"}]}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"calculateOperatorTableBytes\",\"inputs\":[{\"name\":\"operatorSet\",\"type\":\"tuple\",\"internalType\":\"structOperatorSet\",\"components\":[{\"name\":\"avs\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"id\",\"type\":\"uint32\",\"internalType\":\"uint32\"}]}],\"outputs\":[{\"name\":\"operatorTableBytes\",\"type\":\"bytes\",\"internalType\":\"bytes\"}],\"stateMutability\":\"view\"}]", +} + +// IECDSATableCalculatorABI is the input ABI used to generate the binding from. +// Deprecated: Use IECDSATableCalculatorMetaData.ABI instead. +var IECDSATableCalculatorABI = IECDSATableCalculatorMetaData.ABI + +// IECDSATableCalculator is an auto generated Go binding around an Ethereum contract. +type IECDSATableCalculator struct { + IECDSATableCalculatorCaller // Read-only binding to the contract + IECDSATableCalculatorTransactor // Write-only binding to the contract + IECDSATableCalculatorFilterer // Log filterer for contract events +} + +// IECDSATableCalculatorCaller is an auto generated read-only Go binding around an Ethereum contract. +type IECDSATableCalculatorCaller struct { + contract *bind.BoundContract // Generic contract wrapper for the low level calls +} + +// IECDSATableCalculatorTransactor is an auto generated write-only Go binding around an Ethereum contract. +type IECDSATableCalculatorTransactor struct { + contract *bind.BoundContract // Generic contract wrapper for the low level calls +} + +// IECDSATableCalculatorFilterer is an auto generated log filtering Go binding around an Ethereum contract events. +type IECDSATableCalculatorFilterer struct { + contract *bind.BoundContract // Generic contract wrapper for the low level calls +} + +// IECDSATableCalculatorSession is an auto generated Go binding around an Ethereum contract, +// with pre-set call and transact options. +type IECDSATableCalculatorSession struct { + Contract *IECDSATableCalculator // Generic contract binding to set the session for + CallOpts bind.CallOpts // Call options to use throughout this session + TransactOpts bind.TransactOpts // Transaction auth options to use throughout this session +} + +// IECDSATableCalculatorCallerSession is an auto generated read-only Go binding around an Ethereum contract, +// with pre-set call options. +type IECDSATableCalculatorCallerSession struct { + Contract *IECDSATableCalculatorCaller // Generic contract caller binding to set the session for + CallOpts bind.CallOpts // Call options to use throughout this session +} + +// IECDSATableCalculatorTransactorSession is an auto generated write-only Go binding around an Ethereum contract, +// with pre-set transact options. +type IECDSATableCalculatorTransactorSession struct { + Contract *IECDSATableCalculatorTransactor // Generic contract transactor binding to set the session for + TransactOpts bind.TransactOpts // Transaction auth options to use throughout this session +} + +// IECDSATableCalculatorRaw is an auto generated low-level Go binding around an Ethereum contract. +type IECDSATableCalculatorRaw struct { + Contract *IECDSATableCalculator // Generic contract binding to access the raw methods on +} + +// IECDSATableCalculatorCallerRaw is an auto generated low-level read-only Go binding around an Ethereum contract. +type IECDSATableCalculatorCallerRaw struct { + Contract *IECDSATableCalculatorCaller // Generic read-only contract binding to access the raw methods on +} + +// IECDSATableCalculatorTransactorRaw is an auto generated low-level write-only Go binding around an Ethereum contract. +type IECDSATableCalculatorTransactorRaw struct { + Contract *IECDSATableCalculatorTransactor // Generic write-only contract binding to access the raw methods on +} + +// NewIECDSATableCalculator creates a new instance of IECDSATableCalculator, bound to a specific deployed contract. +func NewIECDSATableCalculator(address common.Address, backend bind.ContractBackend) (*IECDSATableCalculator, error) { + contract, err := bindIECDSATableCalculator(address, backend, backend, backend) + if err != nil { + return nil, err + } + return &IECDSATableCalculator{IECDSATableCalculatorCaller: IECDSATableCalculatorCaller{contract: contract}, IECDSATableCalculatorTransactor: IECDSATableCalculatorTransactor{contract: contract}, IECDSATableCalculatorFilterer: IECDSATableCalculatorFilterer{contract: contract}}, nil +} + +// NewIECDSATableCalculatorCaller creates a new read-only instance of IECDSATableCalculator, bound to a specific deployed contract. +func NewIECDSATableCalculatorCaller(address common.Address, caller bind.ContractCaller) (*IECDSATableCalculatorCaller, error) { + contract, err := bindIECDSATableCalculator(address, caller, nil, nil) + if err != nil { + return nil, err + } + return &IECDSATableCalculatorCaller{contract: contract}, nil +} + +// NewIECDSATableCalculatorTransactor creates a new write-only instance of IECDSATableCalculator, bound to a specific deployed contract. +func NewIECDSATableCalculatorTransactor(address common.Address, transactor bind.ContractTransactor) (*IECDSATableCalculatorTransactor, error) { + contract, err := bindIECDSATableCalculator(address, nil, transactor, nil) + if err != nil { + return nil, err + } + return &IECDSATableCalculatorTransactor{contract: contract}, nil +} + +// NewIECDSATableCalculatorFilterer creates a new log filterer instance of IECDSATableCalculator, bound to a specific deployed contract. +func NewIECDSATableCalculatorFilterer(address common.Address, filterer bind.ContractFilterer) (*IECDSATableCalculatorFilterer, error) { + contract, err := bindIECDSATableCalculator(address, nil, nil, filterer) + if err != nil { + return nil, err + } + return &IECDSATableCalculatorFilterer{contract: contract}, nil +} + +// bindIECDSATableCalculator binds a generic wrapper to an already deployed contract. +func bindIECDSATableCalculator(address common.Address, caller bind.ContractCaller, transactor bind.ContractTransactor, filterer bind.ContractFilterer) (*bind.BoundContract, error) { + parsed, err := IECDSATableCalculatorMetaData.GetAbi() + if err != nil { + return nil, err + } + return bind.NewBoundContract(address, *parsed, caller, transactor, filterer), nil +} + +// Call invokes the (constant) contract method with params as input values and +// sets the output to result. The result type might be a single field for simple +// returns, a slice of interfaces for anonymous returns and a struct for named +// returns. +func (_IECDSATableCalculator *IECDSATableCalculatorRaw) Call(opts *bind.CallOpts, result *[]interface{}, method string, params ...interface{}) error { + return _IECDSATableCalculator.Contract.IECDSATableCalculatorCaller.contract.Call(opts, result, method, params...) +} + +// Transfer initiates a plain transaction to move funds to the contract, calling +// its default method if one is available. +func (_IECDSATableCalculator *IECDSATableCalculatorRaw) Transfer(opts *bind.TransactOpts) (*types.Transaction, error) { + return _IECDSATableCalculator.Contract.IECDSATableCalculatorTransactor.contract.Transfer(opts) +} + +// Transact invokes the (paid) contract method with params as input values. +func (_IECDSATableCalculator *IECDSATableCalculatorRaw) Transact(opts *bind.TransactOpts, method string, params ...interface{}) (*types.Transaction, error) { + return _IECDSATableCalculator.Contract.IECDSATableCalculatorTransactor.contract.Transact(opts, method, params...) +} + +// Call invokes the (constant) contract method with params as input values and +// sets the output to result. The result type might be a single field for simple +// returns, a slice of interfaces for anonymous returns and a struct for named +// returns. +func (_IECDSATableCalculator *IECDSATableCalculatorCallerRaw) Call(opts *bind.CallOpts, result *[]interface{}, method string, params ...interface{}) error { + return _IECDSATableCalculator.Contract.contract.Call(opts, result, method, params...) +} + +// Transfer initiates a plain transaction to move funds to the contract, calling +// its default method if one is available. +func (_IECDSATableCalculator *IECDSATableCalculatorTransactorRaw) Transfer(opts *bind.TransactOpts) (*types.Transaction, error) { + return _IECDSATableCalculator.Contract.contract.Transfer(opts) +} + +// Transact invokes the (paid) contract method with params as input values. +func (_IECDSATableCalculator *IECDSATableCalculatorTransactorRaw) Transact(opts *bind.TransactOpts, method string, params ...interface{}) (*types.Transaction, error) { + return _IECDSATableCalculator.Contract.contract.Transact(opts, method, params...) +} + +// CalculateOperatorTable is a free data retrieval call binding the contract method 0x124c87e0. +// +// Solidity: function calculateOperatorTable((address,uint32) operatorSet) view returns((address,uint96[])[] operatorInfos) +func (_IECDSATableCalculator *IECDSATableCalculatorCaller) CalculateOperatorTable(opts *bind.CallOpts, operatorSet OperatorSet) ([]IECDSATableCalculatorTypesECDSAOperatorInfo, error) { + var out []interface{} + err := _IECDSATableCalculator.contract.Call(opts, &out, "calculateOperatorTable", operatorSet) + + if err != nil { + return *new([]IECDSATableCalculatorTypesECDSAOperatorInfo), err + } + + out0 := *abi.ConvertType(out[0], new([]IECDSATableCalculatorTypesECDSAOperatorInfo)).(*[]IECDSATableCalculatorTypesECDSAOperatorInfo) + + return out0, err + +} + +// CalculateOperatorTable is a free data retrieval call binding the contract method 0x124c87e0. +// +// Solidity: function calculateOperatorTable((address,uint32) operatorSet) view returns((address,uint96[])[] operatorInfos) +func (_IECDSATableCalculator *IECDSATableCalculatorSession) CalculateOperatorTable(operatorSet OperatorSet) ([]IECDSATableCalculatorTypesECDSAOperatorInfo, error) { + return _IECDSATableCalculator.Contract.CalculateOperatorTable(&_IECDSATableCalculator.CallOpts, operatorSet) +} + +// CalculateOperatorTable is a free data retrieval call binding the contract method 0x124c87e0. +// +// Solidity: function calculateOperatorTable((address,uint32) operatorSet) view returns((address,uint96[])[] operatorInfos) +func (_IECDSATableCalculator *IECDSATableCalculatorCallerSession) CalculateOperatorTable(operatorSet OperatorSet) ([]IECDSATableCalculatorTypesECDSAOperatorInfo, error) { + return _IECDSATableCalculator.Contract.CalculateOperatorTable(&_IECDSATableCalculator.CallOpts, operatorSet) +} + +// CalculateOperatorTableBytes is a free data retrieval call binding the contract method 0x41ee6d0e. +// +// Solidity: function calculateOperatorTableBytes((address,uint32) operatorSet) view returns(bytes operatorTableBytes) +func (_IECDSATableCalculator *IECDSATableCalculatorCaller) CalculateOperatorTableBytes(opts *bind.CallOpts, operatorSet OperatorSet) ([]byte, error) { + var out []interface{} + err := _IECDSATableCalculator.contract.Call(opts, &out, "calculateOperatorTableBytes", operatorSet) + + if err != nil { + return *new([]byte), err + } + + out0 := *abi.ConvertType(out[0], new([]byte)).(*[]byte) + + return out0, err + +} + +// CalculateOperatorTableBytes is a free data retrieval call binding the contract method 0x41ee6d0e. +// +// Solidity: function calculateOperatorTableBytes((address,uint32) operatorSet) view returns(bytes operatorTableBytes) +func (_IECDSATableCalculator *IECDSATableCalculatorSession) CalculateOperatorTableBytes(operatorSet OperatorSet) ([]byte, error) { + return _IECDSATableCalculator.Contract.CalculateOperatorTableBytes(&_IECDSATableCalculator.CallOpts, operatorSet) +} + +// CalculateOperatorTableBytes is a free data retrieval call binding the contract method 0x41ee6d0e. +// +// Solidity: function calculateOperatorTableBytes((address,uint32) operatorSet) view returns(bytes operatorTableBytes) +func (_IECDSATableCalculator *IECDSATableCalculatorCallerSession) CalculateOperatorTableBytes(operatorSet OperatorSet) ([]byte, error) { + return _IECDSATableCalculator.Contract.CalculateOperatorTableBytes(&_IECDSATableCalculator.CallOpts, operatorSet) +} diff --git a/pkg/bindings/IOperatorTableCalculator/binding.go b/pkg/bindings/IOperatorTableCalculator/binding.go new file mode 100644 index 0000000000..d446fc5618 --- /dev/null +++ b/pkg/bindings/IOperatorTableCalculator/binding.go @@ -0,0 +1,218 @@ +// Code generated - DO NOT EDIT. +// This file is a generated binding and any manual changes will be lost. + +package IOperatorTableCalculator + +import ( + "errors" + "math/big" + "strings" + + ethereum "github.com/ethereum/go-ethereum" + "github.com/ethereum/go-ethereum/accounts/abi" + "github.com/ethereum/go-ethereum/accounts/abi/bind" + "github.com/ethereum/go-ethereum/common" + "github.com/ethereum/go-ethereum/core/types" + "github.com/ethereum/go-ethereum/event" +) + +// Reference imports to suppress errors if they are not otherwise used. +var ( + _ = errors.New + _ = big.NewInt + _ = strings.NewReader + _ = ethereum.NotFound + _ = bind.Bind + _ = common.Big1 + _ = types.BloomLookup + _ = event.NewSubscription + _ = abi.ConvertType +) + +// OperatorSet is an auto generated low-level Go binding around an user-defined struct. +type OperatorSet struct { + Avs common.Address + Id uint32 +} + +// IOperatorTableCalculatorMetaData contains all meta data concerning the IOperatorTableCalculator contract. +var IOperatorTableCalculatorMetaData = &bind.MetaData{ + ABI: "[{\"type\":\"function\",\"name\":\"calculateOperatorTableBytes\",\"inputs\":[{\"name\":\"operatorSet\",\"type\":\"tuple\",\"internalType\":\"structOperatorSet\",\"components\":[{\"name\":\"avs\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"id\",\"type\":\"uint32\",\"internalType\":\"uint32\"}]}],\"outputs\":[{\"name\":\"operatorTableBytes\",\"type\":\"bytes\",\"internalType\":\"bytes\"}],\"stateMutability\":\"view\"}]", +} + +// IOperatorTableCalculatorABI is the input ABI used to generate the binding from. +// Deprecated: Use IOperatorTableCalculatorMetaData.ABI instead. +var IOperatorTableCalculatorABI = IOperatorTableCalculatorMetaData.ABI + +// IOperatorTableCalculator is an auto generated Go binding around an Ethereum contract. +type IOperatorTableCalculator struct { + IOperatorTableCalculatorCaller // Read-only binding to the contract + IOperatorTableCalculatorTransactor // Write-only binding to the contract + IOperatorTableCalculatorFilterer // Log filterer for contract events +} + +// IOperatorTableCalculatorCaller is an auto generated read-only Go binding around an Ethereum contract. +type IOperatorTableCalculatorCaller struct { + contract *bind.BoundContract // Generic contract wrapper for the low level calls +} + +// IOperatorTableCalculatorTransactor is an auto generated write-only Go binding around an Ethereum contract. +type IOperatorTableCalculatorTransactor struct { + contract *bind.BoundContract // Generic contract wrapper for the low level calls +} + +// IOperatorTableCalculatorFilterer is an auto generated log filtering Go binding around an Ethereum contract events. +type IOperatorTableCalculatorFilterer struct { + contract *bind.BoundContract // Generic contract wrapper for the low level calls +} + +// IOperatorTableCalculatorSession is an auto generated Go binding around an Ethereum contract, +// with pre-set call and transact options. +type IOperatorTableCalculatorSession struct { + Contract *IOperatorTableCalculator // Generic contract binding to set the session for + CallOpts bind.CallOpts // Call options to use throughout this session + TransactOpts bind.TransactOpts // Transaction auth options to use throughout this session +} + +// IOperatorTableCalculatorCallerSession is an auto generated read-only Go binding around an Ethereum contract, +// with pre-set call options. +type IOperatorTableCalculatorCallerSession struct { + Contract *IOperatorTableCalculatorCaller // Generic contract caller binding to set the session for + CallOpts bind.CallOpts // Call options to use throughout this session +} + +// IOperatorTableCalculatorTransactorSession is an auto generated write-only Go binding around an Ethereum contract, +// with pre-set transact options. +type IOperatorTableCalculatorTransactorSession struct { + Contract *IOperatorTableCalculatorTransactor // Generic contract transactor binding to set the session for + TransactOpts bind.TransactOpts // Transaction auth options to use throughout this session +} + +// IOperatorTableCalculatorRaw is an auto generated low-level Go binding around an Ethereum contract. +type IOperatorTableCalculatorRaw struct { + Contract *IOperatorTableCalculator // Generic contract binding to access the raw methods on +} + +// IOperatorTableCalculatorCallerRaw is an auto generated low-level read-only Go binding around an Ethereum contract. +type IOperatorTableCalculatorCallerRaw struct { + Contract *IOperatorTableCalculatorCaller // Generic read-only contract binding to access the raw methods on +} + +// IOperatorTableCalculatorTransactorRaw is an auto generated low-level write-only Go binding around an Ethereum contract. +type IOperatorTableCalculatorTransactorRaw struct { + Contract *IOperatorTableCalculatorTransactor // Generic write-only contract binding to access the raw methods on +} + +// NewIOperatorTableCalculator creates a new instance of IOperatorTableCalculator, bound to a specific deployed contract. +func NewIOperatorTableCalculator(address common.Address, backend bind.ContractBackend) (*IOperatorTableCalculator, error) { + contract, err := bindIOperatorTableCalculator(address, backend, backend, backend) + if err != nil { + return nil, err + } + return &IOperatorTableCalculator{IOperatorTableCalculatorCaller: IOperatorTableCalculatorCaller{contract: contract}, IOperatorTableCalculatorTransactor: IOperatorTableCalculatorTransactor{contract: contract}, IOperatorTableCalculatorFilterer: IOperatorTableCalculatorFilterer{contract: contract}}, nil +} + +// NewIOperatorTableCalculatorCaller creates a new read-only instance of IOperatorTableCalculator, bound to a specific deployed contract. +func NewIOperatorTableCalculatorCaller(address common.Address, caller bind.ContractCaller) (*IOperatorTableCalculatorCaller, error) { + contract, err := bindIOperatorTableCalculator(address, caller, nil, nil) + if err != nil { + return nil, err + } + return &IOperatorTableCalculatorCaller{contract: contract}, nil +} + +// NewIOperatorTableCalculatorTransactor creates a new write-only instance of IOperatorTableCalculator, bound to a specific deployed contract. +func NewIOperatorTableCalculatorTransactor(address common.Address, transactor bind.ContractTransactor) (*IOperatorTableCalculatorTransactor, error) { + contract, err := bindIOperatorTableCalculator(address, nil, transactor, nil) + if err != nil { + return nil, err + } + return &IOperatorTableCalculatorTransactor{contract: contract}, nil +} + +// NewIOperatorTableCalculatorFilterer creates a new log filterer instance of IOperatorTableCalculator, bound to a specific deployed contract. +func NewIOperatorTableCalculatorFilterer(address common.Address, filterer bind.ContractFilterer) (*IOperatorTableCalculatorFilterer, error) { + contract, err := bindIOperatorTableCalculator(address, nil, nil, filterer) + if err != nil { + return nil, err + } + return &IOperatorTableCalculatorFilterer{contract: contract}, nil +} + +// bindIOperatorTableCalculator binds a generic wrapper to an already deployed contract. +func bindIOperatorTableCalculator(address common.Address, caller bind.ContractCaller, transactor bind.ContractTransactor, filterer bind.ContractFilterer) (*bind.BoundContract, error) { + parsed, err := IOperatorTableCalculatorMetaData.GetAbi() + if err != nil { + return nil, err + } + return bind.NewBoundContract(address, *parsed, caller, transactor, filterer), nil +} + +// Call invokes the (constant) contract method with params as input values and +// sets the output to result. The result type might be a single field for simple +// returns, a slice of interfaces for anonymous returns and a struct for named +// returns. +func (_IOperatorTableCalculator *IOperatorTableCalculatorRaw) Call(opts *bind.CallOpts, result *[]interface{}, method string, params ...interface{}) error { + return _IOperatorTableCalculator.Contract.IOperatorTableCalculatorCaller.contract.Call(opts, result, method, params...) +} + +// Transfer initiates a plain transaction to move funds to the contract, calling +// its default method if one is available. +func (_IOperatorTableCalculator *IOperatorTableCalculatorRaw) Transfer(opts *bind.TransactOpts) (*types.Transaction, error) { + return _IOperatorTableCalculator.Contract.IOperatorTableCalculatorTransactor.contract.Transfer(opts) +} + +// Transact invokes the (paid) contract method with params as input values. +func (_IOperatorTableCalculator *IOperatorTableCalculatorRaw) Transact(opts *bind.TransactOpts, method string, params ...interface{}) (*types.Transaction, error) { + return _IOperatorTableCalculator.Contract.IOperatorTableCalculatorTransactor.contract.Transact(opts, method, params...) +} + +// Call invokes the (constant) contract method with params as input values and +// sets the output to result. The result type might be a single field for simple +// returns, a slice of interfaces for anonymous returns and a struct for named +// returns. +func (_IOperatorTableCalculator *IOperatorTableCalculatorCallerRaw) Call(opts *bind.CallOpts, result *[]interface{}, method string, params ...interface{}) error { + return _IOperatorTableCalculator.Contract.contract.Call(opts, result, method, params...) +} + +// Transfer initiates a plain transaction to move funds to the contract, calling +// its default method if one is available. +func (_IOperatorTableCalculator *IOperatorTableCalculatorTransactorRaw) Transfer(opts *bind.TransactOpts) (*types.Transaction, error) { + return _IOperatorTableCalculator.Contract.contract.Transfer(opts) +} + +// Transact invokes the (paid) contract method with params as input values. +func (_IOperatorTableCalculator *IOperatorTableCalculatorTransactorRaw) Transact(opts *bind.TransactOpts, method string, params ...interface{}) (*types.Transaction, error) { + return _IOperatorTableCalculator.Contract.contract.Transact(opts, method, params...) +} + +// CalculateOperatorTableBytes is a free data retrieval call binding the contract method 0x41ee6d0e. +// +// Solidity: function calculateOperatorTableBytes((address,uint32) operatorSet) view returns(bytes operatorTableBytes) +func (_IOperatorTableCalculator *IOperatorTableCalculatorCaller) CalculateOperatorTableBytes(opts *bind.CallOpts, operatorSet OperatorSet) ([]byte, error) { + var out []interface{} + err := _IOperatorTableCalculator.contract.Call(opts, &out, "calculateOperatorTableBytes", operatorSet) + + if err != nil { + return *new([]byte), err + } + + out0 := *abi.ConvertType(out[0], new([]byte)).(*[]byte) + + return out0, err + +} + +// CalculateOperatorTableBytes is a free data retrieval call binding the contract method 0x41ee6d0e. +// +// Solidity: function calculateOperatorTableBytes((address,uint32) operatorSet) view returns(bytes operatorTableBytes) +func (_IOperatorTableCalculator *IOperatorTableCalculatorSession) CalculateOperatorTableBytes(operatorSet OperatorSet) ([]byte, error) { + return _IOperatorTableCalculator.Contract.CalculateOperatorTableBytes(&_IOperatorTableCalculator.CallOpts, operatorSet) +} + +// CalculateOperatorTableBytes is a free data retrieval call binding the contract method 0x41ee6d0e. +// +// Solidity: function calculateOperatorTableBytes((address,uint32) operatorSet) view returns(bytes operatorTableBytes) +func (_IOperatorTableCalculator *IOperatorTableCalculatorCallerSession) CalculateOperatorTableBytes(operatorSet OperatorSet) ([]byte, error) { + return _IOperatorTableCalculator.Contract.CalculateOperatorTableBytes(&_IOperatorTableCalculator.CallOpts, operatorSet) +} diff --git a/pkg/bindings/IOperatorTableUpdater/binding.go b/pkg/bindings/IOperatorTableUpdater/binding.go new file mode 100644 index 0000000000..7813532521 --- /dev/null +++ b/pkg/bindings/IOperatorTableUpdater/binding.go @@ -0,0 +1,543 @@ +// Code generated - DO NOT EDIT. +// This file is a generated binding and any manual changes will be lost. + +package IOperatorTableUpdater + +import ( + "errors" + "math/big" + "strings" + + ethereum "github.com/ethereum/go-ethereum" + "github.com/ethereum/go-ethereum/accounts/abi" + "github.com/ethereum/go-ethereum/accounts/abi/bind" + "github.com/ethereum/go-ethereum/common" + "github.com/ethereum/go-ethereum/core/types" + "github.com/ethereum/go-ethereum/event" +) + +// Reference imports to suppress errors if they are not otherwise used. +var ( + _ = errors.New + _ = big.NewInt + _ = strings.NewReader + _ = ethereum.NotFound + _ = bind.Bind + _ = common.Big1 + _ = types.BloomLookup + _ = event.NewSubscription + _ = abi.ConvertType +) + +// BN254G1Point is an auto generated low-level Go binding around an user-defined struct. +type BN254G1Point struct { + X *big.Int + Y *big.Int +} + +// BN254G2Point is an auto generated low-level Go binding around an user-defined struct. +type BN254G2Point struct { + X [2]*big.Int + Y [2]*big.Int +} + +// IBN254CertificateVerifierTypesBN254Certificate is an auto generated low-level Go binding around an user-defined struct. +type IBN254CertificateVerifierTypesBN254Certificate struct { + ReferenceTimestamp uint32 + MessageHash [32]byte + Signature BN254G1Point + Apk BN254G2Point + NonSignerWitnesses []IBN254CertificateVerifierTypesBN254OperatorInfoWitness +} + +// IBN254CertificateVerifierTypesBN254OperatorInfoWitness is an auto generated low-level Go binding around an user-defined struct. +type IBN254CertificateVerifierTypesBN254OperatorInfoWitness struct { + OperatorIndex uint32 + OperatorInfoProof []byte + OperatorInfo IBN254TableCalculatorTypesBN254OperatorInfo +} + +// IBN254TableCalculatorTypesBN254OperatorInfo is an auto generated low-level Go binding around an user-defined struct. +type IBN254TableCalculatorTypesBN254OperatorInfo struct { + Pubkey BN254G1Point + Weights []*big.Int +} + +// IBN254TableCalculatorTypesBN254OperatorSetInfo is an auto generated low-level Go binding around an user-defined struct. +type IBN254TableCalculatorTypesBN254OperatorSetInfo struct { + OperatorInfoTreeRoot [32]byte + NumOperators *big.Int + AggregatePubkey BN254G1Point + TotalWeights []*big.Int +} + +// ICrossChainRegistryTypesOperatorSetConfig is an auto generated low-level Go binding around an user-defined struct. +type ICrossChainRegistryTypesOperatorSetConfig struct { + Owner common.Address + MaxStalenessPeriod uint32 +} + +// IECDSATableCalculatorTypesECDSAOperatorInfo is an auto generated low-level Go binding around an user-defined struct. +type IECDSATableCalculatorTypesECDSAOperatorInfo struct { + Pubkey common.Address + Weights []*big.Int +} + +// OperatorSet is an auto generated low-level Go binding around an user-defined struct. +type OperatorSet struct { + Avs common.Address + Id uint32 +} + +// IOperatorTableUpdaterMetaData contains all meta data concerning the IOperatorTableUpdater contract. +var IOperatorTableUpdaterMetaData = &bind.MetaData{ + ABI: "[{\"type\":\"function\",\"name\":\"confirmGlobalTableRoot\",\"inputs\":[{\"name\":\"globalTableRootCert\",\"type\":\"tuple\",\"internalType\":\"structIBN254CertificateVerifierTypes.BN254Certificate\",\"components\":[{\"name\":\"referenceTimestamp\",\"type\":\"uint32\",\"internalType\":\"uint32\"},{\"name\":\"messageHash\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"},{\"name\":\"signature\",\"type\":\"tuple\",\"internalType\":\"structBN254.G1Point\",\"components\":[{\"name\":\"X\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"Y\",\"type\":\"uint256\",\"internalType\":\"uint256\"}]},{\"name\":\"apk\",\"type\":\"tuple\",\"internalType\":\"structBN254.G2Point\",\"components\":[{\"name\":\"X\",\"type\":\"uint256[2]\",\"internalType\":\"uint256[2]\"},{\"name\":\"Y\",\"type\":\"uint256[2]\",\"internalType\":\"uint256[2]\"}]},{\"name\":\"nonSignerWitnesses\",\"type\":\"tuple[]\",\"internalType\":\"structIBN254CertificateVerifierTypes.BN254OperatorInfoWitness[]\",\"components\":[{\"name\":\"operatorIndex\",\"type\":\"uint32\",\"internalType\":\"uint32\"},{\"name\":\"operatorInfoProof\",\"type\":\"bytes\",\"internalType\":\"bytes\"},{\"name\":\"operatorInfo\",\"type\":\"tuple\",\"internalType\":\"structIBN254TableCalculatorTypes.BN254OperatorInfo\",\"components\":[{\"name\":\"pubkey\",\"type\":\"tuple\",\"internalType\":\"structBN254.G1Point\",\"components\":[{\"name\":\"X\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"Y\",\"type\":\"uint256\",\"internalType\":\"uint256\"}]},{\"name\":\"weights\",\"type\":\"uint256[]\",\"internalType\":\"uint256[]\"}]}]}]},{\"name\":\"globalTableRoot\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"},{\"name\":\"referenceTimestamp\",\"type\":\"uint32\",\"internalType\":\"uint32\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"getCurrentGlobalTableRoot\",\"inputs\":[],\"outputs\":[{\"name\":\"globalTableRoot\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"getTableRootByTimestamp\",\"inputs\":[{\"name\":\"referenceTimestamp\",\"type\":\"uint32\",\"internalType\":\"uint32\"}],\"outputs\":[{\"name\":\"tableRoot\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"setGlobalRootConfirmationThreshold\",\"inputs\":[{\"name\":\"bps\",\"type\":\"uint16\",\"internalType\":\"uint16\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"setGlobalRootConfirmerSet\",\"inputs\":[{\"name\":\"operatorSet\",\"type\":\"tuple\",\"internalType\":\"structOperatorSet\",\"components\":[{\"name\":\"avs\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"id\",\"type\":\"uint32\",\"internalType\":\"uint32\"}]}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"updateBN254OperatorTable\",\"inputs\":[{\"name\":\"referenceTimestamp\",\"type\":\"uint32\",\"internalType\":\"uint32\"},{\"name\":\"globalTableRoot\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"},{\"name\":\"operatorSetIndex\",\"type\":\"uint32\",\"internalType\":\"uint32\"},{\"name\":\"proof\",\"type\":\"bytes\",\"internalType\":\"bytes\"},{\"name\":\"operatorSet\",\"type\":\"tuple\",\"internalType\":\"structOperatorSet\",\"components\":[{\"name\":\"avs\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"id\",\"type\":\"uint32\",\"internalType\":\"uint32\"}]},{\"name\":\"operatorSetInfo\",\"type\":\"tuple\",\"internalType\":\"structIBN254TableCalculatorTypes.BN254OperatorSetInfo\",\"components\":[{\"name\":\"operatorInfoTreeRoot\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"},{\"name\":\"numOperators\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"aggregatePubkey\",\"type\":\"tuple\",\"internalType\":\"structBN254.G1Point\",\"components\":[{\"name\":\"X\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"Y\",\"type\":\"uint256\",\"internalType\":\"uint256\"}]},{\"name\":\"totalWeights\",\"type\":\"uint256[]\",\"internalType\":\"uint256[]\"}]},{\"name\":\"config\",\"type\":\"tuple\",\"internalType\":\"structICrossChainRegistryTypes.OperatorSetConfig\",\"components\":[{\"name\":\"owner\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"maxStalenessPeriod\",\"type\":\"uint32\",\"internalType\":\"uint32\"}]}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"updateECDSAOperatorTable\",\"inputs\":[{\"name\":\"referenceTimestamp\",\"type\":\"uint32\",\"internalType\":\"uint32\"},{\"name\":\"globalTableRoot\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"},{\"name\":\"operatorSetIndex\",\"type\":\"uint32\",\"internalType\":\"uint32\"},{\"name\":\"proof\",\"type\":\"bytes\",\"internalType\":\"bytes\"},{\"name\":\"operatorSet\",\"type\":\"tuple\",\"internalType\":\"structOperatorSet\",\"components\":[{\"name\":\"avs\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"id\",\"type\":\"uint32\",\"internalType\":\"uint32\"}]},{\"name\":\"operatorInfos\",\"type\":\"tuple[]\",\"internalType\":\"structIECDSATableCalculatorTypes.ECDSAOperatorInfo[]\",\"components\":[{\"name\":\"pubkey\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"weights\",\"type\":\"uint96[]\",\"internalType\":\"uint96[]\"}]},{\"name\":\"config\",\"type\":\"tuple\",\"internalType\":\"structICrossChainRegistryTypes.OperatorSetConfig\",\"components\":[{\"name\":\"owner\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"maxStalenessPeriod\",\"type\":\"uint32\",\"internalType\":\"uint32\"}]}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"event\",\"name\":\"NewglobalTableRoot\",\"inputs\":[{\"name\":\"referenceTimestamp\",\"type\":\"uint32\",\"indexed\":false,\"internalType\":\"uint32\"},{\"name\":\"globalTableRoot\",\"type\":\"bytes32\",\"indexed\":false,\"internalType\":\"bytes32\"}],\"anonymous\":false},{\"type\":\"error\",\"name\":\"GlobalTableRootUpdateFailed\",\"inputs\":[]}]", +} + +// IOperatorTableUpdaterABI is the input ABI used to generate the binding from. +// Deprecated: Use IOperatorTableUpdaterMetaData.ABI instead. +var IOperatorTableUpdaterABI = IOperatorTableUpdaterMetaData.ABI + +// IOperatorTableUpdater is an auto generated Go binding around an Ethereum contract. +type IOperatorTableUpdater struct { + IOperatorTableUpdaterCaller // Read-only binding to the contract + IOperatorTableUpdaterTransactor // Write-only binding to the contract + IOperatorTableUpdaterFilterer // Log filterer for contract events +} + +// IOperatorTableUpdaterCaller is an auto generated read-only Go binding around an Ethereum contract. +type IOperatorTableUpdaterCaller struct { + contract *bind.BoundContract // Generic contract wrapper for the low level calls +} + +// IOperatorTableUpdaterTransactor is an auto generated write-only Go binding around an Ethereum contract. +type IOperatorTableUpdaterTransactor struct { + contract *bind.BoundContract // Generic contract wrapper for the low level calls +} + +// IOperatorTableUpdaterFilterer is an auto generated log filtering Go binding around an Ethereum contract events. +type IOperatorTableUpdaterFilterer struct { + contract *bind.BoundContract // Generic contract wrapper for the low level calls +} + +// IOperatorTableUpdaterSession is an auto generated Go binding around an Ethereum contract, +// with pre-set call and transact options. +type IOperatorTableUpdaterSession struct { + Contract *IOperatorTableUpdater // Generic contract binding to set the session for + CallOpts bind.CallOpts // Call options to use throughout this session + TransactOpts bind.TransactOpts // Transaction auth options to use throughout this session +} + +// IOperatorTableUpdaterCallerSession is an auto generated read-only Go binding around an Ethereum contract, +// with pre-set call options. +type IOperatorTableUpdaterCallerSession struct { + Contract *IOperatorTableUpdaterCaller // Generic contract caller binding to set the session for + CallOpts bind.CallOpts // Call options to use throughout this session +} + +// IOperatorTableUpdaterTransactorSession is an auto generated write-only Go binding around an Ethereum contract, +// with pre-set transact options. +type IOperatorTableUpdaterTransactorSession struct { + Contract *IOperatorTableUpdaterTransactor // Generic contract transactor binding to set the session for + TransactOpts bind.TransactOpts // Transaction auth options to use throughout this session +} + +// IOperatorTableUpdaterRaw is an auto generated low-level Go binding around an Ethereum contract. +type IOperatorTableUpdaterRaw struct { + Contract *IOperatorTableUpdater // Generic contract binding to access the raw methods on +} + +// IOperatorTableUpdaterCallerRaw is an auto generated low-level read-only Go binding around an Ethereum contract. +type IOperatorTableUpdaterCallerRaw struct { + Contract *IOperatorTableUpdaterCaller // Generic read-only contract binding to access the raw methods on +} + +// IOperatorTableUpdaterTransactorRaw is an auto generated low-level write-only Go binding around an Ethereum contract. +type IOperatorTableUpdaterTransactorRaw struct { + Contract *IOperatorTableUpdaterTransactor // Generic write-only contract binding to access the raw methods on +} + +// NewIOperatorTableUpdater creates a new instance of IOperatorTableUpdater, bound to a specific deployed contract. +func NewIOperatorTableUpdater(address common.Address, backend bind.ContractBackend) (*IOperatorTableUpdater, error) { + contract, err := bindIOperatorTableUpdater(address, backend, backend, backend) + if err != nil { + return nil, err + } + return &IOperatorTableUpdater{IOperatorTableUpdaterCaller: IOperatorTableUpdaterCaller{contract: contract}, IOperatorTableUpdaterTransactor: IOperatorTableUpdaterTransactor{contract: contract}, IOperatorTableUpdaterFilterer: IOperatorTableUpdaterFilterer{contract: contract}}, nil +} + +// NewIOperatorTableUpdaterCaller creates a new read-only instance of IOperatorTableUpdater, bound to a specific deployed contract. +func NewIOperatorTableUpdaterCaller(address common.Address, caller bind.ContractCaller) (*IOperatorTableUpdaterCaller, error) { + contract, err := bindIOperatorTableUpdater(address, caller, nil, nil) + if err != nil { + return nil, err + } + return &IOperatorTableUpdaterCaller{contract: contract}, nil +} + +// NewIOperatorTableUpdaterTransactor creates a new write-only instance of IOperatorTableUpdater, bound to a specific deployed contract. +func NewIOperatorTableUpdaterTransactor(address common.Address, transactor bind.ContractTransactor) (*IOperatorTableUpdaterTransactor, error) { + contract, err := bindIOperatorTableUpdater(address, nil, transactor, nil) + if err != nil { + return nil, err + } + return &IOperatorTableUpdaterTransactor{contract: contract}, nil +} + +// NewIOperatorTableUpdaterFilterer creates a new log filterer instance of IOperatorTableUpdater, bound to a specific deployed contract. +func NewIOperatorTableUpdaterFilterer(address common.Address, filterer bind.ContractFilterer) (*IOperatorTableUpdaterFilterer, error) { + contract, err := bindIOperatorTableUpdater(address, nil, nil, filterer) + if err != nil { + return nil, err + } + return &IOperatorTableUpdaterFilterer{contract: contract}, nil +} + +// bindIOperatorTableUpdater binds a generic wrapper to an already deployed contract. +func bindIOperatorTableUpdater(address common.Address, caller bind.ContractCaller, transactor bind.ContractTransactor, filterer bind.ContractFilterer) (*bind.BoundContract, error) { + parsed, err := IOperatorTableUpdaterMetaData.GetAbi() + if err != nil { + return nil, err + } + return bind.NewBoundContract(address, *parsed, caller, transactor, filterer), nil +} + +// Call invokes the (constant) contract method with params as input values and +// sets the output to result. The result type might be a single field for simple +// returns, a slice of interfaces for anonymous returns and a struct for named +// returns. +func (_IOperatorTableUpdater *IOperatorTableUpdaterRaw) Call(opts *bind.CallOpts, result *[]interface{}, method string, params ...interface{}) error { + return _IOperatorTableUpdater.Contract.IOperatorTableUpdaterCaller.contract.Call(opts, result, method, params...) +} + +// Transfer initiates a plain transaction to move funds to the contract, calling +// its default method if one is available. +func (_IOperatorTableUpdater *IOperatorTableUpdaterRaw) Transfer(opts *bind.TransactOpts) (*types.Transaction, error) { + return _IOperatorTableUpdater.Contract.IOperatorTableUpdaterTransactor.contract.Transfer(opts) +} + +// Transact invokes the (paid) contract method with params as input values. +func (_IOperatorTableUpdater *IOperatorTableUpdaterRaw) Transact(opts *bind.TransactOpts, method string, params ...interface{}) (*types.Transaction, error) { + return _IOperatorTableUpdater.Contract.IOperatorTableUpdaterTransactor.contract.Transact(opts, method, params...) +} + +// Call invokes the (constant) contract method with params as input values and +// sets the output to result. The result type might be a single field for simple +// returns, a slice of interfaces for anonymous returns and a struct for named +// returns. +func (_IOperatorTableUpdater *IOperatorTableUpdaterCallerRaw) Call(opts *bind.CallOpts, result *[]interface{}, method string, params ...interface{}) error { + return _IOperatorTableUpdater.Contract.contract.Call(opts, result, method, params...) +} + +// Transfer initiates a plain transaction to move funds to the contract, calling +// its default method if one is available. +func (_IOperatorTableUpdater *IOperatorTableUpdaterTransactorRaw) Transfer(opts *bind.TransactOpts) (*types.Transaction, error) { + return _IOperatorTableUpdater.Contract.contract.Transfer(opts) +} + +// Transact invokes the (paid) contract method with params as input values. +func (_IOperatorTableUpdater *IOperatorTableUpdaterTransactorRaw) Transact(opts *bind.TransactOpts, method string, params ...interface{}) (*types.Transaction, error) { + return _IOperatorTableUpdater.Contract.contract.Transact(opts, method, params...) +} + +// GetCurrentGlobalTableRoot is a free data retrieval call binding the contract method 0x28522d79. +// +// Solidity: function getCurrentGlobalTableRoot() view returns(bytes32 globalTableRoot) +func (_IOperatorTableUpdater *IOperatorTableUpdaterCaller) GetCurrentGlobalTableRoot(opts *bind.CallOpts) ([32]byte, error) { + var out []interface{} + err := _IOperatorTableUpdater.contract.Call(opts, &out, "getCurrentGlobalTableRoot") + + if err != nil { + return *new([32]byte), err + } + + out0 := *abi.ConvertType(out[0], new([32]byte)).(*[32]byte) + + return out0, err + +} + +// GetCurrentGlobalTableRoot is a free data retrieval call binding the contract method 0x28522d79. +// +// Solidity: function getCurrentGlobalTableRoot() view returns(bytes32 globalTableRoot) +func (_IOperatorTableUpdater *IOperatorTableUpdaterSession) GetCurrentGlobalTableRoot() ([32]byte, error) { + return _IOperatorTableUpdater.Contract.GetCurrentGlobalTableRoot(&_IOperatorTableUpdater.CallOpts) +} + +// GetCurrentGlobalTableRoot is a free data retrieval call binding the contract method 0x28522d79. +// +// Solidity: function getCurrentGlobalTableRoot() view returns(bytes32 globalTableRoot) +func (_IOperatorTableUpdater *IOperatorTableUpdaterCallerSession) GetCurrentGlobalTableRoot() ([32]byte, error) { + return _IOperatorTableUpdater.Contract.GetCurrentGlobalTableRoot(&_IOperatorTableUpdater.CallOpts) +} + +// GetTableRootByTimestamp is a free data retrieval call binding the contract method 0x9ea8dbce. +// +// Solidity: function getTableRootByTimestamp(uint32 referenceTimestamp) view returns(bytes32 tableRoot) +func (_IOperatorTableUpdater *IOperatorTableUpdaterCaller) GetTableRootByTimestamp(opts *bind.CallOpts, referenceTimestamp uint32) ([32]byte, error) { + var out []interface{} + err := _IOperatorTableUpdater.contract.Call(opts, &out, "getTableRootByTimestamp", referenceTimestamp) + + if err != nil { + return *new([32]byte), err + } + + out0 := *abi.ConvertType(out[0], new([32]byte)).(*[32]byte) + + return out0, err + +} + +// GetTableRootByTimestamp is a free data retrieval call binding the contract method 0x9ea8dbce. +// +// Solidity: function getTableRootByTimestamp(uint32 referenceTimestamp) view returns(bytes32 tableRoot) +func (_IOperatorTableUpdater *IOperatorTableUpdaterSession) GetTableRootByTimestamp(referenceTimestamp uint32) ([32]byte, error) { + return _IOperatorTableUpdater.Contract.GetTableRootByTimestamp(&_IOperatorTableUpdater.CallOpts, referenceTimestamp) +} + +// GetTableRootByTimestamp is a free data retrieval call binding the contract method 0x9ea8dbce. +// +// Solidity: function getTableRootByTimestamp(uint32 referenceTimestamp) view returns(bytes32 tableRoot) +func (_IOperatorTableUpdater *IOperatorTableUpdaterCallerSession) GetTableRootByTimestamp(referenceTimestamp uint32) ([32]byte, error) { + return _IOperatorTableUpdater.Contract.GetTableRootByTimestamp(&_IOperatorTableUpdater.CallOpts, referenceTimestamp) +} + +// ConfirmGlobalTableRoot is a paid mutator transaction binding the contract method 0x6ab40904. +// +// Solidity: function confirmGlobalTableRoot((uint32,bytes32,(uint256,uint256),(uint256[2],uint256[2]),(uint32,bytes,((uint256,uint256),uint256[]))[]) globalTableRootCert, bytes32 globalTableRoot, uint32 referenceTimestamp) returns() +func (_IOperatorTableUpdater *IOperatorTableUpdaterTransactor) ConfirmGlobalTableRoot(opts *bind.TransactOpts, globalTableRootCert IBN254CertificateVerifierTypesBN254Certificate, globalTableRoot [32]byte, referenceTimestamp uint32) (*types.Transaction, error) { + return _IOperatorTableUpdater.contract.Transact(opts, "confirmGlobalTableRoot", globalTableRootCert, globalTableRoot, referenceTimestamp) +} + +// ConfirmGlobalTableRoot is a paid mutator transaction binding the contract method 0x6ab40904. +// +// Solidity: function confirmGlobalTableRoot((uint32,bytes32,(uint256,uint256),(uint256[2],uint256[2]),(uint32,bytes,((uint256,uint256),uint256[]))[]) globalTableRootCert, bytes32 globalTableRoot, uint32 referenceTimestamp) returns() +func (_IOperatorTableUpdater *IOperatorTableUpdaterSession) ConfirmGlobalTableRoot(globalTableRootCert IBN254CertificateVerifierTypesBN254Certificate, globalTableRoot [32]byte, referenceTimestamp uint32) (*types.Transaction, error) { + return _IOperatorTableUpdater.Contract.ConfirmGlobalTableRoot(&_IOperatorTableUpdater.TransactOpts, globalTableRootCert, globalTableRoot, referenceTimestamp) +} + +// ConfirmGlobalTableRoot is a paid mutator transaction binding the contract method 0x6ab40904. +// +// Solidity: function confirmGlobalTableRoot((uint32,bytes32,(uint256,uint256),(uint256[2],uint256[2]),(uint32,bytes,((uint256,uint256),uint256[]))[]) globalTableRootCert, bytes32 globalTableRoot, uint32 referenceTimestamp) returns() +func (_IOperatorTableUpdater *IOperatorTableUpdaterTransactorSession) ConfirmGlobalTableRoot(globalTableRootCert IBN254CertificateVerifierTypesBN254Certificate, globalTableRoot [32]byte, referenceTimestamp uint32) (*types.Transaction, error) { + return _IOperatorTableUpdater.Contract.ConfirmGlobalTableRoot(&_IOperatorTableUpdater.TransactOpts, globalTableRootCert, globalTableRoot, referenceTimestamp) +} + +// SetGlobalRootConfirmationThreshold is a paid mutator transaction binding the contract method 0x2370356c. +// +// Solidity: function setGlobalRootConfirmationThreshold(uint16 bps) returns() +func (_IOperatorTableUpdater *IOperatorTableUpdaterTransactor) SetGlobalRootConfirmationThreshold(opts *bind.TransactOpts, bps uint16) (*types.Transaction, error) { + return _IOperatorTableUpdater.contract.Transact(opts, "setGlobalRootConfirmationThreshold", bps) +} + +// SetGlobalRootConfirmationThreshold is a paid mutator transaction binding the contract method 0x2370356c. +// +// Solidity: function setGlobalRootConfirmationThreshold(uint16 bps) returns() +func (_IOperatorTableUpdater *IOperatorTableUpdaterSession) SetGlobalRootConfirmationThreshold(bps uint16) (*types.Transaction, error) { + return _IOperatorTableUpdater.Contract.SetGlobalRootConfirmationThreshold(&_IOperatorTableUpdater.TransactOpts, bps) +} + +// SetGlobalRootConfirmationThreshold is a paid mutator transaction binding the contract method 0x2370356c. +// +// Solidity: function setGlobalRootConfirmationThreshold(uint16 bps) returns() +func (_IOperatorTableUpdater *IOperatorTableUpdaterTransactorSession) SetGlobalRootConfirmationThreshold(bps uint16) (*types.Transaction, error) { + return _IOperatorTableUpdater.Contract.SetGlobalRootConfirmationThreshold(&_IOperatorTableUpdater.TransactOpts, bps) +} + +// SetGlobalRootConfirmerSet is a paid mutator transaction binding the contract method 0x0371406e. +// +// Solidity: function setGlobalRootConfirmerSet((address,uint32) operatorSet) returns() +func (_IOperatorTableUpdater *IOperatorTableUpdaterTransactor) SetGlobalRootConfirmerSet(opts *bind.TransactOpts, operatorSet OperatorSet) (*types.Transaction, error) { + return _IOperatorTableUpdater.contract.Transact(opts, "setGlobalRootConfirmerSet", operatorSet) +} + +// SetGlobalRootConfirmerSet is a paid mutator transaction binding the contract method 0x0371406e. +// +// Solidity: function setGlobalRootConfirmerSet((address,uint32) operatorSet) returns() +func (_IOperatorTableUpdater *IOperatorTableUpdaterSession) SetGlobalRootConfirmerSet(operatorSet OperatorSet) (*types.Transaction, error) { + return _IOperatorTableUpdater.Contract.SetGlobalRootConfirmerSet(&_IOperatorTableUpdater.TransactOpts, operatorSet) +} + +// SetGlobalRootConfirmerSet is a paid mutator transaction binding the contract method 0x0371406e. +// +// Solidity: function setGlobalRootConfirmerSet((address,uint32) operatorSet) returns() +func (_IOperatorTableUpdater *IOperatorTableUpdaterTransactorSession) SetGlobalRootConfirmerSet(operatorSet OperatorSet) (*types.Transaction, error) { + return _IOperatorTableUpdater.Contract.SetGlobalRootConfirmerSet(&_IOperatorTableUpdater.TransactOpts, operatorSet) +} + +// UpdateBN254OperatorTable is a paid mutator transaction binding the contract method 0x71034fe1. +// +// Solidity: function updateBN254OperatorTable(uint32 referenceTimestamp, bytes32 globalTableRoot, uint32 operatorSetIndex, bytes proof, (address,uint32) operatorSet, (bytes32,uint256,(uint256,uint256),uint256[]) operatorSetInfo, (address,uint32) config) returns() +func (_IOperatorTableUpdater *IOperatorTableUpdaterTransactor) UpdateBN254OperatorTable(opts *bind.TransactOpts, referenceTimestamp uint32, globalTableRoot [32]byte, operatorSetIndex uint32, proof []byte, operatorSet OperatorSet, operatorSetInfo IBN254TableCalculatorTypesBN254OperatorSetInfo, config ICrossChainRegistryTypesOperatorSetConfig) (*types.Transaction, error) { + return _IOperatorTableUpdater.contract.Transact(opts, "updateBN254OperatorTable", referenceTimestamp, globalTableRoot, operatorSetIndex, proof, operatorSet, operatorSetInfo, config) +} + +// UpdateBN254OperatorTable is a paid mutator transaction binding the contract method 0x71034fe1. +// +// Solidity: function updateBN254OperatorTable(uint32 referenceTimestamp, bytes32 globalTableRoot, uint32 operatorSetIndex, bytes proof, (address,uint32) operatorSet, (bytes32,uint256,(uint256,uint256),uint256[]) operatorSetInfo, (address,uint32) config) returns() +func (_IOperatorTableUpdater *IOperatorTableUpdaterSession) UpdateBN254OperatorTable(referenceTimestamp uint32, globalTableRoot [32]byte, operatorSetIndex uint32, proof []byte, operatorSet OperatorSet, operatorSetInfo IBN254TableCalculatorTypesBN254OperatorSetInfo, config ICrossChainRegistryTypesOperatorSetConfig) (*types.Transaction, error) { + return _IOperatorTableUpdater.Contract.UpdateBN254OperatorTable(&_IOperatorTableUpdater.TransactOpts, referenceTimestamp, globalTableRoot, operatorSetIndex, proof, operatorSet, operatorSetInfo, config) +} + +// UpdateBN254OperatorTable is a paid mutator transaction binding the contract method 0x71034fe1. +// +// Solidity: function updateBN254OperatorTable(uint32 referenceTimestamp, bytes32 globalTableRoot, uint32 operatorSetIndex, bytes proof, (address,uint32) operatorSet, (bytes32,uint256,(uint256,uint256),uint256[]) operatorSetInfo, (address,uint32) config) returns() +func (_IOperatorTableUpdater *IOperatorTableUpdaterTransactorSession) UpdateBN254OperatorTable(referenceTimestamp uint32, globalTableRoot [32]byte, operatorSetIndex uint32, proof []byte, operatorSet OperatorSet, operatorSetInfo IBN254TableCalculatorTypesBN254OperatorSetInfo, config ICrossChainRegistryTypesOperatorSetConfig) (*types.Transaction, error) { + return _IOperatorTableUpdater.Contract.UpdateBN254OperatorTable(&_IOperatorTableUpdater.TransactOpts, referenceTimestamp, globalTableRoot, operatorSetIndex, proof, operatorSet, operatorSetInfo, config) +} + +// UpdateECDSAOperatorTable is a paid mutator transaction binding the contract method 0x3397579c. +// +// Solidity: function updateECDSAOperatorTable(uint32 referenceTimestamp, bytes32 globalTableRoot, uint32 operatorSetIndex, bytes proof, (address,uint32) operatorSet, (address,uint96[])[] operatorInfos, (address,uint32) config) returns() +func (_IOperatorTableUpdater *IOperatorTableUpdaterTransactor) UpdateECDSAOperatorTable(opts *bind.TransactOpts, referenceTimestamp uint32, globalTableRoot [32]byte, operatorSetIndex uint32, proof []byte, operatorSet OperatorSet, operatorInfos []IECDSATableCalculatorTypesECDSAOperatorInfo, config ICrossChainRegistryTypesOperatorSetConfig) (*types.Transaction, error) { + return _IOperatorTableUpdater.contract.Transact(opts, "updateECDSAOperatorTable", referenceTimestamp, globalTableRoot, operatorSetIndex, proof, operatorSet, operatorInfos, config) +} + +// UpdateECDSAOperatorTable is a paid mutator transaction binding the contract method 0x3397579c. +// +// Solidity: function updateECDSAOperatorTable(uint32 referenceTimestamp, bytes32 globalTableRoot, uint32 operatorSetIndex, bytes proof, (address,uint32) operatorSet, (address,uint96[])[] operatorInfos, (address,uint32) config) returns() +func (_IOperatorTableUpdater *IOperatorTableUpdaterSession) UpdateECDSAOperatorTable(referenceTimestamp uint32, globalTableRoot [32]byte, operatorSetIndex uint32, proof []byte, operatorSet OperatorSet, operatorInfos []IECDSATableCalculatorTypesECDSAOperatorInfo, config ICrossChainRegistryTypesOperatorSetConfig) (*types.Transaction, error) { + return _IOperatorTableUpdater.Contract.UpdateECDSAOperatorTable(&_IOperatorTableUpdater.TransactOpts, referenceTimestamp, globalTableRoot, operatorSetIndex, proof, operatorSet, operatorInfos, config) +} + +// UpdateECDSAOperatorTable is a paid mutator transaction binding the contract method 0x3397579c. +// +// Solidity: function updateECDSAOperatorTable(uint32 referenceTimestamp, bytes32 globalTableRoot, uint32 operatorSetIndex, bytes proof, (address,uint32) operatorSet, (address,uint96[])[] operatorInfos, (address,uint32) config) returns() +func (_IOperatorTableUpdater *IOperatorTableUpdaterTransactorSession) UpdateECDSAOperatorTable(referenceTimestamp uint32, globalTableRoot [32]byte, operatorSetIndex uint32, proof []byte, operatorSet OperatorSet, operatorInfos []IECDSATableCalculatorTypesECDSAOperatorInfo, config ICrossChainRegistryTypesOperatorSetConfig) (*types.Transaction, error) { + return _IOperatorTableUpdater.Contract.UpdateECDSAOperatorTable(&_IOperatorTableUpdater.TransactOpts, referenceTimestamp, globalTableRoot, operatorSetIndex, proof, operatorSet, operatorInfos, config) +} + +// IOperatorTableUpdaterNewglobalTableRootIterator is returned from FilterNewglobalTableRoot and is used to iterate over the raw logs and unpacked data for NewglobalTableRoot events raised by the IOperatorTableUpdater contract. +type IOperatorTableUpdaterNewglobalTableRootIterator struct { + Event *IOperatorTableUpdaterNewglobalTableRoot // 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 *IOperatorTableUpdaterNewglobalTableRootIterator) 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(IOperatorTableUpdaterNewglobalTableRoot) + 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(IOperatorTableUpdaterNewglobalTableRoot) + 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 *IOperatorTableUpdaterNewglobalTableRootIterator) Error() error { + return it.fail +} + +// Close terminates the iteration process, releasing any pending underlying +// resources. +func (it *IOperatorTableUpdaterNewglobalTableRootIterator) Close() error { + it.sub.Unsubscribe() + return nil +} + +// IOperatorTableUpdaterNewglobalTableRoot represents a NewglobalTableRoot event raised by the IOperatorTableUpdater contract. +type IOperatorTableUpdaterNewglobalTableRoot struct { + ReferenceTimestamp uint32 + GlobalTableRoot [32]byte + Raw types.Log // Blockchain specific contextual infos +} + +// FilterNewglobalTableRoot is a free log retrieval operation binding the contract event 0xbb96ecabc83b99776c3ba3d12d8131e99aeca109d673db36e42959d154359a65. +// +// Solidity: event NewglobalTableRoot(uint32 referenceTimestamp, bytes32 globalTableRoot) +func (_IOperatorTableUpdater *IOperatorTableUpdaterFilterer) FilterNewglobalTableRoot(opts *bind.FilterOpts) (*IOperatorTableUpdaterNewglobalTableRootIterator, error) { + + logs, sub, err := _IOperatorTableUpdater.contract.FilterLogs(opts, "NewglobalTableRoot") + if err != nil { + return nil, err + } + return &IOperatorTableUpdaterNewglobalTableRootIterator{contract: _IOperatorTableUpdater.contract, event: "NewglobalTableRoot", logs: logs, sub: sub}, nil +} + +// WatchNewglobalTableRoot is a free log subscription operation binding the contract event 0xbb96ecabc83b99776c3ba3d12d8131e99aeca109d673db36e42959d154359a65. +// +// Solidity: event NewglobalTableRoot(uint32 referenceTimestamp, bytes32 globalTableRoot) +func (_IOperatorTableUpdater *IOperatorTableUpdaterFilterer) WatchNewglobalTableRoot(opts *bind.WatchOpts, sink chan<- *IOperatorTableUpdaterNewglobalTableRoot) (event.Subscription, error) { + + logs, sub, err := _IOperatorTableUpdater.contract.WatchLogs(opts, "NewglobalTableRoot") + 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(IOperatorTableUpdaterNewglobalTableRoot) + if err := _IOperatorTableUpdater.contract.UnpackLog(event, "NewglobalTableRoot", 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 +} + +// ParseNewglobalTableRoot is a log parse operation binding the contract event 0xbb96ecabc83b99776c3ba3d12d8131e99aeca109d673db36e42959d154359a65. +// +// Solidity: event NewglobalTableRoot(uint32 referenceTimestamp, bytes32 globalTableRoot) +func (_IOperatorTableUpdater *IOperatorTableUpdaterFilterer) ParseNewglobalTableRoot(log types.Log) (*IOperatorTableUpdaterNewglobalTableRoot, error) { + event := new(IOperatorTableUpdaterNewglobalTableRoot) + if err := _IOperatorTableUpdater.contract.UnpackLog(event, "NewglobalTableRoot", log); err != nil { + return nil, err + } + event.Raw = log + return event, nil +} diff --git a/pkg/bindings/Merkle/binding.go b/pkg/bindings/Merkle/binding.go index 0dc9f1d9c9..8e8f135acc 100644 --- a/pkg/bindings/Merkle/binding.go +++ b/pkg/bindings/Merkle/binding.go @@ -32,7 +32,7 @@ var ( // MerkleMetaData contains all meta data concerning the Merkle contract. var MerkleMetaData = &bind.MetaData{ ABI: "[{\"type\":\"error\",\"name\":\"InvalidProofLength\",\"inputs\":[]}]", - Bin: "0x60556032600b8282823980515f1a607314602657634e487b7160e01b5f525f60045260245ffd5b305f52607381538281f3fe730000000000000000000000000000000000000000301460806040525f5ffdfea264697066735822122085b24342099ee34c979b25a8181cab47b19a7b5bb98497e7c396cfeef68fc84564736f6c634300081b0033", + Bin: "0x60556032600b8282823980515f1a607314602657634e487b7160e01b5f525f60045260245ffd5b305f52607381538281f3fe730000000000000000000000000000000000000000301460806040525f5ffdfea26469706673582212206e7fb0f8833612793591bf6b2f7ef063dab93db699ada40ea9eddd4072941d8364736f6c634300081b0033", } // MerkleABI is the input ABI used to generate the binding from. diff --git a/pkg/bindings/RewardsCoordinator/binding.go b/pkg/bindings/RewardsCoordinator/binding.go index f908f56672..a7b2259129 100644 --- a/pkg/bindings/RewardsCoordinator/binding.go +++ b/pkg/bindings/RewardsCoordinator/binding.go @@ -115,7 +115,7 @@ type OperatorSet struct { // RewardsCoordinatorMetaData contains all meta data concerning the RewardsCoordinator contract. var RewardsCoordinatorMetaData = &bind.MetaData{ ABI: "[{\"type\":\"constructor\",\"inputs\":[{\"name\":\"params\",\"type\":\"tuple\",\"internalType\":\"structIRewardsCoordinatorTypes.RewardsCoordinatorConstructorParams\",\"components\":[{\"name\":\"delegationManager\",\"type\":\"address\",\"internalType\":\"contractIDelegationManager\"},{\"name\":\"strategyManager\",\"type\":\"address\",\"internalType\":\"contractIStrategyManager\"},{\"name\":\"allocationManager\",\"type\":\"address\",\"internalType\":\"contractIAllocationManager\"},{\"name\":\"pauserRegistry\",\"type\":\"address\",\"internalType\":\"contractIPauserRegistry\"},{\"name\":\"permissionController\",\"type\":\"address\",\"internalType\":\"contractIPermissionController\"},{\"name\":\"CALCULATION_INTERVAL_SECONDS\",\"type\":\"uint32\",\"internalType\":\"uint32\"},{\"name\":\"MAX_REWARDS_DURATION\",\"type\":\"uint32\",\"internalType\":\"uint32\"},{\"name\":\"MAX_RETROACTIVE_LENGTH\",\"type\":\"uint32\",\"internalType\":\"uint32\"},{\"name\":\"MAX_FUTURE_LENGTH\",\"type\":\"uint32\",\"internalType\":\"uint32\"},{\"name\":\"GENESIS_REWARDS_TIMESTAMP\",\"type\":\"uint32\",\"internalType\":\"uint32\"},{\"name\":\"version\",\"type\":\"string\",\"internalType\":\"string\"}]}],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"CALCULATION_INTERVAL_SECONDS\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"uint32\",\"internalType\":\"uint32\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"GENESIS_REWARDS_TIMESTAMP\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"uint32\",\"internalType\":\"uint32\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"MAX_FUTURE_LENGTH\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"uint32\",\"internalType\":\"uint32\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"MAX_RETROACTIVE_LENGTH\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"uint32\",\"internalType\":\"uint32\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"MAX_REWARDS_DURATION\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"uint32\",\"internalType\":\"uint32\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"activationDelay\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"uint32\",\"internalType\":\"uint32\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"allocationManager\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"contractIAllocationManager\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"beaconChainETHStrategy\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"contractIStrategy\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"calculateEarnerLeafHash\",\"inputs\":[{\"name\":\"leaf\",\"type\":\"tuple\",\"internalType\":\"structIRewardsCoordinatorTypes.EarnerTreeMerkleLeaf\",\"components\":[{\"name\":\"earner\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"earnerTokenRoot\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}]}],\"outputs\":[{\"name\":\"\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"stateMutability\":\"pure\"},{\"type\":\"function\",\"name\":\"calculateTokenLeafHash\",\"inputs\":[{\"name\":\"leaf\",\"type\":\"tuple\",\"internalType\":\"structIRewardsCoordinatorTypes.TokenTreeMerkleLeaf\",\"components\":[{\"name\":\"token\",\"type\":\"address\",\"internalType\":\"contractIERC20\"},{\"name\":\"cumulativeEarnings\",\"type\":\"uint256\",\"internalType\":\"uint256\"}]}],\"outputs\":[{\"name\":\"\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"stateMutability\":\"pure\"},{\"type\":\"function\",\"name\":\"checkClaim\",\"inputs\":[{\"name\":\"claim\",\"type\":\"tuple\",\"internalType\":\"structIRewardsCoordinatorTypes.RewardsMerkleClaim\",\"components\":[{\"name\":\"rootIndex\",\"type\":\"uint32\",\"internalType\":\"uint32\"},{\"name\":\"earnerIndex\",\"type\":\"uint32\",\"internalType\":\"uint32\"},{\"name\":\"earnerTreeProof\",\"type\":\"bytes\",\"internalType\":\"bytes\"},{\"name\":\"earnerLeaf\",\"type\":\"tuple\",\"internalType\":\"structIRewardsCoordinatorTypes.EarnerTreeMerkleLeaf\",\"components\":[{\"name\":\"earner\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"earnerTokenRoot\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}]},{\"name\":\"tokenIndices\",\"type\":\"uint32[]\",\"internalType\":\"uint32[]\"},{\"name\":\"tokenTreeProofs\",\"type\":\"bytes[]\",\"internalType\":\"bytes[]\"},{\"name\":\"tokenLeaves\",\"type\":\"tuple[]\",\"internalType\":\"structIRewardsCoordinatorTypes.TokenTreeMerkleLeaf[]\",\"components\":[{\"name\":\"token\",\"type\":\"address\",\"internalType\":\"contractIERC20\"},{\"name\":\"cumulativeEarnings\",\"type\":\"uint256\",\"internalType\":\"uint256\"}]}]}],\"outputs\":[{\"name\":\"\",\"type\":\"bool\",\"internalType\":\"bool\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"claimerFor\",\"inputs\":[{\"name\":\"earner\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[{\"name\":\"claimer\",\"type\":\"address\",\"internalType\":\"address\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"createAVSRewardsSubmission\",\"inputs\":[{\"name\":\"rewardsSubmissions\",\"type\":\"tuple[]\",\"internalType\":\"structIRewardsCoordinatorTypes.RewardsSubmission[]\",\"components\":[{\"name\":\"strategiesAndMultipliers\",\"type\":\"tuple[]\",\"internalType\":\"structIRewardsCoordinatorTypes.StrategyAndMultiplier[]\",\"components\":[{\"name\":\"strategy\",\"type\":\"address\",\"internalType\":\"contractIStrategy\"},{\"name\":\"multiplier\",\"type\":\"uint96\",\"internalType\":\"uint96\"}]},{\"name\":\"token\",\"type\":\"address\",\"internalType\":\"contractIERC20\"},{\"name\":\"amount\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"startTimestamp\",\"type\":\"uint32\",\"internalType\":\"uint32\"},{\"name\":\"duration\",\"type\":\"uint32\",\"internalType\":\"uint32\"}]}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"createOperatorDirectedAVSRewardsSubmission\",\"inputs\":[{\"name\":\"avs\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"operatorDirectedRewardsSubmissions\",\"type\":\"tuple[]\",\"internalType\":\"structIRewardsCoordinatorTypes.OperatorDirectedRewardsSubmission[]\",\"components\":[{\"name\":\"strategiesAndMultipliers\",\"type\":\"tuple[]\",\"internalType\":\"structIRewardsCoordinatorTypes.StrategyAndMultiplier[]\",\"components\":[{\"name\":\"strategy\",\"type\":\"address\",\"internalType\":\"contractIStrategy\"},{\"name\":\"multiplier\",\"type\":\"uint96\",\"internalType\":\"uint96\"}]},{\"name\":\"token\",\"type\":\"address\",\"internalType\":\"contractIERC20\"},{\"name\":\"operatorRewards\",\"type\":\"tuple[]\",\"internalType\":\"structIRewardsCoordinatorTypes.OperatorReward[]\",\"components\":[{\"name\":\"operator\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint256\",\"internalType\":\"uint256\"}]},{\"name\":\"startTimestamp\",\"type\":\"uint32\",\"internalType\":\"uint32\"},{\"name\":\"duration\",\"type\":\"uint32\",\"internalType\":\"uint32\"},{\"name\":\"description\",\"type\":\"string\",\"internalType\":\"string\"}]}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"createOperatorDirectedOperatorSetRewardsSubmission\",\"inputs\":[{\"name\":\"operatorSet\",\"type\":\"tuple\",\"internalType\":\"structOperatorSet\",\"components\":[{\"name\":\"avs\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"id\",\"type\":\"uint32\",\"internalType\":\"uint32\"}]},{\"name\":\"operatorDirectedRewardsSubmissions\",\"type\":\"tuple[]\",\"internalType\":\"structIRewardsCoordinatorTypes.OperatorDirectedRewardsSubmission[]\",\"components\":[{\"name\":\"strategiesAndMultipliers\",\"type\":\"tuple[]\",\"internalType\":\"structIRewardsCoordinatorTypes.StrategyAndMultiplier[]\",\"components\":[{\"name\":\"strategy\",\"type\":\"address\",\"internalType\":\"contractIStrategy\"},{\"name\":\"multiplier\",\"type\":\"uint96\",\"internalType\":\"uint96\"}]},{\"name\":\"token\",\"type\":\"address\",\"internalType\":\"contractIERC20\"},{\"name\":\"operatorRewards\",\"type\":\"tuple[]\",\"internalType\":\"structIRewardsCoordinatorTypes.OperatorReward[]\",\"components\":[{\"name\":\"operator\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint256\",\"internalType\":\"uint256\"}]},{\"name\":\"startTimestamp\",\"type\":\"uint32\",\"internalType\":\"uint32\"},{\"name\":\"duration\",\"type\":\"uint32\",\"internalType\":\"uint32\"},{\"name\":\"description\",\"type\":\"string\",\"internalType\":\"string\"}]}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"createRewardsForAllEarners\",\"inputs\":[{\"name\":\"rewardsSubmissions\",\"type\":\"tuple[]\",\"internalType\":\"structIRewardsCoordinatorTypes.RewardsSubmission[]\",\"components\":[{\"name\":\"strategiesAndMultipliers\",\"type\":\"tuple[]\",\"internalType\":\"structIRewardsCoordinatorTypes.StrategyAndMultiplier[]\",\"components\":[{\"name\":\"strategy\",\"type\":\"address\",\"internalType\":\"contractIStrategy\"},{\"name\":\"multiplier\",\"type\":\"uint96\",\"internalType\":\"uint96\"}]},{\"name\":\"token\",\"type\":\"address\",\"internalType\":\"contractIERC20\"},{\"name\":\"amount\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"startTimestamp\",\"type\":\"uint32\",\"internalType\":\"uint32\"},{\"name\":\"duration\",\"type\":\"uint32\",\"internalType\":\"uint32\"}]}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"createRewardsForAllSubmission\",\"inputs\":[{\"name\":\"rewardsSubmissions\",\"type\":\"tuple[]\",\"internalType\":\"structIRewardsCoordinatorTypes.RewardsSubmission[]\",\"components\":[{\"name\":\"strategiesAndMultipliers\",\"type\":\"tuple[]\",\"internalType\":\"structIRewardsCoordinatorTypes.StrategyAndMultiplier[]\",\"components\":[{\"name\":\"strategy\",\"type\":\"address\",\"internalType\":\"contractIStrategy\"},{\"name\":\"multiplier\",\"type\":\"uint96\",\"internalType\":\"uint96\"}]},{\"name\":\"token\",\"type\":\"address\",\"internalType\":\"contractIERC20\"},{\"name\":\"amount\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"startTimestamp\",\"type\":\"uint32\",\"internalType\":\"uint32\"},{\"name\":\"duration\",\"type\":\"uint32\",\"internalType\":\"uint32\"}]}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"cumulativeClaimed\",\"inputs\":[{\"name\":\"earner\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"token\",\"type\":\"address\",\"internalType\":\"contractIERC20\"}],\"outputs\":[{\"name\":\"totalClaimed\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"currRewardsCalculationEndTimestamp\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"uint32\",\"internalType\":\"uint32\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"defaultOperatorSplitBips\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"uint16\",\"internalType\":\"uint16\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"delegationManager\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"contractIDelegationManager\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"disableRoot\",\"inputs\":[{\"name\":\"rootIndex\",\"type\":\"uint32\",\"internalType\":\"uint32\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"getCurrentClaimableDistributionRoot\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"tuple\",\"internalType\":\"structIRewardsCoordinatorTypes.DistributionRoot\",\"components\":[{\"name\":\"root\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"},{\"name\":\"rewardsCalculationEndTimestamp\",\"type\":\"uint32\",\"internalType\":\"uint32\"},{\"name\":\"activatedAt\",\"type\":\"uint32\",\"internalType\":\"uint32\"},{\"name\":\"disabled\",\"type\":\"bool\",\"internalType\":\"bool\"}]}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"getCurrentDistributionRoot\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"tuple\",\"internalType\":\"structIRewardsCoordinatorTypes.DistributionRoot\",\"components\":[{\"name\":\"root\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"},{\"name\":\"rewardsCalculationEndTimestamp\",\"type\":\"uint32\",\"internalType\":\"uint32\"},{\"name\":\"activatedAt\",\"type\":\"uint32\",\"internalType\":\"uint32\"},{\"name\":\"disabled\",\"type\":\"bool\",\"internalType\":\"bool\"}]}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"getDistributionRootAtIndex\",\"inputs\":[{\"name\":\"index\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"outputs\":[{\"name\":\"\",\"type\":\"tuple\",\"internalType\":\"structIRewardsCoordinatorTypes.DistributionRoot\",\"components\":[{\"name\":\"root\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"},{\"name\":\"rewardsCalculationEndTimestamp\",\"type\":\"uint32\",\"internalType\":\"uint32\"},{\"name\":\"activatedAt\",\"type\":\"uint32\",\"internalType\":\"uint32\"},{\"name\":\"disabled\",\"type\":\"bool\",\"internalType\":\"bool\"}]}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"getDistributionRootsLength\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"getOperatorAVSSplit\",\"inputs\":[{\"name\":\"operator\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"avs\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[{\"name\":\"\",\"type\":\"uint16\",\"internalType\":\"uint16\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"getOperatorPISplit\",\"inputs\":[{\"name\":\"operator\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[{\"name\":\"\",\"type\":\"uint16\",\"internalType\":\"uint16\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"getOperatorSetSplit\",\"inputs\":[{\"name\":\"operator\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"operatorSet\",\"type\":\"tuple\",\"internalType\":\"structOperatorSet\",\"components\":[{\"name\":\"avs\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"id\",\"type\":\"uint32\",\"internalType\":\"uint32\"}]}],\"outputs\":[{\"name\":\"\",\"type\":\"uint16\",\"internalType\":\"uint16\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"getRootIndexFromHash\",\"inputs\":[{\"name\":\"rootHash\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"outputs\":[{\"name\":\"\",\"type\":\"uint32\",\"internalType\":\"uint32\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"initialize\",\"inputs\":[{\"name\":\"initialOwner\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"initialPausedStatus\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"_rewardsUpdater\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"_activationDelay\",\"type\":\"uint32\",\"internalType\":\"uint32\"},{\"name\":\"_defaultSplitBips\",\"type\":\"uint16\",\"internalType\":\"uint16\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"isAVSRewardsSubmissionHash\",\"inputs\":[{\"name\":\"avs\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"hash\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"outputs\":[{\"name\":\"valid\",\"type\":\"bool\",\"internalType\":\"bool\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"isOperatorDirectedAVSRewardsSubmissionHash\",\"inputs\":[{\"name\":\"avs\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"hash\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"outputs\":[{\"name\":\"valid\",\"type\":\"bool\",\"internalType\":\"bool\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"isOperatorDirectedOperatorSetRewardsSubmissionHash\",\"inputs\":[{\"name\":\"avs\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"hash\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"outputs\":[{\"name\":\"valid\",\"type\":\"bool\",\"internalType\":\"bool\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"isRewardsForAllSubmitter\",\"inputs\":[{\"name\":\"submitter\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[{\"name\":\"valid\",\"type\":\"bool\",\"internalType\":\"bool\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"isRewardsSubmissionForAllEarnersHash\",\"inputs\":[{\"name\":\"avs\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"hash\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"outputs\":[{\"name\":\"valid\",\"type\":\"bool\",\"internalType\":\"bool\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"isRewardsSubmissionForAllHash\",\"inputs\":[{\"name\":\"avs\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"hash\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"outputs\":[{\"name\":\"valid\",\"type\":\"bool\",\"internalType\":\"bool\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"owner\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"address\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"pause\",\"inputs\":[{\"name\":\"newPausedStatus\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"pauseAll\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"paused\",\"inputs\":[{\"name\":\"index\",\"type\":\"uint8\",\"internalType\":\"uint8\"}],\"outputs\":[{\"name\":\"\",\"type\":\"bool\",\"internalType\":\"bool\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"paused\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"pauserRegistry\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"contractIPauserRegistry\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"permissionController\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"contractIPermissionController\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"processClaim\",\"inputs\":[{\"name\":\"claim\",\"type\":\"tuple\",\"internalType\":\"structIRewardsCoordinatorTypes.RewardsMerkleClaim\",\"components\":[{\"name\":\"rootIndex\",\"type\":\"uint32\",\"internalType\":\"uint32\"},{\"name\":\"earnerIndex\",\"type\":\"uint32\",\"internalType\":\"uint32\"},{\"name\":\"earnerTreeProof\",\"type\":\"bytes\",\"internalType\":\"bytes\"},{\"name\":\"earnerLeaf\",\"type\":\"tuple\",\"internalType\":\"structIRewardsCoordinatorTypes.EarnerTreeMerkleLeaf\",\"components\":[{\"name\":\"earner\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"earnerTokenRoot\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}]},{\"name\":\"tokenIndices\",\"type\":\"uint32[]\",\"internalType\":\"uint32[]\"},{\"name\":\"tokenTreeProofs\",\"type\":\"bytes[]\",\"internalType\":\"bytes[]\"},{\"name\":\"tokenLeaves\",\"type\":\"tuple[]\",\"internalType\":\"structIRewardsCoordinatorTypes.TokenTreeMerkleLeaf[]\",\"components\":[{\"name\":\"token\",\"type\":\"address\",\"internalType\":\"contractIERC20\"},{\"name\":\"cumulativeEarnings\",\"type\":\"uint256\",\"internalType\":\"uint256\"}]}]},{\"name\":\"recipient\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"processClaims\",\"inputs\":[{\"name\":\"claims\",\"type\":\"tuple[]\",\"internalType\":\"structIRewardsCoordinatorTypes.RewardsMerkleClaim[]\",\"components\":[{\"name\":\"rootIndex\",\"type\":\"uint32\",\"internalType\":\"uint32\"},{\"name\":\"earnerIndex\",\"type\":\"uint32\",\"internalType\":\"uint32\"},{\"name\":\"earnerTreeProof\",\"type\":\"bytes\",\"internalType\":\"bytes\"},{\"name\":\"earnerLeaf\",\"type\":\"tuple\",\"internalType\":\"structIRewardsCoordinatorTypes.EarnerTreeMerkleLeaf\",\"components\":[{\"name\":\"earner\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"earnerTokenRoot\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}]},{\"name\":\"tokenIndices\",\"type\":\"uint32[]\",\"internalType\":\"uint32[]\"},{\"name\":\"tokenTreeProofs\",\"type\":\"bytes[]\",\"internalType\":\"bytes[]\"},{\"name\":\"tokenLeaves\",\"type\":\"tuple[]\",\"internalType\":\"structIRewardsCoordinatorTypes.TokenTreeMerkleLeaf[]\",\"components\":[{\"name\":\"token\",\"type\":\"address\",\"internalType\":\"contractIERC20\"},{\"name\":\"cumulativeEarnings\",\"type\":\"uint256\",\"internalType\":\"uint256\"}]}]},{\"name\":\"recipient\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"renounceOwnership\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"rewardsUpdater\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"address\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"setActivationDelay\",\"inputs\":[{\"name\":\"_activationDelay\",\"type\":\"uint32\",\"internalType\":\"uint32\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"setClaimerFor\",\"inputs\":[{\"name\":\"claimer\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"setClaimerFor\",\"inputs\":[{\"name\":\"earner\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"claimer\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"setDefaultOperatorSplit\",\"inputs\":[{\"name\":\"split\",\"type\":\"uint16\",\"internalType\":\"uint16\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"setOperatorAVSSplit\",\"inputs\":[{\"name\":\"operator\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"avs\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"split\",\"type\":\"uint16\",\"internalType\":\"uint16\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"setOperatorPISplit\",\"inputs\":[{\"name\":\"operator\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"split\",\"type\":\"uint16\",\"internalType\":\"uint16\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"setOperatorSetSplit\",\"inputs\":[{\"name\":\"operator\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"operatorSet\",\"type\":\"tuple\",\"internalType\":\"structOperatorSet\",\"components\":[{\"name\":\"avs\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"id\",\"type\":\"uint32\",\"internalType\":\"uint32\"}]},{\"name\":\"split\",\"type\":\"uint16\",\"internalType\":\"uint16\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"setRewardsForAllSubmitter\",\"inputs\":[{\"name\":\"_submitter\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"_newValue\",\"type\":\"bool\",\"internalType\":\"bool\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"setRewardsUpdater\",\"inputs\":[{\"name\":\"_rewardsUpdater\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"strategyManager\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"contractIStrategyManager\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"submissionNonce\",\"inputs\":[{\"name\":\"avs\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[{\"name\":\"nonce\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"submitRoot\",\"inputs\":[{\"name\":\"root\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"},{\"name\":\"rewardsCalculationEndTimestamp\",\"type\":\"uint32\",\"internalType\":\"uint32\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"transferOwnership\",\"inputs\":[{\"name\":\"newOwner\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"unpause\",\"inputs\":[{\"name\":\"newPausedStatus\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"version\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"string\",\"internalType\":\"string\"}],\"stateMutability\":\"view\"},{\"type\":\"event\",\"name\":\"AVSRewardsSubmissionCreated\",\"inputs\":[{\"name\":\"avs\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"submissionNonce\",\"type\":\"uint256\",\"indexed\":true,\"internalType\":\"uint256\"},{\"name\":\"rewardsSubmissionHash\",\"type\":\"bytes32\",\"indexed\":true,\"internalType\":\"bytes32\"},{\"name\":\"rewardsSubmission\",\"type\":\"tuple\",\"indexed\":false,\"internalType\":\"structIRewardsCoordinatorTypes.RewardsSubmission\",\"components\":[{\"name\":\"strategiesAndMultipliers\",\"type\":\"tuple[]\",\"internalType\":\"structIRewardsCoordinatorTypes.StrategyAndMultiplier[]\",\"components\":[{\"name\":\"strategy\",\"type\":\"address\",\"internalType\":\"contractIStrategy\"},{\"name\":\"multiplier\",\"type\":\"uint96\",\"internalType\":\"uint96\"}]},{\"name\":\"token\",\"type\":\"address\",\"internalType\":\"contractIERC20\"},{\"name\":\"amount\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"startTimestamp\",\"type\":\"uint32\",\"internalType\":\"uint32\"},{\"name\":\"duration\",\"type\":\"uint32\",\"internalType\":\"uint32\"}]}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"ActivationDelaySet\",\"inputs\":[{\"name\":\"oldActivationDelay\",\"type\":\"uint32\",\"indexed\":false,\"internalType\":\"uint32\"},{\"name\":\"newActivationDelay\",\"type\":\"uint32\",\"indexed\":false,\"internalType\":\"uint32\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"ClaimerForSet\",\"inputs\":[{\"name\":\"earner\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"oldClaimer\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"claimer\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"DefaultOperatorSplitBipsSet\",\"inputs\":[{\"name\":\"oldDefaultOperatorSplitBips\",\"type\":\"uint16\",\"indexed\":false,\"internalType\":\"uint16\"},{\"name\":\"newDefaultOperatorSplitBips\",\"type\":\"uint16\",\"indexed\":false,\"internalType\":\"uint16\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"DistributionRootDisabled\",\"inputs\":[{\"name\":\"rootIndex\",\"type\":\"uint32\",\"indexed\":true,\"internalType\":\"uint32\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"DistributionRootSubmitted\",\"inputs\":[{\"name\":\"rootIndex\",\"type\":\"uint32\",\"indexed\":true,\"internalType\":\"uint32\"},{\"name\":\"root\",\"type\":\"bytes32\",\"indexed\":true,\"internalType\":\"bytes32\"},{\"name\":\"rewardsCalculationEndTimestamp\",\"type\":\"uint32\",\"indexed\":true,\"internalType\":\"uint32\"},{\"name\":\"activatedAt\",\"type\":\"uint32\",\"indexed\":false,\"internalType\":\"uint32\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"Initialized\",\"inputs\":[{\"name\":\"version\",\"type\":\"uint8\",\"indexed\":false,\"internalType\":\"uint8\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"OperatorAVSSplitBipsSet\",\"inputs\":[{\"name\":\"caller\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"operator\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"avs\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"activatedAt\",\"type\":\"uint32\",\"indexed\":false,\"internalType\":\"uint32\"},{\"name\":\"oldOperatorAVSSplitBips\",\"type\":\"uint16\",\"indexed\":false,\"internalType\":\"uint16\"},{\"name\":\"newOperatorAVSSplitBips\",\"type\":\"uint16\",\"indexed\":false,\"internalType\":\"uint16\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"OperatorDirectedAVSRewardsSubmissionCreated\",\"inputs\":[{\"name\":\"caller\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"avs\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"operatorDirectedRewardsSubmissionHash\",\"type\":\"bytes32\",\"indexed\":true,\"internalType\":\"bytes32\"},{\"name\":\"submissionNonce\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"},{\"name\":\"operatorDirectedRewardsSubmission\",\"type\":\"tuple\",\"indexed\":false,\"internalType\":\"structIRewardsCoordinatorTypes.OperatorDirectedRewardsSubmission\",\"components\":[{\"name\":\"strategiesAndMultipliers\",\"type\":\"tuple[]\",\"internalType\":\"structIRewardsCoordinatorTypes.StrategyAndMultiplier[]\",\"components\":[{\"name\":\"strategy\",\"type\":\"address\",\"internalType\":\"contractIStrategy\"},{\"name\":\"multiplier\",\"type\":\"uint96\",\"internalType\":\"uint96\"}]},{\"name\":\"token\",\"type\":\"address\",\"internalType\":\"contractIERC20\"},{\"name\":\"operatorRewards\",\"type\":\"tuple[]\",\"internalType\":\"structIRewardsCoordinatorTypes.OperatorReward[]\",\"components\":[{\"name\":\"operator\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint256\",\"internalType\":\"uint256\"}]},{\"name\":\"startTimestamp\",\"type\":\"uint32\",\"internalType\":\"uint32\"},{\"name\":\"duration\",\"type\":\"uint32\",\"internalType\":\"uint32\"},{\"name\":\"description\",\"type\":\"string\",\"internalType\":\"string\"}]}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"OperatorDirectedOperatorSetRewardsSubmissionCreated\",\"inputs\":[{\"name\":\"caller\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"operatorDirectedRewardsSubmissionHash\",\"type\":\"bytes32\",\"indexed\":true,\"internalType\":\"bytes32\"},{\"name\":\"operatorSet\",\"type\":\"tuple\",\"indexed\":false,\"internalType\":\"structOperatorSet\",\"components\":[{\"name\":\"avs\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"id\",\"type\":\"uint32\",\"internalType\":\"uint32\"}]},{\"name\":\"submissionNonce\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"},{\"name\":\"operatorDirectedRewardsSubmission\",\"type\":\"tuple\",\"indexed\":false,\"internalType\":\"structIRewardsCoordinatorTypes.OperatorDirectedRewardsSubmission\",\"components\":[{\"name\":\"strategiesAndMultipliers\",\"type\":\"tuple[]\",\"internalType\":\"structIRewardsCoordinatorTypes.StrategyAndMultiplier[]\",\"components\":[{\"name\":\"strategy\",\"type\":\"address\",\"internalType\":\"contractIStrategy\"},{\"name\":\"multiplier\",\"type\":\"uint96\",\"internalType\":\"uint96\"}]},{\"name\":\"token\",\"type\":\"address\",\"internalType\":\"contractIERC20\"},{\"name\":\"operatorRewards\",\"type\":\"tuple[]\",\"internalType\":\"structIRewardsCoordinatorTypes.OperatorReward[]\",\"components\":[{\"name\":\"operator\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint256\",\"internalType\":\"uint256\"}]},{\"name\":\"startTimestamp\",\"type\":\"uint32\",\"internalType\":\"uint32\"},{\"name\":\"duration\",\"type\":\"uint32\",\"internalType\":\"uint32\"},{\"name\":\"description\",\"type\":\"string\",\"internalType\":\"string\"}]}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"OperatorPISplitBipsSet\",\"inputs\":[{\"name\":\"caller\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"operator\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"activatedAt\",\"type\":\"uint32\",\"indexed\":false,\"internalType\":\"uint32\"},{\"name\":\"oldOperatorPISplitBips\",\"type\":\"uint16\",\"indexed\":false,\"internalType\":\"uint16\"},{\"name\":\"newOperatorPISplitBips\",\"type\":\"uint16\",\"indexed\":false,\"internalType\":\"uint16\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"OperatorSetSplitBipsSet\",\"inputs\":[{\"name\":\"caller\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"operator\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"operatorSet\",\"type\":\"tuple\",\"indexed\":false,\"internalType\":\"structOperatorSet\",\"components\":[{\"name\":\"avs\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"id\",\"type\":\"uint32\",\"internalType\":\"uint32\"}]},{\"name\":\"activatedAt\",\"type\":\"uint32\",\"indexed\":false,\"internalType\":\"uint32\"},{\"name\":\"oldOperatorSetSplitBips\",\"type\":\"uint16\",\"indexed\":false,\"internalType\":\"uint16\"},{\"name\":\"newOperatorSetSplitBips\",\"type\":\"uint16\",\"indexed\":false,\"internalType\":\"uint16\"}],\"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\":\"Paused\",\"inputs\":[{\"name\":\"account\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"newPausedStatus\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"RewardsClaimed\",\"inputs\":[{\"name\":\"root\",\"type\":\"bytes32\",\"indexed\":false,\"internalType\":\"bytes32\"},{\"name\":\"earner\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"claimer\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"recipient\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"token\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"contractIERC20\"},{\"name\":\"claimedAmount\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"RewardsForAllSubmitterSet\",\"inputs\":[{\"name\":\"rewardsForAllSubmitter\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"oldValue\",\"type\":\"bool\",\"indexed\":true,\"internalType\":\"bool\"},{\"name\":\"newValue\",\"type\":\"bool\",\"indexed\":true,\"internalType\":\"bool\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"RewardsSubmissionForAllCreated\",\"inputs\":[{\"name\":\"submitter\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"submissionNonce\",\"type\":\"uint256\",\"indexed\":true,\"internalType\":\"uint256\"},{\"name\":\"rewardsSubmissionHash\",\"type\":\"bytes32\",\"indexed\":true,\"internalType\":\"bytes32\"},{\"name\":\"rewardsSubmission\",\"type\":\"tuple\",\"indexed\":false,\"internalType\":\"structIRewardsCoordinatorTypes.RewardsSubmission\",\"components\":[{\"name\":\"strategiesAndMultipliers\",\"type\":\"tuple[]\",\"internalType\":\"structIRewardsCoordinatorTypes.StrategyAndMultiplier[]\",\"components\":[{\"name\":\"strategy\",\"type\":\"address\",\"internalType\":\"contractIStrategy\"},{\"name\":\"multiplier\",\"type\":\"uint96\",\"internalType\":\"uint96\"}]},{\"name\":\"token\",\"type\":\"address\",\"internalType\":\"contractIERC20\"},{\"name\":\"amount\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"startTimestamp\",\"type\":\"uint32\",\"internalType\":\"uint32\"},{\"name\":\"duration\",\"type\":\"uint32\",\"internalType\":\"uint32\"}]}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"RewardsSubmissionForAllEarnersCreated\",\"inputs\":[{\"name\":\"tokenHopper\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"submissionNonce\",\"type\":\"uint256\",\"indexed\":true,\"internalType\":\"uint256\"},{\"name\":\"rewardsSubmissionHash\",\"type\":\"bytes32\",\"indexed\":true,\"internalType\":\"bytes32\"},{\"name\":\"rewardsSubmission\",\"type\":\"tuple\",\"indexed\":false,\"internalType\":\"structIRewardsCoordinatorTypes.RewardsSubmission\",\"components\":[{\"name\":\"strategiesAndMultipliers\",\"type\":\"tuple[]\",\"internalType\":\"structIRewardsCoordinatorTypes.StrategyAndMultiplier[]\",\"components\":[{\"name\":\"strategy\",\"type\":\"address\",\"internalType\":\"contractIStrategy\"},{\"name\":\"multiplier\",\"type\":\"uint96\",\"internalType\":\"uint96\"}]},{\"name\":\"token\",\"type\":\"address\",\"internalType\":\"contractIERC20\"},{\"name\":\"amount\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"startTimestamp\",\"type\":\"uint32\",\"internalType\":\"uint32\"},{\"name\":\"duration\",\"type\":\"uint32\",\"internalType\":\"uint32\"}]}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"RewardsUpdaterSet\",\"inputs\":[{\"name\":\"oldRewardsUpdater\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"newRewardsUpdater\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"Unpaused\",\"inputs\":[{\"name\":\"account\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"newPausedStatus\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"}],\"anonymous\":false},{\"type\":\"error\",\"name\":\"AmountExceedsMax\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"AmountIsZero\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"CurrentlyPaused\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"DurationExceedsMax\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"DurationIsZero\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"EarningsNotGreaterThanClaimed\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"InputAddressZero\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"InputArrayLengthMismatch\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"InputArrayLengthZero\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"InvalidAddressZero\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"InvalidCalculationIntervalSecondsRemainder\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"InvalidClaimProof\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"InvalidDurationRemainder\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"InvalidEarner\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"InvalidEarnerLeafIndex\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"InvalidGenesisRewardsTimestampRemainder\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"InvalidNewPausedStatus\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"InvalidOperatorSet\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"InvalidPermissions\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"InvalidProofLength\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"InvalidRoot\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"InvalidRootIndex\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"InvalidShortString\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"InvalidStartTimestampRemainder\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"InvalidTokenLeafIndex\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"NewRootMustBeForNewCalculatedPeriod\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"OnlyPauser\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"OnlyUnpauser\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"OperatorsNotInAscendingOrder\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"PreviousSplitPending\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"RewardsEndTimestampNotElapsed\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"RootAlreadyActivated\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"RootDisabled\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"RootNotActivated\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"SplitExceedsMax\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"StartTimestampTooFarInFuture\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"StartTimestampTooFarInPast\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"StrategiesNotInAscendingOrder\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"StrategyNotWhitelisted\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"StringTooLong\",\"inputs\":[{\"name\":\"str\",\"type\":\"string\",\"internalType\":\"string\"}]},{\"type\":\"error\",\"name\":\"SubmissionNotRetroactive\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"UnauthorizedCaller\",\"inputs\":[]}]", - Bin: "0x6101e0604052348015610010575f5ffd5b50604051614b90380380614b9083398101604081905261002f9161034a565b610140810151608082015182516020840151604085015160a086015160c087015160e08801516101008901516101208a015160608b01516001600160a01b03811661008d576040516339b190bb60e11b815260040160405180910390fd5b6001600160a01b03166080526100a38582610465565b63ffffffff16156100c757604051630e06bd3160e01b815260040160405180910390fd5b6100d46201518086610465565b63ffffffff16156100f85760405163223c7b3960e11b815260040160405180910390fd5b6001600160a01b0397881660a05295871660c05293861660e05263ffffffff9283166101005290821661012052811661014052908116610160521661018052166101a05261014581610158565b6101c0525061015261019e565b506104f3565b5f5f829050601f8151111561018b578260405163305a27a960e01b81526004016101829190610498565b60405180910390fd5b8051610196826104cd565b179392505050565b5f54610100900460ff16156102055760405162461bcd60e51b815260206004820152602760248201527f496e697469616c697a61626c653a20636f6e747261637420697320696e697469604482015266616c697a696e6760c81b6064820152608401610182565b5f5460ff90811614610254575f805460ff191660ff9081179091556040519081527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b565b634e487b7160e01b5f52604160045260245ffd5b60405161016081016001600160401b038111828210171561028d5761028d610256565b60405290565b80516001600160a01b03811681146102a9575f5ffd5b919050565b805163ffffffff811681146102a9575f5ffd5b5f82601f8301126102d0575f5ffd5b81516001600160401b038111156102e9576102e9610256565b604051601f8201601f19908116603f011681016001600160401b038111828210171561031757610317610256565b60405281815283820160200185101561032e575f5ffd5b8160208501602083015e5f918101602001919091529392505050565b5f6020828403121561035a575f5ffd5b81516001600160401b0381111561036f575f5ffd5b82016101608185031215610381575f5ffd5b61038961026a565b61039282610293565b81526103a060208301610293565b60208201526103b160408301610293565b60408201526103c260608301610293565b60608201526103d360808301610293565b60808201526103e460a083016102ae565b60a08201526103f560c083016102ae565b60c082015261040660e083016102ae565b60e082015261041861010083016102ae565b61010082015261042b61012083016102ae565b6101208201526101408201516001600160401b0381111561044a575f5ffd5b610456868285016102c1565b61014083015250949350505050565b5f63ffffffff83168061048657634e487b7160e01b5f52601260045260245ffd5b8063ffffffff84160691505092915050565b602081525f82518060208401528060208501604085015e5f604082850101526040601f19601f83011684010191505092915050565b805160208083015191908110156104ed575f198160200360031b1b821691505b50919050565b60805160a05160c05160e05161010051610120516101405161016051610180516101a0516101c0516145c26105ce5f395f61138701525f81816105f001526124b301525f81816104a4015261341101525f81816103f3015261299801525f818161055201526133cf01525f818161087e01526132b901525f81816107bf01528181613309015261337d01525f81816108d201528181610adc01528181611bff0152611e8c01525f818161057901526134ac01525f81816109450152611b6f01525f81816107510152818161283d01526131ea01526145c25ff3fe608060405234801561000f575f5ffd5b50600436106103b3575f3560e01c8063886f1195116101f5578063de02e50311610114578063f6efbb59116100a9578063fabc1cbc11610079578063fabc1cbc14610a33578063fbf1e2c114610a46578063fce36c7d14610a59578063ff9f6cce14610a6c575f5ffd5b8063f6efbb59146109e7578063f74e8eac146109fa578063f8cd844814610a0d578063f96abf2e14610a20575f5ffd5b8063ed71e6a2116100e4578063ed71e6a214610967578063f22cef8514610994578063f2f07ab4146109a7578063f2fde38b146109d4575f5ffd5b8063de02e50314610907578063e063f81f1461091a578063e810ce211461092d578063ea4d3c9b14610940575f5ffd5b8063a50a1d9c1161018a578063bf21a8aa1161015a578063bf21a8aa14610879578063c46db606146108a0578063ca8aa7c7146108cd578063dcbb03b3146108f4575f5ffd5b8063a50a1d9c14610807578063aebd8bae1461081a578063b3dbb0e014610847578063bb7e451f1461085a575f5ffd5b80639cb9a5fa116101c55780639cb9a5fa146107a75780639d45c281146107ba5780639de4b35f146107e1578063a0169ddd146107f4575f5ffd5b8063886f11951461074c5780638da5cb5b146107735780639104c319146107845780639be3d4e41461079f575f5ffd5b80634596021c116102e15780635c975abb11610276578063715018a611610246578063715018a6146106ff5780637b8f8b0514610707578063863cb9a91461070f578063865c695314610722575f5ffd5b80635c975abb146106a25780635e9d8348146106aa57806363f6a798146106bd5780636d21117e146106d2575f5ffd5b806354fd4d50116102b157806354fd4d501461064f57806358baaa3e14610664578063595c6a67146106775780635ac86ab71461067f575f5ffd5b80634596021c146105d85780634657e26a146105eb5780634b943960146106125780634d18cc3514610638575f5ffd5b8063149bc8721161035757806339b70e381161032757806339b70e38146105745780633a8c07861461059b5780633ccc861d146105b25780633efe1db6146105c5575f5ffd5b8063149bc872146104d95780632b9f64a4146104fa57806336af41fa1461053a57806337838ed01461054d575f5ffd5b80630e9a53cf116103925780630e9a53cf1461043f5780630eb383451461048c578063131433b41461049f578063136439dd146104c6575f5ffd5b806218572c146103b757806304a0c502146103ee5780630ca298991461042a575b5f5ffd5b6103d96103c53660046139ef565b60d16020525f908152604090205460ff1681565b60405190151581526020015b60405180910390f35b6104157f000000000000000000000000000000000000000000000000000000000000000081565b60405163ffffffff90911681526020016103e5565b61043d610438366004613a67565b610a7f565b005b610447610d25565b6040516103e591905f6080820190508251825263ffffffff602084015116602083015263ffffffff604084015116604083015260608301511515606083015292915050565b61043d61049a366004613ac3565b610e25565b6104157f000000000000000000000000000000000000000000000000000000000000000081565b61043d6104d4366004613afa565b610ea5565b6104ec6104e7366004613b11565b610edf565b6040519081526020016103e5565b6105226105083660046139ef565b60cc6020525f90815260409020546001600160a01b031681565b6040516001600160a01b0390911681526020016103e5565b61043d610548366004613b2b565b610f54565b6104157f000000000000000000000000000000000000000000000000000000000000000081565b6105227f000000000000000000000000000000000000000000000000000000000000000081565b60cb5461041590600160a01b900463ffffffff1681565b61043d6105c0366004613b7a565b6110c5565b61043d6105d3366004613bd0565b6110ec565b61043d6105e6366004613bfa565b6112c2565b6105227f000000000000000000000000000000000000000000000000000000000000000081565b6106256106203660046139ef565b611325565b60405161ffff90911681526020016103e5565b60cb5461041590600160c01b900463ffffffff1681565b610657611380565b6040516103e59190613c4c565b61043d610672366004613c81565b6113b0565b61043d6113c4565b6103d961068d366004613c9a565b606654600160ff9092169190911b9081161490565b6066546104ec565b6103d96106b8366004613cba565b6113d8565b60cb5461062590600160e01b900461ffff1681565b6103d96106e0366004613ceb565b60cf60209081525f928352604080842090915290825290205460ff1681565b61043d611463565b60ca546104ec565b61043d61071d3660046139ef565b611474565b6104ec610730366004613d15565b60cd60209081525f928352604080842090915290825290205481565b6105227f000000000000000000000000000000000000000000000000000000000000000081565b6033546001600160a01b0316610522565b61052273beac0eeeeeeeeeeeeeeeeeeeeeeeeeeeeeebeac081565b610447611485565b61043d6107b5366004613d41565b611521565b6104157f000000000000000000000000000000000000000000000000000000000000000081565b6106256107ef366004613d78565b61169c565b61043d6108023660046139ef565b61171f565b61043d610815366004613db4565b61172a565b6103d9610828366004613ceb565b60d260209081525f928352604080842090915290825290205460ff1681565b61043d610855366004613dcd565b61173b565b6104ec6108683660046139ef565b60ce6020525f908152604090205481565b6104157f000000000000000000000000000000000000000000000000000000000000000081565b6103d96108ae366004613ceb565b60d060209081525f928352604080842090915290825290205460ff1681565b6105227f000000000000000000000000000000000000000000000000000000000000000081565b61043d610902366004613df7565b611866565b610447610915366004613afa565b6119b3565b610625610928366004613d15565b611a43565b61041561093b366004613afa565b611aa8565b6105227f000000000000000000000000000000000000000000000000000000000000000081565b6103d9610975366004613ceb565b60d360209081525f928352604080842090915290825290205460ff1681565b61043d6109a2366004613d15565b611b29565b6103d96109b5366004613ceb565b60d760209081525f928352604080842090915290825290205460ff1681565b61043d6109e23660046139ef565b611c93565b61043d6109f5366004613e3b565b611d0e565b61043d610a08366004613e99565b611e43565b6104ec610a1b366004613b11565b61200a565b61043d610a2e366004613c81565b61201a565b61043d610a41366004613afa565b61214b565b60cb54610522906001600160a01b031681565b61043d610a67366004613b2b565b6121b8565b61043d610a7a366004613b2b565b6122e9565b6009610a8a8161244a565b610a9760208501856139ef565b610aa081612475565b610abd5760405163932d94f760e01b815260040160405180910390fd5b610ac561251f565b6040516304c1b8eb60e31b81526001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000169063260dc75890610b11908890600401613f04565b602060405180830381865afa158015610b2c573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610b509190613f12565b610b6d57604051631fb1705560e21b815260040160405180910390fd5b5f5b83811015610d135736858583818110610b8a57610b8a613f2d565b9050602002810190610b9c9190613f41565b90505f60ce81610baf60208b018b6139ef565b6001600160a01b031681526020808201929092526040015f90812054925090610bda908a018a6139ef565b8284604051602001610bee93929190614169565b6040516020818303038152906040528051906020012090505f610c1084612578565b9050600160d75f610c2460208e018e6139ef565b6001600160a01b0316815260208082019290925260409081015f9081208682529092529020805460ff1916911515919091179055610c638360016141ac565b60ce5f610c7360208e018e6139ef565b6001600160a01b03166001600160a01b031681526020019081526020015f208190555081336001600160a01b03167ffff0759ccb371dfb5691798724e70b4fa61cb3bfe730a33ac19fb86a48efc7568c8688604051610cd4939291906141bf565b60405180910390a3610d03333083610cf26040890160208a016139ef565b6001600160a01b0316929190612763565b505060019092019150610b6f9050565b50610d1e6001609755565b5050505050565b604080516080810182525f80825260208201819052918101829052606081019190915260ca545b8015610dfd575f60ca610d606001846141e4565b81548110610d7057610d70613f2d565b5f91825260209182902060408051608081018252600293909302909101805483526001015463ffffffff80821694840194909452600160201b810490931690820152600160401b90910460ff161580156060830181905291925090610ddf5750806040015163ffffffff164210155b15610dea5792915050565b5080610df5816141f7565b915050610d4c565b5050604080516080810182525f80825260208201819052918101829052606081019190915290565b610e2d6127ce565b6001600160a01b0382165f81815260d1602052604080822054905160ff9091169284151592841515927f4de6293e668df1398422e1def12118052c1539a03cbfedc145895d48d7685f1c9190a4506001600160a01b03919091165f90815260d160205260409020805460ff1916911515919091179055565b610ead612828565b6066548181168114610ed25760405163c61dca5d60e01b815260040160405180910390fd5b610edb826128cb565b5050565b5f80610eee60208401846139ef565b8360200135604051602001610f379392919060f89390931b6001600160f81b031916835260609190911b6bffffffffffffffffffffffff19166001830152601582015260350190565b604051602081830303815290604052805190602001209050919050565b6001610f5f8161244a565b335f90815260d1602052604090205460ff16610f8e57604051635c427cd960e01b815260040160405180910390fd5b610f9661251f565b5f5b828110156110b55736848483818110610fb357610fb3613f2d565b9050602002810190610fc5919061420c565b335f81815260ce60209081526040808320549051949550939192610fef929091859187910161429e565b60405160208183030381529060405280519060200120905061101083612908565b335f90815260d0602090815260408083208484529091529020805460ff191660019081179091556110429083906141ac565b335f81815260ce602052604090819020929092559051829184917f51088b8c89628df3a8174002c2a034d0152fce6af8415d651b2a4734bf270482906110899088906142c4565b60405180910390a46110aa333060408601803590610cf290602089016139ef565b505050600101610f98565b506110c06001609755565b505050565b60026110d08161244a565b6110d861251f565b6110e283836129f3565b6110c06001609755565b60036110f78161244a565b60cb546001600160a01b0316331461112257604051635c427cd960e01b815260040160405180910390fd5b60cb5463ffffffff600160c01b90910481169083161161115557604051631ca7e50b60e21b815260040160405180910390fd5b428263ffffffff161061117b576040516306957c9160e11b815260040160405180910390fd5b60ca5460cb545f9061119a90600160a01b900463ffffffff16426142d6565b6040805160808101825287815263ffffffff87811660208084018281528684168587018181525f6060880181815260ca8054600181018255925297517f42d72674974f694b5f5159593243114d38a5c39c89d6b62fee061ff523240ee160029092029182015592517f42d72674974f694b5f5159593243114d38a5c39c89d6b62fee061ff523240ee290930180549151975193871667ffffffffffffffff1990921691909117600160201b978716979097029690961760ff60401b1916600160401b921515929092029190911790945560cb805463ffffffff60c01b1916600160c01b840217905593519283529394508892908616917fecd866c3c158fa00bf34d803d5f6023000b57080bcb48af004c2b4b46b3afd08910160405180910390a45050505050565b60026112cd8161244a565b6112d561251f565b5f5b838110156113145761130c8585838181106112f4576112f4613f2d565b905060200281019061130691906142f2565b846129f3565b6001016112d7565b5061131f6001609755565b50505050565b6001600160a01b0381165f90815260d5602090815260408083208151606081018352905461ffff80821683526201000082041693820193909352600160201b90920463ffffffff169082015261137a90612c7b565b92915050565b60606113ab7f0000000000000000000000000000000000000000000000000000000000000000612ceb565b905090565b6113b86127ce565b6113c181612d28565b50565b6113cc612828565b6113d65f196128cb565b565b5f61145b8260ca6113ec6020830183613c81565b63ffffffff168154811061140257611402613f2d565b5f91825260209182902060408051608081018252600293909302909101805483526001015463ffffffff80821694840194909452600160201b810490931690820152600160401b90910460ff1615156060820152612d99565b506001919050565b61146b6127ce565b6113d65f612f3c565b61147c6127ce565b6113c181612f8d565b604080516080810182525f80825260208201819052918101829052606081019190915260ca80546114b8906001906141e4565b815481106114c8576114c8613f2d565b5f91825260209182902060408051608081018252600293909302909101805483526001015463ffffffff80821694840194909452600160201b810490931690820152600160401b90910460ff1615156060820152919050565b600561152c8161244a565b8361153681612475565b6115535760405163932d94f760e01b815260040160405180910390fd5b61155b61251f565b5f5b83811015610d13573685858381811061157857611578613f2d565b905060200281019061158a9190613f41565b6001600160a01b0388165f90815260ce60209081526040808320549051939450926115bb918b918591879101614169565b6040516020818303038152906040528051906020012090505f6115dd84612578565b6001600160a01b038b165f90815260d3602090815260408083208684529091529020805460ff1916600190811790915590915061161b9084906141ac565b6001600160a01b038b165f81815260ce60205260409081902092909255905183919033907ffc8888bffd711da60bc5092b33f677d81896fe80ecc677b84cfab8184462b6e09061166e9088908a90614306565b60405180910390a461168c333083610cf26040890160208a016139ef565b50506001909201915061155d9050565b6001600160a01b0382165f90815260d66020526040812061171890826116cf6116ca3687900387018761431e565b612fe8565b815260208082019290925260409081015f208151606081018352905461ffff80821683526201000082041693820193909352600160201b90920463ffffffff1690820152612c7b565b9392505050565b33610edb818361304b565b6117326127ce565b6113c1816130ae565b60076117468161244a565b8261175081612475565b61176d5760405163932d94f760e01b815260040160405180910390fd5b60cb545f9061178990600160a01b900463ffffffff16426142d6565b6001600160a01b0386165f90815260d5602090815260408083208151606081018352905461ffff80821683526201000082041693820193909352600160201b90920463ffffffff1690820152919250906117e290612c7b565b6001600160a01b0387165f90815260d560205260409020909150611807908684613119565b6040805163ffffffff8416815261ffff838116602083015287168183015290516001600160a01b0388169133917fd1e028bd664486a46ad26040e999cd2d22e1e9a094ee6afe19fcf64678f16f749181900360600190a3505050505050565b60066118718161244a565b8361187b81612475565b6118985760405163932d94f760e01b815260040160405180910390fd5b60cb545f906118b490600160a01b900463ffffffff16426142d6565b6001600160a01b038781165f90815260d460209081526040808320938a1683529281528282208351606081018552905461ffff80821683526201000082041692820192909252600160201b90910463ffffffff169281019290925291925061191b90612c7b565b6001600160a01b038089165f90815260d460209081526040808320938b1683529290522090915061194d908684613119565b6040805163ffffffff8416815261ffff838116602083015287168183015290516001600160a01b0388811692908a169133917f48e198b6ae357e529204ee53a8e514c470ff77d9cc8e4f7207f8b5d490ae6934919081900360600190a450505050505050565b604080516080810182525f80825260208201819052918101829052606081019190915260ca82815481106119e9576119e9613f2d565b5f91825260209182902060408051608081018252600293909302909101805483526001015463ffffffff80821694840194909452600160201b810490931690820152600160401b90910460ff161515606082015292915050565b6001600160a01b038281165f90815260d46020908152604080832093851683529281528282208351606081018552905461ffff80821683526201000082041692820192909252600160201b90910463ffffffff16928101929092529061171890612c7b565b60ca545f905b63ffffffff811615611b0f578260ca611ac8600184614386565b63ffffffff1681548110611ade57611ade613f2d565b905f5260205f2090600202015f015403611afd57611718600182614386565b80611b07816143a2565b915050611aae565b5060405163504570e360e01b815260040160405180910390fd5b81611b3381612475565b611b505760405163932d94f760e01b815260040160405180910390fd5b6040516336b87bd760e11b81526001600160a01b0384811660048301527f00000000000000000000000000000000000000000000000000000000000000001690636d70f7ae90602401602060405180830381865afa158015611bb4573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611bd89190613f12565b80611c6c575060405163ba1a84e560e01b81526001600160a01b0384811660048301525f917f00000000000000000000000000000000000000000000000000000000000000009091169063ba1a84e590602401602060405180830381865afa158015611c46573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611c6a91906143c0565b115b611c895760405163fb494ea160e01b815260040160405180910390fd5b6110c0838361304b565b611c9b6127ce565b6001600160a01b038116611d055760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b60648201526084015b60405180910390fd5b6113c181612f3c565b5f54610100900460ff1615808015611d2c57505f54600160ff909116105b80611d455750303b158015611d4557505f5460ff166001145b611da85760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201526d191e481a5b9a5d1a585b1a5e995960921b6064820152608401611cfc565b5f805460ff191660011790558015611dc9575f805461ff0019166101001790555b611dd2856128cb565b611ddb86612f3c565b611de484612f8d565b611ded83612d28565b611df6826130ae565b8015611e3b575f805461ff0019169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b505050505050565b6008611e4e8161244a565b83611e5881612475565b611e755760405163932d94f760e01b815260040160405180910390fd5b6040516304c1b8eb60e31b81526001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000169063260dc75890611ec1908790600401613f04565b602060405180830381865afa158015611edc573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611f009190613f12565b611f1d57604051631fb1705560e21b815260040160405180910390fd5b60cb545f90611f3990600160a01b900463ffffffff16426142d6565b6001600160a01b0387165f90815260d66020526040812091925090611f6b90826116cf6116ca368b90038b018b61431e565b6001600160a01b0388165f90815260d660205260408120919250611fb09190611f9c6116ca368b90038b018b61431e565b81526020019081526020015f208684613119565b866001600160a01b0316336001600160a01b03167f14918b3834ab6752eb2e1b489b6663a67810efb5f56f3944a97ede8ecf1fd9f18885858a604051611ff994939291906143d7565b60405180910390a350505050505050565b5f6001610eee60208401846139ef565b60036120258161244a565b60cb546001600160a01b0316331461205057604051635c427cd960e01b815260040160405180910390fd5b60ca5463ffffffff831610612078576040516394a8d38960e01b815260040160405180910390fd5b5f60ca8363ffffffff168154811061209257612092613f2d565b905f5260205f20906002020190508060010160089054906101000a900460ff16156120d057604051631b14174b60e01b815260040160405180910390fd5b6001810154600160201b900463ffffffff16421061210157604051630c36f66560e21b815260040160405180910390fd5b60018101805460ff60401b1916600160401b17905560405163ffffffff8416907fd850e6e5dfa497b72661fa73df2923464eaed9dc2ff1d3cb82bccbfeabe5c41e905f90a2505050565b6121536131e8565b6066548019821981161461217a5760405163c61dca5d60e01b815260040160405180910390fd5b606682905560405182815233907f3582d1828e26bf56bd801502bc021ac0bc8afb57c826e4986b45593c8fad389c9060200160405180910390a25050565b5f6121c28161244a565b6121ca61251f565b5f5b828110156110b557368484838181106121e7576121e7613f2d565b90506020028101906121f9919061420c565b335f81815260ce60209081526040808320549051949550939192612223929091859187910161429e565b60405160208183030381529060405280519060200120905061224483612908565b335f90815260cf602090815260408083208484529091529020805460ff191660019081179091556122769083906141ac565b335f81815260ce602052604090819020929092559051829184917f450a367a380c4e339e5ae7340c8464ef27af7781ad9945cfe8abd828f89e6281906122bd9088906142c4565b60405180910390a46122de333060408601803590610cf290602089016139ef565b5050506001016121cc565b60046122f48161244a565b335f90815260d1602052604090205460ff1661232357604051635c427cd960e01b815260040160405180910390fd5b61232b61251f565b5f5b828110156110b5573684848381811061234857612348613f2d565b905060200281019061235a919061420c565b335f81815260ce60209081526040808320549051949550939192612384929091859187910161429e565b6040516020818303038152906040528051906020012090506123a583612908565b335f90815260d2602090815260408083208484529091529020805460ff191660019081179091556123d79083906141ac565b335f81815260ce602052604090819020929092559051829184917f5251b6fdefcb5d81144e735f69ea4c695fd43b0289ca53dc075033f5fc80068b9061241e9088906142c4565b60405180910390a461243f333060408601803590610cf290602089016139ef565b50505060010161232d565b606654600160ff83161b908116036113c15760405163840a48d560e01b815260040160405180910390fd5b604051631beb2b9760e31b81526001600160a01b0382811660048301523360248301523060448301525f80356001600160e01b0319166064840152917f00000000000000000000000000000000000000000000000000000000000000009091169063df595cb8906084016020604051808303815f875af11580156124fb573d5f5f3e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061137a9190613f12565b6002609754036125715760405162461bcd60e51b815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c006044820152606401611cfc565b6002609755565b5f6125ab612586838061440b565b6125966080860160608701613c81565b6125a660a0870160808801613c81565b613299565b5f6125b9604084018461440b565b9050116125d95760405163796cc52560e01b815260040160405180910390fd5b426125ea60a0840160808501613c81565b6125fa6080850160608601613c81565b61260491906142d6565b63ffffffff16106126285760405163150358a160e21b815260040160405180910390fd5b5f80805b612639604086018661440b565b905081101561272a5736612650604087018761440b565b8381811061266057612660613f2d565b6040029190910191505f905061267960208301836139ef565b6001600160a01b0316036126a057604051630863a45360e11b815260040160405180910390fd5b6126ad60208201826139ef565b6001600160a01b0316836001600160a01b0316106126de576040516310fb47f160e31b815260040160405180910390fd5b5f816020013511612702576040516310eb483f60e21b815260040160405180910390fd5b61270f60208201826139ef565b925061271f6020820135856141ac565b93505060010161262c565b506f4b3b4ca85a86c47a098a223fffffffff82111561275c5760405163070b5a6f60e21b815260040160405180910390fd5b5092915050565b6040516001600160a01b038085166024830152831660448201526064810182905261131f9085906323b872dd60e01b906084015b60408051601f198184030181529190526020810180516001600160e01b03166001600160e01b031990931692909217909152613597565b6033546001600160a01b031633146113d65760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401611cfc565b60405163237dfb4760e11b81523360048201527f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316906346fbf68e90602401602060405180830381865afa15801561288a573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906128ae9190613f12565b6113d657604051631d77d47760e21b815260040160405180910390fd5b606681905560405181815233907fab40a374bc51de372200a8bc981af8c9ecdc08dfdaef0bb6e09f88f3c616ef3d9060200160405180910390a250565b612935612915828061440b565b6129256080850160608601613c81565b6125a660a0860160808701613c81565b5f816040013511612959576040516310eb483f60e21b815260040160405180910390fd5b6f4b3b4ca85a86c47a098a223fffffffff8160400135111561298e5760405163070b5a6f60e21b815260040160405180910390fd5b6129be63ffffffff7f000000000000000000000000000000000000000000000000000000000000000016426141ac565b6129ce6080830160608401613c81565b63ffffffff1611156113c157604051637ee2b44360e01b815260040160405180910390fd5b5f60ca612a036020850185613c81565b63ffffffff1681548110612a1957612a19613f2d565b5f91825260209182902060408051608081018252600293909302909101805483526001015463ffffffff80821694840194909452600160201b810490931690820152600160401b90910460ff16151560608201529050612a798382612d99565b5f612a8a60808501606086016139ef565b6001600160a01b038082165f90815260cc60205260409020549192501680612aaf5750805b336001600160a01b03821614612ad857604051635c427cd960e01b815260040160405180910390fd5b5f5b612ae760a0870187614450565b9050811015611e3b5736612afe60e088018861440b565b83818110612b0e57612b0e613f2d565b6001600160a01b0387165f90815260cd602090815260408083209302949094019450929091508290612b42908501856139ef565b6001600160a01b03166001600160a01b031681526020019081526020015f2054905080826020013511612b885760405163aa385e8160e01b815260040160405180910390fd5b5f612b978260208501356141e4565b6001600160a01b0387165f90815260cd60209081526040822092935085018035929190612bc490876139ef565b6001600160a01b031681526020808201929092526040015f2091909155612c059089908390612bf5908701876139ef565b6001600160a01b0316919061366a565b86516001600160a01b03808a1691878216918916907f9543dbd55580842586a951f0386e24d68a5df99ae29e3b216588b45fd684ce3190612c4960208901896139ef565b604080519283526001600160a01b039091166020830152810186905260600160405180910390a4505050600101612ada565b5f816040015163ffffffff165f1480612cad5750815161ffff908116148015612cad5750816040015163ffffffff1642105b15612cc557505060cb54600160e01b900461ffff1690565b816040015163ffffffff16421015612cde57815161137a565b506020015190565b919050565b60605f612cf78361369a565b6040805160208082528183019092529192505f91906020820181803683375050509182525060208101929092525090565b60cb546040805163ffffffff600160a01b9093048316815291831660208301527faf557c6c02c208794817a705609cfa935f827312a1adfdd26494b6b95dd2b4b3910160405180910390a160cb805463ffffffff909216600160a01b0263ffffffff60a01b19909216919091179055565b806060015115612dbc57604051631b14174b60e01b815260040160405180910390fd5b806040015163ffffffff16421015612de757604051631437a2bb60e31b815260040160405180910390fd5b612df460c0830183614450565b9050612e0360a0840184614450565b905014612e23576040516343714afd60e01b815260040160405180910390fd5b612e3060e083018361440b565b9050612e3f60c0840184614450565b905014612e5f576040516343714afd60e01b815260040160405180910390fd5b8051612e8b90612e756040850160208601613c81565b612e826040860186614495565b866060016136c1565b5f5b612e9a60a0840184614450565b90508110156110c057612f346080840135612eb860a0860186614450565b84818110612ec857612ec8613f2d565b9050602002016020810190612edd9190613c81565b612eea60c0870187614450565b85818110612efa57612efa613f2d565b9050602002810190612f0c9190614495565b612f1960e089018961440b565b87818110612f2957612f29613f2d565b905060400201613765565b600101612e8d565b603380546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0905f90a35050565b60cb546040516001600160a01b038084169216907f237b82f438d75fc568ebab484b75b01d9287b9e98b490b7c23221623b6705dbb905f90a360cb80546001600160a01b0319166001600160a01b0392909216919091179055565b5f815f0151826020015163ffffffff1660405160200161303392919060609290921b6bffffffffffffffffffffffff1916825260a01b6001600160a01b031916601482015260200190565b60405160208183030381529060405261137a906144d7565b6001600160a01b038083165f81815260cc602052604080822080548686166001600160a01b0319821681179092559151919094169392849290917fbab947934d42e0ad206f25c9cab18b5bb6ae144acfb00f40b4e3aa59590ca3129190a4505050565b60cb546040805161ffff600160e01b9093048316815291831660208301527fe6cd4edfdcc1f6d130ab35f73d72378f3a642944fb4ee5bd84b7807a81ea1c4e910160405180910390a160cb805461ffff909216600160e01b0261ffff60e01b19909216919091179055565b61271061ffff831611156131405760405163891c63df60e01b815260040160405180910390fd5b8254600160201b900463ffffffff16421161316e57604051637b1e25c560e01b815260040160405180910390fd5b8254600160201b900463ffffffff165f0361319557825461ffff191661ffff1783556131ac565b825462010000810461ffff1661ffff199091161783555b825463ffffffff909116600160201b0267ffffffff000000001961ffff90931662010000029290921667ffffffffffff00001990911617179055565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663eab66d7a6040518163ffffffff1660e01b8152600401602060405180830381865afa158015613244573d5f5f3e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061326891906144fa565b6001600160a01b0316336001600160a01b0316146113d65760405163794821ff60e01b815260040160405180910390fd5b826132b75760405163796cc52560e01b815260040160405180910390fd5b7f000000000000000000000000000000000000000000000000000000000000000063ffffffff168163ffffffff16111561330457604051630dd0b9f560e21b815260040160405180910390fd5b61332e7f000000000000000000000000000000000000000000000000000000000000000082614529565b63ffffffff16156133525760405163ee66470560e01b815260040160405180910390fd5b5f8163ffffffff16116133785760405163cb3f434d60e01b815260040160405180910390fd5b6133a27f000000000000000000000000000000000000000000000000000000000000000083614529565b63ffffffff16156133c657604051633c1a94f160e21b815260040160405180910390fd5b8163ffffffff167f000000000000000000000000000000000000000000000000000000000000000063ffffffff16426133ff91906141e4565b1115801561343957508163ffffffff167f000000000000000000000000000000000000000000000000000000000000000063ffffffff1611155b6134565760405163041aa75760e11b815260040160405180910390fd5b5f805b84811015611e3b575f86868381811061347457613474613f2d565b61348a92602060409092020190810191506139ef565b60405163198f077960e21b81526001600160a01b0380831660048301529192507f00000000000000000000000000000000000000000000000000000000000000009091169063663c1de490602401602060405180830381865afa1580156134f3573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906135179190613f12565b8061353e57506001600160a01b03811673beac0eeeeeeeeeeeeeeeeeeeeeeeeeeeeeebeac0145b61355b57604051632efd965160e11b815260040160405180910390fd5b806001600160a01b0316836001600160a01b03161061358d5760405163dfad9ca160e01b815260040160405180910390fd5b9150600101613459565b5f6135eb826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c6564815250856001600160a01b03166137a39092919063ffffffff16565b905080515f148061360b57508080602001905181019061360b9190613f12565b6110c05760405162461bcd60e51b815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e6044820152691bdd081cdd58d8d9595960b21b6064820152608401611cfc565b6040516001600160a01b0383166024820152604481018290526110c090849063a9059cbb60e01b90606401612797565b5f60ff8216601f81111561137a57604051632cd44ac360e21b815260040160405180910390fd5b6136cc602083614550565b6001901b8463ffffffff16106136f45760405162c6c39d60e71b815260040160405180910390fd5b5f6136fe82610edf565b905061374884848080601f0160208091040260200160405190810160405280939291908181526020018383808284375f920191909152508a92508591505063ffffffff89166137b9565b611e3b576040516369ca16c960e01b815260040160405180910390fd5b613770602083614550565b6001901b8463ffffffff16106137995760405163054ff4df60e51b815260040160405180910390fd5b5f6136fe8261200a565b60606137b184845f856137d0565b949350505050565b5f836137c68685856138a7565b1495945050505050565b6060824710156138315760405162461bcd60e51b815260206004820152602660248201527f416464726573733a20696e73756666696369656e742062616c616e636520666f6044820152651c8818d85b1b60d21b6064820152608401611cfc565b5f5f866001600160a01b0316858760405161384c9190614563565b5f6040518083038185875af1925050503d805f8114613886576040519150601f19603f3d011682016040523d82523d5f602084013e61388b565b606091505b509150915061389c8783838761393e565b979650505050505050565b5f602084516138b69190614579565b156138d4576040516313717da960e21b815260040160405180910390fd5b8260205b85518111613935576138eb600285614579565b5f0361390c57815f528086015160205260405f209150600284049350613923565b808601515f528160205260405f2091506002840493505b61392e6020826141ac565b90506138d8565b50949350505050565b606083156139ac5782515f036139a5576001600160a01b0385163b6139a55760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e74726163740000006044820152606401611cfc565b50816137b1565b6137b183838151156139c15781518083602001fd5b8060405162461bcd60e51b8152600401611cfc9190613c4c565b6001600160a01b03811681146113c1575f5ffd5b5f602082840312156139ff575f5ffd5b8135611718816139db565b5f60408284031215613a1a575f5ffd5b50919050565b5f5f83601f840112613a30575f5ffd5b5081356001600160401b03811115613a46575f5ffd5b6020830191508360208260051b8501011115613a60575f5ffd5b9250929050565b5f5f5f60608486031215613a79575f5ffd5b613a838585613a0a565b925060408401356001600160401b03811115613a9d575f5ffd5b613aa986828701613a20565b9497909650939450505050565b80151581146113c1575f5ffd5b5f5f60408385031215613ad4575f5ffd5b8235613adf816139db565b91506020830135613aef81613ab6565b809150509250929050565b5f60208284031215613b0a575f5ffd5b5035919050565b5f60408284031215613b21575f5ffd5b6117188383613a0a565b5f5f60208385031215613b3c575f5ffd5b82356001600160401b03811115613b51575f5ffd5b613b5d85828601613a20565b90969095509350505050565b5f6101008284031215613a1a575f5ffd5b5f5f60408385031215613b8b575f5ffd5b82356001600160401b03811115613ba0575f5ffd5b613bac85828601613b69565b9250506020830135613aef816139db565b803563ffffffff81168114612ce6575f5ffd5b5f5f60408385031215613be1575f5ffd5b82359150613bf160208401613bbd565b90509250929050565b5f5f5f60408486031215613c0c575f5ffd5b83356001600160401b03811115613c21575f5ffd5b613c2d86828701613a20565b9094509250506020840135613c41816139db565b809150509250925092565b602081525f82518060208401528060208501604085015e5f604082850101526040601f19601f83011684010191505092915050565b5f60208284031215613c91575f5ffd5b61171882613bbd565b5f60208284031215613caa575f5ffd5b813560ff81168114611718575f5ffd5b5f60208284031215613cca575f5ffd5b81356001600160401b03811115613cdf575f5ffd5b6137b184828501613b69565b5f5f60408385031215613cfc575f5ffd5b8235613d07816139db565b946020939093013593505050565b5f5f60408385031215613d26575f5ffd5b8235613d31816139db565b91506020830135613aef816139db565b5f5f5f60408486031215613d53575f5ffd5b8335613d5e816139db565b925060208401356001600160401b03811115613a9d575f5ffd5b5f5f60608385031215613d89575f5ffd5b8235613d94816139db565b9150613bf18460208501613a0a565b803561ffff81168114612ce6575f5ffd5b5f60208284031215613dc4575f5ffd5b61171882613da3565b5f5f60408385031215613dde575f5ffd5b8235613de9816139db565b9150613bf160208401613da3565b5f5f5f60608486031215613e09575f5ffd5b8335613e14816139db565b92506020840135613e24816139db565b9150613e3260408501613da3565b90509250925092565b5f5f5f5f5f60a08688031215613e4f575f5ffd5b8535613e5a816139db565b9450602086013593506040860135613e71816139db565b9250613e7f60608701613bbd565b9150613e8d60808701613da3565b90509295509295909350565b5f5f5f60808486031215613eab575f5ffd5b8335613eb6816139db565b9250613ec58560208601613a0a565b9150613e3260608501613da3565b8035613ede816139db565b6001600160a01b0316825263ffffffff613efa60208301613bbd565b1660208301525050565b6040810161137a8284613ed3565b5f60208284031215613f22575f5ffd5b815161171881613ab6565b634e487b7160e01b5f52603260045260245ffd5b5f823560be19833603018112613f55575f5ffd5b9190910192915050565b5f5f8335601e19843603018112613f74575f5ffd5b83016020810192503590506001600160401b03811115613f92575f5ffd5b8060061b3603821315613a60575f5ffd5b8183526020830192505f815f5b84811015614006578135613fc3816139db565b6001600160a01b0316865260208201356bffffffffffffffffffffffff8116808214613fed575f5ffd5b6020880152506040958601959190910190600101613fb0565b5093949350505050565b5f5f8335601e19843603018112614025575f5ffd5b83016020810192503590506001600160401b03811115614043575f5ffd5b803603821315613a60575f5ffd5b81835281816020850137505f828201602090810191909152601f909101601f19169091010190565b5f6140848283613f5f565b60c0855261409660c086018284613fa3565b91505060208301356140a7816139db565b6001600160a01b031660208501526140c26040840184613f5f565b858303604087015280835290915f91906020015b818310156141115783356140e9816139db565b6001600160a01b031681526020848101359082015260409384019360019390930192016140d6565b61411d60608701613bbd565b63ffffffff81166060890152935061413760808701613bbd565b63ffffffff81166080890152935061415260a0870187614010565b9450925086810360a088015261389c818585614051565b60018060a01b0384168152826020820152606060408201525f61418f6060830184614079565b95945050505050565b634e487b7160e01b5f52601160045260245ffd5b8082018082111561137a5761137a614198565b6141c98185613ed3565b826040820152608060608201525f61418f6080830184614079565b8181038181111561137a5761137a614198565b5f8161420557614205614198565b505f190190565b5f8235609e19833603018112613f55575f5ffd5b5f61422b8283613f5f565b60a0855261423d60a086018284613fa3565b915050602083013561424e816139db565b6001600160a01b031660208501526040838101359085015263ffffffff61427760608501613bbd565b16606085015263ffffffff61428e60808501613bbd565b1660808501528091505092915050565b60018060a01b0384168152826020820152606060408201525f61418f6060830184614220565b602081525f6117186020830184614220565b63ffffffff818116838216019081111561137a5761137a614198565b5f823560fe19833603018112613f55575f5ffd5b828152604060208201525f6137b16040830184614079565b5f604082840312801561432f575f5ffd5b50604080519081016001600160401b038111828210171561435e57634e487b7160e01b5f52604160045260245ffd5b604052823561436c816139db565b815261437a60208401613bbd565b60208201529392505050565b63ffffffff828116828216039081111561137a5761137a614198565b5f63ffffffff8216806143b7576143b7614198565b5f190192915050565b5f602082840312156143d0575f5ffd5b5051919050565b60a081016143e58287613ed3565b63ffffffff94909416604082015261ffff92831660608201529116608090910152919050565b5f5f8335601e19843603018112614420575f5ffd5b8301803591506001600160401b03821115614439575f5ffd5b6020019150600681901b3603821315613a60575f5ffd5b5f5f8335601e19843603018112614465575f5ffd5b8301803591506001600160401b0382111561447e575f5ffd5b6020019150600581901b3603821315613a60575f5ffd5b5f5f8335601e198436030181126144aa575f5ffd5b8301803591506001600160401b038211156144c3575f5ffd5b602001915036819003821315613a60575f5ffd5b80516020808301519190811015613a1a575f1960209190910360031b1b16919050565b5f6020828403121561450a575f5ffd5b8151611718816139db565b634e487b7160e01b5f52601260045260245ffd5b5f63ffffffff83168061453e5761453e614515565b8063ffffffff84160691505092915050565b5f8261455e5761455e614515565b500490565b5f82518060208501845e5f920191825250919050565b5f8261458757614587614515565b50069056fea264697066735822122081f54880427b3a3f6bdcddeca23f5346948d7f1f0c269c7267f53d72c441d29264736f6c634300081b0033", + Bin: "0x6101e0604052348015610010575f5ffd5b50604051614b90380380614b9083398101604081905261002f9161034a565b610140810151608082015182516020840151604085015160a086015160c087015160e08801516101008901516101208a015160608b01516001600160a01b03811661008d576040516339b190bb60e11b815260040160405180910390fd5b6001600160a01b03166080526100a38582610465565b63ffffffff16156100c757604051630e06bd3160e01b815260040160405180910390fd5b6100d46201518086610465565b63ffffffff16156100f85760405163223c7b3960e11b815260040160405180910390fd5b6001600160a01b0397881660a05295871660c05293861660e05263ffffffff9283166101005290821661012052811661014052908116610160521661018052166101a05261014581610158565b6101c0525061015261019e565b506104f3565b5f5f829050601f8151111561018b578260405163305a27a960e01b81526004016101829190610498565b60405180910390fd5b8051610196826104cd565b179392505050565b5f54610100900460ff16156102055760405162461bcd60e51b815260206004820152602760248201527f496e697469616c697a61626c653a20636f6e747261637420697320696e697469604482015266616c697a696e6760c81b6064820152608401610182565b5f5460ff90811614610254575f805460ff191660ff9081179091556040519081527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b565b634e487b7160e01b5f52604160045260245ffd5b60405161016081016001600160401b038111828210171561028d5761028d610256565b60405290565b80516001600160a01b03811681146102a9575f5ffd5b919050565b805163ffffffff811681146102a9575f5ffd5b5f82601f8301126102d0575f5ffd5b81516001600160401b038111156102e9576102e9610256565b604051601f8201601f19908116603f011681016001600160401b038111828210171561031757610317610256565b60405281815283820160200185101561032e575f5ffd5b8160208501602083015e5f918101602001919091529392505050565b5f6020828403121561035a575f5ffd5b81516001600160401b0381111561036f575f5ffd5b82016101608185031215610381575f5ffd5b61038961026a565b61039282610293565b81526103a060208301610293565b60208201526103b160408301610293565b60408201526103c260608301610293565b60608201526103d360808301610293565b60808201526103e460a083016102ae565b60a08201526103f560c083016102ae565b60c082015261040660e083016102ae565b60e082015261041861010083016102ae565b61010082015261042b61012083016102ae565b6101208201526101408201516001600160401b0381111561044a575f5ffd5b610456868285016102c1565b61014083015250949350505050565b5f63ffffffff83168061048657634e487b7160e01b5f52601260045260245ffd5b8063ffffffff84160691505092915050565b602081525f82518060208401528060208501604085015e5f604082850101526040601f19601f83011684010191505092915050565b805160208083015191908110156104ed575f198160200360031b1b821691505b50919050565b60805160a05160c05160e05161010051610120516101405161016051610180516101a0516101c0516145c26105ce5f395f61138701525f81816105f001526124b301525f81816104a4015261341101525f81816103f3015261299801525f818161055201526133cf01525f818161087e01526132b901525f81816107bf01528181613309015261337d01525f81816108d201528181610adc01528181611bff0152611e8c01525f818161057901526134ac01525f81816109450152611b6f01525f81816107510152818161283d01526131ea01526145c25ff3fe608060405234801561000f575f5ffd5b50600436106103b3575f3560e01c8063886f1195116101f5578063de02e50311610114578063f6efbb59116100a9578063fabc1cbc11610079578063fabc1cbc14610a33578063fbf1e2c114610a46578063fce36c7d14610a59578063ff9f6cce14610a6c575f5ffd5b8063f6efbb59146109e7578063f74e8eac146109fa578063f8cd844814610a0d578063f96abf2e14610a20575f5ffd5b8063ed71e6a2116100e4578063ed71e6a214610967578063f22cef8514610994578063f2f07ab4146109a7578063f2fde38b146109d4575f5ffd5b8063de02e50314610907578063e063f81f1461091a578063e810ce211461092d578063ea4d3c9b14610940575f5ffd5b8063a50a1d9c1161018a578063bf21a8aa1161015a578063bf21a8aa14610879578063c46db606146108a0578063ca8aa7c7146108cd578063dcbb03b3146108f4575f5ffd5b8063a50a1d9c14610807578063aebd8bae1461081a578063b3dbb0e014610847578063bb7e451f1461085a575f5ffd5b80639cb9a5fa116101c55780639cb9a5fa146107a75780639d45c281146107ba5780639de4b35f146107e1578063a0169ddd146107f4575f5ffd5b8063886f11951461074c5780638da5cb5b146107735780639104c319146107845780639be3d4e41461079f575f5ffd5b80634596021c116102e15780635c975abb11610276578063715018a611610246578063715018a6146106ff5780637b8f8b0514610707578063863cb9a91461070f578063865c695314610722575f5ffd5b80635c975abb146106a25780635e9d8348146106aa57806363f6a798146106bd5780636d21117e146106d2575f5ffd5b806354fd4d50116102b157806354fd4d501461064f57806358baaa3e14610664578063595c6a67146106775780635ac86ab71461067f575f5ffd5b80634596021c146105d85780634657e26a146105eb5780634b943960146106125780634d18cc3514610638575f5ffd5b8063149bc8721161035757806339b70e381161032757806339b70e38146105745780633a8c07861461059b5780633ccc861d146105b25780633efe1db6146105c5575f5ffd5b8063149bc872146104d95780632b9f64a4146104fa57806336af41fa1461053a57806337838ed01461054d575f5ffd5b80630e9a53cf116103925780630e9a53cf1461043f5780630eb383451461048c578063131433b41461049f578063136439dd146104c6575f5ffd5b806218572c146103b757806304a0c502146103ee5780630ca298991461042a575b5f5ffd5b6103d96103c53660046139ef565b60d16020525f908152604090205460ff1681565b60405190151581526020015b60405180910390f35b6104157f000000000000000000000000000000000000000000000000000000000000000081565b60405163ffffffff90911681526020016103e5565b61043d610438366004613a67565b610a7f565b005b610447610d25565b6040516103e591905f6080820190508251825263ffffffff602084015116602083015263ffffffff604084015116604083015260608301511515606083015292915050565b61043d61049a366004613ac3565b610e25565b6104157f000000000000000000000000000000000000000000000000000000000000000081565b61043d6104d4366004613afa565b610ea5565b6104ec6104e7366004613b11565b610edf565b6040519081526020016103e5565b6105226105083660046139ef565b60cc6020525f90815260409020546001600160a01b031681565b6040516001600160a01b0390911681526020016103e5565b61043d610548366004613b2b565b610f54565b6104157f000000000000000000000000000000000000000000000000000000000000000081565b6105227f000000000000000000000000000000000000000000000000000000000000000081565b60cb5461041590600160a01b900463ffffffff1681565b61043d6105c0366004613b7a565b6110c5565b61043d6105d3366004613bd0565b6110ec565b61043d6105e6366004613bfa565b6112c2565b6105227f000000000000000000000000000000000000000000000000000000000000000081565b6106256106203660046139ef565b611325565b60405161ffff90911681526020016103e5565b60cb5461041590600160c01b900463ffffffff1681565b610657611380565b6040516103e59190613c4c565b61043d610672366004613c81565b6113b0565b61043d6113c4565b6103d961068d366004613c9a565b606654600160ff9092169190911b9081161490565b6066546104ec565b6103d96106b8366004613cba565b6113d8565b60cb5461062590600160e01b900461ffff1681565b6103d96106e0366004613ceb565b60cf60209081525f928352604080842090915290825290205460ff1681565b61043d611463565b60ca546104ec565b61043d61071d3660046139ef565b611474565b6104ec610730366004613d15565b60cd60209081525f928352604080842090915290825290205481565b6105227f000000000000000000000000000000000000000000000000000000000000000081565b6033546001600160a01b0316610522565b61052273beac0eeeeeeeeeeeeeeeeeeeeeeeeeeeeeebeac081565b610447611485565b61043d6107b5366004613d41565b611521565b6104157f000000000000000000000000000000000000000000000000000000000000000081565b6106256107ef366004613d78565b61169c565b61043d6108023660046139ef565b61171f565b61043d610815366004613db4565b61172a565b6103d9610828366004613ceb565b60d260209081525f928352604080842090915290825290205460ff1681565b61043d610855366004613dcd565b61173b565b6104ec6108683660046139ef565b60ce6020525f908152604090205481565b6104157f000000000000000000000000000000000000000000000000000000000000000081565b6103d96108ae366004613ceb565b60d060209081525f928352604080842090915290825290205460ff1681565b6105227f000000000000000000000000000000000000000000000000000000000000000081565b61043d610902366004613df7565b611866565b610447610915366004613afa565b6119b3565b610625610928366004613d15565b611a43565b61041561093b366004613afa565b611aa8565b6105227f000000000000000000000000000000000000000000000000000000000000000081565b6103d9610975366004613ceb565b60d360209081525f928352604080842090915290825290205460ff1681565b61043d6109a2366004613d15565b611b29565b6103d96109b5366004613ceb565b60d760209081525f928352604080842090915290825290205460ff1681565b61043d6109e23660046139ef565b611c93565b61043d6109f5366004613e3b565b611d0e565b61043d610a08366004613e99565b611e43565b6104ec610a1b366004613b11565b61200a565b61043d610a2e366004613c81565b61201a565b61043d610a41366004613afa565b61214b565b60cb54610522906001600160a01b031681565b61043d610a67366004613b2b565b6121b8565b61043d610a7a366004613b2b565b6122e9565b6009610a8a8161244a565b610a9760208501856139ef565b610aa081612475565b610abd5760405163932d94f760e01b815260040160405180910390fd5b610ac561251f565b6040516304c1b8eb60e31b81526001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000169063260dc75890610b11908890600401613f04565b602060405180830381865afa158015610b2c573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610b509190613f12565b610b6d57604051631fb1705560e21b815260040160405180910390fd5b5f5b83811015610d135736858583818110610b8a57610b8a613f2d565b9050602002810190610b9c9190613f41565b90505f60ce81610baf60208b018b6139ef565b6001600160a01b031681526020808201929092526040015f90812054925090610bda908a018a6139ef565b8284604051602001610bee93929190614169565b6040516020818303038152906040528051906020012090505f610c1084612578565b9050600160d75f610c2460208e018e6139ef565b6001600160a01b0316815260208082019290925260409081015f9081208682529092529020805460ff1916911515919091179055610c638360016141ac565b60ce5f610c7360208e018e6139ef565b6001600160a01b03166001600160a01b031681526020019081526020015f208190555081336001600160a01b03167ffff0759ccb371dfb5691798724e70b4fa61cb3bfe730a33ac19fb86a48efc7568c8688604051610cd4939291906141bf565b60405180910390a3610d03333083610cf26040890160208a016139ef565b6001600160a01b0316929190612763565b505060019092019150610b6f9050565b50610d1e6001609755565b5050505050565b604080516080810182525f80825260208201819052918101829052606081019190915260ca545b8015610dfd575f60ca610d606001846141e4565b81548110610d7057610d70613f2d565b5f91825260209182902060408051608081018252600293909302909101805483526001015463ffffffff80821694840194909452600160201b810490931690820152600160401b90910460ff161580156060830181905291925090610ddf5750806040015163ffffffff164210155b15610dea5792915050565b5080610df5816141f7565b915050610d4c565b5050604080516080810182525f80825260208201819052918101829052606081019190915290565b610e2d6127ce565b6001600160a01b0382165f81815260d1602052604080822054905160ff9091169284151592841515927f4de6293e668df1398422e1def12118052c1539a03cbfedc145895d48d7685f1c9190a4506001600160a01b03919091165f90815260d160205260409020805460ff1916911515919091179055565b610ead612828565b6066548181168114610ed25760405163c61dca5d60e01b815260040160405180910390fd5b610edb826128cb565b5050565b5f80610eee60208401846139ef565b8360200135604051602001610f379392919060f89390931b6001600160f81b031916835260609190911b6bffffffffffffffffffffffff19166001830152601582015260350190565b604051602081830303815290604052805190602001209050919050565b6001610f5f8161244a565b335f90815260d1602052604090205460ff16610f8e57604051635c427cd960e01b815260040160405180910390fd5b610f9661251f565b5f5b828110156110b55736848483818110610fb357610fb3613f2d565b9050602002810190610fc5919061420c565b335f81815260ce60209081526040808320549051949550939192610fef929091859187910161429e565b60405160208183030381529060405280519060200120905061101083612908565b335f90815260d0602090815260408083208484529091529020805460ff191660019081179091556110429083906141ac565b335f81815260ce602052604090819020929092559051829184917f51088b8c89628df3a8174002c2a034d0152fce6af8415d651b2a4734bf270482906110899088906142c4565b60405180910390a46110aa333060408601803590610cf290602089016139ef565b505050600101610f98565b506110c06001609755565b505050565b60026110d08161244a565b6110d861251f565b6110e283836129f3565b6110c06001609755565b60036110f78161244a565b60cb546001600160a01b0316331461112257604051635c427cd960e01b815260040160405180910390fd5b60cb5463ffffffff600160c01b90910481169083161161115557604051631ca7e50b60e21b815260040160405180910390fd5b428263ffffffff161061117b576040516306957c9160e11b815260040160405180910390fd5b60ca5460cb545f9061119a90600160a01b900463ffffffff16426142d6565b6040805160808101825287815263ffffffff87811660208084018281528684168587018181525f6060880181815260ca8054600181018255925297517f42d72674974f694b5f5159593243114d38a5c39c89d6b62fee061ff523240ee160029092029182015592517f42d72674974f694b5f5159593243114d38a5c39c89d6b62fee061ff523240ee290930180549151975193871667ffffffffffffffff1990921691909117600160201b978716979097029690961760ff60401b1916600160401b921515929092029190911790945560cb805463ffffffff60c01b1916600160c01b840217905593519283529394508892908616917fecd866c3c158fa00bf34d803d5f6023000b57080bcb48af004c2b4b46b3afd08910160405180910390a45050505050565b60026112cd8161244a565b6112d561251f565b5f5b838110156113145761130c8585838181106112f4576112f4613f2d565b905060200281019061130691906142f2565b846129f3565b6001016112d7565b5061131f6001609755565b50505050565b6001600160a01b0381165f90815260d5602090815260408083208151606081018352905461ffff80821683526201000082041693820193909352600160201b90920463ffffffff169082015261137a90612c7b565b92915050565b60606113ab7f0000000000000000000000000000000000000000000000000000000000000000612ceb565b905090565b6113b86127ce565b6113c181612d28565b50565b6113cc612828565b6113d65f196128cb565b565b5f61145b8260ca6113ec6020830183613c81565b63ffffffff168154811061140257611402613f2d565b5f91825260209182902060408051608081018252600293909302909101805483526001015463ffffffff80821694840194909452600160201b810490931690820152600160401b90910460ff1615156060820152612d99565b506001919050565b61146b6127ce565b6113d65f612f3c565b61147c6127ce565b6113c181612f8d565b604080516080810182525f80825260208201819052918101829052606081019190915260ca80546114b8906001906141e4565b815481106114c8576114c8613f2d565b5f91825260209182902060408051608081018252600293909302909101805483526001015463ffffffff80821694840194909452600160201b810490931690820152600160401b90910460ff1615156060820152919050565b600561152c8161244a565b8361153681612475565b6115535760405163932d94f760e01b815260040160405180910390fd5b61155b61251f565b5f5b83811015610d13573685858381811061157857611578613f2d565b905060200281019061158a9190613f41565b6001600160a01b0388165f90815260ce60209081526040808320549051939450926115bb918b918591879101614169565b6040516020818303038152906040528051906020012090505f6115dd84612578565b6001600160a01b038b165f90815260d3602090815260408083208684529091529020805460ff1916600190811790915590915061161b9084906141ac565b6001600160a01b038b165f81815260ce60205260409081902092909255905183919033907ffc8888bffd711da60bc5092b33f677d81896fe80ecc677b84cfab8184462b6e09061166e9088908a90614306565b60405180910390a461168c333083610cf26040890160208a016139ef565b50506001909201915061155d9050565b6001600160a01b0382165f90815260d66020526040812061171890826116cf6116ca3687900387018761431e565b612fe8565b815260208082019290925260409081015f208151606081018352905461ffff80821683526201000082041693820193909352600160201b90920463ffffffff1690820152612c7b565b9392505050565b33610edb818361304b565b6117326127ce565b6113c1816130ae565b60076117468161244a565b8261175081612475565b61176d5760405163932d94f760e01b815260040160405180910390fd5b60cb545f9061178990600160a01b900463ffffffff16426142d6565b6001600160a01b0386165f90815260d5602090815260408083208151606081018352905461ffff80821683526201000082041693820193909352600160201b90920463ffffffff1690820152919250906117e290612c7b565b6001600160a01b0387165f90815260d560205260409020909150611807908684613119565b6040805163ffffffff8416815261ffff838116602083015287168183015290516001600160a01b0388169133917fd1e028bd664486a46ad26040e999cd2d22e1e9a094ee6afe19fcf64678f16f749181900360600190a3505050505050565b60066118718161244a565b8361187b81612475565b6118985760405163932d94f760e01b815260040160405180910390fd5b60cb545f906118b490600160a01b900463ffffffff16426142d6565b6001600160a01b038781165f90815260d460209081526040808320938a1683529281528282208351606081018552905461ffff80821683526201000082041692820192909252600160201b90910463ffffffff169281019290925291925061191b90612c7b565b6001600160a01b038089165f90815260d460209081526040808320938b1683529290522090915061194d908684613119565b6040805163ffffffff8416815261ffff838116602083015287168183015290516001600160a01b0388811692908a169133917f48e198b6ae357e529204ee53a8e514c470ff77d9cc8e4f7207f8b5d490ae6934919081900360600190a450505050505050565b604080516080810182525f80825260208201819052918101829052606081019190915260ca82815481106119e9576119e9613f2d565b5f91825260209182902060408051608081018252600293909302909101805483526001015463ffffffff80821694840194909452600160201b810490931690820152600160401b90910460ff161515606082015292915050565b6001600160a01b038281165f90815260d46020908152604080832093851683529281528282208351606081018552905461ffff80821683526201000082041692820192909252600160201b90910463ffffffff16928101929092529061171890612c7b565b60ca545f905b63ffffffff811615611b0f578260ca611ac8600184614386565b63ffffffff1681548110611ade57611ade613f2d565b905f5260205f2090600202015f015403611afd57611718600182614386565b80611b07816143a2565b915050611aae565b5060405163504570e360e01b815260040160405180910390fd5b81611b3381612475565b611b505760405163932d94f760e01b815260040160405180910390fd5b6040516336b87bd760e11b81526001600160a01b0384811660048301527f00000000000000000000000000000000000000000000000000000000000000001690636d70f7ae90602401602060405180830381865afa158015611bb4573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611bd89190613f12565b80611c6c575060405163ba1a84e560e01b81526001600160a01b0384811660048301525f917f00000000000000000000000000000000000000000000000000000000000000009091169063ba1a84e590602401602060405180830381865afa158015611c46573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611c6a91906143c0565b115b611c895760405163fb494ea160e01b815260040160405180910390fd5b6110c0838361304b565b611c9b6127ce565b6001600160a01b038116611d055760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b60648201526084015b60405180910390fd5b6113c181612f3c565b5f54610100900460ff1615808015611d2c57505f54600160ff909116105b80611d455750303b158015611d4557505f5460ff166001145b611da85760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201526d191e481a5b9a5d1a585b1a5e995960921b6064820152608401611cfc565b5f805460ff191660011790558015611dc9575f805461ff0019166101001790555b611dd2856128cb565b611ddb86612f3c565b611de484612f8d565b611ded83612d28565b611df6826130ae565b8015611e3b575f805461ff0019169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b505050505050565b6008611e4e8161244a565b83611e5881612475565b611e755760405163932d94f760e01b815260040160405180910390fd5b6040516304c1b8eb60e31b81526001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000169063260dc75890611ec1908790600401613f04565b602060405180830381865afa158015611edc573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611f009190613f12565b611f1d57604051631fb1705560e21b815260040160405180910390fd5b60cb545f90611f3990600160a01b900463ffffffff16426142d6565b6001600160a01b0387165f90815260d66020526040812091925090611f6b90826116cf6116ca368b90038b018b61431e565b6001600160a01b0388165f90815260d660205260408120919250611fb09190611f9c6116ca368b90038b018b61431e565b81526020019081526020015f208684613119565b866001600160a01b0316336001600160a01b03167f14918b3834ab6752eb2e1b489b6663a67810efb5f56f3944a97ede8ecf1fd9f18885858a604051611ff994939291906143d7565b60405180910390a350505050505050565b5f6001610eee60208401846139ef565b60036120258161244a565b60cb546001600160a01b0316331461205057604051635c427cd960e01b815260040160405180910390fd5b60ca5463ffffffff831610612078576040516394a8d38960e01b815260040160405180910390fd5b5f60ca8363ffffffff168154811061209257612092613f2d565b905f5260205f20906002020190508060010160089054906101000a900460ff16156120d057604051631b14174b60e01b815260040160405180910390fd5b6001810154600160201b900463ffffffff16421061210157604051630c36f66560e21b815260040160405180910390fd5b60018101805460ff60401b1916600160401b17905560405163ffffffff8416907fd850e6e5dfa497b72661fa73df2923464eaed9dc2ff1d3cb82bccbfeabe5c41e905f90a2505050565b6121536131e8565b6066548019821981161461217a5760405163c61dca5d60e01b815260040160405180910390fd5b606682905560405182815233907f3582d1828e26bf56bd801502bc021ac0bc8afb57c826e4986b45593c8fad389c9060200160405180910390a25050565b5f6121c28161244a565b6121ca61251f565b5f5b828110156110b557368484838181106121e7576121e7613f2d565b90506020028101906121f9919061420c565b335f81815260ce60209081526040808320549051949550939192612223929091859187910161429e565b60405160208183030381529060405280519060200120905061224483612908565b335f90815260cf602090815260408083208484529091529020805460ff191660019081179091556122769083906141ac565b335f81815260ce602052604090819020929092559051829184917f450a367a380c4e339e5ae7340c8464ef27af7781ad9945cfe8abd828f89e6281906122bd9088906142c4565b60405180910390a46122de333060408601803590610cf290602089016139ef565b5050506001016121cc565b60046122f48161244a565b335f90815260d1602052604090205460ff1661232357604051635c427cd960e01b815260040160405180910390fd5b61232b61251f565b5f5b828110156110b5573684848381811061234857612348613f2d565b905060200281019061235a919061420c565b335f81815260ce60209081526040808320549051949550939192612384929091859187910161429e565b6040516020818303038152906040528051906020012090506123a583612908565b335f90815260d2602090815260408083208484529091529020805460ff191660019081179091556123d79083906141ac565b335f81815260ce602052604090819020929092559051829184917f5251b6fdefcb5d81144e735f69ea4c695fd43b0289ca53dc075033f5fc80068b9061241e9088906142c4565b60405180910390a461243f333060408601803590610cf290602089016139ef565b50505060010161232d565b606654600160ff83161b908116036113c15760405163840a48d560e01b815260040160405180910390fd5b604051631beb2b9760e31b81526001600160a01b0382811660048301523360248301523060448301525f80356001600160e01b0319166064840152917f00000000000000000000000000000000000000000000000000000000000000009091169063df595cb8906084016020604051808303815f875af11580156124fb573d5f5f3e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061137a9190613f12565b6002609754036125715760405162461bcd60e51b815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c006044820152606401611cfc565b6002609755565b5f6125ab612586838061440b565b6125966080860160608701613c81565b6125a660a0870160808801613c81565b613299565b5f6125b9604084018461440b565b9050116125d95760405163796cc52560e01b815260040160405180910390fd5b426125ea60a0840160808501613c81565b6125fa6080850160608601613c81565b61260491906142d6565b63ffffffff16106126285760405163150358a160e21b815260040160405180910390fd5b5f80805b612639604086018661440b565b905081101561272a5736612650604087018761440b565b8381811061266057612660613f2d565b6040029190910191505f905061267960208301836139ef565b6001600160a01b0316036126a057604051630863a45360e11b815260040160405180910390fd5b6126ad60208201826139ef565b6001600160a01b0316836001600160a01b0316106126de576040516310fb47f160e31b815260040160405180910390fd5b5f816020013511612702576040516310eb483f60e21b815260040160405180910390fd5b61270f60208201826139ef565b925061271f6020820135856141ac565b93505060010161262c565b506f4b3b4ca85a86c47a098a223fffffffff82111561275c5760405163070b5a6f60e21b815260040160405180910390fd5b5092915050565b6040516001600160a01b038085166024830152831660448201526064810182905261131f9085906323b872dd60e01b906084015b60408051601f198184030181529190526020810180516001600160e01b03166001600160e01b031990931692909217909152613597565b6033546001600160a01b031633146113d65760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401611cfc565b60405163237dfb4760e11b81523360048201527f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316906346fbf68e90602401602060405180830381865afa15801561288a573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906128ae9190613f12565b6113d657604051631d77d47760e21b815260040160405180910390fd5b606681905560405181815233907fab40a374bc51de372200a8bc981af8c9ecdc08dfdaef0bb6e09f88f3c616ef3d9060200160405180910390a250565b612935612915828061440b565b6129256080850160608601613c81565b6125a660a0860160808701613c81565b5f816040013511612959576040516310eb483f60e21b815260040160405180910390fd5b6f4b3b4ca85a86c47a098a223fffffffff8160400135111561298e5760405163070b5a6f60e21b815260040160405180910390fd5b6129be63ffffffff7f000000000000000000000000000000000000000000000000000000000000000016426141ac565b6129ce6080830160608401613c81565b63ffffffff1611156113c157604051637ee2b44360e01b815260040160405180910390fd5b5f60ca612a036020850185613c81565b63ffffffff1681548110612a1957612a19613f2d565b5f91825260209182902060408051608081018252600293909302909101805483526001015463ffffffff80821694840194909452600160201b810490931690820152600160401b90910460ff16151560608201529050612a798382612d99565b5f612a8a60808501606086016139ef565b6001600160a01b038082165f90815260cc60205260409020549192501680612aaf5750805b336001600160a01b03821614612ad857604051635c427cd960e01b815260040160405180910390fd5b5f5b612ae760a0870187614450565b9050811015611e3b5736612afe60e088018861440b565b83818110612b0e57612b0e613f2d565b6001600160a01b0387165f90815260cd602090815260408083209302949094019450929091508290612b42908501856139ef565b6001600160a01b03166001600160a01b031681526020019081526020015f2054905080826020013511612b885760405163aa385e8160e01b815260040160405180910390fd5b5f612b978260208501356141e4565b6001600160a01b0387165f90815260cd60209081526040822092935085018035929190612bc490876139ef565b6001600160a01b031681526020808201929092526040015f2091909155612c059089908390612bf5908701876139ef565b6001600160a01b0316919061366a565b86516001600160a01b03808a1691878216918916907f9543dbd55580842586a951f0386e24d68a5df99ae29e3b216588b45fd684ce3190612c4960208901896139ef565b604080519283526001600160a01b039091166020830152810186905260600160405180910390a4505050600101612ada565b5f816040015163ffffffff165f1480612cad5750815161ffff908116148015612cad5750816040015163ffffffff1642105b15612cc557505060cb54600160e01b900461ffff1690565b816040015163ffffffff16421015612cde57815161137a565b506020015190565b919050565b60605f612cf78361369a565b6040805160208082528183019092529192505f91906020820181803683375050509182525060208101929092525090565b60cb546040805163ffffffff600160a01b9093048316815291831660208301527faf557c6c02c208794817a705609cfa935f827312a1adfdd26494b6b95dd2b4b3910160405180910390a160cb805463ffffffff909216600160a01b0263ffffffff60a01b19909216919091179055565b806060015115612dbc57604051631b14174b60e01b815260040160405180910390fd5b806040015163ffffffff16421015612de757604051631437a2bb60e31b815260040160405180910390fd5b612df460c0830183614450565b9050612e0360a0840184614450565b905014612e23576040516343714afd60e01b815260040160405180910390fd5b612e3060e083018361440b565b9050612e3f60c0840184614450565b905014612e5f576040516343714afd60e01b815260040160405180910390fd5b8051612e8b90612e756040850160208601613c81565b612e826040860186614495565b866060016136c1565b5f5b612e9a60a0840184614450565b90508110156110c057612f346080840135612eb860a0860186614450565b84818110612ec857612ec8613f2d565b9050602002016020810190612edd9190613c81565b612eea60c0870187614450565b85818110612efa57612efa613f2d565b9050602002810190612f0c9190614495565b612f1960e089018961440b565b87818110612f2957612f29613f2d565b905060400201613765565b600101612e8d565b603380546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0905f90a35050565b60cb546040516001600160a01b038084169216907f237b82f438d75fc568ebab484b75b01d9287b9e98b490b7c23221623b6705dbb905f90a360cb80546001600160a01b0319166001600160a01b0392909216919091179055565b5f815f0151826020015163ffffffff1660405160200161303392919060609290921b6bffffffffffffffffffffffff1916825260a01b6001600160a01b031916601482015260200190565b60405160208183030381529060405261137a906144d7565b6001600160a01b038083165f81815260cc602052604080822080548686166001600160a01b0319821681179092559151919094169392849290917fbab947934d42e0ad206f25c9cab18b5bb6ae144acfb00f40b4e3aa59590ca3129190a4505050565b60cb546040805161ffff600160e01b9093048316815291831660208301527fe6cd4edfdcc1f6d130ab35f73d72378f3a642944fb4ee5bd84b7807a81ea1c4e910160405180910390a160cb805461ffff909216600160e01b0261ffff60e01b19909216919091179055565b61271061ffff831611156131405760405163891c63df60e01b815260040160405180910390fd5b8254600160201b900463ffffffff16421161316e57604051637b1e25c560e01b815260040160405180910390fd5b8254600160201b900463ffffffff165f0361319557825461ffff191661ffff1783556131ac565b825462010000810461ffff1661ffff199091161783555b825463ffffffff909116600160201b0267ffffffff000000001961ffff90931662010000029290921667ffffffffffff00001990911617179055565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663eab66d7a6040518163ffffffff1660e01b8152600401602060405180830381865afa158015613244573d5f5f3e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061326891906144fa565b6001600160a01b0316336001600160a01b0316146113d65760405163794821ff60e01b815260040160405180910390fd5b826132b75760405163796cc52560e01b815260040160405180910390fd5b7f000000000000000000000000000000000000000000000000000000000000000063ffffffff168163ffffffff16111561330457604051630dd0b9f560e21b815260040160405180910390fd5b61332e7f000000000000000000000000000000000000000000000000000000000000000082614529565b63ffffffff16156133525760405163ee66470560e01b815260040160405180910390fd5b5f8163ffffffff16116133785760405163cb3f434d60e01b815260040160405180910390fd5b6133a27f000000000000000000000000000000000000000000000000000000000000000083614529565b63ffffffff16156133c657604051633c1a94f160e21b815260040160405180910390fd5b8163ffffffff167f000000000000000000000000000000000000000000000000000000000000000063ffffffff16426133ff91906141e4565b1115801561343957508163ffffffff167f000000000000000000000000000000000000000000000000000000000000000063ffffffff1611155b6134565760405163041aa75760e11b815260040160405180910390fd5b5f805b84811015611e3b575f86868381811061347457613474613f2d565b61348a92602060409092020190810191506139ef565b60405163198f077960e21b81526001600160a01b0380831660048301529192507f00000000000000000000000000000000000000000000000000000000000000009091169063663c1de490602401602060405180830381865afa1580156134f3573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906135179190613f12565b8061353e57506001600160a01b03811673beac0eeeeeeeeeeeeeeeeeeeeeeeeeeeeeebeac0145b61355b57604051632efd965160e11b815260040160405180910390fd5b806001600160a01b0316836001600160a01b03161061358d5760405163dfad9ca160e01b815260040160405180910390fd5b9150600101613459565b5f6135eb826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c6564815250856001600160a01b03166137a39092919063ffffffff16565b905080515f148061360b57508080602001905181019061360b9190613f12565b6110c05760405162461bcd60e51b815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e6044820152691bdd081cdd58d8d9595960b21b6064820152608401611cfc565b6040516001600160a01b0383166024820152604481018290526110c090849063a9059cbb60e01b90606401612797565b5f60ff8216601f81111561137a57604051632cd44ac360e21b815260040160405180910390fd5b6136cc602083614550565b6001901b8463ffffffff16106136f45760405162c6c39d60e71b815260040160405180910390fd5b5f6136fe82610edf565b905061374884848080601f0160208091040260200160405190810160405280939291908181526020018383808284375f920191909152508a92508591505063ffffffff89166137b9565b611e3b576040516369ca16c960e01b815260040160405180910390fd5b613770602083614550565b6001901b8463ffffffff16106137995760405163054ff4df60e51b815260040160405180910390fd5b5f6136fe8261200a565b60606137b184845f856137d0565b949350505050565b5f836137c68685856138a7565b1495945050505050565b6060824710156138315760405162461bcd60e51b815260206004820152602660248201527f416464726573733a20696e73756666696369656e742062616c616e636520666f6044820152651c8818d85b1b60d21b6064820152608401611cfc565b5f5f866001600160a01b0316858760405161384c9190614563565b5f6040518083038185875af1925050503d805f8114613886576040519150601f19603f3d011682016040523d82523d5f602084013e61388b565b606091505b509150915061389c8783838761393e565b979650505050505050565b5f602084516138b69190614579565b156138d4576040516313717da960e21b815260040160405180910390fd5b8260205b85518111613935576138eb600285614579565b5f0361390c57815f528086015160205260405f209150600284049350613923565b808601515f528160205260405f2091506002840493505b61392e6020826141ac565b90506138d8565b50949350505050565b606083156139ac5782515f036139a5576001600160a01b0385163b6139a55760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e74726163740000006044820152606401611cfc565b50816137b1565b6137b183838151156139c15781518083602001fd5b8060405162461bcd60e51b8152600401611cfc9190613c4c565b6001600160a01b03811681146113c1575f5ffd5b5f602082840312156139ff575f5ffd5b8135611718816139db565b5f60408284031215613a1a575f5ffd5b50919050565b5f5f83601f840112613a30575f5ffd5b5081356001600160401b03811115613a46575f5ffd5b6020830191508360208260051b8501011115613a60575f5ffd5b9250929050565b5f5f5f60608486031215613a79575f5ffd5b613a838585613a0a565b925060408401356001600160401b03811115613a9d575f5ffd5b613aa986828701613a20565b9497909650939450505050565b80151581146113c1575f5ffd5b5f5f60408385031215613ad4575f5ffd5b8235613adf816139db565b91506020830135613aef81613ab6565b809150509250929050565b5f60208284031215613b0a575f5ffd5b5035919050565b5f60408284031215613b21575f5ffd5b6117188383613a0a565b5f5f60208385031215613b3c575f5ffd5b82356001600160401b03811115613b51575f5ffd5b613b5d85828601613a20565b90969095509350505050565b5f6101008284031215613a1a575f5ffd5b5f5f60408385031215613b8b575f5ffd5b82356001600160401b03811115613ba0575f5ffd5b613bac85828601613b69565b9250506020830135613aef816139db565b803563ffffffff81168114612ce6575f5ffd5b5f5f60408385031215613be1575f5ffd5b82359150613bf160208401613bbd565b90509250929050565b5f5f5f60408486031215613c0c575f5ffd5b83356001600160401b03811115613c21575f5ffd5b613c2d86828701613a20565b9094509250506020840135613c41816139db565b809150509250925092565b602081525f82518060208401528060208501604085015e5f604082850101526040601f19601f83011684010191505092915050565b5f60208284031215613c91575f5ffd5b61171882613bbd565b5f60208284031215613caa575f5ffd5b813560ff81168114611718575f5ffd5b5f60208284031215613cca575f5ffd5b81356001600160401b03811115613cdf575f5ffd5b6137b184828501613b69565b5f5f60408385031215613cfc575f5ffd5b8235613d07816139db565b946020939093013593505050565b5f5f60408385031215613d26575f5ffd5b8235613d31816139db565b91506020830135613aef816139db565b5f5f5f60408486031215613d53575f5ffd5b8335613d5e816139db565b925060208401356001600160401b03811115613a9d575f5ffd5b5f5f60608385031215613d89575f5ffd5b8235613d94816139db565b9150613bf18460208501613a0a565b803561ffff81168114612ce6575f5ffd5b5f60208284031215613dc4575f5ffd5b61171882613da3565b5f5f60408385031215613dde575f5ffd5b8235613de9816139db565b9150613bf160208401613da3565b5f5f5f60608486031215613e09575f5ffd5b8335613e14816139db565b92506020840135613e24816139db565b9150613e3260408501613da3565b90509250925092565b5f5f5f5f5f60a08688031215613e4f575f5ffd5b8535613e5a816139db565b9450602086013593506040860135613e71816139db565b9250613e7f60608701613bbd565b9150613e8d60808701613da3565b90509295509295909350565b5f5f5f60808486031215613eab575f5ffd5b8335613eb6816139db565b9250613ec58560208601613a0a565b9150613e3260608501613da3565b8035613ede816139db565b6001600160a01b0316825263ffffffff613efa60208301613bbd565b1660208301525050565b6040810161137a8284613ed3565b5f60208284031215613f22575f5ffd5b815161171881613ab6565b634e487b7160e01b5f52603260045260245ffd5b5f823560be19833603018112613f55575f5ffd5b9190910192915050565b5f5f8335601e19843603018112613f74575f5ffd5b83016020810192503590506001600160401b03811115613f92575f5ffd5b8060061b3603821315613a60575f5ffd5b8183526020830192505f815f5b84811015614006578135613fc3816139db565b6001600160a01b0316865260208201356bffffffffffffffffffffffff8116808214613fed575f5ffd5b6020880152506040958601959190910190600101613fb0565b5093949350505050565b5f5f8335601e19843603018112614025575f5ffd5b83016020810192503590506001600160401b03811115614043575f5ffd5b803603821315613a60575f5ffd5b81835281816020850137505f828201602090810191909152601f909101601f19169091010190565b5f6140848283613f5f565b60c0855261409660c086018284613fa3565b91505060208301356140a7816139db565b6001600160a01b031660208501526140c26040840184613f5f565b858303604087015280835290915f91906020015b818310156141115783356140e9816139db565b6001600160a01b031681526020848101359082015260409384019360019390930192016140d6565b61411d60608701613bbd565b63ffffffff81166060890152935061413760808701613bbd565b63ffffffff81166080890152935061415260a0870187614010565b9450925086810360a088015261389c818585614051565b60018060a01b0384168152826020820152606060408201525f61418f6060830184614079565b95945050505050565b634e487b7160e01b5f52601160045260245ffd5b8082018082111561137a5761137a614198565b6141c98185613ed3565b826040820152608060608201525f61418f6080830184614079565b8181038181111561137a5761137a614198565b5f8161420557614205614198565b505f190190565b5f8235609e19833603018112613f55575f5ffd5b5f61422b8283613f5f565b60a0855261423d60a086018284613fa3565b915050602083013561424e816139db565b6001600160a01b031660208501526040838101359085015263ffffffff61427760608501613bbd565b16606085015263ffffffff61428e60808501613bbd565b1660808501528091505092915050565b60018060a01b0384168152826020820152606060408201525f61418f6060830184614220565b602081525f6117186020830184614220565b63ffffffff818116838216019081111561137a5761137a614198565b5f823560fe19833603018112613f55575f5ffd5b828152604060208201525f6137b16040830184614079565b5f604082840312801561432f575f5ffd5b50604080519081016001600160401b038111828210171561435e57634e487b7160e01b5f52604160045260245ffd5b604052823561436c816139db565b815261437a60208401613bbd565b60208201529392505050565b63ffffffff828116828216039081111561137a5761137a614198565b5f63ffffffff8216806143b7576143b7614198565b5f190192915050565b5f602082840312156143d0575f5ffd5b5051919050565b60a081016143e58287613ed3565b63ffffffff94909416604082015261ffff92831660608201529116608090910152919050565b5f5f8335601e19843603018112614420575f5ffd5b8301803591506001600160401b03821115614439575f5ffd5b6020019150600681901b3603821315613a60575f5ffd5b5f5f8335601e19843603018112614465575f5ffd5b8301803591506001600160401b0382111561447e575f5ffd5b6020019150600581901b3603821315613a60575f5ffd5b5f5f8335601e198436030181126144aa575f5ffd5b8301803591506001600160401b038211156144c3575f5ffd5b602001915036819003821315613a60575f5ffd5b80516020808301519190811015613a1a575f1960209190910360031b1b16919050565b5f6020828403121561450a575f5ffd5b8151611718816139db565b634e487b7160e01b5f52601260045260245ffd5b5f63ffffffff83168061453e5761453e614515565b8063ffffffff84160691505092915050565b5f8261455e5761455e614515565b500490565b5f82518060208501845e5f920191825250919050565b5f8261458757614587614515565b50069056fea26469706673582212205789cafb7c1d8f2c8f592c749b1dfc50c93fe81caa94e4d41efd74ba70a201ed64736f6c634300081b0033", } // RewardsCoordinatorABI is the input ABI used to generate the binding from. diff --git a/pkg/bindings/SlashEscrowFactory/binding.go b/pkg/bindings/SlashEscrowFactory/binding.go index db96602123..6f926cf0b4 100644 --- a/pkg/bindings/SlashEscrowFactory/binding.go +++ b/pkg/bindings/SlashEscrowFactory/binding.go @@ -38,7 +38,7 @@ type OperatorSet struct { // SlashEscrowFactoryMetaData contains all meta data concerning the SlashEscrowFactory contract. var SlashEscrowFactoryMetaData = &bind.MetaData{ ABI: "[{\"type\":\"constructor\",\"inputs\":[{\"name\":\"_allocationManager\",\"type\":\"address\",\"internalType\":\"contractIAllocationManager\"},{\"name\":\"_strategyManager\",\"type\":\"address\",\"internalType\":\"contractIStrategyManager\"},{\"name\":\"_pauserRegistry\",\"type\":\"address\",\"internalType\":\"contractIPauserRegistry\"},{\"name\":\"_slashEscrowImplementation\",\"type\":\"address\",\"internalType\":\"contractISlashEscrow\"},{\"name\":\"_version\",\"type\":\"string\",\"internalType\":\"string\"}],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"allocationManager\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"contractIAllocationManager\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"computeSlashEscrowSalt\",\"inputs\":[{\"name\":\"operatorSet\",\"type\":\"tuple\",\"internalType\":\"structOperatorSet\",\"components\":[{\"name\":\"avs\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"id\",\"type\":\"uint32\",\"internalType\":\"uint32\"}]},{\"name\":\"slashId\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"outputs\":[{\"name\":\"\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"stateMutability\":\"pure\"},{\"type\":\"function\",\"name\":\"getEscrowCompleteBlock\",\"inputs\":[{\"name\":\"operatorSet\",\"type\":\"tuple\",\"internalType\":\"structOperatorSet\",\"components\":[{\"name\":\"avs\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"id\",\"type\":\"uint32\",\"internalType\":\"uint32\"}]},{\"name\":\"slashId\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"outputs\":[{\"name\":\"\",\"type\":\"uint32\",\"internalType\":\"uint32\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"getEscrowStartBlock\",\"inputs\":[{\"name\":\"operatorSet\",\"type\":\"tuple\",\"internalType\":\"structOperatorSet\",\"components\":[{\"name\":\"avs\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"id\",\"type\":\"uint32\",\"internalType\":\"uint32\"}]},{\"name\":\"slashId\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"outputs\":[{\"name\":\"\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"getGlobalEscrowDelay\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"uint32\",\"internalType\":\"uint32\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"getPendingEscrows\",\"inputs\":[],\"outputs\":[{\"name\":\"operatorSets\",\"type\":\"tuple[]\",\"internalType\":\"structOperatorSet[]\",\"components\":[{\"name\":\"avs\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"id\",\"type\":\"uint32\",\"internalType\":\"uint32\"}]},{\"name\":\"isRedistributing\",\"type\":\"bool[]\",\"internalType\":\"bool[]\"},{\"name\":\"slashIds\",\"type\":\"uint256[][]\",\"internalType\":\"uint256[][]\"},{\"name\":\"completeBlocks\",\"type\":\"uint32[][]\",\"internalType\":\"uint32[][]\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"getPendingOperatorSets\",\"inputs\":[],\"outputs\":[{\"name\":\"operatorSets\",\"type\":\"tuple[]\",\"internalType\":\"structOperatorSet[]\",\"components\":[{\"name\":\"avs\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"id\",\"type\":\"uint32\",\"internalType\":\"uint32\"}]}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"getPendingSlashIds\",\"inputs\":[{\"name\":\"operatorSet\",\"type\":\"tuple\",\"internalType\":\"structOperatorSet\",\"components\":[{\"name\":\"avs\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"id\",\"type\":\"uint32\",\"internalType\":\"uint32\"}]}],\"outputs\":[{\"name\":\"\",\"type\":\"uint256[]\",\"internalType\":\"uint256[]\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"getPendingStrategiesForSlashId\",\"inputs\":[{\"name\":\"operatorSet\",\"type\":\"tuple\",\"internalType\":\"structOperatorSet\",\"components\":[{\"name\":\"avs\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"id\",\"type\":\"uint32\",\"internalType\":\"uint32\"}]},{\"name\":\"slashId\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"outputs\":[{\"name\":\"strategies\",\"type\":\"address[]\",\"internalType\":\"contractIStrategy[]\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"getPendingStrategiesForSlashIds\",\"inputs\":[{\"name\":\"operatorSet\",\"type\":\"tuple\",\"internalType\":\"structOperatorSet\",\"components\":[{\"name\":\"avs\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"id\",\"type\":\"uint32\",\"internalType\":\"uint32\"}]}],\"outputs\":[{\"name\":\"strategies\",\"type\":\"address[][]\",\"internalType\":\"contractIStrategy[][]\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"getPendingUnderlyingAmountForStrategy\",\"inputs\":[{\"name\":\"operatorSet\",\"type\":\"tuple\",\"internalType\":\"structOperatorSet\",\"components\":[{\"name\":\"avs\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"id\",\"type\":\"uint32\",\"internalType\":\"uint32\"}]},{\"name\":\"slashId\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"strategy\",\"type\":\"address\",\"internalType\":\"contractIStrategy\"}],\"outputs\":[{\"name\":\"\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"getSlashEscrow\",\"inputs\":[{\"name\":\"operatorSet\",\"type\":\"tuple\",\"internalType\":\"structOperatorSet\",\"components\":[{\"name\":\"avs\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"id\",\"type\":\"uint32\",\"internalType\":\"uint32\"}]},{\"name\":\"slashId\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"outputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"contractISlashEscrow\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"getStrategyEscrowDelay\",\"inputs\":[{\"name\":\"strategy\",\"type\":\"address\",\"internalType\":\"contractIStrategy\"}],\"outputs\":[{\"name\":\"\",\"type\":\"uint32\",\"internalType\":\"uint32\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"getTotalPendingOperatorSets\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"getTotalPendingSlashIds\",\"inputs\":[{\"name\":\"operatorSet\",\"type\":\"tuple\",\"internalType\":\"structOperatorSet\",\"components\":[{\"name\":\"avs\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"id\",\"type\":\"uint32\",\"internalType\":\"uint32\"}]}],\"outputs\":[{\"name\":\"\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"getTotalPendingStrategiesForSlashId\",\"inputs\":[{\"name\":\"operatorSet\",\"type\":\"tuple\",\"internalType\":\"structOperatorSet\",\"components\":[{\"name\":\"avs\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"id\",\"type\":\"uint32\",\"internalType\":\"uint32\"}]},{\"name\":\"slashId\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"outputs\":[{\"name\":\"\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"initialize\",\"inputs\":[{\"name\":\"initialOwner\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"initialPausedStatus\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"initialGlobalDelayBlocks\",\"type\":\"uint32\",\"internalType\":\"uint32\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"initiateSlashEscrow\",\"inputs\":[{\"name\":\"operatorSet\",\"type\":\"tuple\",\"internalType\":\"structOperatorSet\",\"components\":[{\"name\":\"avs\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"id\",\"type\":\"uint32\",\"internalType\":\"uint32\"}]},{\"name\":\"slashId\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"strategy\",\"type\":\"address\",\"internalType\":\"contractIStrategy\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"isDeployedSlashEscrow\",\"inputs\":[{\"name\":\"operatorSet\",\"type\":\"tuple\",\"internalType\":\"structOperatorSet\",\"components\":[{\"name\":\"avs\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"id\",\"type\":\"uint32\",\"internalType\":\"uint32\"}]},{\"name\":\"slashId\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"outputs\":[{\"name\":\"\",\"type\":\"bool\",\"internalType\":\"bool\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"isDeployedSlashEscrow\",\"inputs\":[{\"name\":\"slashEscrow\",\"type\":\"address\",\"internalType\":\"contractISlashEscrow\"}],\"outputs\":[{\"name\":\"\",\"type\":\"bool\",\"internalType\":\"bool\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"isEscrowPaused\",\"inputs\":[{\"name\":\"operatorSet\",\"type\":\"tuple\",\"internalType\":\"structOperatorSet\",\"components\":[{\"name\":\"avs\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"id\",\"type\":\"uint32\",\"internalType\":\"uint32\"}]},{\"name\":\"slashId\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"outputs\":[{\"name\":\"\",\"type\":\"bool\",\"internalType\":\"bool\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"isPendingOperatorSet\",\"inputs\":[{\"name\":\"operatorSet\",\"type\":\"tuple\",\"internalType\":\"structOperatorSet\",\"components\":[{\"name\":\"avs\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"id\",\"type\":\"uint32\",\"internalType\":\"uint32\"}]}],\"outputs\":[{\"name\":\"\",\"type\":\"bool\",\"internalType\":\"bool\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"isPendingSlashId\",\"inputs\":[{\"name\":\"operatorSet\",\"type\":\"tuple\",\"internalType\":\"structOperatorSet\",\"components\":[{\"name\":\"avs\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"id\",\"type\":\"uint32\",\"internalType\":\"uint32\"}]},{\"name\":\"slashId\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"outputs\":[{\"name\":\"\",\"type\":\"bool\",\"internalType\":\"bool\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"owner\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"address\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"pause\",\"inputs\":[{\"name\":\"newPausedStatus\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"pauseAll\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"pauseEscrow\",\"inputs\":[{\"name\":\"operatorSet\",\"type\":\"tuple\",\"internalType\":\"structOperatorSet\",\"components\":[{\"name\":\"avs\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"id\",\"type\":\"uint32\",\"internalType\":\"uint32\"}]},{\"name\":\"slashId\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"paused\",\"inputs\":[{\"name\":\"index\",\"type\":\"uint8\",\"internalType\":\"uint8\"}],\"outputs\":[{\"name\":\"\",\"type\":\"bool\",\"internalType\":\"bool\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"paused\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"pauserRegistry\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"contractIPauserRegistry\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"releaseSlashEscrow\",\"inputs\":[{\"name\":\"operatorSet\",\"type\":\"tuple\",\"internalType\":\"structOperatorSet\",\"components\":[{\"name\":\"avs\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"id\",\"type\":\"uint32\",\"internalType\":\"uint32\"}]},{\"name\":\"slashId\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"releaseSlashEscrowByStrategy\",\"inputs\":[{\"name\":\"operatorSet\",\"type\":\"tuple\",\"internalType\":\"structOperatorSet\",\"components\":[{\"name\":\"avs\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"id\",\"type\":\"uint32\",\"internalType\":\"uint32\"}]},{\"name\":\"slashId\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"strategy\",\"type\":\"address\",\"internalType\":\"contractIStrategy\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"renounceOwnership\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"setGlobalEscrowDelay\",\"inputs\":[{\"name\":\"delay\",\"type\":\"uint32\",\"internalType\":\"uint32\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"setStrategyEscrowDelay\",\"inputs\":[{\"name\":\"strategy\",\"type\":\"address\",\"internalType\":\"contractIStrategy\"},{\"name\":\"delay\",\"type\":\"uint32\",\"internalType\":\"uint32\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"slashEscrowImplementation\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"contractISlashEscrow\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"strategyManager\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"contractIStrategyManager\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"transferOwnership\",\"inputs\":[{\"name\":\"newOwner\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"unpause\",\"inputs\":[{\"name\":\"newPausedStatus\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"unpauseEscrow\",\"inputs\":[{\"name\":\"operatorSet\",\"type\":\"tuple\",\"internalType\":\"structOperatorSet\",\"components\":[{\"name\":\"avs\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"id\",\"type\":\"uint32\",\"internalType\":\"uint32\"}]},{\"name\":\"slashId\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"version\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"string\",\"internalType\":\"string\"}],\"stateMutability\":\"view\"},{\"type\":\"event\",\"name\":\"EscrowComplete\",\"inputs\":[{\"name\":\"operatorSet\",\"type\":\"tuple\",\"indexed\":false,\"internalType\":\"structOperatorSet\",\"components\":[{\"name\":\"avs\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"id\",\"type\":\"uint32\",\"internalType\":\"uint32\"}]},{\"name\":\"slashId\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"},{\"name\":\"strategy\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"contractIStrategy\"},{\"name\":\"recipient\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"EscrowPaused\",\"inputs\":[{\"name\":\"operatorSet\",\"type\":\"tuple\",\"indexed\":false,\"internalType\":\"structOperatorSet\",\"components\":[{\"name\":\"avs\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"id\",\"type\":\"uint32\",\"internalType\":\"uint32\"}]},{\"name\":\"slashId\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"EscrowUnpaused\",\"inputs\":[{\"name\":\"operatorSet\",\"type\":\"tuple\",\"indexed\":false,\"internalType\":\"structOperatorSet\",\"components\":[{\"name\":\"avs\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"id\",\"type\":\"uint32\",\"internalType\":\"uint32\"}]},{\"name\":\"slashId\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"GlobalEscrowDelaySet\",\"inputs\":[{\"name\":\"delay\",\"type\":\"uint32\",\"indexed\":false,\"internalType\":\"uint32\"}],\"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\":\"Paused\",\"inputs\":[{\"name\":\"account\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"newPausedStatus\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"StartEscrow\",\"inputs\":[{\"name\":\"operatorSet\",\"type\":\"tuple\",\"indexed\":false,\"internalType\":\"structOperatorSet\",\"components\":[{\"name\":\"avs\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"id\",\"type\":\"uint32\",\"internalType\":\"uint32\"}]},{\"name\":\"slashId\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"},{\"name\":\"strategy\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"contractIStrategy\"},{\"name\":\"startBlock\",\"type\":\"uint32\",\"indexed\":false,\"internalType\":\"uint32\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"StrategyEscrowDelaySet\",\"inputs\":[{\"name\":\"strategy\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"contractIStrategy\"},{\"name\":\"delay\",\"type\":\"uint32\",\"indexed\":false,\"internalType\":\"uint32\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"Unpaused\",\"inputs\":[{\"name\":\"account\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"newPausedStatus\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"}],\"anonymous\":false},{\"type\":\"error\",\"name\":\"CurrentlyPaused\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"EscrowDelayNotElapsed\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"EscrowNotMature\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"InputAddressZero\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"InvalidNewPausedStatus\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"InvalidShortString\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"OnlyPauser\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"OnlyRedistributionRecipient\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"OnlyStrategyManager\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"OnlyUnpauser\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"StringTooLong\",\"inputs\":[{\"name\":\"str\",\"type\":\"string\",\"internalType\":\"string\"}]}]", - Bin: "0x610120604052348015610010575f5ffd5b50604051612e89380380612e8983398101604081905261002f916101c1565b6001600160a01b0380861660805280851660a05280831660c05281908490811661006c576040516339b190bb60e11b815260040160405180910390fd5b6001600160a01b031660e05261008181610098565b610100525061008e6100de565b5050505050610319565b5f5f829050601f815111156100cb578260405163305a27a960e01b81526004016100c291906102be565b60405180910390fd5b80516100d6826102f3565b179392505050565b5f54610100900460ff16156101455760405162461bcd60e51b815260206004820152602760248201527f496e697469616c697a61626c653a20636f6e747261637420697320696e697469604482015266616c697a696e6760c81b60648201526084016100c2565b5f5460ff90811614610194575f805460ff191660ff9081179091556040519081527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b565b6001600160a01b03811681146101aa575f5ffd5b50565b634e487b7160e01b5f52604160045260245ffd5b5f5f5f5f5f60a086880312156101d5575f5ffd5b85516101e081610196565b60208701519095506101f181610196565b604087015190945061020281610196565b606087015190935061021381610196565b60808701519092506001600160401b0381111561022e575f5ffd5b8601601f8101881361023e575f5ffd5b80516001600160401b03811115610257576102576101ad565b604051601f8201601f19908116603f011681016001600160401b0381118282101715610285576102856101ad565b6040528181528282016020018a101561029c575f5ffd5b8160208401602083015e5f602083830101528093505050509295509295909350565b602081525f82518060208401528060208501604085015e5f604082850101526040601f19601f83011684010191505092915050565b80516020808301519190811015610313575f198160200360031b1b821691505b50919050565b60805160a05160c05160e05161010051612ae66103a35f395f610a5601525f818161049601528181611c980152611f2e01525f8181610515015281816108f501528181611ad30152611ee701525f818161032a0152818161079701528181610b620152610f1701525f81816105b7015281816106ff01528181610aca01526115500152612ae65ff3fe608060405234801561000f575f5ffd5b506004361061024a575f3560e01c806378748459116101405780639b122356116100bf578063c50f4e4811610084578063c50f4e481461057d578063c8b5330c14610595578063ca8aa7c7146105b2578063e7ed076b146105d9578063f2fde38b146105ec578063fabc1cbc146105ff575f5ffd5b80639b122356146104fd578063a3c6564114610510578063a56b21e414610537578063b23ff83b14610557578063c2de70961461056a575f5ffd5b8063886f119511610105578063886f1195146104915780638a65d2d2146104b85780638d5d4036146104c65780638da5cb5b146104d95780638fc46be5146104ea575f5ffd5b8063787484591461043057806378cb9600146104435780637a9676111461044b5780637def15641461045e57806387420b071461047e575f5ffd5b8063595c6a67116101cc5780636729b5db116101915780636729b5db146103cf5780636c5ac81e146103e25780637130c423146103f5578063715018a61461041557806371e166e71461041d575f5ffd5b8063595c6a67146103765780635ac86ab71461037e5780635c975abb146103a15780635e0a64c5146103a95780635ffa5a81146103bc575f5ffd5b8063277a9f0e11610212578063277a9f0e146102e75780633453b234146102fa57806339b70e38146103255780633f292b081461034c57806354fd4d5014610361575f5ffd5b80630310f3e61461024e57806305a4dfbb1461027b5780630e475b171461029c578063136439dd146102b157806319f3db26146102c4575b5f5ffd5b61026161025c36600461233a565b610612565b60405163ffffffff90911681526020015b60405180910390f35b61028e61028936600461233a565b6106a4565b604051908152602001610272565b6102af6102aa366004612379565b6106dc565b005b6102af6102bf3660046123b7565b610838565b6102d76102d23660046123ce565b610872565b6040519015158152602001610272565b61028e6102f53660046123ce565b610887565b61030d6103083660046123ce565b6108c6565b6040516001600160a01b039091168152602001610272565b61030d7f000000000000000000000000000000000000000000000000000000000000000081565b610354610958565b6040516102729190612447565b610369610a4f565b6040516102729190612459565b6102af610a7f565b6102d761038c36600461248e565b609854600160ff9092169190911b9081161490565b60985461028e565b6102af6103b73660046124ae565b610a93565b6102af6103ca3660046123ce565b610aa7565b61028e6103dd3660046124c7565b610c65565b6102af6103f03660046124e1565b610c90565b61040861040336600461233a565b610db6565b6040516102729190612555565b6102af610e88565b6102d761042b3660046124c7565b610e99565b6102d761043e3660046123ce565b610eb7565b61028e610f01565b6102af610459366004612379565b610f0c565b61047161046c366004612567565b611090565b60405161027291906125b1565b6102d761048c3660046123ce565b6110b3565b61030d7f000000000000000000000000000000000000000000000000000000000000000081565b60075463ffffffff16610261565b6102616104d43660046125c3565b6110e8565b6065546001600160a01b031661030d565b6102af6104f83660046125de565b611126565b6102af61050b3660046123ce565b611198565b61030d7f000000000000000000000000000000000000000000000000000000000000000081565b61054a610545366004612567565b61126b565b6040516102729190612611565b61028e610565366004612379565b611329565b61028e6105783660046123ce565b611408565b61058561144d565b60405161027294939291906126fc565b6102d76105a33660046125c3565b6001600160a01b03163b151590565b61030d7f000000000000000000000000000000000000000000000000000000000000000081565b6102af6105e73660046123ce565b6117a0565b6102af6105fa3660046125c3565b611875565b6102af61060d3660046123b7565b6118eb565b5f5f61061e8484610db6565b90505f805b8251811015610672575f61064f848381518110610642576106426127ca565b60200260200101516110e8565b90508263ffffffff168163ffffffff161115610669578092505b50600101610623565b508063ffffffff1661068486866106a4565b61068e91906127f2565b6106999060016127f2565b925050505b92915050565b5f60055f6106b185611958565b815260208082019290925260409081015f90812085825290925290205463ffffffff16905092915050565b5f6106e6816119bb565b60405163079efa8760e11b81525f906001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001690630f3df50e90610734908890600401612836565b602060405180830381865afa15801561074f573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906107739190612844565b90506107808585836119e6565b6040516316a26f7b60e11b81526001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001690632d44def6906107d09088908890889060040161285f565b6020604051808303815f875af11580156107ec573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610810919061288c565b50610827858561082088886108c6565b8487611a8d565b6108318585611b9d565b5050505050565b610840611c83565b60985481811681146108655760405163c61dca5d60e01b815260040160405180910390fd5b61086e82611d26565b5050565b5f6108806105a384846108c6565b9392505050565b5f6108806004826108a56108a036889003880188612567565b611958565b81526020019081526020015f205f8481526020019081526020015f20611d63565b5f6108806108d48484611408565b6040513060388201526f5af43d82803e903d91602b57fd5bf3ff60248201527f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03166014820152733d602d80600a3d3981f3363d3d373d3d3d363d73815260588101919091526037600c8201206078820152605560439091012090565b60605f6109656001611d6c565b9050805167ffffffffffffffff8111156109815761098161226b565b6040519080825280602002602001820160405280156109c557816020015b604080518082019091525f808252602082015281526020019060019003908161099f5790505b5091505f5b8151811015610a4a57610a258282815181106109e8576109e86127ca565b6020026020010151604080518082019091525f80825260208201525060408051808201909152606082901c815263ffffffff909116602082015290565b838281518110610a3757610a376127ca565b60209081029190910101526001016109ca565b505090565b6060610a7a7f0000000000000000000000000000000000000000000000000000000000000000611d78565b905090565b610a87611c83565b610a915f19611d26565b565b610a9b611db5565b610aa481611e0f565b50565b5f610ab1816119bb565b60405163079efa8760e11b81525f906001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001690630f3df50e90610aff908790600401612836565b602060405180830381865afa158015610b1a573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610b3e9190612844565b9050610b4b8484836119e6565b6040516388c1029960e01b81526001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016906388c1029990610b9990879087906004016128a3565b5f604051808303815f875af1158015610bb4573d5f5f3e3d5ffd5b505050506040513d5f823e601f3d908101601f19168201604052610bdb91908101906128be565b505f610c16600482610bf56108a0368a90038a018a612567565b81526020019081526020015f205f8681526020019081526020015f20611d6c565b90505f5b8151811015610c5a57610c528686610c3289896108c6565b86868681518110610c4557610c456127ca565b6020026020010151611a8d565b600101610c1a565b506108318585611b9d565b5f61069e600382610c7e6108a036879003870187612567565b81526020019081526020015f20611d63565b5f54610100900460ff1615808015610cae57505f54600160ff909116105b80610cc75750303b158015610cc757505f5460ff166001145b610d2f5760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201526d191e481a5b9a5d1a585b1a5e995960921b60648201526084015b60405180910390fd5b5f805460ff191660011790558015610d50575f805461ff0019166101001790555b610d5984611e5d565b610d6283611d26565b610d6b82611e0f565b8015610db0575f805461ff0019169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b50505050565b60605f60045f610dc586611958565b81526020019081526020015f205f8481526020019081526020015f2090505f610ded82611d63565b90508067ffffffffffffffff811115610e0857610e0861226b565b604051908082528060200260200182016040528015610e31578160200160208202803683370190505b5092505f5b81811015610e7f575f610e498483611eae565b905080858381518110610e5e57610e5e6127ca565b6001600160a01b039092166020928302919091019091015250600101610e36565b50505092915050565b610e90611db5565b610a915f611e5d565b5f61069e610eaf6108a036859003850185612567565b600190611eb9565b5f600681610ecd6108a036879003870187612567565b815260208082019290925260409081015f90812085825290925290205460ff16806108805750609854600190811614610880565b5f610a7a6001611d63565b336001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001614610f55576040516348da714f60e01b815260040160405180910390fd5b5f600381610f6b6108a036889003880188612567565b81526020019081526020015f2090505f60045f610f92878036038101906108a09190612567565b81526020019081526020015f205f8581526020019081526020015f209050610fba8585610872565b61104157610fc88585611ed0565b610fe5610fdd6108a036889003880188612567565b600190611f0d565b50610ff08285611f0d565b504360055f6110076108a0368a90038a018a612567565b81526020019081526020015f205f8681526020019081526020015f205f6101000a81548163ffffffff021916908363ffffffff1602179055505b61104b8184611f18565b507f3afae24c1d3dd2ce3649054ad82458a8c9967ebd9ce10a9a5a3d059f55bfaedb85858543604051611081949392919061296a565b60405180910390a15050505050565b606061069e60035f6110a185611958565b81526020019081526020015f20611d6c565b5f610880826003836110cd6108a036899003890189612567565b81526020019081526020015f20611eb990919063ffffffff16565b6007546001600160a01b0382165f90815260086020526040812054909163ffffffff908116911681811161111c578161111e565b805b949350505050565b61112e611db5565b6001600160a01b0382165f81815260086020908152604091829020805463ffffffff191663ffffffff86169081179091558251938452908301527f5d2b33f07ae22a809e79005f96ffac70c3715df85a3b011b025e0a86a23a007b91015b60405180910390a15050565b6111a0611f2c565b60065f6111b56108a036869003860186612567565b815260208082019290925260409081015f90812084825290925290205460ff166111f25760405163c61dca5d60e01b815260040160405180910390fd5b5f6006816112086108a036879003870187612567565b81526020019081526020015f205f8381526020019081526020015f205f6101000a81548160ff0219169083151502179055507fb8877c6bf02d5f6603188eb653c9269271836b75b2012a5d7f5f233e7cf2f241828260405161118c9291906128a3565b60605f60035f61127a85611958565b81526020019081526020015f2090505f61129382611d63565b90508067ffffffffffffffff8111156112ae576112ae61226b565b6040519080825280602002602001820160405280156112e157816020015b60608152602001906001900390816112cc5790505b5092505f5b81811015611321576112fc856104038584611eae565b84828151811061130e5761130e6127ca565b60209081029190910101526001016112e6565b505050919050565b5f816001600160a01b0316632495a5996040518163ffffffff1660e01b8152600401602060405180830381865afa158015611366573d5f5f3e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061138a9190612844565b6001600160a01b03166370a082316113a286866108c6565b6040516001600160e01b031960e084901b1681526001600160a01b039091166004820152602401602060405180830381865afa1580156113e4573d5f5f3e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061111e919061288c565b5f61141b6108a036859003850185612567565b604080516020810192909252810183905260600160405160208183030381529060405280519060200120905092915050565b60608060608061145b610958565b9350835167ffffffffffffffff8111156114775761147761226b565b6040519080825280602002602001820160405280156114a0578160200160208202803683370190505b509250835167ffffffffffffffff8111156114bd576114bd61226b565b6040519080825280602002602001820160405280156114f057816020015b60608152602001906001900390816114db5790505b509150835167ffffffffffffffff81111561150d5761150d61226b565b60405190808252806020026020018201604052801561154057816020015b606081526020019060019003908161152b5790505b5090505f5b8451811015611799577f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663f231bd0886838151811061158f5761158f6127ca565b60200260200101516040518263ffffffff1660e01b81526004016115b391906129a2565b602060405180830381865afa1580156115ce573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906115f291906129c8565b848281518110611604576116046127ca565b60200260200101901515908115158152505061163885828151811061162b5761162b6127ca565b6020026020010151611090565b83828151811061164a5761164a6127ca565b6020026020010181905250828181518110611667576116676127ca565b60200260200101515167ffffffffffffffff8111156116885761168861226b565b6040519080825280602002602001820160405280156116b1578160200160208202803683370190505b508282815181106116c4576116c46127ca565b60209081029190910101525f5b8382815181106116e3576116e36127ca565b60200260200101515181101561179057611748868381518110611708576117086127ca565b6020026020010151858481518110611722576117226127ca565b6020026020010151838151811061173b5761173b6127ca565b6020026020010151610612565b83838151811061175a5761175a6127ca565b60200260200101518281518110611773576117736127ca565b63ffffffff909216602092830291909101909101526001016116d1565b50600101611545565b5090919293565b6117a8611c83565b60065f6117bd6108a036869003860186612567565b815260208082019290925260409081015f90812084825290925290205460ff16156117fb5760405163c61dca5d60e01b815260040160405180910390fd5b600160065f6118126108a036879003870187612567565b81526020019081526020015f205f8381526020019081526020015f205f6101000a81548160ff0219169083151502179055507f050add19b1a78a4240cdebc8747899275f2dd070c88e83904a37ff7d1a539744828260405161118c9291906128a3565b61187d611db5565b6001600160a01b0381166118e25760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610d26565b610aa481611e5d565b6118f3611f2c565b6098548019821981161461191a5760405163c61dca5d60e01b815260040160405180910390fd5b609882905560405182815233907f3582d1828e26bf56bd801502bc021ac0bc8afb57c826e4986b45593c8fad389c9060200160405180910390a25050565b5f815f0151826020015163ffffffff166040516020016119a392919060609290921b6bffffffffffffffffffffffff1916825260a01b6001600160a01b031916601482015260200190565b60405160208183030381529060405261069e906129e7565b609854600160ff83161b90811603610aa45760405163840a48d560e01b815260040160405180910390fd5b6001600160a01b038116620e16e414611a2257336001600160a01b03821614611a225760405163720116ad60e11b815260040160405180910390fd5b611a2c8383610eb7565b15611a4a5760405163840a48d560e01b815260040160405180910390fd5b611a62611a5c36859003850185612567565b83610612565b63ffffffff16431015611a88576040516331caa72160e01b815260040160405180910390fd5b505050565b5f600481611aa36108a0368a90038a018a612567565b81526020019081526020015f205f8681526020019081526020015f209050836001600160a01b031663ff491e65307f0000000000000000000000000000000000000000000000000000000000000000898988886040518763ffffffff1660e01b8152600401611b1796959493929190612a0a565b5f604051808303815f87803b158015611b2e575f5ffd5b505af1158015611b40573d5f5f3e3d5ffd5b50505050611b578282611fdd90919063ffffffff16565b507f32be306ad5a833e756b7cb9724d5312afe0feda6163bfc2dd98ee713346a9abc86868486604051611b8d9493929190612a56565b60405180910390a1505050505050565b60015f600381611bb56108a036889003880188612567565b81526020019081526020015f2090505f611c0060045f611bdf888036038101906108a09190612567565b81526020019081526020015f205f8681526020019081526020015f20611d63565b9050805f0361083157611c138285611ff1565b5060055f611c296108a036899003890189612567565b815260208082019290925260409081015f9081208782529092529020805463ffffffff19169055611c5982611d63565b5f0361083157611c7b611c746108a036889003880188612567565b8490611ff1565b505050505050565b60405163237dfb4760e11b81523360048201527f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316906346fbf68e90602401602060405180830381865afa158015611ce5573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611d0991906129c8565b610a9157604051631d77d47760e21b815260040160405180910390fd5b609881905560405181815233907fab40a374bc51de372200a8bc981af8c9ecdc08dfdaef0bb6e09f88f3c616ef3d9060200160405180910390a250565b5f61069e825490565b60605f61088083611ffc565b60605f611d8483612055565b6040805160208082528183019092529192505f91906020820181803683375050509182525060208101929092525090565b6065546001600160a01b03163314610a915760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610d26565b6007805463ffffffff191663ffffffff83169081179091556040519081527f67d0077d22e4e06f761dd87f6c9f2310ac879c9ce17de50d381e05b72f45fbf69060200160405180910390a150565b606580546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0905f90a35050565b5f610880838361207c565b5f8181526001830160205260408120541515610880565b611a88611edd8383611408565b6001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016906120a2565b5f610880838361213c565b5f610880836001600160a01b03841661213c565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663eab66d7a6040518163ffffffff1660e01b8152600401602060405180830381865afa158015611f88573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611fac9190612844565b6001600160a01b0316336001600160a01b031614610a915760405163794821ff60e01b815260040160405180910390fd5b5f610880836001600160a01b038416612188565b5f6108808383612188565b6060815f0180548060200260200160405190810160405280929190818152602001828054801561204957602002820191905f5260205f20905b815481526020019060010190808311612035575b50505050509050919050565b5f60ff8216601f81111561069e57604051632cd44ac360e21b815260040160405180910390fd5b5f825f018281548110612091576120916127ca565b905f5260205f200154905092915050565b5f763d602d80600a3d3981f3363d3d373d3d3d363d730000008360601b60e81c175f526e5af43d82803e903d91602b57fd5bf38360781b1760205281603760095ff590506001600160a01b03811661069e5760405162461bcd60e51b815260206004820152601760248201527f455243313136373a2063726561746532206661696c65640000000000000000006044820152606401610d26565b5f81815260018301602052604081205461218157508154600181810184555f84815260208082209093018490558454848252828601909352604090209190915561069e565b505f61069e565b5f8181526001830160205260408120548015612262575f6121aa600183612a89565b85549091505f906121bd90600190612a89565b905081811461221c575f865f0182815481106121db576121db6127ca565b905f5260205f200154905080875f0184815481106121fb576121fb6127ca565b5f918252602080832090910192909255918252600188019052604090208390555b855486908061222d5761222d612a9c565b600190038181905f5260205f20015f90559055856001015f8681526020019081526020015f205f90556001935050505061069e565b5f91505061069e565b634e487b7160e01b5f52604160045260245ffd5b604051601f8201601f1916810167ffffffffffffffff811182821017156122a8576122a861226b565b604052919050565b6001600160a01b0381168114610aa4575f5ffd5b803563ffffffff811681146122d7575f5ffd5b919050565b5f604082840312156122ec575f5ffd5b6040805190810167ffffffffffffffff8111828210171561230f5761230f61226b565b6040529050808235612320816122b0565b815261232e602084016122c4565b60208201525092915050565b5f5f6060838503121561234b575f5ffd5b61235584846122dc565b946040939093013593505050565b5f60408284031215612373575f5ffd5b50919050565b5f5f5f6080848603121561238b575f5ffd5b6123958585612363565b92506040840135915060608401356123ac816122b0565b809150509250925092565b5f602082840312156123c7575f5ffd5b5035919050565b5f5f606083850312156123df575f5ffd5b6123558484612363565b5f8151808452602084019350602083015f5b8281101561243d5761242786835180516001600160a01b0316825260209081015163ffffffff16910152565b60409590950194602091909101906001016123fb565b5093949350505050565b602081525f61088060208301846123e9565b602081525f82518060208401528060208501604085015e5f604082850101526040601f19601f83011684010191505092915050565b5f6020828403121561249e575f5ffd5b813560ff81168114610880575f5ffd5b5f602082840312156124be575f5ffd5b610880826122c4565b5f604082840312156124d7575f5ffd5b6108808383612363565b5f5f5f606084860312156124f3575f5ffd5b83356124fe816122b0565b925060208401359150612513604085016122c4565b90509250925092565b5f8151808452602084019350602083015f5b8281101561243d5781516001600160a01b031686526020958601959091019060010161252e565b602081525f610880602083018461251c565b5f60408284031215612577575f5ffd5b61088083836122dc565b5f8151808452602084019350602083015f5b8281101561243d578151865260209586019590910190600101612593565b602081525f6108806020830184612581565b5f602082840312156125d3575f5ffd5b8135610880816122b0565b5f5f604083850312156125ef575f5ffd5b82356125fa816122b0565b9150612608602084016122c4565b90509250929050565b5f602082016020835280845180835260408501915060408160051b8601019250602086015f5b8281101561266857603f1987860301845261265385835161251c565b94506020938401939190910190600101612637565b50929695505050505050565b5f82825180855260208501945060208160051b830101602085015f5b838110156126f057848303601f19018852815180518085526020918201918501905f5b818110156126d757835163ffffffff168352602093840193909201916001016126b3565b50506020998a0199909450929092019150600101612690565b50909695505050505050565b608081525f61270e60808301876123e9565b82810360208401528086518083526020830191506020880192505f5b8181101561274a578351151583526020938401939092019160010161272a565b505083810360408501528091505f865180835260208301935060208160051b840101602089015f5b838110156127a457601f1986840301875261278e838351612581565b6020978801979093509190910190600101612772565b505080925086810360608801526127bb8189612674565b9b9a5050505050505050505050565b634e487b7160e01b5f52603260045260245ffd5b634e487b7160e01b5f52601160045260245ffd5b8082018082111561069e5761069e6127de565b8035612810816122b0565b6001600160a01b0316825263ffffffff61282c602083016122c4565b1660208301525050565b6040810161069e8284612805565b5f60208284031215612854575f5ffd5b8151610880816122b0565b6080810161286d8286612805565b60408201939093526001600160a01b0391909116606090910152919050565b5f6020828403121561289c575f5ffd5b5051919050565b606081016128b18285612805565b8260408301529392505050565b5f602082840312156128ce575f5ffd5b815167ffffffffffffffff8111156128e4575f5ffd5b8201601f810184136128f4575f5ffd5b805167ffffffffffffffff81111561290e5761290e61226b565b8060051b61291e6020820161227f565b91825260208184018101929081019087841115612939575f5ffd5b6020850194505b8385101561295f57845180835260209586019590935090910190612940565b979650505050505050565b60a081016129788287612805565b60408201949094526001600160a01b0392909216606083015263ffffffff16608090910152919050565b81516001600160a01b0316815260208083015163ffffffff16908201526040810161069e565b5f602082840312156129d8575f5ffd5b81518015158114610880575f5ffd5b80516020808301519190811015612373575f1960209190910360031b1b16919050565b6001600160a01b0387811682528616602082015260e08101612a2f6040830187612805565b60808201949094526001600160a01b0392831660a0820152911660c0909101529392505050565b60a08101612a648287612805565b60408201949094526001600160a01b0392831660608201529116608090910152919050565b8181038181111561069e5761069e6127de565b634e487b7160e01b5f52603160045260245ffdfea26469706673582212206be36a9ff82c3e6d04c18d55c3bf7b79cb775a1954b4b92152780525d86c868a64736f6c634300081b0033", + Bin: "0x610120604052348015610010575f5ffd5b50604051612e89380380612e8983398101604081905261002f916101c1565b6001600160a01b0380861660805280851660a05280831660c05281908490811661006c576040516339b190bb60e11b815260040160405180910390fd5b6001600160a01b031660e05261008181610098565b610100525061008e6100de565b5050505050610319565b5f5f829050601f815111156100cb578260405163305a27a960e01b81526004016100c291906102be565b60405180910390fd5b80516100d6826102f3565b179392505050565b5f54610100900460ff16156101455760405162461bcd60e51b815260206004820152602760248201527f496e697469616c697a61626c653a20636f6e747261637420697320696e697469604482015266616c697a696e6760c81b60648201526084016100c2565b5f5460ff90811614610194575f805460ff191660ff9081179091556040519081527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b565b6001600160a01b03811681146101aa575f5ffd5b50565b634e487b7160e01b5f52604160045260245ffd5b5f5f5f5f5f60a086880312156101d5575f5ffd5b85516101e081610196565b60208701519095506101f181610196565b604087015190945061020281610196565b606087015190935061021381610196565b60808701519092506001600160401b0381111561022e575f5ffd5b8601601f8101881361023e575f5ffd5b80516001600160401b03811115610257576102576101ad565b604051601f8201601f19908116603f011681016001600160401b0381118282101715610285576102856101ad565b6040528181528282016020018a101561029c575f5ffd5b8160208401602083015e5f602083830101528093505050509295509295909350565b602081525f82518060208401528060208501604085015e5f604082850101526040601f19601f83011684010191505092915050565b80516020808301519190811015610313575f198160200360031b1b821691505b50919050565b60805160a05160c05160e05161010051612ae66103a35f395f610a5601525f818161049601528181611c980152611f2e01525f8181610515015281816108f501528181611ad30152611ee701525f818161032a0152818161079701528181610b620152610f1701525f81816105b7015281816106ff01528181610aca01526115500152612ae65ff3fe608060405234801561000f575f5ffd5b506004361061024a575f3560e01c806378748459116101405780639b122356116100bf578063c50f4e4811610084578063c50f4e481461057d578063c8b5330c14610595578063ca8aa7c7146105b2578063e7ed076b146105d9578063f2fde38b146105ec578063fabc1cbc146105ff575f5ffd5b80639b122356146104fd578063a3c6564114610510578063a56b21e414610537578063b23ff83b14610557578063c2de70961461056a575f5ffd5b8063886f119511610105578063886f1195146104915780638a65d2d2146104b85780638d5d4036146104c65780638da5cb5b146104d95780638fc46be5146104ea575f5ffd5b8063787484591461043057806378cb9600146104435780637a9676111461044b5780637def15641461045e57806387420b071461047e575f5ffd5b8063595c6a67116101cc5780636729b5db116101915780636729b5db146103cf5780636c5ac81e146103e25780637130c423146103f5578063715018a61461041557806371e166e71461041d575f5ffd5b8063595c6a67146103765780635ac86ab71461037e5780635c975abb146103a15780635e0a64c5146103a95780635ffa5a81146103bc575f5ffd5b8063277a9f0e11610212578063277a9f0e146102e75780633453b234146102fa57806339b70e38146103255780633f292b081461034c57806354fd4d5014610361575f5ffd5b80630310f3e61461024e57806305a4dfbb1461027b5780630e475b171461029c578063136439dd146102b157806319f3db26146102c4575b5f5ffd5b61026161025c36600461233a565b610612565b60405163ffffffff90911681526020015b60405180910390f35b61028e61028936600461233a565b6106a4565b604051908152602001610272565b6102af6102aa366004612379565b6106dc565b005b6102af6102bf3660046123b7565b610838565b6102d76102d23660046123ce565b610872565b6040519015158152602001610272565b61028e6102f53660046123ce565b610887565b61030d6103083660046123ce565b6108c6565b6040516001600160a01b039091168152602001610272565b61030d7f000000000000000000000000000000000000000000000000000000000000000081565b610354610958565b6040516102729190612447565b610369610a4f565b6040516102729190612459565b6102af610a7f565b6102d761038c36600461248e565b609854600160ff9092169190911b9081161490565b60985461028e565b6102af6103b73660046124ae565b610a93565b6102af6103ca3660046123ce565b610aa7565b61028e6103dd3660046124c7565b610c65565b6102af6103f03660046124e1565b610c90565b61040861040336600461233a565b610db6565b6040516102729190612555565b6102af610e88565b6102d761042b3660046124c7565b610e99565b6102d761043e3660046123ce565b610eb7565b61028e610f01565b6102af610459366004612379565b610f0c565b61047161046c366004612567565b611090565b60405161027291906125b1565b6102d761048c3660046123ce565b6110b3565b61030d7f000000000000000000000000000000000000000000000000000000000000000081565b60075463ffffffff16610261565b6102616104d43660046125c3565b6110e8565b6065546001600160a01b031661030d565b6102af6104f83660046125de565b611126565b6102af61050b3660046123ce565b611198565b61030d7f000000000000000000000000000000000000000000000000000000000000000081565b61054a610545366004612567565b61126b565b6040516102729190612611565b61028e610565366004612379565b611329565b61028e6105783660046123ce565b611408565b61058561144d565b60405161027294939291906126fc565b6102d76105a33660046125c3565b6001600160a01b03163b151590565b61030d7f000000000000000000000000000000000000000000000000000000000000000081565b6102af6105e73660046123ce565b6117a0565b6102af6105fa3660046125c3565b611875565b6102af61060d3660046123b7565b6118eb565b5f5f61061e8484610db6565b90505f805b8251811015610672575f61064f848381518110610642576106426127ca565b60200260200101516110e8565b90508263ffffffff168163ffffffff161115610669578092505b50600101610623565b508063ffffffff1661068486866106a4565b61068e91906127f2565b6106999060016127f2565b925050505b92915050565b5f60055f6106b185611958565b815260208082019290925260409081015f90812085825290925290205463ffffffff16905092915050565b5f6106e6816119bb565b60405163079efa8760e11b81525f906001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001690630f3df50e90610734908890600401612836565b602060405180830381865afa15801561074f573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906107739190612844565b90506107808585836119e6565b6040516316a26f7b60e11b81526001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001690632d44def6906107d09088908890889060040161285f565b6020604051808303815f875af11580156107ec573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610810919061288c565b50610827858561082088886108c6565b8487611a8d565b6108318585611b9d565b5050505050565b610840611c83565b60985481811681146108655760405163c61dca5d60e01b815260040160405180910390fd5b61086e82611d26565b5050565b5f6108806105a384846108c6565b9392505050565b5f6108806004826108a56108a036889003880188612567565b611958565b81526020019081526020015f205f8481526020019081526020015f20611d63565b5f6108806108d48484611408565b6040513060388201526f5af43d82803e903d91602b57fd5bf3ff60248201527f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03166014820152733d602d80600a3d3981f3363d3d373d3d3d363d73815260588101919091526037600c8201206078820152605560439091012090565b60605f6109656001611d6c565b9050805167ffffffffffffffff8111156109815761098161226b565b6040519080825280602002602001820160405280156109c557816020015b604080518082019091525f808252602082015281526020019060019003908161099f5790505b5091505f5b8151811015610a4a57610a258282815181106109e8576109e86127ca565b6020026020010151604080518082019091525f80825260208201525060408051808201909152606082901c815263ffffffff909116602082015290565b838281518110610a3757610a376127ca565b60209081029190910101526001016109ca565b505090565b6060610a7a7f0000000000000000000000000000000000000000000000000000000000000000611d78565b905090565b610a87611c83565b610a915f19611d26565b565b610a9b611db5565b610aa481611e0f565b50565b5f610ab1816119bb565b60405163079efa8760e11b81525f906001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001690630f3df50e90610aff908790600401612836565b602060405180830381865afa158015610b1a573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610b3e9190612844565b9050610b4b8484836119e6565b6040516388c1029960e01b81526001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016906388c1029990610b9990879087906004016128a3565b5f604051808303815f875af1158015610bb4573d5f5f3e3d5ffd5b505050506040513d5f823e601f3d908101601f19168201604052610bdb91908101906128be565b505f610c16600482610bf56108a0368a90038a018a612567565b81526020019081526020015f205f8681526020019081526020015f20611d6c565b90505f5b8151811015610c5a57610c528686610c3289896108c6565b86868681518110610c4557610c456127ca565b6020026020010151611a8d565b600101610c1a565b506108318585611b9d565b5f61069e600382610c7e6108a036879003870187612567565b81526020019081526020015f20611d63565b5f54610100900460ff1615808015610cae57505f54600160ff909116105b80610cc75750303b158015610cc757505f5460ff166001145b610d2f5760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201526d191e481a5b9a5d1a585b1a5e995960921b60648201526084015b60405180910390fd5b5f805460ff191660011790558015610d50575f805461ff0019166101001790555b610d5984611e5d565b610d6283611d26565b610d6b82611e0f565b8015610db0575f805461ff0019169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b50505050565b60605f60045f610dc586611958565b81526020019081526020015f205f8481526020019081526020015f2090505f610ded82611d63565b90508067ffffffffffffffff811115610e0857610e0861226b565b604051908082528060200260200182016040528015610e31578160200160208202803683370190505b5092505f5b81811015610e7f575f610e498483611eae565b905080858381518110610e5e57610e5e6127ca565b6001600160a01b039092166020928302919091019091015250600101610e36565b50505092915050565b610e90611db5565b610a915f611e5d565b5f61069e610eaf6108a036859003850185612567565b600190611eb9565b5f600681610ecd6108a036879003870187612567565b815260208082019290925260409081015f90812085825290925290205460ff16806108805750609854600190811614610880565b5f610a7a6001611d63565b336001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001614610f55576040516348da714f60e01b815260040160405180910390fd5b5f600381610f6b6108a036889003880188612567565b81526020019081526020015f2090505f60045f610f92878036038101906108a09190612567565b81526020019081526020015f205f8581526020019081526020015f209050610fba8585610872565b61104157610fc88585611ed0565b610fe5610fdd6108a036889003880188612567565b600190611f0d565b50610ff08285611f0d565b504360055f6110076108a0368a90038a018a612567565b81526020019081526020015f205f8681526020019081526020015f205f6101000a81548163ffffffff021916908363ffffffff1602179055505b61104b8184611f18565b507f3afae24c1d3dd2ce3649054ad82458a8c9967ebd9ce10a9a5a3d059f55bfaedb85858543604051611081949392919061296a565b60405180910390a15050505050565b606061069e60035f6110a185611958565b81526020019081526020015f20611d6c565b5f610880826003836110cd6108a036899003890189612567565b81526020019081526020015f20611eb990919063ffffffff16565b6007546001600160a01b0382165f90815260086020526040812054909163ffffffff908116911681811161111c578161111e565b805b949350505050565b61112e611db5565b6001600160a01b0382165f81815260086020908152604091829020805463ffffffff191663ffffffff86169081179091558251938452908301527f5d2b33f07ae22a809e79005f96ffac70c3715df85a3b011b025e0a86a23a007b91015b60405180910390a15050565b6111a0611f2c565b60065f6111b56108a036869003860186612567565b815260208082019290925260409081015f90812084825290925290205460ff166111f25760405163c61dca5d60e01b815260040160405180910390fd5b5f6006816112086108a036879003870187612567565b81526020019081526020015f205f8381526020019081526020015f205f6101000a81548160ff0219169083151502179055507fb8877c6bf02d5f6603188eb653c9269271836b75b2012a5d7f5f233e7cf2f241828260405161118c9291906128a3565b60605f60035f61127a85611958565b81526020019081526020015f2090505f61129382611d63565b90508067ffffffffffffffff8111156112ae576112ae61226b565b6040519080825280602002602001820160405280156112e157816020015b60608152602001906001900390816112cc5790505b5092505f5b81811015611321576112fc856104038584611eae565b84828151811061130e5761130e6127ca565b60209081029190910101526001016112e6565b505050919050565b5f816001600160a01b0316632495a5996040518163ffffffff1660e01b8152600401602060405180830381865afa158015611366573d5f5f3e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061138a9190612844565b6001600160a01b03166370a082316113a286866108c6565b6040516001600160e01b031960e084901b1681526001600160a01b039091166004820152602401602060405180830381865afa1580156113e4573d5f5f3e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061111e919061288c565b5f61141b6108a036859003850185612567565b604080516020810192909252810183905260600160405160208183030381529060405280519060200120905092915050565b60608060608061145b610958565b9350835167ffffffffffffffff8111156114775761147761226b565b6040519080825280602002602001820160405280156114a0578160200160208202803683370190505b509250835167ffffffffffffffff8111156114bd576114bd61226b565b6040519080825280602002602001820160405280156114f057816020015b60608152602001906001900390816114db5790505b509150835167ffffffffffffffff81111561150d5761150d61226b565b60405190808252806020026020018201604052801561154057816020015b606081526020019060019003908161152b5790505b5090505f5b8451811015611799577f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663f231bd0886838151811061158f5761158f6127ca565b60200260200101516040518263ffffffff1660e01b81526004016115b391906129a2565b602060405180830381865afa1580156115ce573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906115f291906129c8565b848281518110611604576116046127ca565b60200260200101901515908115158152505061163885828151811061162b5761162b6127ca565b6020026020010151611090565b83828151811061164a5761164a6127ca565b6020026020010181905250828181518110611667576116676127ca565b60200260200101515167ffffffffffffffff8111156116885761168861226b565b6040519080825280602002602001820160405280156116b1578160200160208202803683370190505b508282815181106116c4576116c46127ca565b60209081029190910101525f5b8382815181106116e3576116e36127ca565b60200260200101515181101561179057611748868381518110611708576117086127ca565b6020026020010151858481518110611722576117226127ca565b6020026020010151838151811061173b5761173b6127ca565b6020026020010151610612565b83838151811061175a5761175a6127ca565b60200260200101518281518110611773576117736127ca565b63ffffffff909216602092830291909101909101526001016116d1565b50600101611545565b5090919293565b6117a8611c83565b60065f6117bd6108a036869003860186612567565b815260208082019290925260409081015f90812084825290925290205460ff16156117fb5760405163c61dca5d60e01b815260040160405180910390fd5b600160065f6118126108a036879003870187612567565b81526020019081526020015f205f8381526020019081526020015f205f6101000a81548160ff0219169083151502179055507f050add19b1a78a4240cdebc8747899275f2dd070c88e83904a37ff7d1a539744828260405161118c9291906128a3565b61187d611db5565b6001600160a01b0381166118e25760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610d26565b610aa481611e5d565b6118f3611f2c565b6098548019821981161461191a5760405163c61dca5d60e01b815260040160405180910390fd5b609882905560405182815233907f3582d1828e26bf56bd801502bc021ac0bc8afb57c826e4986b45593c8fad389c9060200160405180910390a25050565b5f815f0151826020015163ffffffff166040516020016119a392919060609290921b6bffffffffffffffffffffffff1916825260a01b6001600160a01b031916601482015260200190565b60405160208183030381529060405261069e906129e7565b609854600160ff83161b90811603610aa45760405163840a48d560e01b815260040160405180910390fd5b6001600160a01b038116620e16e414611a2257336001600160a01b03821614611a225760405163720116ad60e11b815260040160405180910390fd5b611a2c8383610eb7565b15611a4a5760405163840a48d560e01b815260040160405180910390fd5b611a62611a5c36859003850185612567565b83610612565b63ffffffff16431015611a88576040516331caa72160e01b815260040160405180910390fd5b505050565b5f600481611aa36108a0368a90038a018a612567565b81526020019081526020015f205f8681526020019081526020015f209050836001600160a01b031663ff491e65307f0000000000000000000000000000000000000000000000000000000000000000898988886040518763ffffffff1660e01b8152600401611b1796959493929190612a0a565b5f604051808303815f87803b158015611b2e575f5ffd5b505af1158015611b40573d5f5f3e3d5ffd5b50505050611b578282611fdd90919063ffffffff16565b507f32be306ad5a833e756b7cb9724d5312afe0feda6163bfc2dd98ee713346a9abc86868486604051611b8d9493929190612a56565b60405180910390a1505050505050565b60015f600381611bb56108a036889003880188612567565b81526020019081526020015f2090505f611c0060045f611bdf888036038101906108a09190612567565b81526020019081526020015f205f8681526020019081526020015f20611d63565b9050805f0361083157611c138285611ff1565b5060055f611c296108a036899003890189612567565b815260208082019290925260409081015f9081208782529092529020805463ffffffff19169055611c5982611d63565b5f0361083157611c7b611c746108a036889003880188612567565b8490611ff1565b505050505050565b60405163237dfb4760e11b81523360048201527f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316906346fbf68e90602401602060405180830381865afa158015611ce5573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611d0991906129c8565b610a9157604051631d77d47760e21b815260040160405180910390fd5b609881905560405181815233907fab40a374bc51de372200a8bc981af8c9ecdc08dfdaef0bb6e09f88f3c616ef3d9060200160405180910390a250565b5f61069e825490565b60605f61088083611ffc565b60605f611d8483612055565b6040805160208082528183019092529192505f91906020820181803683375050509182525060208101929092525090565b6065546001600160a01b03163314610a915760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610d26565b6007805463ffffffff191663ffffffff83169081179091556040519081527f67d0077d22e4e06f761dd87f6c9f2310ac879c9ce17de50d381e05b72f45fbf69060200160405180910390a150565b606580546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0905f90a35050565b5f610880838361207c565b5f8181526001830160205260408120541515610880565b611a88611edd8383611408565b6001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016906120a2565b5f610880838361213c565b5f610880836001600160a01b03841661213c565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663eab66d7a6040518163ffffffff1660e01b8152600401602060405180830381865afa158015611f88573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611fac9190612844565b6001600160a01b0316336001600160a01b031614610a915760405163794821ff60e01b815260040160405180910390fd5b5f610880836001600160a01b038416612188565b5f6108808383612188565b6060815f0180548060200260200160405190810160405280929190818152602001828054801561204957602002820191905f5260205f20905b815481526020019060010190808311612035575b50505050509050919050565b5f60ff8216601f81111561069e57604051632cd44ac360e21b815260040160405180910390fd5b5f825f018281548110612091576120916127ca565b905f5260205f200154905092915050565b5f763d602d80600a3d3981f3363d3d373d3d3d363d730000008360601b60e81c175f526e5af43d82803e903d91602b57fd5bf38360781b1760205281603760095ff590506001600160a01b03811661069e5760405162461bcd60e51b815260206004820152601760248201527f455243313136373a2063726561746532206661696c65640000000000000000006044820152606401610d26565b5f81815260018301602052604081205461218157508154600181810184555f84815260208082209093018490558454848252828601909352604090209190915561069e565b505f61069e565b5f8181526001830160205260408120548015612262575f6121aa600183612a89565b85549091505f906121bd90600190612a89565b905081811461221c575f865f0182815481106121db576121db6127ca565b905f5260205f200154905080875f0184815481106121fb576121fb6127ca565b5f918252602080832090910192909255918252600188019052604090208390555b855486908061222d5761222d612a9c565b600190038181905f5260205f20015f90559055856001015f8681526020019081526020015f205f90556001935050505061069e565b5f91505061069e565b634e487b7160e01b5f52604160045260245ffd5b604051601f8201601f1916810167ffffffffffffffff811182821017156122a8576122a861226b565b604052919050565b6001600160a01b0381168114610aa4575f5ffd5b803563ffffffff811681146122d7575f5ffd5b919050565b5f604082840312156122ec575f5ffd5b6040805190810167ffffffffffffffff8111828210171561230f5761230f61226b565b6040529050808235612320816122b0565b815261232e602084016122c4565b60208201525092915050565b5f5f6060838503121561234b575f5ffd5b61235584846122dc565b946040939093013593505050565b5f60408284031215612373575f5ffd5b50919050565b5f5f5f6080848603121561238b575f5ffd5b6123958585612363565b92506040840135915060608401356123ac816122b0565b809150509250925092565b5f602082840312156123c7575f5ffd5b5035919050565b5f5f606083850312156123df575f5ffd5b6123558484612363565b5f8151808452602084019350602083015f5b8281101561243d5761242786835180516001600160a01b0316825260209081015163ffffffff16910152565b60409590950194602091909101906001016123fb565b5093949350505050565b602081525f61088060208301846123e9565b602081525f82518060208401528060208501604085015e5f604082850101526040601f19601f83011684010191505092915050565b5f6020828403121561249e575f5ffd5b813560ff81168114610880575f5ffd5b5f602082840312156124be575f5ffd5b610880826122c4565b5f604082840312156124d7575f5ffd5b6108808383612363565b5f5f5f606084860312156124f3575f5ffd5b83356124fe816122b0565b925060208401359150612513604085016122c4565b90509250925092565b5f8151808452602084019350602083015f5b8281101561243d5781516001600160a01b031686526020958601959091019060010161252e565b602081525f610880602083018461251c565b5f60408284031215612577575f5ffd5b61088083836122dc565b5f8151808452602084019350602083015f5b8281101561243d578151865260209586019590910190600101612593565b602081525f6108806020830184612581565b5f602082840312156125d3575f5ffd5b8135610880816122b0565b5f5f604083850312156125ef575f5ffd5b82356125fa816122b0565b9150612608602084016122c4565b90509250929050565b5f602082016020835280845180835260408501915060408160051b8601019250602086015f5b8281101561266857603f1987860301845261265385835161251c565b94506020938401939190910190600101612637565b50929695505050505050565b5f82825180855260208501945060208160051b830101602085015f5b838110156126f057848303601f19018852815180518085526020918201918501905f5b818110156126d757835163ffffffff168352602093840193909201916001016126b3565b50506020998a0199909450929092019150600101612690565b50909695505050505050565b608081525f61270e60808301876123e9565b82810360208401528086518083526020830191506020880192505f5b8181101561274a578351151583526020938401939092019160010161272a565b505083810360408501528091505f865180835260208301935060208160051b840101602089015f5b838110156127a457601f1986840301875261278e838351612581565b6020978801979093509190910190600101612772565b505080925086810360608801526127bb8189612674565b9b9a5050505050505050505050565b634e487b7160e01b5f52603260045260245ffd5b634e487b7160e01b5f52601160045260245ffd5b8082018082111561069e5761069e6127de565b8035612810816122b0565b6001600160a01b0316825263ffffffff61282c602083016122c4565b1660208301525050565b6040810161069e8284612805565b5f60208284031215612854575f5ffd5b8151610880816122b0565b6080810161286d8286612805565b60408201939093526001600160a01b0391909116606090910152919050565b5f6020828403121561289c575f5ffd5b5051919050565b606081016128b18285612805565b8260408301529392505050565b5f602082840312156128ce575f5ffd5b815167ffffffffffffffff8111156128e4575f5ffd5b8201601f810184136128f4575f5ffd5b805167ffffffffffffffff81111561290e5761290e61226b565b8060051b61291e6020820161227f565b91825260208184018101929081019087841115612939575f5ffd5b6020850194505b8385101561295f57845180835260209586019590935090910190612940565b979650505050505050565b60a081016129788287612805565b60408201949094526001600160a01b0392909216606083015263ffffffff16608090910152919050565b81516001600160a01b0316815260208083015163ffffffff16908201526040810161069e565b5f602082840312156129d8575f5ffd5b81518015158114610880575f5ffd5b80516020808301519190811015612373575f1960209190910360031b1b16919050565b6001600160a01b0387811682528616602082015260e08101612a2f6040830187612805565b60808201949094526001600160a01b0392831660a0820152911660c0909101529392505050565b60a08101612a648287612805565b60408201949094526001600160a01b0392831660608201529116608090910152919050565b8181038181111561069e5761069e6127de565b634e487b7160e01b5f52603160045260245ffdfea26469706673582212207217cb4087765640e0f75551498e65ab7942c6943b1e70b359e434aae5b214b064736f6c634300081b0033", } // SlashEscrowFactoryABI is the input ABI used to generate the binding from. diff --git a/pkg/bindings/StrategyBase/binding.go b/pkg/bindings/StrategyBase/binding.go index fc9f840f59..6329825f2f 100644 --- a/pkg/bindings/StrategyBase/binding.go +++ b/pkg/bindings/StrategyBase/binding.go @@ -32,7 +32,7 @@ var ( // StrategyBaseMetaData contains all meta data concerning the StrategyBase contract. var StrategyBaseMetaData = &bind.MetaData{ ABI: "[{\"type\":\"constructor\",\"inputs\":[{\"name\":\"_strategyManager\",\"type\":\"address\",\"internalType\":\"contractIStrategyManager\"},{\"name\":\"_pauserRegistry\",\"type\":\"address\",\"internalType\":\"contractIPauserRegistry\"},{\"name\":\"_version\",\"type\":\"string\",\"internalType\":\"string\"}],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"deposit\",\"inputs\":[{\"name\":\"token\",\"type\":\"address\",\"internalType\":\"contractIERC20\"},{\"name\":\"amount\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"outputs\":[{\"name\":\"newShares\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"explanation\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"string\",\"internalType\":\"string\"}],\"stateMutability\":\"pure\"},{\"type\":\"function\",\"name\":\"initialize\",\"inputs\":[{\"name\":\"_underlyingToken\",\"type\":\"address\",\"internalType\":\"contractIERC20\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"pause\",\"inputs\":[{\"name\":\"newPausedStatus\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"pauseAll\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"paused\",\"inputs\":[{\"name\":\"index\",\"type\":\"uint8\",\"internalType\":\"uint8\"}],\"outputs\":[{\"name\":\"\",\"type\":\"bool\",\"internalType\":\"bool\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"paused\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"pauserRegistry\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"contractIPauserRegistry\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"shares\",\"inputs\":[{\"name\":\"user\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[{\"name\":\"\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"sharesToUnderlying\",\"inputs\":[{\"name\":\"amountShares\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"outputs\":[{\"name\":\"\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"sharesToUnderlyingView\",\"inputs\":[{\"name\":\"amountShares\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"outputs\":[{\"name\":\"\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"strategyManager\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"contractIStrategyManager\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"totalShares\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"underlyingToShares\",\"inputs\":[{\"name\":\"amountUnderlying\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"outputs\":[{\"name\":\"\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"underlyingToSharesView\",\"inputs\":[{\"name\":\"amountUnderlying\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"outputs\":[{\"name\":\"\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"underlyingToken\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"contractIERC20\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"unpause\",\"inputs\":[{\"name\":\"newPausedStatus\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"userUnderlying\",\"inputs\":[{\"name\":\"user\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[{\"name\":\"\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"userUnderlyingView\",\"inputs\":[{\"name\":\"user\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[{\"name\":\"\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"version\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"string\",\"internalType\":\"string\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"withdraw\",\"inputs\":[{\"name\":\"recipient\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"token\",\"type\":\"address\",\"internalType\":\"contractIERC20\"},{\"name\":\"amountShares\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"outputs\":[{\"name\":\"amountOut\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"stateMutability\":\"nonpayable\"},{\"type\":\"event\",\"name\":\"ExchangeRateEmitted\",\"inputs\":[{\"name\":\"rate\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"Initialized\",\"inputs\":[{\"name\":\"version\",\"type\":\"uint8\",\"indexed\":false,\"internalType\":\"uint8\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"Paused\",\"inputs\":[{\"name\":\"account\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"newPausedStatus\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"StrategyTokenSet\",\"inputs\":[{\"name\":\"token\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"contractIERC20\"},{\"name\":\"decimals\",\"type\":\"uint8\",\"indexed\":false,\"internalType\":\"uint8\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"Unpaused\",\"inputs\":[{\"name\":\"account\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"newPausedStatus\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"}],\"anonymous\":false},{\"type\":\"error\",\"name\":\"BalanceExceedsMaxTotalDeposits\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"CurrentlyPaused\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"InputAddressZero\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"InvalidNewPausedStatus\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"InvalidShortString\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"MaxPerDepositExceedsMax\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"NewSharesZero\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"OnlyPauser\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"OnlyStrategyManager\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"OnlyUnderlyingToken\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"OnlyUnpauser\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"StringTooLong\",\"inputs\":[{\"name\":\"str\",\"type\":\"string\",\"internalType\":\"string\"}]},{\"type\":\"error\",\"name\":\"TotalSharesExceedsMax\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"WithdrawalAmountExceedsTotalDeposits\",\"inputs\":[]}]", - Bin: "0x60e060405234801561000f575f5ffd5b5060405161152938038061152983398101604081905261002e916101b6565b80826001600160a01b038116610057576040516339b190bb60e11b815260040160405180910390fd5b6001600160a01b031660805261006c8161008d565b60a052506001600160a01b03831660c0526100856100d3565b5050506102e7565b5f5f829050601f815111156100c0578260405163305a27a960e01b81526004016100b7919061028c565b60405180910390fd5b80516100cb826102c1565b179392505050565b5f54610100900460ff161561013a5760405162461bcd60e51b815260206004820152602760248201527f496e697469616c697a61626c653a20636f6e747261637420697320696e697469604482015266616c697a696e6760c81b60648201526084016100b7565b5f5460ff90811614610189575f805460ff191660ff9081179091556040519081527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b565b6001600160a01b038116811461019f575f5ffd5b50565b634e487b7160e01b5f52604160045260245ffd5b5f5f5f606084860312156101c8575f5ffd5b83516101d38161018b565b60208501519093506101e48161018b565b60408501519092506001600160401b038111156101ff575f5ffd5b8401601f8101861361020f575f5ffd5b80516001600160401b03811115610228576102286101a2565b604051601f8201601f19908116603f011681016001600160401b0381118282101715610256576102566101a2565b60405281815282820160200188101561026d575f5ffd5b8160208401602083015e5f602083830101528093505050509250925092565b602081525f82518060208401528060208501604085015e5f604082850101526040601f19601f83011684010191505092915050565b805160208083015191908110156102e1575f198160200360031b1b821691505b50919050565b60805160a05160c0516111f56103345f395f81816101800152818161035d01528181610686015261070801525f61047d01525f818161024b015281816108b60152610c6c01526111f55ff3fe608060405234801561000f575f5ffd5b5060043610610132575f3560e01c80637a8b2637116100b4578063c4d66de811610079578063c4d66de81461029b578063ce7c2ac2146102ae578063d9caed12146102c1578063e3dae51c146102d4578063f3e73875146102e7578063fabc1cbc146102fa575f5ffd5b80637a8b263714610233578063886f1195146102465780638c8710191461026d5780638f6a624014610280578063ab5921e114610293575f5ffd5b806354fd4d50116100fa57806354fd4d50146101cc578063553ca5f8146101e1578063595c6a67146101f45780635ac86ab7146101fc5780635c975abb1461022b575f5ffd5b8063136439dd146101365780632495a5991461014b57806339b70e381461017b5780633a98ef39146101a257806347e7ef24146101b9575b5f5ffd5b610149610144366004610f6d565b61030d565b005b60325461015e906001600160a01b031681565b6040516001600160a01b0390911681526020015b60405180910390f35b61015e7f000000000000000000000000000000000000000000000000000000000000000081565b6101ab60335481565b604051908152602001610172565b6101ab6101c7366004610f98565b610347565b6101d4610476565b6040516101729190610fc2565b6101ab6101ef366004610ff7565b6104a6565b6101496104b9565b61021b61020a366004611027565b6001805460ff9092161b9081161490565b6040519015158152602001610172565b6001546101ab565b6101ab610241366004610f6d565b6104cd565b61015e7f000000000000000000000000000000000000000000000000000000000000000081565b6101ab61027b366004610f6d565b610516565b6101ab61028e366004610ff7565b610520565b6101d461052d565b6101496102a9366004610ff7565b61054d565b6101ab6102bc366004610ff7565b61065f565b6101ab6102cf366004611042565b6106f1565b6101ab6102e2366004610f6d565b6107f3565b6101ab6102f5366004610f6d565b61082a565b610149610308366004610f6d565b610834565b6103156108a1565b600154818116811461033a5760405163c61dca5d60e01b815260040160405180910390fd5b61034382610944565b5050565b5f5f61035281610981565b336001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000161461039b576040516348da714f60e01b815260040160405180910390fd5b6103a584846109b7565b6033545f6103b56103e883611094565b90505f6103e86103c36109e5565b6103cd9190611094565b90505f6103da87836110a7565b9050806103e784896110ba565b6103f191906110d1565b9550855f0361041357604051630c392ed360e11b815260040160405180910390fd5b61041d8685611094565b60338190556f4b3b4ca85a86c47a098a223fffffffff101561045257604051632f14e8a360e11b815260040160405180910390fd5b61046b826103e86033546104669190611094565b610a4f565b505050505092915050565b60606104a17f0000000000000000000000000000000000000000000000000000000000000000610a9b565b905090565b5f6104b36102418361065f565b92915050565b6104c16108a1565b6104cb5f19610944565b565b5f5f6103e86033546104df9190611094565b90505f6103e86104ed6109e5565b6104f79190611094565b90508161050485836110ba565b61050e91906110d1565b949350505050565b5f6104b3826107f3565b5f6104b36102f58361065f565b60606040518060800160405280604d8152602001611173604d9139905090565b5f54610100900460ff161580801561056b57505f54600160ff909116105b806105845750303b15801561058457505f5460ff166001145b6105ec5760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201526d191e481a5b9a5d1a585b1a5e995960921b60648201526084015b60405180910390fd5b5f805460ff19166001179055801561060d575f805461ff0019166101001790555b61061682610ad8565b8015610343575f805461ff0019169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb3847402498906020015b60405180910390a15050565b60405163fe243a1760e01b81526001600160a01b0382811660048301523060248301525f917f00000000000000000000000000000000000000000000000000000000000000009091169063fe243a1790604401602060405180830381865afa1580156106cd573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906104b391906110f0565b5f60016106fd81610981565b336001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001614610746576040516348da714f60e01b815260040160405180910390fd5b610751858585610c23565b6033548084111561077557604051630b469df360e41b815260040160405180910390fd5b5f6107826103e883611094565b90505f6103e86107906109e5565b61079a9190611094565b9050816107a787836110ba565b6107b191906110d1565b94506107bd86846110a7565b6033556107dd6107cd86836110a7565b6103e86033546104669190611094565b6107e8888887610c56565b505050509392505050565b5f5f6103e86033546108059190611094565b90505f6103e86108136109e5565b61081d9190611094565b90508061050483866110ba565b5f6104b3826104cd565b61083c610c6a565b600154801982198116146108635760405163c61dca5d60e01b815260040160405180910390fd5b600182905560405182815233907f3582d1828e26bf56bd801502bc021ac0bc8afb57c826e4986b45593c8fad389c9060200160405180910390a25050565b60405163237dfb4760e11b81523360048201527f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316906346fbf68e90602401602060405180830381865afa158015610903573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906109279190611107565b6104cb57604051631d77d47760e21b815260040160405180910390fd5b600181905560405181815233907fab40a374bc51de372200a8bc981af8c9ecdc08dfdaef0bb6e09f88f3c616ef3d9060200160405180910390a250565b610996816001805460ff9092161b9081161490565b156109b45760405163840a48d560e01b815260040160405180910390fd5b50565b6032546001600160a01b0383811691161461034357604051630312abdd60e61b815260040160405180910390fd5b6032546040516370a0823160e01b81523060048201525f916001600160a01b0316906370a0823190602401602060405180830381865afa158015610a2b573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906104a191906110f0565b7fd2494f3479e5da49d386657c292c610b5b01df313d07c62eb0cfa49924a31be881610a8384670de0b6b3a76400006110ba565b610a8d91906110d1565b604051908152602001610653565b60605f610aa783610d1b565b6040805160208082528183019092529192505f91906020820181803683375050509182525060208101929092525090565b5f54610100900460ff16610b425760405162461bcd60e51b815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201526a6e697469616c697a696e6760a81b60648201526084016105e3565b603280546001600160a01b0319166001600160a01b038316179055610b665f610944565b7f1c540707b00eb5427b6b774fc799d756516a54aee108b64b327acc55af55750760325f9054906101000a90046001600160a01b0316826001600160a01b031663313ce5676040518163ffffffff1660e01b8152600401602060405180830381865afa158015610bd8573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610bfc9190611126565b604080516001600160a01b03909316835260ff90911660208301520160405180910390a150565b6032546001600160a01b03838116911614610c5157604051630312abdd60e61b815260040160405180910390fd5b505050565b610c516001600160a01b0383168483610d42565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663eab66d7a6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610cc6573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610cea9190611141565b6001600160a01b0316336001600160a01b0316146104cb5760405163794821ff60e01b815260040160405180910390fd5b5f60ff8216601f8111156104b357604051632cd44ac360e21b815260040160405180910390fd5b604080516001600160a01b03848116602483015260448083018590528351808403909101815260649092018352602080830180516001600160e01b031663a9059cbb60e01b17905283518085019094528084527f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c656490840152610c51928692915f91610dd1918516908490610e50565b905080515f1480610df1575080806020019051810190610df19190611107565b610c515760405162461bcd60e51b815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e6044820152691bdd081cdd58d8d9595960b21b60648201526084016105e3565b606061050e84845f85855f5f866001600160a01b03168587604051610e75919061115c565b5f6040518083038185875af1925050503d805f8114610eaf576040519150601f19603f3d011682016040523d82523d5f602084013e610eb4565b606091505b5091509150610ec587838387610ed0565b979650505050505050565b60608315610f3e5782515f03610f37576001600160a01b0385163b610f375760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e747261637400000060448201526064016105e3565b508161050e565b61050e8383815115610f535781518083602001fd5b8060405162461bcd60e51b81526004016105e39190610fc2565b5f60208284031215610f7d575f5ffd5b5035919050565b6001600160a01b03811681146109b4575f5ffd5b5f5f60408385031215610fa9575f5ffd5b8235610fb481610f84565b946020939093013593505050565b602081525f82518060208401528060208501604085015e5f604082850101526040601f19601f83011684010191505092915050565b5f60208284031215611007575f5ffd5b813561101281610f84565b9392505050565b60ff811681146109b4575f5ffd5b5f60208284031215611037575f5ffd5b813561101281611019565b5f5f5f60608486031215611054575f5ffd5b833561105f81610f84565b9250602084013561106f81610f84565b929592945050506040919091013590565b634e487b7160e01b5f52601160045260245ffd5b808201808211156104b3576104b3611080565b818103818111156104b3576104b3611080565b80820281158282048414176104b3576104b3611080565b5f826110eb57634e487b7160e01b5f52601260045260245ffd5b500490565b5f60208284031215611100575f5ffd5b5051919050565b5f60208284031215611117575f5ffd5b81518015158114611012575f5ffd5b5f60208284031215611136575f5ffd5b815161101281611019565b5f60208284031215611151575f5ffd5b815161101281610f84565b5f82518060208501845e5f92019182525091905056fe4261736520537472617465677920696d706c656d656e746174696f6e20746f20696e68657269742066726f6d20666f72206d6f726520636f6d706c657820696d706c656d656e746174696f6e73a2646970667358221220fd72ae4aceb4aa3cfa1f3960b5671f17a37147dd16c1e15f37abff661cfafbb864736f6c634300081b0033", + Bin: "0x60e060405234801561000f575f5ffd5b5060405161152938038061152983398101604081905261002e916101b6565b80826001600160a01b038116610057576040516339b190bb60e11b815260040160405180910390fd5b6001600160a01b031660805261006c8161008d565b60a052506001600160a01b03831660c0526100856100d3565b5050506102e7565b5f5f829050601f815111156100c0578260405163305a27a960e01b81526004016100b7919061028c565b60405180910390fd5b80516100cb826102c1565b179392505050565b5f54610100900460ff161561013a5760405162461bcd60e51b815260206004820152602760248201527f496e697469616c697a61626c653a20636f6e747261637420697320696e697469604482015266616c697a696e6760c81b60648201526084016100b7565b5f5460ff90811614610189575f805460ff191660ff9081179091556040519081527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b565b6001600160a01b038116811461019f575f5ffd5b50565b634e487b7160e01b5f52604160045260245ffd5b5f5f5f606084860312156101c8575f5ffd5b83516101d38161018b565b60208501519093506101e48161018b565b60408501519092506001600160401b038111156101ff575f5ffd5b8401601f8101861361020f575f5ffd5b80516001600160401b03811115610228576102286101a2565b604051601f8201601f19908116603f011681016001600160401b0381118282101715610256576102566101a2565b60405281815282820160200188101561026d575f5ffd5b8160208401602083015e5f602083830101528093505050509250925092565b602081525f82518060208401528060208501604085015e5f604082850101526040601f19601f83011684010191505092915050565b805160208083015191908110156102e1575f198160200360031b1b821691505b50919050565b60805160a05160c0516111f56103345f395f81816101800152818161035d01528181610686015261070801525f61047d01525f818161024b015281816108b60152610c6c01526111f55ff3fe608060405234801561000f575f5ffd5b5060043610610132575f3560e01c80637a8b2637116100b4578063c4d66de811610079578063c4d66de81461029b578063ce7c2ac2146102ae578063d9caed12146102c1578063e3dae51c146102d4578063f3e73875146102e7578063fabc1cbc146102fa575f5ffd5b80637a8b263714610233578063886f1195146102465780638c8710191461026d5780638f6a624014610280578063ab5921e114610293575f5ffd5b806354fd4d50116100fa57806354fd4d50146101cc578063553ca5f8146101e1578063595c6a67146101f45780635ac86ab7146101fc5780635c975abb1461022b575f5ffd5b8063136439dd146101365780632495a5991461014b57806339b70e381461017b5780633a98ef39146101a257806347e7ef24146101b9575b5f5ffd5b610149610144366004610f6d565b61030d565b005b60325461015e906001600160a01b031681565b6040516001600160a01b0390911681526020015b60405180910390f35b61015e7f000000000000000000000000000000000000000000000000000000000000000081565b6101ab60335481565b604051908152602001610172565b6101ab6101c7366004610f98565b610347565b6101d4610476565b6040516101729190610fc2565b6101ab6101ef366004610ff7565b6104a6565b6101496104b9565b61021b61020a366004611027565b6001805460ff9092161b9081161490565b6040519015158152602001610172565b6001546101ab565b6101ab610241366004610f6d565b6104cd565b61015e7f000000000000000000000000000000000000000000000000000000000000000081565b6101ab61027b366004610f6d565b610516565b6101ab61028e366004610ff7565b610520565b6101d461052d565b6101496102a9366004610ff7565b61054d565b6101ab6102bc366004610ff7565b61065f565b6101ab6102cf366004611042565b6106f1565b6101ab6102e2366004610f6d565b6107f3565b6101ab6102f5366004610f6d565b61082a565b610149610308366004610f6d565b610834565b6103156108a1565b600154818116811461033a5760405163c61dca5d60e01b815260040160405180910390fd5b61034382610944565b5050565b5f5f61035281610981565b336001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000161461039b576040516348da714f60e01b815260040160405180910390fd5b6103a584846109b7565b6033545f6103b56103e883611094565b90505f6103e86103c36109e5565b6103cd9190611094565b90505f6103da87836110a7565b9050806103e784896110ba565b6103f191906110d1565b9550855f0361041357604051630c392ed360e11b815260040160405180910390fd5b61041d8685611094565b60338190556f4b3b4ca85a86c47a098a223fffffffff101561045257604051632f14e8a360e11b815260040160405180910390fd5b61046b826103e86033546104669190611094565b610a4f565b505050505092915050565b60606104a17f0000000000000000000000000000000000000000000000000000000000000000610a9b565b905090565b5f6104b36102418361065f565b92915050565b6104c16108a1565b6104cb5f19610944565b565b5f5f6103e86033546104df9190611094565b90505f6103e86104ed6109e5565b6104f79190611094565b90508161050485836110ba565b61050e91906110d1565b949350505050565b5f6104b3826107f3565b5f6104b36102f58361065f565b60606040518060800160405280604d8152602001611173604d9139905090565b5f54610100900460ff161580801561056b57505f54600160ff909116105b806105845750303b15801561058457505f5460ff166001145b6105ec5760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201526d191e481a5b9a5d1a585b1a5e995960921b60648201526084015b60405180910390fd5b5f805460ff19166001179055801561060d575f805461ff0019166101001790555b61061682610ad8565b8015610343575f805461ff0019169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb3847402498906020015b60405180910390a15050565b60405163fe243a1760e01b81526001600160a01b0382811660048301523060248301525f917f00000000000000000000000000000000000000000000000000000000000000009091169063fe243a1790604401602060405180830381865afa1580156106cd573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906104b391906110f0565b5f60016106fd81610981565b336001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001614610746576040516348da714f60e01b815260040160405180910390fd5b610751858585610c23565b6033548084111561077557604051630b469df360e41b815260040160405180910390fd5b5f6107826103e883611094565b90505f6103e86107906109e5565b61079a9190611094565b9050816107a787836110ba565b6107b191906110d1565b94506107bd86846110a7565b6033556107dd6107cd86836110a7565b6103e86033546104669190611094565b6107e8888887610c56565b505050509392505050565b5f5f6103e86033546108059190611094565b90505f6103e86108136109e5565b61081d9190611094565b90508061050483866110ba565b5f6104b3826104cd565b61083c610c6a565b600154801982198116146108635760405163c61dca5d60e01b815260040160405180910390fd5b600182905560405182815233907f3582d1828e26bf56bd801502bc021ac0bc8afb57c826e4986b45593c8fad389c9060200160405180910390a25050565b60405163237dfb4760e11b81523360048201527f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316906346fbf68e90602401602060405180830381865afa158015610903573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906109279190611107565b6104cb57604051631d77d47760e21b815260040160405180910390fd5b600181905560405181815233907fab40a374bc51de372200a8bc981af8c9ecdc08dfdaef0bb6e09f88f3c616ef3d9060200160405180910390a250565b610996816001805460ff9092161b9081161490565b156109b45760405163840a48d560e01b815260040160405180910390fd5b50565b6032546001600160a01b0383811691161461034357604051630312abdd60e61b815260040160405180910390fd5b6032546040516370a0823160e01b81523060048201525f916001600160a01b0316906370a0823190602401602060405180830381865afa158015610a2b573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906104a191906110f0565b7fd2494f3479e5da49d386657c292c610b5b01df313d07c62eb0cfa49924a31be881610a8384670de0b6b3a76400006110ba565b610a8d91906110d1565b604051908152602001610653565b60605f610aa783610d1b565b6040805160208082528183019092529192505f91906020820181803683375050509182525060208101929092525090565b5f54610100900460ff16610b425760405162461bcd60e51b815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201526a6e697469616c697a696e6760a81b60648201526084016105e3565b603280546001600160a01b0319166001600160a01b038316179055610b665f610944565b7f1c540707b00eb5427b6b774fc799d756516a54aee108b64b327acc55af55750760325f9054906101000a90046001600160a01b0316826001600160a01b031663313ce5676040518163ffffffff1660e01b8152600401602060405180830381865afa158015610bd8573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610bfc9190611126565b604080516001600160a01b03909316835260ff90911660208301520160405180910390a150565b6032546001600160a01b03838116911614610c5157604051630312abdd60e61b815260040160405180910390fd5b505050565b610c516001600160a01b0383168483610d42565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663eab66d7a6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610cc6573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610cea9190611141565b6001600160a01b0316336001600160a01b0316146104cb5760405163794821ff60e01b815260040160405180910390fd5b5f60ff8216601f8111156104b357604051632cd44ac360e21b815260040160405180910390fd5b604080516001600160a01b03848116602483015260448083018590528351808403909101815260649092018352602080830180516001600160e01b031663a9059cbb60e01b17905283518085019094528084527f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c656490840152610c51928692915f91610dd1918516908490610e50565b905080515f1480610df1575080806020019051810190610df19190611107565b610c515760405162461bcd60e51b815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e6044820152691bdd081cdd58d8d9595960b21b60648201526084016105e3565b606061050e84845f85855f5f866001600160a01b03168587604051610e75919061115c565b5f6040518083038185875af1925050503d805f8114610eaf576040519150601f19603f3d011682016040523d82523d5f602084013e610eb4565b606091505b5091509150610ec587838387610ed0565b979650505050505050565b60608315610f3e5782515f03610f37576001600160a01b0385163b610f375760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e747261637400000060448201526064016105e3565b508161050e565b61050e8383815115610f535781518083602001fd5b8060405162461bcd60e51b81526004016105e39190610fc2565b5f60208284031215610f7d575f5ffd5b5035919050565b6001600160a01b03811681146109b4575f5ffd5b5f5f60408385031215610fa9575f5ffd5b8235610fb481610f84565b946020939093013593505050565b602081525f82518060208401528060208501604085015e5f604082850101526040601f19601f83011684010191505092915050565b5f60208284031215611007575f5ffd5b813561101281610f84565b9392505050565b60ff811681146109b4575f5ffd5b5f60208284031215611037575f5ffd5b813561101281611019565b5f5f5f60608486031215611054575f5ffd5b833561105f81610f84565b9250602084013561106f81610f84565b929592945050506040919091013590565b634e487b7160e01b5f52601160045260245ffd5b808201808211156104b3576104b3611080565b818103818111156104b3576104b3611080565b80820281158282048414176104b3576104b3611080565b5f826110eb57634e487b7160e01b5f52601260045260245ffd5b500490565b5f60208284031215611100575f5ffd5b5051919050565b5f60208284031215611117575f5ffd5b81518015158114611012575f5ffd5b5f60208284031215611136575f5ffd5b815161101281611019565b5f60208284031215611151575f5ffd5b815161101281610f84565b5f82518060208501845e5f92019182525091905056fe4261736520537472617465677920696d706c656d656e746174696f6e20746f20696e68657269742066726f6d20666f72206d6f726520636f6d706c657820696d706c656d656e746174696f6e73a2646970667358221220f5166522b111dcebf999fd08140289aa816cffea7947557d9dd5d7974d47985964736f6c634300081b0033", } // StrategyBaseABI is the input ABI used to generate the binding from. diff --git a/pkg/bindings/StrategyBaseTVLLimits/binding.go b/pkg/bindings/StrategyBaseTVLLimits/binding.go index 601ab15048..23b84d7a8f 100644 --- a/pkg/bindings/StrategyBaseTVLLimits/binding.go +++ b/pkg/bindings/StrategyBaseTVLLimits/binding.go @@ -32,7 +32,7 @@ var ( // StrategyBaseTVLLimitsMetaData contains all meta data concerning the StrategyBaseTVLLimits contract. var StrategyBaseTVLLimitsMetaData = &bind.MetaData{ ABI: "[{\"type\":\"constructor\",\"inputs\":[{\"name\":\"_strategyManager\",\"type\":\"address\",\"internalType\":\"contractIStrategyManager\"},{\"name\":\"_pauserRegistry\",\"type\":\"address\",\"internalType\":\"contractIPauserRegistry\"},{\"name\":\"_version\",\"type\":\"string\",\"internalType\":\"string\"}],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"deposit\",\"inputs\":[{\"name\":\"token\",\"type\":\"address\",\"internalType\":\"contractIERC20\"},{\"name\":\"amount\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"outputs\":[{\"name\":\"newShares\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"explanation\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"string\",\"internalType\":\"string\"}],\"stateMutability\":\"pure\"},{\"type\":\"function\",\"name\":\"getTVLLimits\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"initialize\",\"inputs\":[{\"name\":\"_maxPerDeposit\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"_maxTotalDeposits\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"_underlyingToken\",\"type\":\"address\",\"internalType\":\"contractIERC20\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"initialize\",\"inputs\":[{\"name\":\"_underlyingToken\",\"type\":\"address\",\"internalType\":\"contractIERC20\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"maxPerDeposit\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"maxTotalDeposits\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"pause\",\"inputs\":[{\"name\":\"newPausedStatus\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"pauseAll\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"paused\",\"inputs\":[{\"name\":\"index\",\"type\":\"uint8\",\"internalType\":\"uint8\"}],\"outputs\":[{\"name\":\"\",\"type\":\"bool\",\"internalType\":\"bool\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"paused\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"pauserRegistry\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"contractIPauserRegistry\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"setTVLLimits\",\"inputs\":[{\"name\":\"newMaxPerDeposit\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"newMaxTotalDeposits\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"shares\",\"inputs\":[{\"name\":\"user\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[{\"name\":\"\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"sharesToUnderlying\",\"inputs\":[{\"name\":\"amountShares\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"outputs\":[{\"name\":\"\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"sharesToUnderlyingView\",\"inputs\":[{\"name\":\"amountShares\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"outputs\":[{\"name\":\"\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"strategyManager\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"contractIStrategyManager\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"totalShares\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"underlyingToShares\",\"inputs\":[{\"name\":\"amountUnderlying\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"outputs\":[{\"name\":\"\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"underlyingToSharesView\",\"inputs\":[{\"name\":\"amountUnderlying\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"outputs\":[{\"name\":\"\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"underlyingToken\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"contractIERC20\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"unpause\",\"inputs\":[{\"name\":\"newPausedStatus\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"userUnderlying\",\"inputs\":[{\"name\":\"user\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[{\"name\":\"\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"userUnderlyingView\",\"inputs\":[{\"name\":\"user\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[{\"name\":\"\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"version\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"string\",\"internalType\":\"string\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"withdraw\",\"inputs\":[{\"name\":\"recipient\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"token\",\"type\":\"address\",\"internalType\":\"contractIERC20\"},{\"name\":\"amountShares\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"outputs\":[{\"name\":\"amountOut\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"stateMutability\":\"nonpayable\"},{\"type\":\"event\",\"name\":\"ExchangeRateEmitted\",\"inputs\":[{\"name\":\"rate\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"Initialized\",\"inputs\":[{\"name\":\"version\",\"type\":\"uint8\",\"indexed\":false,\"internalType\":\"uint8\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"MaxPerDepositUpdated\",\"inputs\":[{\"name\":\"previousValue\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"},{\"name\":\"newValue\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"MaxTotalDepositsUpdated\",\"inputs\":[{\"name\":\"previousValue\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"},{\"name\":\"newValue\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"Paused\",\"inputs\":[{\"name\":\"account\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"newPausedStatus\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"StrategyTokenSet\",\"inputs\":[{\"name\":\"token\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"contractIERC20\"},{\"name\":\"decimals\",\"type\":\"uint8\",\"indexed\":false,\"internalType\":\"uint8\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"Unpaused\",\"inputs\":[{\"name\":\"account\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"newPausedStatus\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"}],\"anonymous\":false},{\"type\":\"error\",\"name\":\"BalanceExceedsMaxTotalDeposits\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"CurrentlyPaused\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"InputAddressZero\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"InvalidNewPausedStatus\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"InvalidShortString\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"MaxPerDepositExceedsMax\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"NewSharesZero\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"OnlyPauser\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"OnlyStrategyManager\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"OnlyUnderlyingToken\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"OnlyUnpauser\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"StringTooLong\",\"inputs\":[{\"name\":\"str\",\"type\":\"string\",\"internalType\":\"string\"}]},{\"type\":\"error\",\"name\":\"TotalSharesExceedsMax\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"WithdrawalAmountExceedsTotalDeposits\",\"inputs\":[]}]", - Bin: "0x60e060405234801561000f575f5ffd5b5060405161181738038061181783398101604081905261002e916101bc565b82828280826001600160a01b03811661005a576040516339b190bb60e11b815260040160405180910390fd5b6001600160a01b031660805261006f81610093565b60a052506001600160a01b03831660c0526100886100d9565b5050505050506102ed565b5f5f829050601f815111156100c6578260405163305a27a960e01b81526004016100bd9190610292565b60405180910390fd5b80516100d1826102c7565b179392505050565b5f54610100900460ff16156101405760405162461bcd60e51b815260206004820152602760248201527f496e697469616c697a61626c653a20636f6e747261637420697320696e697469604482015266616c697a696e6760c81b60648201526084016100bd565b5f5460ff9081161461018f575f805460ff191660ff9081179091556040519081527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b565b6001600160a01b03811681146101a5575f5ffd5b50565b634e487b7160e01b5f52604160045260245ffd5b5f5f5f606084860312156101ce575f5ffd5b83516101d981610191565b60208501519093506101ea81610191565b60408501519092506001600160401b03811115610205575f5ffd5b8401601f81018613610215575f5ffd5b80516001600160401b0381111561022e5761022e6101a8565b604051601f8201601f19908116603f011681016001600160401b038111828210171561025c5761025c6101a8565b604052818152828201602001881015610273575f5ffd5b8160208401602083015e5f602083830101528093505050509250925092565b602081525f82518060208401528060208501604085015e5f604082850101526040601f19601f83011684010191505092915050565b805160208083015191908110156102e7575f198160200360031b1b821691505b50919050565b60805160a05160c0516114dd61033a5f395f81816101e801528181610417015281816107cf015261085101525f61053701525f81816102c5015281816109ec0152610b5401526114dd5ff3fe608060405234801561000f575f5ffd5b5060043610610187575f3560e01c80637a8b2637116100d9578063c4d66de811610093578063df6fadc11161006e578063df6fadc114610361578063e3dae51c1461037c578063f3e738751461038f578063fabc1cbc146103a2575f5ffd5b8063c4d66de814610328578063ce7c2ac21461033b578063d9caed121461034e575f5ffd5b80637a8b2637146102ad578063886f1195146102c05780638c871019146102e75780638f6a6240146102fa578063a6ab36f21461030d578063ab5921e114610320575f5ffd5b806347e7ef2411610144578063595c6a671161011f578063595c6a67146102655780635ac86ab71461026d5780635c975abb1461029c57806361b01b5d146102a4575f5ffd5b806347e7ef241461022a57806354fd4d501461023d578063553ca5f814610252575f5ffd5b806311c70c9d1461018b578063136439dd146101a05780632495a599146101b357806339b70e38146101e35780633a98ef391461020a57806343fe08b014610221575b5f5ffd5b61019e6101993660046111b1565b6103b5565b005b61019e6101ae3660046111d1565b6103cb565b6032546101c6906001600160a01b031681565b6040516001600160a01b0390911681526020015b60405180910390f35b6101c67f000000000000000000000000000000000000000000000000000000000000000081565b61021360335481565b6040519081526020016101da565b61021360645481565b6102136102383660046111fc565b610401565b610245610530565b6040516101da9190611226565b61021361026036600461125b565b610560565b61019e610573565b61028c61027b36600461128b565b6001805460ff9092161b9081161490565b60405190151581526020016101da565b600154610213565b61021360655481565b6102136102bb3660046111d1565b610587565b6101c67f000000000000000000000000000000000000000000000000000000000000000081565b6102136102f53660046111d1565b6105d0565b61021361030836600461125b565b6105da565b61019e61031b3660046112a6565b6105e7565b6102456106c2565b61019e61033636600461125b565b6106e2565b61021361034936600461125b565b6107a8565b61021361035c3660046112dc565b61083a565b606454606554604080519283526020830191909152016101da565b61021361038a3660046111d1565b61093c565b61021361039d3660046111d1565b610973565b61019e6103b03660046111d1565b61097d565b6103bd6109ea565b6103c78282610a9b565b5050565b6103d3610b3f565b60015481811681146103f85760405163c61dca5d60e01b815260040160405180910390fd5b6103c782610be2565b5f5f61040c81610c1f565b336001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001614610455576040516348da714f60e01b815260040160405180910390fd5b61045f8484610c55565b6033545f61046f6103e88361132e565b90505f6103e861047d610cac565b610487919061132e565b90505f6104948783611341565b9050806104a18489611354565b6104ab919061136b565b9550855f036104cd57604051630c392ed360e11b815260040160405180910390fd5b6104d7868561132e565b60338190556f4b3b4ca85a86c47a098a223fffffffff101561050c57604051632f14e8a360e11b815260040160405180910390fd5b610525826103e8603354610520919061132e565b610d16565b505050505092915050565b606061055b7f0000000000000000000000000000000000000000000000000000000000000000610d62565b905090565b5f61056d6102bb836107a8565b92915050565b61057b610b3f565b6105855f19610be2565b565b5f5f6103e8603354610599919061132e565b90505f6103e86105a7610cac565b6105b1919061132e565b9050816105be8583611354565b6105c8919061136b565b949350505050565b5f61056d8261093c565b5f61056d61039d836107a8565b5f54610100900460ff161580801561060557505f54600160ff909116105b8061061e5750303b15801561061e57505f5460ff166001145b6106435760405162461bcd60e51b815260040161063a9061138a565b60405180910390fd5b5f805460ff191660011790558015610664575f805461ff0019166101001790555b61066e8484610a9b565b61067782610d9f565b80156106bc575f805461ff0019169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b50505050565b60606040518060800160405280604d815260200161145b604d9139905090565b5f54610100900460ff161580801561070057505f54600160ff909116105b806107195750303b15801561071957505f5460ff166001145b6107355760405162461bcd60e51b815260040161063a9061138a565b5f805460ff191660011790558015610756575f805461ff0019166101001790555b61075f82610d9f565b80156103c7575f805461ff0019169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb3847402498906020015b60405180910390a15050565b60405163fe243a1760e01b81526001600160a01b0382811660048301523060248301525f917f00000000000000000000000000000000000000000000000000000000000000009091169063fe243a1790604401602060405180830381865afa158015610816573d5f5f3e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061056d91906113d8565b5f600161084681610c1f565b336001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000161461088f576040516348da714f60e01b815260040160405180910390fd5b61089a858585610eea565b603354808411156108be57604051630b469df360e41b815260040160405180910390fd5b5f6108cb6103e88361132e565b90505f6103e86108d9610cac565b6108e3919061132e565b9050816108f08783611354565b6108fa919061136b565b94506109068684611341565b6033556109266109168683611341565b6103e8603354610520919061132e565b610931888887610f1d565b505050509392505050565b5f5f6103e860335461094e919061132e565b90505f6103e861095c610cac565b610966919061132e565b9050806105be8386611354565b5f61056d82610587565b6109856109ea565b600154801982198116146109ac5760405163c61dca5d60e01b815260040160405180910390fd5b600182905560405182815233907f3582d1828e26bf56bd801502bc021ac0bc8afb57c826e4986b45593c8fad389c9060200160405180910390a25050565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663eab66d7a6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610a46573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610a6a91906113ef565b6001600160a01b0316336001600160a01b0316146105855760405163794821ff60e01b815260040160405180910390fd5b60645460408051918252602082018490527ff97ed4e083acac67830025ecbc756d8fe847cdbdca4cee3fe1e128e98b54ecb5910160405180910390a160655460408051918252602082018390527f6ab181e0440bfbf4bacdf2e99674735ce6638005490688c5f994f5399353e452910160405180910390a180821115610b345760405163052b07b760e21b815260040160405180910390fd5b606491909155606555565b60405163237dfb4760e11b81523360048201527f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316906346fbf68e90602401602060405180830381865afa158015610ba1573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610bc5919061140a565b61058557604051631d77d47760e21b815260040160405180910390fd5b600181905560405181815233907fab40a374bc51de372200a8bc981af8c9ecdc08dfdaef0bb6e09f88f3c616ef3d9060200160405180910390a250565b610c34816001805460ff9092161b9081161490565b15610c525760405163840a48d560e01b815260040160405180910390fd5b50565b606454811115610c785760405163052b07b760e21b815260040160405180910390fd5b606554610c83610cac565b1115610ca25760405163d86bae6760e01b815260040160405180910390fd5b6103c78282610f31565b6032546040516370a0823160e01b81523060048201525f916001600160a01b0316906370a0823190602401602060405180830381865afa158015610cf2573d5f5f3e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061055b91906113d8565b7fd2494f3479e5da49d386657c292c610b5b01df313d07c62eb0cfa49924a31be881610d4a84670de0b6b3a7640000611354565b610d54919061136b565b60405190815260200161079c565b60605f610d6e83610f5f565b6040805160208082528183019092529192505f91906020820181803683375050509182525060208101929092525090565b5f54610100900460ff16610e095760405162461bcd60e51b815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201526a6e697469616c697a696e6760a81b606482015260840161063a565b603280546001600160a01b0319166001600160a01b038316179055610e2d5f610be2565b7f1c540707b00eb5427b6b774fc799d756516a54aee108b64b327acc55af55750760325f9054906101000a90046001600160a01b0316826001600160a01b031663313ce5676040518163ffffffff1660e01b8152600401602060405180830381865afa158015610e9f573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610ec39190611429565b604080516001600160a01b03909316835260ff90911660208301520160405180910390a150565b6032546001600160a01b03838116911614610f1857604051630312abdd60e61b815260040160405180910390fd5b505050565b610f186001600160a01b0383168483610f86565b6032546001600160a01b038381169116146103c757604051630312abdd60e61b815260040160405180910390fd5b5f60ff8216601f81111561056d57604051632cd44ac360e21b815260040160405180910390fd5b604080516001600160a01b03848116602483015260448083018590528351808403909101815260649092018352602080830180516001600160e01b031663a9059cbb60e01b17905283518085019094528084527f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c656490840152610f18928692915f91611015918516908490611094565b905080515f1480611035575080806020019051810190611035919061140a565b610f185760405162461bcd60e51b815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e6044820152691bdd081cdd58d8d9595960b21b606482015260840161063a565b60606105c884845f85855f5f866001600160a01b031685876040516110b99190611444565b5f6040518083038185875af1925050503d805f81146110f3576040519150601f19603f3d011682016040523d82523d5f602084013e6110f8565b606091505b509150915061110987838387611114565b979650505050505050565b606083156111825782515f0361117b576001600160a01b0385163b61117b5760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e7472616374000000604482015260640161063a565b50816105c8565b6105c883838151156111975781518083602001fd5b8060405162461bcd60e51b815260040161063a9190611226565b5f5f604083850312156111c2575f5ffd5b50508035926020909101359150565b5f602082840312156111e1575f5ffd5b5035919050565b6001600160a01b0381168114610c52575f5ffd5b5f5f6040838503121561120d575f5ffd5b8235611218816111e8565b946020939093013593505050565b602081525f82518060208401528060208501604085015e5f604082850101526040601f19601f83011684010191505092915050565b5f6020828403121561126b575f5ffd5b8135611276816111e8565b9392505050565b60ff81168114610c52575f5ffd5b5f6020828403121561129b575f5ffd5b81356112768161127d565b5f5f5f606084860312156112b8575f5ffd5b833592506020840135915060408401356112d1816111e8565b809150509250925092565b5f5f5f606084860312156112ee575f5ffd5b83356112f9816111e8565b92506020840135611309816111e8565b929592945050506040919091013590565b634e487b7160e01b5f52601160045260245ffd5b8082018082111561056d5761056d61131a565b8181038181111561056d5761056d61131a565b808202811582820484141761056d5761056d61131a565b5f8261138557634e487b7160e01b5f52601260045260245ffd5b500490565b6020808252602e908201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160408201526d191e481a5b9a5d1a585b1a5e995960921b606082015260800190565b5f602082840312156113e8575f5ffd5b5051919050565b5f602082840312156113ff575f5ffd5b8151611276816111e8565b5f6020828403121561141a575f5ffd5b81518015158114611276575f5ffd5b5f60208284031215611439575f5ffd5b81516112768161127d565b5f82518060208501845e5f92019182525091905056fe4261736520537472617465677920696d706c656d656e746174696f6e20746f20696e68657269742066726f6d20666f72206d6f726520636f6d706c657820696d706c656d656e746174696f6e73a26469706673582212207b9d033e96fc79616ab2a9355a82541f0b65b5f5dfcee9214ab9809641e51f7a64736f6c634300081b0033", + Bin: "0x60e060405234801561000f575f5ffd5b5060405161181738038061181783398101604081905261002e916101bc565b82828280826001600160a01b03811661005a576040516339b190bb60e11b815260040160405180910390fd5b6001600160a01b031660805261006f81610093565b60a052506001600160a01b03831660c0526100886100d9565b5050505050506102ed565b5f5f829050601f815111156100c6578260405163305a27a960e01b81526004016100bd9190610292565b60405180910390fd5b80516100d1826102c7565b179392505050565b5f54610100900460ff16156101405760405162461bcd60e51b815260206004820152602760248201527f496e697469616c697a61626c653a20636f6e747261637420697320696e697469604482015266616c697a696e6760c81b60648201526084016100bd565b5f5460ff9081161461018f575f805460ff191660ff9081179091556040519081527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b565b6001600160a01b03811681146101a5575f5ffd5b50565b634e487b7160e01b5f52604160045260245ffd5b5f5f5f606084860312156101ce575f5ffd5b83516101d981610191565b60208501519093506101ea81610191565b60408501519092506001600160401b03811115610205575f5ffd5b8401601f81018613610215575f5ffd5b80516001600160401b0381111561022e5761022e6101a8565b604051601f8201601f19908116603f011681016001600160401b038111828210171561025c5761025c6101a8565b604052818152828201602001881015610273575f5ffd5b8160208401602083015e5f602083830101528093505050509250925092565b602081525f82518060208401528060208501604085015e5f604082850101526040601f19601f83011684010191505092915050565b805160208083015191908110156102e7575f198160200360031b1b821691505b50919050565b60805160a05160c0516114dd61033a5f395f81816101e801528181610417015281816107cf015261085101525f61053701525f81816102c5015281816109ec0152610b5401526114dd5ff3fe608060405234801561000f575f5ffd5b5060043610610187575f3560e01c80637a8b2637116100d9578063c4d66de811610093578063df6fadc11161006e578063df6fadc114610361578063e3dae51c1461037c578063f3e738751461038f578063fabc1cbc146103a2575f5ffd5b8063c4d66de814610328578063ce7c2ac21461033b578063d9caed121461034e575f5ffd5b80637a8b2637146102ad578063886f1195146102c05780638c871019146102e75780638f6a6240146102fa578063a6ab36f21461030d578063ab5921e114610320575f5ffd5b806347e7ef2411610144578063595c6a671161011f578063595c6a67146102655780635ac86ab71461026d5780635c975abb1461029c57806361b01b5d146102a4575f5ffd5b806347e7ef241461022a57806354fd4d501461023d578063553ca5f814610252575f5ffd5b806311c70c9d1461018b578063136439dd146101a05780632495a599146101b357806339b70e38146101e35780633a98ef391461020a57806343fe08b014610221575b5f5ffd5b61019e6101993660046111b1565b6103b5565b005b61019e6101ae3660046111d1565b6103cb565b6032546101c6906001600160a01b031681565b6040516001600160a01b0390911681526020015b60405180910390f35b6101c67f000000000000000000000000000000000000000000000000000000000000000081565b61021360335481565b6040519081526020016101da565b61021360645481565b6102136102383660046111fc565b610401565b610245610530565b6040516101da9190611226565b61021361026036600461125b565b610560565b61019e610573565b61028c61027b36600461128b565b6001805460ff9092161b9081161490565b60405190151581526020016101da565b600154610213565b61021360655481565b6102136102bb3660046111d1565b610587565b6101c67f000000000000000000000000000000000000000000000000000000000000000081565b6102136102f53660046111d1565b6105d0565b61021361030836600461125b565b6105da565b61019e61031b3660046112a6565b6105e7565b6102456106c2565b61019e61033636600461125b565b6106e2565b61021361034936600461125b565b6107a8565b61021361035c3660046112dc565b61083a565b606454606554604080519283526020830191909152016101da565b61021361038a3660046111d1565b61093c565b61021361039d3660046111d1565b610973565b61019e6103b03660046111d1565b61097d565b6103bd6109ea565b6103c78282610a9b565b5050565b6103d3610b3f565b60015481811681146103f85760405163c61dca5d60e01b815260040160405180910390fd5b6103c782610be2565b5f5f61040c81610c1f565b336001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001614610455576040516348da714f60e01b815260040160405180910390fd5b61045f8484610c55565b6033545f61046f6103e88361132e565b90505f6103e861047d610cac565b610487919061132e565b90505f6104948783611341565b9050806104a18489611354565b6104ab919061136b565b9550855f036104cd57604051630c392ed360e11b815260040160405180910390fd5b6104d7868561132e565b60338190556f4b3b4ca85a86c47a098a223fffffffff101561050c57604051632f14e8a360e11b815260040160405180910390fd5b610525826103e8603354610520919061132e565b610d16565b505050505092915050565b606061055b7f0000000000000000000000000000000000000000000000000000000000000000610d62565b905090565b5f61056d6102bb836107a8565b92915050565b61057b610b3f565b6105855f19610be2565b565b5f5f6103e8603354610599919061132e565b90505f6103e86105a7610cac565b6105b1919061132e565b9050816105be8583611354565b6105c8919061136b565b949350505050565b5f61056d8261093c565b5f61056d61039d836107a8565b5f54610100900460ff161580801561060557505f54600160ff909116105b8061061e5750303b15801561061e57505f5460ff166001145b6106435760405162461bcd60e51b815260040161063a9061138a565b60405180910390fd5b5f805460ff191660011790558015610664575f805461ff0019166101001790555b61066e8484610a9b565b61067782610d9f565b80156106bc575f805461ff0019169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b50505050565b60606040518060800160405280604d815260200161145b604d9139905090565b5f54610100900460ff161580801561070057505f54600160ff909116105b806107195750303b15801561071957505f5460ff166001145b6107355760405162461bcd60e51b815260040161063a9061138a565b5f805460ff191660011790558015610756575f805461ff0019166101001790555b61075f82610d9f565b80156103c7575f805461ff0019169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb3847402498906020015b60405180910390a15050565b60405163fe243a1760e01b81526001600160a01b0382811660048301523060248301525f917f00000000000000000000000000000000000000000000000000000000000000009091169063fe243a1790604401602060405180830381865afa158015610816573d5f5f3e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061056d91906113d8565b5f600161084681610c1f565b336001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000161461088f576040516348da714f60e01b815260040160405180910390fd5b61089a858585610eea565b603354808411156108be57604051630b469df360e41b815260040160405180910390fd5b5f6108cb6103e88361132e565b90505f6103e86108d9610cac565b6108e3919061132e565b9050816108f08783611354565b6108fa919061136b565b94506109068684611341565b6033556109266109168683611341565b6103e8603354610520919061132e565b610931888887610f1d565b505050509392505050565b5f5f6103e860335461094e919061132e565b90505f6103e861095c610cac565b610966919061132e565b9050806105be8386611354565b5f61056d82610587565b6109856109ea565b600154801982198116146109ac5760405163c61dca5d60e01b815260040160405180910390fd5b600182905560405182815233907f3582d1828e26bf56bd801502bc021ac0bc8afb57c826e4986b45593c8fad389c9060200160405180910390a25050565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663eab66d7a6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610a46573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610a6a91906113ef565b6001600160a01b0316336001600160a01b0316146105855760405163794821ff60e01b815260040160405180910390fd5b60645460408051918252602082018490527ff97ed4e083acac67830025ecbc756d8fe847cdbdca4cee3fe1e128e98b54ecb5910160405180910390a160655460408051918252602082018390527f6ab181e0440bfbf4bacdf2e99674735ce6638005490688c5f994f5399353e452910160405180910390a180821115610b345760405163052b07b760e21b815260040160405180910390fd5b606491909155606555565b60405163237dfb4760e11b81523360048201527f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316906346fbf68e90602401602060405180830381865afa158015610ba1573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610bc5919061140a565b61058557604051631d77d47760e21b815260040160405180910390fd5b600181905560405181815233907fab40a374bc51de372200a8bc981af8c9ecdc08dfdaef0bb6e09f88f3c616ef3d9060200160405180910390a250565b610c34816001805460ff9092161b9081161490565b15610c525760405163840a48d560e01b815260040160405180910390fd5b50565b606454811115610c785760405163052b07b760e21b815260040160405180910390fd5b606554610c83610cac565b1115610ca25760405163d86bae6760e01b815260040160405180910390fd5b6103c78282610f31565b6032546040516370a0823160e01b81523060048201525f916001600160a01b0316906370a0823190602401602060405180830381865afa158015610cf2573d5f5f3e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061055b91906113d8565b7fd2494f3479e5da49d386657c292c610b5b01df313d07c62eb0cfa49924a31be881610d4a84670de0b6b3a7640000611354565b610d54919061136b565b60405190815260200161079c565b60605f610d6e83610f5f565b6040805160208082528183019092529192505f91906020820181803683375050509182525060208101929092525090565b5f54610100900460ff16610e095760405162461bcd60e51b815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201526a6e697469616c697a696e6760a81b606482015260840161063a565b603280546001600160a01b0319166001600160a01b038316179055610e2d5f610be2565b7f1c540707b00eb5427b6b774fc799d756516a54aee108b64b327acc55af55750760325f9054906101000a90046001600160a01b0316826001600160a01b031663313ce5676040518163ffffffff1660e01b8152600401602060405180830381865afa158015610e9f573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610ec39190611429565b604080516001600160a01b03909316835260ff90911660208301520160405180910390a150565b6032546001600160a01b03838116911614610f1857604051630312abdd60e61b815260040160405180910390fd5b505050565b610f186001600160a01b0383168483610f86565b6032546001600160a01b038381169116146103c757604051630312abdd60e61b815260040160405180910390fd5b5f60ff8216601f81111561056d57604051632cd44ac360e21b815260040160405180910390fd5b604080516001600160a01b03848116602483015260448083018590528351808403909101815260649092018352602080830180516001600160e01b031663a9059cbb60e01b17905283518085019094528084527f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c656490840152610f18928692915f91611015918516908490611094565b905080515f1480611035575080806020019051810190611035919061140a565b610f185760405162461bcd60e51b815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e6044820152691bdd081cdd58d8d9595960b21b606482015260840161063a565b60606105c884845f85855f5f866001600160a01b031685876040516110b99190611444565b5f6040518083038185875af1925050503d805f81146110f3576040519150601f19603f3d011682016040523d82523d5f602084013e6110f8565b606091505b509150915061110987838387611114565b979650505050505050565b606083156111825782515f0361117b576001600160a01b0385163b61117b5760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e7472616374000000604482015260640161063a565b50816105c8565b6105c883838151156111975781518083602001fd5b8060405162461bcd60e51b815260040161063a9190611226565b5f5f604083850312156111c2575f5ffd5b50508035926020909101359150565b5f602082840312156111e1575f5ffd5b5035919050565b6001600160a01b0381168114610c52575f5ffd5b5f5f6040838503121561120d575f5ffd5b8235611218816111e8565b946020939093013593505050565b602081525f82518060208401528060208501604085015e5f604082850101526040601f19601f83011684010191505092915050565b5f6020828403121561126b575f5ffd5b8135611276816111e8565b9392505050565b60ff81168114610c52575f5ffd5b5f6020828403121561129b575f5ffd5b81356112768161127d565b5f5f5f606084860312156112b8575f5ffd5b833592506020840135915060408401356112d1816111e8565b809150509250925092565b5f5f5f606084860312156112ee575f5ffd5b83356112f9816111e8565b92506020840135611309816111e8565b929592945050506040919091013590565b634e487b7160e01b5f52601160045260245ffd5b8082018082111561056d5761056d61131a565b8181038181111561056d5761056d61131a565b808202811582820484141761056d5761056d61131a565b5f8261138557634e487b7160e01b5f52601260045260245ffd5b500490565b6020808252602e908201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160408201526d191e481a5b9a5d1a585b1a5e995960921b606082015260800190565b5f602082840312156113e8575f5ffd5b5051919050565b5f602082840312156113ff575f5ffd5b8151611276816111e8565b5f6020828403121561141a575f5ffd5b81518015158114611276575f5ffd5b5f60208284031215611439575f5ffd5b81516112768161127d565b5f82518060208501845e5f92019182525091905056fe4261736520537472617465677920696d706c656d656e746174696f6e20746f20696e68657269742066726f6d20666f72206d6f726520636f6d706c657820696d706c656d656e746174696f6e73a2646970667358221220a4cdc1085ccd126138f1968f7dc27d1ad29065f45677807f4e06ffb990094fc064736f6c634300081b0033", } // StrategyBaseTVLLimitsABI is the input ABI used to generate the binding from. diff --git a/pkg/bindings/StrategyFactory/binding.go b/pkg/bindings/StrategyFactory/binding.go index 7afdd1c0f1..bcb875667b 100644 --- a/pkg/bindings/StrategyFactory/binding.go +++ b/pkg/bindings/StrategyFactory/binding.go @@ -32,7 +32,7 @@ var ( // StrategyFactoryMetaData contains all meta data concerning the StrategyFactory contract. var StrategyFactoryMetaData = &bind.MetaData{ ABI: "[{\"type\":\"constructor\",\"inputs\":[{\"name\":\"_strategyManager\",\"type\":\"address\",\"internalType\":\"contractIStrategyManager\"},{\"name\":\"_pauserRegistry\",\"type\":\"address\",\"internalType\":\"contractIPauserRegistry\"},{\"name\":\"_version\",\"type\":\"string\",\"internalType\":\"string\"}],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"blacklistTokens\",\"inputs\":[{\"name\":\"tokens\",\"type\":\"address[]\",\"internalType\":\"contractIERC20[]\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"deployNewStrategy\",\"inputs\":[{\"name\":\"token\",\"type\":\"address\",\"internalType\":\"contractIERC20\"}],\"outputs\":[{\"name\":\"newStrategy\",\"type\":\"address\",\"internalType\":\"contractIStrategy\"}],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"deployedStrategies\",\"inputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"contractIERC20\"}],\"outputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"contractIStrategy\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"initialize\",\"inputs\":[{\"name\":\"_initialOwner\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"_initialPausedStatus\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"_strategyBeacon\",\"type\":\"address\",\"internalType\":\"contractIBeacon\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"isBlacklisted\",\"inputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"contractIERC20\"}],\"outputs\":[{\"name\":\"\",\"type\":\"bool\",\"internalType\":\"bool\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"owner\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"address\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"pause\",\"inputs\":[{\"name\":\"newPausedStatus\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"pauseAll\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"paused\",\"inputs\":[{\"name\":\"index\",\"type\":\"uint8\",\"internalType\":\"uint8\"}],\"outputs\":[{\"name\":\"\",\"type\":\"bool\",\"internalType\":\"bool\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"paused\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"pauserRegistry\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"contractIPauserRegistry\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"removeStrategiesFromWhitelist\",\"inputs\":[{\"name\":\"strategiesToRemoveFromWhitelist\",\"type\":\"address[]\",\"internalType\":\"contractIStrategy[]\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"renounceOwnership\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"strategyBeacon\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"contractIBeacon\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"strategyManager\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"contractIStrategyManager\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"transferOwnership\",\"inputs\":[{\"name\":\"newOwner\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"unpause\",\"inputs\":[{\"name\":\"newPausedStatus\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"version\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"string\",\"internalType\":\"string\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"whitelistStrategies\",\"inputs\":[{\"name\":\"strategiesToWhitelist\",\"type\":\"address[]\",\"internalType\":\"contractIStrategy[]\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"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\":\"Paused\",\"inputs\":[{\"name\":\"account\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"newPausedStatus\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"StrategyBeaconModified\",\"inputs\":[{\"name\":\"previousBeacon\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"contractIBeacon\"},{\"name\":\"newBeacon\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"contractIBeacon\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"StrategySetForToken\",\"inputs\":[{\"name\":\"token\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"contractIERC20\"},{\"name\":\"strategy\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"contractIStrategy\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"TokenBlacklisted\",\"inputs\":[{\"name\":\"token\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"contractIERC20\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"Unpaused\",\"inputs\":[{\"name\":\"account\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"newPausedStatus\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"}],\"anonymous\":false},{\"type\":\"error\",\"name\":\"AlreadyBlacklisted\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"BlacklistedToken\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"CurrentlyPaused\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"InputAddressZero\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"InvalidNewPausedStatus\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"InvalidShortString\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"OnlyPauser\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"OnlyUnpauser\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"StrategyAlreadyExists\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"StringTooLong\",\"inputs\":[{\"name\":\"str\",\"type\":\"string\",\"internalType\":\"string\"}]}]", - Bin: "0x60e060405234801561000f575f5ffd5b50604051611b26380380611b2683398101604081905261002e916101b9565b80826001600160a01b038116610057576040516339b190bb60e11b815260040160405180910390fd5b6001600160a01b031660805261006c8161008d565b60a052506001600160a01b03831660c0526100856100d3565b5050506102ea565b5f5f829050601f815111156100c0578260405163305a27a960e01b81526004016100b7919061028f565b60405180910390fd5b80516100cb826102c4565b179392505050565b603354610100900460ff161561013b5760405162461bcd60e51b815260206004820152602760248201527f496e697469616c697a61626c653a20636f6e747261637420697320696e697469604482015266616c697a696e6760c81b60648201526084016100b7565b60335460ff9081161461018c576033805460ff191660ff9081179091556040519081527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b565b6001600160a01b03811681146101a2575f5ffd5b50565b634e487b7160e01b5f52604160045260245ffd5b5f5f5f606084860312156101cb575f5ffd5b83516101d68161018e565b60208501519093506101e78161018e565b60408501519092506001600160401b03811115610202575f5ffd5b8401601f81018613610212575f5ffd5b80516001600160401b0381111561022b5761022b6101a5565b604051601f8201601f19908116603f011681016001600160401b0381118282101715610259576102596101a5565b604052818152828201602001881015610270575f5ffd5b8160208401602083015e5f602083830101528093505050509250925092565b602081525f82518060208401528060208501604085015e5f604082850101526040601f19601f83011684010191505092915050565b805160208083015191908110156102e4575f198160200360031b1b821691505b50919050565b60805160a05160c0516117e861033e5f395f818161014d0152818161055a01528181610764015281816108010152610a9901525f6105ca01525f818161023501528181610ae50152610d9601526117e85ff3fe608060405234801561000f575f5ffd5b506004361061011c575f3560e01c8063715018a6116100a9578063f0062d9a1161006e578063f0062d9a1461028e578063f2fde38b146102a0578063fabc1cbc146102b3578063fe38b32d146102c6578063fe575a87146102d9575f5ffd5b8063715018a614610228578063886f1195146102305780638da5cb5b14610257578063b768ebc914610268578063c350a1b51461027b575f5ffd5b8063581dfd65116100ef578063581dfd65146101a1578063595c6a67146101c95780635ac86ab7146101d15780635c975abb146102045780636b9b622914610215575f5ffd5b8063136439dd1461012057806323103c411461013557806339b70e381461014857806354fd4d501461018c575b5f5ffd5b61013361012e366004610e7f565b6102fb565b005b610133610143366004610ede565b610335565b61016f7f000000000000000000000000000000000000000000000000000000000000000081565b6040516001600160a01b0390911681526020015b60405180910390f35b6101946105c3565b6040516101839190610f4b565b61016f6101af366004610f78565b60016020525f90815260409020546001600160a01b031681565b6101336105f3565b6101f46101df366004610f93565b609954600160ff9092169190911b9081161490565b6040519015158152602001610183565b609954604051908152602001610183565b61016f610223366004610f78565b610607565b6101336107d1565b61016f7f000000000000000000000000000000000000000000000000000000000000000081565b6066546001600160a01b031661016f565b610133610276366004610ede565b6107e2565b610133610289366004610fb3565b610869565b5f5461016f906001600160a01b031681565b6101336102ae366004610f78565b610994565b6101336102c1366004610e7f565b610a0d565b6101336102d4366004610ede565b610a7a565b6101f46102e7366004610f78565b60026020525f908152604090205460ff1681565b610303610ad0565b60995481811681146103285760405163c61dca5d60e01b815260040160405180910390fd5b61033182610b73565b5050565b61033d610bb0565b5f8167ffffffffffffffff81111561035757610357610ff2565b604051908082528060200260200182016040528015610380578160200160208202803683370190505b5090505f805b838110156105395760025f8686848181106103a3576103a3611006565b90506020020160208101906103b89190610f78565b6001600160a01b0316815260208101919091526040015f205460ff16156103f25760405163f53de75f60e01b815260040160405180910390fd5b600160025f87878581811061040957610409611006565b905060200201602081019061041e9190610f78565b6001600160a01b0316815260208101919091526040015f20805460ff19169115159190911790557f75519c51f39873ec0e27dd3bbc09549e4865a113f505393fb9eab5898f6418b385858381811061047857610478611006565b905060200201602081019061048d9190610f78565b6040516001600160a01b03909116815260200160405180910390a15f60015f8787858181106104be576104be611006565b90506020020160208101906104d39190610f78565b6001600160a01b03908116825260208201929092526040015f20541690508015610530578084848151811061050a5761050a611006565b6001600160a01b03909216602092830291909101909101528261052c8161101a565b9350505b50600101610386565b5080825280156105bd576040516316bb16b760e31b81526001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000169063b5d8b5b89061058f90859060040161103e565b5f604051808303815f87803b1580156105a6575f5ffd5b505af11580156105b8573d5f5f3e3d5ffd5b505050505b50505050565b60606105ee7f0000000000000000000000000000000000000000000000000000000000000000610c0a565b905090565b6105fb610ad0565b6106055f19610b73565b565b5f5f61061281610c47565b6001600160a01b0383165f9081526002602052604090205460ff161561064b5760405163091867bd60e11b815260040160405180910390fd5b6001600160a01b038381165f9081526001602052604090205416156106835760405163c45546f760e01b815260040160405180910390fd5b5f8054604080516001600160a01b0387811660248084019190915283518084039091018152604490920183526020820180516001600160e01b031663189acdbd60e31b17905291519190921691906106da90610e72565b6106e5929190611089565b604051809103905ff0801580156106fe573d5f5f3e3d5ffd5b50905061070b8482610c72565b6040805160018082528183019092525f916020808301908036833701905050905081815f8151811061073f5761073f611006565b6001600160a01b039283166020918202929092010152604051632ef047f960e11b81527f000000000000000000000000000000000000000000000000000000000000000090911690635de08ff29061079b90849060040161103e565b5f604051808303815f87803b1580156107b2575f5ffd5b505af11580156107c4573d5f5f3e3d5ffd5b5093979650505050505050565b6107d9610bb0565b6106055f610cdc565b6107ea610bb0565b604051632ef047f960e11b81526001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001690635de08ff29061083890859085906004016110b4565b5f604051808303815f87803b15801561084f575f5ffd5b505af1158015610861573d5f5f3e3d5ffd5b505050505050565b603354610100900460ff16158080156108895750603354600160ff909116105b806108a35750303b1580156108a3575060335460ff166001145b61090b5760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201526d191e481a5b9a5d1a585b1a5e995960921b60648201526084015b60405180910390fd5b6033805460ff19166001179055801561092e576033805461ff0019166101001790555b61093784610cdc565b61094083610b73565b61094982610d2d565b80156105bd576033805461ff0019169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a150505050565b61099c610bb0565b6001600160a01b038116610a015760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610902565b610a0a81610cdc565b50565b610a15610d94565b60995480198219811614610a3c5760405163c61dca5d60e01b815260040160405180910390fd5b609982905560405182815233907f3582d1828e26bf56bd801502bc021ac0bc8afb57c826e4986b45593c8fad389c9060200160405180910390a25050565b610a82610bb0565b6040516316bb16b760e31b81526001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000169063b5d8b5b89061083890859085906004016110b4565b60405163237dfb4760e11b81523360048201527f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316906346fbf68e90602401602060405180830381865afa158015610b32573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610b569190611100565b61060557604051631d77d47760e21b815260040160405180910390fd5b609981905560405181815233907fab40a374bc51de372200a8bc981af8c9ecdc08dfdaef0bb6e09f88f3c616ef3d9060200160405180910390a250565b6066546001600160a01b031633146106055760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610902565b60605f610c1683610e45565b6040805160208082528183019092529192505f91906020820181803683375050509182525060208101929092525090565b609954600160ff83161b90811603610a0a5760405163840a48d560e01b815260040160405180910390fd5b6001600160a01b038281165f8181526001602090815260409182902080546001600160a01b031916948616948517905581519283528201929092527f6852a55230ef089d785bce7ffbf757985de34026df90a87d7b4a6e56f95d251f910160405180910390a15050565b606680546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0905f90a35050565b5f54604080516001600160a01b03928316815291831660208301527fe21755962a7d7e100b59b9c3e4d4b54085b146313719955efb6a7a25c5c7feee910160405180910390a15f80546001600160a01b0319166001600160a01b0392909216919091179055565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663eab66d7a6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610df0573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610e14919061111f565b6001600160a01b0316336001600160a01b0316146106055760405163794821ff60e01b815260040160405180910390fd5b5f60ff8216601f811115610e6c57604051632cd44ac360e21b815260040160405180910390fd5b92915050565b6106788061113b83390190565b5f60208284031215610e8f575f5ffd5b5035919050565b5f5f83601f840112610ea6575f5ffd5b50813567ffffffffffffffff811115610ebd575f5ffd5b6020830191508360208260051b8501011115610ed7575f5ffd5b9250929050565b5f5f60208385031215610eef575f5ffd5b823567ffffffffffffffff811115610f05575f5ffd5b610f1185828601610e96565b90969095509350505050565b5f81518084528060208401602086015e5f602082860101526020601f19601f83011685010191505092915050565b602081525f610f5d6020830184610f1d565b9392505050565b6001600160a01b0381168114610a0a575f5ffd5b5f60208284031215610f88575f5ffd5b8135610f5d81610f64565b5f60208284031215610fa3575f5ffd5b813560ff81168114610f5d575f5ffd5b5f5f5f60608486031215610fc5575f5ffd5b8335610fd081610f64565b9250602084013591506040840135610fe781610f64565b809150509250925092565b634e487b7160e01b5f52604160045260245ffd5b634e487b7160e01b5f52603260045260245ffd5b5f6001820161103757634e487b7160e01b5f52601160045260245ffd5b5060010190565b602080825282518282018190525f918401906040840190835b8181101561107e5783516001600160a01b0316835260209384019390920191600101611057565b509095945050505050565b6001600160a01b03831681526040602082018190525f906110ac90830184610f1d565b949350505050565b602080825281018290525f8360408301825b858110156110f65782356110d981610f64565b6001600160a01b03168252602092830192909101906001016110c6565b5095945050505050565b5f60208284031215611110575f5ffd5b81518015158114610f5d575f5ffd5b5f6020828403121561112f575f5ffd5b8151610f5d81610f6456fe6080604052604051610678380380610678833981016040819052610022916103ed565b61002d82825f610034565b5050610513565b61003d836100f1565b6040516001600160a01b038416907f1cf3b03a6cf19fa2baba4df148e9dcabedea7f8a5c07840e207e5c089be95d3e905f90a25f8251118061007c5750805b156100ec576100ea836001600160a01b0316635c60da1b6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156100c0573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906100e491906104af565b83610273565b505b505050565b6001600160a01b0381163b61015b5760405162461bcd60e51b815260206004820152602560248201527f455243313936373a206e657720626561636f6e206973206e6f74206120636f6e6044820152641d1c9858dd60da1b60648201526084015b60405180910390fd5b6101cd816001600160a01b0316635c60da1b6040518163ffffffff1660e01b8152600401602060405180830381865afa15801561019a573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906101be91906104af565b6001600160a01b03163b151590565b6102325760405162461bcd60e51b815260206004820152603060248201527f455243313936373a20626561636f6e20696d706c656d656e746174696f6e206960448201526f1cc81b9bdd08184818dbdb9d1c9858dd60821b6064820152608401610152565b7fa3f0ad74e5423aebfd80d3ef4346578335a9a72aeaee59ff6cb3582b35133d5080546001600160a01b0319166001600160a01b0392909216919091179055565b606061029883836040518060600160405280602781526020016106516027913961029f565b9392505050565b60605f5f856001600160a01b0316856040516102bb91906104c8565b5f60405180830381855af49150503d805f81146102f3576040519150601f19603f3d011682016040523d82523d5f602084013e6102f8565b606091505b50909250905061030a86838387610314565b9695505050505050565b606083156103825782515f0361037b576001600160a01b0385163b61037b5760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e74726163740000006044820152606401610152565b508161038c565b61038c8383610394565b949350505050565b8151156103a45781518083602001fd5b8060405162461bcd60e51b815260040161015291906104de565b80516001600160a01b03811681146103d4575f5ffd5b919050565b634e487b7160e01b5f52604160045260245ffd5b5f5f604083850312156103fe575f5ffd5b610407836103be565b60208401519092506001600160401b03811115610422575f5ffd5b8301601f81018513610432575f5ffd5b80516001600160401b0381111561044b5761044b6103d9565b604051601f8201601f19908116603f011681016001600160401b0381118282101715610479576104796103d9565b604052818152828201602001871015610490575f5ffd5b8160208401602083015e5f602083830101528093505050509250929050565b5f602082840312156104bf575f5ffd5b610298826103be565b5f82518060208501845e5f920191825250919050565b602081525f82518060208401528060208501604085015e5f604082850101526040601f19601f83011684010191505092915050565b610131806105205f395ff3fe608060405236601057600e6013565b005b600e5b601f601b6021565b60b3565b565b5f60527fa3f0ad74e5423aebfd80d3ef4346578335a9a72aeaee59ff6cb3582b35133d50546001600160a01b031690565b6001600160a01b0316635c60da1b6040518163ffffffff1660e01b8152600401602060405180830381865afa158015608c573d5f5f3e3d5ffd5b505050506040513d601f19601f8201168201806040525081019060ae919060d0565b905090565b365f5f375f5f365f845af43d5f5f3e80801560cc573d5ff35b3d5ffd5b5f6020828403121560df575f5ffd5b81516001600160a01b038116811460f4575f5ffd5b939250505056fea2646970667358221220f37d2ffd80ec7d14cc9a0f17394e9d97446c1f630de382043b1ed4ccacf6a7d464736f6c634300081b0033416464726573733a206c6f772d6c6576656c2064656c65676174652063616c6c206661696c6564a2646970667358221220985c5647751610db87ca4be7b03d44d1cf04e645382637bfe25de8a0e1c3dc2464736f6c634300081b0033", + Bin: "0x60e060405234801561000f575f5ffd5b50604051611b26380380611b2683398101604081905261002e916101b9565b80826001600160a01b038116610057576040516339b190bb60e11b815260040160405180910390fd5b6001600160a01b031660805261006c8161008d565b60a052506001600160a01b03831660c0526100856100d3565b5050506102ea565b5f5f829050601f815111156100c0578260405163305a27a960e01b81526004016100b7919061028f565b60405180910390fd5b80516100cb826102c4565b179392505050565b603354610100900460ff161561013b5760405162461bcd60e51b815260206004820152602760248201527f496e697469616c697a61626c653a20636f6e747261637420697320696e697469604482015266616c697a696e6760c81b60648201526084016100b7565b60335460ff9081161461018c576033805460ff191660ff9081179091556040519081527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b565b6001600160a01b03811681146101a2575f5ffd5b50565b634e487b7160e01b5f52604160045260245ffd5b5f5f5f606084860312156101cb575f5ffd5b83516101d68161018e565b60208501519093506101e78161018e565b60408501519092506001600160401b03811115610202575f5ffd5b8401601f81018613610212575f5ffd5b80516001600160401b0381111561022b5761022b6101a5565b604051601f8201601f19908116603f011681016001600160401b0381118282101715610259576102596101a5565b604052818152828201602001881015610270575f5ffd5b8160208401602083015e5f602083830101528093505050509250925092565b602081525f82518060208401528060208501604085015e5f604082850101526040601f19601f83011684010191505092915050565b805160208083015191908110156102e4575f198160200360031b1b821691505b50919050565b60805160a05160c0516117e861033e5f395f818161014d0152818161055a01528181610764015281816108010152610a9901525f6105ca01525f818161023501528181610ae50152610d9601526117e85ff3fe608060405234801561000f575f5ffd5b506004361061011c575f3560e01c8063715018a6116100a9578063f0062d9a1161006e578063f0062d9a1461028e578063f2fde38b146102a0578063fabc1cbc146102b3578063fe38b32d146102c6578063fe575a87146102d9575f5ffd5b8063715018a614610228578063886f1195146102305780638da5cb5b14610257578063b768ebc914610268578063c350a1b51461027b575f5ffd5b8063581dfd65116100ef578063581dfd65146101a1578063595c6a67146101c95780635ac86ab7146101d15780635c975abb146102045780636b9b622914610215575f5ffd5b8063136439dd1461012057806323103c411461013557806339b70e381461014857806354fd4d501461018c575b5f5ffd5b61013361012e366004610e7f565b6102fb565b005b610133610143366004610ede565b610335565b61016f7f000000000000000000000000000000000000000000000000000000000000000081565b6040516001600160a01b0390911681526020015b60405180910390f35b6101946105c3565b6040516101839190610f4b565b61016f6101af366004610f78565b60016020525f90815260409020546001600160a01b031681565b6101336105f3565b6101f46101df366004610f93565b609954600160ff9092169190911b9081161490565b6040519015158152602001610183565b609954604051908152602001610183565b61016f610223366004610f78565b610607565b6101336107d1565b61016f7f000000000000000000000000000000000000000000000000000000000000000081565b6066546001600160a01b031661016f565b610133610276366004610ede565b6107e2565b610133610289366004610fb3565b610869565b5f5461016f906001600160a01b031681565b6101336102ae366004610f78565b610994565b6101336102c1366004610e7f565b610a0d565b6101336102d4366004610ede565b610a7a565b6101f46102e7366004610f78565b60026020525f908152604090205460ff1681565b610303610ad0565b60995481811681146103285760405163c61dca5d60e01b815260040160405180910390fd5b61033182610b73565b5050565b61033d610bb0565b5f8167ffffffffffffffff81111561035757610357610ff2565b604051908082528060200260200182016040528015610380578160200160208202803683370190505b5090505f805b838110156105395760025f8686848181106103a3576103a3611006565b90506020020160208101906103b89190610f78565b6001600160a01b0316815260208101919091526040015f205460ff16156103f25760405163f53de75f60e01b815260040160405180910390fd5b600160025f87878581811061040957610409611006565b905060200201602081019061041e9190610f78565b6001600160a01b0316815260208101919091526040015f20805460ff19169115159190911790557f75519c51f39873ec0e27dd3bbc09549e4865a113f505393fb9eab5898f6418b385858381811061047857610478611006565b905060200201602081019061048d9190610f78565b6040516001600160a01b03909116815260200160405180910390a15f60015f8787858181106104be576104be611006565b90506020020160208101906104d39190610f78565b6001600160a01b03908116825260208201929092526040015f20541690508015610530578084848151811061050a5761050a611006565b6001600160a01b03909216602092830291909101909101528261052c8161101a565b9350505b50600101610386565b5080825280156105bd576040516316bb16b760e31b81526001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000169063b5d8b5b89061058f90859060040161103e565b5f604051808303815f87803b1580156105a6575f5ffd5b505af11580156105b8573d5f5f3e3d5ffd5b505050505b50505050565b60606105ee7f0000000000000000000000000000000000000000000000000000000000000000610c0a565b905090565b6105fb610ad0565b6106055f19610b73565b565b5f5f61061281610c47565b6001600160a01b0383165f9081526002602052604090205460ff161561064b5760405163091867bd60e11b815260040160405180910390fd5b6001600160a01b038381165f9081526001602052604090205416156106835760405163c45546f760e01b815260040160405180910390fd5b5f8054604080516001600160a01b0387811660248084019190915283518084039091018152604490920183526020820180516001600160e01b031663189acdbd60e31b17905291519190921691906106da90610e72565b6106e5929190611089565b604051809103905ff0801580156106fe573d5f5f3e3d5ffd5b50905061070b8482610c72565b6040805160018082528183019092525f916020808301908036833701905050905081815f8151811061073f5761073f611006565b6001600160a01b039283166020918202929092010152604051632ef047f960e11b81527f000000000000000000000000000000000000000000000000000000000000000090911690635de08ff29061079b90849060040161103e565b5f604051808303815f87803b1580156107b2575f5ffd5b505af11580156107c4573d5f5f3e3d5ffd5b5093979650505050505050565b6107d9610bb0565b6106055f610cdc565b6107ea610bb0565b604051632ef047f960e11b81526001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001690635de08ff29061083890859085906004016110b4565b5f604051808303815f87803b15801561084f575f5ffd5b505af1158015610861573d5f5f3e3d5ffd5b505050505050565b603354610100900460ff16158080156108895750603354600160ff909116105b806108a35750303b1580156108a3575060335460ff166001145b61090b5760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201526d191e481a5b9a5d1a585b1a5e995960921b60648201526084015b60405180910390fd5b6033805460ff19166001179055801561092e576033805461ff0019166101001790555b61093784610cdc565b61094083610b73565b61094982610d2d565b80156105bd576033805461ff0019169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a150505050565b61099c610bb0565b6001600160a01b038116610a015760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610902565b610a0a81610cdc565b50565b610a15610d94565b60995480198219811614610a3c5760405163c61dca5d60e01b815260040160405180910390fd5b609982905560405182815233907f3582d1828e26bf56bd801502bc021ac0bc8afb57c826e4986b45593c8fad389c9060200160405180910390a25050565b610a82610bb0565b6040516316bb16b760e31b81526001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000169063b5d8b5b89061083890859085906004016110b4565b60405163237dfb4760e11b81523360048201527f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316906346fbf68e90602401602060405180830381865afa158015610b32573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610b569190611100565b61060557604051631d77d47760e21b815260040160405180910390fd5b609981905560405181815233907fab40a374bc51de372200a8bc981af8c9ecdc08dfdaef0bb6e09f88f3c616ef3d9060200160405180910390a250565b6066546001600160a01b031633146106055760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610902565b60605f610c1683610e45565b6040805160208082528183019092529192505f91906020820181803683375050509182525060208101929092525090565b609954600160ff83161b90811603610a0a5760405163840a48d560e01b815260040160405180910390fd5b6001600160a01b038281165f8181526001602090815260409182902080546001600160a01b031916948616948517905581519283528201929092527f6852a55230ef089d785bce7ffbf757985de34026df90a87d7b4a6e56f95d251f910160405180910390a15050565b606680546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0905f90a35050565b5f54604080516001600160a01b03928316815291831660208301527fe21755962a7d7e100b59b9c3e4d4b54085b146313719955efb6a7a25c5c7feee910160405180910390a15f80546001600160a01b0319166001600160a01b0392909216919091179055565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663eab66d7a6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610df0573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610e14919061111f565b6001600160a01b0316336001600160a01b0316146106055760405163794821ff60e01b815260040160405180910390fd5b5f60ff8216601f811115610e6c57604051632cd44ac360e21b815260040160405180910390fd5b92915050565b6106788061113b83390190565b5f60208284031215610e8f575f5ffd5b5035919050565b5f5f83601f840112610ea6575f5ffd5b50813567ffffffffffffffff811115610ebd575f5ffd5b6020830191508360208260051b8501011115610ed7575f5ffd5b9250929050565b5f5f60208385031215610eef575f5ffd5b823567ffffffffffffffff811115610f05575f5ffd5b610f1185828601610e96565b90969095509350505050565b5f81518084528060208401602086015e5f602082860101526020601f19601f83011685010191505092915050565b602081525f610f5d6020830184610f1d565b9392505050565b6001600160a01b0381168114610a0a575f5ffd5b5f60208284031215610f88575f5ffd5b8135610f5d81610f64565b5f60208284031215610fa3575f5ffd5b813560ff81168114610f5d575f5ffd5b5f5f5f60608486031215610fc5575f5ffd5b8335610fd081610f64565b9250602084013591506040840135610fe781610f64565b809150509250925092565b634e487b7160e01b5f52604160045260245ffd5b634e487b7160e01b5f52603260045260245ffd5b5f6001820161103757634e487b7160e01b5f52601160045260245ffd5b5060010190565b602080825282518282018190525f918401906040840190835b8181101561107e5783516001600160a01b0316835260209384019390920191600101611057565b509095945050505050565b6001600160a01b03831681526040602082018190525f906110ac90830184610f1d565b949350505050565b602080825281018290525f8360408301825b858110156110f65782356110d981610f64565b6001600160a01b03168252602092830192909101906001016110c6565b5095945050505050565b5f60208284031215611110575f5ffd5b81518015158114610f5d575f5ffd5b5f6020828403121561112f575f5ffd5b8151610f5d81610f6456fe6080604052604051610678380380610678833981016040819052610022916103ed565b61002d82825f610034565b5050610513565b61003d836100f1565b6040516001600160a01b038416907f1cf3b03a6cf19fa2baba4df148e9dcabedea7f8a5c07840e207e5c089be95d3e905f90a25f8251118061007c5750805b156100ec576100ea836001600160a01b0316635c60da1b6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156100c0573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906100e491906104af565b83610273565b505b505050565b6001600160a01b0381163b61015b5760405162461bcd60e51b815260206004820152602560248201527f455243313936373a206e657720626561636f6e206973206e6f74206120636f6e6044820152641d1c9858dd60da1b60648201526084015b60405180910390fd5b6101cd816001600160a01b0316635c60da1b6040518163ffffffff1660e01b8152600401602060405180830381865afa15801561019a573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906101be91906104af565b6001600160a01b03163b151590565b6102325760405162461bcd60e51b815260206004820152603060248201527f455243313936373a20626561636f6e20696d706c656d656e746174696f6e206960448201526f1cc81b9bdd08184818dbdb9d1c9858dd60821b6064820152608401610152565b7fa3f0ad74e5423aebfd80d3ef4346578335a9a72aeaee59ff6cb3582b35133d5080546001600160a01b0319166001600160a01b0392909216919091179055565b606061029883836040518060600160405280602781526020016106516027913961029f565b9392505050565b60605f5f856001600160a01b0316856040516102bb91906104c8565b5f60405180830381855af49150503d805f81146102f3576040519150601f19603f3d011682016040523d82523d5f602084013e6102f8565b606091505b50909250905061030a86838387610314565b9695505050505050565b606083156103825782515f0361037b576001600160a01b0385163b61037b5760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e74726163740000006044820152606401610152565b508161038c565b61038c8383610394565b949350505050565b8151156103a45781518083602001fd5b8060405162461bcd60e51b815260040161015291906104de565b80516001600160a01b03811681146103d4575f5ffd5b919050565b634e487b7160e01b5f52604160045260245ffd5b5f5f604083850312156103fe575f5ffd5b610407836103be565b60208401519092506001600160401b03811115610422575f5ffd5b8301601f81018513610432575f5ffd5b80516001600160401b0381111561044b5761044b6103d9565b604051601f8201601f19908116603f011681016001600160401b0381118282101715610479576104796103d9565b604052818152828201602001871015610490575f5ffd5b8160208401602083015e5f602083830101528093505050509250929050565b5f602082840312156104bf575f5ffd5b610298826103be565b5f82518060208501845e5f920191825250919050565b602081525f82518060208401528060208501604085015e5f604082850101526040601f19601f83011684010191505092915050565b610131806105205f395ff3fe608060405236601057600e6013565b005b600e5b601f601b6021565b60b3565b565b5f60527fa3f0ad74e5423aebfd80d3ef4346578335a9a72aeaee59ff6cb3582b35133d50546001600160a01b031690565b6001600160a01b0316635c60da1b6040518163ffffffff1660e01b8152600401602060405180830381865afa158015608c573d5f5f3e3d5ffd5b505050506040513d601f19601f8201168201806040525081019060ae919060d0565b905090565b365f5f375f5f365f845af43d5f5f3e80801560cc573d5ff35b3d5ffd5b5f6020828403121560df575f5ffd5b81516001600160a01b038116811460f4575f5ffd5b939250505056fea2646970667358221220dfae9c271955fd7893d6ff55c88376018b243516190a05d51300cbf3831caa5f64736f6c634300081b0033416464726573733a206c6f772d6c6576656c2064656c65676174652063616c6c206661696c6564a2646970667358221220d52ea026d48a2fc9b42c41b45406974e462b861b235e0e217d72b1c42dbd646764736f6c634300081b0033", } // StrategyFactoryABI is the input ABI used to generate the binding from. diff --git a/pkg/bindings/StrategyManager/binding.go b/pkg/bindings/StrategyManager/binding.go index d5313b027e..6b5da0f17a 100644 --- a/pkg/bindings/StrategyManager/binding.go +++ b/pkg/bindings/StrategyManager/binding.go @@ -38,7 +38,7 @@ type OperatorSet struct { // StrategyManagerMetaData contains all meta data concerning the StrategyManager contract. var StrategyManagerMetaData = &bind.MetaData{ ABI: "[{\"type\":\"constructor\",\"inputs\":[{\"name\":\"_delegation\",\"type\":\"address\",\"internalType\":\"contractIDelegationManager\"},{\"name\":\"_slashEscrowFactory\",\"type\":\"address\",\"internalType\":\"contractISlashEscrowFactory\"},{\"name\":\"_pauserRegistry\",\"type\":\"address\",\"internalType\":\"contractIPauserRegistry\"},{\"name\":\"_version\",\"type\":\"string\",\"internalType\":\"string\"}],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"DEFAULT_BURN_ADDRESS\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"address\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"DEPOSIT_TYPEHASH\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"addShares\",\"inputs\":[{\"name\":\"staker\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"strategy\",\"type\":\"address\",\"internalType\":\"contractIStrategy\"},{\"name\":\"shares\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"outputs\":[{\"name\":\"\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"addStrategiesToDepositWhitelist\",\"inputs\":[{\"name\":\"strategiesToWhitelist\",\"type\":\"address[]\",\"internalType\":\"contractIStrategy[]\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"burnShares\",\"inputs\":[{\"name\":\"strategy\",\"type\":\"address\",\"internalType\":\"contractIStrategy\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"calculateStrategyDepositDigestHash\",\"inputs\":[{\"name\":\"staker\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"strategy\",\"type\":\"address\",\"internalType\":\"contractIStrategy\"},{\"name\":\"token\",\"type\":\"address\",\"internalType\":\"contractIERC20\"},{\"name\":\"amount\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"nonce\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"expiry\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"outputs\":[{\"name\":\"\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"clearBurnOrRedistributableShares\",\"inputs\":[{\"name\":\"operatorSet\",\"type\":\"tuple\",\"internalType\":\"structOperatorSet\",\"components\":[{\"name\":\"avs\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"id\",\"type\":\"uint32\",\"internalType\":\"uint32\"}]},{\"name\":\"slashId\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"outputs\":[{\"name\":\"\",\"type\":\"uint256[]\",\"internalType\":\"uint256[]\"}],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"clearBurnOrRedistributableSharesByStrategy\",\"inputs\":[{\"name\":\"operatorSet\",\"type\":\"tuple\",\"internalType\":\"structOperatorSet\",\"components\":[{\"name\":\"avs\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"id\",\"type\":\"uint32\",\"internalType\":\"uint32\"}]},{\"name\":\"slashId\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"strategy\",\"type\":\"address\",\"internalType\":\"contractIStrategy\"}],\"outputs\":[{\"name\":\"\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"delegation\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"contractIDelegationManager\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"depositIntoStrategy\",\"inputs\":[{\"name\":\"strategy\",\"type\":\"address\",\"internalType\":\"contractIStrategy\"},{\"name\":\"token\",\"type\":\"address\",\"internalType\":\"contractIERC20\"},{\"name\":\"amount\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"outputs\":[{\"name\":\"depositShares\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"depositIntoStrategyWithSignature\",\"inputs\":[{\"name\":\"strategy\",\"type\":\"address\",\"internalType\":\"contractIStrategy\"},{\"name\":\"token\",\"type\":\"address\",\"internalType\":\"contractIERC20\"},{\"name\":\"amount\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"staker\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"expiry\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"signature\",\"type\":\"bytes\",\"internalType\":\"bytes\"}],\"outputs\":[{\"name\":\"depositShares\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"domainSeparator\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"getBurnOrRedistributableCount\",\"inputs\":[{\"name\":\"operatorSet\",\"type\":\"tuple\",\"internalType\":\"structOperatorSet\",\"components\":[{\"name\":\"avs\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"id\",\"type\":\"uint32\",\"internalType\":\"uint32\"}]},{\"name\":\"slashId\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"outputs\":[{\"name\":\"\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"getBurnOrRedistributableShares\",\"inputs\":[{\"name\":\"operatorSet\",\"type\":\"tuple\",\"internalType\":\"structOperatorSet\",\"components\":[{\"name\":\"avs\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"id\",\"type\":\"uint32\",\"internalType\":\"uint32\"}]},{\"name\":\"slashId\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"outputs\":[{\"name\":\"\",\"type\":\"address[]\",\"internalType\":\"contractIStrategy[]\"},{\"name\":\"\",\"type\":\"uint256[]\",\"internalType\":\"uint256[]\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"getBurnOrRedistributableShares\",\"inputs\":[{\"name\":\"operatorSet\",\"type\":\"tuple\",\"internalType\":\"structOperatorSet\",\"components\":[{\"name\":\"avs\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"id\",\"type\":\"uint32\",\"internalType\":\"uint32\"}]},{\"name\":\"slashId\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"strategy\",\"type\":\"address\",\"internalType\":\"contractIStrategy\"}],\"outputs\":[{\"name\":\"\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"getBurnableShares\",\"inputs\":[{\"name\":\"strategy\",\"type\":\"address\",\"internalType\":\"contractIStrategy\"}],\"outputs\":[{\"name\":\"\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"getDeposits\",\"inputs\":[{\"name\":\"staker\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[{\"name\":\"\",\"type\":\"address[]\",\"internalType\":\"contractIStrategy[]\"},{\"name\":\"\",\"type\":\"uint256[]\",\"internalType\":\"uint256[]\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"getStakerStrategyList\",\"inputs\":[{\"name\":\"staker\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[{\"name\":\"\",\"type\":\"address[]\",\"internalType\":\"contractIStrategy[]\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"getStrategiesWithBurnableShares\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"address[]\",\"internalType\":\"address[]\"},{\"name\":\"\",\"type\":\"uint256[]\",\"internalType\":\"uint256[]\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"increaseBurnOrRedistributableShares\",\"inputs\":[{\"name\":\"operatorSet\",\"type\":\"tuple\",\"internalType\":\"structOperatorSet\",\"components\":[{\"name\":\"avs\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"id\",\"type\":\"uint32\",\"internalType\":\"uint32\"}]},{\"name\":\"slashId\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"strategy\",\"type\":\"address\",\"internalType\":\"contractIStrategy\"},{\"name\":\"sharesToBurn\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"initialize\",\"inputs\":[{\"name\":\"initialOwner\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"initialStrategyWhitelister\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"initialPausedStatus\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"nonces\",\"inputs\":[{\"name\":\"signer\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[{\"name\":\"nonce\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"owner\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"address\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"pause\",\"inputs\":[{\"name\":\"newPausedStatus\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"pauseAll\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"paused\",\"inputs\":[{\"name\":\"index\",\"type\":\"uint8\",\"internalType\":\"uint8\"}],\"outputs\":[{\"name\":\"\",\"type\":\"bool\",\"internalType\":\"bool\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"paused\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"pauserRegistry\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"contractIPauserRegistry\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"removeDepositShares\",\"inputs\":[{\"name\":\"staker\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"strategy\",\"type\":\"address\",\"internalType\":\"contractIStrategy\"},{\"name\":\"depositSharesToRemove\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"outputs\":[{\"name\":\"\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"removeStrategiesFromDepositWhitelist\",\"inputs\":[{\"name\":\"strategiesToRemoveFromWhitelist\",\"type\":\"address[]\",\"internalType\":\"contractIStrategy[]\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"renounceOwnership\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"setStrategyWhitelister\",\"inputs\":[{\"name\":\"newStrategyWhitelister\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"slashEscrowFactory\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"contractISlashEscrowFactory\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"stakerDepositShares\",\"inputs\":[{\"name\":\"staker\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"strategy\",\"type\":\"address\",\"internalType\":\"contractIStrategy\"}],\"outputs\":[{\"name\":\"shares\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"stakerStrategyList\",\"inputs\":[{\"name\":\"staker\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"outputs\":[{\"name\":\"strategies\",\"type\":\"address\",\"internalType\":\"contractIStrategy\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"stakerStrategyListLength\",\"inputs\":[{\"name\":\"staker\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[{\"name\":\"\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"strategyIsWhitelistedForDeposit\",\"inputs\":[{\"name\":\"strategy\",\"type\":\"address\",\"internalType\":\"contractIStrategy\"}],\"outputs\":[{\"name\":\"whitelisted\",\"type\":\"bool\",\"internalType\":\"bool\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"strategyWhitelister\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"address\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"transferOwnership\",\"inputs\":[{\"name\":\"newOwner\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"unpause\",\"inputs\":[{\"name\":\"newPausedStatus\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"version\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"string\",\"internalType\":\"string\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"withdrawSharesAsTokens\",\"inputs\":[{\"name\":\"staker\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"strategy\",\"type\":\"address\",\"internalType\":\"contractIStrategy\"},{\"name\":\"token\",\"type\":\"address\",\"internalType\":\"contractIERC20\"},{\"name\":\"shares\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"event\",\"name\":\"BurnOrRedistributableSharesDecreased\",\"inputs\":[{\"name\":\"operatorSet\",\"type\":\"tuple\",\"indexed\":false,\"internalType\":\"structOperatorSet\",\"components\":[{\"name\":\"avs\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"id\",\"type\":\"uint32\",\"internalType\":\"uint32\"}]},{\"name\":\"slashId\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"},{\"name\":\"strategy\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"contractIStrategy\"},{\"name\":\"shares\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"BurnOrRedistributableSharesIncreased\",\"inputs\":[{\"name\":\"operatorSet\",\"type\":\"tuple\",\"indexed\":false,\"internalType\":\"structOperatorSet\",\"components\":[{\"name\":\"avs\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"id\",\"type\":\"uint32\",\"internalType\":\"uint32\"}]},{\"name\":\"slashId\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"},{\"name\":\"strategy\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"contractIStrategy\"},{\"name\":\"shares\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"BurnableSharesDecreased\",\"inputs\":[{\"name\":\"strategy\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"contractIStrategy\"},{\"name\":\"shares\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"Deposit\",\"inputs\":[{\"name\":\"staker\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"},{\"name\":\"strategy\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"contractIStrategy\"},{\"name\":\"shares\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"}],\"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\":\"Paused\",\"inputs\":[{\"name\":\"account\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"newPausedStatus\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"StrategyAddedToDepositWhitelist\",\"inputs\":[{\"name\":\"strategy\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"contractIStrategy\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"StrategyRemovedFromDepositWhitelist\",\"inputs\":[{\"name\":\"strategy\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"contractIStrategy\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"StrategyWhitelisterChanged\",\"inputs\":[{\"name\":\"previousAddress\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"},{\"name\":\"newAddress\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"Unpaused\",\"inputs\":[{\"name\":\"account\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"newPausedStatus\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"}],\"anonymous\":false},{\"type\":\"error\",\"name\":\"CurrentlyPaused\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"InputAddressZero\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"InvalidNewPausedStatus\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"InvalidShortString\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"InvalidSignature\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"MaxStrategiesExceeded\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"OnlyDelegationManager\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"OnlyPauser\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"OnlyStrategyWhitelister\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"OnlyUnpauser\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"SharesAmountTooHigh\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"SharesAmountZero\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"SignatureExpired\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"StakerAddressZero\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"StrategyAlreadyInSlash\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"StrategyNotFound\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"StrategyNotWhitelisted\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"StringTooLong\",\"inputs\":[{\"name\":\"str\",\"type\":\"string\",\"internalType\":\"string\"}]}]", - Bin: "0x610100604052348015610010575f5ffd5b506040516137e33803806137e383398101604081905261002f916101bc565b80808585856001600160a01b03811661005b576040516339b190bb60e11b815260040160405180910390fd5b6001600160a01b0390811660805291821660a0521660c05261007c81610093565b60e0525061008a90506100d9565b50505050610301565b5f5f829050601f815111156100c6578260405163305a27a960e01b81526004016100bd91906102a6565b60405180910390fd5b80516100d1826102db565b179392505050565b5f54610100900460ff16156101405760405162461bcd60e51b815260206004820152602760248201527f496e697469616c697a61626c653a20636f6e747261637420697320696e697469604482015266616c697a696e6760c81b60648201526084016100bd565b5f5460ff9081161461018f575f805460ff191660ff9081179091556040519081527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b565b6001600160a01b03811681146101a5575f5ffd5b50565b634e487b7160e01b5f52604160045260245ffd5b5f5f5f5f608085870312156101cf575f5ffd5b84516101da81610191565b60208601519094506101eb81610191565b60408601519093506101fc81610191565b60608601519092506001600160401b03811115610217575f5ffd5b8501601f81018713610227575f5ffd5b80516001600160401b03811115610240576102406101a8565b604051601f8201601f19908116603f011681016001600160401b038111828210171561026e5761026e6101a8565b604052818152828201602001891015610285575f5ffd5b8160208401602083015e5f6020838301015280935050505092959194509250565b602081525f82518060208401528060208501604085015e5f604082850101526040601f19601f83011684010191505092915050565b805160208083015191908110156102fb575f198160200360031b1b821691505b50919050565b60805160a05160c05160e05161346961037a5f395f81816110fa015261222701525f81816103ce015281816108310152610e8401525f81816105bc015281816109d201528181610dcb0152818161108c015281816112a70152611e9b01525f81816104aa01528181611a90015261229601526134695ff3fe608060405234801561000f575f5ffd5b5060043610610255575f3560e01c80637ecebe0011610140578063c6656702116100bf578063f2fde38b11610084578063f2fde38b146105f1578063f3b4a00014610604578063f698da251461060e578063fabc1cbc14610616578063fd98042314610629578063fe243a171461063c575f5ffd5b8063c665670214610571578063cbc2bd6214610584578063de44acb614610597578063df5cf723146105b7578063e7a050aa146105de575f5ffd5b80638da5cb5b116101055780638da5cb5b1461051457806394f649dd14610525578063967fc0d2146105385780639ac01d611461054b578063b5d8b5b81461055e575f5ffd5b80637ecebe0014610473578063829fca7314610492578063886f1195146104a557806388c10299146104cc5780638b8aac3c146104ec575f5ffd5b806350ff7225116101d75780635c975abb1161019c5780635c975abb146104085780635de08ff214610410578063663c1de414610423578063715018a614610445578063724af4231461044d57806376fb162b14610460575f5ffd5b806350ff72251461035157806354fd4d5014610379578063595c6a671461038e5780635ac86ab7146103965780635b84087f146103c9575f5ffd5b806332e89ace1161021d57806332e89ace146102db57806336a8c500146102ee5780633fb99ca51461030457806348825e94146103175780634b6d5d6e1461033e575f5ffd5b8063136439dd146102595780631794bb3c1461026e5780632d44def6146102815780632eae418c146102a757806331f8fb4c146102ba575b5f5ffd5b61026c610267366004612c76565b610666565b005b61026c61027c366004612ca1565b6106a0565b61029461028f366004612cf5565b6107c6565b6040519081526020015b60405180910390f35b61026c6102b5366004612d33565b6109c7565b6102cd6102c8366004612d81565b610a93565b60405161029e929190612e1d565b6102946102e9366004612e8f565b610c1e565b6102f6610ca3565b60405161029e929190612f6b565b61026c610312366004612fc1565b610dc0565b6102947f4337f82d142e41f2a8c10547cd8c859bddb92262a61058e77842e24d9dea922481565b61026c61034c366004613005565b610f32565b61036461035f366004612ca1565b61107f565b6040805192835260208301919091520161029e565b6103816110f3565b60405161029e919061304e565b61026c611123565b6103b96103a4366004613060565b609854600160ff9092169190911b9081161490565b604051901515815260200161029e565b6103f07f000000000000000000000000000000000000000000000000000000000000000081565b6040516001600160a01b03909116815260200161029e565b609854610294565b61026c61041e366004613080565b611137565b6103b9610431366004613005565b60d16020525f908152604090205460ff1681565b61026c61128a565b61029461045b366004612ca1565b61129b565b61029461046e366004612cf5565b611304565b610294610481366004613005565b60ca6020525f908152604090205481565b6102946104a0366004612d81565b611349565b6103f07f000000000000000000000000000000000000000000000000000000000000000081565b6104df6104da366004612d81565b61138c565b60405161029e91906130f1565b6102946104fa366004613005565b6001600160a01b03165f90815260ce602052604090205490565b6033546001600160a01b03166103f0565b6102cd610533366004613005565b61147d565b60cb546103f0906001600160a01b031681565b610294610559366004613103565b6115f5565b61026c61056c366004613080565b611686565b61026c61057f366004613005565b6117cd565b6103f0610592366004613164565b6117f0565b6105aa6105a5366004613005565b611824565b60405161029e919061318e565b6103f07f000000000000000000000000000000000000000000000000000000000000000081565b6102946105ec366004612ca1565b611897565b61026c6105ff366004613005565b6118ca565b6103f0620e16e481565b610294611940565b61026c610624366004612c76565b6119f9565b610294610637366004613005565b611a66565b61029461064a3660046131a0565b60cd60209081525f928352604080842090915290825290205481565b61066e611a7b565b60985481811681146106935760405163c61dca5d60e01b815260040160405180910390fd5b61069c82611b1e565b5050565b5f54610100900460ff16158080156106be57505f54600160ff909116105b806106d75750303b1580156106d757505f5460ff166001145b61073f5760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201526d191e481a5b9a5d1a585b1a5e995960921b60648201526084015b60405180910390fd5b5f805460ff191660011790558015610760575f805461ff0019166101001790555b61076982611b1e565b61077284611b5b565b61077b83611bac565b80156107c0575f805461ff0019169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b50505050565b5f8060d7816107e26107dd368990038901896131ef565b611c15565b815260208082019290925260409081015f9081208782529092528120915061080a8285611c78565b915061081890508285611c9c565b505f81156109bb57846001600160a01b031663d9caed127f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316633453b2348a8a6040518363ffffffff1660e01b815260040161087d92919061327d565b602060405180830381865afa158015610898573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906108bc9190613298565b876001600160a01b0316632495a5996040518163ffffffff1660e01b8152600401602060405180830381865afa1580156108f8573d5f5f3e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061091c9190613298565b856040518463ffffffff1660e01b815260040161093b939291906132b3565b6020604051808303815f875af1158015610957573d5f5f3e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061097b91906132d7565b90507fe6413aa0c789e437b0a06bf64b20926584f066c79a2d8b80a759c85472f7b0af878787856040516109b294939291906132ee565b60405180910390a15b925050505b9392505050565b336001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001614610a105760405163f739589b60e01b815260040160405180910390fd5b610a18611cb0565b604051636ce5768960e11b81526001600160a01b0384169063d9caed1290610a48908790869086906004016132b3565b6020604051808303815f875af1158015610a64573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610a8891906132d7565b506107c06001606555565b6060805f60d781610aac6107dd368990038901896131ef565b81526020019081526020015f205f8581526020019081526020015f2090505f610ad482611d09565b90505f815167ffffffffffffffff811115610af157610af1612e4a565b604051908082528060200260200182016040528015610b1a578160200160208202803683370190505b5090505f825167ffffffffffffffff811115610b3857610b38612e4a565b604051908082528060200260200182016040528015610b61578160200160208202803683370190505b5090505f5b8351811015610c0e57838181518110610b8157610b81613320565b6020026020010151838281518110610b9b57610b9b613320565b60200260200101906001600160a01b031690816001600160a01b031681525050610be7848281518110610bd057610bd0613320565b602002602001015186611c7890919063ffffffff16565b9050828281518110610bfb57610bfb613320565b6020908102919091010152600101610b66565b50909450925050505b9250929050565b5f5f610c2981611d15565b610c31611cb0565b6001600160a01b0385165f90815260ca6020526040902054610c6286610c5b818c8c8c878c6115f5565b8688611d40565b6001600160a01b0386165f90815260ca60205260409020600182019055610c8b868a8a8a611d92565b925050610c986001606555565b509695505050505050565b6060805f610cb160d4611eff565b90505f8167ffffffffffffffff811115610ccd57610ccd612e4a565b604051908082528060200260200182016040528015610cf6578160200160208202803683370190505b5090505f8267ffffffffffffffff811115610d1357610d13612e4a565b604051908082528060200260200182016040528015610d3c578160200160208202803683370190505b5090505f5b83811015610db5575f5f610d5660d484611f09565b9150915081858481518110610d6d57610d6d613320565b60200260200101906001600160a01b031690816001600160a01b03168152505080848481518110610da057610da0613320565b60209081029190910101525050600101610d41565b509094909350915050565b336001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001614610e095760405163f739589b60e01b815260040160405180910390fd5b610e11611cb0565b5f60d781610e276107dd368990038901896131ef565b815260208082019290925260409081015f90812087825290925290209050610e50818484611f17565b610e6d5760405163ca354fa360e01b815260040160405180910390fd5b604051637a96761160e01b81526001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001690637a96761190610ebd90889088908890600401613334565b5f604051808303815f87803b158015610ed4575f5ffd5b505af1158015610ee6573d5f5f3e3d5ffd5b505050507f5f5209798bbac45a16d2dc3bc67319fab26ee00153916d6f07b69f8a134a1e8b85858585604051610f1f94939291906132ee565b60405180910390a1506107c06001606555565b610f3a611cb0565b5f610f4660d483611c78565b915050610f5460d483611c9c565b50604080516001600160a01b0384168152602081018390527fd9d082c3ec4f3a3ffa55c324939a06407f5fbcb87d5e0ce3b9508c92c84ed839910160405180910390a1801561107157816001600160a01b031663d9caed12620e16e4846001600160a01b0316632495a5996040518163ffffffff1660e01b8152600401602060405180830381865afa158015610fec573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906110109190613298565b846040518463ffffffff1660e01b815260040161102f939291906132b3565b6020604051808303815f875af115801561104b573d5f5f3e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061106f91906132d7565b505b5061107c6001606555565b50565b5f80336001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016146110ca5760405163f739589b60e01b815260040160405180910390fd5b6110d2611cb0565b6110dd858585611f2c565b915091506110eb6001606555565b935093915050565b606061111e7f0000000000000000000000000000000000000000000000000000000000000000612094565b905090565b61112b611a7b565b6111355f19611b1e565b565b60cb546001600160a01b03163314611162576040516320ba3ff960e21b815260040160405180910390fd5b61116a611cb0565b805f5b8181101561127e5760d15f85858481811061118a5761118a613320565b905060200201602081019061119f9190613005565b6001600160a01b0316815260208101919091526040015f205460ff1661127657600160d15f8686858181106111d6576111d6613320565b90506020020160208101906111eb9190613005565b6001600160a01b0316815260208101919091526040015f20805460ff19169115159190911790557f0c35b17d91c96eb2751cd456e1252f42a386e524ef9ff26ecc9950859fdc04fe84848381811061124557611245613320565b905060200201602081019061125a9190613005565b6040516001600160a01b03909116815260200160405180910390a15b60010161116d565b505061069c6001606555565b6112926120d1565b6111355f611b5b565b5f336001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016146112e55760405163f739589b60e01b815260040160405180910390fd5b6112ed611cb0565b6112f884848461212b565b90506109c06001606555565b5f806109bb8360d78361131f6107dd368b90038b018b6131ef565b81526020019081526020015f205f8781526020019081526020015f20611c7890919063ffffffff16565b5f61138360d7826113626107dd368890038801886131ef565b81526020019081526020015f205f8481526020019081526020015f20611eff565b90505b92915050565b6060611396611cb0565b5f6113d060d7826113af6107dd368990038901896131ef565b81526020019081526020015f205f8581526020019081526020015f20611d09565b80519091505f8167ffffffffffffffff8111156113ef576113ef612e4a565b604051908082528060200260200182016040528015611418578160200160208202803683370190505b5090505f5b8281101561146e57611449878786848151811061143c5761143c613320565b60200260200101516107c6565b82828151811061145b5761145b613320565b602090810291909101015260010161141d565b50925050506113866001606555565b6001600160a01b0381165f90815260ce60205260408120546060918291908167ffffffffffffffff8111156114b4576114b4612e4a565b6040519080825280602002602001820160405280156114dd578160200160208202803683370190505b5090505f5b8281101561156b576001600160a01b0386165f90815260cd6020908152604080832060ce909252822080549192918490811061152057611520613320565b5f9182526020808320909101546001600160a01b03168352820192909252604001902054825183908390811061155857611558613320565b60209081029190910101526001016114e2565b5060ce5f866001600160a01b03166001600160a01b031681526020019081526020015f2081818054806020026020016040519081016040528092919081815260200182805480156115e357602002820191905f5260205f20905b81546001600160a01b031681526001909101906020018083116115c5575b50505050509150935093505050915091565b604080517f4337f82d142e41f2a8c10547cd8c859bddb92262a61058e77842e24d9dea922460208201526001600160a01b03808916928201929092528187166060820152908516608082015260a0810184905260c0810183905260e081018290525f9061167b9061010001604051602081830303815290604052805190602001206121d9565b979650505050505050565b60cb546001600160a01b031633146116b1576040516320ba3ff960e21b815260040160405180910390fd5b6116b9611cb0565b805f5b8181101561127e5760d15f8585848181106116d9576116d9613320565b90506020020160208101906116ee9190613005565b6001600160a01b0316815260208101919091526040015f205460ff16156117c5575f60d15f86868581811061172557611725613320565b905060200201602081019061173a9190613005565b6001600160a01b0316815260208101919091526040015f20805460ff19169115159190911790557f4074413b4b443e4e58019f2855a8765113358c7c72e39509c6af45fc0f5ba03084848381811061179457611794613320565b90506020020160208101906117a99190613005565b6040516001600160a01b03909116815260200160405180910390a15b6001016116bc565b6117d56120d1565b6117dd611cb0565b6117e681611bac565b61107c6001606555565b60ce602052815f5260405f208181548110611809575f80fd5b5f918252602090912001546001600160a01b03169150829050565b6001600160a01b0381165f90815260ce602090815260409182902080548351818402810184019094528084526060939283018282801561188b57602002820191905f5260205f20905b81546001600160a01b0316815260019091019060200180831161186d575b50505050509050919050565b5f5f6118a281611d15565b6118aa611cb0565b6118b633868686611d92565b91506118c26001606555565b509392505050565b6118d26120d1565b6001600160a01b0381166119375760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610736565b61107c81611b5b565b60408051808201909152600a81526922b4b3b2b72630bcb2b960b11b6020909101525f7f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f7f71b625cfad44bac63b13dba07f2e1d6084ee04b6f8752101ece6126d584ee6ea6119ad61221f565b805160209182012060408051928301949094529281019190915260608101919091524660808201523060a082015260c00160405160208183030381529060405280519060200120905090565b611a01612294565b60985480198219811614611a285760405163c61dca5d60e01b815260040160405180910390fd5b609882905560405182815233907f3582d1828e26bf56bd801502bc021ac0bc8afb57c826e4986b45593c8fad389c9060200160405180910390a25050565b5f5f611a7360d484611c78565b949350505050565b60405163237dfb4760e11b81523360048201527f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316906346fbf68e90602401602060405180830381865afa158015611add573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611b019190613361565b61113557604051631d77d47760e21b815260040160405180910390fd5b609881905560405181815233907fab40a374bc51de372200a8bc981af8c9ecdc08dfdaef0bb6e09f88f3c616ef3d9060200160405180910390a250565b603380546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0905f90a35050565b60cb54604080516001600160a01b03928316815291831660208301527f4264275e593955ff9d6146a51a4525f6ddace2e81db9391abcc9d1ca48047d29910160405180910390a160cb80546001600160a01b0319166001600160a01b0392909216919091179055565b5f815f0151826020015163ffffffff16604051602001611c6092919060609290921b6bffffffffffffffffffffffff1916825260a01b6001600160a01b031916601482015260200190565b60405160208183030381529060405261138690613380565b5f808080611c8f866001600160a01b038716612345565b9097909650945050505050565b5f611383836001600160a01b03841661237d565b600260655403611d025760405162461bcd60e51b815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c006044820152606401610736565b6002606555565b60605f6109c083612399565b609854600160ff83161b9081160361107c5760405163840a48d560e01b815260040160405180910390fd5b42811015611d6157604051630819bdcd60e01b815260040160405180910390fd5b611d756001600160a01b03851684846123a4565b6107c057604051638baa579f60e01b815260040160405180910390fd5b6001600160a01b0383165f90815260d16020526040812054849060ff16611dcc57604051632efd965160e11b815260040160405180910390fd5b611de16001600160a01b0385163387866123f8565b6040516311f9fbc960e21b81526001600160a01b038581166004830152602482018590528616906347e7ef24906044016020604051808303815f875af1158015611e2d573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611e5191906132d7565b91505f5f611e60888886611f2c565b604051631e328e7960e11b81526001600160a01b038b811660048301528a8116602483015260448201849052606482018390529294509092507f000000000000000000000000000000000000000000000000000000000000000090911690633c651cf2906084015f604051808303815f87803b158015611ede575f5ffd5b505af1158015611ef0573d5f5f3e3d5ffd5b50505050505050949350505050565b5f61138682612450565b5f808080611c8f868661245a565b5f611a73846001600160a01b03851684612483565b5f806001600160a01b038516611f55576040516316f2ccc960e01b815260040160405180910390fd5b825f03611f75576040516342061b2560e11b815260040160405180910390fd5b6001600160a01b038086165f90815260cd602090815260408083209388168352929052908120549081900361201b576001600160a01b0386165f90815260ce602090815260409091205410611fdd576040516301a1443960e31b815260040160405180910390fd5b6001600160a01b038681165f90815260ce602090815260408220805460018101825590835291200180546001600160a01b0319169187169190911790555b61202584826133b7565b6001600160a01b038088165f90815260cd60209081526040808320938a16835292905281902091909155517f5548c837ab068cf56a2c2479df0882a4922fd203edb7517321831d95078c5f6290612081908890889088906132b3565b60405180910390a1959294509192505050565b60605f6120a08361249f565b6040805160208082528183019092529192505f91906020820181803683375050509182525060208101929092525090565b6033546001600160a01b031633146111355760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610736565b5f815f0361214c576040516342061b2560e11b815260040160405180910390fd5b6001600160a01b038085165f90815260cd60209081526040808320938716835292905220548083111561219257604051634b18b19360e01b815260040160405180910390fd5b61219c83826133ca565b6001600160a01b038087165f90815260cd602090815260408083209389168352929052908120829055909150819003611a7357611a7385856124c6565b5f6121e2611940565b60405161190160f01b6020820152602281019190915260428101839052606201604051602081830303815290604052805190602001209050919050565b60605f61224b7f0000000000000000000000000000000000000000000000000000000000000000612094565b9050805f8151811061225f5761225f613320565b016020908101516040516001600160f81b03199091169181019190915260210160405160208183030381529060405291505090565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663eab66d7a6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156122f0573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906123149190613298565b6001600160a01b0316336001600160a01b0316146111355760405163794821ff60e01b815260040160405180910390fd5b5f818152600283016020526040812054819080612372576123668585612644565b92505f9150610c179050565b600192509050610c17565b5f8181526002830160205260408120819055611383838361264f565b60606113868261265a565b5f5f5f6123b18585612666565b90925090505f8160048111156123c9576123c96133dd565b1480156123e75750856001600160a01b0316826001600160a01b0316145b806109bb57506109bb8686866126a5565b6107c0846323b872dd60e01b858585604051602401612419939291906132b3565b60408051601f198184030181529190526020810180516001600160e01b03166001600160e01b03199093169290921790915261278c565b5f61138682612864565b5f8080612467858561286d565b5f81815260029690960160205260409095205494959350505050565b5f8281526002840160205260408120829055611a738484612878565b5f60ff8216601f81111561138657604051632cd44ac360e21b815260040160405180910390fd5b6001600160a01b0382165f90815260ce6020526040812054905b818110156125d8576001600160a01b038481165f90815260ce602052604090208054918516918390811061251657612516613320565b5f918252602090912001546001600160a01b0316036125d0576001600160a01b0384165f90815260ce602052604090208054612554906001906133ca565b8154811061256457612564613320565b5f9182526020808320909101546001600160a01b03878116845260ce90925260409092208054919092169190839081106125a0576125a0613320565b905f5260205f20015f6101000a8154816001600160a01b0302191690836001600160a01b031602179055506125d8565b6001016124e0565b8181036125f857604051632df15a4160e11b815260040160405180910390fd5b6001600160a01b0384165f90815260ce6020526040902080548061261e5761261e6133f1565b5f8281526020902081015f1990810180546001600160a01b031916905501905550505050565b5f6113838383612883565b5f611383838361289a565b60605f6109c08361297d565b5f5f825160410361269a576020830151604084015160608501515f1a61268e878285856129d5565b94509450505050610c17565b505f90506002610c17565b5f5f5f856001600160a01b0316631626ba7e60e01b86866040516024016126cd929190613405565b60408051601f198184030181529181526020820180516001600160e01b03166001600160e01b031990941693909317909252905161270b919061341d565b5f60405180830381855afa9150503d805f8114612743576040519150601f19603f3d011682016040523d82523d5f602084013e612748565b606091505b509150915081801561275c57506020815110155b80156109bb57508051630b135d3f60e11b9061278190830160209081019084016132d7565b149695505050505050565b5f6127e0826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c6564815250856001600160a01b0316612a929092919063ffffffff16565b905080515f14806128005750808060200190518101906128009190613361565b61285f5760405162461bcd60e51b815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e6044820152691bdd081cdd58d8d9595960b21b6064820152608401610736565b505050565b5f611386825490565b5f6113838383612aa0565b5f6113838383612ac6565b5f8181526001830160205260408120541515611383565b5f8181526001830160205260408120548015612974575f6128bc6001836133ca565b85549091505f906128cf906001906133ca565b905081811461292e575f865f0182815481106128ed576128ed613320565b905f5260205f200154905080875f01848154811061290d5761290d613320565b5f918252602080832090910192909255918252600188019052604090208390555b855486908061293f5761293f6133f1565b600190038181905f5260205f20015f90559055856001015f8681526020019081526020015f205f905560019350505050611386565b5f915050611386565b6060815f0180548060200260200160405190810160405280929190818152602001828054801561188b57602002820191905f5260205f20905b8154815260200190600101908083116129b65750505050509050919050565b5f807f7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a0831115612a0a57505f90506003612a89565b604080515f8082526020820180845289905260ff881692820192909252606081018690526080810185905260019060a0016020604051602081039080840390855afa158015612a5b573d5f5f3e3d5ffd5b5050604051601f1901519150506001600160a01b038116612a83575f60019250925050612a89565b91505f90505b94509492505050565b6060611a7384845f85612b12565b5f825f018281548110612ab557612ab5613320565b905f5260205f200154905092915050565b5f818152600183016020526040812054612b0b57508154600181810184555f848152602080822090930184905584548482528286019093526040902091909155611386565b505f611386565b606082471015612b735760405162461bcd60e51b815260206004820152602660248201527f416464726573733a20696e73756666696369656e742062616c616e636520666f6044820152651c8818d85b1b60d21b6064820152608401610736565b5f5f866001600160a01b03168587604051612b8e919061341d565b5f6040518083038185875af1925050503d805f8114612bc8576040519150601f19603f3d011682016040523d82523d5f602084013e612bcd565b606091505b509150915061167b8783838760608315612c475782515f03612c40576001600160a01b0385163b612c405760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e74726163740000006044820152606401610736565b5081611a73565b611a738383815115612c5c5781518083602001fd5b8060405162461bcd60e51b8152600401610736919061304e565b5f60208284031215612c86575f5ffd5b5035919050565b6001600160a01b038116811461107c575f5ffd5b5f5f5f60608486031215612cb3575f5ffd5b8335612cbe81612c8d565b92506020840135612cce81612c8d565b929592945050506040919091013590565b5f60408284031215612cef575f5ffd5b50919050565b5f5f5f60808486031215612d07575f5ffd5b612d118585612cdf565b9250604084013591506060840135612d2881612c8d565b809150509250925092565b5f5f5f5f60808587031215612d46575f5ffd5b8435612d5181612c8d565b93506020850135612d6181612c8d565b92506040850135612d7181612c8d565b9396929550929360600135925050565b5f5f60608385031215612d92575f5ffd5b612d9c8484612cdf565b946040939093013593505050565b5f8151808452602084019350602083015f5b82811015612de35781516001600160a01b0316865260209586019590910190600101612dbc565b5093949350505050565b5f8151808452602084019350602083015f5b82811015612de3578151865260209586019590910190600101612dff565b604081525f612e2f6040830185612daa565b8281036020840152612e418185612ded565b95945050505050565b634e487b7160e01b5f52604160045260245ffd5b604051601f8201601f1916810167ffffffffffffffff81118282101715612e8757612e87612e4a565b604052919050565b5f5f5f5f5f5f60c08789031215612ea4575f5ffd5b8635612eaf81612c8d565b95506020870135612ebf81612c8d565b9450604087013593506060870135612ed681612c8d565b92506080870135915060a087013567ffffffffffffffff811115612ef8575f5ffd5b8701601f81018913612f08575f5ffd5b803567ffffffffffffffff811115612f2257612f22612e4a565b612f35601f8201601f1916602001612e5e565b8181528a6020838501011115612f49575f5ffd5b816020840160208301375f602083830101528093505050509295509295509295565b604080825283519082018190525f9060208501906060840190835b81811015612fad5783516001600160a01b0316835260209384019390920191600101612f86565b505083810360208501526109bb8186612ded565b5f5f5f5f60a08587031215612fd4575f5ffd5b612fde8686612cdf565b9350604085013592506060850135612ff581612c8d565b9396929550929360800135925050565b5f60208284031215613015575f5ffd5b81356109c081612c8d565b5f81518084528060208401602086015e5f602082860101526020601f19601f83011685010191505092915050565b602081525f6113836020830184613020565b5f60208284031215613070575f5ffd5b813560ff811681146109c0575f5ffd5b5f5f60208385031215613091575f5ffd5b823567ffffffffffffffff8111156130a7575f5ffd5b8301601f810185136130b7575f5ffd5b803567ffffffffffffffff8111156130cd575f5ffd5b8560208260051b84010111156130e1575f5ffd5b6020919091019590945092505050565b602081525f6113836020830184612ded565b5f5f5f5f5f5f60c08789031215613118575f5ffd5b863561312381612c8d565b9550602087013561313381612c8d565b9450604087013561314381612c8d565b959894975094956060810135955060808101359460a0909101359350915050565b5f5f60408385031215613175575f5ffd5b823561318081612c8d565b946020939093013593505050565b602081525f6113836020830184612daa565b5f5f604083850312156131b1575f5ffd5b82356131bc81612c8d565b915060208301356131cc81612c8d565b809150509250929050565b803563ffffffff811681146131ea575f5ffd5b919050565b5f6040828403128015613200575f5ffd5b506040805190810167ffffffffffffffff8111828210171561322457613224612e4a565b604052823561323281612c8d565b8152613240602084016131d7565b60208201529392505050565b803561325781612c8d565b6001600160a01b0316825263ffffffff613273602083016131d7565b1660208301525050565b6060810161328b828561324c565b8260408301529392505050565b5f602082840312156132a8575f5ffd5b81516109c081612c8d565b6001600160a01b039384168152919092166020820152604081019190915260600190565b5f602082840312156132e7575f5ffd5b5051919050565b60a081016132fc828761324c565b60408201949094526001600160a01b03929092166060830152608090910152919050565b634e487b7160e01b5f52603260045260245ffd5b60808101613342828661324c565b60408201939093526001600160a01b0391909116606090910152919050565b5f60208284031215613371575f5ffd5b815180151581146109c0575f5ffd5b80516020808301519190811015612cef575f1960209190910360031b1b16919050565b634e487b7160e01b5f52601160045260245ffd5b80820180821115611386576113866133a3565b81810381811115611386576113866133a3565b634e487b7160e01b5f52602160045260245ffd5b634e487b7160e01b5f52603160045260245ffd5b828152604060208201525f611a736040830184613020565b5f82518060208501845e5f92019182525091905056fea2646970667358221220d1c55ae082af97f481669fc151e33e359a4326060797716d91aa097b2f2810ce64736f6c634300081b0033", + Bin: "0x610100604052348015610010575f5ffd5b506040516137e33803806137e383398101604081905261002f916101bc565b80808585856001600160a01b03811661005b576040516339b190bb60e11b815260040160405180910390fd5b6001600160a01b0390811660805291821660a0521660c05261007c81610093565b60e0525061008a90506100d9565b50505050610301565b5f5f829050601f815111156100c6578260405163305a27a960e01b81526004016100bd91906102a6565b60405180910390fd5b80516100d1826102db565b179392505050565b5f54610100900460ff16156101405760405162461bcd60e51b815260206004820152602760248201527f496e697469616c697a61626c653a20636f6e747261637420697320696e697469604482015266616c697a696e6760c81b60648201526084016100bd565b5f5460ff9081161461018f575f805460ff191660ff9081179091556040519081527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b565b6001600160a01b03811681146101a5575f5ffd5b50565b634e487b7160e01b5f52604160045260245ffd5b5f5f5f5f608085870312156101cf575f5ffd5b84516101da81610191565b60208601519094506101eb81610191565b60408601519093506101fc81610191565b60608601519092506001600160401b03811115610217575f5ffd5b8501601f81018713610227575f5ffd5b80516001600160401b03811115610240576102406101a8565b604051601f8201601f19908116603f011681016001600160401b038111828210171561026e5761026e6101a8565b604052818152828201602001891015610285575f5ffd5b8160208401602083015e5f6020838301015280935050505092959194509250565b602081525f82518060208401528060208501604085015e5f604082850101526040601f19601f83011684010191505092915050565b805160208083015191908110156102fb575f198160200360031b1b821691505b50919050565b60805160a05160c05160e05161346961037a5f395f81816110fa015261222701525f81816103ce015281816108310152610e8401525f81816105bc015281816109d201528181610dcb0152818161108c015281816112a70152611e9b01525f81816104aa01528181611a90015261229601526134695ff3fe608060405234801561000f575f5ffd5b5060043610610255575f3560e01c80637ecebe0011610140578063c6656702116100bf578063f2fde38b11610084578063f2fde38b146105f1578063f3b4a00014610604578063f698da251461060e578063fabc1cbc14610616578063fd98042314610629578063fe243a171461063c575f5ffd5b8063c665670214610571578063cbc2bd6214610584578063de44acb614610597578063df5cf723146105b7578063e7a050aa146105de575f5ffd5b80638da5cb5b116101055780638da5cb5b1461051457806394f649dd14610525578063967fc0d2146105385780639ac01d611461054b578063b5d8b5b81461055e575f5ffd5b80637ecebe0014610473578063829fca7314610492578063886f1195146104a557806388c10299146104cc5780638b8aac3c146104ec575f5ffd5b806350ff7225116101d75780635c975abb1161019c5780635c975abb146104085780635de08ff214610410578063663c1de414610423578063715018a614610445578063724af4231461044d57806376fb162b14610460575f5ffd5b806350ff72251461035157806354fd4d5014610379578063595c6a671461038e5780635ac86ab7146103965780635b84087f146103c9575f5ffd5b806332e89ace1161021d57806332e89ace146102db57806336a8c500146102ee5780633fb99ca51461030457806348825e94146103175780634b6d5d6e1461033e575f5ffd5b8063136439dd146102595780631794bb3c1461026e5780632d44def6146102815780632eae418c146102a757806331f8fb4c146102ba575b5f5ffd5b61026c610267366004612c76565b610666565b005b61026c61027c366004612ca1565b6106a0565b61029461028f366004612cf5565b6107c6565b6040519081526020015b60405180910390f35b61026c6102b5366004612d33565b6109c7565b6102cd6102c8366004612d81565b610a93565b60405161029e929190612e1d565b6102946102e9366004612e8f565b610c1e565b6102f6610ca3565b60405161029e929190612f6b565b61026c610312366004612fc1565b610dc0565b6102947f4337f82d142e41f2a8c10547cd8c859bddb92262a61058e77842e24d9dea922481565b61026c61034c366004613005565b610f32565b61036461035f366004612ca1565b61107f565b6040805192835260208301919091520161029e565b6103816110f3565b60405161029e919061304e565b61026c611123565b6103b96103a4366004613060565b609854600160ff9092169190911b9081161490565b604051901515815260200161029e565b6103f07f000000000000000000000000000000000000000000000000000000000000000081565b6040516001600160a01b03909116815260200161029e565b609854610294565b61026c61041e366004613080565b611137565b6103b9610431366004613005565b60d16020525f908152604090205460ff1681565b61026c61128a565b61029461045b366004612ca1565b61129b565b61029461046e366004612cf5565b611304565b610294610481366004613005565b60ca6020525f908152604090205481565b6102946104a0366004612d81565b611349565b6103f07f000000000000000000000000000000000000000000000000000000000000000081565b6104df6104da366004612d81565b61138c565b60405161029e91906130f1565b6102946104fa366004613005565b6001600160a01b03165f90815260ce602052604090205490565b6033546001600160a01b03166103f0565b6102cd610533366004613005565b61147d565b60cb546103f0906001600160a01b031681565b610294610559366004613103565b6115f5565b61026c61056c366004613080565b611686565b61026c61057f366004613005565b6117cd565b6103f0610592366004613164565b6117f0565b6105aa6105a5366004613005565b611824565b60405161029e919061318e565b6103f07f000000000000000000000000000000000000000000000000000000000000000081565b6102946105ec366004612ca1565b611897565b61026c6105ff366004613005565b6118ca565b6103f0620e16e481565b610294611940565b61026c610624366004612c76565b6119f9565b610294610637366004613005565b611a66565b61029461064a3660046131a0565b60cd60209081525f928352604080842090915290825290205481565b61066e611a7b565b60985481811681146106935760405163c61dca5d60e01b815260040160405180910390fd5b61069c82611b1e565b5050565b5f54610100900460ff16158080156106be57505f54600160ff909116105b806106d75750303b1580156106d757505f5460ff166001145b61073f5760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201526d191e481a5b9a5d1a585b1a5e995960921b60648201526084015b60405180910390fd5b5f805460ff191660011790558015610760575f805461ff0019166101001790555b61076982611b1e565b61077284611b5b565b61077b83611bac565b80156107c0575f805461ff0019169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b50505050565b5f8060d7816107e26107dd368990038901896131ef565b611c15565b815260208082019290925260409081015f9081208782529092528120915061080a8285611c78565b915061081890508285611c9c565b505f81156109bb57846001600160a01b031663d9caed127f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316633453b2348a8a6040518363ffffffff1660e01b815260040161087d92919061327d565b602060405180830381865afa158015610898573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906108bc9190613298565b876001600160a01b0316632495a5996040518163ffffffff1660e01b8152600401602060405180830381865afa1580156108f8573d5f5f3e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061091c9190613298565b856040518463ffffffff1660e01b815260040161093b939291906132b3565b6020604051808303815f875af1158015610957573d5f5f3e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061097b91906132d7565b90507fe6413aa0c789e437b0a06bf64b20926584f066c79a2d8b80a759c85472f7b0af878787856040516109b294939291906132ee565b60405180910390a15b925050505b9392505050565b336001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001614610a105760405163f739589b60e01b815260040160405180910390fd5b610a18611cb0565b604051636ce5768960e11b81526001600160a01b0384169063d9caed1290610a48908790869086906004016132b3565b6020604051808303815f875af1158015610a64573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610a8891906132d7565b506107c06001606555565b6060805f60d781610aac6107dd368990038901896131ef565b81526020019081526020015f205f8581526020019081526020015f2090505f610ad482611d09565b90505f815167ffffffffffffffff811115610af157610af1612e4a565b604051908082528060200260200182016040528015610b1a578160200160208202803683370190505b5090505f825167ffffffffffffffff811115610b3857610b38612e4a565b604051908082528060200260200182016040528015610b61578160200160208202803683370190505b5090505f5b8351811015610c0e57838181518110610b8157610b81613320565b6020026020010151838281518110610b9b57610b9b613320565b60200260200101906001600160a01b031690816001600160a01b031681525050610be7848281518110610bd057610bd0613320565b602002602001015186611c7890919063ffffffff16565b9050828281518110610bfb57610bfb613320565b6020908102919091010152600101610b66565b50909450925050505b9250929050565b5f5f610c2981611d15565b610c31611cb0565b6001600160a01b0385165f90815260ca6020526040902054610c6286610c5b818c8c8c878c6115f5565b8688611d40565b6001600160a01b0386165f90815260ca60205260409020600182019055610c8b868a8a8a611d92565b925050610c986001606555565b509695505050505050565b6060805f610cb160d4611eff565b90505f8167ffffffffffffffff811115610ccd57610ccd612e4a565b604051908082528060200260200182016040528015610cf6578160200160208202803683370190505b5090505f8267ffffffffffffffff811115610d1357610d13612e4a565b604051908082528060200260200182016040528015610d3c578160200160208202803683370190505b5090505f5b83811015610db5575f5f610d5660d484611f09565b9150915081858481518110610d6d57610d6d613320565b60200260200101906001600160a01b031690816001600160a01b03168152505080848481518110610da057610da0613320565b60209081029190910101525050600101610d41565b509094909350915050565b336001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001614610e095760405163f739589b60e01b815260040160405180910390fd5b610e11611cb0565b5f60d781610e276107dd368990038901896131ef565b815260208082019290925260409081015f90812087825290925290209050610e50818484611f17565b610e6d5760405163ca354fa360e01b815260040160405180910390fd5b604051637a96761160e01b81526001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001690637a96761190610ebd90889088908890600401613334565b5f604051808303815f87803b158015610ed4575f5ffd5b505af1158015610ee6573d5f5f3e3d5ffd5b505050507f5f5209798bbac45a16d2dc3bc67319fab26ee00153916d6f07b69f8a134a1e8b85858585604051610f1f94939291906132ee565b60405180910390a1506107c06001606555565b610f3a611cb0565b5f610f4660d483611c78565b915050610f5460d483611c9c565b50604080516001600160a01b0384168152602081018390527fd9d082c3ec4f3a3ffa55c324939a06407f5fbcb87d5e0ce3b9508c92c84ed839910160405180910390a1801561107157816001600160a01b031663d9caed12620e16e4846001600160a01b0316632495a5996040518163ffffffff1660e01b8152600401602060405180830381865afa158015610fec573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906110109190613298565b846040518463ffffffff1660e01b815260040161102f939291906132b3565b6020604051808303815f875af115801561104b573d5f5f3e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061106f91906132d7565b505b5061107c6001606555565b50565b5f80336001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016146110ca5760405163f739589b60e01b815260040160405180910390fd5b6110d2611cb0565b6110dd858585611f2c565b915091506110eb6001606555565b935093915050565b606061111e7f0000000000000000000000000000000000000000000000000000000000000000612094565b905090565b61112b611a7b565b6111355f19611b1e565b565b60cb546001600160a01b03163314611162576040516320ba3ff960e21b815260040160405180910390fd5b61116a611cb0565b805f5b8181101561127e5760d15f85858481811061118a5761118a613320565b905060200201602081019061119f9190613005565b6001600160a01b0316815260208101919091526040015f205460ff1661127657600160d15f8686858181106111d6576111d6613320565b90506020020160208101906111eb9190613005565b6001600160a01b0316815260208101919091526040015f20805460ff19169115159190911790557f0c35b17d91c96eb2751cd456e1252f42a386e524ef9ff26ecc9950859fdc04fe84848381811061124557611245613320565b905060200201602081019061125a9190613005565b6040516001600160a01b03909116815260200160405180910390a15b60010161116d565b505061069c6001606555565b6112926120d1565b6111355f611b5b565b5f336001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016146112e55760405163f739589b60e01b815260040160405180910390fd5b6112ed611cb0565b6112f884848461212b565b90506109c06001606555565b5f806109bb8360d78361131f6107dd368b90038b018b6131ef565b81526020019081526020015f205f8781526020019081526020015f20611c7890919063ffffffff16565b5f61138360d7826113626107dd368890038801886131ef565b81526020019081526020015f205f8481526020019081526020015f20611eff565b90505b92915050565b6060611396611cb0565b5f6113d060d7826113af6107dd368990038901896131ef565b81526020019081526020015f205f8581526020019081526020015f20611d09565b80519091505f8167ffffffffffffffff8111156113ef576113ef612e4a565b604051908082528060200260200182016040528015611418578160200160208202803683370190505b5090505f5b8281101561146e57611449878786848151811061143c5761143c613320565b60200260200101516107c6565b82828151811061145b5761145b613320565b602090810291909101015260010161141d565b50925050506113866001606555565b6001600160a01b0381165f90815260ce60205260408120546060918291908167ffffffffffffffff8111156114b4576114b4612e4a565b6040519080825280602002602001820160405280156114dd578160200160208202803683370190505b5090505f5b8281101561156b576001600160a01b0386165f90815260cd6020908152604080832060ce909252822080549192918490811061152057611520613320565b5f9182526020808320909101546001600160a01b03168352820192909252604001902054825183908390811061155857611558613320565b60209081029190910101526001016114e2565b5060ce5f866001600160a01b03166001600160a01b031681526020019081526020015f2081818054806020026020016040519081016040528092919081815260200182805480156115e357602002820191905f5260205f20905b81546001600160a01b031681526001909101906020018083116115c5575b50505050509150935093505050915091565b604080517f4337f82d142e41f2a8c10547cd8c859bddb92262a61058e77842e24d9dea922460208201526001600160a01b03808916928201929092528187166060820152908516608082015260a0810184905260c0810183905260e081018290525f9061167b9061010001604051602081830303815290604052805190602001206121d9565b979650505050505050565b60cb546001600160a01b031633146116b1576040516320ba3ff960e21b815260040160405180910390fd5b6116b9611cb0565b805f5b8181101561127e5760d15f8585848181106116d9576116d9613320565b90506020020160208101906116ee9190613005565b6001600160a01b0316815260208101919091526040015f205460ff16156117c5575f60d15f86868581811061172557611725613320565b905060200201602081019061173a9190613005565b6001600160a01b0316815260208101919091526040015f20805460ff19169115159190911790557f4074413b4b443e4e58019f2855a8765113358c7c72e39509c6af45fc0f5ba03084848381811061179457611794613320565b90506020020160208101906117a99190613005565b6040516001600160a01b03909116815260200160405180910390a15b6001016116bc565b6117d56120d1565b6117dd611cb0565b6117e681611bac565b61107c6001606555565b60ce602052815f5260405f208181548110611809575f80fd5b5f918252602090912001546001600160a01b03169150829050565b6001600160a01b0381165f90815260ce602090815260409182902080548351818402810184019094528084526060939283018282801561188b57602002820191905f5260205f20905b81546001600160a01b0316815260019091019060200180831161186d575b50505050509050919050565b5f5f6118a281611d15565b6118aa611cb0565b6118b633868686611d92565b91506118c26001606555565b509392505050565b6118d26120d1565b6001600160a01b0381166119375760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610736565b61107c81611b5b565b60408051808201909152600a81526922b4b3b2b72630bcb2b960b11b6020909101525f7f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f7f71b625cfad44bac63b13dba07f2e1d6084ee04b6f8752101ece6126d584ee6ea6119ad61221f565b805160209182012060408051928301949094529281019190915260608101919091524660808201523060a082015260c00160405160208183030381529060405280519060200120905090565b611a01612294565b60985480198219811614611a285760405163c61dca5d60e01b815260040160405180910390fd5b609882905560405182815233907f3582d1828e26bf56bd801502bc021ac0bc8afb57c826e4986b45593c8fad389c9060200160405180910390a25050565b5f5f611a7360d484611c78565b949350505050565b60405163237dfb4760e11b81523360048201527f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316906346fbf68e90602401602060405180830381865afa158015611add573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611b019190613361565b61113557604051631d77d47760e21b815260040160405180910390fd5b609881905560405181815233907fab40a374bc51de372200a8bc981af8c9ecdc08dfdaef0bb6e09f88f3c616ef3d9060200160405180910390a250565b603380546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0905f90a35050565b60cb54604080516001600160a01b03928316815291831660208301527f4264275e593955ff9d6146a51a4525f6ddace2e81db9391abcc9d1ca48047d29910160405180910390a160cb80546001600160a01b0319166001600160a01b0392909216919091179055565b5f815f0151826020015163ffffffff16604051602001611c6092919060609290921b6bffffffffffffffffffffffff1916825260a01b6001600160a01b031916601482015260200190565b60405160208183030381529060405261138690613380565b5f808080611c8f866001600160a01b038716612345565b9097909650945050505050565b5f611383836001600160a01b03841661237d565b600260655403611d025760405162461bcd60e51b815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c006044820152606401610736565b6002606555565b60605f6109c083612399565b609854600160ff83161b9081160361107c5760405163840a48d560e01b815260040160405180910390fd5b42811015611d6157604051630819bdcd60e01b815260040160405180910390fd5b611d756001600160a01b03851684846123a4565b6107c057604051638baa579f60e01b815260040160405180910390fd5b6001600160a01b0383165f90815260d16020526040812054849060ff16611dcc57604051632efd965160e11b815260040160405180910390fd5b611de16001600160a01b0385163387866123f8565b6040516311f9fbc960e21b81526001600160a01b038581166004830152602482018590528616906347e7ef24906044016020604051808303815f875af1158015611e2d573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611e5191906132d7565b91505f5f611e60888886611f2c565b604051631e328e7960e11b81526001600160a01b038b811660048301528a8116602483015260448201849052606482018390529294509092507f000000000000000000000000000000000000000000000000000000000000000090911690633c651cf2906084015f604051808303815f87803b158015611ede575f5ffd5b505af1158015611ef0573d5f5f3e3d5ffd5b50505050505050949350505050565b5f61138682612450565b5f808080611c8f868661245a565b5f611a73846001600160a01b03851684612483565b5f806001600160a01b038516611f55576040516316f2ccc960e01b815260040160405180910390fd5b825f03611f75576040516342061b2560e11b815260040160405180910390fd5b6001600160a01b038086165f90815260cd602090815260408083209388168352929052908120549081900361201b576001600160a01b0386165f90815260ce602090815260409091205410611fdd576040516301a1443960e31b815260040160405180910390fd5b6001600160a01b038681165f90815260ce602090815260408220805460018101825590835291200180546001600160a01b0319169187169190911790555b61202584826133b7565b6001600160a01b038088165f90815260cd60209081526040808320938a16835292905281902091909155517f5548c837ab068cf56a2c2479df0882a4922fd203edb7517321831d95078c5f6290612081908890889088906132b3565b60405180910390a1959294509192505050565b60605f6120a08361249f565b6040805160208082528183019092529192505f91906020820181803683375050509182525060208101929092525090565b6033546001600160a01b031633146111355760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610736565b5f815f0361214c576040516342061b2560e11b815260040160405180910390fd5b6001600160a01b038085165f90815260cd60209081526040808320938716835292905220548083111561219257604051634b18b19360e01b815260040160405180910390fd5b61219c83826133ca565b6001600160a01b038087165f90815260cd602090815260408083209389168352929052908120829055909150819003611a7357611a7385856124c6565b5f6121e2611940565b60405161190160f01b6020820152602281019190915260428101839052606201604051602081830303815290604052805190602001209050919050565b60605f61224b7f0000000000000000000000000000000000000000000000000000000000000000612094565b9050805f8151811061225f5761225f613320565b016020908101516040516001600160f81b03199091169181019190915260210160405160208183030381529060405291505090565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663eab66d7a6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156122f0573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906123149190613298565b6001600160a01b0316336001600160a01b0316146111355760405163794821ff60e01b815260040160405180910390fd5b5f818152600283016020526040812054819080612372576123668585612644565b92505f9150610c179050565b600192509050610c17565b5f8181526002830160205260408120819055611383838361264f565b60606113868261265a565b5f5f5f6123b18585612666565b90925090505f8160048111156123c9576123c96133dd565b1480156123e75750856001600160a01b0316826001600160a01b0316145b806109bb57506109bb8686866126a5565b6107c0846323b872dd60e01b858585604051602401612419939291906132b3565b60408051601f198184030181529190526020810180516001600160e01b03166001600160e01b03199093169290921790915261278c565b5f61138682612864565b5f8080612467858561286d565b5f81815260029690960160205260409095205494959350505050565b5f8281526002840160205260408120829055611a738484612878565b5f60ff8216601f81111561138657604051632cd44ac360e21b815260040160405180910390fd5b6001600160a01b0382165f90815260ce6020526040812054905b818110156125d8576001600160a01b038481165f90815260ce602052604090208054918516918390811061251657612516613320565b5f918252602090912001546001600160a01b0316036125d0576001600160a01b0384165f90815260ce602052604090208054612554906001906133ca565b8154811061256457612564613320565b5f9182526020808320909101546001600160a01b03878116845260ce90925260409092208054919092169190839081106125a0576125a0613320565b905f5260205f20015f6101000a8154816001600160a01b0302191690836001600160a01b031602179055506125d8565b6001016124e0565b8181036125f857604051632df15a4160e11b815260040160405180910390fd5b6001600160a01b0384165f90815260ce6020526040902080548061261e5761261e6133f1565b5f8281526020902081015f1990810180546001600160a01b031916905501905550505050565b5f6113838383612883565b5f611383838361289a565b60605f6109c08361297d565b5f5f825160410361269a576020830151604084015160608501515f1a61268e878285856129d5565b94509450505050610c17565b505f90506002610c17565b5f5f5f856001600160a01b0316631626ba7e60e01b86866040516024016126cd929190613405565b60408051601f198184030181529181526020820180516001600160e01b03166001600160e01b031990941693909317909252905161270b919061341d565b5f60405180830381855afa9150503d805f8114612743576040519150601f19603f3d011682016040523d82523d5f602084013e612748565b606091505b509150915081801561275c57506020815110155b80156109bb57508051630b135d3f60e11b9061278190830160209081019084016132d7565b149695505050505050565b5f6127e0826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c6564815250856001600160a01b0316612a929092919063ffffffff16565b905080515f14806128005750808060200190518101906128009190613361565b61285f5760405162461bcd60e51b815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e6044820152691bdd081cdd58d8d9595960b21b6064820152608401610736565b505050565b5f611386825490565b5f6113838383612aa0565b5f6113838383612ac6565b5f8181526001830160205260408120541515611383565b5f8181526001830160205260408120548015612974575f6128bc6001836133ca565b85549091505f906128cf906001906133ca565b905081811461292e575f865f0182815481106128ed576128ed613320565b905f5260205f200154905080875f01848154811061290d5761290d613320565b5f918252602080832090910192909255918252600188019052604090208390555b855486908061293f5761293f6133f1565b600190038181905f5260205f20015f90559055856001015f8681526020019081526020015f205f905560019350505050611386565b5f915050611386565b6060815f0180548060200260200160405190810160405280929190818152602001828054801561188b57602002820191905f5260205f20905b8154815260200190600101908083116129b65750505050509050919050565b5f807f7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a0831115612a0a57505f90506003612a89565b604080515f8082526020820180845289905260ff881692820192909252606081018690526080810185905260019060a0016020604051602081039080840390855afa158015612a5b573d5f5f3e3d5ffd5b5050604051601f1901519150506001600160a01b038116612a83575f60019250925050612a89565b91505f90505b94509492505050565b6060611a7384845f85612b12565b5f825f018281548110612ab557612ab5613320565b905f5260205f200154905092915050565b5f818152600183016020526040812054612b0b57508154600181810184555f848152602080822090930184905584548482528286019093526040902091909155611386565b505f611386565b606082471015612b735760405162461bcd60e51b815260206004820152602660248201527f416464726573733a20696e73756666696369656e742062616c616e636520666f6044820152651c8818d85b1b60d21b6064820152608401610736565b5f5f866001600160a01b03168587604051612b8e919061341d565b5f6040518083038185875af1925050503d805f8114612bc8576040519150601f19603f3d011682016040523d82523d5f602084013e612bcd565b606091505b509150915061167b8783838760608315612c475782515f03612c40576001600160a01b0385163b612c405760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e74726163740000006044820152606401610736565b5081611a73565b611a738383815115612c5c5781518083602001fd5b8060405162461bcd60e51b8152600401610736919061304e565b5f60208284031215612c86575f5ffd5b5035919050565b6001600160a01b038116811461107c575f5ffd5b5f5f5f60608486031215612cb3575f5ffd5b8335612cbe81612c8d565b92506020840135612cce81612c8d565b929592945050506040919091013590565b5f60408284031215612cef575f5ffd5b50919050565b5f5f5f60808486031215612d07575f5ffd5b612d118585612cdf565b9250604084013591506060840135612d2881612c8d565b809150509250925092565b5f5f5f5f60808587031215612d46575f5ffd5b8435612d5181612c8d565b93506020850135612d6181612c8d565b92506040850135612d7181612c8d565b9396929550929360600135925050565b5f5f60608385031215612d92575f5ffd5b612d9c8484612cdf565b946040939093013593505050565b5f8151808452602084019350602083015f5b82811015612de35781516001600160a01b0316865260209586019590910190600101612dbc565b5093949350505050565b5f8151808452602084019350602083015f5b82811015612de3578151865260209586019590910190600101612dff565b604081525f612e2f6040830185612daa565b8281036020840152612e418185612ded565b95945050505050565b634e487b7160e01b5f52604160045260245ffd5b604051601f8201601f1916810167ffffffffffffffff81118282101715612e8757612e87612e4a565b604052919050565b5f5f5f5f5f5f60c08789031215612ea4575f5ffd5b8635612eaf81612c8d565b95506020870135612ebf81612c8d565b9450604087013593506060870135612ed681612c8d565b92506080870135915060a087013567ffffffffffffffff811115612ef8575f5ffd5b8701601f81018913612f08575f5ffd5b803567ffffffffffffffff811115612f2257612f22612e4a565b612f35601f8201601f1916602001612e5e565b8181528a6020838501011115612f49575f5ffd5b816020840160208301375f602083830101528093505050509295509295509295565b604080825283519082018190525f9060208501906060840190835b81811015612fad5783516001600160a01b0316835260209384019390920191600101612f86565b505083810360208501526109bb8186612ded565b5f5f5f5f60a08587031215612fd4575f5ffd5b612fde8686612cdf565b9350604085013592506060850135612ff581612c8d565b9396929550929360800135925050565b5f60208284031215613015575f5ffd5b81356109c081612c8d565b5f81518084528060208401602086015e5f602082860101526020601f19601f83011685010191505092915050565b602081525f6113836020830184613020565b5f60208284031215613070575f5ffd5b813560ff811681146109c0575f5ffd5b5f5f60208385031215613091575f5ffd5b823567ffffffffffffffff8111156130a7575f5ffd5b8301601f810185136130b7575f5ffd5b803567ffffffffffffffff8111156130cd575f5ffd5b8560208260051b84010111156130e1575f5ffd5b6020919091019590945092505050565b602081525f6113836020830184612ded565b5f5f5f5f5f5f60c08789031215613118575f5ffd5b863561312381612c8d565b9550602087013561313381612c8d565b9450604087013561314381612c8d565b959894975094956060810135955060808101359460a0909101359350915050565b5f5f60408385031215613175575f5ffd5b823561318081612c8d565b946020939093013593505050565b602081525f6113836020830184612daa565b5f5f604083850312156131b1575f5ffd5b82356131bc81612c8d565b915060208301356131cc81612c8d565b809150509250929050565b803563ffffffff811681146131ea575f5ffd5b919050565b5f6040828403128015613200575f5ffd5b506040805190810167ffffffffffffffff8111828210171561322457613224612e4a565b604052823561323281612c8d565b8152613240602084016131d7565b60208201529392505050565b803561325781612c8d565b6001600160a01b0316825263ffffffff613273602083016131d7565b1660208301525050565b6060810161328b828561324c565b8260408301529392505050565b5f602082840312156132a8575f5ffd5b81516109c081612c8d565b6001600160a01b039384168152919092166020820152604081019190915260600190565b5f602082840312156132e7575f5ffd5b5051919050565b60a081016132fc828761324c565b60408201949094526001600160a01b03929092166060830152608090910152919050565b634e487b7160e01b5f52603260045260245ffd5b60808101613342828661324c565b60408201939093526001600160a01b0391909116606090910152919050565b5f60208284031215613371575f5ffd5b815180151581146109c0575f5ffd5b80516020808301519190811015612cef575f1960209190910360031b1b16919050565b634e487b7160e01b5f52601160045260245ffd5b80820180821115611386576113866133a3565b81810381811115611386576113866133a3565b634e487b7160e01b5f52602160045260245ffd5b634e487b7160e01b5f52603160045260245ffd5b828152604060208201525f611a736040830184613020565b5f82518060208501845e5f92019182525091905056fea26469706673582212209f4a637e9517c1d6e9956426961495e150d80a3856affaf33ba48822b9df3ea464736f6c634300081b0033", } // StrategyManagerABI is the input ABI used to generate the binding from. diff --git a/src/contracts/interfaces/ICrossChainRegistry.sol b/src/contracts/interfaces/ICrossChainRegistry.sol index 6138807994..2be8305911 100644 --- a/src/contracts/interfaces/ICrossChainRegistry.sol +++ b/src/contracts/interfaces/ICrossChainRegistry.sol @@ -2,10 +2,7 @@ pragma solidity ^0.8.27; import {OperatorSet} from "../libraries/OperatorSetLib.sol"; - -interface IOperatorTableCalculator { -// TODO: implement, stub for now -} +import "./IOperatorTableCalculator.sol"; interface ICrossChainRegistryErrors { /// @notice Thrown when the chainId is invalid @@ -106,6 +103,12 @@ interface ICrossChainRegistry is ICrossChainRegistryErrors, ICrossChainRegistryT uint32 chainID ) external; + /** + * @notice Gets the list of chains that are supported by the CrossChainRegistry + * @return An array of chainIDs that are supported by the CrossChainRegistry + */ + function getSupportedChains() external view returns (uint32[] memory); + /** * @notice Gets the operatorTableCalculator for a given operatorSet * @param operatorSet the operatorSet to get the operatorTableCalculator for @@ -113,7 +116,7 @@ interface ICrossChainRegistry is ICrossChainRegistryErrors, ICrossChainRegistryT */ function getOperatorTableCalculator( OperatorSet calldata operatorSet - ) external returns (IOperatorTableCalculator); + ) external view returns (IOperatorTableCalculator); /** * @notice Gets the active generation reservations @@ -122,5 +125,15 @@ interface ICrossChainRegistry is ICrossChainRegistryErrors, ICrossChainRegistryT */ function getActiveGenerationReservations() external + view returns (OperatorSet[] memory, IOperatorTableCalculator[] memory); + + /** + * @notice Gets the transport destinations for a given operatorSet + * @param operatorSet the operatorSet to get the transport destinations for + * @return An array of chainIDs that are transport destinations for the given operatorSet + */ + function getTransportDestinations( + OperatorSet calldata operatorSet + ) external view returns (uint32[] memory); } diff --git a/src/contracts/interfaces/IOperatorTableCalculator.sol b/src/contracts/interfaces/IOperatorTableCalculator.sol new file mode 100644 index 0000000000..33a0555bd7 --- /dev/null +++ b/src/contracts/interfaces/IOperatorTableCalculator.sol @@ -0,0 +1,16 @@ +// SPDX-License-Identifier: BUSL-1.1 +pragma solidity ^0.8.27; + +import {OperatorSet} from "../libraries/OperatorSetLib.sol"; + +/// @notice A base operator table calculator that all operator table calculators (ECDSA, BN254) must implement +interface IOperatorTableCalculator { + /** + * @notice Calculates the operatorTableBytes for a given operatorSet + * @param operatorSet the operatorSet to calculate the operator table for + * @return operatorTableBytes the operatorTableBytes for the given operatorSet + */ + function calculateOperatorTableBytes( + OperatorSet calldata operatorSet + ) external view returns (bytes memory operatorTableBytes); +}