{
  "abi": [
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "internalType": "address",
          "name": "owner",
          "type": "address"
        },
        {
          "indexed": true,
          "internalType": "address",
          "name": "approved",
          "type": "address"
        },
        {
          "indexed": true,
          "internalType": "uint256",
          "name": "tokenId",
          "type": "uint256"
        }
      ],
      "name": "Approval",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "internalType": "address",
          "name": "owner",
          "type": "address"
        },
        {
          "indexed": true,
          "internalType": "address",
          "name": "operator",
          "type": "address"
        },
        {
          "indexed": false,
          "internalType": "bool",
          "name": "approved",
          "type": "bool"
        }
      ],
      "name": "ApprovalForAll",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "internalType": "address",
          "name": "from",
          "type": "address"
        },
        {
          "indexed": true,
          "internalType": "address",
          "name": "to",
          "type": "address"
        },
        {
          "indexed": true,
          "internalType": "uint256",
          "name": "tokenId",
          "type": "uint256"
        }
      ],
      "name": "Transfer",
      "type": "event"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "to",
          "type": "address"
        },
        {
          "internalType": "uint256",
          "name": "tokenId",
          "type": "uint256"
        }
      ],
      "name": "approve",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "owner",
          "type": "address"
        }
      ],
      "name": "balanceOf",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "baseURI",
      "outputs": [
        {
          "internalType": "string",
          "name": "",
          "type": "string"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "uint256",
          "name": "tokenId",
          "type": "uint256"
        }
      ],
      "name": "getApproved",
      "outputs": [
        {
          "internalType": "address",
          "name": "",
          "type": "address"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "owner",
          "type": "address"
        },
        {
          "internalType": "address",
          "name": "operator",
          "type": "address"
        }
      ],
      "name": "isApprovedForAll",
      "outputs": [
        {
          "internalType": "bool",
          "name": "",
          "type": "bool"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "name",
      "outputs": [
        {
          "internalType": "string",
          "name": "",
          "type": "string"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "uint256",
          "name": "tokenId",
          "type": "uint256"
        }
      ],
      "name": "ownerOf",
      "outputs": [
        {
          "internalType": "address",
          "name": "",
          "type": "address"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "from",
          "type": "address"
        },
        {
          "internalType": "address",
          "name": "to",
          "type": "address"
        },
        {
          "internalType": "uint256",
          "name": "tokenId",
          "type": "uint256"
        }
      ],
      "name": "safeTransferFrom",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "from",
          "type": "address"
        },
        {
          "internalType": "address",
          "name": "to",
          "type": "address"
        },
        {
          "internalType": "uint256",
          "name": "tokenId",
          "type": "uint256"
        },
        {
          "internalType": "bytes",
          "name": "_data",
          "type": "bytes"
        }
      ],
      "name": "safeTransferFrom",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "operator",
          "type": "address"
        },
        {
          "internalType": "bool",
          "name": "approved",
          "type": "bool"
        }
      ],
      "name": "setApprovalForAll",
      "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": [
        {
          "internalType": "uint256",
          "name": "index",
          "type": "uint256"
        }
      ],
      "name": "tokenByIndex",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "owner",
          "type": "address"
        },
        {
          "internalType": "uint256",
          "name": "index",
          "type": "uint256"
        }
      ],
      "name": "tokenOfOwnerByIndex",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "uint256",
          "name": "tokenId",
          "type": "uint256"
        }
      ],
      "name": "tokenURI",
      "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": "from",
          "type": "address"
        },
        {
          "internalType": "address",
          "name": "to",
          "type": "address"
        },
        {
          "internalType": "uint256",
          "name": "tokenId",
          "type": "uint256"
        }
      ],
      "name": "transferFrom",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    }
  ],
  "bytecode": {
    "object": "0x608060405234801561001057600080fd5b50611fda806100206000396000f3fe608060405234801561001057600080fd5b506004361061011b5760003560e01c80634f6ccce7116100b257806395d89b4111610081578063b88d4fde11610066578063b88d4fde14610402578063c87b56dd146104d5578063e985e9c5146104f25761011b565b806395d89b41146103bf578063a22cb465146103c75761011b565b80634f6ccce71461034a5780636352211e146103675780636c0360eb1461038457806370a082311461038c5761011b565b806318160ddd116100ee57806318160ddd1461027157806323b872dd1461028b5780632f745c59146102ce57806342842e0e146103075761011b565b806301ffc9a71461012057806306fdde0314610173578063081812fc146101f0578063095ea7b314610236575b600080fd5b61015f6004803603602081101561013657600080fd5b50357fffffffff000000000000000000000000000000000000000000000000000000001661052d565b604080519115158252519081900360200190f35b61017b610568565b6040805160208082528351818301528351919283929083019185019080838360005b838110156101b557818101518382015260200161019d565b50505050905090810190601f1680156101e25780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b61020d6004803603602081101561020657600080fd5b503561061c565b6040805173ffffffffffffffffffffffffffffffffffffffff9092168252519081900360200190f35b61026f6004803603604081101561024c57600080fd5b5073ffffffffffffffffffffffffffffffffffffffff81351690602001356106a5565b005b6102796107e8565b60408051918252519081900360200190f35b61026f600480360360608110156102a157600080fd5b5073ffffffffffffffffffffffffffffffffffffffff8135811691602081013590911690604001356107f9565b610279600480360360408110156102e457600080fd5b5073ffffffffffffffffffffffffffffffffffffffff813516906020013561086a565b61026f6004803603606081101561031d57600080fd5b5073ffffffffffffffffffffffffffffffffffffffff8135811691602081013590911690604001356108a2565b6102796004803603602081101561036057600080fd5b50356108bd565b61020d6004803603602081101561037d57600080fd5b50356108d3565b61017b6108fb565b610279600480360360208110156103a257600080fd5b503573ffffffffffffffffffffffffffffffffffffffff1661097a565b61017b610a16565b61026f600480360360408110156103dd57600080fd5b5073ffffffffffffffffffffffffffffffffffffffff81351690602001351515610a95565b61026f6004803603608081101561041857600080fd5b73ffffffffffffffffffffffffffffffffffffffff82358116926020810135909116916040820135919081019060808101606082013564010000000081111561046057600080fd5b82018360208201111561047257600080fd5b8035906020019184600183028401116401000000008311171561049457600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250929550610c06945050505050565b61017b600480360360208110156104eb57600080fd5b5035610c7e565b61015f6004803603604081101561050857600080fd5b5073ffffffffffffffffffffffffffffffffffffffff81358116916020013516610feb565b7fffffffff00000000000000000000000000000000000000000000000000000000811660009081526033602052604090205460ff165b919050565b606a8054604080516020601f60027fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff6101006001881615020190951694909404938401819004810282018101909252828152606093909290918301828280156106125780601f106105e757610100808354040283529160200191610612565b820191906000526020600020905b8154815290600101906020018083116105f557829003601f168201915b5050505050905090565b600061062782611026565b61067c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602c815260200180611ef8602c913960400191505060405180910390fd5b5060009081526068602052604090205473ffffffffffffffffffffffffffffffffffffffff1690565b60006106b0826108d3565b90508073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415610737576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526021815260200180611f7c6021913960400191505060405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16610756611033565b73ffffffffffffffffffffffffffffffffffffffff16148061078457506107848161077f611033565b610feb565b6107d9576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526038815260200180611e4b6038913960400191505060405180910390fd5b6107e38383611037565b505050565b60006107f460666110d7565b905090565b61080a610804611033565b826110e2565b61085f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526031815260200180611f9d6031913960400191505060405180910390fd5b6107e38383836111d4565b73ffffffffffffffffffffffffffffffffffffffff8216600090815260656020526040812061089990836113af565b90505b92915050565b6107e383838360405180602001604052806000815250610c06565b6000806108cb6066846113bb565b509392505050565b600061089c82604051806060016040528060298152602001611ead60299139606691906113d7565b606d8054604080516020601f60027fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff6101006001881615020190951694909404938401819004810282018101909252828152606093909290918301828280156106125780601f106105e757610100808354040283529160200191610612565b600073ffffffffffffffffffffffffffffffffffffffff82166109e8576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602a815260200180611e83602a913960400191505060405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff8216600090815260656020526040902061089c906110d7565b606b8054604080516020601f60027fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff6101006001881615020190951694909404938401819004810282018101909252828152606093909290918301828280156106125780601f106105e757610100808354040283529160200191610612565b610a9d611033565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415610b3757604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601960248201527f4552433732313a20617070726f766520746f2063616c6c657200000000000000604482015290519081900360640190fd5b8060696000610b44611033565b73ffffffffffffffffffffffffffffffffffffffff90811682526020808301939093526040918201600090812091871680825291909352912080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001692151592909217909155610bb3611033565b73ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c318360405180821515815260200191505060405180910390a35050565b610c17610c11611033565b836110e2565b610c6c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526031815260200180611f9d6031913960400191505060405180910390fd5b610c78848484846113ee565b50505050565b6060610c8982611026565b610cde576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602f815260200180611f4d602f913960400191505060405180910390fd5b6000828152606c602090815260408083208054825160026001831615610100027fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0190921691909104601f810185900485028201850190935282815292909190830182828015610d8f5780601f10610d6457610100808354040283529160200191610d8f565b820191906000526020600020905b815481529060010190602001808311610d7257829003601f168201915b505050505090506000610da06108fb565b9050805160001415610db457509050610563565b815115610ecf5780826040516020018083805190602001908083835b60208310610e0d57805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe09092019160209182019101610dd0565b51815160209384036101000a7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff018019909216911617905285519190930192850191508083835b60208310610e9157805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe09092019160209182019101610e54565b6001836020036101000a0380198251168184511680821785525050505050509050019250505060405160208183030381529060405292505050610563565b80610ed98561145a565b6040516020018083805190602001908083835b60208310610f2957805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe09092019160209182019101610eec565b51815160209384036101000a7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff018019909216911617905285519190930192850191508083835b60208310610fad57805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe09092019160209182019101610f70565b6001836020036101000a0380198251168184511680821785525050505050509050019250505060405160208183030381529060405292505050919050565b73ffffffffffffffffffffffffffffffffffffffff918216600090815260696020908152604080832093909416825291909152205460ff1690565b600061089c606683611587565b3390565b600081815260686020526040902080547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff84169081179091558190611091826108d3565b73ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b600061089c82611593565b60006110ed82611026565b611142576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602c815260200180611e1f602c913960400191505060405180910390fd5b600061114d836108d3565b90508073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1614806111bc57508373ffffffffffffffffffffffffffffffffffffffff166111a48461061c565b73ffffffffffffffffffffffffffffffffffffffff16145b806111cc57506111cc8185610feb565b949350505050565b8273ffffffffffffffffffffffffffffffffffffffff166111f4826108d3565b73ffffffffffffffffffffffffffffffffffffffff1614611260576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526029815260200180611f246029913960400191505060405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff82166112cc576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526024815260200180611dfb6024913960400191505060405180910390fd5b6112d78383836107e3565b6112e2600082611037565b73ffffffffffffffffffffffffffffffffffffffff831660009081526065602052604090206113119082611597565b5073ffffffffffffffffffffffffffffffffffffffff8216600090815260656020526040902061134190826115a3565b5061134e606682846115af565b50808273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4505050565b600061089983836115d2565b60008080806113ca8686611650565b9097909650945050505050565b60006113e48484846116e5565b90505b9392505050565b6113f98484846111d4565b611405848484846117c9565b610c78576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526032815260200180611dc96032913960400191505060405180910390fd5b60608161149b575060408051808201909152600181527f30000000000000000000000000000000000000000000000000000000000000006020820152610563565b8160005b81156114b357600101600a8204915061149f565b60008167ffffffffffffffff811180156114cc57600080fd5b506040519080825280601f01601f1916602001820160405280156114f7576020820181803683370190505b5085935090507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82015b831561157e57600a840660300160f81b8282806001900393508151811061154457fe5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600a84049350611521565b50949350505050565b600061089983836119d9565b5490565b600061089983836119f1565b60006108998383611ad5565b60006113e4848473ffffffffffffffffffffffffffffffffffffffff8516611b1f565b8154600090821061162e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526022815260200180611da76022913960400191505060405180910390fd5b82600001828154811061163d57fe5b9060005260206000200154905092915050565b8154600090819083106116ae576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526022815260200180611ed66022913960400191505060405180910390fd5b60008460000184815481106116bf57fe5b906000526020600020906002020190508060000154816001015492509250509250929050565b6000828152600184016020526040812054828161179a576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825283818151815260200191508051906020019080838360005b8381101561175f578181015183820152602001611747565b50505050905090810190601f16801561178c5780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b508460000160018203815481106117ad57fe5b9060005260206000209060020201600101549150509392505050565b60006117ea8473ffffffffffffffffffffffffffffffffffffffff16611bb6565b6117f6575060016111cc565b600061196e7f150b7a0200000000000000000000000000000000000000000000000000000000611824611033565b888787604051602401808573ffffffffffffffffffffffffffffffffffffffff1681526020018473ffffffffffffffffffffffffffffffffffffffff16815260200183815260200180602001828103825283818151815260200191508051906020019080838360005b838110156118a557818101518382015260200161188d565b50505050905090810190601f1680156118d25780820380516001836020036101000a031916815260200191505b5095505050505050604051602081830303815290604052907bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19166020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff8381831617835250505050604051806060016040528060328152602001611dc96032913973ffffffffffffffffffffffffffffffffffffffff88169190611bbc565b9050600081806020019051602081101561198757600080fd5b50517fffffffff00000000000000000000000000000000000000000000000000000000167f150b7a02000000000000000000000000000000000000000000000000000000001492505050949350505050565b60009081526001919091016020526040902054151590565b60008181526001830160205260408120548015611acb5783547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8083019190810190600090879083908110611a4257fe5b9060005260206000200154905080876000018481548110611a5f57fe5b600091825260208083209091019290925582815260018981019092526040902090840190558654879080611a8f57fe5b6001900381819060005260206000200160009055905586600101600087815260200190815260200160002060009055600194505050505061089c565b600091505061089c565b6000611ae183836119d9565b611b175750815460018181018455600084815260208082209093018490558454848252828601909352604090209190915561089c565b50600061089c565b600082815260018401602052604081205480611b845750506040805180820182528381526020808201848152865460018181018955600089815284812095516002909302909501918255915190820155865486845281880190925292909120556113e7565b82856000016001830381548110611b9757fe5b90600052602060002090600202016001018190555060009150506113e7565b3b151590565b60606113e4848460008585611bd085611bb6565b611c3b57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e7472616374000000604482015290519081900360640190fd5b6000808673ffffffffffffffffffffffffffffffffffffffff1685876040518082805190602001908083835b60208310611ca457805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe09092019160209182019101611c67565b6001836020036101000a03801982511681845116808217855250505050505090500191505060006040518083038185875af1925050503d8060008114611d06576040519150601f19603f3d011682016040523d82523d6000602084013e611d0b565b606091505b5091509150611d1b828286611d26565b979650505050505050565b60608315611d355750816113e7565b825115611d455782518084602001fd5b6040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181815284516024840152845185939192839260440191908501908083836000831561175f57818101518382015260200161174756fe456e756d657261626c655365743a20696e646578206f7574206f6620626f756e64734552433732313a207472616e7366657220746f206e6f6e20455243373231526563656976657220696d706c656d656e7465724552433732313a207472616e7366657220746f20746865207a65726f20616464726573734552433732313a206f70657261746f7220717565727920666f72206e6f6e6578697374656e7420746f6b656e4552433732313a20617070726f76652063616c6c6572206973206e6f74206f776e6572206e6f7220617070726f76656420666f7220616c6c4552433732313a2062616c616e636520717565727920666f7220746865207a65726f20616464726573734552433732313a206f776e657220717565727920666f72206e6f6e6578697374656e7420746f6b656e456e756d657261626c654d61703a20696e646578206f7574206f6620626f756e64734552433732313a20617070726f76656420717565727920666f72206e6f6e6578697374656e7420746f6b656e4552433732313a207472616e73666572206f6620746f6b656e2074686174206973206e6f74206f776e4552433732314d657461646174613a2055524920717565727920666f72206e6f6e6578697374656e7420746f6b656e4552433732313a20617070726f76616c20746f2063757272656e74206f776e65724552433732313a207472616e736665722063616c6c6572206973206e6f74206f776e6572206e6f7220617070726f766564a164736f6c6343000706000a",
    "sourceMap": "732:17088:12:-:0;;;;;;;;;;;;;;;;;;;",
    "linkReferences": {}
  },
  "deployedBytecode": {
    "object": "0x608060405234801561001057600080fd5b506004361061011b5760003560e01c80634f6ccce7116100b257806395d89b4111610081578063b88d4fde11610066578063b88d4fde14610402578063c87b56dd146104d5578063e985e9c5146104f25761011b565b806395d89b41146103bf578063a22cb465146103c75761011b565b80634f6ccce71461034a5780636352211e146103675780636c0360eb1461038457806370a082311461038c5761011b565b806318160ddd116100ee57806318160ddd1461027157806323b872dd1461028b5780632f745c59146102ce57806342842e0e146103075761011b565b806301ffc9a71461012057806306fdde0314610173578063081812fc146101f0578063095ea7b314610236575b600080fd5b61015f6004803603602081101561013657600080fd5b50357fffffffff000000000000000000000000000000000000000000000000000000001661052d565b604080519115158252519081900360200190f35b61017b610568565b6040805160208082528351818301528351919283929083019185019080838360005b838110156101b557818101518382015260200161019d565b50505050905090810190601f1680156101e25780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b61020d6004803603602081101561020657600080fd5b503561061c565b6040805173ffffffffffffffffffffffffffffffffffffffff9092168252519081900360200190f35b61026f6004803603604081101561024c57600080fd5b5073ffffffffffffffffffffffffffffffffffffffff81351690602001356106a5565b005b6102796107e8565b60408051918252519081900360200190f35b61026f600480360360608110156102a157600080fd5b5073ffffffffffffffffffffffffffffffffffffffff8135811691602081013590911690604001356107f9565b610279600480360360408110156102e457600080fd5b5073ffffffffffffffffffffffffffffffffffffffff813516906020013561086a565b61026f6004803603606081101561031d57600080fd5b5073ffffffffffffffffffffffffffffffffffffffff8135811691602081013590911690604001356108a2565b6102796004803603602081101561036057600080fd5b50356108bd565b61020d6004803603602081101561037d57600080fd5b50356108d3565b61017b6108fb565b610279600480360360208110156103a257600080fd5b503573ffffffffffffffffffffffffffffffffffffffff1661097a565b61017b610a16565b61026f600480360360408110156103dd57600080fd5b5073ffffffffffffffffffffffffffffffffffffffff81351690602001351515610a95565b61026f6004803603608081101561041857600080fd5b73ffffffffffffffffffffffffffffffffffffffff82358116926020810135909116916040820135919081019060808101606082013564010000000081111561046057600080fd5b82018360208201111561047257600080fd5b8035906020019184600183028401116401000000008311171561049457600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250929550610c06945050505050565b61017b600480360360208110156104eb57600080fd5b5035610c7e565b61015f6004803603604081101561050857600080fd5b5073ffffffffffffffffffffffffffffffffffffffff81358116916020013516610feb565b7fffffffff00000000000000000000000000000000000000000000000000000000811660009081526033602052604090205460ff165b919050565b606a8054604080516020601f60027fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff6101006001881615020190951694909404938401819004810282018101909252828152606093909290918301828280156106125780601f106105e757610100808354040283529160200191610612565b820191906000526020600020905b8154815290600101906020018083116105f557829003601f168201915b5050505050905090565b600061062782611026565b61067c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602c815260200180611ef8602c913960400191505060405180910390fd5b5060009081526068602052604090205473ffffffffffffffffffffffffffffffffffffffff1690565b60006106b0826108d3565b90508073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415610737576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526021815260200180611f7c6021913960400191505060405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16610756611033565b73ffffffffffffffffffffffffffffffffffffffff16148061078457506107848161077f611033565b610feb565b6107d9576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526038815260200180611e4b6038913960400191505060405180910390fd5b6107e38383611037565b505050565b60006107f460666110d7565b905090565b61080a610804611033565b826110e2565b61085f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526031815260200180611f9d6031913960400191505060405180910390fd5b6107e38383836111d4565b73ffffffffffffffffffffffffffffffffffffffff8216600090815260656020526040812061089990836113af565b90505b92915050565b6107e383838360405180602001604052806000815250610c06565b6000806108cb6066846113bb565b509392505050565b600061089c82604051806060016040528060298152602001611ead60299139606691906113d7565b606d8054604080516020601f60027fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff6101006001881615020190951694909404938401819004810282018101909252828152606093909290918301828280156106125780601f106105e757610100808354040283529160200191610612565b600073ffffffffffffffffffffffffffffffffffffffff82166109e8576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602a815260200180611e83602a913960400191505060405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff8216600090815260656020526040902061089c906110d7565b606b8054604080516020601f60027fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff6101006001881615020190951694909404938401819004810282018101909252828152606093909290918301828280156106125780601f106105e757610100808354040283529160200191610612565b610a9d611033565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415610b3757604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601960248201527f4552433732313a20617070726f766520746f2063616c6c657200000000000000604482015290519081900360640190fd5b8060696000610b44611033565b73ffffffffffffffffffffffffffffffffffffffff90811682526020808301939093526040918201600090812091871680825291909352912080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001692151592909217909155610bb3611033565b73ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c318360405180821515815260200191505060405180910390a35050565b610c17610c11611033565b836110e2565b610c6c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526031815260200180611f9d6031913960400191505060405180910390fd5b610c78848484846113ee565b50505050565b6060610c8982611026565b610cde576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602f815260200180611f4d602f913960400191505060405180910390fd5b6000828152606c602090815260408083208054825160026001831615610100027fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0190921691909104601f810185900485028201850190935282815292909190830182828015610d8f5780601f10610d6457610100808354040283529160200191610d8f565b820191906000526020600020905b815481529060010190602001808311610d7257829003601f168201915b505050505090506000610da06108fb565b9050805160001415610db457509050610563565b815115610ecf5780826040516020018083805190602001908083835b60208310610e0d57805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe09092019160209182019101610dd0565b51815160209384036101000a7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff018019909216911617905285519190930192850191508083835b60208310610e9157805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe09092019160209182019101610e54565b6001836020036101000a0380198251168184511680821785525050505050509050019250505060405160208183030381529060405292505050610563565b80610ed98561145a565b6040516020018083805190602001908083835b60208310610f2957805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe09092019160209182019101610eec565b51815160209384036101000a7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff018019909216911617905285519190930192850191508083835b60208310610fad57805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe09092019160209182019101610f70565b6001836020036101000a0380198251168184511680821785525050505050509050019250505060405160208183030381529060405292505050919050565b73ffffffffffffffffffffffffffffffffffffffff918216600090815260696020908152604080832093909416825291909152205460ff1690565b600061089c606683611587565b3390565b600081815260686020526040902080547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff84169081179091558190611091826108d3565b73ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b600061089c82611593565b60006110ed82611026565b611142576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602c815260200180611e1f602c913960400191505060405180910390fd5b600061114d836108d3565b90508073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1614806111bc57508373ffffffffffffffffffffffffffffffffffffffff166111a48461061c565b73ffffffffffffffffffffffffffffffffffffffff16145b806111cc57506111cc8185610feb565b949350505050565b8273ffffffffffffffffffffffffffffffffffffffff166111f4826108d3565b73ffffffffffffffffffffffffffffffffffffffff1614611260576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526029815260200180611f246029913960400191505060405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff82166112cc576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526024815260200180611dfb6024913960400191505060405180910390fd5b6112d78383836107e3565b6112e2600082611037565b73ffffffffffffffffffffffffffffffffffffffff831660009081526065602052604090206113119082611597565b5073ffffffffffffffffffffffffffffffffffffffff8216600090815260656020526040902061134190826115a3565b5061134e606682846115af565b50808273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4505050565b600061089983836115d2565b60008080806113ca8686611650565b9097909650945050505050565b60006113e48484846116e5565b90505b9392505050565b6113f98484846111d4565b611405848484846117c9565b610c78576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526032815260200180611dc96032913960400191505060405180910390fd5b60608161149b575060408051808201909152600181527f30000000000000000000000000000000000000000000000000000000000000006020820152610563565b8160005b81156114b357600101600a8204915061149f565b60008167ffffffffffffffff811180156114cc57600080fd5b506040519080825280601f01601f1916602001820160405280156114f7576020820181803683370190505b5085935090507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82015b831561157e57600a840660300160f81b8282806001900393508151811061154457fe5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600a84049350611521565b50949350505050565b600061089983836119d9565b5490565b600061089983836119f1565b60006108998383611ad5565b60006113e4848473ffffffffffffffffffffffffffffffffffffffff8516611b1f565b8154600090821061162e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526022815260200180611da76022913960400191505060405180910390fd5b82600001828154811061163d57fe5b9060005260206000200154905092915050565b8154600090819083106116ae576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526022815260200180611ed66022913960400191505060405180910390fd5b60008460000184815481106116bf57fe5b906000526020600020906002020190508060000154816001015492509250509250929050565b6000828152600184016020526040812054828161179a576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825283818151815260200191508051906020019080838360005b8381101561175f578181015183820152602001611747565b50505050905090810190601f16801561178c5780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b508460000160018203815481106117ad57fe5b9060005260206000209060020201600101549150509392505050565b60006117ea8473ffffffffffffffffffffffffffffffffffffffff16611bb6565b6117f6575060016111cc565b600061196e7f150b7a0200000000000000000000000000000000000000000000000000000000611824611033565b888787604051602401808573ffffffffffffffffffffffffffffffffffffffff1681526020018473ffffffffffffffffffffffffffffffffffffffff16815260200183815260200180602001828103825283818151815260200191508051906020019080838360005b838110156118a557818101518382015260200161188d565b50505050905090810190601f1680156118d25780820380516001836020036101000a031916815260200191505b5095505050505050604051602081830303815290604052907bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19166020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff8381831617835250505050604051806060016040528060328152602001611dc96032913973ffffffffffffffffffffffffffffffffffffffff88169190611bbc565b9050600081806020019051602081101561198757600080fd5b50517fffffffff00000000000000000000000000000000000000000000000000000000167f150b7a02000000000000000000000000000000000000000000000000000000001492505050949350505050565b60009081526001919091016020526040902054151590565b60008181526001830160205260408120548015611acb5783547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8083019190810190600090879083908110611a4257fe5b9060005260206000200154905080876000018481548110611a5f57fe5b600091825260208083209091019290925582815260018981019092526040902090840190558654879080611a8f57fe5b6001900381819060005260206000200160009055905586600101600087815260200190815260200160002060009055600194505050505061089c565b600091505061089c565b6000611ae183836119d9565b611b175750815460018181018455600084815260208082209093018490558454848252828601909352604090209190915561089c565b50600061089c565b600082815260018401602052604081205480611b845750506040805180820182528381526020808201848152865460018181018955600089815284812095516002909302909501918255915190820155865486845281880190925292909120556113e7565b82856000016001830381548110611b9757fe5b90600052602060002090600202016001018190555060009150506113e7565b3b151590565b60606113e4848460008585611bd085611bb6565b611c3b57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e7472616374000000604482015290519081900360640190fd5b6000808673ffffffffffffffffffffffffffffffffffffffff1685876040518082805190602001908083835b60208310611ca457805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe09092019160209182019101611c67565b6001836020036101000a03801982511681845116808217855250505050505090500191505060006040518083038185875af1925050503d8060008114611d06576040519150601f19603f3d011682016040523d82523d6000602084013e611d0b565b606091505b5091509150611d1b828286611d26565b979650505050505050565b60608315611d355750816113e7565b825115611d455782518084602001fd5b6040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181815284516024840152845185939192839260440191908501908083836000831561175f57818101518382015260200161174756fe456e756d657261626c655365743a20696e646578206f7574206f6620626f756e64734552433732313a207472616e7366657220746f206e6f6e20455243373231526563656976657220696d706c656d656e7465724552433732313a207472616e7366657220746f20746865207a65726f20616464726573734552433732313a206f70657261746f7220717565727920666f72206e6f6e6578697374656e7420746f6b656e4552433732313a20617070726f76652063616c6c6572206973206e6f74206f776e6572206e6f7220617070726f76656420666f7220616c6c4552433732313a2062616c616e636520717565727920666f7220746865207a65726f20616464726573734552433732313a206f776e657220717565727920666f72206e6f6e6578697374656e7420746f6b656e456e756d657261626c654d61703a20696e646578206f7574206f6620626f756e64734552433732313a20617070726f76656420717565727920666f72206e6f6e6578697374656e7420746f6b656e4552433732313a207472616e73666572206f6620746f6b656e2074686174206973206e6f74206f776e4552433732314d657461646174613a2055524920717565727920666f72206e6f6e6578697374656e7420746f6b656e4552433732313a20617070726f76616c20746f2063757272656e74206f776e65724552433732313a207472616e736665722063616c6c6572206973206e6f74206f776e6572206e6f7220617070726f766564a164736f6c6343000706000a",
    "sourceMap": "732:17088:12:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1176:148:8;;;;;;;;;;;;;;;;-1:-1:-1;1176:148:8;;;;:::i;:::-;;;;;;;;;;;;;;;;;;5113:98:12;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;7840:217;;;;;;;;;;;;;;;;-1:-1:-1;7840:217:12;;:::i;:::-;;;;;;;;;;;;;;;;;;;7362:417;;;;;;;;;;;;;;;;-1:-1:-1;7362:417:12;;;;;;;;;:::i;:::-;;6856:208;;;:::i;:::-;;;;;;;;;;;;;;;;8704:300;;;;;;;;;;;;;;;;-1:-1:-1;8704:300:12;;;;;;;;;;;;;;;;;;:::i;6625:160::-;;;;;;;;;;;;;;;;-1:-1:-1;6625:160:12;;;;;;;;;:::i;9070:149::-;;;;;;;;;;;;;;;;-1:-1:-1;9070:149:12;;;;;;;;;;;;;;;;;;:::i;7136:169::-;;;;;;;;;;;;;;;;-1:-1:-1;7136:169:12;;:::i;4876:175::-;;;;;;;;;;;;;;;;-1:-1:-1;4876:175:12;;:::i;6451:95::-;;;:::i;4601:218::-;;;;;;;;;;;;;;;;-1:-1:-1;4601:218:12;;;;:::i;5275:102::-;;;:::i;8124:290::-;;;;;;;;;;;;;;;;-1:-1:-1;8124:290:12;;;;;;;;;;;:::i;9285:282::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;9285:282:12;;-1:-1:-1;9285:282:12;;-1:-1:-1;;;;;9285:282:12:i;5443:776::-;;;;;;;;;;;;;;;;-1:-1:-1;5443:776:12;;:::i;8480:162::-;;;;;;;;;;;;;;;;-1:-1:-1;8480:162:12;;;;;;;;;;;:::i;1176:148:8:-;1284:33;;;1261:4;1284:33;;;:20;:33;;;;;;;;1176:148;;;;:::o;5113:98:12:-;5199:5;5192:12;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5167:13;;5192:12;;5199:5;;5192:12;;5199:5;5192:12;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5113:98;:::o;7840:217::-;7916:7;7943:16;7951:7;7943;:16::i;:::-;7935:73;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;8026:24:12;;;;:15;:24;;;;;;;;;7840:217::o;7362:417::-;7442:13;7458:34;7484:7;7458:25;:34::i;:::-;7442:50;;7516:5;7510:11;;:2;:11;;;;7502:57;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;7594:5;7578:21;;:12;:10;:12::i;:::-;:21;;;:80;;;;7603:55;7638:5;7645:12;:10;:12::i;:::-;7603:34;:55::i;:::-;7570:170;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;7751:21;7760:2;7764:7;7751:8;:21::i;:::-;7362:417;;;:::o;6856:208::-;6917:7;7036:21;:12;:19;:21::i;:::-;7029:28;;6856:208;:::o;8704:300::-;8863:41;8882:12;:10;:12::i;:::-;8896:7;8863:18;:41::i;:::-;8855:103;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8969:28;8979:4;8985:2;8989:7;8969:9;:28::i;6625:160::-;6748:20;;;6722:7;6748:20;;;:13;:20;;;;;:30;;6772:5;6748:23;:30::i;:::-;6741:37;;6625:160;;;;;:::o;9070:149::-;9173:39;9190:4;9196:2;9200:7;9173:39;;;;;;;;;;;;:16;:39::i;7136:169::-;7211:7;;7252:22;:12;7268:5;7252:15;:22::i;:::-;-1:-1:-1;7230:44:12;7136:169;-1:-1:-1;;;7136:169:12:o;4876:175::-;4948:7;4974:70;4991:7;4974:70;;;;;;;;;;;;;;;;;:12;;:70;:16;:70::i;6451:95::-;6531:8;6524:15;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;6499:13;;6524:15;;6531:8;;6524:15;;6531:8;6524:15;;;;;;;;;;;;;;;;;;;;;;;;4601:218;4673:7;4700:19;;;4692:74;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;4783:20;;;;;;;:13;:20;;;;;:29;;:27;:29::i;5275:102::-;5363:7;5356:14;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5331:13;;5356:14;;5363:7;;5356:14;;5363:7;5356:14;;;;;;;;;;;;;;;;;;;;;;;;8124:290;8238:12;:10;:12::i;:::-;8226:24;;:8;:24;;;;8218:62;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8336:8;8291:18;:32;8310:12;:10;:12::i;:::-;8291:32;;;;;;;;;;;;;;;;;;-1:-1:-1;8291:32:12;;;:42;;;;;;;;;;;;:53;;;;;;;;;;;;;;8374:12;:10;:12::i;:::-;8359:48;;;8398:8;8359:48;;;;;;;;;;;;;;;;;;;;8124:290;;:::o;9285:282::-;9416:41;9435:12;:10;:12::i;:::-;9449:7;9416:18;:41::i;:::-;9408:103;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;9521:39;9535:4;9541:2;9545:7;9554:5;9521:13;:39::i;:::-;9285:282;;;;:::o;5443:776::-;5516:13;5549:16;5557:7;5549;:16::i;:::-;5541:76;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5628:23;5654:19;;;:10;:19;;;;;;;;5628:45;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5654:19;;5628:45;;;5654:19;5628:45;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5683:18;5704:9;:7;:9::i;:::-;5683:30;;5792:4;5786:18;5808:1;5786:23;5782:70;;;-1:-1:-1;5832:9:12;-1:-1:-1;5825:16:12;;5782:70;5954:23;;:27;5950:106;;6028:4;6034:9;6011:33;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;6011:33:12;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5997:48;;;;;;5950:106;6186:4;6192:18;:7;:16;:18::i;:::-;6169:42;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;6169:42:12;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;6155:57;;;;5443:776;;;:::o;8480:162::-;8600:25;;;;8577:4;8600:25;;;:18;:25;;;;;;;;:35;;;;;;;;;;;;;;;8480:162::o;11001:125::-;11066:4;11089:30;:12;11111:7;11089:21;:30::i;828:104:18:-;915:10;828:104;:::o;16898:200:12:-;16972:24;;;;:15;:24;;;;;:29;;;;;;;;;;;;;:24;;17025:34;16972:24;17025:25;:34::i;:::-;17016:57;;;;;;;;;;;;16898:200;;:::o;7831:121:19:-;7900:7;7926:19;7934:3;7926:7;:19::i;11284:373:12:-;11377:4;11401:16;11409:7;11401;:16::i;:::-;11393:73;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;11476:13;11492:34;11518:7;11492:25;:34::i;:::-;11476:50;;11555:5;11544:16;;:7;:16;;;:51;;;;11588:7;11564:31;;:20;11576:7;11564:11;:20::i;:::-;:31;;;11544:51;:105;;;;11599:50;11634:5;11641:7;11599:34;:50::i;:::-;11536:114;11284:373;-1:-1:-1;;;;11284:373:12:o;14358:595::-;14493:4;14455:42;;:34;14481:7;14455:25;:34::i;:::-;:42;;;14447:96;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;14579:16;;;14571:65;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;14647:39;14668:4;14674:2;14678:7;14647:20;:39::i;:::-;14748:29;14765:1;14769:7;14748:8;:29::i;:::-;14788:19;;;;;;;:13;:19;;;;;:35;;14815:7;14788:26;:35::i;:::-;-1:-1:-1;14833:17:12;;;;;;;:13;:17;;;;;:30;;14855:7;14833:21;:30::i;:::-;-1:-1:-1;14874:29:12;:12;14891:7;14900:2;14874:16;:29::i;:::-;;14938:7;14934:2;14919:27;;14928:4;14919:27;;;;;;;;;;;;14358:595;;;:::o;9261:135:20:-;9332:7;9366:22;9370:3;9382:5;9366:3;:22::i;8280:233:19:-;8360:7;;;;8419:22;8423:3;8435:5;8419:3;:22::i;:::-;8388:53;;;;-1:-1:-1;8280:233:19;-1:-1:-1;;;;;8280:233:19:o;9533:211::-;9640:7;9690:44;9695:3;9715;9721:12;9690:4;:44::i;:::-;9682:53;-1:-1:-1;9533:211:19;;;;;;:::o;10429:269:12:-;10542:28;10552:4;10558:2;10562:7;10542:9;:28::i;:::-;10588:48;10611:4;10617:2;10621:7;10630:5;10588:22;:48::i;:::-;10580:111;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;221:725:21;277:13;494:10;490:51;;-1:-1:-1;520:10:21;;;;;;;;;;;;;;;;;;;490:51;565:5;550:12;604:75;611:9;;604:75;;636:8;;666:2;658:10;;;;604:75;;;688:19;720:6;710:17;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;710:17:21;-1:-1:-1;780:5:21;;-1:-1:-1;688:39:21;-1:-1:-1;753:10:21;;;795:114;802:9;;795:114;;870:2;863:4;:9;858:2;:14;845:29;;827:6;834:7;;;;;;;827:15;;;;;;;;;;;:47;;;;;;;;;;-1:-1:-1;896:2:21;888:10;;;;795:114;;;-1:-1:-1;932:6:21;221:725;-1:-1:-1;;;;221:725:21:o;7599:149:19:-;7683:4;7706:35;7716:3;7736;7706:9;:35::i;4502:108::-;4584:19;;4502:108::o;8376:135:20:-;8446:4;8469:35;8477:3;8497:5;8469:7;:35::i;8079:129::-;8146:4;8169:32;8174:3;8194:5;8169:4;:32::i;7038:183:19:-;7127:4;7150:64;7155:3;7175;7189:23;;;7150:4;:64::i;4463:201:20:-;4557:18;;4530:7;;4557:26;-1:-1:-1;4549:73:20;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;4639:3;:11;;4651:5;4639:18;;;;;;;;;;;;;;;;4632:25;;4463:201;;;;:::o;4953:274:19:-;5056:19;;5020:7;;;;5056:27;-1:-1:-1;5048:74:19;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5133:22;5158:3;:12;;5171:5;5158:19;;;;;;;;;;;;;;;;;;5133:44;;5195:5;:10;;;5207:5;:12;;;5187:33;;;;;4953:274;;;;;:::o;6414:315::-;6508:7;6546:17;;;:12;;;:17;;;;;;6596:12;6581:13;6573:36;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;6662:3;:12;;6686:1;6675:8;:12;6662:26;;;;;;;;;;;;;;;;;;:33;;;6655:40;;;6414:315;;;;;:::o;16186:600:12:-;16306:4;16331:15;:2;:13;;;:15::i;:::-;16326:58;;-1:-1:-1;16369:4:12;16362:11;;16326:58;16393:23;16419:257;16471:56;16541:12;:10;:12::i;:::-;16567:4;16585:7;16606:5;16435:186;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;16419:257;;;;;;;;;;;;;;;;;:15;;;;:257;:15;:257::i;:::-;16393:283;;16686:13;16713:10;16702:32;;;;;;;;;;;;;;;-1:-1:-1;16702:32:12;16752:26;;16762:16;16752:26;;-1:-1:-1;;;16186:600:12;;;;;;:::o;4289:123:19:-;4360:4;4383:17;;;:12;;;;;:17;;;;;;:22;;;4289:123::o;2223:1512:20:-;2289:4;2426:19;;;:12;;;:19;;;;;;2460:15;;2456:1273;;2889:18;;2841:14;;;;;2889:22;;;;2817:21;;2889:3;;:22;;3171;;;;;;;;;;;;;;3151:42;;3314:9;3285:3;:11;;3297:13;3285:26;;;;;;;;;;;;;;;;;;;:38;;;;3389:23;;;3431:1;3389:12;;;:23;;;;;;3415:17;;;3389:43;;3538:17;;3389:3;;3538:17;;;;;;;;;;;;;;;;;;;;;;3630:3;:12;;:19;3643:5;3630:19;;;;;;;;;;;3623:26;;;3671:4;3664:11;;;;;;;;2456:1273;3713:5;3706:12;;;;;1651:404;1714:4;1735:21;1745:3;1750:5;1735:9;:21::i;:::-;1730:319;;-1:-1:-1;1772:23:20;;;;;;;;:11;:23;;;;;;;;;;;;;1952:18;;1930:19;;;:12;;;:19;;;;;;:40;;;;1984:11;;1730:319;-1:-1:-1;2033:5:20;2026:12;;1847:678:19;1923:4;2056:17;;;:12;;;:17;;;;;;2088:13;2084:435;;-1:-1:-1;;2172:38:19;;;;;;;;;;;;;;;;;;2154:57;;;;;;;;:12;:57;;;;;;;;;;;;;;;;;;;;;;;;2366:19;;2346:17;;;:12;;;:17;;;;;;;:39;2399:11;;2084:435;2477:5;2441:3;:12;;2465:1;2454:8;:12;2441:26;;;;;;;;;;;;;;;;;;:33;;:41;;;;2503:5;2496:12;;;;;737:413:17;1097:20;1135:8;;;737:413::o;3592:193::-;3695:12;3726:52;3748:6;3756:4;3762:1;3765:12;3695;4869:18;4880:6;4869:10;:18::i;:::-;4861:60;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;4992:12;5006:23;5033:6;:11;;5053:5;5061:4;5033:33;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;4991:75;;;;5083:52;5101:7;5110:10;5122:12;5083:17;:52::i;:::-;5076:59;4619:523;-1:-1:-1;;;;;;;4619:523:17:o;6122:725::-;6237:12;6265:7;6261:580;;;-1:-1:-1;6295:10:17;6288:17;;6261:580;6406:17;;:21;6402:429;;6664:10;6658:17;6724:15;6711:10;6707:2;6703:19;6696:44;6613:145;6796:20;;;;;;;;;;;;;;;;;;;;6803:12;;6796:20;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;",
    "linkReferences": {}
  },
  "methodIdentifiers": {
    "approve(address,uint256)": "095ea7b3",
    "balanceOf(address)": "70a08231",
    "baseURI()": "6c0360eb",
    "getApproved(uint256)": "081812fc",
    "isApprovedForAll(address,address)": "e985e9c5",
    "name()": "06fdde03",
    "ownerOf(uint256)": "6352211e",
    "safeTransferFrom(address,address,uint256)": "42842e0e",
    "safeTransferFrom(address,address,uint256,bytes)": "b88d4fde",
    "setApprovalForAll(address,bool)": "a22cb465",
    "supportsInterface(bytes4)": "01ffc9a7",
    "symbol()": "95d89b41",
    "tokenByIndex(uint256)": "4f6ccce7",
    "tokenOfOwnerByIndex(address,uint256)": "2f745c59",
    "tokenURI(uint256)": "c87b56dd",
    "totalSupply()": "18160ddd",
    "transferFrom(address,address,uint256)": "23b872dd"
  },
  "ast": {
    "absolutePath": "node_modules/@openzeppelin/contracts-upgradeable/token/ERC721/ERC721Upgradeable.sol",
    "id": 24651,
    "exportedSymbols": {
      "AddressUpgradeable": [
        25086
      ],
      "ContextUpgradeable": [
        25131
      ],
      "ERC165Upgradeable": [
        23243
      ],
      "ERC721Upgradeable": [
        24650
      ],
      "EnumerableMapUpgradeable": [
        25691
      ],
      "EnumerableSetUpgradeable": [
        26183
      ],
      "IERC165Upgradeable": [
        23255
      ],
      "IERC721EnumerableUpgradeable": [
        24681
      ],
      "IERC721MetadataUpgradeable": [
        24708
      ],
      "IERC721ReceiverUpgradeable": [
        24726
      ],
      "IERC721Upgradeable": [
        24842
      ],
      "Initializable": [
        23676
      ],
      "SafeMathUpgradeable": [
        23610
      ],
      "StringsUpgradeable": [
        26270
      ]
    },
    "nodeType": "SourceUnit",
    "src": "33:17788:12",
    "nodes": [
      {
        "id": 23678,
        "nodeType": "PragmaDirective",
        "src": "33:31:12",
        "literals": [
          "solidity",
          ">=",
          "0.6",
          ".0",
          "<",
          "0.8",
          ".0"
        ]
      },
      {
        "id": 23679,
        "nodeType": "ImportDirective",
        "src": "66:44:12",
        "absolutePath": "node_modules/@openzeppelin/contracts-upgradeable/utils/ContextUpgradeable.sol",
        "file": "../../utils/ContextUpgradeable.sol",
        "scope": 24651,
        "sourceUnit": 25132,
        "symbolAliases": [],
        "unitAlias": ""
      },
      {
        "id": 23680,
        "nodeType": "ImportDirective",
        "src": "111:34:12",
        "absolutePath": "node_modules/@openzeppelin/contracts-upgradeable/token/ERC721/IERC721Upgradeable.sol",
        "file": "./IERC721Upgradeable.sol",
        "scope": 24651,
        "sourceUnit": 24843,
        "symbolAliases": [],
        "unitAlias": ""
      },
      {
        "id": 23681,
        "nodeType": "ImportDirective",
        "src": "146:42:12",
        "absolutePath": "node_modules/@openzeppelin/contracts-upgradeable/token/ERC721/IERC721MetadataUpgradeable.sol",
        "file": "./IERC721MetadataUpgradeable.sol",
        "scope": 24651,
        "sourceUnit": 24709,
        "symbolAliases": [],
        "unitAlias": ""
      },
      {
        "id": 23682,
        "nodeType": "ImportDirective",
        "src": "189:44:12",
        "absolutePath": "node_modules/@openzeppelin/contracts-upgradeable/token/ERC721/IERC721EnumerableUpgradeable.sol",
        "file": "./IERC721EnumerableUpgradeable.sol",
        "scope": 24651,
        "sourceUnit": 24682,
        "symbolAliases": [],
        "unitAlias": ""
      },
      {
        "id": 23683,
        "nodeType": "ImportDirective",
        "src": "234:42:12",
        "absolutePath": "node_modules/@openzeppelin/contracts-upgradeable/token/ERC721/IERC721ReceiverUpgradeable.sol",
        "file": "./IERC721ReceiverUpgradeable.sol",
        "scope": 24651,
        "sourceUnit": 24727,
        "symbolAliases": [],
        "unitAlias": ""
      },
      {
        "id": 23684,
        "nodeType": "ImportDirective",
        "src": "277:51:12",
        "absolutePath": "node_modules/@openzeppelin/contracts-upgradeable/introspection/ERC165Upgradeable.sol",
        "file": "../../introspection/ERC165Upgradeable.sol",
        "scope": 24651,
        "sourceUnit": 23244,
        "symbolAliases": [],
        "unitAlias": ""
      },
      {
        "id": 23685,
        "nodeType": "ImportDirective",
        "src": "329:44:12",
        "absolutePath": "node_modules/@openzeppelin/contracts-upgradeable/math/SafeMathUpgradeable.sol",
        "file": "../../math/SafeMathUpgradeable.sol",
        "scope": 24651,
        "sourceUnit": 23611,
        "symbolAliases": [],
        "unitAlias": ""
      },
      {
        "id": 23686,
        "nodeType": "ImportDirective",
        "src": "374:44:12",
        "absolutePath": "node_modules/@openzeppelin/contracts-upgradeable/utils/AddressUpgradeable.sol",
        "file": "../../utils/AddressUpgradeable.sol",
        "scope": 24651,
        "sourceUnit": 25087,
        "symbolAliases": [],
        "unitAlias": ""
      },
      {
        "id": 23687,
        "nodeType": "ImportDirective",
        "src": "419:50:12",
        "absolutePath": "node_modules/@openzeppelin/contracts-upgradeable/utils/EnumerableSetUpgradeable.sol",
        "file": "../../utils/EnumerableSetUpgradeable.sol",
        "scope": 24651,
        "sourceUnit": 26184,
        "symbolAliases": [],
        "unitAlias": ""
      },
      {
        "id": 23688,
        "nodeType": "ImportDirective",
        "src": "470:50:12",
        "absolutePath": "node_modules/@openzeppelin/contracts-upgradeable/utils/EnumerableMapUpgradeable.sol",
        "file": "../../utils/EnumerableMapUpgradeable.sol",
        "scope": 24651,
        "sourceUnit": 25692,
        "symbolAliases": [],
        "unitAlias": ""
      },
      {
        "id": 23689,
        "nodeType": "ImportDirective",
        "src": "521:44:12",
        "absolutePath": "node_modules/@openzeppelin/contracts-upgradeable/utils/StringsUpgradeable.sol",
        "file": "../../utils/StringsUpgradeable.sol",
        "scope": 24651,
        "sourceUnit": 26271,
        "symbolAliases": [],
        "unitAlias": ""
      },
      {
        "id": 23690,
        "nodeType": "ImportDirective",
        "src": "566:39:12",
        "absolutePath": "node_modules/@openzeppelin/contracts-upgradeable/proxy/Initializable.sol",
        "file": "../../proxy/Initializable.sol",
        "scope": 24651,
        "sourceUnit": 23677,
        "symbolAliases": [],
        "unitAlias": ""
      },
      {
        "id": 24650,
        "nodeType": "ContractDefinition",
        "src": "732:17088:12",
        "nodes": [
          {
            "id": 23706,
            "nodeType": "UsingForDirective",
            "src": "899:38:12",
            "libraryName": {
              "id": 23704,
              "name": "SafeMathUpgradeable",
              "nodeType": "UserDefinedTypeName",
              "referencedDeclaration": 23610,
              "src": "905:19:12",
              "typeDescriptions": {
                "typeIdentifier": "t_contract$_SafeMathUpgradeable_$23610",
                "typeString": "library SafeMathUpgradeable"
              }
            },
            "typeName": {
              "id": 23705,
              "name": "uint256",
              "nodeType": "ElementaryTypeName",
              "src": "929:7:12",
              "typeDescriptions": {
                "typeIdentifier": "t_uint256",
                "typeString": "uint256"
              }
            }
          },
          {
            "id": 23709,
            "nodeType": "UsingForDirective",
            "src": "942:37:12",
            "libraryName": {
              "id": 23707,
              "name": "AddressUpgradeable",
              "nodeType": "UserDefinedTypeName",
              "referencedDeclaration": 25086,
              "src": "948:18:12",
              "typeDescriptions": {
                "typeIdentifier": "t_contract$_AddressUpgradeable_$25086",
                "typeString": "library AddressUpgradeable"
              }
            },
            "typeName": {
              "id": 23708,
              "name": "address",
              "nodeType": "ElementaryTypeName",
              "src": "971:7:12",
              "stateMutability": "nonpayable",
              "typeDescriptions": {
                "typeIdentifier": "t_address",
                "typeString": "address"
              }
            }
          },
          {
            "id": 23712,
            "nodeType": "UsingForDirective",
            "src": "984:68:12",
            "libraryName": {
              "id": 23710,
              "name": "EnumerableSetUpgradeable",
              "nodeType": "UserDefinedTypeName",
              "referencedDeclaration": 26183,
              "src": "990:24:12",
              "typeDescriptions": {
                "typeIdentifier": "t_contract$_EnumerableSetUpgradeable_$26183",
                "typeString": "library EnumerableSetUpgradeable"
              }
            },
            "typeName": {
              "id": 23711,
              "name": "EnumerableSetUpgradeable.UintSet",
              "nodeType": "UserDefinedTypeName",
              "referencedDeclaration": 26088,
              "src": "1019:32:12",
              "typeDescriptions": {
                "typeIdentifier": "t_struct$_UintSet_$26088_storage_ptr",
                "typeString": "struct EnumerableSetUpgradeable.UintSet"
              }
            }
          },
          {
            "id": 23715,
            "nodeType": "UsingForDirective",
            "src": "1057:77:12",
            "libraryName": {
              "id": 23713,
              "name": "EnumerableMapUpgradeable",
              "nodeType": "UserDefinedTypeName",
              "referencedDeclaration": 25691,
              "src": "1063:24:12",
              "typeDescriptions": {
                "typeIdentifier": "t_contract$_EnumerableMapUpgradeable_$25691",
                "typeString": "library EnumerableMapUpgradeable"
              }
            },
            "typeName": {
              "id": 23714,
              "name": "EnumerableMapUpgradeable.UintToAddressMap",
              "nodeType": "UserDefinedTypeName",
              "referencedDeclaration": 25465,
              "src": "1092:41:12",
              "typeDescriptions": {
                "typeIdentifier": "t_struct$_UintToAddressMap_$25465_storage_ptr",
                "typeString": "struct EnumerableMapUpgradeable.UintToAddressMap"
              }
            }
          },
          {
            "id": 23718,
            "nodeType": "UsingForDirective",
            "src": "1139:37:12",
            "libraryName": {
              "id": 23716,
              "name": "StringsUpgradeable",
              "nodeType": "UserDefinedTypeName",
              "referencedDeclaration": 26270,
              "src": "1145:18:12",
              "typeDescriptions": {
                "typeIdentifier": "t_contract$_StringsUpgradeable_$26270",
                "typeString": "library StringsUpgradeable"
              }
            },
            "typeName": {
              "id": 23717,
              "name": "uint256",
              "nodeType": "ElementaryTypeName",
              "src": "1168:7:12",
              "typeDescriptions": {
                "typeIdentifier": "t_uint256",
                "typeString": "uint256"
              }
            }
          },
          {
            "id": 23721,
            "nodeType": "VariableDeclaration",
            "src": "1354:53:12",
            "constant": true,
            "mutability": "constant",
            "name": "_ERC721_RECEIVED",
            "scope": 24650,
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_bytes4",
              "typeString": "bytes4"
            },
            "typeName": {
              "id": 23719,
              "name": "bytes4",
              "nodeType": "ElementaryTypeName",
              "src": "1354:6:12",
              "typeDescriptions": {
                "typeIdentifier": "t_bytes4",
                "typeString": "bytes4"
              }
            },
            "value": {
              "hexValue": "30783135306237613032",
              "id": 23720,
              "isConstant": false,
              "isLValue": false,
              "isPure": true,
              "kind": "number",
              "lValueRequested": false,
              "nodeType": "Literal",
              "src": "1397:10:12",
              "typeDescriptions": {
                "typeIdentifier": "t_rational_353073666_by_1",
                "typeString": "int_const 353073666"
              },
              "value": "0x150b7a02"
            },
            "visibility": "private"
          },
          {
            "id": 23725,
            "nodeType": "VariableDeclaration",
            "src": "1491:75:12",
            "constant": false,
            "mutability": "mutable",
            "name": "_holderTokens",
            "scope": 24650,
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_mapping$_t_address_$_t_struct$_UintSet_$26088_storage_$",
              "typeString": "mapping(address => struct EnumerableSetUpgradeable.UintSet)"
            },
            "typeName": {
              "id": 23724,
              "keyType": {
                "id": 23722,
                "name": "address",
                "nodeType": "ElementaryTypeName",
                "src": "1500:7:12",
                "typeDescriptions": {
                  "typeIdentifier": "t_address",
                  "typeString": "address"
                }
              },
              "nodeType": "Mapping",
              "src": "1491:53:12",
              "typeDescriptions": {
                "typeIdentifier": "t_mapping$_t_address_$_t_struct$_UintSet_$26088_storage_$",
                "typeString": "mapping(address => struct EnumerableSetUpgradeable.UintSet)"
              },
              "valueType": {
                "id": 23723,
                "name": "EnumerableSetUpgradeable.UintSet",
                "nodeType": "UserDefinedTypeName",
                "referencedDeclaration": 26088,
                "src": "1511:32:12",
                "typeDescriptions": {
                  "typeIdentifier": "t_struct$_UintSet_$26088_storage_ptr",
                  "typeString": "struct EnumerableSetUpgradeable.UintSet"
                }
              }
            },
            "visibility": "private"
          },
          {
            "id": 23727,
            "nodeType": "VariableDeclaration",
            "src": "1630:62:12",
            "constant": false,
            "mutability": "mutable",
            "name": "_tokenOwners",
            "scope": 24650,
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_struct$_UintToAddressMap_$25465_storage",
              "typeString": "struct EnumerableMapUpgradeable.UintToAddressMap"
            },
            "typeName": {
              "id": 23726,
              "name": "EnumerableMapUpgradeable.UintToAddressMap",
              "nodeType": "UserDefinedTypeName",
              "referencedDeclaration": 25465,
              "src": "1630:41:12",
              "typeDescriptions": {
                "typeIdentifier": "t_struct$_UintToAddressMap_$25465_storage_ptr",
                "typeString": "struct EnumerableMapUpgradeable.UintToAddressMap"
              }
            },
            "visibility": "private"
          },
          {
            "id": 23731,
            "nodeType": "VariableDeclaration",
            "src": "1748:52:12",
            "constant": false,
            "mutability": "mutable",
            "name": "_tokenApprovals",
            "scope": 24650,
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_mapping$_t_uint256_$_t_address_$",
              "typeString": "mapping(uint256 => address)"
            },
            "typeName": {
              "id": 23730,
              "keyType": {
                "id": 23728,
                "name": "uint256",
                "nodeType": "ElementaryTypeName",
                "src": "1757:7:12",
                "typeDescriptions": {
                  "typeIdentifier": "t_uint256",
                  "typeString": "uint256"
                }
              },
              "nodeType": "Mapping",
              "src": "1748:28:12",
              "typeDescriptions": {
                "typeIdentifier": "t_mapping$_t_uint256_$_t_address_$",
                "typeString": "mapping(uint256 => address)"
              },
              "valueType": {
                "id": 23729,
                "name": "address",
                "nodeType": "ElementaryTypeName",
                "src": "1768:7:12",
                "stateMutability": "nonpayable",
                "typeDescriptions": {
                  "typeIdentifier": "t_address",
                  "typeString": "address"
                }
              }
            },
            "visibility": "private"
          },
          {
            "id": 23737,
            "nodeType": "VariableDeclaration",
            "src": "1855:73:12",
            "constant": false,
            "mutability": "mutable",
            "name": "_operatorApprovals",
            "scope": 24650,
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_mapping$_t_address_$_t_mapping$_t_address_$_t_bool_$_$",
              "typeString": "mapping(address => mapping(address => bool))"
            },
            "typeName": {
              "id": 23736,
              "keyType": {
                "id": 23732,
                "name": "address",
                "nodeType": "ElementaryTypeName",
                "src": "1864:7:12",
                "typeDescriptions": {
                  "typeIdentifier": "t_address",
                  "typeString": "address"
                }
              },
              "nodeType": "Mapping",
              "src": "1855:46:12",
              "typeDescriptions": {
                "typeIdentifier": "t_mapping$_t_address_$_t_mapping$_t_address_$_t_bool_$_$",
                "typeString": "mapping(address => mapping(address => bool))"
              },
              "valueType": {
                "id": 23735,
                "keyType": {
                  "id": 23733,
                  "name": "address",
                  "nodeType": "ElementaryTypeName",
                  "src": "1884:7:12",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  }
                },
                "nodeType": "Mapping",
                "src": "1875:25:12",
                "typeDescriptions": {
                  "typeIdentifier": "t_mapping$_t_address_$_t_bool_$",
                  "typeString": "mapping(address => bool)"
                },
                "valueType": {
                  "id": 23734,
                  "name": "bool",
                  "nodeType": "ElementaryTypeName",
                  "src": "1895:4:12",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bool",
                    "typeString": "bool"
                  }
                }
              }
            },
            "visibility": "private"
          },
          {
            "id": 23739,
            "nodeType": "VariableDeclaration",
            "src": "1953:20:12",
            "constant": false,
            "mutability": "mutable",
            "name": "_name",
            "scope": 24650,
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_string_storage",
              "typeString": "string"
            },
            "typeName": {
              "id": 23738,
              "name": "string",
              "nodeType": "ElementaryTypeName",
              "src": "1953:6:12",
              "typeDescriptions": {
                "typeIdentifier": "t_string_storage_ptr",
                "typeString": "string"
              }
            },
            "visibility": "private"
          },
          {
            "id": 23741,
            "nodeType": "VariableDeclaration",
            "src": "2000:22:12",
            "constant": false,
            "mutability": "mutable",
            "name": "_symbol",
            "scope": 24650,
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_string_storage",
              "typeString": "string"
            },
            "typeName": {
              "id": 23740,
              "name": "string",
              "nodeType": "ElementaryTypeName",
              "src": "2000:6:12",
              "typeDescriptions": {
                "typeIdentifier": "t_string_storage_ptr",
                "typeString": "string"
              }
            },
            "visibility": "private"
          },
          {
            "id": 23745,
            "nodeType": "VariableDeclaration",
            "src": "2068:46:12",
            "constant": false,
            "mutability": "mutable",
            "name": "_tokenURIs",
            "scope": 24650,
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_mapping$_t_uint256_$_t_string_storage_$",
              "typeString": "mapping(uint256 => string)"
            },
            "typeName": {
              "id": 23744,
              "keyType": {
                "id": 23742,
                "name": "uint256",
                "nodeType": "ElementaryTypeName",
                "src": "2077:7:12",
                "typeDescriptions": {
                  "typeIdentifier": "t_uint256",
                  "typeString": "uint256"
                }
              },
              "nodeType": "Mapping",
              "src": "2068:27:12",
              "typeDescriptions": {
                "typeIdentifier": "t_mapping$_t_uint256_$_t_string_storage_$",
                "typeString": "mapping(uint256 => string)"
              },
              "valueType": {
                "id": 23743,
                "name": "string",
                "nodeType": "ElementaryTypeName",
                "src": "2088:6:12",
                "typeDescriptions": {
                  "typeIdentifier": "t_string_storage_ptr",
                  "typeString": "string"
                }
              }
            },
            "visibility": "private"
          },
          {
            "id": 23747,
            "nodeType": "VariableDeclaration",
            "src": "2137:23:12",
            "constant": false,
            "mutability": "mutable",
            "name": "_baseURI",
            "scope": 24650,
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_string_storage",
              "typeString": "string"
            },
            "typeName": {
              "id": 23746,
              "name": "string",
              "nodeType": "ElementaryTypeName",
              "src": "2137:6:12",
              "typeDescriptions": {
                "typeIdentifier": "t_string_storage_ptr",
                "typeString": "string"
              }
            },
            "visibility": "private"
          },
          {
            "id": 23750,
            "nodeType": "VariableDeclaration",
            "src": "3036:57:12",
            "constant": true,
            "mutability": "constant",
            "name": "_INTERFACE_ID_ERC721",
            "scope": 24650,
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_bytes4",
              "typeString": "bytes4"
            },
            "typeName": {
              "id": 23748,
              "name": "bytes4",
              "nodeType": "ElementaryTypeName",
              "src": "3036:6:12",
              "typeDescriptions": {
                "typeIdentifier": "t_bytes4",
                "typeString": "bytes4"
              }
            },
            "value": {
              "hexValue": "30783830616335386364",
              "id": 23749,
              "isConstant": false,
              "isLValue": false,
              "isPure": true,
              "kind": "number",
              "lValueRequested": false,
              "nodeType": "Literal",
              "src": "3083:10:12",
              "typeDescriptions": {
                "typeIdentifier": "t_rational_2158778573_by_1",
                "typeString": "int_const 2158778573"
              },
              "value": "0x80ac58cd"
            },
            "visibility": "private"
          },
          {
            "id": 23753,
            "nodeType": "VariableDeclaration",
            "src": "3359:66:12",
            "constant": true,
            "mutability": "constant",
            "name": "_INTERFACE_ID_ERC721_METADATA",
            "scope": 24650,
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_bytes4",
              "typeString": "bytes4"
            },
            "typeName": {
              "id": 23751,
              "name": "bytes4",
              "nodeType": "ElementaryTypeName",
              "src": "3359:6:12",
              "typeDescriptions": {
                "typeIdentifier": "t_bytes4",
                "typeString": "bytes4"
              }
            },
            "value": {
              "hexValue": "30783562356531333966",
              "id": 23752,
              "isConstant": false,
              "isLValue": false,
              "isPure": true,
              "kind": "number",
              "lValueRequested": false,
              "nodeType": "Literal",
              "src": "3415:10:12",
              "typeDescriptions": {
                "typeIdentifier": "t_rational_1532892063_by_1",
                "typeString": "int_const 1532892063"
              },
              "value": "0x5b5e139f"
            },
            "visibility": "private"
          },
          {
            "id": 23756,
            "nodeType": "VariableDeclaration",
            "src": "3730:68:12",
            "constant": true,
            "mutability": "constant",
            "name": "_INTERFACE_ID_ERC721_ENUMERABLE",
            "scope": 24650,
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_bytes4",
              "typeString": "bytes4"
            },
            "typeName": {
              "id": 23754,
              "name": "bytes4",
              "nodeType": "ElementaryTypeName",
              "src": "3730:6:12",
              "typeDescriptions": {
                "typeIdentifier": "t_bytes4",
                "typeString": "bytes4"
              }
            },
            "value": {
              "hexValue": "30783738306539643633",
              "id": 23755,
              "isConstant": false,
              "isLValue": false,
              "isPure": true,
              "kind": "number",
              "lValueRequested": false,
              "nodeType": "Literal",
              "src": "3788:10:12",
              "typeDescriptions": {
                "typeIdentifier": "t_rational_2014223715_by_1",
                "typeString": "int_const 2014223715"
              },
              "value": "0x780e9d63"
            },
            "visibility": "private"
          },
          {
            "id": 23778,
            "nodeType": "FunctionDefinition",
            "src": "3918:215:12",
            "body": {
              "id": 23777,
              "nodeType": "Block",
              "src": "4006:127:12",
              "statements": [
                {
                  "expression": {
                    "arguments": [],
                    "expression": {
                      "argumentTypes": [],
                      "id": 23766,
                      "name": "__Context_init_unchained",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 25106,
                      "src": "4016:24:12",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_nonpayable$__$returns$__$",
                        "typeString": "function ()"
                      }
                    },
                    "id": 23767,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "4016:26:12",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 23768,
                  "nodeType": "ExpressionStatement",
                  "src": "4016:26:12"
                },
                {
                  "expression": {
                    "arguments": [],
                    "expression": {
                      "argumentTypes": [],
                      "id": 23769,
                      "name": "__ERC165_init_unchained",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 23204,
                      "src": "4052:23:12",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_nonpayable$__$returns$__$",
                        "typeString": "function ()"
                      }
                    },
                    "id": 23770,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "4052:25:12",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 23771,
                  "nodeType": "ExpressionStatement",
                  "src": "4052:25:12"
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "id": 23773,
                        "name": "name_",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 23759,
                        "src": "4111:5:12",
                        "typeDescriptions": {
                          "typeIdentifier": "t_string_memory_ptr",
                          "typeString": "string memory"
                        }
                      },
                      {
                        "id": 23774,
                        "name": "symbol_",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 23761,
                        "src": "4118:7:12",
                        "typeDescriptions": {
                          "typeIdentifier": "t_string_memory_ptr",
                          "typeString": "string memory"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_string_memory_ptr",
                          "typeString": "string memory"
                        },
                        {
                          "typeIdentifier": "t_string_memory_ptr",
                          "typeString": "string memory"
                        }
                      ],
                      "id": 23772,
                      "name": "__ERC721_init_unchained",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 23808,
                      "src": "4087:23:12",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_nonpayable$_t_string_memory_ptr_$_t_string_memory_ptr_$returns$__$",
                        "typeString": "function (string memory,string memory)"
                      }
                    },
                    "id": 23775,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "4087:39:12",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 23776,
                  "nodeType": "ExpressionStatement",
                  "src": "4087:39:12"
                }
              ]
            },
            "documentation": {
              "id": 23757,
              "nodeType": "StructuredDocumentation",
              "src": "3805:108:12",
              "text": " @dev Initializes the contract by setting a `name` and a `symbol` to the token collection."
            },
            "implemented": true,
            "kind": "function",
            "modifiers": [
              {
                "id": 23764,
                "modifierName": {
                  "id": 23763,
                  "name": "initializer",
                  "nodeType": "Identifier",
                  "overloadedDeclarations": [],
                  "referencedDeclaration": 23659,
                  "src": "3994:11:12",
                  "typeDescriptions": {
                    "typeIdentifier": "t_modifier$__$",
                    "typeString": "modifier ()"
                  }
                },
                "nodeType": "ModifierInvocation",
                "src": "3994:11:12"
              }
            ],
            "name": "__ERC721_init",
            "parameters": {
              "id": 23762,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 23759,
                  "mutability": "mutable",
                  "name": "name_",
                  "nodeType": "VariableDeclaration",
                  "scope": 23778,
                  "src": "3941:19:12",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_string_memory_ptr",
                    "typeString": "string"
                  },
                  "typeName": {
                    "id": 23758,
                    "name": "string",
                    "nodeType": "ElementaryTypeName",
                    "src": "3941:6:12",
                    "typeDescriptions": {
                      "typeIdentifier": "t_string_storage_ptr",
                      "typeString": "string"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 23761,
                  "mutability": "mutable",
                  "name": "symbol_",
                  "nodeType": "VariableDeclaration",
                  "scope": 23778,
                  "src": "3962:21:12",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_string_memory_ptr",
                    "typeString": "string"
                  },
                  "typeName": {
                    "id": 23760,
                    "name": "string",
                    "nodeType": "ElementaryTypeName",
                    "src": "3962:6:12",
                    "typeDescriptions": {
                      "typeIdentifier": "t_string_storage_ptr",
                      "typeString": "string"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "3940:44:12"
            },
            "returnParameters": {
              "id": 23765,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "4006:0:12"
            },
            "scope": 24650,
            "stateMutability": "nonpayable",
            "virtual": false,
            "visibility": "internal"
          },
          {
            "id": 23808,
            "nodeType": "FunctionDefinition",
            "src": "4139:403:12",
            "body": {
              "id": 23807,
              "nodeType": "Block",
              "src": "4237:305:12",
              "statements": [
                {
                  "expression": {
                    "id": 23789,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "id": 23787,
                      "name": "_name",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 23739,
                      "src": "4247:5:12",
                      "typeDescriptions": {
                        "typeIdentifier": "t_string_storage",
                        "typeString": "string storage ref"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "id": 23788,
                      "name": "name_",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 23780,
                      "src": "4255:5:12",
                      "typeDescriptions": {
                        "typeIdentifier": "t_string_memory_ptr",
                        "typeString": "string memory"
                      }
                    },
                    "src": "4247:13:12",
                    "typeDescriptions": {
                      "typeIdentifier": "t_string_storage",
                      "typeString": "string storage ref"
                    }
                  },
                  "id": 23790,
                  "nodeType": "ExpressionStatement",
                  "src": "4247:13:12"
                },
                {
                  "expression": {
                    "id": 23793,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "id": 23791,
                      "name": "_symbol",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 23741,
                      "src": "4270:7:12",
                      "typeDescriptions": {
                        "typeIdentifier": "t_string_storage",
                        "typeString": "string storage ref"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "id": 23792,
                      "name": "symbol_",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 23782,
                      "src": "4280:7:12",
                      "typeDescriptions": {
                        "typeIdentifier": "t_string_memory_ptr",
                        "typeString": "string memory"
                      }
                    },
                    "src": "4270:17:12",
                    "typeDescriptions": {
                      "typeIdentifier": "t_string_storage",
                      "typeString": "string storage ref"
                    }
                  },
                  "id": 23794,
                  "nodeType": "ExpressionStatement",
                  "src": "4270:17:12"
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "id": 23796,
                        "name": "_INTERFACE_ID_ERC721",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 23750,
                        "src": "4394:20:12",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes4",
                          "typeString": "bytes4"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bytes4",
                          "typeString": "bytes4"
                        }
                      ],
                      "id": 23795,
                      "name": "_registerInterface",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 23238,
                      "src": "4375:18:12",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_nonpayable$_t_bytes4_$returns$__$",
                        "typeString": "function (bytes4)"
                      }
                    },
                    "id": 23797,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "4375:40:12",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 23798,
                  "nodeType": "ExpressionStatement",
                  "src": "4375:40:12"
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "id": 23800,
                        "name": "_INTERFACE_ID_ERC721_METADATA",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 23753,
                        "src": "4444:29:12",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes4",
                          "typeString": "bytes4"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bytes4",
                          "typeString": "bytes4"
                        }
                      ],
                      "id": 23799,
                      "name": "_registerInterface",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 23238,
                      "src": "4425:18:12",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_nonpayable$_t_bytes4_$returns$__$",
                        "typeString": "function (bytes4)"
                      }
                    },
                    "id": 23801,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "4425:49:12",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 23802,
                  "nodeType": "ExpressionStatement",
                  "src": "4425:49:12"
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "id": 23804,
                        "name": "_INTERFACE_ID_ERC721_ENUMERABLE",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 23756,
                        "src": "4503:31:12",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes4",
                          "typeString": "bytes4"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bytes4",
                          "typeString": "bytes4"
                        }
                      ],
                      "id": 23803,
                      "name": "_registerInterface",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 23238,
                      "src": "4484:18:12",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_nonpayable$_t_bytes4_$returns$__$",
                        "typeString": "function (bytes4)"
                      }
                    },
                    "id": 23805,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "4484:51:12",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 23806,
                  "nodeType": "ExpressionStatement",
                  "src": "4484:51:12"
                }
              ]
            },
            "implemented": true,
            "kind": "function",
            "modifiers": [
              {
                "id": 23785,
                "modifierName": {
                  "id": 23784,
                  "name": "initializer",
                  "nodeType": "Identifier",
                  "overloadedDeclarations": [],
                  "referencedDeclaration": 23659,
                  "src": "4225:11:12",
                  "typeDescriptions": {
                    "typeIdentifier": "t_modifier$__$",
                    "typeString": "modifier ()"
                  }
                },
                "nodeType": "ModifierInvocation",
                "src": "4225:11:12"
              }
            ],
            "name": "__ERC721_init_unchained",
            "parameters": {
              "id": 23783,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 23780,
                  "mutability": "mutable",
                  "name": "name_",
                  "nodeType": "VariableDeclaration",
                  "scope": 23808,
                  "src": "4172:19:12",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_string_memory_ptr",
                    "typeString": "string"
                  },
                  "typeName": {
                    "id": 23779,
                    "name": "string",
                    "nodeType": "ElementaryTypeName",
                    "src": "4172:6:12",
                    "typeDescriptions": {
                      "typeIdentifier": "t_string_storage_ptr",
                      "typeString": "string"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 23782,
                  "mutability": "mutable",
                  "name": "symbol_",
                  "nodeType": "VariableDeclaration",
                  "scope": 23808,
                  "src": "4193:21:12",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_string_memory_ptr",
                    "typeString": "string"
                  },
                  "typeName": {
                    "id": 23781,
                    "name": "string",
                    "nodeType": "ElementaryTypeName",
                    "src": "4193:6:12",
                    "typeDescriptions": {
                      "typeIdentifier": "t_string_storage_ptr",
                      "typeString": "string"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "4171:44:12"
            },
            "returnParameters": {
              "id": 23786,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "4237:0:12"
            },
            "scope": 24650,
            "stateMutability": "nonpayable",
            "virtual": false,
            "visibility": "internal"
          },
          {
            "id": 23834,
            "nodeType": "FunctionDefinition",
            "src": "4601:218:12",
            "body": {
              "id": 23833,
              "nodeType": "Block",
              "src": "4682:137:12",
              "statements": [
                {
                  "expression": {
                    "arguments": [
                      {
                        "commonType": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "id": 23823,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftExpression": {
                          "id": 23818,
                          "name": "owner",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 23811,
                          "src": "4700:5:12",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "nodeType": "BinaryOperation",
                        "operator": "!=",
                        "rightExpression": {
                          "arguments": [
                            {
                              "hexValue": "30",
                              "id": 23821,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "kind": "number",
                              "lValueRequested": false,
                              "nodeType": "Literal",
                              "src": "4717:1:12",
                              "typeDescriptions": {
                                "typeIdentifier": "t_rational_0_by_1",
                                "typeString": "int_const 0"
                              },
                              "value": "0"
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_rational_0_by_1",
                                "typeString": "int_const 0"
                              }
                            ],
                            "id": 23820,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "lValueRequested": false,
                            "nodeType": "ElementaryTypeNameExpression",
                            "src": "4709:7:12",
                            "typeDescriptions": {
                              "typeIdentifier": "t_type$_t_address_$",
                              "typeString": "type(address)"
                            },
                            "typeName": {
                              "id": 23819,
                              "name": "address",
                              "nodeType": "ElementaryTypeName",
                              "src": "4709:7:12",
                              "typeDescriptions": {}
                            }
                          },
                          "id": 23822,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "kind": "typeConversion",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "4709:10:12",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_address_payable",
                            "typeString": "address payable"
                          }
                        },
                        "src": "4700:19:12",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      {
                        "hexValue": "4552433732313a2062616c616e636520717565727920666f7220746865207a65726f2061646472657373",
                        "id": 23824,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "string",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "4721:44:12",
                        "typeDescriptions": {
                          "typeIdentifier": "t_stringliteral_7395d4d3901c50cdfcab223d072f9aa36241df5d883e62cbf147ee1b05a9e6ba",
                          "typeString": "literal_string \"ERC721: balance query for the zero address\""
                        },
                        "value": "ERC721: balance query for the zero address"
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        {
                          "typeIdentifier": "t_stringliteral_7395d4d3901c50cdfcab223d072f9aa36241df5d883e62cbf147ee1b05a9e6ba",
                          "typeString": "literal_string \"ERC721: balance query for the zero address\""
                        }
                      ],
                      "id": 23817,
                      "name": "require",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        -18,
                        -18
                      ],
                      "referencedDeclaration": -18,
                      "src": "4692:7:12",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                        "typeString": "function (bool,string memory) pure"
                      }
                    },
                    "id": 23825,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "4692:74:12",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 23826,
                  "nodeType": "ExpressionStatement",
                  "src": "4692:74:12"
                },
                {
                  "expression": {
                    "arguments": [],
                    "expression": {
                      "argumentTypes": [],
                      "expression": {
                        "baseExpression": {
                          "id": 23827,
                          "name": "_holderTokens",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 23725,
                          "src": "4783:13:12",
                          "typeDescriptions": {
                            "typeIdentifier": "t_mapping$_t_address_$_t_struct$_UintSet_$26088_storage_$",
                            "typeString": "mapping(address => struct EnumerableSetUpgradeable.UintSet storage ref)"
                          }
                        },
                        "id": 23829,
                        "indexExpression": {
                          "id": 23828,
                          "name": "owner",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 23811,
                          "src": "4797:5:12",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "isConstant": false,
                        "isLValue": true,
                        "isPure": false,
                        "lValueRequested": false,
                        "nodeType": "IndexAccess",
                        "src": "4783:20:12",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_UintSet_$26088_storage",
                          "typeString": "struct EnumerableSetUpgradeable.UintSet storage ref"
                        }
                      },
                      "id": 23830,
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "length",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 26162,
                      "src": "4783:27:12",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_view$_t_struct$_UintSet_$26088_storage_ptr_$returns$_t_uint256_$bound_to$_t_struct$_UintSet_$26088_storage_ptr_$",
                        "typeString": "function (struct EnumerableSetUpgradeable.UintSet storage pointer) view returns (uint256)"
                      }
                    },
                    "id": 23831,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "4783:29:12",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "functionReturnParameters": 23816,
                  "id": 23832,
                  "nodeType": "Return",
                  "src": "4776:36:12"
                }
              ]
            },
            "baseFunctions": [
              24767
            ],
            "documentation": {
              "id": 23809,
              "nodeType": "StructuredDocumentation",
              "src": "4548:48:12",
              "text": " @dev See {IERC721-balanceOf}."
            },
            "functionSelector": "70a08231",
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "balanceOf",
            "overrides": {
              "id": 23813,
              "nodeType": "OverrideSpecifier",
              "overrides": [],
              "src": "4655:8:12"
            },
            "parameters": {
              "id": 23812,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 23811,
                  "mutability": "mutable",
                  "name": "owner",
                  "nodeType": "VariableDeclaration",
                  "scope": 23834,
                  "src": "4620:13:12",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 23810,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "4620:7:12",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "4619:15:12"
            },
            "returnParameters": {
              "id": 23816,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 23815,
                  "mutability": "mutable",
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 23834,
                  "src": "4673:7:12",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 23814,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "4673:7:12",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "4672:9:12"
            },
            "scope": 24650,
            "stateMutability": "view",
            "virtual": true,
            "visibility": "public"
          },
          {
            "id": 23850,
            "nodeType": "FunctionDefinition",
            "src": "4876:175:12",
            "body": {
              "id": 23849,
              "nodeType": "Block",
              "src": "4957:94:12",
              "statements": [
                {
                  "expression": {
                    "arguments": [
                      {
                        "id": 23845,
                        "name": "tokenId",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 23837,
                        "src": "4991:7:12",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      {
                        "hexValue": "4552433732313a206f776e657220717565727920666f72206e6f6e6578697374656e7420746f6b656e",
                        "id": 23846,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "string",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "5000:43:12",
                        "typeDescriptions": {
                          "typeIdentifier": "t_stringliteral_7481f3df2a424c0755a1ad2356614e9a5a358d461ea2eae1f89cb21cbad00397",
                          "typeString": "literal_string \"ERC721: owner query for nonexistent token\""
                        },
                        "value": "ERC721: owner query for nonexistent token"
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        {
                          "typeIdentifier": "t_stringliteral_7481f3df2a424c0755a1ad2356614e9a5a358d461ea2eae1f89cb21cbad00397",
                          "typeString": "literal_string \"ERC721: owner query for nonexistent token\""
                        }
                      ],
                      "expression": {
                        "id": 23843,
                        "name": "_tokenOwners",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 23727,
                        "src": "4974:12:12",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_UintToAddressMap_$25465_storage",
                          "typeString": "struct EnumerableMapUpgradeable.UintToAddressMap storage ref"
                        }
                      },
                      "id": 23844,
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "get",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 25690,
                      "src": "4974:16:12",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_view$_t_struct$_UintToAddressMap_$25465_storage_ptr_$_t_uint256_$_t_string_memory_ptr_$returns$_t_address_$bound_to$_t_struct$_UintToAddressMap_$25465_storage_ptr_$",
                        "typeString": "function (struct EnumerableMapUpgradeable.UintToAddressMap storage pointer,uint256,string memory) view returns (address)"
                      }
                    },
                    "id": 23847,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "4974:70:12",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "functionReturnParameters": 23842,
                  "id": 23848,
                  "nodeType": "Return",
                  "src": "4967:77:12"
                }
              ]
            },
            "baseFunctions": [
              24775
            ],
            "documentation": {
              "id": 23835,
              "nodeType": "StructuredDocumentation",
              "src": "4825:46:12",
              "text": " @dev See {IERC721-ownerOf}."
            },
            "functionSelector": "6352211e",
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "ownerOf",
            "overrides": {
              "id": 23839,
              "nodeType": "OverrideSpecifier",
              "overrides": [],
              "src": "4930:8:12"
            },
            "parameters": {
              "id": 23838,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 23837,
                  "mutability": "mutable",
                  "name": "tokenId",
                  "nodeType": "VariableDeclaration",
                  "scope": 23850,
                  "src": "4893:15:12",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 23836,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "4893:7:12",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "4892:17:12"
            },
            "returnParameters": {
              "id": 23842,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 23841,
                  "mutability": "mutable",
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 23850,
                  "src": "4948:7:12",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 23840,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "4948:7:12",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "4947:9:12"
            },
            "scope": 24650,
            "stateMutability": "view",
            "virtual": true,
            "visibility": "public"
          },
          {
            "id": 23860,
            "nodeType": "FunctionDefinition",
            "src": "5113:98:12",
            "body": {
              "id": 23859,
              "nodeType": "Block",
              "src": "5182:29:12",
              "statements": [
                {
                  "expression": {
                    "id": 23857,
                    "name": "_name",
                    "nodeType": "Identifier",
                    "overloadedDeclarations": [],
                    "referencedDeclaration": 23739,
                    "src": "5199:5:12",
                    "typeDescriptions": {
                      "typeIdentifier": "t_string_storage",
                      "typeString": "string storage ref"
                    }
                  },
                  "functionReturnParameters": 23856,
                  "id": 23858,
                  "nodeType": "Return",
                  "src": "5192:12:12"
                }
              ]
            },
            "baseFunctions": [
              24693
            ],
            "documentation": {
              "id": 23851,
              "nodeType": "StructuredDocumentation",
              "src": "5057:51:12",
              "text": " @dev See {IERC721Metadata-name}."
            },
            "functionSelector": "06fdde03",
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "name",
            "overrides": {
              "id": 23853,
              "nodeType": "OverrideSpecifier",
              "overrides": [],
              "src": "5149:8:12"
            },
            "parameters": {
              "id": 23852,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "5126:2:12"
            },
            "returnParameters": {
              "id": 23856,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 23855,
                  "mutability": "mutable",
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 23860,
                  "src": "5167:13:12",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_string_memory_ptr",
                    "typeString": "string"
                  },
                  "typeName": {
                    "id": 23854,
                    "name": "string",
                    "nodeType": "ElementaryTypeName",
                    "src": "5167:6:12",
                    "typeDescriptions": {
                      "typeIdentifier": "t_string_storage_ptr",
                      "typeString": "string"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "5166:15:12"
            },
            "scope": 24650,
            "stateMutability": "view",
            "virtual": true,
            "visibility": "public"
          },
          {
            "id": 23870,
            "nodeType": "FunctionDefinition",
            "src": "5275:102:12",
            "body": {
              "id": 23869,
              "nodeType": "Block",
              "src": "5346:31:12",
              "statements": [
                {
                  "expression": {
                    "id": 23867,
                    "name": "_symbol",
                    "nodeType": "Identifier",
                    "overloadedDeclarations": [],
                    "referencedDeclaration": 23741,
                    "src": "5363:7:12",
                    "typeDescriptions": {
                      "typeIdentifier": "t_string_storage",
                      "typeString": "string storage ref"
                    }
                  },
                  "functionReturnParameters": 23866,
                  "id": 23868,
                  "nodeType": "Return",
                  "src": "5356:14:12"
                }
              ]
            },
            "baseFunctions": [
              24699
            ],
            "documentation": {
              "id": 23861,
              "nodeType": "StructuredDocumentation",
              "src": "5217:53:12",
              "text": " @dev See {IERC721Metadata-symbol}."
            },
            "functionSelector": "95d89b41",
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "symbol",
            "overrides": {
              "id": 23863,
              "nodeType": "OverrideSpecifier",
              "overrides": [],
              "src": "5313:8:12"
            },
            "parameters": {
              "id": 23862,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "5290:2:12"
            },
            "returnParameters": {
              "id": 23866,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 23865,
                  "mutability": "mutable",
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 23870,
                  "src": "5331:13:12",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_string_memory_ptr",
                    "typeString": "string"
                  },
                  "typeName": {
                    "id": 23864,
                    "name": "string",
                    "nodeType": "ElementaryTypeName",
                    "src": "5331:6:12",
                    "typeDescriptions": {
                      "typeIdentifier": "t_string_storage_ptr",
                      "typeString": "string"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "5330:15:12"
            },
            "scope": 24650,
            "stateMutability": "view",
            "virtual": true,
            "visibility": "public"
          },
          {
            "id": 23938,
            "nodeType": "FunctionDefinition",
            "src": "5443:776:12",
            "body": {
              "id": 23937,
              "nodeType": "Block",
              "src": "5531:688:12",
              "statements": [
                {
                  "expression": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "id": 23881,
                            "name": "tokenId",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 23873,
                            "src": "5557:7:12",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          }
                        ],
                        "expression": {
                          "argumentTypes": [
                            {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          ],
                          "id": 23880,
                          "name": "_exists",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 24233,
                          "src": "5549:7:12",
                          "typeDescriptions": {
                            "typeIdentifier": "t_function_internal_view$_t_uint256_$returns$_t_bool_$",
                            "typeString": "function (uint256) view returns (bool)"
                          }
                        },
                        "id": 23882,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "functionCall",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "5549:16:12",
                        "tryCall": false,
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      {
                        "hexValue": "4552433732314d657461646174613a2055524920717565727920666f72206e6f6e6578697374656e7420746f6b656e",
                        "id": 23883,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "string",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "5567:49:12",
                        "typeDescriptions": {
                          "typeIdentifier": "t_stringliteral_a2d45c0fba603d40d82d590051761ca952d1ab9d78cca6d0d464d7b6e961a9cb",
                          "typeString": "literal_string \"ERC721Metadata: URI query for nonexistent token\""
                        },
                        "value": "ERC721Metadata: URI query for nonexistent token"
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        {
                          "typeIdentifier": "t_stringliteral_a2d45c0fba603d40d82d590051761ca952d1ab9d78cca6d0d464d7b6e961a9cb",
                          "typeString": "literal_string \"ERC721Metadata: URI query for nonexistent token\""
                        }
                      ],
                      "id": 23879,
                      "name": "require",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        -18,
                        -18
                      ],
                      "referencedDeclaration": -18,
                      "src": "5541:7:12",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                        "typeString": "function (bool,string memory) pure"
                      }
                    },
                    "id": 23884,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "5541:76:12",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 23885,
                  "nodeType": "ExpressionStatement",
                  "src": "5541:76:12"
                },
                {
                  "assignments": [
                    23887
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 23887,
                      "mutability": "mutable",
                      "name": "_tokenURI",
                      "nodeType": "VariableDeclaration",
                      "scope": 23937,
                      "src": "5628:23:12",
                      "stateVariable": false,
                      "storageLocation": "memory",
                      "typeDescriptions": {
                        "typeIdentifier": "t_string_memory_ptr",
                        "typeString": "string"
                      },
                      "typeName": {
                        "id": 23886,
                        "name": "string",
                        "nodeType": "ElementaryTypeName",
                        "src": "5628:6:12",
                        "typeDescriptions": {
                          "typeIdentifier": "t_string_storage_ptr",
                          "typeString": "string"
                        }
                      },
                      "visibility": "internal"
                    }
                  ],
                  "id": 23891,
                  "initialValue": {
                    "baseExpression": {
                      "id": 23888,
                      "name": "_tokenURIs",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 23745,
                      "src": "5654:10:12",
                      "typeDescriptions": {
                        "typeIdentifier": "t_mapping$_t_uint256_$_t_string_storage_$",
                        "typeString": "mapping(uint256 => string storage ref)"
                      }
                    },
                    "id": 23890,
                    "indexExpression": {
                      "id": 23889,
                      "name": "tokenId",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 23873,
                      "src": "5665:7:12",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "isConstant": false,
                    "isLValue": true,
                    "isPure": false,
                    "lValueRequested": false,
                    "nodeType": "IndexAccess",
                    "src": "5654:19:12",
                    "typeDescriptions": {
                      "typeIdentifier": "t_string_storage",
                      "typeString": "string storage ref"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "5628:45:12"
                },
                {
                  "assignments": [
                    23893
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 23893,
                      "mutability": "mutable",
                      "name": "base",
                      "nodeType": "VariableDeclaration",
                      "scope": 23937,
                      "src": "5683:18:12",
                      "stateVariable": false,
                      "storageLocation": "memory",
                      "typeDescriptions": {
                        "typeIdentifier": "t_string_memory_ptr",
                        "typeString": "string"
                      },
                      "typeName": {
                        "id": 23892,
                        "name": "string",
                        "nodeType": "ElementaryTypeName",
                        "src": "5683:6:12",
                        "typeDescriptions": {
                          "typeIdentifier": "t_string_storage_ptr",
                          "typeString": "string"
                        }
                      },
                      "visibility": "internal"
                    }
                  ],
                  "id": 23896,
                  "initialValue": {
                    "arguments": [],
                    "expression": {
                      "argumentTypes": [],
                      "id": 23894,
                      "name": "baseURI",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 23947,
                      "src": "5704:7:12",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_view$__$returns$_t_string_memory_ptr_$",
                        "typeString": "function () view returns (string memory)"
                      }
                    },
                    "id": 23895,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "5704:9:12",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_string_memory_ptr",
                      "typeString": "string memory"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "5683:30:12"
                },
                {
                  "condition": {
                    "commonType": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    },
                    "id": 23903,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "expression": {
                        "arguments": [
                          {
                            "id": 23899,
                            "name": "base",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 23893,
                            "src": "5792:4:12",
                            "typeDescriptions": {
                              "typeIdentifier": "t_string_memory_ptr",
                              "typeString": "string memory"
                            }
                          }
                        ],
                        "expression": {
                          "argumentTypes": [
                            {
                              "typeIdentifier": "t_string_memory_ptr",
                              "typeString": "string memory"
                            }
                          ],
                          "id": 23898,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "lValueRequested": false,
                          "nodeType": "ElementaryTypeNameExpression",
                          "src": "5786:5:12",
                          "typeDescriptions": {
                            "typeIdentifier": "t_type$_t_bytes_storage_ptr_$",
                            "typeString": "type(bytes storage pointer)"
                          },
                          "typeName": {
                            "id": 23897,
                            "name": "bytes",
                            "nodeType": "ElementaryTypeName",
                            "src": "5786:5:12",
                            "typeDescriptions": {}
                          }
                        },
                        "id": 23900,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "typeConversion",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "5786:11:12",
                        "tryCall": false,
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes_memory_ptr",
                          "typeString": "bytes memory"
                        }
                      },
                      "id": 23901,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "length",
                      "nodeType": "MemberAccess",
                      "src": "5786:18:12",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "==",
                    "rightExpression": {
                      "hexValue": "30",
                      "id": 23902,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "number",
                      "lValueRequested": false,
                      "nodeType": "Literal",
                      "src": "5808:1:12",
                      "typeDescriptions": {
                        "typeIdentifier": "t_rational_0_by_1",
                        "typeString": "int_const 0"
                      },
                      "value": "0"
                    },
                    "src": "5786:23:12",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "id": 23907,
                  "nodeType": "IfStatement",
                  "src": "5782:70:12",
                  "trueBody": {
                    "id": 23906,
                    "nodeType": "Block",
                    "src": "5811:41:12",
                    "statements": [
                      {
                        "expression": {
                          "id": 23904,
                          "name": "_tokenURI",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 23887,
                          "src": "5832:9:12",
                          "typeDescriptions": {
                            "typeIdentifier": "t_string_memory_ptr",
                            "typeString": "string memory"
                          }
                        },
                        "functionReturnParameters": 23878,
                        "id": 23905,
                        "nodeType": "Return",
                        "src": "5825:16:12"
                      }
                    ]
                  }
                },
                {
                  "condition": {
                    "commonType": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    },
                    "id": 23914,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "expression": {
                        "arguments": [
                          {
                            "id": 23910,
                            "name": "_tokenURI",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 23887,
                            "src": "5960:9:12",
                            "typeDescriptions": {
                              "typeIdentifier": "t_string_memory_ptr",
                              "typeString": "string memory"
                            }
                          }
                        ],
                        "expression": {
                          "argumentTypes": [
                            {
                              "typeIdentifier": "t_string_memory_ptr",
                              "typeString": "string memory"
                            }
                          ],
                          "id": 23909,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "lValueRequested": false,
                          "nodeType": "ElementaryTypeNameExpression",
                          "src": "5954:5:12",
                          "typeDescriptions": {
                            "typeIdentifier": "t_type$_t_bytes_storage_ptr_$",
                            "typeString": "type(bytes storage pointer)"
                          },
                          "typeName": {
                            "id": 23908,
                            "name": "bytes",
                            "nodeType": "ElementaryTypeName",
                            "src": "5954:5:12",
                            "typeDescriptions": {}
                          }
                        },
                        "id": 23911,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "typeConversion",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "5954:16:12",
                        "tryCall": false,
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes_memory_ptr",
                          "typeString": "bytes memory"
                        }
                      },
                      "id": 23912,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "length",
                      "nodeType": "MemberAccess",
                      "src": "5954:23:12",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": ">",
                    "rightExpression": {
                      "hexValue": "30",
                      "id": 23913,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "number",
                      "lValueRequested": false,
                      "nodeType": "Literal",
                      "src": "5980:1:12",
                      "typeDescriptions": {
                        "typeIdentifier": "t_rational_0_by_1",
                        "typeString": "int_const 0"
                      },
                      "value": "0"
                    },
                    "src": "5954:27:12",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "id": 23925,
                  "nodeType": "IfStatement",
                  "src": "5950:106:12",
                  "trueBody": {
                    "id": 23924,
                    "nodeType": "Block",
                    "src": "5983:73:12",
                    "statements": [
                      {
                        "expression": {
                          "arguments": [
                            {
                              "arguments": [
                                {
                                  "id": 23919,
                                  "name": "base",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 23893,
                                  "src": "6028:4:12",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_string_memory_ptr",
                                    "typeString": "string memory"
                                  }
                                },
                                {
                                  "id": 23920,
                                  "name": "_tokenURI",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 23887,
                                  "src": "6034:9:12",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_string_memory_ptr",
                                    "typeString": "string memory"
                                  }
                                }
                              ],
                              "expression": {
                                "argumentTypes": [
                                  {
                                    "typeIdentifier": "t_string_memory_ptr",
                                    "typeString": "string memory"
                                  },
                                  {
                                    "typeIdentifier": "t_string_memory_ptr",
                                    "typeString": "string memory"
                                  }
                                ],
                                "expression": {
                                  "id": 23917,
                                  "name": "abi",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": -1,
                                  "src": "6011:3:12",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_magic_abi",
                                    "typeString": "abi"
                                  }
                                },
                                "id": 23918,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": true,
                                "lValueRequested": false,
                                "memberName": "encodePacked",
                                "nodeType": "MemberAccess",
                                "src": "6011:16:12",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_function_abiencodepacked_pure$__$returns$_t_bytes_memory_ptr_$",
                                  "typeString": "function () pure returns (bytes memory)"
                                }
                              },
                              "id": 23921,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "kind": "functionCall",
                              "lValueRequested": false,
                              "names": [],
                              "nodeType": "FunctionCall",
                              "src": "6011:33:12",
                              "tryCall": false,
                              "typeDescriptions": {
                                "typeIdentifier": "t_bytes_memory_ptr",
                                "typeString": "bytes memory"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_bytes_memory_ptr",
                                "typeString": "bytes memory"
                              }
                            ],
                            "id": 23916,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "lValueRequested": false,
                            "nodeType": "ElementaryTypeNameExpression",
                            "src": "6004:6:12",
                            "typeDescriptions": {
                              "typeIdentifier": "t_type$_t_string_storage_ptr_$",
                              "typeString": "type(string storage pointer)"
                            },
                            "typeName": {
                              "id": 23915,
                              "name": "string",
                              "nodeType": "ElementaryTypeName",
                              "src": "6004:6:12",
                              "typeDescriptions": {}
                            }
                          },
                          "id": 23922,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "typeConversion",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "6004:41:12",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_string_memory_ptr",
                            "typeString": "string memory"
                          }
                        },
                        "functionReturnParameters": 23878,
                        "id": 23923,
                        "nodeType": "Return",
                        "src": "5997:48:12"
                      }
                    ]
                  }
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "id": 23930,
                            "name": "base",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 23893,
                            "src": "6186:4:12",
                            "typeDescriptions": {
                              "typeIdentifier": "t_string_memory_ptr",
                              "typeString": "string memory"
                            }
                          },
                          {
                            "arguments": [],
                            "expression": {
                              "argumentTypes": [],
                              "expression": {
                                "id": 23931,
                                "name": "tokenId",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 23873,
                                "src": "6192:7:12",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "id": 23932,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "memberName": "toString",
                              "nodeType": "MemberAccess",
                              "referencedDeclaration": 26269,
                              "src": "6192:16:12",
                              "typeDescriptions": {
                                "typeIdentifier": "t_function_internal_pure$_t_uint256_$returns$_t_string_memory_ptr_$bound_to$_t_uint256_$",
                                "typeString": "function (uint256) pure returns (string memory)"
                              }
                            },
                            "id": 23933,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "kind": "functionCall",
                            "lValueRequested": false,
                            "names": [],
                            "nodeType": "FunctionCall",
                            "src": "6192:18:12",
                            "tryCall": false,
                            "typeDescriptions": {
                              "typeIdentifier": "t_string_memory_ptr",
                              "typeString": "string memory"
                            }
                          }
                        ],
                        "expression": {
                          "argumentTypes": [
                            {
                              "typeIdentifier": "t_string_memory_ptr",
                              "typeString": "string memory"
                            },
                            {
                              "typeIdentifier": "t_string_memory_ptr",
                              "typeString": "string memory"
                            }
                          ],
                          "expression": {
                            "id": 23928,
                            "name": "abi",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": -1,
                            "src": "6169:3:12",
                            "typeDescriptions": {
                              "typeIdentifier": "t_magic_abi",
                              "typeString": "abi"
                            }
                          },
                          "id": 23929,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "lValueRequested": false,
                          "memberName": "encodePacked",
                          "nodeType": "MemberAccess",
                          "src": "6169:16:12",
                          "typeDescriptions": {
                            "typeIdentifier": "t_function_abiencodepacked_pure$__$returns$_t_bytes_memory_ptr_$",
                            "typeString": "function () pure returns (bytes memory)"
                          }
                        },
                        "id": 23934,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "functionCall",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "6169:42:12",
                        "tryCall": false,
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes_memory_ptr",
                          "typeString": "bytes memory"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bytes_memory_ptr",
                          "typeString": "bytes memory"
                        }
                      ],
                      "id": 23927,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "lValueRequested": false,
                      "nodeType": "ElementaryTypeNameExpression",
                      "src": "6162:6:12",
                      "typeDescriptions": {
                        "typeIdentifier": "t_type$_t_string_storage_ptr_$",
                        "typeString": "type(string storage pointer)"
                      },
                      "typeName": {
                        "id": 23926,
                        "name": "string",
                        "nodeType": "ElementaryTypeName",
                        "src": "6162:6:12",
                        "typeDescriptions": {}
                      }
                    },
                    "id": 23935,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "typeConversion",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "6162:50:12",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_string_memory_ptr",
                      "typeString": "string memory"
                    }
                  },
                  "functionReturnParameters": 23878,
                  "id": 23936,
                  "nodeType": "Return",
                  "src": "6155:57:12"
                }
              ]
            },
            "baseFunctions": [
              24707
            ],
            "documentation": {
              "id": 23871,
              "nodeType": "StructuredDocumentation",
              "src": "5383:55:12",
              "text": " @dev See {IERC721Metadata-tokenURI}."
            },
            "functionSelector": "c87b56dd",
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "tokenURI",
            "overrides": {
              "id": 23875,
              "nodeType": "OverrideSpecifier",
              "overrides": [],
              "src": "5498:8:12"
            },
            "parameters": {
              "id": 23874,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 23873,
                  "mutability": "mutable",
                  "name": "tokenId",
                  "nodeType": "VariableDeclaration",
                  "scope": 23938,
                  "src": "5461:15:12",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 23872,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "5461:7:12",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "5460:17:12"
            },
            "returnParameters": {
              "id": 23878,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 23877,
                  "mutability": "mutable",
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 23938,
                  "src": "5516:13:12",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_string_memory_ptr",
                    "typeString": "string"
                  },
                  "typeName": {
                    "id": 23876,
                    "name": "string",
                    "nodeType": "ElementaryTypeName",
                    "src": "5516:6:12",
                    "typeDescriptions": {
                      "typeIdentifier": "t_string_storage_ptr",
                      "typeString": "string"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "5515:15:12"
            },
            "scope": 24650,
            "stateMutability": "view",
            "virtual": true,
            "visibility": "public"
          },
          {
            "id": 23947,
            "nodeType": "FunctionDefinition",
            "src": "6451:95:12",
            "body": {
              "id": 23946,
              "nodeType": "Block",
              "src": "6514:32:12",
              "statements": [
                {
                  "expression": {
                    "id": 23944,
                    "name": "_baseURI",
                    "nodeType": "Identifier",
                    "overloadedDeclarations": [],
                    "referencedDeclaration": 23747,
                    "src": "6531:8:12",
                    "typeDescriptions": {
                      "typeIdentifier": "t_string_storage",
                      "typeString": "string storage ref"
                    }
                  },
                  "functionReturnParameters": 23943,
                  "id": 23945,
                  "nodeType": "Return",
                  "src": "6524:15:12"
                }
              ]
            },
            "documentation": {
              "id": 23939,
              "nodeType": "StructuredDocumentation",
              "src": "6225:221:12",
              "text": " @dev Returns the base URI set via {_setBaseURI}. This will be\n automatically added as a prefix in {tokenURI} to each token's URI, or\n to the token ID if no specific URI is set for that token ID."
            },
            "functionSelector": "6c0360eb",
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "baseURI",
            "parameters": {
              "id": 23940,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "6467:2:12"
            },
            "returnParameters": {
              "id": 23943,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 23942,
                  "mutability": "mutable",
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 23947,
                  "src": "6499:13:12",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_string_memory_ptr",
                    "typeString": "string"
                  },
                  "typeName": {
                    "id": 23941,
                    "name": "string",
                    "nodeType": "ElementaryTypeName",
                    "src": "6499:6:12",
                    "typeDescriptions": {
                      "typeIdentifier": "t_string_storage_ptr",
                      "typeString": "string"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "6498:15:12"
            },
            "scope": 24650,
            "stateMutability": "view",
            "virtual": true,
            "visibility": "public"
          },
          {
            "id": 23966,
            "nodeType": "FunctionDefinition",
            "src": "6625:160:12",
            "body": {
              "id": 23965,
              "nodeType": "Block",
              "src": "6731:54:12",
              "statements": [
                {
                  "expression": {
                    "arguments": [
                      {
                        "id": 23962,
                        "name": "index",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 23952,
                        "src": "6772:5:12",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      ],
                      "expression": {
                        "baseExpression": {
                          "id": 23958,
                          "name": "_holderTokens",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 23725,
                          "src": "6748:13:12",
                          "typeDescriptions": {
                            "typeIdentifier": "t_mapping$_t_address_$_t_struct$_UintSet_$26088_storage_$",
                            "typeString": "mapping(address => struct EnumerableSetUpgradeable.UintSet storage ref)"
                          }
                        },
                        "id": 23960,
                        "indexExpression": {
                          "id": 23959,
                          "name": "owner",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 23950,
                          "src": "6762:5:12",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "isConstant": false,
                        "isLValue": true,
                        "isPure": false,
                        "lValueRequested": false,
                        "nodeType": "IndexAccess",
                        "src": "6748:20:12",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_UintSet_$26088_storage",
                          "typeString": "struct EnumerableSetUpgradeable.UintSet storage ref"
                        }
                      },
                      "id": 23961,
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "at",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 26182,
                      "src": "6748:23:12",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_view$_t_struct$_UintSet_$26088_storage_ptr_$_t_uint256_$returns$_t_uint256_$bound_to$_t_struct$_UintSet_$26088_storage_ptr_$",
                        "typeString": "function (struct EnumerableSetUpgradeable.UintSet storage pointer,uint256) view returns (uint256)"
                      }
                    },
                    "id": 23963,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "6748:30:12",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "functionReturnParameters": 23957,
                  "id": 23964,
                  "nodeType": "Return",
                  "src": "6741:37:12"
                }
              ]
            },
            "baseFunctions": [
              24672
            ],
            "documentation": {
              "id": 23948,
              "nodeType": "StructuredDocumentation",
              "src": "6552:68:12",
              "text": " @dev See {IERC721Enumerable-tokenOfOwnerByIndex}."
            },
            "functionSelector": "2f745c59",
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "tokenOfOwnerByIndex",
            "overrides": {
              "id": 23954,
              "nodeType": "OverrideSpecifier",
              "overrides": [],
              "src": "6704:8:12"
            },
            "parameters": {
              "id": 23953,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 23950,
                  "mutability": "mutable",
                  "name": "owner",
                  "nodeType": "VariableDeclaration",
                  "scope": 23966,
                  "src": "6654:13:12",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 23949,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "6654:7:12",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 23952,
                  "mutability": "mutable",
                  "name": "index",
                  "nodeType": "VariableDeclaration",
                  "scope": 23966,
                  "src": "6669:13:12",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 23951,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "6669:7:12",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "6653:30:12"
            },
            "returnParameters": {
              "id": 23957,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 23956,
                  "mutability": "mutable",
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 23966,
                  "src": "6722:7:12",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 23955,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "6722:7:12",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "6721:9:12"
            },
            "scope": 24650,
            "stateMutability": "view",
            "virtual": true,
            "visibility": "public"
          },
          {
            "id": 23978,
            "nodeType": "FunctionDefinition",
            "src": "6856:208:12",
            "body": {
              "id": 23977,
              "nodeType": "Block",
              "src": "6926:138:12",
              "statements": [
                {
                  "expression": {
                    "arguments": [],
                    "expression": {
                      "argumentTypes": [],
                      "expression": {
                        "id": 23973,
                        "name": "_tokenOwners",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 23727,
                        "src": "7036:12:12",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_UintToAddressMap_$25465_storage",
                          "typeString": "struct EnumerableMapUpgradeable.UintToAddressMap storage ref"
                        }
                      },
                      "id": 23974,
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "length",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 25551,
                      "src": "7036:19:12",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_view$_t_struct$_UintToAddressMap_$25465_storage_ptr_$returns$_t_uint256_$bound_to$_t_struct$_UintToAddressMap_$25465_storage_ptr_$",
                        "typeString": "function (struct EnumerableMapUpgradeable.UintToAddressMap storage pointer) view returns (uint256)"
                      }
                    },
                    "id": 23975,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "7036:21:12",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "functionReturnParameters": 23972,
                  "id": 23976,
                  "nodeType": "Return",
                  "src": "7029:28:12"
                }
              ]
            },
            "baseFunctions": [
              24662
            ],
            "documentation": {
              "id": 23967,
              "nodeType": "StructuredDocumentation",
              "src": "6791:60:12",
              "text": " @dev See {IERC721Enumerable-totalSupply}."
            },
            "functionSelector": "18160ddd",
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "totalSupply",
            "overrides": {
              "id": 23969,
              "nodeType": "OverrideSpecifier",
              "overrides": [],
              "src": "6899:8:12"
            },
            "parameters": {
              "id": 23968,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "6876:2:12"
            },
            "returnParameters": {
              "id": 23972,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 23971,
                  "mutability": "mutable",
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 23978,
                  "src": "6917:7:12",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 23970,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "6917:7:12",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "6916:9:12"
            },
            "scope": 24650,
            "stateMutability": "view",
            "virtual": true,
            "visibility": "public"
          },
          {
            "id": 23997,
            "nodeType": "FunctionDefinition",
            "src": "7136:169:12",
            "body": {
              "id": 23996,
              "nodeType": "Block",
              "src": "7220:85:12",
              "statements": [
                {
                  "assignments": [
                    23988,
                    null
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 23988,
                      "mutability": "mutable",
                      "name": "tokenId",
                      "nodeType": "VariableDeclaration",
                      "scope": 23996,
                      "src": "7231:15:12",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "typeName": {
                        "id": 23987,
                        "name": "uint256",
                        "nodeType": "ElementaryTypeName",
                        "src": "7231:7:12",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "visibility": "internal"
                    },
                    null
                  ],
                  "id": 23993,
                  "initialValue": {
                    "arguments": [
                      {
                        "id": 23991,
                        "name": "index",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 23981,
                        "src": "7268:5:12",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      ],
                      "expression": {
                        "id": 23989,
                        "name": "_tokenOwners",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 23727,
                        "src": "7252:12:12",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_UintToAddressMap_$25465_storage",
                          "typeString": "struct EnumerableMapUpgradeable.UintToAddressMap storage ref"
                        }
                      },
                      "id": 23990,
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "at",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 25590,
                      "src": "7252:15:12",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_view$_t_struct$_UintToAddressMap_$25465_storage_ptr_$_t_uint256_$returns$_t_uint256_$_t_address_$bound_to$_t_struct$_UintToAddressMap_$25465_storage_ptr_$",
                        "typeString": "function (struct EnumerableMapUpgradeable.UintToAddressMap storage pointer,uint256) view returns (uint256,address)"
                      }
                    },
                    "id": 23992,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "7252:22:12",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$_t_uint256_$_t_address_$",
                      "typeString": "tuple(uint256,address)"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "7230:44:12"
                },
                {
                  "expression": {
                    "id": 23994,
                    "name": "tokenId",
                    "nodeType": "Identifier",
                    "overloadedDeclarations": [],
                    "referencedDeclaration": 23988,
                    "src": "7291:7:12",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "functionReturnParameters": 23986,
                  "id": 23995,
                  "nodeType": "Return",
                  "src": "7284:14:12"
                }
              ]
            },
            "baseFunctions": [
              24680
            ],
            "documentation": {
              "id": 23979,
              "nodeType": "StructuredDocumentation",
              "src": "7070:61:12",
              "text": " @dev See {IERC721Enumerable-tokenByIndex}."
            },
            "functionSelector": "4f6ccce7",
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "tokenByIndex",
            "overrides": {
              "id": 23983,
              "nodeType": "OverrideSpecifier",
              "overrides": [],
              "src": "7193:8:12"
            },
            "parameters": {
              "id": 23982,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 23981,
                  "mutability": "mutable",
                  "name": "index",
                  "nodeType": "VariableDeclaration",
                  "scope": 23997,
                  "src": "7158:13:12",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 23980,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "7158:7:12",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "7157:15:12"
            },
            "returnParameters": {
              "id": 23986,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 23985,
                  "mutability": "mutable",
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 23997,
                  "src": "7211:7:12",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 23984,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "7211:7:12",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "7210:9:12"
            },
            "scope": 24650,
            "stateMutability": "view",
            "virtual": true,
            "visibility": "public"
          },
          {
            "id": 24041,
            "nodeType": "FunctionDefinition",
            "src": "7362:417:12",
            "body": {
              "id": 24040,
              "nodeType": "Block",
              "src": "7432:347:12",
              "statements": [
                {
                  "assignments": [
                    24007
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 24007,
                      "mutability": "mutable",
                      "name": "owner",
                      "nodeType": "VariableDeclaration",
                      "scope": 24040,
                      "src": "7442:13:12",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      },
                      "typeName": {
                        "id": 24006,
                        "name": "address",
                        "nodeType": "ElementaryTypeName",
                        "src": "7442:7:12",
                        "stateMutability": "nonpayable",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      "visibility": "internal"
                    }
                  ],
                  "id": 24012,
                  "initialValue": {
                    "arguments": [
                      {
                        "id": 24010,
                        "name": "tokenId",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 24002,
                        "src": "7484:7:12",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      ],
                      "expression": {
                        "id": 24008,
                        "name": "ERC721Upgradeable",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 24650,
                        "src": "7458:17:12",
                        "typeDescriptions": {
                          "typeIdentifier": "t_type$_t_contract$_ERC721Upgradeable_$24650_$",
                          "typeString": "type(contract ERC721Upgradeable)"
                        }
                      },
                      "id": 24009,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "ownerOf",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 23850,
                      "src": "7458:25:12",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_view$_t_uint256_$returns$_t_address_$",
                        "typeString": "function (uint256) view returns (address)"
                      }
                    },
                    "id": 24011,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "7458:34:12",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "7442:50:12"
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "commonType": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "id": 24016,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftExpression": {
                          "id": 24014,
                          "name": "to",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 24000,
                          "src": "7510:2:12",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "nodeType": "BinaryOperation",
                        "operator": "!=",
                        "rightExpression": {
                          "id": 24015,
                          "name": "owner",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 24007,
                          "src": "7516:5:12",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "src": "7510:11:12",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      {
                        "hexValue": "4552433732313a20617070726f76616c20746f2063757272656e74206f776e6572",
                        "id": 24017,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "string",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "7523:35:12",
                        "typeDescriptions": {
                          "typeIdentifier": "t_stringliteral_b51b4875eede07862961e8f9365c6749f5fe55c6ee5d7a9e42b6912ad0b15942",
                          "typeString": "literal_string \"ERC721: approval to current owner\""
                        },
                        "value": "ERC721: approval to current owner"
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        {
                          "typeIdentifier": "t_stringliteral_b51b4875eede07862961e8f9365c6749f5fe55c6ee5d7a9e42b6912ad0b15942",
                          "typeString": "literal_string \"ERC721: approval to current owner\""
                        }
                      ],
                      "id": 24013,
                      "name": "require",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        -18,
                        -18
                      ],
                      "referencedDeclaration": -18,
                      "src": "7502:7:12",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                        "typeString": "function (bool,string memory) pure"
                      }
                    },
                    "id": 24018,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "7502:57:12",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 24019,
                  "nodeType": "ExpressionStatement",
                  "src": "7502:57:12"
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "commonType": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        "id": 24031,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftExpression": {
                          "commonType": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          },
                          "id": 24024,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftExpression": {
                            "arguments": [],
                            "expression": {
                              "argumentTypes": [],
                              "id": 24021,
                              "name": "_msgSender",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 25115,
                              "src": "7578:10:12",
                              "typeDescriptions": {
                                "typeIdentifier": "t_function_internal_view$__$returns$_t_address_payable_$",
                                "typeString": "function () view returns (address payable)"
                              }
                            },
                            "id": 24022,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "kind": "functionCall",
                            "lValueRequested": false,
                            "names": [],
                            "nodeType": "FunctionCall",
                            "src": "7578:12:12",
                            "tryCall": false,
                            "typeDescriptions": {
                              "typeIdentifier": "t_address_payable",
                              "typeString": "address payable"
                            }
                          },
                          "nodeType": "BinaryOperation",
                          "operator": "==",
                          "rightExpression": {
                            "id": 24023,
                            "name": "owner",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 24007,
                            "src": "7594:5:12",
                            "typeDescriptions": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          },
                          "src": "7578:21:12",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "nodeType": "BinaryOperation",
                        "operator": "||",
                        "rightExpression": {
                          "arguments": [
                            {
                              "id": 24027,
                              "name": "owner",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 24007,
                              "src": "7638:5:12",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            {
                              "arguments": [],
                              "expression": {
                                "argumentTypes": [],
                                "id": 24028,
                                "name": "_msgSender",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 25115,
                                "src": "7645:10:12",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_function_internal_view$__$returns$_t_address_payable_$",
                                  "typeString": "function () view returns (address payable)"
                                }
                              },
                              "id": 24029,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "kind": "functionCall",
                              "lValueRequested": false,
                              "names": [],
                              "nodeType": "FunctionCall",
                              "src": "7645:12:12",
                              "tryCall": false,
                              "typeDescriptions": {
                                "typeIdentifier": "t_address_payable",
                                "typeString": "address payable"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              },
                              {
                                "typeIdentifier": "t_address_payable",
                                "typeString": "address payable"
                              }
                            ],
                            "expression": {
                              "id": 24025,
                              "name": "ERC721Upgradeable",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 24650,
                              "src": "7603:17:12",
                              "typeDescriptions": {
                                "typeIdentifier": "t_type$_t_contract$_ERC721Upgradeable_$24650_$",
                                "typeString": "type(contract ERC721Upgradeable)"
                              }
                            },
                            "id": 24026,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberName": "isApprovedForAll",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": 24114,
                            "src": "7603:34:12",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_internal_view$_t_address_$_t_address_$returns$_t_bool_$",
                              "typeString": "function (address,address) view returns (bool)"
                            }
                          },
                          "id": 24030,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "7603:55:12",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "src": "7578:80:12",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      {
                        "hexValue": "4552433732313a20617070726f76652063616c6c6572206973206e6f74206f776e6572206e6f7220617070726f76656420666f7220616c6c",
                        "id": 24032,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "string",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "7672:58:12",
                        "typeDescriptions": {
                          "typeIdentifier": "t_stringliteral_6d83cef3e0cb19b8320a9c5feb26b56bbb08f152a8e61b12eca3302d8d68b23d",
                          "typeString": "literal_string \"ERC721: approve caller is not owner nor approved for all\""
                        },
                        "value": "ERC721: approve caller is not owner nor approved for all"
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        {
                          "typeIdentifier": "t_stringliteral_6d83cef3e0cb19b8320a9c5feb26b56bbb08f152a8e61b12eca3302d8d68b23d",
                          "typeString": "literal_string \"ERC721: approve caller is not owner nor approved for all\""
                        }
                      ],
                      "id": 24020,
                      "name": "require",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        -18,
                        -18
                      ],
                      "referencedDeclaration": -18,
                      "src": "7570:7:12",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                        "typeString": "function (bool,string memory) pure"
                      }
                    },
                    "id": 24033,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "7570:170:12",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 24034,
                  "nodeType": "ExpressionStatement",
                  "src": "7570:170:12"
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "id": 24036,
                        "name": "to",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 24000,
                        "src": "7760:2:12",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "id": 24037,
                        "name": "tokenId",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 24002,
                        "src": "7764:7:12",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      ],
                      "id": 24035,
                      "name": "_approve",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 24634,
                      "src": "7751:8:12",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_nonpayable$_t_address_$_t_uint256_$returns$__$",
                        "typeString": "function (address,uint256)"
                      }
                    },
                    "id": 24038,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "7751:21:12",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 24039,
                  "nodeType": "ExpressionStatement",
                  "src": "7751:21:12"
                }
              ]
            },
            "baseFunctions": [
              24803
            ],
            "documentation": {
              "id": 23998,
              "nodeType": "StructuredDocumentation",
              "src": "7311:46:12",
              "text": " @dev See {IERC721-approve}."
            },
            "functionSelector": "095ea7b3",
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "approve",
            "overrides": {
              "id": 24004,
              "nodeType": "OverrideSpecifier",
              "overrides": [],
              "src": "7423:8:12"
            },
            "parameters": {
              "id": 24003,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 24000,
                  "mutability": "mutable",
                  "name": "to",
                  "nodeType": "VariableDeclaration",
                  "scope": 24041,
                  "src": "7379:10:12",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 23999,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "7379:7:12",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 24002,
                  "mutability": "mutable",
                  "name": "tokenId",
                  "nodeType": "VariableDeclaration",
                  "scope": 24041,
                  "src": "7391:15:12",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 24001,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "7391:7:12",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "7378:29:12"
            },
            "returnParameters": {
              "id": 24005,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "7432:0:12"
            },
            "scope": 24650,
            "stateMutability": "nonpayable",
            "virtual": true,
            "visibility": "public"
          },
          {
            "id": 24062,
            "nodeType": "FunctionDefinition",
            "src": "7840:217:12",
            "body": {
              "id": 24061,
              "nodeType": "Block",
              "src": "7925:132:12",
              "statements": [
                {
                  "expression": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "id": 24052,
                            "name": "tokenId",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 24044,
                            "src": "7951:7:12",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          }
                        ],
                        "expression": {
                          "argumentTypes": [
                            {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          ],
                          "id": 24051,
                          "name": "_exists",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 24233,
                          "src": "7943:7:12",
                          "typeDescriptions": {
                            "typeIdentifier": "t_function_internal_view$_t_uint256_$returns$_t_bool_$",
                            "typeString": "function (uint256) view returns (bool)"
                          }
                        },
                        "id": 24053,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "functionCall",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "7943:16:12",
                        "tryCall": false,
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      {
                        "hexValue": "4552433732313a20617070726f76656420717565727920666f72206e6f6e6578697374656e7420746f6b656e",
                        "id": 24054,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "string",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "7961:46:12",
                        "typeDescriptions": {
                          "typeIdentifier": "t_stringliteral_9291e0f44949204f2e9b40e6be090924979d6047b2365868f4e9f027722eb89d",
                          "typeString": "literal_string \"ERC721: approved query for nonexistent token\""
                        },
                        "value": "ERC721: approved query for nonexistent token"
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        {
                          "typeIdentifier": "t_stringliteral_9291e0f44949204f2e9b40e6be090924979d6047b2365868f4e9f027722eb89d",
                          "typeString": "literal_string \"ERC721: approved query for nonexistent token\""
                        }
                      ],
                      "id": 24050,
                      "name": "require",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        -18,
                        -18
                      ],
                      "referencedDeclaration": -18,
                      "src": "7935:7:12",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                        "typeString": "function (bool,string memory) pure"
                      }
                    },
                    "id": 24055,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "7935:73:12",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 24056,
                  "nodeType": "ExpressionStatement",
                  "src": "7935:73:12"
                },
                {
                  "expression": {
                    "baseExpression": {
                      "id": 24057,
                      "name": "_tokenApprovals",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 23731,
                      "src": "8026:15:12",
                      "typeDescriptions": {
                        "typeIdentifier": "t_mapping$_t_uint256_$_t_address_$",
                        "typeString": "mapping(uint256 => address)"
                      }
                    },
                    "id": 24059,
                    "indexExpression": {
                      "id": 24058,
                      "name": "tokenId",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 24044,
                      "src": "8042:7:12",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "isConstant": false,
                    "isLValue": true,
                    "isPure": false,
                    "lValueRequested": false,
                    "nodeType": "IndexAccess",
                    "src": "8026:24:12",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "functionReturnParameters": 24049,
                  "id": 24060,
                  "nodeType": "Return",
                  "src": "8019:31:12"
                }
              ]
            },
            "baseFunctions": [
              24811
            ],
            "documentation": {
              "id": 24042,
              "nodeType": "StructuredDocumentation",
              "src": "7785:50:12",
              "text": " @dev See {IERC721-getApproved}."
            },
            "functionSelector": "081812fc",
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "getApproved",
            "overrides": {
              "id": 24046,
              "nodeType": "OverrideSpecifier",
              "overrides": [],
              "src": "7898:8:12"
            },
            "parameters": {
              "id": 24045,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 24044,
                  "mutability": "mutable",
                  "name": "tokenId",
                  "nodeType": "VariableDeclaration",
                  "scope": 24062,
                  "src": "7861:15:12",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 24043,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "7861:7:12",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "7860:17:12"
            },
            "returnParameters": {
              "id": 24049,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 24048,
                  "mutability": "mutable",
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 24062,
                  "src": "7916:7:12",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 24047,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "7916:7:12",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "7915:9:12"
            },
            "scope": 24650,
            "stateMutability": "view",
            "virtual": true,
            "visibility": "public"
          },
          {
            "id": 24096,
            "nodeType": "FunctionDefinition",
            "src": "8124:290:12",
            "body": {
              "id": 24095,
              "nodeType": "Block",
              "src": "8208:206:12",
              "statements": [
                {
                  "expression": {
                    "arguments": [
                      {
                        "commonType": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "id": 24075,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftExpression": {
                          "id": 24072,
                          "name": "operator",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 24065,
                          "src": "8226:8:12",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "nodeType": "BinaryOperation",
                        "operator": "!=",
                        "rightExpression": {
                          "arguments": [],
                          "expression": {
                            "argumentTypes": [],
                            "id": 24073,
                            "name": "_msgSender",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 25115,
                            "src": "8238:10:12",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_internal_view$__$returns$_t_address_payable_$",
                              "typeString": "function () view returns (address payable)"
                            }
                          },
                          "id": 24074,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "8238:12:12",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_address_payable",
                            "typeString": "address payable"
                          }
                        },
                        "src": "8226:24:12",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      {
                        "hexValue": "4552433732313a20617070726f766520746f2063616c6c6572",
                        "id": 24076,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "string",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "8252:27:12",
                        "typeDescriptions": {
                          "typeIdentifier": "t_stringliteral_45fe4329685be5ecd250fd0e6a25aea0ea4d0e30fb6a73c118b95749e6d70d05",
                          "typeString": "literal_string \"ERC721: approve to caller\""
                        },
                        "value": "ERC721: approve to caller"
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        {
                          "typeIdentifier": "t_stringliteral_45fe4329685be5ecd250fd0e6a25aea0ea4d0e30fb6a73c118b95749e6d70d05",
                          "typeString": "literal_string \"ERC721: approve to caller\""
                        }
                      ],
                      "id": 24071,
                      "name": "require",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        -18,
                        -18
                      ],
                      "referencedDeclaration": -18,
                      "src": "8218:7:12",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                        "typeString": "function (bool,string memory) pure"
                      }
                    },
                    "id": 24077,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "8218:62:12",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 24078,
                  "nodeType": "ExpressionStatement",
                  "src": "8218:62:12"
                },
                {
                  "expression": {
                    "id": 24086,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "baseExpression": {
                        "baseExpression": {
                          "id": 24079,
                          "name": "_operatorApprovals",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 23737,
                          "src": "8291:18:12",
                          "typeDescriptions": {
                            "typeIdentifier": "t_mapping$_t_address_$_t_mapping$_t_address_$_t_bool_$_$",
                            "typeString": "mapping(address => mapping(address => bool))"
                          }
                        },
                        "id": 24083,
                        "indexExpression": {
                          "arguments": [],
                          "expression": {
                            "argumentTypes": [],
                            "id": 24080,
                            "name": "_msgSender",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 25115,
                            "src": "8310:10:12",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_internal_view$__$returns$_t_address_payable_$",
                              "typeString": "function () view returns (address payable)"
                            }
                          },
                          "id": 24081,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "8310:12:12",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_address_payable",
                            "typeString": "address payable"
                          }
                        },
                        "isConstant": false,
                        "isLValue": true,
                        "isPure": false,
                        "lValueRequested": false,
                        "nodeType": "IndexAccess",
                        "src": "8291:32:12",
                        "typeDescriptions": {
                          "typeIdentifier": "t_mapping$_t_address_$_t_bool_$",
                          "typeString": "mapping(address => bool)"
                        }
                      },
                      "id": 24084,
                      "indexExpression": {
                        "id": 24082,
                        "name": "operator",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 24065,
                        "src": "8324:8:12",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": true,
                      "nodeType": "IndexAccess",
                      "src": "8291:42:12",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bool",
                        "typeString": "bool"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "id": 24085,
                      "name": "approved",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 24067,
                      "src": "8336:8:12",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bool",
                        "typeString": "bool"
                      }
                    },
                    "src": "8291:53:12",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "id": 24087,
                  "nodeType": "ExpressionStatement",
                  "src": "8291:53:12"
                },
                {
                  "eventCall": {
                    "arguments": [
                      {
                        "arguments": [],
                        "expression": {
                          "argumentTypes": [],
                          "id": 24089,
                          "name": "_msgSender",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 25115,
                          "src": "8374:10:12",
                          "typeDescriptions": {
                            "typeIdentifier": "t_function_internal_view$__$returns$_t_address_payable_$",
                            "typeString": "function () view returns (address payable)"
                          }
                        },
                        "id": 24090,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "functionCall",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "8374:12:12",
                        "tryCall": false,
                        "typeDescriptions": {
                          "typeIdentifier": "t_address_payable",
                          "typeString": "address payable"
                        }
                      },
                      {
                        "id": 24091,
                        "name": "operator",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 24065,
                        "src": "8388:8:12",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "id": 24092,
                        "name": "approved",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 24067,
                        "src": "8398:8:12",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address_payable",
                          "typeString": "address payable"
                        },
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      ],
                      "id": 24088,
                      "name": "ApprovalForAll",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 24759,
                      "src": "8359:14:12",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_event_nonpayable$_t_address_$_t_address_$_t_bool_$returns$__$",
                        "typeString": "function (address,address,bool)"
                      }
                    },
                    "id": 24093,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "8359:48:12",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 24094,
                  "nodeType": "EmitStatement",
                  "src": "8354:53:12"
                }
              ]
            },
            "baseFunctions": [
              24819
            ],
            "documentation": {
              "id": 24063,
              "nodeType": "StructuredDocumentation",
              "src": "8063:56:12",
              "text": " @dev See {IERC721-setApprovalForAll}."
            },
            "functionSelector": "a22cb465",
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "setApprovalForAll",
            "overrides": {
              "id": 24069,
              "nodeType": "OverrideSpecifier",
              "overrides": [],
              "src": "8199:8:12"
            },
            "parameters": {
              "id": 24068,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 24065,
                  "mutability": "mutable",
                  "name": "operator",
                  "nodeType": "VariableDeclaration",
                  "scope": 24096,
                  "src": "8151:16:12",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 24064,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "8151:7:12",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 24067,
                  "mutability": "mutable",
                  "name": "approved",
                  "nodeType": "VariableDeclaration",
                  "scope": 24096,
                  "src": "8169:13:12",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bool",
                    "typeString": "bool"
                  },
                  "typeName": {
                    "id": 24066,
                    "name": "bool",
                    "nodeType": "ElementaryTypeName",
                    "src": "8169:4:12",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "8150:33:12"
            },
            "returnParameters": {
              "id": 24070,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "8208:0:12"
            },
            "scope": 24650,
            "stateMutability": "nonpayable",
            "virtual": true,
            "visibility": "public"
          },
          {
            "id": 24114,
            "nodeType": "FunctionDefinition",
            "src": "8480:162:12",
            "body": {
              "id": 24113,
              "nodeType": "Block",
              "src": "8583:59:12",
              "statements": [
                {
                  "expression": {
                    "baseExpression": {
                      "baseExpression": {
                        "id": 24107,
                        "name": "_operatorApprovals",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 23737,
                        "src": "8600:18:12",
                        "typeDescriptions": {
                          "typeIdentifier": "t_mapping$_t_address_$_t_mapping$_t_address_$_t_bool_$_$",
                          "typeString": "mapping(address => mapping(address => bool))"
                        }
                      },
                      "id": 24109,
                      "indexExpression": {
                        "id": 24108,
                        "name": "owner",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 24099,
                        "src": "8619:5:12",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": false,
                      "nodeType": "IndexAccess",
                      "src": "8600:25:12",
                      "typeDescriptions": {
                        "typeIdentifier": "t_mapping$_t_address_$_t_bool_$",
                        "typeString": "mapping(address => bool)"
                      }
                    },
                    "id": 24111,
                    "indexExpression": {
                      "id": 24110,
                      "name": "operator",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 24101,
                      "src": "8626:8:12",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      }
                    },
                    "isConstant": false,
                    "isLValue": true,
                    "isPure": false,
                    "lValueRequested": false,
                    "nodeType": "IndexAccess",
                    "src": "8600:35:12",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "functionReturnParameters": 24106,
                  "id": 24112,
                  "nodeType": "Return",
                  "src": "8593:42:12"
                }
              ]
            },
            "baseFunctions": [
              24829
            ],
            "documentation": {
              "id": 24097,
              "nodeType": "StructuredDocumentation",
              "src": "8420:55:12",
              "text": " @dev See {IERC721-isApprovedForAll}."
            },
            "functionSelector": "e985e9c5",
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "isApprovedForAll",
            "overrides": {
              "id": 24103,
              "nodeType": "OverrideSpecifier",
              "overrides": [],
              "src": "8559:8:12"
            },
            "parameters": {
              "id": 24102,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 24099,
                  "mutability": "mutable",
                  "name": "owner",
                  "nodeType": "VariableDeclaration",
                  "scope": 24114,
                  "src": "8506:13:12",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 24098,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "8506:7:12",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 24101,
                  "mutability": "mutable",
                  "name": "operator",
                  "nodeType": "VariableDeclaration",
                  "scope": 24114,
                  "src": "8521:16:12",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 24100,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "8521:7:12",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "8505:33:12"
            },
            "returnParameters": {
              "id": 24106,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 24105,
                  "mutability": "mutable",
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 24114,
                  "src": "8577:4:12",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bool",
                    "typeString": "bool"
                  },
                  "typeName": {
                    "id": 24104,
                    "name": "bool",
                    "nodeType": "ElementaryTypeName",
                    "src": "8577:4:12",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "8576:6:12"
            },
            "scope": 24650,
            "stateMutability": "view",
            "virtual": true,
            "visibility": "public"
          },
          {
            "id": 24141,
            "nodeType": "FunctionDefinition",
            "src": "8704:300:12",
            "body": {
              "id": 24140,
              "nodeType": "Block",
              "src": "8793:211:12",
              "statements": [
                {
                  "expression": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "arguments": [],
                            "expression": {
                              "argumentTypes": [],
                              "id": 24127,
                              "name": "_msgSender",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 25115,
                              "src": "8882:10:12",
                              "typeDescriptions": {
                                "typeIdentifier": "t_function_internal_view$__$returns$_t_address_payable_$",
                                "typeString": "function () view returns (address payable)"
                              }
                            },
                            "id": 24128,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "kind": "functionCall",
                            "lValueRequested": false,
                            "names": [],
                            "nodeType": "FunctionCall",
                            "src": "8882:12:12",
                            "tryCall": false,
                            "typeDescriptions": {
                              "typeIdentifier": "t_address_payable",
                              "typeString": "address payable"
                            }
                          },
                          {
                            "id": 24129,
                            "name": "tokenId",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 24121,
                            "src": "8896:7:12",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          }
                        ],
                        "expression": {
                          "argumentTypes": [
                            {
                              "typeIdentifier": "t_address_payable",
                              "typeString": "address payable"
                            },
                            {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          ],
                          "id": 24126,
                          "name": "_isApprovedOrOwner",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 24275,
                          "src": "8863:18:12",
                          "typeDescriptions": {
                            "typeIdentifier": "t_function_internal_view$_t_address_$_t_uint256_$returns$_t_bool_$",
                            "typeString": "function (address,uint256) view returns (bool)"
                          }
                        },
                        "id": 24130,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "functionCall",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "8863:41:12",
                        "tryCall": false,
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      {
                        "hexValue": "4552433732313a207472616e736665722063616c6c6572206973206e6f74206f776e6572206e6f7220617070726f766564",
                        "id": 24131,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "string",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "8906:51:12",
                        "typeDescriptions": {
                          "typeIdentifier": "t_stringliteral_c8682f3ad98807db59a6ec6bb812b72fed0a66e3150fa8239699ee83885247f2",
                          "typeString": "literal_string \"ERC721: transfer caller is not owner nor approved\""
                        },
                        "value": "ERC721: transfer caller is not owner nor approved"
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        {
                          "typeIdentifier": "t_stringliteral_c8682f3ad98807db59a6ec6bb812b72fed0a66e3150fa8239699ee83885247f2",
                          "typeString": "literal_string \"ERC721: transfer caller is not owner nor approved\""
                        }
                      ],
                      "id": 24125,
                      "name": "require",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        -18,
                        -18
                      ],
                      "referencedDeclaration": -18,
                      "src": "8855:7:12",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                        "typeString": "function (bool,string memory) pure"
                      }
                    },
                    "id": 24132,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "8855:103:12",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 24133,
                  "nodeType": "ExpressionStatement",
                  "src": "8855:103:12"
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "id": 24135,
                        "name": "from",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 24117,
                        "src": "8979:4:12",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "id": 24136,
                        "name": "to",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 24119,
                        "src": "8985:2:12",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "id": 24137,
                        "name": "tokenId",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 24121,
                        "src": "8989:7:12",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      ],
                      "id": 24134,
                      "name": "_transfer",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 24519,
                      "src": "8969:9:12",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_nonpayable$_t_address_$_t_address_$_t_uint256_$returns$__$",
                        "typeString": "function (address,address,uint256)"
                      }
                    },
                    "id": 24138,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "8969:28:12",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 24139,
                  "nodeType": "ExpressionStatement",
                  "src": "8969:28:12"
                }
              ]
            },
            "baseFunctions": [
              24795
            ],
            "documentation": {
              "id": 24115,
              "nodeType": "StructuredDocumentation",
              "src": "8648:51:12",
              "text": " @dev See {IERC721-transferFrom}."
            },
            "functionSelector": "23b872dd",
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "transferFrom",
            "overrides": {
              "id": 24123,
              "nodeType": "OverrideSpecifier",
              "overrides": [],
              "src": "8784:8:12"
            },
            "parameters": {
              "id": 24122,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 24117,
                  "mutability": "mutable",
                  "name": "from",
                  "nodeType": "VariableDeclaration",
                  "scope": 24141,
                  "src": "8726:12:12",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 24116,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "8726:7:12",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 24119,
                  "mutability": "mutable",
                  "name": "to",
                  "nodeType": "VariableDeclaration",
                  "scope": 24141,
                  "src": "8740:10:12",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 24118,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "8740:7:12",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 24121,
                  "mutability": "mutable",
                  "name": "tokenId",
                  "nodeType": "VariableDeclaration",
                  "scope": 24141,
                  "src": "8752:15:12",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 24120,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "8752:7:12",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "8725:43:12"
            },
            "returnParameters": {
              "id": 24124,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "8793:0:12"
            },
            "scope": 24650,
            "stateMutability": "nonpayable",
            "virtual": true,
            "visibility": "public"
          },
          {
            "id": 24160,
            "nodeType": "FunctionDefinition",
            "src": "9070:149:12",
            "body": {
              "id": 24159,
              "nodeType": "Block",
              "src": "9163:56:12",
              "statements": [
                {
                  "expression": {
                    "arguments": [
                      {
                        "id": 24153,
                        "name": "from",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 24144,
                        "src": "9190:4:12",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "id": 24154,
                        "name": "to",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 24146,
                        "src": "9196:2:12",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "id": 24155,
                        "name": "tokenId",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 24148,
                        "src": "9200:7:12",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      {
                        "hexValue": "",
                        "id": 24156,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "string",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "9209:2:12",
                        "typeDescriptions": {
                          "typeIdentifier": "t_stringliteral_c5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470",
                          "typeString": "literal_string \"\""
                        },
                        "value": ""
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        {
                          "typeIdentifier": "t_stringliteral_c5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470",
                          "typeString": "literal_string \"\""
                        }
                      ],
                      "id": 24152,
                      "name": "safeTransferFrom",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        24160,
                        24190
                      ],
                      "referencedDeclaration": 24190,
                      "src": "9173:16:12",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_nonpayable$_t_address_$_t_address_$_t_uint256_$_t_bytes_memory_ptr_$returns$__$",
                        "typeString": "function (address,address,uint256,bytes memory)"
                      }
                    },
                    "id": 24157,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "9173:39:12",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 24158,
                  "nodeType": "ExpressionStatement",
                  "src": "9173:39:12"
                }
              ]
            },
            "baseFunctions": [
              24785
            ],
            "documentation": {
              "id": 24142,
              "nodeType": "StructuredDocumentation",
              "src": "9010:55:12",
              "text": " @dev See {IERC721-safeTransferFrom}."
            },
            "functionSelector": "42842e0e",
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "safeTransferFrom",
            "overrides": {
              "id": 24150,
              "nodeType": "OverrideSpecifier",
              "overrides": [],
              "src": "9154:8:12"
            },
            "parameters": {
              "id": 24149,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 24144,
                  "mutability": "mutable",
                  "name": "from",
                  "nodeType": "VariableDeclaration",
                  "scope": 24160,
                  "src": "9096:12:12",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 24143,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "9096:7:12",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 24146,
                  "mutability": "mutable",
                  "name": "to",
                  "nodeType": "VariableDeclaration",
                  "scope": 24160,
                  "src": "9110:10:12",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 24145,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "9110:7:12",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 24148,
                  "mutability": "mutable",
                  "name": "tokenId",
                  "nodeType": "VariableDeclaration",
                  "scope": 24160,
                  "src": "9122:15:12",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 24147,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "9122:7:12",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "9095:43:12"
            },
            "returnParameters": {
              "id": 24151,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "9163:0:12"
            },
            "scope": 24650,
            "stateMutability": "nonpayable",
            "virtual": true,
            "visibility": "public"
          },
          {
            "id": 24190,
            "nodeType": "FunctionDefinition",
            "src": "9285:282:12",
            "body": {
              "id": 24189,
              "nodeType": "Block",
              "src": "9398:169:12",
              "statements": [
                {
                  "expression": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "arguments": [],
                            "expression": {
                              "argumentTypes": [],
                              "id": 24175,
                              "name": "_msgSender",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 25115,
                              "src": "9435:10:12",
                              "typeDescriptions": {
                                "typeIdentifier": "t_function_internal_view$__$returns$_t_address_payable_$",
                                "typeString": "function () view returns (address payable)"
                              }
                            },
                            "id": 24176,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "kind": "functionCall",
                            "lValueRequested": false,
                            "names": [],
                            "nodeType": "FunctionCall",
                            "src": "9435:12:12",
                            "tryCall": false,
                            "typeDescriptions": {
                              "typeIdentifier": "t_address_payable",
                              "typeString": "address payable"
                            }
                          },
                          {
                            "id": 24177,
                            "name": "tokenId",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 24167,
                            "src": "9449:7:12",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          }
                        ],
                        "expression": {
                          "argumentTypes": [
                            {
                              "typeIdentifier": "t_address_payable",
                              "typeString": "address payable"
                            },
                            {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          ],
                          "id": 24174,
                          "name": "_isApprovedOrOwner",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 24275,
                          "src": "9416:18:12",
                          "typeDescriptions": {
                            "typeIdentifier": "t_function_internal_view$_t_address_$_t_uint256_$returns$_t_bool_$",
                            "typeString": "function (address,uint256) view returns (bool)"
                          }
                        },
                        "id": 24178,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "functionCall",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "9416:41:12",
                        "tryCall": false,
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      {
                        "hexValue": "4552433732313a207472616e736665722063616c6c6572206973206e6f74206f776e6572206e6f7220617070726f766564",
                        "id": 24179,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "string",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "9459:51:12",
                        "typeDescriptions": {
                          "typeIdentifier": "t_stringliteral_c8682f3ad98807db59a6ec6bb812b72fed0a66e3150fa8239699ee83885247f2",
                          "typeString": "literal_string \"ERC721: transfer caller is not owner nor approved\""
                        },
                        "value": "ERC721: transfer caller is not owner nor approved"
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        {
                          "typeIdentifier": "t_stringliteral_c8682f3ad98807db59a6ec6bb812b72fed0a66e3150fa8239699ee83885247f2",
                          "typeString": "literal_string \"ERC721: transfer caller is not owner nor approved\""
                        }
                      ],
                      "id": 24173,
                      "name": "require",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        -18,
                        -18
                      ],
                      "referencedDeclaration": -18,
                      "src": "9408:7:12",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                        "typeString": "function (bool,string memory) pure"
                      }
                    },
                    "id": 24180,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "9408:103:12",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 24181,
                  "nodeType": "ExpressionStatement",
                  "src": "9408:103:12"
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "id": 24183,
                        "name": "from",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 24163,
                        "src": "9535:4:12",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "id": 24184,
                        "name": "to",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 24165,
                        "src": "9541:2:12",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "id": 24185,
                        "name": "tokenId",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 24167,
                        "src": "9545:7:12",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      {
                        "id": 24186,
                        "name": "_data",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 24169,
                        "src": "9554:5:12",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes_memory_ptr",
                          "typeString": "bytes memory"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        {
                          "typeIdentifier": "t_bytes_memory_ptr",
                          "typeString": "bytes memory"
                        }
                      ],
                      "id": 24182,
                      "name": "_safeTransfer",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 24219,
                      "src": "9521:13:12",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_nonpayable$_t_address_$_t_address_$_t_uint256_$_t_bytes_memory_ptr_$returns$__$",
                        "typeString": "function (address,address,uint256,bytes memory)"
                      }
                    },
                    "id": 24187,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "9521:39:12",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 24188,
                  "nodeType": "ExpressionStatement",
                  "src": "9521:39:12"
                }
              ]
            },
            "baseFunctions": [
              24841
            ],
            "documentation": {
              "id": 24161,
              "nodeType": "StructuredDocumentation",
              "src": "9225:55:12",
              "text": " @dev See {IERC721-safeTransferFrom}."
            },
            "functionSelector": "b88d4fde",
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "safeTransferFrom",
            "overrides": {
              "id": 24171,
              "nodeType": "OverrideSpecifier",
              "overrides": [],
              "src": "9389:8:12"
            },
            "parameters": {
              "id": 24170,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 24163,
                  "mutability": "mutable",
                  "name": "from",
                  "nodeType": "VariableDeclaration",
                  "scope": 24190,
                  "src": "9311:12:12",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 24162,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "9311:7:12",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 24165,
                  "mutability": "mutable",
                  "name": "to",
                  "nodeType": "VariableDeclaration",
                  "scope": 24190,
                  "src": "9325:10:12",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 24164,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "9325:7:12",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 24167,
                  "mutability": "mutable",
                  "name": "tokenId",
                  "nodeType": "VariableDeclaration",
                  "scope": 24190,
                  "src": "9337:15:12",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 24166,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "9337:7:12",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 24169,
                  "mutability": "mutable",
                  "name": "_data",
                  "nodeType": "VariableDeclaration",
                  "scope": 24190,
                  "src": "9354:18:12",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes_memory_ptr",
                    "typeString": "bytes"
                  },
                  "typeName": {
                    "id": 24168,
                    "name": "bytes",
                    "nodeType": "ElementaryTypeName",
                    "src": "9354:5:12",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes_storage_ptr",
                      "typeString": "bytes"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "9310:63:12"
            },
            "returnParameters": {
              "id": 24172,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "9398:0:12"
            },
            "scope": 24650,
            "stateMutability": "nonpayable",
            "virtual": true,
            "visibility": "public"
          },
          {
            "id": 24219,
            "nodeType": "FunctionDefinition",
            "src": "10429:269:12",
            "body": {
              "id": 24218,
              "nodeType": "Block",
              "src": "10532:166:12",
              "statements": [
                {
                  "expression": {
                    "arguments": [
                      {
                        "id": 24203,
                        "name": "from",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 24193,
                        "src": "10552:4:12",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "id": 24204,
                        "name": "to",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 24195,
                        "src": "10558:2:12",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "id": 24205,
                        "name": "tokenId",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 24197,
                        "src": "10562:7:12",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      ],
                      "id": 24202,
                      "name": "_transfer",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 24519,
                      "src": "10542:9:12",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_nonpayable$_t_address_$_t_address_$_t_uint256_$returns$__$",
                        "typeString": "function (address,address,uint256)"
                      }
                    },
                    "id": 24206,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "10542:28:12",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 24207,
                  "nodeType": "ExpressionStatement",
                  "src": "10542:28:12"
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "id": 24210,
                            "name": "from",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 24193,
                            "src": "10611:4:12",
                            "typeDescriptions": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          },
                          {
                            "id": 24211,
                            "name": "to",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 24195,
                            "src": "10617:2:12",
                            "typeDescriptions": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          },
                          {
                            "id": 24212,
                            "name": "tokenId",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 24197,
                            "src": "10621:7:12",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          {
                            "id": 24213,
                            "name": "_data",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 24199,
                            "src": "10630:5:12",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bytes_memory_ptr",
                              "typeString": "bytes memory"
                            }
                          }
                        ],
                        "expression": {
                          "argumentTypes": [
                            {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            },
                            {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            },
                            {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            },
                            {
                              "typeIdentifier": "t_bytes_memory_ptr",
                              "typeString": "bytes memory"
                            }
                          ],
                          "id": 24209,
                          "name": "_checkOnERC721Received",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 24610,
                          "src": "10588:22:12",
                          "typeDescriptions": {
                            "typeIdentifier": "t_function_internal_nonpayable$_t_address_$_t_address_$_t_uint256_$_t_bytes_memory_ptr_$returns$_t_bool_$",
                            "typeString": "function (address,address,uint256,bytes memory) returns (bool)"
                          }
                        },
                        "id": 24214,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "functionCall",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "10588:48:12",
                        "tryCall": false,
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      {
                        "hexValue": "4552433732313a207472616e7366657220746f206e6f6e20455243373231526563656976657220696d706c656d656e746572",
                        "id": 24215,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "string",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "10638:52:12",
                        "typeDescriptions": {
                          "typeIdentifier": "t_stringliteral_1e766a06da43a53d0f4c380e06e5a342e14d5af1bf8501996c844905530ca84e",
                          "typeString": "literal_string \"ERC721: transfer to non ERC721Receiver implementer\""
                        },
                        "value": "ERC721: transfer to non ERC721Receiver implementer"
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        {
                          "typeIdentifier": "t_stringliteral_1e766a06da43a53d0f4c380e06e5a342e14d5af1bf8501996c844905530ca84e",
                          "typeString": "literal_string \"ERC721: transfer to non ERC721Receiver implementer\""
                        }
                      ],
                      "id": 24208,
                      "name": "require",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        -18,
                        -18
                      ],
                      "referencedDeclaration": -18,
                      "src": "10580:7:12",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                        "typeString": "function (bool,string memory) pure"
                      }
                    },
                    "id": 24216,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "10580:111:12",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 24217,
                  "nodeType": "ExpressionStatement",
                  "src": "10580:111:12"
                }
              ]
            },
            "documentation": {
              "id": 24191,
              "nodeType": "StructuredDocumentation",
              "src": "9573:851:12",
              "text": " @dev Safely transfers `tokenId` token from `from` to `to`, checking first that contract recipients\n are aware of the ERC721 protocol to prevent tokens from being forever locked.\n `_data` is additional data, it has no specified format and it is sent in call to `to`.\n This internal function is equivalent to {safeTransferFrom}, and can be used to e.g.\n implement alternative mechanisms to perform token transfer, such as signature-based.\n Requirements:\n - `from` cannot be the zero address.\n - `to` cannot be the zero address.\n - `tokenId` token must exist and be owned by `from`.\n - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer.\n Emits a {Transfer} event."
            },
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "_safeTransfer",
            "parameters": {
              "id": 24200,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 24193,
                  "mutability": "mutable",
                  "name": "from",
                  "nodeType": "VariableDeclaration",
                  "scope": 24219,
                  "src": "10452:12:12",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 24192,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "10452:7:12",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 24195,
                  "mutability": "mutable",
                  "name": "to",
                  "nodeType": "VariableDeclaration",
                  "scope": 24219,
                  "src": "10466:10:12",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 24194,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "10466:7:12",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 24197,
                  "mutability": "mutable",
                  "name": "tokenId",
                  "nodeType": "VariableDeclaration",
                  "scope": 24219,
                  "src": "10478:15:12",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 24196,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "10478:7:12",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 24199,
                  "mutability": "mutable",
                  "name": "_data",
                  "nodeType": "VariableDeclaration",
                  "scope": 24219,
                  "src": "10495:18:12",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes_memory_ptr",
                    "typeString": "bytes"
                  },
                  "typeName": {
                    "id": 24198,
                    "name": "bytes",
                    "nodeType": "ElementaryTypeName",
                    "src": "10495:5:12",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes_storage_ptr",
                      "typeString": "bytes"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "10451:63:12"
            },
            "returnParameters": {
              "id": 24201,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "10532:0:12"
            },
            "scope": 24650,
            "stateMutability": "nonpayable",
            "virtual": true,
            "visibility": "internal"
          },
          {
            "id": 24233,
            "nodeType": "FunctionDefinition",
            "src": "11001:125:12",
            "body": {
              "id": 24232,
              "nodeType": "Block",
              "src": "11072:54:12",
              "statements": [
                {
                  "expression": {
                    "arguments": [
                      {
                        "id": 24229,
                        "name": "tokenId",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 24222,
                        "src": "11111:7:12",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      ],
                      "expression": {
                        "id": 24227,
                        "name": "_tokenOwners",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 23727,
                        "src": "11089:12:12",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_UintToAddressMap_$25465_storage",
                          "typeString": "struct EnumerableMapUpgradeable.UintToAddressMap storage ref"
                        }
                      },
                      "id": 24228,
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "contains",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 25537,
                      "src": "11089:21:12",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_view$_t_struct$_UintToAddressMap_$25465_storage_ptr_$_t_uint256_$returns$_t_bool_$bound_to$_t_struct$_UintToAddressMap_$25465_storage_ptr_$",
                        "typeString": "function (struct EnumerableMapUpgradeable.UintToAddressMap storage pointer,uint256) view returns (bool)"
                      }
                    },
                    "id": 24230,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "11089:30:12",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "functionReturnParameters": 24226,
                  "id": 24231,
                  "nodeType": "Return",
                  "src": "11082:37:12"
                }
              ]
            },
            "documentation": {
              "id": 24220,
              "nodeType": "StructuredDocumentation",
              "src": "10704:292:12",
              "text": " @dev Returns whether `tokenId` exists.\n Tokens can be managed by their owner or approved accounts via {approve} or {setApprovalForAll}.\n Tokens start existing when they are minted (`_mint`),\n and stop existing when they are burned (`_burn`)."
            },
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "_exists",
            "parameters": {
              "id": 24223,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 24222,
                  "mutability": "mutable",
                  "name": "tokenId",
                  "nodeType": "VariableDeclaration",
                  "scope": 24233,
                  "src": "11018:15:12",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 24221,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "11018:7:12",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "11017:17:12"
            },
            "returnParameters": {
              "id": 24226,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 24225,
                  "mutability": "mutable",
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 24233,
                  "src": "11066:4:12",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bool",
                    "typeString": "bool"
                  },
                  "typeName": {
                    "id": 24224,
                    "name": "bool",
                    "nodeType": "ElementaryTypeName",
                    "src": "11066:4:12",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "11065:6:12"
            },
            "scope": 24650,
            "stateMutability": "view",
            "virtual": true,
            "visibility": "internal"
          },
          {
            "id": 24275,
            "nodeType": "FunctionDefinition",
            "src": "11284:373:12",
            "body": {
              "id": 24274,
              "nodeType": "Block",
              "src": "11383:274:12",
              "statements": [
                {
                  "expression": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "id": 24245,
                            "name": "tokenId",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 24238,
                            "src": "11409:7:12",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          }
                        ],
                        "expression": {
                          "argumentTypes": [
                            {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          ],
                          "id": 24244,
                          "name": "_exists",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 24233,
                          "src": "11401:7:12",
                          "typeDescriptions": {
                            "typeIdentifier": "t_function_internal_view$_t_uint256_$returns$_t_bool_$",
                            "typeString": "function (uint256) view returns (bool)"
                          }
                        },
                        "id": 24246,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "functionCall",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "11401:16:12",
                        "tryCall": false,
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      {
                        "hexValue": "4552433732313a206f70657261746f7220717565727920666f72206e6f6e6578697374656e7420746f6b656e",
                        "id": 24247,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "string",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "11419:46:12",
                        "typeDescriptions": {
                          "typeIdentifier": "t_stringliteral_5797d1ccb08b83980dd0c07ea40d8f6a64d35fff736a19bdd17522954cb0899c",
                          "typeString": "literal_string \"ERC721: operator query for nonexistent token\""
                        },
                        "value": "ERC721: operator query for nonexistent token"
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        {
                          "typeIdentifier": "t_stringliteral_5797d1ccb08b83980dd0c07ea40d8f6a64d35fff736a19bdd17522954cb0899c",
                          "typeString": "literal_string \"ERC721: operator query for nonexistent token\""
                        }
                      ],
                      "id": 24243,
                      "name": "require",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        -18,
                        -18
                      ],
                      "referencedDeclaration": -18,
                      "src": "11393:7:12",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                        "typeString": "function (bool,string memory) pure"
                      }
                    },
                    "id": 24248,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "11393:73:12",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 24249,
                  "nodeType": "ExpressionStatement",
                  "src": "11393:73:12"
                },
                {
                  "assignments": [
                    24251
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 24251,
                      "mutability": "mutable",
                      "name": "owner",
                      "nodeType": "VariableDeclaration",
                      "scope": 24274,
                      "src": "11476:13:12",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      },
                      "typeName": {
                        "id": 24250,
                        "name": "address",
                        "nodeType": "ElementaryTypeName",
                        "src": "11476:7:12",
                        "stateMutability": "nonpayable",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      "visibility": "internal"
                    }
                  ],
                  "id": 24256,
                  "initialValue": {
                    "arguments": [
                      {
                        "id": 24254,
                        "name": "tokenId",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 24238,
                        "src": "11518:7:12",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      ],
                      "expression": {
                        "id": 24252,
                        "name": "ERC721Upgradeable",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 24650,
                        "src": "11492:17:12",
                        "typeDescriptions": {
                          "typeIdentifier": "t_type$_t_contract$_ERC721Upgradeable_$24650_$",
                          "typeString": "type(contract ERC721Upgradeable)"
                        }
                      },
                      "id": 24253,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "ownerOf",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 23850,
                      "src": "11492:25:12",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_view$_t_uint256_$returns$_t_address_$",
                        "typeString": "function (uint256) view returns (address)"
                      }
                    },
                    "id": 24255,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "11492:34:12",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "11476:50:12"
                },
                {
                  "expression": {
                    "components": [
                      {
                        "commonType": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        "id": 24271,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftExpression": {
                          "commonType": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          },
                          "id": 24265,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftExpression": {
                            "commonType": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            },
                            "id": 24259,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "leftExpression": {
                              "id": 24257,
                              "name": "spender",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 24236,
                              "src": "11544:7:12",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            "nodeType": "BinaryOperation",
                            "operator": "==",
                            "rightExpression": {
                              "id": 24258,
                              "name": "owner",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 24251,
                              "src": "11555:5:12",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            "src": "11544:16:12",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bool",
                              "typeString": "bool"
                            }
                          },
                          "nodeType": "BinaryOperation",
                          "operator": "||",
                          "rightExpression": {
                            "commonType": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            },
                            "id": 24264,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "leftExpression": {
                              "arguments": [
                                {
                                  "id": 24261,
                                  "name": "tokenId",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 24238,
                                  "src": "11576:7:12",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                }
                              ],
                              "expression": {
                                "argumentTypes": [
                                  {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                ],
                                "id": 24260,
                                "name": "getApproved",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 24062,
                                "src": "11564:11:12",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_function_internal_view$_t_uint256_$returns$_t_address_$",
                                  "typeString": "function (uint256) view returns (address)"
                                }
                              },
                              "id": 24262,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "kind": "functionCall",
                              "lValueRequested": false,
                              "names": [],
                              "nodeType": "FunctionCall",
                              "src": "11564:20:12",
                              "tryCall": false,
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            "nodeType": "BinaryOperation",
                            "operator": "==",
                            "rightExpression": {
                              "id": 24263,
                              "name": "spender",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 24236,
                              "src": "11588:7:12",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            "src": "11564:31:12",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bool",
                              "typeString": "bool"
                            }
                          },
                          "src": "11544:51:12",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "nodeType": "BinaryOperation",
                        "operator": "||",
                        "rightExpression": {
                          "arguments": [
                            {
                              "id": 24268,
                              "name": "owner",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 24251,
                              "src": "11634:5:12",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            {
                              "id": 24269,
                              "name": "spender",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 24236,
                              "src": "11641:7:12",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              },
                              {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            ],
                            "expression": {
                              "id": 24266,
                              "name": "ERC721Upgradeable",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 24650,
                              "src": "11599:17:12",
                              "typeDescriptions": {
                                "typeIdentifier": "t_type$_t_contract$_ERC721Upgradeable_$24650_$",
                                "typeString": "type(contract ERC721Upgradeable)"
                              }
                            },
                            "id": 24267,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberName": "isApprovedForAll",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": 24114,
                            "src": "11599:34:12",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_internal_view$_t_address_$_t_address_$returns$_t_bool_$",
                              "typeString": "function (address,address) view returns (bool)"
                            }
                          },
                          "id": 24270,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "11599:50:12",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "src": "11544:105:12",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      }
                    ],
                    "id": 24272,
                    "isConstant": false,
                    "isInlineArray": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "nodeType": "TupleExpression",
                    "src": "11543:107:12",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "functionReturnParameters": 24242,
                  "id": 24273,
                  "nodeType": "Return",
                  "src": "11536:114:12"
                }
              ]
            },
            "documentation": {
              "id": 24234,
              "nodeType": "StructuredDocumentation",
              "src": "11132:147:12",
              "text": " @dev Returns whether `spender` is allowed to manage `tokenId`.\n Requirements:\n - `tokenId` must exist."
            },
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "_isApprovedOrOwner",
            "parameters": {
              "id": 24239,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 24236,
                  "mutability": "mutable",
                  "name": "spender",
                  "nodeType": "VariableDeclaration",
                  "scope": 24275,
                  "src": "11312:15:12",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 24235,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "11312:7:12",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 24238,
                  "mutability": "mutable",
                  "name": "tokenId",
                  "nodeType": "VariableDeclaration",
                  "scope": 24275,
                  "src": "11329:15:12",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 24237,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "11329:7:12",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "11311:34:12"
            },
            "returnParameters": {
              "id": 24242,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 24241,
                  "mutability": "mutable",
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 24275,
                  "src": "11377:4:12",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bool",
                    "typeString": "bool"
                  },
                  "typeName": {
                    "id": 24240,
                    "name": "bool",
                    "nodeType": "ElementaryTypeName",
                    "src": "11377:4:12",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "11376:6:12"
            },
            "scope": 24650,
            "stateMutability": "view",
            "virtual": true,
            "visibility": "internal"
          },
          {
            "id": 24290,
            "nodeType": "FunctionDefinition",
            "src": "11988:108:12",
            "body": {
              "id": 24289,
              "nodeType": "Block",
              "src": "12053:43:12",
              "statements": [
                {
                  "expression": {
                    "arguments": [
                      {
                        "id": 24284,
                        "name": "to",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 24278,
                        "src": "12073:2:12",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "id": 24285,
                        "name": "tokenId",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 24280,
                        "src": "12077:7:12",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      {
                        "hexValue": "",
                        "id": 24286,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "string",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "12086:2:12",
                        "typeDescriptions": {
                          "typeIdentifier": "t_stringliteral_c5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470",
                          "typeString": "literal_string \"\""
                        },
                        "value": ""
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        {
                          "typeIdentifier": "t_stringliteral_c5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470",
                          "typeString": "literal_string \"\""
                        }
                      ],
                      "id": 24283,
                      "name": "_safeMint",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        24290,
                        24319
                      ],
                      "referencedDeclaration": 24319,
                      "src": "12063:9:12",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_nonpayable$_t_address_$_t_uint256_$_t_bytes_memory_ptr_$returns$__$",
                        "typeString": "function (address,uint256,bytes memory)"
                      }
                    },
                    "id": 24287,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "12063:26:12",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 24288,
                  "nodeType": "ExpressionStatement",
                  "src": "12063:26:12"
                }
              ]
            },
            "documentation": {
              "id": 24276,
              "nodeType": "StructuredDocumentation",
              "src": "11663:320:12",
              "text": " @dev Safely mints `tokenId` and transfers it to `to`.\n Requirements:\nd*\n - `tokenId` must not exist.\n - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer.\n Emits a {Transfer} event."
            },
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "_safeMint",
            "parameters": {
              "id": 24281,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 24278,
                  "mutability": "mutable",
                  "name": "to",
                  "nodeType": "VariableDeclaration",
                  "scope": 24290,
                  "src": "12007:10:12",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 24277,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "12007:7:12",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 24280,
                  "mutability": "mutable",
                  "name": "tokenId",
                  "nodeType": "VariableDeclaration",
                  "scope": 24290,
                  "src": "12019:15:12",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 24279,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "12019:7:12",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "12006:29:12"
            },
            "returnParameters": {
              "id": 24282,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "12053:0:12"
            },
            "scope": 24650,
            "stateMutability": "nonpayable",
            "virtual": true,
            "visibility": "internal"
          },
          {
            "id": 24319,
            "nodeType": "FunctionDefinition",
            "src": "12317:247:12",
            "body": {
              "id": 24318,
              "nodeType": "Block",
              "src": "12402:162:12",
              "statements": [
                {
                  "expression": {
                    "arguments": [
                      {
                        "id": 24301,
                        "name": "to",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 24293,
                        "src": "12418:2:12",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "id": 24302,
                        "name": "tokenId",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 24295,
                        "src": "12422:7:12",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      ],
                      "id": 24300,
                      "name": "_mint",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 24378,
                      "src": "12412:5:12",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_nonpayable$_t_address_$_t_uint256_$returns$__$",
                        "typeString": "function (address,uint256)"
                      }
                    },
                    "id": 24303,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "12412:18:12",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 24304,
                  "nodeType": "ExpressionStatement",
                  "src": "12412:18:12"
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "arguments": [
                              {
                                "hexValue": "30",
                                "id": 24309,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": true,
                                "kind": "number",
                                "lValueRequested": false,
                                "nodeType": "Literal",
                                "src": "12479:1:12",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_rational_0_by_1",
                                  "typeString": "int_const 0"
                                },
                                "value": "0"
                              }
                            ],
                            "expression": {
                              "argumentTypes": [
                                {
                                  "typeIdentifier": "t_rational_0_by_1",
                                  "typeString": "int_const 0"
                                }
                              ],
                              "id": 24308,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "lValueRequested": false,
                              "nodeType": "ElementaryTypeNameExpression",
                              "src": "12471:7:12",
                              "typeDescriptions": {
                                "typeIdentifier": "t_type$_t_address_$",
                                "typeString": "type(address)"
                              },
                              "typeName": {
                                "id": 24307,
                                "name": "address",
                                "nodeType": "ElementaryTypeName",
                                "src": "12471:7:12",
                                "typeDescriptions": {}
                              }
                            },
                            "id": 24310,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "kind": "typeConversion",
                            "lValueRequested": false,
                            "names": [],
                            "nodeType": "FunctionCall",
                            "src": "12471:10:12",
                            "tryCall": false,
                            "typeDescriptions": {
                              "typeIdentifier": "t_address_payable",
                              "typeString": "address payable"
                            }
                          },
                          {
                            "id": 24311,
                            "name": "to",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 24293,
                            "src": "12483:2:12",
                            "typeDescriptions": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          },
                          {
                            "id": 24312,
                            "name": "tokenId",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 24295,
                            "src": "12487:7:12",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          {
                            "id": 24313,
                            "name": "_data",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 24297,
                            "src": "12496:5:12",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bytes_memory_ptr",
                              "typeString": "bytes memory"
                            }
                          }
                        ],
                        "expression": {
                          "argumentTypes": [
                            {
                              "typeIdentifier": "t_address_payable",
                              "typeString": "address payable"
                            },
                            {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            },
                            {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            },
                            {
                              "typeIdentifier": "t_bytes_memory_ptr",
                              "typeString": "bytes memory"
                            }
                          ],
                          "id": 24306,
                          "name": "_checkOnERC721Received",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 24610,
                          "src": "12448:22:12",
                          "typeDescriptions": {
                            "typeIdentifier": "t_function_internal_nonpayable$_t_address_$_t_address_$_t_uint256_$_t_bytes_memory_ptr_$returns$_t_bool_$",
                            "typeString": "function (address,address,uint256,bytes memory) returns (bool)"
                          }
                        },
                        "id": 24314,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "functionCall",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "12448:54:12",
                        "tryCall": false,
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      {
                        "hexValue": "4552433732313a207472616e7366657220746f206e6f6e20455243373231526563656976657220696d706c656d656e746572",
                        "id": 24315,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "string",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "12504:52:12",
                        "typeDescriptions": {
                          "typeIdentifier": "t_stringliteral_1e766a06da43a53d0f4c380e06e5a342e14d5af1bf8501996c844905530ca84e",
                          "typeString": "literal_string \"ERC721: transfer to non ERC721Receiver implementer\""
                        },
                        "value": "ERC721: transfer to non ERC721Receiver implementer"
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        {
                          "typeIdentifier": "t_stringliteral_1e766a06da43a53d0f4c380e06e5a342e14d5af1bf8501996c844905530ca84e",
                          "typeString": "literal_string \"ERC721: transfer to non ERC721Receiver implementer\""
                        }
                      ],
                      "id": 24305,
                      "name": "require",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        -18,
                        -18
                      ],
                      "referencedDeclaration": -18,
                      "src": "12440:7:12",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                        "typeString": "function (bool,string memory) pure"
                      }
                    },
                    "id": 24316,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "12440:117:12",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 24317,
                  "nodeType": "ExpressionStatement",
                  "src": "12440:117:12"
                }
              ]
            },
            "documentation": {
              "id": 24291,
              "nodeType": "StructuredDocumentation",
              "src": "12102:210:12",
              "text": " @dev Same as {xref-ERC721-_safeMint-address-uint256-}[`_safeMint`], with an additional `data` parameter which is\n forwarded in {IERC721Receiver-onERC721Received} to contract recipients."
            },
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "_safeMint",
            "parameters": {
              "id": 24298,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 24293,
                  "mutability": "mutable",
                  "name": "to",
                  "nodeType": "VariableDeclaration",
                  "scope": 24319,
                  "src": "12336:10:12",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 24292,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "12336:7:12",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 24295,
                  "mutability": "mutable",
                  "name": "tokenId",
                  "nodeType": "VariableDeclaration",
                  "scope": 24319,
                  "src": "12348:15:12",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 24294,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "12348:7:12",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 24297,
                  "mutability": "mutable",
                  "name": "_data",
                  "nodeType": "VariableDeclaration",
                  "scope": 24319,
                  "src": "12365:18:12",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes_memory_ptr",
                    "typeString": "bytes"
                  },
                  "typeName": {
                    "id": 24296,
                    "name": "bytes",
                    "nodeType": "ElementaryTypeName",
                    "src": "12365:5:12",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes_storage_ptr",
                      "typeString": "bytes"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "12335:49:12"
            },
            "returnParameters": {
              "id": 24299,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "12402:0:12"
            },
            "scope": 24650,
            "stateMutability": "nonpayable",
            "virtual": true,
            "visibility": "internal"
          },
          {
            "id": 24378,
            "nodeType": "FunctionDefinition",
            "src": "12886:393:12",
            "body": {
              "id": 24377,
              "nodeType": "Block",
              "src": "12947:332:12",
              "statements": [
                {
                  "expression": {
                    "arguments": [
                      {
                        "commonType": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "id": 24333,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftExpression": {
                          "id": 24328,
                          "name": "to",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 24322,
                          "src": "12965:2:12",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "nodeType": "BinaryOperation",
                        "operator": "!=",
                        "rightExpression": {
                          "arguments": [
                            {
                              "hexValue": "30",
                              "id": 24331,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "kind": "number",
                              "lValueRequested": false,
                              "nodeType": "Literal",
                              "src": "12979:1:12",
                              "typeDescriptions": {
                                "typeIdentifier": "t_rational_0_by_1",
                                "typeString": "int_const 0"
                              },
                              "value": "0"
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_rational_0_by_1",
                                "typeString": "int_const 0"
                              }
                            ],
                            "id": 24330,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "lValueRequested": false,
                            "nodeType": "ElementaryTypeNameExpression",
                            "src": "12971:7:12",
                            "typeDescriptions": {
                              "typeIdentifier": "t_type$_t_address_$",
                              "typeString": "type(address)"
                            },
                            "typeName": {
                              "id": 24329,
                              "name": "address",
                              "nodeType": "ElementaryTypeName",
                              "src": "12971:7:12",
                              "typeDescriptions": {}
                            }
                          },
                          "id": 24332,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "kind": "typeConversion",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "12971:10:12",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_address_payable",
                            "typeString": "address payable"
                          }
                        },
                        "src": "12965:16:12",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      {
                        "hexValue": "4552433732313a206d696e7420746f20746865207a65726f2061646472657373",
                        "id": 24334,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "string",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "12983:34:12",
                        "typeDescriptions": {
                          "typeIdentifier": "t_stringliteral_8a66f4bb6512ffbfcc3db9b42318eb65f26ac15163eaa9a1e5cfa7bee9d1c7c6",
                          "typeString": "literal_string \"ERC721: mint to the zero address\""
                        },
                        "value": "ERC721: mint to the zero address"
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        {
                          "typeIdentifier": "t_stringliteral_8a66f4bb6512ffbfcc3db9b42318eb65f26ac15163eaa9a1e5cfa7bee9d1c7c6",
                          "typeString": "literal_string \"ERC721: mint to the zero address\""
                        }
                      ],
                      "id": 24327,
                      "name": "require",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        -18,
                        -18
                      ],
                      "referencedDeclaration": -18,
                      "src": "12957:7:12",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                        "typeString": "function (bool,string memory) pure"
                      }
                    },
                    "id": 24335,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "12957:61:12",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 24336,
                  "nodeType": "ExpressionStatement",
                  "src": "12957:61:12"
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "id": 24341,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "nodeType": "UnaryOperation",
                        "operator": "!",
                        "prefix": true,
                        "src": "13036:17:12",
                        "subExpression": {
                          "arguments": [
                            {
                              "id": 24339,
                              "name": "tokenId",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 24324,
                              "src": "13045:7:12",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            ],
                            "id": 24338,
                            "name": "_exists",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 24233,
                            "src": "13037:7:12",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_internal_view$_t_uint256_$returns$_t_bool_$",
                              "typeString": "function (uint256) view returns (bool)"
                            }
                          },
                          "id": 24340,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "13037:16:12",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      {
                        "hexValue": "4552433732313a20746f6b656e20616c7265616479206d696e746564",
                        "id": 24342,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "string",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "13055:30:12",
                        "typeDescriptions": {
                          "typeIdentifier": "t_stringliteral_2a63ce106ef95058ed21fd07c42a10f11dc5c32ac13a4e847923f7759f635d57",
                          "typeString": "literal_string \"ERC721: token already minted\""
                        },
                        "value": "ERC721: token already minted"
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        {
                          "typeIdentifier": "t_stringliteral_2a63ce106ef95058ed21fd07c42a10f11dc5c32ac13a4e847923f7759f635d57",
                          "typeString": "literal_string \"ERC721: token already minted\""
                        }
                      ],
                      "id": 24337,
                      "name": "require",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        -18,
                        -18
                      ],
                      "referencedDeclaration": -18,
                      "src": "13028:7:12",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                        "typeString": "function (bool,string memory) pure"
                      }
                    },
                    "id": 24343,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "13028:58:12",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 24344,
                  "nodeType": "ExpressionStatement",
                  "src": "13028:58:12"
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "hexValue": "30",
                            "id": 24348,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "kind": "number",
                            "lValueRequested": false,
                            "nodeType": "Literal",
                            "src": "13126:1:12",
                            "typeDescriptions": {
                              "typeIdentifier": "t_rational_0_by_1",
                              "typeString": "int_const 0"
                            },
                            "value": "0"
                          }
                        ],
                        "expression": {
                          "argumentTypes": [
                            {
                              "typeIdentifier": "t_rational_0_by_1",
                              "typeString": "int_const 0"
                            }
                          ],
                          "id": 24347,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "lValueRequested": false,
                          "nodeType": "ElementaryTypeNameExpression",
                          "src": "13118:7:12",
                          "typeDescriptions": {
                            "typeIdentifier": "t_type$_t_address_$",
                            "typeString": "type(address)"
                          },
                          "typeName": {
                            "id": 24346,
                            "name": "address",
                            "nodeType": "ElementaryTypeName",
                            "src": "13118:7:12",
                            "typeDescriptions": {}
                          }
                        },
                        "id": 24349,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "typeConversion",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "13118:10:12",
                        "tryCall": false,
                        "typeDescriptions": {
                          "typeIdentifier": "t_address_payable",
                          "typeString": "address payable"
                        }
                      },
                      {
                        "id": 24350,
                        "name": "to",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 24322,
                        "src": "13130:2:12",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "id": 24351,
                        "name": "tokenId",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 24324,
                        "src": "13134:7:12",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address_payable",
                          "typeString": "address payable"
                        },
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      ],
                      "id": 24345,
                      "name": "_beforeTokenTransfer",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 24645,
                      "src": "13097:20:12",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_nonpayable$_t_address_$_t_address_$_t_uint256_$returns$__$",
                        "typeString": "function (address,address,uint256)"
                      }
                    },
                    "id": 24352,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "13097:45:12",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 24353,
                  "nodeType": "ExpressionStatement",
                  "src": "13097:45:12"
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "id": 24358,
                        "name": "tokenId",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 24324,
                        "src": "13175:7:12",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      ],
                      "expression": {
                        "baseExpression": {
                          "id": 24354,
                          "name": "_holderTokens",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 23725,
                          "src": "13153:13:12",
                          "typeDescriptions": {
                            "typeIdentifier": "t_mapping$_t_address_$_t_struct$_UintSet_$26088_storage_$",
                            "typeString": "mapping(address => struct EnumerableSetUpgradeable.UintSet storage ref)"
                          }
                        },
                        "id": 24356,
                        "indexExpression": {
                          "id": 24355,
                          "name": "to",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 24322,
                          "src": "13167:2:12",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "isConstant": false,
                        "isLValue": true,
                        "isPure": false,
                        "lValueRequested": false,
                        "nodeType": "IndexAccess",
                        "src": "13153:17:12",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_UintSet_$26088_storage",
                          "typeString": "struct EnumerableSetUpgradeable.UintSet storage ref"
                        }
                      },
                      "id": 24357,
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "add",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 26108,
                      "src": "13153:21:12",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_nonpayable$_t_struct$_UintSet_$26088_storage_ptr_$_t_uint256_$returns$_t_bool_$bound_to$_t_struct$_UintSet_$26088_storage_ptr_$",
                        "typeString": "function (struct EnumerableSetUpgradeable.UintSet storage pointer,uint256) returns (bool)"
                      }
                    },
                    "id": 24359,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "13153:30:12",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "id": 24360,
                  "nodeType": "ExpressionStatement",
                  "src": "13153:30:12"
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "id": 24364,
                        "name": "tokenId",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 24324,
                        "src": "13211:7:12",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      {
                        "id": 24365,
                        "name": "to",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 24322,
                        "src": "13220:2:12",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      ],
                      "expression": {
                        "id": 24361,
                        "name": "_tokenOwners",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 23727,
                        "src": "13194:12:12",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_UintToAddressMap_$25465_storage",
                          "typeString": "struct EnumerableMapUpgradeable.UintToAddressMap storage ref"
                        }
                      },
                      "id": 24363,
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "set",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 25497,
                      "src": "13194:16:12",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_nonpayable$_t_struct$_UintToAddressMap_$25465_storage_ptr_$_t_uint256_$_t_address_$returns$_t_bool_$bound_to$_t_struct$_UintToAddressMap_$25465_storage_ptr_$",
                        "typeString": "function (struct EnumerableMapUpgradeable.UintToAddressMap storage pointer,uint256,address) returns (bool)"
                      }
                    },
                    "id": 24366,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "13194:29:12",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "id": 24367,
                  "nodeType": "ExpressionStatement",
                  "src": "13194:29:12"
                },
                {
                  "eventCall": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "hexValue": "30",
                            "id": 24371,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "kind": "number",
                            "lValueRequested": false,
                            "nodeType": "Literal",
                            "src": "13256:1:12",
                            "typeDescriptions": {
                              "typeIdentifier": "t_rational_0_by_1",
                              "typeString": "int_const 0"
                            },
                            "value": "0"
                          }
                        ],
                        "expression": {
                          "argumentTypes": [
                            {
                              "typeIdentifier": "t_rational_0_by_1",
                              "typeString": "int_const 0"
                            }
                          ],
                          "id": 24370,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "lValueRequested": false,
                          "nodeType": "ElementaryTypeNameExpression",
                          "src": "13248:7:12",
                          "typeDescriptions": {
                            "typeIdentifier": "t_type$_t_address_$",
                            "typeString": "type(address)"
                          },
                          "typeName": {
                            "id": 24369,
                            "name": "address",
                            "nodeType": "ElementaryTypeName",
                            "src": "13248:7:12",
                            "typeDescriptions": {}
                          }
                        },
                        "id": 24372,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "typeConversion",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "13248:10:12",
                        "tryCall": false,
                        "typeDescriptions": {
                          "typeIdentifier": "t_address_payable",
                          "typeString": "address payable"
                        }
                      },
                      {
                        "id": 24373,
                        "name": "to",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 24322,
                        "src": "13260:2:12",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "id": 24374,
                        "name": "tokenId",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 24324,
                        "src": "13264:7:12",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address_payable",
                          "typeString": "address payable"
                        },
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      ],
                      "id": 24368,
                      "name": "Transfer",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 24741,
                      "src": "13239:8:12",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_event_nonpayable$_t_address_$_t_address_$_t_uint256_$returns$__$",
                        "typeString": "function (address,address,uint256)"
                      }
                    },
                    "id": 24375,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "13239:33:12",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 24376,
                  "nodeType": "EmitStatement",
                  "src": "13234:38:12"
                }
              ]
            },
            "documentation": {
              "id": 24320,
              "nodeType": "StructuredDocumentation",
              "src": "12570:311:12",
              "text": " @dev Mints `tokenId` and transfers it to `to`.\n WARNING: Usage of this method is discouraged, use {_safeMint} whenever possible\n Requirements:\n - `tokenId` must not exist.\n - `to` cannot be the zero address.\n Emits a {Transfer} event."
            },
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "_mint",
            "parameters": {
              "id": 24325,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 24322,
                  "mutability": "mutable",
                  "name": "to",
                  "nodeType": "VariableDeclaration",
                  "scope": 24378,
                  "src": "12901:10:12",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 24321,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "12901:7:12",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 24324,
                  "mutability": "mutable",
                  "name": "tokenId",
                  "nodeType": "VariableDeclaration",
                  "scope": 24378,
                  "src": "12913:15:12",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 24323,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "12913:7:12",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "12900:29:12"
            },
            "returnParameters": {
              "id": 24326,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "12947:0:12"
            },
            "scope": 24650,
            "stateMutability": "nonpayable",
            "virtual": true,
            "visibility": "internal"
          },
          {
            "id": 24447,
            "nodeType": "FunctionDefinition",
            "src": "13496:538:12",
            "body": {
              "id": 24446,
              "nodeType": "Block",
              "src": "13545:489:12",
              "statements": [
                {
                  "assignments": [
                    24385
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 24385,
                      "mutability": "mutable",
                      "name": "owner",
                      "nodeType": "VariableDeclaration",
                      "scope": 24446,
                      "src": "13555:13:12",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      },
                      "typeName": {
                        "id": 24384,
                        "name": "address",
                        "nodeType": "ElementaryTypeName",
                        "src": "13555:7:12",
                        "stateMutability": "nonpayable",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      "visibility": "internal"
                    }
                  ],
                  "id": 24390,
                  "initialValue": {
                    "arguments": [
                      {
                        "id": 24388,
                        "name": "tokenId",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 24381,
                        "src": "13597:7:12",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      ],
                      "expression": {
                        "id": 24386,
                        "name": "ERC721Upgradeable",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 24650,
                        "src": "13571:17:12",
                        "typeDescriptions": {
                          "typeIdentifier": "t_type$_t_contract$_ERC721Upgradeable_$24650_$",
                          "typeString": "type(contract ERC721Upgradeable)"
                        }
                      },
                      "id": 24387,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "ownerOf",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 23850,
                      "src": "13571:25:12",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_view$_t_uint256_$returns$_t_address_$",
                        "typeString": "function (uint256) view returns (address)"
                      }
                    },
                    "id": 24389,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "13571:34:12",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "13555:50:12"
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "id": 24392,
                        "name": "owner",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 24385,
                        "src": "13655:5:12",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "arguments": [
                          {
                            "hexValue": "30",
                            "id": 24395,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "kind": "number",
                            "lValueRequested": false,
                            "nodeType": "Literal",
                            "src": "13670:1:12",
                            "typeDescriptions": {
                              "typeIdentifier": "t_rational_0_by_1",
                              "typeString": "int_const 0"
                            },
                            "value": "0"
                          }
                        ],
                        "expression": {
                          "argumentTypes": [
                            {
                              "typeIdentifier": "t_rational_0_by_1",
                              "typeString": "int_const 0"
                            }
                          ],
                          "id": 24394,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "lValueRequested": false,
                          "nodeType": "ElementaryTypeNameExpression",
                          "src": "13662:7:12",
                          "typeDescriptions": {
                            "typeIdentifier": "t_type$_t_address_$",
                            "typeString": "type(address)"
                          },
                          "typeName": {
                            "id": 24393,
                            "name": "address",
                            "nodeType": "ElementaryTypeName",
                            "src": "13662:7:12",
                            "typeDescriptions": {}
                          }
                        },
                        "id": 24396,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "typeConversion",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "13662:10:12",
                        "tryCall": false,
                        "typeDescriptions": {
                          "typeIdentifier": "t_address_payable",
                          "typeString": "address payable"
                        }
                      },
                      {
                        "id": 24397,
                        "name": "tokenId",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 24381,
                        "src": "13674:7:12",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        {
                          "typeIdentifier": "t_address_payable",
                          "typeString": "address payable"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      ],
                      "id": 24391,
                      "name": "_beforeTokenTransfer",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 24645,
                      "src": "13634:20:12",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_nonpayable$_t_address_$_t_address_$_t_uint256_$returns$__$",
                        "typeString": "function (address,address,uint256)"
                      }
                    },
                    "id": 24398,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "13634:48:12",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 24399,
                  "nodeType": "ExpressionStatement",
                  "src": "13634:48:12"
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "hexValue": "30",
                            "id": 24403,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "kind": "number",
                            "lValueRequested": false,
                            "nodeType": "Literal",
                            "src": "13737:1:12",
                            "typeDescriptions": {
                              "typeIdentifier": "t_rational_0_by_1",
                              "typeString": "int_const 0"
                            },
                            "value": "0"
                          }
                        ],
                        "expression": {
                          "argumentTypes": [
                            {
                              "typeIdentifier": "t_rational_0_by_1",
                              "typeString": "int_const 0"
                            }
                          ],
                          "id": 24402,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "lValueRequested": false,
                          "nodeType": "ElementaryTypeNameExpression",
                          "src": "13729:7:12",
                          "typeDescriptions": {
                            "typeIdentifier": "t_type$_t_address_$",
                            "typeString": "type(address)"
                          },
                          "typeName": {
                            "id": 24401,
                            "name": "address",
                            "nodeType": "ElementaryTypeName",
                            "src": "13729:7:12",
                            "typeDescriptions": {}
                          }
                        },
                        "id": 24404,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "typeConversion",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "13729:10:12",
                        "tryCall": false,
                        "typeDescriptions": {
                          "typeIdentifier": "t_address_payable",
                          "typeString": "address payable"
                        }
                      },
                      {
                        "id": 24405,
                        "name": "tokenId",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 24381,
                        "src": "13741:7:12",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address_payable",
                          "typeString": "address payable"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      ],
                      "id": 24400,
                      "name": "_approve",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 24634,
                      "src": "13720:8:12",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_nonpayable$_t_address_$_t_uint256_$returns$__$",
                        "typeString": "function (address,uint256)"
                      }
                    },
                    "id": 24406,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "13720:29:12",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 24407,
                  "nodeType": "ExpressionStatement",
                  "src": "13720:29:12"
                },
                {
                  "condition": {
                    "commonType": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    },
                    "id": 24416,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "expression": {
                        "arguments": [
                          {
                            "baseExpression": {
                              "id": 24410,
                              "name": "_tokenURIs",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 23745,
                              "src": "13805:10:12",
                              "typeDescriptions": {
                                "typeIdentifier": "t_mapping$_t_uint256_$_t_string_storage_$",
                                "typeString": "mapping(uint256 => string storage ref)"
                              }
                            },
                            "id": 24412,
                            "indexExpression": {
                              "id": 24411,
                              "name": "tokenId",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 24381,
                              "src": "13816:7:12",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "isConstant": false,
                            "isLValue": true,
                            "isPure": false,
                            "lValueRequested": false,
                            "nodeType": "IndexAccess",
                            "src": "13805:19:12",
                            "typeDescriptions": {
                              "typeIdentifier": "t_string_storage",
                              "typeString": "string storage ref"
                            }
                          }
                        ],
                        "expression": {
                          "argumentTypes": [
                            {
                              "typeIdentifier": "t_string_storage",
                              "typeString": "string storage ref"
                            }
                          ],
                          "id": 24409,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "lValueRequested": false,
                          "nodeType": "ElementaryTypeNameExpression",
                          "src": "13799:5:12",
                          "typeDescriptions": {
                            "typeIdentifier": "t_type$_t_bytes_storage_ptr_$",
                            "typeString": "type(bytes storage pointer)"
                          },
                          "typeName": {
                            "id": 24408,
                            "name": "bytes",
                            "nodeType": "ElementaryTypeName",
                            "src": "13799:5:12",
                            "typeDescriptions": {}
                          }
                        },
                        "id": 24413,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "typeConversion",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "13799:26:12",
                        "tryCall": false,
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes_storage_ptr",
                          "typeString": "bytes storage pointer"
                        }
                      },
                      "id": 24414,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "length",
                      "nodeType": "MemberAccess",
                      "src": "13799:33:12",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "!=",
                    "rightExpression": {
                      "hexValue": "30",
                      "id": 24415,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "number",
                      "lValueRequested": false,
                      "nodeType": "Literal",
                      "src": "13836:1:12",
                      "typeDescriptions": {
                        "typeIdentifier": "t_rational_0_by_1",
                        "typeString": "int_const 0"
                      },
                      "value": "0"
                    },
                    "src": "13799:38:12",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "id": 24423,
                  "nodeType": "IfStatement",
                  "src": "13795:95:12",
                  "trueBody": {
                    "id": 24422,
                    "nodeType": "Block",
                    "src": "13839:51:12",
                    "statements": [
                      {
                        "expression": {
                          "id": 24420,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "nodeType": "UnaryOperation",
                          "operator": "delete",
                          "prefix": true,
                          "src": "13853:26:12",
                          "subExpression": {
                            "baseExpression": {
                              "id": 24417,
                              "name": "_tokenURIs",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 23745,
                              "src": "13860:10:12",
                              "typeDescriptions": {
                                "typeIdentifier": "t_mapping$_t_uint256_$_t_string_storage_$",
                                "typeString": "mapping(uint256 => string storage ref)"
                              }
                            },
                            "id": 24419,
                            "indexExpression": {
                              "id": 24418,
                              "name": "tokenId",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 24381,
                              "src": "13871:7:12",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "isConstant": false,
                            "isLValue": true,
                            "isPure": false,
                            "lValueRequested": true,
                            "nodeType": "IndexAccess",
                            "src": "13860:19:12",
                            "typeDescriptions": {
                              "typeIdentifier": "t_string_storage",
                              "typeString": "string storage ref"
                            }
                          },
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 24421,
                        "nodeType": "ExpressionStatement",
                        "src": "13853:26:12"
                      }
                    ]
                  }
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "id": 24428,
                        "name": "tokenId",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 24381,
                        "src": "13928:7:12",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      ],
                      "expression": {
                        "baseExpression": {
                          "id": 24424,
                          "name": "_holderTokens",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 23725,
                          "src": "13900:13:12",
                          "typeDescriptions": {
                            "typeIdentifier": "t_mapping$_t_address_$_t_struct$_UintSet_$26088_storage_$",
                            "typeString": "mapping(address => struct EnumerableSetUpgradeable.UintSet storage ref)"
                          }
                        },
                        "id": 24426,
                        "indexExpression": {
                          "id": 24425,
                          "name": "owner",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 24385,
                          "src": "13914:5:12",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "isConstant": false,
                        "isLValue": true,
                        "isPure": false,
                        "lValueRequested": false,
                        "nodeType": "IndexAccess",
                        "src": "13900:20:12",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_UintSet_$26088_storage",
                          "typeString": "struct EnumerableSetUpgradeable.UintSet storage ref"
                        }
                      },
                      "id": 24427,
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "remove",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 26128,
                      "src": "13900:27:12",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_nonpayable$_t_struct$_UintSet_$26088_storage_ptr_$_t_uint256_$returns$_t_bool_$bound_to$_t_struct$_UintSet_$26088_storage_ptr_$",
                        "typeString": "function (struct EnumerableSetUpgradeable.UintSet storage pointer,uint256) returns (bool)"
                      }
                    },
                    "id": 24429,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "13900:36:12",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "id": 24430,
                  "nodeType": "ExpressionStatement",
                  "src": "13900:36:12"
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "id": 24434,
                        "name": "tokenId",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 24381,
                        "src": "13967:7:12",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      ],
                      "expression": {
                        "id": 24431,
                        "name": "_tokenOwners",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 23727,
                        "src": "13947:12:12",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_UintToAddressMap_$25465_storage",
                          "typeString": "struct EnumerableMapUpgradeable.UintToAddressMap storage ref"
                        }
                      },
                      "id": 24433,
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "remove",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 25517,
                      "src": "13947:19:12",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_nonpayable$_t_struct$_UintToAddressMap_$25465_storage_ptr_$_t_uint256_$returns$_t_bool_$bound_to$_t_struct$_UintToAddressMap_$25465_storage_ptr_$",
                        "typeString": "function (struct EnumerableMapUpgradeable.UintToAddressMap storage pointer,uint256) returns (bool)"
                      }
                    },
                    "id": 24435,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "13947:28:12",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "id": 24436,
                  "nodeType": "ExpressionStatement",
                  "src": "13947:28:12"
                },
                {
                  "eventCall": {
                    "arguments": [
                      {
                        "id": 24438,
                        "name": "owner",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 24385,
                        "src": "14000:5:12",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "arguments": [
                          {
                            "hexValue": "30",
                            "id": 24441,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "kind": "number",
                            "lValueRequested": false,
                            "nodeType": "Literal",
                            "src": "14015:1:12",
                            "typeDescriptions": {
                              "typeIdentifier": "t_rational_0_by_1",
                              "typeString": "int_const 0"
                            },
                            "value": "0"
                          }
                        ],
                        "expression": {
                          "argumentTypes": [
                            {
                              "typeIdentifier": "t_rational_0_by_1",
                              "typeString": "int_const 0"
                            }
                          ],
                          "id": 24440,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "lValueRequested": false,
                          "nodeType": "ElementaryTypeNameExpression",
                          "src": "14007:7:12",
                          "typeDescriptions": {
                            "typeIdentifier": "t_type$_t_address_$",
                            "typeString": "type(address)"
                          },
                          "typeName": {
                            "id": 24439,
                            "name": "address",
                            "nodeType": "ElementaryTypeName",
                            "src": "14007:7:12",
                            "typeDescriptions": {}
                          }
                        },
                        "id": 24442,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "typeConversion",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "14007:10:12",
                        "tryCall": false,
                        "typeDescriptions": {
                          "typeIdentifier": "t_address_payable",
                          "typeString": "address payable"
                        }
                      },
                      {
                        "id": 24443,
                        "name": "tokenId",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 24381,
                        "src": "14019:7:12",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        {
                          "typeIdentifier": "t_address_payable",
                          "typeString": "address payable"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      ],
                      "id": 24437,
                      "name": "Transfer",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 24741,
                      "src": "13991:8:12",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_event_nonpayable$_t_address_$_t_address_$_t_uint256_$returns$__$",
                        "typeString": "function (address,address,uint256)"
                      }
                    },
                    "id": 24444,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "13991:36:12",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 24445,
                  "nodeType": "EmitStatement",
                  "src": "13986:41:12"
                }
              ]
            },
            "documentation": {
              "id": 24379,
              "nodeType": "StructuredDocumentation",
              "src": "13285:206:12",
              "text": " @dev Destroys `tokenId`.\n The approval is cleared when the token is burned.\n Requirements:\n - `tokenId` must exist.\n Emits a {Transfer} event."
            },
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "_burn",
            "parameters": {
              "id": 24382,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 24381,
                  "mutability": "mutable",
                  "name": "tokenId",
                  "nodeType": "VariableDeclaration",
                  "scope": 24447,
                  "src": "13511:15:12",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 24380,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "13511:7:12",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "13510:17:12"
            },
            "returnParameters": {
              "id": 24383,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "13545:0:12"
            },
            "scope": 24650,
            "stateMutability": "nonpayable",
            "virtual": true,
            "visibility": "internal"
          },
          {
            "id": 24519,
            "nodeType": "FunctionDefinition",
            "src": "14358:595:12",
            "body": {
              "id": 24518,
              "nodeType": "Block",
              "src": "14437:516:12",
              "statements": [
                {
                  "expression": {
                    "arguments": [
                      {
                        "commonType": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "id": 24463,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftExpression": {
                          "arguments": [
                            {
                              "id": 24460,
                              "name": "tokenId",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 24454,
                              "src": "14481:7:12",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            ],
                            "expression": {
                              "id": 24458,
                              "name": "ERC721Upgradeable",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 24650,
                              "src": "14455:17:12",
                              "typeDescriptions": {
                                "typeIdentifier": "t_type$_t_contract$_ERC721Upgradeable_$24650_$",
                                "typeString": "type(contract ERC721Upgradeable)"
                              }
                            },
                            "id": 24459,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberName": "ownerOf",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": 23850,
                            "src": "14455:25:12",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_internal_view$_t_uint256_$returns$_t_address_$",
                              "typeString": "function (uint256) view returns (address)"
                            }
                          },
                          "id": 24461,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "14455:34:12",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "nodeType": "BinaryOperation",
                        "operator": "==",
                        "rightExpression": {
                          "id": 24462,
                          "name": "from",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 24450,
                          "src": "14493:4:12",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "src": "14455:42:12",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      {
                        "hexValue": "4552433732313a207472616e73666572206f6620746f6b656e2074686174206973206e6f74206f776e",
                        "id": 24464,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "string",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "14499:43:12",
                        "typeDescriptions": {
                          "typeIdentifier": "t_stringliteral_a01073130a885d6c1c1af6ac75fc3b1c4f9403c235362962bbf528e2bd87d950",
                          "typeString": "literal_string \"ERC721: transfer of token that is not own\""
                        },
                        "value": "ERC721: transfer of token that is not own"
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        {
                          "typeIdentifier": "t_stringliteral_a01073130a885d6c1c1af6ac75fc3b1c4f9403c235362962bbf528e2bd87d950",
                          "typeString": "literal_string \"ERC721: transfer of token that is not own\""
                        }
                      ],
                      "id": 24457,
                      "name": "require",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        -18,
                        -18
                      ],
                      "referencedDeclaration": -18,
                      "src": "14447:7:12",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                        "typeString": "function (bool,string memory) pure"
                      }
                    },
                    "id": 24465,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "14447:96:12",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 24466,
                  "nodeType": "ExpressionStatement",
                  "src": "14447:96:12"
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "commonType": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "id": 24473,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftExpression": {
                          "id": 24468,
                          "name": "to",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 24452,
                          "src": "14579:2:12",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "nodeType": "BinaryOperation",
                        "operator": "!=",
                        "rightExpression": {
                          "arguments": [
                            {
                              "hexValue": "30",
                              "id": 24471,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "kind": "number",
                              "lValueRequested": false,
                              "nodeType": "Literal",
                              "src": "14593:1:12",
                              "typeDescriptions": {
                                "typeIdentifier": "t_rational_0_by_1",
                                "typeString": "int_const 0"
                              },
                              "value": "0"
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_rational_0_by_1",
                                "typeString": "int_const 0"
                              }
                            ],
                            "id": 24470,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "lValueRequested": false,
                            "nodeType": "ElementaryTypeNameExpression",
                            "src": "14585:7:12",
                            "typeDescriptions": {
                              "typeIdentifier": "t_type$_t_address_$",
                              "typeString": "type(address)"
                            },
                            "typeName": {
                              "id": 24469,
                              "name": "address",
                              "nodeType": "ElementaryTypeName",
                              "src": "14585:7:12",
                              "typeDescriptions": {}
                            }
                          },
                          "id": 24472,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "kind": "typeConversion",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "14585:10:12",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_address_payable",
                            "typeString": "address payable"
                          }
                        },
                        "src": "14579:16:12",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      {
                        "hexValue": "4552433732313a207472616e7366657220746f20746865207a65726f2061646472657373",
                        "id": 24474,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "string",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "14597:38:12",
                        "typeDescriptions": {
                          "typeIdentifier": "t_stringliteral_455fea98ea03c32d7dd1a6f1426917d80529bf47b3ccbde74e7206e889e709f4",
                          "typeString": "literal_string \"ERC721: transfer to the zero address\""
                        },
                        "value": "ERC721: transfer to the zero address"
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        {
                          "typeIdentifier": "t_stringliteral_455fea98ea03c32d7dd1a6f1426917d80529bf47b3ccbde74e7206e889e709f4",
                          "typeString": "literal_string \"ERC721: transfer to the zero address\""
                        }
                      ],
                      "id": 24467,
                      "name": "require",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        -18,
                        -18
                      ],
                      "referencedDeclaration": -18,
                      "src": "14571:7:12",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                        "typeString": "function (bool,string memory) pure"
                      }
                    },
                    "id": 24475,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "14571:65:12",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 24476,
                  "nodeType": "ExpressionStatement",
                  "src": "14571:65:12"
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "id": 24478,
                        "name": "from",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 24450,
                        "src": "14668:4:12",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "id": 24479,
                        "name": "to",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 24452,
                        "src": "14674:2:12",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "id": 24480,
                        "name": "tokenId",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 24454,
                        "src": "14678:7:12",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      ],
                      "id": 24477,
                      "name": "_beforeTokenTransfer",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 24645,
                      "src": "14647:20:12",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_nonpayable$_t_address_$_t_address_$_t_uint256_$returns$__$",
                        "typeString": "function (address,address,uint256)"
                      }
                    },
                    "id": 24481,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "14647:39:12",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 24482,
                  "nodeType": "ExpressionStatement",
                  "src": "14647:39:12"
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "hexValue": "30",
                            "id": 24486,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "kind": "number",
                            "lValueRequested": false,
                            "nodeType": "Literal",
                            "src": "14765:1:12",
                            "typeDescriptions": {
                              "typeIdentifier": "t_rational_0_by_1",
                              "typeString": "int_const 0"
                            },
                            "value": "0"
                          }
                        ],
                        "expression": {
                          "argumentTypes": [
                            {
                              "typeIdentifier": "t_rational_0_by_1",
                              "typeString": "int_const 0"
                            }
                          ],
                          "id": 24485,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "lValueRequested": false,
                          "nodeType": "ElementaryTypeNameExpression",
                          "src": "14757:7:12",
                          "typeDescriptions": {
                            "typeIdentifier": "t_type$_t_address_$",
                            "typeString": "type(address)"
                          },
                          "typeName": {
                            "id": 24484,
                            "name": "address",
                            "nodeType": "ElementaryTypeName",
                            "src": "14757:7:12",
                            "typeDescriptions": {}
                          }
                        },
                        "id": 24487,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "typeConversion",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "14757:10:12",
                        "tryCall": false,
                        "typeDescriptions": {
                          "typeIdentifier": "t_address_payable",
                          "typeString": "address payable"
                        }
                      },
                      {
                        "id": 24488,
                        "name": "tokenId",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 24454,
                        "src": "14769:7:12",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address_payable",
                          "typeString": "address payable"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      ],
                      "id": 24483,
                      "name": "_approve",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 24634,
                      "src": "14748:8:12",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_nonpayable$_t_address_$_t_uint256_$returns$__$",
                        "typeString": "function (address,uint256)"
                      }
                    },
                    "id": 24489,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "14748:29:12",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 24490,
                  "nodeType": "ExpressionStatement",
                  "src": "14748:29:12"
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "id": 24495,
                        "name": "tokenId",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 24454,
                        "src": "14815:7:12",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      ],
                      "expression": {
                        "baseExpression": {
                          "id": 24491,
                          "name": "_holderTokens",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 23725,
                          "src": "14788:13:12",
                          "typeDescriptions": {
                            "typeIdentifier": "t_mapping$_t_address_$_t_struct$_UintSet_$26088_storage_$",
                            "typeString": "mapping(address => struct EnumerableSetUpgradeable.UintSet storage ref)"
                          }
                        },
                        "id": 24493,
                        "indexExpression": {
                          "id": 24492,
                          "name": "from",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 24450,
                          "src": "14802:4:12",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "isConstant": false,
                        "isLValue": true,
                        "isPure": false,
                        "lValueRequested": false,
                        "nodeType": "IndexAccess",
                        "src": "14788:19:12",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_UintSet_$26088_storage",
                          "typeString": "struct EnumerableSetUpgradeable.UintSet storage ref"
                        }
                      },
                      "id": 24494,
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "remove",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 26128,
                      "src": "14788:26:12",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_nonpayable$_t_struct$_UintSet_$26088_storage_ptr_$_t_uint256_$returns$_t_bool_$bound_to$_t_struct$_UintSet_$26088_storage_ptr_$",
                        "typeString": "function (struct EnumerableSetUpgradeable.UintSet storage pointer,uint256) returns (bool)"
                      }
                    },
                    "id": 24496,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "14788:35:12",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "id": 24497,
                  "nodeType": "ExpressionStatement",
                  "src": "14788:35:12"
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "id": 24502,
                        "name": "tokenId",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 24454,
                        "src": "14855:7:12",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      ],
                      "expression": {
                        "baseExpression": {
                          "id": 24498,
                          "name": "_holderTokens",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 23725,
                          "src": "14833:13:12",
                          "typeDescriptions": {
                            "typeIdentifier": "t_mapping$_t_address_$_t_struct$_UintSet_$26088_storage_$",
                            "typeString": "mapping(address => struct EnumerableSetUpgradeable.UintSet storage ref)"
                          }
                        },
                        "id": 24500,
                        "indexExpression": {
                          "id": 24499,
                          "name": "to",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 24452,
                          "src": "14847:2:12",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "isConstant": false,
                        "isLValue": true,
                        "isPure": false,
                        "lValueRequested": false,
                        "nodeType": "IndexAccess",
                        "src": "14833:17:12",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_UintSet_$26088_storage",
                          "typeString": "struct EnumerableSetUpgradeable.UintSet storage ref"
                        }
                      },
                      "id": 24501,
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "add",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 26108,
                      "src": "14833:21:12",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_nonpayable$_t_struct$_UintSet_$26088_storage_ptr_$_t_uint256_$returns$_t_bool_$bound_to$_t_struct$_UintSet_$26088_storage_ptr_$",
                        "typeString": "function (struct EnumerableSetUpgradeable.UintSet storage pointer,uint256) returns (bool)"
                      }
                    },
                    "id": 24503,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "14833:30:12",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "id": 24504,
                  "nodeType": "ExpressionStatement",
                  "src": "14833:30:12"
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "id": 24508,
                        "name": "tokenId",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 24454,
                        "src": "14891:7:12",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      {
                        "id": 24509,
                        "name": "to",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 24452,
                        "src": "14900:2:12",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      ],
                      "expression": {
                        "id": 24505,
                        "name": "_tokenOwners",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 23727,
                        "src": "14874:12:12",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_UintToAddressMap_$25465_storage",
                          "typeString": "struct EnumerableMapUpgradeable.UintToAddressMap storage ref"
                        }
                      },
                      "id": 24507,
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "set",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 25497,
                      "src": "14874:16:12",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_nonpayable$_t_struct$_UintToAddressMap_$25465_storage_ptr_$_t_uint256_$_t_address_$returns$_t_bool_$bound_to$_t_struct$_UintToAddressMap_$25465_storage_ptr_$",
                        "typeString": "function (struct EnumerableMapUpgradeable.UintToAddressMap storage pointer,uint256,address) returns (bool)"
                      }
                    },
                    "id": 24510,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "14874:29:12",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "id": 24511,
                  "nodeType": "ExpressionStatement",
                  "src": "14874:29:12"
                },
                {
                  "eventCall": {
                    "arguments": [
                      {
                        "id": 24513,
                        "name": "from",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 24450,
                        "src": "14928:4:12",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "id": 24514,
                        "name": "to",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 24452,
                        "src": "14934:2:12",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "id": 24515,
                        "name": "tokenId",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 24454,
                        "src": "14938:7:12",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      ],
                      "id": 24512,
                      "name": "Transfer",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 24741,
                      "src": "14919:8:12",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_event_nonpayable$_t_address_$_t_address_$_t_uint256_$returns$__$",
                        "typeString": "function (address,address,uint256)"
                      }
                    },
                    "id": 24516,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "14919:27:12",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 24517,
                  "nodeType": "EmitStatement",
                  "src": "14914:32:12"
                }
              ]
            },
            "documentation": {
              "id": 24448,
              "nodeType": "StructuredDocumentation",
              "src": "14040:313:12",
              "text": " @dev Transfers `tokenId` from `from` to `to`.\n  As opposed to {transferFrom}, this imposes no restrictions on msg.sender.\n Requirements:\n - `to` cannot be the zero address.\n - `tokenId` token must be owned by `from`.\n Emits a {Transfer} event."
            },
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "_transfer",
            "parameters": {
              "id": 24455,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 24450,
                  "mutability": "mutable",
                  "name": "from",
                  "nodeType": "VariableDeclaration",
                  "scope": 24519,
                  "src": "14377:12:12",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 24449,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "14377:7:12",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 24452,
                  "mutability": "mutable",
                  "name": "to",
                  "nodeType": "VariableDeclaration",
                  "scope": 24519,
                  "src": "14391:10:12",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 24451,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "14391:7:12",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 24454,
                  "mutability": "mutable",
                  "name": "tokenId",
                  "nodeType": "VariableDeclaration",
                  "scope": 24519,
                  "src": "14403:15:12",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 24453,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "14403:7:12",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "14376:43:12"
            },
            "returnParameters": {
              "id": 24456,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "14437:0:12"
            },
            "scope": 24650,
            "stateMutability": "nonpayable",
            "virtual": true,
            "visibility": "internal"
          },
          {
            "id": 24541,
            "nodeType": "FunctionDefinition",
            "src": "15100:212:12",
            "body": {
              "id": 24540,
              "nodeType": "Block",
              "src": "15181:131:12",
              "statements": [
                {
                  "expression": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "id": 24529,
                            "name": "tokenId",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 24522,
                            "src": "15207:7:12",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          }
                        ],
                        "expression": {
                          "argumentTypes": [
                            {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          ],
                          "id": 24528,
                          "name": "_exists",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 24233,
                          "src": "15199:7:12",
                          "typeDescriptions": {
                            "typeIdentifier": "t_function_internal_view$_t_uint256_$returns$_t_bool_$",
                            "typeString": "function (uint256) view returns (bool)"
                          }
                        },
                        "id": 24530,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "functionCall",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "15199:16:12",
                        "tryCall": false,
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      {
                        "hexValue": "4552433732314d657461646174613a2055524920736574206f66206e6f6e6578697374656e7420746f6b656e",
                        "id": 24531,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "string",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "15217:46:12",
                        "typeDescriptions": {
                          "typeIdentifier": "t_stringliteral_94be4a260caaeac1b145f03ffa2e70bc612b64982d04f24073aaf3a5f9009978",
                          "typeString": "literal_string \"ERC721Metadata: URI set of nonexistent token\""
                        },
                        "value": "ERC721Metadata: URI set of nonexistent token"
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        {
                          "typeIdentifier": "t_stringliteral_94be4a260caaeac1b145f03ffa2e70bc612b64982d04f24073aaf3a5f9009978",
                          "typeString": "literal_string \"ERC721Metadata: URI set of nonexistent token\""
                        }
                      ],
                      "id": 24527,
                      "name": "require",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        -18,
                        -18
                      ],
                      "referencedDeclaration": -18,
                      "src": "15191:7:12",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                        "typeString": "function (bool,string memory) pure"
                      }
                    },
                    "id": 24532,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "15191:73:12",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 24533,
                  "nodeType": "ExpressionStatement",
                  "src": "15191:73:12"
                },
                {
                  "expression": {
                    "id": 24538,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "baseExpression": {
                        "id": 24534,
                        "name": "_tokenURIs",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 23745,
                        "src": "15274:10:12",
                        "typeDescriptions": {
                          "typeIdentifier": "t_mapping$_t_uint256_$_t_string_storage_$",
                          "typeString": "mapping(uint256 => string storage ref)"
                        }
                      },
                      "id": 24536,
                      "indexExpression": {
                        "id": 24535,
                        "name": "tokenId",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 24522,
                        "src": "15285:7:12",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": true,
                      "nodeType": "IndexAccess",
                      "src": "15274:19:12",
                      "typeDescriptions": {
                        "typeIdentifier": "t_string_storage",
                        "typeString": "string storage ref"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "id": 24537,
                      "name": "_tokenURI",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 24524,
                      "src": "15296:9:12",
                      "typeDescriptions": {
                        "typeIdentifier": "t_string_memory_ptr",
                        "typeString": "string memory"
                      }
                    },
                    "src": "15274:31:12",
                    "typeDescriptions": {
                      "typeIdentifier": "t_string_storage",
                      "typeString": "string storage ref"
                    }
                  },
                  "id": 24539,
                  "nodeType": "ExpressionStatement",
                  "src": "15274:31:12"
                }
              ]
            },
            "documentation": {
              "id": 24520,
              "nodeType": "StructuredDocumentation",
              "src": "14959:136:12",
              "text": " @dev Sets `_tokenURI` as the tokenURI of `tokenId`.\n Requirements:\n - `tokenId` must exist."
            },
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "_setTokenURI",
            "parameters": {
              "id": 24525,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 24522,
                  "mutability": "mutable",
                  "name": "tokenId",
                  "nodeType": "VariableDeclaration",
                  "scope": 24541,
                  "src": "15122:15:12",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 24521,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "15122:7:12",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 24524,
                  "mutability": "mutable",
                  "name": "_tokenURI",
                  "nodeType": "VariableDeclaration",
                  "scope": 24541,
                  "src": "15139:23:12",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_string_memory_ptr",
                    "typeString": "string"
                  },
                  "typeName": {
                    "id": 24523,
                    "name": "string",
                    "nodeType": "ElementaryTypeName",
                    "src": "15139:6:12",
                    "typeDescriptions": {
                      "typeIdentifier": "t_string_storage_ptr",
                      "typeString": "string"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "15121:42:12"
            },
            "returnParameters": {
              "id": 24526,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "15181:0:12"
            },
            "scope": 24650,
            "stateMutability": "nonpayable",
            "virtual": true,
            "visibility": "internal"
          },
          {
            "id": 24552,
            "nodeType": "FunctionDefinition",
            "src": "15535:98:12",
            "body": {
              "id": 24551,
              "nodeType": "Block",
              "src": "15597:36:12",
              "statements": [
                {
                  "expression": {
                    "id": 24549,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "id": 24547,
                      "name": "_baseURI",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 23747,
                      "src": "15607:8:12",
                      "typeDescriptions": {
                        "typeIdentifier": "t_string_storage",
                        "typeString": "string storage ref"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "id": 24548,
                      "name": "baseURI_",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 24544,
                      "src": "15618:8:12",
                      "typeDescriptions": {
                        "typeIdentifier": "t_string_memory_ptr",
                        "typeString": "string memory"
                      }
                    },
                    "src": "15607:19:12",
                    "typeDescriptions": {
                      "typeIdentifier": "t_string_storage",
                      "typeString": "string storage ref"
                    }
                  },
                  "id": 24550,
                  "nodeType": "ExpressionStatement",
                  "src": "15607:19:12"
                }
              ]
            },
            "documentation": {
              "id": 24542,
              "nodeType": "StructuredDocumentation",
              "src": "15318:212:12",
              "text": " @dev Internal function to set the base URI for all token IDs. It is\n automatically added as a prefix to the value returned in {tokenURI},\n or to the token ID if {tokenURI} is empty."
            },
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "_setBaseURI",
            "parameters": {
              "id": 24545,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 24544,
                  "mutability": "mutable",
                  "name": "baseURI_",
                  "nodeType": "VariableDeclaration",
                  "scope": 24552,
                  "src": "15556:22:12",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_string_memory_ptr",
                    "typeString": "string"
                  },
                  "typeName": {
                    "id": 24543,
                    "name": "string",
                    "nodeType": "ElementaryTypeName",
                    "src": "15556:6:12",
                    "typeDescriptions": {
                      "typeIdentifier": "t_string_storage_ptr",
                      "typeString": "string"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "15555:24:12"
            },
            "returnParameters": {
              "id": 24546,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "15597:0:12"
            },
            "scope": 24650,
            "stateMutability": "nonpayable",
            "virtual": true,
            "visibility": "internal"
          },
          {
            "id": 24610,
            "nodeType": "FunctionDefinition",
            "src": "16186:600:12",
            "body": {
              "id": 24609,
              "nodeType": "Block",
              "src": "16316:470:12",
              "statements": [
                {
                  "condition": {
                    "id": 24569,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "nodeType": "UnaryOperation",
                    "operator": "!",
                    "prefix": true,
                    "src": "16330:16:12",
                    "subExpression": {
                      "arguments": [],
                      "expression": {
                        "argumentTypes": [],
                        "expression": {
                          "id": 24566,
                          "name": "to",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 24557,
                          "src": "16331:2:12",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "id": 24567,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "isContract",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": 24862,
                        "src": "16331:13:12",
                        "typeDescriptions": {
                          "typeIdentifier": "t_function_internal_view$_t_address_$returns$_t_bool_$bound_to$_t_address_$",
                          "typeString": "function (address) view returns (bool)"
                        }
                      },
                      "id": 24568,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "kind": "functionCall",
                      "lValueRequested": false,
                      "names": [],
                      "nodeType": "FunctionCall",
                      "src": "16331:15:12",
                      "tryCall": false,
                      "typeDescriptions": {
                        "typeIdentifier": "t_bool",
                        "typeString": "bool"
                      }
                    },
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "id": 24573,
                  "nodeType": "IfStatement",
                  "src": "16326:58:12",
                  "trueBody": {
                    "id": 24572,
                    "nodeType": "Block",
                    "src": "16348:36:12",
                    "statements": [
                      {
                        "expression": {
                          "hexValue": "74727565",
                          "id": 24570,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "kind": "bool",
                          "lValueRequested": false,
                          "nodeType": "Literal",
                          "src": "16369:4:12",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          },
                          "value": "true"
                        },
                        "functionReturnParameters": 24565,
                        "id": 24571,
                        "nodeType": "Return",
                        "src": "16362:11:12"
                      }
                    ]
                  }
                },
                {
                  "assignments": [
                    24575
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 24575,
                      "mutability": "mutable",
                      "name": "returndata",
                      "nodeType": "VariableDeclaration",
                      "scope": 24609,
                      "src": "16393:23:12",
                      "stateVariable": false,
                      "storageLocation": "memory",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bytes_memory_ptr",
                        "typeString": "bytes"
                      },
                      "typeName": {
                        "id": 24574,
                        "name": "bytes",
                        "nodeType": "ElementaryTypeName",
                        "src": "16393:5:12",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes_storage_ptr",
                          "typeString": "bytes"
                        }
                      },
                      "visibility": "internal"
                    }
                  ],
                  "id": 24593,
                  "initialValue": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "expression": {
                              "expression": {
                                "arguments": [
                                  {
                                    "id": 24581,
                                    "name": "to",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 24557,
                                    "src": "16498:2:12",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_address",
                                      "typeString": "address"
                                    }
                                  }
                                ],
                                "expression": {
                                  "argumentTypes": [
                                    {
                                      "typeIdentifier": "t_address",
                                      "typeString": "address"
                                    }
                                  ],
                                  "id": 24580,
                                  "name": "IERC721ReceiverUpgradeable",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 24726,
                                  "src": "16471:26:12",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_type$_t_contract$_IERC721ReceiverUpgradeable_$24726_$",
                                    "typeString": "type(contract IERC721ReceiverUpgradeable)"
                                  }
                                },
                                "id": 24582,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "kind": "typeConversion",
                                "lValueRequested": false,
                                "names": [],
                                "nodeType": "FunctionCall",
                                "src": "16471:30:12",
                                "tryCall": false,
                                "typeDescriptions": {
                                  "typeIdentifier": "t_contract$_IERC721ReceiverUpgradeable_$24726",
                                  "typeString": "contract IERC721ReceiverUpgradeable"
                                }
                              },
                              "id": 24583,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "memberName": "onERC721Received",
                              "nodeType": "MemberAccess",
                              "referencedDeclaration": 24725,
                              "src": "16471:47:12",
                              "typeDescriptions": {
                                "typeIdentifier": "t_function_external_nonpayable$_t_address_$_t_address_$_t_uint256_$_t_bytes_memory_ptr_$returns$_t_bytes4_$",
                                "typeString": "function (address,address,uint256,bytes memory) external returns (bytes4)"
                              }
                            },
                            "id": 24584,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberName": "selector",
                            "nodeType": "MemberAccess",
                            "src": "16471:56:12",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bytes4",
                              "typeString": "bytes4"
                            }
                          },
                          {
                            "arguments": [],
                            "expression": {
                              "argumentTypes": [],
                              "id": 24585,
                              "name": "_msgSender",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 25115,
                              "src": "16541:10:12",
                              "typeDescriptions": {
                                "typeIdentifier": "t_function_internal_view$__$returns$_t_address_payable_$",
                                "typeString": "function () view returns (address payable)"
                              }
                            },
                            "id": 24586,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "kind": "functionCall",
                            "lValueRequested": false,
                            "names": [],
                            "nodeType": "FunctionCall",
                            "src": "16541:12:12",
                            "tryCall": false,
                            "typeDescriptions": {
                              "typeIdentifier": "t_address_payable",
                              "typeString": "address payable"
                            }
                          },
                          {
                            "id": 24587,
                            "name": "from",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 24555,
                            "src": "16567:4:12",
                            "typeDescriptions": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          },
                          {
                            "id": 24588,
                            "name": "tokenId",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 24559,
                            "src": "16585:7:12",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          {
                            "id": 24589,
                            "name": "_data",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 24561,
                            "src": "16606:5:12",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bytes_memory_ptr",
                              "typeString": "bytes memory"
                            }
                          }
                        ],
                        "expression": {
                          "argumentTypes": [
                            {
                              "typeIdentifier": "t_bytes4",
                              "typeString": "bytes4"
                            },
                            {
                              "typeIdentifier": "t_address_payable",
                              "typeString": "address payable"
                            },
                            {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            },
                            {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            },
                            {
                              "typeIdentifier": "t_bytes_memory_ptr",
                              "typeString": "bytes memory"
                            }
                          ],
                          "expression": {
                            "id": 24578,
                            "name": "abi",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": -1,
                            "src": "16435:3:12",
                            "typeDescriptions": {
                              "typeIdentifier": "t_magic_abi",
                              "typeString": "abi"
                            }
                          },
                          "id": 24579,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "lValueRequested": false,
                          "memberName": "encodeWithSelector",
                          "nodeType": "MemberAccess",
                          "src": "16435:22:12",
                          "typeDescriptions": {
                            "typeIdentifier": "t_function_abiencodewithselector_pure$_t_bytes4_$returns$_t_bytes_memory_ptr_$",
                            "typeString": "function (bytes4) pure returns (bytes memory)"
                          }
                        },
                        "id": 24590,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "functionCall",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "16435:186:12",
                        "tryCall": false,
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes_memory_ptr",
                          "typeString": "bytes memory"
                        }
                      },
                      {
                        "hexValue": "4552433732313a207472616e7366657220746f206e6f6e20455243373231526563656976657220696d706c656d656e746572",
                        "id": 24591,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "string",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "16623:52:12",
                        "typeDescriptions": {
                          "typeIdentifier": "t_stringliteral_1e766a06da43a53d0f4c380e06e5a342e14d5af1bf8501996c844905530ca84e",
                          "typeString": "literal_string \"ERC721: transfer to non ERC721Receiver implementer\""
                        },
                        "value": "ERC721: transfer to non ERC721Receiver implementer"
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bytes_memory_ptr",
                          "typeString": "bytes memory"
                        },
                        {
                          "typeIdentifier": "t_stringliteral_1e766a06da43a53d0f4c380e06e5a342e14d5af1bf8501996c844905530ca84e",
                          "typeString": "literal_string \"ERC721: transfer to non ERC721Receiver implementer\""
                        }
                      ],
                      "expression": {
                        "id": 24576,
                        "name": "to",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 24557,
                        "src": "16419:2:12",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      "id": 24577,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "functionCall",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 24933,
                      "src": "16419:15:12",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_nonpayable$_t_address_$_t_bytes_memory_ptr_$_t_string_memory_ptr_$returns$_t_bytes_memory_ptr_$bound_to$_t_address_$",
                        "typeString": "function (address,bytes memory,string memory) returns (bytes memory)"
                      }
                    },
                    "id": 24592,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "16419:257:12",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes_memory_ptr",
                      "typeString": "bytes memory"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "16393:283:12"
                },
                {
                  "assignments": [
                    24595
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 24595,
                      "mutability": "mutable",
                      "name": "retval",
                      "nodeType": "VariableDeclaration",
                      "scope": 24609,
                      "src": "16686:13:12",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bytes4",
                        "typeString": "bytes4"
                      },
                      "typeName": {
                        "id": 24594,
                        "name": "bytes4",
                        "nodeType": "ElementaryTypeName",
                        "src": "16686:6:12",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes4",
                          "typeString": "bytes4"
                        }
                      },
                      "visibility": "internal"
                    }
                  ],
                  "id": 24603,
                  "initialValue": {
                    "arguments": [
                      {
                        "id": 24598,
                        "name": "returndata",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 24575,
                        "src": "16713:10:12",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes_memory_ptr",
                          "typeString": "bytes memory"
                        }
                      },
                      {
                        "components": [
                          {
                            "id": 24600,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "lValueRequested": false,
                            "nodeType": "ElementaryTypeNameExpression",
                            "src": "16726:6:12",
                            "typeDescriptions": {
                              "typeIdentifier": "t_type$_t_bytes4_$",
                              "typeString": "type(bytes4)"
                            },
                            "typeName": {
                              "id": 24599,
                              "name": "bytes4",
                              "nodeType": "ElementaryTypeName",
                              "src": "16726:6:12",
                              "typeDescriptions": {}
                            }
                          }
                        ],
                        "id": 24601,
                        "isConstant": false,
                        "isInlineArray": false,
                        "isLValue": false,
                        "isPure": true,
                        "lValueRequested": false,
                        "nodeType": "TupleExpression",
                        "src": "16725:8:12",
                        "typeDescriptions": {
                          "typeIdentifier": "t_type$_t_bytes4_$",
                          "typeString": "type(bytes4)"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bytes_memory_ptr",
                          "typeString": "bytes memory"
                        },
                        {
                          "typeIdentifier": "t_type$_t_bytes4_$",
                          "typeString": "type(bytes4)"
                        }
                      ],
                      "expression": {
                        "id": 24596,
                        "name": "abi",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": -1,
                        "src": "16702:3:12",
                        "typeDescriptions": {
                          "typeIdentifier": "t_magic_abi",
                          "typeString": "abi"
                        }
                      },
                      "id": 24597,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "lValueRequested": false,
                      "memberName": "decode",
                      "nodeType": "MemberAccess",
                      "src": "16702:10:12",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_abidecode_pure$__$returns$__$",
                        "typeString": "function () pure"
                      }
                    },
                    "id": 24602,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "16702:32:12",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes4",
                      "typeString": "bytes4"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "16686:48:12"
                },
                {
                  "expression": {
                    "components": [
                      {
                        "commonType": {
                          "typeIdentifier": "t_bytes4",
                          "typeString": "bytes4"
                        },
                        "id": 24606,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftExpression": {
                          "id": 24604,
                          "name": "retval",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 24595,
                          "src": "16752:6:12",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bytes4",
                            "typeString": "bytes4"
                          }
                        },
                        "nodeType": "BinaryOperation",
                        "operator": "==",
                        "rightExpression": {
                          "id": 24605,
                          "name": "_ERC721_RECEIVED",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 23721,
                          "src": "16762:16:12",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bytes4",
                            "typeString": "bytes4"
                          }
                        },
                        "src": "16752:26:12",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      }
                    ],
                    "id": 24607,
                    "isConstant": false,
                    "isInlineArray": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "nodeType": "TupleExpression",
                    "src": "16751:28:12",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "functionReturnParameters": 24565,
                  "id": 24608,
                  "nodeType": "Return",
                  "src": "16744:35:12"
                }
              ]
            },
            "documentation": {
              "id": 24553,
              "nodeType": "StructuredDocumentation",
              "src": "15639:542:12",
              "text": " @dev Internal function to invoke {IERC721Receiver-onERC721Received} on a target address.\n The call is not executed if the target address is not a contract.\n @param from address representing the previous owner of the given token ID\n @param to target address that will receive the tokens\n @param tokenId uint256 ID of the token to be transferred\n @param _data bytes optional data to send along with the call\n @return bool whether the call correctly returned the expected magic value"
            },
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "_checkOnERC721Received",
            "parameters": {
              "id": 24562,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 24555,
                  "mutability": "mutable",
                  "name": "from",
                  "nodeType": "VariableDeclaration",
                  "scope": 24610,
                  "src": "16218:12:12",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 24554,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "16218:7:12",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 24557,
                  "mutability": "mutable",
                  "name": "to",
                  "nodeType": "VariableDeclaration",
                  "scope": 24610,
                  "src": "16232:10:12",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 24556,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "16232:7:12",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 24559,
                  "mutability": "mutable",
                  "name": "tokenId",
                  "nodeType": "VariableDeclaration",
                  "scope": 24610,
                  "src": "16244:15:12",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 24558,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "16244:7:12",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 24561,
                  "mutability": "mutable",
                  "name": "_data",
                  "nodeType": "VariableDeclaration",
                  "scope": 24610,
                  "src": "16261:18:12",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes_memory_ptr",
                    "typeString": "bytes"
                  },
                  "typeName": {
                    "id": 24560,
                    "name": "bytes",
                    "nodeType": "ElementaryTypeName",
                    "src": "16261:5:12",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes_storage_ptr",
                      "typeString": "bytes"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "16217:63:12"
            },
            "returnParameters": {
              "id": 24565,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 24564,
                  "mutability": "mutable",
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 24610,
                  "src": "16306:4:12",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bool",
                    "typeString": "bool"
                  },
                  "typeName": {
                    "id": 24563,
                    "name": "bool",
                    "nodeType": "ElementaryTypeName",
                    "src": "16306:4:12",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "16305:6:12"
            },
            "scope": 24650,
            "stateMutability": "nonpayable",
            "virtual": false,
            "visibility": "private"
          },
          {
            "id": 24634,
            "nodeType": "FunctionDefinition",
            "src": "16898:200:12",
            "body": {
              "id": 24633,
              "nodeType": "Block",
              "src": "16962:136:12",
              "statements": [
                {
                  "expression": {
                    "id": 24622,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "baseExpression": {
                        "id": 24618,
                        "name": "_tokenApprovals",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 23731,
                        "src": "16972:15:12",
                        "typeDescriptions": {
                          "typeIdentifier": "t_mapping$_t_uint256_$_t_address_$",
                          "typeString": "mapping(uint256 => address)"
                        }
                      },
                      "id": 24620,
                      "indexExpression": {
                        "id": 24619,
                        "name": "tokenId",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 24615,
                        "src": "16988:7:12",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": true,
                      "nodeType": "IndexAccess",
                      "src": "16972:24:12",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "id": 24621,
                      "name": "to",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 24613,
                      "src": "16999:2:12",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      }
                    },
                    "src": "16972:29:12",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "id": 24623,
                  "nodeType": "ExpressionStatement",
                  "src": "16972:29:12"
                },
                {
                  "eventCall": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "id": 24627,
                            "name": "tokenId",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 24615,
                            "src": "17051:7:12",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          }
                        ],
                        "expression": {
                          "argumentTypes": [
                            {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          ],
                          "expression": {
                            "id": 24625,
                            "name": "ERC721Upgradeable",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 24650,
                            "src": "17025:17:12",
                            "typeDescriptions": {
                              "typeIdentifier": "t_type$_t_contract$_ERC721Upgradeable_$24650_$",
                              "typeString": "type(contract ERC721Upgradeable)"
                            }
                          },
                          "id": 24626,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberName": "ownerOf",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": 23850,
                          "src": "17025:25:12",
                          "typeDescriptions": {
                            "typeIdentifier": "t_function_internal_view$_t_uint256_$returns$_t_address_$",
                            "typeString": "function (uint256) view returns (address)"
                          }
                        },
                        "id": 24628,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "functionCall",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "17025:34:12",
                        "tryCall": false,
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "id": 24629,
                        "name": "to",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 24613,
                        "src": "17061:2:12",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "id": 24630,
                        "name": "tokenId",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 24615,
                        "src": "17065:7:12",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      ],
                      "id": 24624,
                      "name": "Approval",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 24750,
                      "src": "17016:8:12",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_event_nonpayable$_t_address_$_t_address_$_t_uint256_$returns$__$",
                        "typeString": "function (address,address,uint256)"
                      }
                    },
                    "id": 24631,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "17016:57:12",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 24632,
                  "nodeType": "EmitStatement",
                  "src": "17011:62:12"
                }
              ]
            },
            "documentation": {
              "id": 24611,
              "nodeType": "StructuredDocumentation",
              "src": "16792:101:12",
              "text": " @dev Approve `to` to operate on `tokenId`\n Emits an {Approval} event."
            },
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "_approve",
            "parameters": {
              "id": 24616,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 24613,
                  "mutability": "mutable",
                  "name": "to",
                  "nodeType": "VariableDeclaration",
                  "scope": 24634,
                  "src": "16916:10:12",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 24612,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "16916:7:12",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 24615,
                  "mutability": "mutable",
                  "name": "tokenId",
                  "nodeType": "VariableDeclaration",
                  "scope": 24634,
                  "src": "16928:15:12",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 24614,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "16928:7:12",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "16915:29:12"
            },
            "returnParameters": {
              "id": 24617,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "16962:0:12"
            },
            "scope": 24650,
            "stateMutability": "nonpayable",
            "virtual": true,
            "visibility": "internal"
          },
          {
            "id": 24645,
            "nodeType": "FunctionDefinition",
            "src": "17694:93:12",
            "body": {
              "id": 24644,
              "nodeType": "Block",
              "src": "17784:3:12",
              "statements": []
            },
            "documentation": {
              "id": 24635,
              "nodeType": "StructuredDocumentation",
              "src": "17104:585:12",
              "text": " @dev Hook that is called before any token transfer. This includes minting\n and burning.\n Calling conditions:\n - When `from` and `to` are both non-zero, ``from``'s `tokenId` will be\n transferred to `to`.\n - When `from` is zero, `tokenId` will be minted for `to`.\n - When `to` is zero, ``from``'s `tokenId` will be burned.\n - `from` cannot be the zero address.\n - `to` cannot be the zero address.\n To learn more about hooks, head to xref:ROOT:extending-contracts.adoc#using-hooks[Using Hooks]."
            },
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "_beforeTokenTransfer",
            "parameters": {
              "id": 24642,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 24637,
                  "mutability": "mutable",
                  "name": "from",
                  "nodeType": "VariableDeclaration",
                  "scope": 24645,
                  "src": "17724:12:12",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 24636,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "17724:7:12",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 24639,
                  "mutability": "mutable",
                  "name": "to",
                  "nodeType": "VariableDeclaration",
                  "scope": 24645,
                  "src": "17738:10:12",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 24638,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "17738:7:12",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 24641,
                  "mutability": "mutable",
                  "name": "tokenId",
                  "nodeType": "VariableDeclaration",
                  "scope": 24645,
                  "src": "17750:15:12",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 24640,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "17750:7:12",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "17723:43:12"
            },
            "returnParameters": {
              "id": 24643,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "17784:0:12"
            },
            "scope": 24650,
            "stateMutability": "nonpayable",
            "virtual": true,
            "visibility": "internal"
          },
          {
            "id": 24649,
            "nodeType": "VariableDeclaration",
            "src": "17792:25:12",
            "constant": false,
            "mutability": "mutable",
            "name": "__gap",
            "scope": 24650,
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_array$_t_uint256_$41_storage",
              "typeString": "uint256[41]"
            },
            "typeName": {
              "baseType": {
                "id": 24646,
                "name": "uint256",
                "nodeType": "ElementaryTypeName",
                "src": "17792:7:12",
                "typeDescriptions": {
                  "typeIdentifier": "t_uint256",
                  "typeString": "uint256"
                }
              },
              "id": 24648,
              "length": {
                "hexValue": "3431",
                "id": 24647,
                "isConstant": false,
                "isLValue": false,
                "isPure": true,
                "kind": "number",
                "lValueRequested": false,
                "nodeType": "Literal",
                "src": "17800:2:12",
                "typeDescriptions": {
                  "typeIdentifier": "t_rational_41_by_1",
                  "typeString": "int_const 41"
                },
                "value": "41"
              },
              "nodeType": "ArrayTypeName",
              "src": "17792:11:12",
              "typeDescriptions": {
                "typeIdentifier": "t_array$_t_uint256_$41_storage_ptr",
                "typeString": "uint256[41]"
              }
            },
            "visibility": "private"
          }
        ],
        "abstract": false,
        "baseContracts": [
          {
            "baseName": {
              "id": 23692,
              "name": "Initializable",
              "nodeType": "UserDefinedTypeName",
              "referencedDeclaration": 23676,
              "src": "762:13:12",
              "typeDescriptions": {
                "typeIdentifier": "t_contract$_Initializable_$23676",
                "typeString": "contract Initializable"
              }
            },
            "id": 23693,
            "nodeType": "InheritanceSpecifier",
            "src": "762:13:12"
          },
          {
            "baseName": {
              "id": 23694,
              "name": "ContextUpgradeable",
              "nodeType": "UserDefinedTypeName",
              "referencedDeclaration": 25131,
              "src": "777:18:12",
              "typeDescriptions": {
                "typeIdentifier": "t_contract$_ContextUpgradeable_$25131",
                "typeString": "contract ContextUpgradeable"
              }
            },
            "id": 23695,
            "nodeType": "InheritanceSpecifier",
            "src": "777:18:12"
          },
          {
            "baseName": {
              "id": 23696,
              "name": "ERC165Upgradeable",
              "nodeType": "UserDefinedTypeName",
              "referencedDeclaration": 23243,
              "src": "797:17:12",
              "typeDescriptions": {
                "typeIdentifier": "t_contract$_ERC165Upgradeable_$23243",
                "typeString": "contract ERC165Upgradeable"
              }
            },
            "id": 23697,
            "nodeType": "InheritanceSpecifier",
            "src": "797:17:12"
          },
          {
            "baseName": {
              "id": 23698,
              "name": "IERC721Upgradeable",
              "nodeType": "UserDefinedTypeName",
              "referencedDeclaration": 24842,
              "src": "816:18:12",
              "typeDescriptions": {
                "typeIdentifier": "t_contract$_IERC721Upgradeable_$24842",
                "typeString": "contract IERC721Upgradeable"
              }
            },
            "id": 23699,
            "nodeType": "InheritanceSpecifier",
            "src": "816:18:12"
          },
          {
            "baseName": {
              "id": 23700,
              "name": "IERC721MetadataUpgradeable",
              "nodeType": "UserDefinedTypeName",
              "referencedDeclaration": 24708,
              "src": "836:26:12",
              "typeDescriptions": {
                "typeIdentifier": "t_contract$_IERC721MetadataUpgradeable_$24708",
                "typeString": "contract IERC721MetadataUpgradeable"
              }
            },
            "id": 23701,
            "nodeType": "InheritanceSpecifier",
            "src": "836:26:12"
          },
          {
            "baseName": {
              "id": 23702,
              "name": "IERC721EnumerableUpgradeable",
              "nodeType": "UserDefinedTypeName",
              "referencedDeclaration": 24681,
              "src": "864:28:12",
              "typeDescriptions": {
                "typeIdentifier": "t_contract$_IERC721EnumerableUpgradeable_$24681",
                "typeString": "contract IERC721EnumerableUpgradeable"
              }
            },
            "id": 23703,
            "nodeType": "InheritanceSpecifier",
            "src": "864:28:12"
          }
        ],
        "contractDependencies": [
          23243,
          23255,
          23676,
          24681,
          24708,
          24842,
          25131
        ],
        "contractKind": "contract",
        "documentation": {
          "id": 23691,
          "nodeType": "StructuredDocumentation",
          "src": "607:124:12",
          "text": " @title ERC721 Non-Fungible Token Standard basic implementation\n @dev see https://eips.ethereum.org/EIPS/eip-721"
        },
        "fullyImplemented": true,
        "linearizedBaseContracts": [
          24650,
          24681,
          24708,
          24842,
          23243,
          23255,
          25131,
          23676
        ],
        "name": "ERC721Upgradeable",
        "scope": 24651
      }
    ],
    "license": "MIT"
  },
  "id": 12
}