func bindTransferValidator(address common.Address, caller bind.ContractCaller, transactor bind.ContractTransactor, filterer bind.ContractFilterer) (*bind.BoundContract, error) {
	parsed, err := abi.JSON(strings.NewReader(TransferValidatorABI))
	if err != nil {
		return nil, err
	}
	return bind.NewBoundContract(address, parsed, caller, transactor, filterer), nil
}
bindTransferValidator binds a generic wrapper to an already deployed contract.
package contract
import (
	"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"
)
var (
	_ = big.NewInt
	_ = strings.NewReader
	_ = ethereum.NotFound
	_ = bind.Bind
	_ = common.Big1
	_ = types.BloomLookup
	_ = event.NewSubscription
)
const TransferValidatorABI = "[{\"inputs\":[{\"internalType\":\"contractIAllowlist\",\"name\":\"_witnessList\",\"type\":\"address\"}],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"previousOwner\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"newOwner\",\"type\":\"address\"}],\"name\":\"OwnershipTransferred\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[],\"name\":\"Pause\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"key\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"address[]\",\"name\":\"witnesses\",\"type\":\"address[]\"}],\"name\":\"Settled\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[],\"name\":\"Unpause\",\"type\":\"event\"},{\"constant\":true,\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"name\":\"minters\",\"outputs\":[{\"internalType\":\"contractIMinter\",\"name\":\"\",\"type\":\"address\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"owner\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[],\"name\":\"pause\",\"outputs\":[],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"paused\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"name\":\"settles\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"name\":\"tokenLists\",\"outputs\":[{\"internalType\":\"contractIAllowlist\",\"name\":\"\",\"type\":\"address\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"internalType\":\"address\",\"name\":\"newOwner\",\"type\":\"address\"}],\"name\":\"transferOwnership\",\"outputs\":[],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[],\"name\":\"unpause\",\"outputs\":[],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"witnessList\",\"outputs\":[{\"internalType\":\"contractIAllowlist\",\"name\":\"\",\"type\":\"address\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[{\"internalType\":\"address\",\"name\":\"cashier\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"tokenAddr\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"index\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"from\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"generateKey\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[{\"internalType\":\"bytes32[]\",\"name\":\"keys\",\"type\":\"bytes32[]\"}],\"name\":\"concatKeys\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"payable\":false,\"stateMutability\":\"pure\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"internalType\":\"address[]\",\"name\":\"cashiers\",\"type\":\"address[]\"},{\"internalType\":\"address[]\",\"name\":\"tokenAddrs\",\"type\":\"address[]\"},{\"internalType\":\"uint256[]\",\"name\":\"indexes\",\"type\":\"uint256[]\"},{\"internalType\":\"address[]\",\"name\":\"senders\",\"type\":\"address[]\"},{\"internalType\":\"address[]\",\"name\":\"recipients\",\"type\":\"address[]\"},{\"internalType\":\"uint256[]\",\"name\":\"amounts\",\"type\":\"uint256[]\"},{\"internalType\":\"bytes\",\"name\":\"signatures\",\"type\":\"bytes\"}],\"name\":\"submitMulti\",\"outputs\":[],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[{\"internalType\":\"address\",\"name\":\"tokenAddr\",\"type\":\"address\"}],\"name\":\"getTokenGroup\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"key\",\"type\":\"bytes32\"},{\"internalType\":\"bytes\",\"name\":\"signatures\",\"type\":\"bytes\"}],\"name\":\"extractWitnesses\",\"outputs\":[{\"internalType\":\"address[]\",\"name\":\"witnesses\",\"type\":\"address[]\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"internalType\":\"address\",\"name\":\"cashier\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"tokenAddr\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"index\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"from\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"},{\"internalType\":\"bytes\",\"name\":\"signatures\",\"type\":\"bytes\"}],\"name\":\"submit\",\"outputs\":[],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"numOfPairs\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"internalType\":\"contractIAllowlist\",\"name\":\"_tokenList\",\"type\":\"address\"},{\"internalType\":\"contractIMinter\",\"name\":\"_minter\",\"type\":\"address\"}],\"name\":\"addPair\",\"outputs\":[],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"internalType\":\"address\",\"name\":\"_newValidator\",\"type\":\"address\"}],\"name\":\"upgrade\",\"outputs\":[],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"}]"
var TransferValidatorBin = "0x60806040526000805460ff60a01b1916905534801561001d57600080fd5b50604051611b2e380380611b2e8339818101604052602081101561004057600080fd5b5051600080546001600160a01b03199081163317909155600480546001600160a01b0390931692909116919091179055611aaf8061007f6000396000f3fe608060405234801561001057600080fd5b50600436106101165760003560e01c80638da5cb5b116100a2578063ba390a6411610071578063ba390a64146106f1578063c836fef0146107ec578063e01eba711461088d578063f2fde38b146108b3578063f98b2332146108d957610116565b80638da5cb5b146102315780639f8c11e314610239578063a9013dce146105e9578063b6f3e087146106c357610116565b80635c975abb116100e95780635c975abb1461018c5780636b6bc862146101a85780638356b148146102045780638456cb591461020c5780638623ec7b1461021457610116565b80630900f0101461011b5780631cb928a914610143578063373f0d491461017c5780633f4ba83a14610184575b600080fd5b6101416004803603602081101561013157600080fd5b50356001600160a01b03166108f6565b005b6101606004803603602081101561015957600080fd5b5035610a47565b604080516001600160a01b039092168252519081900360200190f35b610160610a6e565b610141610a7d565b610194610ae0565b604080519115158252519081900360200190f35b6101f2600480360360c08110156101be57600080fd5b506001600160a01b038135811691602081013582169160408201359160608101358216916080820135169060a00135610af0565b60408051918252519081900360200190f35b6101f2610b64565b610141610b6a565b6101606004803603602081101561022a57600080fd5b5035610bd4565b610160610be1565b610141600480360360e081101561024f57600080fd5b810190602081018135600160201b81111561026957600080fd5b82018360208201111561027b57600080fd5b803590602001918460208302840111600160201b8311171561029c57600080fd5b9190808060200260200160405190810160405280939291908181526020018383602002808284376000920191909152509295949360208101935035915050600160201b8111156102eb57600080fd5b8201836020820111156102fd57600080fd5b803590602001918460208302840111600160201b8311171561031e57600080fd5b9190808060200260200160405190810160405280939291908181526020018383602002808284376000920191909152509295949360208101935035915050600160201b81111561036d57600080fd5b82018360208201111561037f57600080fd5b803590602001918460208302840111600160201b831117156103a057600080fd5b9190808060200260200160405190810160405280939291908181526020018383602002808284376000920191909152509295949360208101935035915050600160201b8111156103ef57600080fd5b82018360208201111561040157600080fd5b803590602001918460208302840111600160201b8311171561042257600080fd5b9190808060200260200160405190810160405280939291908181526020018383602002808284376000920191909152509295949360208101935035915050600160201b81111561047157600080fd5b82018360208201111561048357600080fd5b803590602001918460208302840111600160201b831117156104a457600080fd5b9190808060200260200160405190810160405280939291908181526020018383602002808284376000920191909152509295949360208101935035915050600160201b8111156104f357600080fd5b82018360208201111561050557600080fd5b803590602001918460208302840111600160201b8311171561052657600080fd5b9190808060200260200160405190810160405280939291908181526020018383602002808284376000920191909152509295949360208101935035915050600160201b81111561057557600080fd5b82018360208201111561058757600080fd5b803590602001918460018302840111600160201b831117156105a857600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250929550610bf0945050505050565b610141600480360360e08110156105ff57600080fd5b6001600160a01b0382358116926020810135821692604082013592606083013581169260808101359091169160a0820135919081019060e0810160c0820135600160201b81111561064f57600080fd5b82018360208201111561066157600080fd5b803590602001918460018302840111600160201b8311171561068257600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250929550611175945050505050565b610141600480360360408110156106d957600080fd5b506001600160a01b0381358116916020013516611562565b61079c6004803603604081101561070757600080fd5b81359190810190604081016020820135600160201b81111561072857600080fd5b82018360208201111561073a57600080fd5b803590602001918460018302840111600160201b8311171561075b57600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250929550611601945050505050565b60408051602080825283518183015283519192839290830191858101910280838360005b838110156107d85781810151838201526020016107c0565b505050509050019250505060405180910390f35b6101f26004803603602081101561080257600080fd5b810190602081018135600160201b81111561081c57600080fd5b82018360208201111561082e57600080fd5b803590602001918460208302840111600160201b8311171561084f57600080fd5b9190808060200260200160405190810160405280939291908181526020018383602002808284376000920191909152509295506117d7945050505050565b6101f2600480360360208110156108a357600080fd5b50356001600160a01b0316611832565b610141600480360360208110156108c957600080fd5b50356001600160a01b0316611926565b6101f2600480360360208110156108ef57600080fd5b50356119ab565b6000546001600160a01b0316331461090d57600080fd5b3060005b600254811015610a425760006002828154811061092a57fe5b9060005260206000200160009054906101000a90046001600160a01b03169050826001600160a01b0316816001600160a01b0316638da5cb5b6040518163ffffffff1660e01b815260040160206040518083038186803b15801561098d57600080fd5b505afa1580156109a1573d6000803e3d6000fd5b505050506040513d60208110156109b757600080fd5b50516001600160a01b03161415610a3957806001600160a01b031663f2fde38b856040518263ffffffff1660e01b815260040180826001600160a01b03166001600160a01b03168152602001915050600060405180830381600087803b158015610a2057600080fd5b505af1158015610a34573d6000803e3d6000fd5b505050505b50600101610911565b505050565b60038181548110610a5457fe5b6000918252602090912001546001600160a01b0316905081565b6004546001600160a01b031681565b6000546001600160a01b03163314610a9457600080fd5b600054600160a01b900460ff16610aaa57600080fd5b6000805460ff60a01b191681556040517f7805862f689e2f13df9f062ff482ad3ad112aca9e0847911ed832e158c525b339190a1565b600054600160a01b900460ff1681565b6040805130606090811b6020808401919091526bffffffffffffffffffffffff1999821b8a16603484015297811b89166048830152605c82019690965293851b8716607c8501529190931b909416609082015260a4808201929092528351808203909201825260c401909252815191012090565b60035490565b6000546001600160a01b03163314610b8157600080fd5b600054600160a01b900460ff1615610b9857600080fd5b6000805460ff60a01b1916600160a01b1781556040517f6985a02210a168e66602d3235cb6db0e70f92b3ba4d376a33c0f3d9434bff6259190a1565b60028181548110610a5457fe5b6000546001600160a01b031681565b600054600160a01b900460ff1615610c0757600080fd5b85518751148015610c19575084518651145b8015610c26575083518551145b8015610c33575082518451145b8015610c40575081518351145b610c86576040805162461bcd60e51b8152602060048201526012602482015271696e76616c696420706172616d657465727360701b604482015290519081900360640190fd5b60608751604051908082528060200260200182016040528015610cb3578160200160208202803883390190505b50905060005b8851811015610e5857610d42898281518110610cd157fe5b6020026020010151898381518110610ce557fe5b6020026020010151898481518110610cf957fe5b6020026020010151898581518110610d0d57fe5b6020026020010151898681518110610d2157fe5b6020026020010151898781518110610d3557fe5b6020026020010151610af0565b828281518110610d4e57fe5b60200260200101818152505060016000838381518110610d6a57fe5b6020026020010151815260200190815260200160002054600014610dd1576040805162461bcd60e51b81526020600482015260196024820152781d1c985b9cd9995c881a185cc81899595b881cd95d1d1b1959603a1b604482015290519081900360640190fd5b60005b81811015610e4f57828181518110610de857fe5b6020026020010151838381518110610dfc57fe5b60200260200101511415610e47576040805162461bcd60e51b815260206004820152600d60248201526c6475706c6963617465206b657960981b604482015290519081900360640190fd5b600101610dd4565b50600101610cb9565b506060610e6d610e67836117d7565b84611601565b905060008151118015610ef75750600480546040805163593f696960e01b815290516001600160a01b039092169263593f6969928282019260209290829003018186803b158015610ebd57600080fd5b505afa158015610ed1573d6000803e3d6000fd5b505050506040513d6020811015610ee757600080fd5b5051815160029091026003909102115b610f41576040805162461bcd60e51b8152602060048201526016602482015275696e73756666696369656e74207769746e657373657360501b604482015290519081900360640190fd5b60005b8951811015611169574360016000858481518110610f5e57fe5b60200260200101518152602001908152602001600020819055506002610f968a8381518110610f8957fe5b6020026020010151611832565b81548110610fa057fe5b60009182526020909120015489516001600160a01b039091169063c6c3bbe6908b9084908110610fcc57fe5b6020026020010151888481518110610fe057fe5b6020026020010151888581518110610ff457fe5b60200260200101516040518463ffffffff1660e01b815260040180846001600160a01b03166001600160a01b03168152602001836001600160a01b03166001600160a01b031681526020018281526020019350505050602060405180830381600087803b15801561106457600080fd5b505af1158015611078573d6000803e3d6000fd5b505050506040513d602081101561108e57600080fd5b50516110d8576040805162461bcd60e51b81526020600482015260146024820152733330b4b632b2103a379036b4b73a103a37b5b2b760611b604482015290519081900360640190fd5b8281815181106110e457fe5b60200260200101517fe24922ac8cf2a1430fb8c7ce6a9125d7db5076a1eb2cefced90e82d6fcb24db0836040518080602001828103825283818151815260200191508051906020019060200280838360005b8381101561114e578181015183820152602001611136565b505050509050019250505060405180910390a2600101610f44565b50505050505050505050565b600054600160a01b900460ff161561118c57600080fd5b816111d6576040805162461bcd60e51b8152602060048201526015602482015274616d6f756e742063616e6e6f74206265207a65726f60581b604482015290519081900360640190fd5b6001600160a01b038316611231576040805162461bcd60e51b815260206004820152601860248201527f726563697069656e742063616e6e6f74206265207a65726f0000000000000000604482015290519081900360640190fd5b604181518161123c57fe5b061561128f576040805162461bcd60e51b815260206004820152601860248201527f696e76616c6964207369676e6174757265206c656e6774680000000000000000604482015290519081900360640190fd5b600061129f888888888888610af0565b600081815260016020526040902054909150156112ff576040805162461bcd60e51b81526020600482015260196024820152781d1c985b9cd9995c881a185cc81899595b881cd95d1d1b1959603a1b604482015290519081900360640190fd5b606061130b8284611601565b9050600081511180156113955750600480546040805163593f696960e01b815290516001600160a01b039092169263593f6969928282019260209290829003018186803b15801561135b57600080fd5b505afa15801561136f573d6000803e3d6000fd5b505050506040513d602081101561138557600080fd5b5051815160029091026003909102115b6113df576040805162461bcd60e51b8152602060048201526016602482015275696e73756666696369656e74207769746e657373657360501b604482015290519081900360640190fd5b600082815260016020526040902043905560026113fb89611832565b8154811061140557fe5b600091825260208083209091015460408051636361ddf360e11b81526001600160a01b038d811660048301528a81166024830152604482018a90529151919092169363c6c3bbe693606480850194919392918390030190829087803b15801561146d57600080fd5b505af1158015611481573d6000803e3d6000fd5b505050506040513d602081101561149757600080fd5b50516114e1576040805162461bcd60e51b81526020600482015260146024820152733330b4b632b2103a379036b4b73a103a37b5b2b760611b604482015290519081900360640190fd5b817fe24922ac8cf2a1430fb8c7ce6a9125d7db5076a1eb2cefced90e82d6fcb24db0826040518080602001828103825283818151815260200191508051906020019060200280838360005b8381101561154457818101518382015260200161152c565b505050509050019250505060405180910390a2505050505050505050565b6000546001600160a01b0316331461157957600080fd5b6003805460018181019092557fc2575a0e9e593c00f959f8c92f12db2869c3395a3b0502d05e2516446f71f85b0180546001600160a01b039485166001600160a01b0319918216179091556002805492830181556000527f405787fa12a823e0f2b7631cc41b3ba8828b3321ca811111fa75cd3aa3bb5ace9091018054929093169116179055565b60606000604183518161161057fe5b0490508060405190808252806020026020018201604052801561163d578160200160208202803883390190505b50915060005b818110156117cf57600061165b8686846041026119bd565b600480546040805163babcc53960e01b81526001600160a01b0380861694820194909452905193945091169163babcc53991602480820192602092909190829003018186803b1580156116ad57600080fd5b505afa1580156116c1573d6000803e3d6000fd5b505050506040513d60208110156116d757600080fd5b505161171f576040805162461bcd60e51b8152602060048201526012602482015271696e76616c6964207369676e61747572657360701b604482015290519081900360640190fd5b60005b828110156117a05784818151811061173657fe5b60200260200101516001600160a01b0316826001600160a01b03161415611798576040805162461bcd60e51b81526020600482015260116024820152706475706c6963617465207769746e65737360781b604482015290519081900360640190fd5b600101611722565b50808483815181106117ae57fe5b6001600160a01b039092166020928302919091019091015250600101611643565b505092915050565b60008160405160200180828051906020019060200280838360005b8381101561180a5781810151838201526020016117f2565b505050509050019150506040516020818303038152906040528051906020012090505b919050565b6000805b6003548110156118e0576003818154811061184d57fe5b600091825260209182902001546040805163babcc53960e01b81526001600160a01b0387811660048301529151919092169263babcc5399260248082019391829003018186803b1580156118a057600080fd5b505afa1580156118b4573d6000803e3d6000fd5b505050506040513d60208110156118ca57600080fd5b5051156118d857905061182d565b600101611836565b506040805162461bcd60e51b8152602060048201526015602482015274696e76616c696420746f6b656e206164647265737360581b604482015290519081900360640190fd5b6000546001600160a01b0316331461193d57600080fd5b6001600160a01b03811661195057600080fd5b600080546040516001600160a01b03808516939216917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a3600080546001600160a01b0319166001600160a01b0392909216919091179055565b60016020526000908152604090205481565b8181016020810151604082015160609092015160009290831a601b8110156119e357601b015b8060ff16601b141580156119fb57508060ff16601c14155b15611a0c5760009350505050611a73565b604080516000815260208082018084528a905260ff8416828401526060820186905260808201859052915160019260a0808401939192601f1981019281900390910190855afa158015611a63573d6000803e3d6000fd5b5050506020604051035193505050505b939250505056fea265627a7a723158205a32069e2932e5e1355e1e353eafc28f6ff72a6f3b90478470af548bd72f6c5364736f6c63430005110032"
func DeployTransferValidator(auth *bind.TransactOpts, backend bind.ContractBackend, _witnessList common.Address) (common.Address, *types.Transaction, *TransferValidator, error) {
	parsed, err := abi.JSON(strings.NewReader(TransferValidatorABI))
	if err != nil {
		return common.Address{}, nil, nil, err
	}
	address, tx, contract, err := bind.DeployContract(auth, parsed, common.FromHex(TransferValidatorBin), backend, _witnessList)
	if err != nil {
		return common.Address{}, nil, nil, err
	}
	return address, tx, &TransferValidator{TransferValidatorCaller: TransferValidatorCaller{contract: contract}, TransferValidatorTransactor: TransferValidatorTransactor{contract: contract}, TransferValidatorFilterer: TransferValidatorFilterer{contract: contract}}, nil
}
type TransferValidator struct {
	TransferValidatorCaller      
	TransferValidatorTransactor  
	TransferValidatorFilterer    
}
type TransferValidatorCaller struct {
	contract *bind.BoundContract  
}
type TransferValidatorTransactor struct {
	contract *bind.BoundContract  
}
type TransferValidatorFilterer struct {
	contract *bind.BoundContract  
}
type TransferValidatorSession struct {
	Contract     *TransferValidator  
	CallOpts     bind.CallOpts       
	TransactOpts bind.TransactOpts   
}
type TransferValidatorCallerSession struct {
	Contract *TransferValidatorCaller  
	CallOpts bind.CallOpts             
}
type TransferValidatorTransactorSession struct {
	Contract     *TransferValidatorTransactor  
	TransactOpts bind.TransactOpts             
}
type TransferValidatorRaw struct {
	Contract *TransferValidator  
}
type TransferValidatorCallerRaw struct {
	Contract *TransferValidatorCaller  
}
type TransferValidatorTransactorRaw struct {
	Contract *TransferValidatorTransactor  
}
func NewTransferValidator(address common.Address, backend bind.ContractBackend) (*TransferValidator, error) {
	contract, err := bindTransferValidator(address, backend, backend, backend)
	if err != nil {
		return nil, err
	}
	return &TransferValidator{TransferValidatorCaller: TransferValidatorCaller{contract: contract}, TransferValidatorTransactor: TransferValidatorTransactor{contract: contract}, TransferValidatorFilterer: TransferValidatorFilterer{contract: contract}}, nil
}
func NewTransferValidatorCaller(address common.Address, caller bind.ContractCaller) (*TransferValidatorCaller, error) {
	contract, err := bindTransferValidator(address, caller, nil, nil)
	if err != nil {
		return nil, err
	}
	return &TransferValidatorCaller{contract: contract}, nil
}
func NewTransferValidatorTransactor(address common.Address, transactor bind.ContractTransactor) (*TransferValidatorTransactor, error) {
	contract, err := bindTransferValidator(address, nil, transactor, nil)
	if err != nil {
		return nil, err
	}
	return &TransferValidatorTransactor{contract: contract}, nil
}
func NewTransferValidatorFilterer(address common.Address, filterer bind.ContractFilterer) (*TransferValidatorFilterer, error) {
	contract, err := bindTransferValidator(address, nil, nil, filterer)
	if err != nil {
		return nil, err
	}
	return &TransferValidatorFilterer{contract: contract}, nil
}