func (it *ListingChallengeFailedIterator) Error() error {
	return it.fail
}
Error returns any retrieval or parsing error occurred during filtering.
package listing
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
	_ = abi.U256
	_ = bind.Bind
	_ = common.Big1
	_ = types.BloomLookup
	_ = event.NewSubscription
)
const ListingABI = "[{\"name\":\"ApplicationFailed\",\"inputs\":[{\"type\":\"bytes32\",\"name\":\"hash\",\"indexed\":true},{\"type\":\"address\",\"name\":\"applicant\",\"indexed\":true}],\"anonymous\":false,\"type\":\"event\"},{\"name\":\"Applied\",\"inputs\":[{\"type\":\"bytes32\",\"name\":\"hash\",\"indexed\":true},{\"type\":\"address\",\"name\":\"applicant\",\"indexed\":true}],\"anonymous\":false,\"type\":\"event\"},{\"name\":\"AccessRewardClaimed\",\"inputs\":[{\"type\":\"bytes32\",\"name\":\"hash\",\"indexed\":true},{\"type\":\"uint256\",\"name\":\"maker_fee\",\"indexed\":false,\"unit\":\"wei\"},{\"type\":\"uint256\",\"name\":\"minted\",\"indexed\":false}],\"anonymous\":false,\"type\":\"event\"},{\"name\":\"Challenged\",\"inputs\":[{\"type\":\"bytes32\",\"name\":\"hash\",\"indexed\":true},{\"type\":\"address\",\"name\":\"challenger\",\"indexed\":true}],\"anonymous\":false,\"type\":\"event\"},{\"name\":\"ChallengeFailed\",\"inputs\":[{\"type\":\"bytes32\",\"name\":\"hash\",\"indexed\":true},{\"type\":\"address\",\"name\":\"challenger\",\"indexed\":true}],\"anonymous\":false,\"type\":\"event\"},{\"name\":\"ChallengeSucceeded\",\"inputs\":[{\"type\":\"bytes32\",\"name\":\"hash\",\"indexed\":true},{\"type\":\"address\",\"name\":\"challenger\",\"indexed\":true}],\"anonymous\":false,\"type\":\"event\"},{\"name\":\"Listed\",\"inputs\":[{\"type\":\"bytes32\",\"name\":\"hash\",\"indexed\":true},{\"type\":\"address\",\"name\":\"owner\",\"indexed\":true},{\"type\":\"uint256\",\"name\":\"reward\",\"indexed\":false,\"unit\":\"wei\"}],\"anonymous\":false,\"type\":\"event\"},{\"name\":\"ListingRemoved\",\"inputs\":[{\"type\":\"bytes32\",\"name\":\"hash\",\"indexed\":true}],\"anonymous\":false,\"type\":\"event\"},{\"name\":\"WithdrawnFromListing\",\"inputs\":[{\"type\":\"bytes32\",\"name\":\"hash\",\"indexed\":true},{\"type\":\"address\",\"name\":\"owner\",\"indexed\":true},{\"type\":\"uint256\",\"name\":\"withdrawn\",\"indexed\":false,\"unit\":\"wei\"}],\"anonymous\":false,\"type\":\"event\"},{\"outputs\":[],\"inputs\":[{\"type\":\"address\",\"name\":\"market_token_addr\"},{\"type\":\"address\",\"name\":\"voting_addr\"},{\"type\":\"address\",\"name\":\"p11r_addr\"},{\"type\":\"address\",\"name\":\"res_addr\"},{\"type\":\"address\",\"name\":\"data_addr\"}],\"constant\":false,\"payable\":false,\"type\":\"constructor\"},{\"name\":\"isListed\",\"outputs\":[{\"type\":\"bool\",\"name\":\"out\"}],\"inputs\":[{\"type\":\"bytes32\",\"name\":\"hash\"}],\"constant\":true,\"payable\":false,\"type\":\"function\",\"gas\":747},{\"name\":\"withdrawFromListing\",\"outputs\":[],\"inputs\":[{\"type\":\"bytes32\",\"name\":\"hash\"},{\"type\":\"uint256\",\"unit\":\"wei\",\"name\":\"amount\"}],\"constant\":false,\"payable\":false,\"type\":\"function\",\"gas\":41054},{\"name\":\"list\",\"outputs\":[],\"inputs\":[{\"type\":\"bytes32\",\"name\":\"hash\"}],\"constant\":false,\"payable\":false,\"type\":\"function\",\"gas\":10000},{\"name\":\"getListing\",\"outputs\":[{\"type\":\"address\",\"name\":\"out\"},{\"type\":\"uint256\",\"unit\":\"wei\",\"name\":\"out\"}],\"inputs\":[{\"type\":\"bytes32\",\"name\":\"hash\"}],\"constant\":true,\"payable\":false,\"type\":\"function\",\"gas\":1299},{\"name\":\"resolveApplication\",\"outputs\":[],\"inputs\":[{\"type\":\"bytes32\",\"name\":\"hash\"}],\"constant\":false,\"payable\":false,\"type\":\"function\",\"gas\":90063},{\"name\":\"claimAccessReward\",\"outputs\":[],\"inputs\":[{\"type\":\"bytes32\",\"name\":\"hash\"}],\"constant\":false,\"payable\":false,\"type\":\"function\",\"gas\":47866},{\"name\":\"challenge\",\"outputs\":[],\"inputs\":[{\"type\":\"bytes32\",\"name\":\"hash\"}],\"constant\":false,\"payable\":false,\"type\":\"function\",\"gas\":10153},{\"name\":\"resolveChallenge\",\"outputs\":[],\"inputs\":[{\"type\":\"bytes32\",\"name\":\"hash\"}],\"constant\":false,\"payable\":false,\"type\":\"function\",\"gas\":61132},{\"name\":\"exit\",\"outputs\":[],\"inputs\":[{\"type\":\"bytes32\",\"name\":\"hash\"}],\"constant\":false,\"payable\":false,\"type\":\"function\",\"gas\":50589}]"
const ListingBin = `0x740100000000000000000000000000000000000000006020526f7fffffffffffffffffffffffffffffff6040527fffffffffffffffffffffffffffffffff8000000000000000000000000000000060605274012a05f1fffffffffffffffffffffffffdabf41c006080527ffffffffffffffffffffffffed5fa0e000000000000000000000000000000000060a05260a06112546101403934156100a157600080fd5b602061125460c03960c05160205181106100ba57600080fd5b50602060206112540160c03960c05160205181106100d757600080fd5b50602060406112540160c03960c05160205181106100f457600080fd5b50602060606112540160c03960c051602051811061011157600080fd5b50602060806112540160c03960c051602051811061012e57600080fd5b506101405160015561016051600255610180516003556101a0516004556101c05160055561123c56600436101561000d576110df565b600035601c52740100000000000000000000000000000000000000006020526f7fffffffffffffffffffffffffffffff6040527fffffffffffffffffffffffffffffffff8000000000000000000000000000000060605274012a05f1fffffffffffffffffffffffffdabf41c006080527ffffffffffffffffffffffffed5fa0e000000000000000000000000000000000060a05263ecefbdc660005114156100e25734156100ba57600080fd5b6000600060043560e05260c052604060c02060c052602060c02054141560005260206000f350005b63a7e7867560005114156101d85734156100fb57600080fd5b33600060043560e05260c052604060c02060c052602060c020541461011f57600080fd5b6001600060043560e05260c052604060c02060c052602060c020016024358154101561014a57600080fd5b6024358154038155506001543b61016057600080fd5b600154301861016e57600080fd5b60206101e0604463a9059cbb6101405233610160526024356101805261015c60006001545af161019d57600080fd5b6000506101e05060243561020052336004357f80c60c72ccf40c5034d79902057aa92a89ffffda44f36fc89355c808e8106adf6020610200a3005b6313d49a8b60005114156103715734156101f157600080fd5b6002543b6101fe57600080fd5b600254301861020c57600080fd5b60206101c0602463b89694c6610140526004356101605261015c6002545afa61023457600080fd5b6000506101c0511561024557600080fd5b600060043560e05260c052604060c02060c052602060c020541561026857600080fd5b6002543b61027557600080fd5b600254301861028357600080fd5b6000600060a463bb12c49e6102e0526004356103005260016103205233610340526003543b6102b157600080fd5b60035430186102bf57600080fd5b6020610240600463fc0e3d906101e0526101fc6003545afa6102e057600080fd5b60005061024051610360526003543b6102f857600080fd5b600354301861030657600080fd5b60206102c06004632d0d2bc66102605261027c6003545afa61032757600080fd5b6000506102c051610380526102fc60006002545af161034557600080fd5b336004357f26f7438941d95dc8495c99ef33fac91b2b04f98c73290027562cd3e612a3c85f60006000a3005b63175c0d1660005114156103db57341561038a57600080fd5b604061014052610160600060043560e05260c052604060c02060c052602060c0205481526001600060043560e05260c052604060c02060c052602060c020015481602001525061014051610160f350005b60001561051e575b6101605261014052600160006101405160e05260c052604060c02060c052602060c0200154610180526000610180511115610483576001543b61042557600080fd5b600154301861043357600080fd5b6020610240604463a9059cbb6101a05260006101405160e05260c052604060c02060c052602060c020546101c052610180516101e0526101bc60006001545af161047c57600080fd5b6000506102405b5060006101405160e05260c052604060c02060c052602060c0206000815560006001820155506005543b6104b657600080fd5b60055430186104c457600080fd5b60006000602463bd82badc61026052610140516102805261027c60006005545af16104ee57600080fd5b610140517f50425cae216bd151d26c8e8bb9779cc899c99d72f78081f2ceec9a99f001ff7960006000a261016051565b6318e28e1c600051141561091057341561053757600080fd5b6002543b61054457600080fd5b600254301861055257600080fd5b60206101e0604463af61f760610140526004356101605260016101805261015c6002545afa61058057600080fd5b6000506101e05161059057600080fd5b6002543b61059d57600080fd5b60025430186105ab57600080fd5b6020610280602463327322c8610200526004356102205261021c6002545afa6105d357600080fd5b600050610280516105e357600080fd5b6005543b6105f057600080fd5b60055430186105fe57600080fd5b60206103406024637a639f6e6102c0526004356102e0526102dc6005545afa61062657600080fd5b600050610340516102a0526002543b61063e57600080fd5b600254301861064c57600080fd5b6020610400602463eb3014fd610380526004356103a05261039c6002545afa61067457600080fd5b600050610400516103605260006102a051181561089c576002543b61069857600080fd5b60025430186106a657600080fd5b60206105c06044638f354b7961052052600435610540526003543b6106ca57600080fd5b60035430186106d857600080fd5b60206105006004633d1e37d56104a0526104bc6003545afa6106f957600080fd5b600050610500516105605261053c6002545afa61071557600080fd5b6000506105c051156108255761036051600060043560e05260c052604060c02060c052602060c020556003543b61074b57600080fd5b600354301861075957600080fd5b6020610660600463dc2b28536106005261061c6003545afa61077a57600080fd5b600050610660516105e0526001543b61079257600080fd5b60015430186107a057600080fd5b60006000602463a0712d68610680526105e0516106a05261069c60006001545af16107ca57600080fd5b6105e0516001600060043560e05260c052604060c02060c052602060c02001556105e05161070052610360516004357f7f1a2c3e2883554425dc0f9f24dcfcdf54213b186c550080373dcc65813aa8d06020610700a3610897565b6005543b61083257600080fd5b600554301861084057600080fd5b60006000602463bd82badc610420526004356104405261043c60006005545af161086957600080fd5b610360516004357f163b66974440f1696d484dfc777282273c42ff2fa247d72dbdbb3510d92cbda660006000a35b6108ca565b610360516004357f163b66974440f1696d484dfc777282273c42ff2fa247d72dbdbb3510d92cbda660006000a35b6002543b6108d757600080fd5b60025430186108e557600080fd5b6000600060246389bb617c610720526004356107405261073c60006002545af161090e57600080fd5b005b6358fb1aa26000511415610b4357341561092957600080fd5b600060043560e05260c052604060c02060c052602060c02054331461094d57600080fd5b6005543b61095a57600080fd5b600554301861096857600080fd5b60206101e0602463ea5450d0610160526004356101805261017c6005545afa61099057600080fd5b6000506101e051610140526004543b6109a857600080fd5b60045430186109b657600080fd5b6020610280600463a056a5b96102205261023c6004545afa6109d757600080fd5b6000506102805161020052610200516101405110156109f557600080fd5b6005543b610a0257600080fd5b6005543018610a1057600080fd5b60006000602463fcefc4586102a0526004356102c0526102bc60006005545af1610a3957600080fd5b61020051610a4657600080fd5b61020051610140511515610a5b576000610a84565b633b9aca0061014051633b9aca0061014051020414610a7957600080fd5b633b9aca0061014051025b04610320526001543b610a9657600080fd5b6001543018610aa457600080fd5b60006000602463a0712d6861034052610320516103605261035c60006001545af1610ace57600080fd5b6001600060043560e05260c052604060c02060c052602060c020018054610320518254011015610afd57600080fd5b61032051815401815550610140516103c052610320516103e0526004357f62a55a6ea8da38f525b224c00efe75612d76b6915424c77216157e621865cfcf60406103c0a2005b63cffd46dc6000511415610cde573415610b5c57600080fd5b6000600060043560e05260c052604060c02060c052602060c0205418610b8157600080fd5b6002543b610b8e57600080fd5b6002543018610b9c57600080fd5b60206101c0602463b89694c6610140526004356101605261015c6002545afa610bc457600080fd5b6000506101c05115610bd557600080fd5b6002543b610be257600080fd5b6002543018610bf057600080fd5b6000600060a463bb12c49e6102e0526004356103005260026103205233610340526003543b610c1e57600080fd5b6003543018610c2c57600080fd5b6020610240600463fc0e3d906101e0526101fc6003545afa610c4d57600080fd5b60005061024051610360526003543b610c6557600080fd5b6003543018610c7357600080fd5b60206102c06004632d0d2bc66102605261027c6003545afa610c9457600080fd5b6000506102c051610380526102fc60006002545af1610cb257600080fd5b336004357fe9479421670c3425a1497ce47a53af8bd96ce5bd0741e96221ba0acace3f7d4760006000a3005b63d32c943a6000511415611003573415610cf757600080fd5b6002543b610d0457600080fd5b6002543018610d1257600080fd5b60206101e0604463af61f760610140526004356101605260026101805261015c6002545afa610d4057600080fd5b6000506101e051610d5057600080fd5b6002543b610d5d57600080fd5b6002543018610d6b57600080fd5b6020610280602463327322c8610200526004356102205261021c6002545afa610d9357600080fd5b60005061028051610da357600080fd5b6002543b610db057600080fd5b6002543018610dbe57600080fd5b6020610340602463eb3014fd6102c0526004356102e0526102dc6002545afa610de657600080fd5b600050610340516102a0526002543b610dfe57600080fd5b6002543018610e0c57600080fd5b60206105206044638f354b79610480526004356104a0526003543b610e3057600080fd5b6003543018610e3e57600080fd5b60206104606004633d1e37d56104005261041c6003545afa610e5f57600080fd5b600050610460516104c05261049c6002545afa610e7b57600080fd5b6000506105205115610f2e57610140610540525b61054051516020610540510161054052610540610540511015610eb157610e8f565b63550ee133610560526004356105805261058051600658016103e3565b610520610540525b6105405152602061054051036105405261014061054051101515610ef957610ed6565b6000506102a0516004357fb7e10908a54924c8e096789495f5a4958fed82b49d856d22b208a23b398306bb60006000a3610fbd565b6002543b610f3b57600080fd5b6002543018610f4957600080fd5b60006000604463b6b692066103605260043561038052600060043560e05260c052604060c02060c052602060c020546103a05261037c60006002545af1610f8f57600080fd5b6102a0516004357fa0e6c0bd204f59362c8b2ebdf77c63242bf779d8ac30c347933db099abcc037060006000a35b6002543b610fca57600080fd5b6002543018610fd857600080fd5b6000600060246389bb617c6105e052600435610600526105fc60006002545af161100157600080fd5b005b630ca3626360005114156110de57341561101c57600080fd5b33600060043560e05260c052604060c02060c052602060c020541461104057600080fd5b6002543b61104d57600080fd5b600254301861105b57600080fd5b60206101c0602463b89694c6610140526004356101605261015c6002545afa61108357600080fd5b6000506101c0511561109457600080fd5b6101405161016051610180516101a0516101c05163550ee133610200526004356102205261022051600658016103e3565b6101c0526101a052610180526101605261014052600050005b5b60006000fd5b61015761123c0361015760003961015761123c036000f3`
func DeployListing(auth *bind.TransactOpts, backend bind.ContractBackend, market_token_addr common.Address, voting_addr common.Address, p11r_addr common.Address, res_addr common.Address, data_addr common.Address) (common.Address, *types.Transaction, *Listing, error) {
	parsed, err := abi.JSON(strings.NewReader(ListingABI))
	if err != nil {
		return common.Address{}, nil, nil, err
	}
	address, tx, contract, err := bind.DeployContract(auth, parsed, common.FromHex(ListingBin), backend, market_token_addr, voting_addr, p11r_addr, res_addr, data_addr)
	if err != nil {
		return common.Address{}, nil, nil, err
	}
	return address, tx, &Listing{ListingCaller: ListingCaller{contract: contract}, ListingTransactor: ListingTransactor{contract: contract}, ListingFilterer: ListingFilterer{contract: contract}}, nil
}
type Listing struct {
	ListingCaller      
	ListingTransactor  
	ListingFilterer    
}
type ListingCaller struct {
	contract *bind.BoundContract  
}
type ListingTransactor struct {
	contract *bind.BoundContract  
}
type ListingFilterer struct {
	contract *bind.BoundContract  
}
type ListingSession struct {
	Contract     *Listing           
	CallOpts     bind.CallOpts      
	TransactOpts bind.TransactOpts  
}
type ListingCallerSession struct {
	Contract *ListingCaller  
	CallOpts bind.CallOpts   
}
type ListingTransactorSession struct {
	Contract     *ListingTransactor  
	TransactOpts bind.TransactOpts   
}
type ListingRaw struct {
	Contract *Listing  
}
type ListingCallerRaw struct {
	Contract *ListingCaller  
}
type ListingTransactorRaw struct {
	Contract *ListingTransactor  
}
func NewListing(address common.Address, backend bind.ContractBackend) (*Listing, error) {
	contract, err := bindListing(address, backend, backend, backend)
	if err != nil {
		return nil, err
	}
	return &Listing{ListingCaller: ListingCaller{contract: contract}, ListingTransactor: ListingTransactor{contract: contract}, ListingFilterer: ListingFilterer{contract: contract}}, nil
}
func NewListingCaller(address common.Address, caller bind.ContractCaller) (*ListingCaller, error) {
	contract, err := bindListing(address, caller, nil, nil)
	if err != nil {
		return nil, err
	}
	return &ListingCaller{contract: contract}, nil
}
func NewListingTransactor(address common.Address, transactor bind.ContractTransactor) (*ListingTransactor, error) {
	contract, err := bindListing(address, nil, transactor, nil)
	if err != nil {
		return nil, err
	}
	return &ListingTransactor{contract: contract}, nil
}
func NewListingFilterer(address common.Address, filterer bind.ContractFilterer) (*ListingFilterer, error) {
	contract, err := bindListing(address, nil, nil, filterer)
	if err != nil {
		return nil, err
	}
	return &ListingFilterer{contract: contract}, nil
}
func bindListing(address common.Address, caller bind.ContractCaller, transactor bind.ContractTransactor, filterer bind.ContractFilterer) (*bind.BoundContract, error) {
	parsed, err := abi.JSON(strings.NewReader(ListingABI))
	if err != nil {
		return nil, err
	}
	return bind.NewBoundContract(address, parsed, caller, transactor, filterer), nil
}
func (_Listing *ListingRaw) Call(opts *bind.CallOpts, result interface{}, method string, params ...interface{}) error {
	return _Listing.Contract.ListingCaller.contract.Call(opts, result, method, params...)
}
func (_Listing *ListingRaw) Transfer(opts *bind.TransactOpts) (*types.Transaction, error) {
	return _Listing.Contract.ListingTransactor.contract.Transfer(opts)
}
func (_Listing *ListingRaw) Transact(opts *bind.TransactOpts, method string, params ...interface{}) (*types.Transaction, error) {
	return _Listing.Contract.ListingTransactor.contract.Transact(opts, method, params...)
}
func (_Listing *ListingCallerRaw) Call(opts *bind.CallOpts, result interface{}, method string, params ...interface{}) error {
	return _Listing.Contract.contract.Call(opts, result, method, params...)
}
func (_Listing *ListingTransactorRaw) Transfer(opts *bind.TransactOpts) (*types.Transaction, error) {
	return _Listing.Contract.contract.Transfer(opts)
}
func (_Listing *ListingTransactorRaw) Transact(opts *bind.TransactOpts, method string, params ...interface{}) (*types.Transaction, error) {
	return _Listing.Contract.contract.Transact(opts, method, params...)
}
func (_Listing *ListingCaller) GetListing(opts *bind.CallOpts, hash [32]byte) (common.Address, *big.Int, error) {
	var (
		ret0 = new(common.Address)
		ret1 = new(*big.Int)
	)
	out := &[]interface{}{
		ret0,
		ret1,
	}
	err := _Listing.contract.Call(opts, out, "getListing", hash)
	return *ret0, *ret1, err
}
func (_Listing *ListingSession) GetListing(hash [32]byte) (common.Address, *big.Int, error) {
	return _Listing.Contract.GetListing(&_Listing.CallOpts, hash)
}
func (_Listing *ListingCallerSession) GetListing(hash [32]byte) (common.Address, *big.Int, error) {
	return _Listing.Contract.GetListing(&_Listing.CallOpts, hash)
}
func (_Listing *ListingCaller) IsListed(opts *bind.CallOpts, hash [32]byte) (bool, error) {
	var (
		ret0 = new(bool)
	)
	out := ret0
	err := _Listing.contract.Call(opts, out, "isListed", hash)
	return *ret0, err
}
func (_Listing *ListingSession) IsListed(hash [32]byte) (bool, error) {
	return _Listing.Contract.IsListed(&_Listing.CallOpts, hash)
}
func (_Listing *ListingCallerSession) IsListed(hash [32]byte) (bool, error) {
	return _Listing.Contract.IsListed(&_Listing.CallOpts, hash)
}
func (_Listing *ListingTransactor) Challenge(opts *bind.TransactOpts, hash [32]byte) (*types.Transaction, error) {
	return _Listing.contract.Transact(opts, "challenge", hash)
}
func (_Listing *ListingSession) Challenge(hash [32]byte) (*types.Transaction, error) {
	return _Listing.Contract.Challenge(&_Listing.TransactOpts, hash)
}
func (_Listing *ListingTransactorSession) Challenge(hash [32]byte) (*types.Transaction, error) {
	return _Listing.Contract.Challenge(&_Listing.TransactOpts, hash)
}
func (_Listing *ListingTransactor) ClaimAccessReward(opts *bind.TransactOpts, hash [32]byte) (*types.Transaction, error) {
	return _Listing.contract.Transact(opts, "claimAccessReward", hash)
}
func (_Listing *ListingSession) ClaimAccessReward(hash [32]byte) (*types.Transaction, error) {
	return _Listing.Contract.ClaimAccessReward(&_Listing.TransactOpts, hash)
}
func (_Listing *ListingTransactorSession) ClaimAccessReward(hash [32]byte) (*types.Transaction, error) {
	return _Listing.Contract.ClaimAccessReward(&_Listing.TransactOpts, hash)
}
func (_Listing *ListingTransactor) Exit(opts *bind.TransactOpts, hash [32]byte) (*types.Transaction, error) {
	return _Listing.contract.Transact(opts, "exit", hash)
}
func (_Listing *ListingSession) Exit(hash [32]byte) (*types.Transaction, error) {
	return _Listing.Contract.Exit(&_Listing.TransactOpts, hash)
}
func (_Listing *ListingTransactorSession) Exit(hash [32]byte) (*types.Transaction, error) {
	return _Listing.Contract.Exit(&_Listing.TransactOpts, hash)
}
func (_Listing *ListingTransactor) List(opts *bind.TransactOpts, hash [32]byte) (*types.Transaction, error) {
	return _Listing.contract.Transact(opts, "list", hash)
}
func (_Listing *ListingSession) List(hash [32]byte) (*types.Transaction, error) {
	return _Listing.Contract.List(&_Listing.TransactOpts, hash)
}
func (_Listing *ListingTransactorSession) List(hash [32]byte) (*types.Transaction, error) {
	return _Listing.Contract.List(&_Listing.TransactOpts, hash)
}
func (_Listing *ListingTransactor) ResolveApplication(opts *bind.TransactOpts, hash [32]byte) (*types.Transaction, error) {
	return _Listing.contract.Transact(opts, "resolveApplication", hash)
}
func (_Listing *ListingSession) ResolveApplication(hash [32]byte) (*types.Transaction, error) {
	return _Listing.Contract.ResolveApplication(&_Listing.TransactOpts, hash)
}
func (_Listing *ListingTransactorSession) ResolveApplication(hash [32]byte) (*types.Transaction, error) {
	return _Listing.Contract.ResolveApplication(&_Listing.TransactOpts, hash)
}
func (_Listing *ListingTransactor) ResolveChallenge(opts *bind.TransactOpts, hash [32]byte) (*types.Transaction, error) {
	return _Listing.contract.Transact(opts, "resolveChallenge", hash)
}
func (_Listing *ListingSession) ResolveChallenge(hash [32]byte) (*types.Transaction, error) {
	return _Listing.Contract.ResolveChallenge(&_Listing.TransactOpts, hash)
}
func (_Listing *ListingTransactorSession) ResolveChallenge(hash [32]byte) (*types.Transaction, error) {
	return _Listing.Contract.ResolveChallenge(&_Listing.TransactOpts, hash)
}
func (_Listing *ListingTransactor) WithdrawFromListing(opts *bind.TransactOpts, hash [32]byte, amount *big.Int) (*types.Transaction, error) {
	return _Listing.contract.Transact(opts, "withdrawFromListing", hash, amount)
}
func (_Listing *ListingSession) WithdrawFromListing(hash [32]byte, amount *big.Int) (*types.Transaction, error) {
	return _Listing.Contract.WithdrawFromListing(&_Listing.TransactOpts, hash, amount)
}
func (_Listing *ListingTransactorSession) WithdrawFromListing(hash [32]byte, amount *big.Int) (*types.Transaction, error) {
	return _Listing.Contract.WithdrawFromListing(&_Listing.TransactOpts, hash, amount)
}
type ListingAccessRewardClaimedIterator struct {
	Event *ListingAccessRewardClaimed  
	contract *bind.BoundContract  
	event    string               
	logs chan types.Log         
	sub  ethereum.Subscription  
	done bool                   
	fail error                  
}
func (it *ListingAccessRewardClaimedIterator) Next() bool {
	if it.fail != nil {
		return false
	}
	if it.done {
		select {
		case log := <-it.logs:
			it.Event = new(ListingAccessRewardClaimed)
			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
		}
	}
	select {
	case log := <-it.logs:
		it.Event = new(ListingAccessRewardClaimed)
		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()
	}
}
func (it *ListingAccessRewardClaimedIterator) Error() error {
	return it.fail
}
func (it *ListingAccessRewardClaimedIterator) Close() error {
	it.sub.Unsubscribe()
	return nil
}
type ListingAccessRewardClaimed struct {
	Hash     [32]byte
	MakerFee *big.Int
	Minted   *big.Int
	Raw      types.Log  
}
func (_Listing *ListingFilterer) FilterAccessRewardClaimed(opts *bind.FilterOpts, hash [][32]byte) (*ListingAccessRewardClaimedIterator, error) {
	var hashRule []interface{}
	for _, hashItem := range hash {
		hashRule = append(hashRule, hashItem)
	}
	logs, sub, err := _Listing.contract.FilterLogs(opts, "AccessRewardClaimed", hashRule)
	if err != nil {
		return nil, err
	}
	return &ListingAccessRewardClaimedIterator{contract: _Listing.contract, event: "AccessRewardClaimed", logs: logs, sub: sub}, nil
}
func (_Listing *ListingFilterer) WatchAccessRewardClaimed(opts *bind.WatchOpts, sink chan<- *ListingAccessRewardClaimed, hash [][32]byte) (event.Subscription, error) {
	var hashRule []interface{}
	for _, hashItem := range hash {
		hashRule = append(hashRule, hashItem)
	}
	logs, sub, err := _Listing.contract.WatchLogs(opts, "AccessRewardClaimed", hashRule)
	if err != nil {
		return nil, err
	}
	return event.NewSubscription(func(quit <-chan struct{}) error {
		defer sub.Unsubscribe()
		for {
			select {
			case log := <-logs:
				event := new(ListingAccessRewardClaimed)
				if err := _Listing.contract.UnpackLog(event, "AccessRewardClaimed", 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
}
type ListingApplicationFailedIterator struct {
	Event *ListingApplicationFailed  
	contract *bind.BoundContract  
	event    string               
	logs chan types.Log         
	sub  ethereum.Subscription  
	done bool                   
	fail error                  
}
func (it *ListingApplicationFailedIterator) Next() bool {
	if it.fail != nil {
		return false
	}
	if it.done {
		select {
		case log := <-it.logs:
			it.Event = new(ListingApplicationFailed)
			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
		}
	}
	select {
	case log := <-it.logs:
		it.Event = new(ListingApplicationFailed)
		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()
	}
}
func (it *ListingApplicationFailedIterator) Error() error {
	return it.fail
}
func (it *ListingApplicationFailedIterator) Close() error {
	it.sub.Unsubscribe()
	return nil
}
type ListingApplicationFailed struct {
	Hash      [32]byte
	Applicant common.Address
	Raw       types.Log  
}
func (_Listing *ListingFilterer) FilterApplicationFailed(opts *bind.FilterOpts, hash [][32]byte, applicant []common.Address) (*ListingApplicationFailedIterator, error) {
	var hashRule []interface{}
	for _, hashItem := range hash {
		hashRule = append(hashRule, hashItem)
	}
	var applicantRule []interface{}
	for _, applicantItem := range applicant {
		applicantRule = append(applicantRule, applicantItem)
	}
	logs, sub, err := _Listing.contract.FilterLogs(opts, "ApplicationFailed", hashRule, applicantRule)
	if err != nil {
		return nil, err
	}
	return &ListingApplicationFailedIterator{contract: _Listing.contract, event: "ApplicationFailed", logs: logs, sub: sub}, nil
}
func (_Listing *ListingFilterer) WatchApplicationFailed(opts *bind.WatchOpts, sink chan<- *ListingApplicationFailed, hash [][32]byte, applicant []common.Address) (event.Subscription, error) {
	var hashRule []interface{}
	for _, hashItem := range hash {
		hashRule = append(hashRule, hashItem)
	}
	var applicantRule []interface{}
	for _, applicantItem := range applicant {
		applicantRule = append(applicantRule, applicantItem)
	}
	logs, sub, err := _Listing.contract.WatchLogs(opts, "ApplicationFailed", hashRule, applicantRule)
	if err != nil {
		return nil, err
	}
	return event.NewSubscription(func(quit <-chan struct{}) error {
		defer sub.Unsubscribe()
		for {
			select {
			case log := <-logs:
				event := new(ListingApplicationFailed)
				if err := _Listing.contract.UnpackLog(event, "ApplicationFailed", 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
}
type ListingAppliedIterator struct {
	Event *ListingApplied  
	contract *bind.BoundContract  
	event    string               
	logs chan types.Log         
	sub  ethereum.Subscription  
	done bool                   
	fail error                  
}
func (it *ListingAppliedIterator) Next() bool {
	if it.fail != nil {
		return false
	}
	if it.done {
		select {
		case log := <-it.logs:
			it.Event = new(ListingApplied)
			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
		}
	}
	select {
	case log := <-it.logs:
		it.Event = new(ListingApplied)
		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()
	}
}
func (it *ListingAppliedIterator) Error() error {
	return it.fail
}
func (it *ListingAppliedIterator) Close() error {
	it.sub.Unsubscribe()
	return nil
}
type ListingApplied struct {
	Hash      [32]byte
	Applicant common.Address
	Raw       types.Log  
}
func (_Listing *ListingFilterer) FilterApplied(opts *bind.FilterOpts, hash [][32]byte, applicant []common.Address) (*ListingAppliedIterator, error) {
	var hashRule []interface{}
	for _, hashItem := range hash {
		hashRule = append(hashRule, hashItem)
	}
	var applicantRule []interface{}
	for _, applicantItem := range applicant {
		applicantRule = append(applicantRule, applicantItem)
	}
	logs, sub, err := _Listing.contract.FilterLogs(opts, "Applied", hashRule, applicantRule)
	if err != nil {
		return nil, err
	}
	return &ListingAppliedIterator{contract: _Listing.contract, event: "Applied", logs: logs, sub: sub}, nil
}
func (_Listing *ListingFilterer) WatchApplied(opts *bind.WatchOpts, sink chan<- *ListingApplied, hash [][32]byte, applicant []common.Address) (event.Subscription, error) {
	var hashRule []interface{}
	for _, hashItem := range hash {
		hashRule = append(hashRule, hashItem)
	}
	var applicantRule []interface{}
	for _, applicantItem := range applicant {
		applicantRule = append(applicantRule, applicantItem)
	}
	logs, sub, err := _Listing.contract.WatchLogs(opts, "Applied", hashRule, applicantRule)
	if err != nil {
		return nil, err
	}
	return event.NewSubscription(func(quit <-chan struct{}) error {
		defer sub.Unsubscribe()
		for {
			select {
			case log := <-logs:
				event := new(ListingApplied)
				if err := _Listing.contract.UnpackLog(event, "Applied", 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
}
type ListingChallengeFailedIterator struct {
	Event *ListingChallengeFailed  
	contract *bind.BoundContract  
	event    string               
	logs chan types.Log         
	sub  ethereum.Subscription  
	done bool                   
	fail error                  
}
func (it *ListingChallengeFailedIterator) Next() bool {
	if it.fail != nil {
		return false
	}
	if it.done {
		select {
		case log := <-it.logs:
			it.Event = new(ListingChallengeFailed)
			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
		}
	}
	select {
	case log := <-it.logs:
		it.Event = new(ListingChallengeFailed)
		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()
	}
}