Overview ERC20
PRICE
$0.00

ON-CHAIN MARKET CAP n/a

Total Supply:
202,420,242,024.00 FXMAS

Holders:
15
Profile Summary
Blockchain:
C-Chain (43114)


Decimals:
18
Contract Source Code Verified (Partial Match)
Contract Name:
TokenERC20

Compiler Version
v0.8.23+commit.f704f362

Optimization Enabled:
Yes with 20 runs

Created At:
Tue, 19 Dec 2023 20:11:55 GMT
IERC20.sol
contracts
eip
interface
IERC20.sol


Contract ABI
[
  {
    "inputs": [],
    "stateMutability": "nonpayable",
    "type": "constructor"
  },
  {
    "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": [
      {
        "indexed": true,
        "internalType": "address",
        "name": "delegator",
        "type": "address"
      },
      {
        "indexed": true,
        "internalType": "address",
        "name": "fromDelegate",
        "type": "address"
      },
      {
        "indexed": true,
        "internalType": "address",
        "name": "toDelegate",
        "type": "address"
      }
    ],
    "name": "DelegateChanged",
    "type": "event"
  },
  {
    "anonymous": false,
    "inputs": [
      {
        "indexed": true,
        "internalType": "address",
        "name": "delegate",
        "type": "address"
      },
      {
        "indexed": false,
        "internalType": "uint256",
        "name": "previousBalance",
        "type": "uint256"
      },
      {
        "indexed": false,
        "internalType": "uint256",
        "name": "newBalance",
        "type": "uint256"
      }
    ],
    "name": "DelegateVotesChanged",
    "type": "event"
  },
  {
    "anonymous": false,
    "inputs": [],
    "name": "EIP712DomainChanged",
    "type": "event"
  },
  {
    "anonymous": false,
    "inputs": [
      {
        "indexed": false,
        "internalType": "address",
        "name": "platformFeeRecipient",
        "type": "address"
      },
      {
        "indexed": false,
        "internalType": "uint256",
        "name": "flatFee",
        "type": "uint256"
      }
    ],
    "name": "FlatPlatformFeeUpdated",
    "type": "event"
  },
  {
    "anonymous": false,
    "inputs": [
      {
        "indexed": false,
        "internalType": "uint8",
        "name": "version",
        "type": "uint8"
      }
    ],
    "name": "Initialized",
    "type": "event"
  },
  {
    "anonymous": false,
    "inputs": [
      {
        "indexed": true,
        "internalType": "address",
        "name": "platformFeeRecipient",
        "type": "address"
      },
      {
        "indexed": false,
        "internalType": "uint256",
        "name": "platformFeeBps",
        "type": "uint256"
      }
    ],
    "name": "PlatformFeeInfoUpdated",
    "type": "event"
  },
  {
    "anonymous": false,
    "inputs": [
      {
        "indexed": false,
        "internalType": "enum IPlatformFee.PlatformFeeType",
        "name": "feeType",
        "type": "uint8"
      }
    ],
    "name": "PlatformFeeTypeUpdated",
    "type": "event"
  },
  {
    "anonymous": false,
    "inputs": [
      {
        "indexed": true,
        "internalType": "address",
        "name": "recipient",
        "type": "address"
      }
    ],
    "name": "PrimarySaleRecipientUpdated",
    "type": "event"
  },
  {
    "anonymous": false,
    "inputs": [
      {
        "indexed": true,
        "internalType": "bytes32",
        "name": "role",
        "type": "bytes32"
      },
      {
        "indexed": true,
        "internalType": "bytes32",
        "name": "previousAdminRole",
        "type": "bytes32"
      },
      {
        "indexed": true,
        "internalType": "bytes32",
        "name": "newAdminRole",
        "type": "bytes32"
      }
    ],
    "name": "RoleAdminChanged",
    "type": "event"
  },
  {
    "anonymous": false,
    "inputs": [
      {
        "indexed": true,
        "internalType": "bytes32",
        "name": "role",
        "type": "bytes32"
      },
      {
        "indexed": true,
        "internalType": "address",
        "name": "account",
        "type": "address"
      },
      {
        "indexed": true,
        "internalType": "address",
        "name": "sender",
        "type": "address"
      }
    ],
    "name": "RoleGranted",
    "type": "event"
  },
  {
    "anonymous": false,
    "inputs": [
      {
        "indexed": true,
        "internalType": "bytes32",
        "name": "role",
        "type": "bytes32"
      },
      {
        "indexed": true,
        "internalType": "address",
        "name": "account",
        "type": "address"
      },
      {
        "indexed": true,
        "internalType": "address",
        "name": "sender",
        "type": "address"
      }
    ],
    "name": "RoleRevoked",
    "type": "event"
  },
  {
    "anonymous": false,
    "inputs": [
      {
        "indexed": true,
        "internalType": "address",
        "name": "mintedTo",
        "type": "address"
      },
      {
        "indexed": false,
        "internalType": "uint256",
        "name": "quantityMinted",
        "type": "uint256"
      }
    ],
    "name": "TokensMinted",
    "type": "event"
  },
  {
    "anonymous": false,
    "inputs": [
      {
        "indexed": true,
        "internalType": "address",
        "name": "signer",
        "type": "address"
      },
      {
        "indexed": true,
        "internalType": "address",
        "name": "mintedTo",
        "type": "address"
      },
      {
        "components": [
          {
            "internalType": "address",
            "name": "to",
            "type": "address"
          },
          {
            "internalType": "address",
            "name": "primarySaleRecipient",
            "type": "address"
          },
          {
            "internalType": "uint256",
            "name": "quantity",
            "type": "uint256"
          },
          {
            "internalType": "uint256",
            "name": "price",
            "type": "uint256"
          },
          {
            "internalType": "address",
            "name": "currency",
            "type": "address"
          },
          {
            "internalType": "uint128",
            "name": "validityStartTimestamp",
            "type": "uint128"
          },
          {
            "internalType": "uint128",
            "name": "validityEndTimestamp",
            "type": "uint128"
          },
          {
            "internalType": "bytes32",
            "name": "uid",
            "type": "bytes32"
          }
        ],
        "indexed": false,
        "internalType": "struct ITokenERC20.MintRequest",
        "name": "mintRequest",
        "type": "tuple"
      }
    ],
    "name": "TokensMintedWithSignature",
    "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": "CLOCK_MODE",
    "outputs": [
      {
        "internalType": "string",
        "name": "",
        "type": "string"
      }
    ],
    "stateMutability": "view",
    "type": "function"
  },
  {
    "inputs": [],
    "name": "DEFAULT_ADMIN_ROLE",
    "outputs": [
      {
        "internalType": "bytes32",
        "name": "",
        "type": "bytes32"
      }
    ],
    "stateMutability": "view",
    "type": "function"
  },
  {
    "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": "amount",
        "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": "amount",
        "type": "uint256"
      }
    ],
    "name": "burn",
    "outputs": [],
    "stateMutability": "nonpayable",
    "type": "function"
  },
  {
    "inputs": [
      {
        "internalType": "address",
        "name": "account",
        "type": "address"
      },
      {
        "internalType": "uint256",
        "name": "amount",
        "type": "uint256"
      }
    ],
    "name": "burnFrom",
    "outputs": [],
    "stateMutability": "nonpayable",
    "type": "function"
  },
  {
    "inputs": [
      {
        "internalType": "address",
        "name": "account",
        "type": "address"
      },
      {
        "internalType": "uint32",
        "name": "pos",
        "type": "uint32"
      }
    ],
    "name": "checkpoints",
    "outputs": [
      {
        "components": [
          {
            "internalType": "uint32",
            "name": "fromBlock",
            "type": "uint32"
          },
          {
            "internalType": "uint224",
            "name": "votes",
            "type": "uint224"
          }
        ],
        "internalType": "struct ERC20VotesUpgradeable.Checkpoint",
        "name": "",
        "type": "tuple"
      }
    ],
    "stateMutability": "view",
    "type": "function"
  },
  {
    "inputs": [],
    "name": "clock",
    "outputs": [
      {
        "internalType": "uint48",
        "name": "",
        "type": "uint48"
      }
    ],
    "stateMutability": "view",
    "type": "function"
  },
  {
    "inputs": [],
    "name": "contractType",
    "outputs": [
      {
        "internalType": "bytes32",
        "name": "",
        "type": "bytes32"
      }
    ],
    "stateMutability": "pure",
    "type": "function"
  },
  {
    "inputs": [],
    "name": "contractURI",
    "outputs": [
      {
        "internalType": "string",
        "name": "",
        "type": "string"
      }
    ],
    "stateMutability": "view",
    "type": "function"
  },
  {
    "inputs": [],
    "name": "contractVersion",
    "outputs": [
      {
        "internalType": "uint8",
        "name": "",
        "type": "uint8"
      }
    ],
    "stateMutability": "pure",
    "type": "function"
  },
  {
    "inputs": [],
    "name": "decimals",
    "outputs": [
      {
        "internalType": "uint8",
        "name": "",
        "type": "uint8"
      }
    ],
    "stateMutability": "view",
    "type": "function"
  },
  {
    "inputs": [
      {
        "internalType": "address",
        "name": "spender",
        "type": "address"
      },
      {
        "internalType": "uint256",
        "name": "subtractedValue",
        "type": "uint256"
      }
    ],
    "name": "decreaseAllowance",
    "outputs": [
      {
        "internalType": "bool",
        "name": "",
        "type": "bool"
      }
    ],
    "stateMutability": "nonpayable",
    "type": "function"
  },
  {
    "inputs": [
      {
        "internalType": "address",
        "name": "delegatee",
        "type": "address"
      }
    ],
    "name": "delegate",
    "outputs": [],
    "stateMutability": "nonpayable",
    "type": "function"
  },
  {
    "inputs": [
      {
        "internalType": "address",
        "name": "delegatee",
        "type": "address"
      },
      {
        "internalType": "uint256",
        "name": "nonce",
        "type": "uint256"
      },
      {
        "internalType": "uint256",
        "name": "expiry",
        "type": "uint256"
      },
      {
        "internalType": "uint8",
        "name": "v",
        "type": "uint8"
      },
      {
        "internalType": "bytes32",
        "name": "r",
        "type": "bytes32"
      },
      {
        "internalType": "bytes32",
        "name": "s",
        "type": "bytes32"
      }
    ],
    "name": "delegateBySig",
    "outputs": [],
    "stateMutability": "nonpayable",
    "type": "function"
  },
  {
    "inputs": [
      {
        "internalType": "address",
        "name": "account",
        "type": "address"
      }
    ],
    "name": "delegates",
    "outputs": [
      {
        "internalType": "address",
        "name": "",
        "type": "address"
      }
    ],
    "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": [
      {
        "internalType": "uint256",
        "name": "timepoint",
        "type": "uint256"
      }
    ],
    "name": "getPastTotalSupply",
    "outputs": [
      {
        "internalType": "uint256",
        "name": "",
        "type": "uint256"
      }
    ],
    "stateMutability": "view",
    "type": "function"
  },
  {
    "inputs": [
      {
        "internalType": "address",
        "name": "account",
        "type": "address"
      },
      {
        "internalType": "uint256",
        "name": "timepoint",
        "type": "uint256"
      }
    ],
    "name": "getPastVotes",
    "outputs": [
      {
        "internalType": "uint256",
        "name": "",
        "type": "uint256"
      }
    ],
    "stateMutability": "view",
    "type": "function"
  },
  {
    "inputs": [],
    "name": "getPlatformFeeInfo",
    "outputs": [
      {
        "internalType": "address",
        "name": "",
        "type": "address"
      },
      {
        "internalType": "uint16",
        "name": "",
        "type": "uint16"
      }
    ],
    "stateMutability": "view",
    "type": "function"
  },
  {
    "inputs": [
      {
        "internalType": "bytes32",
        "name": "role",
        "type": "bytes32"
      }
    ],
    "name": "getRoleAdmin",
    "outputs": [
      {
        "internalType": "bytes32",
        "name": "",
        "type": "bytes32"
      }
    ],
    "stateMutability": "view",
    "type": "function"
  },
  {
    "inputs": [
      {
        "internalType": "bytes32",
        "name": "role",
        "type": "bytes32"
      },
      {
        "internalType": "uint256",
        "name": "index",
        "type": "uint256"
      }
    ],
    "name": "getRoleMember",
    "outputs": [
      {
        "internalType": "address",
        "name": "",
        "type": "address"
      }
    ],
    "stateMutability": "view",
    "type": "function"
  },
  {
    "inputs": [
      {
        "internalType": "bytes32",
        "name": "role",
        "type": "bytes32"
      }
    ],
    "name": "getRoleMemberCount",
    "outputs": [
      {
        "internalType": "uint256",
        "name": "",
        "type": "uint256"
      }
    ],
    "stateMutability": "view",
    "type": "function"
  },
  {
    "inputs": [
      {
        "internalType": "address",
        "name": "account",
        "type": "address"
      }
    ],
    "name": "getVotes",
    "outputs": [
      {
        "internalType": "uint256",
        "name": "",
        "type": "uint256"
      }
    ],
    "stateMutability": "view",
    "type": "function"
  },
  {
    "inputs": [
      {
        "internalType": "bytes32",
        "name": "role",
        "type": "bytes32"
      },
      {
        "internalType": "address",
        "name": "account",
        "type": "address"
      }
    ],
    "name": "grantRole",
    "outputs": [],
    "stateMutability": "nonpayable",
    "type": "function"
  },
  {
    "inputs": [
      {
        "internalType": "bytes32",
        "name": "role",
        "type": "bytes32"
      },
      {
        "internalType": "address",
        "name": "account",
        "type": "address"
      }
    ],
    "name": "hasRole",
    "outputs": [
      {
        "internalType": "bool",
        "name": "",
        "type": "bool"
      }
    ],
    "stateMutability": "view",
    "type": "function"
  },
  {
    "inputs": [
      {
        "internalType": "address",
        "name": "spender",
        "type": "address"
      },
      {
        "internalType": "uint256",
        "name": "addedValue",
        "type": "uint256"
      }
    ],
    "name": "increaseAllowance",
    "outputs": [
      {
        "internalType": "bool",
        "name": "",
        "type": "bool"
      }
    ],
    "stateMutability": "nonpayable",
    "type": "function"
  },
  {
    "inputs": [
      {
        "internalType": "address",
        "name": "_defaultAdmin",
        "type": "address"
      },
      {
        "internalType": "string",
        "name": "_name",
        "type": "string"
      },
      {
        "internalType": "string",
        "name": "_symbol",
        "type": "string"
      },
      {
        "internalType": "string",
        "name": "_contractURI",
        "type": "string"
      },
      {
        "internalType": "address[]",
        "name": "_trustedForwarders",
        "type": "address[]"
      },
      {
        "internalType": "address",
        "name": "_primarySaleRecipient",
        "type": "address"
      },
      {
        "internalType": "address",
        "name": "_platformFeeRecipient",
        "type": "address"
      },
      {
        "internalType": "uint256",
        "name": "_platformFeeBps",
        "type": "uint256"
      }
    ],
    "name": "initialize",
    "outputs": [],
    "stateMutability": "nonpayable",
    "type": "function"
  },
  {
    "inputs": [
      {
        "internalType": "address",
        "name": "forwarder",
        "type": "address"
      }
    ],
    "name": "isTrustedForwarder",
    "outputs": [
      {
        "internalType": "bool",
        "name": "",
        "type": "bool"
      }
    ],
    "stateMutability": "view",
    "type": "function"
  },
  {
    "inputs": [
      {
        "internalType": "address",
        "name": "to",
        "type": "address"
      },
      {
        "internalType": "uint256",
        "name": "amount",
        "type": "uint256"
      }
    ],
    "name": "mintTo",
    "outputs": [],
    "stateMutability": "nonpayable",
    "type": "function"
  },
  {
    "inputs": [
      {
        "components": [
          {
            "internalType": "address",
            "name": "to",
            "type": "address"
          },
          {
            "internalType": "address",
            "name": "primarySaleRecipient",
            "type": "address"
          },
          {
            "internalType": "uint256",
            "name": "quantity",
            "type": "uint256"
          },
          {
            "internalType": "uint256",
            "name": "price",
            "type": "uint256"
          },
          {
            "internalType": "address",
            "name": "currency",
            "type": "address"
          },
          {
            "internalType": "uint128",
            "name": "validityStartTimestamp",
            "type": "uint128"
          },
          {
            "internalType": "uint128",
            "name": "validityEndTimestamp",
            "type": "uint128"
          },
          {
            "internalType": "bytes32",
            "name": "uid",
            "type": "bytes32"
          }
        ],
        "internalType": "struct ITokenERC20.MintRequest",
        "name": "_req",
        "type": "tuple"
      },
      {
        "internalType": "bytes",
        "name": "_signature",
        "type": "bytes"
      }
    ],
    "name": "mintWithSignature",
    "outputs": [],
    "stateMutability": "payable",
    "type": "function"
  },
  {
    "inputs": [
      {
        "internalType": "bytes[]",
        "name": "data",
        "type": "bytes[]"
      }
    ],
    "name": "multicall",
    "outputs": [
      {
        "internalType": "bytes[]",
        "name": "results",
        "type": "bytes[]"
      }
    ],
    "stateMutability": "nonpayable",
    "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": [
      {
        "internalType": "address",
        "name": "account",
        "type": "address"
      }
    ],
    "name": "numCheckpoints",
    "outputs": [
      {
        "internalType": "uint32",
        "name": "",
        "type": "uint32"
      }
    ],
    "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": "primarySaleRecipient",
    "outputs": [
      {
        "internalType": "address",
        "name": "",
        "type": "address"
      }
    ],
    "stateMutability": "view",
    "type": "function"
  },
  {
    "inputs": [
      {
        "internalType": "bytes32",
        "name": "role",
        "type": "bytes32"
      },
      {
        "internalType": "address",
        "name": "account",
        "type": "address"
      }
    ],
    "name": "renounceRole",
    "outputs": [],
    "stateMutability": "nonpayable",
    "type": "function"
  },
  {
    "inputs": [
      {
        "internalType": "bytes32",
        "name": "role",
        "type": "bytes32"
      },
      {
        "internalType": "address",
        "name": "account",
        "type": "address"
      }
    ],
    "name": "revokeRole",
    "outputs": [],
    "stateMutability": "nonpayable",
    "type": "function"
  },
  {
    "inputs": [
      {
        "internalType": "string",
        "name": "_uri",
        "type": "string"
      }
    ],
    "name": "setContractURI",
    "outputs": [],
    "stateMutability": "nonpayable",
    "type": "function"
  },
  {
    "inputs": [
      {
        "internalType": "address",
        "name": "_platformFeeRecipient",
        "type": "address"
      },
      {
        "internalType": "uint256",
        "name": "_platformFeeBps",
        "type": "uint256"
      }
    ],
    "name": "setPlatformFeeInfo",
    "outputs": [],
    "stateMutability": "nonpayable",
    "type": "function"
  },
  {
    "inputs": [
      {
        "internalType": "address",
        "name": "_saleRecipient",
        "type": "address"
      }
    ],
    "name": "setPrimarySaleRecipient",
    "outputs": [],
    "stateMutability": "nonpayable",
    "type": "function"
  },
  {
    "inputs": [
      {
        "internalType": "bytes4",
        "name": "interfaceId",
        "type": "bytes4"
      }
    ],
    "name": "supportsInterface",
    "outputs": [
      {
        "internalType": "bool",
        "name": "",
        "type": "bool"
      }
    ],
    "stateMutability": "view",
    "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": "amount",
        "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": "amount",
        "type": "uint256"
      }
    ],
    "name": "transferFrom",
    "outputs": [
      {
        "internalType": "bool",
        "name": "",
        "type": "bool"
      }
    ],
    "stateMutability": "nonpayable",
    "type": "function"
  },
  {
    "inputs": [
      {
        "components": [
          {
            "internalType": "address",
            "name": "to",
            "type": "address"
          },
          {
            "internalType": "address",
            "name": "primarySaleRecipient",
            "type": "address"
          },
          {
            "internalType": "uint256",
            "name": "quantity",
            "type": "uint256"
          },
          {
            "internalType": "uint256",
            "name": "price",
            "type": "uint256"
          },
          {
            "internalType": "address",
            "name": "currency",
            "type": "address"
          },
          {
            "internalType": "uint128",
            "name": "validityStartTimestamp",
            "type": "uint128"
          },
          {
            "internalType": "uint128",
            "name": "validityEndTimestamp",
            "type": "uint128"
          },
          {
            "internalType": "bytes32",
            "name": "uid",
            "type": "bytes32"
          }
        ],
        "internalType": "struct ITokenERC20.MintRequest",
        "name": "_req",
        "type": "tuple"
      },
      {
        "internalType": "bytes",
        "name": "_signature",
        "type": "bytes"
      }
    ],
    "name": "verify",
    "outputs": [
      {
        "internalType": "bool",
        "name": "",
        "type": "bool"
      },
      {
        "internalType": "address",
        "name": "",
        "type": "address"
      }
    ],
    "stateMutability": "view",
    "type": "function"
  }
]


Contract Creation Code
60806040523480156200001157600080fd5b50600054610100900460ff1615808015620000335750600054600160ff909116105b806200004f5750303b1580156200004f575060005460ff166001145b620000b75760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201526d191e481a5b9a5d1a585b1a5e995960921b606482015260840160405180910390fd5b6000805460ff191660011790558015620000db576000805461ff0019166101001790555b801562000122576000805461ff0019169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b506149c880620001336000396000f3fe6080604052600436106102495760003560e01c806384b0196e1161013557806384b0196e146105a05780638e539e8c146105c85780638f0fefbb146105e85780639010d07c146105fb57806391d148541461061b57806391ddadf41461063b578063938e3d7b1461066757806395d89b41146106875780639ab24eb01461069c578063a0a8e460146106bc578063a217fddf146106d0578063a457c2d7146106e5578063a9059cbb14610705578063ac9650d814610725578063c1b606e214610752578063c3cda52014610791578063ca15c873146107b1578063cb2ef6f7146107d1578063d45573f6146107f1578063d505accf14610828578063d547741f14610848578063dd62ed3e14610868578063dfad80a614610888578063e8a3d485146108a8578063f1127ed8146108bd57600080fd5b806301ffc9a71461024e57806306fdde0314610283578063079fe40e146102a5578063095ea7b3146102de57806318160ddd146102fe5780631e7ac4881461031d57806323b872dd1461033f578063248a9ca31461035f5780632f2ff15d1461037f578063313ce5671461039f5780633644e515146103c157806336568abe146103d657806339509351146103f65780633a46b1a81461041657806342966c6814610436578063449a52f8146104565780634bf5d7e914610476578063572b6c051461048b578063587cde1e146104ab5780635c19a95c146104cb5780636f4f2837146104eb5780636fcfff451461050b57806370a082311461054057806379cc6790146105605780637ecebe0014610580575b600080fd5b34801561025a57600080fd5b5061026e610269366004613c63565b610907565b60405190151581526020015b60405180910390f35b34801561028f57600080fd5b50610298610932565b60405161027a9190613cdd565b3480156102b157600080fd5b5061022d546102c6906001600160a01b031681565b6040516001600160a01b03909116815260200161027a565b3480156102ea57600080fd5b5061026e6102f9366004613d0c565b6109c4565b34801561030a57600080fd5b506099545b60405190815260200161027a565b34801561032957600080fd5b5061033d610338366004613d0c565b6109e6565b005b34801561034b57600080fd5b5061026e61035a366004613d36565b610a90565b34801561036b57600080fd5b5061030f61037a366004613d72565b610abe565b34801561038b57600080fd5b5061033d61039a366004613d8b565b610ad4565b3480156103ab57600080fd5b5060125b60405160ff909116815260200161027a565b3480156103cd57600080fd5b5061030f610af5565b3480156103e257600080fd5b5061033d6103f1366004613d8b565b610b04565b34801561040257600080fd5b5061026e610411366004613d0c565b610b92565b34801561042257600080fd5b5061030f610431366004613d0c565b610bbe565b34801561044257600080fd5b5061033d610451366004613d72565b610c18565b34801561046257600080fd5b5061033d610471366004613d0c565b610c2c565b34801561048257600080fd5b50610298610c8a565b34801561049757600080fd5b5061026e6104a6366004613db7565b610d22565b3480156104b757600080fd5b506102c66104c6366004613db7565b610d40565b3480156104d757600080fd5b5061033d6104e6366004613db7565b610d5f565b3480156104f757600080fd5b5061033d610506366004613db7565b610d70565b34801561051757600080fd5b5061052b610526366004613db7565b610dc7565b60405163ffffffff909116815260200161027a565b34801561054c57600080fd5b5061030f61055b366004613db7565b610dea565b34801561056c57600080fd5b5061033d61057b366004613d0c565b610e05565b34801561058c57600080fd5b5061030f61059b366004613db7565b610e21565b3480156105ac57600080fd5b506105b5610e40565b60405161027a9796959493929190613dd2565b3480156105d457600080fd5b5061030f6105e3366004613d72565b610ede565b61033d6105f6366004613eac565b610f1a565b34801561060757600080fd5b506102c6610616366004613f08565b610faf565b34801561062757600080fd5b5061026e610636366004613d8b565b610fc8565b34801561064757600080fd5b50610650610ff4565b60405165ffffffffffff909116815260200161027a565b34801561067357600080fd5b5061033d610682366004613f2a565b610fff565b34801561069357600080fd5b5061029861101e565b3480156106a857600080fd5b5061030f6106b7366004613db7565b61102d565b3480156106c857600080fd5b5060016103af565b3480156106dc57600080fd5b5061030f600081565b3480156106f157600080fd5b5061026e610700366004613d0c565b6110b0565b34801561071157600080fd5b5061026e610720366004613d0c565b611136565b34801561073157600080fd5b50610745610740366004613f6b565b61114e565b60405161027a9190613fdf565b34801561075e57600080fd5b5061077261076d366004613eac565b6112ca565b6040805192151583526001600160a01b0390911660208301520161027a565b34801561079d57600080fd5b5061033d6107ac366004614054565b611320565b3480156107bd57600080fd5b5061030f6107cc366004613d72565b611452565b3480156107dd57600080fd5b50690546f6b656e45524332360b41b61030f565b3480156107fd57600080fd5b5061022c5461022b54604080516001600160a01b03909316835261ffff90911660208301520161027a565b34801561083457600080fd5b5061033d6108433660046140ac565b61146a565b34801561085457600080fd5b5061033d610863366004613d8b565b6115ce565b34801561087457600080fd5b5061030f610883366004614116565b6115ea565b34801561089457600080fd5b5061033d6108a3366004614270565b611615565b3480156108b457600080fd5b50610298611823565b3480156108c957600080fd5b506108dd6108d8366004614358565b6118b2565b60408051825163ffffffff1681526020928301516001600160e01b0316928101929092520161027a565b60006001600160e01b03198216635a05180f60e01b148061092c575061092c82611936565b92915050565b6060609a805461094190614398565b80601f016020809104026020016040519081016040528092919081815260200182805461096d90614398565b80156109ba5780601f1061098f576101008083540402835291602001916109ba565b820191906000526020600020905b81548152906001019060200180831161099d57829003601f168201915b5050505050905090565b6000806109cf61196b565b90506109dc818585611975565b5060019392505050565b60006109f181611a99565b612710821115610a1c5760405162461bcd60e51b8152600401610a13906143cc565b60405180910390fd5b61022b80546001600160801b0319166001600160401b03841617905561022c80546001600160a01b0385166001600160a01b031990911681179091556040518381527fe2497bd806ec41a6e0dd992c29a72efc0ef8fec9092d1978fd4a1e00b2f183049060200160405180910390a2505050565b600080610a9b61196b565b9050610aa8858285611aaa565b610ab3858585611b1e565b506001949350505050565b60009081526101c6602052604090206001015490565b610add82610abe565b610ae681611a99565b610af08383611cc8565b505050565b6000610aff611ceb565b905090565b610b0c61196b565b6001600160a01b0316816001600160a01b031614610b845760405162461bcd60e51b815260206004820152602f60248201527f416363657373436f6e74726f6c3a2063616e206f6e6c792072656e6f756e636560448201526e103937b632b9903337b91039b2b63360891b6064820152608401610a13565b610b8e8282611cf5565b5050565b600080610b9d61196b565b90506109dc818585610baf85896115ea565b610bb9919061440b565b611975565b6000610bc8610ff4565b65ffffffffffff168210610bee5760405162461bcd60e51b8152600401610a139061441e565b6001600160a01b038316600090815261016360205260409020610c119083611d18565b9392505050565b610c29610c2361196b565b82611e00565b50565b610c4660008051602061495383398151915261063661196b565b610c805760405162461bcd60e51b815260206004820152600b60248201526a3737ba1036b4b73a32b91760a91b6044820152606401610a13565b610b8e8282611e0a565b606043610c95610ff4565b65ffffffffffff1614610cea5760405162461bcd60e51b815260206004820152601d60248201527f4552433230566f7465733a2062726f6b656e20636c6f636b206d6f64650000006044820152606401610a13565b5060408051808201909152601d81527f6d6f64653d626c6f636b6e756d6265722666726f6d3d64656661756c74000000602082015290565b6001600160a01b031660009081526065602052604090205460ff1690565b6001600160a01b03908116600090815261016260205260409020541690565b610c29610d6a61196b565b82611e5b565b6000610d7b81611a99565b61022d80546001600160a01b0319166001600160a01b0384169081179091556040517f299d17e95023f496e0ffc4909cff1a61f74bb5eb18de6f900f4155bfa1b3b33390600090a25050565b6001600160a01b0381166000908152610163602052604081205461092c90611edc565b6001600160a01b031660009081526097602052604090205490565b610e1782610e1161196b565b83611aaa565b610b8e8282611e00565b6001600160a01b038116600090815261012f602052604081205461092c565b60006060806000806000606060fb546000801b148015610e60575060fc54155b610ea45760405162461bcd60e51b81526020600482015260156024820152741152540dcc4c8e88155b9a5b9a5d1a585b1a5e9959605a1b6044820152606401610a13565b610eac611f45565b610eb4611f54565b60408051600080825260208201909252600f60f81b9b939a50919850469750309650945092509050565b6000610ee8610ff4565b65ffffffffffff168210610f0e5760405162461bcd60e51b8152600401610a139061441e565b61092c61016483611d18565b610f22611f63565b6000610f2f848484611fbc565b90506000610f406020860186613db7565b9050610f4b85612157565b610f59818660400135611e0a565b806001600160a01b0316826001600160a01b03167fc4d88b1adde72eb5acf63f3e219ef5b223262233acf507c3b171277c91973c6787604051610f9c9190614468565b60405180910390a35050610af060018055565b60008281526101f860205260408120610c119083612338565b60009182526101c6602090815260408084206001600160a01b0393909316845291905290205460ff1690565b6000610aff43612344565b600061100a81611a99565b61022a611018838583614563565b50505050565b6060609b805461094190614398565b6001600160a01b03811660009081526101636020526040812054801561109d576001600160a01b0383166000908152610163602052604090208054600019830190811061107c5761107c61461d565b600091825260209091200154600160201b90046001600160e01b03166110a0565b60005b6001600160e01b03169392505050565b6000806110bb61196b565b905060006110c982866115ea565b9050838110156111295760405162461bcd60e51b815260206004820152602560248201527f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f77604482015264207a65726f60d81b6064820152608401610a13565b610ab38286868403611975565b60008061114161196b565b90506109dc818585611b1e565b6060816001600160401b0381111561116857611168614140565b60405190808252806020026020018201604052801561119b57816020015b60608152602001906001900390816111865790505b50905060006111a861196b565b9050336001600160a01b038216141560005b848110156112c157811561123957611217308787848181106111de576111de61461d565b90506020028101906111f09190614633565b8660405160200161120393929190614679565b6040516020818303038152906040526123ab565b8482815181106112295761122961461d565b60200260200101819052506112b9565b61129b3087878481811061124f5761124f61461d565b90506020028101906112619190614633565b8080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152506123ab92505050565b8482815181106112ad576112ad61461d565b60200260200101819052505b6001016111ba565b50505092915050565b60008060006112da8686866123d0565b60e0870135600090815261022e602052604090205490915060ff16158015611315575061131560008051602061495383398151915282610fc8565b969095509350505050565b834211156113705760405162461bcd60e51b815260206004820152601d60248201527f4552433230566f7465733a207369676e617475726520657870697265640000006044820152606401610a13565b604080517fe48329057bfd03d55e49b547132e39cffd9c1820ad7b9d4c5307691425d15adf60208201526001600160a01b0388169181019190915260608101869052608081018590526000906113ea906113e29060a00160405160208183030381529060405280519060200120612434565b858585612461565b90506113f581612489565b861461143f5760405162461bcd60e51b81526020600482015260196024820152784552433230566f7465733a20696e76616c6964206e6f6e636560381b6044820152606401610a13565b6114498188611e5b565b50505050505050565b60008181526101f86020526040812061092c906124b2565b834211156114ba5760405162461bcd60e51b815260206004820152601d60248201527f45524332305065726d69743a206578706972656420646561646c696e650000006044820152606401610a13565b60007f6e71edae12b1b97f4d1f60370fef10105fa2faae0126114a169c64845d6126c98888886114e98c612489565b6040805160208101969096526001600160a01b0394851690860152929091166060840152608083015260a082015260c0810186905260e001604051602081830303815290604052805190602001209050600061154482612434565b9050600061155482878787612461565b9050896001600160a01b0316816001600160a01b0316146115b75760405162461bcd60e51b815260206004820152601e60248201527f45524332305065726d69743a20696e76616c6964207369676e617475726500006044820152606401610a13565b6115c28a8a8a611975565b50505050505050505050565b6115d782610abe565b6115e081611a99565b610af08383611cf5565b6001600160a01b03918216600090815260986020908152604080832093909416825291909152205490565b600054610100900460ff16158080156116355750600054600160ff909116105b806116565750611644306124bc565b158015611656575060005460ff166001145b6116b95760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201526d191e481a5b9a5d1a585b1a5e995960921b6064820152608401610a13565b6000805460ff1916600117905580156116dc576000805461ff0019166101001790555b6116e46124cb565b6116ed856124fc565b6116f688612581565b61170088886125cb565b61022a61170d878261469a565b5061022d80546001600160a01b038087166001600160a01b03199283161790925561022c8054928616929091169190911790556127108211156117625760405162461bcd60e51b8152600401610a13906143cc565b61022b80546001600160801b0319166001600160801b03841617905561178960008a61260b565b6117a160008051602061490c8339815191528a61260b565b6117b96000805160206149538339815191528a61260b565b6117d260008051602061490c833981519152600061260b565b8015611818576000805461ff0019169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b505050505050505050565b61022a805461183190614398565b80601f016020809104026020016040519081016040528092919081815260200182805461185d90614398565b80156118aa5780601f1061187f576101008083540402835291602001916118aa565b820191906000526020600020905b81548152906001019060200180831161188d57829003601f168201915b505050505081565b60408051808201909152600080825260208201526001600160a01b038316600090815261016360205260409020805463ffffffff84169081106118f7576118f761461d565b60009182526020918290206040805180820190915291015463ffffffff81168252600160201b90046001600160e01b0316918101919091529392505050565b60006001600160e01b03198216637965db0b60e01b148061092c57506301ffc9a760e01b6001600160e01b031983161461092c565b6000610aff612615565b6001600160a01b0383166119d75760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b6064820152608401610a13565b6001600160a01b038216611a385760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b6064820152608401610a13565b6001600160a01b0383811660008181526098602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b610c2981611aa561196b565b612637565b6000611ab684846115ea565b905060001981146110185781811015611b115760405162461bcd60e51b815260206004820152601d60248201527f45524332303a20696e73756666696369656e7420616c6c6f77616e63650000006044820152606401610a13565b6110188484848403611975565b6001600160a01b038316611b825760405162461bcd60e51b815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604482015264647265737360d81b6064820152608401610a13565b6001600160a01b038216611be45760405162461bcd60e51b815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201526265737360e81b6064820152608401610a13565b611bef838383612690565b6001600160a01b03831660009081526097602052604090205481811015611c675760405162461bcd60e51b815260206004820152602660248201527f45524332303a207472616e7366657220616d6f756e7420657863656564732062604482015265616c616e636560d01b6064820152608401610a13565b6001600160a01b03808516600081815260976020526040808220868603905592861680825290839020805486019055915160008051602061497383398151915290611cb59086815260200190565b60405180910390a3611018848484612751565b611cd2828261275c565b60008281526101f860205260409020610af090826127e4565b6000610aff6127f9565b611cff828261286d565b60008281526101f860205260409020610af090826128f3565b815460009081816005811115611d72576000611d3384612908565b611d3d9085614753565b600088815260209020909150869082015463ffffffff161115611d6257809150611d70565b611d6d81600161440b565b92505b505b80821015611dbf576000611d8683836129f0565b600088815260209020909150869082015463ffffffff161115611dab57809150611db9565b611db681600161440b565b92505b50611d72565b8015611dea5760008681526020902081016000190154600160201b90046001600160e01b0316611ded565b60005b6001600160e01b03169695505050505050565b610b8e8282612a0b565b611e148282612a24565b816001600160a01b03167f3f2c9d57c068687834f0de942a9babb9e5acab57d516d3480a3c16ee165a427382604051611e4f91815260200190565b60405180910390a25050565b6000611e6683610d40565b90506000611e7384610dea565b6001600160a01b038581166000818152610162602052604080822080546001600160a01b031916898616908117909155905194955093928616927f3134e8a2e6d97e929a7e54011ea5485d7d196dd5f0ba4d4ef95803e8e3fc257f9190a4611018828483612a2e565b600063ffffffff821115611f415760405162461bcd60e51b815260206004820152602660248201527f53616665436173743a2076616c756520646f65736e27742066697420696e203360448201526532206269747360d01b6064820152608401610a13565b5090565b606060fd805461094190614398565b606060fe805461094190614398565b600260015403611fb55760405162461bcd60e51b815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c006044820152606401610a13565b6002600155565b6000806000611fcc8686866112ca565b91509150816120115760405162461bcd60e51b8152602060048201526011602482015270696e76616c6964207369676e617475726560781b6044820152606401610a13565b4261202260c0880160a08901614766565b6001600160801b03161115801561205157504261204560e0880160c08901614766565b6001600160801b031610155b61208f5760405162461bcd60e51b815260206004820152600f60248201526e1c995c5d595cdd08195e1c1a5c9959608a1b6044820152606401610a13565b600061209e6020880188613db7565b6001600160a01b0316036120ea5760405162461bcd60e51b81526020600482015260136024820152721c9958da5c1a595b9d081d5b9919599a5b9959606a1b6044820152606401610a13565b600086604001351161212e5760405162461bcd60e51b815260206004820152600d60248201526c7a65726f207175616e7469747960981b6044820152606401610a13565b60e0860135600090815261022e60205260409020805460ff191660011790559150509392505050565b806060013560000361219a573415610c295760405162461bcd60e51b81526020600482015260066024820152652156616c756560d01b6044820152606401610a13565b61022b54600090612710906121bc906001600160801b03166060850135614781565b6121c691906147ae565b905073eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee6121ed60a0840160808501613db7565b6001600160a01b03160361224c57816060013534146122475760405162461bcd60e51b815260206004820152601660248201527536bab9ba1039b2b732103a37ba30b610383934b1b29760511b6044820152606401610a13565b61228f565b341561228f5760405162461bcd60e51b81526020600482015260126024820152716d73672076616c7565206e6f74207a65726f60701b6044820152606401610a13565b6000806122a26040850160208601613db7565b6001600160a01b0316146122c5576122c06040840160208501613db7565b6122d3565b61022d546001600160a01b03165b90506123036122e860a0850160808601613db7565b6122f061196b565b61022c546001600160a01b031685612b6d565b610af061231660a0850160808601613db7565b61231e61196b565b8361232d866060890135614753565b612b6d565b60018055565b6000610c118383612bb3565b600065ffffffffffff821115611f415760405162461bcd60e51b815260206004820152602660248201527f53616665436173743a2076616c756520646f65736e27742066697420696e203460448201526538206269747360d01b6064820152608401610a13565b6060610c11838360405180606001604052806027815260200161492c60279139612bdd565b600061242c83838080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250612426925061241a9150889050612c55565b80519060200120612434565b90612d49565b949350505050565b600061092c612441611ceb565b8360405161190160f01b8152600281019290925260228201526042902090565b600080600061247287878787612d6d565b9150915061247f81612e27565b5095945050505050565b6001600160a01b038116600090815261012f602052604090208054600181018255905b50919050565b600061092c825490565b6001600160a01b03163b151590565b600054610100900460ff166124f25760405162461bcd60e51b8152600401610a13906147d0565b6124fa612f6c565b565b600054610100900460ff166125235760405162461bcd60e51b8152600401610a13906147d0565b60005b8151811015610b8e576001606560008484815181106125475761254761461d565b6020908102919091018101516001600160a01b03168252810191909152604001600020805460ff1916911515919091179055600101612526565b600054610100900460ff166125a85760405162461bcd60e51b8152600401610a13906147d0565b610c2981604051806040016040528060018152602001603160f81b815250612f93565b600054610100900460ff166125f25760405162461bcd60e51b8152600401610a13906147d0565b609a6125fe838261469a565b50609b610af0828261469a565b610b8e8282611cc8565b600061262033610d22565b15612632575060131936013560601c90565b503390565b6126418282610fc8565b610b8e5761264e81612fe2565b612659836020612ff4565b60405160200161266a92919061481b565b60408051601f198184030181529082905262461bcd60e51b8252610a1391600401613cdd565b6126a960008051602061490c8339815191526000610fc8565b1580156126be57506001600160a01b03831615155b80156126d257506001600160a01b03821615155b15610af0576126ef60008051602061490c83398151915284610fc8565b8061270d575061270d60008051602061490c83398151915283610fc8565b610af05760405162461bcd60e51b81526020600482015260156024820152743a3930b739b332b939903932b9ba3934b1ba32b21760591b6044820152606401610a13565b610af083838361318f565b6127668282610fc8565b610b8e5760008281526101c6602090815260408083206001600160a01b03851684529091529020805460ff191660011790556127a061196b565b6001600160a01b0316816001600160a01b0316837f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a45050565b6000610c11836001600160a01b0384166131aa565b60007f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f6128246131f9565b61282c613252565b60408051602081019490945283019190915260608201524660808201523060a082015260c00160405160208183030381529060405280519060200120905090565b6128778282610fc8565b15610b8e5760008281526101c6602090815260408083206001600160a01b03851684529091529020805460ff191690556128af61196b565b6001600160a01b0316816001600160a01b0316837ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b60405160405180910390a45050565b6000610c11836001600160a01b038416613283565b60008160000361291a57506000919050565b6000600161292784613376565b901c6001901b9050600181848161294057612940614798565b048201901c9050600181848161295857612958614798565b048201901c9050600181848161297057612970614798565b048201901c9050600181848161298857612988614798565b048201901c905060018184816129a0576129a0614798565b048201901c905060018184816129b8576129b8614798565b048201901c905060018184816129d0576129d0614798565b048201901c9050610c11818285816129ea576129ea614798565b0461340a565b60006129ff60028484186147ae565b610c119084841661440b565b612a158282613420565b61101861016461355583613561565b610b8e82826136d3565b816001600160a01b0316836001600160a01b031614158015612a505750600081115b15610af0576001600160a01b03831615612adf576001600160a01b0383166000908152610163602052604081208190612a8c9061355585613561565b91509150846001600160a01b03167fdec2bacdd2f05b59de34da9b523dff8be42e5e38e818c82fdb0bae774387a7248383604051612ad4929190918252602082015260400190565b60405180910390a250505b6001600160a01b03821615610af0576001600160a01b0382166000908152610163602052604081208190612b169061375e85613561565b91509150836001600160a01b03167fdec2bacdd2f05b59de34da9b523dff8be42e5e38e818c82fdb0bae774387a7248383604051612b5e929190918252602082015260400190565b60405180910390a25050505050565b80156110185773eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeed196001600160a01b03851601612ba757612ba2828261376a565b611018565b6110188484848461380c565b6000826000018281548110612bca57612bca61461d565b9060005260206000200154905092915050565b6060600080856001600160a01b031685604051612bfa919061488a565b600060405180830381855af49150503d8060008114612c35576040519150601f19603f3d011682016040523d82523d6000602084013e612c3a565b606091505b5091509150612c4b8683838761385f565b9695505050505050565b60607fbac245dbd9b8b2bb334c0675db20a7a7a8506de563990c4ce3207f4c3c5b75e1612c856020840184613db7565b612c956040850160208601613db7565b60408501356060860135612caf60a0880160808901613db7565b612cbf60c0890160a08a01614766565b612ccf60e08a0160c08b01614766565b6040805160208101999099526001600160a01b03978816908901529486166060880152608087019390935260a086019190915290921660c08401526001600160801b0391821660e0808501919091529116610100830152830135610120820152610140016040516020818303038152906040529050919050565b6000806000612d5885856138d6565b91509150612d6581612e27565b509392505050565b6000806fa2a8918ca85bafe22016d0b997e4df60600160ff1b03831115612d9a5750600090506003612e1e565b6040805160008082526020820180845289905260ff881692820192909252606081018690526080810185905260019060a0016020604051602081039080840390855afa158015612dee573d6000803e3d6000fd5b5050604051601f1901519150506001600160a01b038116612e1757600060019250925050612e1e565b9150600090505b94509492505050565b6000816004811115612e3b57612e3b6148a6565b03612e435750565b6001816004811115612e5757612e576148a6565b03612e9f5760405162461bcd60e51b815260206004820152601860248201527745434453413a20696e76616c6964207369676e617475726560401b6044820152606401610a13565b6002816004811115612eb357612eb36148a6565b03612f005760405162461bcd60e51b815260206004820152601f60248201527f45434453413a20696e76616c6964207369676e6174757265206c656e677468006044820152606401610a13565b6003816004811115612f1457612f146148a6565b03610c295760405162461bcd60e51b815260206004820152602260248201527f45434453413a20696e76616c6964207369676e6174757265202773272076616c604482015261756560f01b6064820152608401610a13565b600054610100900460ff166123325760405162461bcd60e51b8152600401610a13906147d0565b600054610100900460ff16612fba5760405162461bcd60e51b8152600401610a13906147d0565b60fd612fc6838261469a565b5060fe612fd3828261469a565b5050600060fb81905560fc5550565b606061092c6001600160a01b03831660145b60606000613003836002614781565b61300e90600261440b565b6001600160401b0381111561302557613025614140565b6040519080825280601f01601f19166020018201604052801561304f576020820181803683370190505b509050600360fc1b8160008151811061306a5761306a61461d565b60200101906001600160f81b031916908160001a905350600f60fb1b816001815181106130995761309961461d565b60200101906001600160f81b031916908160001a90535060006130bd846002614781565b6130c890600161440b565b90505b6001811115613140576f181899199a1a9b1b9c1cb0b131b232b360811b85600f16601081106130fc576130fc61461d565b1a60f81b8282815181106131125761311261461d565b60200101906001600160f81b031916908160001a90535060049490941c93613139816148bc565b90506130cb565b508315610c115760405162461bcd60e51b815260206004820181905260248201527f537472696e67733a20686578206c656e67746820696e73756666696369656e746044820152606401610a13565b610af061319b84610d40565b6131a484610d40565b83612a2e565b60008181526001830160205260408120546131f15750815460018181018455600084815260208082209093018490558454848252828601909352604090209190915561092c565b50600061092c565b600080613204611f45565b80519091501561321b578051602090910120919050565b60fb54801561322a5792915050565b7fc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a4709250505090565b60008061325d611f54565b805190915015613274578051602090910120919050565b60fc54801561322a5792915050565b6000818152600183016020526040812054801561336c5760006132a7600183614753565b85549091506000906132bb90600190614753565b90508181146133205760008660000182815481106132db576132db61461d565b90600052602060002001549050808760000184815481106132fe576132fe61461d565b6000918252602080832090910192909255918252600188019052604090208390555b8554869080613331576133316148d3565b60019003818190600052602060002001600090559055856001016000868152602001908152602001600020600090556001935050505061092c565b600091505061092c565b600080608083901c1561338b57608092831c92015b604083901c1561339d57604092831c92015b602083901c156133af57602092831c92015b601083901c156133c157601092831c92015b600883901c156133d357600892831c92015b600483901c156133e557600492831c92015b600283901c156133f757600292831c92015b600183901c1561092c5760010192915050565b60008183106134195781610c11565b5090919050565b6001600160a01b0382166134805760405162461bcd60e51b815260206004820152602160248201527f45524332303a206275726e2066726f6d20746865207a65726f206164647265736044820152607360f81b6064820152608401610a13565b61348c82600083612690565b6001600160a01b038216600090815260976020526040902054818110156135005760405162461bcd60e51b815260206004820152602260248201527f45524332303a206275726e20616d6f756e7420657863656564732062616c616e604482015261636560f01b6064820152608401610a13565b6001600160a01b0383166000818152609760209081526040808320868603905560998054879003905551858152919291600080516020614973833981519152910160405180910390a3610af083600084612751565b6000610c118284614753565b825460009081908181156135ad5760008781526020902082016000190160408051808201909152905463ffffffff81168252600160201b90046001600160e01b031660208201526135c2565b60408051808201909152600080825260208201525b905080602001516001600160e01b031693506135e284868863ffffffff16565b925060008211801561360c57506135f7610ff4565b65ffffffffffff16816000015163ffffffff16145b156136505761361a8361391b565b60008881526020902083016000190180546001600160e01b0392909216600160201b0263ffffffff9092169190911790556136c9565b866040518060400160405280613674613667610ff4565b65ffffffffffff16611edc565b63ffffffff1681526020016136888661391b565b6001600160e01b039081169091528254600181018455600093845260209384902083519490930151909116600160201b0263ffffffff909316929092179101555b5050935093915050565b6136dd8282613984565b6099546001600160e01b03101561374f5760405162461bcd60e51b815260206004820152603060248201527f4552433230566f7465733a20746f74616c20737570706c79207269736b73206f60448201526f766572666c6f77696e6720766f74657360801b6064820152608401610a13565b61101861016461375e83613561565b6000610c11828461440b565b6000826001600160a01b03168260405160006040518083038185875af1925050503d80600081146137b7576040519150601f19603f3d011682016040523d82523d6000602084013e6137bc565b606091505b5050905080610af05760405162461bcd60e51b815260206004820152601c60248201527b1b985d1a5d99481d1bdad95b881d1c985b9cd9995c8819985a5b195960221b6044820152606401610a13565b816001600160a01b0316836001600160a01b0316031561101857306001600160a01b0384160361384a57612ba26001600160a01b0385168383613a47565b6110186001600160a01b038516848484613aaa565b606083156138cc5782516000036138c557613879856124bc565b6138c55760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e74726163740000006044820152606401610a13565b508161242c565b61242c8383613ae2565b600080825160410361390c5760208301516040840151606085015160001a61390087828585612d6d565b94509450505050613914565b506000905060025b9250929050565b60006001600160e01b03821115611f415760405162461bcd60e51b815260206004820152602760248201527f53616665436173743a2076616c756520646f65736e27742066697420696e20326044820152663234206269747360c81b6064820152608401610a13565b6001600160a01b0382166139da5760405162461bcd60e51b815260206004820152601f60248201527f45524332303a206d696e7420746f20746865207a65726f2061646472657373006044820152606401610a13565b6139e660008383612690565b80609960008282546139f8919061440b565b90915550506001600160a01b038216600081815260976020908152604080832080548601905551848152600080516020614973833981519152910160405180910390a3610b8e60008383612751565b6040516001600160a01b038316602482015260448101829052610af090849063a9059cbb60e01b906064015b60408051601f198184030181529190526020810180516001600160e01b03166001600160e01b031990931692909217909152613b0c565b6040516001600160a01b03808516602483015283166044820152606481018290526110189085906323b872dd60e01b90608401613a73565b815115613af25781518083602001fd5b8060405162461bcd60e51b8152600401610a139190613cdd565b6000613b61826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c6564815250856001600160a01b0316613bde9092919063ffffffff16565b805190915015610af05780806020019051810190613b7f91906148e9565b610af05760405162461bcd60e51b815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e6044820152691bdd081cdd58d8d9595960b21b6064820152608401610a13565b606061242c848460008585600080866001600160a01b03168587604051613c05919061488a565b60006040518083038185875af1925050503d8060008114613c42576040519150601f19603f3d011682016040523d82523d6000602084013e613c47565b606091505b5091509150613c588783838761385f565b979650505050505050565b600060208284031215613c7557600080fd5b81356001600160e01b031981168114610c1157600080fd5b60005b83811015613ca8578181015183820152602001613c90565b50506000910152565b60008151808452613cc9816020860160208601613c8d565b601f01601f19169290920160200192915050565b602081526000610c116020830184613cb1565b80356001600160a01b0381168114613d0757600080fd5b919050565b60008060408385031215613d1f57600080fd5b613d2883613cf0565b946020939093013593505050565b600080600060608486031215613d4b57600080fd5b613d5484613cf0565b9250613d6260208501613cf0565b9150604084013590509250925092565b600060208284031215613d8457600080fd5b5035919050565b60008060408385031215613d9e57600080fd5b82359150613dae60208401613cf0565b90509250929050565b600060208284031215613dc957600080fd5b610c1182613cf0565b60ff60f81b881681526000602060e06020840152613df360e084018a613cb1565b8381036040850152613e05818a613cb1565b606085018990526001600160a01b038816608086015260a0850187905284810360c08601528551808252602080880193509091019060005b81811015613e5957835183529284019291840191600101613e3d565b50909c9b505050505050505050505050565b60008083601f840112613e7d57600080fd5b5081356001600160401b03811115613e9457600080fd5b60208301915083602082850101111561391457600080fd5b6000806000838503610120811215613ec357600080fd5b61010080821215613ed357600080fd5b85945084013590506001600160401b03811115613eef57600080fd5b613efb86828701613e6b565b9497909650939450505050565b60008060408385031215613f1b57600080fd5b50508035926020909101359150565b60008060208385031215613f3d57600080fd5b82356001600160401b03811115613f5357600080fd5b613f5f85828601613e6b565b90969095509350505050565b60008060208385031215613f7e57600080fd5b82356001600160401b0380821115613f9557600080fd5b818501915085601f830112613fa957600080fd5b813581811115613fb857600080fd5b8660208260051b8501011115613fcd57600080fd5b60209290920196919550909350505050565b600060208083016020845280855180835260408601915060408160051b87010192506020870160005b8281101561403657603f19888603018452614024858351613cb1565b94509285019290850190600101614008565b5092979650505050505050565b803560ff81168114613d0757600080fd5b60008060008060008060c0878903121561406d57600080fd5b61407687613cf0565b9550602087013594506040870135935061409260608801614043565b92506080870135915060a087013590509295509295509295565b600080600080600080600060e0888a0312156140c757600080fd5b6140d088613cf0565b96506140de60208901613cf0565b955060408801359450606088013593506140fa60808901614043565b925060a0880135915060c0880135905092959891949750929550565b6000806040838503121561412957600080fd5b61413283613cf0565b9150613dae60208401613cf0565b634e487b7160e01b600052604160045260246000fd5b604051601f8201601f191681016001600160401b038111828210171561417e5761417e614140565b604052919050565b600082601f83011261419757600080fd5b81356001600160401b038111156141b0576141b0614140565b6141c3601f8201601f1916602001614156565b8181528460208386010111156141d857600080fd5b816020850160208301376000918101602001919091529392505050565b600082601f83011261420657600080fd5b813560206001600160401b0382111561422157614221614140565b8160051b614230828201614156565b928352848101820192828101908785111561424a57600080fd5b83870192505b84831015613c585761426183613cf0565b82529183019190830190614250565b600080600080600080600080610100898b03121561428d57600080fd5b61429689613cf0565b975060208901356001600160401b03808211156142b257600080fd5b6142be8c838d01614186565b985060408b01359150808211156142d457600080fd5b6142e08c838d01614186565b975060608b01359150808211156142f657600080fd5b6143028c838d01614186565b965060808b013591508082111561431857600080fd5b506143258b828c016141f5565b94505061433460a08a01613cf0565b925061434260c08a01613cf0565b915060e089013590509295985092959890939650565b6000806040838503121561436b57600080fd5b61437483613cf0565b9150602083013563ffffffff8116811461438d57600080fd5b809150509250929050565b600181811c908216806143ac57607f821691505b6020821081036124ac57634e487b7160e01b600052602260045260246000fd5b6020808252600f908201526e65786365656473204d41585f42505360881b604082015260600190565b634e487b7160e01b600052601160045260246000fd5b8082018082111561092c5761092c6143f5565b60208082526019908201527804552433230566f7465733a20667574757265206c6f6f6b757603c1b604082015260600190565b80356001600160801b0381168114613d0757600080fd5b61010081016001600160a01b038061447f85613cf0565b1683528061448f60208601613cf0565b1660208401526040840135604084015260608401356060840152806144b660808601613cf0565b166080840152506144c960a08401614451565b6001600160801b0381811660a0850152806144e660c08701614451565b1660c0850152505060e083013560e083015292915050565b601f821115610af0576000816000526020600020601f850160051c810160208610156145275750805b601f850160051c820191505b8181101561454657828155600101614533565b505050505050565b600019600383901b1c191660019190911b1790565b6001600160401b0383111561457a5761457a614140565b61458e836145888354614398565b836144fe565b6000601f8411600181146145bc57600085156145aa5750838201355b6145b4868261454e565b845550614616565b600083815260209020601f19861690835b828110156145ed57868501358255602094850194600190920191016145cd565b508682101561460a5760001960f88860031b161c19848701351681555b505060018560011b0183555b5050505050565b634e487b7160e01b600052603260045260246000fd5b6000808335601e1984360301811261464a57600080fd5b8301803591506001600160401b0382111561466457600080fd5b60200191503681900382131561391457600080fd5b8284823760609190911b6001600160601b0319169101908152601401919050565b81516001600160401b038111156146b3576146b3614140565b6146c7816146c18454614398565b846144fe565b602080601f8311600181146146f657600084156146e45750858301515b6146ee858261454e565b865550614546565b600085815260208120601f198616915b8281101561472557888601518255948401946001909101908401614706565b50858210156147435787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b8181038181111561092c5761092c6143f5565b60006020828403121561477857600080fd5b610c1182614451565b808202811582820484141761092c5761092c6143f5565b634e487b7160e01b600052601260045260246000fd5b6000826147cb57634e487b7160e01b600052601260045260246000fd5b500490565b6020808252602b908201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960408201526a6e697469616c697a696e6760a81b606082015260800190565b76020b1b1b2b9b9a1b7b73a3937b61d1030b1b1b7bab73a1604d1b81526000835161484d816017850160208801613c8d565b7001034b99036b4b9b9b4b733903937b6329607d1b601791840191820152835161487e816028840160208801613c8d565b01602801949350505050565b6000825161489c818460208701613c8d565b9190910192915050565b634e487b7160e01b600052602160045260246000fd5b6000816148cb576148cb6143f5565b506000190190565b634e487b7160e01b600052603160045260246000fd5b6000602082840312156148fb57600080fd5b81518015158114610c1157600080fdfe8502233096d909befbda0999bb8ea2f3a6be3c138b9fbf003752a4c8bce86f6c416464726573733a206c6f772d6c6576656c2064656c65676174652063616c6c206661696c65649f2df0fed2c77648de5860a4cc508cd0818c85b8b8a1ab4ceeef8d981c8956a6ddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3efa264697066735822122088fb20fa98513c08f9de16cbde0db62c9b18a180c5260018278a1aac3c54839f64736f6c63430008170033