[ { "inputs": [], "stateMutability": "nonpayable", "type": "constructor" }, { "inputs": [], "name": "ECDSAInvalidSignature", "type": "error" }, { "inputs": [ { "internalType": "uint256", "name": "length", "type": "uint256" } ], "name": "ECDSAInvalidSignatureLength", "type": "error" }, { "inputs": [ { "internalType": "bytes32", "name": "s", "type": "bytes32" } ], "name": "ECDSAInvalidSignatureS", "type": "error" }, { "inputs": [ { "internalType": "address", "name": "spender", "type": "address" }, { "internalType": "uint256", "name": "allowance", "type": "uint256" }, { "internalType": "uint256", "name": "needed", "type": "uint256" } ], "name": "ERC20InsufficientAllowance", "type": "error" }, { "inputs": [ { "internalType": "address", "name": "sender", "type": "address" }, { "internalType": "uint256", "name": "balance", "type": "uint256" }, { "internalType": "uint256", "name": "needed", "type": "uint256" } ], "name": "ERC20InsufficientBalance", "type": "error" }, { "inputs": [ { "internalType": "address", "name": "approver", "type": "address" } ], "name": "ERC20InvalidApprover", "type": "error" }, { "inputs": [ { "internalType": "address", "name": "receiver", "type": "address" } ], "name": "ERC20InvalidReceiver", "type": "error" }, { "inputs": [ { "internalType": "address", "name": "sender", "type": "address" } ], "name": "ERC20InvalidSender", "type": "error" }, { "inputs": [ { "internalType": "address", "name": "spender", "type": "address" } ], "name": "ERC20InvalidSpender", "type": "error" }, { "inputs": [ { "internalType": "uint256", "name": "deadline", "type": "uint256" } ], "name": "ERC2612ExpiredSignature", "type": "error" }, { "inputs": [ { "internalType": "address", "name": "signer", "type": "address" }, { "internalType": "address", "name": "owner", "type": "address" } ], "name": "ERC2612InvalidSigner", "type": "error" }, { "inputs": [ { "internalType": "address", "name": "account", "type": "address" }, { "internalType": "uint256", "name": "currentNonce", "type": "uint256" } ], "name": "InvalidAccountNonce", "type": "error" }, { "inputs": [], "name": "InvalidShortString", "type": "error" }, { "inputs": [ { "internalType": "address", "name": "owner", "type": "address" } ], "name": "OwnableInvalidOwner", "type": "error" }, { "inputs": [ { "internalType": "address", "name": "account", "type": "address" } ], "name": "OwnableUnauthorizedAccount", "type": "error" }, { "inputs": [ { "internalType": "string", "name": "str", "type": "string" } ], "name": "StringTooLong", "type": "error" }, { "anonymous": false, "inputs": [ { "indexed": true, "internalType": "address", "name": "owner", "type": "address" }, { "indexed": true, "internalType": "address", "name": "spender", "type": "address" }, { "indexed": false, "internalType": "uint256", "name": "value", "type": "uint256" } ], "name": "Approval", "type": "event" }, { "anonymous": false, "inputs": [], "name": "EIP712DomainChanged", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": true, "internalType": "address", "name": "previousOwner", "type": "address" }, { "indexed": true, "internalType": "address", "name": "newOwner", "type": "address" } ], "name": "OwnershipTransferred", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": true, "internalType": "address", "name": "from", "type": "address" }, { "indexed": true, "internalType": "address", "name": "to", "type": "address" }, { "indexed": false, "internalType": "uint256", "name": "value", "type": "uint256" } ], "name": "Transfer", "type": "event" }, { "inputs": [], "name": "DOMAIN_SEPARATOR", "outputs": [ { "internalType": "bytes32", "name": "", "type": "bytes32" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "owner", "type": "address" }, { "internalType": "address", "name": "spender", "type": "address" } ], "name": "allowance", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "spender", "type": "address" }, { "internalType": "uint256", "name": "value", "type": "uint256" } ], "name": "approve", "outputs": [ { "internalType": "bool", "name": "", "type": "bool" } ], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "account", "type": "address" } ], "name": "balanceOf", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "value", "type": "uint256" } ], "name": "burn", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "account", "type": "address" }, { "internalType": "uint256", "name": "value", "type": "uint256" } ], "name": "burnFrom", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [], "name": "decimals", "outputs": [ { "internalType": "uint8", "name": "", "type": "uint8" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "eip712Domain", "outputs": [ { "internalType": "bytes1", "name": "fields", "type": "bytes1" }, { "internalType": "string", "name": "name", "type": "string" }, { "internalType": "string", "name": "version", "type": "string" }, { "internalType": "uint256", "name": "chainId", "type": "uint256" }, { "internalType": "address", "name": "verifyingContract", "type": "address" }, { "internalType": "bytes32", "name": "salt", "type": "bytes32" }, { "internalType": "uint256[]", "name": "extensions", "type": "uint256[]" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "name", "outputs": [ { "internalType": "string", "name": "", "type": "string" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "owner", "type": "address" } ], "name": "nonces", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "owner", "outputs": [ { "internalType": "address", "name": "", "type": "address" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "owner", "type": "address" }, { "internalType": "address", "name": "spender", "type": "address" }, { "internalType": "uint256", "name": "value", "type": "uint256" }, { "internalType": "uint256", "name": "deadline", "type": "uint256" }, { "internalType": "uint8", "name": "v", "type": "uint8" }, { "internalType": "bytes32", "name": "r", "type": "bytes32" }, { "internalType": "bytes32", "name": "s", "type": "bytes32" } ], "name": "permit", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [], "name": "renounceOwnership", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [], "name": "symbol", "outputs": [ { "internalType": "string", "name": "", "type": "string" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "totalSupply", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "to", "type": "address" }, { "internalType": "uint256", "name": "value", "type": "uint256" } ], "name": "transfer", "outputs": [ { "internalType": "bool", "name": "", "type": "bool" } ], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "from", "type": "address" }, { "internalType": "address", "name": "to", "type": "address" }, { "internalType": "uint256", "name": "value", "type": "uint256" } ], "name": "transferFrom", "outputs": [ { "internalType": "bool", "name": "", "type": "bool" } ], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "newOwner", "type": "address" } ], "name": "transferOwnership", "outputs": [], "stateMutability": "nonpayable", "type": "function" } ]
610160604052348015610010575f80fd5b50604080518082018252600d8082526c4d6f6f6e626f6f74732044414f60981b60208084018290528451808601865260018152603160f81b818301528551808701875293845283820192909252845180860190955260058552644d4244414f60d81b90850152919283929190737831054bc342b9781bc590fcad5ad941d9c336c961009f565b60405180910390fd5b6100a8816101a5565b5060046100b58382610459565b5060056100c28282610459565b506100d2915083905060066101f4565b610120526100e18160076101f4565b61014052815160208084019190912060e052815190820120610100524660a05261016d60e05161010051604080517f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f60208201529081019290925260608201524660808201523060a08201525f9060c00160405160208183030381529060405280519060200120905090565b60805250503060c052506101a0737831054bc342b9781bc590fcad5ad941d9c336c96a52b7d2dcc80cd2e4000000610226565b61058f565b5f80546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b5f60208351101561020f576102088361025e565b9050610220565b8161021a8482610459565b5060ff90505b92915050565b6001600160a01b03821661024f5760405163ec442f0560e01b81525f6004820152602401610096565b61025a5f838361029b565b5050565b5f80829050601f81511115610288578260405163305a27a960e01b81526004016100969190610518565b80516102938261054d565b179392505050565b6001600160a01b0383166102c5578060035f8282546102ba9190610570565b909155506103359050565b6001600160a01b0383165f90815260016020526040902054818110156103175760405163391434e360e21b81526001600160a01b03851660048201526024810182905260448101839052606401610096565b6001600160a01b0384165f9081526001602052604090209082900390555b6001600160a01b0382166103515760038054829003905561036f565b6001600160a01b0382165f9081526001602052604090208054820190555b816001600160a01b0316836001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040516103b491815260200190565b60405180910390a3505050565b634e487b7160e01b5f52604160045260245ffd5b600181811c908216806103e957607f821691505b60208210810361040757634e487b7160e01b5f52602260045260245ffd5b50919050565b601f82111561045457805f5260205f20601f840160051c810160208510156104325750805b601f840160051c820191505b81811015610451575f815560010161043e565b50505b505050565b81516001600160401b03811115610472576104726103c1565b6104868161048084546103d5565b8461040d565b602080601f8311600181146104b9575f84156104a25750858301515b5f19600386901b1c1916600185901b178555610510565b5f85815260208120601f198616915b828110156104e7578886015182559484019460019091019084016104c8565b508582101561050457878501515f19600388901b60f8161c191681555b505060018460011b0185555b505050505050565b602081525f82518060208401528060208501604085015e5f604082850101526040601f19601f83011684010191505092915050565b80516020808301519190811015610407575f1960209190910360031b1b16919050565b8082018082111561022057634e487b7160e01b5f52601160045260245ffd5b60805160a05160c05160e0516101005161012051610140516110446105e05f395f61086001525f61083301525f61072701525f6106ff01525f61065a01525f61068401525f6106ae01526110445ff3fe608060405234801561000f575f80fd5b50600436106100e4575f3560e01c806306fdde03146100e8578063095ea7b31461010657806318160ddd1461012957806323b872dd1461013b578063313ce5671461014e5780633644e5151461015d57806342966c681461016557806370a082311461017a578063715018a6146101a257806379cc6790146101aa5780637ecebe00146101bd57806384b0196e146101d05780638da5cb5b146101eb57806395d89b4114610200578063a9059cbb14610208578063d505accf1461021b578063dd62ed3e1461022e578063f2fde38b14610241575b5f80fd5b6100f0610254565b6040516100fd9190610d74565b60405180910390f35b610119610114366004610da8565b6102e4565b60405190151581526020016100fd565b6003545b6040519081526020016100fd565b610119610149366004610dd0565b6102fd565b604051601281526020016100fd565b61012d610320565b610178610173366004610e09565b61032e565b005b61012d610188366004610e20565b6001600160a01b03165f9081526001602052604090205490565b61017861033b565b6101786101b8366004610da8565b61034e565b61012d6101cb366004610e20565b610367565b6101d8610384565b6040516100fd9796959493929190610e39565b6101f36103c6565b6040516100fd9190610ed0565b6100f06103d4565b610119610216366004610da8565b6103e3565b610178610229366004610ee4565b6103f0565b61012d61023c366004610f51565b61052b565b61017861024f366004610e20565b610555565b60606004805461026390610f82565b80601f016020809104026020016040519081016040528092919081815260200182805461028f90610f82565b80156102da5780601f106102b1576101008083540402835291602001916102da565b820191905f5260205f20905b8154815290600101906020018083116102bd57829003601f168201915b5050505050905090565b5f336102f181858561058f565b60019150505b92915050565b5f3361030a8582856105a1565b6103158585856105f1565b506001949350505050565b5f61032961064e565b905090565b6103383382610777565b50565b6103436107ab565b61034c5f6107dd565b565b6103598233836105a1565b6103638282610777565b5050565b6001600160a01b0381165f908152600860205260408120546102f7565b5f6060805f805f606061039561082c565b61039d610859565b604080515f80825260208201909252600f60f81b9b939a50919850469750309650945092509050565b5f546001600160a01b031690565b60606005805461026390610f82565b5f336102f18185856105f1565b834211156104195760405163313c898160e11b8152600481018590526024015b60405180910390fd5b5f7f6e71edae12b1b97f4d1f60370fef10105fa2faae0126114a169c64845d6126c98888886104648c6001600160a01b03165f90815260086020526040902080546001810190915590565b6040805160208101969096526001600160a01b0394851690860152929091166060840152608083015260a082015260c0810186905260e0016040516020818303038152906040528051906020012090505f6104be82610886565b90505f6104cd828787876108b2565b9050896001600160a01b0316816001600160a01b031614610514576040516325c0072360e11b81526001600160a01b0380831660048301528b166024820152604401610410565b61051f8a8a8a61058f565b50505050505050505050565b6001600160a01b039182165f90815260026020908152604080832093909416825291909152205490565b61055d6107ab565b6001600160a01b038116610586575f604051631e4fbdf760e01b81526004016104109190610ed0565b610338816107dd565b61059c83838360016108de565b505050565b5f6105ac848461052b565b90505f1981146105eb57818110156105dd57828183604051637dc7a0d960e11b815260040161041093929190610fba565b6105eb84848484035f6108de565b50505050565b6001600160a01b03831661061a575f604051634b637e8f60e11b81526004016104109190610ed0565b6001600160a01b038216610643575f60405163ec442f0560e01b81526004016104109190610ed0565b61059c8383836109b0565b5f306001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000161480156106a657507f000000000000000000000000000000000000000000000000000000000000000046145b156106d057507f000000000000000000000000000000000000000000000000000000000000000090565b610329604080517f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f60208201527f0000000000000000000000000000000000000000000000000000000000000000918101919091527f000000000000000000000000000000000000000000000000000000000000000060608201524660808201523060a08201525f9060c00160405160208183030381529060405280519060200120905090565b6001600160a01b0382166107a0575f604051634b637e8f60e11b81526004016104109190610ed0565b610363825f836109b0565b336107b46103c6565b6001600160a01b03161461034c573360405163118cdaa760e01b81526004016104109190610ed0565b5f80546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b60606103297f00000000000000000000000000000000000000000000000000000000000000006006610ac3565b60606103297f00000000000000000000000000000000000000000000000000000000000000006007610ac3565b5f6102f761089261064e565b8360405161190160f01b8152600281019290925260228201526042902090565b5f805f806108c288888888610b6c565b9250925092506108d28282610c2a565b50909695505050505050565b6001600160a01b038416610907575f60405163e602df0560e01b81526004016104109190610ed0565b6001600160a01b038316610930575f604051634a1406b160e11b81526004016104109190610ed0565b6001600160a01b038085165f90815260026020908152604080832093871683529290522082905580156105eb57826001600160a01b0316846001600160a01b03167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925846040516109a291815260200190565b60405180910390a350505050565b6001600160a01b0383166109da578060035f8282546109cf9190610fdb565b90915550610a379050565b6001600160a01b0383165f9081526001602052604090205481811015610a195783818360405163391434e360e21b815260040161041093929190610fba565b6001600160a01b0384165f9081526001602052604090209082900390555b6001600160a01b038216610a5357600380548290039055610a71565b6001600160a01b0382165f9081526001602052604090208054820190555b816001600160a01b0316836001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef83604051610ab691815260200190565b60405180910390a3505050565b606060ff8314610add57610ad683610ce2565b90506102f7565b818054610ae990610f82565b80601f0160208091040260200160405190810160405280929190818152602001828054610b1590610f82565b8015610b605780601f10610b3757610100808354040283529160200191610b60565b820191905f5260205f20905b815481529060010190602001808311610b4357829003601f168201915b505050505090506102f7565b5f80806fa2a8918ca85bafe22016d0b997e4df60600160ff1b03841115610b9b57505f91506003905082610c20565b604080515f808252602082018084528a905260ff891692820192909252606081018790526080810186905260019060a0016020604051602081039080840390855afa158015610bec573d5f803e3d5ffd5b5050604051601f1901519150506001600160a01b038116610c1757505f925060019150829050610c20565b92505f91508190505b9450945094915050565b5f826003811115610c3d57610c3d610ffa565b03610c46575050565b6001826003811115610c5a57610c5a610ffa565b03610c785760405163f645eedf60e01b815260040160405180910390fd5b6002826003811115610c8c57610c8c610ffa565b03610cad5760405163fce698f760e01b815260048101829052602401610410565b6003826003811115610cc157610cc1610ffa565b03610363576040516335e2f38360e21b815260048101829052602401610410565b60605f610cee83610d1f565b6040805160208082528183019092529192505f91906020820181803683375050509182525060208101929092525090565b5f60ff8216601f8111156102f757604051632cd44ac360e21b815260040160405180910390fd5b5f81518084528060208401602086015e5f602082860101526020601f19601f83011685010191505092915050565b602081525f610d866020830184610d46565b9392505050565b80356001600160a01b0381168114610da3575f80fd5b919050565b5f8060408385031215610db9575f80fd5b610dc283610d8d565b946020939093013593505050565b5f805f60608486031215610de2575f80fd5b610deb84610d8d565b9250610df960208501610d8d565b9150604084013590509250925092565b5f60208284031215610e19575f80fd5b5035919050565b5f60208284031215610e30575f80fd5b610d8682610d8d565b60ff60f81b881681525f602060e06020840152610e5960e084018a610d46565b8381036040850152610e6b818a610d46565b606085018990526001600160a01b038816608086015260a0850187905284810360c0860152855180825260208088019350909101905f5b81811015610ebe57835183529284019291840191600101610ea2565b50909c9b505050505050505050505050565b6001600160a01b0391909116815260200190565b5f805f805f805f60e0888a031215610efa575f80fd5b610f0388610d8d565b9650610f1160208901610d8d565b95506040880135945060608801359350608088013560ff81168114610f34575f80fd5b9699959850939692959460a0840135945060c09093013592915050565b5f8060408385031215610f62575f80fd5b610f6b83610d8d565b9150610f7960208401610d8d565b90509250929050565b600181811c90821680610f9657607f821691505b602082108103610fb457634e487b7160e01b5f52602260045260245ffd5b50919050565b6001600160a01b039390931683526020830191909152604082015260600190565b808201808211156102f757634e487b7160e01b5f52601160045260245ffd5b634e487b7160e01b5f52602160045260245ffdfea264697066735822122081a5ebfbfcc3e0faf95c7ad064b76104228ec49a742bf87c17a8b5982ef9239364736f6c63430008190033