// Code generated - DO NOT EDIT.
// This file is a generated binding and any manual changes will be lost.

package contract

import (
	"errors"
	"math/big"
	"strings"

	ethereum "github.com/juncachain/juncachain"
	"github.com/juncachain/juncachain/accounts/abi"
	"github.com/juncachain/juncachain/accounts/abi/bind"
	"github.com/juncachain/juncachain/common"
	"github.com/juncachain/juncachain/core/types"
	"github.com/juncachain/juncachain/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
)

// JuncaswapFactoryMetaData contains all meta data concerning the JuncaswapFactory contract.
var JuncaswapFactoryMetaData = &bind.MetaData{
	ABI: "[{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_feeToSetter\",\"type\":\"address\"}],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"token0\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"token1\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"pair\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"name\":\"PairCreated\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"token0\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"token1\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"pair\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"name\":\"PairCreated\",\"type\":\"event\"},{\"constant\":true,\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"name\":\"allPairs\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"allPairsLength\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"internalType\":\"address\",\"name\":\"tokenA\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"tokenB\",\"type\":\"address\"},{\"internalType\":\"bool\",\"name\":\"_gasless\",\"type\":\"bool\"}],\"name\":\"createPair\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"pair\",\"type\":\"address\"}],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"feeTo\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"feeToSetter\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"gasPerTx\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"getCodeHash\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"payable\":false,\"stateMutability\":\"pure\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"name\":\"getPair\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"internalType\":\"address\",\"name\":\"_feeTo\",\"type\":\"address\"}],\"name\":\"setFeeTo\",\"outputs\":[],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"internalType\":\"address\",\"name\":\"_feeToSetter\",\"type\":\"address\"}],\"name\":\"setFeeToSetter\",\"outputs\":[],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_gasPerTx\",\"type\":\"uint256\"}],\"name\":\"setGasPerTx\",\"outputs\":[],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"}]",
	Bin: "0x60806040526611c37937e0800060025534801561001b57600080fd5b506040516135093803806135098339818101604052602081101561003e57600080fd5b5051600180546001600160a01b0319166001600160a01b0390921691909117905561349b8061006e6000396000f3fe608060405234801561001057600080fd5b50600436106100a95760003560e01c80635d96feb1116100715780635d96feb11461011957806382dfdce41461013857806383dd41c614610170578063a2e74af614610178578063e6a439051461019e578063f46901ed146101cc576100a9565b8063017e7e58146100ae578063094b7415146100d25780631e3dd18b146100da5780633fe43f40146100f7578063574f2ba314610111575b600080fd5b6100b66101f2565b604080516001600160a01b039092168252519081900360200190f35b6100b6610201565b6100b6600480360360208110156100f057600080fd5b5035610210565b6100ff610237565b60408051918252519081900360200190f35b6100ff61023d565b6101366004803603602081101561012f57600080fd5b5035610243565b005b6100b66004803603606081101561014e57600080fd5b506001600160a01b0381358116916020810135909116906040013515156102a0565b6100ff6105f1565b6101366004803603602081101561018e57600080fd5b50356001600160a01b0316610623565b6100b6600480360360408110156101b457600080fd5b506001600160a01b038135811691602001351661069d565b610136600480360360208110156101e257600080fd5b50356001600160a01b03166106c3565b6000546001600160a01b031681565b6001546001600160a01b031681565b6004818154811061021d57fe5b6000918252602090912001546001600160a01b0316905081565b60025481565b60045490565b6001546001600160a01b0316331461029b576040805162461bcd60e51b8152602060048201526016602482015275253ab731b0b9bbb0b82b191d102327a92124a22222a760511b604482015290519081900360640190fd5b600255565b6000826001600160a01b0316846001600160a01b03161415610309576040805162461bcd60e51b815260206004820181905260248201527f4a756e63617377617056323a204944454e544943414c5f414444524553534553604482015290519081900360640190fd5b600080846001600160a01b0316866001600160a01b03161061032c57848661032f565b85855b90925090506001600160a01b03821661038f576040805162461bcd60e51b815260206004820152601960248201527f4a756e63617377617056323a205a45524f5f4144445245535300000000000000604482015290519081900360640190fd5b6001600160a01b03828116600090815260036020908152604080832085851684529091529020541615610409576040805162461bcd60e51b815260206004820152601860248201527f4a756e63617377617056323a20504149525f4558495354530000000000000000604482015290519081900360640190fd5b60606040518060200161041b9061073d565b6020820181038252601f19601f8201166040525090506000838360405160200180836001600160a01b03166001600160a01b031660601b8152601401826001600160a01b03166001600160a01b031660601b815260140192505050604051602081830303815290604052805190602001209050808251602084016000f560408051633fb3e5cd60e21b81526001600160a01b0387811660048301528681166024830152336044830152891515606483015291519297509087169163fecf97349160848082019260009290919082900301818387803b1580156104fc57600080fd5b505af1158015610510573d6000803e3d6000fd5b5050506001600160a01b0380861660008181526003602081815260408084208a87168086529083528185208054978e166001600160a01b031998891681179091559383528185208686528352818520805488168517905560048054600181018255958190527f8a35acfbc15ff81a39ae7d344fd709f28e8600b4aa8c65c6b64bfe7fe36bd19b9095018054909716841790965592548351928352908201528a151581830152905192935090917f30fcf386678f0a00ca73486610fda45a0bd09cb9ede7e2e5078f4c842f21b1da9181900360600190a3505050509392505050565b6000604051806020016106039061073d565b6020820181038252601f19601f8201166040525080519060200120905090565b6001546001600160a01b0316331461067b576040805162461bcd60e51b8152602060048201526016602482015275253ab731b0b9bbb0b82b191d102327a92124a22222a760511b604482015290519081900360640190fd5b600180546001600160a01b0319166001600160a01b0392909216919091179055565b60036020908152600092835260408084209091529082529020546001600160a01b031681565b6001546001600160a01b0316331461071b576040805162461bcd60e51b8152602060048201526016602482015275253ab731b0b9bbb0b82b191d102327a92124a22222a760511b604482015290519081900360640190fd5b600080546001600160a01b0319166001600160a01b0392909216919091179055565b612d1c8061074b8339019056fe60806040526001600c55670de0b6b3a7640000600e5534801561002157600080fd5b506040514690806052612cca8239604080519182900360520182208282018252600983526804a756e6361737761760bc1b6020938401528151808301835260018152603160f81b908401528151808401919091527f264c154eeef56d3848be68170b1728390c8488187af6632050762da8dfe77213818301527fc89efdaa54c0f20c7adf612882df0950f5a951637e0307cdcb4c672f298b8bc6606082015260808101949094523060a0808601919091528151808603909101815260c09094019052825192019190912060035550600580546001600160a01b03191633179055612bba806101106000396000f3fe6080604052600436106102045760003560e01c80635a3d549311610118578063bc25cf77116100a0578063dd62ed3e1161006f578063dd62ed3e1461075e578063df49804a14610799578063f96cab27146107ae578063fecf9734146107de578063fff6cae91461082957610204565b8063bc25cf77146106a3578063c45a0155146106d6578063d21220a7146106eb578063d505accf1461070057610204565b80637ecebe00116100e75780637ecebe00146105c157806389afcb44146105f457806395d89b4114610640578063a9059cbb14610655578063ba9a7a561461068e57610204565b80635a3d5493146105315780636a6278421461054657806370a08231146105795780637464fc3d146105ac57610204565b8063264adff81161019b5780633619c6691161016a5780633619c669146104c85780633644e515146104dd578063391e0cc8146104f25780633fe43f40146105075780635909c0d51461051c57610204565b8063264adff8146102045780632ddb301b1461047357806330adf81f14610488578063313ce5671461049d57610204565b80630dfe1681116101d75780630dfe1681146103c357806318160ddd146103f45780631d1438481461041b57806323b872dd1461043057610204565b8063022c0d9f1461020e57806306fdde03146102a75780630902f1ac14610331578063095ea7b314610376575b61020c61083e565b005b34801561021a57600080fd5b5061020c6004803603608081101561023157600080fd5b8135916020810135916001600160a01b03604083013516919081019060808101606082013564010000000081111561026857600080fd5b82018360208201111561027a57600080fd5b8035906020019184600183028401116401000000008311171561029c57600080fd5b5090925090506108b8565b3480156102b357600080fd5b506102bc611096565b6040805160208082528351818301528351919283929083019185019080838360005b838110156102f65781810151838201526020016102de565b50505050905090810190601f1680156103235780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b34801561033d57600080fd5b506103466110bb565b604080516001600160701b03948516815292909316602083015263ffffffff168183015290519081900360600190f35b34801561038257600080fd5b506103af6004803603604081101561039957600080fd5b506001600160a01b0381351690602001356110e5565b604080519115158252519081900360200190f35b3480156103cf57600080fd5b506103d86110fc565b604080516001600160a01b039092168252519081900360200190f35b34801561040057600080fd5b5061040961110b565b60408051918252519081900360200190f35b34801561042757600080fd5b506103d8611111565b34801561043c57600080fd5b506103af6004803603606081101561045357600080fd5b506001600160a01b03813581169160208101359091169060400135611125565b34801561047f57600080fd5b506104096111bf565b34801561049457600080fd5b506104096111c4565b3480156104a957600080fd5b506104b26111e8565b6040805160ff9092168252519081900360200190f35b3480156104d457600080fd5b506104096111ed565b3480156104e957600080fd5b506104096111f3565b3480156104fe57600080fd5b506103af6111f9565b34801561051357600080fd5b50610409611202565b34801561052857600080fd5b50610409611297565b34801561053d57600080fd5b5061040961129d565b34801561055257600080fd5b506104096004803603602081101561056957600080fd5b50356001600160a01b03166112a3565b34801561058557600080fd5b506104096004803603602081101561059c57600080fd5b50356001600160a01b031661165f565b3480156105b857600080fd5b50610409611671565b3480156105cd57600080fd5b50610409600480360360208110156105e457600080fd5b50356001600160a01b0316611677565b34801561060057600080fd5b506106276004803603602081101561061757600080fd5b50356001600160a01b0316611689565b6040805192835260208301919091528051918290030190f35b34801561064c57600080fd5b506102bc611aeb565b34801561066157600080fd5b506103af6004803603604081101561067857600080fd5b506001600160a01b038135169060200135611b0f565b34801561069a57600080fd5b50610409611b1c565b3480156106af57600080fd5b5061020c600480360360208110156106c657600080fd5b50356001600160a01b0316611b22565b3480156106e257600080fd5b506103d8611c8f565b3480156106f757600080fd5b506103d8611c9e565b34801561070c57600080fd5b5061020c600480360360e081101561072357600080fd5b506001600160a01b03813581169160208101359091169060408101359060608101359060ff6080820135169060a08101359060c00135611cad565b34801561076a57600080fd5b506104096004803603604081101561078157600080fd5b506001600160a01b0381358116916020013516611eb1565b3480156107a557600080fd5b50610627611ece565b3480156107ba57600080fd5b5061020c600480360360408110156107d157600080fd5b5080359060200135611ed8565b3480156107ea57600080fd5b5061020c6004803603608081101561080157600080fd5b506001600160a01b038135811691602081013582169160408201351690606001351515611f41565b34801561083557600080fd5b5061020c611ff3565b670de0b6b3a764000034101580156108585750600d5460ff165b610895576040805162461bcd60e51b81526020600482015260096024820152682327a92124a22222a760b91b604482015290519081900360640190fd5b600e5447116108b657600d8054610100600160a81b03191633610100021790555b565b600c54600114610905576040805162461bcd60e51b8152602060048201526013602482015272129d5b98d85cddd85c158c8e881313d0d2d151606a1b604482015290519081900360640190fd5b6000600c55600d5460ff1615610967576f4a756e636173776170526f75746572323314610967576040805162461bcd60e51b815260206004820152601d6024820152600080516020612b1d833981519152604482015290519081900360640190fd5b600d5460ff166109c4576f4a756e636173776170526f75746572323314156109c4576040805162461bcd60e51b815260206004820152601d6024820152600080516020612b1d833981519152604482015290519081900360640190fd5b60008511806109d35750600084115b610a0e5760405162461bcd60e51b8152600401808060200182810382526027815260200180612aa26027913960400191505060405180910390fd5b600080610a196110bb565b5091509150816001600160701b031687108015610a3e5750806001600160701b031686105b610a795760405162461bcd60e51b8152600401808060200182810382526023815260200180612b3d6023913960400191505060405180910390fd5b600d5460ff1615610b7b576005546040805162ff90fd60e61b815290516000926001600160a01b031691633fe43f40916004808301926020929190829003018186803b158015610ac857600080fd5b505afa158015610adc573d6000803e3d6000fd5b505050506040513d6020811015610af257600080fd5b5051905047811115610b4b576040805162461bcd60e51b815260206004820152601d60248201527f4a756e63617377617056323a2047415320494e53554646494349454e54000000604482015290519081900360640190fd5b604051419082156108fc029083906000818181858888f19350505050158015610b78573d6000803e3d6000fd5b50505b60065460075460009182916001600160a01b03918216919081169089168214801590610bb95750806001600160a01b0316896001600160a01b031614155b610c0a576040805162461bcd60e51b815260206004820152601760248201527f4a756e63617377617056323a20494e56414c49445f544f000000000000000000604482015290519081900360640190fd5b8a15610c1b57610c1b828a8d612157565b8915610c2c57610c2c818a8c612157565b8615610ce757886001600160a01b031663a7de6e5b338d8d8c8c6040518663ffffffff1660e01b815260040180866001600160a01b03166001600160a01b03168152602001858152602001848152602001806020018281038252848482818152602001925080828437600081840152601f19601f8201169050808301925050509650505050505050600060405180830381600087803b158015610cce57600080fd5b505af1158015610ce2573d6000803e3d6000fd5b505050505b604080516370a0823160e01b815230600482015290516001600160a01b038416916370a08231916024808301926020929190829003018186803b158015610d2d57600080fd5b505afa158015610d41573d6000803e3d6000fd5b505050506040513d6020811015610d5757600080fd5b5051604080516370a0823160e01b815230600482015290519195506001600160a01b038316916370a0823191602480820192602092909190829003018186803b158015610da357600080fd5b505afa158015610db7573d6000803e3d6000fd5b505050506040513d6020811015610dcd57600080fd5b5051925060009150506001600160701b0385168a90038311610df0576000610dff565b89856001600160701b03160383035b9050600089856001600160701b0316038311610e1c576000610e2b565b89856001600160701b03160383035b90506000821180610e3c5750600081115b610e775760405162461bcd60e51b8152600401808060200182810382526026815260200180612b606026913960400191505060405180910390fd5b600d5460ff168015610e895750600082115b15610ee457600f548211610ee4576040805162461bcd60e51b815260206004820152601e60248201527f4a756e63617377617056323a494e5055545f414d4f554e545f4c494d49540000604482015290519081900360640190fd5b600d5460ff168015610ef65750600081115b15610f51576010548111610f51576040805162461bcd60e51b815260206004820152601e60248201527f4a756e63617377617056323a494e5055545f414d4f554e545f4c494d49540000604482015290519081900360640190fd5b6000610f85610f6784600363ffffffff6122f116565b610f79876103e863ffffffff6122f116565b9063ffffffff61235416565b90506000610f9d610f6784600363ffffffff6122f116565b9050610fce620f4240610fc26001600160701b038b8116908b1663ffffffff6122f116565b9063ffffffff6122f116565b610fde838363ffffffff6122f116565b1015611022576040805162461bcd60e51b815260206004820152600e60248201526d4a756e63617377617056323a204b60901b604482015290519081900360640190fd5b5050611030848488886123a4565b60408051838152602081018390528082018d9052606081018c905290516001600160a01b038b169133917fd78ad95fa46c994b6551d0da85fc275fe613ce37657fb8d5e3d130840159d8229181900360800190a350506001600c55505050505050505050565b6040518060400160405280600981526020016804a756e6361737761760bc1b81525081565b6008546001600160701b0380821692600160701b830490911691600160e01b900463ffffffff1690565b60006110f233848461256b565b5060015b92915050565b6006546001600160a01b031681565b60005481565b600d5461010090046001600160a01b031681565b6001600160a01b0383166000908152600260209081526040808320338452909152812054600019146111aa576001600160a01b0384166000908152600260209081526040808320338452909152902054611185908363ffffffff61235416565b6001600160a01b03851660009081526002602090815260408083203384529091529020555b6111b58484846125cd565b5060019392505050565b475b90565b7f6e71edae12b1b97f4d1f60370fef10105fa2faae0126114a169c64845d6126c981565b601281565b600e5481565b60035481565b600d5460ff1681565b600d5460009060ff161561129157600560009054906101000a90046001600160a01b03166001600160a01b0316633fe43f406040518163ffffffff1660e01b815260040160206040518083038186803b15801561125e57600080fd5b505afa158015611272573d6000803e3d6000fd5b505050506040513d602081101561128857600080fd5b505190506111c1565b50600090565b60095481565b600a5481565b6000600c546001146112f2576040805162461bcd60e51b8152602060048201526013602482015272129d5b98d85cddd85c158c8e881313d0d2d151606a1b604482015290519081900360640190fd5b6000600c55600d5460ff1615611354576f4a756e636173776170526f75746572323314611354576040805162461bcd60e51b815260206004820152601d6024820152600080516020612b1d833981519152604482015290519081900360640190fd5b600d5460ff166113b1576f4a756e636173776170526f75746572323314156113b1576040805162461bcd60e51b815260206004820152601d6024820152600080516020612b1d833981519152604482015290519081900360640190fd5b6000806113bc6110bb565b50600654604080516370a0823160e01b815230600482015290519395509193506000926001600160a01b03909116916370a08231916024808301926020929190829003018186803b15801561141057600080fd5b505afa158015611424573d6000803e3d6000fd5b505050506040513d602081101561143a57600080fd5b5051600754604080516370a0823160e01b815230600482015290519293506000926001600160a01b03909216916370a0823191602480820192602092909190829003018186803b15801561148d57600080fd5b505afa1580156114a1573d6000803e3d6000fd5b505050506040513d60208110156114b757600080fd5b5051905060006114d6836001600160701b03871663ffffffff61235416565b905060006114f3836001600160701b03871663ffffffff61235416565b905060006115018787612687565b6000549091508061153e5761152a6103e8610f79611525878763ffffffff6122f116565b61287d565b985061153960006103e86128cf565b61158d565b61158a6001600160701b03891661155b868463ffffffff6122f116565b8161156257fe5b046001600160701b03891661157d868563ffffffff6122f116565b8161158457fe5b04612965565b98505b600089116115cc5760405162461bcd60e51b815260040180806020018281038252602a815260200180612af3602a913960400191505060405180910390fd5b6115d68a8a6128cf565b6115e286868a8a6123a4565b81156116125760085461160e906001600160701b0380821691600160701b90041663ffffffff6122f116565b600b555b6040805185815260208101859052815133927f4c209b5fc8ad50758f13e2e1088ba56a560dff690a1c6fef26394f4c03821c4f928290030190a250506001600c5550949695505050505050565b60016020526000908152604090205481565b600b5481565b60046020526000908152604090205481565b600080600c546001146116d9576040805162461bcd60e51b8152602060048201526013602482015272129d5b98d85cddd85c158c8e881313d0d2d151606a1b604482015290519081900360640190fd5b6000600c55600d5460ff161561173b576f4a756e636173776170526f7574657232331461173b576040805162461bcd60e51b815260206004820152601d6024820152600080516020612b1d833981519152604482015290519081900360640190fd5b600d5460ff16611798576f4a756e636173776170526f7574657232331415611798576040805162461bcd60e51b815260206004820152601d6024820152600080516020612b1d833981519152604482015290519081900360640190fd5b6000806117a36110bb565b50600654600754604080516370a0823160e01b815230600482015290519496509294506001600160a01b039182169391169160009184916370a08231916024808301926020929190829003018186803b1580156117ff57600080fd5b505afa158015611813573d6000803e3d6000fd5b505050506040513d602081101561182957600080fd5b5051604080516370a0823160e01b815230600482015290519192506000916001600160a01b038516916370a08231916024808301926020929190829003018186803b15801561187757600080fd5b505afa15801561188b573d6000803e3d6000fd5b505050506040513d60208110156118a157600080fd5b5051306000908152600160205260408120549192506118c08888612687565b600054909150806118d7848763ffffffff6122f116565b816118de57fe5b049a50806118f2848663ffffffff6122f116565b816118f957fe5b04995060008b11801561190c575060008a115b6119475760405162461bcd60e51b815260040180806020018281038252602a815260200180612ac9602a913960400191505060405180910390fd5b611951308461297d565b61195c878d8d612157565b611967868d8c612157565b604080516370a0823160e01b815230600482015290516001600160a01b038916916370a08231916024808301926020929190829003018186803b1580156119ad57600080fd5b505afa1580156119c1573d6000803e3d6000fd5b505050506040513d60208110156119d757600080fd5b5051604080516370a0823160e01b815230600482015290519196506001600160a01b038816916370a0823191602480820192602092909190829003018186803b158015611a2357600080fd5b505afa158015611a37573d6000803e3d6000fd5b505050506040513d6020811015611a4d57600080fd5b50519350611a5d85858b8b6123a4565b8115611a8d57600854611a89906001600160701b0380821691600160701b90041663ffffffff6122f116565b600b555b604080518c8152602081018c905281516001600160a01b038f169233927fdccd412f0b1252819cb1fd330b93224ca42612892bb3f4f789976e6d81936496929081900390910190a35050505050505050506001600c81905550915091565b6040518060400160405280600881526020016704a756e63612d4c560c41b81525081565b60006110f23384846125cd565b6103e881565b600c54600114611b6f576040805162461bcd60e51b8152602060048201526013602482015272129d5b98d85cddd85c158c8e881313d0d2d151606a1b604482015290519081900360640190fd5b6000600c55600654600754600854604080516370a0823160e01b815230600482015290516001600160a01b039485169490931692611c1e9285928792611c19926001600160701b03169185916370a0823191602480820192602092909190829003018186803b158015611be157600080fd5b505afa158015611bf5573d6000803e3d6000fd5b505050506040513d6020811015611c0b57600080fd5b50519063ffffffff61235416565b612157565b600854604080516370a0823160e01b81523060048201529051611c859284928792611c1992600160701b90046001600160701b0316916001600160a01b038616916370a0823191602480820192602092909190829003018186803b158015611be157600080fd5b50506001600c5550565b6005546001600160a01b031681565b6007546001600160a01b031681565b42841015611cf9576040805162461bcd60e51b8152602060048201526014602482015273129d5b98d85cddd85c158c8e881156141254915160621b604482015290519081900360640190fd5b6003546001600160a01b0380891660008181526004602090815260408083208054600180820190925582517f6e71edae12b1b97f4d1f60370fef10105fa2faae0126114a169c64845d6126c98186015280840196909652958d166060860152608085018c905260a085019590955260c08085018b90528151808603909101815260e08501825280519083012061190160f01b6101008601526101028501969096526101228085019690965280518085039096018652610142840180825286519683019690962095839052610162840180825286905260ff89166101828501526101a284018890526101c28401879052519193926101e280820193601f1981019281900390910190855afa158015611e14573d6000803e3d6000fd5b5050604051601f1901519150506001600160a01b03811615801590611e4a5750886001600160a01b0316816001600160a01b0316145b611e9b576040805162461bcd60e51b815260206004820152601e60248201527f4a756e63617377617056323a20494e56414c49445f5349474e41545552450000604482015290519081900360640190fd5b611ea689898961256b565b505050505050505050565b600260209081526000928352604080842090915290825290205481565b600f546010549091565b600d5461010090046001600160a01b031633148015611ef95750600d5460ff165b611f36576040805162461bcd60e51b81526020600482015260096024820152682327a92124a22222a760b91b604482015290519081900360640190fd5b600f91909155601055565b6005546001600160a01b03163314611f99576040805162461bcd60e51b8152602060048201526016602482015275253ab731b0b9bbb0b82b191d102327a92124a22222a760511b604482015290519081900360640190fd5b600680546001600160a01b03199081166001600160a01b03968716179091556007805490911693851693909317909255600d8054610100600160a81b03191661010092909416919091029290921760ff1916901515179055565b600c54600114612040576040805162461bcd60e51b8152602060048201526013602482015272129d5b98d85cddd85c158c8e881313d0d2d151606a1b604482015290519081900360640190fd5b6000600c55600654604080516370a0823160e01b81523060048201529051612150926001600160a01b0316916370a08231916024808301926020929190829003018186803b15801561209157600080fd5b505afa1580156120a5573d6000803e3d6000fd5b505050506040513d60208110156120bb57600080fd5b5051600754604080516370a0823160e01b815230600482015290516001600160a01b03909216916370a0823191602480820192602092909190829003018186803b15801561210857600080fd5b505afa15801561211c573d6000803e3d6000fd5b505050506040513d602081101561213257600080fd5b50516008546001600160701b0380821691600160701b9004166123a4565b6001600c55565b604080518082018252601981527f7472616e7366657228616464726573732c75696e74323536290000000000000060209182015281516001600160a01b0385811660248301526044808301869052845180840390910181526064909201845291810180516001600160e01b031663a9059cbb60e01b1781529251815160009460609489169392918291908083835b602083106122045780518252601f1990920191602091820191016121e5565b6001836020036101000a0380198251168184511680821785525050505050509050019150506000604051808303816000865af19150503d8060008114612266576040519150601f19603f3d011682016040523d82523d6000602084013e61226b565b606091505b5091509150818015612299575080511580612299575080806020019051602081101561229657600080fd5b50515b6122ea576040805162461bcd60e51b815260206004820152601c60248201527f4a756e63617377617056323a205452414e534645525f4641494c454400000000604482015290519081900360640190fd5b5050505050565b600081158061230c5750508082028282828161230957fe5b04145b6110f6576040805162461bcd60e51b815260206004820152601460248201527364732d6d6174682d6d756c2d6f766572666c6f7760601b604482015290519081900360640190fd5b808203828111156110f6576040805162461bcd60e51b815260206004820152601560248201527464732d6d6174682d7375622d756e646572666c6f7760581b604482015290519081900360640190fd5b6001600160701b0384118015906123c257506001600160701b038311155b61240b576040805162461bcd60e51b81526020600482015260156024820152744a756e63617377617056323a204f564552464c4f5760581b604482015290519081900360640190fd5b60085463ffffffff42811691600160e01b9004811682039081161580159061243b57506001600160701b03841615155b801561244f57506001600160701b03831615155b156124c0578063ffffffff1661247d8561246886612a1b565b6001600160e01b03169063ffffffff612a2d16565b600980546001600160e01b03929092169290920201905563ffffffff81166124a88461246887612a1b565b600a80546001600160e01b0392909216929092020190555b600880546dffffffffffffffffffffffffffff19166001600160701b03888116919091176dffffffffffffffffffffffffffff60701b1916600160701b8883168102919091176001600160e01b0316600160e01b63ffffffff871602179283905560408051848416815291909304909116602082015281517f1c411e9a96e071241c2f21f7726b17ae89e3cab4c78be50e062b03a9fffbbad1929181900390910190a1505050505050565b6001600160a01b03808416600081815260026020908152604080832094871680845294825291829020859055815185815291517f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9259281900390910190a3505050565b6001600160a01b0383166000908152600160205260409020546125f6908263ffffffff61235416565b6001600160a01b03808516600090815260016020526040808220939093559084168152205461262b908263ffffffff612a5216565b6001600160a01b0380841660008181526001602090815260409182902094909455805185815290519193928716927fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef92918290030190a3505050565b600080600560009054906101000a90046001600160a01b03166001600160a01b031663017e7e586040518163ffffffff1660e01b815260040160206040518083038186803b1580156126d857600080fd5b505afa1580156126ec573d6000803e3d6000fd5b505050506040513d602081101561270257600080fd5b5051600b546001600160a01b0382161580159450919250906128695780156128645760006127456115256001600160701b0388811690881663ffffffff6122f116565b905060006127528361287d565b9050808211156128615760006127856005610fc2612776868663ffffffff61235416565b6000549063ffffffff6122f116565b905060006127ba61279d84600563ffffffff6122f116565b6127ae86601963ffffffff6122f116565b9063ffffffff612a5216565b905060008183816127c757fe5b04905080156127da576127da87826128cf565b5050600d5460ff16159050612861576000612803600a610fc2612776868663ffffffff61235416565b9050600061282c61281b84600a63ffffffff6122f116565b6127ae86601463ffffffff6122f116565b9050600081838161283957fe5b049050801561285d57600d5461285d9061010090046001600160a01b0316826128cf565b5050505b50505b612875565b8015612875576000600b555b505092915050565b600060038211156128c0575080600160028204015b818110156128ba578091506002818285816128a957fe5b0401816128b257fe5b049050612892565b506128ca565b81156128ca575060015b919050565b6000546128e2908263ffffffff612a5216565b60009081556001600160a01b03831681526001602052604090205461290d908263ffffffff612a5216565b6001600160a01b03831660008181526001602090815260408083209490945583518581529351929391927fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9281900390910190a35050565b60008183106129745781612976565b825b9392505050565b6001600160a01b0382166000908152600160205260409020546129a6908263ffffffff61235416565b6001600160a01b038316600090815260016020526040812091909155546129d3908263ffffffff61235416565b60009081556040805183815290516001600160a01b038516917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef919081900360200190a35050565b6001600160701b0316600160701b0290565b60006001600160701b0382166001600160e01b03841681612a4a57fe5b049392505050565b808201828110156110f6576040805162461bcd60e51b815260206004820152601460248201527364732d6d6174682d6164642d6f766572666c6f7760601b604482015290519081900360640190fdfe4a756e63617377617056323a20494e53554646494349454e545f4f55545055545f414d4f554e544a756e63617377617056323a20494e53554646494349454e545f4c49515549444954595f4255524e45444a756e63617377617056323a20494e53554646494349454e545f4c49515549444954595f4d494e5445444a756e63617377617056323a2043414c4c455220464f5242494444454e0000004a756e63617377617056323a20494e53554646494349454e545f4c49515549444954594a756e63617377617056323a20494e53554646494349454e545f494e5055545f414d4f554e54a265627a7a723158200adbbfb50eb0c9ac0192870e0d63ea010d0e3665dcb44d76032f40c4f819f32f64736f6c63430005100032454950373132446f6d61696e28737472696e67206e616d652c737472696e672076657273696f6e2c75696e7432353620636861696e49642c6164647265737320766572696679696e67436f6e747261637429a265627a7a72315820fa8b75cca4550c1867f5c2b403d5a803973dfda4ab1866d640a20b35d3960c5864736f6c63430005100032",
}

// JuncaswapFactoryABI is the input ABI used to generate the binding from.
// Deprecated: Use JuncaswapFactoryMetaData.ABI instead.
var JuncaswapFactoryABI = JuncaswapFactoryMetaData.ABI

// JuncaswapFactoryBin is the compiled bytecode used for deploying new contracts.
// Deprecated: Use JuncaswapFactoryMetaData.Bin instead.
var JuncaswapFactoryBin = JuncaswapFactoryMetaData.Bin

// DeployJuncaswapFactory deploys a new Ethereum contract, binding an instance of JuncaswapFactory to it.
func DeployJuncaswapFactory(auth *bind.TransactOpts, backend bind.ContractBackend, _feeToSetter common.Address) (common.Address, *types.Transaction, *JuncaswapFactory, error) {
	parsed, err := JuncaswapFactoryMetaData.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(JuncaswapFactoryBin), backend, _feeToSetter)
	if err != nil {
		return common.Address{}, nil, nil, err
	}
	return address, tx, &JuncaswapFactory{JuncaswapFactoryCaller: JuncaswapFactoryCaller{contract: contract}, JuncaswapFactoryTransactor: JuncaswapFactoryTransactor{contract: contract}, JuncaswapFactoryFilterer: JuncaswapFactoryFilterer{contract: contract}}, nil
}

// JuncaswapFactory is an auto generated Go binding around an Ethereum contract.
type JuncaswapFactory struct {
	JuncaswapFactoryCaller     // Read-only binding to the contract
	JuncaswapFactoryTransactor // Write-only binding to the contract
	JuncaswapFactoryFilterer   // Log filterer for contract events
}

// JuncaswapFactoryCaller is an auto generated read-only Go binding around an Ethereum contract.
type JuncaswapFactoryCaller struct {
	contract *bind.BoundContract // Generic contract wrapper for the low level calls
}

// JuncaswapFactoryTransactor is an auto generated write-only Go binding around an Ethereum contract.
type JuncaswapFactoryTransactor struct {
	contract *bind.BoundContract // Generic contract wrapper for the low level calls
}

// JuncaswapFactoryFilterer is an auto generated log filtering Go binding around an Ethereum contract events.
type JuncaswapFactoryFilterer struct {
	contract *bind.BoundContract // Generic contract wrapper for the low level calls
}

// JuncaswapFactorySession is an auto generated Go binding around an Ethereum contract,
// with pre-set call and transact options.
type JuncaswapFactorySession struct {
	Contract     *JuncaswapFactory // 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
}

// JuncaswapFactoryCallerSession is an auto generated read-only Go binding around an Ethereum contract,
// with pre-set call options.
type JuncaswapFactoryCallerSession struct {
	Contract *JuncaswapFactoryCaller // Generic contract caller binding to set the session for
	CallOpts bind.CallOpts           // Call options to use throughout this session
}

// JuncaswapFactoryTransactorSession is an auto generated write-only Go binding around an Ethereum contract,
// with pre-set transact options.
type JuncaswapFactoryTransactorSession struct {
	Contract     *JuncaswapFactoryTransactor // Generic contract transactor binding to set the session for
	TransactOpts bind.TransactOpts           // Transaction auth options to use throughout this session
}

// JuncaswapFactoryRaw is an auto generated low-level Go binding around an Ethereum contract.
type JuncaswapFactoryRaw struct {
	Contract *JuncaswapFactory // Generic contract binding to access the raw methods on
}

// JuncaswapFactoryCallerRaw is an auto generated low-level read-only Go binding around an Ethereum contract.
type JuncaswapFactoryCallerRaw struct {
	Contract *JuncaswapFactoryCaller // Generic read-only contract binding to access the raw methods on
}

// JuncaswapFactoryTransactorRaw is an auto generated low-level write-only Go binding around an Ethereum contract.
type JuncaswapFactoryTransactorRaw struct {
	Contract *JuncaswapFactoryTransactor // Generic write-only contract binding to access the raw methods on
}

// NewJuncaswapFactory creates a new instance of JuncaswapFactory, bound to a specific deployed contract.
func NewJuncaswapFactory(address common.Address, backend bind.ContractBackend) (*JuncaswapFactory, error) {
	contract, err := bindJuncaswapFactory(address, backend, backend, backend)
	if err != nil {
		return nil, err
	}
	return &JuncaswapFactory{JuncaswapFactoryCaller: JuncaswapFactoryCaller{contract: contract}, JuncaswapFactoryTransactor: JuncaswapFactoryTransactor{contract: contract}, JuncaswapFactoryFilterer: JuncaswapFactoryFilterer{contract: contract}}, nil
}

// NewJuncaswapFactoryCaller creates a new read-only instance of JuncaswapFactory, bound to a specific deployed contract.
func NewJuncaswapFactoryCaller(address common.Address, caller bind.ContractCaller) (*JuncaswapFactoryCaller, error) {
	contract, err := bindJuncaswapFactory(address, caller, nil, nil)
	if err != nil {
		return nil, err
	}
	return &JuncaswapFactoryCaller{contract: contract}, nil
}

// NewJuncaswapFactoryTransactor creates a new write-only instance of JuncaswapFactory, bound to a specific deployed contract.
func NewJuncaswapFactoryTransactor(address common.Address, transactor bind.ContractTransactor) (*JuncaswapFactoryTransactor, error) {
	contract, err := bindJuncaswapFactory(address, nil, transactor, nil)
	if err != nil {
		return nil, err
	}
	return &JuncaswapFactoryTransactor{contract: contract}, nil
}

// NewJuncaswapFactoryFilterer creates a new log filterer instance of JuncaswapFactory, bound to a specific deployed contract.
func NewJuncaswapFactoryFilterer(address common.Address, filterer bind.ContractFilterer) (*JuncaswapFactoryFilterer, error) {
	contract, err := bindJuncaswapFactory(address, nil, nil, filterer)
	if err != nil {
		return nil, err
	}
	return &JuncaswapFactoryFilterer{contract: contract}, nil
}

// bindJuncaswapFactory binds a generic wrapper to an already deployed contract.
func bindJuncaswapFactory(address common.Address, caller bind.ContractCaller, transactor bind.ContractTransactor, filterer bind.ContractFilterer) (*bind.BoundContract, error) {
	parsed, err := abi.JSON(strings.NewReader(JuncaswapFactoryABI))
	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 (_JuncaswapFactory *JuncaswapFactoryRaw) Call(opts *bind.CallOpts, result *[]interface{}, method string, params ...interface{}) error {
	return _JuncaswapFactory.Contract.JuncaswapFactoryCaller.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 (_JuncaswapFactory *JuncaswapFactoryRaw) Transfer(opts *bind.TransactOpts) (*types.Transaction, error) {
	return _JuncaswapFactory.Contract.JuncaswapFactoryTransactor.contract.Transfer(opts)
}

// Transact invokes the (paid) contract method with params as input values.
func (_JuncaswapFactory *JuncaswapFactoryRaw) Transact(opts *bind.TransactOpts, method string, params ...interface{}) (*types.Transaction, error) {
	return _JuncaswapFactory.Contract.JuncaswapFactoryTransactor.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 (_JuncaswapFactory *JuncaswapFactoryCallerRaw) Call(opts *bind.CallOpts, result *[]interface{}, method string, params ...interface{}) error {
	return _JuncaswapFactory.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 (_JuncaswapFactory *JuncaswapFactoryTransactorRaw) Transfer(opts *bind.TransactOpts) (*types.Transaction, error) {
	return _JuncaswapFactory.Contract.contract.Transfer(opts)
}

// Transact invokes the (paid) contract method with params as input values.
func (_JuncaswapFactory *JuncaswapFactoryTransactorRaw) Transact(opts *bind.TransactOpts, method string, params ...interface{}) (*types.Transaction, error) {
	return _JuncaswapFactory.Contract.contract.Transact(opts, method, params...)
}

// AllPairs is a free data retrieval call binding the contract method 0x1e3dd18b.
//
// Solidity: function allPairs(uint256 ) view returns(address)
func (_JuncaswapFactory *JuncaswapFactoryCaller) AllPairs(opts *bind.CallOpts, arg0 *big.Int) (common.Address, error) {
	var out []interface{}
	err := _JuncaswapFactory.contract.Call(opts, &out, "allPairs", arg0)

	if err != nil {
		return *new(common.Address), err
	}

	out0 := *abi.ConvertType(out[0], new(common.Address)).(*common.Address)

	return out0, err

}

// AllPairs is a free data retrieval call binding the contract method 0x1e3dd18b.
//
// Solidity: function allPairs(uint256 ) view returns(address)
func (_JuncaswapFactory *JuncaswapFactorySession) AllPairs(arg0 *big.Int) (common.Address, error) {
	return _JuncaswapFactory.Contract.AllPairs(&_JuncaswapFactory.CallOpts, arg0)
}

// AllPairs is a free data retrieval call binding the contract method 0x1e3dd18b.
//
// Solidity: function allPairs(uint256 ) view returns(address)
func (_JuncaswapFactory *JuncaswapFactoryCallerSession) AllPairs(arg0 *big.Int) (common.Address, error) {
	return _JuncaswapFactory.Contract.AllPairs(&_JuncaswapFactory.CallOpts, arg0)
}

// AllPairsLength is a free data retrieval call binding the contract method 0x574f2ba3.
//
// Solidity: function allPairsLength() view returns(uint256)
func (_JuncaswapFactory *JuncaswapFactoryCaller) AllPairsLength(opts *bind.CallOpts) (*big.Int, error) {
	var out []interface{}
	err := _JuncaswapFactory.contract.Call(opts, &out, "allPairsLength")

	if err != nil {
		return *new(*big.Int), err
	}

	out0 := *abi.ConvertType(out[0], new(*big.Int)).(**big.Int)

	return out0, err

}

// AllPairsLength is a free data retrieval call binding the contract method 0x574f2ba3.
//
// Solidity: function allPairsLength() view returns(uint256)
func (_JuncaswapFactory *JuncaswapFactorySession) AllPairsLength() (*big.Int, error) {
	return _JuncaswapFactory.Contract.AllPairsLength(&_JuncaswapFactory.CallOpts)
}

// AllPairsLength is a free data retrieval call binding the contract method 0x574f2ba3.
//
// Solidity: function allPairsLength() view returns(uint256)
func (_JuncaswapFactory *JuncaswapFactoryCallerSession) AllPairsLength() (*big.Int, error) {
	return _JuncaswapFactory.Contract.AllPairsLength(&_JuncaswapFactory.CallOpts)
}

// FeeTo is a free data retrieval call binding the contract method 0x017e7e58.
//
// Solidity: function feeTo() view returns(address)
func (_JuncaswapFactory *JuncaswapFactoryCaller) FeeTo(opts *bind.CallOpts) (common.Address, error) {
	var out []interface{}
	err := _JuncaswapFactory.contract.Call(opts, &out, "feeTo")

	if err != nil {
		return *new(common.Address), err
	}

	out0 := *abi.ConvertType(out[0], new(common.Address)).(*common.Address)

	return out0, err

}

// FeeTo is a free data retrieval call binding the contract method 0x017e7e58.
//
// Solidity: function feeTo() view returns(address)
func (_JuncaswapFactory *JuncaswapFactorySession) FeeTo() (common.Address, error) {
	return _JuncaswapFactory.Contract.FeeTo(&_JuncaswapFactory.CallOpts)
}

// FeeTo is a free data retrieval call binding the contract method 0x017e7e58.
//
// Solidity: function feeTo() view returns(address)
func (_JuncaswapFactory *JuncaswapFactoryCallerSession) FeeTo() (common.Address, error) {
	return _JuncaswapFactory.Contract.FeeTo(&_JuncaswapFactory.CallOpts)
}

// FeeToSetter is a free data retrieval call binding the contract method 0x094b7415.
//
// Solidity: function feeToSetter() view returns(address)
func (_JuncaswapFactory *JuncaswapFactoryCaller) FeeToSetter(opts *bind.CallOpts) (common.Address, error) {
	var out []interface{}
	err := _JuncaswapFactory.contract.Call(opts, &out, "feeToSetter")

	if err != nil {
		return *new(common.Address), err
	}

	out0 := *abi.ConvertType(out[0], new(common.Address)).(*common.Address)

	return out0, err

}

// FeeToSetter is a free data retrieval call binding the contract method 0x094b7415.
//
// Solidity: function feeToSetter() view returns(address)
func (_JuncaswapFactory *JuncaswapFactorySession) FeeToSetter() (common.Address, error) {
	return _JuncaswapFactory.Contract.FeeToSetter(&_JuncaswapFactory.CallOpts)
}

// FeeToSetter is a free data retrieval call binding the contract method 0x094b7415.
//
// Solidity: function feeToSetter() view returns(address)
func (_JuncaswapFactory *JuncaswapFactoryCallerSession) FeeToSetter() (common.Address, error) {
	return _JuncaswapFactory.Contract.FeeToSetter(&_JuncaswapFactory.CallOpts)
}

// GasPerTx is a free data retrieval call binding the contract method 0x3fe43f40.
//
// Solidity: function gasPerTx() view returns(uint256)
func (_JuncaswapFactory *JuncaswapFactoryCaller) GasPerTx(opts *bind.CallOpts) (*big.Int, error) {
	var out []interface{}
	err := _JuncaswapFactory.contract.Call(opts, &out, "gasPerTx")

	if err != nil {
		return *new(*big.Int), err
	}

	out0 := *abi.ConvertType(out[0], new(*big.Int)).(**big.Int)

	return out0, err

}

// GasPerTx is a free data retrieval call binding the contract method 0x3fe43f40.
//
// Solidity: function gasPerTx() view returns(uint256)
func (_JuncaswapFactory *JuncaswapFactorySession) GasPerTx() (*big.Int, error) {
	return _JuncaswapFactory.Contract.GasPerTx(&_JuncaswapFactory.CallOpts)
}

// GasPerTx is a free data retrieval call binding the contract method 0x3fe43f40.
//
// Solidity: function gasPerTx() view returns(uint256)
func (_JuncaswapFactory *JuncaswapFactoryCallerSession) GasPerTx() (*big.Int, error) {
	return _JuncaswapFactory.Contract.GasPerTx(&_JuncaswapFactory.CallOpts)
}

// GetCodeHash is a free data retrieval call binding the contract method 0x83dd41c6.
//
// Solidity: function getCodeHash() pure returns(bytes32)
func (_JuncaswapFactory *JuncaswapFactoryCaller) GetCodeHash(opts *bind.CallOpts) ([32]byte, error) {
	var out []interface{}
	err := _JuncaswapFactory.contract.Call(opts, &out, "getCodeHash")

	if err != nil {
		return *new([32]byte), err
	}

	out0 := *abi.ConvertType(out[0], new([32]byte)).(*[32]byte)

	return out0, err

}

// GetCodeHash is a free data retrieval call binding the contract method 0x83dd41c6.
//
// Solidity: function getCodeHash() pure returns(bytes32)
func (_JuncaswapFactory *JuncaswapFactorySession) GetCodeHash() ([32]byte, error) {
	return _JuncaswapFactory.Contract.GetCodeHash(&_JuncaswapFactory.CallOpts)
}

// GetCodeHash is a free data retrieval call binding the contract method 0x83dd41c6.
//
// Solidity: function getCodeHash() pure returns(bytes32)
func (_JuncaswapFactory *JuncaswapFactoryCallerSession) GetCodeHash() ([32]byte, error) {
	return _JuncaswapFactory.Contract.GetCodeHash(&_JuncaswapFactory.CallOpts)
}

// GetPair is a free data retrieval call binding the contract method 0xe6a43905.
//
// Solidity: function getPair(address , address ) view returns(address)
func (_JuncaswapFactory *JuncaswapFactoryCaller) GetPair(opts *bind.CallOpts, arg0 common.Address, arg1 common.Address) (common.Address, error) {
	var out []interface{}
	err := _JuncaswapFactory.contract.Call(opts, &out, "getPair", arg0, arg1)

	if err != nil {
		return *new(common.Address), err
	}

	out0 := *abi.ConvertType(out[0], new(common.Address)).(*common.Address)

	return out0, err

}

// GetPair is a free data retrieval call binding the contract method 0xe6a43905.
//
// Solidity: function getPair(address , address ) view returns(address)
func (_JuncaswapFactory *JuncaswapFactorySession) GetPair(arg0 common.Address, arg1 common.Address) (common.Address, error) {
	return _JuncaswapFactory.Contract.GetPair(&_JuncaswapFactory.CallOpts, arg0, arg1)
}

// GetPair is a free data retrieval call binding the contract method 0xe6a43905.
//
// Solidity: function getPair(address , address ) view returns(address)
func (_JuncaswapFactory *JuncaswapFactoryCallerSession) GetPair(arg0 common.Address, arg1 common.Address) (common.Address, error) {
	return _JuncaswapFactory.Contract.GetPair(&_JuncaswapFactory.CallOpts, arg0, arg1)
}

// CreatePair is a paid mutator transaction binding the contract method 0x82dfdce4.
//
// Solidity: function createPair(address tokenA, address tokenB, bool _gasless) returns(address pair)
func (_JuncaswapFactory *JuncaswapFactoryTransactor) CreatePair(opts *bind.TransactOpts, tokenA common.Address, tokenB common.Address, _gasless bool) (*types.Transaction, error) {
	return _JuncaswapFactory.contract.Transact(opts, "createPair", tokenA, tokenB, _gasless)
}

// CreatePair is a paid mutator transaction binding the contract method 0x82dfdce4.
//
// Solidity: function createPair(address tokenA, address tokenB, bool _gasless) returns(address pair)
func (_JuncaswapFactory *JuncaswapFactorySession) CreatePair(tokenA common.Address, tokenB common.Address, _gasless bool) (*types.Transaction, error) {
	return _JuncaswapFactory.Contract.CreatePair(&_JuncaswapFactory.TransactOpts, tokenA, tokenB, _gasless)
}

// CreatePair is a paid mutator transaction binding the contract method 0x82dfdce4.
//
// Solidity: function createPair(address tokenA, address tokenB, bool _gasless) returns(address pair)
func (_JuncaswapFactory *JuncaswapFactoryTransactorSession) CreatePair(tokenA common.Address, tokenB common.Address, _gasless bool) (*types.Transaction, error) {
	return _JuncaswapFactory.Contract.CreatePair(&_JuncaswapFactory.TransactOpts, tokenA, tokenB, _gasless)
}

// SetFeeTo is a paid mutator transaction binding the contract method 0xf46901ed.
//
// Solidity: function setFeeTo(address _feeTo) returns()
func (_JuncaswapFactory *JuncaswapFactoryTransactor) SetFeeTo(opts *bind.TransactOpts, _feeTo common.Address) (*types.Transaction, error) {
	return _JuncaswapFactory.contract.Transact(opts, "setFeeTo", _feeTo)
}

// SetFeeTo is a paid mutator transaction binding the contract method 0xf46901ed.
//
// Solidity: function setFeeTo(address _feeTo) returns()
func (_JuncaswapFactory *JuncaswapFactorySession) SetFeeTo(_feeTo common.Address) (*types.Transaction, error) {
	return _JuncaswapFactory.Contract.SetFeeTo(&_JuncaswapFactory.TransactOpts, _feeTo)
}

// SetFeeTo is a paid mutator transaction binding the contract method 0xf46901ed.
//
// Solidity: function setFeeTo(address _feeTo) returns()
func (_JuncaswapFactory *JuncaswapFactoryTransactorSession) SetFeeTo(_feeTo common.Address) (*types.Transaction, error) {
	return _JuncaswapFactory.Contract.SetFeeTo(&_JuncaswapFactory.TransactOpts, _feeTo)
}

// SetFeeToSetter is a paid mutator transaction binding the contract method 0xa2e74af6.
//
// Solidity: function setFeeToSetter(address _feeToSetter) returns()
func (_JuncaswapFactory *JuncaswapFactoryTransactor) SetFeeToSetter(opts *bind.TransactOpts, _feeToSetter common.Address) (*types.Transaction, error) {
	return _JuncaswapFactory.contract.Transact(opts, "setFeeToSetter", _feeToSetter)
}

// SetFeeToSetter is a paid mutator transaction binding the contract method 0xa2e74af6.
//
// Solidity: function setFeeToSetter(address _feeToSetter) returns()
func (_JuncaswapFactory *JuncaswapFactorySession) SetFeeToSetter(_feeToSetter common.Address) (*types.Transaction, error) {
	return _JuncaswapFactory.Contract.SetFeeToSetter(&_JuncaswapFactory.TransactOpts, _feeToSetter)
}

// SetFeeToSetter is a paid mutator transaction binding the contract method 0xa2e74af6.
//
// Solidity: function setFeeToSetter(address _feeToSetter) returns()
func (_JuncaswapFactory *JuncaswapFactoryTransactorSession) SetFeeToSetter(_feeToSetter common.Address) (*types.Transaction, error) {
	return _JuncaswapFactory.Contract.SetFeeToSetter(&_JuncaswapFactory.TransactOpts, _feeToSetter)
}

// SetGasPerTx is a paid mutator transaction binding the contract method 0x5d96feb1.
//
// Solidity: function setGasPerTx(uint256 _gasPerTx) returns()
func (_JuncaswapFactory *JuncaswapFactoryTransactor) SetGasPerTx(opts *bind.TransactOpts, _gasPerTx *big.Int) (*types.Transaction, error) {
	return _JuncaswapFactory.contract.Transact(opts, "setGasPerTx", _gasPerTx)
}

// SetGasPerTx is a paid mutator transaction binding the contract method 0x5d96feb1.
//
// Solidity: function setGasPerTx(uint256 _gasPerTx) returns()
func (_JuncaswapFactory *JuncaswapFactorySession) SetGasPerTx(_gasPerTx *big.Int) (*types.Transaction, error) {
	return _JuncaswapFactory.Contract.SetGasPerTx(&_JuncaswapFactory.TransactOpts, _gasPerTx)
}

// SetGasPerTx is a paid mutator transaction binding the contract method 0x5d96feb1.
//
// Solidity: function setGasPerTx(uint256 _gasPerTx) returns()
func (_JuncaswapFactory *JuncaswapFactoryTransactorSession) SetGasPerTx(_gasPerTx *big.Int) (*types.Transaction, error) {
	return _JuncaswapFactory.Contract.SetGasPerTx(&_JuncaswapFactory.TransactOpts, _gasPerTx)
}

// JuncaswapFactoryPairCreatedIterator is returned from FilterPairCreated and is used to iterate over the raw logs and unpacked data for PairCreated events raised by the JuncaswapFactory contract.
type JuncaswapFactoryPairCreatedIterator struct {
	Event *JuncaswapFactoryPairCreated // 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 *JuncaswapFactoryPairCreatedIterator) 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(JuncaswapFactoryPairCreated)
			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(JuncaswapFactoryPairCreated)
		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 *JuncaswapFactoryPairCreatedIterator) Error() error {
	return it.fail
}

// Close terminates the iteration process, releasing any pending underlying
// resources.
func (it *JuncaswapFactoryPairCreatedIterator) Close() error {
	it.sub.Unsubscribe()
	return nil
}

// JuncaswapFactoryPairCreated represents a PairCreated event raised by the JuncaswapFactory contract.
type JuncaswapFactoryPairCreated struct {
	Token0 common.Address
	Token1 common.Address
	Pair   common.Address
	Arg3   *big.Int
	Arg4   bool
	Raw    types.Log // Blockchain specific contextual infos
}

// FilterPairCreated is a free log retrieval operation binding the contract event 0x30fcf386678f0a00ca73486610fda45a0bd09cb9ede7e2e5078f4c842f21b1da.
//
// Solidity: event PairCreated(address indexed token0, address indexed token1, address pair, uint256 arg3, bool arg4)
func (_JuncaswapFactory *JuncaswapFactoryFilterer) FilterPairCreated(opts *bind.FilterOpts, token0 []common.Address, token1 []common.Address) (*JuncaswapFactoryPairCreatedIterator, error) {

	var token0Rule []interface{}
	for _, token0Item := range token0 {
		token0Rule = append(token0Rule, token0Item)
	}
	var token1Rule []interface{}
	for _, token1Item := range token1 {
		token1Rule = append(token1Rule, token1Item)
	}

	logs, sub, err := _JuncaswapFactory.contract.FilterLogs(opts, "PairCreated", token0Rule, token1Rule)
	if err != nil {
		return nil, err
	}
	return &JuncaswapFactoryPairCreatedIterator{contract: _JuncaswapFactory.contract, event: "PairCreated", logs: logs, sub: sub}, nil
}

// WatchPairCreated is a free log subscription operation binding the contract event 0x30fcf386678f0a00ca73486610fda45a0bd09cb9ede7e2e5078f4c842f21b1da.
//
// Solidity: event PairCreated(address indexed token0, address indexed token1, address pair, uint256 arg3, bool arg4)
func (_JuncaswapFactory *JuncaswapFactoryFilterer) WatchPairCreated(opts *bind.WatchOpts, sink chan<- *JuncaswapFactoryPairCreated, token0 []common.Address, token1 []common.Address) (event.Subscription, error) {

	var token0Rule []interface{}
	for _, token0Item := range token0 {
		token0Rule = append(token0Rule, token0Item)
	}
	var token1Rule []interface{}
	for _, token1Item := range token1 {
		token1Rule = append(token1Rule, token1Item)
	}

	logs, sub, err := _JuncaswapFactory.contract.WatchLogs(opts, "PairCreated", token0Rule, token1Rule)
	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(JuncaswapFactoryPairCreated)
				if err := _JuncaswapFactory.contract.UnpackLog(event, "PairCreated", 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
}

// ParsePairCreated is a log parse operation binding the contract event 0x30fcf386678f0a00ca73486610fda45a0bd09cb9ede7e2e5078f4c842f21b1da.
//
// Solidity: event PairCreated(address indexed token0, address indexed token1, address pair, uint256 arg3, bool arg4)
func (_JuncaswapFactory *JuncaswapFactoryFilterer) ParsePairCreated(log types.Log) (*JuncaswapFactoryPairCreated, error) {
	event := new(JuncaswapFactoryPairCreated)
	if err := _JuncaswapFactory.contract.UnpackLog(event, "PairCreated", log); err != nil {
		return nil, err
	}
	event.Raw = log
	return event, nil
}

// JuncaswapFactoryPairCreated0Iterator is returned from FilterPairCreated0 and is used to iterate over the raw logs and unpacked data for PairCreated0 events raised by the JuncaswapFactory contract.
type JuncaswapFactoryPairCreated0Iterator struct {
	Event *JuncaswapFactoryPairCreated0 // 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 *JuncaswapFactoryPairCreated0Iterator) 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(JuncaswapFactoryPairCreated0)
			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(JuncaswapFactoryPairCreated0)
		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 *JuncaswapFactoryPairCreated0Iterator) Error() error {
	return it.fail
}

// Close terminates the iteration process, releasing any pending underlying
// resources.
func (it *JuncaswapFactoryPairCreated0Iterator) Close() error {
	it.sub.Unsubscribe()
	return nil
}

// JuncaswapFactoryPairCreated0 represents a PairCreated0 event raised by the JuncaswapFactory contract.
type JuncaswapFactoryPairCreated0 struct {
	Token0 common.Address
	Token1 common.Address
	Pair   common.Address
	Arg3   *big.Int
	Raw    types.Log // Blockchain specific contextual infos
}

// FilterPairCreated0 is a free log retrieval operation binding the contract event 0x0d3648bd0f6ba80134a33ba9275ac585d9d315f0ad8355cddefde31afa28d0e9.
//
// Solidity: event PairCreated(address indexed token0, address indexed token1, address pair, uint256 arg3)
func (_JuncaswapFactory *JuncaswapFactoryFilterer) FilterPairCreated0(opts *bind.FilterOpts, token0 []common.Address, token1 []common.Address) (*JuncaswapFactoryPairCreated0Iterator, error) {

	var token0Rule []interface{}
	for _, token0Item := range token0 {
		token0Rule = append(token0Rule, token0Item)
	}
	var token1Rule []interface{}
	for _, token1Item := range token1 {
		token1Rule = append(token1Rule, token1Item)
	}

	logs, sub, err := _JuncaswapFactory.contract.FilterLogs(opts, "PairCreated0", token0Rule, token1Rule)
	if err != nil {
		return nil, err
	}
	return &JuncaswapFactoryPairCreated0Iterator{contract: _JuncaswapFactory.contract, event: "PairCreated0", logs: logs, sub: sub}, nil
}

// WatchPairCreated0 is a free log subscription operation binding the contract event 0x0d3648bd0f6ba80134a33ba9275ac585d9d315f0ad8355cddefde31afa28d0e9.
//
// Solidity: event PairCreated(address indexed token0, address indexed token1, address pair, uint256 arg3)
func (_JuncaswapFactory *JuncaswapFactoryFilterer) WatchPairCreated0(opts *bind.WatchOpts, sink chan<- *JuncaswapFactoryPairCreated0, token0 []common.Address, token1 []common.Address) (event.Subscription, error) {

	var token0Rule []interface{}
	for _, token0Item := range token0 {
		token0Rule = append(token0Rule, token0Item)
	}
	var token1Rule []interface{}
	for _, token1Item := range token1 {
		token1Rule = append(token1Rule, token1Item)
	}

	logs, sub, err := _JuncaswapFactory.contract.WatchLogs(opts, "PairCreated0", token0Rule, token1Rule)
	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(JuncaswapFactoryPairCreated0)
				if err := _JuncaswapFactory.contract.UnpackLog(event, "PairCreated0", 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
}

// ParsePairCreated0 is a log parse operation binding the contract event 0x0d3648bd0f6ba80134a33ba9275ac585d9d315f0ad8355cddefde31afa28d0e9.
//
// Solidity: event PairCreated(address indexed token0, address indexed token1, address pair, uint256 arg3)
func (_JuncaswapFactory *JuncaswapFactoryFilterer) ParsePairCreated0(log types.Log) (*JuncaswapFactoryPairCreated0, error) {
	event := new(JuncaswapFactoryPairCreated0)
	if err := _JuncaswapFactory.contract.UnpackLog(event, "PairCreated0", log); err != nil {
		return nil, err
	}
	event.Raw = log
	return event, nil
}
