{
  "contractName": "CreatorCore",
  "abi": [
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": false,
          "internalType": "address",
          "name": "extension",
          "type": "address"
        }
      ],
      "name": "ApproveTransferUpdated",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": false,
          "internalType": "address payable[]",
          "name": "receivers",
          "type": "address[]"
        },
        {
          "indexed": false,
          "internalType": "uint256[]",
          "name": "basisPoints",
          "type": "uint256[]"
        }
      ],
      "name": "DefaultRoyaltiesUpdated",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "internalType": "address",
          "name": "extension",
          "type": "address"
        },
        {
          "indexed": false,
          "internalType": "bool",
          "name": "enabled",
          "type": "bool"
        }
      ],
      "name": "ExtensionApproveTransferUpdated",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "internalType": "address",
          "name": "extension",
          "type": "address"
        },
        {
          "indexed": true,
          "internalType": "address",
          "name": "sender",
          "type": "address"
        }
      ],
      "name": "ExtensionBlacklisted",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "internalType": "address",
          "name": "extension",
          "type": "address"
        },
        {
          "indexed": true,
          "internalType": "address",
          "name": "sender",
          "type": "address"
        }
      ],
      "name": "ExtensionRegistered",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "internalType": "address",
          "name": "extension",
          "type": "address"
        },
        {
          "indexed": false,
          "internalType": "address payable[]",
          "name": "receivers",
          "type": "address[]"
        },
        {
          "indexed": false,
          "internalType": "uint256[]",
          "name": "basisPoints",
          "type": "uint256[]"
        }
      ],
      "name": "ExtensionRoyaltiesUpdated",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "internalType": "address",
          "name": "extension",
          "type": "address"
        },
        {
          "indexed": true,
          "internalType": "address",
          "name": "sender",
          "type": "address"
        }
      ],
      "name": "ExtensionUnregistered",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "internalType": "address",
          "name": "extension",
          "type": "address"
        },
        {
          "indexed": true,
          "internalType": "address",
          "name": "permissions",
          "type": "address"
        },
        {
          "indexed": true,
          "internalType": "address",
          "name": "sender",
          "type": "address"
        }
      ],
      "name": "MintPermissionsUpdated",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "internalType": "uint256",
          "name": "tokenId",
          "type": "uint256"
        },
        {
          "indexed": false,
          "internalType": "address payable[]",
          "name": "receivers",
          "type": "address[]"
        },
        {
          "indexed": false,
          "internalType": "uint256[]",
          "name": "basisPoints",
          "type": "uint256[]"
        }
      ],
      "name": "RoyaltiesUpdated",
      "type": "event"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "extension",
          "type": "address"
        }
      ],
      "name": "blacklistExtension",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "uint256",
          "name": "tokenId",
          "type": "uint256"
        }
      ],
      "name": "getFeeBps",
      "outputs": [
        {
          "internalType": "uint256[]",
          "name": "",
          "type": "uint256[]"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "uint256",
          "name": "tokenId",
          "type": "uint256"
        }
      ],
      "name": "getFeeRecipients",
      "outputs": [
        {
          "internalType": "address payable[]",
          "name": "",
          "type": "address[]"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "uint256",
          "name": "tokenId",
          "type": "uint256"
        }
      ],
      "name": "getFees",
      "outputs": [
        {
          "internalType": "address payable[]",
          "name": "",
          "type": "address[]"
        },
        {
          "internalType": "uint256[]",
          "name": "",
          "type": "uint256[]"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "uint256",
          "name": "tokenId",
          "type": "uint256"
        }
      ],
      "name": "getRoyalties",
      "outputs": [
        {
          "internalType": "address payable[]",
          "name": "",
          "type": "address[]"
        },
        {
          "internalType": "uint256[]",
          "name": "",
          "type": "uint256[]"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "extension",
          "type": "address"
        },
        {
          "internalType": "string",
          "name": "baseURI",
          "type": "string"
        }
      ],
      "name": "registerExtension",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "extension",
          "type": "address"
        },
        {
          "internalType": "string",
          "name": "baseURI",
          "type": "string"
        },
        {
          "internalType": "bool",
          "name": "baseURIIdentical",
          "type": "bool"
        }
      ],
      "name": "registerExtension",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "uint256",
          "name": "tokenId",
          "type": "uint256"
        },
        {
          "internalType": "uint256",
          "name": "value",
          "type": "uint256"
        }
      ],
      "name": "royaltyInfo",
      "outputs": [
        {
          "internalType": "address",
          "name": "",
          "type": "address"
        },
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "extension",
          "type": "address"
        }
      ],
      "name": "setApproveTransfer",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "string",
          "name": "uri",
          "type": "string"
        }
      ],
      "name": "setBaseTokenURI",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "string",
          "name": "uri",
          "type": "string"
        }
      ],
      "name": "setBaseTokenURIExtension",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "string",
          "name": "uri",
          "type": "string"
        },
        {
          "internalType": "bool",
          "name": "identical",
          "type": "bool"
        }
      ],
      "name": "setBaseTokenURIExtension",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "extension",
          "type": "address"
        },
        {
          "internalType": "address",
          "name": "permissions",
          "type": "address"
        }
      ],
      "name": "setMintPermissions",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "uint256",
          "name": "tokenId",
          "type": "uint256"
        },
        {
          "internalType": "address payable[]",
          "name": "receivers",
          "type": "address[]"
        },
        {
          "internalType": "uint256[]",
          "name": "basisPoints",
          "type": "uint256[]"
        }
      ],
      "name": "setRoyalties",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address payable[]",
          "name": "receivers",
          "type": "address[]"
        },
        {
          "internalType": "uint256[]",
          "name": "basisPoints",
          "type": "uint256[]"
        }
      ],
      "name": "setRoyalties",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "extension",
          "type": "address"
        },
        {
          "internalType": "address payable[]",
          "name": "receivers",
          "type": "address[]"
        },
        {
          "internalType": "uint256[]",
          "name": "basisPoints",
          "type": "uint256[]"
        }
      ],
      "name": "setRoyaltiesExtension",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "uint256",
          "name": "tokenId",
          "type": "uint256"
        },
        {
          "internalType": "string",
          "name": "uri",
          "type": "string"
        }
      ],
      "name": "setTokenURI",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "uint256[]",
          "name": "tokenIds",
          "type": "uint256[]"
        },
        {
          "internalType": "string[]",
          "name": "uris",
          "type": "string[]"
        }
      ],
      "name": "setTokenURI",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "uint256[]",
          "name": "tokenId",
          "type": "uint256[]"
        },
        {
          "internalType": "string[]",
          "name": "uri",
          "type": "string[]"
        }
      ],
      "name": "setTokenURIExtension",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "uint256",
          "name": "tokenId",
          "type": "uint256"
        },
        {
          "internalType": "string",
          "name": "uri",
          "type": "string"
        }
      ],
      "name": "setTokenURIExtension",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "string",
          "name": "prefix",
          "type": "string"
        }
      ],
      "name": "setTokenURIPrefix",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "string",
          "name": "prefix",
          "type": "string"
        }
      ],
      "name": "setTokenURIPrefixExtension",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "uint256",
          "name": "tokenId",
          "type": "uint256"
        }
      ],
      "name": "tokenExtension",
      "outputs": [
        {
          "internalType": "address",
          "name": "",
          "type": "address"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "extension",
          "type": "address"
        }
      ],
      "name": "unregisterExtension",
      "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": "getExtensions",
      "outputs": [
        {
          "internalType": "address[]",
          "name": "extensions",
          "type": "address[]"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "bool",
          "name": "enabled",
          "type": "bool"
        }
      ],
      "name": "setApproveTransferExtension",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "getApproveTransfer",
      "outputs": [
        {
          "internalType": "address",
          "name": "",
          "type": "address"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    }
  ],
  "metadata": "{\"compiler\":{\"version\":\"0.8.19+commit.7dd6d404\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"extension\",\"type\":\"address\"}],\"name\":\"ApproveTransferUpdated\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address payable[]\",\"name\":\"receivers\",\"type\":\"address[]\"},{\"indexed\":false,\"internalType\":\"uint256[]\",\"name\":\"basisPoints\",\"type\":\"uint256[]\"}],\"name\":\"DefaultRoyaltiesUpdated\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"extension\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"bool\",\"name\":\"enabled\",\"type\":\"bool\"}],\"name\":\"ExtensionApproveTransferUpdated\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"extension\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"}],\"name\":\"ExtensionBlacklisted\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"extension\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"}],\"name\":\"ExtensionRegistered\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"extension\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"address payable[]\",\"name\":\"receivers\",\"type\":\"address[]\"},{\"indexed\":false,\"internalType\":\"uint256[]\",\"name\":\"basisPoints\",\"type\":\"uint256[]\"}],\"name\":\"ExtensionRoyaltiesUpdated\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"extension\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"}],\"name\":\"ExtensionUnregistered\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"extension\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"permissions\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"}],\"name\":\"MintPermissionsUpdated\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"tokenId\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"address payable[]\",\"name\":\"receivers\",\"type\":\"address[]\"},{\"indexed\":false,\"internalType\":\"uint256[]\",\"name\":\"basisPoints\",\"type\":\"uint256[]\"}],\"name\":\"RoyaltiesUpdated\",\"type\":\"event\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"extension\",\"type\":\"address\"}],\"name\":\"blacklistExtension\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getApproveTransfer\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getExtensions\",\"outputs\":[{\"internalType\":\"address[]\",\"name\":\"extensions\",\"type\":\"address[]\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"tokenId\",\"type\":\"uint256\"}],\"name\":\"getFeeBps\",\"outputs\":[{\"internalType\":\"uint256[]\",\"name\":\"\",\"type\":\"uint256[]\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"tokenId\",\"type\":\"uint256\"}],\"name\":\"getFeeRecipients\",\"outputs\":[{\"internalType\":\"address payable[]\",\"name\":\"\",\"type\":\"address[]\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"tokenId\",\"type\":\"uint256\"}],\"name\":\"getFees\",\"outputs\":[{\"internalType\":\"address payable[]\",\"name\":\"\",\"type\":\"address[]\"},{\"internalType\":\"uint256[]\",\"name\":\"\",\"type\":\"uint256[]\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"tokenId\",\"type\":\"uint256\"}],\"name\":\"getRoyalties\",\"outputs\":[{\"internalType\":\"address payable[]\",\"name\":\"\",\"type\":\"address[]\"},{\"internalType\":\"uint256[]\",\"name\":\"\",\"type\":\"uint256[]\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"extension\",\"type\":\"address\"},{\"internalType\":\"string\",\"name\":\"baseURI\",\"type\":\"string\"}],\"name\":\"registerExtension\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"extension\",\"type\":\"address\"},{\"internalType\":\"string\",\"name\":\"baseURI\",\"type\":\"string\"},{\"internalType\":\"bool\",\"name\":\"baseURIIdentical\",\"type\":\"bool\"}],\"name\":\"registerExtension\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"tokenId\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"}],\"name\":\"royaltyInfo\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"extension\",\"type\":\"address\"}],\"name\":\"setApproveTransfer\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bool\",\"name\":\"enabled\",\"type\":\"bool\"}],\"name\":\"setApproveTransferExtension\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"string\",\"name\":\"uri\",\"type\":\"string\"}],\"name\":\"setBaseTokenURI\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"string\",\"name\":\"uri\",\"type\":\"string\"}],\"name\":\"setBaseTokenURIExtension\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"string\",\"name\":\"uri\",\"type\":\"string\"},{\"internalType\":\"bool\",\"name\":\"identical\",\"type\":\"bool\"}],\"name\":\"setBaseTokenURIExtension\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"extension\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"permissions\",\"type\":\"address\"}],\"name\":\"setMintPermissions\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"tokenId\",\"type\":\"uint256\"},{\"internalType\":\"address payable[]\",\"name\":\"receivers\",\"type\":\"address[]\"},{\"internalType\":\"uint256[]\",\"name\":\"basisPoints\",\"type\":\"uint256[]\"}],\"name\":\"setRoyalties\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address payable[]\",\"name\":\"receivers\",\"type\":\"address[]\"},{\"internalType\":\"uint256[]\",\"name\":\"basisPoints\",\"type\":\"uint256[]\"}],\"name\":\"setRoyalties\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"extension\",\"type\":\"address\"},{\"internalType\":\"address payable[]\",\"name\":\"receivers\",\"type\":\"address[]\"},{\"internalType\":\"uint256[]\",\"name\":\"basisPoints\",\"type\":\"uint256[]\"}],\"name\":\"setRoyaltiesExtension\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"tokenId\",\"type\":\"uint256\"},{\"internalType\":\"string\",\"name\":\"uri\",\"type\":\"string\"}],\"name\":\"setTokenURI\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256[]\",\"name\":\"tokenIds\",\"type\":\"uint256[]\"},{\"internalType\":\"string[]\",\"name\":\"uris\",\"type\":\"string[]\"}],\"name\":\"setTokenURI\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256[]\",\"name\":\"tokenId\",\"type\":\"uint256[]\"},{\"internalType\":\"string[]\",\"name\":\"uri\",\"type\":\"string[]\"}],\"name\":\"setTokenURIExtension\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"tokenId\",\"type\":\"uint256\"},{\"internalType\":\"string\",\"name\":\"uri\",\"type\":\"string\"}],\"name\":\"setTokenURIExtension\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"string\",\"name\":\"prefix\",\"type\":\"string\"}],\"name\":\"setTokenURIPrefix\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"string\",\"name\":\"prefix\",\"type\":\"string\"}],\"name\":\"setTokenURIPrefixExtension\",\"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\":[{\"internalType\":\"uint256\",\"name\":\"tokenId\",\"type\":\"uint256\"}],\"name\":\"tokenExtension\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"extension\",\"type\":\"address\"}],\"name\":\"unregisterExtension\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"}],\"devdoc\":{\"details\":\"Core creator implementation\",\"kind\":\"dev\",\"methods\":{\"blacklistExtension(address)\":{\"details\":\"blacklist an extension.  Can only be called by contract owner or admin. This function will destroy all ability to reference the metadata of any tokens created by the specified extension. It will also unregister the extension if needed. Returns True if removed, False if already removed.\"},\"getApproveTransfer()\":{\"details\":\"See {ICreatorCore-getApproveTransfer}.\"},\"getExtensions()\":{\"details\":\"See {ICreatorCore-getExtensions}.\"},\"getRoyalties(uint256)\":{\"details\":\"Get royalites of a token.  Returns list of receivers and basisPoints\"},\"registerExtension(address,string)\":{\"details\":\"add an extension.  Can only be called by contract owner or admin. extension address must point to a contract implementing ICreatorExtension. Returns True if newly added, False if already added.\"},\"registerExtension(address,string,bool)\":{\"details\":\"add an extension.  Can only be called by contract owner or admin. extension address must point to a contract implementing ICreatorExtension. Returns True if newly added, False if already added.\"},\"setApproveTransfer(address)\":{\"details\":\"Set the default approve transfer contract location.\"},\"setApproveTransferExtension(bool)\":{\"details\":\"See {ICreatorCore-setApproveTransferExtension}.\"},\"setBaseTokenURI(string)\":{\"details\":\"set the baseTokenURI for tokens with no extension.  Can only be called by owner/admin. For tokens with no uri configured, tokenURI will return \\\"uri+tokenId\\\"\"},\"setBaseTokenURIExtension(string)\":{\"details\":\"set the baseTokenURI of an extension.  Can only be called by extension.\"},\"setBaseTokenURIExtension(string,bool)\":{\"details\":\"set the baseTokenURI of an extension.  Can only be called by extension. For tokens with no uri configured, tokenURI will return \\\"uri+tokenId\\\"\"},\"setMintPermissions(address,address)\":{\"details\":\"set a permissions contract for an extension.  Used to control minting.\"},\"setRoyalties(address[],uint256[])\":{\"details\":\"Set default royalties\"},\"setRoyalties(uint256,address[],uint256[])\":{\"details\":\"Set royalties of a token\"},\"setRoyaltiesExtension(address,address[],uint256[])\":{\"details\":\"Set royalties of an extension\"},\"setTokenURI(uint256,string)\":{\"details\":\"set the tokenURI of a token with no extension.  Can only be called by owner/admin.\"},\"setTokenURI(uint256[],string[])\":{\"details\":\"set the tokenURI of multiple tokens with no extension.  Can only be called by owner/admin.\"},\"setTokenURIExtension(uint256,string)\":{\"details\":\"set the tokenURI of a token extension.  Can only be called by extension that minted token.\"},\"setTokenURIExtension(uint256[],string[])\":{\"details\":\"set the tokenURI of a token extension for multiple tokens.  Can only be called by extension that minted token.\"},\"setTokenURIPrefix(string)\":{\"details\":\"set the common prefix for tokens with no extension.  Can only be called by owner/admin. If configured, and a token has a uri set, tokenURI will return \\\"prefixURI+tokenURI\\\" Useful if you want to use ipfs/arweave\"},\"setTokenURIPrefixExtension(string)\":{\"details\":\"set the common prefix of an extension.  Can only be called by extension. If configured, and a token has a uri set, tokenURI will return \\\"prefixURI+tokenURI\\\" Useful if you want to use ipfs/arweave\"},\"supportsInterface(bytes4)\":{\"details\":\"See {IERC165-supportsInterface}.\"},\"tokenExtension(uint256)\":{\"details\":\"get the extension of a given token\"},\"unregisterExtension(address)\":{\"details\":\"add an extension.  Can only be called by contract owner or admin. Returns True if removed, False if already removed.\"}},\"stateVariables\":{\"_INTERFACE_ID_ROYALTIES_CREATORCORE\":{\"details\":\"CreatorCore  bytes4(keccak256('getRoyalties(uint256)')) == 0xbb3bafd6  => 0xbb3bafd6 = 0xbb3bafd6\"},\"_INTERFACE_ID_ROYALTIES_EIP2981\":{\"details\":\"EIP-2981 bytes4(keccak256(\\\"royaltyInfo(uint256,uint256)\\\")) == 0x2a55205a => 0x2a55205a = 0x2a55205a\"},\"_INTERFACE_ID_ROYALTIES_FOUNDATION\":{\"details\":\"Foundation  bytes4(keccak256('getFees(uint256)')) == 0xd5a06d4c  => 0xd5a06d4c = 0xd5a06d4c\"},\"_INTERFACE_ID_ROYALTIES_RARIBLE\":{\"details\":\"Rarible: RoyaltiesV1  bytes4(keccak256('getFeeRecipients(uint256)')) == 0xb9c4d9fb  bytes4(keccak256('getFeeBps(uint256)')) == 0x0ebd4c7f  => 0xb9c4d9fb ^ 0x0ebd4c7f = 0xb7799584\"}},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"project:/contracts/core/CreatorCore.sol\":\"CreatorCore\"},\"evmVersion\":\"paris\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"enabled\":true,\"runs\":25},\"remappings\":[]},\"sources\":{\"@openzeppelin/contracts-upgradeable/utils/AddressUpgradeable.sol\":{\"keccak256\":\"0x2edcb41c121abc510932e8d83ff8b82cf9cdde35e7c297622f5c29ef0af25183\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://72460c66cd1c3b1c11b863e0d8df0a1c56f37743019e468dc312c754f43e3b06\",\"dweb:/ipfs/QmPExYKiNb9PUsgktQBupPaM33kzDHxaYoVeJdLhv8s879\"]},\"@openzeppelin/contracts/security/ReentrancyGuard.sol\":{\"keccak256\":\"0x190dd6f8d592b7e4e930feb7f4313aeb8e1c4ad3154c27ce1cf6a512fc30d8cc\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://4ce8dfb62d0c4fa260d6eec8f1cd47f5f2a044e11bde5b31d18072fa6e7d9010\",\"dweb:/ipfs/QmTyFztU3tLEcEDnqqiaW4UJetqsU77LXc6pjc9oTXCK5u\"]},\"@openzeppelin/contracts/utils/Strings.sol\":{\"keccak256\":\"0xa4d1d62251f8574deb032a35fc948386a9b4de74b812d4f545a1ac120486b48a\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://8c969013129ba9e651a20735ef659fef6d8a1139ea3607bd4b26ddea2d645634\",\"dweb:/ipfs/QmVhVa6LGuzAcB8qgDtVHRkucn4ihj5UZr8xBLcJkP6ucb\"]},\"@openzeppelin/contracts/utils/introspection/ERC165.sol\":{\"keccak256\":\"0xd10975de010d89fd1c78dc5e8a9a7e7f496198085c151648f20cba166b32582b\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://fb0048dee081f6fffa5f74afc3fb328483c2a30504e94a0ddd2a5114d731ec4d\",\"dweb:/ipfs/QmZptt1nmYoA5SgjwnSgWqgUSDgm4q52Yos3xhnMv3MV43\"]},\"@openzeppelin/contracts/utils/introspection/ERC165Checker.sol\":{\"keccak256\":\"0x0812bc73d6e30558840122fa48d6f64ae978ccc1b1fc42e616bac190c6360f46\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://3d95a53b7e19ca1d46043eaad8967b6e0b02aab2b5fefc2108bfa6d1ad425f5b\",\"dweb:/ipfs/QmQq7AUGT9juE3hun2Wy7r2BDoDBFdBn43DVwhJpK2StLV\"]},\"@openzeppelin/contracts/utils/introspection/IERC165.sol\":{\"keccak256\":\"0x447a5f3ddc18419d41ff92b3773fb86471b1db25773e07f877f548918a185bf1\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://be161e54f24e5c6fae81a12db1a8ae87bc5ae1b0ddc805d82a1440a68455088f\",\"dweb:/ipfs/QmP7C3CHdY9urF4dEMb9wmsp1wMxHF6nhA2yQE5SKiPAdy\"]},\"@openzeppelin/contracts/utils/math/Math.sol\":{\"keccak256\":\"0xa1e8e83cd0087785df04ac79fb395d9f3684caeaf973d9e2c71caef723a3a5d6\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://33bbf48cc069be677705037ba7520c22b1b622c23b33e1a71495f2d36549d40b\",\"dweb:/ipfs/Qmct36zWXv3j7LZB83uwbg7TXwnZSN1fqHNDZ93GG98bGz\"]},\"@openzeppelin/contracts/utils/structs/EnumerableSet.sol\":{\"keccak256\":\"0xc3ff3f5c4584e1d9a483ad7ced51ab64523201f4e3d3c65293e4ca8aeb77a961\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://d7d3dd6067a994690471b5fc71b6f81fac3847798b37d404f74db00b4d3c3d0e\",\"dweb:/ipfs/QmRHF1RarifjNi93RttouNPkYZGyu6CD926PgRDzD5iL35\"]},\"project:/contracts/core/CreatorCore.sol\":{\"keccak256\":\"0x6e8b20c32d6122ed1d23af683260ea242f1197dc95b063b63ccfac5b90e65f31\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://bffa862c93d614e9d5727ff595cb8595dbb9eae43bfdf06f65c7331aec09c268\",\"dweb:/ipfs/QmUsPC55S2vdfQWL3HQTYDz66yRFhdbPGCjr1NYyxBT83P\"]},\"project:/contracts/core/ICreatorCore.sol\":{\"keccak256\":\"0x6bdcb757953594d3a259f1d68ec3d208ca42dba02115f08a6e32e2936ccb0349\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://dd1853dabcd57eb9b735b3991cf59259cd28cdeca1353495b5c59dc0db2d85df\",\"dweb:/ipfs/QmfJLFZ7RoMvdR7kJLR7QmqreS1x5VNJSa7xvjVsC4mXte\"]},\"project:/contracts/extensions/ICreatorExtensionRoyalties.sol\":{\"keccak256\":\"0xf61dcf7e6bc3e49e629630ad28377f079a31b154ecd0e604d1c0a51ae2a057f2\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://2fda5e6d49a47fbe347ed9198c1fff5555bd687a3a73d2a9f45d5c3a2d053e40\",\"dweb:/ipfs/QmdrLJ3rscxvpMTjdRp1FyhPtYDTDL1CCQyhFeLFuFkFXH\"]},\"project:/contracts/extensions/ICreatorExtensionTokenURI.sol\":{\"keccak256\":\"0x6c8ca804ee7dea9d78f0dacdd9233b1b75ca2b2fa517f52f0fdf6beb34780a51\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://4a04a6f0cce2bbdb022a8125e147519c7fbaa89692c8f0cfee69a67a2956316f\",\"dweb:/ipfs/QmdUxwBEnFshm1j5FEcJctC7DbFWUznis2LaPcKR7FEZX7\"]}},\"version\":1}",
  "bytecode": "0x",
  "deployedBytecode": "0x",
  "immutableReferences": {},
  "generatedSources": [],
  "deployedGeneratedSources": [],
  "sourceMap": "",
  "deployedSourceMap": "",
  "source": "// SPDX-License-Identifier: MIT\n\npragma solidity ^0.8.0;\n\n/// @author: manifold.xyz\n\nimport \"@openzeppelin/contracts/security/ReentrancyGuard.sol\";\nimport \"@openzeppelin/contracts/utils/Strings.sol\";\nimport \"@openzeppelin/contracts/utils/introspection/ERC165.sol\";\nimport \"@openzeppelin/contracts/utils/introspection/ERC165Checker.sol\";\nimport \"@openzeppelin/contracts/utils/structs/EnumerableSet.sol\";\nimport \"@openzeppelin/contracts-upgradeable/utils/AddressUpgradeable.sol\";\n\nimport \"../extensions/ICreatorExtensionTokenURI.sol\";\nimport \"../extensions/ICreatorExtensionRoyalties.sol\";\n\nimport \"./ICreatorCore.sol\";\n\n/**\n * @dev Core creator implementation\n */\nabstract contract CreatorCore is ReentrancyGuard, ICreatorCore, ERC165 {\n    using Strings for uint256;\n    using EnumerableSet for EnumerableSet.AddressSet;\n    using AddressUpgradeable for address;\n\n    uint256 internal _tokenCount = 0;\n\n    // Base approve transfers address location\n    address internal _approveTransferBase;\n\n    // Track registered extensions data\n    EnumerableSet.AddressSet internal _extensions;\n    EnumerableSet.AddressSet internal _blacklistedExtensions;\n\n    // The baseURI for a given extension\n    mapping (address => string) private _extensionBaseURI;\n    mapping (address => bool) private _extensionBaseURIIdentical;\n\n    // The prefix for any tokens with a uri configured\n    mapping (address => string) private _extensionURIPrefix;\n\n    // Mapping for individual token URIs\n    mapping (uint256 => string) internal _tokenURIs;\n\n    // Royalty configurations\n    struct RoyaltyConfig {\n        address payable receiver;\n        uint16 bps;\n    }\n    mapping (address => RoyaltyConfig[]) internal _extensionRoyalty;\n    mapping (uint256 => RoyaltyConfig[]) internal _tokenRoyalty;\n\n    bytes4 private constant _CREATOR_CORE_V1 = 0x28f10a21;\n\n    /**\n     * External interface identifiers for royalties\n     */\n\n    /**\n     *  @dev CreatorCore\n     *\n     *  bytes4(keccak256('getRoyalties(uint256)')) == 0xbb3bafd6\n     *\n     *  => 0xbb3bafd6 = 0xbb3bafd6\n     */\n    bytes4 private constant _INTERFACE_ID_ROYALTIES_CREATORCORE = 0xbb3bafd6;\n\n    /**\n     *  @dev Rarible: RoyaltiesV1\n     *\n     *  bytes4(keccak256('getFeeRecipients(uint256)')) == 0xb9c4d9fb\n     *  bytes4(keccak256('getFeeBps(uint256)')) == 0x0ebd4c7f\n     *\n     *  => 0xb9c4d9fb ^ 0x0ebd4c7f = 0xb7799584\n     */\n    bytes4 private constant _INTERFACE_ID_ROYALTIES_RARIBLE = 0xb7799584;\n\n    /**\n     *  @dev Foundation\n     *\n     *  bytes4(keccak256('getFees(uint256)')) == 0xd5a06d4c\n     *\n     *  => 0xd5a06d4c = 0xd5a06d4c\n     */\n    bytes4 private constant _INTERFACE_ID_ROYALTIES_FOUNDATION = 0xd5a06d4c;\n\n    /**\n     *  @dev EIP-2981\n     *\n     * bytes4(keccak256(\"royaltyInfo(uint256,uint256)\")) == 0x2a55205a\n     *\n     * => 0x2a55205a = 0x2a55205a\n     */\n    bytes4 private constant _INTERFACE_ID_ROYALTIES_EIP2981 = 0x2a55205a;\n\n    /**\n     * @dev See {IERC165-supportsInterface}.\n     */\n    function supportsInterface(bytes4 interfaceId) public view virtual override(ERC165, IERC165) returns (bool) {\n        return interfaceId == type(ICreatorCore).interfaceId || interfaceId == _CREATOR_CORE_V1 || super.supportsInterface(interfaceId)\n            || interfaceId == _INTERFACE_ID_ROYALTIES_CREATORCORE || interfaceId == _INTERFACE_ID_ROYALTIES_RARIBLE\n            || interfaceId == _INTERFACE_ID_ROYALTIES_FOUNDATION || interfaceId == _INTERFACE_ID_ROYALTIES_EIP2981;\n    }\n\n    /**\n     * @dev Only allows registered extensions to call the specified function\n     */\n    function requireExtension() internal view {\n        require(_extensions.contains(msg.sender), \"Must be registered extension\");\n    }\n\n    /**\n     * @dev Only allows non-blacklisted extensions\n     */\n    function requireNonBlacklist(address extension) internal view {\n        require(!_blacklistedExtensions.contains(extension), \"Extension blacklisted\");\n    }   \n\n    /**\n     * @dev See {ICreatorCore-getExtensions}.\n     */\n    function getExtensions() external view override returns (address[] memory extensions) {\n        extensions = new address[](_extensions.length());\n        for (uint i; i < _extensions.length();) {\n            extensions[i] = _extensions.at(i);\n            unchecked { ++i; }\n        }\n        return extensions;\n    }\n\n    /**\n     * @dev Register an extension\n     */\n    function _registerExtension(address extension, string calldata baseURI, bool baseURIIdentical) internal virtual {\n        require(extension != address(this) && extension.isContract(), \"Invalid\");\n        emit ExtensionRegistered(extension, msg.sender);\n        _extensionBaseURI[extension] = baseURI;\n        _extensionBaseURIIdentical[extension] = baseURIIdentical;\n        _extensions.add(extension);\n        _setApproveTransferExtension(extension, true);\n    }\n\n    /**\n     * @dev See {ICreatorCore-setApproveTransferExtension}.\n     */\n    function setApproveTransferExtension(bool enabled) external override {\n        requireExtension();\n        _setApproveTransferExtension(msg.sender, enabled);\n    }\n\n    /**\n     * @dev Set whether or not tokens minted by the extension defers transfer approvals to the extension\n     */\n    function _setApproveTransferExtension(address extension, bool enabled) internal virtual;\n\n    /**\n     * @dev Unregister an extension\n     */\n    function _unregisterExtension(address extension) internal {\n        emit ExtensionUnregistered(extension, msg.sender);\n        _extensions.remove(extension);\n    }\n\n    /**\n     * @dev Blacklist an extension\n     */\n    function _blacklistExtension(address extension) internal {\n       require(extension != address(0) && extension != address(this), \"Cannot blacklist yourself\");\n       if (_extensions.contains(extension)) {\n           emit ExtensionUnregistered(extension, msg.sender);\n           _extensions.remove(extension);\n       }\n       if (!_blacklistedExtensions.contains(extension)) {\n           emit ExtensionBlacklisted(extension, msg.sender);\n           _blacklistedExtensions.add(extension);\n       }\n    }\n\n    /**\n     * @dev Set base token uri for an extension\n     */\n    function _setBaseTokenURIExtension(string calldata uri, bool identical) internal {\n        _extensionBaseURI[msg.sender] = uri;\n        _extensionBaseURIIdentical[msg.sender] = identical;\n    }\n\n    /**\n     * @dev Set token uri prefix for an extension\n     */\n    function _setTokenURIPrefixExtension(string calldata prefix) internal {\n        _extensionURIPrefix[msg.sender] = prefix;\n    }\n\n    /**\n     * @dev Set token uri for a token of an extension\n     */\n    function _setTokenURIExtension(uint256 tokenId, string calldata uri) internal {\n        require(_tokenExtension(tokenId) == msg.sender, \"Invalid token\");\n        _tokenURIs[tokenId] = uri;\n    }\n\n    /**\n     * @dev Set base token uri for tokens with no extension\n     */\n    function _setBaseTokenURI(string calldata uri) internal {\n        _extensionBaseURI[address(0)] = uri;\n    }\n\n    /**\n     * @dev Set token uri prefix for tokens with no extension\n     */\n    function _setTokenURIPrefix(string calldata prefix) internal {\n        _extensionURIPrefix[address(0)] = prefix;\n    }\n\n\n    /**\n     * @dev Set token uri for a token with no extension\n     */\n    function _setTokenURI(uint256 tokenId, string calldata uri) internal {\n        require(tokenId > 0 && tokenId <= _tokenCount && _tokenExtension(tokenId) == address(0), \"Invalid token\");\n        _tokenURIs[tokenId] = uri;\n    }\n\n    /**\n     * @dev Retrieve a token's URI\n     */\n    function _tokenURI(uint256 tokenId) internal view returns (string memory) {\n        require(tokenId > 0 && tokenId <= _tokenCount, \"Invalid token\");\n\n        address extension = _tokenExtension(tokenId);\n        require(!_blacklistedExtensions.contains(extension), \"Extension blacklisted\");\n\n        if (bytes(_tokenURIs[tokenId]).length != 0) {\n            if (bytes(_extensionURIPrefix[extension]).length != 0) {\n                return string(abi.encodePacked(_extensionURIPrefix[extension], _tokenURIs[tokenId]));\n            }\n            return _tokenURIs[tokenId];\n        }\n\n        if (ERC165Checker.supportsInterface(extension, type(ICreatorExtensionTokenURI).interfaceId)) {\n            return ICreatorExtensionTokenURI(extension).tokenURI(address(this), tokenId);\n        }\n\n        if (!_extensionBaseURIIdentical[extension]) {\n            return string(abi.encodePacked(_extensionBaseURI[extension], tokenId.toString()));\n        } else {\n            return _extensionBaseURI[extension];\n        }\n    }\n\n    /**\n     * Helper to get royalties for a token\n     */\n    function _getRoyalties(uint256 tokenId) view internal returns (address payable[] memory receivers, uint256[] memory bps) {\n\n        // Get token level royalties\n        RoyaltyConfig[] memory royalties = _tokenRoyalty[tokenId];\n        if (royalties.length == 0) {\n            // Get extension specific royalties\n            address extension = _tokenExtension(tokenId);\n            if (extension != address(0)) {\n                if (ERC165Checker.supportsInterface(extension, type(ICreatorExtensionRoyalties).interfaceId)) {\n                    (receivers, bps) = ICreatorExtensionRoyalties(extension).getRoyalties(address(this), tokenId);\n                    // Extension override exists, just return that\n                    if (receivers.length > 0) return (receivers, bps);\n                }\n                royalties = _extensionRoyalty[extension];\n            }\n        }\n        if (royalties.length == 0) {\n            // Get the default royalty\n            royalties = _extensionRoyalty[address(0)];\n        }\n        \n        if (royalties.length > 0) {\n            receivers = new address payable[](royalties.length);\n            bps = new uint256[](royalties.length);\n            for (uint i; i < royalties.length;) {\n                receivers[i] = royalties[i].receiver;\n                bps[i] = royalties[i].bps;\n                unchecked { ++i; }\n            }\n        }\n    }\n\n    /**\n     * Helper to get royalty receivers for a token\n     */\n    function _getRoyaltyReceivers(uint256 tokenId) view internal returns (address payable[] memory recievers) {\n        (recievers, ) = _getRoyalties(tokenId);\n    }\n\n    /**\n     * Helper to get royalty basis points for a token\n     */\n    function _getRoyaltyBPS(uint256 tokenId) view internal returns (uint256[] memory bps) {\n        (, bps) = _getRoyalties(tokenId);\n    }\n\n    function _getRoyaltyInfo(uint256 tokenId, uint256 value) view internal returns (address receiver, uint256 amount){\n        (address payable[] memory receivers, uint256[] memory bps) = _getRoyalties(tokenId);\n        require(receivers.length <= 1, \"More than 1 royalty receiver\");\n        \n        if (receivers.length == 0) {\n            return (address(this), 0);\n        }\n        return (receivers[0], bps[0]*value/10000);\n    }\n\n    /**\n     * Set royalties for a token\n     */\n    function _setRoyalties(uint256 tokenId, address payable[] calldata receivers, uint256[] calldata basisPoints) internal {\n       _checkRoyalties(receivers, basisPoints);\n        delete _tokenRoyalty[tokenId];\n        _setRoyalties(receivers, basisPoints, _tokenRoyalty[tokenId]);\n        emit RoyaltiesUpdated(tokenId, receivers, basisPoints);\n    }\n\n    /**\n     * Set royalties for all tokens of an extension\n     */\n    function _setRoyaltiesExtension(address extension, address payable[] calldata receivers, uint256[] calldata basisPoints) internal {\n        _checkRoyalties(receivers, basisPoints);\n        delete _extensionRoyalty[extension];\n        _setRoyalties(receivers, basisPoints, _extensionRoyalty[extension]);\n        if (extension == address(0)) {\n            emit DefaultRoyaltiesUpdated(receivers, basisPoints);\n        } else {\n            emit ExtensionRoyaltiesUpdated(extension, receivers, basisPoints);\n        }\n    }\n\n    /**\n     * Helper function to check that royalties provided are valid\n     */\n    function _checkRoyalties(address payable[] calldata receivers, uint256[] calldata basisPoints) private pure {\n        require(receivers.length == basisPoints.length, \"Invalid input\");\n        uint256 totalBasisPoints;\n        for (uint i; i < basisPoints.length;) {\n            totalBasisPoints += basisPoints[i];\n            unchecked { ++i; }\n        }\n        require(totalBasisPoints < 10000, \"Invalid total royalties\");\n    }\n\n    /**\n     * Helper function to set royalties\n     */\n    function _setRoyalties(address payable[] calldata receivers, uint256[] calldata basisPoints, RoyaltyConfig[] storage royalties) private {\n        for (uint i; i < basisPoints.length;) {\n            royalties.push(\n                RoyaltyConfig(\n                    {\n                        receiver: receivers[i],\n                        bps: uint16(basisPoints[i])\n                    }\n                )\n            );\n            unchecked { ++i; }\n        }\n    }\n\n    /**\n     * @dev Set the base contract's approve transfer contract location\n     */\n    function _setApproveTransferBase(address extension) internal {\n        _approveTransferBase = extension;\n        emit ApproveTransferUpdated(extension);\n    }\n\n    /**\n     * @dev See {ICreatorCore-getApproveTransfer}.\n     */\n    function getApproveTransfer() external view override returns (address) {\n        return _approveTransferBase;\n    }\n\n    /**\n     * @dev Get the extension for the given token\n     */\n    function _tokenExtension(uint256 tokenId) internal virtual view returns(address);\n}\n",
  "sourcePath": "/Users/chung/git/manifoldxyz/solidity/creator-core-solidity/contracts/core/CreatorCore.sol",
  "ast": {
    "absolutePath": "project:/contracts/core/CreatorCore.sol",
    "exportedSymbols": {
      "AddressUpgradeable": [
        1002
      ],
      "CreatorCore": [
        13473
      ],
      "ERC165": [
        2132
      ],
      "ERC165Checker": [
        2326
      ],
      "EnumerableSet": [
        3816
      ],
      "ICreatorCore": [
        15197
      ],
      "ICreatorExtensionRoyalties": [
        16574
      ],
      "ICreatorExtensionTokenURI": [
        16591
      ],
      "IERC165": [
        2338
      ],
      "Math": [
        3203
      ],
      "ReentrancyGuard": [
        1211
      ],
      "Strings": [
        2108
      ]
    },
    "id": 13474,
    "license": "MIT",
    "nodeType": "SourceUnit",
    "nodes": [
      {
        "id": 12403,
        "literals": [
          "solidity",
          "^",
          "0.8",
          ".0"
        ],
        "nodeType": "PragmaDirective",
        "src": "33:23:32"
      },
      {
        "absolutePath": "@openzeppelin/contracts/security/ReentrancyGuard.sol",
        "file": "@openzeppelin/contracts/security/ReentrancyGuard.sol",
        "id": 12404,
        "nameLocation": "-1:-1:-1",
        "nodeType": "ImportDirective",
        "scope": 13474,
        "sourceUnit": 1212,
        "src": "85:62:32",
        "symbolAliases": [],
        "unitAlias": ""
      },
      {
        "absolutePath": "@openzeppelin/contracts/utils/Strings.sol",
        "file": "@openzeppelin/contracts/utils/Strings.sol",
        "id": 12405,
        "nameLocation": "-1:-1:-1",
        "nodeType": "ImportDirective",
        "scope": 13474,
        "sourceUnit": 2109,
        "src": "148:51:32",
        "symbolAliases": [],
        "unitAlias": ""
      },
      {
        "absolutePath": "@openzeppelin/contracts/utils/introspection/ERC165.sol",
        "file": "@openzeppelin/contracts/utils/introspection/ERC165.sol",
        "id": 12406,
        "nameLocation": "-1:-1:-1",
        "nodeType": "ImportDirective",
        "scope": 13474,
        "sourceUnit": 2133,
        "src": "200:64:32",
        "symbolAliases": [],
        "unitAlias": ""
      },
      {
        "absolutePath": "@openzeppelin/contracts/utils/introspection/ERC165Checker.sol",
        "file": "@openzeppelin/contracts/utils/introspection/ERC165Checker.sol",
        "id": 12407,
        "nameLocation": "-1:-1:-1",
        "nodeType": "ImportDirective",
        "scope": 13474,
        "sourceUnit": 2327,
        "src": "265:71:32",
        "symbolAliases": [],
        "unitAlias": ""
      },
      {
        "absolutePath": "@openzeppelin/contracts/utils/structs/EnumerableSet.sol",
        "file": "@openzeppelin/contracts/utils/structs/EnumerableSet.sol",
        "id": 12408,
        "nameLocation": "-1:-1:-1",
        "nodeType": "ImportDirective",
        "scope": 13474,
        "sourceUnit": 3817,
        "src": "337:65:32",
        "symbolAliases": [],
        "unitAlias": ""
      },
      {
        "absolutePath": "@openzeppelin/contracts-upgradeable/utils/AddressUpgradeable.sol",
        "file": "@openzeppelin/contracts-upgradeable/utils/AddressUpgradeable.sol",
        "id": 12409,
        "nameLocation": "-1:-1:-1",
        "nodeType": "ImportDirective",
        "scope": 13474,
        "sourceUnit": 1003,
        "src": "403:74:32",
        "symbolAliases": [],
        "unitAlias": ""
      },
      {
        "absolutePath": "project:/contracts/extensions/ICreatorExtensionTokenURI.sol",
        "file": "../extensions/ICreatorExtensionTokenURI.sol",
        "id": 12410,
        "nameLocation": "-1:-1:-1",
        "nodeType": "ImportDirective",
        "scope": 13474,
        "sourceUnit": 16592,
        "src": "479:53:32",
        "symbolAliases": [],
        "unitAlias": ""
      },
      {
        "absolutePath": "project:/contracts/extensions/ICreatorExtensionRoyalties.sol",
        "file": "../extensions/ICreatorExtensionRoyalties.sol",
        "id": 12411,
        "nameLocation": "-1:-1:-1",
        "nodeType": "ImportDirective",
        "scope": 13474,
        "sourceUnit": 16575,
        "src": "533:54:32",
        "symbolAliases": [],
        "unitAlias": ""
      },
      {
        "absolutePath": "project:/contracts/core/ICreatorCore.sol",
        "file": "./ICreatorCore.sol",
        "id": 12412,
        "nameLocation": "-1:-1:-1",
        "nodeType": "ImportDirective",
        "scope": 13474,
        "sourceUnit": 15198,
        "src": "589:28:32",
        "symbolAliases": [],
        "unitAlias": ""
      },
      {
        "abstract": true,
        "baseContracts": [
          {
            "baseName": {
              "id": 12414,
              "name": "ReentrancyGuard",
              "nameLocations": [
                "696:15:32"
              ],
              "nodeType": "IdentifierPath",
              "referencedDeclaration": 1211,
              "src": "696:15:32"
            },
            "id": 12415,
            "nodeType": "InheritanceSpecifier",
            "src": "696:15:32"
          },
          {
            "baseName": {
              "id": 12416,
              "name": "ICreatorCore",
              "nameLocations": [
                "713:12:32"
              ],
              "nodeType": "IdentifierPath",
              "referencedDeclaration": 15197,
              "src": "713:12:32"
            },
            "id": 12417,
            "nodeType": "InheritanceSpecifier",
            "src": "713:12:32"
          },
          {
            "baseName": {
              "id": 12418,
              "name": "ERC165",
              "nameLocations": [
                "727:6:32"
              ],
              "nodeType": "IdentifierPath",
              "referencedDeclaration": 2132,
              "src": "727:6:32"
            },
            "id": 12419,
            "nodeType": "InheritanceSpecifier",
            "src": "727:6:32"
          }
        ],
        "canonicalName": "CreatorCore",
        "contractDependencies": [],
        "contractKind": "contract",
        "documentation": {
          "id": 12413,
          "nodeType": "StructuredDocumentation",
          "src": "619:43:32",
          "text": " @dev Core creator implementation"
        },
        "fullyImplemented": false,
        "id": 13473,
        "linearizedBaseContracts": [
          13473,
          2132,
          15197,
          2338,
          1211
        ],
        "name": "CreatorCore",
        "nameLocation": "681:11:32",
        "nodeType": "ContractDefinition",
        "nodes": [
          {
            "global": false,
            "id": 12422,
            "libraryName": {
              "id": 12420,
              "name": "Strings",
              "nameLocations": [
                "746:7:32"
              ],
              "nodeType": "IdentifierPath",
              "referencedDeclaration": 2108,
              "src": "746:7:32"
            },
            "nodeType": "UsingForDirective",
            "src": "740:26:32",
            "typeName": {
              "id": 12421,
              "name": "uint256",
              "nodeType": "ElementaryTypeName",
              "src": "758:7:32",
              "typeDescriptions": {
                "typeIdentifier": "t_uint256",
                "typeString": "uint256"
              }
            }
          },
          {
            "global": false,
            "id": 12426,
            "libraryName": {
              "id": 12423,
              "name": "EnumerableSet",
              "nameLocations": [
                "777:13:32"
              ],
              "nodeType": "IdentifierPath",
              "referencedDeclaration": 3816,
              "src": "777:13:32"
            },
            "nodeType": "UsingForDirective",
            "src": "771:49:32",
            "typeName": {
              "id": 12425,
              "nodeType": "UserDefinedTypeName",
              "pathNode": {
                "id": 12424,
                "name": "EnumerableSet.AddressSet",
                "nameLocations": [
                  "795:13:32",
                  "809:10:32"
                ],
                "nodeType": "IdentifierPath",
                "referencedDeclaration": 3529,
                "src": "795:24:32"
              },
              "referencedDeclaration": 3529,
              "src": "795:24:32",
              "typeDescriptions": {
                "typeIdentifier": "t_struct$_AddressSet_$3529_storage_ptr",
                "typeString": "struct EnumerableSet.AddressSet"
              }
            }
          },
          {
            "global": false,
            "id": 12429,
            "libraryName": {
              "id": 12427,
              "name": "AddressUpgradeable",
              "nameLocations": [
                "831:18:32"
              ],
              "nodeType": "IdentifierPath",
              "referencedDeclaration": 1002,
              "src": "831:18:32"
            },
            "nodeType": "UsingForDirective",
            "src": "825:37:32",
            "typeName": {
              "id": 12428,
              "name": "address",
              "nodeType": "ElementaryTypeName",
              "src": "854:7:32",
              "stateMutability": "nonpayable",
              "typeDescriptions": {
                "typeIdentifier": "t_address",
                "typeString": "address"
              }
            }
          },
          {
            "constant": false,
            "id": 12432,
            "mutability": "mutable",
            "name": "_tokenCount",
            "nameLocation": "885:11:32",
            "nodeType": "VariableDeclaration",
            "scope": 13473,
            "src": "868:32:32",
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_uint256",
              "typeString": "uint256"
            },
            "typeName": {
              "id": 12430,
              "name": "uint256",
              "nodeType": "ElementaryTypeName",
              "src": "868:7:32",
              "typeDescriptions": {
                "typeIdentifier": "t_uint256",
                "typeString": "uint256"
              }
            },
            "value": {
              "hexValue": "30",
              "id": 12431,
              "isConstant": false,
              "isLValue": false,
              "isPure": true,
              "kind": "number",
              "lValueRequested": false,
              "nodeType": "Literal",
              "src": "899:1:32",
              "typeDescriptions": {
                "typeIdentifier": "t_rational_0_by_1",
                "typeString": "int_const 0"
              },
              "value": "0"
            },
            "visibility": "internal"
          },
          {
            "constant": false,
            "id": 12434,
            "mutability": "mutable",
            "name": "_approveTransferBase",
            "nameLocation": "971:20:32",
            "nodeType": "VariableDeclaration",
            "scope": 13473,
            "src": "954:37:32",
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_address",
              "typeString": "address"
            },
            "typeName": {
              "id": 12433,
              "name": "address",
              "nodeType": "ElementaryTypeName",
              "src": "954:7:32",
              "stateMutability": "nonpayable",
              "typeDescriptions": {
                "typeIdentifier": "t_address",
                "typeString": "address"
              }
            },
            "visibility": "internal"
          },
          {
            "constant": false,
            "id": 12437,
            "mutability": "mutable",
            "name": "_extensions",
            "nameLocation": "1072:11:32",
            "nodeType": "VariableDeclaration",
            "scope": 13473,
            "src": "1038:45:32",
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_struct$_AddressSet_$3529_storage",
              "typeString": "struct EnumerableSet.AddressSet"
            },
            "typeName": {
              "id": 12436,
              "nodeType": "UserDefinedTypeName",
              "pathNode": {
                "id": 12435,
                "name": "EnumerableSet.AddressSet",
                "nameLocations": [
                  "1038:13:32",
                  "1052:10:32"
                ],
                "nodeType": "IdentifierPath",
                "referencedDeclaration": 3529,
                "src": "1038:24:32"
              },
              "referencedDeclaration": 3529,
              "src": "1038:24:32",
              "typeDescriptions": {
                "typeIdentifier": "t_struct$_AddressSet_$3529_storage_ptr",
                "typeString": "struct EnumerableSet.AddressSet"
              }
            },
            "visibility": "internal"
          },
          {
            "constant": false,
            "id": 12440,
            "mutability": "mutable",
            "name": "_blacklistedExtensions",
            "nameLocation": "1123:22:32",
            "nodeType": "VariableDeclaration",
            "scope": 13473,
            "src": "1089:56:32",
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_struct$_AddressSet_$3529_storage",
              "typeString": "struct EnumerableSet.AddressSet"
            },
            "typeName": {
              "id": 12439,
              "nodeType": "UserDefinedTypeName",
              "pathNode": {
                "id": 12438,
                "name": "EnumerableSet.AddressSet",
                "nameLocations": [
                  "1089:13:32",
                  "1103:10:32"
                ],
                "nodeType": "IdentifierPath",
                "referencedDeclaration": 3529,
                "src": "1089:24:32"
              },
              "referencedDeclaration": 3529,
              "src": "1089:24:32",
              "typeDescriptions": {
                "typeIdentifier": "t_struct$_AddressSet_$3529_storage_ptr",
                "typeString": "struct EnumerableSet.AddressSet"
              }
            },
            "visibility": "internal"
          },
          {
            "constant": false,
            "id": 12444,
            "mutability": "mutable",
            "name": "_extensionBaseURI",
            "nameLocation": "1229:17:32",
            "nodeType": "VariableDeclaration",
            "scope": 13473,
            "src": "1193:53:32",
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_mapping$_t_address_$_t_string_storage_$",
              "typeString": "mapping(address => string)"
            },
            "typeName": {
              "id": 12443,
              "keyName": "",
              "keyNameLocation": "-1:-1:-1",
              "keyType": {
                "id": 12441,
                "name": "address",
                "nodeType": "ElementaryTypeName",
                "src": "1202:7:32",
                "typeDescriptions": {
                  "typeIdentifier": "t_address",
                  "typeString": "address"
                }
              },
              "nodeType": "Mapping",
              "src": "1193:27:32",
              "typeDescriptions": {
                "typeIdentifier": "t_mapping$_t_address_$_t_string_storage_$",
                "typeString": "mapping(address => string)"
              },
              "valueName": "",
              "valueNameLocation": "-1:-1:-1",
              "valueType": {
                "id": 12442,
                "name": "string",
                "nodeType": "ElementaryTypeName",
                "src": "1213:6:32",
                "typeDescriptions": {
                  "typeIdentifier": "t_string_storage_ptr",
                  "typeString": "string"
                }
              }
            },
            "visibility": "private"
          },
          {
            "constant": false,
            "id": 12448,
            "mutability": "mutable",
            "name": "_extensionBaseURIIdentical",
            "nameLocation": "1286:26:32",
            "nodeType": "VariableDeclaration",
            "scope": 13473,
            "src": "1252:60:32",
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_mapping$_t_address_$_t_bool_$",
              "typeString": "mapping(address => bool)"
            },
            "typeName": {
              "id": 12447,
              "keyName": "",
              "keyNameLocation": "-1:-1:-1",
              "keyType": {
                "id": 12445,
                "name": "address",
                "nodeType": "ElementaryTypeName",
                "src": "1261:7:32",
                "typeDescriptions": {
                  "typeIdentifier": "t_address",
                  "typeString": "address"
                }
              },
              "nodeType": "Mapping",
              "src": "1252:25:32",
              "typeDescriptions": {
                "typeIdentifier": "t_mapping$_t_address_$_t_bool_$",
                "typeString": "mapping(address => bool)"
              },
              "valueName": "",
              "valueNameLocation": "-1:-1:-1",
              "valueType": {
                "id": 12446,
                "name": "bool",
                "nodeType": "ElementaryTypeName",
                "src": "1272:4:32",
                "typeDescriptions": {
                  "typeIdentifier": "t_bool",
                  "typeString": "bool"
                }
              }
            },
            "visibility": "private"
          },
          {
            "constant": false,
            "id": 12452,
            "mutability": "mutable",
            "name": "_extensionURIPrefix",
            "nameLocation": "1410:19:32",
            "nodeType": "VariableDeclaration",
            "scope": 13473,
            "src": "1374:55:32",
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_mapping$_t_address_$_t_string_storage_$",
              "typeString": "mapping(address => string)"
            },
            "typeName": {
              "id": 12451,
              "keyName": "",
              "keyNameLocation": "-1:-1:-1",
              "keyType": {
                "id": 12449,
                "name": "address",
                "nodeType": "ElementaryTypeName",
                "src": "1383:7:32",
                "typeDescriptions": {
                  "typeIdentifier": "t_address",
                  "typeString": "address"
                }
              },
              "nodeType": "Mapping",
              "src": "1374:27:32",
              "typeDescriptions": {
                "typeIdentifier": "t_mapping$_t_address_$_t_string_storage_$",
                "typeString": "mapping(address => string)"
              },
              "valueName": "",
              "valueNameLocation": "-1:-1:-1",
              "valueType": {
                "id": 12450,
                "name": "string",
                "nodeType": "ElementaryTypeName",
                "src": "1394:6:32",
                "typeDescriptions": {
                  "typeIdentifier": "t_string_storage_ptr",
                  "typeString": "string"
                }
              }
            },
            "visibility": "private"
          },
          {
            "constant": false,
            "id": 12456,
            "mutability": "mutable",
            "name": "_tokenURIs",
            "nameLocation": "1514:10:32",
            "nodeType": "VariableDeclaration",
            "scope": 13473,
            "src": "1477:47:32",
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_mapping$_t_uint256_$_t_string_storage_$",
              "typeString": "mapping(uint256 => string)"
            },
            "typeName": {
              "id": 12455,
              "keyName": "",
              "keyNameLocation": "-1:-1:-1",
              "keyType": {
                "id": 12453,
                "name": "uint256",
                "nodeType": "ElementaryTypeName",
                "src": "1486:7:32",
                "typeDescriptions": {
                  "typeIdentifier": "t_uint256",
                  "typeString": "uint256"
                }
              },
              "nodeType": "Mapping",
              "src": "1477:27:32",
              "typeDescriptions": {
                "typeIdentifier": "t_mapping$_t_uint256_$_t_string_storage_$",
                "typeString": "mapping(uint256 => string)"
              },
              "valueName": "",
              "valueNameLocation": "-1:-1:-1",
              "valueType": {
                "id": 12454,
                "name": "string",
                "nodeType": "ElementaryTypeName",
                "src": "1497:6:32",
                "typeDescriptions": {
                  "typeIdentifier": "t_string_storage_ptr",
                  "typeString": "string"
                }
              }
            },
            "visibility": "internal"
          },
          {
            "canonicalName": "CreatorCore.RoyaltyConfig",
            "id": 12461,
            "members": [
              {
                "constant": false,
                "id": 12458,
                "mutability": "mutable",
                "name": "receiver",
                "nameLocation": "1608:8:32",
                "nodeType": "VariableDeclaration",
                "scope": 12461,
                "src": "1592:24:32",
                "stateVariable": false,
                "storageLocation": "default",
                "typeDescriptions": {
                  "typeIdentifier": "t_address_payable",
                  "typeString": "address payable"
                },
                "typeName": {
                  "id": 12457,
                  "name": "address",
                  "nodeType": "ElementaryTypeName",
                  "src": "1592:15:32",
                  "stateMutability": "payable",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address_payable",
                    "typeString": "address payable"
                  }
                },
                "visibility": "internal"
              },
              {
                "constant": false,
                "id": 12460,
                "mutability": "mutable",
                "name": "bps",
                "nameLocation": "1633:3:32",
                "nodeType": "VariableDeclaration",
                "scope": 12461,
                "src": "1626:10:32",
                "stateVariable": false,
                "storageLocation": "default",
                "typeDescriptions": {
                  "typeIdentifier": "t_uint16",
                  "typeString": "uint16"
                },
                "typeName": {
                  "id": 12459,
                  "name": "uint16",
                  "nodeType": "ElementaryTypeName",
                  "src": "1626:6:32",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint16",
                    "typeString": "uint16"
                  }
                },
                "visibility": "internal"
              }
            ],
            "name": "RoyaltyConfig",
            "nameLocation": "1568:13:32",
            "nodeType": "StructDefinition",
            "scope": 13473,
            "src": "1561:82:32",
            "visibility": "public"
          },
          {
            "constant": false,
            "id": 12467,
            "mutability": "mutable",
            "name": "_extensionRoyalty",
            "nameLocation": "1694:17:32",
            "nodeType": "VariableDeclaration",
            "scope": 13473,
            "src": "1648:63:32",
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_mapping$_t_address_$_t_array$_t_struct$_RoyaltyConfig_$12461_storage_$dyn_storage_$",
              "typeString": "mapping(address => struct CreatorCore.RoyaltyConfig[])"
            },
            "typeName": {
              "id": 12466,
              "keyName": "",
              "keyNameLocation": "-1:-1:-1",
              "keyType": {
                "id": 12462,
                "name": "address",
                "nodeType": "ElementaryTypeName",
                "src": "1657:7:32",
                "typeDescriptions": {
                  "typeIdentifier": "t_address",
                  "typeString": "address"
                }
              },
              "nodeType": "Mapping",
              "src": "1648:36:32",
              "typeDescriptions": {
                "typeIdentifier": "t_mapping$_t_address_$_t_array$_t_struct$_RoyaltyConfig_$12461_storage_$dyn_storage_$",
                "typeString": "mapping(address => struct CreatorCore.RoyaltyConfig[])"
              },
              "valueName": "",
              "valueNameLocation": "-1:-1:-1",
              "valueType": {
                "baseType": {
                  "id": 12464,
                  "nodeType": "UserDefinedTypeName",
                  "pathNode": {
                    "id": 12463,
                    "name": "RoyaltyConfig",
                    "nameLocations": [
                      "1668:13:32"
                    ],
                    "nodeType": "IdentifierPath",
                    "referencedDeclaration": 12461,
                    "src": "1668:13:32"
                  },
                  "referencedDeclaration": 12461,
                  "src": "1668:13:32",
                  "typeDescriptions": {
                    "typeIdentifier": "t_struct$_RoyaltyConfig_$12461_storage_ptr",
                    "typeString": "struct CreatorCore.RoyaltyConfig"
                  }
                },
                "id": 12465,
                "nodeType": "ArrayTypeName",
                "src": "1668:15:32",
                "typeDescriptions": {
                  "typeIdentifier": "t_array$_t_struct$_RoyaltyConfig_$12461_storage_$dyn_storage_ptr",
                  "typeString": "struct CreatorCore.RoyaltyConfig[]"
                }
              }
            },
            "visibility": "internal"
          },
          {
            "constant": false,
            "id": 12473,
            "mutability": "mutable",
            "name": "_tokenRoyalty",
            "nameLocation": "1763:13:32",
            "nodeType": "VariableDeclaration",
            "scope": 13473,
            "src": "1717:59:32",
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_mapping$_t_uint256_$_t_array$_t_struct$_RoyaltyConfig_$12461_storage_$dyn_storage_$",
              "typeString": "mapping(uint256 => struct CreatorCore.RoyaltyConfig[])"
            },
            "typeName": {
              "id": 12472,
              "keyName": "",
              "keyNameLocation": "-1:-1:-1",
              "keyType": {
                "id": 12468,
                "name": "uint256",
                "nodeType": "ElementaryTypeName",
                "src": "1726:7:32",
                "typeDescriptions": {
                  "typeIdentifier": "t_uint256",
                  "typeString": "uint256"
                }
              },
              "nodeType": "Mapping",
              "src": "1717:36:32",
              "typeDescriptions": {
                "typeIdentifier": "t_mapping$_t_uint256_$_t_array$_t_struct$_RoyaltyConfig_$12461_storage_$dyn_storage_$",
                "typeString": "mapping(uint256 => struct CreatorCore.RoyaltyConfig[])"
              },
              "valueName": "",
              "valueNameLocation": "-1:-1:-1",
              "valueType": {
                "baseType": {
                  "id": 12470,
                  "nodeType": "UserDefinedTypeName",
                  "pathNode": {
                    "id": 12469,
                    "name": "RoyaltyConfig",
                    "nameLocations": [
                      "1737:13:32"
                    ],
                    "nodeType": "IdentifierPath",
                    "referencedDeclaration": 12461,
                    "src": "1737:13:32"
                  },
                  "referencedDeclaration": 12461,
                  "src": "1737:13:32",
                  "typeDescriptions": {
                    "typeIdentifier": "t_struct$_RoyaltyConfig_$12461_storage_ptr",
                    "typeString": "struct CreatorCore.RoyaltyConfig"
                  }
                },
                "id": 12471,
                "nodeType": "ArrayTypeName",
                "src": "1737:15:32",
                "typeDescriptions": {
                  "typeIdentifier": "t_array$_t_struct$_RoyaltyConfig_$12461_storage_$dyn_storage_ptr",
                  "typeString": "struct CreatorCore.RoyaltyConfig[]"
                }
              }
            },
            "visibility": "internal"
          },
          {
            "constant": true,
            "id": 12476,
            "mutability": "constant",
            "name": "_CREATOR_CORE_V1",
            "nameLocation": "1807:16:32",
            "nodeType": "VariableDeclaration",
            "scope": 13473,
            "src": "1783:53:32",
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_bytes4",
              "typeString": "bytes4"
            },
            "typeName": {
              "id": 12474,
              "name": "bytes4",
              "nodeType": "ElementaryTypeName",
              "src": "1783:6:32",
              "typeDescriptions": {
                "typeIdentifier": "t_bytes4",
                "typeString": "bytes4"
              }
            },
            "value": {
              "hexValue": "30783238663130613231",
              "id": 12475,
              "isConstant": false,
              "isLValue": false,
              "isPure": true,
              "kind": "number",
              "lValueRequested": false,
              "nodeType": "Literal",
              "src": "1826:10:32",
              "typeDescriptions": {
                "typeIdentifier": "t_rational_686885409_by_1",
                "typeString": "int_const 686885409"
              },
              "value": "0x28f10a21"
            },
            "visibility": "private"
          },
          {
            "constant": true,
            "documentation": {
              "id": 12477,
              "nodeType": "StructuredDocumentation",
              "src": "1912:150:32",
              "text": "  @dev CreatorCore\n  bytes4(keccak256('getRoyalties(uint256)')) == 0xbb3bafd6\n  => 0xbb3bafd6 = 0xbb3bafd6"
            },
            "id": 12480,
            "mutability": "constant",
            "name": "_INTERFACE_ID_ROYALTIES_CREATORCORE",
            "nameLocation": "2091:35:32",
            "nodeType": "VariableDeclaration",
            "scope": 13473,
            "src": "2067:72:32",
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_bytes4",
              "typeString": "bytes4"
            },
            "typeName": {
              "id": 12478,
              "name": "bytes4",
              "nodeType": "ElementaryTypeName",
              "src": "2067:6:32",
              "typeDescriptions": {
                "typeIdentifier": "t_bytes4",
                "typeString": "bytes4"
              }
            },
            "value": {
              "hexValue": "30786262336261666436",
              "id": 12479,
              "isConstant": false,
              "isLValue": false,
              "isPure": true,
              "kind": "number",
              "lValueRequested": false,
              "nodeType": "Literal",
              "src": "2129:10:32",
              "typeDescriptions": {
                "typeIdentifier": "t_rational_3141251030_by_1",
                "typeString": "int_const 3141251030"
              },
              "value": "0xbb3bafd6"
            },
            "visibility": "private"
          },
          {
            "constant": true,
            "documentation": {
              "id": 12481,
              "nodeType": "StructuredDocumentation",
              "src": "2146:238:32",
              "text": "  @dev Rarible: RoyaltiesV1\n  bytes4(keccak256('getFeeRecipients(uint256)')) == 0xb9c4d9fb\n  bytes4(keccak256('getFeeBps(uint256)')) == 0x0ebd4c7f\n  => 0xb9c4d9fb ^ 0x0ebd4c7f = 0xb7799584"
            },
            "id": 12484,
            "mutability": "constant",
            "name": "_INTERFACE_ID_ROYALTIES_RARIBLE",
            "nameLocation": "2413:31:32",
            "nodeType": "VariableDeclaration",
            "scope": 13473,
            "src": "2389:68:32",
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_bytes4",
              "typeString": "bytes4"
            },
            "typeName": {
              "id": 12482,
              "name": "bytes4",
              "nodeType": "ElementaryTypeName",
              "src": "2389:6:32",
              "typeDescriptions": {
                "typeIdentifier": "t_bytes4",
                "typeString": "bytes4"
              }
            },
            "value": {
              "hexValue": "30786237373939353834",
              "id": 12483,
              "isConstant": false,
              "isLValue": false,
              "isPure": true,
              "kind": "number",
              "lValueRequested": false,
              "nodeType": "Literal",
              "src": "2447:10:32",
              "typeDescriptions": {
                "typeIdentifier": "t_rational_3078198660_by_1",
                "typeString": "int_const 3078198660"
              },
              "value": "0xb7799584"
            },
            "visibility": "private"
          },
          {
            "constant": true,
            "documentation": {
              "id": 12485,
              "nodeType": "StructuredDocumentation",
              "src": "2464:144:32",
              "text": "  @dev Foundation\n  bytes4(keccak256('getFees(uint256)')) == 0xd5a06d4c\n  => 0xd5a06d4c = 0xd5a06d4c"
            },
            "id": 12488,
            "mutability": "constant",
            "name": "_INTERFACE_ID_ROYALTIES_FOUNDATION",
            "nameLocation": "2637:34:32",
            "nodeType": "VariableDeclaration",
            "scope": 13473,
            "src": "2613:71:32",
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_bytes4",
              "typeString": "bytes4"
            },
            "typeName": {
              "id": 12486,
              "name": "bytes4",
              "nodeType": "ElementaryTypeName",
              "src": "2613:6:32",
              "typeDescriptions": {
                "typeIdentifier": "t_bytes4",
                "typeString": "bytes4"
              }
            },
            "value": {
              "hexValue": "30786435613036643463",
              "id": 12487,
              "isConstant": false,
              "isLValue": false,
              "isPure": true,
              "kind": "number",
              "lValueRequested": false,
              "nodeType": "Literal",
              "src": "2674:10:32",
              "typeDescriptions": {
                "typeIdentifier": "t_rational_3584060748_by_1",
                "typeString": "int_const 3584060748"
              },
              "value": "0xd5a06d4c"
            },
            "visibility": "private"
          },
          {
            "constant": true,
            "documentation": {
              "id": 12489,
              "nodeType": "StructuredDocumentation",
              "src": "2691:152:32",
              "text": "  @dev EIP-2981\n bytes4(keccak256(\"royaltyInfo(uint256,uint256)\")) == 0x2a55205a\n => 0x2a55205a = 0x2a55205a"
            },
            "id": 12492,
            "mutability": "constant",
            "name": "_INTERFACE_ID_ROYALTIES_EIP2981",
            "nameLocation": "2872:31:32",
            "nodeType": "VariableDeclaration",
            "scope": 13473,
            "src": "2848:68:32",
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_bytes4",
              "typeString": "bytes4"
            },
            "typeName": {
              "id": 12490,
              "name": "bytes4",
              "nodeType": "ElementaryTypeName",
              "src": "2848:6:32",
              "typeDescriptions": {
                "typeIdentifier": "t_bytes4",
                "typeString": "bytes4"
              }
            },
            "value": {
              "hexValue": "30783261353532303561",
              "id": 12491,
              "isConstant": false,
              "isLValue": false,
              "isPure": true,
              "kind": "number",
              "lValueRequested": false,
              "nodeType": "Literal",
              "src": "2906:10:32",
              "typeDescriptions": {
                "typeIdentifier": "t_rational_710221914_by_1",
                "typeString": "int_const 710221914"
              },
              "value": "0x2a55205a"
            },
            "visibility": "private"
          },
          {
            "baseFunctions": [
              2131,
              2337
            ],
            "body": {
              "id": 12535,
              "nodeType": "Block",
              "src": "3092:375:32",
              "statements": [
                {
                  "expression": {
                    "commonType": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    },
                    "id": 12533,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "commonType": {
                        "typeIdentifier": "t_bool",
                        "typeString": "bool"
                      },
                      "id": 12529,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "leftExpression": {
                        "commonType": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        "id": 12525,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftExpression": {
                          "commonType": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          },
                          "id": 12521,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftExpression": {
                            "commonType": {
                              "typeIdentifier": "t_bool",
                              "typeString": "bool"
                            },
                            "id": 12517,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "leftExpression": {
                              "commonType": {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              },
                              "id": 12512,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "leftExpression": {
                                "commonType": {
                                  "typeIdentifier": "t_bytes4",
                                  "typeString": "bytes4"
                                },
                                "id": 12508,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "leftExpression": {
                                  "id": 12503,
                                  "name": "interfaceId",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 12495,
                                  "src": "3109:11:32",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_bytes4",
                                    "typeString": "bytes4"
                                  }
                                },
                                "nodeType": "BinaryOperation",
                                "operator": "==",
                                "rightExpression": {
                                  "expression": {
                                    "arguments": [
                                      {
                                        "id": 12505,
                                        "name": "ICreatorCore",
                                        "nodeType": "Identifier",
                                        "overloadedDeclarations": [],
                                        "referencedDeclaration": 15197,
                                        "src": "3129:12:32",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_type$_t_contract$_ICreatorCore_$15197_$",
                                          "typeString": "type(contract ICreatorCore)"
                                        }
                                      }
                                    ],
                                    "expression": {
                                      "argumentTypes": [
                                        {
                                          "typeIdentifier": "t_type$_t_contract$_ICreatorCore_$15197_$",
                                          "typeString": "type(contract ICreatorCore)"
                                        }
                                      ],
                                      "id": 12504,
                                      "name": "type",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 4294967269,
                                      "src": "3124:4:32",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_function_metatype_pure$__$returns$__$",
                                        "typeString": "function () pure"
                                      }
                                    },
                                    "id": 12506,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": true,
                                    "kind": "functionCall",
                                    "lValueRequested": false,
                                    "nameLocations": [],
                                    "names": [],
                                    "nodeType": "FunctionCall",
                                    "src": "3124:18:32",
                                    "tryCall": false,
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_magic_meta_type_t_contract$_ICreatorCore_$15197",
                                      "typeString": "type(contract ICreatorCore)"
                                    }
                                  },
                                  "id": 12507,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": true,
                                  "lValueRequested": false,
                                  "memberLocation": "3143:11:32",
                                  "memberName": "interfaceId",
                                  "nodeType": "MemberAccess",
                                  "src": "3124:30:32",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_bytes4",
                                    "typeString": "bytes4"
                                  }
                                },
                                "src": "3109:45:32",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_bool",
                                  "typeString": "bool"
                                }
                              },
                              "nodeType": "BinaryOperation",
                              "operator": "||",
                              "rightExpression": {
                                "commonType": {
                                  "typeIdentifier": "t_bytes4",
                                  "typeString": "bytes4"
                                },
                                "id": 12511,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "leftExpression": {
                                  "id": 12509,
                                  "name": "interfaceId",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 12495,
                                  "src": "3158:11:32",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_bytes4",
                                    "typeString": "bytes4"
                                  }
                                },
                                "nodeType": "BinaryOperation",
                                "operator": "==",
                                "rightExpression": {
                                  "id": 12510,
                                  "name": "_CREATOR_CORE_V1",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 12476,
                                  "src": "3173:16:32",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_bytes4",
                                    "typeString": "bytes4"
                                  }
                                },
                                "src": "3158:31:32",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_bool",
                                  "typeString": "bool"
                                }
                              },
                              "src": "3109:80:32",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              }
                            },
                            "nodeType": "BinaryOperation",
                            "operator": "||",
                            "rightExpression": {
                              "arguments": [
                                {
                                  "id": 12515,
                                  "name": "interfaceId",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 12495,
                                  "src": "3217:11:32",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_bytes4",
                                    "typeString": "bytes4"
                                  }
                                }
                              ],
                              "expression": {
                                "argumentTypes": [
                                  {
                                    "typeIdentifier": "t_bytes4",
                                    "typeString": "bytes4"
                                  }
                                ],
                                "expression": {
                                  "id": 12513,
                                  "name": "super",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 4294967271,
                                  "src": "3193:5:32",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_type$_t_super$_CreatorCore_$13473_$",
                                    "typeString": "type(contract super CreatorCore)"
                                  }
                                },
                                "id": 12514,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "memberLocation": "3199:17:32",
                                "memberName": "supportsInterface",
                                "nodeType": "MemberAccess",
                                "referencedDeclaration": 2131,
                                "src": "3193:23:32",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_function_internal_view$_t_bytes4_$returns$_t_bool_$",
                                  "typeString": "function (bytes4) view returns (bool)"
                                }
                              },
                              "id": 12516,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "kind": "functionCall",
                              "lValueRequested": false,
                              "nameLocations": [],
                              "names": [],
                              "nodeType": "FunctionCall",
                              "src": "3193:36:32",
                              "tryCall": false,
                              "typeDescriptions": {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              }
                            },
                            "src": "3109:120:32",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bool",
                              "typeString": "bool"
                            }
                          },
                          "nodeType": "BinaryOperation",
                          "operator": "||",
                          "rightExpression": {
                            "commonType": {
                              "typeIdentifier": "t_bytes4",
                              "typeString": "bytes4"
                            },
                            "id": 12520,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "leftExpression": {
                              "id": 12518,
                              "name": "interfaceId",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 12495,
                              "src": "3245:11:32",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bytes4",
                                "typeString": "bytes4"
                              }
                            },
                            "nodeType": "BinaryOperation",
                            "operator": "==",
                            "rightExpression": {
                              "id": 12519,
                              "name": "_INTERFACE_ID_ROYALTIES_CREATORCORE",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 12480,
                              "src": "3260:35:32",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bytes4",
                                "typeString": "bytes4"
                              }
                            },
                            "src": "3245:50:32",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bool",
                              "typeString": "bool"
                            }
                          },
                          "src": "3109:186:32",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "nodeType": "BinaryOperation",
                        "operator": "||",
                        "rightExpression": {
                          "commonType": {
                            "typeIdentifier": "t_bytes4",
                            "typeString": "bytes4"
                          },
                          "id": 12524,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftExpression": {
                            "id": 12522,
                            "name": "interfaceId",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 12495,
                            "src": "3299:11:32",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bytes4",
                              "typeString": "bytes4"
                            }
                          },
                          "nodeType": "BinaryOperation",
                          "operator": "==",
                          "rightExpression": {
                            "id": 12523,
                            "name": "_INTERFACE_ID_ROYALTIES_RARIBLE",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 12484,
                            "src": "3314:31:32",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bytes4",
                              "typeString": "bytes4"
                            }
                          },
                          "src": "3299:46:32",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "src": "3109:236:32",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      "nodeType": "BinaryOperation",
                      "operator": "||",
                      "rightExpression": {
                        "commonType": {
                          "typeIdentifier": "t_bytes4",
                          "typeString": "bytes4"
                        },
                        "id": 12528,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftExpression": {
                          "id": 12526,
                          "name": "interfaceId",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 12495,
                          "src": "3361:11:32",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bytes4",
                            "typeString": "bytes4"
                          }
                        },
                        "nodeType": "BinaryOperation",
                        "operator": "==",
                        "rightExpression": {
                          "id": 12527,
                          "name": "_INTERFACE_ID_ROYALTIES_FOUNDATION",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 12488,
                          "src": "3376:34:32",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bytes4",
                            "typeString": "bytes4"
                          }
                        },
                        "src": "3361:49:32",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      "src": "3109:301:32",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bool",
                        "typeString": "bool"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "||",
                    "rightExpression": {
                      "commonType": {
                        "typeIdentifier": "t_bytes4",
                        "typeString": "bytes4"
                      },
                      "id": 12532,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "leftExpression": {
                        "id": 12530,
                        "name": "interfaceId",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 12495,
                        "src": "3414:11:32",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes4",
                          "typeString": "bytes4"
                        }
                      },
                      "nodeType": "BinaryOperation",
                      "operator": "==",
                      "rightExpression": {
                        "id": 12531,
                        "name": "_INTERFACE_ID_ROYALTIES_EIP2981",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 12492,
                        "src": "3429:31:32",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes4",
                          "typeString": "bytes4"
                        }
                      },
                      "src": "3414:46:32",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bool",
                        "typeString": "bool"
                      }
                    },
                    "src": "3109:351:32",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "functionReturnParameters": 12502,
                  "id": 12534,
                  "nodeType": "Return",
                  "src": "3102:358:32"
                }
              ]
            },
            "documentation": {
              "id": 12493,
              "nodeType": "StructuredDocumentation",
              "src": "2923:56:32",
              "text": " @dev See {IERC165-supportsInterface}."
            },
            "functionSelector": "01ffc9a7",
            "id": 12536,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "supportsInterface",
            "nameLocation": "2993:17:32",
            "nodeType": "FunctionDefinition",
            "overrides": {
              "id": 12499,
              "nodeType": "OverrideSpecifier",
              "overrides": [
                {
                  "id": 12497,
                  "name": "ERC165",
                  "nameLocations": [
                    "3060:6:32"
                  ],
                  "nodeType": "IdentifierPath",
                  "referencedDeclaration": 2132,
                  "src": "3060:6:32"
                },
                {
                  "id": 12498,
                  "name": "IERC165",
                  "nameLocations": [
                    "3068:7:32"
                  ],
                  "nodeType": "IdentifierPath",
                  "referencedDeclaration": 2338,
                  "src": "3068:7:32"
                }
              ],
              "src": "3051:25:32"
            },
            "parameters": {
              "id": 12496,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 12495,
                  "mutability": "mutable",
                  "name": "interfaceId",
                  "nameLocation": "3018:11:32",
                  "nodeType": "VariableDeclaration",
                  "scope": 12536,
                  "src": "3011:18:32",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes4",
                    "typeString": "bytes4"
                  },
                  "typeName": {
                    "id": 12494,
                    "name": "bytes4",
                    "nodeType": "ElementaryTypeName",
                    "src": "3011:6:32",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes4",
                      "typeString": "bytes4"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "3010:20:32"
            },
            "returnParameters": {
              "id": 12502,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 12501,
                  "mutability": "mutable",
                  "name": "",
                  "nameLocation": "-1:-1:-1",
                  "nodeType": "VariableDeclaration",
                  "scope": 12536,
                  "src": "3086:4:32",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bool",
                    "typeString": "bool"
                  },
                  "typeName": {
                    "id": 12500,
                    "name": "bool",
                    "nodeType": "ElementaryTypeName",
                    "src": "3086:4:32",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "3085:6:32"
            },
            "scope": 13473,
            "src": "2984:483:32",
            "stateMutability": "view",
            "virtual": true,
            "visibility": "public"
          },
          {
            "body": {
              "id": 12549,
              "nodeType": "Block",
              "src": "3608:90:32",
              "statements": [
                {
                  "expression": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "expression": {
                              "id": 12543,
                              "name": "msg",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 4294967281,
                              "src": "3647:3:32",
                              "typeDescriptions": {
                                "typeIdentifier": "t_magic_message",
                                "typeString": "msg"
                              }
                            },
                            "id": 12544,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberLocation": "3651:6:32",
                            "memberName": "sender",
                            "nodeType": "MemberAccess",
                            "src": "3647:10:32",
                            "typeDescriptions": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          }
                        ],
                        "expression": {
                          "argumentTypes": [
                            {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          ],
                          "expression": {
                            "id": 12541,
                            "name": "_extensions",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 12437,
                            "src": "3626:11:32",
                            "typeDescriptions": {
                              "typeIdentifier": "t_struct$_AddressSet_$3529_storage",
                              "typeString": "struct EnumerableSet.AddressSet storage ref"
                            }
                          },
                          "id": 12542,
                          "isConstant": false,
                          "isLValue": true,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberLocation": "3638:8:32",
                          "memberName": "contains",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": 3610,
                          "src": "3626:20:32",
                          "typeDescriptions": {
                            "typeIdentifier": "t_function_internal_view$_t_struct$_AddressSet_$3529_storage_ptr_$_t_address_$returns$_t_bool_$attached_to$_t_struct$_AddressSet_$3529_storage_ptr_$",
                            "typeString": "function (struct EnumerableSet.AddressSet storage pointer,address) view returns (bool)"
                          }
                        },
                        "id": 12545,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "functionCall",
                        "lValueRequested": false,
                        "nameLocations": [],
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "3626:32:32",
                        "tryCall": false,
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      {
                        "hexValue": "4d757374206265207265676973746572656420657874656e73696f6e",
                        "id": 12546,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "string",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "3660:30:32",
                        "typeDescriptions": {
                          "typeIdentifier": "t_stringliteral_5feba5446d49a024c011d96fb2b4cea222ce6e949e033fe53cd137156df8a35f",
                          "typeString": "literal_string \"Must be registered extension\""
                        },
                        "value": "Must be registered extension"
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        {
                          "typeIdentifier": "t_stringliteral_5feba5446d49a024c011d96fb2b4cea222ce6e949e033fe53cd137156df8a35f",
                          "typeString": "literal_string \"Must be registered extension\""
                        }
                      ],
                      "id": 12540,
                      "name": "require",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        4294967278,
                        4294967278
                      ],
                      "referencedDeclaration": 4294967278,
                      "src": "3618:7:32",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                        "typeString": "function (bool,string memory) pure"
                      }
                    },
                    "id": 12547,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "nameLocations": [],
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "3618:73:32",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 12548,
                  "nodeType": "ExpressionStatement",
                  "src": "3618:73:32"
                }
              ]
            },
            "documentation": {
              "id": 12537,
              "nodeType": "StructuredDocumentation",
              "src": "3473:88:32",
              "text": " @dev Only allows registered extensions to call the specified function"
            },
            "id": 12550,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "requireExtension",
            "nameLocation": "3575:16:32",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 12538,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "3591:2:32"
            },
            "returnParameters": {
              "id": 12539,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "3608:0:32"
            },
            "scope": 13473,
            "src": "3566:132:32",
            "stateMutability": "view",
            "virtual": false,
            "visibility": "internal"
          },
          {
            "body": {
              "id": 12565,
              "nodeType": "Block",
              "src": "3833:94:32",
              "statements": [
                {
                  "expression": {
                    "arguments": [
                      {
                        "id": 12561,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "nodeType": "UnaryOperation",
                        "operator": "!",
                        "prefix": true,
                        "src": "3851:43:32",
                        "subExpression": {
                          "arguments": [
                            {
                              "id": 12559,
                              "name": "extension",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 12553,
                              "src": "3884:9:32",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            ],
                            "expression": {
                              "id": 12557,
                              "name": "_blacklistedExtensions",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 12440,
                              "src": "3852:22:32",
                              "typeDescriptions": {
                                "typeIdentifier": "t_struct$_AddressSet_$3529_storage",
                                "typeString": "struct EnumerableSet.AddressSet storage ref"
                              }
                            },
                            "id": 12558,
                            "isConstant": false,
                            "isLValue": true,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberLocation": "3875:8:32",
                            "memberName": "contains",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": 3610,
                            "src": "3852:31:32",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_internal_view$_t_struct$_AddressSet_$3529_storage_ptr_$_t_address_$returns$_t_bool_$attached_to$_t_struct$_AddressSet_$3529_storage_ptr_$",
                              "typeString": "function (struct EnumerableSet.AddressSet storage pointer,address) view returns (bool)"
                            }
                          },
                          "id": 12560,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "nameLocations": [],
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "3852:42:32",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      {
                        "hexValue": "457874656e73696f6e20626c61636b6c6973746564",
                        "id": 12562,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "string",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "3896:23:32",
                        "typeDescriptions": {
                          "typeIdentifier": "t_stringliteral_4beb819a81c47e20a26775f9ad72b3da5e765415ddadbc3186b244e4bc01e621",
                          "typeString": "literal_string \"Extension blacklisted\""
                        },
                        "value": "Extension blacklisted"
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        {
                          "typeIdentifier": "t_stringliteral_4beb819a81c47e20a26775f9ad72b3da5e765415ddadbc3186b244e4bc01e621",
                          "typeString": "literal_string \"Extension blacklisted\""
                        }
                      ],
                      "id": 12556,
                      "name": "require",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        4294967278,
                        4294967278
                      ],
                      "referencedDeclaration": 4294967278,
                      "src": "3843:7:32",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                        "typeString": "function (bool,string memory) pure"
                      }
                    },
                    "id": 12563,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "nameLocations": [],
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "3843:77:32",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 12564,
                  "nodeType": "ExpressionStatement",
                  "src": "3843:77:32"
                }
              ]
            },
            "documentation": {
              "id": 12551,
              "nodeType": "StructuredDocumentation",
              "src": "3704:62:32",
              "text": " @dev Only allows non-blacklisted extensions"
            },
            "id": 12566,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "requireNonBlacklist",
            "nameLocation": "3780:19:32",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 12554,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 12553,
                  "mutability": "mutable",
                  "name": "extension",
                  "nameLocation": "3808:9:32",
                  "nodeType": "VariableDeclaration",
                  "scope": 12566,
                  "src": "3800:17:32",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 12552,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "3800:7:32",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "3799:19:32"
            },
            "returnParameters": {
              "id": 12555,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "3833:0:32"
            },
            "scope": 13473,
            "src": "3771:156:32",
            "stateMutability": "view",
            "virtual": false,
            "visibility": "internal"
          },
          {
            "baseFunctions": [
              14980
            ],
            "body": {
              "id": 12609,
              "nodeType": "Block",
              "src": "4084:230:32",
              "statements": [
                {
                  "expression": {
                    "id": 12582,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "id": 12574,
                      "name": "extensions",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 12572,
                      "src": "4094:10:32",
                      "typeDescriptions": {
                        "typeIdentifier": "t_array$_t_address_$dyn_memory_ptr",
                        "typeString": "address[] memory"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "arguments": [
                        {
                          "arguments": [],
                          "expression": {
                            "argumentTypes": [],
                            "expression": {
                              "id": 12578,
                              "name": "_extensions",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 12437,
                              "src": "4121:11:32",
                              "typeDescriptions": {
                                "typeIdentifier": "t_struct$_AddressSet_$3529_storage",
                                "typeString": "struct EnumerableSet.AddressSet storage ref"
                              }
                            },
                            "id": 12579,
                            "isConstant": false,
                            "isLValue": true,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberLocation": "4133:6:32",
                            "memberName": "length",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": 3625,
                            "src": "4121:18:32",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_internal_view$_t_struct$_AddressSet_$3529_storage_ptr_$returns$_t_uint256_$attached_to$_t_struct$_AddressSet_$3529_storage_ptr_$",
                              "typeString": "function (struct EnumerableSet.AddressSet storage pointer) view returns (uint256)"
                            }
                          },
                          "id": 12580,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "nameLocations": [],
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "4121:20:32",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        }
                      ],
                      "expression": {
                        "argumentTypes": [
                          {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        ],
                        "id": 12577,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "lValueRequested": false,
                        "nodeType": "NewExpression",
                        "src": "4107:13:32",
                        "typeDescriptions": {
                          "typeIdentifier": "t_function_objectcreation_pure$_t_uint256_$returns$_t_array$_t_address_$dyn_memory_ptr_$",
                          "typeString": "function (uint256) pure returns (address[] memory)"
                        },
                        "typeName": {
                          "baseType": {
                            "id": 12575,
                            "name": "address",
                            "nodeType": "ElementaryTypeName",
                            "src": "4111:7:32",
                            "stateMutability": "nonpayable",
                            "typeDescriptions": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          },
                          "id": 12576,
                          "nodeType": "ArrayTypeName",
                          "src": "4111:9:32",
                          "typeDescriptions": {
                            "typeIdentifier": "t_array$_t_address_$dyn_storage_ptr",
                            "typeString": "address[]"
                          }
                        }
                      },
                      "id": 12581,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "kind": "functionCall",
                      "lValueRequested": false,
                      "nameLocations": [],
                      "names": [],
                      "nodeType": "FunctionCall",
                      "src": "4107:35:32",
                      "tryCall": false,
                      "typeDescriptions": {
                        "typeIdentifier": "t_array$_t_address_$dyn_memory_ptr",
                        "typeString": "address[] memory"
                      }
                    },
                    "src": "4094:48:32",
                    "typeDescriptions": {
                      "typeIdentifier": "t_array$_t_address_$dyn_memory_ptr",
                      "typeString": "address[] memory"
                    }
                  },
                  "id": 12583,
                  "nodeType": "ExpressionStatement",
                  "src": "4094:48:32"
                },
                {
                  "body": {
                    "id": 12605,
                    "nodeType": "Block",
                    "src": "4192:89:32",
                    "statements": [
                      {
                        "expression": {
                          "id": 12599,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftHandSide": {
                            "baseExpression": {
                              "id": 12592,
                              "name": "extensions",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 12572,
                              "src": "4206:10:32",
                              "typeDescriptions": {
                                "typeIdentifier": "t_array$_t_address_$dyn_memory_ptr",
                                "typeString": "address[] memory"
                              }
                            },
                            "id": 12594,
                            "indexExpression": {
                              "id": 12593,
                              "name": "i",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 12585,
                              "src": "4217:1:32",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "isConstant": false,
                            "isLValue": true,
                            "isPure": false,
                            "lValueRequested": true,
                            "nodeType": "IndexAccess",
                            "src": "4206:13:32",
                            "typeDescriptions": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          },
                          "nodeType": "Assignment",
                          "operator": "=",
                          "rightHandSide": {
                            "arguments": [
                              {
                                "id": 12597,
                                "name": "i",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 12585,
                                "src": "4237:1:32",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              }
                            ],
                            "expression": {
                              "argumentTypes": [
                                {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              ],
                              "expression": {
                                "id": 12595,
                                "name": "_extensions",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 12437,
                                "src": "4222:11:32",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_struct$_AddressSet_$3529_storage",
                                  "typeString": "struct EnumerableSet.AddressSet storage ref"
                                }
                              },
                              "id": 12596,
                              "isConstant": false,
                              "isLValue": true,
                              "isPure": false,
                              "lValueRequested": false,
                              "memberLocation": "4234:2:32",
                              "memberName": "at",
                              "nodeType": "MemberAccess",
                              "referencedDeclaration": 3652,
                              "src": "4222:14:32",
                              "typeDescriptions": {
                                "typeIdentifier": "t_function_internal_view$_t_struct$_AddressSet_$3529_storage_ptr_$_t_uint256_$returns$_t_address_$attached_to$_t_struct$_AddressSet_$3529_storage_ptr_$",
                                "typeString": "function (struct EnumerableSet.AddressSet storage pointer,uint256) view returns (address)"
                              }
                            },
                            "id": 12598,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "kind": "functionCall",
                            "lValueRequested": false,
                            "nameLocations": [],
                            "names": [],
                            "nodeType": "FunctionCall",
                            "src": "4222:17:32",
                            "tryCall": false,
                            "typeDescriptions": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          },
                          "src": "4206:33:32",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "id": 12600,
                        "nodeType": "ExpressionStatement",
                        "src": "4206:33:32"
                      },
                      {
                        "id": 12604,
                        "nodeType": "UncheckedBlock",
                        "src": "4253:18:32",
                        "statements": [
                          {
                            "expression": {
                              "id": 12602,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "nodeType": "UnaryOperation",
                              "operator": "++",
                              "prefix": true,
                              "src": "4265:3:32",
                              "subExpression": {
                                "id": 12601,
                                "name": "i",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 12585,
                                "src": "4267:1:32",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "id": 12603,
                            "nodeType": "ExpressionStatement",
                            "src": "4265:3:32"
                          }
                        ]
                      }
                    ]
                  },
                  "condition": {
                    "commonType": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    },
                    "id": 12591,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "id": 12587,
                      "name": "i",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 12585,
                      "src": "4165:1:32",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "<",
                    "rightExpression": {
                      "arguments": [],
                      "expression": {
                        "argumentTypes": [],
                        "expression": {
                          "id": 12588,
                          "name": "_extensions",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 12437,
                          "src": "4169:11:32",
                          "typeDescriptions": {
                            "typeIdentifier": "t_struct$_AddressSet_$3529_storage",
                            "typeString": "struct EnumerableSet.AddressSet storage ref"
                          }
                        },
                        "id": 12589,
                        "isConstant": false,
                        "isLValue": true,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberLocation": "4181:6:32",
                        "memberName": "length",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": 3625,
                        "src": "4169:18:32",
                        "typeDescriptions": {
                          "typeIdentifier": "t_function_internal_view$_t_struct$_AddressSet_$3529_storage_ptr_$returns$_t_uint256_$attached_to$_t_struct$_AddressSet_$3529_storage_ptr_$",
                          "typeString": "function (struct EnumerableSet.AddressSet storage pointer) view returns (uint256)"
                        }
                      },
                      "id": 12590,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "kind": "functionCall",
                      "lValueRequested": false,
                      "nameLocations": [],
                      "names": [],
                      "nodeType": "FunctionCall",
                      "src": "4169:20:32",
                      "tryCall": false,
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "src": "4165:24:32",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "id": 12606,
                  "initializationExpression": {
                    "assignments": [
                      12585
                    ],
                    "declarations": [
                      {
                        "constant": false,
                        "id": 12585,
                        "mutability": "mutable",
                        "name": "i",
                        "nameLocation": "4162:1:32",
                        "nodeType": "VariableDeclaration",
                        "scope": 12606,
                        "src": "4157:6:32",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 12584,
                          "name": "uint",
                          "nodeType": "ElementaryTypeName",
                          "src": "4157:4:32",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "id": 12586,
                    "nodeType": "VariableDeclarationStatement",
                    "src": "4157:6:32"
                  },
                  "nodeType": "ForStatement",
                  "src": "4152:129:32"
                },
                {
                  "expression": {
                    "id": 12607,
                    "name": "extensions",
                    "nodeType": "Identifier",
                    "overloadedDeclarations": [],
                    "referencedDeclaration": 12572,
                    "src": "4297:10:32",
                    "typeDescriptions": {
                      "typeIdentifier": "t_array$_t_address_$dyn_memory_ptr",
                      "typeString": "address[] memory"
                    }
                  },
                  "functionReturnParameters": 12573,
                  "id": 12608,
                  "nodeType": "Return",
                  "src": "4290:17:32"
                }
              ]
            },
            "documentation": {
              "id": 12567,
              "nodeType": "StructuredDocumentation",
              "src": "3936:57:32",
              "text": " @dev See {ICreatorCore-getExtensions}."
            },
            "functionSelector": "83b7db63",
            "id": 12610,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "getExtensions",
            "nameLocation": "4007:13:32",
            "nodeType": "FunctionDefinition",
            "overrides": {
              "id": 12569,
              "nodeType": "OverrideSpecifier",
              "overrides": [],
              "src": "4037:8:32"
            },
            "parameters": {
              "id": 12568,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "4020:2:32"
            },
            "returnParameters": {
              "id": 12573,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 12572,
                  "mutability": "mutable",
                  "name": "extensions",
                  "nameLocation": "4072:10:32",
                  "nodeType": "VariableDeclaration",
                  "scope": 12610,
                  "src": "4055:27:32",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_array$_t_address_$dyn_memory_ptr",
                    "typeString": "address[]"
                  },
                  "typeName": {
                    "baseType": {
                      "id": 12570,
                      "name": "address",
                      "nodeType": "ElementaryTypeName",
                      "src": "4055:7:32",
                      "stateMutability": "nonpayable",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      }
                    },
                    "id": 12571,
                    "nodeType": "ArrayTypeName",
                    "src": "4055:9:32",
                    "typeDescriptions": {
                      "typeIdentifier": "t_array$_t_address_$dyn_storage_ptr",
                      "typeString": "address[]"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "4054:29:32"
            },
            "scope": 13473,
            "src": "3998:316:32",
            "stateMutability": "view",
            "virtual": false,
            "visibility": "external"
          },
          {
            "body": {
              "id": 12663,
              "nodeType": "Block",
              "src": "4482:351:32",
              "statements": [
                {
                  "expression": {
                    "arguments": [
                      {
                        "commonType": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        "id": 12630,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftExpression": {
                          "commonType": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          },
                          "id": 12626,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftExpression": {
                            "id": 12621,
                            "name": "extension",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 12613,
                            "src": "4500:9:32",
                            "typeDescriptions": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          },
                          "nodeType": "BinaryOperation",
                          "operator": "!=",
                          "rightExpression": {
                            "arguments": [
                              {
                                "id": 12624,
                                "name": "this",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 4294967268,
                                "src": "4521:4:32",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_contract$_CreatorCore_$13473",
                                  "typeString": "contract CreatorCore"
                                }
                              }
                            ],
                            "expression": {
                              "argumentTypes": [
                                {
                                  "typeIdentifier": "t_contract$_CreatorCore_$13473",
                                  "typeString": "contract CreatorCore"
                                }
                              ],
                              "id": 12623,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "lValueRequested": false,
                              "nodeType": "ElementaryTypeNameExpression",
                              "src": "4513:7:32",
                              "typeDescriptions": {
                                "typeIdentifier": "t_type$_t_address_$",
                                "typeString": "type(address)"
                              },
                              "typeName": {
                                "id": 12622,
                                "name": "address",
                                "nodeType": "ElementaryTypeName",
                                "src": "4513:7:32",
                                "typeDescriptions": {}
                              }
                            },
                            "id": 12625,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "kind": "typeConversion",
                            "lValueRequested": false,
                            "nameLocations": [],
                            "names": [],
                            "nodeType": "FunctionCall",
                            "src": "4513:13:32",
                            "tryCall": false,
                            "typeDescriptions": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          },
                          "src": "4500:26:32",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "nodeType": "BinaryOperation",
                        "operator": "&&",
                        "rightExpression": {
                          "arguments": [],
                          "expression": {
                            "argumentTypes": [],
                            "expression": {
                              "id": 12627,
                              "name": "extension",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 12613,
                              "src": "4530:9:32",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            "id": 12628,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberLocation": "4540:10:32",
                            "memberName": "isContract",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": 736,
                            "src": "4530:20:32",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_internal_view$_t_address_$returns$_t_bool_$attached_to$_t_address_$",
                              "typeString": "function (address) view returns (bool)"
                            }
                          },
                          "id": 12629,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "nameLocations": [],
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "4530:22:32",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "src": "4500:52:32",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      {
                        "hexValue": "496e76616c6964",
                        "id": 12631,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "string",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "4554:9:32",
                        "typeDescriptions": {
                          "typeIdentifier": "t_stringliteral_c84d91f537f720db0d8ff8472db06e97a59d22ac83366d0af861134338d0e345",
                          "typeString": "literal_string \"Invalid\""
                        },
                        "value": "Invalid"
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        {
                          "typeIdentifier": "t_stringliteral_c84d91f537f720db0d8ff8472db06e97a59d22ac83366d0af861134338d0e345",
                          "typeString": "literal_string \"Invalid\""
                        }
                      ],
                      "id": 12620,
                      "name": "require",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        4294967278,
                        4294967278
                      ],
                      "referencedDeclaration": 4294967278,
                      "src": "4492:7:32",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                        "typeString": "function (bool,string memory) pure"
                      }
                    },
                    "id": 12632,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "nameLocations": [],
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "4492:72:32",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 12633,
                  "nodeType": "ExpressionStatement",
                  "src": "4492:72:32"
                },
                {
                  "eventCall": {
                    "arguments": [
                      {
                        "id": 12635,
                        "name": "extension",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 12613,
                        "src": "4599:9:32",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "expression": {
                          "id": 12636,
                          "name": "msg",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 4294967281,
                          "src": "4610:3:32",
                          "typeDescriptions": {
                            "typeIdentifier": "t_magic_message",
                            "typeString": "msg"
                          }
                        },
                        "id": 12637,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberLocation": "4614:6:32",
                        "memberName": "sender",
                        "nodeType": "MemberAccess",
                        "src": "4610:10:32",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      ],
                      "id": 12634,
                      "name": "ExtensionRegistered",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 14915,
                      "src": "4579:19:32",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_event_nonpayable$_t_address_$_t_address_$returns$__$",
                        "typeString": "function (address,address)"
                      }
                    },
                    "id": 12638,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "nameLocations": [],
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "4579:42:32",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 12639,
                  "nodeType": "EmitStatement",
                  "src": "4574:47:32"
                },
                {
                  "expression": {
                    "id": 12644,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "baseExpression": {
                        "id": 12640,
                        "name": "_extensionBaseURI",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 12444,
                        "src": "4631:17:32",
                        "typeDescriptions": {
                          "typeIdentifier": "t_mapping$_t_address_$_t_string_storage_$",
                          "typeString": "mapping(address => string storage ref)"
                        }
                      },
                      "id": 12642,
                      "indexExpression": {
                        "id": 12641,
                        "name": "extension",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 12613,
                        "src": "4649:9:32",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": true,
                      "nodeType": "IndexAccess",
                      "src": "4631:28:32",
                      "typeDescriptions": {
                        "typeIdentifier": "t_string_storage",
                        "typeString": "string storage ref"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "id": 12643,
                      "name": "baseURI",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 12615,
                      "src": "4662:7:32",
                      "typeDescriptions": {
                        "typeIdentifier": "t_string_calldata_ptr",
                        "typeString": "string calldata"
                      }
                    },
                    "src": "4631:38:32",
                    "typeDescriptions": {
                      "typeIdentifier": "t_string_storage",
                      "typeString": "string storage ref"
                    }
                  },
                  "id": 12645,
                  "nodeType": "ExpressionStatement",
                  "src": "4631:38:32"
                },
                {
                  "expression": {
                    "id": 12650,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "baseExpression": {
                        "id": 12646,
                        "name": "_extensionBaseURIIdentical",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 12448,
                        "src": "4679:26:32",
                        "typeDescriptions": {
                          "typeIdentifier": "t_mapping$_t_address_$_t_bool_$",
                          "typeString": "mapping(address => bool)"
                        }
                      },
                      "id": 12648,
                      "indexExpression": {
                        "id": 12647,
                        "name": "extension",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 12613,
                        "src": "4706:9:32",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": true,
                      "nodeType": "IndexAccess",
                      "src": "4679:37:32",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bool",
                        "typeString": "bool"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "id": 12649,
                      "name": "baseURIIdentical",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 12617,
                      "src": "4719:16:32",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bool",
                        "typeString": "bool"
                      }
                    },
                    "src": "4679:56:32",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "id": 12651,
                  "nodeType": "ExpressionStatement",
                  "src": "4679:56:32"
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "id": 12655,
                        "name": "extension",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 12613,
                        "src": "4761:9:32",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      ],
                      "expression": {
                        "id": 12652,
                        "name": "_extensions",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 12437,
                        "src": "4745:11:32",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_AddressSet_$3529_storage",
                          "typeString": "struct EnumerableSet.AddressSet storage ref"
                        }
                      },
                      "id": 12654,
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberLocation": "4757:3:32",
                      "memberName": "add",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 3556,
                      "src": "4745:15:32",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_nonpayable$_t_struct$_AddressSet_$3529_storage_ptr_$_t_address_$returns$_t_bool_$attached_to$_t_struct$_AddressSet_$3529_storage_ptr_$",
                        "typeString": "function (struct EnumerableSet.AddressSet storage pointer,address) returns (bool)"
                      }
                    },
                    "id": 12656,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "nameLocations": [],
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "4745:26:32",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "id": 12657,
                  "nodeType": "ExpressionStatement",
                  "src": "4745:26:32"
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "id": 12659,
                        "name": "extension",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 12613,
                        "src": "4810:9:32",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "hexValue": "74727565",
                        "id": 12660,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "bool",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "4821:4:32",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        "value": "true"
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      ],
                      "id": 12658,
                      "name": "_setApproveTransferExtension",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 12689,
                      "src": "4781:28:32",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_nonpayable$_t_address_$_t_bool_$returns$__$",
                        "typeString": "function (address,bool)"
                      }
                    },
                    "id": 12661,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "nameLocations": [],
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "4781:45:32",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 12662,
                  "nodeType": "ExpressionStatement",
                  "src": "4781:45:32"
                }
              ]
            },
            "documentation": {
              "id": 12611,
              "nodeType": "StructuredDocumentation",
              "src": "4320:45:32",
              "text": " @dev Register an extension"
            },
            "id": 12664,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "_registerExtension",
            "nameLocation": "4379:18:32",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 12618,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 12613,
                  "mutability": "mutable",
                  "name": "extension",
                  "nameLocation": "4406:9:32",
                  "nodeType": "VariableDeclaration",
                  "scope": 12664,
                  "src": "4398:17:32",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 12612,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "4398:7:32",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 12615,
                  "mutability": "mutable",
                  "name": "baseURI",
                  "nameLocation": "4433:7:32",
                  "nodeType": "VariableDeclaration",
                  "scope": 12664,
                  "src": "4417:23:32",
                  "stateVariable": false,
                  "storageLocation": "calldata",
                  "typeDescriptions": {
                    "typeIdentifier": "t_string_calldata_ptr",
                    "typeString": "string"
                  },
                  "typeName": {
                    "id": 12614,
                    "name": "string",
                    "nodeType": "ElementaryTypeName",
                    "src": "4417:6:32",
                    "typeDescriptions": {
                      "typeIdentifier": "t_string_storage_ptr",
                      "typeString": "string"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 12617,
                  "mutability": "mutable",
                  "name": "baseURIIdentical",
                  "nameLocation": "4447:16:32",
                  "nodeType": "VariableDeclaration",
                  "scope": 12664,
                  "src": "4442:21:32",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bool",
                    "typeString": "bool"
                  },
                  "typeName": {
                    "id": 12616,
                    "name": "bool",
                    "nodeType": "ElementaryTypeName",
                    "src": "4442:4:32",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "4397:67:32"
            },
            "returnParameters": {
              "id": 12619,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "4482:0:32"
            },
            "scope": 13473,
            "src": "4370:463:32",
            "stateMutability": "nonpayable",
            "virtual": true,
            "visibility": "internal"
          },
          {
            "baseFunctions": [
              15092
            ],
            "body": {
              "id": 12680,
              "nodeType": "Block",
              "src": "4984:94:32",
              "statements": [
                {
                  "expression": {
                    "arguments": [],
                    "expression": {
                      "argumentTypes": [],
                      "id": 12671,
                      "name": "requireExtension",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 12550,
                      "src": "4994:16:32",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_view$__$returns$__$",
                        "typeString": "function () view"
                      }
                    },
                    "id": 12672,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "nameLocations": [],
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "4994:18:32",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 12673,
                  "nodeType": "ExpressionStatement",
                  "src": "4994:18:32"
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "expression": {
                          "id": 12675,
                          "name": "msg",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 4294967281,
                          "src": "5051:3:32",
                          "typeDescriptions": {
                            "typeIdentifier": "t_magic_message",
                            "typeString": "msg"
                          }
                        },
                        "id": 12676,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberLocation": "5055:6:32",
                        "memberName": "sender",
                        "nodeType": "MemberAccess",
                        "src": "5051:10:32",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "id": 12677,
                        "name": "enabled",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 12667,
                        "src": "5063:7:32",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      ],
                      "id": 12674,
                      "name": "_setApproveTransferExtension",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 12689,
                      "src": "5022:28:32",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_nonpayable$_t_address_$_t_bool_$returns$__$",
                        "typeString": "function (address,bool)"
                      }
                    },
                    "id": 12678,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "nameLocations": [],
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "5022:49:32",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 12679,
                  "nodeType": "ExpressionStatement",
                  "src": "5022:49:32"
                }
              ]
            },
            "documentation": {
              "id": 12665,
              "nodeType": "StructuredDocumentation",
              "src": "4839:71:32",
              "text": " @dev See {ICreatorCore-setApproveTransferExtension}."
            },
            "functionSelector": "ac0c8cfa",
            "id": 12681,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "setApproveTransferExtension",
            "nameLocation": "4924:27:32",
            "nodeType": "FunctionDefinition",
            "overrides": {
              "id": 12669,
              "nodeType": "OverrideSpecifier",
              "overrides": [],
              "src": "4975:8:32"
            },
            "parameters": {
              "id": 12668,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 12667,
                  "mutability": "mutable",
                  "name": "enabled",
                  "nameLocation": "4957:7:32",
                  "nodeType": "VariableDeclaration",
                  "scope": 12681,
                  "src": "4952:12:32",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bool",
                    "typeString": "bool"
                  },
                  "typeName": {
                    "id": 12666,
                    "name": "bool",
                    "nodeType": "ElementaryTypeName",
                    "src": "4952:4:32",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "4951:14:32"
            },
            "returnParameters": {
              "id": 12670,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "4984:0:32"
            },
            "scope": 13473,
            "src": "4915:163:32",
            "stateMutability": "nonpayable",
            "virtual": false,
            "visibility": "external"
          },
          {
            "documentation": {
              "id": 12682,
              "nodeType": "StructuredDocumentation",
              "src": "5084:116:32",
              "text": " @dev Set whether or not tokens minted by the extension defers transfer approvals to the extension"
            },
            "id": 12689,
            "implemented": false,
            "kind": "function",
            "modifiers": [],
            "name": "_setApproveTransferExtension",
            "nameLocation": "5214:28:32",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 12687,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 12684,
                  "mutability": "mutable",
                  "name": "extension",
                  "nameLocation": "5251:9:32",
                  "nodeType": "VariableDeclaration",
                  "scope": 12689,
                  "src": "5243:17:32",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 12683,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "5243:7:32",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 12686,
                  "mutability": "mutable",
                  "name": "enabled",
                  "nameLocation": "5267:7:32",
                  "nodeType": "VariableDeclaration",
                  "scope": 12689,
                  "src": "5262:12:32",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bool",
                    "typeString": "bool"
                  },
                  "typeName": {
                    "id": 12685,
                    "name": "bool",
                    "nodeType": "ElementaryTypeName",
                    "src": "5262:4:32",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "5242:33:32"
            },
            "returnParameters": {
              "id": 12688,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "5292:0:32"
            },
            "scope": 13473,
            "src": "5205:88:32",
            "stateMutability": "nonpayable",
            "virtual": true,
            "visibility": "internal"
          },
          {
            "body": {
              "id": 12707,
              "nodeType": "Block",
              "src": "5409:105:32",
              "statements": [
                {
                  "eventCall": {
                    "arguments": [
                      {
                        "id": 12696,
                        "name": "extension",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 12692,
                        "src": "5446:9:32",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "expression": {
                          "id": 12697,
                          "name": "msg",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 4294967281,
                          "src": "5457:3:32",
                          "typeDescriptions": {
                            "typeIdentifier": "t_magic_message",
                            "typeString": "msg"
                          }
                        },
                        "id": 12698,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberLocation": "5461:6:32",
                        "memberName": "sender",
                        "nodeType": "MemberAccess",
                        "src": "5457:10:32",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      ],
                      "id": 12695,
                      "name": "ExtensionUnregistered",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 14921,
                      "src": "5424:21:32",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_event_nonpayable$_t_address_$_t_address_$returns$__$",
                        "typeString": "function (address,address)"
                      }
                    },
                    "id": 12699,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "nameLocations": [],
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "5424:44:32",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 12700,
                  "nodeType": "EmitStatement",
                  "src": "5419:49:32"
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "id": 12704,
                        "name": "extension",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 12692,
                        "src": "5497:9:32",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      ],
                      "expression": {
                        "id": 12701,
                        "name": "_extensions",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 12437,
                        "src": "5478:11:32",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_AddressSet_$3529_storage",
                          "typeString": "struct EnumerableSet.AddressSet storage ref"
                        }
                      },
                      "id": 12703,
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberLocation": "5490:6:32",
                      "memberName": "remove",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 3583,
                      "src": "5478:18:32",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_nonpayable$_t_struct$_AddressSet_$3529_storage_ptr_$_t_address_$returns$_t_bool_$attached_to$_t_struct$_AddressSet_$3529_storage_ptr_$",
                        "typeString": "function (struct EnumerableSet.AddressSet storage pointer,address) returns (bool)"
                      }
                    },
                    "id": 12705,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "nameLocations": [],
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "5478:29:32",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "id": 12706,
                  "nodeType": "ExpressionStatement",
                  "src": "5478:29:32"
                }
              ]
            },
            "documentation": {
              "id": 12690,
              "nodeType": "StructuredDocumentation",
              "src": "5299:47:32",
              "text": " @dev Unregister an extension"
            },
            "id": 12708,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "_unregisterExtension",
            "nameLocation": "5360:20:32",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 12693,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 12692,
                  "mutability": "mutable",
                  "name": "extension",
                  "nameLocation": "5389:9:32",
                  "nodeType": "VariableDeclaration",
                  "scope": 12708,
                  "src": "5381:17:32",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 12691,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "5381:7:32",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "5380:19:32"
            },
            "returnParameters": {
              "id": 12694,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "5409:0:32"
            },
            "scope": 13473,
            "src": "5351:163:32",
            "stateMutability": "nonpayable",
            "virtual": false,
            "visibility": "internal"
          },
          {
            "body": {
              "id": 12768,
              "nodeType": "Block",
              "src": "5628:444:32",
              "statements": [
                {
                  "expression": {
                    "arguments": [
                      {
                        "commonType": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        "id": 12727,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftExpression": {
                          "commonType": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          },
                          "id": 12720,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftExpression": {
                            "id": 12715,
                            "name": "extension",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 12711,
                            "src": "5645:9:32",
                            "typeDescriptions": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          },
                          "nodeType": "BinaryOperation",
                          "operator": "!=",
                          "rightExpression": {
                            "arguments": [
                              {
                                "hexValue": "30",
                                "id": 12718,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": true,
                                "kind": "number",
                                "lValueRequested": false,
                                "nodeType": "Literal",
                                "src": "5666:1:32",
                                "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": 12717,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "lValueRequested": false,
                              "nodeType": "ElementaryTypeNameExpression",
                              "src": "5658:7:32",
                              "typeDescriptions": {
                                "typeIdentifier": "t_type$_t_address_$",
                                "typeString": "type(address)"
                              },
                              "typeName": {
                                "id": 12716,
                                "name": "address",
                                "nodeType": "ElementaryTypeName",
                                "src": "5658:7:32",
                                "typeDescriptions": {}
                              }
                            },
                            "id": 12719,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "kind": "typeConversion",
                            "lValueRequested": false,
                            "nameLocations": [],
                            "names": [],
                            "nodeType": "FunctionCall",
                            "src": "5658:10:32",
                            "tryCall": false,
                            "typeDescriptions": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          },
                          "src": "5645:23:32",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "nodeType": "BinaryOperation",
                        "operator": "&&",
                        "rightExpression": {
                          "commonType": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          },
                          "id": 12726,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftExpression": {
                            "id": 12721,
                            "name": "extension",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 12711,
                            "src": "5672:9:32",
                            "typeDescriptions": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          },
                          "nodeType": "BinaryOperation",
                          "operator": "!=",
                          "rightExpression": {
                            "arguments": [
                              {
                                "id": 12724,
                                "name": "this",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 4294967268,
                                "src": "5693:4:32",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_contract$_CreatorCore_$13473",
                                  "typeString": "contract CreatorCore"
                                }
                              }
                            ],
                            "expression": {
                              "argumentTypes": [
                                {
                                  "typeIdentifier": "t_contract$_CreatorCore_$13473",
                                  "typeString": "contract CreatorCore"
                                }
                              ],
                              "id": 12723,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "lValueRequested": false,
                              "nodeType": "ElementaryTypeNameExpression",
                              "src": "5685:7:32",
                              "typeDescriptions": {
                                "typeIdentifier": "t_type$_t_address_$",
                                "typeString": "type(address)"
                              },
                              "typeName": {
                                "id": 12722,
                                "name": "address",
                                "nodeType": "ElementaryTypeName",
                                "src": "5685:7:32",
                                "typeDescriptions": {}
                              }
                            },
                            "id": 12725,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "kind": "typeConversion",
                            "lValueRequested": false,
                            "nameLocations": [],
                            "names": [],
                            "nodeType": "FunctionCall",
                            "src": "5685:13:32",
                            "tryCall": false,
                            "typeDescriptions": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          },
                          "src": "5672:26:32",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "src": "5645:53:32",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      {
                        "hexValue": "43616e6e6f7420626c61636b6c69737420796f757273656c66",
                        "id": 12728,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "string",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "5700:27:32",
                        "typeDescriptions": {
                          "typeIdentifier": "t_stringliteral_0cc452069841e70d1cdcec58868ea025555fa12c1e760cb45ef052b3f01f1f1e",
                          "typeString": "literal_string \"Cannot blacklist yourself\""
                        },
                        "value": "Cannot blacklist yourself"
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        {
                          "typeIdentifier": "t_stringliteral_0cc452069841e70d1cdcec58868ea025555fa12c1e760cb45ef052b3f01f1f1e",
                          "typeString": "literal_string \"Cannot blacklist yourself\""
                        }
                      ],
                      "id": 12714,
                      "name": "require",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        4294967278,
                        4294967278
                      ],
                      "referencedDeclaration": 4294967278,
                      "src": "5637:7:32",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                        "typeString": "function (bool,string memory) pure"
                      }
                    },
                    "id": 12729,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "nameLocations": [],
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "5637:91:32",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 12730,
                  "nodeType": "ExpressionStatement",
                  "src": "5637:91:32"
                },
                {
                  "condition": {
                    "arguments": [
                      {
                        "id": 12733,
                        "name": "extension",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 12711,
                        "src": "5762:9:32",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      ],
                      "expression": {
                        "id": 12731,
                        "name": "_extensions",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 12437,
                        "src": "5741:11:32",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_AddressSet_$3529_storage",
                          "typeString": "struct EnumerableSet.AddressSet storage ref"
                        }
                      },
                      "id": 12732,
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberLocation": "5753:8:32",
                      "memberName": "contains",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 3610,
                      "src": "5741:20:32",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_view$_t_struct$_AddressSet_$3529_storage_ptr_$_t_address_$returns$_t_bool_$attached_to$_t_struct$_AddressSet_$3529_storage_ptr_$",
                        "typeString": "function (struct EnumerableSet.AddressSet storage pointer,address) view returns (bool)"
                      }
                    },
                    "id": 12734,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "nameLocations": [],
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "5741:31:32",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "id": 12748,
                  "nodeType": "IfStatement",
                  "src": "5737:151:32",
                  "trueBody": {
                    "id": 12747,
                    "nodeType": "Block",
                    "src": "5774:114:32",
                    "statements": [
                      {
                        "eventCall": {
                          "arguments": [
                            {
                              "id": 12736,
                              "name": "extension",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 12711,
                              "src": "5814:9:32",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            {
                              "expression": {
                                "id": 12737,
                                "name": "msg",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 4294967281,
                                "src": "5825:3:32",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_magic_message",
                                  "typeString": "msg"
                                }
                              },
                              "id": 12738,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "memberLocation": "5829:6:32",
                              "memberName": "sender",
                              "nodeType": "MemberAccess",
                              "src": "5825:10:32",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              },
                              {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            ],
                            "id": 12735,
                            "name": "ExtensionUnregistered",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 14921,
                            "src": "5792:21:32",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_event_nonpayable$_t_address_$_t_address_$returns$__$",
                              "typeString": "function (address,address)"
                            }
                          },
                          "id": 12739,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "nameLocations": [],
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "5792:44:32",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 12740,
                        "nodeType": "EmitStatement",
                        "src": "5787:49:32"
                      },
                      {
                        "expression": {
                          "arguments": [
                            {
                              "id": 12744,
                              "name": "extension",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 12711,
                              "src": "5868:9:32",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            ],
                            "expression": {
                              "id": 12741,
                              "name": "_extensions",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 12437,
                              "src": "5849:11:32",
                              "typeDescriptions": {
                                "typeIdentifier": "t_struct$_AddressSet_$3529_storage",
                                "typeString": "struct EnumerableSet.AddressSet storage ref"
                              }
                            },
                            "id": 12743,
                            "isConstant": false,
                            "isLValue": true,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberLocation": "5861:6:32",
                            "memberName": "remove",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": 3583,
                            "src": "5849:18:32",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_internal_nonpayable$_t_struct$_AddressSet_$3529_storage_ptr_$_t_address_$returns$_t_bool_$attached_to$_t_struct$_AddressSet_$3529_storage_ptr_$",
                              "typeString": "function (struct EnumerableSet.AddressSet storage pointer,address) returns (bool)"
                            }
                          },
                          "id": 12745,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "nameLocations": [],
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "5849:29:32",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "id": 12746,
                        "nodeType": "ExpressionStatement",
                        "src": "5849:29:32"
                      }
                    ]
                  }
                },
                {
                  "condition": {
                    "id": 12753,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "nodeType": "UnaryOperation",
                    "operator": "!",
                    "prefix": true,
                    "src": "5900:43:32",
                    "subExpression": {
                      "arguments": [
                        {
                          "id": 12751,
                          "name": "extension",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 12711,
                          "src": "5933:9:32",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        }
                      ],
                      "expression": {
                        "argumentTypes": [
                          {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        ],
                        "expression": {
                          "id": 12749,
                          "name": "_blacklistedExtensions",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 12440,
                          "src": "5901:22:32",
                          "typeDescriptions": {
                            "typeIdentifier": "t_struct$_AddressSet_$3529_storage",
                            "typeString": "struct EnumerableSet.AddressSet storage ref"
                          }
                        },
                        "id": 12750,
                        "isConstant": false,
                        "isLValue": true,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberLocation": "5924:8:32",
                        "memberName": "contains",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": 3610,
                        "src": "5901:31:32",
                        "typeDescriptions": {
                          "typeIdentifier": "t_function_internal_view$_t_struct$_AddressSet_$3529_storage_ptr_$_t_address_$returns$_t_bool_$attached_to$_t_struct$_AddressSet_$3529_storage_ptr_$",
                          "typeString": "function (struct EnumerableSet.AddressSet storage pointer,address) view returns (bool)"
                        }
                      },
                      "id": 12752,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "kind": "functionCall",
                      "lValueRequested": false,
                      "nameLocations": [],
                      "names": [],
                      "nodeType": "FunctionCall",
                      "src": "5901:42:32",
                      "tryCall": false,
                      "typeDescriptions": {
                        "typeIdentifier": "t_bool",
                        "typeString": "bool"
                      }
                    },
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "id": 12767,
                  "nodeType": "IfStatement",
                  "src": "5896:170:32",
                  "trueBody": {
                    "id": 12766,
                    "nodeType": "Block",
                    "src": "5945:121:32",
                    "statements": [
                      {
                        "eventCall": {
                          "arguments": [
                            {
                              "id": 12755,
                              "name": "extension",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 12711,
                              "src": "5984:9:32",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            {
                              "expression": {
                                "id": 12756,
                                "name": "msg",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 4294967281,
                                "src": "5995:3:32",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_magic_message",
                                  "typeString": "msg"
                                }
                              },
                              "id": 12757,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "memberLocation": "5999:6:32",
                              "memberName": "sender",
                              "nodeType": "MemberAccess",
                              "src": "5995:10:32",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              },
                              {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            ],
                            "id": 12754,
                            "name": "ExtensionBlacklisted",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 14927,
                            "src": "5963:20:32",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_event_nonpayable$_t_address_$_t_address_$returns$__$",
                              "typeString": "function (address,address)"
                            }
                          },
                          "id": 12758,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "nameLocations": [],
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "5963:43:32",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 12759,
                        "nodeType": "EmitStatement",
                        "src": "5958:48:32"
                      },
                      {
                        "expression": {
                          "arguments": [
                            {
                              "id": 12763,
                              "name": "extension",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 12711,
                              "src": "6046:9:32",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            ],
                            "expression": {
                              "id": 12760,
                              "name": "_blacklistedExtensions",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 12440,
                              "src": "6019:22:32",
                              "typeDescriptions": {
                                "typeIdentifier": "t_struct$_AddressSet_$3529_storage",
                                "typeString": "struct EnumerableSet.AddressSet storage ref"
                              }
                            },
                            "id": 12762,
                            "isConstant": false,
                            "isLValue": true,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberLocation": "6042:3:32",
                            "memberName": "add",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": 3556,
                            "src": "6019:26:32",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_internal_nonpayable$_t_struct$_AddressSet_$3529_storage_ptr_$_t_address_$returns$_t_bool_$attached_to$_t_struct$_AddressSet_$3529_storage_ptr_$",
                              "typeString": "function (struct EnumerableSet.AddressSet storage pointer,address) returns (bool)"
                            }
                          },
                          "id": 12764,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "nameLocations": [],
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "6019:37:32",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "id": 12765,
                        "nodeType": "ExpressionStatement",
                        "src": "6019:37:32"
                      }
                    ]
                  }
                }
              ]
            },
            "documentation": {
              "id": 12709,
              "nodeType": "StructuredDocumentation",
              "src": "5520:46:32",
              "text": " @dev Blacklist an extension"
            },
            "id": 12769,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "_blacklistExtension",
            "nameLocation": "5580:19:32",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 12712,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 12711,
                  "mutability": "mutable",
                  "name": "extension",
                  "nameLocation": "5608:9:32",
                  "nodeType": "VariableDeclaration",
                  "scope": 12769,
                  "src": "5600:17:32",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 12710,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "5600:7:32",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "5599:19:32"
            },
            "returnParameters": {
              "id": 12713,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "5628:0:32"
            },
            "scope": 13473,
            "src": "5571:501:32",
            "stateMutability": "nonpayable",
            "virtual": false,
            "visibility": "internal"
          },
          {
            "body": {
              "id": 12791,
              "nodeType": "Block",
              "src": "6223:112:32",
              "statements": [
                {
                  "expression": {
                    "id": 12782,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "baseExpression": {
                        "id": 12777,
                        "name": "_extensionBaseURI",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 12444,
                        "src": "6233:17:32",
                        "typeDescriptions": {
                          "typeIdentifier": "t_mapping$_t_address_$_t_string_storage_$",
                          "typeString": "mapping(address => string storage ref)"
                        }
                      },
                      "id": 12780,
                      "indexExpression": {
                        "expression": {
                          "id": 12778,
                          "name": "msg",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 4294967281,
                          "src": "6251:3:32",
                          "typeDescriptions": {
                            "typeIdentifier": "t_magic_message",
                            "typeString": "msg"
                          }
                        },
                        "id": 12779,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberLocation": "6255:6:32",
                        "memberName": "sender",
                        "nodeType": "MemberAccess",
                        "src": "6251:10:32",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": true,
                      "nodeType": "IndexAccess",
                      "src": "6233:29:32",
                      "typeDescriptions": {
                        "typeIdentifier": "t_string_storage",
                        "typeString": "string storage ref"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "id": 12781,
                      "name": "uri",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 12772,
                      "src": "6265:3:32",
                      "typeDescriptions": {
                        "typeIdentifier": "t_string_calldata_ptr",
                        "typeString": "string calldata"
                      }
                    },
                    "src": "6233:35:32",
                    "typeDescriptions": {
                      "typeIdentifier": "t_string_storage",
                      "typeString": "string storage ref"
                    }
                  },
                  "id": 12783,
                  "nodeType": "ExpressionStatement",
                  "src": "6233:35:32"
                },
                {
                  "expression": {
                    "id": 12789,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "baseExpression": {
                        "id": 12784,
                        "name": "_extensionBaseURIIdentical",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 12448,
                        "src": "6278:26:32",
                        "typeDescriptions": {
                          "typeIdentifier": "t_mapping$_t_address_$_t_bool_$",
                          "typeString": "mapping(address => bool)"
                        }
                      },
                      "id": 12787,
                      "indexExpression": {
                        "expression": {
                          "id": 12785,
                          "name": "msg",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 4294967281,
                          "src": "6305:3:32",
                          "typeDescriptions": {
                            "typeIdentifier": "t_magic_message",
                            "typeString": "msg"
                          }
                        },
                        "id": 12786,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberLocation": "6309:6:32",
                        "memberName": "sender",
                        "nodeType": "MemberAccess",
                        "src": "6305:10:32",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": true,
                      "nodeType": "IndexAccess",
                      "src": "6278:38:32",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bool",
                        "typeString": "bool"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "id": 12788,
                      "name": "identical",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 12774,
                      "src": "6319:9:32",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bool",
                        "typeString": "bool"
                      }
                    },
                    "src": "6278:50:32",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "id": 12790,
                  "nodeType": "ExpressionStatement",
                  "src": "6278:50:32"
                }
              ]
            },
            "documentation": {
              "id": 12770,
              "nodeType": "StructuredDocumentation",
              "src": "6078:59:32",
              "text": " @dev Set base token uri for an extension"
            },
            "id": 12792,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "_setBaseTokenURIExtension",
            "nameLocation": "6151:25:32",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 12775,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 12772,
                  "mutability": "mutable",
                  "name": "uri",
                  "nameLocation": "6193:3:32",
                  "nodeType": "VariableDeclaration",
                  "scope": 12792,
                  "src": "6177:19:32",
                  "stateVariable": false,
                  "storageLocation": "calldata",
                  "typeDescriptions": {
                    "typeIdentifier": "t_string_calldata_ptr",
                    "typeString": "string"
                  },
                  "typeName": {
                    "id": 12771,
                    "name": "string",
                    "nodeType": "ElementaryTypeName",
                    "src": "6177:6:32",
                    "typeDescriptions": {
                      "typeIdentifier": "t_string_storage_ptr",
                      "typeString": "string"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 12774,
                  "mutability": "mutable",
                  "name": "identical",
                  "nameLocation": "6203:9:32",
                  "nodeType": "VariableDeclaration",
                  "scope": 12792,
                  "src": "6198:14:32",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bool",
                    "typeString": "bool"
                  },
                  "typeName": {
                    "id": 12773,
                    "name": "bool",
                    "nodeType": "ElementaryTypeName",
                    "src": "6198:4:32",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "6176:37:32"
            },
            "returnParameters": {
              "id": 12776,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "6223:0:32"
            },
            "scope": 13473,
            "src": "6142:193:32",
            "stateMutability": "nonpayable",
            "virtual": false,
            "visibility": "internal"
          },
          {
            "body": {
              "id": 12805,
              "nodeType": "Block",
              "src": "6477:57:32",
              "statements": [
                {
                  "expression": {
                    "id": 12803,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "baseExpression": {
                        "id": 12798,
                        "name": "_extensionURIPrefix",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 12452,
                        "src": "6487:19:32",
                        "typeDescriptions": {
                          "typeIdentifier": "t_mapping$_t_address_$_t_string_storage_$",
                          "typeString": "mapping(address => string storage ref)"
                        }
                      },
                      "id": 12801,
                      "indexExpression": {
                        "expression": {
                          "id": 12799,
                          "name": "msg",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 4294967281,
                          "src": "6507:3:32",
                          "typeDescriptions": {
                            "typeIdentifier": "t_magic_message",
                            "typeString": "msg"
                          }
                        },
                        "id": 12800,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberLocation": "6511:6:32",
                        "memberName": "sender",
                        "nodeType": "MemberAccess",
                        "src": "6507:10:32",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": true,
                      "nodeType": "IndexAccess",
                      "src": "6487:31:32",
                      "typeDescriptions": {
                        "typeIdentifier": "t_string_storage",
                        "typeString": "string storage ref"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "id": 12802,
                      "name": "prefix",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 12795,
                      "src": "6521:6:32",
                      "typeDescriptions": {
                        "typeIdentifier": "t_string_calldata_ptr",
                        "typeString": "string calldata"
                      }
                    },
                    "src": "6487:40:32",
                    "typeDescriptions": {
                      "typeIdentifier": "t_string_storage",
                      "typeString": "string storage ref"
                    }
                  },
                  "id": 12804,
                  "nodeType": "ExpressionStatement",
                  "src": "6487:40:32"
                }
              ]
            },
            "documentation": {
              "id": 12793,
              "nodeType": "StructuredDocumentation",
              "src": "6341:61:32",
              "text": " @dev Set token uri prefix for an extension"
            },
            "id": 12806,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "_setTokenURIPrefixExtension",
            "nameLocation": "6416:27:32",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 12796,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 12795,
                  "mutability": "mutable",
                  "name": "prefix",
                  "nameLocation": "6460:6:32",
                  "nodeType": "VariableDeclaration",
                  "scope": 12806,
                  "src": "6444:22:32",
                  "stateVariable": false,
                  "storageLocation": "calldata",
                  "typeDescriptions": {
                    "typeIdentifier": "t_string_calldata_ptr",
                    "typeString": "string"
                  },
                  "typeName": {
                    "id": 12794,
                    "name": "string",
                    "nodeType": "ElementaryTypeName",
                    "src": "6444:6:32",
                    "typeDescriptions": {
                      "typeIdentifier": "t_string_storage_ptr",
                      "typeString": "string"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "6443:24:32"
            },
            "returnParameters": {
              "id": 12797,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "6477:0:32"
            },
            "scope": 13473,
            "src": "6407:127:32",
            "stateMutability": "nonpayable",
            "virtual": false,
            "visibility": "internal"
          },
          {
            "body": {
              "id": 12830,
              "nodeType": "Block",
              "src": "6688:116:32",
              "statements": [
                {
                  "expression": {
                    "arguments": [
                      {
                        "commonType": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "id": 12820,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftExpression": {
                          "arguments": [
                            {
                              "id": 12816,
                              "name": "tokenId",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 12809,
                              "src": "6722:7:32",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            ],
                            "id": 12815,
                            "name": "_tokenExtension",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 13472,
                            "src": "6706:15:32",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_internal_view$_t_uint256_$returns$_t_address_$",
                              "typeString": "function (uint256) view returns (address)"
                            }
                          },
                          "id": 12817,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "nameLocations": [],
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "6706:24:32",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "nodeType": "BinaryOperation",
                        "operator": "==",
                        "rightExpression": {
                          "expression": {
                            "id": 12818,
                            "name": "msg",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 4294967281,
                            "src": "6734:3:32",
                            "typeDescriptions": {
                              "typeIdentifier": "t_magic_message",
                              "typeString": "msg"
                            }
                          },
                          "id": 12819,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberLocation": "6738:6:32",
                          "memberName": "sender",
                          "nodeType": "MemberAccess",
                          "src": "6734:10:32",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "src": "6706:38:32",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      {
                        "hexValue": "496e76616c696420746f6b656e",
                        "id": 12821,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "string",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "6746:15:32",
                        "typeDescriptions": {
                          "typeIdentifier": "t_stringliteral_5e70ebd1d4072d337a7fabaa7bda70fa2633d6e3f89d5cb725a16b10d07e54c6",
                          "typeString": "literal_string \"Invalid token\""
                        },
                        "value": "Invalid token"
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        {
                          "typeIdentifier": "t_stringliteral_5e70ebd1d4072d337a7fabaa7bda70fa2633d6e3f89d5cb725a16b10d07e54c6",
                          "typeString": "literal_string \"Invalid token\""
                        }
                      ],
                      "id": 12814,
                      "name": "require",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        4294967278,
                        4294967278
                      ],
                      "referencedDeclaration": 4294967278,
                      "src": "6698:7:32",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                        "typeString": "function (bool,string memory) pure"
                      }
                    },
                    "id": 12822,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "nameLocations": [],
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "6698:64:32",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 12823,
                  "nodeType": "ExpressionStatement",
                  "src": "6698:64:32"
                },
                {
                  "expression": {
                    "id": 12828,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "baseExpression": {
                        "id": 12824,
                        "name": "_tokenURIs",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 12456,
                        "src": "6772:10:32",
                        "typeDescriptions": {
                          "typeIdentifier": "t_mapping$_t_uint256_$_t_string_storage_$",
                          "typeString": "mapping(uint256 => string storage ref)"
                        }
                      },
                      "id": 12826,
                      "indexExpression": {
                        "id": 12825,
                        "name": "tokenId",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 12809,
                        "src": "6783:7:32",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": true,
                      "nodeType": "IndexAccess",
                      "src": "6772:19:32",
                      "typeDescriptions": {
                        "typeIdentifier": "t_string_storage",
                        "typeString": "string storage ref"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "id": 12827,
                      "name": "uri",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 12811,
                      "src": "6794:3:32",
                      "typeDescriptions": {
                        "typeIdentifier": "t_string_calldata_ptr",
                        "typeString": "string calldata"
                      }
                    },
                    "src": "6772:25:32",
                    "typeDescriptions": {
                      "typeIdentifier": "t_string_storage",
                      "typeString": "string storage ref"
                    }
                  },
                  "id": 12829,
                  "nodeType": "ExpressionStatement",
                  "src": "6772:25:32"
                }
              ]
            },
            "documentation": {
              "id": 12807,
              "nodeType": "StructuredDocumentation",
              "src": "6540:65:32",
              "text": " @dev Set token uri for a token of an extension"
            },
            "id": 12831,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "_setTokenURIExtension",
            "nameLocation": "6619:21:32",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 12812,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 12809,
                  "mutability": "mutable",
                  "name": "tokenId",
                  "nameLocation": "6649:7:32",
                  "nodeType": "VariableDeclaration",
                  "scope": 12831,
                  "src": "6641:15:32",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 12808,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "6641:7:32",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 12811,
                  "mutability": "mutable",
                  "name": "uri",
                  "nameLocation": "6674:3:32",
                  "nodeType": "VariableDeclaration",
                  "scope": 12831,
                  "src": "6658:19:32",
                  "stateVariable": false,
                  "storageLocation": "calldata",
                  "typeDescriptions": {
                    "typeIdentifier": "t_string_calldata_ptr",
                    "typeString": "string"
                  },
                  "typeName": {
                    "id": 12810,
                    "name": "string",
                    "nodeType": "ElementaryTypeName",
                    "src": "6658:6:32",
                    "typeDescriptions": {
                      "typeIdentifier": "t_string_storage_ptr",
                      "typeString": "string"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "6640:38:32"
            },
            "returnParameters": {
              "id": 12813,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "6688:0:32"
            },
            "scope": 13473,
            "src": "6610:194:32",
            "stateMutability": "nonpayable",
            "virtual": false,
            "visibility": "internal"
          },
          {
            "body": {
              "id": 12846,
              "nodeType": "Block",
              "src": "6942:52:32",
              "statements": [
                {
                  "expression": {
                    "id": 12844,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "baseExpression": {
                        "id": 12837,
                        "name": "_extensionBaseURI",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 12444,
                        "src": "6952:17:32",
                        "typeDescriptions": {
                          "typeIdentifier": "t_mapping$_t_address_$_t_string_storage_$",
                          "typeString": "mapping(address => string storage ref)"
                        }
                      },
                      "id": 12842,
                      "indexExpression": {
                        "arguments": [
                          {
                            "hexValue": "30",
                            "id": 12840,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "kind": "number",
                            "lValueRequested": false,
                            "nodeType": "Literal",
                            "src": "6978:1:32",
                            "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": 12839,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "lValueRequested": false,
                          "nodeType": "ElementaryTypeNameExpression",
                          "src": "6970:7:32",
                          "typeDescriptions": {
                            "typeIdentifier": "t_type$_t_address_$",
                            "typeString": "type(address)"
                          },
                          "typeName": {
                            "id": 12838,
                            "name": "address",
                            "nodeType": "ElementaryTypeName",
                            "src": "6970:7:32",
                            "typeDescriptions": {}
                          }
                        },
                        "id": 12841,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "typeConversion",
                        "lValueRequested": false,
                        "nameLocations": [],
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "6970:10:32",
                        "tryCall": false,
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": true,
                      "nodeType": "IndexAccess",
                      "src": "6952:29:32",
                      "typeDescriptions": {
                        "typeIdentifier": "t_string_storage",
                        "typeString": "string storage ref"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "id": 12843,
                      "name": "uri",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 12834,
                      "src": "6984:3:32",
                      "typeDescriptions": {
                        "typeIdentifier": "t_string_calldata_ptr",
                        "typeString": "string calldata"
                      }
                    },
                    "src": "6952:35:32",
                    "typeDescriptions": {
                      "typeIdentifier": "t_string_storage",
                      "typeString": "string storage ref"
                    }
                  },
                  "id": 12845,
                  "nodeType": "ExpressionStatement",
                  "src": "6952:35:32"
                }
              ]
            },
            "documentation": {
              "id": 12832,
              "nodeType": "StructuredDocumentation",
              "src": "6810:71:32",
              "text": " @dev Set base token uri for tokens with no extension"
            },
            "id": 12847,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "_setBaseTokenURI",
            "nameLocation": "6895:16:32",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 12835,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 12834,
                  "mutability": "mutable",
                  "name": "uri",
                  "nameLocation": "6928:3:32",
                  "nodeType": "VariableDeclaration",
                  "scope": 12847,
                  "src": "6912:19:32",
                  "stateVariable": false,
                  "storageLocation": "calldata",
                  "typeDescriptions": {
                    "typeIdentifier": "t_string_calldata_ptr",
                    "typeString": "string"
                  },
                  "typeName": {
                    "id": 12833,
                    "name": "string",
                    "nodeType": "ElementaryTypeName",
                    "src": "6912:6:32",
                    "typeDescriptions": {
                      "typeIdentifier": "t_string_storage_ptr",
                      "typeString": "string"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "6911:21:32"
            },
            "returnParameters": {
              "id": 12836,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "6942:0:32"
            },
            "scope": 13473,
            "src": "6886:108:32",
            "stateMutability": "nonpayable",
            "virtual": false,
            "visibility": "internal"
          },
          {
            "body": {
              "id": 12862,
              "nodeType": "Block",
              "src": "7139:57:32",
              "statements": [
                {
                  "expression": {
                    "id": 12860,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "baseExpression": {
                        "id": 12853,
                        "name": "_extensionURIPrefix",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 12452,
                        "src": "7149:19:32",
                        "typeDescriptions": {
                          "typeIdentifier": "t_mapping$_t_address_$_t_string_storage_$",
                          "typeString": "mapping(address => string storage ref)"
                        }
                      },
                      "id": 12858,
                      "indexExpression": {
                        "arguments": [
                          {
                            "hexValue": "30",
                            "id": 12856,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "kind": "number",
                            "lValueRequested": false,
                            "nodeType": "Literal",
                            "src": "7177:1:32",
                            "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": 12855,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "lValueRequested": false,
                          "nodeType": "ElementaryTypeNameExpression",
                          "src": "7169:7:32",
                          "typeDescriptions": {
                            "typeIdentifier": "t_type$_t_address_$",
                            "typeString": "type(address)"
                          },
                          "typeName": {
                            "id": 12854,
                            "name": "address",
                            "nodeType": "ElementaryTypeName",
                            "src": "7169:7:32",
                            "typeDescriptions": {}
                          }
                        },
                        "id": 12857,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "typeConversion",
                        "lValueRequested": false,
                        "nameLocations": [],
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "7169:10:32",
                        "tryCall": false,
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": true,
                      "nodeType": "IndexAccess",
                      "src": "7149:31:32",
                      "typeDescriptions": {
                        "typeIdentifier": "t_string_storage",
                        "typeString": "string storage ref"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "id": 12859,
                      "name": "prefix",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 12850,
                      "src": "7183:6:32",
                      "typeDescriptions": {
                        "typeIdentifier": "t_string_calldata_ptr",
                        "typeString": "string calldata"
                      }
                    },
                    "src": "7149:40:32",
                    "typeDescriptions": {
                      "typeIdentifier": "t_string_storage",
                      "typeString": "string storage ref"
                    }
                  },
                  "id": 12861,
                  "nodeType": "ExpressionStatement",
                  "src": "7149:40:32"
                }
              ]
            },
            "documentation": {
              "id": 12848,
              "nodeType": "StructuredDocumentation",
              "src": "7000:73:32",
              "text": " @dev Set token uri prefix for tokens with no extension"
            },
            "id": 12863,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "_setTokenURIPrefix",
            "nameLocation": "7087:18:32",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 12851,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 12850,
                  "mutability": "mutable",
                  "name": "prefix",
                  "nameLocation": "7122:6:32",
                  "nodeType": "VariableDeclaration",
                  "scope": 12863,
                  "src": "7106:22:32",
                  "stateVariable": false,
                  "storageLocation": "calldata",
                  "typeDescriptions": {
                    "typeIdentifier": "t_string_calldata_ptr",
                    "typeString": "string"
                  },
                  "typeName": {
                    "id": 12849,
                    "name": "string",
                    "nodeType": "ElementaryTypeName",
                    "src": "7106:6:32",
                    "typeDescriptions": {
                      "typeIdentifier": "t_string_storage_ptr",
                      "typeString": "string"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "7105:24:32"
            },
            "returnParameters": {
              "id": 12852,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "7139:0:32"
            },
            "scope": 13473,
            "src": "7078:118:32",
            "stateMutability": "nonpayable",
            "virtual": false,
            "visibility": "internal"
          },
          {
            "body": {
              "id": 12897,
              "nodeType": "Block",
              "src": "7344:157:32",
              "statements": [
                {
                  "expression": {
                    "arguments": [
                      {
                        "commonType": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        "id": 12887,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftExpression": {
                          "commonType": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          },
                          "id": 12878,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftExpression": {
                            "commonType": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            },
                            "id": 12874,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "leftExpression": {
                              "id": 12872,
                              "name": "tokenId",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 12866,
                              "src": "7362:7:32",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "nodeType": "BinaryOperation",
                            "operator": ">",
                            "rightExpression": {
                              "hexValue": "30",
                              "id": 12873,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "kind": "number",
                              "lValueRequested": false,
                              "nodeType": "Literal",
                              "src": "7372:1:32",
                              "typeDescriptions": {
                                "typeIdentifier": "t_rational_0_by_1",
                                "typeString": "int_const 0"
                              },
                              "value": "0"
                            },
                            "src": "7362:11:32",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bool",
                              "typeString": "bool"
                            }
                          },
                          "nodeType": "BinaryOperation",
                          "operator": "&&",
                          "rightExpression": {
                            "commonType": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            },
                            "id": 12877,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "leftExpression": {
                              "id": 12875,
                              "name": "tokenId",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 12866,
                              "src": "7377:7:32",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "nodeType": "BinaryOperation",
                            "operator": "<=",
                            "rightExpression": {
                              "id": 12876,
                              "name": "_tokenCount",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 12432,
                              "src": "7388:11:32",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "src": "7377:22:32",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bool",
                              "typeString": "bool"
                            }
                          },
                          "src": "7362:37:32",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "nodeType": "BinaryOperation",
                        "operator": "&&",
                        "rightExpression": {
                          "commonType": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          },
                          "id": 12886,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftExpression": {
                            "arguments": [
                              {
                                "id": 12880,
                                "name": "tokenId",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 12866,
                                "src": "7419:7:32",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              }
                            ],
                            "expression": {
                              "argumentTypes": [
                                {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              ],
                              "id": 12879,
                              "name": "_tokenExtension",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 13472,
                              "src": "7403:15:32",
                              "typeDescriptions": {
                                "typeIdentifier": "t_function_internal_view$_t_uint256_$returns$_t_address_$",
                                "typeString": "function (uint256) view returns (address)"
                              }
                            },
                            "id": 12881,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "kind": "functionCall",
                            "lValueRequested": false,
                            "nameLocations": [],
                            "names": [],
                            "nodeType": "FunctionCall",
                            "src": "7403:24:32",
                            "tryCall": false,
                            "typeDescriptions": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          },
                          "nodeType": "BinaryOperation",
                          "operator": "==",
                          "rightExpression": {
                            "arguments": [
                              {
                                "hexValue": "30",
                                "id": 12884,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": true,
                                "kind": "number",
                                "lValueRequested": false,
                                "nodeType": "Literal",
                                "src": "7439:1:32",
                                "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": 12883,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "lValueRequested": false,
                              "nodeType": "ElementaryTypeNameExpression",
                              "src": "7431:7:32",
                              "typeDescriptions": {
                                "typeIdentifier": "t_type$_t_address_$",
                                "typeString": "type(address)"
                              },
                              "typeName": {
                                "id": 12882,
                                "name": "address",
                                "nodeType": "ElementaryTypeName",
                                "src": "7431:7:32",
                                "typeDescriptions": {}
                              }
                            },
                            "id": 12885,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "kind": "typeConversion",
                            "lValueRequested": false,
                            "nameLocations": [],
                            "names": [],
                            "nodeType": "FunctionCall",
                            "src": "7431:10:32",
                            "tryCall": false,
                            "typeDescriptions": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          },
                          "src": "7403:38:32",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "src": "7362:79:32",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      {
                        "hexValue": "496e76616c696420746f6b656e",
                        "id": 12888,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "string",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "7443:15:32",
                        "typeDescriptions": {
                          "typeIdentifier": "t_stringliteral_5e70ebd1d4072d337a7fabaa7bda70fa2633d6e3f89d5cb725a16b10d07e54c6",
                          "typeString": "literal_string \"Invalid token\""
                        },
                        "value": "Invalid token"
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        {
                          "typeIdentifier": "t_stringliteral_5e70ebd1d4072d337a7fabaa7bda70fa2633d6e3f89d5cb725a16b10d07e54c6",
                          "typeString": "literal_string \"Invalid token\""
                        }
                      ],
                      "id": 12871,
                      "name": "require",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        4294967278,
                        4294967278
                      ],
                      "referencedDeclaration": 4294967278,
                      "src": "7354:7:32",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                        "typeString": "function (bool,string memory) pure"
                      }
                    },
                    "id": 12889,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "nameLocations": [],
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "7354:105:32",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 12890,
                  "nodeType": "ExpressionStatement",
                  "src": "7354:105:32"
                },
                {
                  "expression": {
                    "id": 12895,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "baseExpression": {
                        "id": 12891,
                        "name": "_tokenURIs",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 12456,
                        "src": "7469:10:32",
                        "typeDescriptions": {
                          "typeIdentifier": "t_mapping$_t_uint256_$_t_string_storage_$",
                          "typeString": "mapping(uint256 => string storage ref)"
                        }
                      },
                      "id": 12893,
                      "indexExpression": {
                        "id": 12892,
                        "name": "tokenId",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 12866,
                        "src": "7480:7:32",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": true,
                      "nodeType": "IndexAccess",
                      "src": "7469:19:32",
                      "typeDescriptions": {
                        "typeIdentifier": "t_string_storage",
                        "typeString": "string storage ref"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "id": 12894,
                      "name": "uri",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 12868,
                      "src": "7491:3:32",
                      "typeDescriptions": {
                        "typeIdentifier": "t_string_calldata_ptr",
                        "typeString": "string calldata"
                      }
                    },
                    "src": "7469:25:32",
                    "typeDescriptions": {
                      "typeIdentifier": "t_string_storage",
                      "typeString": "string storage ref"
                    }
                  },
                  "id": 12896,
                  "nodeType": "ExpressionStatement",
                  "src": "7469:25:32"
                }
              ]
            },
            "documentation": {
              "id": 12864,
              "nodeType": "StructuredDocumentation",
              "src": "7203:67:32",
              "text": " @dev Set token uri for a token with no extension"
            },
            "id": 12898,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "_setTokenURI",
            "nameLocation": "7284:12:32",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 12869,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 12866,
                  "mutability": "mutable",
                  "name": "tokenId",
                  "nameLocation": "7305:7:32",
                  "nodeType": "VariableDeclaration",
                  "scope": 12898,
                  "src": "7297:15:32",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 12865,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "7297:7:32",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 12868,
                  "mutability": "mutable",
                  "name": "uri",
                  "nameLocation": "7330:3:32",
                  "nodeType": "VariableDeclaration",
                  "scope": 12898,
                  "src": "7314:19:32",
                  "stateVariable": false,
                  "storageLocation": "calldata",
                  "typeDescriptions": {
                    "typeIdentifier": "t_string_calldata_ptr",
                    "typeString": "string"
                  },
                  "typeName": {
                    "id": 12867,
                    "name": "string",
                    "nodeType": "ElementaryTypeName",
                    "src": "7314:6:32",
                    "typeDescriptions": {
                      "typeIdentifier": "t_string_storage_ptr",
                      "typeString": "string"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "7296:38:32"
            },
            "returnParameters": {
              "id": 12870,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "7344:0:32"
            },
            "scope": 13473,
            "src": "7275:226:32",
            "stateMutability": "nonpayable",
            "virtual": false,
            "visibility": "internal"
          },
          {
            "body": {
              "id": 13016,
              "nodeType": "Block",
              "src": "7632:942:32",
              "statements": [
                {
                  "expression": {
                    "arguments": [
                      {
                        "commonType": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        "id": 12913,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftExpression": {
                          "commonType": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          },
                          "id": 12909,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftExpression": {
                            "id": 12907,
                            "name": "tokenId",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 12901,
                            "src": "7650:7:32",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "nodeType": "BinaryOperation",
                          "operator": ">",
                          "rightExpression": {
                            "hexValue": "30",
                            "id": 12908,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "kind": "number",
                            "lValueRequested": false,
                            "nodeType": "Literal",
                            "src": "7660:1:32",
                            "typeDescriptions": {
                              "typeIdentifier": "t_rational_0_by_1",
                              "typeString": "int_const 0"
                            },
                            "value": "0"
                          },
                          "src": "7650:11:32",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "nodeType": "BinaryOperation",
                        "operator": "&&",
                        "rightExpression": {
                          "commonType": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          },
                          "id": 12912,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftExpression": {
                            "id": 12910,
                            "name": "tokenId",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 12901,
                            "src": "7665:7:32",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "nodeType": "BinaryOperation",
                          "operator": "<=",
                          "rightExpression": {
                            "id": 12911,
                            "name": "_tokenCount",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 12432,
                            "src": "7676:11:32",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "src": "7665:22:32",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "src": "7650:37:32",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      {
                        "hexValue": "496e76616c696420746f6b656e",
                        "id": 12914,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "string",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "7689:15:32",
                        "typeDescriptions": {
                          "typeIdentifier": "t_stringliteral_5e70ebd1d4072d337a7fabaa7bda70fa2633d6e3f89d5cb725a16b10d07e54c6",
                          "typeString": "literal_string \"Invalid token\""
                        },
                        "value": "Invalid token"
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        {
                          "typeIdentifier": "t_stringliteral_5e70ebd1d4072d337a7fabaa7bda70fa2633d6e3f89d5cb725a16b10d07e54c6",
                          "typeString": "literal_string \"Invalid token\""
                        }
                      ],
                      "id": 12906,
                      "name": "require",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        4294967278,
                        4294967278
                      ],
                      "referencedDeclaration": 4294967278,
                      "src": "7642:7:32",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                        "typeString": "function (bool,string memory) pure"
                      }
                    },
                    "id": 12915,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "nameLocations": [],
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "7642:63:32",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 12916,
                  "nodeType": "ExpressionStatement",
                  "src": "7642:63:32"
                },
                {
                  "assignments": [
                    12918
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 12918,
                      "mutability": "mutable",
                      "name": "extension",
                      "nameLocation": "7724:9:32",
                      "nodeType": "VariableDeclaration",
                      "scope": 13016,
                      "src": "7716:17:32",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      },
                      "typeName": {
                        "id": 12917,
                        "name": "address",
                        "nodeType": "ElementaryTypeName",
                        "src": "7716:7:32",
                        "stateMutability": "nonpayable",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      "visibility": "internal"
                    }
                  ],
                  "id": 12922,
                  "initialValue": {
                    "arguments": [
                      {
                        "id": 12920,
                        "name": "tokenId",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 12901,
                        "src": "7752:7:32",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      ],
                      "id": 12919,
                      "name": "_tokenExtension",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 13472,
                      "src": "7736:15:32",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_view$_t_uint256_$returns$_t_address_$",
                        "typeString": "function (uint256) view returns (address)"
                      }
                    },
                    "id": 12921,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "nameLocations": [],
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "7736:24:32",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "7716:44:32"
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "id": 12928,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "nodeType": "UnaryOperation",
                        "operator": "!",
                        "prefix": true,
                        "src": "7778:43:32",
                        "subExpression": {
                          "arguments": [
                            {
                              "id": 12926,
                              "name": "extension",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 12918,
                              "src": "7811:9:32",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            ],
                            "expression": {
                              "id": 12924,
                              "name": "_blacklistedExtensions",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 12440,
                              "src": "7779:22:32",
                              "typeDescriptions": {
                                "typeIdentifier": "t_struct$_AddressSet_$3529_storage",
                                "typeString": "struct EnumerableSet.AddressSet storage ref"
                              }
                            },
                            "id": 12925,
                            "isConstant": false,
                            "isLValue": true,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberLocation": "7802:8:32",
                            "memberName": "contains",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": 3610,
                            "src": "7779:31:32",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_internal_view$_t_struct$_AddressSet_$3529_storage_ptr_$_t_address_$returns$_t_bool_$attached_to$_t_struct$_AddressSet_$3529_storage_ptr_$",
                              "typeString": "function (struct EnumerableSet.AddressSet storage pointer,address) view returns (bool)"
                            }
                          },
                          "id": 12927,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "nameLocations": [],
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "7779:42:32",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      {
                        "hexValue": "457874656e73696f6e20626c61636b6c6973746564",
                        "id": 12929,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "string",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "7823:23:32",
                        "typeDescriptions": {
                          "typeIdentifier": "t_stringliteral_4beb819a81c47e20a26775f9ad72b3da5e765415ddadbc3186b244e4bc01e621",
                          "typeString": "literal_string \"Extension blacklisted\""
                        },
                        "value": "Extension blacklisted"
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        {
                          "typeIdentifier": "t_stringliteral_4beb819a81c47e20a26775f9ad72b3da5e765415ddadbc3186b244e4bc01e621",
                          "typeString": "literal_string \"Extension blacklisted\""
                        }
                      ],
                      "id": 12923,
                      "name": "require",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        4294967278,
                        4294967278
                      ],
                      "referencedDeclaration": 4294967278,
                      "src": "7770:7:32",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                        "typeString": "function (bool,string memory) pure"
                      }
                    },
                    "id": 12930,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "nameLocations": [],
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "7770:77:32",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 12931,
                  "nodeType": "ExpressionStatement",
                  "src": "7770:77:32"
                },
                {
                  "condition": {
                    "commonType": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    },
                    "id": 12940,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "expression": {
                        "arguments": [
                          {
                            "baseExpression": {
                              "id": 12934,
                              "name": "_tokenURIs",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 12456,
                              "src": "7868:10:32",
                              "typeDescriptions": {
                                "typeIdentifier": "t_mapping$_t_uint256_$_t_string_storage_$",
                                "typeString": "mapping(uint256 => string storage ref)"
                              }
                            },
                            "id": 12936,
                            "indexExpression": {
                              "id": 12935,
                              "name": "tokenId",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 12901,
                              "src": "7879:7:32",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "isConstant": false,
                            "isLValue": true,
                            "isPure": false,
                            "lValueRequested": false,
                            "nodeType": "IndexAccess",
                            "src": "7868:19:32",
                            "typeDescriptions": {
                              "typeIdentifier": "t_string_storage",
                              "typeString": "string storage ref"
                            }
                          }
                        ],
                        "expression": {
                          "argumentTypes": [
                            {
                              "typeIdentifier": "t_string_storage",
                              "typeString": "string storage ref"
                            }
                          ],
                          "id": 12933,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "lValueRequested": false,
                          "nodeType": "ElementaryTypeNameExpression",
                          "src": "7862:5:32",
                          "typeDescriptions": {
                            "typeIdentifier": "t_type$_t_bytes_storage_ptr_$",
                            "typeString": "type(bytes storage pointer)"
                          },
                          "typeName": {
                            "id": 12932,
                            "name": "bytes",
                            "nodeType": "ElementaryTypeName",
                            "src": "7862:5:32",
                            "typeDescriptions": {}
                          }
                        },
                        "id": 12937,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "typeConversion",
                        "lValueRequested": false,
                        "nameLocations": [],
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "7862:26:32",
                        "tryCall": false,
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes_storage_ptr",
                          "typeString": "bytes storage pointer"
                        }
                      },
                      "id": 12938,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberLocation": "7889:6:32",
                      "memberName": "length",
                      "nodeType": "MemberAccess",
                      "src": "7862:33:32",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "!=",
                    "rightExpression": {
                      "hexValue": "30",
                      "id": 12939,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "number",
                      "lValueRequested": false,
                      "nodeType": "Literal",
                      "src": "7899:1:32",
                      "typeDescriptions": {
                        "typeIdentifier": "t_rational_0_by_1",
                        "typeString": "int_const 0"
                      },
                      "value": "0"
                    },
                    "src": "7862:38:32",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "id": 12970,
                  "nodeType": "IfStatement",
                  "src": "7858:280:32",
                  "trueBody": {
                    "id": 12969,
                    "nodeType": "Block",
                    "src": "7902:236:32",
                    "statements": [
                      {
                        "condition": {
                          "commonType": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          },
                          "id": 12949,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftExpression": {
                            "expression": {
                              "arguments": [
                                {
                                  "baseExpression": {
                                    "id": 12943,
                                    "name": "_extensionURIPrefix",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 12452,
                                    "src": "7926:19:32",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_mapping$_t_address_$_t_string_storage_$",
                                      "typeString": "mapping(address => string storage ref)"
                                    }
                                  },
                                  "id": 12945,
                                  "indexExpression": {
                                    "id": 12944,
                                    "name": "extension",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 12918,
                                    "src": "7946:9:32",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_address",
                                      "typeString": "address"
                                    }
                                  },
                                  "isConstant": false,
                                  "isLValue": true,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "nodeType": "IndexAccess",
                                  "src": "7926:30:32",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_string_storage",
                                    "typeString": "string storage ref"
                                  }
                                }
                              ],
                              "expression": {
                                "argumentTypes": [
                                  {
                                    "typeIdentifier": "t_string_storage",
                                    "typeString": "string storage ref"
                                  }
                                ],
                                "id": 12942,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": true,
                                "lValueRequested": false,
                                "nodeType": "ElementaryTypeNameExpression",
                                "src": "7920:5:32",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_type$_t_bytes_storage_ptr_$",
                                  "typeString": "type(bytes storage pointer)"
                                },
                                "typeName": {
                                  "id": 12941,
                                  "name": "bytes",
                                  "nodeType": "ElementaryTypeName",
                                  "src": "7920:5:32",
                                  "typeDescriptions": {}
                                }
                              },
                              "id": 12946,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "kind": "typeConversion",
                              "lValueRequested": false,
                              "nameLocations": [],
                              "names": [],
                              "nodeType": "FunctionCall",
                              "src": "7920:37:32",
                              "tryCall": false,
                              "typeDescriptions": {
                                "typeIdentifier": "t_bytes_storage_ptr",
                                "typeString": "bytes storage pointer"
                              }
                            },
                            "id": 12947,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberLocation": "7958:6:32",
                            "memberName": "length",
                            "nodeType": "MemberAccess",
                            "src": "7920:44:32",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "nodeType": "BinaryOperation",
                          "operator": "!=",
                          "rightExpression": {
                            "hexValue": "30",
                            "id": 12948,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "kind": "number",
                            "lValueRequested": false,
                            "nodeType": "Literal",
                            "src": "7968:1:32",
                            "typeDescriptions": {
                              "typeIdentifier": "t_rational_0_by_1",
                              "typeString": "int_const 0"
                            },
                            "value": "0"
                          },
                          "src": "7920:49:32",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "id": 12964,
                        "nodeType": "IfStatement",
                        "src": "7916:172:32",
                        "trueBody": {
                          "id": 12963,
                          "nodeType": "Block",
                          "src": "7971:117:32",
                          "statements": [
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "baseExpression": {
                                          "id": 12954,
                                          "name": "_extensionURIPrefix",
                                          "nodeType": "Identifier",
                                          "overloadedDeclarations": [],
                                          "referencedDeclaration": 12452,
                                          "src": "8020:19:32",
                                          "typeDescriptions": {
                                            "typeIdentifier": "t_mapping$_t_address_$_t_string_storage_$",
                                            "typeString": "mapping(address => string storage ref)"
                                          }
                                        },
                                        "id": 12956,
                                        "indexExpression": {
                                          "id": 12955,
                                          "name": "extension",
                                          "nodeType": "Identifier",
                                          "overloadedDeclarations": [],
                                          "referencedDeclaration": 12918,
                                          "src": "8040:9:32",
                                          "typeDescriptions": {
                                            "typeIdentifier": "t_address",
                                            "typeString": "address"
                                          }
                                        },
                                        "isConstant": false,
                                        "isLValue": true,
                                        "isPure": false,
                                        "lValueRequested": false,
                                        "nodeType": "IndexAccess",
                                        "src": "8020:30:32",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_string_storage",
                                          "typeString": "string storage ref"
                                        }
                                      },
                                      {
                                        "baseExpression": {
                                          "id": 12957,
                                          "name": "_tokenURIs",
                                          "nodeType": "Identifier",
                                          "overloadedDeclarations": [],
                                          "referencedDeclaration": 12456,
                                          "src": "8052:10:32",
                                          "typeDescriptions": {
                                            "typeIdentifier": "t_mapping$_t_uint256_$_t_string_storage_$",
                                            "typeString": "mapping(uint256 => string storage ref)"
                                          }
                                        },
                                        "id": 12959,
                                        "indexExpression": {
                                          "id": 12958,
                                          "name": "tokenId",
                                          "nodeType": "Identifier",
                                          "overloadedDeclarations": [],
                                          "referencedDeclaration": 12901,
                                          "src": "8063:7:32",
                                          "typeDescriptions": {
                                            "typeIdentifier": "t_uint256",
                                            "typeString": "uint256"
                                          }
                                        },
                                        "isConstant": false,
                                        "isLValue": true,
                                        "isPure": false,
                                        "lValueRequested": false,
                                        "nodeType": "IndexAccess",
                                        "src": "8052:19:32",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_string_storage",
                                          "typeString": "string storage ref"
                                        }
                                      }
                                    ],
                                    "expression": {
                                      "argumentTypes": [
                                        {
                                          "typeIdentifier": "t_string_storage",
                                          "typeString": "string storage ref"
                                        },
                                        {
                                          "typeIdentifier": "t_string_storage",
                                          "typeString": "string storage ref"
                                        }
                                      ],
                                      "expression": {
                                        "id": 12952,
                                        "name": "abi",
                                        "nodeType": "Identifier",
                                        "overloadedDeclarations": [],
                                        "referencedDeclaration": 4294967295,
                                        "src": "8003:3:32",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_magic_abi",
                                          "typeString": "abi"
                                        }
                                      },
                                      "id": 12953,
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": true,
                                      "lValueRequested": false,
                                      "memberLocation": "8007:12:32",
                                      "memberName": "encodePacked",
                                      "nodeType": "MemberAccess",
                                      "src": "8003:16:32",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_function_abiencodepacked_pure$__$returns$_t_bytes_memory_ptr_$",
                                        "typeString": "function () pure returns (bytes memory)"
                                      }
                                    },
                                    "id": 12960,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": false,
                                    "kind": "functionCall",
                                    "lValueRequested": false,
                                    "nameLocations": [],
                                    "names": [],
                                    "nodeType": "FunctionCall",
                                    "src": "8003:69:32",
                                    "tryCall": false,
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_bytes_memory_ptr",
                                      "typeString": "bytes memory"
                                    }
                                  }
                                ],
                                "expression": {
                                  "argumentTypes": [
                                    {
                                      "typeIdentifier": "t_bytes_memory_ptr",
                                      "typeString": "bytes memory"
                                    }
                                  ],
                                  "id": 12951,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": true,
                                  "lValueRequested": false,
                                  "nodeType": "ElementaryTypeNameExpression",
                                  "src": "7996:6:32",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_type$_t_string_storage_ptr_$",
                                    "typeString": "type(string storage pointer)"
                                  },
                                  "typeName": {
                                    "id": 12950,
                                    "name": "string",
                                    "nodeType": "ElementaryTypeName",
                                    "src": "7996:6:32",
                                    "typeDescriptions": {}
                                  }
                                },
                                "id": 12961,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "kind": "typeConversion",
                                "lValueRequested": false,
                                "nameLocations": [],
                                "names": [],
                                "nodeType": "FunctionCall",
                                "src": "7996:77:32",
                                "tryCall": false,
                                "typeDescriptions": {
                                  "typeIdentifier": "t_string_memory_ptr",
                                  "typeString": "string memory"
                                }
                              },
                              "functionReturnParameters": 12905,
                              "id": 12962,
                              "nodeType": "Return",
                              "src": "7989:84:32"
                            }
                          ]
                        }
                      },
                      {
                        "expression": {
                          "baseExpression": {
                            "id": 12965,
                            "name": "_tokenURIs",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 12456,
                            "src": "8108:10:32",
                            "typeDescriptions": {
                              "typeIdentifier": "t_mapping$_t_uint256_$_t_string_storage_$",
                              "typeString": "mapping(uint256 => string storage ref)"
                            }
                          },
                          "id": 12967,
                          "indexExpression": {
                            "id": 12966,
                            "name": "tokenId",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 12901,
                            "src": "8119:7:32",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "isConstant": false,
                          "isLValue": true,
                          "isPure": false,
                          "lValueRequested": false,
                          "nodeType": "IndexAccess",
                          "src": "8108:19:32",
                          "typeDescriptions": {
                            "typeIdentifier": "t_string_storage",
                            "typeString": "string storage ref"
                          }
                        },
                        "functionReturnParameters": 12905,
                        "id": 12968,
                        "nodeType": "Return",
                        "src": "8101:26:32"
                      }
                    ]
                  }
                },
                {
                  "condition": {
                    "arguments": [
                      {
                        "id": 12973,
                        "name": "extension",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 12918,
                        "src": "8184:9:32",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "expression": {
                          "arguments": [
                            {
                              "id": 12975,
                              "name": "ICreatorExtensionTokenURI",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 16591,
                              "src": "8200:25:32",
                              "typeDescriptions": {
                                "typeIdentifier": "t_type$_t_contract$_ICreatorExtensionTokenURI_$16591_$",
                                "typeString": "type(contract ICreatorExtensionTokenURI)"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_type$_t_contract$_ICreatorExtensionTokenURI_$16591_$",
                                "typeString": "type(contract ICreatorExtensionTokenURI)"
                              }
                            ],
                            "id": 12974,
                            "name": "type",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 4294967269,
                            "src": "8195:4:32",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_metatype_pure$__$returns$__$",
                              "typeString": "function () pure"
                            }
                          },
                          "id": 12976,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "nameLocations": [],
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "8195:31:32",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_magic_meta_type_t_contract$_ICreatorExtensionTokenURI_$16591",
                            "typeString": "type(contract ICreatorExtensionTokenURI)"
                          }
                        },
                        "id": 12977,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "lValueRequested": false,
                        "memberLocation": "8227:11:32",
                        "memberName": "interfaceId",
                        "nodeType": "MemberAccess",
                        "src": "8195:43:32",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes4",
                          "typeString": "bytes4"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        {
                          "typeIdentifier": "t_bytes4",
                          "typeString": "bytes4"
                        }
                      ],
                      "expression": {
                        "id": 12971,
                        "name": "ERC165Checker",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 2326,
                        "src": "8152:13:32",
                        "typeDescriptions": {
                          "typeIdentifier": "t_type$_t_contract$_ERC165Checker_$2326_$",
                          "typeString": "type(library ERC165Checker)"
                        }
                      },
                      "id": 12972,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberLocation": "8166:17:32",
                      "memberName": "supportsInterface",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 2182,
                      "src": "8152:31:32",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_view$_t_address_$_t_bytes4_$returns$_t_bool_$",
                        "typeString": "function (address,bytes4) view returns (bool)"
                      }
                    },
                    "id": 12978,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "nameLocations": [],
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "8152:87:32",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "id": 12991,
                  "nodeType": "IfStatement",
                  "src": "8148:194:32",
                  "trueBody": {
                    "id": 12990,
                    "nodeType": "Block",
                    "src": "8241:101:32",
                    "statements": [
                      {
                        "expression": {
                          "arguments": [
                            {
                              "arguments": [
                                {
                                  "id": 12985,
                                  "name": "this",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 4294967268,
                                  "src": "8316:4:32",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_contract$_CreatorCore_$13473",
                                    "typeString": "contract CreatorCore"
                                  }
                                }
                              ],
                              "expression": {
                                "argumentTypes": [
                                  {
                                    "typeIdentifier": "t_contract$_CreatorCore_$13473",
                                    "typeString": "contract CreatorCore"
                                  }
                                ],
                                "id": 12984,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": true,
                                "lValueRequested": false,
                                "nodeType": "ElementaryTypeNameExpression",
                                "src": "8308:7:32",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_type$_t_address_$",
                                  "typeString": "type(address)"
                                },
                                "typeName": {
                                  "id": 12983,
                                  "name": "address",
                                  "nodeType": "ElementaryTypeName",
                                  "src": "8308:7:32",
                                  "typeDescriptions": {}
                                }
                              },
                              "id": 12986,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "kind": "typeConversion",
                              "lValueRequested": false,
                              "nameLocations": [],
                              "names": [],
                              "nodeType": "FunctionCall",
                              "src": "8308:13:32",
                              "tryCall": false,
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            {
                              "id": 12987,
                              "name": "tokenId",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 12901,
                              "src": "8323:7:32",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              },
                              {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            ],
                            "expression": {
                              "arguments": [
                                {
                                  "id": 12980,
                                  "name": "extension",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 12918,
                                  "src": "8288:9:32",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_address",
                                    "typeString": "address"
                                  }
                                }
                              ],
                              "expression": {
                                "argumentTypes": [
                                  {
                                    "typeIdentifier": "t_address",
                                    "typeString": "address"
                                  }
                                ],
                                "id": 12979,
                                "name": "ICreatorExtensionTokenURI",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 16591,
                                "src": "8262:25:32",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_type$_t_contract$_ICreatorExtensionTokenURI_$16591_$",
                                  "typeString": "type(contract ICreatorExtensionTokenURI)"
                                }
                              },
                              "id": 12981,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "kind": "typeConversion",
                              "lValueRequested": false,
                              "nameLocations": [],
                              "names": [],
                              "nodeType": "FunctionCall",
                              "src": "8262:36:32",
                              "tryCall": false,
                              "typeDescriptions": {
                                "typeIdentifier": "t_contract$_ICreatorExtensionTokenURI_$16591",
                                "typeString": "contract ICreatorExtensionTokenURI"
                              }
                            },
                            "id": 12982,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberLocation": "8299:8:32",
                            "memberName": "tokenURI",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": 16590,
                            "src": "8262:45:32",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_external_view$_t_address_$_t_uint256_$returns$_t_string_memory_ptr_$",
                              "typeString": "function (address,uint256) view external returns (string memory)"
                            }
                          },
                          "id": 12988,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "nameLocations": [],
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "8262:69:32",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_string_memory_ptr",
                            "typeString": "string memory"
                          }
                        },
                        "functionReturnParameters": 12905,
                        "id": 12989,
                        "nodeType": "Return",
                        "src": "8255:76:32"
                      }
                    ]
                  }
                },
                {
                  "condition": {
                    "id": 12995,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "nodeType": "UnaryOperation",
                    "operator": "!",
                    "prefix": true,
                    "src": "8356:38:32",
                    "subExpression": {
                      "baseExpression": {
                        "id": 12992,
                        "name": "_extensionBaseURIIdentical",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 12448,
                        "src": "8357:26:32",
                        "typeDescriptions": {
                          "typeIdentifier": "t_mapping$_t_address_$_t_bool_$",
                          "typeString": "mapping(address => bool)"
                        }
                      },
                      "id": 12994,
                      "indexExpression": {
                        "id": 12993,
                        "name": "extension",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 12918,
                        "src": "8384:9:32",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": false,
                      "nodeType": "IndexAccess",
                      "src": "8357:37:32",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bool",
                        "typeString": "bool"
                      }
                    },
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "falseBody": {
                    "id": 13014,
                    "nodeType": "Block",
                    "src": "8508:60:32",
                    "statements": [
                      {
                        "expression": {
                          "baseExpression": {
                            "id": 13010,
                            "name": "_extensionBaseURI",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 12444,
                            "src": "8529:17:32",
                            "typeDescriptions": {
                              "typeIdentifier": "t_mapping$_t_address_$_t_string_storage_$",
                              "typeString": "mapping(address => string storage ref)"
                            }
                          },
                          "id": 13012,
                          "indexExpression": {
                            "id": 13011,
                            "name": "extension",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 12918,
                            "src": "8547:9:32",
                            "typeDescriptions": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          },
                          "isConstant": false,
                          "isLValue": true,
                          "isPure": false,
                          "lValueRequested": false,
                          "nodeType": "IndexAccess",
                          "src": "8529:28:32",
                          "typeDescriptions": {
                            "typeIdentifier": "t_string_storage",
                            "typeString": "string storage ref"
                          }
                        },
                        "functionReturnParameters": 12905,
                        "id": 13013,
                        "nodeType": "Return",
                        "src": "8522:35:32"
                      }
                    ]
                  },
                  "id": 13015,
                  "nodeType": "IfStatement",
                  "src": "8352:216:32",
                  "trueBody": {
                    "id": 13009,
                    "nodeType": "Block",
                    "src": "8396:106:32",
                    "statements": [
                      {
                        "expression": {
                          "arguments": [
                            {
                              "arguments": [
                                {
                                  "baseExpression": {
                                    "id": 13000,
                                    "name": "_extensionBaseURI",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 12444,
                                    "src": "8441:17:32",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_mapping$_t_address_$_t_string_storage_$",
                                      "typeString": "mapping(address => string storage ref)"
                                    }
                                  },
                                  "id": 13002,
                                  "indexExpression": {
                                    "id": 13001,
                                    "name": "extension",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 12918,
                                    "src": "8459:9:32",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_address",
                                      "typeString": "address"
                                    }
                                  },
                                  "isConstant": false,
                                  "isLValue": true,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "nodeType": "IndexAccess",
                                  "src": "8441:28:32",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_string_storage",
                                    "typeString": "string storage ref"
                                  }
                                },
                                {
                                  "arguments": [],
                                  "expression": {
                                    "argumentTypes": [],
                                    "expression": {
                                      "id": 13003,
                                      "name": "tokenId",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 12901,
                                      "src": "8471:7:32",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                      }
                                    },
                                    "id": 13004,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": false,
                                    "lValueRequested": false,
                                    "memberLocation": "8479:8:32",
                                    "memberName": "toString",
                                    "nodeType": "MemberAccess",
                                    "referencedDeclaration": 1991,
                                    "src": "8471:16:32",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_function_internal_pure$_t_uint256_$returns$_t_string_memory_ptr_$attached_to$_t_uint256_$",
                                      "typeString": "function (uint256) pure returns (string memory)"
                                    }
                                  },
                                  "id": 13005,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "kind": "functionCall",
                                  "lValueRequested": false,
                                  "nameLocations": [],
                                  "names": [],
                                  "nodeType": "FunctionCall",
                                  "src": "8471:18:32",
                                  "tryCall": false,
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_string_memory_ptr",
                                    "typeString": "string memory"
                                  }
                                }
                              ],
                              "expression": {
                                "argumentTypes": [
                                  {
                                    "typeIdentifier": "t_string_storage",
                                    "typeString": "string storage ref"
                                  },
                                  {
                                    "typeIdentifier": "t_string_memory_ptr",
                                    "typeString": "string memory"
                                  }
                                ],
                                "expression": {
                                  "id": 12998,
                                  "name": "abi",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 4294967295,
                                  "src": "8424:3:32",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_magic_abi",
                                    "typeString": "abi"
                                  }
                                },
                                "id": 12999,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": true,
                                "lValueRequested": false,
                                "memberLocation": "8428:12:32",
                                "memberName": "encodePacked",
                                "nodeType": "MemberAccess",
                                "src": "8424:16:32",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_function_abiencodepacked_pure$__$returns$_t_bytes_memory_ptr_$",
                                  "typeString": "function () pure returns (bytes memory)"
                                }
                              },
                              "id": 13006,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "kind": "functionCall",
                              "lValueRequested": false,
                              "nameLocations": [],
                              "names": [],
                              "nodeType": "FunctionCall",
                              "src": "8424:66:32",
                              "tryCall": false,
                              "typeDescriptions": {
                                "typeIdentifier": "t_bytes_memory_ptr",
                                "typeString": "bytes memory"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_bytes_memory_ptr",
                                "typeString": "bytes memory"
                              }
                            ],
                            "id": 12997,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "lValueRequested": false,
                            "nodeType": "ElementaryTypeNameExpression",
                            "src": "8417:6:32",
                            "typeDescriptions": {
                              "typeIdentifier": "t_type$_t_string_storage_ptr_$",
                              "typeString": "type(string storage pointer)"
                            },
                            "typeName": {
                              "id": 12996,
                              "name": "string",
                              "nodeType": "ElementaryTypeName",
                              "src": "8417:6:32",
                              "typeDescriptions": {}
                            }
                          },
                          "id": 13007,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "typeConversion",
                          "lValueRequested": false,
                          "nameLocations": [],
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "8417:74:32",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_string_memory_ptr",
                            "typeString": "string memory"
                          }
                        },
                        "functionReturnParameters": 12905,
                        "id": 13008,
                        "nodeType": "Return",
                        "src": "8410:81:32"
                      }
                    ]
                  }
                }
              ]
            },
            "documentation": {
              "id": 12899,
              "nodeType": "StructuredDocumentation",
              "src": "7507:46:32",
              "text": " @dev Retrieve a token's URI"
            },
            "id": 13017,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "_tokenURI",
            "nameLocation": "7567:9:32",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 12902,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 12901,
                  "mutability": "mutable",
                  "name": "tokenId",
                  "nameLocation": "7585:7:32",
                  "nodeType": "VariableDeclaration",
                  "scope": 13017,
                  "src": "7577:15:32",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 12900,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "7577:7:32",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "7576:17:32"
            },
            "returnParameters": {
              "id": 12905,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 12904,
                  "mutability": "mutable",
                  "name": "",
                  "nameLocation": "-1:-1:-1",
                  "nodeType": "VariableDeclaration",
                  "scope": 13017,
                  "src": "7617:13:32",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_string_memory_ptr",
                    "typeString": "string"
                  },
                  "typeName": {
                    "id": 12903,
                    "name": "string",
                    "nodeType": "ElementaryTypeName",
                    "src": "7617:6:32",
                    "typeDescriptions": {
                      "typeIdentifier": "t_string_storage_ptr",
                      "typeString": "string"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "7616:15:32"
            },
            "scope": 13473,
            "src": "7558:1016:32",
            "stateMutability": "view",
            "virtual": false,
            "visibility": "internal"
          },
          {
            "body": {
              "id": 13168,
              "nodeType": "Block",
              "src": "8760:1271:32",
              "statements": [
                {
                  "assignments": [
                    13033
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 13033,
                      "mutability": "mutable",
                      "name": "royalties",
                      "nameLocation": "8831:9:32",
                      "nodeType": "VariableDeclaration",
                      "scope": 13168,
                      "src": "8808:32:32",
                      "stateVariable": false,
                      "storageLocation": "memory",
                      "typeDescriptions": {
                        "typeIdentifier": "t_array$_t_struct$_RoyaltyConfig_$12461_memory_ptr_$dyn_memory_ptr",
                        "typeString": "struct CreatorCore.RoyaltyConfig[]"
                      },
                      "typeName": {
                        "baseType": {
                          "id": 13031,
                          "nodeType": "UserDefinedTypeName",
                          "pathNode": {
                            "id": 13030,
                            "name": "RoyaltyConfig",
                            "nameLocations": [
                              "8808:13:32"
                            ],
                            "nodeType": "IdentifierPath",
                            "referencedDeclaration": 12461,
                            "src": "8808:13:32"
                          },
                          "referencedDeclaration": 12461,
                          "src": "8808:13:32",
                          "typeDescriptions": {
                            "typeIdentifier": "t_struct$_RoyaltyConfig_$12461_storage_ptr",
                            "typeString": "struct CreatorCore.RoyaltyConfig"
                          }
                        },
                        "id": 13032,
                        "nodeType": "ArrayTypeName",
                        "src": "8808:15:32",
                        "typeDescriptions": {
                          "typeIdentifier": "t_array$_t_struct$_RoyaltyConfig_$12461_storage_$dyn_storage_ptr",
                          "typeString": "struct CreatorCore.RoyaltyConfig[]"
                        }
                      },
                      "visibility": "internal"
                    }
                  ],
                  "id": 13037,
                  "initialValue": {
                    "baseExpression": {
                      "id": 13034,
                      "name": "_tokenRoyalty",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 12473,
                      "src": "8843:13:32",
                      "typeDescriptions": {
                        "typeIdentifier": "t_mapping$_t_uint256_$_t_array$_t_struct$_RoyaltyConfig_$12461_storage_$dyn_storage_$",
                        "typeString": "mapping(uint256 => struct CreatorCore.RoyaltyConfig storage ref[] storage ref)"
                      }
                    },
                    "id": 13036,
                    "indexExpression": {
                      "id": 13035,
                      "name": "tokenId",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 13020,
                      "src": "8857:7:32",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "isConstant": false,
                    "isLValue": true,
                    "isPure": false,
                    "lValueRequested": false,
                    "nodeType": "IndexAccess",
                    "src": "8843:22:32",
                    "typeDescriptions": {
                      "typeIdentifier": "t_array$_t_struct$_RoyaltyConfig_$12461_storage_$dyn_storage",
                      "typeString": "struct CreatorCore.RoyaltyConfig storage ref[] storage ref"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "8808:57:32"
                },
                {
                  "condition": {
                    "commonType": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    },
                    "id": 13041,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "expression": {
                        "id": 13038,
                        "name": "royalties",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 13033,
                        "src": "8879:9:32",
                        "typeDescriptions": {
                          "typeIdentifier": "t_array$_t_struct$_RoyaltyConfig_$12461_memory_ptr_$dyn_memory_ptr",
                          "typeString": "struct CreatorCore.RoyaltyConfig memory[] memory"
                        }
                      },
                      "id": 13039,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberLocation": "8889:6:32",
                      "memberName": "length",
                      "nodeType": "MemberAccess",
                      "src": "8879:16:32",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "==",
                    "rightExpression": {
                      "hexValue": "30",
                      "id": 13040,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "number",
                      "lValueRequested": false,
                      "nodeType": "Literal",
                      "src": "8899:1:32",
                      "typeDescriptions": {
                        "typeIdentifier": "t_rational_0_by_1",
                        "typeString": "int_const 0"
                      },
                      "value": "0"
                    },
                    "src": "8879:21:32",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "id": 13097,
                  "nodeType": "IfStatement",
                  "src": "8875:642:32",
                  "trueBody": {
                    "id": 13096,
                    "nodeType": "Block",
                    "src": "8902:615:32",
                    "statements": [
                      {
                        "assignments": [
                          13043
                        ],
                        "declarations": [
                          {
                            "constant": false,
                            "id": 13043,
                            "mutability": "mutable",
                            "name": "extension",
                            "nameLocation": "8972:9:32",
                            "nodeType": "VariableDeclaration",
                            "scope": 13096,
                            "src": "8964:17:32",
                            "stateVariable": false,
                            "storageLocation": "default",
                            "typeDescriptions": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            },
                            "typeName": {
                              "id": 13042,
                              "name": "address",
                              "nodeType": "ElementaryTypeName",
                              "src": "8964:7:32",
                              "stateMutability": "nonpayable",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            "visibility": "internal"
                          }
                        ],
                        "id": 13047,
                        "initialValue": {
                          "arguments": [
                            {
                              "id": 13045,
                              "name": "tokenId",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 13020,
                              "src": "9000:7:32",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            ],
                            "id": 13044,
                            "name": "_tokenExtension",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 13472,
                            "src": "8984:15:32",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_internal_view$_t_uint256_$returns$_t_address_$",
                              "typeString": "function (uint256) view returns (address)"
                            }
                          },
                          "id": 13046,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "nameLocations": [],
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "8984:24:32",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "nodeType": "VariableDeclarationStatement",
                        "src": "8964:44:32"
                      },
                      {
                        "condition": {
                          "commonType": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          },
                          "id": 13053,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftExpression": {
                            "id": 13048,
                            "name": "extension",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 13043,
                            "src": "9026:9:32",
                            "typeDescriptions": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          },
                          "nodeType": "BinaryOperation",
                          "operator": "!=",
                          "rightExpression": {
                            "arguments": [
                              {
                                "hexValue": "30",
                                "id": 13051,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": true,
                                "kind": "number",
                                "lValueRequested": false,
                                "nodeType": "Literal",
                                "src": "9047:1:32",
                                "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": 13050,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "lValueRequested": false,
                              "nodeType": "ElementaryTypeNameExpression",
                              "src": "9039:7:32",
                              "typeDescriptions": {
                                "typeIdentifier": "t_type$_t_address_$",
                                "typeString": "type(address)"
                              },
                              "typeName": {
                                "id": 13049,
                                "name": "address",
                                "nodeType": "ElementaryTypeName",
                                "src": "9039:7:32",
                                "typeDescriptions": {}
                              }
                            },
                            "id": 13052,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "kind": "typeConversion",
                            "lValueRequested": false,
                            "nameLocations": [],
                            "names": [],
                            "nodeType": "FunctionCall",
                            "src": "9039:10:32",
                            "tryCall": false,
                            "typeDescriptions": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          },
                          "src": "9026:23:32",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "id": 13095,
                        "nodeType": "IfStatement",
                        "src": "9022:485:32",
                        "trueBody": {
                          "id": 13094,
                          "nodeType": "Block",
                          "src": "9051:456:32",
                          "statements": [
                            {
                              "condition": {
                                "arguments": [
                                  {
                                    "id": 13056,
                                    "name": "extension",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 13043,
                                    "src": "9105:9:32",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_address",
                                      "typeString": "address"
                                    }
                                  },
                                  {
                                    "expression": {
                                      "arguments": [
                                        {
                                          "id": 13058,
                                          "name": "ICreatorExtensionRoyalties",
                                          "nodeType": "Identifier",
                                          "overloadedDeclarations": [],
                                          "referencedDeclaration": 16574,
                                          "src": "9121:26:32",
                                          "typeDescriptions": {
                                            "typeIdentifier": "t_type$_t_contract$_ICreatorExtensionRoyalties_$16574_$",
                                            "typeString": "type(contract ICreatorExtensionRoyalties)"
                                          }
                                        }
                                      ],
                                      "expression": {
                                        "argumentTypes": [
                                          {
                                            "typeIdentifier": "t_type$_t_contract$_ICreatorExtensionRoyalties_$16574_$",
                                            "typeString": "type(contract ICreatorExtensionRoyalties)"
                                          }
                                        ],
                                        "id": 13057,
                                        "name": "type",
                                        "nodeType": "Identifier",
                                        "overloadedDeclarations": [],
                                        "referencedDeclaration": 4294967269,
                                        "src": "9116:4:32",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_function_metatype_pure$__$returns$__$",
                                          "typeString": "function () pure"
                                        }
                                      },
                                      "id": 13059,
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": true,
                                      "kind": "functionCall",
                                      "lValueRequested": false,
                                      "nameLocations": [],
                                      "names": [],
                                      "nodeType": "FunctionCall",
                                      "src": "9116:32:32",
                                      "tryCall": false,
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_magic_meta_type_t_contract$_ICreatorExtensionRoyalties_$16574",
                                        "typeString": "type(contract ICreatorExtensionRoyalties)"
                                      }
                                    },
                                    "id": 13060,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": true,
                                    "lValueRequested": false,
                                    "memberLocation": "9149:11:32",
                                    "memberName": "interfaceId",
                                    "nodeType": "MemberAccess",
                                    "src": "9116:44:32",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_bytes4",
                                      "typeString": "bytes4"
                                    }
                                  }
                                ],
                                "expression": {
                                  "argumentTypes": [
                                    {
                                      "typeIdentifier": "t_address",
                                      "typeString": "address"
                                    },
                                    {
                                      "typeIdentifier": "t_bytes4",
                                      "typeString": "bytes4"
                                    }
                                  ],
                                  "expression": {
                                    "id": 13054,
                                    "name": "ERC165Checker",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 2326,
                                    "src": "9073:13:32",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_type$_t_contract$_ERC165Checker_$2326_$",
                                      "typeString": "type(library ERC165Checker)"
                                    }
                                  },
                                  "id": 13055,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "memberLocation": "9087:17:32",
                                  "memberName": "supportsInterface",
                                  "nodeType": "MemberAccess",
                                  "referencedDeclaration": 2182,
                                  "src": "9073:31:32",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_function_internal_view$_t_address_$_t_bytes4_$returns$_t_bool_$",
                                    "typeString": "function (address,bytes4) view returns (bool)"
                                  }
                                },
                                "id": 13061,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "kind": "functionCall",
                                "lValueRequested": false,
                                "nameLocations": [],
                                "names": [],
                                "nodeType": "FunctionCall",
                                "src": "9073:88:32",
                                "tryCall": false,
                                "typeDescriptions": {
                                  "typeIdentifier": "t_bool",
                                  "typeString": "bool"
                                }
                              },
                              "id": 13087,
                              "nodeType": "IfStatement",
                              "src": "9069:366:32",
                              "trueBody": {
                                "id": 13086,
                                "nodeType": "Block",
                                "src": "9163:272:32",
                                "statements": [
                                  {
                                    "expression": {
                                      "id": 13075,
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": false,
                                      "lValueRequested": false,
                                      "leftHandSide": {
                                        "components": [
                                          {
                                            "id": 13062,
                                            "name": "receivers",
                                            "nodeType": "Identifier",
                                            "overloadedDeclarations": [],
                                            "referencedDeclaration": 13024,
                                            "src": "9186:9:32",
                                            "typeDescriptions": {
                                              "typeIdentifier": "t_array$_t_address_payable_$dyn_memory_ptr",
                                              "typeString": "address payable[] memory"
                                            }
                                          },
                                          {
                                            "id": 13063,
                                            "name": "bps",
                                            "nodeType": "Identifier",
                                            "overloadedDeclarations": [],
                                            "referencedDeclaration": 13027,
                                            "src": "9197:3:32",
                                            "typeDescriptions": {
                                              "typeIdentifier": "t_array$_t_uint256_$dyn_memory_ptr",
                                              "typeString": "uint256[] memory"
                                            }
                                          }
                                        ],
                                        "id": 13064,
                                        "isConstant": false,
                                        "isInlineArray": false,
                                        "isLValue": true,
                                        "isPure": false,
                                        "lValueRequested": true,
                                        "nodeType": "TupleExpression",
                                        "src": "9185:16:32",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_tuple$_t_array$_t_address_payable_$dyn_memory_ptr_$_t_array$_t_uint256_$dyn_memory_ptr_$",
                                          "typeString": "tuple(address payable[] memory,uint256[] memory)"
                                        }
                                      },
                                      "nodeType": "Assignment",
                                      "operator": "=",
                                      "rightHandSide": {
                                        "arguments": [
                                          {
                                            "arguments": [
                                              {
                                                "id": 13071,
                                                "name": "this",
                                                "nodeType": "Identifier",
                                                "overloadedDeclarations": [],
                                                "referencedDeclaration": 4294967268,
                                                "src": "9263:4:32",
                                                "typeDescriptions": {
                                                  "typeIdentifier": "t_contract$_CreatorCore_$13473",
                                                  "typeString": "contract CreatorCore"
                                                }
                                              }
                                            ],
                                            "expression": {
                                              "argumentTypes": [
                                                {
                                                  "typeIdentifier": "t_contract$_CreatorCore_$13473",
                                                  "typeString": "contract CreatorCore"
                                                }
                                              ],
                                              "id": 13070,
                                              "isConstant": false,
                                              "isLValue": false,
                                              "isPure": true,
                                              "lValueRequested": false,
                                              "nodeType": "ElementaryTypeNameExpression",
                                              "src": "9255:7:32",
                                              "typeDescriptions": {
                                                "typeIdentifier": "t_type$_t_address_$",
                                                "typeString": "type(address)"
                                              },
                                              "typeName": {
                                                "id": 13069,
                                                "name": "address",
                                                "nodeType": "ElementaryTypeName",
                                                "src": "9255:7:32",
                                                "typeDescriptions": {}
                                              }
                                            },
                                            "id": 13072,
                                            "isConstant": false,
                                            "isLValue": false,
                                            "isPure": false,
                                            "kind": "typeConversion",
                                            "lValueRequested": false,
                                            "nameLocations": [],
                                            "names": [],
                                            "nodeType": "FunctionCall",
                                            "src": "9255:13:32",
                                            "tryCall": false,
                                            "typeDescriptions": {
                                              "typeIdentifier": "t_address",
                                              "typeString": "address"
                                            }
                                          },
                                          {
                                            "id": 13073,
                                            "name": "tokenId",
                                            "nodeType": "Identifier",
                                            "overloadedDeclarations": [],
                                            "referencedDeclaration": 13020,
                                            "src": "9270:7:32",
                                            "typeDescriptions": {
                                              "typeIdentifier": "t_uint256",
                                              "typeString": "uint256"
                                            }
                                          }
                                        ],
                                        "expression": {
                                          "argumentTypes": [
                                            {
                                              "typeIdentifier": "t_address",
                                              "typeString": "address"
                                            },
                                            {
                                              "typeIdentifier": "t_uint256",
                                              "typeString": "uint256"
                                            }
                                          ],
                                          "expression": {
                                            "arguments": [
                                              {
                                                "id": 13066,
                                                "name": "extension",
                                                "nodeType": "Identifier",
                                                "overloadedDeclarations": [],
                                                "referencedDeclaration": 13043,
                                                "src": "9231:9:32",
                                                "typeDescriptions": {
                                                  "typeIdentifier": "t_address",
                                                  "typeString": "address"
                                                }
                                              }
                                            ],
                                            "expression": {
                                              "argumentTypes": [
                                                {
                                                  "typeIdentifier": "t_address",
                                                  "typeString": "address"
                                                }
                                              ],
                                              "id": 13065,
                                              "name": "ICreatorExtensionRoyalties",
                                              "nodeType": "Identifier",
                                              "overloadedDeclarations": [],
                                              "referencedDeclaration": 16574,
                                              "src": "9204:26:32",
                                              "typeDescriptions": {
                                                "typeIdentifier": "t_type$_t_contract$_ICreatorExtensionRoyalties_$16574_$",
                                                "typeString": "type(contract ICreatorExtensionRoyalties)"
                                              }
                                            },
                                            "id": 13067,
                                            "isConstant": false,
                                            "isLValue": false,
                                            "isPure": false,
                                            "kind": "typeConversion",
                                            "lValueRequested": false,
                                            "nameLocations": [],
                                            "names": [],
                                            "nodeType": "FunctionCall",
                                            "src": "9204:37:32",
                                            "tryCall": false,
                                            "typeDescriptions": {
                                              "typeIdentifier": "t_contract$_ICreatorExtensionRoyalties_$16574",
                                              "typeString": "contract ICreatorExtensionRoyalties"
                                            }
                                          },
                                          "id": 13068,
                                          "isConstant": false,
                                          "isLValue": false,
                                          "isPure": false,
                                          "lValueRequested": false,
                                          "memberLocation": "9242:12:32",
                                          "memberName": "getRoyalties",
                                          "nodeType": "MemberAccess",
                                          "referencedDeclaration": 16573,
                                          "src": "9204:50:32",
                                          "typeDescriptions": {
                                            "typeIdentifier": "t_function_external_view$_t_address_$_t_uint256_$returns$_t_array$_t_address_payable_$dyn_memory_ptr_$_t_array$_t_uint256_$dyn_memory_ptr_$",
                                            "typeString": "function (address,uint256) view external returns (address payable[] memory,uint256[] memory)"
                                          }
                                        },
                                        "id": 13074,
                                        "isConstant": false,
                                        "isLValue": false,
                                        "isPure": false,
                                        "kind": "functionCall",
                                        "lValueRequested": false,
                                        "nameLocations": [],
                                        "names": [],
                                        "nodeType": "FunctionCall",
                                        "src": "9204:74:32",
                                        "tryCall": false,
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_tuple$_t_array$_t_address_payable_$dyn_memory_ptr_$_t_array$_t_uint256_$dyn_memory_ptr_$",
                                          "typeString": "tuple(address payable[] memory,uint256[] memory)"
                                        }
                                      },
                                      "src": "9185:93:32",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_tuple$__$",
                                        "typeString": "tuple()"
                                      }
                                    },
                                    "id": 13076,
                                    "nodeType": "ExpressionStatement",
                                    "src": "9185:93:32"
                                  },
                                  {
                                    "condition": {
                                      "commonType": {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                      },
                                      "id": 13080,
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": false,
                                      "lValueRequested": false,
                                      "leftExpression": {
                                        "expression": {
                                          "id": 13077,
                                          "name": "receivers",
                                          "nodeType": "Identifier",
                                          "overloadedDeclarations": [],
                                          "referencedDeclaration": 13024,
                                          "src": "9371:9:32",
                                          "typeDescriptions": {
                                            "typeIdentifier": "t_array$_t_address_payable_$dyn_memory_ptr",
                                            "typeString": "address payable[] memory"
                                          }
                                        },
                                        "id": 13078,
                                        "isConstant": false,
                                        "isLValue": false,
                                        "isPure": false,
                                        "lValueRequested": false,
                                        "memberLocation": "9381:6:32",
                                        "memberName": "length",
                                        "nodeType": "MemberAccess",
                                        "src": "9371:16:32",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_uint256",
                                          "typeString": "uint256"
                                        }
                                      },
                                      "nodeType": "BinaryOperation",
                                      "operator": ">",
                                      "rightExpression": {
                                        "hexValue": "30",
                                        "id": 13079,
                                        "isConstant": false,
                                        "isLValue": false,
                                        "isPure": true,
                                        "kind": "number",
                                        "lValueRequested": false,
                                        "nodeType": "Literal",
                                        "src": "9390:1:32",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_rational_0_by_1",
                                          "typeString": "int_const 0"
                                        },
                                        "value": "0"
                                      },
                                      "src": "9371:20:32",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_bool",
                                        "typeString": "bool"
                                      }
                                    },
                                    "id": 13085,
                                    "nodeType": "IfStatement",
                                    "src": "9367:49:32",
                                    "trueBody": {
                                      "expression": {
                                        "components": [
                                          {
                                            "id": 13081,
                                            "name": "receivers",
                                            "nodeType": "Identifier",
                                            "overloadedDeclarations": [],
                                            "referencedDeclaration": 13024,
                                            "src": "9401:9:32",
                                            "typeDescriptions": {
                                              "typeIdentifier": "t_array$_t_address_payable_$dyn_memory_ptr",
                                              "typeString": "address payable[] memory"
                                            }
                                          },
                                          {
                                            "id": 13082,
                                            "name": "bps",
                                            "nodeType": "Identifier",
                                            "overloadedDeclarations": [],
                                            "referencedDeclaration": 13027,
                                            "src": "9412:3:32",
                                            "typeDescriptions": {
                                              "typeIdentifier": "t_array$_t_uint256_$dyn_memory_ptr",
                                              "typeString": "uint256[] memory"
                                            }
                                          }
                                        ],
                                        "id": 13083,
                                        "isConstant": false,
                                        "isInlineArray": false,
                                        "isLValue": false,
                                        "isPure": false,
                                        "lValueRequested": false,
                                        "nodeType": "TupleExpression",
                                        "src": "9400:16:32",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_tuple$_t_array$_t_address_payable_$dyn_memory_ptr_$_t_array$_t_uint256_$dyn_memory_ptr_$",
                                          "typeString": "tuple(address payable[] memory,uint256[] memory)"
                                        }
                                      },
                                      "functionReturnParameters": 13028,
                                      "id": 13084,
                                      "nodeType": "Return",
                                      "src": "9393:23:32"
                                    }
                                  }
                                ]
                              }
                            },
                            {
                              "expression": {
                                "id": 13092,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "leftHandSide": {
                                  "id": 13088,
                                  "name": "royalties",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 13033,
                                  "src": "9452:9:32",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_array$_t_struct$_RoyaltyConfig_$12461_memory_ptr_$dyn_memory_ptr",
                                    "typeString": "struct CreatorCore.RoyaltyConfig memory[] memory"
                                  }
                                },
                                "nodeType": "Assignment",
                                "operator": "=",
                                "rightHandSide": {
                                  "baseExpression": {
                                    "id": 13089,
                                    "name": "_extensionRoyalty",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 12467,
                                    "src": "9464:17:32",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_mapping$_t_address_$_t_array$_t_struct$_RoyaltyConfig_$12461_storage_$dyn_storage_$",
                                      "typeString": "mapping(address => struct CreatorCore.RoyaltyConfig storage ref[] storage ref)"
                                    }
                                  },
                                  "id": 13091,
                                  "indexExpression": {
                                    "id": 13090,
                                    "name": "extension",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 13043,
                                    "src": "9482:9:32",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_address",
                                      "typeString": "address"
                                    }
                                  },
                                  "isConstant": false,
                                  "isLValue": true,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "nodeType": "IndexAccess",
                                  "src": "9464:28:32",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_array$_t_struct$_RoyaltyConfig_$12461_storage_$dyn_storage",
                                    "typeString": "struct CreatorCore.RoyaltyConfig storage ref[] storage ref"
                                  }
                                },
                                "src": "9452:40:32",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_array$_t_struct$_RoyaltyConfig_$12461_memory_ptr_$dyn_memory_ptr",
                                  "typeString": "struct CreatorCore.RoyaltyConfig memory[] memory"
                                }
                              },
                              "id": 13093,
                              "nodeType": "ExpressionStatement",
                              "src": "9452:40:32"
                            }
                          ]
                        }
                      }
                    ]
                  }
                },
                {
                  "condition": {
                    "commonType": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    },
                    "id": 13101,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "expression": {
                        "id": 13098,
                        "name": "royalties",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 13033,
                        "src": "9530:9:32",
                        "typeDescriptions": {
                          "typeIdentifier": "t_array$_t_struct$_RoyaltyConfig_$12461_memory_ptr_$dyn_memory_ptr",
                          "typeString": "struct CreatorCore.RoyaltyConfig memory[] memory"
                        }
                      },
                      "id": 13099,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberLocation": "9540:6:32",
                      "memberName": "length",
                      "nodeType": "MemberAccess",
                      "src": "9530:16:32",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "==",
                    "rightExpression": {
                      "hexValue": "30",
                      "id": 13100,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "number",
                      "lValueRequested": false,
                      "nodeType": "Literal",
                      "src": "9550:1:32",
                      "typeDescriptions": {
                        "typeIdentifier": "t_rational_0_by_1",
                        "typeString": "int_const 0"
                      },
                      "value": "0"
                    },
                    "src": "9530:21:32",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "id": 13112,
                  "nodeType": "IfStatement",
                  "src": "9526:132:32",
                  "trueBody": {
                    "id": 13111,
                    "nodeType": "Block",
                    "src": "9553:105:32",
                    "statements": [
                      {
                        "expression": {
                          "id": 13109,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftHandSide": {
                            "id": 13102,
                            "name": "royalties",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 13033,
                            "src": "9606:9:32",
                            "typeDescriptions": {
                              "typeIdentifier": "t_array$_t_struct$_RoyaltyConfig_$12461_memory_ptr_$dyn_memory_ptr",
                              "typeString": "struct CreatorCore.RoyaltyConfig memory[] memory"
                            }
                          },
                          "nodeType": "Assignment",
                          "operator": "=",
                          "rightHandSide": {
                            "baseExpression": {
                              "id": 13103,
                              "name": "_extensionRoyalty",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 12467,
                              "src": "9618:17:32",
                              "typeDescriptions": {
                                "typeIdentifier": "t_mapping$_t_address_$_t_array$_t_struct$_RoyaltyConfig_$12461_storage_$dyn_storage_$",
                                "typeString": "mapping(address => struct CreatorCore.RoyaltyConfig storage ref[] storage ref)"
                              }
                            },
                            "id": 13108,
                            "indexExpression": {
                              "arguments": [
                                {
                                  "hexValue": "30",
                                  "id": 13106,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": true,
                                  "kind": "number",
                                  "lValueRequested": false,
                                  "nodeType": "Literal",
                                  "src": "9644:1:32",
                                  "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": 13105,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": true,
                                "lValueRequested": false,
                                "nodeType": "ElementaryTypeNameExpression",
                                "src": "9636:7:32",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_type$_t_address_$",
                                  "typeString": "type(address)"
                                },
                                "typeName": {
                                  "id": 13104,
                                  "name": "address",
                                  "nodeType": "ElementaryTypeName",
                                  "src": "9636:7:32",
                                  "typeDescriptions": {}
                                }
                              },
                              "id": 13107,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "kind": "typeConversion",
                              "lValueRequested": false,
                              "nameLocations": [],
                              "names": [],
                              "nodeType": "FunctionCall",
                              "src": "9636:10:32",
                              "tryCall": false,
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            "isConstant": false,
                            "isLValue": true,
                            "isPure": false,
                            "lValueRequested": false,
                            "nodeType": "IndexAccess",
                            "src": "9618:29:32",
                            "typeDescriptions": {
                              "typeIdentifier": "t_array$_t_struct$_RoyaltyConfig_$12461_storage_$dyn_storage",
                              "typeString": "struct CreatorCore.RoyaltyConfig storage ref[] storage ref"
                            }
                          },
                          "src": "9606:41:32",
                          "typeDescriptions": {
                            "typeIdentifier": "t_array$_t_struct$_RoyaltyConfig_$12461_memory_ptr_$dyn_memory_ptr",
                            "typeString": "struct CreatorCore.RoyaltyConfig memory[] memory"
                          }
                        },
                        "id": 13110,
                        "nodeType": "ExpressionStatement",
                        "src": "9606:41:32"
                      }
                    ]
                  }
                },
                {
                  "condition": {
                    "commonType": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    },
                    "id": 13116,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "expression": {
                        "id": 13113,
                        "name": "royalties",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 13033,
                        "src": "9680:9:32",
                        "typeDescriptions": {
                          "typeIdentifier": "t_array$_t_struct$_RoyaltyConfig_$12461_memory_ptr_$dyn_memory_ptr",
                          "typeString": "struct CreatorCore.RoyaltyConfig memory[] memory"
                        }
                      },
                      "id": 13114,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberLocation": "9690:6:32",
                      "memberName": "length",
                      "nodeType": "MemberAccess",
                      "src": "9680:16:32",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": ">",
                    "rightExpression": {
                      "hexValue": "30",
                      "id": 13115,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "number",
                      "lValueRequested": false,
                      "nodeType": "Literal",
                      "src": "9699:1:32",
                      "typeDescriptions": {
                        "typeIdentifier": "t_rational_0_by_1",
                        "typeString": "int_const 0"
                      },
                      "value": "0"
                    },
                    "src": "9680:20:32",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "id": 13167,
                  "nodeType": "IfStatement",
                  "src": "9676:349:32",
                  "trueBody": {
                    "id": 13166,
                    "nodeType": "Block",
                    "src": "9702:323:32",
                    "statements": [
                      {
                        "expression": {
                          "id": 13124,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftHandSide": {
                            "id": 13117,
                            "name": "receivers",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 13024,
                            "src": "9716:9:32",
                            "typeDescriptions": {
                              "typeIdentifier": "t_array$_t_address_payable_$dyn_memory_ptr",
                              "typeString": "address payable[] memory"
                            }
                          },
                          "nodeType": "Assignment",
                          "operator": "=",
                          "rightHandSide": {
                            "arguments": [
                              {
                                "expression": {
                                  "id": 13121,
                                  "name": "royalties",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 13033,
                                  "src": "9750:9:32",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_array$_t_struct$_RoyaltyConfig_$12461_memory_ptr_$dyn_memory_ptr",
                                    "typeString": "struct CreatorCore.RoyaltyConfig memory[] memory"
                                  }
                                },
                                "id": 13122,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "memberLocation": "9760:6:32",
                                "memberName": "length",
                                "nodeType": "MemberAccess",
                                "src": "9750:16:32",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              }
                            ],
                            "expression": {
                              "argumentTypes": [
                                {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              ],
                              "id": 13120,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "lValueRequested": false,
                              "nodeType": "NewExpression",
                              "src": "9728:21:32",
                              "typeDescriptions": {
                                "typeIdentifier": "t_function_objectcreation_pure$_t_uint256_$returns$_t_array$_t_address_payable_$dyn_memory_ptr_$",
                                "typeString": "function (uint256) pure returns (address payable[] memory)"
                              },
                              "typeName": {
                                "baseType": {
                                  "id": 13118,
                                  "name": "address",
                                  "nodeType": "ElementaryTypeName",
                                  "src": "9732:15:32",
                                  "stateMutability": "payable",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_address_payable",
                                    "typeString": "address payable"
                                  }
                                },
                                "id": 13119,
                                "nodeType": "ArrayTypeName",
                                "src": "9732:17:32",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_array$_t_address_payable_$dyn_storage_ptr",
                                  "typeString": "address payable[]"
                                }
                              }
                            },
                            "id": 13123,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "kind": "functionCall",
                            "lValueRequested": false,
                            "nameLocations": [],
                            "names": [],
                            "nodeType": "FunctionCall",
                            "src": "9728:39:32",
                            "tryCall": false,
                            "typeDescriptions": {
                              "typeIdentifier": "t_array$_t_address_payable_$dyn_memory_ptr",
                              "typeString": "address payable[] memory"
                            }
                          },
                          "src": "9716:51:32",
                          "typeDescriptions": {
                            "typeIdentifier": "t_array$_t_address_payable_$dyn_memory_ptr",
                            "typeString": "address payable[] memory"
                          }
                        },
                        "id": 13125,
                        "nodeType": "ExpressionStatement",
                        "src": "9716:51:32"
                      },
                      {
                        "expression": {
                          "id": 13133,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftHandSide": {
                            "id": 13126,
                            "name": "bps",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 13027,
                            "src": "9781:3:32",
                            "typeDescriptions": {
                              "typeIdentifier": "t_array$_t_uint256_$dyn_memory_ptr",
                              "typeString": "uint256[] memory"
                            }
                          },
                          "nodeType": "Assignment",
                          "operator": "=",
                          "rightHandSide": {
                            "arguments": [
                              {
                                "expression": {
                                  "id": 13130,
                                  "name": "royalties",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 13033,
                                  "src": "9801:9:32",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_array$_t_struct$_RoyaltyConfig_$12461_memory_ptr_$dyn_memory_ptr",
                                    "typeString": "struct CreatorCore.RoyaltyConfig memory[] memory"
                                  }
                                },
                                "id": 13131,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "memberLocation": "9811:6:32",
                                "memberName": "length",
                                "nodeType": "MemberAccess",
                                "src": "9801:16:32",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              }
                            ],
                            "expression": {
                              "argumentTypes": [
                                {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              ],
                              "id": 13129,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "lValueRequested": false,
                              "nodeType": "NewExpression",
                              "src": "9787:13:32",
                              "typeDescriptions": {
                                "typeIdentifier": "t_function_objectcreation_pure$_t_uint256_$returns$_t_array$_t_uint256_$dyn_memory_ptr_$",
                                "typeString": "function (uint256) pure returns (uint256[] memory)"
                              },
                              "typeName": {
                                "baseType": {
                                  "id": 13127,
                                  "name": "uint256",
                                  "nodeType": "ElementaryTypeName",
                                  "src": "9791:7:32",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                },
                                "id": 13128,
                                "nodeType": "ArrayTypeName",
                                "src": "9791:9:32",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_array$_t_uint256_$dyn_storage_ptr",
                                  "typeString": "uint256[]"
                                }
                              }
                            },
                            "id": 13132,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "kind": "functionCall",
                            "lValueRequested": false,
                            "nameLocations": [],
                            "names": [],
                            "nodeType": "FunctionCall",
                            "src": "9787:31:32",
                            "tryCall": false,
                            "typeDescriptions": {
                              "typeIdentifier": "t_array$_t_uint256_$dyn_memory_ptr",
                              "typeString": "uint256[] memory"
                            }
                          },
                          "src": "9781:37:32",
                          "typeDescriptions": {
                            "typeIdentifier": "t_array$_t_uint256_$dyn_memory_ptr",
                            "typeString": "uint256[] memory"
                          }
                        },
                        "id": 13134,
                        "nodeType": "ExpressionStatement",
                        "src": "9781:37:32"
                      },
                      {
                        "body": {
                          "id": 13164,
                          "nodeType": "Block",
                          "src": "9868:147:32",
                          "statements": [
                            {
                              "expression": {
                                "id": 13149,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "leftHandSide": {
                                  "baseExpression": {
                                    "id": 13142,
                                    "name": "receivers",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 13024,
                                    "src": "9886:9:32",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_array$_t_address_payable_$dyn_memory_ptr",
                                      "typeString": "address payable[] memory"
                                    }
                                  },
                                  "id": 13144,
                                  "indexExpression": {
                                    "id": 13143,
                                    "name": "i",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 13136,
                                    "src": "9896:1:32",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  },
                                  "isConstant": false,
                                  "isLValue": true,
                                  "isPure": false,
                                  "lValueRequested": true,
                                  "nodeType": "IndexAccess",
                                  "src": "9886:12:32",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_address_payable",
                                    "typeString": "address payable"
                                  }
                                },
                                "nodeType": "Assignment",
                                "operator": "=",
                                "rightHandSide": {
                                  "expression": {
                                    "baseExpression": {
                                      "id": 13145,
                                      "name": "royalties",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 13033,
                                      "src": "9901:9:32",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_array$_t_struct$_RoyaltyConfig_$12461_memory_ptr_$dyn_memory_ptr",
                                        "typeString": "struct CreatorCore.RoyaltyConfig memory[] memory"
                                      }
                                    },
                                    "id": 13147,
                                    "indexExpression": {
                                      "id": 13146,
                                      "name": "i",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 13136,
                                      "src": "9911:1:32",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                      }
                                    },
                                    "isConstant": false,
                                    "isLValue": true,
                                    "isPure": false,
                                    "lValueRequested": false,
                                    "nodeType": "IndexAccess",
                                    "src": "9901:12:32",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_struct$_RoyaltyConfig_$12461_memory_ptr",
                                      "typeString": "struct CreatorCore.RoyaltyConfig memory"
                                    }
                                  },
                                  "id": 13148,
                                  "isConstant": false,
                                  "isLValue": true,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "memberLocation": "9914:8:32",
                                  "memberName": "receiver",
                                  "nodeType": "MemberAccess",
                                  "referencedDeclaration": 12458,
                                  "src": "9901:21:32",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_address_payable",
                                    "typeString": "address payable"
                                  }
                                },
                                "src": "9886:36:32",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_address_payable",
                                  "typeString": "address payable"
                                }
                              },
                              "id": 13150,
                              "nodeType": "ExpressionStatement",
                              "src": "9886:36:32"
                            },
                            {
                              "expression": {
                                "id": 13158,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "leftHandSide": {
                                  "baseExpression": {
                                    "id": 13151,
                                    "name": "bps",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 13027,
                                    "src": "9940:3:32",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_array$_t_uint256_$dyn_memory_ptr",
                                      "typeString": "uint256[] memory"
                                    }
                                  },
                                  "id": 13153,
                                  "indexExpression": {
                                    "id": 13152,
                                    "name": "i",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 13136,
                                    "src": "9944:1:32",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  },
                                  "isConstant": false,
                                  "isLValue": true,
                                  "isPure": false,
                                  "lValueRequested": true,
                                  "nodeType": "IndexAccess",
                                  "src": "9940:6:32",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                },
                                "nodeType": "Assignment",
                                "operator": "=",
                                "rightHandSide": {
                                  "expression": {
                                    "baseExpression": {
                                      "id": 13154,
                                      "name": "royalties",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 13033,
                                      "src": "9949:9:32",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_array$_t_struct$_RoyaltyConfig_$12461_memory_ptr_$dyn_memory_ptr",
                                        "typeString": "struct CreatorCore.RoyaltyConfig memory[] memory"
                                      }
                                    },
                                    "id": 13156,
                                    "indexExpression": {
                                      "id": 13155,
                                      "name": "i",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 13136,
                                      "src": "9959:1:32",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                      }
                                    },
                                    "isConstant": false,
                                    "isLValue": true,
                                    "isPure": false,
                                    "lValueRequested": false,
                                    "nodeType": "IndexAccess",
                                    "src": "9949:12:32",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_struct$_RoyaltyConfig_$12461_memory_ptr",
                                      "typeString": "struct CreatorCore.RoyaltyConfig memory"
                                    }
                                  },
                                  "id": 13157,
                                  "isConstant": false,
                                  "isLValue": true,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "memberLocation": "9962:3:32",
                                  "memberName": "bps",
                                  "nodeType": "MemberAccess",
                                  "referencedDeclaration": 12460,
                                  "src": "9949:16:32",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint16",
                                    "typeString": "uint16"
                                  }
                                },
                                "src": "9940:25:32",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "id": 13159,
                              "nodeType": "ExpressionStatement",
                              "src": "9940:25:32"
                            },
                            {
                              "id": 13163,
                              "nodeType": "UncheckedBlock",
                              "src": "9983:18:32",
                              "statements": [
                                {
                                  "expression": {
                                    "id": 13161,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": false,
                                    "lValueRequested": false,
                                    "nodeType": "UnaryOperation",
                                    "operator": "++",
                                    "prefix": true,
                                    "src": "9995:3:32",
                                    "subExpression": {
                                      "id": 13160,
                                      "name": "i",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 13136,
                                      "src": "9997:1:32",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                      }
                                    },
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  },
                                  "id": 13162,
                                  "nodeType": "ExpressionStatement",
                                  "src": "9995:3:32"
                                }
                              ]
                            }
                          ]
                        },
                        "condition": {
                          "commonType": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          },
                          "id": 13141,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftExpression": {
                            "id": 13138,
                            "name": "i",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 13136,
                            "src": "9845:1:32",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "nodeType": "BinaryOperation",
                          "operator": "<",
                          "rightExpression": {
                            "expression": {
                              "id": 13139,
                              "name": "royalties",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 13033,
                              "src": "9849:9:32",
                              "typeDescriptions": {
                                "typeIdentifier": "t_array$_t_struct$_RoyaltyConfig_$12461_memory_ptr_$dyn_memory_ptr",
                                "typeString": "struct CreatorCore.RoyaltyConfig memory[] memory"
                              }
                            },
                            "id": 13140,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberLocation": "9859:6:32",
                            "memberName": "length",
                            "nodeType": "MemberAccess",
                            "src": "9849:16:32",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "src": "9845:20:32",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "id": 13165,
                        "initializationExpression": {
                          "assignments": [
                            13136
                          ],
                          "declarations": [
                            {
                              "constant": false,
                              "id": 13136,
                              "mutability": "mutable",
                              "name": "i",
                              "nameLocation": "9842:1:32",
                              "nodeType": "VariableDeclaration",
                              "scope": 13165,
                              "src": "9837:6:32",
                              "stateVariable": false,
                              "storageLocation": "default",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              },
                              "typeName": {
                                "id": 13135,
                                "name": "uint",
                                "nodeType": "ElementaryTypeName",
                                "src": "9837:4:32",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "visibility": "internal"
                            }
                          ],
                          "id": 13137,
                          "nodeType": "VariableDeclarationStatement",
                          "src": "9837:6:32"
                        },
                        "nodeType": "ForStatement",
                        "src": "9832:183:32"
                      }
                    ]
                  }
                }
              ]
            },
            "documentation": {
              "id": 13018,
              "nodeType": "StructuredDocumentation",
              "src": "8580:54:32",
              "text": " Helper to get royalties for a token"
            },
            "id": 13169,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "_getRoyalties",
            "nameLocation": "8648:13:32",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 13021,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 13020,
                  "mutability": "mutable",
                  "name": "tokenId",
                  "nameLocation": "8670:7:32",
                  "nodeType": "VariableDeclaration",
                  "scope": 13169,
                  "src": "8662:15:32",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 13019,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "8662:7:32",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "8661:17:32"
            },
            "returnParameters": {
              "id": 13028,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 13024,
                  "mutability": "mutable",
                  "name": "receivers",
                  "nameLocation": "8727:9:32",
                  "nodeType": "VariableDeclaration",
                  "scope": 13169,
                  "src": "8702:34:32",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_array$_t_address_payable_$dyn_memory_ptr",
                    "typeString": "address payable[]"
                  },
                  "typeName": {
                    "baseType": {
                      "id": 13022,
                      "name": "address",
                      "nodeType": "ElementaryTypeName",
                      "src": "8702:15:32",
                      "stateMutability": "payable",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address_payable",
                        "typeString": "address payable"
                      }
                    },
                    "id": 13023,
                    "nodeType": "ArrayTypeName",
                    "src": "8702:17:32",
                    "typeDescriptions": {
                      "typeIdentifier": "t_array$_t_address_payable_$dyn_storage_ptr",
                      "typeString": "address payable[]"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 13027,
                  "mutability": "mutable",
                  "name": "bps",
                  "nameLocation": "8755:3:32",
                  "nodeType": "VariableDeclaration",
                  "scope": 13169,
                  "src": "8738:20:32",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_array$_t_uint256_$dyn_memory_ptr",
                    "typeString": "uint256[]"
                  },
                  "typeName": {
                    "baseType": {
                      "id": 13025,
                      "name": "uint256",
                      "nodeType": "ElementaryTypeName",
                      "src": "8738:7:32",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "id": 13026,
                    "nodeType": "ArrayTypeName",
                    "src": "8738:9:32",
                    "typeDescriptions": {
                      "typeIdentifier": "t_array$_t_uint256_$dyn_storage_ptr",
                      "typeString": "uint256[]"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "8701:58:32"
            },
            "scope": 13473,
            "src": "8639:1392:32",
            "stateMutability": "view",
            "virtual": false,
            "visibility": "internal"
          },
          {
            "body": {
              "id": 13185,
              "nodeType": "Block",
              "src": "10210:55:32",
              "statements": [
                {
                  "expression": {
                    "id": 13183,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "components": [
                        {
                          "id": 13178,
                          "name": "recievers",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 13176,
                          "src": "10221:9:32",
                          "typeDescriptions": {
                            "typeIdentifier": "t_array$_t_address_payable_$dyn_memory_ptr",
                            "typeString": "address payable[] memory"
                          }
                        },
                        null
                      ],
                      "id": 13179,
                      "isConstant": false,
                      "isInlineArray": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": true,
                      "nodeType": "TupleExpression",
                      "src": "10220:13:32",
                      "typeDescriptions": {
                        "typeIdentifier": "t_tuple$_t_array$_t_address_payable_$dyn_memory_ptr_$__$",
                        "typeString": "tuple(address payable[] memory,)"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "arguments": [
                        {
                          "id": 13181,
                          "name": "tokenId",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 13172,
                          "src": "10250:7:32",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        }
                      ],
                      "expression": {
                        "argumentTypes": [
                          {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        ],
                        "id": 13180,
                        "name": "_getRoyalties",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 13169,
                        "src": "10236:13:32",
                        "typeDescriptions": {
                          "typeIdentifier": "t_function_internal_view$_t_uint256_$returns$_t_array$_t_address_payable_$dyn_memory_ptr_$_t_array$_t_uint256_$dyn_memory_ptr_$",
                          "typeString": "function (uint256) view returns (address payable[] memory,uint256[] memory)"
                        }
                      },
                      "id": 13182,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "kind": "functionCall",
                      "lValueRequested": false,
                      "nameLocations": [],
                      "names": [],
                      "nodeType": "FunctionCall",
                      "src": "10236:22:32",
                      "tryCall": false,
                      "typeDescriptions": {
                        "typeIdentifier": "t_tuple$_t_array$_t_address_payable_$dyn_memory_ptr_$_t_array$_t_uint256_$dyn_memory_ptr_$",
                        "typeString": "tuple(address payable[] memory,uint256[] memory)"
                      }
                    },
                    "src": "10220:38:32",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 13184,
                  "nodeType": "ExpressionStatement",
                  "src": "10220:38:32"
                }
              ]
            },
            "documentation": {
              "id": 13170,
              "nodeType": "StructuredDocumentation",
              "src": "10037:62:32",
              "text": " Helper to get royalty receivers for a token"
            },
            "id": 13186,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "_getRoyaltyReceivers",
            "nameLocation": "10113:20:32",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 13173,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 13172,
                  "mutability": "mutable",
                  "name": "tokenId",
                  "nameLocation": "10142:7:32",
                  "nodeType": "VariableDeclaration",
                  "scope": 13186,
                  "src": "10134:15:32",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 13171,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "10134:7:32",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "10133:17:32"
            },
            "returnParameters": {
              "id": 13177,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 13176,
                  "mutability": "mutable",
                  "name": "recievers",
                  "nameLocation": "10199:9:32",
                  "nodeType": "VariableDeclaration",
                  "scope": 13186,
                  "src": "10174:34:32",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_array$_t_address_payable_$dyn_memory_ptr",
                    "typeString": "address payable[]"
                  },
                  "typeName": {
                    "baseType": {
                      "id": 13174,
                      "name": "address",
                      "nodeType": "ElementaryTypeName",
                      "src": "10174:15:32",
                      "stateMutability": "payable",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address_payable",
                        "typeString": "address payable"
                      }
                    },
                    "id": 13175,
                    "nodeType": "ArrayTypeName",
                    "src": "10174:17:32",
                    "typeDescriptions": {
                      "typeIdentifier": "t_array$_t_address_payable_$dyn_storage_ptr",
                      "typeString": "address payable[]"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "10173:36:32"
            },
            "scope": 13473,
            "src": "10104:161:32",
            "stateMutability": "view",
            "virtual": false,
            "visibility": "internal"
          },
          {
            "body": {
              "id": 13202,
              "nodeType": "Block",
              "src": "10427:49:32",
              "statements": [
                {
                  "expression": {
                    "id": 13200,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "components": [
                        null,
                        {
                          "id": 13195,
                          "name": "bps",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 13193,
                          "src": "10440:3:32",
                          "typeDescriptions": {
                            "typeIdentifier": "t_array$_t_uint256_$dyn_memory_ptr",
                            "typeString": "uint256[] memory"
                          }
                        }
                      ],
                      "id": 13196,
                      "isConstant": false,
                      "isInlineArray": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": true,
                      "nodeType": "TupleExpression",
                      "src": "10437:7:32",
                      "typeDescriptions": {
                        "typeIdentifier": "t_tuple$__$_t_array$_t_uint256_$dyn_memory_ptr_$",
                        "typeString": "tuple(,uint256[] memory)"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "arguments": [
                        {
                          "id": 13198,
                          "name": "tokenId",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 13189,
                          "src": "10461:7:32",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        }
                      ],
                      "expression": {
                        "argumentTypes": [
                          {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        ],
                        "id": 13197,
                        "name": "_getRoyalties",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 13169,
                        "src": "10447:13:32",
                        "typeDescriptions": {
                          "typeIdentifier": "t_function_internal_view$_t_uint256_$returns$_t_array$_t_address_payable_$dyn_memory_ptr_$_t_array$_t_uint256_$dyn_memory_ptr_$",
                          "typeString": "function (uint256) view returns (address payable[] memory,uint256[] memory)"
                        }
                      },
                      "id": 13199,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "kind": "functionCall",
                      "lValueRequested": false,
                      "nameLocations": [],
                      "names": [],
                      "nodeType": "FunctionCall",
                      "src": "10447:22:32",
                      "tryCall": false,
                      "typeDescriptions": {
                        "typeIdentifier": "t_tuple$_t_array$_t_address_payable_$dyn_memory_ptr_$_t_array$_t_uint256_$dyn_memory_ptr_$",
                        "typeString": "tuple(address payable[] memory,uint256[] memory)"
                      }
                    },
                    "src": "10437:32:32",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 13201,
                  "nodeType": "ExpressionStatement",
                  "src": "10437:32:32"
                }
              ]
            },
            "documentation": {
              "id": 13187,
              "nodeType": "StructuredDocumentation",
              "src": "10271:65:32",
              "text": " Helper to get royalty basis points for a token"
            },
            "id": 13203,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "_getRoyaltyBPS",
            "nameLocation": "10350:14:32",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 13190,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 13189,
                  "mutability": "mutable",
                  "name": "tokenId",
                  "nameLocation": "10373:7:32",
                  "nodeType": "VariableDeclaration",
                  "scope": 13203,
                  "src": "10365:15:32",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 13188,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "10365:7:32",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "10364:17:32"
            },
            "returnParameters": {
              "id": 13194,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 13193,
                  "mutability": "mutable",
                  "name": "bps",
                  "nameLocation": "10422:3:32",
                  "nodeType": "VariableDeclaration",
                  "scope": 13203,
                  "src": "10405:20:32",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_array$_t_uint256_$dyn_memory_ptr",
                    "typeString": "uint256[]"
                  },
                  "typeName": {
                    "baseType": {
                      "id": 13191,
                      "name": "uint256",
                      "nodeType": "ElementaryTypeName",
                      "src": "10405:7:32",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "id": 13192,
                    "nodeType": "ArrayTypeName",
                    "src": "10405:9:32",
                    "typeDescriptions": {
                      "typeIdentifier": "t_array$_t_uint256_$dyn_storage_ptr",
                      "typeString": "uint256[]"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "10404:22:32"
            },
            "scope": 13473,
            "src": "10341:135:32",
            "stateMutability": "view",
            "virtual": false,
            "visibility": "internal"
          },
          {
            "body": {
              "id": 13257,
              "nodeType": "Block",
              "src": "10595:318:32",
              "statements": [
                {
                  "assignments": [
                    13216,
                    13219
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 13216,
                      "mutability": "mutable",
                      "name": "receivers",
                      "nameLocation": "10631:9:32",
                      "nodeType": "VariableDeclaration",
                      "scope": 13257,
                      "src": "10606:34:32",
                      "stateVariable": false,
                      "storageLocation": "memory",
                      "typeDescriptions": {
                        "typeIdentifier": "t_array$_t_address_payable_$dyn_memory_ptr",
                        "typeString": "address payable[]"
                      },
                      "typeName": {
                        "baseType": {
                          "id": 13214,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "10606:15:32",
                          "stateMutability": "payable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address_payable",
                            "typeString": "address payable"
                          }
                        },
                        "id": 13215,
                        "nodeType": "ArrayTypeName",
                        "src": "10606:17:32",
                        "typeDescriptions": {
                          "typeIdentifier": "t_array$_t_address_payable_$dyn_storage_ptr",
                          "typeString": "address payable[]"
                        }
                      },
                      "visibility": "internal"
                    },
                    {
                      "constant": false,
                      "id": 13219,
                      "mutability": "mutable",
                      "name": "bps",
                      "nameLocation": "10659:3:32",
                      "nodeType": "VariableDeclaration",
                      "scope": 13257,
                      "src": "10642:20:32",
                      "stateVariable": false,
                      "storageLocation": "memory",
                      "typeDescriptions": {
                        "typeIdentifier": "t_array$_t_uint256_$dyn_memory_ptr",
                        "typeString": "uint256[]"
                      },
                      "typeName": {
                        "baseType": {
                          "id": 13217,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "10642:7:32",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "id": 13218,
                        "nodeType": "ArrayTypeName",
                        "src": "10642:9:32",
                        "typeDescriptions": {
                          "typeIdentifier": "t_array$_t_uint256_$dyn_storage_ptr",
                          "typeString": "uint256[]"
                        }
                      },
                      "visibility": "internal"
                    }
                  ],
                  "id": 13223,
                  "initialValue": {
                    "arguments": [
                      {
                        "id": 13221,
                        "name": "tokenId",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 13205,
                        "src": "10680:7:32",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      ],
                      "id": 13220,
                      "name": "_getRoyalties",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 13169,
                      "src": "10666:13:32",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_view$_t_uint256_$returns$_t_array$_t_address_payable_$dyn_memory_ptr_$_t_array$_t_uint256_$dyn_memory_ptr_$",
                        "typeString": "function (uint256) view returns (address payable[] memory,uint256[] memory)"
                      }
                    },
                    "id": 13222,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "nameLocations": [],
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "10666:22:32",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$_t_array$_t_address_payable_$dyn_memory_ptr_$_t_array$_t_uint256_$dyn_memory_ptr_$",
                      "typeString": "tuple(address payable[] memory,uint256[] memory)"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "10605:83:32"
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "commonType": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "id": 13228,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftExpression": {
                          "expression": {
                            "id": 13225,
                            "name": "receivers",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 13216,
                            "src": "10706:9:32",
                            "typeDescriptions": {
                              "typeIdentifier": "t_array$_t_address_payable_$dyn_memory_ptr",
                              "typeString": "address payable[] memory"
                            }
                          },
                          "id": 13226,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberLocation": "10716:6:32",
                          "memberName": "length",
                          "nodeType": "MemberAccess",
                          "src": "10706:16:32",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "nodeType": "BinaryOperation",
                        "operator": "<=",
                        "rightExpression": {
                          "hexValue": "31",
                          "id": 13227,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "kind": "number",
                          "lValueRequested": false,
                          "nodeType": "Literal",
                          "src": "10726:1:32",
                          "typeDescriptions": {
                            "typeIdentifier": "t_rational_1_by_1",
                            "typeString": "int_const 1"
                          },
                          "value": "1"
                        },
                        "src": "10706:21:32",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      {
                        "hexValue": "4d6f7265207468616e203120726f79616c7479207265636569766572",
                        "id": 13229,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "string",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "10729:30:32",
                        "typeDescriptions": {
                          "typeIdentifier": "t_stringliteral_74694d19c1b4be9a45fa733d1aaae2782afce905305cd809636e222af28aa3f3",
                          "typeString": "literal_string \"More than 1 royalty receiver\""
                        },
                        "value": "More than 1 royalty receiver"
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        {
                          "typeIdentifier": "t_stringliteral_74694d19c1b4be9a45fa733d1aaae2782afce905305cd809636e222af28aa3f3",
                          "typeString": "literal_string \"More than 1 royalty receiver\""
                        }
                      ],
                      "id": 13224,
                      "name": "require",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        4294967278,
                        4294967278
                      ],
                      "referencedDeclaration": 4294967278,
                      "src": "10698:7:32",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                        "typeString": "function (bool,string memory) pure"
                      }
                    },
                    "id": 13230,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "nameLocations": [],
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "10698:62:32",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 13231,
                  "nodeType": "ExpressionStatement",
                  "src": "10698:62:32"
                },
                {
                  "condition": {
                    "commonType": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    },
                    "id": 13235,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "expression": {
                        "id": 13232,
                        "name": "receivers",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 13216,
                        "src": "10783:9:32",
                        "typeDescriptions": {
                          "typeIdentifier": "t_array$_t_address_payable_$dyn_memory_ptr",
                          "typeString": "address payable[] memory"
                        }
                      },
                      "id": 13233,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberLocation": "10793:6:32",
                      "memberName": "length",
                      "nodeType": "MemberAccess",
                      "src": "10783:16:32",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "==",
                    "rightExpression": {
                      "hexValue": "30",
                      "id": 13234,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "number",
                      "lValueRequested": false,
                      "nodeType": "Literal",
                      "src": "10803:1:32",
                      "typeDescriptions": {
                        "typeIdentifier": "t_rational_0_by_1",
                        "typeString": "int_const 0"
                      },
                      "value": "0"
                    },
                    "src": "10783:21:32",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "id": 13244,
                  "nodeType": "IfStatement",
                  "src": "10779:77:32",
                  "trueBody": {
                    "id": 13243,
                    "nodeType": "Block",
                    "src": "10806:50:32",
                    "statements": [
                      {
                        "expression": {
                          "components": [
                            {
                              "arguments": [
                                {
                                  "id": 13238,
                                  "name": "this",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 4294967268,
                                  "src": "10836:4:32",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_contract$_CreatorCore_$13473",
                                    "typeString": "contract CreatorCore"
                                  }
                                }
                              ],
                              "expression": {
                                "argumentTypes": [
                                  {
                                    "typeIdentifier": "t_contract$_CreatorCore_$13473",
                                    "typeString": "contract CreatorCore"
                                  }
                                ],
                                "id": 13237,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": true,
                                "lValueRequested": false,
                                "nodeType": "ElementaryTypeNameExpression",
                                "src": "10828:7:32",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_type$_t_address_$",
                                  "typeString": "type(address)"
                                },
                                "typeName": {
                                  "id": 13236,
                                  "name": "address",
                                  "nodeType": "ElementaryTypeName",
                                  "src": "10828:7:32",
                                  "typeDescriptions": {}
                                }
                              },
                              "id": 13239,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "kind": "typeConversion",
                              "lValueRequested": false,
                              "nameLocations": [],
                              "names": [],
                              "nodeType": "FunctionCall",
                              "src": "10828:13:32",
                              "tryCall": false,
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            {
                              "hexValue": "30",
                              "id": 13240,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "kind": "number",
                              "lValueRequested": false,
                              "nodeType": "Literal",
                              "src": "10843:1:32",
                              "typeDescriptions": {
                                "typeIdentifier": "t_rational_0_by_1",
                                "typeString": "int_const 0"
                              },
                              "value": "0"
                            }
                          ],
                          "id": 13241,
                          "isConstant": false,
                          "isInlineArray": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "nodeType": "TupleExpression",
                          "src": "10827:18:32",
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$_t_address_$_t_rational_0_by_1_$",
                            "typeString": "tuple(address,int_const 0)"
                          }
                        },
                        "functionReturnParameters": 13213,
                        "id": 13242,
                        "nodeType": "Return",
                        "src": "10820:25:32"
                      }
                    ]
                  }
                },
                {
                  "expression": {
                    "components": [
                      {
                        "baseExpression": {
                          "id": 13245,
                          "name": "receivers",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 13216,
                          "src": "10873:9:32",
                          "typeDescriptions": {
                            "typeIdentifier": "t_array$_t_address_payable_$dyn_memory_ptr",
                            "typeString": "address payable[] memory"
                          }
                        },
                        "id": 13247,
                        "indexExpression": {
                          "hexValue": "30",
                          "id": 13246,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "kind": "number",
                          "lValueRequested": false,
                          "nodeType": "Literal",
                          "src": "10883:1:32",
                          "typeDescriptions": {
                            "typeIdentifier": "t_rational_0_by_1",
                            "typeString": "int_const 0"
                          },
                          "value": "0"
                        },
                        "isConstant": false,
                        "isLValue": true,
                        "isPure": false,
                        "lValueRequested": false,
                        "nodeType": "IndexAccess",
                        "src": "10873:12:32",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address_payable",
                          "typeString": "address payable"
                        }
                      },
                      {
                        "commonType": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "id": 13254,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftExpression": {
                          "commonType": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          },
                          "id": 13252,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftExpression": {
                            "baseExpression": {
                              "id": 13248,
                              "name": "bps",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 13219,
                              "src": "10887:3:32",
                              "typeDescriptions": {
                                "typeIdentifier": "t_array$_t_uint256_$dyn_memory_ptr",
                                "typeString": "uint256[] memory"
                              }
                            },
                            "id": 13250,
                            "indexExpression": {
                              "hexValue": "30",
                              "id": 13249,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "kind": "number",
                              "lValueRequested": false,
                              "nodeType": "Literal",
                              "src": "10891:1:32",
                              "typeDescriptions": {
                                "typeIdentifier": "t_rational_0_by_1",
                                "typeString": "int_const 0"
                              },
                              "value": "0"
                            },
                            "isConstant": false,
                            "isLValue": true,
                            "isPure": false,
                            "lValueRequested": false,
                            "nodeType": "IndexAccess",
                            "src": "10887:6:32",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "nodeType": "BinaryOperation",
                          "operator": "*",
                          "rightExpression": {
                            "id": 13251,
                            "name": "value",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 13207,
                            "src": "10894:5:32",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "src": "10887:12:32",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "nodeType": "BinaryOperation",
                        "operator": "/",
                        "rightExpression": {
                          "hexValue": "3130303030",
                          "id": 13253,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "kind": "number",
                          "lValueRequested": false,
                          "nodeType": "Literal",
                          "src": "10900:5:32",
                          "typeDescriptions": {
                            "typeIdentifier": "t_rational_10000_by_1",
                            "typeString": "int_const 10000"
                          },
                          "value": "10000"
                        },
                        "src": "10887:18:32",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      }
                    ],
                    "id": 13255,
                    "isConstant": false,
                    "isInlineArray": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "nodeType": "TupleExpression",
                    "src": "10872:34:32",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$_t_address_payable_$_t_uint256_$",
                      "typeString": "tuple(address payable,uint256)"
                    }
                  },
                  "functionReturnParameters": 13213,
                  "id": 13256,
                  "nodeType": "Return",
                  "src": "10865:41:32"
                }
              ]
            },
            "id": 13258,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "_getRoyaltyInfo",
            "nameLocation": "10491:15:32",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 13208,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 13205,
                  "mutability": "mutable",
                  "name": "tokenId",
                  "nameLocation": "10515:7:32",
                  "nodeType": "VariableDeclaration",
                  "scope": 13258,
                  "src": "10507:15:32",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 13204,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "10507:7:32",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 13207,
                  "mutability": "mutable",
                  "name": "value",
                  "nameLocation": "10532:5:32",
                  "nodeType": "VariableDeclaration",
                  "scope": 13258,
                  "src": "10524:13:32",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 13206,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "10524:7:32",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "10506:32:32"
            },
            "returnParameters": {
              "id": 13213,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 13210,
                  "mutability": "mutable",
                  "name": "receiver",
                  "nameLocation": "10570:8:32",
                  "nodeType": "VariableDeclaration",
                  "scope": 13258,
                  "src": "10562:16:32",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 13209,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "10562:7:32",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 13212,
                  "mutability": "mutable",
                  "name": "amount",
                  "nameLocation": "10588:6:32",
                  "nodeType": "VariableDeclaration",
                  "scope": 13258,
                  "src": "10580:14:32",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 13211,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "10580:7:32",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "10561:34:32"
            },
            "scope": 13473,
            "src": "10482:431:32",
            "stateMutability": "view",
            "virtual": false,
            "visibility": "internal"
          },
          {
            "body": {
              "id": 13294,
              "nodeType": "Block",
              "src": "11087:229:32",
              "statements": [
                {
                  "expression": {
                    "arguments": [
                      {
                        "id": 13271,
                        "name": "receivers",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 13264,
                        "src": "11112:9:32",
                        "typeDescriptions": {
                          "typeIdentifier": "t_array$_t_address_payable_$dyn_calldata_ptr",
                          "typeString": "address payable[] calldata"
                        }
                      },
                      {
                        "id": 13272,
                        "name": "basisPoints",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 13267,
                        "src": "11123:11:32",
                        "typeDescriptions": {
                          "typeIdentifier": "t_array$_t_uint256_$dyn_calldata_ptr",
                          "typeString": "uint256[] calldata"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_array$_t_address_payable_$dyn_calldata_ptr",
                          "typeString": "address payable[] calldata"
                        },
                        {
                          "typeIdentifier": "t_array$_t_uint256_$dyn_calldata_ptr",
                          "typeString": "uint256[] calldata"
                        }
                      ],
                      "id": 13270,
                      "name": "_checkRoyalties",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 13395,
                      "src": "11096:15:32",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_pure$_t_array$_t_address_payable_$dyn_calldata_ptr_$_t_array$_t_uint256_$dyn_calldata_ptr_$returns$__$",
                        "typeString": "function (address payable[] calldata,uint256[] calldata) pure"
                      }
                    },
                    "id": 13273,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "nameLocations": [],
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "11096:39:32",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 13274,
                  "nodeType": "ExpressionStatement",
                  "src": "11096:39:32"
                },
                {
                  "expression": {
                    "id": 13278,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "nodeType": "UnaryOperation",
                    "operator": "delete",
                    "prefix": true,
                    "src": "11145:29:32",
                    "subExpression": {
                      "baseExpression": {
                        "id": 13275,
                        "name": "_tokenRoyalty",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 12473,
                        "src": "11152:13:32",
                        "typeDescriptions": {
                          "typeIdentifier": "t_mapping$_t_uint256_$_t_array$_t_struct$_RoyaltyConfig_$12461_storage_$dyn_storage_$",
                          "typeString": "mapping(uint256 => struct CreatorCore.RoyaltyConfig storage ref[] storage ref)"
                        }
                      },
                      "id": 13277,
                      "indexExpression": {
                        "id": 13276,
                        "name": "tokenId",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 13261,
                        "src": "11166:7:32",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": true,
                      "nodeType": "IndexAccess",
                      "src": "11152:22:32",
                      "typeDescriptions": {
                        "typeIdentifier": "t_array$_t_struct$_RoyaltyConfig_$12461_storage_$dyn_storage",
                        "typeString": "struct CreatorCore.RoyaltyConfig storage ref[] storage ref"
                      }
                    },
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 13279,
                  "nodeType": "ExpressionStatement",
                  "src": "11145:29:32"
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "id": 13281,
                        "name": "receivers",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 13264,
                        "src": "11198:9:32",
                        "typeDescriptions": {
                          "typeIdentifier": "t_array$_t_address_payable_$dyn_calldata_ptr",
                          "typeString": "address payable[] calldata"
                        }
                      },
                      {
                        "id": 13282,
                        "name": "basisPoints",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 13267,
                        "src": "11209:11:32",
                        "typeDescriptions": {
                          "typeIdentifier": "t_array$_t_uint256_$dyn_calldata_ptr",
                          "typeString": "uint256[] calldata"
                        }
                      },
                      {
                        "baseExpression": {
                          "id": 13283,
                          "name": "_tokenRoyalty",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 12473,
                          "src": "11222:13:32",
                          "typeDescriptions": {
                            "typeIdentifier": "t_mapping$_t_uint256_$_t_array$_t_struct$_RoyaltyConfig_$12461_storage_$dyn_storage_$",
                            "typeString": "mapping(uint256 => struct CreatorCore.RoyaltyConfig storage ref[] storage ref)"
                          }
                        },
                        "id": 13285,
                        "indexExpression": {
                          "id": 13284,
                          "name": "tokenId",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 13261,
                          "src": "11236:7:32",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "isConstant": false,
                        "isLValue": true,
                        "isPure": false,
                        "lValueRequested": false,
                        "nodeType": "IndexAccess",
                        "src": "11222:22:32",
                        "typeDescriptions": {
                          "typeIdentifier": "t_array$_t_struct$_RoyaltyConfig_$12461_storage_$dyn_storage",
                          "typeString": "struct CreatorCore.RoyaltyConfig storage ref[] storage ref"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_array$_t_address_payable_$dyn_calldata_ptr",
                          "typeString": "address payable[] calldata"
                        },
                        {
                          "typeIdentifier": "t_array$_t_uint256_$dyn_calldata_ptr",
                          "typeString": "uint256[] calldata"
                        },
                        {
                          "typeIdentifier": "t_array$_t_struct$_RoyaltyConfig_$12461_storage_$dyn_storage",
                          "typeString": "struct CreatorCore.RoyaltyConfig storage ref[] storage ref"
                        }
                      ],
                      "id": 13280,
                      "name": "_setRoyalties",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        13295,
                        13439
                      ],
                      "referencedDeclaration": 13439,
                      "src": "11184:13:32",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_nonpayable$_t_array$_t_address_payable_$dyn_calldata_ptr_$_t_array$_t_uint256_$dyn_calldata_ptr_$_t_array$_t_struct$_RoyaltyConfig_$12461_storage_$dyn_storage_ptr_$returns$__$",
                        "typeString": "function (address payable[] calldata,uint256[] calldata,struct CreatorCore.RoyaltyConfig storage ref[] storage pointer)"
                      }
                    },
                    "id": 13286,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "nameLocations": [],
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "11184:61:32",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 13287,
                  "nodeType": "ExpressionStatement",
                  "src": "11184:61:32"
                },
                {
                  "eventCall": {
                    "arguments": [
                      {
                        "id": 13289,
                        "name": "tokenId",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 13261,
                        "src": "11277:7:32",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      {
                        "id": 13290,
                        "name": "receivers",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 13264,
                        "src": "11286:9:32",
                        "typeDescriptions": {
                          "typeIdentifier": "t_array$_t_address_payable_$dyn_calldata_ptr",
                          "typeString": "address payable[] calldata"
                        }
                      },
                      {
                        "id": 13291,
                        "name": "basisPoints",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 13267,
                        "src": "11297:11:32",
                        "typeDescriptions": {
                          "typeIdentifier": "t_array$_t_uint256_$dyn_calldata_ptr",
                          "typeString": "uint256[] calldata"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        {
                          "typeIdentifier": "t_array$_t_address_payable_$dyn_calldata_ptr",
                          "typeString": "address payable[] calldata"
                        },
                        {
                          "typeIdentifier": "t_array$_t_uint256_$dyn_calldata_ptr",
                          "typeString": "uint256[] calldata"
                        }
                      ],
                      "id": 13288,
                      "name": "RoyaltiesUpdated",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 14945,
                      "src": "11260:16:32",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_event_nonpayable$_t_uint256_$_t_array$_t_address_payable_$dyn_memory_ptr_$_t_array$_t_uint256_$dyn_memory_ptr_$returns$__$",
                        "typeString": "function (uint256,address payable[] memory,uint256[] memory)"
                      }
                    },
                    "id": 13292,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "nameLocations": [],
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "11260:49:32",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 13293,
                  "nodeType": "EmitStatement",
                  "src": "11255:54:32"
                }
              ]
            },
            "documentation": {
              "id": 13259,
              "nodeType": "StructuredDocumentation",
              "src": "10919:44:32",
              "text": " Set royalties for a token"
            },
            "id": 13295,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "_setRoyalties",
            "nameLocation": "10977:13:32",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 13268,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 13261,
                  "mutability": "mutable",
                  "name": "tokenId",
                  "nameLocation": "10999:7:32",
                  "nodeType": "VariableDeclaration",
                  "scope": 13295,
                  "src": "10991:15:32",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 13260,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "10991:7:32",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 13264,
                  "mutability": "mutable",
                  "name": "receivers",
                  "nameLocation": "11035:9:32",
                  "nodeType": "VariableDeclaration",
                  "scope": 13295,
                  "src": "11008:36:32",
                  "stateVariable": false,
                  "storageLocation": "calldata",
                  "typeDescriptions": {
                    "typeIdentifier": "t_array$_t_address_payable_$dyn_calldata_ptr",
                    "typeString": "address payable[]"
                  },
                  "typeName": {
                    "baseType": {
                      "id": 13262,
                      "name": "address",
                      "nodeType": "ElementaryTypeName",
                      "src": "11008:15:32",
                      "stateMutability": "payable",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address_payable",
                        "typeString": "address payable"
                      }
                    },
                    "id": 13263,
                    "nodeType": "ArrayTypeName",
                    "src": "11008:17:32",
                    "typeDescriptions": {
                      "typeIdentifier": "t_array$_t_address_payable_$dyn_storage_ptr",
                      "typeString": "address payable[]"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 13267,
                  "mutability": "mutable",
                  "name": "basisPoints",
                  "nameLocation": "11065:11:32",
                  "nodeType": "VariableDeclaration",
                  "scope": 13295,
                  "src": "11046:30:32",
                  "stateVariable": false,
                  "storageLocation": "calldata",
                  "typeDescriptions": {
                    "typeIdentifier": "t_array$_t_uint256_$dyn_calldata_ptr",
                    "typeString": "uint256[]"
                  },
                  "typeName": {
                    "baseType": {
                      "id": 13265,
                      "name": "uint256",
                      "nodeType": "ElementaryTypeName",
                      "src": "11046:7:32",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "id": 13266,
                    "nodeType": "ArrayTypeName",
                    "src": "11046:9:32",
                    "typeDescriptions": {
                      "typeIdentifier": "t_array$_t_uint256_$dyn_storage_ptr",
                      "typeString": "uint256[]"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "10990:87:32"
            },
            "returnParameters": {
              "id": 13269,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "11087:0:32"
            },
            "scope": 13473,
            "src": "10968:348:32",
            "stateMutability": "nonpayable",
            "virtual": false,
            "visibility": "internal"
          },
          {
            "body": {
              "id": 13345,
              "nodeType": "Block",
              "src": "11520:389:32",
              "statements": [
                {
                  "expression": {
                    "arguments": [
                      {
                        "id": 13308,
                        "name": "receivers",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 13301,
                        "src": "11546:9:32",
                        "typeDescriptions": {
                          "typeIdentifier": "t_array$_t_address_payable_$dyn_calldata_ptr",
                          "typeString": "address payable[] calldata"
                        }
                      },
                      {
                        "id": 13309,
                        "name": "basisPoints",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 13304,
                        "src": "11557:11:32",
                        "typeDescriptions": {
                          "typeIdentifier": "t_array$_t_uint256_$dyn_calldata_ptr",
                          "typeString": "uint256[] calldata"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_array$_t_address_payable_$dyn_calldata_ptr",
                          "typeString": "address payable[] calldata"
                        },
                        {
                          "typeIdentifier": "t_array$_t_uint256_$dyn_calldata_ptr",
                          "typeString": "uint256[] calldata"
                        }
                      ],
                      "id": 13307,
                      "name": "_checkRoyalties",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 13395,
                      "src": "11530:15:32",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_pure$_t_array$_t_address_payable_$dyn_calldata_ptr_$_t_array$_t_uint256_$dyn_calldata_ptr_$returns$__$",
                        "typeString": "function (address payable[] calldata,uint256[] calldata) pure"
                      }
                    },
                    "id": 13310,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "nameLocations": [],
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "11530:39:32",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 13311,
                  "nodeType": "ExpressionStatement",
                  "src": "11530:39:32"
                },
                {
                  "expression": {
                    "id": 13315,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "nodeType": "UnaryOperation",
                    "operator": "delete",
                    "prefix": true,
                    "src": "11579:35:32",
                    "subExpression": {
                      "baseExpression": {
                        "id": 13312,
                        "name": "_extensionRoyalty",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 12467,
                        "src": "11586:17:32",
                        "typeDescriptions": {
                          "typeIdentifier": "t_mapping$_t_address_$_t_array$_t_struct$_RoyaltyConfig_$12461_storage_$dyn_storage_$",
                          "typeString": "mapping(address => struct CreatorCore.RoyaltyConfig storage ref[] storage ref)"
                        }
                      },
                      "id": 13314,
                      "indexExpression": {
                        "id": 13313,
                        "name": "extension",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 13298,
                        "src": "11604:9:32",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": true,
                      "nodeType": "IndexAccess",
                      "src": "11586:28:32",
                      "typeDescriptions": {
                        "typeIdentifier": "t_array$_t_struct$_RoyaltyConfig_$12461_storage_$dyn_storage",
                        "typeString": "struct CreatorCore.RoyaltyConfig storage ref[] storage ref"
                      }
                    },
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 13316,
                  "nodeType": "ExpressionStatement",
                  "src": "11579:35:32"
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "id": 13318,
                        "name": "receivers",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 13301,
                        "src": "11638:9:32",
                        "typeDescriptions": {
                          "typeIdentifier": "t_array$_t_address_payable_$dyn_calldata_ptr",
                          "typeString": "address payable[] calldata"
                        }
                      },
                      {
                        "id": 13319,
                        "name": "basisPoints",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 13304,
                        "src": "11649:11:32",
                        "typeDescriptions": {
                          "typeIdentifier": "t_array$_t_uint256_$dyn_calldata_ptr",
                          "typeString": "uint256[] calldata"
                        }
                      },
                      {
                        "baseExpression": {
                          "id": 13320,
                          "name": "_extensionRoyalty",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 12467,
                          "src": "11662:17:32",
                          "typeDescriptions": {
                            "typeIdentifier": "t_mapping$_t_address_$_t_array$_t_struct$_RoyaltyConfig_$12461_storage_$dyn_storage_$",
                            "typeString": "mapping(address => struct CreatorCore.RoyaltyConfig storage ref[] storage ref)"
                          }
                        },
                        "id": 13322,
                        "indexExpression": {
                          "id": 13321,
                          "name": "extension",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 13298,
                          "src": "11680:9:32",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "isConstant": false,
                        "isLValue": true,
                        "isPure": false,
                        "lValueRequested": false,
                        "nodeType": "IndexAccess",
                        "src": "11662:28:32",
                        "typeDescriptions": {
                          "typeIdentifier": "t_array$_t_struct$_RoyaltyConfig_$12461_storage_$dyn_storage",
                          "typeString": "struct CreatorCore.RoyaltyConfig storage ref[] storage ref"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_array$_t_address_payable_$dyn_calldata_ptr",
                          "typeString": "address payable[] calldata"
                        },
                        {
                          "typeIdentifier": "t_array$_t_uint256_$dyn_calldata_ptr",
                          "typeString": "uint256[] calldata"
                        },
                        {
                          "typeIdentifier": "t_array$_t_struct$_RoyaltyConfig_$12461_storage_$dyn_storage",
                          "typeString": "struct CreatorCore.RoyaltyConfig storage ref[] storage ref"
                        }
                      ],
                      "id": 13317,
                      "name": "_setRoyalties",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        13295,
                        13439
                      ],
                      "referencedDeclaration": 13439,
                      "src": "11624:13:32",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_nonpayable$_t_array$_t_address_payable_$dyn_calldata_ptr_$_t_array$_t_uint256_$dyn_calldata_ptr_$_t_array$_t_struct$_RoyaltyConfig_$12461_storage_$dyn_storage_ptr_$returns$__$",
                        "typeString": "function (address payable[] calldata,uint256[] calldata,struct CreatorCore.RoyaltyConfig storage ref[] storage pointer)"
                      }
                    },
                    "id": 13323,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "nameLocations": [],
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "11624:67:32",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 13324,
                  "nodeType": "ExpressionStatement",
                  "src": "11624:67:32"
                },
                {
                  "condition": {
                    "commonType": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    },
                    "id": 13330,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "id": 13325,
                      "name": "extension",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 13298,
                      "src": "11705:9:32",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "==",
                    "rightExpression": {
                      "arguments": [
                        {
                          "hexValue": "30",
                          "id": 13328,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "kind": "number",
                          "lValueRequested": false,
                          "nodeType": "Literal",
                          "src": "11726:1:32",
                          "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": 13327,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "lValueRequested": false,
                        "nodeType": "ElementaryTypeNameExpression",
                        "src": "11718:7:32",
                        "typeDescriptions": {
                          "typeIdentifier": "t_type$_t_address_$",
                          "typeString": "type(address)"
                        },
                        "typeName": {
                          "id": 13326,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "11718:7:32",
                          "typeDescriptions": {}
                        }
                      },
                      "id": 13329,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "typeConversion",
                      "lValueRequested": false,
                      "nameLocations": [],
                      "names": [],
                      "nodeType": "FunctionCall",
                      "src": "11718:10:32",
                      "tryCall": false,
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      }
                    },
                    "src": "11705:23:32",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "falseBody": {
                    "id": 13343,
                    "nodeType": "Block",
                    "src": "11813:90:32",
                    "statements": [
                      {
                        "eventCall": {
                          "arguments": [
                            {
                              "id": 13338,
                              "name": "extension",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 13298,
                              "src": "11858:9:32",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            {
                              "id": 13339,
                              "name": "receivers",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 13301,
                              "src": "11869:9:32",
                              "typeDescriptions": {
                                "typeIdentifier": "t_array$_t_address_payable_$dyn_calldata_ptr",
                                "typeString": "address payable[] calldata"
                              }
                            },
                            {
                              "id": 13340,
                              "name": "basisPoints",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 13304,
                              "src": "11880:11:32",
                              "typeDescriptions": {
                                "typeIdentifier": "t_array$_t_uint256_$dyn_calldata_ptr",
                                "typeString": "uint256[] calldata"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              },
                              {
                                "typeIdentifier": "t_array$_t_address_payable_$dyn_calldata_ptr",
                                "typeString": "address payable[] calldata"
                              },
                              {
                                "typeIdentifier": "t_array$_t_uint256_$dyn_calldata_ptr",
                                "typeString": "uint256[] calldata"
                              }
                            ],
                            "id": 13337,
                            "name": "ExtensionRoyaltiesUpdated",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 14967,
                            "src": "11832:25:32",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_event_nonpayable$_t_address_$_t_array$_t_address_payable_$dyn_memory_ptr_$_t_array$_t_uint256_$dyn_memory_ptr_$returns$__$",
                              "typeString": "function (address,address payable[] memory,uint256[] memory)"
                            }
                          },
                          "id": 13341,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "nameLocations": [],
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "11832:60:32",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 13342,
                        "nodeType": "EmitStatement",
                        "src": "11827:65:32"
                      }
                    ]
                  },
                  "id": 13344,
                  "nodeType": "IfStatement",
                  "src": "11701:202:32",
                  "trueBody": {
                    "id": 13336,
                    "nodeType": "Block",
                    "src": "11730:77:32",
                    "statements": [
                      {
                        "eventCall": {
                          "arguments": [
                            {
                              "id": 13332,
                              "name": "receivers",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 13301,
                              "src": "11773:9:32",
                              "typeDescriptions": {
                                "typeIdentifier": "t_array$_t_address_payable_$dyn_calldata_ptr",
                                "typeString": "address payable[] calldata"
                              }
                            },
                            {
                              "id": 13333,
                              "name": "basisPoints",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 13304,
                              "src": "11784:11:32",
                              "typeDescriptions": {
                                "typeIdentifier": "t_array$_t_uint256_$dyn_calldata_ptr",
                                "typeString": "uint256[] calldata"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_array$_t_address_payable_$dyn_calldata_ptr",
                                "typeString": "address payable[] calldata"
                              },
                              {
                                "typeIdentifier": "t_array$_t_uint256_$dyn_calldata_ptr",
                                "typeString": "uint256[] calldata"
                              }
                            ],
                            "id": 13331,
                            "name": "DefaultRoyaltiesUpdated",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 14953,
                            "src": "11749:23:32",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_event_nonpayable$_t_array$_t_address_payable_$dyn_memory_ptr_$_t_array$_t_uint256_$dyn_memory_ptr_$returns$__$",
                              "typeString": "function (address payable[] memory,uint256[] memory)"
                            }
                          },
                          "id": 13334,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "nameLocations": [],
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "11749:47:32",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 13335,
                        "nodeType": "EmitStatement",
                        "src": "11744:52:32"
                      }
                    ]
                  }
                }
              ]
            },
            "documentation": {
              "id": 13296,
              "nodeType": "StructuredDocumentation",
              "src": "11322:63:32",
              "text": " Set royalties for all tokens of an extension"
            },
            "id": 13346,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "_setRoyaltiesExtension",
            "nameLocation": "11399:22:32",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 13305,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 13298,
                  "mutability": "mutable",
                  "name": "extension",
                  "nameLocation": "11430:9:32",
                  "nodeType": "VariableDeclaration",
                  "scope": 13346,
                  "src": "11422:17:32",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 13297,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "11422:7:32",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 13301,
                  "mutability": "mutable",
                  "name": "receivers",
                  "nameLocation": "11468:9:32",
                  "nodeType": "VariableDeclaration",
                  "scope": 13346,
                  "src": "11441:36:32",
                  "stateVariable": false,
                  "storageLocation": "calldata",
                  "typeDescriptions": {
                    "typeIdentifier": "t_array$_t_address_payable_$dyn_calldata_ptr",
                    "typeString": "address payable[]"
                  },
                  "typeName": {
                    "baseType": {
                      "id": 13299,
                      "name": "address",
                      "nodeType": "ElementaryTypeName",
                      "src": "11441:15:32",
                      "stateMutability": "payable",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address_payable",
                        "typeString": "address payable"
                      }
                    },
                    "id": 13300,
                    "nodeType": "ArrayTypeName",
                    "src": "11441:17:32",
                    "typeDescriptions": {
                      "typeIdentifier": "t_array$_t_address_payable_$dyn_storage_ptr",
                      "typeString": "address payable[]"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 13304,
                  "mutability": "mutable",
                  "name": "basisPoints",
                  "nameLocation": "11498:11:32",
                  "nodeType": "VariableDeclaration",
                  "scope": 13346,
                  "src": "11479:30:32",
                  "stateVariable": false,
                  "storageLocation": "calldata",
                  "typeDescriptions": {
                    "typeIdentifier": "t_array$_t_uint256_$dyn_calldata_ptr",
                    "typeString": "uint256[]"
                  },
                  "typeName": {
                    "baseType": {
                      "id": 13302,
                      "name": "uint256",
                      "nodeType": "ElementaryTypeName",
                      "src": "11479:7:32",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "id": 13303,
                    "nodeType": "ArrayTypeName",
                    "src": "11479:9:32",
                    "typeDescriptions": {
                      "typeIdentifier": "t_array$_t_uint256_$dyn_storage_ptr",
                      "typeString": "uint256[]"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "11421:89:32"
            },
            "returnParameters": {
              "id": 13306,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "11520:0:32"
            },
            "scope": 13473,
            "src": "11390:519:32",
            "stateMutability": "nonpayable",
            "virtual": false,
            "visibility": "internal"
          },
          {
            "body": {
              "id": 13394,
              "nodeType": "Block",
              "src": "12105:322:32",
              "statements": [
                {
                  "expression": {
                    "arguments": [
                      {
                        "commonType": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "id": 13361,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftExpression": {
                          "expression": {
                            "id": 13357,
                            "name": "receivers",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 13350,
                            "src": "12123:9:32",
                            "typeDescriptions": {
                              "typeIdentifier": "t_array$_t_address_payable_$dyn_calldata_ptr",
                              "typeString": "address payable[] calldata"
                            }
                          },
                          "id": 13358,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberLocation": "12133:6:32",
                          "memberName": "length",
                          "nodeType": "MemberAccess",
                          "src": "12123:16:32",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "nodeType": "BinaryOperation",
                        "operator": "==",
                        "rightExpression": {
                          "expression": {
                            "id": 13359,
                            "name": "basisPoints",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 13353,
                            "src": "12143:11:32",
                            "typeDescriptions": {
                              "typeIdentifier": "t_array$_t_uint256_$dyn_calldata_ptr",
                              "typeString": "uint256[] calldata"
                            }
                          },
                          "id": 13360,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberLocation": "12155:6:32",
                          "memberName": "length",
                          "nodeType": "MemberAccess",
                          "src": "12143:18:32",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "src": "12123:38:32",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      {
                        "hexValue": "496e76616c696420696e707574",
                        "id": 13362,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "string",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "12163:15:32",
                        "typeDescriptions": {
                          "typeIdentifier": "t_stringliteral_af39b50065ba9648c753f781fa674704d13ce8309cf446a262799d7aceba8e5b",
                          "typeString": "literal_string \"Invalid input\""
                        },
                        "value": "Invalid input"
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        {
                          "typeIdentifier": "t_stringliteral_af39b50065ba9648c753f781fa674704d13ce8309cf446a262799d7aceba8e5b",
                          "typeString": "literal_string \"Invalid input\""
                        }
                      ],
                      "id": 13356,
                      "name": "require",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        4294967278,
                        4294967278
                      ],
                      "referencedDeclaration": 4294967278,
                      "src": "12115:7:32",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                        "typeString": "function (bool,string memory) pure"
                      }
                    },
                    "id": 13363,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "nameLocations": [],
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "12115:64:32",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 13364,
                  "nodeType": "ExpressionStatement",
                  "src": "12115:64:32"
                },
                {
                  "assignments": [
                    13366
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 13366,
                      "mutability": "mutable",
                      "name": "totalBasisPoints",
                      "nameLocation": "12197:16:32",
                      "nodeType": "VariableDeclaration",
                      "scope": 13394,
                      "src": "12189:24:32",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "typeName": {
                        "id": 13365,
                        "name": "uint256",
                        "nodeType": "ElementaryTypeName",
                        "src": "12189:7:32",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "visibility": "internal"
                    }
                  ],
                  "id": 13367,
                  "nodeType": "VariableDeclarationStatement",
                  "src": "12189:24:32"
                },
                {
                  "body": {
                    "id": 13385,
                    "nodeType": "Block",
                    "src": "12261:90:32",
                    "statements": [
                      {
                        "expression": {
                          "id": 13379,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftHandSide": {
                            "id": 13375,
                            "name": "totalBasisPoints",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 13366,
                            "src": "12275:16:32",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "nodeType": "Assignment",
                          "operator": "+=",
                          "rightHandSide": {
                            "baseExpression": {
                              "id": 13376,
                              "name": "basisPoints",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 13353,
                              "src": "12295:11:32",
                              "typeDescriptions": {
                                "typeIdentifier": "t_array$_t_uint256_$dyn_calldata_ptr",
                                "typeString": "uint256[] calldata"
                              }
                            },
                            "id": 13378,
                            "indexExpression": {
                              "id": 13377,
                              "name": "i",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 13369,
                              "src": "12307:1:32",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "nodeType": "IndexAccess",
                            "src": "12295:14:32",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "src": "12275:34:32",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "id": 13380,
                        "nodeType": "ExpressionStatement",
                        "src": "12275:34:32"
                      },
                      {
                        "id": 13384,
                        "nodeType": "UncheckedBlock",
                        "src": "12323:18:32",
                        "statements": [
                          {
                            "expression": {
                              "id": 13382,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "nodeType": "UnaryOperation",
                              "operator": "++",
                              "prefix": true,
                              "src": "12335:3:32",
                              "subExpression": {
                                "id": 13381,
                                "name": "i",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 13369,
                                "src": "12337:1:32",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "id": 13383,
                            "nodeType": "ExpressionStatement",
                            "src": "12335:3:32"
                          }
                        ]
                      }
                    ]
                  },
                  "condition": {
                    "commonType": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    },
                    "id": 13374,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "id": 13371,
                      "name": "i",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 13369,
                      "src": "12236:1:32",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "<",
                    "rightExpression": {
                      "expression": {
                        "id": 13372,
                        "name": "basisPoints",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 13353,
                        "src": "12240:11:32",
                        "typeDescriptions": {
                          "typeIdentifier": "t_array$_t_uint256_$dyn_calldata_ptr",
                          "typeString": "uint256[] calldata"
                        }
                      },
                      "id": 13373,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberLocation": "12252:6:32",
                      "memberName": "length",
                      "nodeType": "MemberAccess",
                      "src": "12240:18:32",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "src": "12236:22:32",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "id": 13386,
                  "initializationExpression": {
                    "assignments": [
                      13369
                    ],
                    "declarations": [
                      {
                        "constant": false,
                        "id": 13369,
                        "mutability": "mutable",
                        "name": "i",
                        "nameLocation": "12233:1:32",
                        "nodeType": "VariableDeclaration",
                        "scope": 13386,
                        "src": "12228:6:32",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 13368,
                          "name": "uint",
                          "nodeType": "ElementaryTypeName",
                          "src": "12228:4:32",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "id": 13370,
                    "nodeType": "VariableDeclarationStatement",
                    "src": "12228:6:32"
                  },
                  "nodeType": "ForStatement",
                  "src": "12223:128:32"
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "commonType": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "id": 13390,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftExpression": {
                          "id": 13388,
                          "name": "totalBasisPoints",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 13366,
                          "src": "12368:16:32",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "nodeType": "BinaryOperation",
                        "operator": "<",
                        "rightExpression": {
                          "hexValue": "3130303030",
                          "id": 13389,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "kind": "number",
                          "lValueRequested": false,
                          "nodeType": "Literal",
                          "src": "12387:5:32",
                          "typeDescriptions": {
                            "typeIdentifier": "t_rational_10000_by_1",
                            "typeString": "int_const 10000"
                          },
                          "value": "10000"
                        },
                        "src": "12368:24:32",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      {
                        "hexValue": "496e76616c696420746f74616c20726f79616c74696573",
                        "id": 13391,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "string",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "12394:25:32",
                        "typeDescriptions": {
                          "typeIdentifier": "t_stringliteral_bdeae8abc7e2f0e6881f3618c066b1b8be917729ca4a34e4ef407f79dd9f7a90",
                          "typeString": "literal_string \"Invalid total royalties\""
                        },
                        "value": "Invalid total royalties"
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        {
                          "typeIdentifier": "t_stringliteral_bdeae8abc7e2f0e6881f3618c066b1b8be917729ca4a34e4ef407f79dd9f7a90",
                          "typeString": "literal_string \"Invalid total royalties\""
                        }
                      ],
                      "id": 13387,
                      "name": "require",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        4294967278,
                        4294967278
                      ],
                      "referencedDeclaration": 4294967278,
                      "src": "12360:7:32",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                        "typeString": "function (bool,string memory) pure"
                      }
                    },
                    "id": 13392,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "nameLocations": [],
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "12360:60:32",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 13393,
                  "nodeType": "ExpressionStatement",
                  "src": "12360:60:32"
                }
              ]
            },
            "documentation": {
              "id": 13347,
              "nodeType": "StructuredDocumentation",
              "src": "11915:77:32",
              "text": " Helper function to check that royalties provided are valid"
            },
            "id": 13395,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "_checkRoyalties",
            "nameLocation": "12006:15:32",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 13354,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 13350,
                  "mutability": "mutable",
                  "name": "receivers",
                  "nameLocation": "12049:9:32",
                  "nodeType": "VariableDeclaration",
                  "scope": 13395,
                  "src": "12022:36:32",
                  "stateVariable": false,
                  "storageLocation": "calldata",
                  "typeDescriptions": {
                    "typeIdentifier": "t_array$_t_address_payable_$dyn_calldata_ptr",
                    "typeString": "address payable[]"
                  },
                  "typeName": {
                    "baseType": {
                      "id": 13348,
                      "name": "address",
                      "nodeType": "ElementaryTypeName",
                      "src": "12022:15:32",
                      "stateMutability": "payable",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address_payable",
                        "typeString": "address payable"
                      }
                    },
                    "id": 13349,
                    "nodeType": "ArrayTypeName",
                    "src": "12022:17:32",
                    "typeDescriptions": {
                      "typeIdentifier": "t_array$_t_address_payable_$dyn_storage_ptr",
                      "typeString": "address payable[]"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 13353,
                  "mutability": "mutable",
                  "name": "basisPoints",
                  "nameLocation": "12079:11:32",
                  "nodeType": "VariableDeclaration",
                  "scope": 13395,
                  "src": "12060:30:32",
                  "stateVariable": false,
                  "storageLocation": "calldata",
                  "typeDescriptions": {
                    "typeIdentifier": "t_array$_t_uint256_$dyn_calldata_ptr",
                    "typeString": "uint256[]"
                  },
                  "typeName": {
                    "baseType": {
                      "id": 13351,
                      "name": "uint256",
                      "nodeType": "ElementaryTypeName",
                      "src": "12060:7:32",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "id": 13352,
                    "nodeType": "ArrayTypeName",
                    "src": "12060:9:32",
                    "typeDescriptions": {
                      "typeIdentifier": "t_array$_t_uint256_$dyn_storage_ptr",
                      "typeString": "uint256[]"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "12021:70:32"
            },
            "returnParameters": {
              "id": 13355,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "12105:0:32"
            },
            "scope": 13473,
            "src": "11997:430:32",
            "stateMutability": "pure",
            "virtual": false,
            "visibility": "private"
          },
          {
            "body": {
              "id": 13438,
              "nodeType": "Block",
              "src": "12625:332:32",
              "statements": [
                {
                  "body": {
                    "id": 13436,
                    "nodeType": "Block",
                    "src": "12673:278:32",
                    "statements": [
                      {
                        "expression": {
                          "arguments": [
                            {
                              "arguments": [
                                {
                                  "baseExpression": {
                                    "id": 13420,
                                    "name": "receivers",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 13399,
                                    "src": "12790:9:32",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_array$_t_address_payable_$dyn_calldata_ptr",
                                      "typeString": "address payable[] calldata"
                                    }
                                  },
                                  "id": 13422,
                                  "indexExpression": {
                                    "id": 13421,
                                    "name": "i",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 13410,
                                    "src": "12800:1:32",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  },
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "nodeType": "IndexAccess",
                                  "src": "12790:12:32",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_address_payable",
                                    "typeString": "address payable"
                                  }
                                },
                                {
                                  "arguments": [
                                    {
                                      "baseExpression": {
                                        "id": 13425,
                                        "name": "basisPoints",
                                        "nodeType": "Identifier",
                                        "overloadedDeclarations": [],
                                        "referencedDeclaration": 13402,
                                        "src": "12840:11:32",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_array$_t_uint256_$dyn_calldata_ptr",
                                          "typeString": "uint256[] calldata"
                                        }
                                      },
                                      "id": 13427,
                                      "indexExpression": {
                                        "id": 13426,
                                        "name": "i",
                                        "nodeType": "Identifier",
                                        "overloadedDeclarations": [],
                                        "referencedDeclaration": 13410,
                                        "src": "12852:1:32",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_uint256",
                                          "typeString": "uint256"
                                        }
                                      },
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": false,
                                      "lValueRequested": false,
                                      "nodeType": "IndexAccess",
                                      "src": "12840:14:32",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                      }
                                    }
                                  ],
                                  "expression": {
                                    "argumentTypes": [
                                      {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                      }
                                    ],
                                    "id": 13424,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": true,
                                    "lValueRequested": false,
                                    "nodeType": "ElementaryTypeNameExpression",
                                    "src": "12833:6:32",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_type$_t_uint16_$",
                                      "typeString": "type(uint16)"
                                    },
                                    "typeName": {
                                      "id": 13423,
                                      "name": "uint16",
                                      "nodeType": "ElementaryTypeName",
                                      "src": "12833:6:32",
                                      "typeDescriptions": {}
                                    }
                                  },
                                  "id": 13428,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "kind": "typeConversion",
                                  "lValueRequested": false,
                                  "nameLocations": [],
                                  "names": [],
                                  "nodeType": "FunctionCall",
                                  "src": "12833:22:32",
                                  "tryCall": false,
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint16",
                                    "typeString": "uint16"
                                  }
                                }
                              ],
                              "expression": {
                                "argumentTypes": [
                                  {
                                    "typeIdentifier": "t_address_payable",
                                    "typeString": "address payable"
                                  },
                                  {
                                    "typeIdentifier": "t_uint16",
                                    "typeString": "uint16"
                                  }
                                ],
                                "id": 13419,
                                "name": "RoyaltyConfig",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 12461,
                                "src": "12719:13:32",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_type$_t_struct$_RoyaltyConfig_$12461_storage_ptr_$",
                                  "typeString": "type(struct CreatorCore.RoyaltyConfig storage pointer)"
                                }
                              },
                              "id": 13429,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "kind": "structConstructorCall",
                              "lValueRequested": false,
                              "nameLocations": [
                                "12780:8:32",
                                "12828:3:32"
                              ],
                              "names": [
                                "receiver",
                                "bps"
                              ],
                              "nodeType": "FunctionCall",
                              "src": "12719:176:32",
                              "tryCall": false,
                              "typeDescriptions": {
                                "typeIdentifier": "t_struct$_RoyaltyConfig_$12461_memory_ptr",
                                "typeString": "struct CreatorCore.RoyaltyConfig memory"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_struct$_RoyaltyConfig_$12461_memory_ptr",
                                "typeString": "struct CreatorCore.RoyaltyConfig memory"
                              }
                            ],
                            "expression": {
                              "id": 13416,
                              "name": "royalties",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 13406,
                              "src": "12687:9:32",
                              "typeDescriptions": {
                                "typeIdentifier": "t_array$_t_struct$_RoyaltyConfig_$12461_storage_$dyn_storage_ptr",
                                "typeString": "struct CreatorCore.RoyaltyConfig storage ref[] storage pointer"
                              }
                            },
                            "id": 13418,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberLocation": "12697:4:32",
                            "memberName": "push",
                            "nodeType": "MemberAccess",
                            "src": "12687:14:32",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_arraypush_nonpayable$_t_array$_t_struct$_RoyaltyConfig_$12461_storage_$dyn_storage_ptr_$_t_struct$_RoyaltyConfig_$12461_storage_$returns$__$attached_to$_t_array$_t_struct$_RoyaltyConfig_$12461_storage_$dyn_storage_ptr_$",
                              "typeString": "function (struct CreatorCore.RoyaltyConfig storage ref[] storage pointer,struct CreatorCore.RoyaltyConfig storage ref)"
                            }
                          },
                          "id": 13430,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "nameLocations": [],
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "12687:222:32",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 13431,
                        "nodeType": "ExpressionStatement",
                        "src": "12687:222:32"
                      },
                      {
                        "id": 13435,
                        "nodeType": "UncheckedBlock",
                        "src": "12923:18:32",
                        "statements": [
                          {
                            "expression": {
                              "id": 13433,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "nodeType": "UnaryOperation",
                              "operator": "++",
                              "prefix": true,
                              "src": "12935:3:32",
                              "subExpression": {
                                "id": 13432,
                                "name": "i",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 13410,
                                "src": "12937:1:32",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "id": 13434,
                            "nodeType": "ExpressionStatement",
                            "src": "12935:3:32"
                          }
                        ]
                      }
                    ]
                  },
                  "condition": {
                    "commonType": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    },
                    "id": 13415,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "id": 13412,
                      "name": "i",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 13410,
                      "src": "12648:1:32",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "<",
                    "rightExpression": {
                      "expression": {
                        "id": 13413,
                        "name": "basisPoints",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 13402,
                        "src": "12652:11:32",
                        "typeDescriptions": {
                          "typeIdentifier": "t_array$_t_uint256_$dyn_calldata_ptr",
                          "typeString": "uint256[] calldata"
                        }
                      },
                      "id": 13414,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberLocation": "12664:6:32",
                      "memberName": "length",
                      "nodeType": "MemberAccess",
                      "src": "12652:18:32",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "src": "12648:22:32",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "id": 13437,
                  "initializationExpression": {
                    "assignments": [
                      13410
                    ],
                    "declarations": [
                      {
                        "constant": false,
                        "id": 13410,
                        "mutability": "mutable",
                        "name": "i",
                        "nameLocation": "12645:1:32",
                        "nodeType": "VariableDeclaration",
                        "scope": 13437,
                        "src": "12640:6:32",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 13409,
                          "name": "uint",
                          "nodeType": "ElementaryTypeName",
                          "src": "12640:4:32",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "id": 13411,
                    "nodeType": "VariableDeclarationStatement",
                    "src": "12640:6:32"
                  },
                  "nodeType": "ForStatement",
                  "src": "12635:316:32"
                }
              ]
            },
            "documentation": {
              "id": 13396,
              "nodeType": "StructuredDocumentation",
              "src": "12433:51:32",
              "text": " Helper function to set royalties"
            },
            "id": 13439,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "_setRoyalties",
            "nameLocation": "12498:13:32",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 13407,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 13399,
                  "mutability": "mutable",
                  "name": "receivers",
                  "nameLocation": "12539:9:32",
                  "nodeType": "VariableDeclaration",
                  "scope": 13439,
                  "src": "12512:36:32",
                  "stateVariable": false,
                  "storageLocation": "calldata",
                  "typeDescriptions": {
                    "typeIdentifier": "t_array$_t_address_payable_$dyn_calldata_ptr",
                    "typeString": "address payable[]"
                  },
                  "typeName": {
                    "baseType": {
                      "id": 13397,
                      "name": "address",
                      "nodeType": "ElementaryTypeName",
                      "src": "12512:15:32",
                      "stateMutability": "payable",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address_payable",
                        "typeString": "address payable"
                      }
                    },
                    "id": 13398,
                    "nodeType": "ArrayTypeName",
                    "src": "12512:17:32",
                    "typeDescriptions": {
                      "typeIdentifier": "t_array$_t_address_payable_$dyn_storage_ptr",
                      "typeString": "address payable[]"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 13402,
                  "mutability": "mutable",
                  "name": "basisPoints",
                  "nameLocation": "12569:11:32",
                  "nodeType": "VariableDeclaration",
                  "scope": 13439,
                  "src": "12550:30:32",
                  "stateVariable": false,
                  "storageLocation": "calldata",
                  "typeDescriptions": {
                    "typeIdentifier": "t_array$_t_uint256_$dyn_calldata_ptr",
                    "typeString": "uint256[]"
                  },
                  "typeName": {
                    "baseType": {
                      "id": 13400,
                      "name": "uint256",
                      "nodeType": "ElementaryTypeName",
                      "src": "12550:7:32",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "id": 13401,
                    "nodeType": "ArrayTypeName",
                    "src": "12550:9:32",
                    "typeDescriptions": {
                      "typeIdentifier": "t_array$_t_uint256_$dyn_storage_ptr",
                      "typeString": "uint256[]"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 13406,
                  "mutability": "mutable",
                  "name": "royalties",
                  "nameLocation": "12606:9:32",
                  "nodeType": "VariableDeclaration",
                  "scope": 13439,
                  "src": "12582:33:32",
                  "stateVariable": false,
                  "storageLocation": "storage",
                  "typeDescriptions": {
                    "typeIdentifier": "t_array$_t_struct$_RoyaltyConfig_$12461_storage_$dyn_storage_ptr",
                    "typeString": "struct CreatorCore.RoyaltyConfig[]"
                  },
                  "typeName": {
                    "baseType": {
                      "id": 13404,
                      "nodeType": "UserDefinedTypeName",
                      "pathNode": {
                        "id": 13403,
                        "name": "RoyaltyConfig",
                        "nameLocations": [
                          "12582:13:32"
                        ],
                        "nodeType": "IdentifierPath",
                        "referencedDeclaration": 12461,
                        "src": "12582:13:32"
                      },
                      "referencedDeclaration": 12461,
                      "src": "12582:13:32",
                      "typeDescriptions": {
                        "typeIdentifier": "t_struct$_RoyaltyConfig_$12461_storage_ptr",
                        "typeString": "struct CreatorCore.RoyaltyConfig"
                      }
                    },
                    "id": 13405,
                    "nodeType": "ArrayTypeName",
                    "src": "12582:15:32",
                    "typeDescriptions": {
                      "typeIdentifier": "t_array$_t_struct$_RoyaltyConfig_$12461_storage_$dyn_storage_ptr",
                      "typeString": "struct CreatorCore.RoyaltyConfig[]"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "12511:105:32"
            },
            "returnParameters": {
              "id": 13408,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "12625:0:32"
            },
            "scope": 13473,
            "src": "12489:468:32",
            "stateMutability": "nonpayable",
            "virtual": false,
            "visibility": "private"
          },
          {
            "body": {
              "id": 13453,
              "nodeType": "Block",
              "src": "13111:97:32",
              "statements": [
                {
                  "expression": {
                    "id": 13447,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "id": 13445,
                      "name": "_approveTransferBase",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 12434,
                      "src": "13121:20:32",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "id": 13446,
                      "name": "extension",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 13442,
                      "src": "13144:9:32",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      }
                    },
                    "src": "13121:32:32",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "id": 13448,
                  "nodeType": "ExpressionStatement",
                  "src": "13121:32:32"
                },
                {
                  "eventCall": {
                    "arguments": [
                      {
                        "id": 13450,
                        "name": "extension",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 13442,
                        "src": "13191:9:32",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      ],
                      "id": 13449,
                      "name": "ApproveTransferUpdated",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 14957,
                      "src": "13168:22:32",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_event_nonpayable$_t_address_$returns$__$",
                        "typeString": "function (address)"
                      }
                    },
                    "id": 13451,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "nameLocations": [],
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "13168:33:32",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 13452,
                  "nodeType": "EmitStatement",
                  "src": "13163:38:32"
                }
              ]
            },
            "documentation": {
              "id": 13440,
              "nodeType": "StructuredDocumentation",
              "src": "12963:82:32",
              "text": " @dev Set the base contract's approve transfer contract location"
            },
            "id": 13454,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "_setApproveTransferBase",
            "nameLocation": "13059:23:32",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 13443,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 13442,
                  "mutability": "mutable",
                  "name": "extension",
                  "nameLocation": "13091:9:32",
                  "nodeType": "VariableDeclaration",
                  "scope": 13454,
                  "src": "13083:17:32",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 13441,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "13083:7:32",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "13082:19:32"
            },
            "returnParameters": {
              "id": 13444,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "13111:0:32"
            },
            "scope": 13473,
            "src": "13050:158:32",
            "stateMutability": "nonpayable",
            "virtual": false,
            "visibility": "internal"
          },
          {
            "baseFunctions": [
              15196
            ],
            "body": {
              "id": 13463,
              "nodeType": "Block",
              "src": "13352:44:32",
              "statements": [
                {
                  "expression": {
                    "id": 13461,
                    "name": "_approveTransferBase",
                    "nodeType": "Identifier",
                    "overloadedDeclarations": [],
                    "referencedDeclaration": 12434,
                    "src": "13369:20:32",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "functionReturnParameters": 13460,
                  "id": 13462,
                  "nodeType": "Return",
                  "src": "13362:27:32"
                }
              ]
            },
            "documentation": {
              "id": 13455,
              "nodeType": "StructuredDocumentation",
              "src": "13214:62:32",
              "text": " @dev See {ICreatorCore-getApproveTransfer}."
            },
            "functionSelector": "22f374d0",
            "id": 13464,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "getApproveTransfer",
            "nameLocation": "13290:18:32",
            "nodeType": "FunctionDefinition",
            "overrides": {
              "id": 13457,
              "nodeType": "OverrideSpecifier",
              "overrides": [],
              "src": "13325:8:32"
            },
            "parameters": {
              "id": 13456,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "13308:2:32"
            },
            "returnParameters": {
              "id": 13460,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 13459,
                  "mutability": "mutable",
                  "name": "",
                  "nameLocation": "-1:-1:-1",
                  "nodeType": "VariableDeclaration",
                  "scope": 13464,
                  "src": "13343:7:32",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 13458,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "13343:7:32",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "13342:9:32"
            },
            "scope": 13473,
            "src": "13281:115:32",
            "stateMutability": "view",
            "virtual": false,
            "visibility": "external"
          },
          {
            "documentation": {
              "id": 13465,
              "nodeType": "StructuredDocumentation",
              "src": "13402:61:32",
              "text": " @dev Get the extension for the given token"
            },
            "id": 13472,
            "implemented": false,
            "kind": "function",
            "modifiers": [],
            "name": "_tokenExtension",
            "nameLocation": "13477:15:32",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 13468,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 13467,
                  "mutability": "mutable",
                  "name": "tokenId",
                  "nameLocation": "13501:7:32",
                  "nodeType": "VariableDeclaration",
                  "scope": 13472,
                  "src": "13493:15:32",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 13466,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "13493:7:32",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "13492:17:32"
            },
            "returnParameters": {
              "id": 13471,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 13470,
                  "mutability": "mutable",
                  "name": "",
                  "nameLocation": "-1:-1:-1",
                  "nodeType": "VariableDeclaration",
                  "scope": 13472,
                  "src": "13540:7:32",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 13469,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "13540:7:32",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "13539:9:32"
            },
            "scope": 13473,
            "src": "13468:81:32",
            "stateMutability": "view",
            "virtual": true,
            "visibility": "internal"
          }
        ],
        "scope": 13474,
        "src": "663:12888:32",
        "usedErrors": []
      }
    ],
    "src": "33:13519:32"
  },
  "compiler": {
    "name": "solc",
    "version": "0.8.19+commit.7dd6d404.Emscripten.clang"
  },
  "networks": {},
  "schemaVersion": "3.4.12",
  "updatedAt": "2023-03-22T17:07:39.738Z",
  "devdoc": {
    "details": "Core creator implementation",
    "kind": "dev",
    "methods": {
      "blacklistExtension(address)": {
        "details": "blacklist an extension.  Can only be called by contract owner or admin. This function will destroy all ability to reference the metadata of any tokens created by the specified extension. It will also unregister the extension if needed. Returns True if removed, False if already removed."
      },
      "getApproveTransfer()": {
        "details": "See {ICreatorCore-getApproveTransfer}."
      },
      "getExtensions()": {
        "details": "See {ICreatorCore-getExtensions}."
      },
      "getRoyalties(uint256)": {
        "details": "Get royalites of a token.  Returns list of receivers and basisPoints"
      },
      "registerExtension(address,string)": {
        "details": "add an extension.  Can only be called by contract owner or admin. extension address must point to a contract implementing ICreatorExtension. Returns True if newly added, False if already added."
      },
      "registerExtension(address,string,bool)": {
        "details": "add an extension.  Can only be called by contract owner or admin. extension address must point to a contract implementing ICreatorExtension. Returns True if newly added, False if already added."
      },
      "setApproveTransfer(address)": {
        "details": "Set the default approve transfer contract location."
      },
      "setApproveTransferExtension(bool)": {
        "details": "See {ICreatorCore-setApproveTransferExtension}."
      },
      "setBaseTokenURI(string)": {
        "details": "set the baseTokenURI for tokens with no extension.  Can only be called by owner/admin. For tokens with no uri configured, tokenURI will return \"uri+tokenId\""
      },
      "setBaseTokenURIExtension(string)": {
        "details": "set the baseTokenURI of an extension.  Can only be called by extension."
      },
      "setBaseTokenURIExtension(string,bool)": {
        "details": "set the baseTokenURI of an extension.  Can only be called by extension. For tokens with no uri configured, tokenURI will return \"uri+tokenId\""
      },
      "setMintPermissions(address,address)": {
        "details": "set a permissions contract for an extension.  Used to control minting."
      },
      "setRoyalties(address[],uint256[])": {
        "details": "Set default royalties"
      },
      "setRoyalties(uint256,address[],uint256[])": {
        "details": "Set royalties of a token"
      },
      "setRoyaltiesExtension(address,address[],uint256[])": {
        "details": "Set royalties of an extension"
      },
      "setTokenURI(uint256,string)": {
        "details": "set the tokenURI of a token with no extension.  Can only be called by owner/admin."
      },
      "setTokenURI(uint256[],string[])": {
        "details": "set the tokenURI of multiple tokens with no extension.  Can only be called by owner/admin."
      },
      "setTokenURIExtension(uint256,string)": {
        "details": "set the tokenURI of a token extension.  Can only be called by extension that minted token."
      },
      "setTokenURIExtension(uint256[],string[])": {
        "details": "set the tokenURI of a token extension for multiple tokens.  Can only be called by extension that minted token."
      },
      "setTokenURIPrefix(string)": {
        "details": "set the common prefix for tokens with no extension.  Can only be called by owner/admin. If configured, and a token has a uri set, tokenURI will return \"prefixURI+tokenURI\" Useful if you want to use ipfs/arweave"
      },
      "setTokenURIPrefixExtension(string)": {
        "details": "set the common prefix of an extension.  Can only be called by extension. If configured, and a token has a uri set, tokenURI will return \"prefixURI+tokenURI\" Useful if you want to use ipfs/arweave"
      },
      "supportsInterface(bytes4)": {
        "details": "See {IERC165-supportsInterface}."
      },
      "tokenExtension(uint256)": {
        "details": "get the extension of a given token"
      },
      "unregisterExtension(address)": {
        "details": "add an extension.  Can only be called by contract owner or admin. Returns True if removed, False if already removed."
      }
    },
    "stateVariables": {
      "_INTERFACE_ID_ROYALTIES_CREATORCORE": {
        "details": "CreatorCore  bytes4(keccak256('getRoyalties(uint256)')) == 0xbb3bafd6  => 0xbb3bafd6 = 0xbb3bafd6"
      },
      "_INTERFACE_ID_ROYALTIES_EIP2981": {
        "details": "EIP-2981 bytes4(keccak256(\"royaltyInfo(uint256,uint256)\")) == 0x2a55205a => 0x2a55205a = 0x2a55205a"
      },
      "_INTERFACE_ID_ROYALTIES_FOUNDATION": {
        "details": "Foundation  bytes4(keccak256('getFees(uint256)')) == 0xd5a06d4c  => 0xd5a06d4c = 0xd5a06d4c"
      },
      "_INTERFACE_ID_ROYALTIES_RARIBLE": {
        "details": "Rarible: RoyaltiesV1  bytes4(keccak256('getFeeRecipients(uint256)')) == 0xb9c4d9fb  bytes4(keccak256('getFeeBps(uint256)')) == 0x0ebd4c7f  => 0xb9c4d9fb ^ 0x0ebd4c7f = 0xb7799584"
      }
    },
    "version": 1
  },
  "userdoc": {
    "kind": "user",
    "methods": {},
    "version": 1
  }
}